From pbrezina at redhat.com Thu Aug 20 13:02:10 2015 Content-Type: multipart/mixed; boundary="===============4221040553505546418==" MIME-Version: 1.0 From: =?utf-8?q?Pavel_B=C5=99ezina_=3Cpbrezina_at_redhat=2Ecom=3E?= To: sssd-devel at lists.fedorahosted.org Subject: Re: [SSSD] [PATCHES] support local overrides Date: Mon, 27 Jul 2015 12:00:25 +0200 Message-ID: <55B60139.1050507@redhat.com> In-Reply-To: 20150726181422.GB14813@Jakubs-MacBook-Pro.local --===============4221040553505546418== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable On 07/26/2015 08:14 PM, Jakub Hrozek wrote: > On Fri, Jul 24, 2015 at 01:08:17PM +0200, Pavel B=C5=99ezina wrote: >> https://fedorahosted.org/sssd/ticket/2584 > btw (unrelated to these patches) it seems strange to require the user of > the sysdb database to connect to the db and then separately initialize > subdomains...I would vote for merging that code.. +1 >> + >> +#include >> +#include >> + >> +#include "confdb/confdb.h" >> + >> +struct sss_tool_ctx { >> + struct confdb_ctx *confdb; >> + char *confdb_path; >> + >> + char *default_domain; >> + struct sss_domain_info *domains; > > I wonder if the tool_ctx must be open for consumers? Currently only > domains is used, maybe we could get away with a getter and an opaque > structure? We can always make the structure public in future, but if > it's public from the start, then it's easier to add cruft.. I think it is not worth the effort with such simple structure. I am all for opaque structures but here is just no gain in code safety. It = would only make code lines bigger. >> +enum sss_tool_domain { >> + SSS_TOOL_DOMAIN_REQUIRED, >> + SSS_TOOL_DOMAIN_OPTIONAL >> +}; >> + >> +int sss_tool_parse_name(TALLOC_CTX *mem_ctx, >> + struct sss_tool_ctx *tool_ctx, >> + const char *input, >> + enum sss_tool_domain require_domain, > > Do we need require_domain now that you added the getpwnam? No, removed. >> + >> + DESCRIPTION >> + >> + sss_override enables to create a client-= side >> + view and allows to change selected values of specific user >> + and groups. This change takes effect only on client machine. > ~~~~~~~~~~~~= ~~~ > Here I think we should definitely say local. >> + >> + >> + > > We should say that overriding attributes of users and groups only is > supported (IIRC we have an RFE somewhere to override netgroups > per-client...) It says "specific user and groups". That says exactly this, I think. >> +static errno_t prepare_view(struct sss_domain_info *domain) >> +{ >> + char *viewname =3D NULL; >> + errno_t ret; >> + >> + ret =3D sysdb_get_view_name(NULL, domain->sysdb, &viewname); >> + if (ret !=3D EOK && ret !=3D ENOENT) { >> + DEBUG(SSSDBG_OP_FAILURE, "sysdb_get_view_name() failed.\n"); >> + return ret; >> + } >> + >> + if (ret =3D=3D EOK) { >> + if (!is_default_view(viewname)) { >> + DEBUG(SSSDBG_TRACE_FUNC, "There already exists view %s. " >> + "Only one view is supported. Nothing to do.\n", viewn= ame); > > This debug level should be more verbose. > >> + ret =3D EEXIST; >> + goto done; >> + } else if (strcmp(viewname, LOCALVIEW) =3D=3D 0) { >> + DEBUG(SSSDBG_TRACE_FUNC, "%s view is already present.\n", v= iewname); >> + ret =3D EOK; >> + goto done; >> + } >> + } >> + >> + DEBUG(SSSDBG_TRACE_FUNC, "Creating %s view.\n", LOCALVIEW); >> + >> + ret =3D sysdb_update_view_name(domain->sysdb, LOCALVIEW); >> + if (ret =3D=3D EOK) { >> + printf("SSSD needs to be restarted for the changes to take effe= ct.\n"); > > Hmm, why? Can we instead send a signal to SSSD to pick up the changes? > (If yes, then it can be a follow-up patch..) No, it is not possible to change view on the fly the way views are = implemented. >> +{ >> + char *anchor; >> + char *safe_dn; >> + errno_t ret; >> + >> + ret =3D sysdb_dn_sanitize(mem_ctx, obj_dn, &safe_dn); > > Is this sanitization required? Shouldn't a sysdb DN be already > sanitized? Yes, it is. Values in sections of dn are sanitized but we also need to = sanitize commas separating sections. Since it is used only as an = internal identifier we do not need to care about double escaping. > >> + if (ret !=3D EOK) { >> + DEBUG(SSSDBG_CRIT_FAILURE, "sysdb_dn_sanitize() failed\n"); >> + return NULL; >> + } >> + >> + anchor =3D talloc_asprintf(mem_ctx, ":%s:%s", LOCALVIEW, safe_dn); >> + >> + talloc_free(safe_dn); >> + >> + return anchor; >> +} >> + > >> + enum sysdb_member_type type, >> + const char *name, >> + struct sss_domain_info *domain, >> + struct sss_domain_info *domain= s, >> + struct sss_domain_info **_new_= domain) >> +{ >> + TALLOC_CTX *tmp_ctx; >> + struct sss_domain_info *dom; >> + struct ldb_result *res; >> + const char *dn; >> + const char *strtype; >> + bool check_next; >> + errno_t ret; >> + >> + tmp_ctx =3D talloc_new(NULL); >> + if (tmp_ctx =3D=3D NULL) { >> + return NULL; >> + } >> + >> + /* Ensure that the object is in cache. */ >> + switch (type) { >> + case SYSDB_MEMBER_USER: >> + if (getpwnam(name) =3D=3D NULL) { >> + ret =3D ENOENT; >> + goto done; >> + } >> + break; >> + case SYSDB_MEMBER_GROUP: >> + if (getgrnam(name) =3D=3D NULL) { >> + ret =3D ENOENT; >> + goto done; >> + } >> + break; >> + default: >> + DEBUG(SSSDBG_CRIT_FAILURE, "Unsupported member type %d\n", type= ); >> + ret =3D ERR_INTERNAL; >> + goto done; >> + } >> + >> + /* Find domain if it is unknown. */ >> + if (domain =3D=3D NULL) { >> + check_next =3D true; >> + dom =3D domains; >> + } else { >> + check_next =3D false; >> + dom =3D domain; >> + } >> + >> + do { >> + switch (type) { >> + case SYSDB_MEMBER_USER: >> + DEBUG(SSSDBG_TRACE_FUNC, "Trying to find user %s@%s\n", >> + name, dom->name); >> + ret =3D sysdb_getpwnam(tmp_ctx, dom, name, &res); >> + strtype =3D "user"; >> + break; >> + case SYSDB_MEMBER_GROUP: >> + DEBUG(SSSDBG_TRACE_FUNC, "Trying to find group %s@%s\n", >> + name, dom->name); >> + ret =3D sysdb_getgrnam(tmp_ctx, dom, name, &res); >> + strtype =3D "group"; >> + break; >> + default: >> + DEBUG(SSSDBG_CRIT_FAILURE, "Unsupported member type %d\n", = type); >> + ret =3D ERR_INTERNAL; >> + goto done; >> + } >> + >> + if (ret =3D=3D EOK && res->count =3D=3D 0) { >> + ret =3D ENOENT; >> + >> + if (check_next) { >> + dom =3D dom->next; >> + continue; >> + } >> + } >> + >> + if (ret !=3D EOK) { >> + DEBUG(SSSDBG_CRIT_FAILURE, "Unable to find %s %s@%s [%d]: %= s\n", >> + strtype, name, dom->name, ret, sss_strerror(ret)); >> + goto done; >> + } else if (res->count !=3D 1) { >> + DEBUG(SSSDBG_CRIT_FAILURE, "More than one %s found?\n", str= type); >> + ret =3D ERR_INTERNAL; >> + goto done; >> + } >> + >> + check_next =3D false; >> + } while (check_next && dom !=3D NULL); >> + >> + DEBUG(SSSDBG_TRACE_FUNC, "Domain of %s %s is %s\n", >> + strtype, name, dom->name); > > Hmm looks like you should have a check for res validity here, for cases > no domain match.. Added a dom validity. > btw it might be nice to split this large function into smaller ones. > Maybe the do-while check could be a separate function returning res. There is no way to split it that would be actually beneficial. There are = three blocks: a) beginning - getpwnam b) middle - iteration c) end - linearized dn If you take away the iteration you can directly return dn from the new = function since you don't need res at all so that would also took away = the end. And the beginning belongs to the function were iteration is IMHO. >> + >> + dn =3D ldb_dn_get_linearized(res->msgs[0]->dn); >> + if (dn =3D=3D NULL) { >> + DEBUG(SSSDBG_CRIT_FAILURE, "ldb_dn_get_linearized() failed.\n"); >> + ret =3D ENOMEM; >> + goto done; >> + } >> + >> + talloc_steal(mem_ctx, dn); >> + *_new_domain =3D dom; >> + >> + ret =3D EOK; >> + >> +done: >> + talloc_free(tmp_ctx); >> + >> + if (ret !=3D EOK) { >> + return NULL; >> + } >> + >> + return dn; >> +} > --===============4221040553505546418== Content-Type: text/x-patch MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-SYSDB-prepare-for-LOCAL-view.patch" RnJvbSA0NWU4MDk4OGVkYzZkYWI3MDMyMDkwNjg5NDJmYWQ1Mzc4ZDM4ZTcyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/UGF2ZWw9MjBCPUM1PTk5ZXppbmE/PSA8cGJy ZXppbmFAcmVkaGF0LmNvbT4KRGF0ZTogRnJpLCAyNCBKdWwgMjAxNSAwOTo1NToyOCArMDIwMApT dWJqZWN0OiBbUEFUQ0ggMS8zXSBTWVNEQjogcHJlcGFyZSBmb3IgTE9DQUwgdmlldwoKT2JqZWN0 cyBkb2Vzbid0IGhhdmUgdG8gaGF2ZSBvdmVycmlkZUROIHNwZWNpZmllZCB3aGVuIHVzaW5nIExP Q0FMIHZpZXcuClNpbmNlIHRoZSB2aWV3IGlzIG5vdCBzdG9yZWQgb24gdGhlIHNlcnZlciB3ZSBk byBub3Qgd2FudCB0byBjb250YWN0CkxEQVAgdGhlcmVmb3JlIHdlIHNwZWNpYWwgY2FzZSBMT0NB TCB2aWV3IHNheWluZyB0aGF0IGl0IGlzIE9LIHRoYXQKdGhpcyBhdHRyaWJ1dGUgaXMgbWlzc2lu Zy4KClByZXBhcmF0aW9uIGZvcjoKaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3Nzc2QvdGlja2V0 LzI1ODQKLS0tCiBzcmMvZGIvc3lzZGIuaCAgICAgICAgICAgICAgICAgICAgICB8ICAzICstCiBz cmMvZGIvc3lzZGJfdmlld3MuYyAgICAgICAgICAgICAgICB8ICA3ICsrKysrCiBzcmMvdGVzdHMv Y21vY2thL3Rlc3Rfc3lzZGJfdmlld3MuYyB8IDYyICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNzEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlv bigtKQoKZGlmZiAtLWdpdCBhL3NyYy9kYi9zeXNkYi5oIGIvc3JjL2RiL3N5c2RiLmgKaW5kZXgg MGY3NDVjY2IxYTY0NmQ3N2JhNGFkM2Q3MTRkNWY0ZGNlMGE1MTIxMS4uM2JiMmU1MDMyMDU5NGQx YjZmN2UzZGFhM2E2NDEzNGU0NmI2MGQyMiAxMDA2NDQKLS0tIGEvc3JjL2RiL3N5c2RiLmgKKysr IGIvc3JjL2RiL3N5c2RiLmgKQEAgLTE1Nyw5ICsxNTcsMTAgQEAKICNkZWZpbmUgU1lTREJfQURf QUNDT1VOVF9FWFBJUkVTICJhZEFjY291bnRFeHBpcmVzIgogI2RlZmluZSBTWVNEQl9BRF9VU0VS X0FDQ09VTlRfQ09OVFJPTCAiYWRVc2VyQWNjb3VudENvbnRyb2wiCiAKKyNkZWZpbmUgU1lTREJf REVGQVVMVF9WSUVXX05BTUUgImRlZmF1bHQiCisjZGVmaW5lIFNZU0RCX0xPQ0FMX1ZJRVdfTkFN RSAiTE9DQUwiIC8qIHJlc2VydmVkIGZvciBjbGllbnQtc2lkZSBvdmVycmlkZXMgKi8KICNkZWZp bmUgU1lTREJfVklFV19DTEFTUyAidmlldyIKICNkZWZpbmUgU1lTREJfVklFV19OQU1FICJ2aWV3 TmFtZSIKLSNkZWZpbmUgU1lTREJfREVGQVVMVF9WSUVXX05BTUUgImRlZmF1bHQiCiAjZGVmaW5l IFNZU0RCX09WRVJSSURFX0NMQVNTICJvdmVycnJpZGUiCiAjZGVmaW5lIFNZU0RCX09WRVJSSURF X0FOQ0hPUl9VVUlEICJvdmVycmlkZUFuY2hvclVVSUQiCiAjZGVmaW5lIFNZU0RCX09WRVJSSURF X1VTRVJfQ0xBU1MgInVzZXJPdmVycmlkZSIKZGlmZiAtLWdpdCBhL3NyYy9kYi9zeXNkYl92aWV3 cy5jIGIvc3JjL2RiL3N5c2RiX3ZpZXdzLmMKaW5kZXggYWFkZDYwMThmNGQxZTJjYTMzZTJlMDBk ZDhiMTNiNTVhOGMwM2YzZS4uZjQ1NjAzNDRlOTkyZDgyNDVlMzdhNWE0ZTJmNzRjN2I3MGNlNDFl YyAxMDA2NDQKLS0tIGEvc3JjL2RiL3N5c2RiX3ZpZXdzLmMKKysrIGIvc3JjL2RiL3N5c2RiX3Zp ZXdzLmMKQEAgLTExODYsOSArMTE4NiwxNiBAQCBlcnJub190IHN5c2RiX2FkZF9vdmVycmlkZXNf dG9fb2JqZWN0KHN0cnVjdCBzc3NfZG9tYWluX2luZm8gKmRvbWFpbiwKICAgICAgICAgb3ZlcnJp ZGVfZG5fc3RyID0gbGRiX21zZ19maW5kX2F0dHJfYXNfc3RyaW5nKG9iaiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNZU0RCX09WRVJSSURF X0ROLCBOVUxMKTsKICAgICAgICAgaWYgKG92ZXJyaWRlX2RuX3N0ciA9PSBOVUxMKSB7CisgICAg ICAgICAgICBpZiAoc3RyY21wKGRvbWFpbi0+dmlld19uYW1lLCBTWVNEQl9MT0NBTF9WSUVXX05B TUUpID09IDApIHsKKyAgICAgICAgICAgICAgICAvKiBMT0NBTCB2aWV3IGRvZXNuJ3QgaGF2ZSB0 byBoYXZlIG92ZXJyaWRlRE4gc3BlY2lmaWVkLiAqLworICAgICAgICAgICAgICAgIHJldCA9IEVP SzsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisKICAgICAgICAg ICAgIERFQlVHKFNTU0RCR19DUklUX0ZBSUxVUkUsCiAgICAgICAgICAgICAgICAgICAiTWlzc2lu ZyBvdmVycmlkZSBETiBmb3Igb2JqZXh0IFslc10uXG4iLAogICAgICAgICAgICAgICAgICAgbGRi X2RuX2dldF9saW5lYXJpemVkKG9iai0+ZG4pKTsKKwogICAgICAgICAgICAgcmV0ID0gRU5PRU5U OwogICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvdGVz dHMvY21vY2thL3Rlc3Rfc3lzZGJfdmlld3MuYyBiL3NyYy90ZXN0cy9jbW9ja2EvdGVzdF9zeXNk Yl92aWV3cy5jCmluZGV4IDFmYjU5ODIxOWU5ZWU1ODFlNDY1ZGRiYjMyYmE5ZjI1NDQ2MDBjMjYu LjVkMmQ1MGVmOTQwOTM2NjQ0NjUzMDViNTM4MzFlZDg3OGNmMmM4NzEgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0cy9jbW9ja2EvdGVzdF9zeXNkYl92aWV3cy5jCisrKyBiL3NyYy90ZXN0cy9jbW9ja2Ev dGVzdF9zeXNkYl92aWV3cy5jCkBAIC0yNzUsNiArMjc1LDY0IEBAIHZvaWQgdGVzdF9zeXNkYl9h ZGRfb3ZlcnJpZGVzX3RvX29iamVjdCh2b2lkICoqc3RhdGUpCiAgICAgYXNzZXJ0X2ludF9lcXVh bChsZGJfdmFsX3N0cmluZ19jbXAoJmVsLT52YWx1ZXNbMV0sICJPVkVSUklERUtFWTIiKSwgMCk7 CiB9CiAKK3ZvaWQgdGVzdF9zeXNkYl9hZGRfb3ZlcnJpZGVzX3RvX29iamVjdF9sb2NhbCh2b2lk ICoqc3RhdGUpCit7CisgICAgaW50IHJldDsKKyAgICBzdHJ1Y3QgbGRiX21lc3NhZ2UgKm9yaWc7 CisgICAgc3RydWN0IGxkYl9tZXNzYWdlX2VsZW1lbnQgKmVsOworICAgIGNoYXIgKnRtcF9zdHI7 CisgICAgc3RydWN0IHN5c2RiX3Rlc3RfY3R4ICp0ZXN0X2N0eCA9IHRhbGxvY19nZXRfdHlwZV9h Ym9ydCgqc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3Qgc3lzZGJfdGVzdF9jdHgpOworCisgICAgb3JpZyA9IGxkYl9t c2dfbmV3KHRlc3RfY3R4KTsKKyAgICBhc3NlcnRfbm9uX251bGwob3JpZyk7CisKKyAgICB0bXBf c3RyID0gdGFsbG9jX3N0cmR1cChvcmlnLCAgIk9SSUdOQU1FIik7CisgICAgcmV0ID0gbGRiX21z Z19hZGRfc3RyaW5nKG9yaWcsIFNZU0RCX05BTUUsIHRtcF9zdHIpOworICAgIGFzc2VydF9pbnRf ZXF1YWwocmV0LCBFT0spOworCisgICAgdG1wX3N0ciA9IHRhbGxvY19zdHJkdXAob3JpZywgICJP UklHR0VDT1MiKTsKKyAgICByZXQgPSBsZGJfbXNnX2FkZF9zdHJpbmcob3JpZywgU1lTREJfR0VD T1MsIHRtcF9zdHIpOworICAgIGFzc2VydF9pbnRfZXF1YWwocmV0LCBFT0spOworCisgICAgdGVz dF9jdHgtPmRvbWFpbi0+aGFzX3ZpZXdzID0gdHJ1ZTsKKyAgICB0ZXN0X2N0eC0+ZG9tYWluLT52 aWV3X25hbWUgPSAiTE9DQUwiOworCisgICAgcmV0ID0gc3lzZGJfYWRkX292ZXJyaWRlc190b19v YmplY3QodGVzdF9jdHgtPmRvbWFpbiwgb3JpZywgTlVMTCwgTlVMTCk7CisgICAgYXNzZXJ0X2lu dF9lcXVhbChyZXQsIEVPSyk7Cit9CisKK3ZvaWQgdGVzdF9zeXNkYl9hZGRfb3ZlcnJpZGVzX3Rv X29iamVjdF9taXNzaW5nX292ZXJyaWRlZG4odm9pZCAqKnN0YXRlKQoreworICAgIGludCByZXQ7 CisgICAgc3RydWN0IGxkYl9tZXNzYWdlICpvcmlnOworICAgIHN0cnVjdCBsZGJfbWVzc2FnZV9l bGVtZW50ICplbDsKKyAgICBjaGFyICp0bXBfc3RyOworICAgIHN0cnVjdCBzeXNkYl90ZXN0X2N0 eCAqdGVzdF9jdHggPSB0YWxsb2NfZ2V0X3R5cGVfYWJvcnQoKnN0YXRlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN5c2Ri X3Rlc3RfY3R4KTsKKworICAgIG9yaWcgPSBsZGJfbXNnX25ldyh0ZXN0X2N0eCk7CisgICAgYXNz ZXJ0X25vbl9udWxsKG9yaWcpOworCisgICAgb3JpZy0+ZG4gPSBsZGJfZG5fbmV3KG9yaWcsIHRl c3RfY3R4LT5kb21haW4tPnN5c2RiLT5sZGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJj bj1zb21lZG4sZGM9ZXhhbXBsZSxkYz1jb20iKTsKKyAgICBhc3NlcnRfbm9uX251bGwob3JpZy0+ ZG4pOworCisgICAgdG1wX3N0ciA9IHRhbGxvY19zdHJkdXAob3JpZywgICJPUklHTkFNRSIpOwor ICAgIHJldCA9IGxkYl9tc2dfYWRkX3N0cmluZyhvcmlnLCBTWVNEQl9OQU1FLCB0bXBfc3RyKTsK KyAgICBhc3NlcnRfaW50X2VxdWFsKHJldCwgRU9LKTsKKworICAgIHRtcF9zdHIgPSB0YWxsb2Nf c3RyZHVwKG9yaWcsICAiT1JJR0dFQ09TIik7CisgICAgcmV0ID0gbGRiX21zZ19hZGRfc3RyaW5n KG9yaWcsIFNZU0RCX0dFQ09TLCB0bXBfc3RyKTsKKyAgICBhc3NlcnRfaW50X2VxdWFsKHJldCwg RU9LKTsKKworICAgIHRlc3RfY3R4LT5kb21haW4tPmhhc192aWV3cyA9IHRydWU7CisgICAgdGVz dF9jdHgtPmRvbWFpbi0+dmlld19uYW1lID0gIk5PTi1MT0NBTCI7CisKKyAgICByZXQgPSBzeXNk Yl9hZGRfb3ZlcnJpZGVzX3RvX29iamVjdCh0ZXN0X2N0eC0+ZG9tYWluLCBvcmlnLCBOVUxMLCBO VUxMKTsKKyAgICBhc3NlcnRfaW50X2VxdWFsKHJldCwgRU5PRU5UKTsKK30KKwogdm9pZCB0ZXN0 X3NwbGl0X2lwYV9hbmNob3Iodm9pZCAqKnN0YXRlKQogewogICAgIGludCByZXQ7CkBAIC05MTcs NiArOTc1LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zeXNkYl9zZXR1cCwgdGVz dF9zeXNkYl90ZWFyZG93biksCiAgICAgICAgIGNtb2NrYV91bml0X3Rlc3Rfc2V0dXBfdGVhcmRv d24odGVzdF9zeXNkYl9hZGRfb3ZlcnJpZGVzX3RvX29iamVjdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N5c2RiX3NldHVwLCB0ZXN0X3N5c2RiX3RlYXJk b3duKSwKKyAgICAgICAgY21vY2thX3VuaXRfdGVzdF9zZXR1cF90ZWFyZG93bih0ZXN0X3N5c2Ri X2FkZF9vdmVycmlkZXNfdG9fb2JqZWN0X2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRlc3Rfc3lzZGJfc2V0dXAsIHRlc3Rfc3lzZGJfdGVhcmRvd24pLAor ICAgICAgICBjbW9ja2FfdW5pdF90ZXN0X3NldHVwX3RlYXJkb3duKHRlc3Rfc3lzZGJfYWRkX292 ZXJyaWRlc190b19vYmplY3RfbWlzc2luZ19vdmVycmlkZWRuLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3lzZGJfc2V0dXAsIHRlc3Rfc3lzZGJfdGVhcmRv d24pLAogICAgICAgICBjbW9ja2FfdW5pdF90ZXN0X3NldHVwX3RlYXJkb3duKHRlc3Rfc3BsaXRf aXBhX2FuY2hvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0 X3N5c2RiX3NldHVwLCB0ZXN0X3N5c2RiX3RlYXJkb3duKSwKICAgICAgICAgY21vY2thX3VuaXRf dGVzdF9zZXR1cF90ZWFyZG93bih0ZXN0X3N5c2RiX2RlbGV0ZV92aWV3X3RyZWUsCi0tIAoyLjEu MAoK --===============4221040553505546418== Content-Type: text/x-patch MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0002-TOOLS-add-common-command-framework.patch" RnJvbSA1YTdiNDZhZWUzYWNkOWExZDQwY2M4NWNiODA4NWU5ZDQzZjQ4YTdlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/UGF2ZWw9MjBCPUM1PTk5ZXppbmE/PSA8cGJy ZXppbmFAcmVkaGF0LmNvbT4KRGF0ZTogV2VkLCAyMiBKdWwgMjAxNSAxMDowMjowMiArMDIwMApT dWJqZWN0OiBbUEFUQ0ggMi8zXSBUT09MUzogYWRkIGNvbW1vbiBjb21tYW5kIGZyYW1ld29yawoK QWRkIGdlbmVyYWwgZnJhbWV3b3JrIHRvIHNpbXBsaWZ5IGNyZWF0aW5nICJjbWQgQ09NTUFORCBb T1BUSU9OUy4uLl0iCnN0eWxlIHRvb2xzLgoKUHJlcGFyYXRpb24gZm9yOgpodHRwczovL2ZlZG9y YWhvc3RlZC5vcmcvc3NzZC90aWNrZXQvMjU4NAotLS0KIE1ha2VmaWxlLmFtICAgICAgICAgICAg ICAgICAgfCAgIDUgKy0KIHNyYy90b29scy9jb21tb24vc3NzX3Rvb2xzLmMgfCA0MDYgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rvb2xzL2NvbW1vbi9z c3NfdG9vbHMuaCB8ICA5MSArKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDUwMSBpbnNlcnRp b25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rvb2xzL2NvbW1v bi9zc3NfdG9vbHMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90b29scy9jb21tb24vc3NzX3Rv b2xzLmgKCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCmluZGV4IGI4Y2Jj NmRmMjNkZWQxZWRiOTQ1YTcwOWI2ZGJlMWM0NGViNTQwMTcuLjFlZGVjYzQ4M2M2MWQwNDU2MmI3 YmZkOTA4NjE0NmU5Mzk2M2I3NGUgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmFtCisrKyBiL01ha2Vm aWxlLmFtCkBAIC00NDUsNyArNDQ1LDkgQEAgU1NTRF9UT09MU19PQkogPSBcCiAgICAgc3JjL3Rv b2xzL3Rvb2xzX3V0aWwuYyBcCiAgICAgc3JjL3Rvb2xzL2ZpbGVzLmMgXAogICAgIHNyYy90b29s cy9zZWxpbnV4LmMgXAotICAgIHNyYy91dGlsL25zY2QuYworICAgIHNyYy90b29scy9jb21tb24v c3NzX3Rvb2xzLmMgXAorICAgIHNyYy91dGlsL25zY2QuYyBcCisgICAgJChOVUxMKQogCiBTU1NE X0xDTF9UT09MU19PQkogPSBcCiAgICAgc3JjL3Nzc19jbGllbnQvY29tbW9uLmMgXApAQCAtNjQx LDYgKzY0Myw3IEBAIGRpc3Rfbm9pbnN0X0hFQURFUlMgPSBcCiAgICAgc3JjL2xpYi9pZG1hcC9z c3NfaWRtYXBfcHJpdmF0ZS5oIFwKICAgICBzcmMvbGliL3NpZnAvc3NzX3NpZnBfcHJpdmF0ZS5o IFwKICAgICBzcmMvdGVzdHMvY21vY2thL3Rlc3RfdXRpbHMuaCBcCisgICAgc3JjL3Rvb2xzL2Nv bW1vbi9zc3NfdG9vbHMuaCBcCiAgICAgJChOVUxMKQogCiAKZGlmZiAtLWdpdCBhL3NyYy90b29s cy9jb21tb24vc3NzX3Rvb2xzLmMgYi9zcmMvdG9vbHMvY29tbW9uL3Nzc190b29scy5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAuLjZiYmNlM2EyNWRkZGRjMGIyM2ViYzEwOGE5MTdhMzhlOTQ5ODFiNjUKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvdG9vbHMvY29tbW9uL3Nzc190b29scy5jCkBAIC0wLDAgKzEsNDA2IEBA CisvKgorICAgIEF1dGhvcnM6CisgICAgICAgIFBhdmVsIELFmWV6aW5hIDxwYnJlemluYUByZWRo YXQuY29tPgorCisgICAgQ29weXJpZ2h0IChDKSAyMDE1IFJlZCBIYXQKKworICAgIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAg ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlIDx0YWxsb2MuaD4KKyNpbmNs dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxwb3B0Lmg+CisK KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ1dGlsL3V0aWwuaCIKKyNpbmNsdWRlICJj b25mZGIvY29uZmRiLmgiCisjaW5jbHVkZSAiZGIvc3lzZGIuaCIKKyNpbmNsdWRlICJ0b29scy9j b21tb24vc3NzX3Rvb2xzLmgiCisKK3N0cnVjdCBzc3NfY21kbGluZSB7CisgICAgY29uc3QgY2hh ciAqZXhlYzsgLyogYXJndlswXSAqLworICAgIGNvbnN0IGNoYXIgKmNvbW1hbmQ7IC8qIGNvbW1h bmQgbmFtZSAqLworICAgIGludCBhcmdjOyAvKiByZXN0IG9mIGFyZ3VtZW50cyAqLworICAgIGNv bnN0IGNoYXIgKiphcmd2OworfTsKKworc3RhdGljIHZvaWQgc3NzX3Rvb2xfY29tbW9uX29wdHMo c3RydWN0IHNzc190b29sX2N0eCAqdG9vbF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgKmFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworICAgIHBvcHRDb250ZXh0 IHBjOworICAgIGludCBkZWJ1ZyA9IFNTU0RCR19ERUZBVUxUOworICAgIGludCBvcmlnX2FyZ2Mg PSAqYXJnYzsKKyAgICBpbnQgb3B0OworCisgICAgc3RydWN0IHBvcHRPcHRpb24gb3B0aW9uc1td ID0geworICAgICAgICB7ImRlYnVnIiwgJ1wwJywgUE9QVF9BUkdfSU5UIHwgUE9QVF9BUkdGTEFH X1NUUklQLCAmZGVidWcsCisgICAgICAgICAgICAwLCBfKCJUaGUgZGVidWcgbGV2ZWwgdG8gcnVu IHdpdGgiKSwgTlVMTCB9LAorICAgICAgICBQT1BUX1RBQkxFRU5ECisgICAgfTsKKworICAgIHBj ID0gcG9wdEdldENvbnRleHQoYXJndlswXSwgb3JpZ19hcmdjLCBhcmd2LCBvcHRpb25zLCAwKTsK KyAgICB3aGlsZSAoKG9wdCA9IHBvcHRHZXROZXh0T3B0KHBjKSkgIT0gLTEpIHsKKyAgICAgICAg LyogZG8gbm90aGluZyAqLworICAgIH0KKworICAgIC8qIFN0cmlwIGNvbW1vbiBvcHRpb25zIGZy b20gYXJndW1lbnRzLiBXZSB3aWxsIGRpc2NhcmRfY29uc3QgaGVyZSwKKyAgICAgKiBzaW5jZSBp dCBpcyBub3Qgd29ydGggdGhlIHRyb3VibGUgdG8gY29udmVydCBpdCBiYWNrIGFuZCBmb3J0aC4g Ki8KKyAgICAqYXJnYyA9IHBvcHRTdHJpcHBlZEFyZ3YocGMsIG9yaWdfYXJnYywgZGlzY2FyZF9j b25zdF9wKGNoYXIgKiwgYXJndikpOworCisgICAgREVCVUdfQ0xJX0lOSVQoZGVidWcpOworCisg ICAgcG9wdEZyZWVDb250ZXh0KHBjKTsKK30KKworc3RhdGljIGVycm5vX3Qgc3NzX3Rvb2xfY29u ZmRiX2luaXQoVEFMTE9DX0NUWCAqbWVtX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBjb25mZGJfY3R4ICoqX2NvbmZkYikKK3sKKyAgICBzdHJ1Y3QgY29u ZmRiX2N0eCAqY29uZmRiOworICAgIGNoYXIgKnBhdGg7CisgICAgZXJybm9fdCByZXQ7CisKKyAg ICBwYXRoID0gdGFsbG9jX2FzcHJpbnRmKG1lbV9jdHgsICIlcy8lcyIsIERCX1BBVEgsIENPTkZE Ql9GSUxFKTsKKyAgICBpZiAocGF0aCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBFTk9NRU07 CisgICAgfQorCisgICAgcmV0ID0gY29uZmRiX2luaXQobWVtX2N0eCwgJmNvbmZkYiwgcGF0aCk7 CisgICAgaWYgKHJldCAhPSBFT0spIHsKKyAgICAgICAgREVCVUcoU1NTREJHX0NSSVRfRkFJTFVS RSwKKyAgICAgICAgICAgICAgIkNvdWxkIG5vdCBpbml0aWFsaXplIGNvbm5lY3Rpb24gdG8gdGhl IGNvbmZkYlxuIik7CisgICAgICAgIHRhbGxvY19mcmVlKHBhdGgpOworICAgICAgICByZXR1cm4g cmV0OworICAgIH0KKworICAgIGlmIChfY29uZmRiICE9IE5VTEwpIHsKKyAgICAgICAgKl9jb25m ZGIgPSBjb25mZGI7CisgICAgfQorCisgICAgcmV0dXJuIEVPSzsKK30KKworc3RhdGljIGVycm5v X3Qgc3NzX3Rvb2xfZG9tYWluc19pbml0KFRBTExPQ19DVFggKm1lbV9jdHgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbmZkYl9jdHggKmNvbmZkYiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3NzX2RvbWFpbl9pbmZv ICoqX2RvbWFpbnMpCit7CisgICAgc3RydWN0IHNzc19kb21haW5faW5mbyAqZG9tYWluczsKKyAg ICBzdHJ1Y3Qgc3NzX2RvbWFpbl9pbmZvICpkb207CisgICAgZXJybm9fdCByZXQ7CisKKyAgICBy ZXQgPSBjb25mZGJfZ2V0X2RvbWFpbnMoY29uZmRiLCAmZG9tYWlucyk7CisgICAgaWYgKHJldCAh PSBFT0spIHsKKyAgICAgICAgREVCVUcoU1NTREJHX0NSSVRfRkFJTFVSRSwgIlVuYWJsZSB0byBz ZXR1cCBkb21haW5zIFslZF06ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXQsIHNzc19zdHJlcnJvcihyZXQpKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9 CisKKyAgICByZXQgPSBzeXNkYl9pbml0KG1lbV9jdHgsIGRvbWFpbnMsIGZhbHNlKTsKKyAgICBT WVNEQl9WRVJTSU9OX0VSUk9SKHJldCk7CisgICAgaWYgKHJldCAhPSBFT0spIHsKKyAgICAgICAg REVCVUcoU1NTREJHX0NSSVRfRkFJTFVSRSwKKyAgICAgICAgICAgICAgIkNvdWxkIG5vdCBpbml0 aWFsaXplIGNvbm5lY3Rpb24gdG8gdGhlIHN5c2RiXG4iKTsKKyAgICAgICAgcmV0dXJuIHJldDsK KyAgICB9CisKKyAgICBmb3IgKGRvbSA9IGRvbWFpbnM7IGRvbSAhPSBOVUxMOyBkb20gPSBnZXRf bmV4dF9kb21haW4oZG9tLCB0cnVlKSkgeworICAgICAgICBpZiAoIUlTX1NVQkRPTUFJTihkb20p KSB7CisgICAgICAgICAgICAvKiBVcGRhdGUgbGlzdCBvZiBzdWJkb21haW5zIGZvciB0aGlzIGRv bWFpbiAqLworICAgICAgICAgICAgcmV0ID0gc3lzZGJfdXBkYXRlX3N1YmRvbWFpbnMoZG9tKTsK KyAgICAgICAgICAgIGlmIChyZXQgIT0gRU9LKSB7CisgICAgICAgICAgICAgICAgREVCVUcoU1NT REJHX01JTk9SX0ZBSUxVUkUsCisgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byB1cGRh dGUgc3ViZG9tYWlucyBmb3IgZG9tYWluICVzLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBk b20tPm5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChk b20gPSBkb21haW5zOyBkb20gIT0gTlVMTDsgZG9tID0gZ2V0X25leHRfZG9tYWluKGRvbSwgdHJ1 ZSkpIHsKKyAgICAgICAgcmV0ID0gc3NzX25hbWVzX2luaXQobWVtX2N0eCwgY29uZmRiLCBkb20t Pm5hbWUsICZkb20tPm5hbWVzKTsKKyAgICAgICAgaWYgKHJldCAhPSBFT0spIHsKKyAgICAgICAg ICAgIERFQlVHKFNTU0RCR19DUklUX0ZBSUxVUkUsICJzc3NfbmFtZXNfaW5pdCgpIGZhaWxlZFxu Iik7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgfQorCisgICAgKl9k b21haW5zID0gZG9tYWluczsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBzc3NfdG9v bF9jdHggKnNzc190b29sX2luaXQoVEFMTE9DX0NUWCAqbWVtX2N0eCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50ICphcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKyAg ICBzdHJ1Y3Qgc3NzX3Rvb2xfY3R4ICp0b29sX2N0eDsKKyAgICBlcnJub190IHJldDsKKworICAg IHRvb2xfY3R4ID0gdGFsbG9jX3plcm8obWVtX2N0eCwgc3RydWN0IHNzc190b29sX2N0eCk7Cisg ICAgaWYgKHRvb2xfY3R4ID09IE5VTEwpIHsKKyAgICAgICAgREVCVUcoU1NTREJHX0NSSVRfRkFJ TFVSRSwgInRhbGxvY196ZXJvKCkgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7Cisg ICAgfQorCisgICAgc3NzX3Rvb2xfY29tbW9uX29wdHModG9vbF9jdHgsIGFyZ2MsIGFyZ3YpOwor CisgICAgLyogQ29ubmVjdCB0byBjb25mZGIuICovCisgICAgcmV0ID0gc3NzX3Rvb2xfY29uZmRi X2luaXQodG9vbF9jdHgsICZ0b29sX2N0eC0+Y29uZmRiKTsKKyAgICBpZiAocmV0ICE9IEVPSykg eworICAgICAgICBERUJVRyhTU1NEQkdfQ1JJVF9GQUlMVVJFLCAiVW5hYmxlIHRvIG9wZW4gY29u ZmRiIFslZF06ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQs IHNzc19zdHJlcnJvcihyZXQpKTsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKworICAgIC8q IFNldHVwIGRvbWFpbnMuICovCisgICAgcmV0ID0gc3NzX3Rvb2xfZG9tYWluc19pbml0KHRvb2xf Y3R4LCB0b29sX2N0eC0+Y29uZmRiLCAmdG9vbF9jdHgtPmRvbWFpbnMpOworICAgIGlmIChyZXQg IT0gRU9LKSB7CisgICAgICAgIERFQlVHKFNTU0RCR19DUklUX0ZBSUxVUkUsICJVbmFibGUgdG8g c2V0dXAgZG9tYWlucyBbJWRdOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0LCBzc3Nfc3RyZXJyb3IocmV0KSk7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9 CisKKyAgICByZXQgPSBjb25mZGJfZ2V0X3N0cmluZyh0b29sX2N0eC0+Y29uZmRiLCB0b29sX2N0 eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05GREJfTU9OSVRPUl9DT05GX0VOVFJZ LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTkZEQl9NT05JVE9SX0RFRkFVTFRfRE9N QUlOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICZ0b29sX2N0eC0+ZGVmYXVs dF9kb21haW4pOworICAgIGlmIChyZXQgIT0gRU9LKSB7CisgICAgICAgIERFQlVHKFNTU0RCR19P UF9GQUlMVVJFLCAiQ2Fubm90IGdldCB0aGUgZGVmYXVsdCBkb21haW4gWyVkXTogJXNcbiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQsIHN0cmVycm9yKHJldCkpOworICAg ICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgcmV0ID0gRU9LOworCitkb25lOgorICAgIGlm IChyZXQgIT0gRU9LKSB7CisgICAgICAgIHRhbGxvY196ZnJlZSh0b29sX2N0eCk7CisgICAgfQor CisgICAgcmV0dXJuIHRvb2xfY3R4OworfQorCitpbnQgc3NzX3Rvb2xfdXNhZ2UoY29uc3QgY2hh ciAqdG9vbF9uYW1lLAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzc3Nfcm91dGVfY21kICpj b21tYW5kcykKK3sKKyAgICBpbnQgaTsKKworICAgIGZwcmludGYoc3RkZXJyLCBfKCJVc2FnZTpc biVzIENPTU1BTkQgQ09NTUFORC1BUkdTXG5cbiIpLCB0b29sX25hbWUpOworICAgIGZwcmludGYo c3RkZXJyLCBfKCJBdmFpbGFibGUgY29tbWFuZHM6XG4iKSk7CisKKyAgICBmb3IgKGkgPSAwOyBj b21tYW5kc1tpXS5jb21tYW5kICE9IE5VTEw7IGkrKykgeworICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIiogJXNcbiIsIGNvbW1hbmRzW2ldLmNvbW1hbmQpOworICAgIH0KKworICAgIHJldHVybiBF WElUX0ZBSUxVUkU7Cit9CisKK2ludCBzc3NfdG9vbF9yb3V0ZShpbnQgYXJnYywgY29uc3QgY2hh ciAqKmFyZ3YsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHNzc190b29sX2N0eCAqdG9vbF9j dHgsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHNzc19yb3V0ZV9jbWQgKmNvbW1hbmRzLAor ICAgICAgICAgICAgICAgICAgIHZvaWQgKnB2dCkKK3sKKyAgICBzdHJ1Y3Qgc3NzX2NtZGxpbmUg Y21kbGluZTsKKyAgICBjb25zdCBjaGFyICpjbWQ7CisgICAgaW50IGk7CisKKyAgICBpZiAoY29t bWFuZHMgPT0gTlVMTCkgeworICAgICAgICBERUJVRyhTU1NEQkdfQ1JJVF9GQUlMVVJFLCAiQnVn OiBjb21tYW5kcyBjYW4ndCBiZSBOVUxMIVxuIik7CisgICAgICAgIHJldHVybiBFWElUX0ZBSUxV UkU7CisgICAgfQorCisgICAgaWYgKGFyZ2MgPCAyKSB7CisgICAgICAgIHJldHVybiBzc3NfdG9v bF91c2FnZShhcmd2WzBdLCBjb21tYW5kcyk7CisgICAgfQorCisgICAgY21kID0gYXJndlsxXTsK KyAgICBmb3IgKGkgPSAwOyBjb21tYW5kc1tpXS5jb21tYW5kICE9IE5VTEw7IGkrKykgeworICAg ICAgICBpZiAoc3RyY21wKGNvbW1hbmRzW2ldLmNvbW1hbmQsIGNtZCkgPT0gMCkgeworICAgICAg ICAgICAgY21kbGluZS5leGVjID0gYXJndlswXTsKKyAgICAgICAgICAgIGNtZGxpbmUuY29tbWFu ZCA9IGFyZ3ZbMV07CisgICAgICAgICAgICBjbWRsaW5lLmFyZ2MgPSBhcmdjIC0gMjsKKyAgICAg ICAgICAgIGNtZGxpbmUuYXJndiA9IGFyZ3YgKyAyOworCisgICAgICAgICAgICByZXR1cm4gY29t bWFuZHNbaV0uZm4oJmNtZGxpbmUsIHRvb2xfY3R4LCBwdnQpOworICAgICAgICB9CisgICAgfQor CisgICAgcmV0dXJuIHNzc190b29sX3VzYWdlKGFyZ3ZbMF0sIGNvbW1hbmRzKTsKK30KKworaW50 IHNzc190b29sX3BvcHRfZXgoc3RydWN0IHNzc19jbWRsaW5lICpjbWRsaW5lLAorICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHBvcHRPcHRpb24gKm9wdGlvbnMsCisgICAgICAgICAgICAgICAg ICAgICBlbnVtIHNzc190b29sX29wdCByZXF1aXJlX29wdGlvbiwKKyAgICAgICAgICAgICAgICAg ICAgIHNzc19wb3B0X2ZuIHBvcHRfZm4sCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwb3B0 X2ZuX3B2dCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcHRfbmFtZSwKKyAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcHRfaGVscCwKKyAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKipfZm9wdCkKK3sKKyAgICBjb25zdCBjaGFyICpvcHRzdHI7Cisg ICAgY2hhciAqaGVscDsKKyAgICBwb3B0Q29udGV4dCBwYzsKKyAgICBpbnQgcmV0OworCisgICAg LyogQ3JlYXRlIGhlbHAgb3B0aW9uIHN0cmluZy4gV2UgYWx3YXlzIG5lZWQgdG8gYXBwZW5kIGNv bW1hbmQgbmFtZSBzaW5jZQorICAgICAqIHdlIHVzZSBQT1BUX0NPTlRFWFRfS0VFUF9GSVJTVC4g Ki8KKyAgICBvcHRzdHIgPSBvcHRpb25zID09IE5VTEwgPyAiIiA6IF8oIiBbT1BUSU9OUy4uLl0i KTsKKyAgICBpZiAoZm9wdF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgaGVscCA9IHRhbGxvY19h c3ByaW50ZihOVUxMLCAiJXMgJXMlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y21kbGluZS0+ZXhlYywgY21kbGluZS0+Y29tbWFuZCwgb3B0c3RyKTsKKyAgICB9IGVsc2Ugewor ICAgICAgICBoZWxwID0gdGFsbG9jX2FzcHJpbnRmKE5VTEwsICIlcyAlcyAlcyVzIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNtZGxpbmUtPmV4ZWMsIGNtZGxpbmUtPmNvbW1hbmQsIGZv cHRfbmFtZSwgb3B0c3RyKTsKKyAgICB9CisgICAgaWYgKGhlbHAgPT0gTlVMTCkgeworICAgICAg ICBERUJVRyhTU1NEQkdfQ1JJVF9GQUlMVVJFLCAidGFsbG9jX2FzcHJpbnRmKCkgZmFpbGVkXG4i KTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICAvKiBDcmVhdGUg cG9wdCBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBvbgor ICAgICAqIGNvbW1hbmQgYXJndiB3aGljaCBkb2VzIG5vdCBjb250YWluIGV4ZWN1dGFibGUgKGFy Z3ZbMF0pLCB0aGVyZWZvcmUKKyAgICAgKiB3ZSBuZWVkIHRvIHVzZSBLRUVQX0ZJUlNUIHRoYXQg ZW5zdXJlcyBhcmd2WzBdIGlzIGFsc28gcHJvY2Vzc2VkLiAqLworICAgIHBjID0gcG9wdEdldENv bnRleHQoY21kbGluZS0+ZXhlYywgY21kbGluZS0+YXJnYywgY21kbGluZS0+YXJndiwKKyAgICAg ICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsIFBPUFRfQ09OVEVYVF9LRUVQX0ZJUlNUKTsKKwor ICAgIHBvcHRTZXRPdGhlck9wdGlvbkhlbHAocGMsIGhlbHApOworCisgICAgLyogUGFyc2Ugb3B0 aW9ucy4gSW52b2tlIGN1c3RvbSBmdW5jdGlvbiBpZiBwcm92aWRlZC4gSWYgbm8gcGFyc2luZwor ICAgICAqIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCBwcmludCBlcnJvciBvbiB1bmtub3duIG9wdGlv bi4gKi8KKyAgICB3aGlsZSAoKHJldCA9IHBvcHRHZXROZXh0T3B0KHBjKSkgIT0gLTEpIHsKKyAg ICAgICAgaWYgKHBvcHRfZm4gIT0gTlVMTCkgeworICAgICAgICAgICAgcmV0ID0gcG9wdF9mbihw YywgcmV0LCBwb3B0X2ZuX3B2dCk7CisgICAgICAgICAgICBpZiAocmV0ICE9IEVPSykgeworICAg ICAgICAgICAgICAgIHJldCA9IEVYSVRfRkFJTFVSRTsKKyAgICAgICAgICAgICAgICBnb3RvIGRv bmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgXygiSW52YWxpZCBvcHRpb24gJXM6ICVzXG5cbiIpLAorICAgICAgICAgICAgICAg ICAgICBwb3B0QmFkT3B0aW9uKHBjLCAwKSwgcG9wdFN0cmVycm9yKHJldCkpOworICAgICAgICAg ICAgcG9wdFByaW50SGVscChwYywgc3RkZXJyLCAwKTsKKyAgICAgICAgICAgIHJldCA9IEVYSVRf RkFJTFVSRTsKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorICAgIH0KKworICAg IC8qIFBhcnNlIGZyZWUgb3B0aW9uIHdoaWNoIGlzIGFsd2F5cyByZXF1aXJlZCBpZiByZXF1ZXN0 ZWQuICovCisgICAgaWYgKF9mb3B0ICE9IE5VTEwpIHsKKyAgICAgICAgKl9mb3B0ID0gcG9wdEdl dEFyZyhwYyk7CisgICAgICAgIGlmICgqX2ZvcHQgPT0gTlVMTCkgeworICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsIF8oIk1pc3Npbmcgb3B0aW9uOiAlc1xuXG4iKSwgZm9wdF9oZWxwKTsKKyAg ICAgICAgICAgIHBvcHRQcmludEhlbHAocGMsIHN0ZGVyciwgMCk7CisgICAgICAgICAgICByZXQg PSBFWElUX0ZBSUxVUkU7CisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0KKworICAg ICAgICAvKiBObyBtb3JlIGFyZ3VtZW50cyBleHBlY3RlZC4gSWYgc29tZXRoaW5nIGZvbGxvd3Mg aXQgaXMgYW4gZXJyb3IuICovCisgICAgICAgIGlmIChwb3B0R2V0QXJnKHBjKSkgeworICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsIF8oIk9ubHkgb25lIGZyZWUgYXJndW1lbnQgaXMgZXhwZWN0 ZWQhXG5cbiIpKTsKKyAgICAgICAgICAgIHBvcHRQcmludEhlbHAocGMsIHN0ZGVyciwgMCk7Cisg ICAgICAgICAgICByZXQgPSBFWElUX0ZBSUxVUkU7CisgICAgICAgICAgICBnb3RvIGRvbmU7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBJZiBhdCBsZWFzdCBvbmUgb3B0aW9uIGlzIHJlcXVp cmVkIGFuZCBub3QgcHJvdmlkZWQsIHByaW50IGVycm9yLiAqLworICAgIGlmIChyZXF1aXJlX29w dGlvbiA9PSBTU1NfVE9PTF9PUFRfUkVRVUlSRUQKKyAgICAgICAgICAgICYmICgoX2ZvcHQgIT0g TlVMTCAmJiBjbWRsaW5lLT5hcmdjIDwgMikgfHwgY21kbGluZS0+YXJnYyA8IDEpKSB7CisgICAg ICAgIGZwcmludGYoc3RkZXJyLCBfKCJBdCBsZWFzdCBvbmUgb3B0aW9uIGlzIHJlcXVpcmVkIVxu XG4iKSk7CisgICAgICAgIHBvcHRQcmludEhlbHAocGMsIHN0ZGVyciwgMCk7CisgICAgICAgIHJl dCA9IEVYSVRfRkFJTFVSRTsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKworICAgIHJldCA9 IEVYSVRfU1VDQ0VTUzsKKworZG9uZToKKyAgICBwb3B0RnJlZUNvbnRleHQocGMpOworICAgIHRh bGxvY19mcmVlKGhlbHApOworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBzc3NfdG9vbF9wb3B0 KHN0cnVjdCBzc3NfY21kbGluZSAqY21kbGluZSwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBw b3B0T3B0aW9uICpvcHRpb25zLAorICAgICAgICAgICAgICAgICAgZW51bSBzc3NfdG9vbF9vcHQg cmVxdWlyZV9vcHRpb24sCisgICAgICAgICAgICAgICAgICBzc3NfcG9wdF9mbiBwb3B0X2ZuLAor ICAgICAgICAgICAgICAgICAgdm9pZCAqcG9wdF9mbl9wdnQpCit7CisgICAgcmV0dXJuIHNzc190 b29sX3BvcHRfZXgoY21kbGluZSwgb3B0aW9ucywgcmVxdWlyZV9vcHRpb24sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcG9wdF9mbiwgcG9wdF9mbl9wdnQsIE5VTEwsIE5VTEwsIE5VTEwp OworfQorCitpbnQgc3NzX3Rvb2xfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisg ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3NzX3JvdXRlX2NtZCAqY29tbWFuZHMsCisgICAgICAg ICAgICAgICAgICB2b2lkICpwdnQpCit7CisgICAgc3RydWN0IHNzc190b29sX2N0eCAqdG9vbF9j dHg7CisgICAgdWlkX3QgdWlkOworICAgIGludCByZXQ7CisKKyAgICB1aWQgPSBnZXR1aWQoKTsK KyAgICBpZiAodWlkICE9IDApIHsKKyAgICAgICAgREVCVUcoU1NTREJHX0NSSVRfRkFJTFVSRSwg IlJ1bm5pbmcgdW5kZXIgJWQsIG11c3QgYmUgcm9vdFxuIiwgdWlkKTsKKyAgICAgICAgRVJST1Io IiUxJHMgbXVzdCBiZSBydW4gYXMgcm9vdFxuIiwgYXJndlswXSk7CisgICAgICAgIHJldHVybiBF WElUX0ZBSUxVUkU7CisgICAgfQorCisgICAgdG9vbF9jdHggPSBzc3NfdG9vbF9pbml0KE5VTEws ICZhcmdjLCBhcmd2KTsKKyAgICBpZiAodG9vbF9jdHggPT0gTlVMTCkgeworICAgICAgICBERUJV RyhTU1NEQkdfQ1JJVF9GQUlMVVJFLCAiVW5hYmxlIHRvIGNyZWF0ZSB0b29sIGNvbnRleHRcbiIp OworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgIH0KKworICAgIHJldCA9IHNzc190 b29sX3JvdXRlKGFyZ2MsIGFyZ3YsIHRvb2xfY3R4LCBjb21tYW5kcywgcHZ0KTsKKyAgICB0YWxs b2NfZnJlZSh0b29sX2N0eCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgc3NzX3Rvb2xf cGFyc2VfbmFtZShUQUxMT0NfQ1RYICptZW1fY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHNzc190b29sX2N0eCAqdG9vbF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipf dXNlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3NzX2RvbWFpbl9pbmZv ICoqX2RvbWFpbikKK3sKKyAgICBjaGFyICp1c2VybmFtZSA9IE5VTEw7CisgICAgY2hhciAqZG9t bmFtZSA9IE5VTEw7CisgICAgc3RydWN0IHNzc19kb21haW5faW5mbyAqZG9tYWluOworICAgIGlu dCByZXQ7CisKKyAgICByZXQgPSBzc3NfcGFyc2VfbmFtZV9mb3JfZG9tYWlucyhtZW1fY3R4LCB0 b29sX2N0eC0+ZG9tYWlucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 b29sX2N0eC0+ZGVmYXVsdF9kb21haW4sIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZkb21uYW1lLCAmdXNlcm5hbWUpOworICAgIGlmIChyZXQgPT0gRUFHQUlO KSB7CisgICAgICAgIERFQlVHKFNTU0RCR19DUklUX0ZBSUxVUkUsICJVbmFibGUgdG8gZmluZCBk b21haW4uIFRoZSBkb21haW4gbmFtZSBtYXkgIgorICAgICAgICAgICAgICAiYmUgYSBzdWJkb21h aW4gdGhhdCB3YXMgbm90IHlldCBmb3VuZC5cbiIpOworICAgICAgICBnb3RvIGRvbmU7CisgICAg fSBlbHNlIGlmIChyZXQgIT0gRU9LKSB7CisgICAgICAgIERFQlVHKFNTU0RCR19DUklUX0ZBSUxV UkUsICJVbmFibGUgdG8gcGFyc2UgbmFtZSBbJWRdOiAlc1xuIiwKKyAgICAgICAgICAgICAgcmV0 LCBzc3Nfc3RyZXJyb3IocmV0KSk7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKKyAgICBk b21haW4gPSBmaW5kX2RvbWFpbl9ieV9uYW1lKHRvb2xfY3R4LT5kb21haW5zLCBkb21uYW1lLCB0 cnVlKTsKKworICAgICpfdXNlcm5hbWUgPSB1c2VybmFtZTsKKyAgICAqX2RvbWFpbiA9IGRvbWFp bjsKKworICAgIHJldCA9IEVPSzsKKworZG9uZToKKyAgICBpZiAocmV0ICE9IEVPSykgeworICAg ICAgICB0YWxsb2NfemZyZWUodXNlcm5hbWUpOworICAgICAgICB0YWxsb2NfemZyZWUoZG9tbmFt ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3NyYy90b29scy9j b21tb24vc3NzX3Rvb2xzLmggYi9zcmMvdG9vbHMvY29tbW9uL3Nzc190b29scy5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAuLmNmZTExZDA2ZTFkYWRmOGU0OWVmZTE1NWM4YTUzZjk5YTMxZTk3ZmIKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdG9vbHMvY29tbW9uL3Nzc190b29scy5oCkBAIC0wLDAgKzEsOTEgQEAKKy8q CisgICAgQXV0aG9yczoKKyAgICAgICAgUGF2ZWwgQsWZZXppbmEgPHBicmV6aW5hQHJlZGhhdC5j b20+CisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTUgUmVkIEhhdAorCisgICAgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2lmbmRlZiBfU1NTX1RPT0xTX0hfCisjZGVmaW5l IF9TU1NfVE9PTFNfSF8KKworI2luY2x1ZGUgPHRhbGxvYy5oPgorI2luY2x1ZGUgPHBvcHQuaD4K KworI2luY2x1ZGUgImNvbmZkYi9jb25mZGIuaCIKKworc3RydWN0IHNzc190b29sX2N0eCB7Cisg ICAgc3RydWN0IGNvbmZkYl9jdHggKmNvbmZkYjsKKworICAgIGNoYXIgKmRlZmF1bHRfZG9tYWlu OworICAgIHN0cnVjdCBzc3NfZG9tYWluX2luZm8gKmRvbWFpbnM7Cit9OworCitzdHJ1Y3Qgc3Nz X3Rvb2xfY3R4ICpzc3NfdG9vbF9pbml0KFRBTExPQ19DVFggKm1lbV9jdHgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOwor CitzdHJ1Y3Qgc3NzX2NtZGxpbmU7CisKK3R5cGVkZWYgaW50CisoKnNzc19yb3V0ZV9mbikoc3Ry dWN0IHNzc19jbWRsaW5lICpjbWRsaW5lLAorICAgICAgICAgICAgICAgIHN0cnVjdCBzc3NfdG9v bF9jdHggKnRvb2xfY3R4LAorICAgICAgICAgICAgICAgIHZvaWQgKnB2dCk7CisKK3N0cnVjdCBz c3Nfcm91dGVfY21kIHsKKyAgICBjb25zdCBjaGFyICpjb21tYW5kOworICAgIHNzc19yb3V0ZV9m biBmbjsKK307CisKK2ludCBzc3NfdG9vbF91c2FnZShjb25zdCBjaGFyICp0b29sX25hbWUsCisg ICAgICAgICAgICAgICAgICAgc3RydWN0IHNzc19yb3V0ZV9jbWQgKmNvbW1hbmRzKTsKKworaW50 IHNzc190b29sX3JvdXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKyAgICAgICAgICAg ICAgICAgICBzdHJ1Y3Qgc3NzX3Rvb2xfY3R4ICp0b29sX2N0eCwKKyAgICAgICAgICAgICAgICAg ICBzdHJ1Y3Qgc3NzX3JvdXRlX2NtZCAqY29tbWFuZHMsCisgICAgICAgICAgICAgICAgICAgdm9p ZCAqcHZ0KTsKKwordHlwZWRlZiBpbnQgKCpzc3NfcG9wdF9mbikocG9wdENvbnRleHQgcGMsIGNo YXIgb3B0aW9uLCB2b2lkICpwdnQpOworCitlbnVtIHNzc190b29sX29wdCB7CisgICAgU1NTX1RP T0xfT1BUX1JFUVVJUkVELAorICAgIFNTU19UT09MX09QVF9PUFRJT05BTAorfTsKKworaW50IHNz c190b29sX3BvcHRfZXgoc3RydWN0IHNzc19jbWRsaW5lICpjbWRsaW5lLAorICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHBvcHRPcHRpb24gKm9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAg ICBlbnVtIHNzc190b29sX29wdCByZXF1aXJlX29wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg IHNzc19wb3B0X2ZuIHBvcHRfZm4sCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwb3B0X2Zu X3B2dCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZyZWVfb3B0X25hbWUsCisg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmcmVlX29wdF9oZWxwLAorICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqKl9mcmVlX29wdCk7CisKK2ludCBzc3NfdG9vbF9wb3B0 KHN0cnVjdCBzc3NfY21kbGluZSAqY21kbGluZSwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBw b3B0T3B0aW9uICpvcHRpb25zLAorICAgICAgICAgICAgICAgICAgZW51bSBzc3NfdG9vbF9vcHQg cmVxdWlyZV9vcHRpb24sCisgICAgICAgICAgICAgICAgICBzc3NfcG9wdF9mbiBwb3B0X2ZuLAor ICAgICAgICAgICAgICAgICAgdm9pZCAqcG9wdF9mbl9wdnQpOworCitpbnQgc3NzX3Rvb2xfbWFp bihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg c3NzX3JvdXRlX2NtZCAqY29tbWFuZHMsCisgICAgICAgICAgICAgICAgICB2b2lkICpwdnQpOwor CitpbnQgc3NzX3Rvb2xfcGFyc2VfbmFtZShUQUxMT0NfQ1RYICptZW1fY3R4LAorICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHNzc190b29sX2N0eCAqdG9vbF9jdHgsCisgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKipfdXNlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg c3NzX2RvbWFpbl9pbmZvICoqX2RvbWFpbik7CisKKyNlbmRpZiAvKiBTUkNfVE9PTFNfQ09NTU9O X1NTU19UT09MU19IXyAqLwotLSAKMi4xLjAKCg== --===============4221040553505546418== Content-Type: text/x-patch MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0003-TOOLS-add-sss_override-for-local-overrides.patch" RnJvbSAzYmFiZWM1OWNiMTcwNDU3YzQ0MTAwMGI2NmZmNzY4OTU1MjZhYmE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/UGF2ZWw9MjBCPUM1PTk5ZXppbmE/PSA8cGJy ZXppbmFAcmVkaGF0LmNvbT4KRGF0ZTogRnJpLCAyNCBKdWwgMjAxNSAwOTo1ODoxMSArMDIwMApT dWJqZWN0OiBbUEFUQ0ggMy8zXSBUT09MUzogYWRkIHNzc19vdmVycmlkZSBmb3IgbG9jYWwgb3Zl cnJpZGVzCgpSZXNvbHZlczoKaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3Nzc2QvdGlja2V0LzI1 ODQKLS0tCiBNYWtlZmlsZS5hbSAgICAgICAgICAgICAgICB8ICAxNiArLQogY29udHJpYi9zc3Nk LnNwZWMuaW4gICAgICAgfCAgIDIgKwogc3JjL21hbi9NYWtlZmlsZS5hbSAgICAgICAgfCAgIDEg Kwogc3JjL21hbi9wby9wbzRhLmNmZyAgICAgICAgfCAgIDEgKwogc3JjL21hbi9zc3Nfb3ZlcnJp ZGUuOC54bWwgfCAxMDMgKysrKysrKwogc3JjL3Rvb2xzL3Nzc19vdmVycmlkZS5jICAgfCA3MTUg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA2IGZpbGVzIGNo YW5nZWQsIDgzNyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL21hbi9zc3Nfb3ZlcnJpZGUuOC54bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdG9v bHMvc3NzX292ZXJyaWRlLmMKCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFt CmluZGV4IDFlZGVjYzQ4M2M2MWQwNDU2MmI3YmZkOTA4NjE0NmU5Mzk2M2I3NGUuLjkxMmJmYzY2 NDE0NjVlZjVjZDJmZjJjY2U5OTc1YjQwMjdjMzIxOGQgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmFt CisrKyBiL01ha2VmaWxlLmFtCkBAIC0xMTcsNyArMTE3LDkgQEAgc2Jpbl9QUk9HUkFNUyA9IFwK ICAgICBzc3NfZ3JvdXBzaG93IFwKICAgICBzc3NfY2FjaGUgXAogICAgIHNzc19kZWJ1Z2xldmVs IFwKLSAgICBzc3Nfc2VlZAorICAgIHNzc19vdmVycmlkZSBcCisgICAgc3NzX3NlZWQgXAorICAg ICQoTlVMTCkKIAogc3NzZGxpYmV4ZWNfUFJPR1JBTVMgPSBcCiAgICAgc3NzZF9uc3MgXApAQCAt MTI5Nyw2ICsxMjk5LDE4IEBAIHNzc19zaWduYWxfTERBREQgPSBcCiAgICAgJChTU1NEX0lOVEVS TkFMX0xUTElCUykgXAogICAgICQoTlVMTCkKIAorc3NzX292ZXJyaWRlX1NPVVJDRVMgPSBcCisg ICAgc3JjL3Rvb2xzL3Nzc19vdmVycmlkZS5jIFwKKyAgICAkKFNTU0RfVE9PTFNfT0JKKSBcCisg ICAgJChOVUxMKQorc3NzX292ZXJyaWRlX0xEQUREID0gXAorICAgICQoVE9PTFNfTElCUykgXAor ICAgICQoU1NTRF9JTlRFUk5BTF9MVExJQlMpIFwKKyAgICAkKE5VTEwpCitzc3Nfb3ZlcnJpZGVf Q0ZMQUdTID0gXAorICAgICQoQU1fQ0ZMQUdTKSBcCisgICAgJChOVUxMKQorCiBpZiBCVUlMRF9T VURPCiBzc3Nfc3Vkb19jbGlfU09VUkNFUyA9IFwKICAgICBzcmMvc3NzX2NsaWVudC9jb21tb24u YyBcCmRpZmYgLS1naXQgYS9jb250cmliL3Nzc2Quc3BlYy5pbiBiL2NvbnRyaWIvc3NzZC5zcGVj LmluCmluZGV4IDE1ZjdjNTgyY2JhMWI5MDUyZTE4MDU5NjYyNWJlN2RkNTc0OTU5OWYuLmYwNTA1 MDFmZjlkMDcxMWEwZGE3ZjA5NGVlOTY4Y2FlODdhM2Y0OWIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv c3NzZC5zcGVjLmluCisrKyBiL2NvbnRyaWIvc3NzZC5zcGVjLmluCkBAIC04MzcsNiArODM3LDcg QEAgcm0gLXJmICRSUE1fQlVJTERfUk9PVAogJXtfc2JpbmRpcn0vc3NzX2dyb3VwbW9kCiAle19z YmluZGlyfS9zc3NfZ3JvdXBzaG93CiAle19zYmluZGlyfS9zc3Nfb2JmdXNjYXRlCisle19zYmlu ZGlyfS9zc3Nfb3ZlcnJpZGUKICV7X3NiaW5kaXJ9L3Nzc19kZWJ1Z2xldmVsCiAle19zYmluZGly fS9zc3Nfc2VlZAogJXtfbWFuZGlyfS9tYW44L3Nzc19ncm91cGFkZC44KgpAQCAtODQ3LDYgKzg0 OCw3IEBAIHJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKICV7X21hbmRpcn0vbWFuOC9zc3NfdXNlcmRl bC44KgogJXtfbWFuZGlyfS9tYW44L3Nzc191c2VybW9kLjgqCiAle19tYW5kaXJ9L21hbjgvc3Nz X29iZnVzY2F0ZS44KgorJXtfbWFuZGlyfS9tYW44L3Nzc19vdmVycmlkZS44KgogJXtfbWFuZGly fS9tYW44L3Nzc19kZWJ1Z2xldmVsLjgqCiAle19tYW5kaXJ9L21hbjgvc3NzX3NlZWQuOCoKIApk aWZmIC0tZ2l0IGEvc3JjL21hbi9NYWtlZmlsZS5hbSBiL3NyYy9tYW4vTWFrZWZpbGUuYW0KaW5k ZXggMWVmMWRhNDhjY2U3NGY3ZDFhZDc3ZTM3NTFlZTZhYzM0NTBmMDI1OS4uNzBjYWRmNTk1MWY1 NmI3OGZmMGJmYmNiMzAzZTI1NTQ3OGFmNWZlYyAxMDA2NDQKLS0tIGEvc3JjL21hbi9NYWtlZmls ZS5hbQorKysgYi9zcmMvbWFuL01ha2VmaWxlLmFtCkBAIC01MSw2ICs1MSw3IEBAIG1hbl9NQU5T ID0gXAogICAgIHNzc2Qta3JiNS41IHNzc2Qtc2ltcGxlLjUgXAogICAgIHNzc2Rfa3JiNV9sb2Nh dG9yX3BsdWdpbi44IHNzc19ncm91cHNob3cuOCBcCiAgICAgcGFtX3Nzcy44IHNzc19vYmZ1c2Nh dGUuOCBzc3NfY2FjaGUuOCBzc3NfZGVidWdsZXZlbC44IHNzc19zZWVkLjggXAorICAgIHNzc19v dmVycmlkZS44CiAgICAgJChOVUxMKQogCiBpZiBCVUlMRF9TQU1CQQpkaWZmIC0tZ2l0IGEvc3Jj L21hbi9wby9wbzRhLmNmZyBiL3NyYy9tYW4vcG8vcG80YS5jZmcKaW5kZXggMjVkMjBjNmYwYzIz YTA5MDA0Njk1NzNkNDdhYjk2ZWJjODg5OGU1MC4uNjdlODdiYTcwMDZmMGJiMTM0NmU1Yjg0NTQy OGYyYmVkMWEzMjRkYiAxMDA2NDQKLS0tIGEvc3JjL21hbi9wby9wbzRhLmNmZworKysgYi9zcmMv bWFuL3BvL3BvNGEuY2ZnCkBAIC0xMSw2ICsxMSw3IEBACiBbdHlwZTpkb2Nib29rXSBzc3NkLXN1 ZG8uNS54bWwgJGxhbmc6JChidWlsZGRpcikvJGxhbmcvc3NzZC1zdWRvLjUueG1sCiBbdHlwZTpk b2Nib29rXSBzc3NkLjgueG1sICRsYW5nOiQoYnVpbGRkaXIpLyRsYW5nL3Nzc2QuOC54bWwKIFt0 eXBlOmRvY2Jvb2tdIHNzc19vYmZ1c2NhdGUuOC54bWwgJGxhbmc6JChidWlsZGRpcikvJGxhbmcv c3NzX29iZnVzY2F0ZS44LnhtbAorW3R5cGU6ZG9jYm9va10gc3NzX292ZXJyaWRlLjgueG1sICRs YW5nOiQoYnVpbGRkaXIpLyRsYW5nL3Nzc19vdmVycmlkZS44LnhtbAogW3R5cGU6ZG9jYm9va10g c3NzX3VzZXJhZGQuOC54bWwgJGxhbmc6JChidWlsZGRpcikvJGxhbmcvc3NzX3VzZXJhZGQuOC54 bWwKIFt0eXBlOmRvY2Jvb2tdIHNzc2Qta3JiNS41LnhtbCAkbGFuZzokKGJ1aWxkZGlyKS8kbGFu Zy9zc3NkLWtyYjUuNS54bWwKIFt0eXBlOmRvY2Jvb2tdIHNzc19ncm91cGFkZC44LnhtbCAkbGFu ZzokKGJ1aWxkZGlyKS8kbGFuZy9zc3NfZ3JvdXBhZGQuOC54bWwKZGlmZiAtLWdpdCBhL3NyYy9t YW4vc3NzX292ZXJyaWRlLjgueG1sIGIvc3JjL21hbi9zc3Nfb3ZlcnJpZGUuOC54bWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMC4uZDFiZTQ4N2NmZmIxZTQwNTRmMzUyOTA5ZmUxMzYyYThmMTU1Yjk2NgotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9tYW4vc3NzX292ZXJyaWRlLjgueG1sCkBAIC0wLDAgKzEsMTAzIEBACis8 P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHJlZmVyZW5j ZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBWNC40Ly9FTiIKKyJodHRwOi8vd3d3Lm9h c2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuNC9kb2Nib29reC5kdGQiPgorPHJlZmVyZW5jZT4K Kzx0aXRsZT5TU1NEIE1hbnVhbCBwYWdlczwvdGl0bGU+Cis8cmVmZW50cnk+CisgICAgPHhpOmlu Y2x1ZGUgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiIGhyZWY9Imlu Y2x1ZGUvdXBzdHJlYW0ueG1sIiAvPgorCisgICAgPHJlZm1ldGE+CisgICAgICAgIDxyZWZlbnRy eXRpdGxlPnNzc19vdmVycmlkZTwvcmVmZW50cnl0aXRsZT4KKyAgICAgICAgPG1hbnZvbG51bT44 PC9tYW52b2xudW0+CisgICAgPC9yZWZtZXRhPgorCisgICAgPHJlZm5hbWVkaXYgaWQ9J25hbWUn PgorICAgICAgICA8cmVmbmFtZT5zc3Nfb3ZlcnJpZGU8L3JlZm5hbWU+CisgICAgICAgIDxyZWZw dXJwb3NlPmNyZWF0ZSBsb2NhbCBvdmVycmlkZXMgb2YgdXNlciBhbmQgZ3JvdXAgYXR0cmlidXRl czwvcmVmcHVycG9zZT4KKyAgICA8L3JlZm5hbWVkaXY+CisKKyAgICA8cmVmc3lub3BzaXNkaXYg aWQ9J3N5bm9wc2lzJz4KKyAgICAgICAgPGNtZHN5bm9wc2lzPgorICAgICAgICAgICAgPGNvbW1h bmQ+c3NzX292ZXJyaWRlPC9jb21tYW5kPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9J3BsYWlu Jz48cmVwbGFjZWFibGU+Q09NTUFORDwvcmVwbGFjZWFibGU+PC9hcmc+CisgICAgICAgICAgICA8 YXJnIGNob2ljZT0nb3B0Jz4KKyAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+b3B0aW9uczwv cmVwbGFjZWFibGU+CisgICAgICAgICAgICA8L2FyZz4KKyAgICAgICAgPC9jbWRzeW5vcHNpcz4K KyAgICA8L3JlZnN5bm9wc2lzZGl2PgorCisgICAgPHJlZnNlY3QxIGlkPSdkZXNjcmlwdGlvbic+ CisgICAgICAgIDx0aXRsZT5ERVNDUklQVElPTjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAg ICAgICAgICAgPGNvbW1hbmQ+c3NzX292ZXJyaWRlPC9jb21tYW5kPiBlbmFibGVzIHRvIGNyZWF0 ZSBhIGNsaWVudC1zaWRlCisgICAgICAgICAgICB2aWV3IGFuZCBhbGxvd3MgdG8gY2hhbmdlIHNl bGVjdGVkIHZhbHVlcyBvZiBzcGVjaWZpYyB1c2VyCisgICAgICAgICAgICBhbmQgZ3JvdXBzLiBU aGlzIGNoYW5nZSB0YWtlcyBlZmZlY3Qgb25seSBvbiBsb2NhbCBtYWNoaW5lLiAKKyAgICAgICAg PC9wYXJhPgorICAgIDwvcmVmc2VjdDE+CisKKyAgICA8cmVmc2VjdDEgaWQ9J2NvbW1hbmRzJz4K KyAgICAgICAgPHRpdGxlPkFWQUlMQUJMRSBDT01NQU5EUzwvdGl0bGU+CisgICAgICAgIDxwYXJh PgorICAgICAgICAgICAgQXJndW1lbnQgPGVtcGhhc2lzPk5BTUU8L2VtcGhhc2lzPiBpcyB0aGUg bmFtZSBvZiBvcmlnaW5hbCBvYmplY3QKKyAgICAgICAgICAgIGluIGFsbCBjb21tYW5kcy4KKyAg ICAgICAgPC9wYXJhPgorICAgICAgICA8dmFyaWFibGVsaXN0IHJlbWFwPSdJUCc+CisgICAgICAg ICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICAgIDx0ZXJtPgorICAgICAgICAgICAg ICAgICAgICA8b3B0aW9uPnVzZXItYWRkPC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgIDxl bXBoYXNpcz5OQU1FPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPG9wdGlvbmFsPjxv cHRpb24+LW4sLS1uYW1lPC9vcHRpb24+IE5BTUU8L29wdGlvbmFsPgorICAgICAgICAgICAgICAg ICAgICA8b3B0aW9uYWw+PG9wdGlvbj4tdSwtLXVpZDwvb3B0aW9uPiBVSUQ8L29wdGlvbmFsPgor ICAgICAgICAgICAgICAgICAgICA8b3B0aW9uYWw+PG9wdGlvbj4tZywtLWdpZDwvb3B0aW9uPiBH SUQ8L29wdGlvbmFsPiAKKyAgICAgICAgICAgICAgICAgICAgPG9wdGlvbmFsPjxvcHRpb24+LWgs LS1ob21lPC9vcHRpb24+IEhPTUU8L29wdGlvbmFsPgorICAgICAgICAgICAgICAgICAgICA8b3B0 aW9uYWw+PG9wdGlvbj4tcywtLXNoZWxsPC9vcHRpb24+IFNIRUxMPC9vcHRpb25hbD4KKyAgICAg ICAgICAgICAgICAgICAgPG9wdGlvbmFsPjxvcHRpb24+LWMsLS1nZWNvczwvb3B0aW9uPiBHRUNP Uzwvb3B0aW9uYWw+CisgICAgICAgICAgICAgICAgPC90ZXJtPgorICAgICAgICAgICAgICAgIDxs aXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAg ICAgICBPdmVycmlkZSBhdHRyaWJ1dGVzIG9mIGFuIHVzZXIuCisgICAgICAgICAgICAgICAgICAg IDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJs aXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICAgIDx0 ZXJtPgorICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPnVzZXItZGVsPC9vcHRpb24+CisgICAg ICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5OQU1FPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAg ICA8L3Rlcm0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgICAg ICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZSB1c2VyIG92ZXJyaWRlcy4K KyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+ CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICAgICAgICAgICAgPHRlcm0+CisgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+Z3Jv dXAtYWRkPC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5OQU1FPC9lbXBo YXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPG9wdGlvbmFsPjxvcHRpb24+LW4sLS1uYW1lPC9v cHRpb24+IE5BTUU8L29wdGlvbmFsPgorICAgICAgICAgICAgICAgICAgICA8b3B0aW9uYWw+PG9w dGlvbj4tZywtLWdpZDwvb3B0aW9uPiBHSUQ8L29wdGlvbmFsPiAKKyAgICAgICAgICAgICAgICA8 L3Rlcm0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8 cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJyaWRlIGF0dHJpYnV0ZXMgb2YgYSBn cm91cC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvbGlz dGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0 ZW50cnk+CisgICAgICAgICAgICAgICAgPHRlcm0+CisgICAgICAgICAgICAgICAgICAgIDxvcHRp b24+Z3JvdXAtZGVsPC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5OQU1F PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8L3Rlcm0+CisgICAgICAgICAgICAgICAgPGxp c3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAg ICAgIFJlbW92ZSBncm91cCBvdmVycmlkZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4K KyAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+ CisgICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgIDwvcmVmc2VjdDE+CisKKyAgICA8eGk6aW5j bHVkZSB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSIgaHJlZj0iaW5j bHVkZS9zZWVhbHNvLnhtbCIgLz4KKworPC9yZWZlbnRyeT4KKzwvcmVmZXJlbmNlPgpkaWZmIC0t Z2l0IGEvc3JjL3Rvb2xzL3Nzc19vdmVycmlkZS5jIGIvc3JjL3Rvb2xzL3Nzc19vdmVycmlkZS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAuLjhlMDhiNGY2YjI3M2MxYzVlMjM5YWYzNzJhMzYwZTQzZTA5YWJmOTQKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdG9vbHMvc3NzX292ZXJyaWRlLmMKQEAgLTAsMCArMSw3MTUg QEAKKy8qCisgICAgQXV0aG9yczoKKyAgICAgICAgUGF2ZWwgQsWZZXppbmEgPHBicmV6aW5hQHJl ZGhhdC5jb20+CisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTUgUmVkIEhhdAorCisgICAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisj aW5jbHVkZSAidXRpbC91dGlsLmgiCisjaW5jbHVkZSAiZGIvc3lzZGIuaCIKKyNpbmNsdWRlICJ0 b29scy9jb21tb24vc3NzX3Rvb2xzLmgiCisKKyNkZWZpbmUgTE9DQUxWSUVXIFNZU0RCX0xPQ0FM X1ZJRVdfTkFNRQorCitzdHJ1Y3Qgb3ZlcnJpZGVfdXNlciB7CisgICAgY29uc3QgY2hhciAqaW5w dXRfbmFtZTsKKyAgICBjb25zdCBjaGFyICpvcmlnX25hbWU7CisgICAgc3RydWN0IHNzc19kb21h aW5faW5mbyAqZG9tYWluOworCisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICB1aWRfdCB1aWQ7 CisgICAgZ2lkX3QgZ2lkOworICAgIGNvbnN0IGNoYXIgKmhvbWU7CisgICAgY29uc3QgY2hhciAq c2hlbGw7CisgICAgY29uc3QgY2hhciAqZ2Vjb3M7Cit9OworCitzdHJ1Y3Qgb3ZlcnJpZGVfZ3Jv dXAgeworICAgIGNvbnN0IGNoYXIgKmlucHV0X25hbWU7CisgICAgY29uc3QgY2hhciAqb3JpZ19u YW1lOworICAgIHN0cnVjdCBzc3NfZG9tYWluX2luZm8gKmRvbWFpbjsKKworICAgIGNvbnN0IGNo YXIgKm5hbWU7CisgICAgZ2lkX3QgZ2lkOworfTsKKworc3RhdGljIGludCBwYXJzZV9jbWRsaW5l KHN0cnVjdCBzc3NfY21kbGluZSAqY21kbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3Qgc3NzX3Rvb2xfY3R4ICp0b29sX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgcG9wdE9wdGlvbiAqb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICoqX2lucHV0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqKl9vcmlnX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNzc19kb21h aW5faW5mbyAqKl9kb21haW4pCit7CisgICAgZW51bSBzc3NfdG9vbF9vcHQgcmVxdWlyZTsKKyAg ICBjb25zdCBjaGFyICppbnB1dF9uYW1lOworICAgIGNvbnN0IGNoYXIgKm9yaWdfbmFtZTsKKyAg ICBzdHJ1Y3Qgc3NzX2RvbWFpbl9pbmZvICpkb21haW47CisgICAgaW50IHJldDsKKworICAgIHJl cXVpcmUgPSBvcHRpb25zID09IE5VTEwgPyBTU1NfVE9PTF9PUFRfT1BUSU9OQUwgOiBTU1NfVE9P TF9PUFRfUkVRVUlSRUQ7CisKKyAgICByZXQgPSBzc3NfdG9vbF9wb3B0X2V4KGNtZGxpbmUsIG9w dGlvbnMsIHJlcXVpcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAi TkFNRSIsIF8oIlNwZWNpZnkgbmFtZSBvZiBtb2RpZmllZCAiCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAib2JqZWN0LiIpLCAmaW5wdXRfbmFtZSk7CisgICAgaWYgKHJldCAhPSBFWElUX1NV Q0NFU1MpIHsKKyAgICAgICAgREVCVUcoU1NTREJHX0NSSVRfRkFJTFVSRSwgIlVuYWJsZSB0byBw YXJzZSBjb21tYW5kIGFyZ3VtZW50c1xuIik7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQor CisgICAgcmV0ID0gc3NzX3Rvb2xfcGFyc2VfbmFtZSh0b29sX2N0eCwgdG9vbF9jdHgsIGlucHV0 X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3JpZ19uYW1lLCAmZG9tYWlu KTsKKyAgICBpZiAocmV0ICE9IEVPSykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiVW5h YmxlIHRvIHBhcnNlIG5hbWUuXG4iKSk7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisg ICAgKl9pbnB1dF9uYW1lID0gaW5wdXRfbmFtZTsKKyAgICAqX29yaWdfbmFtZSA9IG9yaWdfbmFt ZTsKKyAgICAqX2RvbWFpbiA9IGRvbWFpbjsKKworICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9 CisKK3N0YXRpYyBpbnQgcGFyc2VfY21kbGluZV91c2VyX2FkZChzdHJ1Y3Qgc3NzX2NtZGxpbmUg KmNtZGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNzc190 b29sX2N0eCAqdG9vbF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IG92ZXJyaWRlX3VzZXIgKnVzZXIpCit7CisgICAgc3RydWN0IHBvcHRPcHRpb24gb3B0aW9u c1tdID0geworICAgICAgICBQT1BUX0FVVE9IRUxQCisgICAgICAgIHsibmFtZSIsICduJywgUE9Q VF9BUkdfU1RSSU5HLCAmdXNlci0+bmFtZSwgMCwgXygiT3ZlcnJpZGUgbmFtZSIpLCBOVUxMIH0s CisgICAgICAgIHsidWlkIiwgJ3UnLCBQT1BUX0FSR19JTlQsICZ1c2VyLT51aWQsIDAsIF8oIk92 ZXJyaWRlIHVpZCIpLCBOVUxMIH0sCisgICAgICAgIHsiZ2lkIiwgJ2cnLCBQT1BUX0FSR19JTlQs ICZ1c2VyLT5naWQsIDAsIF8oIk92ZXJyaWRlIGdpZCIpLCBOVUxMIH0sCisgICAgICAgIHsiaG9t ZSIsICdoJywgUE9QVF9BUkdfU1RSSU5HLCAmdXNlci0+aG9tZSwgMCwgXygiT3ZlcnJpZGUgaG9t ZSBkaXJlY3RvcnkiKSwgTlVMTCB9LAorICAgICAgICB7InNoZWxsIiwgJ3MnLCBQT1BUX0FSR19T VFJJTkcsICZ1c2VyLT5zaGVsbCwgMCwgXygiT3ZlcnJpZGUgc2hlbGwiKSwgTlVMTCB9LAorICAg ICAgICB7ImdlY29zIiwgJ2MnLCBQT1BUX0FSR19TVFJJTkcsICZ1c2VyLT5nZWNvcywgMCwgXygi T3ZlcnJpZGUgZ2Vjb3MiKSwgTlVMTCB9LAorICAgICAgICBQT1BUX1RBQkxFRU5ECisgICAgfTsK KworICAgIHJldHVybiBwYXJzZV9jbWRsaW5lKGNtZGxpbmUsIHRvb2xfY3R4LCBvcHRpb25zLCAm dXNlci0+aW5wdXRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+b3JpZ19u YW1lLCAmdXNlci0+ZG9tYWluKTsKK30KKworc3RhdGljIGludCBwYXJzZV9jbWRsaW5lX3VzZXJf ZGVsKHN0cnVjdCBzc3NfY21kbGluZSAqY21kbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3Qgc3NzX3Rvb2xfY3R4ICp0b29sX2N0eCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgb3ZlcnJpZGVfdXNlciAqdXNlcikKK3sKKyAgICBy ZXR1cm4gcGFyc2VfY21kbGluZShjbWRsaW5lLCB0b29sX2N0eCwgTlVMTCwgJnVzZXItPmlucHV0 X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPm9yaWdfbmFtZSwgJnVzZXIt PmRvbWFpbik7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfY21kbGluZV9ncm91cF9hZGQoc3RydWN0 IHNzc19jbWRsaW5lICpjbWRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3Qgc3NzX3Rvb2xfY3R4ICp0b29sX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IG92ZXJyaWRlX2dyb3VwICpncm91cCkKK3sKKyAgICBzdHJ1Y3Qg cG9wdE9wdGlvbiBvcHRpb25zW10gPSB7CisgICAgICAgIFBPUFRfQVVUT0hFTFAKKyAgICAgICAg eyJuYW1lIiwgJ24nLCBQT1BUX0FSR19TVFJJTkcsICZncm91cC0+bmFtZSwgMCwgXygiT3ZlcnJp ZGUgbmFtZSIpLCBOVUxMIH0sCisgICAgICAgIHsiZ2lkIiwgJ2cnLCBQT1BUX0FSR19JTlQsICZn cm91cC0+Z2lkLCAwLCBfKCJPdmVycmlkZSBnaWQiKSwgTlVMTCB9LAorICAgICAgICBQT1BUX1RB QkxFRU5ECisgICAgfTsKKworICAgIHJldHVybiBwYXJzZV9jbWRsaW5lKGNtZGxpbmUsIHRvb2xf Y3R4LCBvcHRpb25zLCAmZ3JvdXAtPmlucHV0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgJmdyb3VwLT5vcmlnX25hbWUsICZncm91cC0+ZG9tYWluKTsKK30KKworc3RhdGljIGludCBw YXJzZV9jbWRsaW5lX2dyb3VwX2RlbChzdHJ1Y3Qgc3NzX2NtZGxpbmUgKmNtZGxpbmUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzc3NfdG9vbF9jdHggKnRvb2xf Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgb3ZlcnJpZGVf Z3JvdXAgKmdyb3VwKQoreworICAgIHJldHVybiBwYXJzZV9jbWRsaW5lKGNtZGxpbmUsIHRvb2xf Y3R4LCBOVUxMLCAmZ3JvdXAtPmlucHV0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg Jmdyb3VwLT5vcmlnX25hbWUsICZncm91cC0+ZG9tYWluKTsKK30KKworc3RhdGljIGVycm5vX3Qg cHJlcGFyZV92aWV3KHN0cnVjdCBzc3NfZG9tYWluX2luZm8gKmRvbWFpbikKK3sKKyAgICBjaGFy ICp2aWV3bmFtZSA9IE5VTEw7CisgICAgZXJybm9fdCByZXQ7CisKKyAgICByZXQgPSBzeXNkYl9n ZXRfdmlld19uYW1lKE5VTEwsIGRvbWFpbi0+c3lzZGIsICZ2aWV3bmFtZSk7CisgICAgaWYgKHJl dCAhPSBFT0sgJiYgcmV0ICE9IEVOT0VOVCkgeworICAgICAgICBERUJVRyhTU1NEQkdfT1BfRkFJ TFVSRSwgInN5c2RiX2dldF92aWV3X25hbWUoKSBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJu IHJldDsKKyAgICB9CisKKyAgICBpZiAocmV0ID09IEVPSykgeworICAgICAgICBpZiAoIWlzX2Rl ZmF1bHRfdmlldyh2aWV3bmFtZSkpIHsKKyAgICAgICAgICAgIERFQlVHKFNTU0RCR19NSU5PUl9G QUlMVVJFLCAiVGhlcmUgYWxyZWFkeSBleGlzdHMgdmlldyAlcy4gIgorICAgICAgICAgICAgICAg ICAgIk9ubHkgb25lIHZpZXcgaXMgc3VwcG9ydGVkLiBOb3RoaW5nIHRvIGRvLlxuIiwgdmlld25h bWUpOworICAgICAgICAgICAgcmV0ID0gRUVYSVNUOworICAgICAgICAgICAgZ290byBkb25lOwor ICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcCh2aWV3bmFtZSwgTE9DQUxWSUVXKSA9PSAwKSB7Cisg ICAgICAgICAgICBERUJVRyhTU1NEQkdfVFJBQ0VfRlVOQywgIiVzIHZpZXcgaXMgYWxyZWFkeSBw cmVzZW50LlxuIiwgdmlld25hbWUpOworICAgICAgICAgICAgcmV0ID0gRU9LOworICAgICAgICAg ICAgZ290byBkb25lOworICAgICAgICB9CisgICAgfQorCisgICAgREVCVUcoU1NTREJHX1RSQUNF X0ZVTkMsICJDcmVhdGluZyAlcyB2aWV3LlxuIiwgTE9DQUxWSUVXKTsKKworICAgIHJldCA9IHN5 c2RiX3VwZGF0ZV92aWV3X25hbWUoZG9tYWluLT5zeXNkYiwgTE9DQUxWSUVXKTsKKyAgICBpZiAo cmV0ID09IEVPSykgeworICAgICAgICBwcmludGYoIlNTU0QgbmVlZHMgdG8gYmUgcmVzdGFydGVk IGZvciB0aGUgY2hhbmdlcyB0byB0YWtlIGVmZmVjdC5cbiIpOworICAgIH0KKworZG9uZToKKyAg ICB0YWxsb2NfZnJlZSh2aWV3bmFtZSk7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNo YXIgKmJ1aWxkX2FuY2hvcihUQUxMT0NfQ1RYICptZW1fY3R4LCBjb25zdCBjaGFyICpvYmpfZG4p Cit7CisgICAgY2hhciAqYW5jaG9yOworICAgIGNoYXIgKnNhZmVfZG47CisgICAgZXJybm9fdCBy ZXQ7CisKKyAgICByZXQgPSBzeXNkYl9kbl9zYW5pdGl6ZShtZW1fY3R4LCBvYmpfZG4sICZzYWZl X2RuKTsKKyAgICBpZiAocmV0ICE9IEVPSykgeworICAgICAgICBERUJVRyhTU1NEQkdfQ1JJVF9G QUlMVVJFLCAic3lzZGJfZG5fc2FuaXRpemUoKSBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4g TlVMTDsKKyAgICB9CisKKyAgICBhbmNob3IgPSB0YWxsb2NfYXNwcmludGYobWVtX2N0eCwgIjol czolcyIsIExPQ0FMVklFVywgc2FmZV9kbik7CisKKyAgICB0YWxsb2NfZnJlZShzYWZlX2RuKTsK KworICAgIHJldHVybiBhbmNob3I7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGJfYXR0cnMgKmJ1 aWxkX2F0dHJzKFRBTExPQ19DVFggKm1lbV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdWlkX3QgdWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ2lkX3QgZ2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqaG9tZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKnNoZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqZ2Vjb3MpCit7CisgICAgc3RydWN0IHN5c2RiX2F0dHJzICphdHRy czsKKyAgICBlcnJub190IHJldDsKKworICAgIGF0dHJzID0gc3lzZGJfbmV3X2F0dHJzKG1lbV9j dHgpOworICAgIGlmIChhdHRycyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAg IH0KKworICAgIGlmIChuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgcmV0ID0gc3lzZGJfYXR0cnNf YWRkX3N0cmluZyhhdHRycywgU1lTREJfTkFNRSwgbmFtZSk7CisgICAgICAgIGlmIChyZXQgIT0g RU9LKSB7CisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp ZiAodWlkICE9IDApIHsKKyAgICAgICAgcmV0ID0gc3lzZGJfYXR0cnNfYWRkX3VpbnQzMihhdHRy cywgU1lTREJfVUlETlVNLCB1aWQpOworICAgICAgICBpZiAocmV0ICE9IEVPSykgeworICAgICAg ICAgICAgZ290byBkb25lOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGdpZCAhPSAwKSB7 CisgICAgICAgIHJldCA9IHN5c2RiX2F0dHJzX2FkZF91aW50MzIoYXR0cnMsIFNZU0RCX0dJRE5V TSwgZ2lkKTsKKyAgICAgICAgaWYgKHJldCAhPSBFT0spIHsKKyAgICAgICAgICAgIGdvdG8gZG9u ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChob21lICE9IE5VTEwpIHsKKyAgICAgICAg cmV0ID0gc3lzZGJfYXR0cnNfYWRkX3N0cmluZyhhdHRycywgU1lTREJfSE9NRURJUiwgaG9tZSk7 CisgICAgICAgIGlmIChyZXQgIT0gRU9LKSB7CisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAg ICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2hlbGwgIT0gTlVMTCkgeworICAgICAgICByZXQgPSBz eXNkYl9hdHRyc19hZGRfc3RyaW5nKGF0dHJzLCBTWVNEQl9TSEVMTCwgc2hlbGwpOworICAgICAg ICBpZiAocmV0ICE9IEVPSykgeworICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICB9Cisg ICAgfQorCisgICAgaWYgKGdlY29zICE9IE5VTEwpIHsKKyAgICAgICAgcmV0ID0gc3lzZGJfYXR0 cnNfYWRkX3N0cmluZyhhdHRycywgU1lTREJfR0VDT1MsIGdlY29zKTsKKyAgICAgICAgaWYgKHJl dCAhPSBFT0spIHsKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorICAgIH0KKwor ZG9uZToKKyAgICBpZiAocmV0ICE9IEVPSykgeworICAgICAgICB0YWxsb2NfZnJlZShhdHRycyk7 CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBhdHRyczsKK30KKwor c3RhdGljIHN0cnVjdCBzeXNkYl9hdHRycyAqYnVpbGRfdXNlcl9hdHRycyhUQUxMT0NfQ1RYICpt ZW1fY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3Qgb3ZlcnJpZGVfdXNlciAqdXNlcikKK3sKKyAgICByZXR1cm4gYnVpbGRfYXR0cnMobWVtX2N0 eCwgdXNlci0+bmFtZSwgdXNlci0+dWlkLCB1c2VyLT5naWQsIHVzZXItPmhvbWUsCisgICAgICAg ICAgICAgICAgICAgICAgIHVzZXItPnNoZWxsLCB1c2VyLT5nZWNvcyk7Cit9CisKK3N0YXRpYyBz dHJ1Y3Qgc3lzZGJfYXR0cnMgKmJ1aWxkX2dyb3VwX2F0dHJzKFRBTExPQ19DVFggKm1lbV9jdHgs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgb3Zl cnJpZGVfZ3JvdXAgKmdyb3VwKQoreworICAgIHJldHVybiBidWlsZF9hdHRycyhtZW1fY3R4LCBn cm91cC0+bmFtZSwgMCwgZ3JvdXAtPmdpZCwgMCwgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyBj b25zdCBjaGFyICpnZXRfb2JqZWN0X2RuX2FuZF9kb21haW4oVEFMTE9DX0NUWCAqbWVtX2N0eCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBzeXNkYl9tZW1i ZXJfdHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3Qgc3NzX2RvbWFpbl9pbmZvICpkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzc3NfZG9tYWluX2luZm8gKmRvbWFpbnMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzc3NfZG9tYWluX2lu Zm8gKipfbmV3X2RvbWFpbikKK3sKKyAgICBUQUxMT0NfQ1RYICp0bXBfY3R4OworICAgIHN0cnVj dCBzc3NfZG9tYWluX2luZm8gKmRvbTsKKyAgICBzdHJ1Y3QgbGRiX3Jlc3VsdCAqcmVzOworICAg IGNvbnN0IGNoYXIgKmRuOworICAgIGNvbnN0IGNoYXIgKnN0cnR5cGU7CisgICAgYm9vbCBjaGVj a19uZXh0OworICAgIGVycm5vX3QgcmV0OworCisgICAgdG1wX2N0eCA9IHRhbGxvY19uZXcoTlVM TCk7CisgICAgaWYgKHRtcF9jdHggPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAg ICB9CisKKyAgICAvKiBFbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGNhY2hlLiAqLworICAg IHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgU1lTREJfTUVNQkVSX1VTRVI6CisgICAgICAgIGlm IChnZXRwd25hbShuYW1lKSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXQgPSBFTk9FTlQ7Cisg ICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBTWVNEQl9NRU1CRVJfR1JPVVA6CisgICAgICAgIGlmIChnZXRncm5hbShuYW1lKSA9PSBOVUxM KSB7CisgICAgICAgICAgICByZXQgPSBFTk9FTlQ7CisgICAgICAgICAgICBnb3RvIGRvbmU7Cisg ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgREVCVUcoU1NT REJHX0NSSVRfRkFJTFVSRSwgIlVuc3VwcG9ydGVkIG1lbWJlciB0eXBlICVkXG4iLCB0eXBlKTsK KyAgICAgICAgcmV0ID0gRVJSX0lOVEVSTkFMOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQor CisgICAgLyogRmluZCBkb21haW4gaWYgaXQgaXMgdW5rbm93bi4gKi8KKyAgICBpZiAoZG9tYWlu ID09IE5VTEwpIHsKKyAgICAgICAgY2hlY2tfbmV4dCA9IHRydWU7CisgICAgICAgIGRvbSA9IGRv bWFpbnM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2hlY2tfbmV4dCA9IGZhbHNlOworICAgICAg ICBkb20gPSBkb21haW47CisgICAgfQorCisgICAgZG8geworICAgICAgICBzd2l0Y2ggKHR5cGUp IHsKKyAgICAgICAgY2FzZSBTWVNEQl9NRU1CRVJfVVNFUjoKKyAgICAgICAgICAgIERFQlVHKFNT U0RCR19UUkFDRV9GVU5DLCAiVHJ5aW5nIHRvIGZpbmQgdXNlciAlc0Alc1xuIiwKKyAgICAgICAg ICAgICAgICAgIG5hbWUsIGRvbS0+bmFtZSk7CisgICAgICAgICAgICByZXQgPSBzeXNkYl9nZXRw d25hbSh0bXBfY3R4LCBkb20sIG5hbWUsICZyZXMpOworICAgICAgICAgICAgc3RydHlwZSA9ICJ1 c2VyIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNZU0RCX01FTUJFUl9HUk9V UDoKKyAgICAgICAgICAgIERFQlVHKFNTU0RCR19UUkFDRV9GVU5DLCAiVHJ5aW5nIHRvIGZpbmQg Z3JvdXAgJXNAJXNcbiIsCisgICAgICAgICAgICAgICAgICBuYW1lLCBkb20tPm5hbWUpOworICAg ICAgICAgICAgcmV0ID0gc3lzZGJfZ2V0Z3JuYW0odG1wX2N0eCwgZG9tLCBuYW1lLCAmcmVzKTsK KyAgICAgICAgICAgIHN0cnR5cGUgPSAiZ3JvdXAiOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERUJVRyhTU1NEQkdfQ1JJVF9GQUlMVVJFLCAiVW5z dXBwb3J0ZWQgbWVtYmVyIHR5cGUgJWRcbiIsIHR5cGUpOworICAgICAgICAgICAgcmV0ID0gRVJS X0lOVEVSTkFMOworICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICB9CisKKyAgICAgICAg aWYgKHJldCA9PSBFT0sgJiYgcmVzLT5jb3VudCA9PSAwKSB7CisgICAgICAgICAgICByZXQgPSBF Tk9FTlQ7CisKKyAgICAgICAgICAgIGlmIChjaGVja19uZXh0KSB7CisgICAgICAgICAgICAgICAg ZG9tID0gZG9tLT5uZXh0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHJldCAhPSBFT0spIHsKKyAgICAgICAgICAgIERF QlVHKFNTU0RCR19DUklUX0ZBSUxVUkUsICJVbmFibGUgdG8gZmluZCAlcyAlc0AlcyBbJWRdOiAl c1xuIiwKKyAgICAgICAgICAgICAgICAgIHN0cnR5cGUsIG5hbWUsIGRvbS0+bmFtZSwgcmV0LCBz c3Nfc3RyZXJyb3IocmV0KSk7CisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0gZWxz ZSBpZiAocmVzLT5jb3VudCAhPSAxKSB7CisgICAgICAgICAgICBERUJVRyhTU1NEQkdfQ1JJVF9G QUlMVVJFLCAiTW9yZSB0aGFuIG9uZSAlcyBmb3VuZD9cbiIsIHN0cnR5cGUpOworICAgICAgICAg ICAgcmV0ID0gRVJSX0lOVEVSTkFMOworICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICB9 CisKKyAgICAgICAgY2hlY2tfbmV4dCA9IGZhbHNlOworICAgIH0gd2hpbGUgKGNoZWNrX25leHQg JiYgZG9tICE9IE5VTEwpOworCisgICAgaWYgKGRvbSA9PSBOVUxMKSB7CisgICAgICAgIERFQlVH KFNTU0RCR19DUklUX0ZBSUxVUkUsICJObyBkb21haW4gbWF0Y2ggZm9yICVzXG4iLCBuYW1lKTsK KyAgICAgICAgcmV0ID0gRU5PRU5UOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAg REVCVUcoU1NTREJHX1RSQUNFX0ZVTkMsICJEb21haW4gb2YgJXMgJXMgaXMgJXNcbiIsCisgICAg ICAgICAgc3RydHlwZSwgbmFtZSwgZG9tLT5uYW1lKTsKKworICAgIGRuID0gbGRiX2RuX2dldF9s aW5lYXJpemVkKHJlcy0+bXNnc1swXS0+ZG4pOworICAgIGlmIChkbiA9PSBOVUxMKSB7CisgICAg ICAgIERFQlVHKFNTU0RCR19DUklUX0ZBSUxVUkUsICJsZGJfZG5fZ2V0X2xpbmVhcml6ZWQoKSBm YWlsZWQuXG4iKTsKKyAgICAgICAgcmV0ID0gRU5PTUVNOworICAgICAgICBnb3RvIGRvbmU7Cisg ICAgfQorCisgICAgdGFsbG9jX3N0ZWFsKG1lbV9jdHgsIGRuKTsKKyAgICAqX25ld19kb21haW4g PSBkb207CisKKyAgICByZXQgPSBFT0s7CisKK2RvbmU6CisgICAgdGFsbG9jX2ZyZWUodG1wX2N0 eCk7CisKKyAgICBpZiAocmV0ICE9IEVPSykgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9 CisKKyAgICByZXR1cm4gZG47Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogZ2V0X3VzZXJfZG5f YW5kX2RvbWFpbihUQUxMT0NfQ1RYICptZW1fY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzc3NfZG9tYWluX2luZm8gKmRvbWFpbnMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG92ZXJyaWRlX3Vz ZXIgKnVzZXIpCit7CisgICAgcmV0dXJuIGdldF9vYmplY3RfZG5fYW5kX2RvbWFpbihtZW1fY3R4 LCBTWVNEQl9NRU1CRVJfVVNFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLT5vcmln X25hbWUsIHVzZXItPmRvbWFpbiwgZG9tYWlucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAm dXNlci0+ZG9tYWluKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBnZXRfZ3JvdXBfZG5fYW5k X2RvbWFpbihUQUxMT0NfQ1RYICptZW1fY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3NzX2RvbWFpbl9pbmZvICpkb21haW5zLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgb3ZlcnJpZGVfZ3Jv dXAgKmdyb3VwKQoreworICAgIHJldHVybiBnZXRfb2JqZWN0X2RuX2FuZF9kb21haW4obWVtX2N0 eCwgU1lTREJfTUVNQkVSX0dST1VQLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLT5v cmlnX25hbWUsIGdyb3VwLT5kb21haW4sIGRvbWFpbnMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgJmdyb3VwLT5kb21haW4pOworfQorCitzdGF0aWMgZXJybm9fdCBvdmVycmlkZV9vYmplY3Rf YWRkKHN0cnVjdCBzc3NfZG9tYWluX2luZm8gKmRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZW51bSBzeXNkYl9tZW1iZXJfdHlwZSB0eXBlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3lzZGJfYXR0cnMgKmF0dHJzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvYmpfZG4pCit7CisgICAg VEFMTE9DX0NUWCAqdG1wX2N0eDsKKyAgICBjb25zdCBjaGFyICphbmNob3I7CisgICAgc3RydWN0 IGxkYl9kbiAqbGRiX2RuOworICAgIGVycm5vX3QgcmV0OworCisgICAgdG1wX2N0eCA9IHRhbGxv Y19uZXcoTlVMTCk7CisgICAgaWYgKHRtcF9jdHggPT0gTlVMTCkgeworICAgICAgICByZXR1cm4g RU5PTUVNOworICAgIH0KKworICAgIGxkYl9kbiA9IGxkYl9kbl9uZXcodG1wX2N0eCwgc3lzZGJf Y3R4X2dldF9sZGIoZG9tYWluLT5zeXNkYiksIG9ial9kbik7CisgICAgaWYgKGxkYl9kbiA9PSBO VUxMKSB7CisgICAgICAgIHJldCA9IEVOT01FTTsKKyAgICAgICAgZ290byBkb25lOworICAgIH0K KworICAgIGFuY2hvciA9IGJ1aWxkX2FuY2hvcih0bXBfY3R4LCBvYmpfZG4pOworICAgIGlmIChh bmNob3IgPT0gTlVMTCkgeworICAgICAgICByZXQgPSBFTk9NRU07CisgICAgICAgIGdvdG8gZG9u ZTsKKyAgICB9CisKKyAgICByZXQgPSBzeXNkYl9hdHRyc19hZGRfc3RyaW5nKGF0dHJzLCBTWVNE Ql9PVkVSUklERV9BTkNIT1JfVVVJRCwgYW5jaG9yKTsKKyAgICBpZiAocmV0ICE9IEVPSykgewor ICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgREVCVUcoU1NTREJHX1RSQUNFX0ZVTkMs ICJDcmVhdGluZyBvdmVycmlkZSBmb3IgJXNcbiIsIG9ial9kbik7CisKKyAgICByZXQgPSBzeXNk Yl9zdG9yZV9vdmVycmlkZShkb21haW4sIExPQ0FMVklFVywgdHlwZSwgYXR0cnMsIGxkYl9kbik7 CisKK2RvbmU6CisgICAgdGFsbG9jX2ZyZWUodG1wX2N0eCk7CisgICAgcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGVycm5vX3Qgb3ZlcnJpZGVfb2JqZWN0X2RlbChzdHJ1Y3Qgc3NzX2RvbWFpbl9p bmZvICpkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKm9ial9kbikKK3sKKyAgICBUQUxMT0NfQ1RYICp0bXBfY3R4OworICAgIGNvbnN0IGNoYXIg KmFuY2hvcjsKKyAgICBzdHJ1Y3QgbGRiX2RuICpvdmVycmlkZV9kbjsKKyAgICBzdHJ1Y3QgbGRi X21lc3NhZ2UgKm1zZzsKKyAgICBlcnJub190IHJldDsKKyAgICBpbnQgc3JldDsKKyAgICBib29s IGluX3RyYW5zYWN0aW9uID0gZmFsc2U7CisgICAgc3RydWN0IGxkYl9jb250ZXh0ICpsZGIgPSBz eXNkYl9jdHhfZ2V0X2xkYihkb21haW4tPnN5c2RiKTsKKworICAgIHRtcF9jdHggPSB0YWxsb2Nf bmV3KE5VTEwpOworICAgIGlmICh0bXBfY3R4ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEVO T01FTTsKKyAgICB9CisKKyAgICBhbmNob3IgPSBidWlsZF9hbmNob3IodG1wX2N0eCwgb2JqX2Ru KTsKKyAgICBpZiAoYW5jaG9yID09IE5VTEwpIHsKKyAgICAgICAgcmV0ID0gRU5PTUVNOworICAg ICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgb3ZlcnJpZGVfZG4gPSBsZGJfZG5fbmV3X2Zt dCh0bXBfY3R4LCBsZGIsCisgICAgICAgICAgICAgICAgICAgICAgICBTWVNEQl9UTVBMX09WRVJS SURFLCBhbmNob3IsIExPQ0FMVklFVyk7CisgICAgaWYgKG92ZXJyaWRlX2RuID09IE5VTEwpIHsK KyAgICAgICAgcmV0ID0gRU5PTUVNOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAg REVCVUcoU1NTREJHX1RSQUNFX0ZVTkMsICJSZW1vdmluZyBvdmVycmlkZSBmb3IgJXNcbiIsIG9i al9kbik7CisKKyAgICByZXQgPSBzeXNkYl90cmFuc2FjdGlvbl9zdGFydChkb21haW4tPnN5c2Ri KTsKKyAgICBpZiAocmV0ICE9IEVPSykgeworICAgICAgICBERUJVRyhTU1NEQkdfT1BfRkFJTFVS RSwgInN5c2RiX3RyYW5zYWN0aW9uX3N0YXJ0KCkgZmFpbGVkLlxuIik7CisgICAgICAgIGdvdG8g ZG9uZTsKKyAgICB9CisgICAgaW5fdHJhbnNhY3Rpb24gPSB0cnVlOworCisgICAgcmV0ID0gc3lz ZGJfZGVsZXRlX2VudHJ5KGRvbWFpbi0+c3lzZGIsIG92ZXJyaWRlX2RuLCB0cnVlKTsKKyAgICBp ZiAocmV0ICE9IEVPSykgeworICAgICAgICBERUJVRyhTU1NEQkdfT1BfRkFJTFVSRSwgInN5c2Ri X2RlbGV0ZV9lbnRyeSgpIGZhaWxlZC5cbiIpOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQor CisgICAgbXNnID0gbGRiX21zZ19uZXcodG1wX2N0eCk7CisgICAgaWYgKG1zZyA9PSBOVUxMKSB7 CisgICAgICAgIHJldCA9IEVOT01FTTsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKworICAg IG1zZy0+ZG4gPSBsZGJfZG5fbmV3KG1zZywgbGRiLCBvYmpfZG4pOworICAgIGlmIChtc2ctPmRu ID09IE5VTEwpIHsKKyAgICAgICAgcmV0ID0gRU5PTUVNOworICAgICAgICBnb3RvIGRvbmU7Cisg ICAgfQorCisgICAgcmV0ID0gbGRiX21zZ19hZGRfZW1wdHkobXNnLCBTWVNEQl9PVkVSUklERV9E TiwgTERCX0ZMQUdfTU9EX0RFTEVURSwgTlVMTCk7CisgICAgaWYgKHJldCAhPSBMREJfU1VDQ0VT UykgeworICAgICAgICBERUJVRyhTU1NEQkdfT1BfRkFJTFVSRSwgImxkYl9tc2dfYWRkX2VtcHR5 KCkgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0ID0gc3lzZGJfZXJyb3JfdG9fZXJybm8ocmV0KTsK KyAgICAgICAgZ290byBkb25lOworICAgIH0KKworICAgIHJldCA9IGxkYl9tb2RpZnkobGRiLCBt c2cpOworICAgIGlmIChyZXQgIT0gTERCX1NVQ0NFU1MgJiYgcmV0ICE9IExEQl9FUlJfTk9fU1VD SF9BVFRSSUJVVEUpIHsKKyAgICAgICAgREVCVUcoU1NTREJHX09QX0ZBSUxVUkUsCisgICAgICAg ICAgICAgICJsZGJfbW9kaWZ5KCkgZmFpbGVkOiBbJXNdKCVkKVslc11cbiIsCisgICAgICAgICAg ICAgIGxkYl9zdHJlcnJvcihyZXQpLCByZXQsIGxkYl9lcnJzdHJpbmcobGRiKSk7CisgICAgICAg IHJldCA9IHN5c2RiX2Vycm9yX3RvX2Vycm5vKHJldCk7CisgICAgICAgIGdvdG8gZG9uZTsKKyAg ICB9CisKKyAgICByZXQgPSBzeXNkYl90cmFuc2FjdGlvbl9jb21taXQoZG9tYWluLT5zeXNkYik7 CisgICAgaWYgKHJldCAhPSBFT0spIHsKKyAgICAgICAgREVCVUcoU1NTREJHX0NSSVRfRkFJTFVS RSwgIkZhaWxlZCB0byBjb21taXQgdHJhbnNhY3Rpb25cbiIpOworICAgICAgICBnb3RvIGRvbmU7 CisgICAgfQorICAgIGluX3RyYW5zYWN0aW9uID0gZmFsc2U7CisKKyAgICByZXQgPSBFT0s7CisK K2RvbmU6CisgICAgaWYgKGluX3RyYW5zYWN0aW9uKSB7CisgICAgICAgIHNyZXQgPSBzeXNkYl90 cmFuc2FjdGlvbl9jYW5jZWwoZG9tYWluLT5zeXNkYik7CisgICAgICAgIGlmIChzcmV0ICE9IEVP SykgeworICAgICAgICAgICAgREVCVUcoU1NTREJHX0NSSVRfRkFJTFVSRSwgIkNvdWxkIG5vdCBj YW5jZWwgdHJhbnNhY3Rpb25cbiIpOworICAgICAgICB9CisgICAgfQorCisgICAgdGFsbG9jX2Zy ZWUodG1wX2N0eCk7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvdmVycmlkZV91 c2VyX2FkZChzdHJ1Y3Qgc3NzX2NtZGxpbmUgKmNtZGxpbmUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBzc3NfdG9vbF9jdHggKnRvb2xfY3R4LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICpwdnQpCit7CisgICAgc3RydWN0IG92ZXJyaWRlX3VzZXIgdXNl ciA9IHtOVUxMfTsKKyAgICBzdHJ1Y3Qgc3lzZGJfYXR0cnMgKmF0dHJzOworICAgIGNvbnN0IGNo YXIgKmRuOworICAgIGludCByZXQ7CisKKyAgICByZXQgPSBwYXJzZV9jbWRsaW5lX3VzZXJfYWRk KGNtZGxpbmUsIHRvb2xfY3R4LCAmdXNlcik7CisgICAgaWYgKHJldCAhPSBFT0spIHsKKyAgICAg ICAgREVCVUcoU1NTREJHX0NSSVRfRkFJTFVSRSwgIlVuYWJsZSB0byBwYXJzZSBjb21tYW5kIGxp bmUuXG4iKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICBkbiA9 IGdldF91c2VyX2RuX2FuZF9kb21haW4odG9vbF9jdHgsIHRvb2xfY3R4LT5kb21haW5zLCAmdXNl cik7CisgICAgaWYgKGRuID09IE5VTEwpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIlVu YWJsZSB0byBmaW5kIHVzZXIgJXNAJXMuXG4iKSwKKyAgICAgICAgICAgICAgICB1c2VyLm9yaWdf bmFtZSwgdXNlci5kb21haW4tPm5hbWUpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwor ICAgIH0KKworICAgIHJldCA9IHByZXBhcmVfdmlldyh1c2VyLmRvbWFpbik7CisgICAgaWYgKHJl dCA9PSBFRVhJU1QpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIk90aGVyIHRoYW4gTE9D QUwgdmlldyBhbHJlYWR5IGV4aXN0IGluICIKKyAgICAgICAgICAgICAgICAiZG9tYWluICVzLlxu IiksIHVzZXIuZG9tYWluLT5uYW1lKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAg ICB9IGVsc2UgaWYgKHJldCAhPSBFT0spIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIlVu YWJsZSB0byBwcmVwYXJlIHZpZXcgWyVkXTogJXMuXG4iKSwKKyAgICAgICAgICAgICAgICByZXQs IHNzc19zdHJlcnJvcihyZXQpKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9 CisKKyAgICBhdHRycyA9IGJ1aWxkX3VzZXJfYXR0cnModG9vbF9jdHgsICZ1c2VyKTsKKyAgICBp ZiAoYXR0cnMgPT0gTlVMTCkgeworICAgICAgICBERUJVRyhTU1NEQkdfQ1JJVF9GQUlMVVJFLCAi VW5hYmxlIHRvIGJ1aWxkIHN5c2RiIGF0dHJzLlxuIik7CisgICAgICAgIHJldHVybiBFWElUX0ZB SUxVUkU7CisgICAgfQorCisgICAgcmV0ID0gb3ZlcnJpZGVfb2JqZWN0X2FkZCh1c2VyLmRvbWFp biwgU1lTREJfTUVNQkVSX1VTRVIsIGF0dHJzLCBkbik7CisgICAgaWYgKHJldCAhPSBFT0spIHsK KyAgICAgICAgREVCVUcoU1NTREJHX0NSSVRfRkFJTFVSRSwgIlVuYWJsZSB0byBhZGQgb3ZlcnJp ZGUgb2JqZWN0LlxuIik7CisgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgfQorCisg ICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCBvdmVycmlkZV91c2VyX2Rl bChzdHJ1Y3Qgc3NzX2NtZGxpbmUgKmNtZGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBzc3NfdG9vbF9jdHggKnRvb2xfY3R4LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICpwdnQpCit7CisgICAgc3RydWN0IG92ZXJyaWRlX3VzZXIgdXNlciA9IHtO VUxMfTsKKyAgICBjb25zdCBjaGFyICpkbjsKKyAgICBpbnQgcmV0OworCisgICAgcmV0ID0gcGFy c2VfY21kbGluZV91c2VyX2RlbChjbWRsaW5lLCB0b29sX2N0eCwgJnVzZXIpOworICAgIGlmIChy ZXQgIT0gRU9LKSB7CisgICAgICAgIERFQlVHKFNTU0RCR19DUklUX0ZBSUxVUkUsICJVbmFibGUg dG8gcGFyc2UgY29tbWFuZCBsaW5lLlxuIik7CisgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7 CisgICAgfQorCisgICAgZG4gPSBnZXRfdXNlcl9kbl9hbmRfZG9tYWluKHRvb2xfY3R4LCB0b29s X2N0eC0+ZG9tYWlucywgJnVzZXIpOworICAgIGlmIChkbiA9PSBOVUxMKSB7CisgICAgICAgIGZw cmludGYoc3RkZXJyLCBfKCJVbmFibGUgdG8gZmluZCB1c2VyICVzQCVzLlxuIiksCisgICAgICAg ICAgICAgICAgdXNlci5vcmlnX25hbWUsIHVzZXIuZG9tYWluLT5uYW1lKTsKKyAgICAgICAgcmV0 dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICByZXQgPSBvdmVycmlkZV9vYmplY3RfZGVs KHVzZXIuZG9tYWluLCBkbik7CisgICAgaWYgKHJldCAhPSBFT0spIHsKKyAgICAgICAgREVCVUco U1NTREJHX0NSSVRfRkFJTFVSRSwgIlVuYWJsZSB0byBhZGQgb3ZlcnJpZGUgb2JqZWN0LlxuIik7 CisgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgfQorCisgICAgcmV0dXJuIEVYSVRf U1VDQ0VTUzsKK30KKworc3RhdGljIGludCBvdmVycmlkZV9ncm91cF9hZGQoc3RydWN0IHNzc19j bWRsaW5lICpjbWRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNz c190b29sX2N0eCAqdG9vbF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICpwdnQpCit7CisgICAgc3RydWN0IG92ZXJyaWRlX2dyb3VwIGdyb3VwID0ge05VTEx9OworICAg IHN0cnVjdCBzeXNkYl9hdHRycyAqYXR0cnM7CisgICAgY29uc3QgY2hhciAqZG47CisgICAgaW50 IHJldDsKKworICAgIHJldCA9IHBhcnNlX2NtZGxpbmVfZ3JvdXBfYWRkKGNtZGxpbmUsIHRvb2xf Y3R4LCAmZ3JvdXApOworICAgIGlmIChyZXQgIT0gRU9LKSB7CisgICAgICAgIERFQlVHKFNTU0RC R19DUklUX0ZBSUxVUkUsICJVbmFibGUgdG8gcGFyc2UgY29tbWFuZCBsaW5lLlxuIik7CisgICAg ICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgfQorCisgICAgZG4gPSBnZXRfZ3JvdXBfZG5f YW5kX2RvbWFpbih0b29sX2N0eCwgdG9vbF9jdHgtPmRvbWFpbnMsICZncm91cCk7CisgICAgaWYg KGRuID09IE5VTEwpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIlVuYWJsZSB0byBmaW5k IGdyb3VwICVzQCVzLlxuIiksCisgICAgICAgICAgICAgICAgZ3JvdXAub3JpZ19uYW1lLCBncm91 cC5kb21haW4tPm5hbWUpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgIH0KKwor ICAgIHJldCA9IHByZXBhcmVfdmlldyhncm91cC5kb21haW4pOworICAgIGlmIChyZXQgPT0gRUVY SVNUKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJPdGhlciB0aGFuIExPQ0FMIHZpZXcg YWxyZWFkeSBleGlzdCBpbiAiCisgICAgICAgICAgICAgICAgImRvbWFpbiAlcy5cbiIpLCBncm91 cC5kb21haW4tPm5hbWUpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgIH0gZWxz ZSBpZiAocmV0ICE9IEVPSykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiVW5hYmxlIHRv IHByZXBhcmUgdmlldyBbJWRdOiAlcy5cbiIpLAorICAgICAgICAgICAgICAgIHJldCwgc3NzX3N0 cmVycm9yKHJldCkpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgIH0KKworICAg IGF0dHJzID0gYnVpbGRfZ3JvdXBfYXR0cnModG9vbF9jdHgsICZncm91cCk7CisgICAgaWYgKGF0 dHJzID09IE5VTEwpIHsKKyAgICAgICAgREVCVUcoU1NTREJHX0NSSVRfRkFJTFVSRSwgIlVuYWJs ZSB0byBidWlsZCBzeXNkYiBhdHRycy5cbiIpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJF OworICAgIH0KKworICAgIHJldCA9IG92ZXJyaWRlX29iamVjdF9hZGQoZ3JvdXAuZG9tYWluLCBT WVNEQl9NRU1CRVJfR1JPVVAsIGF0dHJzLCBkbik7CisgICAgaWYgKHJldCAhPSBFT0spIHsKKyAg ICAgICAgREVCVUcoU1NTREJHX0NSSVRfRkFJTFVSRSwgIlVuYWJsZSB0byBhZGQgb3ZlcnJpZGUg b2JqZWN0LlxuIik7CisgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgfQorCisgICAg cmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCBvdmVycmlkZV9ncm91cF9kZWwo c3RydWN0IHNzc19jbWRsaW5lICpjbWRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHNzc190b29sX2N0eCAqdG9vbF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICpwdnQpCit7CisgICAgc3RydWN0IG92ZXJyaWRlX2dyb3VwIGdyb3VwID0g e05VTEx9OworICAgIGNvbnN0IGNoYXIgKmRuOworICAgIGludCByZXQ7CisKKyAgICByZXQgPSBw YXJzZV9jbWRsaW5lX2dyb3VwX2RlbChjbWRsaW5lLCB0b29sX2N0eCwgJmdyb3VwKTsKKyAgICBp ZiAocmV0ICE9IEVPSykgeworICAgICAgICBERUJVRyhTU1NEQkdfQ1JJVF9GQUlMVVJFLCAiVW5h YmxlIHRvIHBhcnNlIGNvbW1hbmQgbGluZS5cbiIpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlM VVJFOworICAgIH0KKworICAgIGRuID0gZ2V0X2dyb3VwX2RuX2FuZF9kb21haW4odG9vbF9jdHgs IHRvb2xfY3R4LT5kb21haW5zLCAmZ3JvdXApOworICAgIGlmIChkbiA9PSBOVUxMKSB7CisgICAg ICAgIGZwcmludGYoc3RkZXJyLCBfKCJVbmFibGUgdG8gZmluZCBncm91cCAlc0Alcy5cbiIpLAor ICAgICAgICAgICAgICAgIGdyb3VwLm9yaWdfbmFtZSwgZ3JvdXAuZG9tYWluLT5uYW1lKTsKKyAg ICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICByZXQgPSBvdmVycmlkZV9v YmplY3RfZGVsKGdyb3VwLmRvbWFpbiwgZG4pOworICAgIGlmIChyZXQgIT0gRU9LKSB7CisgICAg ICAgIERFQlVHKFNTU0RCR19DUklUX0ZBSUxVUkUsICJVbmFibGUgdG8gYWRkIG92ZXJyaWRlIG9i amVjdC5cbiIpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgIH0KKworICAgIHJl dHVybiBFWElUX1NVQ0NFU1M7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoq YXJndikKK3sKKyAgICBzdHJ1Y3Qgc3NzX3JvdXRlX2NtZCBjb21tYW5kc1tdID0geworICAgICAg ICB7InVzZXItYWRkIiwgb3ZlcnJpZGVfdXNlcl9hZGR9LAorICAgICAgICB7InVzZXItZGVsIiwg b3ZlcnJpZGVfdXNlcl9kZWx9LAorICAgICAgICB7Imdyb3VwLWFkZCIsIG92ZXJyaWRlX2dyb3Vw X2FkZH0sCisgICAgICAgIHsiZ3JvdXAtZGVsIiwgb3ZlcnJpZGVfZ3JvdXBfZGVsfSwKKyAgICAg ICAge05VTEwsIE5VTEx9CisgICAgfTsKKworICAgIHJldHVybiBzc3NfdG9vbF9tYWluKGFyZ2Ms IGFyZ3YsIGNvbW1hbmRzLCBOVUxMKTsKK30KLS0gCjIuMS4wCgo= --===============4221040553505546418==--