Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oXmLU-0007WZ-Gd for pgsql-hackers@arkaria.postgresql.org; Mon, 12 Sep 2022 16:31:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oXmKU-0007Tr-Gj for pgsql-hackers@arkaria.postgresql.org; Mon, 12 Sep 2022 16:30:38 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oXmKT-0007Tc-Ni for pgsql-hackers@lists.postgresql.org; Mon, 12 Sep 2022 16:30:38 +0000 Received: from mail-qt1-x82f.google.com ([2607:f8b0:4864:20::82f]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oXmKL-0002HJ-7b for pgsql-hackers@lists.postgresql.org; Mon, 12 Sep 2022 16:30:36 +0000 Received: by mail-qt1-x82f.google.com with SMTP id f26so4095173qto.11 for ; Mon, 12 Sep 2022 09:30:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=crunchydata.com; s=google; h=user-agent:mime-version:date:organization:references:in-reply-to:cc :to:reply-to:from:subject:message-id:from:to:cc:subject:date; bh=eb5ZHFXGDdi9jDRcjFc8YlUiGz1KBy9yBQg7ygukM5Y=; b=bJTGbRUCo4iitMamqgfiJsh2QB7zPpfnyu5bBP5+byL0hVVEuEHOnOJehrtfh12aKc zFyw71zwpIcpDGbadJX4zCn9ViU6PWGfBS/zHIpIY95qrBg1S9RCa+FwHlhgaFoWKVXw TCka0Dv3pN5yuUcSd9IzF0ZNARfl0dJX7E6KAf+telgid3NdG/fBIOonXwszPWj8qTtZ tsNry9h13CaG5Zb/Qn18tyYAASUd8/CiJIHzK/6GaU+UFiSiK1FQU5UaLPX+CTWkB5au vcnbB6ngMySEP3268c2Ru3GrRmVsgZupbJA+0YGuFgXefrmXaiU23osLiumpJ+FF9bJG epPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=user-agent:mime-version:date:organization:references:in-reply-to:cc :to:reply-to:from:subject:message-id:x-gm-message-state:from:to:cc :subject:date; bh=eb5ZHFXGDdi9jDRcjFc8YlUiGz1KBy9yBQg7ygukM5Y=; b=EA9xW5GGMhla7ypWwmerLL3ZOdlYFQz7geWzJEnYS3NeQ7zRMctcUGsj1CZETfXuvu VzSiFyCqeAINUUbd4QO75wfHdq2yM9WuygiokydcoXZcWbKQnIO5dmYhpu6qzRK8TpZ0 3PzsrC47tahiZaabrivjRBkk9sVY+p9c9vRCg8GxakJSqNrk6mgibOqMrIg7DxZ5NW1y zseA+L/DPmDkw5XmkoDB9eAgcr8CJ1u5ta7KoT12lr+cwcnrSnCgfJClg3iswQSiL2cT 4XxLq7fZMwVMvZN8PrIMGPOJLhdTZ3Pb8xew6aPsHIkboKCw7+IGxHgjNfa2Seh/neSQ RgPA== X-Gm-Message-State: ACgBeo3tJ7U8FSfNU6AamkpRz0PvHxxMc1eilcFuQqBL9mrADtYqXgnx kSBmKwNZQNgKNPnvyIPh44zfnA== X-Google-Smtp-Source: AA6agR6wcecXe97gYbKCQHFzQIBFeQOsLabfdwI4TzpHzG6tujLp+F83lDtNQ1PhCmMOlfixRT+cCg== X-Received: by 2002:a05:622a:1829:b0:35b:b542:b593 with SMTP id t41-20020a05622a182900b0035bb542b593mr4560418qtc.471.1663000227709; Mon, 12 Sep 2022 09:30:27 -0700 (PDT) Received: from raker.lan (cpe-24-163-67-44.nc.res.rr.com. [24.163.67.44]) by smtp.gmail.com with ESMTPSA id y11-20020a05620a25cb00b006baef6daa45sm7438335qko.119.2022.09.12.09.30.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Sep 2022 09:30:26 -0700 (PDT) Message-ID: Subject: Re: Add the ability to limit the amount of memory that can be allocated to backends. From: Reid Thompson Reply-To: reid.thompson@crunchydata.com To: Justin Pryzby Cc: reid.thompson@crunchydata.com, pgsql-hackers@lists.postgresql.org In-Reply-To: <20220909171417.GP31833@telsasoft.com> References: <20220831173457.GX31833@telsasoft.com> <3178e9a1b7acbcf023fafed68ca48d76afc07907.camel@crunchydata.com> <20220909171417.GP31833@telsasoft.com> Organization: Crunchy Data Content-Type: multipart/mixed; boundary="=-GCEd/eJRx8g8cNF0MDYh" Date: Mon, 12 Sep 2022 12:25:25 -0400 MIME-Version: 1.0 User-Agent: Evolution 3.45.1 Compiled: 2022-06-07 10:22:05 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-GCEd/eJRx8g8cNF0MDYh Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, 2022-09-09 at 12:14 -0500, Justin Pryzby wrote: > On Sat, Sep 03, 2022 at 11:40:03PM -0400, Reid Thompson wrote: > > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 0, 0, INT_MAX, > > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 NULL, NULL, NULL > > > I think this needs a maximum like INT_MAX/1024/1024 > >=20 > > Is this noting that we'd set a ceiling of 2048MB? >=20 > The reason is that you're later multiplying it by 1024*1024, so you > need > to limit it to avoid overflowing.=C2=A0 Compare with > min_dynamic_shared_memory, Log_RotationSize, maintenance_work_mem, > autovacuum_work_mem. What I originally attempted to implement is: GUC "max_total_backend_memory" max value as INT_MAX =3D 2147483647 MB (2251799812636672 bytes). And the other variables and comparisons as bytes represented as uint64 to avoid overflow. Is this invalid? > typo: Explicitely corrected > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 errmsg("= request will exceed postgresql.conf > defined max_total_backend_memory limit (%lu > %lu)", >=20 > I wouldn't mention postgresql.conf - it could be in > postgresql.auto.conf, or an include file, or a -c parameter. > Suggest: allocation would exceed max_total_backend_memory limit... > updated >=20 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 ereport(LOG, errmsg("decrease reduces reported > backend memory allocated below zero; setting reported to 0")); >=20 > Suggest: deallocation would decrease backend memory below zero; updated > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 {"max_total_backend_memory", PGC_SIGHUP, > RESOURCES_MEM,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=20 >=20 > Should this be PGC_SU_BACKEND to allow a superuser to set a higher > limit (or no limit)? Sounds good to me. I'll update to that. Would PGC_SUSET be too open? > There's compilation warning under mingw cross compile due to > sizeof(long).=C2=A0 See d914eb347 and other recent commits which I guess > is > the current way to handle this. > http://cfbot.cputube.org/reid-thompson.html updated %lu to %llu and changed cast from uint64 to=C2=A0 unsigned long long in the ereport call > For performance test, you'd want to check what happens with a large > number of max_connections (and maybe a large number of clients).=C2=A0 TP= S > isn't the only thing that matters.=C2=A0 For example, a utility command > might > sometimes do a lot of allocations (or deallocations), or a > "parameterized nested loop" may loop over over many outer tuples and > reset for each.=C2=A0 There's also a lot of places that reset to a > "per-tuple" context.=C2=A0 I started looking at its performance, but > nothing > to show yet. Thanks > Would you keep people copied on your replies ("reply all") ?=C2=A0 > Otherwise > I (at least) may miss them.=C2=A0 I think that's what's typical on these > lists (and the list tool is smart enough not to send duplicates to > people who are direct recipients). Ok - will do, thanks. --=20 Reid Thompson Senior Software Engineer Crunchy Data, Inc. reid.thompson@crunchydata.com www.crunchydata.com --=-GCEd/eJRx8g8cNF0MDYh Content-Disposition: attachment; filename*0=0001-Add-tracking-of-backend-memory-allocated-to-pg_stat_.pat; filename*1=ch Content-Type: text/x-patch; name="0001-Add-tracking-of-backend-memory-allocated-to-pg_stat_.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA1ODRhMDRmMWI1Mzk0ODA0OWU3MzE2NWE0ZmZkZDU0NGM5NTBhYjBkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSZWlkIFRob21wc29uIDxqcmVpZHRob21wc29uQG5jLnJyLmNv bT4KRGF0ZTogVGh1LCAxMSBBdWcgMjAyMiAxMjowMToyNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg MS8yXSBBZGQgdHJhY2tpbmcgb2YgYmFja2VuZCBtZW1vcnkgYWxsb2NhdGVkIHRvCiBwZ19zdGF0 X2FjdGl2aXR5CgpUaGlzIG5ldyBmaWVsZCBkaXNwbGF5cyB0aGUgY3VycmVudCBieXRlcyBvZiBt ZW1vcnkgYWxsb2NhdGVkIHRvIHRoZQpiYWNrZW5kIHByb2Nlc3MuIEl0IGlzIHVwZGF0ZWQgYXMg bWVtb3J5IGZvciB0aGUgcHJvY2VzcyBpcwptYWxsb2MnZC9mcmVlJ2QuIE1lbW9yeSBhbGxvY2F0 ZWQgdG8gaXRlbXMgb24gdGhlIGZyZWVsaXN0IGlzIGluY2x1ZGVkIGluCnRoZSBkaXNwbGF5ZWQg dmFsdWUuICBEeW5hbWljIHNoYXJlZCBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGluY2x1ZGVkCm9u bHkgaW4gdGhlIHZhbHVlIGRpc3BsYXllZCBmb3IgdGhlIGJhY2tlbmQgdGhhdCBjcmVhdGVkIHRo ZW0sIHRoZXkgYXJlCm5vdCBpbmNsdWRlZCBpbiB0aGUgdmFsdWUgZm9yIGJhY2tlbmRzIHRoYXQg YXJlIGF0dGFjaGVkIHRvIHRoZW0gdG8KYXZvaWQgZG91YmxlIGNvdW50aW5nLiBPbiBvY2Nhc2lv biwgb3JwaGFuZWQgbWVtb3J5IHNlZ21lbnRzIG1heSBiZQpjbGVhbmVkIHVwIG9uIHBvc3RtYXN0 ZXIgc3RhcnR1cC4gVGhpcyBtYXkgcmVzdWx0IGluIGRlY3JlYXNpbmcgdGhlIHN1bQp3aXRob3V0 IGEgcHJpb3IgaW5jcmVtZW50LiBXZSBsaW1pdCB0aGUgZmxvb3Igb2YgYmFja2VuZF9tZW1fYWxs b2NhdGVkCnRvIHplcm8uIFVwZGF0ZWQgcGdfc3RhdF9hY3Rpdml0eSBkb2N1bWVudGF0aW9uIGZv ciB0aGUgbmV3IGNvbHVtbi4KLS0tCiBkb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sICAgICAg ICAgICAgICAgIHwgIDEyICsrKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3Fs ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21faW1wbC5jICAgICAg ICAgIHwgIDgwICsrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvYmFj a2VuZF9zdGF0dXMuYyB8IDEwNSArKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3Bnc3RhdGZ1bmNzLmMgICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMv bW1nci9hc2V0LmMgICAgICAgICAgICAgICB8ICAxOCArKysrCiBzcmMvYmFja2VuZC91dGlscy9t bWdyL2dlbmVyYXRpb24uYyAgICAgICAgIHwgIDE1ICsrKwogc3JjL2JhY2tlbmQvdXRpbHMvbW1n ci9zbGFiLmMgICAgICAgICAgICAgICB8ICAyMSArKysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0ICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvaW5jbHVkZS91dGlscy9iYWNrZW5k X3N0YXR1cy5oICAgICAgICAgIHwgICA3ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1 bGVzLm91dCAgICAgICAgIHwgICA5ICstCiAxMSBmaWxlcyBjaGFuZ2VkLCAyNjkgaW5zZXJ0aW9u cygrKSwgOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbW9uaXRvcmlu Zy5zZ21sIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbAppbmRleCAxZDk1MDlhMmY2Li40 MGFlNjM4ZjI1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKQEAgLTk0Nyw2ICs5NDcsMTggQEAgcG9zdGdy ZXMgICAyNzA5MyAgMC4wICAwLjAgIDMwMDk2ICAyNzUyID8gICAgICAgIFNzICAgMTE6MzQgICAw OjAwIHBvc3RncmVzOiBzZXIKICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgPC9yb3c+CiAKKyAg ICA8cm93PgorICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9s ZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgPHN0cnVjdGZpZWxkPmJhY2tlbmRfbWVtX2Fs bG9jYXRlZDwvc3RydWN0ZmllbGQ+IDx0eXBlPmJpZ2ludDwvdHlwZT4KKyAgICAgPC9wYXJhPgor ICAgICA8cGFyYT4KKyAgICAgIFRoZSBieXRlIGNvdW50IG9mIG1lbW9yeSBhbGxvY2F0ZWQgdG8g dGhpcyBiYWNrZW5kLiBEeW5hbWljIHNoYXJlZCBtZW1vcnkKKyAgICAgIGFsbG9jYXRpb25zIGFy ZSBpbmNsdWRlZCBvbmx5IGluIHRoZSB2YWx1ZSBkaXNwbGF5ZWQgZm9yIHRoZSBiYWNrZW5kIHRo YXQKKyAgICAgIGNyZWF0ZWQgdGhlbSwgdGhleSBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSB2YWx1 ZSBmb3IgYmFja2VuZHMgdGhhdCBhcmUKKyAgICAgIGF0dGFjaGVkIHRvIHRoZW0gdG8gYXZvaWQg ZG91YmxlIGNvdW50aW5nLgorICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICA8L3Jvdz4KKwogICAg ICA8cm93PgogICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJv bGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KICAgICAgICA8c3RydWN0ZmllbGQ+cXVlcnk8L3N0cnVj dGZpZWxkPiA8dHlwZT50ZXh0PC90eXBlPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9zeXN0ZW1fdmlld3Muc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3Fs CmluZGV4IDVhODQ0YjYzYTEuLmQyM2YwZTlkYmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92 aWV3cy5zcWwKQEAgLTg2Myw2ICs4NjMsNyBAQCBDUkVBVEUgVklFVyBwZ19zdGF0X2FjdGl2aXR5 IEFTCiAgICAgICAgICAgICBTLmJhY2tlbmRfeGlkLAogICAgICAgICAgICAgcy5iYWNrZW5kX3ht aW4sCiAgICAgICAgICAgICBTLnF1ZXJ5X2lkLAorICAgICAgICAgICAgUy5iYWNrZW5kX21lbV9h bGxvY2F0ZWQsCiAgICAgICAgICAgICBTLnF1ZXJ5LAogICAgICAgICAgICAgUy5iYWNrZW5kX3R5 cGUKICAgICBGUk9NIHBnX3N0YXRfZ2V0X2FjdGl2aXR5KE5VTEwpIEFTIFMKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9pbXBsLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9kc21faW1wbC5jCmluZGV4IGUxYjkwYzVkZTQuLjMzNTZiYjY1YjUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9pbXBsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvZHNtX2ltcGwuYwpAQCAtNjYsNiArNjYsNyBAQAogI2luY2x1ZGUgInBvc3RtYXN0 ZXIvcG9zdG1hc3Rlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZHNtX2ltcGwuaCIKICNpbmNsdWRl ICJzdG9yYWdlL2ZkLmgiCisjaW5jbHVkZSAidXRpbHMvYmFja2VuZF9zdGF0dXMuaCIKICNpbmNs dWRlICJ1dGlscy9ndWMuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogCkBAIC0yMzIs NiArMjMzLDEzIEBAIGRzbV9pbXBsX3Bvc2l4KGRzbV9vcCBvcCwgZHNtX2hhbmRsZSBoYW5kbGUs IFNpemUgcmVxdWVzdF9zaXplLAogCQkJCQkJCW5hbWUpKSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJ CX0KKwkJLyoKKwkJICogRGV0YWNoIGFuZCBkZXN0cm95IHBhc3MgdGhyb3VnaCBoZXJlLCBvbmx5 IGRlY3JlYXNlIHRoZSBtZW1vcnkKKwkJICogc2hvd24gYWxsb2NhdGVkIGluIHBnX3N0YXRfYWN0 aXZpdHkgd2hlbiB0aGUgY3JlYXRvciBkZXN0cm95cyB0aGUKKwkJICogYWxsb2NhdGlvbi4KKwkJ ICovCisJCWlmIChvcCA9PSBEU01fT1BfREVTVFJPWSkKKwkJCXBnc3RhdF9yZXBvcnRfYmFja2Vu ZF9tZW1fYWxsb2NhdGVkX2RlY3JlYXNlKCptYXBwZWRfc2l6ZSk7CiAJCSptYXBwZWRfYWRkcmVz cyA9IE5VTEw7CiAJCSptYXBwZWRfc2l6ZSA9IDA7CiAJCWlmIChvcCA9PSBEU01fT1BfREVTVFJP WSAmJiBzaG1fdW5saW5rKG5hbWUpICE9IDApCkBAIC0zMzIsNiArMzQwLDM2IEBAIGRzbV9pbXBs X3Bvc2l4KGRzbV9vcCBvcCwgZHNtX2hhbmRsZSBoYW5kbGUsIFNpemUgcmVxdWVzdF9zaXplLAog CQkJCQkJbmFtZSkpKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KKworCS8qCisJICogQXR0YWNoIGFu ZCBjcmVhdGUgcGFzcyB0aHJvdWdoIGhlcmUsIG9ubHkgdXBkYXRlIGJhY2tlbmQgbWVtb3J5CisJ ICogYWxsb2NhdGVkIGluIHBnX3N0YXRfYWN0aXZpdHkgZm9yIHRoZSBjcmVhdG9yIHByb2Nlc3Mu CisJICovCisJaWYgKG9wID09IERTTV9PUF9DUkVBVEUpCisJeworCQkvKgorCQkgKiBQb3NpeCBj cmVhdGlvbiBjYWxscyBkc21faW1wbF9wb3NpeF9yZXNpemUgaW1wbHlpbmcgdGhhdCByZXNpemlu ZworCQkgKiBvY2N1cnMgb3IgbWF5IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuIEFzIGltcGxlbWVu dGVkCisJCSAqIGRzbV9pbXBsX3Bvc2l4X3Jlc2l6ZSB1dGlsaXplcyBmYWxsb2NhdGUgb3IgdHJ1 bmNhdGUsIHBhc3NpbmcgdGhlCisJCSAqIHdob2xlIG5ldyBzaXplIGFzIGlucHV0LCBncm93aW5n IHRoZSBhbGxvY2F0aW9uIGFzIG5lZWRlZCAob25seQorCQkgKiB0cnVuY2F0ZSBzdXBwb3J0cyBz aHJpbmtpbmcpLiBXZSB1cGRhdGUgYnkgcmVwbGFjaW5nIHRoZSBvbGQKKwkJICogYWxsb2NhdGlv biB3aXRoIHRoZSBuZXcuCisJCSAqLworI2lmIGRlZmluZWQoSEFWRV9QT1NJWF9GQUxMT0NBVEUp ICYmIGRlZmluZWQoX19saW51eF9fKQorCQkvKgorCQkgKiBwb3NpeF9mYWxsb2NhdGUgZG9lcyBu b3Qgc2hyaW5rIGFsbG9jYXRpb25zLCBhZGp1c3Qgb25seSBvbgorCQkgKiBhbGxvY2F0aW9uIGlu Y3JlYXNlLgorCQkgKi8KKwkJaWYgKHJlcXVlc3Rfc2l6ZSA+ICptYXBwZWRfc2l6ZSkKKwkJewor CQkJcGdzdGF0X3JlcG9ydF9iYWNrZW5kX21lbV9hbGxvY2F0ZWRfZGVjcmVhc2UoKm1hcHBlZF9z aXplKTsKKwkJCXBnc3RhdF9yZXBvcnRfYmFja2VuZF9tZW1fYWxsb2NhdGVkX2luY3JlYXNlKHJl cXVlc3Rfc2l6ZSk7CisJCX0KKyNlbHNlCisJCXBnc3RhdF9yZXBvcnRfYmFja2VuZF9tZW1fYWxs b2NhdGVkX2RlY3JlYXNlKCptYXBwZWRfc2l6ZSk7CisJCXBnc3RhdF9yZXBvcnRfYmFja2VuZF9t ZW1fYWxsb2NhdGVkX2luY3JlYXNlKHJlcXVlc3Rfc2l6ZSk7CisjZW5kaWYKKwl9CiAJKm1hcHBl ZF9hZGRyZXNzID0gYWRkcmVzczsKIAkqbWFwcGVkX3NpemUgPSByZXF1ZXN0X3NpemU7CiAJY2xv c2UoZmQpOwpAQCAtNTM3LDYgKzU3NSwxNCBAQCBkc21faW1wbF9zeXN2KGRzbV9vcCBvcCwgZHNt X2hhbmRsZSBoYW5kbGUsIFNpemUgcmVxdWVzdF9zaXplLAogCQkJCQkJCW5hbWUpKSk7CiAJCQly ZXR1cm4gZmFsc2U7CiAJCX0KKworCQkvKgorCQkgKiBEZXRhY2ggYW5kIGRlc3Ryb3kgcGFzcyB0 aHJvdWdoIGhlcmUsIG9ubHkgZGVjcmVhc2UgdGhlIG1lbW9yeQorCQkgKiBzaG93biBhbGxvY2F0 ZWQgaW4gcGdfc3RhdF9hY3Rpdml0eSB3aGVuIHRoZSBjcmVhdG9yIGRlc3Ryb3lzIHRoZQorCQkg KiBhbGxvY2F0aW9uLgorCQkgKi8KKwkJaWYgKG9wID09IERTTV9PUF9ERVNUUk9ZKQorCQkJcGdz dGF0X3JlcG9ydF9iYWNrZW5kX21lbV9hbGxvY2F0ZWRfZGVjcmVhc2UoKm1hcHBlZF9zaXplKTsK IAkJKm1hcHBlZF9hZGRyZXNzID0gTlVMTDsKIAkJKm1hcHBlZF9zaXplID0gMDsKIAkJaWYgKG9w ID09IERTTV9PUF9ERVNUUk9ZICYmIHNobWN0bChpZGVudCwgSVBDX1JNSUQsIE5VTEwpIDwgMCkK QEAgLTU4NCw2ICs2MzAsMTMgQEAgZHNtX2ltcGxfc3lzdihkc21fb3Agb3AsIGRzbV9oYW5kbGUg aGFuZGxlLCBTaXplIHJlcXVlc3Rfc2l6ZSwKIAkJCQkJCW5hbWUpKSk7CiAJCXJldHVybiBmYWxz ZTsKIAl9CisKKwkvKgorCSAqIEF0dGFjaCBhbmQgY3JlYXRlIHBhc3MgdGhyb3VnaCBoZXJlLCBv bmx5IHVwZGF0ZSBiYWNrZW5kIG1lbW9yeQorCSAqIGFsbG9jYXRlZCBpbiBwZ19zdGF0X2FjdGl2 aXR5IGZvciB0aGUgY3JlYXRvciBwcm9jZXNzLgorCSAqLworCWlmIChvcCA9PSBEU01fT1BfQ1JF QVRFKQorCQlwZ3N0YXRfcmVwb3J0X2JhY2tlbmRfbWVtX2FsbG9jYXRlZF9pbmNyZWFzZShyZXF1 ZXN0X3NpemUpOwogCSptYXBwZWRfYWRkcmVzcyA9IGFkZHJlc3M7CiAJKm1hcHBlZF9zaXplID0g cmVxdWVzdF9zaXplOwogCkBAIC02NTIsNiArNzA1LDEzIEBAIGRzbV9pbXBsX3dpbmRvd3MoZHNt X29wIG9wLCBkc21faGFuZGxlIGhhbmRsZSwgU2l6ZSByZXF1ZXN0X3NpemUsCiAJCQlyZXR1cm4g ZmFsc2U7CiAJCX0KIAorCQkvKgorCQkgKiBEZXRhY2ggYW5kIGRlc3Ryb3kgcGFzcyB0aHJvdWdo IGhlcmUsIG9ubHkgZGVjcmVhc2UgdGhlIG1lbW9yeQorCQkgKiBzaG93biBhbGxvY2F0ZWQgaW4g cGdfc3RhdF9hY3Rpdml0eSB3aGVuIHRoZSBjcmVhdG9yIGRlc3Ryb3lzIHRoZQorCQkgKiBhbGxv Y2F0aW9uLgorCQkgKi8KKwkJaWYgKG9wID09IERTTV9PUF9ERVNUUk9ZKQorCQkJcGdzdGF0X3Jl cG9ydF9iYWNrZW5kX21lbV9hbGxvY2F0ZWRfZGVjcmVhc2UoKm1hcHBlZF9zaXplKTsKIAkJKmlt cGxfcHJpdmF0ZSA9IE5VTEw7CiAJCSptYXBwZWRfYWRkcmVzcyA9IE5VTEw7CiAJCSptYXBwZWRf c2l6ZSA9IDA7CkBAIC03NjgsNiArODI4LDEyIEBAIGRzbV9pbXBsX3dpbmRvd3MoZHNtX29wIG9w LCBkc21faGFuZGxlIGhhbmRsZSwgU2l6ZSByZXF1ZXN0X3NpemUsCiAJCXJldHVybiBmYWxzZTsK IAl9CiAKKwkvKgorCSAqIEF0dGFjaCBhbmQgY3JlYXRlIHBhc3MgdGhyb3VnaCBoZXJlLCBvbmx5 IHVwZGF0ZSBiYWNrZW5kIG1lbW9yeQorCSAqIGFsbG9jYXRlZCBpbiBwZ19zdGF0X2FjdGl2aXR5 IGZvciB0aGUgY3JlYXRvciBwcm9jZXNzLgorCSAqLworCWlmIChvcCA9PSBEU01fT1BfQ1JFQVRF KQorCQlwZ3N0YXRfcmVwb3J0X2JhY2tlbmRfbWVtX2FsbG9jYXRlZF9pbmNyZWFzZShpbmZvLlJl Z2lvblNpemUpOwogCSptYXBwZWRfYWRkcmVzcyA9IGFkZHJlc3M7CiAJKm1hcHBlZF9zaXplID0g aW5mby5SZWdpb25TaXplOwogCSppbXBsX3ByaXZhdGUgPSBobWFwOwpAQCAtODEyLDYgKzg3OCwx MyBAQCBkc21faW1wbF9tbWFwKGRzbV9vcCBvcCwgZHNtX2hhbmRsZSBoYW5kbGUsIFNpemUgcmVx dWVzdF9zaXplLAogCQkJCQkJCW5hbWUpKSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KKworCQkv KgorCQkgKiBEZXRhY2ggYW5kIGRlc3Ryb3kgcGFzcyB0aHJvdWdoIGhlcmUsIG9ubHkgZGVjcmVh c2UgdGhlIG1lbW9yeQorCQkgKiBzaG93biBhbGxvY2F0ZWQgaW4gcGdfc3RhdF9hY3Rpdml0eSB3 aGVuIHRoZSBjcmVhdG9yIGRlc3Ryb3lzIHRoZQorCQkgKiBhbGxvY2F0aW9uLgorCQkgKi8KKwkJ cGdzdGF0X3JlcG9ydF9iYWNrZW5kX21lbV9hbGxvY2F0ZWRfZGVjcmVhc2UoKm1hcHBlZF9zaXpl KTsKIAkJKm1hcHBlZF9hZGRyZXNzID0gTlVMTDsKIAkJKm1hcHBlZF9zaXplID0gMDsKIAkJaWYg KG9wID09IERTTV9PUF9ERVNUUk9ZICYmIHVubGluayhuYW1lKSAhPSAwKQpAQCAtOTMzLDYgKzEw MDYsMTMgQEAgZHNtX2ltcGxfbW1hcChkc21fb3Agb3AsIGRzbV9oYW5kbGUgaGFuZGxlLCBTaXpl IHJlcXVlc3Rfc2l6ZSwKIAkJCQkJCW5hbWUpKSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CisKKwkv KgorCSAqIEF0dGFjaCBhbmQgY3JlYXRlIHBhc3MgdGhyb3VnaCBoZXJlLCBvbmx5IHVwZGF0ZSBi YWNrZW5kIG1lbW9yeQorCSAqIGFsbG9jYXRlZCBpbiBwZ19zdGF0X2FjdGl2aXR5IGZvciB0aGUg Y3JlYXRvciBwcm9jZXNzLgorCSAqLworCWlmIChvcCA9PSBEU01fT1BfQ1JFQVRFKQorCQlwZ3N0 YXRfcmVwb3J0X2JhY2tlbmRfbWVtX2FsbG9jYXRlZF9pbmNyZWFzZShyZXF1ZXN0X3NpemUpOwog CSptYXBwZWRfYWRkcmVzcyA9IGFkZHJlc3M7CiAJKm1hcHBlZF9zaXplID0gcmVxdWVzdF9zaXpl OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9iYWNrZW5kX3N0YXR1 cy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvYmFja2VuZF9zdGF0dXMuYwppbmRleCBj N2VkMWU2ZDdhLi40NWRhM2FmMjEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS9iYWNrZW5kX3N0YXR1cy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L2Jh Y2tlbmRfc3RhdHVzLmMKQEAgLTQ5LDYgKzQ5LDggQEAgaW50CQkJcGdzdGF0X3RyYWNrX2FjdGl2 aXR5X3F1ZXJ5X3NpemUgPSAxMDI0OwogLyogZXhwb3NlZCBzbyB0aGF0IGJhY2tlbmRfcHJvZ3Jl c3MuYyBjYW4gYWNjZXNzIGl0ICovCiBQZ0JhY2tlbmRTdGF0dXMgKk15QkVFbnRyeSA9IE5VTEw7 CiAKKy8qIE1lbW9yeSBhbGxvY2F0ZWQgdG8gdGhpcyBiYWNrZW5kIHByaW9yIHRvIHBnc3RhdHMg aW5pdGlhbGl6YXRpb24gKi8KK3VpbnQ2NAkJYmFja2VuZF9tZW1fYWxsb2NhdGVkID0gMDsKIAog c3RhdGljIFBnQmFja2VuZFN0YXR1cyAqQmFja2VuZFN0YXR1c0FycmF5ID0gTlVMTDsKIHN0YXRp YyBjaGFyICpCYWNrZW5kQXBwbmFtZUJ1ZmZlciA9IE5VTEw7CkBAIC00MDAsNiArNDAyLDEzIEBA IHBnc3RhdF9iZXN0YXJ0KHZvaWQpCiAJbGJlZW50cnkuc3RfcHJvZ3Jlc3NfY29tbWFuZF90YXJn ZXQgPSBJbnZhbGlkT2lkOwogCWxiZWVudHJ5LnN0X3F1ZXJ5X2lkID0gVUlOVDY0Q09OU1QoMCk7 CiAKKwkvKgorCSAqIE1vdmUgc3VtIG9mIG1lbW9yeSBhbGxvY2F0ZWQgcHJpb3IgdG8gcGdzdGF0 cyBpbml0aWFsaXphdGlvbiB0byBwZ3N0YXRzCisJICogYW5kIHplcm8gdGhlIGxvY2FsIHZhcmlh YmxlLgorCSAqLworCWxiZWVudHJ5LmJhY2tlbmRfbWVtX2FsbG9jYXRlZCA9IGJhY2tlbmRfbWVt X2FsbG9jYXRlZDsKKwliYWNrZW5kX21lbV9hbGxvY2F0ZWQgPSAwOworCiAJLyoKIAkgKiB3ZSBk b24ndCB6ZXJvIHN0X3Byb2dyZXNzX3BhcmFtIGhlcmUgdG8gc2F2ZSBjeWNsZXM7IG5vYm9keSBz aG91bGQKIAkgKiBleGFtaW5lIGl0IHVudGlsIHN0X3Byb2dyZXNzX2NvbW1hbmQgaGFzIGJlZW4g c2V0IHRvIHNvbWV0aGluZyBvdGhlcgpAQCAtMTE0OCwzICsxMTU3LDk5IEBAIHBnc3RhdF9jbGlw X2FjdGl2aXR5KGNvbnN0IGNoYXIgKnJhd19hY3Rpdml0eSkKIAogCXJldHVybiBhY3Rpdml0eTsK IH0KKworLyogLS0tLS0tLS0KKyAqIHBnc3RhdF9yZXBvcnRfYmFja2VuZF9tZW1fYWxsb2NhdGVk X2luY3JlYXNlKCkgLQorICoKKyAqIENhbGxlZCB0byByZXBvcnQgaW5jcmVhc2UgaW4gbWVtb3J5 IGFsbG9jYXRlZCBmb3IgdGhpcyBiYWNrZW5kCisgKiAtLS0tLS0tLQorICovCit2b2lkCitwZ3N0 YXRfcmVwb3J0X2JhY2tlbmRfbWVtX2FsbG9jYXRlZF9pbmNyZWFzZSh1aW50NjQgYWxsb2NhdGlv bikKK3sKKwl2b2xhdGlsZSBQZ0JhY2tlbmRTdGF0dXMgKmJlZW50cnkgPSBNeUJFRW50cnk7CisK KwlpZiAoIWJlZW50cnkgfHwgIXBnc3RhdF90cmFja19hY3Rpdml0aWVzKQorCXsKKwkJLyoKKwkJ ICogQWNjb3VudCBmb3IgbWVtb3J5IGJlZm9yZSBwZ3N0YXRzIGlzIGluaXRpYWxpemVkLiBUaGlz IHdpbGwgYmUKKwkJICogbWlncmF0ZWQgdG8gcGdzdGF0cyBvbiBpbml0aWFsaXphdGlvbi4KKwkJ ICovCisJCWJhY2tlbmRfbWVtX2FsbG9jYXRlZCArPSBhbGxvY2F0aW9uOworCisJCXJldHVybjsK Kwl9CisKKwkvKgorCSAqIFVwZGF0ZSBteSBzdGF0dXMgZW50cnksIGZvbGxvd2luZyB0aGUgcHJv dG9jb2wgb2YgYnVtcGluZworCSAqIHN0X2NoYW5nZWNvdW50IGJlZm9yZSBhbmQgYWZ0ZXIuICBX ZSB1c2UgYSB2b2xhdGlsZSBwb2ludGVyIGhlcmUgdG8KKwkgKiBlbnN1cmUgdGhlIGNvbXBpbGVy IGRvZXNuJ3QgdHJ5IHRvIGdldCBjdXRlLgorCSAqLworCVBHU1RBVF9CRUdJTl9XUklURV9BQ1RJ VklUWShiZWVudHJ5KTsKKwliZWVudHJ5LT5iYWNrZW5kX21lbV9hbGxvY2F0ZWQgKz0gYWxsb2Nh dGlvbjsKKwlQR1NUQVRfRU5EX1dSSVRFX0FDVElWSVRZKGJlZW50cnkpOworfQorCisvKiAtLS0t LS0tLQorICogcGdzdGF0X3JlcG9ydF9iYWNrZW5kX21lbV9hbGxvY2F0ZWRfZGVjcmVhc2UoKSAt CisgKgorICogQ2FsbGVkIHRvIHJlcG9ydCBkZWNyZWFzZSBpbiBtZW1vcnkgYWxsb2NhdGVkIGZv ciB0aGlzIGJhY2tlbmQKKyAqIC0tLS0tLS0tCisgKi8KK3ZvaWQKK3Bnc3RhdF9yZXBvcnRfYmFj a2VuZF9tZW1fYWxsb2NhdGVkX2RlY3JlYXNlKHVpbnQ2NCBkZWFsbG9jYXRpb24pCit7CisJdm9s YXRpbGUgUGdCYWNrZW5kU3RhdHVzICpiZWVudHJ5ID0gTXlCRUVudHJ5OworCisJLyoKKwkgKiBD YXNlcyBtYXkgb2NjdXIgd2hlcmUgc2hhcmVkIG1lbW9yeSBmcm9tIGEgcHJldmlvdXMgcG9zdG1h c3RlcgorCSAqIGludm9jYXRpb24gc3RpbGwgZXhpc3QuIFRoZXNlIGFyZSBjbGVhbmVkIHVwIGF0 IHN0YXJ0dXAgYnkKKwkgKiBkc21fY2xlYW51cF91c2luZ19jb250cm9sX3NlZ21lbnQuIExpbWl0 IGRlY3JlYXNpbmcgbWVtb3J5IGFsbG9jYXRlZCB0bworCSAqIHplcm8gaW4gY2FzZSBubyBjb3Jy ZXNwb25kaW5nIHByaW9yIGluY3JlYXNlIGV4aXN0cyBvciBkZWNyZWFzZSBoYXMKKwkgKiBhbHJl YWR5IGJlZW4gYWNjb3VudGVkIGZvci4KKwkgKi8KKworCWlmICghYmVlbnRyeSB8fCAhcGdzdGF0 X3RyYWNrX2FjdGl2aXRpZXMpCisJeworCQkvKgorCQkgKiBBY2NvdW50IGZvciBtZW1vcnkgYmVm b3JlIHBnc3RhdHMgaXMgaW5pdGlhbGl6ZWQuIFRoaXMgd2lsbCBiZQorCQkgKiBtaWdyYXRlZCB0 byBwZ3N0YXRzIG9uIGluaXRpYWxpemF0aW9uLiBEbyBub3QgYWxsb3cKKwkJICogYmFja2VuZF9t ZW1fYWxsb2NhdGVkIHRvIGdvIGJlbG93IHplcm8uIElmIHBnc3RhdHMgaGFzIG5vdCBiZWVuCisJ CSAqIGluaXRpYWxpemVkLCB3ZSBhcmUgaW4gc3RhcnR1cCBhbmQgd2Ugc2V0IGJhY2tlbmRfbWVt X2FsbG9jYXRlZCB0bworCQkgKiB6ZXJvIGluIGNhc2VzIHdoZXJlIGl0IHdvdWxkIGdvIG5lZ2F0 aXZlIGFuZCBza2lwIGdlbmVyYXRpbmcgYW4KKwkJICogZXJlcG9ydC4KKwkJICovCisJCWlmIChk ZWFsbG9jYXRpb24gPiBiYWNrZW5kX21lbV9hbGxvY2F0ZWQpCisJCQliYWNrZW5kX21lbV9hbGxv Y2F0ZWQgPSAwOworCQllbHNlCisJCQliYWNrZW5kX21lbV9hbGxvY2F0ZWQgLT0gZGVhbGxvY2F0 aW9uOworCisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIERvIG5vdCBhbGxvdyBiYWNrZW5kX21l bV9hbGxvY2F0ZWQgdG8gZ28gYmVsb3cgemVyby4gZXJlcG9ydCBpZiB3ZQorCSAqIHdvdWxkIGhh dmUuIFRoZXJlJ3Mgbm8gbmVlZCBmb3IgYSBsb2NrIGFyb3VuZCB0aGUgcmVhZCBoZXJlIGFzIGl0 J3MKKwkgKiBiZWluZyByZWZlcmVuY2VkIGZyb20gdGhlIHNhbWUgYmFja2VuZCB3aGljaCBtZWFu cyB0aGF0IHRoZXJlIHNob3VsZG4ndAorCSAqIGJlIGNvbmN1cnJlbnQgd3JpdGVzLiBXZSB3YW50 IHRvIGdlbmVyYXRlIGFuIGVyZXBvcnQgaW4gdGhlc2UgY2FzZXMuCisJICovCisJaWYgKGRlYWxs b2NhdGlvbiA+IGJlZW50cnktPmJhY2tlbmRfbWVtX2FsbG9jYXRlZCkKKwl7CisJCWVyZXBvcnQo TE9HLCBlcnJtc2coImRlY3JlYXNlIHJlZHVjZXMgcmVwb3J0ZWQgYmFja2VuZCBtZW1vcnkgYWxs b2NhdGVkIGJlbG93IHplcm87IHNldHRpbmcgcmVwb3J0ZWQgdG8gMCIpKTsKKworCQkvKgorCQkg KiBPdmVyd3JpdGUgZGVhbGxvY2F0aW9uIHdpdGggY3VycmVudCBiYWNrZW5kX21lbV9hbGxvY2F0 ZWQgc28gd2UgZW5kCisJCSAqIHVwIGF0IHplcm8uCisJCSAqLworCQlkZWFsbG9jYXRpb24gPSBi ZWVudHJ5LT5iYWNrZW5kX21lbV9hbGxvY2F0ZWQ7CisJfQorCisJLyoKKwkgKiBVcGRhdGUgbXkg c3RhdHVzIGVudHJ5LCBmb2xsb3dpbmcgdGhlIHByb3RvY29sIG9mIGJ1bXBpbmcKKwkgKiBzdF9j aGFuZ2Vjb3VudCBiZWZvcmUgYW5kIGFmdGVyLiAgV2UgdXNlIGEgdm9sYXRpbGUgcG9pbnRlciBo ZXJlIHRvCisJICogZW5zdXJlIHRoZSBjb21waWxlciBkb2Vzbid0IHRyeSB0byBnZXQgY3V0ZS4K KwkgKi8KKwlQR1NUQVRfQkVHSU5fV1JJVEVfQUNUSVZJVFkoYmVlbnRyeSk7CisJYmVlbnRyeS0+ YmFja2VuZF9tZW1fYWxsb2NhdGVkIC09IGRlYWxsb2NhdGlvbjsKKwlQR1NUQVRfRU5EX1dSSVRF X0FDVElWSVRZKGJlZW50cnkpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3Bnc3RhdGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYwppbmRl eCA0Y2NhMzBhYWU3Li4xNTc0YWE4MDQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvcGdzdGF0ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3Mu YwpAQCAtNTM2LDcgKzUzNiw3IEBAIHBnX3N0YXRfZ2V0X3Byb2dyZXNzX2luZm8oUEdfRlVOQ1RJ T05fQVJHUykKIERhdHVtCiBwZ19zdGF0X2dldF9hY3Rpdml0eShQR19GVU5DVElPTl9BUkdTKQog ewotI2RlZmluZSBQR19TVEFUX0dFVF9BQ1RJVklUWV9DT0xTCTMwCisjZGVmaW5lIFBHX1NUQVRf R0VUX0FDVElWSVRZX0NPTFMJMzEKIAlpbnQJCQludW1fYmFja2VuZHMgPSBwZ3N0YXRfZmV0Y2hf c3RhdF9udW1iYWNrZW5kcygpOwogCWludAkJCWN1cnJfYmFja2VuZDsKIAlpbnQJCQlwaWQgPSBQ R19BUkdJU05VTEwoMCkgPyAtMSA6IFBHX0dFVEFSR19JTlQzMigwKTsKQEAgLTYxMCw2ICs2MTAs OCBAQCBwZ19zdGF0X2dldF9hY3Rpdml0eShQR19GVU5DVElPTl9BUkdTKQogCQllbHNlCiAJCQlu dWxsc1sxNl0gPSB0cnVlOwogCisJCXZhbHVlc1szMF0gPSBVSW50NjRHZXREYXR1bShiZWVudHJ5 LT5iYWNrZW5kX21lbV9hbGxvY2F0ZWQpOworCiAJCS8qIFZhbHVlcyBvbmx5IGF2YWlsYWJsZSB0 byByb2xlIG1lbWJlciBvciBwZ19yZWFkX2FsbF9zdGF0cyAqLwogCQlpZiAoSEFTX1BHU1RBVF9Q RVJNSVNTSU9OUyhiZWVudHJ5LT5zdF91c2VyaWQpKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9tbWdyL2FzZXQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvYXNldC5jCmlu ZGV4IGI2ZWViOGFiYWIuLmM5MWY4ZWZhNGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L21tZ3IvYXNldC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvYXNldC5jCkBAIC00Nyw2 ICs0Nyw3IEBACiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgInBvcnQvcGdfYml0 dXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9iYWNrZW5kX3N0YXR1cy5oIgogI2luY2x1ZGUgInV0 aWxzL21lbWRlYnVnLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1 dGlscy9tZW11dGlsc19tZW1vcnljaHVuay5oIgpAQCAtNTA5LDYgKzUxMCw3IEBAIEFsbG9jU2V0 Q29udGV4dENyZWF0ZUludGVybmFsKE1lbW9yeUNvbnRleHQgcGFyZW50LAogCQkJCQkJbmFtZSk7 CiAKIAkoKE1lbW9yeUNvbnRleHQpIHNldCktPm1lbV9hbGxvY2F0ZWQgPSBmaXJzdEJsb2NrU2l6 ZTsKKwlwZ3N0YXRfcmVwb3J0X2JhY2tlbmRfbWVtX2FsbG9jYXRlZF9pbmNyZWFzZShmaXJzdEJs b2NrU2l6ZSk7CiAKIAlyZXR1cm4gKE1lbW9yeUNvbnRleHQpIHNldDsKIH0KQEAgLTUzMiw2ICs1 MzQsNyBAQCBBbGxvY1NldFJlc2V0KE1lbW9yeUNvbnRleHQgY29udGV4dCkKIAlBbGxvY0Jsb2Nr CWJsb2NrOwogCVNpemUJCWtlZXBlcnNpemUgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZCiAJPSBz ZXQtPmtlZXBlci0+ZW5kcHRyIC0gKChjaGFyICopIHNldCk7CisJdWludDY0CQlkZWFsbG9jYXRp b24gPSAwOwogCiAJQXNzZXJ0QXJnKEFsbG9jU2V0SXNWYWxpZChzZXQpKTsKIApAQCAtNTcxLDYg KzU3NCw3IEBAIEFsbG9jU2V0UmVzZXQoTWVtb3J5Q29udGV4dCBjb250ZXh0KQogCQl7CiAJCQkv KiBOb3JtYWwgY2FzZSwgcmVsZWFzZSB0aGUgYmxvY2sgKi8KIAkJCWNvbnRleHQtPm1lbV9hbGxv Y2F0ZWQgLT0gYmxvY2stPmVuZHB0ciAtICgoY2hhciAqKSBibG9jayk7CisJCQlkZWFsbG9jYXRp b24gKz0gYmxvY2stPmVuZHB0ciAtICgoY2hhciAqKSBibG9jayk7CiAKICNpZmRlZiBDTE9CQkVS X0ZSRUVEX01FTU9SWQogCQkJd2lwZV9tZW0oYmxvY2ssIGJsb2NrLT5mcmVlcHRyIC0gKChjaGFy ICopIGJsb2NrKSk7CkBAIC01ODEsNiArNTg1LDcgQEAgQWxsb2NTZXRSZXNldChNZW1vcnlDb250 ZXh0IGNvbnRleHQpCiAJfQogCiAJQXNzZXJ0KGNvbnRleHQtPm1lbV9hbGxvY2F0ZWQgPT0ga2Vl cGVyc2l6ZSk7CisJcGdzdGF0X3JlcG9ydF9iYWNrZW5kX21lbV9hbGxvY2F0ZWRfZGVjcmVhc2Uo ZGVhbGxvY2F0aW9uKTsKIAogCS8qIFJlc2V0IGJsb2NrIHNpemUgYWxsb2NhdGlvbiBzZXF1ZW5j ZSwgdG9vICovCiAJc2V0LT5uZXh0QmxvY2tTaXplID0gc2V0LT5pbml0QmxvY2tTaXplOwpAQCAt NjAwLDYgKzYwNSw3IEBAIEFsbG9jU2V0RGVsZXRlKE1lbW9yeUNvbnRleHQgY29udGV4dCkKIAlB bGxvY0Jsb2NrCWJsb2NrID0gc2V0LT5ibG9ja3M7CiAJU2l6ZQkJa2VlcGVyc2l6ZSBQR19VU0VE X0ZPUl9BU1NFUlRTX09OTFkKIAk9IHNldC0+a2VlcGVyLT5lbmRwdHIgLSAoKGNoYXIgKikgc2V0 KTsKKwl1aW50NjQJCWRlYWxsb2NhdGlvbiA9IDA7CiAKIAlBc3NlcnRBcmcoQWxsb2NTZXRJc1Zh bGlkKHNldCkpOwogCkBAIC02MzUsMTEgKzY0MSwxMyBAQCBBbGxvY1NldERlbGV0ZShNZW1vcnlD b250ZXh0IGNvbnRleHQpCiAKIAkJCQlmcmVlbGlzdC0+Zmlyc3RfZnJlZSA9IChBbGxvY1NldENv bnRleHQgKikgb2xkc2V0LT5oZWFkZXIubmV4dGNoaWxkOwogCQkJCWZyZWVsaXN0LT5udW1fZnJl ZS0tOworCQkJCWRlYWxsb2NhdGlvbiArPSBvbGRzZXQtPmhlYWRlci5tZW1fYWxsb2NhdGVkOwog CiAJCQkJLyogQWxsIHRoYXQgcmVtYWlucyBpcyB0byBmcmVlIHRoZSBoZWFkZXIvaW5pdGlhbCBi bG9jayAqLwogCQkJCWZyZWUob2xkc2V0KTsKIAkJCX0KIAkJCUFzc2VydChmcmVlbGlzdC0+bnVt X2ZyZWUgPT0gMCk7CisJCQlwZ3N0YXRfcmVwb3J0X2JhY2tlbmRfbWVtX2FsbG9jYXRlZF9kZWNy ZWFzZShkZWFsbG9jYXRpb24pOwogCQl9CiAKIAkJLyogTm93IGFkZCB0aGUganVzdC1kZWxldGVk IGNvbnRleHQgdG8gdGhlIGZyZWVsaXN0LiAqLwpAQCAtNjU2LDcgKzY2NCwxMCBAQCBBbGxvY1Nl dERlbGV0ZShNZW1vcnlDb250ZXh0IGNvbnRleHQpCiAJCUFsbG9jQmxvY2sJbmV4dCA9IGJsb2Nr LT5uZXh0OwogCiAJCWlmIChibG9jayAhPSBzZXQtPmtlZXBlcikKKwkJewogCQkJY29udGV4dC0+ bWVtX2FsbG9jYXRlZCAtPSBibG9jay0+ZW5kcHRyIC0gKChjaGFyICopIGJsb2NrKTsKKwkJCWRl YWxsb2NhdGlvbiArPSBibG9jay0+ZW5kcHRyIC0gKChjaGFyICopIGJsb2NrKTsKKwkJfQogCiAj aWZkZWYgQ0xPQkJFUl9GUkVFRF9NRU1PUlkKIAkJd2lwZV9tZW0oYmxvY2ssIGJsb2NrLT5mcmVl cHRyIC0gKChjaGFyICopIGJsb2NrKSk7CkBAIC02NjksNiArNjgwLDggQEAgQWxsb2NTZXREZWxl dGUoTWVtb3J5Q29udGV4dCBjb250ZXh0KQogCX0KIAogCUFzc2VydChjb250ZXh0LT5tZW1fYWxs b2NhdGVkID09IGtlZXBlcnNpemUpOworCXBnc3RhdF9yZXBvcnRfYmFja2VuZF9tZW1fYWxsb2Nh dGVkX2RlY3JlYXNlKGRlYWxsb2NhdGlvbiArCisJCQkJCQkJCQkJCQkgY29udGV4dC0+bWVtX2Fs bG9jYXRlZCk7CiAKIAkvKiBGaW5hbGx5LCBmcmVlIHRoZSBjb250ZXh0IGhlYWRlciwgaW5jbHVk aW5nIHRoZSBrZWVwZXIgYmxvY2sgKi8KIAlmcmVlKHNldCk7CkBAIC03MTIsNiArNzI1LDcgQEAg QWxsb2NTZXRBbGxvYyhNZW1vcnlDb250ZXh0IGNvbnRleHQsIFNpemUgc2l6ZSkKIAkJCXJldHVy biBOVUxMOwogCiAJCWNvbnRleHQtPm1lbV9hbGxvY2F0ZWQgKz0gYmxrc2l6ZTsKKwkJcGdzdGF0 X3JlcG9ydF9iYWNrZW5kX21lbV9hbGxvY2F0ZWRfaW5jcmVhc2UoYmxrc2l6ZSk7CiAKIAkJYmxv Y2stPmFzZXQgPSBzZXQ7CiAJCWJsb2NrLT5mcmVlcHRyID0gYmxvY2stPmVuZHB0ciA9ICgoY2hh ciAqKSBibG9jaykgKyBibGtzaXplOwpAQCAtOTE2LDYgKzkzMCw3IEBAIEFsbG9jU2V0QWxsb2Mo TWVtb3J5Q29udGV4dCBjb250ZXh0LCBTaXplIHNpemUpCiAJCQlyZXR1cm4gTlVMTDsKIAogCQlj b250ZXh0LT5tZW1fYWxsb2NhdGVkICs9IGJsa3NpemU7CisJCXBnc3RhdF9yZXBvcnRfYmFja2Vu ZF9tZW1fYWxsb2NhdGVkX2luY3JlYXNlKGJsa3NpemUpOwogCiAJCWJsb2NrLT5hc2V0ID0gc2V0 OwogCQlibG9jay0+ZnJlZXB0ciA9ICgoY2hhciAqKSBibG9jaykgKyBBTExPQ19CTE9DS0hEUlNa OwpAQCAtMTAxNiw2ICsxMDMxLDcgQEAgQWxsb2NTZXRGcmVlKHZvaWQgKnBvaW50ZXIpCiAJCQli bG9jay0+bmV4dC0+cHJldiA9IGJsb2NrLT5wcmV2OwogCiAJCXNldC0+aGVhZGVyLm1lbV9hbGxv Y2F0ZWQgLT0gYmxvY2stPmVuZHB0ciAtICgoY2hhciAqKSBibG9jayk7CisJCXBnc3RhdF9yZXBv cnRfYmFja2VuZF9tZW1fYWxsb2NhdGVkX2RlY3JlYXNlKGJsb2NrLT5lbmRwdHIgLSAoKGNoYXIg KikgYmxvY2spKTsKIAogI2lmZGVmIENMT0JCRVJfRlJFRURfTUVNT1JZCiAJCXdpcGVfbWVtKGJs b2NrLCBibG9jay0+ZnJlZXB0ciAtICgoY2hhciAqKSBibG9jaykpOwpAQCAtMTEyNyw3ICsxMTQz LDkgQEAgQWxsb2NTZXRSZWFsbG9jKHZvaWQgKnBvaW50ZXIsIFNpemUgc2l6ZSkKIAogCQkvKiB1 cGRhdGVkIHNlcGFyYXRlbHksIG5vdCB0byB1bmRlcmZsb3cgd2hlbiAob2xkYmxrc2l6ZSA+IGJs a3NpemUpICovCiAJCXNldC0+aGVhZGVyLm1lbV9hbGxvY2F0ZWQgLT0gb2xkYmxrc2l6ZTsKKwkJ cGdzdGF0X3JlcG9ydF9iYWNrZW5kX21lbV9hbGxvY2F0ZWRfZGVjcmVhc2Uob2xkYmxrc2l6ZSk7 CiAJCXNldC0+aGVhZGVyLm1lbV9hbGxvY2F0ZWQgKz0gYmxrc2l6ZTsKKwkJcGdzdGF0X3JlcG9y dF9iYWNrZW5kX21lbV9hbGxvY2F0ZWRfaW5jcmVhc2UoYmxrc2l6ZSk7CiAKIAkJYmxvY2stPmZy ZWVwdHIgPSBibG9jay0+ZW5kcHRyID0gKChjaGFyICopIGJsb2NrKSArIGJsa3NpemU7CiAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvZ2VuZXJhdGlvbi5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvbW1nci9nZW5lcmF0aW9uLmMKaW5kZXggYjM5ODk0ZWM5NC4uMzZlNWIzZjk0ZCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9nZW5lcmF0aW9uLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbW1nci9nZW5lcmF0aW9uLmMKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2lu Y2x1ZGUgImxpYi9pbGlzdC5oIgogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKKyNpbmNs dWRlICJ1dGlscy9iYWNrZW5kX3N0YXR1cy5oIgogI2luY2x1ZGUgInV0aWxzL21lbWRlYnVnLmgi CiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlsc19t ZW1vcnljaHVuay5oIgpAQCAtMjU4LDYgKzI1OSw3IEBAIEdlbmVyYXRpb25Db250ZXh0Q3JlYXRl KE1lbW9yeUNvbnRleHQgcGFyZW50LAogCQkJCQkJbmFtZSk7CiAKIAkoKE1lbW9yeUNvbnRleHQp IHNldCktPm1lbV9hbGxvY2F0ZWQgPSBmaXJzdEJsb2NrU2l6ZTsKKwlwZ3N0YXRfcmVwb3J0X2Jh Y2tlbmRfbWVtX2FsbG9jYXRlZF9pbmNyZWFzZShmaXJzdEJsb2NrU2l6ZSk7CiAKIAlyZXR1cm4g KE1lbW9yeUNvbnRleHQpIHNldDsKIH0KQEAgLTI3NCw2ICsyNzYsNyBAQCBHZW5lcmF0aW9uUmVz ZXQoTWVtb3J5Q29udGV4dCBjb250ZXh0KQogewogCUdlbmVyYXRpb25Db250ZXh0ICpzZXQgPSAo R2VuZXJhdGlvbkNvbnRleHQgKikgY29udGV4dDsKIAlkbGlzdF9tdXRhYmxlX2l0ZXIgbWl0ZXI7 CisJdWludDY0CWRlYWxsb2NhdGlvbiA9IDA7CiAKIAlBc3NlcnRBcmcoR2VuZXJhdGlvbklzVmFs aWQoc2V0KSk7CiAKQEAgLTI5Niw5ICsyOTksMTQgQEAgR2VuZXJhdGlvblJlc2V0KE1lbW9yeUNv bnRleHQgY29udGV4dCkKIAkJaWYgKGJsb2NrID09IHNldC0+a2VlcGVyKQogCQkJR2VuZXJhdGlv bkJsb2NrTWFya0VtcHR5KGJsb2NrKTsKIAkJZWxzZQorCQl7CisJCQlkZWFsbG9jYXRpb24gKz0g YmxvY2stPmJsa3NpemU7CiAJCQlHZW5lcmF0aW9uQmxvY2tGcmVlKHNldCwgYmxvY2spOworCQl9 CiAJfQogCisJcGdzdGF0X3JlcG9ydF9iYWNrZW5kX21lbV9hbGxvY2F0ZWRfZGVjcmVhc2UoZGVh bGxvY2F0aW9uKTsKKwogCS8qIHNldCBpdCBzbyBuZXcgYWxsb2NhdGlvbnMgdG8gbWFrZSB1c2Ug b2YgdGhlIGtlZXBlciBibG9jayAqLwogCXNldC0+YmxvY2sgPSBzZXQtPmtlZXBlcjsKIApAQCAt MzE5LDYgKzMyNyw5IEBAIEdlbmVyYXRpb25EZWxldGUoTWVtb3J5Q29udGV4dCBjb250ZXh0KQog ewogCS8qIFJlc2V0IHRvIHJlbGVhc2UgYWxsIHJlbGVhc2FibGUgR2VuZXJhdGlvbkJsb2NrcyAq LwogCUdlbmVyYXRpb25SZXNldChjb250ZXh0KTsKKworCXBnc3RhdF9yZXBvcnRfYmFja2VuZF9t ZW1fYWxsb2NhdGVkX2RlY3JlYXNlKGNvbnRleHQtPm1lbV9hbGxvY2F0ZWQpOworCiAJLyogQW5k IGZyZWUgdGhlIGNvbnRleHQgaGVhZGVyIGFuZCBrZWVwZXIgYmxvY2sgKi8KIAlmcmVlKGNvbnRl eHQpOwogfQpAQCAtMzU1LDYgKzM2Niw3IEBAIEdlbmVyYXRpb25BbGxvYyhNZW1vcnlDb250ZXh0 IGNvbnRleHQsIFNpemUgc2l6ZSkKIAkJCXJldHVybiBOVUxMOwogCiAJCWNvbnRleHQtPm1lbV9h bGxvY2F0ZWQgKz0gYmxrc2l6ZTsKKwkJcGdzdGF0X3JlcG9ydF9iYWNrZW5kX21lbV9hbGxvY2F0 ZWRfaW5jcmVhc2UoYmxrc2l6ZSk7CiAKIAkJLyogYmxvY2sgd2l0aCBhIHNpbmdsZSAodXNlZCkg Y2h1bmsgKi8KIAkJYmxvY2stPmNvbnRleHQgPSBzZXQ7CkBAIC00NTgsNiArNDcwLDcgQEAgR2Vu ZXJhdGlvbkFsbG9jKE1lbW9yeUNvbnRleHQgY29udGV4dCwgU2l6ZSBzaXplKQogCQkJCXJldHVy biBOVUxMOwogCiAJCQljb250ZXh0LT5tZW1fYWxsb2NhdGVkICs9IGJsa3NpemU7CisJCQlwZ3N0 YXRfcmVwb3J0X2JhY2tlbmRfbWVtX2FsbG9jYXRlZF9pbmNyZWFzZShibGtzaXplKTsKIAogCQkJ LyogaW5pdGlhbGl6ZSB0aGUgbmV3IGJsb2NrICovCiAJCQlHZW5lcmF0aW9uQmxvY2tJbml0KHNl dCwgYmxvY2ssIGJsa3NpemUpOwpAQCAtNjkxLDYgKzcwNCw4IEBAIEdlbmVyYXRpb25GcmVlKHZv aWQgKnBvaW50ZXIpCiAJZGxpc3RfZGVsZXRlKCZibG9jay0+bm9kZSk7CiAKIAlzZXQtPmhlYWRl ci5tZW1fYWxsb2NhdGVkIC09IGJsb2NrLT5ibGtzaXplOworCXBnc3RhdF9yZXBvcnRfYmFja2Vu ZF9tZW1fYWxsb2NhdGVkX2RlY3JlYXNlKGJsb2NrLT5ibGtzaXplKTsKKwogCWZyZWUoYmxvY2sp OwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL3NsYWIuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL21tZ3Ivc2xhYi5jCmluZGV4IDJkNzBhZGVmMDkuLmUwZTY5YjM5NGUgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3Ivc2xhYi5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL21tZ3Ivc2xhYi5jCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAicG9zdGdyZXMu aCIKIAogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUgInV0aWxzL2JhY2tlbmRfc3Rh dHVzLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtZGVidWcuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11 dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzX21lbW9yeWNodW5rLmgiCkBAIC0yMTgs NiArMjE5LDEyIEBAIFNsYWJDb250ZXh0Q3JlYXRlKE1lbW9yeUNvbnRleHQgcGFyZW50LAogCQkJ CQkJcGFyZW50LAogCQkJCQkJbmFtZSk7CiAKKwkvKgorCSAqIElmIFNsYWJDb250ZXh0Q3JlYXRl IGlzIHVwZGF0ZWQgdG8gYWRkIGhlYWRlclNpemUgdG8KKwkgKiBjb250ZXh0LT5tZW1fYWxsb2Nh dGVkLCB0aGVuIHVwZGF0ZSBoZXJlIGFuZCBTbGFiRGVsZXRlIGFwcHJvcHJpYXRlbHkKKwkgKi8K KwlwZ3N0YXRfcmVwb3J0X2JhY2tlbmRfbWVtX2FsbG9jYXRlZF9pbmNyZWFzZShoZWFkZXJTaXpl KTsKKwogCXJldHVybiAoTWVtb3J5Q29udGV4dCkgc2xhYjsKIH0KIApAQCAtMjMzLDYgKzI0MCw3 IEBAIFNsYWJSZXNldChNZW1vcnlDb250ZXh0IGNvbnRleHQpCiB7CiAJaW50CQkJaTsKIAlTbGFi Q29udGV4dCAqc2xhYiA9IGNhc3ROb2RlKFNsYWJDb250ZXh0LCBjb250ZXh0KTsKKwl1aW50NjQJ CWRlYWxsb2NhdGlvbiA9IDA7CiAKIAlBc3NlcnQoc2xhYik7CiAKQEAgLTI1OCw5ICsyNjYsMTEg QEAgU2xhYlJlc2V0KE1lbW9yeUNvbnRleHQgY29udGV4dCkKIAkJCWZyZWUoYmxvY2spOwogCQkJ c2xhYi0+bmJsb2Nrcy0tOwogCQkJY29udGV4dC0+bWVtX2FsbG9jYXRlZCAtPSBzbGFiLT5ibG9j a1NpemU7CisJCQlkZWFsbG9jYXRpb24gKz0gc2xhYi0+YmxvY2tTaXplOwogCQl9CiAJfQogCisJ cGdzdGF0X3JlcG9ydF9iYWNrZW5kX21lbV9hbGxvY2F0ZWRfZGVjcmVhc2UoZGVhbGxvY2F0aW9u KTsKIAlzbGFiLT5taW5GcmVlQ2h1bmtzID0gMDsKIAogCUFzc2VydChzbGFiLT5uYmxvY2tzID09 IDApOwpAQCAtMjc0LDggKzI4NCwxNyBAQCBTbGFiUmVzZXQoTWVtb3J5Q29udGV4dCBjb250ZXh0 KQogdm9pZAogU2xhYkRlbGV0ZShNZW1vcnlDb250ZXh0IGNvbnRleHQpCiB7CisJLyoKKwkgKiBV bnRpbCBoZWFkZXIgYWxsb2NhdGlvbiBpcyBpbmNsdWRlZCBpbiBjb250ZXh0LT5tZW1fYWxsb2Nh dGVkLCBjYXN0IHRvCisJICogc2xhYiBhbmQgZGVjcmVtZW50IHRoZSBoZWFkZXJTaXplCisJICov CisJU2xhYkNvbnRleHQgKnNsYWIgPSBjYXN0Tm9kZShTbGFiQ29udGV4dCwgY29udGV4dCk7CisK IAkvKiBSZXNldCB0byByZWxlYXNlIGFsbCB0aGUgU2xhYkJsb2NrcyAqLwogCVNsYWJSZXNldChj b250ZXh0KTsKKworCXBnc3RhdF9yZXBvcnRfYmFja2VuZF9tZW1fYWxsb2NhdGVkX2RlY3JlYXNl KHNsYWItPmhlYWRlclNpemUpOworCiAJLyogQW5kIGZyZWUgdGhlIGNvbnRleHQgaGVhZGVyICov CiAJZnJlZShjb250ZXh0KTsKIH0KQEAgLTM0NCw2ICszNjMsNyBAQCBTbGFiQWxsb2MoTWVtb3J5 Q29udGV4dCBjb250ZXh0LCBTaXplIHNpemUpCiAJCXNsYWItPm1pbkZyZWVDaHVua3MgPSBzbGFi LT5jaHVua3NQZXJCbG9jazsKIAkJc2xhYi0+bmJsb2NrcyArPSAxOwogCQljb250ZXh0LT5tZW1f YWxsb2NhdGVkICs9IHNsYWItPmJsb2NrU2l6ZTsKKwkJcGdzdGF0X3JlcG9ydF9iYWNrZW5kX21l bV9hbGxvY2F0ZWRfaW5jcmVhc2Uoc2xhYi0+YmxvY2tTaXplKTsKIAl9CiAKIAkvKiBncmFiIHRo ZSBibG9jayBmcm9tIHRoZSBmcmVlbGlzdCAoZXZlbiB0aGUgbmV3IGJsb2NrIGlzIHRoZXJlKSAq LwpAQCAtNTExLDYgKzUzMSw3IEBAIFNsYWJGcmVlKHZvaWQgKnBvaW50ZXIpCiAJCWZyZWUoYmxv Y2spOwogCQlzbGFiLT5uYmxvY2tzLS07CiAJCXNsYWItPmhlYWRlci5tZW1fYWxsb2NhdGVkIC09 IHNsYWItPmJsb2NrU2l6ZTsKKwkJcGdzdGF0X3JlcG9ydF9iYWNrZW5kX21lbV9hbGxvY2F0ZWRf ZGVjcmVhc2Uoc2xhYi0+YmxvY2tTaXplKTsKIAl9CiAJZWxzZQogCQlkbGlzdF9wdXNoX2hlYWQo JnNsYWItPmZyZWVsaXN0W2Jsb2NrLT5uZnJlZV0sICZibG9jay0+bm9kZSk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdAppbmRleCBiZTQ3NTgzMTIyLi5lMWJmYjg1YjI1IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKQEAgLTUzNDAsOSArNTM0MCw5IEBACiAgIHByb25hbWUgPT4gJ3BnX3N0YXRfZ2V0 X2FjdGl2aXR5JywgcHJvcm93cyA9PiAnMTAwJywgcHJvaXNzdHJpY3QgPT4gJ2YnLAogICBwcm9y ZXRzZXQgPT4gJ3QnLCBwcm92b2xhdGlsZSA9PiAncycsIHByb3BhcmFsbGVsID0+ICdyJywKICAg cHJvcmV0dHlwZSA9PiAncmVjb3JkJywgcHJvYXJndHlwZXMgPT4gJ2ludDQnLAotICBwcm9hbGxh cmd0eXBlcyA9PiAne2ludDQsb2lkLGludDQsb2lkLHRleHQsdGV4dCx0ZXh0LHRleHQsdGV4dCx0 aW1lc3RhbXB0eix0aW1lc3RhbXB0eix0aW1lc3RhbXB0eix0aW1lc3RhbXB0eixpbmV0LHRleHQs aW50NCx4aWQseGlkLHRleHQsYm9vbCx0ZXh0LHRleHQsaW50NCx0ZXh0LG51bWVyaWMsdGV4dCxi b29sLHRleHQsYm9vbCxpbnQ0LGludDh9JywKLSAgcHJvYXJnbW9kZXMgPT4gJ3tpLG8sbyxvLG8s byxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvfScsCi0g IHByb2FyZ25hbWVzID0+ICd7cGlkLGRhdGlkLHBpZCx1c2VzeXNpZCxhcHBsaWNhdGlvbl9uYW1l LHN0YXRlLHF1ZXJ5LHdhaXRfZXZlbnRfdHlwZSx3YWl0X2V2ZW50LHhhY3Rfc3RhcnQscXVlcnlf c3RhcnQsYmFja2VuZF9zdGFydCxzdGF0ZV9jaGFuZ2UsY2xpZW50X2FkZHIsY2xpZW50X2hvc3Ru YW1lLGNsaWVudF9wb3J0LGJhY2tlbmRfeGlkLGJhY2tlbmRfeG1pbixiYWNrZW5kX3R5cGUsc3Ns LHNzbHZlcnNpb24sc3NsY2lwaGVyLHNzbGJpdHMsc3NsX2NsaWVudF9kbixzc2xfY2xpZW50X3Nl cmlhbCxzc2xfaXNzdWVyX2RuLGdzc19hdXRoLGdzc19wcmluYyxnc3NfZW5jLGxlYWRlcl9waWQs cXVlcnlfaWR9JywKKyAgcHJvYWxsYXJndHlwZXMgPT4gJ3tpbnQ0LG9pZCxpbnQ0LG9pZCx0ZXh0 LHRleHQsdGV4dCx0ZXh0LHRleHQsdGltZXN0YW1wdHosdGltZXN0YW1wdHosdGltZXN0YW1wdHos dGltZXN0YW1wdHosaW5ldCx0ZXh0LGludDQseGlkLHhpZCx0ZXh0LGJvb2wsdGV4dCx0ZXh0LGlu dDQsdGV4dCxudW1lcmljLHRleHQsYm9vbCx0ZXh0LGJvb2wsaW50NCxpbnQ4LGludDh9JywKKyAg cHJvYXJnbW9kZXMgPT4gJ3tpLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8s byxvLG8sbyxvLG8sbyxvLG8sbyxvLG99JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3twaWQsZGF0aWQs cGlkLHVzZXN5c2lkLGFwcGxpY2F0aW9uX25hbWUsc3RhdGUscXVlcnksd2FpdF9ldmVudF90eXBl LHdhaXRfZXZlbnQseGFjdF9zdGFydCxxdWVyeV9zdGFydCxiYWNrZW5kX3N0YXJ0LHN0YXRlX2No YW5nZSxjbGllbnRfYWRkcixjbGllbnRfaG9zdG5hbWUsY2xpZW50X3BvcnQsYmFja2VuZF94aWQs YmFja2VuZF94bWluLGJhY2tlbmRfdHlwZSxzc2wsc3NsdmVyc2lvbixzc2xjaXBoZXIsc3NsYml0 cyxzc2xfY2xpZW50X2RuLHNzbF9jbGllbnRfc2VyaWFsLHNzbF9pc3N1ZXJfZG4sZ3NzX2F1dGgs Z3NzX3ByaW5jLGdzc19lbmMsbGVhZGVyX3BpZCxxdWVyeV9pZCxiYWNrZW5kX21lbV9hbGxvY2F0 ZWR9JywKICAgcHJvc3JjID0+ICdwZ19zdGF0X2dldF9hY3Rpdml0eScgfSwKIHsgb2lkID0+ICcz MzE4JywKICAgZGVzY3IgPT4gJ3N0YXRpc3RpY3M6IGluZm9ybWF0aW9uIGFib3V0IHByb2dyZXNz IG9mIGJhY2tlbmRzIHJ1bm5pbmcgbWFpbnRlbmFuY2UgY29tbWFuZCcsCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS91dGlscy9iYWNrZW5kX3N0YXR1cy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYmFj a2VuZF9zdGF0dXMuaAppbmRleCA3NDAzYmNhMjVlLi45YmRjNDE5N2JkIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS91dGlscy9iYWNrZW5kX3N0YXR1cy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L2JhY2tlbmRfc3RhdHVzLmgKQEAgLTE2OCw2ICsxNjgsOSBAQCB0eXBlZGVmIHN0cnVjdCBQZ0Jh Y2tlbmRTdGF0dXMKIAogCS8qIHF1ZXJ5IGlkZW50aWZpZXIsIG9wdGlvbmFsbHkgY29tcHV0ZWQg dXNpbmcgcG9zdF9wYXJzZV9hbmFseXplX2hvb2sgKi8KIAl1aW50NjQJCXN0X3F1ZXJ5X2lkOwor CisJLyogQ3VycmVudCBtZW1vcnkgYWxsb2NhdGVkIHRvIHRoaXMgYmFja2VuZCAqLworCXVpbnQ2 NAkJYmFja2VuZF9tZW1fYWxsb2NhdGVkOwogfSBQZ0JhY2tlbmRTdGF0dXM7CiAKIApAQCAtMzA1 LDcgKzMwOCw5IEBAIGV4dGVybiBjb25zdCBjaGFyICpwZ3N0YXRfZ2V0X2JhY2tlbmRfY3VycmVu dF9hY3Rpdml0eShpbnQgcGlkLCBib29sIGNoZWNrVXNlcik7CiBleHRlcm4gY29uc3QgY2hhciAq cGdzdGF0X2dldF9jcmFzaGVkX2JhY2tlbmRfYWN0aXZpdHkoaW50IHBpZCwgY2hhciAqYnVmZmVy LAogCQkJCQkJCQkJCQkJCSAgIGludCBidWZsZW4pOwogZXh0ZXJuIHVpbnQ2NCBwZ3N0YXRfZ2V0 X215X3F1ZXJ5X2lkKHZvaWQpOwotCitleHRlcm4gdm9pZCBwZ3N0YXRfcmVwb3J0X2JhY2tlbmRf bWVtX2FsbG9jYXRlZF9pbmNyZWFzZSh1aW50NjQgYWxsb2NhdGlvbik7CitleHRlcm4gdm9pZCBw Z3N0YXRfcmVwb3J0X2JhY2tlbmRfbWVtX2FsbG9jYXRlZF9kZWNyZWFzZSh1aW50NjQgZGVhbGxv Y2F0aW9uKTsKK2V4dGVybiB1aW50NjQgcGdzdGF0X2dldF9hbGxfYmFja2VuZF9tZW1vcnlfYWxs b2NhdGVkKHZvaWQpOwogCiAvKiAtLS0tLS0tLS0tCiAgKiBTdXBwb3J0IGZ1bmN0aW9ucyBmb3Ig dGhlIFNRTC1jYWxsYWJsZSBmdW5jdGlvbnMgdG8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5v dXQKaW5kZXggN2VjM2QyNjg4Zi4uNjc0ZTVjNmZlNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9y dWxlcy5vdXQKQEAgLTE3NTcsOSArMTc1NywxMCBAQCBwZ19zdGF0X2FjdGl2aXR5fCBTRUxFQ1Qg cy5kYXRpZCwKICAgICBzLmJhY2tlbmRfeGlkLAogICAgIHMuYmFja2VuZF94bWluLAogICAgIHMu cXVlcnlfaWQsCisgICAgcy5iYWNrZW5kX21lbV9hbGxvY2F0ZWQsCiAgICAgcy5xdWVyeSwKICAg ICBzLmJhY2tlbmRfdHlwZQotICAgRlJPTSAoKHBnX3N0YXRfZ2V0X2FjdGl2aXR5KE5VTEw6Omlu dGVnZXIpIHMoZGF0aWQsIHBpZCwgdXNlc3lzaWQsIGFwcGxpY2F0aW9uX25hbWUsIHN0YXRlLCBx dWVyeSwgd2FpdF9ldmVudF90eXBlLCB3YWl0X2V2ZW50LCB4YWN0X3N0YXJ0LCBxdWVyeV9zdGFy dCwgYmFja2VuZF9zdGFydCwgc3RhdGVfY2hhbmdlLCBjbGllbnRfYWRkciwgY2xpZW50X2hvc3Ru YW1lLCBjbGllbnRfcG9ydCwgYmFja2VuZF94aWQsIGJhY2tlbmRfeG1pbiwgYmFja2VuZF90eXBl LCBzc2wsIHNzbHZlcnNpb24sIHNzbGNpcGhlciwgc3NsYml0cywgc3NsX2NsaWVudF9kbiwgc3Ns X2NsaWVudF9zZXJpYWwsIHNzbF9pc3N1ZXJfZG4sIGdzc19hdXRoLCBnc3NfcHJpbmMsIGdzc19l bmMsIGxlYWRlcl9waWQsIHF1ZXJ5X2lkKQorICAgRlJPTSAoKHBnX3N0YXRfZ2V0X2FjdGl2aXR5 KE5VTEw6OmludGVnZXIpIHMoZGF0aWQsIHBpZCwgdXNlc3lzaWQsIGFwcGxpY2F0aW9uX25hbWUs IHN0YXRlLCBxdWVyeSwgd2FpdF9ldmVudF90eXBlLCB3YWl0X2V2ZW50LCB4YWN0X3N0YXJ0LCBx dWVyeV9zdGFydCwgYmFja2VuZF9zdGFydCwgc3RhdGVfY2hhbmdlLCBjbGllbnRfYWRkciwgY2xp ZW50X2hvc3RuYW1lLCBjbGllbnRfcG9ydCwgYmFja2VuZF94aWQsIGJhY2tlbmRfeG1pbiwgYmFj a2VuZF90eXBlLCBzc2wsIHNzbHZlcnNpb24sIHNzbGNpcGhlciwgc3NsYml0cywgc3NsX2NsaWVu dF9kbiwgc3NsX2NsaWVudF9zZXJpYWwsIHNzbF9pc3N1ZXJfZG4sIGdzc19hdXRoLCBnc3NfcHJp bmMsIGdzc19lbmMsIGxlYWRlcl9waWQsIHF1ZXJ5X2lkLCBiYWNrZW5kX21lbV9hbGxvY2F0ZWQp CiAgICAgIExFRlQgSk9JTiBwZ19kYXRhYmFzZSBkIE9OICgocy5kYXRpZCA9IGQub2lkKSkpCiAg ICAgIExFRlQgSk9JTiBwZ19hdXRoaWQgdSBPTiAoKHMudXNlc3lzaWQgPSB1Lm9pZCkpKTsKIHBn X3N0YXRfYWxsX2luZGV4ZXN8IFNFTEVDVCBjLm9pZCBBUyByZWxpZCwKQEAgLTE4NzEsNyArMTg3 Miw3IEBAIHBnX3N0YXRfZ3NzYXBpfCBTRUxFQ1Qgcy5waWQsCiAgICAgcy5nc3NfYXV0aCBBUyBn c3NfYXV0aGVudGljYXRlZCwKICAgICBzLmdzc19wcmluYyBBUyBwcmluY2lwYWwsCiAgICAgcy5n c3NfZW5jIEFTIGVuY3J5cHRlZAotICAgRlJPTSBwZ19zdGF0X2dldF9hY3Rpdml0eShOVUxMOjpp bnRlZ2VyKSBzKGRhdGlkLCBwaWQsIHVzZXN5c2lkLCBhcHBsaWNhdGlvbl9uYW1lLCBzdGF0ZSwg cXVlcnksIHdhaXRfZXZlbnRfdHlwZSwgd2FpdF9ldmVudCwgeGFjdF9zdGFydCwgcXVlcnlfc3Rh cnQsIGJhY2tlbmRfc3RhcnQsIHN0YXRlX2NoYW5nZSwgY2xpZW50X2FkZHIsIGNsaWVudF9ob3N0 bmFtZSwgY2xpZW50X3BvcnQsIGJhY2tlbmRfeGlkLCBiYWNrZW5kX3htaW4sIGJhY2tlbmRfdHlw ZSwgc3NsLCBzc2x2ZXJzaW9uLCBzc2xjaXBoZXIsIHNzbGJpdHMsIHNzbF9jbGllbnRfZG4sIHNz bF9jbGllbnRfc2VyaWFsLCBzc2xfaXNzdWVyX2RuLCBnc3NfYXV0aCwgZ3NzX3ByaW5jLCBnc3Nf ZW5jLCBsZWFkZXJfcGlkLCBxdWVyeV9pZCkKKyAgIEZST00gcGdfc3RhdF9nZXRfYWN0aXZpdHko TlVMTDo6aW50ZWdlcikgcyhkYXRpZCwgcGlkLCB1c2VzeXNpZCwgYXBwbGljYXRpb25fbmFtZSwg c3RhdGUsIHF1ZXJ5LCB3YWl0X2V2ZW50X3R5cGUsIHdhaXRfZXZlbnQsIHhhY3Rfc3RhcnQsIHF1 ZXJ5X3N0YXJ0LCBiYWNrZW5kX3N0YXJ0LCBzdGF0ZV9jaGFuZ2UsIGNsaWVudF9hZGRyLCBjbGll bnRfaG9zdG5hbWUsIGNsaWVudF9wb3J0LCBiYWNrZW5kX3hpZCwgYmFja2VuZF94bWluLCBiYWNr ZW5kX3R5cGUsIHNzbCwgc3NsdmVyc2lvbiwgc3NsY2lwaGVyLCBzc2xiaXRzLCBzc2xfY2xpZW50 X2RuLCBzc2xfY2xpZW50X3NlcmlhbCwgc3NsX2lzc3Vlcl9kbiwgZ3NzX2F1dGgsIGdzc19wcmlu YywgZ3NzX2VuYywgbGVhZGVyX3BpZCwgcXVlcnlfaWQsIGJhY2tlbmRfbWVtX2FsbG9jYXRlZCkK ICAgV0hFUkUgKHMuY2xpZW50X3BvcnQgSVMgTk9UIE5VTEwpOwogcGdfc3RhdF9wcm9ncmVzc19h bmFseXplfCBTRUxFQ1Qgcy5waWQsCiAgICAgcy5kYXRpZCwKQEAgLTIwNTIsNyArMjA1Myw3IEBA IHBnX3N0YXRfcmVwbGljYXRpb258IFNFTEVDVCBzLnBpZCwKICAgICB3LnN5bmNfcHJpb3JpdHks CiAgICAgdy5zeW5jX3N0YXRlLAogICAgIHcucmVwbHlfdGltZQotICAgRlJPTSAoKHBnX3N0YXRf Z2V0X2FjdGl2aXR5KE5VTEw6OmludGVnZXIpIHMoZGF0aWQsIHBpZCwgdXNlc3lzaWQsIGFwcGxp Y2F0aW9uX25hbWUsIHN0YXRlLCBxdWVyeSwgd2FpdF9ldmVudF90eXBlLCB3YWl0X2V2ZW50LCB4 YWN0X3N0YXJ0LCBxdWVyeV9zdGFydCwgYmFja2VuZF9zdGFydCwgc3RhdGVfY2hhbmdlLCBjbGll bnRfYWRkciwgY2xpZW50X2hvc3RuYW1lLCBjbGllbnRfcG9ydCwgYmFja2VuZF94aWQsIGJhY2tl bmRfeG1pbiwgYmFja2VuZF90eXBlLCBzc2wsIHNzbHZlcnNpb24sIHNzbGNpcGhlciwgc3NsYml0 cywgc3NsX2NsaWVudF9kbiwgc3NsX2NsaWVudF9zZXJpYWwsIHNzbF9pc3N1ZXJfZG4sIGdzc19h dXRoLCBnc3NfcHJpbmMsIGdzc19lbmMsIGxlYWRlcl9waWQsIHF1ZXJ5X2lkKQorICAgRlJPTSAo KHBnX3N0YXRfZ2V0X2FjdGl2aXR5KE5VTEw6OmludGVnZXIpIHMoZGF0aWQsIHBpZCwgdXNlc3lz aWQsIGFwcGxpY2F0aW9uX25hbWUsIHN0YXRlLCBxdWVyeSwgd2FpdF9ldmVudF90eXBlLCB3YWl0 X2V2ZW50LCB4YWN0X3N0YXJ0LCBxdWVyeV9zdGFydCwgYmFja2VuZF9zdGFydCwgc3RhdGVfY2hh bmdlLCBjbGllbnRfYWRkciwgY2xpZW50X2hvc3RuYW1lLCBjbGllbnRfcG9ydCwgYmFja2VuZF94 aWQsIGJhY2tlbmRfeG1pbiwgYmFja2VuZF90eXBlLCBzc2wsIHNzbHZlcnNpb24sIHNzbGNpcGhl ciwgc3NsYml0cywgc3NsX2NsaWVudF9kbiwgc3NsX2NsaWVudF9zZXJpYWwsIHNzbF9pc3N1ZXJf ZG4sIGdzc19hdXRoLCBnc3NfcHJpbmMsIGdzc19lbmMsIGxlYWRlcl9waWQsIHF1ZXJ5X2lkLCBi YWNrZW5kX21lbV9hbGxvY2F0ZWQpCiAgICAgIEpPSU4gcGdfc3RhdF9nZXRfd2FsX3NlbmRlcnMo KSB3KHBpZCwgc3RhdGUsIHNlbnRfbHNuLCB3cml0ZV9sc24sIGZsdXNoX2xzbiwgcmVwbGF5X2xz biwgd3JpdGVfbGFnLCBmbHVzaF9sYWcsIHJlcGxheV9sYWcsIHN5bmNfcHJpb3JpdHksIHN5bmNf c3RhdGUsIHJlcGx5X3RpbWUpIE9OICgocy5waWQgPSB3LnBpZCkpKQogICAgICBMRUZUIEpPSU4g cGdfYXV0aGlkIHUgT04gKChzLnVzZXN5c2lkID0gdS5vaWQpKSk7CiBwZ19zdGF0X3JlcGxpY2F0 aW9uX3Nsb3RzfCBTRUxFQ1Qgcy5zbG90X25hbWUsCkBAIC0yMDg2LDcgKzIwODcsNyBAQCBwZ19z dGF0X3NzbHwgU0VMRUNUIHMucGlkLAogICAgIHMuc3NsX2NsaWVudF9kbiBBUyBjbGllbnRfZG4s CiAgICAgcy5zc2xfY2xpZW50X3NlcmlhbCBBUyBjbGllbnRfc2VyaWFsLAogICAgIHMuc3NsX2lz c3Vlcl9kbiBBUyBpc3N1ZXJfZG4KLSAgIEZST00gcGdfc3RhdF9nZXRfYWN0aXZpdHkoTlVMTDo6 aW50ZWdlcikgcyhkYXRpZCwgcGlkLCB1c2VzeXNpZCwgYXBwbGljYXRpb25fbmFtZSwgc3RhdGUs IHF1ZXJ5LCB3YWl0X2V2ZW50X3R5cGUsIHdhaXRfZXZlbnQsIHhhY3Rfc3RhcnQsIHF1ZXJ5X3N0 YXJ0LCBiYWNrZW5kX3N0YXJ0LCBzdGF0ZV9jaGFuZ2UsIGNsaWVudF9hZGRyLCBjbGllbnRfaG9z dG5hbWUsIGNsaWVudF9wb3J0LCBiYWNrZW5kX3hpZCwgYmFja2VuZF94bWluLCBiYWNrZW5kX3R5 cGUsIHNzbCwgc3NsdmVyc2lvbiwgc3NsY2lwaGVyLCBzc2xiaXRzLCBzc2xfY2xpZW50X2RuLCBz c2xfY2xpZW50X3NlcmlhbCwgc3NsX2lzc3Vlcl9kbiwgZ3NzX2F1dGgsIGdzc19wcmluYywgZ3Nz X2VuYywgbGVhZGVyX3BpZCwgcXVlcnlfaWQpCisgICBGUk9NIHBnX3N0YXRfZ2V0X2FjdGl2aXR5 KE5VTEw6OmludGVnZXIpIHMoZGF0aWQsIHBpZCwgdXNlc3lzaWQsIGFwcGxpY2F0aW9uX25hbWUs IHN0YXRlLCBxdWVyeSwgd2FpdF9ldmVudF90eXBlLCB3YWl0X2V2ZW50LCB4YWN0X3N0YXJ0LCBx dWVyeV9zdGFydCwgYmFja2VuZF9zdGFydCwgc3RhdGVfY2hhbmdlLCBjbGllbnRfYWRkciwgY2xp ZW50X2hvc3RuYW1lLCBjbGllbnRfcG9ydCwgYmFja2VuZF94aWQsIGJhY2tlbmRfeG1pbiwgYmFj a2VuZF90eXBlLCBzc2wsIHNzbHZlcnNpb24sIHNzbGNpcGhlciwgc3NsYml0cywgc3NsX2NsaWVu dF9kbiwgc3NsX2NsaWVudF9zZXJpYWwsIHNzbF9pc3N1ZXJfZG4sIGdzc19hdXRoLCBnc3NfcHJp bmMsIGdzc19lbmMsIGxlYWRlcl9waWQsIHF1ZXJ5X2lkLCBiYWNrZW5kX21lbV9hbGxvY2F0ZWQp CiAgIFdIRVJFIChzLmNsaWVudF9wb3J0IElTIE5PVCBOVUxMKTsKIHBnX3N0YXRfc3Vic2NyaXB0 aW9ufCBTRUxFQ1Qgc3Uub2lkIEFTIHN1YmlkLAogICAgIHN1LnN1Ym5hbWUsCi0tIAoyLjI1LjEK Cg== --=-GCEd/eJRx8g8cNF0MDYh Content-Disposition: attachment; filename*0=0002-Add-the-ability-to-limit-the-amount-of-memory-that-c.pat; filename*1=ch Content-Type: text/x-patch; name="0002-Add-the-ability-to-limit-the-amount-of-memory-that-c.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAyM2QzMzgzOGUzNzgwZWYwMmRhYWQyYmM3MzcyOTBkOTkwNTc0NWE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSZWlkIFRob21wc29uIDxqcmVpZHRob21wc29uQG5jLnJyLmNv bT4KRGF0ZTogU2F0LCA0IEp1biAyMDIyIDIyOjIzOjU5IC0wNDAwClN1YmplY3Q6IFtQQVRDSCAy LzJdIEFkZCB0aGUgYWJpbGl0eSB0byBsaW1pdCB0aGUgYW1vdW50IG9mIG1lbW9yeSB0aGF0IGNh biBiZQogYWxsb2NhdGVkIHRvIGJhY2tlbmRzLgoKVGhpcyBidWlsZHMgb24gdGhlIHdvcmsgdGhh dCBhZGRzIGJhY2tlbmQgbWVtb3J5IGFsbG9jYXRlZCB0byBwZ19zdGF0X2FjdGl2aXR5LgoKQWRk IEdVQyB2YXJpYWJsZSBtYXhfdG90YWxfYmFja2VuZF9tZW1vcnkuCgpTcGVjaWZpZXMgYSBsaW1p dCB0byB0aGUgYW1vdW50IG9mIG1lbW9yeSAoaW4gTUIpIHRoYXQgbWF5IGJlIGFsbG9jYXRlZCB0 bwpiYWNrZW5kcyBpbiB0b3RhbCAoaS5lLiB0aGlzIGlzIG5vdCBhIHBlciB1c2VyIG9yIHBlciBi YWNrZW5kIGxpbWl0KS4gSWYgdW5zZXQsCm9yIHNldCB0byAwIGl0IGlzIGRpc2FibGVkLiBJdCBp cyBpbnRlbmRlZCBhcyBhIHJlc291cmNlIHRvIGhlbHAgYXZvaWQgdGhlIE9PTQpraWxsZXIgb24g TElOVVggYW5kIG1hbmFnZSByZXNvdXJjZXMgaW4gZ2VuZXJhbC4gQSBiYWNrZW5kIHJlcXVlc3Qg dGhhdCB3b3VsZApwdXNoIHRoZSB0b3RhbCBvdmVyIHRoZSBsaW1pdCB3aWxsIGJlIGRlbmllZCB3 aXRoIGFuIG91dCBvZiBtZW1vcnkgZXJyb3IgY2F1c2luZwp0aGF0IGJhY2tlbmQncyBjdXJyZW50 IHF1ZXJ5L3RyYW5zYWN0aW9uIHRvIGZhaWwuIER1ZSB0byB0aGUgZHluYW1pYyBuYXR1cmUgb2YK bWVtb3J5IGFsbG9jYXRpb25zLCB0aGlzIGxpbWl0IGlzIG5vdCBleGFjdC4gSWYgd2l0aGluIDEu NU1CIG9mIHRoZSBsaW1pdCBhbmQKdHdvIGJhY2tlbmRzIHJlcXVlc3QgMU1CIGVhY2ggYXQgdGhl IHNhbWUgdGltZSBib3RoIG1heSBiZSBhbGxvY2F0ZWQsIGFuZCBleGNlZWQKdGhlIGxpbWl0LiBG dXJ0aGVyIHJlcXVlc3RzIHdpbGwgbm90IGJlIGFsbG9jYXRlZCB1bnRpbCBkcm9wcGluZyBiZWxv dyB0aGUKbGltaXQuIEtlZXAgdGhpcyBpbiBtaW5kIHdoZW4gc2V0dGluZyB0aGlzIHZhbHVlLiBU aGlzIGxpbWl0IGRvZXMgbm90IGFmZmVjdAphdXhpbGlhcnkgYmFja2VuZCBwcm9jZXNzZXMuIEJh Y2tlbmQgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBkaXNwbGF5ZWQgaW4gdGhlCnBnX3N0YXRfYWN0 aXZpdHkgdmlldy4KLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAg ICAgICAgfCAgMjYgKysrKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9pbXBsLmMgICAg ICAgICAgICB8ICAxMiArKwogc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvYmFja2VuZF9zdGF0 dXMuYyAgIHwgMTA5ICsrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWMuYyAgICAgICAgICAgICAgICAgIHwgIDExICsrCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9hc2V0 LmMgICAgICAgICAgICAgICAgIHwgIDE3ICsrKwogc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9nZW5l cmF0aW9uLmMgICAgICAgICAgIHwgICA5ICsrCiBzcmMvYmFja2VuZC91dGlscy9tbWdyL3NsYWIu YyAgICAgICAgICAgICAgICAgfCAgIDggKysKIHNyYy9pbmNsdWRlL3V0aWxzL2JhY2tlbmRfc3Rh dHVzLmggICAgICAgICAgICB8ICAgMiArCiA5IGZpbGVzIGNoYW5nZWQsIDE5NiBpbnNlcnRpb25z KCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21s IGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IGE1Y2Q0ZTQ0YzcuLmU3MGVhNzFiYTEg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv Y29uZmlnLnNnbWwKQEAgLTIwNzksNiArMjA3OSwzMiBAQCBpbmNsdWRlX2RpciAnY29uZi5kJwog ICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3Rl bnRyeSBpZD0iZ3VjLW1heC10b3RhbC1iYWNrZW5kLW1lbW9yeSIgeHJlZmxhYmVsPSJtYXhfdG90 YWxfYmFja2VuZF9tZW1vcnkiPgorICAgICAgPHRlcm0+PHZhcm5hbWU+bWF4X3RvdGFsX2JhY2tl bmRfbWVtb3J5PC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgICA8aW5kZXh0 ZXJtPgorICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPm1heF90b3RhbF9iYWNrZW5kX21lbW9yeTwv dmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4 dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAg ICAgICAgU3BlY2lmaWVzIGEgbGltaXQgdG8gdGhlIGFtb3VudCBvZiBtZW1vcnkgKE1CKSB0aGF0 IG1heSBiZSBhbGxvY2F0ZWQgdG8KKyAgICAgICAgYmFja2VuZHMgaW4gdG90YWwgKGkuZS4gdGhp cyBpcyBub3QgYSBwZXIgdXNlciBvciBwZXIgYmFja2VuZCBsaW1pdCkuCisgICAgICAgIElmIHVu c2V0LCBvciBzZXQgdG8gMCBpdCBpcyBkaXNhYmxlZC4gIEEgYmFja2VuZCByZXF1ZXN0IHRoYXQg d291bGQKKyAgICAgICAgcHVzaCB0aGUgdG90YWwgb3ZlciB0aGUgbGltaXQgd2lsbCBiZSBkZW5p ZWQgd2l0aCBhbiBvdXQgb2YgbWVtb3J5CisgICAgICAgIGVycm9yIGNhdXNpbmcgdGhhdCBiYWNr ZW5kJ3MgY3VycmVudCBxdWVyeS90cmFuc2FjdGlvbiB0byBmYWlsLiBEdWUgdG8KKyAgICAgICAg dGhlIGR5bmFtaWMgbmF0dXJlIG9mIG1lbW9yeSBhbGxvY2F0aW9ucywgdGhpcyBsaW1pdCBpcyBu b3QgZXhhY3QuIElmCisgICAgICAgIHdpdGhpbiAxLjVNQiBvZiB0aGUgbGltaXQgYW5kIHR3byBi YWNrZW5kcyByZXF1ZXN0IDFNQiBlYWNoIGF0IHRoZSBzYW1lCisgICAgICAgIHRpbWUgYm90aCBt YXkgYmUgYWxsb2NhdGVkLCBhbmQgZXhjZWVkIHRoZSBsaW1pdC4gRnVydGhlciByZXF1ZXN0cyB3 aWxsCisgICAgICAgIG5vdCBiZSBhbGxvY2F0ZWQgdW50aWwgZHJvcHBpbmcgYmVsb3cgdGhlIGxp bWl0LiBLZWVwIHRoaXMgaW4gbWluZCB3aGVuCisgICAgICAgIHNldHRpbmcgdGhpcyB2YWx1ZS4g VGhpcyBsaW1pdCBkb2VzIG5vdCBhZmZlY3QgYXV4aWxpYXJ5IGJhY2tlbmQKKyAgICAgICAgcHJv Y2Vzc2VzIDx4cmVmIGxpbmtlbmQ9Imdsb3NzYXJ5LWF1eGlsaWFyeS1wcm9jIi8+IC4gQmFja2Vu ZCBtZW1vcnkKKyAgICAgICAgYWxsb2NhdGlvbnMgKDx2YXJuYW1lPmJhY2tlbmRfbWVtX2FsbG9j YXRlZDwvdmFybmFtZT4pIGFyZSBkaXNwbGF5ZWQgaW4KKyAgICAgICAgdGhlIDxsaW5rIGxpbmtl bmQ9Im1vbml0b3JpbmctcGctc3RhdC1hY3Rpdml0eS12aWV3Ij48c3RydWN0bmFtZT5wZ19zdGF0 X2FjdGl2aXR5PC9zdHJ1Y3RuYW1lPjwvbGluaz4KKyAgICAgICAgdmlldy4KKyAgICAgICA8L3Bh cmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8L3Zh cmlhYmxlbGlzdD4KICAgICAgPC9zZWN0Mj4KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvZHNtX2ltcGwuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9pbXBsLmMK aW5kZXggMzM1NmJiNjViNS4uY2MwNjEwNTZhMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvZHNtX2ltcGwuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21faW1w bC5jCkBAIC0yNTMsNiArMjUzLDEwIEBAIGRzbV9pbXBsX3Bvc2l4KGRzbV9vcCBvcCwgZHNtX2hh bmRsZSBoYW5kbGUsIFNpemUgcmVxdWVzdF9zaXplLAogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKKwkv KiBEbyBub3QgZXhjZWVkIG1heGltdW0gYWxsb3dlZCBtZW1vcnkgYWxsb2NhdGlvbiAqLworCWlm IChvcCA9PSBEU01fT1BfQ1JFQVRFICYmIGV4Y2VlZHNfbWF4X3RvdGFsX2JrZW5kX21lbShyZXF1 ZXN0X3NpemUpKQorCQlyZXR1cm4gZmFsc2U7CisKIAkvKgogCSAqIENyZWF0ZSBuZXcgc2VnbWVu dCBvciBvcGVuIGFuIGV4aXN0aW5nIG9uZSBmb3IgYXR0YWNoLgogCSAqCkBAIC01MjQsNiArNTI4 LDEwIEBAIGRzbV9pbXBsX3N5c3YoZHNtX29wIG9wLCBkc21faGFuZGxlIGhhbmRsZSwgU2l6ZSBy ZXF1ZXN0X3NpemUsCiAJCWludAkJCWZsYWdzID0gSVBDUHJvdGVjdGlvbjsKIAkJc2l6ZV90CQlz ZWdzaXplOwogCisJCS8qIERvIG5vdCBleGNlZWQgbWF4aW11bSBhbGxvd2VkIG1lbW9yeSBhbGxv Y2F0aW9uICovCisJCWlmIChvcCA9PSBEU01fT1BfQ1JFQVRFICYmIGV4Y2VlZHNfbWF4X3RvdGFs X2JrZW5kX21lbShyZXF1ZXN0X3NpemUpKQorCQkJcmV0dXJuIGZhbHNlOworCiAJCS8qCiAJCSAq IEFsbG9jYXRlIHRoZSBtZW1vcnkgQkVGT1JFIGFjcXVpcmluZyB0aGUgcmVzb3VyY2UsIHNvIHRo YXQgd2UgZG9uJ3QKIAkJICogbGVhayB0aGUgcmVzb3VyY2UgaWYgbWVtb3J5IGFsbG9jYXRpb24g ZmFpbHMuCkBAIC03MTgsNiArNzI2LDEwIEBAIGRzbV9pbXBsX3dpbmRvd3MoZHNtX29wIG9wLCBk c21faGFuZGxlIGhhbmRsZSwgU2l6ZSByZXF1ZXN0X3NpemUsCiAJCXJldHVybiB0cnVlOwogCX0K IAorCS8qIERvIG5vdCBleGNlZWQgbWF4aW11bSBhbGxvd2VkIG1lbW9yeSBhbGxvY2F0aW9uICov CisJaWYgKG9wID09IERTTV9PUF9DUkVBVEUgJiYgZXhjZWVkc19tYXhfdG90YWxfYmtlbmRfbWVt KHJlcXVlc3Rfc2l6ZSkpCisJCXJldHVybiBmYWxzZTsKKwogCS8qIENyZWF0ZSBuZXcgc2VnbWVu dCBvciBvcGVuIGFuIGV4aXN0aW5nIG9uZSBmb3IgYXR0YWNoLiAqLwogCWlmIChvcCA9PSBEU01f T1BfQ1JFQVRFKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L2Jh Y2tlbmRfc3RhdHVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9iYWNrZW5kX3N0YXR1 cy5jCmluZGV4IDQ1ZGEzYWYyMTMuLjljMmZjMmYwN2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL2FjdGl2aXR5L2JhY2tlbmRfc3RhdHVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvYmFja2VuZF9zdGF0dXMuYwpAQCAtNDQsNiArNDQsOCBAQAogICovCiBib29sCQlw Z3N0YXRfdHJhY2tfYWN0aXZpdGllcyA9IGZhbHNlOwogaW50CQkJcGdzdGF0X3RyYWNrX2FjdGl2 aXR5X3F1ZXJ5X3NpemUgPSAxMDI0OworLyogTWF4IGJhY2tlbmQgbWVtb3J5IGFsbG9jYXRpb24g YWxsb3dlZCAoTUIpLiAwID0gZGlzYWJsZWQgKi8KK2ludAkJCW1heF90b3RhbF9ia2VuZF9tZW0g PSAwOwogCiAKIC8qIGV4cG9zZWQgc28gdGhhdCBiYWNrZW5kX3Byb2dyZXNzLmMgY2FuIGFjY2Vz cyBpdCAqLwpAQCAtMTIzNSw3ICsxMjM3LDcgQEAgcGdzdGF0X3JlcG9ydF9iYWNrZW5kX21lbV9h bGxvY2F0ZWRfZGVjcmVhc2UodWludDY0IGRlYWxsb2NhdGlvbikKIAkgKi8KIAlpZiAoZGVhbGxv Y2F0aW9uID4gYmVlbnRyeS0+YmFja2VuZF9tZW1fYWxsb2NhdGVkKQogCXsKLQkJZXJlcG9ydChM T0csIGVycm1zZygiZGVjcmVhc2UgcmVkdWNlcyByZXBvcnRlZCBiYWNrZW5kIG1lbW9yeSBhbGxv Y2F0ZWQgYmVsb3cgemVybzsgc2V0dGluZyByZXBvcnRlZCB0byAwIikpOworCQllcmVwb3J0KExP RywgZXJybXNnKCJkZWFsbG9jYXRpb24gd291bGQgZGVjcmVhc2UgYmFja2VuZCBtZW1vcnkgYmVs b3cgemVybzsgc2V0dGluZyByZXBvcnRlZCB0byAwIikpOwogCiAJCS8qCiAJCSAqIE92ZXJ3cml0 ZSBkZWFsbG9jYXRpb24gd2l0aCBjdXJyZW50IGJhY2tlbmRfbWVtX2FsbG9jYXRlZCBzbyB3ZSBl bmQKQEAgLTEyNTMsMyArMTI1NSwxMDggQEAgcGdzdGF0X3JlcG9ydF9iYWNrZW5kX21lbV9hbGxv Y2F0ZWRfZGVjcmVhc2UodWludDY0IGRlYWxsb2NhdGlvbikKIAliZWVudHJ5LT5iYWNrZW5kX21l bV9hbGxvY2F0ZWQgLT0gZGVhbGxvY2F0aW9uOwogCVBHU1RBVF9FTkRfV1JJVEVfQUNUSVZJVFko YmVlbnRyeSk7CiB9CisKKy8qIC0tLS0tLS0tLS0KKyAqIHBnc3RhdF9nZXRfYWxsX2JhY2tlbmRf bWVtb3J5X2FsbG9jYXRlZCgpIC0KKyAqCisgKglSZXR1cm4gYSB1aW50NjQgcmVwcmVzZW50aW5n IHRoZSBjdXJyZW50IHNoYXJlZCBtZW1vcnkgYWxsb2NhdGVkIHRvIGFsbAorICoJYmFja2VuZHMu ICBUaGlzIGxvb2tzIGRpcmVjdGx5IGF0IHRoZSBCYWNrZW5kU3RhdHVzQXJyYXksIGFuZCBzbyB3 aWxsCisgKglwcm92aWRlIGN1cnJlbnQgaW5mb3JtYXRpb24gcmVnYXJkbGVzcyBvZiB0aGUgYWdl IG9mIG91ciB0cmFuc2FjdGlvbidzCisgKglzbmFwc2hvdCBvZiB0aGUgc3RhdHVzIGFycmF5Lgor ICoJSW4gdGhlIGZ1dHVyZSB3ZSB3aWxsIGxpa2VseSB1dGlsaXplIGFkZGl0aW9uYWwgdmFsdWVz IC0gcGVyaGFwcyBsaW1pdAorICoJYmFja2VuZCBhbGxvY2F0aW9uIGJ5IHVzZXIvcm9sZSwgZXRj LgorICogLS0tLS0tLS0tLQorICovCit1aW50NjQKK3Bnc3RhdF9nZXRfYWxsX2JhY2tlbmRfbWVt b3J5X2FsbG9jYXRlZCh2b2lkKQoreworCVBnQmFja2VuZFN0YXR1cyAqYmVlbnRyeTsKKwlpbnQJ CQlpOworCXVpbnQ2NAkJYWxsX2JhY2tlbmRfbWVtb3J5X2FsbG9jYXRlZCA9IDA7CisKKwliZWVu dHJ5ID0gQmFja2VuZFN0YXR1c0FycmF5OworCisJLyoKKwkgKiBXZSBwcm9iYWJseSBzaG91bGRu J3QgZ2V0IGhlcmUgYmVmb3JlIHNoYXJlZCBtZW1vcnkgaGFzIGJlZW4gc2V0IHVwLAorCSAqIGJ1 dCBiZSBzYWZlLgorCSAqLworCWlmIChiZWVudHJ5ID09IE5VTEwgfHwgQmFja2VuZEFjdGl2aXR5 QnVmZmVyID09IE5VTEwpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBXZSBpbmNsdWRlIEFVWCBw cm9jcyBpbiBhbGwgYmFja2VuZCBtZW1vcnkgY2FsY3VsYXRpb24KKwkgKi8KKwlmb3IgKGkgPSAx OyBpIDw9IE51bUJhY2tlbmRTdGF0U2xvdHM7IGkrKykKKwl7CisJCS8qCisJCSAqIFdlIHVzZSBh IHZvbGF0aWxlIHBvaW50ZXIgaGVyZSB0byBlbnN1cmUgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgdHJ5 IHRvCisJCSAqIGdldCBjdXRlLgorCQkgKi8KKwkJdm9sYXRpbGUgUGdCYWNrZW5kU3RhdHVzICp2 YmVlbnRyeSA9IGJlZW50cnk7CisJCWJvb2wJCWZvdW5kOworCQl1aW50NjQJCWJhY2tlbmRfbWVt X2FsbG9jYXRlZCA9IDA7CisKKwkJZm9yICg7OykKKwkJeworCQkJaW50CQkJYmVmb3JlX2NoYW5n ZWNvdW50OworCQkJaW50CQkJYWZ0ZXJfY2hhbmdlY291bnQ7CisKKwkJCXBnc3RhdF9iZWdpbl9y ZWFkX2FjdGl2aXR5KHZiZWVudHJ5LCBiZWZvcmVfY2hhbmdlY291bnQpOworCisJCQkvKiBJZ25v cmUgaW52YWxpZCBlbnRyaWVzLCB3aGljaCBtYXkgY29udGFpbiBpbnZhbGlkIGRhdGEuCisJCQkg KiBTZWUgcGdzdGF0X2Jlc2h1dGRvd25faG9vaygpCisJCQkgKi8KKwkJCWlmICh2YmVlbnRyeS0+ c3RfcHJvY3BpZCA+IDApCisJCQkJYmFja2VuZF9tZW1fYWxsb2NhdGVkID0gdmJlZW50cnktPmJh Y2tlbmRfbWVtX2FsbG9jYXRlZDsKKworCQkJcGdzdGF0X2VuZF9yZWFkX2FjdGl2aXR5KHZiZWVu dHJ5LCBhZnRlcl9jaGFuZ2Vjb3VudCk7CisKKwkJCWlmICgoZm91bmQgPSBwZ3N0YXRfcmVhZF9h Y3Rpdml0eV9jb21wbGV0ZShiZWZvcmVfY2hhbmdlY291bnQsCisJCQkJCQkJCQkJCQkJICAgYWZ0 ZXJfY2hhbmdlY291bnQpKSkKKwkJCQlicmVhazsKKworCQkJLyogTWFrZSBzdXJlIHdlIGNhbiBi cmVhayBvdXQgb2YgbG9vcCBpZiBzdHVjay4uLiAqLworCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKKwkJfQorCisJCWlmIChmb3VuZCkKKwkJCWFsbF9iYWNrZW5kX21lbW9yeV9hbGxvY2F0ZWQg Kz0gYmFja2VuZF9tZW1fYWxsb2NhdGVkOworCisJCWJlZW50cnkrKzsKKwl9CisKKwlyZXR1cm4g YWxsX2JhY2tlbmRfbWVtb3J5X2FsbG9jYXRlZDsKK30KKworLyoKKyAqIERldGVybWluZSBpZiBh bGxvY2F0aW9uIHJlcXVlc3Qgd2lsbCBleGNlZWQgbWF4IGJhY2tlbmQgbWVtb3J5IGFsbG93ZWQu CisgKiBEbyBub3QgYXBwbHkgdG8gYXV4aWxpYXJ5IHByb2Nlc3Nlcy4KKyAqLworYm9vbAorZXhj ZWVkc19tYXhfdG90YWxfYmtlbmRfbWVtKHVpbnQ2NCBhbGxvY2F0aW9uX3JlcXVlc3QpCit7CisJ Ym9vbCByZXN1bHQgPSBmYWxzZTsKKworCS8qIEV4Y2x1ZGUgYXV4aWxpYXJ5IHByb2Nlc3NlcyBm cm9tIHRoZSBjaGVjayAqLworCWlmIChNeUF1eFByb2NUeXBlICE9IE5vdEFuQXV4UHJvY2VzcykK KwkJcmV0dXJuIHJlc3VsdDsKKworCS8qIENvbnZlcnQgbWF4X3RvdGFsX2JrZW5kX21lbSB0byBi eXRlcyBmb3IgY29tcGFyaXNvbiAqLworCWlmIChtYXhfdG90YWxfYmtlbmRfbWVtICYmCisJCXBn c3RhdF9nZXRfYWxsX2JhY2tlbmRfbWVtb3J5X2FsbG9jYXRlZCgpICsKKwkJYWxsb2NhdGlvbl9y ZXF1ZXN0ID4gKHVpbnQ2NCltYXhfdG90YWxfYmtlbmRfbWVtICogMTAyNCAqIDEwMjQpCisJewor CQkvKgorCQkgKiBFeHBsaWNpdGx5IGlkZW50aWZ5IHRoZSBPT00gYmVpbmcgYSByZXN1bHQgb2Yg dGhpcyBjb25maWd1cmF0aW9uCisJCSAqIHBhcmFtZXRlciB2cyBhIHN5c3RlbSBmYWlsdXJlIHRv IGFsbG9jYXRlIE9PTS4KKwkJICovCisJCWVyZXBvcnQoV0FSTklORywKKwkJCSBlcnJtc2coImFs bG9jYXRpb24gd291bGQgZXhjZWVkIG1heF90b3RhbF9iYWNrZW5kX21lbW9yeSBsaW1pdCAoJWxs dSA+ICVsbHUpIiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXBnc3RhdF9nZXRfYWxsX2JhY2tl bmRfbWVtb3J5X2FsbG9jYXRlZCgpICsKKwkJCSBhbGxvY2F0aW9uX3JlcXVlc3QsICh1bnNpZ25l ZCBsb25nIGxvbmcpbWF4X3RvdGFsX2JrZW5kX21lbSAqIDEwMjQgKiAxMDI0KSk7CisKKwkJcmVz dWx0ID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKaW5k ZXggOWZiYmZiMWJlNS4uNGUyNTZhNzdkNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jCkBAIC0zNjY0LDYg KzM2NjQsMTcgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfaW50IENvbmZpZ3VyZU5hbWVzSW50W10g PQogCQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwKIAorCXsKKwkJeyJtYXhfdG90YWxfYmFja2VuZF9t ZW1vcnkiLCBQR0NfU1VfQkFDS0VORCwgUkVTT1VSQ0VTX01FTSwKKwkJCWdldHRleHRfbm9vcCgi UmVzdHJpY3QgdG90YWwgYmFja2VuZCBtZW1vcnkgYWxsb2NhdGlvbnMgdG8gdGhpcyBtYXguIiks CisJCQlnZXR0ZXh0X25vb3AoIjAgdHVybnMgdGhpcyBmZWF0dXJlIG9mZi4iKSwKKwkJCUdVQ19V TklUX01CCisJCX0sCisJCSZtYXhfdG90YWxfYmtlbmRfbWVtLAorCQkwLCAwLCBJTlRfTUFYLAor CQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKwogCS8qIEVuZC1vZi1saXN0IG1hcmtlciAqLwogCXsK IAkJe05VTEwsIDAsIDAsIE5VTEwsIE5VTEx9LCBOVUxMLCAwLCAwLCAwLCBOVUxMLCBOVUxMLCBO VUxMCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5z YW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5k ZXggOTBiZWMwNTAyYy4uOGU5NDRmNjUxMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv cG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtMTU1LDYgKzE1NSw5IEBACiAJCQkJCSMgICBtbWFw CiAJCQkJCSMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQogI21pbl9keW5hbWljX3NoYXJlZF9t ZW1vcnkgPSAwTUIJIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpCisjbWF4X3RvdGFsX2JhY2tl bmRfbWVtb3J5ID0gME1CCQkjIFJlc3RyaWN0IHRvdGFsIGJhY2tlbmQgbWVtb3J5IGFsbG9jYXRp b25zCisJCQkJCQkJCQkjIHRvIHRoaXMgbWF4IChpbiBNQikuIDAgdHVybnMgdGhpcyBmZWF0dXJl CisJCQkJCQkJCQkjIG9mZi4KIAogIyAtIERpc2sgLQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9tbWdyL2FzZXQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvYXNldC5jCmluZGV4 IGM5MWY4ZWZhNGQuLmFjOWExY2VkM2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21t Z3IvYXNldC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvYXNldC5jCkBAIC00MjgsNiAr NDI4LDEwIEBAIEFsbG9jU2V0Q29udGV4dENyZWF0ZUludGVybmFsKE1lbW9yeUNvbnRleHQgcGFy ZW50LAogCWVsc2UKIAkJZmlyc3RCbG9ja1NpemUgPSBNYXgoZmlyc3RCbG9ja1NpemUsIGluaXRC bG9ja1NpemUpOwogCisJLyogRG8gbm90IGV4Y2VlZCBtYXhpbXVtIGFsbG93ZWQgbWVtb3J5IGFs bG9jYXRpb24gKi8KKwlpZiAoZXhjZWVkc19tYXhfdG90YWxfYmtlbmRfbWVtKGZpcnN0QmxvY2tT aXplKSkKKwkJcmV0dXJuIE5VTEw7CisKIAkvKgogCSAqIEFsbG9jYXRlIHRoZSBpbml0aWFsIGJs b2NrLiAgVW5saWtlIG90aGVyIGFzZXQuYyBibG9ja3MsIGl0IHN0YXJ0cyB3aXRoCiAJICogdGhl IGNvbnRleHQgaGVhZGVyIGFuZCBpdHMgYmxvY2sgaGVhZGVyIGZvbGxvd3MgdGhhdC4KQEAgLTcy MCw2ICs3MjQsMTEgQEAgQWxsb2NTZXRBbGxvYyhNZW1vcnlDb250ZXh0IGNvbnRleHQsIFNpemUg c2l6ZSkKIAl7CiAJCWNodW5rX3NpemUgPSBNQVhBTElHTihzaXplKTsKIAkJYmxrc2l6ZSA9IGNo dW5rX3NpemUgKyBBTExPQ19CTE9DS0hEUlNaICsgQUxMT0NfQ0hVTktIRFJTWjsKKworCQkvKiBE byBub3QgZXhjZWVkIG1heGltdW0gYWxsb3dlZCBtZW1vcnkgYWxsb2NhdGlvbiAqLworCQlpZiAo ZXhjZWVkc19tYXhfdG90YWxfYmtlbmRfbWVtKGJsa3NpemUpKQorCQkJcmV0dXJuIE5VTEw7CisK IAkJYmxvY2sgPSAoQWxsb2NCbG9jaykgbWFsbG9jKGJsa3NpemUpOwogCQlpZiAoYmxvY2sgPT0g TlVMTCkKIAkJCXJldHVybiBOVUxMOwpAQCAtOTExLDYgKzkyMCwxMCBAQCBBbGxvY1NldEFsbG9j KE1lbW9yeUNvbnRleHQgY29udGV4dCwgU2l6ZSBzaXplKQogCQl3aGlsZSAoYmxrc2l6ZSA8IHJl cXVpcmVkX3NpemUpCiAJCQlibGtzaXplIDw8PSAxOwogCisJCS8qIERvIG5vdCBleGNlZWQgbWF4 aW11bSBhbGxvd2VkIG1lbW9yeSBhbGxvY2F0aW9uICovCisJCWlmIChleGNlZWRzX21heF90b3Rh bF9ia2VuZF9tZW0oYmxrc2l6ZSkpCisJCQlyZXR1cm4gTlVMTDsKKwogCQkvKiBUcnkgdG8gYWxs b2NhdGUgaXQgKi8KIAkJYmxvY2sgPSAoQWxsb2NCbG9jaykgbWFsbG9jKGJsa3NpemUpOwogCkBA IC0xMTMzLDYgKzExNDYsMTAgQEAgQWxsb2NTZXRSZWFsbG9jKHZvaWQgKnBvaW50ZXIsIFNpemUg c2l6ZSkKIAkJYmxrc2l6ZSA9IGNoa3NpemUgKyBBTExPQ19CTE9DS0hEUlNaICsgQUxMT0NfQ0hV TktIRFJTWjsKIAkJb2xkYmxrc2l6ZSA9IGJsb2NrLT5lbmRwdHIgLSAoKGNoYXIgKikgYmxvY2sp OwogCisJCS8qIERvIG5vdCBleGNlZWQgbWF4aW11bSBhbGxvd2VkIG1lbW9yeSBhbGxvY2F0aW9u ICovCisJCWlmIChibGtzaXplID4gb2xkYmxrc2l6ZSAmJiBleGNlZWRzX21heF90b3RhbF9ia2Vu ZF9tZW0oYmxrc2l6ZSAtIG9sZGJsa3NpemUpKQorCQkJcmV0dXJuIE5VTEw7CisKIAkJYmxvY2sg PSAoQWxsb2NCbG9jaykgcmVhbGxvYyhibG9jaywgYmxrc2l6ZSk7CiAJCWlmIChibG9jayA9PSBO VUxMKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL2dlbmVyYXRpb24u YyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvZ2VuZXJhdGlvbi5jCmluZGV4IDM2ZTViM2Y5NGQu LjFkNTcyMDgzNmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvZ2VuZXJhdGlv bi5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvZ2VuZXJhdGlvbi5jCkBAIC0xOTIsNiAr MTkyLDkgQEAgR2VuZXJhdGlvbkNvbnRleHRDcmVhdGUoTWVtb3J5Q29udGV4dCBwYXJlbnQsCiAJ ZWxzZQogCQlhbGxvY1NpemUgPSBNYXgoYWxsb2NTaXplLCBpbml0QmxvY2tTaXplKTsKIAorCWlm IChleGNlZWRzX21heF90b3RhbF9ia2VuZF9tZW0oYWxsb2NTaXplKSkKKwkJcmV0dXJuIE5VTEw7 CisKIAkvKgogCSAqIEFsbG9jYXRlIHRoZSBpbml0aWFsIGJsb2NrLiAgVW5saWtlIG90aGVyIGdl bmVyYXRpb24uYyBibG9ja3MsIGl0CiAJICogc3RhcnRzIHdpdGggdGhlIGNvbnRleHQgaGVhZGVy IGFuZCBpdHMgYmxvY2sgaGVhZGVyIGZvbGxvd3MgdGhhdC4KQEAgLTM2MSw2ICszNjQsOSBAQCBH ZW5lcmF0aW9uQWxsb2MoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBTaXplIHNpemUpCiAJewogCQlT aXplCQlibGtzaXplID0gcmVxdWlyZWRfc2l6ZSArIEdlbmVyYXRpb25fQkxPQ0tIRFJTWjsKIAor CQlpZiAoZXhjZWVkc19tYXhfdG90YWxfYmtlbmRfbWVtKGJsa3NpemUpKQorCQkJcmV0dXJuIE5V TEw7CisKIAkJYmxvY2sgPSAoR2VuZXJhdGlvbkJsb2NrICopIG1hbGxvYyhibGtzaXplKTsKIAkJ aWYgKGJsb2NrID09IE5VTEwpCiAJCQlyZXR1cm4gTlVMTDsKQEAgLTQ2NCw2ICs0NzAsOSBAQCBH ZW5lcmF0aW9uQWxsb2MoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBTaXplIHNpemUpCiAJCQlpZiAo Ymxrc2l6ZSA8IHJlcXVpcmVkX3NpemUpCiAJCQkJYmxrc2l6ZSA9IHBnX25leHRwb3dlcjJfc2l6 ZV90KHJlcXVpcmVkX3NpemUpOwogCisJCQlpZiAoZXhjZWVkc19tYXhfdG90YWxfYmtlbmRfbWVt KGJsa3NpemUpKQorCQkJCXJldHVybiBOVUxMOworCiAJCQlibG9jayA9IChHZW5lcmF0aW9uQmxv Y2sgKikgbWFsbG9jKGJsa3NpemUpOwogCiAJCQlpZiAoYmxvY2sgPT0gTlVMTCkKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3Ivc2xhYi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1n ci9zbGFiLmMKaW5kZXggZTBlNjliMzk0ZS4uNjNjMDcxMjBkZCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbW1nci9zbGFiLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9zbGFi LmMKQEAgLTE3Nyw2ICsxNzcsMTAgQEAgU2xhYkNvbnRleHRDcmVhdGUoTWVtb3J5Q29udGV4dCBw YXJlbnQsCiAJaGVhZGVyU2l6ZSArPSBjaHVua3NQZXJCbG9jayAqIHNpemVvZihib29sKTsKICNl bmRpZgogCisJLyogRG8gbm90IGV4Y2VlZCBtYXhpbXVtIGFsbG93ZWQgbWVtb3J5IGFsbG9jYXRp b24gKi8KKwlpZiAoZXhjZWVkc19tYXhfdG90YWxfYmtlbmRfbWVtKGhlYWRlclNpemUpKQorCQly ZXR1cm4gTlVMTDsKKwogCXNsYWIgPSAoU2xhYkNvbnRleHQgKikgbWFsbG9jKGhlYWRlclNpemUp OwogCWlmIChzbGFiID09IE5VTEwpCiAJewpAQCAtMzMxLDYgKzMzNSwxMCBAQCBTbGFiQWxsb2Mo TWVtb3J5Q29udGV4dCBjb250ZXh0LCBTaXplIHNpemUpCiAJICovCiAJaWYgKHNsYWItPm1pbkZy ZWVDaHVua3MgPT0gMCkKIAl7CisJCS8qIERvIG5vdCBleGNlZWQgbWF4aW11bSBhbGxvd2VkIG1l bW9yeSBhbGxvY2F0aW9uICovCisJCWlmIChleGNlZWRzX21heF90b3RhbF9ia2VuZF9tZW0oc2xh Yi0+YmxvY2tTaXplKSkKKwkJCXJldHVybiBOVUxMOworCiAJCWJsb2NrID0gKFNsYWJCbG9jayAq KSBtYWxsb2Moc2xhYi0+YmxvY2tTaXplKTsKIAogCQlpZiAoYmxvY2sgPT0gTlVMTCkKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2JhY2tlbmRfc3RhdHVzLmggYi9zcmMvaW5jbHVkZS91 dGlscy9iYWNrZW5kX3N0YXR1cy5oCmluZGV4IDliZGM0MTk3YmQuLjNiOTQwZmY5OGUgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2JhY2tlbmRfc3RhdHVzLmgKKysrIGIvc3JjL2luY2x1 ZGUvdXRpbHMvYmFja2VuZF9zdGF0dXMuaApAQCAtMjcwLDYgKzI3MCw3IEBAIHR5cGVkZWYgc3Ry dWN0IExvY2FsUGdCYWNrZW5kU3RhdHVzCiAgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBib29sIHBn c3RhdF90cmFja19hY3Rpdml0aWVzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBwZ3N0YXRfdHJh Y2tfYWN0aXZpdHlfcXVlcnlfc2l6ZTsKK2V4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3RvdGFs X2JrZW5kX21lbTsKIAogCiAvKiAtLS0tLS0tLS0tCkBAIC0zMjEsNiArMzIyLDcgQEAgZXh0ZXJu IGludAlwZ3N0YXRfZmV0Y2hfc3RhdF9udW1iYWNrZW5kcyh2b2lkKTsKIGV4dGVybiBQZ0JhY2tl bmRTdGF0dXMgKnBnc3RhdF9mZXRjaF9zdGF0X2JlZW50cnkoaW50IGJlaWQpOwogZXh0ZXJuIExv Y2FsUGdCYWNrZW5kU3RhdHVzICpwZ3N0YXRfZmV0Y2hfc3RhdF9sb2NhbF9iZWVudHJ5KGludCBi ZWlkKTsKIGV4dGVybiBjaGFyICpwZ3N0YXRfY2xpcF9hY3Rpdml0eShjb25zdCBjaGFyICpyYXdf YWN0aXZpdHkpOworZXh0ZXJuIGJvb2wgZXhjZWVkc19tYXhfdG90YWxfYmtlbmRfbWVtKHVpbnQ2 NCBhbGxvY2F0aW9uX3JlcXVlc3QpOwogCiAKICNlbmRpZgkJCQkJCQkvKiBCQUNLRU5EX1NUQVRV U19IICovCi0tIAoyLjI1LjEKCg== --=-GCEd/eJRx8g8cNF0MDYh--