Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1we79R-004ZP6-0N for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jun 2026 08:15:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1we78P-001rA8-34 for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jun 2026 08:14:29 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1we78O-001r9t-32 for pgsql-hackers@lists.postgresql.org; Mon, 29 Jun 2026 08:14:29 +0000 Received: from mail-dl1-x1229.google.com ([2607:f8b0:4864:20::1229]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1we78M-00000000j9g-1rNd for pgsql-hackers@postgresql.org; Mon, 29 Jun 2026 08:14:28 +0000 Received: by mail-dl1-x1229.google.com with SMTP id a92af1059eb24-13981833e13so3777024c88.1 for ; Mon, 29 Jun 2026 01:14:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782720865; cv=none; d=google.com; s=arc-20260327; b=TNZGesjVqnz0xcKkobyohsv8/Fw/tE7HseH4vsg4mpi8/3Z7gx87mZxO9T6sCu83Bk i7V3YMtP0c24w7t1ap4eD4J8FNaAfLAsI3jlXKrMWsk2mhsyxXybWU2/rt5J7MLs8/JB Gzq4AYZ8eQVBV1CrsN27hgzSwhNFOKQojJAuc8Lf1iEoK9/4CekIOX49HdvE00E6RbQ3 YL4wD/1qzT1IMbwN1pB2IHxJND55e4BXWjE5nwMk8HH9MV5/G0GP9BLSvjz8GIGlXXFc iRactiAIuJOqujmEV/KKZum01zOn8k7TDZYutMDxq7XPVU3XWQwqM2OqQNwvVJU1iREa fkyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=4ndXnlpdkLEHrDQLSnncr0jNM8WoWRpqIaVd3fffE/U=; fh=952TBaeyvbnVFKcno/zMXvkbtLKEe9Y3TMBk7u/hCeY=; b=BV/FL5lfA43NCZktKSg2dIX7Rpt8OSP3SB4g98OOQ8Y5dzpw8aA/Gj7a82sxNrz0C0 8lV/Ba/747eny6tIxpVhWEoPhPJMRG7QL//rmEWe76qwzAzRvNySiWkJ0ndqYg6k3e8P lZ8OiyBLed7WZx04y4KH9smHFGegappcXc/YTvQj5Yh7n4OqszPhWv2kaSfDxM0ZloEi goizuDsdsfWMA/ulLKWcHDr/Zv6hZDIo3bGJuBPc04jwayfSbhAy/zsp4kTmaIS5nn9H hJ71i9YvxEmi76dOsKss9AjiDKwEbqmTtsq3YeVLKsPhy654fx+nelu5wYvuEqCmW4ze SLpQ==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782720865; x=1783325665; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=4ndXnlpdkLEHrDQLSnncr0jNM8WoWRpqIaVd3fffE/U=; b=ooPkt5qzjO4cxr9pS8h1DQ0Rb/Qi1ltNeYYeG5NxQ0lOa5nCm3Pk55SN2Xk77ZxgeD zSaCYDf8McSROcn7Iw/IdiaXGi7X2xBpUff0JOINjDtlejQmYAnBQLk+BJmbrc5NC9bZ fPMaA5ATYpoyxcULI2N2nTB8cKRrN7SJClyw9HEKvSViUS+ZUq72kV/YUeTquHy9dnKO T9CKLBTTB69iJ3f97+YSH2EZP4o/eorGlIx9XX7cEjv3boxRA5/htEhGAdrVSRjIG/tZ +o9X+8BVOVpTsHG5+3+fPOwj/MYjicxfZmcY8tLdVSmjBDzyTtadRyDoSr3H14UMQLcU 8o7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782720865; x=1783325665; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=4ndXnlpdkLEHrDQLSnncr0jNM8WoWRpqIaVd3fffE/U=; b=Ce9VhuU03kzaEkI55v8lN/MJxUTu7K1V+oXRDetXe0YFQrPDJ40CWOQLhWvwYTvB7r S7JKbtMUHo69R1cEVXXRO8xehsL+oKw7ZUMIyJV920U9juDQI7+T1C7T4Sqzyah4f6Za Oe4te63/hQ6PMR5NHzOgDl3a3qVCiZdlMYYvBM2CheQyOCwj/KarrhPBd/koAImIbn3O 6h6dqaOGcSTrBlMSOiEfxbXP3ZgR42og27M7m19lbzmU6SfHv2D/qZ1+dqYulMb8aIsv mKIUxK/0lGts/y4XZ9Uwbx1hcJP29o5Lxf6BVGuLobKZQTFu5+tuDgkWmqYXNXPR/Q1J d+gg== X-Forwarded-Encrypted: i=1; AFNElJ+Ya789G6ger3LhrGS/ahhjqlqGfbvrWBD5t+D8+uegviBV7vMYSrq9zg9MBIALf1mLorYFwgMf4gJ7aJBc@postgresql.org X-Gm-Message-State: AOJu0Yys3pVt9BIbC+bVCy4KlV5bNWUlQwnk08DO88Ga+gsM23znTHgG l6Xd2DFpOeC3qTIIIwo4h75GC14U5nEpAcEOOmw9nPr5VE+viYnQpLz18rzXQTQv+8VdRo8rv9u 35RyxWqtNlCqk6YucsAZ/Y2EOFIrPsBM= X-Gm-Gg: AfdE7ck0rJIrl3t08xtZseflhLVHVc+lSpOIQM04EK/1Nq7XabELENWEv2hpfgzjQLB gIf1yrHjLxjM73RMNC9N2oSnGv7wRBStLC1wc5Sx6b5tZQz/24ZSiUdcFm4V04bCp6DmuZbjuqQ m3wKyZMGz/IcO1GCP3LxOa8CYqM02G4EF/dfibugWA7RImZD6Zawo/GYNK5jttTGeEzHl+HAnXj W+A+qks13uuLUFT/dScS3QCOgscWDYbTzvgirC4KulIiFuYgOZDS5I3oENpOn8zbd4DS+OmRVvn CyipYyIK8aL43dzCaL+5lmNH8gHL5VrM3njZVZKjfnR62ADkaSt4UWuS/lcEzFpUKpI7IUcNJcF QIIAyRsWe0PWa/gzDGyfAKHQBTziJwoD0YBCFor+vsp0cIJd4 X-Received: by 2002:a05:7022:48a:b0:137:eac4:82ae with SMTP id a92af1059eb24-139dbb34c2dmr13278719c88.37.1782720865293; Mon, 29 Jun 2026 01:14:25 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Corey Huinker Date: Mon, 29 Jun 2026 03:14:11 -0500 X-Gm-Features: AVVi8CeH90aGsEEpZl6sEdQ385oHkOxgw4ijv7c-oWIF5SIIP0GstaVh9RQdKbg Message-ID: Subject: Re: use of SPI by postgresImportForeignStatistics To: Robert Haas Cc: Etsuro Fujita , "pgsql-hackers@postgresql.org" Content-Type: multipart/mixed; boundary="000000000000e977f10655600bcf" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e977f10655600bcf Content-Type: multipart/alternative; boundary="000000000000e977f00655600bcd" --000000000000e977f00655600bcd Content-Type: text/plain; charset="UTF-8" > > > Requiring Datums simplifies things greatly inside the existing functions, > but pushes that complexity to the caller. My first proposal was to keep > complexity to an absolute minimum on the caller side, but your comments > make me think there's considerable tolerance for more complexity on the > caller side. > I've had some time to look this over, and it's pretty clear that we don't actually need the whole positional FunctionCallInfo, we just need the fcinfo->args of it. We also need the ability to pass statistical values along with the values that comprise the key of the relation/attribute/object to be modified. There are important differences in the parameters needed by the different types of functions. The pg_restore_*() SQL function calls need to identify the schema+relname of the relation being modified, and already have all of the values as typed Datums, whereas the internal API calls already have an identified and locked open Relation, but all of the statistical parameters are just cstrings. The solution I chose was to create common functions that take a relation object and an array of just the statistical parameters. This requires the pg_restore_* functions to resolve and lock the relation themselves, and then carry forward just the subset of parameters that are statistics (right types, but wrong number of arguments). Conversely, the internal API functions need to map their array of cstring values to the correctly typed Datums (wrong types, but right number of arguments in the right order). Attached is v2. The patches are broken down into very small bites to aid digestion and to confirm that tests pass after each comparatively minor change. 0001-0003: standardize enum values to further indicate which enum the values belong to. This will be valuable later when values from an array of one length have to be mapped to values in an array of a different length. One patch each for relation stats, attribute stats, extended stats. 0004: Refactors the stats_check_* functions that previously took an fcinfo, but now just take a NullableDatum array. 0005-0007: Change the function signature of (relation|attribute|extended)_statistics_update() to no longer take FunctionCallInfo as a parameter and instead take a NullableDatum[]. 0008: Changes stats_fill_fcinfo_from_args() which maps a keyword args fcinfo to a positional fcinfo to map directly to a NullableDatum[], and changes all callers to use the new function and signature. 0009: rename relation_statistics_update -> update_relstats and relation_stats_argnum -> relation_args_argnum to make room for public-facing objects in the following patch. 0010: Introduce new public facing relation_statistics_update, which takes isnull/string arrays that will be filled out by the caller, currently postgres_fdw, and calls update_relstats same as pg_restore_relation_stats(). 0011: same as 0009, but for attribute stats 0012: same as 0010, but for attribute stats 0013: remove SPI calls from postgres_fdw, and use the newly public relation_statistics_update() and attribute_statistics_update() functions instead. --000000000000e977f00655600bcd Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Requiring Datums simplifies things greatly inside the ex= isting functions, but pushes that complexity to the caller. My first propos= al was to keep complexity to an absolute minimum on the caller side, but yo= ur comments make me think there's considerable tolerance for more compl= exity on the caller side.
I've had some time to look this over, and it's pretty c= lear that we don't actually need the whole positional FunctionCallInfo,= we just need the fcinfo->args of it. We also need the ability to pass s= tatistical values along with the values that comprise the key of the relati= on/attribute/object to be modified.

There are impo= rtant differences in the parameters needed by the different types of functi= ons. The pg_restore_*() SQL function calls need to identify the schema+reln= ame of the relation being modified, and already have all of the values as t= yped Datums, whereas the internal API calls already have an identified and = locked open Relation, but all of the statistical parameters are just cstrin= gs.

The solution I chose was to create common functions t= hat take a relation object and an array of just the statistical parameters.= This requires the pg_restore_* functions to resolve and lock the relation = themselves, and then carry forward just the subset of parameters that are s= tatistics (right types, but wrong number of arguments). Conversely, the int= ernal API functions need to map their array of cstring values to the correc= tly typed Datums (wrong types, but right number of arguments in the right o= rder).

Attached is v2. The patches are broken down= into very small bites to aid digestion and to confirm that tests pass afte= r each comparatively minor change.

0001-0003: standardize= enum values to further indicate which enum the values belong to. This will= be valuable later when values from an array of one length have to be mappe= d to values in an array of a different length.=C2=A0One patch each for rela= tion stats, attribute stats, extended stats.

0= 004: Refactors the stats_check_* functions that previously took an fcinfo, = but now just take a NullableDatum array.

0005-0007: Chang= e the function signature of (relation|attribute|extended)_statistics_update= () to no longer take FunctionCallInfo as a parameter and instead take a Nul= lableDatum[].

0008: Changes stats_fill_fcinfo_from= _args() which maps a keyword args fcinfo to a positional fcinfo to map dire= ctly to a NullableDatum[], and changes all callers to use the new function = and signature.

0009: rename relation_statistics_up= date -> update_relstats and relation_stats_argnum -> relation_args_ar= gnum to make room for public-facing objects in the following patch.
0010: Introduce new public facing relation_statistics_update, which take= s isnull/string arrays that will be filled out by the caller, currently pos= tgres_fdw, and calls update_relstats same as pg_restore_relation_stats().

0011: same as 0009, but for attribute stats
0012: same as 0010, but for attribute stats

001= 3: remove SPI calls from postgres_fdw, and use the newly public relation_st= atistics_update() and attribute_statistics_update() functions instead.
=C2=A0
--000000000000e977f00655600bcd-- --000000000000e977f10655600bcf Content-Type: application/octet-stream; name="v2-0004-Stop-using-fcinfo-in-stats_check-functions.patch" Content-Disposition: attachment; filename="v2-0004-Stop-using-fcinfo-in-stats_check-functions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqyw9g6w3 RnJvbSA3N2MwOGQwMDUzMDI0NjkyOGJmNjA3ZTM3N2FlNjA5NTQ3YjQ5MTdmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogU3VuLCAyOCBKdW4gMjAyNiAxNToyNjoyMyAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djIgMDQvMTNdIFN0b3AgdXNpbmcgZmNpbmZvIGluIHN0YXRzX2NoZWNrIGZ1bmN0aW9ucy4KCkNo YW5nZSB0aGUgc3RhdHNfY2hlY2sgdXRsaXR5IGZ1bmN0aW9ucyBmcm9tIHRha2luZyBhIGZ1bGwK RnVuY3Rpb25DYWxsSW5mbyBhbmQgaW5zdGVhZCBqdXN0IHVzZSB0aGUgTnVsbGFibGVEYXRhIGFy cmF5LCB3aGljaCBpcwphbGwgdGhlIGZ1bmN0aW9ucyBuZWVkZWQgYW55d2F5LgoKQ2FsbGVycyBj YW4gbm93IHBhc3MgaW4gZmNpbmZvLT5hcmdzIGluc3RlYWQgb2YgZmNpbmZvIGFzIGFuCmludGVy bWVkaWF0ZSBzdGVwIHRvd2FyZHMgcmVtb3ZpbmcgRnVuY3Rpb25DYWxsSW5mbyBlbnRpcmVseS4K LS0tCiBzcmMvYmFja2VuZC9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5jICAgICAgfCAyNiAr KysrKysrKystLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRz X2Z1bmNzLmMgfCAyMCArKysrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9yZWxh dGlvbl9zdGF0cy5jICAgICAgIHwgIDQgKy0tCiBzcmMvYmFja2VuZC9zdGF0aXN0aWNzL3N0YXRf dXRpbHMuYyAgICAgICAgICAgfCAyMCArKysrKysrLS0tLS0tLQogc3JjL2luY2x1ZGUvc3RhdGlz dGljcy9zdGF0X3V0aWxzLmggICAgICAgICAgIHwgIDcgKystLS0KIDUgZmlsZXMgY2hhbmdlZCwg MzkgaW5zZXJ0aW9ucygrKSwgMzggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuYyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3Mv YXR0cmlidXRlX3N0YXRzLmMKaW5kZXggYTBlYzY2NzAxMWUuLmZiYjUyMTMxZWQwIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5jCisrKyBiL3NyYy9i YWNrZW5kL3N0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmMKQEAgLTE2OCw4ICsxNjgsOCBAQCBh dHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAKIAli b29sCQlyZXN1bHQgPSB0cnVlOwogCi0Jc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywg YXR0YXJnaW5mbywgQVRUQVJHX0FUVFJFTFNDSEVNQSk7Ci0Jc3RhdHNfY2hlY2tfcmVxdWlyZWRf YXJnKGZjaW5mbywgYXR0YXJnaW5mbywgQVRUQVJHX0FUVFJFTE5BTUUpOworCXN0YXRzX2NoZWNr X3JlcXVpcmVkX2FyZyhmY2luZm8tPmFyZ3MsIGF0dGFyZ2luZm8sIEFUVEFSR19BVFRSRUxTQ0hF TUEpOworCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8tPmFyZ3MsIGF0dGFyZ2luZm8s IEFUVEFSR19BVFRSRUxOQU1FKTsKIAogCW5zcG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBH X0dFVEFSR19EQVRVTShBVFRBUkdfQVRUUkVMU0NIRU1BKSk7CiAJcmVsbmFtZSA9IFRleHREYXR1 bUdldENTdHJpbmcoUEdfR0VUQVJHX0RBVFVNKEFUVEFSR19BVFRSRUxOQU1FKSk7CkBAIC0yMjgs NyArMjI4LDcgQEAgYXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8g ZmNpbmZvKQogCQkJCSBlcnJtc2coImNhbm5vdCBtb2RpZnkgc3RhdGlzdGljcyBvbiBzeXN0ZW0g Y29sdW1uIFwiJXNcIiIsCiAJCQkJCQlhdHRuYW1lKSkpOwogCi0Jc3RhdHNfY2hlY2tfcmVxdWly ZWRfYXJnKGZjaW5mbywgYXR0YXJnaW5mbywgQVRUQVJHX0lOSEVSSVRFRCk7CisJc3RhdHNfY2hl Y2tfcmVxdWlyZWRfYXJnKGZjaW5mby0+YXJncywgYXR0YXJnaW5mbywgQVRUQVJHX0lOSEVSSVRF RCk7CiAJaW5oZXJpdGVkID0gUEdfR0VUQVJHX0JPT0woQVRUQVJHX0lOSEVSSVRFRCk7CiAKIAkv KgpAQCAtMjM2LDMxICsyMzYsMzEgQEAgYXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0 aW9uQ2FsbEluZm8gZmNpbmZvKQogCSAqIGFuZCBzZXQgdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1l bnQgdG8gTlVMTCBpbiBmY2luZm8uCiAJICovCiAKLQlpZiAoIXN0YXRzX2NoZWNrX2FyZ19hcnJh eShmY2luZm8sIGF0dGFyZ2luZm8sIEFUVEFSR19NT1NUX0NPTU1PTl9GUkVRUykpCisJaWYgKCFz dGF0c19jaGVja19hcmdfYXJyYXkoZmNpbmZvLT5hcmdzLCBhdHRhcmdpbmZvLCBBVFRBUkdfTU9T VF9DT01NT05fRlJFUVMpKQogCXsKIAkJZG9fbWN2ID0gZmFsc2U7CiAJCXJlc3VsdCA9IGZhbHNl OwogCX0KIAotCWlmICghc3RhdHNfY2hlY2tfYXJnX2FycmF5KGZjaW5mbywgYXR0YXJnaW5mbywg QVRUQVJHX01PU1RfQ09NTU9OX0VMRU1fRlJFUVMpKQorCWlmICghc3RhdHNfY2hlY2tfYXJnX2Fy cmF5KGZjaW5mby0+YXJncywgYXR0YXJnaW5mbywgQVRUQVJHX01PU1RfQ09NTU9OX0VMRU1fRlJF UVMpKQogCXsKIAkJZG9fbWNlbGVtID0gZmFsc2U7CiAJCXJlc3VsdCA9IGZhbHNlOwogCX0KLQlp ZiAoIXN0YXRzX2NoZWNrX2FyZ19hcnJheShmY2luZm8sIGF0dGFyZ2luZm8sIEFUVEFSR19FTEVN X0NPVU5UX0hJU1RPR1JBTSkpCisJaWYgKCFzdGF0c19jaGVja19hcmdfYXJyYXkoZmNpbmZvLT5h cmdzLCBhdHRhcmdpbmZvLCBBVFRBUkdfRUxFTV9DT1VOVF9ISVNUT0dSQU0pKQogCXsKIAkJZG9f ZGVjaGlzdCA9IGZhbHNlOwogCQlyZXN1bHQgPSBmYWxzZTsKIAl9CiAKLQlpZiAoIXN0YXRzX2No ZWNrX2FyZ19wYWlyKGZjaW5mbywgYXR0YXJnaW5mbywKKwlpZiAoIXN0YXRzX2NoZWNrX2FyZ19w YWlyKGZjaW5mby0+YXJncywgYXR0YXJnaW5mbywKIAkJCQkJCQkgIEFUVEFSR19NT1NUX0NPTU1P Tl9WQUxTLCBBVFRBUkdfTU9TVF9DT01NT05fRlJFUVMpKQogCXsKIAkJZG9fbWN2ID0gZmFsc2U7 CiAJCXJlc3VsdCA9IGZhbHNlOwogCX0KIAotCWlmICghc3RhdHNfY2hlY2tfYXJnX3BhaXIoZmNp bmZvLCBhdHRhcmdpbmZvLAorCWlmICghc3RhdHNfY2hlY2tfYXJnX3BhaXIoZmNpbmZvLT5hcmdz LCBhdHRhcmdpbmZvLAogCQkJCQkJCSAgQVRUQVJHX01PU1RfQ09NTU9OX0VMRU1TLAogCQkJCQkJ CSAgQVRUQVJHX01PU1RfQ09NTU9OX0VMRU1fRlJFUVMpKQogCXsKQEAgLTI2OCw3ICsyNjgsNyBA QCBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJ CXJlc3VsdCA9IGZhbHNlOwogCX0KIAotCWlmICghc3RhdHNfY2hlY2tfYXJnX3BhaXIoZmNpbmZv LCBhdHRhcmdpbmZvLAorCWlmICghc3RhdHNfY2hlY2tfYXJnX3BhaXIoZmNpbmZvLT5hcmdzLCBh dHRhcmdpbmZvLAogCQkJCQkJCSAgQVRUQVJHX1JBTkdFX0xFTkdUSF9ISVNUT0dSQU0sCiAJCQkJ CQkJICBBVFRBUkdfUkFOR0VfRU1QVFlfRlJBQykpCiAJewpAQCAtNjA1LDEwICs2MDUsMTAgQEAg cGdfY2xlYXJfYXR0cmlidXRlX3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYm9vbAkJaW5oZXJp dGVkOwogCU9pZAkJCWxvY2tlZF90YWJsZSA9IEludmFsaWRPaWQ7CiAKLQlzdGF0c19jaGVja19y ZXF1aXJlZF9hcmcoZmNpbmZvLCBjbGVhcmFyZ2luZm8sIENfQVRUQVJHX0FUVFJFTFNDSEVNQSk7 Ci0Jc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgY2xlYXJhcmdpbmZvLCBDX0FUVEFS R19BVFRSRUxOQU1FKTsKLQlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBjbGVhcmFy Z2luZm8sIENfQVRUQVJHX0FUVE5BTUUpOwotCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2lu Zm8sIGNsZWFyYXJnaW5mbywgQ19BVFRBUkdfSU5IRVJJVEVEKTsKKwlzdGF0c19jaGVja19yZXF1 aXJlZF9hcmcoZmNpbmZvLT5hcmdzLCBjbGVhcmFyZ2luZm8sIENfQVRUQVJHX0FUVFJFTFNDSEVN QSk7CisJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mby0+YXJncywgY2xlYXJhcmdpbmZv LCBDX0FUVEFSR19BVFRSRUxOQU1FKTsKKwlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZv LT5hcmdzLCBjbGVhcmFyZ2luZm8sIENfQVRUQVJHX0FUVE5BTUUpOworCXN0YXRzX2NoZWNrX3Jl cXVpcmVkX2FyZyhmY2luZm8tPmFyZ3MsIGNsZWFyYXJnaW5mbywgQ19BVFRBUkdfSU5IRVJJVEVE KTsKIAogCW5zcG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRVTShDX0FU VEFSR19BVFRSRUxTQ0hFTUEpKTsKIAlyZWxuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhQR19H RVRBUkdfREFUVU0oQ19BVFRBUkdfQVRUUkVMTkFNRSkpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0c19mdW5jcy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlz dGljcy9leHRlbmRlZF9zdGF0c19mdW5jcy5jCmluZGV4IGY5NjM3NmQ1OGQ4Li5mOWExZDI4N2Uy MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0c19mdW5j cy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHNfZnVuY3MuYwpA QCAtMzczLDE3ICszNzMsMTcgQEAgZXh0ZW5kZWRfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25D YWxsSW5mbyBmY2luZm8pCiAJfQogCiAJLyogcmVsYXRpb24gYXJndW1lbnRzICovCi0Jc3RhdHNf Y2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgZXh0YXJnaW5mbywgRVhUQVJHX1JFTFNDSEVNQSk7 CisJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mby0+YXJncywgZXh0YXJnaW5mbywgRVhU QVJHX1JFTFNDSEVNQSk7CiAJcmVsbnNwbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoUEdfR0VU QVJHX0RBVFVNKEVYVEFSR19SRUxTQ0hFTUEpKTsKLQlzdGF0c19jaGVja19yZXF1aXJlZF9hcmco ZmNpbmZvLCBleHRhcmdpbmZvLCBFWFRBUkdfUkVMTkFNRSk7CisJc3RhdHNfY2hlY2tfcmVxdWly ZWRfYXJnKGZjaW5mby0+YXJncywgZXh0YXJnaW5mbywgRVhUQVJHX1JFTE5BTUUpOwogCXJlbG5h bWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRVTShFWFRBUkdfUkVMTkFNRSkp OwogCiAJLyogZXh0ZW5kZWQgc3RhdGlzdGljcyBhcmd1bWVudHMgKi8KLQlzdGF0c19jaGVja19y ZXF1aXJlZF9hcmcoZmNpbmZvLCBleHRhcmdpbmZvLCBFWFRBUkdfU1RBVFNDSEVNQSk7CisJc3Rh dHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mby0+YXJncywgZXh0YXJnaW5mbywgRVhUQVJHX1NU QVRTQ0hFTUEpOwogCW5zcG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRV TShFWFRBUkdfU1RBVFNDSEVNQSkpOwotCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8s IGV4dGFyZ2luZm8sIEVYVEFSR19TVEFUTkFNRSk7CisJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJn KGZjaW5mby0+YXJncywgZXh0YXJnaW5mbywgRVhUQVJHX1NUQVROQU1FKTsKIAlzdHhuYW1lID0g VGV4dERhdHVtR2V0Q1N0cmluZyhQR19HRVRBUkdfREFUVU0oRVhUQVJHX1NUQVROQU1FKSk7Ci0J c3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgZXh0YXJnaW5mbywgRVhUQVJHX0lOSEVS SVRFRCk7CisJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mby0+YXJncywgZXh0YXJnaW5m bywgRVhUQVJHX0lOSEVSSVRFRCk7CiAJaW5oZXJpdGVkID0gUEdfR0VUQVJHX0JPT0woRVhUQVJH X0lOSEVSSVRFRCk7CiAKIAkvKgpAQCAtMTc2OSwxNyArMTc2OSwxNyBAQCBwZ19jbGVhcl9leHRl bmRlZF9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQogCU9pZAkJCWxvY2tlZF90YWJsZSA9IEludmFs aWRPaWQ7CiAKIAkvKiByZWxhdGlvbiBhcmd1bWVudHMgKi8KLQlzdGF0c19jaGVja19yZXF1aXJl ZF9hcmcoZmNpbmZvLCBleHRhcmdpbmZvLCBFWFRBUkdfUkVMU0NIRU1BKTsKKwlzdGF0c19jaGVj a19yZXF1aXJlZF9hcmcoZmNpbmZvLT5hcmdzLCBleHRhcmdpbmZvLCBFWFRBUkdfUkVMU0NIRU1B KTsKIAlyZWxuc3BuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhQR19HRVRBUkdfREFUVU0oRVhU QVJHX1JFTFNDSEVNQSkpOwotCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8sIGV4dGFy Z2luZm8sIEVYVEFSR19SRUxOQU1FKTsKKwlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZv LT5hcmdzLCBleHRhcmdpbmZvLCBFWFRBUkdfUkVMTkFNRSk7CiAJcmVsbmFtZSA9IFRleHREYXR1 bUdldENTdHJpbmcoUEdfR0VUQVJHX0RBVFVNKEVYVEFSR19SRUxOQU1FKSk7CiAKIAkvKiBleHRl bmRlZCBzdGF0aXN0aWNzIGFyZ3VtZW50cyAqLwotCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhm Y2luZm8sIGV4dGFyZ2luZm8sIEVYVEFSR19TVEFUU0NIRU1BKTsKKwlzdGF0c19jaGVja19yZXF1 aXJlZF9hcmcoZmNpbmZvLT5hcmdzLCBleHRhcmdpbmZvLCBFWFRBUkdfU1RBVFNDSEVNQSk7CiAJ bnNwbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoUEdfR0VUQVJHX0RBVFVNKEVYVEFSR19TVEFU U0NIRU1BKSk7Ci0Jc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgZXh0YXJnaW5mbywg RVhUQVJHX1NUQVROQU1FKTsKKwlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLT5hcmdz LCBleHRhcmdpbmZvLCBFWFRBUkdfU1RBVE5BTUUpOwogCXN0eG5hbWUgPSBUZXh0RGF0dW1HZXRD U3RyaW5nKFBHX0dFVEFSR19EQVRVTShFWFRBUkdfU1RBVE5BTUUpKTsKLQlzdGF0c19jaGVja19y ZXF1aXJlZF9hcmcoZmNpbmZvLCBleHRhcmdpbmZvLCBFWFRBUkdfSU5IRVJJVEVEKTsKKwlzdGF0 c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLT5hcmdzLCBleHRhcmdpbmZvLCBFWFRBUkdfSU5I RVJJVEVEKTsKIAlpbmhlcml0ZWQgPSBQR19HRVRBUkdfQk9PTChFWFRBUkdfSU5IRVJJVEVEKTsK IAogCWlmIChSZWNvdmVyeUluUHJvZ3Jlc3MoKSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuYyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvcmVsYXRp b25fc3RhdHMuYwppbmRleCAyZmY5N2MwMzU5ZS4uNGNmZWUxNTdiZTEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuYworKysgYi9zcmMvYmFja2VuZC9z dGF0aXN0aWNzL3JlbGF0aW9uX3N0YXRzLmMKQEAgLTg1LDggKzg1LDggQEAgcmVsYXRpb25fc3Rh dGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJaW50CQkJbnJlcGxhY2Vz ID0gMDsKIAlPaWQJCQlsb2NrZWRfdGFibGUgPSBJbnZhbGlkT2lkOwogCi0Jc3RhdHNfY2hlY2tf cmVxdWlyZWRfYXJnKGZjaW5mbywgcmVsYXJnaW5mbywgUkVMQVJHX1NDSEVNQSk7Ci0Jc3RhdHNf Y2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgcmVsYXJnaW5mbywgUkVMQVJHX1JFTE5BTUUpOwor CXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8tPmFyZ3MsIHJlbGFyZ2luZm8sIFJFTEFS R19TQ0hFTUEpOworCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8tPmFyZ3MsIHJlbGFy Z2luZm8sIFJFTEFSR19SRUxOQU1FKTsKIAogCW5zcG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5n KFBHX0dFVEFSR19EQVRVTShSRUxBUkdfU0NIRU1BKSk7CiAJcmVsbmFtZSA9IFRleHREYXR1bUdl dENTdHJpbmcoUEdfR0VUQVJHX0RBVFVNKFJFTEFSR19SRUxOQU1FKSk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdGF0aXN0aWNzL3N0YXRfdXRpbHMuYyBiL3NyYy9iYWNrZW5kL3N0YXRpc3Rp Y3Mvc3RhdF91dGlscy5jCmluZGV4IGE2NzNlM2M3MDRiLi4yNGIzODQ5ZmI4YiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9zdGF0X3V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQv c3RhdGlzdGljcy9zdGF0X3V0aWxzLmMKQEAgLTUwLDExICs1MCwxMSBAQCBzdGF0aWMgTm9kZSAq c3RhdGF0dF9nZXRfaW5kZXhfZXhwcihSZWxhdGlvbiByZWwsIGludCBhdHRudW0pOwogICogRW5z dXJlIHRoYXQgYSBnaXZlbiBhcmd1bWVudCBpcyBub3QgbnVsbC4KICAqLwogdm9pZAotc3RhdHNf Y2hlY2tfcmVxdWlyZWRfYXJnKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAorc3RhdHNfY2hlY2tf cmVxdWlyZWRfYXJnKGNvbnN0IE51bGxhYmxlRGF0dW0gKmFyZ3MsCiAJCQkJCQkgc3RydWN0IFN0 YXRzQXJnSW5mbyAqYXJnaW5mbywKIAkJCQkJCSBpbnQgYXJnbnVtKQogewotCWlmIChQR19BUkdJ U05VTEwoYXJnbnVtKSkKKwlpZiAoYXJnc1thcmdudW1dLmlzbnVsbCkKIAkJZXJlcG9ydChFUlJP UiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKIAkJCQkg ZXJybXNnKCJhcmd1bWVudCBcIiVzXCIgbXVzdCBub3QgYmUgbnVsbCIsCkBAIC02OSwxNiArNjks MTYgQEAgc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAog ICogdHJ1ZS4KICAqLwogYm9vbAotc3RhdHNfY2hlY2tfYXJnX2FycmF5KEZ1bmN0aW9uQ2FsbElu Zm8gZmNpbmZvLAorc3RhdHNfY2hlY2tfYXJnX2FycmF5KGNvbnN0IE51bGxhYmxlRGF0dW0gKmFy Z3MsCiAJCQkJCSAgc3RydWN0IFN0YXRzQXJnSW5mbyAqYXJnaW5mbywKIAkJCQkJICBpbnQgYXJn bnVtKQogewogCUFycmF5VHlwZSAgKmFycjsKIAotCWlmIChQR19BUkdJU05VTEwoYXJnbnVtKSkK KwlpZiAoYXJnc1thcmdudW1dLmlzbnVsbCkKIAkJcmV0dXJuIHRydWU7CiAKLQlhcnIgPSBEYXR1 bUdldEFycmF5VHlwZVAoUEdfR0VUQVJHX0RBVFVNKGFyZ251bSkpOworCWFyciA9IERhdHVtR2V0 QXJyYXlUeXBlUChhcmdzW2FyZ251bV0udmFsdWUpOwogCiAJaWYgKEFSUl9ORElNKGFycikgIT0g MSkKIAl7CkBAIC0xMTAsMTcgKzExMCwxNyBAQCBzdGF0c19jaGVja19hcmdfYXJyYXkoRnVuY3Rp b25DYWxsSW5mbyBmY2luZm8sCiAgKiB0cnVlLgogICovCiBib29sCi1zdGF0c19jaGVja19hcmdf cGFpcihGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKK3N0YXRzX2NoZWNrX2FyZ19wYWlyKGNvbnN0 IE51bGxhYmxlRGF0dW0gKmFyZ3MsCiAJCQkJCSBzdHJ1Y3QgU3RhdHNBcmdJbmZvICphcmdpbmZv LAogCQkJCQkgaW50IGFyZ251bTEsIGludCBhcmdudW0yKQogewotCWlmIChQR19BUkdJU05VTEwo YXJnbnVtMSkgJiYgUEdfQVJHSVNOVUxMKGFyZ251bTIpKQorCWlmIChhcmdzW2FyZ251bTFdLmlz bnVsbCAmJiBhcmdzW2FyZ251bTJdLmlzbnVsbCkKIAkJcmV0dXJuIHRydWU7CiAKLQlpZiAoUEdf QVJHSVNOVUxMKGFyZ251bTEpIHx8IFBHX0FSR0lTTlVMTChhcmdudW0yKSkKKwlpZiAoYXJnc1th cmdudW0xXS5pc251bGwgfHwgYXJnc1thcmdudW0yXS5pc251bGwpCiAJewotCQlpbnQJCQludWxs YXJnID0gUEdfQVJHSVNOVUxMKGFyZ251bTEpID8gYXJnbnVtMSA6IGFyZ251bTI7Ci0JCWludAkJ CW90aGVyYXJnID0gUEdfQVJHSVNOVUxMKGFyZ251bTEpID8gYXJnbnVtMiA6IGFyZ251bTE7CisJ CWludAkJCW51bGxhcmcgPSBhcmdzW2FyZ251bTFdLmlzbnVsbCA/IGFyZ251bTEgOiBhcmdudW0y OworCQlpbnQJCQlvdGhlcmFyZyA9IGFyZ3NbYXJnbnVtMV0uaXNudWxsID8gYXJnbnVtMiA6IGFy Z251bTE7CiAKIAkJZXJlcG9ydChXQVJOSU5HLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9z dGF0X3V0aWxzLmggYi9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRfdXRpbHMuaAppbmRleCA3 NGRhNzc5MDU3OS4uNDE0NjM2YzFjZDIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0YXRpc3Rp Y3Mvc3RhdF91dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0YXRpc3RpY3Mvc3RhdF91dGlscy5o CkBAIC0xNSw2ICsxNSw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvYXR0bnVtLmgiCiAjaW5jbHVk ZSAiZm1nci5oIgorI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKIC8qIGF2b2lkIGluY2x1ZGluZyBw cmltbm9kZXMuaCBoZXJlICovCiB0eXBlZGVmIHN0cnVjdCBSYW5nZVZhciBSYW5nZVZhcjsKQEAg LTI1LDEyICsyNiwxMiBAQCBzdHJ1Y3QgU3RhdHNBcmdJbmZvCiAJT2lkCQkJYXJndHlwZTsKIH07 CiAKLWV4dGVybiB2b2lkIHN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhGdW5jdGlvbkNhbGxJbmZv IGZjaW5mbywKK2V4dGVybiB2b2lkIHN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhjb25zdCBOdWxs YWJsZURhdHVtICphcmdzLAogCQkJCQkJCQkJIHN0cnVjdCBTdGF0c0FyZ0luZm8gKmFyZ2luZm8s CiAJCQkJCQkJCQkgaW50IGFyZ251bSk7Ci1leHRlcm4gYm9vbCBzdGF0c19jaGVja19hcmdfYXJy YXkoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCitleHRlcm4gYm9vbCBzdGF0c19jaGVja19hcmdf YXJyYXkoY29uc3QgTnVsbGFibGVEYXR1bSAqYXJncywKIAkJCQkJCQkJICBzdHJ1Y3QgU3RhdHNB cmdJbmZvICphcmdpbmZvLCBpbnQgYXJnbnVtKTsKLWV4dGVybiBib29sIHN0YXRzX2NoZWNrX2Fy Z19wYWlyKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAorZXh0ZXJuIGJvb2wgc3RhdHNfY2hlY2tf YXJnX3BhaXIoY29uc3QgTnVsbGFibGVEYXR1bSAqYXJncywKIAkJCQkJCQkJIHN0cnVjdCBTdGF0 c0FyZ0luZm8gKmFyZ2luZm8sCiAJCQkJCQkJCSBpbnQgYXJnbnVtMSwgaW50IGFyZ251bTIpOwog Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --000000000000e977f10655600bcf Content-Type: application/octet-stream; name="v2-0002-Rename-attribute_stats_argnum-enumeriations.patch" Content-Disposition: attachment; filename="v2-0002-Rename-attribute_stats_argnum-enumeriations.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqyw9g6u1 RnJvbSA4OWU2MjQ4NDFmMjZiNjI4Yzc5YTkzMDk4MWVlMzMzYzU4NTU4YzhmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogU2F0LCAyNyBKdW4gMjAyNiAxMjowMjo0MyAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djIgMDIvMTNdIFJlbmFtZSBhdHRyaWJ1dGVfc3RhdHNfYXJnbnVtIGVudW1lcmlhdGlvbnMuCgpS ZW5hbWUgYWxsIGF0dHJpYnV0ZV9zdGF0c19hcmdudW0gZW51bWVyYXRlZCBuYW1lcyBmcm9tIGZv b19BUkcgdG8KQVRUQVJHX2ZvbyBhbmQgQ19mb29fQVJHIHRvIENfQVRUQVJHX2Zvby4gIFRoaXMg Y2hhbmdlIHdpbGwgaGVscApkaXN0aW5ndWlzaCB0aGVzZSB2YWx1ZXMgZnJvbSBvdGhlciBlbnVt ZXJhdGlvbnMgd2hpY2ggd2lsbCBiZSBhZGRlZCBpbgpmdXR1cmUgY29tbWl0cy4KLS0tCiBzcmMv YmFja2VuZC9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5jIHwgMjA2ICsrKysrKysrKysrLS0t LS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTAzIGluc2VydGlvbnMoKyksIDEwMyBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0 cy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuYwppbmRleCAxY2M0 ZDY1NzIzMS4uYTBlYzY2NzAxMWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3Mv YXR0cmlidXRlX3N0YXRzLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9hdHRyaWJ1dGVf c3RhdHMuYwpAQCAtMzcsNDggKzM3LDQ4IEBACiAKIGVudW0gYXR0cmlidXRlX3N0YXRzX2FyZ251 bQogewotCUFUVFJFTFNDSEVNQV9BUkcgPSAwLAotCUFUVFJFTE5BTUVfQVJHLAotCUFUVE5BTUVf QVJHLAotCUFUVE5VTV9BUkcsCi0JSU5IRVJJVEVEX0FSRywKLQlOVUxMX0ZSQUNfQVJHLAotCUFW R19XSURUSF9BUkcsCi0JTl9ESVNUSU5DVF9BUkcsCi0JTU9TVF9DT01NT05fVkFMU19BUkcsCi0J TU9TVF9DT01NT05fRlJFUVNfQVJHLAotCUhJU1RPR1JBTV9CT1VORFNfQVJHLAotCUNPUlJFTEFU SU9OX0FSRywKLQlNT1NUX0NPTU1PTl9FTEVNU19BUkcsCi0JTU9TVF9DT01NT05fRUxFTV9GUkVR U19BUkcsCi0JRUxFTV9DT1VOVF9ISVNUT0dSQU1fQVJHLAotCVJBTkdFX0xFTkdUSF9ISVNUT0dS QU1fQVJHLAotCVJBTkdFX0VNUFRZX0ZSQUNfQVJHLAotCVJBTkdFX0JPVU5EU19ISVNUT0dSQU1f QVJHLAotCU5VTV9BVFRSSUJVVEVfU1RBVFNfQVJHUworCUFUVEFSR19BVFRSRUxTQ0hFTUEgPSAw LAorCUFUVEFSR19BVFRSRUxOQU1FLAorCUFUVEFSR19BVFROQU1FLAorCUFUVEFSR19BVFROVU0s CisJQVRUQVJHX0lOSEVSSVRFRCwKKwlBVFRBUkdfTlVMTF9GUkFDLAorCUFUVEFSR19BVkdfV0lE VEgsCisJQVRUQVJHX05fRElTVElOQ1QsCisJQVRUQVJHX01PU1RfQ09NTU9OX1ZBTFMsCisJQVRU QVJHX01PU1RfQ09NTU9OX0ZSRVFTLAorCUFUVEFSR19ISVNUT0dSQU1fQk9VTkRTLAorCUFUVEFS R19DT1JSRUxBVElPTiwKKwlBVFRBUkdfTU9TVF9DT01NT05fRUxFTVMsCisJQVRUQVJHX01PU1Rf Q09NTU9OX0VMRU1fRlJFUVMsCisJQVRUQVJHX0VMRU1fQ09VTlRfSElTVE9HUkFNLAorCUFUVEFS R19SQU5HRV9MRU5HVEhfSElTVE9HUkFNLAorCUFUVEFSR19SQU5HRV9FTVBUWV9GUkFDLAorCUFU VEFSR19SQU5HRV9CT1VORFNfSElTVE9HUkFNLAorCUFUVEFSR19OVU1fQVRUQVJHUwogfTsKIAog c3RhdGljIHN0cnVjdCBTdGF0c0FyZ0luZm8gYXR0YXJnaW5mb1tdID0KIHsKLQlbQVRUUkVMU0NI RU1BX0FSR10gPSB7InNjaGVtYW5hbWUiLCBURVhUT0lEfSwKLQlbQVRUUkVMTkFNRV9BUkddID0g eyJyZWxuYW1lIiwgVEVYVE9JRH0sCi0JW0FUVE5BTUVfQVJHXSA9IHsiYXR0bmFtZSIsIFRFWFRP SUR9LAotCVtBVFROVU1fQVJHXSA9IHsiYXR0bnVtIiwgSU5UMk9JRH0sCi0JW0lOSEVSSVRFRF9B UkddID0geyJpbmhlcml0ZWQiLCBCT09MT0lEfSwKLQlbTlVMTF9GUkFDX0FSR10gPSB7Im51bGxf ZnJhYyIsIEZMT0FUNE9JRH0sCi0JW0FWR19XSURUSF9BUkddID0geyJhdmdfd2lkdGgiLCBJTlQ0 T0lEfSwKLQlbTl9ESVNUSU5DVF9BUkddID0geyJuX2Rpc3RpbmN0IiwgRkxPQVQ0T0lEfSwKLQlb TU9TVF9DT01NT05fVkFMU19BUkddID0geyJtb3N0X2NvbW1vbl92YWxzIiwgVEVYVE9JRH0sCi0J W01PU1RfQ09NTU9OX0ZSRVFTX0FSR10gPSB7Im1vc3RfY29tbW9uX2ZyZXFzIiwgRkxPQVQ0QVJS QVlPSUR9LAotCVtISVNUT0dSQU1fQk9VTkRTX0FSR10gPSB7Imhpc3RvZ3JhbV9ib3VuZHMiLCBU RVhUT0lEfSwKLQlbQ09SUkVMQVRJT05fQVJHXSA9IHsiY29ycmVsYXRpb24iLCBGTE9BVDRPSUR9 LAotCVtNT1NUX0NPTU1PTl9FTEVNU19BUkddID0geyJtb3N0X2NvbW1vbl9lbGVtcyIsIFRFWFRP SUR9LAotCVtNT1NUX0NPTU1PTl9FTEVNX0ZSRVFTX0FSR10gPSB7Im1vc3RfY29tbW9uX2VsZW1f ZnJlcXMiLCBGTE9BVDRBUlJBWU9JRH0sCi0JW0VMRU1fQ09VTlRfSElTVE9HUkFNX0FSR10gPSB7 ImVsZW1fY291bnRfaGlzdG9ncmFtIiwgRkxPQVQ0QVJSQVlPSUR9LAotCVtSQU5HRV9MRU5HVEhf SElTVE9HUkFNX0FSR10gPSB7InJhbmdlX2xlbmd0aF9oaXN0b2dyYW0iLCBURVhUT0lEfSwKLQlb UkFOR0VfRU1QVFlfRlJBQ19BUkddID0geyJyYW5nZV9lbXB0eV9mcmFjIiwgRkxPQVQ0T0lEfSwK LQlbUkFOR0VfQk9VTkRTX0hJU1RPR1JBTV9BUkddID0geyJyYW5nZV9ib3VuZHNfaGlzdG9ncmFt IiwgVEVYVE9JRH0sCi0JW05VTV9BVFRSSUJVVEVfU1RBVFNfQVJHU10gPSB7MH0KKwlbQVRUQVJH X0FUVFJFTFNDSEVNQV0gPSB7InNjaGVtYW5hbWUiLCBURVhUT0lEfSwKKwlbQVRUQVJHX0FUVFJF TE5BTUVdID0geyJyZWxuYW1lIiwgVEVYVE9JRH0sCisJW0FUVEFSR19BVFROQU1FXSA9IHsiYXR0 bmFtZSIsIFRFWFRPSUR9LAorCVtBVFRBUkdfQVRUTlVNXSA9IHsiYXR0bnVtIiwgSU5UMk9JRH0s CisJW0FUVEFSR19JTkhFUklURURdID0geyJpbmhlcml0ZWQiLCBCT09MT0lEfSwKKwlbQVRUQVJH X05VTExfRlJBQ10gPSB7Im51bGxfZnJhYyIsIEZMT0FUNE9JRH0sCisJW0FUVEFSR19BVkdfV0lE VEhdID0geyJhdmdfd2lkdGgiLCBJTlQ0T0lEfSwKKwlbQVRUQVJHX05fRElTVElOQ1RdID0geyJu X2Rpc3RpbmN0IiwgRkxPQVQ0T0lEfSwKKwlbQVRUQVJHX01PU1RfQ09NTU9OX1ZBTFNdID0geyJt b3N0X2NvbW1vbl92YWxzIiwgVEVYVE9JRH0sCisJW0FUVEFSR19NT1NUX0NPTU1PTl9GUkVRU10g PSB7Im1vc3RfY29tbW9uX2ZyZXFzIiwgRkxPQVQ0QVJSQVlPSUR9LAorCVtBVFRBUkdfSElTVE9H UkFNX0JPVU5EU10gPSB7Imhpc3RvZ3JhbV9ib3VuZHMiLCBURVhUT0lEfSwKKwlbQVRUQVJHX0NP UlJFTEFUSU9OXSA9IHsiY29ycmVsYXRpb24iLCBGTE9BVDRPSUR9LAorCVtBVFRBUkdfTU9TVF9D T01NT05fRUxFTVNdID0geyJtb3N0X2NvbW1vbl9lbGVtcyIsIFRFWFRPSUR9LAorCVtBVFRBUkdf TU9TVF9DT01NT05fRUxFTV9GUkVRU10gPSB7Im1vc3RfY29tbW9uX2VsZW1fZnJlcXMiLCBGTE9B VDRBUlJBWU9JRH0sCisJW0FUVEFSR19FTEVNX0NPVU5UX0hJU1RPR1JBTV0gPSB7ImVsZW1fY291 bnRfaGlzdG9ncmFtIiwgRkxPQVQ0QVJSQVlPSUR9LAorCVtBVFRBUkdfUkFOR0VfTEVOR1RIX0hJ U1RPR1JBTV0gPSB7InJhbmdlX2xlbmd0aF9oaXN0b2dyYW0iLCBURVhUT0lEfSwKKwlbQVRUQVJH X1JBTkdFX0VNUFRZX0ZSQUNdID0geyJyYW5nZV9lbXB0eV9mcmFjIiwgRkxPQVQ0T0lEfSwKKwlb QVRUQVJHX1JBTkdFX0JPVU5EU19ISVNUT0dSQU1dID0geyJyYW5nZV9ib3VuZHNfaGlzdG9ncmFt IiwgVEVYVE9JRH0sCisJW0FUVEFSR19OVU1fQVRUQVJHU10gPSB7MH0KIH07CiAKIC8qCkBAIC04 OCwyMCArODgsMjAgQEAgc3RhdGljIHN0cnVjdCBTdGF0c0FyZ0luZm8gYXR0YXJnaW5mb1tdID0K IAogZW51bSBjbGVhcl9hdHRyaWJ1dGVfc3RhdHNfYXJnbnVtCiB7Ci0JQ19BVFRSRUxTQ0hFTUFf QVJHID0gMCwKLQlDX0FUVFJFTE5BTUVfQVJHLAotCUNfQVRUTkFNRV9BUkcsCi0JQ19JTkhFUklU RURfQVJHLAotCUNfTlVNX0FUVFJJQlVURV9TVEFUU19BUkdTCisJQ19BVFRBUkdfQVRUUkVMU0NI RU1BID0gMCwKKwlDX0FUVEFSR19BVFRSRUxOQU1FLAorCUNfQVRUQVJHX0FUVE5BTUUsCisJQ19B VFRBUkdfSU5IRVJJVEVELAorCUNfQVRUQVJHX05VTV9BVFRBUkdTCiB9OwogCiBzdGF0aWMgc3Ry dWN0IFN0YXRzQXJnSW5mbyBjbGVhcmFyZ2luZm9bXSA9CiB7Ci0JW0NfQVRUUkVMU0NIRU1BX0FS R10gPSB7InJlbGF0aW9uIiwgVEVYVE9JRH0sCi0JW0NfQVRUUkVMTkFNRV9BUkddID0geyJyZWxh dGlvbiIsIFRFWFRPSUR9LAotCVtDX0FUVE5BTUVfQVJHXSA9IHsiYXR0bmFtZSIsIFRFWFRPSUR9 LAotCVtDX0lOSEVSSVRFRF9BUkddID0geyJpbmhlcml0ZWQiLCBCT09MT0lEfSwKLQlbQ19OVU1f QVRUUklCVVRFX1NUQVRTX0FSR1NdID0gezB9CisJW0NfQVRUQVJHX0FUVFJFTFNDSEVNQV0gPSB7 InJlbGF0aW9uIiwgVEVYVE9JRH0sCisJW0NfQVRUQVJHX0FUVFJFTE5BTUVdID0geyJyZWxhdGlv biIsIFRFWFRPSUR9LAorCVtDX0FUVEFSR19BVFROQU1FXSA9IHsiYXR0bmFtZSIsIFRFWFRPSUR9 LAorCVtDX0FUVEFSR19JTkhFUklURURdID0geyJpbmhlcml0ZWQiLCBCT09MT0lEfSwKKwlbQ19B VFRBUkdfTlVNX0FUVEFSR1NdID0gezB9CiB9OwogCiBzdGF0aWMgYm9vbCBhdHRyaWJ1dGVfc3Rh dGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pOwpAQCAtMTUxLDE2ICsxNTEs MTYgQEAgYXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZv KQogCiAJRm1nckluZm8JYXJyYXlfaW5fZm47CiAKLQlib29sCQlkb19tY3YgPSAhUEdfQVJHSVNO VUxMKE1PU1RfQ09NTU9OX0ZSRVFTX0FSRykgJiYKLQkJIVBHX0FSR0lTTlVMTChNT1NUX0NPTU1P Tl9WQUxTX0FSRyk7Ci0JYm9vbAkJZG9faGlzdG9ncmFtID0gIVBHX0FSR0lTTlVMTChISVNUT0dS QU1fQk9VTkRTX0FSRyk7Ci0JYm9vbAkJZG9fY29ycmVsYXRpb24gPSAhUEdfQVJHSVNOVUxMKENP UlJFTEFUSU9OX0FSRyk7Ci0JYm9vbAkJZG9fbWNlbGVtID0gIVBHX0FSR0lTTlVMTChNT1NUX0NP TU1PTl9FTEVNU19BUkcpICYmCi0JCSFQR19BUkdJU05VTEwoTU9TVF9DT01NT05fRUxFTV9GUkVR U19BUkcpOwotCWJvb2wJCWRvX2RlY2hpc3QgPSAhUEdfQVJHSVNOVUxMKEVMRU1fQ09VTlRfSElT VE9HUkFNX0FSRyk7Ci0JYm9vbAkJZG9fYm91bmRzX2hpc3RvZ3JhbSA9ICFQR19BUkdJU05VTEwo UkFOR0VfQk9VTkRTX0hJU1RPR1JBTV9BUkcpOwotCWJvb2wJCWRvX3JhbmdlX2xlbmd0aF9oaXN0 b2dyYW0gPSAhUEdfQVJHSVNOVUxMKFJBTkdFX0xFTkdUSF9ISVNUT0dSQU1fQVJHKSAmJgotCQkh UEdfQVJHSVNOVUxMKFJBTkdFX0VNUFRZX0ZSQUNfQVJHKTsKKwlib29sCQlkb19tY3YgPSAhUEdf QVJHSVNOVUxMKEFUVEFSR19NT1NUX0NPTU1PTl9GUkVRUykgJiYKKwkJIVBHX0FSR0lTTlVMTChB VFRBUkdfTU9TVF9DT01NT05fVkFMUyk7CisJYm9vbAkJZG9faGlzdG9ncmFtID0gIVBHX0FSR0lT TlVMTChBVFRBUkdfSElTVE9HUkFNX0JPVU5EUyk7CisJYm9vbAkJZG9fY29ycmVsYXRpb24gPSAh UEdfQVJHSVNOVUxMKEFUVEFSR19DT1JSRUxBVElPTik7CisJYm9vbAkJZG9fbWNlbGVtID0gIVBH X0FSR0lTTlVMTChBVFRBUkdfTU9TVF9DT01NT05fRUxFTVMpICYmCisJCSFQR19BUkdJU05VTEwo QVRUQVJHX01PU1RfQ09NTU9OX0VMRU1fRlJFUVMpOworCWJvb2wJCWRvX2RlY2hpc3QgPSAhUEdf QVJHSVNOVUxMKEFUVEFSR19FTEVNX0NPVU5UX0hJU1RPR1JBTSk7CisJYm9vbAkJZG9fYm91bmRz X2hpc3RvZ3JhbSA9ICFQR19BUkdJU05VTEwoQVRUQVJHX1JBTkdFX0JPVU5EU19ISVNUT0dSQU0p OworCWJvb2wJCWRvX3JhbmdlX2xlbmd0aF9oaXN0b2dyYW0gPSAhUEdfQVJHSVNOVUxMKEFUVEFS R19SQU5HRV9MRU5HVEhfSElTVE9HUkFNKSAmJgorCQkhUEdfQVJHSVNOVUxMKEFUVEFSR19SQU5H RV9FTVBUWV9GUkFDKTsKIAogCURhdHVtCQl2YWx1ZXNbTmF0dHNfcGdfc3RhdGlzdGljXSA9IHsw fTsKIAlib29sCQludWxsc1tOYXR0c19wZ19zdGF0aXN0aWNdID0gezB9OwpAQCAtMTY4LDExICsx NjgsMTEgQEAgYXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNp bmZvKQogCiAJYm9vbAkJcmVzdWx0ID0gdHJ1ZTsKIAotCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2Fy ZyhmY2luZm8sIGF0dGFyZ2luZm8sIEFUVFJFTFNDSEVNQV9BUkcpOwotCXN0YXRzX2NoZWNrX3Jl cXVpcmVkX2FyZyhmY2luZm8sIGF0dGFyZ2luZm8sIEFUVFJFTE5BTUVfQVJHKTsKKwlzdGF0c19j aGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBhdHRhcmdpbmZvLCBBVFRBUkdfQVRUUkVMU0NIRU1B KTsKKwlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBhdHRhcmdpbmZvLCBBVFRBUkdf QVRUUkVMTkFNRSk7CiAKLQluc3BuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhQR19HRVRBUkdf REFUVU0oQVRUUkVMU0NIRU1BX0FSRykpOwotCXJlbG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5n KFBHX0dFVEFSR19EQVRVTShBVFRSRUxOQU1FX0FSRykpOworCW5zcG5hbWUgPSBUZXh0RGF0dW1H ZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRVTShBVFRBUkdfQVRUUkVMU0NIRU1BKSk7CisJcmVsbmFt ZSA9IFRleHREYXR1bUdldENTdHJpbmcoUEdfR0VUQVJHX0RBVFVNKEFUVEFSR19BVFRSRUxOQU1F KSk7CiAKIAlpZiAoUmVjb3ZlcnlJblByb2dyZXNzKCkpCiAJCWVyZXBvcnQoRVJST1IsCkBAIC0x ODYsMTMgKzE4NiwxMyBAQCBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxs SW5mbyBmY2luZm8pCiAJCQkJCQkJCQkgIFJhbmdlVmFyQ2FsbGJhY2tGb3JTdGF0cywgJmxvY2tl ZF90YWJsZSk7CiAKIAkvKiB1c2VyIGNhbiBzcGVjaWZ5IGVpdGhlciBhdHRuYW1lIG9yIGF0dG51 bSwgYnV0IG5vdCBib3RoICovCi0JaWYgKCFQR19BUkdJU05VTEwoQVRUTkFNRV9BUkcpKQorCWlm ICghUEdfQVJHSVNOVUxMKEFUVEFSR19BVFROQU1FKSkKIAl7Ci0JCWlmICghUEdfQVJHSVNOVUxM KEFUVE5VTV9BUkcpKQorCQlpZiAoIVBHX0FSR0lTTlVMTChBVFRBUkdfQVRUTlVNKSkKIAkJCWVy ZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAogCQkJCQkgZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSBib3RoIFwiJXNcIiBhbmQgXCIlc1wi IiwgImF0dG5hbWUiLCAiYXR0bnVtIikpKTsKLQkJYXR0bmFtZSA9IFRleHREYXR1bUdldENTdHJp bmcoUEdfR0VUQVJHX0RBVFVNKEFUVE5BTUVfQVJHKSk7CisJCWF0dG5hbWUgPSBUZXh0RGF0dW1H ZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRVTShBVFRBUkdfQVRUTkFNRSkpOwogCQlhdHRudW0gPSBn ZXRfYXR0bnVtKHJlbG9pZCwgYXR0bmFtZSk7CiAJCS8qIG5vdGUgdGhhdCB0aGlzIHRlc3QgY292 ZXJzIGF0dGlzZHJvcHBlZCBjYXNlcyB0b286ICovCiAJCWlmIChhdHRudW0gPT0gSW52YWxpZEF0 dHJOdW1iZXIpCkBAIC0yMDEsOSArMjAxLDkgQEAgYXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRl KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCQkJCQkgZXJybXNnKCJjb2x1bW4gXCIlc1wiIG9m IHJlbGF0aW9uIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsCiAJCQkJCQkJYXR0bmFtZSwgcmVsbmFt ZSkpKTsKIAl9Ci0JZWxzZSBpZiAoIVBHX0FSR0lTTlVMTChBVFROVU1fQVJHKSkKKwllbHNlIGlm ICghUEdfQVJHSVNOVUxMKEFUVEFSR19BVFROVU0pKQogCXsKLQkJYXR0bnVtID0gUEdfR0VUQVJH X0lOVDE2KEFUVE5VTV9BUkcpOworCQlhdHRudW0gPSBQR19HRVRBUkdfSU5UMTYoQVRUQVJHX0FU VE5VTSk7CiAJCWF0dG5hbWUgPSBnZXRfYXR0bmFtZShyZWxvaWQsIGF0dG51bSwgdHJ1ZSk7CiAJ CS8qIGFubm95aW5nbHksIGdldF9hdHRuYW1lIGRvZXNuJ3QgY2hlY2sgYXR0aXNkcm9wcGVkICov CiAJCWlmIChhdHRuYW1lID09IE5VTEwgfHwKQEAgLTIyOCw0OSArMjI4LDQ5IEBAIGF0dHJpYnV0 ZV9zdGF0aXN0aWNzX3VwZGF0ZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAkJCQkgZXJybXNn KCJjYW5ub3QgbW9kaWZ5IHN0YXRpc3RpY3Mgb24gc3lzdGVtIGNvbHVtbiBcIiVzXCIiLAogCQkJ CQkJYXR0bmFtZSkpKTsKIAotCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8sIGF0dGFy Z2luZm8sIElOSEVSSVRFRF9BUkcpOwotCWluaGVyaXRlZCA9IFBHX0dFVEFSR19CT09MKElOSEVS SVRFRF9BUkcpOworCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8sIGF0dGFyZ2luZm8s IEFUVEFSR19JTkhFUklURUQpOworCWluaGVyaXRlZCA9IFBHX0dFVEFSR19CT09MKEFUVEFSR19J TkhFUklURUQpOwogCiAJLyoKIAkgKiBDaGVjayBhcmd1bWVudCBzYW5pdHkuIElmIHNvbWUgYXJn dW1lbnRzIGFyZSB1bnVzYWJsZSwgZW1pdCBhIFdBUk5JTkcKIAkgKiBhbmQgc2V0IHRoZSBjb3Jy ZXNwb25kaW5nIGFyZ3VtZW50IHRvIE5VTEwgaW4gZmNpbmZvLgogCSAqLwogCi0JaWYgKCFzdGF0 c19jaGVja19hcmdfYXJyYXkoZmNpbmZvLCBhdHRhcmdpbmZvLCBNT1NUX0NPTU1PTl9GUkVRU19B UkcpKQorCWlmICghc3RhdHNfY2hlY2tfYXJnX2FycmF5KGZjaW5mbywgYXR0YXJnaW5mbywgQVRU QVJHX01PU1RfQ09NTU9OX0ZSRVFTKSkKIAl7CiAJCWRvX21jdiA9IGZhbHNlOwogCQlyZXN1bHQg PSBmYWxzZTsKIAl9CiAKLQlpZiAoIXN0YXRzX2NoZWNrX2FyZ19hcnJheShmY2luZm8sIGF0dGFy Z2luZm8sIE1PU1RfQ09NTU9OX0VMRU1fRlJFUVNfQVJHKSkKKwlpZiAoIXN0YXRzX2NoZWNrX2Fy Z19hcnJheShmY2luZm8sIGF0dGFyZ2luZm8sIEFUVEFSR19NT1NUX0NPTU1PTl9FTEVNX0ZSRVFT KSkKIAl7CiAJCWRvX21jZWxlbSA9IGZhbHNlOwogCQlyZXN1bHQgPSBmYWxzZTsKIAl9Ci0JaWYg KCFzdGF0c19jaGVja19hcmdfYXJyYXkoZmNpbmZvLCBhdHRhcmdpbmZvLCBFTEVNX0NPVU5UX0hJ U1RPR1JBTV9BUkcpKQorCWlmICghc3RhdHNfY2hlY2tfYXJnX2FycmF5KGZjaW5mbywgYXR0YXJn aW5mbywgQVRUQVJHX0VMRU1fQ09VTlRfSElTVE9HUkFNKSkKIAl7CiAJCWRvX2RlY2hpc3QgPSBm YWxzZTsKIAkJcmVzdWx0ID0gZmFsc2U7CiAJfQogCiAJaWYgKCFzdGF0c19jaGVja19hcmdfcGFp cihmY2luZm8sIGF0dGFyZ2luZm8sCi0JCQkJCQkJICBNT1NUX0NPTU1PTl9WQUxTX0FSRywgTU9T VF9DT01NT05fRlJFUVNfQVJHKSkKKwkJCQkJCQkgIEFUVEFSR19NT1NUX0NPTU1PTl9WQUxTLCBB VFRBUkdfTU9TVF9DT01NT05fRlJFUVMpKQogCXsKIAkJZG9fbWN2ID0gZmFsc2U7CiAJCXJlc3Vs dCA9IGZhbHNlOwogCX0KIAogCWlmICghc3RhdHNfY2hlY2tfYXJnX3BhaXIoZmNpbmZvLCBhdHRh cmdpbmZvLAotCQkJCQkJCSAgTU9TVF9DT01NT05fRUxFTVNfQVJHLAotCQkJCQkJCSAgTU9TVF9D T01NT05fRUxFTV9GUkVRU19BUkcpKQorCQkJCQkJCSAgQVRUQVJHX01PU1RfQ09NTU9OX0VMRU1T LAorCQkJCQkJCSAgQVRUQVJHX01PU1RfQ09NTU9OX0VMRU1fRlJFUVMpKQogCXsKIAkJZG9fbWNl bGVtID0gZmFsc2U7CiAJCXJlc3VsdCA9IGZhbHNlOwogCX0KIAogCWlmICghc3RhdHNfY2hlY2tf YXJnX3BhaXIoZmNpbmZvLCBhdHRhcmdpbmZvLAotCQkJCQkJCSAgUkFOR0VfTEVOR1RIX0hJU1RP R1JBTV9BUkcsCi0JCQkJCQkJICBSQU5HRV9FTVBUWV9GUkFDX0FSRykpCisJCQkJCQkJICBBVFRB UkdfUkFOR0VfTEVOR1RIX0hJU1RPR1JBTSwKKwkJCQkJCQkgIEFUVEFSR19SQU5HRV9FTVBUWV9G UkFDKSkKIAl7CiAJCWRvX3JhbmdlX2xlbmd0aF9oaXN0b2dyYW0gPSBmYWxzZTsKIAkJcmVzdWx0 ID0gZmFsc2U7CkBAIC0zNDQsMTkgKzM0NCwxOSBAQCBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRh dGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJCQkJCQkJCSByZXBsYWNlcyk7CiAKIAkvKiBp ZiBzcGVjaWZpZWQsIHNldCB0byBhcmd1bWVudCB2YWx1ZXMgKi8KLQlpZiAoIVBHX0FSR0lTTlVM TChOVUxMX0ZSQUNfQVJHKSkKKwlpZiAoIVBHX0FSR0lTTlVMTChBVFRBUkdfTlVMTF9GUkFDKSkK IAl7Ci0JCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFudWxsZnJhYyAtIDFdID0gUEdfR0VU QVJHX0RBVFVNKE5VTExfRlJBQ19BUkcpOworCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3Rh bnVsbGZyYWMgLSAxXSA9IFBHX0dFVEFSR19EQVRVTShBVFRBUkdfTlVMTF9GUkFDKTsKIAkJcmVw bGFjZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhbnVsbGZyYWMgLSAxXSA9IHRydWU7CiAJfQotCWlm ICghUEdfQVJHSVNOVUxMKEFWR19XSURUSF9BUkcpKQorCWlmICghUEdfQVJHSVNOVUxMKEFUVEFS R19BVkdfV0lEVEgpKQogCXsKLQkJdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YXdpZHRoIC0g MV0gPSBQR19HRVRBUkdfREFUVU0oQVZHX1dJRFRIX0FSRyk7CisJCXZhbHVlc1tBbnVtX3BnX3N0 YXRpc3RpY19zdGF3aWR0aCAtIDFdID0gUEdfR0VUQVJHX0RBVFVNKEFUVEFSR19BVkdfV0lEVEgp OwogCQlyZXBsYWNlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGF3aWR0aCAtIDFdID0gdHJ1ZTsKIAl9 Ci0JaWYgKCFQR19BUkdJU05VTEwoTl9ESVNUSU5DVF9BUkcpKQorCWlmICghUEdfQVJHSVNOVUxM KEFUVEFSR19OX0RJU1RJTkNUKSkKIAl7Ci0JCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFk aXN0aW5jdCAtIDFdID0gUEdfR0VUQVJHX0RBVFVNKE5fRElTVElOQ1RfQVJHKTsKKwkJdmFsdWVz W0FudW1fcGdfc3RhdGlzdGljX3N0YWRpc3RpbmN0IC0gMV0gPSBQR19HRVRBUkdfREFUVU0oQVRU QVJHX05fRElTVElOQ1QpOwogCQlyZXBsYWNlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFkaXN0aW5j dCAtIDFdID0gdHJ1ZTsKIAl9CiAKQEAgLTM2NCwxMCArMzY0LDEwIEBAIGF0dHJpYnV0ZV9zdGF0 aXN0aWNzX3VwZGF0ZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAlpZiAoZG9fbWN2KQogCXsK IAkJYm9vbAkJY29udmVydGVkOwotCQlEYXR1bQkJc3RhbnVtYmVycyA9IFBHX0dFVEFSR19EQVRV TShNT1NUX0NPTU1PTl9GUkVRU19BUkcpOworCQlEYXR1bQkJc3RhbnVtYmVycyA9IFBHX0dFVEFS R19EQVRVTShBVFRBUkdfTU9TVF9DT01NT05fRlJFUVMpOwogCQlEYXR1bQkJc3RhdmFsdWVzID0g c3RhdGF0dF9idWlsZF9zdGF2YWx1ZXMoIm1vc3RfY29tbW9uX3ZhbHMiLAogCQkJCQkJCQkJCQkJ CQkmYXJyYXlfaW5fZm4sCi0JCQkJCQkJCQkJCQkJCVBHX0dFVEFSR19EQVRVTShNT1NUX0NPTU1P Tl9WQUxTX0FSRyksCisJCQkJCQkJCQkJCQkJCVBHX0dFVEFSR19EQVRVTShBVFRBUkdfTU9TVF9D T01NT05fVkFMUyksCiAJCQkJCQkJCQkJCQkJCWF0dHR5cGlkLCBhdHR0eXBtb2QsCiAJCQkJCQkJ CQkJCQkJCSZjb252ZXJ0ZWQpOwogCkBAIC00MDcsNyArNDA3LDcgQEAgYXR0cmlidXRlX3N0YXRp c3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCiAJCXN0YXZhbHVlcyA9IHN0 YXRhdHRfYnVpbGRfc3RhdmFsdWVzKCJoaXN0b2dyYW1fYm91bmRzIiwKIAkJCQkJCQkJCQkJJmFy cmF5X2luX2ZuLAotCQkJCQkJCQkJCQlQR19HRVRBUkdfREFUVU0oSElTVE9HUkFNX0JPVU5EU19B UkcpLAorCQkJCQkJCQkJCQlQR19HRVRBUkdfREFUVU0oQVRUQVJHX0hJU1RPR1JBTV9CT1VORFMp LAogCQkJCQkJCQkJCQlhdHR0eXBpZCwgYXR0dHlwbW9kLAogCQkJCQkJCQkJCQkmY29udmVydGVk KTsKIApAQCAtNDI1LDcgKzQyNSw3IEBAIGF0dHJpYnV0ZV9zdGF0aXN0aWNzX3VwZGF0ZShGdW5j dGlvbkNhbGxJbmZvIGZjaW5mbykKIAkvKiBTVEFUSVNUSUNfS0lORF9DT1JSRUxBVElPTiAqLwog CWlmIChkb19jb3JyZWxhdGlvbikKIAl7Ci0JCURhdHVtCQllbGVtc1tdID0ge1BHX0dFVEFSR19E QVRVTShDT1JSRUxBVElPTl9BUkcpfTsKKwkJRGF0dW0JCWVsZW1zW10gPSB7UEdfR0VUQVJHX0RB VFVNKEFUVEFSR19DT1JSRUxBVElPTil9OwogCQlBcnJheVR5cGUgICphcnJ5ID0gY29uc3RydWN0 X2FycmF5X2J1aWx0aW4oZWxlbXMsIDEsIEZMT0FUNE9JRCk7CiAJCURhdHVtCQlzdGFudW1iZXJz ID0gUG9pbnRlckdldERhdHVtKGFycnkpOwogCkBAIC00MzgsMTMgKzQzOCwxMyBAQCBhdHRyaWJ1 dGVfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJLyogU1RBVElT VElDX0tJTkRfTUNFTEVNICovCiAJaWYgKGRvX21jZWxlbSkKIAl7Ci0JCURhdHVtCQlzdGFudW1i ZXJzID0gUEdfR0VUQVJHX0RBVFVNKE1PU1RfQ09NTU9OX0VMRU1fRlJFUVNfQVJHKTsKKwkJRGF0 dW0JCXN0YW51bWJlcnMgPSBQR19HRVRBUkdfREFUVU0oQVRUQVJHX01PU1RfQ09NTU9OX0VMRU1f RlJFUVMpOwogCQlib29sCQljb252ZXJ0ZWQgPSBmYWxzZTsKIAkJRGF0dW0JCXN0YXZhbHVlczsK IAogCQlzdGF2YWx1ZXMgPSBzdGF0YXR0X2J1aWxkX3N0YXZhbHVlcygibW9zdF9jb21tb25fZWxl bXMiLAogCQkJCQkJCQkJCQkmYXJyYXlfaW5fZm4sCi0JCQkJCQkJCQkJCVBHX0dFVEFSR19EQVRV TShNT1NUX0NPTU1PTl9FTEVNU19BUkcpLAorCQkJCQkJCQkJCQlQR19HRVRBUkdfREFUVU0oQVRU QVJHX01PU1RfQ09NTU9OX0VMRU1TKSwKIAkJCQkJCQkJCQkJZWxlbXR5cGlkLCBhdHR0eXBtb2Qs CiAJCQkJCQkJCQkJCSZjb252ZXJ0ZWQpOwogCkBAIC00NjIsNyArNDYyLDcgQEAgYXR0cmlidXRl X3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCS8qIFNUQVRJU1RJ Q19LSU5EX0RFQ0hJU1QgKi8KIAlpZiAoZG9fZGVjaGlzdCkKIAl7Ci0JCURhdHVtCQlzdGFudW1i ZXJzID0gUEdfR0VUQVJHX0RBVFVNKEVMRU1fQ09VTlRfSElTVE9HUkFNX0FSRyk7CisJCURhdHVt CQlzdGFudW1iZXJzID0gUEdfR0VUQVJHX0RBVFVNKEFUVEFSR19FTEVNX0NPVU5UX0hJU1RPR1JB TSk7CiAKIAkJc3RhdGF0dF9zZXRfc2xvdCh2YWx1ZXMsIG51bGxzLCByZXBsYWNlcywKIAkJCQkJ CSBTVEFUSVNUSUNfS0lORF9ERUNISVNULApAQCAtNDg0LDcgKzQ4NCw3IEBAIGF0dHJpYnV0ZV9z dGF0aXN0aWNzX3VwZGF0ZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAogCQlzdGF2YWx1ZXMg PSBzdGF0YXR0X2J1aWxkX3N0YXZhbHVlcygicmFuZ2VfYm91bmRzX2hpc3RvZ3JhbSIsCiAJCQkJ CQkJCQkJCSZhcnJheV9pbl9mbiwKLQkJCQkJCQkJCQkJUEdfR0VUQVJHX0RBVFVNKFJBTkdFX0JP VU5EU19ISVNUT0dSQU1fQVJHKSwKKwkJCQkJCQkJCQkJUEdfR0VUQVJHX0RBVFVNKEFUVEFSR19S QU5HRV9CT1VORFNfSElTVE9HUkFNKSwKIAkJCQkJCQkJCQkJYXR0dHlwaWQsIGF0dHR5cG1vZCwK IAkJCQkJCQkJCQkJJmNvbnZlcnRlZCk7CiAKQEAgLTUwMyw3ICs1MDMsNyBAQCBhdHRyaWJ1dGVf c3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJaWYgKGRvX3Jhbmdl X2xlbmd0aF9oaXN0b2dyYW0pCiAJewogCQkvKiBUaGUgYW55YXJyYXkgaXMgYWx3YXlzIGEgZmxv YXQ4W10gZm9yIHRoaXMgc3Rha2luZCAqLwotCQlEYXR1bQkJZWxlbXNbXSA9IHtQR19HRVRBUkdf REFUVU0oUkFOR0VfRU1QVFlfRlJBQ19BUkcpfTsKKwkJRGF0dW0JCWVsZW1zW10gPSB7UEdfR0VU QVJHX0RBVFVNKEFUVEFSR19SQU5HRV9FTVBUWV9GUkFDKX07CiAJCUFycmF5VHlwZSAgKmFycnkg PSBjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihlbGVtcywgMSwgRkxPQVQ0T0lEKTsKIAkJRGF0dW0J CXN0YW51bWJlcnMgPSBQb2ludGVyR2V0RGF0dW0oYXJyeSk7CiAKQEAgLTUxMiw3ICs1MTIsNyBA QCBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAK IAkJc3RhdmFsdWVzID0gc3RhdGF0dF9idWlsZF9zdGF2YWx1ZXMoInJhbmdlX2xlbmd0aF9oaXN0 b2dyYW0iLAogCQkJCQkJCQkJCQkmYXJyYXlfaW5fZm4sCi0JCQkJCQkJCQkJCVBHX0dFVEFSR19E QVRVTShSQU5HRV9MRU5HVEhfSElTVE9HUkFNX0FSRyksCisJCQkJCQkJCQkJCVBHX0dFVEFSR19E QVRVTShBVFRBUkdfUkFOR0VfTEVOR1RIX0hJU1RPR1JBTSksCiAJCQkJCQkJCQkJCUZMT0FUOE9J RCwgMCwgJmNvbnZlcnRlZCk7CiAKIAkJaWYgKGNvbnZlcnRlZCkKQEAgLTYwNSwxMyArNjA1LDEz IEBAIHBnX2NsZWFyX2F0dHJpYnV0ZV9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQogCWJvb2wJCWlu aGVyaXRlZDsKIAlPaWQJCQlsb2NrZWRfdGFibGUgPSBJbnZhbGlkT2lkOwogCi0Jc3RhdHNfY2hl Y2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgY2xlYXJhcmdpbmZvLCBDX0FUVFJFTFNDSEVNQV9BUkcp OwotCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8sIGNsZWFyYXJnaW5mbywgQ19BVFRS RUxOQU1FX0FSRyk7Ci0Jc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgY2xlYXJhcmdp bmZvLCBDX0FUVE5BTUVfQVJHKTsKLQlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBj bGVhcmFyZ2luZm8sIENfSU5IRVJJVEVEX0FSRyk7CisJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJn KGZjaW5mbywgY2xlYXJhcmdpbmZvLCBDX0FUVEFSR19BVFRSRUxTQ0hFTUEpOworCXN0YXRzX2No ZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8sIGNsZWFyYXJnaW5mbywgQ19BVFRBUkdfQVRUUkVMTkFN RSk7CisJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgY2xlYXJhcmdpbmZvLCBDX0FU VEFSR19BVFROQU1FKTsKKwlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBjbGVhcmFy Z2luZm8sIENfQVRUQVJHX0lOSEVSSVRFRCk7CiAKLQluc3BuYW1lID0gVGV4dERhdHVtR2V0Q1N0 cmluZyhQR19HRVRBUkdfREFUVU0oQ19BVFRSRUxTQ0hFTUFfQVJHKSk7Ci0JcmVsbmFtZSA9IFRl eHREYXR1bUdldENTdHJpbmcoUEdfR0VUQVJHX0RBVFVNKENfQVRUUkVMTkFNRV9BUkcpKTsKKwlu c3BuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhQR19HRVRBUkdfREFUVU0oQ19BVFRBUkdfQVRU UkVMU0NIRU1BKSk7CisJcmVsbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoUEdfR0VUQVJHX0RB VFVNKENfQVRUQVJHX0FUVFJFTE5BTUUpKTsKIAogCWlmIChSZWNvdmVyeUluUHJvZ3Jlc3MoKSkK IAkJZXJlcG9ydChFUlJPUiwKQEAgLTYyMyw3ICs2MjMsNyBAQCBwZ19jbGVhcl9hdHRyaWJ1dGVf c3RhdHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCQkJCSAgU2hhcmVVcGRhdGVFeGNsdXNpdmVM b2NrLCAwLAogCQkJCQkJCQkJICBSYW5nZVZhckNhbGxiYWNrRm9yU3RhdHMsICZsb2NrZWRfdGFi bGUpOwogCi0JYXR0bmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoUEdfR0VUQVJHX0RBVFVNKENf QVRUTkFNRV9BUkcpKTsKKwlhdHRuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhQR19HRVRBUkdf REFUVU0oQ19BVFRBUkdfQVRUTkFNRSkpOwogCWF0dG51bSA9IGdldF9hdHRudW0ocmVsb2lkLCBh dHRuYW1lKTsKIAogCWlmIChhdHRudW0gPCAwKQpAQCAtNjM4LDcgKzYzOCw3IEBAIHBnX2NsZWFy X2F0dHJpYnV0ZV9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQogCQkJCSBlcnJtc2coImNvbHVtbiBc IiVzXCIgb2YgcmVsYXRpb24gXCIlc1wiIGRvZXMgbm90IGV4aXN0IiwKIAkJCQkJCWF0dG5hbWUs IGdldF9yZWxfbmFtZShyZWxvaWQpKSkpOwogCi0JaW5oZXJpdGVkID0gUEdfR0VUQVJHX0JPT0wo Q19JTkhFUklURURfQVJHKTsKKwlpbmhlcml0ZWQgPSBQR19HRVRBUkdfQk9PTChDX0FUVEFSR19J TkhFUklURUQpOwogCiAJZGVsZXRlX3BnX3N0YXRpc3RpYyhyZWxvaWQsIGF0dG51bSwgaW5oZXJp dGVkKTsKIAlQR19SRVRVUk5fVk9JRCgpOwpAQCAtNjczLDEwICs2NzMsMTAgQEAgcGdfY2xlYXJf YXR0cmlidXRlX3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCiBEYXR1bQogcGdfcmVzdG9yZV9hdHRy aWJ1dGVfc3RhdHMoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlMT0NBTF9GQ0lORk8ocG9zaXRpb25h bF9mY2luZm8sIE5VTV9BVFRSSUJVVEVfU1RBVFNfQVJHUyk7CisJTE9DQUxfRkNJTkZPKHBvc2l0 aW9uYWxfZmNpbmZvLCBBVFRBUkdfTlVNX0FUVEFSR1MpOwogCWJvb2wJCXJlc3VsdCA9IHRydWU7 CiAKLQlJbml0RnVuY3Rpb25DYWxsSW5mb0RhdGEoKnBvc2l0aW9uYWxfZmNpbmZvLCBOVUxMLCBO VU1fQVRUUklCVVRFX1NUQVRTX0FSR1MsCisJSW5pdEZ1bmN0aW9uQ2FsbEluZm9EYXRhKCpwb3Np dGlvbmFsX2ZjaW5mbywgTlVMTCwgQVRUQVJHX05VTV9BVFRBUkdTLAogCQkJCQkJCSBJbnZhbGlk T2lkLCBOVUxMLCBOVUxMKTsKIAogCWlmICghc3RhdHNfZmlsbF9mY2luZm9fZnJvbV9hcmdfcGFp cnMoZmNpbmZvLCBwb3NpdGlvbmFsX2ZjaW5mbywKLS0gCjIuNTAuMSAoQXBwbGUgR2l0LTE1NSkK Cg== --000000000000e977f10655600bcf Content-Type: application/octet-stream; name="v2-0001-Rename-relation_stats_argnum-enumeriations.patch" Content-Disposition: attachment; filename="v2-0001-Rename-relation_stats_argnum-enumeriations.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqyw9g6n0 RnJvbSBmNDY4YzM0MmQ4MTNmNzZkZGM0YTc3OGNmM2Q2YTVhN2QyNmMxODRmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogU2F0LCAyNyBKdW4gMjAyNiAxMTozOTowNCAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djIgMDEvMTNdIFJlbmFtZSByZWxhdGlvbl9zdGF0c19hcmdudW0gZW51bWVyaWF0aW9ucy4KClJl bmFtZSBhbGwgcmVsYXRpb25fc3RhdHNfYXJnbnVtIGVudW1lcmF0ZWQgbmFtZXMgZnJvbSBmb29f QVJHIHRvClJFTEFSR19mb28uIFRoaXMgY2hhbmdlIHdpbGwgaGVscCBkaXN0aW5ndWlzaCB0aGVz ZSB2YWx1ZXMgZnJvbSBvdGhlcgplbnVtZXJhdGlvbnMgd2hpY2ggd2lsbCBiZSBhZGRlZCBpbiBm dXR1cmUgY29tbWl0cy4KLS0tCiBzcmMvYmFja2VuZC9zdGF0aXN0aWNzL3JlbGF0aW9uX3N0YXRz LmMgfCA1NiArKysrKysrKysrKystLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjggaW5z ZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rh dGlzdGljcy9yZWxhdGlvbl9zdGF0cy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9yZWxhdGlv bl9zdGF0cy5jCmluZGV4IGQ2NjMxZTlhOWE0Li4yZmY5N2MwMzU5ZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0 YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuYwpAQCAtMzYsMjQgKzM2LDI0IEBACiAKIGVudW0gcmVs YXRpb25fc3RhdHNfYXJnbnVtCiB7Ci0JUkVMU0NIRU1BX0FSRyA9IDAsCi0JUkVMTkFNRV9BUkcs Ci0JUkVMUEFHRVNfQVJHLAotCVJFTFRVUExFU19BUkcsCi0JUkVMQUxMVklTSUJMRV9BUkcsCi0J UkVMQUxMRlJPWkVOX0FSRywKLQlOVU1fUkVMQVRJT05fU1RBVFNfQVJHUworCVJFTEFSR19TQ0hF TUEgPSAwLAorCVJFTEFSR19SRUxOQU1FLAorCVJFTEFSR19SRUxQQUdFUywKKwlSRUxBUkdfUkVM VFVQTEVTLAorCVJFTEFSR19SRUxBTExWSVNJQkxFLAorCVJFTEFSR19SRUxBTExGUk9aRU4sCisJ UkVMQVJHX05VTV9SRUxBUkdTCiB9OwogCiBzdGF0aWMgc3RydWN0IFN0YXRzQXJnSW5mbyByZWxh cmdpbmZvW10gPQogewotCVtSRUxTQ0hFTUFfQVJHXSA9IHsic2NoZW1hbmFtZSIsIFRFWFRPSUR9 LAotCVtSRUxOQU1FX0FSR10gPSB7InJlbG5hbWUiLCBURVhUT0lEfSwKLQlbUkVMUEFHRVNfQVJH XSA9IHsicmVscGFnZXMiLCBJTlQ0T0lEfSwKLQlbUkVMVFVQTEVTX0FSR10gPSB7InJlbHR1cGxl cyIsIEZMT0FUNE9JRH0sCi0JW1JFTEFMTFZJU0lCTEVfQVJHXSA9IHsicmVsYWxsdmlzaWJsZSIs IElOVDRPSUR9LAotCVtSRUxBTExGUk9aRU5fQVJHXSA9IHsicmVsYWxsZnJvemVuIiwgSU5UNE9J RH0sCi0JW05VTV9SRUxBVElPTl9TVEFUU19BUkdTXSA9IHswfQorCVtSRUxBUkdfU0NIRU1BXSA9 IHsic2NoZW1hbmFtZSIsIFRFWFRPSUR9LAorCVtSRUxBUkdfUkVMTkFNRV0gPSB7InJlbG5hbWUi LCBURVhUT0lEfSwKKwlbUkVMQVJHX1JFTFBBR0VTXSA9IHsicmVscGFnZXMiLCBJTlQ0T0lEfSwK KwlbUkVMQVJHX1JFTFRVUExFU10gPSB7InJlbHR1cGxlcyIsIEZMT0FUNE9JRH0sCisJW1JFTEFS R19SRUxBTExWSVNJQkxFXSA9IHsicmVsYWxsdmlzaWJsZSIsIElOVDRPSUR9LAorCVtSRUxBUkdf UkVMQUxMRlJPWkVOXSA9IHsicmVsYWxsZnJvemVuIiwgSU5UNE9JRH0sCisJW1JFTEFSR19OVU1f UkVMQVJHU10gPSB7MH0KIH07CiAKIHN0YXRpYyBib29sIHJlbGF0aW9uX3N0YXRpc3RpY3NfdXBk YXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKTsKQEAgLTg1LDExICs4NSwxMSBAQCByZWxhdGlv bl9zdGF0aXN0aWNzX3VwZGF0ZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAlpbnQJCQlucmVw bGFjZXMgPSAwOwogCU9pZAkJCWxvY2tlZF90YWJsZSA9IEludmFsaWRPaWQ7CiAKLQlzdGF0c19j aGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCByZWxhcmdpbmZvLCBSRUxTQ0hFTUFfQVJHKTsKLQlz dGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCByZWxhcmdpbmZvLCBSRUxOQU1FX0FSRyk7 CisJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgcmVsYXJnaW5mbywgUkVMQVJHX1ND SEVNQSk7CisJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgcmVsYXJnaW5mbywgUkVM QVJHX1JFTE5BTUUpOwogCi0JbnNwbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoUEdfR0VUQVJH X0RBVFVNKFJFTFNDSEVNQV9BUkcpKTsKLQlyZWxuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhQ R19HRVRBUkdfREFUVU0oUkVMTkFNRV9BUkcpKTsKKwluc3BuYW1lID0gVGV4dERhdHVtR2V0Q1N0 cmluZyhQR19HRVRBUkdfREFUVU0oUkVMQVJHX1NDSEVNQSkpOworCXJlbG5hbWUgPSBUZXh0RGF0 dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRVTShSRUxBUkdfUkVMTkFNRSkpOwogCiAJaWYgKFJl Y292ZXJ5SW5Qcm9ncmVzcygpKQogCQllcmVwb3J0KEVSUk9SLApAQCAtMTAxLDE1ICsxMDEsMTUg QEAgcmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJ CQkJCQkJCQkgIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jaywgMCwKIAkJCQkJCQkJCSAgUmFuZ2VW YXJDYWxsYmFja0ZvclN0YXRzLCAmbG9ja2VkX3RhYmxlKTsKIAotCWlmICghUEdfQVJHSVNOVUxM KFJFTFBBR0VTX0FSRykpCisJaWYgKCFQR19BUkdJU05VTEwoUkVMQVJHX1JFTFBBR0VTKSkKIAl7 Ci0JCXJlbHBhZ2VzID0gUEdfR0VUQVJHX1VJTlQzMihSRUxQQUdFU19BUkcpOworCQlyZWxwYWdl cyA9IFBHX0dFVEFSR19VSU5UMzIoUkVMQVJHX1JFTFBBR0VTKTsKIAkJdXBkYXRlX3JlbHBhZ2Vz ID0gdHJ1ZTsKIAl9CiAKLQlpZiAoIVBHX0FSR0lTTlVMTChSRUxUVVBMRVNfQVJHKSkKKwlpZiAo IVBHX0FSR0lTTlVMTChSRUxBUkdfUkVMVFVQTEVTKSkKIAl7Ci0JCXJlbHR1cGxlcyA9IFBHX0dF VEFSR19GTE9BVDQoUkVMVFVQTEVTX0FSRyk7CisJCXJlbHR1cGxlcyA9IFBHX0dFVEFSR19GTE9B VDQoUkVMQVJHX1JFTFRVUExFUyk7CiAJCWlmIChyZWx0dXBsZXMgPCAtMS4wKQogCQl7CiAJCQll cmVwb3J0KFdBUk5JTkcsCkBAIC0xMjEsMTUgKzEyMSwxNSBAQCByZWxhdGlvbl9zdGF0aXN0aWNz X3VwZGF0ZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAkJCXVwZGF0ZV9yZWx0dXBsZXMgPSB0 cnVlOwogCX0KIAotCWlmICghUEdfQVJHSVNOVUxMKFJFTEFMTFZJU0lCTEVfQVJHKSkKKwlpZiAo IVBHX0FSR0lTTlVMTChSRUxBUkdfUkVMQUxMVklTSUJMRSkpCiAJewotCQlyZWxhbGx2aXNpYmxl ID0gUEdfR0VUQVJHX1VJTlQzMihSRUxBTExWSVNJQkxFX0FSRyk7CisJCXJlbGFsbHZpc2libGUg PSBQR19HRVRBUkdfVUlOVDMyKFJFTEFSR19SRUxBTExWSVNJQkxFKTsKIAkJdXBkYXRlX3JlbGFs bHZpc2libGUgPSB0cnVlOwogCX0KIAotCWlmICghUEdfQVJHSVNOVUxMKFJFTEFMTEZST1pFTl9B UkcpKQorCWlmICghUEdfQVJHSVNOVUxMKFJFTEFSR19SRUxBTExGUk9aRU4pKQogCXsKLQkJcmVs YWxsZnJvemVuID0gUEdfR0VUQVJHX1VJTlQzMihSRUxBTExGUk9aRU5fQVJHKTsKKwkJcmVsYWxs ZnJvemVuID0gUEdfR0VUQVJHX1VJTlQzMihSRUxBUkdfUkVMQUxMRlJPWkVOKTsKIAkJdXBkYXRl X3JlbGFsbGZyb3plbiA9IHRydWU7CiAJfQogCkBAIC0yMjUsMTEgKzIyNSwxMSBAQCBwZ19jbGVh cl9yZWxhdGlvbl9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQogRGF0dW0KIHBnX3Jlc3RvcmVfcmVs YXRpb25fc3RhdHMoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlMT0NBTF9GQ0lORk8ocG9zaXRpb25h bF9mY2luZm8sIE5VTV9SRUxBVElPTl9TVEFUU19BUkdTKTsKKwlMT0NBTF9GQ0lORk8ocG9zaXRp b25hbF9mY2luZm8sIFJFTEFSR19OVU1fUkVMQVJHUyk7CiAJYm9vbAkJcmVzdWx0ID0gdHJ1ZTsK IAogCUluaXRGdW5jdGlvbkNhbGxJbmZvRGF0YSgqcG9zaXRpb25hbF9mY2luZm8sIE5VTEwsCi0J CQkJCQkJIE5VTV9SRUxBVElPTl9TVEFUU19BUkdTLAorCQkJCQkJCSBSRUxBUkdfTlVNX1JFTEFS R1MsCiAJCQkJCQkJIEludmFsaWRPaWQsIE5VTEwsIE5VTEwpOwogCiAJaWYgKCFzdGF0c19maWxs X2ZjaW5mb19mcm9tX2FyZ19wYWlycyhmY2luZm8sIHBvc2l0aW9uYWxfZmNpbmZvLAoKYmFzZS1j b21taXQ6IGI3ZTRlM2U3ZmE3MzQ1OGVjY2E1Y2QxMGYzNDE3NDNmZDEyYTRmYWEKLS0gCjIuNTAu MSAoQXBwbGUgR2l0LTE1NSkKCg== --000000000000e977f10655600bcf Content-Type: application/octet-stream; name="v2-0003-Rename-extended-stats-enumerations.patch" Content-Disposition: attachment; filename="v2-0003-Rename-extended-stats-enumerations.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqyw9g6v2 RnJvbSA5OWYxYTIzNjI2OTkxOTEwYjJmM2JhYTExMzgxMzU0MmI3ZmQzM2YxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogU2F0LCAyNyBKdW4gMjAyNiAxMjoxMzoyOCAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djIgMDMvMTNdIFJlbmFtZSBleHRlbmRlZCBzdGF0cyBlbnVtZXJhdGlvbnMuCgpSZW5hbWUgZXh0 ZW5kZWRfc3RhdHNfYXJnbnVtIGFuZCBleHRlbmRlZF9zdGF0c19leHByc19lbGVtZW50CmVudW1l cmF0aW9ucy4KClJlbmFtZSBhbGwgZXh0ZW5kZWRfc3RhdHNfYXJnbnVtIGFuZCBleHRlbmRlZF9z dGF0c19leHByc19lbGVtZW50CmVudW1lcmF0ZWQgbmFtZXMgZnJvbSBmb29fQVJHIHRvIEVYVEFS R19mb28sIGFuZCBmb29fRUxFTSB0bwpFWFBSRUxFTV9mb28uICBUaGlzIGNoYW5nZSB3aWxsIGhl bHAgZGlzdGluZ3Vpc2ggdGhlc2UgdmFsdWVzIGZyb20gb3RoZXIKZW51bWVyYXRpb25zIHdoaWNo IHdpbGwgYmUgYWRkZWQgaW4gZnV0dXJlIGNvbW1pdHMuCi0tLQogc3JjL2JhY2tlbmQvc3RhdGlz dGljcy9leHRlbmRlZF9zdGF0c19mdW5jcy5jIHwgMzA4ICsrKysrKysrKy0tLS0tLS0tLQogMSBm aWxlIGNoYW5nZWQsIDE1NCBpbnNlcnRpb25zKCspLCAxNTQgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0c19mdW5jcy5jIGIvc3Jj L2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0c19mdW5jcy5jCmluZGV4IDJjYjM5NDIw NTZmLi5mOTYzNzZkNThkOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRl bmRlZF9zdGF0c19mdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRf c3RhdHNfZnVuY3MuYwpAQCAtNDUsMTggKzQ1LDE4IEBACiAgKi8KIGVudW0gZXh0ZW5kZWRfc3Rh dHNfYXJnbnVtCiB7Ci0JUkVMU0NIRU1BX0FSRyA9IDAsCi0JUkVMTkFNRV9BUkcsCi0JU1RBVFND SEVNQV9BUkcsCi0JU1RBVE5BTUVfQVJHLAotCUlOSEVSSVRFRF9BUkcsCi0JTkRJU1RJTkNUX0FS RywKLQlERVBFTkRFTkNJRVNfQVJHLAotCU1PU1RfQ09NTU9OX1ZBTFNfQVJHLAotCU1PU1RfQ09N TU9OX0ZSRVFTX0FSRywKLQlNT1NUX0NPTU1PTl9CQVNFX0ZSRVFTX0FSRywKLQlFWFBSRVNTSU9O U19BUkcsCi0JTlVNX0VYVEVOREVEX1NUQVRTX0FSR1MsCisJRVhUQVJHX1JFTFNDSEVNQSA9IDAs CisJRVhUQVJHX1JFTE5BTUUsCisJRVhUQVJHX1NUQVRTQ0hFTUEsCisJRVhUQVJHX1NUQVROQU1F LAorCUVYVEFSR19JTkhFUklURUQsCisJRVhUQVJHX05ESVNUSU5DVCwKKwlFWFRBUkdfREVQRU5E RU5DSUVTLAorCUVYVEFSR19NT1NUX0NPTU1PTl9WQUxTLAorCUVYVEFSR19NT1NUX0NPTU1PTl9G UkVRUywKKwlFWFRBUkdfTU9TVF9DT01NT05fQkFTRV9GUkVRUywKKwlFWFRBUkdfRVhQUkVTU0lP TlMsCisJRVhUQVJHX05VTV9FWFRBUkdTLAogfTsKIAogLyoKQEAgLTY1LDE4ICs2NSwxOCBAQCBl bnVtIGV4dGVuZGVkX3N0YXRzX2FyZ251bQogICovCiBzdGF0aWMgc3RydWN0IFN0YXRzQXJnSW5m byBleHRhcmdpbmZvW10gPQogewotCVtSRUxTQ0hFTUFfQVJHXSA9IHsic2NoZW1hbmFtZSIsIFRF WFRPSUR9LAotCVtSRUxOQU1FX0FSR10gPSB7InJlbG5hbWUiLCBURVhUT0lEfSwKLQlbU1RBVFND SEVNQV9BUkddID0geyJzdGF0aXN0aWNzX3NjaGVtYW5hbWUiLCBURVhUT0lEfSwKLQlbU1RBVE5B TUVfQVJHXSA9IHsic3RhdGlzdGljc19uYW1lIiwgVEVYVE9JRH0sCi0JW0lOSEVSSVRFRF9BUkdd ID0geyJpbmhlcml0ZWQiLCBCT09MT0lEfSwKLQlbTkRJU1RJTkNUX0FSR10gPSB7Im5fZGlzdGlu Y3QiLCBQR19ORElTVElOQ1RPSUR9LAotCVtERVBFTkRFTkNJRVNfQVJHXSA9IHsiZGVwZW5kZW5j aWVzIiwgUEdfREVQRU5ERU5DSUVTT0lEfSwKLQlbTU9TVF9DT01NT05fVkFMU19BUkddID0geyJt b3N0X2NvbW1vbl92YWxzIiwgVEVYVEFSUkFZT0lEfSwKLQlbTU9TVF9DT01NT05fRlJFUVNfQVJH XSA9IHsibW9zdF9jb21tb25fZnJlcXMiLCBGTE9BVDhBUlJBWU9JRH0sCi0JW01PU1RfQ09NTU9O X0JBU0VfRlJFUVNfQVJHXSA9IHsibW9zdF9jb21tb25fYmFzZV9mcmVxcyIsIEZMT0FUOEFSUkFZ T0lEfSwKLQlbRVhQUkVTU0lPTlNfQVJHXSA9IHsiZXhwcnMiLCBKU09OQk9JRH0sCi0JW05VTV9F WFRFTkRFRF9TVEFUU19BUkdTXSA9IHswfSwKKwlbRVhUQVJHX1JFTFNDSEVNQV0gPSB7InNjaGVt YW5hbWUiLCBURVhUT0lEfSwKKwlbRVhUQVJHX1JFTE5BTUVdID0geyJyZWxuYW1lIiwgVEVYVE9J RH0sCisJW0VYVEFSR19TVEFUU0NIRU1BXSA9IHsic3RhdGlzdGljc19zY2hlbWFuYW1lIiwgVEVY VE9JRH0sCisJW0VYVEFSR19TVEFUTkFNRV0gPSB7InN0YXRpc3RpY3NfbmFtZSIsIFRFWFRPSUR9 LAorCVtFWFRBUkdfSU5IRVJJVEVEXSA9IHsiaW5oZXJpdGVkIiwgQk9PTE9JRH0sCisJW0VYVEFS R19ORElTVElOQ1RdID0geyJuX2Rpc3RpbmN0IiwgUEdfTkRJU1RJTkNUT0lEfSwKKwlbRVhUQVJH X0RFUEVOREVOQ0lFU10gPSB7ImRlcGVuZGVuY2llcyIsIFBHX0RFUEVOREVOQ0lFU09JRH0sCisJ W0VYVEFSR19NT1NUX0NPTU1PTl9WQUxTXSA9IHsibW9zdF9jb21tb25fdmFscyIsIFRFWFRBUlJB WU9JRH0sCisJW0VYVEFSR19NT1NUX0NPTU1PTl9GUkVRU10gPSB7Im1vc3RfY29tbW9uX2ZyZXFz IiwgRkxPQVQ4QVJSQVlPSUR9LAorCVtFWFRBUkdfTU9TVF9DT01NT05fQkFTRV9GUkVRU10gPSB7 Im1vc3RfY29tbW9uX2Jhc2VfZnJlcXMiLCBGTE9BVDhBUlJBWU9JRH0sCisJW0VYVEFSR19FWFBS RVNTSU9OU10gPSB7ImV4cHJzIiwgSlNPTkJPSUR9LAorCVtFWFRBUkdfTlVNX0VYVEFSR1NdID0g ezB9LAogfTsKIAogLyoKQEAgLTg1LDI2ICs4NSwyNiBAQCBzdGF0aWMgc3RydWN0IFN0YXRzQXJn SW5mbyBleHRhcmdpbmZvW10gPQogICovCiBlbnVtIGV4dGVuZGVkX3N0YXRzX2V4cHJzX2VsZW1l bnQKIHsKLQlOVUxMX0ZSQUNfRUxFTSA9IDAsCi0JQVZHX1dJRFRIX0VMRU0sCi0JTl9ESVNUSU5D VF9FTEVNLAotCU1PU1RfQ09NTU9OX1ZBTFNfRUxFTSwKLQlNT1NUX0NPTU1PTl9GUkVRU19FTEVN LAotCUhJU1RPR1JBTV9CT1VORFNfRUxFTSwKLQlDT1JSRUxBVElPTl9FTEVNLAotCU1PU1RfQ09N TU9OX0VMRU1TX0VMRU0sCi0JTU9TVF9DT01NT05fRUxFTV9GUkVRU19FTEVNLAotCUVMRU1fQ09V TlRfSElTVE9HUkFNX0VMRU0sCi0JUkFOR0VfTEVOR1RIX0hJU1RPR1JBTV9FTEVNLAotCVJBTkdF X0VNUFRZX0ZSQUNfRUxFTSwKLQlSQU5HRV9CT1VORFNfSElTVE9HUkFNX0VMRU0sCi0JTlVNX0FU VFJJQlVURV9TVEFUU19FTEVNUworCUVYUFJFTEVNX05VTExfRlJBQyA9IDAsCisJRVhQUkVMRU1f QVZHX1dJRFRILAorCUVYUFJFTEVNX05fRElTVElOQ1QsCisJRVhQUkVMRU1fTU9TVF9DT01NT05f VkFMUywKKwlFWFBSRUxFTV9NT1NUX0NPTU1PTl9GUkVRUywKKwlFWFBSRUxFTV9ISVNUT0dSQU1f Qk9VTkRTLAorCUVYUFJFTEVNX0NPUlJFTEFUSU9OLAorCUVYUFJFTEVNX01PU1RfQ09NTU9OX0VM RU1TLAorCUVYUFJFTEVNX01PU1RfQ09NTU9OX0VMRU1fRlJFUVMsCisJRVhQUkVMRU1fRUxFTV9D T1VOVF9ISVNUT0dSQU0sCisJRVhQUkVMRU1fUkFOR0VfTEVOR1RIX0hJU1RPR1JBTSwKKwlFWFBS RUxFTV9SQU5HRV9FTVBUWV9GUkFDLAorCUVYUFJFTEVNX1JBTkdFX0JPVU5EU19ISVNUT0dSQU0s CisJRVhQUkVMRU1fTlVNX0VYUFJFTEVNUwogfTsKIAogLyoKICAqIFRoZSBhcmd1bWVudCBuYW1l cyBvZiB0aGUgcmVwZWF0aW5nIGFyZ3VtZW50cyBmb3Igc3R4ZGV4cHIuCiAgKi8KLXN0YXRpYyBj b25zdCBjaGFyICpleHRleHByYXJnbmFtZVtOVU1fQVRUUklCVVRFX1NUQVRTX0VMRU1TXSA9Citz dGF0aWMgY29uc3QgY2hhciAqZXh0ZXhwcmFyZ25hbWVbRVhQUkVMRU1fTlVNX0VYUFJFTEVNU10g PQogewogCSJudWxsX2ZyYWMiLAogCSJhdmdfd2lkdGgiLApAQCAtMzU2LDEyICszNTYsMTIgQEAg ZXh0ZW5kZWRfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJICog VGhlcmVmb3JlLCBub25lIG9mIHRoZSB0aHJlZSBhcnJheSB2YWx1ZXMgaXMgbWVhbmluZ2Z1bCB1 bmxlc3MgdGhlCiAJICogb3RoZXIgdHdvIGFyZSBhbHNvIHByZXNlbnQgYW5kIGluIHN5bmMgaW4g dGVybXMgb2YgYXJyYXkgbGVuZ3RoLgogCSAqLwotCWhhcy5tY3YgPSAoIVBHX0FSR0lTTlVMTChN T1NUX0NPTU1PTl9WQUxTX0FSRykgJiYKLQkJCSAgICFQR19BUkdJU05VTEwoTU9TVF9DT01NT05f RlJFUVNfQVJHKSAmJgotCQkJICAgIVBHX0FSR0lTTlVMTChNT1NUX0NPTU1PTl9CQVNFX0ZSRVFT X0FSRykpOwotCWhhcy5uZGlzdGluY3QgPSAhUEdfQVJHSVNOVUxMKE5ESVNUSU5DVF9BUkcpOwot CWhhcy5kZXBlbmRlbmNpZXMgPSAhUEdfQVJHSVNOVUxMKERFUEVOREVOQ0lFU19BUkcpOwotCWhh cy5leHByZXNzaW9ucyA9ICFQR19BUkdJU05VTEwoRVhQUkVTU0lPTlNfQVJHKTsKKwloYXMubWN2 ID0gKCFQR19BUkdJU05VTEwoRVhUQVJHX01PU1RfQ09NTU9OX1ZBTFMpICYmCisJCQkgICAhUEdf QVJHSVNOVUxMKEVYVEFSR19NT1NUX0NPTU1PTl9GUkVRUykgJiYKKwkJCSAgICFQR19BUkdJU05V TEwoRVhUQVJHX01PU1RfQ09NTU9OX0JBU0VfRlJFUVMpKTsKKwloYXMubmRpc3RpbmN0ID0gIVBH X0FSR0lTTlVMTChFWFRBUkdfTkRJU1RJTkNUKTsKKwloYXMuZGVwZW5kZW5jaWVzID0gIVBHX0FS R0lTTlVMTChFWFRBUkdfREVQRU5ERU5DSUVTKTsKKwloYXMuZXhwcmVzc2lvbnMgPSAhUEdfQVJH SVNOVUxMKEVYVEFSR19FWFBSRVNTSU9OUyk7CiAKIAlpZiAoUmVjb3ZlcnlJblByb2dyZXNzKCkp CiAJewpAQCAtMzczLDE4ICszNzMsMTggQEAgZXh0ZW5kZWRfc3RhdGlzdGljc191cGRhdGUoRnVu Y3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJfQogCiAJLyogcmVsYXRpb24gYXJndW1lbnRzICovCi0J c3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgZXh0YXJnaW5mbywgUkVMU0NIRU1BX0FS Ryk7Ci0JcmVsbnNwbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoUEdfR0VUQVJHX0RBVFVNKFJF TFNDSEVNQV9BUkcpKTsKLQlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBleHRhcmdp bmZvLCBSRUxOQU1FX0FSRyk7Ci0JcmVsbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoUEdfR0VU QVJHX0RBVFVNKFJFTE5BTUVfQVJHKSk7CisJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5m bywgZXh0YXJnaW5mbywgRVhUQVJHX1JFTFNDSEVNQSk7CisJcmVsbnNwbmFtZSA9IFRleHREYXR1 bUdldENTdHJpbmcoUEdfR0VUQVJHX0RBVFVNKEVYVEFSR19SRUxTQ0hFTUEpKTsKKwlzdGF0c19j aGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBleHRhcmdpbmZvLCBFWFRBUkdfUkVMTkFNRSk7CisJ cmVsbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoUEdfR0VUQVJHX0RBVFVNKEVYVEFSR19SRUxO QU1FKSk7CiAKIAkvKiBleHRlbmRlZCBzdGF0aXN0aWNzIGFyZ3VtZW50cyAqLwotCXN0YXRzX2No ZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8sIGV4dGFyZ2luZm8sIFNUQVRTQ0hFTUFfQVJHKTsKLQlu c3BuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhQR19HRVRBUkdfREFUVU0oU1RBVFNDSEVNQV9B UkcpKTsKLQlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBleHRhcmdpbmZvLCBTVEFU TkFNRV9BUkcpOwotCXN0eG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRV TShTVEFUTkFNRV9BUkcpKTsKLQlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBleHRh cmdpbmZvLCBJTkhFUklURURfQVJHKTsKLQlpbmhlcml0ZWQgPSBQR19HRVRBUkdfQk9PTChJTkhF UklURURfQVJHKTsKKwlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBleHRhcmdpbmZv LCBFWFRBUkdfU1RBVFNDSEVNQSk7CisJbnNwbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoUEdf R0VUQVJHX0RBVFVNKEVYVEFSR19TVEFUU0NIRU1BKSk7CisJc3RhdHNfY2hlY2tfcmVxdWlyZWRf YXJnKGZjaW5mbywgZXh0YXJnaW5mbywgRVhUQVJHX1NUQVROQU1FKTsKKwlzdHhuYW1lID0gVGV4 dERhdHVtR2V0Q1N0cmluZyhQR19HRVRBUkdfREFUVU0oRVhUQVJHX1NUQVROQU1FKSk7CisJc3Rh dHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgZXh0YXJnaW5mbywgRVhUQVJHX0lOSEVSSVRF RCk7CisJaW5oZXJpdGVkID0gUEdfR0VUQVJHX0JPT0woRVhUQVJHX0lOSEVSSVRFRCk7CiAKIAkv KgogCSAqIEZpcnN0IG9wZW4gdGhlIHJlbGF0aW9uIHdoZXJlIHdlIGV4cGVjdCB0byBmaW5kIHRo ZSBzdGF0aXN0aWNzLiAgVGhpcwpAQCAtNDgyLDcgKzQ4Miw3IEBAIGV4dGVuZGVkX3N0YXRpc3Rp Y3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCQllcmVwb3J0KFdBUk5JTkcsCiAJ CQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKIAkJCQllcnJtc2co ImNhbm5vdCBzcGVjaWZ5IHBhcmFtZXRlciBcIiVzXCIiLAotCQkJCQkgICBleHRhcmdpbmZvW05E SVNUSU5DVF9BUkddLmFyZ25hbWUpLAorCQkJCQkgICBleHRhcmdpbmZvW0VYVEFSR19ORElTVElO Q1RdLmFyZ25hbWUpLAogCQkJCWVycmhpbnQoIkV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0IFwi JXMuJXNcIiBkb2VzIG5vdCBzdXBwb3J0IHN0YXRpc3RpY3Mgb2YgdGhpcyB0eXBlLiIsCiAJCQkJ CQluc3BuYW1lLCBzdHhuYW1lKSk7CiAKQEAgLTQ5OSw3ICs0OTksNyBAQCBleHRlbmRlZF9zdGF0 aXN0aWNzX3VwZGF0ZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAkJZXJlcG9ydChXQVJOSU5H LAogCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCiAJCQkJZXJy bXNnKCJjYW5ub3Qgc3BlY2lmeSBwYXJhbWV0ZXIgXCIlc1wiIiwKLQkJCQkJICAgZXh0YXJnaW5m b1tERVBFTkRFTkNJRVNfQVJHXS5hcmduYW1lKSwKKwkJCQkJICAgZXh0YXJnaW5mb1tFWFRBUkdf REVQRU5ERU5DSUVTXS5hcmduYW1lKSwKIAkJCQllcnJoaW50KCJFeHRlbmRlZCBzdGF0aXN0aWNz IG9iamVjdCBcIiVzLiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBzdGF0aXN0aWNzIG9mIHRoaXMgdHlw ZS4iLAogCQkJCQkJbnNwbmFtZSwgc3R4bmFtZSkpOwogCQloYXMuZGVwZW5kZW5jaWVzID0gZmFs c2U7CkBAIC01MTQsMTYgKzUxNCwxNiBAQCBleHRlbmRlZF9zdGF0aXN0aWNzX3VwZGF0ZShGdW5j dGlvbkNhbGxJbmZvIGZjaW5mbykKIAkgKi8KIAlpZiAoIWVuYWJsZWQubWN2KQogCXsKLQkJaWYg KCFQR19BUkdJU05VTEwoTU9TVF9DT01NT05fVkFMU19BUkcpIHx8Ci0JCQkhUEdfQVJHSVNOVUxM KE1PU1RfQ09NTU9OX0ZSRVFTX0FSRykgfHwKLQkJCSFQR19BUkdJU05VTEwoTU9TVF9DT01NT05f QkFTRV9GUkVRU19BUkcpKQorCQlpZiAoIVBHX0FSR0lTTlVMTChFWFRBUkdfTU9TVF9DT01NT05f VkFMUykgfHwKKwkJCSFQR19BUkdJU05VTEwoRVhUQVJHX01PU1RfQ09NTU9OX0ZSRVFTKSB8fAor CQkJIVBHX0FSR0lTTlVMTChFWFRBUkdfTU9TVF9DT01NT05fQkFTRV9GUkVRUykpCiAJCXsKIAkJ CWVyZXBvcnQoV0FSTklORywKIAkJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKIAkJCQkJZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSBwYXJhbWV0ZXJzIFwiJXNcIiwg XCIlc1wiLCBvciBcIiVzXCIiLAotCQkJCQkJICAgZXh0YXJnaW5mb1tNT1NUX0NPTU1PTl9WQUxT X0FSR10uYXJnbmFtZSwKLQkJCQkJCSAgIGV4dGFyZ2luZm9bTU9TVF9DT01NT05fRlJFUVNfQVJH XS5hcmduYW1lLAotCQkJCQkJICAgZXh0YXJnaW5mb1tNT1NUX0NPTU1PTl9CQVNFX0ZSRVFTX0FS R10uYXJnbmFtZSksCisJCQkJCQkgICBleHRhcmdpbmZvW0VYVEFSR19NT1NUX0NPTU1PTl9WQUxT XS5hcmduYW1lLAorCQkJCQkJICAgZXh0YXJnaW5mb1tFWFRBUkdfTU9TVF9DT01NT05fRlJFUVNd LmFyZ25hbWUsCisJCQkJCQkgICBleHRhcmdpbmZvW0VYVEFSR19NT1NUX0NPTU1PTl9CQVNFX0ZS RVFTXS5hcmduYW1lKSwKIAkJCQkJZXJyaGludCgiRXh0ZW5kZWQgc3RhdGlzdGljcyBvYmplY3Qg XCIlcy4lc1wiIGRvZXMgbm90IHN1cHBvcnQgc3RhdGlzdGljcyBvZiB0aGlzIHR5cGUuIiwKIAkJ CQkJCQluc3BuYW1lLCBzdHhuYW1lKSk7CiAKQEAgLTUzOCwxNiArNTM4LDE2IEBAIGV4dGVuZGVk X3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCQkgKiBzdGF0aXN0 aWNzIG9iamVjdCBleHBlY3RzIHNvbWV0aGluZywgc29tZXRoaW5nIGlzIHdyb25nLiAgVGhpcwog CQkgKiBpc3N1ZXMgYSBXQVJOSU5HIGlmIGEgcGFydGlhbCBpbnB1dCBoYXMgYmVlbiBwcm92aWRl ZC4KIAkJICovCi0JCWlmICghUEdfQVJHSVNOVUxMKE1PU1RfQ09NTU9OX1ZBTFNfQVJHKSB8fAot CQkJIVBHX0FSR0lTTlVMTChNT1NUX0NPTU1PTl9GUkVRU19BUkcpIHx8Ci0JCQkhUEdfQVJHSVNO VUxMKE1PU1RfQ09NTU9OX0JBU0VfRlJFUVNfQVJHKSkKKwkJaWYgKCFQR19BUkdJU05VTEwoRVhU QVJHX01PU1RfQ09NTU9OX1ZBTFMpIHx8CisJCQkhUEdfQVJHSVNOVUxMKEVYVEFSR19NT1NUX0NP TU1PTl9GUkVRUykgfHwKKwkJCSFQR19BUkdJU05VTEwoRVhUQVJHX01PU1RfQ09NTU9OX0JBU0Vf RlJFUVMpKQogCQl7CiAJCQllcmVwb3J0KFdBUk5JTkcsCiAJCQkJCWVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCiAJCQkJCWVycm1zZygiY291bGQgbm90IHVzZSBcIiVz XCIsIFwiJXNcIiwgYW5kIFwiJXNcIjogbWlzc2luZyBvbmUgb3IgbW9yZSBwYXJhbWV0ZXJzIiwK LQkJCQkJCSAgIGV4dGFyZ2luZm9bTU9TVF9DT01NT05fVkFMU19BUkddLmFyZ25hbWUsCi0JCQkJ CQkgICBleHRhcmdpbmZvW01PU1RfQ09NTU9OX0ZSRVFTX0FSR10uYXJnbmFtZSwKLQkJCQkJCSAg IGV4dGFyZ2luZm9bTU9TVF9DT01NT05fQkFTRV9GUkVRU19BUkddLmFyZ25hbWUpKTsKKwkJCQkJ CSAgIGV4dGFyZ2luZm9bRVhUQVJHX01PU1RfQ09NTU9OX1ZBTFNdLmFyZ25hbWUsCisJCQkJCQkg ICBleHRhcmdpbmZvW0VYVEFSR19NT1NUX0NPTU1PTl9GUkVRU10uYXJnbmFtZSwKKwkJCQkJCSAg IGV4dGFyZ2luZm9bRVhUQVJHX01PU1RfQ09NTU9OX0JBU0VfRlJFUVNdLmFyZ25hbWUpKTsKIAkJ CXN1Y2Nlc3MgPSBmYWxzZTsKIAkJfQogCX0KQEAgLTU2MSw3ICs1NjEsNyBAQCBleHRlbmRlZF9z dGF0aXN0aWNzX3VwZGF0ZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAkJZXJlcG9ydChXQVJO SU5HLAogCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCiAJCQkJ ZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSBwYXJhbWV0ZXIgXCIlc1wiIiwKLQkJCQkJICAgZXh0YXJn aW5mb1tFWFBSRVNTSU9OU19BUkddLmFyZ25hbWUpLAorCQkJCQkgICBleHRhcmdpbmZvW0VYVEFS R19FWFBSRVNTSU9OU10uYXJnbmFtZSksCiAJCQkJZXJyaGludCgiRXh0ZW5kZWQgc3RhdGlzdGlj cyBvYmplY3QgXCIlcy4lc1wiIGRvZXMgbm90IHN1cHBvcnQgc3RhdGlzdGljcyBvZiB0aGlzIHR5 cGUuIiwKIAkJCQkJCW5zcG5hbWUsIHN0eG5hbWUpKTsKIApAQCAtNjU1LDcgKzY1NSw3IEBAIGV4 dGVuZGVkX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCiAJaWYg KGhhcy5uZGlzdGluY3QpCiAJewotCQlEYXR1bQkJbmRpc3RpbmN0X2RhdHVtID0gUEdfR0VUQVJH X0RBVFVNKE5ESVNUSU5DVF9BUkcpOworCQlEYXR1bQkJbmRpc3RpbmN0X2RhdHVtID0gUEdfR0VU QVJHX0RBVFVNKEVYVEFSR19ORElTVElOQ1QpOwogCQlieXRlYQkgICAqZGF0YSA9IERhdHVtR2V0 Qnl0ZWFQUChuZGlzdGluY3RfZGF0dW0pOwogCQlNVk5EaXN0aW5jdCAqbmRpc3RpbmN0ID0gc3Rh dGV4dF9uZGlzdGluY3RfZGVzZXJpYWxpemUoZGF0YSk7CiAKQEAgLTY3NCw3ICs2NzQsNyBAQCBl eHRlbmRlZF9zdGF0aXN0aWNzX3VwZGF0ZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAogCWlm IChoYXMuZGVwZW5kZW5jaWVzKQogCXsKLQkJRGF0dW0JCWRlcGVuZGVuY2llc19kYXR1bSA9IFBH X0dFVEFSR19EQVRVTShERVBFTkRFTkNJRVNfQVJHKTsKKwkJRGF0dW0JCWRlcGVuZGVuY2llc19k YXR1bSA9IFBHX0dFVEFSR19EQVRVTShFWFRBUkdfREVQRU5ERU5DSUVTKTsKIAkJYnl0ZWEJICAg KmRhdGEgPSBEYXR1bUdldEJ5dGVhUFAoZGVwZW5kZW5jaWVzX2RhdHVtKTsKIAkJTVZEZXBlbmRl bmNpZXMgKmRlcGVuZGVuY2llcyA9IHN0YXRleHRfZGVwZW5kZW5jaWVzX2Rlc2VyaWFsaXplKGRh dGEpOwogCkBAIC02OTYsOSArNjk2LDkgQEAgZXh0ZW5kZWRfc3RhdGlzdGljc191cGRhdGUoRnVu Y3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJCURhdHVtCQlkYXR1bTsKIAkJYm9vbAkJdmFsX29rID0g ZmFsc2U7CiAKLQkJZGF0dW0gPSBpbXBvcnRfbWN2KFBHX0dFVEFSR19BUlJBWVRZUEVfUChNT1NU X0NPTU1PTl9WQUxTX0FSRyksCi0JCQkJCQkgICBQR19HRVRBUkdfQVJSQVlUWVBFX1AoTU9TVF9D T01NT05fRlJFUVNfQVJHKSwKLQkJCQkJCSAgIFBHX0dFVEFSR19BUlJBWVRZUEVfUChNT1NUX0NP TU1PTl9CQVNFX0ZSRVFTX0FSRyksCisJCWRhdHVtID0gaW1wb3J0X21jdihQR19HRVRBUkdfQVJS QVlUWVBFX1AoRVhUQVJHX01PU1RfQ09NTU9OX1ZBTFMpLAorCQkJCQkJICAgUEdfR0VUQVJHX0FS UkFZVFlQRV9QKEVYVEFSR19NT1NUX0NPTU1PTl9GUkVRUyksCisJCQkJCQkgICBQR19HRVRBUkdf QVJSQVlUWVBFX1AoRVhUQVJHX01PU1RfQ09NTU9OX0JBU0VfRlJFUVMpLAogCQkJCQkJICAgYXR0 dHlwaWRzLCBhdHR0eXBtb2RzLCBhdHR0eXBjb2xscywgbnVtYXR0cnMsCiAJCQkJCQkgICAmdmFs X29rKTsKIApAQCAtNzMzLDcgKzczMyw3IEBAIGV4dGVuZGVkX3N0YXRpc3RpY3NfdXBkYXRlKEZ1 bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCQkJCQkJCQkgICAmYXR0dHlwaWRzW251bWF0dG51bXNd LAogCQkJCQkJCQkgICAmYXR0dHlwbW9kc1tudW1hdHRudW1zXSwKIAkJCQkJCQkJICAgJmF0dHR5 cGNvbGxzW251bWF0dG51bXNdLAotCQkJCQkJCQkgICBQR19HRVRBUkdfSlNPTkJfUChFWFBSRVNT SU9OU19BUkcpLAorCQkJCQkJCQkgICBQR19HRVRBUkdfSlNPTkJfUChFWFRBUkdfRVhQUkVTU0lP TlMpLAogCQkJCQkJCQkgICAmb2spOwogCiAJCXRhYmxlX2Nsb3NlKHBnc2QsIFJvd0V4Y2x1c2l2 ZUxvY2spOwpAQCAtNzk3LDcgKzc5Nyw3IEBAIGNoZWNrX21jdmxpc3RfYXJyYXkoY29uc3QgQXJy YXlUeXBlICphcnIsIGludCBhcmdpbmRleCwgaW50IHJlcXVpcmVkX25kaW1zLAogCQkJCWVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCiAJCQkJZXJybXNnKCJjb3VsZCBu b3QgcGFyc2UgYXJyYXkgXCIlc1wiOiBpbmNvcnJlY3QgbnVtYmVyIG9mIGVsZW1lbnRzIChzYW1l IGFzIFwiJXNcIiByZXF1aXJlZCkiLAogCQkJCQkgICBleHRhcmdpbmZvW2FyZ2luZGV4XS5hcmdu YW1lLAotCQkJCQkgICBleHRhcmdpbmZvW01PU1RfQ09NTU9OX1ZBTFNfQVJHXS5hcmduYW1lKSk7 CisJCQkJCSAgIGV4dGFyZ2luZm9bRVhUQVJHX01PU1RfQ09NTU9OX1ZBTFNdLmFyZ25hbWUpKTsK IAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtODMxLDcgKzgzMSw3IEBAIGltcG9ydF9tY3YoY29u c3QgQXJyYXlUeXBlICptY3ZfYXJyLCBjb25zdCBBcnJheVR5cGUgKmZyZXFzX2FyciwKIAkJZXJl cG9ydChXQVJOSU5HLAogCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCiAJCQkJZXJybXNnKCJjb3VsZCBub3QgcGFyc2UgYXJyYXkgXCIlc1wiOiBpbmNvcnJlY3Qg bnVtYmVyIG9mIGRpbWVuc2lvbnMgKCVkIHJlcXVpcmVkKSIsCi0JCQkJCSAgIGV4dGFyZ2luZm9b TU9TVF9DT01NT05fVkFMU19BUkddLmFyZ25hbWUsIDIpKTsKKwkJCQkJICAgZXh0YXJnaW5mb1tF WFRBUkdfTU9TVF9DT01NT05fVkFMU10uYXJnbmFtZSwgMikpOwogCQlnb3RvIG1jdl9lcnJvcjsK IAl9CiAKQEAgLTg0MCw3ICs4NDAsNyBAQCBpbXBvcnRfbWN2KGNvbnN0IEFycmF5VHlwZSAqbWN2 X2FyciwgY29uc3QgQXJyYXlUeXBlICpmcmVxc19hcnIsCiAJCWVyZXBvcnQoV0FSTklORywKIAkJ CQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCWVycm1zZygi Y291bGQgbm90IHBhcnNlIGFycmF5IFwiJXNcIjogZm91bmQgJWQgYXR0cmlidXRlcyBidXQgZXhw ZWN0ZWQgJWQiLAotCQkJCQkgICBleHRhcmdpbmZvW01PU1RfQ09NTU9OX1ZBTFNfQVJHXS5hcmdu YW1lLAorCQkJCQkgICBleHRhcmdpbmZvW0VYVEFSR19NT1NUX0NPTU1PTl9WQUxTXS5hcmduYW1l LAogCQkJCQkgICBBUlJfRElNUyhtY3ZfYXJyKVsxXSwgbnVtYXR0cnMpKTsKIAkJZ290byBtY3Zf ZXJyb3I7CiAJfQpAQCAtODYxLDEzICs4NjEsMTMgQEAgaW1wb3J0X21jdihjb25zdCBBcnJheVR5 cGUgKm1jdl9hcnIsIGNvbnN0IEFycmF5VHlwZSAqZnJlcXNfYXJyLAogCQllcmVwb3J0KFdBUk5J TkcsCiAJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKIAkJCQll cnJtc2coImNvdWxkIG5vdCBwYXJzZSBhcnJheSBcIiVzXCI6IG51bWJlciBvZiBpdGVtcyAoJWQp IGV4Y2VlZHMgbWF4aW11bSAoJWQpIiwKLQkJCQkJICAgZXh0YXJnaW5mb1tNT1NUX0NPTU1PTl9W QUxTX0FSR10uYXJnbmFtZSwKKwkJCQkJICAgZXh0YXJnaW5mb1tFWFRBUkdfTU9TVF9DT01NT05f VkFMU10uYXJnbmFtZSwKIAkJCQkJICAgbml0ZW1zLCBTVEFUU19NQ1ZMSVNUX01BWF9JVEVNUykp OwogCQlnb3RvIG1jdl9lcnJvcjsKIAl9CiAKLQlpZiAoIWNoZWNrX21jdmxpc3RfYXJyYXkoZnJl cXNfYXJyLCBNT1NUX0NPTU1PTl9GUkVRU19BUkcsIDEsIG5pdGVtcykgfHwKLQkJIWNoZWNrX21j dmxpc3RfYXJyYXkoYmFzZV9mcmVxc19hcnIsIE1PU1RfQ09NTU9OX0JBU0VfRlJFUVNfQVJHLCAx LCBuaXRlbXMpKQorCWlmICghY2hlY2tfbWN2bGlzdF9hcnJheShmcmVxc19hcnIsIEVYVEFSR19N T1NUX0NPTU1PTl9GUkVRUywgMSwgbml0ZW1zKSB8fAorCQkhY2hlY2tfbWN2bGlzdF9hcnJheShi YXNlX2ZyZXFzX2FyciwgRVhUQVJHX01PU1RfQ09NTU9OX0JBU0VfRlJFUVMsIDEsIG5pdGVtcykp CiAJewogCQkvKiBpbmNvbnNpc3RlbnQgaW5wdXQgYXJyYXlzIGZvdW5kICovCiAJCWdvdG8gbWN2 X2Vycm9yOwpAQCAtODk5LDcgKzg5OSw3IEBAIHN0YXRpYyBib29sCiBrZXlfaW5fZXhwcl9hcmdu YW1lcyhKc29uYlZhbHVlICprZXkpCiB7CiAJQXNzZXJ0KGtleS0+dHlwZSA9PSBqYnZTdHJpbmcp OwotCWZvciAoaW50IGkgPSAwOyBpIDwgTlVNX0FUVFJJQlVURV9TVEFUU19FTEVNUzsgaSsrKQor CWZvciAoaW50IGkgPSAwOyBpIDwgRVhQUkVMRU1fTlVNX0VYUFJFTEVNUzsgaSsrKQogCXsKIAkJ aWYgKHN0cmxlbihleHRleHByYXJnbmFtZVtpXSkgPT0ga2V5LT52YWwuc3RyaW5nLmxlbiAmJgog CQkJc3RybmNtcChleHRleHByYXJnbmFtZVtpXSwga2V5LT52YWwuc3RyaW5nLnZhbCwga2V5LT52 YWwuc3RyaW5nLmxlbikgPT0gMCkKQEAgLTExMjUsNyArMTEyNSw3IEBAIGltcG9ydF9wZ19zdGF0 aXN0aWMoUmVsYXRpb24gcGdzZCwgSnNvbmJDb250YWluZXIgKmNvbnQsCiAJCQkJCU9pZCB0eXBp ZCwgaW50MzIgdHlwbW9kLCBPaWQgdHlwY29sbCwKIAkJCQkJYm9vbCAqcGdfc3RhdGlzdGljX29r KQogewotCWNvbnN0IGNoYXIgKmFyZ25hbWUgPSBleHRhcmdpbmZvW0VYUFJFU1NJT05TX0FSR10u YXJnbmFtZTsKKwljb25zdCBjaGFyICphcmduYW1lID0gZXh0YXJnaW5mb1tFWFRBUkdfRVhQUkVT U0lPTlNdLmFyZ25hbWU7CiAJVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlOwogCURhdHVtCQl2YWx1 ZXNbTmF0dHNfcGdfc3RhdGlzdGljXTsKIAlib29sCQludWxsc1tOYXR0c19wZ19zdGF0aXN0aWNd OwpAQCAtMTEzNCw4ICsxMTM0LDggQEAgaW1wb3J0X3BnX3N0YXRpc3RpYyhSZWxhdGlvbiBwZ3Nk LCBKc29uYkNvbnRhaW5lciAqY29udCwKIAlEYXR1bQkJcGdzdGRhdCA9IChEYXR1bSkgMDsKIAlP aWQJCQllbGVtdHlwaWQgPSBJbnZhbGlkT2lkOwogCU9pZAkJCWVsZW1lcW9wciA9IEludmFsaWRP aWQ7Ci0JYm9vbAkJZm91bmRbTlVNX0FUVFJJQlVURV9TVEFUU19FTEVNU10gPSB7MH07Ci0JSnNv bmJWYWx1ZQl2YWxbTlVNX0FUVFJJQlVURV9TVEFUU19FTEVNU10gPSB7MH07CisJYm9vbAkJZm91 bmRbRVhQUkVMRU1fTlVNX0VYUFJFTEVNU10gPSB7MH07CisJSnNvbmJWYWx1ZQl2YWxbRVhQUkVM RU1fTlVNX0VYUFJFTEVNU10gPSB7MH07CiAKIAkvKiBBc3N1bWUgdGhlIHdvcnN0IGJ5IGRlZmF1 bHQuICovCiAJKnBnX3N0YXRpc3RpY19vayA9IGZhbHNlOwpAQCAtMTE1NCw3ICsxMTU0LDcgQEAg aW1wb3J0X3BnX3N0YXRpc3RpYyhSZWxhdGlvbiBwZ3NkLCBKc29uYkNvbnRhaW5lciAqY29udCwK IAkgKiBuZWl0aGVyIGEgc3RyaW5nIG5vciBhIE5VTEwsIHRoZXJlIGlzIG5vdCBtdWNoIHdlIGNh biBkbywgc28ganVzdCBnaXZlCiAJICogb24gdGhlIGVudGlyZSB0dXBsZSBmb3IgdGhpcyBleHBy ZXNzaW9uLgogCSAqLwotCWZvciAoaW50IGkgPSAwOyBpIDwgTlVNX0FUVFJJQlVURV9TVEFUU19F TEVNUzsgaSsrKQorCWZvciAoaW50IGkgPSAwOyBpIDwgRVhQUkVMRU1fTlVNX0VYUFJFTEVNUzsg aSsrKQogCXsKIAkJY29uc3QgY2hhciAqcyA9IGV4dGV4cHJhcmduYW1lW2ldOwogCQlpbnQJCQls ZW4gPSBzdHJsZW4ocyk7CkBAIC0xMTkwLDI2ICsxMTkwLDI2IEBAIGltcG9ydF9wZ19zdGF0aXN0 aWMoUmVsYXRpb24gcGdzZCwgSnNvbmJDb250YWluZXIgKmNvbnQsCiAJICogd2UgaGF2ZSBydWxl ZCBvdXQgZGlzYWdyZWVpbmcgcGFpcnMsIHdlIGNhbiB1c2UgZWl0aGVyIGZvdW5kIGZsYWcgYXMg YQogCSAqIHByb3h5IGZvciB0aGUgb3RoZXIuCiAJICovCi0JaWYgKGZvdW5kW01PU1RfQ09NTU9O X1ZBTFNfRUxFTV0gIT0gZm91bmRbTU9TVF9DT01NT05fRlJFUVNfRUxFTV0pCisJaWYgKGZvdW5k W0VYUFJFTEVNX01PU1RfQ09NTU9OX1ZBTFNdICE9IGZvdW5kW0VYUFJFTEVNX01PU1RfQ09NTU9O X0ZSRVFTXSkKIAl7CiAJCWVyZXBvcnQoV0FSTklORywKIAkJCQllcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCWVycm1zZygiY291bGQgbm90IHBhcnNlIFwiJXNc IjogaW52YWxpZCBlbGVtZW50IGluIGV4cHJlc3Npb24gJWQiLAogCQkJCQkgICBhcmduYW1lLCBl eHBybnVtKSwKIAkJCQllcnJoaW50KCJcIiVzXCIgYW5kIFwiJXNcIiBtdXN0IGJlIGJvdGggZWl0 aGVyIHN0cmluZ3Mgb3IgbnVsbHMuIiwKLQkJCQkJCWV4dGV4cHJhcmduYW1lW01PU1RfQ09NTU9O X1ZBTFNfRUxFTV0sCi0JCQkJCQlleHRleHByYXJnbmFtZVtNT1NUX0NPTU1PTl9GUkVRU19FTEVN XSkpOworCQkJCQkJZXh0ZXhwcmFyZ25hbWVbRVhQUkVMRU1fTU9TVF9DT01NT05fVkFMU10sCisJ CQkJCQlleHRleHByYXJnbmFtZVtFWFBSRUxFTV9NT1NUX0NPTU1PTl9GUkVRU10pKTsKIAkJZ290 byBwZ19zdGF0aXN0aWNfZXJyb3I7CiAJfQotCWlmIChmb3VuZFtNT1NUX0NPTU1PTl9FTEVNU19F TEVNXSAhPSBmb3VuZFtNT1NUX0NPTU1PTl9FTEVNX0ZSRVFTX0VMRU1dKQorCWlmIChmb3VuZFtF WFBSRUxFTV9NT1NUX0NPTU1PTl9FTEVNU10gIT0gZm91bmRbRVhQUkVMRU1fTU9TVF9DT01NT05f RUxFTV9GUkVRU10pCiAJewogCQllcmVwb3J0KFdBUk5JTkcsCiAJCQkJZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKIAkJCQllcnJtc2coImNvdWxkIG5vdCBwYXJzZSBc IiVzXCI6IGludmFsaWQgZWxlbWVudCBpbiBleHByZXNzaW9uICVkIiwKIAkJCQkJICAgYXJnbmFt ZSwgZXhwcm51bSksCiAJCQkJZXJyaGludCgiXCIlc1wiIGFuZCBcIiVzXCIgbXVzdCBiZSBib3Ro IGVpdGhlciBzdHJpbmdzIG9yIG51bGxzLiIsCi0JCQkJCQlleHRleHByYXJnbmFtZVtNT1NUX0NP TU1PTl9FTEVNU19FTEVNXSwKLQkJCQkJCWV4dGV4cHJhcmduYW1lW01PU1RfQ09NTU9OX0VMRU1f RlJFUVNfRUxFTV0pKTsKKwkJCQkJCWV4dGV4cHJhcmduYW1lW0VYUFJFTEVNX01PU1RfQ09NTU9O X0VMRU1TXSwKKwkJCQkJCWV4dGV4cHJhcmduYW1lW0VYUFJFTEVNX01PU1RfQ09NTU9OX0VMRU1f RlJFUVNdKSk7CiAJCWdvdG8gcGdfc3RhdGlzdGljX2Vycm9yOwogCX0KIApAQCAtMTIxNywxNyAr MTIxNywxNyBAQCBpbXBvcnRfcGdfc3RhdGlzdGljKFJlbGF0aW9uIHBnc2QsIEpzb25iQ29udGFp bmVyICpjb250LAogCSAqIFJhbmdlIHR5cGVzIG1heSBleHBlY3QgdGhyZWUgdmFsdWVzIHRvIGJl IHNldC4gIEFsbCB0aHJlZSBvZiB0aGVtIG11c3QKIAkgKiBlaXRoZXIgYmUgZm91bmQgb3Igbm90 IGJlIGZvdW5kLiAgQW55IGRpc2FncmVlbWVudCBpcyBhIHdhcm5pbmcuCiAJICovCi0JaWYgKGZv dW5kW1JBTkdFX0xFTkdUSF9ISVNUT0dSQU1fRUxFTV0gIT0gZm91bmRbUkFOR0VfRU1QVFlfRlJB Q19FTEVNXSB8fAotCQlmb3VuZFtSQU5HRV9MRU5HVEhfSElTVE9HUkFNX0VMRU1dICE9IGZvdW5k W1JBTkdFX0JPVU5EU19ISVNUT0dSQU1fRUxFTV0pCisJaWYgKGZvdW5kW0VYUFJFTEVNX1JBTkdF X0xFTkdUSF9ISVNUT0dSQU1dICE9IGZvdW5kW0VYUFJFTEVNX1JBTkdFX0VNUFRZX0ZSQUNdIHx8 CisJCWZvdW5kW0VYUFJFTEVNX1JBTkdFX0xFTkdUSF9ISVNUT0dSQU1dICE9IGZvdW5kW0VYUFJF TEVNX1JBTkdFX0JPVU5EU19ISVNUT0dSQU1dKQogCXsKIAkJZXJlcG9ydChXQVJOSU5HLAogCQkJ CWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCiAJCQkJZXJybXNnKCJj b3VsZCBub3QgcGFyc2UgXCIlc1wiOiBpbnZhbGlkIGVsZW1lbnQgaW4gZXhwcmVzc2lvbiAlZCIs CiAJCQkJCSAgIGFyZ25hbWUsIGV4cHJudW0pLAogCQkJCWVycmhpbnQoIlwiJXNcIiwgXCIlc1wi LCBhbmQgXCIlc1wiIG11c3QgYmUgYWxsIGVpdGhlciBzdHJpbmdzIG9yIGFsbCBudWxscy4iLAot CQkJCQkJZXh0ZXhwcmFyZ25hbWVbUkFOR0VfTEVOR1RIX0hJU1RPR1JBTV9FTEVNXSwKLQkJCQkJ CWV4dGV4cHJhcmduYW1lW1JBTkdFX0VNUFRZX0ZSQUNfRUxFTV0sCi0JCQkJCQlleHRleHByYXJn bmFtZVtSQU5HRV9CT1VORFNfSElTVE9HUkFNX0VMRU1dKSk7CisJCQkJCQlleHRleHByYXJnbmFt ZVtFWFBSRUxFTV9SQU5HRV9MRU5HVEhfSElTVE9HUkFNXSwKKwkJCQkJCWV4dGV4cHJhcmduYW1l W0VYUFJFTEVNX1JBTkdFX0VNUFRZX0ZSQUNdLAorCQkJCQkJZXh0ZXhwcmFyZ25hbWVbRVhQUkVM RU1fUkFOR0VfQk9VTkRTX0hJU1RPR1JBTV0pKTsKIAkJZ290byBwZ19zdGF0aXN0aWNfZXJyb3I7 CiAJfQogCkBAIC0xMjQ5LDcgKzEyNDksNyBAQCBpbXBvcnRfcGdfc3RhdGlzdGljKFJlbGF0aW9u IHBnc2QsIEpzb25iQ29udGFpbmVyICpjb250LAogCSAqIHR5cGUgTUNFTEVNIG9yIERFQ0hJU1Qs IG90aGVyd2lzZSB0aGUgdmFsdWVzIGFyZSB1bm5lY2Vzc2FyeSBhbmQgbm90CiAJICogbWVhbmlu Z2Z1bC4KIAkgKi8KLQlpZiAoZm91bmRbTU9TVF9DT01NT05fRUxFTVNfRUxFTV0gfHwgZm91bmRb RUxFTV9DT1VOVF9ISVNUT0dSQU1fRUxFTV0pCisJaWYgKGZvdW5kW0VYUFJFTEVNX01PU1RfQ09N TU9OX0VMRU1TXSB8fCBmb3VuZFtFWFBSRUxFTV9FTEVNX0NPVU5UX0hJU1RPR1JBTV0pCiAJewog CQlpZiAoIXN0YXRhdHRfZ2V0X2VsZW1fdHlwZSh0eXBpZCwgdHlwY2FjaGUtPnR5cHR5cGUsCiAJ CQkJCQkJCSAgICZlbGVtdHlwaWQsICZlbGVtZXFvcHIpKQpAQCAtMTI2Niw5ICsxMjY2LDkgQEAg aW1wb3J0X3BnX3N0YXRpc3RpYyhSZWxhdGlvbiBwZ3NkLCBKc29uYkNvbnRhaW5lciAqY29udCwK IAkgKiBUaGVzZSB0aHJlZSBmaWVsZHMgY2FuIG9ubHkgYmUgc2V0IGlmIGRlYWxpbmcgd2l0aCBh IHJhbmdlIG9yCiAJICogbXVsdGktcmFuZ2UgdHlwZS4KIAkgKi8KLQlpZiAoZm91bmRbUkFOR0Vf TEVOR1RIX0hJU1RPR1JBTV9FTEVNXSB8fAotCQlmb3VuZFtSQU5HRV9FTVBUWV9GUkFDX0VMRU1d IHx8Ci0JCWZvdW5kW1JBTkdFX0JPVU5EU19ISVNUT0dSQU1fRUxFTV0pCisJaWYgKGZvdW5kW0VY UFJFTEVNX1JBTkdFX0xFTkdUSF9ISVNUT0dSQU1dIHx8CisJCWZvdW5kW0VYUFJFTEVNX1JBTkdF X0VNUFRZX0ZSQUNdIHx8CisJCWZvdW5kW0VYUFJFTEVNX1JBTkdFX0JPVU5EU19ISVNUT0dSQU1d KQogCXsKIAkJaWYgKHR5cGNhY2hlLT50eXB0eXBlICE9IFRZUFRZUEVfUkFOR0UgJiYKIAkJCXR5 cGNhY2hlLT50eXB0eXBlICE9IFRZUFRZUEVfTVVMVElSQU5HRSkKQEAgLTEyNzgsNDQgKzEyNzgs NDQgQEAgaW1wb3J0X3BnX3N0YXRpc3RpYyhSZWxhdGlvbiBwZ3NkLCBKc29uYkNvbnRhaW5lciAq Y29udCwKIAkJCQkJZXJybXNnKCJjb3VsZCBub3QgcGFyc2UgXCIlc1wiOiBpbnZhbGlkIGRhdGEg aW4gZXhwcmVzc2lvbiAlZCIsCiAJCQkJCQkgICBhcmduYW1lLCBleHBybnVtKSwKIAkJCQkJZXJy aGludCgiXCIlc1wiLCBcIiVzXCIsIGFuZCBcIiVzXCIgY2FuIG9ubHkgYmUgc2V0IGZvciBhIHJh bmdlIHR5cGUuIiwKLQkJCQkJCQlleHRleHByYXJnbmFtZVtSQU5HRV9MRU5HVEhfSElTVE9HUkFN X0VMRU1dLAotCQkJCQkJCWV4dGV4cHJhcmduYW1lW1JBTkdFX0VNUFRZX0ZSQUNfRUxFTV0sCi0J CQkJCQkJZXh0ZXhwcmFyZ25hbWVbUkFOR0VfQk9VTkRTX0hJU1RPR1JBTV9FTEVNXSkpOworCQkJ CQkJCWV4dGV4cHJhcmduYW1lW0VYUFJFTEVNX1JBTkdFX0xFTkdUSF9ISVNUT0dSQU1dLAorCQkJ CQkJCWV4dGV4cHJhcmduYW1lW0VYUFJFTEVNX1JBTkdFX0VNUFRZX0ZSQUNdLAorCQkJCQkJCWV4 dGV4cHJhcmduYW1lW0VYUFJFTEVNX1JBTkdFX0JPVU5EU19ISVNUT0dSQU1dKSk7CiAJCQlnb3Rv IHBnX3N0YXRpc3RpY19lcnJvcjsKIAkJfQogCX0KIAogCS8qIG51bGxfZnJhYyAqLwotCWlmIChm b3VuZFtOVUxMX0ZSQUNfRUxFTV0pCisJaWYgKGZvdW5kW0VYUFJFTEVNX05VTExfRlJBQ10pCiAJ ewogCQlEYXR1bQkJZGF0dW07CiAKLQkJaWYgKGpidl90b19pbmZ1bmNfZGF0dW0oJnZhbFtOVUxM X0ZSQUNfRUxFTV0sIGZsb2F0NGluLCBleHBybnVtLAotCQkJCQkJCQlleHRleHByYXJnbmFtZVtO VUxMX0ZSQUNfRUxFTV0sICZkYXR1bSkpCisJCWlmIChqYnZfdG9faW5mdW5jX2RhdHVtKCZ2YWxb RVhQUkVMRU1fTlVMTF9GUkFDXSwgZmxvYXQ0aW4sIGV4cHJudW0sCisJCQkJCQkJCWV4dGV4cHJh cmduYW1lW0VYUFJFTEVNX05VTExfRlJBQ10sICZkYXR1bSkpCiAJCQl2YWx1ZXNbQW51bV9wZ19z dGF0aXN0aWNfc3RhbnVsbGZyYWMgLSAxXSA9IGRhdHVtOwogCQllbHNlCiAJCQlnb3RvIHBnX3N0 YXRpc3RpY19lcnJvcjsKIAl9CiAKIAkvKiBhdmdfd2lkdGggKi8KLQlpZiAoZm91bmRbQVZHX1dJ RFRIX0VMRU1dKQorCWlmIChmb3VuZFtFWFBSRUxFTV9BVkdfV0lEVEhdKQogCXsKIAkJRGF0dW0J CWRhdHVtOwogCi0JCWlmIChqYnZfdG9faW5mdW5jX2RhdHVtKCZ2YWxbQVZHX1dJRFRIX0VMRU1d LCBpbnQ0aW4sIGV4cHJudW0sCi0JCQkJCQkJCWV4dGV4cHJhcmduYW1lW0FWR19XSURUSF9FTEVN XSwgJmRhdHVtKSkKKwkJaWYgKGpidl90b19pbmZ1bmNfZGF0dW0oJnZhbFtFWFBSRUxFTV9BVkdf V0lEVEhdLCBpbnQ0aW4sIGV4cHJudW0sCisJCQkJCQkJCWV4dGV4cHJhcmduYW1lW0VYUFJFTEVN X0FWR19XSURUSF0sICZkYXR1bSkpCiAJCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3Rhd2lk dGggLSAxXSA9IGRhdHVtOwogCQllbHNlCiAJCQlnb3RvIHBnX3N0YXRpc3RpY19lcnJvcjsKIAl9 CiAKIAkvKiBuX2Rpc3RpbmN0ICovCi0JaWYgKGZvdW5kW05fRElTVElOQ1RfRUxFTV0pCisJaWYg KGZvdW5kW0VYUFJFTEVNX05fRElTVElOQ1RdKQogCXsKIAkJRGF0dW0JCWRhdHVtOwogCi0JCWlm IChqYnZfdG9faW5mdW5jX2RhdHVtKCZ2YWxbTl9ESVNUSU5DVF9FTEVNXSwgZmxvYXQ0aW4sIGV4 cHJudW0sCi0JCQkJCQkJCWV4dGV4cHJhcmduYW1lW05fRElTVElOQ1RfRUxFTV0sICZkYXR1bSkp CisJCWlmIChqYnZfdG9faW5mdW5jX2RhdHVtKCZ2YWxbRVhQUkVMRU1fTl9ESVNUSU5DVF0sIGZs b2F0NGluLCBleHBybnVtLAorCQkJCQkJCQlleHRleHByYXJnbmFtZVtFWFBSRUxFTV9OX0RJU1RJ TkNUXSwgJmRhdHVtKSkKIAkJCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFkaXN0aW5jdCAt IDFdID0gZGF0dW07CiAJCWVsc2UKIAkJCWdvdG8gcGdfc3RhdGlzdGljX2Vycm9yOwpAQCAtMTMz NCw3ICsxMzM0LDcgQEAgaW1wb3J0X3BnX3N0YXRpc3RpYyhSZWxhdGlvbiBwZ3NkLCBKc29uYkNv bnRhaW5lciAqY29udCwKIAkgKiBjb21wbGV0ZWx5LgogCSAqLwogCi0JaWYgKGZvdW5kW01PU1Rf Q09NTU9OX1ZBTFNfRUxFTV0pCisJaWYgKGZvdW5kW0VYUFJFTEVNX01PU1RfQ09NTU9OX1ZBTFNd KQogCXsKIAkJRGF0dW0JCXN0YXZhbHVlczsKIAkJRGF0dW0JCXN0YW51bWJlcnM7CkBAIC0xMzQy LDE2ICsxMzQyLDE2IEBAIGltcG9ydF9wZ19zdGF0aXN0aWMoUmVsYXRpb24gcGdzZCwgSnNvbmJD b250YWluZXIgKmNvbnQsCiAJCWJvb2wJCW51bV9vayA9IGZhbHNlOwogCQljaGFyCSAgICpzOwog Ci0JCXMgPSBqYnZfc3RyaW5nX2dldF9jc3RyKCZ2YWxbTU9TVF9DT01NT05fVkFMU19FTEVNXSk7 CisJCXMgPSBqYnZfc3RyaW5nX2dldF9jc3RyKCZ2YWxbRVhQUkVMRU1fTU9TVF9DT01NT05fVkFM U10pOwogCQlzdGF2YWx1ZXMgPSBhcnJheV9pbl9zYWZlKGFycmF5X2luX2ZuLCBzLCB0eXBpZCwg dHlwbW9kLCBleHBybnVtLAotCQkJCQkJCQkgIGV4dGV4cHJhcmduYW1lW01PU1RfQ09NTU9OX1ZB TFNfRUxFTV0sCisJCQkJCQkJCSAgZXh0ZXhwcmFyZ25hbWVbRVhQUkVMRU1fTU9TVF9DT01NT05f VkFMU10sCiAJCQkJCQkJCSAgJnZhbF9vayk7CiAKIAkJcGZyZWUocyk7CiAKLQkJcyA9IGpidl9z dHJpbmdfZ2V0X2NzdHIoJnZhbFtNT1NUX0NPTU1PTl9GUkVRU19FTEVNXSk7CisJCXMgPSBqYnZf c3RyaW5nX2dldF9jc3RyKCZ2YWxbRVhQUkVMRU1fTU9TVF9DT01NT05fRlJFUVNdKTsKIAkJc3Rh bnVtYmVycyA9IGFycmF5X2luX3NhZmUoYXJyYXlfaW5fZm4sIHMsIEZMT0FUNE9JRCwgLTEsIGV4 cHJudW0sCi0JCQkJCQkJCSAgIGV4dGV4cHJhcmduYW1lW01PU1RfQ09NTU9OX0ZSRVFTX0VMRU1d LAorCQkJCQkJCQkgICBleHRleHByYXJnbmFtZVtFWFBSRUxFTV9NT1NUX0NPTU1PTl9GUkVRU10s CiAJCQkJCQkJCSAgICZudW1fb2spOwogCQlwZnJlZShzKTsKIApAQCAtMTM4MywxNCArMTM4Mywx NCBAQCBpbXBvcnRfcGdfc3RhdGlzdGljKFJlbGF0aW9uIHBnc2QsIEpzb25iQ29udGFpbmVyICpj b250LAogCX0KIAogCS8qIFNUQVRJU1RJQ19LSU5EX0hJU1RPR1JBTSAqLwotCWlmIChmb3VuZFtI SVNUT0dSQU1fQk9VTkRTX0VMRU1dKQorCWlmIChmb3VuZFtFWFBSRUxFTV9ISVNUT0dSQU1fQk9V TkRTXSkKIAl7CiAJCURhdHVtCQlzdGF2YWx1ZXM7CiAJCWJvb2wJCXZhbF9vayA9IGZhbHNlOwot CQljaGFyCSAgICpzID0gamJ2X3N0cmluZ19nZXRfY3N0cigmdmFsW0hJU1RPR1JBTV9CT1VORFNf RUxFTV0pOworCQljaGFyCSAgICpzID0gamJ2X3N0cmluZ19nZXRfY3N0cigmdmFsW0VYUFJFTEVN X0hJU1RPR1JBTV9CT1VORFNdKTsKIAogCQlzdGF2YWx1ZXMgPSBhcnJheV9pbl9zYWZlKGFycmF5 X2luX2ZuLCBzLCB0eXBpZCwgdHlwbW9kLCBleHBybnVtLAotCQkJCQkJCQkgIGV4dGV4cHJhcmdu YW1lW0hJU1RPR1JBTV9CT1VORFNfRUxFTV0sCisJCQkJCQkJCSAgZXh0ZXhwcmFyZ25hbWVbRVhQ UkVMRU1fSElTVE9HUkFNX0JPVU5EU10sCiAJCQkJCQkJCSAgJnZhbF9vayk7CiAJCXBmcmVlKHMp OwogCkBAIC0xNDA0LDEyICsxNDA0LDEyIEBAIGltcG9ydF9wZ19zdGF0aXN0aWMoUmVsYXRpb24g cGdzZCwgSnNvbmJDb250YWluZXIgKmNvbnQsCiAJfQogCiAJLyogU1RBVElTVElDX0tJTkRfQ09S UkVMQVRJT04gKi8KLQlpZiAoZm91bmRbQ09SUkVMQVRJT05fRUxFTV0pCisJaWYgKGZvdW5kW0VY UFJFTEVNX0NPUlJFTEFUSU9OXSkKIAl7CiAJCURhdHVtCQljb3JyW10gPSB7KERhdHVtKSAwfTsK IAotCQlpZiAoamJ2X3RvX2luZnVuY19kYXR1bSgmdmFsW0NPUlJFTEFUSU9OX0VMRU1dLCBmbG9h dDRpbiwgZXhwcm51bSwKLQkJCQkJCQkJZXh0ZXhwcmFyZ25hbWVbQ09SUkVMQVRJT05fRUxFTV0s ICZjb3JyWzBdKSkKKwkJaWYgKGpidl90b19pbmZ1bmNfZGF0dW0oJnZhbFtFWFBSRUxFTV9DT1JS RUxBVElPTl0sIGZsb2F0NGluLCBleHBybnVtLAorCQkJCQkJCQlleHRleHByYXJnbmFtZVtFWFBS RUxFTV9DT1JSRUxBVElPTl0sICZjb3JyWzBdKSkKIAkJewogCQkJQXJyYXlUeXBlICAqYXJyeSA9 IGNvbnN0cnVjdF9hcnJheV9idWlsdGluKGNvcnIsIDEsIEZMT0FUNE9JRCk7CiAJCQlEYXR1bQkJ c3RhbnVtYmVycyA9IFBvaW50ZXJHZXREYXR1bShhcnJ5KTsKQEAgLTE0MjQsNyArMTQyNCw3IEBA IGltcG9ydF9wZ19zdGF0aXN0aWMoUmVsYXRpb24gcGdzZCwgSnNvbmJDb250YWluZXIgKmNvbnQs CiAJfQogCiAJLyogU1RBVElTVElDX0tJTkRfTUNFTEVNICovCi0JaWYgKGZvdW5kW01PU1RfQ09N TU9OX0VMRU1TX0VMRU1dKQorCWlmIChmb3VuZFtFWFBSRUxFTV9NT1NUX0NPTU1PTl9FTEVNU10p CiAJewogCQlEYXR1bQkJc3RhdmFsdWVzOwogCQlEYXR1bQkJc3RhbnVtYmVyczsKQEAgLTE0MzIs MTYgKzE0MzIsMTYgQEAgaW1wb3J0X3BnX3N0YXRpc3RpYyhSZWxhdGlvbiBwZ3NkLCBKc29uYkNv bnRhaW5lciAqY29udCwKIAkJYm9vbAkJbnVtX29rID0gZmFsc2U7CiAJCWNoYXIJICAgKnM7CiAK LQkJcyA9IGpidl9zdHJpbmdfZ2V0X2NzdHIoJnZhbFtNT1NUX0NPTU1PTl9FTEVNU19FTEVNXSk7 CisJCXMgPSBqYnZfc3RyaW5nX2dldF9jc3RyKCZ2YWxbRVhQUkVMRU1fTU9TVF9DT01NT05fRUxF TVNdKTsKIAkJc3RhdmFsdWVzID0gYXJyYXlfaW5fc2FmZShhcnJheV9pbl9mbiwgcywgZWxlbXR5 cGlkLCB0eXBtb2QsIGV4cHJudW0sCi0JCQkJCQkJCSAgZXh0ZXhwcmFyZ25hbWVbTU9TVF9DT01N T05fRUxFTVNfRUxFTV0sCisJCQkJCQkJCSAgZXh0ZXhwcmFyZ25hbWVbRVhQUkVMRU1fTU9TVF9D T01NT05fRUxFTVNdLAogCQkJCQkJCQkgICZ2YWxfb2spOwogCQlwZnJlZShzKTsKIAogCi0JCXMg PSBqYnZfc3RyaW5nX2dldF9jc3RyKCZ2YWxbTU9TVF9DT01NT05fRUxFTV9GUkVRU19FTEVNXSk7 CisJCXMgPSBqYnZfc3RyaW5nX2dldF9jc3RyKCZ2YWxbRVhQUkVMRU1fTU9TVF9DT01NT05fRUxF TV9GUkVRU10pOwogCQlzdGFudW1iZXJzID0gYXJyYXlfaW5fc2FmZShhcnJheV9pbl9mbiwgcywg RkxPQVQ0T0lELCAtMSwgZXhwcm51bSwKLQkJCQkJCQkJICAgZXh0ZXhwcmFyZ25hbWVbTU9TVF9D T01NT05fRUxFTV9GUkVRU19FTEVNXSwKKwkJCQkJCQkJICAgZXh0ZXhwcmFyZ25hbWVbRVhQUkVM RU1fTU9TVF9DT01NT05fRUxFTV9GUkVRU10sCiAJCQkJCQkJCSAgICZudW1fb2spOwogCQlwZnJl ZShzKTsKIApAQCAtMTQ1NiwxNSArMTQ1NiwxNSBAQCBpbXBvcnRfcGdfc3RhdGlzdGljKFJlbGF0 aW9uIHBnc2QsIEpzb25iQ29udGFpbmVyICpjb250LAogCX0KIAogCS8qIFNUQVRJU1RJQ19LSU5E X0RFQ0hJU1QgKi8KLQlpZiAoZm91bmRbRUxFTV9DT1VOVF9ISVNUT0dSQU1fRUxFTV0pCisJaWYg KGZvdW5kW0VYUFJFTEVNX0VMRU1fQ09VTlRfSElTVE9HUkFNXSkKIAl7CiAJCURhdHVtCQlzdGFu dW1iZXJzOwogCQlib29sCQludW1fb2sgPSBmYWxzZTsKIAkJY2hhcgkgICAqczsKIAotCQlzID0g amJ2X3N0cmluZ19nZXRfY3N0cigmdmFsW0VMRU1fQ09VTlRfSElTVE9HUkFNX0VMRU1dKTsKKwkJ cyA9IGpidl9zdHJpbmdfZ2V0X2NzdHIoJnZhbFtFWFBSRUxFTV9FTEVNX0NPVU5UX0hJU1RPR1JB TV0pOwogCQlzdGFudW1iZXJzID0gYXJyYXlfaW5fc2FmZShhcnJheV9pbl9mbiwgcywgRkxPQVQ0 T0lELCAtMSwgZXhwcm51bSwKLQkJCQkJCQkJICAgZXh0ZXhwcmFyZ25hbWVbRUxFTV9DT1VOVF9I SVNUT0dSQU1fRUxFTV0sCisJCQkJCQkJCSAgIGV4dGV4cHJhcmduYW1lW0VYUFJFTEVNX0VMRU1f Q09VTlRfSElTVE9HUkFNXSwKIAkJCQkJCQkJICAgJm51bV9vayk7CiAJCXBmcmVlKHMpOwogCkBA IC0xNDgyLDcgKzE0ODIsNyBAQCBpbXBvcnRfcGdfc3RhdGlzdGljKFJlbGF0aW9uIHBnc2QsIEpz b25iQ29udGFpbmVyICpjb250LAogCSAqIHRob3VnaCBpdCBpcyBudW1lcmljYWxseSBncmVhdGVy LCBhbmQgYWxsIG90aGVyIHN0YWtpbmRzIGFwcGVhciBpbgogCSAqIG51bWVyaWNhbCBvcmRlci4K IAkgKi8KLQlpZiAoZm91bmRbUkFOR0VfQk9VTkRTX0hJU1RPR1JBTV9FTEVNXSkKKwlpZiAoZm91 bmRbRVhQUkVMRU1fUkFOR0VfQk9VTkRTX0hJU1RPR1JBTV0pCiAJewogCQlEYXR1bQkJc3RhdmFs dWVzOwogCQlib29sCQl2YWxfb2sgPSBmYWxzZTsKQEAgLTE0OTYsMTAgKzE0OTYsMTAgQEAgaW1w b3J0X3BnX3N0YXRpc3RpYyhSZWxhdGlvbiBwZ3NkLCBKc29uYkNvbnRhaW5lciAqY29udCwKIAkJ aWYgKHR5cGVfaXNfbXVsdGlyYW5nZSh0eXBpZCkpCiAJCQlydHlwaWQgPSBnZXRfbXVsdGlyYW5n ZV9yYW5nZSh0eXBpZCk7CiAKLQkJcyA9IGpidl9zdHJpbmdfZ2V0X2NzdHIoJnZhbFtSQU5HRV9C T1VORFNfSElTVE9HUkFNX0VMRU1dKTsKKwkJcyA9IGpidl9zdHJpbmdfZ2V0X2NzdHIoJnZhbFtF WFBSRUxFTV9SQU5HRV9CT1VORFNfSElTVE9HUkFNXSk7CiAKIAkJc3RhdmFsdWVzID0gYXJyYXlf aW5fc2FmZShhcnJheV9pbl9mbiwgcywgcnR5cGlkLCB0eXBtb2QsIGV4cHJudW0sCi0JCQkJCQkJ CSAgZXh0ZXhwcmFyZ25hbWVbUkFOR0VfQk9VTkRTX0hJU1RPR1JBTV9FTEVNXSwKKwkJCQkJCQkJ ICBleHRleHByYXJnbmFtZVtFWFBSRUxFTV9SQU5HRV9CT1VORFNfSElTVE9HUkFNXSwKIAkJCQkJ CQkJICAmdmFsX29rKTsKIAogCQlpZiAodmFsX29rKQpAQCAtMTUxMiw3ICsxNTEyLDcgQEAgaW1w b3J0X3BnX3N0YXRpc3RpYyhSZWxhdGlvbiBwZ3NkLCBKc29uYkNvbnRhaW5lciAqY29udCwKIAl9 CiAKIAkvKiBTVEFUSVNUSUNfS0lORF9SQU5HRV9MRU5HVEhfSElTVE9HUkFNICovCi0JaWYgKGZv dW5kW1JBTkdFX0xFTkdUSF9ISVNUT0dSQU1fRUxFTV0pCisJaWYgKGZvdW5kW0VYUFJFTEVNX1JB TkdFX0xFTkdUSF9ISVNUT0dSQU1dKQogCXsKIAkJRGF0dW0JCWVtcHR5X2ZyYWNbXSA9IHsoRGF0 dW0pIDB9OwogCQlEYXR1bQkJc3RhdmFsdWVzOwpAQCAtMTUyMCw4ICsxNTIwLDggQEAgaW1wb3J0 X3BnX3N0YXRpc3RpYyhSZWxhdGlvbiBwZ3NkLCBKc29uYkNvbnRhaW5lciAqY29udCwKIAkJYm9v bAkJdmFsX29rID0gZmFsc2U7CiAJCWNoYXIJICAgKnM7CiAKLQkJaWYgKGpidl90b19pbmZ1bmNf ZGF0dW0oJnZhbFtSQU5HRV9FTVBUWV9GUkFDX0VMRU1dLCBmbG9hdDRpbiwgZXhwcm51bSwKLQkJ CQkJCQkJZXh0ZXhwcmFyZ25hbWVbUkFOR0VfRU1QVFlfRlJBQ19FTEVNXSwgJmVtcHR5X2ZyYWNb MF0pKQorCQlpZiAoamJ2X3RvX2luZnVuY19kYXR1bSgmdmFsW0VYUFJFTEVNX1JBTkdFX0VNUFRZ X0ZSQUNdLCBmbG9hdDRpbiwgZXhwcm51bSwKKwkJCQkJCQkJZXh0ZXhwcmFyZ25hbWVbRVhQUkVM RU1fUkFOR0VfRU1QVFlfRlJBQ10sICZlbXB0eV9mcmFjWzBdKSkKIAkJewogCQkJQXJyYXlUeXBl ICAqYXJyeSA9IGNvbnN0cnVjdF9hcnJheV9idWlsdGluKGVtcHR5X2ZyYWMsIDEsIEZMT0FUNE9J RCk7CiAKQEAgLTE1MzAsOSArMTUzMCw5IEBAIGltcG9ydF9wZ19zdGF0aXN0aWMoUmVsYXRpb24g cGdzZCwgSnNvbmJDb250YWluZXIgKmNvbnQsCiAJCWVsc2UKIAkJCWdvdG8gcGdfc3RhdGlzdGlj X2Vycm9yOwogCi0JCXMgPSBqYnZfc3RyaW5nX2dldF9jc3RyKCZ2YWxbUkFOR0VfTEVOR1RIX0hJ U1RPR1JBTV9FTEVNXSk7CisJCXMgPSBqYnZfc3RyaW5nX2dldF9jc3RyKCZ2YWxbRVhQUkVMRU1f UkFOR0VfTEVOR1RIX0hJU1RPR1JBTV0pOwogCQlzdGF2YWx1ZXMgPSBhcnJheV9pbl9zYWZlKGFy cmF5X2luX2ZuLCBzLCBGTE9BVDhPSUQsIC0xLCBleHBybnVtLAotCQkJCQkJCQkgIGV4dGV4cHJh cmduYW1lW1JBTkdFX0xFTkdUSF9ISVNUT0dSQU1fRUxFTV0sCisJCQkJCQkJCSAgZXh0ZXhwcmFy Z25hbWVbRVhQUkVMRU1fUkFOR0VfTEVOR1RIX0hJU1RPR1JBTV0sCiAJCQkJCQkJCSAgJnZhbF9v ayk7CiAKIAkJaWYgKHZhbF9vaykKQEAgLTE1NzUsNyArMTU3NSw3IEBAIGltcG9ydF9leHByZXNz aW9ucyhSZWxhdGlvbiBwZ3NkLCBpbnQgbnVtZXhwcnMsCiAJCQkJICAgT2lkICphdHR0eXBjb2xs cywgSnNvbmIgKmV4cHJzX2pzb25iLAogCQkJCSAgIGJvb2wgKmV4cHJzX2lzX3BlcmZlY3QpCiB7 Ci0JY29uc3QgY2hhciAqYXJnbmFtZSA9IGV4dGFyZ2luZm9bRVhQUkVTU0lPTlNfQVJHXS5hcmdu YW1lOworCWNvbnN0IGNoYXIgKmFyZ25hbWUgPSBleHRhcmdpbmZvW0VYVEFSR19FWFBSRVNTSU9O U10uYXJnbmFtZTsKIAlPaWQJCQlwZ3N0eXBvaWQgPSBnZXRfcmVsX3R5cGVfaWQoU3RhdGlzdGlj UmVsYXRpb25JZCk7CiAJQXJyYXlCdWlsZFN0YXRlICphc3RhdGUgPSBOVUxMOwogCURhdHVtCQly ZXN1bHQgPSAoRGF0dW0pIDA7CkBAIC0xNzM1LDEwICsxNzM1LDEwIEBAIGRlbGV0ZV9wZ19zdGF0 aXN0aWNfZXh0X2RhdGEoT2lkIHN0eG9pZCwgYm9vbCBpbmhlcml0ZWQpCiBEYXR1bQogcGdfcmVz dG9yZV9leHRlbmRlZF9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQogewotCUxPQ0FMX0ZDSU5GTyhw b3NpdGlvbmFsX2ZjaW5mbywgTlVNX0VYVEVOREVEX1NUQVRTX0FSR1MpOworCUxPQ0FMX0ZDSU5G Tyhwb3NpdGlvbmFsX2ZjaW5mbywgRVhUQVJHX05VTV9FWFRBUkdTKTsKIAlib29sCQlyZXN1bHQg PSB0cnVlOwogCi0JSW5pdEZ1bmN0aW9uQ2FsbEluZm9EYXRhKCpwb3NpdGlvbmFsX2ZjaW5mbywg TlVMTCwgTlVNX0VYVEVOREVEX1NUQVRTX0FSR1MsCisJSW5pdEZ1bmN0aW9uQ2FsbEluZm9EYXRh KCpwb3NpdGlvbmFsX2ZjaW5mbywgTlVMTCwgRVhUQVJHX05VTV9FWFRBUkdTLAogCQkJCQkJCSBJ bnZhbGlkT2lkLCBOVUxMLCBOVUxMKTsKIAogCWlmICghc3RhdHNfZmlsbF9mY2luZm9fZnJvbV9h cmdfcGFpcnMoZmNpbmZvLCBwb3NpdGlvbmFsX2ZjaW5mbywgZXh0YXJnaW5mbykpCkBAIC0xNzY5 LDE4ICsxNzY5LDE4IEBAIHBnX2NsZWFyX2V4dGVuZGVkX3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJT2lkCQkJbG9ja2VkX3RhYmxlID0gSW52YWxpZE9pZDsKIAogCS8qIHJlbGF0aW9uIGFyZ3Vt ZW50cyAqLwotCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8sIGV4dGFyZ2luZm8sIFJF TFNDSEVNQV9BUkcpOwotCXJlbG5zcG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFS R19EQVRVTShSRUxTQ0hFTUFfQVJHKSk7Ci0Jc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5m bywgZXh0YXJnaW5mbywgUkVMTkFNRV9BUkcpOwotCXJlbG5hbWUgPSBUZXh0RGF0dW1HZXRDU3Ry aW5nKFBHX0dFVEFSR19EQVRVTShSRUxOQU1FX0FSRykpOworCXN0YXRzX2NoZWNrX3JlcXVpcmVk X2FyZyhmY2luZm8sIGV4dGFyZ2luZm8sIEVYVEFSR19SRUxTQ0hFTUEpOworCXJlbG5zcG5hbWUg PSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRVTShFWFRBUkdfUkVMU0NIRU1BKSk7 CisJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgZXh0YXJnaW5mbywgRVhUQVJHX1JF TE5BTUUpOworCXJlbG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRVTShF WFRBUkdfUkVMTkFNRSkpOwogCiAJLyogZXh0ZW5kZWQgc3RhdGlzdGljcyBhcmd1bWVudHMgKi8K LQlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBleHRhcmdpbmZvLCBTVEFUU0NIRU1B X0FSRyk7Ci0JbnNwbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoUEdfR0VUQVJHX0RBVFVNKFNU QVRTQ0hFTUFfQVJHKSk7Ci0Jc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgZXh0YXJn aW5mbywgU1RBVE5BTUVfQVJHKTsKLQlzdHhuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhQR19H RVRBUkdfREFUVU0oU1RBVE5BTUVfQVJHKSk7Ci0Jc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZj aW5mbywgZXh0YXJnaW5mbywgSU5IRVJJVEVEX0FSRyk7Ci0JaW5oZXJpdGVkID0gUEdfR0VUQVJH X0JPT0woSU5IRVJJVEVEX0FSRyk7CisJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywg ZXh0YXJnaW5mbywgRVhUQVJHX1NUQVRTQ0hFTUEpOworCW5zcG5hbWUgPSBUZXh0RGF0dW1HZXRD U3RyaW5nKFBHX0dFVEFSR19EQVRVTShFWFRBUkdfU1RBVFNDSEVNQSkpOworCXN0YXRzX2NoZWNr X3JlcXVpcmVkX2FyZyhmY2luZm8sIGV4dGFyZ2luZm8sIEVYVEFSR19TVEFUTkFNRSk7CisJc3R4 bmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoUEdfR0VUQVJHX0RBVFVNKEVYVEFSR19TVEFUTkFN RSkpOworCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8sIGV4dGFyZ2luZm8sIEVYVEFS R19JTkhFUklURUQpOworCWluaGVyaXRlZCA9IFBHX0dFVEFSR19CT09MKEVYVEFSR19JTkhFUklU RUQpOwogCiAJaWYgKFJlY292ZXJ5SW5Qcm9ncmVzcygpKQogCXsKLS0gCjIuNTAuMSAoQXBwbGUg R2l0LTE1NSkKCg== --000000000000e977f10655600bcf Content-Type: application/octet-stream; name="v2-0005-Make-relation_statistics_update-stop-using-fcinfo.patch" Content-Disposition: attachment; filename="v2-0005-Make-relation_statistics_update-stop-using-fcinfo.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqyw9g6y4 RnJvbSBlOTMzMjk4ZGZkMWViZDdhMjUzNDZjOWQzNDJlMDkzNTgyZDFmYmQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogU3VuLCAyOCBKdW4gMjAyNiAxNjowOTo0OSAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djIgMDUvMTNdIE1ha2UgcmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUgc3RvcCB1c2luZyBmY2lu Zm8uCgpDaGFuZ2UgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBvZiByZWxhdGlvbl9zdGF0aXN0aWNz X3VwZGF0ZSB0byB1c2UgYQpOdWxsYWJsZURhdHVtIGFycmF5IGluc3RlYWQgb2YgYSBmdWxsIEZ1 bmN0aW9uQ2FsbEluZm8uCi0tLQogc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0 cy5jIHwgMzIgKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE2IGlu c2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuYyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvcmVsYXRp b25fc3RhdHMuYwppbmRleCA0Y2ZlZTE1N2JlMS4uMWVlMjM2MTJhZTEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuYworKysgYi9zcmMvYmFja2VuZC9z dGF0aXN0aWNzL3JlbGF0aW9uX3N0YXRzLmMKQEAgLTU2LDEzICs1NiwxMyBAQCBzdGF0aWMgc3Ry dWN0IFN0YXRzQXJnSW5mbyByZWxhcmdpbmZvW10gPQogCVtSRUxBUkdfTlVNX1JFTEFSR1NdID0g ezB9CiB9OwogCi1zdGF0aWMgYm9vbCByZWxhdGlvbl9zdGF0aXN0aWNzX3VwZGF0ZShGdW5jdGlv bkNhbGxJbmZvIGZjaW5mbyk7CitzdGF0aWMgYm9vbCByZWxhdGlvbl9zdGF0aXN0aWNzX3VwZGF0 ZShjb25zdCBOdWxsYWJsZURhdHVtICphcmdzKTsKIAogLyoKICAqIEludGVybmFsIGZ1bmN0aW9u IGZvciBtb2RpZnlpbmcgc3RhdGlzdGljcyBmb3IgYSByZWxhdGlvbi4KICAqLwogc3RhdGljIGJv b2wKLXJlbGF0aW9uX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQor cmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUoY29uc3QgTnVsbGFibGVEYXR1bSAqYXJncykKIHsK IAlib29sCQlyZXN1bHQgPSB0cnVlOwogCWNoYXIJICAgKm5zcG5hbWU7CkBAIC04NSwxMSArODUs MTEgQEAgcmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8p CiAJaW50CQkJbnJlcGxhY2VzID0gMDsKIAlPaWQJCQlsb2NrZWRfdGFibGUgPSBJbnZhbGlkT2lk OwogCi0Jc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mby0+YXJncywgcmVsYXJnaW5mbywg UkVMQVJHX1NDSEVNQSk7Ci0Jc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mby0+YXJncywg cmVsYXJnaW5mbywgUkVMQVJHX1JFTE5BTUUpOworCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhh cmdzLCByZWxhcmdpbmZvLCBSRUxBUkdfU0NIRU1BKTsKKwlzdGF0c19jaGVja19yZXF1aXJlZF9h cmcoYXJncywgcmVsYXJnaW5mbywgUkVMQVJHX1JFTE5BTUUpOwogCi0JbnNwbmFtZSA9IFRleHRE YXR1bUdldENTdHJpbmcoUEdfR0VUQVJHX0RBVFVNKFJFTEFSR19TQ0hFTUEpKTsKLQlyZWxuYW1l ID0gVGV4dERhdHVtR2V0Q1N0cmluZyhQR19HRVRBUkdfREFUVU0oUkVMQVJHX1JFTE5BTUUpKTsK Kwluc3BuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhhcmdzW1JFTEFSR19TQ0hFTUFdLnZhbHVl KTsKKwlyZWxuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhhcmdzW1JFTEFSR19SRUxOQU1FXS52 YWx1ZSk7CiAKIAlpZiAoUmVjb3ZlcnlJblByb2dyZXNzKCkpCiAJCWVyZXBvcnQoRVJST1IsCkBA IC0xMDEsMTUgKzEwMSwxNSBAQCByZWxhdGlvbl9zdGF0aXN0aWNzX3VwZGF0ZShGdW5jdGlvbkNh bGxJbmZvIGZjaW5mbykKIAkJCQkJCQkJCSAgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrLCAwLAog CQkJCQkJCQkJICBSYW5nZVZhckNhbGxiYWNrRm9yU3RhdHMsICZsb2NrZWRfdGFibGUpOwogCi0J aWYgKCFQR19BUkdJU05VTEwoUkVMQVJHX1JFTFBBR0VTKSkKKwlpZiAoIWFyZ3NbUkVMQVJHX1JF TFBBR0VTXS5pc251bGwpCiAJewotCQlyZWxwYWdlcyA9IFBHX0dFVEFSR19VSU5UMzIoUkVMQVJH X1JFTFBBR0VTKTsKKwkJcmVscGFnZXMgPSBEYXR1bUdldFVJbnQzMihhcmdzW1JFTEFSR19SRUxQ QUdFU10udmFsdWUpOwogCQl1cGRhdGVfcmVscGFnZXMgPSB0cnVlOwogCX0KIAotCWlmICghUEdf QVJHSVNOVUxMKFJFTEFSR19SRUxUVVBMRVMpKQorCWlmICghYXJnc1tSRUxBUkdfUkVMVFVQTEVT XS5pc251bGwpCiAJewotCQlyZWx0dXBsZXMgPSBQR19HRVRBUkdfRkxPQVQ0KFJFTEFSR19SRUxU VVBMRVMpOworCQlyZWx0dXBsZXMgPSBEYXR1bUdldEZsb2F0NChhcmdzW1JFTEFSR19SRUxUVVBM RVNdLnZhbHVlKTsKIAkJaWYgKHJlbHR1cGxlcyA8IC0xLjApCiAJCXsKIAkJCWVyZXBvcnQoV0FS TklORywKQEAgLTEyMSwxNSArMTIxLDE1IEBAIHJlbGF0aW9uX3N0YXRpc3RpY3NfdXBkYXRlKEZ1 bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCQkJdXBkYXRlX3JlbHR1cGxlcyA9IHRydWU7CiAJfQog Ci0JaWYgKCFQR19BUkdJU05VTEwoUkVMQVJHX1JFTEFMTFZJU0lCTEUpKQorCWlmICghYXJnc1tS RUxBUkdfUkVMQUxMVklTSUJMRV0uaXNudWxsKQogCXsKLQkJcmVsYWxsdmlzaWJsZSA9IFBHX0dF VEFSR19VSU5UMzIoUkVMQVJHX1JFTEFMTFZJU0lCTEUpOworCQlyZWxhbGx2aXNpYmxlID0gRGF0 dW1HZXRVSW50MzIoYXJnc1tSRUxBUkdfUkVMQUxMVklTSUJMRV0udmFsdWUpOwogCQl1cGRhdGVf cmVsYWxsdmlzaWJsZSA9IHRydWU7CiAJfQogCi0JaWYgKCFQR19BUkdJU05VTEwoUkVMQVJHX1JF TEFMTEZST1pFTikpCisJaWYgKCFhcmdzW1JFTEFSR19SRUxBTExGUk9aRU5dLmlzbnVsbCkKIAl7 Ci0JCXJlbGFsbGZyb3plbiA9IFBHX0dFVEFSR19VSU5UMzIoUkVMQVJHX1JFTEFMTEZST1pFTik7 CisJCXJlbGFsbGZyb3plbiA9IERhdHVtR2V0VUludDMyKGFyZ3NbUkVMQVJHX1JFTEFMTEZST1pF Tl0udmFsdWUpOwogCQl1cGRhdGVfcmVsYWxsZnJvemVuID0gdHJ1ZTsKIAl9CiAKQEAgLTIxOCw3 ICsyMTgsNyBAQCBwZ19jbGVhcl9yZWxhdGlvbl9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQogCW5l d2ZjaW5mby0+YXJnc1s1XS52YWx1ZSA9IFVJbnQzMkdldERhdHVtKDApOwogCW5ld2ZjaW5mby0+ YXJnc1s1XS5pc251bGwgPSBmYWxzZTsKIAotCXJlbGF0aW9uX3N0YXRpc3RpY3NfdXBkYXRlKG5l d2ZjaW5mbyk7CisJcmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUobmV3ZmNpbmZvLT5hcmdzKTsK IAlQR19SRVRVUk5fVk9JRCgpOwogfQogCkBAIC0yMzYsNyArMjM2LDcgQEAgcGdfcmVzdG9yZV9y ZWxhdGlvbl9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQogCQkJCQkJCQkJCSAgcmVsYXJnaW5mbykp CiAJCXJlc3VsdCA9IGZhbHNlOwogCi0JaWYgKCFyZWxhdGlvbl9zdGF0aXN0aWNzX3VwZGF0ZShw b3NpdGlvbmFsX2ZjaW5mbykpCisJaWYgKCFyZWxhdGlvbl9zdGF0aXN0aWNzX3VwZGF0ZShwb3Np dGlvbmFsX2ZjaW5mby0+YXJncykpCiAJCXJlc3VsdCA9IGZhbHNlOwogCiAJUEdfUkVUVVJOX0JP T0wocmVzdWx0KTsKLS0gCjIuNTAuMSAoQXBwbGUgR2l0LTE1NSkKCg== --000000000000e977f10655600bcf Content-Type: application/octet-stream; name="v2-0006-Make-attribute_statistics_update-stop-using-fcinf.patch" Content-Disposition: attachment; filename="v2-0006-Make-attribute_statistics_update-stop-using-fcinf.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqyw9g6z5 RnJvbSBmOGZkMTYwYjgzMWM3NjVmMTM2NDM5OGU5M2M3MjJmMWVkYWVkZGIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogU3VuLCAyOCBKdW4gMjAyNiAxNjozODo1NiAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djIgMDYvMTNdIE1ha2UgYXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlIHN0b3AgdXNpbmcgZmNp bmZvLgoKQ2hhbmdlIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgYXR0cmlidXRlX3N0YXRpc3Rp Y3NfdXBkYXRlIHRvIHVzZSBhCk51bGxhYmxlRGF0dW0gYXJyYXkgaW5zdGVhZCBvZiBhIGZ1bGwg RnVuY3Rpb25DYWxsSW5mby4KLS0tCiBzcmMvYmFja2VuZC9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9z dGF0cy5jIHwgOTIgKysrKysrKysrKysrLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNDYg aW5zZXJ0aW9ucygrKSwgNDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuYyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvYXR0 cmlidXRlX3N0YXRzLmMKaW5kZXggZmJiNTIxMzFlZDAuLmE4NDdkMDUzZWU0IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5jCisrKyBiL3NyYy9iYWNr ZW5kL3N0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmMKQEAgLTEwNCw3ICsxMDQsNyBAQCBzdGF0 aWMgc3RydWN0IFN0YXRzQXJnSW5mbyBjbGVhcmFyZ2luZm9bXSA9CiAJW0NfQVRUQVJHX05VTV9B VFRBUkdTXSA9IHswfQogfTsKIAotc3RhdGljIGJvb2wgYXR0cmlidXRlX3N0YXRpc3RpY3NfdXBk YXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKTsKK3N0YXRpYyBib29sIGF0dHJpYnV0ZV9zdGF0 aXN0aWNzX3VwZGF0ZShjb25zdCBOdWxsYWJsZURhdHVtICphcmdzKTsKIHN0YXRpYyB2b2lkIHVw c2VydF9wZ19zdGF0aXN0aWMoUmVsYXRpb24gc3RhcmVsLCBIZWFwVHVwbGUgb2xkdHVwLAogCQkJ CQkJCQljb25zdCBEYXR1bSAqdmFsdWVzLCBjb25zdCBib29sICpudWxscywgY29uc3QgYm9vbCAq cmVwbGFjZXMpOwogc3RhdGljIGJvb2wgZGVsZXRlX3BnX3N0YXRpc3RpYyhPaWQgcmVsb2lkLCBB dHRyTnVtYmVyIGF0dG51bSwgYm9vbCBzdGFpbmhlcml0KTsKQEAgLTEyNiw3ICsxMjYsNyBAQCBz dGF0aWMgYm9vbCBkZWxldGVfcGdfc3RhdGlzdGljKE9pZCByZWxvaWQsIEF0dHJOdW1iZXIgYXR0 bnVtLCBib29sIHN0YWluaGVyaXQpOwogICogYW5kIG90aGVyIHN0YXRpc3RpYyBraW5kcyBtYXkg c3RpbGwgYmUgdXBkYXRlZC4KICAqLwogc3RhdGljIGJvb2wKLWF0dHJpYnV0ZV9zdGF0aXN0aWNz X3VwZGF0ZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKK2F0dHJpYnV0ZV9zdGF0aXN0aWNzX3Vw ZGF0ZShjb25zdCBOdWxsYWJsZURhdHVtICphcmdzKQogewogCWNoYXIJICAgKm5zcG5hbWU7CiAJ Y2hhcgkgICAqcmVsbmFtZTsKQEAgLTE1MSwxNiArMTUxLDE2IEBAIGF0dHJpYnV0ZV9zdGF0aXN0 aWNzX3VwZGF0ZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAogCUZtZ3JJbmZvCWFycmF5X2lu X2ZuOwogCi0JYm9vbAkJZG9fbWN2ID0gIVBHX0FSR0lTTlVMTChBVFRBUkdfTU9TVF9DT01NT05f RlJFUVMpICYmCi0JCSFQR19BUkdJU05VTEwoQVRUQVJHX01PU1RfQ09NTU9OX1ZBTFMpOwotCWJv b2wJCWRvX2hpc3RvZ3JhbSA9ICFQR19BUkdJU05VTEwoQVRUQVJHX0hJU1RPR1JBTV9CT1VORFMp OwotCWJvb2wJCWRvX2NvcnJlbGF0aW9uID0gIVBHX0FSR0lTTlVMTChBVFRBUkdfQ09SUkVMQVRJ T04pOwotCWJvb2wJCWRvX21jZWxlbSA9ICFQR19BUkdJU05VTEwoQVRUQVJHX01PU1RfQ09NTU9O X0VMRU1TKSAmJgotCQkhUEdfQVJHSVNOVUxMKEFUVEFSR19NT1NUX0NPTU1PTl9FTEVNX0ZSRVFT KTsKLQlib29sCQlkb19kZWNoaXN0ID0gIVBHX0FSR0lTTlVMTChBVFRBUkdfRUxFTV9DT1VOVF9I SVNUT0dSQU0pOwotCWJvb2wJCWRvX2JvdW5kc19oaXN0b2dyYW0gPSAhUEdfQVJHSVNOVUxMKEFU VEFSR19SQU5HRV9CT1VORFNfSElTVE9HUkFNKTsKLQlib29sCQlkb19yYW5nZV9sZW5ndGhfaGlz dG9ncmFtID0gIVBHX0FSR0lTTlVMTChBVFRBUkdfUkFOR0VfTEVOR1RIX0hJU1RPR1JBTSkgJiYK LQkJIVBHX0FSR0lTTlVMTChBVFRBUkdfUkFOR0VfRU1QVFlfRlJBQyk7CisJYm9vbAkJZG9fbWN2 ID0gIWFyZ3NbQVRUQVJHX01PU1RfQ09NTU9OX0ZSRVFTXS5pc251bGwgJiYKKwkJIWFyZ3NbQVRU QVJHX01PU1RfQ09NTU9OX1ZBTFNdLmlzbnVsbDsKKwlib29sCQlkb19oaXN0b2dyYW0gPSAhYXJn c1tBVFRBUkdfSElTVE9HUkFNX0JPVU5EU10uaXNudWxsOworCWJvb2wJCWRvX2NvcnJlbGF0aW9u ID0gIWFyZ3NbQVRUQVJHX0NPUlJFTEFUSU9OXS5pc251bGw7CisJYm9vbAkJZG9fbWNlbGVtID0g IWFyZ3NbQVRUQVJHX01PU1RfQ09NTU9OX0VMRU1TXS5pc251bGwgJiYKKwkJIWFyZ3NbQVRUQVJH X01PU1RfQ09NTU9OX0VMRU1fRlJFUVNdLmlzbnVsbDsKKwlib29sCQlkb19kZWNoaXN0ID0gIWFy Z3NbQVRUQVJHX0VMRU1fQ09VTlRfSElTVE9HUkFNXS5pc251bGw7CisJYm9vbAkJZG9fYm91bmRz X2hpc3RvZ3JhbSA9ICFhcmdzW0FUVEFSR19SQU5HRV9CT1VORFNfSElTVE9HUkFNXS5pc251bGw7 CisJYm9vbAkJZG9fcmFuZ2VfbGVuZ3RoX2hpc3RvZ3JhbSA9ICFhcmdzW0FUVEFSR19SQU5HRV9M RU5HVEhfSElTVE9HUkFNXS5pc251bGwgJiYKKwkJIWFyZ3NbQVRUQVJHX1JBTkdFX0VNUFRZX0ZS QUNdLmlzbnVsbDsKIAogCURhdHVtCQl2YWx1ZXNbTmF0dHNfcGdfc3RhdGlzdGljXSA9IHswfTsK IAlib29sCQludWxsc1tOYXR0c19wZ19zdGF0aXN0aWNdID0gezB9OwpAQCAtMTY4LDExICsxNjgs MTEgQEAgYXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZv KQogCiAJYm9vbAkJcmVzdWx0ID0gdHJ1ZTsKIAotCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhm Y2luZm8tPmFyZ3MsIGF0dGFyZ2luZm8sIEFUVEFSR19BVFRSRUxTQ0hFTUEpOwotCXN0YXRzX2No ZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8tPmFyZ3MsIGF0dGFyZ2luZm8sIEFUVEFSR19BVFRSRUxO QU1FKTsKKwlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoYXJncywgYXR0YXJnaW5mbywgQVRUQVJH X0FUVFJFTFNDSEVNQSk7CisJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGFyZ3MsIGF0dGFyZ2lu Zm8sIEFUVEFSR19BVFRSRUxOQU1FKTsKIAotCW5zcG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5n KFBHX0dFVEFSR19EQVRVTShBVFRBUkdfQVRUUkVMU0NIRU1BKSk7Ci0JcmVsbmFtZSA9IFRleHRE YXR1bUdldENTdHJpbmcoUEdfR0VUQVJHX0RBVFVNKEFUVEFSR19BVFRSRUxOQU1FKSk7CisJbnNw bmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoYXJnc1tBVFRBUkdfQVRUUkVMU0NIRU1BXS52YWx1 ZSk7CisJcmVsbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoYXJnc1tBVFRBUkdfQVRUUkVMTkFN RV0udmFsdWUpOwogCiAJaWYgKFJlY292ZXJ5SW5Qcm9ncmVzcygpKQogCQllcmVwb3J0KEVSUk9S LApAQCAtMTg2LDEzICsxODYsMTMgQEAgYXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0 aW9uQ2FsbEluZm8gZmNpbmZvKQogCQkJCQkJCQkJICBSYW5nZVZhckNhbGxiYWNrRm9yU3RhdHMs ICZsb2NrZWRfdGFibGUpOwogCiAJLyogdXNlciBjYW4gc3BlY2lmeSBlaXRoZXIgYXR0bmFtZSBv ciBhdHRudW0sIGJ1dCBub3QgYm90aCAqLwotCWlmICghUEdfQVJHSVNOVUxMKEFUVEFSR19BVFRO QU1FKSkKKwlpZiAoIWFyZ3NbQVRUQVJHX0FUVE5BTUVdLmlzbnVsbCkKIAl7Ci0JCWlmICghUEdf QVJHSVNOVUxMKEFUVEFSR19BVFROVU0pKQorCQlpZiAoIWFyZ3NbQVRUQVJHX0FUVE5VTV0uaXNu dWxsKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCiAJCQkJCSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5IGJvdGggXCIlc1wi IGFuZCBcIiVzXCIiLCAiYXR0bmFtZSIsICJhdHRudW0iKSkpOwotCQlhdHRuYW1lID0gVGV4dERh dHVtR2V0Q1N0cmluZyhQR19HRVRBUkdfREFUVU0oQVRUQVJHX0FUVE5BTUUpKTsKKwkJYXR0bmFt ZSA9IFRleHREYXR1bUdldENTdHJpbmcoYXJnc1tBVFRBUkdfQVRUTkFNRV0udmFsdWUpOwogCQlh dHRudW0gPSBnZXRfYXR0bnVtKHJlbG9pZCwgYXR0bmFtZSk7CiAJCS8qIG5vdGUgdGhhdCB0aGlz IHRlc3QgY292ZXJzIGF0dGlzZHJvcHBlZCBjYXNlcyB0b286ICovCiAJCWlmIChhdHRudW0gPT0g SW52YWxpZEF0dHJOdW1iZXIpCkBAIC0yMDEsOSArMjAxLDkgQEAgYXR0cmlidXRlX3N0YXRpc3Rp Y3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCQkJCQkgZXJybXNnKCJjb2x1bW4g XCIlc1wiIG9mIHJlbGF0aW9uIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsCiAJCQkJCQkJYXR0bmFt ZSwgcmVsbmFtZSkpKTsKIAl9Ci0JZWxzZSBpZiAoIVBHX0FSR0lTTlVMTChBVFRBUkdfQVRUTlVN KSkKKwllbHNlIGlmICghYXJnc1tBVFRBUkdfQVRUTlVNXS5pc251bGwpCiAJewotCQlhdHRudW0g PSBQR19HRVRBUkdfSU5UMTYoQVRUQVJHX0FUVE5VTSk7CisJCWF0dG51bSA9IERhdHVtR2V0SW50 MTYoYXJnc1tBVFRBUkdfQVRUTlVNXS52YWx1ZSk7CiAJCWF0dG5hbWUgPSBnZXRfYXR0bmFtZShy ZWxvaWQsIGF0dG51bSwgdHJ1ZSk7CiAJCS8qIGFubm95aW5nbHksIGdldF9hdHRuYW1lIGRvZXNu J3QgY2hlY2sgYXR0aXNkcm9wcGVkICovCiAJCWlmIChhdHRuYW1lID09IE5VTEwgfHwKQEAgLTIy OCwzOSArMjI4LDM5IEBAIGF0dHJpYnV0ZV9zdGF0aXN0aWNzX3VwZGF0ZShGdW5jdGlvbkNhbGxJ bmZvIGZjaW5mbykKIAkJCQkgZXJybXNnKCJjYW5ub3QgbW9kaWZ5IHN0YXRpc3RpY3Mgb24gc3lz dGVtIGNvbHVtbiBcIiVzXCIiLAogCQkJCQkJYXR0bmFtZSkpKTsKIAotCXN0YXRzX2NoZWNrX3Jl cXVpcmVkX2FyZyhmY2luZm8tPmFyZ3MsIGF0dGFyZ2luZm8sIEFUVEFSR19JTkhFUklURUQpOwot CWluaGVyaXRlZCA9IFBHX0dFVEFSR19CT09MKEFUVEFSR19JTkhFUklURUQpOworCXN0YXRzX2No ZWNrX3JlcXVpcmVkX2FyZyhhcmdzLCBhdHRhcmdpbmZvLCBBVFRBUkdfSU5IRVJJVEVEKTsKKwlp bmhlcml0ZWQgPSBEYXR1bUdldEJvb2woYXJnc1tBVFRBUkdfSU5IRVJJVEVEXS52YWx1ZSk7CiAK IAkvKgogCSAqIENoZWNrIGFyZ3VtZW50IHNhbml0eS4gSWYgc29tZSBhcmd1bWVudHMgYXJlIHVu dXNhYmxlLCBlbWl0IGEgV0FSTklORwogCSAqIGFuZCBzZXQgdGhlIGNvcnJlc3BvbmRpbmcgYXJn dW1lbnQgdG8gTlVMTCBpbiBmY2luZm8uCiAJICovCiAKLQlpZiAoIXN0YXRzX2NoZWNrX2FyZ19h cnJheShmY2luZm8tPmFyZ3MsIGF0dGFyZ2luZm8sIEFUVEFSR19NT1NUX0NPTU1PTl9GUkVRUykp CisJaWYgKCFzdGF0c19jaGVja19hcmdfYXJyYXkoYXJncywgYXR0YXJnaW5mbywgQVRUQVJHX01P U1RfQ09NTU9OX0ZSRVFTKSkKIAl7CiAJCWRvX21jdiA9IGZhbHNlOwogCQlyZXN1bHQgPSBmYWxz ZTsKIAl9CiAKLQlpZiAoIXN0YXRzX2NoZWNrX2FyZ19hcnJheShmY2luZm8tPmFyZ3MsIGF0dGFy Z2luZm8sIEFUVEFSR19NT1NUX0NPTU1PTl9FTEVNX0ZSRVFTKSkKKwlpZiAoIXN0YXRzX2NoZWNr X2FyZ19hcnJheShhcmdzLCBhdHRhcmdpbmZvLCBBVFRBUkdfTU9TVF9DT01NT05fRUxFTV9GUkVR UykpCiAJewogCQlkb19tY2VsZW0gPSBmYWxzZTsKIAkJcmVzdWx0ID0gZmFsc2U7CiAJfQotCWlm ICghc3RhdHNfY2hlY2tfYXJnX2FycmF5KGZjaW5mby0+YXJncywgYXR0YXJnaW5mbywgQVRUQVJH X0VMRU1fQ09VTlRfSElTVE9HUkFNKSkKKwlpZiAoIXN0YXRzX2NoZWNrX2FyZ19hcnJheShhcmdz LCBhdHRhcmdpbmZvLCBBVFRBUkdfRUxFTV9DT1VOVF9ISVNUT0dSQU0pKQogCXsKIAkJZG9fZGVj aGlzdCA9IGZhbHNlOwogCQlyZXN1bHQgPSBmYWxzZTsKIAl9CiAKLQlpZiAoIXN0YXRzX2NoZWNr X2FyZ19wYWlyKGZjaW5mby0+YXJncywgYXR0YXJnaW5mbywKKwlpZiAoIXN0YXRzX2NoZWNrX2Fy Z19wYWlyKGFyZ3MsIGF0dGFyZ2luZm8sCiAJCQkJCQkJICBBVFRBUkdfTU9TVF9DT01NT05fVkFM UywgQVRUQVJHX01PU1RfQ09NTU9OX0ZSRVFTKSkKIAl7CiAJCWRvX21jdiA9IGZhbHNlOwogCQly ZXN1bHQgPSBmYWxzZTsKIAl9CiAKLQlpZiAoIXN0YXRzX2NoZWNrX2FyZ19wYWlyKGZjaW5mby0+ YXJncywgYXR0YXJnaW5mbywKKwlpZiAoIXN0YXRzX2NoZWNrX2FyZ19wYWlyKGFyZ3MsIGF0dGFy Z2luZm8sCiAJCQkJCQkJICBBVFRBUkdfTU9TVF9DT01NT05fRUxFTVMsCiAJCQkJCQkJICBBVFRB UkdfTU9TVF9DT01NT05fRUxFTV9GUkVRUykpCiAJewpAQCAtMjY4LDcgKzI2OCw3IEBAIGF0dHJp YnV0ZV9zdGF0aXN0aWNzX3VwZGF0ZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAkJcmVzdWx0 ID0gZmFsc2U7CiAJfQogCi0JaWYgKCFzdGF0c19jaGVja19hcmdfcGFpcihmY2luZm8tPmFyZ3Ms IGF0dGFyZ2luZm8sCisJaWYgKCFzdGF0c19jaGVja19hcmdfcGFpcihhcmdzLCBhdHRhcmdpbmZv LAogCQkJCQkJCSAgQVRUQVJHX1JBTkdFX0xFTkdUSF9ISVNUT0dSQU0sCiAJCQkJCQkJICBBVFRB UkdfUkFOR0VfRU1QVFlfRlJBQykpCiAJewpAQCAtMzQ0LDE5ICszNDQsMTkgQEAgYXR0cmlidXRl X3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCQkJCQkJCQkgcmVw bGFjZXMpOwogCiAJLyogaWYgc3BlY2lmaWVkLCBzZXQgdG8gYXJndW1lbnQgdmFsdWVzICovCi0J aWYgKCFQR19BUkdJU05VTEwoQVRUQVJHX05VTExfRlJBQykpCisJaWYgKCFhcmdzW0FUVEFSR19O VUxMX0ZSQUNdLmlzbnVsbCkKIAl7Ci0JCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFudWxs ZnJhYyAtIDFdID0gUEdfR0VUQVJHX0RBVFVNKEFUVEFSR19OVUxMX0ZSQUMpOworCQl2YWx1ZXNb QW51bV9wZ19zdGF0aXN0aWNfc3RhbnVsbGZyYWMgLSAxXSA9IGFyZ3NbQVRUQVJHX05VTExfRlJB Q10udmFsdWU7CiAJCXJlcGxhY2VzW0FudW1fcGdfc3RhdGlzdGljX3N0YW51bGxmcmFjIC0gMV0g PSB0cnVlOwogCX0KLQlpZiAoIVBHX0FSR0lTTlVMTChBVFRBUkdfQVZHX1dJRFRIKSkKKwlpZiAo IWFyZ3NbQVRUQVJHX0FWR19XSURUSF0uaXNudWxsKQogCXsKLQkJdmFsdWVzW0FudW1fcGdfc3Rh dGlzdGljX3N0YXdpZHRoIC0gMV0gPSBQR19HRVRBUkdfREFUVU0oQVRUQVJHX0FWR19XSURUSCk7 CisJCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGF3aWR0aCAtIDFdID0gYXJnc1tBVFRBUkdf QVZHX1dJRFRIXS52YWx1ZTsKIAkJcmVwbGFjZXNbQW51bV9wZ19zdGF0aXN0aWNfc3Rhd2lkdGgg LSAxXSA9IHRydWU7CiAJfQotCWlmICghUEdfQVJHSVNOVUxMKEFUVEFSR19OX0RJU1RJTkNUKSkK KwlpZiAoIWFyZ3NbQVRUQVJHX05fRElTVElOQ1RdLmlzbnVsbCkKIAl7Ci0JCXZhbHVlc1tBbnVt X3BnX3N0YXRpc3RpY19zdGFkaXN0aW5jdCAtIDFdID0gUEdfR0VUQVJHX0RBVFVNKEFUVEFSR19O X0RJU1RJTkNUKTsKKwkJdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YWRpc3RpbmN0IC0gMV0g PSBhcmdzW0FUVEFSR19OX0RJU1RJTkNUXS52YWx1ZTsKIAkJcmVwbGFjZXNbQW51bV9wZ19zdGF0 aXN0aWNfc3RhZGlzdGluY3QgLSAxXSA9IHRydWU7CiAJfQogCkBAIC0zNjQsMTAgKzM2NCwxMCBA QCBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJ aWYgKGRvX21jdikKIAl7CiAJCWJvb2wJCWNvbnZlcnRlZDsKLQkJRGF0dW0JCXN0YW51bWJlcnMg PSBQR19HRVRBUkdfREFUVU0oQVRUQVJHX01PU1RfQ09NTU9OX0ZSRVFTKTsKKwkJRGF0dW0JCXN0 YW51bWJlcnMgPSBhcmdzW0FUVEFSR19NT1NUX0NPTU1PTl9GUkVRU10udmFsdWU7CiAJCURhdHVt CQlzdGF2YWx1ZXMgPSBzdGF0YXR0X2J1aWxkX3N0YXZhbHVlcygibW9zdF9jb21tb25fdmFscyIs CiAJCQkJCQkJCQkJCQkJCSZhcnJheV9pbl9mbiwKLQkJCQkJCQkJCQkJCQkJUEdfR0VUQVJHX0RB VFVNKEFUVEFSR19NT1NUX0NPTU1PTl9WQUxTKSwKKwkJCQkJCQkJCQkJCQkJYXJnc1tBVFRBUkdf TU9TVF9DT01NT05fVkFMU10udmFsdWUsCiAJCQkJCQkJCQkJCQkJCWF0dHR5cGlkLCBhdHR0eXBt b2QsCiAJCQkJCQkJCQkJCQkJCSZjb252ZXJ0ZWQpOwogCkBAIC00MDcsNyArNDA3LDcgQEAgYXR0 cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCiAJCXN0 YXZhbHVlcyA9IHN0YXRhdHRfYnVpbGRfc3RhdmFsdWVzKCJoaXN0b2dyYW1fYm91bmRzIiwKIAkJ CQkJCQkJCQkJJmFycmF5X2luX2ZuLAotCQkJCQkJCQkJCQlQR19HRVRBUkdfREFUVU0oQVRUQVJH X0hJU1RPR1JBTV9CT1VORFMpLAorCQkJCQkJCQkJCQlhcmdzW0FUVEFSR19ISVNUT0dSQU1fQk9V TkRTXS52YWx1ZSwKIAkJCQkJCQkJCQkJYXR0dHlwaWQsIGF0dHR5cG1vZCwKIAkJCQkJCQkJCQkJ JmNvbnZlcnRlZCk7CiAKQEAgLTQyNSw3ICs0MjUsNyBAQCBhdHRyaWJ1dGVfc3RhdGlzdGljc191 cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJLyogU1RBVElTVElDX0tJTkRfQ09SUkVM QVRJT04gKi8KIAlpZiAoZG9fY29ycmVsYXRpb24pCiAJewotCQlEYXR1bQkJZWxlbXNbXSA9IHtQ R19HRVRBUkdfREFUVU0oQVRUQVJHX0NPUlJFTEFUSU9OKX07CisJCURhdHVtCQllbGVtc1tdID0g e2FyZ3NbQVRUQVJHX0NPUlJFTEFUSU9OXS52YWx1ZX07CiAJCUFycmF5VHlwZSAgKmFycnkgPSBj b25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihlbGVtcywgMSwgRkxPQVQ0T0lEKTsKIAkJRGF0dW0JCXN0 YW51bWJlcnMgPSBQb2ludGVyR2V0RGF0dW0oYXJyeSk7CiAKQEAgLTQzOCwxMyArNDM4LDEzIEBA IGF0dHJpYnV0ZV9zdGF0aXN0aWNzX3VwZGF0ZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAkv KiBTVEFUSVNUSUNfS0lORF9NQ0VMRU0gKi8KIAlpZiAoZG9fbWNlbGVtKQogCXsKLQkJRGF0dW0J CXN0YW51bWJlcnMgPSBQR19HRVRBUkdfREFUVU0oQVRUQVJHX01PU1RfQ09NTU9OX0VMRU1fRlJF UVMpOworCQlEYXR1bQkJc3RhbnVtYmVycyA9IGFyZ3NbQVRUQVJHX01PU1RfQ09NTU9OX0VMRU1f RlJFUVNdLnZhbHVlOwogCQlib29sCQljb252ZXJ0ZWQgPSBmYWxzZTsKIAkJRGF0dW0JCXN0YXZh bHVlczsKIAogCQlzdGF2YWx1ZXMgPSBzdGF0YXR0X2J1aWxkX3N0YXZhbHVlcygibW9zdF9jb21t b25fZWxlbXMiLAogCQkJCQkJCQkJCQkmYXJyYXlfaW5fZm4sCi0JCQkJCQkJCQkJCVBHX0dFVEFS R19EQVRVTShBVFRBUkdfTU9TVF9DT01NT05fRUxFTVMpLAorCQkJCQkJCQkJCQlhcmdzW0FUVEFS R19NT1NUX0NPTU1PTl9FTEVNU10udmFsdWUsCiAJCQkJCQkJCQkJCWVsZW10eXBpZCwgYXR0dHlw bW9kLAogCQkJCQkJCQkJCQkmY29udmVydGVkKTsKIApAQCAtNDYyLDcgKzQ2Miw3IEBAIGF0dHJp YnV0ZV9zdGF0aXN0aWNzX3VwZGF0ZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAkvKiBTVEFU SVNUSUNfS0lORF9ERUNISVNUICovCiAJaWYgKGRvX2RlY2hpc3QpCiAJewotCQlEYXR1bQkJc3Rh bnVtYmVycyA9IFBHX0dFVEFSR19EQVRVTShBVFRBUkdfRUxFTV9DT1VOVF9ISVNUT0dSQU0pOwor CQlEYXR1bQkJc3RhbnVtYmVycyA9IGFyZ3NbQVRUQVJHX0VMRU1fQ09VTlRfSElTVE9HUkFNXS52 YWx1ZTsKIAogCQlzdGF0YXR0X3NldF9zbG90KHZhbHVlcywgbnVsbHMsIHJlcGxhY2VzLAogCQkJ CQkJIFNUQVRJU1RJQ19LSU5EX0RFQ0hJU1QsCkBAIC00ODQsNyArNDg0LDcgQEAgYXR0cmlidXRl X3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCiAJCXN0YXZhbHVl cyA9IHN0YXRhdHRfYnVpbGRfc3RhdmFsdWVzKCJyYW5nZV9ib3VuZHNfaGlzdG9ncmFtIiwKIAkJ CQkJCQkJCQkJJmFycmF5X2luX2ZuLAotCQkJCQkJCQkJCQlQR19HRVRBUkdfREFUVU0oQVRUQVJH X1JBTkdFX0JPVU5EU19ISVNUT0dSQU0pLAorCQkJCQkJCQkJCQlhcmdzW0FUVEFSR19SQU5HRV9C T1VORFNfSElTVE9HUkFNXS52YWx1ZSwKIAkJCQkJCQkJCQkJYXR0dHlwaWQsIGF0dHR5cG1vZCwK IAkJCQkJCQkJCQkJJmNvbnZlcnRlZCk7CiAKQEAgLTUwMyw3ICs1MDMsNyBAQCBhdHRyaWJ1dGVf c3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJaWYgKGRvX3Jhbmdl X2xlbmd0aF9oaXN0b2dyYW0pCiAJewogCQkvKiBUaGUgYW55YXJyYXkgaXMgYWx3YXlzIGEgZmxv YXQ4W10gZm9yIHRoaXMgc3Rha2luZCAqLwotCQlEYXR1bQkJZWxlbXNbXSA9IHtQR19HRVRBUkdf REFUVU0oQVRUQVJHX1JBTkdFX0VNUFRZX0ZSQUMpfTsKKwkJRGF0dW0JCWVsZW1zW10gPSB7YXJn c1tBVFRBUkdfUkFOR0VfRU1QVFlfRlJBQ10udmFsdWV9OwogCQlBcnJheVR5cGUgICphcnJ5ID0g Y29uc3RydWN0X2FycmF5X2J1aWx0aW4oZWxlbXMsIDEsIEZMT0FUNE9JRCk7CiAJCURhdHVtCQlz dGFudW1iZXJzID0gUG9pbnRlckdldERhdHVtKGFycnkpOwogCkBAIC01MTIsNyArNTEyLDcgQEAg YXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCiAJ CXN0YXZhbHVlcyA9IHN0YXRhdHRfYnVpbGRfc3RhdmFsdWVzKCJyYW5nZV9sZW5ndGhfaGlzdG9n cmFtIiwKIAkJCQkJCQkJCQkJJmFycmF5X2luX2ZuLAotCQkJCQkJCQkJCQlQR19HRVRBUkdfREFU VU0oQVRUQVJHX1JBTkdFX0xFTkdUSF9ISVNUT0dSQU0pLAorCQkJCQkJCQkJCQlhcmdzW0FUVEFS R19SQU5HRV9MRU5HVEhfSElTVE9HUkFNXS52YWx1ZSwKIAkJCQkJCQkJCQkJRkxPQVQ4T0lELCAw LCAmY29udmVydGVkKTsKIAogCQlpZiAoY29udmVydGVkKQpAQCAtNjgzLDcgKzY4Myw3IEBAIHBn X3Jlc3RvcmVfYXR0cmlidXRlX3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQkJCQkJICBh dHRhcmdpbmZvKSkKIAkJcmVzdWx0ID0gZmFsc2U7CiAKLQlpZiAoIWF0dHJpYnV0ZV9zdGF0aXN0 aWNzX3VwZGF0ZShwb3NpdGlvbmFsX2ZjaW5mbykpCisJaWYgKCFhdHRyaWJ1dGVfc3RhdGlzdGlj c191cGRhdGUocG9zaXRpb25hbF9mY2luZm8tPmFyZ3MpKQogCQlyZXN1bHQgPSBmYWxzZTsKIAog CVBHX1JFVFVSTl9CT09MKHJlc3VsdCk7Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --000000000000e977f10655600bcf Content-Type: application/octet-stream; name="v2-0008-Change-stats_fill_fcinfo_from_arg_pairs-to-Nullab.patch" Content-Disposition: attachment; filename="v2-0008-Change-stats_fill_fcinfo_from_arg_pairs-to-Nullab.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqyw9g727 RnJvbSAzZTUwN2EyZmYyNjc1NzMyMTI2YTY2OWUzNzAzMjhkNWEwZDEyOTZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogU3VuLCAyOCBKdW4gMjAyNiAxNzoyMTo1MSAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djIgMDgvMTNdIENoYW5nZSBzdGF0c19maWxsX2ZjaW5mb19mcm9tX2FyZ19wYWlycyB0bwogTnVs bGFibGVEYXR1bSBhcnJheS4KCkNoYW5nZSBzdGF0c19maWxsX2ZjaW5mb19mcm9tX2FyZ19wYWly cyB0byBOdWxsYWJsZURhdHVtIGFycmF5LCBhbmQgaW4KZG9pbmcgc28gcmVuYW1lIHRvIHN0YXRz X2ZpbGxfYXJnc19mcm9tX2FyZ19wYWlycy4gQ2hhbmdlIGFsbCBjYWxsZXJzIHRvCmluc3RlYWQg aW5pdGlhbGl6ZSBhbiBOdWxsYWJsZURhdHVtIGFycmF5IG9mIHRoZSBwcm9wZXIgc2l6ZSBpbnN0 ZWFkIG9mCmEgZnVsbCBGdW5jdGlvbkNhbGxJbmZvRGF0YSBzdHJ1Y3R1cmUuCi0tLQogc3JjL2Jh Y2tlbmQvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuYyAgICAgIHwgMTEgKysrKy0tLS0tCiBz cmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzX2Z1bmNzLmMgfCAgOSArKystLS0t CiBzcmMvYmFja2VuZC9zdGF0aXN0aWNzL3JlbGF0aW9uX3N0YXRzLmMgICAgICAgfCAxMiArKysr LS0tLS0tCiBzcmMvYmFja2VuZC9zdGF0aXN0aWNzL3N0YXRfdXRpbHMuYyAgICAgICAgICAgfCAy NCArKysrKysrKystLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRfdXRpbHMu aCAgICAgICAgICAgfCAgNiArKy0tLQogNSBmaWxlcyBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCsp LCAzNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2F0 dHJpYnV0ZV9zdGF0cy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMu YwppbmRleCBhODQ3ZDA1M2VlNC4uMjYwZTViYjFkNDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGlj cy9hdHRyaWJ1dGVfc3RhdHMuYwpAQCAtNjczLDE3ICs2NzMsMTQgQEAgcGdfY2xlYXJfYXR0cmli dXRlX3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCiBEYXR1bQogcGdfcmVzdG9yZV9hdHRyaWJ1dGVf c3RhdHMoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlMT0NBTF9GQ0lORk8ocG9zaXRpb25hbF9mY2lu Zm8sIEFUVEFSR19OVU1fQVRUQVJHUyk7CisJTnVsbGFibGVEYXR1bSBwb3NpdGlvbmFsX2FyZ3Nb QVRUQVJHX05VTV9BVFRBUkdTXTsKIAlib29sCQlyZXN1bHQgPSB0cnVlOwogCi0JSW5pdEZ1bmN0 aW9uQ2FsbEluZm9EYXRhKCpwb3NpdGlvbmFsX2ZjaW5mbywgTlVMTCwgQVRUQVJHX05VTV9BVFRB UkdTLAotCQkJCQkJCSBJbnZhbGlkT2lkLCBOVUxMLCBOVUxMKTsKLQotCWlmICghc3RhdHNfZmls bF9mY2luZm9fZnJvbV9hcmdfcGFpcnMoZmNpbmZvLCBwb3NpdGlvbmFsX2ZjaW5mbywKLQkJCQkJ CQkJCQkgIGF0dGFyZ2luZm8pKQorCWlmICghc3RhdHNfZmlsbF9hcmdzX2Zyb21fYXJnX3BhaXJz KGZjaW5mbywgcG9zaXRpb25hbF9hcmdzLAorCQkJCQkJCQkJCWF0dGFyZ2luZm8pKQogCQlyZXN1 bHQgPSBmYWxzZTsKIAotCWlmICghYXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlKHBvc2l0aW9u YWxfZmNpbmZvLT5hcmdzKSkKKwlpZiAoIWF0dHJpYnV0ZV9zdGF0aXN0aWNzX3VwZGF0ZShwb3Np dGlvbmFsX2FyZ3MpKQogCQlyZXN1bHQgPSBmYWxzZTsKIAogCVBHX1JFVFVSTl9CT09MKHJlc3Vs dCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzX2Z1 bmNzLmMgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzX2Z1bmNzLmMKaW5k ZXggNWU0NmE3ZTk2NzguLmM4MDdjMTBkYmZlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdGF0 aXN0aWNzL2V4dGVuZGVkX3N0YXRzX2Z1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGlj cy9leHRlbmRlZF9zdGF0c19mdW5jcy5jCkBAIC0xNzM1LDE2ICsxNzM1LDEzIEBAIGRlbGV0ZV9w Z19zdGF0aXN0aWNfZXh0X2RhdGEoT2lkIHN0eG9pZCwgYm9vbCBpbmhlcml0ZWQpCiBEYXR1bQog cGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQogewotCUxPQ0FMX0ZD SU5GTyhwb3NpdGlvbmFsX2ZjaW5mbywgRVhUQVJHX05VTV9FWFRBUkdTKTsKKwlOdWxsYWJsZURh dHVtIHBvc2l0aW9uYWxfYXJnc1tFWFRBUkdfTlVNX0VYVEFSR1NdOwogCWJvb2wJCXJlc3VsdCA9 IHRydWU7CiAKLQlJbml0RnVuY3Rpb25DYWxsSW5mb0RhdGEoKnBvc2l0aW9uYWxfZmNpbmZvLCBO VUxMLCBFWFRBUkdfTlVNX0VYVEFSR1MsCi0JCQkJCQkJIEludmFsaWRPaWQsIE5VTEwsIE5VTEwp OwotCi0JaWYgKCFzdGF0c19maWxsX2ZjaW5mb19mcm9tX2FyZ19wYWlycyhmY2luZm8sIHBvc2l0 aW9uYWxfZmNpbmZvLCBleHRhcmdpbmZvKSkKKwlpZiAoIXN0YXRzX2ZpbGxfYXJnc19mcm9tX2Fy Z19wYWlycyhmY2luZm8sIHBvc2l0aW9uYWxfYXJncywgZXh0YXJnaW5mbykpCiAJCXJlc3VsdCA9 IGZhbHNlOwogCi0JaWYgKCFleHRlbmRlZF9zdGF0aXN0aWNzX3VwZGF0ZShwb3NpdGlvbmFsX2Zj aW5mby0+YXJncykpCisJaWYgKCFleHRlbmRlZF9zdGF0aXN0aWNzX3VwZGF0ZShwb3NpdGlvbmFs X2FyZ3MpKQogCQlyZXN1bHQgPSBmYWxzZTsKIAogCVBHX1JFVFVSTl9CT09MKHJlc3VsdCk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL3JlbGF0aW9uX3N0YXRzLmMgYi9zcmMv YmFja2VuZC9zdGF0aXN0aWNzL3JlbGF0aW9uX3N0YXRzLmMKaW5kZXggMWVlMjM2MTJhZTEuLjIx M2Y5MjRhNDRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL3JlbGF0aW9uX3N0 YXRzLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5jCkBAIC0y MjUsMTggKzIyNSwxNCBAQCBwZ19jbGVhcl9yZWxhdGlvbl9zdGF0cyhQR19GVU5DVElPTl9BUkdT KQogRGF0dW0KIHBnX3Jlc3RvcmVfcmVsYXRpb25fc3RhdHMoUEdfRlVOQ1RJT05fQVJHUykKIHsK LQlMT0NBTF9GQ0lORk8ocG9zaXRpb25hbF9mY2luZm8sIFJFTEFSR19OVU1fUkVMQVJHUyk7CisJ TnVsbGFibGVEYXR1bSBwb3NpdGlvbmFsX2FyZ3NbUkVMQVJHX05VTV9SRUxBUkdTXTsKIAlib29s CQlyZXN1bHQgPSB0cnVlOwogCi0JSW5pdEZ1bmN0aW9uQ2FsbEluZm9EYXRhKCpwb3NpdGlvbmFs X2ZjaW5mbywgTlVMTCwKLQkJCQkJCQkgUkVMQVJHX05VTV9SRUxBUkdTLAotCQkJCQkJCSBJbnZh bGlkT2lkLCBOVUxMLCBOVUxMKTsKLQotCWlmICghc3RhdHNfZmlsbF9mY2luZm9fZnJvbV9hcmdf cGFpcnMoZmNpbmZvLCBwb3NpdGlvbmFsX2ZjaW5mbywKLQkJCQkJCQkJCQkgIHJlbGFyZ2luZm8p KQorCWlmICghc3RhdHNfZmlsbF9hcmdzX2Zyb21fYXJnX3BhaXJzKGZjaW5mbywgcG9zaXRpb25h bF9hcmdzLAorCQkJCQkJCQkJCXJlbGFyZ2luZm8pKQogCQlyZXN1bHQgPSBmYWxzZTsKIAotCWlm ICghcmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUocG9zaXRpb25hbF9mY2luZm8tPmFyZ3MpKQor CWlmICghcmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUocG9zaXRpb25hbF9hcmdzKSkKIAkJcmVz dWx0ID0gZmFsc2U7CiAKIAlQR19SRVRVUk5fQk9PTChyZXN1bHQpOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RhdGlzdGljcy9zdGF0X3V0aWxzLmMgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNz L3N0YXRfdXRpbHMuYwppbmRleCAyNGIzODQ5ZmI4Yi4uMjJmODhkMjgzMGYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3N0YXRpc3RpY3Mvc3RhdF91dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0 YXRpc3RpY3Mvc3RhdF91dGlscy5jCkBAIC0zMzksMTcgKzMzOSwxNyBAQCBzdGF0YXR0X2dldF9p bmRleF9leHByKFJlbGF0aW9uIHJlbCwgaW50IGF0dG51bSkKIAogLyoKICAqIFRyYW5zbGF0ZSB2 YXJpYWRpYyBhcmd1bWVudCBwYWlycyBmcm9tICdwYWlyc19mY2luZm8nIGludG8gYQotICogJ3Bv c2l0aW9uYWxfZmNpbmZvJyBhcHByb3ByaWF0ZSBmb3IgY2FsbGluZyByZWxhdGlvbl9zdGF0aXN0 aWNzX3VwZGF0ZSgpIG9yCi0gKiBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUoKSB3aXRoIHBv c2l0aW9uYWwgYXJndW1lbnRzLgorICogTnVsbGFibGVEYXR1bVtdIGFwcHJvcHJpYXRlIGZvciBj YWxsaW5nIHRoZSBpbnRlcm5hbCBzdGF0aXN0aWNzIHVwZGF0ZQorICogZnVuY3Rpb25zIGZvciBy ZWxhdGlvbiBzdGF0cywgYXR0cmlidXRlIHN0YXRzLCBvciBleHRlbmRlZCBzdGF0cy4KICAqCi0g KiBDYWxsZXIgc2hvdWxkIGhhdmUgYWxyZWFkeSBpbml0aWFsaXplZCBwb3NpdGlvbmFsX2ZjaW5m byB3aXRoIGEgc2l6ZQotICogYXBwcm9wcmlhdGUgZm9yIGNhbGxpbmcgdGhlIGludGVuZGVkIHBv c2l0aW9uYWwgZnVuY3Rpb24sIGFuZCBhcmdpbmZvCi0gKiBzaG91bGQgYWxzbyBtYXRjaCB0aGUg aW50ZW5kZWQgcG9zaXRpb25hbCBmdW5jdGlvbi4KKyAqIENhbGxlciBzaG91bGQgaGF2ZSBhbHJl YWR5IGluaXRpYWxpemVkIGFyZ3Mgd2l0aCBhIHNpemUgYXBwcm9wcmlhdGUgZm9yCisgKiBjYWxs aW5nIHRoZSBpbnRlbmRlZCBmdW5jdGlvbiwgYW5kIGFyZ2luZm8gc2hvdWxkIGFsc28gbWF0Y2gg dGhlIGludGVuZGVkCisgKiBmdW5jdGlvbi4KICAqLwogYm9vbAotc3RhdHNfZmlsbF9mY2luZm9f ZnJvbV9hcmdfcGFpcnMoRnVuY3Rpb25DYWxsSW5mbyBwYWlyc19mY2luZm8sCi0JCQkJCQkJCSBG dW5jdGlvbkNhbGxJbmZvIHBvc2l0aW9uYWxfZmNpbmZvLAotCQkJCQkJCQkgc3RydWN0IFN0YXRz QXJnSW5mbyAqYXJnaW5mbykKK3N0YXRzX2ZpbGxfYXJnc19mcm9tX2FyZ19wYWlycyhGdW5jdGlv bkNhbGxJbmZvIHBhaXJzX2ZjaW5mbywKKwkJCQkJCQkgICBOdWxsYWJsZURhdHVtICpwb3NpdGlv bmFsX2FyZ3MsCisJCQkJCQkJICAgc3RydWN0IFN0YXRzQXJnSW5mbyAqYXJnaW5mbykKIHsKIAlE YXR1bQkgICAqYXJnczsKIAlib29sCSAgICphcmdudWxsczsKQEAgLTM2MCw4ICszNjAsOCBAQCBz dGF0c19maWxsX2ZjaW5mb19mcm9tX2FyZ19wYWlycyhGdW5jdGlvbkNhbGxJbmZvIHBhaXJzX2Zj aW5mbywKIAkvKiBjbGVhciBwb3NpdGlvbmFsIGFyZ3MgKi8KIAlmb3IgKGludCBpID0gMDsgYXJn aW5mb1tpXS5hcmduYW1lICE9IE5VTEw7IGkrKykKIAl7Ci0JCXBvc2l0aW9uYWxfZmNpbmZvLT5h cmdzW2ldLnZhbHVlID0gKERhdHVtKSAwOwotCQlwb3NpdGlvbmFsX2ZjaW5mby0+YXJnc1tpXS5p c251bGwgPSB0cnVlOworCQlwb3NpdGlvbmFsX2FyZ3NbaV0udmFsdWUgPSAoRGF0dW0pIDA7CisJ CXBvc2l0aW9uYWxfYXJnc1tpXS5pc251bGwgPSB0cnVlOwogCX0KIAogCW5hcmdzID0gZXh0cmFj dF92YXJpYWRpY19hcmdzKHBhaXJzX2ZjaW5mbywgMCwgdHJ1ZSwKQEAgLTQxNiw4ICs0MTYsOCBA QCBzdGF0c19maWxsX2ZjaW5mb19mcm9tX2FyZ19wYWlycyhGdW5jdGlvbkNhbGxJbmZvIHBhaXJz X2ZjaW5mbywKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJcG9zaXRpb25hbF9mY2luZm8tPmFyZ3Nb YXJnbnVtXS52YWx1ZSA9IGFyZ3NbaSArIDFdOwotCQlwb3NpdGlvbmFsX2ZjaW5mby0+YXJnc1th cmdudW1dLmlzbnVsbCA9IGZhbHNlOworCQlwb3NpdGlvbmFsX2FyZ3NbYXJnbnVtXS52YWx1ZSA9 IGFyZ3NbaSArIDFdOworCQlwb3NpdGlvbmFsX2FyZ3NbYXJnbnVtXS5pc251bGwgPSBmYWxzZTsK IAl9CiAKIAlyZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RhdGlzdGlj cy9zdGF0X3V0aWxzLmggYi9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRfdXRpbHMuaAppbmRl eCA0MTQ2MzZjMWNkMi4uODExZGIzYTc5ZWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0YXRp c3RpY3Mvc3RhdF91dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0YXRpc3RpY3Mvc3RhdF91dGls cy5oCkBAIC0zOCw5ICszOCw5IEBAIGV4dGVybiBib29sIHN0YXRzX2NoZWNrX2FyZ19wYWlyKGNv bnN0IE51bGxhYmxlRGF0dW0gKmFyZ3MsCiBleHRlcm4gdm9pZCBSYW5nZVZhckNhbGxiYWNrRm9y U3RhdHMoY29uc3QgUmFuZ2VWYXIgKnJlbGF0aW9uLAogCQkJCQkJCQkJIE9pZCByZWxJZCwgT2lk IG9sZFJlbElkLCB2b2lkICphcmcpOwogCi1leHRlcm4gYm9vbCBzdGF0c19maWxsX2ZjaW5mb19m cm9tX2FyZ19wYWlycyhGdW5jdGlvbkNhbGxJbmZvIHBhaXJzX2ZjaW5mbywKLQkJCQkJCQkJCQkJ IEZ1bmN0aW9uQ2FsbEluZm8gcG9zaXRpb25hbF9mY2luZm8sCi0JCQkJCQkJCQkJCSBzdHJ1Y3Qg U3RhdHNBcmdJbmZvICphcmdpbmZvKTsKK2V4dGVybiBib29sIHN0YXRzX2ZpbGxfYXJnc19mcm9t X2FyZ19wYWlycyhGdW5jdGlvbkNhbGxJbmZvIHBhaXJzX2ZjaW5mbywKKwkJCQkJCQkJCQkgICBO dWxsYWJsZURhdHVtICpwb3NpdGlvbmFsX2FyZ3MsCisJCQkJCQkJCQkJICAgc3RydWN0IFN0YXRz QXJnSW5mbyAqYXJnaW5mbyk7CiAKIGV4dGVybiB2b2lkIHN0YXRhdHRfZ2V0X3R5cGUoT2lkIHJl bG9pZCwgQXR0ck51bWJlciBhdHRudW0sCiAJCQkJCQkJIE9pZCAqYXR0dHlwaWQsIGludDMyICph dHR0eXBtb2QsCi0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --000000000000e977f10655600bcf Content-Type: application/octet-stream; name="v2-0007-Make-extended_statistics_update-stop-using-fcinfo.patch" Content-Disposition: attachment; filename="v2-0007-Make-extended_statistics_update-stop-using-fcinfo.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqyw9g706 RnJvbSAyZTBhYzM0ZmIzMGJjMDEwNDBjYWVjYTkzMjM3MTM2NzliOWE2OTk1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogU3VuLCAyOCBKdW4gMjAyNiAxNjo1MzoxOSAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djIgMDcvMTNdIE1ha2UgZXh0ZW5kZWRfc3RhdGlzdGljc191cGRhdGUgc3RvcCB1c2luZyBmY2lu Zm8uCgpDaGFuZ2UgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBvZiBleHRlbmRlZF9zdGF0aXN0aWNz X3VwZGF0ZSB0byB1c2UgYQpOdWxsYWJsZURhdHVtIGFycmF5IGluc3RlYWQgb2YgYSBmdWxsIEZ1 bmN0aW9uQ2FsbEluZm8uCi0tLQogc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0 c19mdW5jcy5jIHwgNjIgKysrKysrKysrLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDMxIGlu c2VydGlvbnMoKyksIDMxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHNfZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3Mv ZXh0ZW5kZWRfc3RhdHNfZnVuY3MuYwppbmRleCBmOWExZDI4N2UyMi4uNWU0NmE3ZTk2NzggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHNfZnVuY3MuYwor KysgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzX2Z1bmNzLmMKQEAgLTEy MSw3ICsxMjEsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqZXh0ZXhwcmFyZ25hbWVbRVhQUkVMRU1f TlVNX0VYUFJFTEVNU10gPQogCSJyYW5nZV9ib3VuZHNfaGlzdG9ncmFtIgogfTsKIAotc3RhdGlj IGJvb2wgZXh0ZW5kZWRfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8p Oworc3RhdGljIGJvb2wgZXh0ZW5kZWRfc3RhdGlzdGljc191cGRhdGUoY29uc3QgTnVsbGFibGVE YXR1bSAqYXJncyk7CiAKIHN0YXRpYyBIZWFwVHVwbGUgZ2V0X3BnX3N0YXRpc3RpY19leHQoUmVs YXRpb24gcGdfc3RleHQsIE9pZCBuc3BvaWQsCiAJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnN0eG5h bWUpOwpAQCAtMzExLDcgKzMxMSw3IEBAIHVwc2VydF9wZ19zdGF0aXN0aWNfZXh0X2RhdGEoY29u c3QgRGF0dW0gKnZhbHVlcywgY29uc3QgYm9vbCAqbnVsbHMsCiAgKiBiZSB1cGRhdGVkLgogICov CiBzdGF0aWMgYm9vbAotZXh0ZW5kZWRfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5m byBmY2luZm8pCitleHRlbmRlZF9zdGF0aXN0aWNzX3VwZGF0ZShjb25zdCBOdWxsYWJsZURhdHVt ICphcmdzKQogewogCWNoYXIJICAgKnJlbG5zcG5hbWU7CiAJY2hhcgkgICAqcmVsbmFtZTsKQEAg LTM1NiwxMiArMzU2LDEyIEBAIGV4dGVuZGVkX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2Fs bEluZm8gZmNpbmZvKQogCSAqIFRoZXJlZm9yZSwgbm9uZSBvZiB0aGUgdGhyZWUgYXJyYXkgdmFs dWVzIGlzIG1lYW5pbmdmdWwgdW5sZXNzIHRoZQogCSAqIG90aGVyIHR3byBhcmUgYWxzbyBwcmVz ZW50IGFuZCBpbiBzeW5jIGluIHRlcm1zIG9mIGFycmF5IGxlbmd0aC4KIAkgKi8KLQloYXMubWN2 ID0gKCFQR19BUkdJU05VTEwoRVhUQVJHX01PU1RfQ09NTU9OX1ZBTFMpICYmCi0JCQkgICAhUEdf QVJHSVNOVUxMKEVYVEFSR19NT1NUX0NPTU1PTl9GUkVRUykgJiYKLQkJCSAgICFQR19BUkdJU05V TEwoRVhUQVJHX01PU1RfQ09NTU9OX0JBU0VfRlJFUVMpKTsKLQloYXMubmRpc3RpbmN0ID0gIVBH X0FSR0lTTlVMTChFWFRBUkdfTkRJU1RJTkNUKTsKLQloYXMuZGVwZW5kZW5jaWVzID0gIVBHX0FS R0lTTlVMTChFWFRBUkdfREVQRU5ERU5DSUVTKTsKLQloYXMuZXhwcmVzc2lvbnMgPSAhUEdfQVJH SVNOVUxMKEVYVEFSR19FWFBSRVNTSU9OUyk7CisJaGFzLm1jdiA9ICghYXJnc1tFWFRBUkdfTU9T VF9DT01NT05fVkFMU10uaXNudWxsICYmCisJCQkgICAhYXJnc1tFWFRBUkdfTU9TVF9DT01NT05f RlJFUVNdLmlzbnVsbCAmJgorCQkJICAgIWFyZ3NbRVhUQVJHX01PU1RfQ09NTU9OX0JBU0VfRlJF UVNdLmlzbnVsbCk7CisJaGFzLm5kaXN0aW5jdCA9ICFhcmdzW0VYVEFSR19ORElTVElOQ1RdLmlz bnVsbDsKKwloYXMuZGVwZW5kZW5jaWVzID0gIWFyZ3NbRVhUQVJHX0RFUEVOREVOQ0lFU10uaXNu dWxsOworCWhhcy5leHByZXNzaW9ucyA9ICFhcmdzW0VYVEFSR19FWFBSRVNTSU9OU10uaXNudWxs OwogCiAJaWYgKFJlY292ZXJ5SW5Qcm9ncmVzcygpKQogCXsKQEAgLTM3MywxOCArMzczLDE4IEBA IGV4dGVuZGVkX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCX0K IAogCS8qIHJlbGF0aW9uIGFyZ3VtZW50cyAqLwotCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhm Y2luZm8tPmFyZ3MsIGV4dGFyZ2luZm8sIEVYVEFSR19SRUxTQ0hFTUEpOwotCXJlbG5zcG5hbWUg PSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRVTShFWFRBUkdfUkVMU0NIRU1BKSk7 Ci0Jc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mby0+YXJncywgZXh0YXJnaW5mbywgRVhU QVJHX1JFTE5BTUUpOwotCXJlbG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19E QVRVTShFWFRBUkdfUkVMTkFNRSkpOworCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhhcmdzLCBl eHRhcmdpbmZvLCBFWFRBUkdfUkVMU0NIRU1BKTsKKwlyZWxuc3BuYW1lID0gVGV4dERhdHVtR2V0 Q1N0cmluZyhhcmdzW0VYVEFSR19SRUxTQ0hFTUFdLnZhbHVlKTsKKwlzdGF0c19jaGVja19yZXF1 aXJlZF9hcmcoYXJncywgZXh0YXJnaW5mbywgRVhUQVJHX1JFTE5BTUUpOworCXJlbG5hbWUgPSBU ZXh0RGF0dW1HZXRDU3RyaW5nKGFyZ3NbRVhUQVJHX1JFTE5BTUVdLnZhbHVlKTsKIAogCS8qIGV4 dGVuZGVkIHN0YXRpc3RpY3MgYXJndW1lbnRzICovCi0Jc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJn KGZjaW5mby0+YXJncywgZXh0YXJnaW5mbywgRVhUQVJHX1NUQVRTQ0hFTUEpOwotCW5zcG5hbWUg PSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRVTShFWFRBUkdfU1RBVFNDSEVNQSkp OwotCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8tPmFyZ3MsIGV4dGFyZ2luZm8sIEVY VEFSR19TVEFUTkFNRSk7Ci0Jc3R4bmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoUEdfR0VUQVJH X0RBVFVNKEVYVEFSR19TVEFUTkFNRSkpOwotCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2lu Zm8tPmFyZ3MsIGV4dGFyZ2luZm8sIEVYVEFSR19JTkhFUklURUQpOwotCWluaGVyaXRlZCA9IFBH X0dFVEFSR19CT09MKEVYVEFSR19JTkhFUklURUQpOworCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2Fy ZyhhcmdzLCBleHRhcmdpbmZvLCBFWFRBUkdfU1RBVFNDSEVNQSk7CisJbnNwbmFtZSA9IFRleHRE YXR1bUdldENTdHJpbmcoYXJnc1tFWFRBUkdfU1RBVFNDSEVNQV0udmFsdWUpOworCXN0YXRzX2No ZWNrX3JlcXVpcmVkX2FyZyhhcmdzLCBleHRhcmdpbmZvLCBFWFRBUkdfU1RBVE5BTUUpOworCXN0 eG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGFyZ3NbRVhUQVJHX1NUQVROQU1FXS52YWx1ZSk7 CisJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGFyZ3MsIGV4dGFyZ2luZm8sIEVYVEFSR19JTkhF UklURUQpOworCWluaGVyaXRlZCA9IERhdHVtR2V0Qm9vbChhcmdzW0VYVEFSR19JTkhFUklURURd LnZhbHVlKTsKIAogCS8qCiAJICogRmlyc3Qgb3BlbiB0aGUgcmVsYXRpb24gd2hlcmUgd2UgZXhw ZWN0IHRvIGZpbmQgdGhlIHN0YXRpc3RpY3MuICBUaGlzCkBAIC01MTQsOSArNTE0LDkgQEAgZXh0 ZW5kZWRfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJICovCiAJ aWYgKCFlbmFibGVkLm1jdikKIAl7Ci0JCWlmICghUEdfQVJHSVNOVUxMKEVYVEFSR19NT1NUX0NP TU1PTl9WQUxTKSB8fAotCQkJIVBHX0FSR0lTTlVMTChFWFRBUkdfTU9TVF9DT01NT05fRlJFUVMp IHx8Ci0JCQkhUEdfQVJHSVNOVUxMKEVYVEFSR19NT1NUX0NPTU1PTl9CQVNFX0ZSRVFTKSkKKwkJ aWYgKCFhcmdzW0VYVEFSR19NT1NUX0NPTU1PTl9WQUxTXS5pc251bGwgfHwKKwkJCSFhcmdzW0VY VEFSR19NT1NUX0NPTU1PTl9GUkVRU10uaXNudWxsIHx8CisJCQkhYXJnc1tFWFRBUkdfTU9TVF9D T01NT05fQkFTRV9GUkVRU10uaXNudWxsKQogCQl7CiAJCQllcmVwb3J0KFdBUk5JTkcsCiAJCQkJ CWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCkBAIC01MzgsOSArNTM4 LDkgQEAgZXh0ZW5kZWRfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8p CiAJCSAqIHN0YXRpc3RpY3Mgb2JqZWN0IGV4cGVjdHMgc29tZXRoaW5nLCBzb21ldGhpbmcgaXMg d3JvbmcuICBUaGlzCiAJCSAqIGlzc3VlcyBhIFdBUk5JTkcgaWYgYSBwYXJ0aWFsIGlucHV0IGhh cyBiZWVuIHByb3ZpZGVkLgogCQkgKi8KLQkJaWYgKCFQR19BUkdJU05VTEwoRVhUQVJHX01PU1Rf Q09NTU9OX1ZBTFMpIHx8Ci0JCQkhUEdfQVJHSVNOVUxMKEVYVEFSR19NT1NUX0NPTU1PTl9GUkVR UykgfHwKLQkJCSFQR19BUkdJU05VTEwoRVhUQVJHX01PU1RfQ09NTU9OX0JBU0VfRlJFUVMpKQor CQlpZiAoIWFyZ3NbRVhUQVJHX01PU1RfQ09NTU9OX1ZBTFNdLmlzbnVsbCB8fAorCQkJIWFyZ3Nb RVhUQVJHX01PU1RfQ09NTU9OX0ZSRVFTXS5pc251bGwgfHwKKwkJCSFhcmdzW0VYVEFSR19NT1NU X0NPTU1PTl9CQVNFX0ZSRVFTXS5pc251bGwpCiAJCXsKIAkJCWVyZXBvcnQoV0FSTklORywKIAkJ CQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKQEAgLTY1NSw3ICs2 NTUsNyBAQCBleHRlbmRlZF9zdGF0aXN0aWNzX3VwZGF0ZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5m bykKIAogCWlmIChoYXMubmRpc3RpbmN0KQogCXsKLQkJRGF0dW0JCW5kaXN0aW5jdF9kYXR1bSA9 IFBHX0dFVEFSR19EQVRVTShFWFRBUkdfTkRJU1RJTkNUKTsKKwkJRGF0dW0JCW5kaXN0aW5jdF9k YXR1bSA9IGFyZ3NbRVhUQVJHX05ESVNUSU5DVF0udmFsdWU7CiAJCWJ5dGVhCSAgICpkYXRhID0g RGF0dW1HZXRCeXRlYVBQKG5kaXN0aW5jdF9kYXR1bSk7CiAJCU1WTkRpc3RpbmN0ICpuZGlzdGlu Y3QgPSBzdGF0ZXh0X25kaXN0aW5jdF9kZXNlcmlhbGl6ZShkYXRhKTsKIApAQCAtNjc0LDcgKzY3 NCw3IEBAIGV4dGVuZGVkX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZv KQogCiAJaWYgKGhhcy5kZXBlbmRlbmNpZXMpCiAJewotCQlEYXR1bQkJZGVwZW5kZW5jaWVzX2Rh dHVtID0gUEdfR0VUQVJHX0RBVFVNKEVYVEFSR19ERVBFTkRFTkNJRVMpOworCQlEYXR1bQkJZGVw ZW5kZW5jaWVzX2RhdHVtID0gYXJnc1tFWFRBUkdfREVQRU5ERU5DSUVTXS52YWx1ZTsKIAkJYnl0 ZWEJICAgKmRhdGEgPSBEYXR1bUdldEJ5dGVhUFAoZGVwZW5kZW5jaWVzX2RhdHVtKTsKIAkJTVZE ZXBlbmRlbmNpZXMgKmRlcGVuZGVuY2llcyA9IHN0YXRleHRfZGVwZW5kZW5jaWVzX2Rlc2VyaWFs aXplKGRhdGEpOwogCkBAIC02OTYsOSArNjk2LDkgQEAgZXh0ZW5kZWRfc3RhdGlzdGljc191cGRh dGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJCURhdHVtCQlkYXR1bTsKIAkJYm9vbAkJdmFs X29rID0gZmFsc2U7CiAKLQkJZGF0dW0gPSBpbXBvcnRfbWN2KFBHX0dFVEFSR19BUlJBWVRZUEVf UChFWFRBUkdfTU9TVF9DT01NT05fVkFMUyksCi0JCQkJCQkgICBQR19HRVRBUkdfQVJSQVlUWVBF X1AoRVhUQVJHX01PU1RfQ09NTU9OX0ZSRVFTKSwKLQkJCQkJCSAgIFBHX0dFVEFSR19BUlJBWVRZ UEVfUChFWFRBUkdfTU9TVF9DT01NT05fQkFTRV9GUkVRUyksCisJCWRhdHVtID0gaW1wb3J0X21j dihEYXR1bUdldEFycmF5VHlwZVAoYXJnc1tFWFRBUkdfTU9TVF9DT01NT05fVkFMU10udmFsdWUp LAorCQkJCQkJICAgRGF0dW1HZXRBcnJheVR5cGVQKGFyZ3NbRVhUQVJHX01PU1RfQ09NTU9OX0ZS RVFTXS52YWx1ZSksCisJCQkJCQkgICBEYXR1bUdldEFycmF5VHlwZVAoYXJnc1tFWFRBUkdfTU9T VF9DT01NT05fQkFTRV9GUkVRU10udmFsdWUpLAogCQkJCQkJICAgYXR0dHlwaWRzLCBhdHR0eXBt b2RzLCBhdHR0eXBjb2xscywgbnVtYXR0cnMsCiAJCQkJCQkgICAmdmFsX29rKTsKIApAQCAtNzMz LDcgKzczMyw3IEBAIGV4dGVuZGVkX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8g ZmNpbmZvKQogCQkJCQkJCQkgICAmYXR0dHlwaWRzW251bWF0dG51bXNdLAogCQkJCQkJCQkgICAm YXR0dHlwbW9kc1tudW1hdHRudW1zXSwKIAkJCQkJCQkJICAgJmF0dHR5cGNvbGxzW251bWF0dG51 bXNdLAotCQkJCQkJCQkgICBQR19HRVRBUkdfSlNPTkJfUChFWFRBUkdfRVhQUkVTU0lPTlMpLAor CQkJCQkJCQkgICBEYXR1bUdldEpzb25iUChhcmdzW0VYVEFSR19FWFBSRVNTSU9OU10udmFsdWUp LAogCQkJCQkJCQkgICAmb2spOwogCiAJCXRhYmxlX2Nsb3NlKHBnc2QsIFJvd0V4Y2x1c2l2ZUxv Y2spOwpAQCAtMTc0NCw3ICsxNzQ0LDcgQEAgcGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cyhQR19G VU5DVElPTl9BUkdTKQogCWlmICghc3RhdHNfZmlsbF9mY2luZm9fZnJvbV9hcmdfcGFpcnMoZmNp bmZvLCBwb3NpdGlvbmFsX2ZjaW5mbywgZXh0YXJnaW5mbykpCiAJCXJlc3VsdCA9IGZhbHNlOwog Ci0JaWYgKCFleHRlbmRlZF9zdGF0aXN0aWNzX3VwZGF0ZShwb3NpdGlvbmFsX2ZjaW5mbykpCisJ aWYgKCFleHRlbmRlZF9zdGF0aXN0aWNzX3VwZGF0ZShwb3NpdGlvbmFsX2ZjaW5mby0+YXJncykp CiAJCXJlc3VsdCA9IGZhbHNlOwogCiAJUEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKLS0gCjIuNTAu MSAoQXBwbGUgR2l0LTE1NSkKCg== --000000000000e977f10655600bcf Content-Type: application/octet-stream; name="v2-0010-Add-relation_statistics_update-refactor-update_re.patch" Content-Disposition: attachment; filename="v2-0010-Add-relation_statistics_update-refactor-update_re.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqyw9g739 RnJvbSAzNGNjNmFjODY5N2MzNjhiMjM1ODNjMThlOTE3Mjc0NzIxOGI4YjAyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogU3VuLCAyOCBKdW4gMjAyNiAyMTo1MTo1NiAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djIgMTAvMTNdIEFkZCByZWxhdGlvbl9zdGF0aXN0aWNzX3VwZGF0ZSwgcmVmYWN0b3IKIHVwZGF0 ZV9yZWxzdGF0cy4KCkludHJvZHVjZSBhIG5ldyBlbnVtIHJlbGF0aW9uX3N0YXRzX2FyZ251bSwg d2hpY2ggaXMgYSBzdWJzZXQgb2YKcmVsYXRpb25fYXJnc19hcmdudW0gYnV0IGNvbnRhaW5zIG9u bHkgdGhlIHN0YXRpc3RpY2FsIHZhbHVlcy4KCk1vZGlmeSB1cGRhdGVfcmVsc3RhdHMgdG8gdGFr ZSBhIFJlbGF0aW9uIGFyZ3VtZW50LCBhbmQgaW5kZXggdGhlCk51bGxhYmxlRGF0dW0gYXJyYXkg YnkgdGhlIG5ldyBlbnVtIHJlbGF0aW9uX3N0YXRzX2FyZ251bS4gQWxsCnByb2Nlc3NpbmcgYW5k IHZhbGlkYXRpb24gb2Ygbm9uLXN0YXRpc3RpY2FsIHZhbHVlcyBsaWtlIHNjaGVtYSBhbmQKcmVs bmFtZSwgYXMgd2VsbCBhcyBjaGVja2luZyBmb3IgcmVjb3ZlcnkgbW9kZSBhbmQgYWNxdWlyaW5n IHRoZSBsb2NrIG9uCnRoZSByZWxhdGlvbiBhcmUgbm93IGhhbmRsZWQgaW4gdGhlIGNhbGxpbmcg ZnVuY3Rpb25zCnBnX3Jlc3RvcmVfcmVsYXRpb25fc3RhdHMgYW5kIHBnX2NsZWFyX3JlbGF0aW9u X3N0YXRzLiBJbiB0dXJuLCB0aG9zZQpmdW5jdGlvbnMgbXVzdCBub3cgcGFzcyB0aGUgc2hvcnRl ciwgc3RhdGlzdGljcy1vbmx5IGFycmF5IG9mCk51bGxhYmxlRGF0dW1zLCBhcyB3ZWxsIGFzIHRo ZSBSZWxhdGlvbiBhcmd1bWVudCB0aGF0IGlzIG5vdyB0aGVpcgpyZXNwb25zaWJpbGl0eSB0byBv cGVuIGFuZCBjbG9zZS4KCkNyZWF0ZSBhIG5ldyBmdW5jdGlvbiByZWxhdGlvbl9zdGF0aXN0aWNz X3VwZGF0ZSB3aGljaCB0YWtlcyBhIFJlbGF0aW9uCmFyZ3VtZW50IGFuZCBhcnJheXMgb2YgaXNu dWxsIGFuZCBjc3RyaW5nIGFyZ3VtZW50cywgd2hpY2ggd2lsbCBiZQp0cmFuc2xhdGVkIGludG8g dGhlIERhdHVtIHZhbHVlcyByZXF1aXJlZCBieSB1cGRhdGVfcmVsc3RhdHMoKS4KClRoZSBlbmQg cmVzdWx0IGlzIHRoYXQgYWxsIHRocmVlIHVzZXItZmFjaW5nIGZ1bmN0aW9ucyBhcmUgYWJsZSB0 byBjYWxsCnRoZSBzYW1lIHVwZGF0ZV9yZWxzdGF0cygpLgotLS0KIHNyYy9iYWNrZW5kL3N0YXRp c3RpY3MvcmVsYXRpb25fc3RhdHMuYyB8IDI0NCArKysrKysrKysrKysrKysrKysrLS0tLS0KIHNy Yy9pbmNsdWRlL3N0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuaCB8ICAzMCArKysKIDIgZmlsZXMg Y2hhbmdlZCwgMjIzIGluc2VydGlvbnMoKyksIDUxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9pbmNsdWRlL3N0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuaAoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuYyBiL3NyYy9iYWNrZW5k L3N0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuYwppbmRleCBkNDQ1OTk4MWViYy4uMjFiYWEwYWJi NTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuYwor KysgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL3JlbGF0aW9uX3N0YXRzLmMKQEAgLTIxLDYgKzIx LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL2luZGV4aW5nLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9u YW1lc3BhY2UuaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJzdGF0 aXN0aWNzL3JlbGF0aW9uX3N0YXRzLmgiCiAjaW5jbHVkZSAic3RhdGlzdGljcy9zdGF0X3V0aWxz LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lk cy5oIgpAQCAtNTYsMTggKzU3LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgU3RhdHNBcmdJbmZvIHJlbGFy Z2luZm9bXSA9CiAJW1JFTEFSR19OVU1fUkVMQVJHU10gPSB7MH0KIH07CiAKLXN0YXRpYyBib29s IHVwZGF0ZV9yZWxzdGF0cyhjb25zdCBOdWxsYWJsZURhdHVtICphcmdzKTsKK3N0YXRpYyBib29s IHVwZGF0ZV9yZWxzdGF0cyhSZWxhdGlvbiByZWwsIGNvbnN0IE51bGxhYmxlRGF0dW0gKmFyZ3Mp OwogCiAvKgogICogSW50ZXJuYWwgZnVuY3Rpb24gZm9yIG1vZGlmeWluZyBzdGF0aXN0aWNzIGZv ciBhIHJlbGF0aW9uLgogICovCiBzdGF0aWMgYm9vbAotdXBkYXRlX3JlbHN0YXRzKGNvbnN0IE51 bGxhYmxlRGF0dW0gKmFyZ3MpCit1cGRhdGVfcmVsc3RhdHMoUmVsYXRpb24gcmVsLCBjb25zdCBO dWxsYWJsZURhdHVtICphcmdzKQogewogCWJvb2wJCXJlc3VsdCA9IHRydWU7Ci0JY2hhcgkgICAq bnNwbmFtZTsKLQljaGFyCSAgICpyZWxuYW1lOwotCU9pZAkJCXJlbG9pZDsKIAlSZWxhdGlvbglj cmVsOwogCUJsb2NrTnVtYmVyIHJlbHBhZ2VzID0gMDsKIAlib29sCQl1cGRhdGVfcmVscGFnZXMg PSBmYWxzZTsKQEAgLTgzLDMzICs4MSwxNiBAQCB1cGRhdGVfcmVsc3RhdHMoY29uc3QgTnVsbGFi bGVEYXR1bSAqYXJncykKIAlEYXR1bQkJdmFsdWVzWzRdID0gezB9OwogCWJvb2wJCW51bGxzWzRd ID0gezB9OwogCWludAkJCW5yZXBsYWNlcyA9IDA7Ci0JT2lkCQkJbG9ja2VkX3RhYmxlID0gSW52 YWxpZE9pZDsKLQotCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhhcmdzLCByZWxhcmdpbmZvLCBS RUxBUkdfU0NIRU1BKTsKLQlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoYXJncywgcmVsYXJnaW5m bywgUkVMQVJHX1JFTE5BTUUpOwotCi0JbnNwbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoYXJn c1tSRUxBUkdfU0NIRU1BXS52YWx1ZSk7Ci0JcmVsbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmco YXJnc1tSRUxBUkdfUkVMTkFNRV0udmFsdWUpOwotCi0JaWYgKFJlY292ZXJ5SW5Qcm9ncmVzcygp KQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9Q UkVSRVFVSVNJVEVfU1RBVEUpLAotCQkJCSBlcnJtc2coInJlY292ZXJ5IGlzIGluIHByb2dyZXNz IiksCi0JCQkJIGVycmhpbnQoIlN0YXRpc3RpY3MgY2Fubm90IGJlIG1vZGlmaWVkIGR1cmluZyBy ZWNvdmVyeS4iKSkpOwotCi0JcmVsb2lkID0gUmFuZ2VWYXJHZXRSZWxpZEV4dGVuZGVkKG1ha2VS YW5nZVZhcihuc3BuYW1lLCByZWxuYW1lLCAtMSksCi0JCQkJCQkJCQkgIFNoYXJlVXBkYXRlRXhj bHVzaXZlTG9jaywgMCwKLQkJCQkJCQkJCSAgUmFuZ2VWYXJDYWxsYmFja0ZvclN0YXRzLCAmbG9j a2VkX3RhYmxlKTsKIAotCWlmICghYXJnc1tSRUxBUkdfUkVMUEFHRVNdLmlzbnVsbCkKKwlpZiAo IWFyZ3NbUkVMU1RBVF9SRUxQQUdFU10uaXNudWxsKQogCXsKLQkJcmVscGFnZXMgPSBEYXR1bUdl dFVJbnQzMihhcmdzW1JFTEFSR19SRUxQQUdFU10udmFsdWUpOworCQlyZWxwYWdlcyA9IERhdHVt R2V0VUludDMyKGFyZ3NbUkVMU1RBVF9SRUxQQUdFU10udmFsdWUpOwogCQl1cGRhdGVfcmVscGFn ZXMgPSB0cnVlOwogCX0KIAotCWlmICghYXJnc1tSRUxBUkdfUkVMVFVQTEVTXS5pc251bGwpCisJ aWYgKCFhcmdzW1JFTFNUQVRfUkVMVFVQTEVTXS5pc251bGwpCiAJewotCQlyZWx0dXBsZXMgPSBE YXR1bUdldEZsb2F0NChhcmdzW1JFTEFSR19SRUxUVVBMRVNdLnZhbHVlKTsKKwkJcmVsdHVwbGVz ID0gRGF0dW1HZXRGbG9hdDQoYXJnc1tSRUxTVEFUX1JFTFRVUExFU10udmFsdWUpOwogCQlpZiAo cmVsdHVwbGVzIDwgLTEuMCkKIAkJewogCQkJZXJlcG9ydChXQVJOSU5HLApAQCAtMTIxLDE1ICsx MDIsMTUgQEAgdXBkYXRlX3JlbHN0YXRzKGNvbnN0IE51bGxhYmxlRGF0dW0gKmFyZ3MpCiAJCQl1 cGRhdGVfcmVsdHVwbGVzID0gdHJ1ZTsKIAl9CiAKLQlpZiAoIWFyZ3NbUkVMQVJHX1JFTEFMTFZJ U0lCTEVdLmlzbnVsbCkKKwlpZiAoIWFyZ3NbUkVMU1RBVF9SRUxBTExWSVNJQkxFXS5pc251bGwp CiAJewotCQlyZWxhbGx2aXNpYmxlID0gRGF0dW1HZXRVSW50MzIoYXJnc1tSRUxBUkdfUkVMQUxM VklTSUJMRV0udmFsdWUpOworCQlyZWxhbGx2aXNpYmxlID0gRGF0dW1HZXRVSW50MzIoYXJnc1tS RUxTVEFUX1JFTEFMTFZJU0lCTEVdLnZhbHVlKTsKIAkJdXBkYXRlX3JlbGFsbHZpc2libGUgPSB0 cnVlOwogCX0KIAotCWlmICghYXJnc1tSRUxBUkdfUkVMQUxMRlJPWkVOXS5pc251bGwpCisJaWYg KCFhcmdzW1JFTFNUQVRfUkVMQUxMRlJPWkVOXS5pc251bGwpCiAJewotCQlyZWxhbGxmcm96ZW4g PSBEYXR1bUdldFVJbnQzMihhcmdzW1JFTEFSR19SRUxBTExGUk9aRU5dLnZhbHVlKTsKKwkJcmVs YWxsZnJvemVuID0gRGF0dW1HZXRVSW50MzIoYXJnc1tSRUxTVEFUX1JFTEFMTEZST1pFTl0udmFs dWUpOwogCQl1cGRhdGVfcmVsYWxsZnJvemVuID0gdHJ1ZTsKIAl9CiAKQEAgLTEzOSw5ICsxMjAs OSBAQCB1cGRhdGVfcmVsc3RhdHMoY29uc3QgTnVsbGFibGVEYXR1bSAqYXJncykKIAkgKi8KIAlj cmVsID0gdGFibGVfb3BlbihSZWxhdGlvblJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwog Ci0JY3R1cCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0ocmVsb2lk KSk7CisJY3R1cCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0oUmVs YXRpb25HZXRSZWxpZChyZWwpKSk7CiAJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGN0dXApKQotCQll bG9nKEVSUk9SLCAicGdfY2xhc3MgZW50cnkgZm9yIHJlbGlkICV1IG5vdCBmb3VuZCIsIHJlbG9p ZCk7CisJCWVsb2coRVJST1IsICJwZ19jbGFzcyBlbnRyeSBmb3IgcmVsaWQgJXUgbm90IGZvdW5k IiwgUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKIAogCXBnY2Zvcm0gPSAoRm9ybV9wZ19jbGFzcykg R0VUU1RSVUNUKGN0dXApOwogCkBAIC0yMDEsMjQgKzE4Miw1NSBAQCB1cGRhdGVfcmVsc3RhdHMo Y29uc3QgTnVsbGFibGVEYXR1bSAqYXJncykKIERhdHVtCiBwZ19jbGVhcl9yZWxhdGlvbl9zdGF0 cyhQR19GVU5DVElPTl9BUkdTKQogewotCUxPQ0FMX0ZDSU5GTyhuZXdmY2luZm8sIDYpOwotCi0J SW5pdEZ1bmN0aW9uQ2FsbEluZm9EYXRhKCpuZXdmY2luZm8sIE5VTEwsIDYsIEludmFsaWRPaWQs IE5VTEwsIE5VTEwpOwotCi0JbmV3ZmNpbmZvLT5hcmdzWzBdLnZhbHVlID0gUEdfR0VUQVJHX0RB VFVNKDApOwotCW5ld2ZjaW5mby0+YXJnc1swXS5pc251bGwgPSBQR19BUkdJU05VTEwoMCk7Ci0J bmV3ZmNpbmZvLT5hcmdzWzFdLnZhbHVlID0gUEdfR0VUQVJHX0RBVFVNKDEpOwotCW5ld2ZjaW5m by0+YXJnc1sxXS5pc251bGwgPSBQR19BUkdJU05VTEwoMSk7Ci0JbmV3ZmNpbmZvLT5hcmdzWzJd LnZhbHVlID0gVUludDMyR2V0RGF0dW0oMCk7Ci0JbmV3ZmNpbmZvLT5hcmdzWzJdLmlzbnVsbCA9 IGZhbHNlOwotCW5ld2ZjaW5mby0+YXJnc1szXS52YWx1ZSA9IEZsb2F0NEdldERhdHVtKC0xLjAp OwotCW5ld2ZjaW5mby0+YXJnc1szXS5pc251bGwgPSBmYWxzZTsKLQluZXdmY2luZm8tPmFyZ3Nb NF0udmFsdWUgPSBVSW50MzJHZXREYXR1bSgwKTsKLQluZXdmY2luZm8tPmFyZ3NbNF0uaXNudWxs ID0gZmFsc2U7Ci0JbmV3ZmNpbmZvLT5hcmdzWzVdLnZhbHVlID0gVUludDMyR2V0RGF0dW0oMCk7 Ci0JbmV3ZmNpbmZvLT5hcmdzWzVdLmlzbnVsbCA9IGZhbHNlOwotCi0JdXBkYXRlX3JlbHN0YXRz KG5ld2ZjaW5mby0+YXJncyk7CisJTnVsbGFibGVEYXR1bSBwb3NpdGlvbmFsX2FyZ3NbUkVMQVJH X05VTV9SRUxBUkdTXTsKKwlOdWxsYWJsZURhdHVtIHN0YXRzW1JFTFNUQVRfTlVNX1JFTFNUQVRT XTsKKwljaGFyCSAgICpuc3BuYW1lOworCWNoYXIJICAgKnJlbG5hbWU7CisJT2lkCQkJcmVsb2lk OworCU9pZAkJCWxvY2tlZF90YWJsZSA9IEludmFsaWRPaWQ7CisJUmVsYXRpb24JcmVsOworCisJ LyoKKwkgKiBGaWxsIG91dCBqdXN0IGVub3VnaCBvZiBwb3NpdGlvbmFsX2FyZ3MgdG8gZG8gdGhl IHNhbWUgcmVxdWlyZWQgY2hlY2tzCisJICogYXMgcGdfcmVzdG9yZV9yZWxhdGlvbl9zdGF0cwor CSAqLworCXBvc2l0aW9uYWxfYXJnc1tSRUxBUkdfU0NIRU1BXS5pc251bGwgPSBQR19BUkdJU05V TEwoMCk7CisJcG9zaXRpb25hbF9hcmdzW1JFTEFSR19TQ0hFTUFdLnZhbHVlID0gUEdfR0VUQVJH X0RBVFVNKDApOworCXBvc2l0aW9uYWxfYXJnc1tSRUxBUkdfUkVMTkFNRV0uaXNudWxsID0gUEdf QVJHSVNOVUxMKDEpOworCXBvc2l0aW9uYWxfYXJnc1tSRUxBUkdfUkVMTkFNRV0udmFsdWUgPSBQ R19HRVRBUkdfREFUVU0oMSk7CisKKwlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcocG9zaXRpb25h bF9hcmdzLCByZWxhcmdpbmZvLCBSRUxBUkdfU0NIRU1BKTsKKwlzdGF0c19jaGVja19yZXF1aXJl ZF9hcmcocG9zaXRpb25hbF9hcmdzLCByZWxhcmdpbmZvLCBSRUxBUkdfUkVMTkFNRSk7CisKKwlu c3BuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhwb3NpdGlvbmFsX2FyZ3NbUkVMQVJHX1NDSEVN QV0udmFsdWUpOworCXJlbG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHBvc2l0aW9uYWxfYXJn c1tSRUxBUkdfUkVMTkFNRV0udmFsdWUpOworCisJaWYgKFJlY292ZXJ5SW5Qcm9ncmVzcygpKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVS RVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2coInJlY292ZXJ5IGlzIGluIHByb2dyZXNzIiks CisJCQkJIGVycmhpbnQoIlN0YXRpc3RpY3MgY2Fubm90IGJlIG1vZGlmaWVkIGR1cmluZyByZWNv dmVyeS4iKSkpOworCisJcmVsb2lkID0gUmFuZ2VWYXJHZXRSZWxpZEV4dGVuZGVkKG1ha2VSYW5n ZVZhcihuc3BuYW1lLCByZWxuYW1lLCAtMSksCisJCQkJCQkJCQkgIFNoYXJlVXBkYXRlRXhjbHVz aXZlTG9jaywgMCwKKwkJCQkJCQkJCSAgUmFuZ2VWYXJDYWxsYmFja0ZvclN0YXRzLCAmbG9ja2Vk X3RhYmxlKTsKKworCXN0YXRzW1JFTFNUQVRfUkVMUEFHRVNdLmlzbnVsbCA9IGZhbHNlOworCXN0 YXRzW1JFTFNUQVRfUkVMUEFHRVNdLnZhbHVlID0gVUludDMyR2V0RGF0dW0oMCk7CisKKwlzdGF0 c1tSRUxTVEFUX1JFTFRVUExFU10uaXNudWxsID0gZmFsc2U7CisJc3RhdHNbUkVMU1RBVF9SRUxU VVBMRVNdLnZhbHVlID0gRmxvYXQ0R2V0RGF0dW0oLTEuMCk7CisKKwlzdGF0c1tSRUxTVEFUX1JF TEFMTFZJU0lCTEVdLmlzbnVsbCA9IGZhbHNlOworCXN0YXRzW1JFTFNUQVRfUkVMQUxMVklTSUJM RV0udmFsdWUgPSBVSW50MzJHZXREYXR1bSgwKTsKKworCXN0YXRzW1JFTFNUQVRfUkVMQUxMRlJP WkVOXS5pc251bGwgPSBmYWxzZTsKKwlzdGF0c1tSRUxTVEFUX1JFTEFMTEZST1pFTl0udmFsdWUg PSBVSW50MzJHZXREYXR1bSgwKTsKKworCXJlbCA9IHJlbGF0aW9uX29wZW4ocmVsb2lkLCBOb0xv Y2spOworCXVwZGF0ZV9yZWxzdGF0cyhyZWwsIHN0YXRzKTsKKwlyZWxhdGlvbl9jbG9zZShyZWws IE5vTG9jayk7CisKIAlQR19SRVRVUk5fVk9JRCgpOwogfQogCkBAIC0yMjYsMTQgKzIzOCwxNDQg QEAgRGF0dW0KIHBnX3Jlc3RvcmVfcmVsYXRpb25fc3RhdHMoUEdfRlVOQ1RJT05fQVJHUykKIHsK IAlOdWxsYWJsZURhdHVtIHBvc2l0aW9uYWxfYXJnc1tSRUxBUkdfTlVNX1JFTEFSR1NdOworCU51 bGxhYmxlRGF0dW0gc3RhdHNbUkVMU1RBVF9OVU1fUkVMU1RBVFNdOworCisJY2hhcgkgICAqbnNw bmFtZTsKKwljaGFyCSAgICpyZWxuYW1lOworCU9pZAkJCXJlbG9pZDsKKwlPaWQJCQlsb2NrZWRf dGFibGUgPSBJbnZhbGlkT2lkOworCVJlbGF0aW9uCXJlbDsKIAlib29sCQlyZXN1bHQgPSB0cnVl OwogCiAJaWYgKCFzdGF0c19maWxsX2FyZ3NfZnJvbV9hcmdfcGFpcnMoZmNpbmZvLCBwb3NpdGlv bmFsX2FyZ3MsCiAJCQkJCQkJCQkJcmVsYXJnaW5mbykpCiAJCXJlc3VsdCA9IGZhbHNlOwogCi0J aWYgKCF1cGRhdGVfcmVsc3RhdHMocG9zaXRpb25hbF9hcmdzKSkKKwlzdGF0c19jaGVja19yZXF1 aXJlZF9hcmcocG9zaXRpb25hbF9hcmdzLCByZWxhcmdpbmZvLCBSRUxBUkdfU0NIRU1BKTsKKwlz dGF0c19jaGVja19yZXF1aXJlZF9hcmcocG9zaXRpb25hbF9hcmdzLCByZWxhcmdpbmZvLCBSRUxB UkdfUkVMTkFNRSk7CisKKwluc3BuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhwb3NpdGlvbmFs X2FyZ3NbUkVMQVJHX1NDSEVNQV0udmFsdWUpOworCXJlbG5hbWUgPSBUZXh0RGF0dW1HZXRDU3Ry aW5nKHBvc2l0aW9uYWxfYXJnc1tSRUxBUkdfUkVMTkFNRV0udmFsdWUpOworCisJaWYgKFJlY292 ZXJ5SW5Qcm9ncmVzcygpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVf T0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2coInJlY292ZXJ5 IGlzIGluIHByb2dyZXNzIiksCisJCQkJIGVycmhpbnQoIlN0YXRpc3RpY3MgY2Fubm90IGJlIG1v ZGlmaWVkIGR1cmluZyByZWNvdmVyeS4iKSkpOworCisJcmVsb2lkID0gUmFuZ2VWYXJHZXRSZWxp ZEV4dGVuZGVkKG1ha2VSYW5nZVZhcihuc3BuYW1lLCByZWxuYW1lLCAtMSksCisJCQkJCQkJCQkg IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jaywgMCwKKwkJCQkJCQkJCSAgUmFuZ2VWYXJDYWxsYmFj a0ZvclN0YXRzLCAmbG9ja2VkX3RhYmxlKTsKKworCS8qIE1hcCBSRUxBUkdzIHRvIFJFTFNUQVRz ICovCisJc3RhdHNbUkVMU1RBVF9SRUxQQUdFU10uaXNudWxsID0gcG9zaXRpb25hbF9hcmdzW1JF TEFSR19SRUxQQUdFU10uaXNudWxsOworCXN0YXRzW1JFTFNUQVRfUkVMUEFHRVNdLnZhbHVlID0g cG9zaXRpb25hbF9hcmdzW1JFTEFSR19SRUxQQUdFU10udmFsdWU7CisKKwlzdGF0c1tSRUxTVEFU X1JFTFRVUExFU10uaXNudWxsID0gcG9zaXRpb25hbF9hcmdzW1JFTEFSR19SRUxUVVBMRVNdLmlz bnVsbDsKKwlzdGF0c1tSRUxTVEFUX1JFTFRVUExFU10udmFsdWUgPSBwb3NpdGlvbmFsX2FyZ3Nb UkVMQVJHX1JFTFRVUExFU10udmFsdWU7CisKKwlzdGF0c1tSRUxTVEFUX1JFTEFMTFZJU0lCTEVd LmlzbnVsbCA9IHBvc2l0aW9uYWxfYXJnc1tSRUxBUkdfUkVMQUxMVklTSUJMRV0uaXNudWxsOwor CXN0YXRzW1JFTFNUQVRfUkVMQUxMVklTSUJMRV0udmFsdWUgPSBwb3NpdGlvbmFsX2FyZ3NbUkVM QVJHX1JFTEFMTFZJU0lCTEVdLnZhbHVlOworCisJc3RhdHNbUkVMU1RBVF9SRUxBTExGUk9aRU5d LmlzbnVsbCA9IHBvc2l0aW9uYWxfYXJnc1tSRUxBUkdfUkVMQUxMRlJPWkVOXS5pc251bGw7CisJ c3RhdHNbUkVMU1RBVF9SRUxBTExGUk9aRU5dLnZhbHVlID0gcG9zaXRpb25hbF9hcmdzW1JFTEFS R19SRUxBTExGUk9aRU5dLnZhbHVlOworCisJcmVsID0gcmVsYXRpb25fb3BlbihyZWxvaWQsIE5v TG9jayk7CisKKwlpZiAoIXVwZGF0ZV9yZWxzdGF0cyhyZWwsIHN0YXRzKSkKIAkJcmVzdWx0ID0g ZmFsc2U7CiAKKwlyZWxhdGlvbl9jbG9zZShyZWwsIE5vTG9jayk7CisKIAlQR19SRVRVUk5fQk9P TChyZXN1bHQpOwogfQorCisvKgorICogQ29udmVuaWVuY2Ugcm91dGluZSB0byBwYXJzZSBCbG9j a051bWJlciB2YWx1ZXMsIGFuZCBlbWl0IGEgd2FybmluZworICogb24gcGFyc2UgZXJyb3JzLgor ICovCitzdGF0aWMgdm9pZAorc3RyX3RvX2Jsb2NrbnVtYmVyKE51bGxhYmxlRGF0dW0gKnN0YXRz LCBpbnQgc3RhdG51bSwgY29uc3QgYm9vbCAqaXNudWxsLAorCQkJCSAgIGNvbnN0IGNoYXIgKip2 YWx1ZXMpCit7CisJc3RhdHNbc3RhdG51bV0uaXNudWxsID0gdHJ1ZTsKKwlzdGF0c1tzdGF0bnVt XS52YWx1ZSA9IDA7CisKKwlpZiAoIWlzbnVsbFtzdGF0bnVtXSkKKwl7CisJCWNvbnN0IGNoYXIg KnMgPSB2YWx1ZXNbc3RhdG51bV07CisJCUJsb2NrTnVtYmVyIHJlc3VsdDsKKwkJRXJyb3JTYXZl Q29udGV4dCBlc2NvbnRleHQgPSB7VF9FcnJvclNhdmVDb250ZXh0fTsKKworCQlpZiAocyA9PSBO VUxMKQorCQkJZWxvZyhFUlJPUiwgInZhbHVlIGlzIG51bGwgYnV0IGZsYWcgaXMgbm9uLW51bGwi KTsKKworCQlyZXN1bHQgPSB1aW50MzJpbl9zdWJyKHMsIE5VTEwsICJCbG9ja051bWJlciIsIChO b2RlICopICZlc2NvbnRleHQpOworCisJCWlmIChlc2NvbnRleHQuZXJyb3Jfb2NjdXJyZWQpCisJ CXsKKwkJCWVzY29udGV4dC5lcnJvcl9kYXRhLT5lbGV2ZWwgPSBXQVJOSU5HOworCQkJVGhyb3dF cnJvckRhdGEoZXNjb250ZXh0LmVycm9yX2RhdGEpOworCQkJRnJlZUVycm9yRGF0YShlc2NvbnRl eHQuZXJyb3JfZGF0YSk7CisJCQlyZXR1cm47CisJCX0KKwkJZWxzZQorCQl7CisJCQlzdGF0c1tz dGF0bnVtXS5pc251bGwgPSBmYWxzZTsKKwkJCXN0YXRzW3N0YXRudW1dLnZhbHVlID0gVUludDMy R2V0RGF0dW0ocmVzdWx0KTsKKwkJfQorCX0KK30KKworLyoKKyAqIENvbnZlbmllbmNlIHJvdXRp bmUgdG8gcGFyc2UgZmxvYXQgdmFsdWVzLCBhbmQgZW1pdCBhIHdhcm5pbmcgb24gcGFyc2UKKyAq IGVycm9ycy4KKyAqLworc3RhdGljIHZvaWQKK3N0cl90b19mbG9hdChOdWxsYWJsZURhdHVtICpz dGF0cywgaW50IHN0YXRudW0sIGNvbnN0IGJvb2wgKmlzbnVsbCwKKwkJCSBjb25zdCBjaGFyICoq dmFsdWVzKQoreworCXN0YXRzW3N0YXRudW1dLmlzbnVsbCA9IHRydWU7CisJc3RhdHNbc3RhdG51 bV0udmFsdWUgPSAwOworCisJaWYgKCFpc251bGxbc3RhdG51bV0pCisJeworCQljb25zdCBjaGFy ICpzID0gdmFsdWVzW3N0YXRudW1dOworCQlEYXR1bQkJdmFsdWU7CisJCUVycm9yU2F2ZUNvbnRl eHQgZXNjb250ZXh0ID0ge1RfRXJyb3JTYXZlQ29udGV4dH07CisKKwkJaWYgKHMgPT0gTlVMTCkK KwkJCWVsb2coRVJST1IsICJ2YWx1ZSBpcyBudWxsIGJ1dCBmbGFnIGlzIG5vbi1udWxsIik7CisK KwkJaWYgKERpcmVjdElucHV0RnVuY3Rpb25DYWxsU2FmZShmbG9hdDRpbiwgKGNoYXIgKikgcywg SW52YWxpZE9pZCwgLTEsCisJCQkJCQkJCQkJKE5vZGUgKikgJmVzY29udGV4dCwgJnZhbHVlKSkK KwkJeworCQkJc3RhdHNbc3RhdG51bV0uaXNudWxsID0gZmFsc2U7CisJCQlzdGF0c1tzdGF0bnVt XS52YWx1ZSA9IHZhbHVlOworCQl9CisJCWVsc2UKKwkJeworCQkJZXNjb250ZXh0LmVycm9yX2Rh dGEtPmVsZXZlbCA9IFdBUk5JTkc7CisJCQlUaHJvd0Vycm9yRGF0YShlc2NvbnRleHQuZXJyb3Jf ZGF0YSk7CisJCQlGcmVlRXJyb3JEYXRhKGVzY29udGV4dC5lcnJvcl9kYXRhKTsKKwkJCXJldHVy bjsKKwkJfQorCX0KK30KKworLyoKKyAqIFVwZGF0ZSBzdGF0aXN0aWNzIGZvciBhbiBhbHJlYWR5 IG9wZW5lZCBSZWxhdGlvbiB3aXRoIGEgbG9jayBsZXZlbCBvZiBhdCBsZWFzdAorICogU2hhcmVV cGRhdGVFeGNsdXNpdmVMb2NrLgorICovCitib29sCityZWxhdGlvbl9zdGF0aXN0aWNzX3VwZGF0 ZShSZWxhdGlvbiByZWwsIGNvbnN0IGJvb2wgKmlzbnVsbCwgY29uc3QgY2hhciAqKnZhbHVlcykK K3sKKwlOdWxsYWJsZURhdHVtIHN0YXRzW1JFTFNUQVRfTlVNX1JFTFNUQVRTXTsKKworCXN0cl90 b19ibG9ja251bWJlcihzdGF0cywgUkVMU1RBVF9SRUxQQUdFUywgaXNudWxsLCB2YWx1ZXMpOwor CXN0cl90b19mbG9hdChzdGF0cywgUkVMU1RBVF9SRUxUVVBMRVMsIGlzbnVsbCwgdmFsdWVzKTsK KwlzdHJfdG9fYmxvY2tudW1iZXIoc3RhdHMsIFJFTFNUQVRfUkVMQUxMVklTSUJMRSwgaXNudWxs LCB2YWx1ZXMpOworCXN0cl90b19ibG9ja251bWJlcihzdGF0cywgUkVMU1RBVF9SRUxBTExGUk9a RU4sIGlzbnVsbCwgdmFsdWVzKTsKKworCXJldHVybiB1cGRhdGVfcmVsc3RhdHMocmVsLCBzdGF0 cyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3JlbGF0aW9uX3N0YXRz LmggYi9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3JlbGF0aW9uX3N0YXRzLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU2Y2U3ZWYzZTY2Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5oCkBAIC0wLDAgKzEsMzAg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHJlbGF0aW9uX3N0YXRzLmgKKyAqICAgIEZ1 bmN0aW9ucyBmb3IgdGhlIGludGVybmFsIG1hbmlwdWxhdGlvbiBvZiByZWxhdGlvbiBzdGF0aXN0 aWNzLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0 LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5j bHVkZS9zdGF0aXN0aWNzL3JlbGF0aW9uX3N0YXRzLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2lmbmRlZiBSRUxBVElPTl9TVEFUU19ICisKKyNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0u aCIKKworZW51bSByZWxhdGlvbl9zdGF0c19hcmdudW0KK3sKKwlSRUxTVEFUX1JFTFBBR0VTLAor CVJFTFNUQVRfUkVMVFVQTEVTLAorCVJFTFNUQVRfUkVMQUxMVklTSUJMRSwKKwlSRUxTVEFUX1JF TEFMTEZST1pFTiwKKwlSRUxTVEFUX05VTV9SRUxTVEFUUworfTsKKworZXh0ZXJuIGJvb2wgcmVs YXRpb25fc3RhdGlzdGljc191cGRhdGUoUmVsYXRpb24gcmVsLCBjb25zdCBib29sICppc251bGws CisJCQkJCQkJCQkgICBjb25zdCBjaGFyICoqdmFsdWVzKTsKKworI2RlZmluZSBSRUxBVElPTl9T VEFUU19ICisjZW5kaWYKLS0gCjIuNTAuMSAoQXBwbGUgR2l0LTE1NSkKCg== --000000000000e977f10655600bcf Content-Type: application/octet-stream; name="v2-0009-Rename-relation_statistics_update-and-relation_st.patch" Content-Disposition: attachment; filename="v2-0009-Rename-relation_statistics_update-and-relation_st.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqyw9g728 RnJvbSAxNjVmY2U4NDExOTA4Y2EzZTYxZWNiOWEwNzJhOTAxZWU2Mjk3ZGI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogU3VuLCAyOCBKdW4gMjAyNiAyMTozOToxNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djIgMDkvMTNdIFJlbmFtZSByZWxhdGlvbl9zdGF0aXN0aWNzX3VwZGF0ZSBhbmQKIHJlbGF0aW9u X3N0YXRzX2FyZ251bS4KClJlbmFtZSByZWxhdGlvbl9zdGF0aXN0aWNzX3VwZGF0ZSB0byB1cGRh dGVfcmVsc3RhdHMuIFRoaXMgYWxsb3dzIHVzIHRvCmNyZWF0ZSBhIHB1YmxpYyBmdW5jdGlvbiBv ZiB0aGF0IHNhbWUgbmFtZS4KClJlbmFtZSByZWxhdGlvbl9zdGF0c19hcmdudW0gdG8gcmVsYXRp b25fYXJnc19hcmdudW0sIGJlY2F1c2UgaXQgY292ZXJzCmFsbCBwYXJhbWV0ZXJzIG9mIHBnX3Jl c3RvcmVfcmVsYXRpb25fc3RhdHMsIG5vdCBqdXN0IHRoZSBzdGF0aXN0aWNhbApvbmVzLiBUaGlz IG1ha2VzIHdheSBmb3IgYSBwdWJsaWNseSB2aXNpYmxlIGVudW0gdGhhdCBoYXMgb25seQpzdGF0 aXN0aWNhbCBvbmVzLgotLS0KIHNyYy9iYWNrZW5kL3N0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMu YyB8IDEyICsrKysrKy0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL3JlbGF0aW9u X3N0YXRzLmMgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL3JlbGF0aW9uX3N0YXRzLmMKaW5kZXgg MjEzZjkyNGE0NGUuLmQ0NDU5OTgxZWJjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0 aWNzL3JlbGF0aW9uX3N0YXRzLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9yZWxhdGlv bl9zdGF0cy5jCkBAIC0zMSwxMCArMzEsMTAgQEAKIAogLyoKICAqIFBvc2l0aW9uYWwgYXJndW1l bnQgbnVtYmVycywgbmFtZXMsIGFuZCB0eXBlcyBmb3IKLSAqIHJlbGF0aW9uX3N0YXRpc3RpY3Nf dXBkYXRlKCkuCisgKiB1cGRhdGVfcmVsc3RhdHMoKS4KICAqLwogCi1lbnVtIHJlbGF0aW9uX3N0 YXRzX2FyZ251bQorZW51bSByZWxhdGlvbl9hcmdzX2FyZ251bQogewogCVJFTEFSR19TQ0hFTUEg PSAwLAogCVJFTEFSR19SRUxOQU1FLApAQCAtNTYsMTMgKzU2LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qg U3RhdHNBcmdJbmZvIHJlbGFyZ2luZm9bXSA9CiAJW1JFTEFSR19OVU1fUkVMQVJHU10gPSB7MH0K IH07CiAKLXN0YXRpYyBib29sIHJlbGF0aW9uX3N0YXRpc3RpY3NfdXBkYXRlKGNvbnN0IE51bGxh YmxlRGF0dW0gKmFyZ3MpOworc3RhdGljIGJvb2wgdXBkYXRlX3JlbHN0YXRzKGNvbnN0IE51bGxh YmxlRGF0dW0gKmFyZ3MpOwogCiAvKgogICogSW50ZXJuYWwgZnVuY3Rpb24gZm9yIG1vZGlmeWlu ZyBzdGF0aXN0aWNzIGZvciBhIHJlbGF0aW9uLgogICovCiBzdGF0aWMgYm9vbAotcmVsYXRpb25f c3RhdGlzdGljc191cGRhdGUoY29uc3QgTnVsbGFibGVEYXR1bSAqYXJncykKK3VwZGF0ZV9yZWxz dGF0cyhjb25zdCBOdWxsYWJsZURhdHVtICphcmdzKQogewogCWJvb2wJCXJlc3VsdCA9IHRydWU7 CiAJY2hhcgkgICAqbnNwbmFtZTsKQEAgLTIxOCw3ICsyMTgsNyBAQCBwZ19jbGVhcl9yZWxhdGlv bl9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQogCW5ld2ZjaW5mby0+YXJnc1s1XS52YWx1ZSA9IFVJ bnQzMkdldERhdHVtKDApOwogCW5ld2ZjaW5mby0+YXJnc1s1XS5pc251bGwgPSBmYWxzZTsKIAot CXJlbGF0aW9uX3N0YXRpc3RpY3NfdXBkYXRlKG5ld2ZjaW5mby0+YXJncyk7CisJdXBkYXRlX3Jl bHN0YXRzKG5ld2ZjaW5mby0+YXJncyk7CiAJUEdfUkVUVVJOX1ZPSUQoKTsKIH0KIApAQCAtMjMy LDcgKzIzMiw3IEBAIHBnX3Jlc3RvcmVfcmVsYXRpb25fc3RhdHMoUEdfRlVOQ1RJT05fQVJHUykK IAkJCQkJCQkJCQlyZWxhcmdpbmZvKSkKIAkJcmVzdWx0ID0gZmFsc2U7CiAKLQlpZiAoIXJlbGF0 aW9uX3N0YXRpc3RpY3NfdXBkYXRlKHBvc2l0aW9uYWxfYXJncykpCisJaWYgKCF1cGRhdGVfcmVs c3RhdHMocG9zaXRpb25hbF9hcmdzKSkKIAkJcmVzdWx0ID0gZmFsc2U7CiAKIAlQR19SRVRVUk5f Qk9PTChyZXN1bHQpOwotLSAKMi41MC4xIChBcHBsZSBHaXQtMTU1KQoK --000000000000e977f10655600bcf Content-Type: application/octet-stream; name="v2-0012-Add-attribute_statistics_update-refactor-update_a.patch" Content-Disposition: attachment; filename="v2-0012-Add-attribute_statistics_update-refactor-update_a.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqyw9g7511 RnJvbSA0YjgzMmM1YzczM2Y2YTkxOTU0NzI4N2M5ZmFmMTVmZmE0NWQyM2M0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogU3VuLCAyOCBKdW4gMjAyNiAyMzozMjozMyAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djIgMTIvMTNdIEFkZCBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUsIHJlZmFjdG9yCiB1cGRh dGVfYXR0c3RhdHMuCgpJbnRyb2R1Y2UgYSBuZXcgZW51bSBhdHRyaWJ1dGVfc3RhdHNfYXJnbnVt LCB3aGljaCBpcyBhIHN1YnNldCBvZgphdHRyaWJ1dGVfYXJnc19hcmdudW0gYnV0IGNvbnRhaW5z IG9ubHkgdGhlIHN0YXRpc3RpY2FsIHZhbHVlcy4KCk1vZGlmeSB1cGRhdGVfYXR0c3RhdHMgdG8g dGFrZSBhIFJlbGF0aW9uIGFyZ3VtZW50LCBhbmQgaW5kZXggdGhlCk51bGxhYmxlRGF0dW0gYXJy YXkgYnkgdGhlIG5ldyBlbnVtIGF0dHJpYnV0ZV9zdGF0c19hcmdudW0uIEFsbApwcm9jZXNzaW5n IGFuZCB2YWxpZGF0aW9uIG9mIG5vbi1zdGF0aXN0aWNhbCB2YWx1ZXMgbGlrZSBzY2hlbWEsCnJl bG5hbWUsIGF0dG5hbWUsIGF0dG51bSwgYXMgd2VsbCBhcyBjaGVja2luZyBmb3IgcmVjb3Zlcnkg bW9kZSBhbmQKYWNxdWlyaW5nIHRoZSBsb2NrIG9uIHRoZSBhdHRyaWJ1dGUgYXJlIG5vdyBoYW5k bGVkIGluIHRoZSBjYWxsaW5nCmZ1bmN0aW9ucyBwZ19yZXN0b3JlX2F0dHJpYnV0ZV9zdGF0cyBh bmQgcGdfY2xlYXJfYXR0cmlidXRlX3N0YXRzLiBJbgp0dXJuLCB0aG9zZSBmdW5jdGlvbnMgbXVz dCBub3cgcGFzcyB0aGUgc2hvcnRlciwgc3RhdGlzdGljcy1vbmx5IGFycmF5Cm9mIE51bGxhYmxl RGF0dW1zLCBhcyB3ZWxsIGFzIHRoZSBSZWxhdGlvbiBhcmd1bWVudCB0aGF0IGlzIG5vdyB0aGVp cgpyZXNwb25zaWJpbGl0eSB0byBvcGVuIGFuZCBjbG9zZS4KCkNyZWF0ZSBhIG5ldyBmdW5jdGlv biBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUgd2hpY2ggdGFrZXMgYXJndW1lbnRzCmZvciBS ZWxhdGlvbiwgYXR0bmFtZSwgYXR0bnVtLCBpbmhlcml0ZWQsIGFuZCBhcnJheXMgb2YgaXNudWxs IGFuZApjc3RyaW5nIHZhbHVlcyBhcmd1bWVudHMsIHdoaWNoIHdpbGwgYmUgdHJhbnNsYXRlZCBp bnRvIHRoZSBEYXR1bSB2YWx1ZXMKcmVxdWlyZWQgYnkgdXBkYXRlX2F0dHN0YXRzKCkuCgpUaGUg ZW5kIHJlc3VsdCBpcyB0aGF0IGFsbCB1c2VyLWZhY2luZyBmdW5jdGlvbnMgYXJlIGFibGUgdG8g Y2FsbCB0aGUKc2FtZSB1cGRhdGVfYXR0c3RhdHMoKS4KLS0tCiBzcmMvYmFja2VuZC9zdGF0aXN0 aWNzL2F0dHJpYnV0ZV9zdGF0cy5jIHwgNDE5ICsrKysrKysrKysrKysrKysrLS0tLS0tCiBzcmMv aW5jbHVkZS9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5oIHwgIDQ1ICsrKwogMiBmaWxlcyBj aGFuZ2VkLCAzNTYgaW5zZXJ0aW9ucygrKSwgMTA4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9pbmNsdWRlL3N0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmgKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5jIGIvc3JjL2JhY2tl bmQvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuYwppbmRleCAyNGMzMjA0ZTgzNy4uYzU1N2Y1 MjRiOWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRz LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuYwpAQCAtMjIs NiArMjIsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19vcGVyYXRvci5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1 ZGUgInN0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmgiCiAjaW5jbHVkZSAic3RhdGlzdGljcy9z dGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAic3RhdGlzdGljcy9zdGF0X3V0aWxzLmgiCiAjaW5jbHVk ZSAidXRpbHMvYXJyYXkuaCIKQEAgLTgxLDYgKzgyLDMxIEBAIHN0YXRpYyBzdHJ1Y3QgU3RhdHNB cmdJbmZvIGF0dGFyZ2luZm9bXSA9CiAJW0FUVEFSR19OVU1fQVRUQVJHU10gPSB7MH0KIH07CiAK K3N0YXRpYyBzdHJ1Y3QgU3RhdHNBcmdJbmZvIGF0dHN0YXRpbmZvW10gPQoreworCVtBVFRTVEFU X05VTExfRlJBQ10gPSB7Im51bGxfZnJhYyIsIEZMT0FUNE9JRH0sCisJW0FUVFNUQVRfQVZHX1dJ RFRIXSA9IHsiYXZnX3dpZHRoIiwgSU5UNE9JRH0sCisJW0FUVFNUQVRfTl9ESVNUSU5DVF0gPSB7 Im5fZGlzdGluY3QiLCBGTE9BVDRPSUR9LAorCVtBVFRTVEFUX01PU1RfQ09NTU9OX1ZBTFNdID0g eyJtb3N0X2NvbW1vbl92YWxzIiwgVEVYVE9JRH0sCisJW0FUVFNUQVRfTU9TVF9DT01NT05fRlJF UVNdID0geyJtb3N0X2NvbW1vbl9mcmVxcyIsIEZMT0FUNEFSUkFZT0lEfSwKKwlbQVRUU1RBVF9I SVNUT0dSQU1fQk9VTkRTXSA9IHsiaGlzdG9ncmFtX2JvdW5kcyIsIFRFWFRPSUR9LAorCVtBVFRT VEFUX0NPUlJFTEFUSU9OXSA9IHsiY29ycmVsYXRpb24iLCBGTE9BVDRPSUR9LAorCVtBVFRTVEFU X01PU1RfQ09NTU9OX0VMRU1TXSA9IHsibW9zdF9jb21tb25fZWxlbXMiLCBURVhUT0lEfSwKKwlb QVRUU1RBVF9NT1NUX0NPTU1PTl9FTEVNX0ZSRVFTXSA9IHsibW9zdF9jb21tb25fZWxlbV9mcmVx cyIsIEZMT0FUNEFSUkFZT0lEfSwKKwlbQVRUU1RBVF9FTEVNX0NPVU5UX0hJU1RPR1JBTV0gPSB7 ImVsZW1fY291bnRfaGlzdG9ncmFtIiwgRkxPQVQ0QVJSQVlPSUR9LAorCVtBVFRTVEFUX1JBTkdF X0xFTkdUSF9ISVNUT0dSQU1dID0geyJyYW5nZV9sZW5ndGhfaGlzdG9ncmFtIiwgVEVYVE9JRH0s CisJW0FUVFNUQVRfUkFOR0VfRU1QVFlfRlJBQ10gPSB7InJhbmdlX2VtcHR5X2ZyYWMiLCBGTE9B VDRPSUR9LAorCVtBVFRTVEFUX1JBTkdFX0JPVU5EU19ISVNUT0dSQU1dID0geyJyYW5nZV9ib3Vu ZHNfaGlzdG9ncmFtIiwgVEVYVE9JRH0sCisJW0FUVFNUQVRfTlVNX0FUVFNUQVRTXSA9IHswfQor fTsKKworLyoKKyAqIFRoZSBvcmRlciBvZiBzdGF0aXNpY3MgaW4gYXR0cmlidXRlX2FyZ3NfYXJn bnVtIGlzIHRoZSBzYW1lIGFzCisgKiBhdHRyaWJ1dGVfc3RhdHNfYXJnbnVtIHNvIHdoZW4gbWFw cGluZyBEYXR1bXMgZnJvbSBvbmUgdG8gdGhlIG90aGVyIHdlCisgKiBjYW4gdXNlIHRoaXMgb2Zm c2V0LgorICovCisjZGVmaW5lIEFSR1NfU1RBVFNfT0ZGU0VUIChBVFRBUkdfTlVNX0FUVEFSR1Mg LSBBVFRTVEFUX05VTV9BVFRTVEFUUykKKwogLyoKICAqIFBvc2l0aW9uYWwgYXJndW1lbnQgbnVt YmVycywgbmFtZXMsIGFuZCB0eXBlcyBmb3IKICAqIHBnX2NsZWFyX2F0dHJpYnV0ZV9zdGF0cygp LgpAQCAtMTA0LDcgKzEzMCw4IEBAIHN0YXRpYyBzdHJ1Y3QgU3RhdHNBcmdJbmZvIGNsZWFyYXJn aW5mb1tdID0KIAlbQ19BVFRBUkdfTlVNX0FUVEFSR1NdID0gezB9CiB9OwogCi1zdGF0aWMgYm9v bCB1cGRhdGVfYXR0c3RhdHMoY29uc3QgTnVsbGFibGVEYXR1bSAqYXJncyk7CitzdGF0aWMgYm9v bCB1cGRhdGVfYXR0c3RhdHMoUmVsYXRpb24gcmVsLCBjb25zdCBjaGFyICphdHRuYW1lLCBBdHRy TnVtYmVyIGF0dG51bSwKKwkJCQkJCQlib29sIGluaGVyaXRlZCwgY29uc3QgTnVsbGFibGVEYXR1 bSAqYXJncyk7CiBzdGF0aWMgdm9pZCB1cHNlcnRfcGdfc3RhdGlzdGljKFJlbGF0aW9uIHN0YXJl bCwgSGVhcFR1cGxlIG9sZHR1cCwKIAkJCQkJCQkJY29uc3QgRGF0dW0gKnZhbHVlcywgY29uc3Qg Ym9vbCAqbnVsbHMsIGNvbnN0IGJvb2wgKnJlcGxhY2VzKTsKIHN0YXRpYyBib29sIGRlbGV0ZV9w Z19zdGF0aXN0aWMoT2lkIHJlbG9pZCwgQXR0ck51bWJlciBhdHRudW0sIGJvb2wgc3RhaW5oZXJp dCk7CkBAIC0xMjYsMTYgKzE1Myw5IEBAIHN0YXRpYyBib29sIGRlbGV0ZV9wZ19zdGF0aXN0aWMo T2lkIHJlbG9pZCwgQXR0ck51bWJlciBhdHRudW0sIGJvb2wgc3RhaW5oZXJpdCk7CiAgKiBhbmQg b3RoZXIgc3RhdGlzdGljIGtpbmRzIG1heSBzdGlsbCBiZSB1cGRhdGVkLgogICovCiBzdGF0aWMg Ym9vbAotdXBkYXRlX2F0dHN0YXRzKGNvbnN0IE51bGxhYmxlRGF0dW0gKmFyZ3MpCit1cGRhdGVf YXR0c3RhdHMoUmVsYXRpb24gcmVsLCBjb25zdCBjaGFyICphdHRuYW1lLCBBdHRyTnVtYmVyIGF0 dG51bSwKKwkJCQlib29sIGluaGVyaXRlZCwgY29uc3QgTnVsbGFibGVEYXR1bSAqYXJncykKIHsK LQljaGFyCSAgICpuc3BuYW1lOwotCWNoYXIJICAgKnJlbG5hbWU7Ci0JT2lkCQkJcmVsb2lkOwot CWNoYXIJICAgKmF0dG5hbWU7Ci0JQXR0ck51bWJlcglhdHRudW07Ci0JYm9vbAkJaW5oZXJpdGVk OwotCU9pZAkJCWxvY2tlZF90YWJsZSA9IEludmFsaWRPaWQ7Ci0KIAlSZWxhdGlvbglzdGFyZWw7 CiAJSGVhcFR1cGxlCXN0YXR1cDsKIApAQCAtMTUxLDE2ICsxNzEsMTYgQEAgdXBkYXRlX2F0dHN0 YXRzKGNvbnN0IE51bGxhYmxlRGF0dW0gKmFyZ3MpCiAKIAlGbWdySW5mbwlhcnJheV9pbl9mbjsK IAotCWJvb2wJCWRvX21jdiA9ICFhcmdzW0FUVEFSR19NT1NUX0NPTU1PTl9GUkVRU10uaXNudWxs ICYmCi0JCSFhcmdzW0FUVEFSR19NT1NUX0NPTU1PTl9WQUxTXS5pc251bGw7Ci0JYm9vbAkJZG9f aGlzdG9ncmFtID0gIWFyZ3NbQVRUQVJHX0hJU1RPR1JBTV9CT1VORFNdLmlzbnVsbDsKLQlib29s CQlkb19jb3JyZWxhdGlvbiA9ICFhcmdzW0FUVEFSR19DT1JSRUxBVElPTl0uaXNudWxsOwotCWJv b2wJCWRvX21jZWxlbSA9ICFhcmdzW0FUVEFSR19NT1NUX0NPTU1PTl9FTEVNU10uaXNudWxsICYm Ci0JCSFhcmdzW0FUVEFSR19NT1NUX0NPTU1PTl9FTEVNX0ZSRVFTXS5pc251bGw7Ci0JYm9vbAkJ ZG9fZGVjaGlzdCA9ICFhcmdzW0FUVEFSR19FTEVNX0NPVU5UX0hJU1RPR1JBTV0uaXNudWxsOwot CWJvb2wJCWRvX2JvdW5kc19oaXN0b2dyYW0gPSAhYXJnc1tBVFRBUkdfUkFOR0VfQk9VTkRTX0hJ U1RPR1JBTV0uaXNudWxsOwotCWJvb2wJCWRvX3JhbmdlX2xlbmd0aF9oaXN0b2dyYW0gPSAhYXJn c1tBVFRBUkdfUkFOR0VfTEVOR1RIX0hJU1RPR1JBTV0uaXNudWxsICYmCi0JCSFhcmdzW0FUVEFS R19SQU5HRV9FTVBUWV9GUkFDXS5pc251bGw7CisJYm9vbAkJZG9fbWN2ID0gIWFyZ3NbQVRUU1RB VF9NT1NUX0NPTU1PTl9GUkVRU10uaXNudWxsICYmCisJCSFhcmdzW0FUVFNUQVRfTU9TVF9DT01N T05fVkFMU10uaXNudWxsOworCWJvb2wJCWRvX2hpc3RvZ3JhbSA9ICFhcmdzW0FUVFNUQVRfSElT VE9HUkFNX0JPVU5EU10uaXNudWxsOworCWJvb2wJCWRvX2NvcnJlbGF0aW9uID0gIWFyZ3NbQVRU U1RBVF9DT1JSRUxBVElPTl0uaXNudWxsOworCWJvb2wJCWRvX21jZWxlbSA9ICFhcmdzW0FUVFNU QVRfTU9TVF9DT01NT05fRUxFTVNdLmlzbnVsbCAmJgorCQkhYXJnc1tBVFRTVEFUX01PU1RfQ09N TU9OX0VMRU1fRlJFUVNdLmlzbnVsbDsKKwlib29sCQlkb19kZWNoaXN0ID0gIWFyZ3NbQVRUU1RB VF9FTEVNX0NPVU5UX0hJU1RPR1JBTV0uaXNudWxsOworCWJvb2wJCWRvX2JvdW5kc19oaXN0b2dy YW0gPSAhYXJnc1tBVFRTVEFUX1JBTkdFX0JPVU5EU19ISVNUT0dSQU1dLmlzbnVsbDsKKwlib29s CQlkb19yYW5nZV9sZW5ndGhfaGlzdG9ncmFtID0gIWFyZ3NbQVRUU1RBVF9SQU5HRV9MRU5HVEhf SElTVE9HUkFNXS5pc251bGwgJiYKKwkJIWFyZ3NbQVRUU1RBVF9SQU5HRV9FTVBUWV9GUkFDXS5p c251bGw7CiAKIAlEYXR1bQkJdmFsdWVzW05hdHRzX3BnX3N0YXRpc3RpY10gPSB7MH07CiAJYm9v bAkJbnVsbHNbTmF0dHNfcGdfc3RhdGlzdGljXSA9IHswfTsKQEAgLTE2OCwxMTYgKzE4OCw1OSBA QCB1cGRhdGVfYXR0c3RhdHMoY29uc3QgTnVsbGFibGVEYXR1bSAqYXJncykKIAogCWJvb2wJCXJl c3VsdCA9IHRydWU7CiAKLQlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoYXJncywgYXR0YXJnaW5m bywgQVRUQVJHX0FUVFJFTFNDSEVNQSk7Ci0Jc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGFyZ3Ms IGF0dGFyZ2luZm8sIEFUVEFSR19BVFRSRUxOQU1FKTsKLQotCW5zcG5hbWUgPSBUZXh0RGF0dW1H ZXRDU3RyaW5nKGFyZ3NbQVRUQVJHX0FUVFJFTFNDSEVNQV0udmFsdWUpOwotCXJlbG5hbWUgPSBU ZXh0RGF0dW1HZXRDU3RyaW5nKGFyZ3NbQVRUQVJHX0FUVFJFTE5BTUVdLnZhbHVlKTsKLQotCWlm IChSZWNvdmVyeUluUHJvZ3Jlc3MoKSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShF UlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKLQkJCQkgZXJybXNnKCJy ZWNvdmVyeSBpcyBpbiBwcm9ncmVzcyIpLAotCQkJCSBlcnJoaW50KCJTdGF0aXN0aWNzIGNhbm5v dCBiZSBtb2RpZmllZCBkdXJpbmcgcmVjb3ZlcnkuIikpKTsKLQotCS8qIGxvY2sgYmVmb3JlIGxv b2tpbmcgdXAgYXR0cmlidXRlICovCi0JcmVsb2lkID0gUmFuZ2VWYXJHZXRSZWxpZEV4dGVuZGVk KG1ha2VSYW5nZVZhcihuc3BuYW1lLCByZWxuYW1lLCAtMSksCi0JCQkJCQkJCQkgIFNoYXJlVXBk YXRlRXhjbHVzaXZlTG9jaywgMCwKLQkJCQkJCQkJCSAgUmFuZ2VWYXJDYWxsYmFja0ZvclN0YXRz LCAmbG9ja2VkX3RhYmxlKTsKLQotCS8qIHVzZXIgY2FuIHNwZWNpZnkgZWl0aGVyIGF0dG5hbWUg b3IgYXR0bnVtLCBidXQgbm90IGJvdGggKi8KLQlpZiAoIWFyZ3NbQVRUQVJHX0FUVE5BTUVdLmlz bnVsbCkKLQl7Ci0JCWlmICghYXJnc1tBVFRBUkdfQVRUTlVNXS5pc251bGwpCi0JCQllcmVwb3J0 KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK LQkJCQkJIGVycm1zZygiY2Fubm90IHNwZWNpZnkgYm90aCBcIiVzXCIgYW5kIFwiJXNcIiIsICJh dHRuYW1lIiwgImF0dG51bSIpKSk7Ci0JCWF0dG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGFy Z3NbQVRUQVJHX0FUVE5BTUVdLnZhbHVlKTsKLQkJYXR0bnVtID0gZ2V0X2F0dG51bShyZWxvaWQs IGF0dG5hbWUpOwotCQkvKiBub3RlIHRoYXQgdGhpcyB0ZXN0IGNvdmVycyBhdHRpc2Ryb3BwZWQg Y2FzZXMgdG9vOiAqLwotCQlpZiAoYXR0bnVtID09IEludmFsaWRBdHRyTnVtYmVyKQotCQkJZXJl cG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfQ09MVU1OKSwKLQkJ CQkJIGVycm1zZygiY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiBcIiVzXCIgZG9lcyBub3QgZXhp c3QiLAotCQkJCQkJCWF0dG5hbWUsIHJlbG5hbWUpKSk7Ci0JfQotCWVsc2UgaWYgKCFhcmdzW0FU VEFSR19BVFROVU1dLmlzbnVsbCkKLQl7Ci0JCWF0dG51bSA9IERhdHVtR2V0SW50MTYoYXJnc1tB VFRBUkdfQVRUTlVNXS52YWx1ZSk7Ci0JCWF0dG5hbWUgPSBnZXRfYXR0bmFtZShyZWxvaWQsIGF0 dG51bSwgdHJ1ZSk7Ci0JCS8qIGFubm95aW5nbHksIGdldF9hdHRuYW1lIGRvZXNuJ3QgY2hlY2sg YXR0aXNkcm9wcGVkICovCi0JCWlmIChhdHRuYW1lID09IE5VTEwgfHwKLQkJCSFTZWFyY2hTeXND YWNoZUV4aXN0c0F0dE5hbWUocmVsb2lkLCBhdHRuYW1lKSkKLQkJCWVyZXBvcnQoRVJST1IsCi0J CQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX0NPTFVNTiksCi0JCQkJCSBlcnJtc2coImNv bHVtbiAlZCBvZiByZWxhdGlvbiBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLAotCQkJCQkJCWF0dG51 bSwgcmVsbmFtZSkpKTsKLQl9Ci0JZWxzZQotCXsKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKLQkJCQkgZXJybXNnKCJtdXN0 IHNwZWNpZnkgZWl0aGVyIFwiJXNcIiBvciBcIiVzXCIiLCAiYXR0bmFtZSIsICJhdHRudW0iKSkp OwotCQlhdHRuYW1lID0gTlVMTDsJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCi0JCWF0dG51 bSA9IDA7Ci0JfQotCiAJaWYgKGF0dG51bSA8IDApCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVy cmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coImNhbm5v dCBtb2RpZnkgc3RhdGlzdGljcyBvbiBzeXN0ZW0gY29sdW1uIFwiJXNcIiIsCiAJCQkJCQlhdHRu YW1lKSkpOwogCi0Jc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGFyZ3MsIGF0dGFyZ2luZm8sIEFU VEFSR19JTkhFUklURUQpOwotCWluaGVyaXRlZCA9IERhdHVtR2V0Qm9vbChhcmdzW0FUVEFSR19J TkhFUklURURdLnZhbHVlKTsKLQogCS8qCiAJICogQ2hlY2sgYXJndW1lbnQgc2FuaXR5LiBJZiBz b21lIGFyZ3VtZW50cyBhcmUgdW51c2FibGUsIGVtaXQgYSBXQVJOSU5HCiAJICogYW5kIHNldCB0 aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudCB0byBOVUxMIGluIGZjaW5mby4KIAkgKi8KIAotCWlm ICghc3RhdHNfY2hlY2tfYXJnX2FycmF5KGFyZ3MsIGF0dGFyZ2luZm8sIEFUVEFSR19NT1NUX0NP TU1PTl9GUkVRUykpCisJaWYgKCFzdGF0c19jaGVja19hcmdfYXJyYXkoYXJncywgYXR0c3RhdGlu Zm8sIEFUVFNUQVRfTU9TVF9DT01NT05fRlJFUVMpKQogCXsKIAkJZG9fbWN2ID0gZmFsc2U7CiAJ CXJlc3VsdCA9IGZhbHNlOwogCX0KIAotCWlmICghc3RhdHNfY2hlY2tfYXJnX2FycmF5KGFyZ3Ms IGF0dGFyZ2luZm8sIEFUVEFSR19NT1NUX0NPTU1PTl9FTEVNX0ZSRVFTKSkKKwlpZiAoIXN0YXRz X2NoZWNrX2FyZ19hcnJheShhcmdzLCBhdHRzdGF0aW5mbywgQVRUU1RBVF9NT1NUX0NPTU1PTl9F TEVNX0ZSRVFTKSkKIAl7CiAJCWRvX21jZWxlbSA9IGZhbHNlOwogCQlyZXN1bHQgPSBmYWxzZTsK IAl9Ci0JaWYgKCFzdGF0c19jaGVja19hcmdfYXJyYXkoYXJncywgYXR0YXJnaW5mbywgQVRUQVJH X0VMRU1fQ09VTlRfSElTVE9HUkFNKSkKKwlpZiAoIXN0YXRzX2NoZWNrX2FyZ19hcnJheShhcmdz LCBhdHRzdGF0aW5mbywgQVRUU1RBVF9FTEVNX0NPVU5UX0hJU1RPR1JBTSkpCiAJewogCQlkb19k ZWNoaXN0ID0gZmFsc2U7CiAJCXJlc3VsdCA9IGZhbHNlOwogCX0KIAotCWlmICghc3RhdHNfY2hl Y2tfYXJnX3BhaXIoYXJncywgYXR0YXJnaW5mbywKLQkJCQkJCQkgIEFUVEFSR19NT1NUX0NPTU1P Tl9WQUxTLCBBVFRBUkdfTU9TVF9DT01NT05fRlJFUVMpKQorCWlmICghc3RhdHNfY2hlY2tfYXJn X3BhaXIoYXJncywgYXR0c3RhdGluZm8sCisJCQkJCQkJICBBVFRTVEFUX01PU1RfQ09NTU9OX1ZB TFMsIEFUVFNUQVRfTU9TVF9DT01NT05fRlJFUVMpKQogCXsKIAkJZG9fbWN2ID0gZmFsc2U7CiAJ CXJlc3VsdCA9IGZhbHNlOwogCX0KIAotCWlmICghc3RhdHNfY2hlY2tfYXJnX3BhaXIoYXJncywg YXR0YXJnaW5mbywKLQkJCQkJCQkgIEFUVEFSR19NT1NUX0NPTU1PTl9FTEVNUywKLQkJCQkJCQkg IEFUVEFSR19NT1NUX0NPTU1PTl9FTEVNX0ZSRVFTKSkKKwlpZiAoIXN0YXRzX2NoZWNrX2FyZ19w YWlyKGFyZ3MsIGF0dHN0YXRpbmZvLAorCQkJCQkJCSAgQVRUU1RBVF9NT1NUX0NPTU1PTl9FTEVN UywKKwkJCQkJCQkgIEFUVFNUQVRfTU9TVF9DT01NT05fRUxFTV9GUkVRUykpCiAJewogCQlkb19t Y2VsZW0gPSBmYWxzZTsKIAkJcmVzdWx0ID0gZmFsc2U7CiAJfQogCi0JaWYgKCFzdGF0c19jaGVj a19hcmdfcGFpcihhcmdzLCBhdHRhcmdpbmZvLAotCQkJCQkJCSAgQVRUQVJHX1JBTkdFX0xFTkdU SF9ISVNUT0dSQU0sCi0JCQkJCQkJICBBVFRBUkdfUkFOR0VfRU1QVFlfRlJBQykpCisJaWYgKCFz dGF0c19jaGVja19hcmdfcGFpcihhcmdzLCBhdHRzdGF0aW5mbywKKwkJCQkJCQkgIEFUVFNUQVRf UkFOR0VfTEVOR1RIX0hJU1RPR1JBTSwKKwkJCQkJCQkgIEFUVFNUQVRfUkFOR0VfRU1QVFlfRlJB QykpCiAJewogCQlkb19yYW5nZV9sZW5ndGhfaGlzdG9ncmFtID0gZmFsc2U7CiAJCXJlc3VsdCA9 IGZhbHNlOwogCX0KIAogCS8qIGRlcml2ZSBpbmZvcm1hdGlvbiBmcm9tIGF0dHJpYnV0ZSAqLwot CXN0YXRhdHRfZ2V0X3R5cGUocmVsb2lkLCBhdHRudW0sCisJc3RhdGF0dF9nZXRfdHlwZShSZWxh dGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSwKIAkJCQkJICZhdHR0eXBpZCwgJmF0dHR5cG1vZCwK IAkJCQkJICZhdHR0eXB0eXBlLCAmYXR0dHlwY29sbCwKIAkJCQkJICZlcV9vcHIsICZsdF9vcHIp OwpAQCAtMzM0LDI5ICsyOTcsMjkgQEAgdXBkYXRlX2F0dHN0YXRzKGNvbnN0IE51bGxhYmxlRGF0 dW0gKmFyZ3MpCiAKIAlzdGFyZWwgPSB0YWJsZV9vcGVuKFN0YXRpc3RpY1JlbGF0aW9uSWQsIFJv d0V4Y2x1c2l2ZUxvY2spOwogCi0Jc3RhdHVwID0gU2VhcmNoU3lzQ2FjaGUzKFNUQVRSRUxBVFRJ TkgsIE9iamVjdElkR2V0RGF0dW0ocmVsb2lkKSwgSW50MTZHZXREYXR1bShhdHRudW0pLCBCb29s R2V0RGF0dW0oaW5oZXJpdGVkKSk7CisJc3RhdHVwID0gU2VhcmNoU3lzQ2FjaGUzKFNUQVRSRUxB VFRJTkgsIE9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpKSwgSW50MTZHZXRE YXR1bShhdHRudW0pLCBCb29sR2V0RGF0dW0oaW5oZXJpdGVkKSk7CiAKIAkvKiBpbml0aWFsaXpl IGZyb20gZXhpc3RpbmcgdHVwbGUgaWYgZXhpc3RzICovCiAJaWYgKEhlYXBUdXBsZUlzVmFsaWQo c3RhdHVwKSkKIAkJaGVhcF9kZWZvcm1fdHVwbGUoc3RhdHVwLCBSZWxhdGlvbkdldERlc2NyKHN0 YXJlbCksIHZhbHVlcywgbnVsbHMpOwogCWVsc2UKLQkJc3RhdGF0dF9pbml0X2VtcHR5X3R1cGxl KHJlbG9pZCwgYXR0bnVtLCBpbmhlcml0ZWQsIHZhbHVlcywgbnVsbHMsCisJCXN0YXRhdHRfaW5p dF9lbXB0eV90dXBsZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSwgaW5oZXJpdGVkLCB2 YWx1ZXMsIG51bGxzLAogCQkJCQkJCQkgcmVwbGFjZXMpOwogCiAJLyogaWYgc3BlY2lmaWVkLCBz ZXQgdG8gYXJndW1lbnQgdmFsdWVzICovCi0JaWYgKCFhcmdzW0FUVEFSR19OVUxMX0ZSQUNdLmlz bnVsbCkKKwlpZiAoIWFyZ3NbQVRUU1RBVF9OVUxMX0ZSQUNdLmlzbnVsbCkKIAl7Ci0JCXZhbHVl c1tBbnVtX3BnX3N0YXRpc3RpY19zdGFudWxsZnJhYyAtIDFdID0gYXJnc1tBVFRBUkdfTlVMTF9G UkFDXS52YWx1ZTsKKwkJdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YW51bGxmcmFjIC0gMV0g PSBhcmdzW0FUVFNUQVRfTlVMTF9GUkFDXS52YWx1ZTsKIAkJcmVwbGFjZXNbQW51bV9wZ19zdGF0 aXN0aWNfc3RhbnVsbGZyYWMgLSAxXSA9IHRydWU7CiAJfQotCWlmICghYXJnc1tBVFRBUkdfQVZH X1dJRFRIXS5pc251bGwpCisJaWYgKCFhcmdzW0FUVFNUQVRfQVZHX1dJRFRIXS5pc251bGwpCiAJ ewotCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3Rhd2lkdGggLSAxXSA9IGFyZ3NbQVRUQVJH X0FWR19XSURUSF0udmFsdWU7CisJCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGF3aWR0aCAt IDFdID0gYXJnc1tBVFRTVEFUX0FWR19XSURUSF0udmFsdWU7CiAJCXJlcGxhY2VzW0FudW1fcGdf c3RhdGlzdGljX3N0YXdpZHRoIC0gMV0gPSB0cnVlOwogCX0KLQlpZiAoIWFyZ3NbQVRUQVJHX05f RElTVElOQ1RdLmlzbnVsbCkKKwlpZiAoIWFyZ3NbQVRUU1RBVF9OX0RJU1RJTkNUXS5pc251bGwp CiAJewotCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhZGlzdGluY3QgLSAxXSA9IGFyZ3Nb QVRUQVJHX05fRElTVElOQ1RdLnZhbHVlOworCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3Rh ZGlzdGluY3QgLSAxXSA9IGFyZ3NbQVRUU1RBVF9OX0RJU1RJTkNUXS52YWx1ZTsKIAkJcmVwbGFj ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhZGlzdGluY3QgLSAxXSA9IHRydWU7CiAJfQogCkBAIC0z NjQsMTAgKzMyNywxMCBAQCB1cGRhdGVfYXR0c3RhdHMoY29uc3QgTnVsbGFibGVEYXR1bSAqYXJn cykKIAlpZiAoZG9fbWN2KQogCXsKIAkJYm9vbAkJY29udmVydGVkOwotCQlEYXR1bQkJc3RhbnVt YmVycyA9IGFyZ3NbQVRUQVJHX01PU1RfQ09NTU9OX0ZSRVFTXS52YWx1ZTsKKwkJRGF0dW0JCXN0 YW51bWJlcnMgPSBhcmdzW0FUVFNUQVRfTU9TVF9DT01NT05fRlJFUVNdLnZhbHVlOwogCQlEYXR1 bQkJc3RhdmFsdWVzID0gc3RhdGF0dF9idWlsZF9zdGF2YWx1ZXMoIm1vc3RfY29tbW9uX3ZhbHMi LAogCQkJCQkJCQkJCQkJCQkmYXJyYXlfaW5fZm4sCi0JCQkJCQkJCQkJCQkJCWFyZ3NbQVRUQVJH X01PU1RfQ09NTU9OX1ZBTFNdLnZhbHVlLAorCQkJCQkJCQkJCQkJCQlhcmdzW0FUVFNUQVRfTU9T VF9DT01NT05fVkFMU10udmFsdWUsCiAJCQkJCQkJCQkJCQkJCWF0dHR5cGlkLCBhdHR0eXBtb2Qs CiAJCQkJCQkJCQkJCQkJCSZjb252ZXJ0ZWQpOwogCkBAIC00MDcsNyArMzcwLDcgQEAgdXBkYXRl X2F0dHN0YXRzKGNvbnN0IE51bGxhYmxlRGF0dW0gKmFyZ3MpCiAKIAkJc3RhdmFsdWVzID0gc3Rh dGF0dF9idWlsZF9zdGF2YWx1ZXMoImhpc3RvZ3JhbV9ib3VuZHMiLAogCQkJCQkJCQkJCQkmYXJy YXlfaW5fZm4sCi0JCQkJCQkJCQkJCWFyZ3NbQVRUQVJHX0hJU1RPR1JBTV9CT1VORFNdLnZhbHVl LAorCQkJCQkJCQkJCQlhcmdzW0FUVFNUQVRfSElTVE9HUkFNX0JPVU5EU10udmFsdWUsCiAJCQkJ CQkJCQkJCWF0dHR5cGlkLCBhdHR0eXBtb2QsCiAJCQkJCQkJCQkJCSZjb252ZXJ0ZWQpOwogCkBA IC00MjUsNyArMzg4LDcgQEAgdXBkYXRlX2F0dHN0YXRzKGNvbnN0IE51bGxhYmxlRGF0dW0gKmFy Z3MpCiAJLyogU1RBVElTVElDX0tJTkRfQ09SUkVMQVRJT04gKi8KIAlpZiAoZG9fY29ycmVsYXRp b24pCiAJewotCQlEYXR1bQkJZWxlbXNbXSA9IHthcmdzW0FUVEFSR19DT1JSRUxBVElPTl0udmFs dWV9OworCQlEYXR1bQkJZWxlbXNbXSA9IHthcmdzW0FUVFNUQVRfQ09SUkVMQVRJT05dLnZhbHVl fTsKIAkJQXJyYXlUeXBlICAqYXJyeSA9IGNvbnN0cnVjdF9hcnJheV9idWlsdGluKGVsZW1zLCAx LCBGTE9BVDRPSUQpOwogCQlEYXR1bQkJc3RhbnVtYmVycyA9IFBvaW50ZXJHZXREYXR1bShhcnJ5 KTsKIApAQCAtNDM4LDEzICs0MDEsMTMgQEAgdXBkYXRlX2F0dHN0YXRzKGNvbnN0IE51bGxhYmxl RGF0dW0gKmFyZ3MpCiAJLyogU1RBVElTVElDX0tJTkRfTUNFTEVNICovCiAJaWYgKGRvX21jZWxl bSkKIAl7Ci0JCURhdHVtCQlzdGFudW1iZXJzID0gYXJnc1tBVFRBUkdfTU9TVF9DT01NT05fRUxF TV9GUkVRU10udmFsdWU7CisJCURhdHVtCQlzdGFudW1iZXJzID0gYXJnc1tBVFRTVEFUX01PU1Rf Q09NTU9OX0VMRU1fRlJFUVNdLnZhbHVlOwogCQlib29sCQljb252ZXJ0ZWQgPSBmYWxzZTsKIAkJ RGF0dW0JCXN0YXZhbHVlczsKIAogCQlzdGF2YWx1ZXMgPSBzdGF0YXR0X2J1aWxkX3N0YXZhbHVl cygibW9zdF9jb21tb25fZWxlbXMiLAogCQkJCQkJCQkJCQkmYXJyYXlfaW5fZm4sCi0JCQkJCQkJ CQkJCWFyZ3NbQVRUQVJHX01PU1RfQ09NTU9OX0VMRU1TXS52YWx1ZSwKKwkJCQkJCQkJCQkJYXJn c1tBVFRTVEFUX01PU1RfQ09NTU9OX0VMRU1TXS52YWx1ZSwKIAkJCQkJCQkJCQkJZWxlbXR5cGlk LCBhdHR0eXBtb2QsCiAJCQkJCQkJCQkJCSZjb252ZXJ0ZWQpOwogCkBAIC00NjIsNyArNDI1LDcg QEAgdXBkYXRlX2F0dHN0YXRzKGNvbnN0IE51bGxhYmxlRGF0dW0gKmFyZ3MpCiAJLyogU1RBVElT VElDX0tJTkRfREVDSElTVCAqLwogCWlmIChkb19kZWNoaXN0KQogCXsKLQkJRGF0dW0JCXN0YW51 bWJlcnMgPSBhcmdzW0FUVEFSR19FTEVNX0NPVU5UX0hJU1RPR1JBTV0udmFsdWU7CisJCURhdHVt CQlzdGFudW1iZXJzID0gYXJnc1tBVFRTVEFUX0VMRU1fQ09VTlRfSElTVE9HUkFNXS52YWx1ZTsK IAogCQlzdGF0YXR0X3NldF9zbG90KHZhbHVlcywgbnVsbHMsIHJlcGxhY2VzLAogCQkJCQkJIFNU QVRJU1RJQ19LSU5EX0RFQ0hJU1QsCkBAIC00ODQsNyArNDQ3LDcgQEAgdXBkYXRlX2F0dHN0YXRz KGNvbnN0IE51bGxhYmxlRGF0dW0gKmFyZ3MpCiAKIAkJc3RhdmFsdWVzID0gc3RhdGF0dF9idWls ZF9zdGF2YWx1ZXMoInJhbmdlX2JvdW5kc19oaXN0b2dyYW0iLAogCQkJCQkJCQkJCQkmYXJyYXlf aW5fZm4sCi0JCQkJCQkJCQkJCWFyZ3NbQVRUQVJHX1JBTkdFX0JPVU5EU19ISVNUT0dSQU1dLnZh bHVlLAorCQkJCQkJCQkJCQlhcmdzW0FUVFNUQVRfUkFOR0VfQk9VTkRTX0hJU1RPR1JBTV0udmFs dWUsCiAJCQkJCQkJCQkJCWF0dHR5cGlkLCBhdHR0eXBtb2QsCiAJCQkJCQkJCQkJCSZjb252ZXJ0 ZWQpOwogCkBAIC01MDMsNyArNDY2LDcgQEAgdXBkYXRlX2F0dHN0YXRzKGNvbnN0IE51bGxhYmxl RGF0dW0gKmFyZ3MpCiAJaWYgKGRvX3JhbmdlX2xlbmd0aF9oaXN0b2dyYW0pCiAJewogCQkvKiBU aGUgYW55YXJyYXkgaXMgYWx3YXlzIGEgZmxvYXQ4W10gZm9yIHRoaXMgc3Rha2luZCAqLwotCQlE YXR1bQkJZWxlbXNbXSA9IHthcmdzW0FUVEFSR19SQU5HRV9FTVBUWV9GUkFDXS52YWx1ZX07CisJ CURhdHVtCQllbGVtc1tdID0ge2FyZ3NbQVRUU1RBVF9SQU5HRV9FTVBUWV9GUkFDXS52YWx1ZX07 CiAJCUFycmF5VHlwZSAgKmFycnkgPSBjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihlbGVtcywgMSwg RkxPQVQ0T0lEKTsKIAkJRGF0dW0JCXN0YW51bWJlcnMgPSBQb2ludGVyR2V0RGF0dW0oYXJyeSk7 CiAKQEAgLTUxMiw3ICs0NzUsNyBAQCB1cGRhdGVfYXR0c3RhdHMoY29uc3QgTnVsbGFibGVEYXR1 bSAqYXJncykKIAogCQlzdGF2YWx1ZXMgPSBzdGF0YXR0X2J1aWxkX3N0YXZhbHVlcygicmFuZ2Vf bGVuZ3RoX2hpc3RvZ3JhbSIsCiAJCQkJCQkJCQkJCSZhcnJheV9pbl9mbiwKLQkJCQkJCQkJCQkJ YXJnc1tBVFRBUkdfUkFOR0VfTEVOR1RIX0hJU1RPR1JBTV0udmFsdWUsCisJCQkJCQkJCQkJCWFy Z3NbQVRUU1RBVF9SQU5HRV9MRU5HVEhfSElTVE9HUkFNXS52YWx1ZSwKIAkJCQkJCQkJCQkJRkxP QVQ4T0lELCAwLCAmY29udmVydGVkKTsKIAogCQlpZiAoY29udmVydGVkKQpAQCAtNjc0LDE0ICs2 MzcsMjU0IEBAIERhdHVtCiBwZ19yZXN0b3JlX2F0dHJpYnV0ZV9zdGF0cyhQR19GVU5DVElPTl9B UkdTKQogewogCU51bGxhYmxlRGF0dW0gcG9zaXRpb25hbF9hcmdzW0FUVEFSR19OVU1fQVRUQVJH U107CisJTnVsbGFibGVEYXR1bSBzdGF0c1tBVFRTVEFUX05VTV9BVFRTVEFUU107CisKKwljaGFy CSAgICpuc3BuYW1lOworCWNoYXIJICAgKnJlbG5hbWU7CisJT2lkCQkJcmVsb2lkOworCWNoYXIJ ICAgKmF0dG5hbWU7CisJQXR0ck51bWJlcglhdHRudW07CisJYm9vbAkJaW5oZXJpdGVkOworCU9p ZAkJCWxvY2tlZF90YWJsZSA9IEludmFsaWRPaWQ7CisJUmVsYXRpb24JcmVsOworCiAJYm9vbAkJ cmVzdWx0ID0gdHJ1ZTsKIAogCWlmICghc3RhdHNfZmlsbF9hcmdzX2Zyb21fYXJnX3BhaXJzKGZj aW5mbywgcG9zaXRpb25hbF9hcmdzLAogCQkJCQkJCQkJCWF0dGFyZ2luZm8pKQogCQlyZXN1bHQg PSBmYWxzZTsKIAotCWlmICghdXBkYXRlX2F0dHN0YXRzKHBvc2l0aW9uYWxfYXJncykpCisJc3Rh dHNfY2hlY2tfcmVxdWlyZWRfYXJnKHBvc2l0aW9uYWxfYXJncywgYXR0YXJnaW5mbywgQVRUQVJH X0FUVFJFTFNDSEVNQSk7CisJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKHBvc2l0aW9uYWxfYXJn cywgYXR0YXJnaW5mbywgQVRUQVJHX0FUVFJFTE5BTUUpOworCisJbnNwbmFtZSA9IFRleHREYXR1 bUdldENTdHJpbmcocG9zaXRpb25hbF9hcmdzW0FUVEFSR19BVFRSRUxTQ0hFTUFdLnZhbHVlKTsK KwlyZWxuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhwb3NpdGlvbmFsX2FyZ3NbQVRUQVJHX0FU VFJFTE5BTUVdLnZhbHVlKTsKKworCWlmIChSZWNvdmVyeUluUHJvZ3Jlc3MoKSkKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRF X1NUQVRFKSwKKwkJCQkgZXJybXNnKCJyZWNvdmVyeSBpcyBpbiBwcm9ncmVzcyIpLAorCQkJCSBl cnJoaW50KCJTdGF0aXN0aWNzIGNhbm5vdCBiZSBtb2RpZmllZCBkdXJpbmcgcmVjb3ZlcnkuIikp KTsKKworCS8qIGxvY2sgYmVmb3JlIGxvb2tpbmcgdXAgYXR0cmlidXRlICovCisJcmVsb2lkID0g UmFuZ2VWYXJHZXRSZWxpZEV4dGVuZGVkKG1ha2VSYW5nZVZhcihuc3BuYW1lLCByZWxuYW1lLCAt MSksCisJCQkJCQkJCQkgIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jaywgMCwKKwkJCQkJCQkJCSAg UmFuZ2VWYXJDYWxsYmFja0ZvclN0YXRzLCAmbG9ja2VkX3RhYmxlKTsKKwlyZWwgPSByZWxhdGlv bl9vcGVuKHJlbG9pZCwgTm9Mb2NrKTsKKworCS8qIHVzZXIgY2FuIHNwZWNpZnkgZWl0aGVyIGF0 dG5hbWUgb3IgYXR0bnVtLCBidXQgbm90IGJvdGggKi8KKwlpZiAoIXBvc2l0aW9uYWxfYXJnc1tB VFRBUkdfQVRUTkFNRV0uaXNudWxsKQorCXsKKwkJaWYgKCFwb3NpdGlvbmFsX2FyZ3NbQVRUQVJH X0FUVE5VTV0uaXNudWxsKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5 IGJvdGggXCIlc1wiIGFuZCBcIiVzXCIiLCAiYXR0bmFtZSIsICJhdHRudW0iKSkpOworCQlhdHRu YW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhwb3NpdGlvbmFsX2FyZ3NbQVRUQVJHX0FUVE5BTUVd LnZhbHVlKTsKKwkJYXR0bnVtID0gZ2V0X2F0dG51bShyZWxvaWQsIGF0dG5hbWUpOworCQkvKiBu b3RlIHRoYXQgdGhpcyB0ZXN0IGNvdmVycyBhdHRpc2Ryb3BwZWQgY2FzZXMgdG9vOiAqLworCQlp ZiAoYXR0bnVtID09IEludmFsaWRBdHRyTnVtYmVyKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ KGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfQ09MVU1OKSwKKwkJCQkJIGVycm1zZygiY29sdW1u IFwiJXNcIiBvZiByZWxhdGlvbiBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkJCWF0dG5h bWUsIHJlbG5hbWUpKSk7CisJfQorCWVsc2UgaWYgKCFwb3NpdGlvbmFsX2FyZ3NbQVRUQVJHX0FU VE5VTV0uaXNudWxsKQorCXsKKwkJYXR0bnVtID0gRGF0dW1HZXRJbnQxNihwb3NpdGlvbmFsX2Fy Z3NbQVRUQVJHX0FUVE5VTV0udmFsdWUpOworCQlhdHRuYW1lID0gZ2V0X2F0dG5hbWUocmVsb2lk LCBhdHRudW0sIHRydWUpOworCQkvKiBhbm5veWluZ2x5LCBnZXRfYXR0bmFtZSBkb2Vzbid0IGNo ZWNrIGF0dGlzZHJvcHBlZCAqLworCQlpZiAoYXR0bmFtZSA9PSBOVUxMIHx8CisJCQkhU2VhcmNo U3lzQ2FjaGVFeGlzdHNBdHROYW1lKHJlbG9pZCwgYXR0bmFtZSkpCisJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9DT0xVTU4pLAorCQkJCQkgZXJybXNn KCJjb2x1bW4gJWQgb2YgcmVsYXRpb24gXCIlc1wiIGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJCQlh dHRudW0sIHJlbG5hbWUpKSk7CisJfQorCWVsc2UKKwl7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygi bXVzdCBzcGVjaWZ5IGVpdGhlciBcIiVzXCIgb3IgXCIlc1wiIiwgImF0dG5hbWUiLCAiYXR0bnVt IikpKTsKKwkJYXR0bmFtZSA9IE5VTEw7CQkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworCQlh dHRudW0gPSAwOworCX0KKworCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhwb3NpdGlvbmFsX2Fy Z3MsIGF0dGFyZ2luZm8sIEFUVEFSR19JTkhFUklURUQpOworCWluaGVyaXRlZCA9IERhdHVtR2V0 Qm9vbChwb3NpdGlvbmFsX2FyZ3NbQVRUQVJHX0lOSEVSSVRFRF0udmFsdWUpOworCisJLyogTWFw IEFUVEFSR3MgdG8gQVRUU1RBVHMgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IEFUVFNUQVRfTlVN X0FUVFNUQVRTOyBpKyspCisJeworCQlzdGF0c1tpXS5pc251bGwgPSBwb3NpdGlvbmFsX2FyZ3Nb aSArIEFSR1NfU1RBVFNfT0ZGU0VUXS5pc251bGw7CisJCXN0YXRzW2ldLnZhbHVlID0gcG9zaXRp b25hbF9hcmdzW2kgKyBBUkdTX1NUQVRTX09GRlNFVF0udmFsdWU7CisJfQorCisJaWYgKCF1cGRh dGVfYXR0c3RhdHMocmVsLCBhdHRuYW1lLCBhdHRudW0sIGluaGVyaXRlZCwgc3RhdHMpKQogCQly ZXN1bHQgPSBmYWxzZTsKIAorCXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKwogCVBHX1JF VFVSTl9CT09MKHJlc3VsdCk7CiB9CisKKy8qCisgKiBEZWxldGUgdGhlIHBnX3N0YXRpc3RpYyBm b3IgYSBnaXZlbiByZWxhdGlvbidzIGF0dG51bStpbmhlcml0ZWQuCisgKi8KK2Jvb2wKK2F0dHJp YnV0ZV9zdGF0aXN0aWNzX2RlbGV0ZShSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bnVtLCBi b29sIGluaGVyaXRlZCkKK3sKKwlyZXR1cm4gZGVsZXRlX3BnX3N0YXRpc3RpYyhSZWxhdGlvbkdl dFJlbGlkKHJlbCksIGF0dG51bSwgaW5oZXJpdGVkKTsKK30KKworLyoKKyAqIENvbnZlbmllbmNl IHJvdXRpbmUgdG8gcGFyc2UgZmxvYXQgdmFsdWVzLCBhbmQgZW1pdCBhIHdhcm5pbmcgb24gcGFy c2UKKyAqIGVycm9ycy4KKyAqLworc3RhdGljIHZvaWQKK3N0cl90b19mbG9hdChOdWxsYWJsZURh dHVtICpzdGF0cywgaW50IHN0YXRudW0sIGNvbnN0IGJvb2wgKmlzbnVsbCwKKwkJCSBjb25zdCBj aGFyICoqdmFsdWVzKQoreworCXN0YXRzW3N0YXRudW1dLmlzbnVsbCA9IHRydWU7CisJc3RhdHNb c3RhdG51bV0udmFsdWUgPSAwOworCisJaWYgKCFpc251bGxbc3RhdG51bV0pCisJeworCQljb25z dCBjaGFyICpzID0gdmFsdWVzW3N0YXRudW1dOworCQlEYXR1bQkJdmFsdWU7CisJCUVycm9yU2F2 ZUNvbnRleHQgZXNjb250ZXh0ID0ge1RfRXJyb3JTYXZlQ29udGV4dH07CisKKwkJaWYgKHMgPT0g TlVMTCkKKwkJCWVsb2coRVJST1IsICJ2YWx1ZSBpcyBudWxsIGJ1dCBmbGFnIGlzIG5vbi1udWxs Iik7CisKKwkJaWYgKERpcmVjdElucHV0RnVuY3Rpb25DYWxsU2FmZShmbG9hdDRpbiwgKGNoYXIg KikgcywgSW52YWxpZE9pZCwgLTEsCisJCQkJCQkJCQkJKE5vZGUgKikgJmVzY29udGV4dCwgJnZh bHVlKSkKKwkJeworCQkJc3RhdHNbc3RhdG51bV0uaXNudWxsID0gZmFsc2U7CisJCQlzdGF0c1tz dGF0bnVtXS52YWx1ZSA9IHZhbHVlOworCQl9CisJCWVsc2UKKwkJeworCQkJZXNjb250ZXh0LmVy cm9yX2RhdGEtPmVsZXZlbCA9IFdBUk5JTkc7CisJCQlUaHJvd0Vycm9yRGF0YShlc2NvbnRleHQu ZXJyb3JfZGF0YSk7CisJCQlGcmVlRXJyb3JEYXRhKGVzY29udGV4dC5lcnJvcl9kYXRhKTsKKwkJ CXJldHVybjsKKwkJfQorCX0KK30KKworLyoKKyAqIENvbnZlbmllbmNlIHJvdXRpbmUgdG8gcGFy c2UgaW50NCB2YWx1ZXMsIGFuZCBlbWl0IGEgd2FybmluZyBvbiBwYXJzZQorICogZXJyb3JzLgor ICovCitzdGF0aWMgdm9pZAorc3RyX3RvX2ludDQoTnVsbGFibGVEYXR1bSAqc3RhdHMsIGludCBz dGF0bnVtLCBjb25zdCBib29sICppc251bGwsCisJCQljb25zdCBjaGFyICoqdmFsdWVzKQorewor CXN0YXRzW3N0YXRudW1dLmlzbnVsbCA9IHRydWU7CisJc3RhdHNbc3RhdG51bV0udmFsdWUgPSAw OworCisJaWYgKCFpc251bGxbc3RhdG51bV0pCisJeworCQljb25zdCBjaGFyICpzID0gdmFsdWVz W3N0YXRudW1dOworCQlEYXR1bQkJdmFsdWU7CisJCUVycm9yU2F2ZUNvbnRleHQgZXNjb250ZXh0 ID0ge1RfRXJyb3JTYXZlQ29udGV4dH07CisKKwkJaWYgKHMgPT0gTlVMTCkKKwkJCWVsb2coRVJS T1IsICJ2YWx1ZSBpcyBudWxsIGJ1dCBmbGFnIGlzIG5vbi1udWxsIik7CisKKwkJaWYgKERpcmVj dElucHV0RnVuY3Rpb25DYWxsU2FmZShpbnQ0aW4sIChjaGFyICopIHMsIEludmFsaWRPaWQsIC0x LAorCQkJCQkJCQkJCShOb2RlICopICZlc2NvbnRleHQsICZ2YWx1ZSkpCisJCXsKKwkJCXN0YXRz W3N0YXRudW1dLmlzbnVsbCA9IGZhbHNlOworCQkJc3RhdHNbc3RhdG51bV0udmFsdWUgPSB2YWx1 ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWVzY29udGV4dC5lcnJvcl9kYXRhLT5lbGV2ZWwgPSBX QVJOSU5HOworCQkJVGhyb3dFcnJvckRhdGEoZXNjb250ZXh0LmVycm9yX2RhdGEpOworCQkJRnJl ZUVycm9yRGF0YShlc2NvbnRleHQuZXJyb3JfZGF0YSk7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9 CisKKy8qCisgKiBDb252ZW5pZW5jZSByb3V0aW5lIHRvIHBhcnNlIGZsb2F0IHZhbHVlcywgYW5k IGVtaXQgYSB3YXJuaW5nIG9uIHBhcnNlCisgKiBlcnJvcnMuCisgKi8KK3N0YXRpYyB2b2lkCitz dHJfdG9fdGV4dChOdWxsYWJsZURhdHVtICpzdGF0cywgaW50IHN0YXRudW0sIGNvbnN0IGJvb2wg KmlzbnVsbCwKKwkJCWNvbnN0IGNoYXIgKip2YWx1ZXMpCit7CisJc3RhdHNbc3RhdG51bV0uaXNu dWxsID0gdHJ1ZTsKKwlzdGF0c1tzdGF0bnVtXS52YWx1ZSA9IDA7CisKKwlpZiAoIWlzbnVsbFtz dGF0bnVtXSkKKwl7CisJCXN0YXRzW3N0YXRudW1dLmlzbnVsbCA9IGZhbHNlOworCQlzdGF0c1tz dGF0bnVtXS52YWx1ZSA9IENTdHJpbmdHZXRUZXh0RGF0dW0odmFsdWVzW3N0YXRudW1dKTsKKwl9 Cit9CisKKy8qCisgKiBDb252ZW5pZW5jZSByb3V0aW5lIHRvIHBhcnNlIGZsb2F0IGFycmF5IHZh bHVlcywgYW5kIGVtaXQgYSB3YXJuaW5nIG9uIHBhcnNlCisgKiBlcnJvcnMuCisgKi8KK3N0YXRp YyB2b2lkCitzdHJfdG9fZmxvYXRhcnJheShOdWxsYWJsZURhdHVtICpzdGF0cywgaW50IHN0YXRu dW0sIGNvbnN0IGJvb2wgKmlzbnVsbCwKKwkJCQkgIGNvbnN0IGNoYXIgKip2YWx1ZXMpCit7CisJ c3RhdHNbc3RhdG51bV0uaXNudWxsID0gdHJ1ZTsKKwlzdGF0c1tzdGF0bnVtXS52YWx1ZSA9IDA7 CisKKwlpZiAoIWlzbnVsbFtzdGF0bnVtXSkKKwl7CisJCUVycm9yU2F2ZUNvbnRleHQgZXNjb250 ZXh0ID0ge1RfRXJyb3JTYXZlQ29udGV4dH07CisKKwkJRm1nckluZm8JCWZsaW5mbzsKKwkJRGF0 dW0JCQl2YWx1ZTsKKworCQlmbWdyX2luZm8oRl9BUlJBWV9JTiwgJmZsaW5mbyk7CisKKwkJaWYg KCFJbnB1dEZ1bmN0aW9uQ2FsbFNhZmUoJmZsaW5mbywgKGNoYXIgKikgdmFsdWVzW3N0YXRudW1d LCBGTE9BVDRPSUQsCisJCQkJCQkJCSAgIC0xLCAoTm9kZSAqKSAmZXNjb250ZXh0LCAmdmFsdWUp KQorCQl7CisJCQllc2NvbnRleHQuZXJyb3JfZGF0YS0+ZWxldmVsID0gV0FSTklORzsKKwkJCVRo cm93RXJyb3JEYXRhKGVzY29udGV4dC5lcnJvcl9kYXRhKTsKKwkJCUZyZWVFcnJvckRhdGEoZXNj b250ZXh0LmVycm9yX2RhdGEpOworCQl9CisJCWVsc2UKKwkJeworCQkJc3RhdHNbc3RhdG51bV0u aXNudWxsID0gZmFsc2U7CisJCQlzdGF0c1tzdGF0bnVtXS52YWx1ZSA9IHZhbHVlOworCQl9CisJ fQorfQorCisvKgorICogVXBkYXRlIHN0YXRpc3RpY3MgZm9yIGEgZ2l2ZW4gYXR0cmlidXRlK2lu aGVyaXRlZCBvZiBhbHJlYWR5IG9wZW5lZCBSZWxhdGlvbgorICogd2l0aCBhIGxvY2sgbGV2ZWwg b2YgYXQgbGVhc3QgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrLgorICovCitib29sCithdHRyaWJ1 dGVfc3RhdGlzdGljc191cGRhdGUoUmVsYXRpb24gcmVsLCBjb25zdCBjaGFyICphdHRuYW1lLAor CQkJCQkJCUF0dHJOdW1iZXIgYXR0bnVtLCBib29sIGluaGVyaXRlZCwKKwkJCQkJCQljb25zdCBi b29sICppc251bGwsIGNvbnN0IGNoYXIgKip2YWx1ZXMpCit7CisJTnVsbGFibGVEYXR1bSBzdGF0 c1tBVFRTVEFUX05VTV9BVFRTVEFUU107CisKKwlzdHJfdG9fZmxvYXQoc3RhdHMsIEFUVFNUQVRf TlVMTF9GUkFDLCBpc251bGwsIHZhbHVlcyk7CisJc3RyX3RvX2ludDQoc3RhdHMsIEFUVFNUQVRf QVZHX1dJRFRILCBpc251bGwsIHZhbHVlcyk7CisJc3RyX3RvX2Zsb2F0KHN0YXRzLCBBVFRTVEFU X05fRElTVElOQ1QsIGlzbnVsbCwgdmFsdWVzKTsKKwlzdHJfdG9fdGV4dChzdGF0cywgQVRUU1RB VF9NT1NUX0NPTU1PTl9WQUxTLCBpc251bGwsIHZhbHVlcyk7CisJc3RyX3RvX2Zsb2F0YXJyYXko c3RhdHMsIEFUVFNUQVRfTU9TVF9DT01NT05fRlJFUVMsIGlzbnVsbCwgdmFsdWVzKTsKKwlzdHJf dG9fdGV4dChzdGF0cywgQVRUU1RBVF9ISVNUT0dSQU1fQk9VTkRTLCBpc251bGwsIHZhbHVlcyk7 CisJc3RyX3RvX2Zsb2F0KHN0YXRzLCBBVFRTVEFUX0NPUlJFTEFUSU9OLCBpc251bGwsIHZhbHVl cyk7CisJc3RyX3RvX3RleHQoc3RhdHMsIEFUVFNUQVRfTU9TVF9DT01NT05fRUxFTVMsIGlzbnVs bCwgdmFsdWVzKTsKKwlzdHJfdG9fZmxvYXRhcnJheShzdGF0cywgQVRUU1RBVF9NT1NUX0NPTU1P Tl9FTEVNX0ZSRVFTLCBpc251bGwsIHZhbHVlcyk7CisJc3RyX3RvX2Zsb2F0YXJyYXkoc3RhdHMs IEFUVFNUQVRfRUxFTV9DT1VOVF9ISVNUT0dSQU0sIGlzbnVsbCwgdmFsdWVzKTsKKwlzdHJfdG9f dGV4dChzdGF0cywgQVRUU1RBVF9SQU5HRV9MRU5HVEhfSElTVE9HUkFNLCBpc251bGwsIHZhbHVl cyk7CisJc3RyX3RvX2Zsb2F0KHN0YXRzLCBBVFRTVEFUX1JBTkdFX0VNUFRZX0ZSQUMsIGlzbnVs bCwgdmFsdWVzKTsKKwlzdHJfdG9fdGV4dChzdGF0cywgQVRUU1RBVF9SQU5HRV9CT1VORFNfSElT VE9HUkFNLCBpc251bGwsIHZhbHVlcyk7CisKKwlyZXR1cm4gdXBkYXRlX2F0dHN0YXRzKHJlbCwg YXR0bmFtZSwgYXR0bnVtLCBpbmhlcml0ZWQsIHN0YXRzKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3N0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmggYi9zcmMvaW5jbHVkZS9zdGF0aXN0 aWNzL2F0dHJpYnV0ZV9zdGF0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi5lZmJmZDQyMjJmNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3N0YXRpc3Rp Y3MvYXR0cmlidXRlX3N0YXRzLmgKQEAgLTAsMCArMSw0NSBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogYXR0cmlidXRlX3N0YXRzLmgKKyAqICAgIEZ1bmN0aW9ucyBmb3IgdGhlIGludGVy bmFsIG1hbmlwdWxhdGlvbiBvZiBhdHRyaWJ1dGUgc3RhdGlzdGljcy4KKyAqCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5p dmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9hdHRy aWJ1dGVfc3RhdHMuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAiYWNj ZXNzL2F0dG51bS5oIgorI2lmbmRlZiBBVFRSSUJVVEVfU1RBVFNfSAorCisjaW5jbHVkZSAiYWNj ZXNzL2dlbmFtLmgiCisKK2VudW0gYXR0cmlidXRlX3N0YXRzX2FyZ251bQoreworCUFUVFNUQVRf TlVMTF9GUkFDLAorCUFUVFNUQVRfQVZHX1dJRFRILAorCUFUVFNUQVRfTl9ESVNUSU5DVCwKKwlB VFRTVEFUX01PU1RfQ09NTU9OX1ZBTFMsCisJQVRUU1RBVF9NT1NUX0NPTU1PTl9GUkVRUywKKwlB VFRTVEFUX0hJU1RPR1JBTV9CT1VORFMsCisJQVRUU1RBVF9DT1JSRUxBVElPTiwKKwlBVFRTVEFU X01PU1RfQ09NTU9OX0VMRU1TLAorCUFUVFNUQVRfTU9TVF9DT01NT05fRUxFTV9GUkVRUywKKwlB VFRTVEFUX0VMRU1fQ09VTlRfSElTVE9HUkFNLAorCUFUVFNUQVRfUkFOR0VfTEVOR1RIX0hJU1RP R1JBTSwKKwlBVFRTVEFUX1JBTkdFX0VNUFRZX0ZSQUMsCisJQVRUU1RBVF9SQU5HRV9CT1VORFNf SElTVE9HUkFNLAorCUFUVFNUQVRfTlVNX0FUVFNUQVRTCit9OworCitleHRlcm4gYm9vbCBhdHRy aWJ1dGVfc3RhdGlzdGljc19kZWxldGUoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG51bSwK KwkJCQkJCQkJCQlib29sIGluaGVyaXRlZCk7CisKK2V4dGVybiBib29sIGF0dHJpYnV0ZV9zdGF0 aXN0aWNzX3VwZGF0ZShSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIgKmF0dG5hbWUsCisJCQkJCQkJ CQkJQXR0ck51bWJlciBhdHRudW0sIGJvb2wgaW5oZXJpdGVkLAorCQkJCQkJCQkJCWNvbnN0IGJv b2wgKmlzbnVsbCwgY29uc3QgY2hhciAqKnZhbHVlcyk7CisKKworI2RlZmluZSBBVFRSSUJVVEVf U1RBVFNfSAorI2VuZGlmCi0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --000000000000e977f10655600bcf Content-Type: application/octet-stream; name="v2-0013-Replace-statistics-import-SPI-calls-with-new-impo.patch" Content-Disposition: attachment; filename="v2-0013-Replace-statistics-import-SPI-calls-with-new-impo.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqyw9g7712 RnJvbSAxODhiNWY3ZDgwY2ZhNWFmOGFmZmQ4MmY2NTc5NTkxZDNmNmQ0M2RjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogTW9uLCAyOSBKdW4gMjAyNiAwMjoxNToyOCAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djIgMTMvMTNdIFJlcGxhY2Ugc3RhdGlzdGljcyBpbXBvcnQgU1BJIGNhbGxzIHdpdGggbmV3IGlt cG9ydAogZnVuY3Rpb25zLgoKVGhpcyBwYXRjaCByZW1vdmVzIHRoZSBTUEkgY2FsbHMgaW4gcG9z dGdyZXNfZmR3LmMgdGhhdCB3ZXJlIHJlbGF0ZWQgdG8KcmVsYXRpb24gc3RhdGlzdGljcyBhbmQg YXR0cmlidXRlIHN0YXRpc3RpY3MuIEluc3RlYWQsIHRoZSBmdW5jdGlvbnMKcmVsYXRpb25fc3Rh dGlzdGljc191cGRhdGUoKSBhbmQgYXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlKCkgaGF2ZSBi ZWVuCmNyZWF0ZSBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgcHVycG9zZS4KLS0tCiAuLi4vcG9zdGdy ZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgICAgfCAgNTIgKysrCiBjb250cmliL3Bv c3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyAgICAgICAgICAgfCAzOTQgKysrKystLS0tLS0tLS0t LS0tCiBjb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbCAgICAgfCAgNDAg KysKIDMgZmlsZXMgY2hhbmdlZCwgMTg1IGluc2VydGlvbnMoKyksIDMwMSBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcu b3V0IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAppbmRl eCAwODA1YzU2Y2IxYi4uODBiOTI3ZDdmMGIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNf ZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcv ZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dApAQCAtMTMwMjcsNiArMTMwMjcsNTggQEAgQU5BTFla RSBkdGVzdF90YWJsZTsKIEFOQUxZWkUgVkVSQk9TRSBkdGVzdF9mdGFibGU7ICAgICAgICAgICAg IC0tIHNob3VsZCB3b3JrCiBJTkZPOiAgaW1wb3J0aW5nIHN0YXRpc3RpY3MgZm9yIGZvcmVpZ24g dGFibGUgInB1YmxpYy5kdGVzdF9mdGFibGUiCiBJTkZPOiAgZmluaXNoZWQgaW1wb3J0aW5nIHN0 YXRpc3RpY3MgZm9yIGZvcmVpZ24gdGFibGUgInB1YmxpYy5kdGVzdF9mdGFibGUiCistLSBkdGVz dF9mdGFibGVzIHN0YXRzIHNob3VsZCBub3cgZXhhY3RseSBtYXRjaCBkdGVzdF90YWJsZQorLS0g Y29tcGFyZSB0aGUgcm93Y291bnRzLCBzaG91bGQgZ2V0IDAgcm93cyBiYWNrCitTRUxFQ1QgQ09V TlQoKikgRlJPTSBwZ19zdGF0cworV0hFUkUgc2NoZW1hbmFtZSA9ICdwdWJsaWMnIEFORCB0YWJs ZW5hbWUgPSAnZHRlc3RfdGFibGUnCitFWENFUFQKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX3N0 YXRzCitXSEVSRSBzY2hlbWFuYW1lID0gJ3B1YmxpYycgQU5EIHRhYmxlbmFtZSA9ICdkdGVzdF9m dGFibGUnOworIGNvdW50IAorLS0tLS0tLQorKDAgcm93cykKKworLS0gY29tcGFyZSB2YWx1ZXMs IHNob3VsZCBtYXRjaAorU0VMRUNUIHJlbHBhZ2VzLCByZWx0dXBsZXMKK0ZST00gcGdfY2xhc3MK K1dIRVJFIG9pZCA9ICdwdWJsaWMuZHRlc3RfdGFibGUnOjpyZWdjbGFzcworRVhDRVBUCitTRUxF Q1QgcmVscGFnZXMsIHJlbHR1cGxlcworRlJPTSBwZ19jbGFzcworV0hFUkUgb2lkID0gJ3B1Ymxp Yy5kdGVzdF9mdGFibGUnOjpyZWdjbGFzczsKKyByZWxwYWdlcyB8IHJlbHR1cGxlcyAKKy0tLS0t LS0tLS0rLS0tLS0tLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCByZWxwYWdlcywgcmVsdHVwbGVz CitGUk9NIHBnX2NsYXNzCitXSEVSRSBvaWQgPSAncHVibGljLmR0ZXN0X2Z0YWJsZSc6OnJlZ2Ns YXNzCitFWENFUFQKK1NFTEVDVCByZWxwYWdlcywgcmVsdHVwbGVzCitGUk9NIHBnX2NsYXNzCitX SEVSRSBvaWQgPSAncHVibGljLmR0ZXN0X3RhYmxlJzo6cmVnY2xhc3M7CisgcmVscGFnZXMgfCBy ZWx0dXBsZXMgCistLS0tLS0tLS0tKy0tLS0tLS0tLS0tCisoMCByb3dzKQorCistLSB0ZXN0IG9u bHkgYSBmZXcgc3RhdHMgY29sdW1ucyBjb21tb24gdG8gaW50ZWdlciB0eXBlcworU0VMRUNUIGF0 dG5hbWUsIGluaGVyaXRlZCwgbnVsbF9mcmFjLCBhdmdfd2lkdGgsIG5fZGlzdGluY3QsCisgIG1v c3RfY29tbW9uX3ZhbHM6OnRleHQgYXMgbWN2LCBtb3N0X2NvbW1vbl9mcmVxcywKKyAgaGlzdG9n cmFtX2JvdW5kczo6dGV4dCBhcyBoYiwgY29ycmVsYXRpb24KK0ZST00gcGdfc3RhdHMKK1dIRVJF IHNjaGVtYW5hbWUgPSAncHVibGljJworQU5EIHRhYmxlbmFtZSA9ICdkdGVzdF90YWJsZScKK0VY Q0VQVAorU0VMRUNUIGF0dG5hbWUsIGluaGVyaXRlZCwgbnVsbF9mcmFjLCBhdmdfd2lkdGgsIG5f ZGlzdGluY3QsCisgIG1vc3RfY29tbW9uX3ZhbHM6OnRleHQgYXMgbWN2LCBtb3N0X2NvbW1vbl9m cmVxcywKKyAgaGlzdG9ncmFtX2JvdW5kczo6dGV4dCBhcyBoYiwgY29ycmVsYXRpb24KK0ZST00g cGdfc3RhdHMKK1dIRVJFIHNjaGVtYW5hbWUgPSAncHVibGljJworQU5EIHRhYmxlbmFtZSA9ICdk dGVzdF9mdGFibGUnOworIGF0dG5hbWUgfCBpbmhlcml0ZWQgfCBudWxsX2ZyYWMgfCBhdmdfd2lk dGggfCBuX2Rpc3RpbmN0IHwgbWN2IHwgbW9zdF9jb21tb25fZnJlcXMgfCBoYiB8IGNvcnJlbGF0 aW9uIAorLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0tLS0tLS0tLQorKDAg cm93cykKKwogLS0gY2xlYW51cAogRFJPUCBGT1JFSUdOIFRBQkxFIHNpbXBvcnRfZnRhYmxlOwog RFJPUCBGT1JFSUdOIFRBQkxFIHNpbXBvcnRfZnZpZXc7CmRpZmYgLS1naXQgYS9jb250cmliL3Bv c3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVz X2Zkdy5jCmluZGV4IDZkYmFlNTgzZWNjLi42NzdhODIxZWIxMCAxMDA2NDQKLS0tIGEvY29udHJp Yi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcv cG9zdGdyZXNfZmR3LmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJjb21tYW5kcy92YWN1 dW0uaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjQXN5bmMuaCIKICNpbmNsdWRlICJleGVjdXRv ci9pbnN0cnVtZW50LmgiCi0jaW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgiCiAjaW5jbHVkZSAiZm9y ZWlnbi9mZHdhcGkuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCkBAIC00Myw2ICs0Miw4IEBACiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgogI2lu Y2x1ZGUgInBvc3RncmVzX2Zkdy5oIgogI2luY2x1ZGUgInN0YXRpc3RpY3Mvc3RhdGlzdGljcy5o IgorI2luY2x1ZGUgInN0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmgiCisjaW5jbHVkZSAic3Rh dGlzdGljcy9yZWxhdGlvbl9zdGF0cy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNp bmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2Zsb2F0LmgiCkBAIC0z NDEsMTYwICszNDIsMzAgQEAgdHlwZWRlZiBzdHJ1Y3QKIC8qIENvbHVtbiBvcmRlciBpbiByZWxh dGlvbiBzdGF0cyBxdWVyeSAqLwogZW51bSBSZWxTdGF0c0NvbHVtbnMKIHsKLQlSRUxTVEFUU19S RUxQQUdFUyA9IDAsCi0JUkVMU1RBVFNfUkVMVFVQTEVTLAotCVJFTFNUQVRTX1JFTEtJTkQsCi0J UkVMU1RBVFNfTlVNX0ZJRUxEUywKKwlSRUxDT0xfUkVMUEFHRVMgPSAwLAorCVJFTENPTF9SRUxU VVBMRVMsCisJUkVMQ09MX1JFTEtJTkQsCisJUkVMQ09MX05VTV9GSUVMRFMsCiB9OwogCiAvKiBD b2x1bW4gb3JkZXIgaW4gYXR0cmlidXRlIHN0YXRzIHF1ZXJ5ICovCiBlbnVtIEF0dFN0YXRzQ29s dW1ucwogewotCUFUVFNUQVRTX0FUVE5BTUUgPSAwLAotCUFUVFNUQVRTX05VTExfRlJBQywKLQlB VFRTVEFUU19BVkdfV0lEVEgsCi0JQVRUU1RBVFNfTl9ESVNUSU5DVCwKLQlBVFRTVEFUU19NT1NU X0NPTU1PTl9WQUxTLAotCUFUVFNUQVRTX01PU1RfQ09NTU9OX0ZSRVFTLAotCUFUVFNUQVRTX0hJ U1RPR1JBTV9CT1VORFMsCi0JQVRUU1RBVFNfQ09SUkVMQVRJT04sCi0JQVRUU1RBVFNfTU9TVF9D T01NT05fRUxFTVMsCi0JQVRUU1RBVFNfTU9TVF9DT01NT05fRUxFTV9GUkVRUywKLQlBVFRTVEFU U19FTEVNX0NPVU5UX0hJU1RPR1JBTSwKLQlBVFRTVEFUU19SQU5HRV9MRU5HVEhfSElTVE9HUkFN LAotCUFUVFNUQVRTX1JBTkdFX0VNUFRZX0ZSQUMsCi0JQVRUU1RBVFNfUkFOR0VfQk9VTkRTX0hJ U1RPR1JBTSwKLQlBVFRTVEFUU19OVU1fRklFTERTLAotfTsKLQotLyogUmVsYXRpb24gc3RhdHMg aW1wb3J0IHF1ZXJ5ICovCi1zdGF0aWMgY29uc3QgY2hhciAqcmVsaW1wb3J0X3NxbCA9Ci0iU0VM RUNUIHBnX2NhdGFsb2cucGdfcmVzdG9yZV9yZWxhdGlvbl9zdGF0cyhcbiIKLSJcdCd2ZXJzaW9u JywgJDEsXG4iCi0iXHQnc2NoZW1hbmFtZScsICQyLFxuIgotIlx0J3JlbG5hbWUnLCAkMyxcbiIK LSJcdCdyZWxwYWdlcycsICQ0OjppbnRlZ2VyLFxuIgotIlx0J3JlbHR1cGxlcycsICQ1OjpyZWFs KSI7Ci0KLS8qIEFyZ3VtZW50IG9yZGVyIGluIHJlbGF0aW9uIHN0YXRzIGltcG9ydCBxdWVyeSAq LwotZW51bSBSZWxJbXBvcnRTcWxBcmdzCi17Ci0JUkVMSU1QT1JUX1NRTF9WRVJTSU9OID0gMCwK LQlSRUxJTVBPUlRfU1FMX1NDSEVNQU5BTUUsCi0JUkVMSU1QT1JUX1NRTF9SRUxOQU1FLAotCVJF TElNUE9SVF9TUUxfUkVMUEFHRVMsCi0JUkVMSU1QT1JUX1NRTF9SRUxUVVBMRVMsCi0JUkVMSU1Q T1JUX1NRTF9OVU1fRklFTERTCi19OwotCi0vKiBBcmd1bWVudCB0eXBlcyBpbiByZWxhdGlvbiBz dGF0cyBpbXBvcnQgcXVlcnkgKi8KLXN0YXRpYyBjb25zdCBPaWQgcmVsaW1wb3J0X2FyZ3R5cGVz W1JFTElNUE9SVF9TUUxfTlVNX0ZJRUxEU10gPQotewotCUlOVDRPSUQsIFRFWFRPSUQsIFRFWFRP SUQsIFRFWFRPSUQsCi0JVEVYVE9JRCwKLX07Ci0KLS8qIEF0dHJpYnV0ZSBzdGF0cyBpbXBvcnQg cXVlcnkgKi8KLXN0YXRpYyBjb25zdCBjaGFyICphdHRpbXBvcnRfc3FsID0KLSJTRUxFQ1QgcGdf Y2F0YWxvZy5wZ19yZXN0b3JlX2F0dHJpYnV0ZV9zdGF0cyhcbiIKLSJcdCd2ZXJzaW9uJywgJDEs XG4iCi0iXHQnc2NoZW1hbmFtZScsICQyLFxuIgotIlx0J3JlbG5hbWUnLCAkMyxcbiIKLSJcdCdh dHRudW0nLCAkNCxcbiIKLSJcdCdpbmhlcml0ZWQnLCBmYWxzZTo6Ym9vbGVhbixcbiIKLSJcdCdu dWxsX2ZyYWMnLCAkNTo6cmVhbCxcbiIKLSJcdCdhdmdfd2lkdGgnLCAkNjo6aW50ZWdlcixcbiIK LSJcdCduX2Rpc3RpbmN0JywgJDc6OnJlYWwsXG4iCi0iXHQnbW9zdF9jb21tb25fdmFscycsICQ4 LFxuIgotIlx0J21vc3RfY29tbW9uX2ZyZXFzJywgJDk6OnJlYWxbXSxcbiIKLSJcdCdoaXN0b2dy YW1fYm91bmRzJywgJDEwLFxuIgotIlx0J2NvcnJlbGF0aW9uJywgJDExOjpyZWFsLFxuIgotIlx0 J21vc3RfY29tbW9uX2VsZW1zJywgJDEyLFxuIgotIlx0J21vc3RfY29tbW9uX2VsZW1fZnJlcXMn LCAkMTM6OnJlYWxbXSxcbiIKLSJcdCdlbGVtX2NvdW50X2hpc3RvZ3JhbScsICQxNDo6cmVhbFtd LFxuIgotIlx0J3JhbmdlX2xlbmd0aF9oaXN0b2dyYW0nLCAkMTUsXG4iCi0iXHQncmFuZ2VfZW1w dHlfZnJhYycsICQxNjo6cmVhbCxcbiIKLSJcdCdyYW5nZV9ib3VuZHNfaGlzdG9ncmFtJywgJDE3 KSI7Ci0KLS8qIEFyZ3VtZW50IG9yZGVyIGluIGF0dHJpYnV0ZSBzdGF0cyBpbXBvcnQgcXVlcnkg Ki8KLWVudW0gQXR0SW1wb3J0U3FsQXJncwotewotCUFUVElNUE9SVF9TUUxfVkVSU0lPTiA9IDAs Ci0JQVRUSU1QT1JUX1NRTF9TQ0hFTUFOQU1FLAotCUFUVElNUE9SVF9TUUxfUkVMTkFNRSwKLQlB VFRJTVBPUlRfU1FMX0FUVE5VTSwKLQlBVFRJTVBPUlRfU1FMX05VTExfRlJBQywKLQlBVFRJTVBP UlRfU1FMX0FWR19XSURUSCwKLQlBVFRJTVBPUlRfU1FMX05fRElTVElOQ1QsCi0JQVRUSU1QT1JU X1NRTF9NT1NUX0NPTU1PTl9WQUxTLAotCUFUVElNUE9SVF9TUUxfTU9TVF9DT01NT05fRlJFUVMs Ci0JQVRUSU1QT1JUX1NRTF9ISVNUT0dSQU1fQk9VTkRTLAotCUFUVElNUE9SVF9TUUxfQ09SUkVM QVRJT04sCi0JQVRUSU1QT1JUX1NRTF9NT1NUX0NPTU1PTl9FTEVNUywKLQlBVFRJTVBPUlRfU1FM X01PU1RfQ09NTU9OX0VMRU1fRlJFUVMsCi0JQVRUSU1QT1JUX1NRTF9FTEVNX0NPVU5UX0hJU1RP R1JBTSwKLQlBVFRJTVBPUlRfU1FMX1JBTkdFX0xFTkdUSF9ISVNUT0dSQU0sCi0JQVRUSU1QT1JU X1NRTF9SQU5HRV9FTVBUWV9GUkFDLAotCUFUVElNUE9SVF9TUUxfUkFOR0VfQk9VTkRTX0hJU1RP R1JBTSwKLQlBVFRJTVBPUlRfU1FMX05VTV9GSUVMRFMKLX07Ci0KLS8qIEFyZ3VtZW50IHR5cGVz IGluIGF0dHJpYnV0ZSBzdGF0cyBpbXBvcnQgcXVlcnkgKi8KLXN0YXRpYyBjb25zdCBPaWQgYXR0 aW1wb3J0X2FyZ3R5cGVzW0FUVElNUE9SVF9TUUxfTlVNX0ZJRUxEU10gPQotewotCUlOVDRPSUQs IFRFWFRPSUQsIFRFWFRPSUQsIElOVDJPSUQsCi0JVEVYVE9JRCwgVEVYVE9JRCwgVEVYVE9JRCwg VEVYVE9JRCwKLQlURVhUT0lELCBURVhUT0lELCBURVhUT0lELCBURVhUT0lELAotCVRFWFRPSUQs IFRFWFRPSUQsIFRFWFRPSUQsIFRFWFRPSUQsCi0JVEVYVE9JRCwKLX07Ci0KLS8qCi0gKiBUaGUg bWFwcGluZyBvZiBhdHRyaWJ1dGUgc3RhdHMgcXVlcnkgY29sdW1ucyB0byB0aGUgcG9zaXRpb25h bCBhcmd1bWVudHMgaW4KLSAqIHRoZSBwcmVwYXJlZCBwZ19yZXN0b3JlX2F0dHJpYnV0ZV9zdGF0 cygpIHN0YXRlbWVudC4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLQllbnVtIEF0dFN0YXRzQ29s dW1ucyByZXNfZmllbGQ7Ci0JZW51bSBBdHRJbXBvcnRTcWxBcmdzIGFyZ19udW07Ci19IEF0dHJS ZXN1bHRBcmdNYXA7Ci0KLSNkZWZpbmUgTlVNX01BUFBFRF9BVFRJTVBPUlRfQVJHUyAxMwotCi1z dGF0aWMgY29uc3QgQXR0clJlc3VsdEFyZ01hcCBhdHRyX3Jlc3VsdF9hcmdfbWFwW05VTV9NQVBQ RURfQVRUSU1QT1JUX0FSR1NdID0KLXsKLQl7QVRUU1RBVFNfTlVMTF9GUkFDLCBBVFRJTVBPUlRf U1FMX05VTExfRlJBQ30sCi0Je0FUVFNUQVRTX0FWR19XSURUSCwgQVRUSU1QT1JUX1NRTF9BVkdf V0lEVEh9LAotCXtBVFRTVEFUU19OX0RJU1RJTkNULCBBVFRJTVBPUlRfU1FMX05fRElTVElOQ1R9 LAotCXtBVFRTVEFUU19NT1NUX0NPTU1PTl9WQUxTLCBBVFRJTVBPUlRfU1FMX01PU1RfQ09NTU9O X1ZBTFN9LAotCXtBVFRTVEFUU19NT1NUX0NPTU1PTl9GUkVRUywgQVRUSU1QT1JUX1NRTF9NT1NU X0NPTU1PTl9GUkVRU30sCi0Je0FUVFNUQVRTX0hJU1RPR1JBTV9CT1VORFMsIEFUVElNUE9SVF9T UUxfSElTVE9HUkFNX0JPVU5EU30sCi0Je0FUVFNUQVRTX0NPUlJFTEFUSU9OLCBBVFRJTVBPUlRf U1FMX0NPUlJFTEFUSU9OfSwKLQl7QVRUU1RBVFNfTU9TVF9DT01NT05fRUxFTVMsIEFUVElNUE9S VF9TUUxfTU9TVF9DT01NT05fRUxFTVN9LAotCXtBVFRTVEFUU19NT1NUX0NPTU1PTl9FTEVNX0ZS RVFTLCBBVFRJTVBPUlRfU1FMX01PU1RfQ09NTU9OX0VMRU1fRlJFUVN9LAotCXtBVFRTVEFUU19F TEVNX0NPVU5UX0hJU1RPR1JBTSwgQVRUSU1QT1JUX1NRTF9FTEVNX0NPVU5UX0hJU1RPR1JBTX0s Ci0Je0FUVFNUQVRTX1JBTkdFX0xFTkdUSF9ISVNUT0dSQU0sIEFUVElNUE9SVF9TUUxfUkFOR0Vf TEVOR1RIX0hJU1RPR1JBTX0sCi0Je0FUVFNUQVRTX1JBTkdFX0VNUFRZX0ZSQUMsIEFUVElNUE9S VF9TUUxfUkFOR0VfRU1QVFlfRlJBQ30sCi0Je0FUVFNUQVRTX1JBTkdFX0JPVU5EU19ISVNUT0dS QU0sIEFUVElNUE9SVF9TUUxfUkFOR0VfQk9VTkRTX0hJU1RPR1JBTX0sCi19OwotCi0vKiBBdHRy aWJ1dGUgc3RhdHMgY2xlYXIgcXVlcnkgKi8KLXN0YXRpYyBjb25zdCBjaGFyICphdHRjbGVhcl9z cWwgPQotIlNFTEVDVCBwZ19jYXRhbG9nLnBnX2NsZWFyX2F0dHJpYnV0ZV9zdGF0cygkMSwgJDIs ICQzLCBmYWxzZSkiOwotCi0vKiBBcmd1bWVudCBvcmRlciBpbiBhdHRyaWJ1dGUgc3RhdHMgY2xl YXIgcXVlcnkgKi8KLWVudW0gQXR0Q2xlYXJTcWxBcmdzCi17Ci0JQVRUQ0xFQVJfU1FMX1NDSEVN QU5BTUUgPSAwLAotCUFUVENMRUFSX1NRTF9SRUxOQU1FLAotCUFUVENMRUFSX1NRTF9BVFROQU1F LAotCUFUVENMRUFSX1NRTF9OVU1fRklFTERTCi19OwotCi0vKiBBcmd1bWVudCB0eXBlcyBpbiBh dHRyaWJ1dGUgc3RhdHMgY2xlYXIgcXVlcnkgKi8KLXN0YXRpYyBjb25zdCBPaWQgYXR0Y2xlYXJf YXJndHlwZXNbQVRUQ0xFQVJfU1FMX05VTV9GSUVMRFNdID0KLXsKLQlURVhUT0lELCBURVhUT0lE LCBURVhUT0lELAorCUFUVENPTF9BVFROQU1FID0gMCwKKwlBVFRDT0xfTlVMTF9GUkFDLAorCUFU VENPTF9BVkdfV0lEVEgsCisJQVRUQ09MX05fRElTVElOQ1QsCisJQVRUQ09MX01PU1RfQ09NTU9O X1ZBTFMsCisJQVRUQ09MX01PU1RfQ09NTU9OX0ZSRVFTLAorCUFUVENPTF9ISVNUT0dSQU1fQk9V TkRTLAorCUFUVENPTF9DT1JSRUxBVElPTiwKKwlBVFRDT0xfTU9TVF9DT01NT05fRUxFTVMsCisJ QVRUQ09MX01PU1RfQ09NTU9OX0VMRU1fRlJFUVMsCisJQVRUQ09MX0VMRU1fQ09VTlRfSElTVE9H UkFNLAorCUFUVENPTF9SQU5HRV9MRU5HVEhfSElTVE9HUkFNLAorCUFUVENPTF9SQU5HRV9FTVBU WV9GUkFDLAorCUFUVENPTF9SQU5HRV9CT1VORFNfSElTVE9HUkFNLAorCUFUVENPTF9OVU1fRklF TERTLAogfTsKIAogLyoKQEAgLTcxNCwxNCArNTg1LDEyIEBAIHN0YXRpYyBib29sIG1hdGNoX2F0 dHJtYXAoUEdyZXN1bHQgKnJlcywKIAkJCQkJCSAgY29uc3QgY2hhciAqcmVtb3RlX3JlbG5hbWUs CiAJCQkJCQkgIGludCBhdHRyY250LAogCQkJCQkJICBSZW1vdGVBdHRyaWJ1dGVNYXBwaW5nICpy ZW1hdHRybWFwKTsKLXN0YXRpYyBib29sIGltcG9ydF9mZXRjaGVkX3N0YXRpc3RpY3MoY29uc3Qg Y2hhciAqc2NoZW1hbmFtZSwKK3N0YXRpYyBib29sIGltcG9ydF9mZXRjaGVkX3N0YXRpc3RpY3Mo UmVsYXRpb24gcmVsYXRpb24sCisJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJ CQkJCQkJCQkgIGNvbnN0IGNoYXIgKnJlbG5hbWUsCiAJCQkJCQkJCQkgIGludCBhdHRyY250LAog CQkJCQkJCQkJICBjb25zdCBSZW1vdGVBdHRyaWJ1dGVNYXBwaW5nICpyZW1hdHRybWFwLAogCQkJ CQkJCQkJICBSZW1vdGVTdGF0c1Jlc3VsdHMgKnJlbXN0YXRzKTsKLXN0YXRpYyB2b2lkIG1hcF9m aWVsZF90b19hcmcoUEdyZXN1bHQgKnJlcywgaW50IHJvdywgaW50IGZpZWxkLAotCQkJCQkJCSBp bnQgYXJnLCBEYXR1bSAqdmFsdWVzLCBjaGFyICpudWxscyk7Ci1zdGF0aWMgYm9vbCBpbXBvcnRf c3BpX3F1ZXJ5X29rKHZvaWQpOwogc3RhdGljIHZvaWQgcHJvZHVjZV90dXBsZV9hc3luY2hyb25v dXNseShBc3luY1JlcXVlc3QgKmFyZXEsIGJvb2wgZmV0Y2gpOwogc3RhdGljIHZvaWQgZmV0Y2hf bW9yZV9kYXRhX2JlZ2luKEFzeW5jUmVxdWVzdCAqYXJlcSk7CiBzdGF0aWMgdm9pZCBjb21wbGV0 ZV9wZW5kaW5nX3JlcXVlc3QoQXN5bmNSZXF1ZXN0ICphcmVxKTsKQEAgLTUxOTAsMTEgKzUwNTks MTEgQEAgcG9zdGdyZXNHZXRBbmFseXplSW5mb0ZvckZvcmVpZ25UYWJsZShSZWxhdGlvbiByZWxh dGlvbiwgYm9vbCAqY2FuX3RhYmxlc2FtcGxlKQogCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9 IFBHUkVTX1RVUExFU19PSykKIAkJcGdmZHdfcmVwb3J0X2Vycm9yKHJlcywgY29ubiwgc3FsLmRh dGEpOwogCi0JaWYgKFBRbnR1cGxlcyhyZXMpICE9IDEgfHwgUFFuZmllbGRzKHJlcykgIT0gUkVM U1RBVFNfTlVNX0ZJRUxEUykKKwlpZiAoUFFudHVwbGVzKHJlcykgIT0gMSB8fCBQUW5maWVsZHMo cmVzKSAhPSBSRUxDT0xfTlVNX0ZJRUxEUykKIAkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgcmVz dWx0IGZyb20gZGVwYXJzZUFuYWx5emVJbmZvU3FsIHF1ZXJ5Iik7CiAJLyogV2UgZG9uJ3QgdXNl IHJlbHBhZ2VzIGhlcmUgKi8KLQlyZWx0dXBsZXMgPSBzdHJ0b2QoUFFnZXR2YWx1ZShyZXMsIDAs IFJFTFNUQVRTX1JFTFRVUExFUyksIE5VTEwpOwotCXJlbGtpbmQgPSAqKFBRZ2V0dmFsdWUocmVz LCAwLCBSRUxTVEFUU19SRUxLSU5EKSk7CisJcmVsdHVwbGVzID0gc3RydG9kKFBRZ2V0dmFsdWUo cmVzLCAwLCBSRUxDT0xfUkVMVFVQTEVTKSwgTlVMTCk7CisJcmVsa2luZCA9ICooUFFnZXR2YWx1 ZShyZXMsIDAsIFJFTENPTF9SRUxLSU5EKSk7CiAJUFFjbGVhcihyZXMpOwogCiAJUmVsZWFzZUNv bm5lY3Rpb24oY29ubik7CkBAIC01NjYxLDcgKzU1MzAsNyBAQCBwb3N0Z3Jlc0ltcG9ydEZvcmVp Z25TdGF0aXN0aWNzKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICp2YV9jb2xzLCBpbnQgZWxldmVs KQogCQkJCQkJCQkgJmF0dHJjbnQsICZyZW1hdHRybWFwLCAmcmVtc3RhdHMpOwogCiAJaWYgKG9r KQotCQlvayA9IGltcG9ydF9mZXRjaGVkX3N0YXRpc3RpY3Moc2NoZW1hbmFtZSwgcmVsbmFtZSwK KwkJb2sgPSBpbXBvcnRfZmV0Y2hlZF9zdGF0aXN0aWNzKHJlbGF0aW9uLCBzY2hlbWFuYW1lLCBy ZWxuYW1lLAogCQkJCQkJCQkJICAgYXR0cmNudCwgcmVtYXR0cm1hcCwgJnJlbXN0YXRzKTsKIAog CWlmIChvaykKQEAgLTU3MzgsNyArNTYwNyw3IEBAIGZldGNoX3JlbW90ZV9zdGF0aXN0aWNzKFJl bGF0aW9uIHJlbGF0aW9uLAogCSAqIFJFTEtJTkRfUEFSVElUSU9ORURfSU5ERVggY2FuIGhhdmUg cm93cyBpbiBwZ19zdGF0cywgdGhleSBvYnZpb3VzbHkKIAkgKiBjYW4ndCBzdXBwb3J0IGEgZm9y ZWlnbiB0YWJsZS4KIAkgKi8KLQlyZWxraW5kID0gKlBRZ2V0dmFsdWUocmVsc3RhdHMsIDAsIFJF TFNUQVRTX1JFTEtJTkQpOworCXJlbGtpbmQgPSAqUFFnZXR2YWx1ZShyZWxzdGF0cywgMCwgUkVM Q09MX1JFTEtJTkQpOwogCXN3aXRjaCAocmVsa2luZCkKIAl7CiAJCWNhc2UgUkVMS0lORF9SRUxB VElPTjoKQEAgLTU3NjksNyArNTYzOCw3IEBAIGZldGNoX3JlbW90ZV9zdGF0aXN0aWNzKFJlbGF0 aW9uIHJlbGF0aW9uLAogCSAqIHdheSwgd2Ugd291bGRuJ3QgZXhwZWN0IHRvIGZpbmQgdGhlIHN0 YXRzIGZvciB0aGUgdGFibGUsIHNvIHdlIGZhbGxiYWNrCiAJICogdG8gc2FtcGxpbmcuCiAJICov Ci0JcmVsdHVwbGVzID0gc3RydG9kKFBRZ2V0dmFsdWUocmVsc3RhdHMsIDAsIFJFTFNUQVRTX1JF TFRVUExFUyksIE5VTEwpOworCXJlbHR1cGxlcyA9IHN0cnRvZChQUWdldHZhbHVlKHJlbHN0YXRz LCAwLCBSRUxDT0xfUkVMVFVQTEVTKSwgTlVMTCk7CiAJaWYgKCgoc2VydmVyX3ZlcnNpb25fbnVt IDwgMTQwMDAwKSAmJiAocmVsdHVwbGVzID09IDApKSB8fAogCQkoKHNlcnZlcl92ZXJzaW9uX251 bSA+PSAxNDAwMDApICYmIChyZWx0dXBsZXMgPT0gLTEpKSkKIAl7CkBAIC01ODMwLDcgKzU2OTks NyBAQCBmZXRjaF9yZWxzdGF0cyhQR2Nvbm4gKmNvbm4sIFJlbGF0aW9uIHJlbGF0aW9uKQogCWlm IChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKIAkJcGdmZHdfcmVwb3J0 X2Vycm9yKHJlcywgY29ubiwgc3FsLmRhdGEpOwogCi0JaWYgKFBRbnR1cGxlcyhyZXMpICE9IDEg fHwgUFFuZmllbGRzKHJlcykgIT0gUkVMU1RBVFNfTlVNX0ZJRUxEUykKKwlpZiAoUFFudHVwbGVz KHJlcykgIT0gMSB8fCBQUW5maWVsZHMocmVzKSAhPSBSRUxDT0xfTlVNX0ZJRUxEUykKIAkJZWxv ZyhFUlJPUiwgInVuZXhwZWN0ZWQgcmVzdWx0IGZyb20gZGVwYXJzZUFuYWx5emVJbmZvU3FsIHF1 ZXJ5Iik7CiAKIAlyZXR1cm4gcmVzOwpAQCAtNTkwMSw3ICs1NzcwLDcgQEAgZmV0Y2hfYXR0c3Rh dHMoUEdjb25uICpjb25uLCBpbnQgc2VydmVyX3ZlcnNpb25fbnVtLAogCWlmIChQUXJlc3VsdFN0 YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKIAkJcGdmZHdfcmVwb3J0X2Vycm9yKHJlcywg Y29ubiwgc3FsLmRhdGEpOwogCi0JaWYgKFBRbmZpZWxkcyhyZXMpICE9IEFUVFNUQVRTX05VTV9G SUVMRFMpCisJaWYgKFBRbmZpZWxkcyhyZXMpICE9IEFUVENPTF9OVU1fRklFTERTKQogCQllbG9n KEVSUk9SLCAidW5leHBlY3RlZCByZXN1bHQgZnJvbSBmZXRjaF9hdHRzdGF0cyBxdWVyeSIpOwog CiAJcmV0dXJuIHJlczsKQEAgLTYwNjgsNyArNTkzNyw3IEBAIG1hdGNoX2F0dHJtYXAoUEdyZXN1 bHQgKnJlcywKIAkJICovCiAJCWlmIChyb3cgPj0gMCAmJgogCQkJc3RyY21wKHJlbWF0dHJtYXBb bWFwaWR4XS5yZW1vdGVfYXR0bmFtZSwKLQkJCQkgICBQUWdldHZhbHVlKHJlcywgcm93LCBBVFRT VEFUU19BVFROQU1FKSkgPT0gMCkKKwkJCQkgICBQUWdldHZhbHVlKHJlcywgcm93LCBBVFRDT0xf QVRUTkFNRSkpID09IDApCiAJCXsKIAkJCXJlbWF0dHJtYXBbbWFwaWR4XS5yZXNfaW5kZXggPSBy b3c7CiAJCQljb250aW51ZTsKQEAgLTYwOTYsNyArNTk2NSw3IEBAIG1hdGNoX2F0dHJtYXAoUEdy ZXN1bHQgKnJlcywKIAkJICogcm93LCBpdCBtZWFucyB0aGUgc3RhdHMgZm9yIHRoZSBlbnRyeSBh cmUgbWlzc2luZy4KIAkJICovCiAJCWlmIChzdHJjbXAocmVtYXR0cm1hcFttYXBpZHhdLnJlbW90 ZV9hdHRuYW1lLAotCQkJCSAgIFBRZ2V0dmFsdWUocmVzLCByb3csIEFUVFNUQVRTX0FUVE5BTUUp KSA8IDApCisJCQkJICAgUFFnZXR2YWx1ZShyZXMsIHJvdywgQVRUQ09MX0FUVE5BTUUpKSA8IDAp CiAJCXsKIAkJCWVyZXBvcnQoV0FSTklORywKIAkJCQkJZXJybXNnKCJjb3VsZCBub3QgaW1wb3J0 IHN0YXRpc3RpY3MgZm9yIGZvcmVpZ24gdGFibGUgXCIlcy4lc1wiIC0tLSBubyBhdHRyaWJ1dGUg c3RhdGlzdGljcyBmb3VuZCBmb3IgY29sdW1uIFwiJXNcIiBvZiByZW1vdGUgdGFibGUgXCIlcy4l c1wiIiwKQEAgLTYxMDgsMTIgKzU5NzcsMTIgQEAgbWF0Y2hfYXR0cm1hcChQR3Jlc3VsdCAqcmVz LAogCiAJCS8qIFdlIHNob3VsZCBub3QgaGF2ZSBnb3QgYSBzdGF0cyByb3cgd2UgZGlkbid0IGV4 cGVjdC4gKi8KIAkJaWYgKHN0cmNtcChyZW1hdHRybWFwW21hcGlkeF0ucmVtb3RlX2F0dG5hbWUs Ci0JCQkJICAgUFFnZXR2YWx1ZShyZXMsIHJvdywgQVRUU1RBVFNfQVRUTkFNRSkpID4gMCkKKwkJ CQkgICBQUWdldHZhbHVlKHJlcywgcm93LCBBVFRDT0xfQVRUTkFNRSkpID4gMCkKIAkJCWVsb2co RVJST1IsICJ1bmV4cGVjdGVkIHJlc3VsdCBmcm9tIGZldGNoX2F0dHN0YXRzIHF1ZXJ5Iik7CiAK IAkJLyogV2UgZm91bmQgYSBtYXRjaC4gKi8KIAkJQXNzZXJ0KHN0cmNtcChyZW1hdHRybWFwW21h cGlkeF0ucmVtb3RlX2F0dG5hbWUsCi0JCQkJCSAgUFFnZXR2YWx1ZShyZXMsIHJvdywgQVRUU1RB VFNfQVRUTkFNRSkpID09IDApOworCQkJCQkgIFBRZ2V0dmFsdWUocmVzLCByb3csIEFUVENPTF9B VFROQU1FKSkgPT0gMCk7CiAJCXJlbWF0dHJtYXBbbWFwaWR4XS5yZXNfaW5kZXggPSByb3c7CiAJ fQogCkBAIC02MTI0LDM1ICs1OTkzLDM3IEBAIG1hdGNoX2F0dHJtYXAoUEdyZXN1bHQgKnJlcywK IAlyZXR1cm4gdHJ1ZTsKIH0KIAorCisvKgorICogQ29uZW5pZW5jZSByb3V0aW5lIHRvIG1hcCBh IGdpdmVuIGNlbGwgb2YgYSByZXN1bHQgc2V0IHRvIHRoZSBpbnB1dCBhcmd1bWVudHMKKyAqIG9m IGEgY2FsbCB0byByZWxhdGlvbl9zdGF0aXN0aWNzX3VwZGF0ZSgpIG9yIGF0dHJpYnV0ZV9zdGF0 aXN0aWNzX3VwZGF0ZSgpLgorICovCitzdGF0aWMgdm9pZAorbWFwX3Jlc190b19zdGF0KFBHcmVz dWx0ICpyZXMsIGludCByb3csIGludCBjb2wsCisJCQkJYm9vbCAqaXNudWxsLCBjaGFyICoqdmFs dWVzLCBpbnQgc3RhdG51bSkKK3sKKwlpc251bGxbc3RhdG51bV0gPSBQUWdldGlzbnVsbChyZXMs IHJvdywgY29sKTsKKwl2YWx1ZXNbc3RhdG51bV0gPSAoaXNudWxsW3N0YXRudW1dKSA/IE5VTEwg OiBQUWdldHZhbHVlKHJlcywgcm93LCBjb2wpOworfQorCisjZGVmaW5lIG1hcF9hdHRzdGF0KG5h bWUpIFwKKwltYXBfcmVzX3RvX3N0YXQocmVtc3RhdHMtPmF0dCwgcm93LCBBVFRDT0xfIyNuYW1l LCBhdHRpc251bGwsIGF0dHZhbHVlcywgQVRUU1RBVF8jI25hbWUpCisKIC8qCiAgKiBJbXBvcnQg ZmV0Y2hlZCBzdGF0aXN0aWNzIGludG8gdGhlIGxvY2FsIHN0YXRpc3RpY3MgdGFibGVzLgogICov CiBzdGF0aWMgYm9vbAotaW1wb3J0X2ZldGNoZWRfc3RhdGlzdGljcyhjb25zdCBjaGFyICpzY2hl bWFuYW1lLAoraW1wb3J0X2ZldGNoZWRfc3RhdGlzdGljcyhSZWxhdGlvbiByZWxhdGlvbiwKKwkJ CQkJCSAgY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCQkJCSAgY29uc3QgY2hhciAqcmVsbmFt ZSwKIAkJCQkJCSAgaW50IGF0dHJjbnQsCiAJCQkJCQkgIGNvbnN0IFJlbW90ZUF0dHJpYnV0ZU1h cHBpbmcgKnJlbWF0dHJtYXAsCiAJCQkJCQkgIFJlbW90ZVN0YXRzUmVzdWx0cyAqcmVtc3RhdHMp CiB7Ci0JU1BJUGxhblB0cglhdHRpbXBvcnRfcGxhbiA9IE5VTEw7Ci0JU1BJUGxhblB0cglhdHRj bGVhcl9wbGFuID0gTlVMTDsKLQlEYXR1bQkJdmFsdWVzW0FUVElNUE9SVF9TUUxfTlVNX0ZJRUxE U107Ci0JY2hhcgkJbnVsbHNbQVRUSU1QT1JUX1NRTF9OVU1fRklFTERTXTsKLQlpbnQJCQlzcGly YzsKKwlib29sCQlyZWxpc251bGxbUkVMU1RBVF9OVU1fUkVMU1RBVFNdOworCWNoYXIJICAgKnJl bHZhbHVlc1tSRUxTVEFUX05VTV9SRUxTVEFUU107CiAJYm9vbAkJb2sgPSBmYWxzZTsKIAotCS8q IEFzc2lnbiBhbGwgdGhlIGludmFyaWFudCBwYXJhbWV0ZXJzIGNvbW1vbiB0byByZWxhdGlvbi9h dHRyaWJ1dGUgc3RhdHMgKi8KLQl2YWx1ZXNbQVRUSU1QT1JUX1NRTF9WRVJTSU9OXSA9IEludDMy R2V0RGF0dW0ocmVtc3RhdHMtPnNlcnZlcl92ZXJzaW9uX251bSk7Ci0JbnVsbHNbQVRUSU1QT1JU X1NRTF9WRVJTSU9OXSA9ICcgJzsKLQotCXZhbHVlc1tBVFRJTVBPUlRfU1FMX1NDSEVNQU5BTUVd ID0gQ1N0cmluZ0dldFRleHREYXR1bShzY2hlbWFuYW1lKTsKLQludWxsc1tBVFRJTVBPUlRfU1FM X1NDSEVNQU5BTUVdID0gJyAnOwotCi0JdmFsdWVzW0FUVElNUE9SVF9TUUxfUkVMTkFNRV0gPSBD U3RyaW5nR2V0VGV4dERhdHVtKHJlbG5hbWUpOwotCW51bGxzW0FUVElNUE9SVF9TUUxfUkVMTkFN RV0gPSAnICc7Ci0KLQlTUElfY29ubmVjdCgpOwotCiAJLyoKIAkgKiBXZSBpbXBvcnQgYXR0cmli dXRlIHN0YXRpc3RpY3MgZmlyc3QsIGlmIGFueSwgYmVjYXVzZSB0aG9zZSBhcmUgbW9yZQogCSAq IHByb25lIHRvIGVycm9ycy4gIFRoaXMgYXZvaWRzIG1ha2luZyBhIG1vZGlmaWNhdGlvbiBvZiBw Z19jbGFzcyB0aGF0CkBAIC02MTYwLDI2ICs2MDMxLDE2IEBAIGltcG9ydF9mZXRjaGVkX3N0YXRp c3RpY3MoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkgKi8KIAlpZiAocmVtc3RhdHMtPmF0dCAh PSBOVUxMKQogCXsKLQkJQXNzZXJ0KFBRbmZpZWxkcyhyZW1zdGF0cy0+YXR0KSA9PSBBVFRTVEFU U19OVU1fRklFTERTKTsKKwkJQXNzZXJ0KFBRbmZpZWxkcyhyZW1zdGF0cy0+YXR0KSA9PSBBVFRD T0xfTlVNX0ZJRUxEUyk7CiAJCUFzc2VydChQUW50dXBsZXMocmVtc3RhdHMtPmF0dCkgPj0gMSk7 CiAKLQkJYXR0aW1wb3J0X3BsYW4gPSBTUElfcHJlcGFyZShhdHRpbXBvcnRfc3FsLCBBVFRJTVBP UlRfU1FMX05VTV9GSUVMRFMsCi0JCQkJCQkJCQkgKE9pZCAqKSBhdHRpbXBvcnRfYXJndHlwZXMp OwotCQlpZiAoYXR0aW1wb3J0X3BsYW4gPT0gTlVMTCkKLQkJCWVsb2coRVJST1IsICJmYWlsZWQg dG8gcHJlcGFyZSBhdHRpbXBvcnRfc3FsIHF1ZXJ5Iik7Ci0KLQkJYXR0Y2xlYXJfcGxhbiA9IFNQ SV9wcmVwYXJlKGF0dGNsZWFyX3NxbCwgQVRUQ0xFQVJfU1FMX05VTV9GSUVMRFMsCi0JCQkJCQkJ CQkoT2lkICopIGF0dGNsZWFyX2FyZ3R5cGVzKTsKLQkJaWYgKGF0dGNsZWFyX3BsYW4gPT0gTlVM TCkKLQkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gcHJlcGFyZSBhdHRjbGVhcl9zcWwgcXVlcnki KTsKLQotCQludWxsc1tBVFRJTVBPUlRfU1FMX0FUVE5VTV0gPSAnICc7Ci0KIAkJZm9yIChpbnQg bWFwaWR4ID0gMDsgbWFwaWR4IDwgYXR0cmNudDsgbWFwaWR4KyspCiAJCXsKKwkJCWJvb2wJCWF0 dGlzbnVsbFtBVFRTVEFUX05VTV9BVFRTVEFUU107CisJCQljaGFyCSAgICphdHR2YWx1ZXNbQVRU U1RBVF9OVU1fQVRUU1RBVFNdOwogCQkJaW50CQkJcm93ID0gcmVtYXR0cm1hcFttYXBpZHhdLnJl c19pbmRleDsKLQkJCURhdHVtCSAgICp2YWx1ZXMyID0gdmFsdWVzICsgMTsKLQkJCWNoYXIJICAg Km51bGxzMiA9IG51bGxzICsgMTsKKwkJCUF0dHJOdW1iZXIJYXR0bnVtID0gcmVtYXR0cm1hcFtt YXBpZHhdLmxvY2FsX2F0dG51bTsKKwkJCWNvbnN0IGNoYXIgKmF0dG5hbWUgPSByZW1hdHRybWFw W21hcGlkeF0ubG9jYWxfYXR0bmFtZTsKIAogCQkJLyogQWxsIG1hcHBpbmdzIHNob3VsZCBoYXZl IGJlZW4gYXNzaWduZWQgYSByZXN1bHQgc2V0IHJvdy4gKi8KIAkJCUFzc2VydChyb3cgPj0gMCk7 CkBAIC02MTg5LDcxICs2MDUwLDUwIEBAIGltcG9ydF9mZXRjaGVkX3N0YXRpc3RpY3MoY29uc3Qg Y2hhciAqc2NoZW1hbmFtZSwKIAkJCSAqLwogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAot CQkJLyoKLQkJCSAqIEZpcnN0LCBjbGVhciBleGlzdGluZyBhdHRyaWJ1dGUgc3RhdHMuCi0JCQkg KgotCQkJICogV2UgY2FuIHJlLXVzZSB0aGUgdmFsdWVzL251bGxzIGJlY2F1c2UgdGhlIG51bWJl ciBvZiBwYXJhbWV0ZXJzCi0JCQkgKiBpcyBsZXNzIGFuZCB0aGUgZmlyc3QgdHdvIHBhcmFtcyBh cmUgdGhlIHNhbWUgYXMgdGhlIHNlY29uZCBhbmQKLQkJCSAqIHRoaXJkIG9uZXMgaW4gYXR0aW1w b3J0X3NxbC4KLQkJCSAqLwotCQkJdmFsdWVzMltBVFRDTEVBUl9TUUxfQVRUTkFNRV0gPQotCQkJ CUNTdHJpbmdHZXRUZXh0RGF0dW0ocmVtYXR0cm1hcFttYXBpZHhdLmxvY2FsX2F0dG5hbWUpOwot Ci0JCQlzcGlyYyA9IFNQSV9leGVjdXRlX3BsYW4oYXR0Y2xlYXJfcGxhbiwgdmFsdWVzMiwgbnVs bHMyLCBmYWxzZSwgMSk7Ci0JCQlpZiAoc3BpcmMgIT0gU1BJX09LX1NFTEVDVCkKLQkJCQllbG9n KEVSUk9SLCAiZmFpbGVkIHRvIGV4ZWN1dGUgYXR0Y2xlYXJfc3FsIHF1ZXJ5IGZvciBjb2x1bW4g XCIlc1wiIG9mIGZvcmVpZ24gdGFibGUgXCIlcy4lc1wiIiwKLQkJCQkJIHJlbWF0dHJtYXBbbWFw aWR4XS5sb2NhbF9hdHRuYW1lLCBzY2hlbWFuYW1lLCByZWxuYW1lKTsKLQotCQkJdmFsdWVzW0FU VElNUE9SVF9TUUxfQVRUTlVNXSA9Ci0JCQkJSW50MTZHZXREYXR1bShyZW1hdHRybWFwW21hcGlk eF0ubG9jYWxfYXR0bnVtKTsKLQotCQkJLyogTG9vcCB0aHJvdWdoIGFsbCBtYXBwYWJsZSBjb2x1 bW5zIHRvIHNldCByZW1haW5pbmcgYXJndW1lbnRzICovCi0JCQlmb3IgKGludCBpID0gMDsgaSA8 IE5VTV9NQVBQRURfQVRUSU1QT1JUX0FSR1M7IGkrKykKLQkJCQltYXBfZmllbGRfdG9fYXJnKHJl bXN0YXRzLT5hdHQsIHJvdywKLQkJCQkJCQkJIGF0dHJfcmVzdWx0X2FyZ19tYXBbaV0ucmVzX2Zp ZWxkLAotCQkJCQkJCQkgYXR0cl9yZXN1bHRfYXJnX21hcFtpXS5hcmdfbnVtLAotCQkJCQkJCQkg dmFsdWVzLCBudWxscyk7Ci0KLQkJCXNwaXJjID0gU1BJX2V4ZWN1dGVfcGxhbihhdHRpbXBvcnRf cGxhbiwgdmFsdWVzLCBudWxscywgZmFsc2UsIDEpOwotCQkJaWYgKHNwaXJjICE9IFNQSV9PS19T RUxFQ1QpCi0JCQkJZWxvZyhFUlJPUiwgImZhaWxlZCB0byBleGVjdXRlIGF0dGltcG9ydF9zcWwg cXVlcnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgZm9yZWlnbiB0YWJsZSBcIiVzLiVzXCIiLAotCQkJ CQkgcmVtYXR0cm1hcFttYXBpZHhdLmxvY2FsX2F0dG5hbWUsIHNjaGVtYW5hbWUsIHJlbG5hbWUp OwotCi0JCQlpZiAoIWltcG9ydF9zcGlfcXVlcnlfb2soKSkKKwkJCWF0dHJpYnV0ZV9zdGF0aXN0 aWNzX2RlbGV0ZShyZWxhdGlvbiwgYXR0bnVtLCBmYWxzZSk7CisKKwkJCW1hcF9hdHRzdGF0KE5V TExfRlJBQyk7CisJCQltYXBfYXR0c3RhdChBVkdfV0lEVEgpOworCQkJbWFwX2F0dHN0YXQoTl9E SVNUSU5DVCk7CisJCQltYXBfYXR0c3RhdChNT1NUX0NPTU1PTl9WQUxTKTsKKwkJCW1hcF9hdHRz dGF0KE1PU1RfQ09NTU9OX0ZSRVFTKTsKKwkJCW1hcF9hdHRzdGF0KEhJU1RPR1JBTV9CT1VORFMp OworCQkJbWFwX2F0dHN0YXQoQ09SUkVMQVRJT04pOworCQkJbWFwX2F0dHN0YXQoTU9TVF9DT01N T05fRUxFTVMpOworCQkJbWFwX2F0dHN0YXQoTU9TVF9DT01NT05fRUxFTV9GUkVRUyk7CisJCQlt YXBfYXR0c3RhdChFTEVNX0NPVU5UX0hJU1RPR1JBTSk7CisJCQltYXBfYXR0c3RhdChSQU5HRV9M RU5HVEhfSElTVE9HUkFNKTsKKwkJCW1hcF9hdHRzdGF0KFJBTkdFX0VNUFRZX0ZSQUMpOworCQkJ bWFwX2F0dHN0YXQoUkFOR0VfQk9VTkRTX0hJU1RPR1JBTSk7CisKKwkJCWlmICghYXR0cmlidXRl X3N0YXRpc3RpY3NfdXBkYXRlKHJlbGF0aW9uLCBhdHRuYW1lLCBhdHRudW0sIGZhbHNlLAorCQkJ CQkJCQkJCQkgYXR0aXNudWxsLAorCQkJCQkJCQkJCQkgKGNvbnN0IGNoYXIgKiopIGF0dHZhbHVl cykpCiAJCQl7CiAJCQkJZXJlcG9ydChXQVJOSU5HLAogCQkJCQkJZXJybXNnKCJjb3VsZCBub3Qg aW1wb3J0IHN0YXRpc3RpY3MgZm9yIGZvcmVpZ24gdGFibGUgXCIlcy4lc1wiIC0tLSBhdHRyaWJ1 dGUgc3RhdGlzdGljcyBpbXBvcnQgZmFpbGVkIGZvciBjb2x1bW4gXCIlc1wiIG9mIHRoaXMgZm9y ZWlnbiB0YWJsZSIsCi0JCQkJCQkJICAgc2NoZW1hbmFtZSwgcmVsbmFtZSwKLQkJCQkJCQkgICBy ZW1hdHRybWFwW21hcGlkeF0ubG9jYWxfYXR0bmFtZSkpOworCQkJCQkJCSAgIHNjaGVtYW5hbWUs IHJlbG5hbWUsIGF0dG5hbWUpKTsKIAkJCQlnb3RvIGltcG9ydF9jbGVhbnVwOwogCQkJfQogCQl9 CiAJfQogCiAJLyoKLQkgKiBJbXBvcnQgcmVsYXRpb24gc3RhdHMuICBXZSBvbmx5IHBlcmZvcm0g dGhpcyBvbmNlLCBzbyB0aGVyZSBpcyBubyBwb2ludAotCSAqIGluIHByZXBhcmluZyB0aGUgc3Rh dGVtZW50LgotCSAqCi0JICogV2UgY2FuIHJlLXVzZSB0aGUgdmFsdWVzL251bGxzIGJlY2F1c2Ug dGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGlzIGxlc3MKLQkgKiBhbmQgdGhlIGZpcnN0IHRocmVl IHBhcmFtcyBhcmUgdGhlIHNhbWUgYXMgYXR0aW1wb3J0X3NxbC4KKwkgKiBJbXBvcnQgcmVsYXRp b24gc3RhdHMuCiAJICovCiAJQXNzZXJ0KHJlbXN0YXRzLT5yZWwgIT0gTlVMTCk7Ci0JQXNzZXJ0 KFBRbmZpZWxkcyhyZW1zdGF0cy0+cmVsKSA9PSBSRUxTVEFUU19OVU1fRklFTERTKTsKLQlBc3Nl cnQoUFFudHVwbGVzKHJlbXN0YXRzLT5yZWwpID09IDEpOwotCW1hcF9maWVsZF90b19hcmcocmVt c3RhdHMtPnJlbCwgMCwgUkVMU1RBVFNfUkVMUEFHRVMsCi0JCQkJCSBSRUxJTVBPUlRfU1FMX1JF TFBBR0VTLCB2YWx1ZXMsIG51bGxzKTsKLQltYXBfZmllbGRfdG9fYXJnKHJlbXN0YXRzLT5yZWws IDAsIFJFTFNUQVRTX1JFTFRVUExFUywKLQkJCQkJIFJFTElNUE9SVF9TUUxfUkVMVFVQTEVTLCB2 YWx1ZXMsIG51bGxzKTsKLQotCXNwaXJjID0gU1BJX2V4ZWN1dGVfd2l0aF9hcmdzKHJlbGltcG9y dF9zcWwsCi0JCQkJCQkJCSAgUkVMSU1QT1JUX1NRTF9OVU1fRklFTERTLAotCQkJCQkJCQkgIChP aWQgKikgcmVsaW1wb3J0X2FyZ3R5cGVzLAotCQkJCQkJCQkgIHZhbHVlcywgbnVsbHMsIGZhbHNl LCAxKTsKLQlpZiAoc3BpcmMgIT0gU1BJX09LX1NFTEVDVCkKLQkJZWxvZyhFUlJPUiwgImZhaWxl ZCB0byBleGVjdXRlIHJlbGltcG9ydF9zcWwgcXVlcnkgZm9yIGZvcmVpZ24gdGFibGUgXCIlcy4l c1wiIiwKLQkJCSBzY2hlbWFuYW1lLCByZWxuYW1lKTsKLQotCWlmICghaW1wb3J0X3NwaV9xdWVy eV9vaygpKQorCisJbWFwX3Jlc190b19zdGF0KHJlbXN0YXRzLT5yZWwsIDAsIFJFTENPTF9SRUxQ QUdFUywKKwkJCQkJcmVsaXNudWxsLCByZWx2YWx1ZXMsIFJFTFNUQVRfUkVMUEFHRVMpOworCW1h cF9yZXNfdG9fc3RhdChyZW1zdGF0cy0+cmVsLCAwLCBSRUxDT0xfUkVMVFVQTEVTLAorCQkJCQly ZWxpc251bGwsIHJlbHZhbHVlcywgUkVMU1RBVF9SRUxUVVBMRVMpOworCXJlbGlzbnVsbFtSRUxT VEFUX1JFTEFMTFZJU0lCTEVdID0gdHJ1ZTsKKwlyZWx2YWx1ZXNbUkVMU1RBVF9SRUxBTExWSVNJ QkxFXSA9IE5VTEw7CisJcmVsaXNudWxsW1JFTFNUQVRfUkVMQUxMRlJPWkVOXSA9IHRydWU7CisJ cmVsdmFsdWVzW1JFTFNUQVRfUkVMQUxMRlJPWkVOXSA9IE5VTEw7CisKKwlpZiAoIXJlbGF0aW9u X3N0YXRpc3RpY3NfdXBkYXRlKHJlbGF0aW9uLCByZWxpc251bGwsCisJCQkJCQkJCQkoY29uc3Qg Y2hhciAqKikgcmVsdmFsdWVzKSkKIAl7CiAJCWVyZXBvcnQoV0FSTklORywKIAkJCQllcnJtc2co ImNvdWxkIG5vdCBpbXBvcnQgc3RhdGlzdGljcyBmb3IgZm9yZWlnbiB0YWJsZSBcIiVzLiVzXCIg LS0tIHJlbGF0aW9uIHN0YXRpc3RpY3MgaW1wb3J0IGZhaWxlZCBmb3IgdGhpcyBmb3JlaWduIHRh YmxlIiwKQEAgLTYyNjQsNTcgKzYxMDQsOSBAQCBpbXBvcnRfZmV0Y2hlZF9zdGF0aXN0aWNzKGNv bnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJb2sgPSB0cnVlOwogCiBpbXBvcnRfY2xlYW51cDoKLQlp ZiAoYXR0aW1wb3J0X3BsYW4pCi0JCVNQSV9mcmVlcGxhbihhdHRpbXBvcnRfcGxhbik7Ci0JaWYg KGF0dGNsZWFyX3BsYW4pCi0JCVNQSV9mcmVlcGxhbihhdHRjbGVhcl9wbGFuKTsKLQlTUElfZmlu aXNoKCk7CiAJcmV0dXJuIG9rOwogfQogCi0vKgotICogTW92ZSBhIHN0cmluZyB2YWx1ZSBmcm9t IGEgcmVzdWx0IHNldCB0byBhIFRleHQgdmFsdWUgb2YgYSBEYXR1bSBhcnJheS4KLSAqLwotc3Rh dGljIHZvaWQKLW1hcF9maWVsZF90b19hcmcoUEdyZXN1bHQgKnJlcywgaW50IHJvdywgaW50IGZp ZWxkLAotCQkJCSBpbnQgYXJnLCBEYXR1bSAqdmFsdWVzLCBjaGFyICpudWxscykKLXsKLQlpZiAo UFFnZXRpc251bGwocmVzLCByb3csIGZpZWxkKSkKLQl7Ci0JCXZhbHVlc1thcmddID0gKERhdHVt KSAwOwotCQludWxsc1thcmddID0gJ24nOwotCX0KLQllbHNlCi0JewotCQljb25zdCBjaGFyICpz ID0gUFFnZXR2YWx1ZShyZXMsIHJvdywgZmllbGQpOwotCi0JCXZhbHVlc1thcmddID0gQ1N0cmlu Z0dldFRleHREYXR1bShzKTsKLQkJbnVsbHNbYXJnXSA9ICcgJzsKLQl9Ci19Ci0KLS8qCi0gKiBD aGVjayB0aGUgMXgxIHJlc3VsdCBzZXQgb2YgYSBwZ19yZXN0b3JlXypfc3RhdHMoKSBjb21tYW5k IGZvciBzdWNjZXNzLgotICovCi1zdGF0aWMgYm9vbAotaW1wb3J0X3NwaV9xdWVyeV9vayh2b2lk KQotewotCVR1cGxlRGVzYwl0dXBkZXNjOwotCURhdHVtCQlkYXQ7Ci0JYm9vbAkJaXNudWxsOwot Ci0JQXNzZXJ0KFNQSV90dXB0YWJsZSAhPSBOVUxMKTsKLQlBc3NlcnQoU1BJX3Byb2Nlc3NlZCA9 PSAxKTsKLQotCXR1cGRlc2MgPSBTUElfdHVwdGFibGUtPnR1cGRlc2M7Ci0JQXNzZXJ0KHR1cGRl c2MtPm5hdHRzID09IDEpOwotCUFzc2VydChUdXBsZURlc2NBdHRyKHR1cGRlc2MsIDApLT5hdHR0 eXBpZCA9PSBCT09MT0lEKTsKLQlkYXQgPSBTUElfZ2V0YmludmFsKFNQSV90dXB0YWJsZS0+dmFs c1swXSwgdHVwZGVzYywgMSwgJmlzbnVsbCk7Ci0JQXNzZXJ0KCFpc251bGwpOwotCi0JcmV0dXJu IERhdHVtR2V0Qm9vbChkYXQpOwotfQotCiAvKgogICogSW1wb3J0IGEgZm9yZWlnbiBzY2hlbWEK ICAqLwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5z cWwgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAppbmRleCA4MTYy YzU0OTZiZi4uMjAxY2ViZmQyYzIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Nx bC9wb3N0Z3Jlc19mZHcuc3FsCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jl c19mZHcuc3FsCkBAIC00NjQyLDYgKzQ2NDIsNDYgQEAgQU5BTFlaRSBkdGVzdF90YWJsZTsKIAog QU5BTFlaRSBWRVJCT1NFIGR0ZXN0X2Z0YWJsZTsgICAgICAgICAgICAgLS0gc2hvdWxkIHdvcmsK IAorLS0gZHRlc3RfZnRhYmxlcyBzdGF0cyBzaG91bGQgbm93IGV4YWN0bHkgbWF0Y2ggZHRlc3Rf dGFibGUKKy0tIGNvbXBhcmUgdGhlIHJvd2NvdW50cywgc2hvdWxkIGdldCAwIHJvd3MgYmFjawor U0VMRUNUIENPVU5UKCopIEZST00gcGdfc3RhdHMKK1dIRVJFIHNjaGVtYW5hbWUgPSAncHVibGlj JyBBTkQgdGFibGVuYW1lID0gJ2R0ZXN0X3RhYmxlJworRVhDRVBUCitTRUxFQ1QgQ09VTlQoKikg RlJPTSBwZ19zdGF0cworV0hFUkUgc2NoZW1hbmFtZSA9ICdwdWJsaWMnIEFORCB0YWJsZW5hbWUg PSAnZHRlc3RfZnRhYmxlJzsKKworLS0gY29tcGFyZSB2YWx1ZXMsIHNob3VsZCBtYXRjaAorU0VM RUNUIHJlbHBhZ2VzLCByZWx0dXBsZXMKK0ZST00gcGdfY2xhc3MKK1dIRVJFIG9pZCA9ICdwdWJs aWMuZHRlc3RfdGFibGUnOjpyZWdjbGFzcworRVhDRVBUCitTRUxFQ1QgcmVscGFnZXMsIHJlbHR1 cGxlcworRlJPTSBwZ19jbGFzcworV0hFUkUgb2lkID0gJ3B1YmxpYy5kdGVzdF9mdGFibGUnOjpy ZWdjbGFzczsKKworU0VMRUNUIHJlbHBhZ2VzLCByZWx0dXBsZXMKK0ZST00gcGdfY2xhc3MKK1dI RVJFIG9pZCA9ICdwdWJsaWMuZHRlc3RfZnRhYmxlJzo6cmVnY2xhc3MKK0VYQ0VQVAorU0VMRUNU IHJlbHBhZ2VzLCByZWx0dXBsZXMKK0ZST00gcGdfY2xhc3MKK1dIRVJFIG9pZCA9ICdwdWJsaWMu ZHRlc3RfdGFibGUnOjpyZWdjbGFzczsKKworLS0gdGVzdCBvbmx5IGEgZmV3IHN0YXRzIGNvbHVt bnMgY29tbW9uIHRvIGludGVnZXIgdHlwZXMKK1NFTEVDVCBhdHRuYW1lLCBpbmhlcml0ZWQsIG51 bGxfZnJhYywgYXZnX3dpZHRoLCBuX2Rpc3RpbmN0LAorICBtb3N0X2NvbW1vbl92YWxzOjp0ZXh0 IGFzIG1jdiwgbW9zdF9jb21tb25fZnJlcXMsCisgIGhpc3RvZ3JhbV9ib3VuZHM6OnRleHQgYXMg aGIsIGNvcnJlbGF0aW9uCitGUk9NIHBnX3N0YXRzCitXSEVSRSBzY2hlbWFuYW1lID0gJ3B1Ymxp YycKK0FORCB0YWJsZW5hbWUgPSAnZHRlc3RfdGFibGUnCitFWENFUFQKK1NFTEVDVCBhdHRuYW1l LCBpbmhlcml0ZWQsIG51bGxfZnJhYywgYXZnX3dpZHRoLCBuX2Rpc3RpbmN0LAorICBtb3N0X2Nv bW1vbl92YWxzOjp0ZXh0IGFzIG1jdiwgbW9zdF9jb21tb25fZnJlcXMsCisgIGhpc3RvZ3JhbV9i b3VuZHM6OnRleHQgYXMgaGIsIGNvcnJlbGF0aW9uCitGUk9NIHBnX3N0YXRzCitXSEVSRSBzY2hl bWFuYW1lID0gJ3B1YmxpYycKK0FORCB0YWJsZW5hbWUgPSAnZHRlc3RfZnRhYmxlJzsKKwogLS0g Y2xlYW51cAogRFJPUCBGT1JFSUdOIFRBQkxFIHNpbXBvcnRfZnRhYmxlOwogRFJPUCBGT1JFSUdO IFRBQkxFIHNpbXBvcnRfZnZpZXc7Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --000000000000e977f10655600bcf Content-Type: application/octet-stream; name="v2-0011-Rename-attribute_statistics_update.patch" Content-Disposition: attachment; filename="v2-0011-Rename-attribute_statistics_update.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqyw9g7410 RnJvbSBkZWUzMDcwNGRlZDRhMzBhMzRkOGUzZTcwNjliNTE2OTNmMWI5Zjc1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogU3VuLCAyOCBKdW4gMjAyNiAyMjoxMDowNiAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djIgMTEvMTNdIFJlbmFtZSBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUuCgpSZW5hbWUgYXR0 cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlIGFuZCBhdHRyaWJ1dGVfc3RhdHNfYXJnbnVtLiAgVGhp cwphbGxvd3MgdXMgdG8gY3JlYXRlIGEgcHVibGljIGZ1bmN0aW9uIG9mIHRoZSBzYW1lIG5hbWUg YnV0IGEgc2xpZ2h0bHkKZGlmZmVyZW50IHB1cnBvc2UuCgpSZW5hbWUgYXR0cmlidXRlX3N0YXRz X2FyZ251bSB0byBhdHRyaWJ1dGVfYXJnc19hcmdudW0gYW5kCmNsZWFyX2F0dHJpYnV0ZV9zdGF0 c19hcmdudW0gdG8gY2xlYXJfYXR0cmlidXRlX2FyZ3NfYXJnbnVtIGJlY2F1c2UgdGhleQpjb3Zl ciBhbGwgcGFyYW1ldGVycyBmb3IgcGdfcmVzdG9yZV9hdHRyaWJ1dGVfc3RhdHMgYW5kCnBnX2Ns ZWFyX2F0dHJpYnV0ZV9zdGF0cyByZXNwZWN0aXZlbHksIG5vdCBqdXN0IHRoZSBzdGF0aXN0aWNh bCBvbmVzLgoKVGhlc2UgY2hhbmdlcyBtYWtlIHdheSBmb3IgcHVibGljbHkgdmlzaWJsZSBlbnVt cyBvZiB0aGUgc2FtZSBuYW1lcyB0aGF0CmNvbnRhaW4gb25seSB0aGUgc3RhdGlzdGljYWwgY29s dW1ucy4KLS0tCiBzcmMvYmFja2VuZC9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5jIHwgMTIg KysrKysrLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRz LmMgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5jCmluZGV4IDI2MGU1 YmIxZDQ4Li4yNGMzMjA0ZTgzNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9h dHRyaWJ1dGVfc3RhdHMuYworKysgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9z dGF0cy5jCkBAIC0zMiwxMCArMzIsMTAgQEAKIAogLyoKICAqIFBvc2l0aW9uYWwgYXJndW1lbnQg bnVtYmVycywgbmFtZXMsIGFuZCB0eXBlcyBmb3IKLSAqIGF0dHJpYnV0ZV9zdGF0aXN0aWNzX3Vw ZGF0ZSgpIGFuZCBwZ19yZXN0b3JlX2F0dHJpYnV0ZV9zdGF0cygpLgorICogdXBkYXRlX2F0dHN0 YXRzKCkgYW5kIHBnX3Jlc3RvcmVfYXR0cmlidXRlX3N0YXRzKCkuCiAgKi8KIAotZW51bSBhdHRy aWJ1dGVfc3RhdHNfYXJnbnVtCitlbnVtIGF0dHJpYnV0ZV9hcmdzX2FyZ251bQogewogCUFUVEFS R19BVFRSRUxTQ0hFTUEgPSAwLAogCUFUVEFSR19BVFRSRUxOQU1FLApAQCAtODYsNyArODYsNyBA QCBzdGF0aWMgc3RydWN0IFN0YXRzQXJnSW5mbyBhdHRhcmdpbmZvW10gPQogICogcGdfY2xlYXJf YXR0cmlidXRlX3N0YXRzKCkuCiAgKi8KIAotZW51bSBjbGVhcl9hdHRyaWJ1dGVfc3RhdHNfYXJn bnVtCitlbnVtIGNsZWFyX2F0dHJpYnV0ZV9hcmdzX2FyZ251bQogewogCUNfQVRUQVJHX0FUVFJF TFNDSEVNQSA9IDAsCiAJQ19BVFRBUkdfQVRUUkVMTkFNRSwKQEAgLTEwNCw3ICsxMDQsNyBAQCBz dGF0aWMgc3RydWN0IFN0YXRzQXJnSW5mbyBjbGVhcmFyZ2luZm9bXSA9CiAJW0NfQVRUQVJHX05V TV9BVFRBUkdTXSA9IHswfQogfTsKIAotc3RhdGljIGJvb2wgYXR0cmlidXRlX3N0YXRpc3RpY3Nf dXBkYXRlKGNvbnN0IE51bGxhYmxlRGF0dW0gKmFyZ3MpOworc3RhdGljIGJvb2wgdXBkYXRlX2F0 dHN0YXRzKGNvbnN0IE51bGxhYmxlRGF0dW0gKmFyZ3MpOwogc3RhdGljIHZvaWQgdXBzZXJ0X3Bn X3N0YXRpc3RpYyhSZWxhdGlvbiBzdGFyZWwsIEhlYXBUdXBsZSBvbGR0dXAsCiAJCQkJCQkJCWNv bnN0IERhdHVtICp2YWx1ZXMsIGNvbnN0IGJvb2wgKm51bGxzLCBjb25zdCBib29sICpyZXBsYWNl cyk7CiBzdGF0aWMgYm9vbCBkZWxldGVfcGdfc3RhdGlzdGljKE9pZCByZWxvaWQsIEF0dHJOdW1i ZXIgYXR0bnVtLCBib29sIHN0YWluaGVyaXQpOwpAQCAtMTI2LDcgKzEyNiw3IEBAIHN0YXRpYyBi b29sIGRlbGV0ZV9wZ19zdGF0aXN0aWMoT2lkIHJlbG9pZCwgQXR0ck51bWJlciBhdHRudW0sIGJv b2wgc3RhaW5oZXJpdCk7CiAgKiBhbmQgb3RoZXIgc3RhdGlzdGljIGtpbmRzIG1heSBzdGlsbCBi ZSB1cGRhdGVkLgogICovCiBzdGF0aWMgYm9vbAotYXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRl KGNvbnN0IE51bGxhYmxlRGF0dW0gKmFyZ3MpCit1cGRhdGVfYXR0c3RhdHMoY29uc3QgTnVsbGFi bGVEYXR1bSAqYXJncykKIHsKIAljaGFyCSAgICpuc3BuYW1lOwogCWNoYXIJICAgKnJlbG5hbWU7 CkBAIC02ODAsNyArNjgwLDcgQEAgcGdfcmVzdG9yZV9hdHRyaWJ1dGVfc3RhdHMoUEdfRlVOQ1RJ T05fQVJHUykKIAkJCQkJCQkJCQlhdHRhcmdpbmZvKSkKIAkJcmVzdWx0ID0gZmFsc2U7CiAKLQlp ZiAoIWF0dHJpYnV0ZV9zdGF0aXN0aWNzX3VwZGF0ZShwb3NpdGlvbmFsX2FyZ3MpKQorCWlmICgh dXBkYXRlX2F0dHN0YXRzKHBvc2l0aW9uYWxfYXJncykpCiAJCXJlc3VsdCA9IGZhbHNlOwogCiAJ UEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKLS0gCjIuNTAuMSAoQXBwbGUgR2l0LTE1NSkKCg== --000000000000e977f10655600bcf--