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 1p5NFO-0006TG-Fb for pgsql-hackers@arkaria.postgresql.org; Wed, 14 Dec 2022 08:36:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p5NFL-0007xc-Jb for pgsql-hackers@arkaria.postgresql.org; Wed, 14 Dec 2022 08:36:11 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p5NFL-0007xT-2c for pgsql-hackers@lists.postgresql.org; Wed, 14 Dec 2022 08:36:11 +0000 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1p5NFG-0006ZM-FA for pgsql-hackers@postgresql.org; Wed, 14 Dec 2022 08:36:10 +0000 Received: by mail-pl1-x62d.google.com with SMTP id s7so2610641plk.5 for ; Wed, 14 Dec 2022 00:36:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=HPf5ab4BmwRK0djuGFXBLJq5Q4C1kIElN2WcU0GbD9Y=; b=Pc3bs3ozYK1o1A+EC117zlOIIczNNgQcsuRPxXjHuPGNrqADng/puCNQUDXY105Ja/ DaJtp8a+v+ubfIb++YZ890yJdLL8d0o1IAhltHCeuMyOjtsXmn1Knc/opsBHEjgVJe3Q qD7hp48dpkvgaI5o46a261MrHAxNrSPeiZoewHPKBEqOqI9og2DXvts4SH4unizt6Q3Q jdGCjslMeWE1lTTBpiyn4PeNcsAQR39UARnaRjweLHRmKOGrmBkr2LfFZnj1WnCwPoc9 WnMSfZRXXSY3C8xstIDb7w5uXXx5RJiejcm8JxeLBztRwQ9TXBLCFJJ8KpO6v8azKE0e SP3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=HPf5ab4BmwRK0djuGFXBLJq5Q4C1kIElN2WcU0GbD9Y=; b=6O4Pmw/cDvg0dBcCLBdajRXL9qd7W6A9FVZ77CI4ZyZAmj2xg20OeRxEvtYMlE3H37 JTPB0+YaHYUEQqsRJfPGuKDN89/vLWXpkEMqCFGgngxPMsMIIlq6klb7Grjbkxglp6gI tvBaSC1qoBgkZKuGnBwVWtxn45+GggBlUEO+6w3eHmg+xPcJ99v17tfeWQklLFgBdhYe PDkAVSbQdilZ7bOv9NRl+Lm3alhRey4HdyBwQ1nHEPMXyzGUCmXM2YjXWH5QxxUvSRuB 37UzSnu8OFHnRBvc7t+tltT52j/h/kNzLBoxYDol8kzIOEmLdNP5143E5XzcW24mnx1q s+2Q== X-Gm-Message-State: ANoB5pk4rn8JRkHx5RtrMqh5HFPaVRM535Lw5sm78wuqRH5SoGGJdJRB g12N5DCJhZ6naHvDUBiZhq8mN8U+kH8er9sONtI= X-Google-Smtp-Source: AA0mqf7/pGb8LYZa9h1/Ar3yFuTM6ic2UZFi8IRBZSNnXR2uTuBVpOYWELUTqSwgWtr6LzFUGsrES/M63prBRxvHYts= X-Received: by 2002:a17:902:d510:b0:186:b137:4b42 with SMTP id b16-20020a170902d51000b00186b1374b42mr6241073plg.98.1671006963943; Wed, 14 Dec 2022 00:36:03 -0800 (PST) MIME-Version: 1.0 References: <20221212172407.veic522x37kmroli@alvherre.pgsql> In-Reply-To: <20221212172407.veic522x37kmroli@alvherre.pgsql> From: Amit Langote Date: Wed, 14 Dec 2022 17:35:47 +0900 Message-ID: Subject: Re: generic plans and "initial" pruning To: Alvaro Herrera Cc: Robert Haas , Jacob Champion , David Rowley , Tom Lane , PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000008169b005efc5a018" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008169b005efc5a018 Content-Type: text/plain; charset="UTF-8" On Tue, Dec 13, 2022 at 2:24 AM Alvaro Herrera wrote: > On 2022-Dec-12, Amit Langote wrote: > > I started feeling like putting all the new logic being added > > by this patch into plancache.c at the heart of GetCachedPlan() and > > tweaking its API in kind of unintuitive ways may not have been such a > > good idea to begin with. So I started thinking again about your > > GetRunnablePlan() wrapper idea and thought maybe we could do something > > with it. Let's say we name it GetCachedPlanLockPartitions() and put > > the logic that does initial pruning with the new > > ExecutorDoInitialPruning() in it, instead of in the normal > > GetCachedPlan() path. Any callers that call GetCachedPlan() instead > > call GetCachedPlanLockPartitions() with either the List ** parameter > > as now or some container struct if that seems better. Whether > > GetCachedPlanLockPartitions() needs to do anything other than return > > the CachedPlan returned by GetCachedPlan() can be decided by the > > latter setting, say, CachedPlan.has_unlocked_partitions. That will be > > done by AcquireExecutorLocks() when it sees containsInitialPrunnig in > > any of the PlannedStmts it sees, locking only the > > PlannedStmt.minLockRelids set (which is all relations where no pruning > > is needed!), leaving the partition locking to > > GetCachedPlanLockPartitions(). > > Hmm. This doesn't sound totally unreasonable, except to the point David > was making that perhaps we may want this container struct to accomodate > other things in the future than just the partition pruning results, so I > think its name (and that of the function that produces it) ought to be a > little more generic than that. > > (I think this also answers your question on whether a List ** is better > than a container struct.) OK, so here's a WIP attempt at that. I have moved the original functionality of GetCachedPlan() to GetCachedPlanInternal(), turning the former into a sort of controller as described shortly. The latter's CheckCachedPlan() part now only locks the "minimal" set of, non-prunable, relations, making a note of whether the plan contains any prunable subnodes and thus prunable relations whose locking is deferred to the caller, GetCachedPlan(). GetCachedPlan(), as a sort of controller as mentioned before, does the pruning if needed on the minimally valid plan returned by GetCachedPlanInternal(), locks the partitions that survive, and redoes the whole thing if the locking of partitions invalidates the plan. The pruning results are returned through the new output parameter of GetCachedPlan() of type CachedPlanExtra. I named it so after much consideration, because all the new logic that produces stuff to put into it is a part of the plancache module and has to do with manipulating a CachedPlan. (I had considered CachedPlanExecInfo to indicate that it contains information that is to be forwarded to the executor, though that just didn't seem to fit in plancache.h.) I have broken out a few things into a preparatory patch 0001. Mainly, it invents PlannedStmt.minLockRelids to replace the AcquireExecutorLocks()'s current loop over the range table to figure out the relations to lock. I also threw in a couple of pruning related non-functional changes in there to make it easier to read the 0002, which is the main patch. -- Thanks, Amit Langote EDB: http://www.enterprisedb.com --0000000000008169b005efc5a018 Content-Type: application/octet-stream; name="v29-0001-Preparatory-refactoring-before-reworking-CachedP.patch" Content-Disposition: attachment; filename="v29-0001-Preparatory-refactoring-before-reworking-CachedP.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbne4ek70 RnJvbSAxNGExMTk4YmRhYWQwMDdiMWRjODM1ZjI0Y2FhNDJkMzY2N2M3MDQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCAxMyBEZWMgMjAyMiAxMTo1ODowNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjI5IDEv Ml0gUHJlcGFyYXRvcnkgcmVmYWN0b3JpbmcgYmVmb3JlIHJld29ya2luZyBDYWNoZWRQbGFuCiBs b2NraW5nCgpSZW1lbWJlciB0aGUgUlQgaW5kZXhlcyBvZiBSVEVzIHRoYXQgQWNxdWlyZUV4ZWN1 dG9yTG9ja3MoKSBtdXN0Cmxvb2sgYXQgdG8gY29uc2lkZXIgbG9ja2luZyBpbiBhIGJpdG1hcHNl dCwgc28gdGhhdCBuc3RlYWQgb2YgbG9vcGluZwpvdmVyIHRoZSByYW5nZSB0YWJsZSB0byBmaW5k IHRob3NlIFJURXMsIGl0IGNhbiBsb29rIHRoZW0gdXAgdXNpbmcKdGhlIFJUIGluZGV4ZXMgc2V0 IGluIHRoZSBiaXRtYXBzZXQuCgpUaGlzIGFsc28gYWRkcyBzb21lIGV4dHJhIGluZm9ybWF0aW9u IHJlbGF0ZWQgdG8gZXhlY3V0aW9uLXRpbWUKcHJ1bmluZyB0byB0aGUgcmVsZXZhbnQgcGxhbiBu b2Rlcy4KLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyAgfCAgMSArCiBz cmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgfCAgNiArKysrCiBzcmMvYmFja2Vu ZC9ub2Rlcy9yZWFkZnVuY3MuYyAgICAgICAgfCAgOCArKysrLS0KIHNyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL3BsYW5uZXIuYyB8ICAyICsrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9z ZXRyZWZzLmMgfCAxMiArKysrKysrKwogc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVu ZS5jIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvcGxhbmNhY2hlLmMgIHwgMTAgKysrKystLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhl Y1BhcnRpdGlvbi5oIHwgIDIgKysKIHNyYy9pbmNsdWRlL25vZGVzL25vZGVzLmggICAgICAgICAg ICB8ICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICB8IDExICsrKysr KysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgfCAxOSArKysrKysrKysr KysrCiAxMSBmaWxlcyBjaGFuZ2VkLCAxMDYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCmluZGV4IGE1YjhlNDNlYzUuLjY1YzRiNjNi YmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCkBAIC0xODIsNiArMTgyLDcgQEAg RXhlY1NlcmlhbGl6ZVBsYW4oUGxhbiAqcGxhbiwgRVN0YXRlICplc3RhdGUpCiAJcHN0bXQtPnRy YW5zaWVudFBsYW4gPSBmYWxzZTsKIAlwc3RtdC0+ZGVwZW5kc09uUm9sZSA9IGZhbHNlOwogCXBz dG10LT5wYXJhbGxlbE1vZGVOZWVkZWQgPSBmYWxzZTsKKwlwc3RtdC0+Y29udGFpbnNJbml0aWFs UHJ1bmluZyA9IGZhbHNlOwkvKiB3b3JrZXJzIG5lZWQgbm90IGtub3chICovCiAJcHN0bXQtPnBs YW5UcmVlID0gcGxhbjsKIAlwc3RtdC0+cGFydFBydW5lSW5mb3MgPSBlc3RhdGUtPmVzX3BhcnRf cHJ1bmVfaW5mb3M7CiAJcHN0bXQtPnJ0YWJsZSA9IGVzdGF0ZS0+ZXNfcmFuZ2VfdGFibGU7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKaW5kZXggNzZkNzliOTc0MS4uNWI2MjE1Nzcx MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYwpAQCAtMTk1Niw2ICsxOTU2LDcg QEAgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgUGFydGl0 aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pCiAJCQlBc3NlcnQocGFydGRlc2MtPm5wYXJ0cyA+PSBw aW5mby0+bnBhcnRzKTsKIAkJCXBwcnVuZS0+bnBhcnRzID0gcGFydGRlc2MtPm5wYXJ0czsKIAkJ CXBwcnVuZS0+c3VicGxhbl9tYXAgPSBwYWxsb2Moc2l6ZW9mKGludCkgKiBwYXJ0ZGVzYy0+bnBh cnRzKTsKKwkJCXBwcnVuZS0+cnRpX21hcCA9IHBhbGxvYyhzaXplb2YoSW5kZXgpICogcGFydGRl c2MtPm5wYXJ0cyk7CiAJCQlpZiAocGFydGRlc2MtPm5wYXJ0cyA9PSBwaW5mby0+bnBhcnRzKQog CQkJewogCQkJCS8qCkBAIC0xOTY2LDYgKzE5NjcsOCBAQCBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0 YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykK IAkJCQlwcHJ1bmUtPnN1YnBhcnRfbWFwID0gcGluZm8tPnN1YnBhcnRfbWFwOwogCQkJCW1lbWNw eShwcHJ1bmUtPnN1YnBsYW5fbWFwLCBwaW5mby0+c3VicGxhbl9tYXAsCiAJCQkJCSAgIHNpemVv ZihpbnQpICogcGluZm8tPm5wYXJ0cyk7CisJCQkJbWVtY3B5KHBwcnVuZS0+cnRpX21hcCwgcGlu Zm8tPnJ0aV9tYXAsCisJCQkJCSAgIHNpemVvZihpbnQpICogcGluZm8tPm5wYXJ0cyk7CiAKIAkJ CQkvKgogCQkJCSAqIERvdWJsZS1jaGVjayB0aGF0IHRoZSBsaXN0IG9mIHVucHJ1bmVkIHJlbGF0 aW9ucyBoYXMgbm90CkBAIC0yMDE2LDYgKzIwMTksOCBAQCBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0 YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykK IAkJCQkJCQlwaW5mby0+c3VicGxhbl9tYXBbcGRfaWR4XTsKIAkJCQkJCXBwcnVuZS0+c3VicGFy dF9tYXBbcHBfaWR4XSA9CiAJCQkJCQkJcGluZm8tPnN1YnBhcnRfbWFwW3BkX2lkeF07CisJCQkJ CQlwcHJ1bmUtPnJ0aV9tYXBbcHBfaWR4XSA9CisJCQkJCQkJcGluZm8tPnJ0aV9tYXBbcGRfaWR4 XTsKIAkJCQkJCXBkX2lkeCsrOwogCQkJCQl9CiAJCQkJCWVsc2UKQEAgLTIwMjMsNiArMjAyOCw3 IEBAIENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIFBhcnRp dGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQogCQkJCQkJLyogdGhpcyBwYXJ0ZGVzYyBlbnRyeSBp cyBub3QgaW4gdGhlIHBsYW4gKi8KIAkJCQkJCXBwcnVuZS0+c3VicGxhbl9tYXBbcHBfaWR4XSA9 IC0xOwogCQkJCQkJcHBydW5lLT5zdWJwYXJ0X21hcFtwcF9pZHhdID0gLTE7CisJCQkJCQlwcHJ1 bmUtPnJ0aV9tYXBbcHBfaWR4XSA9IDA7CiAJCQkJCX0KIAkJCQl9CiAKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNz LmMKaW5kZXggOTY2Yjc1ZjVhNi4uMTE2MTY3MWZhNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv bm9kZXMvcmVhZGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKQEAg LTE1OCw2ICsxNTgsMTEgQEAKIAl0b2tlbiA9IHBnX3N0cnRvaygmbGVuZ3RoKTsJCS8qIHNraXAg OmZsZG5hbWUgKi8gXAogCWxvY2FsX25vZGUtPmZsZG5hbWUgPSByZWFkSW50Q29scyhsZW4pCiAK Ky8qIFJlYWQgYW4gSW5kZXggYXJyYXkgKi8KKyNkZWZpbmUgUkVBRF9JTkRFWF9BUlJBWShmbGRu YW1lLCBsZW4pIFwKKwl0b2tlbiA9IHBnX3N0cnRvaygmbGVuZ3RoKTsJCS8qIHNraXAgOmZsZG5h bWUgKi8gXAorCWxvY2FsX25vZGUtPmZsZG5hbWUgPSByZWFkSW5kZXhDb2xzKGxlbikKKwogLyog UmVhZCBhIGJvb2wgYXJyYXkgKi8KICNkZWZpbmUgUkVBRF9CT09MX0FSUkFZKGZsZG5hbWUsIGxl bikgXAogCXRva2VuID0gcGdfc3RydG9rKCZsZW5ndGgpOwkJLyogc2tpcCA6ZmxkbmFtZSAqLyBc CkBAIC03OTYsNyArODAxLDYgQEAgZm5uYW1lKGludCBudW1Db2xzKSBcCiAgKi8KIFJFQURfU0NB TEFSX0FSUkFZKHJlYWRBdHRyTnVtYmVyQ29scywgaW50MTYsIGF0b2kpCiBSRUFEX1NDQUxBUl9B UlJBWShyZWFkT2lkQ29scywgT2lkLCBhdG9vaWQpCi0vKiBvdXRmdW5jcy5jIGhhcyB3cml0ZUlu ZGV4Q29scywgYnV0IHdlIGRvbid0IHlldCBuZWVkIHRoYXQgaGVyZSAqLwotLyogUkVBRF9TQ0FM QVJfQVJSQVkocmVhZEluZGV4Q29scywgSW5kZXgsIGF0b3VpKSAqLworUkVBRF9TQ0FMQVJfQVJS QVkocmVhZEluZGV4Q29scywgSW5kZXgsIGF0b3VpKQogUkVBRF9TQ0FMQVJfQVJSQVkocmVhZElu dENvbHMsIGludCwgYXRvaSkKIFJFQURfU0NBTEFSX0FSUkFZKHJlYWRCb29sQ29scywgYm9vbCwg c3RydG9ib29sKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5l ci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDVkZDRmOTI3 MjAuLjYyMGIxNjNlZjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Bs YW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTUy Myw4ICs1MjMsMTAgQEAgc3RhbmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIg KnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCiAJcmVzdWx0LT5wYXJhbGxlbE1vZGVO ZWVkZWQgPSBnbG9iLT5wYXJhbGxlbE1vZGVOZWVkZWQ7CiAJcmVzdWx0LT5wbGFuVHJlZSA9IHRv cF9wbGFuOwogCXJlc3VsdC0+cGFydFBydW5lSW5mb3MgPSBnbG9iLT5wYXJ0UHJ1bmVJbmZvczsK KwlyZXN1bHQtPmNvbnRhaW5zSW5pdGlhbFBydW5pbmcgPSBnbG9iLT5jb250YWluc0luaXRpYWxQ cnVuaW5nOwogCXJlc3VsdC0+cnRhYmxlID0gZ2xvYi0+ZmluYWxydGFibGU7CiAJcmVzdWx0LT5w ZXJtSW5mb3MgPSBnbG9iLT5maW5hbHJ0ZXBlcm1pbmZvczsKKwlyZXN1bHQtPm1pbkxvY2tSZWxp ZHMgPSBnbG9iLT5taW5Mb2NrUmVsaWRzOwogCXJlc3VsdC0+cmVzdWx0UmVsYXRpb25zID0gZ2xv Yi0+cmVzdWx0UmVsYXRpb25zOwogCXJlc3VsdC0+YXBwZW5kUmVsYXRpb25zID0gZ2xvYi0+YXBw ZW5kUmVsYXRpb25zOwogCXJlc3VsdC0+c3VicGxhbnMgPSBnbG9iLT5zdWJwbGFuczsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3NldHJlZnMuYwppbmRleCA1OTZmMWZiYzhlLi5lZDQzZDU5MzZkIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCkBAIC0yNzksNiArMjc5LDE2IEBAIHNl dF9wbGFuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4pCiAJICovCiAJ YWRkX3J0ZXNfdG9fZmxhdF9ydGFibGUocm9vdCwgZmFsc2UpOwogCisJLyoKKwkgKiBBZGQgdGhl IHF1ZXJ5J3MgYWRqdXN0ZWQgcmFuZ2Ugb2YgUlQgaW5kZXhlcyB0byBnbG9iLT5taW5Mb2NrUmVs aWRzLgorCSAqIFRoZSBhZGp1c3RlZCBSVCBpbmRleGVzIG9mIHBydW5hYmxlIHJlbGF0aW9ucyB3 aWxsIGJlIGRlbGV0ZWQgZnJvbSB0aGUKKwkgKiBzZXQgYmVsb3cgd2hlcmUgUGFydGl0aW9uUHJ1 bmVJbmZvcyBhcmUgcHJvY2Vzc2VkLgorCSAqLworCWdsb2ItPm1pbkxvY2tSZWxpZHMgPQorCQli bXNfYWRkX3JhbmdlKGdsb2ItPm1pbkxvY2tSZWxpZHMsCisJCQkJCSAgcnRvZmZzZXQgKyAxLAor CQkJCQkgIHJ0b2Zmc2V0ICsgbGlzdF9sZW5ndGgocm9vdC0+cGFyc2UtPnJ0YWJsZSkpOworCiAJ LyoKIAkgKiBBZGp1c3QgUlQgaW5kZXhlcyBvZiBQbGFuUm93TWFya3MgYW5kIGFkZCB0byBmaW5h bCByb3dtYXJrcyBsaXN0CiAJICovCkBAIC0zNzcsOSArMzg3LDExIEBAIHNldF9wbGFuX3JlZmVy ZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4pCiAJCQkJLyogUlQgaW5kZXggb2Yg dGhlIHRhYmxlIHRvIHdoaWNoIHRoZSBwaW5mbyBiZWxvbmdzLiAqLwogCQkJCXBpbmZvLT5ydGlu ZGV4ICs9IHJ0b2Zmc2V0OwogCQkJfQorCiAJCX0KIAogCQlnbG9iLT5wYXJ0UHJ1bmVJbmZvcyA9 IGxhcHBlbmQoZ2xvYi0+cGFydFBydW5lSW5mb3MsIHBydW5laW5mbyk7CisJCWdsb2ItPmNvbnRh aW5zSW5pdGlhbFBydW5pbmcgfD0gcHJ1bmVpbmZvLT5uZWVkc19pbml0X3BydW5pbmc7CiAJfQog CiAJcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9w YXJ0cHJ1bmUuYyBiL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYwppbmRleCBk NDhmNjc4NGMxLi41NjI3MGQ3NjcwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJ0aXRpb25p bmcvcGFydHBydW5lLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5j CkBAIC0xNDQsNyArMTQ0LDkgQEAgc3RhdGljIExpc3QgKm1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1 bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCSAgIExpc3QgKnBydW5lcXVhbCwK IAkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnBhcnRyZWxpZHMsCiAJCQkJCQkJCQkJICAgaW50ICpy ZWxpZF9zdWJwbGFuX21hcCwKLQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKiptYXRjaGVkc3VicGxh bnMpOworCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqKm1hdGNoZWRzdWJwbGFucywKKwkJCQkJCQkJ CQkgICBib29sICpuZWVkc19pbml0X3BydW5pbmcsCisJCQkJCQkJCQkJICAgYm9vbCAqbmVlZHNf ZXhlY19wcnVuaW5nKTsKIHN0YXRpYyB2b2lkIGdlbl9wYXJ0cHJ1bmVfc3RlcHMoUmVsT3B0SW5m byAqcmVsLCBMaXN0ICpjbGF1c2VzLAogCQkJCQkJCQlQYXJ0Q2xhdXNlVGFyZ2V0IHRhcmdldCwK IAkJCQkJCQkJR2VuZXJhdGVQcnVuaW5nU3RlcHNDb250ZXh0ICpjb250ZXh0KTsKQEAgLTIzNCw2 ICsyMzYsOCBAQCBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKnBhcmVudHJlbCwKIAlpbnQJCSAgICpyZWxpZF9zdWJwbGFuX21hcDsKIAlMaXN0 Q2VsbCAgICpsYzsKIAlpbnQJCQlpOworCWJvb2wJCW5lZWRzX2luaXRfcHJ1bmluZyA9IGZhbHNl OworCWJvb2wJCW5lZWRzX2V4ZWNfcHJ1bmluZyA9IGZhbHNlOwogCiAJLyoKIAkgKiBTY2FuIHRo ZSBzdWJwYXRocyB0byBzZWUgd2hpY2ggb25lcyBhcmUgc2NhbnMgb2YgcGFydGl0aW9uIGNoaWxk CkBAIC0zMTMsMTIgKzMxNywxNiBAQCBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8oUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAkJQml0bWFwc2V0ICAqcGFydHJlbGlk cyA9IChCaXRtYXBzZXQgKikgbGZpcnN0KGxjKTsKIAkJTGlzdAkgICAqcGluZm9saXN0OwogCQlC aXRtYXBzZXQgICptYXRjaGVkc3VicGxhbnMgPSBOVUxMOworCQlib29sCQlwYXJ0cmVsX25lZWRz X2luaXRfcHJ1bmluZzsKKwkJYm9vbAkJcGFydHJlbF9uZWVkc19leGVjX3BydW5pbmc7CiAKIAkJ cGluZm9saXN0ID0gbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8ocm9vdCwgcGFyZW50cmVs LAogCQkJCQkJCQkJCQkJICBwcnVuZXF1YWwsCiAJCQkJCQkJCQkJCQkgIHBhcnRyZWxpZHMsCiAJ CQkJCQkJCQkJCQkgIHJlbGlkX3N1YnBsYW5fbWFwLAotCQkJCQkJCQkJCQkJICAmbWF0Y2hlZHN1 YnBsYW5zKTsKKwkJCQkJCQkJCQkJCSAgJm1hdGNoZWRzdWJwbGFucywKKwkJCQkJCQkJCQkJCSAg JnBhcnRyZWxfbmVlZHNfaW5pdF9wcnVuaW5nLAorCQkJCQkJCQkJCQkJICAmcGFydHJlbF9uZWVk c19leGVjX3BydW5pbmcpOwogCiAJCS8qIFdoZW4gcHJ1bmluZyBpcyBwb3NzaWJsZSwgcmVjb3Jk IHRoZSBtYXRjaGVkIHN1YnBsYW5zICovCiAJCWlmIChwaW5mb2xpc3QgIT0gTklMKQpAQCAtMzI3 LDYgKzMzNSw5IEBAIG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQkJYWxsbWF0Y2hlZHN1YnBsYW5zID0gYm1zX2pvaW4o bWF0Y2hlZHN1YnBsYW5zLAogCQkJCQkJCQkJCSAgYWxsbWF0Y2hlZHN1YnBsYW5zKTsKIAkJfQor CisJCW5lZWRzX2luaXRfcHJ1bmluZyB8PSBwYXJ0cmVsX25lZWRzX2luaXRfcHJ1bmluZzsKKwkJ bmVlZHNfZXhlY19wcnVuaW5nIHw9IHBhcnRyZWxfbmVlZHNfZXhlY19wcnVuaW5nOwogCX0KIAog CXBmcmVlKHJlbGlkX3N1YnBsYW5fbWFwKTsKQEAgLTM0Miw2ICszNTMsOCBAQCBtYWtlX3BhcnRp dGlvbl9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwK IAlwcnVuZWluZm8gPSBtYWtlTm9kZShQYXJ0aXRpb25QcnVuZUluZm8pOwogCXBydW5laW5mby0+ cm9vdF9wYXJlbnRfcmVsaWRzID0gcGFyZW50cmVsLT5yZWxpZHM7CiAJcHJ1bmVpbmZvLT5wcnVu ZV9pbmZvcyA9IHBydW5lcmVsaW5mb3M7CisJcHJ1bmVpbmZvLT5uZWVkc19pbml0X3BydW5pbmcg PSBuZWVkc19pbml0X3BydW5pbmc7CisJcHJ1bmVpbmZvLT5uZWVkc19leGVjX3BydW5pbmcgPSBu ZWVkc19leGVjX3BydW5pbmc7CiAKIAkvKgogCSAqIFNvbWUgc3VicGxhbnMgbWF5IG5vdCBiZWxv bmcgdG8gYW55IG9mIHRoZSBpZGVudGlmaWVkIHBhcnRpdGlvbmVkIHJlbHMuCkBAIC00NDIsMTMg KzQ1NSwxOSBAQCBhZGRfcGFydF9yZWxpZHMoTGlzdCAqYWxscGFydHJlbGlkcywgQml0bWFwc2V0 ICpwYXJ0cmVsaWRzKQogICogSWYgd2UgY2Fubm90IGZpbmQgYW55IHVzZWZ1bCBydW4tdGltZSBw cnVuaW5nIHN0ZXBzLCByZXR1cm4gTklMLgogICogSG93ZXZlciwgb24gc3VjY2VzcywgZWFjaCBy ZWwgaWRlbnRpZmllZCBpbiBwYXJ0cmVsaWRzIHdpbGwgaGF2ZQogICogYW4gZWxlbWVudCBpbiB0 aGUgcmVzdWx0IGxpc3QsIGV2ZW4gaWYgc29tZSBvZiB0aGVtIGFyZSB1c2VsZXNzLgorICogKm5l ZWRzX2luaXRfcHJ1bmluZyBhbmQgKm5lZWRzX2V4ZWNfcHJ1bmluZyBhcmUgc2V0IHRvIGluZGlj YXRlIHdoZXRoZXIKKyAqIHRoZSBwcnVuaW5nIHN0ZXBzIGNvbnRhaW5lZCBpbiB0aGUgcmV0dXJu ZWQgUGFydGl0aW9uZWRSZWxQcnVuZUluZm9zCisgKiBjYW4gYmUgcGVyZm9ybWVkIGR1cmluZyBl eGVjdXRvciBzdGFydHVwIGFuZCBkdXJpbmcgZXhlY3V0aW9uLAorICogcmVzcGVjdGl2ZWx5Lgog ICovCiBzdGF0aWMgTGlzdCAqCiBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQkJCQkJCSAgTGlzdCAqcHJ1bmVx dWFsLAogCQkJCQkJCSAgQml0bWFwc2V0ICpwYXJ0cmVsaWRzLAogCQkJCQkJCSAgaW50ICpyZWxp ZF9zdWJwbGFuX21hcCwKLQkJCQkJCQkgIEJpdG1hcHNldCAqKm1hdGNoZWRzdWJwbGFucykKKwkJ CQkJCQkgIEJpdG1hcHNldCAqKm1hdGNoZWRzdWJwbGFucywKKwkJCQkJCQkgIGJvb2wgKm5lZWRz X2luaXRfcHJ1bmluZywKKwkJCQkJCQkgIGJvb2wgKm5lZWRzX2V4ZWNfcHJ1bmluZykKIHsKIAlS ZWxPcHRJbmZvICp0YXJnZXRwYXJ0ID0gTlVMTDsKIAlMaXN0CSAgICpwaW5mb2xpc3QgPSBOSUw7 CkBAIC00NTksNiArNDc4LDEwIEBAIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJaW50CQkJcnRpOwogCWludAkJ CWk7CiAKKwkvKiBXaWxsIGZpbmQgb3V0IGJlbG93LiAqLworCSpuZWVkc19pbml0X3BydW5pbmcg PSBmYWxzZTsKKwkqbmVlZHNfZXhlY19wcnVuaW5nID0gZmFsc2U7CisKIAkvKgogCSAqIEV4YW1p bmUgZWFjaCBwYXJ0aXRpb25lZCByZWwsIGNvbnN0cnVjdGluZyBhIHRlbXBvcmFyeSBhcnJheSB0 byBtYXAKIAkgKiBmcm9tIHBsYW5uZXIgcmVsaWRzIHRvIGluZGV4IG9mIHRoZSBwYXJ0aXRpb25l ZCByZWwsIGFuZCBidWlsZGluZyBhCkBAIC01NDYsNiArNTY5LDkgQEAgbWFrZV9wYXJ0aXRpb25l ZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwK IAkJICogZXhlY3V0b3IgcGVyLXNjYW4gcHJ1bmluZyBzdGVwcy4gIFRoaXMgZmlyc3QgcGFzcyBj cmVhdGVzIHN0YXJ0dXAKIAkJICogcHJ1bmluZyBzdGVwcyBhbmQgZGV0ZWN0cyB3aGV0aGVyIHRo ZXJlJ3MgYW55IHBvc3NpYmx5LXVzZWZ1bCBxdWFscwogCQkgKiB0aGF0IHdvdWxkIHJlcXVpcmUg cGVyLXNjYW4gcHJ1bmluZy4KKwkJICoKKwkJICogSW4gdGhlIGZpcnN0IHBhc3MsIHdlIG5vdGUg d2hldGhlciB0aGUgMm5kIHBhc3MgaXMgbmVjZXNzYXJ5IGJ5CisJCSAqIG5vdGluZyB0aGUgcHJl c2VuY2Ugb2YgRVhFQyBwYXJhbWV0ZXJzLgogCQkgKi8KIAkJZ2VuX3BhcnRwcnVuZV9zdGVwcyhz dWJwYXJ0LCBwYXJ0cHJ1bmVxdWFsLCBQQVJUVEFSR0VUX0lOSVRJQUwsCiAJCQkJCQkJJmNvbnRl eHQpOwpAQCAtNjIwLDYgKzY0NiwxMiBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQlwaW5mby0+ZXhlY3Bh cmFtaWRzID0gZXhlY3BhcmFtaWRzOwogCQkvKiBSZW1haW5pbmcgZmllbGRzIHdpbGwgYmUgZmls bGVkIGluIHRoZSBuZXh0IGxvb3AgKi8KIAorCQkvKiByZWNvcmQgd2hpY2ggdHlwZXMgb2YgcHJ1 bmluZyBzdGVwcyB3ZSd2ZSBzZWVuIHNvIGZhciAqLworCQlpZiAoaW5pdGlhbF9wcnVuaW5nX3N0 ZXBzICE9IE5JTCkKKwkJCSpuZWVkc19pbml0X3BydW5pbmcgPSB0cnVlOworCQlpZiAoZXhlY19w cnVuaW5nX3N0ZXBzICE9IE5JTCkKKwkJCSpuZWVkc19leGVjX3BydW5pbmcgPSB0cnVlOworCiAJ CXBpbmZvbGlzdCA9IGxhcHBlbmQocGluZm9saXN0LCBwaW5mbyk7CiAJfQogCkBAIC02NDcsNiAr Njc5LDcgQEAgbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAkJaW50CQkgICAqc3VicGxhbl9tYXA7CiAJCWludAkJ ICAgKnN1YnBhcnRfbWFwOwogCQlPaWQJCSAgICpyZWxpZF9tYXA7CisJCUluZGV4CSAgICpydGlf bWFwOwogCiAJCS8qCiAJCSAqIENvbnN0cnVjdCB0aGUgc3VicGxhbiBhbmQgc3VicGFydCBtYXBz IGZvciB0aGlzIHBhcnRpdGlvbmluZyBsZXZlbC4KQEAgLTY1OSw2ICs2OTIsNyBAQCBtYWtlX3Bh cnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFy ZW50cmVsLAogCQlzdWJwYXJ0X21hcCA9IChpbnQgKikgcGFsbG9jKG5wYXJ0cyAqIHNpemVvZihp bnQpKTsKIAkJbWVtc2V0KHN1YnBhcnRfbWFwLCAtMSwgbnBhcnRzICogc2l6ZW9mKGludCkpOwog CQlyZWxpZF9tYXAgPSAoT2lkICopIHBhbGxvYzAobnBhcnRzICogc2l6ZW9mKE9pZCkpOworCQly dGlfbWFwID0gKEluZGV4ICopIHBhbGxvYzAobnBhcnRzICogc2l6ZW9mKEluZGV4KSk7CiAJCXBy ZXNlbnRfcGFydHMgPSBOVUxMOwogCiAJCWkgPSAtMTsKQEAgLTY3Myw2ICs3MDcsNyBAQCBtYWtl X3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cGFyZW50cmVsLAogCQkJc3VicGxhbl9tYXBbaV0gPSBzdWJwbGFuaWR4ID0gcmVsaWRfc3VicGxh bl9tYXBbcGFydHJlbC0+cmVsaWRdIC0gMTsKIAkJCXN1YnBhcnRfbWFwW2ldID0gc3VicGFydGlk eCA9IHJlbGlkX3N1YnBhcnRfbWFwW3BhcnRyZWwtPnJlbGlkXSAtIDE7CiAJCQlyZWxpZF9tYXBb aV0gPSBwbGFubmVyX3J0X2ZldGNoKHBhcnRyZWwtPnJlbGlkLCByb290KS0+cmVsaWQ7CisJCQly dGlfbWFwW2ldID0gcGFydHJlbC0+cmVsaWQ7CiAJCQlpZiAoc3VicGxhbmlkeCA+PSAwKQogCQkJ ewogCQkJCXByZXNlbnRfcGFydHMgPSBibXNfYWRkX21lbWJlcihwcmVzZW50X3BhcnRzLCBpKTsK QEAgLTY5Nyw2ICs3MzIsNyBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQlwaW5mby0+c3VicGxhbl9tYXAg PSBzdWJwbGFuX21hcDsKIAkJcGluZm8tPnN1YnBhcnRfbWFwID0gc3VicGFydF9tYXA7CiAJCXBp bmZvLT5yZWxpZF9tYXAgPSByZWxpZF9tYXA7CisJCXBpbmZvLT5ydGlfbWFwID0gcnRpX21hcDsK IAl9CiAKIAlwZnJlZShyZWxpZF9zdWJwYXJ0X21hcCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5j YWNoZS5jCmluZGV4IGNjOTQzMjA1ZDMuLjMzOWJiNjAzZjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L3BsYW5jYWNoZS5jCkBAIC0xNzQ3LDcgKzE3NDcsOCBAQCBBY3F1aXJlRXhlY3V0b3JMb2NrcyhM aXN0ICpzdG10X2xpc3QsIGJvb2wgYWNxdWlyZSkKIAlmb3JlYWNoKGxjMSwgc3RtdF9saXN0KQog CXsKIAkJUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQs IGxjMSk7Ci0JCUxpc3RDZWxsICAgKmxjMjsKKwkJQml0bWFwc2V0ICAqYWxsTG9ja1JlbGlkczsK KwkJaW50CQkJcnRpOwogCiAJCWlmIChwbGFubmVkc3RtdC0+Y29tbWFuZFR5cGUgPT0gQ01EX1VU SUxJVFkpCiAJCXsKQEAgLTE3NjAsMTQgKzE3NjEsMTcgQEAgQWNxdWlyZUV4ZWN1dG9yTG9ja3Mo TGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpCiAJCQkgKi8KIAkJCVF1ZXJ5CSAgICpxdWVy eSA9IFV0aWxpdHlDb250YWluc1F1ZXJ5KHBsYW5uZWRzdG10LT51dGlsaXR5U3RtdCk7CiAKKwkJ CUFzc2VydChwbGFubmVkc3RtdC0+bWluTG9ja1JlbGlkcyA9PSBOVUxMKTsKIAkJCWlmIChxdWVy eSkKIAkJCQlTY2FuUXVlcnlGb3JMb2NrcyhxdWVyeSwgYWNxdWlyZSk7CiAJCQljb250aW51ZTsK IAkJfQogCi0JCWZvcmVhY2gobGMyLCBwbGFubmVkc3RtdC0+cnRhYmxlKQorCQlhbGxMb2NrUmVs aWRzID0gcGxhbm5lZHN0bXQtPm1pbkxvY2tSZWxpZHM7CisJCXJ0aSA9IC0xOworCQl3aGlsZSAo KHJ0aSA9IGJtc19uZXh0X21lbWJlcihhbGxMb2NrUmVsaWRzLCBydGkpKSA+IDApCiAJCXsKLQkJ CVJhbmdlVGJsRW50cnkgKnJ0ZSA9IChSYW5nZVRibEVudHJ5ICopIGxmaXJzdChsYzIpOworCQkJ UmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0Y2gocnRpLCBwbGFubmVkc3RtdC0+cnRhYmxlKTsK IAogCQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCiAJCQkJY29udGludWU7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmggYi9zcmMvaW5j bHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKaW5kZXggMTdmYWJjMThjOS4uYWVlYWViNzg4 NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCisrKyBi L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaApAQCAtNDUsNiArNDUsNyBAQCBl eHRlcm4gdm9pZCBFeGVjQ2xlYW51cFR1cGxlUm91dGluZyhNb2RpZnlUYWJsZVN0YXRlICptdHN0 YXRlLAogICogbnBhcnRzCQkJCQkJTGVuZ3RoIG9mIHN1YnBsYW5fbWFwW10gYW5kIHN1YnBhcnRf bWFwW10uCiAgKiBzdWJwbGFuX21hcAkJCQkJU3VicGxhbiBpbmRleCBieSBwYXJ0aXRpb24gaW5k ZXgsIG9yIC0xLgogICogc3VicGFydF9tYXAJCQkJCVN1YnBhcnQgaW5kZXggYnkgcGFydGl0aW9u IGluZGV4LCBvciAtMS4KKyAqIHJ0aV9tYXAJCQkJCQlSYW5nZSB0YWJsZSBpbmRleCBieSBwYXJ0 aXRpb24gaW5kZXgsIG9yIDAuCiAgKiBwcmVzZW50X3BhcnRzCQkJCUEgQml0bWFwc2V0IG9mIHRo ZSBwYXJ0aXRpb24gaW5kZXhlcyB0aGF0IHdlCiAgKgkJCQkJCQkJaGF2ZSBzdWJwbGFucyBvciBz dWJwYXJ0cyBmb3IuCiAgKiBpbml0aWFsX3BydW5pbmdfc3RlcHMJCUxpc3Qgb2YgUGFydGl0aW9u UHJ1bmVTdGVwcyB1c2VkIHRvCkBAIC02MSw2ICs2Miw3IEBAIHR5cGVkZWYgc3RydWN0IFBhcnRp dGlvbmVkUmVsUHJ1bmluZ0RhdGEKIAlpbnQJCQlucGFydHM7CiAJaW50CQkgICAqc3VicGxhbl9t YXA7CiAJaW50CQkgICAqc3VicGFydF9tYXA7CisJSW5kZXgJICAgKnJ0aV9tYXA7CiAJQml0bWFw c2V0ICAqcHJlc2VudF9wYXJ0czsKIAlMaXN0CSAgICppbml0aWFsX3BydW5pbmdfc3RlcHM7CiAJ TGlzdAkgICAqZXhlY19wcnVuaW5nX3N0ZXBzOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9k ZXMvbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKaW5kZXggMWYzMzkwMjk0Ny4u YzJmMjU0NGRmNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCkBAIC0yMTgsNiArMjE4LDcgQEAgZXh0ZXJuIHN0cnVj dCBCaXRtYXBzZXQgKnJlYWRCaXRtYXBzZXQodm9pZCk7CiBleHRlcm4gdWludHB0cl90IHJlYWRE YXR1bShib29sIHR5cGJ5dmFsKTsKIGV4dGVybiBib29sICpyZWFkQm9vbENvbHMoaW50IG51bUNv bHMpOwogZXh0ZXJuIGludCAqcmVhZEludENvbHMoaW50IG51bUNvbHMpOworZXh0ZXJuIEluZGV4 ICpyZWFkSW5kZXhDb2xzKGludCBudW1Db2xzKTsKIGV4dGVybiBPaWQgKnJlYWRPaWRDb2xzKGlu dCBudW1Db2xzKTsKIGV4dGVybiBpbnQxNiAqcmVhZEF0dHJOdW1iZXJDb2xzKGludCBudW1Db2xz KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5j bHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCA2NTRkYmE2MWFhLi40MzM3ZTdhYTM0IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaApAQCAtMTI4LDYgKzEyOCwxNyBAQCB0eXBlZGVmIHN0cnVjdCBQbGFu bmVyR2xvYmFsCiAJLyogTGlzdCBvZiBQYXJ0aXRpb25QcnVuZUluZm8gY29udGFpbmVkIGluIHRo ZSBwbGFuICovCiAJTGlzdAkgICAqcGFydFBydW5lSW5mb3M7CiAKKwkvKgorCSAqIERvIGFueSBv ZiB0aG9zZSBQYXJ0aXRpb25QcnVuZUluZm9zIGhhdmUgaW5pdGlhbCBwcnVuaW5nIHN0ZXBzIGlu IHRoZW0/CisJICovCisJYm9vbAkJY29udGFpbnNJbml0aWFsUHJ1bmluZzsKKworCS8qCisJICog SW5kZXhlcyBvZiBhbGwgcmFuZ2UgdGFibGUgZW50cmllczsgZm9yIEFjcXVpcmVFeGVjdXRvckxv Y2tzKCkncworCSAqIHBlcnVzYWwuCisJICovCisJQml0bWFwc2V0ICAqbWluTG9ja1JlbGlkczsK KwogCS8qIE9JRHMgb2YgcmVsYXRpb25zIHRoZSBwbGFuIGRlcGVuZHMgb24gKi8KIAlMaXN0CSAg ICpyZWxhdGlvbk9pZHM7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggYmRkZmU4NjE5MS4uZWIw YTAwNzk0NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTczLDExICs3MywxOCBAQCB0eXBlZGVm IHN0cnVjdCBQbGFubmVkU3RtdAogCUxpc3QJICAgKnBhcnRQcnVuZUluZm9zOyAvKiBMaXN0IG9m IFBhcnRpdGlvblBydW5lSW5mbyBjb250YWluZWQgaW4gdGhlCiAJCQkJCQkJCSAqIHBsYW4gKi8K IAorCWJvb2wJCWNvbnRhaW5zSW5pdGlhbFBydW5pbmc7CS8qIERvIGFueSBvZiB0aG9zZSBQYXJ0 aXRpb25QcnVuZUluZm9zCisJCQkJCQkJCQkJICogaGF2ZSBpbml0aWFsIHBydW5pbmcgc3RlcHMg aW4gdGhlbT8KKwkJCQkJCQkJCQkgKi8KKwogCUxpc3QJICAgKnJ0YWJsZTsJCQkvKiBsaXN0IG9m IFJhbmdlVGJsRW50cnkgbm9kZXMgKi8KIAogCUxpc3QJICAgKnBlcm1JbmZvczsJCS8qIGxpc3Qg b2YgUlRFUGVybWlzc2lvbkluZm8gbm9kZXMgZm9yIHJ0YWJsZQogCQkJCQkJCQkgKiBlbnRyaWVz IG5lZWRpbmcgb25lICovCiAKKwlCaXRtYXBzZXQgICptaW5Mb2NrUmVsaWRzOwkvKiBJbmRleGVz IG9mIGFsbCByYW5nZSB0YWJsZSBlbnRyaWVzOyBmb3IKKwkJCQkJCQkJICogQWNxdWlyZUV4ZWN1 dG9yTG9ja3MoKSdzIHBlcnVzYWwgKi8KKwogCS8qIHJ0YWJsZSBpbmRleGVzIG9mIHRhcmdldCBy ZWxhdGlvbnMgZm9yIElOU0VSVC9VUERBVEUvREVMRVRFL01FUkdFICovCiAJTGlzdAkgICAqcmVz dWx0UmVsYXRpb25zOwkvKiBpbnRlZ2VyIGxpc3Qgb2YgUlQgaW5kZXhlcywgb3IgTklMICovCiAK QEAgLTE0MTcsNiArMTQyNCwxMyBAQCB0eXBlZGVmIHN0cnVjdCBQbGFuUm93TWFyawogICogcHJ1 bmVfaW5mb3MJCQlMaXN0IG9mIExpc3RzIGNvbnRhaW5pbmcgUGFydGl0aW9uZWRSZWxQcnVuZUlu Zm8gbm9kZXMsCiAgKgkJCQkJCW9uZSBzdWJsaXN0IHBlciBydW4tdGltZS1wcnVuYWJsZSBwYXJ0 aXRpb24gaGllcmFyY2h5CiAgKgkJCQkJCWFwcGVhcmluZyBpbiB0aGUgcGFyZW50IHBsYW4gbm9k ZSdzIHN1YnBsYW5zLgorICoKKyAqIG5lZWRzX2luaXRfcHJ1bmluZwlEb2VzIGFueSBvZiB0aGUg UGFydGl0aW9uZWRSZWxQcnVuZUluZm9zIGluCisgKgkJCQkJCXBydW5lX2luZm9zIGhhdmUgaXRz IGluaXRpYWxfcHJ1bmluZ19zdGVwcyBzZXQ/CisgKgorICogbmVlZHNfZXhlY19wcnVuaW5nCURv ZXMgYW55IG9mIHRoZSBQYXJ0aXRpb25lZFJlbFBydW5lSW5mb3MgaW4KKyAqCQkJCQkJcHJ1bmVf aW5mb3MgaGF2ZSBpdHMgZXhlY19wcnVuaW5nX3N0ZXBzIHNldD8KKyAqCiAgKiBvdGhlcl9zdWJw bGFucwkJSW5kZXhlcyBvZiBhbnkgc3VicGxhbnMgdGhhdCBhcmUgbm90IGFjY291bnRlZCBmb3IK ICAqCQkJCQkJYnkgYW55IG9mIHRoZSBQYXJ0aXRpb25lZFJlbFBydW5lSW5mbyBub2RlcyBpbgog ICoJCQkJCQkicHJ1bmVfaW5mb3MiLiAgVGhlc2Ugc3VicGxhbnMgbXVzdCBub3QgYmUgcHJ1bmVk LgpAQCAtMTQyOCw2ICsxNDQyLDggQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVJbmZv CiAJTm9kZVRhZwkJdHlwZTsKIAlCaXRtYXBzZXQgICpyb290X3BhcmVudF9yZWxpZHM7CiAJTGlz dAkgICAqcHJ1bmVfaW5mb3M7CisJYm9vbAkJbmVlZHNfaW5pdF9wcnVuaW5nOworCWJvb2wJCW5l ZWRzX2V4ZWNfcHJ1bmluZzsKIAlCaXRtYXBzZXQgICpvdGhlcl9zdWJwbGFuczsKIH0gUGFydGl0 aW9uUHJ1bmVJbmZvOwogCkBAIC0xNDcyLDYgKzE0ODgsOSBAQCB0eXBlZGVmIHN0cnVjdCBQYXJ0 aXRpb25lZFJlbFBydW5lSW5mbwogCS8qIHJlbGF0aW9uIE9JRCBieSBwYXJ0aXRpb24gaW5kZXgs IG9yIDAgKi8KIAlPaWQJCSAgICpyZWxpZF9tYXAgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnBh cnRzKSk7CiAKKwkvKiBSYW5nZSB0YWJsZSBpbmRleCBieSBwYXJ0aXRpb24gaW5kZXgsIG9yIDAu ICovCisJSW5kZXgJICAgKnJ0aV9tYXAgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnBhcnRzKSk7 CisKIAkvKgogCSAqIGluaXRpYWxfcHJ1bmluZ19zdGVwcyBzaG93cyBob3cgdG8gcHJ1bmUgZHVy aW5nIGV4ZWN1dG9yIHN0YXJ0dXAgKGkuZS4sCiAJICogd2l0aG91dCB1c2Ugb2YgYW55IFBBUkFN X0VYRUMgUGFyYW1zKTsgaXQgaXMgTklMIGlmIG5vIHN0YXJ0dXAgcHJ1bmluZwotLSAKMi4zNS4z Cgo= --0000000000008169b005efc5a018 Content-Type: application/octet-stream; name="v29-0002-In-GetCachedPlan-only-lock-unpruned-partitions.patch" Content-Disposition: attachment; filename="v29-0002-In-GetCachedPlan-only-lock-unpruned-partitions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbne4ekk1 RnJvbSA2OTg1NWZmZmFjZjY5NTc1NDcxYmViNjlkYTc2MWJhYmFkYzlmNzVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMiBEZWMgMjAyMSAxNjo1NToxNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjI5IDIv Ml0gSW4gR2V0Q2FjaGVkUGxhbigpLCBvbmx5IGxvY2sgdW5wcnVuZWQgcGFydGl0aW9ucwoKVGhp cyBkb2VzIHR3byB0aGluZ3MgbWFpbmx5OgoKKiBUaGUgcGxhbm5lciBub3cgcmVtb3ZlcyB0aGUg UlQgaW5kZXhlcyBvZiAiaW5pdGlhbGx5IHBydW5hYmxlIgpwYXJ0aXRpb25zIGZyb20gUGxhbm5l ZFN0bXQubWluTG9ja1JlbGlkcyBzdWNoIHRoYXQgdGhlIHNldCBvbmx5CmNvbnRhaW5zIHRoZSBy ZWxhdGlvbnMgbm90IHN1YmplY3QgdG8gaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmluZy4gIFNvLApB Y3F1aXJlRXhlY3V0b3JMb2NrcyBvbmx5IGxvY2tzIGEgc3Vic2V0IG9mIHRoZSByZWxhdGlvbnMg Y29udGFpbmVkCmluIGEgcGxhbiwgZGVmZXJyaW5nIHRoZSBsb2NraW5nIG9mIHBydW5hYmxlIHJl bGF0aW9ucyB0byB0aGUgY2FsbGVyLgoKKiBHZXRDYWNoZWRQbGFucygpLCBpZiB0aGVyZSBhcmUg cHJ1bmFibGUgcmVsYXRpb25zIGluIHRoZSBwbGFuLApwZXJmb3JtcyB0aGUgaW5pdGlhbCBwYXJ0 aXRpb24gcHJ1bmluZyB1c2luZyBhdmFpbGFibGUgRVhURVJOIHBhcmFtcwphbmQgbG9ja3MgdGhl IHBhcnRpdGlvbnMgcmVtYWluaW5nIGFmdGVyIHRoYXQsIHNvIHRoZSB0aGUgQ2FjaGVkUGxhbgp0 aGF0J3MgcmV0dXJuZWQgaXMgdmFsaWQgaW4gYSByYWNlLWZyZWUgbWFubmVyIGluY2x1ZGluZyBm b3IgYW55CnBhcnRpdGlvbnMgdGhhdCB3aWxsIGJlIHNjYW5uZWQgZHVyaW5nIGV4ZWN1dGlvbi4K ClRvIG1ha2UgdGhlIHBydW5pbmcgcG9zc2libGUgYmVmb3JlIGVudGVyaW5nIEV4ZWN1dG9yU3Rh cnQoKSwgdGhpcwphbHNvIGFkZHMgYSBFeGVjUGFydGl0aW9uRG9Jbml0aWFsUHJ1bmluZygpLCB3 aGljaCBjYW4gYmUgY2FsbGVkIGJ5CkdldENhY2hlZFBsYW4oKSBmb3IgYSBnaXZlbiBQbGFubmVk U3RtdC4KClRoZSByZXN1bHQgb2YgcGVyZm9ybWluZyBpbml0aWFsIHBhcnRpdGlvbiBwcnVuaW5n IHRoaXMgd2F5IGlzIG1hZGUKYXZhaWxhYmxlIHRvIHRoZSBhY3R1YWwgZXhlY3V0aW9uIHZpYSBQ YXJ0aXRpb25QcnVuZVJlc3VsdCwgb2Ygd2hpY2gKdGhlcmUgaXMgb25lIGZvciBldmVyeSBQYXJ0 dGlvblBydW5lSW5mbyBjb250YWluZWQgaW4gdGhlIFBsYW5uZWRTdG10LgpMaXN0IG9mIFBhcnRp dGlvblBydW5lUmVzdWx0IGZvciBhIGdpdmVuIFBsYW5uZWRTdG10IGFyZSByZXR1cm5lZCB0bwp0 byB0aGUgY2FsbGVycyBvZiBHZXRDYWNoZWRQbGFuKCkgdmlhIGl0cyBuZXcgb3V0cHV0IHBhcmFt ZXRlciBvZiB0eXBlCkNhY2hlZFBsYW5FeHRyYSwgd2hvc2UgbWVtYmVycyBjdXJyZW50bHkgb25s eSBpbmNsdWRlIHNhaWQgTGlzdC4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYyAg ICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyAgICAgICAg fCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgIHwgICA3ICst CiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYyAgICAgICB8ICAgMiArLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvbWF0dmlldy5jICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL3ByZXBhcmUuYyAgICAgICAgIHwgIDI4ICsrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv UkVBRE1FICAgICAgICAgICAgfCAgMzEgKystCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFp bi5jICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyAg ICB8ICAyNSArKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyAgIHwgMjE1 ICsrKysrKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMg ICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMgICAgICAgfCAg IDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyAgICAgIHwgIDExICstCiBz cmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyB8ICAgNSArLQogc3JjL2JhY2tl bmQvZXhlY3V0b3Ivc3BpLmMgICAgICAgICAgICAgfCAgMzEgKystCiBzcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9zZXRyZWZzLmMgICB8ICAzNiArKysrCiBzcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMgICAgICAgICAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYyAgICAg ICAgICAgICAgfCAgMjggKystCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyAg ICB8IDI1NyArKysrKysrKysrKysrKysrKysrKysrKy0tCiBzcmMvYmFja2VuZC91dGlscy9tbWdy L3BvcnRhbG1lbS5jICAgICB8ICAxNiArKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5o ICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCAg IHwgICA3ICstCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oICAgICAgICB8ICAgMyAr CiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICB8ICAgMSArCiBzcmMvaW5j bHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvbm9k ZXMvcGxhbm5vZGVzLmggICAgICAgICAgfCAgMzEgKystCiBzcmMvaW5jbHVkZS91dGlscy9wbGFu Y2FjaGUuaCAgICAgICAgICB8ICAxMSArLQogc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmggICAg ICAgICAgICAgfCAgIDMgKwogMjggZmlsZXMgY2hhbmdlZCwgNjk0IGluc2VydGlvbnMoKyksIDgy IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKaW5kZXggZjI2Y2MwZDE2Mi4uNDAxYTIy ODBhMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKQEAgLTU1OCw3ICs1NTgsNyBAQCBCZWdpbkNvcHlU byhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCSgoRFJfY29weSAqKSBkZXN0KS0+Y3N0YXRlID0gY3N0 YXRlOwogCiAJCS8qIENyZWF0ZSBhIFF1ZXJ5RGVzYyByZXF1ZXN0aW5nIG5vIG91dHB1dCAqLwot CQljc3RhdGUtPnF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBwc3RhdGUtPnBfc291 cmNldGV4dCwKKwkJY3N0YXRlLT5xdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgTklM LCBwc3RhdGUtPnBfc291cmNldGV4dCwKIAkJCQkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwK IAkJCQkJCQkJCQkJSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQkJCQlkZXN0LCBOVUxMLCBOVUxM LCAwKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCmluZGV4IDE1MmMyOWI1NTEuLjk0MjQ0OTU0NGMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYwpAQCAtMzI1LDcgKzMyNSw3IEBAIEV4ZWNDcmVhdGVU YWJsZUFzKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlVGFibGVBc1N0bXQgKnN0bXQsCiAJCVVw ZGF0ZUFjdGl2ZVNuYXBzaG90Q29tbWFuZElkKCk7CiAKIAkJLyogQ3JlYXRlIGEgUXVlcnlEZXNj LCByZWRpcmVjdGluZyBvdXRwdXQgdG8gb3VyIHR1cGxlIHJlY2VpdmVyICovCi0JCXF1ZXJ5RGVz YyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBwc3RhdGUtPnBfc291cmNldGV4dCwKKwkJcXVlcnlE ZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIE5JTCwgcHN0YXRlLT5wX3NvdXJjZXRleHQsCiAJ CQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCQlk ZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCAwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGY4 Njk4M2M2NjAuLjJmMmI1NTg2MDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4 cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTQwNyw3ICs0 MDcsNyBAQCBFeHBsYWluT25lUXVlcnkoUXVlcnkgKnF1ZXJ5LCBpbnQgY3Vyc29yT3B0aW9ucywK IAkJfQogCiAJCS8qIHJ1biBpdCAoaWYgbmVlZGVkKSBhbmQgcHJvZHVjZSBvdXRwdXQgKi8KLQkJ RXhwbGFpbk9uZVBsYW4ocGxhbiwgaW50bywgZXMsIHF1ZXJ5U3RyaW5nLCBwYXJhbXMsIHF1ZXJ5 RW52LAorCQlFeHBsYWluT25lUGxhbihwbGFuLCBOSUwsIGludG8sIGVzLCBxdWVyeVN0cmluZywg cGFyYW1zLCBxdWVyeUVudiwKIAkJCQkJICAgJnBsYW5kdXJhdGlvbiwgKGVzLT5idWZmZXJzID8g JmJ1ZnVzYWdlIDogTlVMTCkpOwogCX0KIH0KQEAgLTUxNSw3ICs1MTUsOCBAQCBFeHBsYWluT25l VXRpbGl0eShOb2RlICp1dGlsaXR5U3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRl ICplcywKICAqIHRvIGNhbGwgaXQuCiAgKi8KIHZvaWQKLUV4cGxhaW5PbmVQbGFuKFBsYW5uZWRT dG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKK0V4 cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgTGlzdCAqcGFydF9wcnVuZV9y ZXN1bHRzLAorCQkJICAgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAkJCSAg IGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLCBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCSAgIFF1 ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LCBjb25zdCBpbnN0cl90aW1lICpwbGFuZHVyYXRpb24s CiAJCQkgICBjb25zdCBCdWZmZXJVc2FnZSAqYnVmdXNhZ2UpCkBAIC01NjMsNyArNTY0LDcgQEAg RXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRv LCBFeHBsYWluU3RhdGUgKmVzLAogCQlkZXN0ID0gTm9uZV9SZWNlaXZlcjsKIAogCS8qIENyZWF0 ZSBhIFF1ZXJ5RGVzYyBmb3IgdGhlIHF1ZXJ5ICovCi0JcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlE ZXNjKHBsYW5uZWRzdG10LCBxdWVyeVN0cmluZywKKwlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURl c2MocGxhbm5lZHN0bXQsIHBhcnRfcHJ1bmVfcmVzdWx0cywgcXVlcnlTdHJpbmcsCiAJCQkJCQkJ CUdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCQkJZGVzdCwgcGFy YW1zLCBxdWVyeUVudiwgaW5zdHJ1bWVudF9vcHRpb24pOwogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9leHRlbnNpb24uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lv bi5jCmluZGV4IGNmMWIxY2E1NzEuLjkwNGNiY2JhNGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V4dGVuc2lvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lv bi5jCkBAIC03NzksNyArNzc5LDcgQEAgZXhlY3V0ZV9zcWxfc3RyaW5nKGNvbnN0IGNoYXIgKnNx bCkKIAkJCXsKIAkJCQlRdWVyeURlc2MgICpxZGVzYzsKIAotCQkJCXFkZXNjID0gQ3JlYXRlUXVl cnlEZXNjKHN0bXQsCisJCQkJcWRlc2MgPSBDcmVhdGVRdWVyeURlc2Moc3RtdCwgTklMLAogCQkJ CQkJCQkJCXNxbCwKIAkJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLCBOVUxMLAogCQkJCQkJ CQkJCWRlc3QsIE5VTEwsIE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvbWF0dmlldy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCmluZGV4IDlhYzAz ODM0NTkuLjY1YzhkMGFhNTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZp ZXcuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKQEAgLTQwOCw3ICs0MDgs NyBAQCByZWZyZXNoX21hdHZpZXdfZGF0YWZpbGwoRGVzdFJlY2VpdmVyICpkZXN0LCBRdWVyeSAq cXVlcnksCiAJVXBkYXRlQWN0aXZlU25hcHNob3RDb21tYW5kSWQoKTsKIAogCS8qIENyZWF0ZSBh IFF1ZXJ5RGVzYywgcmVkaXJlY3Rpbmcgb3V0cHV0IHRvIG91ciB0dXBsZSByZWNlaXZlciAqLwot CXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBxdWVyeVN0cmluZywKKwlxdWVyeURl c2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgTklMLCBxdWVyeVN0cmluZywKIAkJCQkJCQkJR2V0 QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQlkZXN0LCBOVUxMLCBO VUxMLCAwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCmluZGV4IDllMjk1ODRkOTMuLjcyOTM4NGE5 YTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMKQEAgLTE1NCw2ICsxNTQsNyBAQCBFeGVjdXRlUXVl cnkoUGFyc2VTdGF0ZSAqcHN0YXRlLAogewogCVByZXBhcmVkU3RhdGVtZW50ICplbnRyeTsKIAlD YWNoZWRQbGFuICpjcGxhbjsKKwlDYWNoZWRQbGFuRXh0cmEgKmNwbGFuX2V4dHJhID0gTlVMTDsK IAlMaXN0CSAgICpwbGFuX2xpc3Q7CiAJUGFyYW1MaXN0SW5mbyBwYXJhbUxJID0gTlVMTDsKIAlF U3RhdGUJICAgKmVzdGF0ZSA9IE5VTEw7CkBAIC0xOTMsNyArMTk0LDExIEBAIEV4ZWN1dGVRdWVy eShQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJCQkgICBlbnRyeS0+cGxhbnNvdXJjZS0+cXVl cnlfc3RyaW5nKTsKIAogCS8qIFJlcGxhbiBpZiBuZWVkZWQsIGFuZCBpbmNyZW1lbnQgcGxhbiBy ZWZjb3VudCBmb3IgcG9ydGFsICovCi0JY3BsYW4gPSBHZXRDYWNoZWRQbGFuKGVudHJ5LT5wbGFu c291cmNlLCBwYXJhbUxJLCBOVUxMLCBOVUxMKTsKKwljcGxhbiA9IEdldENhY2hlZFBsYW4oZW50 cnktPnBsYW5zb3VyY2UsIHBhcmFtTEksIE5VTEwsIE5VTEwsCisJCQkJCQkgICZjcGxhbl9leHRy YSk7CisJQXNzZXJ0KGNwbGFuX2V4dHJhID09IE5VTEwgfHwKKwkJICAgKGxpc3RfbGVuZ3RoKGNw bGFuLT5zdG10X2xpc3QpID09CisJCQlsaXN0X2xlbmd0aChjcGxhbl9leHRyYS0+cGFydF9wcnVu ZV9yZXN1bHRzX2xpc3QpKSk7CiAJcGxhbl9saXN0ID0gY3BsYW4tPnN0bXRfbGlzdDsKIAogCS8q CkBAIC0yMDcsNiArMjEyLDkgQEAgRXhlY3V0ZVF1ZXJ5KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJ CQkJICBwbGFuX2xpc3QsCiAJCQkJCSAgY3BsYW4pOwogCisJaWYgKGNwbGFuX2V4dHJhKQorCQlQ b3J0YWxTYXZlQ2FjaGVkUGxhbkV4dHJhKHBvcnRhbCwgY3BsYW5fZXh0cmEpOworCiAJLyoKIAkg KiBGb3IgQ1JFQVRFIFRBQkxFIC4uLiBBUyBFWEVDVVRFLCB3ZSBtdXN0IHZlcmlmeSB0aGF0IHRo ZSBwcmVwYXJlZAogCSAqIHN0YXRlbWVudCBpcyBvbmUgdGhhdCBwcm9kdWNlcyB0dXBsZXMuICBD dXJyZW50bHkgd2UgaW5zaXN0IHRoYXQgaXQgYmUKQEAgLTU3NSw2ICs1ODMsNyBAQCBFeHBsYWlu RXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhw bGFpblN0YXRlICplcywKIAlQcmVwYXJlZFN0YXRlbWVudCAqZW50cnk7CiAJY29uc3QgY2hhciAq cXVlcnlfc3RyaW5nOwogCUNhY2hlZFBsYW4gKmNwbGFuOworCUNhY2hlZFBsYW5FeHRyYSAqY3Bs YW5fZXh0cmEgPSBOVUxMOwogCUxpc3QJICAgKnBsYW5fbGlzdDsKIAlMaXN0Q2VsbCAgICpwOwog CVBhcmFtTGlzdEluZm8gcGFyYW1MSSA9IE5VTEw7CkBAIC02MTksNyArNjI4LDExIEBAIEV4cGxh aW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0bXQgKmV4ZWNzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBF eHBsYWluU3RhdGUgKmVzLAogCiAJLyogUmVwbGFuIGlmIG5lZWRlZCwgYW5kIGFjcXVpcmUgYSB0 cmFuc2llbnQgcmVmY291bnQgKi8KIAljcGxhbiA9IEdldENhY2hlZFBsYW4oZW50cnktPnBsYW5z b3VyY2UsIHBhcmFtTEksCi0JCQkJCQkgIEN1cnJlbnRSZXNvdXJjZU93bmVyLCBxdWVyeUVudik7 CisJCQkJCQkgIEN1cnJlbnRSZXNvdXJjZU93bmVyLCBxdWVyeUVudiwKKwkJCQkJCSAgJmNwbGFu X2V4dHJhKTsKKwlBc3NlcnQoY3BsYW5fZXh0cmEgPT0gTlVMTCB8fAorCQkgICAobGlzdF9sZW5n dGgoY3BsYW4tPnN0bXRfbGlzdCkgPT0KKwkJCWxpc3RfbGVuZ3RoKGNwbGFuX2V4dHJhLT5wYXJ0 X3BydW5lX3Jlc3VsdHNfbGlzdCkpKTsKIAogCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQocGxhbmR1 cmF0aW9uKTsKIAlJTlNUUl9USU1FX1NVQlRSQUNUKHBsYW5kdXJhdGlvbiwgcGxhbnN0YXJ0KTsK QEAgLTYzNywxMCArNjUwLDE3IEBAIEV4cGxhaW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0bXQgKmV4 ZWNzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCWZvcmVhY2gocCwg cGxhbl9saXN0KQogCXsKIAkJUGxhbm5lZFN0bXQgKnBzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5l ZFN0bXQsIHApOworCQlMaXN0ICpwYXJ0X3BydW5lX3Jlc3VsdHMgPSBOSUw7CisKKwkJaWYgKGNw bGFuX2V4dHJhKQorCQkJcGFydF9wcnVuZV9yZXN1bHRzID0gbGlzdF9udGhfbm9kZShMaXN0LAor CQkJCQkJCQkJCQkgICBjcGxhbl9leHRyYS0+cGFydF9wcnVuZV9yZXN1bHRzX2xpc3QsCisJCQkJ CQkJCQkJCSAgIGZvcmVhY2hfY3VycmVudF9pbmRleChwKSk7CiAKIAkJaWYgKHBzdG10LT5jb21t YW5kVHlwZSAhPSBDTURfVVRJTElUWSkKLQkJCUV4cGxhaW5PbmVQbGFuKHBzdG10LCBpbnRvLCBl cywgcXVlcnlfc3RyaW5nLCBwYXJhbUxJLCBxdWVyeUVudiwKLQkJCQkJCSAgICZwbGFuZHVyYXRp b24sIChlcy0+YnVmZmVycyA/ICZidWZ1c2FnZSA6IE5VTEwpKTsKKwkJCUV4cGxhaW5PbmVQbGFu KHBzdG10LCBwYXJ0X3BydW5lX3Jlc3VsdHMsIGludG8sIGVzLCBxdWVyeV9zdHJpbmcsCisJCQkJ CQkgICBwYXJhbUxJLCBxdWVyeUVudiwgJnBsYW5kdXJhdGlvbiwKKwkJCQkJCSAgIChlcy0+YnVm ZmVycyA/ICZidWZ1c2FnZSA6IE5VTEwpKTsKIAkJZWxzZQogCQkJRXhwbGFpbk9uZVV0aWxpdHko cHN0bXQtPnV0aWxpdHlTdG10LCBpbnRvLCBlcywgcXVlcnlfc3RyaW5nLAogCQkJCQkJCSAgcGFy YW1MSSwgcXVlcnlFbnYpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvUkVBRE1F IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvUkVBRE1FCmluZGV4IDE3Nzc1YTQ5ZTIuLjIyMjJiM2Vk NmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRQorKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9SRUFETUUKQEAgLTYzLDcgKzYzLDM2IEBAIGlmIHRoZSBleGVjdXRvciBk ZXRlcm1pbmVzIHRoYXQgYW4gZW50aXJlIHN1YnBsYW4gaXMgbm90IHJlcXVpcmVkIGR1ZSB0bwog ZXhlY3V0aW9uIHRpbWUgcGFydGl0aW9uIHBydW5pbmcgZGV0ZXJtaW5pbmcgdGhhdCBubyBtYXRj aGluZyByZWNvcmRzIHdpbGwgYmUKIGZvdW5kIHRoZXJlLiAgVGhpcyBjdXJyZW50bHkgb25seSBv Y2N1cnMgZm9yIEFwcGVuZCBhbmQgTWVyZ2VBcHBlbmQgbm9kZXMuICBJbgogdGhpcyBjYXNlIHRo ZSBub24tcmVxdWlyZWQgc3VicGxhbnMgYXJlIGlnbm9yZWQgYW5kIHRoZSBleGVjdXRvciBzdGF0 ZSdzCi1zdWJub2RlIGFycmF5IHdpbGwgYmVjb21lIG91dCBvZiBzZXF1ZW5jZSB0byB0aGUgcGxh bidzIHN1YnBsYW4gbGlzdC4KK3N1Ym5vZGUgYXJyYXkgd2lsbCBiZWNvbWUgb3V0IG9mIHNlcXVl bmNlIHRvIHRoZSBwbGFuJ3Mgc3VicGxhbiBsaXN0LiAgTm90ZQordGhhdCB0aGlzIGlzIHJlZmVy cmVkIHRvIGFzICJpbml0aWFsIiBwcnVuaW5nLCBiZWNhdXNlIGl0IG5lZWRzIHRvIG9jY3VyIG9u bHkKK29uY2UgZHVyaW5nIHRoZSBleGVjdXRpb24gc3RhcnR1cCwgYW5kIHVzZXMgYSBzZXQgb2Yg cHJ1bmluZyBzdGVwcyBjYWxsZWQKK2luaXRpYWwgcHJ1bmluZyBzdGVwcyAoc2VlIFBhcnRpdGlv bmVkUmVsUHJ1bmVJbmZvLmluaXRpYWxfcHJ1bmluZ19zdGVwcykuCisKK0FjdHVhbGx5LCAiaW5p dGlhbCIgcHJ1bmluZyBtYXkgb2NjdXIgZXZlbiBiZWZvcmUgdGhlIGV4ZWN1dGlvbiBzdGFydHVw IGluCitpbiBzb21lIGNhc2VzLiAgRm9yIGV4YW1wbGUsIHdoZW4gYSBjYWNoZWQgZ2VuZXJpYyBw bGFuIGlzIHZhbGlkYXRlZCBmb3IKK2V4ZWN1dGlvbiwgd2hpY2ggd29ya3MgYnkgbG9ja2luZyBh bGwgdGhlIHJlbGF0aW9ucyB0aGF0IHdpbGwgYmUgc2Nhbm5lZCBieQordGhhdCBwbGFuIGR1cmlu ZyBleGVjdXRpb24uICBJZiB0aGUgZ2VuZXJpYyBwbGFuIGNvbnRhaW5zIHBsYW4gbm9kZXMgdGhh dCBoYXZlCitwcnVuYWJsZSBjaGlsZCBzdWJub2RlcywgdGhlbiB0aGlzIHZhbGlkYXRpb24gbG9j a2luZyBpcyBwZXJmb3JtZWQgYWZ0ZXIKK3BydW5pbmcgY2hpbGQgc3Vibm9kZXMgdGhhdCBuZWVk IG5vdCBiZSBzY2FubmVkIGR1cmluZyBleGVjdXRpb24sIHRoYXQgaXMsCit1c2luZyBpbml0aWFs IHBydW5pbmcgc3RlcHMuICBXaGVuIHN1Y2ggYSBnZW5lcmljIHBsYW4gaXMgZm9yd2FyZGVkIGZv cgorZXhlY3V0aW9uLCBpdCBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBzZXQgb2YgUGFydGl0 aW9uUHJ1bmVSZXN1bHQgbm9kZXMgdGhhdAorY29udGFpbiB0aGUgcmVzdWx0IG9mIHRoYXQgcHJ1 bmluZywgd2hpY2ggYmFzaWNhbGx5IGNvbnNpc3RzIG9mIGEgYml0bWFwc2V0IG9mCitjaGlsZCBz dWJub2RlIGluZGV4ZXMgdGhhdCBzdXJ2aXZlZCB0aGUgcHJ1bmluZyBhbmQgdGh1cyB3aG9zZSBy ZWxhdGlvbnMgd291bGQKK2hhdmUgYmVlbiBsb2NrZWQgZm9yIGV4ZWN1dGlvbi4gIFRoaXMgaXMg aW1wb3J0YW50LCBiZWNhdXNlLCB1bmxpa2UgdGhlCitwbGFuLXRpbWUgcHJ1bmluZyBhbmQgYWN0 dWFsIGV4ZWN1dG9yLXN0YXJ0dXAgcHJ1bmluZywgdGhpcyBkb2VzIG5vdCBhY3R1YWxseQorcmVt b3ZlIHRoZSBwcnVuZWQgc3Vibm9kZXMgZnJvbSB0aGUgcGxhbiB0cmVlLCBidXQgb25seSBtYXJr cyB0aGVtIGFzIGJlaW5nCitwcnVuZWQuICBTbywgdGhlIGV4ZWN1dG9yIGNvZGUgKGNvcmUgb3Ig dGhpcmQgcGFydHkpLCBlc3BlY2lhbGx5IG9uZSB0aGF0IHJ1bnMKK2JlZm9yZSBFeGVjdXRvclN0 YXJ0KCkgYW5kIHRodXMgbG9va3MgYXQgYmFyZSBQbGFuIHRyZWVzIChub3QgUGxhblN0YXRlIHRy ZWVzKQorbXVzdCBiZXdhcmUgb2YgcGxhbiBub2RlcyB0aGF0IG1heSBhY3R1YWxseSBoYXZlIGJl ZW4gcHJ1bmVkIGFuZCB0aHVzIHN1YmplY3QKK3RvIGJlaW5nIGludmFsaWRhdGVkIGJ5IGNvbmN1 cnJlbnQgc2NoZW1hIGNoYW5nZXMuICBGb3IgcGxhbiBub2RlcyB0aGF0IGNhbgoraGF2ZSBwcnVu YWJsZSBjaGlsZCBzdWJub2RlcyBhbmQgdGh1cyBjb250YWluIGEgUGFydGl0aW9uUHJ1bmVJbmZv LCBzdWNoIGNvZGUKK211c3QgYWx3YXlzIGNoZWNrIGlmIHRoZSBjb3JyZXNwb25kaW5nIFBhcnRp dGlvblBydW5lUmVzdWx0IGV4aXN0cworaW4gRVN0YXRlLmVzX3BhcnRfcHJ1bmVfcmVzdWx0cyBh dCBnaXZlbiBwYXJ0X3BydW5lX2luZGV4IGFuZCB1c2UgdGhhdCB0bworZGVjaWRlIHdoaWNoIHN1 YnBsYW5zIGFyZSB2YWxpZCBmb3IgZXhlY3V0aW9uIGluc3RlYWQgb2YgcmVkb2luZyB0aGUgcHJ1 bmluZy4KK05vdGUgdGhhdCB0aGF0IGlzIG5vdCBqdXN0IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0 aW9uIGJ1dCBhbHNvIG5lY2Vzc2FyeSB0bworYXZvaWQgcG9zc2libHkgZW5kaW5nIHVwIGNvbnNp ZGVyaW5nIGEgZGlmZmVyZW50IHNldCBvZiBjaGlsZCBzdWJub2RlcyBhcyB2YWxpZAordGhhbiB0 aGUgc2V0IENhY2hlZFBsYW5Mb2NrUGFydGl0aW9ucygpIHdvdWxkIGhhdmUgbG9ja2VkIHRoZSBy ZWxhdGlvbnMgb2YsIGlmCit0aGUgcHJ1bmluZyBzdGVwcyBwcm9kdWNlIGEgZGlmZmVyZW50IHJl c3VsdCB3aGVuIGV4ZWN1dGVkIG11bHRpcGxlIHRpbWVzLgogCiBFYWNoIFBsYW4gbm9kZSBtYXkg aGF2ZSBleHByZXNzaW9uIHRyZWVzIGFzc29jaWF0ZWQgd2l0aCBpdCwgdG8gcmVwcmVzZW50CiBp dHMgdGFyZ2V0IGxpc3QsIHF1YWxpZmljYXRpb24gY29uZGl0aW9ucywgZXRjLiAgVGhlc2UgdHJl ZXMgYXJlIGFsc28KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCmluZGV4IDJjMmIzYTg4NzQuLjIyOWY2 MWY3MmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYwpAQCAtNzk4LDYgKzc5OCw3IEBAIEluaXRQ bGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogewogCUNtZFR5cGUJCW9wZXJh dGlvbiA9IHF1ZXJ5RGVzYy0+b3BlcmF0aW9uOwogCVBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCA9 IHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQ7CisJTGlzdAkgICAqcGFydF9wcnVuZV9yZXN1bHRzID0g cXVlcnlEZXNjLT5wYXJ0X3BydW5lX3Jlc3VsdHM7CiAJUGxhbgkgICAqcGxhbiA9IHBsYW5uZWRz dG10LT5wbGFuVHJlZTsKIAlMaXN0CSAgICpyYW5nZVRhYmxlID0gcGxhbm5lZHN0bXQtPnJ0YWJs ZTsKIAlFU3RhdGUJICAgKmVzdGF0ZSA9IHF1ZXJ5RGVzYy0+ZXN0YXRlOwpAQCAtODE5LDYgKzgy MCw3IEBAIEluaXRQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCiAJZXN0 YXRlLT5lc19wbGFubmVkc3RtdCA9IHBsYW5uZWRzdG10OwogCWVzdGF0ZS0+ZXNfcGFydF9wcnVu ZV9pbmZvcyA9IHBsYW5uZWRzdG10LT5wYXJ0UHJ1bmVJbmZvczsKKwllc3RhdGUtPmVzX3BhcnRf cHJ1bmVfcmVzdWx0cyA9IHBhcnRfcHJ1bmVfcmVzdWx0czsKIAogCS8qCiAJICogTmV4dCwgYnVp bGQgdGhlIEV4ZWNSb3dNYXJrIGFycmF5IGZyb20gdGhlIFBsYW5Sb3dNYXJrKHMpLCBpZiBhbnku CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCmluZGV4IDY1YzRiNjNiYmQuLjk3NDVlYmEw YWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCkBAIC02Niw2ICs2Niw3IEBACiAj ZGVmaW5lIFBBUkFMTEVMX0tFWV9RVUVSWV9URVhUCQlVSU5UNjRDT05TVCgweEUwMDAwMDAwMDAw MDAwMDgpCiAjZGVmaW5lIFBBUkFMTEVMX0tFWV9KSVRfSU5TVFJVTUVOVEFUSU9OIFVJTlQ2NENP TlNUKDB4RTAwMDAwMDAwMDAwMDAwOSkKICNkZWZpbmUgUEFSQUxMRUxfS0VZX1dBTF9VU0FHRQkJ CVVJTlQ2NENPTlNUKDB4RTAwMDAwMDAwMDAwMDAwQSkKKyNkZWZpbmUgUEFSQUxMRUxfS0VZX1BB UlRJVElPTl9QUlVORV9SRVNVTFRTCVVJTlQ2NENPTlNUKDB4RTAwMDAwMDAwMDAwMDAwQikKIAog I2RlZmluZSBQQVJBTExFTF9UVVBMRV9RVUVVRV9TSVpFCQk2NTUzNgogCkBAIC01OTksMTIgKzYw MCwxNSBAQCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRl ICplc3RhdGUsCiAJRml4ZWRQYXJhbGxlbEV4ZWN1dG9yU3RhdGUgKmZwZXM7CiAJY2hhcgkgICAq cHN0bXRfZGF0YTsKIAljaGFyCSAgICpwc3RtdF9zcGFjZTsKKwljaGFyCSAgICpwYXJ0X3BydW5l X3Jlc3VsdHNfZGF0YTsKKwljaGFyCSAgICpwYXJ0X3BydW5lX3Jlc3VsdHNfc3BhY2U7CiAJY2hh cgkgICAqcGFyYW1saXN0aW5mb19zcGFjZTsKIAlCdWZmZXJVc2FnZSAqYnVmdXNhZ2Vfc3BhY2U7 CiAJV2FsVXNhZ2UgICAqd2FsdXNhZ2Vfc3BhY2U7CiAJU2hhcmVkRXhlY3V0b3JJbnN0cnVtZW50 YXRpb24gKmluc3RydW1lbnRhdGlvbiA9IE5VTEw7CiAJU2hhcmVkSml0SW5zdHJ1bWVudGF0aW9u ICpqaXRfaW5zdHJ1bWVudGF0aW9uID0gTlVMTDsKIAlpbnQJCQlwc3RtdF9sZW47CisJaW50CQkJ cGFydF9wcnVuZV9yZXN1bHRzX2xlbjsKIAlpbnQJCQlwYXJhbWxpc3RpbmZvX2xlbjsKIAlpbnQJ CQlpbnN0cnVtZW50YXRpb25fbGVuID0gMDsKIAlpbnQJCQlqaXRfaW5zdHJ1bWVudGF0aW9uX2xl biA9IDA7CkBAIC02MzMsNiArNjM3LDcgQEAgRXhlY0luaXRQYXJhbGxlbFBsYW4oUGxhblN0YXRl ICpwbGFuc3RhdGUsIEVTdGF0ZSAqZXN0YXRlLAogCiAJLyogRml4IHVwIGFuZCBzZXJpYWxpemUg cGxhbiB0byBiZSBzZW50IHRvIHdvcmtlcnMuICovCiAJcHN0bXRfZGF0YSA9IEV4ZWNTZXJpYWxp emVQbGFuKHBsYW5zdGF0ZS0+cGxhbiwgZXN0YXRlKTsKKwlwYXJ0X3BydW5lX3Jlc3VsdHNfZGF0 YSA9IG5vZGVUb1N0cmluZyhlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfcmVzdWx0cyk7CiAKIAkvKiBD cmVhdGUgYSBwYXJhbGxlbCBjb250ZXh0LiAqLwogCXBjeHQgPSBDcmVhdGVQYXJhbGxlbENvbnRl eHQoInBvc3RncmVzIiwgIlBhcmFsbGVsUXVlcnlNYWluIiwgbndvcmtlcnMpOwpAQCAtNjU5LDYg KzY2NCwxMSBAQCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0 YXRlICplc3RhdGUsCiAJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBw c3RtdF9sZW4pOwogCXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsK IAorCS8qIEVzdGltYXRlIHNwYWNlIGZvciBzZXJpYWxpemVkIExpc3Qgb2YgUGFydGl0aW9uUHJ1 bmVSZXN1bHQuICovCisJcGFydF9wcnVuZV9yZXN1bHRzX2xlbiA9IHN0cmxlbihwYXJ0X3BydW5l X3Jlc3VsdHNfZGF0YSkgKyAxOworCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJnBjeHQtPmVzdGlt YXRvciwgcGFydF9wcnVuZV9yZXN1bHRzX2xlbik7CisJc2htX3RvY19lc3RpbWF0ZV9rZXlzKCZw Y3h0LT5lc3RpbWF0b3IsIDEpOworCiAJLyogRXN0aW1hdGUgc3BhY2UgZm9yIHNlcmlhbGl6ZWQg UGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbWxpc3RpbmZvX2xlbiA9IEVzdGltYXRlUGFyYW1MaXN0 U3BhY2UoZXN0YXRlLT5lc19wYXJhbV9saXN0X2luZm8pOwogCXNobV90b2NfZXN0aW1hdGVfY2h1 bmsoJnBjeHQtPmVzdGltYXRvciwgcGFyYW1saXN0aW5mb19sZW4pOwpAQCAtNzUzLDYgKzc2Mywx MiBAQCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRlICpl c3RhdGUsCiAJbWVtY3B5KHBzdG10X3NwYWNlLCBwc3RtdF9kYXRhLCBwc3RtdF9sZW4pOwogCXNo bV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFSQUxMRUxfS0VZX1BMQU5ORURTVE1ULCBwc3RtdF9z cGFjZSk7CiAKKwkvKiBTdG9yZSBzZXJpYWxpemVkIExpc3Qgb2YgUGFydGl0aW9uUHJ1bmVSZXN1 bHQgKi8KKwlwYXJ0X3BydW5lX3Jlc3VsdHNfc3BhY2UgPSBzaG1fdG9jX2FsbG9jYXRlKHBjeHQt PnRvYywgcGFydF9wcnVuZV9yZXN1bHRzX2xlbik7CisJbWVtY3B5KHBhcnRfcHJ1bmVfcmVzdWx0 c19zcGFjZSwgcGFydF9wcnVuZV9yZXN1bHRzX2RhdGEsIHBhcnRfcHJ1bmVfcmVzdWx0c19sZW4p OworCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFSQUxMRUxfS0VZX1BBUlRJVElPTl9QUlVO RV9SRVNVTFRTLAorCQkJCSAgIHBhcnRfcHJ1bmVfcmVzdWx0c19zcGFjZSk7CisKIAkvKiBTdG9y ZSBzZXJpYWxpemVkIFBhcmFtTGlzdEluZm8uICovCiAJcGFyYW1saXN0aW5mb19zcGFjZSA9IHNo bV90b2NfYWxsb2NhdGUocGN4dC0+dG9jLCBwYXJhbWxpc3RpbmZvX2xlbik7CiAJc2htX3RvY19p bnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfUEFSQU1MSVNUSU5GTywgcGFyYW1saXN0aW5m b19zcGFjZSk7CkBAIC0xMjM0LDggKzEyNTAsMTAgQEAgRXhlY1BhcmFsbGVsR2V0UXVlcnlEZXNj KHNobV90b2MgKnRvYywgRGVzdFJlY2VpdmVyICpyZWNlaXZlciwKIAkJCQkJCSBpbnQgaW5zdHJ1 bWVudF9vcHRpb25zKQogewogCWNoYXIJICAgKnBzdG10c3BhY2U7CisJY2hhcgkgICAqcGFydF9w cnVuZV9yZXN1bHRzX3NwYWNlOwogCWNoYXIJICAgKnBhcmFtc3BhY2U7CiAJUGxhbm5lZFN0bXQg KnBzdG10OworCUxpc3QJICAgKnBhcnRfcHJ1bmVfcmVzdWx0czsKIAlQYXJhbUxpc3RJbmZvIHBh cmFtTEk7CiAJY2hhcgkgICAqcXVlcnlTdHJpbmc7CiAKQEAgLTEyNDYsMTIgKzEyNjQsMTcgQEAg RXhlY1BhcmFsbGVsR2V0UXVlcnlEZXNjKHNobV90b2MgKnRvYywgRGVzdFJlY2VpdmVyICpyZWNl aXZlciwKIAlwc3RtdHNwYWNlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfUExB Tk5FRFNUTVQsIGZhbHNlKTsKIAlwc3RtdCA9IChQbGFubmVkU3RtdCAqKSBzdHJpbmdUb05vZGUo cHN0bXRzcGFjZSk7CiAKKwkvKiBSZWNvbnN0cnVjdCBsZWFkZXItc3VwcGxpZWQgUGFydGl0aW9u UHJ1bmVSZXN1bHQuICovCisJcGFydF9wcnVuZV9yZXN1bHRzX3NwYWNlID0KKwkJc2htX3RvY19s b29rdXAodG9jLCBQQVJBTExFTF9LRVlfUEFSVElUSU9OX1BSVU5FX1JFU1VMVFMsIGZhbHNlKTsK KwlwYXJ0X3BydW5lX3Jlc3VsdHMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUocGFydF9wcnVuZV9y ZXN1bHRzX3NwYWNlKTsKKwogCS8qIFJlY29uc3RydWN0IFBhcmFtTGlzdEluZm8uICovCiAJcGFy YW1zcGFjZSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX1BBUkFNTElTVElORk8s IGZhbHNlKTsKIAlwYXJhbUxJID0gUmVzdG9yZVBhcmFtTGlzdCgmcGFyYW1zcGFjZSk7CiAKIAkv KiBDcmVhdGUgYSBRdWVyeURlc2MgZm9yIHRoZSBxdWVyeS4gKi8KLQlyZXR1cm4gQ3JlYXRlUXVl cnlEZXNjKHBzdG10LAorCXJldHVybiBDcmVhdGVRdWVyeURlc2MocHN0bXQsIHBhcnRfcHJ1bmVf cmVzdWx0cywKIAkJCQkJCSAgIHF1ZXJ5U3RyaW5nLAogCQkJCQkJICAgR2V0QWN0aXZlU25hcHNo b3QoKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJICAgcmVjZWl2ZXIsIHBhcmFtTEksIE5VTEws IGluc3RydW1lbnRfb3B0aW9ucyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjUGFydGl0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKaW5k ZXggNWI2MjE1NzcxMi4uZGNkMmJiMGY5MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY1BhcnRpdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRp b24uYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAjaW5jbHVk ZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAi cGFyc2VyL3BhcnNldHJlZS5oIgogI2luY2x1ZGUgInBhcnRpdGlvbmluZy9wYXJ0Ym91bmRzLmgi CiAjaW5jbHVkZSAicGFydGl0aW9uaW5nL3BhcnRkZXNjLmgiCiAjaW5jbHVkZSAicGFydGl0aW9u aW5nL3BhcnRwcnVuZS5oIgpAQCAtMTg1LDcgKzE4NiwxMSBAQCBzdGF0aWMgY2hhciAqRXhlY0J1 aWxkU2xvdFBhcnRpdGlvbktleURlc2NyaXB0aW9uKFJlbGF0aW9uIHJlbCwKIHN0YXRpYyBMaXN0 ICphZGp1c3RfcGFydGl0aW9uX2NvbG5vcyhMaXN0ICpjb2xub3MsIFJlc3VsdFJlbEluZm8gKmxl YWZfcGFydF9ycmkpOwogc3RhdGljIExpc3QgKmFkanVzdF9wYXJ0aXRpb25fY29sbm9zX3VzaW5n X21hcChMaXN0ICpjb2xub3MsIEF0dHJNYXAgKmF0dHJNYXApOwogc3RhdGljIFBhcnRpdGlvblBy dW5lU3RhdGUgKkNyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUs Ci0JCQkJCQkJCQkJCQkJICBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyk7CisJCQkJCQkJ CQkJCQkJICBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbywKKwkJCQkJCQkJCQkJCQkgIGJv b2wgY29uc2lkZXJfaW5pdGlhbF9zdGVwcywKKwkJCQkJCQkJCQkJCQkgIGJvb2wgY29uc2lkZXJf ZXhlY19zdGVwcywKKwkJCQkJCQkJCQkJCQkgIExpc3QgKnJ0YWJsZSwgRXhwckNvbnRleHQgKmVj b250ZXh0LAorCQkJCQkJCQkJCQkJCSAgUGFydGl0aW9uRGlyZWN0b3J5IHBhcnRkaXIpOwogc3Rh dGljIHZvaWQgSW5pdFBhcnRpdGlvblBydW5lQ29udGV4dChQYXJ0aXRpb25QcnVuZUNvbnRleHQg KmNvbnRleHQsCiAJCQkJCQkJCQkgIExpc3QgKnBydW5pbmdfc3RlcHMsCiAJCQkJCQkJCQkgIFBh cnRpdGlvbkRlc2MgcGFydGRlc2MsCkBAIC0xOTgsNyArMjAzLDggQEAgc3RhdGljIHZvaWQgUGFy dGl0aW9uUHJ1bmVGaXhTdWJQbGFuTWFwKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUs CiBzdGF0aWMgdm9pZCBmaW5kX21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UoUGFydGl0aW9uUHJ1 bmluZ0RhdGEgKnBydW5lZGF0YSwKIAkJCQkJCQkJCQkgICBQYXJ0aXRpb25lZFJlbFBydW5pbmdE YXRhICpwcHJ1bmUsCiAJCQkJCQkJCQkJICAgYm9vbCBpbml0aWFsX3BydW5lLAotCQkJCQkJCQkJ CSAgIEJpdG1hcHNldCAqKnZhbGlkc3VicGxhbnMpOworCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAq KnZhbGlkc3VicGxhbnMsCisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICoqc2Nhbl9sZWFmcGFydF9y dGlzKTsKIAogCiAvKgpAQCAtMTc0Miw3ICsxNzQ4LDggQEAgYWRqdXN0X3BhcnRpdGlvbl9jb2xu b3NfdXNpbmdfbWFwKExpc3QgKmNvbG5vcywgQXR0ck1hcCAqYXR0ck1hcCkKICAqIGNvbnNpZGVy ZWQgdG8gYmUgYSBzdGFibGUgZXhwcmVzc2lvbiwgaXQgY2FuIGNoYW5nZSB2YWx1ZSBmcm9tIG9u ZSBwbGFuCiAgKiBub2RlIHNjYW4gdG8gdGhlIG5leHQgZHVyaW5nIHF1ZXJ5IGV4ZWN1dGlvbi4g IFN0YWJsZSBjb21wYXJpc29uCiAgKiBleHByZXNzaW9ucyB0aGF0IGRvbid0IGludm9sdmUgc3Vj aCBQYXJhbXMgYWxsb3cgcGFydGl0aW9uIHBydW5pbmcgdG8gYmUKLSAqIGRvbmUgb25jZSBkdXJp bmcgZXhlY3V0b3Igc3RhcnR1cC4gIEV4cHJlc3Npb25zIHRoYXQgZG8gaW52b2x2ZSBzdWNoIFBh cmFtcworICogZG9uZSBvbmNlIGR1cmluZyBleGVjdXRvciBzdGFydHVwIG9yIGV2ZW4gYmVmb3Jl IHRoYXQsIHN1Y2ggYXMgd2hlbiBjYWxsZWQKKyAqIGZyb20gQ2FjaGVkUGxhbkxvY2tQYXJ0aXRp b25zKCkuICBFeHByZXNzaW9ucyB0aGF0IGRvIGludm9sdmUgc3VjaCBQYXJhbXMKICAqIHJlcXVp cmUgdXMgdG8gcHJ1bmUgc2VwYXJhdGVseSBmb3IgZWFjaCBzY2FuIG9mIHRoZSBwYXJlbnQgcGxh biBub2RlLgogICoKICAqIE5vdGUgdGhhdCBwcnVuaW5nIGF3YXkgdW5uZWVkZWQgc3VicGxhbnMg ZHVyaW5nIGV4ZWN1dG9yIHN0YXJ0dXAgaGFzIHRoZQpAQCAtMTc2MCw2ICsxNzY3LDEyIEBAIGFk anVzdF9wYXJ0aXRpb25fY29sbm9zX3VzaW5nX21hcChMaXN0ICpjb2xub3MsIEF0dHJNYXAgKmF0 dHJNYXApCiAgKgkJYWNjb3VudCBmb3IgaW5pdGlhbCBwcnVuaW5nIHBvc3NpYmx5IGhhdmluZyBl bGltaW5hdGVkIHNvbWUgb2YgdGhlCiAgKgkJc3VicGxhbnMuCiAgKgorICogRXhlY1BhcnRpdGlv bkRvSW5pdGlhbFBydW5pbmc6CisgKgkJRG8gaW5pdGlhbCBwcnVuaW5nIHdpdGggdGhlIGluZm9y bWF0aW9uIGNvbnRhaW5lZCBpbiBhIGdpdmVuCisgKgkJUGFydGl0aW9uUHJ1bmVJbmZvIHRvIGRl dGVybWluZSB0aGUgc2V0IG9mIHRoZSBwYXJlbnQgcGxhbiBub2RlJ3MKKyAqCQljaGlsZCBzdWJu b2RlcyB0aGF0IGFyZSB2YWxpZCBmb3IgZXhlY3V0aW9uIGFuZCBhbHNvIHRoZSBzZXQgb2YgdGhl IFJUCisgKgkJaW5kZXhlcyBvZiBsZWFmIHBhcnRpdGlvbnMgc2Nhbm5lZCBieSB0aG9zZSBzdWJu b2Rlcy4KKyAqCiAgKiBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnM6CiAgKgkJUmV0dXJucyBpbmRl eGVzIG9mIG1hdGNoaW5nIHN1YnBsYW5zIGFmdGVyIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb25z CiAgKgkJdGhhdCBhcmUgc2FmZSB0byBldmFsdWF0ZSBhdCBhIGdpdmVuIHBvaW50LiAgVGhpcyBm dW5jdGlvbiBpcyBmaXJzdApAQCAtMTc4MCw4ICsxNzkzLDEwIEBAIGFkanVzdF9wYXJ0aXRpb25f Y29sbm9zX3VzaW5nX21hcChMaXN0ICpjb2xub3MsIEF0dHJNYXAgKmF0dHJNYXApCiAgKgogICog T24gcmV0dXJuLCAqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zIGlzIGFzc2lnbmVkIHRoZSBzZXQg b2YgaW5kZXhlcyBvZgogICogY2hpbGQgc3VicGxhbnMgdGhhdCBtdXN0IGJlIGluaXRpYWxpemVk IGFsb25nIHdpdGggdGhlIHBhcmVudCBwbGFuIG5vZGUuCi0gKiBJbml0aWFsIHBydW5pbmcgaXMg cGVyZm9ybWVkIGhlcmUgaWYgbmVlZGVkIGFuZCBpbiB0aGF0IGNhc2Ugb25seSB0aGUKLSAqIHN1 cnZpdmluZyBzdWJwbGFucycgaW5kZXhlcyBhcmUgYWRkZWQuCisgKiBUaGF0IHNldCBpcyBjb21w dXRlZCBieSBlaXRoZXIgcGVyZm9ybWluZyB0aGUgImluaXRpYWwgcHJ1bmluZyIgaGVyZSBvcgor ICogcmV1c2luZyB0aGUgb25lIHByZXNlbnQgaW4gRVN0YXRlLmVzX3BhcnRfcHJ1bmVfcmVzdWx0 c1twYXJ0X3BydW5lX2luZGV4XQorICogaWYgaXQgaGFzIGJlZW4gc2V0LCB3aGljaCBpdCB3b3Vs ZCBiZSBpZiBDYWNoZWRQbGFuTG9ja1BhcnRpdGlvbnMoKSB3b3VsZAorICogaGF2ZSBkb25lIHRo ZSBpbml0aWFsIHBydW5pbmcuCiAgKgogICogSWYgc3VicGxhbnMgYXJlIGluZGVlZCBwcnVuZWQs IHN1YnBsYW5fbWFwIGFycmF5cyBjb250YWluZWQgaW4gdGhlIHJldHVybmVkCiAgKiBQYXJ0aXRp b25QcnVuZVN0YXRlIGFyZSByZS1zZXF1ZW5jZWQgdG8gbm90IGNvdW50IHRob3NlLCB0aG91Z2gg b25seSBpZiB0aGUKQEAgLTE3OTQsOSArMTgwOSwxMCBAQCBFeGVjSW5pdFBhcnRpdGlvblBydW5p bmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkgQml0bWFwc2V0ICpyb290X3BhcmVudF9y ZWxpZHMsCiAJCQkJCQkgQml0bWFwc2V0ICoqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zKQogewot CVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CisJUGFydGl0aW9uUHJ1bmVTdGF0ZSAq cHJ1bmVzdGF0ZSA9IE5VTEw7CiAJRVN0YXRlCSAgICplc3RhdGUgPSBwbGFuc3RhdGUtPnN0YXRl OwogCVBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvOworCVBhcnRpdGlvblBydW5lUmVzdWx0 ICpwcnVuZXJlc3VsdCA9IE5VTEw7CiAKIAkvKiBPYnRhaW4gdGhlIHBydW5laW5mbyB3ZSBuZWVk LCBhbmQgbWFrZSBzdXJlIGl0J3MgdGhlIHJpZ2h0IG9uZSAqLwogCXBydW5laW5mbyA9IGxpc3Rf bnRoKGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9pbmZvcywgcGFydF9wcnVuZV9pbmRleCk7CkBAIC0x ODEyLDIwICsxODI4LDYyIEBAIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZyhQbGFuU3RhdGUgKnBs YW5zdGF0ZSwKIAkvKiBXZSBtYXkgbmVlZCBhbiBleHByZXNzaW9uIGNvbnRleHQgdG8gZXZhbHVh dGUgcGFydGl0aW9uIGV4cHJzICovCiAJRXhlY0Fzc2lnbkV4cHJDb250ZXh0KGVzdGF0ZSwgcGxh bnN0YXRlKTsKIAotCS8qIENyZWF0ZSB0aGUgd29ya2luZyBkYXRhIHN0cnVjdHVyZSBmb3IgcHJ1 bmluZyAqLwotCXBydW5lc3RhdGUgPSBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKHBsYW5zdGF0 ZSwgcHJ1bmVpbmZvKTsKKwkvKiBJbml0aWFsIHBydW5pbmcgYWxyZWFkeSBkb25lIGlmIGVzX3Bh cnRfcHJ1bmVfcmVzdWx0cyBoYXMgYmVlbiBzZXQuICovCisJaWYgKGVzdGF0ZS0+ZXNfcGFydF9w cnVuZV9yZXN1bHRzKQorCXsKKwkJcHJ1bmVyZXN1bHQgPSBsaXN0X250aF9ub2RlKFBhcnRpdGlv blBydW5lUmVzdWx0LAorCQkJCQkJCQkJZXN0YXRlLT5lc19wYXJ0X3BydW5lX3Jlc3VsdHMsCisJ CQkJCQkJCQlwYXJ0X3BydW5lX2luZGV4KTsKKwkJaWYgKCFibXNfZXF1YWwocm9vdF9wYXJlbnRf cmVsaWRzLCBwcnVuZWluZm8tPnJvb3RfcGFyZW50X3JlbGlkcykpCisJCQllcmVwb3J0KEVSUk9S LAorCQkJCQllcnJjb2RlKEVSUkNPREVfSU5URVJOQUxfRVJST1IpLAorCQkJCQllcnJtc2dfaW50 ZXJuYWwoIm1pc21hdGNoaW5nIFBhcnRpdGlvblBydW5lSW5mbyBhbmQgUGFydGl0aW9uUHJ1bmVS ZXN1bHQgYXQgcGFydF9wcnVuZV9pbmRleCAlZCIsCisJCQkJCQkJCQlwYXJ0X3BydW5lX2luZGV4 KSwKKwkJCQkJZXJyZGV0YWlsX2ludGVybmFsKCJwcnVucmVzdWx0IHJlbGlkcyAlcywgcHJ1bmVp bmZvIHJlbGlkcyAlcyIsCisJCQkJCQkJCQkgICBibXNUb1N0cmluZyhwcnVuZXJlc3VsdC0+cm9v dF9wYXJlbnRfcmVsaWRzKSwKKwkJCQkJCQkJCSAgIGJtc1RvU3RyaW5nKHBydW5laW5mby0+cm9v dF9wYXJlbnRfcmVsaWRzKSkpOworCX0KKworCWlmIChwcnVuZXJlc3VsdCA9PSBOVUxMIHx8IHBy dW5laW5mby0+bmVlZHNfZXhlY19wcnVuaW5nKQorCXsKKwkJLyogV2UgbWF5IG5lZWQgYW4gZXhw cmVzc2lvbiBjb250ZXh0IHRvIGV2YWx1YXRlIHBhcnRpdGlvbiBleHBycyAqLworCQlFeGVjQXNz aWduRXhwckNvbnRleHQoZXN0YXRlLCBwbGFuc3RhdGUpOworCisJCS8qIEZvciBkYXRhIHJlYWRp bmcsIGV4ZWN1dG9yIGFsd2F5cyBvbWl0cyBkZXRhY2hlZCBwYXJ0aXRpb25zICovCisJCWlmIChl c3RhdGUtPmVzX3BhcnRpdGlvbl9kaXJlY3RvcnkgPT0gTlVMTCkKKwkJCWVzdGF0ZS0+ZXNfcGFy dGl0aW9uX2RpcmVjdG9yeSA9CisJCQkJQ3JlYXRlUGFydGl0aW9uRGlyZWN0b3J5KGVzdGF0ZS0+ ZXNfcXVlcnlfY3h0LCBmYWxzZSk7CisKKwkJLyoKKwkJICogQ3JlYXRlIHRoZSB3b3JraW5nIGRh dGEgc3RydWN0dXJlIGZvciBwcnVuaW5nLiAgTm8gbmVlZCB0byBjb25zaWRlcgorCQkgKiBpbml0 aWFsIHBydW5pbmcgc3RlcHMgaWYgd2UgaGF2ZSBhIFBhcnRpdGlvblBydW5lUmVzdWx0LgorCQkg Ki8KKwkJcHJ1bmVzdGF0ZSA9IENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUocGxhbnN0YXRlLCBw cnVuZWluZm8sCisJCQkJCQkJCQkJCSAgIHBydW5lcmVzdWx0ID09IE5VTEwsCisJCQkJCQkJCQkJ CSAgIHBydW5laW5mby0+bmVlZHNfZXhlY19wcnVuaW5nLAorCQkJCQkJCQkJCQkgICBOSUwsIHBs YW5zdGF0ZS0+cHNfRXhwckNvbnRleHQsCisJCQkJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfcGFydGl0 aW9uX2RpcmVjdG9yeSk7CisJfQogCiAJLyoKIAkgKiBQZXJmb3JtIGFuIGluaXRpYWwgcGFydGl0 aW9uIHBydW5lIHBhc3MsIGlmIHJlcXVpcmVkLgogCSAqLwotCWlmIChwcnVuZXN0YXRlLT5kb19p bml0aWFsX3BydW5lKQotCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zID0gRXhlY0ZpbmRNYXRj aGluZ1N1YlBsYW5zKHBydW5lc3RhdGUsIHRydWUpOworCWlmIChwcnVuZXJlc3VsdCkKKwl7CisJ CSppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMgPSBibXNfY29weShwcnVuZXJlc3VsdC0+dmFsaWRf c3VicGxhbl9vZmZzKTsKKwl9CisJZWxzZSBpZiAocHJ1bmVzdGF0ZSAmJiBwcnVuZXN0YXRlLT5k b19pbml0aWFsX3BydW5lKQorCXsKKwkJKmluaXRpYWxseV92YWxpZF9zdWJwbGFucyA9IEV4ZWNG aW5kTWF0Y2hpbmdTdWJQbGFucyhwcnVuZXN0YXRlLCB0cnVlLAorCQkJCQkJCQkJCQkJCQkJIE5V TEwpOworCX0KIAllbHNlCiAJewotCQkvKiBObyBwcnVuaW5nLCBzbyB3ZSdsbCBuZWVkIHRvIGlu aXRpYWxpemUgYWxsIHN1YnBsYW5zICovCisJCS8qIE5vIGluaXRpYWwgcHJ1bmluZywgc28gd2Un bGwgbmVlZCB0byBpbml0aWFsaXplIGFsbCBzdWJwbGFucyAqLwogCQlBc3NlcnQobl90b3RhbF9z dWJwbGFucyA+IDApOwogCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zID0gYm1zX2FkZF9yYW5n ZShOVUxMLCAwLAogCQkJCQkJCQkJCQkJICBuX3RvdGFsX3N1YnBsYW5zIC0gMSk7CisJCXJldHVy biBwcnVuZXN0YXRlOwogCX0KIAogCS8qCkBAIC0xODMzLDcgKzE4OTEsOCBAQCBFeGVjSW5pdFBh cnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJICogdGhhdCB3ZXJlIHJlbW92 ZWQgYWJvdmUgZHVlIHRvIGluaXRpYWwgcHJ1bmluZy4gIE5vIG5lZWQgdG8gZG8gdGhpcyBpZgog CSAqIG5vIHN0ZXBzIHdlcmUgcmVtb3ZlZC4KIAkgKi8KLQlpZiAoYm1zX251bV9tZW1iZXJzKCpp bml0aWFsbHlfdmFsaWRfc3VicGxhbnMpIDwgbl90b3RhbF9zdWJwbGFucykKKwlpZiAocHJ1bmVz dGF0ZSAmJgorCQlibXNfbnVtX21lbWJlcnMoKmluaXRpYWxseV92YWxpZF9zdWJwbGFucykgPCBu X3RvdGFsX3N1YnBsYW5zKQogCXsKIAkJLyoKIAkJICogV2UgY2FuIHNhZmVseSBza2lwIHRoaXMg d2hlbiAhZG9fZXhlY19wcnVuZSwgZXZlbiB0aG91Z2ggdGhhdApAQCAtMTg0OSwxMSArMTkwOCw1 OCBAQCBFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJcmV0 dXJuIHBydW5lc3RhdGU7CiB9CiAKKy8qCisgKiBFeGVjUGFydGl0aW9uRG9Jbml0aWFsUHJ1bmlu ZworICoJCVBlcmZvcm0gaW5pdGlhbCBwcnVuaW5nIHVzaW5nIGdpdmVuIFBhcnRpdGlvblBydW5l SW5mbyB0byBkZXRlcm1pbmUKKyAqCQl0aGUgc2V0IG9mIHRoZSBwYXJlbnQgcGxhbiBub2RlJ3Mg Y2hpbGQgc3Vibm9kZXMgdGhhdCBhcmUgdmFsaWQgZm9yCisgKgkJZXhlY3V0aW9uCisgKgorICog T24gcmV0dXJuLCAqc2Nhbl9sZWFmcGFydF9ydGlzIHdpbGwgY29udGFpbiB0aGUgUlQgaW5kZXhl cyBvZiBsZWFmCisgKiBwYXJ0aXRpb25zIHNjYW5uZWQgYnkgdGhvc2UgdmFsaWQgc3Vibm9kZXMu CisgKgorICogTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgc2hhcmUgc3RhdGUgd2l0aCB0aGUgYWN0 dWFsIGV4ZWN1dGlvbiwgc28gbXVzdCBkbworICogd2l0aCB0aGUgaW5mb3JtYXRpb24gcHJlc2Vu dCBpbiB0aGUgUGxhbm5lZFN0bXQuICBGb3IgZXhhbXBsZSwgdGhlcmUgaXNuJ3QKKyAqIGEgUGxh blN0YXRlIGZvciB0aGUgcGFyZW50IHBsYW4gbm9kZSB5ZXQsIHNvIHdlIG11c3QgY3JlYXRlIGEg c3RhbmRhbG9uZQorICogRXhwckNvbnRleHQgdG8gZXZhbHVhdGUgcHJ1bmluZyBleHByZXNzaW9u cywgZXF1aXBwZWQgd2l0aCB0aGUgaW5mb3JtYXRpb24KKyAqIGFib3V0IHRoZSBFWFRFUk4gcGFy YW1ldGVycyB0aGF0IHdlIGRvIGhhdmUuICBOb3RlIHRoYXQgdGhhdCdzIG9rYXkgYmVjYXVzZQor ICogdGhlIGluaXRpYWwgcHJ1bmluZyBzdGVwcyBkbyBub3QgY29udGFpbiBhbnl0aGluZyB0aGF0 IHdvdWxkIHJlcXVpcmUgdGhlCisgKiBleGVjdXRpb24gdG8gaGF2ZSBzdGFydGVkLiAgTGlrZXdp c2UsIHdlIGNyZWF0ZSBvdXIgb3duIFBhcnRpdGlvbkRpcmVjdG9yeQorICogdG8gbG9vayB1cCB0 aGUgUGFydGl0aW9uRGVzY3MgdG8gdXNlLgorICovCitCaXRtYXBzZXQgKgorRXhlY1BhcnRpdGlv bkRvSW5pdGlhbFBydW5pbmcoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBQYXJhbUxpc3RJbmZv IHBhcmFtcywKKwkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvLAorCQkJCQkJ CSAgQml0bWFwc2V0ICoqc2Nhbl9sZWFmcGFydF9ydGlzKQoreworCUxpc3QJCSAqcnRhYmxlID0g cGxhbm5lZHN0bXQtPnJ0YWJsZTsKKwlFeHByQ29udGV4dAkgKmVjb250ZXh0OworCVBhcnRpdGlv bkRpcmVjdG9yeSBwZGlyOworCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CisJQml0 bWFwc2V0CSAqdmFsaWRfc3VicGxhbl9vZmZzOworCisJLyogRG9uJ3Qgb21pdCBkZXRhY2hlZCBw YXJ0aXRpb25zLCBqdXN0IGxpa2UgZHVyaW5nIGV4ZWN1dGlvbiBwcm9wZXIuICovCisJcGRpciA9 IENyZWF0ZVBhcnRpdGlvbkRpcmVjdG9yeShDdXJyZW50TWVtb3J5Q29udGV4dCwgZmFsc2UpOwor CWVjb250ZXh0ID0gQ3JlYXRlU3RhbmRhbG9uZUV4cHJDb250ZXh0KCk7CisJZWNvbnRleHQtPmVj eHRfcGFyYW1fbGlzdF9pbmZvID0gcGFyYW1zOworCXBydW5lc3RhdGUgPSBDcmVhdGVQYXJ0aXRp b25QcnVuZVN0YXRlKE5VTEwsIHBydW5laW5mbywgdHJ1ZSwgZmFsc2UsCisJCQkJCQkJCQkJICAg cnRhYmxlLCBlY29udGV4dCwgcGRpcik7CisJdmFsaWRfc3VicGxhbl9vZmZzID0gRXhlY0ZpbmRN YXRjaGluZ1N1YlBsYW5zKHBydW5lc3RhdGUsIHRydWUsCisJCQkJCQkJCQkJCQkgIHNjYW5fbGVh ZnBhcnRfcnRpcyk7CisKKwlGcmVlRXhwckNvbnRleHQoZWNvbnRleHQsIHRydWUpOworCURlc3Ry b3lQYXJ0aXRpb25EaXJlY3RvcnkocGRpcik7CisKKwlyZXR1cm4gdmFsaWRfc3VicGxhbl9vZmZz OworfQorCiAvKgogICogQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZQogICoJCUJ1aWxkIHRoZSBk YXRhIHN0cnVjdHVyZSByZXF1aXJlZCBmb3IgY2FsbGluZyBFeGVjRmluZE1hdGNoaW5nU3ViUGxh bnMKICAqCi0gKiAncGxhbnN0YXRlJyBpcyB0aGUgcGFyZW50IHBsYW4gbm9kZSdzIGV4ZWN1dGlv biBzdGF0ZS4KKyAqICdwbGFuc3RhdGUnLCBpZiBub3QgTlVMTCwgaXMgdGhlIHBhcmVudCBwbGFu IG5vZGUncyBleGVjdXRpb24gc3RhdGUuICBJdAorICogY2FuIGJlIE5VTEwgaWYgYmVpbmcgY2Fs bGVkIGJlZm9yZSBFeGVjdXRvclN0YXJ0KCksIGluIHdoaWNoIGNhc2UsCisgKiAncnRhYmxlJyAo cmFuZ2UgdGFibGUpLCAnZWNvbnRleHQnLCBhbmQgJ3BhcnRkaXInIG11c3QgYmUgZXhwbGljaXRs eQorICogcHJvdmlkZWQuCiAgKgogICogJ3BydW5laW5mbycgaXMgYSBQYXJ0aXRpb25QcnVuZUlu Zm8gYXMgZ2VuZXJhdGVkIGJ5CiAgKiBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8uICBIZXJlIHdl IGJ1aWxkIGEgUGFydGl0aW9uUHJ1bmVTdGF0ZSBjb250YWluaW5nIGEKQEAgLTE4NjcsMTkgKzE5 NzMsMjEgQEAgRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAog ICogUGFydGl0aW9uZWRSZWxQcnVuZUluZm8uCiAgKi8KIHN0YXRpYyBQYXJ0aXRpb25QcnVuZVN0 YXRlICoKLUNyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIFBh cnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQorQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwKKwkJCQkJCSAgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWlu Zm8sCisJCQkJCQkgIGJvb2wgY29uc2lkZXJfaW5pdGlhbF9zdGVwcywKKwkJCQkJCSAgYm9vbCBj b25zaWRlcl9leGVjX3N0ZXBzLAorCQkJCQkJICBMaXN0ICpydGFibGUsIEV4cHJDb250ZXh0ICpl Y29udGV4dCwKKwkJCQkJCSAgUGFydGl0aW9uRGlyZWN0b3J5IHBhcnRkaXIpCiB7Ci0JRVN0YXRl CSAgICplc3RhdGUgPSBwbGFuc3RhdGUtPnN0YXRlOworCUVTdGF0ZQkgICAqZXN0YXRlID0gcGxh bnN0YXRlID8gcGxhbnN0YXRlLT5zdGF0ZSA6IE5VTEw7CiAJUGFydGl0aW9uUHJ1bmVTdGF0ZSAq cHJ1bmVzdGF0ZTsKIAlpbnQJCQluX3BhcnRfaGllcmFyY2hpZXM7CiAJTGlzdENlbGwgICAqbGM7 CiAJaW50CQkJaTsKLQlFeHByQ29udGV4dCAqZWNvbnRleHQgPSBwbGFuc3RhdGUtPnBzX0V4cHJD b250ZXh0OwogCi0JLyogRm9yIGRhdGEgcmVhZGluZywgZXhlY3V0b3IgYWx3YXlzIG9taXRzIGRl dGFjaGVkIHBhcnRpdGlvbnMgKi8KLQlpZiAoZXN0YXRlLT5lc19wYXJ0aXRpb25fZGlyZWN0b3J5 ID09IE5VTEwpCi0JCWVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSA9Ci0JCQlDcmVhdGVQ YXJ0aXRpb25EaXJlY3RvcnkoZXN0YXRlLT5lc19xdWVyeV9jeHQsIGZhbHNlKTsKKwlBc3NlcnQo KGVzdGF0ZSAhPSBOVUxMKSB8fAorCQkJKHBhcnRkaXIgIT0gTlVMTCAmJiBlY29udGV4dCAhPSBO VUxMICYmIHJ0YWJsZSAhPSBOSUwpKTsKIAogCW5fcGFydF9oaWVyYXJjaGllcyA9IGxpc3RfbGVu Z3RoKHBydW5laW5mby0+cHJ1bmVfaW5mb3MpOwogCUFzc2VydChuX3BhcnRfaGllcmFyY2hpZXMg PiAwKTsKQEAgLTE5MzQsMTUgKzIwNDIsMzkgQEAgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pCiAJCQlQ YXJ0aXRpb25LZXkgcGFydGtleTsKIAogCQkJLyoKLQkJCSAqIFdlIGNhbiByZWx5IG9uIHRoZSBj b3BpZXMgb2YgdGhlIHBhcnRpdGlvbmVkIHRhYmxlJ3MgcGFydGl0aW9uCi0JCQkgKiBrZXkgYW5k IHBhcnRpdGlvbiBkZXNjcmlwdG9yIGFwcGVhcmluZyBpbiBpdHMgcmVsY2FjaGUgZW50cnksCi0J CQkgKiBiZWNhdXNlIHRoYXQgZW50cnkgd2lsbCBiZSBoZWxkIG9wZW4gYW5kIGxvY2tlZCBmb3Ig dGhlCi0JCQkgKiBkdXJhdGlvbiBvZiB0aGlzIGV4ZWN1dG9yIHJ1bi4KKwkJCSAqIE11c3Qgb3Bl biB0aGUgcmVsYXRpb24gYnkgb3Vyc2VsdmVzIHdoZW4gY2FsbGVkIGJlZm9yZSB0aGUKKwkJCSAq IGV4ZWN1dGlvbiBoYXMgc3RhcnRlZCwgc3VjaCBhcywgd2hlbiBjYWxsZWQgZnJvbQorCQkJICog Q2FjaGVkUGxhbkxvY2tQYXJ0aXRpb25zKCkuICBJbiB0aGF0IGNhc2UsIHN1Yi1wYXJ0aXRpb25z IG11c3QKKwkJCSAqIGJlIGxvY2tlZCwgYmVjYXVzZSBBY3F1aXJlUGxhbm5lckxvY2tzKCkgd291 bGQgaGF2ZSBsb2NrZWQgb25seQorCQkJICogdGhlIHJvb3QgcGFyZW50LgorCQkJICovCisJCQlp ZiAoZXN0YXRlID09IE5VTEwpCisJCQl7CisJCQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0 Y2gocGluZm8tPnJ0aW5kZXgsIHJ0YWJsZSk7CisJCQkJaW50CQlsb2NrbW9kZSA9IChqID09IDAp ID8gTm9Mb2NrIDogcnRlLT5yZWxsb2NrbW9kZTsKKworCQkJCXBhcnRyZWwgPSB0YWJsZV9vcGVu KHJ0ZS0+cmVsaWQsIGxvY2ttb2RlKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlwYXJ0cmVsID0gRXhl Y0dldFJhbmdlVGFibGVSZWxhdGlvbihlc3RhdGUsIHBpbmZvLT5ydGluZGV4KTsKKworCQkJLyoK KwkJCSAqIFdlIGNhbiByZWx5IG9uIHRoZSBjb3B5IG9mIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSdz IHBhcnRpdGlvbgorCQkJICoga2V5IGZyb20gaW4gaXRzIHJlbGNhY2hlIGVudHJ5LCBiZWNhdXNl IGl0IGNhbid0IGNoYW5nZSAob3IKKwkJCSAqIGdldCBkZXN0cm95ZWQpIGFzIGxvbmcgYXMgdGhl IHJlbGF0aW9uIGlzIGxvY2tlZC4gIFBhcnRpdGlvbgorCQkJICogZGVzY3JpcHRvciBpcyB0YWtl biBmcm9tIHRoZSBQYXJ0aXRpb25EaXJlY3RvcnkgYXNzb2NpYXRlZCB3aXRoCisJCQkgKiB0aGUg dGFibGUgdGhhdCBpcyBoZWxkIG9wZW4gbG9uZyBlbm91Z2ggZm9yIHRoZSBkZXNjcmlwdG9yIHRv CisJCQkgKiByZW1haW4gdmFsaWQgd2hpbGUgaXQncyB1c2VkIHRvIHBlcmZvcm0gdGhlIHBydW5p bmcgc3RlcHMuCiAJCQkgKi8KLQkJCXBhcnRyZWwgPSBFeGVjR2V0UmFuZ2VUYWJsZVJlbGF0aW9u KGVzdGF0ZSwgcGluZm8tPnJ0aW5kZXgpOwogCQkJcGFydGtleSA9IFJlbGF0aW9uR2V0UGFydGl0 aW9uS2V5KHBhcnRyZWwpOwotCQkJcGFydGRlc2MgPSBQYXJ0aXRpb25EaXJlY3RvcnlMb29rdXAo ZXN0YXRlLT5lc19wYXJ0aXRpb25fZGlyZWN0b3J5LAotCQkJCQkJCQkJCQkJcGFydHJlbCk7CisJ CQlwYXJ0ZGVzYyA9IFBhcnRpdGlvbkRpcmVjdG9yeUxvb2t1cChwYXJ0ZGlyLCBwYXJ0cmVsKTsK KworCQkJLyoKKwkJCSAqIE11c3QgY2xvc2UgcGFydHJlbCwga2VlcGluZyB0aGUgbG9jayB0YWtl biwgaWYgd2UncmUgbm90IHVzaW5nCisJCQkgKiBFU3RhdGUncyBlbnRyeS4KKwkJCSAqLworCQkJ aWYgKGVzdGF0ZSA9PSBOVUxMKQorCQkJCXRhYmxlX2Nsb3NlKHBhcnRyZWwsIE5vTG9jayk7CiAK IAkJCS8qCiAJCQkgKiBJbml0aWFsaXplIHRoZSBzdWJwbGFuX21hcCBhbmQgc3VicGFydF9tYXAu CkBAIC0yMDUwLDcgKzIxODIsNyBAQCBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0 ZSAqcGxhbnN0YXRlLCBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykKIAkJCSAqIEluaXRp YWxpemUgcHJ1bmluZyBjb250ZXh0cyBhcyBuZWVkZWQuCiAJCQkgKi8KIAkJCXBwcnVuZS0+aW5p dGlhbF9wcnVuaW5nX3N0ZXBzID0gcGluZm8tPmluaXRpYWxfcHJ1bmluZ19zdGVwczsKLQkJCWlm IChwaW5mby0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBzKQorCQkJaWYgKGNvbnNpZGVyX2luaXRpYWxf c3RlcHMgJiYgcGluZm8tPmluaXRpYWxfcHJ1bmluZ19zdGVwcykKIAkJCXsKIAkJCQlJbml0UGFy dGl0aW9uUHJ1bmVDb250ZXh0KCZwcHJ1bmUtPmluaXRpYWxfY29udGV4dCwKIAkJCQkJCQkJCQkg IHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHMsCkBAIC0yMDYwLDcgKzIxOTIsNyBAQCBDcmVh dGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0aXRpb25QcnVu ZUluZm8gKnBydW5laW5mbykKIAkJCQlwcnVuZXN0YXRlLT5kb19pbml0aWFsX3BydW5lID0gdHJ1 ZTsKIAkJCX0KIAkJCXBwcnVuZS0+ZXhlY19wcnVuaW5nX3N0ZXBzID0gcGluZm8tPmV4ZWNfcHJ1 bmluZ19zdGVwczsKLQkJCWlmIChwaW5mby0+ZXhlY19wcnVuaW5nX3N0ZXBzKQorCQkJaWYgKGNv bnNpZGVyX2V4ZWNfc3RlcHMgJiYgcGluZm8tPmV4ZWNfcHJ1bmluZ19zdGVwcykKIAkJCXsKIAkJ CQlJbml0UGFydGl0aW9uUHJ1bmVDb250ZXh0KCZwcHJ1bmUtPmV4ZWNfY29udGV4dCwKIAkJCQkJ CQkJCQkgIHBpbmZvLT5leGVjX3BydW5pbmdfc3RlcHMsCkBAIC0yMjg4LDEwICsyNDIwLDE0IEBA IFBhcnRpdGlvblBydW5lRml4U3ViUGxhbk1hcChQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0 YXRlLAogICogUGFzcyBpbml0aWFsX3BydW5lIGlmIFBBUkFNX0VYRUMgUGFyYW1zIGNhbm5vdCB5 ZXQgYmUgZXZhbHVhdGVkLiAgVGhpcwogICogZGlmZmVyZW50aWF0ZXMgdGhlIGluaXRpYWwgZXhl Y3V0b3ItdGltZSBwcnVuaW5nIHN0ZXAgZnJvbSBsYXRlcgogICogcnVudGltZSBwcnVuaW5nLgor ICoKKyAqIFJUIGluZGV4ZXMgb2YgbGVhZiBwYXJ0aXRpb25zIHNjYW5uZWQgYnkgdGhlIGNob3Nl biBzdWJwbGFucyBhcmUgYWRkZWQgdG8KKyAqICpzY2FuX2xlYWZwYXJ0X3J0aXMgaWYgdGhlIHBv aW50ZXIgaXMgbm9uLU5VTEwuCiAgKi8KIEJpdG1hcHNldCAqCiBFeGVjRmluZE1hdGNoaW5nU3Vi UGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKLQkJCQkJCSBib29sIGluaXRp YWxfcHJ1bmUpCisJCQkJCQkgYm9vbCBpbml0aWFsX3BydW5lLAorCQkJCQkJIEJpdG1hcHNldCAq KnNjYW5fbGVhZnBhcnRfcnRpcykKIHsKIAlCaXRtYXBzZXQgICpyZXN1bHQgPSBOVUxMOwogCU1l bW9yeUNvbnRleHQgb2xkY29udGV4dDsKQEAgLTIzMjYsNyArMjQ2Miw3IEBAIEV4ZWNGaW5kTWF0 Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAogCQkgKi8KIAkJ cHBydW5lID0gJnBydW5lZGF0YS0+cGFydHJlbHBydW5lZGF0YVswXTsKIAkJZmluZF9tYXRjaGlu Z19zdWJwbGFuc19yZWN1cnNlKHBydW5lZGF0YSwgcHBydW5lLCBpbml0aWFsX3BydW5lLAotCQkJ CQkJCQkJICAgJnJlc3VsdCk7CisJCQkJCQkJCQkgICAmcmVzdWx0LCBzY2FuX2xlYWZwYXJ0X3J0 aXMpOwogCiAJCS8qIEV4cHJlc3Npb24gZXZhbCBtYXkgaGF2ZSB1c2VkIHNwYWNlIGluIEV4cHJD b250ZXh0IHRvbyAqLwogCQlpZiAocHBydW5lLT5leGVjX3BydW5pbmdfc3RlcHMpCkBAIC0yMzQw LDYgKzI0NzYsOCBAQCBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0 ZSAqcHJ1bmVzdGF0ZSwKIAogCS8qIENvcHkgcmVzdWx0IG91dCBvZiB0aGUgdGVtcCBjb250ZXh0 IGJlZm9yZSB3ZSByZXNldCBpdCAqLwogCXJlc3VsdCA9IGJtc19jb3B5KHJlc3VsdCk7CisJaWYg KHNjYW5fbGVhZnBhcnRfcnRpcykKKwkJKnNjYW5fbGVhZnBhcnRfcnRpcyA9IGJtc19jb3B5KCpz Y2FuX2xlYWZwYXJ0X3J0aXMpOwogCiAJTWVtb3J5Q29udGV4dFJlc2V0KHBydW5lc3RhdGUtPnBy dW5lX2NvbnRleHQpOwogCkBAIC0yMzUwLDEzICsyNDg4LDE1IEBAIEV4ZWNGaW5kTWF0Y2hpbmdT dWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAogICogZmluZF9tYXRjaGlu Z19zdWJwbGFuc19yZWN1cnNlCiAgKgkJUmVjdXJzaXZlIHdvcmtlciBmdW5jdGlvbiBmb3IgRXhl Y0ZpbmRNYXRjaGluZ1N1YlBsYW5zCiAgKgotICogQWRkcyB2YWxpZCAobm9uLXBydW5hYmxlKSBz dWJwbGFuIElEcyB0byAqdmFsaWRzdWJwbGFucworICogQWRkcyB2YWxpZCAobm9uLXBydW5hYmxl KSBzdWJwbGFuIElEcyB0byAqdmFsaWRzdWJwbGFucyBhbmQgUlQgaW5kZXhlcyBvZgorICogb2Yg dGhlIGNvcnJlc3BvbmRpbmcgbGVhZiBwYXJ0aXRpb25zIHRvICpzY2FuX2xlYWZwYXJ0X3J0aXMg KGlmIGFza2VkIGZvcikuCiAgKi8KIHN0YXRpYyB2b2lkCiBmaW5kX21hdGNoaW5nX3N1YnBsYW5z X3JlY3Vyc2UoUGFydGl0aW9uUHJ1bmluZ0RhdGEgKnBydW5lZGF0YSwKIAkJCQkJCQkgICBQYXJ0 aXRpb25lZFJlbFBydW5pbmdEYXRhICpwcHJ1bmUsCiAJCQkJCQkJICAgYm9vbCBpbml0aWFsX3By dW5lLAotCQkJCQkJCSAgIEJpdG1hcHNldCAqKnZhbGlkc3VicGxhbnMpCisJCQkJCQkJICAgQml0 bWFwc2V0ICoqdmFsaWRzdWJwbGFucywKKwkJCQkJCQkgICBCaXRtYXBzZXQgKipzY2FuX2xlYWZw YXJ0X3J0aXMpCiB7CiAJQml0bWFwc2V0ICAqcGFydHNldDsKIAlpbnQJCQlpOwpAQCAtMjM4Myw4 ICsyNTIzLDE0IEBAIGZpbmRfbWF0Y2hpbmdfc3VicGxhbnNfcmVjdXJzZShQYXJ0aXRpb25QcnVu aW5nRGF0YSAqcHJ1bmVkYXRhLAogCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwYXJ0c2V0 LCBpKSkgPj0gMCkKIAl7CiAJCWlmIChwcHJ1bmUtPnN1YnBsYW5fbWFwW2ldID49IDApCisJCXsK IAkJCSp2YWxpZHN1YnBsYW5zID0gYm1zX2FkZF9tZW1iZXIoKnZhbGlkc3VicGxhbnMsCiAJCQkJ CQkJCQkJCXBwcnVuZS0+c3VicGxhbl9tYXBbaV0pOworCQkJQXNzZXJ0KHBwcnVuZS0+cnRpX21h cFtpXSA+IDApOworCQkJaWYgKHNjYW5fbGVhZnBhcnRfcnRpcykKKwkJCQkqc2Nhbl9sZWFmcGFy dF9ydGlzID0gYm1zX2FkZF9tZW1iZXIoKnNjYW5fbGVhZnBhcnRfcnRpcywKKwkJCQkJCQkJCQkJ CQkgcHBydW5lLT5ydGlfbWFwW2ldKTsKKwkJfQogCQllbHNlCiAJCXsKIAkJCWludAkJCXBhcnRp ZHggPSBwcHJ1bmUtPnN1YnBhcnRfbWFwW2ldOwpAQCAtMjM5Miw3ICsyNTM4LDggQEAgZmluZF9t YXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKFBhcnRpdGlvblBydW5pbmdEYXRhICpwcnVuZWRhdGEs CiAJCQlpZiAocGFydGlkeCA+PSAwKQogCQkJCWZpbmRfbWF0Y2hpbmdfc3VicGxhbnNfcmVjdXJz ZShwcnVuZWRhdGEsCiAJCQkJCQkJCQkJCSAgICZwcnVuZWRhdGEtPnBhcnRyZWxwcnVuZWRhdGFb cGFydGlkeF0sCi0JCQkJCQkJCQkJCSAgIGluaXRpYWxfcHJ1bmUsIHZhbGlkc3VicGxhbnMpOwor CQkJCQkJCQkJCQkgICBpbml0aWFsX3BydW5lLCB2YWxpZHN1YnBsYW5zLAorCQkJCQkJCQkJCQkg ICBzY2FuX2xlYWZwYXJ0X3J0aXMpOwogCQkJZWxzZQogCQkJewogCQkJCS8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVXRpbHMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNVdGlscy5jCmluZGV4IDg3ZjRkNTNjYTcuLjdkMzZjOTcyZDMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNVdGlscy5jCkBAIC0xMzksNiArMTM5LDcgQEAgQ3JlYXRlRXhlY3V0b3JTdGF0ZSh2b2lk KQogCWVzdGF0ZS0+ZXNfcGFyYW1fZXhlY192YWxzID0gTlVMTDsKIAogCWVzdGF0ZS0+ZXNfcXVl cnlFbnYgPSBOVUxMOworCWVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9yZXN1bHRzID0gTklMOwogCiAJ ZXN0YXRlLT5lc19xdWVyeV9jeHQgPSBxY29udGV4dDsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMu YwppbmRleCBkYzEzNjI1MTcxLi5iZmZiNDJjZTcxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9mdW5jdGlvbnMuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMu YwpAQCAtODQyLDcgKzg0Miw3IEBAIHBvc3RxdWVsX3N0YXJ0KGV4ZWN1dGlvbl9zdGF0ZSAqZXMs IFNRTEZ1bmN0aW9uQ2FjaGVQdHIgZmNhY2hlKQogCWVsc2UKIAkJZGVzdCA9IE5vbmVfUmVjZWl2 ZXI7CiAKLQllcy0+cWQgPSBDcmVhdGVRdWVyeURlc2MoZXMtPnN0bXQsCisJZXMtPnFkID0gQ3Jl YXRlUXVlcnlEZXNjKGVzLT5zdG10LCBOSUwsCiAJCQkJCQkJIGZjYWNoZS0+c3JjLAogCQkJCQkJ CSBHZXRBY3RpdmVTbmFwc2hvdCgpLAogCQkJCQkJCSBJbnZhbGlkU25hcHNob3QsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlQXBwZW5kLmMKaW5kZXggOTk4MzAxOThiZC4uM2I5MTc1ODRkZSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVBcHBlbmQuYwpAQCAtMTU2LDcgKzE1Niw4IEBAIEV4ZWNJbml0QXBwZW5kKEFw cGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCSAqIHN1YnBsYW4sIHdl IGNhbiBmaWxsIGFzX3ZhbGlkX3N1YnBsYW5zIGltbWVkaWF0ZWx5LCBwcmV2ZW50aW5nCiAJCSAq IGxhdGVyIGNhbGxzIHRvIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucy4KIAkJICovCi0JCWlmICgh cHJ1bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKQorCQlpZiAoYXBwZW5kc3Rh dGUtPmFzX3BydW5lX3N0YXRlID09IE5VTEwgfHwKKwkJCSghYXBwZW5kc3RhdGUtPmFzX3BydW5l X3N0YXRlLT5kb19leGVjX3BydW5lICYmIG5wbGFucyA+IDApKQogCQkJYXBwZW5kc3RhdGUtPmFz X3ZhbGlkX3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKIAl9 CiAJZWxzZQpAQCAtNTc4LDcgKzU3OSw3IEBAIGNob29zZV9uZXh0X3N1YnBsYW5fbG9jYWxseShB cHBlbmRTdGF0ZSAqbm9kZSkKIAkJfQogCQllbHNlIGlmIChub2RlLT5hc192YWxpZF9zdWJwbGFu cyA9PSBOVUxMKQogCQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPQotCQkJCUV4ZWNGaW5kTWF0 Y2hpbmdTdWJQbGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UpOworCQkJCUV4ZWNGaW5k TWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwogCiAJ CXdoaWNocGxhbiA9IC0xOwogCX0KQEAgLTY0Myw3ICs2NDQsNyBAQCBjaG9vc2VfbmV4dF9zdWJw bGFuX2Zvcl9sZWFkZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJCWlmIChub2RlLT5hc192YWxpZF9z dWJwbGFucyA9PSBOVUxMKQogCQl7CiAJCQlub2RlLT5hc192YWxpZF9zdWJwbGFucyA9Ci0JCQkJ RXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSk7CisJ CQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSwg TlVMTCk7CiAKIAkJCS8qCiAJCQkgKiBNYXJrIGVhY2ggaW52YWxpZCBwbGFuIGFzIGZpbmlzaGVk IHRvIGFsbG93IHRoZSBsb29wIGJlbG93IHRvCkBAIC03MTgsNyArNzE5LDcgQEAgY2hvb3NlX25l eHRfc3VicGxhbl9mb3Jfd29ya2VyKEFwcGVuZFN0YXRlICpub2RlKQogCWVsc2UgaWYgKG5vZGUt PmFzX3ZhbGlkX3N1YnBsYW5zID09IE5VTEwpCiAJewogCQlub2RlLT5hc192YWxpZF9zdWJwbGFu cyA9Ci0JCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVfc3RhdGUsIGZh bHNlKTsKKwkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwg ZmFsc2UsIE5VTEwpOwogCQltYXJrX2ludmFsaWRfc3VicGxhbnNfYXNfZmluaXNoZWQobm9kZSk7 CiAJfQogCkBAIC04NjksNyArODcwLDcgQEAgRXhlY0FwcGVuZEFzeW5jQmVnaW4oQXBwZW5kU3Rh dGUgKm5vZGUpCiAJaWYgKG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID09IE5VTEwpCiAJewogCQlu b2RlLT5hc192YWxpZF9zdWJwbGFucyA9Ci0JCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9k ZS0+YXNfcHJ1bmVfc3RhdGUsIGZhbHNlKTsKKwkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhu b2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwogCiAJCWNsYXNzaWZ5X21hdGNoaW5n X3N1YnBsYW5zKG5vZGUpOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVNZXJnZUFwcGVuZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMK aW5kZXggZjM3MGY5ZjI4Ny4uY2NmYTA4Mzk0NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1l cmdlQXBwZW5kLmMKQEAgLTEwNCw3ICsxMDQsOCBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdl QXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJICogc3VicGxhbiwg d2UgY2FuIGZpbGwgbXNfdmFsaWRfc3VicGxhbnMgaW1tZWRpYXRlbHksIHByZXZlbnRpbmcKIAkJ ICogbGF0ZXIgY2FsbHMgdG8gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zLgogCQkgKi8KLQkJaWYg KCFwcnVuZXN0YXRlLT5kb19leGVjX3BydW5lICYmIG5wbGFucyA+IDApCisJCWlmIChtZXJnZXN0 YXRlLT5tc19wcnVuZV9zdGF0ZSA9PSBOVUxMIHx8CisJCQkoIW1lcmdlc3RhdGUtPm1zX3BydW5l X3N0YXRlLT5kb19leGVjX3BydW5lICYmIG5wbGFucyA+IDApKQogCQkJbWVyZ2VzdGF0ZS0+bXNf dmFsaWRfc3VicGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOwogCX0K IAllbHNlCkBAIC0yMTksNyArMjIwLDcgQEAgRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0 YXRlKQogCQkgKi8KIAkJaWYgKG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zID09IE5VTEwpCiAJCQlu b2RlLT5tc192YWxpZF9zdWJwbGFucyA9Ci0JCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5v ZGUtPm1zX3BydW5lX3N0YXRlLCBmYWxzZSk7CisJCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5z KG5vZGUtPm1zX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CiAKIAkJLyoKIAkJICogRmlyc3Qg dGltZSB0aHJvdWdoOiBwdWxsIHRoZSBmaXJzdCB0dXBsZSBmcm9tIGVhY2ggdmFsaWQgc3VicGxh biwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivc3BpLmMKaW5kZXggZmQ1Nzk2ZjFiOS4uMmVjYjkxOTNhYSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3Bp LmMKQEAgLTE1NzcsNiArMTU3Nyw3IEBAIFNQSV9jdXJzb3Jfb3Blbl9pbnRlcm5hbChjb25zdCBj aGFyICpuYW1lLCBTUElQbGFuUHRyIHBsYW4sCiB7CiAJQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNv dXJjZTsKIAlDYWNoZWRQbGFuICpjcGxhbjsKKwlDYWNoZWRQbGFuRXh0cmEgKmNwbGFuX2V4dHJh OwogCUxpc3QJICAgKnN0bXRfbGlzdDsKIAljaGFyCSAgICpxdWVyeV9zdHJpbmc7CiAJU25hcHNo b3QJc25hcHNob3Q7CkBAIC0xNjU3LDcgKzE2NTgsMTEgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVy bmFsKGNvbnN0IGNoYXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwKIAkgKi8KIAogCS8qIFJlcGxh biBpZiBuZWVkZWQsIGFuZCBpbmNyZW1lbnQgcGxhbiByZWZjb3VudCBmb3IgcG9ydGFsICovCi0J Y3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5zb3VyY2UsIHBhcmFtTEksIE5VTEwsIF9TUElfY3Vy cmVudC0+cXVlcnlFbnYpOworCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihwbGFuc291cmNlLCBwYXJh bUxJLCBOVUxMLCBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52LAorCQkJCQkJICAmY3BsYW5fZXh0cmEp OworCUFzc2VydChjcGxhbl9leHRyYSA9PSBOVUxMIHx8CisJCSAgIChsaXN0X2xlbmd0aChjcGxh bi0+c3RtdF9saXN0KSA9PQorCQkJbGlzdF9sZW5ndGgoY3BsYW5fZXh0cmEtPnBhcnRfcHJ1bmVf cmVzdWx0c19saXN0KSkpOwogCXN0bXRfbGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7CiAKIAlpZiAo IXBsYW4tPnNhdmVkKQpAQCAtMTY4NSw2ICsxNjkwLDkgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVy bmFsKGNvbnN0IGNoYXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwKIAkJCQkJICBzdG10X2xpc3Qs CiAJCQkJCSAgY3BsYW4pOwogCisJaWYgKGNwbGFuX2V4dHJhKQorCQlQb3J0YWxTYXZlQ2FjaGVk UGxhbkV4dHJhKHBvcnRhbCwgY3BsYW5fZXh0cmEpOworCiAJLyoKIAkgKiBTZXQgdXAgb3B0aW9u cyBmb3IgcG9ydGFsLiAgRGVmYXVsdCBTQ1JPTEwgdHlwZSBpcyBjaG9zZW4gdGhlIHNhbWUgd2F5 CiAJICogYXMgUGVyZm9ybUN1cnNvck9wZW4gZG9lcyBpdC4KQEAgLTIwNjcsNiArMjA3NSw3IEBA IFNQSV9wbGFuX2dldF9jYWNoZWRfcGxhbihTUElQbGFuUHRyIHBsYW4pCiB7CiAJQ2FjaGVkUGxh blNvdXJjZSAqcGxhbnNvdXJjZTsKIAlDYWNoZWRQbGFuICpjcGxhbjsKKwlDYWNoZWRQbGFuRXh0 cmEgKmNwbGFuX2V4dHJhID0gTlVMTDsKIAlTUElDYWxsYmFja0FyZyBzcGljYWxsYmFja2FyZzsK IAlFcnJvckNvbnRleHRDYWxsYmFjayBzcGllcnJjb250ZXh0OwogCkBAIC0yMDkyLDggKzIxMDEs MTIgQEAgU1BJX3BsYW5fZ2V0X2NhY2hlZF9wbGFuKFNQSVBsYW5QdHIgcGxhbikKIAkvKiBHZXQg dGhlIGdlbmVyaWMgcGxhbiBmb3IgdGhlIHF1ZXJ5ICovCiAJY3BsYW4gPSBHZXRDYWNoZWRQbGFu KHBsYW5zb3VyY2UsIE5VTEwsCiAJCQkJCQkgIHBsYW4tPnNhdmVkID8gQ3VycmVudFJlc291cmNl T3duZXIgOiBOVUxMLAotCQkJCQkJICBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52KTsKKwkJCQkJCSAg X1NQSV9jdXJyZW50LT5xdWVyeUVudiwKKwkJCQkJCSAgJmNwbGFuX2V4dHJhKTsKIAlBc3NlcnQo Y3BsYW4gPT0gcGxhbnNvdXJjZS0+Z3BsYW4pOworCUFzc2VydChjcGxhbl9leHRyYSA9PSBOVUxM IHx8CisJCSAgIChsaXN0X2xlbmd0aChjcGxhbi0+c3RtdF9saXN0KSA9PQorCQkJbGlzdF9sZW5n dGgoY3BsYW5fZXh0cmEtPnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0KSkpOwogCiAJLyogUG9wIHRo ZSBlcnJvciBjb250ZXh0IHN0YWNrICovCiAJZXJyb3JfY29udGV4dF9zdGFjayA9IHNwaWVycmNv bnRleHQucHJldmlvdXM7CkBAIC0yMzk5LDYgKzI0MTIsNyBAQCBfU1BJX2V4ZWN1dGVfcGxhbihT UElQbGFuUHRyIHBsYW4sIGNvbnN0IFNQSUV4ZWN1dGVPcHRpb25zICpvcHRpb25zLAogCVNQSUNh bGxiYWNrQXJnIHNwaWNhbGxiYWNrYXJnOwogCUVycm9yQ29udGV4dENhbGxiYWNrIHNwaWVycmNv bnRleHQ7CiAJQ2FjaGVkUGxhbiAqY3BsYW4gPSBOVUxMOworCUNhY2hlZFBsYW5FeHRyYSAqY3Bs YW5fZXh0cmEgPSBOVUxMOwogCUxpc3RDZWxsICAgKmxjMTsKIAogCS8qCkBAIC0yNTQ5LDggKzI1 NjMsMTIgQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0ciBwbGFuLCBjb25zdCBTUElFeGVj dXRlT3B0aW9ucyAqb3B0aW9ucywKIAkJICogcGxhbiwgdGhlIHJlZmNvdW50IG11c3QgYmUgYmFj a2VkIGJ5IHRoZSBwbGFuX293bmVyLgogCQkgKi8KIAkJY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBs YW5zb3VyY2UsIG9wdGlvbnMtPnBhcmFtcywKLQkJCQkJCQkgIHBsYW5fb3duZXIsIF9TUElfY3Vy cmVudC0+cXVlcnlFbnYpOworCQkJCQkJCSAgcGxhbl9vd25lciwgX1NQSV9jdXJyZW50LT5xdWVy eUVudiwKKwkJCQkJCQkgICZjcGxhbl9leHRyYSk7CiAKKwkJQXNzZXJ0KGNwbGFuX2V4dHJhID09 IE5VTEwgfHwKKwkJCSAgIChsaXN0X2xlbmd0aChjcGxhbi0+c3RtdF9saXN0KSA9PQorCQkJCWxp c3RfbGVuZ3RoKGNwbGFuX2V4dHJhLT5wYXJ0X3BydW5lX3Jlc3VsdHNfbGlzdCkpKTsKIAkJc3Rt dF9saXN0ID0gY3BsYW4tPnN0bXRfbGlzdDsKIAogCQkvKgpAQCAtMjU5Miw5ICsyNjEwLDE0IEBA IF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlv bnMgKm9wdGlvbnMsCiAJCWZvcmVhY2gobGMyLCBzdG10X2xpc3QpCiAJCXsKIAkJCVBsYW5uZWRT dG10ICpzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIGxjMik7CisJCQlMaXN0CSAgICpw YXJ0X3BydW5lX3Jlc3VsdHMgPSBOSUw7CiAJCQlib29sCQljYW5TZXRUYWcgPSBzdG10LT5jYW5T ZXRUYWc7CiAJCQlEZXN0UmVjZWl2ZXIgKmRlc3Q7CiAKKwkJCWlmIChjcGxhbl9leHRyYSkKKwkJ CQlwYXJ0X3BydW5lX3Jlc3VsdHMgPSBsaXN0X250aF9ub2RlKExpc3QsCisJCQkJCQkJCQkJCQkg ICBjcGxhbl9leHRyYS0+cGFydF9wcnVuZV9yZXN1bHRzX2xpc3QsCisJCQkJCQkJCQkJCQkgICBm b3JlYWNoX2N1cnJlbnRfaW5kZXgobGMyKSk7CiAJCQkvKgogCQkJICogUmVzZXQgb3V0cHV0IHN0 YXRlLiAgKE5vdGUgdGhhdCBpZiBhIG5vbi1TUEkgcmVjZWl2ZXIgaXMgdXNlZCwKIAkJCSAqIF9T UElfY3VycmVudC0+cHJvY2Vzc2VkIHdpbGwgc3RheSB6ZXJvLCBhbmQgdGhhdCdzIHdoYXQgd2Un bGwKQEAgLTI2NjMsNyArMjY4Niw3IEBAIF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxh biwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiAJCQkJZWxzZQogCQkJCQlzbmFw ID0gSW52YWxpZFNuYXBzaG90OwogCi0JCQkJcWRlc2MgPSBDcmVhdGVRdWVyeURlc2Moc3RtdCwK KwkJCQlxZGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhzdG10LCBwYXJ0X3BydW5lX3Jlc3VsdHMsCiAJ CQkJCQkJCQkJcGxhbnNvdXJjZS0+cXVlcnlfc3RyaW5nLAogCQkJCQkJCQkJCXNuYXAsIGNyb3Nz Y2hlY2tfc25hcHNob3QsCiAJCQkJCQkJCQkJZGVzdCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Nl dHJlZnMuYwppbmRleCBlZDQzZDU5MzZkLi5kYjI3Y2FlMjk3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jCkBAIC0zNzIsNiArMzcyLDcgQEAgc2V0X3BsYW5fcmVmZXJlbmNlcyhQ bGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxhbikKIAl7CiAJCVBhcnRpdGlvblBydW5lSW5mbyAq cHJ1bmVpbmZvID0gbGZpcnN0KGxjKTsKIAkJTGlzdENlbGwgICAqbDsKKwkJQml0bWFwc2V0ICAq bGVhZnBhcnRfcnRpcyA9IE5VTEw7CiAKIAkJcHJ1bmVpbmZvLT5yb290X3BhcmVudF9yZWxpZHMg PQogCQkJb2Zmc2V0X3JlbGlkX3NldChwcnVuZWluZm8tPnJvb3RfcGFyZW50X3JlbGlkcywgcnRv ZmZzZXQpOwpAQCAtMzgzLDE3ICszODQsNTIgQEAgc2V0X3BsYW5fcmVmZXJlbmNlcyhQbGFubmVy SW5mbyAqcm9vdCwgUGxhbiAqcGxhbikKIAkJCWZvcmVhY2gobDIsIHBydW5lX2luZm9zKQogCQkJ ewogCQkJCVBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvICpwaW5mbyA9IGxmaXJzdChsMik7CisJCQkJ aW50CQlpOwogCiAJCQkJLyogUlQgaW5kZXggb2YgdGhlIHRhYmxlIHRvIHdoaWNoIHRoZSBwaW5m byBiZWxvbmdzLiAqLwogCQkJCXBpbmZvLT5ydGluZGV4ICs9IHJ0b2Zmc2V0OworCisJCQkJLyog QWxzbyBvZiB0aGUgbGVhZiBwYXJ0aXRpb25zIHRoYXQgbWlnaHQgYmUgc2Nhbm5lZC4gKi8KKwkJ CQlmb3IgKGkgPSAwOyBpIDwgcGluZm8tPm5wYXJ0czsgaSsrKQorCQkJCXsKKwkJCQkJaWYgKHBp bmZvLT5ydGlfbWFwW2ldID4gMCAmJiBwaW5mby0+c3VicGxhbl9tYXBbaV0gPj0gMCkKKwkJCQkJ eworCQkJCQkJcGluZm8tPnJ0aV9tYXBbaV0gKz0gcnRvZmZzZXQ7CisJCQkJCQlsZWFmcGFydF9y dGlzID0gYm1zX2FkZF9tZW1iZXIobGVhZnBhcnRfcnRpcywKKwkJCQkJCQkJCQkJCQkgICBwaW5m by0+cnRpX21hcFtpXSk7CisJCQkJCX0KKwkJCQl9CiAJCQl9CiAKIAkJfQogCisJCWlmIChwcnVu ZWluZm8tPm5lZWRzX2luaXRfcHJ1bmluZykKKwkJeworCQkJZ2xvYi0+Y29udGFpbnNJbml0aWFs UHJ1bmluZyA9IHRydWU7CisKKwkJCS8qCisJCQkgKiBEZWxldGUgdGhlIGxlYWYgcGFydGl0aW9u IFJUSXMgZnJvbSB0aGUgc2V0IG9mIHJlbGF0aW9ucyB0byBiZQorCQkJICogbG9ja2VkIGJ5IEFj cXVpcmVFeGVjdXRvckxvY2tzKCkuICBUaGUgYWN0dWFsIHNldCBvZiBsZWFmCisJCQkgKiBwYXJ0 aXRpb25zIHRvIGJlIGxvY2tlZCBpcyBjb21wdXRlZCBieQorCQkJICogQ2FjaGVkUGxhbkxvY2tQ YXJ0aXRpb25zKCkuCisJCQkgKi8KKwkJCWdsb2ItPm1pbkxvY2tSZWxpZHMgPSBibXNfZGVsX21l bWJlcnMoZ2xvYi0+bWluTG9ja1JlbGlkcywKKwkJCQkJCQkJCQkJCSAgbGVhZnBhcnRfcnRpcyk7 CisJCX0KKwogCQlnbG9iLT5wYXJ0UHJ1bmVJbmZvcyA9IGxhcHBlbmQoZ2xvYi0+cGFydFBydW5l SW5mb3MsIHBydW5laW5mbyk7CiAJCWdsb2ItPmNvbnRhaW5zSW5pdGlhbFBydW5pbmcgfD0gcHJ1 bmVpbmZvLT5uZWVkc19pbml0X3BydW5pbmc7CiAJfQogCisJLyoKKwkgKiBJdCBzZWVtcyB3b3J0 aCBkb2luZyBhIGJtc19jb3B5KCkgb24gZ2xvYi0+bWluTG9ja1JlbGlkcyBpZiB3ZSBkZWxldGVk CisJICogYml0cyBmcm9tIGl0IGFib3ZlIHRvIGdldCByaWQgb2YgYW55IGVtcHR5IHRhaWwgYml0 cy4gIEl0IHNlZW1zIGJldHRlcgorCSAqIGZvciB0aGUgbG9vcCBvdmVyIHRoaXMgc2V0IGluIEFj cXVpcmVFeGVjdXRvckxvY2tzKCkgdG8gbm90IGhhdmUgdG8gZ28KKwkgKiB0aHJvdWdoIHRob3Nl IHVzZWxlc3MgYml0IHdvcmRzLgorCSAqLworCWlmIChnbG9iLT5jb250YWluc0luaXRpYWxQcnVu aW5nKQorCQlnbG9iLT5taW5Mb2NrUmVsaWRzID0gYm1zX2NvcHkoZ2xvYi0+bWluTG9ja1JlbGlk cyk7CisKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29w L3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggZjg4MDhkMjE5 MS4uOWMxYzdiZmE5ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisr KyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtMTU5OCw2ICsxNTk4LDcgQEAgZXhl Y19iaW5kX21lc3NhZ2UoU3RyaW5nSW5mbyBpbnB1dF9tZXNzYWdlKQogCWludDE2CSAgICpyZm9y bWF0cyA9IE5VTEw7CiAJQ2FjaGVkUGxhblNvdXJjZSAqcHNyYzsKIAlDYWNoZWRQbGFuICpjcGxh bjsKKwlDYWNoZWRQbGFuRXh0cmEgKmNwbGFuX2V4dHJhID0gTlVMTDsKIAlQb3J0YWwJCXBvcnRh bDsKIAljaGFyCSAgICpxdWVyeV9zdHJpbmc7CiAJY2hhcgkgICAqc2F2ZWRfc3RtdF9uYW1lOwpA QCAtMTk3Miw3ICsxOTczLDEwIEBAIGV4ZWNfYmluZF9tZXNzYWdlKFN0cmluZ0luZm8gaW5wdXRf bWVzc2FnZSkKIAkgKiB3aWxsIGJlIGdlbmVyYXRlZCBpbiBNZXNzYWdlQ29udGV4dC4gIFRoZSBw bGFuIHJlZmNvdW50IHdpbGwgYmUKIAkgKiBhc3NpZ25lZCB0byB0aGUgUG9ydGFsLCBzbyBpdCB3 aWxsIGJlIHJlbGVhc2VkIGF0IHBvcnRhbCBkZXN0cnVjdGlvbi4KIAkgKi8KLQljcGxhbiA9IEdl dENhY2hlZFBsYW4ocHNyYywgcGFyYW1zLCBOVUxMLCBOVUxMKTsKKwljcGxhbiA9IEdldENhY2hl ZFBsYW4ocHNyYywgcGFyYW1zLCBOVUxMLCBOVUxMLCAmY3BsYW5fZXh0cmEpOworCUFzc2VydChj cGxhbl9leHRyYSA9PSBOVUxMIHx8CisJCSAgIChsaXN0X2xlbmd0aChjcGxhbi0+c3RtdF9saXN0 KSA9PQorCQkJbGlzdF9sZW5ndGgoY3BsYW5fZXh0cmEtPnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0 KSkpOwogCiAJLyoKIAkgKiBOb3cgd2UgY2FuIGRlZmluZSB0aGUgcG9ydGFsLgpAQCAtMTk4Nyw2 ICsxOTkxLDkgQEAgZXhlY19iaW5kX21lc3NhZ2UoU3RyaW5nSW5mbyBpbnB1dF9tZXNzYWdlKQog CQkJCQkgIGNwbGFuLT5zdG10X2xpc3QsCiAJCQkJCSAgY3BsYW4pOwogCisJaWYgKGNwbGFuX2V4 dHJhKQorCQlQb3J0YWxTYXZlQ2FjaGVkUGxhbkV4dHJhKHBvcnRhbCwgY3BsYW5fZXh0cmEpOwor CiAJLyogRG9uZSB3aXRoIHRoZSBzbmFwc2hvdCB1c2VkIGZvciBwYXJhbWV0ZXIgSS9PIGFuZCBw YXJzaW5nL3BsYW5uaW5nICovCiAJaWYgKHNuYXBzaG90X3NldCkKIAkJUG9wQWN0aXZlU25hcHNo b3QoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMgYi9zcmMvYmFja2Vu ZC90Y29wL3BxdWVyeS5jCmluZGV4IDUyZTJkYjY0NTIuLjMyZTZiN2I3NjcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnku YwpAQCAtMzUsNyArMzUsNyBAQAogUG9ydGFsCQlBY3RpdmVQb3J0YWwgPSBOVUxMOwogCiAKLXN0 YXRpYyB2b2lkIFByb2Nlc3NRdWVyeShQbGFubmVkU3RtdCAqcGxhbiwKK3N0YXRpYyB2b2lkIFBy b2Nlc3NRdWVyeShQbGFubmVkU3RtdCAqcGxhbiwgTGlzdCAqcGFydF9wcnVuZV9yZXN1bHRzLAog CQkJCQkJIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkJCQkgUGFyYW1MaXN0SW5mbyBwYXJh bXMsCiAJCQkJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCkBAIC02NSw2ICs2NSw3IEBA IHN0YXRpYyB2b2lkIERvUG9ydGFsUmV3aW5kKFBvcnRhbCBwb3J0YWwpOwogICovCiBRdWVyeURl c2MgKgogQ3JlYXRlUXVlcnlEZXNjKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQlMaXN0 ICpwYXJ0X3BydW5lX3Jlc3VsdHMsCiAJCQkJY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQlT bmFwc2hvdCBzbmFwc2hvdCwKIAkJCQlTbmFwc2hvdCBjcm9zc2NoZWNrX3NuYXBzaG90LApAQCAt NzcsNiArNzgsNyBAQCBDcmVhdGVRdWVyeURlc2MoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAog CiAJcWQtPm9wZXJhdGlvbiA9IHBsYW5uZWRzdG10LT5jb21tYW5kVHlwZTsJLyogb3BlcmF0aW9u ICovCiAJcWQtPnBsYW5uZWRzdG10ID0gcGxhbm5lZHN0bXQ7CS8qIHBsYW4gKi8KKwlxZC0+cGFy dF9wcnVuZV9yZXN1bHRzID0gcGFydF9wcnVuZV9yZXN1bHRzOwogCXFkLT5zb3VyY2VUZXh0ID0g c291cmNlVGV4dDsJLyogcXVlcnkgdGV4dCAqLwogCXFkLT5zbmFwc2hvdCA9IFJlZ2lzdGVyU25h cHNob3Qoc25hcHNob3QpOwkvKiBzbmFwc2hvdCAqLwogCS8qIFJJIGNoZWNrIHNuYXBzaG90ICov CkBAIC0xMjIsNiArMTI0LDcgQEAgRnJlZVF1ZXJ5RGVzYyhRdWVyeURlc2MgKnFkZXNjKQogICoJ CVBPUlRBTF9PTkVfUkVUVVJOSU5HLCBvciBQT1JUQUxfT05FX01PRF9XSVRIIHBvcnRhbAogICoK ICAqCXBsYW46IHRoZSBwbGFuIHRyZWUgZm9yIHRoZSBxdWVyeQorICoJcGFydF9wcnVuZV9yZXN1 bHRzOiBwcnVuaW5nIHJlc3VsdHMgcmV0dXJuZWQgYnkgQ2FjaGVkUGxhbkxvY2tQYXJ0aXRpb25z KCkKICAqCXNvdXJjZVRleHQ6IHRoZSBzb3VyY2UgdGV4dCBvZiB0aGUgcXVlcnkKICAqCXBhcmFt czogYW55IHBhcmFtZXRlcnMgbmVlZGVkCiAgKglkZXN0OiB3aGVyZSB0byBzZW5kIHJlc3VsdHMK QEAgLTEzNCw2ICsxMzcsNyBAQCBGcmVlUXVlcnlEZXNjKFF1ZXJ5RGVzYyAqcWRlc2MpCiAgKi8K IHN0YXRpYyB2b2lkCiBQcm9jZXNzUXVlcnkoUGxhbm5lZFN0bXQgKnBsYW4sCisJCQkgTGlzdCAq cGFydF9wcnVuZV9yZXN1bHRzLAogCQkJIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkgUGFy YW1MaXN0SW5mbyBwYXJhbXMsCiAJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCkBAIC0x NDUsNyArMTQ5LDcgQEAgUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLAogCS8qCiAJICog Q3JlYXRlIHRoZSBRdWVyeURlc2Mgb2JqZWN0CiAJICovCi0JcXVlcnlEZXNjID0gQ3JlYXRlUXVl cnlEZXNjKHBsYW4sIHNvdXJjZVRleHQsCisJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBs YW4sIHBhcnRfcHJ1bmVfcmVzdWx0cywgc291cmNlVGV4dCwKIAkJCQkJCQkJR2V0QWN0aXZlU25h cHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52 LCAwKTsKIApAQCAtNDkxLDggKzQ5NSwxMyBAQCBQb3J0YWxTdGFydChQb3J0YWwgcG9ydGFsLCBQ YXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCQkvKgogCQkJCSAqIENyZWF0ZSBRdWVyeURlc2MgaW4g cG9ydGFsJ3MgY29udGV4dDsgZm9yIHRoZSBtb21lbnQsIHNldAogCQkJCSAqIHRoZSBkZXN0aW5h dGlvbiB0byBEZXN0Tm9uZS4KKwkJCQkgKgorCQkJCSAqIFRoZXJlIGlzIG5vIFBhcnRpdGlvblBy dW5lUmVzdWx0IHVubGVzcyB0aGUgUGxhbm5lZFN0bXQgaXMKKwkJCQkgKiBmcm9tIGEgQ2FjaGVk UGxhbi4KIAkJCQkgKi8KIAkJCQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MobGluaXRpYWxf bm9kZShQbGFubmVkU3RtdCwgcG9ydGFsLT5zdG10cyksCisJCQkJCQkJCQkJCXBvcnRhbC0+Y3Bs YW5fZXh0cmEgPT0gTlVMTCA/IE5JTCA6CisJCQkJCQkJCQkJCWxpbml0aWFsKHBvcnRhbC0+Y3Bs YW5fZXh0cmEtPnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0KSwKIAkJCQkJCQkJCQkJcG9ydGFsLT5z b3VyY2VUZXh0LAogCQkJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLAogCQkJCQkJCQkJCQlJ bnZhbGlkU25hcHNob3QsCkBAIC0xMjI1LDYgKzEyMzQsOCBAQCBQb3J0YWxSdW5NdWx0aShQb3J0 YWwgcG9ydGFsLAogCiAJCWlmIChwc3RtdC0+dXRpbGl0eVN0bXQgPT0gTlVMTCkKIAkJeworCQkJ TGlzdCAqcGFydF9wcnVuZV9yZXN1bHRzID0gTklMOworCiAJCQkvKgogCQkJICogcHJvY2VzcyBh IHBsYW5uYWJsZSBxdWVyeS4KIAkJCSAqLwpAQCAtMTI3MSwxMCArMTI4MiwxOSBAQCBQb3J0YWxS dW5NdWx0aShQb3J0YWwgcG9ydGFsLAogCQkJZWxzZQogCQkJCVVwZGF0ZUFjdGl2ZVNuYXBzaG90 Q29tbWFuZElkKCk7CiAKKwkJCS8qCisJCQkgKiBEZXRlcm1pbmUgaWYgdGhlcmUncyBhIGNvcnJl c3BvbmRpbmcgTGlzdCBvZiBQYXJ0aXRpb25QcnVuZVJlc3VsdAorCQkJICogZm9yIHRoaXMgUGxh bm5lZFN0bXQuCisJCQkgKi8KKwkJCWlmIChwb3J0YWwtPmNwbGFuX2V4dHJhKQorCQkJCXBhcnRf cHJ1bmVfcmVzdWx0cyA9IGxpc3RfbnRoX25vZGUoTGlzdCwKKwkJCQkJCQkJCQkJCSAgIHBvcnRh bC0+Y3BsYW5fZXh0cmEtPnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0LAorCQkJCQkJCQkJCQkJICAg Zm9yZWFjaF9jdXJyZW50X2luZGV4KHN0bXRsaXN0X2l0ZW0pKTsKKwogCQkJaWYgKHBzdG10LT5j YW5TZXRUYWcpCiAJCQl7CiAJCQkJLyogc3RhdGVtZW50IGNhbiBzZXQgdGFnIHN0cmluZyAqLwot CQkJCVByb2Nlc3NRdWVyeShwc3RtdCwKKwkJCQlQcm9jZXNzUXVlcnkocHN0bXQsIHBhcnRfcHJ1 bmVfcmVzdWx0cywKIAkJCQkJCQkgcG9ydGFsLT5zb3VyY2VUZXh0LAogCQkJCQkJCSBwb3J0YWwt PnBvcnRhbFBhcmFtcywKIAkJCQkJCQkgcG9ydGFsLT5xdWVyeUVudiwKQEAgLTEyODMsNyArMTMw Myw3IEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBwb3J0YWwsCiAJCQllbHNlCiAJCQl7CiAJCQkJ Lyogc3RtdCBhZGRlZCBieSByZXdyaXRlIGNhbm5vdCBzZXQgdGFnICovCi0JCQkJUHJvY2Vzc1F1 ZXJ5KHBzdG10LAorCQkJCVByb2Nlc3NRdWVyeShwc3RtdCwgcGFydF9wcnVuZV9yZXN1bHRzLAog CQkJCQkJCSBwb3J0YWwtPnNvdXJjZVRleHQsCiAJCQkJCQkJIHBvcnRhbC0+cG9ydGFsUGFyYW1z LAogCQkJCQkJCSBwb3J0YWwtPnF1ZXJ5RW52LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvcGxhbmNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUu YwppbmRleCAzMzliYjYwM2Y3Li43YmQ5NGU3NjMyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9wbGFuY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFu Y2FjaGUuYwpAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRv ci5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCIKICNpbmNsdWRlICJtaXNj YWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJvcHRpbWl6 ZXIvb3B0aW1pemVyLmgiCkBAIC05NiwxNyArOTcsMjAgQEAgc3RhdGljIGRsaXN0X2hlYWQgc2F2 ZWRfcGxhbl9saXN0ID0gRExJU1RfU1RBVElDX0lOSVQoc2F2ZWRfcGxhbl9saXN0KTsKICAqLwog c3RhdGljIGRsaXN0X2hlYWQgY2FjaGVkX2V4cHJlc3Npb25fbGlzdCA9IERMSVNUX1NUQVRJQ19J TklUKGNhY2hlZF9leHByZXNzaW9uX2xpc3QpOwogCitzdGF0aWMgQ2FjaGVkUGxhbiAqR2V0Q2Fj aGVkUGxhbkludGVybmFsKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCisJCQkJCSAgUGFy YW1MaXN0SW5mbyBib3VuZFBhcmFtcywgUmVzb3VyY2VPd25lciBvd25lciwKKwkJCQkJICBRdWVy eUVudmlyb25tZW50ICpxdWVyeUVudiwgYm9vbCAqaGFzVW5sb2NrZWRQYXJ0cyk7CiBzdGF0aWMg dm9pZCBSZWxlYXNlR2VuZXJpY1BsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSk7CiBz dGF0aWMgTGlzdCAqUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5z b3VyY2UsCiAJCQkJCQkJCSAgIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsKLXN0YXRpYyBi b29sIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKTsKK3N0YXRp YyBib29sIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBib29s ICpoYXNVbmxvY2tlZFBhcnRzKTsKIHN0YXRpYyBDYWNoZWRQbGFuICpCdWlsZENhY2hlZFBsYW4o Q2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgTGlzdCAqcWxpc3QsCiAJCQkJCQkJCSAgIFBh cmFtTGlzdEluZm8gYm91bmRQYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsKIHN0 YXRpYyBib29sIGNob29zZV9jdXN0b21fcGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNl LAogCQkJCQkJCSAgIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMpOwogc3RhdGljIGRvdWJsZSBj YWNoZWRfcGxhbl9jb3N0KENhY2hlZFBsYW4gKnBsYW4sIGJvb2wgaW5jbHVkZV9wbGFubmVyKTsK IHN0YXRpYyBRdWVyeSAqUXVlcnlMaXN0R2V0UHJpbWFyeVN0bXQoTGlzdCAqc3RtdHMpOwotc3Rh dGljIHZvaWQgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVp cmUpOworc3RhdGljIGJvb2wgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBi b29sIGFjcXVpcmUpOwogc3RhdGljIHZvaWQgQWNxdWlyZVBsYW5uZXJMb2NrcyhMaXN0ICpzdG10 X2xpc3QsIGJvb2wgYWNxdWlyZSk7CiBzdGF0aWMgdm9pZCBTY2FuUXVlcnlGb3JMb2NrcyhRdWVy eSAqcGFyc2V0cmVlLCBib29sIGFjcXVpcmUpOwogc3RhdGljIGJvb2wgU2NhblF1ZXJ5V2Fsa2Vy KE5vZGUgKm5vZGUsIGJvb2wgKmFjcXVpcmUpOwpAQCAtNzgzLDE2ICs3ODcsMjMgQEAgUmV2YWxp ZGF0ZUNhY2hlZFF1ZXJ5KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiB9CiAKIC8qCi0g KiBDaGVja0NhY2hlZFBsYW46IHNlZSBpZiB0aGUgQ2FjaGVkUGxhblNvdXJjZSdzIGdlbmVyaWMg cGxhbiBpcyB2YWxpZC4KKyAqIENoZWNrQ2FjaGVkUGxhbjogc2VlIGlmIHRoZSBDYWNoZWRQbGFu U291cmNlJ3MgZ2VuZXJpYyBwbGFuIGlzIHZhbGlkIGFuZAorICogc2V0ICpoYXNVbmxvY2tlZFBh cnRzIGlmIGFueSBQbGFubmVkU3RtdCBjb250YWlucyAiaW5pdGlhbGx5IiBwcnVuYWJsZQorICog c3Vibm9kZXM7IHBhcnRpdGlvbnMgYXJlIG5vdCBsb2NrZWQgdGlsbCBpbml0aWFsIHBydW5pbmcg aXMgZG9uZS4KICAqCiAgKiBDYWxsZXIgbXVzdCBoYXZlIGFscmVhZHkgY2FsbGVkIFJldmFsaWRh dGVDYWNoZWRRdWVyeSB0byB2ZXJpZnkgdGhhdCB0aGUKICAqIHF1ZXJ5dHJlZSBpcyB1cCB0byBk YXRlLgogICoKLSAqIE9uIGEgInRydWUiIHJldHVybiwgd2UgaGF2ZSBhY3F1aXJlZCB0aGUgbG9j a3MgbmVlZGVkIHRvIHJ1biB0aGUgcGxhbi4KKyAqIE9uIGEgInRydWUiIHJldHVybiwgd2UgaGF2 ZSBhY3F1aXJlZCB0aGUgbWluaW1hbCBzZXQgb2YgbG9ja3MgbmVlZGVkIHRvIHJ1bgorICogdGhl IHBsYW4sIHRoYXQgaXMsIGV4Y2x1ZGluZyBwYXJ0aXRpb25zIHRoYXQgYXJlIHN1YmplY3QgdG8g YmVpbmcgcHJ1bmVkCisgKiBiZWZvcmUgZXhlY3V0aW9uLiAgVGhlIGNhbGxlciBtdXN0IGxvY2sg cGFydGl0aW9ucyBhZnRlciBwcnVuaW5nIHRob3NlIGFuZAorICogbG9ja2luZyB0aGUgb25lcyB0 aGF0IHJlbWFpbiBiZWZvcmUgYWN0dWFsbHkgdGVsbGluZyB0aGUgd29ybGQgdGhhdCB0aGUKKyAq IHBsYW4gaXMgInZhbGlkIi4KKyAqCiAgKiAoV2UgbXVzdCBkbyB0aGlzIGZvciB0aGUgInRydWUi IHJlc3VsdCB0byBiZSByYWNlLWNvbmRpdGlvbi1mcmVlLikKICAqLwogc3RhdGljIGJvb2wKLUNo ZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKQorQ2hlY2tDYWNoZWRQ bGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIGJvb2wgKmhhc1VubG9ja2VkUGFydHMp CiB7CiAJQ2FjaGVkUGxhbiAqcGxhbiA9IHBsYW5zb3VyY2UtPmdwbGFuOwogCkBAIC04MjYsNyAr ODM3LDcgQEAgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpCiAJ CSAqLwogCQlBc3NlcnQocGxhbi0+cmVmY291bnQgPiAwKTsKIAotCQlBY3F1aXJlRXhlY3V0b3JM b2NrcyhwbGFuLT5zdG10X2xpc3QsIHRydWUpOworCQkqaGFzVW5sb2NrZWRQYXJ0cyA9IEFjcXVp cmVFeGVjdXRvckxvY2tzKHBsYW4tPnN0bXRfbGlzdCwgdHJ1ZSk7CiAKIAkJLyoKIAkJICogSWYg cGxhbiB3YXMgdHJhbnNpZW50LCBjaGVjayB0byBzZWUgaWYgVHJhbnNhY3Rpb25YbWluIGhhcwpA QCAtODQ4LDcgKzg1OSw3IEBAIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFu c291cmNlKQogCQl9CiAKIAkJLyogT29wcywgdGhlIHJhY2UgY2FzZSBoYXBwZW5lZC4gIFJlbGVh c2UgdXNlbGVzcyBsb2Nrcy4gKi8KLQkJQWNxdWlyZUV4ZWN1dG9yTG9ja3MocGxhbi0+c3RtdF9s aXN0LCBmYWxzZSk7CisJCSh2b2lkKSBBY3F1aXJlRXhlY3V0b3JMb2NrcyhwbGFuLT5zdG10X2xp c3QsIGZhbHNlKTsKIAl9CiAKIAkvKgpAQCAtMTEyMCw3ICsxMTMxLDEyNSBAQCBjYWNoZWRfcGxh bl9jb3N0KENhY2hlZFBsYW4gKnBsYW4sIGJvb2wgaW5jbHVkZV9wbGFubmVyKQogfQogCiAvKgot ICogR2V0Q2FjaGVkUGxhbjogZ2V0IGEgY2FjaGVkIHBsYW4gZnJvbSBhIENhY2hlZFBsYW5Tb3Vy Y2UuCisgKiBGb3IgZWFjaCBQbGFubmVkU3RtdCBpbiBwbGFuLT5zdG10X2xpc3QsIGRvIGluaXRp YWwgcGFydGl0aW9uIHBydW5pbmcgaWYKKyAqIG5lZWRlZCBhbmQgbG9jayBwYXJ0aXRpb25zIHRo YXQgc3Vydml2ZS4KKyAqCisgKiBUaGUgcmV0dXJuZWQgbGlzdCBvZiB0aGUgc2FtZSBsZW5ndGgg YXMgcGxhbi0+c3RtdF9saXN0IHdpbGwgY29udGFpbnMgZWl0aGVyCisgKiBhIE5JTCBpZiB0aGUg UGxhbm5lZFN0bXQgZGlkIG5vdCBjb250YWluIGFueSBQYXJ0aXRpb25QcnVuZUluZm9zIHJlcXVp cmluZworICogaW5pdGlhbCBwcnVuaW5nIG9yIGEgTGlzdCBvZiBQYXJ0aXRpb25QcnVuZVJlc3Vs dCB0aGF0IGluIHR1cm4gY29udGFpbnMKKyAqIGFuIGVsZW1lbnQgZm9yIGVhY2ggUGFydGl0aW9u UHJ1bmVJbmZvIGZvdW5kIGluIHN0bXQtPnBhcnRQcnVuZUluZm9zLgorICoKKyAqIEFsc28sIG9u IHJldHVybiwgKmxvY2tlZFJlbGlkc19wZXJfc3RtdCwgdGhhdCB3aWxsIGJlIG1hZGUgb2YgdGhl IHNhbWUKKyAqIGxlbmd0aCBhcyBwbGFuLT5zdG10X2xpc3QsIHdpbGwgY29udGFpbiBlaXRoZXIg YSBOVUxMIGlmIG5vIGFkZGl0aW9uYWwKKyAqIHJlbGF0aW9ucyBuZWVkZWQgdG8gYmUgbG9ja2Vk IGZvciB0aGUgUGxhbm5lZFN0bXQsIG9yIGEgYml0bWFwc2V0IG9mIFJUCisgKiBpbmRleGVzIG9m IHBhcnRpdGlvbnMgbG9ja2VkLgorICovCitzdGF0aWMgYm9vbAorQ2FjaGVkUGxhbkxvY2tQYXJ0 aXRpb25zKENhY2hlZFBsYW4gKnBsYW4sCisJCQkJCQkgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFt cywKKwkJCQkJCSBSZXNvdXJjZU93bmVyIG93bmVyLAorCQkJCQkJIExpc3QgKipwYXJ0X3BydW5l X3Jlc3VsdHNfbGlzdCwKKwkJCQkJCSBMaXN0ICoqbG9ja2VkUmVsaWRzX3Blcl9zdG10KQorewor CUxpc3QJICAgKm15X3BhcnRfcHJ1bmVfcmVzdWx0c19saXN0ID0gTklMOworCUxpc3QJICAgKm15 X2xvY2tlZFJlbGlkc19wZXJfc3RtdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzE7CisJTWVtb3J5 Q29udGV4dCBvbGRjb250ZXh0LAorCQkJdG1wY29udGV4dDsKKworCSpwYXJ0X3BydW5lX3Jlc3Vs dHNfbGlzdCA9IE5JTDsKKwkqbG9ja2VkUmVsaWRzX3Blcl9zdG10ID0gTklMOworCisJLyoKKwkg KiBDcmVhdGUgYSB0ZW1wb3JhcnkgY29udGV4dCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIHJlcXVp cmVkIHdoaWxlCisJICogZXhlY3V0aW5nIHBhcnRpdGlvbiBwcnVuaW5nIHN0ZXBzLgorCSAqLwor CXRtcGNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQs CisJCQkJCQkJCQkgICAiQ2FjaGVkUGxhbkxvY2tQYXJ0aXRpb25zKCkgd29ya2luZyBkYXRhIiwK KwkJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCW9sZGNvbnRleHQgPSBNZW1v cnlDb250ZXh0U3dpdGNoVG8odG1wY29udGV4dCk7CisJZm9yZWFjaChsYzEsIHBsYW4tPnN0bXRf bGlzdCkKKwl7CisJCVBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5u ZWRTdG10LCBsYzEpOworCQlCaXRtYXBzZXQgICpsb2NrUGFydFJlbGlkcyA9IE5VTEw7CisJCWlu dAkJCXJ0aTsKKwkJTGlzdAkgICAqcGFydF9wcnVuZV9yZXN1bHRzID0gTklMOworCQlCaXRtYXBz ZXQgICpsb2NrZWRSZWxpZHMgPSBOVUxMOworCisJCWlmIChwbGFubmVkc3RtdC0+Y29tbWFuZFR5 cGUgPT0gQ01EX1VUSUxJVFkpCisJCXsKKwkJCS8qCisJCQkgKiBJZ25vcmUgdXRpbGl0eSBzdGF0 ZW1lbnRzLCBiZWNhdXNlIEFjcXVpcmVFeGVjdXRvckxvY2tzIG9uIHRoZQorCQkJICogcGFyZW50 IENhY2hlZFBsYW4gd291bGQgaGF2ZSBkZWFsdCB3aXRoIHRoZXNlLiAgVGhvdWdoLCBkbyBsZXQK KwkJCSAqIHRoZSBjYWxsZXIga25vdyB0aGF0IG5vIHBydW5pbmcgaXMgYXBwbGljYWJsZSB0byB0 aGlzIHN0YXRlbWVudC4KKwkJCSAqLworCQkJbXlfcGFydF9wcnVuZV9yZXN1bHRzX2xpc3QgPSBs YXBwZW5kKG15X3BhcnRfcHJ1bmVfcmVzdWx0c19saXN0LAorCQkJCQkJCQkJCQkJIE5JTCk7CisJ CQkqbG9ja2VkUmVsaWRzX3Blcl9zdG10ID0gbGFwcGVuZCgqbG9ja2VkUmVsaWRzX3Blcl9zdG10 LCBOVUxMKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogRmlndXJlIG91dCB0aGUgcGFydGl0 aW9ucyB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgbG9ja2VkLiAqLworCQlpZiAocGxhbm5lZHN0bXQt PmNvbnRhaW5zSW5pdGlhbFBydW5pbmcpCisJCXsKKwkJCUxpc3RDZWxsICpsYzI7CisKKwkJCWZv cmVhY2gobGMyLCBwbGFubmVkc3RtdC0+cGFydFBydW5lSW5mb3MpCisJCQl7CisJCQkJUGFydGl0 aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8gPSBsZmlyc3Rfbm9kZShQYXJ0aXRpb25QcnVuZUluZm8s IGxjMik7CisJCQkJUGFydGl0aW9uUHJ1bmVSZXN1bHQgKnBydW5lcmVzdWx0ID0gbWFrZU5vZGUo UGFydGl0aW9uUHJ1bmVSZXN1bHQpOworCisJCQkJcHJ1bmVyZXN1bHQtPnJvb3RfcGFyZW50X3Jl bGlkcyA9CisJCQkJCWJtc19jb3B5KHBydW5laW5mby0+cm9vdF9wYXJlbnRfcmVsaWRzKTsKKwkJ CQlwcnVuZXJlc3VsdC0+dmFsaWRfc3VicGxhbl9vZmZzID0KKwkJCQkJRXhlY1BhcnRpdGlvbkRv SW5pdGlhbFBydW5pbmcocGxhbm5lZHN0bXQsIGJvdW5kUGFyYW1zLAorCQkJCQkJCQkJCQkJICBw cnVuZWluZm8sCisJCQkJCQkJCQkJCQkgICZsb2NrUGFydFJlbGlkcyk7CisJCQkJcGFydF9wcnVu ZV9yZXN1bHRzID0gbGFwcGVuZChwYXJ0X3BydW5lX3Jlc3VsdHMsIHBydW5lcmVzdWx0KTsKKwkJ CX0KKwkJfQorCisJCXJ0aSA9IC0xOworCQl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihs b2NrUGFydFJlbGlkcywgcnRpKSkgPiAwKQorCQl7CisJCQlSYW5nZVRibEVudHJ5ICpydGUgPSBy dF9mZXRjaChydGksIHBsYW5uZWRzdG10LT5ydGFibGUpOworCisJCQlBc3NlcnQocnRlLT5ydGVr aW5kID09IFJURV9SRUxBVElPTik7CisKKwkJCS8qCisJCQkgKiBBY3F1aXJlIHRoZSBhcHByb3By aWF0ZSB0eXBlIG9mIGxvY2sgb24gZWFjaCByZWxhdGlvbiBPSUQuIE5vdGUKKwkJCSAqIHRoYXQg d2UgZG9uJ3QgYWN0dWFsbHkgdHJ5IHRvIG9wZW4gdGhlIHJlbCwgYW5kIGhlbmNlIHdpbGwgbm90 CisJCQkgKiBmYWlsIGlmIGl0J3MgYmVlbiBkcm9wcGVkIGVudGlyZWx5IC0tLSB3ZSdsbCBqdXN0 IHRyYW5zaWVudGx5CisJCQkgKiBhY3F1aXJlIGEgbm9uLWNvbmZsaWN0aW5nIGxvY2suCisJCQkg Ki8KKwkJCUxvY2tSZWxhdGlvbk9pZChydGUtPnJlbGlkLCBydGUtPnJlbGxvY2ttb2RlKTsKKwkJ CWxvY2tlZFJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKGxvY2tlZFJlbGlkcywgcnRpKTsKKwkJfQor CisJCW15X3BhcnRfcHJ1bmVfcmVzdWx0c19saXN0ID0gbGFwcGVuZChteV9wYXJ0X3BydW5lX3Jl c3VsdHNfbGlzdCwKKwkJCQkJCQkJCQkJIHBhcnRfcHJ1bmVfcmVzdWx0cyk7CisJCW15X2xvY2tl ZFJlbGlkc19wZXJfc3RtdCA9IGxhcHBlbmQobXlfbG9ja2VkUmVsaWRzX3Blcl9zdG10LAorCQkJ CQkJCQkJCSAgIGxvY2tlZFJlbGlkcyk7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgcGxhbiBpcyBz dGlsbCB2YWxpZCwgY29weSB0aGUgcHJ1bmUgcmVzdWx0cyBhbmQgbG9ja1JlbGlkcworCSAqIGJp dG1hcHNldHMgaW50byB0aGUgY2FsbGVyJ3MgY29udGV4dC4KKwkgKi8KKwlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY29udGV4dCk7CisJaWYgKHBsYW4tPmlzX3ZhbGlkKQorCXsKKwkJKnBhcnRf cHJ1bmVfcmVzdWx0c19saXN0ID0gY29weU9iamVjdChteV9wYXJ0X3BydW5lX3Jlc3VsdHNfbGlz dCk7CisJCSpsb2NrZWRSZWxpZHNfcGVyX3N0bXQgPSBjb3B5T2JqZWN0KG15X2xvY2tlZFJlbGlk c19wZXJfc3RtdCk7CisJfQorCisJLyogQ2xlYXIgdXAgdGhlIHRlbXBvcmFyeSBjb250ZXh0LiAq LworCU1lbW9yeUNvbnRleHREZWxldGUodG1wY29udGV4dCk7CisJcmV0dXJuIHBsYW4tPmlzX3Zh bGlkOworfQorCisvKgorICogR2V0Q2FjaGVkUGxhbjogZ2V0IGEgY2FjaGVkIHBsYW4gZnJvbSBh IENhY2hlZFBsYW5Tb3VyY2UKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGhpZGVzIHRoZSBsb2dpYyB0 aGF0IGRlY2lkZXMgd2hldGhlciB0byB1c2UgYSBnZW5lcmljCiAgKiBwbGFuIG9yIGEgY3VzdG9t IHBsYW4gZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXJzOiB0aGUgY2FsbGVyIGRvZXMgbm90IGtub3cK QEAgLTExMzksNyArMTI2OCw5NyBAQCBjYWNoZWRfcGxhbl9jb3N0KENhY2hlZFBsYW4gKnBsYW4s IGJvb2wgaW5jbHVkZV9wbGFubmVyKQogICovCiBDYWNoZWRQbGFuICoKIEdldENhY2hlZFBsYW4o Q2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywK LQkJCSAgUmVzb3VyY2VPd25lciBvd25lciwgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpCisJ CQkgIFJlc291cmNlT3duZXIgb3duZXIsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAorCQkJ ICBDYWNoZWRQbGFuRXh0cmEgKipleHRyYSkKK3sKKwlDYWNoZWRQbGFuICpwbGFuOworCisJQXNz ZXJ0KGV4dHJhICE9IE5VTEwpOworCSpleHRyYSA9IE5VTEw7CisJZm9yICg7OykKKwl7CisJCWJv b2wJaGFzVW5sb2NrZWRQYXJ0cyA9IGZhbHNlOworCisJCS8qIEFjdHVhbGx5IGdldCB0aGUgcGxh bi4gKi8KKwkJcGxhbiA9IEdldENhY2hlZFBsYW5JbnRlcm5hbChwbGFuc291cmNlLCBib3VuZFBh cmFtcywgb3duZXIsIHF1ZXJ5RW52LAorCQkJCQkJCQkJICZoYXNVbmxvY2tlZFBhcnRzKTsKKwkJ QXNzZXJ0KHBsYW4tPmlzX3ZhbGlkKTsKKworCQkvKiBOb3RoaW5nIHRvIGRvIGlmIGFsbCByZWxh dGlvbnMgYWxyZWFkeSBsb2NrZWQuICovCisJCWlmICghaGFzVW5sb2NrZWRQYXJ0cykKKwkJCXJl dHVybiBwbGFuOworCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBEbyBpbml0aWFsIHBydW5pbmcg dG8gZmlsdGVyIG91dCBwYXJ0aXRpb25zIHRoYXQgbmVlZCBub3QgYmUKKwkJCSAqIGxvY2tlZCBm b3IgZXhlY3V0aW9uLgorCQkJICovCisJCQlMaXN0Q2VsbCAqbGMxLAorCQkJCSAgICpsYzI7CisJ CQlMaXN0ICAgKnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0OworCQkJTGlzdCAgICpsb2NrZWRSZWxp ZHNfcGVyX3N0bXQ7CisKKwkJCS8qIE9ubHkgYSBnZW5lcmljIHBsYW4gY2FuIGV2ZXIgaGF2ZSB1 bmxvY2tlZCBwYXJ0aXRpb25zIGluIGl0LiAqLworCQkJQXNzZXJ0KHBsYW4gPT0gcGxhbnNvdXJj ZS0+Z3BsYW4pOworCisJCQkvKgorCQkJICogVGhpcyBkb2VzOgorCQkJICoKKwkJCSAqIAkxKSB0 aGUgcHJ1bmluZywgcmV0dXJuaW5nIGluIHBhcnRfcHJ1bmVfcmVzdWx0c19saXN0IHRoZQorCQkJ ICogCVBhcnRpdGlvblBydW5lUmVzdWx0IExpc3RzIGZvciBhbGwgc3RhdGVtZW50cworCQkJICoK KwkJCSAqIAkyKSBsb2NrIHBhcnRpdGlvbnMgdGhhdCBzdXJ2aXZlIGluIGVhY2ggc3RhdGVtZW50 LCByZXR1cm5pbmcKKwkJCSAqIAlpbiBsb2NrZWRSZWxpZHNfcGVyX3N0bXQgdGhlIFJUIGluZGV4 ZXMgb2YgdGhvc2UgbG9ja2VkLgorCQkJICoKKwkJCSAqIFRydWUgaXMgcmV0dXJuZWQgaWYgdGhl IHBsYW4gaXMgc3RpbGwgdmFsaWQgYWZ0ZXIgbG9ja2luZyBhbGwKKwkJCSAqIHBhcnRpdGlvbnM7 IGZhbHNlIG90aGVyd2lzZSwgaW4gd2hpY2ggY2FzZSB3ZSBtdXN0IGdldCBhIG5ldworCQkJICog cGxhbi4KKwkJCSAqLworCQkJaWYgKENhY2hlZFBsYW5Mb2NrUGFydGl0aW9ucyhwbGFuLCBib3Vu ZFBhcmFtcywgb3duZXIsCisJCQkJCQkJCQkJICZwYXJ0X3BydW5lX3Jlc3VsdHNfbGlzdCwKKwkJ CQkJCQkJCQkgJmxvY2tlZFJlbGlkc19wZXJfc3RtdCkpCisJCQl7CisJCQkJQXNzZXJ0KHBsYW4t PmlzX3ZhbGlkKTsKKwkJCQkqZXh0cmEgPSAoQ2FjaGVkUGxhbkV4dHJhICopIHBhbGxvYyhzaXpl b2YoQ2FjaGVkUGxhbkV4dHJhKSk7CisJCQkJKCpleHRyYSktPnBhcnRfcHJ1bmVfcmVzdWx0c19s aXN0ID0gcGFydF9wcnVuZV9yZXN1bHRzX2xpc3Q7CisJCQkJcmV0dXJuIHBsYW47CisJCQl9CisK KwkJCS8qCisJCQkgKiBSZWxlYXNlIHRoZSBsb2NrcyBhbmQgc3RhcnQgb3Zlci4gIFRoaXMgaXMg dGhlIHNhbWUgYXMgd2hhdAorCQkJICogQ2hlY2tDYWNoZWRQbGFuIGRvZXMgd2hlbiBkb2luZyBB Y3F1aXJlRXhlY3V0b3JMb2NrcygpIGNhdXNlcworCQkJICogdGhlIHBsYW4gdG8gYmUgaW52YWxp ZGF0ZWQuCisJCQkgKi8KKwkJCWZvcmJvdGgobGMxLCBwbGFuLT5zdG10X2xpc3QsIGxjMiwgbG9j a2VkUmVsaWRzX3Blcl9zdG10KQorCQkJeworCQkJCVBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCA9 IGxmaXJzdChsYzEpOworCQkJCUJpdG1hcHNldCAqbG9ja2VkUmVsaWRzID0gbGZpcnN0KGxjMik7 CisJCQkJaW50CQlydGk7CisKKwkJCQlpZiAocGxhbm5lZHN0bXQtPmNvbW1hbmRUeXBlID09IENN RF9VVElMSVRZKQorCQkJCQljb250aW51ZTsKKwkJCQlydGkgPSAtMTsKKwkJCQl3aGlsZSAoKHJ0 aSA9IGJtc19uZXh0X21lbWJlcihsb2NrZWRSZWxpZHMsIHJ0aSkpID4gMCkKKwkJCQl7CisJCQkJ CVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcGxhbm5lZHN0bXQtPnJ0YWJsZSk7 CisKKwkJCQkJQXNzZXJ0KHJ0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04pOworCisJCQkJCVVu bG9ja1JlbGF0aW9uT2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOworCQkJCX0KKwkJ CX0KKwkJfQorCX0KKworCUFzc2VydChmYWxzZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIElu dGVybmFsIHdvcmtob3JzZSBvZiBHZXRDYWNoZWRQbGFuKCkgKi8KK3N0YXRpYyBDYWNoZWRQbGFu ICoKK0dldENhY2hlZFBsYW5JbnRlcm5hbChDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQ YXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zLAorCQkJCQkgIFJlc291cmNlT3duZXIgb3duZXIsIFF1 ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAorCQkJCQkgIGJvb2wgKmhhc1VubG9ja2VkUGFydHMp CiB7CiAJQ2FjaGVkUGxhbiAqcGxhbiA9IE5VTEw7CiAJTGlzdAkgICAqcWxpc3Q7CkBAIC0xMTYw LDcgKzEzNzksNyBAQCBHZXRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2Us IFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCiAKIAlpZiAoIWN1c3RvbXBsYW4pCiAJewotCQlp ZiAoQ2hlY2tDYWNoZWRQbGFuKHBsYW5zb3VyY2UpKQorCQlpZiAoQ2hlY2tDYWNoZWRQbGFuKHBs YW5zb3VyY2UsIGhhc1VubG9ja2VkUGFydHMpKQogCQl7CiAJCQkvKiBXZSB3YW50IGEgZ2VuZXJp YyBwbGFuLCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEgdmFsaWQgb25lICovCiAJCQlwbGFuID0gcGxh bnNvdXJjZS0+Z3BsYW47CkBAIC0xNzM4LDExICsxOTU3LDE2IEBAIFF1ZXJ5TGlzdEdldFByaW1h cnlTdG10KExpc3QgKnN0bXRzKQogLyoKICAqIEFjcXVpcmVFeGVjdXRvckxvY2tzOiBhY3F1aXJl IGxvY2tzIG5lZWRlZCBmb3IgZXhlY3V0aW9uIG9mIGEgY2FjaGVkIHBsYW47CiAgKiBvciByZWxl YXNlIHRoZW0gaWYgYWNxdWlyZSBpcyBmYWxzZS4KKyAqCisgKiBJZiBzb21lIFBsYW5uZWRTdG10 KHMpIGNvbnRhaW4gImluaXRpYWxseSBwcnVuYWJsZSIgcGFydGl0aW9ucywgdGhleSBhcmUgbm90 CisgKiBsb2NrZWQgaGVyZS4gSW5zdGVhZCwgdGhlIGNhbGxlciBpcyBpbmZvcm1lZCBvZiB0aGVp ciBleGlzdGVuY2Ugc28gdGhhdCBpdAorICogY2FuIGxvY2sgdGhlbSBhZnRlciBkb2luZyB0aGUg aW5pdGlhbCBwcnVuaW5nLgogICovCi1zdGF0aWMgdm9pZAorc3RhdGljIGJvb2wKIEFjcXVpcmVF eGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKQogewogCUxpc3RDZWxs ICAgKmxjMTsKKwlib29sCQloYXNVbmxvY2tlZFBhcnRzID0gZmFsc2U7CiAKIAlmb3JlYWNoKGxj MSwgc3RtdF9saXN0KQogCXsKQEAgLTE3NjMsMTAgKzE5ODcsMTcgQEAgQWNxdWlyZUV4ZWN1dG9y TG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpCiAKIAkJCUFzc2VydChwbGFubmVk c3RtdC0+bWluTG9ja1JlbGlkcyA9PSBOVUxMKTsKIAkJCWlmIChxdWVyeSkKLQkJCQlTY2FuUXVl cnlGb3JMb2NrcyhxdWVyeSwgYWNxdWlyZSk7CisJCQkJU2NhblF1ZXJ5Rm9yTG9ja3MocXVlcnks IHRydWUpOwogCQkJY29udGludWU7CiAJCX0KIAorCQkvKgorCQkgKiBJZiBwYXJ0aXRpb25zIGNh biBiZSBwcnVuZWQgYmVmb3JlIGV4ZWN1dGlvbiwgZGVmZXIgdGhlaXIgbG9ja2luZyB0bworCQkg KiB0aGUgY2FsbGVyLgorCQkgKi8KKwkJaWYgKHBsYW5uZWRzdG10LT5jb250YWluc0luaXRpYWxQ cnVuaW5nKQorCQkJaGFzVW5sb2NrZWRQYXJ0cyA9IHRydWU7CisKIAkJYWxsTG9ja1JlbGlkcyA9 IHBsYW5uZWRzdG10LT5taW5Mb2NrUmVsaWRzOwogCQlydGkgPSAtMTsKIAkJd2hpbGUgKChydGkg PSBibXNfbmV4dF9tZW1iZXIoYWxsTG9ja1JlbGlkcywgcnRpKSkgPiAwKQpAQCAtMTc4OCw2ICsy MDE5LDggQEAgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVp cmUpCiAJCQkJVW5sb2NrUmVsYXRpb25PaWQocnRlLT5yZWxpZCwgcnRlLT5yZWxsb2NrbW9kZSk7 CiAJCX0KIAl9CisKKwlyZXR1cm4gaGFzVW5sb2NrZWRQYXJ0czsKIH0KIAogLyoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMgYi9zcmMvYmFja2VuZC91dGls cy9tbWdyL3BvcnRhbG1lbS5jCmluZGV4IDdiMWFlNmZkY2YuLjk0YTlkYjg0ZTMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvbW1nci9wb3J0YWxtZW0uYwpAQCAtMzAzLDYgKzMwMywyMiBAQCBQb3J0YWxEZWZpbmVR dWVyeShQb3J0YWwgcG9ydGFsLAogCXBvcnRhbC0+c3RhdHVzID0gUE9SVEFMX0RFRklORUQ7CiB9 CiAKKy8qCisgKiBDb3BpZXMgdGhlIGdpdmVuIENhY2hlZFBsYW5FeHRyYSBzdHJ1Y3QgaW50byB0 aGUgcG9ydGFsLgorICovCit2b2lkCitQb3J0YWxTYXZlQ2FjaGVkUGxhbkV4dHJhKFBvcnRhbCBw b3J0YWwsIENhY2hlZFBsYW5FeHRyYSAqZXh0cmEpCit7CisJTWVtb3J5Q29udGV4dAlvbGRjeHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocG9ydGFsLT5wb3J0YWxDb250ZXh0KTsKKworCUFzc2Vy dChwb3J0YWwtPmNwbGFuX2V4dHJhID09IE5VTEwgJiYgZXh0cmEgIT0gTlVMTCk7CisJcG9ydGFs LT5jcGxhbl9leHRyYSA9IChDYWNoZWRQbGFuRXh0cmEgKikKKwkJcGFsbG9jKHNpemVvZihDYWNo ZWRQbGFuRXh0cmEpKTsKKwlwb3J0YWwtPmNwbGFuX2V4dHJhLT5wYXJ0X3BydW5lX3Jlc3VsdHNf bGlzdCA9CisJCWNvcHlPYmplY3QoZXh0cmEtPnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0KTsKKwlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKwogLyoKICAqIFBvcnRhbFJlbGVhc2VD YWNoZWRQbGFuCiAgKgkJUmVsZWFzZSBhIHBvcnRhbCdzIHJlZmVyZW5jZSB0byBpdHMgY2FjaGVk IHBsYW4sIGlmIGFueS4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4u aCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAppbmRleCA5ZWJkZTA4OWFlLi4yNjlj YzRkNTYyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysrIGIv c3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCkBAIC04Nyw3ICs4Nyw5IEBAIGV4dGVybiB2 b2lkIEV4cGxhaW5PbmVVdGlsaXR5KE5vZGUgKnV0aWxpdHlTdG10LCBJbnRvQ2xhdXNlICppbnRv LAogCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcywgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCiAJ CQkJCQkJICBQYXJhbUxpc3RJbmZvIHBhcmFtcywgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYp OwogCi1leHRlcm4gdm9pZCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQs IEludG9DbGF1c2UgKmludG8sCitleHRlcm4gdm9pZCBFeHBsYWluT25lUGxhbihQbGFubmVkU3Rt dCAqcGxhbm5lZHN0bXQsCisJCQkJCQkgICBMaXN0ICpwYXJ0X3BydW5lX3Jlc3VsdHMsCisJCQkJ CQkgICBJbnRvQ2xhdXNlICppbnRvLAogCQkJCQkJICAgRXhwbGFpblN0YXRlICplcywgY29uc3Qg Y2hhciAqcXVlcnlTdHJpbmcsCiAJCQkJCQkgICBQYXJhbUxpc3RJbmZvIHBhcmFtcywgUXVlcnlF bnZpcm9ubWVudCAqcXVlcnlFbnYsCiAJCQkJCQkgICBjb25zdCBpbnN0cl90aW1lICpwbGFuZHVy YXRpb24sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgg Yi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKaW5kZXggYWVlYWViNzg4NC4u NGI5OGQwZDJlZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlv bi5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaApAQCAtMTI5LDUg KzEyOSwxMCBAQCBleHRlcm4gUGFydGl0aW9uUHJ1bmVTdGF0ZSAqRXhlY0luaXRQYXJ0aXRpb25Q cnVuaW5nKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCQkJCQkJCQkJCQkJCSBCaXRtYXBzZXQgKnJv b3RfcGFyZW50X3JlbGlkcywKIAkJCQkJCQkJCQkJCQkgQml0bWFwc2V0ICoqaW5pdGlhbGx5X3Zh bGlkX3N1YnBsYW5zKTsKIGV4dGVybiBCaXRtYXBzZXQgKkV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFu cyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAotCQkJCQkJCQkJCSAgIGJvb2wgaW5p dGlhbF9wcnVuZSk7CisJCQkJCQkJCQkJICAgYm9vbCBpbml0aWFsX3BydW5lLAorCQkJCQkJCQkJ CSAgIEJpdG1hcHNldCAqKnNjYW5fbGVhZnBhcnRfcnRpcyk7CitleHRlcm4gQml0bWFwc2V0ICpF eGVjUGFydGl0aW9uRG9Jbml0aWFsUHJ1bmluZyhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsCisJ CQkJCQkJCVBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJCQkJCQlQYXJ0aXRpb25QcnVuZUluZm8g KnBydW5laW5mbywKKwkJCQkJCQkJQml0bWFwc2V0ICoqc2Nhbl9sZWFmcGFydF9ydGlzKTsKICNl bmRpZgkJCQkJCQkvKiBFWEVDUEFSVElUSU9OX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWNkZXNjLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oCmlu ZGV4IGU3OWUyYzAwMWYuLjVhN2QwNzU3NTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1 dG9yL2V4ZWNkZXNjLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaApAQCAt MzUsNiArMzUsOCBAQCB0eXBlZGVmIHN0cnVjdCBRdWVyeURlc2MKIAkvKiBUaGVzZSBmaWVsZHMg YXJlIHByb3ZpZGVkIGJ5IENyZWF0ZVF1ZXJ5RGVzYyAqLwogCUNtZFR5cGUJCW9wZXJhdGlvbjsJ CS8qIENNRF9TRUxFQ1QsIENNRF9VUERBVEUsIGV0Yy4gKi8KIAlQbGFubmVkU3RtdCAqcGxhbm5l ZHN0bXQ7CS8qIHBsYW5uZXIncyBvdXRwdXQgKGNvdWxkIGJlIHV0aWxpdHksIHRvbykgKi8KKwlM aXN0CQkqcGFydF9wcnVuZV9yZXN1bHRzOyAvKiBQYXJ0aXRpb25QcnVuZVJlc3VsdHMgcmV0dXJu ZWQgYnkKKwkJCQkJCQkJCSAgKiBDYWNoZWRQbGFuTG9ja1BhcnRpdGlvbnMoKSAqLwogCWNvbnN0 IGNoYXIgKnNvdXJjZVRleHQ7CQkvKiBzb3VyY2UgdGV4dCBvZiB0aGUgcXVlcnkgKi8KIAlTbmFw c2hvdAlzbmFwc2hvdDsJCS8qIHNuYXBzaG90IHRvIHVzZSBmb3IgcXVlcnkgKi8KIAlTbmFwc2hv dAljcm9zc2NoZWNrX3NuYXBzaG90OwkvKiBjcm9zc2NoZWNrIGZvciBSSSB1cGRhdGUvZGVsZXRl ICovCkBAIC01Nyw2ICs1OSw3IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXJ5RGVzYwogCiAvKiBpbiBw cXVlcnkuYyAqLwogZXh0ZXJuIFF1ZXJ5RGVzYyAqQ3JlYXRlUXVlcnlEZXNjKFBsYW5uZWRTdG10 ICpwbGFubmVkc3RtdCwKKwkJCQkJCQkJICBMaXN0ICpwYXJ0X3BydW5lX3Jlc3VsdHMsCiAJCQkJ CQkJCSAgY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hv dCwKIAkJCQkJCQkJICBTbmFwc2hvdCBjcm9zc2NoZWNrX3NuYXBzaG90LApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9k ZXMuaAppbmRleCA5YTY0YTgzMGEyLi5mMTM3NDA1N2U1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApA QCAtNjE3LDYgKzYxNyw3IEBAIHR5cGVkZWYgc3RydWN0IEVTdGF0ZQogCUxpc3QJICAgKmVzX3J0 ZXBlcm1pbmZvczsJLyogTGlzdCBvZiBSVEVQZXJtaXNzaW9uSW5mbyAqLwogCVBsYW5uZWRTdG10 ICplc19wbGFubmVkc3RtdDsJLyogbGluayB0byB0b3Agb2YgcGxhbiB0cmVlICovCiAJTGlzdAkg ICAqZXNfcGFydF9wcnVuZV9pbmZvczsJLyogUGxhbm5lZFN0bXQucGFydFBydW5lSW5mb3MgKi8K KwlMaXN0CSAgICplc19wYXJ0X3BydW5lX3Jlc3VsdHM7IC8qIFF1ZXJ5RGVzYy5wYXJ0X3BydW5l X3Jlc3VsdHMgKi8KIAljb25zdCBjaGFyICplc19zb3VyY2VUZXh0OwkvKiBTb3VyY2UgdGV4dCBm cm9tIFF1ZXJ5RGVzYyAqLwogCiAJSnVua0ZpbHRlciAqZXNfanVua0ZpbHRlcjsJLyogdG9wLWxl dmVsIGp1bmsgZmlsdGVyLCBpZiBhbnkgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggNDMzN2U3 YWEzNC4uMTBmMTJlNzgwZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTEzNCw4ICsxMzQsOCBA QCB0eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJYm9vbAkJY29udGFpbnNJbml0aWFsUHJ1 bmluZzsKIAogCS8qCi0JICogSW5kZXhlcyBvZiBhbGwgcmFuZ2UgdGFibGUgZW50cmllczsgZm9y IEFjcXVpcmVFeGVjdXRvckxvY2tzKCkncwotCSAqIHBlcnVzYWwuCisJICogSW5kZXhlcyBvZiBh bGwgcmFuZ2UgdGFibGUgZW50cmllcyBleGNlcHQgdGhvc2Ugb2YgbGVhZiBwYXJ0aXRpb25zCisJ ICogc2Nhbm5lZCBieSBwcnVuYWJsZSBzdWJwbGFuczsgZm9yIEFjcXVpcmVFeGVjdXRvckxvY2tz KCkgcGVydXNhbC4KIAkgKi8KIAlCaXRtYXBzZXQgICptaW5Mb2NrUmVsaWRzOwogCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oCmluZGV4IGViMGEwMDc5NDYuLmFiOGJjNzRlNGEgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rl cy5oCkBAIC04Miw3ICs4Miw5IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZWRTdG10CiAJTGlzdAkg ICAqcGVybUluZm9zOwkJLyogbGlzdCBvZiBSVEVQZXJtaXNzaW9uSW5mbyBub2RlcyBmb3IgcnRh YmxlCiAJCQkJCQkJCSAqIGVudHJpZXMgbmVlZGluZyBvbmUgKi8KIAotCUJpdG1hcHNldCAgKm1p bkxvY2tSZWxpZHM7CS8qIEluZGV4ZXMgb2YgYWxsIHJhbmdlIHRhYmxlIGVudHJpZXM7IGZvcgor CUJpdG1hcHNldCAgKm1pbkxvY2tSZWxpZHM7CS8qIEluZGV4ZXMgb2YgYWxsIHJhbmdlIHRhYmxl IGVudHJpZXMgZXhjZXB0CisJCQkJCQkJCSAqIHRob3NlIG9mIGxlYWYgcGFydGl0aW9ucyBzY2Fu bmVkIGJ5CisJCQkJCQkJCSAqIHBydW5hYmxlIHN1YnBsYW5zOyBmb3IKIAkJCQkJCQkJICogQWNx dWlyZUV4ZWN1dG9yTG9ja3MoKSdzIHBlcnVzYWwgKi8KIAogCS8qIHJ0YWJsZSBpbmRleGVzIG9m IHRhcmdldCByZWxhdGlvbnMgZm9yIElOU0VSVC9VUERBVEUvREVMRVRFL01FUkdFICovCkBAIC0x NTc1LDYgKzE1NzcsMzMgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGVwQ29tYmlu ZQogCUxpc3QJICAgKnNvdXJjZV9zdGVwaWRzOwogfSBQYXJ0aXRpb25QcnVuZVN0ZXBDb21iaW5l OwogCisvKi0tLS0tLS0tLS0tLS0tLS0KKyAqIFBhcnRpdGlvblBydW5lUmVzdWx0CisgKgorICog VGhlIHJlc3VsdCBvZiBwZXJmb3JtaW5nIEV4ZWNQYXJ0aXRpb25Eb0luaXRpYWxQcnVuaW5nKCkg b24gYSBnaXZlbgorICogUGFydGl0aW9uUHJ1bmVJbmZvLgorICoKKyAqIHJvb3RfcGFyZW50X3Jl bGlkcyBpcyBzYW1lIGFzIFBhcnRpdGlvblBydW5lSW5mby5yb290X3BhcmVudF9yZWxpZHMuICBJ dCdzCisgKiB0aGVyZSBmb3IgY3Jvc3MtY2hlY2tpbmcgaW4gRXhlY0luaXRQYXJ0aXRpb25QcnVu aW5nKCkgdGhhdCB0aGUKKyAqIFBhcnRpdGlvblBydW5lUmVzdWx0IGFuZCB0aGUgUGFydGl0aW9u UHJ1bmVJbmZvIGF0IGEgZ2l2ZW4gaW5kZXggaW4KKyAqIEVTdGF0ZS5lc19wYXJ0X3BydW5lX3Jl c3VsdHMgYW5kIEVTdGF0ZS5lc19wYXJ0X3BydW5lX2luZm9zLCByZXNwZWN0aXZlbHksCisgKiBi ZWxvbmcgdG8gdGhlIHNhbWUgcGFyZW50IHBsYW4gbm9kZS4KKyAqCisgKiB2YWxpZF9zdWJwbGFu c19vZmZzIGNvbnRhaW5zIHRoZSBpbmRleGVzIG9mIHN1YnBsYW5zIHJlbWFpbmluZyBhZnRlcgor ICogcGVyZm9ybWluZyBpbml0aWFsIHBydW5pbmcgYnkgY2FsbGluZyBFeGVjRmluZE1hdGNoaW5n U3ViUGxhbnMoKSBvbiB0aGUKKyAqIFBhcnRpdGlvblBydW5lSW5mby4KKyAqCisgKiBUaGlzIGlz IHVzZWQgdG8gc3RvcmUgdGhlIHJlc3VsdCBvZiBpbml0aWFsIHBhcnRpdGlvbiBwcnVuaW5nIHRo YXQgaXMKKyAqIHBlZm9ybWVkIGJlZm9yZSB0aGUgZXhlY3V0aW9uIGhhcyBzdGFydGVkLCBzdWNo IGFzIGluCisgKiBDYWNoZWRQbGFuTG9ja1BhcnRpdGlvbnMoKS4KKyAqLwordHlwZWRlZiBzdHJ1 Y3QgUGFydGl0aW9uUHJ1bmVSZXN1bHQKK3sKKwlOb2RlVGFnCQl0eXBlOworCisJQml0bWFwc2V0 CSAgICpyb290X3BhcmVudF9yZWxpZHM7CisJQml0bWFwc2V0CSAgICp2YWxpZF9zdWJwbGFuX29m ZnM7Cit9IFBhcnRpdGlvblBydW5lUmVzdWx0OwogCiAvKgogICogUGxhbiBpbnZhbGlkYXRpb24g aW5mbwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmggYi9zcmMvaW5j bHVkZS91dGlscy9wbGFuY2FjaGUuaAppbmRleCAwNDk5NjM1ZjU5Li40YWM2NmQyNzYxIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91 dGlscy9wbGFuY2FjaGUuaApAQCAtMTYwLDYgKzE2MCwxNCBAQCB0eXBlZGVmIHN0cnVjdCBDYWNo ZWRQbGFuCiAJTWVtb3J5Q29udGV4dCBjb250ZXh0OwkJLyogY29udGV4dCBjb250YWluaW5nIHRo aXMgQ2FjaGVkUGxhbiAqLwogfSBDYWNoZWRQbGFuOwogCisvKgorICogQWRkaXRpb25hbCBpbmZv cm1hdGlvbiB0byBwYXNzIHRoZSBleGVjdXRvciB3aGVuIGV4ZWN1dGluZyBhIENhY2hlZFBsYW4u CisgKi8KK3R5cGVkZWYgc3RydWN0IENhY2hlZFBsYW5FeHRyYQoreworCUxpc3QJICAgKnBhcnRf cHJ1bmVfcmVzdWx0c19saXN0OworfSBDYWNoZWRQbGFuRXh0cmE7CisKIC8qCiAgKiBDYWNoZWRF eHByZXNzaW9uIGlzIGEgbG93LW92ZXJoZWFkIG1lY2hhbmlzbSBmb3IgY2FjaGluZyB0aGUgcGxh bm5lZCBmb3JtCiAgKiBvZiBzdGFuZGFsb25lIHNjYWxhciBleHByZXNzaW9ucy4gIFdoaWxlIHN1 Y2ggZXhwcmVzc2lvbnMgYXJlIG5vdCB1c3VhbGx5CkBAIC0yMjAsNyArMjI4LDggQEAgZXh0ZXJu IExpc3QgKkNhY2hlZFBsYW5HZXRUYXJnZXRMaXN0KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2UsCiBleHRlcm4gQ2FjaGVkUGxhbiAqR2V0Q2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpw bGFuc291cmNlLAogCQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKIAkJCQkJCQkJ IFJlc291cmNlT3duZXIgb3duZXIsCi0JCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVu dik7CisJCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKKwkJCQkJCQkJIENhY2hl ZFBsYW5FeHRyYSAqKmV4dHJhKTsKIGV4dGVybiB2b2lkIFJlbGVhc2VDYWNoZWRQbGFuKENhY2hl ZFBsYW4gKnBsYW4sIFJlc291cmNlT3duZXIgb3duZXIpOwogCiBleHRlcm4gYm9vbCBDYWNoZWRQ bGFuQWxsb3dzU2ltcGxlVmFsaWRpdHlDaGVjayhDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNl LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmggYi9zcmMvaW5jbHVkZS91 dGlscy9wb3J0YWwuaAppbmRleCBhZWRkYmRhZmU1Li40OWJiMDBjZGE1IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wb3J0YWwu aApAQCAtMTM4LDYgKzEzOCw4IEBAIHR5cGVkZWYgc3RydWN0IFBvcnRhbERhdGEKIAlRdWVyeUNv bXBsZXRpb24gcWM7CQkJLyogY29tbWFuZCBjb21wbGV0aW9uIGRhdGEgZm9yIGV4ZWN1dGVkIHF1 ZXJ5ICovCiAJTGlzdAkgICAqc3RtdHM7CQkJLyogbGlzdCBvZiBQbGFubmVkU3RtdHMgKi8KIAlD YWNoZWRQbGFuICpjcGxhbjsJCQkvKiBDYWNoZWRQbGFuLCBpZiBzdG10cyBhcmUgZnJvbSBvbmUg Ki8KKwlDYWNoZWRQbGFuRXh0cmEgKmNwbGFuX2V4dHJhOwkvKiBDYWNoZWRQbGFuRXh0cmEgZm9y IGNwbGFuIGluIFBvcnRhbCdzCisJCQkJCQkJCQkgKiBtZW1vcnkgKi8KIAogCVBhcmFtTGlzdElu Zm8gcG9ydGFsUGFyYW1zOyAvKiBwYXJhbXMgdG8gcGFzcyB0byBxdWVyeSAqLwogCVF1ZXJ5RW52 aXJvbm1lbnQgKnF1ZXJ5RW52OyAvKiBlbnZpcm9ubWVudCBmb3IgcXVlcnkgKi8KQEAgLTI0Miw2 ICsyNDQsNyBAQCBleHRlcm4gdm9pZCBQb3J0YWxEZWZpbmVRdWVyeShQb3J0YWwgcG9ydGFsLAog CQkJCQkJCSAgQ29tbWFuZFRhZyBjb21tYW5kVGFnLAogCQkJCQkJCSAgTGlzdCAqc3RtdHMsCiAJ CQkJCQkJICBDYWNoZWRQbGFuICpjcGxhbik7CitleHRlcm4gdm9pZCBQb3J0YWxTYXZlQ2FjaGVk UGxhbkV4dHJhKFBvcnRhbCBwb3J0YWwsIENhY2hlZFBsYW5FeHRyYSAqZXh0cmEpOwogZXh0ZXJu IFBsYW5uZWRTdG10ICpQb3J0YWxHZXRQcmltYXJ5U3RtdChQb3J0YWwgcG9ydGFsKTsKIGV4dGVy biB2b2lkIFBvcnRhbENyZWF0ZUhvbGRTdG9yZShQb3J0YWwgcG9ydGFsKTsKIGV4dGVybiB2b2lk IFBvcnRhbEhhc2hUYWJsZURlbGV0ZUFsbCh2b2lkKTsKLS0gCjIuMzUuMwoK --0000000000008169b005efc5a018--