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 1txwzv-000BZN-HT for pgsql-hackers@arkaria.postgresql.org; Thu, 27 Mar 2025 23:50:56 +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 1txwzu-00G78o-8O for pgsql-hackers@arkaria.postgresql.org; Thu, 27 Mar 2025 23:50:54 +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 1txwzt-00G78U-Ez for pgsql-hackers@lists.postgresql.org; Thu, 27 Mar 2025 23:50:53 +0000 Received: from relay1-d.mail.gandi.net ([217.70.183.193]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1txwzo-001Vv8-1y for pgsql-hackers@postgresql.org; Thu, 27 Mar 2025 23:50:52 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id C154B432F5; Thu, 27 Mar 2025 23:50:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1743119444; 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=ZMIgxRDVJOR8y2cXZUFIlJp6k4cxZxYvhDveGF9LFDQ=; b=lCWJJE3XL8nAXZCjMVtiFy/149N2edZTePOBgOIDIsdmuft7mxMmmYBZ7b2xHFPR5FuaLj 5LwUTOnqE21ftprxGo3NLMyYedO2fxsAkoj/k8MGVzrNdwAo6Lhep7dqGfZp1YtqnHxniP V2B0O72GMf2R09bXeP+pV6mg6diSWBwq9Xqhf7TMEpb1xQ+8qrAY0lwu30YIQbZRRK4wDZ SK8hgrCuxC7zhPHFCbYzwHvuakeArsoMewUmk0Rw2ktpV9eLHUCqhb0KkR3mcHf8/q9mS/ 0NogyZsONSm/+IX/YU2/0ZygxbBcc2nCBNQ9g9Fh/wG9fsSSXfuOSX9m/KQ5jQ== Content-Type: multipart/mixed; boundary="------------eAs3MTPG5ycztqDaCyrXnZxm" Message-ID: <6705dbd2-060b-4f3c-9fcb-1c7f10880b26@vondra.me> Date: Fri, 28 Mar 2025 00:50:42 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Improve monitoring of shared memory allocations From: Tomas Vondra To: Rahila Syed Cc: Nazir Bilal Yavuz , Andres Freund , PostgreSQL-development References: <3e40eeec-d8bf-4496-854e-485dd901f6a2@vondra.me> <6bf7194e-4c34-4e6d-8215-f6acf8903974@vondra.me> Content-Language: en-US In-Reply-To: <6bf7194e-4c34-4e6d-8215-f6acf8903974@vondra.me> X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdduieeljeejucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpegtkfffgggfuffhvfevfhgjsehmtderredtvdejnecuhfhrohhmpefvohhmrghsucggohhnughrrgcuoehtohhmrghssehvohhnughrrgdrmhgvqeenucggtffrrghtthgvrhhnpeetheegudegieegvdeitdegkeetiedtheelveffgefggfeuvdduueffleeuvdevueenucfkphepkeeirdegledrvdefiedrudelfeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeekiedrgeelrddvfeeirdduleefpdhhvghloheplgdutddrudefjedrtddrvdgnpdhmrghilhhfrhhomhepthhomhgrshesvhhonhgurhgrrdhmvgdpnhgspghrtghpthhtohepgedprhgtphhtthhopehrrghhihhlrghshigvugeltdesghhmrghilhdrtghomhdprhgtphhtthhopegshigrvhhuiiekudesghhmrghilhdrtghomhdprhgtphhtthhopegrnhgurhgvshesrghnrghrrgiivghlrdguvgdprhgtphhtthhopehpghhsqhhlqdhhrggtkhgvrhhssehpohhsthhgrhgvshhqlhdrohhrgh X-GND-Sasl: tomas@vondra.me 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. --------------eAs3MTPG5ycztqDaCyrXnZxm Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 3/27/25 13:56, Tomas Vondra wrote: > ... > > OK, I don't have any other comments for 0001 and 0002. I'll do some > more review and polishing on those, and will get them committed soon. > Actually ... while polishing 0001 and 0002, I noticed a couple more details that I'd like to ask about. I also ran pgindent and tweaked the formatting, so some of the diff is caused by that. 1) alignment There was a comment with a question whether we need to MAXALIGN the chunks in dynahash.c, which were originally allocated by ShmemAlloc, but now it's part of one large allocation, which is then cut into pieces (using pointer arithmetics). I was not sure whether we need to enforce some alignment, we briefly discussed that off-list. I realize you chose to add the alignment, but I haven't noticed any comment in the patch why it's needed, and it seems to me it may not be quite correct. Let me explain what I had in mind, and why I think the way v5 doesn't actually do that. It took me a while before I understood what alignment is about, and for a while it was haunting my patches, so hopefully this will help others ... The "alignment" is about pointers (or addresses), and when a pointer is aligned it means the address is a multiple of some number. For example 4B-aligned pointer is a multiple of 4B, so 0x00000100 is 4B-aligned, while 0x00000101 is not. Sometimes we use data types to express the alignment, e.g. int-aligned is 4B-aligned, but that's a detail. AFAIK the alignment is always 2^k, so 1, 2, 4, 8, ... The primary reason for alignment is that some architectures require the pointers to be well-aligned for a given data type. For example (int*) needs to be int-aligned. If you have a pointer that's not 4B-aligned, it'll trigger SIGBUS or maybe SIGSEGV. This was true for architectures like powerpc, I don't think x86/arm64 have this restriction, i.e. it'd work, even if there might be a minor performance impact. Anyway, we still enforce/expect correct alignment, because we may still support some of those alignment-sensitive platforms, and it's "tidy". The other reason is that we sometimes use alignment to add padding, to reduce contention when accessing elements in hot arrays. We want to align to cacheline boundaries, so that a struct does not require accessing more cachelines than really necessary. And also to reduce contention - the more cachelines, the higher the risk of contention. Now, back to the patch. The code originally did this in ShmemInitStruct hashp = ShmemInitStruct(...) to allocate the hctl, and then firstElement = (HASHELEMENT *) ShmemAlloc(nelem * elementSize); in element_alloc(). But this means the "elements" allocation is aligned to PG_CACHE_LINE_SIZE, i.e. 128B, because ShmemAllocRaw() does this: size = CACHELINEALIGN(size); So it distributes memory in multiples of 128B, and I believe it starts at a multiple of 128B. But the patch reworks this to allocate everything at once, and thus it won't get this alignment automatically. AFAIK that's not intentional, because no one explicitly mentioned this. And it's may not be quite desirable, judging by the comment in ShmemAllocRaw(). I mentioned v5 adds alignment, but I think it does not quite do that quite correctly. It adds alignment by changing the macros from: +#define HASH_ELEMENTS_OFFSET(hctl, nsegs) \ + (sizeof(HASHHDR) + \ + ((hctl)->dsize * sizeof(HASHSEGMENT)) + \ + ((hctl)->ssize * (nsegs) * sizeof(HASHBUCKET))) to +#define HASH_ELEMENTS_OFFSET(hctl, nsegs) \ + (MAXALIGN(sizeof(HASHHDR)) + \ + ((hctl)->dsize * MAXALIGN(sizeof(HASHSEGMENT))) + \ + ((hctl)->ssize * (nsegs) * MAXALIGN(sizeof(HASHBUCKET)))) First, it uses MAXALIGN, but that's mostly my fault, because my comment suggested that - the ShmemAllocRaw however and makes the case for using CACHELINEALIGN. But more importantly, it adds alignment to all hctl field, and to every element of those arrays. But that's not what the alignment was supposed to do - it was supposed to align arrays, not individual elements. Not only would this waste memory, it would actually break direct access to those array elements. So something like this might be more correct: +#define HASH_ELEMENTS_OFFSET(hctl, nsegs) \ + (MAXALIGN(sizeof(HASHHDR)) + \ + MAXALIGN((hctl)->dsize * izeof(HASHSEGMENT)) + \ + MAXALIGN((hctl)->ssize * (nsegs) * sizeof(HASHBUCKET))) But there's another detail - even before this patch, most of the stuff was allocated at once by ShmemInitStruct(). Everything except for the elements, so to replicate the alignment we only need to worry about that last part. So I think this should do: +#define HASH_ELEMENTS_OFFSET(hctl, nsegs) \ + CACHELINEALIGN(sizeof(HASHHDR) + \ + ((hctl)->dsize * sizeof(HASHSEGMENT)) + \ + ((hctl)->ssize * (nsegs) * sizeof(HASHBUCKET))) This is what the 0003 patch does. There's still one minor difference, in that we used to align each segment independently - each element_alloc() call allocated a new CACHELINEALIGN-ed chunk, while now have just a single chunk. But I think that's OK. In fact, I'm starting to wonder if we need to worry about this at all. Maybe it's not that significant for dynahash after all - otherwise we actually should align/pad the individual elements, not just the array as a whole, I think. 2) I do think the last patch should use CACHELINEALIGN() too, instead of adding PG_CACHE_LINE_SIZE to the sizes (which does not ensure good alignment, it just means there's gap between the allocated parts). But I still don't know what the intention was, so hard to say ... 3) I find the comment before hash_get_init_size a bit unclear/confusing. It says this: * init_size should match the total number of elements allocated during * hash table creation, it could be zero for non-shared hash tables * depending on the value of nelem_alloc. For more explanation see * comments within this function. * * nelem_alloc parameter is not relevant for shared hash tables. What does "should match" mean here? Doesn't it *determine* the number of elements allocated? What if it doesn't match? AFAICS it means the hash table is sized to expect init_size elements, but only nelem_alloc elements are actually pre-allocated, right? But the comment says it's init_size which determines the number of elements allocated during creation. Confusing. It says "it could be zero ... depending on the value of nelem_alloc". Depending how? What's the relationship. Then it says "nelem_alloc parameter is not relevant for shared hash tables". What does "not relevant" mean? It should say it's ignored. The bit "For more explanation see comments within this function" is not great, if only because there are not many comments within the function, so there's no "more explanation". But if there's something important, it should be in the main comment, preferably. regards -- Tomas Vondra --------------eAs3MTPG5ycztqDaCyrXnZxm Content-Type: text/x-patch; charset=UTF-8; name="v6-0001-Account-for-all-the-shared-memory-allocated-by-ha.patch" Content-Disposition: attachment; filename*0="v6-0001-Account-for-all-the-shared-memory-allocated-by-ha.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBhMGFiOTYzMjY2ODdmZjhlYjlmZjNmZDgzNDNjZmY1NDUyMjZmZDBhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBSYWhpbGEgU3llZCA8cmFoaWxhc3llZC45MEBnbWFp bC5jb20+CkRhdGU6IFRodSwgMjcgTWFyIDIwMjUgMTI6NTk6MDIgKzA1MzAKU3ViamVjdDog W1BBVENIIHY2IDEvN10gQWNjb3VudCBmb3IgYWxsIHRoZSBzaGFyZWQgbWVtb3J5IGFsbG9j YXRlZCBieQogaGFzaF9jcmVhdGUKCnBnX3NobWVtX2FsbG9jYXRpb25zIHRyYWNrcyB0aGUg bWVtb3J5IGFsbG9jYXRlZCBieSBTaG1lbUluaXRTdHJ1Y3QsCndoaWNoLCBpbiBjYXNlIG9m IHNoYXJlZCBoYXNoIHRhYmxlcywgb25seSBjb3ZlcnMgbWVtb3J5IGFsbG9jYXRlZAp0byB0 aGUgaGFzaCBkaXJlY3RvcnkgYW5kIGhlYWRlciBzdHJ1Y3R1cmUuIFRoZSBoYXNoIHNlZ21l bnRzIGFuZApidWNrZXRzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgU2htZW1BbGxvY05vRXJyb3Ig d2hpY2ggZG9lcyBub3QgYXR0cmlidXRlCnRoZSBhbGxvY2F0aW9ucyB0byB0aGUgaGFzaCB0 YWJsZSBuYW1lLiBUaHVzLCB0aGVzZSBhbGxvY2F0aW9ucyBhcmUKbm90IHRyYWNrZWQgaW4g cGdfc2htZW1fYWxsb2NhdGlvbnMuCgpBbGxvY2F0ZSBtZW1vcnkgZm9yIHNlZ21lbnRzLCBi dWNrZXRzIGFuZCBlbGVtZW50cyB0b2dldGhlciB3aXRoIHRoZQpkaXJlY3RvcnkgYW5kIGhl YWRlciBzdHJ1Y3R1cmVzLiBUaGlzIHJlc3VsdHMgaW4gdGhlIGV4aXN0aW5nIFNobWVtSW5k ZXgKZW50cmllcyB0byByZWZsZWN0IHNpemUgb2YgaGFzaCB0YWJsZSBtb3JlIGFjY3VyYXRl bHksIHRodXMgaW1wcm92aW5nCnRoZSBwZ19zaG1lbV9hbGxvY2F0aW9uIG1vbml0b3Jpbmcu IEFsc28sIG1ha2UgdGhpcyBjaGFuZ2UgZm9yIG5vbi0Kc2hhcmVkIGhhc2ggdGFibGUgc2lu Y2UgdGhleSBib3RoIHNoYXJlIHRoZSBoYXNoX2NyZWF0ZSBjb2RlLgotLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvdXRpbHMv aGFzaC9keW5haGFzaC5jIHwgMjY1ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQog c3JjL2luY2x1ZGUvdXRpbHMvaHNlYXJjaC5oICAgICAgIHwgICAzICstCiAzIGZpbGVzIGNo YW5nZWQsIDIxMyBpbnNlcnRpb25zKCspLCA1OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvc2htZW0uYwppbmRleCA4OTVhNDNmYjM5ZS4uZDhhZWQwYmZhYWYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKKysrIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvc2htZW0uYwpAQCAtNzMsNiArNzMsNyBAQAogI2luY2x1ZGUgInN0b3Jh Z2Uvc2htZW0uaCIKICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKICNpbmNsdWRlICJ1dGls cy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2R5bmFoYXNoLmgiCiAKIHN0YXRpYyB2 b2lkICpTaG1lbUFsbG9jUmF3KFNpemUgc2l6ZSwgU2l6ZSAqYWxsb2NhdGVkX3NpemUpOwog CkBAIC0zNDYsNyArMzQ3LDcgQEAgU2htZW1Jbml0SGFzaChjb25zdCBjaGFyICpuYW1lLAkJ LyogdGFibGUgc3RyaW5nIG5hbWUgZm9yIHNobWVtIGluZGV4ICovCiAKIAkvKiBsb29rIGl0 IHVwIGluIHRoZSBzaG1lbSBpbmRleCAqLwogCWxvY2F0aW9uID0gU2htZW1Jbml0U3RydWN0 KG5hbWUsCi0JCQkJCQkJICAgaGFzaF9nZXRfc2hhcmVkX3NpemUoaW5mb1AsIGhhc2hfZmxh Z3MpLAorCQkJCQkJCSAgIGhhc2hfZ2V0X2luaXRfc2l6ZShpbmZvUCwgaGFzaF9mbGFncywg aW5pdF9zaXplLCAwKSwKIAkJCQkJCQkgICAmZm91bmQpOwogCiAJLyoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2hhc2gvZHluYWhhc2guYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2hhc2gvZHluYWhhc2guYwppbmRleCAzZjI1OTI5ZjJkOC4uMWYyMTVhMTZjNTEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2hhc2gvZHluYWhhc2guYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9oYXNoL2R5bmFoYXNoLmMKQEAgLTI2MCwxMiArMjYwLDM2IEBAIHN0YXRp YyBsb25nIGhhc2hfYWNjZXNzZXMsCiAJCQloYXNoX2V4cGFuc2lvbnM7CiAjZW5kaWYKIAor CisjZGVmaW5lIEhBU0hfRUxFTUVOVFNfT0ZGU0VUKGhjdGwsIG5zZWdzKSBcCisJKE1BWEFM SUdOKHNpemVvZihIQVNISERSKSkgKyBcCisJICgoaGN0bCktPmRzaXplICogTUFYQUxJR04o c2l6ZW9mKEhBU0hTRUdNRU5UKSkpICsgXAorCSAoKGhjdGwpLT5zc2l6ZSAqIChuc2Vncykg KiBNQVhBTElHTihzaXplb2YoSEFTSEJVQ0tFVCkpKSkKKworI2RlZmluZSBIQVNIX0VMRU1F TlRTKGhhc2hwLCBuc2VncykgXAorCSgoY2hhciAqKSAoaGFzaHApLT5oY3RsICsgSEFTSF9F TEVNRU5UU19PRkZTRVQoKGhhc2hwKS0+aGN0bCwgbnNlZ3MpKQorCisjZGVmaW5lIEhBU0hf U0VHTUVOVF9PRkZTRVQoaGN0bCwgaWR4KSBcCisJKE1BWEFMSUdOKHNpemVvZihIQVNISERS KSkgKyBcCisJICgoaGN0bCktPmRzaXplICogTUFYQUxJR04oc2l6ZW9mKEhBU0hTRUdNRU5U KSkpICsgXAorCSAoKGhjdGwpLT5zc2l6ZSAqIChpZHgpICogTUFYQUxJR04oc2l6ZW9mKEhB U0hCVUNLRVQpKSkpCisKKyNkZWZpbmUgSEFTSF9TRUdNRU5UX1BUUihoYXNocCwgaWR4KSBc CisJKEhBU0hTRUdNRU5UKSAoKGNoYXIgKikgKGhhc2hwKS0+aGN0bCArIEhBU0hfU0VHTUVO VF9PRkZTRVQoKGhhc2hwKS0+aGN0bCwgKGlkeCkpKQorCisjZGVmaW5lIEhBU0hfU0VHTUVO VF9TSVpFKGhhc2hwKQkoKGhhc2hwKS0+c3NpemUgKiBNQVhBTElHTihzaXplb2YoSEFTSEJV Q0tFVCkpKQorCisjZGVmaW5lCUhBU0hfRElSRUNUT1JZKGhhc2hwKQkoSEFTSFNFR01FTlQg KikgKCgoY2hhciAqKSAoaGFzaHApLT5oY3RsKSArIE1BWEFMSUdOKHNpemVvZihIQVNISERS KSkpCisKKyNkZWZpbmUgSEFTSF9FTEVNRU5UX05FWFQoaGN0bCwgbnVtLCBwdHIpIFwKKwko KGNoYXIgKikgKHB0cikgKyAoKG51bSkgKiAoTUFYQUxJR04oc2l6ZW9mKEhBU0hFTEVNRU5U KSkgKyBNQVhBTElHTigoaGN0bCktPmVudHJ5c2l6ZSkpKSkKKwogLyoKICAqIFByaXZhdGUg ZnVuY3Rpb24gcHJvdG90eXBlcwogICovCiBzdGF0aWMgdm9pZCAqRHluYUhhc2hBbGxvYyhT aXplIHNpemUpOwogc3RhdGljIEhBU0hTRUdNRU5UIHNlZ19hbGxvYyhIVEFCICpoYXNocCk7 Ci1zdGF0aWMgYm9vbCBlbGVtZW50X2FsbG9jKEhUQUIgKmhhc2hwLCBpbnQgbmVsZW0sIGlu dCBmcmVlbGlzdF9pZHgpOworc3RhdGljIEhBU0hFTEVNRU5UICplbGVtZW50X2FsbG9jKEhU QUIgKmhhc2hwLCBpbnQgbmVsZW0pOwogc3RhdGljIGJvb2wgZGlyX3JlYWxsb2MoSFRBQiAq aGFzaHApOwogc3RhdGljIGJvb2wgZXhwYW5kX3RhYmxlKEhUQUIgKmhhc2hwKTsKIHN0YXRp YyBIQVNIQlVDS0VUIGdldF9oYXNoX2VudHJ5KEhUQUIgKmhhc2hwLCBpbnQgZnJlZWxpc3Rf aWR4KTsKQEAgLTI4MSw2ICszMDUsMTEgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJfc2VxX3Nj YW4oSFRBQiAqaGFzaHApOwogc3RhdGljIHZvaWQgZGVyZWdpc3Rlcl9zZXFfc2NhbihIVEFC ICpoYXNocCk7CiBzdGF0aWMgYm9vbCBoYXNfc2VxX3NjYW5zKEhUQUIgKmhhc2hwKTsKIAor c3RhdGljIHZvaWQJY29tcHV0ZV9idWNrZXRzX2FuZF9zZWdzKGxvbmcgbmVsZW0sIGxvbmcg bnVtX3BhcnRpdGlvbnMsCisJCQkJCQkJCQkgbG9uZyBzc2l6ZSwgLyogc2VnbWVudCBzaXpl ICovCisJCQkJCQkJCQkgaW50ICpuYnVja2V0cywgaW50ICpuc2VnbWVudHMpOworc3RhdGlj IHZvaWQgZWxlbWVudF9hZGQoSFRBQiAqaGFzaHAsIEhBU0hFTEVNRU5UICpmaXJzdEVsZW1l bnQsCisJCQkJCQlpbnQgbmVsZW0sIGludCBmcmVlbGlzdF9pZHgpOwogCiAvKgogICogbWVt b3J5IGFsbG9jYXRpb24gc3VwcG9ydApAQCAtMzUzLDYgKzM4Miw3IEBAIGhhc2hfY3JlYXRl KGNvbnN0IGNoYXIgKnRhYm5hbWUsIGxvbmcgbmVsZW0sIGNvbnN0IEhBU0hDVEwgKmluZm8s IGludCBmbGFncykKIHsKIAlIVEFCCSAgICpoYXNocDsKIAlIQVNISERSICAgICpoY3RsOwor CWludAkJCW5lbGVtX2JhdGNoOwogCiAJLyoKIAkgKiBIYXNoIHRhYmxlcyBub3cgYWxsb2Nh dGUgc3BhY2UgZm9yIGtleSBhbmQgZGF0YSwgYnV0IHlvdSBoYXZlIHRvIHNheQpAQCAtNTA3 LDkgKzUzNywxOSBAQCBoYXNoX2NyZWF0ZShjb25zdCBjaGFyICp0YWJuYW1lLCBsb25nIG5l bGVtLCBjb25zdCBIQVNIQ1RMICppbmZvLCBpbnQgZmxhZ3MpCiAJCWhhc2hwLT5pc3NoYXJl ZCA9IGZhbHNlOwogCX0KIAorCS8qIENob29zZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdG8g YWxsb2NhdGUgYXQgYSB0aW1lLiAqLworCW5lbGVtX2JhdGNoID0gY2hvb3NlX25lbGVtX2Fs bG9jKGluZm8tPmVudHJ5c2l6ZSk7CisKKwkvKgorCSAqIEFsbG9jYXRlIHRoZSBtZW1vcnkg bmVlZGVkIGZvciBoYXNoIGhlYWRlciwgZGlyZWN0b3J5LCBzZWdtZW50cyBhbmQKKwkgKiBl bGVtZW50cyB0b2dldGhlci4gVXNlIHBvaW50ZXIgYXJpdGhtZXRpYyB0byBhcnJpdmUgYXQg dGhlIHN0YXJ0IG9mCisJICogZWFjaCBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGxhdGVyLgorCSAq LwogCWlmICghaGFzaHAtPmhjdGwpCiAJewotCQloYXNocC0+aGN0bCA9IChIQVNISERSICop IGhhc2hwLT5hbGxvYyhzaXplb2YoSEFTSEhEUikpOworCQlTaXplCXNpemUgPSBoYXNoX2dl dF9pbml0X3NpemUoaW5mbywgZmxhZ3MsIG5lbGVtLCBuZWxlbV9iYXRjaCk7CisKKwkJaGFz aHAtPmhjdGwgPSAoSEFTSEhEUiAqKSBoYXNocC0+YWxsb2Moc2l6ZSk7CiAJCWlmICghaGFz aHAtPmhjdGwpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX09V VF9PRl9NRU1PUlkpLApAQCAtNTU4LDYgKzU5OCw5IEBAIGhhc2hfY3JlYXRlKGNvbnN0IGNo YXIgKnRhYm5hbWUsIGxvbmcgbmVsZW0sIGNvbnN0IEhBU0hDVEwgKmluZm8sIGludCBmbGFn cykKIAloY3RsLT5rZXlzaXplID0gaW5mby0+a2V5c2l6ZTsKIAloY3RsLT5lbnRyeXNpemUg PSBpbmZvLT5lbnRyeXNpemU7CiAKKwkvKiByZW1lbWJlciBob3cgbWFueSBlbGVtZW50cyB0 byBhbGxvY2F0ZSBhdCBvbmNlICovCisJaGN0bC0+bmVsZW1fYWxsb2MgPSBuZWxlbV9iYXRj aDsKKwogCS8qIG1ha2UgbG9jYWwgY29waWVzIG9mIGhlYXZpbHktdXNlZCBjb25zdGFudCBm aWVsZHMgKi8KIAloYXNocC0+a2V5c2l6ZSA9IGhjdGwtPmtleXNpemU7CiAJaGFzaHAtPnNz aXplID0gaGN0bC0+c3NpemU7CkBAIC01ODIsNiArNjI1LDkgQEAgaGFzaF9jcmVhdGUoY29u c3QgY2hhciAqdGFibmFtZSwgbG9uZyBuZWxlbSwgY29uc3QgSEFTSENUTCAqaW5mbywgaW50 IGZsYWdzKQogCQkJCQlmcmVlbGlzdF9wYXJ0aXRpb25zLAogCQkJCQluZWxlbV9hbGxvYywK IAkJCQkJbmVsZW1fYWxsb2NfZmlyc3Q7CisJCXZvaWQJICAgKnB0ciA9IE5VTEw7CisJCWlu dAkJCW5zZWdzOworCQlpbnQJCQluYnVja2V0czsKIAogCQkvKgogCQkgKiBJZiBoYXNoIHRh YmxlIGlzIHBhcnRpdGlvbmVkLCBnaXZlIGVhY2ggZnJlZWxpc3QgYW4gZXF1YWwgc2hhcmUg b2YKQEAgLTU5Miw2ICs2MzgsMTYgQEAgaGFzaF9jcmVhdGUoY29uc3QgY2hhciAqdGFibmFt ZSwgbG9uZyBuZWxlbSwgY29uc3QgSEFTSENUTCAqaW5mbywgaW50IGZsYWdzKQogCQllbHNl CiAJCQlmcmVlbGlzdF9wYXJ0aXRpb25zID0gMTsKIAorCQljb21wdXRlX2J1Y2tldHNfYW5k X3NlZ3MobmVsZW0sIGhjdGwtPm51bV9wYXJ0aXRpb25zLCBoY3RsLT5zc2l6ZSwKKwkJCQkJ CQkJICZuYnVja2V0cywgJm5zZWdzKTsKKworCQkvKgorCQkgKiBDYWxjdWxhdGUgdGhlIG9m ZnNldCBhdCB3aGljaCB0byBmaW5kIHRoZSBmaXJzdCBwYXJ0aXRpb24gb2YKKwkJICogZWxl bWVudHMuCisJCSAqIFdlIGhhdmUgdG8gc2tpcCBzcGFjZSBmb3IgdGhlIGhlYWRlciwgc2Vn bWVudHMgYW5kIGJ1Y2tldHMuCisgCQkgKi8KKwkJcHRyID0gSEFTSF9FTEVNRU5UUyhoYXNo cCwgbnNlZ3MpOworCiAJCW5lbGVtX2FsbG9jID0gbmVsZW0gLyBmcmVlbGlzdF9wYXJ0aXRp b25zOwogCQlpZiAobmVsZW1fYWxsb2MgPD0gMCkKIAkJCW5lbGVtX2FsbG9jID0gMTsKQEAg LTYxMCwxMCArNjY2LDE3IEBAIGhhc2hfY3JlYXRlKGNvbnN0IGNoYXIgKnRhYm5hbWUsIGxv bmcgbmVsZW0sIGNvbnN0IEhBU0hDVEwgKmluZm8sIGludCBmbGFncykKIAkJewogCQkJaW50 CQkJdGVtcCA9IChpID09IDApID8gbmVsZW1fYWxsb2NfZmlyc3QgOiBuZWxlbV9hbGxvYzsK IAotCQkJaWYgKCFlbGVtZW50X2FsbG9jKGhhc2hwLCB0ZW1wLCBpKSkKLQkJCQllcmVwb3J0 KEVSUk9SLAotCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKLQkJCQkJ CSBlcnJtc2coIm91dCBvZiBtZW1vcnkiKSkpOworCQkJLyoKKwkJCSAqIEFzc2lnbiB0aGUg Y29ycmVjdCBsb2NhdGlvbiBvZiBlYWNoIHBhcml0aW9uIHdpdGhpbiBhCisJCQkgKiBwcmUt YWxsb2NhdGVkIGJ1ZmZlci4KKwkJCSAqCisJCQkgKiBBY3R1YWwgbWVtb3J5IGFsbG9jYXRp b24gaGFwcGVucyBpbiBTaG1lbUluaXRIYXNoIGZvcgorCQkJICogc2hhcmVkIGhhc2ggdGFi bGVzIG9yIGVhcmxpZXIgaW4gdGhpcyBmdW5jdGlvbiBmb3Igbm9uLXNoYXJlZAorCQkJICog aGFzaCB0YWJsZXMuCisJCQkgKiBXZSBqdXN0IG5lZWQgdG8gc3BsaXQgdGhhdCBhbGxvY2F0 aW9uIHBlci1iYXRjaCBmcmVlbGlzdHMuCisJCQkgKi8KKwkJCWVsZW1lbnRfYWRkKGhhc2hw LCAoSEFTSEVMRU1FTlQgKikgcHRyLCB0ZW1wLCBpKTsKKwkJCXB0ciA9IEhBU0hfRUxFTUVO VF9ORVhUKGhjdGwsIHRlbXAsIHB0cik7CiAJCX0KIAl9CiAKQEAgLTcwMSwzMCArNzY0LDEy IEBAIGluaXRfaHRhYihIVEFCICpoYXNocCwgbG9uZyBuZWxlbSkKIAkJZm9yIChpID0gMDsg aSA8IE5VTV9GUkVFTElTVFM7IGkrKykKIAkJCVNwaW5Mb2NrSW5pdCgmKGhjdGwtPmZyZWVM aXN0W2ldLm11dGV4KSk7CiAKLQkvKgotCSAqIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgbmV4 dCBncmVhdGVyIHBvd2VyIG9mIHR3byBudW1iZXIgb2YgYnVja2V0cywKLQkgKiBhc3N1bWlu ZyBhIGRlc2lyZWQgbWF4aW11bSBsb2FkIGZhY3RvciBvZiAxLgotCSAqLwotCW5idWNrZXRz ID0gbmV4dF9wb3cyX2ludChuZWxlbSk7Ci0KLQkvKgotCSAqIEluIGEgcGFydGl0aW9uZWQg dGFibGUsIG5idWNrZXRzIG11c3QgYmUgYXQgbGVhc3QgZXF1YWwgdG8KLQkgKiBudW1fcGFy dGl0aW9uczsgd2VyZSBpdCBsZXNzLCBrZXlzIHdpdGggYXBwYXJlbnRseSBkaWZmZXJlbnQg cGFydGl0aW9uCi0JICogbnVtYmVycyB3b3VsZCBtYXAgdG8gdGhlIHNhbWUgYnVja2V0LCBi cmVha2luZyBwYXJ0aXRpb24gaW5kZXBlbmRlbmNlLgotCSAqIChOb3JtYWxseSBuYnVja2V0 cyB3aWxsIGJlIG11Y2ggYmlnZ2VyOyB0aGlzIGlzIGp1c3QgYSBzYWZldHkgY2hlY2suKQot CSAqLwotCXdoaWxlIChuYnVja2V0cyA8IGhjdGwtPm51bV9wYXJ0aXRpb25zKQotCQluYnVj a2V0cyA8PD0gMTsKKwljb21wdXRlX2J1Y2tldHNfYW5kX3NlZ3MobmVsZW0sIGhjdGwtPm51 bV9wYXJ0aXRpb25zLCBoY3RsLT5zc2l6ZSwKKwkJCQkJCQkgJm5idWNrZXRzLCAmbnNlZ3Mp OwogCiAJaGN0bC0+bWF4X2J1Y2tldCA9IGhjdGwtPmxvd19tYXNrID0gbmJ1Y2tldHMgLSAx OwogCWhjdGwtPmhpZ2hfbWFzayA9IChuYnVja2V0cyA8PCAxKSAtIDE7CiAKLQkvKgotCSAq IEZpZ3VyZSBudW1iZXIgb2YgZGlyZWN0b3J5IHNlZ21lbnRzIG5lZWRlZCwgcm91bmQgdXAg dG8gYSBwb3dlciBvZiAyCi0JICovCi0JbnNlZ3MgPSAobmJ1Y2tldHMgLSAxKSAvIGhjdGwt PnNzaXplICsgMTsKLQluc2VncyA9IG5leHRfcG93Ml9pbnQobnNlZ3MpOwotCiAJLyoKIAkg KiBNYWtlIHN1cmUgZGlyZWN0b3J5IGlzIGJpZyBlbm91Z2guIElmIHByZS1hbGxvY2F0ZWQg ZGlyZWN0b3J5IGlzIHRvbwogCSAqIHNtYWxsLCBjaG9rZSAoY2FsbGVyIHNjcmV3ZWQgdXAp LgpAQCAtNzM3LDI2ICs3ODIsMjUgQEAgaW5pdF9odGFiKEhUQUIgKmhhc2hwLCBsb25nIG5l bGVtKQogCQkJcmV0dXJuIGZhbHNlOwogCX0KIAotCS8qIEFsbG9jYXRlIGEgZGlyZWN0b3J5 ICovCisJLyoKKwkgKiBBc3NpZ24gYSBkaXJlY3RvcnkgYnkgbWFraW5nIGl0IHBvaW50IHRv IHRoZSBjb3JyZWN0IGxvY2F0aW9uIGluIHRoZQorCSAqIHByZS1hbGxvY2F0ZWQgYnVmZmVy LgorCSAqLwogCWlmICghKGhhc2hwLT5kaXIpKQogCXsKIAkJQ3VycmVudER5bmFIYXNoQ3h0 ID0gaGFzaHAtPmhjeHQ7Ci0JCWhhc2hwLT5kaXIgPSAoSEFTSFNFR01FTlQgKikKLQkJCWhh c2hwLT5hbGxvYyhoY3RsLT5kc2l6ZSAqIHNpemVvZihIQVNIU0VHTUVOVCkpOwotCQlpZiAo IWhhc2hwLT5kaXIpCi0JCQlyZXR1cm4gZmFsc2U7CisJCWhhc2hwLT5kaXIgPSBIQVNIX0RJ UkVDVE9SWShoYXNocCk7CiAJfQogCi0JLyogQWxsb2NhdGUgaW5pdGlhbCBzZWdtZW50cyAq LworCS8qIEFzc2lnbiBpbml0aWFsIHNlZ21lbnRzLCB3aGljaCBhcmUgYWxzbyBwcmUtYWxs b2NhdGVkICovCisJaSA9IDA7CiAJZm9yIChzZWdwID0gaGFzaHAtPmRpcjsgaGN0bC0+bnNl Z3MgPCBuc2VnczsgaGN0bC0+bnNlZ3MrKywgc2VncCsrKQogCXsKLQkJKnNlZ3AgPSBzZWdf YWxsb2MoaGFzaHApOwotCQlpZiAoKnNlZ3AgPT0gTlVMTCkKLQkJCXJldHVybiBmYWxzZTsK KwkJKnNlZ3AgPSBIQVNIX1NFR01FTlRfUFRSKGhhc2hwLCBpKyspOworCQlNZW1TZXQoKnNl Z3AsIDAsIEhBU0hfU0VHTUVOVF9TSVpFKGhhc2hwKSk7CiAJfQogCi0JLyogQ2hvb3NlIG51 bWJlciBvZiBlbnRyaWVzIHRvIGFsbG9jYXRlIGF0IGEgdGltZSAqLwotCWhjdGwtPm5lbGVt X2FsbG9jID0gY2hvb3NlX25lbGVtX2FsbG9jKGhjdGwtPmVudHJ5c2l6ZSk7CisJQXNzZXJ0 KGkgPT0gbnNlZ3MpOwogCiAjaWZkZWYgSEFTSF9ERUJVRwogCWZwcmludGYoc3RkZXJyLCAi aW5pdF9odGFiOlxuJXMlcFxuJXMlbGRcbiVzJWxkXG4lcyVkXG4lcyVsZFxuJXMldVxuJXMl eFxuJXMleFxuJXMlbGRcbiIsCkBAIC04NDcsMTUgKzg5MSw3OSBAQCBoYXNoX3NlbGVjdF9k aXJzaXplKGxvbmcgbnVtX2VudHJpZXMpCiAKIC8qCiAgKiBDb21wdXRlIHRoZSByZXF1aXJl ZCBpbml0aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBhIHNoYXJlZC1tZW1vcnkKLSAqIGhh c2h0YWJsZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgV2UgbmVlZCBzcGFjZSBmb3Ig dGhlIEhBU0hIRFIKLSAqIGFuZCBmb3IgdGhlIChub24gZXhwYW5zaWJsZSkgZGlyZWN0b3J5 LgorICogb3Igbm9uLXNoYXJlZCBtZW1vcnkgaGFzaHRhYmxlIHdpdGggdGhlIGdpdmVuIHBh cmFtZXRlcnMuCisgKiBXZSBuZWVkIHNwYWNlIGZvciB0aGUgSEFTSEhEUiwgZm9yIHRoZSBk aXJlY3RvcnksIHNlZ21lbnRzIGFuZAorICogdGhlIGluaXRfc2l6ZSBlbGVtZW50cyBpbiBi dWNrZXRzLgkKKyAqIAorICogRm9yIHNoYXJlZCBoYXNoIHRhYmxlcyB0aGUgZGlyZWN0b3J5 IHNpemUgaXMgbm9uLWV4cGFuc2l2ZS4KKyAqIAorICogaW5pdF9zaXplIHNob3VsZCBtYXRj aCB0aGUgdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGFsbG9jYXRlZAorICogZHVyaW5nIGhh c2ggdGFibGUgY3JlYXRpb24sIGl0IGNvdWxkIGJlIHplcm8gZm9yIG5vbi1zaGFyZWQgaGFz aAorICogdGFibGVzIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgbmVsZW1fYWxsb2MuIEZv ciBtb3JlIGV4cGxhbmF0aW9uCisgKiBzZWUgY29tbWVudHMgd2l0aGluIHRoaXMgZnVuY3Rp b24uCisgKgorICogbmVsZW1fYWxsb2MgcGFyYW1ldGVyIGlzIG5vdCByZWxldmFudCBmb3Ig c2hhcmVkIGhhc2ggdGFibGVzLgogICovCiBTaXplCi1oYXNoX2dldF9zaGFyZWRfc2l6ZShI QVNIQ1RMICppbmZvLCBpbnQgZmxhZ3MpCitoYXNoX2dldF9pbml0X3NpemUoY29uc3QgSEFT SENUTCAqaW5mbywgaW50IGZsYWdzLCBsb25nIGluaXRfc2l6ZSwgaW50IG5lbGVtX2FsbG9j KQogewotCUFzc2VydChmbGFncyAmIEhBU0hfRElSU0laRSk7Ci0JQXNzZXJ0KGluZm8tPmRz aXplID09IGluZm8tPm1heF9kc2l6ZSk7Ci0JcmV0dXJuIHNpemVvZihIQVNISERSKSArIGlu Zm8tPmRzaXplICogc2l6ZW9mKEhBU0hTRUdNRU5UKTsKKwlpbnQJCQluYnVja2V0czsKKwlp bnQJCQluc2VnczsKKwlpbnQJCQludW1fcGFydGl0aW9uczsKKwlsb25nCQlzc2l6ZTsKKwls b25nCQlkc2l6ZTsKKwlib29sCQllbGVtZW50X2FsbG9jID0gdHJ1ZTsgLypBbHdheXMgdHJ1 ZSBmb3Igc2hhcmVkIGhhc2ggdGFibGVzICovCisJU2l6ZQkJZWxlbWVudFNpemUgPSBNQVhB TElHTihzaXplb2YoSEFTSEVMRU1FTlQpKSArIE1BWEFMSUdOKGluZm8tPmVudHJ5c2l6ZSk7 CisKKwkvKgorCSAqIEZvciBub24tc2hhcmVkIGhhc2ggdGFibGVzLCB0aGUgcmVxdWVzdGVk IG51bWJlciBvZiBlbGVtZW50cyBhcmUKKwkgKiBhbGxvY2F0ZWQgb25seSBpZiB0aGV5IGFy ZSBsZXNzIHRoYW4gbmVsZW1fYWxsb2MuIEluIGFueSBjYXNlLCB0aGUKKwkgKiBpbml0X3Np emUgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgYWRkZWQgdXNp bmcKKwkgKiBlbGVtZW50X2FkZCgpIGluIGhhc2hfY3JlYXRlLgorCSAqLworCWlmICghKGZs YWdzICYgSEFTSF9TSEFSRURfTUVNKSkKKwl7CisJCWlmIChpbml0X3NpemUgPiBuZWxlbV9h bGxvYykKKwkJCWVsZW1lbnRfYWxsb2MgPSBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJQXNz ZXJ0KGZsYWdzICYgSEFTSF9ESVJTSVpFKTsKKwkJQXNzZXJ0KGluZm8tPmRzaXplID09IGlu Zm8tPm1heF9kc2l6ZSk7CisJfQorCS8qIE5vbi1zaGFyZWQgaGFzaCB0YWJsZXMgbWF5IG5v dCBzcGVjaWZ5IGRpciBzaXplICovCisJaWYgKCEoZmxhZ3MgJiBIQVNIX0RJUlNJWkUpKQor CXsKKwkJZHNpemUgPSBERUZfRElSU0laRTsKKwl9CisJZWxzZQorCQlkc2l6ZSA9IGluZm8t PmRzaXplOworCisJaWYgKGZsYWdzICYgSEFTSF9QQVJUSVRJT04pCisJeworCQludW1fcGFy dGl0aW9ucyA9IGluZm8tPm51bV9wYXJ0aXRpb25zOworCisJCS8qIE51bWJlciBvZiBlbnRy aWVzIHNob3VsZCBiZSBhdGxlYXN0IGVxdWFsIHRvIHRoZSBmcmVlbGlzdHMgKi8KKwkJaWYg KGluaXRfc2l6ZSA8IE5VTV9GUkVFTElTVFMpCisJCQlpbml0X3NpemUgPSBOVU1fRlJFRUxJ U1RTOworCX0KKwllbHNlCisJCW51bV9wYXJ0aXRpb25zID0gMDsKKworCWlmIChmbGFncyAm IEhBU0hfU0VHTUVOVCkKKwkJc3NpemUgPSBpbmZvLT5zc2l6ZTsKKwllbHNlCisJCXNzaXpl ID0gREVGX1NFR1NJWkU7CisKKwljb21wdXRlX2J1Y2tldHNfYW5kX3NlZ3MoaW5pdF9zaXpl LCBudW1fcGFydGl0aW9ucywgc3NpemUsCisJCQkJCQkJICZuYnVja2V0cywgJm5zZWdzKTsK KworCWlmICghZWxlbWVudF9hbGxvYykKKwkJaW5pdF9zaXplID0gMDsKKworCXJldHVybiBN QVhBTElHTihzaXplb2YoSEFTSEhEUikpICsgZHNpemUgKiBNQVhBTElHTihzaXplb2YoSEFT SFNFR01FTlQpKSArCisJCSsgTUFYQUxJR04oc2l6ZW9mKEhBU0hCVUNLRVQpKSAqIHNzaXpl ICogbnNlZ3MKKwkJKyBpbml0X3NpemUgKiBlbGVtZW50U2l6ZTsKIH0KIAogCkBAIC0xMjg1 LDcgKzEzOTMsOCBAQCBnZXRfaGFzaF9lbnRyeShIVEFCICpoYXNocCwgaW50IGZyZWVsaXN0 X2lkeCkKIAkJICogRmFpbGluZyBiZWNhdXNlIHRoZSBuZWVkZWQgZWxlbWVudCBpcyBpbiBh IGRpZmZlcmVudCBmcmVlbGlzdCBpcwogCQkgKiBub3QgYWNjZXB0YWJsZS4KIAkJICovCi0J CWlmICghZWxlbWVudF9hbGxvYyhoYXNocCwgaGN0bC0+bmVsZW1fYWxsb2MsIGZyZWVsaXN0 X2lkeCkpCisJCW5ld0VsZW1lbnQgPSBlbGVtZW50X2FsbG9jKGhhc2hwLCBoY3RsLT5uZWxl bV9hbGxvYyk7CisJCWlmIChuZXdFbGVtZW50ID09IE5VTEwpCiAJCXsKIAkJCWludAkJCWJv cnJvd19mcm9tX2lkeDsKIApAQCAtMTMyMiw2ICsxNDMxLDcgQEAgZ2V0X2hhc2hfZW50cnko SFRBQiAqaGFzaHAsIGludCBmcmVlbGlzdF9pZHgpCiAJCQkvKiBubyBlbGVtZW50cyBhdmFp bGFibGUgdG8gYm9ycm93IGVpdGhlciwgc28gb3V0IG9mIG1lbW9yeSAqLwogCQkJcmV0dXJu IE5VTEw7CiAJCX0KKwkJZWxlbWVudF9hZGQoaGFzaHAsIG5ld0VsZW1lbnQsIGhjdGwtPm5l bGVtX2FsbG9jLCBmcmVlbGlzdF9pZHgpOwogCX0KIAogCS8qIHJlbW92ZSBlbnRyeSBmcm9t IGZyZWVsaXN0LCBidW1wIG5lbnRyaWVzICovCkBAIC0xNzAwLDMwICsxODEwLDQzIEBAIHNl Z19hbGxvYyhIVEFCICpoYXNocCkKIH0KIAogLyoKLSAqIGFsbG9jYXRlIHNvbWUgbmV3IGVs ZW1lbnRzIGFuZCBsaW5rIHRoZW0gaW50byB0aGUgaW5kaWNhdGVkIGZyZWUgbGlzdAorICog YWxsb2NhdGUgc29tZSBuZXcgZWxlbWVudHMKICAqLwotc3RhdGljIGJvb2wKLWVsZW1lbnRf YWxsb2MoSFRBQiAqaGFzaHAsIGludCBuZWxlbSwgaW50IGZyZWVsaXN0X2lkeCkKK3N0YXRp YyBIQVNIRUxFTUVOVCAqCitlbGVtZW50X2FsbG9jKEhUQUIgKmhhc2hwLCBpbnQgbmVsZW0p CiB7CiAJSEFTSEhEUiAgICAqaGN0bCA9IGhhc2hwLT5oY3RsOwogCVNpemUJCWVsZW1lbnRT aXplOwotCUhBU0hFTEVNRU5UICpmaXJzdEVsZW1lbnQ7Ci0JSEFTSEVMRU1FTlQgKnRtcEVs ZW1lbnQ7Ci0JSEFTSEVMRU1FTlQgKnByZXZFbGVtZW50OwotCWludAkJCWk7CisJSEFTSEVM RU1FTlQgKmZpcnN0RWxlbWVudCA9IE5VTEw7CiAKIAlpZiAoaGFzaHAtPmlzZml4ZWQpCi0J CXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKiBFYWNoIGVsZW1lbnQgaGFz IGEgSEFTSEVMRU1FTlQgaGVhZGVyIHBsdXMgdXNlciBkYXRhLiAqLwogCWVsZW1lbnRTaXpl ID0gTUFYQUxJR04oc2l6ZW9mKEhBU0hFTEVNRU5UKSkgKyBNQVhBTElHTihoY3RsLT5lbnRy eXNpemUpOwotCiAJQ3VycmVudER5bmFIYXNoQ3h0ID0gaGFzaHAtPmhjeHQ7CiAJZmlyc3RF bGVtZW50ID0gKEhBU0hFTEVNRU5UICopIGhhc2hwLT5hbGxvYyhuZWxlbSAqIGVsZW1lbnRT aXplKTsKIAogCWlmICghZmlyc3RFbGVtZW50KQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVy biBOVUxMOworCisJcmV0dXJuIGZpcnN0RWxlbWVudDsKK30KKworLyoKKyAqIExpbmsgdGhl IGVsZW1lbnRzIGFsbG9jYXRlZCBieSBlbGVtZW50X2FsbG9jIGludG8gdGhlIGluZGljYXRl ZCBmcmVlIGxpc3QKKyAqLworc3RhdGljIHZvaWQKK2VsZW1lbnRfYWRkKEhUQUIgKmhhc2hw LCBIQVNIRUxFTUVOVCAqZmlyc3RFbGVtZW50LCBpbnQgbmVsZW0sIGludCBmcmVlbGlzdF9p ZHgpCit7CisJSEFTSEhEUiAgICAqaGN0bCA9IGhhc2hwLT5oY3RsOworCVNpemUJCWVsZW1l bnRTaXplOworCUhBU0hFTEVNRU5UICp0bXBFbGVtZW50OworCUhBU0hFTEVNRU5UICpwcmV2 RWxlbWVudDsKKwlpbnQJCQlpOwogCisJLyogRWFjaCBlbGVtZW50IGhhcyBhIEhBU0hFTEVN RU5UIGhlYWRlciBwbHVzIHVzZXIgZGF0YS4gKi8KKwllbGVtZW50U2l6ZSA9IE1BWEFMSUdO KHNpemVvZihIQVNIRUxFTUVOVCkpICsgTUFYQUxJR04oaGN0bC0+ZW50cnlzaXplKTsKIAkv KiBwcmVwYXJlIHRvIGxpbmsgYWxsIHRoZSBuZXcgZW50cmllcyBpbnRvIHRoZSBmcmVlbGlz dCAqLwogCXByZXZFbGVtZW50ID0gTlVMTDsKIAl0bXBFbGVtZW50ID0gZmlyc3RFbGVtZW50 OwpAQCAtMTc0NCw4ICsxODY3LDYgQEAgZWxlbWVudF9hbGxvYyhIVEFCICpoYXNocCwgaW50 IG5lbGVtLCBpbnQgZnJlZWxpc3RfaWR4KQogCiAJaWYgKElTX1BBUlRJVElPTkVEKGhjdGwp KQogCQlTcGluTG9ja1JlbGVhc2UoJmhjdGwtPmZyZWVMaXN0W2ZyZWVsaXN0X2lkeF0ubXV0 ZXgpOwotCi0JcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBAIC0xOTU3LDMgKzIwNzgsMzUgQEAg QXRFT1N1YlhhY3RfSGFzaFRhYmxlcyhib29sIGlzQ29tbWl0LCBpbnQgbmVzdERlcHRoKQog CQl9CiAJfQogfQorCisvKgorICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgYnVja2V0cyBh bmQgc2VnbWVudHMgdG8gc3RvcmUgdGhlIGdpdmVuCisgKiBudW1iZXIgb2YgZWxlbWVudHMg aW4gYSBoYXNoIHRhYmxlLiBTZWdtZW50cyBjb250YWluIGJ1Y2tldHMgd2hpY2gKKyAqIGlu IHR1cm4gY29udGFpbiBlbGVtZW50cy4KKyAqLworc3RhdGljIHZvaWQKK2NvbXB1dGVfYnVj a2V0c19hbmRfc2Vncyhsb25nIG5lbGVtLCBsb25nIG51bV9wYXJ0aXRpb25zLCBsb25nIHNz aXplLAorCQkJCQkJIGludCAqbmJ1Y2tldHMsIGludCAqbnNlZ21lbnRzKQoreworCS8qCisJ ICogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBuZXh0IGdyZWF0ZXIgcG93ZXIgb2YgdHdvIG51 bWJlciBvZiBidWNrZXRzLAorCSAqIGFzc3VtaW5nIGEgZGVzaXJlZCBtYXhpbXVtIGxvYWQg ZmFjdG9yIG9mIDEuCisJICovCisJKm5idWNrZXRzID0gbmV4dF9wb3cyX2ludChuZWxlbSk7 CisKKwkvKgorCSAqIEluIGEgcGFydGl0aW9uZWQgdGFibGUsIG5idWNrZXRzIG11c3QgYmUg YXQgbGVhc3QgZXF1YWwgdG8KKwkgKiBudW1fcGFydGl0aW9uczsgd2VyZSBpdCBsZXNzLCBr ZXlzIHdpdGggYXBwYXJlbnRseSBkaWZmZXJlbnQgcGFydGl0aW9uCisJICogbnVtYmVycyB3 b3VsZCBtYXAgdG8gdGhlIHNhbWUgYnVja2V0LCBicmVha2luZyBwYXJ0aXRpb24gaW5kZXBl bmRlbmNlLgorCSAqIChOb3JtYWxseSBuYnVja2V0cyB3aWxsIGJlIG11Y2ggYmlnZ2VyOyB0 aGlzIGlzIGp1c3QgYSBzYWZldHkgY2hlY2suKQorCSAqLworCXdoaWxlICgoKm5idWNrZXRz KSA8IG51bV9wYXJ0aXRpb25zKQorCQkoKm5idWNrZXRzKSA8PD0gMTsKKworCisJLyoKKwkg KiBGaWd1cmUgbnVtYmVyIG9mIGRpcmVjdG9yeSBzZWdtZW50cyBuZWVkZWQsIHJvdW5kIHVw IHRvIGEgcG93ZXIgb2YgMgorCSAqLworCSpuc2VnbWVudHMgPSAoKCpuYnVja2V0cykgLSAx KSAvIHNzaXplICsgMTsKKwkqbnNlZ21lbnRzID0gbmV4dF9wb3cyX2ludCgqbnNlZ21lbnRz KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2hzZWFyY2guaCBiL3NyYy9p bmNsdWRlL3V0aWxzL2hzZWFyY2guaAppbmRleCA5MzJjYzRmMzRkOS4uNzliOTU5ZmZjM2Mg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2hzZWFyY2guaAorKysgYi9zcmMvaW5j bHVkZS91dGlscy9oc2VhcmNoLmgKQEAgLTE1MSw3ICsxNTEsOCBAQCBleHRlcm4gdm9pZCBo YXNoX3NlcV90ZXJtKEhBU0hfU0VRX1NUQVRVUyAqc3RhdHVzKTsKIGV4dGVybiB2b2lkIGhh c2hfZnJlZXplKEhUQUIgKmhhc2hwKTsKIGV4dGVybiBTaXplIGhhc2hfZXN0aW1hdGVfc2l6 ZShsb25nIG51bV9lbnRyaWVzLCBTaXplIGVudHJ5c2l6ZSk7CiBleHRlcm4gbG9uZyBoYXNo X3NlbGVjdF9kaXJzaXplKGxvbmcgbnVtX2VudHJpZXMpOwotZXh0ZXJuIFNpemUgaGFzaF9n ZXRfc2hhcmVkX3NpemUoSEFTSENUTCAqaW5mbywgaW50IGZsYWdzKTsKK2V4dGVybiBTaXpl IGhhc2hfZ2V0X2luaXRfc2l6ZShjb25zdCBIQVNIQ1RMICppbmZvLCBpbnQgZmxhZ3MsCisJ CQkJCQkJICAgbG9uZyBpbml0X3NpemUsIGludCBuZWxlbV9hbGxvYyk7CiBleHRlcm4gdm9p ZCBBdEVPWGFjdF9IYXNoVGFibGVzKGJvb2wgaXNDb21taXQpOwogZXh0ZXJuIHZvaWQgQXRF T1N1YlhhY3RfSGFzaFRhYmxlcyhib29sIGlzQ29tbWl0LCBpbnQgbmVzdERlcHRoKTsKIAot LSAKMi40OS4wCgo= --------------eAs3MTPG5ycztqDaCyrXnZxm Content-Type: text/x-patch; charset=UTF-8; name="v6-0002-review.patch" Content-Disposition: attachment; filename="v6-0002-review.patch" Content-Transfer-Encoding: base64 RnJvbSA1ZDUwNGI5M2Y0ODgwYzdkMTgzNjMwNGI3YWQxYTIxMmJkNWE1YzU4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVGh1LCAyNyBNYXIgMjAyNSAyMDo1MjozMSArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djYgMi83XSByZXZpZXcKCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYyAg IHwgICAzICstCiBzcmMvYmFja2VuZC91dGlscy9oYXNoL2R5bmFoYXNoLmMgfCAxMjcgKysr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDcwIGluc2Vy dGlvbnMoKyksIDYwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3NobWVtLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCmlu ZGV4IGQ4YWVkMGJmYWFmLi43ZTAzYTM3MWQyMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvc2htZW0uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1l bS5jCkBAIC0zNDcsNyArMzQ3LDggQEAgU2htZW1Jbml0SGFzaChjb25zdCBjaGFyICpuYW1l LAkJLyogdGFibGUgc3RyaW5nIG5hbWUgZm9yIHNobWVtIGluZGV4ICovCiAKIAkvKiBsb29r IGl0IHVwIGluIHRoZSBzaG1lbSBpbmRleCAqLwogCWxvY2F0aW9uID0gU2htZW1Jbml0U3Ry dWN0KG5hbWUsCi0JCQkJCQkJICAgaGFzaF9nZXRfaW5pdF9zaXplKGluZm9QLCBoYXNoX2Zs YWdzLCBpbml0X3NpemUsIDApLAorCQkJCQkJCSAgIGhhc2hfZ2V0X2luaXRfc2l6ZShpbmZv UCwgaGFzaF9mbGFncywKKwkJCQkJCQkJCQkJCSAgaW5pdF9zaXplLCAwKSwKIAkJCQkJCQkg ICAmZm91bmQpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2hhc2gv ZHluYWhhc2guYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2hhc2gvZHluYWhhc2guYwppbmRleCAx ZjIxNWExNmM1MS4uZGNkYzE0M2U2OTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2hhc2gvZHluYWhhc2guYworKysgYi9zcmMvYmFja2VuZC91dGlscy9oYXNoL2R5bmFoYXNo LmMKQEAgLTI2MCwyOSArMjYwLDM1IEBAIHN0YXRpYyBsb25nIGhhc2hfYWNjZXNzZXMsCiAJ CQloYXNoX2V4cGFuc2lvbnM7CiAjZW5kaWYKIAotCi0jZGVmaW5lIEhBU0hfRUxFTUVOVFNf T0ZGU0VUKGhjdGwsIG5zZWdzKSBcCi0JKE1BWEFMSUdOKHNpemVvZihIQVNISERSKSkgKyBc Ci0JICgoaGN0bCktPmRzaXplICogTUFYQUxJR04oc2l6ZW9mKEhBU0hTRUdNRU5UKSkpICsg XAotCSAoKGhjdGwpLT5zc2l6ZSAqIChuc2VncykgKiBNQVhBTElHTihzaXplb2YoSEFTSEJV Q0tFVCkpKSkKLQotI2RlZmluZSBIQVNIX0VMRU1FTlRTKGhhc2hwLCBuc2VncykgXAotCSgo Y2hhciAqKSAoaGFzaHApLT5oY3RsICsgSEFTSF9FTEVNRU5UU19PRkZTRVQoKGhhc2hwKS0+ aGN0bCwgbnNlZ3MpKQorI2RlZmluZQlIQVNIX0RJUkVDVE9SWV9QVFIoaGFzaHApIFwKKwko KChjaGFyICopIChoYXNocCktPmhjdGwpICsgc2l6ZW9mKEhBU0hIRFIpKQogCiAjZGVmaW5l IEhBU0hfU0VHTUVOVF9PRkZTRVQoaGN0bCwgaWR4KSBcCi0JKE1BWEFMSUdOKHNpemVvZihI QVNISERSKSkgKyBcCi0JICgoaGN0bCktPmRzaXplICogTUFYQUxJR04oc2l6ZW9mKEhBU0hT RUdNRU5UKSkpICsgXAotCSAoKGhjdGwpLT5zc2l6ZSAqIChpZHgpICogTUFYQUxJR04oc2l6 ZW9mKEhBU0hCVUNLRVQpKSkpCisJKHNpemVvZihIQVNISERSKSArIFwKKwkgKChoY3RsKS0+ ZHNpemUgKiBzaXplb2YoSEFTSFNFR01FTlQpKSArIFwKKwkgKChoY3RsKS0+c3NpemUgKiAo aWR4KSAqIHNpemVvZihIQVNIQlVDS0VUKSkpCiAKICNkZWZpbmUgSEFTSF9TRUdNRU5UX1BU UihoYXNocCwgaWR4KSBcCi0JKEhBU0hTRUdNRU5UKSAoKGNoYXIgKikgKGhhc2hwKS0+aGN0 bCArIEhBU0hfU0VHTUVOVF9PRkZTRVQoKGhhc2hwKS0+aGN0bCwgKGlkeCkpKQorCSgoY2hh ciAqKSAoaGFzaHApLT5oY3RsICsgSEFTSF9TRUdNRU5UX09GRlNFVCgoaGFzaHApLT5oY3Rs LCAoaWR4KSkpCiAKLSNkZWZpbmUgSEFTSF9TRUdNRU5UX1NJWkUoaGFzaHApCSgoaGFzaHAp LT5zc2l6ZSAqIE1BWEFMSUdOKHNpemVvZihIQVNIQlVDS0VUKSkpCisjZGVmaW5lIEhBU0hf U0VHTUVOVF9TSVpFKGhhc2hwKSBcCisJKChoYXNocCktPnNzaXplICogc2l6ZW9mKEhBU0hC VUNLRVQpKQorCisvKiBYWFggdGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIEhBU0hfU0VH TUVOVF9PRkZTRVQsIHVuaXRlPyAqLworI2RlZmluZSBIQVNIX0VMRU1FTlRTX09GRlNFVCho Y3RsLCBuc2VncykgXAorCShzaXplb2YoSEFTSEhEUikgKyBcCisJICgoaGN0bCktPmRzaXpl ICogc2l6ZW9mKEhBU0hTRUdNRU5UKSkgKyBcCisJICgoaGN0bCktPnNzaXplICogKG5zZWdz KSAqIHNpemVvZihIQVNIQlVDS0VUKSkpCisKKyNkZWZpbmUgSEFTSF9FTEVNRU5UU19QVFIo aGFzaHAsIG5zZWdzKSBcCisJKChjaGFyICopIChoYXNocCktPmhjdGwgKyBIQVNIX0VMRU1F TlRTX09GRlNFVCgoaGFzaHApLT5oY3RsLCBuc2VncykpCiAKLSNkZWZpbmUJSEFTSF9ESVJF Q1RPUlkoaGFzaHApCShIQVNIU0VHTUVOVCAqKSAoKChjaGFyICopIChoYXNocCktPmhjdGwp ICsgTUFYQUxJR04oc2l6ZW9mKEhBU0hIRFIpKSkKKy8qIEVhY2ggZWxlbWVudCBoYXMgYSBI QVNIRUxFTUVOVCBoZWFkZXIgcGx1cyB1c2VyIGRhdGEuICovCisjZGVmaW5lIEhBU0hfRUxF TUVOVF9TSVpFKGhjdGwpIFwKKwkoTUFYQUxJR04oc2l6ZW9mKEhBU0hFTEVNRU5UKSkgKyBN QVhBTElHTigoaGN0bCktPmVudHJ5c2l6ZSkpCiAKICNkZWZpbmUgSEFTSF9FTEVNRU5UX05F WFQoaGN0bCwgbnVtLCBwdHIpIFwKLQkoKGNoYXIgKikgKHB0cikgKyAoKG51bSkgKiAoTUFY QUxJR04oc2l6ZW9mKEhBU0hFTEVNRU5UKSkgKyBNQVhBTElHTigoaGN0bCktPmVudHJ5c2l6 ZSkpKSkKKwkoKGNoYXIgKikgKHB0cikgKyAoKG51bSkgKiBIQVNIX0VMRU1FTlRfU0laRSho Y3RsKSkpCiAKIC8qCiAgKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMKQEAgLTMwNSw4 ICszMTEsOCBAQCBzdGF0aWMgdm9pZCByZWdpc3Rlcl9zZXFfc2NhbihIVEFCICpoYXNocCk7 CiBzdGF0aWMgdm9pZCBkZXJlZ2lzdGVyX3NlcV9zY2FuKEhUQUIgKmhhc2hwKTsKIHN0YXRp YyBib29sIGhhc19zZXFfc2NhbnMoSFRBQiAqaGFzaHApOwogCi1zdGF0aWMgdm9pZAljb21w dXRlX2J1Y2tldHNfYW5kX3NlZ3MobG9uZyBuZWxlbSwgbG9uZyBudW1fcGFydGl0aW9ucywK LQkJCQkJCQkJCSBsb25nIHNzaXplLCAvKiBzZWdtZW50IHNpemUgKi8KK3N0YXRpYyB2b2lk IGNvbXB1dGVfYnVja2V0c19hbmRfc2Vncyhsb25nIG5lbGVtLCBsb25nIG51bV9wYXJ0aXRp b25zLAorCQkJCQkJCQkJIGxvbmcgc3NpemUsCiAJCQkJCQkJCQkgaW50ICpuYnVja2V0cywg aW50ICpuc2VnbWVudHMpOwogc3RhdGljIHZvaWQgZWxlbWVudF9hZGQoSFRBQiAqaGFzaHAs IEhBU0hFTEVNRU5UICpmaXJzdEVsZW1lbnQsCiAJCQkJCQlpbnQgbmVsZW0sIGludCBmcmVl bGlzdF9pZHgpOwpAQCAtNTQ3LDcgKzU1Myw3IEBAIGhhc2hfY3JlYXRlKGNvbnN0IGNoYXIg KnRhYm5hbWUsIGxvbmcgbmVsZW0sIGNvbnN0IEhBU0hDVEwgKmluZm8sIGludCBmbGFncykK IAkgKi8KIAlpZiAoIWhhc2hwLT5oY3RsKQogCXsKLQkJU2l6ZQlzaXplID0gaGFzaF9nZXRf aW5pdF9zaXplKGluZm8sIGZsYWdzLCBuZWxlbSwgbmVsZW1fYmF0Y2gpOworCQlTaXplCQlz aXplID0gaGFzaF9nZXRfaW5pdF9zaXplKGluZm8sIGZsYWdzLCBuZWxlbSwgbmVsZW1fYmF0 Y2gpOwogCiAJCWhhc2hwLT5oY3RsID0gKEhBU0hIRFIgKikgaGFzaHAtPmFsbG9jKHNpemUp OwogCQlpZiAoIWhhc2hwLT5oY3RsKQpAQCAtNjM4LDE2ICs2NDQsNiBAQCBoYXNoX2NyZWF0 ZShjb25zdCBjaGFyICp0YWJuYW1lLCBsb25nIG5lbGVtLCBjb25zdCBIQVNIQ1RMICppbmZv LCBpbnQgZmxhZ3MpCiAJCWVsc2UKIAkJCWZyZWVsaXN0X3BhcnRpdGlvbnMgPSAxOwogCi0J CWNvbXB1dGVfYnVja2V0c19hbmRfc2VncyhuZWxlbSwgaGN0bC0+bnVtX3BhcnRpdGlvbnMs IGhjdGwtPnNzaXplLAotCQkJCQkJCQkgJm5idWNrZXRzLCAmbnNlZ3MpOwotCi0JCS8qCi0J CSAqIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRvIGZpbmQgdGhlIGZpcnN0IHBh cnRpdGlvbiBvZgotCQkgKiBlbGVtZW50cy4KLQkJICogV2UgaGF2ZSB0byBza2lwIHNwYWNl IGZvciB0aGUgaGVhZGVyLCBzZWdtZW50cyBhbmQgYnVja2V0cy4KLSAJCSAqLwotCQlwdHIg PSBIQVNIX0VMRU1FTlRTKGhhc2hwLCBuc2Vncyk7Ci0KIAkJbmVsZW1fYWxsb2MgPSBuZWxl bSAvIGZyZWVsaXN0X3BhcnRpdGlvbnM7CiAJCWlmIChuZWxlbV9hbGxvYyA8PSAwKQogCQkJ bmVsZW1fYWxsb2MgPSAxOwpAQCAtNjYyLDE5ICs2NTgsMjkgQEAgaGFzaF9jcmVhdGUoY29u c3QgY2hhciAqdGFibmFtZSwgbG9uZyBuZWxlbSwgY29uc3QgSEFTSENUTCAqaW5mbywgaW50 IGZsYWdzKQogCQllbHNlCiAJCQluZWxlbV9hbGxvY19maXJzdCA9IG5lbGVtX2FsbG9jOwog CisJCS8qCisJCSAqIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRvIGZpbmQgdGhl IGZpcnN0IHBhcnRpdGlvbiBvZgorCQkgKiBlbGVtZW50cy4gV2UgaGF2ZSB0byBza2lwIHNw YWNlIGZvciB0aGUgaGVhZGVyLCBzZWdtZW50cyBhbmQKKwkJICogYnVja2V0cy4KKwkJICov CisJCWNvbXB1dGVfYnVja2V0c19hbmRfc2VncyhuZWxlbSwgaGN0bC0+bnVtX3BhcnRpdGlv bnMsIGhjdGwtPnNzaXplLAorCQkJCQkJCQkgJm5idWNrZXRzLCAmbnNlZ3MpOworCisJCXB0 ciA9IEhBU0hfRUxFTUVOVFNfUFRSKGhhc2hwLCBuc2Vncyk7CisKKwkJLyoKKwkJICogQXNz aWduIHRoZSBjb3JyZWN0IGxvY2F0aW9uIG9mIGVhY2ggcGFyaXRpb24gd2l0aGluIGEgcHJl LWFsbG9jYXRlZAorCQkgKiBidWZmZXIuCisJCSAqCisJCSAqIEFjdHVhbCBtZW1vcnkgYWxs b2NhdGlvbiBoYXBwZW5zIGluIFNobWVtSW5pdEhhc2ggZm9yIHNoYXJlZCBoYXNoCisJCSAq IHRhYmxlcyBvciBlYXJsaWVyIGluIHRoaXMgZnVuY3Rpb24gZm9yIG5vbi1zaGFyZWQgaGFz aCB0YWJsZXMuCisJCSAqCisJCSAqIFdlIGp1c3QgbmVlZCB0byBzcGxpdCB0aGF0IGFsbG9j YXRpb24gaW50byBwZXItYmF0Y2ggZnJlZWxpc3RzLgorCQkgKi8KIAkJZm9yIChpID0gMDsg aSA8IGZyZWVsaXN0X3BhcnRpdGlvbnM7IGkrKykKIAkJewogCQkJaW50CQkJdGVtcCA9IChp ID09IDApID8gbmVsZW1fYWxsb2NfZmlyc3QgOiBuZWxlbV9hbGxvYzsKIAotCQkJLyoKLQkJ CSAqIEFzc2lnbiB0aGUgY29ycmVjdCBsb2NhdGlvbiBvZiBlYWNoIHBhcml0aW9uIHdpdGhp biBhCi0JCQkgKiBwcmUtYWxsb2NhdGVkIGJ1ZmZlci4KLQkJCSAqCi0JCQkgKiBBY3R1YWwg bWVtb3J5IGFsbG9jYXRpb24gaGFwcGVucyBpbiBTaG1lbUluaXRIYXNoIGZvcgotCQkJICog c2hhcmVkIGhhc2ggdGFibGVzIG9yIGVhcmxpZXIgaW4gdGhpcyBmdW5jdGlvbiBmb3Igbm9u LXNoYXJlZAotCQkJICogaGFzaCB0YWJsZXMuCi0JCQkgKiBXZSBqdXN0IG5lZWQgdG8gc3Bs aXQgdGhhdCBhbGxvY2F0aW9uIHBlci1iYXRjaCBmcmVlbGlzdHMuCi0JCQkgKi8KIAkJCWVs ZW1lbnRfYWRkKGhhc2hwLCAoSEFTSEVMRU1FTlQgKikgcHRyLCB0ZW1wLCBpKTsKIAkJCXB0 ciA9IEhBU0hfRUxFTUVOVF9ORVhUKGhjdGwsIHRlbXAsIHB0cik7CiAJCX0KQEAgLTc4OSwx NCArNzk1LDE0IEBAIGluaXRfaHRhYihIVEFCICpoYXNocCwgbG9uZyBuZWxlbSkKIAlpZiAo IShoYXNocC0+ZGlyKSkKIAl7CiAJCUN1cnJlbnREeW5hSGFzaEN4dCA9IGhhc2hwLT5oY3h0 OwotCQloYXNocC0+ZGlyID0gSEFTSF9ESVJFQ1RPUlkoaGFzaHApOworCQloYXNocC0+ZGly ID0gKEhBU0hTRUdNRU5UICopIEhBU0hfRElSRUNUT1JZX1BUUihoYXNocCk7CiAJfQogCiAJ LyogQXNzaWduIGluaXRpYWwgc2VnbWVudHMsIHdoaWNoIGFyZSBhbHNvIHByZS1hbGxvY2F0 ZWQgKi8KIAlpID0gMDsKIAlmb3IgKHNlZ3AgPSBoYXNocC0+ZGlyOyBoY3RsLT5uc2VncyA8 IG5zZWdzOyBoY3RsLT5uc2VncysrLCBzZWdwKyspCiAJewotCQkqc2VncCA9IEhBU0hfU0VH TUVOVF9QVFIoaGFzaHAsIGkrKyk7CisJCSpzZWdwID0gKEhBU0hTRUdNRU5UKSBIQVNIX1NF R01FTlRfUFRSKGhhc2hwLCBpKyspOwogCQlNZW1TZXQoKnNlZ3AsIDAsIEhBU0hfU0VHTUVO VF9TSVpFKGhhc2hwKSk7CiAJfQogCkBAIC04OTAsMTkgKzg5NiwyMiBAQCBoYXNoX3NlbGVj dF9kaXJzaXplKGxvbmcgbnVtX2VudHJpZXMpCiB9CiAKIC8qCi0gKiBDb21wdXRlIHRoZSBy ZXF1aXJlZCBpbml0aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBhIHNoYXJlZC1tZW1vcnkK LSAqIG9yIG5vbi1zaGFyZWQgbWVtb3J5IGhhc2h0YWJsZSB3aXRoIHRoZSBnaXZlbiBwYXJh bWV0ZXJzLgotICogV2UgbmVlZCBzcGFjZSBmb3IgdGhlIEhBU0hIRFIsIGZvciB0aGUgZGly ZWN0b3J5LCBzZWdtZW50cyBhbmQKLSAqIHRoZSBpbml0X3NpemUgZWxlbWVudHMgaW4gYnVj a2V0cy4JCi0gKiAKKyAqIENvbXB1dGUgdGhlIHJlcXVpcmVkIGluaXRpYWwgbWVtb3J5IGFs bG9jYXRpb24gZm9yIGEgaGFzaHRhYmxlIHdpdGggdGhlIGdpdmVuCisgKiBwYXJhbWV0ZXJz LiBUaGUgaGFzaCB0YWJsZSBtYXkgYmUgc2hhcmVkIG9yIHByaXZhdGUuIFdlIG5lZWQgc3Bh Y2UgZm9yIHRoZQorICogSEFTSEhEUiwgZm9yIHRoZSBkaXJlY3RvcnksIHNlZ21lbnRzIGFu ZCB0aGUgaW5pdF9zaXplIGVsZW1lbnRzIGluIGJ1Y2tldHMuCisgKgogICogRm9yIHNoYXJl ZCBoYXNoIHRhYmxlcyB0aGUgZGlyZWN0b3J5IHNpemUgaXMgbm9uLWV4cGFuc2l2ZS4KLSAq IAotICogaW5pdF9zaXplIHNob3VsZCBtYXRjaCB0aGUgdG90YWwgbnVtYmVyIG9mIGVsZW1l bnRzIGFsbG9jYXRlZAotICogZHVyaW5nIGhhc2ggdGFibGUgY3JlYXRpb24sIGl0IGNvdWxk IGJlIHplcm8gZm9yIG5vbi1zaGFyZWQgaGFzaAotICogdGFibGVzIGRlcGVuZGluZyBvbiB0 aGUgdmFsdWUgb2YgbmVsZW1fYWxsb2MuIEZvciBtb3JlIGV4cGxhbmF0aW9uCi0gKiBzZWUg Y29tbWVudHMgd2l0aGluIHRoaXMgZnVuY3Rpb24uCisgKgorICogaW5pdF9zaXplIHNob3Vs ZCBtYXRjaCB0aGUgdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGFsbG9jYXRlZCBkdXJpbmcg aGFzaAorICogdGFibGUgY3JlYXRpb24sIGl0IGNvdWxkIGJlIHplcm8gZm9yIG5vbi1zaGFy ZWQgaGFzaCB0YWJsZXMgZGVwZW5kaW5nIG9uIHRoZQorICogdmFsdWUgb2YgbmVsZW1fYWxs b2MuIEZvciBtb3JlIGV4cGxhbmF0aW9uIHNlZSBjb21tZW50cyB3aXRoaW4gdGhpcyBmdW5j dGlvbi4KICAqCiAgKiBuZWxlbV9hbGxvYyBwYXJhbWV0ZXIgaXMgbm90IHJlbGV2YW50IGZv ciBzaGFyZWQgaGFzaCB0YWJsZXMuCisgKgorICogWFhYIEkgZmluZCB0aGlzIGNvbW1lbnQg aGFyZCB0byB1bmRlcnN0YW5kIC8gY29uZnVzaW5nLiBTbyB3aGF0IGlzIGluaXRfc2l6ZT8K KyAqIFdoeSBzaG91bGQgaXQgbWF0Y2ggdGhlIHRvdGFsIG51bWJlciBvZiBlbGVtZW50cyBh bGxvY2F0ZWQgZHVyaW5nIGhhc2ggdGFibGUKKyAqIGNyZWF0aW9uPyBXaGF0IGRvZXMgIml0 IGNvdWxkIGJlIHplcm8iIHNheT8gU2hvdWxkIGl0IGJlIHplcm8sIG9yIHdoeSB3b3VsZCBJ CisgKiB3YW50IHRvIG1ha2UgaXQgemVybyBpbiBzb21lIGNhc2VzPwogICovCiBTaXplCiBo YXNoX2dldF9pbml0X3NpemUoY29uc3QgSEFTSENUTCAqaW5mbywgaW50IGZsYWdzLCBsb25n IGluaXRfc2l6ZSwgaW50IG5lbGVtX2FsbG9jKQpAQCAtOTEyLDggKzkyMSw4IEBAIGhhc2hf Z2V0X2luaXRfc2l6ZShjb25zdCBIQVNIQ1RMICppbmZvLCBpbnQgZmxhZ3MsIGxvbmcgaW5p dF9zaXplLCBpbnQgbmVsZW1fYWxsCiAJaW50CQkJbnVtX3BhcnRpdGlvbnM7CiAJbG9uZwkJ c3NpemU7CiAJbG9uZwkJZHNpemU7Ci0JYm9vbAkJZWxlbWVudF9hbGxvYyA9IHRydWU7IC8q QWx3YXlzIHRydWUgZm9yIHNoYXJlZCBoYXNoIHRhYmxlcyAqLwotCVNpemUJCWVsZW1lbnRT aXplID0gTUFYQUxJR04oc2l6ZW9mKEhBU0hFTEVNRU5UKSkgKyBNQVhBTElHTihpbmZvLT5l bnRyeXNpemUpOworCWJvb2wJCWVsZW1lbnRfYWxsb2MgPSB0cnVlOwkvKiBBbHdheXMgdHJ1 ZSBmb3Igc2hhcmVkIGhhc2ggdGFibGVzICovCisJU2l6ZQkJZWxlbWVudFNpemUgPSBIQVNI X0VMRU1FTlRfU0laRShpbmZvKTsKIAogCS8qCiAJICogRm9yIG5vbi1zaGFyZWQgaGFzaCB0 YWJsZXMsIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGVsZW1lbnRzIGFyZQpAQCAtOTMxLDYg Kzk0MCw3IEBAIGhhc2hfZ2V0X2luaXRfc2l6ZShjb25zdCBIQVNIQ1RMICppbmZvLCBpbnQg ZmxhZ3MsIGxvbmcgaW5pdF9zaXplLCBpbnQgbmVsZW1fYWxsCiAJCUFzc2VydChmbGFncyAm IEhBU0hfRElSU0laRSk7CiAJCUFzc2VydChpbmZvLT5kc2l6ZSA9PSBpbmZvLT5tYXhfZHNp emUpOwogCX0KKwogCS8qIE5vbi1zaGFyZWQgaGFzaCB0YWJsZXMgbWF5IG5vdCBzcGVjaWZ5 IGRpciBzaXplICovCiAJaWYgKCEoZmxhZ3MgJiBIQVNIX0RJUlNJWkUpKQogCXsKQEAgLTk2 MSw4ICs5NzEsOCBAQCBoYXNoX2dldF9pbml0X3NpemUoY29uc3QgSEFTSENUTCAqaW5mbywg aW50IGZsYWdzLCBsb25nIGluaXRfc2l6ZSwgaW50IG5lbGVtX2FsbAogCWlmICghZWxlbWVu dF9hbGxvYykKIAkJaW5pdF9zaXplID0gMDsKIAotCXJldHVybiBNQVhBTElHTihzaXplb2Yo SEFTSEhEUikpICsgZHNpemUgKiBNQVhBTElHTihzaXplb2YoSEFTSFNFR01FTlQpKSArCi0J CSsgTUFYQUxJR04oc2l6ZW9mKEhBU0hCVUNLRVQpKSAqIHNzaXplICogbnNlZ3MKKwlyZXR1 cm4gc2l6ZW9mKEhBU0hIRFIpICsgZHNpemUgKiBzaXplb2YoSEFTSFNFR01FTlQpCisJCSsg c2l6ZW9mKEhBU0hCVUNLRVQpICogc3NpemUgKiBuc2VncwogCQkrIGluaXRfc2l6ZSAqIGVs ZW1lbnRTaXplOwogfQogCkBAIC0xMzkzLDggKzE0MDMsNyBAQCBnZXRfaGFzaF9lbnRyeShI VEFCICpoYXNocCwgaW50IGZyZWVsaXN0X2lkeCkKIAkJICogRmFpbGluZyBiZWNhdXNlIHRo ZSBuZWVkZWQgZWxlbWVudCBpcyBpbiBhIGRpZmZlcmVudCBmcmVlbGlzdCBpcwogCQkgKiBu b3QgYWNjZXB0YWJsZS4KIAkJICovCi0JCW5ld0VsZW1lbnQgPSBlbGVtZW50X2FsbG9jKGhh c2hwLCBoY3RsLT5uZWxlbV9hbGxvYyk7Ci0JCWlmIChuZXdFbGVtZW50ID09IE5VTEwpCisJ CWlmICgobmV3RWxlbWVudCA9IGVsZW1lbnRfYWxsb2MoaGFzaHAsIGhjdGwtPm5lbGVtX2Fs bG9jKSkgPT0gTlVMTCkKIAkJewogCQkJaW50CQkJYm9ycm93X2Zyb21faWR4OwogCkBAIC0x ODIzLDcgKzE4MzIsNyBAQCBlbGVtZW50X2FsbG9jKEhUQUIgKmhhc2hwLCBpbnQgbmVsZW0p CiAJCXJldHVybiBOVUxMOwogCiAJLyogRWFjaCBlbGVtZW50IGhhcyBhIEhBU0hFTEVNRU5U IGhlYWRlciBwbHVzIHVzZXIgZGF0YS4gKi8KLQllbGVtZW50U2l6ZSA9IE1BWEFMSUdOKHNp emVvZihIQVNIRUxFTUVOVCkpICsgTUFYQUxJR04oaGN0bC0+ZW50cnlzaXplKTsKKwllbGVt ZW50U2l6ZSA9IEhBU0hfRUxFTUVOVF9TSVpFKGhjdGwpOwogCUN1cnJlbnREeW5hSGFzaEN4 dCA9IGhhc2hwLT5oY3h0OwogCWZpcnN0RWxlbWVudCA9IChIQVNIRUxFTUVOVCAqKSBoYXNo cC0+YWxsb2MobmVsZW0gKiBlbGVtZW50U2l6ZSk7CiAKQEAgLTE4MzQsNyArMTg0Myw3IEBA IGVsZW1lbnRfYWxsb2MoSFRBQiAqaGFzaHAsIGludCBuZWxlbSkKIH0KIAogLyoKLSAqIExp bmsgdGhlIGVsZW1lbnRzIGFsbG9jYXRlZCBieSBlbGVtZW50X2FsbG9jIGludG8gdGhlIGlu ZGljYXRlZCBmcmVlIGxpc3QKKyAqIGxpbmsgdGhlIGVsZW1lbnRzIGFsbG9jYXRlZCBieSBl bGVtZW50X2FsbG9jIGludG8gdGhlIGluZGljYXRlZCBmcmVlIGxpc3QKICAqLwogc3RhdGlj IHZvaWQKIGVsZW1lbnRfYWRkKEhUQUIgKmhhc2hwLCBIQVNIRUxFTUVOVCAqZmlyc3RFbGVt ZW50LCBpbnQgbmVsZW0sIGludCBmcmVlbGlzdF9pZHgpCkBAIC0xODQ2LDcgKzE4NTUsOCBA QCBlbGVtZW50X2FkZChIVEFCICpoYXNocCwgSEFTSEVMRU1FTlQgKmZpcnN0RWxlbWVudCwg aW50IG5lbGVtLCBpbnQgZnJlZWxpc3RfaWR4KQogCWludAkJCWk7CiAKIAkvKiBFYWNoIGVs ZW1lbnQgaGFzIGEgSEFTSEVMRU1FTlQgaGVhZGVyIHBsdXMgdXNlciBkYXRhLiAqLwotCWVs ZW1lbnRTaXplID0gTUFYQUxJR04oc2l6ZW9mKEhBU0hFTEVNRU5UKSkgKyBNQVhBTElHTiho Y3RsLT5lbnRyeXNpemUpOworCWVsZW1lbnRTaXplID0gSEFTSF9FTEVNRU5UX1NJWkUoaGN0 bCk7CisKIAkvKiBwcmVwYXJlIHRvIGxpbmsgYWxsIHRoZSBuZXcgZW50cmllcyBpbnRvIHRo ZSBmcmVlbGlzdCAqLwogCXByZXZFbGVtZW50ID0gTlVMTDsKIAl0bXBFbGVtZW50ID0gZmly c3RFbGVtZW50OwpAQCAtMjEwMyw3ICsyMTEzLDYgQEAgY29tcHV0ZV9idWNrZXRzX2FuZF9z ZWdzKGxvbmcgbmVsZW0sIGxvbmcgbnVtX3BhcnRpdGlvbnMsIGxvbmcgc3NpemUsCiAJd2hp bGUgKCgqbmJ1Y2tldHMpIDwgbnVtX3BhcnRpdGlvbnMpCiAJCSgqbmJ1Y2tldHMpIDw8PSAx OwogCi0KIAkvKgogCSAqIEZpZ3VyZSBudW1iZXIgb2YgZGlyZWN0b3J5IHNlZ21lbnRzIG5l ZWRlZCwgcm91bmQgdXAgdG8gYSBwb3dlciBvZiAyCiAJICovCi0tIAoyLjQ5LjAKCg== --------------eAs3MTPG5ycztqDaCyrXnZxm Content-Type: text/x-patch; charset=UTF-8; name="v6-0003-align-using-CACHELINESIZE-to-match-ShmemAllocRaw.patch" Content-Disposition: attachment; filename*0="v6-0003-align-using-CACHELINESIZE-to-match-ShmemAllocRaw.pat"; filename*1="ch" Content-Transfer-Encoding: base64 RnJvbSA4ODk3NGRjOWEzNjc1OWVhZjJiMDA0OGI2YWM0NWJjMGM4M2NiNTM3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVGh1LCAyNyBNYXIgMjAyNSAyMTo1ODoyMiArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djYgMy83XSBhbGlnbiB1c2luZyBDQUNIRUxJTkVTSVpFLCB0byBtYXRjaCBTaG1lbUFsbG9j UmF3CgotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2hhc2gvZHluYWhhc2guYyB8IDEwICsrKysr Ky0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaGFzaC9keW5haGFzaC5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvaGFzaC9keW5haGFzaC5jCmluZGV4IGRjZGMxNDNlNjkwLi5mYzU1 NzVkYWFlYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaGFzaC9keW5haGFzaC5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2hhc2gvZHluYWhhc2guYwpAQCAtMjc2LDcgKzI3 Niw3IEBAIHN0YXRpYyBsb25nIGhhc2hfYWNjZXNzZXMsCiAKIC8qIFhYWCB0aGlzIGlzIGV4 YWN0bHkgdGhlIHNhbWUgYXMgSEFTSF9TRUdNRU5UX09GRlNFVCwgdW5pdGU/ICovCiAjZGVm aW5lIEhBU0hfRUxFTUVOVFNfT0ZGU0VUKGhjdGwsIG5zZWdzKSBcCi0JKHNpemVvZihIQVNI SERSKSArIFwKKwlDQUNIRUxJTkVBTElHTihzaXplb2YoSEFTSEhEUikgKyBcCiAJICgoaGN0 bCktPmRzaXplICogc2l6ZW9mKEhBU0hTRUdNRU5UKSkgKyBcCiAJICgoaGN0bCktPnNzaXpl ICogKG5zZWdzKSAqIHNpemVvZihIQVNIQlVDS0VUKSkpCiAKQEAgLTk3MSw5ICs5NzEsMTEg QEAgaGFzaF9nZXRfaW5pdF9zaXplKGNvbnN0IEhBU0hDVEwgKmluZm8sIGludCBmbGFncywg bG9uZyBpbml0X3NpemUsIGludCBuZWxlbV9hbGwKIAlpZiAoIWVsZW1lbnRfYWxsb2MpCiAJ CWluaXRfc2l6ZSA9IDA7CiAKLQlyZXR1cm4gc2l6ZW9mKEhBU0hIRFIpICsgZHNpemUgKiBz aXplb2YoSEFTSFNFR01FTlQpCi0JCSsgc2l6ZW9mKEhBU0hCVUNLRVQpICogc3NpemUgKiBu c2VncwotCQkrIGluaXRfc2l6ZSAqIGVsZW1lbnRTaXplOworCS8qIGVuZm9yY2UgZWxlbWVu dHMgdG8gYmUgY2FjaGVsaW5lIGFsaWduZWQgKi8KKwlyZXR1cm4gQ0FDSEVMSU5FQUxJR04o c2l6ZW9mKEhBU0hIRFIpCisJCQkrIChkc2l6ZSAqIHNpemVvZihIQVNIU0VHTUVOVCkpCisJ CQkrIChzc2l6ZSAqIG5zZWdzICogc2l6ZW9mKEhBU0hCVUNLRVQpKSkKKwkJCSsgKGluaXRf c2l6ZSAqIGVsZW1lbnRTaXplKTsKIH0KIAogCi0tIAoyLjQ5LjAKCg== --------------eAs3MTPG5ycztqDaCyrXnZxm Content-Type: text/x-patch; charset=UTF-8; name="v6-0004-Replace-ShmemAlloc-calls-by-ShmemInitStruct.patch" Content-Disposition: attachment; filename*0="v6-0004-Replace-ShmemAlloc-calls-by-ShmemInitStruct.patch" Content-Transfer-Encoding: base64 RnJvbSBlZGNjY2U5ZmViOGE5MzAxNTBkOTdkMDM0ZWY5NmM2YmZmNTQ0ZDk2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBSYWhpbGEgU3llZCA8cmFoaWxhc3llZC45MEBnbWFp bC5jb20+CkRhdGU6IFRodSwgMjcgTWFyIDIwMjUgMTY6NDM6MjggKzA1MzAKU3ViamVjdDog W1BBVENIIHY2IDQvN10gUmVwbGFjZSBTaG1lbUFsbG9jIGNhbGxzIGJ5IFNobWVtSW5pdFN0 cnVjdAoKVGhlIHNoYXJlZCBtZW1vcnkgYWxsb2NhdGVkIGJ5IFNobWVtQWxsb2MgaXMgbm90 IHRyYWNrZWQKYnkgcGdfc2htZW1fYWxsb2NhdGlvbnMuIFRoaXMgY29tbWl0IHJlcGxhY2Vz IG1vc3Qgb2YgdGhlCmNhbGxzIHRvIFNobWVtQWxsb2MgYnkgU2htZW1Jbml0U3RydWN0IHRv IGFzc29jaWF0ZSBhIG5hbWUKd2l0aCB0aGUgYWxsb2NhdGlvbnMgYW5kIGVuc3VyZSB0aGF0 IHRoZXkgZ2V0IHRyYWNrZWQgYnkKcGdfc2htZW1fYWxsb2NhdGlvbnMuIEl0IGFsc28gbWVy Z2VzIHNldmVyYWwgc21hbGxlcgpTaG1lbUFsbG9jIGNhbGxzIGludG8gbGFyZ2VyIFNobWVt SW5pdFN0cnVjdCB0byBhbGxvY2F0ZQphbmQgdHJhY2sgYWxsIHRoZSByZWxhdGVkIG1lbW9y eSBhbGxvY2F0aW9ucyB1bmRlciBzaW5nbGUKY2FsbC4KLS0tCiBzcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvcHJlZGljYXRlLmMgfCAyNyArKysrKysrKystLS0tLQogc3JjL2JhY2tlbmQv c3RvcmFnZS9sbWdyL3Byb2MuYyAgICAgIHwgNTYgKysrKysrKysrKysrKysrKysrKysrKyst LS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA2MyBpbnNlcnRpb25zKCspLCAyMCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKaW5kZXggNWIyMWEwNTM5 ODEuLmRlMjYyOWZkZjBjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3Iv cHJlZGljYXRlLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5j CkBAIC0xMjI2LDE0ICsxMjI2LDIwIEBAIFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCkK IAkgKi8KIAltYXhfdGFibGVfc2l6ZSAqPSAxMDsKIAorCXJlcXVlc3RTaXplID0gYWRkX3Np emUoUHJlZFhhY3RMaXN0RGF0YVNpemUsCisJCQkJCQkgICAobXVsX3NpemUoKFNpemUpIG1h eF90YWJsZV9zaXplLAorCQkJCQkJCQkJIHNpemVvZihTRVJJQUxJWkFCTEVYQUNUKSkpKTsK IAlQcmVkWGFjdCA9IFNobWVtSW5pdFN0cnVjdCgiUHJlZFhhY3RMaXN0IiwKLQkJCQkJCQkg ICBQcmVkWGFjdExpc3REYXRhU2l6ZSwKKwkJCQkJCQkgICByZXF1ZXN0U2l6ZSwKIAkJCQkJ CQkgICAmZm91bmQpOwogCUFzc2VydChmb3VuZCA9PSBJc1VuZGVyUG9zdG1hc3Rlcik7CiAJ aWYgKCFmb3VuZCkKIAl7CiAJCWludAkJCWk7CiAKKwkJLyogcmVzZXQgZXZlcnl0aGluZywg Ym90aCB0aGUgaGVhZGVyIGFuZCB0aGUgZWxlbWVudCAqLworCQltZW1zZXQoUHJlZFhhY3Qs IDAsIHJlcXVlc3RTaXplKTsKKwogCQlkbGlzdF9pbml0KCZQcmVkWGFjdC0+YXZhaWxhYmxl TGlzdCk7CiAJCWRsaXN0X2luaXQoJlByZWRYYWN0LT5hY3RpdmVMaXN0KTsKIAkJUHJlZFhh Y3QtPlN4YWN0R2xvYmFsWG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOwpAQCAtMTI0Miwx MSArMTI0OCw4IEBAIFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCkKIAkJUHJlZFhhY3Qt Pkxhc3RTeGFjdENvbW1pdFNlcU5vID0gRmlyc3ROb3JtYWxTZXJDb21taXRTZXFObyAtIDE7 CiAJCVByZWRYYWN0LT5DYW5QYXJ0aWFsQ2xlYXJUaHJvdWdoID0gMDsKIAkJUHJlZFhhY3Qt PkhhdmVQYXJ0aWFsQ2xlYXJlZFRocm91Z2ggPSAwOwotCQlyZXF1ZXN0U2l6ZSA9IG11bF9z aXplKChTaXplKSBtYXhfdGFibGVfc2l6ZSwKLQkJCQkJCQkgICBzaXplb2YoU0VSSUFMSVpB QkxFWEFDVCkpOwotCQlQcmVkWGFjdC0+ZWxlbWVudCA9IFNobWVtQWxsb2MocmVxdWVzdFNp emUpOworCQlQcmVkWGFjdC0+ZWxlbWVudCA9IChTRVJJQUxJWkFCTEVYQUNUICopICgoY2hh ciAqKSBQcmVkWGFjdCArIFByZWRYYWN0TGlzdERhdGFTaXplKTsKIAkJLyogQWRkIGFsbCBl bGVtZW50cyB0byBhdmFpbGFibGUgbGlzdCwgY2xlYW4uICovCi0JCW1lbXNldChQcmVkWGFj dC0+ZWxlbWVudCwgMCwgcmVxdWVzdFNpemUpOwogCQlmb3IgKGkgPSAwOyBpIDwgbWF4X3Rh YmxlX3NpemU7IGkrKykKIAkJewogCQkJTFdMb2NrSW5pdGlhbGl6ZSgmUHJlZFhhY3QtPmVs ZW1lbnRbaV0ucGVyWGFjdFByZWRpY2F0ZUxpc3RMb2NrLApAQCAtMTI5OSwyMSArMTMwMiwy NSBAQCBQcmVkaWNhdGVMb2NrU2htZW1Jbml0KHZvaWQpCiAJICogcHJvYmFibHkgT0suCiAJ ICovCiAJbWF4X3RhYmxlX3NpemUgKj0gNTsKKwlyZXF1ZXN0U2l6ZSA9IFJXQ29uZmxpY3RQ b29sSGVhZGVyRGF0YVNpemUgKworCQkJCQltdWxfc2l6ZSgoU2l6ZSkgbWF4X3RhYmxlX3Np emUsCisJCQkJCQkJIFJXQ29uZmxpY3REYXRhU2l6ZSk7CiAKIAlSV0NvbmZsaWN0UG9vbCA9 IFNobWVtSW5pdFN0cnVjdCgiUldDb25mbGljdFBvb2wiLAotCQkJCQkJCQkJIFJXQ29uZmxp Y3RQb29sSGVhZGVyRGF0YVNpemUsCisJCQkJCQkJCQkgcmVxdWVzdFNpemUsCiAJCQkJCQkJ CQkgJmZvdW5kKTsKIAlBc3NlcnQoZm91bmQgPT0gSXNVbmRlclBvc3RtYXN0ZXIpOwogCWlm ICghZm91bmQpCiAJewogCQlpbnQJCQlpOwogCisJCS8qIGNsZWFuIGV2ZXJ5dGhpbmcsIGlu Y2x1ZGluZyB0aGUgZWxlbWVudHMgKi8KKwkJbWVtc2V0KFJXQ29uZmxpY3RQb29sLCAwLCBy ZXF1ZXN0U2l6ZSk7CisKIAkJZGxpc3RfaW5pdCgmUldDb25mbGljdFBvb2wtPmF2YWlsYWJs ZUxpc3QpOwotCQlyZXF1ZXN0U2l6ZSA9IG11bF9zaXplKChTaXplKSBtYXhfdGFibGVfc2l6 ZSwKLQkJCQkJCQkgICBSV0NvbmZsaWN0RGF0YVNpemUpOwotCQlSV0NvbmZsaWN0UG9vbC0+ ZWxlbWVudCA9IFNobWVtQWxsb2MocmVxdWVzdFNpemUpOworCQlSV0NvbmZsaWN0UG9vbC0+ ZWxlbWVudCA9IChSV0NvbmZsaWN0KSAoKGNoYXIgKikgUldDb25mbGljdFBvb2wgKworCQkJ UldDb25mbGljdFBvb2xIZWFkZXJEYXRhU2l6ZSk7CiAJCS8qIEFkZCBhbGwgZWxlbWVudHMg dG8gYXZhaWxhYmxlIGxpc3QsIGNsZWFuLiAqLwotCQltZW1zZXQoUldDb25mbGljdFBvb2wt PmVsZW1lbnQsIDAsIHJlcXVlc3RTaXplKTsKIAkJZm9yIChpID0gMDsgaSA8IG1heF90YWJs ZV9zaXplOyBpKyspCiAJCXsKIAkJCWRsaXN0X3B1c2hfdGFpbCgmUldDb25mbGljdFBvb2wt PmF2YWlsYWJsZUxpc3QsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3Iv cHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwppbmRleCBlNGNhODYx YThlNi4uNmVlNDg0MTBiODQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1n ci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwpAQCAtMTIz LDYgKzEyMywyNCBAQCBQcm9jR2xvYmFsU2htZW1TaXplKHZvaWQpCiAJcmV0dXJuIHNpemU7 CiB9CiAKKy8qCisgKiByZXZpZXc6IGFkZCBjb21tZW50LCBleHBsYWluaW5nIHRoZSBQR19D QUNIRV9MSU5FX1NJWkUgdGhpbmcKKyAqIHJldmlldzogSSdkIGV2ZW4gbWF5YmUgc3BsaXQg dGhlIFBHX0NBQ0hFX0xJTkVfU0laRSB0aGluZyBpbnRvCisgKiBhIHNlcGFyYXRlIGNvbW1p dCwgbm90IHRvIG1peCBpdCB3aXRoIHRoZSAibW9uaXRvcmluZyBpbXByb3ZlbWVudCIKKyAq Lworc3RhdGljIFNpemUKK1BHUHJvY1NobWVtU2l6ZSh2b2lkKQoreworCVNpemUJCXNpemU7 CisJdWludDMyCQlUb3RhbFByb2NzID0gTWF4QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZX1BS T0NTICsgbWF4X3ByZXBhcmVkX3hhY3RzOworCisJc2l6ZSA9IFRvdGFsUHJvY3MgKiBzaXpl b2YoUEdQUk9DKTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgVG90YWxQcm9jcyAqIHNpemVv ZigqUHJvY0dsb2JhbC0+eGlkcykpOworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBUb3RhbFBy b2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMpKTsKKwlzaXplID0gYWRk X3NpemUoc2l6ZSwgVG90YWxQcm9jcyAqIHNpemVvZigqUHJvY0dsb2JhbC0+c3RhdHVzRmxh Z3MpKTsKKwlyZXR1cm4gc2l6ZTsKK30KKwogLyoKICAqIFJlcG9ydCBudW1iZXIgb2Ygc2Vt YXBob3JlcyBuZWVkZWQgYnkgSW5pdFByb2NHbG9iYWwuCiAgKi8KQEAgLTE3NSw2ICsxOTMs OCBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCQkJICAgKmZwRW5kUHRyIFBHX1VTRURfRk9S X0FTU0VSVFNfT05MWTsKIAlTaXplCQlmcExvY2tCaXRzU2l6ZSwKIAkJCQlmcFJlbElkU2l6 ZTsKKwlTaXplCQlyZXF1ZXN0U2l6ZTsKKwljaGFyCSAgICpwdHI7CiAKIAkvKiBDcmVhdGUg dGhlIFByb2NHbG9iYWwgc2hhcmVkIHN0cnVjdHVyZSAqLwogCVByb2NHbG9iYWwgPSAoUFJP Q19IRFIgKikKQEAgLTIwNCw3ICsyMjQsMTUgQEAgSW5pdFByb2NHbG9iYWwodm9pZCkKIAkg KiB3aXRoIGEgc2luZ2xlIGZyZWVsaXN0LikgIEVhY2ggUEdQUk9DIHN0cnVjdHVyZSBpcyBk ZWRpY2F0ZWQgdG8gZXhhY3RseQogCSAqIG9uZSBvZiB0aGVzZSBwdXJwb3NlcywgYW5kIHRo ZXkgZG8gbm90IG1vdmUgYmV0d2VlbiBncm91cHMuCiAJICovCi0JcHJvY3MgPSAoUEdQUk9D ICopIFNobWVtQWxsb2MoVG90YWxQcm9jcyAqIHNpemVvZihQR1BST0MpKTsKKwlyZXF1ZXN0 U2l6ZSA9IFBHUHJvY1NobWVtU2l6ZSgpOworCisJcHRyID0gU2htZW1Jbml0U3RydWN0KCJQ R1BST0Mgc3RydWN0dXJlcyIsCisJCQkJCQkJCQkgICByZXF1ZXN0U2l6ZSwKKwkJCQkJCQkJ CSAgICZmb3VuZCk7CisKKwlwcm9jcyA9IChQR1BST0MgKikgcHRyOworCXB0ciA9IChjaGFy ICopcHRyICsgVG90YWxQcm9jcyAqIHNpemVvZihQR1BST0MpOworCiAJTWVtU2V0KHByb2Nz LCAwLCBUb3RhbFByb2NzICogc2l6ZW9mKFBHUFJPQykpOwogCVByb2NHbG9iYWwtPmFsbFBy b2NzID0gcHJvY3M7CiAJLyogWFhYIGFsbFByb2NDb3VudCBpc24ndCByZWFsbHkgYWxsIG9m IHRoZW07IGl0IGV4Y2x1ZGVzIHByZXBhcmVkIHhhY3RzICovCkBAIC0yMTMsMTcgKzI0MSwy MSBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCS8qCiAJICogQWxsb2NhdGUgYXJyYXlzIG1p cnJvcmluZyBQR1BST0MgZmllbGRzIGluIGEgZGVuc2UgbWFubmVyLiBTZWUKIAkgKiBQUk9D X0hEUi4KLQkgKgotCSAqIFhYWDogSXQgbWlnaHQgbWFrZSBzZW5zZSB0byBpbmNyZWFzZSBw YWRkaW5nIGZvciB0aGVzZSBhcnJheXMsIGdpdmVuCi0JICogaG93IGhvdGx5IHRoZXkgYXJl IGFjY2Vzc2VkLgogCSAqLwotCVByb2NHbG9iYWwtPnhpZHMgPQotCQkoVHJhbnNhY3Rpb25J ZCAqKSBTaG1lbUFsbG9jKFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnhpZHMp KTsKKwlQcm9jR2xvYmFsLT54aWRzID0gKFRyYW5zYWN0aW9uSWQgKikgcHRyOwogCU1lbVNl dChQcm9jR2xvYmFsLT54aWRzLCAwLCBUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFs LT54aWRzKSk7Ci0JUHJvY0dsb2JhbC0+c3VieGlkU3RhdGVzID0gKFhpZENhY2hlU3RhdHVz ICopIFNobWVtQWxsb2MoVG90YWxQcm9jcyAqIHNpemVvZigqUHJvY0dsb2JhbC0+c3VieGlk U3RhdGVzKSk7CisJcHRyID0gKGNoYXIgKilwdHIgKyAoVG90YWxQcm9jcyAqIHNpemVvZigq UHJvY0dsb2JhbC0+eGlkcykpOworCisJUHJvY0dsb2JhbC0+c3VieGlkU3RhdGVzID0gKFhp ZENhY2hlU3RhdHVzICopIHB0cjsKIAlNZW1TZXQoUHJvY0dsb2JhbC0+c3VieGlkU3RhdGVz LCAwLCBUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMpKTsK LQlQcm9jR2xvYmFsLT5zdGF0dXNGbGFncyA9ICh1aW50OCAqKSBTaG1lbUFsbG9jKFRvdGFs UHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzKSk7CisJcHRyID0gKGNo YXIgKilwdHIgKyAoVG90YWxQcm9jcyAqIHNpemVvZigqUHJvY0dsb2JhbC0+c3VieGlkU3Rh dGVzKSk7CisKKwlQcm9jR2xvYmFsLT5zdGF0dXNGbGFncyA9ICh1aW50OCAqKSBwdHI7CiAJ TWVtU2V0KFByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzLCAwLCBUb3RhbFByb2NzICogc2l6ZW9m KCpQcm9jR2xvYmFsLT5zdGF0dXNGbGFncykpOworCXB0ciA9IChjaGFyICopcHRyICsgKFRv dGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzKSk7CisKKwkvKiBt YWtlIHN1cmUgd2VyIGRpZG4ndCBvdmVyZmxvdyAqLworCUFzc2VydCgocHRyID4gKGNoYXIg KikgcHJvY3MpICYmIChwdHIgPD0gKGNoYXIgKikgcHJvY3MgKyByZXF1ZXN0U2l6ZSkpOwog CiAJLyoKIAkgKiBBbGxvY2F0ZSBhcnJheXMgZm9yIGZhc3QtcGF0aCBsb2Nrcy4gVGhvc2Ug YXJlIHZhcmlhYmxlLWxlbmd0aCwgc28KQEAgLTIzMyw3ICsyNjUsOSBAQCBJbml0UHJvY0ds b2JhbCh2b2lkKQogCWZwTG9ja0JpdHNTaXplID0gTUFYQUxJR04oRmFzdFBhdGhMb2NrR3Jv dXBzUGVyQmFja2VuZCAqIHNpemVvZih1aW50NjQpKTsKIAlmcFJlbElkU2l6ZSA9IE1BWEFM SUdOKEZhc3RQYXRoTG9ja1Nsb3RzUGVyQmFja2VuZCgpICogc2l6ZW9mKE9pZCkpOwogCi0J ZnBQdHIgPSBTaG1lbUFsbG9jKFRvdGFsUHJvY3MgKiAoZnBMb2NrQml0c1NpemUgKyBmcFJl bElkU2l6ZSkpOworCWZwUHRyID0gU2htZW1Jbml0U3RydWN0KCJGYXN0IHBhdGggbG9jayBh cnJheXMiLAorCQkJCQkJCVRvdGFsUHJvY3MgKiAoZnBMb2NrQml0c1NpemUgKyBmcFJlbElk U2l6ZSksCisJCQkJCQkJJmZvdW5kKTsKIAlNZW1TZXQoZnBQdHIsIDAsIFRvdGFsUHJvY3Mg KiAoZnBMb2NrQml0c1NpemUgKyBmcFJlbElkU2l6ZSkpOwogCiAJLyogRm9yIGFzc2VydHMg Y2hlY2tpbmcgd2UgZGlkIG5vdCBvdmVyZmxvdy4gKi8KQEAgLTMzMCw3ICszNjQsOSBAQCBJ bml0UHJvY0dsb2JhbCh2b2lkKQogCVByZXBhcmVkWGFjdFByb2NzID0gJnByb2NzW01heEJh Y2tlbmRzICsgTlVNX0FVWElMSUFSWV9QUk9DU107CiAKIAkvKiBDcmVhdGUgUHJvY1N0cnVj dExvY2sgc3BpbmxvY2ssIHRvbyAqLwotCVByb2NTdHJ1Y3RMb2NrID0gKHNsb2NrX3QgKikg U2htZW1BbGxvYyhzaXplb2Yoc2xvY2tfdCkpOworCVByb2NTdHJ1Y3RMb2NrID0gKHNsb2Nr X3QgKikgU2htZW1Jbml0U3RydWN0KCJQcm9jU3RydWN0TG9jayBzcGlubG9jayIsCisJCQkJ CQkJCQkJCQkgc2l6ZW9mKHNsb2NrX3QpLAorCQkJCQkJCQkJCQkJICZmb3VuZCk7CiAJU3Bp bkxvY2tJbml0KFByb2NTdHJ1Y3RMb2NrKTsKIH0KIAotLSAKMi40OS4wCgo= --------------eAs3MTPG5ycztqDaCyrXnZxm Content-Type: text/x-patch; charset=UTF-8; name="v6-0005-review.patch" Content-Disposition: attachment; filename="v6-0005-review.patch" Content-Transfer-Encoding: base64 RnJvbSAwMzgwOWI5N2RjYTFhMjViMWI2MWYxMTllYzA1ZWY0YjFkOGU1YjQ5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVGh1LCAyNyBNYXIgMjAyNSAyMToyMDoyNiArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djYgNS83XSByZXZpZXcKCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0 ZS5jIHwgMTMgKysrKysrKystLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2Mu YyAgICAgIHwgMjEgKysrKysrKysrKystLS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDE5 IGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1n ci9wcmVkaWNhdGUuYwppbmRleCBkZTI2MjlmZGYwYy4uZDgyMTE0ZmZjYTEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYworKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKQEAgLTEyMjksNiArMTIyOSw3IEBAIFBy ZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCkKIAlyZXF1ZXN0U2l6ZSA9IGFkZF9zaXplKFBy ZWRYYWN0TGlzdERhdGFTaXplLAogCQkJCQkJICAgKG11bF9zaXplKChTaXplKSBtYXhfdGFi bGVfc2l6ZSwKIAkJCQkJCQkJCSBzaXplb2YoU0VSSUFMSVpBQkxFWEFDVCkpKSk7CisKIAlQ cmVkWGFjdCA9IFNobWVtSW5pdFN0cnVjdCgiUHJlZFhhY3RMaXN0IiwKIAkJCQkJCQkgICBy ZXF1ZXN0U2l6ZSwKIAkJCQkJCQkgICAmZm91bmQpOwpAQCAtMTIzNyw3ICsxMjM4LDcgQEAg UHJlZGljYXRlTG9ja1NobWVtSW5pdCh2b2lkKQogCXsKIAkJaW50CQkJaTsKIAotCQkvKiBy ZXNldCBldmVyeXRoaW5nLCBib3RoIHRoZSBoZWFkZXIgYW5kIHRoZSBlbGVtZW50ICovCisJ CS8qIGNsZWFuIGV2ZXJ5dGhpbmcsIGJvdGggdGhlIGhlYWRlciBhbmQgdGhlIGVsZW1lbnQg Ki8KIAkJbWVtc2V0KFByZWRYYWN0LCAwLCByZXF1ZXN0U2l6ZSk7CiAKIAkJZGxpc3RfaW5p dCgmUHJlZFhhY3QtPmF2YWlsYWJsZUxpc3QpOwpAQCAtMTI0OCw3ICsxMjQ5LDggQEAgUHJl ZGljYXRlTG9ja1NobWVtSW5pdCh2b2lkKQogCQlQcmVkWGFjdC0+TGFzdFN4YWN0Q29tbWl0 U2VxTm8gPSBGaXJzdE5vcm1hbFNlckNvbW1pdFNlcU5vIC0gMTsKIAkJUHJlZFhhY3QtPkNh blBhcnRpYWxDbGVhclRocm91Z2ggPSAwOwogCQlQcmVkWGFjdC0+SGF2ZVBhcnRpYWxDbGVh cmVkVGhyb3VnaCA9IDA7Ci0JCVByZWRYYWN0LT5lbGVtZW50ID0gKFNFUklBTElaQUJMRVhB Q1QgKikgKChjaGFyICopIFByZWRYYWN0ICsgUHJlZFhhY3RMaXN0RGF0YVNpemUpOworCQlQ cmVkWGFjdC0+ZWxlbWVudAorCQkJPSAoU0VSSUFMSVpBQkxFWEFDVCAqKSAoKGNoYXIgKikg UHJlZFhhY3QgKyBQcmVkWGFjdExpc3REYXRhU2l6ZSk7CiAJCS8qIEFkZCBhbGwgZWxlbWVu dHMgdG8gYXZhaWxhYmxlIGxpc3QsIGNsZWFuLiAqLwogCQlmb3IgKGkgPSAwOyBpIDwgbWF4 X3RhYmxlX3NpemU7IGkrKykKIAkJewpAQCAtMTMwMiw5ICsxMzA0LDEwIEBAIFByZWRpY2F0 ZUxvY2tTaG1lbUluaXQodm9pZCkKIAkgKiBwcm9iYWJseSBPSy4KIAkgKi8KIAltYXhfdGFi bGVfc2l6ZSAqPSA1OworCiAJcmVxdWVzdFNpemUgPSBSV0NvbmZsaWN0UG9vbEhlYWRlckRh dGFTaXplICsKLQkJCQkJbXVsX3NpemUoKFNpemUpIG1heF90YWJsZV9zaXplLAotCQkJCQkJ CSBSV0NvbmZsaWN0RGF0YVNpemUpOworCQltdWxfc2l6ZSgoU2l6ZSkgbWF4X3RhYmxlX3Np emUsCisJCQkJIFJXQ29uZmxpY3REYXRhU2l6ZSk7CiAKIAlSV0NvbmZsaWN0UG9vbCA9IFNo bWVtSW5pdFN0cnVjdCgiUldDb25mbGljdFBvb2wiLAogCQkJCQkJCQkJIHJlcXVlc3RTaXpl LApAQCAtMTMxOSw3ICsxMzIyLDcgQEAgUHJlZGljYXRlTG9ja1NobWVtSW5pdCh2b2lkKQog CiAJCWRsaXN0X2luaXQoJlJXQ29uZmxpY3RQb29sLT5hdmFpbGFibGVMaXN0KTsKIAkJUldD b25mbGljdFBvb2wtPmVsZW1lbnQgPSAoUldDb25mbGljdCkgKChjaGFyICopIFJXQ29uZmxp Y3RQb29sICsKLQkJCVJXQ29uZmxpY3RQb29sSGVhZGVyRGF0YVNpemUpOworCQkJCQkJCQkJ CQkJUldDb25mbGljdFBvb2xIZWFkZXJEYXRhU2l6ZSk7CiAJCS8qIEFkZCBhbGwgZWxlbWVu dHMgdG8gYXZhaWxhYmxlIGxpc3QsIGNsZWFuLiAqLwogCQlmb3IgKGkgPSAwOyBpIDwgbWF4 X3RhYmxlX3NpemU7IGkrKykKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9sbWdyL3Byb2MuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXgg NmVlNDg0MTBiODQuLmMwOGUzYmIzZDU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvcHJvYy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMK QEAgLTEyNCwyMCArMTI0LDIxIEBAIFByb2NHbG9iYWxTaG1lbVNpemUodm9pZCkKIH0KIAog LyoKLSAqIHJldmlldzogYWRkIGNvbW1lbnQsIGV4cGxhaW5pbmcgdGhlIFBHX0NBQ0hFX0xJ TkVfU0laRSB0aGluZwotICogcmV2aWV3OiBJJ2QgZXZlbiBtYXliZSBzcGxpdCB0aGUgUEdf Q0FDSEVfTElORV9TSVpFIHRoaW5nIGludG8KLSAqIGEgc2VwYXJhdGUgY29tbWl0LCBub3Qg dG8gbWl4IGl0IHdpdGggdGhlICJtb25pdG9yaW5nIGltcHJvdmVtZW50IgorICogUmVwb3J0 IHNoYXJlZC1tZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IFBHUFJPQy4KICAqLwogc3RhdGljIFNp emUKIFBHUHJvY1NobWVtU2l6ZSh2b2lkKQogewogCVNpemUJCXNpemU7Ci0JdWludDMyCQlU b3RhbFByb2NzID0gTWF4QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZX1BST0NTICsgbWF4X3By ZXBhcmVkX3hhY3RzOworCXVpbnQzMgkJVG90YWxQcm9jczsKKworCVRvdGFsUHJvY3MgPSBN YXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllfUFJPQ1MgKyBtYXhfcHJlcGFyZWRfeGFjdHM7 CiAKIAlzaXplID0gVG90YWxQcm9jcyAqIHNpemVvZihQR1BST0MpOwogCXNpemUgPSBhZGRf c2l6ZShzaXplLCBUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT54aWRzKSk7CiAJ c2l6ZSA9IGFkZF9zaXplKHNpemUsIFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwt PnN1YnhpZFN0YXRlcykpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBUb3RhbFByb2NzICog c2l6ZW9mKCpQcm9jR2xvYmFsLT5zdGF0dXNGbGFncykpOworCiAJcmV0dXJuIHNpemU7CiB9 CiAKQEAgLTIyNywxMSArMjI4LDExIEBAIEluaXRQcm9jR2xvYmFsKHZvaWQpCiAJcmVxdWVz dFNpemUgPSBQR1Byb2NTaG1lbVNpemUoKTsKIAogCXB0ciA9IFNobWVtSW5pdFN0cnVjdCgi UEdQUk9DIHN0cnVjdHVyZXMiLAotCQkJCQkJCQkJICAgcmVxdWVzdFNpemUsCi0JCQkJCQkJ CQkgICAmZm91bmQpOworCQkJCQkJICByZXF1ZXN0U2l6ZSwKKwkJCQkJCSAgJmZvdW5kKTsK IAogCXByb2NzID0gKFBHUFJPQyAqKSBwdHI7Ci0JcHRyID0gKGNoYXIgKilwdHIgKyBUb3Rh bFByb2NzICogc2l6ZW9mKFBHUFJPQyk7CisJcHRyID0gKGNoYXIgKikgcHRyICsgVG90YWxQ cm9jcyAqIHNpemVvZihQR1BST0MpOwogCiAJTWVtU2V0KHByb2NzLCAwLCBUb3RhbFByb2Nz ICogc2l6ZW9mKFBHUFJPQykpOwogCVByb2NHbG9iYWwtPmFsbFByb2NzID0gcHJvY3M7CkBA IC0yNDQsMTUgKzI0NSwxNSBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCSAqLwogCVByb2NH bG9iYWwtPnhpZHMgPSAoVHJhbnNhY3Rpb25JZCAqKSBwdHI7CiAJTWVtU2V0KFByb2NHbG9i YWwtPnhpZHMsIDAsIFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnhpZHMpKTsK LQlwdHIgPSAoY2hhciAqKXB0ciArIChUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFs LT54aWRzKSk7CisJcHRyID0gKGNoYXIgKikgcHRyICsgKFRvdGFsUHJvY3MgKiBzaXplb2Yo KlByb2NHbG9iYWwtPnhpZHMpKTsKIAogCVByb2NHbG9iYWwtPnN1YnhpZFN0YXRlcyA9IChY aWRDYWNoZVN0YXR1cyAqKSBwdHI7CiAJTWVtU2V0KFByb2NHbG9iYWwtPnN1YnhpZFN0YXRl cywgMCwgVG90YWxQcm9jcyAqIHNpemVvZigqUHJvY0dsb2JhbC0+c3VieGlkU3RhdGVzKSk7 Ci0JcHRyID0gKGNoYXIgKilwdHIgKyAoVG90YWxQcm9jcyAqIHNpemVvZigqUHJvY0dsb2Jh bC0+c3VieGlkU3RhdGVzKSk7CisJcHRyID0gKGNoYXIgKikgcHRyICsgKFRvdGFsUHJvY3Mg KiBzaXplb2YoKlByb2NHbG9iYWwtPnN1YnhpZFN0YXRlcykpOwogCiAJUHJvY0dsb2JhbC0+ c3RhdHVzRmxhZ3MgPSAodWludDggKikgcHRyOwogCU1lbVNldChQcm9jR2xvYmFsLT5zdGF0 dXNGbGFncywgMCwgVG90YWxQcm9jcyAqIHNpemVvZigqUHJvY0dsb2JhbC0+c3RhdHVzRmxh Z3MpKTsKLQlwdHIgPSAoY2hhciAqKXB0ciArIChUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9j R2xvYmFsLT5zdGF0dXNGbGFncykpOworCXB0ciA9IChjaGFyICopIHB0ciArIChUb3RhbFBy b2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdGF0dXNGbGFncykpOwogCiAJLyogbWFrZSBz dXJlIHdlciBkaWRuJ3Qgb3ZlcmZsb3cgKi8KIAlBc3NlcnQoKHB0ciA+IChjaGFyICopIHBy b2NzKSAmJiAocHRyIDw9IChjaGFyICopIHByb2NzICsgcmVxdWVzdFNpemUpKTsKLS0gCjIu NDkuMAoK --------------eAs3MTPG5ycztqDaCyrXnZxm Content-Type: text/x-patch; charset=UTF-8; name="v6-0006-Add-cacheline-padding-between-heavily-accessed-ar.patch" Content-Disposition: attachment; filename*0="v6-0006-Add-cacheline-padding-between-heavily-accessed-ar.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyYTI2NmM2MTE1ZGNhNmFkMzJmN2RiYjEzNmI2M2NmOGQyNzg1MDRkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVGh1LCAyNyBNYXIgMjAyNSAyMToyMzowNSArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djYgNi83XSBBZGQgY2FjaGVsaW5lIHBhZGRpbmcgYmV0d2VlbiBoZWF2aWx5IGFjY2Vzc2Vk IGFycmF5cwoKLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jIHwgOSArKysr KystLS0KIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXggYzA4ZTNiYjNkNTYuLjZlMGZjNmEw OGU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTEzNSw4ICsxMzUsMTEgQEAg UEdQcm9jU2htZW1TaXplKHZvaWQpCiAJVG90YWxQcm9jcyA9IE1heEJhY2tlbmRzICsgTlVN X0FVWElMSUFSWV9QUk9DUyArIG1heF9wcmVwYXJlZF94YWN0czsKIAogCXNpemUgPSBUb3Rh bFByb2NzICogc2l6ZW9mKFBHUFJPQyk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFBHX0NB Q0hFX0xJTkVfU0laRSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFRvdGFsUHJvY3MgKiBz aXplb2YoKlByb2NHbG9iYWwtPnhpZHMpKTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgUEdf Q0FDSEVfTElORV9TSVpFKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgVG90YWxQcm9jcyAq IHNpemVvZigqUHJvY0dsb2JhbC0+c3VieGlkU3RhdGVzKSk7CisJc2l6ZSA9IGFkZF9zaXpl KHNpemUsIFBHX0NBQ0hFX0xJTkVfU0laRSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFRv dGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzKSk7CiAKIAlyZXR1 cm4gc2l6ZTsKQEAgLTIzMiw3ICsyMzUsNyBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCQkJ CQkJICAmZm91bmQpOwogCiAJcHJvY3MgPSAoUEdQUk9DICopIHB0cjsKLQlwdHIgPSAoY2hh ciAqKSBwdHIgKyBUb3RhbFByb2NzICogc2l6ZW9mKFBHUFJPQyk7CisJcHRyID0gKGNoYXIg KikgcHRyICsgVG90YWxQcm9jcyAqIHNpemVvZihQR1BST0MpICsgUEdfQ0FDSEVfTElORV9T SVpFOwogCiAJTWVtU2V0KHByb2NzLCAwLCBUb3RhbFByb2NzICogc2l6ZW9mKFBHUFJPQykp OwogCVByb2NHbG9iYWwtPmFsbFByb2NzID0gcHJvY3M7CkBAIC0yNDUsMTEgKzI0OCwxMSBA QCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCSAqLwogCVByb2NHbG9iYWwtPnhpZHMgPSAoVHJh bnNhY3Rpb25JZCAqKSBwdHI7CiAJTWVtU2V0KFByb2NHbG9iYWwtPnhpZHMsIDAsIFRvdGFs UHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnhpZHMpKTsKLQlwdHIgPSAoY2hhciAqKSBw dHIgKyAoVG90YWxQcm9jcyAqIHNpemVvZigqUHJvY0dsb2JhbC0+eGlkcykpOworCXB0ciA9 IChjaGFyICopIHB0ciArIFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnhpZHMp ICsgUEdfQ0FDSEVfTElORV9TSVpFOwogCiAJUHJvY0dsb2JhbC0+c3VieGlkU3RhdGVzID0g KFhpZENhY2hlU3RhdHVzICopIHB0cjsKIAlNZW1TZXQoUHJvY0dsb2JhbC0+c3VieGlkU3Rh dGVzLCAwLCBUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMp KTsKLQlwdHIgPSAoY2hhciAqKSBwdHIgKyAoVG90YWxQcm9jcyAqIHNpemVvZigqUHJvY0ds b2JhbC0+c3VieGlkU3RhdGVzKSk7CisJcHRyID0gKGNoYXIgKikgcHRyICsgKFRvdGFsUHJv Y3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnN1YnhpZFN0YXRlcykpICsgUEdfQ0FDSEVfTElO RV9TSVpFOwogCiAJUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3MgPSAodWludDggKikgcHRyOwog CU1lbVNldChQcm9jR2xvYmFsLT5zdGF0dXNGbGFncywgMCwgVG90YWxQcm9jcyAqIHNpemVv ZigqUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3MpKTsKLS0gCjIuNDkuMAoK --------------eAs3MTPG5ycztqDaCyrXnZxm Content-Type: text/x-patch; charset=UTF-8; name="v6-0007-review.patch" Content-Disposition: attachment; filename="v6-0007-review.patch" Content-Transfer-Encoding: base64 RnJvbSA4Zjc0ZTI3MTE4Y2M2OGM1MzQ4ZGVmMzRjZmRhODE0Y2E4NDZkYjQ5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVGh1LCAyNyBNYXIgMjAyNSAyMjowMzoyMyArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djYgNy83XSByZXZpZXcKCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyB8 IDE1ICsrKysrKy0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwg OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3Iv cHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwppbmRleCA2ZTBmYzZh MDhlNi4uNTc1NzU0NWRlZmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1n ci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwpAQCAtMTM0 LDEyICsxMzQsOSBAQCBQR1Byb2NTaG1lbVNpemUodm9pZCkKIAogCVRvdGFsUHJvY3MgPSBN YXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllfUFJPQ1MgKyBtYXhfcHJlcGFyZWRfeGFjdHM7 CiAKLQlzaXplID0gVG90YWxQcm9jcyAqIHNpemVvZihQR1BST0MpOwotCXNpemUgPSBhZGRf c2l6ZShzaXplLCBQR19DQUNIRV9MSU5FX1NJWkUpOwotCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT54aWRzKSk7Ci0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsIFBHX0NBQ0hFX0xJTkVfU0laRSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnN1YnhpZFN0YXRlcykpOwot CXNpemUgPSBhZGRfc2l6ZShzaXplLCBQR19DQUNIRV9MSU5FX1NJWkUpOworCXNpemUgPSBD QUNIRUxJTkVBTElHTihUb3RhbFByb2NzICogc2l6ZW9mKFBHUFJPQykpOworCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBDQUNIRUxJTkVBTElHTihUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9j R2xvYmFsLT54aWRzKSkpOworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBDQUNIRUxJTkVBTElH TihUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMpKSk7CiAJ c2l6ZSA9IGFkZF9zaXplKHNpemUsIFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwt PnN0YXR1c0ZsYWdzKSk7CiAKIAlyZXR1cm4gc2l6ZTsKQEAgLTIzNSw3ICsyMzIsNyBAQCBJ bml0UHJvY0dsb2JhbCh2b2lkKQogCQkJCQkJICAmZm91bmQpOwogCiAJcHJvY3MgPSAoUEdQ Uk9DICopIHB0cjsKLQlwdHIgPSAoY2hhciAqKSBwdHIgKyBUb3RhbFByb2NzICogc2l6ZW9m KFBHUFJPQykgKyBQR19DQUNIRV9MSU5FX1NJWkU7CisJcHRyID0gKGNoYXIgKikgcHRyICsg Q0FDSEVMSU5FQUxJR04oVG90YWxQcm9jcyAqIHNpemVvZihQR1BST0MpKTsKIAogCU1lbVNl dChwcm9jcywgMCwgVG90YWxQcm9jcyAqIHNpemVvZihQR1BST0MpKTsKIAlQcm9jR2xvYmFs LT5hbGxQcm9jcyA9IHByb2NzOwpAQCAtMjQ4LDExICsyNDUsMTEgQEAgSW5pdFByb2NHbG9i YWwodm9pZCkKIAkgKi8KIAlQcm9jR2xvYmFsLT54aWRzID0gKFRyYW5zYWN0aW9uSWQgKikg cHRyOwogCU1lbVNldChQcm9jR2xvYmFsLT54aWRzLCAwLCBUb3RhbFByb2NzICogc2l6ZW9m KCpQcm9jR2xvYmFsLT54aWRzKSk7Ci0JcHRyID0gKGNoYXIgKikgcHRyICsgVG90YWxQcm9j cyAqIHNpemVvZigqUHJvY0dsb2JhbC0+eGlkcykgKyBQR19DQUNIRV9MSU5FX1NJWkU7CisJ cHRyID0gKGNoYXIgKikgcHRyICsgQ0FDSEVMSU5FQUxJR04oVG90YWxQcm9jcyAqIHNpemVv ZigqUHJvY0dsb2JhbC0+eGlkcykpOwogCiAJUHJvY0dsb2JhbC0+c3VieGlkU3RhdGVzID0g KFhpZENhY2hlU3RhdHVzICopIHB0cjsKIAlNZW1TZXQoUHJvY0dsb2JhbC0+c3VieGlkU3Rh dGVzLCAwLCBUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMp KTsKLQlwdHIgPSAoY2hhciAqKSBwdHIgKyAoVG90YWxQcm9jcyAqIHNpemVvZigqUHJvY0ds b2JhbC0+c3VieGlkU3RhdGVzKSkgKyBQR19DQUNIRV9MSU5FX1NJWkU7CisJcHRyID0gKGNo YXIgKikgcHRyICsgQ0FDSEVMSU5FQUxJR04oVG90YWxQcm9jcyAqIHNpemVvZigqUHJvY0ds b2JhbC0+c3VieGlkU3RhdGVzKSk7CiAKIAlQcm9jR2xvYmFsLT5zdGF0dXNGbGFncyA9ICh1 aW50OCAqKSBwdHI7CiAJTWVtU2V0KFByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzLCAwLCBUb3Rh bFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdGF0dXNGbGFncykpOwotLSAKMi40OS4w Cgo= --------------eAs3MTPG5ycztqDaCyrXnZxm--