Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w3H3a-0014FN-0k for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Mar 2026 17:21:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w3H3Y-001Sm3-2S for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Mar 2026 17:21:13 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w3H3Y-001Slv-02 for pgsql-hackers@lists.postgresql.org; Thu, 19 Mar 2026 17:21:12 +0000 Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w3H3W-000000002BX-06Tt for pgsql-hackers@postgresql.org; Thu, 19 Mar 2026 17:21:11 +0000 Received: by mail-pg1-x52d.google.com with SMTP id 41be03b00d2f7-c73fbdd9b53so426832a12.3 for ; Thu, 19 Mar 2026 10:21:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773940869; cv=none; d=google.com; s=arc-20240605; b=Cf/zY0TmXGog9kAbJcqK0xNNttToi5aEyCZFHkH6+DQXGpNku8M2YwlM/0ecSiKEPN GJQh5FgRZw+SmvMPfxPf//k4ag6oOiXdAd4YCNy2z0z/laED8mxEPht4ViB7jo7JGLCF ccaW3zn/o2wXJfIVKUyvM/eYSv729y9RiF/QoFgfHe7JLXY1HMZlh0oVORhmM5Xahc3L PbjDnXzZAtlL0Rwrm6wiBpD4Ks6s/0I+iXOzEu/hF69DS/hAqZ6hEukG2OQlfDGOqzx3 a289uHzXd5zDda4T6d3ibW8HXhBBW6q+kmQFMZViJWQ8o3rNAcwQevRWqmKfPC51wBVD r3/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=5/Q6OUOBzLdn1BLLAkWQq94W4nRa/1qgBnFoHLJy6BU=; fh=Yumi87IiYuDgT2mZgHFY0goGB8+yP8835cy4ZgWJDZk=; b=HiWDy/F6LilpS53O/AZyAYlYSu5v6tl2Gtp3W5cq/skky3hpiLbsejfDuyiaUfPOSM AUxyPYHPLoGZ1IF2Xhsy+DzXlcrpZ6tZEuh/dqr/QJQtsYzTuChQ5b45neRf1pG/Hpax XqZ3LHhbV3peko98kQSZi4rWo+vW/FP8ghi+Ymh4Kqowgd5sAd4lh8OWTc/TvsbgfCr1 4ljFr9BmtcPm8C9sKSnC77XfPI7ynl7KS4Fs9IVUFKupYwnp70M0d5qRpcy6HFovcbuA O5vEX7cwwnMoesDjT+BFg604RgMQbme/hbUZk7S//qc4YCTOsWengnj7Ri5PPH9a6K67 F1Yg==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773940869; x=1774545669; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=5/Q6OUOBzLdn1BLLAkWQq94W4nRa/1qgBnFoHLJy6BU=; b=QDyaKPQVKvL+bzTKie6+aQ0nQjCCXrBd8V/bYFVoyeNBPCrjTIsi1PMNz4LYeBnFfZ AjyR8HI3yuJdDF+JOwQ1XMg66yZEr2zl3tAzSnKQKMnGCjE5dVqr/AG3YQfK2Outa8qn J3jMjz+zQW14ltNW2kfrszl4MFoMKf3RxoG1WCJryZTLAlNPXtKXb9K1hKFN6EQKCSYh XwH987WVAxkM/Xgtvy7Z/Gk6yrUVmHHnKyg9n4vQSGGKYGkZOj7TbuetgAaw/VGIABfF tzVPj8QdrlU0FibxozTL1UkHNdkLW71pZghrJZ2Gd30tXzdAEhnCmelleQIrWoAS2J3Y 8Bnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773940869; x=1774545669; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=5/Q6OUOBzLdn1BLLAkWQq94W4nRa/1qgBnFoHLJy6BU=; b=SYovtNISjYx49UfYKAkzupXTeWcCh6WtA0pRgxBZWxbfaxcTy58IEjW+OJ6b/6CunK WnlCE3c1WrnKXHkbvqbSz81xzDoCI8N+aX7+mf+CA/WLgOjbEeEO1PvqjwKNlI/tlXrh ElpRUVZT2MV21O6Loth/8xqT/Zc6YOC6aZ6HRppFNU/kBRPqUHzv+erHlHtSu88BBGI3 QEp4FQTD7fZ+qPjbuLKhTyWw69VznIKDlvmW5zwwOrnWIYKnuO0glV6jrbKQABNihuEH S82n/HLVAXZde6tjedqETVKnKF08wJ02KU+E3LkrC38kApAv89YTS6Kemvazy8M9pxzc RnTg== X-Forwarded-Encrypted: i=1; AJvYcCXln3ZCGZXuRXWB8/2CQKAiZ++I6Ocb0n2JngBrLEOAJpHOxbtkJ0yLu/C9sXXgnpCgAXWvI9KqB+GoCtOZ@postgresql.org X-Gm-Message-State: AOJu0YwuRvHhIqgz5SAsCE0gEstB4Fs7TYs6OQSHjilubzwRW4kMOlrr CjPWtySHpivbZGBWzKMsT99a0LTNbgT9eYH7+QUUSjVepVuU/Jv+0aquQo1UKJSSQ9pIFwN3V6S B146O+6jeKVd/94kC9gGi+p7wrvjG/wc= X-Gm-Gg: ATEYQzwPaom/fGu491txGP4bg0HBRndycO6lSCV4pZamql1ZeuqX4iOtA18KtTQ5vyz NXxBxzwZKcMtc52GOU6WZfscw9MSOs0/wya0fRm++JmLWZg6Tyhhz4QD0RBHhze7EEpN/phsJII e3wOAxDN+X+717KJLZ1q/zDR0thWFXLxObzxPgKjEKK96JgntvyuOy3aXtlUPtiuVZCWYPYqUPt GHlX/9OZ+S66k43/13PuhlzzmrdnONB1N3fD1sF7Ml87ldrOqAxBKtiWa09F8wqu/Hu328/fOY7 KCbTcEd8 X-Received: by 2002:a17:90b:3dce:b0:355:35b0:8b78 with SMTP id 98e67ed59e1d1-35bb9f7c439mr6195862a91.27.1773940868740; Thu, 19 Mar 2026 10:21:08 -0700 (PDT) MIME-Version: 1.0 References: <54c35fb9-da3a-4754-ab8c-46ed0b612465@vondra.me> <684c70d7-180e-461d-9377-600c2db581ba@vondra.me> <605328.1747710381@sss.pgh.pa.us> <691261.1747755511@sss.pgh.pa.us> In-Reply-To: From: Amit Langote Date: Fri, 20 Mar 2026 02:20:49 +0900 X-Gm-Features: AaiRm507WZ2EoRaVrNr-xPIDA6Xgz_Frw_rh_ntM5oer_VIh5WvKgJcIKx78LK4 Message-ID: Subject: Re: generic plans and "initial" pruning To: Chao Li Cc: Tom Lane , Tender Wang , Alexander Lakhin , Tomas Vondra , Robert Haas , Alvaro Herrera , Andres Freund , Daniel Gustafsson , David Rowley , PostgreSQL Hackers , Thom Brown Content-Type: multipart/mixed; boundary="000000000000559395064d63cb06" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000559395064d63cb06 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Mar 9, 2026 at 1:41=E2=80=AFPM Amit Langote wrote: > On Sat, Mar 7, 2026 at 6:54=E2=80=AFPM Amit Langote wrote: > > Attached is v6 of the patch series. I've been working toward > > committing this, so I wanted to lay out the ExecutorPrep() design and > > the key trade-offs before doing so. > > > > When a cached generic plan references a partitioned table, > > GetCachedPlan() locks all partitions upfront via > > AcquireExecutorLocks(), even those that initial pruning will > > eliminate. But initial partition pruning only runs later during > > ExecutorStart(). Moving pruning earlier requires some executor setup > > (range table, permissions, pruning state), and ExecutorPrep() is the > > vehicle for that. Unlike the approach reverted in last May, this > > keeps the CachedPlan itself unchanged -- all per-execution state flows > > through a separate CachedPlanPrepData that the caller provides. > > > > The approach also keeps GetCachedPlan()'s interface > > backward-compatible: the new CachedPlanPrepData argument is optional. > > If a caller passes NULL, all partitions are locked as before and > > nothing changes. This means existing callers and any new code that > > calls GetCachedPlan() without caring about pruning-aware locking just > > works. > > > > The risk is on the other side: if a caller does pass a > > CachedPlanPrepData, GetCachedPlan() will lock only the surviving > > partitions and populate prep_estates with the EStates that > > ExecutorPrep() created. The caller then must make those EStates > > available to ExecutorStart() -- via QueryDesc->estate, > > portal->prep_estates, or the equivalent path for SPI and SQL > > functions. If it fails to do so, ExecutorStart() will call > > ExecutorPrep() again, which may compute different pruning results than > > the original call, potentially expecting locks on relations that were > > never acquired. The executor would then operate on relations it > > doesn't hold locks on. > > > > So the contract is: if you opt in to pruning-aware locking by passing > > CachedPlanPrepData, you must complete the pipeline by delivering the > > prep EStates to the executor. In the current patch, all the call sites > > that pass a CachedPlanPrepData (portals, SPI, EXECUTE, SQL functions, > > EXPLAIN) do thread the EStates through correctly, and I've tried to > > make the plumbing straightforward enough that it's hard to get wrong. > > But it is a new invariant that didn't exist before, and a caller that > > gets it wrong would fail silently rather than with an obvious error. > > > > To catch such violations, I've added a debug-only check in > > standard_ExecutorStart() that fires when no prep EState was provided. > > It iterates over the plan's rtable and verifies that every lockable > > relation is actually locked. It should always be true if > > AcquireExecutorLocks() locked everything, but would fail if > > pruning-aware locking happened upstream and the caller dropped the > > prep EState. The check is skipped in parallel workers, which acquire > > relation locks lazily in ExecGetRangeTableRelation(). > > > > + if (queryDesc->estate =3D=3D NULL) > > + { > > +#ifdef USE_ASSERT_CHECKING > > + if (!IsParallelWorker()) > > + { > > + ListCell *lc; > > + > > + foreach(lc, queryDesc->plannedstmt->rtable) > > + { > > + RangeTblEntry *rte =3D lfirst_node(RangeTblEntry, lc); > > + > > + if (rte->rtekind =3D=3D RTE_RELATION || > > + (rte->rtekind =3D=3D RTE_SUBQUERY && rte->relid != =3D InvalidOid)) > > + Assert(CheckRelationOidLockedByMe(rte->relid, > > + rte->rellockmode= , > > + true)); > > + } > > + } > > +#endif > > + queryDesc->estate =3D ExecutorPrep(queryDesc->plannedstmt, > > + queryDesc->params, > > + CurrentResourceOwner, > > + true, > > + eflags); > > + } > > +#ifdef USE_ASSERT_CHECKING > > + else > > + { > > + /* > > + * A prep EState was provided, meaning pruning-aware locking > > + * should have locked at least the unpruned relations. > > + */ > > + if (!IsParallelWorker()) > > + { > > + int rtindex =3D -1; > > + > > + while ((rtindex =3D > > bms_next_member(queryDesc->estate->es_unpruned_relids, > > + rtindex)) >=3D 0) > > + { > > + RangeTblEntry *rte =3D exec_rt_fetch(rtindex, queryDes= c->estate); > > + > > + Assert(rte->rtekind =3D=3D RTE_RELATION || > > + (rte->rtekind =3D=3D RTE_SUBQUERY && > > + rte->relid !=3D InvalidOid)); > > + Assert(CheckRelationOidLockedByMe(rte->relid, > > + rte->rellockmode, tr= ue)); > > + } > > + } > > + } > > +#endif > > > > So the invariant is: if no prep EState was provided, every relation in > > the plan is locked; if one was provided, at least the unpruned > > relations are locked. Both are checked in assert builds. > > > > I think this covers the main concerns, but I may be missing something. > > If anyone sees a problem with this approach, I'd like to hear about > > it. > > Here's v7. Some plancache.c changes that I'd made were in the wrong > patch in v6; this version puts them where they belong. Attached is an updated set. One more fix: I added an Assert in SPI_cursor_open_internal()'s !plan->saved path to verify that prep_estates is NIL. Unsaved plans always take the custom plan path, so pruning-aware locking never applies, but it's worth guarding explicitly since the copyObject/ReleaseCachedPlan sequence that follows would not be safe otherwise. Also changed SPI_plan_get_cached_plan() to pass NULL for cprep, since it only returns the CachedPlan pointer and has no way to deliver prep_estates to anyone. Stepping back -- the core question is whether running executor logic (pruning) inside GetCachedPlan() is acceptable at all. The plan cache and executor have always had a clean boundary: plan cache locks everything, executor runs. This optimization necessarily crosses that line, because the information needed to decide which locks to skip (pruning results) can only come from executor machinery. The proposed approach has GetCachedPlan() call ExecutorPrep() to do a limited subset of executor work (range table init, permissions, pruning), carry the results out through CachedPlanPrepData, and leave the CachedPlan itself untouched. The executor already has a multi-step protocol: start/run/end. prep/start/run/end is just a finer decomposition of what InitPlan() was already doing inside ExecutorStart(). Of the attached patches, I'm targeting 0001-0003 for commit. 0004 (SQL function support) and 0005 (parallel worker reuse) are useful follow-ons but not essential. The optimization works without them for most cases, and they can be reviewed and committed separately. If there's a cleaner way to avoid locking pruned partitions without the plumbing this patch adds, I haven't found it in the year since the revert. I'd welcome a pointer if you see one. Failing that, I think this is the right trade-off, but it's a judgment call about where to hold your nose. Tom, I'd value your opinion on whether this approach is something you'd be comfortable seeing in the tree. -- Thanks, Amit Langote --000000000000559395064d63cb06 Content-Type: application/octet-stream; name="v8-0005-Reuse-partition-pruning-results-in-parallel-worke.patch" Content-Disposition: attachment; filename="v8-0005-Reuse-partition-pruning-results-in-parallel-worke.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxpzx010 RnJvbSA0YzEyYzM4MGI3NWI4Njg0ZTljNDFjODBkMGM3NzAyN2NmNTkyZTE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTkgTWFyIDIwMjYgMjA6MDM6NTggKzA5MDAKU3ViamVjdDogW1BBVENIIHY4 IDUvNV0gUmV1c2UgcGFydGl0aW9uIHBydW5pbmcgcmVzdWx0cyBpbiBwYXJhbGxlbCB3b3JrZXJz CgpQYXNzIHRoZSBsZWFkZXIncyBpbml0aWFsIHBhcnRpdGlvbiBwcnVuaW5nIHJlc3VsdHMgYW5k IHVucHJ1bmVkCnJlbGlkcyB0byBwYXJhbGxlbCB3b3JrZXJzIGFuZCByZXVzZSB0aGVtIHZpYSBF eGVjdXRvclByZXAoKS4gVGhpcwphdm9pZHMgcmVwZWF0aW5nIHBydW5pbmcgbG9naWMgaW4gd29y a2Vycywgd2hpY2ggaXMgbm90IG9ubHkKcmVkdW5kYW50IGJ1dCBhbHNvIHJpc2tzIGRpdmVyZ2Vu Y2UgZHVlIHRvIG5vbmRldGVybWluaXNtIGluIHBydW5pbmcKc3RlcHMgb3IgcGFyYW1ldGVyIGV2 YWx1YXRpb24gdGltaW5nLgoKSW50cm9kdWNlIENoZWNrSW5pdGlhbFBydW5pbmdSZXN1bHRzSW5X b3JrZXIoKSAoZGVidWctYnVpbGRzIG9ubHkpCnRvIHZlcmlmeSB0aGF0IHRoZSByZXN1bHRzIG1h dGNoIHdoYXQgdGhlIHdvcmtlciB3b3VsZCBjb21wdXRlLiBUaGlzCmNoZWNrIGhlbHBzIGNhdGNo IGluY29uc2lzdGVuY2llcyBhY3Jvc3MgbGVhZGVyIGFuZCB3b3JrZXIgcHJ1bmluZwpsb2dpYy4K LS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jICAgICB8ICAxMCArLS0KIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jIHwgMTA4ICsrKysrKysrKysrKysrKysrKysr KysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jIHwgICAyICstCiBz cmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oICAgICB8ICAgMyArLQogNCBmaWxlcyBjaGFu Z2VkLCAxMTYgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01h aW4uYwppbmRleCAwZjk1YWQ4ODQ5Ny4uOWEzNzAwZTY3MmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01h aW4uYwpAQCAtMjA3LDcgKzIwNyw3IEBAIHN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNj ICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiAJCXF1ZXJ5RGVzYy0+ZXN0YXRlID0gRXhlY3V0b3JQ cmVwKHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQsCiAJCQkJCQkJCQkJIHF1ZXJ5RGVzYy0+cGFyYW1z LAogCQkJCQkJCQkJCSBDdXJyZW50UmVzb3VyY2VPd25lciwKLQkJCQkJCQkJCQkgZWZsYWdzKTsK KwkJCQkJCQkJCQkgZWZsYWdzLCB0cnVlKTsKIAl9CiAjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lO RwogCWVsc2UKQEAgLTMzMCw3ICszMzAsOCBAQCBzdGFuZGFyZF9FeGVjdXRvclN0YXJ0KFF1ZXJ5 RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogICogRXhlY3V0b3JQcmVwOiBwcmVwYXJlIGV4 ZWN1dG9yIHN0YXRlIGZvciBhIFBsYW5uZWRTdG10IG91dHNpZGUgRXhlY3V0b3JTdGFydC4KICAq CiAgKiBQZXJmb3JtcyByYW5nZSB0YWJsZSBpbml0aWFsaXphdGlvbiwgcGVybWlzc2lvbiBjaGVj a3MsIGFuZCBpbml0aWFsCi0gKiBwYXJ0aXRpb24gcHJ1bmluZyBpZiBwYXJ0UHJ1bmVJbmZvcyBh cmUgcHJlc2VudC4KKyAqIHBhcnRpdGlvbiBwcnVuaW5nIGlmIHBhcnRQcnVuZUluZm9zIGFyZSBw cmVzZW50IGFuZCBkb19pbml0aWFsX3BydW5pbmcgaXMKKyAqIHRydWU7IGZhbHNlIGluIGEgcGFy YWxsZWwgd29ya2VyLgogICoKICAqIFJldHVybnMgYW4gRVN0YXRlIHRoYXQgdGhlIGNhbGxlciBt dXN0IGVpdGhlciBwYXNzIHRvIEV4ZWN1dG9yU3RhcnQoKQogICogZm9yIHJldXNlIG9yIGZyZWUg dmlhIEZyZWVFeGVjdXRvclN0YXRlKCkgaWYgZXhlY3V0aW9uIHdpbGwgbm90IHByb2NlZWQuCkBA IC0zNDAsNyArMzQxLDcgQEAgc3RhbmRhcmRfRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5 RGVzYywgaW50IGVmbGFncykKICAqLwogRVN0YXRlICoKIEV4ZWN1dG9yUHJlcChQbGFubmVkU3Rt dCAqcHN0bXQsIFBhcmFtTGlzdEluZm8gcGFyYW1zLCBSZXNvdXJjZU93bmVyIG93bmVyLAotCQkJ IGludCBlZmxhZ3MpCisJCQkgaW50IGVmbGFncywgYm9vbCBkb19pbml0aWFsX3BydW5pbmcpCiB7 CiAJUmVzb3VyY2VPd25lciBvbGRvd25lcjsKIAlFU3RhdGUgKmVzdGF0ZTsKQEAgLTM4Niw3ICsz ODcsOCBAQCBFeGVjdXRvclByZXAoUGxhbm5lZFN0bXQgKnBzdG10LCBQYXJhbUxpc3RJbmZvIHBh cmFtcywgUmVzb3VyY2VPd25lciBvd25lciwKIAkgKiB0byBlc19wYXJ0X3BydW5lX2luZm9zLgog CSAqLwogCUV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlcyhlc3RhdGUpOwotCUV4ZWNEb0lu aXRpYWxQcnVuaW5nKGVzdGF0ZSk7CisJaWYgKGRvX2luaXRpYWxfcHJ1bmluZykKKwkJRXhlY0Rv SW5pdGlhbFBydW5pbmcoZXN0YXRlKTsKIAogCUN1cnJlbnRSZXNvdXJjZU93bmVyID0gb2xkb3du ZXI7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMKaW5kZXggMDI0NzgwZDM1MTYuLjJk ZTRiMzVhMTZlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwu YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYwpAQCAtMjQsNiArMjQs NyBAQAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNsdWRlICJleGVjdXRvci9leGVjUGFy YWxsZWwuaCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVjUGFydGl0aW9uLmgiCiAjaW5jbHVkZSAi ZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlQWdnLmgiCiAjaW5j bHVkZSAiZXhlY3V0b3Ivbm9kZUFwcGVuZC5oIgpAQCAtNjcsNiArNjgsOCBAQAogI2RlZmluZSBQ QVJBTExFTF9LRVlfUVVFUllfVEVYVAkJVUlOVDY0Q09OU1QoMHhFMDAwMDAwMDAwMDAwMDA4KQog I2RlZmluZSBQQVJBTExFTF9LRVlfSklUX0lOU1RSVU1FTlRBVElPTiBVSU5UNjRDT05TVCgweEUw MDAwMDAwMDAwMDAwMDkpCiAjZGVmaW5lIFBBUkFMTEVMX0tFWV9XQUxfVVNBR0UJCQlVSU5UNjRD T05TVCgweEUwMDAwMDAwMDAwMDAwMEEpCisjZGVmaW5lIFBBUkFMTEVMX0tFWV9QQVJUSVRJT05f UFJVTkVfUkVTVUxUUwlVSU5UNjRDT05TVCgweEUwMDAwMDAwMDAwMDAwMEIpCisjZGVmaW5lIFBB UkFMTEVMX0tFWV9VTlBSVU5FRF9SRUxJRFMJVUlOVDY0Q09OU1QoMHhFMDAwMDAwMDAwMDAwMDBD KQogCiAjZGVmaW5lIFBBUkFMTEVMX1RVUExFX1FVRVVFX1NJWkUJCTY1NTM2CiAKQEAgLTE0MSw2 ICsxNDQsOCBAQCBzdGF0aWMgYm9vbCBFeGVjUGFyYWxsZWxSZXRyaWV2ZUluc3RydW1lbnRhdGlv bihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKIC8qIEhlbHBlciBmdW5jdGlvbiB0aGF0IHJ1bnMgaW4g dGhlIHBhcmFsbGVsIHdvcmtlci4gKi8KIHN0YXRpYyBEZXN0UmVjZWl2ZXIgKkV4ZWNQYXJhbGxl bEdldFJlY2VpdmVyKGRzbV9zZWdtZW50ICpzZWcsIHNobV90b2MgKnRvYyk7CiAKK3N0YXRpYyB2 b2lkIENoZWNrSW5pdGlhbFBydW5pbmdSZXN1bHRzSW5Xb3JrZXIoRVN0YXRlICplc3RhdGUpOwor CiAvKgogICogQ3JlYXRlIGEgc2VyaWFsaXplZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGxhbiB0 byBiZSBzZW50IHRvIGVhY2ggd29ya2VyLgogICovCkBAIC02MjAsMTIgKzYyNSwxOCBAQCBFeGVj SW5pdFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRlICplc3RhdGUsCiAJ Rml4ZWRQYXJhbGxlbEV4ZWN1dG9yU3RhdGUgKmZwZXM7CiAJY2hhcgkgICAqcHN0bXRfZGF0YTsK IAljaGFyCSAgICpwc3RtdF9zcGFjZTsKKwljaGFyCSAgICpwYXJ0X3BydW5lX3Jlc3VsdHNfZGF0 YTsKKwljaGFyCSAgICpwYXJ0X3BydW5lX3Jlc3VsdHNfc3BhY2U7CisJY2hhcgkgICAqdW5wcnVu ZWRfcmVsaWRzX2RhdGE7CisJY2hhcgkgICAqdW5wcnVuZWRfcmVsaWRzX3NwYWNlOwogCWNoYXIJ ICAgKnBhcmFtbGlzdGluZm9fc3BhY2U7CiAJQnVmZmVyVXNhZ2UgKmJ1ZnVzYWdlX3NwYWNlOwog CVdhbFVzYWdlICAgKndhbHVzYWdlX3NwYWNlOwogCVNoYXJlZEV4ZWN1dG9ySW5zdHJ1bWVudGF0 aW9uICppbnN0cnVtZW50YXRpb24gPSBOVUxMOwogCVNoYXJlZEppdEluc3RydW1lbnRhdGlvbiAq aml0X2luc3RydW1lbnRhdGlvbiA9IE5VTEw7CiAJaW50CQkJcHN0bXRfbGVuOworCWludAkJCXBh cnRfcHJ1bmVfcmVzdWx0c19sZW47CisJaW50CQkJdW5wcnVuZWRfcmVsaWRzX2xlbjsKIAlpbnQJ CQlwYXJhbWxpc3RpbmZvX2xlbjsKIAlpbnQJCQlpbnN0cnVtZW50YXRpb25fbGVuID0gMDsKIAlp bnQJCQlqaXRfaW5zdHJ1bWVudGF0aW9uX2xlbiA9IDA7CkBAIC02NTQsNiArNjY1LDggQEAgRXhl Y0luaXRQYXJhbGxlbFBsYW4oUGxhblN0YXRlICpwbGFuc3RhdGUsIEVTdGF0ZSAqZXN0YXRlLAog CiAJLyogRml4IHVwIGFuZCBzZXJpYWxpemUgcGxhbiB0byBiZSBzZW50IHRvIHdvcmtlcnMuICov CiAJcHN0bXRfZGF0YSA9IEV4ZWNTZXJpYWxpemVQbGFuKHBsYW5zdGF0ZS0+cGxhbiwgZXN0YXRl KTsKKwlwYXJ0X3BydW5lX3Jlc3VsdHNfZGF0YSA9IG5vZGVUb1N0cmluZyhlc3RhdGUtPmVzX3Bh cnRfcHJ1bmVfcmVzdWx0cyk7CisJdW5wcnVuZWRfcmVsaWRzX2RhdGEgPSBub2RlVG9TdHJpbmco ZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMpOwogCiAJLyogQ3JlYXRlIGEgcGFyYWxsZWwgY29u dGV4dC4gKi8KIAlwY3h0ID0gQ3JlYXRlUGFyYWxsZWxDb250ZXh0KCJwb3N0Z3JlcyIsICJQYXJh bGxlbFF1ZXJ5TWFpbiIsIG53b3JrZXJzKTsKQEAgLTY4MCw2ICs2OTMsMTYgQEAgRXhlY0luaXRQ YXJhbGxlbFBsYW4oUGxhblN0YXRlICpwbGFuc3RhdGUsIEVTdGF0ZSAqZXN0YXRlLAogCXNobV90 b2NfZXN0aW1hdGVfY2h1bmsoJnBjeHQtPmVzdGltYXRvciwgcHN0bXRfbGVuKTsKIAlzaG1fdG9j X2VzdGltYXRlX2tleXMoJnBjeHQtPmVzdGltYXRvciwgMSk7CiAKKwkvKiBFc3RpbWF0ZSBzcGFj ZSBmb3Igc2VyaWFsaXplZCBwYXJ0X3BydW5lX3Jlc3VsdHMuICovCisJcGFydF9wcnVuZV9yZXN1 bHRzX2xlbiA9IHN0cmxlbihwYXJ0X3BydW5lX3Jlc3VsdHNfZGF0YSkgKyAxOworCXNobV90b2Nf ZXN0aW1hdGVfY2h1bmsoJnBjeHQtPmVzdGltYXRvciwgcGFydF9wcnVuZV9yZXN1bHRzX2xlbik7 CisJc2htX3RvY19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDEpOworCisJLyogRXN0 aW1hdGUgc3BhY2UgZm9yIHNlcmlhbGl6ZWQgdW5wcnVuZWRfcmVsaWRzLiAqLworCXVucHJ1bmVk X3JlbGlkc19sZW4gPSBzdHJsZW4odW5wcnVuZWRfcmVsaWRzX2RhdGEpICsgMTsKKwlzaG1fdG9j X2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIHVucHJ1bmVkX3JlbGlkc19sZW4pOwor CXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKKwogCS8qIEVzdGlt YXRlIHNwYWNlIGZvciBzZXJpYWxpemVkIFBhcmFtTGlzdEluZm8uICovCiAJcGFyYW1saXN0aW5m b19sZW4gPSBFc3RpbWF0ZVBhcmFtTGlzdFNwYWNlKGVzdGF0ZS0+ZXNfcGFyYW1fbGlzdF9pbmZv KTsKIAlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIHBhcmFtbGlzdGlu Zm9fbGVuKTsKQEAgLTc4MSw2ICs4MDQsMTYgQEAgRXhlY0luaXRQYXJhbGxlbFBsYW4oUGxhblN0 YXRlICpwbGFuc3RhdGUsIEVTdGF0ZSAqZXN0YXRlLAogCW1lbWNweShwc3RtdF9zcGFjZSwgcHN0 bXRfZGF0YSwgcHN0bXRfbGVuKTsKIAlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBBUkFMTEVM X0tFWV9QTEFOTkVEU1RNVCwgcHN0bXRfc3BhY2UpOwogCisJLyogU3RvcmUgc2VyaWFsaXplZCBw YXJ0X3BydW5lX3Jlc3VsdHMgKi8KKwlwYXJ0X3BydW5lX3Jlc3VsdHNfc3BhY2UgPSBzaG1fdG9j X2FsbG9jYXRlKHBjeHQtPnRvYywgcGFydF9wcnVuZV9yZXN1bHRzX2xlbik7CisJbWVtY3B5KHBh cnRfcHJ1bmVfcmVzdWx0c19zcGFjZSwgcGFydF9wcnVuZV9yZXN1bHRzX2RhdGEsIHBhcnRfcHJ1 bmVfcmVzdWx0c19sZW4pOworCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFSQUxMRUxfS0VZ X1BBUlRJVElPTl9QUlVORV9SRVNVTFRTLCBwYXJ0X3BydW5lX3Jlc3VsdHNfc3BhY2UpOworCisJ LyogU3RvcmUgc2VyaWFsaXplZCB1bnBydW5lZF9yZWxpZHMgKi8KKwl1bnBydW5lZF9yZWxpZHNf c3BhY2UgPSBzaG1fdG9jX2FsbG9jYXRlKHBjeHQtPnRvYywgdW5wcnVuZWRfcmVsaWRzX2xlbik7 CisJbWVtY3B5KHVucHJ1bmVkX3JlbGlkc19zcGFjZSwgdW5wcnVuZWRfcmVsaWRzX2RhdGEsIHVu cHJ1bmVkX3JlbGlkc19sZW4pOworCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFSQUxMRUxf S0VZX1VOUFJVTkVEX1JFTElEUywgdW5wcnVuZWRfcmVsaWRzX3NwYWNlKTsKKwogCS8qIFN0b3Jl IHNlcmlhbGl6ZWQgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbWxpc3RpbmZvX3NwYWNlID0gc2ht X3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHBhcmFtbGlzdGluZm9fbGVuKTsKIAlzaG1fdG9jX2lu c2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9QQVJBTUxJU1RJTkZPLCBwYXJhbWxpc3RpbmZv X3NwYWNlKTsKQEAgLTEyODAsMTAgKzEzMTMsMTUgQEAgRXhlY1BhcmFsbGVsR2V0UXVlcnlEZXNj KHNobV90b2MgKnRvYywgRGVzdFJlY2VpdmVyICpyZWNlaXZlciwKIAkJCQkJCSBpbnQgaW5zdHJ1 bWVudF9vcHRpb25zKQogewogCWNoYXIJICAgKnBzdG10c3BhY2U7CisJY2hhcgkgICAqcGFydF9w cnVuZV9yZXN1bHRzX3NwYWNlOworCWNoYXIJICAgKnVucHJ1bmVkX3JlbGlkc19zcGFjZTsKIAlj aGFyCSAgICpwYXJhbXNwYWNlOwogCVBsYW5uZWRTdG10ICpwc3RtdDsKKwlMaXN0CSAgICpwYXJ0 X3BydW5lX3Jlc3VsdHM7CisJQml0bWFwc2V0ICAqdW5wcnVuZWRfcmVsaWRzOwogCVBhcmFtTGlz dEluZm8gcGFyYW1MSTsKIAljaGFyCSAgICpxdWVyeVN0cmluZzsKKwlFU3RhdGUJICAgKnByZXBf ZXN0YXRlID0gTlVMTDsKIAogCS8qIEdldCB0aGUgcXVlcnkgc3RyaW5nIGZyb20gc2hhcmVkIG1l bW9yeSAqLwogCXF1ZXJ5U3RyaW5nID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlf UVVFUllfVEVYVCwgZmFsc2UpOwpAQCAtMTI5NiwxMiArMTMzNCw4MCBAQCBFeGVjUGFyYWxsZWxH ZXRRdWVyeURlc2Moc2htX3RvYyAqdG9jLCBEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyLAogCXBhcmFt c3BhY2UgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9QQVJBTUxJU1RJTkZPLCBm YWxzZSk7CiAJcGFyYW1MSSA9IFJlc3RvcmVQYXJhbUxpc3QoJnBhcmFtc3BhY2UpOwogCisJLyog UmVjb25zdHJ1Y3QgbGVhZGVyLXN1cHBsaWVkIHBhcnRfcHJ1bmVfcmVzdWx0cyBhbmQgdW5wcnVu ZWRfcmVsaWRzLiAqLworCXBhcnRfcHJ1bmVfcmVzdWx0c19zcGFjZSA9CisJCXNobV90b2NfbG9v a3VwKHRvYywgUEFSQUxMRUxfS0VZX1BBUlRJVElPTl9QUlVORV9SRVNVTFRTLCBmYWxzZSk7CisJ cGFydF9wcnVuZV9yZXN1bHRzID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKHBhcnRfcHJ1bmVfcmVz dWx0c19zcGFjZSk7CisJdW5wcnVuZWRfcmVsaWRzX3NwYWNlID0KKwkJc2htX3RvY19sb29rdXAo dG9jLCBQQVJBTExFTF9LRVlfVU5QUlVORURfUkVMSURTLCBmYWxzZSk7CisJdW5wcnVuZWRfcmVs aWRzID0gKEJpdG1hcHNldCAqKSBzdHJpbmdUb05vZGUodW5wcnVuZWRfcmVsaWRzX3NwYWNlKTsK KworCS8qCisJICogSWYgcHJ1bmluZyB3YXMgZG9uZSBpbiB0aGUgbGVhZGVyLCBidWlsZCBhIHBy ZXAgZXN0YXRlIGluIHRoZSB3b3JrZXIKKwkgKiBhbmQgaW5qZWN0IHRoZSBsZWFkZXIncyBwcnVu aW5nIHJlc3VsdHMgaW50byBpdCBmb3IgcmV1c2UuCisJICovCisJaWYgKHBzdG10LT5wYXJ0UHJ1 bmVJbmZvcykKKwl7CisJCXByZXBfZXN0YXRlID0gRXhlY3V0b3JQcmVwKHBzdG10LCBwYXJhbUxJ LCBDdXJyZW50UmVzb3VyY2VPd25lciwgMCwgZmFsc2UpOworCQlBc3NlcnQocHJlcF9lc3RhdGUp OworCisJCXByZXBfZXN0YXRlLT5lc19wYXJ0X3BydW5lX3Jlc3VsdHMgPSBwYXJ0X3BydW5lX3Jl c3VsdHM7CisJCXByZXBfZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMgPQorCQkJYm1zX2FkZF9t ZW1iZXJzKHByZXBfZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMsCisJCQkJCQkJdW5wcnVuZWRf cmVsaWRzKTsKKworCQkvKgorCQkgKiBBIGRlYnVnLWJ1aWxkLW9ubHkgY2hlY2sgdGhhdCB0aGUg cHJ1bmluZyByZXN1bHRzIHBhc3NlZCBmcm9tIHRoZQorCQkgKiBsZWFkZXIgbWF0Y2ggd2hhdCB0 aGUgd29ya2VyIHdvdWxkIGluZGVwZW5kZW50bHkgY29tcHV0ZS4KKwkJICovCisJCUNoZWNrSW5p dGlhbFBydW5pbmdSZXN1bHRzSW5Xb3JrZXIocHJlcF9lc3RhdGUpOworCX0KKwogCS8qIENyZWF0 ZSBhIFF1ZXJ5RGVzYyBmb3IgdGhlIHF1ZXJ5LiAqLwogCXJldHVybiBDcmVhdGVRdWVyeURlc2Mo cHN0bXQsCiAJCQkJCQkgICBxdWVyeVN0cmluZywKIAkJCQkJCSAgIEdldEFjdGl2ZVNuYXBzaG90 KCksIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCSAgIHJlY2VpdmVyLCBwYXJhbUxJLCBOVUxMLCBp bnN0cnVtZW50X29wdGlvbnMsCi0JCQkJCQkgICBOVUxMKTsKKwkJCQkJCSAgIHByZXBfZXN0YXRl KTsKK30KKworLyoKKyAqIENoZWNrSW5pdGlhbFBydW5pbmdSZXN1bHRzSW5Xb3JrZXIKKyAqCQlW ZXJpZnkgcGFydGl0aW9uIHBydW5pbmcgcmVzdWx0cyBwYXNzZWQgZnJvbSB0aGUgbGVhZGVyIHBy b2Nlc3MuCisgKgorICogVGhpcyBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZHVyaW5nIHBhcmFs bGVsIHdvcmtlciBxdWVyeSBzZXR1cC4KKyAqIEl0IHJlY29tcHV0ZXMgaW5pdGlhbCBwcnVuaW5n IHJlc3VsdHMgbG9jYWxseSBhbmQgY29tcGFyZXMgdGhlbSB3aXRoCisgKiB0aG9zZSByZWNlaXZl ZCBmcm9tIHRoZSBsZWFkZXIuIEFueSBtaXNtYXRjaCBtYXkgaW5kaWNhdGUgYSBkaXZlcmdlbmNl CisgKiBiZXR3ZWVuIGxlYWRlciBhbmQgd29ya2VyIGxvZ2ljIG9yIGVudmlyb25tZW50LgorICoK KyAqIE9ubHkgcGVyZm9ybWVkIGluIGRlYnVnIGJ1aWxkcy4KKyAqLworc3RhdGljIHZvaWQKK0No ZWNrSW5pdGlhbFBydW5pbmdSZXN1bHRzSW5Xb3JrZXIoRVN0YXRlICplc3RhdGUpCit7CisjaWZk ZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCUxpc3RDZWxsICAgKmxjOworCWludAkJCWk7CisKKwlB c3NlcnQoZXN0YXRlLT5lc19wYXJ0X3BydW5lX3Jlc3VsdHMgIT0gTlVMTCk7CisJaSA9IDA7CisJ Zm9yZWFjaChsYywgZXN0YXRlLT5lc19wYXJ0X3BydW5lX3N0YXRlcykKKwl7CisJCVBhcnRpdGlv blBydW5lU3RhdGUgKnBydW5lc3RhdGUgPSAoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqKSBsZmlyc3Qo bGMpOworCQlCaXRtYXBzZXQgKnJldXNlX3ZhbGlkc3VicGxhbnMgPQorCQkJCWxpc3RfbnRoX25v ZGUoQml0bWFwc2V0LCBlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfcmVzdWx0cywgaSsrKTsKKwkJQml0 bWFwc2V0ICAqdmFsaWRzdWJwbGFucyA9IE5VTEw7CisJCUJpdG1hcHNldCAgKnZhbGlkc3VicGxh bl9ydGlzID0gTlVMTDsKKworCQlpZiAocHJ1bmVzdGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSkKKwkJ CXZhbGlkc3VicGxhbnMgPSBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMocHJ1bmVzdGF0ZSwgdHJ1 ZSwKKwkJCQkJCQkJCQkJCQkgJnZhbGlkc3VicGxhbl9ydGlzKTsKKwkJaWYgKCFibXNfZXF1YWwo dmFsaWRzdWJwbGFucywgcmV1c2VfdmFsaWRzdWJwbGFucykpCisJCQllbG9nKEVSUk9SLCAiZGlm ZmVyZW50IHZhbGlkc3VicGxhbnMgaW4gcGFyYWxsZWwgd29ya2VyIik7CisJCWlmIChibXNfbm9u ZW1wdHlfZGlmZmVyZW5jZSh2YWxpZHN1YnBsYW5fcnRpcywgZXN0YXRlLT5lc191bnBydW5lZF9y ZWxpZHMpKQorCQkJZWxvZyhFUlJPUiwgImRpZmZlcmVudCB1bnBydW5hYmxlX3JlbGlkcyBpbiBw YXJhbGxlbCB3b3JrZXIiKTsKKwl9CisjZW5kaWYKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv cGxhbmNhY2hlLmMKaW5kZXggMmQ0YzU3ZDNkZWIuLjBkZDRmNDBjOTY0IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9jYWNoZS9wbGFuY2FjaGUuYwpAQCAtMjEwMiw3ICsyMTAyLDcgQEAgQWNxdWlyZUV4ZWN1dG9y TG9ja3NVbnBydW5lZChMaXN0ICpzdG10X2xpc3QsIGJvb2wgYWNxdWlyZSwKIAkJCX0KIAogCQkJ cHJlcF9lc3RhdGUgPSBFeGVjdXRvclByZXAocGxhbm5lZHN0bXQsIGNwcmVwLT5wYXJhbXMsCi0J CQkJCQkJCQkgICBjcHJlcC0+b3duZXIsIGNwcmVwLT5lZmxhZ3MpOworCQkJCQkJCQkJICAgY3By ZXAtPm93bmVyLCBjcHJlcC0+ZWZsYWdzLCB0cnVlKTsKIAkJCUFzc2VydChwcmVwX2VzdGF0ZSk7 CiAJCQljcHJlcC0+cHJlcF9lc3RhdGVzID0gbGFwcGVuZChjcHJlcC0+cHJlcF9lc3RhdGVzLCBw cmVwX2VzdGF0ZSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCmluZGV4IDI0NjA0MTIwYzI3Li4z ODg0OGJhMDY1MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAor KysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCkBAIC0yNDAsNyArMjQwLDggQEAg ZXh0ZXJuIHZvaWQgc3RhbmRhcmRfRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywg aW50IGVmbGFncyk7CiBleHRlcm4gRVN0YXRlICpFeGVjdXRvclByZXAoUGxhbm5lZFN0bXQgKnBz dG10LAogCQkJCQkJCVBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJCQkJCVJlc291cmNlT3duZXIg b3duZXIsCi0JCQkJCQkJaW50IGVmbGFncyk7CisJCQkJCQkJaW50IGVmbGFncywKKwkJCQkJCQli b29sIGRvX2luaXRpYWxfcHJ1bmluZyk7CiAKIC8qCiAgKiBXYWxrIGEgcHJlcF9lc3RhdGVzIGxp c3QgaW4gc3RlcCB3aXRoIGEgcGFyYWxsZWwgc3RtdF9saXN0IGl0ZXJhdGlvbi4KLS0gCjIuNDcu MwoK --000000000000559395064d63cb06 Content-Type: application/octet-stream; name="v8-0003-Use-pruning-aware-locking-in-cached-plans.patch" Content-Disposition: attachment; filename="v8-0003-Use-pruning-aware-locking-in-cached-plans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxpzx0k2 RnJvbSAyZTYzN2NiYzcxYTE0Nzc1ZTE2MWJkZTIxZTEwMzZlY2EyNjQ0YTJiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTkgTWFyIDIwMjYgMTk6MDI6MDQgKzA5MDAKU3ViamVjdDogW1BBVENIIHY4 IDMvNV0gVXNlIHBydW5pbmctYXdhcmUgbG9ja2luZyBpbiBjYWNoZWQgcGxhbnMKCkV4dGVuZCBH ZXRDYWNoZWRQbGFuKCkgdG8gcGVyZm9ybSBFeGVjdXRvclByZXAoKSBvbiBlYWNoIHBsYW5uZWQK c3RhdGVtZW50LCBjYXB0dXJpbmcgdW5wcnVuZWQgcmVsaWRzIGFuZCBpbml0aWFsIHBydW5pbmcg cmVzdWx0cy4KVXNlIHRoaXMgZGF0YSB0byBhY3F1aXJlIGV4ZWN1dGlvbiBsb2NrcyBvbmx5IG9u IHN1cnZpdmluZyBwYXJ0aXRpb25zLAphdm9pZGluZyB1bm5lY2Vzc2FyeSBsb2NraW5nIG9mIHBy dW5lZCB0YWJsZXMgZXZlbiB3aGVuIHVzaW5nIGNhY2hlZApwbGFucy4KCkludHJvZHVjZSBDYWNo ZWRQbGFuUHJlcERhdGEgdG8gY2FycnkgdGhlIEVTdGF0ZXMgY3JlYXRlZCBieQpFeGVjdXRvclBy ZXAoKSB0aHJvdWdoIHRoZSBwbGFuIGNhY2hpbmcgbGF5ZXIuIFRoZSBwcmVwX2VzdGF0ZXMKbGlz dCBpcyBpbmRleGVkIG9uZS10by1vbmUgd2l0aCBDYWNoZWRQbGFuLT5zdG10X2xpc3QgYW5kIGlz CnBvcHVsYXRlZCB3aGVuIEdldENhY2hlZFBsYW4oKSBwcmVwYXJlcyBhIHJldXNlZCBnZW5lcmlj IHBsYW4uCkFkanVzdCBjYWxsIHNpdGVzIGluIFNQSSwgZnVuY3Rpb25zLCBwb3J0YWxzLCBhbmQg RVhQTEFJTiB0bwpwcm9wYWdhdGUgdGhpcyBkYXRhLgoKUGFydGl0aW9uIHBydW5pbmcgZXhwcmVz c2lvbnMgbWF5IGNhbGwgUEwgZnVuY3Rpb25zIHRoYXQgcmVxdWlyZQphbiBhY3RpdmUgc25hcHNo b3QgKGUuZy4sIHZpYSBFbnN1cmVQb3J0YWxTbmFwc2hvdEV4aXN0cygpKS4KQWNxdWlyZUV4ZWN1 dG9yTG9ja3NVbnBydW5lZCgpIGVzdGFibGlzaGVzIG9uZSBiZWZvcmUgY2FsbGluZwpFeGVjdXRv clByZXAoKSBpZiBuZWVkZWQsIGVuc3VyaW5nIHRoZXNlIGV4cHJlc3Npb25zIGNhbiBleGVjdXRl CmNvcnJlY3RseSBkdXJpbmcgcGxhbiBjYWNoZSB2YWxpZGF0aW9uLgoKVG8gbWFpbnRhaW4gY29y cmVjdG5lc3Mgd2hlbiBhbGwgdGFyZ2V0IHBhcnRpdGlvbnMgYXJlIHBydW5lZCwgYWxzbwpyZWlu c3RhdGUgdGhlIGZpcnN0UmVzdWx0UmVsIGxvY2tpbmcgYmVoYXZpb3IgbG9zdCBpbiBjb21taXQK MjgzMTdkZTcyLiBUaGF0IGNvbW1pdCByZXF1aXJlZCB0aGUgZmlyc3QgTW9kaWZ5VGFibGUgdGFy Z2V0IHRvCnJlbWFpbiBpbml0aWFsaXplZCBmb3IgZXhlY3V0b3IgYXNzdW1wdGlvbnMgdG8gaG9s ZC4gV2Ugbm93CmV4cGxpY2l0bHkgdHJhY2sgdGhlc2UgcmVsaWRzIGluIFBsYW5uZXJHbG9iYWwg YW5kIFBsYW5uZWRTdG10IHNvIHRoZXkKYXJlIGxvY2tlZCBldmVuIGlmIHBydW5lZCwgcHJlc2Vy dmluZyB0aGF0IHJ1bGUgYWNyb3NzIGNhY2hlZCBwbGFuCnJldXNlLgoKUmVncmVzc2lvbiB0ZXN0 cyBhcmUgaW5jbHVkZWQgdG8gdmVyaWZ5OgoKLSBPbmx5IHN1cnZpdmluZyBwYXJ0aXRpb25zIGFy ZSBsb2NrZWQgd2hlbiBwcnVuaW5nIGlzIGVuYWJsZWQsIGFuZAogIGFsbCBwYXJ0aXRpb25zIGFy ZSBsb2NrZWQgd2hlbiBpdCBpcyBkaXNhYmxlZCAocGdfbG9ja3MgaW5zcGVjdGlvbikuCi0gTXVs dGlwbGUgTW9kaWZ5VGFibGUgbm9kZXMgKHZpYSB3cml0YWJsZSBDVEVzKSBoYW5kbGUgdGhlIGNh c2Ugd2hlcmUKICBhbGwgdGFyZ2V0IHBhcnRpdGlvbnMgYXJlIHBydW5lZCwgZXhlcmNpc2luZyBm aXJzdFJlc3VsdFJlbHMuCi0gUGxhbiBpbnZhbGlkYXRpb24gZHVyaW5nIHBydW5pbmctYXdhcmUg bG9jayBzZXR1cCAoRERMIHRyaWdnZXJlZCBieQogIGEgcHJ1bmluZyBleHByZXNzaW9uKSBkaXNj YXJkcyB0aGUgcHJlcCBzdGF0ZSBhbmQgcmVwbGFucyBjbGVhbmx5LgoKTm90ZSBmb3IgZXh0ZW5z aW9uIGF1dGhvcnM6IGNvZGUgdGhhdCBhY2Nlc3NlcyBwYXJ0aXRpb24gcmVsYXRpb25zCnRocm91 Z2ggRVN0YXRlIG11c3QgY2hlY2sgdGhhdCB0aGUgUlQgaW5kZXggaXMgYSBtZW1iZXIgb2YKZXNf dW5wcnVuZWRfcmVsaWRzIGJlZm9yZSBvcGVuaW5nIHRoZSByZWxhdGlvbi4gIFByZXZpb3VzbHkg dGhpcyB3YXMKYW4gb3B0aW1pemF0aW9uIChhdm9pZCBwcm9jZXNzaW5nIHBydW5lZCBwYXJ0aXRp b25zKTsgaXQgaXMgbm93IGEKY29ycmVjdG5lc3MgcmVxdWlyZW1lbnQsIGJlY2F1c2UgcHJ1bmVk IHBhcnRpdGlvbnMgbWF5IG5vdCBiZSBsb2NrZWQuCkV4ZWNHZXRSYW5nZVRhYmxlUmVsYXRpb24o KSBhbHJlYWR5IGVuZm9yY2VzIHRoaXMgd2l0aCBhbiBlcnJvciB3aGVuCmNhbGxlZCBvbiBhIHBy dW5lZCByZWxhdGlvbi4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMgICAgICAg ICAgICAgICAgfCAgMTcgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyAg ICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jICAgICAgICAgICAgICAg ICAgICB8ICAyMiArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgICAg ICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyAgICAgICAg ICB8ICAyMCArKwogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgICAgICAgICAg IHwgICA3ICstCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyAgICAgICAgICAg fCAyNTcgKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAg ICAgICAgICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAg ICAgICAgICAgICAgIHwgIDEwICsKIHNyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oICAgICAg ICAgICAgICAgICB8ICAzNSArKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9u X3BydW5lLm91dCB8IDE0NSArKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Bs YW5jYWNoZS5vdXQgICAgICAgfCAgNjIgKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRp dGlvbl9wcnVuZS5zcWwgICAgICB8ICA3NyArKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Bs YW5jYWNoZS5zcWwgICAgICAgICAgICB8ICA1MSArKysrCiAxNSBmaWxlcyBjaGFuZ2VkLCA2ODkg aW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvcHJlcGFyZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCmluZGV4 IGM3YmFiMTRiNjMzLi5mZWM4M2NjNmZkNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvcHJlcGFyZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYwpAQCAtMTU2 LDYgKzE1Niw3IEBAIEV4ZWN1dGVRdWVyeShQYXJzZVN0YXRlICpwc3RhdGUsCiB7CiAJUHJlcGFy ZWRTdGF0ZW1lbnQgKmVudHJ5OwogCUNhY2hlZFBsYW4gKmNwbGFuOworCUNhY2hlZFBsYW5QcmVw RGF0YSBjcHJlcCA9IHswfTsKIAlMaXN0CSAgICpwbGFuX2xpc3Q7CiAJUGFyYW1MaXN0SW5mbyBw YXJhbUxJID0gTlVMTDsKIAlFU3RhdGUJICAgKmVzdGF0ZSA9IE5VTEw7CkBAIC0xOTUsNyArMTk2 LDkgQEAgRXhlY3V0ZVF1ZXJ5KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkJCSAgIGVudHJ5 LT5wbGFuc291cmNlLT5xdWVyeV9zdHJpbmcpOwogCiAJLyogUmVwbGFuIGlmIG5lZWRlZCwgYW5k IGluY3JlbWVudCBwbGFuIHJlZmNvdW50IGZvciBwb3J0YWwgKi8KLQljcGxhbiA9IEdldENhY2hl ZFBsYW4oZW50cnktPnBsYW5zb3VyY2UsIHBhcmFtTEksIE5VTEwsIE5VTEwpOworCWNwcmVwLmNv bnRleHQgPSBwb3J0YWwtPnBvcnRhbENvbnRleHQ7CisJY3ByZXAub3duZXIgPSBwb3J0YWwtPnJl c293bmVyOworCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihlbnRyeS0+cGxhbnNvdXJjZSwgcGFyYW1M SSwgTlVMTCwgTlVMTCwgJmNwcmVwKTsKIAlwbGFuX2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0Owog CiAJLyoKQEAgLTIwNyw3ICsyMTAsNyBAQCBFeGVjdXRlUXVlcnkoUGFyc2VTdGF0ZSAqcHN0YXRl LAogCQkJCQkgIHF1ZXJ5X3N0cmluZywKIAkJCQkJICBlbnRyeS0+cGxhbnNvdXJjZS0+Y29tbWFu ZFRhZywKIAkJCQkJICBwbGFuX2xpc3QsCi0JCQkJCSAgTklMLAorCQkJCQkgIGNwcmVwLnByZXBf ZXN0YXRlcywKIAkJCQkJICBjcGxhbik7CiAKIAkvKgpAQCAtNTc3LDYgKzU4MCw3IEBAIEV4cGxh aW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0bXQgKmV4ZWNzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBF eHBsYWluU3RhdGUgKmVzLAogCVByZXBhcmVkU3RhdGVtZW50ICplbnRyeTsKIAljb25zdCBjaGFy ICpxdWVyeV9zdHJpbmc7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CisJQ2FjaGVkUGxhblByZXBEYXRh IGNwcmVwID0gezB9OwogCUxpc3QJICAgKnBsYW5fbGlzdDsKIAlMaXN0CSAgICpwcmVwX2VzdGF0 ZXM7CiAJTGlzdENlbGwgICAqcDsKQEAgLTYzNSw4ICs2MzksMTMgQEAgRXhwbGFpbkV4ZWN1dGVR dWVyeShFeGVjdXRlU3RtdCAqZXhlY3N0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0 ZSAqZXMsCiAJfQogCiAJLyogUmVwbGFuIGlmIG5lZWRlZCwgYW5kIGFjcXVpcmUgYSB0cmFuc2ll bnQgcmVmY291bnQgKi8KKwljcHJlcC5jb250ZXh0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7CisJ Y3ByZXAub3duZXIgPSBDdXJyZW50UmVzb3VyY2VPd25lcjsKKwlpZiAoZXMtPmdlbmVyaWMpCisJ CWNwcmVwLmVmbGFncyA9IEVYRUNfRkxBR19FWFBMQUlOX0dFTkVSSUM7CiAJY3BsYW4gPSBHZXRD YWNoZWRQbGFuKGVudHJ5LT5wbGFuc291cmNlLCBwYXJhbUxJLAotCQkJCQkJICBDdXJyZW50UmVz b3VyY2VPd25lciwgcHN0YXRlLT5wX3F1ZXJ5RW52KTsKKwkJCQkJCSAgQ3VycmVudFJlc291cmNl T3duZXIsIHBzdGF0ZS0+cF9xdWVyeUVudiwKKwkJCQkJCSAgJmNwcmVwKTsKIAogCUlOU1RSX1RJ TUVfU0VUX0NVUlJFTlQocGxhbmR1cmF0aW9uKTsKIAlJTlNUUl9USU1FX1NVQlRSQUNUKHBsYW5k dXJhdGlvbiwgcGxhbnN0YXJ0KTsKQEAgLTY1NSw3ICs2NjQsNyBAQCBFeHBsYWluRXhlY3V0ZVF1 ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRl ICplcywKIAl9CiAKIAlwbGFuX2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0OwotCXByZXBfZXN0YXRl cyA9IE5JTDsKKwlwcmVwX2VzdGF0ZXMgPSBjcHJlcC5wcmVwX2VzdGF0ZXM7CiAKIAkvKiBFeHBs YWluIGVhY2ggcXVlcnkgKi8KIAlwcmVwX2xjID0gbGlzdF9oZWFkKHByZXBfZXN0YXRlcyk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCmluZGV4IDk1MmE3ODRjOTI0Li5jMGNhNzJiMzhkZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKQEAgLTY5OSw2ICs2OTksNyBAQCBpbml0X2V4ZWN1dGlv bl9zdGF0ZShTUUxGdW5jdGlvbkNhY2hlUHRyIGZjYWNoZSkKIAlmY2FjaGUtPmNwbGFuID0gR2V0 Q2FjaGVkUGxhbihwbGFuc291cmNlLAogCQkJCQkJCQkgIGZjYWNoZS0+cGFyYW1MSSwKIAkJCQkJ CQkJICBmY2FjaGUtPmNvd25lciwKKwkJCQkJCQkJICBOVUxMLAogCQkJCQkJCQkgIE5VTEwpOwog CiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKaW5kZXggNGNkNWUyNjJl MGYuLjkyMzBmMmI1NTRmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9k aWZ5VGFibGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwpA QCAtNDg2NSw4ICs0ODY1LDggQEAgRXhlY0luaXRNb2RpZnlUYWJsZShNb2RpZnlUYWJsZSAqbm9k ZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICogYXMgYSByZWZlcmVuY2UgZm9yIGJ1 aWxkaW5nIHRoZSBSZXN1bHRSZWxJbmZvIG9mIHRoZSB0YXJnZXQgcGFydGl0aW9uLgogCSAqIElu IGVpdGhlciBjYXNlLCBpdCBkb2Vzbid0IG1hdHRlciB3aGljaCByZXN1bHQgcmVsYXRpb24gaXMg a2VwdCwgc28gd2UKIAkgKiBqdXN0IGtlZXAgdGhlIGZpcnN0IG9uZSwgaWYgYWxsIG90aGVycyBo YXZlIGJlZW4gcHJ1bmVkLiAgU2VlIGFsc28sCi0JICogRXhlY0RvSW5pdGlhbFBydW5pbmcoKSwg d2hpY2ggZW5zdXJlcyB0aGF0IHRoaXMgZmlyc3QgcmVzdWx0IHJlbGF0aW9uCi0JICogaGFzIGJl ZW4gbG9ja2VkLgorCSAqIEFjcXVpcmVFeGVjdXRvckxvY2tzVW5wcnVuZWQoKSwgd2hpY2ggZW5z dXJlcyB0aGF0IHRoaXMgZmlyc3QgcmVzdWx0CisJICogcmVsYXRpb24gaGFzIGJlZW4gbG9ja2Vk LgogCSAqLwogCWkgPSAwOwogCWZvcmVhY2gobCwgbm9kZS0+cmVzdWx0UmVsYXRpb25zKQpAQCAt NDg4MCw2ICs0ODgwLDcgQEAgRXhlY0luaXRNb2RpZnlUYWJsZShNb2RpZnlUYWJsZSAqbm9kZSwg RVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCQkvKiBhbGwgcmVzdWx0IHJlbGF0aW9ucyBw cnVuZWQ7IGtlZXAgdGhlIGZpcnN0IG9uZSAqLwogCQkJa2VlcF9yZWwgPSB0cnVlOwogCQkJcnRp ID0gbGluaXRpYWxfaW50KG5vZGUtPnJlc3VsdFJlbGF0aW9ucyk7CisJCQlBc3NlcnQobGlzdF9t ZW1iZXJfaW50KGVzdGF0ZS0+ZXNfcGxhbm5lZHN0bXQtPmZpcnN0UmVzdWx0UmVscywgcnRpKSk7 CiAJCQlpID0gMDsKIAkJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9zcGku YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCmluZGV4IDM4MGJiYzQ0ZTk3Li5mMWQ4NGY3 YTM1MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMKKysrIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivc3BpLmMKQEAgLTE1ODAsNiArMTU4MCw3IEBAIFNQSV9jdXJzb3Jfb3Bl bl9pbnRlcm5hbChjb25zdCBjaGFyICpuYW1lLCBTUElQbGFuUHRyIHBsYW4sCiB7CiAJQ2FjaGVk UGxhblNvdXJjZSAqcGxhbnNvdXJjZTsKIAlDYWNoZWRQbGFuICpjcGxhbjsKKwlDYWNoZWRQbGFu UHJlcERhdGEgY3ByZXAgPSB7MH07CiAJTGlzdAkgICAqc3RtdF9saXN0OwogCWNoYXIJICAgKnF1 ZXJ5X3N0cmluZzsKIAlTbmFwc2hvdAlzbmFwc2hvdDsKQEAgLTE2NjAsNyArMTY2MSwxMCBAQCBT UElfY3Vyc29yX29wZW5faW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBwbGFu LAogCSAqLwogCiAJLyogUmVwbGFuIGlmIG5lZWRlZCwgYW5kIGluY3JlbWVudCBwbGFuIHJlZmNv dW50IGZvciBwb3J0YWwgKi8KLQljcGxhbiA9IEdldENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgcGFy YW1MSSwgTlVMTCwgX1NQSV9jdXJyZW50LT5xdWVyeUVudik7CisJY3ByZXAuY29udGV4dCA9IHBv cnRhbC0+cG9ydGFsQ29udGV4dDsKKwljcHJlcC5vd25lciA9IHBvcnRhbC0+cmVzb3duZXI7CisJ Y3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5zb3VyY2UsIHBhcmFtTEksIE5VTEwsIF9TUElfY3Vy cmVudC0+cXVlcnlFbnYsCisJCQkJCQkgICZjcHJlcCk7CiAJc3RtdF9saXN0ID0gY3BsYW4tPnN0 bXRfbGlzdDsKIAogCWlmICghcGxhbi0+c2F2ZWQpCkBAIC0xNjcwLDcgKzE2NzQsMTAgQEAgU1BJ X2N1cnNvcl9vcGVuX2ludGVybmFsKGNvbnN0IGNoYXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwK IAkJICogc28gbXVzdCBjb3B5IHRoZSBwbGFuIGludG8gdGhlIHBvcnRhbCdzIGNvbnRleHQuICBB biBlcnJvciBoZXJlCiAJCSAqIHdpbGwgcmVzdWx0IGluIGxlYWtpbmcgb3VyIHJlZmNvdW50IG9u IHRoZSBwbGFuLCBidXQgaXQgZG9lc24ndAogCQkgKiBtYXR0ZXIgYmVjYXVzZSB0aGUgcGxhbiBp cyB1bnNhdmVkIGFuZCBoZW5jZSB0cmFuc2llbnQgYW55d2F5LgorCQkgKgorCQkgKiBVbnNhdmVk IHBsYW5zIHVzZSBjdXN0b20gcGxhbnMsIHNvIHByZXAgc2hvdWxkIGJlIGEgbm8tb3AuCiAJCSAq LworCQlBc3NlcnQoY3ByZXAucHJlcF9lc3RhdGVzID09IE5JTCk7CiAJCW9sZGNvbnRleHQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8ocG9ydGFsLT5wb3J0YWxDb250ZXh0KTsKIAkJc3RtdF9saXN0 ID0gY29weU9iamVjdChzdG10X2xpc3QpOwogCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29u dGV4dCk7CkBAIC0xNjg2LDcgKzE2OTMsNyBAQCBTUElfY3Vyc29yX29wZW5faW50ZXJuYWwoY29u c3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBwbGFuLAogCQkJCQkgIHF1ZXJ5X3N0cmluZywKIAkJ CQkJICBwbGFuc291cmNlLT5jb21tYW5kVGFnLAogCQkJCQkgIHN0bXRfbGlzdCwKLQkJCQkJICBO SUwsCisJCQkJCSAgY3ByZXAucHJlcF9lc3RhdGVzLAogCQkJCQkgIGNwbGFuKTsKIAogCS8qCkBA IC0yMTA0LDcgKzIxMTEsOCBAQCBTUElfcGxhbl9nZXRfY2FjaGVkX3BsYW4oU1BJUGxhblB0ciBw bGFuKQogCS8qIEdldCB0aGUgZ2VuZXJpYyBwbGFuIGZvciB0aGUgcXVlcnkgKi8KIAljcGxhbiA9 IEdldENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgTlVMTCwKIAkJCQkJCSAgcGxhbi0+c2F2ZWQgPyBD dXJyZW50UmVzb3VyY2VPd25lciA6IE5VTEwsCi0JCQkJCQkgIF9TUElfY3VycmVudC0+cXVlcnlF bnYpOworCQkJCQkJICBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52LAorCQkJCQkJICBOVUxMKTsKIAlB c3NlcnQoY3BsYW4gPT0gcGxhbnNvdXJjZS0+Z3BsYW4pOwogCiAJLyogUG9wIHRoZSBlcnJvciBj b250ZXh0IHN0YWNrICovCkBAIC0yNTAzLDYgKzI1MTEsNyBAQCBfU1BJX2V4ZWN1dGVfcGxhbihT UElQbGFuUHRyIHBsYW4sIGNvbnN0IFNQSUV4ZWN1dGVPcHRpb25zICpvcHRpb25zLAogCQlMaXN0 Q2VsbCAgICpsYzI7CiAJCUxpc3QJICAgKnByZXBfZXN0YXRlczsKIAkJTGlzdENlbGwgICAqcHJl cF9sYzsKKwkJQ2FjaGVkUGxhblByZXBEYXRhIGNwcmVwID0gezB9OwogCiAJCXNwaWNhbGxiYWNr YXJnLnF1ZXJ5ID0gcGxhbnNvdXJjZS0+cXVlcnlfc3RyaW5nOwogCkBAIC0yNTc3LDExICsyNTg2 LDE0IEBAIF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0 ZU9wdGlvbnMgKm9wdGlvbnMsCiAJCSAqIFJlcGxhbiBpZiBuZWVkZWQsIGFuZCBpbmNyZW1lbnQg cGxhbiByZWZjb3VudC4gIElmIGl0J3MgYSBzYXZlZAogCQkgKiBwbGFuLCB0aGUgcmVmY291bnQg bXVzdCBiZSBiYWNrZWQgYnkgdGhlIHBsYW5fb3duZXIuCiAJCSAqLworCQljcHJlcC5jb250ZXh0 ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7CisJCWNwcmVwLm93bmVyID0gQ3VycmVudFJlc291cmNl T3duZXI7CiAJCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihwbGFuc291cmNlLCBvcHRpb25zLT5wYXJh bXMsCi0JCQkJCQkJICBwbGFuX293bmVyLCBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52KTsKKwkJCQkJ CQkgIHBsYW5fb3duZXIsIF9TUElfY3VycmVudC0+cXVlcnlFbnYsCisJCQkJCQkJICAmY3ByZXAp OwogCiAJCXN0bXRfbGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7Ci0JCXByZXBfZXN0YXRlcyA9IE5J TDsKKwkJcHJlcF9lc3RhdGVzID0gY3ByZXAucHJlcF9lc3RhdGVzOwogCiAJCS8qCiAJCSAqIElm IHdlIHdlcmVuJ3QgZ2l2ZW4gYSBzcGVjaWZpYyBzbmFwc2hvdCB0byB1c2UsIGFuZCB0aGUgc3Rh dGVtZW50CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggNDI2MDRhMGY3NWMu LmFmYTYxZDM1N2M1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFu bmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC02NTcs NiArNjU3LDcgQEAgc3RhbmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIgKnF1 ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCiAJcmVzdWx0LT5wZXJtSW5mb3MgPSBnbG9i LT5maW5hbHJ0ZXBlcm1pbmZvczsKIAlyZXN1bHQtPnN1YnJ0aW5mb3MgPSBnbG9iLT5zdWJydGlu Zm9zOwogCXJlc3VsdC0+cmVzdWx0UmVsYXRpb25zID0gZ2xvYi0+cmVzdWx0UmVsYXRpb25zOwor CXJlc3VsdC0+Zmlyc3RSZXN1bHRSZWxzID0gZ2xvYi0+Zmlyc3RSZXN1bHRSZWxzOwogCXJlc3Vs dC0+YXBwZW5kUmVsYXRpb25zID0gZ2xvYi0+YXBwZW5kUmVsYXRpb25zOwogCXJlc3VsdC0+c3Vi cGxhbnMgPSBnbG9iLT5zdWJwbGFuczsKIAlyZXN1bHQtPnJld2luZFBsYW5JRHMgPSBnbG9iLT5y ZXdpbmRQbGFuSURzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0 cmVmcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCmluZGV4IDFiNWI5 YjVlZDljLi5kZGI3OTAyYmM4OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vc2V0cmVmcy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwpA QCAtMzg0LDYgKzM4NCwyNiBAQCBzZXRfcGxhbl9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290 LCBQbGFuICpwbGFuKQogCQl9CiAJfQogCisJLyoKKwkgKiBSZWNvcmQgdGhlIGZpcnN0IHJlc3Vs dCByZWxhdGlvbiBpZiBpdCBiZWxvbmdzIHRvIHRoZSBzZXQgb2YKKwkgKiBpbml0aWFsbHkgcHJ1 bmFibGUgcmVsYXRpb25zLiAgV2UgdXNlIGJtc19uZXh0X21lbWJlcigpIHRvIGdldAorCSAqIHRo ZSBsb3dlc3QtbnVtYmVyZWQgbGVhZiByZXN1bHQgcmVsLCB3aGljaCBtYXRjaGVzCisJICogbGlu aXRpYWxfaW50KE1vZGlmeVRhYmxlLnJlc3VsdFJlbGF0aW9ucykgYmVjYXVzZSBwYXJ0aXRpb24K KwkgKiBleHBhbnNpb24gcHJlc2VydmVzIFJUIGluZGV4IG9yZGVyLiAgVGhlcmUgaXMgb25lIE1v ZGlmeVRhYmxlCisJICogcGVyIHF1ZXJ5IGxldmVsLCBzbyB0aGlzIGNhcHR1cmVzIGV4YWN0bHkg b25lIGVudHJ5IHBlciBsZXZlbC4KKwkgKiBFeGVjSW5pdE1vZGlmeVRhYmxlKCkgYXNzZXJ0cyB0 aGF0IHRoZSByZWNvcmRlZCBpbmRleCBtYXRjaGVzCisJICogd2hhdCBpdCBhY3R1YWxseSBuZWVk cy4KKwkgKi8KKwlpZiAocm9vdC0+bGVhZl9yZXN1bHRfcmVsaWRzKQorCXsKKwkJSW5kZXgJZmly c3RSZXN1bHRSZWwgPSBibXNfbmV4dF9tZW1iZXIocm9vdC0+bGVhZl9yZXN1bHRfcmVsaWRzLCAt MSk7CisKKwkJZmlyc3RSZXN1bHRSZWwgKz0gcnRvZmZzZXQ7CisJCWlmIChibXNfaXNfbWVtYmVy KGZpcnN0UmVzdWx0UmVsLCByb290LT5nbG9iLT5wcnVuYWJsZVJlbGlkcykpCisJCQlyb290LT5n bG9iLT5maXJzdFJlc3VsdFJlbHMgPQorCQkJCWxhcHBlbmRfaW50KHJvb3QtPmdsb2ItPmZpcnN0 UmVzdWx0UmVscywgZmlyc3RSZXN1bHRSZWwpOworCX0KKwogCXJldHVybiByZXN1bHQ7CiB9CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rj b3AvcG9zdGdyZXMuYwppbmRleCAzNTVhNDkwY2RlOS4uZGUzNjJmZjE2NzIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMKQEAgLTE2MzcsNiArMTYzNyw3IEBAIGV4ZWNfYmluZF9tZXNzYWdlKFN0cmluZ0luZm8g aW5wdXRfbWVzc2FnZSkKIAlpbnQxNgkgICAqcmZvcm1hdHMgPSBOVUxMOwogCUNhY2hlZFBsYW5T b3VyY2UgKnBzcmM7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CisJQ2FjaGVkUGxhblByZXBEYXRhIGNw cmVwID0gezB9OwogCVBvcnRhbAkJcG9ydGFsOwogCWNoYXIJICAgKnF1ZXJ5X3N0cmluZzsKIAlj aGFyCSAgICpzYXZlZF9zdG10X25hbWU7CkBAIC0yMDE4LDcgKzIwMTksOSBAQCBleGVjX2JpbmRf bWVzc2FnZShTdHJpbmdJbmZvIGlucHV0X21lc3NhZ2UpCiAJICogd2lsbCBiZSBnZW5lcmF0ZWQg aW4gTWVzc2FnZUNvbnRleHQuICBUaGUgcGxhbiByZWZjb3VudCB3aWxsIGJlCiAJICogYXNzaWdu ZWQgdG8gdGhlIFBvcnRhbCwgc28gaXQgd2lsbCBiZSByZWxlYXNlZCBhdCBwb3J0YWwgZGVzdHJ1 Y3Rpb24uCiAJICovCi0JY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBzcmMsIHBhcmFtcywgTlVMTCwg TlVMTCk7CisJY3ByZXAuY29udGV4dCA9IHBvcnRhbC0+cG9ydGFsQ29udGV4dDsKKwljcHJlcC5v d25lciA9IHBvcnRhbC0+cmVzb3duZXI7CisJY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBzcmMsIHBh cmFtcywgTlVMTCwgTlVMTCwgJmNwcmVwKTsKIAogCS8qCiAJICogTm93IHdlIGNhbiBkZWZpbmUg dGhlIHBvcnRhbC4KQEAgLTIwMzEsNyArMjAzNCw3IEBAIGV4ZWNfYmluZF9tZXNzYWdlKFN0cmlu Z0luZm8gaW5wdXRfbWVzc2FnZSkKIAkJCQkJICBxdWVyeV9zdHJpbmcsCiAJCQkJCSAgcHNyYy0+ Y29tbWFuZFRhZywKIAkJCQkJICBjcGxhbi0+c3RtdF9saXN0LAotCQkJCQkgIE5JTCwKKwkJCQkJ ICBjcHJlcC5wcmVwX2VzdGF0ZXMsCiAJCQkJCSAgY3BsYW4pOwogCiAJLyogUG9ydGFsIGlzIGRl ZmluZWQsIHNldCB0aGUgcGxhbiBJRCBiYXNlZCBvbiBpdHMgY29udGVudHMuICovCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL3BsYW5jYWNoZS5jCmluZGV4IDE4MmMxNmU5YjlhLi4yZDRjNTdkM2RlYiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKQEAgLTkzLDE0ICs5MywxNyBAQCBzdGF0aWMg Ym9vbCBTdG10UGxhblJlcXVpcmVzUmV2YWxpZGF0aW9uKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5z b3VyY2UpOwogc3RhdGljIGJvb2wgQnVpbGRpbmdQbGFuUmVxdWlyZXNTbmFwc2hvdChDYWNoZWRQ bGFuU291cmNlICpwbGFuc291cmNlKTsKIHN0YXRpYyBMaXN0ICpSZXZhbGlkYXRlQ2FjaGVkUXVl cnkoQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKIAkJCQkJCQkJICAgUXVlcnlFbnZpcm9u bWVudCAqcXVlcnlFbnYpOwotc3RhdGljIGJvb2wgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5T b3VyY2UgKnBsYW5zb3VyY2UpOworc3RhdGljIGJvb2wgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBs YW5Tb3VyY2UgKnBsYW5zb3VyY2UsIENhY2hlZFBsYW5QcmVwRGF0YSAqY3ByZXApOwogc3RhdGlj IENhY2hlZFBsYW4gKkJ1aWxkQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNl LCBMaXN0ICpxbGlzdCwKIAkJCQkJCQkJICAgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywgUXVl cnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOwogc3RhdGljIGJvb2wgY2hvb3NlX2N1c3RvbV9wbGFu KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAJCQkJCQkJICAgUGFyYW1MaXN0SW5mbyBi b3VuZFBhcmFtcyk7CiBzdGF0aWMgZG91YmxlIGNhY2hlZF9wbGFuX2Nvc3QoQ2FjaGVkUGxhbiAq cGxhbiwgYm9vbCBpbmNsdWRlX3BsYW5uZXIpOwogc3RhdGljIFF1ZXJ5ICpRdWVyeUxpc3RHZXRQ cmltYXJ5U3RtdChMaXN0ICpzdG10cyk7Ci1zdGF0aWMgdm9pZCBBY3F1aXJlRXhlY3V0b3JMb2Nr cyhMaXN0ICpzdG10X2xpc3QsIGJvb2wgYWNxdWlyZSk7CitzdGF0aWMgdm9pZCBBY3F1aXJlRXhl Y3V0b3JMb2Nrc0FsbChMaXN0ICpzdG10X2xpc3QsIGJvb2wgYWNxdWlyZSk7CitzdGF0aWMgdm9p ZCBBY3F1aXJlRXhlY3V0b3JMb2Nrc1VucHJ1bmVkKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1 aXJlLAorCQkJCQkJCQkJCSBDYWNoZWRQbGFuUHJlcERhdGEgKmNwcmVwKTsKK3N0YXRpYyB2b2lk IENhY2hlZFBsYW5QcmVwQ2xlYW51cChDYWNoZWRQbGFuUHJlcERhdGEgKmNwcmVwKTsKIHN0YXRp YyB2b2lkIEFjcXVpcmVQbGFubmVyTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUp Owogc3RhdGljIHZvaWQgU2NhblF1ZXJ5Rm9yTG9ja3MoUXVlcnkgKnBhcnNldHJlZSwgYm9vbCBh Y3F1aXJlKTsKIHN0YXRpYyBib29sIFNjYW5RdWVyeVdhbGtlcihOb2RlICpub2RlLCBib29sICph Y3F1aXJlKTsKQEAgLTk0Miw2ICs5NDUsMTEgQEAgUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5KENhY2hl ZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAvKgogICogQ2hlY2tDYWNoZWRQbGFuOiBzZWUgaWYg dGhlIENhY2hlZFBsYW5Tb3VyY2UncyBnZW5lcmljIHBsYW4gaXMgdmFsaWQuCiAgKgorICogSWYg J2NwcmVwJyBpcyBub3QgTlVMTCwgRXhlY3V0b3JQcmVwKCkgaXMgYXBwbGllZCB0byBlYWNoIFBs YW5uZWRTdG10IHRvCisgKiBjb21wdXRlIHRoZSBzZXQgb2YgcGFydGl0aW9ucyB0aGF0IHN1cnZp dmUgaW5pdGlhbCBydW50aW1lIHBydW5pbmcgaW4gb3JkZXIKKyAqIHRvIG9ubHkgbG9jayB0aGVt LiAgVGhlIEVTdGF0ZXMgY3JlYXRlZCB0byBkbyBzbyBhcmUgc2F2ZWQgaW4gY3ByZXAgZm9yCisg KiBsYXRlciByZXVzZSBieSBFeGVjdXRvclN0YXJ0KCkuCisgKgogICogQ2FsbGVyIG11c3QgaGF2 ZSBhbHJlYWR5IGNhbGxlZCBSZXZhbGlkYXRlQ2FjaGVkUXVlcnkgdG8gdmVyaWZ5IHRoYXQgdGhl CiAgKiBxdWVyeXRyZWUgaXMgdXAgdG8gZGF0ZS4KICAqCkBAIC05NDksNyArOTU3LDcgQEAgUmV2 YWxpZGF0ZUNhY2hlZFF1ZXJ5KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAgKiAoV2Ug bXVzdCBkbyB0aGlzIGZvciB0aGUgInRydWUiIHJlc3VsdCB0byBiZSByYWNlLWNvbmRpdGlvbi1m cmVlLikKICAqLwogc3RhdGljIGJvb2wKLUNoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNl ICpwbGFuc291cmNlKQorQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2UsIENhY2hlZFBsYW5QcmVwRGF0YSAqY3ByZXApCiB7CiAJQ2FjaGVkUGxhbiAqcGxhbiA9IHBs YW5zb3VyY2UtPmdwbGFuOwogCkBAIC05ODMsNyArOTkxLDEwIEBAIENoZWNrQ2FjaGVkUGxhbihD YWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKQogCQkgKi8KIAkJQXNzZXJ0KHBsYW4tPnJlZmNv dW50ID4gMCk7CiAKLQkJQWNxdWlyZUV4ZWN1dG9yTG9ja3MocGxhbi0+c3RtdF9saXN0LCB0cnVl KTsKKwkJaWYgKGNwcmVwKQorCQkJQWNxdWlyZUV4ZWN1dG9yTG9ja3NVbnBydW5lZChwbGFuLT5z dG10X2xpc3QsIHRydWUsIGNwcmVwKTsKKwkJZWxzZQorCQkJQWNxdWlyZUV4ZWN1dG9yTG9ja3NB bGwocGxhbi0+c3RtdF9saXN0LCB0cnVlKTsKIAogCQkvKgogCQkgKiBJZiBwbGFuIHdhcyB0cmFu c2llbnQsIGNoZWNrIHRvIHNlZSBpZiBUcmFuc2FjdGlvblhtaW4gaGFzCkBAIC0xMDA1LDcgKzEw MTYsMTMgQEAgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpCiAJ CX0KIAogCQkvKiBPb3BzLCB0aGUgcmFjZSBjYXNlIGhhcHBlbmVkLiAgUmVsZWFzZSB1c2VsZXNz IGxvY2tzLiAqLwotCQlBY3F1aXJlRXhlY3V0b3JMb2NrcyhwbGFuLT5zdG10X2xpc3QsIGZhbHNl KTsKKwkJaWYgKGNwcmVwKQorCQkJQWNxdWlyZUV4ZWN1dG9yTG9ja3NVbnBydW5lZChwbGFuLT5z dG10X2xpc3QsIGZhbHNlLCBjcHJlcCk7CisJCWVsc2UKKwkJCUFjcXVpcmVFeGVjdXRvckxvY2tz QWxsKHBsYW4tPnN0bXRfbGlzdCwgZmFsc2UpOworCisJCS8qIEFsc28gY2xlYW4gdXAgRXhlY3V0 b3JQcmVwKCkgc3RhdGUsIGlmIG5lY2Vzc2FyeS4gKi8KKwkJQ2FjaGVkUGxhblByZXBDbGVhbnVw KGNwcmVwKTsKIAl9CiAKIAkvKgpAQCAtMTI4NSw2ICsxMzAyLDE1IEBAIGNhY2hlZF9wbGFuX2Nv c3QoQ2FjaGVkUGxhbiAqcGxhbiwgYm9vbCBpbmNsdWRlX3BsYW5uZXIpCiAgKiBPbiByZXR1cm4s IHRoZSBwbGFuIGlzIHZhbGlkIGFuZCB3ZSBoYXZlIHN1ZmZpY2llbnQgbG9ja3MgdG8gYmVnaW4K ICAqIGV4ZWN1dGlvbi4KICAqCisgKiBJZiAnY3ByZXAnIGlzIG5vdCBOVUxMIGFuZCBhIGdlbmVy aWMgcGxhbiBpcyByZXVzZWQsIHRoZSBmdW5jdGlvbgorICogcGVyZm9ybXMgaW5pdGlhbCBwcnVu aW5nIHZpYSBFeGVjdXRvclByZXAoKSBhbmQgbG9ja3Mgb25seSB0aGUKKyAqIHN1cnZpdmluZyBw YXJ0aXRpb25zLiAgVGhlIHJlc3VsdGluZyBFU3RhdGVzIGFyZSBzdG9yZWQgaW4KKyAqIGNwcmVw LT5wcmVwX2VzdGF0ZXMgYW5kIG11c3QgYmUgZGVsaXZlcmVkIHRvIEV4ZWN1dG9yU3RhcnQoKSB2 aWEKKyAqIFF1ZXJ5RGVzYy0+ZXN0YXRlIChvciB0aGUgZXF1aXZhbGVudCBwb3J0YWwvU1BJIHBh dGgpLiAgRmFpbHVyZQorICogdG8gZG8gc28gbWVhbnMgdGhlIGV4ZWN1dG9yIHdpbGwgb3BlcmF0 ZSBvbiByZWxhdGlvbnMgZm9yIHdoaWNoCisgKiBsb2NrcyB3ZXJlIG5ldmVyIGFjcXVpcmVkLiAg UGFzc2luZyBOVUxMIGZvciBjcHJlcCBpcyBhbHdheXMgc2FmZTsKKyAqIGFsbCBwYXJ0aXRpb25z IGFyZSBsb2NrZWQgYXMgYmVmb3JlLgorICoKICAqIE9uIHJldHVybiwgdGhlIHJlZmNvdW50IG9m IHRoZSBwbGFuIGhhcyBiZWVuIGluY3JlbWVudGVkOyBhIGxhdGVyCiAgKiBSZWxlYXNlQ2FjaGVk UGxhbigpIGNhbGwgaXMgZXhwZWN0ZWQuICBJZiAib3duZXIiIGlzIG5vdCBOVUxMIHRoZW4KICAq IHRoZSByZWZjb3VudCBoYXMgYmVlbiByZXBvcnRlZCB0byB0aGF0IFJlc291cmNlT3duZXIgKG5v dGUgdGhhdCB0aGlzCkBAIC0xMjk1LDcgKzEzMjEsOCBAQCBjYWNoZWRfcGxhbl9jb3N0KENhY2hl ZFBsYW4gKnBsYW4sIGJvb2wgaW5jbHVkZV9wbGFubmVyKQogICovCiBDYWNoZWRQbGFuICoKIEdl dENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBi b3VuZFBhcmFtcywKLQkJCSAgUmVzb3VyY2VPd25lciBvd25lciwgUXVlcnlFbnZpcm9ubWVudCAq cXVlcnlFbnYpCisJCQkgIFJlc291cmNlT3duZXIgb3duZXIsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1 ZXJ5RW52LAorCQkJICBDYWNoZWRQbGFuUHJlcERhdGEgKmNwcmVwKQogewogCUNhY2hlZFBsYW4g KnBsYW4gPSBOVUxMOwogCUxpc3QJICAgKnFsaXN0OwpAQCAtMTMxNyw3ICsxMzQ0LDkgQEAgR2V0 Q2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQYXJhbUxpc3RJbmZvIGJv dW5kUGFyYW1zLAogCiAJaWYgKCFjdXN0b21wbGFuKQogCXsKLQkJaWYgKENoZWNrQ2FjaGVkUGxh bihwbGFuc291cmNlKSkKKwkJaWYgKGNwcmVwKQorCQkJY3ByZXAtPnBhcmFtcyA9IGJvdW5kUGFy YW1zOworCQlpZiAoQ2hlY2tDYWNoZWRQbGFuKHBsYW5zb3VyY2UsIGNwcmVwKSkKIAkJewogCQkJ LyogV2Ugd2FudCBhIGdlbmVyaWMgcGxhbiwgYW5kIHdlIGFscmVhZHkgaGF2ZSBhIHZhbGlkIG9u ZSAqLwogCQkJcGxhbiA9IHBsYW5zb3VyY2UtPmdwbGFuOwpAQCAtMTkwNCwxMSArMTkzMywxMyBA QCBRdWVyeUxpc3RHZXRQcmltYXJ5U3RtdChMaXN0ICpzdG10cykKIH0KIAogLyoKLSAqIEFjcXVp cmVFeGVjdXRvckxvY2tzOiBhY3F1aXJlIGxvY2tzIG5lZWRlZCBmb3IgZXhlY3V0aW9uIG9mIGEg Y2FjaGVkIHBsYW47Ci0gKiBvciByZWxlYXNlIHRoZW0gaWYgYWNxdWlyZSBpcyBmYWxzZS4KKyAq IEFjcXVpcmVFeGVjdXRvckxvY2tzQWxsOiBhY3F1aXJlIGxvY2tzIG5lZWRlZCBmb3IgZXhlY3V0 aW9uIG9mIGEgY2FjaGVkCisgKiBwbGFuOyBvciByZWxlYXNlIHRoZW0gaWYgYWNxdWlyZSBpcyBm YWxzZS4KKyAqCisgKiBUaGlzIGxvY2tzIGFsbCByZWxhdGlvbnMgaW4gYSBnaXZlbiBQbGFubmVk U3RtdCdzIHJhbmdlIHRhYmxlLgogICovCiBzdGF0aWMgdm9pZAotQWNxdWlyZUV4ZWN1dG9yTG9j a3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpCitBY3F1aXJlRXhlY3V0b3JMb2Nrc0Fs bChMaXN0ICpzdG10X2xpc3QsIGJvb2wgYWNxdWlyZSkKIHsKIAlMaXN0Q2VsbCAgICpsYzE7CiAK QEAgLTE5NTUsNiArMTk4NiwyMTIgQEAgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9s aXN0LCBib29sIGFjcXVpcmUpCiAJfQogfQogCisvKgorICogTG9ja1JlbGlkcworICogCQlBY3F1 aXJlIG9yIHJlbGVhc2UgbG9ja3Mgb24gdGhlIHNwZWNpZmllZCByZWxpZHMsIHdoaWNoIHJlZmVy ZW5jZQorICogCQllbnRyaWVzIGluIHRoZSBwcm92aWRlZCByYW5nZSB0YWJsZS4KKyAqCisgKiBI ZWxwZXIgZm9yIEFjcXVpcmVFeGVjdXRvckxvY2tzVW5wcnVuZWQoKS4KKyAqLworc3RhdGljIHZv aWQKK0xvY2tSZWxpZHMoTGlzdCAqcnRhYmxlLCBCaXRtYXBzZXQgKnJlbGlkcywgYm9vbCBhY3F1 aXJlKQoreworCWludAlydGluZGV4ID0gLTE7CisKKwl3aGlsZSAoKHJ0aW5kZXggPSBibXNfbmV4 dF9tZW1iZXIocmVsaWRzLCBydGluZGV4KSkgPj0gMCkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0 ZSA9IGxpc3RfbnRoX25vZGUoUmFuZ2VUYmxFbnRyeSwgcnRhYmxlLCBydGluZGV4IC0gMSk7CisK KwkJQXNzZXJ0KHJ0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04gfHwKKwkJCSAgIChydGUtPnJ0 ZWtpbmQgPT0gUlRFX1NVQlFVRVJZICYmIE9pZElzVmFsaWQocnRlLT5yZWxpZCkpKTsKKworCQkv KgorCQkgKiBBY3F1aXJlIHRoZSBhcHByb3ByaWF0ZSB0eXBlIG9mIGxvY2sgb24gZWFjaCByZWxh dGlvbiBPSUQuIE5vdGUKKwkJICogdGhhdCB3ZSBkb24ndCBhY3R1YWxseSB0cnkgdG8gb3BlbiB0 aGUgcmVsLCBhbmQgaGVuY2Ugd2lsbCBub3QKKwkJICogZmFpbCBpZiBpdCdzIGJlZW4gZHJvcHBl ZCBlbnRpcmVseSAtLS0gd2UnbGwganVzdCB0cmFuc2llbnRseQorCQkgKiBhY3F1aXJlIGEgbm9u LWNvbmZsaWN0aW5nIGxvY2suCisJCSAqLworCQlpZiAoYWNxdWlyZSkKKwkJCUxvY2tSZWxhdGlv bk9pZChydGUtPnJlbGlkLCBydGUtPnJlbGxvY2ttb2RlKTsKKwkJZWxzZQorCQkJVW5sb2NrUmVs YXRpb25PaWQocnRlLT5yZWxpZCwgcnRlLT5yZWxsb2NrbW9kZSk7CisJfQorfQorCisvKgorICog QWNxdWlyZUV4ZWN1dG9yTG9ja3NVbnBydW5lZAorICoJCUFjcXVpcmUgb3IgcmVsZWFzZSBleGVj dXRpb24gbG9ja3MgZm9yIG9ubHkgdW5wcnVuZWQgcmVsYXRpb25zCisgKgkJcmVmZXJlbmNlZCBi eSB0aGUgZ2l2ZW4gUGxhbm5lZFN0bXRzLgorICoKKyAqIE9uIGFjcXVpcmUsIHRoaXM6CisgKgkt IGxvY2tzIHVucHJ1bmFibGUgcmVscyBsaXN0ZWQgaW4gUGxhbm5lZFN0bXQudW5wcnVuYWJsZVJl bGlkcworICoJLSBydW5zIEV4ZWN1dG9yUHJlcCgpIHRvIHBlcmZvcm0gaW5pdGlhbCBydW50aW1l IHBydW5pbmcKKyAqCS0gbG9ja3MgdGhlIHN1cnZpdmluZyBwYXJ0aXRpb25zIHJlcG9ydGVkIGlu IHRoZSBwcmVwIGVzdGF0ZQorICoJLSBhcHBlbmRzIHRoZSBFU3RhdGUgcG9pbnRlciBmb3IgZWFj aCBQbGFubmVkU3RtdCB0byBjcHJlcC0+cHJlcF9lc3RhdGVzCisgKgorICogT24gcmVsZWFzZSwg aXQ6CisgKgktIGxvb2tzIHVwIHRoZSBFU3RhdGUgZm9yIGVhY2ggUGxhbm5lZFN0bXQgZnJvbSBj cHJlcC0+cHJlcF9lc3RhdGVzCisgKgkgICh3aGljaCBtdXN0IGFscmVhZHkgYmUgcG9wdWxhdGVk KQorICoJLSB1bmxvY2tzIHRoZSBzYW1lIHJlbGF0aW9ucyBpZGVudGlmaWVkIGR1cmluZyBhY3F1 aXJlCisgKgorICogcHJlcF9lc3RhdGVzIGlzIGV4dGVuZGVkIGR1cmluZyBhY3F1aXJlIGFuZCBt dXN0IG1hdGNoIHN0bXRfbGlzdCBvbmUtdG8tb25lCisgKiB3aGVuIHJlbGVhc2luZyBsb2Nrcy4g IE1lbW9yeSBhbGxvY2F0aW9uIGZvciBFU3RhdGUgaGFwcGVucyBpbgorICogY3ByZXAtPmNvbnRl eHQuICBMb2NrcyBhcmUgYWNxdWlyZWQgdXNpbmcgY3ByZXAtPm93bmVyLgorICovCitzdGF0aWMg dm9pZAorQWNxdWlyZUV4ZWN1dG9yTG9ja3NVbnBydW5lZChMaXN0ICpzdG10X2xpc3QsIGJvb2wg YWNxdWlyZSwKKwkJCQkJCQkgQ2FjaGVkUGxhblByZXBEYXRhICpjcHJlcCkKK3sKKwlNZW1vcnlD b250ZXh0IG9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY3ByZXAtPmNvbnRleHQp OworCUxpc3RDZWxsICAgKmxjMTsKKwlMaXN0CSAgICpwcmVwX2VzdGF0ZXM7CisJTGlzdENlbGwg ICAqcHJlcF9sYzsKKworCUFzc2VydChjcHJlcCk7CisKKwkvKgorCSAqIFdoZW4gcmVsZWFzaW5n IGxvY2tzLCB1c2UgdGhlIEVTdGF0ZSBsaXN0IChpZiBhbnkpIGNyZWF0ZWQgZHVyaW5nCisJICog YWNxdWlzaXRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIHJlbGlkcyB0byB1bmxvY2suIFRoZSBsaXN0 IG11c3QgbWF0Y2gKKwkgKiB0aGUgUGxhbm5lZFN0bXQgbGlzdCBvbmUtdG8tb25lLgorCSAqLwor CXByZXBfZXN0YXRlcyA9IGNwcmVwLT5wcmVwX2VzdGF0ZXM7CisJQXNzZXJ0KGFjcXVpcmUgfHwg bGlzdF9sZW5ndGgocHJlcF9lc3RhdGVzKSA9PSBsaXN0X2xlbmd0aChzdG10X2xpc3QpKTsKKwor CXByZXBfbGMgPSBsaXN0X2hlYWQocHJlcF9lc3RhdGVzKTsKKwlmb3JlYWNoKGxjMSwgc3RtdF9s aXN0KQorCXsKKwkJUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5l ZFN0bXQsIGxjMSk7CisJCUVTdGF0ZSAqcHJlcF9lc3RhdGU7CisKKwkJaWYgKHBsYW5uZWRzdG10 LT5jb21tYW5kVHlwZSA9PSBDTURfVVRJTElUWSkKKwkJeworCQkJLyogU2FtZSBhcyBBY3F1aXJl RXhlY3V0b3JMb2NrcygpLiAqLworCQkJUXVlcnkJICAgKnF1ZXJ5ID0gVXRpbGl0eUNvbnRhaW5z UXVlcnkocGxhbm5lZHN0bXQtPnV0aWxpdHlTdG10KTsKKworCQkJaWYgKHF1ZXJ5KQorCQkJCVNj YW5RdWVyeUZvckxvY2tzKHF1ZXJ5LCBhY3F1aXJlKTsKKworCQkJLyogS2VlcCB0aGUgbGlzdCBv bmUtdG8tb25lIHdpdGggc3RtdF9saXN0LiAqLworCQkJaWYgKGFjcXVpcmUpCisJCQkJY3ByZXAt PnByZXBfZXN0YXRlcyA9IGxhcHBlbmQoY3ByZXAtPnByZXBfZXN0YXRlcywgTlVMTCk7CisJCQll bHNlCisJCQkJKHZvaWQpIG5leHRfcHJlcF9lc3RhdGUocHJlcF9lc3RhdGVzLCAmcHJlcF9sYyk7 CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIExvY2sgdGFibGVzIG1lbnRpb25lZCBp biB0aGUgb3JpZ2luYWwgcXVlcnkgYW5kIG90aGVyIHVucHJ1bmFibGUKKwkJICogcmVsYXRpb25z IHRoYXQgd2VyZSBhZGRlZCB0byB0aGUgcGxhbiB2aWEgaW5oZXJpdGFuY2UgZXhwYW5zaW9uLgor CQkgKi8KKwkJTG9ja1JlbGlkcyhwbGFubmVkc3RtdC0+cnRhYmxlLCBwbGFubmVkc3RtdC0+dW5w cnVuYWJsZVJlbGlkcywgYWNxdWlyZSk7CisKKwkJLyogTG9jayBwYXJ0aXRpb25zIHN1cnZpdmlu ZyBydW50aW1lIGluaXRpYWwgcHJ1bmluZy4gKi8KKwkJaWYgKGFjcXVpcmUpCisJCXsKKwkJCS8q CisJCQkgKiBQcnVuaW5nIGV4cHJlc3Npb25zIG1heSBjYWxsIFBMIGZ1bmN0aW9ucyB0aGF0IHJl cXVpcmUgYW4gYWN0aXZlCisJCQkgKiBzbmFwc2hvdCAoZS5nLiwgdmlhIEVuc3VyZVBvcnRhbFNu YXBzaG90RXhpc3RzKCkpLiBFc3RhYmxpc2ggb25lCisJCQkgKiBpZiBuZWVkZWQuCisJCQkgKi8K KwkJCWJvb2wJCXNuYXBfcHVzaGVkID0gZmFsc2U7CisKKwkJCWlmICghQWN0aXZlU25hcHNob3RT ZXQoKSkKKwkJCXsKKwkJCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hv dCgpKTsKKwkJCQlzbmFwX3B1c2hlZCA9IHRydWU7CisJCQl9CisKKwkJCXByZXBfZXN0YXRlID0g RXhlY3V0b3JQcmVwKHBsYW5uZWRzdG10LCBjcHJlcC0+cGFyYW1zLAorCQkJCQkJCQkJICAgY3By ZXAtPm93bmVyLCBjcHJlcC0+ZWZsYWdzKTsKKwkJCUFzc2VydChwcmVwX2VzdGF0ZSk7CisJCQlj cHJlcC0+cHJlcF9lc3RhdGVzID0gbGFwcGVuZChjcHJlcC0+cHJlcF9lc3RhdGVzLCBwcmVwX2Vz dGF0ZSk7CisKKwkJCWlmIChzbmFwX3B1c2hlZCkKKwkJCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwor CQl9CisJCWVsc2UKKwkJCXByZXBfZXN0YXRlID0gbmV4dF9wcmVwX2VzdGF0ZShwcmVwX2VzdGF0 ZXMsICZwcmVwX2xjKTsKKworCQlpZiAocHJlcF9lc3RhdGUpCisJCXsKKwkJCS8qCisJCQkgKiBl c191bnBydW5lZF9yZWxpZHMgaW5jbHVkZXMgcGxhbm5lZHN0bXQtPnVucHJ1bmFibGVSZWxpZHMs CisJCQkgKiB3aGljaCB3ZSd2ZSBhbHJlYWR5IGxvY2tlZC4gRmlsdGVyIHRoZW0gb3V0IHRvIGF2 b2lkIGRvdWJsZS1sb2NraW5nLgorCQkJICovCisJCQlCaXRtYXBzZXQgKmxvY2tfcmVsaWRzID0g Ym1zX2RpZmZlcmVuY2UocHJlcF9lc3RhdGUtPmVzX3VucHJ1bmVkX3JlbGlkcywKKwkJCQkJCQkJ CQkJCQlwbGFubmVkc3RtdC0+dW5wcnVuYWJsZVJlbGlkcyk7CisKKwkJCS8qCisJCQkgKiBXZSBt dXN0IGFsd2F5cyBpbmNsdWRlIHRoZSBmaXJzdCByZXN1bHQgcmVsYXRpb24gb2YgZWFjaAorCQkJ ICogTW9kaWZ5VGFibGUgbm9kZSBpbiB0aGUgcGxhbiwgdGhhdCBpcywgdGhlIG9uZSBtZW50aW9u ZWQgaW4KKwkJCSAqIHBsYW5uZWRzdG10LT5maXJzdFJlc3VsdFJlbHMgaW4gdGhlIHNldCBvZiBy ZWxhdGlvbnMgdG8gYmUKKwkJCSAqIGxvY2tlZCB0byBzYXRpc2Z5IGV4ZWN1dG9yIGFzc3VtcHRp b25zIGRlc2NyaWJlZAorCQkJICogaW4gRXhlY0luaXRNb2RpZnlUYWJsZSgpLiAgVGhpcyBjYW4g YmUgd2FzdGVmdWwsIGJlY2F1c2Ugd2UKKwkJCSAqIG1heSBub3QgbmVlZCB0byB1c2UgdGhlIGZp cnN0IHJlc3VsdCByZWxhdGlvbiBhdCBhbGwgaWYgb3RoZXIKKwkJCSAqIHJlc3VsdCByZWxhdGlv bnMgYXJlIHVucHJ1bmVkIGFuZCB0aHVzIHN1ZmZpY2llbnQgZm9yIHRoZQorCQkJICogTW9kaWZ5 VGFibGUgbm9kZSdzIG5lZWRzLiAgVW5mb3J0dW5hdGVseSwgd2UgZG9uJ3QgaGF2ZSBwZXItbm9k ZQorCQkJICogdW5wcnVuZWRfcmVsaWRzIHNldCB0byBkZXRlcm1pbmUgdGhhdCBvdGhlciByZXN1 bHQgcmVsYXRpb25zCisJCQkgKiBhcmUgaW5jbHVkZWQuCisJCQkgKi8KKwkJCWlmIChwbGFubmVk c3RtdC0+cmVzdWx0UmVsYXRpb25zKQorCQkJeworCQkJCUxpc3RDZWxsICpsYzI7CisKKwkJCQlm b3JlYWNoKGxjMiwgcGxhbm5lZHN0bXQtPmZpcnN0UmVzdWx0UmVscykKKwkJCQl7CisJCQkJCUlu ZGV4ICAgICAgIGZpcnN0UmVzdWx0UmVsID0gbGZpcnN0X2ludChsYzIpOworCisJCQkJCWlmICgh Ym1zX2lzX21lbWJlcihmaXJzdFJlc3VsdFJlbCwgbG9ja19yZWxpZHMpKQorCQkJCQkJbG9ja19y ZWxpZHMgPSBibXNfYWRkX21lbWJlcihsb2NrX3JlbGlkcywgZmlyc3RSZXN1bHRSZWwpOworCQkJ CX0KKwkJCX0KKworCQkJTG9ja1JlbGlkcyhwbGFubmVkc3RtdC0+cnRhYmxlLCBsb2NrX3JlbGlk cywgYWNxdWlyZSk7CisJCQlibXNfZnJlZShsb2NrX3JlbGlkcyk7CisJCX0KKwl9CisKKwlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Cit9CisKKy8qCisgKiBDYWNoZWRQbGFuUHJl cENsZWFudXAKKyAqCQlDbGVhbiB1cCBFU3RhdGUgYnVpbHQgZm9yIGEgZ2VuZXJpYyBwbGFuLgor ICoKKyAqIFRoaXMgaXMgdXNlZCBpbiB0aGUgY29ybmVyIGNhc2Ugd2hlcmUgQ2hlY2tDYWNoZWRQ bGFuKCkgZGlzY292ZXJzCisgKiB0aGF0IGEgQ2FjaGVkUGxhbiBoYXMgYmVjb21lIGludmFsaWQg YWZ0ZXIgQWNxdWlyZUV4ZWN1dG9yTG9ja3NVbnBydW5lZCgpCisgKiBoYXMgYWxyZWFkeSBydW4u ICBJbiB0aGF0IGNhc2Ugd2UgbXVzdCBib3RoIHJlbGVhc2UgdGhlIGV4ZWN1dGlvbiBsb2Nrcwor ICogYW5kIGRpc3Bvc2Ugb2YgdGhlIEV4ZWNQcmVwIGxpc3Qgc3RvcmVkIGluIENhY2hlZFBsYW5Q cmVwRGF0YSwgc2luY2UgdGhlCisgKiBleGVjdXRvciB3aWxsIG5ldmVyIHNlZSBvciBjbGVhbiBp dCB1cC4KKyAqLworc3RhdGljIHZvaWQKK0NhY2hlZFBsYW5QcmVwQ2xlYW51cChDYWNoZWRQbGFu UHJlcERhdGEgKmNwcmVwKQoreworCUxpc3RDZWxsICAgKmxjOworCVJlc291cmNlT3duZXIgb2xk b3duZXI7CisKKwlpZiAoY3ByZXAgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogU3dpdGNoIHRv IG93bmVyIHRoYXQgRXhlY3V0b3JQcmVwKCkgd291bGQgaGF2ZSB1c2VkLiAqLworCW9sZG93bmVy ID0gQ3VycmVudFJlc291cmNlT3duZXI7CisJQ3VycmVudFJlc291cmNlT3duZXIgPSBjcHJlcC0+ b3duZXI7CisJZm9yZWFjaChsYywgY3ByZXAtPnByZXBfZXN0YXRlcykKKwl7CisJCUVTdGF0ZSAq cHJlcF9lc3RhdGUgPSAoRVN0YXRlICopIGxmaXJzdChsYyk7CisKKwkJaWYgKHByZXBfZXN0YXRl ID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlFeGVjQ2xvc2VSYW5nZVRhYmxlUmVsYXRpb25z KHByZXBfZXN0YXRlKTsKKwkJRnJlZUV4ZWN1dG9yU3RhdGUocHJlcF9lc3RhdGUpOworCX0KKwlD dXJyZW50UmVzb3VyY2VPd25lciA9IG9sZG93bmVyOworCisJbGlzdF9mcmVlKGNwcmVwLT5wcmVw X2VzdGF0ZXMpOworCWNwcmVwLT5wcmVwX2VzdGF0ZXMgPSBOSUw7Cit9CisKIC8qCiAgKiBBY3F1 aXJlUGxhbm5lckxvY2tzOiBhY3F1aXJlIGxvY2tzIG5lZWRlZCBmb3IgcGxhbm5pbmcgb2YgYSBx dWVyeXRyZWUgbGlzdDsKICAqIG9yIHJlbGVhc2UgdGhlbSBpZiBhY3F1aXJlIGlzIGZhbHNlLgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaAppbmRleCAyNzc1OGVjMTZmZS4uNGZkOWQ5YmNjNTYgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oCkBAIC0yMTcsNiArMjE3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbm5lckds b2JhbAogCS8qICJmbGF0IiBsaXN0IG9mIGludGVnZXIgUlQgaW5kZXhlcyAqLwogCUxpc3QJICAg KnJlc3VsdFJlbGF0aW9uczsKIAorCS8qICJmbGF0IiBsaXN0IG9mIGludGVnZXIgUlQgaW5kZXhl cyAob25lIHBlciBNb2RpZnlUYWJsZSBub2RlKSAqLworCUxpc3QJICAgKmZpcnN0UmVzdWx0UmVs czsKKwogCS8qICJmbGF0IiBsaXN0IG9mIEFwcGVuZFJlbEluZm9zICovCiAJTGlzdAkgICAqYXBw ZW5kUmVsYXRpb25zOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IGI2MTg1ODI1ZmNiLi41NTI3 OWNiYmRhOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTEyMSw2ICsxMjEsMTYgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAkvKiBpbnRlZ2VyIGxpc3Qgb2YgUlQgaW5kZXhlcywgb3Ig TklMICovCiAJTGlzdAkgICAqcmVzdWx0UmVsYXRpb25zOwogCisJLyoKKwkgKiBydGFibGUgaW5k ZXhlcyBvZiBmaXJzdCB0YXJnZXQgcmVsYXRpb24gaW4gZWFjaCBNb2RpZnlUYWJsZSBub2RlIGlu IHRoZQorCSAqIHBsYW4gZm9yIElOU0VSVC9VUERBVEUvREVMRVRFL01FUkdFLiAgTklMIGlmIHJl c3VsdFJlbGF0aW9ucyBpcyBOSUwuCisJICoKKwkgKiBUaGVzZSBhcmUgdXNlZCBieSBBY3F1aXJl RXhlY3V0b3JMb2Nrc1VucHJ1bmVkKCkgdG8gZW5zdXJlIHRoYXQgdGhlCisJICogZmlyc3QgcmVz dWx0IHJlbCBmb3IgZWFjaCBNb2RpZnlUYWJsZSByZW1haW5zIGxvY2tlZCBldmVuIGlmIHBydW5l ZDsKKwkgKiBzZWUgRXhlY0luaXRNb2RpZnlUYWJsZSgpIGZvciB0aGUgZXhlY3V0b3Igc2lkZSBh c3N1bXB0aW9ucy4KKwkgKi8KKwlMaXN0CSAgICpmaXJzdFJlc3VsdFJlbHM7CisKIAkvKiBsaXN0 IG9mIEFwcGVuZFJlbEluZm8gbm9kZXMgKi8KIAlMaXN0CSAgICphcHBlbmRSZWxhdGlvbnM7CiAK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oIGIvc3JjL2luY2x1ZGUv dXRpbHMvcGxhbmNhY2hlLmgKaW5kZXggOTg0YzUxNTE1YzYuLmMyMmY4MzJkMGIxIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGls cy9wbGFuY2FjaGUuaApAQCAtMTk3LDYgKzE5NywzOCBAQCB0eXBlZGVmIHN0cnVjdCBDYWNoZWRF eHByZXNzaW9uCiB9IENhY2hlZEV4cHJlc3Npb247CiAKIAorLyoKKyAqIENhY2hlZFBsYW5QcmVw RGF0YQorICogICAgICBDYXJyaWVzIEV4ZWN1dG9yUHJlcCByZXN1bHRzIGZvciBlYWNoIFBsYW5u ZWRTdG10IGluIGEgQ2FjaGVkUGxhbiwKKyAqICAgICAgYWxvbmcgd2l0aCBjb250ZXh0IGFuZCBv d25lciBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gYWxsb2NhdGUgdGhlbS4KKyAqCisgKiBwcmVwX2Vz dGF0ZXMgaXMgaW5kZXhlZCBvbmUtdG8tb25lIHdpdGggQ2FjaGVkUGxhbi0+c3RtdF9saXN0LCBh bmQgaXMKKyAqIHBvcHVsYXRlZCB3aGVuIEdldENhY2hlZFBsYW4oKSBwcmVwYXJlcyBhIHJldXNl ZCBnZW5lcmljIHBsYW4uICBJZiB0aGUKKyAqIHBsYW4gaXMgZm91bmQgaW52YWxpZCBhZnRlciBs b2NraW5nLCB0aGUgc2FtZSBsaXN0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lCisgKiB3aGljaCByZWxh dGlvbnMgdG8gdW5sb2NrIGJlZm9yZSByZXRyeWluZy4KKyAqCisgKiBFeGVjdXRvclByZXAgc3Rh dGUgaXMgYWxsb2NhdGVkIGluICdjb250ZXh0JyBhbmQgb3duZWQgYnkgJ293bmVyJy4KKyAqCisg KiBlZmxhZ3MgY29udHJvbHMgRXhlY3V0b3JQcmVwKCkgYmVoYXZpb3IgZHVyaW5nIGluaXRpYWwg cHJ1bmluZy4KKyAqIE5vcm1hbGx5IHplcm87IHNldCBFWEVDX0ZMQUdfRVhQTEFJTl9HRU5FUklD IHRvIHN1cHByZXNzIHBydW5pbmcKKyAqIGluIEVYUExBSU4gKEdFTkVSSUNfUExBTikuICBOZWVk IG5vdCBtYXRjaCB0aGUgZWZsYWdzIGxhdGVyIHBhc3NlZAorICogdG8gRXhlY3V0b3JTdGFydCgp LgorICoKKyAqIHByZXBfZXN0YXRlcyBtdXN0IHJlYWNoIEV4ZWN1dG9yU3RhcnQoKSB0byBiZSBh ZG9wdGVkIGZvciBleGVjdXRpb24uCisgKiBJZiB0aGUgcGxhbiBpcyBpbnZhbGlkYXRlZCBiZWZv cmUgdGhhdCBoYXBwZW5zLCBDYWNoZWRQbGFuUHJlcENsZWFudXAoKQorICogZnJlZXMgdGhlbSBp bnN0ZWFkLiAgVGhlIEVTdGF0ZXMgYXJlIGFsbG9jYXRlZCBpbiAnY29udGV4dCcgYW5kIHRoZWly CisgKiByZXNvdXJjZXMgdHJhY2tlZCB1bmRlciAnb3duZXInLCB3aGljaCB0aGUgY2FsbGVyIHNl dHMgdG8gbWF0Y2ggdGhlCisgKiBleGVjdXRpb24gZW52aXJvbm1lbnQgKGUuZy4sIHBvcnRhbCBj b250ZXh0IGFuZCByZXNvd25lcikuCisgKi8KK3R5cGVkZWYgc3RydWN0IENhY2hlZFBsYW5QcmVw RGF0YQoreworCUxpc3QgICAqcHJlcF9lc3RhdGVzOwkvKiBvbmUgRVN0YXRlIHBlciBQbGFubmVk U3RtdCwgb3IgTlVMTCAqLworCVBhcmFtTGlzdEluZm8gcGFyYW1zOwkvKiBwYXJhbXMgdmlzaWJs ZSB0byBFeGVjdXRvclByZXAgKi8KKwlNZW1vcnlDb250ZXh0IGNvbnRleHQ7CS8qIHdoZXJlIHRv IGFsbG9jYXRlIEVTdGF0ZSBhbmQgaXRzIGZpZWxkcyAqLworCVJlc291cmNlT3duZXIgb3duZXI7 CS8qIFJlc291cmNlT3duZXIgZm9yIEV4ZWN1dG9yUHJlcCBzdGF0ZSAqLworCWludAkJZWZsYWdz OwkJCS8qIGV4ZWN1dG9yIGZsYWdzIHRvIGNvbnRyb2wgRXhlY3V0b3JQcmVwICovCit9IENhY2hl ZFBsYW5QcmVwRGF0YTsKKwogZXh0ZXJuIHZvaWQgSW5pdFBsYW5DYWNoZSh2b2lkKTsKIGV4dGVy biB2b2lkIFJlc2V0UGxhbkNhY2hlKHZvaWQpOwogCkBAIC0yNDAsNyArMjcyLDggQEAgZXh0ZXJu IExpc3QgKkNhY2hlZFBsYW5HZXRUYXJnZXRMaXN0KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2UsCiBleHRlcm4gQ2FjaGVkUGxhbiAqR2V0Q2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpw bGFuc291cmNlLAogCQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKIAkJCQkJCQkJ IFJlc291cmNlT3duZXIgb3duZXIsCi0JCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVu dik7CisJCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKKwkJCQkJCQkJIENhY2hl ZFBsYW5QcmVwRGF0YSAqY3ByZXApOwogZXh0ZXJuIHZvaWQgUmVsZWFzZUNhY2hlZFBsYW4oQ2Fj aGVkUGxhbiAqcGxhbiwgUmVzb3VyY2VPd25lciBvd25lcik7CiAKIGV4dGVybiBib29sIENhY2hl ZFBsYW5BbGxvd3NTaW1wbGVWYWxpZGl0eUNoZWNrKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2UsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVu ZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQKaW5k ZXggZGVhY2RkNzU4MDcuLjhlMGNjOThiYWNhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0CkBAIC00ODI0LDMgKzQ4MjQsMTQ4IEBAIHNlbGVjdCBt aW4oYSkgb3ZlciAocGFydGl0aW9uIGJ5IGEgb3JkZXIgYnkgYSkgZnJvbSBwYXJ0X2FiYyB3aGVy ZSBhID49IHN0YWJsZV9vCiAKIGRyb3AgdmlldyBwYXJ0X2FiY192aWV3OwogZHJvcCB0YWJsZSBw YXJ0X2FiYzsKKy0tCistLSBWZXJpZnkgdGhhdCBwcnVuaW5nLWF3YXJlIGxvY2tpbmcgc2tpcHMg cHJ1bmVkIHBhcnRpdGlvbnMKKy0tIHdoZW4gcmV1c2luZyBhIGdlbmVyaWMgY2FjaGVkIHBsYW4u CistLQorc2V0IHBsYW5fY2FjaGVfbW9kZSB0byBmb3JjZV9nZW5lcmljX3BsYW47CitjcmVhdGUg dGFibGUgcHJ1bmVsb2NrX3AgKGEgaW50KSBwYXJ0aXRpb24gYnkgbGlzdCAoYSk7CitjcmVhdGUg dGFibGUgcHJ1bmVsb2NrX3AxIHBhcnRpdGlvbiBvZiBwcnVuZWxvY2tfcCBmb3IgdmFsdWVzIGlu ICgxKTsKK2NyZWF0ZSB0YWJsZSBwcnVuZWxvY2tfcDIgcGFydGl0aW9uIG9mIHBydW5lbG9ja19w IGZvciB2YWx1ZXMgaW4gKDIpOworY3JlYXRlIHRhYmxlIHBydW5lbG9ja19wMyBwYXJ0aXRpb24g b2YgcHJ1bmVsb2NrX3AgZm9yIHZhbHVlcyBpbiAoMyk7CitwcmVwYXJlIHBydW5lbG9ja19xIChp bnQpIGFzIHNlbGVjdCAqIGZyb20gcHJ1bmVsb2NrX3Agd2hlcmUgYSA9ICQxOworLS0gRm9yY2Ug Z2VuZXJpYyBwbGFuIGNyZWF0aW9uCitleHBsYWluIChjb3N0cyBvZmYpIGV4ZWN1dGUgcHJ1bmVs b2NrX3EoMSk7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBwZW5k CisgICBTdWJwbGFucyBSZW1vdmVkOiAyCisgICAtPiAgU2VxIFNjYW4gb24gcHJ1bmVsb2NrX3Ax IHBydW5lbG9ja19wXzEKKyAgICAgICAgIEZpbHRlcjogKGEgPSAkMSkKKyg0IHJvd3MpCisKKy0t IEV4ZWN1dGUgYW5kIGNoZWNrIHdoaWNoIGNoaWxkIHBhcnRpdGlvbnMgYXJlIGxvY2tlZAorYmVn aW47CitleGVjdXRlIHBydW5lbG9ja19xKDEpOworIGEgCistLS0KKygwIHJvd3MpCisKK3NlbGVj dCBjLnJlbG5hbWUKKyAgZnJvbSBwZ19sb2NrcyBsCisgIGpvaW4gcGdfY2xhc3MgYyBvbiBjLm9p ZCA9IGwucmVsYXRpb24KKyB3aGVyZSBsLnBpZCA9IHBnX2JhY2tlbmRfcGlkKCkKKyAgIGFuZCBj LnJlbG5hbWUgbGlrZSAncHJ1bmVsb2NrX3BfJworIG9yZGVyIGJ5IGMucmVsbmFtZTsKKyAgIHJl bG5hbWUgICAgCistLS0tLS0tLS0tLS0tLQorIHBydW5lbG9ja19wMQorKDEgcm93KQorCitjb21t aXQ7CitkZWFsbG9jYXRlIHBydW5lbG9ja19xOworLS0gVHVybiBwcnVuaW5nIG9mZgorc2V0IGVu YWJsZV9wYXJ0aXRpb25fcHJ1bmluZyB0byBvZmY7CitwcmVwYXJlIHBydW5lbG9ja19xIChpbnQp IGFzIHNlbGVjdCAqIGZyb20gcHJ1bmVsb2NrX3Agd2hlcmUgYSA9ICQxOworLS0gRm9yY2UgZ2Vu ZXJpYyBwbGFuIGNyZWF0aW9uCitleHBsYWluIChjb3N0cyBvZmYpIGV4ZWN1dGUgcHJ1bmVsb2Nr X3EoMSk7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisg ICAtPiAgU2VxIFNjYW4gb24gcHJ1bmVsb2NrX3AxIHBydW5lbG9ja19wXzEKKyAgICAgICAgIEZp bHRlcjogKGEgPSAkMSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBwcnVuZWxvY2tfcDIgcHJ1bmVsb2Nr X3BfMgorICAgICAgICAgRmlsdGVyOiAoYSA9ICQxKQorICAgLT4gIFNlcSBTY2FuIG9uIHBydW5l bG9ja19wMyBwcnVuZWxvY2tfcF8zCisgICAgICAgICBGaWx0ZXI6IChhID0gJDEpCisoNyByb3dz KQorCistLSBFeGVjdXRlIGFuZCBjaGVjayB3aGljaCBjaGlsZCBwYXJ0aXRpb25zIGFyZSBsb2Nr ZWQKK2JlZ2luOworZXhlY3V0ZSBwcnVuZWxvY2tfcSgxKTsKKyBhIAorLS0tCisoMCByb3dzKQor CitzZWxlY3QgYy5yZWxuYW1lCisgIGZyb20gcGdfbG9ja3MgbAorICBqb2luIHBnX2NsYXNzIGMg b24gYy5vaWQgPSBsLnJlbGF0aW9uCisgd2hlcmUgbC5waWQgPSBwZ19iYWNrZW5kX3BpZCgpCisg ICBhbmQgYy5yZWxuYW1lIGxpa2UgJ3BydW5lbG9ja19wXycKKyBvcmRlciBieSBjLnJlbG5hbWU7 CisgICByZWxuYW1lICAgIAorLS0tLS0tLS0tLS0tLS0KKyBwcnVuZWxvY2tfcDEKKyBwcnVuZWxv Y2tfcDIKKyBwcnVuZWxvY2tfcDMKKygzIHJvd3MpCisKK2NvbW1pdDsKK2RlYWxsb2NhdGUgcHJ1 bmVsb2NrX3E7CityZXNldCBlbmFibGVfcGFydGl0aW9uX3BydW5pbmc7CistLQorLS0gVmVyaWZ5 IGZpcnN0UmVzdWx0UmVscyBoYW5kbGluZyB3aXRoIG11bHRpcGxlIE1vZGlmeVRhYmxlIG5vZGVz CistLSAod3JpdGFibGUgQ1RFcykgdGFyZ2V0aW5nIGEgcGFydGl0aW9uZWQgdGFibGUuICBXaGVu IGEgcHJ1bmluZworLS0gcGFyYW1ldGVyIG1hdGNoZXMgbm8gcGFydGl0aW9uLCBhbGwgcmVzdWx0 IHJlbGF0aW9ucyBhcmUgcHJ1bmVkCistLSBhbmQgdGhlIGV4ZWN1dG9yIG11c3Qgc3RpbGwgZmlu ZCBhIHVzYWJsZSBmaXJzdCByZXN1bHQgcmVsYXRpb24KKy0tIGZvciBlYWNoIE1vZGlmeVRhYmxl IG5vZGUuCistLQorcHJlcGFyZSBwcnVuZWxvY2tfbXRfcSAoaW50LCBpbnQpIGFzCisgIHdpdGgg dXBkMSBhcyAodXBkYXRlIHBydW5lbG9ja19wIHNldCBhID0gYSksCisgICAgICAgdXBkMiBhcyAo dXBkYXRlIHBydW5lbG9ja19wIHNldCBhID0gYSB3aGVyZSBhID0gJDIpCisgIHVwZGF0ZSBwcnVu ZWxvY2tfcCBzZXQgYSA9IGEgd2hlcmUgYSA9ICQxOworLS0gRm9yY2UgZ2VuZXJpYyBwbGFuIGNy ZWF0aW9uCitleHBsYWluIChjb3N0cyBvZmYpIGV4ZWN1dGUgcHJ1bmVsb2NrX210X3EoMSwgMik7 CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFVwZGF0ZSBvbiBwcnVuZWxvY2tfcAorICAgVXBkYXRlIG9uIHBydW5lbG9j a19wMSBwcnVuZWxvY2tfcF8xCisgICBDVEUgdXBkMQorICAgICAtPiAgVXBkYXRlIG9uIHBydW5l bG9ja19wIHBydW5lbG9ja19wXzMKKyAgICAgICAgICAgVXBkYXRlIG9uIHBydW5lbG9ja19wMSBw cnVuZWxvY2tfcF80CisgICAgICAgICAgIFVwZGF0ZSBvbiBwcnVuZWxvY2tfcDIgcHJ1bmVsb2Nr X3BfNQorICAgICAgICAgICBVcGRhdGUgb24gcHJ1bmVsb2NrX3AzIHBydW5lbG9ja19wXzYKKyAg ICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ1 bmVsb2NrX3AxIHBydW5lbG9ja19wXzQKKyAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHBydW5lbG9ja19wMiBwcnVuZWxvY2tfcF81CisgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwcnVuZWxvY2tfcDMgcHJ1bmVsb2NrX3BfNgorICAgQ1RFIHVwZDIKKyAgICAgLT4gIFVw ZGF0ZSBvbiBwcnVuZWxvY2tfcCBwcnVuZWxvY2tfcF83CisgICAgICAgICAgIFVwZGF0ZSBvbiBw cnVuZWxvY2tfcDIgcHJ1bmVsb2NrX3BfOAorICAgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAg ICAgICAgICAgIFN1YnBsYW5zIFJlbW92ZWQ6IDIKKyAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHBydW5lbG9ja19wMiBwcnVuZWxvY2tfcF84CisgICAgICAgICAgICAgICAgICAgICAg IEZpbHRlcjogKGEgPSAkMikKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIFN1YnBsYW5zIFJlbW92 ZWQ6IDIKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnVuZWxvY2tfcDEgcHJ1bmVsb2NrX3Bf MQorICAgICAgICAgICAgICAgRmlsdGVyOiAoYSA9ICQxKQorKDIyIHJvd3MpCisKKy0tIEFsbCBw YXJ0aXRpb25zIHBydW5lZDogdmFsdWUgNCBtYXRjaGVzIG5vIHBhcnRpdGlvbiwgc28gZWFjaAor LS0gTW9kaWZ5VGFibGUgbXVzdCBzdGlsbCBpbml0aWFsaXplIGNvcnJlY3RseSB3aXRoIG5vIG1h dGNoaW5nCistLSByZXN1bHQgcmVsYXRpb25zLgorZXhwbGFpbiAoY29zdHMgb2ZmKSBleGVjdXRl IHBydW5lbG9ja19tdF9xKDQsIDUpOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBVcGRhdGUgb24gcHJ1bmVsb2NrX3AK KyAgIENURSB1cGQxCisgICAgIC0+ICBVcGRhdGUgb24gcHJ1bmVsb2NrX3AgcHJ1bmVsb2NrX3Bf MgorICAgICAgICAgICBVcGRhdGUgb24gcHJ1bmVsb2NrX3AxIHBydW5lbG9ja19wXzMKKyAgICAg ICAgICAgVXBkYXRlIG9uIHBydW5lbG9ja19wMiBwcnVuZWxvY2tfcF80CisgICAgICAgICAgIFVw ZGF0ZSBvbiBwcnVuZWxvY2tfcDMgcHJ1bmVsb2NrX3BfNQorICAgICAgICAgICAtPiAgQXBwZW5k CisgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnVuZWxvY2tfcDEgcHJ1bmVsb2Nr X3BfMworICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ1bmVsb2NrX3AyIHBydW5l bG9ja19wXzQKKyAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydW5lbG9ja19wMyBw cnVuZWxvY2tfcF81CisgICBDVEUgdXBkMgorICAgICAtPiAgVXBkYXRlIG9uIHBydW5lbG9ja19w IHBydW5lbG9ja19wXzYKKyAgICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICBT dWJwbGFucyBSZW1vdmVkOiAzCisgICAtPiAgQXBwZW5kCisgICAgICAgICBTdWJwbGFucyBSZW1v dmVkOiAzCisoMTYgcm93cykKKworZGVhbGxvY2F0ZSBwcnVuZWxvY2tfbXRfcTsKK2Ryb3AgdGFi bGUgcHJ1bmVsb2NrX3A7CityZXNldCBwbGFuX2NhY2hlX21vZGU7CmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BsYW5jYWNoZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3BsYW5jYWNoZS5vdXQKaW5kZXggNGU1OTE4ODE5NmMuLjFkNjlhYjBhMWMyIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BsYW5jYWNoZS5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wbGFuY2FjaGUub3V0CkBAIC0zOTgsMyArMzk4LDY1IEBA IHNlbGVjdCBuYW1lLCBnZW5lcmljX3BsYW5zLCBjdXN0b21fcGxhbnMgZnJvbSBwZ19wcmVwYXJl ZF9zdGF0ZW1lbnRzCiAoMSByb3cpCiAKIGRyb3AgdGFibGUgdGVzdF9tb2RlOworLS0gVGVzdCBp bnZhbGlkYXRpb24gb2YgYSBnZW5lcmljIHBsYW4gZHVyaW5nIHBydW5pbmctYXdhcmUgbG9jayBz ZXR1cC4KKy0tIFRoZSBwcnVuaW5nIGV4cHJlc3Npb24gdXNlcyBhIHN0YWJsZSBTUUwgZnVuY3Rp b24gdGhhdCBjYWxscyBhIHZvbGF0aWxlCistLSBwbHBnc3FsIGZ1bmN0aW9uLiAgVGhhdCBmdW5j dGlvbiBwZXJmb3JtcyBEREwgb24gYSBwYXJ0aXRpb24gd2hlbiBhCistLSBzZXBhcmF0ZSAic2ln bmFsIiB0YWJsZSBzYXlzIHRvIGRvIHNvLiAgVGhlIHNlY29uZCBFWEVDVVRFIHNob3VsZAorLS0g cmVwbGFuIGNsZWFubHkgYWZ0ZXIgdGhlIERETC4KK3NldCBwbGFuX2NhY2hlX21vZGUgdG8gZm9y Y2VfZ2VuZXJpY19wbGFuOworY3JlYXRlIHRhYmxlIGludmFsX2R1cmluZ19wcnVuaW5nX3AgKGEg aW50KSBwYXJ0aXRpb24gYnkgbGlzdCAoYSk7CitjcmVhdGUgdGFibGUgaW52YWxfZHVyaW5nX3By dW5pbmdfcDEgcGFydGl0aW9uIG9mIGludmFsX2R1cmluZ19wcnVuaW5nX3AgZm9yIHZhbHVlcyBp biAoMSk7CitjcmVhdGUgdGFibGUgaW52YWxfZHVyaW5nX3BydW5pbmdfcDIgcGFydGl0aW9uIG9m IGludmFsX2R1cmluZ19wcnVuaW5nX3AgZm9yIHZhbHVlcyBpbiAoMik7CitpbnNlcnQgaW50byBp bnZhbF9kdXJpbmdfcHJ1bmluZ19wIHZhbHVlcyAoMSksICgyKTsKK2NyZWF0ZSB0YWJsZSBpbnZh bF9kdXJpbmdfcHJ1bmluZ19zaWduYWwgKGNyZWF0ZV9pZHggYm9vbCBub3QgbnVsbCk7CitpbnNl cnQgaW50byBpbnZhbF9kdXJpbmdfcHJ1bmluZ19zaWduYWwgdmFsdWVzIChmYWxzZSk7CitjcmVh dGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBpbnZhbGlkYXRlX3BsYW5jYWNoZV9mdW5jKCkgcmV0dXJu cyBpbnQKK2FzICQkCitkZWNsYXJlCisJY3JlYXRlX2luZGV4IGJvb2w7CitiZWdpbgorCS0tIFBl cmZvcm0gRERMIG9uIGEgcGFydGl0aW9uIGlmIGFza2VkIHRvCisJc2VsZWN0IGNyZWF0ZV9pZHgg aW50byBjcmVhdGVfaW5kZXggZnJvbSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19zaWduYWwgZm9yIHVw ZGF0ZTsKKwlpZiBjcmVhdGVfaW5kZXggPSB0cnVlIHRoZW4KKwkJcmFpc2Ugbm90aWNlICdjcmVh dGluZyBpbmRleCBvbiBwYXJ0aXRpb24gaW52YWxfZHVyaW5nX3BydW5pbmdfcDEnOworCQljcmVh dGUgaW5kZXggb24gaW52YWxfZHVyaW5nX3BydW5pbmdfcDEgKGEpOworCQl1cGRhdGUgaW52YWxf ZHVyaW5nX3BydW5pbmdfc2lnbmFsIHNldCBjcmVhdGVfaWR4ID0gZmFsc2U7CisJZW5kIGlmOwor CS0tIHBydW5pbmcgcGFyYW1ldGVyCisJcmV0dXJuIDE7CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBn c3FsIHZvbGF0aWxlOworY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gc3RhYmxlX3BydW5pbmdf dmFsKCkgcmV0dXJucyBpbnQgYXMgJCQKKwlzZWxlY3QgaW52YWxpZGF0ZV9wbGFuY2FjaGVfZnVu YygpOworJCQgbGFuZ3VhZ2Ugc3FsIHN0YWJsZTsKK3ByZXBhcmUgaW52YWxfZHVyaW5nX3BydW5p bmdfcSBhcyBzZWxlY3QgKiBmcm9tIGludmFsX2R1cmluZ19wcnVuaW5nX3Agd2hlcmUgYSA9IHN0 YWJsZV9wcnVuaW5nX3ZhbCgpOworLS0gQnVpbGQgYSBnZW5lcmljIHBsYW4gYW5kIHJ1biBwcnVu aW5nIG9uY2UsIGJ1dCBkb24ndCBzZXQgdGhlIHNpZ25hbAorLS0gZm9yIGludmFsaWRhdGVfcGxh bmNhY2hlX2Z1bmMoKSB0byBwZXJmb3JtIHRoZSBEREwuCitleHBsYWluICh2ZXJib3NlLCBjb3N0 cyBvZmYpIGV4ZWN1dGUgaW52YWxfZHVyaW5nX3BydW5pbmdfcTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICBTdWJwbGFucyBSZW1vdmVkOiAxCisg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmludmFsX2R1cmluZ19wcnVuaW5nX3AxIGludmFsX2R1 cmluZ19wcnVuaW5nX3BfMQorICAgICAgICAgT3V0cHV0OiBpbnZhbF9kdXJpbmdfcHJ1bmluZ19w XzEuYQorICAgICAgICAgRmlsdGVyOiAoaW52YWxfZHVyaW5nX3BydW5pbmdfcF8xLmEgPSBzdGFi bGVfcHJ1bmluZ192YWwoKSkKKyg1IHJvd3MpCisKKy0tIFJldXNlIHRoZSBnZW5lcmljIHBsYW4u ICBNYWtlIGludmFsaWRhdGVfcGxhbmNhY2hlX2Z1bmMoKSBwZXJmb3JtIERETAorLS0gZHVyaW5n IHRoaXMgZXhlY3V0aW9uLCB3aGljaCBzaG91bGQgZm9yY2UgcmVwbGFubmluZyB3aXRob3V0IGVy cm9ycy4KK3VwZGF0ZSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19zaWduYWwgc2V0IGNyZWF0ZV9pZHgg PSB0cnVlOworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKSBleGVjdXRlIGludmFsX2R1cmlu Z19wcnVuaW5nX3E7CitOT1RJQ0U6ICBjcmVhdGluZyBpbmRleCBvbiBwYXJ0aXRpb24gaW52YWxf ZHVyaW5nX3BydW5pbmdfcDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQXBwZW5kCisgICBTdWJwbGFucyBSZW1vdmVkOiAxCisgICAtPiAgU2VxIFNjYW4gb24gcHVi bGljLmludmFsX2R1cmluZ19wcnVuaW5nX3AxIGludmFsX2R1cmluZ19wcnVuaW5nX3BfMQorICAg ICAgICAgT3V0cHV0OiBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wXzEuYQorICAgICAgICAgRmlsdGVy OiAoaW52YWxfZHVyaW5nX3BydW5pbmdfcF8xLmEgPSBzdGFibGVfcHJ1bmluZ192YWwoKSkKKyg1 IHJvd3MpCisKK2Ryb3AgdGFibGUgaW52YWxfZHVyaW5nX3BydW5pbmdfcCwgaW52YWxfZHVyaW5n X3BydW5pbmdfc2lnbmFsOworZHJvcCBmdW5jdGlvbiBpbnZhbGlkYXRlX3BsYW5jYWNoZV9mdW5j LCBzdGFibGVfcHJ1bmluZ192YWw7CitkZWFsbG9jYXRlIGludmFsX2R1cmluZ19wcnVuaW5nX3E7 CityZXNldCBwbGFuX2NhY2hlX21vZGU7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9wYXJ0aXRpb25fcHJ1bmUuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX3By dW5lLnNxbAppbmRleCBkOTNjMGMwM2JhYi4uODA0ZGQzYzhmNGUgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9wcnVuZS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvcGFydGl0aW9uX3BydW5lLnNxbApAQCAtMTQ0NywzICsxNDQ3LDgwIEBAIHNlbGVjdCBt aW4oYSkgb3ZlciAocGFydGl0aW9uIGJ5IGEgb3JkZXIgYnkgYSkgZnJvbSBwYXJ0X2FiYyB3aGVy ZSBhID49IHN0YWJsZV9vCiAKIGRyb3AgdmlldyBwYXJ0X2FiY192aWV3OwogZHJvcCB0YWJsZSBw YXJ0X2FiYzsKKworLS0KKy0tIFZlcmlmeSB0aGF0IHBydW5pbmctYXdhcmUgbG9ja2luZyBza2lw cyBwcnVuZWQgcGFydGl0aW9ucworLS0gd2hlbiByZXVzaW5nIGEgZ2VuZXJpYyBjYWNoZWQgcGxh bi4KKy0tCitzZXQgcGxhbl9jYWNoZV9tb2RlIHRvIGZvcmNlX2dlbmVyaWNfcGxhbjsKKworY3Jl YXRlIHRhYmxlIHBydW5lbG9ja19wIChhIGludCkgcGFydGl0aW9uIGJ5IGxpc3QgKGEpOworY3Jl YXRlIHRhYmxlIHBydW5lbG9ja19wMSBwYXJ0aXRpb24gb2YgcHJ1bmVsb2NrX3AgZm9yIHZhbHVl cyBpbiAoMSk7CitjcmVhdGUgdGFibGUgcHJ1bmVsb2NrX3AyIHBhcnRpdGlvbiBvZiBwcnVuZWxv Y2tfcCBmb3IgdmFsdWVzIGluICgyKTsKK2NyZWF0ZSB0YWJsZSBwcnVuZWxvY2tfcDMgcGFydGl0 aW9uIG9mIHBydW5lbG9ja19wIGZvciB2YWx1ZXMgaW4gKDMpOworCitwcmVwYXJlIHBydW5lbG9j a19xIChpbnQpIGFzIHNlbGVjdCAqIGZyb20gcHJ1bmVsb2NrX3Agd2hlcmUgYSA9ICQxOworCist LSBGb3JjZSBnZW5lcmljIHBsYW4gY3JlYXRpb24KK2V4cGxhaW4gKGNvc3RzIG9mZikgZXhlY3V0 ZSBwcnVuZWxvY2tfcSgxKTsKKworLS0gRXhlY3V0ZSBhbmQgY2hlY2sgd2hpY2ggY2hpbGQgcGFy dGl0aW9ucyBhcmUgbG9ja2VkCitiZWdpbjsKK2V4ZWN1dGUgcHJ1bmVsb2NrX3EoMSk7CisKK3Nl bGVjdCBjLnJlbG5hbWUKKyAgZnJvbSBwZ19sb2NrcyBsCisgIGpvaW4gcGdfY2xhc3MgYyBvbiBj Lm9pZCA9IGwucmVsYXRpb24KKyB3aGVyZSBsLnBpZCA9IHBnX2JhY2tlbmRfcGlkKCkKKyAgIGFu ZCBjLnJlbG5hbWUgbGlrZSAncHJ1bmVsb2NrX3BfJworIG9yZGVyIGJ5IGMucmVsbmFtZTsKK2Nv bW1pdDsKKworZGVhbGxvY2F0ZSBwcnVuZWxvY2tfcTsKKworLS0gVHVybiBwcnVuaW5nIG9mZgor c2V0IGVuYWJsZV9wYXJ0aXRpb25fcHJ1bmluZyB0byBvZmY7CisKK3ByZXBhcmUgcHJ1bmVsb2Nr X3EgKGludCkgYXMgc2VsZWN0ICogZnJvbSBwcnVuZWxvY2tfcCB3aGVyZSBhID0gJDE7CisKKy0t IEZvcmNlIGdlbmVyaWMgcGxhbiBjcmVhdGlvbgorZXhwbGFpbiAoY29zdHMgb2ZmKSBleGVjdXRl IHBydW5lbG9ja19xKDEpOworCistLSBFeGVjdXRlIGFuZCBjaGVjayB3aGljaCBjaGlsZCBwYXJ0 aXRpb25zIGFyZSBsb2NrZWQKK2JlZ2luOworZXhlY3V0ZSBwcnVuZWxvY2tfcSgxKTsKKworc2Vs ZWN0IGMucmVsbmFtZQorICBmcm9tIHBnX2xvY2tzIGwKKyAgam9pbiBwZ19jbGFzcyBjIG9uIGMu b2lkID0gbC5yZWxhdGlvbgorIHdoZXJlIGwucGlkID0gcGdfYmFja2VuZF9waWQoKQorICAgYW5k IGMucmVsbmFtZSBsaWtlICdwcnVuZWxvY2tfcF8nCisgb3JkZXIgYnkgYy5yZWxuYW1lOworY29t bWl0OworCitkZWFsbG9jYXRlIHBydW5lbG9ja19xOworcmVzZXQgZW5hYmxlX3BhcnRpdGlvbl9w cnVuaW5nOworCistLQorLS0gVmVyaWZ5IGZpcnN0UmVzdWx0UmVscyBoYW5kbGluZyB3aXRoIG11 bHRpcGxlIE1vZGlmeVRhYmxlIG5vZGVzCistLSAod3JpdGFibGUgQ1RFcykgdGFyZ2V0aW5nIGEg cGFydGl0aW9uZWQgdGFibGUuICBXaGVuIGEgcHJ1bmluZworLS0gcGFyYW1ldGVyIG1hdGNoZXMg bm8gcGFydGl0aW9uLCBhbGwgcmVzdWx0IHJlbGF0aW9ucyBhcmUgcHJ1bmVkCistLSBhbmQgdGhl IGV4ZWN1dG9yIG11c3Qgc3RpbGwgZmluZCBhIHVzYWJsZSBmaXJzdCByZXN1bHQgcmVsYXRpb24K Ky0tIGZvciBlYWNoIE1vZGlmeVRhYmxlIG5vZGUuCistLQorcHJlcGFyZSBwcnVuZWxvY2tfbXRf cSAoaW50LCBpbnQpIGFzCisgIHdpdGggdXBkMSBhcyAodXBkYXRlIHBydW5lbG9ja19wIHNldCBh ID0gYSksCisgICAgICAgdXBkMiBhcyAodXBkYXRlIHBydW5lbG9ja19wIHNldCBhID0gYSB3aGVy ZSBhID0gJDIpCisgIHVwZGF0ZSBwcnVuZWxvY2tfcCBzZXQgYSA9IGEgd2hlcmUgYSA9ICQxOwor CistLSBGb3JjZSBnZW5lcmljIHBsYW4gY3JlYXRpb24KK2V4cGxhaW4gKGNvc3RzIG9mZikgZXhl Y3V0ZSBwcnVuZWxvY2tfbXRfcSgxLCAyKTsKKworLS0gQWxsIHBhcnRpdGlvbnMgcHJ1bmVkOiB2 YWx1ZSA0IG1hdGNoZXMgbm8gcGFydGl0aW9uLCBzbyBlYWNoCistLSBNb2RpZnlUYWJsZSBtdXN0 IHN0aWxsIGluaXRpYWxpemUgY29ycmVjdGx5IHdpdGggbm8gbWF0Y2hpbmcKKy0tIHJlc3VsdCBy ZWxhdGlvbnMuCitleHBsYWluIChjb3N0cyBvZmYpIGV4ZWN1dGUgcHJ1bmVsb2NrX210X3EoNCwg NSk7CisKK2RlYWxsb2NhdGUgcHJ1bmVsb2NrX210X3E7Citkcm9wIHRhYmxlIHBydW5lbG9ja19w OworcmVzZXQgcGxhbl9jYWNoZV9tb2RlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvcGxhbmNhY2hlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BsYW5jYWNoZS5zcWwKaW5k ZXggNGIyZjExZGNjNjQuLjEzOWI0Njg4ZmQ2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9wbGFuY2FjaGUuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BsYW5jYWNoZS5z cWwKQEAgLTIyMywzICsyMjMsNTQgQEAgc2VsZWN0IG5hbWUsIGdlbmVyaWNfcGxhbnMsIGN1c3Rv bV9wbGFucyBmcm9tIHBnX3ByZXBhcmVkX3N0YXRlbWVudHMKICAgd2hlcmUgIG5hbWUgPSAndGVz dF9tb2RlX3BwJzsKIAogZHJvcCB0YWJsZSB0ZXN0X21vZGU7CisKKy0tIFRlc3QgaW52YWxpZGF0 aW9uIG9mIGEgZ2VuZXJpYyBwbGFuIGR1cmluZyBwcnVuaW5nLWF3YXJlIGxvY2sgc2V0dXAuCist LSBUaGUgcHJ1bmluZyBleHByZXNzaW9uIHVzZXMgYSBzdGFibGUgU1FMIGZ1bmN0aW9uIHRoYXQg Y2FsbHMgYSB2b2xhdGlsZQorLS0gcGxwZ3NxbCBmdW5jdGlvbi4gIFRoYXQgZnVuY3Rpb24gcGVy Zm9ybXMgRERMIG9uIGEgcGFydGl0aW9uIHdoZW4gYQorLS0gc2VwYXJhdGUgInNpZ25hbCIgdGFi bGUgc2F5cyB0byBkbyBzby4gIFRoZSBzZWNvbmQgRVhFQ1VURSBzaG91bGQKKy0tIHJlcGxhbiBj bGVhbmx5IGFmdGVyIHRoZSBEREwuCitzZXQgcGxhbl9jYWNoZV9tb2RlIHRvIGZvcmNlX2dlbmVy aWNfcGxhbjsKK2NyZWF0ZSB0YWJsZSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wIChhIGludCkgcGFy dGl0aW9uIGJ5IGxpc3QgKGEpOworY3JlYXRlIHRhYmxlIGludmFsX2R1cmluZ19wcnVuaW5nX3Ax IHBhcnRpdGlvbiBvZiBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wIGZvciB2YWx1ZXMgaW4gKDEpOwor Y3JlYXRlIHRhYmxlIGludmFsX2R1cmluZ19wcnVuaW5nX3AyIHBhcnRpdGlvbiBvZiBpbnZhbF9k dXJpbmdfcHJ1bmluZ19wIGZvciB2YWx1ZXMgaW4gKDIpOworaW5zZXJ0IGludG8gaW52YWxfZHVy aW5nX3BydW5pbmdfcCB2YWx1ZXMgKDEpLCAoMik7CisKK2NyZWF0ZSB0YWJsZSBpbnZhbF9kdXJp bmdfcHJ1bmluZ19zaWduYWwgKGNyZWF0ZV9pZHggYm9vbCBub3QgbnVsbCk7CitpbnNlcnQgaW50 byBpbnZhbF9kdXJpbmdfcHJ1bmluZ19zaWduYWwgdmFsdWVzIChmYWxzZSk7CitjcmVhdGUgb3Ig cmVwbGFjZSBmdW5jdGlvbiBpbnZhbGlkYXRlX3BsYW5jYWNoZV9mdW5jKCkgcmV0dXJucyBpbnQK K2FzICQkCitkZWNsYXJlCisJY3JlYXRlX2luZGV4IGJvb2w7CitiZWdpbgorCS0tIFBlcmZvcm0g RERMIG9uIGEgcGFydGl0aW9uIGlmIGFza2VkIHRvCisJc2VsZWN0IGNyZWF0ZV9pZHggaW50byBj cmVhdGVfaW5kZXggZnJvbSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19zaWduYWwgZm9yIHVwZGF0ZTsK KwlpZiBjcmVhdGVfaW5kZXggPSB0cnVlIHRoZW4KKwkJcmFpc2Ugbm90aWNlICdjcmVhdGluZyBp bmRleCBvbiBwYXJ0aXRpb24gaW52YWxfZHVyaW5nX3BydW5pbmdfcDEnOworCQljcmVhdGUgaW5k ZXggb24gaW52YWxfZHVyaW5nX3BydW5pbmdfcDEgKGEpOworCQl1cGRhdGUgaW52YWxfZHVyaW5n X3BydW5pbmdfc2lnbmFsIHNldCBjcmVhdGVfaWR4ID0gZmFsc2U7CisJZW5kIGlmOworCS0tIHBy dW5pbmcgcGFyYW1ldGVyCisJcmV0dXJuIDE7CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBnc3FsIHZv bGF0aWxlOworCitjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBzdGFibGVfcHJ1bmluZ192YWwo KSByZXR1cm5zIGludCBhcyAkJAorCXNlbGVjdCBpbnZhbGlkYXRlX3BsYW5jYWNoZV9mdW5jKCk7 CiskJCBsYW5ndWFnZSBzcWwgc3RhYmxlOworCitwcmVwYXJlIGludmFsX2R1cmluZ19wcnVuaW5n X3EgYXMgc2VsZWN0ICogZnJvbSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wIHdoZXJlIGEgPSBzdGFi bGVfcHJ1bmluZ192YWwoKTsKKworLS0gQnVpbGQgYSBnZW5lcmljIHBsYW4gYW5kIHJ1biBwcnVu aW5nIG9uY2UsIGJ1dCBkb24ndCBzZXQgdGhlIHNpZ25hbAorLS0gZm9yIGludmFsaWRhdGVfcGxh bmNhY2hlX2Z1bmMoKSB0byBwZXJmb3JtIHRoZSBEREwuCitleHBsYWluICh2ZXJib3NlLCBjb3N0 cyBvZmYpIGV4ZWN1dGUgaW52YWxfZHVyaW5nX3BydW5pbmdfcTsKKworLS0gUmV1c2UgdGhlIGdl bmVyaWMgcGxhbi4gIE1ha2UgaW52YWxpZGF0ZV9wbGFuY2FjaGVfZnVuYygpIHBlcmZvcm0gRERM CistLSBkdXJpbmcgdGhpcyBleGVjdXRpb24sIHdoaWNoIHNob3VsZCBmb3JjZSByZXBsYW5uaW5n IHdpdGhvdXQgZXJyb3JzLgordXBkYXRlIGludmFsX2R1cmluZ19wcnVuaW5nX3NpZ25hbCBzZXQg Y3JlYXRlX2lkeCA9IHRydWU7CitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpIGV4ZWN1dGUg aW52YWxfZHVyaW5nX3BydW5pbmdfcTsKKworZHJvcCB0YWJsZSBpbnZhbF9kdXJpbmdfcHJ1bmlu Z19wLCBpbnZhbF9kdXJpbmdfcHJ1bmluZ19zaWduYWw7Citkcm9wIGZ1bmN0aW9uIGludmFsaWRh dGVfcGxhbmNhY2hlX2Z1bmMsIHN0YWJsZV9wcnVuaW5nX3ZhbDsKK2RlYWxsb2NhdGUgaW52YWxf ZHVyaW5nX3BydW5pbmdfcTsKKworcmVzZXQgcGxhbl9jYWNoZV9tb2RlOwotLSAKMi40Ny4zCgo= --000000000000559395064d63cb06 Content-Type: application/octet-stream; name="v8-0004-Make-SQL-function-executor-track-ExecutorPrep-sta.patch" Content-Disposition: attachment; filename="v8-0004-Make-SQL-function-executor-track-ExecutorPrep-sta.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxpzx0d1 RnJvbSAyYWI1ZmVmYjk2NDQxMThhMWYxNTI4YTUzYjlhNmFmOTBlMDYzZWRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMTAgRmViIDIwMjYgMjI6MDk6MjMgKzA5MDAKU3ViamVjdDogW1BBVENIIHY4 IDQvNV0gTWFrZSBTUUwgZnVuY3Rpb24gZXhlY3V0b3IgdHJhY2sgRXhlY3V0b3JQcmVwIHN0YXRl CgpFeHRlbmQgdGhlIFNRTCBmdW5jdGlvbiBleGVjdXRvciB0byB1c2UgdGhlIEV4ZWN1dG9yUHJl cCByZXN1bHRzCnJldHVybmVkIGJ5IEdldENhY2hlZFBsYW4oKS4gIGluaXRfZXhlY3V0aW9uX3N0 YXRlKCkgbm93IHBhc3NlcyBhCkNhY2hlZFBsYW5QcmVwRGF0YSB0byBHZXRDYWNoZWRQbGFuKCkg YW5kIHN0b3JlcyB0aGUgcGVyIHN0YXRlbWVudApFeGVjUHJlcCBwb2ludGVycyBpbiB0aGUgZXhl Y3V0aW9uX3N0YXRlIG5vZGVzLgoKQXQgZXhlY3V0aW9uIHRpbWUsIHBvc3RxdWVsX3N0YXJ0KCkg cmVwYXJlbnRzIHRoZSBwcmVwIGVzdGF0ZSdzCmVzX3F1ZXJ5X2N4dCB1bmRlciB0aGUgZnVuY3Rp b24ncyBzdWJjb250ZXh0IHNvIHRoYXQgcHJlcCBzdGF0ZQpmb2xsb3dzIHRoZSB1c3VhbCBwZXIg Y2FsbCBjb250ZXh0IGhpZXJhcmNoeS4KClRoaXMgYWxsb3dzIFNRTCBsYW5ndWFnZSBmdW5jdGlv bnMgdG8gcGFydGljaXBhdGUgaW4gdGhlIHNhbWUKRXhlY3V0b3JQcmVwIG1hY2hpbmVyeSBhcyBv dGhlciBwbGFuIGNhY2hlIHVzZXJzLgoKQWRkIGEgcmVncmVzc2lvbiB0ZXN0IHdoZXJlIHJ1bGUg cmV3cml0ZSBleHBhbmRzIGEgc2luZ2xlIFVQREFURQppbnRvIG11bHRpcGxlIFBsYW5uZWRTdG10 cywgZXhlcmNpc2luZyB0aGUgU1FMIGZ1bmN0aW9uIHBsYW4gY2FjaGUKYW5kIHRoZSBnZW5lcmlj IHBsYW4gcmV1c2UgcGF0aCB0aGF0IG5vdyBpbnZva2VzIEV4ZWN1dG9yUHJlcC4KLS0tCiBzcmMv YmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYyAgICAgICAgfCAyOSArKysrKysrKysrKysrLS0K IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGxhbmNhY2hlLm91dCB8IDQ4ICsrKysrKysrKysr KysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BsYW5jYWNoZS5zcWwgICAgICB8 IDM0ICsrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxMDkgaW5zZXJ0aW9ucygr KSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5j dGlvbnMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCmluZGV4IGMwY2E3MmIz OGRkLi5mMjQ2ZjA1MWMyNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rp b25zLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKQEAgLTczLDYgKzcz LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgZXhlY3V0aW9uX3N0YXRlCiAJYm9vbAkJc2V0c1Jlc3VsdDsJ CS8qIHRydWUgaWYgdGhpcyBxdWVyeSBwcm9kdWNlcyBmdW5jJ3MgcmVzdWx0ICovCiAJYm9vbAkJ bGF6eUV2YWw7CQkvKiB0cnVlIGlmIHNob3VsZCBmZXRjaCBvbmUgcm93IGF0IGEgdGltZSAqLwog CVBsYW5uZWRTdG10ICpzdG10OwkJCS8qIHBsYW4gZm9yIHRoaXMgcXVlcnkgKi8KKwlFU3RhdGUJ ICAgKnByZXBfZXN0YXRlOwkvKiBFU3RhdGUgY3JlYXRlZCBpbiBFeGVjdXRvclByZXAoKSBmb3Ig dGhpcyBwbGFuICovCiAJUXVlcnlEZXNjICAqcWQ7CQkJCS8qIG51bGwgdW5sZXNzIHN0YXR1cyA9 PSBSVU4gKi8KIH0gZXhlY3V0aW9uX3N0YXRlOwogCkBAIC02NTgsNiArNjU5LDggQEAgaW5pdF9l eGVjdXRpb25fc3RhdGUoU1FMRnVuY3Rpb25DYWNoZVB0ciBmY2FjaGUpCiAJZXhlY3V0aW9uX3N0 YXRlICpsYXN0dGFnZXMgPSBOVUxMOwogCWludAkJCW5zdG10czsKIAlMaXN0Q2VsbCAgICpsYzsK KwlDYWNoZWRQbGFuUHJlcERhdGEgY3ByZXAgPSB7MH07CisJTGlzdENlbGwgICAqcHJlcF9sYzsK IAogCS8qCiAJICogQ2xlYW4gdXAgYWZ0ZXIgcHJldmlvdXMgcXVlcnksIGlmIHRoZXJlIHdhcyBv bmUuCkBAIC02OTYsMTEgKzY5OSwyMCBAQCBpbml0X2V4ZWN1dGlvbl9zdGF0ZShTUUxGdW5jdGlv bkNhY2hlUHRyIGZjYWNoZSkKIAkgKiBDdXJyZW50UmVzb3VyY2VPd25lciB3aWxsIGJlIHRoZSBz YW1lIHdoZW4gU2h1dGRvd25TUUxGdW5jdGlvbiBydW5zLikKIAkgKi8KIAlmY2FjaGUtPmNvd25l ciA9IEN1cnJlbnRSZXNvdXJjZU93bmVyOworCisJLyoKKwkgKiBIYXZlIEV4ZWN1dG9yUHJlcCgp IGFsbG9jYXRlIHVuZGVyIGZjYWNoZS0+ZmNvbnRleHQuICBUaGUgcHJlcAorCSAqIEVTdGF0ZXMg aXQgY3JlYXRlcyB3aWxsIGluaXRpYWxseSBsaXZlIHRoZXJlOyBwb3N0cXVlbF9zdGFydCgpCisJ ICogd2lsbCBsYXRlciByZXBhcmVudCB0aGVpciBlc19xdWVyeV9jeHQgaW50byBmY2FjaGUtPnN1 YmNvbnRleHQKKwkgKiB3aGVuIHVzaW5nIHRoZW0gZm9yIGV4ZWN1dGlvbi4KKwkgKi8KKwljcHJl cC5jb250ZXh0ID0gZmNhY2hlLT5mY29udGV4dDsKKwljcHJlcC5vd25lciA9IGZjYWNoZS0+Y293 bmVyOwogCWZjYWNoZS0+Y3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5zb3VyY2UsCiAJCQkJCQkJ CSAgZmNhY2hlLT5wYXJhbUxJLAogCQkJCQkJCQkgIGZjYWNoZS0+Y293bmVyLAogCQkJCQkJCQkg IE5VTEwsCi0JCQkJCQkJCSAgTlVMTCk7CisJCQkJCQkJCSAgJmNwcmVwKTsKIAogCS8qCiAJICog SWYgbmVjZXNzYXJ5LCBtYWtlIGVzYXJyYXlbXSBiaWdnZXIgdG8gaG9sZCB0aGUgbmVlZGVkIHN0 YXRlLgpAQCAtNzIxLDkgKzczMywxMSBAQCBpbml0X2V4ZWN1dGlvbl9zdGF0ZShTUUxGdW5jdGlv bkNhY2hlUHRyIGZjYWNoZSkKIAkvKgogCSAqIEJ1aWxkIGV4ZWN1dGlvbl9zdGF0ZSBsaXN0IHRv IG1hdGNoIHRoZSBudW1iZXIgb2YgY29udGFpbmVkIHBsYW5zLgogCSAqLworCXByZXBfbGMgPSBs aXN0X2hlYWQoY3ByZXAucHJlcF9lc3RhdGVzKTsKIAlmb3JlYWNoKGxjLCBmY2FjaGUtPmNwbGFu LT5zdG10X2xpc3QpCiAJewogCQlQbGFubmVkU3RtdCAqc3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5u ZWRTdG10LCBsYyk7CisJCUVTdGF0ZSAqcHJlcF9lc3RhdGUgPSBuZXh0X3ByZXBfZXN0YXRlKGNw cmVwLnByZXBfZXN0YXRlcywgJnByZXBfbGMpOwogCQlleGVjdXRpb25fc3RhdGUgKm5ld2VzOwog CiAJCS8qCkBAIC03NjUsNiArNzc5LDcgQEAgaW5pdF9leGVjdXRpb25fc3RhdGUoU1FMRnVuY3Rp b25DYWNoZVB0ciBmY2FjaGUpCiAJCW5ld2VzLT5zZXRzUmVzdWx0ID0gZmFsc2U7CS8qIG1pZ2h0 IGNoYW5nZSBiZWxvdyAqLwogCQluZXdlcy0+bGF6eUV2YWwgPSBmYWxzZTsJLyogbWlnaHQgY2hh bmdlIGJlbG93ICovCiAJCW5ld2VzLT5zdG10ID0gc3RtdDsKKwkJbmV3ZXMtPnByZXBfZXN0YXRl ID0gcHJlcF9lc3RhdGU7CiAJCW5ld2VzLT5xZCA9IE5VTEw7CiAKIAkJaWYgKHN0bXQtPmNhblNl dFRhZykKQEAgLTEzNjMsNiArMTM3OCwxNSBAQCBwb3N0cXVlbF9zdGFydChleGVjdXRpb25fc3Rh dGUgKmVzLCBTUUxGdW5jdGlvbkNhY2hlUHRyIGZjYWNoZSkKIAllbHNlCiAJCWRlc3QgPSBOb25l X1JlY2VpdmVyOwogCisJLyoKKwkgKiBQcmVwIEVTdGF0ZXMgd2VyZSBidWlsdCB1bmRlciBmY2Fj aGUtPmZjb250ZXh0LiAgRm9yIGV4ZWN1dGlvbiwKKwkgKiBtYWtlIHRoZWlyIGVzX3F1ZXJ5X2N4 dCBhIGNoaWxkIG9mIGZjYWNoZS0+c3ViY29udGV4dCBzbyB0aGV5CisJICogZm9sbG93IHRoZSB1 c3VhbCBwZXIgY2FsbCBsaWZldGltZS4KKwkgKi8KKwlpZiAoZXMtPnByZXBfZXN0YXRlKQorCQlN ZW1vcnlDb250ZXh0U2V0UGFyZW50KGVzLT5wcmVwX2VzdGF0ZS0+ZXNfcXVlcnlfY3h0LAorCQkJ CQkJCSAgIGZjYWNoZS0+c3ViY29udGV4dCk7CisKIAllcy0+cWQgPSBDcmVhdGVRdWVyeURlc2Mo ZXMtPnN0bXQsCiAJCQkJCQkJIGZjYWNoZS0+ZnVuYy0+c3JjLAogCQkJCQkJCSBHZXRBY3RpdmVT bmFwc2hvdCgpLApAQCAtMTM3MSw3ICsxMzk1LDcgQEAgcG9zdHF1ZWxfc3RhcnQoZXhlY3V0aW9u X3N0YXRlICplcywgU1FMRnVuY3Rpb25DYWNoZVB0ciBmY2FjaGUpCiAJCQkJCQkJIGZjYWNoZS0+ cGFyYW1MSSwKIAkJCQkJCQkgZXMtPnFkID8gZXMtPnFkLT5xdWVyeUVudiA6IE5VTEwsCiAJCQkJ CQkJIDAsCi0JCQkJCQkJIE5VTEwpOworCQkJCQkJCSBlcy0+cHJlcF9lc3RhdGUpOwogCiAJLyog VXRpbGl0eSBjb21tYW5kcyBkb24ndCBuZWVkIEV4ZWN1dG9yLiAqLwogCWlmIChlcy0+cWQtPm9w ZXJhdGlvbiAhPSBDTURfVVRJTElUWSkKQEAgLTE0NjIsNiArMTQ4Niw3IEBAIHBvc3RxdWVsX2Vu ZChleGVjdXRpb25fc3RhdGUgKmVzLCBTUUxGdW5jdGlvbkNhY2hlUHRyIGZjYWNoZSkKIAogCUZy ZWVRdWVyeURlc2MoZXMtPnFkKTsKIAllcy0+cWQgPSBOVUxMOworCWVzLT5wcmVwX2VzdGF0ZSA9 IE5VTEw7CiAKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGxhbmNhY2hlLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcGxhbmNhY2hlLm91dAppbmRleCAxZDY5YWIwYTFjMi4uMzcxNjczYTZl OTYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGxhbmNhY2hlLm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BsYW5jYWNoZS5vdXQKQEAgLTQ1OSw0ICs0 NTksNTIgQEAgTk9USUNFOiAgY3JlYXRpbmcgaW5kZXggb24gcGFydGl0aW9uIGludmFsX2R1cmlu Z19wcnVuaW5nX3AxCiBkcm9wIHRhYmxlIGludmFsX2R1cmluZ19wcnVuaW5nX3AsIGludmFsX2R1 cmluZ19wcnVuaW5nX3NpZ25hbDsKIGRyb3AgZnVuY3Rpb24gaW52YWxpZGF0ZV9wbGFuY2FjaGVf ZnVuYywgc3RhYmxlX3BydW5pbmdfdmFsOwogZGVhbGxvY2F0ZSBpbnZhbF9kdXJpbmdfcHJ1bmlu Z19xOworLS0gZXhlcmNpc2Ugc3FsLWZ1bmN0aW9uIHBsYW4gY2FjaGUgd2hlbiByZXdyaXRlIGV4 cGFuZHMgYSBzaW5nbGUgc3RhdGVtZW50CistLSBpbnRvIG11bHRpcGxlIHBsYW5uZWQgc3RhdGVt ZW50cy4gdGhpcyBmb3JjZXMgY2FjaGVkcGxhbi0+c3RtdF9saXN0IHRvCistLSBjb250YWluIG1v cmUgdGhhbiBvbmUgZW50cnkgYW5kIGNoZWNrcyB0aGF0IGV4ZWN1dG9yIHN0YXRlIGZvciB0aGUg Zmlyc3QKKy0tIHJld3JpdHRlbiBzdGF0ZW1lbnQgZG9lcyBub3QgZGVzdHJveSBzdGF0ZSBuZWVk ZWQgYnkgdGhlIHNlY29uZCBvbmUuCitzZXQgcGxhbl9jYWNoZV9tb2RlID0gZm9yY2VfZ2VuZXJp Y19wbGFuOworY3JlYXRlIHRhYmxlIHNxbGZfYmFzZShpZCBpbnQsIHZhbCBpbnQpIHBhcnRpdGlv biBieSBsaXN0IChpZCk7CitjcmVhdGUgdGFibGUgc3FsZl9iYXNlXzEgcGFydGl0aW9uIG9mIHNx bGZfYmFzZSBmb3IgdmFsdWVzIGluICgxKTsKK2NyZWF0ZSB0YWJsZSBzcWxmX2Jhc2VfMiBwYXJ0 aXRpb24gb2Ygc3FsZl9iYXNlIGZvciB2YWx1ZXMgaW4gKDIpOworY3JlYXRlIHRhYmxlIHNxbGZf bG9nKGlkIGludCwgbm90ZSB0ZXh0KTsKK2luc2VydCBpbnRvIHNxbGZfYmFzZSB2YWx1ZXMgKDEs IDEwKTsKK2NyZWF0ZSBydWxlIHNxbGZfYmFzZV91cGRfbG9nIGFzCitvbiB1cGRhdGUgdG8gc3Fs Zl9iYXNlIGRvIGFsc28KKwlpbnNlcnQgaW50byBzcWxmX2xvZyhpZCwgbm90ZSkKKwl2YWx1ZXMg KG5ldy5pZCwgJ2xvZ2dlZCBieSBydWxlJyk7CitjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBz cWxmX2V4ZWNwcmVwX3Rlc3QoYSBpbnQsIHYgaW50KQorcmV0dXJucyB2b2lkCitsYW5ndWFnZSBz cWwKK2FzICQkCisJdXBkYXRlIHNxbGZfYmFzZSBzZXQgdmFsID0gdiB3aGVyZSBpZCA9IGE7Cisk JDsKK3NlbGVjdCBzcWxmX2V4ZWNwcmVwX3Rlc3QoMSwgMjApOworIHNxbGZfZXhlY3ByZXBfdGVz dCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK3NlbGVjdCBzcWxmX2V4ZWNw cmVwX3Rlc3QoMSwgMzApOworIHNxbGZfZXhlY3ByZXBfdGVzdCAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tCisgCisoMSByb3cpCisKK3NlbGVjdCAqIGZyb20gc3FsZl9iYXNlIG9yZGVyIGJ5IDE7Cisg aWQgfCB2YWwgCistLS0tKy0tLS0tCisgIDEgfCAgMzAKKygxIHJvdykKKworc2VsZWN0ICogZnJv bSBzcWxmX2xvZyBvcmRlciBieSAxOworIGlkIHwgICAgICBub3RlICAgICAgCistLS0tKy0tLS0t LS0tLS0tLS0tLS0KKyAgMSB8IGxvZ2dlZCBieSBydWxlCisgIDEgfCBsb2dnZWQgYnkgcnVsZQor KDIgcm93cykKKworZHJvcCBydWxlIHNxbGZfYmFzZV91cGRfbG9nIG9uIHNxbGZfYmFzZTsKK2Ry b3AgdGFibGUgc3FsZl9iYXNlLCBzcWxmX2xvZzsKK2Ryb3AgZnVuY3Rpb24gc3FsZl9leGVjcHJl cF90ZXN0OwogcmVzZXQgcGxhbl9jYWNoZV9tb2RlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvcGxhbmNhY2hlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BsYW5jYWNoZS5z cWwKaW5kZXggMTM5YjQ2ODhmZDYuLmI4OWM5YWQ2OWE0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9wbGFuY2FjaGUuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BsYW5j YWNoZS5zcWwKQEAgLTI3Myw0ICsyNzMsMzggQEAgZHJvcCB0YWJsZSBpbnZhbF9kdXJpbmdfcHJ1 bmluZ19wLCBpbnZhbF9kdXJpbmdfcHJ1bmluZ19zaWduYWw7CiBkcm9wIGZ1bmN0aW9uIGludmFs aWRhdGVfcGxhbmNhY2hlX2Z1bmMsIHN0YWJsZV9wcnVuaW5nX3ZhbDsKIGRlYWxsb2NhdGUgaW52 YWxfZHVyaW5nX3BydW5pbmdfcTsKIAorLS0gZXhlcmNpc2Ugc3FsLWZ1bmN0aW9uIHBsYW4gY2Fj aGUgd2hlbiByZXdyaXRlIGV4cGFuZHMgYSBzaW5nbGUgc3RhdGVtZW50CistLSBpbnRvIG11bHRp cGxlIHBsYW5uZWQgc3RhdGVtZW50cy4gdGhpcyBmb3JjZXMgY2FjaGVkcGxhbi0+c3RtdF9saXN0 IHRvCistLSBjb250YWluIG1vcmUgdGhhbiBvbmUgZW50cnkgYW5kIGNoZWNrcyB0aGF0IGV4ZWN1 dG9yIHN0YXRlIGZvciB0aGUgZmlyc3QKKy0tIHJld3JpdHRlbiBzdGF0ZW1lbnQgZG9lcyBub3Qg ZGVzdHJveSBzdGF0ZSBuZWVkZWQgYnkgdGhlIHNlY29uZCBvbmUuCisKK3NldCBwbGFuX2NhY2hl X21vZGUgPSBmb3JjZV9nZW5lcmljX3BsYW47CisKK2NyZWF0ZSB0YWJsZSBzcWxmX2Jhc2UoaWQg aW50LCB2YWwgaW50KSBwYXJ0aXRpb24gYnkgbGlzdCAoaWQpOworY3JlYXRlIHRhYmxlIHNxbGZf YmFzZV8xIHBhcnRpdGlvbiBvZiBzcWxmX2Jhc2UgZm9yIHZhbHVlcyBpbiAoMSk7CitjcmVhdGUg dGFibGUgc3FsZl9iYXNlXzIgcGFydGl0aW9uIG9mIHNxbGZfYmFzZSBmb3IgdmFsdWVzIGluICgy KTsKK2NyZWF0ZSB0YWJsZSBzcWxmX2xvZyhpZCBpbnQsIG5vdGUgdGV4dCk7CisKK2luc2VydCBp bnRvIHNxbGZfYmFzZSB2YWx1ZXMgKDEsIDEwKTsKKworY3JlYXRlIHJ1bGUgc3FsZl9iYXNlX3Vw ZF9sb2cgYXMKK29uIHVwZGF0ZSB0byBzcWxmX2Jhc2UgZG8gYWxzbworCWluc2VydCBpbnRvIHNx bGZfbG9nKGlkLCBub3RlKQorCXZhbHVlcyAobmV3LmlkLCAnbG9nZ2VkIGJ5IHJ1bGUnKTsKKwor Y3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gc3FsZl9leGVjcHJlcF90ZXN0KGEgaW50LCB2IGlu dCkKK3JldHVybnMgdm9pZAorbGFuZ3VhZ2Ugc3FsCithcyAkJAorCXVwZGF0ZSBzcWxmX2Jhc2Ug c2V0IHZhbCA9IHYgd2hlcmUgaWQgPSBhOworJCQ7CisKK3NlbGVjdCBzcWxmX2V4ZWNwcmVwX3Rl c3QoMSwgMjApOworc2VsZWN0IHNxbGZfZXhlY3ByZXBfdGVzdCgxLCAzMCk7CitzZWxlY3QgKiBm cm9tIHNxbGZfYmFzZSBvcmRlciBieSAxOworc2VsZWN0ICogZnJvbSBzcWxmX2xvZyBvcmRlciBi eSAxOworCitkcm9wIHJ1bGUgc3FsZl9iYXNlX3VwZF9sb2cgb24gc3FsZl9iYXNlOworZHJvcCB0 YWJsZSBzcWxmX2Jhc2UsIHNxbGZfbG9nOworZHJvcCBmdW5jdGlvbiBzcWxmX2V4ZWNwcmVwX3Rl c3Q7CiByZXNldCBwbGFuX2NhY2hlX21vZGU7Ci0tIAoyLjQ3LjMKCg== --000000000000559395064d63cb06 Content-Type: application/octet-stream; name="v8-0002-Introduce-ExecutorPrep-and-refactor-executor-star.patch" Content-Disposition: attachment; filename="v8-0002-Introduce-ExecutorPrep-and-refactor-executor-star.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxpzx0q3 RnJvbSBhMmEwYmVmYzQ0ZDI1ZGY4YjU0OTY0NGE3ZTE3OTkyMzI3MGEwZmM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMTEgTm92IDIwMjUgMjE6NDc6NDYgKzA5MDAKU3ViamVjdDogW1BBVENIIHY4 IDIvNV0gSW50cm9kdWNlIEV4ZWN1dG9yUHJlcCBhbmQgcmVmYWN0b3IgZXhlY3V0b3Igc3RhcnR1 cAoKRmFjdG9yIHBlcm1pc3Npb24gY2hlY2tzLCByYW5nZSB0YWJsZSBpbml0aWFsaXphdGlvbiwg YW5kIGluaXRpYWwKcGFydGl0aW9uIHBydW5pbmcgb3V0IG9mIEluaXRQbGFuKCkgaW50byBhIG5l dyBFeGVjdXRvclByZXAoKQpoZWxwZXIuIEV4ZWN1dG9yUHJlcCgpIGJ1aWxkcyBhbiBFU3RhdGUg Y29udGFpbmluZyB0aGUgZXhlY3V0b3IKbWV0YWRhdGEgbmVlZGVkIGJlZm9yZSBwbGFuIGV4ZWN1 dGlvbiwgaW5jbHVkaW5nIHBhcnRpdGlvbgpwcnVuaW5nIHN0YXRlIHdoZXJlIHBhcnRQcnVuZUlu Zm9zIGFyZSBwcmVzZW50LCBhbmQgcmV0dXJucyBpdApkaXJlY3RseSB0byB0aGUgY2FsbGVyLgoK RXhlY3V0b3JTdGFydCgpIG5vdyBjaGVja3MgaWYgUXVlcnlEZXNjLT5lc3RhdGUgaXMgYWxyZWFk eSBzZXQKKGluZGljYXRpbmcgRXhlY3V0b3JQcmVwKCkgd2FzIGNhbGxlZCBlYXJsaWVyKS4gSWYg c28sIGl0IHJldXNlcwp0aGUgRVN0YXRlIHRvIGF2b2lkIHJlZG9pbmcgcmFuZ2UgdGFibGUgc2V0 dXAgYW5kIHBydW5pbmcuCk90aGVyd2lzZSwgaXQgaW52b2tlcyBFeGVjdXRvclByZXAoKSBpdHNl bGYgYW5kIGFkb3B0cyB0aGUKcmVzdWx0aW5nIEVTdGF0ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRo ZSBxdWVyeS4gVGhpcyBrZWVwcyB0aGUKZXhlY3V0b3Igc3RhcnR1cCBiZWhhdmlvciB1bmNoYW5n ZWQgd2hpbGUgbWFraW5nIHRoZSBzZXR1cCB3b3JrCmNhbGxhYmxlIHNlcGFyYXRlbHkgd2hlbiBu ZWVkZWQuCgpDcmVhdGVRdWVyeURlc2MoKSBncm93cyBhIHByZXBfZXN0YXRlIGFyZ3VtZW50IHRv IGFjY2VwdCBhbgpvcHRpb25hbGx5IHByZS1jcmVhdGVkIEVTdGF0ZSBhbmQgc3RvcmVzIGl0IGlu IHRoZSBRdWVyeURlc2MuClBvcnRhbHMsIFNQSSwgU1FMIGZ1bmN0aW9ucywgYW5kIEVYUExBSU4g YXJlIHdpcmVkIHRvIGNhcnJ5Cm9wdGlvbmFsIEVTdGF0ZSBwb2ludGVycyBhbG9uZ3NpZGUgdGhl IFBsYW5uZWRTdG10IGxpc3QsIGJ1dCBtb3N0CmNhbGxlcnMgc3RpbGwgcGFzcyBOVUxMIGFuZCBs ZXQgRXhlY3V0b3JTdGFydCgpIHBlcmZvcm0gdGhlIHNldHVwCmxhemlseS4KCkV4ZWN1dG9yUHJl cCgpIHJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gaGF2ZSBlc3RhYmxpc2hlZCBhbiBhY3RpdmUKc25h cHNob3QsIGFzIHBhcnRpdGlvbiBwcnVuaW5nIGV4cHJlc3Npb25zIG1heSBjYWxsIFBMIGZ1bmN0 aW9ucwp0aGF0IGludGVybmFsbHkgcmVxdWlyZSBvbmUgKGUuZy4sIHZpYSBFbnN1cmVQb3J0YWxT bmFwc2hvdEV4aXN0cygpKS4KClVwZGF0ZSBleGVjdXRvci9SRUFETUUgYW5kIHJlbGF0ZWQgY29t bWVudHMgdG8gZG9jdW1lbnQgdGhlIG5ldwpjb250cm9sIGZsb3cgYW5kIHRoZSBzZXBhcmF0aW9u IGJldHdlZW4gcHJlcGFyYXRpb24gYW5kIGV4ZWN1dGlvbi4KCk5vdGUgdGhhdCBhcyBvZiB0aGlz IGNvbW1pdCwgRXhlY3V0b3JTdGFydCgpIGlzIHRoZSBvbmx5IGNhbGxlciBvZgpFeGVjdXRvclBy ZXAoKSwgc28gdGhlcmUgaXMgbm8gc2VtYW50aWMgY2hhbmdlIGluIGJlaGF2aW9yLiBMYXRlcgpj b21taXRzIHdpbGwgYWRkIHNwZWNpYWxpemVkIGNhbGxlcnMgdGhhdCBpbnZva2UgRXhlY3V0b3JQ cmVwKCkKZWFybGllciB0byBlbmFibGUgcHJ1bmluZy1hd2FyZSBsb2NraW5nIGluIGNhY2hlZCBw bGFucy4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYyAgICAgICB8ICAgMiArLQog c3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5k L2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9l eHRlbnNpb24uYyAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jICAg ICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYyAgIHwgICAxICsK IHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYyAgICAgIHwgICA5ICstCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9SRUFETUUgICAgICAgICB8ICAxMSArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY01haW4uYyAgICAgfCAxNjQgKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL2Z1bmN0aW9ucy5jICAgIHwgICAzICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYyAg ICAgICAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgfCAg IDIgKwogc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYyAgICAgICAgICAgfCAgMjQgKysrLQogc3Jj L2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYyAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY29t bWFuZHMvZXhwbGFpbi5oICAgICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNk ZXNjLmggICAgIHwgICA1ICstCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oICAgICB8 ICAyNiArKysrKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgfCAgIDEgLQog c3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmggICAgICAgICAgfCAgIDIgKwogMjAgZmlsZXMgY2hh bmdlZCwgMjI5IGluc2VydGlvbnMoKyksIDUyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRv LmMKaW5kZXggNDk5Y2U5YWQzZGIuLmUwOTMwMzQ5MWQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9jb3B5dG8uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYwpA QCAtODc3LDcgKzg3Nyw3IEBAIEJlZ2luQ29weVRvKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJY3N0 YXRlLT5xdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgcHN0YXRlLT5wX3NvdXJjZXRl eHQsCiAJCQkJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksCiAJCQkJCQkJCQkJCUludmFsaWRT bmFwc2hvdCwKLQkJCQkJCQkJCQkJZGVzdCwgTlVMTCwgTlVMTCwgMCk7CisJCQkJCQkJCQkJCWRl c3QsIE5VTEwsIE5VTEwsIDAsIE5VTEwpOwogCiAJCS8qCiAJCSAqIENhbGwgRXhlY3V0b3JTdGFy dCB0byBwcmVwYXJlIHRoZSBwbGFuIGZvciBleGVjdXRpb24uCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMu YwppbmRleCAyNzBlOWJmMzExMC4uYjRhOTgwODk1NWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMu YwpAQCAtMzM2LDcgKzMzNiw3IEBAIEV4ZWNDcmVhdGVUYWJsZUFzKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgQ3JlYXRlVGFibGVBc1N0bXQgKnN0bXQsCiAJCS8qIENyZWF0ZSBhIFF1ZXJ5RGVzYywgcmVk aXJlY3Rpbmcgb3V0cHV0IHRvIG91ciB0dXBsZSByZWNlaXZlciAqLwogCQlxdWVyeURlc2MgPSBD cmVhdGVRdWVyeURlc2MocGxhbiwgcHN0YXRlLT5wX3NvdXJjZXRleHQsCiAJCQkJCQkJCQlHZXRB Y3RpdmVTbmFwc2hvdCgpLCBJbnZhbGlkU25hcHNob3QsCi0JCQkJCQkJCQlkZXN0LCBwYXJhbXMs IHF1ZXJ5RW52LCAwKTsKKwkJCQkJCQkJCWRlc3QsIHBhcmFtcywgcXVlcnlFbnYsIDAsIE5VTEwp OwogCiAJCS8qIGNhbGwgRXhlY3V0b3JTdGFydCB0byBwcmVwYXJlIHRoZSBwbGFuIGZvciBleGVj dXRpb24gKi8KIAkJRXhlY3V0b3JTdGFydChxdWVyeURlc2MsIEdldEludG9SZWxFRmxhZ3MoaW50 bykpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IDI5NmVhOGExZWQyLi4wMjAyN2M0MjllMSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMzcyLDcgKzM3Miw3IEBAIHN0YW5kYXJkX0V4cGxh aW5PbmVRdWVyeShRdWVyeSAqcXVlcnksIGludCBjdXJzb3JPcHRpb25zLAogCX0KIAogCS8qIHJ1 biBpdCAoaWYgbmVlZGVkKSBhbmQgcHJvZHVjZSBvdXRwdXQgKi8KLQlFeHBsYWluT25lUGxhbihw bGFuLCBpbnRvLCBlcywgcXVlcnlTdHJpbmcsIHBhcmFtcywgcXVlcnlFbnYsCisJRXhwbGFpbk9u ZVBsYW4ocGxhbiwgTlVMTCwgaW50bywgZXMsIHF1ZXJ5U3RyaW5nLCBwYXJhbXMsIHF1ZXJ5RW52 LAogCQkJCSAgICZwbGFuZHVyYXRpb24sIChlcy0+YnVmZmVycyA/ICZidWZ1c2FnZSA6IE5VTEwp LAogCQkJCSAgIGVzLT5tZW1vcnkgPyAmbWVtX2NvdW50ZXJzIDogTlVMTCk7CiB9CkBAIC00OTQs NyArNDk0LDggQEAgRXhwbGFpbk9uZVV0aWxpdHkoTm9kZSAqdXRpbGl0eVN0bXQsIEludG9DbGF1 c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAgKiB0byBjYWxsIGl0LgogICovCiB2b2lkCi1F eHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8s IEV4cGxhaW5TdGF0ZSAqZXMsCitFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0 bXQsIEVTdGF0ZSAqcHJlcF9lc3RhdGUsCisJCQkgICBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWlu U3RhdGUgKmVzLAogCQkJICAgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsIFBhcmFtTGlzdEluZm8g cGFyYW1zLAogCQkJICAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsIGNvbnN0IGluc3RyX3Rp bWUgKnBsYW5kdXJhdGlvbiwKIAkJCSAgIGNvbnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSwKQEAg LTU1Miw3ICs1NTMsOCBAQCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQs IEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJLyogQ3JlYXRlIGEgUXVlcnlE ZXNjIGZvciB0aGUgcXVlcnkgKi8KIAlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbm5l ZHN0bXQsIHF1ZXJ5U3RyaW5nLAogCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLCBJbnZhbGlk U25hcHNob3QsCi0JCQkJCQkJCWRlc3QsIHBhcmFtcywgcXVlcnlFbnYsIGluc3RydW1lbnRfb3B0 aW9uKTsKKwkJCQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVudiwgaW5zdHJ1bWVudF9vcHRpb24s CisJCQkJCQkJCXByZXBfZXN0YXRlKTsKIAogCS8qIFNlbGVjdCBleGVjdXRpb24gb3B0aW9ucyAq LwogCWlmIChlcy0+YW5hbHl6ZSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4 dGVuc2lvbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKaW5kZXggYjk4ODAx ZDA4ZjIuLjkzOWU3YTYzMmYwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHRl bnNpb24uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYwpAQCAtMTE3NCw3 ICsxMTc0LDcgQEAgZXhlY3V0ZV9zcWxfc3RyaW5nKGNvbnN0IGNoYXIgKnNxbCwgY29uc3QgY2hh ciAqZmlsZW5hbWUpCiAJCQkJcWRlc2MgPSBDcmVhdGVRdWVyeURlc2Moc3RtdCwKIAkJCQkJCQkJ CQlzcWwsCiAJCQkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgTlVMTCwKLQkJCQkJCQkJCQlk ZXN0LCBOVUxMLCBOVUxMLCAwKTsKKwkJCQkJCQkJCQlkZXN0LCBOVUxMLCBOVUxMLCAwLCBOVUxM KTsKIAogCQkJCUV4ZWN1dG9yU3RhcnQocWRlc2MsIDApOwogCQkJCUV4ZWN1dG9yUnVuKHFkZXNj LCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgMCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9tYXR2aWV3LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKaW5kZXggODFh NTVhMzNlZjIuLjJjZGZkY2Y5ODRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9t YXR2aWV3LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCkBAIC00MzksNyAr NDM5LDcgQEAgcmVmcmVzaF9tYXR2aWV3X2RhdGFmaWxsKERlc3RSZWNlaXZlciAqZGVzdCwgUXVl cnkgKnF1ZXJ5LAogCS8qIENyZWF0ZSBhIFF1ZXJ5RGVzYywgcmVkaXJlY3Rpbmcgb3V0cHV0IHRv IG91ciB0dXBsZSByZWNlaXZlciAqLwogCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFu LCBxdWVyeVN0cmluZywKIAkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBz aG90LAotCQkJCQkJCQlkZXN0LCBOVUxMLCBOVUxMLCAwKTsKKwkJCQkJCQkJZGVzdCwgTlVMTCwg TlVMTCwgMCwgTlVMTCk7CiAKIAkvKiBjYWxsIEV4ZWN1dG9yU3RhcnQgdG8gcHJlcGFyZSB0aGUg cGxhbiBmb3IgZXhlY3V0aW9uICovCiAJRXhlY3V0b3JTdGFydChxdWVyeURlc2MsIDApOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5jIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvcG9ydGFsY21kcy5jCmluZGV4IDAxZWZhYzMzMTllLi4xZTg4MGE2ZDdjOSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYwpAQCAtMTE4LDYgKzExOCw3IEBAIFBlcmZvcm1DdXJz b3JPcGVuKFBhcnNlU3RhdGUgKnBzdGF0ZSwgRGVjbGFyZUN1cnNvclN0bXQgKmNzdG10LCBQYXJh bUxpc3RJbmZvIHBhCiAJCQkJCSAgcXVlcnlTdHJpbmcsCiAJCQkJCSAgQ01EVEFHX1NFTEVDVCwJ LyogY3Vyc29yJ3MgcXVlcnkgaXMgYWx3YXlzIGEgU0VMRUNUICovCiAJCQkJCSAgbGlzdF9tYWtl MShwbGFuKSwKKwkJCQkJICBOSUwsCiAJCQkJCSAgTlVMTCk7CiAKIAkvKi0tLS0tLS0tLS0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3ByZXBhcmUuYwppbmRleCA4NzZhYWQyMTAwYS4uYzdiYWIxNGI2MzMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9wcmVwYXJlLmMKQEAgLTIwNyw2ICsyMDcsNyBAQCBFeGVjdXRlUXVlcnkoUGFyc2VTdGF0 ZSAqcHN0YXRlLAogCQkJCQkgIHF1ZXJ5X3N0cmluZywKIAkJCQkJICBlbnRyeS0+cGxhbnNvdXJj ZS0+Y29tbWFuZFRhZywKIAkJCQkJICBwbGFuX2xpc3QsCisJCQkJCSAgTklMLAogCQkJCQkgIGNw bGFuKTsKIAogCS8qCkBAIC01NzcsNyArNTc4LDkgQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVj dXRlU3RtdCAqZXhlY3N0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJ Y29uc3QgY2hhciAqcXVlcnlfc3RyaW5nOwogCUNhY2hlZFBsYW4gKmNwbGFuOwogCUxpc3QJICAg KnBsYW5fbGlzdDsKKwlMaXN0CSAgICpwcmVwX2VzdGF0ZXM7CiAJTGlzdENlbGwgICAqcDsKKwlM aXN0Q2VsbCAgICpwcmVwX2xjOwogCVBhcmFtTGlzdEluZm8gcGFyYW1MSSA9IE5VTEw7CiAJRVN0 YXRlCSAgICplc3RhdGUgPSBOVUxMOwogCWluc3RyX3RpbWUJcGxhbnN0YXJ0OwpAQCAtNjUyLDE0 ICs2NTUsMTggQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAqZXhlY3N0bXQsIElu dG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJfQogCiAJcGxhbl9saXN0ID0gY3Bs YW4tPnN0bXRfbGlzdDsKKwlwcmVwX2VzdGF0ZXMgPSBOSUw7CiAKIAkvKiBFeHBsYWluIGVhY2gg cXVlcnkgKi8KKwlwcmVwX2xjID0gbGlzdF9oZWFkKHByZXBfZXN0YXRlcyk7CiAJZm9yZWFjaChw LCBwbGFuX2xpc3QpCiAJewogCQlQbGFubmVkU3RtdCAqcHN0bXQgPSBsZmlyc3Rfbm9kZShQbGFu bmVkU3RtdCwgcCk7CisJCUVTdGF0ZSAqcHJlcF9lc3RhdGUgPSBuZXh0X3ByZXBfZXN0YXRlKHBy ZXBfZXN0YXRlcywgJnByZXBfbGMpOwogCiAJCWlmIChwc3RtdC0+Y29tbWFuZFR5cGUgIT0gQ01E X1VUSUxJVFkpCi0JCQlFeHBsYWluT25lUGxhbihwc3RtdCwgaW50bywgZXMsIHF1ZXJ5X3N0cmlu ZywgcGFyYW1MSSwgcHN0YXRlLT5wX3F1ZXJ5RW52LAorCQkJRXhwbGFpbk9uZVBsYW4ocHN0bXQs IHByZXBfZXN0YXRlLAorCQkJCQkJICAgaW50bywgZXMsIHF1ZXJ5X3N0cmluZywgcGFyYW1MSSwg cHN0YXRlLT5wX3F1ZXJ5RW52LAogCQkJCQkJICAgJnBsYW5kdXJhdGlvbiwgKGVzLT5idWZmZXJz ID8gJmJ1ZnVzYWdlIDogTlVMTCksCiAJCQkJCQkgICBlcy0+bWVtb3J5ID8gJm1lbV9jb3VudGVy cyA6IE5VTEwpOwogCQllbHNlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFE TUUgYi9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUKaW5kZXggNTRmNDc4MmYzMWIuLmQ3NDlj ZWI2Njg3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvUkVBRE1FCkBAIC0yOTEsMTEgKzI5MSwxOCBAQCBRdWVyeSBQcm9j ZXNzaW5nIENvbnRyb2wgRmxvdwogCiBUaGlzIGlzIGEgc2tldGNoIG9mIGNvbnRyb2wgZmxvdyBm b3IgZnVsbCBxdWVyeSBwcm9jZXNzaW5nOgogCisgICAgRXhlY3V0b3JQcmVwCisJCU1heSBiZSBy dW4gYmVmb3JlIEV4ZWN1dG9yU3RhcnQgKGUuZy4sIGZvciBwbGFuIHZhbGlkYXRpb24pLCBvcgor CQlpbXBsaWNpdGx5IGZyb20gRXhlY3V0b3JTdGFydCBpZiBub3QgZG9uZSBlYXJsaWVyLiAgQ3Jl YXRlcyBFU3RhdGUsCisJCXBlcmZvcm1zIHJhbmdlIHRhYmxlIGluaXRpYWxpemF0aW9uLCBwZXJt aXNzaW9uIGNoZWNrcywgYW5kIGluaXRpYWwKKwkJcGFydGl0aW9uIHBydW5pbmcuICBSZXR1cm5z IHRoZSBFU3RhdGUgdGhhdCBFeGVjdXRvclN0YXJ0KCkgc2hvdWxkCisJCXJldXNlLgorCiAJQ3Jl YXRlUXVlcnlEZXNjCiAKIAlFeGVjdXRvclN0YXJ0Ci0JCUNyZWF0ZUV4ZWN1dG9yU3RhdGUKLQkJ CWNyZWF0ZXMgcGVyLXF1ZXJ5IGNvbnRleHQKKwkJRXhlY3V0b3JQcmVwIChpZiBub3QgYWxyZWFk eSBkb25lLCBpbmRpY2F0ZWQgYnkgTlVMTCBRdWVyeURlc2MuZXN0YXRlKQorCQkJY3JlYXRlcyBF U3RhdGUgYW5kIHBlci1xdWVyeSBjb250ZXh0CiAJCXN3aXRjaCB0byBwZXItcXVlcnkgY29udGV4 dCB0byBydW4gRXhlY0luaXROb2RlCiAJCUFmdGVyVHJpZ2dlckJlZ2luUXVlcnkKIAkJRXhlY0lu aXROb2RlIC0tLSByZWN1cnNpdmVseSBzY2FucyBwbGFuIHRyZWUKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFp bi5jCmluZGV4IGM1OGEyYWJlOWE3Li4wZjk1YWQ4ODQ5NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY01haW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFp bi5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgi CiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxlci5o IgorI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgog I2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2JhY2tlbmRfc3RhdHVzLmgi CkBAIC0xNDcsNyArMTQ4LDYgQEAgc3RhbmRhcmRfRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1 ZXJ5RGVzYywgaW50IGVmbGFncykKIAogCS8qIHNhbml0eSBjaGVja3M6IHF1ZXJ5RGVzYyBtdXN0 IG5vdCBiZSBzdGFydGVkIGFscmVhZHkgKi8KIAlBc3NlcnQocXVlcnlEZXNjICE9IE5VTEwpOwot CUFzc2VydChxdWVyeURlc2MtPmVzdGF0ZSA9PSBOVUxMKTsKIAogCS8qIGNhbGxlciBtdXN0IGVu c3VyZSB0aGUgcXVlcnkncyBzbmFwc2hvdCBpcyBhY3RpdmUgKi8KIAlBc3NlcnQoR2V0QWN0aXZl U25hcHNob3QoKSA9PSBxdWVyeURlc2MtPnNuYXBzaG90KTsKQEAgLTE3Myw5ICsxNzMsNzAgQEAg c3RhbmRhcmRfRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykK IAogCS8qCiAJICogQnVpbGQgRVN0YXRlLCBzd2l0Y2ggaW50byBwZXItcXVlcnkgbWVtb3J5IGNv bnRleHQgZm9yIHN0YXJ0dXAuCi0JICovCi0JZXN0YXRlID0gQ3JlYXRlRXhlY3V0b3JTdGF0ZSgp OwotCXF1ZXJ5RGVzYy0+ZXN0YXRlID0gZXN0YXRlOworCSAqCisJICogSWYgRXhlY3V0b3JQcmVw KCkgcmFuIGVhcmxpZXIgKGUuZy4sIHRvIGRvIGluaXRpYWwgcHJ1bmluZyBkdXJpbmcgcGxhbgor CSAqIHZhbGlkaXR5IGNoZWNraW5nKSwgcmV1c2UgaXRzIEVTdGF0ZSB0byBhdm9pZCByZWRvaW5n IHJhbmdlIHRhYmxlIHNldHVwCisJICogYW5kIHBydW5pbmcuIE90aGVyd2lzZSwgY3JlYXRlIGEg ZnJlc2ggRVN0YXRlIGFzIHVzdWFsLgorCSAqCisJICogSW4gYXNzZXJ0IGJ1aWxkcywgdmVyaWZ5 IHRoYXQgdGhlIGV4cGVjdGVkIGxvY2tzIGFyZSBoZWxkLiAgV2hlbgorCSAqIG5vIHByZXAgRVN0 YXRlIHdhcyBwcm92aWRlZCwgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKSBzaG91bGQgaGF2ZQorCSAq IGxvY2tlZCBldmVyeSByZWxhdGlvbiBpbiB0aGUgcGxhbi4gIFdoZW4gb25lIHdhcyBwcm92aWRl ZCwKKwkgKiBwcnVuaW5nLWF3YXJlIGxvY2tpbmcgc2hvdWxkIGhhdmUgbG9ja2VkIGF0IGxlYXN0 IHRoZSB1bnBydW5lZAorCSAqIHJlbGF0aW9ucy4gIEJvdGggY2hlY2tzIGFyZSBza2lwcGVkIGlu IHBhcmFsbGVsIHdvcmtlcnMsIHdoaWNoCisJICogYWNxdWlyZSByZWxhdGlvbiBsb2NrcyBsYXpp bHkgaW4gRXhlY0dldFJhbmdlVGFibGVSZWxhdGlvbigpLgorCSAqLworCWlmIChxdWVyeURlc2Mt PmVzdGF0ZSA9PSBOVUxMKQorCXsKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJCWlmICgh SXNQYXJhbGxlbFdvcmtlcigpKQorCQl7CisJCQlMaXN0Q2VsbCAgICpsYzsKKworCQkJZm9yZWFj aChsYywgcXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+cnRhYmxlKQorCQkJeworCQkJCVJhbmdlVGJs RW50cnkgKnJ0ZSA9IGxmaXJzdF9ub2RlKFJhbmdlVGJsRW50cnksIGxjKTsKKworCQkJCWlmIChy dGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OIHx8CisJCQkJCShydGUtPnJ0ZWtpbmQgPT0gUlRF X1NVQlFVRVJZICYmIHJ0ZS0+cmVsaWQgIT0gSW52YWxpZE9pZCkpCisJCQkJCUFzc2VydChDaGVj a1JlbGF0aW9uT2lkTG9ja2VkQnlNZShydGUtPnJlbGlkLAorCQkJCQkJCQkJCQkJCSAgcnRlLT5y ZWxsb2NrbW9kZSwKKwkJCQkJCQkJCQkJCQkgIHRydWUpKTsKKwkJCX0KKwkJfQorI2VuZGlmCisJ CXF1ZXJ5RGVzYy0+ZXN0YXRlID0gRXhlY3V0b3JQcmVwKHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQs CisJCQkJCQkJCQkJIHF1ZXJ5RGVzYy0+cGFyYW1zLAorCQkJCQkJCQkJCSBDdXJyZW50UmVzb3Vy Y2VPd25lciwKKwkJCQkJCQkJCQkgZWZsYWdzKTsKKwl9CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVD S0lORworCWVsc2UKKwl7CisJCS8qCisJCSAqIEEgcHJlcCBFU3RhdGUgd2FzIHByb3ZpZGVkLCBt ZWFuaW5nIHBydW5pbmctYXdhcmUgbG9ja2luZworCQkgKiBzaG91bGQgaGF2ZSBsb2NrZWQgYXQg bGVhc3QgdGhlIHVucHJ1bmVkIHJlbGF0aW9ucy4KKwkJICovCisJCWlmICghSXNQYXJhbGxlbFdv cmtlcigpKQorCQl7CisJCQlpbnQJCXJ0aW5kZXggPSAtMTsKKworCQkJd2hpbGUgKChydGluZGV4 ID0gYm1zX25leHRfbWVtYmVyKHF1ZXJ5RGVzYy0+ZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMs CisJCQkJCQkJCQkJCSAgcnRpbmRleCkpID49IDApCisJCQl7CisJCQkJUmFuZ2VUYmxFbnRyeSAq cnRlID0gZXhlY19ydF9mZXRjaChydGluZGV4LCBxdWVyeURlc2MtPmVzdGF0ZSk7CisKKwkJCQlB c3NlcnQocnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTiB8fAorCQkJCQkgICAocnRlLT5ydGVr aW5kID09IFJURV9TVUJRVUVSWSAmJgorCQkJCQkJcnRlLT5yZWxpZCAhPSBJbnZhbGlkT2lkKSk7 CisJCQkJQXNzZXJ0KENoZWNrUmVsYXRpb25PaWRMb2NrZWRCeU1lKHJ0ZS0+cmVsaWQsCisJCQkJ CQkJCQkJCQkgIHJ0ZS0+cmVsbG9ja21vZGUsIHRydWUpKTsKKwkJCX0KKwkJfQorCX0KKyNlbmRp ZgorCisJZXN0YXRlID0gcXVlcnlEZXNjLT5lc3RhdGU7CisJQXNzZXJ0KGVzdGF0ZSk7CiAKIAlv bGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGVzdGF0ZS0+ZXNfcXVlcnlfY3h0KTsK IApAQCAtMjY1LDYgKzMyNiw3MyBAQCBzdGFuZGFyZF9FeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAq cXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKIH0KIAorLyoKKyAqIEV4ZWN1dG9yUHJlcDogcHJlcGFyZSBleGVjdXRvciBzdGF0ZSBmb3Ig YSBQbGFubmVkU3RtdCBvdXRzaWRlIEV4ZWN1dG9yU3RhcnQuCisgKgorICogUGVyZm9ybXMgcmFu Z2UgdGFibGUgaW5pdGlhbGl6YXRpb24sIHBlcm1pc3Npb24gY2hlY2tzLCBhbmQgaW5pdGlhbAor ICogcGFydGl0aW9uIHBydW5pbmcgaWYgcGFydFBydW5lSW5mb3MgYXJlIHByZXNlbnQuCisgKgor ICogUmV0dXJucyBhbiBFU3RhdGUgdGhhdCB0aGUgY2FsbGVyIG11c3QgZWl0aGVyIHBhc3MgdG8g RXhlY3V0b3JTdGFydCgpCisgKiBmb3IgcmV1c2Ugb3IgZnJlZSB2aWEgRnJlZUV4ZWN1dG9yU3Rh dGUoKSBpZiBleGVjdXRpb24gd2lsbCBub3QgcHJvY2VlZC4KKyAqIEdldENhY2hlZFBsYW4oKSB1 c2VzIHRoaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhcnRpdGlvbnMgdG8gbG9jayBhZnRlcgorICog cHJ1bmluZzsgaWYgdGhlIHJlc3VsdGluZyBFU3RhdGUgaXMgbm90IGRlbGl2ZXJlZCB0byBFeGVj dXRvclN0YXJ0KCksCisgKiB0aGUgZXhlY3V0b3Igd291bGQgb3BlcmF0ZSBvbiB1bmxvY2tlZCBy ZWxhdGlvbnMuCisgKi8KK0VTdGF0ZSAqCitFeGVjdXRvclByZXAoUGxhbm5lZFN0bXQgKnBzdG10 LCBQYXJhbUxpc3RJbmZvIHBhcmFtcywgUmVzb3VyY2VPd25lciBvd25lciwKKwkJCSBpbnQgZWZs YWdzKQoreworCVJlc291cmNlT3duZXIgb2xkb3duZXI7CisJRVN0YXRlICplc3RhdGU7CisKKwlp ZiAocHN0bXQtPmNvbW1hbmRUeXBlID09IENNRF9VVElMSVRZKQorCQlyZXR1cm4gTlVMTDsKKwor CS8qIENhbGxlciBtdXN0IGhhdmUgZXN0YWJsaXNoZWQgYW4gYWN0aXZlIHNuYXBzaG90LiAqLwor CUFzc2VydChBY3RpdmVTbmFwc2hvdFNldCgpKTsKKworCWVzdGF0ZSA9IENyZWF0ZUV4ZWN1dG9y U3RhdGUoKTsKKwllc3RhdGUtPmVzX3BsYW5uZWRzdG10ID0gcHN0bXQ7CisJZXN0YXRlLT5lc19w YXJ0X3BydW5lX2luZm9zID0gcHN0bXQtPnBhcnRQcnVuZUluZm9zOworCWVzdGF0ZS0+ZXNfcGFy YW1fbGlzdF9pbmZvID0gcGFyYW1zOworCWVzdGF0ZS0+ZXNfdG9wX2VmbGFncyA9IGVmbGFnczsK KworCS8qCisJICogRG8gcGVybWlzc2lvbnMgY2hlY2tzLgorCSAqLworCUV4ZWNDaGVja1Blcm1p c3Npb25zKHBzdG10LT5ydGFibGUsIHBzdG10LT5wZXJtSW5mb3MsIHRydWUpOworCisJLyoKKwkg KiBJbml0aWFsaXplIHJhbmdlIHRhYmxlLgorCSAqLworCUV4ZWNJbml0UmFuZ2VUYWJsZShlc3Rh dGUsIHBzdG10LT5ydGFibGUsIHBzdG10LT5wZXJtSW5mb3MsCisJCQkJCSAgIGJtc19jb3B5KHBz dG10LT51bnBydW5hYmxlUmVsaWRzKSk7CisKKwkvKgorCSAqIEVuc3VyZSBsb2NrcyB0YWtlbiBk dXJpbmcgaW5pdGlhbCBwcnVuaW5nIGFyZSB0cmFja2VkIHVuZGVyIHRoZSBnaXZlbgorCSAqIFJl c291cmNlT3duZXIgKGUuZy4sIG9uZSBhc3NvY2lhdGVkIHdpdGggQ2FjaGVkUGxhbiB2YWxpZGF0 aW9uKS4KKwkgKi8KKwlvbGRvd25lciA9IEN1cnJlbnRSZXNvdXJjZU93bmVyOworCUN1cnJlbnRS ZXNvdXJjZU93bmVyID0gb3duZXI7CisKKwkvKgorCSAqIFNldCB1cCBQYXJ0aXRpb25QcnVuZVN0 YXRlIHN0cnVjdHVyZXMgbmVlZGVkIGZvciBib3RoIGluaXRpYWwgYW5kCisJICogcnVudGltZSBw YXJ0aXRpb24gcHJ1bmluZy4gVGhlc2Ugc3RydWN0dXJlcyBhcmUgYnVpbHQgZnJvbSB0aGUKKwkg KiBQYXJ0aXRpb25QcnVuZUluZm8gZW50cmllcyBpbiB0aGUgcGxhbiB0cmVlLgorCSAqCisJICog QWxzbyBwZXJmb3JtIGluaXRpYWwgcHJ1bmluZyB0byBjb21wdXRlIHRoZSBzdWJzZXQgb2YgY2hp bGQgc3VicGxhbnMKKwkgKiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuIFRoZSByZXN1bHRzLCB3aGlj aCBhcmUgYml0bWFwc2V0cyBvZiBzZWxlY3RlZAorCSAqIGNoaWxkIGluZGV4ZXMsIGFyZSBzYXZl ZCBpbiBlc19wYXJ0X3BydW5lX3Jlc3VsdHMuIFRoaXMgbGlzdCBpcyBwYXJhbGxlbAorCSAqIHRv IGVzX3BhcnRfcHJ1bmVfaW5mb3MuCisJICovCisJRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3Rh dGVzKGVzdGF0ZSk7CisJRXhlY0RvSW5pdGlhbFBydW5pbmcoZXN0YXRlKTsKKworCUN1cnJlbnRS ZXNvdXJjZU93bmVyID0gb2xkb3duZXI7CisKKwlyZXR1cm4gZXN0YXRlOworfQorCiAvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgKgkJRXhlY3V0b3JSdW4KICAqCkBAIC04NDAsMzggKzk2OCwxNCBAQCBJbml0UGxhbihR dWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykKIAlDbWRUeXBlCQlvcGVyYXRpb24gPSBx dWVyeURlc2MtPm9wZXJhdGlvbjsKIAlQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQgPSBxdWVyeURl c2MtPnBsYW5uZWRzdG10OwogCVBsYW4JICAgKnBsYW4gPSBwbGFubmVkc3RtdC0+cGxhblRyZWU7 Ci0JTGlzdAkgICAqcmFuZ2VUYWJsZSA9IHBsYW5uZWRzdG10LT5ydGFibGU7CiAJRVN0YXRlCSAg ICplc3RhdGUgPSBxdWVyeURlc2MtPmVzdGF0ZTsKIAlQbGFuU3RhdGUgICpwbGFuc3RhdGU7CiAJ VHVwbGVEZXNjCXR1cFR5cGU7CiAJTGlzdENlbGwgICAqbDsKIAlpbnQJCQlpOwogCi0JLyoKLQkg KiBEbyBwZXJtaXNzaW9ucyBjaGVja3MKLQkgKi8KLQlFeGVjQ2hlY2tQZXJtaXNzaW9ucyhyYW5n ZVRhYmxlLCBwbGFubmVkc3RtdC0+cGVybUluZm9zLCB0cnVlKTsKLQotCS8qCi0JICogaW5pdGlh bGl6ZSB0aGUgbm9kZSdzIGV4ZWN1dGlvbiBzdGF0ZQotCSAqLwotCUV4ZWNJbml0UmFuZ2VUYWJs ZShlc3RhdGUsIHJhbmdlVGFibGUsIHBsYW5uZWRzdG10LT5wZXJtSW5mb3MsCi0JCQkJCSAgIGJt c19jb3B5KHBsYW5uZWRzdG10LT51bnBydW5hYmxlUmVsaWRzKSk7Ci0KLQllc3RhdGUtPmVzX3Bs YW5uZWRzdG10ID0gcGxhbm5lZHN0bXQ7Ci0JZXN0YXRlLT5lc19wYXJ0X3BydW5lX2luZm9zID0g cGxhbm5lZHN0bXQtPnBhcnRQcnVuZUluZm9zOwotCi0JLyoKLQkgKiBQZXJmb3JtIHJ1bnRpbWUg ImluaXRpYWwiIHBydW5pbmcgdG8gaWRlbnRpZnkgd2hpY2ggY2hpbGQgc3VicGxhbnMsCi0JICog Y29ycmVzcG9uZGluZyB0byB0aGUgY2hpbGRyZW4gb2YgcGxhbiBub2RlcyB0aGF0IGNvbnRhaW4K LQkgKiBQYXJ0aXRpb25QcnVuZUluZm8gc3VjaCBhcyBBcHBlbmQsIHdpbGwgbm90IGJlIGV4ZWN1 dGVkLiBUaGUgcmVzdWx0cywKLQkgKiB3aGljaCBhcmUgYml0bWFwc2V0cyBvZiBpbmRleGVzIG9m IHRoZSBjaGlsZCBzdWJwbGFucyB0aGF0IHdpbGwgYmUKLQkgKiBleGVjdXRlZCwgYXJlIHNhdmVk IGluIGVzX3BhcnRfcHJ1bmVfcmVzdWx0cy4gIFRoZXNlIHJlc3VsdHMgY29ycmVzcG9uZAotCSAq IHRvIGVhY2ggUGFydGl0aW9uUHJ1bmVJbmZvIGVudHJ5LCBhbmQgdGhlIGVzX3BhcnRfcHJ1bmVf cmVzdWx0cyBsaXN0IGlzCi0JICogcGFyYWxsZWwgdG8gZXNfcGFydF9wcnVuZV9pbmZvcy4KLQkg Ki8KLQlFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZXMoZXN0YXRlKTsKLQlFeGVjRG9Jbml0 aWFsUHJ1bmluZyhlc3RhdGUpOworCS8qIEV4ZWN1dG9yUHJlcCgpIG11c3QgaGF2ZSBiZWVuIGRv bmUuICovCisJQXNzZXJ0KHF1ZXJ5RGVzYy0+ZXN0YXRlKTsKIAogCS8qCiAJICogTmV4dCwgYnVp bGQgdGhlIEV4ZWNSb3dNYXJrIGFycmF5IGZyb20gdGhlIFBsYW5Sb3dNYXJrKHMpLCBpZiBhbnku CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCmluZGV4IGFjODRhZjI5NGM5Li4wMjQ3ODBk MzUxNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMKQEAgLTEzMDAsNyArMTMwMCw4 IEBAIEV4ZWNQYXJhbGxlbEdldFF1ZXJ5RGVzYyhzaG1fdG9jICp0b2MsIERlc3RSZWNlaXZlciAq cmVjZWl2ZXIsCiAJcmV0dXJuIENyZWF0ZVF1ZXJ5RGVzYyhwc3RtdCwKIAkJCQkJCSAgIHF1ZXJ5 U3RyaW5nLAogCQkJCQkJICAgR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAot CQkJCQkJICAgcmVjZWl2ZXIsIHBhcmFtTEksIE5VTEwsIGluc3RydW1lbnRfb3B0aW9ucyk7CisJ CQkJCQkgICByZWNlaXZlciwgcGFyYW1MSSwgTlVMTCwgaW5zdHJ1bWVudF9vcHRpb25zLAorCQkJ CQkJICAgTlVMTCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9m dW5jdGlvbnMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCmluZGV4IDg4MTA5 MzQ4ODE3Li45NTJhNzg0YzkyNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVu Y3Rpb25zLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKQEAgLTEzNjks NyArMTM2OSw4IEBAIHBvc3RxdWVsX3N0YXJ0KGV4ZWN1dGlvbl9zdGF0ZSAqZXMsIFNRTEZ1bmN0 aW9uQ2FjaGVQdHIgZmNhY2hlKQogCQkJCQkJCSBkZXN0LAogCQkJCQkJCSBmY2FjaGUtPnBhcmFt TEksCiAJCQkJCQkJIGVzLT5xZCA/IGVzLT5xZC0+cXVlcnlFbnYgOiBOVUxMLAotCQkJCQkJCSAw KTsKKwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCk7CiAKIAkvKiBVdGlsaXR5IGNvbW1hbmRzIGRv bid0IG5lZWQgRXhlY3V0b3IuICovCiAJaWYgKGVzLT5xZC0+b3BlcmF0aW9uICE9IENNRF9VVElM SVRZKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9zcGkuYwppbmRleCA1MmYzYjExMzAxYy4uMzgwYmJjNDRlOTcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L3NwaS5jCkBAIC0xNjg2LDYgKzE2ODYsNyBAQCBTUElfY3Vyc29yX29wZW5faW50ZXJuYWwoY29u c3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBwbGFuLAogCQkJCQkgIHF1ZXJ5X3N0cmluZywKIAkJ CQkJICBwbGFuc291cmNlLT5jb21tYW5kVGFnLAogCQkJCQkgIHN0bXRfbGlzdCwKKwkJCQkJICBO SUwsCiAJCQkJCSAgY3BsYW4pOwogCiAJLyoKQEAgLTI1MDAsNiArMjUwMSw4IEBAIF9TUElfZXhl Y3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlv bnMsCiAJCUNhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UgPSAoQ2FjaGVkUGxhblNvdXJjZSAq KSBsZmlyc3QobGMxKTsKIAkJTGlzdAkgICAqc3RtdF9saXN0OwogCQlMaXN0Q2VsbCAgICpsYzI7 CisJCUxpc3QJICAgKnByZXBfZXN0YXRlczsKKwkJTGlzdENlbGwgICAqcHJlcF9sYzsKIAogCQlz cGljYWxsYmFja2FyZy5xdWVyeSA9IHBsYW5zb3VyY2UtPnF1ZXJ5X3N0cmluZzsKIApAQCAtMjU3 OCw2ICsyNTgxLDcgQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0ciBwbGFuLCBjb25zdCBT UElFeGVjdXRlT3B0aW9ucyAqb3B0aW9ucywKIAkJCQkJCQkgIHBsYW5fb3duZXIsIF9TUElfY3Vy cmVudC0+cXVlcnlFbnYpOwogCiAJCXN0bXRfbGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7CisJCXBy ZXBfZXN0YXRlcyA9IE5JTDsKIAogCQkvKgogCQkgKiBJZiB3ZSB3ZXJlbid0IGdpdmVuIGEgc3Bl Y2lmaWMgc25hcHNob3QgdG8gdXNlLCBhbmQgdGhlIHN0YXRlbWVudApAQCAtMjYxNSw5ICsyNjE5 LDExIEBAIF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0 ZU9wdGlvbnMgKm9wdGlvbnMsCiAJCQl9CiAJCX0KIAorCQlwcmVwX2xjID0gbGlzdF9oZWFkKHBy ZXBfZXN0YXRlcyk7CiAJCWZvcmVhY2gobGMyLCBzdG10X2xpc3QpCiAJCXsKIAkJCVBsYW5uZWRT dG10ICpzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIGxjMik7CisJCQlFU3RhdGUgKnBy ZXBfZXN0YXRlID0gbmV4dF9wcmVwX2VzdGF0ZShwcmVwX2VzdGF0ZXMsICZwcmVwX2xjKTsKIAkJ CWJvb2wJCWNhblNldFRhZyA9IHN0bXQtPmNhblNldFRhZzsKIAkJCURlc3RSZWNlaXZlciAqZGVz dDsKIApAQCAtMjY5NSw3ICsyNzAxLDggQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0ciBw bGFuLCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0aW9ucywKIAkJCQkJCQkJCQlkZXN0LAog CQkJCQkJCQkJCW9wdGlvbnMtPnBhcmFtcywKIAkJCQkJCQkJCQlfU1BJX2N1cnJlbnQtPnF1ZXJ5 RW52LAotCQkJCQkJCQkJCTApOworCQkJCQkJCQkJCTAsCisJCQkJCQkJCQkJcHJlcF9lc3RhdGUp OwogCQkJCXJlcyA9IF9TUElfcHF1ZXJ5KHFkZXNjLCBmaXJlX3RyaWdnZXJzLAogCQkJCQkJCQkg IGNhblNldFRhZyA/IG9wdGlvbnMtPnRjb3VudCA6IDApOwogCQkJCUZyZWVRdWVyeURlc2MocWRl c2MpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tl bmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IGIzNTYzMTEzMjE5Li4zNTVhNDkwY2RlOSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3Av cG9zdGdyZXMuYwpAQCAtMTIzMSw2ICsxMjMxLDcgQEAgZXhlY19zaW1wbGVfcXVlcnkoY29uc3Qg Y2hhciAqcXVlcnlfc3RyaW5nKQogCQkJCQkJICBxdWVyeV9zdHJpbmcsCiAJCQkJCQkgIGNvbW1h bmRUYWcsCiAJCQkJCQkgIHBsYW50cmVlX2xpc3QsCisJCQkJCQkgIE5JTCwKIAkJCQkJCSAgTlVM TCk7CiAKIAkJLyoKQEAgLTIwMzAsNiArMjAzMSw3IEBAIGV4ZWNfYmluZF9tZXNzYWdlKFN0cmlu Z0luZm8gaW5wdXRfbWVzc2FnZSkKIAkJCQkJICBxdWVyeV9zdHJpbmcsCiAJCQkJCSAgcHNyYy0+ Y29tbWFuZFRhZywKIAkJCQkJICBjcGxhbi0+c3RtdF9saXN0LAorCQkJCQkgIE5JTCwKIAkJCQkJ ICBjcGxhbik7CiAKIAkvKiBQb3J0YWwgaXMgZGVmaW5lZCwgc2V0IHRoZSBwbGFuIElEIGJhc2Vk IG9uIGl0cyBjb250ZW50cy4gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5 LmMgYi9zcmMvYmFja2VuZC90Y29wL3BxdWVyeS5jCmluZGV4IGQ4ZmM3NWQwYmI5Li5iMTgyNjY0 ODdiYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYworKysgYi9zcmMvYmFj a2VuZC90Y29wL3BxdWVyeS5jCkBAIC0zNyw2ICszNyw3IEBAIFBvcnRhbAkJQWN0aXZlUG9ydGFs ID0gTlVMTDsKIAogCiBzdGF0aWMgdm9pZCBQcm9jZXNzUXVlcnkoUGxhbm5lZFN0bXQgKnBsYW4s CisJCQkJCQkgRVN0YXRlICpwcmVwX2VzdGF0ZSwKIAkJCQkJCSBjb25zdCBjaGFyICpzb3VyY2VU ZXh0LAogCQkJCQkJIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJCQkJIFF1ZXJ5RW52aXJvbm1l bnQgKnF1ZXJ5RW52LApAQCAtNzIsNyArNzMsOCBAQCBDcmVhdGVRdWVyeURlc2MoUGxhbm5lZFN0 bXQgKnBsYW5uZWRzdG10LAogCQkJCURlc3RSZWNlaXZlciAqZGVzdCwKIAkJCQlQYXJhbUxpc3RJ bmZvIHBhcmFtcywKIAkJCQlRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKLQkJCQlpbnQgaW5z dHJ1bWVudF9vcHRpb25zKQorCQkJCWludCBpbnN0cnVtZW50X29wdGlvbnMsCisJCQkJRVN0YXRl ICpwcmVwX2VzdGF0ZSkKIHsKIAlRdWVyeURlc2MgICpxZCA9IHBhbGxvY19vYmplY3QoUXVlcnlE ZXNjKTsKIApAQCAtOTMsNiArOTUsOSBAQCBDcmVhdGVRdWVyeURlc2MoUGxhbm5lZFN0bXQgKnBs YW5uZWRzdG10LAogCXFkLT5wbGFuc3RhdGUgPSBOVUxMOwogCXFkLT50b3RhbHRpbWUgPSBOVUxM OwogCisJLyogVXNlIHRoZSBFU3RhdGUgY3JlYXRlZCBieSBFeGVjdXRvclByZXAoKSBpZiBhbHJl YWR5IGRvbmUuICovCisJcWQtPmVzdGF0ZSA9IHByZXBfZXN0YXRlOworCiAJLyogbm90IHlldCBl eGVjdXRlZCAqLwogCXFkLT5hbHJlYWR5X2V4ZWN1dGVkID0gZmFsc2U7CiAKQEAgLTEyMyw2ICsx MjgsNyBAQCBGcmVlUXVlcnlEZXNjKFF1ZXJ5RGVzYyAqcWRlc2MpCiAgKgkJUE9SVEFMX09ORV9S RVRVUk5JTkcsIG9yIFBPUlRBTF9PTkVfTU9EX1dJVEggcG9ydGFsCiAgKgogICoJcGxhbjogdGhl IHBsYW4gdHJlZSBmb3IgdGhlIHF1ZXJ5CisgKglwcmVwX2VzdGF0ZTogRVN0YXRlIGNyZWF0ZWQg aW4gRXhlY3V0b3JQcmVwKCkgZm9yIHRoZSBxdWVyeSwgaWYgYW55CiAgKglzb3VyY2VUZXh0OiB0 aGUgc291cmNlIHRleHQgb2YgdGhlIHF1ZXJ5CiAgKglwYXJhbXM6IGFueSBwYXJhbWV0ZXJzIG5l ZWRlZAogICoJZGVzdDogd2hlcmUgdG8gc2VuZCByZXN1bHRzCkBAIC0xMzUsNiArMTQxLDcgQEAg RnJlZVF1ZXJ5RGVzYyhRdWVyeURlc2MgKnFkZXNjKQogICovCiBzdGF0aWMgdm9pZAogUHJvY2Vz c1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLAorCQkJIEVTdGF0ZSAqcHJlcF9lc3RhdGUsCiAJCQkg Y29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCSBR dWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKQEAgLTE0OCw3ICsxNTUsOCBAQCBQcm9jZXNzUXVl cnkoUGxhbm5lZFN0bXQgKnBsYW4sCiAJICovCiAJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNj KHBsYW4sIHNvdXJjZVRleHQsCiAJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRT bmFwc2hvdCwKLQkJCQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVudiwgMCk7CisJCQkJCQkJCWRl c3QsIHBhcmFtcywgcXVlcnlFbnYsIDAsCisJCQkJCQkJCXByZXBfZXN0YXRlKTsKIAogCS8qCiAJ ICogQ2FsbCBFeGVjdXRvclN0YXJ0IHRvIHByZXBhcmUgdGhlIHBsYW4gZm9yIGV4ZWN1dGlvbgpA QCAtNDk1LDcgKzUwMywxMCBAQCBQb3J0YWxTdGFydChQb3J0YWwgcG9ydGFsLCBQYXJhbUxpc3RJ bmZvIHBhcmFtcywKIAkJCQkJCQkJCQkJTm9uZV9SZWNlaXZlciwKIAkJCQkJCQkJCQkJcGFyYW1z LAogCQkJCQkJCQkJCQlwb3J0YWwtPnF1ZXJ5RW52LAotCQkJCQkJCQkJCQkwKTsKKwkJCQkJCQkJ CQkJMCwKKwkJCQkJCQkJCQkJcG9ydGFsLT5wcmVwX2VzdGF0ZXMgPworCQkJCQkJCQkJCQkoRVN0 YXRlICopIGxpbml0aWFsKHBvcnRhbC0+cHJlcF9lc3RhdGVzKSA6CisJCQkJCQkJCQkJCU5VTEwp OwogCiAJCQkJLyoKIAkJCQkgKiBJZiBpdCdzIGEgc2Nyb2xsYWJsZSBjdXJzb3IsIGV4ZWN1dG9y IG5lZWRzIHRvIHN1cHBvcnQKQEAgLTExODUsNiArMTE5Niw3IEBAIFBvcnRhbFJ1bk11bHRpKFBv cnRhbCBwb3J0YWwsCiB7CiAJYm9vbAkJYWN0aXZlX3NuYXBzaG90X3NldCA9IGZhbHNlOwogCUxp c3RDZWxsICAgKnN0bXRsaXN0X2l0ZW07CisJTGlzdENlbGwgICAqcHJlcF9sYzsKIAogCS8qCiAJ ICogSWYgdGhlIGRlc3RpbmF0aW9uIGlzIERlc3RSZW1vdGVFeGVjdXRlLCBjaGFuZ2UgdG8gRGVz dE5vbmUuICBUaGUKQEAgLTEyMDUsOSArMTIxNywxMSBAQCBQb3J0YWxSdW5NdWx0aShQb3J0YWwg cG9ydGFsLAogCSAqIExvb3AgdG8gaGFuZGxlIHRoZSBpbmRpdmlkdWFsIHF1ZXJpZXMgZ2VuZXJh dGVkIGZyb20gYSBzaW5nbGUgcGFyc2V0cmVlCiAJICogYnkgYW5hbHlzaXMgYW5kIHJld3JpdGUu CiAJICovCisJcHJlcF9sYyA9IGxpc3RfaGVhZChwb3J0YWwtPnByZXBfZXN0YXRlcyk7CiAJZm9y ZWFjaChzdG10bGlzdF9pdGVtLCBwb3J0YWwtPnN0bXRzKQogCXsKIAkJUGxhbm5lZFN0bXQgKnBz dG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIHN0bXRsaXN0X2l0ZW0pOworCQlFU3RhdGUg KnByZXBfZXN0YXRlID0gbmV4dF9wcmVwX2VzdGF0ZShwb3J0YWwtPnByZXBfZXN0YXRlcywgJnBy ZXBfbGMpOwogCiAJCS8qCiAJCSAqIElmIHdlIGdvdCBhIGNhbmNlbCBzaWduYWwgaW4gcHJpb3Ig Y29tbWFuZCwgcXVpdApAQCAtMTI2NSw3ICsxMjc5LDcgQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFs IHBvcnRhbCwKIAkJCWlmIChwc3RtdC0+Y2FuU2V0VGFnKQogCQkJewogCQkJCS8qIHN0YXRlbWVu dCBjYW4gc2V0IHRhZyBzdHJpbmcgKi8KLQkJCQlQcm9jZXNzUXVlcnkocHN0bXQsCisJCQkJUHJv Y2Vzc1F1ZXJ5KHBzdG10LCBwcmVwX2VzdGF0ZSwKIAkJCQkJCQkgcG9ydGFsLT5zb3VyY2VUZXh0 LAogCQkJCQkJCSBwb3J0YWwtPnBvcnRhbFBhcmFtcywKIAkJCQkJCQkgcG9ydGFsLT5xdWVyeUVu diwKQEAgLTEyNzQsNyArMTI4OCw3IEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBwb3J0YWwsCiAJ CQllbHNlCiAJCQl7CiAJCQkJLyogc3RtdCBhZGRlZCBieSByZXdyaXRlIGNhbm5vdCBzZXQgdGFn ICovCi0JCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LAorCQkJCVByb2Nlc3NRdWVyeShwc3RtdCwgcHJl cF9lc3RhdGUsCiAJCQkJCQkJIHBvcnRhbC0+c291cmNlVGV4dCwKIAkJCQkJCQkgcG9ydGFsLT5w b3J0YWxQYXJhbXMsCiAJCQkJCQkJIHBvcnRhbC0+cXVlcnlFbnYsCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9tbWdyL3BvcnRhbG1lbS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9w b3J0YWxtZW0uYwppbmRleCA0OTNmOWIwZWUxOS4uNDQzYjU4MzYzN2MgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv bW1nci9wb3J0YWxtZW0uYwpAQCAtMjg2LDYgKzI4Niw3IEBAIFBvcnRhbERlZmluZVF1ZXJ5KFBv cnRhbCBwb3J0YWwsCiAJCQkJICBjb25zdCBjaGFyICpzb3VyY2VUZXh0LAogCQkJCSAgQ29tbWFu ZFRhZyBjb21tYW5kVGFnLAogCQkJCSAgTGlzdCAqc3RtdHMsCisJCQkJICBMaXN0ICpwcmVwX2Vz dGF0ZXMsCiAJCQkJICBDYWNoZWRQbGFuICpjcGxhbikKIHsKIAlBc3NlcnQoUG9ydGFsSXNWYWxp ZChwb3J0YWwpKTsKQEAgLTI5OSw2ICszMDAsNyBAQCBQb3J0YWxEZWZpbmVRdWVyeShQb3J0YWwg cG9ydGFsLAogCXBvcnRhbC0+Y29tbWFuZFRhZyA9IGNvbW1hbmRUYWc7CiAJU2V0UXVlcnlDb21w bGV0aW9uKCZwb3J0YWwtPnFjLCBjb21tYW5kVGFnLCAwKTsKIAlwb3J0YWwtPnN0bXRzID0gc3Rt dHM7CisJcG9ydGFsLT5wcmVwX2VzdGF0ZXMgPSBwcmVwX2VzdGF0ZXM7CiAJcG9ydGFsLT5jcGxh biA9IGNwbGFuOwogCXBvcnRhbC0+c3RhdHVzID0gUE9SVEFMX0RFRklORUQ7CiB9CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmggYi9zcmMvaW5jbHVkZS9jb21tYW5k cy9leHBsYWluLmgKaW5kZXggNDcyZTE0MWJiYTMuLjcxZWJlMzhiYzg2IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMv ZXhwbGFpbi5oCkBAIC02NCw3ICs2NCw4IEBAIGV4dGVybiB2b2lkIEV4cGxhaW5PbmVVdGlsaXR5 KE5vZGUgKnV0aWxpdHlTdG10LCBJbnRvQ2xhdXNlICppbnRvLAogCQkJCQkJCSAgRXhwbGFpblN0 YXRlICplcywgUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCSAgUGFyYW1MaXN0SW5mbyBwYXJh bXMpOwogCi1leHRlcm4gdm9pZCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0 bXQsIEludG9DbGF1c2UgKmludG8sCitleHRlcm4gdm9pZCBFeHBsYWluT25lUGxhbihQbGFubmVk U3RtdCAqcGxhbm5lZHN0bXQsIEVTdGF0ZSAqcHJlcF9lc3RhdGUsCisJCQkJCQkgICBJbnRvQ2xh dXNlICppbnRvLAogCQkJCQkJICAgRXhwbGFpblN0YXRlICplcywgY29uc3QgY2hhciAqcXVlcnlT dHJpbmcsCiAJCQkJCQkgICBQYXJhbUxpc3RJbmZvIHBhcmFtcywgUXVlcnlFbnZpcm9ubWVudCAq cXVlcnlFbnYsCiAJCQkJCQkgICBjb25zdCBpbnN0cl90aW1lICpwbGFuZHVyYXRpb24sCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oIGIvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY2Rlc2MuaAppbmRleCBkM2E1NzI0Mjg0NC4uM2EyMTY5Yzk2MTMgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNkZXNjLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY2Rlc2MuaApAQCAtNDMsNyArNDMsNyBAQCB0eXBlZGVmIHN0cnVjdCBRdWVyeURl c2MKIAlRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudjsgLyogcXVlcnkgZW52aXJvbm1lbnQgcGFz c2VkIGluICovCiAJaW50CQkJaW5zdHJ1bWVudF9vcHRpb25zOyAvKiBPUiBvZiBJbnN0cnVtZW50 T3B0aW9uIGZsYWdzICovCiAKLQkvKiBUaGVzZSBmaWVsZHMgYXJlIHNldCBieSBFeGVjdXRvclN0 YXJ0ICovCisJLyogVGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgRXhlY3V0b3JTdGFydCBvciBFeGVj dXRvclByZXAgKi8KIAlUdXBsZURlc2MJdHVwRGVzYzsJCS8qIGRlc2NyaXB0b3IgZm9yIHJlc3Vs dCB0dXBsZXMgKi8KIAlFU3RhdGUJICAgKmVzdGF0ZTsJCQkvKiBleGVjdXRvcidzIHF1ZXJ5LXdp ZGUgc3RhdGUgKi8KIAlQbGFuU3RhdGUgICpwbGFuc3RhdGU7CQkvKiB0cmVlIG9mIHBlci1wbGFu LW5vZGUgc3RhdGUgKi8KQEAgLTYzLDcgKzYzLDggQEAgZXh0ZXJuIFF1ZXJ5RGVzYyAqQ3JlYXRl UXVlcnlEZXNjKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwKIAkJCQkJCQkJICBEZXN0UmVjZWl2 ZXIgKmRlc3QsCiAJCQkJCQkJCSAgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCQkJCQkJCSAgUXVl cnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCi0JCQkJCQkJCSAgaW50IGluc3RydW1lbnRfb3B0aW9u cyk7CisJCQkJCQkJCSAgaW50IGluc3RydW1lbnRfb3B0aW9ucywKKwkJCQkJCQkJICBFU3RhdGUg KnByZXBfZXN0YXRlKTsKIAogZXh0ZXJuIHZvaWQgRnJlZVF1ZXJ5RGVzYyhRdWVyeURlc2MgKnFk ZXNjKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBiL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKaW5kZXggMDY0ZGYwMTgxMWUuLjI0NjA0MTIw YzI3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRl ICJub2Rlcy9sb2Nrb3B0aW9ucy5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNp bmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3Jlc293bmVyLmgiCiAK IAogLyoKQEAgLTIzNSw2ICsyMzYsMzEgQEAgRXhlY0dldEp1bmtBdHRyaWJ1dGUoVHVwbGVUYWJs ZVNsb3QgKnNsb3QsIEF0dHJOdW1iZXIgYXR0bm8sIGJvb2wgKmlzTnVsbCkKICAqLwogZXh0ZXJu IHZvaWQgRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncyk7CiBl eHRlcm4gdm9pZCBzdGFuZGFyZF9FeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBp bnQgZWZsYWdzKTsKKworZXh0ZXJuIEVTdGF0ZSAqRXhlY3V0b3JQcmVwKFBsYW5uZWRTdG10ICpw c3RtdCwKKwkJCQkJCQlQYXJhbUxpc3RJbmZvIHBhcmFtcywKKwkJCQkJCQlSZXNvdXJjZU93bmVy IG93bmVyLAorCQkJCQkJCWludCBlZmxhZ3MpOworCisvKgorICogV2FsayBhIHByZXBfZXN0YXRl cyBsaXN0IGluIHN0ZXAgd2l0aCBhIHBhcmFsbGVsIHN0bXRfbGlzdCBpdGVyYXRpb24uCisgKiBS ZXR1cm5zIHRoZSBuZXh0IEVTdGF0ZSAob3IgTlVMTCkgYW5kIGFkdmFuY2VzICpsYy4KKyAqCisg KiBTYWZlIHdoZW4gcHJlcF9lc3RhdGVzIGlzIE5JTDsganVzdCByZXR1cm5zIE5VTEwgZm9yIGV2 ZXJ5IGNhbGwuCisgKi8KK3N0YXRpYyBpbmxpbmUgRVN0YXRlICoKK25leHRfcHJlcF9lc3RhdGUo TGlzdCAqcHJlcF9lc3RhdGVzLCBMaXN0Q2VsbCAqKmxjKQoreworCUVTdGF0ZSAqcmVzdWx0ID0g TlVMTDsKKworCWlmICgqbGMgIT0gTlVMTCkKKwl7CisJCXJlc3VsdCA9IChFU3RhdGUgKikgbGZp cnN0KCpsYyk7CisJCSpsYyA9IGxuZXh0KHByZXBfZXN0YXRlcywgKmxjKTsKKwl9CisJcmV0dXJu IHJlc3VsdDsKK30KKwogZXh0ZXJuIHZvaWQgRXhlY3V0b3JSdW4oUXVlcnlEZXNjICpxdWVyeURl c2MsCiAJCQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgdWludDY0IGNvdW50KTsKIGV4dGVy biB2b2lkIHN0YW5kYXJkX0V4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaAppbmRleCAwNzE2YzVhOWFlZC4uNDJkNzU2OTNkNDMgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNu b2Rlcy5oCkBAIC03ODQsNyArNzg0LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgRVN0YXRlCiAJTGlzdAkg ICAqZXNfaW5zZXJ0X3BlbmRpbmdfbW9kaWZ5dGFibGVzOwogfSBFU3RhdGU7CiAKLQogLyoKICAq IEV4ZWNSb3dNYXJrIC0KICAqCSAgIHJ1bnRpbWUgcmVwcmVzZW50YXRpb24gb2YgRk9SIFtLRVld IFVQREFURS9TSEFSRSBjbGF1c2VzCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wb3J0 YWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3BvcnRhbC5oCmluZGV4IGE3YmVkYjEyYzE4Li5mNjli NGI5YjQ3OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmgKKysrIGIvc3Jj L2luY2x1ZGUvdXRpbHMvcG9ydGFsLmgKQEAgLTEzNyw2ICsxMzcsNyBAQCB0eXBlZGVmIHN0cnVj dCBQb3J0YWxEYXRhCiAJQ29tbWFuZFRhZwljb21tYW5kVGFnOwkJLyogY29tbWFuZCB0YWcgZm9y IG9yaWdpbmFsIHF1ZXJ5ICovCiAJUXVlcnlDb21wbGV0aW9uIHFjOwkJCS8qIGNvbW1hbmQgY29t cGxldGlvbiBkYXRhIGZvciBleGVjdXRlZCBxdWVyeSAqLwogCUxpc3QJICAgKnN0bXRzOwkJCS8q IGxpc3Qgb2YgUGxhbm5lZFN0bXRzICovCisJTGlzdAkgICAqcHJlcF9lc3RhdGVzOwkvKiBsaXN0 IG9mIEVTdGF0ZXMgd2hlcmUgbmVlZGVkICovCiAJQ2FjaGVkUGxhbiAqY3BsYW47CQkJLyogQ2Fj aGVkUGxhbiwgaWYgc3RtdHMgYXJlIGZyb20gb25lICovCiAKIAlQYXJhbUxpc3RJbmZvIHBvcnRh bFBhcmFtczsgLyogcGFyYW1zIHRvIHBhc3MgdG8gcXVlcnkgKi8KQEAgLTI0MCw2ICsyNDEsNyBA QCBleHRlcm4gdm9pZCBQb3J0YWxEZWZpbmVRdWVyeShQb3J0YWwgcG9ydGFsLAogCQkJCQkJCSAg Y29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQkJCQkgIENvbW1hbmRUYWcgY29tbWFuZFRhZywK IAkJCQkJCQkgIExpc3QgKnN0bXRzLAorCQkJCQkJCSAgTGlzdCAqcHJlcF9lc3RhdGVzLAogCQkJ CQkJCSAgQ2FjaGVkUGxhbiAqY3BsYW4pOwogZXh0ZXJuIFBsYW5uZWRTdG10ICpQb3J0YWxHZXRQ cmltYXJ5U3RtdChQb3J0YWwgcG9ydGFsKTsKIGV4dGVybiB2b2lkIFBvcnRhbENyZWF0ZUhvbGRT dG9yZShQb3J0YWwgcG9ydGFsKTsKLS0gCjIuNDcuMwoK --000000000000559395064d63cb06 Content-Type: application/octet-stream; name="v8-0001-Refactor-partition-pruning-initialization-for-cla.patch" Content-Disposition: attachment; filename="v8-0001-Refactor-partition-pruning-initialization-for-cla.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxpzx0w4 RnJvbSBhNzlhZjYxODgyZjFmZjY5NmQ0NmY2MTJhNWIzYThjZTUwZWU3NWQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMTAgRmViIDIwMjYgMTU6MDg6NTIgKzA5MDAKU3ViamVjdDogW1BBVENIIHY4 IDEvNV0gUmVmYWN0b3IgcGFydGl0aW9uIHBydW5pbmcgaW5pdGlhbGl6YXRpb24gZm9yIGNsYXJp dHkKIGFuZCBtb2R1bGFyaXR5CgpNb3ZlIHRoZSBjcmVhdGlvbiBvZiBQYXJ0aXRpb25QcnVuZVN0 YXRlIHN0cnVjdHVyZXMgb3V0IG9mCkV4ZWNEb0luaXRpYWxQcnVuaW5nKCkgaW50byBhIG5ldyBF eGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZXMoKQpmdW5jdGlvbi4gVGhpcyBzZXBhcmF0ZXMg dGhlIHNldHVwIG9mIHBydW5pbmcgc3RhdGUgZnJvbSB0aGUgZXhlY3V0aW9uCm9mIGluaXRpYWwg cHJ1bmluZyBsb2dpYywgbWFraW5nIHRoZSBjb2RlIGNsZWFyZXIgYW5kIGVhc2llciB0bwptYWlu dGFpbi4KClNpbXBsaWZ5IGhhbmRsaW5nIG9mIHVucHJ1bmVkIHJlbGlkcyBieSBtb3ZpbmcgcmVz cG9uc2liaWxpdHkKZm9yIHJlY29yZGluZyB0aGVtIGluIEVTdGF0ZSBpbnRvIENyZWF0ZVBhcnRp dGlvblBydW5lU3RhdGUoKSwKYXZvaWRpbmcgdGhlIG5lZWQgdG8gcGFzcyBhbGxfbGVhZnBhcnRf cnRpcyBhcyBhbiBvdXQgcGFyYW1ldGVyLgoKQWxzbyBtb3ZlIHRoZSBzZXR0aW5nIG9mIGVjeHRf cGFyYW1fZXhlY192YWxzIGZyb20KRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoKSB0byBJ bml0RXhlY1BhcnRpdGlvblBydW5lQ29udGV4dHMoKSwKdG8gYWxsb3cgdGhlIGZvcm1lciB0byBi ZSBjYWxsZWQgYXQgYSB0aW1lIHdoZW4gdGhlIFBBUkFNX0VYRUMKcGFyYW1ldGVycyBoYXZlIG5v dCB5ZXQgYmVlbiBzZXQgdXAuCgpUaGlzIHJlZmFjdG9yaW5nIGFsbG93cyBjYWxsZXJzIHRvIHJl dXNlIHRoZSBwcnVuaW5nIHNldHVwIGxvZ2ljCndpdGhvdXQgYWx3YXlzIHRyaWdnZXJpbmcgcHJ1 bmluZywgYSBjYXBhYmlsaXR5IHVzZWZ1bCBmb3IgZnV0dXJlIHVzZQpjYXNlcyB0aGF0IG1heSBv bmx5IG5lZWQgbWV0YWRhdGEgaW5pdGlhbGl6YXRpb24uCi0tLQogc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY01haW4uYyAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0 aXRpb24uYyB8IDEwMyArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDc0IGluc2Vy dGlvbnMoKyksIDMxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNNYWluLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCmluZGV4IDU4 Yjg0OTU1YzJiLi5jNThhMmFiZTlhNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY01haW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCkBAIC04NzAs NiArODcwLDcgQEAgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiAJ ICogdG8gZWFjaCBQYXJ0aXRpb25QcnVuZUluZm8gZW50cnksIGFuZCB0aGUgZXNfcGFydF9wcnVu ZV9yZXN1bHRzIGxpc3QgaXMKIAkgKiBwYXJhbGxlbCB0byBlc19wYXJ0X3BydW5lX2luZm9zLgog CSAqLworCUV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlcyhlc3RhdGUpOwogCUV4ZWNEb0lu aXRpYWxQcnVuaW5nKGVzdGF0ZSk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1BhcnRpdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlv bi5jCmluZGV4IGQ5NmQ0Zjk5NDdiLi5mZWVhOWZkZmRlMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNQYXJ0aXRpb24uYwpAQCAtMTg1LDggKzE4NSw3IEBAIHN0YXRpYyBjaGFyICpFeGVjQnVpbGRT bG90UGFydGl0aW9uS2V5RGVzY3JpcHRpb24oUmVsYXRpb24gcmVsLAogc3RhdGljIExpc3QgKmFk anVzdF9wYXJ0aXRpb25fY29sbm9zKExpc3QgKmNvbG5vcywgUmVzdWx0UmVsSW5mbyAqbGVhZl9w YXJ0X3JyaSk7CiBzdGF0aWMgTGlzdCAqYWRqdXN0X3BhcnRpdGlvbl9jb2xub3NfdXNpbmdfbWFw KExpc3QgKmNvbG5vcywgQXR0ck1hcCAqYXR0ck1hcCk7CiBzdGF0aWMgUGFydGl0aW9uUHJ1bmVT dGF0ZSAqQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShFU3RhdGUgKmVzdGF0ZSwKLQkJCQkJCQkJ CQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvLAotCQkJCQkJCQkJCQkJCSAgQml0 bWFwc2V0ICoqYWxsX2xlYWZwYXJ0X3J0aXMpOworCQkJCQkJCQkJCQkJCSAgUGFydGl0aW9uUHJ1 bmVJbmZvICpwcnVuZWluZm8pOwogc3RhdGljIHZvaWQgSW5pdFBhcnRpdGlvblBydW5lQ29udGV4 dChQYXJ0aXRpb25QcnVuZUNvbnRleHQgKmNvbnRleHQsCiAJCQkJCQkJCQkgIExpc3QgKnBydW5p bmdfc3RlcHMsCiAJCQkJCQkJCQkgIFBhcnRpdGlvbkRlc2MgcGFydGRlc2MsCkBAIC0xOTQzLDYg KzE5NDIsOSBAQCBhZGp1c3RfcGFydGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9z LCBBdHRyTWFwICphdHRyTWFwKQogICoKICAqIEZ1bmN0aW9uczoKICAqCisgKiBFeGVjQ3JlYXRl UGFydGl0aW9uUHJ1bmVTdGF0ZXMKKyAqCQlDcmVhdGUgUGFydGl0aW9uUHJ1bmVTdGF0ZSBmb3Ig YWxsIFBhcnRpdGlvblBydW5lSW5mb3MgaW4gdGhlIEVTdGF0ZQorICoKICAqIEV4ZWNEb0luaXRp YWxQcnVuaW5nOgogICoJCVBlcmZvcm0gcnVudGltZSAiaW5pdGlhbCIgcHJ1bmluZywgaWYgbmVj ZXNzYXJ5LCB0byBkZXRlcm1pbmUgdGhlIHNldAogICoJCW9mIGNoaWxkIHN1Ym5vZGVzIHRoYXQg bmVlZCB0byBiZSBpbml0aWFsaXplZCBkdXJpbmcgRXhlY0luaXROb2RlKCkgZm9yCkBAIC0xOTY3 LDYgKzE5NjksMjkgQEAgYWRqdXN0X3BhcnRpdGlvbl9jb2xub3NfdXNpbmdfbWFwKExpc3QgKmNv bG5vcywgQXR0ck1hcCAqYXR0ck1hcCkKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKKy8qCisg KiBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZXMKKyAqCisgKiBDcmVhdGUgYSBQYXJ0aXRp b25QcnVuZVN0YXRlIGZvciBlYWNoIFBhcnRpdGlvblBydW5lSW5mbyBpbiB0aGUgZXN0YXRlLAor ICogYW5kIHNhdmUgdGhlbSBpbiBlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfc3RhdGVzLiBUaGlzIHNl dHVwIGlzIHJlcXVpcmVkCisgKiBiZWZvcmUgYW55IGluaXRpYWwgb3IgcnVudGltZSBwcnVuaW5n IGNhbiBvY2N1ci4KKyAqLwordm9pZAorRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGVzKEVT dGF0ZSAqZXN0YXRlKQoreworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywgZXN0YXRl LT5lc19wYXJ0X3BydW5lX2luZm9zKQorCXsKKwkJUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWlu Zm8gPSBsZmlyc3Rfbm9kZShQYXJ0aXRpb25QcnVuZUluZm8sIGxjKTsKKwkJUGFydGl0aW9uUHJ1 bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsKKworCQkvKiBDcmVhdGUgYW5kIHNhdmUgdGhlIFBhcnRpdGlv blBydW5lU3RhdGUuICovCisJCXBydW5lc3RhdGUgPSBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRl KGVzdGF0ZSwgcHJ1bmVpbmZvKTsKKwkJZXN0YXRlLT5lc19wYXJ0X3BydW5lX3N0YXRlcyA9IGxh cHBlbmQoZXN0YXRlLT5lc19wYXJ0X3BydW5lX3N0YXRlcywKKwkJCQkJCQkJCQkJICAgcHJ1bmVz dGF0ZSk7CisJfQorfQogCiAvKgogICogRXhlY0RvSW5pdGlhbFBydW5pbmcKQEAgLTE5NzQsMTEg KzE5OTksMTEgQEAgYWRqdXN0X3BhcnRpdGlvbl9jb2xub3NfdXNpbmdfbWFwKExpc3QgKmNvbG5v cywgQXR0ck1hcCAqYXR0ck1hcCkKICAqCQlvZiBjaGlsZCBzdWJub2RlcyB0aGF0IG5lZWQgdG8g YmUgaW5pdGlhbGl6ZWQgZHVyaW5nIEV4ZWNJbml0Tm9kZSgpIGZvcgogICoJCXBsYW4gbm9kZXMg dGhhdCBzdXBwb3J0IHBhcnRpdGlvbiBwcnVuaW5nLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gaXRl cmF0ZXMgb3ZlciBlYWNoIFBhcnRpdGlvblBydW5lSW5mbyBlbnRyeSBpbgotICogZXN0YXRlLT5l c19wYXJ0X3BydW5lX2luZm9zLiBGb3IgZWFjaCBlbnRyeSwgaXQgY3JlYXRlcyBhIFBhcnRpdGlv blBydW5lU3RhdGUKLSAqIGFuZCBhZGRzIGl0IHRvIGVzX3BhcnRfcHJ1bmVfc3RhdGVzLiAgRXhl Y0luaXRQYXJ0aXRpb25FeGVjUHJ1bmluZygpIGFjY2Vzc2VzCisgKiBUaGlzIGZ1bmN0aW9uIGl0 ZXJhdGVzIG92ZXIgZWFjaCBQYXJ0aXRpb25QcnVuZVN0YXRlIGluCisgKiBlc3RhdGUtPmVzX3Bh cnRfcHJ1bmVfc3RhdGVzLCB3aGljaCBtdXN0IGhhdmUgYmVlbiBwb3B1bGF0ZWQgZWFybGllciBi eQorICogRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGVzKCkuIEV4ZWNJbml0UGFydGl0aW9u RXhlY1BydW5pbmcoKSBhY2Nlc3NlcwogICogdGhlc2Ugc3RhdGVzIHRocm91Z2ggdGhlaXIgY29y cmVzcG9uZGluZyBpbmRleGVzIGluIGVzX3BhcnRfcHJ1bmVfc3RhdGVzIGFuZAotICogYXNzaWdu IGVhY2ggc3RhdGUgdG8gdGhlIHBhcmVudCBub2RlJ3MgUGxhblN0YXRlLCBmcm9tIHdoZXJlIGl0 IHdpbGwgYmUgdXNlZAorICogYXNzaWducyBlYWNoIHN0YXRlIHRvIHRoZSBwYXJlbnQgbm9kZSdz IFBsYW5TdGF0ZSwgZnJvbSB3aGVyZSBpdCB3aWxsIGJlIHVzZWQKICAqIGZvciAiZXhlYyIgcHJ1 bmluZy4KICAqCiAgKiBJZiBpbml0aWFsIHBydW5pbmcgc3RlcHMgZXhpc3QgZm9yIGEgUGFydGl0 aW9uUHJ1bmVJbmZvIGVudHJ5LCB0aGlzIGZ1bmN0aW9uCkBAIC0xOTk2LDIwICsyMDIxLDEzIEBA IEV4ZWNEb0luaXRpYWxQcnVuaW5nKEVTdGF0ZSAqZXN0YXRlKQogewogCUxpc3RDZWxsICAgKmxj OwogCi0JZm9yZWFjaChsYywgZXN0YXRlLT5lc19wYXJ0X3BydW5lX2luZm9zKQorCUFzc2VydChl c3RhdGUtPmVzX3BhcnRfcHJ1bmVfcmVzdWx0cyA9PSBOVUxMKTsKKwlmb3JlYWNoKGxjLCBlc3Rh dGUtPmVzX3BhcnRfcHJ1bmVfc3RhdGVzKQogCXsKLQkJUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVu ZWluZm8gPSBsZmlyc3Rfbm9kZShQYXJ0aXRpb25QcnVuZUluZm8sIGxjKTsKLQkJUGFydGl0aW9u UHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsKKwkJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0 ZSA9IChQYXJ0aXRpb25QcnVuZVN0YXRlICopIGxmaXJzdChsYyk7CiAJCUJpdG1hcHNldCAgKnZh bGlkc3VicGxhbnMgPSBOVUxMOwotCQlCaXRtYXBzZXQgICphbGxfbGVhZnBhcnRfcnRpcyA9IE5V TEw7CiAJCUJpdG1hcHNldCAgKnZhbGlkc3VicGxhbl9ydGlzID0gTlVMTDsKIAotCQkvKiBDcmVh dGUgYW5kIHNhdmUgdGhlIFBhcnRpdGlvblBydW5lU3RhdGUuICovCi0JCXBydW5lc3RhdGUgPSBD cmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKGVzdGF0ZSwgcHJ1bmVpbmZvLAotCQkJCQkJCQkJCQkg ICAmYWxsX2xlYWZwYXJ0X3J0aXMpOwotCQllc3RhdGUtPmVzX3BhcnRfcHJ1bmVfc3RhdGVzID0g bGFwcGVuZChlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfc3RhdGVzLAotCQkJCQkJCQkJCQkgICBwcnVu ZXN0YXRlKTsKLQogCQkvKgogCQkgKiBQZXJmb3JtIGluaXRpYWwgcHJ1bmluZyBzdGVwcywgaWYg YW55LCBhbmQgc2F2ZSB0aGUgcmVzdWx0CiAJCSAqIGJpdG1hcHNldCBvciBOVUxMIGFzIGRlc2Ny aWJlZCBpbiB0aGUgaGVhZGVyIGNvbW1lbnQuCkBAIC0yMDE3LDggKzIwMzUsNiBAQCBFeGVjRG9J bml0aWFsUHJ1bmluZyhFU3RhdGUgKmVzdGF0ZSkKIAkJaWYgKHBydW5lc3RhdGUtPmRvX2luaXRp YWxfcHJ1bmUpCiAJCQl2YWxpZHN1YnBsYW5zID0gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKHBy dW5lc3RhdGUsIHRydWUsCiAJCQkJCQkJCQkJCQkJICZ2YWxpZHN1YnBsYW5fcnRpcyk7Ci0JCWVs c2UKLQkJCXZhbGlkc3VicGxhbl9ydGlzID0gYWxsX2xlYWZwYXJ0X3J0aXM7CiAKIAkJZXN0YXRl LT5lc191bnBydW5lZF9yZWxpZHMgPSBibXNfYWRkX21lbWJlcnMoZXN0YXRlLT5lc191bnBydW5l ZF9yZWxpZHMsCiAJCQkJCQkJCQkJCQkJIHZhbGlkc3VicGxhbl9ydGlzKTsKQEAgLTIxMzYsMTQg KzIxNTIsMTIgQEAgRXhlY0luaXRQYXJ0aXRpb25FeGVjUHJ1bmluZyhQbGFuU3RhdGUgKnBsYW5z dGF0ZSwKICAqIHBhcmVudCBwbGFuIG5vZGUncyBQbGFuU3RhdGUuCiAgKgogICogSWYgaW5pdGlh bCBwcnVuaW5nIHN0ZXBzIGFyZSB0byBiZSBza2lwcGVkIChlLmcuLCBkdXJpbmcgRVhQTEFJTgot ICogKEdFTkVSSUNfUExBTikpLCAqYWxsX2xlYWZwYXJ0X3J0aXMgd2lsbCBiZSBwb3B1bGF0ZWQg d2l0aCB0aGUgUlQgaW5kZXhlcyBvZgotICogYWxsIGxlYWYgcGFydGl0aW9ucyB3aG9zZSBzY2Fu bmluZyBzdWJub2RlIGlzIGluY2x1ZGVkIGluIHRoZSBwYXJlbnQgcGxhbgotICogbm9kZSdzIGxp c3Qgb2YgY2hpbGQgcGxhbnMuIFRoZSBjYWxsZXIgbXVzdCBhZGQgdGhlc2UgUlQgaW5kZXhlcyB0 bwotICogZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMuCisgKiAoR0VORVJJQ19QTEFOKSksIHRo ZSBSVCBpbmRleGVzIG9mIGFsbCBsZWFmIHBhcnRpdGlvbnMgd2hvc2Ugc2Nhbm5pbmcKKyAqIHN1 Ym5vZGUgaXMgaW5jbHVkZWQgaW4gdGhlIHBhcmVudCBwbGFuIG5vZGUncyBsaXN0IG9mIGNoaWxk IHBsYW5zIGFyZQorICogYWRkZWQgdG8gZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMuCiAgKi8K IHN0YXRpYyBQYXJ0aXRpb25QcnVuZVN0YXRlICoKLUNyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUo RVN0YXRlICplc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvLAotCQkJCQkJICBC aXRtYXBzZXQgKiphbGxfbGVhZnBhcnRfcnRpcykKK0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUo RVN0YXRlICplc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQogewogCVBhcnRp dGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CiAJaW50CQkJbl9wYXJ0X2hpZXJhcmNoaWVzOwpA QCAtMjM3Nyw4ICsyMzkxLDggQEAgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShFU3RhdGUgKmVz dGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCiAJCQkJCQkJCQkJCQkJICAgcGlu Zm8tPmV4ZWNwYXJhbWlkcyk7CiAKIAkJCS8qCi0JCQkgKiBSZXR1cm4gYWxsIGxlYWYgcGFydGl0 aW9uIGluZGV4ZXMgaWYgd2UncmUgc2tpcHBpbmcgcHJ1bmluZyBpbgotCQkJICogdGhlIEVYUExB SU4gKEdFTkVSSUNfUExBTikgY2FzZS4KKwkJCSAqIEFkZCBhbGwgbGVhZiBwYXJ0aXRpb24gaW5k ZXhlcyB0byBlc191bnBydW5lZF9yZWxpZHMgaWYgd2UncmUKKwkJCSAqIHNraXBwaW5nIHBydW5p bmcgaW4gdGhlIEVYUExBSU4gKEdFTkVSSUNfUExBTikgY2FzZS4KIAkJCSAqLwogCQkJaWYgKHBp bmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHMgJiYgIXBydW5lc3RhdGUtPmRvX2luaXRpYWxfcHJ1 bmUpCiAJCQl7CkBAIC0yMzkwLDEwICsyNDA0LDI5IEBAIENyZWF0ZVBhcnRpdGlvblBydW5lU3Rh dGUoRVN0YXRlICplc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvLAogCQkJCQlJ bmRleAkJcnRpbmRleCA9IHBwcnVuZS0+bGVhZnBhcnRfcnRpX21hcFtwYXJ0X2luZGV4XTsKIAog CQkJCQlpZiAocnRpbmRleCkKLQkJCQkJCSphbGxfbGVhZnBhcnRfcnRpcyA9IGJtc19hZGRfbWVt YmVyKCphbGxfbGVhZnBhcnRfcnRpcywKLQkJCQkJCQkJCQkJCQkJCXJ0aW5kZXgpOworCQkJCQkJ ZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMgPQorCQkJCQkJCWJtc19hZGRfbWVtYmVyKGVzdGF0 ZS0+ZXNfdW5wcnVuZWRfcmVsaWRzLCBydGluZGV4KTsKIAkJCQl9CiAJCQl9CisJCQllbHNlIGlm IChwaW5mby0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBzID09IE5JTCkKKwkJCXsKKwkJCQkvKgorCQkJ CSAqIEFsbCBwYXJ0aXRpb25zIGJldHRlciBiZSBwcmVzZW50IGluIGVzX3VucHJ1bmVkX3JlbGlk cyB3aGVuCisJCQkJICogbm9uZSBhcmUgaW5pdGlhbGx5IHBydW5hYmxlLgorCQkJCSAqLworI2lm ZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkJCQlpbnQJCQlwYXJ0X2luZGV4ID0gLTE7CisKKwkJ CQl3aGlsZSAoKHBhcnRfaW5kZXggPSBibXNfbmV4dF9tZW1iZXIocHBydW5lLT5wcmVzZW50X3Bh cnRzLAorCQkJCQkJCQkJCQkJCSBwYXJ0X2luZGV4KSkgPj0gMCkKKwkJCQl7CisJCQkJCUluZGV4 CQlydGluZGV4ID0gcHBydW5lLT5sZWFmcGFydF9ydGlfbWFwW3BhcnRfaW5kZXhdOworCisJCQkJ CWlmIChydGluZGV4KQorCQkJCQkJQXNzZXJ0KGJtc19pc19tZW1iZXIocnRpbmRleCwgZXN0YXRl LT5lc191bnBydW5lZF9yZWxpZHMpKTsKKwkJCQl9CisjZW5kaWYKKwkJCX0KIAogCQkJaisrOwog CQl9CkBAIC0yNDkwLDkgKzI1MjMsMTAgQEAgSW5pdFBhcnRpdGlvblBydW5lQ29udGV4dChQYXJ0 aXRpb25QcnVuZUNvbnRleHQgKmNvbnRleHQsCiAgKgkJSW5pdGlhbGl6ZSBleGVjIHBydW5pbmcg Y29udGV4dHMgZGVmZXJyZWQgYnkgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZSgpCiAgKgogICog VGhpcyBmdW5jdGlvbiBmaW5hbGl6ZXMgZXhlYyBwcnVuaW5nIHNldHVwIGZvciBhIFBhcnRpdGlv blBydW5lU3RhdGUgYnkKLSAqIGluaXRpYWxpemluZyBjb250ZXh0cyBmb3IgcHJ1bmluZyBzdGVw cyB0aGF0IHJlcXVpcmUgdGhlIHBhcmVudCBwbGFuJ3MKLSAqIFBsYW5TdGF0ZS4gSXQgaXRlcmF0 ZXMgb3ZlciBQYXJ0aXRpb25QcnVuaW5nRGF0YSBlbnRyaWVzIGFuZCBzZXRzIHVwIHRoZQotICog bmVjZXNzYXJ5IGV4ZWN1dGlvbiBjb250ZXh0cyBmb3IgcHJ1bmluZyBkdXJpbmcgcXVlcnkgZXhl Y3V0aW9uLgorICogaW5pdGlhbGl6aW5nIGNvbnRleHRzIGZvciBwcnVuaW5nIHN0ZXBzIHRoYXQg cmVxdWlyZSBQQVJBTV9FWEVDIHBhcmFtZXRlcnMKKyAqIGFuZCB0aGUgcGFyZW50IHBsYW4ncyBQ bGFuU3RhdGUuIEl0IGl0ZXJhdGVzIG92ZXIgUGFydGl0aW9uUHJ1bmluZ0RhdGEKKyAqIGVudHJp ZXMgYW5kIHNldHMgdXAgdGhlIG5lY2Vzc2FyeSBleGVjdXRpb24gY29udGV4dHMgZm9yIHBydW5p bmcgZHVyaW5nCisgKiBxdWVyeSBleGVjdXRpb24uCiAgKgogICogQWxzbyBmaXggdGhlIG1hcHBp bmcgb2YgcGFydGl0aW9uIGluZGV4ZXMgdG8gc3VicGxhbiBpbmRleGVzIGNvbnRhaW5lZCBpbgog ICogcHJ1bmVzdGF0ZSBieSBjb25zaWRlcmluZyB0aGUgbmV3IGxpc3Qgb2Ygc3VicGxhbnMgdGhh dCBzdXJ2aXZlZCBpbml0aWFsCkBAIC0yNTIwLDkgKzI1NTQsMTYgQEAgSW5pdEV4ZWNQYXJ0aXRp b25QcnVuZUNvbnRleHRzKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUsCiAJYm9vbAkJ Zml4X3N1YnBsYW5fbWFwID0gZmFsc2U7CiAKIAlBc3NlcnQocHJ1bmVzdGF0ZS0+ZG9fZXhlY19w cnVuZSk7CisJQXNzZXJ0KHBydW5lc3RhdGUtPmVjb250ZXh0KTsKIAlBc3NlcnQocGFyZW50X3Bs YW4gIT0gTlVMTCk7CiAJZXN0YXRlID0gcGFyZW50X3BsYW4tPnN0YXRlOwogCisJLyoKKwkgKiBU aGVzZSBtaWdodCBub3QgYmUgYXZhaWxhYmxlIHdoZW4gRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5l U3RhdGUoKSBpcworCSAqIGNhbGxlZC4KKwkgKi8KKwlwcnVuZXN0YXRlLT5lY29udGV4dC0+ZWN4 dF9wYXJhbV9leGVjX3ZhbHMgPSBlc3RhdGUtPmVzX3BhcmFtX2V4ZWNfdmFsczsKKwogCS8qCiAJ ICogTm8gbmVlZCB0byBmaXggc3VicGxhbnMgbWFwcyBpZiBpbml0aWFsIHBydW5pbmcgZGlkbid0 IGVsaW1pbmF0ZSBhbnkKIAkgKiBzdWJwbGFucy4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRp b24uaAppbmRleCA4MjA2M2VjMmExNi4uNGM5NjgwOGMzNzYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjUGFydGl0aW9uLmgKQEAgLTEzMCw2ICsxMzAsNyBAQCB0eXBlZGVmIHN0cnVjdCBQYXJ0aXRp b25QcnVuZVN0YXRlCiAJUGFydGl0aW9uUHJ1bmluZ0RhdGEgKnBhcnRwcnVuZWRhdGFbRkxFWElC TEVfQVJSQVlfTUVNQkVSXTsKIH0gUGFydGl0aW9uUHJ1bmVTdGF0ZTsKIAorZXh0ZXJuIHZvaWQg RXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGVzKEVTdGF0ZSAqZXN0YXRlKTsKIGV4dGVybiB2 b2lkIEV4ZWNEb0luaXRpYWxQcnVuaW5nKEVTdGF0ZSAqZXN0YXRlKTsKIGV4dGVybiBQYXJ0aXRp b25QcnVuZVN0YXRlICpFeGVjSW5pdFBhcnRpdGlvbkV4ZWNQcnVuaW5nKFBsYW5TdGF0ZSAqcGxh bnN0YXRlLAogCQkJCQkJCQkJCQkJCQkgaW50IG5fdG90YWxfc3VicGxhbnMsCi0tIAoyLjQ3LjMK Cg== --000000000000559395064d63cb06--