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.94.2) (envelope-from ) id 1rY2Ru-00E09K-Cd for pgsql-hackers@arkaria.postgresql.org; Thu, 08 Feb 2024 11:20:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rY2Rt-00HAmk-Kg for pgsql-hackers@arkaria.postgresql.org; Thu, 08 Feb 2024 11:20:09 +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.94.2) (envelope-from ) id 1rY2Rs-00HAmc-Lf for pgsql-hackers@lists.postgresql.org; Thu, 08 Feb 2024 11:20:09 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::37]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rY2Rj-005hfz-Ik for pgsql-hackers@postgresql.org; Thu, 08 Feb 2024 11:20:07 +0000 Received: from [192.168.1.115] (dsl-hkibng22-54f8db-125.dhcp.inet.fi [84.248.219.125]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4TVvf23CHfz49Q05; Thu, 8 Feb 2024 13:19:54 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1707391194; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=fH+9TVcoEyCURpHYXpuXNhdpM3oKAgT9l4RBzl+4hk0=; b=Mrv4oQh4WsoMGQkSZfoCnV7BE+sOJHZBTKCu/6I3/BD7XPfWCVCjqn7vUP984KksozMoPQ rho2eP3luES8FgpmA9zFKXi0GT2ubis8iQPNYVAfe/fMVicqV/wCnrqHW5zIcXkGBhclmr hJYddGc6gAokozqPgz+2CD4HkO5TtvBQRmtHvqBgxxxNIV7GhpXQoo+h5yEbtRTUcvypUo LJi40U5f0GwGA6Y+rNmNcVsLS+GzvkfV9DU3pWyWIBgMFhrM8+tzHIES+NgzO9jva0j3pt 9qbZRlyrWLB7IyiSjDHaWc+3DWEe06P2MMU5TAmJ/aao02OuqTuTCBD5DoDV7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1707391194; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=fH+9TVcoEyCURpHYXpuXNhdpM3oKAgT9l4RBzl+4hk0=; b=E9z1fH+zmlBFSR5mNUQKOa190ApXjea/zDdyIn9zzl44YvH/4O1ayUR1T1Gz4uYxbREKib 4RBNu7eKA3Nr0FjrCHqWdRXv2+B5GMKOm/gzir7sXk0NC1OI93fbn/s5ajv4ba+siHUoI6 cUgw7EXQUbwzlkbQ/cWVExRPL3GgE93iKy2JIfo2LUbkTz3ifNhex+CccUvJncvQndxITr VSa8X5+nU20tIiqClkjEJGKLKpIN4qMCM5dv7ULalCmwFMCT/J060Hgo7NjN/BvxyJYHZR U4k18/shBKFDvMoyCezS6Ct+FG795AbeDeV/OwzSnXQBGRMbK3mQhKJYkKbrSA== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1707391194; a=rsa-sha256; cv=none; b=pxZjYJAf7TF6VvBvwbM3euxrCdPYXWyzf/WSBSwq/14rRI8PyVwS6tcU1eSxrEwMNi/oM0 0htIQSuxBhCMkYF6tNXn//u2a5zL3PJ6pd9XxJwiDEKu3fTmUiEj4Q1CF570kuuOrXPQWr wYDuV4Ri/tnS80JmtzsuvYNpKSzoEjiuuwZs+os8kqv/s7A7nljDcWpOrejXF8EjCa5+G/ 0ho3LVa/Kif9RSGR4wXWjN20AxJYkYhbQUIBjb+8Z7Z28K5J2zZz0Vs83Vq1vbeNiVNETd NKxNPzYtuAr5WGER8A+2H9V2Q1I4/PEmqGnz0DOpqaTWPhY/Bk35HL6sRoMa4w== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------D7q2JUSUBACJ11MlrkrBV8fY" Message-ID: <2136fb4f-1630-43e9-9cf6-b32772b4b0a0@iki.fi> Date: Thu, 8 Feb 2024 13:19:53 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Refactoring backend fork+exec code Content-Language: en-US To: Andres Freund Cc: reid.thompson@crunchydata.com, Tristan Partin , pgsql-hackers , Thomas Munro References: <20231130202648.7k6agmuizdilufnv@awork3.anarazel.de> <59527c9b-c3f7-4d0c-a3f1-00d0ed5cc186@iki.fi> <20240122210740.7vq5fd4woixpwx3f@awork3.anarazel.de> <8171f1aa-496f-46a6-afc3-c46fe7a9b407@iki.fi> <20240123195009.44wtutga24p5sh3s@awork3.anarazel.de> <08eff756-beeb-4a11-9eb5-d45b6af38998@iki.fi> <5997ff317a5827496537580078bcd19f4441f8d2.camel@crunchydata.com> <606a62d6-321c-4967-92c1-2d4e20a2c136@iki.fi> <20240207182521.wyt5dmd75l4v27zk@awork3.anarazel.de> From: Heikki Linnakangas In-Reply-To: <20240207182521.wyt5dmd75l4v27zk@awork3.anarazel.de> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------D7q2JUSUBACJ11MlrkrBV8fY Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 07/02/2024 20:25, Andres Freund wrote: > On 2024-01-30 02:08:36 +0200, Heikki Linnakangas wrote: >> From 54f22231bb2540fc5957c14005956161e6fc9dac Mon Sep 17 00:00:00 2001 >> From: Heikki Linnakangas >> Date: Wed, 24 Jan 2024 23:15:55 +0200 >> Subject: [PATCH v8 1/5] Remove superfluous 'pgprocno' field from PGPROC >> >> It was always just the index of the PGPROC entry from the beginning of >> the proc array. Introduce a macro to compute it from the pointer >> instead. > > Hm. The pointer math here is bit more expensive than in some other cases, as > the struct is fairly large and sizeof(PGPROC) isn't a power of two. Adding > more math into loops like in TransactionGroupUpdateXidStatus() might end up > showing up. I added a MyProcNumber global variable that is set to GetNumberFromPGProc(MyProc). I'm not really concerned about the extra math, but with MyProcNumber it should definitely not be an issue. The few GetNumberFromPGProc() invocations that remain are in less performance-critical paths. (In later patch, I switch backend ids to 0-based indexing, which replaces MyProcNumber references with MyBackendId) > Is this really related to the rest of the series? It's not strictly necessary, but it felt prudent to remove it now, since I'm removing the backendID field too. >> You can now convert a backend ID into an index into the PGPROC array >> simply by subtracting 1. We still use 0-based "pgprocnos" in various >> places, for indexes into the PGPROC array, but the only difference now >> is that backend IDs start at 1 while pgprocnos start at 0. > > Why aren't we using 0-based indexing for both? InvalidBackendId is -1, so > there'd not be a conflict, right? Correct. I was being conservative and didn't dare to change the old convention. The backend ids are visible in a few places like "pg_temp_0" schema names, and pg_stat_get_*() functions. One alternative would be to reserve and waste allProcs[0]. Then pgprocno and backend ID could both be direct indexes to the array, but 0 would not be used. If we switch to 0-based indexing, it begs the question: why don't we merge the concepts of "pgprocno" and "BackendId" completely and call it the same thing everywhere? It probably would be best in the long run. It feels like a lot of churn though. Anyway, I switched to 0-based indexing in the attached new version, to see what it looks like. >> @@ -457,7 +442,7 @@ MarkAsPreparingGuts(GlobalTransaction gxact, TransactionId xid, const char *gid, >> Assert(LWLockHeldByMeInMode(TwoPhaseStateLock, LW_EXCLUSIVE)); >> >> Assert(gxact != NULL); >> - proc = &ProcGlobal->allProcs[gxact->pgprocno]; >> + proc = GetPGProcByNumber(gxact->pgprocno); >> >> /* Initialize the PGPROC entry */ >> MemSet(proc, 0, sizeof(PGPROC)); > > This set of changes is independent of this commit, isn't it? Yes. It's just for symmetry, now that we use GetNumberFromPGProc() to get the pgprocno. >> diff --git a/src/backend/postmaster/auxprocess.c b/src/backend/postmaster/auxprocess.c >> index ab86e802f21..39171fea06b 100644 >> --- a/src/backend/postmaster/auxprocess.c >> +++ b/src/backend/postmaster/auxprocess.c >> @@ -107,17 +107,7 @@ AuxiliaryProcessMain(AuxProcType auxtype) >> >> BaseInit(); >> >> - /* >> - * Assign the ProcSignalSlot for an auxiliary process. Since it doesn't >> - * have a BackendId, the slot is statically allocated based on the >> - * auxiliary process type (MyAuxProcType). Backends use slots indexed in >> - * the range from 1 to MaxBackends (inclusive), so we use MaxBackends + >> - * AuxProcType + 1 as the index of the slot for an auxiliary process. >> - * >> - * This will need rethinking if we ever want more than one of a particular >> - * auxiliary process type. >> - */ >> - ProcSignalInit(MaxBackends + MyAuxProcType + 1); >> + ProcSignalInit(); > > Now that we don't need the offset here, we could move ProcSignalInit() into > BsaeInit() I think? Hmm, doesn't feel right to me. BaseInit() is mostly concerned with setting up backend-private structures, and it's also called for a standalone backend. I feel the process initialization codepaths could use some cleanup in general. Not sure what exactly. >> +/* >> + * BackendIdGetProc -- get a backend's PGPROC given its backend ID >> + * >> + * The result may be out of date arbitrarily quickly, so the caller >> + * must be careful about how this information is used. NULL is >> + * returned if the backend is not active. >> + */ >> +PGPROC * >> +BackendIdGetProc(int backendID) >> +{ >> + PGPROC *result; >> + >> + if (backendID < 1 || backendID > ProcGlobal->allProcCount) >> + return NULL; > > Hm, doesn't calling BackendIdGetProc() with these values a bug? That's not > about being out of date or such. Perhaps. I just followed the example of the old implementation, which also returns NULL on bogus inputs. >> +/* >> + * BackendIdGetTransactionIds -- get a backend's transaction status >> + * >> + * Get the xid, xmin, nsubxid and overflow status of the backend. The >> + * result may be out of date arbitrarily quickly, so the caller must be >> + * careful about how this information is used. >> + */ >> +void >> +BackendIdGetTransactionIds(int backendID, TransactionId *xid, >> + TransactionId *xmin, int *nsubxid, bool *overflowed) >> +{ >> + PGPROC *proc; >> + >> + *xid = InvalidTransactionId; >> + *xmin = InvalidTransactionId; >> + *nsubxid = 0; >> + *overflowed = false; >> + >> + if (backendID < 1 || backendID > ProcGlobal->allProcCount) >> + return; >> + proc = GetPGProcByBackendId(backendID); >> + >> + /* Need to lock out additions/removals of backends */ >> + LWLockAcquire(ProcArrayLock, LW_SHARED); >> + >> + if (proc->pid != 0) >> + { >> + *xid = proc->xid; >> + *xmin = proc->xmin; >> + *nsubxid = proc->subxidStatus.count; >> + *overflowed = proc->subxidStatus.overflowed; >> + } >> + >> + LWLockRelease(ProcArrayLock); >> +} > > Hm, I'm not sure about the locking here. For one, previously we weren't > holding ProcArrayLock. For another, holding ProcArrayLock guarantees that the > backend doesn't end its transaction, but it can still assign xids etc. And, > for that matter, the backendid could have been recycled between the caller > acquiring the backendId and calling BackendIdGetTransactionIds(). Yeah, the returned values could be out-of-date and even inconsistent with each other. I just faithfully copied the old implementation. Perhaps this should just skip the ProcArrayLock altogether. >> --- a/src/backend/utils/error/elog.c >> +++ b/src/backend/utils/error/elog.c >> @@ -3074,18 +3074,18 @@ log_status_format(StringInfo buf, const char *format, ErrorData *edata) >> break; >> case 'v': >> /* keep VXID format in sync with lockfuncs.c */ >> - if (MyProc != NULL && MyProc->backendId != InvalidBackendId) >> + if (MyProc != NULL) > > Doesn't this mean we'll include a vxid in more cases now, particularly > including aux processes? That might be ok, but I also suspect that it'll never > have meaningful values... Fixed. (I thought I changed that back already in the last patch version, but apparently I only did it in jsonlog.c) >> From 94fd46c9ef30ba5e8ac1a8873fce577a4be425f4 Mon Sep 17 00:00:00 2001 >> From: Heikki Linnakangas >> Date: Mon, 29 Jan 2024 22:57:49 +0200 >> Subject: [PATCH v8 3/5] Replace 'lastBackend' with an array of in-use slots >> >> Now that the procState array is indexed by pgprocno, the 'lastBackend' >> optimization is useless, because aux processes are assigned PGPROC >> slots and hence have numbers higher than max_connection. So >> 'lastBackend' was always set to almost the end of the array. >> >> To replace that optimization, mantain a dense array of in-use >> indexes. This's redundant with ProgGlobal->procarray, but I was afraid >> of adding any more contention to ProcArrayLock, and this keeps the >> code isolated to sinvaladt.c too. > > I think it'd be good to include that explanation and justification in the code > as well. Added a comment. Attached is a new version of these BackendId changes. I kept it as three separate patches to highlight the changes from switching to 0-based indexing, but I think they should be squashed together before pushing. I think the last remaining question here is about the 0- vs 1-based indexing of BackendIds. Is it a good idea to switch to 0-based indexing? And if we do it, should we reserve PGPROC 0. I'm on the fence on this one. And if we switch to 0-based indexing, should we do a more comprehensive search & replace of "pgprocno" to "backendId", or something like that. My vote is no, the code churn doesn't feel worth it. And it can also be done separately later if we want to. -- Heikki Linnakangas Neon (https://neon.tech) --------------D7q2JUSUBACJ11MlrkrBV8fY Content-Type: text/x-patch; charset=UTF-8; name="v10-0001-Remove-superfluous-pgprocno-field-from-PGPROC.patch" Content-Disposition: attachment; filename*0="v10-0001-Remove-superfluous-pgprocno-field-from-PGPROC.patch" Content-Transfer-Encoding: base64 RnJvbSAyZjA2NDkxNTFlMjhlOWYyZmRkNTcyZjdjNGUzMjk5OTFiZGMyNTcwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgOCBGZWIgMjAyNCAxMjo1NzozOSArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjEwIDEvM10gUmVtb3ZlIHN1cGVyZmx1b3VzICdwZ3Byb2Nubycg ZmllbGQgZnJvbSBQR1BST0MKCkl0IHdhcyBhbHdheXMganVzdCB0aGUgaW5kZXggb2YgdGhl IFBHUFJPQyBlbnRyeSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YKdGhlIHByb2MgYXJyYXkuIElu dHJvZHVjZSBhIG1hY3JvIHRvIGNvbXB1dGUgaXQgZnJvbSB0aGUgcG9pbnRlcgppbnN0ZWFk LgoKUmV2aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cu cG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC84MTcxZjFhYS00OTZmLTQ2YTYtYWZjMy1jNDZm ZTdhOWI0MDclNDBpa2kuZmkKLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9n LmMgICAgICAgICAgICAgfCAgNSArKystLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v dHdvcGhhc2UuYyAgICAgICAgIHwgMTEgKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2cuYyAgICAgICAgICAgICB8ICAyICstCiBzcmMvYmFja2VuZC9wb3N0 bWFzdGVyL2Jnd3JpdGVyLmMgICAgICAgICAgICAgfCAgMiArLQogc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9wZ2FyY2guYyAgICAgICAgICAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jICAgICAgICB8ICAyICstCiBzcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgICAgICAgfCAgNiArKystLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jICAgICAgICAgICB8IDE0ICsrKysrKysrLS0t LS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvY29uZGl0aW9uX3ZhcmlhYmxlLmMgfCAx MiArKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sd2xvY2suYyAgICAg ICAgICAgICB8ICA2ICsrKy0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0 ZS5jICAgICAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMg ICAgICAgICAgICAgICB8ICA3ICsrKysrKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5o ICAgICAgICAgICAgICAgICAgICB8ICAyICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2Mu aCAgICAgICAgICAgICAgICAgICAgfCAgNyArKy0tLS0tCiAxNCBmaWxlcyBjaGFuZ2VkLCA0 MiBpbnNlcnRpb25zKCspLCAzOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS9jbG9nLmMKaW5kZXggMDZmYzI5ODliYWIuLjk3Zjc0MzRkYTM0IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vY2xvZy5jCkBAIC00MjUsNiArNDI1LDcgQEAgVHJhbnNhY3Rpb25Hcm91 cFVwZGF0ZVhpZFN0YXR1cyhUcmFuc2FjdGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0YXR1cywK IHsKIAl2b2xhdGlsZSBQUk9DX0hEUiAqcHJvY2dsb2JhbCA9IFByb2NHbG9iYWw7CiAJUEdQ Uk9DCSAgICpwcm9jID0gTXlQcm9jOworCWludAkJCXBncHJvY25vID0gTXlQcm9jTnVtYmVy OwogCXVpbnQzMgkJbmV4dGlkeDsKIAl1aW50MzIJCXdha2VpZHg7CiAKQEAgLTQ1OCw3ICs0 NTksNyBAQCBUcmFuc2FjdGlvbkdyb3VwVXBkYXRlWGlkU3RhdHVzKFRyYW5zYWN0aW9uSWQg eGlkLCBYaWRTdGF0dXMgc3RhdHVzLAogCQkgKiBsZXNzIGVmZmljaWVudGx5LgogCQkgKi8K IAkJaWYgKG5leHRpZHggIT0gSU5WQUxJRF9QR1BST0NOTyAmJgotCQkJUHJvY0dsb2JhbC0+ YWxsUHJvY3NbbmV4dGlkeF0uY2xvZ0dyb3VwTWVtYmVyUGFnZSAhPSBwcm9jLT5jbG9nR3Jv dXBNZW1iZXJQYWdlKQorCQkJR2V0UEdQcm9jQnlOdW1iZXIobmV4dGlkeCktPmNsb2dHcm91 cE1lbWJlclBhZ2UgIT0gcHJvYy0+Y2xvZ0dyb3VwTWVtYmVyUGFnZSkKIAkJewogCQkJLyoK IAkJCSAqIEVuc3VyZSB0aGF0IHRoaXMgcHJvYyBpcyBub3QgYSBtZW1iZXIgb2YgYW55IGNs b2cgZ3JvdXAgdGhhdApAQCAtNDczLDcgKzQ3NCw3IEBAIFRyYW5zYWN0aW9uR3JvdXBVcGRh dGVYaWRTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMsCiAKIAkJ aWYgKHBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3UzMigmcHJvY2dsb2JhbC0+Y2xvZ0dy b3VwRmlyc3QsCiAJCQkJCQkJCQkJICAgJm5leHRpZHgsCi0JCQkJCQkJCQkJICAgKHVpbnQz MikgcHJvYy0+cGdwcm9jbm8pKQorCQkJCQkJCQkJCSAgICh1aW50MzIpIHBncHJvY25vKSkK IAkJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0vdHdvcGhhc2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMK aW5kZXggODQyNjQ1OGY3ZjUuLjIzNGM4ZDA4ZWJjIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3R3b3BoYXNlLmMKQEAgLTI4NCw3ICsyODQsNyBAQCBUd29QaGFzZVNobWVtSW5p dCh2b2lkKQogCQkJVHdvUGhhc2VTdGF0ZS0+ZnJlZUdYYWN0cyA9ICZneGFjdHNbaV07CiAK IAkJCS8qIGFzc29jaWF0ZSBpdCB3aXRoIGEgUEdQUk9DIGFzc2lnbmVkIGJ5IEluaXRQcm9j R2xvYmFsICovCi0JCQlneGFjdHNbaV0ucGdwcm9jbm8gPSBQcmVwYXJlZFhhY3RQcm9jc1tp XS5wZ3Byb2NubzsKKwkJCWd4YWN0c1tpXS5wZ3Byb2NubyA9IEdldE51bWJlckZyb21QR1By b2MoJlByZXBhcmVkWGFjdFByb2NzW2ldKTsKIAogCQkJLyoKIAkJCSAqIEFzc2lnbiBhIHVu aXF1ZSBJRCBmb3IgZWFjaCBkdW1teSBwcm9jLCBzbyB0aGF0IHRoZSByYW5nZSBvZgpAQCAt NDYxLDcgKzQ2MSw2IEBAIE1hcmtBc1ByZXBhcmluZ0d1dHMoR2xvYmFsVHJhbnNhY3Rpb24g Z3hhY3QsIFRyYW5zYWN0aW9uSWQgeGlkLCBjb25zdCBjaGFyICpnaWQsCiAKIAkvKiBJbml0 aWFsaXplIHRoZSBQR1BST0MgZW50cnkgKi8KIAlNZW1TZXQocHJvYywgMCwgc2l6ZW9mKFBH UFJPQykpOwotCXByb2MtPnBncHJvY25vID0gZ3hhY3QtPnBncHJvY25vOwogCWRsaXN0X25v ZGVfaW5pdCgmcHJvYy0+bGlua3MpOwogCXByb2MtPndhaXRTdGF0dXMgPSBQUk9DX1dBSVRf U1RBVFVTX09LOwogCWlmIChMb2NhbFRyYW5zYWN0aW9uSWRJc1ZhbGlkKE15UHJvYy0+bHhp ZCkpCkBAIC03ODAsNyArNzc5LDcgQEAgcGdfcHJlcGFyZWRfeGFjdChQR19GVU5DVElPTl9B UkdTKQogCXdoaWxlIChzdGF0dXMtPmFycmF5ICE9IE5VTEwgJiYgc3RhdHVzLT5jdXJySWR4 IDwgc3RhdHVzLT5uZ3hhY3RzKQogCXsKIAkJR2xvYmFsVHJhbnNhY3Rpb24gZ3hhY3QgPSAm c3RhdHVzLT5hcnJheVtzdGF0dXMtPmN1cnJJZHgrK107Ci0JCVBHUFJPQwkgICAqcHJvYyA9 ICZQcm9jR2xvYmFsLT5hbGxQcm9jc1tneGFjdC0+cGdwcm9jbm9dOworCQlQR1BST0MJICAg KnByb2MgPSBHZXRQR1Byb2NCeU51bWJlcihneGFjdC0+cGdwcm9jbm8pOwogCQlEYXR1bQkJ dmFsdWVzWzVdID0gezB9OwogCQlib29sCQludWxsc1s1XSA9IHswfTsKIAkJSGVhcFR1cGxl CXR1cGxlOwpAQCAtOTM1LDcgKzkzNCw3IEBAIFR3b1BoYXNlR2V0RHVtbXlQcm9jKFRyYW5z YWN0aW9uSWQgeGlkLCBib29sIGxvY2tfaGVsZCkKIHsKIAlHbG9iYWxUcmFuc2FjdGlvbiBn eGFjdCA9IFR3b1BoYXNlR2V0R1hhY3QoeGlkLCBsb2NrX2hlbGQpOwogCi0JcmV0dXJuICZQ cm9jR2xvYmFsLT5hbGxQcm9jc1tneGFjdC0+cGdwcm9jbm9dOworCXJldHVybiBHZXRQR1By b2NCeU51bWJlcihneGFjdC0+cGdwcm9jbm8pOwogfQogCiAvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwpAQCAtMTA4MCw3ICsxMDc5LDcgQEAgc2F2ZV9zdGF0ZV9kYXRhKGNvbnN0IHZvaWQgKmRh dGEsIHVpbnQzMiBsZW4pCiB2b2lkCiBTdGFydFByZXBhcmUoR2xvYmFsVHJhbnNhY3Rpb24g Z3hhY3QpCiB7Ci0JUEdQUk9DCSAgICpwcm9jID0gJlByb2NHbG9iYWwtPmFsbFByb2NzW2d4 YWN0LT5wZ3Byb2Nub107CisJUEdQUk9DCSAgICpwcm9jID0gR2V0UEdQcm9jQnlOdW1iZXIo Z3hhY3QtPnBncHJvY25vKTsKIAlUcmFuc2FjdGlvbklkIHhpZCA9IGd4YWN0LT54aWQ7CiAJ VHdvUGhhc2VGaWxlSGVhZGVyIGhkcjsKIAlUcmFuc2FjdGlvbklkICpjaGlsZHJlbjsKQEAg LTE1MzksNyArMTUzOCw3IEBAIEZpbmlzaFByZXBhcmVkVHJhbnNhY3Rpb24oY29uc3QgY2hh ciAqZ2lkLCBib29sIGlzQ29tbWl0KQogCSAqIHRyeSB0byBjb21taXQgdGhlIHNhbWUgR0lE IGF0IG9uY2UuCiAJICovCiAJZ3hhY3QgPSBMb2NrR1hhY3QoZ2lkLCBHZXRVc2VySWQoKSk7 Ci0JcHJvYyA9ICZQcm9jR2xvYmFsLT5hbGxQcm9jc1tneGFjdC0+cGdwcm9jbm9dOworCXBy b2MgPSBHZXRQR1Byb2NCeU51bWJlcihneGFjdC0+cGdwcm9jbm8pOwogCXhpZCA9IGd4YWN0 LT54aWQ7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4IDQ3ODM3 N2M0YTIzLi4xZTRhYmJjYThiZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpA QCAtMTM3OSw3ICsxMzc5LDcgQEAgV0FMSW5zZXJ0TG9ja0FjcXVpcmUodm9pZCkKIAlzdGF0 aWMgaW50CWxvY2tUb1RyeSA9IC0xOwogCiAJaWYgKGxvY2tUb1RyeSA9PSAtMSkKLQkJbG9j a1RvVHJ5ID0gTXlQcm9jLT5wZ3Byb2NubyAlIE5VTV9YTE9HSU5TRVJUX0xPQ0tTOworCQls b2NrVG9UcnkgPSBNeVByb2NOdW1iZXIgJSBOVU1fWExPR0lOU0VSVF9MT0NLUzsKIAlNeUxv Y2tObyA9IGxvY2tUb1RyeTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL2Jnd3JpdGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd3JpdGVyLmMK aW5kZXggZjExY2UyNzA4NGUuLjYzNjRiMTYyNjFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2Jnd3JpdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9i Z3dyaXRlci5jCkBAIC0zMjYsNyArMzI2LDcgQEAgQmFja2dyb3VuZFdyaXRlck1haW4odm9p ZCkKIAkJaWYgKHJjID09IFdMX1RJTUVPVVQgJiYgY2FuX2hpYmVybmF0ZSAmJiBwcmV2X2hp YmVybmF0ZSkKIAkJewogCQkJLyogQXNrIGZvciBub3RpZmljYXRpb24gYXQgbmV4dCBidWZm ZXIgYWxsb2NhdGlvbiAqLwotCQkJU3RyYXRlZ3lOb3RpZnlCZ1dyaXRlcihNeVByb2MtPnBn cHJvY25vKTsKKwkJCVN0cmF0ZWd5Tm90aWZ5QmdXcml0ZXIoTXlQcm9jTnVtYmVyKTsKIAkJ CS8qIFNsZWVwIC4uLiAqLwogCQkJKHZvaWQpIFdhaXRMYXRjaChNeUxhdGNoLAogCQkJCQkJ CSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMgYi9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3BnYXJjaC5jCmluZGV4IDY3NjkzYjA1ODA2Li4yYWEzZTk4OTBhMiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYworKysgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCkBAIC0yNDIsNyArMjQyLDcgQEAgUGdBcmNo aXZlck1haW4odm9pZCkKIAkgKiBBZHZlcnRpc2Ugb3VyIHBncHJvY25vIHNvIHRoYXQgYmFj a2VuZHMgY2FuIHVzZSBvdXIgbGF0Y2ggdG8gd2FrZSB1cyB1cAogCSAqIHdoaWxlIHdlJ3Jl IHNsZWVwaW5nLgogCSAqLwotCVBnQXJjaC0+cGdwcm9jbm8gPSBNeVByb2MtPnBncHJvY25v OworCVBnQXJjaC0+cGdwcm9jbm8gPSBNeVByb2NOdW1iZXI7CiAKIAkvKiBDcmVhdGUgd29y a3NwYWNlIGZvciBwZ2FyY2hfcmVhZHlYbG9nKCkgKi8KIAlhcmNoX2ZpbGVzID0gcGFsbG9j KHNpemVvZihzdHJ1Y3QgYXJjaF9maWxlc19zdGF0ZSkpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL3dhbHN1bW1hcml6ZXIuYwppbmRleCA5Yjg4M2MyMWNhNC4uNWQ2MWQxNTE3ZTggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jCisrKyBi L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jCkBAIC0yNDgsNyArMjQ4 LDcgQEAgV2FsU3VtbWFyaXplck1haW4odm9pZCkKIAkvKiBBZHZlcnRpc2Ugb3Vyc2VsdmVz LiAqLwogCW9uX3NobWVtX2V4aXQoV2FsU3VtbWFyaXplclNodXRkb3duLCAoRGF0dW0pIDAp OwogCUxXTG9ja0FjcXVpcmUoV0FMU3VtbWFyaXplckxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0J V2FsU3VtbWFyaXplckN0bC0+c3VtbWFyaXplcl9wZ3Byb2NubyA9IE15UHJvYy0+cGdwcm9j bm87CisJV2FsU3VtbWFyaXplckN0bC0+c3VtbWFyaXplcl9wZ3Byb2NubyA9IE15UHJvY051 bWJlcjsKIAlMV0xvY2tSZWxlYXNlKFdBTFN1bW1hcml6ZXJMb2NrKTsKIAogCS8qIENyZWF0 ZSBhbmQgc3dpdGNoIHRvIGEgbWVtb3J5IGNvbnRleHQgdGhhdCB3ZSBjYW4gcmVzZXQgb24g ZXJyb3IuICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZt Z3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4IGViMWVj M2I4NmRmLi44N2EzMTc0NTg2NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9i dWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdy LmMKQEAgLTQ3ODAsNyArNDc4MCw3IEBAIFVubG9ja0J1ZmZlcnModm9pZCkKIAkJICogZ290 IGEgY2FuY2VsL2RpZSBpbnRlcnJ1cHQgYmVmb3JlIGdldHRpbmcgdGhlIHNpZ25hbC4KIAkJ ICovCiAJCWlmICgoYnVmX3N0YXRlICYgQk1fUElOX0NPVU5UX1dBSVRFUikgIT0gMCAmJgot CQkJYnVmLT53YWl0X2JhY2tlbmRfcGdwcm9jbm8gPT0gTXlQcm9jLT5wZ3Byb2NubykKKwkJ CWJ1Zi0+d2FpdF9iYWNrZW5kX3BncHJvY25vID09IE15UHJvY051bWJlcikKIAkJCWJ1Zl9z dGF0ZSAmPSB+Qk1fUElOX0NPVU5UX1dBSVRFUjsKIAogCQlVbmxvY2tCdWZIZHIoYnVmLCBi dWZfc3RhdGUpOwpAQCAtNDkzMCw3ICs0OTMwLDcgQEAgTG9ja0J1ZmZlckZvckNsZWFudXAo QnVmZmVyIGJ1ZmZlcikKIAkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19VTkxP Q0spOwogCQkJZWxvZyhFUlJPUiwgIm11bHRpcGxlIGJhY2tlbmRzIGF0dGVtcHRpbmcgdG8g d2FpdCBmb3IgcGluY291bnQgMSIpOwogCQl9Ci0JCWJ1Zkhkci0+d2FpdF9iYWNrZW5kX3Bn cHJvY25vID0gTXlQcm9jLT5wZ3Byb2NubzsKKwkJYnVmSGRyLT53YWl0X2JhY2tlbmRfcGdw cm9jbm8gPSBNeVByb2NOdW1iZXI7CiAJCVBpbkNvdW50V2FpdEJ1ZiA9IGJ1ZkhkcjsKIAkJ YnVmX3N0YXRlIHw9IEJNX1BJTl9DT1VOVF9XQUlURVI7CiAJCVVubG9ja0J1ZkhkcihidWZI ZHIsIGJ1Zl9zdGF0ZSk7CkBAIC00OTk0LDcgKzQ5OTQsNyBAQCBMb2NrQnVmZmVyRm9yQ2xl YW51cChCdWZmZXIgYnVmZmVyKQogCQkgKi8KIAkJYnVmX3N0YXRlID0gTG9ja0J1Zkhkcihi dWZIZHIpOwogCQlpZiAoKGJ1Zl9zdGF0ZSAmIEJNX1BJTl9DT1VOVF9XQUlURVIpICE9IDAg JiYKLQkJCWJ1Zkhkci0+d2FpdF9iYWNrZW5kX3BncHJvY25vID09IE15UHJvYy0+cGdwcm9j bm8pCisJCQlidWZIZHItPndhaXRfYmFja2VuZF9wZ3Byb2NubyA9PSBNeVByb2NOdW1iZXIp CiAJCQlidWZfc3RhdGUgJj0gfkJNX1BJTl9DT1VOVF9XQUlURVI7CiAJCVVubG9ja0J1Zkhk cihidWZIZHIsIGJ1Zl9zdGF0ZSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL3Byb2NhcnJheS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5 LmMKaW5kZXggZWUyZDdmODU4NWEuLmRkMzI5YTg2ZWY0IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9wcm9jYXJyYXkuYwpAQCAtNDY4LDYgKzQ2OCw3IEBAIENyZWF0ZVNoYXJlZFByb2NB cnJheSh2b2lkKQogdm9pZAogUHJvY0FycmF5QWRkKFBHUFJPQyAqcHJvYykKIHsKKwlpbnQJ CQlwZ3Byb2NubyA9IEdldE51bWJlckZyb21QR1Byb2MocHJvYyk7CiAJUHJvY0FycmF5U3Ry dWN0ICphcnJheVAgPSBwcm9jQXJyYXk7CiAJaW50CQkJaW5kZXg7CiAJaW50CQkJbW92ZWNv dW50OwpAQCAtNDk5LDEzICs1MDAsMTMgQEAgUHJvY0FycmF5QWRkKFBHUFJPQyAqcHJvYykK IAkgKi8KIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRl eCsrKQogCXsKLQkJaW50CQkJcHJvY25vIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9IGFy cmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKKwkJaW50CQkJdGhpc19wcm9jbm8gPSBhcnJheVAt PnBncHJvY25vc1tpbmRleF07CiAKLQkJQXNzZXJ0KHByb2NubyA+PSAwICYmIHByb2NubyA8 IChhcnJheVAtPm1heFByb2NzICsgTlVNX0FVWElMSUFSWV9QUk9DUykpOwotCQlBc3NlcnQo YWxsUHJvY3NbcHJvY25vXS5wZ3hhY3RvZmYgPT0gaW5kZXgpOworCQlBc3NlcnQodGhpc19w cm9jbm8gPj0gMCAmJiB0aGlzX3Byb2NubyA8IChhcnJheVAtPm1heFByb2NzICsgTlVNX0FV WElMSUFSWV9QUk9DUykpOworCQlBc3NlcnQoYWxsUHJvY3NbdGhpc19wcm9jbm9dLnBneGFj dG9mZiA9PSBpbmRleCk7CiAKIAkJLyogSWYgd2UgaGF2ZSBmb3VuZCBvdXIgcmlnaHQgcG9z aXRpb24gaW4gdGhlIGFycmF5LCBicmVhayAqLwotCQlpZiAoYXJyYXlQLT5wZ3Byb2Nub3Nb aW5kZXhdID4gcHJvYy0+cGdwcm9jbm8pCisJCWlmICh0aGlzX3Byb2NubyA+IHBncHJvY25v KQogCQkJYnJlYWs7CiAJfQogCkBAIC01MjMsNyArNTI0LDcgQEAgUHJvY0FycmF5QWRkKFBH UFJPQyAqcHJvYykKIAkJCSZQcm9jR2xvYmFsLT5zdGF0dXNGbGFnc1tpbmRleF0sCiAJCQlt b3ZlY291bnQgKiBzaXplb2YoKlByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzKSk7CiAKLQlhcnJh eVAtPnBncHJvY25vc1tpbmRleF0gPSBwcm9jLT5wZ3Byb2NubzsKKwlhcnJheVAtPnBncHJv Y25vc1tpbmRleF0gPSBHZXROdW1iZXJGcm9tUEdQcm9jKHByb2MpOwogCXByb2MtPnBneGFj dG9mZiA9IGluZGV4OwogCVByb2NHbG9iYWwtPnhpZHNbaW5kZXhdID0gcHJvYy0+eGlkOwog CVByb2NHbG9iYWwtPnN1YnhpZFN0YXRlc1tpbmRleF0gPSBwcm9jLT5zdWJ4aWRTdGF0dXM7 CkBAIC03OTEsNiArNzkyLDcgQEAgUHJvY0FycmF5RW5kVHJhbnNhY3Rpb25JbnRlcm5hbChQ R1BST0MgKnByb2MsIFRyYW5zYWN0aW9uSWQgbGF0ZXN0WGlkKQogc3RhdGljIHZvaWQKIFBy b2NBcnJheUdyb3VwQ2xlYXJYaWQoUEdQUk9DICpwcm9jLCBUcmFuc2FjdGlvbklkIGxhdGVz dFhpZCkKIHsKKwlpbnQJCQlwZ3Byb2NubyA9IEdldE51bWJlckZyb21QR1Byb2MocHJvYyk7 CiAJUFJPQ19IRFIgICAqcHJvY2dsb2JhbCA9IFByb2NHbG9iYWw7CiAJdWludDMyCQluZXh0 aWR4OwogCXVpbnQzMgkJd2FrZWlkeDsKQEAgLTgwOCw3ICs4MTAsNyBAQCBQcm9jQXJyYXlH cm91cENsZWFyWGlkKFBHUFJPQyAqcHJvYywgVHJhbnNhY3Rpb25JZCBsYXRlc3RYaWQpCiAK IAkJaWYgKHBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3UzMigmcHJvY2dsb2JhbC0+cHJv Y0FycmF5R3JvdXBGaXJzdCwKIAkJCQkJCQkJCQkgICAmbmV4dGlkeCwKLQkJCQkJCQkJCQkg ICAodWludDMyKSBwcm9jLT5wZ3Byb2NubykpCisJCQkJCQkJCQkJICAgKHVpbnQzMikgcGdw cm9jbm8pKQogCQkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvY29uZGl0aW9uX3ZhcmlhYmxlLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvY29uZGl0aW9uX3ZhcmlhYmxlLmMKaW5kZXggZTJkNmQ2ODUyMjAuLjEwZmRhZTE5ZGNj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvY29uZGl0aW9uX3Zhcmlh YmxlLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2NvbmRpdGlvbl92YXJpYWJs ZS5jCkBAIC01Nyw3ICs1Nyw3IEBAIENvbmRpdGlvblZhcmlhYmxlSW5pdChDb25kaXRpb25W YXJpYWJsZSAqY3YpCiB2b2lkCiBDb25kaXRpb25WYXJpYWJsZVByZXBhcmVUb1NsZWVwKENv bmRpdGlvblZhcmlhYmxlICpjdikKIHsKLQlpbnQJCQlwZ3Byb2NubyA9IE15UHJvYy0+cGdw cm9jbm87CisJaW50CQkJcGdwcm9jbm8gPSBNeVByb2NOdW1iZXI7CiAKIAkvKgogCSAqIElm IHNvbWUgb3RoZXIgc2xlZXAgaXMgYWxyZWFkeSBwcmVwYXJlZCwgY2FuY2VsIGl0OyB0aGlz IGlzIG5lY2Vzc2FyeQpAQCAtMTgxLDEwICsxODEsMTAgQEAgQ29uZGl0aW9uVmFyaWFibGVU aW1lZFNsZWVwKENvbmRpdGlvblZhcmlhYmxlICpjdiwgbG9uZyB0aW1lb3V0LAogCQkgKiBn dWFyYW50ZWUgbm90IHRvIHJldHVybiBzcHVyaW91c2x5LCB3ZSdsbCBhdm9pZCB0aGlzIG9i dmlvdXMgY2FzZS4KIAkJICovCiAJCVNwaW5Mb2NrQWNxdWlyZSgmY3YtPm11dGV4KTsKLQkJ aWYgKCFwcm9jbGlzdF9jb250YWlucygmY3YtPndha2V1cCwgTXlQcm9jLT5wZ3Byb2Nubywg Y3ZXYWl0TGluaykpCisJCWlmICghcHJvY2xpc3RfY29udGFpbnMoJmN2LT53YWtldXAsIE15 UHJvY051bWJlciwgY3ZXYWl0TGluaykpCiAJCXsKIAkJCWRvbmUgPSB0cnVlOwotCQkJcHJv Y2xpc3RfcHVzaF90YWlsKCZjdi0+d2FrZXVwLCBNeVByb2MtPnBncHJvY25vLCBjdldhaXRM aW5rKTsKKwkJCXByb2NsaXN0X3B1c2hfdGFpbCgmY3YtPndha2V1cCwgTXlQcm9jTnVtYmVy LCBjdldhaXRMaW5rKTsKIAkJfQogCQlTcGluTG9ja1JlbGVhc2UoJmN2LT5tdXRleCk7CiAK QEAgLTIzNiw4ICsyMzYsOCBAQCBDb25kaXRpb25WYXJpYWJsZUNhbmNlbFNsZWVwKHZvaWQp CiAJCXJldHVybiBmYWxzZTsKIAogCVNwaW5Mb2NrQWNxdWlyZSgmY3YtPm11dGV4KTsKLQlp ZiAocHJvY2xpc3RfY29udGFpbnMoJmN2LT53YWtldXAsIE15UHJvYy0+cGdwcm9jbm8sIGN2 V2FpdExpbmspKQotCQlwcm9jbGlzdF9kZWxldGUoJmN2LT53YWtldXAsIE15UHJvYy0+cGdw cm9jbm8sIGN2V2FpdExpbmspOworCWlmIChwcm9jbGlzdF9jb250YWlucygmY3YtPndha2V1 cCwgTXlQcm9jTnVtYmVyLCBjdldhaXRMaW5rKSkKKwkJcHJvY2xpc3RfZGVsZXRlKCZjdi0+ d2FrZXVwLCBNeVByb2NOdW1iZXIsIGN2V2FpdExpbmspOwogCWVsc2UKIAkJc2lnbmFsZWQg PSB0cnVlOwogCVNwaW5Mb2NrUmVsZWFzZSgmY3YtPm11dGV4KTsKQEAgLTI4MSw3ICsyODEs NyBAQCBDb25kaXRpb25WYXJpYWJsZVNpZ25hbChDb25kaXRpb25WYXJpYWJsZSAqY3YpCiB2 b2lkCiBDb25kaXRpb25WYXJpYWJsZUJyb2FkY2FzdChDb25kaXRpb25WYXJpYWJsZSAqY3Yp CiB7Ci0JaW50CQkJcGdwcm9jbm8gPSBNeVByb2MtPnBncHJvY25vOworCWludAkJCXBncHJv Y25vID0gTXlQcm9jTnVtYmVyOwogCVBHUFJPQwkgICAqcHJvYyA9IE5VTEw7CiAJYm9vbAkJ aGF2ZV9zZW50aW5lbCA9IGZhbHNlOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvbHdsb2NrLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbHdsb2NrLmMK aW5kZXggNzE2NzdjZjAzMTcuLjk5Nzg1NzY3OWVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2xtZ3IvbHdsb2NrLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L2x3bG9jay5jCkBAIC0xMDU2LDkgKzEwNTYsOSBAQCBMV0xvY2tRdWV1ZVNlbGYoTFdMb2Nr ICpsb2NrLCBMV0xvY2tNb2RlIG1vZGUpCiAKIAkvKiBMV19XQUlUX1VOVElMX0ZSRUUgd2Fp dGVycyBhcmUgYWx3YXlzIGF0IHRoZSBmcm9udCBvZiB0aGUgcXVldWUgKi8KIAlpZiAobW9k ZSA9PSBMV19XQUlUX1VOVElMX0ZSRUUpCi0JCXByb2NsaXN0X3B1c2hfaGVhZCgmbG9jay0+ d2FpdGVycywgTXlQcm9jLT5wZ3Byb2NubywgbHdXYWl0TGluayk7CisJCXByb2NsaXN0X3B1 c2hfaGVhZCgmbG9jay0+d2FpdGVycywgTXlQcm9jTnVtYmVyLCBsd1dhaXRMaW5rKTsKIAll bHNlCi0JCXByb2NsaXN0X3B1c2hfdGFpbCgmbG9jay0+d2FpdGVycywgTXlQcm9jLT5wZ3By b2NubywgbHdXYWl0TGluayk7CisJCXByb2NsaXN0X3B1c2hfdGFpbCgmbG9jay0+d2FpdGVy cywgTXlQcm9jTnVtYmVyLCBsd1dhaXRMaW5rKTsKIAogCS8qIENhbiByZWxlYXNlIHRoZSBt dXRleCBub3cgKi8KIAlMV0xvY2tXYWl0TGlzdFVubG9jayhsb2NrKTsKQEAgLTEwOTcsNyAr MTA5Nyw3IEBAIExXTG9ja0RlcXVldWVTZWxmKExXTG9jayAqbG9jaykKIAkgKi8KIAlvbl93 YWl0bGlzdCA9IE15UHJvYy0+bHdXYWl0aW5nID09IExXX1dTX1dBSVRJTkc7CiAJaWYgKG9u X3dhaXRsaXN0KQotCQlwcm9jbGlzdF9kZWxldGUoJmxvY2stPndhaXRlcnMsIE15UHJvYy0+ cGdwcm9jbm8sIGx3V2FpdExpbmspOworCQlwcm9jbGlzdF9kZWxldGUoJmxvY2stPndhaXRl cnMsIE15UHJvY051bWJlciwgbHdXYWl0TGluayk7CiAKIAlpZiAocHJvY2xpc3RfaXNfZW1w dHkoJmxvY2stPndhaXRlcnMpICYmCiAJCShwZ19hdG9taWNfcmVhZF91MzIoJmxvY2stPnN0 YXRlKSAmIExXX0ZMQUdfSEFTX1dBSVRFUlMpICE9IDApCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvcHJlZGljYXRlLmMKaW5kZXggZWVkNjNhMDVlZDguLmQ2MjA2MGQ1OGM4IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCkBAIC0xODMwLDcgKzE4MzAsNyBAQCBH ZXRTZXJpYWxpemFibGVUcmFuc2FjdGlvblNuYXBzaG90SW50KFNuYXBzaG90IHNuYXBzaG90 LAogCXN4YWN0LT5maW5pc2hlZEJlZm9yZSA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCXN4 YWN0LT54bWluID0gc25hcHNob3QtPnhtaW47CiAJc3hhY3QtPnBpZCA9IE15UHJvY1BpZDsK LQlzeGFjdC0+cGdwcm9jbm8gPSBNeVByb2MtPnBncHJvY25vOworCXN4YWN0LT5wZ3Byb2Nu byA9IE15UHJvY051bWJlcjsKIAlkbGlzdF9pbml0KCZzeGFjdC0+cHJlZGljYXRlTG9ja3Mp OwogCWRsaXN0X25vZGVfaW5pdCgmc3hhY3QtPmZpbmlzaGVkTGluayk7CiAJc3hhY3QtPmZs YWdzID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCmluZGV4IGU1OTc3NTQ4ZmUyLi5m ZGRmNDQwMTVmZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2Mu YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCkBAIC02NCw2ICs2NCw3 IEBAIGJvb2wJCWxvZ19sb2NrX3dhaXRzID0gZmFsc2U7CiAKIC8qIFBvaW50ZXIgdG8gdGhp cyBwcm9jZXNzJ3MgUEdQUk9DIHN0cnVjdCwgaWYgYW55ICovCiBQR1BST0MJICAgKk15UHJv YyA9IE5VTEw7CitpbnQJCQlNeVByb2NOdW1iZXIgPSBJTlZBTElEX1BHUFJPQ05POwogCiAv KgogICogVGhpcyBzcGlubG9jayBwcm90ZWN0cyB0aGUgZnJlZWxpc3Qgb2YgcmVjeWNsZWQg UEdQUk9DIHN0cnVjdHVyZXMuCkBAIC0yMjcsNyArMjI4LDYgQEAgSW5pdFByb2NHbG9iYWwo dm9pZCkKIAkJCUluaXRTaGFyZWRMYXRjaCgmKHByb2MtPnByb2NMYXRjaCkpOwogCQkJTFdM b2NrSW5pdGlhbGl6ZSgmKHByb2MtPmZwSW5mb0xvY2spLCBMV1RSQU5DSEVfTE9DS19GQVNU UEFUSCk7CiAJCX0KLQkJcHJvYy0+cGdwcm9jbm8gPSBpOwogCiAJCS8qCiAJCSAqIE5ld2x5 IGNyZWF0ZWQgUEdQUk9DcyBmb3Igbm9ybWFsIGJhY2tlbmRzLCBhdXRvdmFjdXVtIGFuZCBi Z3dvcmtlcnMKQEAgLTM1Miw2ICszNTIsNyBAQCBJbml0UHJvY2Vzcyh2b2lkKQogCQkJCShl cnJjb2RlKEVSUkNPREVfVE9PX01BTllfQ09OTkVDVElPTlMpLAogCQkJCSBlcnJtc2coInNv cnJ5LCB0b28gbWFueSBjbGllbnRzIGFscmVhZHkiKSkpOwogCX0KKwlNeVByb2NOdW1iZXIg PSBHZXROdW1iZXJGcm9tUEdQcm9jKE15UHJvYyk7CiAKIAkvKgogCSAqIENyb3NzLWNoZWNr IHRoYXQgdGhlIFBHUFJPQyBpcyBvZiB0aGUgdHlwZSB3ZSBleHBlY3Q7IGlmIHRoaXMgd2Vy ZSBub3QKQEAgLTU2NSw2ICs1NjYsOCBAQCBJbml0QXV4aWxpYXJ5UHJvY2Vzcyh2b2lkKQog CiAJU3BpbkxvY2tSZWxlYXNlKFByb2NTdHJ1Y3RMb2NrKTsKIAorCU15UHJvY051bWJlciA9 IEdldE51bWJlckZyb21QR1Byb2MoTXlQcm9jKTsKKwogCS8qCiAJICogSW5pdGlhbGl6ZSBh bGwgZmllbGRzIG9mIE15UHJvYywgZXhjZXB0IGZvciB0aG9zZSBwcmV2aW91c2x5CiAJICog aW5pdGlhbGl6ZWQgYnkgSW5pdFByb2NHbG9iYWwuCkBAIC05MDYsNiArOTA5LDcgQEAgUHJv Y0tpbGwoaW50IGNvZGUsIERhdHVtIGFyZykKIAogCXByb2MgPSBNeVByb2M7CiAJTXlQcm9j ID0gTlVMTDsKKwlNeVByb2NOdW1iZXIgPSBJTlZBTElEX1BHUFJPQ05POwogCURpc293bkxh dGNoKCZwcm9jLT5wcm9jTGF0Y2gpOwogCiAJcHJvY2dsb2JhbGxpc3QgPSBwcm9jLT5wcm9j Z2xvYmFsbGlzdDsKQEAgLTk3Nyw2ICs5ODEsNyBAQCBBdXhpbGlhcnlQcm9jS2lsbChpbnQg Y29kZSwgRGF0dW0gYXJnKQogCiAJcHJvYyA9IE15UHJvYzsKIAlNeVByb2MgPSBOVUxMOwor CU15UHJvY051bWJlciA9IElOVkFMSURfUEdQUk9DTk87CiAJRGlzb3duTGF0Y2goJnByb2Mt PnByb2NMYXRjaCk7CiAKIAlTcGluTG9ja0FjcXVpcmUoUHJvY1N0cnVjdExvY2spOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2NrLmggYi9zcmMvaW5jbHVkZS9zdG9y YWdlL2xvY2suaAppbmRleCAwMDY3OTYyNGY3ZC4uZWQ2MDcxZjMyODYgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv bG9jay5oCkBAIC01NDAsNyArNTQwLDcgQEAgdHlwZWRlZiBlbnVtCiAgKiB1c2VkIGZvciBh IGdpdmVuIGxvY2sgZ3JvdXAgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZ3JvdXAgbGVhZGVyJ3Mg cGdwcm9jbm8uCiAgKi8KICNkZWZpbmUgTG9ja0hhc2hQYXJ0aXRpb25Mb2NrQnlQcm9jKGxl YWRlcl9wZ3Byb2MpIFwKLQlMb2NrSGFzaFBhcnRpdGlvbkxvY2soKGxlYWRlcl9wZ3Byb2Mp LT5wZ3Byb2NubykKKwlMb2NrSGFzaFBhcnRpdGlvbkxvY2soR2V0TnVtYmVyRnJvbVBHUHJv YyhsZWFkZXJfcGdwcm9jKSkKIAogLyoKICAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9wcm9jLmgKaW5kZXggNGJjMjI2ZTM2Y2QuLmNhMjE1MThmNTIyIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3By b2MuaApAQCAtMTk0LDExICsxOTQsNiBAQCBzdHJ1Y3QgUEdQUk9DCiAJaW50CQkJcGd4YWN0 b2ZmOwkJLyogb2Zmc2V0IGludG8gdmFyaW91cyBQcm9jR2xvYmFsLT5hcnJheXMgd2l0aAog CQkJCQkJCQkgKiBkYXRhIG1pcnJvcmVkIGZyb20gdGhpcyBQR1BST0MgKi8KIAotCWludAkJ CXBncHJvY25vOwkJLyogTnVtYmVyIG9mIHRoaXMgUEdQUk9DIGluCi0JCQkJCQkJCSAqIFBy b2NHbG9iYWwtPmFsbFByb2NzIGFycmF5LiBUaGlzIGlzIHNldAotCQkJCQkJCQkgKiBvbmNl IGJ5IEluaXRQcm9jR2xvYmFsKCkuCi0JCQkJCQkJCSAqIFByb2NHbG9iYWwtPmFsbFByb2Nz W25dLnBncHJvY25vID09IG4gKi8KLQogCS8qIFRoZXNlIGZpZWxkcyBhcmUgemVybyB3aGls ZSBhIGJhY2tlbmQgaXMgc3RpbGwgc3RhcnRpbmcgdXA6ICovCiAJQmFja2VuZElkCWJhY2tl bmRJZDsJCS8qIFRoaXMgYmFja2VuZCdzIGJhY2tlbmQgSUQgKGlmIGFzc2lnbmVkKSAqLwog CU9pZAkJCWRhdGFiYXNlSWQ7CQkvKiBPSUQgb2YgZGF0YWJhc2UgdGhpcyBiYWNrZW5kIGlz IHVzaW5nICovCkBAIC0zMDcsNiArMzAyLDcgQEAgc3RydWN0IFBHUFJPQwogCiAKIGV4dGVy biBQR0RMTElNUE9SVCBQR1BST0MgKk15UHJvYzsKK2V4dGVybiBQR0RMTElNUE9SVCBpbnQg TXlQcm9jTnVtYmVyOwkvKiBzYW1lIGFzIEdldE51bWJlckZyb21QR1Byb2MoTXlQcm9jKSAq LwogCiAvKgogICogVGhlcmUgaXMgb25lIFByb2NHbG9iYWwgc3RydWN0IGZvciB0aGUgd2hv bGUgZGF0YWJhc2UgY2x1c3Rlci4KQEAgLTQxMiw2ICs0MDgsNyBAQCBleHRlcm4gUEdETExJ TVBPUlQgUEdQUk9DICpQcmVwYXJlZFhhY3RQcm9jczsKIAogLyogQWNjZXNzb3IgZm9yIFBH UFJPQyBnaXZlbiBhIHBncHJvY25vLiAqLwogI2RlZmluZSBHZXRQR1Byb2NCeU51bWJlcihu KSAoJlByb2NHbG9iYWwtPmFsbFByb2NzWyhuKV0pCisjZGVmaW5lIEdldE51bWJlckZyb21Q R1Byb2MocHJvYykgKChwcm9jKSAtICZQcm9jR2xvYmFsLT5hbGxQcm9jc1swXSkKIAogLyoK ICAqIFdlIHNldCBhc2lkZSBzb21lIGV4dHJhIFBHUFJPQyBzdHJ1Y3R1cmVzIGZvciBhdXhp bGlhcnkgcHJvY2Vzc2VzLAotLSAKMi4zOS4yCgo= --------------D7q2JUSUBACJ11MlrkrBV8fY Content-Type: text/x-patch; charset=UTF-8; name="v10-0002-Redefine-backend-ID-to-be-an-index-into-the-proc.patch" Content-Disposition: attachment; filename*0="v10-0002-Redefine-backend-ID-to-be-an-index-into-the-proc.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBkNGNmMTRkYTg0MDBjZmI0M2Q4YWVlMTU5MmY4YWYzNDg2ZmE4ZGU5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgOCBGZWIgMjAyNCAxMjo1Nzo1NCArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjEwIDIvM10gUmVkZWZpbmUgYmFja2VuZCBJRCB0byBiZSBhbiBp bmRleCBpbnRvIHRoZSBwcm9jCiBhcnJheS4KClByZXZpb3VzbHksIGJhY2tlbmQgSUQgd2Fz IGFuIGluZGV4IGludG8gdGhlIFByb2NTdGF0ZSBhcnJheSwgaW4gdGhlCnNoYXJlZCBjYWNo ZSBpbnZhbGlkYXRpb24gbWFuYWdlciAoc2ludmFsYWR0LmMpLiBUaGUgZW50cnkgaW4gdGhl ClByb2NTdGF0ZSBhcnJheSB3YXMgcmVzZXJ2ZWQgYXQgYmFja2VuZCBzdGFydHVwIGJ5IHNj YW5uaW5nIHRoZSBhcnJheQpmb3IgYSBmcmVlIGVudHJ5LCBhbmQgdGhhdCB3YXMgYWxzbyB3 aGVuIHRoZSBiYWNrZW5kIGdvdCBpdHMgYmFja2VuZApJRC4gVGhpbmdzIGJlY29tZXMgc2xp Z2h0bHkgc2ltcGxlciBpZiB3ZSByZWRlZmluZSBiYWNrZW5kIElEIHRvIGJlCnRoZSBpbmRl eCBpbnRvIHRoZSBQR1BST0MgYXJyYXksIGFuZCBkaXJlY3RseSB1c2UgaXQgYWxzbyBhcyBh biBpbmRleAp0byB0aGUgUHJvY1N0YXRlIGFycmF5LiBUaGlzIHVzZXMgYSBsaXR0bGUgbW9y ZSBtZW1vcnksIGFzIHdlIHJlc2VydmUKYSBmZXcgZXh0cmEgc2xvdHMgaW4gdGhlIFByb2NT dGF0ZSBhcnJheSBmb3IgYXV4IHByb2Nlc3NlcyB0aGF0IGRvbid0Cm5lZWQgdGhlbSwgYnV0 IHRoZSBzaW1wbGljaXR5IGlzIHdvcnRoIGl0LgoKQXV4IHByb2Nlc3NlcyBub3cgYWxzbyBo YXZlIGEgYmFja2VuZCBJRC4gVGhpcyBzaW1wbGlmaWVzIHRoZQpyZXNlcnZhdGlvbiBvZiBC YWNrZW5kU3RhdHVzQXJyYXkgYW5kIFByb2NTaWduYWwgc2xvdHMuCgpZb3UgY2FuIG5vdyBj b252ZXJ0IGEgYmFja2VuZCBJRCBpbnRvIGFuIGluZGV4IGludG8gdGhlIFBHUFJPQyBhcnJh eQpzaW1wbHkgYnkgc3VidHJhY3RpbmcgMS4gV2Ugc3RpbGwgdXNlIDAtYmFzZWQgInBncHJv Y25vcyIgaW4gdmFyaW91cwpwbGFjZXMsIGZvciBpbmRleGVzIGludG8gdGhlIFBHUFJPQyBh cnJheSwgYnV0IHRoZSBvbmx5IGRpZmZlcmVuY2Ugbm93CmlzIHRoYXQgYmFja2VuZCBJRHMg c3RhcnQgYXQgMSB3aGlsZSBwZ3Byb2Nub3Mgc3RhcnQgYXQgMC4KClRoZXJlIGlzIHN0aWxs IGEgJ2JhY2tlbmRJZCcgZmllbGQgaW4gUEdQUk9DLCBub3cgcGFydCBvZiAndnhpZCcgd2hp Y2gKZW5jYXBzdWxhdGVzIHRoZSBiYWNrZW5kIElEIGFuZCBsb2NhbCB0cmFuc2FjdGlvbiBJ RCB0b2dldGhlci4gSXQncwpuZWVkZWQgZm9yIHByZXBhcmVkIHhhY3RzLiBGb3IgcmVndWxh ciBiYWNrZW5kcywgdGhlIGJhY2tlbmRJZCBpcwphbHdheXMgZXF1YWwgdG8gcGdwcm9jbm8g KyAxLCBidXQgZm9yIHByZXBhcmVkIHhhY3QgUEdQUk9DIGVudHJpZXMsCml0J3MgdGhlIElE IG9mIHRoZSBvcmlnaW5hbCBiYWNrZW5kIHRoYXQgcHJvY2Vzc2VkIHRoZSB0cmFuc2FjdGlv bi4KClJldmlld2VkLWJ5OiBBbmRyZXMgRnJldW5kCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3 LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvODE3MWYxYWEtNDk2Zi00NmE2LWFmYzMtYzQ2 ZmU3YTliNDA3QGlraS5maQotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3Bo YXNlLmMgICAgICAgfCAgMzcgKystLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFj dC5jICAgICAgICAgICB8ICAxMiArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9uYW1lc3BhY2Uu YyAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2Uu YyAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25z LmMgICAgICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXhwcm9j ZXNzLmMgICAgICAgICB8ICAxMiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2Fy cmF5LmMgICAgICAgICB8ICA3MyArKysrKystCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9w cm9jc2lnbmFsLmMgICAgICAgIHwgIDI3ICsrLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv c2ludmFsYWR0LmMgICAgICAgICB8IDIwMCArKysrKystLS0tLS0tLS0tLS0tLQogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jICAgICAgICAgICAgIHwgIDI4ICstLQogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyAgICAgICAgICAgICB8ICAzMCArLS0KIHNyYy9i YWNrZW5kL3V0aWxzL2FjdGl2aXR5L2JhY2tlbmRfc3RhdHVzLmMgfCAgNTIgKystLS0KIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9sb2NrZnVuY3MuYyAgICAgICAgICAgfCAgIDIgKy0KIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYyAgICAgICAgICAgfCAgMTQgKy0KIHNy Yy9iYWNrZW5kL3V0aWxzL2Vycm9yL2NzdmxvZy5jICAgICAgICAgICAgfCAgIDQgKy0KIHNy Yy9iYWNrZW5kL3V0aWxzL2Vycm9yL2Vsb2cuYyAgICAgICAgICAgICAgfCAgIDYgKy0KIHNy Yy9iYWNrZW5kL3V0aWxzL2Vycm9yL2pzb25sb2cuYyAgICAgICAgICAgfCAgIDYgKy0KIHNy Yy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYyAgICAgICAgICAgfCAgMTAgKy0KIHNy Yy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jICAgICAgICAgICAgfCAgIDUgKy0KIHNy Yy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAgICAgfCAgIDIgLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9iYWNrZW5kaWQuaCAgICAgICAgICAgICB8ICAxMiArLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9sb2NrLmggICAgICAgICAgICAgICAgICB8ICAgOSArLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcm9jLmggICAgICAgICAgICAgICAgICB8ICAzMiArKystCiBz cmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oICAgICAgICAgICAgIHwgICA0ICsKIHNy Yy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oICAgICAgICAgICAgfCAgIDIgKy0KIHNy Yy9pbmNsdWRlL3N0b3JhZ2Uvc2ludmFsYWR0LmggICAgICAgICAgICAgfCAgIDQgLQogc3Jj L3BsL3BscGdzcWwvc3JjL3BsX2V4ZWMuYyAgICAgICAgICAgICAgICB8ICAxMCArLQogMjgg ZmlsZXMgY2hhbmdlZCwgMjgwIGluc2VydGlvbnMoKyksIDMyMiBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwppbmRleCAyMzRjOGQwOGViYy4u NWMyODIwMDI5MDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3 b3BoYXNlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwpA QCAtMTUxLDcgKzE1MSw2IEBAIHR5cGVkZWYgc3RydWN0IEdsb2JhbFRyYW5zYWN0aW9uRGF0 YQogewogCUdsb2JhbFRyYW5zYWN0aW9uIG5leHQ7CQkvKiBsaXN0IGxpbmsgZm9yIGZyZWUg bGlzdCAqLwogCWludAkJCXBncHJvY25vOwkJLyogSUQgb2YgYXNzb2NpYXRlZCBkdW1teSBQ R1BST0MgKi8KLQlCYWNrZW5kSWQJZHVtbXlCYWNrZW5kSWQ7IC8qIHNpbWlsYXIgdG8gYmFj a2VuZCBpZCBmb3IgYmFja2VuZHMgKi8KIAlUaW1lc3RhbXBUeiBwcmVwYXJlZF9hdDsJLyog dGltZSBvZiBwcmVwYXJhdGlvbiAqLwogCiAJLyoKQEAgLTI4NSwyMCArMjg0LDYgQEAgVHdv UGhhc2VTaG1lbUluaXQodm9pZCkKIAogCQkJLyogYXNzb2NpYXRlIGl0IHdpdGggYSBQR1BS T0MgYXNzaWduZWQgYnkgSW5pdFByb2NHbG9iYWwgKi8KIAkJCWd4YWN0c1tpXS5wZ3Byb2Nu byA9IEdldE51bWJlckZyb21QR1Byb2MoJlByZXBhcmVkWGFjdFByb2NzW2ldKTsKLQotCQkJ LyoKLQkJCSAqIEFzc2lnbiBhIHVuaXF1ZSBJRCBmb3IgZWFjaCBkdW1teSBwcm9jLCBzbyB0 aGF0IHRoZSByYW5nZSBvZgotCQkJICogZHVtbXkgYmFja2VuZCBJRHMgaW1tZWRpYXRlbHkg Zm9sbG93cyB0aGUgcmFuZ2Ugb2Ygbm9ybWFsCi0JCQkgKiBiYWNrZW5kIElEcy4gV2UgZG9u J3QgZGFyZSB0byBhc3NpZ24gYSByZWFsIGJhY2tlbmQgSUQgdG8gZHVtbXkKLQkJCSAqIHBy b2NzLCBiZWNhdXNlIHByZXBhcmVkIHRyYW5zYWN0aW9ucyBkb24ndCB0YWtlIHBhcnQgaW4g Y2FjaGUKLQkJCSAqIGludmFsaWRhdGlvbiBsaWtlIGEgcmVhbCBiYWNrZW5kIElEIHdvdWxk IGltcGx5LCBidXQgaGF2aW5nIGEKLQkJCSAqIHVuaXF1ZSBJRCBmb3IgdGhlbSBpcyBuZXZl cnRoZWxlc3MgaGFuZHkuIFRoaXMgYXJyYW5nZW1lbnQKLQkJCSAqIGFsbG93cyB5b3UgdG8g YWxsb2NhdGUgYW4gYXJyYXkgb2Ygc2l6ZSAoTWF4QmFja2VuZHMgKwotCQkJICogbWF4X3By ZXBhcmVkX3hhY3RzICsgMSksIGFuZCBoYXZlIGEgc2xvdCBmb3IgZXZlcnkgYmFja2VuZCBh bmQKLQkJCSAqIHByZXBhcmVkIHRyYW5zYWN0aW9uLiBDdXJyZW50bHkgbXVsdGl4YWN0LmMg dXNlcyB0aGF0Ci0JCQkgKiB0ZWNobmlxdWUuCi0JCQkgKi8KLQkJCWd4YWN0c1tpXS5kdW1t eUJhY2tlbmRJZCA9IE1heEJhY2tlbmRzICsgMSArIGk7CiAJCX0KIAl9CiAJZWxzZQpAQCAt NDU3LDI0ICs0NDIsMjQgQEAgTWFya0FzUHJlcGFyaW5nR3V0cyhHbG9iYWxUcmFuc2FjdGlv biBneGFjdCwgVHJhbnNhY3Rpb25JZCB4aWQsIGNvbnN0IGNoYXIgKmdpZCwKIAlBc3NlcnQo TFdMb2NrSGVsZEJ5TWVJbk1vZGUoVHdvUGhhc2VTdGF0ZUxvY2ssIExXX0VYQ0xVU0lWRSkp OwogCiAJQXNzZXJ0KGd4YWN0ICE9IE5VTEwpOwotCXByb2MgPSAmUHJvY0dsb2JhbC0+YWxs UHJvY3NbZ3hhY3QtPnBncHJvY25vXTsKKwlwcm9jID0gR2V0UEdQcm9jQnlOdW1iZXIoZ3hh Y3QtPnBncHJvY25vKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIFBHUFJPQyBlbnRyeSAqLwog CU1lbVNldChwcm9jLCAwLCBzaXplb2YoUEdQUk9DKSk7CiAJZGxpc3Rfbm9kZV9pbml0KCZw cm9jLT5saW5rcyk7CiAJcHJvYy0+d2FpdFN0YXR1cyA9IFBST0NfV0FJVF9TVEFUVVNfT0s7 Ci0JaWYgKExvY2FsVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT5seGlkKSkKKwlpZiAo TG9jYWxUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnZ4aWQubHhpZCkpCiAJewogCQkv KiBjbG9uZSBWWElELCBmb3IgVHdvUGhhc2VHZXRYaWRCeVZpcnR1YWxYSUQoKSB0byBmaW5k ICovCi0JCXByb2MtPmx4aWQgPSBNeVByb2MtPmx4aWQ7Ci0JCXByb2MtPmJhY2tlbmRJZCA9 IE15QmFja2VuZElkOworCQlwcm9jLT52eGlkLmx4aWQgPSBNeVByb2MtPnZ4aWQubHhpZDsK KwkJcHJvYy0+dnhpZC5iYWNrZW5kSWQgPSBNeUJhY2tlbmRJZDsKIAl9CiAJZWxzZQogCXsK IAkJQXNzZXJ0KEFtU3RhcnR1cFByb2Nlc3MoKSB8fCAhSXNQb3N0bWFzdGVyRW52aXJvbm1l bnQpOwogCQkvKiBHZXRMb2NrQ29uZmxpY3RzKCkgdXNlcyB0aGlzIHRvIHNwZWNpZnkgYSB3 YWl0IG9uIHRoZSBYSUQgKi8KLQkJcHJvYy0+bHhpZCA9IHhpZDsKLQkJcHJvYy0+YmFja2Vu ZElkID0gSW52YWxpZEJhY2tlbmRJZDsKKwkJcHJvYy0+dnhpZC5seGlkID0geGlkOworCQlw cm9jLT52eGlkLmJhY2tlbmRJZCA9IEludmFsaWRCYWNrZW5kSWQ7CiAJfQogCXByb2MtPnhp ZCA9IHhpZDsKIAlBc3NlcnQocHJvYy0+eG1pbiA9PSBJbnZhbGlkVHJhbnNhY3Rpb25JZCk7 CkBAIC01MjIsNyArNTA3LDcgQEAgc3RhdGljIHZvaWQKIEdYYWN0TG9hZFN1YnhhY3REYXRh KEdsb2JhbFRyYW5zYWN0aW9uIGd4YWN0LCBpbnQgbnN1YnhhY3RzLAogCQkJCQkgVHJhbnNh Y3Rpb25JZCAqY2hpbGRyZW4pCiB7Ci0JUEdQUk9DCSAgICpwcm9jID0gJlByb2NHbG9iYWwt PmFsbFByb2NzW2d4YWN0LT5wZ3Byb2Nub107CisJUEdQUk9DCSAgICpwcm9jID0gR2V0UEdQ cm9jQnlOdW1iZXIoZ3hhY3QtPnBncHJvY25vKTsKIAogCS8qIFdlIG5lZWQgbm8gZXh0cmEg bG9jayBzaW5jZSB0aGUgR1hBQ1QgaXNuJ3QgdmFsaWQgeWV0ICovCiAJaWYgKG5zdWJ4YWN0 cyA+IFBHUFJPQ19NQVhfQ0FDSEVEX1NVQlhJRFMpCkBAIC01NTksNyArNTQ0LDcgQEAgTWFy a0FzUHJlcGFyZWQoR2xvYmFsVHJhbnNhY3Rpb24gZ3hhY3QsIGJvb2wgbG9ja19oZWxkKQog CSAqIFB1dCBpdCBpbnRvIHRoZSBnbG9iYWwgUHJvY0FycmF5IHNvIFRyYW5zYWN0aW9uSWRJ c0luUHJvZ3Jlc3MgY29uc2lkZXJzCiAJICogdGhlIFhJRCBhcyBzdGlsbCBydW5uaW5nLgog CSAqLwotCVByb2NBcnJheUFkZCgmUHJvY0dsb2JhbC0+YWxsUHJvY3NbZ3hhY3QtPnBncHJv Y25vXSk7CisJUHJvY0FycmF5QWRkKEdldFBHUHJvY0J5TnVtYmVyKGd4YWN0LT5wZ3Byb2Nu bykpOwogfQogCiAvKgpAQCAtNTgzLDcgKzU2OCw3IEBAIExvY2tHWGFjdChjb25zdCBjaGFy ICpnaWQsIE9pZCB1c2VyKQogCWZvciAoaSA9IDA7IGkgPCBUd29QaGFzZVN0YXRlLT5udW1Q cmVwWGFjdHM7IGkrKykKIAl7CiAJCUdsb2JhbFRyYW5zYWN0aW9uIGd4YWN0ID0gVHdvUGhh c2VTdGF0ZS0+cHJlcFhhY3RzW2ldOwotCQlQR1BST0MJICAgKnByb2MgPSAmUHJvY0dsb2Jh bC0+YWxsUHJvY3NbZ3hhY3QtPnBncHJvY25vXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gR2V0 UEdQcm9jQnlOdW1iZXIoZ3hhY3QtPnBncHJvY25vKTsKIAogCQkvKiBJZ25vcmUgbm90LXll dC12YWxpZCBHSURzICovCiAJCWlmICghZ3hhY3QtPnZhbGlkKQpAQCAtODg0LDcgKzg2OSw3 IEBAIFR3b1BoYXNlR2V0WGlkQnlWaXJ0dWFsWElEKFZpcnR1YWxUcmFuc2FjdGlvbklkIHZ4 aWQsCiAKIAkJaWYgKCFneGFjdC0+dmFsaWQpCiAJCQljb250aW51ZTsKLQkJcHJvYyA9ICZQ cm9jR2xvYmFsLT5hbGxQcm9jc1tneGFjdC0+cGdwcm9jbm9dOworCQlwcm9jID0gR2V0UEdQ cm9jQnlOdW1iZXIoZ3hhY3QtPnBncHJvY25vKTsKIAkJR0VUX1ZYSURfRlJPTV9QR1BST0Mo cHJvY192eGlkLCAqcHJvYyk7CiAJCWlmIChWaXJ0dWFsVHJhbnNhY3Rpb25JZEVxdWFscyh2 eGlkLCBwcm9jX3Z4aWQpKQogCQl7CkBAIC05MTksNyArOTA0LDcgQEAgVHdvUGhhc2VHZXRE dW1teUJhY2tlbmRJZChUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBsb2NrX2hlbGQpCiB7CiAJ R2xvYmFsVHJhbnNhY3Rpb24gZ3hhY3QgPSBUd29QaGFzZUdldEdYYWN0KHhpZCwgbG9ja19o ZWxkKTsKIAotCXJldHVybiBneGFjdC0+ZHVtbXlCYWNrZW5kSWQ7CisJcmV0dXJuIGd4YWN0 LT5wZ3Byb2NubyArIDE7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMK aW5kZXggNDY0ODU4MTE3ZTAuLmY3OTEzNDBkM2RmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGFjdC5jCkBAIC02MDAsOSArNjAwLDkgQEAgR2V0U3RhYmxlTGF0ZXN0VHJhbnNhY3Rp b25JZCh2b2lkKQogCXN0YXRpYyBMb2NhbFRyYW5zYWN0aW9uSWQgbHhpZCA9IEludmFsaWRM b2NhbFRyYW5zYWN0aW9uSWQ7CiAJc3RhdGljIFRyYW5zYWN0aW9uSWQgc3RhYmxleGlkID0g SW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAKLQlpZiAobHhpZCAhPSBNeVByb2MtPmx4aWQpCisJ aWYgKGx4aWQgIT0gTXlQcm9jLT52eGlkLmx4aWQpCiAJewotCQlseGlkID0gTXlQcm9jLT5s eGlkOworCQlseGlkID0gTXlQcm9jLT52eGlkLmx4aWQ7CiAJCXN0YWJsZXhpZCA9IEdldFRv cFRyYW5zYWN0aW9uSWRJZkFueSgpOwogCQlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHN0 YWJsZXhpZCkpCiAJCQlzdGFibGV4aWQgPSBSZWFkTmV4dFRyYW5zYWN0aW9uSWQoKTsKQEAg LTIwOTksOCArMjA5OSw4IEBAIFN0YXJ0VHJhbnNhY3Rpb24odm9pZCkKIAkgKiBBZHZlcnRp c2UgaXQgaW4gdGhlIHByb2MgYXJyYXkuICBXZSBhc3N1bWUgYXNzaWdubWVudCBvZgogCSAq IGxvY2FsVHJhbnNhY3Rpb25JZCBpcyBhdG9taWMsIGFuZCB0aGUgYmFja2VuZElkIHNob3Vs ZCBiZSBzZXQgYWxyZWFkeS4KIAkgKi8KLQlBc3NlcnQoTXlQcm9jLT5iYWNrZW5kSWQgPT0g dnhpZC5iYWNrZW5kSWQpOwotCU15UHJvYy0+bHhpZCA9IHZ4aWQubG9jYWxUcmFuc2FjdGlv bklkOworCUFzc2VydChNeVByb2MtPnZ4aWQuYmFja2VuZElkID09IHZ4aWQuYmFja2VuZElk KTsKKwlNeVByb2MtPnZ4aWQubHhpZCA9IHZ4aWQubG9jYWxUcmFuc2FjdGlvbklkOwogCiAJ VFJBQ0VfUE9TVEdSRVNRTF9UUkFOU0FDVElPTl9TVEFSVCh2eGlkLmxvY2FsVHJhbnNhY3Rp b25JZCk7CiAKQEAgLTIyODEsNyArMjI4MSw3IEBAIENvbW1pdFRyYW5zYWN0aW9uKHZvaWQp CiAJCVBhcmFsbGVsV29ya2VyUmVwb3J0TGFzdFJlY0VuZChYYWN0TGFzdFJlY0VuZCk7CiAJ fQogCi0JVFJBQ0VfUE9TVEdSRVNRTF9UUkFOU0FDVElPTl9DT01NSVQoTXlQcm9jLT5seGlk KTsKKwlUUkFDRV9QT1NUR1JFU1FMX1RSQU5TQUNUSU9OX0NPTU1JVChNeVByb2MtPnZ4aWQu bHhpZCk7CiAKIAkvKgogCSAqIExldCBvdGhlcnMga25vdyBhYm91dCBubyB0cmFuc2FjdGlv biBpbiBwcm9ncmVzcyBieSBtZS4gTm90ZSB0aGF0IHRoaXMKQEAgLTI4MjQsNyArMjgyNCw3 IEBAIEFib3J0VHJhbnNhY3Rpb24odm9pZCkKIAkJWExvZ1NldEFzeW5jWGFjdExTTihYYWN0 TGFzdFJlY0VuZCk7CiAJfQogCi0JVFJBQ0VfUE9TVEdSRVNRTF9UUkFOU0FDVElPTl9BQk9S VChNeVByb2MtPmx4aWQpOworCVRSQUNFX1BPU1RHUkVTUUxfVFJBTlNBQ1RJT05fQUJPUlQo TXlQcm9jLT52eGlkLmx4aWQpOwogCiAJLyoKIAkgKiBMZXQgb3RoZXJzIGtub3cgYWJvdXQg bm8gdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MgYnkgbWUuIE5vdGUgdGhhdCB0aGlzCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL25hbWVzcGFjZS5jIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9uYW1lc3BhY2UuYwppbmRleCA4ZGYzMGIyNDQwMS4uNjIwY2U3ZTc1ZDIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvbmFtZXNwYWNlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9uYW1lc3BhY2UuYwpAQCAtNDksNyArNDksNyBAQAogI2luY2x1ZGUg InBhcnNlci9wYXJzZV9mdW5jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNs dWRlICJzdG9yYWdlL2xtZ3IuaCIKLSNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbGFkdC5oIgor I2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgi CiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9jYXRjYWNo ZS5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKaW5kZXggZjc4MDM3NDRhNWIuLmY5OWRj NDhlOGNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKQEAgLTEwNzYsNyArMTA3Niw3 IEBAIHNldHZhbDNfb2lkKFBHX0ZVTkNUSU9OX0FSR1MpCiBzdGF0aWMgUmVsYXRpb24KIGxv Y2tfYW5kX29wZW5fc2VxdWVuY2UoU2VxVGFibGUgc2VxKQogewotCUxvY2FsVHJhbnNhY3Rp b25JZCB0aGlzbHhpZCA9IE15UHJvYy0+bHhpZDsKKwlMb2NhbFRyYW5zYWN0aW9uSWQgdGhp c2x4aWQgPSBNeVByb2MtPnZ4aWQubHhpZDsKIAogCS8qIEdldCB0aGUgbG9jayBpZiBub3Qg YWxyZWFkeSBoZWxkIGluIHRoaXMgeGFjdCAqLwogCWlmIChzZXEtPmx4aWQgIT0gdGhpc2x4 aWQpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCmluZGV4IDBmODExZmQyZmM5Li5hNGI2 ZTFlZmZkYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKQEAgLTc5OSw3ICs3OTks NyBAQCBpbml0X3NxbF9mY2FjaGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIE9pZCBjb2xs YXRpb24sIGJvb2wgbGF6eUV2YWxPSykKIAkJCQkJCQkJCQkJICBsYXp5RXZhbE9LKTsKIAog CS8qIE1hcmsgZmNhY2hlIHdpdGggdGltZSBvZiBjcmVhdGlvbiB0byBzaG93IGl0J3MgdmFs aWQgKi8KLQlmY2FjaGUtPmx4aWQgPSBNeVByb2MtPmx4aWQ7CisJZmNhY2hlLT5seGlkID0g TXlQcm9jLT52eGlkLmx4aWQ7CiAJZmNhY2hlLT5zdWJ4aWQgPSBHZXRDdXJyZW50U3ViVHJh bnNhY3Rpb25JZCgpOwogCiAJUmVsZWFzZVN5c0NhY2hlKHByb2NlZHVyZVR1cGxlKTsKQEAg LTEwODEsNyArMTA4MSw3IEBAIGZtZ3Jfc3FsKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlpZiAo ZmNhY2hlICE9IE5VTEwpCiAJewotCQlpZiAoZmNhY2hlLT5seGlkICE9IE15UHJvYy0+bHhp ZCB8fAorCQlpZiAoZmNhY2hlLT5seGlkICE9IE15UHJvYy0+dnhpZC5seGlkIHx8CiAJCQkh U3ViVHJhbnNhY3Rpb25Jc0FjdGl2ZShmY2FjaGUtPnN1YnhpZCkpCiAJCXsKIAkJCS8qIEl0 J3Mgc3RhbGU7IHVubGluayBhbmQgZGVsZXRlICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV4 cHJvY2Vzcy5jCmluZGV4IGFiODZlODAyZjIxLi4zOTE3MWZlYTA2YiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMKKysrIGIvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMKQEAgLTEwNywxNyArMTA3LDcgQEAgQXV4aWxpYXJ5 UHJvY2Vzc01haW4oQXV4UHJvY1R5cGUgYXV4dHlwZSkKIAogCUJhc2VJbml0KCk7CiAKLQkv KgotCSAqIEFzc2lnbiB0aGUgUHJvY1NpZ25hbFNsb3QgZm9yIGFuIGF1eGlsaWFyeSBwcm9j ZXNzLiAgU2luY2UgaXQgZG9lc24ndAotCSAqIGhhdmUgYSBCYWNrZW5kSWQsIHRoZSBzbG90 IGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJhc2VkIG9uIHRoZQotCSAqIGF1eGlsaWFyeSBw cm9jZXNzIHR5cGUgKE15QXV4UHJvY1R5cGUpLiAgQmFja2VuZHMgdXNlIHNsb3RzIGluZGV4 ZWQgaW4KLQkgKiB0aGUgcmFuZ2UgZnJvbSAxIHRvIE1heEJhY2tlbmRzIChpbmNsdXNpdmUp LCBzbyB3ZSB1c2UgTWF4QmFja2VuZHMgKwotCSAqIEF1eFByb2NUeXBlICsgMSBhcyB0aGUg aW5kZXggb2YgdGhlIHNsb3QgZm9yIGFuIGF1eGlsaWFyeSBwcm9jZXNzLgotCSAqCi0JICog VGhpcyB3aWxsIG5lZWQgcmV0aGlua2luZyBpZiB3ZSBldmVyIHdhbnQgbW9yZSB0aGFuIG9u ZSBvZiBhIHBhcnRpY3VsYXIKLQkgKiBhdXhpbGlhcnkgcHJvY2VzcyB0eXBlLgotCSAqLwot CVByb2NTaWduYWxJbml0KE1heEJhY2tlbmRzICsgTXlBdXhQcm9jVHlwZSArIDEpOworCVBy b2NTaWduYWxJbml0KCk7CiAKIAkvKgogCSAqIEF1eGlsaWFyeSBwcm9jZXNzZXMgZG9uJ3Qg cnVuIHRyYW5zYWN0aW9ucywgYnV0IHRoZXkgbWF5IG5lZWQgYQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9wcm9jYXJyYXkuYwppbmRleCBkZDMyOWE4NmVmNC4uZDk2NjA2ZWJiYTUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCkBAIC03MDEsNyArNzAxLDcgQEAgUHJv Y0FycmF5RW5kVHJhbnNhY3Rpb24oUEdQUk9DICpwcm9jLCBUcmFuc2FjdGlvbklkIGxhdGVz dFhpZCkKIAkJQXNzZXJ0KHByb2MtPnN1YnhpZFN0YXR1cy5jb3VudCA9PSAwKTsKIAkJQXNz ZXJ0KCFwcm9jLT5zdWJ4aWRTdGF0dXMub3ZlcmZsb3dlZCk7CiAKLQkJcHJvYy0+bHhpZCA9 IEludmFsaWRMb2NhbFRyYW5zYWN0aW9uSWQ7CisJCXByb2MtPnZ4aWQubHhpZCA9IEludmFs aWRMb2NhbFRyYW5zYWN0aW9uSWQ7CiAJCXByb2MtPnhtaW4gPSBJbnZhbGlkVHJhbnNhY3Rp b25JZDsKIAogCQkvKiBiZSBzdXJlIHRoaXMgaXMgY2xlYXJlZCBpbiBhYm9ydCAqLwpAQCAt NzQzLDcgKzc0Myw3IEBAIFByb2NBcnJheUVuZFRyYW5zYWN0aW9uSW50ZXJuYWwoUEdQUk9D ICpwcm9jLCBUcmFuc2FjdGlvbklkIGxhdGVzdFhpZCkKIAogCVByb2NHbG9iYWwtPnhpZHNb cGd4YWN0b2ZmXSA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCXByb2MtPnhpZCA9IEludmFs aWRUcmFuc2FjdGlvbklkOwotCXByb2MtPmx4aWQgPSBJbnZhbGlkTG9jYWxUcmFuc2FjdGlv bklkOworCXByb2MtPnZ4aWQubHhpZCA9IEludmFsaWRMb2NhbFRyYW5zYWN0aW9uSWQ7CiAJ cHJvYy0+eG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCiAJLyogYmUgc3VyZSB0aGlz IGlzIGNsZWFyZWQgaW4gYWJvcnQgKi8KQEAgLTkzMCw3ICs5MzAsNyBAQCBQcm9jQXJyYXlD bGVhclRyYW5zYWN0aW9uKFBHUFJPQyAqcHJvYykKIAlQcm9jR2xvYmFsLT54aWRzW3BneGFj dG9mZl0gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAlwcm9jLT54aWQgPSBJbnZhbGlkVHJh bnNhY3Rpb25JZDsKIAotCXByb2MtPmx4aWQgPSBJbnZhbGlkTG9jYWxUcmFuc2FjdGlvbklk OworCXByb2MtPnZ4aWQubHhpZCA9IEludmFsaWRMb2NhbFRyYW5zYWN0aW9uSWQ7CiAJcHJv Yy0+eG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCXByb2MtPnJlY292ZXJ5Q29uZmxp Y3RQZW5kaW5nID0gZmFsc2U7CiAKQEAgLTI1MzYsNiArMjUzNiwxMSBAQCBQcm9jQXJyYXlJ bnN0YWxsSW1wb3J0ZWRYbWluKFRyYW5zYWN0aW9uSWQgeG1pbiwKIAkvKiBHZXQgbG9jayBz byBzb3VyY2UgeGFjdCBjYW4ndCBlbmQgd2hpbGUgd2UncmUgZG9pbmcgdGhpcyAqLwogCUxX TG9ja0FjcXVpcmUoUHJvY0FycmF5TG9jaywgTFdfU0hBUkVEKTsKIAorCS8qCisJICogRmlu ZCB0aGUgUEdQUk9DIGVudHJ5IG9mIHRoZSBzb3VyY2UgdHJhbnNhY3Rpb24uIChUaGlzIGNv dWxkIHVzZQorCSAqIEdldFBHUHJvY0J5QmFja2VuZElkKCksIHVubGVzcyBpdCdzIGEgcHJl cGFyZWQgeGFjdC4gIEJ1dCB0aGlzIGlzbid0CisJICogcGVyZm9ybWFuY2UgY3JpdGljYWwu KQorCSAqLwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGlu ZGV4KyspCiAJewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4 XTsKQEAgLTI1NDgsOSArMjU1Myw5IEBAIFByb2NBcnJheUluc3RhbGxJbXBvcnRlZFhtaW4o VHJhbnNhY3Rpb25JZCB4bWluLAogCQkJY29udGludWU7CiAKIAkJLyogV2UgYXJlIG9ubHkg aW50ZXJlc3RlZCBpbiB0aGUgc3BlY2lmaWMgdmlydHVhbCB0cmFuc2FjdGlvbi4gKi8KLQkJ aWYgKHByb2MtPmJhY2tlbmRJZCAhPSBzb3VyY2V2eGlkLT5iYWNrZW5kSWQpCisJCWlmIChw cm9jLT52eGlkLmJhY2tlbmRJZCAhPSBzb3VyY2V2eGlkLT5iYWNrZW5kSWQpCiAJCQljb250 aW51ZTsKLQkJaWYgKHByb2MtPmx4aWQgIT0gc291cmNldnhpZC0+bG9jYWxUcmFuc2FjdGlv bklkKQorCQlpZiAocHJvYy0+dnhpZC5seGlkICE9IHNvdXJjZXZ4aWQtPmxvY2FsVHJhbnNh Y3Rpb25JZCkKIAkJCWNvbnRpbnVlOwogCiAJCS8qCkBAIC0zMDk5LDYgKzMxMDQsNjQgQEAg SGF2ZVZpcnR1YWxYSURzRGVsYXlpbmdDaGtwdChWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqdnhp ZHMsIGludCBudnhpZHMsIGludCB0eXBlKQogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisg KiBCYWNrZW5kSWRHZXRQcm9jIC0tIGdldCBhIGJhY2tlbmQncyBQR1BST0MgZ2l2ZW4gaXRz IGJhY2tlbmQgSUQKKyAqCisgKiBUaGUgcmVzdWx0IG1heSBiZSBvdXQgb2YgZGF0ZSBhcmJp dHJhcmlseSBxdWlja2x5LCBzbyB0aGUgY2FsbGVyCisgKiBtdXN0IGJlIGNhcmVmdWwgYWJv dXQgaG93IHRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZC4gIE5VTEwgaXMKKyAqIHJldHVybmVk IGlmIHRoZSBiYWNrZW5kIGlzIG5vdCBhY3RpdmUuCisgKi8KK1BHUFJPQyAqCitCYWNrZW5k SWRHZXRQcm9jKGludCBiYWNrZW5kSUQpCit7CisJUEdQUk9DCSAgICpyZXN1bHQ7CisKKwlp ZiAoYmFja2VuZElEIDwgMSB8fCBiYWNrZW5kSUQgPiBQcm9jR2xvYmFsLT5hbGxQcm9jQ291 bnQpCisJCXJldHVybiBOVUxMOworCXJlc3VsdCA9IEdldFBHUHJvY0J5QmFja2VuZElkKGJh Y2tlbmRJRCk7CisKKwlpZiAocmVzdWx0LT5waWQgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisK KwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQmFja2VuZElkR2V0VHJhbnNhY3Rpb25J ZHMgLS0gZ2V0IGEgYmFja2VuZCdzIHRyYW5zYWN0aW9uIHN0YXR1cworICoKKyAqIEdldCB0 aGUgeGlkLCB4bWluLCBuc3VieGlkIGFuZCBvdmVyZmxvdyBzdGF0dXMgb2YgdGhlIGJhY2tl bmQuICBUaGUKKyAqIHJlc3VsdCBtYXkgYmUgb3V0IG9mIGRhdGUgYXJiaXRyYXJpbHkgcXVp Y2tseSwgc28gdGhlIGNhbGxlciBtdXN0IGJlCisgKiBjYXJlZnVsIGFib3V0IGhvdyB0aGlz IGluZm9ybWF0aW9uIGlzIHVzZWQuCisgKi8KK3ZvaWQKK0JhY2tlbmRJZEdldFRyYW5zYWN0 aW9uSWRzKGludCBiYWNrZW5kSUQsIFRyYW5zYWN0aW9uSWQgKnhpZCwKKwkJCQkJCSAgIFRy YW5zYWN0aW9uSWQgKnhtaW4sIGludCAqbnN1YnhpZCwgYm9vbCAqb3ZlcmZsb3dlZCkKK3sK KwlQR1BST0MJICAgKnByb2M7CisKKwkqeGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJ KnhtaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwkqbnN1YnhpZCA9IDA7CisJKm92ZXJm bG93ZWQgPSBmYWxzZTsKKworCWlmIChiYWNrZW5kSUQgPCAxIHx8IGJhY2tlbmRJRCA+IFBy b2NHbG9iYWwtPmFsbFByb2NDb3VudCkKKwkJcmV0dXJuOworCXByb2MgPSBHZXRQR1Byb2NC eUJhY2tlbmRJZChiYWNrZW5kSUQpOworCisJLyogTmVlZCB0byBsb2NrIG91dCBhZGRpdGlv bnMvcmVtb3ZhbHMgb2YgYmFja2VuZHMgKi8KKwlMV0xvY2tBY3F1aXJlKFByb2NBcnJheUxv Y2ssIExXX1NIQVJFRCk7CisKKwlpZiAocHJvYy0+cGlkICE9IDApCisJeworCQkqeGlkID0g cHJvYy0+eGlkOworCQkqeG1pbiA9IHByb2MtPnhtaW47CisJCSpuc3VieGlkID0gcHJvYy0+ c3VieGlkU3RhdHVzLmNvdW50OworCQkqb3ZlcmZsb3dlZCA9IHByb2MtPnN1YnhpZFN0YXR1 cy5vdmVyZmxvd2VkOworCX0KKworCUxXTG9ja1JlbGVhc2UoUHJvY0FycmF5TG9jayk7Cit9 CisKIC8qCiAgKiBCYWNrZW5kUGlkR2V0UHJvYyAtLSBnZXQgYSBiYWNrZW5kJ3MgUEdQUk9D IGdpdmVuIGl0cyBQSUQKICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9wcm9jc2lnbmFsLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMK aW5kZXggZTg0NjE5ZTVhNTguLmQxZDViZjBjMTUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvcHJvY3NpZ25hbC5jCkBAIC04Nyw3ICs4Nyw3IEBAIHR5cGVkZWYgc3RydWN0CiAgKiBw b3NzaWJsZSBhdXhpbGlhcnkgcHJvY2VzcyB0eXBlLiAgKFRoaXMgc2NoZW1lIGFzc3VtZXMg dGhlcmUgaXMgbm90CiAgKiBtb3JlIHRoYW4gb25lIG9mIGFueSBhdXhpbGlhcnkgcHJvY2Vz cyB0eXBlIGF0IGEgdGltZS4pCiAgKi8KLSNkZWZpbmUgTnVtUHJvY1NpZ25hbFNsb3RzCShN YXhCYWNrZW5kcyArIE5VTV9BVVhQUk9DVFlQRVMpCisjZGVmaW5lIE51bVByb2NTaWduYWxT bG90cwkoTWF4QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZX1BST0NTKQogCiAvKiBDaGVjayB3 aGV0aGVyIHRoZSByZWxldmFudCB0eXBlIGJpdCBpcyBzZXQgaW4gdGhlIGZsYWdzLiAqLwog I2RlZmluZSBCQVJSSUVSX1NIT1VMRF9DSEVDSyhmbGFncywgdHlwZSkgXApAQCAtMTU0LDI0 ICsxNTQsMjMgQEAgUHJvY1NpZ25hbFNobWVtSW5pdCh2b2lkKQogLyoKICAqIFByb2NTaWdu YWxJbml0CiAgKgkJUmVnaXN0ZXIgdGhlIGN1cnJlbnQgcHJvY2VzcyBpbiB0aGUgUHJvY1Np Z25hbCBhcnJheQotICoKLSAqIFRoZSBwYXNzZWQgaW5kZXggc2hvdWxkIGJlIG15IEJhY2tl bmRJZCBpZiB0aGUgcHJvY2VzcyBoYXMgb25lLAotICogb3IgTWF4QmFja2VuZHMgKyBhdXgg cHJvY2VzcyB0eXBlIGlmIG5vdC4KICAqLwogdm9pZAotUHJvY1NpZ25hbEluaXQoaW50IHBz c19pZHgpCitQcm9jU2lnbmFsSW5pdCh2b2lkKQogewogCVByb2NTaWduYWxTbG90ICpzbG90 OwogCXVpbnQ2NAkJYmFycmllcl9nZW5lcmF0aW9uOwogCi0JQXNzZXJ0KHBzc19pZHggPj0g MSAmJiBwc3NfaWR4IDw9IE51bVByb2NTaWduYWxTbG90cyk7Ci0KLQlzbG90ID0gJlByb2NT aWduYWwtPnBzaF9zbG90W3Bzc19pZHggLSAxXTsKKwlpZiAoTXlCYWNrZW5kSWQgPD0gMCkK KwkJZWxvZyhFUlJPUiwgIk15QmFja2VuZElkIG5vdCBzZXQiKTsKKwlpZiAoTXlCYWNrZW5k SWQgPiBOdW1Qcm9jU2lnbmFsU2xvdHMpCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIE15 QmFja2VuZElkICVkIGluIFByb2NTaWduYWxJbml0IChtYXggJWQpIiwgTXlCYWNrZW5kSWQs IE51bVByb2NTaWduYWxTbG90cyk7CisJc2xvdCA9ICZQcm9jU2lnbmFsLT5wc2hfc2xvdFtN eUJhY2tlbmRJZCAtIDFdOwogCiAJLyogc2FuaXR5IGNoZWNrICovCiAJaWYgKHNsb3QtPnBz c19waWQgIT0gMCkKIAkJZWxvZyhMT0csICJwcm9jZXNzICVkIHRha2luZyBvdmVyIFByb2NT aWduYWwgc2xvdCAlZCwgYnV0IGl0J3Mgbm90IGVtcHR5IiwKLQkJCSBNeVByb2NQaWQsIHBz c19pZHgpOworCQkJIE15UHJvY1BpZCwgKGludCkgKHNsb3QgLSBQcm9jU2lnbmFsLT5wc2hf c2xvdCkpOwogCiAJLyogQ2xlYXIgb3V0IGFueSBsZWZ0b3ZlciBzaWduYWwgcmVhc29ucyAq LwogCU1lbVNldChzbG90LT5wc3Nfc2lnbmFsRmxhZ3MsIDAsIE5VTV9QUk9DU0lHTkFMUyAq IHNpemVvZihzaWdfYXRvbWljX3QpKTsKQEAgLTIwMCw3ICsxOTksNyBAQCBQcm9jU2lnbmFs SW5pdChpbnQgcHNzX2lkeCkKIAlNeVByb2NTaWduYWxTbG90ID0gc2xvdDsKIAogCS8qIFNl dCB1cCB0byByZWxlYXNlIHRoZSBzbG90IG9uIHByb2Nlc3MgZXhpdCAqLwotCW9uX3NobWVt X2V4aXQoQ2xlYW51cFByb2NTaWduYWxTdGF0ZSwgSW50MzJHZXREYXR1bShwc3NfaWR4KSk7 CisJb25fc2htZW1fZXhpdChDbGVhbnVwUHJvY1NpZ25hbFN0YXRlLCAoRGF0dW0pIDApOwog fQogCiAvKgpAQCAtMjEyLDExICsyMTEsNyBAQCBQcm9jU2lnbmFsSW5pdChpbnQgcHNzX2lk eCkKIHN0YXRpYyB2b2lkCiBDbGVhbnVwUHJvY1NpZ25hbFN0YXRlKGludCBzdGF0dXMsIERh dHVtIGFyZykKIHsKLQlpbnQJCQlwc3NfaWR4ID0gRGF0dW1HZXRJbnQzMihhcmcpOwotCVBy b2NTaWduYWxTbG90ICpzbG90OwotCi0Jc2xvdCA9ICZQcm9jU2lnbmFsLT5wc2hfc2xvdFtw c3NfaWR4IC0gMV07Ci0JQXNzZXJ0KHNsb3QgPT0gTXlQcm9jU2lnbmFsU2xvdCk7CisJUHJv Y1NpZ25hbFNsb3QgKnNsb3QgPSBNeVByb2NTaWduYWxTbG90OwogCiAJLyoKIAkgKiBDbGVh ciBNeVByb2NTaWduYWxTbG90LCBzbyB0aGF0IGEgU0lHVVNSMSByZWNlaXZlZCBhZnRlciB0 aGlzIHBvaW50CkBAIC0yMzMsNyArMjI4LDcgQEAgQ2xlYW51cFByb2NTaWduYWxTdGF0ZShp bnQgc3RhdHVzLCBEYXR1bSBhcmcpCiAJCSAqIGluZmluaXRlIGxvb3AgdHJ5aW5nIHRvIGV4 aXQKIAkJICovCiAJCWVsb2coTE9HLCAicHJvY2VzcyAlZCByZWxlYXNpbmcgUHJvY1NpZ25h bCBzbG90ICVkLCBidXQgaXQgY29udGFpbnMgJWQiLAotCQkJIE15UHJvY1BpZCwgcHNzX2lk eCwgKGludCkgc2xvdC0+cHNzX3BpZCk7CisJCQkgTXlQcm9jUGlkLCAoaW50KSAoc2xvdCAt IFByb2NTaWduYWwtPnBzaF9zbG90KSwgKGludCkgc2xvdC0+cHNzX3BpZCk7CiAJCXJldHVy bjsJCQkJCS8qIFhYWCBiZXR0ZXIgdG8gemVybyB0aGUgc2xvdCBhbnl3YXk/ICovCiAJfQog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWxhZHQuYyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpbnZhbGFkdC5jCmluZGV4IDc0OGE3OTJhODU0Li5m NjI0YmZjN2Q3OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ludmFs YWR0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ludmFsYWR0LmMKQEAgLTEz OSw3ICsxMzksNiBAQCB0eXBlZGVmIHN0cnVjdCBQcm9jU3RhdGUKIHsKIAkvKiBwcm9jUGlk IGlzIHplcm8gaW4gYW4gaW5hY3RpdmUgUHJvY1N0YXRlIGFycmF5IGVudHJ5LiAqLwogCXBp ZF90CQlwcm9jUGlkOwkJLyogUElEIG9mIGJhY2tlbmQsIGZvciBzaWduYWxpbmcgKi8KLQlQ R1BST0MJICAgKnByb2M7CQkJLyogUEdQUk9DIG9mIGJhY2tlbmQgKi8KIAkvKiBuZXh0TXNn TnVtIGlzIG1lYW5pbmdsZXNzIGlmIHByb2NQaWQgPT0gMCBvciByZXNldFN0YXRlIGlzIHRy dWUuICovCiAJaW50CQkJbmV4dE1zZ051bTsJCS8qIG5leHQgbWVzc2FnZSBudW1iZXIgdG8g cmVhZCAqLwogCWJvb2wJCXJlc2V0U3RhdGU7CQkvKiBiYWNrZW5kIG5lZWRzIHRvIHJlc2V0 IGl0cyBzdGF0ZSAqLwpAQCAtMTcyLDggKzE3MSw2IEBAIHR5cGVkZWYgc3RydWN0IFNJU2Vn CiAJaW50CQkJbWluTXNnTnVtOwkJLyogb2xkZXN0IG1lc3NhZ2Ugc3RpbGwgbmVlZGVkICov CiAJaW50CQkJbWF4TXNnTnVtOwkJLyogbmV4dCBtZXNzYWdlIG51bWJlciB0byBiZSBhc3Np Z25lZCAqLwogCWludAkJCW5leHRUaHJlc2hvbGQ7CS8qICMgb2YgbWVzc2FnZXMgdG8gY2Fs bCBTSUNsZWFudXBRdWV1ZSAqLwotCWludAkJCWxhc3RCYWNrZW5kOwkvKiBpbmRleCBvZiBs YXN0IGFjdGl2ZSBwcm9jU3RhdGUgZW50cnksICsxICovCi0JaW50CQkJbWF4QmFja2VuZHM7 CS8qIHNpemUgb2YgcHJvY1N0YXRlIGFycmF5ICovCiAKIAlzbG9ja190CQltc2dudW1Mb2Nr OwkJLyogc3BpbmxvY2sgcHJvdGVjdGluZyBtYXhNc2dOdW0gKi8KIApAQCAtMTgzLDExICsx ODAsMjkgQEAgdHlwZWRlZiBzdHJ1Y3QgU0lTZWcKIAlTaGFyZWRJbnZhbGlkYXRpb25NZXNz YWdlIGJ1ZmZlcltNQVhOVU1NRVNTQUdFU107CiAKIAkvKgotCSAqIFBlci1iYWNrZW5kIGlu dmFsaWRhdGlvbiBzdGF0ZSBpbmZvIChoYXMgTWF4QmFja2VuZHMgZW50cmllcykuCisJICog UGVyLWJhY2tlbmQgaW52YWxpZGF0aW9uIHN0YXRlIGluZm8uCisJICoKKwkgKiAncHJvY1N0 YXRlJyBoYXMgTnVtUHJvY1N0YXRlU2xvdHMgZW50cmllcywgYW5kIGlzIGluZGV4ZWQgYnkg cGdwcm9jbm8uCisJICogJ251bVByb2NzJyBpcyB0aGUgbnVtYmVyIG9mIHNsb3RzIGN1cnJl bnRseSBpbiB1c2UsIGFuZCAncGdwcm9jbm9zJyBpcworCSAqIGEgZGVuc2UgYXJyYXkgb2Yg dGhlaXIgaW5kZXhlcywgdG8gc3BlZWQgdXAgc2Nhbm5pbmcgYWxsIGluLXVzZSBzbG90cy4K KwkgKgorCSAqICdwZ3Byb2Nub3MnIGlzIGxhcmdlbHkgcmVkdW5kYW50IHdpdGggUHJvY0Fy cmF5U3RydWN0LT5wZ3Byb2Nub3MsIGJ1dAorCSAqIGhhdmluZyBvdXIgc2VwYXJhdGUgY29w eSBhdm9pZHMgY29udGVudGlvbiBvbiBQcm9jQXJyYXlMb2NrLCBhbmQgYWxsb3dzCisJICog dXMgdG8gdHJhY2sgb25seSB0aGUgcHJvY2Vzc2VzIHRoYXQgcGFydGljaXBhdGUgaW4gc2hh cmVkIGNhY2hlCisJICogaW52YWxpZGF0aW9ucy4KIAkgKi8KKwlpbnQJCQludW1Qcm9jczsK KwlpbnQJCSAgICpwZ3Byb2Nub3M7CiAJUHJvY1N0YXRlCXByb2NTdGF0ZVtGTEVYSUJMRV9B UlJBWV9NRU1CRVJdOwogfSBTSVNlZzsKIAorLyoKKyAqIFdlIHJlc2VydmUgYSBzbG90IGZv ciBlYWNoIHBvc3NpYmxlIEJhY2tlbmRJZCwgcGx1cyBvbmUgZm9yIGVhY2gKKyAqIHBvc3Np YmxlIGF1eGlsaWFyeSBwcm9jZXNzIHR5cGUuICAoVGhpcyBzY2hlbWUgYXNzdW1lcyB0aGVy ZSBpcyBub3QKKyAqIG1vcmUgdGhhbiBvbmUgb2YgYW55IGF1eGlsaWFyeSBwcm9jZXNzIHR5 cGUgYXQgYSB0aW1lLikKKyAqLworI2RlZmluZSBOdW1Qcm9jU3RhdGVTbG90cwkoTWF4QmFj a2VuZHMgKyBOVU1fQVVYSUxJQVJZX1BST0NTKQorCiBzdGF0aWMgU0lTZWcgKnNobUludmFs QnVmZmVyOwkvKiBwb2ludGVyIHRvIHRoZSBzaGFyZWQgaW52YWwgYnVmZmVyICovCiAKIApA QCAtMjA1LDE2ICsyMjAsOCBAQCBTSW52YWxTaG1lbVNpemUodm9pZCkKIAlTaXplCQlzaXpl OwogCiAJc2l6ZSA9IG9mZnNldG9mKFNJU2VnLCBwcm9jU3RhdGUpOwotCi0JLyoKLQkgKiBJ biBIb3QgU3RhbmRieSBtb2RlLCB0aGUgc3RhcnR1cCBwcm9jZXNzIHJlcXVlc3RzIGEgcHJv Y1N0YXRlIGFycmF5Ci0JICogc2xvdCB1c2luZyBJbml0UmVjb3ZlcnlUcmFuc2FjdGlvbkVu dmlyb25tZW50KCkuIEV2ZW4gdGhvdWdoCi0JICogTWF4QmFja2VuZHMgZG9lc24ndCBhY2Nv dW50IGZvciB0aGUgc3RhcnR1cCBwcm9jZXNzLCBpdCBpcyBndWFyYW50ZWVkCi0JICogdG8g Z2V0IGEgZnJlZSBzbG90LiBUaGlzIGlzIGJlY2F1c2UgdGhlIGF1dG92YWN1dW0gbGF1bmNo ZXIgYW5kIHdvcmtlcgotCSAqIHByb2Nlc3Nlcywgd2hpY2ggYXJlIGluY2x1ZGVkIGluIE1h eEJhY2tlbmRzLCBhcmUgbm90IHN0YXJ0ZWQgaW4gSG90Ci0JICogU3RhbmRieSBtb2RlLgot CSAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShzaXplb2YoUHJvY1N0YXRl KSwgTWF4QmFja2VuZHMpKTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoc2l6 ZW9mKFByb2NTdGF0ZSksIE51bVByb2NTdGF0ZVNsb3RzKSk7CS8qIHByb2NTdGF0ZSAqLwor CXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShzaXplb2YoaW50KSwgTnVtUHJvY1N0 YXRlU2xvdHMpKTsJLyogcGdwcm9jbm9zICovCiAKIAlyZXR1cm4gc2l6ZTsKIH0KQEAgLTIz OSwyMyArMjQ2LDIyIEBAIENyZWF0ZVNoYXJlZEludmFsaWRhdGlvblN0YXRlKHZvaWQpCiAJ c2htSW52YWxCdWZmZXItPm1pbk1zZ051bSA9IDA7CiAJc2htSW52YWxCdWZmZXItPm1heE1z Z051bSA9IDA7CiAJc2htSW52YWxCdWZmZXItPm5leHRUaHJlc2hvbGQgPSBDTEVBTlVQX01J TjsKLQlzaG1JbnZhbEJ1ZmZlci0+bGFzdEJhY2tlbmQgPSAwOwotCXNobUludmFsQnVmZmVy LT5tYXhCYWNrZW5kcyA9IE1heEJhY2tlbmRzOwogCVNwaW5Mb2NrSW5pdCgmc2htSW52YWxC dWZmZXItPm1zZ251bUxvY2spOwogCiAJLyogVGhlIGJ1ZmZlcltdIGFycmF5IGlzIGluaXRp YWxseSBhbGwgdW51c2VkLCBzbyB3ZSBuZWVkIG5vdCBmaWxsIGl0ICovCiAKIAkvKiBNYXJr IGFsbCBiYWNrZW5kcyBpbmFjdGl2ZSwgYW5kIGluaXRpYWxpemUgbmV4dExYSUQgKi8KLQlm b3IgKGkgPSAwOyBpIDwgc2htSW52YWxCdWZmZXItPm1heEJhY2tlbmRzOyBpKyspCisJZm9y IChpID0gMDsgaSA8IE51bVByb2NTdGF0ZVNsb3RzOyBpKyspCiAJewogCQlzaG1JbnZhbEJ1 ZmZlci0+cHJvY1N0YXRlW2ldLnByb2NQaWQgPSAwOwkvKiBpbmFjdGl2ZSAqLwotCQlzaG1J bnZhbEJ1ZmZlci0+cHJvY1N0YXRlW2ldLnByb2MgPSBOVUxMOwogCQlzaG1JbnZhbEJ1ZmZl ci0+cHJvY1N0YXRlW2ldLm5leHRNc2dOdW0gPSAwOwkvKiBtZWFuaW5nbGVzcyAqLwogCQlz aG1JbnZhbEJ1ZmZlci0+cHJvY1N0YXRlW2ldLnJlc2V0U3RhdGUgPSBmYWxzZTsKIAkJc2ht SW52YWxCdWZmZXItPnByb2NTdGF0ZVtpXS5zaWduYWxlZCA9IGZhbHNlOwogCQlzaG1JbnZh bEJ1ZmZlci0+cHJvY1N0YXRlW2ldLmhhc01lc3NhZ2VzID0gZmFsc2U7CiAJCXNobUludmFs QnVmZmVyLT5wcm9jU3RhdGVbaV0ubmV4dExYSUQgPSBJbnZhbGlkTG9jYWxUcmFuc2FjdGlv bklkOwogCX0KKwlzaG1JbnZhbEJ1ZmZlci0+bnVtUHJvY3MgPSAwOworCXNobUludmFsQnVm ZmVyLT5wZ3Byb2Nub3MgPSAoaW50ICopICZzaG1JbnZhbEJ1ZmZlci0+cHJvY1N0YXRlW2ld OwogfQogCiAvKgpAQCAtMjY1LDU5ICsyNzEsNDEgQEAgQ3JlYXRlU2hhcmVkSW52YWxpZGF0 aW9uU3RhdGUodm9pZCkKIHZvaWQKIFNoYXJlZEludmFsQmFja2VuZEluaXQoYm9vbCBzZW5k T25seSkKIHsKLQlpbnQJCQlpbmRleDsKLQlQcm9jU3RhdGUgICpzdGF0ZVAgPSBOVUxMOwor CVByb2NTdGF0ZSAgKnN0YXRlUDsKKwlwaWRfdAkJb2xkUGlkOwogCVNJU2VnCSAgICpzZWdQ ID0gc2htSW52YWxCdWZmZXI7CisJaW50CQkJcGdwcm9jbm87CisKKwlpZiAoTXlCYWNrZW5k SWQgPD0gMCkKKwkJZWxvZyhFUlJPUiwgIk15QmFja2VuZElkIG5vdCBzZXQiKTsKKwlpZiAo TXlCYWNrZW5kSWQgPiBOdW1Qcm9jU3RhdGVTbG90cykKKwkJZWxvZyhQQU5JQywgInVuZXhw ZWN0ZWQgTXlCYWNrZW5kSWQgJWQgaW4gU2hhcmVkSW52YWxCYWNrZW5kSW5pdCAobWF4ICVk KSIsCisJCQkgTXlCYWNrZW5kSWQsIE51bVByb2NTdGF0ZVNsb3RzKTsKKwlwZ3Byb2NubyA9 IE15QmFja2VuZElkIC0gMTsKKwlzdGF0ZVAgPSAmc2VnUC0+cHJvY1N0YXRlW3BncHJvY25v XTsKIAogCS8qCiAJICogVGhpcyBjYW4gcnVuIGluIHBhcmFsbGVsIHdpdGggcmVhZCBvcGVy YXRpb25zLCBidXQgbm90IHdpdGggd3JpdGUKLQkgKiBvcGVyYXRpb25zLCBzaW5jZSBTSUlu c2VydERhdGFFbnRyaWVzIHJlbGllcyBvbiBsYXN0QmFja2VuZCB0byBzZXQKLQkgKiBoYXNN ZXNzYWdlcyBhcHByb3ByaWF0ZWx5LgorCSAqIG9wZXJhdGlvbnMsIHNpbmNlIFNJSW5zZXJ0 RGF0YUVudHJpZXMgcmVsaWVzIG9uIHRoZSBwZ3Byb2Nub3MgYXJyYXkgdG8KKwkgKiBzZXQg aGFzTWVzc2FnZXMgYXBwcm9wcmlhdGVseS4KIAkgKi8KIAlMV0xvY2tBY3F1aXJlKFNJbnZh bFdyaXRlTG9jaywgTFdfRVhDTFVTSVZFKTsKIAotCS8qIExvb2sgZm9yIGEgZnJlZSBlbnRy eSBpbiB0aGUgcHJvY1N0YXRlIGFycmF5ICovCi0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwg c2VnUC0+bGFzdEJhY2tlbmQ7IGluZGV4KyspCi0JewotCQlpZiAoc2VnUC0+cHJvY1N0YXRl W2luZGV4XS5wcm9jUGlkID09IDApCS8qIGluYWN0aXZlIHNsb3Q/ICovCi0JCXsKLQkJCXN0 YXRlUCA9ICZzZWdQLT5wcm9jU3RhdGVbaW5kZXhdOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0K LQlpZiAoc3RhdGVQID09IE5VTEwpCisJb2xkUGlkID0gc3RhdGVQLT5wcm9jUGlkOworCWlm IChvbGRQaWQgIT0gMCkKIAl7Ci0JCWlmIChzZWdQLT5sYXN0QmFja2VuZCA8IHNlZ1AtPm1h eEJhY2tlbmRzKQotCQl7Ci0JCQlzdGF0ZVAgPSAmc2VnUC0+cHJvY1N0YXRlW3NlZ1AtPmxh c3RCYWNrZW5kXTsKLQkJCUFzc2VydChzdGF0ZVAtPnByb2NQaWQgPT0gMCk7Ci0JCQlzZWdQ LT5sYXN0QmFja2VuZCsrOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyoKLQkJCSAqIG91dCBv ZiBwcm9jU3RhdGUgc2xvdHM6IE1heEJhY2tlbmRzIGV4Y2VlZGVkIC0tIHJlcG9ydCBub3Jt YWxseQotCQkJICovCi0JCQlNeUJhY2tlbmRJZCA9IEludmFsaWRCYWNrZW5kSWQ7Ci0JCQlM V0xvY2tSZWxlYXNlKFNJbnZhbFdyaXRlTG9jayk7Ci0JCQllcmVwb3J0KEZBVEFMLAotCQkJ CQkoZXJyY29kZShFUlJDT0RFX1RPT19NQU5ZX0NPTk5FQ1RJT05TKSwKLQkJCQkJIGVycm1z Zygic29ycnksIHRvbyBtYW55IGNsaWVudHMgYWxyZWFkeSIpKSk7Ci0JCX0KKwkJTFdMb2Nr UmVsZWFzZShTSW52YWxXcml0ZUxvY2spOworCQllbG9nKEVSUk9SLCAic2ludmFsIHNsb3Qg Zm9yIGJhY2tlbmQgJWQgaXMgYWxyZWFkeSBpbiB1c2UgYnkgcHJvY2VzcyAlZCIsCisJCQkg TXlCYWNrZW5kSWQsIChpbnQpIG9sZFBpZCk7CiAJfQogCi0JTXlCYWNrZW5kSWQgPSAoc3Rh dGVQIC0gJnNlZ1AtPnByb2NTdGF0ZVswXSkgKyAxOwotCi0JLyogQWR2ZXJ0aXNlIGFzc2ln bmVkIGJhY2tlbmQgSUQgaW4gTXlQcm9jICovCi0JTXlQcm9jLT5iYWNrZW5kSWQgPSBNeUJh Y2tlbmRJZDsKKwlzaG1JbnZhbEJ1ZmZlci0+cGdwcm9jbm9zW3NobUludmFsQnVmZmVyLT5u dW1Qcm9jcysrXSA9IHBncHJvY25vOwogCiAJLyogRmV0Y2ggbmV4dCBsb2NhbCB0cmFuc2Fj dGlvbiBJRCBpbnRvIGxvY2FsIG1lbW9yeSAqLwogCW5leHRMb2NhbFRyYW5zYWN0aW9uSWQg PSBzdGF0ZVAtPm5leHRMWElEOwogCiAJLyogbWFyayBteXNlbGYgYWN0aXZlLCB3aXRoIGFs bCBleHRhbnQgbWVzc2FnZXMgYWxyZWFkeSByZWFkICovCiAJc3RhdGVQLT5wcm9jUGlkID0g TXlQcm9jUGlkOwotCXN0YXRlUC0+cHJvYyA9IE15UHJvYzsKIAlzdGF0ZVAtPm5leHRNc2dO dW0gPSBzZWdQLT5tYXhNc2dOdW07CiAJc3RhdGVQLT5yZXNldFN0YXRlID0gZmFsc2U7CiAJ c3RhdGVQLT5zaWduYWxlZCA9IGZhbHNlOwpAQCAtMzI4LDggKzMxNiw2IEBAIFNoYXJlZElu dmFsQmFja2VuZEluaXQoYm9vbCBzZW5kT25seSkKIAogCS8qIHJlZ2lzdGVyIGV4aXQgcm91 dGluZSB0byBtYXJrIG15IGVudHJ5IGluYWN0aXZlIGF0IGV4aXQgKi8KIAlvbl9zaG1lbV9l eGl0KENsZWFudXBJbnZhbGlkYXRpb25TdGF0ZSwgUG9pbnRlckdldERhdHVtKHNlZ1ApKTsK LQotCWVsb2coREVCVUc0LCAibXkgYmFja2VuZCBJRCBpcyAlZCIsIE15QmFja2VuZElkKTsK IH0KIAogLyoKQEAgLTM0NSw5NiArMzMxLDM2IEBAIENsZWFudXBJbnZhbGlkYXRpb25TdGF0 ZShpbnQgc3RhdHVzLCBEYXR1bSBhcmcpCiB7CiAJU0lTZWcJICAgKnNlZ1AgPSAoU0lTZWcg KikgRGF0dW1HZXRQb2ludGVyKGFyZyk7CiAJUHJvY1N0YXRlICAqc3RhdGVQOworCWludAkJ CXBncHJvY25vID0gTXlCYWNrZW5kSWQgLSAxOwogCWludAkJCWk7CiAKIAlBc3NlcnQoUG9p bnRlcklzVmFsaWQoc2VnUCkpOwogCiAJTFdMb2NrQWNxdWlyZShTSW52YWxXcml0ZUxvY2ss IExXX0VYQ0xVU0lWRSk7CiAKLQlzdGF0ZVAgPSAmc2VnUC0+cHJvY1N0YXRlW015QmFja2Vu ZElkIC0gMV07CisJc3RhdGVQID0gJnNlZ1AtPnByb2NTdGF0ZVtwZ3Byb2Nub107CiAKIAkv KiBVcGRhdGUgbmV4dCBsb2NhbCB0cmFuc2FjdGlvbiBJRCBmb3IgbmV4dCBob2xkZXIgb2Yg dGhpcyBiYWNrZW5kSUQgKi8KIAlzdGF0ZVAtPm5leHRMWElEID0gbmV4dExvY2FsVHJhbnNh Y3Rpb25JZDsKIAogCS8qIE1hcmsgbXlzZWxmIGluYWN0aXZlICovCiAJc3RhdGVQLT5wcm9j UGlkID0gMDsKLQlzdGF0ZVAtPnByb2MgPSBOVUxMOwogCXN0YXRlUC0+bmV4dE1zZ051bSA9 IDA7CiAJc3RhdGVQLT5yZXNldFN0YXRlID0gZmFsc2U7CiAJc3RhdGVQLT5zaWduYWxlZCA9 IGZhbHNlOwogCi0JLyogUmVjb21wdXRlIGluZGV4IG9mIGxhc3QgYWN0aXZlIGJhY2tlbmQg Ki8KLQlmb3IgKGkgPSBzZWdQLT5sYXN0QmFja2VuZDsgaSA+IDA7IGktLSkKKwlmb3IgKGkg PSBzZWdQLT5udW1Qcm9jcyAtIDE7IGkgPj0gMDsgaS0tKQogCXsKLQkJaWYgKHNlZ1AtPnBy b2NTdGF0ZVtpIC0gMV0ucHJvY1BpZCAhPSAwKQotCQkJYnJlYWs7Ci0JfQotCXNlZ1AtPmxh c3RCYWNrZW5kID0gaTsKLQotCUxXTG9ja1JlbGVhc2UoU0ludmFsV3JpdGVMb2NrKTsKLX0K LQotLyoKLSAqIEJhY2tlbmRJZEdldFByb2MKLSAqCQlHZXQgdGhlIFBHUFJPQyBzdHJ1Y3R1 cmUgZm9yIGEgYmFja2VuZCwgZ2l2ZW4gdGhlIGJhY2tlbmQgSUQuCi0gKgkJVGhlIHJlc3Vs dCBtYXkgYmUgb3V0IG9mIGRhdGUgYXJiaXRyYXJpbHkgcXVpY2tseSwgc28gdGhlIGNhbGxl cgotICoJCW11c3QgYmUgY2FyZWZ1bCBhYm91dCBob3cgdGhpcyBpbmZvcm1hdGlvbiBpcyB1 c2VkLiAgTlVMTCBpcwotICoJCXJldHVybmVkIGlmIHRoZSBiYWNrZW5kIGlzIG5vdCBhY3Rp dmUuCi0gKi8KLVBHUFJPQyAqCi1CYWNrZW5kSWRHZXRQcm9jKGludCBiYWNrZW5kSUQpCi17 Ci0JUEdQUk9DCSAgICpyZXN1bHQgPSBOVUxMOwotCVNJU2VnCSAgICpzZWdQID0gc2htSW52 YWxCdWZmZXI7Ci0KLQkvKiBOZWVkIHRvIGxvY2sgb3V0IGFkZGl0aW9ucy9yZW1vdmFscyBv ZiBiYWNrZW5kcyAqLwotCUxXTG9ja0FjcXVpcmUoU0ludmFsV3JpdGVMb2NrLCBMV19TSEFS RUQpOwotCi0JaWYgKGJhY2tlbmRJRCA+IDAgJiYgYmFja2VuZElEIDw9IHNlZ1AtPmxhc3RC YWNrZW5kKQotCXsKLQkJUHJvY1N0YXRlICAqc3RhdGVQID0gJnNlZ1AtPnByb2NTdGF0ZVti YWNrZW5kSUQgLSAxXTsKLQotCQlyZXN1bHQgPSBzdGF0ZVAtPnByb2M7Ci0JfQotCi0JTFdM b2NrUmVsZWFzZShTSW52YWxXcml0ZUxvY2spOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQot LyoKLSAqIEJhY2tlbmRJZEdldFRyYW5zYWN0aW9uSWRzCi0gKgkJR2V0IHRoZSB4aWQsIHht aW4sIG5zdWJ4aWQgYW5kIG92ZXJmbG93IHN0YXR1cyBvZiB0aGUgYmFja2VuZC4gVGhlCi0g KgkJcmVzdWx0IG1heSBiZSBvdXQgb2YgZGF0ZSBhcmJpdHJhcmlseSBxdWlja2x5LCBzbyB0 aGUgY2FsbGVyIG11c3QgYmUKLSAqCQljYXJlZnVsIGFib3V0IGhvdyB0aGlzIGluZm9ybWF0 aW9uIGlzIHVzZWQuCi0gKi8KLXZvaWQKLUJhY2tlbmRJZEdldFRyYW5zYWN0aW9uSWRzKGlu dCBiYWNrZW5kSUQsIFRyYW5zYWN0aW9uSWQgKnhpZCwKLQkJCQkJCSAgIFRyYW5zYWN0aW9u SWQgKnhtaW4sIGludCAqbnN1YnhpZCwgYm9vbCAqb3ZlcmZsb3dlZCkKLXsKLQlTSVNlZwkg ICAqc2VnUCA9IHNobUludmFsQnVmZmVyOwotCi0JKnhpZCA9IEludmFsaWRUcmFuc2FjdGlv bklkOwotCSp4bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JKm5zdWJ4aWQgPSAwOwot CSpvdmVyZmxvd2VkID0gZmFsc2U7Ci0KLQkvKiBOZWVkIHRvIGxvY2sgb3V0IGFkZGl0aW9u cy9yZW1vdmFscyBvZiBiYWNrZW5kcyAqLwotCUxXTG9ja0FjcXVpcmUoU0ludmFsV3JpdGVM b2NrLCBMV19TSEFSRUQpOwotCi0JaWYgKGJhY2tlbmRJRCA+IDAgJiYgYmFja2VuZElEIDw9 IHNlZ1AtPmxhc3RCYWNrZW5kKQotCXsKLQkJUHJvY1N0YXRlICAqc3RhdGVQID0gJnNlZ1At PnByb2NTdGF0ZVtiYWNrZW5kSUQgLSAxXTsKLQkJUEdQUk9DCSAgICpwcm9jID0gc3RhdGVQ LT5wcm9jOwotCi0JCWlmIChwcm9jICE9IE5VTEwpCisJCWlmIChzZWdQLT5wZ3Byb2Nub3Nb aV0gPT0gcGdwcm9jbm8pCiAJCXsKLQkJCSp4aWQgPSBwcm9jLT54aWQ7Ci0JCQkqeG1pbiA9 IHByb2MtPnhtaW47Ci0JCQkqbnN1YnhpZCA9IHByb2MtPnN1YnhpZFN0YXR1cy5jb3VudDsK LQkJCSpvdmVyZmxvd2VkID0gcHJvYy0+c3VieGlkU3RhdHVzLm92ZXJmbG93ZWQ7CisJCQlp ZiAoaSAhPSBzZWdQLT5udW1Qcm9jcyAtIDEpCisJCQkJc2VnUC0+cGdwcm9jbm9zW2ldID0g c2VnUC0+cGdwcm9jbm9zW3NlZ1AtPm51bVByb2NzIC0gMV07CisJCQlicmVhazsKIAkJfQog CX0KKwlpZiAoaSA8IDApCisJCWVsb2coUEFOSUMsICJjb3VsZCBub3QgZmluZCBlbnRyeSBp biBzaW52YWwgYXJyYXkiKTsKKwlzZWdQLT5udW1Qcm9jcy0tOwogCiAJTFdMb2NrUmVsZWFz ZShTSW52YWxXcml0ZUxvY2spOwogfQpAQCAtNTA3LDkgKzQzMyw5IEBAIFNJSW5zZXJ0RGF0 YUVudHJpZXMoY29uc3QgU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSAqZGF0YSwgaW50IG4p CiAJCSAqIHRoZXNlICh1bmxvY2tlZCkgY2hhbmdlcyB3aWxsIGJlIGNvbW1pdHRlZCB0byBt ZW1vcnkgYmVmb3JlIHdlIGV4aXQKIAkJICogdGhlIGZ1bmN0aW9uLgogCQkgKi8KLQkJZm9y IChpID0gMDsgaSA8IHNlZ1AtPmxhc3RCYWNrZW5kOyBpKyspCisJCWZvciAoaSA9IDA7IGkg PCBzZWdQLT5udW1Qcm9jczsgaSsrKQogCQl7Ci0JCQlQcm9jU3RhdGUgICpzdGF0ZVAgPSAm c2VnUC0+cHJvY1N0YXRlW2ldOworCQkJUHJvY1N0YXRlICAqc3RhdGVQID0gJnNlZ1AtPnBy b2NTdGF0ZVtzZWdQLT5wZ3Byb2Nub3NbaV1dOwogCiAJCQlzdGF0ZVAtPmhhc01lc3NhZ2Vz ID0gdHJ1ZTsKIAkJfQpAQCAtNjc3LDEzICs2MDMsMTQgQEAgU0lDbGVhbnVwUXVldWUoYm9v bCBjYWxsZXJIYXNXcml0ZUxvY2ssIGludCBtaW5GcmVlKQogCW1pbnNpZyA9IG1pbiAtIFNJ R19USFJFU0hPTEQ7CiAJbG93Ym91bmQgPSBtaW4gLSBNQVhOVU1NRVNTQUdFUyArIG1pbkZy ZWU7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2VnUC0+bGFzdEJhY2tlbmQ7IGkrKykKKwlmb3Ig KGkgPSAwOyBpIDwgc2VnUC0+bnVtUHJvY3M7IGkrKykKIAl7Ci0JCVByb2NTdGF0ZSAgKnN0 YXRlUCA9ICZzZWdQLT5wcm9jU3RhdGVbaV07CisJCVByb2NTdGF0ZSAgKnN0YXRlUCA9ICZz ZWdQLT5wcm9jU3RhdGVbc2VnUC0+cGdwcm9jbm9zW2ldXTsKIAkJaW50CQkJbiA9IHN0YXRl UC0+bmV4dE1zZ051bTsKIAotCQkvKiBJZ25vcmUgaWYgaW5hY3RpdmUgb3IgYWxyZWFkeSBp biByZXNldCBzdGF0ZSAqLwotCQlpZiAoc3RhdGVQLT5wcm9jUGlkID09IDAgfHwgc3RhdGVQ LT5yZXNldFN0YXRlIHx8IHN0YXRlUC0+c2VuZE9ubHkpCisJCS8qIElnbm9yZSBpZiBhbHJl YWR5IGluIHJlc2V0IHN0YXRlICovCisJCUFzc2VydChzdGF0ZVAtPnByb2NQaWQgIT0gMCk7 CisJCWlmIChzdGF0ZVAtPnJlc2V0U3RhdGUgfHwgc3RhdGVQLT5zZW5kT25seSkKIAkJCWNv bnRpbnVlOwogCiAJCS8qCkBAIC03MTksMTEgKzY0Niw4IEBAIFNJQ2xlYW51cFF1ZXVlKGJv b2wgY2FsbGVySGFzV3JpdGVMb2NrLCBpbnQgbWluRnJlZSkKIAl7CiAJCXNlZ1AtPm1pbk1z Z051bSAtPSBNU0dOVU1XUkFQQVJPVU5EOwogCQlzZWdQLT5tYXhNc2dOdW0gLT0gTVNHTlVN V1JBUEFST1VORDsKLQkJZm9yIChpID0gMDsgaSA8IHNlZ1AtPmxhc3RCYWNrZW5kOyBpKysp Ci0JCXsKLQkJCS8qIHdlIGRvbid0IGJvdGhlciBza2lwcGluZyBpbmFjdGl2ZSBlbnRyaWVz IGhlcmUgKi8KLQkJCXNlZ1AtPnByb2NTdGF0ZVtpXS5uZXh0TXNnTnVtIC09IE1TR05VTVdS QVBBUk9VTkQ7Ci0JCX0KKwkJZm9yIChpID0gMDsgaSA8IHNlZ1AtPm51bVByb2NzOyBpKysp CisJCQlzZWdQLT5wcm9jU3RhdGVbc2VnUC0+cGdwcm9jbm9zW2ldXS5uZXh0TXNnTnVtIC09 IE1TR05VTVdSQVBBUk9VTkQ7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3N0YW5kYnkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5k YnkuYwppbmRleCBkODc1NWExMDZkNS4uOTdkMWFiNjU3NDAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9zdGFuZGJ5LmMKQEAgLTEzNyw2ICsxMzcsNyBAQCBJbml0UmVjb3ZlcnlUcmFuc2Fj dGlvbkVudmlyb25tZW50KHZvaWQpCiAJICogYXJlIGhlbGQgYnkgdnhpZHMgYW5kIHJvdyBs ZXZlbCBsb2NrcyBhcmUgaGVsZCBieSB4aWRzLiBBbGwgcXVlcmllcwogCSAqIGhvbGQgQWNj ZXNzU2hhcmVMb2NrcyBzbyBuZXZlciBibG9jayB3aGlsZSB3ZSB3cml0ZSBvciBsb2NrIG5l dyByb3dzLgogCSAqLworCU15UHJvYy0+dnhpZC5iYWNrZW5kSWQgPSBNeUJhY2tlbmRJZDsK IAl2eGlkLmJhY2tlbmRJZCA9IE15QmFja2VuZElkOwogCXZ4aWQubG9jYWxUcmFuc2FjdGlv bklkID0gR2V0TmV4dExvY2FsVHJhbnNhY3Rpb25JZCgpOwogCVZpcnR1YWxYYWN0TG9ja1Rh YmxlSW5zZXJ0KHZ4aWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L2xvY2suYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMKaW5kZXggYzcwYTFh ZGI5YWQuLmU2Mjk2OGI0YTg2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvbG9jay5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMKQEAgLTM2 MjUsOCArMzYyNSw4IEBAIEdldExvY2tTdGF0dXNEYXRhKHZvaWQpCiAJCQkJCQkJCSBwcm9j LT5mcFJlbElkW2ZdKTsKIAkJCWluc3RhbmNlLT5ob2xkTWFzayA9IGxvY2tiaXRzIDw8IEZB U1RfUEFUSF9MT0NLTlVNQkVSX09GRlNFVDsKIAkJCWluc3RhbmNlLT53YWl0TG9ja01vZGUg PSBOb0xvY2s7Ci0JCQlpbnN0YW5jZS0+YmFja2VuZCA9IHByb2MtPmJhY2tlbmRJZDsKLQkJ CWluc3RhbmNlLT5seGlkID0gcHJvYy0+bHhpZDsKKwkJCWluc3RhbmNlLT52eGlkLmJhY2tl bmRJZCA9IHByb2MtPnZ4aWQuYmFja2VuZElkOworCQkJaW5zdGFuY2UtPnZ4aWQubG9jYWxU cmFuc2FjdGlvbklkID0gcHJvYy0+dnhpZC5seGlkOwogCQkJaW5zdGFuY2UtPnBpZCA9IHBy b2MtPnBpZDsKIAkJCWluc3RhbmNlLT5sZWFkZXJQaWQgPSBwcm9jLT5waWQ7CiAJCQlpbnN0 YW5jZS0+ZmFzdHBhdGggPSB0cnVlOwpAQCAtMzY1MiwxNSArMzY1MiwxNSBAQCBHZXRMb2Nr U3RhdHVzRGF0YSh2b2lkKQogCQkJCQlyZXBhbGxvYyhkYXRhLT5sb2Nrcywgc2l6ZW9mKExv Y2tJbnN0YW5jZURhdGEpICogZWxzKTsKIAkJCX0KIAotCQkJdnhpZC5iYWNrZW5kSWQgPSBw cm9jLT5iYWNrZW5kSWQ7CisJCQl2eGlkLmJhY2tlbmRJZCA9IHByb2MtPnZ4aWQuYmFja2Vu ZElkOwogCQkJdnhpZC5sb2NhbFRyYW5zYWN0aW9uSWQgPSBwcm9jLT5mcExvY2FsVHJhbnNh Y3Rpb25JZDsKIAogCQkJaW5zdGFuY2UgPSAmZGF0YS0+bG9ja3NbZWxdOwogCQkJU0VUX0xP Q0tUQUdfVklSVFVBTFRSQU5TQUNUSU9OKGluc3RhbmNlLT5sb2NrdGFnLCB2eGlkKTsKIAkJ CWluc3RhbmNlLT5ob2xkTWFzayA9IExPQ0tCSVRfT04oRXhjbHVzaXZlTG9jayk7CiAJCQlp bnN0YW5jZS0+d2FpdExvY2tNb2RlID0gTm9Mb2NrOwotCQkJaW5zdGFuY2UtPmJhY2tlbmQg PSBwcm9jLT5iYWNrZW5kSWQ7Ci0JCQlpbnN0YW5jZS0+bHhpZCA9IHByb2MtPmx4aWQ7CisJ CQlpbnN0YW5jZS0+dnhpZC5iYWNrZW5kSWQgPSBwcm9jLT52eGlkLmJhY2tlbmRJZDsKKwkJ CWluc3RhbmNlLT52eGlkLmxvY2FsVHJhbnNhY3Rpb25JZCA9IHByb2MtPnZ4aWQubHhpZDsK IAkJCWluc3RhbmNlLT5waWQgPSBwcm9jLT5waWQ7CiAJCQlpbnN0YW5jZS0+bGVhZGVyUGlk ID0gcHJvYy0+cGlkOwogCQkJaW5zdGFuY2UtPmZhc3RwYXRoID0gdHJ1ZTsKQEAgLTM3MTIs OCArMzcxMiw4IEBAIEdldExvY2tTdGF0dXNEYXRhKHZvaWQpCiAJCQlpbnN0YW5jZS0+d2Fp dExvY2tNb2RlID0gcHJvYy0+d2FpdExvY2tNb2RlOwogCQllbHNlCiAJCQlpbnN0YW5jZS0+ d2FpdExvY2tNb2RlID0gTm9Mb2NrOwotCQlpbnN0YW5jZS0+YmFja2VuZCA9IHByb2MtPmJh Y2tlbmRJZDsKLQkJaW5zdGFuY2UtPmx4aWQgPSBwcm9jLT5seGlkOworCQlpbnN0YW5jZS0+ dnhpZC5iYWNrZW5kSWQgPSBwcm9jLT52eGlkLmJhY2tlbmRJZDsKKwkJaW5zdGFuY2UtPnZ4 aWQubG9jYWxUcmFuc2FjdGlvbklkID0gcHJvYy0+dnhpZC5seGlkOwogCQlpbnN0YW5jZS0+ cGlkID0gcHJvYy0+cGlkOwogCQlpbnN0YW5jZS0+bGVhZGVyUGlkID0gcHJvY2xvY2stPmdy b3VwTGVhZGVyLT5waWQ7CiAJCWluc3RhbmNlLT5mYXN0cGF0aCA9IGZhbHNlOwpAQCAtMzg4 OCw4ICszODg4LDggQEAgR2V0U2luZ2xlUHJvY0Jsb2NrZXJTdGF0dXNEYXRhKFBHUFJPQyAq YmxvY2tlZF9wcm9jLCBCbG9ja2VkUHJvY3NEYXRhICpkYXRhKQogCQkJaW5zdGFuY2UtPndh aXRMb2NrTW9kZSA9IHByb2MtPndhaXRMb2NrTW9kZTsKIAkJZWxzZQogCQkJaW5zdGFuY2Ut PndhaXRMb2NrTW9kZSA9IE5vTG9jazsKLQkJaW5zdGFuY2UtPmJhY2tlbmQgPSBwcm9jLT5i YWNrZW5kSWQ7Ci0JCWluc3RhbmNlLT5seGlkID0gcHJvYy0+bHhpZDsKKwkJaW5zdGFuY2Ut PnZ4aWQuYmFja2VuZElkID0gcHJvYy0+dnhpZC5iYWNrZW5kSWQ7CisJCWluc3RhbmNlLT52 eGlkLmxvY2FsVHJhbnNhY3Rpb25JZCA9IHByb2MtPnZ4aWQubHhpZDsKIAkJaW5zdGFuY2Ut PnBpZCA9IHByb2MtPnBpZDsKIAkJaW5zdGFuY2UtPmxlYWRlclBpZCA9IHByb2Nsb2NrLT5n cm91cExlYWRlci0+cGlkOwogCQlpbnN0YW5jZS0+ZmFzdHBhdGggPSBmYWxzZTsKQEAgLTQz NzQsOCArNDM3NCw4IEBAIGxvY2tfdHdvcGhhc2VfcG9zdGFib3J0KFRyYW5zYWN0aW9uSWQg eGlkLCB1aW50MTYgaW5mbywKICAqCQlsb2NrZXJzLCBhcyB3ZSBoYXZlbid0IGFkdmVydGlz ZWQgdGhpcyB2eGlkIHZpYSB0aGUgUHJvY0FycmF5IHlldC4KICAqCiAgKgkJU2luY2UgTXlQ cm9jLT5mcExvY2FsVHJhbnNhY3Rpb25JZCB3aWxsIG5vcm1hbGx5IGNvbnRhaW4gdGhlIHNh bWUgZGF0YQotICoJCWFzIE15UHJvYy0+bHhpZCwgeW91IG1pZ2h0IHdvbmRlciBpZiB3ZSBy ZWFsbHkgbmVlZCBib3RoLiAgVGhlCi0gKgkJZGlmZmVyZW5jZSBpcyB0aGF0IE15UHJvYy0+ bHhpZCBpcyBzZXQgYW5kIGNsZWFyZWQgdW5sb2NrZWQsIGFuZAorICoJCWFzIE15UHJvYy0+ dnhpZC5seGlkLCB5b3UgbWlnaHQgd29uZGVyIGlmIHdlIHJlYWxseSBuZWVkIGJvdGguICBU aGUKKyAqCQlkaWZmZXJlbmNlIGlzIHRoYXQgTXlQcm9jLT52eGlkLmx4aWQgaXMgc2V0IGFu ZCBjbGVhcmVkIHVubG9ja2VkLCBhbmQKICAqCQlleGFtaW5lZCBieSBwcm9jYXJyYXkuYywg d2hpbGUgZnBMb2NhbFRyYW5zYWN0aW9uSWQgaXMgcHJvdGVjdGVkIGJ5CiAgKgkJZnBJbmZv TG9jayBhbmQgaXMgdXNlZCBvbmx5IGJ5IHRoZSBsb2NraW5nIHN1YnN5c3RlbS4gIERvaW5n IGl0IHRoaXMKICAqCQl3YXkgbWFrZXMgaXQgZWFzaWVyIHRvIHZlcmlmeSB0aGF0IHRoZXJl IGFyZSBubyBmdW5ueSByYWNlIGNvbmRpdGlvbnMuCkBAIC00MzkxLDcgKzQzOTEsNyBAQCBW aXJ0dWFsWGFjdExvY2tUYWJsZUluc2VydChWaXJ0dWFsVHJhbnNhY3Rpb25JZCB2eGlkKQog CiAJTFdMb2NrQWNxdWlyZSgmTXlQcm9jLT5mcEluZm9Mb2NrLCBMV19FWENMVVNJVkUpOwog Ci0JQXNzZXJ0KE15UHJvYy0+YmFja2VuZElkID09IHZ4aWQuYmFja2VuZElkKTsKKwlBc3Nl cnQoTXlQcm9jLT52eGlkLmJhY2tlbmRJZCA9PSB2eGlkLmJhY2tlbmRJZCk7CiAJQXNzZXJ0 KE15UHJvYy0+ZnBMb2NhbFRyYW5zYWN0aW9uSWQgPT0gSW52YWxpZExvY2FsVHJhbnNhY3Rp b25JZCk7CiAJQXNzZXJ0KE15UHJvYy0+ZnBWWElETG9jayA9PSBmYWxzZSk7CiAKQEAgLTQ0 MTMsNyArNDQxMyw3IEBAIFZpcnR1YWxYYWN0TG9ja1RhYmxlQ2xlYW51cCh2b2lkKQogCWJv b2wJCWZhc3RwYXRoOwogCUxvY2FsVHJhbnNhY3Rpb25JZCBseGlkOwogCi0JQXNzZXJ0KE15 UHJvYy0+YmFja2VuZElkICE9IEludmFsaWRCYWNrZW5kSWQpOworCUFzc2VydChNeVByb2Mt PnZ4aWQuYmFja2VuZElkICE9IEludmFsaWRCYWNrZW5kSWQpOwogCiAJLyoKIAkgKiBDbGVh biB1cCBzaGFyZWQgbWVtb3J5IHN0YXRlLgpAQCAtNDU0MSw3ICs0NTQxLDcgQEAgVmlydHVh bFhhY3RMb2NrKFZpcnR1YWxUcmFuc2FjdGlvbklkIHZ4aWQsIGJvb2wgd2FpdCkKIAkgKi8K IAlMV0xvY2tBY3F1aXJlKCZwcm9jLT5mcEluZm9Mb2NrLCBMV19FWENMVVNJVkUpOwogCi0J aWYgKHByb2MtPmJhY2tlbmRJZCAhPSB2eGlkLmJhY2tlbmRJZAorCWlmIChwcm9jLT52eGlk LmJhY2tlbmRJZCAhPSB2eGlkLmJhY2tlbmRJZAogCQl8fCBwcm9jLT5mcExvY2FsVHJhbnNh Y3Rpb25JZCAhPSB2eGlkLmxvY2FsVHJhbnNhY3Rpb25JZCkKIAl7CiAJCS8qIFZYSUQgZW5k ZWQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCmluZGV4IGZkZGY0NDAxNWZkLi40MjI2 ZTQxZDgwYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwor KysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCkBAIC0yNDAsMjUgKzI0MCwy NSBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCQlpZiAoaSA8IE1heENvbm5lY3Rpb25zKQog CQl7CiAJCQkvKiBQR1BST0MgZm9yIG5vcm1hbCBiYWNrZW5kLCBhZGQgdG8gZnJlZVByb2Nz IGxpc3QgKi8KLQkJCWRsaXN0X3B1c2hfaGVhZCgmUHJvY0dsb2JhbC0+ZnJlZVByb2NzLCAm cHJvYy0+bGlua3MpOworCQkJZGxpc3RfcHVzaF90YWlsKCZQcm9jR2xvYmFsLT5mcmVlUHJv Y3MsICZwcm9jLT5saW5rcyk7CiAJCQlwcm9jLT5wcm9jZ2xvYmFsbGlzdCA9ICZQcm9jR2xv YmFsLT5mcmVlUHJvY3M7CiAJCX0KIAkJZWxzZSBpZiAoaSA8IE1heENvbm5lY3Rpb25zICsg YXV0b3ZhY3V1bV9tYXhfd29ya2VycyArIDEpCiAJCXsKIAkJCS8qIFBHUFJPQyBmb3IgQVYg bGF1bmNoZXIvd29ya2VyLCBhZGQgdG8gYXV0b3ZhY0ZyZWVQcm9jcyBsaXN0ICovCi0JCQlk bGlzdF9wdXNoX2hlYWQoJlByb2NHbG9iYWwtPmF1dG92YWNGcmVlUHJvY3MsICZwcm9jLT5s aW5rcyk7CisJCQlkbGlzdF9wdXNoX3RhaWwoJlByb2NHbG9iYWwtPmF1dG92YWNGcmVlUHJv Y3MsICZwcm9jLT5saW5rcyk7CiAJCQlwcm9jLT5wcm9jZ2xvYmFsbGlzdCA9ICZQcm9jR2xv YmFsLT5hdXRvdmFjRnJlZVByb2NzOwogCQl9CiAJCWVsc2UgaWYgKGkgPCBNYXhDb25uZWN0 aW9ucyArIGF1dG92YWN1dW1fbWF4X3dvcmtlcnMgKyAxICsgbWF4X3dvcmtlcl9wcm9jZXNz ZXMpCiAJCXsKIAkJCS8qIFBHUFJPQyBmb3IgYmd3b3JrZXIsIGFkZCB0byBiZ3dvcmtlckZy ZWVQcm9jcyBsaXN0ICovCi0JCQlkbGlzdF9wdXNoX2hlYWQoJlByb2NHbG9iYWwtPmJnd29y a2VyRnJlZVByb2NzLCAmcHJvYy0+bGlua3MpOworCQkJZGxpc3RfcHVzaF90YWlsKCZQcm9j R2xvYmFsLT5iZ3dvcmtlckZyZWVQcm9jcywgJnByb2MtPmxpbmtzKTsKIAkJCXByb2MtPnBy b2NnbG9iYWxsaXN0ID0gJlByb2NHbG9iYWwtPmJnd29ya2VyRnJlZVByb2NzOwogCQl9CiAJ CWVsc2UgaWYgKGkgPCBNYXhCYWNrZW5kcykKIAkJewogCQkJLyogUEdQUk9DIGZvciB3YWxz ZW5kZXIsIGFkZCB0byB3YWxzZW5kZXJGcmVlUHJvY3MgbGlzdCAqLwotCQkJZGxpc3RfcHVz aF9oZWFkKCZQcm9jR2xvYmFsLT53YWxzZW5kZXJGcmVlUHJvY3MsICZwcm9jLT5saW5rcyk7 CisJCQlkbGlzdF9wdXNoX3RhaWwoJlByb2NHbG9iYWwtPndhbHNlbmRlckZyZWVQcm9jcywg JnByb2MtPmxpbmtzKTsKIAkJCXByb2MtPnByb2NnbG9iYWxsaXN0ID0gJlByb2NHbG9iYWwt PndhbHNlbmRlckZyZWVQcm9jczsKIAkJfQogCkBAIC0zNTMsNiArMzUzLDcgQEAgSW5pdFBy b2Nlc3Modm9pZCkKIAkJCQkgZXJybXNnKCJzb3JyeSwgdG9vIG1hbnkgY2xpZW50cyBhbHJl YWR5IikpKTsKIAl9CiAJTXlQcm9jTnVtYmVyID0gR2V0TnVtYmVyRnJvbVBHUHJvYyhNeVBy b2MpOworCU15QmFja2VuZElkID0gR2V0QmFja2VuZElkRnJvbVBHUHJvYyhNeVByb2MpOwog CiAJLyoKIAkgKiBDcm9zcy1jaGVjayB0aGF0IHRoZSBQR1BST0MgaXMgb2YgdGhlIHR5cGUg d2UgZXhwZWN0OyBpZiB0aGlzIHdlcmUgbm90CkBAIC0zNzUsMTQgKzM3NiwxNCBAQCBJbml0 UHJvY2Vzcyh2b2lkKQogCSAqLwogCWRsaXN0X25vZGVfaW5pdCgmTXlQcm9jLT5saW5rcyk7 CiAJTXlQcm9jLT53YWl0U3RhdHVzID0gUFJPQ19XQUlUX1NUQVRVU19PSzsKLQlNeVByb2Mt Pmx4aWQgPSBJbnZhbGlkTG9jYWxUcmFuc2FjdGlvbklkOwogCU15UHJvYy0+ZnBWWElETG9j ayA9IGZhbHNlOwogCU15UHJvYy0+ZnBMb2NhbFRyYW5zYWN0aW9uSWQgPSBJbnZhbGlkTG9j YWxUcmFuc2FjdGlvbklkOwogCU15UHJvYy0+eGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7 CiAJTXlQcm9jLT54bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAJTXlQcm9jLT5waWQg PSBNeVByb2NQaWQ7Ci0JLyogYmFja2VuZElkLCBkYXRhYmFzZUlkIGFuZCByb2xlSWQgd2ls bCBiZSBmaWxsZWQgaW4gbGF0ZXIgKi8KLQlNeVByb2MtPmJhY2tlbmRJZCA9IEludmFsaWRC YWNrZW5kSWQ7CisJTXlQcm9jLT52eGlkLmJhY2tlbmRJZCA9IE15QmFja2VuZElkOworCU15 UHJvYy0+dnhpZC5seGlkID0gSW52YWxpZExvY2FsVHJhbnNhY3Rpb25JZDsKKwkvKiBkYXRh YmFzZUlkIGFuZCByb2xlSWQgd2lsbCBiZSBmaWxsZWQgaW4gbGF0ZXIgKi8KIAlNeVByb2Mt PmRhdGFiYXNlSWQgPSBJbnZhbGlkT2lkOwogCU15UHJvYy0+cm9sZUlkID0gSW52YWxpZE9p ZDsKIAlNeVByb2MtPnRlbXBOYW1lc3BhY2VJZCA9IEludmFsaWRPaWQ7CkBAIC01NjIsMTEg KzU2MywxMSBAQCBJbml0QXV4aWxpYXJ5UHJvY2Vzcyh2b2lkKQogCS8qIHVzZSB2b2xhdGls ZSBwb2ludGVyIHRvIHByZXZlbnQgY29kZSByZWFycmFuZ2VtZW50ICovCiAJKCh2b2xhdGls ZSBQR1BST0MgKikgYXV4cHJvYyktPnBpZCA9IE15UHJvY1BpZDsKIAotCU15UHJvYyA9IGF1 eHByb2M7Ci0KIAlTcGluTG9ja1JlbGVhc2UoUHJvY1N0cnVjdExvY2spOwogCisJTXlQcm9j ID0gYXV4cHJvYzsKIAlNeVByb2NOdW1iZXIgPSBHZXROdW1iZXJGcm9tUEdQcm9jKE15UHJv Yyk7CisJTXlCYWNrZW5kSWQgPSBHZXRCYWNrZW5kSWRGcm9tUEdQcm9jKE15UHJvYyk7CiAK IAkvKgogCSAqIEluaXRpYWxpemUgYWxsIGZpZWxkcyBvZiBNeVByb2MsIGV4Y2VwdCBmb3Ig dGhvc2UgcHJldmlvdXNseQpAQCAtNTc0LDEyICs1NzUsMTIgQEAgSW5pdEF1eGlsaWFyeVBy b2Nlc3Modm9pZCkKIAkgKi8KIAlkbGlzdF9ub2RlX2luaXQoJk15UHJvYy0+bGlua3MpOwog CU15UHJvYy0+d2FpdFN0YXR1cyA9IFBST0NfV0FJVF9TVEFUVVNfT0s7Ci0JTXlQcm9jLT5s eGlkID0gSW52YWxpZExvY2FsVHJhbnNhY3Rpb25JZDsKIAlNeVByb2MtPmZwVlhJRExvY2sg PSBmYWxzZTsKIAlNeVByb2MtPmZwTG9jYWxUcmFuc2FjdGlvbklkID0gSW52YWxpZExvY2Fs VHJhbnNhY3Rpb25JZDsKIAlNeVByb2MtPnhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwog CU15UHJvYy0+eG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOwotCU15UHJvYy0+YmFja2Vu ZElkID0gSW52YWxpZEJhY2tlbmRJZDsKKwlNeVByb2MtPnZ4aWQuYmFja2VuZElkID0gSW52 YWxpZEJhY2tlbmRJZDsKKwlNeVByb2MtPnZ4aWQubHhpZCA9IEludmFsaWRMb2NhbFRyYW5z YWN0aW9uSWQ7CiAJTXlQcm9jLT5kYXRhYmFzZUlkID0gSW52YWxpZE9pZDsKIAlNeVByb2Mt PnJvbGVJZCA9IEludmFsaWRPaWQ7CiAJTXlQcm9jLT50ZW1wTmFtZXNwYWNlSWQgPSBJbnZh bGlkT2lkOwpAQCAtOTEwLDggKzkxMSwxNCBAQCBQcm9jS2lsbChpbnQgY29kZSwgRGF0dW0g YXJnKQogCXByb2MgPSBNeVByb2M7CiAJTXlQcm9jID0gTlVMTDsKIAlNeVByb2NOdW1iZXIg PSBJTlZBTElEX1BHUFJPQ05POworCU15QmFja2VuZElkID0gSW52YWxpZEJhY2tlbmRJZDsK IAlEaXNvd25MYXRjaCgmcHJvYy0+cHJvY0xhdGNoKTsKIAorCS8qIE1hcmsgdGhlIHByb2Mg bm8gbG9uZ2VyIGluIHVzZSAqLworCXByb2MtPnBpZCA9IDA7CisJcHJvYy0+dnhpZC5iYWNr ZW5kSWQgPSBJbnZhbGlkQmFja2VuZElkOworCXByb2MtPnZ4aWQubHhpZCA9IEludmFsaWRU cmFuc2FjdGlvbklkOworCiAJcHJvY2dsb2JhbGxpc3QgPSBwcm9jLT5wcm9jZ2xvYmFsbGlz dDsKIAlTcGluTG9ja0FjcXVpcmUoUHJvY1N0cnVjdExvY2spOwogCkBAIC05ODIsNiArOTg5 LDcgQEAgQXV4aWxpYXJ5UHJvY0tpbGwoaW50IGNvZGUsIERhdHVtIGFyZykKIAlwcm9jID0g TXlQcm9jOwogCU15UHJvYyA9IE5VTEw7CiAJTXlQcm9jTnVtYmVyID0gSU5WQUxJRF9QR1BS T0NOTzsKKwlNeUJhY2tlbmRJZCA9IEludmFsaWRCYWNrZW5kSWQ7CiAJRGlzb3duTGF0Y2go JnByb2MtPnByb2NMYXRjaCk7CiAKIAlTcGluTG9ja0FjcXVpcmUoUHJvY1N0cnVjdExvY2sp OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvYmFja2VuZF9zdGF0 dXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L2JhY2tlbmRfc3RhdHVzLmMKaW5k ZXggMWExMDUwYzhkYTEuLjNkM2Y3YjA2NzIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hY3Rpdml0eS9iYWNrZW5kX3N0YXR1cy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L2JhY2tlbmRfc3RhdHVzLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRl ICJwb3J0L2F0b21pY3MuaCIJCS8qIGZvciBtZW1vcnkgYmFycmllcnMgKi8KICNpbmNsdWRl ICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgkJLyogZm9yIE15 UHJvYyAqLworI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9zaW52YWxhZHQuaCIKICNpbmNsdWRlICJ1dGlscy9hc2NpaS5oIgogI2luY2x1ZGUg InV0aWxzL2JhY2tlbmRfc3RhdHVzLmgiCkBAIC0yOSwxMyArMzAsMTIgQEAKIC8qIC0tLS0t LS0tLS0KICAqIFRvdGFsIG51bWJlciBvZiBiYWNrZW5kcyBpbmNsdWRpbmcgYXV4aWxpYXJ5 CiAgKgotICogV2UgcmVzZXJ2ZSBhIHNsb3QgZm9yIGVhY2ggcG9zc2libGUgQmFja2VuZElk LCBwbHVzIG9uZSBmb3IgZWFjaAotICogcG9zc2libGUgYXV4aWxpYXJ5IHByb2Nlc3MgdHlw ZS4gIChUaGlzIHNjaGVtZSBhc3N1bWVzIHRoZXJlIGlzIG5vdAotICogbW9yZSB0aGFuIG9u ZSBvZiBhbnkgYXV4aWxpYXJ5IHByb2Nlc3MgdHlwZSBhdCBhIHRpbWUuKSBNYXhCYWNrZW5k cwotICogaW5jbHVkZXMgYXV0b3ZhY3V1bSB3b3JrZXJzIGFuZCBiYWNrZ3JvdW5kIHdvcmtl cnMgYXMgd2VsbC4KKyAqIFdlIHJlc2VydmUgYSBzbG90IGZvciBlYWNoIHBvc3NpYmxlIFBH UFJPQyBlbnRyeSwgaW5jbHVkaW5nIGF1eCBwcm9jZXNzZXMuCisgKiAoQnV0IG5vdCBpbmNs dWRpbmcgUEdQUk9DIGVudHJpZXMgcmVzZXJ2ZWQgZm9yIHByZXBhcmVkIHhhY3RzOyB0aGV5 IGFyZSBub3QKKyAqIHJlYWwgcHJvY2Vzc2VzLikKICAqIC0tLS0tLS0tLS0KICAqLwotI2Rl ZmluZSBOdW1CYWNrZW5kU3RhdFNsb3RzIChNYXhCYWNrZW5kcyArIE5VTV9BVVhQUk9DVFlQ RVMpCisjZGVmaW5lIE51bUJhY2tlbmRTdGF0U2xvdHMgKE1heEJhY2tlbmRzICsgTlVNX0FV WElMSUFSWV9QUk9DUykKIAogCiAvKiAtLS0tLS0tLS0tCkBAIC0yMzgsMTAgKzIzOCw5IEBA IENyZWF0ZVNoYXJlZEJhY2tlbmRTdGF0dXModm9pZCkKIAogLyoKICAqIEluaXRpYWxpemUg cGdzdGF0cyBiYWNrZW5kIGFjdGl2aXR5IHN0YXRlLCBhbmQgc2V0IHVwIG91ciBvbi1wcm9j LWV4aXQKLSAqIGhvb2suICBDYWxsZWQgZnJvbSBJbml0UG9zdGdyZXMgYW5kIEF1eGlsaWFy eVByb2Nlc3NNYWluLiBGb3IgYXV4aWxpYXJ5Ci0gKiBwcm9jZXNzLCBNeUJhY2tlbmRJZCBp cyBpbnZhbGlkLiBPdGhlcndpc2UsIE15QmFja2VuZElkIG11c3QgYmUgc2V0LCBidXQgd2UK LSAqIG11c3Qgbm90IGhhdmUgc3RhcnRlZCBhbnkgdHJhbnNhY3Rpb24geWV0IChzaW5jZSB0 aGUgZXhpdCBob29rIG11c3QgcnVuCi0gKiBhZnRlciB0aGUgbGFzdCB0cmFuc2FjdGlvbiBl eGl0KS4KKyAqIGhvb2suICBDYWxsZWQgZnJvbSBJbml0UG9zdGdyZXMgYW5kIEF1eGlsaWFy eVByb2Nlc3NNYWluLiAgTXlCYWNrZW5kSWQgbXVzdAorICogYmUgc2V0LCBidXQgd2UgbXVz dCBub3QgaGF2ZSBzdGFydGVkIGFueSB0cmFuc2FjdGlvbiB5ZXQgKHNpbmNlIHRoZSBleGl0 CisgKiBob29rIG11c3QgcnVuIGFmdGVyIHRoZSBsYXN0IHRyYW5zYWN0aW9uIGV4aXQpLgog ICoKICAqIE5PVEU6IE15RGF0YWJhc2VJZCBpc24ndCBzZXQgeWV0OyBzbyB0aGUgc2h1dGRv d24gaG9vayBoYXMgdG8gYmUgY2FyZWZ1bC4KICAqLwpAQCAtMjQ5LDI2ICsyNDgsOSBAQCB2 b2lkCiBwZ3N0YXRfYmVpbml0KHZvaWQpCiB7CiAJLyogSW5pdGlhbGl6ZSBNeUJFRW50cnkg Ki8KLQlpZiAoTXlCYWNrZW5kSWQgIT0gSW52YWxpZEJhY2tlbmRJZCkKLQl7Ci0JCUFzc2Vy dChNeUJhY2tlbmRJZCA+PSAxICYmIE15QmFja2VuZElkIDw9IE1heEJhY2tlbmRzKTsKLQkJ TXlCRUVudHJ5ID0gJkJhY2tlbmRTdGF0dXNBcnJheVtNeUJhY2tlbmRJZCAtIDFdOwotCX0K LQllbHNlCi0JewotCQkvKiBNdXN0IGJlIGFuIGF1eGlsaWFyeSBwcm9jZXNzICovCi0JCUFz c2VydChNeUF1eFByb2NUeXBlICE9IE5vdEFuQXV4UHJvY2Vzcyk7Ci0KLQkJLyoKLQkJICog QXNzaWduIHRoZSBNeUJFRW50cnkgZm9yIGFuIGF1eGlsaWFyeSBwcm9jZXNzLiAgU2luY2Ug aXQgZG9lc24ndAotCQkgKiBoYXZlIGEgQmFja2VuZElkLCB0aGUgc2xvdCBpcyBzdGF0aWNh bGx5IGFsbG9jYXRlZCBiYXNlZCBvbiB0aGUKLQkJICogYXV4aWxpYXJ5IHByb2Nlc3MgdHlw ZSAoTXlBdXhQcm9jVHlwZSkuICBCYWNrZW5kcyB1c2Ugc2xvdHMgaW5kZXhlZAotCQkgKiBp biB0aGUgcmFuZ2UgZnJvbSAwIHRvIE1heEJhY2tlbmRzIChleGNsdXNpdmUpLCBzbyB3ZSB1 c2UKLQkJICogTWF4QmFja2VuZHMgKyBBdXhQcm9jVHlwZSBhcyB0aGUgaW5kZXggb2YgdGhl IHNsb3QgZm9yIGFuIGF1eGlsaWFyeQotCQkgKiBwcm9jZXNzLgotCQkgKi8KLQkJTXlCRUVu dHJ5ID0gJkJhY2tlbmRTdGF0dXNBcnJheVtNYXhCYWNrZW5kcyArIE15QXV4UHJvY1R5cGVd OwotCX0KKwlBc3NlcnQoTXlCYWNrZW5kSWQgIT0gSW52YWxpZEJhY2tlbmRJZCk7CisJQXNz ZXJ0KE15QmFja2VuZElkID49IDEgJiYgTXlCYWNrZW5kSWQgPD0gTnVtQmFja2VuZFN0YXRT bG90cyk7CisJTXlCRUVudHJ5ID0gJkJhY2tlbmRTdGF0dXNBcnJheVtNeUJhY2tlbmRJZCAt IDFdOwogCiAJLyogU2V0IHVwIGEgcHJvY2Vzcy1leGl0IGhvb2sgdG8gY2xlYW4gdXAgKi8K IAlvbl9zaG1lbV9leGl0KHBnc3RhdF9iZXNodXRkb3duX2hvb2ssIDApOwpAQCAtMjgxLDEy ICsyNjMsMTIgQEAgcGdzdGF0X2JlaW5pdCh2b2lkKQogICoJSW5pdGlhbGl6ZSB0aGlzIGJh Y2tlbmQncyBlbnRyeSBpbiB0aGUgUGdCYWNrZW5kU3RhdHVzIGFycmF5LgogICoJQ2FsbGVk IGZyb20gSW5pdFBvc3RncmVzLgogICoKLSAqCUFwYXJ0IGZyb20gYXV4aWxpYXJ5IHByb2Nl c3NlcywgTXlCYWNrZW5kSWQsIE15RGF0YWJhc2VJZCwKLSAqCXNlc3Npb24gdXNlcmlkLCBh bmQgYXBwbGljYXRpb25fbmFtZSBtdXN0IGJlIHNldCBmb3IgYQotICoJYmFja2VuZCAoaGVu Y2UsIHRoaXMgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggcGdzdGF0X2JlaW5pdCkuCi0gKglO b3RlIGFsc28gdGhhdCB3ZSBtdXN0IGJlIGluc2lkZSBhIHRyYW5zYWN0aW9uIGlmIHRoaXMg aXNuJ3QgYW4gYXV4Ci0gKglwcm9jZXNzLCBhcyB3ZSBtYXkgbmVlZCB0byBkbyBlbmNvZGlu ZyBjb252ZXJzaW9uIG9uIHNvbWUgc3RyaW5ncy4KLSAqIC0tLS0tLS0tLS0KKyAqCUFwYXJ0 IGZyb20gYXV4aWxpYXJ5IHByb2Nlc3NlcywgTXlEYXRhYmFzZUlkLCBzZXNzaW9uIHVzZXJp ZCwgYW5kCisgKglhcHBsaWNhdGlvbl9uYW1lIG11c3QgYWxyZWFkeSBiZSBzZXQgKGhlbmNl LCB0aGlzIGNhbm5vdCBiZSBjb21iaW5lZAorICoJd2l0aCBwZ3N0YXRfYmVpbml0KS4gIE5v dGUgYWxzbyB0aGF0IHdlIG11c3QgYmUgaW5zaWRlIGEgdHJhbnNhY3Rpb24KKyAqCWlmIHRo aXMgaXNuJ3QgYW4gYXV4IHByb2Nlc3MsIGFzIHdlIG1heSBuZWVkIHRvIGRvIGVuY29kaW5n IGNvbnZlcnNpb24KKyAqCW9uIHNvbWUgc3RyaW5ncy4KKyAqLS0tLS0tLS0tLQogICovCiB2 b2lkCiBwZ3N0YXRfYmVzdGFydCh2b2lkKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2xvY2tmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xvY2tmdW5jcy5j CmluZGV4IDRiNDlmN2ZlM2Q4Li5iYmU1Y2MwODA2ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2xvY2tmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9s b2NrZnVuY3MuYwpAQCAtMzUzLDcgKzM1Myw3IEBAIHBnX2xvY2tfc3RhdHVzKFBHX0ZVTkNU SU9OX0FSR1MpCiAJCQkJYnJlYWs7CiAJCX0KIAotCQl2YWx1ZXNbMTBdID0gVlhJREdldERh dHVtKGluc3RhbmNlLT5iYWNrZW5kLCBpbnN0YW5jZS0+bHhpZCk7CisJCXZhbHVlc1sxMF0g PSBWWElER2V0RGF0dW0oaW5zdGFuY2UtPnZ4aWQuYmFja2VuZElkLCBpbnN0YW5jZS0+dnhp ZC5sb2NhbFRyYW5zYWN0aW9uSWQpOwogCQlpZiAoaW5zdGFuY2UtPnBpZCAhPSAwKQogCQkJ dmFsdWVzWzExXSA9IEludDMyR2V0RGF0dW0oaW5zdGFuY2UtPnBpZCk7CiAJCWVsc2UKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYwppbmRleCA0NzA4ZDczZjVmYS4uYTcyNjdkYzE1 ZDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMKQEAgLTE0OCwxOSArMTQ4LDEx IEBAIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhQR19GVU5DVElPTl9BUkdTKQog CVBHUFJPQwkgICAqcHJvYzsKIAlCYWNrZW5kSWQJYmFja2VuZElkID0gSW52YWxpZEJhY2tl bmRJZDsKIAotCXByb2MgPSBCYWNrZW5kUGlkR2V0UHJvYyhwaWQpOwotCiAJLyoKIAkgKiBT ZWUgaWYgdGhlIHByb2Nlc3Mgd2l0aCBnaXZlbiBwaWQgaXMgYSBiYWNrZW5kIG9yIGFuIGF1 eGlsaWFyeSBwcm9jZXNzLgotCSAqCi0JICogSWYgdGhlIGdpdmVuIHByb2Nlc3MgaXMgYSBi YWNrZW5kLCB1c2UgaXRzIGJhY2tlbmQgaWQgaW4KLQkgKiBTZW5kUHJvY1NpZ25hbCgpIGxh dGVyIHRvIHNwZWVkIHVwIHRoZSBvcGVyYXRpb24uIE90aGVyd2lzZSwgZG9uJ3QgZG8KLQkg KiB0aGF0IGJlY2F1c2UgYXV4aWxpYXJ5IHByb2Nlc3NlcyAoZXhjZXB0IHRoZSBzdGFydHVw IHByb2Nlc3MpIGRvbid0Ci0JICogaGF2ZSBhIHZhbGlkIGJhY2tlbmQgaWQuCiAJICovCi0J aWYgKHByb2MgIT0gTlVMTCkKLQkJYmFja2VuZElkID0gcHJvYy0+YmFja2VuZElkOwotCWVs c2UKKwlwcm9jID0gQmFja2VuZFBpZEdldFByb2MocGlkKTsKKwlpZiAocHJvYyA9PSBOVUxM KQogCQlwcm9jID0gQXV4aWxpYXJ5UGlkR2V0UHJvYyhwaWQpOwogCiAJLyoKQEAgLTE4Myw2 ICsxNzUsOCBAQCBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoUEdfRlVOQ1RJT05f QVJHUykKIAkJUEdfUkVUVVJOX0JPT0woZmFsc2UpOwogCX0KIAorCWlmIChwcm9jICE9IE5V TEwpCisJCWJhY2tlbmRJZCA9IEdldEJhY2tlbmRJZEZyb21QR1Byb2MocHJvYyk7CiAJaWYg KFNlbmRQcm9jU2lnbmFsKHBpZCwgUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQsIGJhY2tl bmRJZCkgPCAwKQogCXsKIAkJLyogQWdhaW4sIGp1c3QgYSB3YXJuaW5nIHRvIGFsbG93IGxv b3BzICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9lcnJvci9jc3Zsb2cuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2Vycm9yL2NzdmxvZy5jCmluZGV4IDFiNjJiMDdmMjMxLi4x ZDQ0ZDhhNmEzMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvZXJyb3IvY3N2bG9n LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvZXJyb3IvY3N2bG9nLmMKQEAgLTE1Miw4ICsx NTIsOCBAQCB3cml0ZV9jc3Zsb2coRXJyb3JEYXRhICplZGF0YSkKIAogCS8qIFZpcnR1YWwg dHJhbnNhY3Rpb24gaWQgKi8KIAkvKiBrZWVwIFZYSUQgZm9ybWF0IGluIHN5bmMgd2l0aCBs b2NrZnVuY3MuYyAqLwotCWlmIChNeVByb2MgIT0gTlVMTCAmJiBNeVByb2MtPmJhY2tlbmRJ ZCAhPSBJbnZhbGlkQmFja2VuZElkKQotCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlZC8l dSIsIE15UHJvYy0+YmFja2VuZElkLCBNeVByb2MtPmx4aWQpOworCWlmIChNeVByb2MgIT0g TlVMTCAmJiBNeVByb2MtPnZ4aWQuYmFja2VuZElkICE9IEludmFsaWRCYWNrZW5kSWQpCisJ CWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVkLyV1IiwgTXlQcm9jLT52eGlkLmJhY2tlbmRJ ZCwgTXlQcm9jLT52eGlkLmx4aWQpOwogCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICcs Jyk7CiAKIAkvKiBUcmFuc2FjdGlvbiBpZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvZXJyb3IvZWxvZy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvZXJyb3IvZWxvZy5jCmlu ZGV4IDcwMGZiZGU2ZGI0Li4yMDhlMWJjMGVlNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvZXJyb3IvZWxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Vycm9yL2Vsb2cu YwpAQCAtMzA3OCwxOCArMzA3OCwxOCBAQCBsb2dfc3RhdHVzX2Zvcm1hdChTdHJpbmdJbmZv IGJ1ZiwgY29uc3QgY2hhciAqZm9ybWF0LCBFcnJvckRhdGEgKmVkYXRhKQogCQkJCWJyZWFr OwogCQkJY2FzZSAndic6CiAJCQkJLyoga2VlcCBWWElEIGZvcm1hdCBpbiBzeW5jIHdpdGgg bG9ja2Z1bmNzLmMgKi8KLQkJCQlpZiAoTXlQcm9jICE9IE5VTEwgJiYgTXlQcm9jLT5iYWNr ZW5kSWQgIT0gSW52YWxpZEJhY2tlbmRJZCkKKwkJCQlpZiAoTXlQcm9jICE9IE5VTEwgJiYg TXlQcm9jLT52eGlkLmJhY2tlbmRJZCAhPSBJbnZhbGlkQmFja2VuZElkKQogCQkJCXsKIAkJ CQkJaWYgKHBhZGRpbmcgIT0gMCkKIAkJCQkJewogCQkJCQkJY2hhcgkJc3RyZmJ1ZlsxMjhd OwogCiAJCQkJCQlzbnByaW50ZihzdHJmYnVmLCBzaXplb2Yoc3RyZmJ1ZikgLSAxLCAiJWQv JXUiLAotCQkJCQkJCQkgTXlQcm9jLT5iYWNrZW5kSWQsIE15UHJvYy0+bHhpZCk7CisJCQkJ CQkJCSBNeVByb2MtPnZ4aWQuYmFja2VuZElkLCBNeVByb2MtPnZ4aWQubHhpZCk7CiAJCQkJ CQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiUqcyIsIHBhZGRpbmcsIHN0cmZidWYpOwogCQkJ CQl9CiAJCQkJCWVsc2UKLQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJWQvJXUiLCBN eVByb2MtPmJhY2tlbmRJZCwgTXlQcm9jLT5seGlkKTsKKwkJCQkJCWFwcGVuZFN0cmluZ0lu Zm8oYnVmLCAiJWQvJXUiLCBNeVByb2MtPnZ4aWQuYmFja2VuZElkLCBNeVByb2MtPnZ4aWQu bHhpZCk7CiAJCQkJfQogCQkJCWVsc2UgaWYgKHBhZGRpbmcgIT0gMCkKIAkJCQkJYXBwZW5k U3RyaW5nSW5mb1NwYWNlcyhidWYsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9l cnJvci9qc29ubG9nLmMgYi9zcmMvYmFja2VuZC91dGlscy9lcnJvci9qc29ubG9nLmMKaW5k ZXggMjkwMzU2MWYxYzQuLjA2N2Q5ZTMwYjE2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9lcnJvci9qc29ubG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvZXJyb3IvanNv bmxvZy5jCkBAIC0xOTcsOSArMTk3LDkgQEAgd3JpdGVfanNvbmxvZyhFcnJvckRhdGEgKmVk YXRhKQogCiAJLyogVmlydHVhbCB0cmFuc2FjdGlvbiBpZCAqLwogCS8qIGtlZXAgVlhJRCBm b3JtYXQgaW4gc3luYyB3aXRoIGxvY2tmdW5jcy5jICovCi0JaWYgKE15UHJvYyAhPSBOVUxM ICYmIE15UHJvYy0+YmFja2VuZElkICE9IEludmFsaWRCYWNrZW5kSWQpCi0JCWFwcGVuZEpT T05LZXlWYWx1ZUZtdCgmYnVmLCAidnhpZCIsIHRydWUsICIlZC8ldSIsIE15UHJvYy0+YmFj a2VuZElkLAotCQkJCQkJCSAgTXlQcm9jLT5seGlkKTsKKwlpZiAoTXlQcm9jICE9IE5VTEwg JiYgTXlQcm9jLT52eGlkLmJhY2tlbmRJZCAhPSBJbnZhbGlkQmFja2VuZElkKQorCQlhcHBl bmRKU09OS2V5VmFsdWVGbXQoJmJ1ZiwgInZ4aWQiLCB0cnVlLCAiJWQvJXUiLAorCQkJCQkJ CSAgTXlQcm9jLT52eGlkLmJhY2tlbmRJZCwgTXlQcm9jLT52eGlkLmx4aWQpOwogCiAJLyog VHJhbnNhY3Rpb24gaWQgKi8KIAlhcHBlbmRKU09OS2V5VmFsdWVGbXQoJmJ1ZiwgInR4aWQi LCBmYWxzZSwgIiV1IiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9z dGluaXQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYwppbmRleCAxYWQz MzY3MTU5OC4uZTgyMmNkNjFkNWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2lu aXQvcG9zdGluaXQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMK QEAgLTc0MCwxOCArNzQwLDEwIEBAIEluaXRQb3N0Z3Jlcyhjb25zdCBjaGFyICppbl9kYm5h bWUsIE9pZCBkYm9pZCwKIAkvKgogCSAqIEluaXRpYWxpemUgbXkgZW50cnkgaW4gdGhlIHNo YXJlZC1pbnZhbGlkYXRpb24gbWFuYWdlcidzIGFycmF5IG9mCiAJICogcGVyLWJhY2tlbmQg ZGF0YS4KLQkgKgotCSAqIFNldHMgdXAgTXlCYWNrZW5kSWQsIGEgdW5pcXVlIGJhY2tlbmQg aWRlbnRpZmllci4KIAkgKi8KLQlNeUJhY2tlbmRJZCA9IEludmFsaWRCYWNrZW5kSWQ7Ci0K IAlTaGFyZWRJbnZhbEJhY2tlbmRJbml0KGZhbHNlKTsKIAotCWlmIChNeUJhY2tlbmRJZCA+ IE1heEJhY2tlbmRzIHx8IE15QmFja2VuZElkIDw9IDApCi0JCWVsb2coRkFUQUwsICJiYWQg YmFja2VuZCBJRDogJWQiLCBNeUJhY2tlbmRJZCk7Ci0KLQkvKiBOb3cgdGhhdCB3ZSBoYXZl IGEgQmFja2VuZElkLCB3ZSBjYW4gcGFydGljaXBhdGUgaW4gUHJvY1NpZ25hbCAqLwotCVBy b2NTaWduYWxJbml0KE15QmFja2VuZElkKTsKKwlQcm9jU2lnbmFsSW5pdCgpOwogCiAJLyoK IAkgKiBBbHNvIHNldCB1cCB0aW1lb3V0IGhhbmRsZXJzIG5lZWRlZCBmb3IgYmFja2VuZCBv cGVyYXRpb24uICBXZSBuZWVkCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy90aW1l L3NuYXBtZ3IuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCmluZGV4IDY3 NWU4MWQ4MmQ3Li5hMDkxNjk1OWIxNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv dGltZS9zbmFwbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvdGltZS9zbmFwbWdyLmMK QEAgLTExNTQsNyArMTE1NCw4IEBAIEV4cG9ydFNuYXBzaG90KFNuYXBzaG90IHNuYXBzaG90 KQogCSAqIGluc2lkZSB0aGUgdHJhbnNhY3Rpb24gZnJvbSAxLgogCSAqLwogCXNucHJpbnRm KHBhdGgsIHNpemVvZihwYXRoKSwgU05BUFNIT1RfRVhQT1JUX0RJUiAiLyUwOFgtJTA4WC0l ZCIsCi0JCQkgTXlQcm9jLT5iYWNrZW5kSWQsIE15UHJvYy0+bHhpZCwgbGlzdF9sZW5ndGgo ZXhwb3J0ZWRTbmFwc2hvdHMpICsgMSk7CisJCQkgTXlQcm9jLT52eGlkLmJhY2tlbmRJZCwg TXlQcm9jLT52eGlkLmx4aWQsCisJCQkgbGlzdF9sZW5ndGgoZXhwb3J0ZWRTbmFwc2hvdHMp ICsgMSk7CiAKIAkvKgogCSAqIENvcHkgdGhlIHNuYXBzaG90IGludG8gVG9wVHJhbnNhY3Rp b25Db250ZXh0LCBhZGQgaXQgdG8gdGhlCkBAIC0xMTgxLDcgKzExODIsNyBAQCBFeHBvcnRT bmFwc2hvdChTbmFwc2hvdCBzbmFwc2hvdCkKIAkgKi8KIAlpbml0U3RyaW5nSW5mbygmYnVm KTsKIAotCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgInZ4aWQ6JWQvJXVcbiIsIE15UHJvYy0+ YmFja2VuZElkLCBNeVByb2MtPmx4aWQpOworCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgInZ4 aWQ6JWQvJXVcbiIsIE15UHJvYy0+dnhpZC5iYWNrZW5kSWQsIE15UHJvYy0+dnhpZC5seGlk KTsKIAlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJwaWQ6JWRcbiIsIE15UHJvY1BpZCk7CiAJ YXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiZGJpZDoldVxuIiwgTXlEYXRhYmFzZUlkKTsKIAlh cHBlbmRTdHJpbmdJbmZvKCZidWYsICJpc286JWRcbiIsIFhhY3RJc29MZXZlbCk7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNsdWRlL21pc2NhZG1p bi5oCmluZGV4IDBiMDFjMWYwOTM1Li5jYmRjNjFiODU3NiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbWlzY2FkbWluLmgKKysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKQEAgLTQ0 NCw4ICs0NDQsNiBAQCB0eXBlZGVmIGVudW0KIAlXYWxXcml0ZXJQcm9jZXNzLAogCVdhbFJl Y2VpdmVyUHJvY2VzcywKIAlXYWxTdW1tYXJpemVyUHJvY2VzcywKLQotCU5VTV9BVVhQUk9D VFlQRVMJCQkvKiBNdXN0IGJlIGxhc3QhICovCiB9IEF1eFByb2NUeXBlOwogCiBleHRlcm4g UEdETExJTVBPUlQgQXV4UHJvY1R5cGUgTXlBdXhQcm9jVHlwZTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvYmFja2VuZGlkLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Jh Y2tlbmRpZC5oCmluZGV4IDUwYWM5ODJkYTE5Li4wMTM4NzcyM2Y3OSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9iYWNrZW5kaWQuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL2JhY2tlbmRpZC5oCkBAIC0xNCwxMSArMTQsMTUgQEAKICNpZm5kZWYgQkFDS0VORElE X0gKICNkZWZpbmUgQkFDS0VORElEX0gKIAotLyogLS0tLS0tLS0tLS0tLS0tLQotICoJCS1j aW0gOC8xNy85MAotICogLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIEJhY2tlbmRJZCB1bmlx dWVseSBpZGVudGlmaWVzIGFuIGFjdGl2ZSBiYWNrZW5kIG9yIGF1eGlsaWFyeSBwcm9jZXNz LiAgSXQncworICogYXNzaWduZWQgYXQgYmFja2VuZCBzdGFydHVwIGFmdGVyIGF1dGhlbnRp Y2F0aW9uLiAgTm90ZSB0aGF0IGEgYmFja2VuZCBJRAorICogY2FuIGJlIHJldXNlZCBmb3Ig YSBkaWZmZXJlbnQgYmFja2VuZCBpbW1lZGlhdGVseSBhZnRlciBhIGJhY2tlbmQgZXhpdHMu CisgKgorICogQmFja2VuZCBJRHMgYXJlIGFzc2lnbmVkIHN0YXJ0aW5nIGZyb20gMS4gRm9y IGhpc3RvcmljYWwgcmVhc29ucywgQmFja2VuZElkCisgKiAwIGlzIHVudXNlZCwgYnV0IElu dmFsaWRCYWNrZW5kSWQgaXMgZGVmaW5lZCBhcyAtMS4KICAqLwotdHlwZWRlZiBpbnQgQmFj a2VuZElkOwkJCS8qIHVuaXF1ZSBjdXJyZW50bHkgYWN0aXZlIGJhY2tlbmQgaWRlbnRpZmll ciAqLwordHlwZWRlZiBpbnQgQmFja2VuZElkOwogCiAjZGVmaW5lIEludmFsaWRCYWNrZW5k SWQJCSgtMSkKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2NrLmggYi9z cmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaAppbmRleCBlZDYwNzFmMzI4Ni4uYzVjODQyMDEz NzggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oCisrKyBiL3NyYy9p bmNsdWRlL3N0b3JhZ2UvbG9jay5oCkBAIC03NCw5ICs3NCw5IEBAIHR5cGVkZWYgc3RydWN0 CiAjZGVmaW5lIFNldEludmFsaWRWaXJ0dWFsVHJhbnNhY3Rpb25JZCh2eGlkKSBcCiAJKCh2 eGlkKS5iYWNrZW5kSWQgPSBJbnZhbGlkQmFja2VuZElkLCBcCiAJICh2eGlkKS5sb2NhbFRy YW5zYWN0aW9uSWQgPSBJbnZhbGlkTG9jYWxUcmFuc2FjdGlvbklkKQotI2RlZmluZSBHRVRf VlhJRF9GUk9NX1BHUFJPQyh2eGlkLCBwcm9jKSBcCi0JKCh2eGlkKS5iYWNrZW5kSWQgPSAo cHJvYykuYmFja2VuZElkLCBcCi0JICh2eGlkKS5sb2NhbFRyYW5zYWN0aW9uSWQgPSAocHJv YykubHhpZCkKKyNkZWZpbmUgR0VUX1ZYSURfRlJPTV9QR1BST0ModnhpZF9kc3QsIHByb2Mp IFwKKwkoKHZ4aWRfZHN0KS5iYWNrZW5kSWQgPSAocHJvYykudnhpZC5iYWNrZW5kSWQsIFwK KwkJICh2eGlkX2RzdCkubG9jYWxUcmFuc2FjdGlvbklkID0gKHByb2MpLnZ4aWQubHhpZCkK IAogLyogTUFYX0xPQ0tNT0RFUyBjYW5ub3QgYmUgbGFyZ2VyIHRoYW4gdGhlICMgb2YgYml0 cyBpbiBMT0NLTUFTSyAqLwogI2RlZmluZSBNQVhfTE9DS01PREVTCQkxMApAQCAtNDU0LDgg KzQ1NCw3IEBAIHR5cGVkZWYgc3RydWN0IExvY2tJbnN0YW5jZURhdGEKIAlMT0NLVEFHCQls b2NrdGFnOwkJLyogdGFnIGZvciBsb2NrZWQgb2JqZWN0ICovCiAJTE9DS01BU0sJaG9sZE1h c2s7CQkvKiBsb2NrcyBoZWxkIGJ5IHRoaXMgUEdQUk9DICovCiAJTE9DS01PREUJd2FpdExv Y2tNb2RlOwkvKiBsb2NrIGF3YWl0ZWQgYnkgdGhpcyBQR1BST0MsIGlmIGFueSAqLwotCUJh Y2tlbmRJZAliYWNrZW5kOwkJLyogYmFja2VuZCBJRCBvZiB0aGlzIFBHUFJPQyAqLwotCUxv Y2FsVHJhbnNhY3Rpb25JZCBseGlkOwkvKiBsb2NhbCB0cmFuc2FjdGlvbiBJRCBvZiB0aGlz IFBHUFJPQyAqLworCVZpcnR1YWxUcmFuc2FjdGlvbklkIHZ4aWQ7CS8qIGxvY2FsIHRyYW5z YWN0aW9uIElEIG9mIHRoaXMgUEdQUk9DICovCiAJVGltZXN0YW1wVHogd2FpdFN0YXJ0OwkJ LyogdGltZSBhdCB3aGljaCB0aGlzIFBHUFJPQyBzdGFydGVkIHdhaXRpbmcKIAkJCQkJCQkJ ICogZm9yIGxvY2sgKi8KIAlpbnQJCQlwaWQ7CQkJLyogcGlkIG9mIHRoaXMgUEdQUk9DICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaCBiL3NyYy9pbmNsdWRl L3N0b3JhZ2UvcHJvYy5oCmluZGV4IGNhMjE1MThmNTIyLi5kMWU1MDM4MGI3YyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKKysrIGIvc3JjL2luY2x1ZGUvc3Rv cmFnZS9wcm9jLmgKQEAgLTE4NiwxNiArMTg2LDMxIEBAIHN0cnVjdCBQR1BST0MKIAkJCQkJ CQkJICogdmFjdXVtIG11c3Qgbm90IHJlbW92ZSB0dXBsZXMgZGVsZXRlZCBieQogCQkJCQkJ CQkgKiB4aWQgPj0geG1pbiAhICovCiAKLQlMb2NhbFRyYW5zYWN0aW9uSWQgbHhpZDsJLyog bG9jYWwgaWQgb2YgdG9wLWxldmVsIHRyYW5zYWN0aW9uIGN1cnJlbnRseQotCQkJCQkJCQkg KiBiZWluZyBleGVjdXRlZCBieSB0aGlzIHByb2MsIGlmIHJ1bm5pbmc7Ci0JCQkJCQkJCSAq IGVsc2UgSW52YWxpZExvY2FsVHJhbnNhY3Rpb25JZCAqLwogCWludAkJCXBpZDsJCQkvKiBC YWNrZW5kJ3MgcHJvY2VzcyBJRDsgMCBpZiBwcmVwYXJlZCB4YWN0ICovCiAKIAlpbnQJCQlw Z3hhY3RvZmY7CQkvKiBvZmZzZXQgaW50byB2YXJpb3VzIFByb2NHbG9iYWwtPmFycmF5cyB3 aXRoCiAJCQkJCQkJCSAqIGRhdGEgbWlycm9yZWQgZnJvbSB0aGlzIFBHUFJPQyAqLwogCisJ LyoKKwkgKiBDdXJyZW50bHkgcnVubmluZyB0b3AtbGV2ZWwgdHJhbnNhY3Rpb24ncyB2aXJ0 dWFsIHhpZC4gVG9nZXRoZXIgdGhlc2UKKwkgKiBmb3JtIGEgVmlydHVhbFRyYW5zYWN0aW9u SWQsIGJ1dCB3ZSBkb24ndCB1c2UgdGhhdCBzdHJ1Y3QgYmVjYXVzZSB0aGlzCisJICogaXMg bm90IGF0b21pY2FsbHkgYXNzaWduYWJsZSBhcyB3aG9sZSwgYW5kIHdlIHdhbnQgdG8gZW5m b3JjZSBjb2RlIHRvCisJICogY29uc2lkZXIgYm90aCBwYXJ0cyBzZXBhcmF0ZWx5LiAgU2Vl IGNvbW1lbnRzIGF0IFZpcnR1YWxUcmFuc2FjdGlvbklkLgorCSAqLworCXN0cnVjdCB7CisJ CUJhY2tlbmRJZAliYWNrZW5kSWQ7CQkvKiBGb3IgcmVndWxhciBiYWNrZW5kcywgZXF1YWwg dG8KKwkJCQkJCQkJCSAqIEdldEJhY2tlbmRJZEZyb21QR1Byb2MocHJvYykuICBGb3IKKwkJ CQkJCQkJCSAqIHByZXBhcmVkIHhhY3RzLCBJRCBvZiB0aGUgb3JpZ2luYWwKKwkJCQkJCQkJ CSAqIGJhY2tlbmQgdGhhdCBwcm9jZXNzZWQgdGhlCisJCQkJCQkJCQkgKiB0cmFuc2FjdGlv bi4gRm9yIHVudXNlZCBQR1BST0MgZW50cmllcywKKwkJCQkJCQkJCSAqIEludmFsaWRiYWNr ZW5kSUQuICovCisJCUxvY2FsVHJhbnNhY3Rpb25JZCBseGlkOwkvKiBsb2NhbCBpZCBvZiB0 b3AtbGV2ZWwgdHJhbnNhY3Rpb24KKwkJCQkJCQkJCSAqIGN1cnJlbnRseSAqIGJlaW5nIGV4 ZWN1dGVkIGJ5IHRoaXMKKwkJCQkJCQkJCSAqIHByb2MsIGlmIHJ1bm5pbmc7IGVsc2UKKwkJ CQkJCQkJCSAqIEludmFsaWRMb2NhbHRyYW5zYWN0aW9uSWQgKi8KKwl9IHZ4aWQ7CisKIAkv KiBUaGVzZSBmaWVsZHMgYXJlIHplcm8gd2hpbGUgYSBiYWNrZW5kIGlzIHN0aWxsIHN0YXJ0 aW5nIHVwOiAqLwotCUJhY2tlbmRJZAliYWNrZW5kSWQ7CQkvKiBUaGlzIGJhY2tlbmQncyBi YWNrZW5kIElEIChpZiBhc3NpZ25lZCkgKi8KIAlPaWQJCQlkYXRhYmFzZUlkOwkJLyogT0lE IG9mIGRhdGFiYXNlIHRoaXMgYmFja2VuZCBpcyB1c2luZyAqLwogCU9pZAkJCXJvbGVJZDsJ CQkvKiBPSUQgb2Ygcm9sZSB1c2luZyB0aGlzIGJhY2tlbmQgKi8KIApAQCAtNDA2LDkgKzQy MSwxNiBAQCBleHRlcm4gUEdETExJTVBPUlQgUFJPQ19IRFIgKlByb2NHbG9iYWw7CiAKIGV4 dGVybiBQR0RMTElNUE9SVCBQR1BST0MgKlByZXBhcmVkWGFjdFByb2NzOwogCi0vKiBBY2Nl c3NvciBmb3IgUEdQUk9DIGdpdmVuIGEgcGdwcm9jbm8uICovCisvKgorICogQWNjZXNzb3Jz IGZvciBnZXR0aW5nIFBHUFJPQyBnaXZlbiBhIHBncHJvY25vIG9yIEJhY2tlbmRJZCwgYW5k IHZpY2UgdmVyc2EuCisgKgorICogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgc29tZSBjb2Rl IHVzZXMgMC1iYXNlZCAicHJvYyBudW1iZXJzIiwgd2hpbGUgb3RoZXIKKyAqIGNvZGUgdXNl cyAxLWJhc2VkIGJhY2tlbmQgSURzLgorICovCiAjZGVmaW5lIEdldFBHUHJvY0J5TnVtYmVy KG4pICgmUHJvY0dsb2JhbC0+YWxsUHJvY3NbKG4pXSkKICNkZWZpbmUgR2V0TnVtYmVyRnJv bVBHUHJvYyhwcm9jKSAoKHByb2MpIC0gJlByb2NHbG9iYWwtPmFsbFByb2NzWzBdKQorI2Rl ZmluZSBHZXRQR1Byb2NCeUJhY2tlbmRJZChuKSAoJlByb2NHbG9iYWwtPmFsbFByb2NzWyhu KSAtIDFdKQorI2RlZmluZSBHZXRCYWNrZW5kSWRGcm9tUEdQcm9jKHByb2MpIChHZXROdW1i ZXJGcm9tUEdQcm9jKHByb2MpICsgMSkKIAogLyoKICAqIFdlIHNldCBhc2lkZSBzb21lIGV4 dHJhIFBHUFJPQyBzdHJ1Y3R1cmVzIGZvciBhdXhpbGlhcnkgcHJvY2Vzc2VzLApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaCBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvcHJvY2FycmF5LmgKaW5kZXggZjNlYmE5Yjc2NDAuLjNhZjc1NzdlOGM2IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oCisrKyBiL3NyYy9pbmNs dWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgKQEAgLTY0LDYgKzY0LDEwIEBAIGV4dGVybiBWaXJ0 dWFsVHJhbnNhY3Rpb25JZCAqR2V0VmlydHVhbFhJRHNEZWxheWluZ0Noa3B0KGludCAqbnZ4 aWRzLCBpbnQgdHlwZSk7CiBleHRlcm4gYm9vbCBIYXZlVmlydHVhbFhJRHNEZWxheWluZ0No a3B0KFZpcnR1YWxUcmFuc2FjdGlvbklkICp2eGlkcywKIAkJCQkJCQkJCQkgaW50IG52eGlk cywgaW50IHR5cGUpOwogCitleHRlcm4gUEdQUk9DICpCYWNrZW5kSWRHZXRQcm9jKGludCBi YWNrZW5kSUQpOworZXh0ZXJuIHZvaWQgQmFja2VuZElkR2V0VHJhbnNhY3Rpb25JZHMoaW50 IGJhY2tlbmRJRCwgVHJhbnNhY3Rpb25JZCAqeGlkLAorCQkJCQkJCQkJICAgVHJhbnNhY3Rp b25JZCAqeG1pbiwgaW50ICpuc3VieGlkLAorCQkJCQkJCQkJICAgYm9vbCAqb3ZlcmZsb3dl ZCk7CiBleHRlcm4gUEdQUk9DICpCYWNrZW5kUGlkR2V0UHJvYyhpbnQgcGlkKTsKIGV4dGVy biBQR1BST0MgKkJhY2tlbmRQaWRHZXRQcm9jV2l0aExvY2soaW50IHBpZCk7CiBleHRlcm4g aW50CUJhY2tlbmRYaWRHZXRQaWQoVHJhbnNhY3Rpb25JZCB4aWQpOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdl L3Byb2NzaWduYWwuaAppbmRleCA1MmRjYjRjMmFkZi4uZmViZGRhMzYxMWMgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCisrKyBiL3NyYy9pbmNsdWRl L3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBAIC02Miw3ICs2Miw3IEBAIHR5cGVkZWYgZW51bQog ZXh0ZXJuIFNpemUgUHJvY1NpZ25hbFNobWVtU2l6ZSh2b2lkKTsKIGV4dGVybiB2b2lkIFBy b2NTaWduYWxTaG1lbUluaXQodm9pZCk7CiAKLWV4dGVybiB2b2lkIFByb2NTaWduYWxJbml0 KGludCBwc3NfaWR4KTsKK2V4dGVybiB2b2lkIFByb2NTaWduYWxJbml0KHZvaWQpOwogZXh0 ZXJuIGludAlTZW5kUHJvY1NpZ25hbChwaWRfdCBwaWQsIFByb2NTaWduYWxSZWFzb24gcmVh c29uLAogCQkJCQkJICAgQmFja2VuZElkIGJhY2tlbmRJZCk7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2Uvc2ludmFsYWR0LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Np bnZhbGFkdC5oCmluZGV4IGFhM2QyMDNlZmNhLi5jM2M5N2IzZjhiNyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9zaW52YWxhZHQuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL3NpbnZhbGFkdC5oCkBAIC0zMSwxMCArMzEsNiBAQAogZXh0ZXJuIFNpemUgU0ludmFs U2htZW1TaXplKHZvaWQpOwogZXh0ZXJuIHZvaWQgQ3JlYXRlU2hhcmVkSW52YWxpZGF0aW9u U3RhdGUodm9pZCk7CiBleHRlcm4gdm9pZCBTaGFyZWRJbnZhbEJhY2tlbmRJbml0KGJvb2wg c2VuZE9ubHkpOwotZXh0ZXJuIFBHUFJPQyAqQmFja2VuZElkR2V0UHJvYyhpbnQgYmFja2Vu ZElEKTsKLWV4dGVybiB2b2lkIEJhY2tlbmRJZEdldFRyYW5zYWN0aW9uSWRzKGludCBiYWNr ZW5kSUQsIFRyYW5zYWN0aW9uSWQgKnhpZCwKLQkJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQg KnhtaW4sIGludCAqbnN1YnhpZCwKLQkJCQkJCQkJCSAgIGJvb2wgKm92ZXJmbG93ZWQpOwog CiBleHRlcm4gdm9pZCBTSUluc2VydERhdGFFbnRyaWVzKGNvbnN0IFNoYXJlZEludmFsaWRh dGlvbk1lc3NhZ2UgKmRhdGEsIGludCBuKTsKIGV4dGVybiBpbnQJU0lHZXREYXRhRW50cmll cyhTaGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlICpkYXRhLCBpbnQgZGF0YXNpemUpOwpkaWZm IC0tZ2l0IGEvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2V4ZWMuYyBiL3NyYy9wbC9wbHBnc3Fs L3NyYy9wbF9leGVjLmMKaW5kZXggNmQxNjkxMzQwYzUuLmVkNTE2OTQ0MjhhIDEwMDY0NAot LS0gYS9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhlYy5jCisrKyBiL3NyYy9wbC9wbHBnc3Fs L3NyYy9wbF9leGVjLmMKQEAgLTIyMTEsNyArMjIxMSw3IEBAIGV4ZWNfc3RtdF9jYWxsKFBM cGdTUUxfZXhlY3N0YXRlICplc3RhdGUsIFBMcGdTUUxfc3RtdF9jYWxsICpzdG10KQogCiAJ cGFyYW1MSSA9IHNldHVwX3BhcmFtX2xpc3QoZXN0YXRlLCBleHByKTsKIAotCWJlZm9yZV9s eGlkID0gTXlQcm9jLT5seGlkOworCWJlZm9yZV9seGlkID0gTXlQcm9jLT52eGlkLmx4aWQ7 CiAKIAkvKgogCSAqIElmIHdlIGhhdmUgYSBwcm9jZWR1cmUtbGlmZXNwYW4gcmVzb3duZXIs IHVzZSB0aGF0IHRvIGhvbGQgdGhlIHJlZmNvdW50CkBAIC0yMjMyLDcgKzIyMzIsNyBAQCBl eGVjX3N0bXRfY2FsbChQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLCBQTHBnU1FMX3N0bXRf Y2FsbCAqc3RtdCkKIAkJZWxvZyhFUlJPUiwgIlNQSV9leGVjdXRlX3BsYW5fZXh0ZW5kZWQg ZmFpbGVkIGV4ZWN1dGluZyBxdWVyeSBcIiVzXCI6ICVzIiwKIAkJCSBleHByLT5xdWVyeSwg U1BJX3Jlc3VsdF9jb2RlX3N0cmluZyhyYykpOwogCi0JYWZ0ZXJfbHhpZCA9IE15UHJvYy0+ bHhpZDsKKwlhZnRlcl9seGlkID0gTXlQcm9jLT52eGlkLmx4aWQ7CiAKIAlpZiAoYmVmb3Jl X2x4aWQgIT0gYWZ0ZXJfbHhpZCkKIAl7CkBAIC02MDM3LDcgKzYwMzcsNyBAQCBleGVjX2V2 YWxfc2ltcGxlX2V4cHIoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwKIAkJCQkJICBpbnQz MiAqcmV0dHlwbW9kKQogewogCUV4cHJDb250ZXh0ICplY29udGV4dCA9IGVzdGF0ZS0+ZXZh bF9lY29udGV4dDsKLQlMb2NhbFRyYW5zYWN0aW9uSWQgY3VybHhpZCA9IE15UHJvYy0+bHhp ZDsKKwlMb2NhbFRyYW5zYWN0aW9uSWQgY3VybHhpZCA9IE15UHJvYy0+dnhpZC5seGlkOwog CVBhcmFtTGlzdEluZm8gcGFyYW1MSTsKIAl2b2lkCSAgICpzYXZlX3NldHVwX2FyZzsKIAli b29sCQluZWVkX3NuYXBzaG90OwpAQCAtNzk0Myw3ICs3OTQzLDcgQEAgZ2V0X2Nhc3RfaGFz aGVudHJ5KFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsCiAJICogZnVuY3Rpb25zIGRvOyBE TyBibG9ja3MgaGF2ZSBwcml2YXRlIHNpbXBsZV9ldmFsX2VzdGF0ZXMsIGFuZCBwcml2YXRl CiAJICogY2FzdCBoYXNoIHRhYmxlcyB0byBnbyB3aXRoIHRoZW0uKQogCSAqLwotCWN1cmx4 aWQgPSBNeVByb2MtPmx4aWQ7CisJY3VybHhpZCA9IE15UHJvYy0+dnhpZC5seGlkOwogCWlm IChjYXN0X2VudHJ5LT5jYXN0X2x4aWQgIT0gY3VybHhpZCB8fCBjYXN0X2VudHJ5LT5jYXN0 X2luX3VzZSkKIAl7CiAJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZXN0 YXRlLT5zaW1wbGVfZXZhbF9lc3RhdGUtPmVzX3F1ZXJ5X2N4dCk7CkBAIC04MDcwLDcgKzgw NzAsNyBAQCBleGVjX3NpbXBsZV9jaGVja19wbGFuKFBMcGdTUUxfZXhlY3N0YXRlICplc3Rh dGUsIFBMcGdTUUxfZXhwciAqZXhwcikKIAkJLyogUmVtZW1iZXIgdGhhdCB3ZSBoYXZlIHRo ZSByZWZjb3VudCAqLwogCQlleHByLT5leHByX3NpbXBsZV9wbGFuc291cmNlID0gcGxhbnNv dXJjZTsKIAkJZXhwci0+ZXhwcl9zaW1wbGVfcGxhbiA9IGNwbGFuOwotCQlleHByLT5leHBy X3NpbXBsZV9wbGFuX2x4aWQgPSBNeVByb2MtPmx4aWQ7CisJCWV4cHItPmV4cHJfc2ltcGxl X3BsYW5fbHhpZCA9IE15UHJvYy0+dnhpZC5seGlkOwogCiAJCS8qIFNoYXJlIHRoZSByZW1h aW5pbmcgd29yayB3aXRoIHRoZSByZXBsYW4gY29kZSBwYXRoICovCiAJCWV4ZWNfc2F2ZV9z aW1wbGVfZXhwcihleHByLCBjcGxhbik7Ci0tIAoyLjM5LjIKCg== --------------D7q2JUSUBACJ11MlrkrBV8fY Content-Type: text/x-patch; charset=UTF-8; name="v10-0003-Use-0-based-indexing-for-BackendIds.patch" Content-Disposition: attachment; filename="v10-0003-Use-0-based-indexing-for-BackendIds.patch" Content-Transfer-Encoding: base64 RnJvbSBiMDA3MDNkODY5YWFmNWMwZTc2ZjZlOGExNWFkZWIxZThiOTlmYmMxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgOCBGZWIgMjAyNCAxMjo1ODowOCArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjEwIDMvM10gVXNlIDAtYmFzZWQgaW5kZXhpbmcgZm9yIEJhY2tl bmRJZHMKCi0tLQogZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCAgICAgICAgICAgICAg ICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYyAgICAgICAg ICAgICB8ICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYyAg ICAgICAgfCAxOSArKysrKysrKy0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS90d29waGFzZS5jICAgICAgICAgfCAgNCArKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9nLmMgICAgICAgICAgICAgfCAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFu ZHMvYXN5bmMuYyAgICAgICAgICAgICAgICAgIHwgMTIgKysrKysrLS0tLS0tCiBzcmMvYmFj a2VuZC9wb3N0bWFzdGVyL2Jnd3JpdGVyLmMgICAgICAgICAgICAgfCAgMiArLQogc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYyAgICAgICAgICAgICAgIHwgIDIgKy0KIHNyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jICAgICAgICB8ICAyICstCiBzcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgICAgICAgfCAgNiArKystLS0K IHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jICAgICAgICAgICB8IDEwICsr KysrLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyAgICAgICAg ICB8ICA4ICsrKystLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWxhZHQuYyAg ICAgICAgICAgfCAxOSArKysrKysrKy0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdl L2xtZ3IvY29uZGl0aW9uX3ZhcmlhYmxlLmMgfCAxMiArKysrKystLS0tLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvbG1nci9sd2xvY2suYyAgICAgICAgICAgICB8ICA2ICsrKy0tLQogc3Jj L2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jICAgICAgICAgIHwgIDIgKy0KIHNy Yy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgICAgICAgICAgICAgICB8ICA5ICsrLS0t LS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvYmFja2VuZF9zdGF0dXMuYyAgIHwg MTIgKysrKysrLS0tLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMgICAg ICAgICAgICAgfCAgMiArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9iYWNrZW5kaWQuaCAgICAg ICAgICAgICAgIHwgIDYgKysrKy0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaCAgICAg ICAgICAgICAgICAgICAgfCAxMSArKystLS0tLS0tLQogMjEgZmlsZXMgY2hhbmdlZCwgNjgg aW5zZXJ0aW9ucygrKSwgODIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL21vbml0b3Jpbmcuc2dtbCBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKaW5k ZXggNWNmOTM2M2FjODIuLmFkZWMxYjkyYTMxIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwv bW9uaXRvcmluZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKQEAg LTQ5MzMsNyArNDkzMyw3IEBAIGRlc2NyaXB0aW9uIHwgV2FpdGluZyBmb3IgYSBuZXdseSBp bml0aWFsaXplZCBXQUwgZmlsZSB0byByZWFjaCBkdXJhYmxlIHN0b3JhZ2UKICAgIGFjY2Vz cyBmdW5jdGlvbnMgY2FuIGJlIHVzZWQ7IHRoZXNlIGFyZSBzaG93biBpbiA8eHJlZgogICAg bGlua2VuZD0ibW9uaXRvcmluZy1zdGF0cy1iYWNrZW5kLWZ1bmNzLXRhYmxlIi8+LgogICAg VGhlc2UgYWNjZXNzIGZ1bmN0aW9ucyB1c2UgdGhlIHNlc3Npb24ncyBiYWNrZW5kIElEIG51 bWJlciwgd2hpY2ggaXMgYQotICAgc21hbGwgcG9zaXRpdmUgaW50ZWdlciB0aGF0IGlzIGRp c3RpbmN0IGZyb20gdGhlIGJhY2tlbmQgSUQgb2YgYW55CisgICBzbWFsbCBub24tbmVnYXRp dmUgaW50ZWdlciB0aGF0IGlzIGRpc3RpbmN0IGZyb20gdGhlIGJhY2tlbmQgSUQgb2YgYW55 CiAgICBjb25jdXJyZW50IHNlc3Npb24sIGFsdGhvdWdoIGEgc2Vzc2lvbidzIElEIGNhbiBi ZSByZWN5Y2xlZCBhcyBzb29uIGFzCiAgICBpdCBleGl0cy4gIFRoZSBiYWNrZW5kIElEIGlz IHVzZWQsIGFtb25nIG90aGVyIHRoaW5ncywgdG8gaWRlbnRpZnkgdGhlCiAgICBzZXNzaW9u J3MgdGVtcG9yYXJ5IHNjaGVtYSBpZiBpdCBoYXMgb25lLgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0vY2xvZy5jCmluZGV4IDk3Zjc0MzRkYTM0Li43Yjc5MDY3ZWZiMSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL2Nsb2cuYwpAQCAtNDI1LDcgKzQyNSw3IEBAIFRyYW5zYWN0aW9uR3Jv dXBVcGRhdGVYaWRTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMs CiB7CiAJdm9sYXRpbGUgUFJPQ19IRFIgKnByb2NnbG9iYWwgPSBQcm9jR2xvYmFsOwogCVBH UFJPQwkgICAqcHJvYyA9IE15UHJvYzsKLQlpbnQJCQlwZ3Byb2NubyA9IE15UHJvY051bWJl cjsKKwlpbnQJCQlwZ3Byb2NubyA9IE15QmFja2VuZElkOwogCXVpbnQzMgkJbmV4dGlkeDsK IAl1aW50MzIJCXdha2VpZHg7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL211bHRpeGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4 YWN0LmMKaW5kZXggZmViYzQyOWY3MjQuLmY1NzcwMDhmNGJkIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAtMjM4LDkgKzIzOCw4IEBAIHR5cGVkZWYg c3RydWN0IE11bHRpWGFjdFN0YXRlRGF0YQogCSAqIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0 aGUgTXVsdGlYYWN0U3RhdGVEYXRhIHN0cnVjdC4gRWFjaCBpcyBpbmRleGVkIGJ5CiAJICog QmFja2VuZElkLgogCSAqCi0JICogSW4gYm90aCBhcnJheXMsIHRoZXJlJ3MgYSBzbG90IGZv ciBhbGwgbm9ybWFsIGJhY2tlbmRzICgxLi5NYXhCYWNrZW5kcykKLQkgKiBmb2xsb3dlZCBi eSBhIHNsb3QgZm9yIG1heF9wcmVwYXJlZF94YWN0cyBwcmVwYXJlZCB0cmFuc2FjdGlvbnMu IFZhbGlkCi0JICogQmFja2VuZElkcyBzdGFydCBmcm9tIDE7IGVsZW1lbnQgemVybyBvZiBl YWNoIGFycmF5IGlzIG5ldmVyIHVzZWQuCisJICogSW4gYm90aCBhcnJheXMsIHRoZXJlJ3Mg YSBzbG90IGZvciBhbGwgbm9ybWFsIGJhY2tlbmRzICgwLi5NYXhCYWNrZW5kcy0xKQorCSAq IGZvbGxvd2VkIGJ5IGEgc2xvdCBmb3IgbWF4X3ByZXBhcmVkX3hhY3RzIHByZXBhcmVkIHRy YW5zYWN0aW9ucy4KIAkgKgogCSAqIE9sZGVzdE1lbWJlck1YYWN0SWRba10gaXMgdGhlIG9s ZGVzdCBNdWx0aVhhY3RJZCBlYWNoIGJhY2tlbmQncyBjdXJyZW50CiAJICogdHJhbnNhY3Rp b24ocykgY291bGQgcG9zc2libHkgYmUgYSBtZW1iZXIgb2YsIG9yIEludmFsaWRNdWx0aVhh Y3RJZApAQCAtMjg0LDggKzI4Myw3IEBAIHR5cGVkZWYgc3RydWN0IE11bHRpWGFjdFN0YXRl RGF0YQogfSBNdWx0aVhhY3RTdGF0ZURhdGE7CiAKIC8qCi0gKiBMYXN0IGVsZW1lbnQgb2Yg T2xkZXN0TWVtYmVyTVhhY3RJZCBhbmQgT2xkZXN0VmlzaWJsZU1YYWN0SWQgYXJyYXlzLgot ICogVmFsaWQgZWxlbWVudHMgYXJlICgxLi5NYXhPbGRlc3RTbG90KTsgZWxlbWVudCAwIGlz IG5ldmVyIHVzZWQuCisgKiBTaXplIG9mIE9sZGVzdE1lbWJlck1YYWN0SWQgYW5kIE9sZGVz dFZpc2libGVNWGFjdElkIGFycmF5cy4KICAqLwogI2RlZmluZSBNYXhPbGRlc3RTbG90CShN YXhCYWNrZW5kcyArIG1heF9wcmVwYXJlZF94YWN0cykKIApAQCAtNjk4LDcgKzY5Niw3IEBA IE11bHRpWGFjdElkU2V0T2xkZXN0VmlzaWJsZSh2b2lkKQogCQlpZiAob2xkZXN0TVhhY3Qg PCBGaXJzdE11bHRpWGFjdElkKQogCQkJb2xkZXN0TVhhY3QgPSBGaXJzdE11bHRpWGFjdElk OwogCi0JCWZvciAoaSA9IDE7IGkgPD0gTWF4T2xkZXN0U2xvdDsgaSsrKQorCQlmb3IgKGkg PSAwOyBpIDwgTWF4T2xkZXN0U2xvdDsgaSsrKQogCQl7CiAJCQlNdWx0aVhhY3RJZCB0aGlz b2xkZXN0ID0gT2xkZXN0TWVtYmVyTVhhY3RJZFtpXTsKIApAQCAtMTgyOCw5ICsxODI2LDkg QEAgTXVsdGlYYWN0U2htZW1TaXplKHZvaWQpCiB7CiAJU2l6ZQkJc2l6ZTsKIAotCS8qIFdl IG5lZWQgMipNYXhPbGRlc3RTbG90ICsgMSBwZXJCYWNrZW5kWGFjdElkc1tdIGVudHJpZXMg Ki8KKwkvKiBXZSBuZWVkIDIqTWF4T2xkZXN0U2xvdCBwZXJCYWNrZW5kWGFjdElkc1tdIGVu dHJpZXMgKi8KICNkZWZpbmUgU0hBUkVEX01VTFRJWEFDVF9TVEFURV9TSVpFIFwKLQlhZGRf c2l6ZShvZmZzZXRvZihNdWx0aVhhY3RTdGF0ZURhdGEsIHBlckJhY2tlbmRYYWN0SWRzKSAr IHNpemVvZihNdWx0aVhhY3RJZCksIFwKKwlhZGRfc2l6ZShvZmZzZXRvZihNdWx0aVhhY3RT dGF0ZURhdGEsIHBlckJhY2tlbmRYYWN0SWRzKSwgXAogCQkJIG11bF9zaXplKHNpemVvZihN dWx0aVhhY3RJZCkgKiAyLCBNYXhPbGRlc3RTbG90KSkKIAogCXNpemUgPSBTSEFSRURfTVVM VElYQUNUX1NUQVRFX1NJWkU7CkBAIC0xODgwLDggKzE4NzgsNyBAQCBNdWx0aVhhY3RTaG1l bUluaXQodm9pZCkKIAkJQXNzZXJ0KGZvdW5kKTsKIAogCS8qCi0JICogU2V0IHVwIGFycmF5 IHBvaW50ZXJzLiAgTm90ZSB0aGF0IHBlckJhY2tlbmRYYWN0SWRzWzBdIGlzIHdhc3RlZCBz cGFjZQotCSAqIHNpbmNlIHdlIG9ubHkgdXNlIGluZGV4ZXMgMS4uTWF4T2xkZXN0U2xvdCBp biBlYWNoIGFycmF5LgorCSAqIFNldCB1cCBhcnJheSBwb2ludGVycy4KIAkgKi8KIAlPbGRl c3RNZW1iZXJNWGFjdElkID0gTXVsdGlYYWN0U3RhdGUtPnBlckJhY2tlbmRYYWN0SWRzOwog CU9sZGVzdFZpc2libGVNWGFjdElkID0gT2xkZXN0TWVtYmVyTVhhY3RJZCArIE1heE9sZGVz dFNsb3Q7CkBAIC0yNTMzLDcgKzI1MzAsNyBAQCBHZXRPbGRlc3RNdWx0aVhhY3RJZCh2b2lk KQogCQluZXh0TVhhY3QgPSBGaXJzdE11bHRpWGFjdElkOwogCiAJb2xkZXN0TVhhY3QgPSBu ZXh0TVhhY3Q7Ci0JZm9yIChpID0gMTsgaSA8PSBNYXhPbGRlc3RTbG90OyBpKyspCisJZm9y IChpID0gMDsgaSA8IE1heE9sZGVzdFNsb3Q7IGkrKykKIAl7CiAJCU11bHRpWGFjdElkIHRo aXNvbGRlc3Q7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3 b3BoYXNlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCmluZGV4 IDVjMjgyMDAyOTAwLi43MDkzNTNkNDA1NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vdHdvcGhhc2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS90d29waGFzZS5jCkBAIC04OTUsNyArODk1LDcgQEAgVHdvUGhhc2VHZXRYaWRCeVZpcnR1 YWxYSUQoVmlydHVhbFRyYW5zYWN0aW9uSWQgdnhpZCwKICAqCQlHZXQgdGhlIGR1bW15IGJh Y2tlbmQgSUQgZm9yIHByZXBhcmVkIHRyYW5zYWN0aW9uIHNwZWNpZmllZCBieSBYSUQKICAq CiAgKiBEdW1teSBiYWNrZW5kIElEcyBhcmUgc2ltaWxhciB0byByZWFsIGJhY2tlbmQgSURz IG9mIHJlYWwgYmFja2VuZHMuCi0gKiBUaGV5IHN0YXJ0IGF0IE1heEJhY2tlbmRzICsgMSwg YW5kIGFyZSB1bmlxdWUgYWNyb3NzIGFsbCBjdXJyZW50bHkgYWN0aXZlCisgKiBUaGV5IHN0 YXJ0IGF0IE1heEJhY2tlbmRzLCBhbmQgYXJlIHVuaXF1ZSBhY3Jvc3MgYWxsIGN1cnJlbnRs eSBhY3RpdmUKICAqIHJlYWwgYmFja2VuZHMgYW5kIHByZXBhcmVkIHRyYW5zYWN0aW9ucy4g IElmIGxvY2tfaGVsZCBpcyBzZXQgdG8gdHJ1ZSwKICAqIFR3b1BoYXNlU3RhdGVMb2NrIHdp bGwgbm90IGJlIHRha2VuLCBzbyB0aGUgY2FsbGVyIGhhZCBiZXR0ZXIgaG9sZCBpdC4KICAq LwpAQCAtOTA0LDcgKzkwNCw3IEBAIFR3b1BoYXNlR2V0RHVtbXlCYWNrZW5kSWQoVHJhbnNh Y3Rpb25JZCB4aWQsIGJvb2wgbG9ja19oZWxkKQogewogCUdsb2JhbFRyYW5zYWN0aW9uIGd4 YWN0ID0gVHdvUGhhc2VHZXRHWGFjdCh4aWQsIGxvY2tfaGVsZCk7CiAKLQlyZXR1cm4gZ3hh Y3QtPnBncHJvY25vICsgMTsKKwlyZXR1cm4gZ3hhY3QtPnBncHJvY25vOwogfQogCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4IDFlNGFiYmNhOGJlLi5lNDAxNjg0 ZjgyZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtMTM3OSw3ICsxMzc5 LDcgQEAgV0FMSW5zZXJ0TG9ja0FjcXVpcmUodm9pZCkKIAlzdGF0aWMgaW50CWxvY2tUb1Ry eSA9IC0xOwogCiAJaWYgKGxvY2tUb1RyeSA9PSAtMSkKLQkJbG9ja1RvVHJ5ID0gTXlQcm9j TnVtYmVyICUgTlVNX1hMT0dJTlNFUlRfTE9DS1M7CisJCWxvY2tUb1RyeSA9IE15QmFja2Vu ZElkICUgTlVNX1hMT0dJTlNFUlRfTE9DS1M7CiAJTXlMb2NrTm8gPSBsb2NrVG9Ucnk7CiAK IAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKaW5kZXggOGIyNGIyMjI5MzEuLjVhYTg5M2M5MTQx IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKQEAgLTEwOTQsNyArMTA5NCw3IEBAIEV4ZWNfTGlz dGVuUHJlQ29tbWl0KHZvaWQpCiAJaGVhZCA9IFFVRVVFX0hFQUQ7CiAJbWF4ID0gUVVFVUVf VEFJTDsKIAlwcmV2TGlzdGVuZXIgPSBJbnZhbGlkQmFja2VuZElkOwotCWZvciAoQmFja2Vu ZElkIGkgPSBRVUVVRV9GSVJTVF9MSVNURU5FUjsgaSA+IDA7IGkgPSBRVUVVRV9ORVhUX0xJ U1RFTkVSKGkpKQorCWZvciAoQmFja2VuZElkIGkgPSBRVUVVRV9GSVJTVF9MSVNURU5FUjsg aSAhPSBJbnZhbGlkQmFja2VuZElkOyBpID0gUVVFVUVfTkVYVF9MSVNURU5FUihpKSkKIAl7 CiAJCWlmIChRVUVVRV9CQUNLRU5EX0RCT0lEKGkpID09IE15RGF0YWJhc2VJZCkKIAkJCW1h eCA9IFFVRVVFX1BPU19NQVgobWF4LCBRVUVVRV9CQUNLRU5EX1BPUyhpKSk7CkBAIC0xMTA2 LDcgKzExMDYsNyBAQCBFeGVjX0xpc3RlblByZUNvbW1pdCh2b2lkKQogCVFVRVVFX0JBQ0tF TkRfUElEKE15QmFja2VuZElkKSA9IE15UHJvY1BpZDsKIAlRVUVVRV9CQUNLRU5EX0RCT0lE KE15QmFja2VuZElkKSA9IE15RGF0YWJhc2VJZDsKIAkvKiBJbnNlcnQgYmFja2VuZCBpbnRv IGxpc3Qgb2YgbGlzdGVuZXJzIGF0IGNvcnJlY3QgcG9zaXRpb24gKi8KLQlpZiAocHJldkxp c3RlbmVyID4gMCkKKwlpZiAocHJldkxpc3RlbmVyICE9IEludmFsaWRCYWNrZW5kSWQpCiAJ ewogCQlRVUVVRV9ORVhUX0xJU1RFTkVSKE15QmFja2VuZElkKSA9IFFVRVVFX05FWFRfTElT VEVORVIocHJldkxpc3RlbmVyKTsKIAkJUVVFVUVfTkVYVF9MSVNURU5FUihwcmV2TGlzdGVu ZXIpID0gTXlCYWNrZW5kSWQ7CkBAIC0xMjUzLDcgKzEyNTMsNyBAQCBhc3luY1F1ZXVlVW5y ZWdpc3Rlcih2b2lkKQogCQlRVUVVRV9GSVJTVF9MSVNURU5FUiA9IFFVRVVFX05FWFRfTElT VEVORVIoTXlCYWNrZW5kSWQpOwogCWVsc2UKIAl7Ci0JCWZvciAoQmFja2VuZElkIGkgPSBR VUVVRV9GSVJTVF9MSVNURU5FUjsgaSA+IDA7IGkgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkp KQorCQlmb3IgKEJhY2tlbmRJZCBpID0gUVVFVUVfRklSU1RfTElTVEVORVI7IGkgIT0gSW52 YWxpZEJhY2tlbmRJZDsgaSA9IFFVRVVFX05FWFRfTElTVEVORVIoaSkpCiAJCXsKIAkJCWlm IChRVUVVRV9ORVhUX0xJU1RFTkVSKGkpID09IE15QmFja2VuZElkKQogCQkJewpAQCAtMTUz Myw3ICsxNTMzLDcgQEAgYXN5bmNRdWV1ZUZpbGxXYXJuaW5nKHZvaWQpCiAJCVF1ZXVlUG9z aXRpb24gbWluID0gUVVFVUVfSEVBRDsKIAkJaW50MzIJCW1pblBpZCA9IEludmFsaWRQaWQ7 CiAKLQkJZm9yIChCYWNrZW5kSWQgaSA9IFFVRVVFX0ZJUlNUX0xJU1RFTkVSOyBpID4gMDsg aSA9IFFVRVVFX05FWFRfTElTVEVORVIoaSkpCisJCWZvciAoQmFja2VuZElkIGkgPSBRVUVV RV9GSVJTVF9MSVNURU5FUjsgaSAhPSBJbnZhbGlkQmFja2VuZElkOyBpID0gUVVFVUVfTkVY VF9MSVNURU5FUihpKSkKIAkJewogCQkJQXNzZXJ0KFFVRVVFX0JBQ0tFTkRfUElEKGkpICE9 IEludmFsaWRQaWQpOwogCQkJbWluID0gUVVFVUVfUE9TX01JTihtaW4sIFFVRVVFX0JBQ0tF TkRfUE9TKGkpKTsKQEAgLTE1ODksNyArMTU4OSw3IEBAIFNpZ25hbEJhY2tlbmRzKHZvaWQp CiAJY291bnQgPSAwOwogCiAJTFdMb2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX0VY Q0xVU0lWRSk7Ci0JZm9yIChCYWNrZW5kSWQgaSA9IFFVRVVFX0ZJUlNUX0xJU1RFTkVSOyBp ID4gMDsgaSA9IFFVRVVFX05FWFRfTElTVEVORVIoaSkpCisJZm9yIChCYWNrZW5kSWQgaSA9 IFFVRVVFX0ZJUlNUX0xJU1RFTkVSOyBpICE9IEludmFsaWRCYWNrZW5kSWQ7IGkgPSBRVUVV RV9ORVhUX0xJU1RFTkVSKGkpKQogCXsKIAkJaW50MzIJCXBpZCA9IFFVRVVFX0JBQ0tFTkRf UElEKGkpOwogCQlRdWV1ZVBvc2l0aW9uIHBvczsKQEAgLTIxMjYsNyArMjEyNiw3IEBAIGFz eW5jUXVldWVBZHZhbmNlVGFpbCh2b2lkKQogCSAqLwogCUxXTG9ja0FjcXVpcmUoTm90aWZ5 UXVldWVMb2NrLCBMV19FWENMVVNJVkUpOwogCW1pbiA9IFFVRVVFX0hFQUQ7Ci0JZm9yIChC YWNrZW5kSWQgaSA9IFFVRVVFX0ZJUlNUX0xJU1RFTkVSOyBpID4gMDsgaSA9IFFVRVVFX05F WFRfTElTVEVORVIoaSkpCisJZm9yIChCYWNrZW5kSWQgaSA9IFFVRVVFX0ZJUlNUX0xJU1RF TkVSOyBpICE9IEludmFsaWRCYWNrZW5kSWQ7IGkgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkp KQogCXsKIAkJQXNzZXJ0KFFVRVVFX0JBQ0tFTkRfUElEKGkpICE9IEludmFsaWRQaWQpOwog CQltaW4gPSBRVUVVRV9QT1NfTUlOKG1pbiwgUVVFVUVfQkFDS0VORF9QT1MoaSkpOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dyaXRlci5jIGIvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9iZ3dyaXRlci5jCmluZGV4IDYzNjRiMTYyNjFmLi42Y2VmOTAxMDQ1 ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dyaXRlci5jCisrKyBi L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3cml0ZXIuYwpAQCAtMzI2LDcgKzMyNiw3IEBA IEJhY2tncm91bmRXcml0ZXJNYWluKHZvaWQpCiAJCWlmIChyYyA9PSBXTF9USU1FT1VUICYm IGNhbl9oaWJlcm5hdGUgJiYgcHJldl9oaWJlcm5hdGUpCiAJCXsKIAkJCS8qIEFzayBmb3Ig bm90aWZpY2F0aW9uIGF0IG5leHQgYnVmZmVyIGFsbG9jYXRpb24gKi8KLQkJCVN0cmF0ZWd5 Tm90aWZ5QmdXcml0ZXIoTXlQcm9jTnVtYmVyKTsKKwkJCVN0cmF0ZWd5Tm90aWZ5QmdXcml0 ZXIoTXlCYWNrZW5kSWQpOwogCQkJLyogU2xlZXAgLi4uICovCiAJCQkodm9pZCkgV2FpdExh dGNoKE15TGF0Y2gsCiAJCQkJCQkJIFdMX0xBVENIX1NFVCB8IFdMX1RJTUVPVVQgfCBXTF9F WElUX09OX1BNX0RFQVRILApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9w Z2FyY2guYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMKaW5kZXggMmFhM2U5 ODkwYTIuLjIxM2M5NjY5ZmRhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L3BnYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMKQEAgLTI0 Miw3ICsyNDIsNyBAQCBQZ0FyY2hpdmVyTWFpbih2b2lkKQogCSAqIEFkdmVydGlzZSBvdXIg cGdwcm9jbm8gc28gdGhhdCBiYWNrZW5kcyBjYW4gdXNlIG91ciBsYXRjaCB0byB3YWtlIHVz IHVwCiAJICogd2hpbGUgd2UncmUgc2xlZXBpbmcuCiAJICovCi0JUGdBcmNoLT5wZ3Byb2Nu byA9IE15UHJvY051bWJlcjsKKwlQZ0FyY2gtPnBncHJvY25vID0gTXlCYWNrZW5kSWQ7CiAK IAkvKiBDcmVhdGUgd29ya3NwYWNlIGZvciBwZ2FyY2hfcmVhZHlYbG9nKCkgKi8KIAlhcmNo X2ZpbGVzID0gcGFsbG9jKHNpemVvZihzdHJ1Y3QgYXJjaF9maWxlc19zdGF0ZSkpOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwppbmRleCA1ZDYxZDE1MTdlOC4u NzE1NjBlOGI4MDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3Vt bWFyaXplci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5j CkBAIC0yNDgsNyArMjQ4LDcgQEAgV2FsU3VtbWFyaXplck1haW4odm9pZCkKIAkvKiBBZHZl cnRpc2Ugb3Vyc2VsdmVzLiAqLwogCW9uX3NobWVtX2V4aXQoV2FsU3VtbWFyaXplclNodXRk b3duLCAoRGF0dW0pIDApOwogCUxXTG9ja0FjcXVpcmUoV0FMU3VtbWFyaXplckxvY2ssIExX X0VYQ0xVU0lWRSk7Ci0JV2FsU3VtbWFyaXplckN0bC0+c3VtbWFyaXplcl9wZ3Byb2NubyA9 IE15UHJvY051bWJlcjsKKwlXYWxTdW1tYXJpemVyQ3RsLT5zdW1tYXJpemVyX3BncHJvY25v ID0gTXlCYWNrZW5kSWQ7CiAJTFdMb2NrUmVsZWFzZShXQUxTdW1tYXJpemVyTG9jayk7CiAK IAkvKiBDcmVhdGUgYW5kIHN3aXRjaCB0byBhIG1lbW9yeSBjb250ZXh0IHRoYXQgd2UgY2Fu IHJlc2V0IG9uIGVycm9yLiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9i dWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpp bmRleCA4N2EzMTc0NTg2NC4uYmI5ZGE5OGM5ZjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVm ZmVyL2J1Zm1nci5jCkBAIC00NzgwLDcgKzQ3ODAsNyBAQCBVbmxvY2tCdWZmZXJzKHZvaWQp CiAJCSAqIGdvdCBhIGNhbmNlbC9kaWUgaW50ZXJydXB0IGJlZm9yZSBnZXR0aW5nIHRoZSBz aWduYWwuCiAJCSAqLwogCQlpZiAoKGJ1Zl9zdGF0ZSAmIEJNX1BJTl9DT1VOVF9XQUlURVIp ICE9IDAgJiYKLQkJCWJ1Zi0+d2FpdF9iYWNrZW5kX3BncHJvY25vID09IE15UHJvY051bWJl cikKKwkJCWJ1Zi0+d2FpdF9iYWNrZW5kX3BncHJvY25vID09IE15QmFja2VuZElkKQogCQkJ YnVmX3N0YXRlICY9IH5CTV9QSU5fQ09VTlRfV0FJVEVSOwogCiAJCVVubG9ja0J1Zkhkcihi dWYsIGJ1Zl9zdGF0ZSk7CkBAIC00OTMwLDcgKzQ5MzAsNyBAQCBMb2NrQnVmZmVyRm9yQ2xl YW51cChCdWZmZXIgYnVmZmVyKQogCQkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NL X1VOTE9DSyk7CiAJCQllbG9nKEVSUk9SLCAibXVsdGlwbGUgYmFja2VuZHMgYXR0ZW1wdGlu ZyB0byB3YWl0IGZvciBwaW5jb3VudCAxIik7CiAJCX0KLQkJYnVmSGRyLT53YWl0X2JhY2tl bmRfcGdwcm9jbm8gPSBNeVByb2NOdW1iZXI7CisJCWJ1Zkhkci0+d2FpdF9iYWNrZW5kX3Bn cHJvY25vID0gTXlCYWNrZW5kSWQ7CiAJCVBpbkNvdW50V2FpdEJ1ZiA9IGJ1ZkhkcjsKIAkJ YnVmX3N0YXRlIHw9IEJNX1BJTl9DT1VOVF9XQUlURVI7CiAJCVVubG9ja0J1ZkhkcihidWZI ZHIsIGJ1Zl9zdGF0ZSk7CkBAIC00OTk0LDcgKzQ5OTQsNyBAQCBMb2NrQnVmZmVyRm9yQ2xl YW51cChCdWZmZXIgYnVmZmVyKQogCQkgKi8KIAkJYnVmX3N0YXRlID0gTG9ja0J1Zkhkcihi dWZIZHIpOwogCQlpZiAoKGJ1Zl9zdGF0ZSAmIEJNX1BJTl9DT1VOVF9XQUlURVIpICE9IDAg JiYKLQkJCWJ1Zkhkci0+d2FpdF9iYWNrZW5kX3BncHJvY25vID09IE15UHJvY051bWJlcikK KwkJCWJ1Zkhkci0+d2FpdF9iYWNrZW5kX3BncHJvY25vID09IE15QmFja2VuZElkKQogCQkJ YnVmX3N0YXRlICY9IH5CTV9QSU5fQ09VTlRfV0FJVEVSOwogCQlVbmxvY2tCdWZIZHIoYnVm SGRyLCBidWZfc3RhdGUpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9wcm9jYXJyYXkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCmlu ZGV4IGQ5NjYwNmViYmE1Li43ZWQwOGQ5NTM1NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv cHJvY2FycmF5LmMKQEAgLTI1MzgsNyArMjUzOCw3IEBAIFByb2NBcnJheUluc3RhbGxJbXBv cnRlZFhtaW4oVHJhbnNhY3Rpb25JZCB4bWluLAogCiAJLyoKIAkgKiBGaW5kIHRoZSBQR1BS T0MgZW50cnkgb2YgdGhlIHNvdXJjZSB0cmFuc2FjdGlvbi4gKFRoaXMgY291bGQgdXNlCi0J ICogR2V0UEdQcm9jQnlCYWNrZW5kSWQoKSwgdW5sZXNzIGl0J3MgYSBwcmVwYXJlZCB4YWN0 LiAgQnV0IHRoaXMgaXNuJ3QKKwkgKiBHZXRQR1Byb2NCeU51bWJlcigpLCB1bmxlc3MgaXQn cyBhIHByZXBhcmVkIHhhY3QuICBCdXQgdGhpcyBpc24ndAogCSAqIHBlcmZvcm1hbmNlIGNy aXRpY2FsLikKIAkgKi8KIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVBy b2NzOyBpbmRleCsrKQpAQCAtMzExNiw5ICszMTE2LDkgQEAgQmFja2VuZElkR2V0UHJvYyhp bnQgYmFja2VuZElEKQogewogCVBHUFJPQwkgICAqcmVzdWx0OwogCi0JaWYgKGJhY2tlbmRJ RCA8IDEgfHwgYmFja2VuZElEID4gUHJvY0dsb2JhbC0+YWxsUHJvY0NvdW50KQorCWlmIChi YWNrZW5kSUQgPCAwIHx8IGJhY2tlbmRJRCA+PSBQcm9jR2xvYmFsLT5hbGxQcm9jQ291bnQp CiAJCXJldHVybiBOVUxMOwotCXJlc3VsdCA9IEdldFBHUHJvY0J5QmFja2VuZElkKGJhY2tl bmRJRCk7CisJcmVzdWx0ID0gR2V0UEdQcm9jQnlOdW1iZXIoYmFja2VuZElEKTsKIAogCWlm IChyZXN1bHQtPnBpZCA9PSAwKQogCQlyZXR1cm4gTlVMTDsKQEAgLTMxNDQsOSArMzE0NCw5 IEBAIEJhY2tlbmRJZEdldFRyYW5zYWN0aW9uSWRzKGludCBiYWNrZW5kSUQsIFRyYW5zYWN0 aW9uSWQgKnhpZCwKIAkqbnN1YnhpZCA9IDA7CiAJKm92ZXJmbG93ZWQgPSBmYWxzZTsKIAot CWlmIChiYWNrZW5kSUQgPCAxIHx8IGJhY2tlbmRJRCA+IFByb2NHbG9iYWwtPmFsbFByb2ND b3VudCkKKwlpZiAoYmFja2VuZElEIDwgMCB8fCBiYWNrZW5kSUQgPj0gUHJvY0dsb2JhbC0+ YWxsUHJvY0NvdW50KQogCQlyZXR1cm47Ci0JcHJvYyA9IEdldFBHUHJvY0J5QmFja2VuZElk KGJhY2tlbmRJRCk7CisJcHJvYyA9IEdldFBHUHJvY0J5TnVtYmVyKGJhY2tlbmRJRCk7CiAK IAkvKiBOZWVkIHRvIGxvY2sgb3V0IGFkZGl0aW9ucy9yZW1vdmFscyBvZiBiYWNrZW5kcyAq LwogCUxXTG9ja0FjcXVpcmUoUHJvY0FycmF5TG9jaywgTFdfU0hBUkVEKTsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwppbmRleCBkMWQ1YmYwYzE1Mi4uMGJmNTc3Yjhi YzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwor KysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKQEAgLTE2MSwxMSAr MTYxLDExIEBAIFByb2NTaWduYWxJbml0KHZvaWQpCiAJUHJvY1NpZ25hbFNsb3QgKnNsb3Q7 CiAJdWludDY0CQliYXJyaWVyX2dlbmVyYXRpb247CiAKLQlpZiAoTXlCYWNrZW5kSWQgPD0g MCkKKwlpZiAoTXlCYWNrZW5kSWQgPCAwKQogCQllbG9nKEVSUk9SLCAiTXlCYWNrZW5kSWQg bm90IHNldCIpOwotCWlmIChNeUJhY2tlbmRJZCA+IE51bVByb2NTaWduYWxTbG90cykKKwlp ZiAoTXlCYWNrZW5kSWQgPj0gTnVtUHJvY1NpZ25hbFNsb3RzKQogCQllbG9nKEVSUk9SLCAi dW5leHBlY3RlZCBNeUJhY2tlbmRJZCAlZCBpbiBQcm9jU2lnbmFsSW5pdCAobWF4ICVkKSIs IE15QmFja2VuZElkLCBOdW1Qcm9jU2lnbmFsU2xvdHMpOwotCXNsb3QgPSAmUHJvY1NpZ25h bC0+cHNoX3Nsb3RbTXlCYWNrZW5kSWQgLSAxXTsKKwlzbG90ID0gJlByb2NTaWduYWwtPnBz aF9zbG90W015QmFja2VuZElkXTsKIAogCS8qIHNhbml0eSBjaGVjayAqLwogCWlmIChzbG90 LT5wc3NfcGlkICE9IDApCkBAIC0yNjAsNyArMjYwLDcgQEAgU2VuZFByb2NTaWduYWwocGlk X3QgcGlkLCBQcm9jU2lnbmFsUmVhc29uIHJlYXNvbiwgQmFja2VuZElkIGJhY2tlbmRJZCkK IAogCWlmIChiYWNrZW5kSWQgIT0gSW52YWxpZEJhY2tlbmRJZCkKIAl7Ci0JCXNsb3QgPSAm UHJvY1NpZ25hbC0+cHNoX3Nsb3RbYmFja2VuZElkIC0gMV07CisJCXNsb3QgPSAmUHJvY1Np Z25hbC0+cHNoX3Nsb3RbYmFja2VuZElkXTsKIAogCQkvKgogCQkgKiBOb3RlOiBTaW5jZSB0 aGVyZSdzIG5vIGxvY2tpbmcsIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgdGFyZ2V0CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWxhZHQuYyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3NpbnZhbGFkdC5jCmluZGV4IGY2MjRiZmM3ZDc4Li5mM2VmM2Vi MWFiMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ludmFsYWR0LmMK KysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ludmFsYWR0LmMKQEAgLTI3NCwxNSAr Mjc0LDEzIEBAIFNoYXJlZEludmFsQmFja2VuZEluaXQoYm9vbCBzZW5kT25seSkKIAlQcm9j U3RhdGUgICpzdGF0ZVA7CiAJcGlkX3QJCW9sZFBpZDsKIAlTSVNlZwkgICAqc2VnUCA9IHNo bUludmFsQnVmZmVyOwotCWludAkJCXBncHJvY25vOwogCi0JaWYgKE15QmFja2VuZElkIDw9 IDApCisJaWYgKE15QmFja2VuZElkIDwgMCkKIAkJZWxvZyhFUlJPUiwgIk15QmFja2VuZElk IG5vdCBzZXQiKTsKLQlpZiAoTXlCYWNrZW5kSWQgPiBOdW1Qcm9jU3RhdGVTbG90cykKKwlp ZiAoTXlCYWNrZW5kSWQgPj0gTnVtUHJvY1N0YXRlU2xvdHMpCiAJCWVsb2coUEFOSUMsICJ1 bmV4cGVjdGVkIE15QmFja2VuZElkICVkIGluIFNoYXJlZEludmFsQmFja2VuZEluaXQgKG1h eCAlZCkiLAogCQkJIE15QmFja2VuZElkLCBOdW1Qcm9jU3RhdGVTbG90cyk7Ci0JcGdwcm9j bm8gPSBNeUJhY2tlbmRJZCAtIDE7Ci0Jc3RhdGVQID0gJnNlZ1AtPnByb2NTdGF0ZVtwZ3By b2Nub107CisJc3RhdGVQID0gJnNlZ1AtPnByb2NTdGF0ZVtNeUJhY2tlbmRJZF07CiAKIAkv KgogCSAqIFRoaXMgY2FuIHJ1biBpbiBwYXJhbGxlbCB3aXRoIHJlYWQgb3BlcmF0aW9ucywg YnV0IG5vdCB3aXRoIHdyaXRlCkBAIC0yOTksNyArMjk3LDcgQEAgU2hhcmVkSW52YWxCYWNr ZW5kSW5pdChib29sIHNlbmRPbmx5KQogCQkJIE15QmFja2VuZElkLCAoaW50KSBvbGRQaWQp OwogCX0KIAotCXNobUludmFsQnVmZmVyLT5wZ3Byb2Nub3Nbc2htSW52YWxCdWZmZXItPm51 bVByb2NzKytdID0gcGdwcm9jbm87CisJc2htSW52YWxCdWZmZXItPnBncHJvY25vc1tzaG1J bnZhbEJ1ZmZlci0+bnVtUHJvY3MrK10gPSBNeUJhY2tlbmRJZDsKIAogCS8qIEZldGNoIG5l eHQgbG9jYWwgdHJhbnNhY3Rpb24gSUQgaW50byBsb2NhbCBtZW1vcnkgKi8KIAluZXh0TG9j YWxUcmFuc2FjdGlvbklkID0gc3RhdGVQLT5uZXh0TFhJRDsKQEAgLTMzMSwxNCArMzI5LDEz IEBAIENsZWFudXBJbnZhbGlkYXRpb25TdGF0ZShpbnQgc3RhdHVzLCBEYXR1bSBhcmcpCiB7 CiAJU0lTZWcJICAgKnNlZ1AgPSAoU0lTZWcgKikgRGF0dW1HZXRQb2ludGVyKGFyZyk7CiAJ UHJvY1N0YXRlICAqc3RhdGVQOwotCWludAkJCXBncHJvY25vID0gTXlCYWNrZW5kSWQgLSAx OwogCWludAkJCWk7CiAKIAlBc3NlcnQoUG9pbnRlcklzVmFsaWQoc2VnUCkpOwogCiAJTFdM b2NrQWNxdWlyZShTSW52YWxXcml0ZUxvY2ssIExXX0VYQ0xVU0lWRSk7CiAKLQlzdGF0ZVAg PSAmc2VnUC0+cHJvY1N0YXRlW3BncHJvY25vXTsKKwlzdGF0ZVAgPSAmc2VnUC0+cHJvY1N0 YXRlW015QmFja2VuZElkXTsKIAogCS8qIFVwZGF0ZSBuZXh0IGxvY2FsIHRyYW5zYWN0aW9u IElEIGZvciBuZXh0IGhvbGRlciBvZiB0aGlzIGJhY2tlbmRJRCAqLwogCXN0YXRlUC0+bmV4 dExYSUQgPSBuZXh0TG9jYWxUcmFuc2FjdGlvbklkOwpAQCAtMzUxLDcgKzM0OCw3IEBAIENs ZWFudXBJbnZhbGlkYXRpb25TdGF0ZShpbnQgc3RhdHVzLCBEYXR1bSBhcmcpCiAKIAlmb3Ig KGkgPSBzZWdQLT5udW1Qcm9jcyAtIDE7IGkgPj0gMDsgaS0tKQogCXsKLQkJaWYgKHNlZ1At PnBncHJvY25vc1tpXSA9PSBwZ3Byb2NubykKKwkJaWYgKHNlZ1AtPnBncHJvY25vc1tpXSA9 PSBNeUJhY2tlbmRJZCkKIAkJewogCQkJaWYgKGkgIT0gc2VnUC0+bnVtUHJvY3MgLSAxKQog CQkJCXNlZ1AtPnBncHJvY25vc1tpXSA9IHNlZ1AtPnBncHJvY25vc1tzZWdQLT5udW1Qcm9j cyAtIDFdOwpAQCAtNDgxLDcgKzQ3OCw3IEBAIFNJR2V0RGF0YUVudHJpZXMoU2hhcmVkSW52 YWxpZGF0aW9uTWVzc2FnZSAqZGF0YSwgaW50IGRhdGFzaXplKQogCWludAkJCW47CiAKIAlz ZWdQID0gc2htSW52YWxCdWZmZXI7Ci0Jc3RhdGVQID0gJnNlZ1AtPnByb2NTdGF0ZVtNeUJh Y2tlbmRJZCAtIDFdOworCXN0YXRlUCA9ICZzZWdQLT5wcm9jU3RhdGVbTXlCYWNrZW5kSWRd OwogCiAJLyoKIAkgKiBCZWZvcmUgc3RhcnRpbmcgdG8gdGFrZSBsb2NrcywgZG8gYSBxdWlj aywgdW5sb2NrZWQgdGVzdCB0byBzZWUgd2hldGhlcgpAQCAtNjY4LDcgKzY2NSw3IEBAIFNJ Q2xlYW51cFF1ZXVlKGJvb2wgY2FsbGVySGFzV3JpdGVMb2NrLCBpbnQgbWluRnJlZSkKIAlp ZiAobmVlZFNpZykKIAl7CiAJCXBpZF90CQloaXNfcGlkID0gbmVlZFNpZy0+cHJvY1BpZDsK LQkJQmFja2VuZElkCWhpc19iYWNrZW5kSWQgPSAobmVlZFNpZyAtICZzZWdQLT5wcm9jU3Rh dGVbMF0pICsgMTsKKwkJQmFja2VuZElkCWhpc19iYWNrZW5kSWQgPSAobmVlZFNpZyAtICZz ZWdQLT5wcm9jU3RhdGVbMF0pOwogCiAJCW5lZWRTaWctPnNpZ25hbGVkID0gdHJ1ZTsKIAkJ TFdMb2NrUmVsZWFzZShTSW52YWxSZWFkTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2xtZ3IvY29uZGl0aW9uX3ZhcmlhYmxlLmMgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvY29uZGl0aW9uX3ZhcmlhYmxlLmMKaW5kZXggMTBmZGFlMTlkY2MuLmRhZmYx MzY4YzFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvY29uZGl0aW9u X3ZhcmlhYmxlLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2NvbmRpdGlvbl92 YXJpYWJsZS5jCkBAIC01Nyw3ICs1Nyw3IEBAIENvbmRpdGlvblZhcmlhYmxlSW5pdChDb25k aXRpb25WYXJpYWJsZSAqY3YpCiB2b2lkCiBDb25kaXRpb25WYXJpYWJsZVByZXBhcmVUb1Ns ZWVwKENvbmRpdGlvblZhcmlhYmxlICpjdikKIHsKLQlpbnQJCQlwZ3Byb2NubyA9IE15UHJv Y051bWJlcjsKKwlpbnQJCQlwZ3Byb2NubyA9IE15QmFja2VuZElkOwogCiAJLyoKIAkgKiBJ ZiBzb21lIG90aGVyIHNsZWVwIGlzIGFscmVhZHkgcHJlcGFyZWQsIGNhbmNlbCBpdDsgdGhp cyBpcyBuZWNlc3NhcnkKQEAgLTE4MSwxMCArMTgxLDEwIEBAIENvbmRpdGlvblZhcmlhYmxl VGltZWRTbGVlcChDb25kaXRpb25WYXJpYWJsZSAqY3YsIGxvbmcgdGltZW91dCwKIAkJICog Z3VhcmFudGVlIG5vdCB0byByZXR1cm4gc3B1cmlvdXNseSwgd2UnbGwgYXZvaWQgdGhpcyBv YnZpb3VzIGNhc2UuCiAJCSAqLwogCQlTcGluTG9ja0FjcXVpcmUoJmN2LT5tdXRleCk7Ci0J CWlmICghcHJvY2xpc3RfY29udGFpbnMoJmN2LT53YWtldXAsIE15UHJvY051bWJlciwgY3ZX YWl0TGluaykpCisJCWlmICghcHJvY2xpc3RfY29udGFpbnMoJmN2LT53YWtldXAsIE15QmFj a2VuZElkLCBjdldhaXRMaW5rKSkKIAkJewogCQkJZG9uZSA9IHRydWU7Ci0JCQlwcm9jbGlz dF9wdXNoX3RhaWwoJmN2LT53YWtldXAsIE15UHJvY051bWJlciwgY3ZXYWl0TGluayk7CisJ CQlwcm9jbGlzdF9wdXNoX3RhaWwoJmN2LT53YWtldXAsIE15QmFja2VuZElkLCBjdldhaXRM aW5rKTsKIAkJfQogCQlTcGluTG9ja1JlbGVhc2UoJmN2LT5tdXRleCk7CiAKQEAgLTIzNiw4 ICsyMzYsOCBAQCBDb25kaXRpb25WYXJpYWJsZUNhbmNlbFNsZWVwKHZvaWQpCiAJCXJldHVy biBmYWxzZTsKIAogCVNwaW5Mb2NrQWNxdWlyZSgmY3YtPm11dGV4KTsKLQlpZiAocHJvY2xp c3RfY29udGFpbnMoJmN2LT53YWtldXAsIE15UHJvY051bWJlciwgY3ZXYWl0TGluaykpCi0J CXByb2NsaXN0X2RlbGV0ZSgmY3YtPndha2V1cCwgTXlQcm9jTnVtYmVyLCBjdldhaXRMaW5r KTsKKwlpZiAocHJvY2xpc3RfY29udGFpbnMoJmN2LT53YWtldXAsIE15QmFja2VuZElkLCBj dldhaXRMaW5rKSkKKwkJcHJvY2xpc3RfZGVsZXRlKCZjdi0+d2FrZXVwLCBNeUJhY2tlbmRJ ZCwgY3ZXYWl0TGluayk7CiAJZWxzZQogCQlzaWduYWxlZCA9IHRydWU7CiAJU3BpbkxvY2tS ZWxlYXNlKCZjdi0+bXV0ZXgpOwpAQCAtMjgxLDcgKzI4MSw3IEBAIENvbmRpdGlvblZhcmlh YmxlU2lnbmFsKENvbmRpdGlvblZhcmlhYmxlICpjdikKIHZvaWQKIENvbmRpdGlvblZhcmlh YmxlQnJvYWRjYXN0KENvbmRpdGlvblZhcmlhYmxlICpjdikKIHsKLQlpbnQJCQlwZ3Byb2Nu byA9IE15UHJvY051bWJlcjsKKwlpbnQJCQlwZ3Byb2NubyA9IE15QmFja2VuZElkOwogCVBH UFJPQwkgICAqcHJvYyA9IE5VTEw7CiAJYm9vbAkJaGF2ZV9zZW50aW5lbCA9IGZhbHNlOwog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbHdsb2NrLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2xtZ3IvbHdsb2NrLmMKaW5kZXggOTk3ODU3Njc5ZWQuLjI5MWFj OGQ1OGY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbHdsb2NrLmMK KysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9jay5jCkBAIC0xMDU2LDkgKzEw NTYsOSBAQCBMV0xvY2tRdWV1ZVNlbGYoTFdMb2NrICpsb2NrLCBMV0xvY2tNb2RlIG1vZGUp CiAKIAkvKiBMV19XQUlUX1VOVElMX0ZSRUUgd2FpdGVycyBhcmUgYWx3YXlzIGF0IHRoZSBm cm9udCBvZiB0aGUgcXVldWUgKi8KIAlpZiAobW9kZSA9PSBMV19XQUlUX1VOVElMX0ZSRUUp Ci0JCXByb2NsaXN0X3B1c2hfaGVhZCgmbG9jay0+d2FpdGVycywgTXlQcm9jTnVtYmVyLCBs d1dhaXRMaW5rKTsKKwkJcHJvY2xpc3RfcHVzaF9oZWFkKCZsb2NrLT53YWl0ZXJzLCBNeUJh Y2tlbmRJZCwgbHdXYWl0TGluayk7CiAJZWxzZQotCQlwcm9jbGlzdF9wdXNoX3RhaWwoJmxv Y2stPndhaXRlcnMsIE15UHJvY051bWJlciwgbHdXYWl0TGluayk7CisJCXByb2NsaXN0X3B1 c2hfdGFpbCgmbG9jay0+d2FpdGVycywgTXlCYWNrZW5kSWQsIGx3V2FpdExpbmspOwogCiAJ LyogQ2FuIHJlbGVhc2UgdGhlIG11dGV4IG5vdyAqLwogCUxXTG9ja1dhaXRMaXN0VW5sb2Nr KGxvY2spOwpAQCAtMTA5Nyw3ICsxMDk3LDcgQEAgTFdMb2NrRGVxdWV1ZVNlbGYoTFdMb2Nr ICpsb2NrKQogCSAqLwogCW9uX3dhaXRsaXN0ID0gTXlQcm9jLT5sd1dhaXRpbmcgPT0gTFdf V1NfV0FJVElORzsKIAlpZiAob25fd2FpdGxpc3QpCi0JCXByb2NsaXN0X2RlbGV0ZSgmbG9j ay0+d2FpdGVycywgTXlQcm9jTnVtYmVyLCBsd1dhaXRMaW5rKTsKKwkJcHJvY2xpc3RfZGVs ZXRlKCZsb2NrLT53YWl0ZXJzLCBNeUJhY2tlbmRJZCwgbHdXYWl0TGluayk7CiAKIAlpZiAo cHJvY2xpc3RfaXNfZW1wdHkoJmxvY2stPndhaXRlcnMpICYmCiAJCShwZ19hdG9taWNfcmVh ZF91MzIoJmxvY2stPnN0YXRlKSAmIExXX0ZMQUdfSEFTX1dBSVRFUlMpICE9IDApCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKaW5kZXggZDYyMDYwZDU4YzguLmQzZGVj OTFhNjhkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRl LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCkBAIC0xODMw LDcgKzE4MzAsNyBAQCBHZXRTZXJpYWxpemFibGVUcmFuc2FjdGlvblNuYXBzaG90SW50KFNu YXBzaG90IHNuYXBzaG90LAogCXN4YWN0LT5maW5pc2hlZEJlZm9yZSA9IEludmFsaWRUcmFu c2FjdGlvbklkOwogCXN4YWN0LT54bWluID0gc25hcHNob3QtPnhtaW47CiAJc3hhY3QtPnBp ZCA9IE15UHJvY1BpZDsKLQlzeGFjdC0+cGdwcm9jbm8gPSBNeVByb2NOdW1iZXI7CisJc3hh Y3QtPnBncHJvY25vID0gTXlCYWNrZW5kSWQ7CiAJZGxpc3RfaW5pdCgmc3hhY3QtPnByZWRp Y2F0ZUxvY2tzKTsKIAlkbGlzdF9ub2RlX2luaXQoJnN4YWN0LT5maW5pc2hlZExpbmspOwog CXN4YWN0LT5mbGFncyA9IDA7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwppbmRleCA0MjI2 ZTQxZDgwYy4uNDAyYWI1M2EwNjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwpAQCAt NjQsNyArNjQsNiBAQCBib29sCQlsb2dfbG9ja193YWl0cyA9IGZhbHNlOwogCiAvKiBQb2lu dGVyIHRvIHRoaXMgcHJvY2VzcydzIFBHUFJPQyBzdHJ1Y3QsIGlmIGFueSAqLwogUEdQUk9D CSAgICpNeVByb2MgPSBOVUxMOwotaW50CQkJTXlQcm9jTnVtYmVyID0gSU5WQUxJRF9QR1BS T0NOTzsKIAogLyoKICAqIFRoaXMgc3BpbmxvY2sgcHJvdGVjdHMgdGhlIGZyZWVsaXN0IG9m IHJlY3ljbGVkIFBHUFJPQyBzdHJ1Y3R1cmVzLgpAQCAtMzUyLDggKzM1MSw3IEBAIEluaXRQ cm9jZXNzKHZvaWQpCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9UT09fTUFOWV9DT05ORUNUSU9O UyksCiAJCQkJIGVycm1zZygic29ycnksIHRvbyBtYW55IGNsaWVudHMgYWxyZWFkeSIpKSk7 CiAJfQotCU15UHJvY051bWJlciA9IEdldE51bWJlckZyb21QR1Byb2MoTXlQcm9jKTsKLQlN eUJhY2tlbmRJZCA9IEdldEJhY2tlbmRJZEZyb21QR1Byb2MoTXlQcm9jKTsKKwlNeUJhY2tl bmRJZCA9IEdldE51bWJlckZyb21QR1Byb2MoTXlQcm9jKTsKIAogCS8qCiAJICogQ3Jvc3Mt Y2hlY2sgdGhhdCB0aGUgUEdQUk9DIGlzIG9mIHRoZSB0eXBlIHdlIGV4cGVjdDsgaWYgdGhp cyB3ZXJlIG5vdApAQCAtNTY2LDggKzU2NCw3IEBAIEluaXRBdXhpbGlhcnlQcm9jZXNzKHZv aWQpCiAJU3BpbkxvY2tSZWxlYXNlKFByb2NTdHJ1Y3RMb2NrKTsKIAogCU15UHJvYyA9IGF1 eHByb2M7Ci0JTXlQcm9jTnVtYmVyID0gR2V0TnVtYmVyRnJvbVBHUHJvYyhNeVByb2MpOwot CU15QmFja2VuZElkID0gR2V0QmFja2VuZElkRnJvbVBHUHJvYyhNeVByb2MpOworCU15QmFj a2VuZElkID0gR2V0TnVtYmVyRnJvbVBHUHJvYyhNeVByb2MpOwogCiAJLyoKIAkgKiBJbml0 aWFsaXplIGFsbCBmaWVsZHMgb2YgTXlQcm9jLCBleGNlcHQgZm9yIHRob3NlIHByZXZpb3Vz bHkKQEAgLTkxMCw3ICs5MDcsNiBAQCBQcm9jS2lsbChpbnQgY29kZSwgRGF0dW0gYXJnKQog CiAJcHJvYyA9IE15UHJvYzsKIAlNeVByb2MgPSBOVUxMOwotCU15UHJvY051bWJlciA9IElO VkFMSURfUEdQUk9DTk87CiAJTXlCYWNrZW5kSWQgPSBJbnZhbGlkQmFja2VuZElkOwogCURp c293bkxhdGNoKCZwcm9jLT5wcm9jTGF0Y2gpOwogCkBAIC05ODgsNyArOTg0LDYgQEAgQXV4 aWxpYXJ5UHJvY0tpbGwoaW50IGNvZGUsIERhdHVtIGFyZykKIAogCXByb2MgPSBNeVByb2M7 CiAJTXlQcm9jID0gTlVMTDsKLQlNeVByb2NOdW1iZXIgPSBJTlZBTElEX1BHUFJPQ05POwog CU15QmFja2VuZElkID0gSW52YWxpZEJhY2tlbmRJZDsKIAlEaXNvd25MYXRjaCgmcHJvYy0+ cHJvY0xhdGNoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkv YmFja2VuZF9zdGF0dXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L2JhY2tlbmRf c3RhdHVzLmMKaW5kZXggM2QzZjdiMDY3MjMuLjhhNGE5Y2QyMTliIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9iYWNrZW5kX3N0YXR1cy5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FjdGl2aXR5L2JhY2tlbmRfc3RhdHVzLmMKQEAgLTI0OSw4ICsyNDks OCBAQCBwZ3N0YXRfYmVpbml0KHZvaWQpCiB7CiAJLyogSW5pdGlhbGl6ZSBNeUJFRW50cnkg Ki8KIAlBc3NlcnQoTXlCYWNrZW5kSWQgIT0gSW52YWxpZEJhY2tlbmRJZCk7Ci0JQXNzZXJ0 KE15QmFja2VuZElkID49IDEgJiYgTXlCYWNrZW5kSWQgPD0gTnVtQmFja2VuZFN0YXRTbG90 cyk7Ci0JTXlCRUVudHJ5ID0gJkJhY2tlbmRTdGF0dXNBcnJheVtNeUJhY2tlbmRJZCAtIDFd OworCUFzc2VydChNeUJhY2tlbmRJZCA+PSAwICYmIE15QmFja2VuZElkIDwgTnVtQmFja2Vu ZFN0YXRTbG90cyk7CisJTXlCRUVudHJ5ID0gJkJhY2tlbmRTdGF0dXNBcnJheVtNeUJhY2tl bmRJZF07CiAKIAkvKiBTZXQgdXAgYSBwcm9jZXNzLWV4aXQgaG9vayB0byBjbGVhbiB1cCAq LwogCW9uX3NobWVtX2V4aXQocGdzdGF0X2Jlc2h1dGRvd25faG9vaywgMCk7CkBAIC03MjEs NyArNzIxLDcgQEAgcGdzdGF0X3JlYWRfY3VycmVudF9zdGF0dXModm9pZCkKICNpZmRlZiBF TkFCTEVfR1NTCiAJUGdCYWNrZW5kR1NTU3RhdHVzICpsb2NhbGdzc3N0YXR1czsKICNlbmRp ZgotCWludAkJCWk7CisJaW50CQkJYmFja2VuZElkOwogCiAJaWYgKGxvY2FsQmFja2VuZFN0 YXR1c1RhYmxlKQogCQlyZXR1cm47CQkJCQkvKiBhbHJlYWR5IGRvbmUgKi8KQEAgLTc2NCw3 ICs3NjQsNyBAQCBwZ3N0YXRfcmVhZF9jdXJyZW50X3N0YXR1cyh2b2lkKQogCiAJYmVlbnRy eSA9IEJhY2tlbmRTdGF0dXNBcnJheTsKIAlsb2NhbGVudHJ5ID0gbG9jYWx0YWJsZTsKLQlm b3IgKGkgPSAxOyBpIDw9IE51bUJhY2tlbmRTdGF0U2xvdHM7IGkrKykKKwlmb3IgKGJhY2tl bmRJZCA9IDA7IGJhY2tlbmRJZCA8IE51bUJhY2tlbmRTdGF0U2xvdHM7IGJhY2tlbmRJZCsr KQogCXsKIAkJLyoKIAkJICogRm9sbG93IHRoZSBwcm90b2NvbCBvZiByZXRyeWluZyBpZiBz dF9jaGFuZ2Vjb3VudCBjaGFuZ2VzIHdoaWxlIHdlCkBAIC04MzUsOCArODM1LDggQEAgcGdz dGF0X3JlYWRfY3VycmVudF9zdGF0dXModm9pZCkKIAkJCSAqIGlzIGluIG9yZGVyIGJ5IGJh Y2tlbmRfaWQuICBwZ3N0YXRfZ2V0X2JlZW50cnlfYnlfYmFja2VuZF9pZCgpCiAJCQkgKiBk ZXBlbmRzIG9uIHRoYXQuCiAJCQkgKi8KLQkJCWxvY2FsZW50cnktPmJhY2tlbmRfaWQgPSBp OwotCQkJQmFja2VuZElkR2V0VHJhbnNhY3Rpb25JZHMoaSwKKwkJCWxvY2FsZW50cnktPmJh Y2tlbmRfaWQgPSBiYWNrZW5kSWQ7CisJCQlCYWNrZW5kSWRHZXRUcmFuc2FjdGlvbklkcyhi YWNrZW5kSWQsCiAJCQkJCQkJCQkgICAmbG9jYWxlbnRyeS0+YmFja2VuZF94aWQsCiAJCQkJ CQkJCQkgICAmbG9jYWxlbnRyeS0+YmFja2VuZF94bWluLAogCQkJCQkJCQkJICAgJmxvY2Fs ZW50cnktPmJhY2tlbmRfc3VieGFjdF9jb3VudCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9tY3h0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVu Y3MuYwppbmRleCBhNzI2N2RjMTVkMS4uYTMyMzlhYjEyNmIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvbWN4dGZ1bmNzLmMKQEAgLTE3Niw3ICsxNzYsNyBAQCBwZ19sb2dfYmFja2VuZF9tZW1v cnlfY29udGV4dHMoUEdfRlVOQ1RJT05fQVJHUykKIAl9CiAKIAlpZiAocHJvYyAhPSBOVUxM KQotCQliYWNrZW5kSWQgPSBHZXRCYWNrZW5kSWRGcm9tUEdQcm9jKHByb2MpOworCQliYWNr ZW5kSWQgPSBHZXROdW1iZXJGcm9tUEdQcm9jKHByb2MpOwogCWlmIChTZW5kUHJvY1NpZ25h bChwaWQsIFBST0NTSUdfTE9HX01FTU9SWV9DT05URVhULCBiYWNrZW5kSWQpIDwgMCkKIAl7 CiAJCS8qIEFnYWluLCBqdXN0IGEgd2FybmluZyB0byBhbGxvdyBsb29wcyAqLwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9iYWNrZW5kaWQuaCBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvYmFja2VuZGlkLmgKaW5kZXggMDEzODc3MjNmNzkuLmRlMjQyZTJjMDM5IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2JhY2tlbmRpZC5oCisrKyBiL3NyYy9pbmNs dWRlL3N0b3JhZ2UvYmFja2VuZGlkLmgKQEAgLTE5LDggKzE5LDEwIEBACiAgKiBhc3NpZ25l ZCBhdCBiYWNrZW5kIHN0YXJ0dXAgYWZ0ZXIgYXV0aGVudGljYXRpb24uICBOb3RlIHRoYXQg YSBiYWNrZW5kIElECiAgKiBjYW4gYmUgcmV1c2VkIGZvciBhIGRpZmZlcmVudCBiYWNrZW5k IGltbWVkaWF0ZWx5IGFmdGVyIGEgYmFja2VuZCBleGl0cy4KICAqCi0gKiBCYWNrZW5kIElE cyBhcmUgYXNzaWduZWQgc3RhcnRpbmcgZnJvbSAxLiBGb3IgaGlzdG9yaWNhbCByZWFzb25z LCBCYWNrZW5kSWQKLSAqIDAgaXMgdW51c2VkLCBidXQgSW52YWxpZEJhY2tlbmRJZCBpcyBk ZWZpbmVkIGFzIC0xLgorICogQmFja2VuZCBJRHMgYXJlIGFzc2lnbmVkIHN0YXJ0aW5nIGZy b20gMC4gIEEgYmFja2VuZCBJRCBpcyBhbHNvIGFuIGluZGV4CisgKiBpbnRvIHRoZSBwcm9j IGFycmF5LCBhbmQgaXMgc3lub255bW91cyB3aXRoICJwcm9jIG51bWJlcnMiIHVzZWQgaW4g b3RoZXIKKyAqIHBhcnRzIG9mIHRoZSBjb2RlLiAgKEJlZm9yZSB2ZXJzaW9uIDE3LCBiYWNr ZW5kIElEcyB3ZXJlIGFzc2lnbmVkCisgKiBzZXBhcmF0ZWx5IGZyb20gcHJvYyBudW1iZXJz LCBhbmQgc3RhcnRlZCBmcm9tIDEuKQogICovCiB0eXBlZGVmIGludCBCYWNrZW5kSWQ7CiAK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oIGIvc3JjL2luY2x1ZGUv c3RvcmFnZS9wcm9jLmgKaW5kZXggZDFlNTAzODBiN2MuLmVjYTBhNTgwOWUxIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL3Byb2MuaApAQCAtMTk5LDcgKzE5OSw3IEBAIHN0cnVjdCBQR1BST0MKIAkgKi8KIAlz dHJ1Y3QgewogCQlCYWNrZW5kSWQJYmFja2VuZElkOwkJLyogRm9yIHJlZ3VsYXIgYmFja2Vu ZHMsIGVxdWFsIHRvCi0JCQkJCQkJCQkgKiBHZXRCYWNrZW5kSWRGcm9tUEdQcm9jKHByb2Mp LiAgRm9yCisJCQkJCQkJCQkgKiBHZXROdW1iZXJGcm9tUEdQcm9jKHByb2MpLiAgRm9yCiAJ CQkJCQkJCQkgKiBwcmVwYXJlZCB4YWN0cywgSUQgb2YgdGhlIG9yaWdpbmFsCiAJCQkJCQkJ CQkgKiBiYWNrZW5kIHRoYXQgcHJvY2Vzc2VkIHRoZQogCQkJCQkJCQkJICogdHJhbnNhY3Rp b24uIEZvciB1bnVzZWQgUEdQUk9DIGVudHJpZXMsCkBAIC0zMTcsNyArMzE3LDYgQEAgc3Ry dWN0IFBHUFJPQwogCiAKIGV4dGVybiBQR0RMTElNUE9SVCBQR1BST0MgKk15UHJvYzsKLWV4 dGVybiBQR0RMTElNUE9SVCBpbnQgTXlQcm9jTnVtYmVyOwkvKiBzYW1lIGFzIEdldE51bWJl ckZyb21QR1Byb2MoTXlQcm9jKSAqLwogCiAvKgogICogVGhlcmUgaXMgb25lIFByb2NHbG9i YWwgc3RydWN0IGZvciB0aGUgd2hvbGUgZGF0YWJhc2UgY2x1c3Rlci4KQEAgLTQyMiwxNSAr NDIxLDExIEBAIGV4dGVybiBQR0RMTElNUE9SVCBQUk9DX0hEUiAqUHJvY0dsb2JhbDsKIGV4 dGVybiBQR0RMTElNUE9SVCBQR1BST0MgKlByZXBhcmVkWGFjdFByb2NzOwogCiAvKgotICog QWNjZXNzb3JzIGZvciBnZXR0aW5nIFBHUFJPQyBnaXZlbiBhIHBncHJvY25vIG9yIEJhY2tl bmRJZCwgYW5kIHZpY2UgdmVyc2EuCi0gKgotICogRm9yIGhpc3RvcmljYWwgcmVhc29ucywg c29tZSBjb2RlIHVzZXMgMC1iYXNlZCAicHJvYyBudW1iZXJzIiwgd2hpbGUgb3RoZXIKLSAq IGNvZGUgdXNlcyAxLWJhc2VkIGJhY2tlbmQgSURzLgorICogQWNjZXNzb3JzIGZvciBnZXR0 aW5nIFBHUFJPQyBnaXZlbiBhIHBncHJvY25vIChvciBCYWNrZW5kSWQgd2hpY2ggaXMgdGhl CisgKiBzYW1lIHRoaW5nIHNpbmNlIHZlcnNpb24gMTcpIGFuZCB2aWNlIHZlcnNhLgogICov CiAjZGVmaW5lIEdldFBHUHJvY0J5TnVtYmVyKG4pICgmUHJvY0dsb2JhbC0+YWxsUHJvY3Nb KG4pXSkKICNkZWZpbmUgR2V0TnVtYmVyRnJvbVBHUHJvYyhwcm9jKSAoKHByb2MpIC0gJlBy b2NHbG9iYWwtPmFsbFByb2NzWzBdKQotI2RlZmluZSBHZXRQR1Byb2NCeUJhY2tlbmRJZChu KSAoJlByb2NHbG9iYWwtPmFsbFByb2NzWyhuKSAtIDFdKQotI2RlZmluZSBHZXRCYWNrZW5k SWRGcm9tUEdQcm9jKHByb2MpIChHZXROdW1iZXJGcm9tUEdQcm9jKHByb2MpICsgMSkKIAog LyoKICAqIFdlIHNldCBhc2lkZSBzb21lIGV4dHJhIFBHUFJPQyBzdHJ1Y3R1cmVzIGZvciBh dXhpbGlhcnkgcHJvY2Vzc2VzLAotLSAKMi4zOS4yCgo= --------------D7q2JUSUBACJ11MlrkrBV8fY--