Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vl97B-007ins-0E for pgsql-hackers@arkaria.postgresql.org; Wed, 28 Jan 2026 17:14:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vl97A-002cvQ-0R for pgsql-hackers@arkaria.postgresql.org; Wed, 28 Jan 2026 17:14:00 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vl978-002cv0-2c for pgsql-hackers@lists.postgresql.org; Wed, 28 Jan 2026 17:13:59 +0000 Received: from mail-ej1-x62f.google.com ([2a00:1450:4864:20::62f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vl974-002lgG-1K for pgsql-hackers@lists.postgresql.org; Wed, 28 Jan 2026 17:13:58 +0000 Received: by mail-ej1-x62f.google.com with SMTP id a640c23a62f3a-b884ad1026cso10581666b.2 for ; Wed, 28 Jan 2026 09:13:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769620434; cv=none; d=google.com; s=arc-20240605; b=NCR+XFS45QyRaPKFM5Rtd/coKmZ+H6U09U7nZqia6EsALbDcSMGZSMhl/mWUESdWdp GUkDyirQmat7wUIOOtd67/fzPn8Lj/kLByz5teNAXQWdMop/XdA9h3Et7ioWadhkQOSh n9wE36oOMyWk8XGWrnkmFpUCd4r5WuHJ3jH99nw9PQDcuoRl1wrnq2JkQuPsKwYJfo6u 3HZ4QPAR/tl6GQLqcSgAsoNGRfsW0nQwQb4hPSFxi+ns4GTnSEGWcTYD5hdQ9Nb0+S6P vgLyjhTCwRFy+a9lDEfAc7EUDT3ph5d/0153yAusn4xUtC02P/Y2qDhaU0tIzq5+kHj3 wKdw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=7cvRofwfUjJdJ47pF4YOVvpsxGXqsajDauB30jCnZ4o=; fh=a01SbJWam/uTlKDG6+UuhLjwZzpBcLIUzSWLHTpLMa4=; b=ZEYhHsf4HX70Njg1t6pPtKHrOXj7PokFRGDVbg7XPGsjegIrPc8X4TQR6bmCDYQ70R a9/Pa085gENbVenZu9khmNEgLtWOtbQ6r7kixNX7LIS2IS/aZAsjWUS4EZzfoyz1q+NS AILWDTOw70ThWT+RlINQzs5TbIQAF6Li2ZYLmaiVG0cukr3ecwf7qYq514ZfyE83IeVc +gr20U9pwrZNiiuQIBjksMXxSCNnvtVlzgdC3Jur0TaERj5EixEUTYDGEBkGMGvOWs1R 9ZPHOKVqozEt1gMYDsBg/acUodFg4tnDkU3RoT7M8PKkcRRqdELidZsyTHY2+t1wNIk9 6k5g==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769620434; x=1770225234; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=7cvRofwfUjJdJ47pF4YOVvpsxGXqsajDauB30jCnZ4o=; b=Voathj1BsDqYcA0ShPfQozUj445pY1otNmxmey95Rvhpb77uVYX0ctAu0mEoJtXxiV E52PfCTSXABoppyKVv2E1Wl5lxNCRIYnOdxzZiMuaBdJCqmfjvTwd+dZLW3LrJkL7ad3 v3PhFRYfoA5bs2KrLYexDqDAEPlxx0gfecAvhm+wzRwnAlfTYEaxTs4ItRooW6+GCD1Q o6W8H/9kCZESGCKUFCxhFKlCdOjdxrRbPgaf+E9AInyRzZViybmwSXg+sLF/qKKNadTU 5CWMuOgVGTQBd/QY2CqANRe0iZiMJI0NFantvYNTQHk42te2e6S4q1YebJvaRjAj8F1k blKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769620434; x=1770225234; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=7cvRofwfUjJdJ47pF4YOVvpsxGXqsajDauB30jCnZ4o=; b=n7KvNxV7pyG4GAWPTJjfbEZRWUzWL8kScgKTSUzAy+a8cR2ZhZr2987gMBzMK6MLYV KGP6gDGgxVDop9zmM2+n2cyqeH4JOy/p3sv+z2ulh+CdrzMWC4VPjVNmbUWksPHGWeWh h/bxNll5EXjIOzbNnn9PP24SEDSO77YO/bqJ3skcaj0+ooppQhPqKUD0du2HBUl6IDKl tfjiTirjRDfl9xut44dZ8Y2VOsRorblIowGrs+ohhzARyqpPcA7H7J/pDWU0KFdIJxL4 2e9cflujrcAedmqf4/xQbVZQCgpJAN8zH4AFM3lfbBeEN8hcMCCF23HwboM0qRtFqlr/ RcCg== X-Forwarded-Encrypted: i=1; AJvYcCVJ8Yq6zY5HUnOoZH1VjVjeo0K/rr5TZ1WD62fd6sJXRYd7JS+7RjL1ngOpeoHdB1hvJNBImFf1RRO5CpKN@lists.postgresql.org X-Gm-Message-State: AOJu0Yz1Y4NLbvoilVZkQ6hmoEfXB4JtwZU7o33BtqA0WUKvH/i7HS7m zoIzE00aTK7u4P7trUvVMuXytm35YZQex5JAriXCZIxLjMfk1NT6z2mxXaVyvLzew4pkeOXJsf4 JvavUjYenVE0DNqD50vflhEcoy/W9IjU= X-Gm-Gg: AZuq6aK1Fj5rYvwnglcjhYvkk0W2e0pCsvzF72ZOwUKDYvD0W2cZ2MgSyPOzB/mdRgA kAPhj6o2JWSy+4usZL9bwoiNpfwx32F3TA/8bXN35jf9Fwy+9M8jiVvX4idXktbUcnV1Ga+O+F5 xMZtr02YwTSCVQvxw8PIvxwKasJL5A/7QsNJxhEG85r1kXTMzI1Y2abKsVtjhoz/S1SbYRNb3Fc 7x4QcWLfXhv8IxVYTkUtjYmTQSGcJXjJsWpvqlxPGffhgi9PyUueevendp/17HuSDtMQemS3V9I RY8a3a7Lhlov9S3SWiJxZkB/FhM= X-Received: by 2002:a17:907:94d0:b0:b89:fa52:4f98 with SMTP id a640c23a62f3a-b8dab194641mr378931766b.23.1769620433320; Wed, 28 Jan 2026 09:13:53 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Robert Haas Date: Wed, 28 Jan 2026 12:13:39 -0500 X-Gm-Features: AZwV_QjcoTj6oFTTgKh9r1ouC6YyOOqGIkBpCuEthIoPEMM114UOBOf4zfieP3Y Message-ID: Subject: Re: pg_plan_advice To: Lukas Fittl Cc: Jacob Champion , Dian Fay , Matheus Alcantara , Jakub Wartak , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000511f07064975dd6d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000511f07064975dd6d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Jan 12, 2026 at 12:13=E2=80=AFPM Robert Haas wrote: > If not, I'll rearrange > the series to move 0004 to the front, and plan to commit that first. That rearrangement got done in v11, and I've now committed that patch after fixing a few typos that I found. Cautiously, woohoo, but let's see if anything breaks. Here's v13. Aside from dropping the now-committed patch, the other big change here is that I've fixed the way bitmap heap scans work by reducing scope. Previously, you could write things like BITMAP_HEAP_SCAN(foo some_foo_idx) or BITMAP_HEAP_SCAN(foo &&(foo_a_idx foo_b_idx)) to try to compel a particular choice of index with a bitmap heap scan; however, it didn't actually work. I've now removed that, and now all of the arguments to BITMAP_HEAP_SCAN() are relation identifiers, and it specifies only that they should use some kind of bitmap heap scan. I'm not sure that this is the right thing to do, but it might be, for a couple of reasons: 1. The decision as to what should be included in a bitmap path is not made by the general costing machinery, but by choose_bitmap_and(), which uses its own special algorithm. A general principle of pg_plan_advice is that it doesn't let you force the optimizer to consider options that are rejected for reasons other than cost. This is a grey area. choose_bitmap_and() considers cost, but it also has other heuristics to limit the search space. We could allow overriding the former part of the heuristic but not the latter, but that seems complicated, and might also make this whole thing even more confusing to use, since it would be really unclear why you could force some index combinations and not others. We could also allow forcing any combination, but that needs a lot of thought, since it deviates from the general design principle and might open a king-sized can of worms. Point being, the idea that BITMAP_HEAP_SCAN() has no business allowing an index specification in the first place is not completely without merit. 2. The only situations in which we consider multiple actual bitmap paths (vs. potential bitmap paths, as discussed in the previous point) is when there are possibly-useful parameterizations that we don't want to ignore. However, I studied what happens in the core regression tests, and it seems like we don't really have that many test cases where just forcing some kind of bitmap heap scan wouldn't be good enough. To use a parameterized bitmap heap scan path, we have to be under the inner side of a nested loop with the parameterized rel on the other side, so if the advice produces any other join order or join method, then the parameterized paths won't even be considered and there's only one path to choose from. However, it is true that we might make the wrong decision about which bitmap path to use on the inner side of a parameterized nested loop. In the future, that could be addressed either by adding control over choice of parameterization or by re-adding something like what I had in earlier patch versions where you can specify particular indexes. But. I don't think we need to decide right now which of those things we might ultimately want to do. (Another interesting point is that in a healthy number of cases where we consider both parameterized and unparameterized bitmap paths, we consider the same indexes or sets of indexes in both cases.) I've gone ahead and removed the "WIP" designation from the pg_plan_advice patch in this version. There are still a few areas that need some more investigation, and I'm sure there are still bugs, but I feel like the bitmap scan thing was the last really big area where there was a huge problem staring any potential reviewer right in the face. The remaining XXX comments are things where review comments would actually be pretty helpful -- not to tell me that I have an XXX comment, but to suggest what the resolution might be. Of course, I'll continue looking into that on my own, as well. Thanks to all who have reviewed so far, and please keep it coming. I am especially in need of more code review at this point. --=20 Robert Haas EDB: http://www.enterprisedb.com --000000000000511f07064975dd6d Content-Type: application/octet-stream; name="v13-0001-Store-information-about-range-table-flattening-i.patch" Content-Disposition: attachment; filename="v13-0001-Store-information-about-range-table-flattening-i.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkya5jae0 RnJvbSBjYTVmM2I4YTBlNGFhMGExNzk1MjE0ZDQzNWFhNjliMGFhZTBjZTQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTI6MDA6MTggLTA0MDAKU3ViamVjdDogW1BBVENIIHYxMyAx LzVdIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHJhbmdlLXRhYmxlIGZsYXR0ZW5pbmcgaW4gdGhl CiBmaW5hbCBwbGFuLgoKU3VwcG9zZSB0aGF0IHdlJ3JlIGN1cnJlbnRseSBwbGFubmluZyBhIHF1 ZXJ5IGFuZCwgd2hlbiB0aGF0IHNhbWUKcXVlcnkgd2FzIHByZXZpb3VzbHkgcGxhbm5lZCBhbmQg ZXhlY3V0ZWQsIHdlIGxlYXJuZWQgc29tZXRoaW5nIGFib3V0CmhvdyBhIGNlcnRhaW4gdGFibGUg d2l0aGluIHRoYXQgcXVlcnkgc2hvdWxkIGJlIHBsYW5uZWQuIFdlIHdhbnQgdG8KdGFrZSBub3Rl IHdoZW4gdGhhdCBzYW1lIHRhYmxlIGlzIGJlaW5nIHBsYW5uZWQgZHVyaW5nIHRoZSBjdXJyZW50 CnBsYW5uaW5nIGN5Y2xlLCBidXQgdGhpcyBpcyBkaWZmaWN1bHQgdG8gZG8sIGJlY2F1c2UgdGhl IFJUSSBvZiB0aGUKdGFibGUgZnJvbSB0aGUgcHJldmlvdXMgcGxhbiB3b24ndCBuZWNlc3Nhcmls eSBiZSBlcXVhbCB0byB0aGUgUlRJCnRoYXQgd2Ugc2VlIGR1cmluZyB0aGUgY3VycmVudCBwbGFu bmluZyBjeWNsZS4gVGhpcyBpcyBiZWNhdXNlIGVhY2gKc3VicXVlcnkgaGFzIGEgc2VwYXJhdGUg cmFuZ2UgdGFibGUgZHVyaW5nIHBsYW5uaW5nLCBidXQgdGhlc2UgYXJlCmZsYXR0ZW5lZCBpbnRv IG9uZSByYW5nZSB0YWJsZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgZmluYWwgcGxhbiwKY2hhbmdp bmcgUlRJcy4KCkNvbW1pdCA4YzQ5YTQ4NGU4ZWJiMDE5OWZiYTRiZDY4ZWFhZWRhZjQ5YjQ4ZWQw IGFsbG93cyB1cyB0byBtYXRjaCB1cApzdWJxdWVyaWVzIHNlZW4gaW4gdGhlIHByZXZpb3VzIHBs YW5uaW5nIGN5Y2xlcyB3aXRoIHRoZSBzdWJxdWVyaWVzCmN1cnJlbnRseSBiZWluZyBwbGFubmVk IGp1c3QgYnkgY29tcGFyaW5nIHRleHR1YWwgbmFtZXMsIGJ1dCB0aGF0J3MKbm90IHF1aXRlIGVu b3VnaCB0byBsZXQgdXMgZGVkdWNlIGFueXRoaW5nIGFib3V0IGluZGl2aWR1YWwgdGFibGVzLApi ZWNhdXNlIHdlIGRvbid0IGtub3cgd2hlcmUgZWFjaCBzdWJxdWVyeSdzIHJhbmdlIHRhYmxlIGFw cGVhcnMgaW4KdGhlIGZpbmFsLCBmbGF0dGVuZWQgcmFuZ2UgdGFibGUuCgpUbyBmaXggdGhhdCwg c3RvcmUgYSBsaXN0IG9mIFN1YlBsYW5SVEluZm8gb2JqZWN0cyBpbiB0aGUgZmluYWwKcGxhbm5l ZCBzdGF0ZW1lbnQsIGVhY2ggaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBzdWJwbGFuLCB0aGUg b2Zmc2V0CmF0IHdoaWNoIGl0IGJlZ2lucyBpbiB0aGUgZmxhdHRlbmVkIHJhbmdlIHRhYmxlLCBh bmQgd2hldGhlciBvciBub3QKaXQgd2FzIGEgZHVtbXkgc3VicGxhbiAtLSBpZiBpdCB3YXMsIHNv bWUgUlRJcyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQKZnJvbSB0aGUgZmluYWwgcmFuZ2UgdGFibGUs IGJ1dCBhbHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBjb250cm9sIGhvdwphIGR1bW15IHN1YnF1ZXJ5 IGdldHMgcGxhbm5lZC4gVGhlIHRvcGxldmVsIHN1YnF1ZXJ5IGhhcyBubyBuYW1lIGFuZAphbHdh eXMgYmVnaW5zIGF0IHJ0b2Zmc2V0IDAsIHNvIHdlIG1ha2Ugbm8gZW50cnkgZm9yIGl0LgoKVGhp cyBjb21taXQgdGVhY2hlcyBwZ19vdmVyZXhwbGFpbidzIFJBTkdFX1RBQkxFIG9wdGlvbiB0byBt YWtlIHVzZQpvZiB0aGlzIG5ldyBkYXRhIHRvIGRpc3BsYXkgdGhlIHN1YnF1ZXJ5IG5hbWUgZm9y IGVhY2ggcmFuZ2UgdGFibGUKZW50cnkuCgpSZXZpZXdlZC1ieTogTHVrYXMgRml0dGwgPGx1a2Fz QGZpdHRsLmNvbT4KUmV2aWV3ZWQtYnk6IEpha3ViIFdhcnRhayA8amFrdWIud2FydGFrQGVudGVy cHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KUmV2aWV3 ZWQtYnk6IEphY29iIENoYW1waW9uIDxqYWNvYi5jaGFtcGlvbkBlbnRlcnByaXNlZGIuY29tPgpS ZXZpZXdlZC1ieTogQW1pdCBMYW5nb3RlIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KUmV2aWV3 ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRw Oi8vcG9zdGdyLmVzL20vQ0ErVGdtb1otSmgxVDZReVdvQ09ETVZRZGhUVVBZa2Faald6dHpQMUVu ND1aSG9LUHp3QG1haWwuZ21haWwuY29tCi0tLQogY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19v dmVyZXhwbGFpbi5jIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jICAgIHwgMjAgKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oICAgICAgICAgICB8ICAzICsrKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmggICAgICAgICAgIHwgMTcgKysrKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgfCAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMo KykKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg Yi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKaW5kZXggMzE2ZmZkMWM4 N2YuLmJmOGM3NjhlZDQ3IDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMKKysrIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5j CkBAIC0zOTUsNiArMzk1LDggQEAgc3RhdGljIHZvaWQKIG92ZXJleHBsYWluX3JhbmdlX3RhYmxl KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgRXhwbGFpblN0YXRlICplcykKIHsKIAlJbmRleAkJ cnRpOworCUxpc3RDZWxsICAgKmxjX3N1YnJ0aW5mbyA9IGxpc3RfaGVhZChwbGFubmVkc3RtdC0+ c3VicnRpbmZvcyk7CisJU3ViUGxhblJUSW5mbyAqcnRpbmZvID0gTlVMTDsKIAogCS8qIE9wZW4g Z3JvdXAsIG9uZSBlbnRyeSBwZXIgUmFuZ2VUYmxFbnRyeSAqLwogCUV4cGxhaW5PcGVuR3JvdXAo IlJhbmdlIFRhYmxlIiwgIlJhbmdlIFRhYmxlIiwgZmFsc2UsIGVzKTsKQEAgLTQwNSw2ICs0MDcs MTggQEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBF eHBsYWluU3RhdGUgKmVzKQogCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHBs YW5uZWRzdG10LT5ydGFibGUpOwogCQljaGFyCSAgICpraW5kID0gTlVMTDsKIAkJY2hhcgkgICAq cmVsa2luZDsKKwkJU3ViUGxhblJUSW5mbyAqbmV4dF9ydGluZm87CisKKwkJLyogQWR2YW5jZSB0 byBuZXh0IFN1YlJUSW5mbywgaWYgaXQncyB0aW1lLiAqLworCQlpZiAobGNfc3VicnRpbmZvICE9 IE5VTEwpCisJCXsKKwkJCW5leHRfcnRpbmZvID0gbGZpcnN0KGxjX3N1YnJ0aW5mbyk7CisJCQlp ZiAocnRpID4gbmV4dF9ydGluZm8tPnJ0b2Zmc2V0KQorCQkJeworCQkJCXJ0aW5mbyA9IG5leHRf cnRpbmZvOworCQkJCWxjX3N1YnJ0aW5mbyA9IGxuZXh0KHBsYW5uZWRzdG10LT5zdWJydGluZm9z LCBsY19zdWJydGluZm8pOworCQkJfQorCQl9CiAKIAkJLyogTlVMTCBlbnRyaWVzIGFyZSBwb3Nz aWJsZTsgc2tpcCB0aGVtICovCiAJCWlmIChydGUgPT0gTlVMTCkKQEAgLTQ2OSw2ICs0ODMsMjgg QEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBFeHBs YWluU3RhdGUgKmVzKQogCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgiSW4gRnJvbSBDbGF1c2UiLCBy dGUtPmluRnJvbUNsLCBlcyk7CiAJCX0KIAorCQkvKgorCQkgKiBJbmRpY2F0ZSB3aGljaCBzdWJw bGFuIGlzIHRoZSBvcmlnaW4gb2Ygd2hpY2ggUlRFLiBOb3RlIGR1bW15CisJCSAqIHN1YnBsYW5z LiBIZXJlIGFnYWluLCB3ZSBjcnVuY2ggbW9yZSBvbnRvIG9uZSBsaW5lIGluIHRleHQgZm9ybWF0 LgorCQkgKi8KKwkJaWYgKHJ0aW5mbyAhPSBOVUxMKQorCQl7CisJCQlpZiAoZXMtPmZvcm1hdCA9 PSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCQkJeworCQkJCWlmICghcnRpbmZvLT5kdW1teSkKKwkJ CQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3VicGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7 CisJCQkJZWxzZQorCQkJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJTdWJwbGFuIiwKKwkJCQkJCQkJ CQlwc3ByaW50ZigiJXMgKGR1bW15KSIsCisJCQkJCQkJCQkJCQkgcnRpbmZvLT5wbGFuX25hbWUp LCBlcyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3Vi cGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7CisJCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgi U3VicGxhbiBJcyBEdW1teSIsIHJ0aW5mby0+ZHVtbXksIGVzKTsKKwkJCX0KKwkJfQorCiAJCS8q IHJ0ZS0+YWxpYXMgaXMgb3B0aW9uYWw7IHJ0ZS0+ZXJlZiBpcyByZXF1ZXN0ZWQgKi8KIAkJaWYg KHJ0ZS0+YWxpYXMgIT0gTlVMTCkKIAkJCW92ZXJleHBsYWluX2FsaWFzKCJBbGlhcyIsIHJ0ZS0+ YWxpYXMsIGVzKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5u ZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCA3NTdiZGM3 YjFkZS4uMjk2ZjA5ZjBkNzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAg LTY1NCw2ICs2NTQsNyBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hh ciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPnVucHJ1bmFibGVS ZWxpZHMgPSBibXNfZGlmZmVyZW5jZShnbG9iLT5hbGxSZWxpZHMsCiAJCQkJCQkJCQkJCSAgZ2xv Yi0+cHJ1bmFibGVSZWxpZHMpOwogCXJlc3VsdC0+cGVybUluZm9zID0gZ2xvYi0+ZmluYWxydGVw ZXJtaW5mb3M7CisJcmVzdWx0LT5zdWJydGluZm9zID0gZ2xvYi0+c3VicnRpbmZvczsKIAlyZXN1 bHQtPnJlc3VsdFJlbGF0aW9ucyA9IGdsb2ItPnJlc3VsdFJlbGF0aW9uczsKIAlyZXN1bHQtPmFw cGVuZFJlbGF0aW9ucyA9IGdsb2ItPmFwcGVuZFJlbGF0aW9uczsKIAlyZXN1bHQtPnN1YnBsYW5z ID0gZ2xvYi0+c3VicGxhbnM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXgg MTZkMjAwY2ZiNDYuLmE1YjIzMTRlZjJhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVm cy5jCkBAIC0zOTksNiArMzk5LDI2IEBAIGFkZF9ydGVzX3RvX2ZsYXRfcnRhYmxlKFBsYW5uZXJJ bmZvICpyb290LCBib29sIHJlY3Vyc2luZykKIAlJbmRleAkJcnRpOwogCUxpc3RDZWxsICAgKmxj OwogCisJLyoKKwkgKiBSZWNvcmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIG1ha2UgaXQgcG9zc2li bGUgZm9yIGNvZGUgdGhhdCBsb29rcyBhdAorCSAqIHRoZSBmaW5hbCByYW5nZSB0YWJsZSB0byB1 bmRlcnN0YW5kIGhvdyBpdCB3YXMgY29uc3RydWN0ZWQuIChJZgorCSAqIGZpbmFscnRhYmxlIGlz IHN0aWxsIE5JTCwgdGhlbiB0aGlzIGlzIHRoZSB2ZXJ5IHRvcG1vc3QgUGxhbm5lckluZm8sCisJ ICogd2hpY2ggd2lsbCBhbHdheXMgaGF2ZSBwbGFuX25hbWUgPT0gTlVMTCBhbmQgcnRvZmZzZXQg PT0gMDsgd2Ugb21pdCB0aGUKKwkgKiBkZWdlbmVyYXRlIGxpc3QgZW50cnkuKQorCSAqLworCWlm IChyb290LT5nbG9iLT5maW5hbHJ0YWJsZSAhPSBOSUwpCisJeworCQlTdWJQbGFuUlRJbmZvICpy dGluZm8gPSBtYWtlTm9kZShTdWJQbGFuUlRJbmZvKTsKKworCQlydGluZm8tPnBsYW5fbmFtZSA9 IHJvb3QtPnBsYW5fbmFtZTsKKwkJcnRpbmZvLT5ydG9mZnNldCA9IGxpc3RfbGVuZ3RoKHJvb3Qt Pmdsb2ItPmZpbmFscnRhYmxlKTsKKworCQkvKiBXaGVuIHJlY3Vyc2luZyA9IHRydWUsIGl0J3Mg YW4gdW5wbGFubmVkIG9yIGR1bW15IHN1YnF1ZXJ5LiAqLworCQlydGluZm8tPmR1bW15ID0gcmVj dXJzaW5nOworCisJCXJvb3QtPmdsb2ItPnN1YnJ0aW5mb3MgPSBsYXBwZW5kKHJvb3QtPmdsb2It PnN1YnJ0aW5mb3MsIHJ0aW5mbyk7CisJfQorCiAJLyoKIAkgKiBBZGQgdGhlIHF1ZXJ5J3Mgb3du IFJURXMgdG8gdGhlIGZsYXR0ZW5lZCByYW5nZXRhYmxlLgogCSAqCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CmluZGV4IGZiODA4ODIzYWNmLi5jMWU5Mzk3NjIzYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAg LTIwOCw2ICsyMDgsOSBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogImZsYXQi IGxpc3Qgb2YgUlRFUGVybWlzc2lvbkluZm9zICovCiAJTGlzdAkgICAqZmluYWxydGVwZXJtaW5m b3M7CiAKKwkvKiBsaXN0IG9mIFN1YlBsYW5SVEluZm8gbm9kZXMgKi8KKwlMaXN0CSAgICpzdWJy dGluZm9zOworCiAJLyogImZsYXQiIGxpc3Qgb2YgUGxhblJvd01hcmtzICovCiAJTGlzdAkgICAq ZmluYWxyb3dtYXJrczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCA0YmM2ZmI1NjcwZS4uOWFl NzJhNjA3ZTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0xMzEsNiArMTMxLDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAkgKi8KIAlMaXN0CSAgICpzdWJwbGFuczsKIAorCS8qIGEg bGlzdCBvZiBTdWJQbGFuUlRJbmZvIG9iamVjdHMgKi8KKwlMaXN0CSAgICpzdWJydGluZm9zOwor CiAJLyogaW5kaWNlcyBvZiBzdWJwbGFucyB0aGF0IHJlcXVpcmUgUkVXSU5EICovCiAJQml0bWFw c2V0ICAqcmV3aW5kUGxhbklEczsKIApAQCAtMTgyMSw0ICsxODI0LDE4IEBAIHR5cGVkZWYgZW51 bSBNb25vdG9uaWNGdW5jdGlvbgogCU1PTk9UT05JQ0ZVTkNfQk9USCA9IE1PTk9UT05JQ0ZVTkNf SU5DUkVBU0lORyB8IE1PTk9UT05JQ0ZVTkNfREVDUkVBU0lORywKIH0gTW9ub3RvbmljRnVuY3Rp b247CiAKKy8qCisgKiBTdWJQbGFuUlRJbmZvCisgKgorICogSW5mb3JtYXRpb24gYWJvdXQgd2hp Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBjYW1lIGZyb20gd2hpY2ggc3VicXVlcnkKKyAqIHBsYW5u aW5nIGN5Y2xlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU3ViUGxhblJUSW5mbworeworCU5vZGVU YWcJCXR5cGU7CisJY2hhcgkgICAqcGxhbl9uYW1lOworCUluZGV4CQlydG9mZnNldDsKKwlib29s CQlkdW1teTsKK30gU3ViUGxhblJUSW5mbzsKKwogI2VuZGlmCQkJCQkJCS8qIFBMQU5OT0RFU19I ICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGRkYmU0YzY0OTcxLi4zMmExNTE0N2M1 NCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI5MjcsNiArMjkyNyw3IEBAIFN1Ykxp bmsKIFN1YkxpbmtUeXBlCiBTdWJPcHRzCiBTdWJQbGFuCitTdWJQbGFuUlRJbmZvCiBTdWJQbGFu U3RhdGUKIFN1YlJlbEluZm8KIFN1YlJlbW92ZVJlbHMKLS0gCjIuNTEuMAoK --000000000000511f07064975dd6d Content-Type: application/octet-stream; name="v13-0002-Store-information-about-elided-nodes-in-the-fina.patch" Content-Disposition: attachment; filename="v13-0002-Store-information-about-elided-nodes-in-the-fina.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkya5jaq1 RnJvbSBkNjZkNGZiOTc4MDcxN2ZhNzEyYjQ3ZDAxNTliYTlmOTdmYjgyNTNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6NDIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxMyAy LzVdIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IGVsaWRlZCBub2RlcyBpbiB0aGUgZmluYWwKIHBs YW4uCgpBbiBleHRlbnNpb24gKG9yIGNvcmUgY29kZSkgbWlnaHQgd2FudCB0byByZWNvbnN0cnVj dCB0aGUgcGxhbm5lcidzCmNob2ljZSBvZiBqb2luIG9yZGVyIGZyb20gdGhlIGZpbmFsIHBsYW4u IFRvIGRvIHNvLCBpdCBtdXN0IGJlIHBvc3NpYmxlCnRvIGZpbmQgYWxsIG9mIHRoZSBSVElzIHRo YXQgd2VyZSBwYXJ0IG9mIHRoZSBqb2luIHByb2JsZW0gaW4gdGhhdCBwbGFuLgpUaGUgcHJldmlv dXMgY29tbWl0LCB0b2dldGhlciB3aXRoIHRoZSBlYXJsaWVyIHdvcmsgaW4KOGM0OWE0ODRlOGVi YjAxOTlmYmE0YmQ2OGVhYWVkYWY0OWI0OGVkMCwgaXMgZW5vdWdoIHRvIGxldCB1cyBtYXRjaCB1 cApSVElzIHdlIHNlZSBpbiB0aGUgZmluYWwgcGxhbiB3aXRoIFJUSXMgdGhhdCB3ZSBzZWUgZHVy aW5nIHRoZSBwbGFubmluZwpjeWNsZSwgYnV0IHdlIHN0aWxsIGhhdmUgYSBwcm9ibGVtIGlmIHRo ZSBwbGFubmVyIGRlY2lkZXMgdG8gZHJvcCBzb21lClJUSXMgb3V0IG9mIHRoZSBmaW5hbCBwbGFu IGFsdG9nZXRoZXIuCgpUbyBmaXggdGhhdCwgd2hlbiBzZXRyZWZzLmMgcmVtb3ZlcyBhIFN1YnF1 ZXJ5U2Nhbiwgc2luZ2xlLWNoaWxkIEFwcGVuZCwKb3Igc2luZ2xlLWNoaWxkIE1lcmdlQXBwZW5k IGZyb20gdGhlIGZpbmFsIFBsYW4gdHJlZSwgcmVjb3JkIHRoZSB0eXBlIG9mCnRoZSByZW1vdmVk IG5vZGUgYW5kIHRoZSBSVElzIHRoYXQgdGhlIHJlbW92ZWQgbm9kZSB3b3VsZCBoYXZlIHNjYW5u ZWQKaW4gdGhlIGZpbmFsIHBsYW4gdHJlZS4gSXQgd291bGQgYmUgbmF0dXJhbCB0byByZWNvcmQg dGhpcyBpbmZvcm1hdGlvbgpvbiB0aGUgY2hpbGQgb2YgdGhlIHJlbW92ZWQgcGxhbiBub2RlLCBi dXQgdGhhdCB3b3VsZCByZXF1aXJlIGFkZGluZwphbiBhZGRpdGlvbmFsIHBvaW50ZXIgZmllbGQg dG8gdHlwZSBQbGFuLCB3aGljaCBzZWVtcyB1bmRlc2lyYWJsZS4KU28sIGluc3RlYWQsIHN0b3Jl IHRoZSBpbmZvcm1hdGlvbiBpbiBhIHNlcGFyYXRlIGxpc3QgdGhhdCB0aGUKZXhlY3V0b3IgbmVl ZCBuZXZlciBjb25zdWx0LCBhbmQgdXNlIHRoZSBwbGFuX25vZGVfaWQgdG8gaWRlbnRpZnkKdGhl IHBsYW4gbm9kZSB3aXRoIHdoaWNoIHRoZSByZW1vdmVkIG5vZGUgaXMgbG9naWNhbGx5IGFzc29j aWF0ZWQuCgpBbHNvLCB1cGRhdGUgcGdfb3ZlcmV4cGxhaW4gdG8gZGlzcGxheSB0aGVzZSBkZXRh aWxzLgoKUmV2aWV3ZWQtYnk6IEx1a2FzIEZpdHRsIDxsdWthc0BmaXR0bC5jb20+ClJldmlld2Vk LWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndhcnRha0BlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdl ZC1ieTogR3JlZyBCdXJkIDxncmVnQGJ1cmQubWU+ClJldmlld2VkLWJ5OiBKYWNvYiBDaGFtcGlv biA8amFjb2IuY2hhbXBpb25AZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IEFtaXQgTGFu Z290ZSA8YW1pdGxhbmdvdGUwOUBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBIYWlibyBZYW4gPHRy aXN0YW4ueWltQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cDovL3Bvc3Rnci5lcy9tL0NBK1Rn bW9aLUpoMVQ2UXlXb0NPRE1WUWRoVFVQWWthWmpXenR6UDFFbjQ9WkhvS1B6d0BtYWlsLmdtYWls LmNvbQotLS0KIC4uLi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgICAgICAgICAgICAgICB8 ICA0ICstCiBjb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMgICAgICAgfCAz OSArKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAg ICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jICAgICAg ICAgIHwgNTIgKysrKysrKysrKysrKysrKysrLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmggICAgICAgICAgICAgICAgIHwgIDMgKysKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5o ICAgICAgICAgICAgICAgICB8IDIwICsrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0ICAgICAgICAgICAgICB8ICAxICsKIDcgZmlsZXMgY2hhbmdlZCwgMTE3IGluc2VydGlv bnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFp bi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4 cGVjdGVkL3BnX292ZXJleHBsYWluLm91dAppbmRleCA1NWQzNDY2NmQ4Ny4uY2E5YTIzZWE2MWYg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxh aW4ub3V0CisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxh aW4ub3V0CkBAIC00NTIsNiArNDUyLDggQEAgU0VMRUNUICogRlJPTSB2ZWdldGFibGVzIFdIRVJF IGdlbnVzID0gJ2RhdWN1cyc7CiAgU2VxIFNjYW4gb24gZGF1Y3VzIHZlZ2V0YWJsZXMKICAgIEZp bHRlcjogKGdlbnVzID0gJ2RhdWN1cyc6OnRleHQpCiAgICBTY2FuIFJUSTogMgorICAgRWxpZGVk IE5vZGUgVHlwZTogQXBwZW5kCisgICBFbGlkZWQgTm9kZSBSVElzOiAxCiAgUlRJIDEgKHJlbGF0 aW9uLCBpbmhlcml0ZWQsIGluLWZyb20tY2xhdXNlKToKICAgIEVyZWY6IHZlZ2V0YWJsZXMgKGlk LCBuYW1lLCBnZW51cykKICAgIFJlbGF0aW9uOiB2ZWdldGFibGVzCkBAIC00NjUsNyArNDY3LDcg QEAgU0VMRUNUICogRlJPTSB2ZWdldGFibGVzIFdIRVJFIGdlbnVzID0gJ2RhdWN1cyc7CiAgICBS ZWxhdGlvbiBLaW5kOiByZWxhdGlvbgogICAgUmVsYXRpb24gTG9jayBNb2RlOiBBY2Nlc3NTaGFy ZUxvY2sKICBVbnBydW5hYmxlIFJUSXM6IDEgMgotKDE2IHJvd3MpCisoMTggcm93cykKIAogLS0g QWxzbyB0ZXN0IGEgY2FzZSB0aGF0IGludm9sdmVzIGEgd3JpdGUuCiBFWFBMQUlOIChSQU5HRV9U QUJMRSwgQ09TVFMgT0ZGKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19v dmVyZXhwbGFpbi5jIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCmlu ZGV4IGJmOGM3NjhlZDQ3Li5lMDE4NGJhMzE0YSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19vdmVy ZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdf b3ZlcmV4cGxhaW4uYwpAQCAtMTkxLDYgKzE5MSw4IEBAIG92ZXJleHBsYWluX3Blcl9ub2RlX2hv b2soUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkgKi8KIAlpZiAob3B0 aW9ucy0+cmFuZ2VfdGFibGUpCiAJeworCQlib29sCQlvcGVuZWRfZWxpZGVkX25vZGVzID0gZmFs c2U7CisKIAkJc3dpdGNoIChub2RlVGFnKHBsYW4pKQogCQl7CiAJCQljYXNlIFRfU2VxU2NhbjoK QEAgLTI1MSw2ICsyNTMsNDMgQEAgb3ZlcmV4cGxhaW5fcGVyX25vZGVfaG9vayhQbGFuU3RhdGUg KnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJZGVmYXVsdDoKIAkJCQlicmVhazsKIAkJ fQorCisJCWZvcmVhY2hfbm9kZShFbGlkZWROb2RlLCBuLCBlcy0+cHN0bXQtPmVsaWRlZE5vZGVz KQorCQl7CisJCQljaGFyCSAgICplbGlkZWRub2RldGFnOworCisJCQlpZiAobi0+cGxhbl9ub2Rl X2lkICE9IHBsYW4tPnBsYW5fbm9kZV9pZCkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCFvcGVu ZWRfZWxpZGVkX25vZGVzKQorCQkJeworCQkJCUV4cGxhaW5PcGVuR3JvdXAoIkVsaWRlZCBOb2Rl cyIsICJFbGlkZWQgTm9kZXMiLCBmYWxzZSwgZXMpOworCQkJCW9wZW5lZF9lbGlkZWRfbm9kZXMg PSB0cnVlOworCQkJfQorCisJCQlzd2l0Y2ggKG4tPmVsaWRlZF90eXBlKQorCQkJeworCQkJCWNh c2UgVF9BcHBlbmQ6CisJCQkJCWVsaWRlZG5vZGV0YWcgPSAiQXBwZW5kIjsKKwkJCQkJYnJlYWs7 CisJCQkJY2FzZSBUX01lcmdlQXBwZW5kOgorCQkJCQllbGlkZWRub2RldGFnID0gIk1lcmdlQXBw ZW5kIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBUX1N1YnF1ZXJ5U2NhbjoKKwkJCQkJZWxpZGVk bm9kZXRhZyA9ICJTdWJxdWVyeVNjYW4iOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJ CQllbGlkZWRub2RldGFnID0gcHNwcmludGYoIiVkIiwgbi0+ZWxpZGVkX3R5cGUpOworCQkJCQli cmVhazsKKwkJCX0KKworCQkJRXhwbGFpbk9wZW5Hcm91cCgiRWxpZGVkIE5vZGUiLCBOVUxMLCB0 cnVlLCBlcyk7CisJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJFbGlkZWQgTm9kZSBUeXBlIiwgZWxp ZGVkbm9kZXRhZywgZXMpOworCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0KCJFbGlkZWQgTm9kZSBS VElzIiwgbi0+cmVsaWRzLCBlcyk7CisJCQlFeHBsYWluQ2xvc2VHcm91cCgiRWxpZGVkIE5vZGUi LCBOVUxMLCB0cnVlLCBlcyk7CisJCX0KKwkJaWYgKG9wZW5lZF9lbGlkZWRfbm9kZXMpCisJCQlF eHBsYWluQ2xvc2VHcm91cCgiRWxpZGVkIE5vZGVzIiwgIkVsaWRlZCBOb2RlcyIsIGZhbHNlLCBl cyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFu bmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggMjk2ZjA5 ZjBkNzMuLmU4NjI3OTJlYjQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBA IC02NjUsNiArNjY1LDcgQEAgc3RhbmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNo YXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCiAJcmVzdWx0LT5wYXJhbUV4ZWNU eXBlcyA9IGdsb2ItPnBhcmFtRXhlY1R5cGVzOwogCS8qIHV0aWxpdHlTdG10IHNob3VsZCBiZSBu dWxsLCBidXQgd2UgbWlnaHQgYXMgd2VsbCBjb3B5IGl0ICovCiAJcmVzdWx0LT51dGlsaXR5U3Rt dCA9IHBhcnNlLT51dGlsaXR5U3RtdDsKKwlyZXN1bHQtPmVsaWRlZE5vZGVzID0gZ2xvYi0+ZWxp ZGVkTm9kZXM7CiAJcmVzdWx0LT5zdG10X2xvY2F0aW9uID0gcGFyc2UtPnN0bXRfbG9jYXRpb247 CiAJcmVzdWx0LT5zdG10X2xlbiA9IHBhcnNlLT5zdG10X2xlbjsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jCmluZGV4IGE1YjIzMTRlZjJhLi41YWQ2YzEzODMwYiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAtMjExLDYgKzIxMSw5IEBAIHN0YXRpYyBMaXN0 ICpzZXRfd2luZG93YWdnX3J1bmNvbmRpdGlvbl9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJCQkJCQkJICAgTGlzdCAqcnVuY29uZGl0aW9uLAogCQkJCQkJCQkJCQkJICAgUGxh biAqcGxhbik7CiAKK3N0YXRpYyB2b2lkIHJlY29yZF9lbGlkZWRfbm9kZShQbGFubmVyR2xvYmFs ICpnbG9iLCBpbnQgcGxhbl9ub2RlX2lkLAorCQkJCQkJCSAgIE5vZGVUYWcgZWxpZGVkX3R5cGUs IEJpdG1hcHNldCAqcmVsaWRzKTsKKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0x NDYwLDEwICsxNDYzLDE3IEBAIHNldF9zdWJxdWVyeXNjYW5fcmVmZXJlbmNlcyhQbGFubmVySW5m byAqcm9vdCwKIAogCWlmICh0cml2aWFsX3N1YnF1ZXJ5c2NhbihwbGFuKSkKIAl7CisJCUluZGV4 CQlzY2FucmVsaWQ7CisKIAkJLyoKIAkJICogV2UgY2FuIG9taXQgdGhlIFN1YnF1ZXJ5U2NhbiBu b2RlIGFuZCBqdXN0IHB1bGwgdXAgdGhlIHN1YnBsYW4uCiAJCSAqLwogCQlyZXN1bHQgPSBjbGVh bl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikgcGxhbiwgcGxhbi0+c3VicGxhbik7CisK KwkJLyogUmVtZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGEgU3VicXVlcnlTY2FuICovCisJCXNjYW5y ZWxpZCA9IHBsYW4tPnNjYW4uc2NhbnJlbGlkICsgcnRvZmZzZXQ7CisJCXJlY29yZF9lbGlkZWRf bm9kZShyb290LT5nbG9iLCBwbGFuLT5zdWJwbGFuLT5wbGFuX25vZGVfaWQsCisJCQkJCQkgICBU X1N1YnF1ZXJ5U2NhbiwgYm1zX21ha2Vfc2luZ2xldG9uKHNjYW5yZWxpZCkpOwogCX0KIAllbHNl CiAJewpAQCAtMTg5MSw3ICsxOTAxLDE3IEBAIHNldF9hcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVy SW5mbyAqcm9vdCwKIAkJUGxhbgkgICAqcCA9IChQbGFuICopIGxpbml0aWFsKGFwbGFuLT5hcHBl bmRwbGFucyk7CiAKIAkJaWYgKHAtPnBhcmFsbGVsX2F3YXJlID09IGFwbGFuLT5wbGFuLnBhcmFs bGVsX2F3YXJlKQotCQkJcmV0dXJuIGNsZWFuX3VwX3JlbW92ZWRfcGxhbl9sZXZlbCgoUGxhbiAq KSBhcGxhbiwgcCk7CisJCXsKKwkJCVBsYW4JICAgKnJlc3VsdDsKKworCQkJcmVzdWx0ID0gY2xl YW5fdXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIGFwbGFuLCBwKTsKKworCQkJLyogUmVt ZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGFuIEFwcGVuZCAqLworCQkJcmVjb3JkX2VsaWRlZF9ub2Rl KHJvb3QtPmdsb2IsIHAtPnBsYW5fbm9kZV9pZCwgVF9BcHBlbmQsCisJCQkJCQkJICAgb2Zmc2V0 X3JlbGlkX3NldChhcGxhbi0+YXBwcmVsaWRzLCBydG9mZnNldCkpOworCisJCQlyZXR1cm4gcmVz dWx0OworCQl9CiAJfQogCiAJLyoKQEAgLTE5NTksNyArMTk3OSwxNyBAQCBzZXRfbWVyZ2VhcHBl bmRfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAkJUGxhbgkgICAqcCA9IChQbGFuICop IGxpbml0aWFsKG1wbGFuLT5tZXJnZXBsYW5zKTsKIAogCQlpZiAocC0+cGFyYWxsZWxfYXdhcmUg PT0gbXBsYW4tPnBsYW4ucGFyYWxsZWxfYXdhcmUpCi0JCQlyZXR1cm4gY2xlYW5fdXBfcmVtb3Zl ZF9wbGFuX2xldmVsKChQbGFuICopIG1wbGFuLCBwKTsKKwkJeworCQkJUGxhbgkgICAqcmVzdWx0 OworCisJCQlyZXN1bHQgPSBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikgbXBs YW4sIHApOworCisJCQkvKiBSZW1lbWJlciB0aGF0IHdlIHJlbW92ZWQgYSBNZXJnZUFwcGVuZCAq LworCQkJcmVjb3JkX2VsaWRlZF9ub2RlKHJvb3QtPmdsb2IsIHAtPnBsYW5fbm9kZV9pZCwgVF9N ZXJnZUFwcGVuZCwKKwkJCQkJCQkgICBvZmZzZXRfcmVsaWRfc2V0KG1wbGFuLT5hcHByZWxpZHMs IHJ0b2Zmc2V0KSk7CisKKwkJCXJldHVybiByZXN1bHQ7CisJCX0KIAl9CiAKIAkvKgpAQCAtMzc3 NCwzICszODA0LDIxIEBAIGV4dHJhY3RfcXVlcnlfZGVwZW5kZW5jaWVzX3dhbGtlcihOb2RlICpu b2RlLCBQbGFubmVySW5mbyAqY29udGV4dCkKIAlyZXR1cm4gZXhwcmVzc2lvbl90cmVlX3dhbGtl cihub2RlLCBleHRyYWN0X3F1ZXJ5X2RlcGVuZGVuY2llc193YWxrZXIsCiAJCQkJCQkJCSAgY29u dGV4dCk7CiB9CisKKy8qCisgKiBSZWNvcmQgc29tZSBkZXRhaWxzIGFib3V0IGEgbm9kZSByZW1v dmVkIGZyb20gdGhlIHBsYW4gZHVyaW5nIHNldHJlZnMKKyAqIHByb2Nlc3NpbmcsIGZvciB0aGUg YmVuZWZpdCBvZiBjb2RlIHRyeWluZyB0byByZWNvbnN0cnVjdCBwbGFubmVyIGRlY2lzaW9ucwor ICogZnJvbSBleGFtaW5hdGlvbiBvZiB0aGUgZmluYWwgcGxhbiB0cmVlLgorICovCitzdGF0aWMg dm9pZAorcmVjb3JkX2VsaWRlZF9ub2RlKFBsYW5uZXJHbG9iYWwgKmdsb2IsIGludCBwbGFuX25v ZGVfaWQsCisJCQkJICAgTm9kZVRhZyBlbGlkZWRfdHlwZSwgQml0bWFwc2V0ICpyZWxpZHMpCit7 CisJRWxpZGVkTm9kZSAqbiA9IG1ha2VOb2RlKEVsaWRlZE5vZGUpOworCisJbi0+cGxhbl9ub2Rl X2lkID0gcGxhbl9ub2RlX2lkOworCW4tPmVsaWRlZF90eXBlID0gZWxpZGVkX3R5cGU7CisJbi0+ cmVsaWRzID0gcmVsaWRzOworCisJZ2xvYi0+ZWxpZGVkTm9kZXMgPSBsYXBwZW5kKGdsb2ItPmVs aWRlZE5vZGVzLCBuKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggYzFlOTM5NzYyM2IuLjlj YzVkMmU3NDExIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMjMyLDYgKzIzMiw5IEBAIHR5cGVk ZWYgc3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiB0eXBlIE9JRHMgZm9yIFBBUkFNX0VYRUMgUGFy YW1zICovCiAJTGlzdAkgICAqcGFyYW1FeGVjVHlwZXM7CiAKKwkvKiBpbmZvIGFib3V0IG5vZGVz IGVsaWRlZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzIHByb2Nlc3NpbmcgKi8KKwlMaXN0 CSAgICplbGlkZWROb2RlczsKKwogCS8qIGhpZ2hlc3QgUGxhY2VIb2xkZXJWYXIgSUQgYXNzaWdu ZWQgKi8KIAlJbmRleAkJbGFzdFBISWQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVz L3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggOWFlNzJh NjA3ZTIuLjBhZDBmZjQwNGM5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9k ZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtMTUyLDYgKzE1Miw5 IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZWRTdG10CiAJLyogbm9uLW51bGwgaWYgdGhpcyBpcyB1 dGlsaXR5IHN0bXQgKi8KIAlOb2RlCSAgICp1dGlsaXR5U3RtdDsKIAorCS8qIGluZm8gYWJvdXQg bm9kZXMgZWxpZGVkIGZyb20gdGhlIHBsYW4gZHVyaW5nIHNldHJlZnMgcHJvY2Vzc2luZyAqLwor CUxpc3QJICAgKmVsaWRlZE5vZGVzOworCiAJLyoKIAkgKiBEZWZFbGVtIG9iamVjdHMgYWRkZWQg YnkgZXh0ZW5zaW9ucywgZS5nLiB1c2luZyBwbGFubmVyX3NodXRkb3duX2hvb2sKIAkgKgpAQCAt MTgzOCw0ICsxODQxLDIxIEBAIHR5cGVkZWYgc3RydWN0IFN1YlBsYW5SVEluZm8KIAlib29sCQlk dW1teTsKIH0gU3ViUGxhblJUSW5mbzsKIAorLyoKKyAqIEVsaWRlZE5vZGUKKyAqCisgKiBJbmZv cm1hdGlvbiBhYm91dCBub2RlcyBlbGlkZWQgZnJvbSB0aGUgZmluYWwgcGxhbiB0cmVlOiB0cml2 aWFsIHN1YnF1ZXJ5CisgKiBzY2FucywgYW5kIHNpbmdsZS1jaGlsZCBBcHBlbmQgYW5kIE1lcmdl QXBwZW5kIG5vZGVzLgorICoKKyAqIHBsYW5fbm9kZV9pZCBpcyB0aGF0IG9mIHRoZSBzdXJ2aXZp bmcgcGxhbiBub2RlLCB0aGUgc29sZSBjaGlsZCBvZiB0aGUKKyAqIG9uZSB3aGljaCB3YXMgZWxp ZGVkLgorICovCit0eXBlZGVmIHN0cnVjdCBFbGlkZWROb2RlCit7CisJTm9kZVRhZwkJdHlwZTsK KwlpbnQJCQlwbGFuX25vZGVfaWQ7CisJTm9kZVRhZwkJZWxpZGVkX3R5cGU7CisJQml0bWFwc2V0 ICAqcmVsaWRzOworfSBFbGlkZWROb2RlOworCiAjZW5kaWYJCQkJCQkJLyogUExBTk5PREVTX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMzJhMTUxNDdjNTQuLjU4ZGUwNGNhMmM1 IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNzEwLDYgKzcxMCw3IEBAIEVhY2hTdGF0 ZQogRWRnZQogRWRpdGFibGVPYmplY3RUeXBlCiBFbGVtZW50c1N0YXRlCitFbGlkZWROb2RlCiBF bmFibGVUaW1lb3V0UGFyYW1zCiBFbmREYXRhUHRyVHlwZQogRW5kRGlyZWN0TW9kaWZ5X2Z1bmN0 aW9uCi0tIAoyLjUxLjAKCg== --000000000000511f07064975dd6d Content-Type: application/octet-stream; name="v13-0003-Store-information-about-Append-node-consolidatio.patch" Content-Disposition: attachment; filename="v13-0003-Store-information-about-Append-node-consolidatio.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkya5jau2 RnJvbSA3MWZlY2Y4NTAyYzhjNDNjYTZkMzU1ZTFiZGVhYWE4MjA3OGU4ZWJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMTIgSmFuIDIwMjYgMTA6MTI6MjUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMyAz LzVdIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IEFwcGVuZCBub2RlIGNvbnNvbGlkYXRpb24gaW4K IHRoZSBmaW5hbCBwbGFuLgoKQW4gZXh0ZW5zaW9uIChvciBjb3JlIGNvZGUpIG1pZ2h0IHdhbnQg dG8gcmVjb25zdHJ1Y3QgdGhlIHBsYW5uZXIncwpkZWNpc2lvbnMgYWJvdXQgd2hldGhlciBhbmQg d2hlcmUgdG8gcGVyZm9ybSBwYXJ0aXRpb253aXNlIGpvaW5zIGZyb20KdGhlIGZpbmFsIHBsYW4u IFRvIGRvIHNvLCBpdCBtdXN0IGJlIHBvc3NpYmxlIHRvIGZpbmQgYWxsIG9mIHRoZSBSVElzCm9m IHBhcnRpdGlvbmVkIHRhYmxlcyBhcHBlYXJpbmcgaW4gdGhlIHBsYW4uIEJ1dCB3aGVuIGFuIEFw cGVuZFBhdGgKb3IgTWVyZ2VBcHBlbmRQYXRoIHB1bGxzIHVwIGNoaWxkIHBhdGhzIGZyb20gYSBz dWJvcmRpbmF0ZSBBcHBlbmRQYXRoCm9yIE1lcmdlQXBwZW5kUGF0aCwgdGhlIFJUSXMgb2YgdGhl IHN1Ym9yZGluYXRlIHBhdGggZG8gbm90IGFwcGVhcgppbiB0aGUgZmluYWwgcGxhbiwgbWFraW5n IHRoaXMga2luZCBvZiByZWNvbnN0cnVjdGlvbiBpbXBvc3NpYmxlLgoKVG8gYXZvaWQgdGhpcywg cHJvcGFnYXRlIHRoZSBSVEkgc2V0cyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBwcmVzZW50CmluIHRo ZSAnYXBwcmVsaWRzJyBmaWVsZCBvZiB0aGUgc3Vib3JkaW5hdGUgQXBwZW5kIG9yIE1lcmdlQXBw ZW5kCm5vZGVzIHRoYXQgd291bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgaW50byB0aGUgc3Vydml2aW5n IEFwcGVuZCBvcgpNZXJnZUFwcGVuZCBub2RlLCB1c2luZyBhIG5ldyAnY2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMnIGZpZWxkIGZvcgp0aGF0IHB1cnBvc2UuIFRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxk IGlzIGEgbGlzdCBvZiBCaXRtYXBzZXRzLApiZWNhdXNlIGVhY2ggcmVsYXRpb24gd2hvc2UgYXBw ZW5kLWxpc3Qgd2FzIHB1bGxlZCB1cCBoYWQgaXRzIG93bgpzZXQgb2YgUlRJczoganVzdCBvbmUs IGlmIGl0IHdhcyBhIHBhcnRpdGlvbndpc2Ugc2Nhbiwgb3IgbW9yZSB0aGFuCm9uZSwgaWYgaXQg d2FzIGEgcGFydGl0aW9ud2lzZSBqb2luLiBTaW5jZSBvdXIgZ29hbCBpcyB0byBzZWUgd2hlcmUK cGFydGl0aW9ud2lzZSBqb2lucyB3ZXJlIGRvbmUsIGl0IGlzIGVzc2VudGlhbCB0byBhdm9pZCBs b3NpbmcgdGhlCmluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgUlRJcyB3ZXJlIGdyb3VwZWQgaW4g dGhlIHB1bGxlZC11cApyZWxhdGlvbnMuCgpUaGlzIGNvbW1pdCBhbHNvIHVwZGF0ZXMgcGdfb3Zl cmV4cGxhaW4gc28gdGhhdCBFWFBMQUlOIChSQU5HRV9UQUJMRSkKd2lsbCBkaXNwbGF5IHRoZSBz YXZlZCBSVEkgc2V0cy4KCkNvLWF1dGhvcmVkLWJ5OiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdy ZXNxbC5vcmc+CkNvLWF1dGhvcmVkLWJ5OiBMdWthcyBGaXR0bCA8bHVrYXNAZml0dGwuY29tPgpS ZXZpZXdlZC1ieTogTHVrYXMgRml0dGwgPGx1a2FzQGZpdHRsLmNvbT4KUmV2aWV3ZWQtYnk6IEph a3ViIFdhcnRhayA8amFrdWIud2FydGFrQGVudGVycHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OiBH cmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KUmV2aWV3ZWQtYnk6IEphY29iIENoYW1waW9uIDxqYWNv Yi5jaGFtcGlvbkBlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogQW1pdCBMYW5nb3RlIDxh bWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55 aW1AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwOi8vcG9zdGdyLmVzL20vQ0ErVGdtb1otSmgx VDZReVdvQ09ETVZRZGhUVVBZa2Faald6dHpQMUVuND1aSG9LUHp3QG1haWwuZ21haWwuY29tCi0t LQogLi4uL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91dCAgICAgICAgICAgICAgIHwgICA0ICst CiBjb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMgICAgICAgfCAgNTYgKysr KysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgICAgICAgICB8IDE5NSAr KysrKysrKysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMg ICAgICAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5j ICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgICAg ICAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMgICAg ICAgIHwgIDQzICsrLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgICAg ICAgICB8ICAyNiArKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAg ICAgICB8ICAxMCArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgICAg ICAgfCAgMTEgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggICAgICAgICAgICAg IHwgIDE4ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAg fCAgIDEgKwogMTIgZmlsZXMgY2hhbmdlZCwgMjY2IGluc2VydGlvbnMoKyksIDExMCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292 ZXJleHBsYWluLm91dCBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4 cGxhaW4ub3V0CmluZGV4IGNhOWEyM2VhNjFmLi5hMzc3ZmIyNTcxZCAxMDA2NDQKLS0tIGEvY29u dHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQKKysrIGIvY29u dHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQKQEAgLTEwNCw2 ICsxMDQsNyBAQCAkJCk7CiAgICAgICAgICAgICAgICBQYXJhbGxlbCBTYWZlOiB0cnVlCiAgICAg ICAgICAgICAgICBQbGFuIE5vZGUgSUQ6IDIKICAgICAgICAgICAgICAgIEFwcGVuZCBSVElzOiAx CisgICAgICAgICAgICAgICBDaGlsZCBBcHBlbmQgUlRJczogbm9uZQogICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIGJyYXNzaWNhIHZlZ2V0YWJsZXNfMQogICAgICAgICAgICAgICAgICAg ICAgRGlzYWJsZWQgTm9kZXM6IDAKICAgICAgICAgICAgICAgICAgICAgIFBhcmFsbGVsIFNhZmU6 IHRydWUKQEAgLTE0Miw3ICsxNDMsNyBAQCAkJCk7CiAgICBSZWxhdGlvbiBLaW5kOiByZWxhdGlv bgogICAgUmVsYXRpb24gTG9jayBNb2RlOiBBY2Nlc3NTaGFyZUxvY2sKICBVbnBydW5hYmxlIFJU SXM6IDEgMyA0Ci0oNTMgcm93cykKKyg1NCByb3dzKQogCiAtLSBUZXN0IGEgZGlmZmVyZW50IG91 dHB1dCBmb3JtYXQuCiBTRUxFQ1QgZXhwbGFpbl9maWx0ZXIoJCQKQEAgLTE5Nyw2ICsxOTgsNyBA QCAkJCk7CiAgICAgICAgICAgICAgICA8ZXh0UGFyYW0+bm9uZTwvZXh0UGFyYW0+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgICAgIDxhbGxQYXJhbT5ub25lPC9hbGxQ YXJhbT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgPEFwcGVu ZC1SVElzPjE8L0FwcGVuZC1SVElzPiAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAg ICAgICAgICA8Q2hpbGQtQXBwZW5kLVJUSXM+bm9uZTwvQ2hpbGQtQXBwZW5kLVJUSXM+ICAgICAg ICAgICsKICAgICAgICAgICAgICAgIDxTdWJwbGFucy1SZW1vdmVkPjA8L1N1YnBsYW5zLVJlbW92 ZWQ+ICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgPFBsYW5zPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICAgICAgIDxQbGFu PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKZGlmZiAtLWdp dCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyBiL2NvbnRyaWIvcGdf b3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwppbmRleCBlMDE4NGJhMzE0YS4uMzZlNmFhYzBl MmMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwor KysgYi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKQEAgLTU0LDYgKzU0 LDggQEAgc3RhdGljIHZvaWQgb3ZlcmV4cGxhaW5fYWxpYXMoY29uc3QgY2hhciAqcWxhYmVsLCBB bGlhcyAqYWxpYXMsCiAJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIG92 ZXJleHBsYWluX2JpdG1hcHNldChjb25zdCBjaGFyICpxbGFiZWwsIEJpdG1hcHNldCAqYm1zLAog CQkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOworc3RhdGljIHZvaWQgb3ZlcmV4cGxhaW5fYml0 bWFwc2V0X2xpc3QoY29uc3QgY2hhciAqcWxhYmVsLCBMaXN0ICpibXNfbGlzdCwKKwkJCQkJCQkJ CSAgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgb3ZlcmV4cGxhaW5faW50bGlzdChj b25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmxpc3QsCiAJCQkJCQkJCUV4cGxhaW5TdGF0ZSAqZXMp OwogCkBAIC0yMzIsMTEgKzIzNCwxNyBAQCBvdmVyZXhwbGFpbl9wZXJfbm9kZV9ob29rKFBsYW5T dGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQkJb3ZlcmV4cGxhaW5fYml0bWFw c2V0KCJBcHBlbmQgUlRJcyIsCiAJCQkJCQkJCQkgICgoQXBwZW5kICopIHBsYW4pLT5hcHByZWxp ZHMsCiAJCQkJCQkJCQkgIGVzKTsKKwkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXRfbGlzdCgiQ2hp bGQgQXBwZW5kIFJUSXMiLAorCQkJCQkJCQkJCSAgICgoQXBwZW5kICopIHBsYW4pLT5jaGlsZF9h cHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCQkJCQkgICBlcyk7CiAJCQkJYnJlYWs7CiAJCQljYXNl IFRfTWVyZ2VBcHBlbmQ6CiAJCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0KCJBcHBlbmQgUlRJcyIs CiAJCQkJCQkJCQkgICgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkcywKIAkJCQkJCQkJ CSAgZXMpOworCQkJCW92ZXJleHBsYWluX2JpdG1hcHNldF9saXN0KCJDaGlsZCBBcHBlbmQgUlRJ cyIsCisJCQkJCQkJCQkJICAgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+Y2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMsCisJCQkJCQkJCQkJICAgZXMpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBUX1Jlc3Vs dDoKIApAQCAtODE1LDYgKzgyMyw1NCBAQCBvdmVyZXhwbGFpbl9iaXRtYXBzZXQoY29uc3QgY2hh ciAqcWxhYmVsLCBCaXRtYXBzZXQgKmJtcywgRXhwbGFpblN0YXRlICplcykKIAlwZnJlZShidWYu ZGF0YSk7CiB9CiAKKy8qCisgKiBFbWl0IGEgdGV4dCBwcm9wZXJ0eSBkZXNjcmliaW5nIHRoZSBj b250ZW50cyBvZiBhIGxpc3Qgb2YgYml0bWFwc2V0cy4KKyAqIElmIGEgYml0bWFwc2V0IGNvbnRh aW5zIGV4YWN0bHkgMSBtZW1iZXIsIHdlIGp1c3QgcHJpbnQgYW4gaW50ZWdlcjsKKyAqIG90aGVy d2lzZSwgd2Ugc3Vycm91bmQgdGhlIGxpc3Qgb2YgbWVtYmVycyBieSBwYXJlbnRoZXNlcy4KKyAq CisgKiBJZiB0aGVyZSBhcmUgbm8gYml0bWFwc2V0cyBpbiB0aGUgbGlzdCwgd2UgcHJpbnQgdGhl IHdvcmQgIm5vbmUiLgorICovCitzdGF0aWMgdm9pZAorb3ZlcmV4cGxhaW5fYml0bWFwc2V0X2xp c3QoY29uc3QgY2hhciAqcWxhYmVsLCBMaXN0ICpibXNfbGlzdCwKKwkJCQkJCSAgIEV4cGxhaW5T dGF0ZSAqZXMpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0cmluZ0luZm8oJmJ1 Zik7CisKKwlmb3JlYWNoX25vZGUoQml0bWFwc2V0LCBibXMsIGJtc19saXN0KQorCXsKKwkJaWYg KGJtc19tZW1iZXJzaGlwKGJtcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCWFwcGVuZFN0cmluZ0lu Zm8oJmJ1ZiwgIiAlZCIsIGJtc19zaW5nbGV0b25fbWVtYmVyKGJtcykpOworCQllbHNlCisJCXsK KwkJCWludAkJCXggPSAtMTsKKwkJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmYnVmLCAiICgiKTsKKwkJCXdoaWxlICgoeCA9IGJtc19uZXh0X21lbWJl cihibXMsIHgpKSA+PSAwKQorCQkJeworCQkJCWlmIChmaXJzdCkKKwkJCQkJZmlyc3QgPSBmYWxz ZTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICcgJyk7CisJCQkJ YXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiJWQiLCB4KTsKKwkJCX0KKwkJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKCZidWYsICcpJyk7CisJCX0KKwl9CisKKwlpZiAoYnVmLmxlbiA9PSAwKQorCXsKKwkJ RXhwbGFpblByb3BlcnR5VGV4dChxbGFiZWwsICJub25lIiwgZXMpOworCQlyZXR1cm47CisJfQor CisJQXNzZXJ0KGJ1Zi5kYXRhWzBdID09ICcgJyk7CisJRXhwbGFpblByb3BlcnR5VGV4dChxbGFi ZWwsIGJ1Zi5kYXRhICsgMSwgZXMpOworCXBmcmVlKGJ1Zi5kYXRhKTsKK30KKwogLyoKICAqIEVt aXQgYSB0ZXh0IHByb3BlcnR5IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnRzIG9mIGEgbGlzdCBvZiBp bnRlZ2VycywgT0lEcywKICAqIG9yIFhJRHMgLS0gZWl0aGVyIGEgc3BhY2Utc2VwYXJhdGVkIGxp c3Qgb2YgaW50ZWdlciBtZW1iZXJzLCBvciB0aGUgd29yZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2FsbHBhdGhzLmMKaW5kZXggYjQ1ODFlNTRkOTMuLjJjNzYyNDlkMjViIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2FsbHBhdGhzLmMKQEAgLTEyOCw4ICsxMjgsMTAgQEAgc3RhdGljIFBhdGgg KmdldF9jaGVhcGVzdF9wYXJhbWV0ZXJpemVkX2NoaWxkX3BhdGgoUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCQkJCQkJCQkgICBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIpOwogc3RhdGljIHZvaWQgYWNj dW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLAogCQkJCQkJCQkJICBMaXN0ICoqc3Vi cGF0aHMsCi0JCQkJCQkJCQkgIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzKTsKLXN0YXRpYyBQYXRo ICpnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgpOworCQkJCQkJCQkJICBM aXN0ICoqc3BlY2lhbF9zdWJwYXRocywKKwkJCQkJCQkJCSAgTGlzdCAqKmNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzKTsKK3N0YXRpYyBQYXRoICpnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgsCisJCQkJCQkJCQkJICBMaXN0ICoqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOwog c3RhdGljIHZvaWQgc2V0X2R1bW15X3JlbF9wYXRobGlzdChSZWxPcHRJbmZvICpyZWwpOwogc3Rh dGljIHZvaWQgc2V0X3N1YnF1ZXJ5X3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAJCQkJCQkJCSAgSW5kZXggcnRpLCBSYW5nZVRibEVudHJ5ICpydGUpOwpAQCAt MTQwNCwyMiArMTQwNiwyMSBAQCB2b2lkCiBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJTGlzdCAqbGl2ZV9jaGlsZHJlbHMp CiB7Ci0JTGlzdAkgICAqc3VicGF0aHMgPSBOSUw7Ci0JYm9vbAkJc3VicGF0aHNfdmFsaWQgPSB0 cnVlOwotCUxpc3QJICAgKnN0YXJ0dXBfc3VicGF0aHMgPSBOSUw7Ci0JYm9vbAkJc3RhcnR1cF9z dWJwYXRoc192YWxpZCA9IHRydWU7Ci0JTGlzdAkgICAqcGFydGlhbF9zdWJwYXRocyA9IE5JTDsK LQlMaXN0CSAgICpwYV9wYXJ0aWFsX3N1YnBhdGhzID0gTklMOwotCUxpc3QJICAgKnBhX25vbnBh cnRpYWxfc3VicGF0aHMgPSBOSUw7Ci0JYm9vbAkJcGFydGlhbF9zdWJwYXRoc192YWxpZCA9IHRy dWU7Ci0JYm9vbAkJcGFfc3VicGF0aHNfdmFsaWQ7CisJQXBwZW5kUGF0aElucHV0IHVucGFyYW1l dGVyaXplZCA9IHswfTsKKwlBcHBlbmRQYXRoSW5wdXQgc3RhcnR1cCA9IHswfTsKKwlBcHBlbmRQ YXRoSW5wdXQgcGFydGlhbF9vbmx5ID0gezB9OworCUFwcGVuZFBhdGhJbnB1dCBwYXJhbGxlbF9h cHBlbmQgPSB7MH07CisJYm9vbAkJdW5wYXJhbWV0ZXJpemVkX3ZhbGlkID0gdHJ1ZTsKKwlib29s CQlzdGFydHVwX3ZhbGlkID0gdHJ1ZTsKKwlib29sCQlwYXJ0aWFsX29ubHlfdmFsaWQgPSB0cnVl OworCWJvb2wJCXBhcmFsbGVsX2FwcGVuZF92YWxpZCA9IHRydWU7CiAJTGlzdAkgICAqYWxsX2No aWxkX3BhdGhrZXlzID0gTklMOwogCUxpc3QJICAgKmFsbF9jaGlsZF9vdXRlcnMgPSBOSUw7CiAJ TGlzdENlbGwgICAqbDsKIAlkb3VibGUJCXBhcnRpYWxfcm93cyA9IC0xOwogCiAJLyogSWYgYXBw cm9wcmlhdGUsIGNvbnNpZGVyIHBhcmFsbGVsIGFwcGVuZCAqLwotCXBhX3N1YnBhdGhzX3ZhbGlk ID0gZW5hYmxlX3BhcmFsbGVsX2FwcGVuZCAmJiByZWwtPmNvbnNpZGVyX3BhcmFsbGVsOworCXBh cmFsbGVsX2FwcGVuZF92YWxpZCA9IGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQgJiYgcmVsLT5jb25z aWRlcl9wYXJhbGxlbDsKIAogCS8qCiAJICogRm9yIGV2ZXJ5IG5vbi1kdW1teSBjaGlsZCwgcmVt ZW1iZXIgdGhlIGNoZWFwZXN0IHBhdGguICBBbHNvLCBpZGVudGlmeQpAQCAtMTQ0Myw5ICsxNDQ0 LDkgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCwKIAkJaWYgKGNoaWxkcmVsLT5wYXRobGlzdCAhPSBOSUwgJiYKIAkJCWNoaWxkcmVs LT5jaGVhcGVzdF90b3RhbF9wYXRoLT5wYXJhbV9pbmZvID09IE5VTEwpCiAJCQlhY2N1bXVsYXRl X2FwcGVuZF9zdWJwYXRoKGNoaWxkcmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoLAotCQkJCQkJCQkJ ICAmc3VicGF0aHMsIE5VTEwpOworCQkJCQkJCQkJICAmdW5wYXJhbWV0ZXJpemVkLnN1YnBhdGhz LCBOVUxMLCAmdW5wYXJhbWV0ZXJpemVkLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJZWxz ZQotCQkJc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKKwkJCXVucGFyYW1ldGVyaXplZF92YWxpZCA9 IGZhbHNlOwogCiAJCS8qCiAJCSAqIFdoZW4gdGhlIHBsYW5uZXIgaXMgY29uc2lkZXJpbmcgY2hl YXAgc3RhcnR1cCBwbGFucywgd2UnbGwgYWxzbwpAQCAtMTQ3MSwxMSArMTQ3MiwxMiBAQCBhZGRf cGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CQkJLyogY2hlYXBlc3Rfc3RhcnR1cF9wYXRoIG11c3Qgbm90IGJlIGEgcGFyYW1ldGVyaXplZCBw YXRoLiAqLwogCQkJQXNzZXJ0KGNoZWFwZXN0X3BhdGgtPnBhcmFtX2luZm8gPT0gTlVMTCk7CiAJ CQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3BhdGgsCi0JCQkJCQkJCQkgICZz dGFydHVwX3N1YnBhdGhzLAotCQkJCQkJCQkJICBOVUxMKTsKKwkJCQkJCQkJCSAgJnN0YXJ0dXAu c3VicGF0aHMsCisJCQkJCQkJCQkgIE5VTEwsCisJCQkJCQkJCQkgICZzdGFydHVwLmNoaWxkX2Fw cGVuZF9yZWxpZF9zZXRzKTsKIAkJfQogCQllbHNlCi0JCQlzdGFydHVwX3N1YnBhdGhzX3ZhbGlk ID0gZmFsc2U7CisJCQlzdGFydHVwX3ZhbGlkID0gZmFsc2U7CiAKIAogCQkvKiBTYW1lIGlkZWEs IGJ1dCBmb3IgYSBwYXJ0aWFsIHBsYW4uICovCkBAIC0xNDgzLDE2ICsxNDg1LDE3IEBAIGFkZF9w YXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ CXsKIAkJCWNoZWFwZXN0X3BhcnRpYWxfcGF0aCA9IGxpbml0aWFsKGNoaWxkcmVsLT5wYXJ0aWFs X3BhdGhsaXN0KTsKIAkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfcGFydGlh bF9wYXRoLAotCQkJCQkJCQkJICAmcGFydGlhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkg ICZwYXJ0aWFsX29ubHkucGFydGlhbF9zdWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCSAgJnBhcnRp YWxfb25seS5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCX0KIAkJZWxzZQotCQkJcGFydGlh bF9zdWJwYXRoc192YWxpZCA9IGZhbHNlOworCQkJcGFydGlhbF9vbmx5X3ZhbGlkID0gZmFsc2U7 CiAKIAkJLyoKIAkJICogU2FtZSBpZGVhLCBidXQgZm9yIGEgcGFyYWxsZWwgYXBwZW5kIG1peGlu ZyBwYXJ0aWFsIGFuZCBub24tcGFydGlhbAogCQkgKiBwYXRocy4KIAkJICovCi0JCWlmIChwYV9z dWJwYXRoc192YWxpZCkKKwkJaWYgKHBhcmFsbGVsX2FwcGVuZF92YWxpZCkKIAkJewogCQkJUGF0 aAkgICAqbnBwYXRoID0gTlVMTDsKIApAQCAtMTUwMiw3ICsxNTA1LDcgQEAgYWRkX3BhdGhzX3Rv X2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCWlmIChj aGVhcGVzdF9wYXJ0aWFsX3BhdGggPT0gTlVMTCAmJiBucHBhdGggPT0gTlVMTCkKIAkJCXsKIAkJ CQkvKiBOZWl0aGVyIGEgcGFydGlhbCBub3IgYSBwYXJhbGxlbC1zYWZlIHBhdGg/ICBGb3JnZXQg aXQuICovCi0JCQkJcGFfc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKKwkJCQlwYXJhbGxlbF9hcHBl bmRfdmFsaWQgPSBmYWxzZTsKIAkJCX0KIAkJCWVsc2UgaWYgKG5wcGF0aCA9PSBOVUxMIHx8CiAJ CQkJCSAoY2hlYXBlc3RfcGFydGlhbF9wYXRoICE9IE5VTEwgJiYKQEAgLTE1MTEsOCArMTUxNCw5 IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwsCiAJCQkJLyogUGFydGlhbCBwYXRoIGlzIGNoZWFwZXIgb3IgdGhlIG9ubHkgb3B0aW9u LiAqLwogCQkJCUFzc2VydChjaGVhcGVzdF9wYXJ0aWFsX3BhdGggIT0gTlVMTCk7CiAJCQkJYWNj dW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF9wYXJ0aWFsX3BhdGgsCi0JCQkJCQkJCQkJ ICAmcGFfcGFydGlhbF9zdWJwYXRocywKLQkJCQkJCQkJCQkgICZwYV9ub25wYXJ0aWFsX3N1YnBh dGhzKTsKKwkJCQkJCQkJCQkgICZwYXJhbGxlbF9hcHBlbmQucGFydGlhbF9zdWJwYXRocywKKwkJ CQkJCQkJCQkgICZwYXJhbGxlbF9hcHBlbmQuc3VicGF0aHMsCisJCQkJCQkJCQkJICAmcGFyYWxs ZWxfYXBwZW5kLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsK QEAgLTE1MzAsOCArMTUzNCw5IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICogZmlndXJlIHRoYXQgb3V0LgogCQkJCSAq LwogCQkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgobnBwYXRoLAotCQkJCQkJCQkJCSAgJnBh X25vbnBhcnRpYWxfc3VicGF0aHMsCi0JCQkJCQkJCQkJICBOVUxMKTsKKwkJCQkJCQkJCQkgICZw YXJhbGxlbF9hcHBlbmQuc3VicGF0aHMsCisJCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJCSAg JnBhcmFsbGVsX2FwcGVuZC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCQl9CiAJCX0KIApA QCAtMTYwNSwyOCArMTYxMCwyOCBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCSAqIHVucGFyYW1ldGVyaXplZCBBcHBlbmQgcGF0 aCBmb3IgdGhlIHJlbC4gIChOb3RlOiB0aGlzIGlzIGNvcnJlY3QgZXZlbgogCSAqIGlmIHdlIGhh dmUgemVybyBvciBvbmUgbGl2ZSBzdWJwYXRoIGR1ZSB0byBjb25zdHJhaW50IGV4Y2x1c2lvbi4p CiAJICovCi0JaWYgKHN1YnBhdGhzX3ZhbGlkKQotCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNy ZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN1YnBhdGhzLCBOSUwsCisJaWYgKHVucGFyYW1l dGVyaXplZF92YWxpZCkKKwkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3Bh dGgocm9vdCwgcmVsLCB1bnBhcmFtZXRlcml6ZWQsCiAJCQkJCQkJCQkJCQkgIE5JTCwgTlVMTCwg MCwgZmFsc2UsCiAJCQkJCQkJCQkJCQkgIC0xKSk7CiAKIAkvKiBidWlsZCBhbiBBcHBlbmRQYXRo IGZvciB0aGUgY2hlYXAgc3RhcnR1cCBwYXRocywgaWYgdmFsaWQgKi8KLQlpZiAoc3RhcnR1cF9z dWJwYXRoc192YWxpZCkKLQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3Bh dGgocm9vdCwgcmVsLCBzdGFydHVwX3N1YnBhdGhzLAotCQkJCQkJCQkJCQkJICBOSUwsIE5JTCwg TlVMTCwgMCwgZmFsc2UsIC0xKSk7CisJaWYgKHN0YXJ0dXBfdmFsaWQpCisJCWFkZF9wYXRoKHJl bCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgc3RhcnR1cCwKKwkJCQkJ CQkJCQkJCSAgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEpKTsKIAogCS8qCiAJICogQ29uc2lkZXIg YW4gYXBwZW5kIG9mIHVub3JkZXJlZCwgdW5wYXJhbWV0ZXJpemVkIHBhcnRpYWwgcGF0aHMuICBN YWtlCiAJICogaXQgcGFyYWxsZWwtYXdhcmUgaWYgcG9zc2libGUuCiAJICovCi0JaWYgKHBhcnRp YWxfc3VicGF0aHNfdmFsaWQgJiYgcGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCisJaWYgKHBhcnRp YWxfb25seV92YWxpZCAmJiBwYXJ0aWFsX29ubHkucGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCiAJ ewogCQlBcHBlbmRQYXRoICphcHBlbmRwYXRoOwogCQlMaXN0Q2VsbCAgICpsYzsKIAkJaW50CQkJ cGFyYWxsZWxfd29ya2VycyA9IDA7CiAKIAkJLyogRmluZCB0aGUgaGlnaGVzdCBudW1iZXIgb2Yg d29ya2VycyByZXF1ZXN0ZWQgZm9yIGFueSBzdWJwYXRoLiAqLwotCQlmb3JlYWNoKGxjLCBwYXJ0 aWFsX3N1YnBhdGhzKQorCQlmb3JlYWNoKGxjLCBwYXJ0aWFsX29ubHkucGFydGlhbF9zdWJwYXRo cykKIAkJewogCQkJUGF0aAkgICAqcGF0aCA9IGxmaXJzdChsYyk7CiAKQEAgLTE2NTMsNyArMTY1 OCw3IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAJCUFzc2VydChwYXJhbGxlbF93b3JrZXJzID4gMCk7CiAKIAkJLyogR2VuZXJh dGUgYSBwYXJ0aWFsIGFwcGVuZCBwYXRoLiAqLwotCQlhcHBlbmRwYXRoID0gY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlbCwgTklMLCBwYXJ0aWFsX3N1YnBhdGhzLAorCQlhcHBlbmRwYXRoID0g Y3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgcGFydGlhbF9vbmx5LAogCQkJCQkJCQkJCU5J TCwgTlVMTCwgcGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkJCQllbmFibGVfcGFyYWxsZWxfYXBw ZW5kLAogCQkJCQkJCQkJCS0xKTsKQEAgLTE2NzQsNyArMTY3OSw3IEBAIGFkZF9wYXRoc190b19h cHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJICogYSBub24t cGFydGlhbCBwYXRoIHRoYXQgaXMgc3Vic3RhbnRpYWxseSBjaGVhcGVyIHRoYW4gYW55IHBhcnRp YWwgcGF0aDsKIAkgKiBvdGhlcndpc2UsIHdlIHNob3VsZCB1c2UgdGhlIGFwcGVuZCBwYXRoIGFk ZGVkIGluIHRoZSBwcmV2aW91cyBzdGVwLikKIAkgKi8KLQlpZiAocGFfc3VicGF0aHNfdmFsaWQg JiYgcGFfbm9ucGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCisJaWYgKHBhcmFsbGVsX2FwcGVuZF92 YWxpZCAmJiBwYXJhbGxlbF9hcHBlbmQuc3VicGF0aHMgIT0gTklMKQogCXsKIAkJQXBwZW5kUGF0 aCAqYXBwZW5kcGF0aDsKIAkJTGlzdENlbGwgICAqbGM7CkBAIC0xNjg0LDcgKzE2ODksNyBAQCBh ZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCQkgKiBGaW5kIHRoZSBoaWdoZXN0IG51bWJlciBvZiB3b3JrZXJzIHJlcXVlc3RlZCBmb3Ig YW55IHBhcnRpYWwKIAkJICogc3VicGF0aC4KIAkJICovCi0JCWZvcmVhY2gobGMsIHBhX3BhcnRp YWxfc3VicGF0aHMpCisJCWZvcmVhY2gobGMsIHBhcmFsbGVsX2FwcGVuZC5wYXJ0aWFsX3N1YnBh dGhzKQogCQl7CiAJCQlQYXRoCSAgICpwYXRoID0gbGZpcnN0KGxjKTsKIApAQCAtMTcwMiw4ICsx NzA3LDcgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwKIAkJCQkJCQkgICBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyKTsK IAkJQXNzZXJ0KHBhcmFsbGVsX3dvcmtlcnMgPiAwKTsKIAotCQlhcHBlbmRwYXRoID0gY3JlYXRl X2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgcGFfbm9ucGFydGlhbF9zdWJwYXRocywKLQkJCQkJCQkJ CQlwYV9wYXJ0aWFsX3N1YnBhdGhzLAorCQlhcHBlbmRwYXRoID0gY3JlYXRlX2FwcGVuZF9wYXRo KHJvb3QsIHJlbCwgcGFyYWxsZWxfYXBwZW5kLAogCQkJCQkJCQkJCU5JTCwgTlVMTCwgcGFyYWxs ZWxfd29ya2VycywgdHJ1ZSwKIAkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQlhZGRfcGFydGlh bF9wYXRoKHJlbCwgKFBhdGggKikgYXBwZW5kcGF0aCk7CkBAIC0xNzEzLDcgKzE3MTcsNyBAQCBh ZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCSAqIEFsc28gYnVpbGQgdW5wYXJhbWV0ZXJpemVkIG9yZGVyZWQgYXBwZW5kIHBhdGhzIGJh c2VkIG9uIHRoZSBjb2xsZWN0ZWQKIAkgKiBsaXN0IG9mIGNoaWxkIHBhdGhrZXlzLgogCSAqLwot CWlmIChzdWJwYXRoc192YWxpZCkKKwlpZiAodW5wYXJhbWV0ZXJpemVkX3ZhbGlkKQogCQlnZW5l cmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKHJvb3QsIHJlbCwgbGl2ZV9jaGlsZHJlbHMsCiAJCQkJ CQkJCQkgYWxsX2NoaWxkX3BhdGhrZXlzKTsKIApAQCAtMTczNCwxMCArMTczOCwxMCBAQCBhZGRf cGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CXsKIAkJUmVsaWRzCQlyZXF1aXJlZF9vdXRlciA9IChSZWxpZHMpIGxmaXJzdChsKTsKIAkJTGlz dENlbGwgICAqbGNyOworCQlBcHBlbmRQYXRoSW5wdXQgcGFyYW1ldGVyaXplZCA9IHswfTsKKwkJ Ym9vbAkJcGFyYW1ldGVyaXplZF92YWxpZCA9IHRydWU7CiAKIAkJLyogU2VsZWN0IHRoZSBjaGls ZCBwYXRocyBmb3IgYW4gQXBwZW5kIHdpdGggdGhpcyBwYXJhbWV0ZXJpemF0aW9uICovCi0JCXN1 YnBhdGhzID0gTklMOwotCQlzdWJwYXRoc192YWxpZCA9IHRydWU7CiAJCWZvcmVhY2gobGNyLCBs aXZlX2NoaWxkcmVscykKIAkJewogCQkJUmVsT3B0SW5mbyAqY2hpbGRyZWwgPSAoUmVsT3B0SW5m byAqKSBsZmlyc3QobGNyKTsKQEAgLTE3NDYsNyArMTc1MCw3IEBAIGFkZF9wYXRoc190b19hcHBl bmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQlpZiAoY2hpbGRy ZWwtPnBhdGhsaXN0ID09IE5JTCkKIAkJCXsKIAkJCQkvKiBmYWlsZWQgdG8gbWFrZSBhIHN1aXRh YmxlIHBhdGggZm9yIHRoaXMgY2hpbGQgKi8KLQkJCQlzdWJwYXRoc192YWxpZCA9IGZhbHNlOwor CQkJCXBhcmFtZXRlcml6ZWRfdmFsaWQgPSBmYWxzZTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAt MTc1NiwxNSArMTc2MCwxNiBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJaWYgKHN1YnBhdGggPT0gTlVMTCkKIAkJCXsKIAkJ CQkvKiBmYWlsZWQgdG8gbWFrZSBhIHN1aXRhYmxlIHBhdGggZm9yIHRoaXMgY2hpbGQgKi8KLQkJ CQlzdWJwYXRoc192YWxpZCA9IGZhbHNlOworCQkJCXBhcmFtZXRlcml6ZWRfdmFsaWQgPSBmYWxz ZTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoc3VicGF0 aCwgJnN1YnBhdGhzLCBOVUxMKTsKKwkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoc3VicGF0 aCwgJnBhcmFtZXRlcml6ZWQuc3VicGF0aHMsIE5VTEwsCisJCQkJCQkJCQkgICZwYXJhbWV0ZXJp emVkLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJfQogCi0JCWlmIChzdWJwYXRoc192YWxp ZCkKKwkJaWYgKHBhcmFtZXRlcml6ZWRfdmFsaWQpCiAJCQlhZGRfcGF0aChyZWwsIChQYXRoICop Ci0JCQkJCSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQkJ CQkgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgcGFyYW1ldGVyaXplZCwKIAkJCQkJCQkJ CQlOSUwsIHJlcXVpcmVkX291dGVyLCAwLCBmYWxzZSwKIAkJCQkJCQkJCQktMSkpOwogCX0KQEAg LTE3ODUsMTMgKzE3OTAsMTYgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJewogCQkJUGF0aAkgICAqcGF0aCA9IChQYXRoICop IGxmaXJzdChsKTsKIAkJCUFwcGVuZFBhdGggKmFwcGVuZHBhdGg7CisJCQlBcHBlbmRQYXRoSW5w dXQgYXBwZW5kID0gezB9OworCisJCQlhcHBlbmQucGFydGlhbF9zdWJwYXRocyA9IGxpc3RfbWFr ZTEocGF0aCk7CisJCQlhcHBlbmQuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBsaXN0X21ha2Ux KHJlbC0+cmVsaWRzKTsKIAogCQkJLyogc2tpcCBwYXRocyB3aXRoIG5vIHBhdGhrZXlzLiAqLwog CQkJaWYgKHBhdGgtPnBhdGhrZXlzID09IE5JTCkKIAkJCQljb250aW51ZTsKIAotCQkJYXBwZW5k cGF0aCA9IGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5JTCwgbGlzdF9tYWtlMShwYXRo KSwKLQkJCQkJCQkJCQkJTklMLCBOVUxMLAorCQkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRf cGF0aChyb290LCByZWwsIGFwcGVuZCwgTklMLCBOVUxMLAogCQkJCQkJCQkJCQlwYXRoLT5wYXJh bGxlbF93b3JrZXJzLCB0cnVlLAogCQkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQkJYWRkX3Bh cnRpYWxfcGF0aChyZWwsIChQYXRoICopIGFwcGVuZHBhdGgpOwpAQCAtMTg3Myw5ICsxODgxLDkg QEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsLAogCWZvcmVhY2gobGNwLCBhbGxfY2hpbGRfcGF0aGtleXMpCiAJewogCQlMaXN0 CSAgICpwYXRoa2V5cyA9IChMaXN0ICopIGxmaXJzdChsY3ApOwotCQlMaXN0CSAgICpzdGFydHVw X3N1YnBhdGhzID0gTklMOwotCQlMaXN0CSAgICp0b3RhbF9zdWJwYXRocyA9IE5JTDsKLQkJTGlz dAkgICAqZnJhY3Rpb25hbF9zdWJwYXRocyA9IE5JTDsKKwkJQXBwZW5kUGF0aElucHV0IHN0YXJ0 dXAgPSB7MH07CisJCUFwcGVuZFBhdGhJbnB1dCB0b3RhbCA9IHswfTsKKwkJQXBwZW5kUGF0aElu cHV0IGZyYWN0aW9uYWwgPSB7MH07CiAJCWJvb2wJCXN0YXJ0dXBfbmVxX3RvdGFsID0gZmFsc2U7 CiAJCWJvb2wJCWZyYWN0aW9uX25lcV90b3RhbCA9IGZhbHNlOwogCQlib29sCQltYXRjaF9wYXJ0 aXRpb25fb3JkZXI7CkBAIC0yMDM4LDE2ICsyMDQ2LDIzIEBAIGdlbmVyYXRlX29yZGVyZWRhcHBl bmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkgKiBqdXN0 IGEgc2luZ2xlIHN1YnBhdGggKGFuZCBoZW5jZSBhcmVuJ3QgZG9pbmcgYW55dGhpbmcKIAkJCQkg KiB1c2VmdWwpLgogCQkJCSAqLwotCQkJCWNoZWFwZXN0X3N0YXJ0dXAgPSBnZXRfc2luZ2xldG9u X2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXApOwotCQkJCWNoZWFwZXN0X3RvdGFsID0g Z2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCk7CisJCQkJY2hlYXBl c3Rfc3RhcnR1cCA9CisJCQkJCWdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3Rf c3RhcnR1cCwKKwkJCQkJCQkJCQkJCSAmc3RhcnR1cC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7 CisJCQkJY2hlYXBlc3RfdG90YWwgPQorCQkJCQlnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRo KGNoZWFwZXN0X3RvdGFsLAorCQkJCQkJCQkJCQkJICZ0b3RhbC5jaGlsZF9hcHBlbmRfcmVsaWRf c2V0cyk7CiAKLQkJCQlzdGFydHVwX3N1YnBhdGhzID0gbGFwcGVuZChzdGFydHVwX3N1YnBhdGhz LCBjaGVhcGVzdF9zdGFydHVwKTsKLQkJCQl0b3RhbF9zdWJwYXRocyA9IGxhcHBlbmQodG90YWxf c3VicGF0aHMsIGNoZWFwZXN0X3RvdGFsKTsKKwkJCQlzdGFydHVwLnN1YnBhdGhzID0gbGFwcGVu ZChzdGFydHVwLnN1YnBhdGhzLCBjaGVhcGVzdF9zdGFydHVwKTsKKwkJCQl0b3RhbC5zdWJwYXRo cyA9IGxhcHBlbmQodG90YWwuc3VicGF0aHMsIGNoZWFwZXN0X3RvdGFsKTsKIAogCQkJCWlmIChj aGVhcGVzdF9mcmFjdGlvbmFsKQogCQkJCXsKLQkJCQkJY2hlYXBlc3RfZnJhY3Rpb25hbCA9IGdl dF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfZnJhY3Rpb25hbCk7Ci0JCQkJCWZy YWN0aW9uYWxfc3VicGF0aHMgPSBsYXBwZW5kKGZyYWN0aW9uYWxfc3VicGF0aHMsIGNoZWFwZXN0 X2ZyYWN0aW9uYWwpOworCQkJCQljaGVhcGVzdF9mcmFjdGlvbmFsID0KKwkJCQkJCWdldF9zaW5n bGV0b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfZnJhY3Rpb25hbCwKKwkJCQkJCQkJCQkJCQkg JmZyYWN0aW9uYWwuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOworCQkJCQlmcmFjdGlvbmFsLnN1 YnBhdGhzID0KKwkJCQkJCWxhcHBlbmQoZnJhY3Rpb25hbC5zdWJwYXRocywgY2hlYXBlc3RfZnJh Y3Rpb25hbCk7CiAJCQkJfQogCQkJfQogCQkJZWxzZQpAQCAtMjA1NywxMyArMjA3MiwxNiBAQCBn ZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwsCiAJCQkJICogY2hpbGQgcGF0aHMgZm9yIHRoZSBNZXJnZUFwcGVuZC4KIAkJCQkgKi8K IAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXAsCi0JCQkJCQkJ CQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkJICAmc3RhcnR1cC5zdWJw YXRocywgTlVMTCwKKwkJCQkJCQkJCQkgICZzdGFydHVwLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRz KTsKIAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3RvdGFsLAotCQkJCQkJ CQkJCSAgJnRvdGFsX3N1YnBhdGhzLCBOVUxMKTsKKwkJCQkJCQkJCQkgICZ0b3RhbC5zdWJwYXRo cywgTlVMTCwKKwkJCQkJCQkJCQkgICZ0b3RhbC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAK IAkJCQlpZiAoY2hlYXBlc3RfZnJhY3Rpb25hbCkKIAkJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3Vi cGF0aChjaGVhcGVzdF9mcmFjdGlvbmFsLAotCQkJCQkJCQkJCQkgICZmcmFjdGlvbmFsX3N1YnBh dGhzLCBOVUxMKTsKKwkJCQkJCQkJCQkJICAmZnJhY3Rpb25hbC5zdWJwYXRocywgTlVMTCwKKwkJ CQkJCQkJCQkJICAmZnJhY3Rpb25hbC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCQl9CiAJ CX0KIApAQCAtMjA3Myw4ICsyMDkxLDcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJLyogV2Ugb25seSBuZWVkIEFw cGVuZCAqLwogCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9v dCwKIAkJCQkJCQkJCQkJCQkgIHJlbCwKLQkJCQkJCQkJCQkJCQkgIHN0YXJ0dXBfc3VicGF0aHMs Ci0JCQkJCQkJCQkJCQkJICBOSUwsCisJCQkJCQkJCQkJCQkJICBzdGFydHVwLAogCQkJCQkJCQkJ CQkJCSAgcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCSAgMCwK QEAgLTIwODMsMTkgKzIxMDAsMTcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJaWYgKHN0YXJ0dXBfbmVxX3RvdGFs KQogCQkJCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsCiAJ CQkJCQkJCQkJCQkJCSAgcmVsLAotCQkJCQkJCQkJCQkJCQkgIHRvdGFsX3N1YnBhdGhzLAotCQkJ CQkJCQkJCQkJCQkgIE5JTCwKKwkJCQkJCQkJCQkJCQkJICB0b3RhbCwKIAkJCQkJCQkJCQkJCQkJ ICBwYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCQkgIDAsCiAJ CQkJCQkJCQkJCQkJCSAgZmFsc2UsCiAJCQkJCQkJCQkJCQkJCSAgLTEpKTsKIAotCQkJaWYgKGZy YWN0aW9uYWxfc3VicGF0aHMgJiYgZnJhY3Rpb25fbmVxX3RvdGFsKQorCQkJaWYgKGZyYWN0aW9u YWwuc3VicGF0aHMgJiYgZnJhY3Rpb25fbmVxX3RvdGFsKQogCQkJCWFkZF9wYXRoKHJlbCwgKFBh dGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJCQkJCSAgcmVsLAotCQkJ CQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aHMsCi0JCQkJCQkJCQkJCQkJCSAgTklMLAor CQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWwsCiAJCQkJCQkJCQkJCQkJCSAgcGF0aGtleXMsCiAJ CQkJCQkJCQkJCQkJCSAgTlVMTCwKIAkJCQkJCQkJCQkJCQkJICAwLApAQCAtMjEwNywyMCArMjEy MiwyMyBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsCiAJCQkvKiBXZSBuZWVkIE1lcmdlQXBwZW5kICovCiAJCQlhZGRfcGF0 aChyZWwsIChQYXRoICopIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChyb290LAogCQkJCQkJCQkJ CQkJCQkJcmVsLAotCQkJCQkJCQkJCQkJCQkJc3RhcnR1cF9zdWJwYXRocywKKwkJCQkJCQkJCQkJ CQkJCXN0YXJ0dXAuc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJCQlzdGFydHVwLmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJCQkJcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJCQlO VUxMKSk7CiAJCQlpZiAoc3RhcnR1cF9uZXFfdG90YWwpCiAJCQkJYWRkX3BhdGgocmVsLCAoUGF0 aCAqKSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJCQkJCQlyZWws Ci0JCQkJCQkJCQkJCQkJCQkJdG90YWxfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJCQkJdG90YWwu c3VicGF0aHMsCisJCQkJCQkJCQkJCQkJCQkJdG90YWwuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMs CiAJCQkJCQkJCQkJCQkJCQkJcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJCQkJTlVMTCkpOwogCi0J CQlpZiAoZnJhY3Rpb25hbF9zdWJwYXRocyAmJiBmcmFjdGlvbl9uZXFfdG90YWwpCisJCQlpZiAo ZnJhY3Rpb25hbC5zdWJwYXRocyAmJiBmcmFjdGlvbl9uZXFfdG90YWwpCiAJCQkJYWRkX3BhdGgo cmVsLCAoUGF0aCAqKSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJ CQkJCQlyZWwsCi0JCQkJCQkJCQkJCQkJCQkJZnJhY3Rpb25hbF9zdWJwYXRocywKKwkJCQkJCQkJ CQkJCQkJCQlmcmFjdGlvbmFsLnN1YnBhdGhzLAorCQkJCQkJCQkJCQkJCQkJCWZyYWN0aW9uYWwu Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkJCQkJCQkJCQkJcGF0aGtleXMsCiAJCQkJ CQkJCQkJCQkJCQkJTlVMTCkpOwogCQl9CkBAIC0yMjIzLDcgKzIyNDEsOCBAQCBnZXRfY2hlYXBl c3RfcGFyYW1ldGVyaXplZF9jaGlsZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwsCiAgKiBwYXRocykuCiAgKi8KIHN0YXRpYyB2b2lkCi1hY2N1bXVsYXRlX2FwcGVuZF9z dWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0 aHMpCithY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRo cywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMsCisJCQkJCQkgIExpc3QgKipjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cykKIHsKIAlpZiAoSXNBKHBhdGgsIEFwcGVuZFBhdGgpKQogCXsKQEAgLTIyMzIs NiArMjI1MSwxMSBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3Qg KipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCWlmICghYXBhdGgtPnBhdGgu cGFyYWxsZWxfYXdhcmUgfHwgYXBhdGgtPmZpcnN0X3BhcnRpYWxfcGF0aCA9PSAwKQogCQl7CiAJ CQkqc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3VicGF0aHMsIGFwYXRoLT5zdWJwYXRocyk7CisJ CQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzLCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CisJCQkqY2hpbGRfYXBwZW5kX3JlbGlk X3NldHMgPQorCQkJCWxpc3RfY29uY2F0KCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJ CQlhcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOwogCQkJcmV0dXJuOwogCQl9CiAJCWVs c2UgaWYgKHNwZWNpYWxfc3VicGF0aHMgIT0gTlVMTCkKQEAgLTIyNDYsNiArMjI3MCwxMSBAQCBh Y2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlz dCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCQkJCQkJCQkJCQkgIGFwYXRoLT5maXJzdF9wYXJ0aWFs X3BhdGgpOwogCQkJKnNwZWNpYWxfc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3BlY2lhbF9zdWJw YXRocywKIAkJCQkJCQkJCQkJbmV3X3NwZWNpYWxfc3VicGF0aHMpOworCQkJKmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzID0KKwkJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgcGF0 aC0+cGFyZW50LT5yZWxpZHMpOworCQkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQls aXN0X2NvbmNhdCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCisJCQkJCQkJYXBhdGgtPmNoaWxk X2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTIyNTQsNiArMjI4 MywxMSBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJw YXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCU1lcmdlQXBwZW5kUGF0aCAqbXBhdGgg PSAoTWVyZ2VBcHBlbmRQYXRoICopIHBhdGg7CiAKIAkJKnN1YnBhdGhzID0gbGlzdF9jb25jYXQo KnN1YnBhdGhzLCBtcGF0aC0+c3VicGF0aHMpOworCQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMg PQorCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHBhdGgtPnBhcmVudC0+cmVs aWRzKTsKKwkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCWxpc3RfY29uY2F0KCpjaGls ZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCW1wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0 cyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIyNjUsMTAgKzIyOTksMTUgQEAgYWNjdW11bGF0ZV9h cHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoqc3VicGF0aHMsIExpc3QgKipzcGVjaWFs X3N1YnBhdGhzKQogICoJCVJldHVybnMgdGhlIHNpbmdsZSBzdWJwYXRoIG9mIGFuIEFwcGVuZC9N ZXJnZUFwcGVuZCwgb3IganVzdAogICoJCXJldHVybiAncGF0aCcgaWYgaXQncyBub3QgYSBzaW5n bGUgc3ViLXBhdGggQXBwZW5kL01lcmdlQXBwZW5kLgogICoKKyAqIEFzIGEgc2lkZSBlZmZlY3Qs IHdoZW5ldmVyIHdlIHJldHVybiBhIHNpbmdsZSBzdWJwYXRoIHJhdGhlciB0aGFuIHRoZQorICog b3JpZ2luYWwgcGF0aCwgYWRkIHRoZSByZWxpZCBzZXQgZm9yIHRoZSBvcmlnaW5hbCBwYXRoIHRv CisgKiBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgc28gdGhhdCB0aG9zZSByZWxpZHMgZG9uJ3Qg ZW50aXJlbHkgZGlzYXBwZWFyCisgKiBmcm9tIHRoZSBmaW5hbCBwbGFuLgorICoKICAqIE5vdGU6 ICdwYXRoJyBtdXN0IG5vdCBiZSBhIHBhcmFsbGVsLWF3YXJlIHBhdGguCiAgKi8KIHN0YXRpYyBQ YXRoICoKLWdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCkKK2dldF9zaW5n bGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwgTGlzdCAqKmNoaWxkX2FwcGVuZF9yZWxp ZF9zZXRzKQogewogCUFzc2VydCghcGF0aC0+cGFyYWxsZWxfYXdhcmUpOwogCkBAIC0yMjc3LDE0 ICsyMzE2LDIyIEBAIGdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCkKIAkJ QXBwZW5kUGF0aCAqYXBhdGggPSAoQXBwZW5kUGF0aCAqKSBwYXRoOwogCiAJCWlmIChsaXN0X2xl bmd0aChhcGF0aC0+c3VicGF0aHMpID09IDEpCisJCXsKKwkJCSpjaGlsZF9hcHBlbmRfcmVsaWRf c2V0cyA9CisJCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHBhdGgtPnBhcmVu dC0+cmVsaWRzKTsKIAkJCXJldHVybiAoUGF0aCAqKSBsaW5pdGlhbChhcGF0aC0+c3VicGF0aHMp OworCQl9CiAJfQogCWVsc2UgaWYgKElzQShwYXRoLCBNZXJnZUFwcGVuZFBhdGgpKQogCXsKIAkJ TWVyZ2VBcHBlbmRQYXRoICptcGF0aCA9IChNZXJnZUFwcGVuZFBhdGggKikgcGF0aDsKIAogCQlp ZiAobGlzdF9sZW5ndGgobXBhdGgtPnN1YnBhdGhzKSA9PSAxKQorCQl7CisJCQkqY2hpbGRfYXBw ZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLCBw YXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1cm4gKFBhdGggKikgbGluaXRpYWwobXBhdGgt PnN1YnBhdGhzKTsKKwkJfQogCX0KIAogCXJldHVybiBwYXRoOwpAQCAtMjMwNCw2ICsyMzUxLDgg QEAgZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoKQogc3RhdGljIHZvaWQK IHNldF9kdW1teV9yZWxfcGF0aGxpc3QoUmVsT3B0SW5mbyAqcmVsKQogeworCUFwcGVuZFBhdGhJ bnB1dCBpbiA9IHswfTsKKwogCS8qIFNldCBkdW1teSBzaXplIGVzdGltYXRlcyAtLS0gd2UgbGVh dmUgYXR0cl93aWR0aHNbXSBhcyB6ZXJvZXMgKi8KIAlyZWwtPnJvd3MgPSAwOwogCXJlbC0+cmVs dGFyZ2V0LT53aWR0aCA9IDA7CkBAIC0yMzEzLDcgKzIzNjIsNyBAQCBzZXRfZHVtbXlfcmVsX3Bh dGhsaXN0KFJlbE9wdEluZm8gKnJlbCkKIAlyZWwtPnBhcnRpYWxfcGF0aGxpc3QgPSBOSUw7CiAK IAkvKiBTZXQgdXAgdGhlIGR1bW15IHBhdGggKi8KLQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNy ZWF0ZV9hcHBlbmRfcGF0aChOVUxMLCByZWwsIE5JTCwgTklMLAorCWFkZF9wYXRoKHJlbCwgKFBh dGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJlbCwgaW4sCiAJCQkJCQkJCQkJCSAgTklM LCByZWwtPmxhdGVyYWxfcmVsaWRzLAogCQkJCQkJCQkJCQkgIDAsIGZhbHNlLCAtMSkpOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwppbmRleCAyNjE1NjUxYzA3My4uNDQzZTJk Y2E3YzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwpAQCAtMTUxMyw2ICsx NTEzLDcgQEAgdm9pZAogbWFya19kdW1teV9yZWwoUmVsT3B0SW5mbyAqcmVsKQogewogCU1lbW9y eUNvbnRleHQgb2xkY29udGV4dDsKKwlBcHBlbmRQYXRoSW5wdXQgaW4gPSB7MH07CiAKIAkvKiBB bHJlYWR5IG1hcmtlZD8gKi8KIAlpZiAoaXNfZHVtbXlfcmVsKHJlbCkpCkBAIC0xNTI5LDcgKzE1 MzAsNyBAQCBtYXJrX2R1bW15X3JlbChSZWxPcHRJbmZvICpyZWwpCiAJcmVsLT5wYXJ0aWFsX3Bh dGhsaXN0ID0gTklMOwogCiAJLyogU2V0IHVwIHRoZSBkdW1teSBwYXRoICovCi0JYWRkX3BhdGgo cmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgoTlVMTCwgcmVsLCBOSUwsIE5JTCwKKwlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChOVUxMLCByZWwsIGluLAog CQkJCQkJCQkJCQkgIE5JTCwgcmVsLT5sYXRlcmFsX3JlbGlkcywKIAkJCQkJCQkJCQkJICAwLCBm YWxzZSwgLTEpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3Jl YXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4 IGMyNmU4NDFmNTM3Li43NDg5NDY0N2NhYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYwpAQCAtMTI2Myw2ICsxMjYzLDcgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBsYW5u ZXJJbmZvICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAlwbGFuLT5w bGFuLmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5wbGFuLnJpZ2h0dHJlZSA9IE5VTEw7CiAJcGxh bi0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CisJcGxhbi0+Y2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHMgPSBiZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogCiAJaWYgKHBhdGhrZXlz ICE9IE5JTCkKIAl7CkBAIC0xNDc1LDYgKzE0NzYsNyBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3Bs YW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBsYW4t PmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5yaWdodHRyZWUgPSBOVUxMOwogCW5vZGUtPmFwcHJl bGlkcyA9IHJlbC0+cmVsaWRzOworCW5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0gYmVz dF9wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAogCS8qCiAJICogQ29tcHV0ZSBzb3J0 IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVkLgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGU4NjI3OTJlYjQ1Li5kNGJmOGE5 NTVkMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDA2Miw3ICs0MDYy LDcgQEAgY3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJICogbWlnaHQgZ2V0IGJldHdlZW4gMCBhbmQgTiBv dXRwdXQgcm93cy4gT2ZmaGFuZCBJIHRoaW5rIHRoYXQncwogCQkgKiBkZXNpcmVkLikKIAkJICov Ci0JCUxpc3QJICAgKnBhdGhzID0gTklMOworCQlBcHBlbmRQYXRoSW5wdXQgYXBwZW5kID0gezB9 OwogCiAJCXdoaWxlICgtLW5yb3dzID49IDApCiAJCXsKQEAgLTQwNzAsMTMgKzQwNzAsMTIgQEAg Y3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKmlucHV0X3JlbCwKIAkJCQljcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgocm9vdCwgZ3Jv dXBlZF9yZWwsCiAJCQkJCQkJCQkJIGdyb3VwZWRfcmVsLT5yZWx0YXJnZXQsCiAJCQkJCQkJCQkJ IChMaXN0ICopIHBhcnNlLT5oYXZpbmdRdWFsKTsKLQkJCXBhdGhzID0gbGFwcGVuZChwYXRocywg cGF0aCk7CisJCQlhcHBlbmQuc3VicGF0aHMgPSBsYXBwZW5kKGFwcGVuZC5zdWJwYXRocywgcGF0 aCk7CiAJCX0KIAkJcGF0aCA9IChQYXRoICopCiAJCQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwK IAkJCQkJCQkgICBncm91cGVkX3JlbCwKLQkJCQkJCQkgICBwYXRocywKLQkJCQkJCQkgICBOSUws CisJCQkJCQkJICAgYXBwZW5kLAogCQkJCQkJCSAgIE5JTCwKIAkJCQkJCQkgICBOVUxMLAogCQkJ CQkJCSAgIDAsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5p b24uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jCmluZGV4IDc4Yzk1 YzM2ZGQ1Li5mNTBjMjk2ZTNkOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3By ZXAvcHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9u LmMKQEAgLTY5Niw5ICs2OTYsOSBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25T dG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJTGlzdENlbGwgICAqbGM7CiAJTGlzdENlbGwg ICAqbGMyOwogCUxpc3RDZWxsICAgKmxjMzsKLQlMaXN0CSAgICpjaGVhcGVzdF9wYXRobGlzdCA9 IE5JTDsKLQlMaXN0CSAgICpvcmRlcmVkX3BhdGhsaXN0ID0gTklMOwotCUxpc3QJICAgKnBhcnRp YWxfcGF0aGxpc3QgPSBOSUw7CisJQXBwZW5kUGF0aElucHV0IGNoZWFwZXN0ID0gezB9OworCUFw cGVuZFBhdGhJbnB1dCBvcmRlcmVkID0gezB9OworCUFwcGVuZFBhdGhJbnB1dCBwYXJ0aWFsID0g ezB9OwogCWJvb2wJCXBhcnRpYWxfcGF0aHNfdmFsaWQgPSB0cnVlOwogCWJvb2wJCWNvbnNpZGVy X3BhcmFsbGVsID0gdHJ1ZTsKIAlMaXN0CSAgICpyZWxsaXN0OwpAQCAtNzgzLDcgKzc4Myw3IEBA IGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAq cm9vdCwKIAkJaWYgKGlzX2R1bW15X3JlbChyZWwpKQogCQkJY29udGludWU7CiAKLQkJY2hlYXBl c3RfcGF0aGxpc3QgPSBsYXBwZW5kKGNoZWFwZXN0X3BhdGhsaXN0LAorCQljaGVhcGVzdC5zdWJw YXRocyA9IGxhcHBlbmQoY2hlYXBlc3Quc3VicGF0aHMsCiAJCQkJCQkJCQlyZWwtPmNoZWFwZXN0 X3RvdGFsX3BhdGgpOwogCiAJCWlmICh0cnlfc29ydGVkKQpAQCAtNzk1LDcgKzc5NSw3IEBAIGdl bmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9v dCwKIAkJCQkJCQkJCQkJCQkJICBmYWxzZSk7CiAKIAkJCWlmIChvcmRlcmVkX3BhdGggIT0gTlVM TCkKLQkJCQlvcmRlcmVkX3BhdGhsaXN0ID0gbGFwcGVuZChvcmRlcmVkX3BhdGhsaXN0LCBvcmRl cmVkX3BhdGgpOworCQkJCW9yZGVyZWQuc3VicGF0aHMgPSBsYXBwZW5kKG9yZGVyZWQuc3VicGF0 aHMsIG9yZGVyZWRfcGF0aCk7CiAJCQllbHNlCiAJCQl7CiAJCQkJLyoKQEAgLTgxOCwyMCArODE4 LDIwIEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVy SW5mbyAqcm9vdCwKIAkJCWVsc2UgaWYgKHJlbC0+cGFydGlhbF9wYXRobGlzdCA9PSBOSUwpCiAJ CQkJcGFydGlhbF9wYXRoc192YWxpZCA9IGZhbHNlOwogCQkJZWxzZQotCQkJCXBhcnRpYWxfcGF0 aGxpc3QgPSBsYXBwZW5kKHBhcnRpYWxfcGF0aGxpc3QsCi0JCQkJCQkJCQkJICAgbGluaXRpYWwo cmVsLT5wYXJ0aWFsX3BhdGhsaXN0KSk7CisJCQkJcGFydGlhbC5wYXJ0aWFsX3N1YnBhdGhzID0g bGFwcGVuZChwYXJ0aWFsLnBhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkgICBsaW5pdGlh bChyZWwtPnBhcnRpYWxfcGF0aGxpc3QpKTsKIAkJfQogCX0KIAogCS8qIEJ1aWxkIHJlc3VsdCBy ZWxhdGlvbi4gKi8KIAlyZXN1bHRfcmVsID0gZmV0Y2hfdXBwZXJfcmVsKHJvb3QsIFVQUEVSUkVM X1NFVE9QLCByZWxpZHMpOwogCXJlc3VsdF9yZWwtPnJlbHRhcmdldCA9IGNyZWF0ZV9zZXRvcF9w YXRodGFyZ2V0KHJvb3QsIHRsaXN0LAotCQkJCQkJCQkJCQkJCWNoZWFwZXN0X3BhdGhsaXN0KTsK KwkJCQkJCQkJCQkJCQljaGVhcGVzdC5zdWJwYXRocyk7CiAJcmVzdWx0X3JlbC0+Y29uc2lkZXJf cGFyYWxsZWwgPSBjb25zaWRlcl9wYXJhbGxlbDsKIAlyZXN1bHRfcmVsLT5jb25zaWRlcl9zdGFy dHVwID0gKHJvb3QtPnR1cGxlX2ZyYWN0aW9uID4gMCk7CiAKIAkvKiBJZiBhbGwgVU5JT04gY2hp bGRyZW4gd2VyZSBkdW1teSByZWxzLCBtYWtlIHRoZSByZXN1bHRpbmcgcmVsIGR1bW15ICovCi0J aWYgKGNoZWFwZXN0X3BhdGhsaXN0ID09IE5JTCkKKwlpZiAoY2hlYXBlc3Quc3VicGF0aHMgPT0g TklMKQogCXsKIAkJbWFya19kdW1teV9yZWwocmVzdWx0X3JlbCk7CiAKQEAgLTg0Miw4ICs4NDIs OCBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lcklu Zm8gKnJvb3QsCiAJICogQXBwZW5kIHRoZSBjaGlsZCByZXN1bHRzIHRvZ2V0aGVyIHVzaW5nIHRo ZSBjaGVhcGVzdCBwYXRocyBmcm9tIGVhY2gKIAkgKiB1bmlvbiBjaGlsZC4KIAkgKi8KLQlhcGF0 aCA9IChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBjaGVhcGVz dF9wYXRobGlzdCwKLQkJCQkJCQkJCQlOSUwsIE5JTCwgTlVMTCwgMCwgZmFsc2UsIC0xKTsKKwlh cGF0aCA9IChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBjaGVh cGVzdCwKKwkJCQkJCQkJCQlOSUwsIE5VTEwsIDAsIGZhbHNlLCAtMSk7CiAKIAkvKgogCSAqIEVz dGltYXRlIG51bWJlciBvZiBncm91cHMuICBGb3Igbm93IHdlIGp1c3QgYXNzdW1lIHRoZSBvdXRw dXQgaXMgdW5pcXVlCkBAIC04NjIsNyArODYyLDcgQEAgZ2VuZXJhdGVfdW5pb25fcGF0aHMoU2V0 T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQlpbnQJCQlwYXJhbGxlbF93 b3JrZXJzID0gMDsKIAogCQkvKiBGaW5kIHRoZSBoaWdoZXN0IG51bWJlciBvZiB3b3JrZXJzIHJl cXVlc3RlZCBmb3IgYW55IHN1YnBhdGguICovCi0JCWZvcmVhY2gobGMsIHBhcnRpYWxfcGF0aGxp c3QpCisJCWZvcmVhY2gobGMsIHBhcnRpYWwucGFydGlhbF9zdWJwYXRocykKIAkJewogCQkJUGF0 aAkgICAqc3VicGF0aCA9IGxmaXJzdChsYyk7CiAKQEAgLTg4MSwxNCArODgxLDE0IEBAIGdlbmVy YXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9vdCwK IAkJaWYgKGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQpCiAJCXsKIAkJCXBhcmFsbGVsX3dvcmtlcnMg PSBNYXgocGFyYWxsZWxfd29ya2VycywKLQkJCQkJCQkJICAgcGdfbGVmdG1vc3Rfb25lX3BvczMy KGxpc3RfbGVuZ3RoKHBhcnRpYWxfcGF0aGxpc3QpKSArIDEpOworCQkJCQkJCQkgICBwZ19sZWZ0 bW9zdF9vbmVfcG9zMzIobGlzdF9sZW5ndGgocGFydGlhbC5wYXJ0aWFsX3N1YnBhdGhzKSkgKyAx KTsKIAkJCXBhcmFsbGVsX3dvcmtlcnMgPSBNaW4ocGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkJ ICAgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcik7CiAJCX0KIAkJQXNzZXJ0KHBhcmFs bGVsX3dvcmtlcnMgPiAwKTsKIAogCQlwYXBhdGggPSAoUGF0aCAqKQotCQkJY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlc3VsdF9yZWwsIE5JTCwgcGFydGlhbF9wYXRobGlzdCwKKwkJCWNyZWF0 ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBwYXJ0aWFsLAogCQkJCQkJCSAgIE5JTCwg TlVMTCwgcGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkgICBlbmFibGVfcGFyYWxsZWxfYXBwZW5k LCAtMSk7CiAJCWdwYXRoID0gKFBhdGggKikKQEAgLTkwMSw3ICs5MDEsNyBAQCBnZW5lcmF0ZV91 bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCWRv dWJsZQkJZE51bUdyb3VwczsKIAkJYm9vbAkJY2FuX3NvcnQgPSBncm91cGluZ19pc19zb3J0YWJs ZShncm91cExpc3QpOwogCQlib29sCQljYW5faGFzaCA9IGdyb3VwaW5nX2lzX2hhc2hhYmxlKGdy b3VwTGlzdCk7Ci0JCVBhdGgJICAgKmZpcnN0X3BhdGggPSBsaW5pdGlhbChjaGVhcGVzdF9wYXRo bGlzdCk7CisJCVBhdGgJICAgKmZpcnN0X3BhdGggPSBsaW5pdGlhbChjaGVhcGVzdC5zdWJwYXRo cyk7CiAKIAkJLyoKIAkJICogRXN0aW1hdGUgdGhlIG51bWJlciBvZiBVTklPTiBvdXRwdXQgcm93 cy4gIEluIHRoZSBjYXNlIHdoZW4gb25seSBhCkBAIC05MTEsNyArOTExLDcgQEAgZ2VuZXJhdGVf dW5pb25fcGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkg KiBjb250YWluIFZhcnMgd2l0aCB2YXJubz09MCwgd2hpY2ggZXN0aW1hdGVfbnVtX2dyb3Vwcygp IHdvdWxkbid0CiAJCSAqIGxpa2UuCiAJCSAqLwotCQlpZiAobGlzdF9sZW5ndGgoY2hlYXBlc3Rf cGF0aGxpc3QpID09IDEgJiYKKwkJaWYgKGxpc3RfbGVuZ3RoKGNoZWFwZXN0LnN1YnBhdGhzKSA9 PSAxICYmCiAJCQlmaXJzdF9wYXRoLT5wYXJlbnQtPnJlbG9wdGtpbmQgIT0gUkVMT1BUX1VQUEVS X1JFTCkKIAkJewogCQkJZE51bUdyb3VwcyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwKQEAg LTEwMTcsNyArMTAxNyw4IEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQg Km9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9tZXJn ZV9hcHBlbmRfcGF0aChyb290LAogCQkJCQkJCQkJCQkJCSByZXN1bHRfcmVsLAotCQkJCQkJCQkJ CQkJCSBvcmRlcmVkX3BhdGhsaXN0LAorCQkJCQkJCQkJCQkJCSBvcmRlcmVkLnN1YnBhdGhzLAor CQkJCQkJCQkJCQkJCSBOSUwsCiAJCQkJCQkJCQkJCQkJIHVuaW9uX3BhdGhrZXlzLAogCQkJCQkJ CQkJCQkJCSBOVUxMKTsKIApAQCAtMTIxNiw2ICsxMjE3LDkgQEAgZ2VuZXJhdGVfbm9udW5pb25f cGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkJaWYgKG9w LT5hbGwpCiAJCQl7CiAJCQkJUGF0aAkgICAqYXBhdGg7CisJCQkJQXBwZW5kUGF0aElucHV0IGFw cGVuZCA9IHswfTsKKworCQkJCWFwcGVuZC5zdWJwYXRocyA9IGxpc3RfbWFrZTEobHBhdGgpOwog CiAJCQkJLyoKIAkJCQkgKiBFWENFUFQgQUxMOiBJZiB0aGUgcmlnaHQtaGFuZCBpbnB1dCBpcyBk dW1teSB0aGVuIHdlIGNhbgpAQCAtMTIyNCw4ICsxMjI4LDkgQEAgZ2VuZXJhdGVfbm9udW5pb25f cGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCSAqIGJl dHdlZW4gdGhlIHNldCBvcCB0YXJnZXRsaXN0IGFuZCB0aGUgdGFyZ2V0bGlzdCBvZiB0aGUKIAkJ CQkgKiBsZWZ0IGlucHV0LiAgVGhlIEFwcGVuZCB3aWxsIGJlIHJlbW92ZWQgaW4gc2V0cmVmcy5j LgogCQkJCSAqLwotCQkJCWFwYXRoID0gKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3Qs IHJlc3VsdF9yZWwsIGxpc3RfbWFrZTEobHBhdGgpLAotCQkJCQkJCQkJCQkJCU5JTCwgTklMLCBO VUxMLCAwLCBmYWxzZSwgLTEpOworCQkJCWFwYXRoID0gKFBhdGggKikgY3JlYXRlX2FwcGVuZF9w YXRoKHJvb3QsIHJlc3VsdF9yZWwsCisJCQkJCQkJCQkJCQkJYXBwZW5kLCBOSUwsIE5VTEwsIDAs CisJCQkJCQkJCQkJCQkJZmFsc2UsIC0xKTsKIAogCQkJCWFkZF9wYXRoKHJlc3VsdF9yZWwsIGFw YXRoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXggNzI5NTQzOGFk MjAuLmJiMzAxZDU5NjkwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w YXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKQEAg LTEyOTgsNyArMTI5OCw3IEBAIGNyZWF0ZV90aWRyYW5nZXNjYW5fcGF0aChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogQXBwZW5kUGF0aCAqCiBjcmVhdGVfYXBwZW5kX3BhdGgo UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJICAgUmVsT3B0SW5mbyAqcmVsLAotCQkJCSAgIExpc3Qg KnN1YnBhdGhzLCBMaXN0ICpwYXJ0aWFsX3N1YnBhdGhzLAorCQkJCSAgIEFwcGVuZFBhdGhJbnB1 dCBpbnB1dCwKIAkJCQkgICBMaXN0ICpwYXRoa2V5cywgUmVsaWRzIHJlcXVpcmVkX291dGVyLAog CQkJCSAgIGludCBwYXJhbGxlbF93b3JrZXJzLCBib29sIHBhcmFsbGVsX2F3YXJlLAogCQkJCSAg IGRvdWJsZSByb3dzKQpAQCAtMTMwOCw2ICsxMzA4LDcgQEAgY3JlYXRlX2FwcGVuZF9wYXRoKFBs YW5uZXJJbmZvICpyb290LAogCiAJQXNzZXJ0KCFwYXJhbGxlbF9hd2FyZSB8fCBwYXJhbGxlbF93 b3JrZXJzID4gMCk7CiAKKwlwYXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBpbnB1 dC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRf QXBwZW5kOwogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJlbDsKIAlwYXRobm9kZS0+cGF0aC5w YXRodGFyZ2V0ID0gcmVsLT5yZWx0YXJnZXQ7CkBAIC0xMzIzLDcgKzEzMjQsNyBAQCBjcmVhdGVf YXBwZW5kX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJICogb24gdGhlIHNpbXBsZXIgZ2V0X2Fw cGVuZHJlbF9wYXJhbXBhdGhpbmZvLiAgVGhlcmUncyBubyBwb2ludCBpbiBkb2luZwogCSAqIHRo ZSBtb3JlIGV4cGVuc2l2ZSB0aGluZyBmb3IgYSBkdW1teSBwYXRoLCBlaXRoZXIuCiAJICovCi0J aWYgKHJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfQkFTRVJFTCAmJiByb290ICYmIHN1YnBhdGhz ICE9IE5JTCkKKwlpZiAocmVsLT5yZWxvcHRraW5kID09IFJFTE9QVF9CQVNFUkVMICYmIHJvb3Qg JiYgaW5wdXQuc3VicGF0aHMgIT0gTklMKQogCQlwYXRobm9kZS0+cGF0aC5wYXJhbV9pbmZvID0g Z2V0X2Jhc2VyZWxfcGFyYW1wYXRoaW5mbyhyb290LAogCQkJCQkJCQkJCQkJCQkJICByZWwsCiAJ CQkJCQkJCQkJCQkJCQkgIHJlcXVpcmVkX291dGVyKTsKQEAgLTEzNTQsMTEgKzEzNTUsMTEgQEAg Y3JlYXRlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkgKi8KIAkJQXNzZXJ0KHBh dGhrZXlzID09IE5JTCk7CiAKLQkJbGlzdF9zb3J0KHN1YnBhdGhzLCBhcHBlbmRfdG90YWxfY29z dF9jb21wYXJlKTsKLQkJbGlzdF9zb3J0KHBhcnRpYWxfc3VicGF0aHMsIGFwcGVuZF9zdGFydHVw X2Nvc3RfY29tcGFyZSk7CisJCWxpc3Rfc29ydChpbnB1dC5zdWJwYXRocywgYXBwZW5kX3RvdGFs X2Nvc3RfY29tcGFyZSk7CisJCWxpc3Rfc29ydChpbnB1dC5wYXJ0aWFsX3N1YnBhdGhzLCBhcHBl bmRfc3RhcnR1cF9jb3N0X2NvbXBhcmUpOwogCX0KLQlwYXRobm9kZS0+Zmlyc3RfcGFydGlhbF9w YXRoID0gbGlzdF9sZW5ndGgoc3VicGF0aHMpOwotCXBhdGhub2RlLT5zdWJwYXRocyA9IGxpc3Rf Y29uY2F0KHN1YnBhdGhzLCBwYXJ0aWFsX3N1YnBhdGhzKTsKKwlwYXRobm9kZS0+Zmlyc3RfcGFy dGlhbF9wYXRoID0gbGlzdF9sZW5ndGgoaW5wdXQuc3VicGF0aHMpOworCXBhdGhub2RlLT5zdWJw YXRocyA9IGxpc3RfY29uY2F0KGlucHV0LnN1YnBhdGhzLCBpbnB1dC5wYXJ0aWFsX3N1YnBhdGhz KTsKIAogCS8qCiAJICogQXBwbHkgcXVlcnktd2lkZSBMSU1JVCBpZiBrbm93biBhbmQgcGF0aCBp cyBmb3Igc29sZSBiYXNlIHJlbGF0aW9uLgpAQCAtMTQ3MCw2ICsxNDcxLDcgQEAgTWVyZ2VBcHBl bmRQYXRoICoKIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCSBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkgTGlzdCAqc3VicGF0aHMsCisJCQkJCQkgTGlz dCAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkgTGlzdCAqcGF0aGtleXMsCiAJCQkJ CQkgUmVsaWRzIHJlcXVpcmVkX291dGVyKQogewpAQCAtMTQ4NSw2ICsxNDg3LDcgQEAgY3JlYXRl X21lcmdlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCUFzc2VydChibXNf aXNfZW1wdHkocmVsLT5sYXRlcmFsX3JlbGlkcykgJiYgYm1zX2lzX2VtcHR5KHJlcXVpcmVkX291 dGVyKSk7CiAKKwlwYXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBjaGlsZF9hcHBl bmRfcmVsaWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfTWVyZ2VBcHBlbmQ7 CiAJcGF0aG5vZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJn ZXQgPSByZWwtPnJlbHRhcmdldDsKQEAgLTM5MzIsMTEgKzM5MzUsMTIgQEAgcmVwYXJhbWV0ZXJp emVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqcGF0aCwKIAkJY2FzZSBUX0FwcGVuZDoK IAkJCXsKIAkJCQlBcHBlbmRQYXRoICphcGF0aCA9IChBcHBlbmRQYXRoICopIHBhdGg7Ci0JCQkJ TGlzdAkgICAqY2hpbGRwYXRocyA9IE5JTDsKLQkJCQlMaXN0CSAgICpwYXJ0aWFscGF0aHMgPSBO SUw7CisJCQkJQXBwZW5kUGF0aElucHV0IG5ld19hcHBlbmQgPSB7MH07CiAJCQkJaW50CQkJaTsK IAkJCQlMaXN0Q2VsbCAgICpsYzsKIAorCQkJCW5ld19hcHBlbmQuY2hpbGRfYXBwZW5kX3JlbGlk X3NldHMgPSBhcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisKIAkJCQkvKiBSZXBhcmFt ZXRlcml6ZSB0aGUgY2hpbGRyZW4gKi8KIAkJCQlpID0gMDsKIAkJCQlmb3JlYWNoKGxjLCBhcGF0 aC0+c3VicGF0aHMpCkBAIC0zOTUwLDEzICszOTU0LDEzIEBAIHJlcGFyYW1ldGVyaXplX3BhdGgo UGxhbm5lckluZm8gKnJvb3QsIFBhdGggKnBhdGgsCiAJCQkJCQlyZXR1cm4gTlVMTDsKIAkJCQkJ LyogV2UgaGF2ZSB0byByZS1zcGxpdCB0aGUgcmVndWxhciBhbmQgcGFydGlhbCBwYXRocyAqLwog CQkJCQlpZiAoaSA8IGFwYXRoLT5maXJzdF9wYXJ0aWFsX3BhdGgpCi0JCQkJCQljaGlsZHBhdGhz ID0gbGFwcGVuZChjaGlsZHBhdGhzLCBzcGF0aCk7CisJCQkJCQluZXdfYXBwZW5kLnN1YnBhdGhz ID0gbGFwcGVuZChuZXdfYXBwZW5kLnN1YnBhdGhzLCBzcGF0aCk7CiAJCQkJCWVsc2UKLQkJCQkJ CXBhcnRpYWxwYXRocyA9IGxhcHBlbmQocGFydGlhbHBhdGhzLCBzcGF0aCk7CisJCQkJCQluZXdf YXBwZW5kLnBhcnRpYWxfc3VicGF0aHMgPSBsYXBwZW5kKG5ld19hcHBlbmQucGFydGlhbF9zdWJw YXRocywgc3BhdGgpOwogCQkJCQlpKys7CiAJCQkJfQogCQkJCXJldHVybiAoUGF0aCAqKQotCQkJ CQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBjaGlsZHBhdGhzLCBwYXJ0aWFscGF0aHMs CisJCQkJCWNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIG5ld19hcHBlbmQsCiAJCQkJCQkJ CQkgICBhcGF0aC0+cGF0aC5wYXRoa2V5cywgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkgICBh cGF0aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzLAogCQkJCQkJCQkJICAgYXBhdGgtPnBhdGgucGFy YWxsZWxfYXdhcmUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDljYzVkMmU3NDExLi5jMTc1ZWU5 NWI2OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTIyNTAsNiArMjI1MCwxMiBAQCB0eXBlZGVm IHN0cnVjdCBDdXN0b21QYXRoCiAgKiBGb3IgcGFydGlhbCBBcHBlbmQsICdzdWJwYXRocycgY29u dGFpbnMgbm9uLXBhcnRpYWwgc3VicGF0aHMgZm9sbG93ZWQgYnkKICAqIHBhcnRpYWwgc3VicGF0 aHMuCiAgKgorICogV2hlbmV2ZXIgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aCgpIGFsbG93cyB1 cyB0byBjb25zb2xpZGF0ZSBtdWx0aXBsZQorICogbGV2ZWxzIG9mIEFwcGVuZCBwYXRocyBkb3du IHRvIG9uZSwgd2Ugc3RvcmUgdGhlIFJUSSBzZXRzIGZvciB0aGUgb21pdHRlZAorICogcGF0aHMg aW4gY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMuIFRoaXMgaXMgbm90IG5lY2Vzc2FyeSBmb3IgcGxh bm5pbmcgb3IKKyAqIGV4ZWN1dGlvbjsgd2UgZG8gaXQgZm9yIHRoZSBiZW5lZml0IG9mIGNvZGUg dGhhdCB3YW50cyB0byBpbnNwZWN0IHRoZQorICogZmluYWwgcGxhbiBhbmQgdW5kZXJzdGFuZCBo b3cgaXQgY2FtZSB0byBiZS4KKyAqCiAgKiBOb3RlOiBpdCBpcyBwb3NzaWJsZSBmb3IgInN1YnBh dGhzIiB0byBjb250YWluIG9ubHkgb25lLCBvciBldmVuIG5vLAogICogZWxlbWVudHMuICBUaGVz ZSBjYXNlcyBhcmUgb3B0aW1pemVkIGR1cmluZyBjcmVhdGVfYXBwZW5kX3BsYW4uCiAgKiBJbiBw YXJ0aWN1bGFyLCBhbiBBcHBlbmRQYXRoIHdpdGggbm8gc3VicGF0aHMgaXMgYSAiZHVtbXkiIHBh dGggdGhhdApAQCAtMjI2NSw2ICsyMjcxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kUGF0aAog CS8qIEluZGV4IG9mIGZpcnN0IHBhcnRpYWwgcGF0aCBpbiBzdWJwYXRoczsgbGlzdF9sZW5ndGgo c3VicGF0aHMpIGlmIG5vbmUgKi8KIAlpbnQJCQlmaXJzdF9wYXJ0aWFsX3BhdGg7CiAJQ2FyZGlu YWxpdHkgbGltaXRfdHVwbGVzOwkvKiBoYXJkIGxpbWl0IG9uIG91dHB1dCB0dXBsZXMsIG9yIC0x ICovCisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiB9IEFwcGVuZFBhdGg7CiAK ICNkZWZpbmUgSVNfRFVNTVlfQVBQRU5EKHApIFwKQEAgLTIyODEsMTIgKzIyODgsMTUgQEAgZXh0 ZXJuIGJvb2wgaXNfZHVtbXlfcmVsKFJlbE9wdEluZm8gKnJlbCk7CiAvKgogICogTWVyZ2VBcHBl bmRQYXRoIHJlcHJlc2VudHMgYSBNZXJnZUFwcGVuZCBwbGFuLCBpZSwgdGhlIG1lcmdpbmcgb2Yg c29ydGVkCiAgKiByZXN1bHRzIGZyb20gc2V2ZXJhbCBtZW1iZXIgcGxhbnMgdG8gcHJvZHVjZSBz aW1pbGFybHktc29ydGVkIG91dHB1dC4KKyAqCisgKiBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyBo YXMgdGhlIHNhbWUgbWVhbmluZyBoZXJlIGFzIGZvciBBcHBlbmRQYXRoLgogICovCiB0eXBlZGVm IHN0cnVjdCBNZXJnZUFwcGVuZFBhdGgKIHsKIAlQYXRoCQlwYXRoOwogCUxpc3QJICAgKnN1YnBh dGhzOwkJLyogbGlzdCBvZiBjb21wb25lbnQgUGF0aHMgKi8KIAlDYXJkaW5hbGl0eSBsaW1pdF90 dXBsZXM7CS8qIGhhcmQgbGltaXQgb24gb3V0cHV0IHR1cGxlcywgb3IgLTEgKi8KKwlMaXN0CSAg ICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIH0gTWVyZ2VBcHBlbmRQYXRoOwogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rl cy9wbGFubm9kZXMuaAppbmRleCAwYWQwZmY0MDRjOS4uNDg1YmVjNWFhYmQgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oCkBAIC0zOTQsOSArMzk0LDE2IEBAIHN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm87 CQkvKiBmb3J3YXJkIHJlZmVyZW5jZSB0byBzdHJ1Y3QgYmVsb3cgKi8KIHR5cGVkZWYgc3RydWN0 IEFwcGVuZAogewogCVBsYW4JCXBsYW47CisKIAkvKiBSVElzIG9mIGFwcGVuZHJlbChzKSBmb3Jt ZWQgYnkgdGhpcyBub2RlICovCiAJQml0bWFwc2V0ICAqYXBwcmVsaWRzOworCisJLyogc2V0cyBv ZiBSVElzIG9mIGFwcGVuZHJlbHMgY29uc29saWRhdGVkIGludG8gdGhpcyBub2RlICovCisJTGlz dAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisKKwkvKiBwbGFucyB0byBydW4gKi8KIAlM aXN0CSAgICphcHBlbmRwbGFuczsKKwogCS8qICMgb2YgYXN5bmNocm9ub3VzIHBsYW5zICovCiAJ aW50CQkJbmFzeW5jcGxhbnM7CiAKQEAgLTQyNiw2ICs0MzMsMTAgQEAgdHlwZWRlZiBzdHJ1Y3Qg TWVyZ2VBcHBlbmQKIAkvKiBSVElzIG9mIGFwcGVuZHJlbChzKSBmb3JtZWQgYnkgdGhpcyBub2Rl ICovCiAJQml0bWFwc2V0ICAqYXBwcmVsaWRzOwogCisJLyogc2V0cyBvZiBSVElzIG9mIGFwcGVu ZHJlbHMgY29uc29saWRhdGVkIGludG8gdGhpcyBub2RlICovCisJTGlzdAkgICAqY2hpbGRfYXBw ZW5kX3JlbGlkX3NldHM7CisKKwkvKiBwbGFucyB0byBydW4gKi8KIAlMaXN0CSAgICptZXJnZXBs YW5zOwogCiAJLyogdGhlc2UgZmllbGRzIGFyZSBqdXN0IGxpa2UgdGhlIHNvcnQta2V5IGluZm8g aW4gc3RydWN0IFNvcnQ6ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aG5vZGUuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCmluZGV4IDIyNDc1MDg1 OWMzLi5jZjhhNjU0ZmE1MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhu b2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKQEAgLTE3LDYgKzE3 LDIwIEBACiAjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCiAjaW5jbHVkZSAibm9kZXMvcGF0 aG5vZGVzLmgiCiAKKy8qCisgKiBFdmVyeXRoaW5nIGluIHN1YnBhdGhzIG9yIHBhcnRpYWxfc3Vi cGF0aHMgd2lsbCBiZWNvbWUgcGFydCBvZiB0aGUKKyAqIEFwcGVuZCBub2RlJ3Mgc3VicGF0aHMg bGlzdC4gUGFydGlhbCBhbmQgbm9uLXBhcnRpYWwgc3VicGF0aHMgY2FuIGJlCisgKiBtaXhlZCBp biB0aGUgc2FtZSBBcHBlbmQgbm9kZSBvbmx5IGlmIGl0IGlzIHBhcmFsbGVsLWF3YXJlLgorICoK KyAqIFNlZSB0aGUgY29tbWVudHMgZm9yIEFwcGVuZFBhdGggZm9yIHRoZSBtZWFuaW5nIGFuZCBw dXJwb3NlIG9mIHRoZQorICogY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgZmllbGQuCisgKi8KK3R5 cGVkZWYgc3RydWN0IEFwcGVuZFBhdGhJbnB1dAoreworCUxpc3QJICAgKnN1YnBhdGhzOworCUxp c3QJICAgKnBhcnRpYWxfc3VicGF0aHM7CisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHM7Cit9IEFwcGVuZFBhdGhJbnB1dDsKIAogLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29u dHJvbCBkdXJpbmcgam9pbnJlbCBzZXR1cCAqLwogdHlwZWRlZiB2b2lkICgqam9pbnJlbF9zZXR1 cF9ob29rX3R5cGUpIChQbGFubmVySW5mbyAqcm9vdCwKQEAgLTc4LDE0ICs5MiwxNiBAQCBleHRl cm4gVGlkUmFuZ2VQYXRoICpjcmVhdGVfdGlkcmFuZ2VzY2FuX3BhdGgoUGxhbm5lckluZm8gKnJv b3QsCiAJCQkJCQkJCQkJCSAgTGlzdCAqdGlkcmFuZ2VxdWFscywKIAkJCQkJCQkJCQkJICBSZWxp ZHMgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkJCSAgaW50IHBhcmFsbGVsX3dvcmtlcnMpOwor CiBleHRlcm4gQXBwZW5kUGF0aCAqY3JlYXRlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpyZWwsCi0JCQkJCQkJCQkgIExpc3QgKnN1YnBhdGhzLCBMaXN0ICpwYXJ0 aWFsX3N1YnBhdGhzLAorCQkJCQkJCQkJICBBcHBlbmRQYXRoSW5wdXQgaW5wdXQsCiAJCQkJCQkJ CQkgIExpc3QgKnBhdGhrZXlzLCBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkgIGlu dCBwYXJhbGxlbF93b3JrZXJzLCBib29sIHBhcmFsbGVsX2F3YXJlLAogCQkJCQkJCQkJICBkb3Vi bGUgcm93cyk7CiBleHRlcm4gTWVyZ2VBcHBlbmRQYXRoICpjcmVhdGVfbWVyZ2VfYXBwZW5kX3Bh dGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqcmVsLAogCQkJ CQkJCQkJCQkJIExpc3QgKnN1YnBhdGhzLAorCQkJCQkJCQkJCQkJIExpc3QgKmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJIExpc3QgKnBhdGhrZXlzLAogCQkJCQkJCQkJCQkJ IFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBleHRlcm4gR3JvdXBSZXN1bHRQYXRoICpjcmVhdGVf Z3JvdXBfcmVzdWx0X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCmRpZmYgLS1naXQgYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CmluZGV4IDU4ZGUwNGNhMmM1Li43N2U1ZjhmZGMxNiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKQEAgLTEyNSw2ICsxMjUsNyBAQCBBbmxJbmRleERhdGEKIEFueUFycmF5VHlwZQogQXBw ZW5kCiBBcHBlbmRQYXRoCitBcHBlbmRQYXRoSW5wdXQKIEFwcGVuZFJlbEluZm8KIEFwcGVuZFN0 YXRlCiBBcHBseUVycm9yQ2FsbGJhY2tBcmcKLS0gCjIuNTEuMAoK --000000000000511f07064975dd6d Content-Type: application/octet-stream; name="v13-0004-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v13-0004-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkya5jay3 RnJvbSAxMzMxYjZkMjQzODU0NThhMjRkZGM2ZTM1NTZmYmYzN2YxMDI1ZTdkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjYgSmFuIDIwMjYgMDk6NTY6MzYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMyA0 LzVdIEFkZCBwZ19wbGFuX2FkdmljZSBjb250cmliIG1vZHVsZS4KClByb3ZpZGUgYSBmYWNpbGl0 eSB0aGF0ICgxKSBjYW4gYmUgdXNlZCB0byBzdGFiaWxpemUgY2VydGFpbiBwbGFuIGNob2ljZXMK c28gdGhhdCB0aGUgcGxhbm5lciBjYW5ub3QgcmV2ZXJzZSBjb3Vyc2Ugd2l0aG91dCBhdXRob3Jp emF0aW9uIGFuZAooMikgY2FuIGJlIHVzZWQgYnkga25vd2xlZGdlYWJsZSB1c2VycyB0byBpbnNp c3Qgb24gcGxhbiBjaG9pY2VzIGNvbnRyYXJ5CnRvIHdoYXQgdGhlIHBsYW5uZXIgYmVsaWV2ZXMg YmVzdC4gSW4gYm90aCBjYXNlcywgdGVycmlibGUgb3V0Y29tZXMgYXJlCnBvc3NpYmxlOiB1c2Vy cyBzaG91bGQgdGhpbmsgdHdpY2UgYW5kIHBlcmhhcHMgdGhyZWUgdGltZXMgYmVmb3JlCmNvbnN0 cmFpbmluZyB0aGUgcGxhbm5lcidzIGFiaWxpdHkgdG8gZG8gYXMgaXQgdGhpbmtzIGJlc3Q7IG5l dmVydGhlbGVzcywKdGhlcmUgYXJlIHByb2JsZW1zIHRoYXQgYXJlIG11Y2ggbW9yZSBlYXNpbHkg c29sdmVkIHdpdGggdGhlc2UgZmFjaWxpdGllcwp0aGFuIHdpdGhvdXQgdGhlbS4KClRoaXMgcGF0 Y2ggdGFrZXMgdGhlIGFwcHJvYWNoIG9mIGFuYWx5emluZyBhIGZpbmlzaGVkIHBsYW4gdG8gcHJv ZHVjZQp0ZXh0dWFsIG91dHB1dCwgd2hpY2ggd2UgY2FsbCAicGxhbiBhZHZpY2UiLCB0aGF0IGRl c2NyaWJlcyBrZXkKZGVjaXNpb25zIG1hZGUgZHVyaW5nIHBsYW47IGlmIHRoYXQgcGxhbiBhZHZp Y2UgaXMgcHJvdmlkZWQgZHVyaW5nCmZ1dHVyZSBwbGFubmluZyBjeWNsZXMsIGl0IHdpbGwgZm9y Y2UgdGhvc2Uga2V5IGRlY2lzaW9ucyB0byBiZSBtYWRlIGluCnRoZSBzYW1lIHdheS4gIE5vdCBh bGwgcGxhbm5lciBkZWNpc2lvbnMgY2FuIGJlIGNvbnRyb2xsZWQgdXNpbmcgYWR2aWNlOwpmb3Ig ZXhhbXBsZSwgZGVjaXNpb25zIGFib3V0IGhvdyB0byBwZXJmb3JtIGFnZ3JlZ2F0aW9uIGFyZSBj dXJyZW50bHkKb3V0IG9mIHNjb3BlLCBhcyBpcyBjaG9pY2Ugb2Ygc29ydCBvcmRlci4gUGxhbiBh ZHZpY2UgY2FuIGFsc28gYmUgZWRpdGVkCmJ5IHRoZSB1c2VyLCBvciBldmVuIHdyaXR0ZW4gZnJv bSBzY3JhdGNoIGluIHNpbXBsZSBjYXNlcywgbWFraW5nIGl0CnBvc3NpYmxlIHRvIGdlbmVyYXRl IG91dGNvbWVzIHRoYXQgdGhlIHBsYW5uZXIgd291bGQgbm90IGhhdmUgcHJvZHVjZWQuClBhcnRp YWwgYWR2aWNlIGNhbiBiZSBwcm92aWRlZCB0byBjb250cm9sIHNvbWUgcGxhbm5lciBvdXRjb21l cyBidXQgbm90Cm90aGVycy4KCkN1cnJlbnRseSwgcGxhbiBhZHZpY2UgaXMgZm9jdXNlZCBvbmx5 IG9uIHNwZWNpZmljIG91dGNvbWVzLCBzdWNoIGFzCnRoZSBjaG9pY2UgdG8gdXNlIGEgc2VxdWVu dGlhbCBzY2FuIGZvciBhIHBhcnRpY3VsYXIgcmVsYXRpb24sIGFuZCBub3QKb24gZXN0aW1hdGVz IHRoYXQgbWlnaHQgY29udHJpYnV0ZSB0byB0aG9zZSBvdXRjb21lcywgc3VjaCBhcyBhCnBvc3Np Ymx5LWluY29ycmVjdCBzZWxlY3Rpdml0eSBlc3RpbWF0ZS4gV2hpbGUgaXQgd291bGQgYmUgdXNl ZnVsIHRvCnVzZXJzIHRvIGJlIGFibGUgdG8gcHJvdmlkZSBwbGFuIGFkdmljZSB0aGF0IGFmZmVj dHMgc2VsZWN0aXZpdHkKZXN0aW1hdGVzIG9yIG90aGVyIGFzcGVjdHMgb2YgY29zdGluZywgdGhh dCBpcyBvdXQgb2Ygc2NvcGUgZm9yIHRoaXMKY29tbWl0LgoKRm9yIG1vcmUgZGV0YWlscywgc2Vl IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1FIG9yIHRoZSBTR01MCmRvY3VtZW50YXRpb24u CgpOT1RFOiBUaGVyZSBhcmUgc3RpbGwgc29tZSBrbm93biBwcm9ibGVtcyB3aXRoIHRoaXMgY29k ZSwgd2hpY2ggYXJlCmNhbGxlZCBvdXQgYnkgWFhYLgoKUmV2aWV3ZWQtYnk6IEx1a2FzIEZpdHRs IDxsdWthc0BmaXR0bC5jb20+ClJldmlld2VkLWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndhcnRh a0BlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogR3JlZyBCdXJkIDxncmVnQGJ1cmQubWU+ ClJldmlld2VkLWJ5OiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJwcmlzZWRi LmNvbT4KUmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21haWwuY29tPgpSZXZp ZXdlZC1ieTogRGlhbiBGYXkgPGRpQG5tZmF5LmNvbT4KUmV2aWV3ZWQtYnk6IEFqYXkgUGFsIDxh amF5LnBhbC5rQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEpvaG4gTmF5bG9yIDxqb2huY25heWxv cmxzQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cDovL3Bvc3Rnci5lcy9tL0NBK1RnbW9aLUpo MVQ2UXlXb0NPRE1WUWRoVFVQWWthWmpXenR6UDFFbjQ9WkhvS1B6d0BtYWlsLmdtYWlsLmNvbQot LS0KIGNvbnRyaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEg KwogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAr CiBjb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUgICAgICAgICAgICAgfCAgICAzICsK IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgNTAgKwog Y29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgICAgICAgICAgICAgICAgIHwgIDI2MCArKysK IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dCAgICB8ICAzNzEgKysr CiAuLi4vcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQgICAgfCAgNTA5ICsr KysrCiAuLi4vcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQgfCAgMzM4 ICsrKwogLi4uL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQgICAgICAgICAgICAgIHwgICA2 NyArCiAuLi4vcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lzZS5vdXQgfCAgNDI2 ICsrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcHJlcGFyZWQub3V0ICB8ICAg NjcgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zY2FuLm91dCAgICAgIHwgIDc1 NyArKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2VtaWpvaW4ub3V0ICB8 ICAzNzcgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQgICAg fCAgMTkyICsrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkICAgICAgICAgICAg fCAgIDcyICsKIC4uLi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbCAgICB8 ICAgNDMgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jICAgICAgIHwg IDUwMyArKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmNvbnRyb2wg fCAgICA1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaCAgICAgICB8 ICAgNDMgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jICAgICAgICAgICAgIHwg IDM1MSArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaCAgICAgICAgICAgICB8 ICAxODYgKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYyAgICAgICB8 ICA2MzkgKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmggICAg ICAgfCAgIDE4ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMgICAg ICB8ICA0NzYgKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaCAg ICAgIHwgICA1MiArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5jICAgICAgICAg ICAgfCAgNjI5ICsrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5oICAgICAg ICAgICAgfCAgMTA1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYyAgICAg ICAgICB8ICA1NzEgKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuaCAg ICAgICAgICB8ICAgMjIgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BhcnNlci55ICAg ICAgICAgIHwgIDMwMSArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMg ICAgICAgICB8IDIwMjQgKysrKysrKysrKysrKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9wbGFubmVyLmggICAgICAgICB8ICAgMTcgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3NjYW4uYyAgICAgICAgICAgIHwgIDMwNiArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9zY2FuLmggICAgICAgICAgICB8ICAgODUgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3NjYW5uZXIubCAgICAgICAgIHwgIDI5NyArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV90cm92ZS5jICAgICAgICAgICB8ICA0OTIgKysrKwogY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3Ryb3ZlLmggICAgICAgICAgIHwgIDExMyArCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfd2Fsa2VyLmMgICAgICAgICAgfCAxMDAyICsrKysrKysrCiBjb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfd2Fsa2VyLmggICAgICAgICAgfCAgMTQxICsrCiBjb250cmliL3BnX3BsYW5f YWR2aWNlL3NxbC9nYXRoZXIuc3FsICAgICAgICAgfCAgIDg2ICsKIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsICAgICB8ICAxNDUgKysKIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL2pvaW5fc3RyYXRlZ3kuc3FsICB8ICAgODQgKwogLi4uL3BnX3BsYW5fYWR2aWNl L3NxbC9sb2NhbF9jb2xsZWN0b3Iuc3FsICAgIHwgICA0NCArCiBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbCAgfCAgIDk5ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL3ByZXBhcmVkLnNxbCAgICAgICB8ICAgMzcgKwogY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvc2Nhbi5zcWwgICAgICAgICAgIHwgIDE5NSArKwogY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvc2VtaWpvaW4uc3FsICAgICAgIHwgIDExOCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3NxbC9zeW50YXguc3FsICAgICAgICAgfCAgIDY4ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv dC8wMDFfcmVncmVzcy5wbCAgICAgICB8ICAxNDggKysKIGRvYy9zcmMvc2dtbC9jb250cmliLnNn bWwgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNn bWwgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBkb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNl LnNnbWwgICAgICAgICAgICAgICAgfCAgOTUyICsrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDM4ICsKIDUzIGZpbGVzIGNoYW5nZWQsIDEz OTI4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2 aWNlLy5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNl L01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFE TUUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dh dGhlci5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVj dGVkL2pvaW5fb3JkZXIub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lzZS5v dXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3By ZXBhcmVkLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhw ZWN0ZWQvc2Nhbi5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNl L2V4cGVjdGVkL3NlbWlqb2luLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvZXhwZWN0ZWQvc3ludGF4Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQg Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jb250cm9sCiBjcmVhdGUg bW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVy LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX29yZGVyLnNx bAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fc3Ry YXRlZ3kuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwv bG9jYWxfY29sbGVjdG9yLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9w Z19wbGFuX2FkdmljZS9zcWwvcHJlcGFyZWQuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmli L3BnX3BsYW5fYWR2aWNlL3NxbC9zZW1pam9pbi5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zeW50YXguc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19wbGFuX2FkdmljZS90LzAwMV9yZWdyZXNzLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZG9jL3NyYy9zZ21sL3BncGxhbmFkdmljZS5zZ21sCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9NYWtl ZmlsZSBiL2NvbnRyaWIvTWFrZWZpbGUKaW5kZXggMmYwYTg4ZDNmNzcuLmRkMDRjMjBhY2QyIDEw MDY0NAotLS0gYS9jb250cmliL01ha2VmaWxlCisrKyBiL2NvbnRyaWIvTWFrZWZpbGUKQEAgLTM0 LDYgKzM0LDcgQEAgU1VCRElSUyA9IFwKIAkJcGdfZnJlZXNwYWNlbWFwIFwKIAkJcGdfbG9naWNh bGluc3BlY3QgXAogCQlwZ19vdmVyZXhwbGFpbiBcCisJCXBnX3BsYW5fYWR2aWNlIFwKIAkJcGdf cHJld2FybQlcCiAJCXBnX3N0YXRfc3RhdGVtZW50cyBcCiAJCXBnX3N1cmdlcnkJXApkaWZmIC0t Z2l0IGEvY29udHJpYi9tZXNvbi5idWlsZCBiL2NvbnRyaWIvbWVzb24uYnVpbGQKaW5kZXggZGVm MTMyNTdjYmUuLjVhNzUyZWFjMzQ3IDEwMDY0NAotLS0gYS9jb250cmliL21lc29uLmJ1aWxkCisr KyBiL2NvbnRyaWIvbWVzb24uYnVpbGQKQEAgLTQ4LDYgKzQ4LDcgQEAgc3ViZGlyKCdwZ2NyeXB0 bycpCiBzdWJkaXIoJ3BnX2ZyZWVzcGFjZW1hcCcpCiBzdWJkaXIoJ3BnX2xvZ2ljYWxpbnNwZWN0 JykKIHN1YmRpcigncGdfb3ZlcmV4cGxhaW4nKQorc3ViZGlyKCdwZ19wbGFuX2FkdmljZScpCiBz dWJkaXIoJ3BnX3ByZXdhcm0nKQogc3ViZGlyKCdwZ3Jvd2xvY2tzJykKIHN1YmRpcigncGdfc3Rh dF9zdGF0ZW1lbnRzJykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvLmdpdGln bm9yZSBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTlhMTQyNTMwMTkKLS0tIC9kZXYvbnVsbAorKysgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACisvcGdwYV9w YXJzZXIuaAorL3BncGFfcGFyc2VyLmMKKy9wZ3BhX3NjYW5uZXIuYwpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZSBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFr ZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFkNGM1NTlhZWQ4 Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZQpAQCAt MCwwICsxLDUwIEBACisjIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKKworTU9EVUxF X2JpZyA9IHBnX3BsYW5fYWR2aWNlCitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwlwZ19wbGFu X2FkdmljZS5vIFwKKwlwZ3BhX2FzdC5vIFwKKwlwZ3BhX2NvbGxlY3Rvci5vIFwKKwlwZ3BhX2lk ZW50aWZpZXIubyBcCisJcGdwYV9qb2luLm8gXAorCXBncGFfb3V0cHV0Lm8gXAorCXBncGFfcGFy c2VyLm8gXAorCXBncGFfcGxhbm5lci5vIFwKKwlwZ3BhX3NjYW4ubyBcCisJcGdwYV9zY2FubmVy Lm8gXAorCXBncGFfdHJvdmUubyBcCisJcGdwYV93YWxrZXIubworCitFWFRFTlNJT04gPSBwZ19w bGFuX2FkdmljZQorREFUQSA9IHBnX3BsYW5fYWR2aWNlLS0xLjAuc3FsCitQR0ZJTEVERVNDID0g InBnX3BsYW5fYWR2aWNlIC0gaGVscCB0aGUgcGxhbm5lciBnZXQgdGhlIHJpZ2h0IHBsYW4iCisK K1JFR1JFU1MgPSBnYXRoZXIgam9pbl9vcmRlciBqb2luX3N0cmF0ZWd5IHBhcnRpdGlvbndpc2Ug c2NhbgorVEFQX1RFU1RTID0gMQorCitFWFRSQV9DTEVBTiA9IHBncGFfcGFyc2VyLmggcGdwYV9w YXJzZXIuYyBwZ3BhX3NjYW5uZXIuYworCisjIHJlcXVpcmVkIGZvciAwMDFfcmVncmVzcy5wbAor UkVHUkVTU19TSExJQj0kKGFic190b3BfYnVpbGRkaXIpL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVz cyQoRExTVUZGSVgpCitleHBvcnQgUkVHUkVTU19TSExJQgorCitpZmRlZiBVU0VfUEdYUworUEdf Q09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykK K2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gY29udHJpYi9wZ19wbGFuX2FkdmljZQor dG9wX2J1aWxkZGlyID0gLi4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmls ZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1r CitlbmRpZgorCisjIFNlZSBub3RlcyBpbiBzcmMvYmFja2VuZC9wYXJzZXIvTWFrZWZpbGUgYWJv dXQgdGhlIGZvbGxvd2luZyB0d28gcnVsZXMKK3BncGFfcGFyc2VyLmg6IHBncGFfcGFyc2VyLmMK Kwl0b3VjaCAkQAorCitwZ3BhX3BhcnNlci5jOiBCSVNPTkZMQUdTICs9IC1kCisKKyMgRm9yY2Ug dGhlc2UgZGVwZW5kZW5jaWVzIHRvIGJlIGtub3duIGV2ZW4gd2l0aG91dCBkZXBlbmRlbmN5IGlu Zm8gYnVpbHQ6CitwZ3BhX3BhcnNlci5vIHBncGFfc2Nhbm5lci5vOiBwZ3BhX3BhcnNlci5oCmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRSBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4w Yjg4OGZkODJmMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVB RE1FCkBAIC0wLDAgKzEsMjYwIEBACitjb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRQorCitQ bGFuIEFkdmljZQorPT09PT09PT09PT0KKworVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIG1pbmkt bGFuZ3VhZ2UgZm9yICJwbGFuIGFkdmljZSIgdGhhdCBhbGxvd3MgZm9yCitjb250cm9sIG9mIGNl cnRhaW4ga2V5IHBsYW5uZXIgZGVjaXNpb25zLiBHb2FscyBpbmNsdWRlICgxKSBlbmZvcmNpbmcg cGxhbgorc3RhYmlsaXR5IChteSBwcmV2aW91cyBwbGFuIHdhcyBnb29kIGFuZCBJIHdvdWxkIGxp a2UgdG8ga2VlcCBnZXR0aW5nIGEKK3NpbWlsYXIgb25lKSBhbmQgKDIpIGFsbG93aW5nIHVzZXJz IHRvIGV4cGVyaW1lbnQgd2l0aCBwbGFucyBvdGhlciB0aGFuCit0aGUgb25lIHByZWZlcnJlZCBi eSB0aGUgb3B0aW1pemVyLiBOb24tZ29hbHMgaW5jbHVkZSAoMSkgY29udHJvbGxpbmcKK2V2ZXJ5 IHBvc3NpYmxlIHBsYW5uZXIgZGVjaXNpb24gYW5kICgyKSBmb3JjaW5nIGNvbnNpZGVyYXRpb24g b2YgcGxhbnMKK3RoYXQgdGhlIG9wdGltaXplciByZWplY3RzIGZvciByZWFzb25zIG90aGVyIHRo YW4gY29zdC4gKFRoZXJlIGlzIHNvbWUKK3Jvb20gZm9yIGJpa2VzaGVkZGluZyBhYm91dCB3aGF0 IGV4YWN0bHkgdGhpcyBub24tZ29hbCBtZWFuczogd2hhdCBpZgord2Ugc2tpcCBwYXRoIGdlbmVy YXRpb24gZW50aXJlbHkgZm9yIGEgY2VydGFpbiBjYXNlIG9uIHRoZSB0aGVvcnkgdGhhdAord2Ug a25vdyBpdCBjYW5ub3Qgd2luIG9uIGNvc3Q/IERvZXMgdGhhdCBjb3VudCBhcyBhIGNvc3QtYmFz ZWQgcmVqZWN0aW9uCitldmVuIHRob3VnaCBubyBjb3N0IHdhcyBldmVyIGNvbXB1dGVkPykKKwor R2VuZXJhbGx5LCBwbGFuIGFkdmljZSBpcyBhIHNlcmllcyBvZiB3aGl0ZXNwYWNlLXNlcGFyYXRl ZCBhZHZpY2UgaXRlbXMsCitlYWNoIG9mIHdoaWNoIGFwcGxpZXMgYW4gYWR2aWNlIHRhZyB0byBh IGxpc3Qgb2YgYWR2aWNlIHRhcmdldHMuIEZvcgorZXhhbXBsZSwgIlNFUV9TQ0FOKGZvbykgSEFT SF9KT0lOKGJhckBzcykiIGNvbnRhaW5zIHR3byBpdGVtcyBvZiBhZHZpY2UsCit0aGUgZmlyc3Qg b2Ygd2hpY2ggYXBwbGllcyB0aGUgU0VRX1NDQU4gdGFnIHRvICJmb28iIGFuZCB0aGUgc2Vjb25k IG9mCit3aGljaCBhcHBsaWVzIHRoZSBIQVNIX0pPSU4gdGFnIHRvICJiYXJAc3MiLiBJbiB0aGlz IHNpbXBsZSBleGFtcGxlLCBlYWNoCit0YXJnZXQgaWRlbnRpZmllcyBhIHNpbmdsZSByZWxhdGlv bjsgc2VlICJSZWxhdGlvbiBJZGVudGlmaWVycyIsIGJlbG93LgorQWR2aWNlIHRhZ3MgY2FuIGFs c28gYmUgYXBwbGllZCB0byBncm91cHMgb2YgcmVsYXRpb25zOyBmb3IgZXhhbXBsZSwKKyJIQVNI X0pPSU4oYmF6IChibGV0Y2ggcXV1eCkpIiBhcHBsaWVzIHRoZSBIQVNIX0pPSU4gdGFnIHRvIHRo ZSBzaW5nbGUKK3JlbGF0aW9uIGlkZW50aWZpZXIgImJheiIgYXMgd2VsbCBhcyB0byB0aGUgMi1p dGVtIGxpc3QgY29udGFpbmluZworImJsZXRjaCIgYW5kICJxdXV4Ii4KKworQ3JpdGljYWxseSwg dGhpcyBtb2R1bGUga25vd3MgYm90aCBob3cgdG8gZ2VuZXJhdGUgcGxhbiBhZHZpY2UgZnJvbSBh bgorYWxyZWFkeS1leGlzdGluZyBwbGFuLCBhbmQgYWxzbyBob3cgdG8gZW5mb3JjZSBpdCBkdXJp bmcgZnV0dXJlIHBsYW5uaW5nCitjeWNsZXMuIEV2ZXJ5dGhpbmcgaXQgZG9lcyBpcyBpbnRlbmRl ZCB0byBiZSAicm91bmQtdHJpcCBzYWZlIjogaWYgeW91CitnZW5lcmF0ZSBhZHZpY2UgZnJvbSBh IHBsYW4gYW5kIHRoZW4gZmVlZCB0aGF0IGJhY2sgaW50byBhIGZ1dHVyZSBwbGFuaW5nCitjeWNs ZSwgZWFjaCBwaWVjZSBvZiBhZHZpY2Ugc2hvdWxkIGJlIGd1YXJhbnRlZWQgdG8gYXBwbHkgdG8g dGhlIGV4YWN0bHkgdGhlCitzYW1lIHBhcnQgb2YgdGhlIHF1ZXJ5IGZyb20gd2hpY2ggaXQgd2Fz IGdlbmVyYXRlZCB3aXRob3V0IGFtYmlndWl0eSBvcgorZ3Vlc3N3b3JrLCBhbmQgaXQgc2hvdWxk IHN1Y2Nlc2Z1bGx5IGVuZm9yY2UgdGhlIHNhbWUgcGxhbm5pbmcgZGVjaXNpb24gdGhhdAorbGVk IHRvIGl0IGJlaW5nIGdlbmVyYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIE5vdGUgdGhhdCB0aGVy ZSBpcyBubworaW50ZW50aW9uIHRoYXQgdGhlc2UgZ3VhcmFudGVlcyBob2xkIGluIHRoZSBwcmVz ZW5jZSBvZiBpbnRlcnZlbmluZyBEREw7CitlLmcuIGlmIHlvdSBjaGFuZ2UgdGhlIHByb3BlcnRp ZXMgb2YgYSBmdW5jdGlvbiBzbyB0aGF0IGEgc3VicXVlcnkgaXMgbm8KK2xvbmdlciBpbmxpbmVk LCBvciBpZiB5b3UgZHJvcCBhbiBpbmRleCBuYW1lZCBpbiB0aGUgcGxhbiBhZHZpY2UsIHRoZSBh ZHZpY2UKK2lzbid0IGdvaW5nIHRvIHdvcmsgYW55IG1vcmUuIFRoYXQncyBleHBlY3RlZC4KKwor VGhpcyBtb2R1bGUgYWltcyB0byBmb3JjZSB0aGUgcGxhbm5lciB0byBmb2xsb3cgYW55IHByb3Zp ZGVkIGFkdmljZSB3aXRob3V0CityZWdhcmQgdG8gd2hldGhlciBpdCBpcyBhcHBlYXJzIHRvIGJl IGdvb2QgYWR2aWNlIG9yIGJhZCBhZHZpY2UuICBJZiB0aGUKK3VzZXIgcHJvdmlkZXMgYmFkIGFk dmljZSwgd2hldGhlciBkZXJpdmVkIGZyb20gYSBwcmV2aW91c2x5LWdlbmVyYXRlZCBwbGFuCitv ciBtYW51YWxseSB3cml0dGVuLCB0aGV5IG1heSBnZXQgYSBiYWQgcGxhbi4gV2UgcmVnYXJkIHRo aXMgYXMgdXNlciBlcnJvciwKK25vdCBhIGRlZmVjdCBpbiB0aGlzIG1vZHVsZS4gSXQgc2VlbXMg bGlrZWx5IHRoYXQgYXBwbHlpbmcgYWR2aWNlCitqdWRpY2lvdXNseSBhbmQgb25seSB3aGVuIHRy dWx5IHJlcXVpcmVkIHRvIGF2b2lkIHByb2JsZW1zIHdpbGwgYmUgYSBtb3JlCitzdWNjZXNzZnVs IHN0cmF0ZWd5IHRoYW4gYXBwbHlpbmcgaXQgd2l0aCBhIGJyb2FkIGJydXNoLCBidXQgdXNlcnMg YXJlIGZyZWUKK3RvIGV4cGVyaW1lbnQgd2l0aCB3aGF0ZXZlciBzdHJhdGVnaWVzIHRoZXkgdGhp bmsgYmVzdC4KKworUmVsYXRpb24gSWRlbnRpZmllcnMKKz09PT09PT09PT09PT09PT09PT09CisK K1VuaXF1ZWx5IGlkZW50aWZ5aW5nIHRoZSBwYXJ0IG9mIGEgcXVlcnkgdG8gd2hpY2ggYSBjZXJ0 YWluIHBpZWNlIG9mCithZHZpY2UgYXBwbGllcyBpcyBoYXJkZXIgdGhhbiBpdCBzb3VuZHMuIE91 ciBiYXNpYyBhcHByb2FjaCBpcyB0byB1c2UKK3JlbGF0aW9uIGFsaWFzZXMgYXMgYSBzdGFydGlu ZyBwb2ludCwgYW5kIHRoZW4gZGlzYW1iaWd1YXRlLiBUaGVyZSBhcmUKK3RocmVlIHdheXMgdGhh dCBzYW1lIHJlbGF0aW9uIGFsaWFzIGNhbiBvY2N1ciBtdWx0aXBsZSB0aW1lczoKKworMS4gSXQg Y2FuIGFwcGVhciBpbiBtb3JlIHRoYW4gb25lIHN1YnF1ZXJ5LgorCisyLiBJdCBjYW4gYXBwZWFy IG1vcmUgdGhhbiBvbmNlIGluIHRoZSBzYW1lIHN1YnF1ZXJ5LAorICAgZS5nLiAoZm9vIEpPSU4g YmFyKSB4IEpPSU4gZm9vLgorCiszLiBUaGUgdGFibGUgY2FuIGJlIHBhcnRpdGlvbmVkLgorCitB bnkgY29tYmluYXRpb24gb2YgdGhlc2UgdGhpbmdzIGNhbiBvY2N1ciBzaW11bHRhbmVvdXNseS4g IFRoZXJlZm9yZSwgb3VyCitnZW5lcmFsIHN5bnRheCBmb3IgYSByZWxhdGlvbiBpZGVudGlmaWVy IGlzOgorCithbGlhc19uYW1lI29jY3VycmVuY2VfbnVtYmVyL3BhcnRpdGlvbl9zY2hlbWEucGFy dGl0aW9uX25hbWVAcGxhbl9uYW1lCisKK0FsbCBjb21wb25lbnRzIGV4Y2VwdCBmb3IgdGhlIGFs aWFzX25hbWUgYXJlIG9wdGlvbmFsIGFuZCBpbmNsdWRlZCBvbmx5Cit3aGVuIHJlcXVpcmVkLiBX aGVuIGEgY29tcG9uZW50IGlzIG9taXR0ZWQsIHRoZSBhc3NvY2lhdGVkIHB1bmN0dWF0aW9uCitt dXN0IGFsc28gYmUgb21pdHRlZC4gT2NjdXJyZW5jZSBudW1iZXJzIGFyZSBjb3VudGVkIGlnbm9y aW5nIGNoaWxkcmVuIG9mCitwYXJ0aXRpb25lZCB0YWJsZXMuICBXaGVuIHRoZSBnZW5lcmF0ZWQg b2NjdXJyZW5jZSBudW1iZXIgaXMgMSwgd2Ugb21pdAordGhlIG9jY3VycmVuY2UgbnVtYmVyLiBU aGUgcGFydGl0aW9uIHNjaGVtYSBhbmQgcGFydGl0aW9uIG5hbWUgYXJlIGluY2x1ZGVkCitvbmx5 IGZvciBjaGlsZHJlbiBvZiBwYXJ0aXRpb25lZCB0YWJsZXMuIEluIGdlbmVyYXRlZCBhZHZpY2Us IHRoZQorcGFydGl0aW9uX3NjaGVtYSBpcyBhbHdheXMgaW5jbHVkZWQgd2hlbmV2ZXIgdGhlcmUg aXMgYSBwYXJ0aXRpb25fbmFtZSwKK2J1dCB1c2VyLXdyaXR0ZW4gYWR2aWNlIG1heSBtZW50aW9u IHRoZSBuYW1lIGFuZCBvbWl0IHRoZSBzY2hlbWEuIFRoZQorcGxhbl9uYW1lIGlzIG9taXR0ZWQg Zm9yIHRoZSB0b3AtbGV2ZWwgUGxhbm5lckluZm8uCisKK1NjYW4gQWR2aWNlCis9PT09PT09PT09 PQorCitGb3IgbWFueSB0eXBlcyBvZiBzY2FuLCBubyBhZHZpY2UgaXMgZ2VuZXJhdGVkIG9yIHBv c3NpYmxlOyBmb3IgaW5zdGFuY2UsCithIHN1YnF1ZXJ5IGlzIGFsd2F5cyBzY2FubmVkIHVzaW5n IGEgc3VicXVlcnkgc2Nhbi4gV2hpbGUgdGhhdCBzY2FuIG1heSBiZQorZWxpZGVkIHZpYSBzZXRy ZWZzIHByb2Nlc3NpbmcsIHRoaXMgZG9lc24ndCBjaGFuZ2UgdGhlIGZhY3QgdGhhdCBvbmx5IG9u ZQorYmFzaWMgYXBwcm9hY2ggZXhpc3RzLiBIZW5jZSwgc2NhbiBhZHZpY2UgYXBwbGllcyBtb3N0 bHkgdG8gcmVsYXRpb25zLCB3aGljaAorY2FuIGJlIHNjYW5uZWQgaW4gbXVsdGlwbGUgd2F5cy4K KworV2UgdGVuZCB0byB0aGluayBvZiBhIHNjYW4gYXMgdGFyZ2V0aW5nIGEgc2luZ2xlIHJlbGF0 aW9uLCBhbmQgdGhhdCdzCitub3JtYWxseSB0aGUgY2FzZSwgYnV0IGl0IGRvZXNuJ3QgaGF2ZSB0 byBiZS4gRm9yIGluc3RhbmNlLCBpZiBhIGpvaW4gaXMKK3Byb3ZlbiBlbXB0eSwgdGhlIHdob2xl IHRoaW5nIG1heSBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIFJlc3VsdCBub2RlCit3aGljaCwg aW4gZWZmZWN0LCBpcyBhIGRlZ2VuZXJhdGUgc2NhbiBvZiBldmVyeSByZWxhdGlvbiBpbiB0aGUg Y29sbGFwc2VkCitwb3J0aW9uIG9mIHRoZSBqb2luIHRyZWUuIFNpbWlsYXJseSwgaXQncyBwb3Nz aWJsZSB0byBpbmplY3QgYSBjdXN0b20gc2NhbgoraW4gc3VjaCBhIHdheSB0aGF0IGl0IHJlcGxh Y2VzIGFuIGVudGlyZSBqb2luLiBJZiB3ZSBldmVyIGVtaXQgYWR2aWNlCitmb3IgdGhlc2UgY2Fz ZXMsIGl0IHdvdWxkIHRhcmdldCBzZXRzIG9mIHJlbGF0aW9uIGlkZW50aWZpZXJzIHN1cnJvdW5k ZWQKK2J5IHBhcmVudGhlc2VzLCBlLmcuIFNPTUVfU09SVF9PRl9TQ0FOKGZvbyAoYmFyIGJheikp IHdvdWxkIG1lYW4gdGhhdCB0aGUKK3RoZSBnaXZlbiBzY2FuIHR5cGUgd291bGQgYmUgdXNlZCBm b3IgZm9vIGFzIGEgc2luZ2xlIHJlbGF0aW9uIGFuZCBhbHNvIHRoZQorY29tYmluYXRpb24gb2Yg YmFyIGFuZCBiYXogYXMgYSBqb2luIHByb2R1Y3QuIFdlIGhhdmUgbm8gc3VjaCBjYXNlcyBhdAor cHJlc2VudC4KKworRm9yIGluZGV4IGFuZCBpbmRleC1vbmx5IHNjYW5zLCBib3RoIHRoZSByZWxh dGlvbiBiZWluZyBzY2FubmVkIGFuZCB0aGUKK2luZGV4IG9yIGluZGV4ZXMgYmVpbmcgdXNlZCBt dXN0IGJlIHNwZWNpZmllZC4gRm9yIGV4YW1wbGUsIElOREVYX1NDQU4oZm9vCitmb29fYV9pZHgg YmFyIGJhcl9iX2lkeCkgaW5kaWNhdGVzIHRoYXQgYW4gaW5kZXggc2NhbiAobm90IGFuIGluZGV4 LW9ubHkKK3NjYW4pIHNob3VsZCBiZSB1c2VkIG9uIGZvb19hX2lkeCB3aGVuIHNjYW5uaW5nIGZv bywgYW5kIHRoYXQgYW4gaW5kZXggc2Nhbgorc2hvdWxkIGJlIHVzZWQgb24gYmFyX2JfaWR4IHdo ZW4gc2Nhbm5pbmcgYmFyLgorCitCaXRtYXAgaGVhcCBzY2FucyBjdXJyZW50bHkgZG8gbm90IGFs bG93IGZvciBhbiBpbmRleCBzcGVjaWZpY2F0aW9uOgorQklUTUFQX0hFQVBfU0NBTihmb28gYmFy KSBzaW1wbHkgbWVhbnMgdGhhdCBlYWNoIG9mIGZvbyBhbmQgYmFyIHNob3VsZCB1c2UKK3NvbWUg c29ydCBvZiBiaXRtYXAgaGVhcCBzY2FuLgorCitKb2luIE9yZGVyIEFkdmljZQorPT09PT09PT09 PT09PT09PT0KKworVGhlIEpPSU5fT1JERVIgdGFnIHNwZWNpZmllcyB0aGUgb3JkZXIgaW4gd2hp Y2ggc2V2ZXJhbCB0YWJsZXMgdGhhdCBhcmUKK3BhcnQgb2YgdGhlIHNhbWUgam9pbiBwcm9ibGVt IHNob3VsZCBiZSBqb2luZWQuIEVhY2ggc3VicXVlcnkgKGV4Y2VwdCBmb3IKK3Rob3NlIHRoYXQg YXJlIGlubGluZWQpIGlzIGEgc2VwYXJhdGUgam9pbiBwcm9ibGVtLiBXaXRoaW4gYSBzdWJxdWVy eSwKK3BhcnRpdGlvbndpc2Ugam9pbnMgY2FuIGNyZWF0ZSBhZGRpdGlvbmFsLCBzZXBhcmF0ZSBq b2luIHByb2JsZW1zLiBIZW5jZSwKK3F1ZXJpZXMgaW52b2x2aW5nIHBhcnRpdGlvbndpc2Ugam9p bnMgbWF5IHVzZSBKT0lOX09SREVSKCkgbWFueSB0aW1lcy4KKworV2UgdGFrZSB0aGUgY2Fub25p Y2FsIGpvaW4gc3RydWN0dXJlIHRvIGJlIGFuIG91dGVyLWRlZXAgdHJlZSwgc28KK0pPSU5fT1JE RVIodDEgdDIgdDMpIHNheXMgdGhhdCB0MSBpcyB0aGUgZHJpdmluZyB0YWJsZSBhbmQgc2hvdWxk IGJlIGpvaW5lZAorZmlyc3QgdG8gdDIgYW5kIHRoZW4gdG8gdDMuIElmIHRoZSBqb2luIHByb2Js ZW0gaW52b2x2ZXMgYWRkaXRpb25hbCB0YWJsZXMsCit0aGV5IGNhbiBiZSBqb2luZWQgaW4gYW55 IG9yZGVyIGFmdGVyIHRoZSBqb2luIGJldHdlZW4gdDEsIHQyLCBhbmQgdDMgaGFzCitiZWVuIGNv bnN0cnVjdHVyZWQuIEdlbmVyYXRlZCBqb2luIGFkdmljZSBhbHdheXMgbWVudGlvbnMgYWxsIHRh YmxlcworaW4gdGhlIGpvaW4gcHJvYmxlbSwgYnV0IG1hbnVhbGx5IHdyaXR0ZW4gam9pbiBhZHZp Y2UgbmVlZCBub3QgZG8gc28uCisKK0ZvciB0cmVlcyB3aGljaCBhcmUgbm90IG91dGVyLWRlZXAs IHBhcmVudGhlc2VzIGNhbiBiZSB1c2VkLiBGb3IgZXhhbXBsZSwKK0pPSU5fT1JERVIodDEgKHQy IHQzKSkgc2F5cyB0aGF0IHRoZSB0b3AtbGV2ZWwgam9pbiBzaG91bGQgaGF2ZSB0MSBvbiB0aGUK K291dGVyIHNpZGUgYW5kIGEgam9pbiBiZXR3ZWVuIHQyIGFuZCB0MyBvbiB0aGUgaW5uZXIgc2lk ZS4gVGhhdCBqb2luIHNob3VsZAorYmUgY29uc3RydWN0ZWQgc28gdGhhdCB0MiBpcyBvbiB0aGUg b3V0ZXIgc2lkZSBhbmQgdDMgaXMgb24gdGhlIGlubmVyIHNpZGUuCisKK0luIHNvbWUgY2FzZXMs IGl0J3Mgbm90IHBvc3NpYmxlIHRvIGZ1bGx5IHNwZWNpZnkgdGhlIGpvaW4gb3JkZXIgaW4gdGhp cyB3YXkuCitGb3IgZXhhbXBsZSwgaWYgdDIgYW5kIHQzIGFyZSBiZWluZyBzY2FubmVkIGJ5IGEg c2luZ2xlIGN1c3RvbSBzY2FuIG9yIGZvcmVpZ24KK3NjYW4sIG9yIGlmIGEgcGFydGl0aW9ud2lz ZSBqb2luIGlzIGJlaW5nIHBlcmZvcm1lZCBiZXR3ZWVuIHRob3NlIHRhYmxlcywgdGhlbgoraXQn cyBpbXBvc3NpYmxlIHRvIHNheSB0aGF0IHQyIGlzIHRoZSBvdXRlciB0YWJsZSBhbmQgdDMgaXMg dGhlIGlubmVyIHRhYmxlLAorb3IgdGhlIG90aGVyIHdheSBhcm91bmQ7IGl0J3MganVzdCB1bmRl ZmluZWQuIEluIHN1Y2ggY2FzZXMsIHdlIGdlbmVyYXRlCitqb2luIGFkdmljZSB0aGF0IHVzZXMg Y3VybHkgYnJhY2VzLCBpbnRlbmRpbmcgdG8gaW5kaWNhdGUgYSBsYWNrIG9mIG9yZGVyaW5nOgor Sk9JTl9PUkRFUih0MSB7dDIgdDN9KSBzYXlzIHRoYXQgdGhlIHVwcGVybW9zdCBqb2luIHNob3Vs ZCBoYXZlIHQxIG9uIHRoZSBvdXRlcgorc2lkZSBhbmQgc29tZSBraW5kIG9mIGpvaW4gYmV0d2Vl biB0MiBhbmQgdDMgb24gdGhlIGlubmVyIHNpZGUsIGJ1dCB3aXRob3V0CitzYXlpbmcgaG93IHRo YXQgam9pbiBtdXN0IGJlIHBlcmZvcm1lZCBvciBhbnl0aGluZyBhYm91dCB3aGljaCByZWxhdGlv biBzaG91bGQKK2FwcGVhciBvbiB3aGljaCBzaWRlIG9mIHRoZSBqb2luLCBvciBldmVuIHdoZXRo ZXIgdGhpcyBraW5kIG9mIGpvaW4gaGFzIHNpZGVzLgorCitKb2luIFN0cmF0ZWd5IEFkdmljZQor PT09PT09PT09PT09PT09PT09PT0KKworVGFncyBzdWNoIGFzIE5FU1RFRF9MT09QX1BMQUlOIHNw ZWNpZnkgdGhlIG1ldGhvZCB0aGF0IHNob3VsZCBiZSB1c2VkIHRvCitwZXJmb3JtIGEgY2VydGFp biBqb2luLiBNb3JlIHNwZWNpZmljYWxseSwgTkVTVEVEX0xPT1BfUExBSU4oeCAoeSB6KSkgc2F5 cwordGhhdCB0aGUgcGxhbiBzaG91bGQgcHV0IHRoZSByZWxhdGlvbiB3aG9zZSBpZGVudGlmaWVy IGlzICJ4IiBvbiB0aGUgaW5uZXIKK3NpZGUgb2YgYSBwbGFpbiBuZXN0ZWQgbG9vcCAob25lIHdp dGhvdXQgbWF0ZXJpYWxpemF0aW9uIG9yIG1lbW9pemF0aW9uKQorYW5kIHRoYXQgaXQgc2hvdWxk IGFsc28gcHV0IGEgam9pbiBiZXR3ZWVuIHRoZSByZWxhdGlvbiB3aG9zZSBpZGVudGlmaWVyIGlz CisieSIgYW5kIHRoZSByZWxhdGlvbiB3aG9zZSBpZGVudGlmaWVyIGlzICJ6IiBvbiB0aGUgaW5u ZXIgc2lkZSBvZiBhIG5lc3RlZAorbG9vcC4gSGVuY2UsIGZvciBhbiBOLXRhYmxlIGpvaW4gcHJv YmxlbSwgdGhlcmUgd2lsbCBiZSBOLTEgcGllY2VzIG9mIGpvaW4KK3N0cmF0ZWd5IGFkdmljZTsg bm8gam9pbiBzdHJhdGVneSBhZHZpY2UgaXMgcmVxdWlyZWQgZm9yIHRoZSBvdXRlcm1vc3QKK3Rh YmxlIGluIHRoZSBqb2luIHByb2JsZW0uCisKK0NvbnNpZGVyaW5nIHRoYXQgd2UgaGF2ZSBib3Ro IGpvaW4gb3JkZXIgYWR2aWNlIGFuZCBqb2luIHN0cmF0ZWd5IGFkdmljZSwKK2l0IG1pZ2h0IHNl ZW0gbmF0dXJhbCB0byBzYXkgdGhhdCBORVNURURfTE9PUF9QTEFJTih4KSBzaG91bGQgYmUgcmVk ZWZpbmVkCit0byBtZWFuIHRoYXQgeCBzaG91bGQgYXBwZWFyIGJ5IGl0c2VsZiBvbiBvbmUgc2lk ZSBvciB0aGUgb3RoZXIgb2YgYSBuZXN0ZWQKK2xvb3AsIHJhdGhlciB0aGFuIHNwZWNpZmljYWxs eSBvbiB0aGUgaW5uZXIgc2lkZSwgYnV0IHRoaXMgZGVmaW5pdGlvbiBhcHBlYXJzCit1c2VsZXNz IGluIHByYWN0aWNlLiBJdCBnaXZlcyB0aGUgcGxhbm5lciB0b28gbXVjaCBmcmVlZG9tIHRvIGRv IHRoaW5ncyB0aGF0CitiZWFyIGxpdHRsZSByZXNlbWJsYW5jZSB0byB3aGF0IHRoZSB1c2VyIHBy b2JhYmx5IGhhZCBpbiBtaW5kLiBUaGlzIG1ha2VzCitvbmx5IGEgbGltaXRlZCBhbW91bnQgb2Yg cHJhY3RpY2FsIGRpZmZlcmVuY2UgaW4gdGhlIGNhc2Ugb2YgYSBtZXJnZSBqb2luIG9yCit1bnBh cmFtZXRlcml6ZWQgbmVzdGVkIGxvb3AsIGJ1dCBmb3IgYSBwYXJhbWV0ZXJpemVkIG5lc3RlZCBs b29wIG9yIGEgaGFzaAoram9pbiwgdGhlIHR3byBzaWRlcyBhcmUgdHJlYXRlZCB2ZXJ5IGRpZmZl cmVudGx5IGFuZCBzYXlpbmcgdGhhdCBhIGNlcnRhaW4KK3JlbGF0aW9uIHNob3VsZCBiZSBpbnZv bHZlZCBpbiBvbmUgb2YgdGhvc2Ugb3BlcmF0aW9ucyB3aXRob3V0IHNheWluZyB3aGljaAorcm9s ZSBpdCBzaG91bGQgdGFrZSBpc24ndCBzYXlpbmcgbXVjaC4KKworVGhpcyBjaG9pY2Ugb2YgZGVm aW5pdGlvbiBpbXBsaWVzIHRoYXQgam9pbiBzdHJhdGVneSBhZHZpY2UgYWxzbyBpbXBvc2VzIHNv bWUKK2pvaW4gb3JkZXIgY29uc3RyYWludHMuIEZvciBleGFtcGxlLCBnaXZlbiBhIGpvaW4gYmV0 d2VlbiBmb28gYW5kIGJhciwKK0hBU0hfSk9JTihiYXIpIGltcGxpZXMgdGhhdCBmb28gaXMgdGhl IGRyaXZpbmcgdGFibGUuIE90aGVyd2lzZSwgaXQgd291bGQKK2JlIGltcG9zc2libGUgdG8gcHV0 IGJhciBiZW5lYXRoIHRoZSBpbm5lciBzaWRlIG9mIGEgSGFzaCBKb2luLgorCitOb3RlIHRoYXQs IGdpdmVuIHRoaXMgZGVmaW5pdGlvbiwgaXQncyByZWFzb25hYmxlIHRvIGNvbnNpZGVyIGRlbGV0 aW5nIHRoZQoram9pbiBvcmRlciBhZHZpY2UgYnV0IGFwcGx5aW5nIHRoZSBqb2luIHN0cmF0ZWd5 IGFkdmljZS4gRm9yIGV4YW1wbGUsCitjb25zaWRlciBhIHN0YXIgc2NoZW1hIHdpdGggdGFibGVz IGZhY3QsIGRpbTEsIGRpbTIsIGRpbTMsIGRpbTQsIGFuZCBkaW01LgorVGhlIGF1dG9tYXRpY2Fs bHkgZ2VuZXJhdGVkIGFkdmljZSBtaWdodCBzcGVjaWZ5IEpPSU5fT1JERVIoZmFjdCBkaW0xIGRp bTMKK2RpbTQgZGltMiBkaW01KSBIQVNIX0pPSU4oZGltMiBkaW00KSBORVNURURfTE9PUF9QTEFJ TihkaW0xIGRpbTMgZGltNSkuCitEZWxldGluZyB0aGUgSk9JTl9PUkRFUiBhZHZpY2UgYWxsb3dz IHRoZSBwbGFubmVyIHRvIHJlb3JkZXIgdGhlIGpvaW5zCitob3dldmVyIGl0IGxpa2VzIHdoaWxl IHN0aWxsIGZvcmNpbmcgdGhlIHNhbWUgY2hvaWNlIG9mIGpvaW4gbWV0aG9kLiBUaGlzCitzZWVt cyBwb3RlbnRpYWxseSB1c2VmdWwsIGFuZCBpcyBvbmUgcmVhc29uIHdoeSBhIHVuaWZpZWQgc3lu dGF4IHRoYXQgY29udHJvbHMKK2JvdGggam9pbiBvcmRlciBhbmQgam9pbiBtZXRob2QgaW4gYSBz aW5nbGUgbG9jdXRpb24gd2FzIG5vdCBjaG9zZW4uCisKK0FkdmljZSBDb21wbGV0ZW5lc3MKKz09 PT09PT09PT09PT09PT09PT0KKworQW4gZXNzZW50aWFsIGd1aWRpbmcgcHJpbmNpcGxlIGlzIHRo YXQgbm8gaW5mZXJlbmNlIG1heSBtYWRlIG9uIHRoZSBiYXNpcworb2YgdGhlIGFic2VuY2Ugb2Yg YWR2aWNlLiBUaGUgdXNlciBpcyBlbnRpdGxlZCB0byByZW1vdmUgYW55IHBvcnRpb24gb2YgdGhl CitnZW5lcmF0ZWQgYWR2aWNlIHdoaWNoIHRoZXkgZGVlbSB1bnN1aXRhYmxlIG9yIGNvdW50ZXJw cm9kdWN0aXZlIGFuZCB0aGUKK3Jlc3VsdCBzaG91bGQgb25seSBiZSB0byBpbmNyZWFzZSB0aGUg ZmxleGliaWxpdHkgYWZmb3JkZWQgdG8gdGhlIHBsYW5uZXIuCitUaGlzIG1lYW5zIHRoYXQgaWYg YWR2aWNlIGNhbiBzYXkgdGhhdCBhIGNlcnRhaW4gb3B0aW1pemF0aW9uIG9yIHRlY2huaXF1ZQor c2hvdWxkIGJlIHVzZWQsIGl0IHNob3VsZCBhbHNvIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhlIG9w dGltaXphdGlvbiBvcgordGVjaG5pcXVlIHNob3VsZCBub3QgYmUgdXNlZC4gV2Ugc2hvdWxkIG5l dmVyIGFzc3VtZSB0aGF0IHRoZSBhYnNlbmNlIG9mIGFuCitpbnN0cnVjdGlvbiB0byBkbyBhIGNl cnRhaW4gdGhpbmcgbWVhbnMgdGhhdCBpdCBzaG91bGQgbm90IGJlIGRvbmU7IGFsbAoraW5zdHJ1 Y3Rpb25zIG11c3QgYmUgZXhwbGljaXQuCisKK1NlbWlqb2luIFVuaXF1ZW5lc3MKKz09PT09PT09 PT09PT09PT09PT0KKworRmFjZWQgd2l0aCBhIHNlbWlqb2luLCB0aGUgcGxhbm5lciBjb25zaWRl cnMgYm90aCBhIGRpcmVjdCBpbXBsZW1lbnRhdGlvbgorYW5kIGEgcGxhbiB3aGVyZSB0aGUgb25l IHNpZGUgaXMgbWFkZSB1bmlxdWUgYW5kIHRoZW4gYW4gaW5uZXIgam9pbiBpcworcGVyZm9ybWVk LiBXZSBlbWl0IFNFTUlKT0lOX1VOSVFVRSgpIGFkdmljZSB3aGVuIHRoaXMgdHJhbnNmb3JtYXRp b24gb2NjdXJzCithbmQgU0VNSUpPSU5fTk9OX1VOSVFVRSgpIGFkdmljZSB3aGVuIGl0IGRvZXNu J3QuIFRoZXNlIGl0ZW1zIHdvcmsgbGlrZQoram9pbiBzdHJhdGVneSBhZHZpY2U6IHRoZSBpbm5l ciBzaWRlIG9mIHRoZSByZWxldmFudCBqb2luIGlzIG5hbWVkLCBhbmQgdGhlCitjaG9zZW4gam9p biBvcmRlciBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgYWR2aWNlIGhhdmluZyBzb21lIGVm ZmVjdC4KKworUGFydGl0aW9ud2lzZQorPT09PT09PT09PT09PQorCitQQVJUSVRJT05XSVNFKCkg YWR2aXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYm90aCB0aG9zZSBwYXJ0aXRpb253aXNlIGpv aW5zCit3aGljaCBzaG91bGQgYmUgcGVyZm9ybWVkIGFuZCB0aG9zZSB3aGljaCBzaG91bGQgbm90 IGJlIHBlcmZvcm1lZDsgdGhlIGlkZWEKK2lzIHRoYXQgZWFjaCBhcmd1bWVudCB0byBQQVJUSVRJ T05XSVNFIHNwZWNpZmllcyBhIHNldCBvZiByZWxhdGlvbnMgdGhhdAorc2hvdWxkIGJlIHNjYW5u ZWQgcGFydGl0aW9ud2lzZSBhZnRlciBiZWluZyBqb2luZWQgdG8gZWFjaCBvdGhlciBhbmQgbm90 aGluZworZWxzZS4gSGVuY2UsIGZvciBleGFtcGxlLCBQQVJUSVRJT05XSVNFKCh0MSB0MikgdDMp IHNwZWNpZmllcyB0aGF0IHRoZQorcXVlcnkgc2hvdWxkIGNvbnRhaW4gYSBwYXJ0aXRpb253aXNl IGpvaW4gYmV0d2VlbiB0MSBhbmQgdDIgYW5kIHRoYXQgdDMKK3Nob3VsZCBub3QgYmUgcGFydCBv ZiBhbnkgcGFydGl0aW9ud2lzZSBqb2luLiBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgcmVscworaW4g dGhlIHF1ZXJ5LCBzcGVjaWZ5aW5nIGp1c3QgUEFSVElUSU9OV0lTRSgodDEgdDIpKSB3b3VsZCBo YXZlIHRoZSBzYW1lCitlZmZlY3QsIHNpbmNlIHRoZXJlIHdvdWxkIGJlIG5vIG90aGVyIHJlbHMg dG8gd2hpY2ggdDMgY291bGQgYmUgam9pbmVkIGluCithIHBhcnRpdGlvbndpc2UgZmFzaGlvbi4K KworUGFyYWxsZWwgUXVlcnkgKEdhdGhlciwgZXRjLikKKz09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisKK0VhY2ggYXJndW1lbnQgdG8gR0FUSEVSKCkgb3IgR0FUSEVSX01FUkdFKCkgaXMg YSBzaW5nbGUgcmVsYXRpb24gb3IgYW4KK2V4YWN0IHNldCBvZiByZWxhdGlvbnMgb24gdG9wIG9m IHdoaWNoIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLAorcmVzcGVjdGl2ZWx5LCBzaG91 bGQgYmUgcGxhY2VkLiBFYWNoIGFyZ3VtZW50IHRvIE5PX0dBVEhFUigpIGlzIGEgc2luZ2xlCity ZWxhdGlvbiB0aGF0IHNob3VsZCBub3QgYXBwZWFyIGJlbmVhdGggYW55IEdhdGhlciBvciBHYXRo ZXIgTWVyZ2Ugbm9kZTsKK3RoYXQgaXMsIHBhcmFsbGVsaXNtIHNob3VsZCBub3QgYmUgdXNlZC4K KworSW1wbGljaXQgSm9pbiBPcmRlciBDb25zdHJhaW50cworPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorCitXaGVuIEpPSU5fT1JERVIoKSBhZHZpY2UgaXMgbm90IHByb3ZpZGVkIGZv ciBhIHBhcnRpY3VsYXIgam9pbiBwcm9ibGVtLAorb3RoZXIgcGllY2VzIG9mIGFkdmljZSBtYXkg c3RpbGwgaW5jaWRlbnRhbGx5IGNvbnN0cmFpbnQgdGhlIGpvaW4gb3JkZXIuCitGb3IgZXhhbXBs ZSwgYSB1c2VyIHdobyBzcGVjaWZpZXMgSEFTSF9KT0lOKChmb28gYmFyKSkgaXMgZXhwbGljaXRs eSBzYXlpbmcKK3RoYXQgdGhlcmUgc2hvdWxkIGJlIGEgaGFzaCBqb2luIHdpdGggZXhhY3RseSBm b28gYW5kIGJhciBvbiB0aGUgb3V0ZXIKK3NpZGUgb2YgaXQsIGJ1dCB0aGF0IGFsc28gaW1wbGll cyB0aGF0IGZvbyBhbmQgYmFyIG11c3QgYmUgam9pbmVkIHRvCitlYWNoIG90aGVyIGJlZm9yZSBl aXRoZXIgb2YgdGhlbSBpcyBqb2luZWQgdG8gYW55dGhpbmcgZWxzZS4gT3RoZXJ3aXNlLAordGhl IGpvaW4gdGhlIHVzZXIgaXMgYXR0ZW1wdGluZyB0byBjb25zdHJhaW50IHdvbid0IGFjdHVhbGx5 IG9jY3VyIGluIHRoZQorcXVlcnksIHdoaWNoIGVuZHMgdXAgbG9va2luZyBsaWtlIHRoZSBzeXN0 ZW0gaGFzIGp1c3QgZGVjaWRlZCB0byBpZ25vcmUKK3RoZSBhZHZpY2UgYWx0b2dldGhlci4KKwor RnV0dXJlIFdvcmsKKz09PT09PT09PT09CisKK1dlIGRvbid0IGhhbmRsZSBjaG9pY2Ugb2YgYWdn cmVnYXRpb246IGl0IHdvdWxkIGJlIG5pY2UgdG8gYmUgYWJsZSB0byBmb3JjZQorc29ydGVkIG9y IGdyb3VwZWQgYWdncmVnYXRpb24uIEknbSBndWVzc2luZyB0aGlzIGNhbiBiZSBsZWZ0IHRvIGZ1 dHVyZSB3b3JrLgorCitNb3JlIHNlcmlvdXNseSwgd2UgZG9uJ3Qga25vdyBhbnl0aGluZyBhYm91 dCBlYWdlciBhZ2dyZWdhdGlvbiwgd2hpY2ggY291bGQKK2hhdmUgYSBsYXJnZSBpbXBhY3Qgb24g dGhlIHNoYXBlIG9mIHRoZSBwbGFuIHRyZWUuIFhYWDogVGhpcyBuZWVkcyBzb21lIHN0dWR5Cit0 byBkZXRlcm1pbmUgaG93IGxhcmdlIGEgcHJvYmxlbSBpdCBpcywgYW5kIG1pZ2h0IG5lZWQgdG8g YmUgZml4ZWQgc29vbmVyCityYXRoZXIgdGhhbiBsYXRlci4KKworV2UgZG9uJ3Qgb2ZmZXIgYW55 IGNvbnRyb2wgb3ZlciBlc3RpbWF0ZXMsIG9ubHkgb3V0Y29tZXMuIEl0IHNlZW1zIGxpa2UgYQor Z29vZCBpZGVhIHRvIGluY29ycG9yYXRlIHRoYXQgYWJpbGl0eSBhdCBzb21lIGZ1dHVyZSBwb2lu dCwgYXMgcGdfaGludF9wbGFuCitkb2VzLiBIb3dldmVyLCBzaW5jZSBwcmltYXJ5IGdvYWwgb2Yg dGhlIGluaXRpYWwgZGV2ZWxvcG1lbnQgd29yayBpcyB0byBiZQorYWJsZSB0byBpbmR1Y2UgdGhl IHBsYW5uZXIgdG8gcmVjcmVhdGUgYSBkZXNpcmVkIHBsYW4gdGhhdCB3b3JrZWQgd2VsbCBpbgor dGhlIHBhc3QsIHRoaXMgaGFzIG5vdCBiZWVuIGluY2x1ZGVkIGluIHRoZSBpbml0aWFsIGRldmVs b3BtZW50IGVmZm9ydC4KKworWFhYIE5lZWQgdG8gaW52ZXN0aWdhdGUgd2hldGhlciBhbmQgaG93 IHdlbGwgc3VwcGx5aW5nIGFkdmljZSB3b3JrcyB3aXRoIEdFUU8KZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uMGNjMGRlZGY4NTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQKQEAgLTAsMCArMSwzNzEgQEAKK0xPQUQgJ3BnX3Bs YW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMTsKK1NF VCBwYXJhbGxlbF9zZXR1cF9jb3N0ID0gMDsKK1NFVCBwYXJhbGxlbF90dXBsZV9jb3N0ID0gMDsK K1NFVCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplID0gMDsKK1NFVCBkZWJ1Z19wYXJhbGxl bF9xdWVyeSA9IG9mZjsKK0NSRUFURSBUQUJMRSBndF9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtl eSwgZGltIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJU IElOVE8gZ3RfZGltIChkaW0pIFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2RpbTsKK0NSRUFURSBUQUJMRSBndF9m YWN0ICgKKwlpZCBpbnQgbm90IG51bGwsCisJZGltX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJl bmNlcyBndF9kaW0gKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJ TlNFUlQgSU5UTyBndF9mYWN0CisJU0VMRUNUIGcsIChnJTMpKzEgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMDAwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBndF9mYWN0OworLS0gQnkgZGVmYXVsdCwg d2UgZXhwZWN0IEdhdGhlciBNZXJnZSB3aXRoIGEgcGFyYWxsZWwgaGFzaCBqb2luLgorRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lO IGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdhdGhlciBNZXJn ZQorICAgV29ya2VycyBQbGFubmVkOiAxCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6 IGYuZGltX2lkCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICAgICAg ICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAgICAgICAtPiAgUGFyYWxs ZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFz aAorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBk CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pP SU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUl9NRVJHRSgoZiBkKSkKKygxNCByb3dz KQorCistLSBGb3JjZSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9mIGJvdGggcmVsYXRpb25zIHRv Z2V0aGVyLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhl cl9tZXJnZSgoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRF UiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEdhdGhlciBNZXJnZQorICAgV29ya2VycyBQbGFubmVkOiAxCisgICAtPiAg U29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAtPiAgUGFyYWxsZWwg SGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisg ICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAgICAg ICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFs bGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRI RVJfTUVSR0UoKGYgZCkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAg R0FUSEVSX01FUkdFKChmIGQpKQorKDE2IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnZ2F0aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQg PSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU29ydAorICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAt PiAgR2F0aGVyCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBQYXJh bGxlbCBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5p ZCkKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAg ICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAg UGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IEdBVEhFUigoZiBkKSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBH QVRIRVIoKGYgZCkpCisoMTYgcm93cykKKworQ09NTUlUOworLS0gRm9yY2UgYSBzZXBhcmF0ZSBH YXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9wZXJhdGlvbiBmb3IgZWFjaCByZWxhdGlvbi4KK0JFR0lO OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZiBkKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFj dCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisg ICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIEdhdGhlciBNZXJnZQorICAg ICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAg ICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNj YW4gb24gZ3RfZmFjdCBmCisgICAtPiAgR2F0aGVyIE1lcmdlCisgICAgICAgICBXb3JrZXJzIFBs YW5uZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZC5p ZAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoZikgLyogbWF0Y2hlZCAqLworICAg R0FUSEVSX01FUkdFKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYg ZCkKKyAgIEdBVEhFUl9NRVJHRShmIGQpCisoMjAgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBk LmlkKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAg LT4gIEdhdGhlcgorICAgICAgICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAg ICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgU29ydAorICAg ICAgICAgU29ydCBLZXk6IGQuaWQKKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAg IFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2Fu IG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoZikgLyogbWF0 Y2hlZCAqLworICAgR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9T Q0FOKGYgZCkKKyAgIEdBVEhFUihmIGQpCisoMjAgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoKGQgZC9kLmQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04g Zi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1f aWQgPSBkLmlkKQorICAgLT4gIEdhdGhlciBNZXJnZQorICAgICAgICAgV29ya2VycyBQbGFubmVk OiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lk CisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAt PiAgSW5kZXggU2NhbiB1c2luZyBndF9kaW1fcGtleSBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgR0FUSEVSKChkIGQvZC5kKSkgLyogcGFydGlhbGx5IG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pP SU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmd0X2Rp bV9wa2V5KQorICAgR0FUSEVSX01FUkdFKGYpCisgICBOT19HQVRIRVIoZCkKKygxNyByb3dzKQor CitDT01NSVQ7CistLSBGb3JjZSBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb24gb25lIHJlbGF0 aW9uIGJ1dCBubyBwYXJhbGxlbGlzbSBvbiBvdGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZikgbm9fZ2F0aGVyKGQpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9J TiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdl IENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgR2F0aGVyIE1lcmdlCisgICAgICAgICBX b3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0 IEtleTogZi5kaW1faWQKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBn dF9mYWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGd0X2RpbV9wa2V5IG9uIGd0X2RpbSBk CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoZikgLyogbWF0Y2hlZCAq LworICAgTk9fR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FO KGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmd0X2RpbV9wa2V5KQorICAgR0FUSEVSX01FUkdF KGYpCisgICBOT19HQVRIRVIoZCkKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZShkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChm LmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lk CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgR2F0aGVyIE1lcmdl CisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAg ICAgICAgICBTb3J0IEtleTogZC5pZAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBT Y2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0Uo ZCkgLyogbWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4o ZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUl9NRVJHRShkKQorICAgTk9fR0FUSEVSKGYp CisoMTkgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIo Zikgbm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JE RVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAg SW5kZXggU2NhbiB1c2luZyBndF9kaW1fcGtleSBvbiBndF9kaW0gZAorICAgLT4gIFNvcnQKKyAg ICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIEdhdGhlcgorICAgICAgICAg ICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2Vx IFNjYW4gb24gZ3RfZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoZikg LyogbWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikK KyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmd0X2RpbV9wa2V5KQorICAg R0FUSEVSKGYpCisgICBOT19HQVRIRVIoZCkKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChm LmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lk CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgU29ydAorICAgICAg ICAgU29ydCBLZXk6IGQuaWQKKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdv cmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9u IGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoZCkgLyogbWF0Y2hl ZCAqLworICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9T Q0FOKGYgZCkKKyAgIEdBVEhFUihkKQorICAgTk9fR0FUSEVSKGYpCisoMTkgcm93cykKKworQ09N TUlUOworLS0gRm9yY2Ugbm8gR2F0aGVyIG9yIEdhdGhlciBNZXJnZSB1c2UgYXQgYWxsLgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ25vX2dhdGhlcihmIGQpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0 IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVy Z2UgQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGd0X2Rp bV9wa2V5IG9uIGd0X2RpbSBkCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGlt X2lkCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBOT19HQVRIRVIoZikgLyogbWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGQpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikK KyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQg cHVibGljLmd0X2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygxNSByb3dzKQorCitDT01N SVQ7CistLSBDYW4ndCBmb3JjZSBHYXRoZXIgTWVyZ2Ugd2l0aG91dCB0aGUgT1JERVIgQlkgY2xh dXNlLCBidXQganVzdCBHYXRoZXIgaXMgT0suCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04g Zi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEdhdGhlcgorICAgRGlzYWJsZWQ6IHRydWUKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQor ICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQg PSBkLmlkKQorICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAg ICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEg U2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdF KChmIGQpKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAg R0FUSEVSKChmIGQpKQorKDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnZ2F0aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlk OworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdhdGhlcgor ICAgV29ya2VycyBQbGFubmVkOiAxCisgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAg ICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAtPiAgUGFyYWxsZWwgU2Vx IFNjYW4gb24gZ3RfZmFjdCBmCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAg ICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBHQVRIRVIoKGYgZCkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4o ZiBkKQorICAgR0FUSEVSKChmIGQpKQorKDE0IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3QgY29u ZmxpY3RpbmcgYWR2aWNlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ2dhdGhlcigoZiBkKSkgbm9fZ2F0aGVyKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHYXRoZXIgTWVyZ2UKKyAgIFdvcmtlcnMgUGxh bm5lZDogMQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAg ICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoZi5k aW1faWQgPSBkLmlkKQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0 X2ZhY3QgZgorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgR0FUSEVSKChmIGQpKSAvKiBtYXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVk ICovCisgICBOT19HQVRIRVIoZikgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lO KGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0UoKGYgZCkpCisoMTcgcm93cykK KworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9q b2luX29yZGVyLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRl ci5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRiMGRjZWY3MDEy Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2lu X29yZGVyLm91dApAQCAtMCwwICsxLDUwOSBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VU IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworQ1JFQVRFIFRBQkxFIGpvX2Rp bTEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZGltMSAoaWQsIGRp bTEsIHZhbDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSAr IDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9f ZGltMTsKK0NSRUFURSBUQUJMRSBqb19kaW0yIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0y IHRleHQsIHZhbDIgaW50KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lO U0VSVCBJTlRPIGpvX2RpbTIgKGlkLCBkaW0yLCB2YWwyKQorCVNFTEVDVCBnLCAnc29tZSBmaWxs ZXIgdGV4dCAnIHx8IGcsIChnICUgNykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEw MDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19kaW0yOworQ1JFQVRFIFRBQkxFIGpvX2ZhY3QgKAor CWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW0xX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNl cyBqb19kaW0xIChpZCksCisJZGltMl9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9f ZGltMiAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJ TlRPIGpvX2ZhY3QKKwlTRUxFQ1QgZywgKGclMTAwKSsxLCAoZyUxMDApKzEgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19mYWN0OworLS0gV2UgZXhw ZWN0IHRvIGpvaW4gdG8gZDIgZmlyc3QgYW5kIHRoZW4gZDEsIHNpbmNlIHRoZSBjb25kaXRpb24g b24gZDIKKy0tIGlzIG1vcmUgc2VsZWN0aXZlLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04g Zi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBk Mi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkK KyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlk KQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gam9fZGltMSBkMQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQyIGQxKQorICAgSEFTSF9K T0lOKGQyIGQxKQorICAgU0VRX1NDQU4oZiBkMiBkMSkKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQor KDE2IHJvd3MpCisKKy0tIEZvcmNlIGEgZmV3IGRpZmZlcmVudCBqb2luIG9yZGVycy4gU29tZSBv ZiB0aGVzZSBhcmUgdmVyeSBpbmVmZmljaWVudCwKKy0tIGJ1dCB0aGUgcGxhbm5lciBjb25zaWRl cnMgdGhlbSBhbGwgdmlhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ2pvaW5fb3JkZXIoZiBkMSBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04g Zi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBk Mi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkK KyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlk KQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDEgZDIpIC8qIG1hdGNoZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDEgZDIpCisgICBI QVNIX0pPSU4oZDEgZDIpCisgICBTRVFfU0NBTihmIGQxIGQyKQorICAgTk9fR0FUSEVSKGYgZDEg ZDIpCisoMTggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2lu X29yZGVyKGYgZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9 IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVS RSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFz aCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmls dGVyOiAodmFsMiA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpv X2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQyIGQxKSAvKiBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQyIGQxKQorICAgSEFTSF9KT0lOKGQy IGQxKQorICAgU0VRX1NDQU4oZiBkMiBkMSkKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMSBm IGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBq b19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxF RlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEg QU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisg ICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAg ICAgIEhhc2ggQ29uZDogKGQxLmlkID0gZi5kaW0xX2lkKQorICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAg IC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKGQxIGYgZDIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGQxIGYgZDIpCisgICBIQVNIX0pPSU4oZiBkMikKKyAgIFNFUV9TQ0FOKGQx IGYgZDIpCisgICBOT19HQVRIRVIoZiBkMSBkMikKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiAoZDEgZDIpKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpP SU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQy IE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6ICgoZi5kaW0yX2lkID0gZDIuaWQp IEFORCAoZi5kaW0xX2lkID0gZDEuaWQpKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5 OiBmLmRpbTJfaWQsIGYuZGltMV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3Qg ZgorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBkMi5pZCwgZDEuaWQKKyAgICAgICAg IC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEg ZDEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAg ICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g am9fZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEp CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgKGQxIGQyKSkgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiAoZDEgZDIp KQorICAgTUVSR0VfSk9JTl9QTEFJTigoZDEgZDIpKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJ WkUoZDIpCisgICBTRVFfU0NBTihmIGQxIGQyKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMjEg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYg e2QxIGQyfSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQK KwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEg PSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25k OiAoKGYuZGltMl9pZCA9IGQyLmlkKSBBTkQgKGYuZGltMV9pZCA9IGQxLmlkKSkKKyAgIC0+ICBT b3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW0yX2lkLCBmLmRpbTFfaWQKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTog ZDIuaWQsIGQxLmlkCisgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2 YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihmIHtkMSBkMn0pIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoZiAoZDIgZDEpKQorICAgTUVSR0VfSk9JTl9QTEFJTigoZDEg ZDIpKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZDEpCisgICBTRVFfU0NBTihmIGQyIGQx KQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMjEgcm93cykKKworQ09NTUlUOworLS0gRm9yY2Ug YSBqb2luIG9yZGVyIGJ5IG1lbnRpb25pbmcganVzdCBhIHByZWZpeCBvZiB0aGUgam9pbiBsaXN0 LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIo ZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpv X2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVG VCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBB TkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZDIuaWQgPSBmLmRpbTJfaWQpCisgICAtPiAgU2Vx IFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAg SGFzaAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAo Zi5kaW0xX2lkID0gZDEuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFj dCBmCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMikgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgKGYg ZDEpKQorICAgSEFTSF9KT0lOKGQxIChmIGQxKSkKKyAgIFNFUV9TQ0FOKGQyIGYgZDEpCisgICBO T19HQVRIRVIoZiBkMSBkMikKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ2pvaW5fb3JkZXIoZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9O IGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0g ZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2Ug Sm9pbgorICAgTWVyZ2UgQ29uZDogKChkMi5pZCA9IGYuZGltMl9pZCkgQU5EIChkMS5pZCA9IGYu ZGltMV9pZCkpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGQyLmlkLCBkMS5pZAor ICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g am9fZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAg ICAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2 YWwxID0gMSkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW0yX2lkLCBmLmRp bTFfaWQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZDEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGQxIGYpCisgICBNRVJHRV9KT0lOX1BMQUlO KGYpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGQyIGQxIGYp CisgICBOT19HQVRIRVIoZiBkMSBkMikKKygyMSByb3dzKQorCitDT01NSVQ7CistLSBqb19mYWN0 IGlzIG5vdCBwYXJ0aXRpb25lZCwgYnV0IGxldCdzIHRyeSBwcmV0ZW5kaW5nIHRoYXQgaXQgaXMg YW5kCistLSB2ZXJpZnlpbmcgdGhhdCB0aGUgYWR2aWNlIGRvZXMgbm90IGFwcGx5LgorQkVHSU47 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZi9kMSBkMSBk MiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9f ZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZU IEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFO RCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUK KyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgRGlzYWJsZWQ6IHRydWUKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpv X2RpbTFfcGtleSBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQg PSBmLmRpbTFfaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBJ bmRleCBTY2FuIHVzaW5nIGpvX2RpbTJfcGtleSBvbiBqb19kaW0yIGQyCisgICAgICAgICBJbmRl eCBDb25kOiAoaWQgPSBmLmRpbTJfaWQpCisgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZi9kMSBkMSBkMikgLyogcGFydGlh bGx5IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYg ZDEgZDIpCisgICBORVNURURfTE9PUF9QTEFJTihkMSBkMikKKyAgIFNFUV9TQ0FOKGYpCisgICBJ TkRFWF9TQ0FOKGQxIHB1YmxpYy5qb19kaW0xX3BrZXkgZDIgcHVibGljLmpvX2RpbTJfcGtleSkK KyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE5IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmL2QxIChkMSBkMikpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBq b19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04g Zi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEpvaW4gRmlsdGVyOiAo KGQxLmlkID0gZi5kaW0xX2lkKSBBTkQgKGQyLmlkID0gZi5kaW0yX2lkKSkKKyAgIC0+ICBOZXN0 ZWQgTG9vcAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAg RmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYvZDEgKGQxIGQyKSkgLyogcGFydGlhbGx5 IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQxIGQy IGYpCisgICBORVNURURfTE9PUF9QTEFJTihmKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUo ZDIpCisgICBTRVFfU0NBTihkMSBkMiBmKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93 cykKKworQ09NTUlUOworLS0gVGhlIHVudXN1YWwgZm9ybXVsYXRpb24gb2YgdGhpcyBxdWVyeSBp cyBpbnRlbmRlZCB0byBwcmV2ZW50IHRoZSBxdWVyeQorLS0gcGxhbm5lciBmcm9tIHJlZHVjaW5n IHRoZSBGVUxMIEpPSU4gdG8gc29tZSBvdGhlciBqb2luIHR5cGUsIHNvIHRoYXQgd2UKKy0tIGNh biB0ZXN0IHdoYXQgaGFwcGVucyB3aXRoIGEgam9pbiB0eXBlIHRoYXQgY2Fubm90IGJlIHJlb3Jk ZXJlZC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpv X2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04g Zi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRp bTFfaWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6 ICgoZDEuaWQgPSBmLmRpbTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkpCisgICAtPiAgTWVy Z2UgRnVsbCBKb2luCisgICAgICAgICBNZXJnZSBDb25kOiAoKChkMi5pZCArIDApKSA9ICgoZi5k aW0yX2lkICsgMCkpKQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5 OiAoKGQyLmlkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBk MgorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9p ZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4g IE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBkMSkKKyAgIE1FUkdFX0pPSU5f UExBSU4oZikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQxKQorICAgU0VRX1NDQU4oZDIg ZiBkMSkKKyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDE4IHJvd3MpCisKKy0tIFdlIHNob3VsZCBu b3QgYmUgYWJsZSB0byBmb3JjZSB0aGUgcGxhbm5lciB0byBqb2luIGYgdG8gZDEgZmlyc3QsIGJl Y2F1c2UKKy0tIHRoYXQgaXMgbm90IGEgdmFsaWQgam9pbiBvcmRlciwgYnV0IHdlIHNob3VsZCBi ZSBhYmxlIHRvIGZvcmNlIHRoZSBwbGFubmVyCistLSB0byBtYWtlIGVpdGhlciBkMiBvciBmIHRo ZSBkcml2aW5nIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ2pvaW5fb3JkZXIoZiBkMSBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxM IEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlk ID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBM b29wCisgICBEaXNhYmxlZDogdHJ1ZQorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFf aWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkpCisgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAg ICAgICBEaXNhYmxlZDogdHJ1ZQorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZDIuaWQgKyAwKSkg PSAoKGYuZGltMl9pZCArIDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBT b3J0IEtleTogKChkMi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpv X2RpbTIgZDIKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChm LmRpbTJfaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYK KyAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGYgZDEgZDIpIC8qIHBhcnRpYWxseSBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMiBmIGQxKQorICAgTUVSR0VfSk9JTl9QTEFJ TihmKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZDEpCisgICBTRVFfU0NBTihkMiBmIGQxKQorICAg Tk9fR0FUSEVSKGQxIGYgZDIpCisoMjEgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0 IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlP TiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBO ZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFfaWQpIE9SIChmLmRp bTFfaWQgSVMgTlVMTCkpCisgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAgICAgICBNZXJnZSBD b25kOiAoKChmLmRpbTJfaWQgKyAwKSkgPSAoKGQyLmlkICsgMCkpKQorICAgICAgICAgLT4gIFNv cnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCArIDApKQorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgICAgICAgLT4gIFNvcnQKKyAgICAg ICAgICAgICAgIFNvcnQgS2V5OiAoKGQyLmlkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gam9fZGltMiBkMgorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gam9fZGltMSBkMQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRF UihmIGQyIGQxKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9J Tl9PUkRFUihmIGQyIGQxKQorICAgTUVSR0VfSk9JTl9QTEFJTihkMikKKyAgIE5FU1RFRF9MT09Q X01BVEVSSUFMSVpFKGQxKQorICAgU0VRX1NDQU4oZiBkMiBkMSkKKyAgIE5PX0dBVEhFUihkMSBm IGQyKQorKDIwIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9p bl9vcmRlcihkMiBmIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBq b19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRp bTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAg IEpvaW4gRmlsdGVyOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwp KQorICAgLT4gIE1lcmdlIEZ1bGwgSm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZDIuaWQg KyAwKSkgPSAoKGYuZGltMl9pZCArIDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAg ICAgICBTb3J0IEtleTogKChkMi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIGpvX2RpbTIgZDIKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtl eTogKChmLmRpbTJfaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19m YWN0IGYKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2Rp bTEgZDEKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBkMSkgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBk MSkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQx KQorICAgU0VRX1NDQU4oZDIgZiBkMSkKKyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDIwIHJvd3Mp CisKK0NPTU1JVDsKKy0tIFR3byBpbmNvbXBhdGlibGUgam9pbiBvcmRlcnMgc2hvdWxkIGNvbmZs aWN0LiBJbiB0aGUgc2Vjb25kIGNhc2UsCistLSB0aGUgY29uZmxpY3QgaXMgaW1wbGljaXQ6IGlm IGQxIGlzIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgam9pbiBvZiBhbnkKKy0tIHR5cGUsIGl0IGNh bm5vdCBhbHNvIGJlIHRoZSBkcml2aW5nIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZikgam9pbl9vcmRlcihkMSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlO TkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAw ID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxM OworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYu ZGltMV9pZCkgT1IgKGYuZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4K KyAgICAgICAgIE1lcmdlIENvbmQ6ICgoKGYuZGltMl9pZCArIDApKSA9ICgoZDIuaWQgKyAwKSkp CisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lk ICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAg ICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAtPiAgTWF0ZXJpYWxpemUK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKGYpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nICovCisgICBKT0lO X09SREVSKGQxKSAvKiBtYXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQyIGQxKQorICAgTUVSR0VfSk9JTl9QTEFJ TihkMikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQxKQorICAgU0VRX1NDQU4oZiBkMiBk MSkKKyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDIxIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMSkgaGFzaF9qb2luKGQxKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5O RVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAg PSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9 IGYuZGltMV9pZCkgT1IgKGYuZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBq b19kaW0xIGQxCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBNZXJnZSBGdWxsIEpv aW4KKyAgICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICgoKGQyLmlkICsgMCkpID0gKChmLmRpbTJf aWQgKyAwKSkpCisgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAg U29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAg ICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKGQxKSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAqLworICAgSEFTSF9KT0lOKGQxKSAv KiBtYXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihkMSAoZDIgZikpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBO RVNURURfTE9PUF9NQVRFUklBTElaRSgoZiBkMikpCisgICBTRVFfU0NBTihkMSBkMiBmKQorICAg Tk9fR0FUSEVSKGQxIGYgZDIpCisoMjEgcm93cykKKworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dCBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgyNWNjYTUxNTg0Ci0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dApAQCAtMCww ICsxLDMzOCBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3Jr ZXJzX3Blcl9nYXRoZXIgPSAwOworQ1JFQVRFIFRBQkxFIGpvaW5fZGltIChpZCBzZXJpYWwgcHJp bWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsK K0lOU0VSVCBJTlRPIGpvaW5fZGltIChkaW0pIFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvaW5fZGltOworQ1JFQVRF IFRBQkxFIGpvaW5fZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5LAorCWRpbV9pZCBpbnRlZ2Vy IG5vdCBudWxsIHJlZmVyZW5jZXMgam9pbl9kaW0gKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2ZhY3QKKwlTRUxFQ1QgZywgKGclMykr MSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK0NSRUFURSBJTkRFWCBqb2luX2Zh Y3RfZGltX2lkIE9OIGpvaW5fZmFjdCAoZGltX2lkKTsKK1ZBQ1VVTSBBTkFMWVpFIGpvaW5fZmFj dDsKKy0tIFdlIGV4cGVjdCBhIGhhc2ggam9pbiBieSBkZWZhdWx0LgorRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgor ICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5f ZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQK KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9J TihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMCByb3dzKQorCist LSBUcnkgZm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGluIHR1cm4gd2l0aCBqb2luX2RpbSBhcyB0 aGUgaW5uZXIgdGFibGUuCistLSBBbGwgb2YgdGhlc2Ugc2hvdWxkIHdvcmsgZXhjZXB0IGZvciBN RVJHRV9KT0lOX01BVEVSSUFMSVpFOyB0aGF0IHdpbGwKKy0tIGZhaWwsIGJlY2F1c2UgdGhlIHBs YW5uZXIga25vd3MgdGhhdCBqb2luX2RpbSAoaWQpIGlzIHVuaXF1ZSwgYW5kIHdpbGwKKy0tIHJl ZnVzZSB0byBhZGQgbWFyay9yZXN0b3JlIG92ZXJoZWFkLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBI YXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0 IGYKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSEFTSF9KT0lOKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQor ICAgU0VRX1NDQU4oZiBkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fTUFURVJJQUxJWkUoZCknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFj dCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTWVyZ2UgSm9pbgorICAgRGlzYWJsZWQ6IHRydWUKKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9p ZCA9IGQuaWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpv aW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5f ZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE1FUkdFX0pPSU5fTUFURVJJQUxJWkUo ZCkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9J Tl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBJTkRFWF9TQ0FOKGYgcHVi bGljLmpvaW5fZmFjdF9kaW1faWQgZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhF UihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdN RVJHRV9KT0lOX1BMQUlOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJ U0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBk LmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRp bV9pZCA9IGQuaWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9u IGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpv aW5fZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBk KQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQorICAgSU5ERVhfU0NBTihmIHB1YmxpYy5qb2luX2Zh Y3RfZGltX2lkIGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDEx IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1Bf TUFURVJJQUxJWkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7 CisgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9p biBGaWx0ZXI6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0 IGYKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGlt IGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYg ZCkKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBO T19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnTkVTVEVEX0xPT1BfTUVNT0laRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpv aW5fZmFjdCBmCisgICAtPiAgTWVtb2l6ZQorICAgICAgICAgQ2FjaGUgS2V5OiBmLmRpbV9pZAor ICAgICAgICAgQ2FjaGUgTW9kZTogbG9naWNhbAorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNp bmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAgICAgICAgICAgICBJbmRleCBDb25k OiAoaWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09Q X01FTU9JWkUoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIoZiBkKQorICAgTkVTVEVEX0xPT1BfTUVNT0laRShkKQorICAgU0VRX1NDQU4oZikK KyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQp CisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURf TE9PUF9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsK KyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2Nh biB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgICAgICAgIEluZGV4IENvbmQ6 IChpZCA9IGYuZGltX2lkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1Bf UExBSU4oZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZiBkKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJ TkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDEy IHJvd3MpCisKK0NPTU1JVDsKKy0tIE5vdyB0cnkgZm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGlu IHR1cm4gd2l0aCBqb2luX2ZhY3QgYXMgdGhlIGlubmVyCistLSB0YWJsZS4gQWxsIG9mIHRoZXNl IHNob3VsZCB3b3JrLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0hBU0hfSk9JTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsK KyAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGQuaWQgPSBm LmRpbV9pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgICAtPiAgSGFzaAorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBIQVNIX0pPSU4oZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoZCBmKQorICAgSEFTSF9KT0lOKGYpCisgICBTRVFfU0NBTihkIGYpCisg ICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnTUVSR0VfSk9JTl9NQVRFUklBTElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBN ZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9p bl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIE1FUkdFX0pPSU5fTUFURVJJQUxJWkUoZikgLyogbWF0Y2hl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTUVS R0VfSk9JTl9NQVRFUklBTElaRShmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9w a2V5IGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9QTEFJ TihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00g am9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQor ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAt PiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBNRVJHRV9KT0lOX1BMQUlOKGYpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE1FUkdFX0pP SU5fUExBSU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSBmIHB1Ymxp Yy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMSByb3dzKQorCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2lu X2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoZi5k aW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ICBNYXRl cmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShmKSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBORVNURURf TE9PUF9NQVRFUklBTElaRShmKQorICAgU0VRX1NDQU4oZCBmKQorICAgTk9fR0FUSEVSKGYgZCkK KygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9M T09QX01FTU9JWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGlt IGQKKyAgIC0+ICBNZW1vaXplCisgICAgICAgICBDYWNoZSBLZXk6IGQuaWQKKyAgICAgICAgIENh Y2hlIE1vZGU6IGxvZ2ljYWwKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFj dF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChkaW1f aWQgPSBkLmlkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfTUVNT0la RShmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRF UihkIGYpCisgICBORVNURURfTE9PUF9NRU1PSVpFKGYpCisgICBTRVFfU0NBTihkKQorICAgSU5E RVhfU0NBTihmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkKKygx NSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09Q X1BMQUlOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg TmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgICAgICAgICBJbmRl eCBDb25kOiAoZGltX2lkID0gZC5pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RF RF9MT09QX1BMQUlOKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGQgZikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGYpCisgICBTRVFfU0NBTihk KQorICAgSU5ERVhfU0NBTihmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVS KGYgZCkKKygxMiByb3dzKQorCitDT01NSVQ7CistLSBOb24td29ya2luZyBjYXNlcy4gV2UgY2Fu J3QgZm9yY2UgYSBmb3JlaWduIGpvaW4gYmV0d2VlbiB0aGVzZSB0YWJsZXMsCistLSBiZWNhdXNl IHRoZXkgYXJlbid0IGZvcmVpZ24gdGFibGVzLiBXZSBhbHNvIGNhbid0IHVzZSB0d28gZGlmZmVy ZW50CistLSBzdHJhdGVnaWVzIG9uIHRoZSBzYW1lIHRhYmxlLCBub3IgY2FuIHdlIHB1dCBib3Ro IHRhYmxlcyBvbiB0aGUgaW5uZXIKKy0tIHNpZGUgb2YgdGhlIHNhbWUgam9pbi4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGYgZCkpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2Zh Y3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNh YmxlZDogdHJ1ZQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgICAgICAgIEluZGV4IENv bmQ6IChpZCA9IGYuZGltX2lkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgRk9SRUlHTl9K T0lOKChmIGQpKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQpCisgICBTRVFfU0NB TihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVS KGYgZCkKKygxMyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05F U1RFRF9MT09QX1BMQUlOKGYpIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lO IGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVy Z2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBJbmRleCBT Y2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAgLT4gIEluZGV4IFNjYW4g dXNpbmcgam9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgTkVTVEVEX0xPT1BfUExBSU4oZikgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZh aWxlZCAqLworICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZikgLyogbWF0Y2hlZCwgY29uZmxp Y3RpbmcsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo ZCBmKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2lu X2RpbV9wa2V5IGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBkKQor KDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xP T1BfUExBSU4oZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsK KyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2Nh biB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgICAgICAgIEluZGV4IENvbmQ6 IChpZCA9IGYuZGltX2lkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1Bf UExBSU4oZikgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgICBORVNURURfTE9PUF9QTEFJTihkKSAv KiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQp CisgICBORVNURURfTE9PUF9QTEFJTihkKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4o ZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTMgcm93cykKKwor Q09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9sb2Nh bF9jb2xsZWN0b3Iub3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9sb2NhbF9j b2xsZWN0b3Iub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mMmFk ZWYzOWVkOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0 ZWQvbG9jYWxfY29sbGVjdG9yLm91dApAQCAtMCwwICsxLDY3IEBACitDUkVBVEUgRVhURU5TSU9O IHBnX3BsYW5fYWR2aWNlOworU0VUIGRlYnVnX3BhcmFsbGVsX3F1ZXJ5ID0gb2ZmOworLS0gVHJ5 IGNsZWFyaW5nIGFkdmljZSBiZWZvcmUgd2UndmUgY29sbGVjdGVkIGFueS4KK1NFTEVDVCBwZ19j bGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2Fs X2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQor CistLSBTZXQgYSBzbWFsbCBhZHZpY2UgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0IHdlJ2xsIGV4 Y2VlZCBpdC4KK1NFVCBwZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjsK Ky0tIEVuYWJsZSB0aGUgY29sbGVjdG9yLgorU0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxl Y3RvciA9IG9uOworLS0gU2V0IHVwIGEgZHVtbXkgdGFibGUuCitDUkVBVEUgVEFCTEUgZHVtbXlf dGFibGUgKGEgaW50IHByaW1hcnkga2V5LCBiIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UsIHBhcmFsbGVsX3dvcmtlcnMgPSAwKTsKKy0tIFRlc3QgcXVlcmllcy4KK1NF TEVDVCAqIEZST00gZHVtbXlfdGFibGUgYSwgZHVtbXlfdGFibGUgYjsKKyBhIHwgYiB8IGEgfCBi IAorLS0tKy0tLSstLS0rLS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxl OworIGEgfCBiIAorLS0tKy0tLQorKDAgcm93cykKKworLS0gU2hvdWxkIHJldHVybiB0aGUgYWR2 aWNlIGZyb20gdGhlIHNlY29uZCB0ZXN0IHF1ZXJ5LgorU0VMRUNUIGFkdmljZSBGUk9NIHBnX2dl dF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCkgT1JERVIgQlkgaWQgREVTQyBMSU1JVCAxOworICAg ICAgICAgYWR2aWNlICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTRVFfU0NB TihkdW1teV90YWJsZSkgKworIE5PX0dBVEhFUihkdW1teV90YWJsZSkKKygxIHJvdykKKworLS0g Tm93IHRyeSBjbGVhcmluZyBhZHZpY2UgYWdhaW4uCitTRUxFQ1QgcGdfY2xlYXJfY29sbGVjdGVk X2xvY2FsX2FkdmljZSgpOworIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworLS0gUmFpc2UgdGhl IGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB0aGUgY29sbGVjdG9yIHVzZXMgbXVsdGlwbGUgY2h1 bmtzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAyMDAwOwor LS0gUHVzaCBhIGJ1bmNoIG9mIHF1ZXJpZXMgdGhyb3VnaCB0aGUgY29sbGVjdG9yLgorRE8gJCQK K0JFR0lOCisJRk9SIHggSU4gMS4uMjAwMCBMT09QCisJCUVYRUNVVEUgJ1NFTEVDVCAqIEZST00g ZHVtbXlfdGFibGUnOworCUVORCBMT09QOworRU5ECiskJDsKKy0tIENoZWNrIHRoYXQgdGhlIGNv bGxlY3RvciB3b3JrZWQuCitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19nZXRfY29sbGVjdGVkX2xv Y2FsX2FkdmljZSgpOworIGNvdW50IAorLS0tLS0tLQorICAyMDAwCisoMSByb3cpCisKKy0tIEFu ZCBjbGVhciBvbmUgbW9yZSB0aW1lLCB0byB2ZXJpZnkgdGhhdCB0aGlzIGRvZXNuJ3QgY2F1c2Ug YSBwcm9ibGVtCistLSBldmVuIHdpdGggYSBsYXJnZXIgbnVtYmVyIG9mIGVudHJpZXMuCitTRUxF Q1QgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOworIHBnX2NsZWFyX2NvbGxlY3Rl ZF9sb2NhbF9hZHZpY2UgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygx IHJvdykKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wYXJ0 aXRpb253aXNlLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9u d2lzZS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJiM2QwYTgy NDQzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9w YXJ0aXRpb253aXNlLm91dApAQCAtMCwwICsxLDQyNiBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2Un OworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworU0VUIGVuYWJsZV9w YXJ0aXRpb253aXNlX2pvaW4gPSB0cnVlOworQ1JFQVRFIFRBQkxFIHB0MSAoaWQgaW50ZWdlciBw cmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlk KTsKK0NSRUFURSBUQUJMRSBwdDFhIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgx KSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUg VEFCTEUgcHQxYiBQQVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIw MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0 MWMgUEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRvICgzMDAxKQorCVdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0MSAoaWQsIGRp bTEsIHZhbDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSAr IDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0 MTsKK0NSRUFURSBUQUJMRSBwdDIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTIgdGV4dCwg dmFsMiBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHQyYSBQ QVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MmIgUEFSVElUSU9OIE9G IHB0MiBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDJjIFBBUlRJVElPTiBPRiBwdDIgRk9S IFZBTFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdDIgKGlkLCBkaW0yLCB2YWwyKQorCVNFTEVDVCBnLCAn c29tZSBvdGhlciB0ZXh0ICcgfHwgZywgKGcgJSA1KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsMzAwMCwyKSBnOworVkFDVVVNIEFOQUxZWkUgcHQyOworQ1JFQVRFIFRBQkxFIHB0MyAo aWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMyB0ZXh0LCB2YWwzIGludCkKKwlQQVJUSVRJT04g QlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDNhIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZB TFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitDUkVBVEUgVEFCTEUgcHQzYiBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAo MTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JF QVRFIFRBQkxFIHB0M2MgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRv ICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRP IHB0MyAoaWQsIGRpbTMsIHZhbDMpCisJU0VMRUNUIGcsICdhIHRoaXJkIHJhbmRvbSB0ZXh0ICcg fHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCwzKSBnOwor VkFDVVVNIEFOQUxZWkUgcHQzOworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2ggKGlkIGludGVnZXIg cHJpbWFyeSBrZXksIGRpbW0gdGV4dCwgdmFsbSBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChp ZCk7CitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaGEgUEFSVElUSU9OIE9GIHB0bWlzbWF0Y2gKKyAg ICBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxNTAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdG1pc21hdGNoYiBQQVJUSVRJT04gT0YgcHRtaXNt YXRjaAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMTUwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHRtaXNtYXRjaCAoaWQsIGRpbW0s IHZhbG0pCisJU0VMRUNUIGcsICd5ZXQgYW5vdGhlciB0ZXh0ICcgfHwgZywgKGcgJSAyKSArIDEK KwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0bWlz bWF0Y2g7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBw dDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisg ICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAg IC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAg SGFzaCBDb25kOiAocHQyXzEuaWQgPSBwdDNfMS5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0g MSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHQzYSBwdDNfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFhX3BrZXkgb24gcHQx YSBwdDFfMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzEuaWQpCisgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAg ICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzIuaWQgPSBw dDNfMi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAg ICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAg SW5kZXggU2NhbiB1c2luZyBwdDFiX3BrZXkgb24gcHQxYiBwdDFfMgorICAgICAgICAgICAgICAg SW5kZXggQ29uZDogKGlkID0gcHQyXzIuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwx ID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAg ICAgICAgICAgSGFzaCBDb25kOiAocHQyXzMuaWQgPSBwdDNfMy5pZCkKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAgICAgICAgICAg RmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFjX3Br ZXkgb24gcHQxYyBwdDFfMworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzMu aWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2EgcHQx L3B1YmxpYy5wdDFhKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5w dDNiIHB0MS9wdWJsaWMucHQxYikKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJjIHB0My9w dWJsaWMucHQzYyBwdDEvcHVibGljLnB0MWMpCisgICBORVNURURfTE9PUF9QTEFJTihwdDEvcHVi bGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYykKKyAgIEhBU0hfSk9JTihw dDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAgIFNFUV9T Q0FOKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2EgcHQyL3B1YmxpYy5wdDJiIHB0My9w dWJsaWMucHQzYgorICAgIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MpCisgICBJTkRF WF9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMucHQxYiBw dWJsaWMucHQxYl9wa2V5CisgICAgcHQxL3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkpCisg ICBQQVJUSVRJT05XSVNFKChwdDEgcHQyIHB0MykpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5w dDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAg cHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1Ymxp Yy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyg0NyByb3dzKQorCistLSBTdXBwcmVzcyBwYXJ0aXRp b253aXNlIGpvaW4sIG9yIGRvIGl0IGp1c3QgcGFydGlhbGx5LgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UocHQxIHB0MiBwdDMpJzsKK0VY UExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBw dDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwx ID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAg SGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChwdDIuaWQgPSBwdDMuaWQpCisgICAgICAg ICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBwdDJfMQor ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHQyYiBwdDJfMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYyBwdDJfMworICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDMgPSAxKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2IgcHQzXzIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2MgcHQzXzMKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgcHQxYV9wa2V5IG9uIHB0MWEgcHQxXzEKKyAgICAgICAgICAgICAg IEluZGV4IENvbmQ6IChpZCA9IHB0Mi5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEg PSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYl9wa2V5IG9uIHB0MWIgcHQx XzIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Mi5pZCkKKyAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQx Y19wa2V5IG9uIHB0MWMgcHQxXzMKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0 Mi5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgUEFSVElUSU9OV0lTRShwdDEpIC8qIG1hdGNoZWQgKi8KKyAgIFBBUlRJVElP TldJU0UocHQyKSAvKiBtYXRjaGVkICovCisgICBQQVJUSVRJT05XSVNFKHB0MykgLyogbWF0Y2hl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQyIHB0MyBwdDEp CisgICBORVNURURfTE9PUF9QTEFJTihwdDEpCisgICBIQVNIX0pPSU4ocHQzKQorICAgU0VRX1ND QU4ocHQyL3B1YmxpYy5wdDJhIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMgcHQzL3B1 YmxpYy5wdDNhCisgICAgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAgIElOREVY X1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB1YmxpYy5wdDFhX3BrZXkgcHQxL3B1YmxpYy5wdDFiIHB1 YmxpYy5wdDFiX3BrZXkKKyAgICBwdDEvcHVibGljLnB0MWMgcHVibGljLnB0MWNfcGtleSkKKyAg IFBBUlRJVElPTldJU0UocHQyIHB0MyBwdDEpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFh IHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQy L3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5w dDNiIHB0My9wdWJsaWMucHQzYykKKyg0MyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdDIpIHB0MyknOworRVhQTEFJTiAoUExB Tl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBw dDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2 YWwyID0gMSBBTkQgdmFsMyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChwdDEu aWQgPSBwdDMuaWQpCisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICBIYXNoIENvbmQ6IChwdDFfMS5pZCA9IHB0Ml8xLmlkKQorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB0MWEgcHQxXzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHB0MV8yLmlkID0gcHQyXzIuaWQpCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHQxYiBwdDFfMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFs MSA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDIgPSAxKQorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFz aCBDb25kOiAocHQxXzMuaWQgPSBwdDJfMy5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdDFjIHB0MV8zCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkK KyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHQyYyBwdDJfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFs MiA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDMgPSAxKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2IgcHQzXzIKKyAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB0M2MgcHQzXzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDMgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0 MikpIC8qIG1hdGNoZWQgKi8KKyAgIFBBUlRJVElPTldJU0UocHQzKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDEvcHVibGljLnB0MWEgcHQy L3B1YmxpYy5wdDJhKQorICAgSk9JTl9PUkRFUihwdDEvcHVibGljLnB0MWIgcHQyL3B1YmxpYy5w dDJiKQorICAgSk9JTl9PUkRFUihwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJjKQorICAg Sk9JTl9PUkRFUih7cHQxIHB0Mn0gcHQzKQorICAgSEFTSF9KT0lOKHB0Mi9wdWJsaWMucHQyYSBw dDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0MykKKyAgIFNFUV9TQ0FOKHB0MS9wdWJs aWMucHQxYSBwdDIvcHVibGljLnB0MmEgcHQxL3B1YmxpYy5wdDFiIHB0Mi9wdWJsaWMucHQyYgor ICAgIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNhIHB0My9w dWJsaWMucHQzYgorICAgIHB0My9wdWJsaWMucHQzYykKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBw dDIpIHB0MykKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0 MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1 YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNj KQorKDQ3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3QgY29uZmxpY3RpbmcgYWR2aWNlLgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0 MSBwdDIpIChwdDEgcHQzKSknOworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NF TEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5p ZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQXBwZW5kCisgICBEaXNhYmxlZDogdHJ1ZQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMS5pZCA9IHB0 M18xLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmEgcHQyXzEKKyAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJ bmRleCBTY2FuIHVzaW5nIHB0MWFfcGtleSBvbiBwdDFhIHB0MV8xCisgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAoaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEg PSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICBIYXNoIENvbmQ6IChwdDJfMi5pZCA9IHB0M18yLmlkKQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWJfcGtl eSBvbiBwdDFiIHB0MV8yCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMi5p ZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29w CisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJf My5pZCA9IHB0M18zLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQy XzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0 M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAg ICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWNfcGtleSBvbiBwdDFjIHB0MV8zCisgICAgICAg ICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMy5pZCkKKyAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgUEFSVElUSU9OV0lTRSgo cHQxIHB0MikpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nLCBmYWlsZWQgKi8KKyAgIFBBUlRJVElP TldJU0UoKHB0MSBwdDMpKSAvKiBtYXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmEgcHQzL3B1 YmxpYy5wdDNhIHB0MS9wdWJsaWMucHQxYSkKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJi IHB0My9wdWJsaWMucHQzYiBwdDEvcHVibGljLnB0MWIpCisgICBKT0lOX09SREVSKHB0Mi9wdWJs aWMucHQyYyBwdDMvcHVibGljLnB0M2MgcHQxL3B1YmxpYy5wdDFjKQorICAgTkVTVEVEX0xPT1Bf UExBSU4ocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMpCisg ICBIQVNIX0pPSU4ocHQzL3B1YmxpYy5wdDNhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0 M2MpCisgICBTRVFfU0NBTihwdDIvcHVibGljLnB0MmEgcHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJs aWMucHQyYiBwdDMvcHVibGljLnB0M2IKKyAgICBwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5w dDNjKQorICAgSU5ERVhfU0NBTihwdDEvcHVibGljLnB0MWEgcHVibGljLnB0MWFfcGtleSBwdDEv cHVibGljLnB0MWIgcHVibGljLnB0MWJfcGtleQorICAgIHB0MS9wdWJsaWMucHQxYyBwdWJsaWMu cHQxY19wa2V5KQorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0MiBwdDMpKQorICAgTk9fR0FUSEVS KHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjIHB0Mi9wdWJs aWMucHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5w dDNhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisoNTEgcm93cykKKworQ09NTUlU OworLS0gQ2FuJ3QgZm9yY2UgYSBwYXJ0aXRpb253aXNlIGpvaW4gd2l0aCBhIG1pc21hdGNoZWQg dGFibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElU SU9OV0lTRSgocHQxIHB0bWlzbWF0Y2gpKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0bWlzbWF0Y2ggV0hFUkUgcHQxLmlkID0gcHRtaXNt YXRjaC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVk IExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHQxYSBwdDFfMQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWIgcHQxXzIK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFjIHB0MV8zCisgICAtPiAgQXBwZW5kCisgICAg ICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdG1pc21hdGNoYV9wa2V5IG9uIHB0bWlzbWF0Y2hh IHB0bWlzbWF0Y2hfMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQxLmlkKQor ICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHRtaXNtYXRjaGJfcGtleSBvbiBwdG1pc21h dGNoYiBwdG1pc21hdGNoXzIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0MS5p ZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBwdG1pc21h dGNoKSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg Sk9JTl9PUkRFUihwdDEgcHRtaXNtYXRjaCkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHB0bWlzbWF0 Y2gpCisgICBTRVFfU0NBTihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJs aWMucHQxYykKKyAgIElOREVYX1NDQU4ocHRtaXNtYXRjaC9wdWJsaWMucHRtaXNtYXRjaGEgcHVi bGljLnB0bWlzbWF0Y2hhX3BrZXkKKyAgICBwdG1pc21hdGNoL3B1YmxpYy5wdG1pc21hdGNoYiBw dWJsaWMucHRtaXNtYXRjaGJfcGtleSkKKyAgIFBBUlRJVElPTldJU0UocHQxIHB0bWlzbWF0Y2gp CisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGlj LnB0MWMKKyAgICBwdG1pc21hdGNoL3B1YmxpYy5wdG1pc21hdGNoYSBwdG1pc21hdGNoL3B1Ymxp Yy5wdG1pc21hdGNoYikKKygyMiByb3dzKQorCitDT01NSVQ7CistLSBGb3JjZSBqb2luIG9yZGVy IGZvciBhIHBhcnRpY3VsYXIgYnJhbmNoIG9mIHRoZSBwYXJ0aXRpb253aXNlIGpvaW4gd2l0aAor LS0gYW5kIHdpdGhvdXQgbWVudGlvbmluZyB0aGUgc2NoZW1hIG5hbWUuCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUihwdDMvcHVibGljLnB0M2Eg cHQyL3B1YmxpYy5wdDJhIHB0MS9wdWJsaWMucHQxYSknOworRVhQTEFJTiAoUExBTl9BRFZJQ0Us IENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBw dDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBB TkQgdmFsMyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0M18xLmlkID0gcHQyXzEu aWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNfMQorICAgICAgICAg ICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmEgcHQyXzEKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgLT4gIEluZGV4 IFNjYW4gdXNpbmcgcHQxYV9wa2V5IG9uIHB0MWEgcHQxXzEKKyAgICAgICAgICAgICAgIEluZGV4 IENvbmQ6IChpZCA9IHB0Ml8xLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEp CisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHB0Ml8yLmlkID0gcHQzXzIuaWQpCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHQyYiBwdDJfMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFs MiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB0M2IgcHQzXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYl9wa2V5IG9u IHB0MWIgcHQxXzIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8yLmlkKQor ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgTmVzdGVkIExvb3AKKyAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8zLmlk ID0gcHQzXzMuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYyBwdDJfMwor ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2MgcHQzXzMK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAg LT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxY19wa2V5IG9uIHB0MWMgcHQxXzMKKyAgICAgICAgICAg ICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8zLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0My9wdWJs aWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQxL3B1YmxpYy5wdDFhKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDMvcHVibGljLnB0M2EgcHQy L3B1YmxpYy5wdDJhIHB0MS9wdWJsaWMucHQxYSkKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5w dDJiIHB0My9wdWJsaWMucHQzYiBwdDEvcHVibGljLnB0MWIpCisgICBKT0lOX09SREVSKHB0Mi9w dWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MgcHQxL3B1YmxpYy5wdDFjKQorICAgTkVTVEVEX0xP T1BfUExBSU4ocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMp CisgICBIQVNIX0pPSU4ocHQyL3B1YmxpYy5wdDJhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGlj LnB0M2MpCisgICBTRVFfU0NBTihwdDMvcHVibGljLnB0M2EgcHQyL3B1YmxpYy5wdDJhIHB0Mi9w dWJsaWMucHQyYiBwdDMvcHVibGljLnB0M2IKKyAgICBwdDIvcHVibGljLnB0MmMgcHQzL3B1Ymxp Yy5wdDNjKQorICAgSU5ERVhfU0NBTihwdDEvcHVibGljLnB0MWEgcHVibGljLnB0MWFfcGtleSBw dDEvcHVibGljLnB0MWIgcHVibGljLnB0MWJfcGtleQorICAgIHB0MS9wdWJsaWMucHQxYyBwdWJs aWMucHQxY19wa2V5KQorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0MiBwdDMpKQorICAgTk9fR0FU SEVSKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjIHB0Mi9w dWJsaWMucHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMgcHQzL3B1Ymxp Yy5wdDNhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisoNDkgcm93cykKKworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKHB0My9wdDNhIHB0Mi9w dDJhIHB0MS9wdDFhKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0g cHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBB cHBlbmQKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAg ICAgICAgICAgSGFzaCBDb25kOiAocHQzXzEuaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg RmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFhX3Br ZXkgb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzEu aWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9v cAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQy XzIuaWQgPSBwdDNfMi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0 Ml8yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBw dDNfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAg ICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFiX3BrZXkgb24gcHQxYiBwdDFfMgorICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzIuaWQpCisgICAgICAgICAgICAgICBGaWx0 ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9p bgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzMuaWQgPSBwdDNfMy5pZCkKKyAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAgICAg ICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2lu ZyBwdDFjX3BrZXkgb24gcHQxYyBwdDFfMworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlk ID0gcHQyXzMuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQzL3B0M2EgcHQyL3B0MmEgcHQxL3B0MWEp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0 My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQxL3B1YmxpYy5wdDFhKQorICAgSk9JTl9P UkRFUihwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiIHB0MS9wdWJsaWMucHQxYikKKyAg IEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYyBwdDEvcHVibGljLnB0 MWMpCisgICBORVNURURfTE9PUF9QTEFJTihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFi IHB0MS9wdWJsaWMucHQxYykKKyAgIEhBU0hfSk9JTihwdDIvcHVibGljLnB0MmEgcHQzL3B1Ymxp Yy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAgIFNFUV9TQ0FOKHB0My9wdWJsaWMucHQzYSBwdDIv cHVibGljLnB0MmEgcHQyL3B1YmxpYy5wdDJiIHB0My9wdWJsaWMucHQzYgorICAgIHB0Mi9wdWJs aWMucHQyYyBwdDMvcHVibGljLnB0M2MpCisgICBJTkRFWF9TQ0FOKHB0MS9wdWJsaWMucHQxYSBw dWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMucHQxYiBwdWJsaWMucHQxYl9wa2V5CisgICAgcHQx L3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkpCisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQy IHB0MykpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEv cHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJs aWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykK Kyg0OSByb3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNl L2V4cGVjdGVkL3ByZXBhcmVkLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQv cHJlcGFyZWQub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wN2E3 YzYyMzY1OQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0 ZWQvcHJlcGFyZWQub3V0CkBAIC0wLDAgKzEsNjcgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsK K1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK0NSRUFURSBUQUJMRSBw dGFiIChpZCBpbnRlZ2VyLCB2YWwgdGV4dCkgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFs c2UpOworU0VUIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IGZh bHNlOworLS0gTm90IHByZXBhcmVkLCBzbyBhZHZpY2Ugc2hvdWxkIGJlIGdlbmVyYXRlZC4KK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIAorU0VMRUNUICogRlJPTSBwdGFiOworICAg ICAgIFFVRVJZIFBMQU4gICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2Nh biBvbiBwdGFiCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocHRhYikKKyAg IE5PX0dBVEhFUihwdGFiKQorKDQgcm93cykKKworLS0gUHJlcGFyZWQsIHNvIGFkdmljZSBzaG91 bGQgbm90IGJlIGdlbmVyYXRlZC4KK1BSRVBBUkUgcHQxIEFTIFNFTEVDVCAqIEZST00gcHRhYjsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIEVYRUNVVEUgcHQxOworICAgIFFVRVJZ IFBMQU4gICAgCistLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwdGFiCisoMSByb3cp CisKK1NFVCBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSB0cnVl OworLS0gUHJlcGFyZWQsIGJ1dCBhbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSB0cnVlLCBz byBzaG91bGQgc2hvdyBhZHZpY2UuCitQUkVQQVJFIHB0MiBBUyBTRUxFQ1QgKiBGUk9NIHB0YWI7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBFWEVDVVRFIHB0MjsKKyAgICAgICBR VUVSWSBQTEFOICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24g cHRhYgorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHB0YWIpCisgICBOT19H QVRIRVIocHRhYikKKyg0IHJvd3MpCisKKy0tIE5vdCBwcmVwYXJlZCwgc28gZmVlZGJhY2sgc2hv dWxkIGJlIGdlbmVyYXRlZC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNl X2RldGFpbHMgPSBmYWxzZTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4o cHRhYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSAKK1NFTEVDVCAqIEZST00gcHRhYjsKKyAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIFNlcSBTY2FuIG9uIHB0YWIKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9T Q0FOKHB0YWIpIC8qIG1hdGNoZWQgKi8KKygzIHJvd3MpCisKKy0tIFByZXBhcmVkLCBzbyBhZHZp Y2Ugc2hvdWxkIG5vdCBiZSBnZW5lcmF0ZWQuCitQUkVQQVJFIHB0MyBBUyBTRUxFQ1QgKiBGUk9N IHB0YWI7CitFWFBMQUlOIChDT1NUUyBPRkYpIEVYRUNVVEUgcHQxOworICAgIFFVRVJZIFBMQU4g ICAgCistLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwdGFiCisoMSByb3cpCisKK1NF VCBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSB0cnVlOworLS0g UHJlcGFyZWQsIGJ1dCBhbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSB0cnVlLCBzbyBzaG91 bGQgc2hvdyBmZWVkYmFjay4KK1BSRVBBUkUgcHQ0IEFTIFNFTEVDVCAqIEZST00gcHRhYjsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIEVYRUNVVEUgcHQyOworICAgICAgIFFVRVJZ IFBMQU4gICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwdGFi CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocHRhYikKKyAgIE5PX0dBVEhF UihwdGFiKQorKDQgcm93cykKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9l eHBlY3RlZC9zY2FuLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5v dXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg4MjYxMGVhZjI0Ci0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zY2FuLm91 dApAQCAtMCwwICsxLDc1NyBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJh bGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworU0VUIHNlcV9wYWdlX2Nvc3QgPSAwLjE7CitT RVQgcmFuZG9tX3BhZ2VfY29zdCA9IDAuMTsKK1NFVCBjcHVfdHVwbGVfY29zdCA9IDA7CitTRVQg Y3B1X2luZGV4X3R1cGxlX2Nvc3QgPSAwOworQ1JFQVRFIFRBQkxFIHNjYW5fdGFibGUgKGEgaW50 IHByaW1hcnkga2V5LCBiIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworSU5TRVJUIElOVE8gc2Nhbl90YWJsZQorCVNFTEVDVCBnLCAnc29tZSB0ZXh0ICcgfHwgZyBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMDApIGc7CitDUkVBVEUgSU5ERVggc2Nhbl90YWJs ZV9iIE9OIHNjYW5fdGFibGUgVVNJTkcgYnJpbiAoYik7CitWQUNVVU0gQU5BTFlaRSBzY2FuX3Rh YmxlOworLS0gU2VxdWVudGlhbCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgUVVFUlkgUExBTiAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIo c2Nhbl90YWJsZSkKKyg0IHJvd3MpCisKKy0tIEluZGV4IHNjYW4KK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVz aW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEp CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg1IHJvd3MpCisK Ky0tIEluZGV4LW9ubHkgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcg c2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJs aWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNSByb3dzKQor CistLSBCaXRtYXAgaGVhcCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKKyAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24g c2Nhbl90YWJsZQorICAgUmVjaGVjayBDb25kOiAoYiA+ICdzb21lIHRleHQgOCc6OnRleHQpCisg ICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gc2Nhbl90YWJsZV9iCisgICAgICAgICBJbmRleCBD b25kOiAoYiA+ICdzb21lIHRleHQgOCc6OnRleHQpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUp CisoNyByb3dzKQorCistLSBUSUQgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgVGlkIFNjYW4gb24gc2Nhbl90YWJsZQorICAgVElEIENvbmQ6IChjdGlkID0g JygwLDEpJzo6dGlkKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5f dGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg1IHJvd3MpCisKKy0tIFRJRCByYW5n ZSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CisgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFRpZCBSYW5nZSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIFRJRCBDb25kOiAo KGN0aWQgPiAnKDEsMSknOjp0aWQpIEFORCAoY3RpZCA8ICcoMiwxKSc6OnRpZCkpCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihz Y2FuX3RhYmxlKQorKDUgcm93cykKKworLS0gVHJ5IGZvcmNpbmcgZWFjaCBvZiBvdXIgdGVzdCBx dWVyaWVzIHRvIHVzZSB0aGUgc2NhbiB0eXBlIHRoZXkKKy0tIHdhbnRlZCB0byB1c2UgYW55d2F5 LiBUaGlzIHNob3VsZCBzdWNjZWVkLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKyAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNF UV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNiBy b3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nh bl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4g dXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0g MSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2Fu X3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhF UihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVS RSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9w a2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NB TihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90 YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklU TUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsK KyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNj YW4gb24gc2Nhbl90YWJsZQorICAgUmVjaGVjayBDb25kOiAoYiA+ICdzb21lIHRleHQgOCc6OnRl eHQpCisgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gc2Nhbl90YWJsZV9iCisgICAgICAgICBJ bmRleCBDb25kOiAoYiA+ICdzb21lIHRleHQgOCc6OnRleHQpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpCisgICBO T19HQVRIRVIoc2Nhbl90YWJsZSkKKyg5IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSkn OworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGlkIFNjYW4gb24gc2Nhbl90YWJsZQorICAgVElE IENvbmQ6IChjdGlkID0gJygwLDEpJzo6dGlkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg VElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3 IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZQorCVdIRVJFIGN0aWQgPiAnKDEsMSknIEFORCBjdGlkIDwgJygyLDEpJzsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgVGlkIFJhbmdlIFNjYW4gb24gc2Nhbl90YWJsZQorICAgVElEIENvbmQ6 ICgoY3RpZCA+ICcoMSwxKSc6OnRpZCkgQU5EIChjdGlkIDwgJygyLDEpJzo6dGlkKSkKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKQorICAgTk9f R0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitDT01NSVQ7CistLSBUcnkgdG8gZm9yY2Ug YSBmdWxsIHNjYW4gb2YgdGhlIHRhYmxlIHRvIHVzZSBzb21lIG90aGVyIHNjYW4gdHlwZS4gQWxs CistLSBvZiB0aGVzZSB3aWxsIGZhaWwuIEFuIGluZGV4IHNjYW4gb3IgYml0bWFwIGhlYXAgc2Nh biBjb3VsZCBwb3RlbnRpYWxseQorLS0gZ2VuZXJhdGUgdGhlIGNvcnJlY3QgYW5zd2VyLCBidXQg dGhlIHBsYW5uZXIgZG9lcyBub3QgZXZlbiBjb25zaWRlciB0aGVzZQorLS0gcG9zc2liaWxpdGll cyBkdWUgdG8gdGhlIGxhY2sgb2YgYSBXSEVSRSBjbGF1c2UuCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAg IERpc2FibGVkOiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNj YW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNj YW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxl ZDogdHJ1ZQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJ VE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisg ICBEaXNhYmxlZDogdHJ1ZQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgQklUTUFQX0hFQVBf U0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUp CisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FO KHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZTsKKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCwgZmFpbGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVHJ5IGFnYWluIHRv IGZvcmNlIGluZGV4IHVzZS4gVGhpcyBzaG91bGQgbm93IHN1Y2NlZWQgZm9yIHRoZSBJTkRFWF9T Q0FOCistLSBhbmQgQklUTUFQX0hFQVBfU0NBTiwgYnV0IHRoZSBJTkRFWF9PTkxZX1NDQU4gY2Fu J3QgYmUgZm9yY2VkIGJlY2F1c2UgdGhlCistLSBxdWVyeSBmZXRjaGVzIGNvbHVtbnMgbm90IGlu Y2x1ZGVkIGluIHRoZSBpbmRleC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUg YSA+IDA7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxl CisgICBJbmRleCBDb25kOiAoYSA+IDApCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRF WF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nh bl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgICBGaWx0ZXI6 IChhID4gMCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2Fu X3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2Fu X3RhYmxlKQorKDggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdC SVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKKyAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIHNjYW5fdGFi bGUKKyAgIFJlY2hlY2sgQ29uZDogKGEgPiAwKQorICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9u IHNjYW5fdGFibGVfcGtleQorICAgICAgICAgSW5kZXggQ29uZDogKGEgPiAwKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3Rh YmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOSByb3dzKQorCitDT01NSVQ7CistLSBX ZSBjYW4gZm9yY2UgYSBwcmltYXJ5IGtleSBsb29rdXAgdG8gdXNlIGEgc2VxdWVudGlhbCBzY2Fu LCBidXQgd2UKKy0tIGNhbid0IGZvcmNlIGl0IHRvIHVzZSBhbiBpbmRleC1vbmx5IHNjYW4gKGR1 ZSB0byB0aGUgY29sdW1uIGxpc3QpCistLSBvciBhIFRJRCBzY2FuIChkdWUgdG8gdGhlIGFic2Vu Y2Ugb2YgYSBUSUQgcXVhbCkuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoYSA9IDEpCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAg IE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2Nh biB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUK KyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVY X09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgZmFpbGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1 YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3Mp CisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJs ZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUK KyAgIERpc2FibGVkOiB0cnVlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGlj LnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKwor Q09NTUlUOworLS0gV2UgY2FuIGZvcmNpYmx5IGRvd25ncmFkZSBhbiBpbmRleC1vbmx5IHNjYW4g dG8gYW4gaW5kZXggc2NhbiwgYnV0IHdlIGNhbid0CistLSBmb3JjZSB0aGUgdXNlIG9mIGFuIGlu ZGV4IHRoYXQgdGhlIHBsYW5uZXIgdGhpbmtzIGlzIGluYXBwbGljYWJsZS4KK0JFR0lOOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nh bl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5f dGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5 KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihz Y2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJs ZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhf U0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nh bl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUg cHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93 cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEZpbHRlcjogKGEgPSAxKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFi bGVfYikgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg U0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykK KworQ09NTUlUOworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4g aW4gcGxhY2Ugb2YgYSBiaXRtYXAgaGVhcCBzY2FuLAorLS0gYnV0IGEgcGxhaW4gaW5kZXggc2Nh biBvbiBhIEJSSU4gaW5kZXggaXMgbm90IHBvc3NpYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIg PiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nh bl90YWJsZQorICAgRmlsdGVyOiAoYiA+ICdzb21lIHRleHQgOCc6OnRleHQpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhF UihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUK KyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NB TihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYikgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihz Y2FuX3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ug b2YgYSBzZXF1ZW50aWFsIHNjYW4gcmF0aGVyIHRoYW4gYSBUSUQgc2NhbiBvcgorLS0gVElEIHJh bmdlIHNjYW4uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VR X1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoY3RpZCA9ICco MCwxKSc6OnRpZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFi bGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihz Y2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVS RSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CisgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoKGN0aWQgPiAnKDEsMSknOjp0aWQpIEFORCAo Y3RpZCA8ICcoMiwxKSc6OnRpZCkpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NB TihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg U0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykK KworQ09NTUlUOworLS0gVGVzdCBtb3JlIGNvbXBsZXggc2NlbmFyaW9zIHdpdGggaW5kZXggc2Nh bnMuCitCRUdJTjsKKy0tIFNob3VsZCBzdGlsbCB3b3JrIGlmIHdlIG1lbnRpb24gdGhlIHNjaGVt YS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3Rh YmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAg SW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NB TihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5f dGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworLS0gQnV0 IG5vdCBpZiB3ZSBtZW50aW9uIHRoZSB3cm9uZyBzY2hlbWEuCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBjaWxidXAuc2Nhbl90YWJsZV9w a2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIGNpbGJ1cC5zY2FuX3RhYmxlX3BrZXkp IC8qIG1hdGNoZWQsIGluYXBwbGljYWJsZSwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisg ICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKKy0tIEl0J3MgT0sgdG8gcmVwZWF0 IHRoZSBzYW1lIGFkdmljZS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5E RVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0 Y2hlZCAqLworICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJs ZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCBy b3dzKQorCistLSBCdXQgaXQgZG9lc24ndCB3b3JrIGlmIHRoZSBpbmRleCB0YXJnZXQgaXMgZXZl biBub3Rpb25hbGx5IGRpZmZlcmVudC4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBv biBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVk LCBjb25mbGljdGluZyAqLworICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisg ICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3QgYXNz b3J0ZWQgaW5jb3JyZWN0IGFkdmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdTRVFfU0NBTihub3RoaW5nKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkg U2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDog KGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4obm90aGluZykgLyog bm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1ND QU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lO REVYX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkg U2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDog KGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihub3RoaW5nIHdo YXRzb2V2ZXIpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg SU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3Rh YmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSAvKiBtYXRjaGVk LCBpbmFwcGxpY2FibGUsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElO REVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19H QVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlciknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5f dGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IElOREVYX09OTFlfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpIC8qIG5vdCBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVi bGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nh bl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNU IGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nh bl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpIC8qIG1hdGNoZWQsIGluYXBwbGlj YWJsZSwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9T Q0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2Fu X3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBvdXIgYWJpbGl0eSB0byByZWZl ciB0byBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgYWxpYXMuCitCRUdJTjsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJp ZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZU IEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg TmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAg ICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBnLmcpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBz Y2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzXzEKKyAgICAgICAgIEluZGV4IENvbmQ6IChh ID0gZy5nKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikK KyAgIE5FU1RFRF9MT09QX1BMQUlOKHMgcyMyKQorICAgSU5ERVhfU0NBTihzIHB1YmxpYy5zY2Fu X3RhYmxlX3BrZXkgcyMyIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIocyBz IzIpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFf U0NBTihzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0g cy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOworICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5l c3RlZCBMb29wIExlZnQgSm9pbgorICAgLT4gIEhhc2ggTGVmdCBKb2luCisgICAgICAgICBIYXNo IENvbmQ6IChnLmcgPSBzLmEpCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0 ZV9zZXJpZXMgZworICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBzY2FuX3RhYmxlIHMKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtl eSBvbiBzY2FuX3RhYmxlIHNfMQorICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBnLmcpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihnIHMgcyMyKQorICAgTkVTVEVEX0xPT1Bf UExBSU4ocyMyKQorICAgSEFTSF9KT0lOKHMpCisgICBTRVFfU0NBTihzKQorICAgSU5ERVhfU0NB TihzIzIgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzIHMjMikKKygxNyBy b3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMjMikn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVy YXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAor ICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhh c2ggTGVmdCBKb2luCisgICBIYXNoIENvbmQ6IChnLmcgPSBzXzEuYSkKKyAgIC0+ICBOZXN0ZWQg TG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3Nl cmllcyBnCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24g c2Nhbl90YWJsZSBzCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoYSA9IGcuZykKKyAgIC0+ ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2Nhbl90YWJsZSBzXzEKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHMjMikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIE5FU1RFRF9MT09QX1BM QUlOKHMpCisgICBIQVNIX0pPSU4ocyMyKQorICAgU0VRX1NDQU4ocyMyKQorICAgSU5ERVhfU0NB TihzIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIocyBzIzIpCisoMTcgcm93 cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSBTRVFf U0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcg PSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggTGVmdCBKb2luCisgICBI YXNoIENvbmQ6IChnLmcgPSBzXzEuYSkKKyAgIC0+ICBIYXNoIExlZnQgSm9pbgorICAgICAgICAg SGFzaCBDb25kOiAoZy5nID0gcy5hKQorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2Vu ZXJhdGVfc2VyaWVzIGcKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gc2Nhbl90YWJsZSBzCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHNjYW5fdGFibGUgc18xCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihz KSAvKiBtYXRjaGVkICovCisgICBTRVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBIQVNIX0pPSU4ocyBz IzIpCisgICBTRVFfU0NBTihzIHMjMikKKyAgIE5PX0dBVEhFUihzIHMjMikKKygxNyByb3dzKQor CitDT01NSVQ7CistLSBUZXN0IG91ciBhYmlsaXR5IHRvIHJlZmVyIHRvIHNjYW5zIHdpdGhpbiBh IHN1YnF1ZXJ5LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4Owor ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2Nh biB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAo YSA9IDEpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHggcHVibGlj LnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzQHgpCisoNSByb3dzKQorCitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5n IHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkK KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNAdW5uYW1lZF9zdWJxdWVy eSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNAdW5uYW1lZF9zdWJxdWVy eSkKKyg1IHJvd3MpCisKK0JFR0lOOworLS0gU2hvdWxkIG5vdCBtYXRjaC4KK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBz IFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nh bl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBTRVFfU0NBTihzKSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIElOREVYX1NDQU4oc0B4IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRI RVIoc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNF VCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJs ZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBT RVFfU0NBTihzKSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IElOREVYX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisg ICBOT19HQVRIRVIoc0B1bm5hbWVkX3N1YnF1ZXJ5KQorKDcgcm93cykKKworLS0gU2hvdWxkIG1h dGNoIGZpcnN0IHF1ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J1NFUV9TQ0FOKHNAeCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAw KSB4OworICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAgRmlsdGVyOiAoYSA9 IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgpIC8qIG1hdGNoZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgpCisgICBOT19HQVRI RVIoc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNF VCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJs ZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBT RVFfU0NBTihzQHgpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGljLnNjYW5fdGFibGVfcGtleSkK KyAgIE5PX0dBVEhFUihzQHVubmFtZWRfc3VicXVlcnkpCisoNyByb3dzKQorCistLSBTaG91bGQg bWF0Y2ggc2Vjb25kIHF1ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKHNAdW5uYW1lZF9zdWJxdWVyeSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdI RVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHggcHVibGljLnNjYW5fdGFibGVfcGtl eSkKKyAgIE5PX0dBVEhFUihzQHgpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hF UkUgYSA9IDEgT0ZGU0VUIDApOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAgRmlsdGVyOiAoYSA9IDEpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3Vi cXVlcnkpCisgICBOT19HQVRIRVIoc0B1bm5hbWVkX3N1YnF1ZXJ5KQorKDcgcm93cykKKworQ09N TUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zZW1pam9p bi5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NlbWlqb2luLm91dApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmYyMDNjNWE2OGUKLS0tIC9kZXYv bnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NlbWlqb2luLm91dApA QCAtMCwwICsxLDM3NyBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxl bF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworQ1JFQVRFIFRBQkxFIHNqX3dpZGUgKAorCWlkIGlu dGVnZXIgcHJpbWFyeSBrZXksCisJdmFsMSBpbnRlZ2VyLAorCXBhZGRpbmcgdGV4dCBzdG9yYWdl IHBsYWluCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRP IHNqX3dpZGUKKwlTRUxFQ1QgZywgZyUxMCsxLCByZXBlYXQoJyAnLCAzMDApIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMDApIGc7CitDUkVBVEUgSU5ERVggT04gc2pfd2lkZSAodmFsMSk7CitW QUNVVU0gQU5BTFlaRSBzal93aWRlOworQ1JFQVRFIFRBQkxFIHNqX25hcnJvdyAoCisJaWQgaW50 ZWdlciBwcmltYXJ5IGtleSwKKwl2YWwxIGludGVnZXIKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gc2pfbmFycm93CisJU0VMRUNUIGcsIGclMTArMSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBnOworQ1JFQVRFIElOREVYIE9OIHNqX25hcnJv dyAodmFsMSk7CitWQUNVVU0gQU5BTFlaRSBzal9uYXJyb3c7CistLSBXZSBleHBlY3QgdGhpcyB0 byBtYWtlIHRoZSBWQUxVRVMgbGlzdCB1bmlxdWUgYW5kIHVzZSBpbmRleCBsb29rdXBzIHRvCist LSBmaW5kIHRoZSByb3dzIGluIHNqX3dpZGUsIHNvIGFzIHRvIGF2b2lkIGEgZnVsbCBzY2FuIG9m IHNqX3dpZGUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSBzal93aWRlCisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIpLCAo MywgMyksICg0LCA0KSwgKDUsIDUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgSGFz aEFnZ3JlZ2F0ZQorICAgICAgICAgR3JvdXAgS2V5OiAiKlZBTFVFUyoiLmNvbHVtbjEsICIqVkFM VUVTKiIuY29sdW1uMgorICAgICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIqVkFMVUVTKiIKKyAg IC0+ICBJbmRleCBTY2FuIHVzaW5nIHNqX3dpZGVfcGtleSBvbiBzal93aWRlCisgICAgICAgICBJ bmRleCBDb25kOiAoaWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpCisgICAgICAgICBGaWx0ZXI6ICh2 YWwxID0gIipWQUxVRVMqIi5jb2x1bW4yKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIoIipWQUxVRVMqIiBzal93aWRlKQorICAgTkVTVEVEX0xPT1BfUExBSU4oc2pfd2lk ZSkKKyAgIElOREVYX1NDQU4oc2pfd2lkZSBwdWJsaWMuc2pfd2lkZV9wa2V5KQorICAgU0VNSUpP SU5fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRIRVIoc2pfd2lkZSkKKygxMyByb3dzKQor CistLSBJZiB3ZSBhc2sgZm9yIGEgdW5pcXVlIHNlbWlqb2luLCB3ZSBzaG91bGQgZ2V0IHRoZSBz YW1lIHBsYW4gYXMgd2l0aAorLS0gbm8gYWR2aWNlLiBJZiB3ZSBhc2sgZm9yIGEgbm9uLXVuaXF1 ZSBzZW1pam9pbiwgd2Ugc2hvdWxkIHNlZSBhIFNlbWkKKy0tIEpvaW4gb3BlcmF0aW9uIGluIHRo ZSBwbGFuIHRyZWUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn c2VtaWpvaW5fdW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX3dpZGUKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxV RVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AKKyAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICBHcm91cCBLZXk6ICIqVkFM VUVTKiIuY29sdW1uMSwgIipWQUxVRVMqIi5jb2x1bW4yCisgICAgICAgICAtPiAgVmFsdWVzIFNj YW4gb24gIipWQUxVRVMqIgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2pfd2lkZV9wa2V5IG9u IHNqX3dpZGUKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9ICIqVkFMVUVTKiIuY29sdW1uMSkK KyAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9VTklRVUUoIipWQUxVRVMqIikgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoIipWQUxVRVMqIiBzal93 aWRlKQorICAgTkVTVEVEX0xPT1BfUExBSU4oc2pfd2lkZSkKKyAgIElOREVYX1NDQU4oc2pfd2lk ZSBwdWJsaWMuc2pfd2lkZV9wa2V5KQorICAgU0VNSUpPSU5fVU5JUVVFKCIqVkFMVUVTKiIpCisg ICBOT19HQVRIRVIoc2pfd2lkZSkKKygxNSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoIipWQUxVRVMqIiknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gc2pfd2lkZQorCVdIRVJFIChp ZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1 KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggU2VtaSBKb2luCisgICBIYXNoIENvbmQ6ICgoc2pfd2lk ZS5pZCA9ICIqVkFMVUVTKiIuY29sdW1uMSkgQU5EIChzal93aWRlLnZhbDEgPSAiKlZBTFVFUyoi LmNvbHVtbjIpKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX3dpZGUKKyAgIC0+ICBIYXNoCisgICAg ICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgU0VNSUpPSU5fTk9OX1VOSVFVRSgiKlZBTFVFUyoiKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal93aWRlICIqVkFMVUVTKiIpCisg ICBIQVNIX0pPSU4oIipWQUxVRVMqIikKKyAgIFNFUV9TQ0FOKHNqX3dpZGUpCisgICBTRU1JSk9J Tl9OT05fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRIRVIoc2pfd2lkZSkKKygxMyByb3dz KQorCitDT01NSVQ7CistLSBCZWNhdXNlIHRoaXMgdGFibGUgaXMgbmFycm93ZXIgdGhhbiB0aGUg cHJldmlvdXMgb25lLCBhIHNlcXVlbnRpYWwgc2NhbgorLS0gaXMgbGVzcyBleHBlbnNpdmUsIGFu ZCB3ZSBjaG9vc2UgYSBzdHJhaWdodGZvcndhcmQgU2VtaSBKb2luIHBsYW4gYnkKKy0tIGRlZmF1 bHQuIChOb3RlIHRoYXQgdGhpcyBpcyBhbHNvIHZlcnkgc2Vuc2l0aXZlIHRvIHRoZSBsZW5ndGgg b2YgdGhlIElOCistLSBsaXN0LCB3aGljaCBhZmZlY3RzIGhvdyBtYW55IGluZGV4IGxvb2t1cHMg dGhlIGFsdGVybmF0aXZlIHBsYW4gd2lsbCBuZWVkLikKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25hcnJvdworCVdIRVJFIChpZCwgdmFsMSkgSU4g KFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29uZDogKChzal9uYXJyb3cu aWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpIEFORCAoc2pfbmFycm93LnZhbDEgPSAiKlZBTFVFUyoi LmNvbHVtbjIpKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworICAgLT4gIEhhc2gKKyAg ICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZBTFVFUyoiCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJyb3cgIipWQUxVRVMqIikKKyAgIEhBU0hfSk9JTigi KlZBTFVFUyoiKQorICAgU0VRX1NDQU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5fTk9OX1VOSVFV RSgiKlZBTFVFUyoiKQorICAgTk9fR0FUSEVSKHNqX25hcnJvdykKKygxMSByb3dzKQorCistLSBI ZXJlLCB3ZSBleHBlY3QgYWR2aXNpbmcgYSB1bmlxdWUgc2VtaWpvaW4gdG8gc3dpdGggdG8gdGhl IHNhbWUgcGxhbiB0aGF0CistLSB3ZSBnb3Qgd2l0aCBzal93aWRlLCBhbmQgYWR2aXNpbmcgYSBu b24tdW5pcXVlIHNlbWlqb2luIHNob3VsZCBub3QgY2hhbmdlCistLSB0aGUgcGxhbi4KK0JFR0lO OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoIipW QUxVRVMqIiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gc2pfbmFycm93CisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIp LCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpv aW4KKyAgIEhhc2ggQ29uZDogKChzal9uYXJyb3cuaWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpIEFO RCAoc2pfbmFycm93LnZhbDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIpKQorICAgLT4gIFNlcSBTY2Fu IG9uIHNqX25hcnJvdworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisg ICAgICAgICAgICAgICBHcm91cCBLZXk6ICIqVkFMVUVTKiIuY29sdW1uMSwgIipWQUxVRVMqIi5j b2x1bW4yCisgICAgICAgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fVU5JUVVFKCIqVkFMVUVTKiIpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHNqX25hcnJv dyAiKlZBTFVFUyoiKQorICAgSEFTSF9KT0lOKCIqVkFMVUVTKiIpCisgICBTRVFfU0NBTihzal9u YXJyb3cpCisgICBTRU1JSk9JTl9VTklRVUUoIipWQUxVRVMqIikKKyAgIE5PX0dBVEhFUihzal9u YXJyb3cpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdz ZW1pam9pbl9ub25fdW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25hcnJvdworCVdIRVJFIChpZCwgdmFsMSkgSU4g KFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29uZDogKChzal9uYXJyb3cu aWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpIEFORCAoc2pfbmFycm93LnZhbDEgPSAiKlZBTFVFUyoi LmNvbHVtbjIpKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworICAgLT4gIEhhc2gKKyAg ICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZBTFVFUyoiCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIpIC8qIG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHNqX25hcnJvdyAiKlZBTFVFUyoi KQorICAgSEFTSF9KT0lOKCIqVkFMVUVTKiIpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBT RU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRIRVIoc2pfbmFycm93KQor KDEzIHJvd3MpCisKK0NPTU1JVDsKKy0tIEluIHRoZSBhYm92ZSBleGFtcGxlLCB3ZSBtYWRlIHRo ZSBvdXRlciBzaWRlIG9mIHRoZSBqb2luIHVuaXF1ZSwgYnV0IGhlcmUsCistLSB3ZSBzaG91bGQg bWFrZSB0aGUgaW5uZXIgc2lkZSB1bmlxdWUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUg ZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGcuZyA9IHNqX25hcnJvdy52YWwx KQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAgIC0+ICBIYXNo CisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBz al9uYXJyb3cudmFsMQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzal9uYXJyb3cpCisgICBI QVNIX0pPSU4oc2pfbmFycm93KQorICAgU0VRX1NDQU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5f VU5JUVVFKHNqX25hcnJvdykKKyAgIE5PX0dBVEhFUihzal9uYXJyb3cpCisoMTMgcm93cykKKwor LS0gV2Ugc2hvdWxkIGJlIGFibGUgdG8gZm9yY2UgYSBwbGFuIHdpdGggb3Igd2l0aG91dCB0aGUg bWFrZS11bmlxdWUgc3RyYXRlZ3ksCistLSB3aXRoIGVpdGhlciBzaWRlIGFzIHRoZSBkcml2aW5n IHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlq b2luX3VuaXF1ZShzal9uYXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGlu IChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CisgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGcuZyA9IHNqX25hcnJvdy52YWwx KQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAgIC0+ICBIYXNo CisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBz al9uYXJyb3cudmFsMQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdwor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJvdykgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzal9u YXJyb3cpCisgICBIQVNIX0pPSU4oc2pfbmFycm93KQorICAgU0VRX1NDQU4oc2pfbmFycm93KQor ICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJvdykKKyAgIE5PX0dBVEhFUihzal9uYXJyb3cpCiso MTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl9u b25fdW5pcXVlKHNqX25hcnJvdyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4g KHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29uZDogKGcuZyA9IHNq X25hcnJvdy52YWwxKQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcK KyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2pfbmFycm93CisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9OT05fVU5JUVVFKHNqX25hcnJvdykgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzal9uYXJy b3cpCisgICBIQVNIX0pPSU4oc2pfbmFycm93KQorICAgU0VRX1NDQU4oc2pfbmFycm93KQorICAg U0VNSUpPSU5fTk9OX1VOSVFVRShzal9uYXJyb3cpCisgICBOT19HQVRIRVIoc2pfbmFycm93KQor KDEzIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5f dW5pcXVlKHNqX25hcnJvdykgam9pbl9vcmRlcihzal9uYXJyb3cpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAp IGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CisgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBD b25kOiAoc2pfbmFycm93LnZhbDEgPSBnLmcpCisgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAg ICAgR3JvdXAgS2V5OiBzal9uYXJyb3cudmFsMQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNq X25hcnJvdworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVy YXRlX3NlcmllcyBnCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9VTklRVUUo c2pfbmFycm93KSAvKiBtYXRjaGVkICovCisgICBKT0lOX09SREVSKHNqX25hcnJvdykgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoc2pfbmFycm93 IGcpCisgICBIQVNIX0pPSU4oZykKKyAgIFNFUV9TQ0FOKHNqX25hcnJvdykKKyAgIFNFTUlKT0lO X1VOSVFVRShzal9uYXJyb3cpCisgICBOT19HQVRIRVIoc2pfbmFycm93KQorKDE2IHJvd3MpCisK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fbm9uX3VuaXF1ZShz al9uYXJyb3cpIGpvaW5fb3JkZXIoc2pfbmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAg V0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIFJpZ2h0IFNlbWkgSm9pbgorICAgSGFz aCBDb25kOiAoc2pfbmFycm93LnZhbDEgPSBnLmcpCisgICAtPiAgU2VxIFNjYW4gb24gc2pfbmFy cm93CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVf c2VyaWVzIGcKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX05PTl9VTklRVUUo c2pfbmFycm93KSAvKiBtYXRjaGVkICovCisgICBKT0lOX09SREVSKHNqX25hcnJvdykgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoc2pfbmFycm93 IGcpCisgICBIQVNIX0pPSU4oZykKKyAgIFNFUV9TQ0FOKHNqX25hcnJvdykKKyAgIFNFTUlKT0lO X05PTl9VTklRVUUoc2pfbmFycm93KQorICAgTk9fR0FUSEVSKHNqX25hcnJvdykKKygxNCByb3dz KQorCitDT01NSVQ7CistLSBIb3dldmVyLCBtZW50aW9uaW5nIHRoZSB3cm9uZyBzaWRlIG9mIHRo ZSBqb2luIHNob3VsZCByZXN1bHQgaW4gYW4gYWR2aWNlCistLSBmYWlsdXJlLgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShnKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJy b3cpOworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAg IERpc2FibGVkOiB0cnVlCisgICBKb2luIEZpbHRlcjogKGcuZyA9IHNqX25hcnJvdy52YWwxKQor ICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgIEdyb3VwIEtleTogc2pfbmFycm93LnZhbDEK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzal9uYXJyb3cKKyAgIC0+ICBGdW5jdGlvbiBTY2Fu IG9uIGdlbmVyYXRlX3NlcmllcyBnCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9J Tl9VTklRVUUoZykgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihzal9uYXJyb3cgZykKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGcpCisg ICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9VTklRVUUoc2pfbmFycm93KQorICAg Tk9fR0FUSEVSKHNqX25hcnJvdykKKygxNSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoZyknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZwor ICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsKKyAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVk OiB0cnVlCisgICBKb2luIEZpbHRlcjogKGcuZyA9IHNqX25hcnJvdy52YWwxKQorICAgLT4gIEhh c2hBZ2dyZWdhdGUKKyAgICAgICAgIEdyb3VwIEtleTogc2pfbmFycm93LnZhbDEKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBzal9uYXJyb3cKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVy YXRlX3NlcmllcyBnCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9OT05fVU5J UVVFKGcpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIoc2pfbmFycm93IGcpCisgICBORVNURURfTE9PUF9QTEFJTihnKQorICAgU0VR X1NDQU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJvdykKKyAgIE5PX0dB VEhFUihzal9uYXJyb3cpCisoMTUgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBjb25mbGljdGlu ZyBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2Vt aWpvaW5fdW5pcXVlKHNqX25hcnJvdykgc2VtaWpvaW5fbm9uX3VuaXF1ZShzal9uYXJyb3cpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRl X3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25h cnJvdyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBD b25kOiAoZy5nID0gc2pfbmFycm93LnZhbDEpCisgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5l cmF0ZV9zZXJpZXMgZworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisg ICAgICAgICAgICAgICBHcm91cCBLZXk6IHNqX25hcnJvdy52YWwxCisgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gc2pfbmFycm93CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1J Sk9JTl9VTklRVUUoc2pfbmFycm93KSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAqLworICAgU0VN SUpPSU5fTk9OX1VOSVFVRShzal9uYXJyb3cpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nLCBmYWls ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGcgc2pfbmFycm93 KQorICAgSEFTSF9KT0lOKHNqX25hcnJvdykKKyAgIFNFUV9TQ0FOKHNqX25hcnJvdykKKyAgIFNF TUlKT0lOX1VOSVFVRShzal9uYXJyb3cpCisgICBOT19HQVRIRVIoc2pfbmFycm93KQorKDE2IHJv d3MpCisKK0NPTU1JVDsKKy0tIFRyeSBhcHBseWluZyBTRU1JSk9JTl9VTklRVUUoKSB0byBhIG5v bi1zZW1pam9pbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdz ZW1pam9pbl91bmlxdWUoZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZywgc2pfbmFycm93IHMgV0hFUkUg ZyA9IHMudmFsMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAocy52YWwxID0g Zy5nKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2pfbmFycm93X3ZhbDFfaWR4IG9uIHNqX25h cnJvdyBzCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGcuZworICAgICAgICAgLT4g IEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIFNFTUlKT0lOX1VOSVFVRShnKSAvKiBtYXRjaGVkLCBpbmFwcGxpY2FibGUsIGZhaWxl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocyBnKQorICAgTUVS R0VfSk9JTl9QTEFJTihnKQorICAgSU5ERVhfU0NBTihzIHB1YmxpYy5zal9uYXJyb3dfdmFsMV9p ZHgpCisgICBOT19HQVRIRVIocykKKygxMyByb3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmJlNjE0MDJiNTY5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0CkBAIC0wLDAgKzEsMTkyIEBACitMT0FEICdw Z19wbGFuX2FkdmljZSc7CistLSBBbiBlbXB0eSBzdHJpbmcgaXMgYWxsb3dlZC4gRW1wdHkgdGFy Z2V0IGxpc3RzIGFyZSBhbGxvd2VkIGZvciBtb3N0IGFkdmljZQorLS0gdGFncywgYnV0IG5vdCBm b3IgSk9JTl9PUkRFUi4gIlN1cHBsaWVkIFBsYW4gQWR2aWNlIiBzaG91bGQgYmUgb21pdHRlZCBp bgorLS0gdGV4dCBmb3JtYXQgd2hlbiB0aGVyZSBpcyBubyBhY3R1YWwgYWR2aWNlLCBidXQgbm90 IGluIG5vbi10ZXh0IGZvcm1hdC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnJzsKK0VY UExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgUVVFUlkgUExBTiAKKy0tLS0tLS0tLS0tLQor IFJlc3VsdAorKDEgcm93KQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FO KCknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyBRVUVSWSBQTEFOIAorLS0tLS0t LS0tLS0tCisgUmVzdWx0CisoMSByb3cpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn TkVTVEVEX0xPT1BfUExBSU4oKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIEZPUk1BVCBKU09OKSBT RUxFQ1QgMTsKKyAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAg IHsgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICJQbGFuIjogeyAgICAgICAgICAg ICAgICAgKworICAgICAgICJOb2RlIFR5cGUiOiAiUmVzdWx0IiwgICsKKyAgICAgICAiUGFyYWxs ZWwgQXdhcmUiOiBmYWxzZSwrCisgICAgICAgIkFzeW5jIENhcGFibGUiOiBmYWxzZSwgKworICAg ICAgICJEaXNhYmxlZCI6IGZhbHNlICAgICAgICsKKyAgICAgfSwgICAgICAgICAgICAgICAgICAg ICAgICArCisgICAgICJTdXBwbGllZCBQbGFuIEFkdmljZSI6ICIiKworICAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICsKKyBdCisoMSByb3cpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnSk9JTl9PUkRFUigpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVy ICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiSk9JTl9PUkRFUigpIgorREVUQUlMOiAgQ291bGQg bm90IHBhcnNlIGFkdmljZTogSk9JTl9PUkRFUiBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHRhcmdl dCBhdCBvciBuZWFyICIpIgorLS0gVGVzdCBhc3NvcnRlZCB2YXJpYXRpb25zIGluIGNhcGl0YWxp emF0aW9uLCB3aGl0ZXNwYWNlLCBhbmQgd2hpY2ggcGFydHMgb2YKKy0tIHRoZSByZWxhdGlvbiBp ZGVudGlmaWVyIGFyZSBpbmNsdWRlZC4gVGhlc2Ugc2hvdWxkIGFsbCB3b3JrLgorU0VUIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTih4KSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNF TEVDVCAxOworICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IFNFUV9TQ0FOKHgpIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ3NlcV9zY2FuKHhAeSknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxF Q1QgMTsKKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgU0VRX1NDQU4oeEB5KSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKworU0VUIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfc2Nhbih4IzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRikg U0VMRUNUIDE7CisgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIFNFUV9TQ0FOKHgjMikgLyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3MpCisKK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4gKHgveSknOworRVhQTEFJTiAoQ09TVFMg T0ZGKSBTRUxFQ1QgMTsKKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgU0VRX1NDQU4oeC95KSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKwor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcgIFNFUV9TQ0FOICggeCAvIHkgLiB6ICkgICc7 CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJl c3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oeC95LnopIC8qIG5vdCBt YXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9T Q0FOKCJ4IiMyLyJ5Ii4ieiJAInQiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOwor ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTih4IzIveS56QHQpIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQor CistLSBTeW50YXggZXJyb3JzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFVRU5U SUFMX1NDQU4oeCknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3Bs YW5fYWR2aWNlLmFkdmljZSI6ICJTRVFVRU5USUFMX1NDQU4oeCkiCitERVRBSUw6ICBDb3VsZCBu b3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiU0VRVUVOVElBTF9TQ0FO IgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTic7CitFUlJPUjogIGludmFs aWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUV9TQ0FO IgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IGVuZCBv ZiBpbnB1dAorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTignOworRVJST1I6 ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJT RVFfU0NBTigiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3Ig YXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCIn OworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFk dmljZSI6ICJTRVFfU0NBTigiIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogdW50 ZXJtaW5hdGVkIHF1b3RlZCBpZGVudGlmaWVyIGF0IGVuZCBvZiBpbnB1dAorU0VUIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigiIiknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZv ciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFfU0NBTigiIikiCitERVRB SUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB6ZXJvLWxlbmd0aCBkZWxpbWl0ZWQgaWRlbnRp ZmllciBhdCBvciBuZWFyICIiIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NB TigiYSInOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2 aWNlLmFkdmljZSI6ICJTRVFfU0NBTigiYSIiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2 aWNlOiBzeW50YXggZXJyb3IgYXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ1NFUV9TQ0FOKCMnOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIg InBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFfU0NBTigjIgorREVUQUlMOiAgQ291bGQgbm90 IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIiMiCitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJygpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVy ICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiKCkiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2Ug YWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiKCIKK1NFVCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnMTIzJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19w bGFuX2FkdmljZS5hZHZpY2UiOiAiMTIzIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmlj ZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIjEyMyIKKy0tIFRhZ3MgbGlrZSBTRVFfU0NBTiBh bmQgTk9fR0FUSEVSIGRvbid0IGFsbG93IHN1Ymxpc3RzIGF0IGFsbDsgb3RoZXIgdGFncywKKy0t IGV4Y2VwdCBmb3IgSk9JTl9PUkRFUiwgYWxsb3cgYXQgbW9zdCBvbmUgbGV2ZWwgb2Ygc3VibGlz dC4gSGVuY2UsIHRoZXNlCistLSBleGFtcGxlcyBzaG91bGQgZXJyb3Igb3V0LgorU0VUIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigoeCkpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1 ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oKHgpKSIK K0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFy ICIoIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdHQVRIRVIoKCh4KSkpJzsKK0VSUk9S OiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAi R0FUSEVSKCgoeCkpKSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBl cnJvciBhdCBvciBuZWFyICIoIgorLS0gTGVnYWwgY29tbWVudHMuCitTRVQgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJy8qKi8nOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyBRVUVS WSBQTEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0CisoMSByb3cpCisKK1NFVCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSEFTSF9KT0lOKF8pLyoqKi8nOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBT RUxFQ1QgMTsKKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIEhBU0hfSk9JTihfKSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKworU0VUIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICcvKiBjb21tZW50ICovIEhBU0hfSk9JTigvKngqL3kpJzsKK0VY UExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oeSkgLyogbm90IG1hdGNoZWQgKi8KKygz IHJvd3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyogY29tbWVudCAqLyBIQVNI X0pPSU4oeS8vKngqL3opJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSEFTSF9KT0lO KHkveikgLyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3MpCisKKy0tIFVudGVybWluYXRlZCBjb21t ZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyonOworRVJST1I6ICBpbnZhbGlk IHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICIvKiIKK0RFVEFJ TDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHVudGVybWluYXRlZCBjb21tZW50IGF0IGVuZCBv ZiBpbnB1dAorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKCJmT08iKSAv KiBvb3BzJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2Fk dmljZS5hZHZpY2UiOiAiSk9JTl9PUkRFUigiZk9PIikgLyogb29wcyIKK0RFVEFJTDogIENvdWxk IG5vdCBwYXJzZSBhZHZpY2U6IHVudGVybWluYXRlZCBjb21tZW50IGF0IGVuZCBvZiBpbnB1dAor LS0gTmVzdGVkIGNvbW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLCBzbyB0aGUgZmlyc3Qgb2YgdGhl c2UgaXMgbGVnYWwgYW5kCistLSB0aGUgc2Vjb25kIGlzIG5vdC4KK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnLyovKi8nOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyBRVUVS WSBQTEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0CisoMSByb3cpCisKK1NFVCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnLyovKiBzdHVmZiAqLyovJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBm b3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiLyovKiBzdHVmZiAqLyovIgor REVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIg IioiCistLSBGb3JlaWduIGpvaW4gcmVxdWlyZXMgbXVsdGlwbGUgcmVsYXRpb24gaWRlbnRpZmll cnMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJR05fSk9JTihhKSc7CitFUlJP UjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjog IkZPUkVJR05fSk9JTihhKSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IEZPUkVJ R05fSk9JTiB0YXJnZXRzIG11c3QgY29udGFpbiBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGlkZW50 aWZpZXIgYXQgb3IgbmVhciAiKSIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRk9SRUlH Tl9KT0lOKChhKSknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3Bs YW5fYWR2aWNlLmFkdmljZSI6ICJGT1JFSUdOX0pPSU4oKGEpKSIKK0RFVEFJTDogIENvdWxkIG5v dCBwYXJzZSBhZHZpY2U6IEZPUkVJR05fSk9JTiB0YXJnZXRzIG11c3QgY29udGFpbiBtb3JlIHRo YW4gb25lIHJlbGF0aW9uIGlkZW50aWZpZXIgYXQgb3IgbmVhciAiKSIKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mYmIz YmEzYzZmOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24u YnVpbGQKQEAgLTAsMCArMSw3MiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNCwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworcGdfcGxhbl9hZHZpY2Vfc291cmNlcyA9 IGZpbGVzKAorICAncGdfcGxhbl9hZHZpY2UuYycsCisgICdwZ3BhX2FzdC5jJywKKyAgJ3BncGFf Y29sbGVjdG9yLmMnLAorICAncGdwYV9pZGVudGlmaWVyLmMnLAorICAncGdwYV9qb2luLmMnLAor ICAncGdwYV9vdXRwdXQuYycsCisgICdwZ3BhX3BsYW5uZXIuYycsCisgICdwZ3BhX3NjYW4uYycs CisgICdwZ3BhX3Ryb3ZlLmMnLAorICAncGdwYV93YWxrZXIuYycsCispCisKK3BncGFfc2Nhbm5l ciA9IGN1c3RvbV90YXJnZXQoJ3BncGFfc2Nhbm5lcicsCisgIGlucHV0OiAncGdwYV9zY2FubmVy LmwnLAorICBvdXRwdXQ6ICdwZ3BhX3NjYW5uZXIuYycsCisgIGNvbW1hbmQ6IGZsZXhfY21kLAor KQorZ2VuZXJhdGVkX3NvdXJjZXMgKz0gcGdwYV9zY2FubmVyCitwZ19wbGFuX2FkdmljZV9zb3Vy Y2VzICs9IHBncGFfc2Nhbm5lcgorCitwZ3BhX3BhcnNlciA9IGN1c3RvbV90YXJnZXQoJ3BncGFf cGFyc2VyJywKKyAgaW5wdXQ6ICdwZ3BhX3BhcnNlci55JywKKyAga3dhcmdzOiBiaXNvbl9rdywK KykKK2dlbmVyYXRlZF9zb3VyY2VzICs9IHBncGFfcGFyc2VyLnRvX2xpc3QoKQorcGdfcGxhbl9h ZHZpY2Vfc291cmNlcyArPSBwZ3BhX3BhcnNlcgorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93 cycKKyAgcGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSByY19saWJfZ2VuLnByb2Nlc3Mod2luMzJ2 ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3BnX3BsYW5fYWR2aWNlJywKKyAg ICAnLS1GSUxFREVTQycsICdwZ19wbGFuX2FkdmljZSAtIGhlbHAgdGhlIHBsYW5uZXIgZ2V0IHRo ZSByaWdodCBwbGFuJyxdKQorZW5kaWYKKworcGdfcGxhbl9hZHZpY2UgPSBzaGFyZWRfbW9kdWxl KCdwZ19wbGFuX2FkdmljZScsCisgIHBnX3BsYW5fYWR2aWNlX3NvdXJjZXMsCisgIGluY2x1ZGVf ZGlyZWN0b3JpZXM6IGluY2x1ZGVfZGlyZWN0b3JpZXMoJy4nKSwKKyAga3dhcmdzOiBjb250cmli X21vZF9hcmdzLAorKQorY29udHJpYl90YXJnZXRzICs9IHBnX3BsYW5fYWR2aWNlCisKK2luc3Rh bGxfZGF0YSgKKyAgJ3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsJywKKyAgJ3BnX3BsYW5fYWR2aWNl LmNvbnRyb2wnLAorICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdzLAorKQorCit0ZXN0cyArPSB7 CisgICduYW1lJzogJ3BnX3BsYW5fYWR2aWNlJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3Vy Y2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICdyZWdyZXNz JzogeworICAgICdzcWwnOiBbCisgICAgICAnZ2F0aGVyJywKKyAgICAgICdqb2luX29yZGVyJywK KyAgICAgICdqb2luX3N0cmF0ZWd5JywKKyAgICAgICdsb2NhbF9jb2xsZWN0b3InLAorICAgICAg J3BhcnRpdGlvbndpc2UnLAorICAgICAgJ3ByZXBhcmVkJywKKyAgICAgICdzY2FuJywKKyAgICAg ICdzZW1pam9pbicsCisgICAgICAnc3ludGF4JywKKyAgICBdLAorICB9LAorICAndGFwJzogewor ICAgICd0ZXN0cyc6IFsKKyAgICAgICd0LzAwMV9yZWdyZXNzLnBsJywKKyAgICBdLAorICB9LAor fQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4w LnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ1MGM0MjA0MGZkCi0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNx bApAQCAtMCwwICsxLDQzIEBACisvKiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2 aWNlLS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBz cWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBF WFRFTlNJT04gcGdfcGxhbl9hZHZpY2UiIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCitDUkVB VEUgRlVOQ1RJT04gcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpCitSRVRVUk5TIHZv aWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2Fkdmlj ZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdfY2xlYXJfY29sbGVj dGVkX3NoYXJlZF9hZHZpY2UoKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywg J3BnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisK K0NSRUFURSBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgKKwlPVVQgaWQg YmlnaW50LAorCU9VVCB1c2VyaWQgb2lkLAorCU9VVCBkYmlkIG9pZCwKKwlPVVQgcXVlcnlpZCBi aWdpbnQsCisJT1VUIGNvbGxlY3Rpb25fdGltZSB0aW1lc3RhbXB0eiwKKwlPVVQgcXVlcnkgdGV4 dCwKKwlPVVQgYWR2aWNlIHRleHQKKykKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitBUyAnTU9EVUxF X1BBVEhOQU1FJywgJ3BnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlJworTEFOR1VBR0UgQyBT VFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2Uo CisJT1VUIGlkIGJpZ2ludCwKKwlPVVQgdXNlcmlkIG9pZCwKKwlPVVQgZGJpZCBvaWQsCisJT1VU IHF1ZXJ5aWQgYmlnaW50LAorCU9VVCBjb2xsZWN0aW9uX3RpbWUgdGltZXN0YW1wdHosCisJT1VU IHF1ZXJ5IHRleHQsCisJT1VUIGFkdmljZSB0ZXh0CispCitSRVRVUk5TIFNFVE9GIHJlY29yZAor QVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UnCitM QU5HVUFHRSBDIFNUUklDVDsKKworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19jbGVhcl9jb2xs ZWN0ZWRfc2hhcmVkX2FkdmljZSgpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBGVU5DVElP TiBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKSBGUk9NIFBVQkxJQzsKZGlmZiAtLWdp dCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYyBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uMmFhMjFlYTkxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMKQEAgLTAsMCArMSw1MDMgQEAKKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIHBnX3BsYW5fYWR2aWNlLmMKKyAqCSAgbWFpbiBlbnRyeXBvaW50cyBm b3IgZ2VuZXJhdGluZyBhbmQgYXBwbHlpbmcgcGxhbm5lciBhZHZpY2UKKyAqCisgKiBDb3B5cmln aHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq CisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYworICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBn X3BsYW5fYWR2aWNlLmgiCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKyNpbmNsdWRlICJwZ3BhX2Nv bGxlY3Rvci5oIgorI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorI2luY2x1ZGUgInBncGFf b3V0cHV0LmgiCisjaW5jbHVkZSAicGdwYV9wbGFubmVyLmgiCisjaW5jbHVkZSAicGdwYV90cm92 ZS5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZy ZW0uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluLmgiCisjaW5jbHVkZSAiY29tbWFuZHMv ZXhwbGFpbl9mb3JtYXQuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluX3N0YXRlLmgiCisj aW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCisjaW5j bHVkZSAic3RvcmFnZS9kc21fcmVnaXN0cnkuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKwor UEdfTU9EVUxFX01BR0lDOworCitzdGF0aWMgcGdwYV9zaGFyZWRfc3RhdGUgKnBncGFfc3RhdGUg PSBOVUxMOworc3RhdGljIGRzYV9hcmVhICpwZ3BhX2RzYV9hcmVhID0gTlVMTDsKKworLyogR1VD IHZhcmlhYmxlcyAqLworY2hhcgkgICAqcGdfcGxhbl9hZHZpY2VfYWR2aWNlID0gTlVMTDsKK2Jv b2wJCXBnX3BsYW5fYWR2aWNlX2Fsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IGZhbHNlOwor c3RhdGljIGJvb2wgcGdfcGxhbl9hZHZpY2VfYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNl ID0gdHJ1ZTsKK2Jvb2wJCXBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3RvciA9IGZhbHNlOwor aW50CQkJcGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDA7Citib29sCQlw Z19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdG9yID0gZmFsc2U7CitpbnQJCQlwZ19wbGFuX2Fk dmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdCA9IDA7Citib29sCQlwZ19wbGFuX2FkdmljZV90 cmFjZV9tYXNrID0gZmFsc2U7CisKKy8qIFNhdmVkIGhvb2sgdmFsdWUgKi8KK3N0YXRpYyBleHBs YWluX3Blcl9wbGFuX2hvb2tfdHlwZSBwcmV2X2V4cGxhaW5fcGVyX3BsYW4gPSBOVUxMOworCisv KiBPdGhlciBmaWxlLWxldmVsIGdsb2JhbHMgKi8KK3N0YXRpYyBpbnQJZXNfZXh0ZW5zaW9uX2lk Oworc3RhdGljIE1lbW9yeUNvbnRleHQgcGdwYV9tZW1vcnlfY29udGV4dCA9IE5VTEw7CisKK3N0 YXRpYyB2b2lkIHBncGFfaW5pdF9zaGFyZWRfc3RhdGUodm9pZCAqcHRyLCB2b2lkICphcmcpOwor c3RhdGljIHZvaWQgcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9vcHRpb25faGFuZGxlcihFeHBsYWlu U3RhdGUgKmVzLAorCQkJCQkJCQkJCQkJICBEZWZFbGVtICpvcHQsCisJCQkJCQkJCQkJCQkgIFBh cnNlU3RhdGUgKnBzdGF0ZSk7CitzdGF0aWMgdm9pZCBwZ19wbGFuX2FkdmljZV9leHBsYWluX3Bl cl9wbGFuX2hvb2soUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCQkJCQkJCQkJIEludG9D bGF1c2UgKmludG8sCisJCQkJCQkJCQkJCQkgRXhwbGFpblN0YXRlICplcywKKwkJCQkJCQkJCQkJ CSBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKKwkJCQkJCQkJCQkJCSBQYXJhbUxpc3RJbmZvIHBh cmFtcywKKwkJCQkJCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7CitzdGF0aWMg Ym9vbCBwZ19wbGFuX2FkdmljZV9hZHZpY2VfY2hlY2tfaG9vayhjaGFyICoqbmV3dmFsLCB2b2lk ICoqZXh0cmEsCisJCQkJCQkJCQkJCSBHdWNTb3VyY2Ugc291cmNlKTsKK3N0YXRpYyBEZWZFbGVt ICpmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShMaXN0ICpkZWZsaXN0LCBjaGFyICpkZWZuYW1lKTsK KworLyoKKyAqIEluaXRpYWxpemUgdGhpcyBtb2R1bGUuCisgKi8KK3ZvaWQKK19QR19pbml0KHZv aWQpCit7CisJRGVmaW5lQ3VzdG9tU3RyaW5nVmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmFkdmlj ZSIsCisJCQkJCQkJICAgImFkdmljZSB0byBhcHBseSBkdXJpbmcgcXVlcnkgcGxhbm5pbmciLAor CQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgJnBnX3BsYW5fYWR2aWNlX2FkdmljZSwKKwkJCQkJ CQkgICBOVUxMLAorCQkJCQkJCSAgIFBHQ19VU0VSU0VULAorCQkJCQkJCSAgIDAsCisJCQkJCQkJ ICAgcGdfcGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNrX2hvb2ssCisJCQkJCQkJICAgTlVMTCwKKwkJ CQkJCQkgICBOVUxMKTsKKworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfcGxhbl9hZHZp Y2UuYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlIiwKKwkJCQkJCQkgIkVYUExBSU4gb3V0 cHV0IGluY2x1ZGVzIHN1cHBsaWVkIGFkdmljZSBldmVuIHdpdGhvdXQgRVhQTEFJTiAoUExBTl9B RFZJQ0UpIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBnX3BsYW5fYWR2aWNlX2Fsd2F5c19l eHBsYWluX3N1cHBsaWVkX2FkdmljZSwKKwkJCQkJCQkgdHJ1ZSwKKwkJCQkJCQkgUEdDX1VTRVJT RVQsCisJCQkJCQkJIDAsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5V TEwpOworCisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5hbHdheXNf c3RvcmVfYWR2aWNlX2RldGFpbHMiLAorCQkJCQkJCSAiR2VuZXJhdGUgYWR2aWNlIHN0cmluZ3Mg ZXZlbiB3aGVuIHNlZW1pbmdseSBub3QgcmVxdWlyZWQiLAorCQkJCQkJCSAiVXNlIHRoaXMgb3B0 aW9uIHRvIHNlZSBnZW5lcmF0ZWQgYWR2aWNlIGZvciBwcmVwYXJlZCBxdWVyaWVzLiIsCisJCQkJ CQkJICZwZ19wbGFuX2FkdmljZV9hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMsCisJCQkJCQkJ IGZhbHNlLAorCQkJCQkJCSBQR0NfVVNFUlNFVCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwK KwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCk7CisKKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFi bGUoInBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3RvciIsCisJCQkJCQkJICJFbmFibGUgdGhl IGxvY2FsIGFkdmljZSBjb2xsZWN0b3IuIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBnX3Bs YW5fYWR2aWNlX2xvY2FsX2NvbGxlY3RvciwKKwkJCQkJCQkgZmFsc2UsCisJCQkJCQkJIFBHQ19V U0VSU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJ CSBOVUxMKTsKKworCURlZmluZUN1c3RvbUludFZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5sb2Nh bF9jb2xsZWN0aW9uX2xpbWl0IiwKKwkJCQkJCQkiIyBvZiBhZHZpY2UgZW50cmllcyB0byByZXRh aW4gaW4gcGVyLWJhY2tlbmQgbWVtb3J5IiwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCSZwZ19wbGFu X2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJCQkJCQkJMCwgSU5U X01BWCwKKwkJCQkJCQlQR0NfVVNFUlNFVCwKKwkJCQkJCQkwLAorCQkJCQkJCU5VTEwsCisJCQkJ CQkJTlVMTCwKKwkJCQkJCQlOVUxMKTsKKworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdf cGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvciIsCisJCQkJCQkJICJFbmFibGUgdGhlIHNoYXJl ZCBhZHZpY2UgY29sbGVjdG9yLiIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJICZwZ19wbGFuX2Fk dmljZV9zaGFyZWRfY29sbGVjdG9yLAorCQkJCQkJCSBmYWxzZSwKKwkJCQkJCQkgUEdDX1NVU0VU LAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxM KTsKKworCURlZmluZUN1c3RvbUludFZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5zaGFyZWRfY29s bGVjdGlvbl9saW1pdCIsCisJCQkJCQkJIiMgb2YgYWR2aWNlIGVudHJpZXMgdG8gcmV0YWluIGlu IHNoYXJlZCBtZW1vcnkiLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX3BsYW5fYWR2aWNlX3No YXJlZF9jb2xsZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJCQkJCQkJMCwgSU5UX01BWCwKKwkJ CQkJCQlQR0NfU1VTRVQsCisJCQkJCQkJMCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCU5VTEwsCisJ CQkJCQkJTlVMTCk7CisKKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBnX3BsYW5fYWR2aWNl LnRyYWNlX21hc2siLAorCQkJCQkJCSAiRW1pdCBkZWJ1Z2dpbmcgbWVzc2FnZXMgc2hvd2luZyB0 aGUgY29tcHV0ZWQgc3RyYXRlZ3kgbWFzayBmb3IgZWFjaCByZWxhdGlvbiIsCisJCQkJCQkJIE5V TEwsCisJCQkJCQkJICZwZ19wbGFuX2FkdmljZV90cmFjZV9tYXNrLAorCQkJCQkJCSBmYWxzZSwK KwkJCQkJCQkgUEdDX1VTRVJTRVQsCisJCQkJCQkJIDAsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJ IE5VTEwsCisJCQkJCQkJIE5VTEwpOworCisJTWFya0dVQ1ByZWZpeFJlc2VydmVkKCJwZ19wbGFu X2FkdmljZSIpOworCisJLyogR2V0IGFuIElEIHRoYXQgd2UgY2FuIHVzZSB0byBjYWNoZSBkYXRh IGluIGFuIEV4cGxhaW5TdGF0ZS4gKi8KKwllc19leHRlbnNpb25faWQgPSBHZXRFeHBsYWluRXh0 ZW5zaW9uSWQoInBnX3BsYW5fYWR2aWNlIik7CisKKwkvKiBSZWdpc3RlciB0aGUgbmV3IEVYUExB SU4gb3B0aW9ucyBpbXBsZW1lbnRlZCBieSB0aGlzIG1vZHVsZS4gKi8KKwlSZWdpc3RlckV4dGVu c2lvbkV4cGxhaW5PcHRpb24oInBsYW5fYWR2aWNlIiwKKwkJCQkJCQkJICAgcGdfcGxhbl9hZHZp Y2VfZXhwbGFpbl9vcHRpb25faGFuZGxlcik7CisKKwkvKiBJbnN0YWxsIGhvb2tzICovCisJcGdw YV9wbGFubmVyX2luc3RhbGxfaG9va3MoKTsKKwlwcmV2X2V4cGxhaW5fcGVyX3BsYW4gPSBleHBs YWluX3Blcl9wbGFuX2hvb2s7CisJZXhwbGFpbl9wZXJfcGxhbl9ob29rID0gcGdfcGxhbl9hZHZp Y2VfZXhwbGFpbl9wZXJfcGxhbl9ob29rOworfQorCisvKgorICogSW5pdGlhbGl6ZSBzaGFyZWQg c3RhdGUgd2hlbiBmaXJzdCBjcmVhdGVkLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9pbml0X3No YXJlZF9zdGF0ZSh2b2lkICpwdHIsIHZvaWQgKmFyZykKK3sKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAq c3RhdGUgPSAocGdwYV9zaGFyZWRfc3RhdGUgKikgcHRyOworCisJTFdMb2NrSW5pdGlhbGl6ZSgm c3RhdGUtPmxvY2ssIExXTG9ja05ld1RyYW5jaGVJZCgicGdfcGxhbl9hZHZpY2VfbG9jayIpKTsK KwlzdGF0ZS0+ZHNhX3RyYW5jaGUgPSBMV0xvY2tOZXdUcmFuY2hlSWQoInBnX3BsYW5fYWR2aWNl X2RzYSIpOworCXN0YXRlLT5hcmVhID0gRFNBX0hBTkRMRV9JTlZBTElEOworCXN0YXRlLT5zaGFy ZWRfY29sbGVjdG9yID0gSW52YWxpZERzYVBvaW50ZXI7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBw b2ludGVyIHRvIGEgbWVtb3J5IGNvbnRleHQgd2hlcmUgbG9uZy1saXZlZCBkYXRhIG1hbmFnZWQg YnkgdGhpcworICogbW9kdWxlIGNhbiBiZSBzdG9yZWQuCisgKi8KK01lbW9yeUNvbnRleHQKK3Bn X3BsYW5fYWR2aWNlX2dldF9tY3h0KHZvaWQpCit7CisJaWYgKHBncGFfbWVtb3J5X2NvbnRleHQg PT0gTlVMTCkKKwkJcGdwYV9tZW1vcnlfY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShU b3BNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJCSJwZ19wbGFuX2FkdmljZSIsCisJCQkJCQkJ CQkJCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisKKwlyZXR1cm4gcGdwYV9tZW1vcnlfY29u dGV4dDsKK30KKworLyoKKyAqIEdldCBhIHBvaW50ZXIgdG8gb3VyIHNoYXJlZCBzdGF0ZS4KKyAq CisgKiBJZiBubyBzaGFyZWQgc3RhdGUgZXhpc3RzLCBjcmVhdGUgYW5kIGluaXRpYWxpemUgaXQu IElmIGl0IGRvZXMgZXhpc3QgYnV0CisgKiB0aGlzIGJhY2tlbmQgaGFzIG5vdCB5ZXQgYWNjZXNz ZWQgaXQsIGF0dGFjaCB0byBpdC4gT3RoZXJ3aXNlLCBqdXN0IHJldHVybgorICogb3VyIGNhY2hl ZCBwb2ludGVyLgorICoKKyAqIEFsb25nIHRoZSB3YXksIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQg TFdMb2NrIHRyYW5jaGVzIGFyZSByZWdpc3RlcmVkLgorICovCitwZ3BhX3NoYXJlZF9zdGF0ZSAq CitwZ19wbGFuX2FkdmljZV9hdHRhY2godm9pZCkKK3sKKwlpZiAocGdwYV9zdGF0ZSA9PSBOVUxM KQorCXsKKwkJYm9vbAkJZm91bmQ7CisKKwkJcGdwYV9zdGF0ZSA9CisJCQlHZXROYW1lZERTTVNl Z21lbnQoInBnX3BsYW5fYWR2aWNlIiwgc2l6ZW9mKHBncGFfc2hhcmVkX3N0YXRlKSwKKwkJCQkJ CQkgICBwZ3BhX2luaXRfc2hhcmVkX3N0YXRlLCAmZm91bmQsIE5VTEwpOworCX0KKworCXJldHVy biBwZ3BhX3N0YXRlOworfQorCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byBwZ19wbGFuX2Fk dmljZSdzIERTQSBhcmVhLCBjcmVhdGluZyBpdCBpZiBuZWVkZWQuCisgKi8KK2RzYV9hcmVhICoK K3BnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKHZvaWQpCit7CisJaWYgKHBncGFfZHNhX2FyZWEgPT0g TlVMTCkKKwl7CisJCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX3BsYW5fYWR2aWNlX2F0 dGFjaCgpOworCQlkc2FfaGFuZGxlCWFyZWFfaGFuZGxlOworCQlNZW1vcnlDb250ZXh0IG9sZGNv bnRleHQ7CisKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19wbGFuX2Fk dmljZV9nZXRfbWN4dCgpKTsKKworCQlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfRVhD TFVTSVZFKTsKKwkJYXJlYV9oYW5kbGUgPSBzdGF0ZS0+YXJlYTsKKwkJaWYgKGFyZWFfaGFuZGxl ID09IERTQV9IQU5ETEVfSU5WQUxJRCkKKwkJeworCQkJcGdwYV9kc2FfYXJlYSA9IGRzYV9jcmVh dGUoc3RhdGUtPmRzYV90cmFuY2hlKTsKKwkJCWRzYV9waW4ocGdwYV9kc2FfYXJlYSk7CisJCQlz dGF0ZS0+YXJlYSA9IGRzYV9nZXRfaGFuZGxlKHBncGFfZHNhX2FyZWEpOworCQkJTFdMb2NrUmVs ZWFzZSgmc3RhdGUtPmxvY2spOworCQl9CisJCWVsc2UKKwkJeworCQkJTFdMb2NrUmVsZWFzZSgm c3RhdGUtPmxvY2spOworCQkJcGdwYV9kc2FfYXJlYSA9IGRzYV9hdHRhY2goYXJlYV9oYW5kbGUp OworCQl9CisKKwkJZHNhX3Bpbl9tYXBwaW5nKHBncGFfZHNhX2FyZWEpOworCisJCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwlyZXR1cm4gcGdwYV9kc2FfYXJlYTsK K30KKworLyoKKyAqIFdhcyB0aGUgUExBTl9BRFZJQ0Ugb3B0aW9uIHNwZWNpZmllZCBhbmQgbm90 IHNldCB0byBmYWxzZT8KKyAqLworYm9vbAorcGdfcGxhbl9hZHZpY2Vfc2hvdWxkX2V4cGxhaW4o RXhwbGFpblN0YXRlICplcykKK3sKKwlib29sCSAgICpwbGFuX2FkdmljZSA9IE5VTEw7CisKKwlp ZiAoZXMgIT0gTlVMTCkKKwkJcGxhbl9hZHZpY2UgPSBHZXRFeHBsYWluRXh0ZW5zaW9uU3RhdGUo ZXMsIGVzX2V4dGVuc2lvbl9pZCk7CisJcmV0dXJuIHBsYW5fYWR2aWNlICE9IE5VTEwgJiYgKnBs YW5fYWR2aWNlOworfQorCisvKgorICogSGFuZGxlciBmb3IgRVhQTEFJTiAoUExBTl9BRFZJQ0Up LgorICovCitzdGF0aWMgdm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9vcHRpb25faGFuZGxl cihFeHBsYWluU3RhdGUgKmVzLCBEZWZFbGVtICpvcHQsCisJCQkJCQkJCQkgIFBhcnNlU3RhdGUg KnBzdGF0ZSkKK3sKKwlib29sCSAgICpwbGFuX2FkdmljZTsKKworCXBsYW5fYWR2aWNlID0gR2V0 RXhwbGFpbkV4dGVuc2lvblN0YXRlKGVzLCBlc19leHRlbnNpb25faWQpOworCisJaWYgKHBsYW5f YWR2aWNlID09IE5VTEwpCisJeworCQlwbGFuX2FkdmljZSA9IHBhbGxvYzBfb2JqZWN0KGJvb2wp OworCQlTZXRFeHBsYWluRXh0ZW5zaW9uU3RhdGUoZXMsIGVzX2V4dGVuc2lvbl9pZCwgcGxhbl9h ZHZpY2UpOworCX0KKworCSpwbGFuX2FkdmljZSA9IGRlZkdldEJvb2xlYW4ob3B0KTsKK30KKwor LyoKKyAqIERpc3BsYXkgYSBzdHJpbmcgdGhhdCBpcyBsaWtlbHkgdG8gY29uc2lzdCBvZiBtdWx0 aXBsZSBsaW5lcyBpbiBFWFBMQUlOCisgKiBvdXRwdXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19w bGFuX2FkdmljZV9leHBsYWluX3RleHRfbXVsdGlsaW5lKEV4cGxhaW5TdGF0ZSAqZXMsIGNoYXIg KnFsYWJlbCwKKwkJCQkJCQkJCSAgY2hhciAqdmFsdWUpCit7CisJY2hhcgkgICAqczsKKworCS8q IEZvciBub24tdGV4dCBmb3JtYXRzLCBpdCdzIGJlc3Qgbm90IHRvIGFkZCBhbnkgc3BlY2lhbCBo YW5kbGluZy4gKi8KKwlpZiAoZXMtPmZvcm1hdCAhPSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCXsK KwkJRXhwbGFpblByb3BlcnR5VGV4dChxbGFiZWwsIHZhbHVlLCBlcyk7CisJCXJldHVybjsKKwl9 CisKKwkvKiBJbiB0ZXh0IGZvcm1hdCwgaWYgdGhlcmUgaXMgbm8gZGF0YSwgZGlzcGxheSBub3Ro aW5nLiAqLworCWlmICgqdmFsdWUgPT0gJ1wwJykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJdCBs b29rcyBuaWNlc3QgdG8gaW5kZW50IGVhY2ggbGluZSBvZiB0aGUgYWR2aWNlIHNlcGFyYXRlbHks IGJlZ2lubmluZworCSAqIG9uIHRoZSBsaW5lIGJlbG93IHRoZSBsYWJlbC4KKwkgKi8KKwlFeHBs YWluSW5kZW50VGV4dChlcyk7CisJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAiJXM6XG4iLCBx bGFiZWwpOworCWVzLT5pbmRlbnQrKzsKKwl3aGlsZSAoKHMgPSBzdHJjaHIodmFsdWUsICdcbicp KSAhPSBOVUxMKQorCXsKKwkJRXhwbGFpbkluZGVudFRleHQoZXMpOworCQlhcHBlbmRCaW5hcnlT dHJpbmdJbmZvKGVzLT5zdHIsIHZhbHVlLCAocyAtIHZhbHVlKSArIDEpOworCQl2YWx1ZSA9IHMg KyAxOworCX0KKworCS8qIERvbid0IGludGVycHJldCBhIHRlcm1pbmFsIG5ld2xpbmUgYXMgYSBy ZXF1ZXN0IGZvciBhbiBlbXB0eSBsaW5lLiAqLworCWlmICgqdmFsdWUgIT0gJ1wwJykKKwl7CisJ CUV4cGxhaW5JbmRlbnRUZXh0KGVzKTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAiJXNc biIsIHZhbHVlKTsKKwl9CisKKwllcy0+aW5kZW50LS07Cit9CisKKy8qCisgKiBBZGQgYWR2aWNl IGZlZWRiYWNrIHRvIHRoZSBFWFBMQUlOIG91dHB1dC4KKyAqLworc3RhdGljIHZvaWQKK3BnX3Bs YW5fYWR2aWNlX2V4cGxhaW5fZmVlZGJhY2soRXhwbGFpblN0YXRlICplcywgTGlzdCAqZmVlZGJh Y2spCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJ Zm9yZWFjaF9ub2RlKERlZkVsZW0sIGl0ZW0sIGZlZWRiYWNrKQorCXsKKwkJaW50CQkJZmxhZ3Mg PSBkZWZHZXRJbnQzMihpdGVtKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlcyAvKiAi LCBpdGVtLT5kZWZuYW1lKTsKKwkJaWYgKChmbGFncyAmIFBHUEFfVEVfTUFUQ0hfRlVMTCkgIT0g MCkKKwkJeworCQkJQXNzZXJ0KChmbGFncyAmIFBHUEFfVEVfTUFUQ0hfUEFSVElBTCkgIT0gMCk7 CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJtYXRjaGVkIik7CisJCX0KKwkJZWxzZSBpZiAo KGZsYWdzICYgUEdQQV9URV9NQVRDSF9QQVJUSUFMKSAhPSAwKQorCQkJYXBwZW5kU3RyaW5nSW5m bygmYnVmLCAicGFydGlhbGx5IG1hdGNoZWQiKTsKKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5m bygmYnVmLCAibm90IG1hdGNoZWQiKTsKKwkJaWYgKChmbGFncyAmIFBHUEFfVEVfSU5BUFBMSUNB QkxFKSAhPSAwKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCBpbmFwcGxpY2FibGUiKTsK KwkJaWYgKChmbGFncyAmIFBHUEFfVEVfQ09ORkxJQ1RJTkcpICE9IDApCisJCQlhcHBlbmRTdHJp bmdJbmZvKCZidWYsICIsIGNvbmZsaWN0aW5nIik7CisJCWlmICgoZmxhZ3MgJiBQR1BBX1RFX0ZB SUxFRCkgIT0gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiwgZmFpbGVkIik7CisJCWFw cGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiAqL1xuIik7CisJfQorCisJcGdfcGxhbl9hZHZpY2VfZXhw bGFpbl90ZXh0X211bHRpbGluZShlcywgIlN1cHBsaWVkIFBsYW4gQWR2aWNlIiwKKwkJCQkJCQkJ CQkgIGJ1Zi5kYXRhKTsKK30KKworLyoKKyAqIEFkZCByZWxldmFudCBkZXRhaWxzLCBpZiBhbnks IHRvIHRoZSBFWFBMQUlOIG91dHB1dCBmb3IgYSBzaW5nbGUgcGxhbi4KKyAqLworc3RhdGljIHZv aWQKK3BnX3BsYW5fYWR2aWNlX2V4cGxhaW5fcGVyX3BsYW5faG9vayhQbGFubmVkU3RtdCAqcGxh bm5lZHN0bXQsCisJCQkJCQkJCQkgSW50b0NsYXVzZSAqaW50bywKKwkJCQkJCQkJCSBFeHBsYWlu U3RhdGUgKmVzLAorCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAorCQkJCQkJCQkJ IFBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJCQkJCQkJIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5 RW52KQoreworCWJvb2wJCXNob3VsZF9leHBsYWluOworCURlZkVsZW0gICAgKnBncGFfaXRlbTsK KwlMaXN0CSAgICpwZ3BhX2xpc3Q7CisKKwlpZiAocHJldl9leHBsYWluX3Blcl9wbGFuKQorCQlw cmV2X2V4cGxhaW5fcGVyX3BsYW4ocGxhbm5lZHN0bXQsIGludG8sIGVzLCBxdWVyeVN0cmluZywg cGFyYW1zLAorCQkJCQkJCSAgcXVlcnlFbnYpOworCisJLyogU2hvdWxkIGFuIGFkdmljZSBzdHJp bmcgYmUgcGFydCBvZiB0aGUgRVhQTEFJTiBvdXRwdXQ/ICovCisJc2hvdWxkX2V4cGxhaW4gPSBw Z19wbGFuX2FkdmljZV9zaG91bGRfZXhwbGFpbihlcyk7CisKKwkvKiBGaW5kIGFueSBkYXRhIHBn cGFfcGxhbm5lcl9zaHV0ZG93biBzdGFzaGVkIGluIHRoZSBQbGFubmVkU3RtdC4gKi8KKwlwZ3Bh X2l0ZW0gPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShwbGFubmVkc3RtdC0+ZXh0ZW5zaW9uX3N0 YXRlLAorCQkJCQkJCQkJCSJwZ19wbGFuX2FkdmljZSIpOworCXBncGFfbGlzdCA9IHBncGFfaXRl bSA9PSBOVUxMID8gTlVMTCA6IChMaXN0ICopIHBncGFfaXRlbS0+YXJnOworCisJLyoKKwkgKiBC eSBkZWZhdWx0LCBpZiB0aGVyZSBpcyBhIHJlY29yZCBvZiBhdHRlbXB0aW5nIHRvIGFwcGx5IGFk dmljZSBkdXJpbmcKKwkgKiBxdWVyeSBwbGFubmluZywgd2UgYWx3YXlzIG91dHB1dCB0aGF0IGlu Zm9ybWF0aW9uLCBidXQgdGhlIHVzZXIgY2FuIHNldAorCSAqIHBnX3BsYW5fYWR2aWNlLmFsd2F5 c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSA9IGZhbHNlIHRvIHN1cHByZXNzIHRoYXQKKwkgKiBi ZWhhdmlvci4gSWYgdGhleSBkbywgd2UnbGwgb25seSBkaXNwbGF5IGl0IHdoZW4gdGhlIFBMQU5f QURWSUNFIG9wdGlvbgorCSAqIHdhcyBzcGVjaWZpZWQgYW5kIG5vdCBzZXQgdG8gZmFsc2UuCisJ ICoKKwkgKiBOQjogSWYgd2UncmUgZXhwbGFpbmluZyBhIHF1ZXJ5IHBsYW5uZWQgYmVmb3JlaGFu ZCAtLSBpLmUuIGEgcHJlcGFyZWQKKwkgKiBzdGF0ZW1lbnQgLS0gdGhlIGFwcGxpY2F0aW9uIG9m IHF1ZXJ5IGFkdmljZSBtYXkgbm90IGhhdmUgYmVlbgorCSAqIHJlY29yZGVkLCBhbmQgdGhlcmVm b3JlIHRoaXMgd29uJ3QgYmUgYWJsZSB0byBzaG93IGFueXRoaW5nLiBVc2UKKwkgKiBwZ19wbGFu X2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSB0cnVlIHRvIHdvcmsgYXJvdW5k IHRoaXMuCisJICovCisJaWYgKHBncGFfbGlzdCAhPSBOVUxMICYmIChwZ19wbGFuX2FkdmljZV9h bHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UgfHwKKwkJCQkJCQkgIHNob3VsZF9leHBsYWlu KSkKKwl7CisJCURlZkVsZW0gICAgKmZlZWRiYWNrOworCisJCWZlZWRiYWNrID0gZmluZF9kZWZl bGVtX2J5X2RlZm5hbWUocGdwYV9saXN0LCAiZmVlZGJhY2siKTsKKwkJaWYgKGZlZWRiYWNrICE9 IE5VTEwpCisJCQlwZ19wbGFuX2FkdmljZV9leHBsYWluX2ZlZWRiYWNrKGVzLCAoTGlzdCAqKSBm ZWVkYmFjay0+YXJnKTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBQTEFOX0FEVklDRSBvcHRpb24g d2FzIHNwZWNpZmllZCAtLSBhbmQgbm90IHNlbnQgdG8gRkFMU0UgLS0KKwkgKiBzaG93IGdlbmVy YXRlZCBhZHZpY2UuCisJICovCisJaWYgKHNob3VsZF9leHBsYWluKQorCXsKKwkJRGVmRWxlbSAg ICAqYWR2aWNlX3N0cmluZ19pdGVtOworCQljaGFyCSAgICphZHZpY2Vfc3RyaW5nID0gTlVMTDsK KworCQlhZHZpY2Vfc3RyaW5nX2l0ZW0gPQorCQkJZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUocGdw YV9saXN0LCAiYWR2aWNlX3N0cmluZyIpOworCQlpZiAoYWR2aWNlX3N0cmluZ19pdGVtICE9IE5V TEwpCisJCXsKKwkJCWFkdmljZV9zdHJpbmcgPSBzdHJWYWwoYWR2aWNlX3N0cmluZ19pdGVtLT5h cmcpOworCQkJcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl90ZXh0X211bHRpbGluZShlcywgIkdlbmVy YXRlZCBQbGFuIEFkdmljZSIsCisJCQkJCQkJCQkJCQkgIGFkdmljZV9zdHJpbmcpOworCQl9CisJ fQorfQorCisvKgorICogQ2hlY2sgaG9vayBmb3IgcGdfcGxhbl9hZHZpY2UuYWR2aWNlCisgKi8K K3N0YXRpYyBib29sCitwZ19wbGFuX2FkdmljZV9hZHZpY2VfY2hlY2tfaG9vayhjaGFyICoqbmV3 dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCit7CisJTWVtb3J5Q29udGV4dCBv bGRjb250ZXh0OworCU1lbW9yeUNvbnRleHQgdG1wY29udGV4dDsKKwljaGFyCSAgICplcnJvcjsK KworCWlmICgqbmV3dmFsID09IE5VTEwpCisJCXJldHVybiB0cnVlOworCisJdG1wY29udGV4dCA9 IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCSAg ICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiLAorCQkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9T SVpFUyk7CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBjb250ZXh0KTsK KworCS8qCisJICogSXQgd291bGQgYmUgbmljZSB0byBzYXZlIHRoZSBwYXJzZSB0cmVlIHRoYXQg d2UgY29uc3RydWN0IGhlcmUgZm9yCisJICogZXZlbnR1YWwgdXNlIHdoZW4gcGxhbm5pbmcgd2l0 aCB0aGlzIGFkdmljZSwgYnV0ICpleHRyYSBjYW4gb25seSBwb2ludAorCSAqIHRvIGEgc2luZ2xl IGd1Y19tYWxsb2MnZCBjaHVuaywgYW5kIG91ciBwYXJzZSB0cmVlIGludm9sdmVzIGFuCisJICog YXJiaXRyYXJ5IG51bWJlciBvZiBtZW1vcnkgYWxsb2NhdGlvbnMuCisJICovCisJKHZvaWQpIHBn cGFfcGFyc2UoKm5ld3ZhbCwgJmVycm9yKTsKKworCWlmIChlcnJvciAhPSBOVUxMKQorCXsKKwkJ R1VDX2NoZWNrX2VycmRldGFpbCgiQ291bGQgbm90IHBhcnNlIGFkdmljZTogJXMiLCBlcnJvcik7 CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4 dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0bXBjb250ZXh0KTsKKworCXJldHVybiB0cnVlOwor fQorCisvKgorICogU2VhcmNoIGEgbGlzdCBvZiBEZWZFbGVtIG9iamVjdHMgZm9yIGEgZ2l2ZW4g ZGVmbmFtZS4KKyAqLworc3RhdGljIERlZkVsZW0gKgorZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUo TGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSkKK3sKKwlmb3JlYWNoX25vZGUoRGVmRWxlbSwg aXRlbSwgZGVmbGlzdCkKKwl7CisJCWlmIChzdHJjbXAoaXRlbS0+ZGVmbmFtZSwgZGVmbmFtZSkg PT0gMCkKKwkJCXJldHVybiBpdGVtOworCX0KKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jb250cm9sIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYTZmZGM5ZTdiMgotLS0gL2Rldi9udWxsCisrKyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbApAQCAtMCwwICsxLDUg QEAKKyMgcGdfcGxhbl9hZHZpY2UgZXh0ZW5zaW9uCitjb21tZW50ID0gJ2hlbHAgdGhlIHBsYW5u ZXIgZ2V0IHRoZSByaWdodCBwbGFuJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9w YXRobmFtZSA9ICckbGliZGlyL3BnX3BsYW5fYWR2aWNlJworcmVsb2NhdGFibGUgPSB0cnVlCmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmggYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmUyMDdmYzc4MGEzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIHBnX3BsYW5fYWR2aWNlLmgKKyAqCSAgbWFpbiBoZWFkZXIg ZmlsZSBmb3IgcGdfcGxhbl9hZHZpY2UgY29udHJpYiBtb2R1bGUKKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisg KgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaAorICoKKyAqLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHX1BMQU5fQURWSUNFX0gKKyNkZWZpbmUgUEdfUExB Tl9BRFZJQ0VfSAorCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5oIgorI2luY2x1 ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5j bHVkZSAidXRpbHMvZHNhLmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfc2hhcmVkX3N0YXRlCit7 CisJTFdMb2NrCQlsb2NrOworCWludAkJCWRzYV90cmFuY2hlOworCWRzYV9oYW5kbGUJYXJlYTsK Kwlkc2FfcG9pbnRlciBzaGFyZWRfY29sbGVjdG9yOworfSBwZ3BhX3NoYXJlZF9zdGF0ZTsKKwor LyogR1VDIHZhcmlhYmxlcyAqLworZXh0ZXJuIGNoYXIgKnBnX3BsYW5fYWR2aWNlX2FkdmljZTsK K2V4dGVybiBib29sIHBnX3BsYW5fYWR2aWNlX2Fsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlsczsK K2V4dGVybiBib29sIHBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3RvcjsKK2V4dGVybiBpbnQJ cGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdDsKK2V4dGVybiBib29sIHBnX3Bs YW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3I7CitleHRlcm4gaW50CXBnX3BsYW5fYWR2aWNlX3No YXJlZF9jb2xsZWN0aW9uX2xpbWl0OworZXh0ZXJuIGJvb2wgcGdfcGxhbl9hZHZpY2VfdHJhY2Vf bWFzazsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLworZXh0ZXJuIE1lbW9yeUNvbnRleHQg cGdfcGxhbl9hZHZpY2VfZ2V0X21jeHQodm9pZCk7CitleHRlcm4gcGdwYV9zaGFyZWRfc3RhdGUg KnBnX3BsYW5fYWR2aWNlX2F0dGFjaCh2b2lkKTsKK2V4dGVybiBkc2FfYXJlYSAqcGdfcGxhbl9h ZHZpY2VfZHNhX2FyZWEodm9pZCk7CitleHRlcm4gYm9vbCBwZ19wbGFuX2FkdmljZV9zaG91bGRf ZXhwbGFpbihFeHBsYWluU3RhdGUgKmVzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf YXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg1YmQ3NDg1OWRm Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jCkBA IC0wLDAgKzEsMzUxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX2FzdC5jCisg KgkgIGFkZGl0aW9uYWwgc3VwcG9ydGluZyBjb2RlIHJlbGF0ZWQgdG8gcGxhbiBhZHZpY2UgcGFy c2luZworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2Fz dC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgi CisKKyNpbmNsdWRlICJwZ3BhX2FzdC5oIgorCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1 ZGUgInV0aWxzL2FycmF5LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKworc3RhdGlj IGJvb2wgcGdwYV9pZGVudGlmaWVyc19jb3Zlcl90YXJnZXQoaW50IG5yaWRzLCBwZ3BhX2lkZW50 aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJ CQkJCQkJCQkgIGJvb2wgKnJpZHNfdXNlZCk7CisKKy8qCisgKiBHZXQgYSBDIHN0cmluZyB0aGF0 IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQgYWR2aWNlIHRhZy4KKyAqLworY2hhciAqCitw Z3BhX2NzdHJpbmdfYWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlwZSBhZHZpY2VfdGFnKQor eworCXN3aXRjaCAoYWR2aWNlX3RhZykKKwl7CisJCWNhc2UgUEdQQV9UQUdfQklUTUFQX0hFQVBf U0NBTjoKKwkJCXJldHVybiAiQklUTUFQX0hFQVBfU0NBTiI7CisJCWNhc2UgUEdQQV9UQUdfRk9S RUlHTl9KT0lOOgorCQkJcmV0dXJuICJGT1JFSUdOX0pPSU4iOworCQljYXNlIFBHUEFfVEFHX0dB VEhFUjoKKwkJCXJldHVybiAiR0FUSEVSIjsKKwkJY2FzZSBQR1BBX1RBR19HQVRIRVJfTUVSR0U6 CisJCQlyZXR1cm4gIkdBVEhFUl9NRVJHRSI7CisJCWNhc2UgUEdQQV9UQUdfSEFTSF9KT0lOOgor CQkJcmV0dXJuICJIQVNIX0pPSU4iOworCQljYXNlIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjoK KwkJCXJldHVybiAiSU5ERVhfT05MWV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19JTkRFWF9TQ0FO OgorCQkJcmV0dXJuICJJTkRFWF9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19KT0lOX09SREVSOgor CQkJcmV0dXJuICJKT0lOX09SREVSIjsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX01BVEVS SUFMSVpFOgorCQkJcmV0dXJuICJNRVJHRV9KT0lOX01BVEVSSUFMSVpFIjsKKwkJY2FzZSBQR1BB X1RBR19NRVJHRV9KT0lOX1BMQUlOOgorCQkJcmV0dXJuICJNRVJHRV9KT0lOX1BMQUlOIjsKKwkJ Y2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiAiTkVTVEVE X0xPT1BfTUFURVJJQUxJWkUiOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU6 CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX01FTU9JWkUiOworCQljYXNlIFBHUEFfVEFHX05FU1RF RF9MT09QX1BMQUlOOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9QTEFJTiI7CisJCWNhc2UgUEdQ QV9UQUdfTk9fR0FUSEVSOgorCQkJcmV0dXJuICJOT19HQVRIRVIiOworCQljYXNlIFBHUEFfVEFH X1BBUlRJVElPTldJU0U6CisJCQlyZXR1cm4gIlBBUlRJVElPTldJU0UiOworCQljYXNlIFBHUEFf VEFHX1NFTUlKT0lOX05PTl9VTklRVUU6CisJCQlyZXR1cm4gIlNFTUlKT0lOX05PTl9VTklRVUUi OworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRToKKwkJCXJldHVybiAiU0VNSUpPSU5f VU5JUVVFIjsKKwkJY2FzZSBQR1BBX1RBR19TRVFfU0NBTjoKKwkJCXJldHVybiAiU0VRX1NDQU4i OworCQljYXNlIFBHUEFfVEFHX1RJRF9TQ0FOOgorCQkJcmV0dXJuICJUSURfU0NBTiI7CisJfQor CisJcGdfdW5yZWFjaGFibGUoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIENvbnZlcnQg YW4gYWR2aWNlIHRhZywgZm9ybWF0dGVkIGFzIGEgc3RyaW5nIHRoYXQgaGFzIGFscmVhZHkgYmVl bgorICogZG93bmNhc2VkIGFzIGFwcHJvcHJpYXRlLCB0byBhIHBncGFfYWR2aWNlX3RhZ190eXBl LgorICoKKyAqIElmIHdlIHN1Y2NlZWQsIHNldCAqZmFpbCA9IGZhbHNlIGFuZCByZXR1cm4gdGhl IHJlc3VsdDsgaWYgd2UgZmFpbCwKKyAqIHNldCAqZmFpbCA9IHRydWUgYW5kIHJldXJuIGFuIGFy Yml0cmFyeSB2YWx1ZS4KKyAqLworcGdwYV9hZHZpY2VfdGFnX3R5cGUKK3BncGFfcGFyc2VfYWR2 aWNlX3RhZyhjb25zdCBjaGFyICp0YWcsIGJvb2wgKmZhaWwpCit7CisJKmZhaWwgPSBmYWxzZTsK KworCXN3aXRjaCAodGFnWzBdKQorCXsKKwkJY2FzZSAnYic6CisJCQlpZiAoc3RyY21wKHRhZywg ImJpdG1hcF9oZWFwX3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19CSVRNQVBfSEVB UF9TQ0FOOworCQkJYnJlYWs7CisJCWNhc2UgJ2YnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJmb3Jl aWduX2pvaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19GT1JFSUdOX0pPSU47CisJCQli cmVhazsKKwkJY2FzZSAnZyc6CisJCQlpZiAoc3RyY21wKHRhZywgImdhdGhlciIpID09IDApCisJ CQkJcmV0dXJuIFBHUEFfVEFHX0dBVEhFUjsKKwkJCWlmIChzdHJjbXAodGFnLCAiZ2F0aGVyX21l cmdlIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfR0FUSEVSX01FUkdFOworCQkJYnJlYWs7 CisJCWNhc2UgJ2gnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJoYXNoX2pvaW4iKSA9PSAwKQorCQkJ CXJldHVybiBQR1BBX1RBR19IQVNIX0pPSU47CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJCQlp ZiAoc3RyY21wKHRhZywgImluZGV4X3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19J TkRFWF9TQ0FOOworCQkJaWYgKHN0cmNtcCh0YWcsICJpbmRleF9vbmx5X3NjYW4iKSA9PSAwKQor CQkJCXJldHVybiBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU47CisJCQlicmVhazsKKwkJY2FzZSAn aic6CisJCQlpZiAoc3RyY21wKHRhZywgImpvaW5fb3JkZXIiKSA9PSAwKQorCQkJCXJldHVybiBQ R1BBX1RBR19KT0lOX09SREVSOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJaWYgKHN0cmNt cCh0YWcsICJtZXJnZV9qb2luX21hdGVyaWFsaXplIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9U QUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRTsKKwkJCWlmIChzdHJjbXAodGFnLCAibWVyZ2Vfam9p bl9wbGFpbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU47CisJ CQlicmVhazsKKwkJY2FzZSAnbic6CisJCQlpZiAoc3RyY21wKHRhZywgIm5lc3RlZF9sb29wX21h dGVyaWFsaXplIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJ QUxJWkU7CisJCQlpZiAoc3RyY21wKHRhZywgIm5lc3RlZF9sb29wX21lbW9pemUiKSA9PSAwKQor CQkJCXJldHVybiBQR1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpFOworCQkJaWYgKHN0cmNtcCh0 YWcsICJuZXN0ZWRfbG9vcF9wbGFpbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX05FU1RF RF9MT09QX1BMQUlOOworCQkJaWYgKHN0cmNtcCh0YWcsICJub19nYXRoZXIiKSA9PSAwKQorCQkJ CXJldHVybiBQR1BBX1RBR19OT19HQVRIRVI7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQlp ZiAoc3RyY21wKHRhZywgInBhcnRpdGlvbndpc2UiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RB R19QQVJUSVRJT05XSVNFOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJaWYgKHN0cmNtcCh0 YWcsICJzZW1pam9pbl9ub25fdW5pcXVlIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfU0VN SUpPSU5fTk9OX1VOSVFVRTsKKwkJCWlmIChzdHJjbXAodGFnLCAic2VtaWpvaW5fdW5pcXVlIikg PT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFOworCQkJaWYgKHN0cmNt cCh0YWcsICJzZXFfc2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1NFUV9TQ0FOOwor CQkJYnJlYWs7CisJCWNhc2UgJ3QnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJ0aWRfc2NhbiIpID09 IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1RJRF9TQ0FOOworCQkJYnJlYWs7CisJfQorCisJLyog ZGlkbid0IHdvcmsgb3V0ICovCisJKmZhaWwgPSB0cnVlOworCisJLyogcmV0dXJuIGFuIGFyYml0 cmFyeSB2YWx1ZSB0byB1bndpbmQgdGhlIGNhbGwgc3RhY2sgKi8KKwlyZXR1cm4gUEdQQV9UQUdf U0VRX1NDQU47Cit9CisKKy8qCisgKiBGb3JtYXQgYSBwZ3BhX2FkdmljZV90YXJnZXQgYXMgYSBz dHJpbmcgYW5kIGFwcGVuZCByZXN1bHQgdG8gYSBTdHJpbmdJbmZvLgorICovCit2b2lkCitwZ3Bh X2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KFN0cmluZ0luZm8gc3RyLCBwZ3BhX2FkdmljZV90YXJnZXQg KnRhcmdldCkKK3sKKwlpZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9JREVOVElGSUVS KQorCXsKKwkJYm9vbAkJZmlyc3QgPSB0cnVlOworCQljaGFyCSAgICpkZWxpbXM7CisKKwkJaWYg KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfVU5PUkRFUkVEX0xJU1QpCisJCQlkZWxpbXMg PSAie30iOworCQllbHNlCisJCQlkZWxpbXMgPSAiKCkiOworCisJCWFwcGVuZFN0cmluZ0luZm9D aGFyKHN0ciwgZGVsaW1zWzBdKTsKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBj aGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCWlmIChmaXJzdCkKKwkJCQlm aXJzdCA9IGZhbHNlOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0ciwgJyAn KTsKKwkJCXBncGFfZm9ybWF0X2FkdmljZV90YXJnZXQoc3RyLCBjaGlsZF90YXJnZXQpOworCQl9 CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0ciwgZGVsaW1zWzFdKTsKKwl9CisJZWxzZQorCXsK KwkJY29uc3QgY2hhciAqcnRfaWRlbnRpZmllcjsKKworCQlydF9pZGVudGlmaWVyID0gcGdwYV9p ZGVudGlmaWVyX3N0cmluZygmdGFyZ2V0LT5yaWQpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KHN0ciwgcnRfaWRlbnRpZmllcik7CisJfQorfQorCisvKgorICogRm9ybWF0IGEgcGdwYV9pbmRl eF90YXJnZXQgYXMgYSBzdHJpbmcgYW5kIGFwcGVuZCByZXN1bHQgdG8gYSBTdHJpbmdJbmZvLgor ICovCit2b2lkCitwZ3BhX2Zvcm1hdF9pbmRleF90YXJnZXQoU3RyaW5nSW5mbyBzdHIsIHBncGFf aW5kZXhfdGFyZ2V0ICppdGFyZ2V0KQoreworCWlmIChpdGFyZ2V0LT5pbmRuYW1lc3BhY2UgIT0g TlVMTCkKKwkJYXBwZW5kU3RyaW5nSW5mbyhzdHIsICIlcy4iLAorCQkJCQkJIHF1b3RlX2lkZW50 aWZpZXIoaXRhcmdldC0+aW5kbmFtZXNwYWNlKSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhz dHIsIHF1b3RlX2lkZW50aWZpZXIoaXRhcmdldC0+aW5kbmFtZSkpOworfQorCisvKgorICogRGV0 ZXJtaW5lIHdoZXRoZXIgdHdvIHBncGFfaW5kZXhfdGFyZ2V0IG9iamVjdHMgYXJlIGV4YWN0bHkg aWRlbnRpY2FsLgorICovCitib29sCitwZ3BhX2luZGV4X3RhcmdldHNfZXF1YWwocGdwYV9pbmRl eF90YXJnZXQgKmkxLCBwZ3BhX2luZGV4X3RhcmdldCAqaTIpCit7CisJLyogaW5kbmFtZXNwYWNl IGNhbiBiZSBOVUxMLCBhbmQgdHdvIE5VTEwgdmFsdWVzIGFyZSBlcXVhbCAqLworCWlmICgoaTEt PmluZG5hbWVzcGFjZSAhPSBOVUxMIHx8IGkyLT5pbmRuYW1lc3BhY2UgIT0gTlVMTCkgJiYKKwkJ KGkxLT5pbmRuYW1lc3BhY2UgPT0gTlVMTCB8fCBpMi0+aW5kbmFtZXNwYWNlID09IE5VTEwgfHwK KwkJIHN0cmNtcChpMS0+aW5kbmFtZXNwYWNlLCBpMi0+aW5kbmFtZXNwYWNlKSAhPSAwKSkKKwkJ cmV0dXJuIGZhbHNlOworCWlmIChzdHJjbXAoaTEtPmluZG5hbWUsIGkyLT5pbmRuYW1lKSAhPSAw KQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIENoZWNrIHdo ZXRoZXIgYW4gaWRlbnRpZmllciBtYXRjaGVzIGFuIGFueSBwYXJ0IG9mIGFuIGFkdmljZSB0YXJn ZXQuCisgKi8KK2Jvb2wKK3BncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChwZ3BhX2lkZW50 aWZpZXIgKnJpZCwgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJLyogRm9yIG5vbi1p ZGVudGlmaWVycywgY2hlY2sgYWxsIGRlc2NlbmRlbnRzLiAqLworCWlmICh0YXJnZXQtPnR0eXBl ICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX2Fkdmlj ZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYgKHBn cGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChyaWQsIGNoaWxkX3RhcmdldCkpCisJCQkJcmV0 dXJuIHRydWU7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIFN0cmFpZ2h0Zm9yd2Fy ZCBjb21wYXJpc29ucyBvZiBhbGlhcyBuYW1lIGFuZCBvY2NjdXJyZW5jZSBudW1iZXIuICovCisJ aWYgKHN0cmNtcChyaWQtPmFsaWFzX25hbWUsIHRhcmdldC0+cmlkLmFsaWFzX25hbWUpICE9IDAp CisJCXJldHVybiBmYWxzZTsKKwlpZiAocmlkLT5vY2N1cnJlbmNlICE9IHRhcmdldC0+cmlkLm9j Y3VycmVuY2UpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogSWYgYSByZWxhdGlvbiBpZGVu dGlmZXIgbWVudGlvbnMgYSBwYXJ0aXRpb24gbmFtZSwgaXQgc2hvdWxkIGFsc28KKwkgKiBzcGVj aWZ5IGEgcGFydGl0aW9uIHNjaGVtYS4gQnV0IHRoZSB0YXJnZXQgbWF5IGxlYXZlIHRoZSBzY2hl bWEgTlVMTCB0bworCSAqIG1hdGNoIGFueXRoaW5nLgorCSAqLworCUFzc2VydChyaWQtPnBhcnRu c3AgIT0gTlVMTCB8fCByaWQtPnBhcnRyZWwgPT0gTlVMTCk7CisJaWYgKHJpZC0+cGFydG5zcCAh PSBOVUxMICYmIHRhcmdldC0+cmlkLnBhcnRuc3AgIT0gTlVMTCAmJgorCQlzdHJjbXAocmlkLT5w YXJ0bnNwLCB0YXJnZXQtPnJpZC5wYXJ0bnNwKSAhPSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwkv KgorCSAqIFRoZXNlIGZpZWxkcyBjYW4gYmUgTlVMTCBvbiBlaXRoZXIgc2lkZSwgYnV0IE5VTEwg b25seSBtYXRjaGVzIGFub3RoZXIKKwkgKiBOVUxMLgorCSAqLworCWlmICghc3RyaW5nc19lcXVh bF9vcl9ib3RoX251bGwocmlkLT5wYXJ0cmVsLCB0YXJnZXQtPnJpZC5wYXJ0cmVsKSkKKwkJcmV0 dXJuIGZhbHNlOworCWlmICghc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlkLT5wbGFuX25h bWUsIHRhcmdldC0+cmlkLnBsYW5fbmFtZSkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0 cnVlOworfQorCisvKgorICogTWF0Y2ggaWRlbnRpZmllcnMgdG8gYWR2aWNlIHRhcmdldHMgYW5k IHJldHVybiBhbiBlbnVtIHZhbHVlIGluZGljYXRpbmcKKyAqIHRoZSByZWxhdGlvbnNoaXAgYmV0 d2VlbiB0aGUgc2V0IG9mIGtleXMgYW5kIHRoZSBzZXQgb2YgdGFyZ2V0cy4KKyAqCisgKiBTZWUg dGhlIGNvbW1lbnRzIGZvciBwZ3BhX2l0bV90eXBlLgorICovCitwZ3BhX2l0bV90eXBlCitwZ3Bh X2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAqcmlk cywKKwkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQoreworCWJvb2wJCWFsbF9y aWRzX3VzZWQgPSB0cnVlOworCWJvb2wJCWFueV9yaWRzX3VzZWQgPSBmYWxzZTsKKwlib29sCQlh bGxfdGFyZ2V0c191c2VkOworCWJvb2wJICAgKnJpZHNfdXNlZCA9IHBhbGxvYzBfYXJyYXkoYm9v bCwgbnJpZHMpOworCisJYWxsX3RhcmdldHNfdXNlZCA9CisJCXBncGFfaWRlbnRpZmllcnNfY292 ZXJfdGFyZ2V0KG5yaWRzLCByaWRzLCB0YXJnZXQsIHJpZHNfdXNlZCk7CisKKwlmb3IgKGludCBp ID0gMDsgaSA8IG5yaWRzOyArK2kpCisJeworCQlpZiAocmlkc191c2VkW2ldKQorCQkJYW55X3Jp ZHNfdXNlZCA9IHRydWU7CisJCWVsc2UKKwkJCWFsbF9yaWRzX3VzZWQgPSBmYWxzZTsKKwl9CisK KwlpZiAoYWxsX3JpZHNfdXNlZCkKKwl7CisJCWlmIChhbGxfdGFyZ2V0c191c2VkKQorCQkJcmV0 dXJuIFBHUEFfSVRNX0VRVUFMOworCQllbHNlCisJCQlyZXR1cm4gUEdQQV9JVE1fS0VZU19BUkVf U1VCU0VUOworCX0KKwllbHNlCisJeworCQlpZiAoYWxsX3RhcmdldHNfdXNlZCkKKwkJCXJldHVy biBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQ7CisJCWVsc2UgaWYgKGFueV9yaWRzX3VzZWQp CisJCQlyZXR1cm4gUEdQQV9JVE1fSU5URVJTRUNUSU5HOworCQllbHNlCisJCQlyZXR1cm4gUEdQ QV9JVE1fRElTSk9JTlQ7CisJfQorfQorCisvKgorICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IHRh cmdldCBvciBzdWItdGFyZ2V0IGlzIG1hdGNoZWQgYnkgYXQgbGVhc3Qgb25lCisgKiBpZGVudGlm aWVyLCBhbmQgb3RoZXJ3aXNlIGZhbHNlLgorICoKKyAqIEFsc28gc2V0cyByaWRzX3VzZWRbaV0g PSB0cnVlIGZvciBlYWNoIGlkZW5pZmllciB0aGF0IG1hdGNoZXMgYXQgbGVhc3Qgb25lCisgKiB0 YXJnZXQuCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChp bnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfYWR2aWNlX3Rh cmdldCAqdGFyZ2V0LCBib29sICpyaWRzX3VzZWQpCit7CisJYm9vbAkJcmVzdWx0ID0gZmFsc2U7 CisKKwlpZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJ cmVzdWx0ID0gdHJ1ZTsKKworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxk X3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYgKCFwZ3BhX2lkZW50aWZpZXJz X2NvdmVyX3RhcmdldChucmlkcywgcmlkcywgY2hpbGRfdGFyZ2V0LAorCQkJCQkJCQkJCQkgICBy aWRzX3VzZWQpKQorCQkJCXJlc3VsdCA9IGZhbHNlOworCQl9CisJfQorCWVsc2UKKwl7CisJCWZv ciAoaW50IGkgPSAwOyBpIDwgbnJpZHM7ICsraSkKKwkJeworCQkJaWYgKHBncGFfaWRlbnRpZmll cl9tYXRjaGVzX3RhcmdldCgmcmlkc1tpXSwgdGFyZ2V0KSkKKwkJCXsKKwkJCQlyaWRzX3VzZWRb aV0gPSB0cnVlOworCQkJCXJlc3VsdCA9IHRydWU7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4g cmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5o IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi44NmRlOGVmNGZkZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaApAQCAtMCwwICsxLDE4NiBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogcGdwYV9hc3QuaAorICoJICBhYnN0cmFjdCBzeW50YXggdHJlZXMg Zm9yIHBsYW4gYWR2aWNlLCBwbHVzIHBhcnNlci9zY2FubmVyIHN1cHBvcnQKKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaAorICoKKyAqLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfQVNUX0gKKyNkZWZpbmUgUEdQQV9BU1RfSAor CisjaW5jbHVkZSAicGdwYV9pZGVudGlmaWVyLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wZ19saXN0 LmgiCisKKy8qCisgKiBBZHZpY2UgaXRlbXMgZ2VuZXJhbGx5IHRha2UgdGhlIGZvcm0gU09NRV9U QUcoaXRlbSBbLi4uXSksIHdoZXJlIGFuIGl0ZW0KKyAqIGNhbiB0YWtlIHZhcmlvdXMgZm9ybXMu IFRoZSBzaW1wbGVzdCBjYXNlIGlzIGEgcmVsYXRpb24gaWRlbnRpZmllciwgYnV0CisgKiBzb21l IHRhZ3MgYWxsb3cgc3VibGlzdHMsIGFuZCBKT0lOX09SREVSKCkgYWxsb3dzIGJvdGggb3JkZXJl ZCBhbmQgdW5vcmRlcmVkCisgKiBzdWJsaXN0cy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJUEdQ QV9UQVJHRVRfSURFTlRJRklFUiwJCS8qIHJlbGF0aW9uIGlkZW50aWZpZXIgKi8KKwlQR1BBX1RB UkdFVF9PUkRFUkVEX0xJU1QsCS8qIChpdGVtIC4uLikgKi8KKwlQR1BBX1RBUkdFVF9VTk9SREVS RURfTElTVAkvKiB7aXRlbSAuLi59ICovCit9IHBncGFfdGFyZ2V0X3R5cGU7CisKKy8qCisgKiBB biBpbmRleCBzcGVjaWZpY2F0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2luZGV4X3Rh cmdldAoreworCS8qIEluZGV4IHNjaGVtYSBhbmQgbmFtZSAqLworCWNoYXIJICAgKmluZG5hbWVz cGFjZTsKKwljaGFyCSAgICppbmRuYW1lOworfSBwZ3BhX2luZGV4X3RhcmdldDsKKworLyoKKyAq IEEgc2luZ2xlIGl0ZW0gYWJvdXQgd2hpY2ggYWR2aWNlIGlzIGJlaW5nIGdpdmVuLCB3aGljaCBj b3VsZCBiZSBlaXRoZXIKKyAqIGEgcmVsYXRpb24gaWRlbnRpZmllciB0aGF0IHdlIHdhbnQgdG8g YnJlYWsgb3V0IGludG8gaXRzIGNvbnN0aXR1ZW50IGZpZWxkcywKKyAqIG9yIGEgc3VibGlzdCBv ZiBzb21lIGtpbmQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfYWR2aWNlX3RhcmdldAorewor CXBncGFfdGFyZ2V0X3R5cGUgdHR5cGU7CisKKwkvKgorCSAqIFRoaXMgZmllbGQgaXMgbWVhbmlu Z2Z1bCB3aGVuIHR0eXBlIGlzIFBHUEFfVEFSR0VUX0lERU5USUZJRVIuCisJICoKKwkgKiBBbGwg aWRlbnRpZmllcnMgbXVzdCBoYXZlIGFuIGFsaWFzIG5hbWUgYW5kIGFuIG9jY3VycmVuY2UgbnVt YmVyOyB0aGUKKwkgKiByZW1haW5pbmcgZmllbGRzIGNhbiBiZSBOVUxMLiBOb3RlIHRoYXQgaXQn cyBwb3NzaWJsZSB0byBzcGVjaWZ5IGEKKwkgKiBwYXJ0aXRpb24gbmFtZSB3aXRob3V0IGEgcGFy dGl0aW9uIHNjaGVtYSwgYnV0IG5vdCB0aGUgcmV2ZXJzZS4KKwkgKi8KKwlwZ3BhX2lkZW50aWZp ZXIgcmlkOworCisJLyoKKwkgKiBUaGlzIGZpZWxkIGlzIHNldCB3aGVuIHR0eXBlIGlzIFBQR0Ff VEFSR0VUX0lERU5USUZJRVIgYW5kIHRoZSBhZHZpY2UKKwkgKiB0YWcgaXMgUEdQQV9UQUdfSU5E RVhfU0NBTiwgUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOLCBvcgorCSAqIFBHUEFfVEFHX0JJVE1B UF9IRUFQX1NDQU4uCisJICovCisJcGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQ7CisKKwkvKgor CSAqIFdoZW4gdGhlIHR0eXBlIGlzIFBHUEFfVEFSR0VUXzxhbnl0aGluZz5fTElTVCwgdGhpcyBm aWVsZCBjb250YWlucyBhCisJICogbGlzdCBvZiBhZGRpdGlvbmFsIHBncGFfYWR2aWNlX3Rhcmdl dCBvYmplY3RzLiBPdGhlcndpc2UsIGl0IGlzIHVudXNlZC4KKwkgKi8KKwlMaXN0CSAgICpjaGls ZHJlbjsKK30gcGdwYV9hZHZpY2VfdGFyZ2V0OworCisvKgorICogVGhlc2UgYXJlIGFsbCB0aGUg a2luZHMgb2YgYWR2aWNlIHRoYXQgd2Uga25vdyBob3cgdG8gcGFyc2UuIElmIGEga2V5d29yZAor ICogaXMgZm91bmQgYXQgdGhlIHRvcCBsZXZlbCwgaXQgbXVzdCBiZSBpbiB0aGlzIGxpc3QuCisg KgorICogSWYgeW91IGNoYW5nZSBhbnl0aGluZyBoZXJlLCBhbHNvIHVwZGF0ZSBwZ3BhX3BhcnNl X2FkdmljZV90YWcgYW5kCisgKiBwZ3BhX2NzdHJpbmdfYWR2aWNlX3RhZy4KKyAqLwordHlwZWRl ZiBlbnVtIHBncGFfYWR2aWNlX3RhZ190eXBlCit7CisJUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NB TiwKKwlQR1BBX1RBR19GT1JFSUdOX0pPSU4sCisJUEdQQV9UQUdfR0FUSEVSLAorCVBHUEFfVEFH X0dBVEhFUl9NRVJHRSwKKwlQR1BBX1RBR19IQVNIX0pPSU4sCisJUEdQQV9UQUdfSU5ERVhfT05M WV9TQ0FOLAorCVBHUEFfVEFHX0lOREVYX1NDQU4sCisJUEdQQV9UQUdfSk9JTl9PUkRFUiwKKwlQ R1BBX1RBR19NRVJHRV9KT0lOX01BVEVSSUFMSVpFLAorCVBHUEFfVEFHX01FUkdFX0pPSU5fUExB SU4sCisJUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUsCisJUEdQQV9UQUdfTkVTVEVE X0xPT1BfTUVNT0laRSwKKwlQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTiwKKwlQR1BBX1RBR19O T19HQVRIRVIsCisJUEdQQV9UQUdfUEFSVElUSU9OV0lTRSwKKwlQR1BBX1RBR19TRU1JSk9JTl9O T05fVU5JUVVFLAorCVBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRSwKKwlQR1BBX1RBR19TRVFfU0NB TiwKKwlQR1BBX1RBR19USURfU0NBTgorfSBwZ3BhX2FkdmljZV90YWdfdHlwZTsKKworLyoKKyAq IEFuIGl0ZW0gb2YgYWR2aWNlLCBtZWFuaW5nIGEgdGFnIGFuZCB0aGUgbGlzdCBvZiBhbGwgdGFy Z2V0cyB0byB3aGljaAorICogaXQgaXMgYmVpbmcgYXBwbGllZC4KKyAqCisgKiAidGFyZ2V0cyIg aXMgYSBsaXN0IG9mIHBncGFfYWR2aWNlX3RhcmdldCBvYmplY3RzLgorICoKKyAqIFRoZSBMaXN0 IHJldHVybmVkIGZyb20gcGdwYV95eXBhcnNlIGlzIGxpc3Qgb2YgcGdwYV9hZHZpY2VfaXRlbSBv YmplY3RzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2FkdmljZV9pdGVtCit7CisJcGdwYV9h ZHZpY2VfdGFnX3R5cGUgdGFnOworCUxpc3QJICAgKnRhcmdldHM7Cit9IHBncGFfYWR2aWNlX2l0 ZW07CisKKy8qCisgKiBSZXN1bHQgb2YgY29tcGFyaW5nIGFuIGFycmF5IG9mIHBncGFfcmVsYXRp b25faWRlbnRpZmllciBvYmplY3RzIHRvIGEKKyAqIHBncGFfYWR2aWNlX3RhcmdldC4KKyAqCisg KiBQR1BBX0lUTV9FUVVBTCBtZWFucyBhbGwgdGFyZ2V0cyBhcmUgbWF0Y2hlZCBieSBzb21lIGlk ZW50aWZpZXIsIGFuZAorICogYWxsIGlkZW50aWZpZXJzIHdlcmUgbWF0Y2hlZCB0byBhIHRhcmdl dC4KKyAqCisgKiBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQgbWVhbnMgdGhhdCBhbGwgaWRlbnRp ZmllcnMgbWF0Y2hlZCB0byBhIHRhcmdldCwKKyAqIGJ1dCB0aGVyZSB3ZXJlIGxlZnRvdmVyIHRh cmdldHMuIEdlbmVyYWxseSwgdGhpcyBtZWFucyB0aGF0IHRoZSBhZHZpY2UgaXMKKyAqIGxvb2tp bmcgdG8gYXBwbHkgdG8gYWxsIG9mIHRoZSByZWxzIHdlIGhhdmUgcGx1cyBzb21lIGFkZGl0aW9u YWwgb25lcyB0aGF0CisgKiB3ZSBkb24ndCBoYXZlLgorICoKKyAqIFBHUEFfSVRNX1RBUkdFVFNf QVJFX1NVQlNFVCBtZWFucyB0aGF0IGFsbCB0YXJnZXRzIGFyZSBtYXRjaGVkIGJ5IGFuCisgKiBp ZGVudGlmaWVycywgYnV0IHRoZXJlIHdlcmUgbGVmdG92ZXIgaWRlbnRpZmllcnMuIEdlbmVyYWxs eSwgdGhpcyBtZWFucworICogdGhhdCB0aGUgYWR2aWNlIGlzIGxvb2tpbmcgdG8gYXBwbHkgdG8g c29tZSBidXQgbm90IGFsbCBvZiB0aGUgcmVscyB3ZSBoYXZlLgorICoKKyAqIFBHUEFfSVRNX0lO VEVSU0VDVElORyBtZWFucyB0aGF0IHNvbWUgaWRlbnRpZmVpcnMgYW5kIHRhcmdldHMgd2VyZSBt YXRjaGVkLAorICogYnV0IG5laXRoZXIgYWxsIGlkZW50aWZpZXJzIG5vciBhbGwgdGFyZ2V0cyBj b3VsZCBiZSBtYXRjaGVkIHRvIGl0ZW1zIGluCisgKiB0aGUgb3RoZXIgc2V0LgorICoKKyAqIFBH UEFfSVRNX0RJU0pPSU5UIG1lYW5zIHRoYXQgbm8gbWF0Y2hlcyBiZXR3ZWVuIGlkZW50aWZlaXJz IGFuZCB0YXJnZXRzIHdlcmUKKyAqIGZvdW5kLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlQR1BB X0lUTV9FUVVBTCwKKwlQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQsCisJUEdQQV9JVE1fVEFSR0VU U19BUkVfU1VCU0VULAorCVBHUEFfSVRNX0lOVEVSU0VDVElORywKKwlQR1BBX0lUTV9ESVNKT0lO VAorfSBwZ3BhX2l0bV90eXBlOworCisvKiBmb3IgcGdwYV9zY2FubmVyLmwgYW5kIHBncGFfcGFy c2VyLnkgKi8KK3VuaW9uIFlZU1RZUEU7CisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9U CisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCit0eXBlZGVmIHZvaWQgKnl5c2Nhbl90 OworI2VuZGlmCisKKy8qIGluIHBncGFfc2Nhbm5lci5sICovCitleHRlcm4gaW50CXBncGFfeXls ZXgodW5pb24gWVlTVFlQRSAqeXlsdmFsX3BhcmFtLCBMaXN0ICoqcmVzdWx0LAorCQkJCQkgICBj aGFyICoqcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CitleHRlcm4gdm9p ZCBwZ3BhX3l5ZXJyb3IoTGlzdCAqKnJlc3VsdCwgY2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLAor CQkJCQkJIHl5c2Nhbl90IHl5c2Nhbm5lciwKKwkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKTsK K2V4dGVybiB2b2lkIHBncGFfc2Nhbm5lcl9pbml0KGNvbnN0IGNoYXIgKnN0ciwgeXlzY2FuX3Qg Knl5c2Nhbm5lcnApOworZXh0ZXJuIHZvaWQgcGdwYV9zY2FubmVyX2ZpbmlzaCh5eXNjYW5fdCB5 eXNjYW5uZXIpOworCisvKiBpbiBwZ3BhX3BhcnNlci55ICovCitleHRlcm4gaW50CXBncGFfeXlw YXJzZShMaXN0ICoqcmVzdWx0LCBjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3AsCisJCQkJCQkgeXlz Y2FuX3QgeXlzY2FubmVyKTsKK2V4dGVybiBMaXN0ICpwZ3BhX3BhcnNlKGNvbnN0IGNoYXIgKmFk dmljZV9zdHJpbmcsIGNoYXIgKiplcnJvcl9wKTsKKworLyogaW4gcGdwYV9hc3QuYyAqLworZXh0 ZXJuIGNoYXIgKnBncGFfY3N0cmluZ19hZHZpY2VfdGFnKHBncGFfYWR2aWNlX3RhZ190eXBlIGFk dmljZV90YWcpOworZXh0ZXJuIGJvb2wgcGdwYV9pZGVudGlmaWVyX21hdGNoZXNfdGFyZ2V0KHBn cGFfaWRlbnRpZmllciAqcmlkLAorCQkJCQkJCQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFy Z2V0KTsKK2V4dGVybiBwZ3BhX2l0bV90eXBlIHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0 KGludCBucmlkcywKKwkJCQkJCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJ CQkJCQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKK2V4dGVybiBib29sIHBncGFf aW5kZXhfdGFyZ2V0c19lcXVhbChwZ3BhX2luZGV4X3RhcmdldCAqaTEsCisJCQkJCQkJCQkgcGdw YV9pbmRleF90YXJnZXQgKmkyKTsKK2V4dGVybiBwZ3BhX2FkdmljZV90YWdfdHlwZSBwZ3BhX3Bh cnNlX2FkdmljZV90YWcoY29uc3QgY2hhciAqdGFnLCBib29sICpmYWlsKTsKK2V4dGVybiB2b2lk IHBncGFfZm9ybWF0X2FkdmljZV90YXJnZXQoU3RyaW5nSW5mbyBzdHIsCisJCQkJCQkJCQkgIHBn cGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKK2V4dGVybiB2b2lkIHBncGFfZm9ybWF0X2luZGV4 X3RhcmdldChTdHJpbmdJbmZvIHN0ciwKKwkJCQkJCQkJCSBwZ3BhX2luZGV4X3RhcmdldCAqaXRh cmdldCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X2NvbGxlY3Rvci5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMGIwZDdlMTU5NAotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYwpAQCAt MCwwICsxLDYzOSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9jb2xsZWN0b3Iu YworICoJICBjb2xsZWN0IGFkdmljZSBpbnRvIGJhY2tlbmQtbG9jYWwgb3Igc2hhcmVkIG1lbW9y eQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxl Y3Rvci5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVz LmgiCisKKyNpbmNsdWRlICJwZ19wbGFuX2FkdmljZS5oIgorI2luY2x1ZGUgInBncGFfY29sbGVj dG9yLmgiCisKKyNpbmNsdWRlICJkYXRhdHlwZS90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJmdW5j YXBpLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5o IgorI2luY2x1ZGUgInV0aWxzL2FjbC5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisj aW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCisKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfY2xl YXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2NsZWFy X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfZ2V0X2Nv bGxlY3RlZF9sb2NhbF9hZHZpY2UpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19nZXRfY29sbGVj dGVkX3NoYXJlZF9hZHZpY2UpOworCisjZGVmaW5lIEFEVklDRV9DSFVOS19TSVpFCQkxMDI0Cisj ZGVmaW5lIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFCTY0CisKKyNkZWZpbmUJUEdfR0VUX0FEVklD RV9DT0xVTU5TCTcKKworLyoKKyAqIEFkdmljZSBleHRyYWN0ZWQgZnJvbSBvbmUgcXVlcnkgcGxh biwgdG9nZXRoZXIgd2l0aCB0aGUgcXVlcnkgc3RyaW5nCisgKiBhbmQgdmFyaW91cyBvdGhlciBp ZGVudGlmeWluZyBkZXRhaWxzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2NvbGxlY3RlZF9h ZHZpY2UKK3sKKwlPaWQJCQl1c2VyaWQ7CQkJLyogdXNlciBPSUQgKi8KKwlPaWQJCQlkYmlkOwkJ CS8qIGRhdGFiYXNlIE9JRCAqLworCXVpbnQ2NAkJcXVlcnlpZDsJCS8qIHF1ZXJ5IGlkZW50aWZp ZXIgKi8KKwlUaW1lc3RhbXBUeiB0aW1lc3RhbXA7CQkvKiBxdWVyeSB0aW1lc3RhbXAgKi8KKwlp bnQJCQlhZHZpY2Vfb2Zmc2V0OwkvKiBzdGFydCBvZiBhZHZpY2UgaW4gdGV4dHVhbCBkYXRhICov CisJY2hhcgkJdGV4dHVhbF9kYXRhW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Cit9IHBncGFfY29s bGVjdGVkX2FkdmljZTsKKworLyoKKyAqIEEgYnVuY2ggb2YgcG9pbnRlcnMgdG8gcGdwYV9jb2xs ZWN0ZWRfYWR2aWNlIG9iamVjdHMsIHN0b3JlZCBpbgorICogYmFja2VuZC1sb2NhbCBtZW1vcnku CisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfbG9jYWxfYWR2aWNlX2NodW5rCit7CisJcGdwYV9j b2xsZWN0ZWRfYWR2aWNlICplbnRyaWVzW0FEVklDRV9DSFVOS19TSVpFXTsKK30gcGdwYV9sb2Nh bF9hZHZpY2VfY2h1bms7CisKKy8qCisgKiBJbmZvcm1hdGlvbiBhYm91dCBhbGwgb2YgdGhlIHBn cGFfY29sbGVjdGVkX2FkdmljZSBvYmplY3RzIHRoYXQgd2UncmUKKyAqIHN0b3JpbmcgaW4gbG9j YWwgbWVtb3J5LgorICoKKyAqIFdlIGFzc2lnbiBjb25zZWN1dGl2ZSBJRHMsIHN0YXJ0aW5nIGZy b20gMCwgdG8gZWFjaCBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UKKyAqIG9iamVjdCB0aGF0IHdlIHN0 b3JlLiBUaGUgYWN0dWFsIHN0b3JhZ2UgaXMgYW4gYXJyYXkgb2YgY2h1bmtzLCB3aGljaAorICog aGVscHMga2VlcCBtZW1jcHkoKSBvdmVyaGVhZCBsb3cgd2hlbiB3ZSBzdGFydCBkaXNjYXJkaW5n IG9sZGVyIGRhdGEuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfbG9jYWxfYWR2aWNlCit7CisJ dWludDY0CQluZXh0X2lkOworCXVpbnQ2NAkJb2xkZXN0X2lkOworCXVpbnQ2NAkJYmFzZV9pZDsK KwlpbnQJCQljaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZTsKKwlwZ3BhX2xvY2FsX2FkdmljZV9j aHVuayAqKmNodW5rczsKK30gcGdwYV9sb2NhbF9hZHZpY2U7CisKKy8qCisgKiBKdXN0IGxpa2Ug cGdwYV9sb2NhbF9hZHZpY2VfY2h1bmssIGJ1dCBzdG9yZWQgaW4gYSBkeW5hbWljIHNoYXJlZCBh cmVhLAorICogc28gd2UgbXVzdCB1c2UgZHNhX3BvaW50ZXIgaW5zdGVhZCBvZiBuYXRpdmUgcG9p bnRlcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfc2hhcmVkX2FkdmljZV9jaHVuaworewor CWRzYV9wb2ludGVyIGVudHJpZXNbQURWSUNFX0NIVU5LX1NJWkVdOworfSBwZ3BhX3NoYXJlZF9h ZHZpY2VfY2h1bms7CisKKy8qCisgKiBKdXN0IGxpa2UgcGdwYV9sb2NhbF9hZHZpY2UsIGJ1dCBz dG9yZWQgaW4gYSBkeW5hbWljIHNoYXJlZCBhcmVhLCBzbworICogd2UgbXVzdCB1c2UgZHNhX3Bv aW50ZXIgaW5zdGVhZCBvZiBuYXRpdmUgcG9pbnRlcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBn cGFfc2hhcmVkX2FkdmljZQoreworCXVpbnQ2NAkJbmV4dF9pZDsKKwl1aW50NjQJCW9sZGVzdF9p ZDsKKwl1aW50NjQJCWJhc2VfaWQ7CisJaW50CQkJY2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemU7 CisJZHNhX3BvaW50ZXIgY2h1bmtzOworfSBwZ3BhX3NoYXJlZF9hZHZpY2U7CisKKy8qIFBvaW50 ZXJzIHRvIGxvY2FsIGFuZCBzaGFyZWQgY29sbGVjdG9ycyAqLworc3RhdGljIHBncGFfbG9jYWxf YWR2aWNlICpsb2NhbF9jb2xsZWN0b3IgPSBOVUxMOworc3RhdGljIHBncGFfc2hhcmVkX2Fkdmlj ZSAqc2hhcmVkX2NvbGxlY3RvciA9IE5VTEw7CisKKy8qIFN0YXRpYyBmdW5jdGlvbnMgKi8KK3N0 YXRpYyBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKnBncGFfbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKE9p ZCB1c2VyaWQsCisJCQkJCQkJCQkJCQkJCSBPaWQgZGJpZCwKKwkJCQkJCQkJCQkJCQkJIHVpbnQ2 NCBxdWVyeUlkLAorCQkJCQkJCQkJCQkJCQkgVGltZXN0YW1wVHogdGltZXN0YW1wLAorCQkJCQkJ CQkJCQkJCQkgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJCQkJCQkJCQkgY29uc3Qg Y2hhciAqYWR2aWNlX3N0cmluZywKKwkJCQkJCQkJCQkJCQkJIGRzYV9hcmVhICphcmVhLAorCQkJ CQkJCQkJCQkJCQkgZHNhX3BvaW50ZXIgKnJlc3VsdCk7CitzdGF0aWMgdm9pZCBwZ3BhX3N0b3Jl X2xvY2FsX2FkdmljZShwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhKTsKK3N0YXRpYyB2b2lkIHBn cGFfdHJpbV9sb2NhbF9hZHZpY2UoaW50IGxpbWl0KTsKK3N0YXRpYyB2b2lkIHBncGFfc3RvcmVf c2hhcmVkX2FkdmljZShkc2FfcG9pbnRlciBjYV9wb2ludGVyKTsKK3N0YXRpYyB2b2lkIHBncGFf dHJpbV9zaGFyZWRfYWR2aWNlKGRzYV9hcmVhICphcmVhLCBpbnQgbGltaXQpOworCisvKiBIZWxw ZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgcXVlcnkgc3RyaW5nIGZyb20gcGdwYV9jb2xsZWN0 ZWRfYWR2aWNlICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorcXVlcnlfc3RyaW5nKHBn cGFfY29sbGVjdGVkX2FkdmljZSAqY2EpCit7CisJcmV0dXJuIGNhLT50ZXh0dWFsX2RhdGE7Cit9 CisKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBhZHZpY2Ugc3RyaW5nIGZyb20g cGdwYV9jb2xsZWN0ZWRfYWR2aWNlICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorYWR2 aWNlX3N0cmluZyhwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhKQoreworCXJldHVybiBjYS0+dGV4 dHVhbF9kYXRhICsgY2EtPmFkdmljZV9vZmZzZXQ7Cit9CisKKy8qCisgKiBTdG9yZSBjb2xsZWN0 ZWQgcXVlcnkgYWR2aWNlIGludG8gdGhlIGxvY2FsIG9yIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9y LAorICogYXMgYXBwcm9wcmlhdGUuCisgKi8KK3ZvaWQKK3BncGFfY29sbGVjdF9hZHZpY2UodWlu dDY0IHF1ZXJ5SWQsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJY29uc3QgY2hhciAq YWR2aWNlX3N0cmluZykKK3sKKwlPaWQJCQl1c2VyaWQgPSBHZXRVc2VySWQoKTsKKwlPaWQJCQlk YmlkID0gTXlEYXRhYmFzZUlkOworCVRpbWVzdGFtcFR6IG5vdyA9IEdldEN1cnJlbnRUaW1lc3Rh bXAoKTsKKworCWlmIChwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0b3IgJiYKKwkJcGdfcGxh bl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCA+IDApCisJeworCQlwZ3BhX2NvbGxlY3Rl ZF9hZHZpY2UgKmNhOworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkJb2xkY29udGV4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19wbGFuX2FkdmljZV9nZXRfbWN4dCgpKTsKKwkJ Y2EgPSBwZ3BhX21ha2VfY29sbGVjdGVkX2FkdmljZSh1c2VyaWQsIGRiaWQsIHF1ZXJ5SWQsIG5v dywKKwkJCQkJCQkJCQlxdWVyeV9zdHJpbmcsIGFkdmljZV9zdHJpbmcsCisJCQkJCQkJCQkJTlVM TCwgTlVMTCk7CisJCXBncGFfc3RvcmVfbG9jYWxfYWR2aWNlKGNhKTsKKwkJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKworCWlmIChwZ19wbGFuX2FkdmljZV9zaGFyZWRf Y29sbGVjdG9yICYmCisJCXBnX3BsYW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0ID4g MCkKKwl7CisJCWRzYV9hcmVhICAgKmFyZWEgPSBwZ19wbGFuX2FkdmljZV9kc2FfYXJlYSgpOwor CQlkc2FfcG9pbnRlciBjYV9wb2ludGVyID0gSW52YWxpZERzYVBvaW50ZXI7IC8qIHBsYWNhdGUg Y29tcGlsZXIgKi8KKworCQlwZ3BhX21ha2VfY29sbGVjdGVkX2FkdmljZSh1c2VyaWQsIGRiaWQs IHF1ZXJ5SWQsIG5vdywKKwkJCQkJCQkJICAgcXVlcnlfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nLCBh cmVhLAorCQkJCQkJCQkgICAmY2FfcG9pbnRlcik7CisJCXBncGFfc3RvcmVfc2hhcmVkX2Fkdmlj ZShjYV9wb2ludGVyKTsKKwl9Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgZmlsbCBhIG5ldyBw Z3BhX2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0LgorICoKKyAqIElmIGFyZWEgIT0gTlVMTCwgaXQg aXMgdXNlZCB0byBhbGxvY2F0ZSB0aGUgbmV3IG9iamVjdCwgYW5kIHRoZSByZXN1bHRpbmcKKyAq IGRzYV9wb2ludGVyIGlzIHJldHVybmVkIHZpYSAqcmVzdWx0LgorICoKKyAqIElmIGFyZWEgPT0g TlVMTCwgdGhlIG5ldyBvYmplY3QgaXMgYWxsb2NhdGVkIGluIHRoZSBjdXJyZW50IG1lbW9yeSBj b250ZXh0LAorICogYW5kIHJlc3VsdCBpcyBub3QgZXhhbWluZWQgb3IgbW9kaWZpZWQuCisgKi8K K3N0YXRpYyBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKgorcGdwYV9tYWtlX2NvbGxlY3RlZF9hZHZp Y2UoT2lkIHVzZXJpZCwgT2lkIGRiaWQsIHVpbnQ2NCBxdWVyeUlkLAorCQkJCQkJICAgVGltZXN0 YW1wVHogdGltZXN0YW1wLAorCQkJCQkJICAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJ CQkJICAgY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZywKKwkJCQkJCSAgIGRzYV9hcmVhICphcmVh LCBkc2FfcG9pbnRlciAqcmVzdWx0KQoreworCXNpemVfdAkJcXVlcnlfc3RyaW5nX2xlbmd0aCA9 IHN0cmxlbihxdWVyeV9zdHJpbmcpICsgMTsKKwlzaXplX3QJCWFkdmljZV9zdHJpbmdfbGVuZ3Ro ID0gc3RybGVuKGFkdmljZV9zdHJpbmcpICsgMTsKKwlzaXplX3QJCXRvdGFsX2xlbmd0aDsKKwlw Z3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCisJdG90YWxfbGVuZ3RoID0gb2Zmc2V0b2YocGdw YV9jb2xsZWN0ZWRfYWR2aWNlLCB0ZXh0dWFsX2RhdGEpCisJCSsgcXVlcnlfc3RyaW5nX2xlbmd0 aCArIGFkdmljZV9zdHJpbmdfbGVuZ3RoOworCisJaWYgKGFyZWEgPT0gTlVMTCkKKwkJY2EgPSBw YWxsb2ModG90YWxfbGVuZ3RoKTsKKwllbHNlCisJeworCQkqcmVzdWx0ID0gZHNhX2FsbG9jYXRl KGFyZWEsIHRvdGFsX2xlbmd0aCk7CisJCWNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsICpyZXN1 bHQpOworCX0KKworCWNhLT51c2VyaWQgPSB1c2VyaWQ7CisJY2EtPmRiaWQgPSBkYmlkOworCWNh LT5xdWVyeWlkID0gcXVlcnlJZDsKKwljYS0+dGltZXN0YW1wID0gdGltZXN0YW1wOworCWNhLT5h ZHZpY2Vfb2Zmc2V0ID0gcXVlcnlfc3RyaW5nX2xlbmd0aDsKKworCW1lbWNweShjYS0+dGV4dHVh bF9kYXRhLCBxdWVyeV9zdHJpbmcsIHF1ZXJ5X3N0cmluZ19sZW5ndGgpOworCW1lbWNweSgmY2Et PnRleHR1YWxfZGF0YVtjYS0+YWR2aWNlX29mZnNldF0sCisJCSAgIGFkdmljZV9zdHJpbmcsIGFk dmljZV9zdHJpbmdfbGVuZ3RoKTsKKworCXJldHVybiBjYTsKK30KKworLyoKKyAqIEFkZCBhIHBn X2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0IHRvIG91ciBiYWNrZW5kLWxvY2FsIGFkdmljZSBjb2xs ZWN0aW9uLgorICoKKyAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igc3dpdGNoaW5nIHRvIHRo ZSBhcHByb3ByaWF0ZSBtZW1vcnkgY29udGV4dDsKKyAqIHRoZSBwcm92aWRlZCBvYmplY3Qgc2hv dWxkIGhhdmUgYmVlbiBhbGxvY2F0ZWQgaW4gdGhhdCBzYW1lIGNvbnRleHQuCisgKi8KK3N0YXRp YyB2b2lkCitwZ3BhX3N0b3JlX2xvY2FsX2FkdmljZShwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNh KQoreworCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCXBn cGFfbG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxlY3RvcjsKKworCS8qIElmIHRoZSBsb2Nh bCBhZHZpY2UgY29sbGVjdG9yIGlzbid0IGluaXRpYWxpemVkIHlldCwgZG8gdGhhdCBub3cuICov CisJaWYgKGxhID09IE5VTEwpCisJeworCQlsYSA9IHBhbGxvYzAoc2l6ZW9mKHBncGFfbG9jYWxf YWR2aWNlKSk7CisJCWxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9IEFEVklDRV9DSFVO S19BUlJBWV9TSVpFOworCQlsYS0+Y2h1bmtzID0gcGFsbG9jMF9hcnJheShwZ3BhX2xvY2FsX2Fk dmljZV9jaHVuayAqLAorCQkJCQkJCQkgICBsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUp OworCQlsb2NhbF9jb2xsZWN0b3IgPSBsYTsKKwl9CisKKwkvKiBDb21wdXRlIGNodW5rIGFuZCBv ZmZzZXQgYXQgd2hpY2ggdG8gc3RvcmUgdGhpcyBhZHZpY2UuICovCisJY2h1bmtfbnVtYmVyID0g KGxhLT5uZXh0X2lkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJY2h1bmtf b2Zmc2V0ID0gKGxhLT5uZXh0X2lkIC0gbGEtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7 CisKKwkvKiBFeHRlbmQgY2h1bmsgYXJyYXksIGlmIG5lZWRlZC4gKi8KKwlpZiAoY2h1bmtfbnVt YmVyID49IGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSkKKwl7CisJCWludAkJCW5ld19z aXplOworCisJCW5ld19zaXplID0gbGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplICsgQURW SUNFX0NIVU5LX0FSUkFZX1NJWkU7CisJCWxhLT5jaHVua3MgPSByZXBhbGxvYzBfYXJyYXkobGEt PmNodW5rcywKKwkJCQkJCQkJCSBwZ3BhX2xvY2FsX2FkdmljZV9jaHVuayAqLAorCQkJCQkJCQkJ IGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSwKKwkJCQkJCQkJCSBuZXdfc2l6ZSk7CisJ CWxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9IG5ld19zaXplOworCX0KKworCS8qIEFs bG9jYXRlIG5ldyBjaHVuaywgaWYgbmVlZGVkLiAqLworCWlmIChsYS0+Y2h1bmtzW2NodW5rX251 bWJlcl0gPT0gTlVMTCkKKwkJbGEtPmNodW5rc1tjaHVua19udW1iZXJdID0gcGFsbG9jMF9vYmpl Y3QocGdwYV9sb2NhbF9hZHZpY2VfY2h1bmspOworCisJLyogU2F2ZSBwb2ludGVyIGFuZCBidW1w IG5leHQtaWQgY291bnRlci4gKi8KKwlBc3NlcnQobGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5l bnRyaWVzW2NodW5rX29mZnNldF0gPT0gTlVMTCk7CisJbGEtPmNodW5rc1tjaHVua19udW1iZXJd LT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBjYTsKKwkrK2xhLT5uZXh0X2lkOworCisJLyogSWYg d2UndmUgZXhjZWVkZWQgdGhlIHN0b3JhZ2UgbGltaXQsIGRpc2NhcmQgb2xkIGRhdGEuICovCisJ cGdwYV90cmltX2xvY2FsX2FkdmljZShwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xp bWl0KTsKK30KKworLyoKKyAqIEFkZCBhIHBnX2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0IHRvIHRo ZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3Rpb24uCisgKgorICogJ2NhX3BvaW50ZXInIHNob3VsZCBo YXZlIGJlZW4gYWxsb2NhdGVkIGZyb20gdGhlIHBnX3BsYW5fYWR2aWNlIERTQSBhcmVhCisgKiBh bmQgc2hvdWxkIHBvaW50IHRvIGFuIG9iamVjdCBvZiB0eXBlIHBncGFfY29sbGVjdGVkX2Fkdmlj ZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfc3RvcmVfc2hhcmVkX2FkdmljZShkc2FfcG9pbnRl ciBjYV9wb2ludGVyKQoreworCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCXVpbnQ2NAkJY2h1bmtf b2Zmc2V0OworCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFj aCgpOworCWRzYV9hcmVhICAgKmFyZWEgPSBwZ19wbGFuX2FkdmljZV9kc2FfYXJlYSgpOworCXBn cGFfc2hhcmVkX2FkdmljZSAqc2EgPSBzaGFyZWRfY29sbGVjdG9yOworCWRzYV9wb2ludGVyICpj aHVua19hcnJheTsKKwlwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKmNodW5rOworCisJLyogTG9j ayB0aGUgc2hhcmVkIHN0YXRlLiAqLworCUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5sb2NrLCBMV19F WENMVVNJVkUpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBub3QgYXR0YWNoZWQgdG8gdGhlIHNoYXJl ZCBhZHZpY2UgY29sbGVjdG9yIHlldCwgZml4IHRoYXQgbm93LgorCSAqIElmIHdlJ3JlIHRoZSBm aXJzdCBvbmVzIHRvIGF0dGFjaCwgd2UgbWF5IG5lZWQgdG8gY3JlYXRlIHRoZSBvYmplY3QuCisJ ICovCisJaWYgKHNhID09IE5VTEwpCisJeworCQlpZiAoc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3Ig PT0gSW52YWxpZERzYVBvaW50ZXIpCisJCQlzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9CisJCQkJ ZHNhX2FsbG9jYXRlMChhcmVhLCBzaXplb2YocGdwYV9zaGFyZWRfYWR2aWNlKSk7CisJCXNoYXJl ZF9jb2xsZWN0b3IgPSBzYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzdGF0ZS0+c2hhcmVkX2Nv bGxlY3Rvcik7CisJfQorCisJLyoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgc29tZSBvdGhlciBi YWNrZW5kIG1heSBoYXZlIHN1Y2NlZWRlZCBpbiBjcmVhdGluZworCSAqIHRoZSBtYWluIGNvbGxl Y3RvciBvYmplY3QgYnV0IGZhaWxlZCB0byBhbGxvY2F0ZSBhbiBpbml0aWFsIGNodW5rCisJICog YXJyYXksIHNvIHdlIG11c3QgYmUgcHJlcGFyZWQgdG8gYWxsb2NhdGUgdGhlIGNodW5rIGFycmF5 IGhlcmUgd2hldGhlcgorCSAqIG9yIG5vdCB3ZSBjcmVhdGVkIHRoZSBjb2xsZWN0b3Igb2JqZWN0 LgorCSAqLworCWlmIChzaGFyZWRfY29sbGVjdG9yLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6 ZSA9PSAwKQorCXsKKwkJc2EtPmNodW5rcyA9CisJCQlkc2FfYWxsb2NhdGUwKGFyZWEsCisJCQkJ CQkgIHNpemVvZihkc2FfcG9pbnRlcikgKiBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRSk7CisJCXNh LT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9IEFEVklDRV9DSFVOS19BUlJBWV9TSVpFOwor CX0KKworCS8qIENvbXB1dGUgY2h1bmsgYW5kIG9mZnNldCBhdCB3aGljaCB0byBzdG9yZSB0aGlz IGFkdmljZS4gKi8KKwljaHVua19udW1iZXIgPSAoc2EtPm5leHRfaWQgLSBzYS0+YmFzZV9pZCkg LyBBRFZJQ0VfQ0hVTktfU0laRTsKKwljaHVua19vZmZzZXQgPSAoc2EtPm5leHRfaWQgLSBzYS0+ YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCS8qIEdldCB0aGUgYWRkcmVzcyBvZiB0 aGUgY2h1bmsgYXJyYXkgYW5kLCBpZiBuZWVkZWQsIGV4dGVuZCBpdC4gKi8KKwlpZiAoY2h1bmtf bnVtYmVyID49IHNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSkKKwl7CisJCWludAkJCW5l d19zaXplOworCQlkc2FfcG9pbnRlciBuZXdfY2h1bmtzOworCisJCS8qCisJCSAqIERTQSBjYW4n dCBlbmxhcmdlIGFuIGV4aXN0aW5nIGFsbG9jYXRpb24sIHNvIHdlIG11c3QgbWFrZSBhIG5ldwor CQkgKiBhbGxvY2F0aW9uIGFuZCBjb3B5IGRhdGEgb3Zlci4KKwkJICovCisJCW5ld19zaXplID0g c2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplICsgQURWSUNFX0NIVU5LX0FSUkFZX1NJWkU7 CisJCW5ld19jaHVua3MgPSBkc2FfYWxsb2NhdGUwKGFyZWEsIHNpemVvZihkc2FfcG9pbnRlcikg KiBuZXdfc2l6ZSk7CisJCWNodW5rX2FycmF5ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIG5ld19j aHVua3MpOworCQltZW1jcHkoY2h1bmtfYXJyYXksIGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzYS0+ Y2h1bmtzKSwKKwkJCSAgIHNpemVvZihkc2FfcG9pbnRlcikgKiBzYS0+Y2h1bmtfYXJyYXlfYWxs b2NhdGVkX3NpemUpOworCQlkc2FfZnJlZShhcmVhLCBzYS0+Y2h1bmtzKTsKKwkJc2EtPmNodW5r cyA9IG5ld19jaHVua3M7CisJCXNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9IG5ld19z aXplOworCX0KKwllbHNlCisJCWNodW5rX2FycmF5ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHNh LT5jaHVua3MpOworCisJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBkZXNpcmVkIGNodW5rLCBh bGxvY2F0aW5nIGl0IGlmIG5lZWRlZC4gKi8KKwlpZiAoY2h1bmtfYXJyYXlbY2h1bmtfbnVtYmVy XSA9PSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJY2h1bmtfYXJyYXlbY2h1bmtfbnVtYmVyXSA9CisJ CQlkc2FfYWxsb2NhdGUwKGFyZWEsIHNpemVvZihwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmspKTsK KwljaHVuayA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBjaHVua19hcnJheVtjaHVua19udW1iZXJd KTsKKworCS8qIFNhdmUgcG9pbnRlciBhbmQgYnVtcCBuZXh0LWlkIGNvdW50ZXIuICovCisJQXNz ZXJ0KGNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPT0gSW52YWxpZERzYVBvaW50ZXIpOwor CWNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBjYV9wb2ludGVyOworCSsrc2EtPm5leHRf aWQ7CisKKwkvKiBJZiB3ZSd2ZSBleGNlZWRlZCB0aGUgc3RvcmFnZSBsaW1pdCwgZGlzY2FyZCBv bGQgZGF0YS4gKi8KKwlwZ3BhX3RyaW1fc2hhcmVkX2FkdmljZShhcmVhLCBwZ19wbGFuX2Fkdmlj ZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdCk7CisKKwkvKiBSZWxlYXNlIGxvY2sgb24gc2hhcmVk IHN0YXRlLiAqLworCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKK30KKworLyoKKyAqIERp c2NhcmQgY29sbGVjdGVkIGFkdmljZSBzdG9yZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1vcnkgaW4g ZXhjZXNzIG9mIHRoZQorICogc3BlY2lmaWVkIGxpbWl0LgorICovCitzdGF0aWMgdm9pZAorcGdw YV90cmltX2xvY2FsX2FkdmljZShpbnQgbGltaXQpCit7CisJcGdwYV9sb2NhbF9hZHZpY2UgKmxh ID0gbG9jYWxfY29sbGVjdG9yOworCXVpbnQ2NAkJY3VycmVudF9jb3VudDsKKwl1aW50NjQJCXRy aW1fY291bnQ7CisJdWludDY0CQl0b3RhbF9jaHVua19jb3VudDsKKwl1aW50NjQJCXRyaW1fY2h1 bmtfY291bnQ7CisJdWludDY0CQlyZW1haW5pbmdfY2h1bmtfY291bnQ7CisKKwkvKiBJZiB3ZSBo YXZlbid0IHlldCByZWFjaGVkIHRoZSBsaW1pdCwgdGhlcmUncyBub3RoaW5nIHRvIGRvLiAqLwor CWN1cnJlbnRfY291bnQgPSBsYS0+bmV4dF9pZCAtIGxhLT5vbGRlc3RfaWQ7CisJaWYgKGN1cnJl bnRfY291bnQgPD0gbGltaXQpCisJCXJldHVybjsKKworCS8qIEZyZWUgZW5vdWdoIGVudHJpZXMg dG8gZ2V0IHVzIGJhY2sgZG93biB0byB0aGUgbGltaXQuICovCisJdHJpbV9jb3VudCA9IGN1cnJl bnRfY291bnQgLSBsaW1pdDsKKwl3aGlsZSAodHJpbV9jb3VudCA+IDApCisJeworCQl1aW50NjQJ CWNodW5rX251bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZzZXQ7CisKKwkJY2h1bmtfbnVtYmVy ID0gKGxhLT5vbGRlc3RfaWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwkJ Y2h1bmtfb2Zmc2V0ID0gKGxhLT5vbGRlc3RfaWQgLSBsYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hV TktfU0laRTsKKworCQlBc3NlcnQobGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5lbnRyaWVzW2No dW5rX29mZnNldF0gIT0gTlVMTCk7CisJCXBmcmVlKGxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ ZW50cmllc1tjaHVua19vZmZzZXRdKTsKKwkJbGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5lbnRy aWVzW2NodW5rX29mZnNldF0gPSBOVUxMOworCQkrK2xhLT5vbGRlc3RfaWQ7CisJCS0tdHJpbV9j b3VudDsKKwl9CisKKwkvKiBGcmVlIGFueSBjaHVua3MgdGhhdCBhcmUgbm93IGVudGlyZWx5IHVu dXNlZC4gKi8KKwl0cmltX2NodW5rX2NvdW50ID0gKGxhLT5vbGRlc3RfaWQgLSBsYS0+YmFzZV9p ZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlmb3IgKHVpbnQ2NCBuID0gMDsgbiA8IHRyaW1fY2h1 bmtfY291bnQ7ICsrbikKKwkJcGZyZWUobGEtPmNodW5rc1tuXSk7CisKKwkvKiBTbGlkZSByZW1h aW5pbmcgY2h1bmsgcG9pbnRlcnMgYmFjayB0b3dhcmQgdGhlIGJhc2Ugb2YgdGhlIGFycmF5LiAq LworCXRvdGFsX2NodW5rX2NvdW50ID0gKGxhLT5uZXh0X2lkIC0gbGEtPmJhc2VfaWQgKworCQkJ CQkJIEFEVklDRV9DSFVOS19TSVpFIC0gMSkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlyZW1haW5p bmdfY2h1bmtfY291bnQgPSB0b3RhbF9jaHVua19jb3VudCAtIHRyaW1fY2h1bmtfY291bnQ7CisJ aWYgKHJlbWFpbmluZ19jaHVua19jb3VudCA+IDApCisJCW1lbW1vdmUoJmxhLT5jaHVua3NbMF0s ICZsYS0+Y2h1bmtzW3RyaW1fY2h1bmtfY291bnRdLAorCQkJCXNpemVvZihwZ3BhX2xvY2FsX2Fk dmljZV9jaHVuayAqKSAqIHJlbWFpbmluZ19jaHVua19jb3VudCk7CisKKwkvKiBEb24ndCBsZWF2 ZSBzdGFsZSBwb2ludGVycyBhcm91bmQuICovCisJbWVtc2V0KCZsYS0+Y2h1bmtzW3JlbWFpbmlu Z19jaHVua19jb3VudF0sIDAsCisJCSAgIHNpemVvZihwZ3BhX2xvY2FsX2FkdmljZV9jaHVuayAq KQorCQkgICAqICh0b3RhbF9jaHVua19jb3VudCAtIHJlbWFpbmluZ19jaHVua19jb3VudCkpOwor CisJLyogQWRqdXN0IGJhc2UgSUQgdmFsdWUgYWNjb3JkaW5nbHkuICovCisJbGEtPmJhc2VfaWQg Kz0gdHJpbV9jaHVua19jb3VudCAqIEFEVklDRV9DSFVOS19TSVpFOworfQorCisvKgorICogRGlz Y2FyZCBjb2xsZWN0ZWQgYWR2aWNlIHN0b3JlZCBpbiBzaGFyZWQgbWVtb3J5IGluIGV4Y2VzcyBv ZiB0aGUKKyAqIHNwZWNpZmllZCBsaW1pdC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfdHJpbV9z aGFyZWRfYWR2aWNlKGRzYV9hcmVhICphcmVhLCBpbnQgbGltaXQpCit7CisJcGdwYV9zaGFyZWRf YWR2aWNlICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisJdWludDY0CQljdXJyZW50X2NvdW50Owor CXVpbnQ2NAkJdHJpbV9jb3VudDsKKwl1aW50NjQJCXRvdGFsX2NodW5rX2NvdW50OworCXVpbnQ2 NAkJdHJpbV9jaHVua19jb3VudDsKKwl1aW50NjQJCXJlbWFpbmluZ19jaHVua19jb3VudDsKKwlk c2FfcG9pbnRlciAqY2h1bmtfYXJyYXk7CisKKwkvKiBJZiB3ZSBoYXZlbid0IHlldCByZWFjaGVk IHRoZSBsaW1pdCwgdGhlcmUncyBub3RoaW5nIHRvIGRvLiAqLworCWN1cnJlbnRfY291bnQgPSBz YS0+bmV4dF9pZCAtIHNhLT5vbGRlc3RfaWQ7CisJaWYgKGN1cnJlbnRfY291bnQgPD0gbGltaXQp CisJCXJldHVybjsKKworCS8qIEdldCBhIHBvaW50ZXIgdG8gdGhlIGNodW5rIGFycmF5LiAqLwor CWNodW5rX2FycmF5ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHNhLT5jaHVua3MpOworCisJLyog RnJlZSBlbm91Z2ggZW50cmllcyB0byBnZXQgdXMgYmFjayBkb3duIHRvIHRoZSBsaW1pdC4gKi8K Kwl0cmltX2NvdW50ID0gY3VycmVudF9jb3VudCAtIGxpbWl0OworCXdoaWxlICh0cmltX2NvdW50 ID4gMCkKKwl7CisJCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCQl1aW50NjQJCWNodW5rX29mZnNl dDsKKwkJcGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rICpjaHVuazsKKworCQljaHVua19udW1iZXIg PSAoc2EtPm9sZGVzdF9pZCAtIHNhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQlj aHVua19vZmZzZXQgPSAoc2EtPm9sZGVzdF9pZCAtIHNhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVO S19TSVpFOworCisJCWNodW5rID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIGNodW5rX2FycmF5W2No dW5rX251bWJlcl0pOworCQlBc3NlcnQoY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSAhPSBJ bnZhbGlkRHNhUG9pbnRlcik7CisJCWRzYV9mcmVlKGFyZWEsIGNodW5rLT5lbnRyaWVzW2NodW5r X29mZnNldF0pOworCQljaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gSW52YWxpZERzYVBv aW50ZXI7CisJCSsrc2EtPm9sZGVzdF9pZDsKKwkJLS10cmltX2NvdW50OworCX0KKworCS8qIEZy ZWUgYW55IGNodW5rcyB0aGF0IGFyZSBub3cgZW50aXJlbHkgdW51c2VkLiAqLworCXRyaW1fY2h1 bmtfY291bnQgPSAoc2EtPm9sZGVzdF9pZCAtIHNhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19T SVpFOworCWZvciAodWludDY0IG4gPSAwOyBuIDwgdHJpbV9jaHVua19jb3VudDsgKytuKQorCQlk c2FfZnJlZShhcmVhLCBjaHVua19hcnJheVtuXSk7CisKKwkvKiBTbGlkZSByZW1haW5pbmcgY2h1 bmsgcG9pbnRlcnMgYmFjayB0b3dhcmQgdGhlIGJhc2Ugb2YgdGhlIGFycmF5LiAqLworCXRvdGFs X2NodW5rX2NvdW50ID0gKHNhLT5uZXh0X2lkIC0gc2EtPmJhc2VfaWQgKworCQkJCQkJIEFEVklD RV9DSFVOS19TSVpFIC0gMSkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlyZW1haW5pbmdfY2h1bmtf Y291bnQgPSB0b3RhbF9jaHVua19jb3VudCAtIHRyaW1fY2h1bmtfY291bnQ7CisJaWYgKHJlbWFp bmluZ19jaHVua19jb3VudCA+IDApCisJCW1lbW1vdmUoJmNodW5rX2FycmF5WzBdLCAmY2h1bmtf YXJyYXlbdHJpbV9jaHVua19jb3VudF0sCisJCQkJc2l6ZW9mKGRzYV9wb2ludGVyKSAqIHJlbWFp bmluZ19jaHVua19jb3VudCk7CisKKwkvKiBEb24ndCBsZWF2ZSBzdGFsZSBwb2ludGVycyBhcm91 bmQuICovCisJbWVtc2V0KCZjaHVua19hcnJheVtyZW1haW5pbmdfY2h1bmtfY291bnRdLCAwLAor CQkgICBzaXplb2YocGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rICopCisJCSAgICogKHRvdGFsX2No dW5rX2NvdW50IC0gcmVtYWluaW5nX2NodW5rX2NvdW50KSk7CisKKwkvKiBBZGp1c3QgYmFzZSBJ RCB2YWx1ZSBhY2NvcmRpbmdseS4gKi8KKwlzYS0+YmFzZV9pZCArPSB0cmltX2NodW5rX2NvdW50 ICogQURWSUNFX0NIVU5LX1NJWkU7Cit9CisKKy8qCisgKiBTUUwtY2FsbGFibGUgZnVuY3Rpb24g dG8gZGlzY2FyZCBhZHZpY2UgY29sbGVjdGVkIGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5CisgKi8K K0RhdHVtCitwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJaWYgKGxvY2FsX2NvbGxlY3RvciAhPSBOVUxMKQorCQlwZ3BhX3RyaW1fbG9jYWxfYWR2 aWNlKDApOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBm dW5jdGlvbiB0byBkaXNjYXJkIGFkdmljZSBjb2xsZWN0ZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1v cnkKKyAqLworRGF0dW0KK3BnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJcGdwYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gcGdfcGxhbl9hZHZpY2Vf YXR0YWNoKCk7CisJZHNhX2FyZWEgICAqYXJlYSA9IHBnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKCk7 CisKKwlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qCisJ ICogSWYgd2UncmUgbm90IGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciB5 ZXQsIGZpeCB0aGF0IG5vdzsKKwkgKiBidXQgaWYgdGhlIGNvbGxlY3RvciBkb2Vzbid0IGV2ZW4g ZXhpc3QsIHdlIGNhbiByZXR1cm4gd2l0aG91dCBkb2luZworCSAqIGFueXRoaW5nIGVsc2UuCisJ ICovCisJaWYgKHNoYXJlZF9jb2xsZWN0b3IgPT0gTlVMTCkKKwl7CisJCWlmIChzdGF0ZS0+c2hh cmVkX2NvbGxlY3RvciA9PSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJeworCQkJTFdMb2NrUmVsZWFz ZSgmc3RhdGUtPmxvY2spOworCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJfQorCQlzaGFyZWRfY29s bGVjdG9yID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yKTsK Kwl9CisKKwkvKiBEbyB0aGUgcmVhbCB3b3JrICovCisJcGdwYV90cmltX3NoYXJlZF9hZHZpY2Uo YXJlYSwgMCk7CisKKwlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisKKwlQR19SRVRVUk5f Vk9JRCgpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIFNSRiB0byByZXR1cm4gYWR2aWNlIGNv bGxlY3RlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeQorICovCitEYXR1bQorcGdfZ2V0X2NvbGxl Y3RlZF9sb2NhbF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpy c2luZm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisJcGdwYV9sb2Nh bF9hZHZpY2UgKmxhID0gbG9jYWxfY29sbGVjdG9yOworCU9pZAkJCXVzZXJpZCA9IEdldFVzZXJJ ZCgpOworCisJSW5pdE1hdGVyaWFsaXplZFNSRihmY2luZm8sIDApOworCisJaWYgKGxhID09IE5V TEwpCisJCXJldHVybiAoRGF0dW0pIDA7CisKKwkvKiBMb29wIG92ZXIgYWxsIGVudHJpZXMuICov CisJZm9yICh1aW50NjQgaWQgPSBsYS0+b2xkZXN0X2lkOyBpZCA8IGxhLT5uZXh0X2lkOyArK2lk KQorCXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0Owor CQlwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlEYXR1bQkJdmFsdWVzW1BHX0dFVF9BRFZJ Q0VfQ09MVU1OU107CisJCWJvb2wJCW51bGxzW1BHX0dFVF9BRFZJQ0VfQ09MVU1OU10gPSB7MH07 CisKKwkJY2h1bmtfbnVtYmVyID0gKGlkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJ WkU7CisJCWNodW5rX29mZnNldCA9IChpZCAtIGxhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19T SVpFOworCisJCWNhID0gbGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5lbnRyaWVzW2NodW5rX29m ZnNldF07CisKKwkJaWYgKCFtZW1iZXJfY2FuX3NldF9yb2xlKHVzZXJpZCwgY2EtPnVzZXJpZCkp CisJCQljb250aW51ZTsKKworCQl2YWx1ZXNbMF0gPSBVSW50NjRHZXREYXR1bShpZCk7CisJCXZh bHVlc1sxXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPnVzZXJpZCk7CisJCXZhbHVlc1syXSA9IE9i amVjdElkR2V0RGF0dW0oY2EtPmRiaWQpOworCQl2YWx1ZXNbM10gPSBVSW50NjRHZXREYXR1bShj YS0+cXVlcnlpZCk7CisJCXZhbHVlc1s0XSA9IFRpbWVzdGFtcEdldERhdHVtKGNhLT50aW1lc3Rh bXApOworCQl2YWx1ZXNbNV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHF1ZXJ5X3N0cmluZyhjYSkp OworCQl2YWx1ZXNbNl0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGFkdmljZV9zdHJpbmcoY2EpKTsK KworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwgcnNpbmZvLT5zZXRE ZXNjLAorCQkJCQkJCSB2YWx1ZXMsIG51bGxzKTsKKwl9CisKKwlyZXR1cm4gKERhdHVtKSAwOwor fQorCisvKgorICogU1FMLWNhbGxhYmxlIFNSRiB0byByZXR1cm4gYWR2aWNlIGNvbGxlY3RlZCBp biBzaGFyZWQgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZp Y2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2luZm8gPSAoUmV0dXJu U2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisJcGdwYV9zaGFyZWRfc3RhdGUgKnN0YXRl ID0gcGdfcGxhbl9hZHZpY2VfYXR0YWNoKCk7CisJZHNhX2FyZWEgICAqYXJlYSA9IHBnX3BsYW5f YWR2aWNlX2RzYV9hcmVhKCk7CisJZHNhX3BvaW50ZXIgKmNodW5rX2FycmF5OworCXBncGFfc2hh cmVkX2FkdmljZSAqc2EgPSBzaGFyZWRfY29sbGVjdG9yOworCisJSW5pdE1hdGVyaWFsaXplZFNS RihmY2luZm8sIDApOworCisJLyogTG9jayB0aGUgc2hhcmVkIHN0YXRlLiAqLworCUxXTG9ja0Fj cXVpcmUoJnN0YXRlLT5sb2NrLCBMV19TSEFSRUQpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBub3Qg YXR0YWNoZWQgdG8gdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yIHlldCwgZml4IHRoYXQgbm93 OworCSAqIGJ1dCBpZiB0aGUgY29sbGVjdG9yIGRvZXNuJ3QgZXZlbiBleGlzdCwgd2UgY2FuIHJl dHVybiB3aXRob3V0IGRvaW5nCisJICogYW55dGhpbmcgZWxzZS4KKwkgKi8KKwlpZiAoc2EgPT0g TlVMTCkKKwl7CisJCWlmIChzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9PSBJbnZhbGlkRHNhUG9p bnRlcikKKwkJeworCQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCQkJcmV0dXJuIChE YXR1bSkgMDsKKwkJfQorCQlzaGFyZWRfY29sbGVjdG9yID0gc2EgPSBkc2FfZ2V0X2FkZHJlc3Mo YXJlYSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IpOworCX0KKworCS8qIEdldCBhIHBvaW50ZXIg dG8gdGhlIGNodW5rIGFycmF5LiAqLworCWNodW5rX2FycmF5ID0gZHNhX2dldF9hZGRyZXNzKGFy ZWEsIHNhLT5jaHVua3MpOworCisJLyogTG9vcCBvdmVyIGFsbCBlbnRyaWVzLiAqLworCWZvciAo dWludDY0IGlkID0gc2EtPm9sZGVzdF9pZDsgaWQgPCBzYS0+bmV4dF9pZDsgKytpZCkKKwl7CisJ CXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCQl1aW50NjQJCWNodW5rX29mZnNldDsKKwkJcGdwYV9z aGFyZWRfYWR2aWNlX2NodW5rICpjaHVuazsKKwkJcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsK KwkJRGF0dW0JCXZhbHVlc1tQR19HRVRfQURWSUNFX0NPTFVNTlNdOworCQlib29sCQludWxsc1tQ R19HRVRfQURWSUNFX0NPTFVNTlNdID0gezB9OworCisJCWNodW5rX251bWJlciA9IChpZCAtIHNh LT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19vZmZzZXQgPSAoaWQgLSBz YS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQljaHVuayA9IGRzYV9nZXRfYWRk cmVzcyhhcmVhLCBjaHVua19hcnJheVtjaHVua19udW1iZXJdKTsKKwkJY2EgPSBkc2FfZ2V0X2Fk ZHJlc3MoYXJlYSwgY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7CisKKwkJdmFsdWVzWzBd ID0gVUludDY0R2V0RGF0dW0oaWQpOworCQl2YWx1ZXNbMV0gPSBPYmplY3RJZEdldERhdHVtKGNh LT51c2VyaWQpOworCQl2YWx1ZXNbMl0gPSBPYmplY3RJZEdldERhdHVtKGNhLT5kYmlkKTsKKwkJ dmFsdWVzWzNdID0gVUludDY0R2V0RGF0dW0oY2EtPnF1ZXJ5aWQpOworCQl2YWx1ZXNbNF0gPSBU aW1lc3RhbXBHZXREYXR1bShjYS0+dGltZXN0YW1wKTsKKwkJdmFsdWVzWzVdID0gQ1N0cmluZ0dl dFRleHREYXR1bShxdWVyeV9zdHJpbmcoY2EpKTsKKwkJdmFsdWVzWzZdID0gQ1N0cmluZ0dldFRl eHREYXR1bShhZHZpY2Vfc3RyaW5nKGNhKSk7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNp bmZvLT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywKKwkJCQkJCQkgdmFsdWVzLCBudWxscyk7 CisJfQorCisJLyogUmVsZWFzZSBsb2NrIG9uIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tSZWxl YXNlKCZzdGF0ZS0+bG9jayk7CisKKwlyZXR1cm4gKERhdHVtKSAwOworfQpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5iNmU3NDZhMDZkNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9jb2xsZWN0b3IuaApAQCAtMCwwICsxLDE4IEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiBwZ3BhX2NvbGxlY3Rvci5oCisgKgkgIGNvbGxlY3QgYWR2aWNlIGludG8gYmFj a2VuZC1sb2NhbCBvciBzaGFyZWQgbWVtb3J5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIw MjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2lmbmRlZiBQR1BBX0NPTExFQ1RPUl9ICisjZGVmaW5lIFBHUEFfQ09MTEVDVE9SX0gK KworZXh0ZXJuIHZvaWQgcGdwYV9jb2xsZWN0X2FkdmljZSh1aW50NjQgcXVlcnlJZCwgY29uc3Qg Y2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJCQljb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nKTsK KworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRp Zmllci5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTFiNGIwYzYwYTYKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jCkBAIC0wLDAg KzEsNDc2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX2lkZW50aWZpZXIuYwor ICoJICBjcmVhdGUgYXBwcm9wcmlhdGUgaWRlbnRpZmllcnMgZm9yIHJhbmdlIHRhYmxlIGVudHJp ZXMKKyAqCisgKiBUaGUgZ29hbCBvZiB0aGlzIG1vZHVsZSBpcyB0byBiZSBhYmxlIHRvIHByb2R1 Y2UgaWRlbnRpZmllcnMgZm9yIHJhbmdlCisgKiB0YWJsZSBlbnRyaWVzIHRoYXQgYXJlIHVuaXF1 ZSwgdW5kZXJzdGFuZGFibGUgdG8gaHVtYW4gYmVpbmdzLCBhbmQKKyAqIGFibGUgdG8gYmUgcmVj b25zdHJ1Y3RlZCBkdXJpbmcgZnV0dXJlIHBsYW5uaW5nIGN5Y2xlcy4gQXMgYW4KKyAqIGV4Y2Vw dGlvbiwgd2UgZG8gbm90IGNhcmUgYWJvdXQsIG9yIHdhbnQgdG8gcHJvZHVjZSwgaWRlbnRpZmll cnMgZm9yCisgKiBSVEVfSk9JTiBlbnRyaWVzLiBUaGlzIGlzIGJlY2F1c2UgKDEpIHdlIHdvdWxk IGVuZCB1cCB3aXRoIGEgdG9uIG9mCisgKiBSVEVzIHdpdGggdW5oZWxwZnVsIG5hbWVzIGxpa2Ug dW5uYW1lZF9qb2luXzE3OyAoMikgbm90IGFsbCBqb2lucyBoYXZlCisgKiBSVEVzOyBhbmQgKDMp IHdlIGludGVuZCB0byByZWZlciB0byBqb2lucyBieSB0aGVpciBjb25zdGl0dWVudCBtZW1iZXJz CisgKiByYXRoZXIgdGhhbiBieSByZWZlcmVuY2UgdG8gdGhlIGpvaW4gUlRFLgorICoKKyAqIElu IGdlbmVyYWwsIHdlIGNvbnN0cnVjdCBpZGVudGlmaWVycyBvZiB0aGUgZm9sbG93aW5nIGZvcm06 CisgKgorICogYWxpYXNfbmFtZSNvY2N1cnJlbmNlX251bWJlci9jaGlsZF90YWJsZV9uYW1lQHN1 YnF1ZXJ5X25hbWUKKyAqCisgKiBIb3dldmVyLCBvY2N1cnJlbmNlX251bWJlciBpcyBvbWl0dGVk IHdoZW4gaXQgaXMgdGhlIGZpcnN0IG9jY3VycmVuY2UKKyAqIHdpdGhpbiB0aGUgc2FtZSBzdWJx dWVyeSwgY2hpbGRfdGFibGVfbmFtZSBpcyBvbWl0dGVkIGZvciByZWxhdGlvbnMgdGhhdAorICog YXJlIG5vdCBjaGlsZCB0YWJsZXMsIGFuZCBzdWJxdWVyeV9uYW1lIGlzIG9taXR0ZWQgZm9yIHRo ZSB0b3Btb3N0CisgKiBxdWVyeSBsZXZlbC4gV2hlbmV2ZXIgYW4gaXRlbSBpcyBvbWl0dGVkLCB0 aGUgcHJlY2VkaW5nIHB1bmN0dWF0aW9uIG1hcmsKKyAqIGlzIGFsc28gb21pdHRlZC4gIElkZW50 aWZpZXItc3R5bGUgZXNjYXBpbmcgaXMgYXBwbGllZCB0byBhbGlhc19uYW1lIGFuZAorICogc3Vi cXVlcnlfbmFtZS4gIFdoZW5ldmVyIHdlIGluY2x1ZGUgY2hpbGRfdGFibGVfbmFtZSwgd2UgYWx3 YXlzCisgKiBzY2hlbWEtcXVhbGlmaWVkIG5hbWUsIGJ1dCB3cml0aW5nIHRoZWlyIG93biBwbGFu IGFkdmljZSBhcmUgbm90IHJlcXVpcmVkCisgKiB0byBkbyBzby4gIElkZW50aWZpZXItc3R5bGUg ZXNjYXBpbmcgaXMgYXBwbGllZCB0byB0aGUgc2NoZW1hIGFuZCB0byB0aGUKKyAqIHJlbGF0aW9u IG5hbWVzIHNlcGFyYXRlbHkuCisgKgorICogVGhlIHVwc2hvdCBvZiBhbGwgb2YgdGhlc2UgcnVs ZXMgaXMgdGhhdCBpbiBzaW1wbGUgY2FzZXMsIHRoZSByZWxhdGlvbgorICogaWRlbnRpZmllciBp cyB0ZXh0dWFsbHkgaWRlbnRpY2FsIHRvIHRoZSBhbGlhcyBuYW1lLCBtYWtpbmcgbGlmZSBlYXNp ZXIKKyAqIGZvciB1c2Vycy4gSG93ZXZlciwgZXZlbiBpbiBjb21wbGV4IGNhc2VzLCBldmVyeSBy ZWxhdGlvbiBpZGVudGlmaWVyCisgKiBmb3IgYSBnaXZlbiBxdWVyeSB3aWxsIGJlIHVuaXF1ZSAo b3IgYXQgbGVhc3Qgd2UgaG9wZSBzbzogaWYgbm90LCB0aGlzCisgKiBjb2RlIGlzIGJ1Z2d5IGFu ZCB0aGUgaWRlbnRpZmllciBmb3JtYXQgbWlnaHQgbmVlZCB0byBiZSByZXRob3VnaHQpLgorICoK KyAqIEEga2V5IGdvYWwgb2YgdGhpcyBzeXN0ZW0gaXMgdGhhdCB3ZSB3YW50IHRvIGJlIGFibGUg dG8gcmVjb25zdHJ1Y3QgdGhlCisgKiBzYW1lIGlkZW50aWZpZXJzIGR1cmluZyBhIGZ1dHVyZSBw bGFubmluZyBjeWNsZSBmb3IgdGhlIHNhbWUgcXVlcnksIHNvCisgKiB0aGF0IGlmIGEgY2VydGFp biBiZWhhdmlvciBpcyBzcGVjaWZpZWQgZm9yIGEgY2VydGFpbiBpZGVudGlmaWVyLCB3ZSBjYW4K KyAqIHByb3Blcmx5IGlkZW50aWZ5IHRoZSBSVEkgZm9yIHdoaWNoIHRoYXQgYmVoYXZpb3IgaXMg bWFuZGF0ZWQuIEluIG9yZGVyCisgKiBmb3IgdGhpcyB0byB3b3JrLCBzdWJxdWVyeSBuYW1lcyBt dXN0IGJlIHVuaXF1ZSBhbmQga25vd24gYmVmb3JlIHRoZQorICogc3VicXVlcnkgaXMgcGxhbm5l ZCwgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIGlkZW50aWZpZXIgbXVzdCBub3QgZGVwZW5kCisg KiBvbiBhbnkgcGFydCBvZiB0aGUgcXVlcnkgb3V0c2lkZSBvZiB0aGUgY3VycmVudCBzdWJxdWVy eSBsZXZlbC4gSW4KKyAqIHBhcnRpY3VsYXIsIG9jY3VycmVuY2VfbnVtYmVyIG11c3QgYmUgY2Fs Y3VsYXRlZCByZWxhdGl2ZSB0byB0aGUgcmFuZ2UKKyAqIHRhYmxlIGZvciB0aGUgcmVsZXZhbnQg c3VicXVlcnksIG5vdCB0aGUgZmluYWwgZmxhdHRlbmVkIHJhbmdlIHRhYmxlLgorICoKKyAqIENv cHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYworICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5j bHVkZSAicGdwYV9pZGVudGlmaWVyLmgiCisKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgi CisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUu aCIKKworc3RhdGljIEluZGV4ICpwZ3BhX2NyZWF0ZV90b3BfcnRpX21hcChJbmRleCBydGFibGVf bGVuZ3RoLCBMaXN0ICpydGFibGUsCisJCQkJCQkJCQkgIExpc3QgKmFwcGluZm9zKTsKK3N0YXRp YyBpbnQJcGdwYV9vY2N1cnJlbmNlX251bWJlcihMaXN0ICpydGFibGUsIEluZGV4ICp0b3BfcnRp X21hcCwKKwkJCQkJCQkJICAgU3ViUGxhblJUSW5mbyAqcnRpbmZvLCBJbmRleCBydGkpOworCisv KgorICogQ3JlYXRlIGEgcmFuZ2UgdGFibGUgaWRlbnRpZmllciBmcm9tIHNjcmF0Y2guCisgKgor ICogVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGNhbGxlciB0byBkbyBhbGwgdGhlIGhlYXZ5IGxp ZnRpbmcsIHNvIGl0J3MKKyAqIGdlbmVyYWxseSBiZXR0ZXIgdG8gdXNlIG9uZSBvZiB0aGUgZnVu Y3Rpb25zIGJlbG93IGluc3RlYWQuCisgKgorICogU2VlIHRoZSBmaWxlIGhlYWRlciBjb21tZW50 cyBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBmb3JtYXQgb2YgYW4KKyAqIGlkZW50aWZpZXIuCisg Ki8KK2NvbnN0IGNoYXIgKgorcGdwYV9pZGVudGlmaWVyX3N0cmluZyhjb25zdCBwZ3BhX2lkZW50 aWZpZXIgKnJpZCkKK3sKKwljb25zdCBjaGFyICpyZXN1bHQ7CisKKwlBc3NlcnQocmlkLT5hbGlh c19uYW1lICE9IE5VTEwpOworCXJlc3VsdCA9IHF1b3RlX2lkZW50aWZpZXIocmlkLT5hbGlhc19u YW1lKTsKKworCUFzc2VydChyaWQtPm9jY3VycmVuY2UgPj0gMCk7CisJaWYgKHJpZC0+b2NjdXJy ZW5jZSA+IDEpCisJCXJlc3VsdCA9IHBzcHJpbnRmKCIlcyMlZCIsIHJlc3VsdCwgcmlkLT5vY2N1 cnJlbmNlKTsKKworCWlmIChyaWQtPnBhcnRyZWwgIT0gTlVMTCkKKwl7CisJCWlmIChyaWQtPnBh cnRuc3AgPT0gTlVMTCkKKwkJCXJlc3VsdCA9IHBzcHJpbnRmKCIlcy8lcyIsIHJlc3VsdCwKKwkJ CQkJCQkgIHF1b3RlX2lkZW50aWZpZXIocmlkLT5wYXJ0cmVsKSk7CisJCWVsc2UKKwkJCXJlc3Vs dCA9IHBzcHJpbnRmKCIlcy8lcy4lcyIsIHJlc3VsdCwKKwkJCQkJCQkgIHF1b3RlX2lkZW50aWZp ZXIocmlkLT5wYXJ0bnNwKSwKKwkJCQkJCQkgIHF1b3RlX2lkZW50aWZpZXIocmlkLT5wYXJ0cmVs KSk7CisJfQorCisJaWYgKHJpZC0+cGxhbl9uYW1lICE9IE5VTEwpCisJCXJlc3VsdCA9IHBzcHJp bnRmKCIlc0AlcyIsIHJlc3VsdCwgcXVvdGVfaWRlbnRpZmllcihyaWQtPnBsYW5fbmFtZSkpOwor CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENvbXB1dGUgYSByZWxhdGlvbiBpZGVudGlm aWVyIGZvciBhIHBhcnRpY3VsYXIgUlRJLgorICoKKyAqIFRoZSBjYWxsZXIgcHJvdmlkZXMgcm9v dCBhbmQgcnRpLCBhbmQgZ2V0cyB0aGUgbmVjZXNzYXJ5IGRldGFpbHMgYmFjayB2aWEKKyAqIHRo ZSByZW1haW5pbmcgcGFyYW1ldGVycy4KKyAqLwordm9pZAorcGdwYV9jb21wdXRlX2lkZW50aWZp ZXJfYnlfcnRpKFBsYW5uZXJJbmZvICpyb290LCBJbmRleCBydGksCisJCQkJCQkJICAgcGdwYV9p ZGVudGlmaWVyICpyaWQpCit7CisJSW5kZXgJCXRvcF9ydGkgPSBydGk7CisJaW50CQkJb2NjdXJy ZW5jZSA9IDE7CisJUmFuZ2VUYmxFbnRyeSAqcnRlOworCVJhbmdlVGJsRW50cnkgKnRvcF9ydGU7 CisJY2hhcgkgICAqcGFydG5zcCA9IE5VTEw7CisJY2hhcgkgICAqcGFydHJlbCA9IE5VTEw7CisK KwkvKgorCSAqIElmIHRoaXMgaXMgYSBjaGlsZCBSVEUsIGZpbmQgdGhlIHRvcG1vc3QgcGFyZW50 IHRoYXQgaXMgc3RpbGwgb2YgdHlwZQorCSAqIFJURV9SRUxBVElPTi4gV2UgZG8gdGhpcyBiZWNh dXNlIHdlIGlkZW50aWZ5IGNoaWxkcmVuIG9mIHBhcnRpdGlvbmVkCisJICogdGFibGVzIGJ5IHRo ZSBuYW1lIG9mIHRoZSBjaGlsZCB0YWJsZSwgYnV0IHN1YnF1ZXJpZXMgY2FuIGFsc28gaGF2ZQor CSAqIGNoaWxkIHJlbHMgYW5kIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhvc2UgaGVyZS4KKwkgKi8K Kwlmb3IgKDs7KQorCXsKKwkJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbzsKKwkJUmFuZ2VUYmxFbnRy eSAqcGFyZW50X3J0ZTsKKworCQkvKiBhcHBlbmRfcmVsX2FycmF5IGNhbiBiZSBOVUxMIGlmIHRo ZXJlIGFyZSBubyBjaGlsZHJlbiAqLworCQlpZiAocm9vdC0+YXBwZW5kX3JlbF9hcnJheSA9PSBO VUxMIHx8CisJCQkoYXBwaW5mbyA9IHJvb3QtPmFwcGVuZF9yZWxfYXJyYXlbdG9wX3J0aV0pID09 IE5VTEwpCisJCQlicmVhazsKKworCQlwYXJlbnRfcnRlID0gcGxhbm5lcl9ydF9mZXRjaChhcHBp bmZvLT5wYXJlbnRfcmVsaWQsIHJvb3QpOworCQlpZiAocGFyZW50X3J0ZS0+cnRla2luZCAhPSBS VEVfUkVMQVRJT04pCisJCQlicmVhazsKKworCQl0b3BfcnRpID0gYXBwaW5mby0+cGFyZW50X3Jl bGlkOworCX0KKworCS8qIEdldCB0aGUgcmFuZ2UgdGFibGUgZW50cmllcyBmb3IgdGhlIFJUSSBh bmQgdG9wIFJUSS4gKi8KKwlydGUgPSBwbGFubmVyX3J0X2ZldGNoKHJ0aSwgcm9vdCk7CisJdG9w X3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2godG9wX3J0aSwgcm9vdCk7CisJQXNzZXJ0KHJ0ZS0+cnRl a2luZCAhPSBSVEVfSk9JTik7CisJQXNzZXJ0KHRvcF9ydGUtPnJ0ZWtpbmQgIT0gUlRFX0pPSU4p OworCisJLyogV29yayBvdXQgdGhlIGNvcnJlY3Qgb2NjdXJyZW5jZSBudW1iZXIuICovCisJZm9y IChJbmRleCBwcmlvcl9ydGkgPSAxOyBwcmlvcl9ydGkgPCB0b3BfcnRpOyArK3ByaW9yX3J0aSkK Kwl7CisJCVJhbmdlVGJsRW50cnkgKnByaW9yX3J0ZTsKKwkJQXBwZW5kUmVsSW5mbyAqYXBwaW5m bzsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgY2hpbGQgcmVsIG9mIGEgcGFyZW50IHRoYXQg aXMgYSByZWxhdGlvbiwgc2tpcCBpdC4KKwkJICoKKwkJICogU3VjaCByYW5nZSB0YWJsZSBlbnRy aWVzIGFyZSBkaXNhbWJpZ3VhdGVkIGJ5IG1lbnRpb25pbmcgdGhlIHNjaGVtYQorCQkgKiBhbmQg bmFtZSBvZiB0aGUgdGFibGUsIG5vdCBieSBjb3VudGluZyB0aGVtIGFzIHNlcGFyYXRlIG9jY3Vy cmVuY2VzCisJCSAqIG9mIHRoZSBzYW1lIHRhYmxlLgorCQkgKgorCQkgKiBOQjogYXBwZW5kX3Jl bF9hcnJheSBjYW4gYmUgTlVMTCBpZiB0aGVyZSBhcmUgbm8gY2hpbGRyZW4KKwkJICovCisJCWlm IChyb290LT5hcHBlbmRfcmVsX2FycmF5ICE9IE5VTEwgJiYKKwkJCShhcHBpbmZvID0gcm9vdC0+ YXBwZW5kX3JlbF9hcnJheVtwcmlvcl9ydGldKSAhPSBOVUxMKQorCQl7CisJCQlSYW5nZVRibEVu dHJ5ICpwYXJlbnRfcnRlOworCisJCQlwYXJlbnRfcnRlID0gcGxhbm5lcl9ydF9mZXRjaChhcHBp bmZvLT5wYXJlbnRfcmVsaWQsIHJvb3QpOworCQkJaWYgKHBhcmVudF9ydGUtPnJ0ZWtpbmQgPT0g UlRFX1JFTEFUSU9OKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2tpcCBOVUxMIGVudHJp ZXMgYW5kIGpvaW5zLiAqLworCQlwcmlvcl9ydGUgPSBwbGFubmVyX3J0X2ZldGNoKHByaW9yX3J0 aSwgcm9vdCk7CisJCWlmIChwcmlvcl9ydGUgPT0gTlVMTCB8fCBwcmlvcl9ydGUtPnJ0ZWtpbmQg PT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKworCQkvKiBTa2lwIGlmIHRoZSBhbGlhcyBuYW1l IGRpZmZlcnMuICovCisJCWlmIChzdHJjbXAocHJpb3JfcnRlLT5lcmVmLT5hbGlhc25hbWUsIHJ0 ZS0+ZXJlZi0+YWxpYXNuYW1lKSAhPSAwKQorCQkJY29udGludWU7CisKKwkJLyogTG9va3MgbGlr ZSBhIHRydWUgZHVwbGljYXRlLiAqLworCQkrK29jY3VycmVuY2U7CisJfQorCisJLyogSWYgdGhp cyBpcyBhIGNoaWxkIHRhYmxlLCBnZXQgdGhlIHNjaGVtYSBhbmQgcmVsYXRpb24gbmFtZXMuICov CisJaWYgKHJ0aSAhPSB0b3BfcnRpKQorCXsKKwkJcGFydG5zcCA9IGdldF9uYW1lc3BhY2VfbmFt ZV9vcl90ZW1wKGdldF9yZWxfbmFtZXNwYWNlKHJ0ZS0+cmVsaWQpKTsKKwkJcGFydHJlbCA9IGdl dF9yZWxfbmFtZShydGUtPnJlbGlkKTsKKwl9CisKKwkvKiBPSywgd2UgaGF2ZSBhbGwgdGhlIGFu c3dlcnMgd2UgbmVlZC4gUmV0dXJuIHRoZW0gdG8gdGhlIGNhbGxlci4gKi8KKwlyaWQtPmFsaWFz X25hbWUgPSB0b3BfcnRlLT5lcmVmLT5hbGlhc25hbWU7CisJcmlkLT5vY2N1cnJlbmNlID0gb2Nj dXJyZW5jZTsKKwlyaWQtPnBhcnRuc3AgPSBwYXJ0bnNwOworCXJpZC0+cGFydHJlbCA9IHBhcnRy ZWw7CisJcmlkLT5wbGFuX25hbWUgPSByb290LT5wbGFuX25hbWU7Cit9CisKKy8qCisgKiBDb21w dXRlIGEgcmVsYXRpb24gaWRlbnRpZmllciBmb3IgYSBzZXQgb2YgUlRJcywgZXhjZXB0IGZvciBh bnkgUlRFX0pPSU4KKyAqIFJUSXMgdGhhdCBtYXkgYmUgcHJlc2VudC4KKyAqCisgKiBSVEVfSk9J TiBlbnRyaWVzIGFyZSBleGNsdWRlZCBiZWNhdXNlIHRoZXkgY2Fubm90IGJlIG1lbnRpb25lZCBi eSBwbGFuCisgKiBhZHZpY2UuCisgKgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3Ig bWFraW5nIHN1cmUgdGhhdCB0aGUgdGtleXMgYXJyYXkgaXMgbGFyZ2UKKyAqIGVub3VnaCB0byBz dG9yZSB0aGUgcmVzdWx0cy4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIg b2YgaWRlbnRpZmllcnMgY29tcHV0ZWQuCisgKi8KK2ludAorcGdwYV9jb21wdXRlX2lkZW50aWZp ZXJzX2J5X3JlbGlkcyhQbGFubmVySW5mbyAqcm9vdCwgQml0bWFwc2V0ICpyZWxpZHMsCisJCQkJ CQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkcykKK3sKKwlpbnQJCQljb3VudCA9IDA7CisJaW50 CQkJcnRpID0gLTE7CisKKwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0 aSkpID49IDApCisJeworCQlSYW5nZVRibEVudHJ5ICpydGUgPSBwbGFubmVyX3J0X2ZldGNoKHJ0 aSwgcm9vdCk7CisKKwkJaWYgKHJ0ZS0+cnRla2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVl OworCQlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcl9ieV9ydGkocm9vdCwgcnRpLCAmcmlkc1tjb3Vu dCsrXSk7CisJfQorCisJQXNzZXJ0KGNvdW50ID4gMCk7CisJcmV0dXJuIGNvdW50OworfQorCisv KgorICogQ3JlYXRlIGFuIGFycmF5IG9mIHJhbmdlIHRhYmxlIGlkZW50aWZpZXJzIGZvciBhbGwg dGhlIG5vbi1OVUxMLAorICogbm9uLVJURV9KT0lOIGVudHJpZXMgaW4gdGhlIFBsYW5uZWRTdG10 J3MgcmFuZ2UgdGFibGUuCisgKi8KK3BncGFfaWRlbnRpZmllciAqCitwZ3BhX2NyZWF0ZV9pZGVu dGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KFBsYW5uZWRTdG10ICpwc3RtdCkKK3sKKwlJbmRleAkJ cnRhYmxlX2xlbmd0aCA9IGxpc3RfbGVuZ3RoKHBzdG10LT5ydGFibGUpOworCXBncGFfaWRlbnRp ZmllciAqcmVzdWx0ID0gcGFsbG9jMF9hcnJheShwZ3BhX2lkZW50aWZpZXIsIHJ0YWJsZV9sZW5n dGgpOworCUluZGV4CSAgICp0b3BfcnRpX21hcDsKKwlpbnQJCQlydGluZm9pbmRleCA9IDA7CisJ U3ViUGxhblJUSW5mbyAqcnRpbmZvID0gTlVMTDsKKwlTdWJQbGFuUlRJbmZvICpuZXh0cnRpbmZv ID0gTlVMTDsKKworCS8qCisJICogQWNjb3VudCBmb3IgcmVsYXRpb25zIGFkZGRlZCBieSBpbmhl cml0YW5jZSBleHBhbnNpb24gb2YgcGFydGl0aW9uZWQKKwkgKiB0YWJsZXMuCisJICovCisJdG9w X3J0aV9tYXAgPSBwZ3BhX2NyZWF0ZV90b3BfcnRpX21hcChydGFibGVfbGVuZ3RoLCBwc3RtdC0+ cnRhYmxlLAorCQkJCQkJCQkJCSAgcHN0bXQtPmFwcGVuZFJlbGF0aW9ucyk7CisKKwkvKgorCSAq IFdoZW4gd2UgYmVnaW4gaXRlcmF0aW5nLCB3ZSdyZSBwcm9jZXNzaW5nIHRoZSBwb3J0aW9uIG9m IHRoZSByYW5nZQorCSAqIHRhYmxlIHRoYXQgb3JpZ2luYXRlZCBmcm9tIHRoZSB0b3AtbGV2ZWwg UGxhbm5lckluZm8sIHNvIHN1YnJ0aW5mbyBpcworCSAqIE5VTEwuIExhdGVyLCBzdWJydGluZm8g d2lsbCBiZSB0aGUgU3ViUGxhblJUSW5mbyBmb3IgdGhlIHN1YnF1ZXJ5IHdob3NlCisJICogcG9y dGlvbiBvZiB0aGUgcmFuZ2UgdGFibGUgd2UgYXJlIHByb2Nlc3NpbmcuIG5leHRydGluZm8gaXMg YWx3YXlzIHRoZQorCSAqIFN1YlBsYW5SVEluZm8gdGhhdCBmb2xsb3dzIHRoZSBjdXJyZW50IG9u ZSwgaWYgYW55LCBzbyB3aGVuIHdlJ3JlCisJICogcHJvY2Vzc2luZyB0aGUgdG9wLWxldmVsIHF1 ZXJ5J3MgcG9ydGlvbiBvZiB0aGUgcmFuZ2UgdGFibGUsIHRoZSBuZXh0CisJICogU3ViUGxhblJU SW5mbyBpcyB0aGUgdmVyeSBmaXJzdCBvbmUuCisJICovCisJaWYgKHBzdG10LT5zdWJydGluZm9z ICE9IE5VTEwpCisJCW5leHRydGluZm8gPSBsaW5pdGlhbChwc3RtdC0+c3VicnRpbmZvcyk7CisK KwkvKiBNYWluIGxvb3Agb3ZlciB0aGUgcmFuZ2UgdGFibGUuICovCisJZm9yIChJbmRleCBydGkg PSAxOyBydGkgPD0gcnRhYmxlX2xlbmd0aDsgcnRpKyspCisJeworCQljb25zdCBjaGFyICpwbGFu X25hbWU7CisJCUluZGV4CQl0b3BfcnRpOworCQlSYW5nZVRibEVudHJ5ICpydGU7CisJCVJhbmdl VGJsRW50cnkgKnRvcF9ydGU7CisJCWNoYXIJICAgKnBhcnRuc3AgPSBOVUxMOworCQljaGFyCSAg ICpwYXJ0cmVsID0gTlVMTDsKKwkJaW50CQkJb2NjdXJyZW5jZTsKKwkJcGdwYV9pZGVudGlmaWVy ICpyaWQ7CisKKwkJLyoKKwkJICogQWR2YW5jZSB0byB0aGUgbmV4dCBTdWJQbGFuUlRJbmZvLCBp ZiBpdCdzIHRpbWUgdG8gZG8gdGhhdC4KKwkJICoKKwkJICogVGhpcyBsb29wIHByb2JhYmx5IHNo b3VsZG4ndCBldmVyIGl0ZXJhdGUgbW9yZSB0aGFuIG9uY2UsIGJlY2F1c2UKKwkJICogdGhhdCB3 b3VsZCBpbXBseSB0aGF0IGEgc3VicXVlcnkgd2FzIHBsYW5uZWQgYnV0IGFkZGVkIG5vdGhpbmcg dG8KKwkJICogdGhlIHJhbmdlIHRhYmxlOyBidXQgbGV0J3MgYmUgZGVmZW5zaXZlIGFuZCBhc3N1 bWUgaXQgY2FuIGhhcHBlbi4KKwkJICovCisJCXdoaWxlIChuZXh0cnRpbmZvICE9IE5VTEwgJiYg cnRpID4gbmV4dHJ0aW5mby0+cnRvZmZzZXQpCisJCXsKKwkJCXJ0aW5mbyA9IG5leHRydGluZm87 CisJCQlpZiAoKytydGluZm9pbmRleCA+PSBsaXN0X2xlbmd0aChwc3RtdC0+c3VicnRpbmZvcykp CisJCQkJbmV4dHJ0aW5mbyA9IE5VTEw7CisJCQllbHNlCisJCQkJbmV4dHJ0aW5mbyA9IGxpc3Rf bnRoKHBzdG10LT5zdWJydGluZm9zLCBydGluZm9pbmRleCk7CisJCX0KKworCQkvKiBGZXRjaCB0 aGUgcmFuZ2UgdGFibGUgZW50cnksIGlmIGFueS4gKi8KKwkJcnRlID0gcnRfZmV0Y2gocnRpLCBw c3RtdC0+cnRhYmxlKTsKKworCQkvKgorCQkgKiBXZSBjYW4ndCBhbmQgZG9uJ3QgbmVlZCB0byBp ZGVudGlmeSBudWxsIGVudHJpZXMsIGFuZCB3ZSBkb24ndCB3YW50CisJCSAqIHRvIGlkZW50aWZ5 IGpvaW4gZW50cmllcy4KKwkJICovCisJCWlmIChydGUgPT0gTlVMTCB8fCBydGUtPnJ0ZWtpbmQg PT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIG5vdCBh IHJlbGF0aW9uIGFkZGVkIGJ5IHBhcnRpdGlvbmVkIHRhYmxlIGV4cGFuc2lvbiwKKwkJICogdGhl biB0aGUgdG9wIFJUSS9SVEUgYXJlIGp1c3QgdGhlIHNhbWUgYXMgdGhpcyBSVEkvUlRFLiBPdGhl cndpc2UsCisJCSAqIHdlIG5lZWQgdGhlIGluZm9ybWF0aW9uIGZvciB0aGUgdG9wIFJUSS9SVEUs IGFuZCBtdXN0IGFsc28gZmV0Y2gKKwkJICogdGhlIHBhcnRpdGlvbiBzY2hlbWEgYW5kIG5hbWUu CisJCSAqLworCQl0b3BfcnRpID0gdG9wX3J0aV9tYXBbcnRpIC0gMV07CisJCWlmIChydGkgPT0g dG9wX3J0aSkKKwkJCXRvcF9ydGUgPSBydGU7CisJCWVsc2UKKwkJeworCQkJdG9wX3J0ZSA9IHJ0 X2ZldGNoKHRvcF9ydGksIHBzdG10LT5ydGFibGUpOworCQkJcGFydG5zcCA9CisJCQkJZ2V0X25h bWVzcGFjZV9uYW1lX29yX3RlbXAoZ2V0X3JlbF9uYW1lc3BhY2UocnRlLT5yZWxpZCkpOworCQkJ cGFydHJlbCA9IGdldF9yZWxfbmFtZShydGUtPnJlbGlkKTsKKwkJfQorCisJCS8qIENvbXB1dGUg dGhlIGNvcnJlY3Qgb2NjdXJyZW5jZSBudW1iZXIuICovCisJCW9jY3VycmVuY2UgPSBwZ3BhX29j Y3VycmVuY2VfbnVtYmVyKHBzdG10LT5ydGFibGUsIHRvcF9ydGlfbWFwLAorCQkJCQkJCQkJCQly dGluZm8sIHRvcF9ydGkpOworCisJCS8qIEdldCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBwbGFu IChOVUxMIGZvciB0b3BsZXZlbCBxdWVyeSkuICovCisJCXBsYW5fbmFtZSA9IHJ0aW5mbyA9PSBO VUxMID8gTlVMTCA6IHJ0aW5mby0+cGxhbl9uYW1lOworCisJCS8qIFNhdmUgYWxsIHRoZSBkZXRh aWxzIHdlJ3ZlIGRlcml2ZWQuICovCisJCXJpZCA9ICZyZXN1bHRbcnRpIC0gMV07CisJCXJpZC0+ YWxpYXNfbmFtZSA9IHRvcF9ydGUtPmVyZWYtPmFsaWFzbmFtZTsKKwkJcmlkLT5vY2N1cnJlbmNl ID0gb2NjdXJyZW5jZTsKKwkJcmlkLT5wYXJ0bnNwID0gcGFydG5zcDsKKwkJcmlkLT5wYXJ0cmVs ID0gcGFydHJlbDsKKwkJcmlkLT5wbGFuX25hbWUgPSBwbGFuX25hbWU7CisJfQorCisJcmV0dXJu IHJlc3VsdDsKK30KKworLyoKKyAqIFNlYXJjaCBmb3IgYSBwZ3BhX2lkZW50aWZpZXIgaW4gdGhl IGFycmF5IG9mIGlkZW50aWZpZXJzIGNvbXB1dGVkIGZvciB0aGUKKyAqIHJhbmdlIHRhYmxlLiBJ ZiBleGFjdGx5IG9uZSBtYXRjaCBpcyBmb3VuZCwgcmV0dXJuIHRoZSBtYXRjaGluZyBSVEk7IGVs c2UKKyAqIHJldHVybiAwLgorICovCitJbmRleAorcGdwYV9jb21wdXRlX3J0aV9mcm9tX2lkZW50 aWZpZXIoaW50IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lk ZW50aWZpZXJzLAorCQkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpyaWQpCit7CisJSW5kZXgJCXJl c3VsdCA9IDA7CisKKwlmb3IgKEluZGV4IHJ0aSA9IDE7IHJ0aSA8PSBydGFibGVfbGVuZ3RoOyAr K3J0aSkKKwl7CisJCXBncGFfaWRlbnRpZmllciAqcnRpX3JpZCA9ICZydF9pZGVudGlmaWVyc1ty dGkgLSAxXTsKKworCQkvKiBJZiB0aGVyZSdzIG5vIGlkZW50aWZpZXIgZm9yIHRoaXMgUlRJLCBz a2lwIGl0LiAqLworCQlpZiAocnRpX3JpZC0+YWxpYXNfbmFtZSA9PSBOVUxMKQorCQkJY29udGlu dWU7CisKKwkJLyoKKwkJICogSWYgaXQgbWF0Y2hlcywgcmV0dXJuIHRoaXMgUlRJLiBBcyB1c3Vh bCwgYW4gb21pdHRlZCBwYXJ0aXRpb24KKwkJICogc2NoZW1hIG1hdGNoZXMgYW55dGhpbmcsIGJ1 dCBwYXJ0aXRpb24gYW5kIHBsYW4gbmFtZXMgbXVzdCBlaXRoZXIKKwkJICogbWF0Y2ggZXhhY3Rs eSBvciBiZSBvbWl0dGVkIG9uIGJvdGggc2lkZXMuCisJCSAqLworCQlpZiAoc3RyY21wKHJpZC0+ YWxpYXNfbmFtZSwgcnRpX3JpZC0+YWxpYXNfbmFtZSkgPT0gMCAmJgorCQkJcmlkLT5vY2N1cnJl bmNlID09IHJ0aV9yaWQtPm9jY3VycmVuY2UgJiYKKwkJCShyaWQtPnBhcnRuc3AgPT0gTlVMTCB8 fCBydGlfcmlkLT5wYXJ0bnNwID09IE5VTEwgfHwKKwkJCSBzdHJjbXAocmlkLT5wYXJ0bnNwLCBy dGlfcmlkLT5wYXJ0bnNwKSA9PSAwKSAmJgorCQkJc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwo cmlkLT5wYXJ0cmVsLCBydGlfcmlkLT5wYXJ0cmVsKSAmJgorCQkJc3RyaW5nc19lcXVhbF9vcl9i b3RoX251bGwocmlkLT5wbGFuX25hbWUsIHJ0aV9yaWQtPnBsYW5fbmFtZSkpCisJCXsKKwkJCWlm IChyZXN1bHQgIT0gMCkKKwkJCXsKKwkJCQkvKiBNdWx0aXBsZSBtYXRjaGVzIHdlcmUgZm91bmQu ICovCisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlyZXN1bHQgPSBydGk7CisJCX0KKwl9CisKKwly ZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQnVpbGQgYSBtYXBwaW5nIGZyb20gZWFjaCBSVEkg dG8gdGhlIFJUSSB3aG9zZSBhbGlhc19uYW1lIHdpbGwgYmUgdXNlZCB0bworICogY29uc3RydWN0 IHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVyLgorICoKKyAqIEZvciBjaGlsZCByZWxhdGlvbnMs IHRoaXMgaXMgdGhlIHRvcG1vc3QgcGFyZW50IHRoYXQgaXMgc3RpbGwgb2YgdHlwZQorICogUlRF X1JFTEFUSU9OLiBGb3Igb3RoZXIgcmVsYXRpb25zLCBpdCdzIGp1c3QgdGhlIG9yaWdpbmFsIFJU SS4KKyAqCisgKiBTaW5jZSB3ZSdyZSBldmVudHVhbGx5IGdvaW5nIHRvIG5lZWQgdGhpcyBpbmZv cm1hdGlvbiBmb3IgZXZlcnkgUlRJIGluCisgKiB0aGUgcmFuZ2UgdGFibGUsIGl0J3MgYmVzdCB0 byBjb21wdXRlIGFsbCB0aGUgYW5zd2VycyBpbiBhIHNpbmdsZSBwYXNzIG92ZXIKKyAqIHRoZSBB cHBlbmRSZWxJbmZvIGxpc3QuIE90aGVyd2lzZSwgd2UgbWlnaHQgZW5kIHVwIHNlYXJjaGluZyB0 aHJvdWdoIHRoYXQKKyAqIGxpc3QgcmVwZWF0ZWRseSBmb3IgZW50cmllcyBvZiBpbnRlcmVzdC4K KyAqCisgKiBOb3RlIHRoYXQgdGhlIHJldHVybmVkIGFycmF5IGlzIHVzZXMgemVyby1iYXNlZCBp bmRleGluZywgd2hpbGUgUlRJcyB1c2UKKyAqIDEtYmFzZWQgaW5kZXhpbmcsIHNvIHN1YnRyYWN0 IDEgZnJvbSB0aGUgUlRJIGJlZm9yZSBsb29raW5nIGl0IHVwIGluIHRoZQorICogYXJyYXkuCisg Ki8KK3N0YXRpYyBJbmRleCAqCitwZ3BhX2NyZWF0ZV90b3BfcnRpX21hcChJbmRleCBydGFibGVf bGVuZ3RoLCBMaXN0ICpydGFibGUsIExpc3QgKmFwcGluZm9zKQoreworCUluZGV4CSAgICp0b3Bf cnRpX21hcCA9IHBhbGxvYzBfYXJyYXkoSW5kZXgsIHJ0YWJsZV9sZW5ndGgpOworCisJLyogSW5p dGlhbGx5LCBtYWtlIGV2ZXJ5IFJUSSBwb2ludCB0byBpdHNlbGYuICovCisJZm9yIChJbmRleCBy dGkgPSAxOyBydGkgPD0gcnRhYmxlX2xlbmd0aDsgKytydGkpCisJCXRvcF9ydGlfbWFwW3J0aSAt IDFdID0gcnRpOworCisJLyogVXBkYXRlIHRoZSBtYXAgZm9yIGVhY2ggQXBwZW5kUmVsSW5mbyBv YmplY3QuICovCisJZm9yZWFjaF9ub2RlKEFwcGVuZFJlbEluZm8sIGFwcGluZm8sIGFwcGluZm9z KQorCXsKKwkJSW5kZXgJCXBhcmVudF9ydGkgPSBhcHBpbmZvLT5wYXJlbnRfcmVsaWQ7CisJCVJh bmdlVGJsRW50cnkgKnBhcmVudF9ydGUgPSBydF9mZXRjaChwYXJlbnRfcnRpLCBydGFibGUpOwor CisJCS8qIElmIHRoZSBwYXJlbnQgaXMgbm90IFJURV9SRUxBVElPTiwgaWdub3JlIHRoaXMgZW50 cnkuICovCisJCWlmIChwYXJlbnRfcnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikKKwkJCWNv bnRpbnVlOworCisJCS8qCisJCSAqIE1hcCB0aGUgY2hpbGQgdG8gd2hlcmV2ZXIgd2UgbWFwcGVk IHRoZSBwYXJlbnQuIFBhcmVudHMgYWx3YXlzCisJCSAqIHByZWNlZGUgdGhlaXIgY2hpbGRyZW4g aW4gdGhlIEFwcGVuZFJlbEluZm8gbGlzdCwgc28gdGhpcyBzaG91bGQKKwkJICogd29yayBvdXQu CisJCSAqLworCQl0b3BfcnRpX21hcFthcHBpbmZvLT5jaGlsZF9yZWxpZCAtIDFdID0gdG9wX3J0 aV9tYXBbcGFyZW50X3J0aSAtIDFdOworCX0KKworCXJldHVybiB0b3BfcnRpX21hcDsKK30KKwor LyoKKyAqIEZpbmQgdGhlIG9jY3VyZW5jZSBudW1iZXIgb2YgYSBjZXJ0YWluIHJlbGF0aW9uIHdp dGhpbiBhIGNlcnRhaW4gc3VicXVlcnkuCisgKgorICogVGhlIHNhbWUgYWxpYXMgbmFtZSBjYW4g b2NjdXIgbXVsdGlwbGUgdGltZXMgd2l0aGluIGEgc3VicXVlcnksIGJ1dCB3ZSB3YW50CisgKiB0 byBkaXNhbWJpZ3VhdGUgYnkgZ2l2aW5nIGRpZmZlcmVudCBvY2N1cnJlbmNlcyBkaWZmZXJlbnQg aW50ZWdlciBpbmRleGVzLgorICogSG93ZXZlciwgY2hpbGQgdGFibGVzIGFyZSBkaXNhbWJpZ3Vh dGVkIGJ5IGluY2x1ZGluZyB0aGUgdGFibGUgbmFtZSByYXRoZXIKKyAqIHRoYW4gYnkgaW5jcmVt ZW50aW5nIHRoZSBvY2N1cnJlbmNlIG51bWJlcjsgYW5kIGpvaW5zIGFyZSBub3QgbmFtZWQgYW5k IHNvCisgKiBzaG91bGRuJ3QgaW5jcmVtZW50IHRoZSBvY2N1cmVuY2UgbnVtYmVyIGVpdGhlci4K KyAqLworc3RhdGljIGludAorcGdwYV9vY2N1cnJlbmNlX251bWJlcihMaXN0ICpydGFibGUsIElu ZGV4ICp0b3BfcnRpX21hcCwKKwkJCQkJICAgU3ViUGxhblJUSW5mbyAqcnRpbmZvLCBJbmRleCBy dGkpCit7CisJSW5kZXgJCXJ0b2Zmc2V0ID0gKHJ0aW5mbyA9PSBOVUxMKSA/IDAgOiBydGluZm8t PnJ0b2Zmc2V0OworCWludAkJCW9jY3VycmVuY2UgPSAxOworCVJhbmdlVGJsRW50cnkgKnJ0ZSA9 IHJ0X2ZldGNoKHJ0aSwgcnRhYmxlKTsKKworCWZvciAoSW5kZXggcHJpb3JfcnRpID0gcnRvZmZz ZXQgKyAxOyBwcmlvcl9ydGkgPCBydGk7ICsrcHJpb3JfcnRpKQorCXsKKwkJUmFuZ2VUYmxFbnRy eSAqcHJpb3JfcnRlOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgYSBjaGlsZCByZWwgb2YgYSBw YXJlbnQgdGhhdCBpcyBhIHJlbGF0aW9uLCBza2lwIGl0LgorCQkgKgorCQkgKiBTdWNoIHJhbmdl IHRhYmxlIGVudHJpZXMgYXJlIGRpc2FtYmlndWF0ZWQgYnkgbWVudGlvbmluZyB0aGUgc2NoZW1h CisJCSAqIGFuZCBuYW1lIG9mIHRoZSB0YWJsZSwgbm90IGJ5IGNvdW50aW5nIHRoZW0gYXMgc2Vw YXJhdGUgb2NjdXJyZW5jZXMKKwkJICogb2YgdGhlIHNhbWUgdGFibGUuCisJCSAqLworCQlpZiAo dG9wX3J0aV9tYXBbcHJpb3JfcnRpIC0gMV0gIT0gcHJpb3JfcnRpKQorCQkJY29udGludWU7CisK KwkJLyogU2tpcCBqb2lucy4gKi8KKwkJcHJpb3JfcnRlID0gcnRfZmV0Y2gocHJpb3JfcnRpLCBy dGFibGUpOworCQlpZiAocHJpb3JfcnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGlu dWU7CisKKwkJLyogU2tpcCBpZiB0aGUgYWxpYXMgbmFtZSBkaWZmZXJzLiAqLworCQlpZiAoc3Ry Y21wKHByaW9yX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lLCBydGUtPmVyZWYtPmFsaWFzbmFtZSkgIT0g MCkKKwkJCWNvbnRpbnVlOworCisJCS8qIExvb2tzIGxpa2UgYSB0cnVlIGR1cGxpY2F0ZS4gKi8K KwkJKytvY2N1cnJlbmNlOworCX0KKworCXJldHVybiBvY2N1cnJlbmNlOworfQpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaCBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmIwMDBkMmI3MDgxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaApAQCAtMCwwICsxLDUyIEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiBwZ3BhX2lkZW50aWZpZXIuaAorICoJICBjcmVhdGUgYXBwcm9wcmlh dGUgaWRlbnRpZmllcnMgZm9yIHJhbmdlIHRhYmxlIGVudHJpZXMKKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisg KgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworCisjaWZuZGVmIFBHUEFfSURFTlRJRklFUl9ICisjZGVmaW5lIFBH UEFfSURFTlRJRklFUl9ICisKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKyNpbmNsdWRl ICJub2Rlcy9wbGFubm9kZXMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9pZGVudGlmaWVyCit7 CisJY29uc3QgY2hhciAqYWxpYXNfbmFtZTsKKwlpbnQJCQlvY2N1cnJlbmNlOworCWNvbnN0IGNo YXIgKnBhcnRuc3A7CisJY29uc3QgY2hhciAqcGFydHJlbDsKKwljb25zdCBjaGFyICpwbGFuX25h bWU7Cit9IHBncGFfaWRlbnRpZmllcjsKKworLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNv bXBhcmluZyBwb3NzaWJseS1OVUxMIHN0cmluZ3MuICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3N0 cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7 CisJaWYgKGEgPT0gYikKKwkJcmV0dXJuIHRydWU7CisJZWxzZSBpZiAoYSA9PSBOVUxMIHx8IGIg PT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCWVsc2UKKwkJcmV0dXJuIHN0cmNtcChhLCBiKSA9 PSAwOworfQorCitleHRlcm4gY29uc3QgY2hhciAqcGdwYV9pZGVudGlmaWVyX3N0cmluZyhjb25z dCBwZ3BhX2lkZW50aWZpZXIgKnJpZCk7CitleHRlcm4gdm9pZCBwZ3BhX2NvbXB1dGVfaWRlbnRp Zmllcl9ieV9ydGkoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJ0aSwKKwkJCQkJCQkJCQkgICBw Z3BhX2lkZW50aWZpZXIgKnJpZCk7CitleHRlcm4gaW50CXBncGFfY29tcHV0ZV9pZGVudGlmaWVy c19ieV9yZWxpZHMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAq cmVsaWRzLAorCQkJCQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMpOworZXh0ZXJuIHBn cGFfaWRlbnRpZmllciAqcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdChQ bGFubmVkU3RtdCAqcHN0bXQpOworCitleHRlcm4gSW5kZXggcGdwYV9jb21wdXRlX3J0aV9mcm9t X2lkZW50aWZpZXIoaW50IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlm aWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZCk7 CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4u YyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVjOGUxYTY2NmVjCi0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwpAQCAtMCwwICsxLDYyOSBAQAorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9qb2luLmMKKyAqCSAgYW5hbHlzaXMgb2Ygam9pbnMg aW4gUGxhbiB0cmVlcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX2pvaW4uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJw b3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9qb2luLmgiCisjaW5jbHVkZSAicGdwYV9zY2Fu LmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rl cy5oIgorI2luY2x1ZGUgIm5vZGVzL3ByaW50LmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJl ZS5oIgorCisvKgorICogVGVtcG9yYXJ5IG9iamVjdCB1c2VkIHdoZW4gdW5yb2xsaW5nIGEgam9p biB0cmVlLgorICovCitzdHJ1Y3QgcGdwYV9qb2luX3Vucm9sbGVyCit7CisJdW5zaWduZWQJbmFs bG9jYXRlZDsKKwl1bnNpZ25lZAludXNlZDsKKwlQbGFuCSAgICpvdXRlcl9zdWJwbGFuOworCUVs aWRlZE5vZGUgKm91dGVyX2VsaWRlZF9ub2RlOworCWJvb2wJCW91dGVyX2JlbmVhdGhfYW55X2dh dGhlcjsKKwlwZ3BhX2pvaW5fc3RyYXRlZ3kgKnN0cmF0ZWd5OworCVBsYW4JICAqKmlubmVyX3N1 YnBsYW5zOworCUVsaWRlZE5vZGUgKippbm5lcl9lbGlkZWRfbm9kZXM7CisJcGdwYV9qb2luX3Vu cm9sbGVyICoqaW5uZXJfdW5yb2xsZXJzOworCWJvb2wJICAgKmlubmVyX2JlbmVhdGhfYW55X2dh dGhlcjsKK307CisKK3N0YXRpYyBwZ3BhX2pvaW5fc3RyYXRlZ3kgcGdwYV9kZWNvbXBvc2Vfam9p bihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJICBQbGFuICpw bGFuLAorCQkJCQkJCQkJCQkgIFBsYW4gKipyZWFsb3V0ZXIsCisJCQkJCQkJCQkJCSAgUGxhbiAq KnJlYWxpbm5lciwKKwkJCQkJCQkJCQkJICBFbGlkZWROb2RlICoqZWxpZGVkcmVhbG91dGVyLAor CQkJCQkJCQkJCQkgIEVsaWRlZE5vZGUgKiplbGlkZWRyZWFsaW5uZXIsCisJCQkJCQkJCQkJCSAg Ym9vbCAqZm91bmRfYW55X291dGVyX2dhdGhlciwKKwkJCQkJCQkJCQkJICBib29sICpmb3VuZF9h bnlfaW5uZXJfZ2F0aGVyKTsKK3N0YXRpYyBFbGlkZWROb2RlICpwZ3BhX2Rlc2NlbmRfbm9kZShQ bGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuKTsKK3N0YXRpYyBFbGlkZWROb2RlICpwZ3Bh X2Rlc2NlbmRfYW55X2dhdGhlcihQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJ CQkJCQkJCSAgIGJvb2wgKmZvdW5kX2FueV9nYXRoZXIpOworc3RhdGljIGJvb2wgcGdwYV9kZXNj ZW5kX2FueV91bmlxdWUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCQkJ CUVsaWRlZE5vZGUgKiplbGlkZWRfbm9kZSk7CisKK3N0YXRpYyBib29sIGlzX3Jlc3VsdF9ub2Rl X3dpdGhfY2hpbGQoUGxhbiAqcGxhbik7CitzdGF0aWMgYm9vbCBpc19zb3J0aW5nX3BsYW4oUGxh biAqcGxhbik7CisKKy8qCisgKiBDcmVhdGUgYW4gaW5pdGlhbGx5LWVtcHR5IG9iamVjdCBmb3Ig dW5yb2xsaW5nIGpvaW5zLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIGhlbHBlciBv YmplY3QgdGhhdCBjYW4gbGF0ZXIgYmUgdXNlZCB0byBjcmVhdGUgYQorICogcGdwYV91bnJvbGxl ZF9qb2luLCBhZnRlciBmaXJzdCBjYWxsaW5nIHBncGFfdW5yb2xsX2pvaW4gb25lIG9yIG1vcmUg dGltZXMuCisgKi8KK3BncGFfam9pbl91bnJvbGxlciAqCitwZ3BhX2NyZWF0ZV9qb2luX3Vucm9s bGVyKHZvaWQpCit7CisJcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyOworCisJam9p bl91bnJvbGxlciA9IHBhbGxvYzBfb2JqZWN0KHBncGFfam9pbl91bnJvbGxlcik7CisJam9pbl91 bnJvbGxlci0+bmFsbG9jYXRlZCA9IDQ7CisJam9pbl91bnJvbGxlci0+c3RyYXRlZ3kgPQorCQlw YWxsb2NfYXJyYXkocGdwYV9qb2luX3N0cmF0ZWd5LCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVk KTsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFucyA9CisJCXBhbGxvY19hcnJheShQbGFu ICosIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2Vs aWRlZF9ub2RlcyA9CisJCXBhbGxvY19hcnJheShFbGlkZWROb2RlICosIGpvaW5fdW5yb2xsZXIt Pm5hbGxvY2F0ZWQpOworCWpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVycyA9CisJCXBhbGxv Y19hcnJheShwZ3BhX2pvaW5fdW5yb2xsZXIgKiwgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7 CisJam9pbl91bnJvbGxlci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyID0KKwkJcGFsbG9jX2Fy cmF5KGJvb2wsIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCisJcmV0dXJuIGpvaW5fdW5y b2xsZXI7Cit9CisKKy8qCisgKiBVbnJvbGwgb25lIGxldmVsIG9mIGFuIHVucm9sbGFibGUgam9p biB0cmVlLgorICoKKyAqIE91ciBiYXNpYyBnb2FsIGhlcmUgaXMgdG8gdW5yb2xsIGpvaW4gdHJl ZXMgYXMgdGhleSBvY2N1ciBpbiB0aGUgUGxhbgorICogdHJlZSBpbnRvIGEgc2ltcGxlciBhbmQg bW9yZSByZWd1bGFyIHN0cnVjdHVyZSB0aGF0IHdlIGNhbiBtb3JlIGVhc2lseQorICogdXNlIGZv ciBmdXJ0aGVyIHByb2Nlc3NpbmcuIFVucm9sbGluZyBpcyBvdXRlci1kZWVwLCBzbyBpZiB0aGUg cGxhbiB0cmVlCisgKiBoYXMgSm9pbjEoSm9pbjIoQSxCKSxKb2luMyhDLEQpKSwgdGhlIHNhbWUg am9pbiB1bnJvbGxlciBvYmplY3Qgc2hvdWxkIGJlCisgKiB1c2VkIGZvciBKb2luMSBhbmQgSm9p bjIsIGJ1dCBhIGRpZmZlcmVudCBvbmUgd2lsbCBiZSBuZWVkZWQgZm9yIEpvaW4zLAorICogc2lu Y2UgdGhhdCBpbnZvbHZlcyBhIGpvaW4gd2l0aGluIHRoZSAqaW5uZXIqIHNpZGUgb2YgYW5vdGhl ciBqb2luLgorICoKKyAqIHBncGFfcGxhbl93YWxrZXIgY3JlYXRlcyBhICJ0b3AgbGV2ZWwiIGpv aW4gdW5yb2xsZXIgb2JqZWN0IHdoZW4gaXQKKyAqIGVuY291bnRlcnMgYSBqb2luIGluIGEgcG9y dGlvbiBvZiB0aGUgcGxhbiB0cmVlIGluIHdoaWNoIG5vIGpvaW4gdW5yb2xsZXIKKyAqIGlzIGFs cmVhZHkgYWN0aXZlLiBGcm9tIHRoZXJlLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZv ciBkZXRlcm1pbmcKKyAqIHRvIHdoYXQgcG9ydGlvbiBvZiB0aGUgcGxhbiB0cmVlIHRoYXQgam9p biB1bnJvbGxlciBhcHBsaWVzLCBhbmQgZm9yCisgKiBjcmVhdGluZyBhbnkgc3Vib3JkaW5hdGUg am9pbiB1bnJvbGxlciBvYmplY3RzIHRoYXQgYXJlIG5lZWRlZCBhcyBhIHJlc3VsdAorICogb2Yg bm9uLW91dGVyLWRlZXAgam9pbiB0cmVlcy4gV2UgZG8gdGhpcyBieSByZXR1cm5pbmcgdGhlIGpv aW4gdW5yb2xsZXIKKyAqIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgZnVydGhlciB0 cmF2ZXJzYWwgb2YgdGhlIG91dGVyIGFuZCBpbm5lcgorICogc3VidHJlZXMgb2YgdGhlIGN1cnJl bnQgcGxhbiBub2RlIHZpYSAqb3V0ZXJfam9pbl91bnJvbGxlciBhbmQKKyAqICppbm5lcl9qb2lu X3Vucm9sbGVyLCByZXNwZWN0aXZlbHkuCisgKi8KK3ZvaWQKK3BncGFfdW5yb2xsX2pvaW4ocGdw YV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJIGJvb2wgYmVu ZWF0aF9hbnlfZ2F0aGVyLAorCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIs CisJCQkJIHBncGFfam9pbl91bnJvbGxlciAqKm91dGVyX2pvaW5fdW5yb2xsZXIsCisJCQkJIHBn cGFfam9pbl91bnJvbGxlciAqKmlubmVyX2pvaW5fdW5yb2xsZXIpCit7CisJcGdwYV9qb2luX3N0 cmF0ZWd5IHN0cmF0ZWd5OworCVBsYW4JICAgKnJlYWxpbm5lciwKKwkJCSAgICpyZWFsb3V0ZXI7 CisJRWxpZGVkTm9kZSAqZWxpZGVkaW5uZXIsCisJCQkgICAqZWxpZGVkb3V0ZXI7CisJaW50CQkJ bjsKKwlib29sCQlmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyID0gZmFsc2U7CisJYm9vbAkJZm91bmRf YW55X2lubmVyX2dhdGhlciA9IGZhbHNlOworCisJQXNzZXJ0KGpvaW5fdW5yb2xsZXIgIT0gTlVM TCk7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gcGFzcyB0aGUgam9pbl91bnJvbGxlciBvYmplY3Qg ZG93biB0aHJvdWdoIGNlcnRhaW4gdHlwZXMgb2YKKwkgKiBwbGFuIG5vZGVzIC0tIGFueXRoaW5n IHRoYXQncyBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGpvaW4gc3RyYXRlZ3ksIGFuZAorCSAqIGFu eSBvdGhlciBub2RlcyB0aGF0IGNhbiBvY2N1ciBpbiBhIGpvaW4gdHJlZSBkZXNwaXRlIG5vdCBi ZWluZyBzY2FucworCSAqIG9yIGpvaW5zLgorCSAqCisJICogVGhpcyBpbmNsdWRlczoKKwkgKgor CSAqICgxKSBNYXRlcmlhbGl6ZSwgTWVtb2l6ZSwgYW5kIEhhc2ggbm9kZXMsIHdoaWNoIGFyZSBw YXJ0IG9mIHRoZSBqb2luCisJICogc3RyYXRlZ3ksCisJICoKKwkgKiAoMikgR2F0aGVyIGFuZCBH YXRoZXIgTWVyZ2Ugbm9kZXMsIHdoaWNoIGNhbiBvY2N1ciBhdCBhbnkgcG9pbnQgaW4gdGhlCisJ ICogam9pbiB0cmVlIHdoZXJlIHRoZSBwbGFubmVyIGRlY2lkZWQgdG8gaW5pdGlhdGUgcGFyYWxs ZWxpc20sCisJICoKKwkgKiAoMykgU29ydCBhbmQgSW5jcmVtZW50YWxTb3J0IG5vZGVzLCB3aGlj aCBjYW4gb2NjdXIgYmVuZWF0aCBNZXJnZUpvaW4KKwkgKiBvciBHYXRoZXJNZXJnZSwKKwkgKgor CSAqICg0KSBBZ2cgYW5kIFVuaXF1ZSBub2Rlcywgd2hpY2ggY2FuIG9jY3VyIHdoZW4gd2UgZGVj aWRlIHRvIG1ha2UgdGhlCisJICogbnVsbGFibGUgc2lkZSBvZiBhIHNlbWlqb2luIHVuaXF1ZSBh bmQgdGhlbiBqb2luIHRoZSByZXN1bHQsIGFuZAorCSAqCisJICogKDUpIFJlc3VsdCBub2RlcyB3 aXRoIGNoaWxkcmVuLCB3aGljaCBjYW4gYmUgYWRkZWQgZWl0aGVyIHRvIHByb2plY3QgdG8KKwkg KiBlbmZvcmNlIGEgb25lLXRpbWUgZmlsdGVyIChidXQgUmVzdWx0IG5vZGVzIHdpdGhvdXQgY2hp bGRyZW4gYXJlCisJICogZGVnZW5lcmF0ZSBzY2FucyBvciBqb2lucykuCisJICovCisJaWYgKElz QShwbGFuLCBNYXRlcmlhbCkgfHwgSXNBKHBsYW4sIE1lbW9pemUpIHx8IElzQShwbGFuLCBIYXNo KQorCQl8fCBJc0EocGxhbiwgR2F0aGVyKSB8fCBJc0EocGxhbiwgR2F0aGVyTWVyZ2UpCisJCXx8 IGlzX3NvcnRpbmdfcGxhbihwbGFuKSB8fCBJc0EocGxhbiwgQWdnKSB8fCBJc0EocGxhbiwgVW5p cXVlKQorCQl8fCBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKHBsYW4pKQorCXsKKwkJKm91dGVy X2pvaW5fdW5yb2xsZXIgPSBqb2luX3Vucm9sbGVyOworCQlyZXR1cm47CisJfQorCisJLyoKKwkg KiBTaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgbm9kZXMgdGhhdCByZXF1aXJlIHBhc3MtdGhy b3VnaCB0cmVhdG1lbnQsCisJICogdGhpcyBzaG91bGQgYmUgYW4gdW5yb2xsYWJsZSBqb2luLgor CSAqLworCXN0cmF0ZWd5ID0gcGdwYV9kZWNvbXBvc2Vfam9pbih3YWxrZXIsIHBsYW4sCisJCQkJ CQkJCSAgICZyZWFsb3V0ZXIsICZyZWFsaW5uZXIsCisJCQkJCQkJCSAgICZlbGlkZWRvdXRlciwg JmVsaWRlZGlubmVyLAorCQkJCQkJCQkgICAmZm91bmRfYW55X291dGVyX2dhdGhlciwKKwkJCQkJ CQkJICAgJmZvdW5kX2FueV9pbm5lcl9nYXRoZXIpOworCisJLyogSWYgb3VyIHdvcmtzcGFjZSBp cyBmdWxsLCBleHBhbmQgaXQuICovCisJaWYgKGpvaW5fdW5yb2xsZXItPm51c2VkID49IGpvaW5f dW5yb2xsZXItPm5hbGxvY2F0ZWQpCisJeworCQlqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkICo9 IDI7CisJCWpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5ID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5f dW5yb2xsZXItPnN0cmF0ZWd5LAorCQkJCQkJICAgcGdwYV9qb2luX3N0cmF0ZWd5LAorCQkJCQkJ ICAgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX3N1 YnBsYW5zID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5yb2xsZXItPmlubmVyX3N1YnBsYW5z LAorCQkJCQkJICAgUGxhbiAqLAorCQkJCQkJICAgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7 CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2RlcyA9CisJCQlyZXBhbGxvY19hcnJh eShqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMsCisJCQkJCQkgICBFbGlkZWROb2Rl ICosCisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9pbl91bnJvbGxl ci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5y b2xsZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCSAgIGJvb2wsCisJCQkJCQkg ICBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9pbl91bnJvbGxlci0+aW5uZXJfdW5y b2xsZXJzID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVy cywKKwkJCQkJCSAgIHBncGFfam9pbl91bnJvbGxlciAqLAorCQkJCQkJICAgam9pbl91bnJvbGxl ci0+bmFsbG9jYXRlZCk7CisJfQorCisJLyoKKwkgKiBTaW5jZSB3ZSdyZSBmbGF0dGVuaW5nIG91 dGVyLWRlZXAgam9pbiB0cmVlcywgaXQgZm9sbG93cyB0aGF0IGlmIHRoZQorCSAqIG91dGVyIHNp ZGUgaXMgc3RpbGwgYW4gdW5yb2xsYWJsZSBqb2luLCBpdCBzaG91bGQgYmUgdW5yb2xsZWQgaW50 byB0aGlzCisJICogc2FtZSBvYmplY3QuIE90aGVyd2lzZSwgd2UndmUgcmVhY2hlZCB0aGUgbGlt aXQgb2Ygd2hhdCB3ZSBjYW4gdW5yb2xsCisJICogaW50byB0aGlzIG9iamVjdCBhbmQgbXVzdCBy ZW1lbWJlciB0aGUgb3V0ZXIgc2lkZSBhcyB0aGUgZmluYWwgb3V0ZXIKKwkgKiBzdWJwbGFuLgor CSAqLworCWlmIChlbGlkZWRvdXRlciA9PSBOVUxMICYmIHBncGFfaXNfam9pbihyZWFsb3V0ZXIp KQorCQkqb3V0ZXJfam9pbl91bnJvbGxlciA9IGpvaW5fdW5yb2xsZXI7CisJZWxzZQorCXsKKwkJ am9pbl91bnJvbGxlci0+b3V0ZXJfc3VicGxhbiA9IHJlYWxvdXRlcjsKKwkJam9pbl91bnJvbGxl ci0+b3V0ZXJfZWxpZGVkX25vZGUgPSBlbGlkZWRvdXRlcjsKKwkJam9pbl91bnJvbGxlci0+b3V0 ZXJfYmVuZWF0aF9hbnlfZ2F0aGVyID0KKwkJCWJlbmVhdGhfYW55X2dhdGhlciB8fCBmb3VuZF9h bnlfb3V0ZXJfZ2F0aGVyOworCX0KKworCS8qCisJICogU3RvcmUgdGhlIGlubmVyIHN1YnBsYW4u IElmIGl0J3MgYW4gdW5yb2xsYWJsZSBqb2luLCBpdCBuZWVkcyB0byBiZQorCSAqIGZsYXR0ZW5l ZCBpbiB0dXJuLCBidXQgaW50byBhIG5ldyB1bnJvbGxlciBvYmplY3QsIG5vdCB0aGlzIG9uZS4K KwkgKi8KKwluID0gam9pbl91bnJvbGxlci0+bnVzZWQrKzsKKwlqb2luX3Vucm9sbGVyLT5zdHJh dGVneVtuXSA9IHN0cmF0ZWd5OworCWpvaW5fdW5yb2xsZXItPmlubmVyX3N1YnBsYW5zW25dID0g cmVhbGlubmVyOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2Rlc1tuXSA9IGVsaWRl ZGlubmVyOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhlcltuXSA9CisJ CWJlbmVhdGhfYW55X2dhdGhlciB8fCBmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyOworCWlmIChlbGlk ZWRpbm5lciA9PSBOVUxMICYmIHBncGFfaXNfam9pbihyZWFsaW5uZXIpKQorCQkqaW5uZXJfam9p bl91bnJvbGxlciA9IHBncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIoKTsKKwllbHNlCisJCSppbm5l cl9qb2luX3Vucm9sbGVyID0gTlVMTDsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnNb bl0gPSAqaW5uZXJfam9pbl91bnJvbGxlcjsKK30KKworLyoKKyAqIFVzZSB0aGUgZGF0YSB3ZSd2 ZSBhY2N1bXVsYXRlZCBpbiBhIHBncGFfam9pbl91bnJvbGxlciBvYmplY3QgdG8gY29uc3RydWN0 CisgKiBhIHBncGFfdW5yb2xsZWRfam9pbi4KKyAqLworcGdwYV91bnJvbGxlZF9qb2luICoKK3Bn cGFfYnVpbGRfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwK KwkJCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIpCit7CisJcGdwYV91bnJv bGxlZF9qb2luICp1am9pbjsKKwlpbnQJCQlpOworCisJLyoKKwkgKiBXZSBzaG91bGRuJ3QgaGF2 ZSBnb25lIGV2ZW4gc28gZmFyIGFzIHRvIGNyZWF0ZSBhIGpvaW4gdW5yb2xsZXIgdW5sZXNzCisJ ICogd2UgZm91bmQgYXQgbGVhc3Qgb25lIHVucm9sbGFibGUgam9pbi4KKwkgKi8KKwlBc3NlcnQo am9pbl91bnJvbGxlci0+bnVzZWQgPiAwKTsKKworCS8qIEFsbG9jYXRlIHJlc3VsdCBzdHJ1Y3R1 cmVzLiAqLworCXVqb2luID0gcGFsbG9jMF9vYmplY3QocGdwYV91bnJvbGxlZF9qb2luKTsKKwl1 am9pbi0+bmlubmVyID0gam9pbl91bnJvbGxlci0+bnVzZWQ7CisJdWpvaW4tPnN0cmF0ZWd5ID0g cGFsbG9jMF9hcnJheShwZ3BhX2pvaW5fc3RyYXRlZ3ksIGpvaW5fdW5yb2xsZXItPm51c2VkKTsK Kwl1am9pbi0+aW5uZXIgPSBwYWxsb2MwX2FycmF5KHBncGFfam9pbl9tZW1iZXIsIGpvaW5fdW5y b2xsZXItPm51c2VkKTsKKworCS8qIEhhbmRsZSB0aGUgb3V0ZXJtb3N0IGpvaW4uICovCisJdWpv aW4tPm91dGVyLnBsYW4gPSBqb2luX3Vucm9sbGVyLT5vdXRlcl9zdWJwbGFuOworCXVqb2luLT5v dXRlci5lbGlkZWRfbm9kZSA9IGpvaW5fdW5yb2xsZXItPm91dGVyX2VsaWRlZF9ub2RlOworCXVq b2luLT5vdXRlci5zY2FuID0KKwkJcGdwYV9idWlsZF9zY2FuKHdhbGtlciwgdWpvaW4tPm91dGVy LnBsYW4sCisJCQkJCQl1am9pbi0+b3V0ZXIuZWxpZGVkX25vZGUsCisJCQkJCQlqb2luX3Vucm9s bGVyLT5vdXRlcl9iZW5lYXRoX2FueV9nYXRoZXIsCisJCQkJCQl0cnVlKTsKKworCS8qCisJICog V2Ugd2FudCB0aGUgam9pbnMgZnJvbSB0aGUgZGVlcGVzdCBwYXJ0IG9mIHRoZSBwbGFuIHRyZWUg dG8gYXBwZWFyCisJICogZmlyc3QgaW4gdGhlIHJlc3VsdCBvYmplY3QsIGJ1dCB0aGUgam9pbiB1 bnJvbGxlciBhZGRzIHRoZW0gaW4gZXhhY3RseQorCSAqIHRoZSByZXZlcnNlIG9mIHRoYXQgb3Jk ZXIsIHNvIHdlIG5lZWQgdG8gZmxpcCB0aGUgb3JkZXIgb2YgdGhlIGFycmF5cworCSAqIHdoZW4g Y29uc3RydWN0aW5nIHRoZSBmaW5hbCByZXN1bHQuCisJICovCisJZm9yIChpID0gMDsgaSA8IGpv aW5fdW5yb2xsZXItPm51c2VkOyArK2kpCisJeworCQlpbnQJCQlrID0gam9pbl91bnJvbGxlci0+ bnVzZWQgLSBpIC0gMTsKKworCQkvKiBDb3B5IHN0cmF0ZWd5LCBQbGFuLCBhbmQgRWxpZGVkTm9k ZS4gKi8KKwkJdWpvaW4tPnN0cmF0ZWd5W2ldID0gam9pbl91bnJvbGxlci0+c3RyYXRlZ3lba107 CisJCXVqb2luLT5pbm5lcltpXS5wbGFuID0gam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnNb a107CisJCXVqb2luLT5pbm5lcltpXS5lbGlkZWRfbm9kZSA9IGpvaW5fdW5yb2xsZXItPmlubmVy X2VsaWRlZF9ub2Rlc1trXTsKKworCQkvKgorCQkgKiBGaWxsIGluIHJlbWFpbmluZyBkZXRhaWxz LCB1c2luZyBlaXRoZXIgdGhlIG5lc3RlZCBqb2luIHVucm9sbGVyLAorCQkgKiBvciBieSBkZXJp dmluZyB0aGVtIGZyb20gdGhlIHBsYW4gYW5kIGVsaWRlZCBub2Rlcy4KKwkJICovCisJCWlmIChq b2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnNba10gIT0gTlVMTCkKKwkJCXVqb2luLT5pbm5l cltpXS51bnJvbGxlZF9qb2luID0KKwkJCQlwZ3BhX2J1aWxkX3Vucm9sbGVkX2pvaW4od2Fsa2Vy LAorCQkJCQkJCQkJCSBqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnNba10pOworCQllbHNl CisJCQl1am9pbi0+aW5uZXJbaV0uc2NhbiA9CisJCQkJcGdwYV9idWlsZF9zY2FuKHdhbGtlciwg dWpvaW4tPmlubmVyW2ldLnBsYW4sCisJCQkJCQkJCXVqb2luLT5pbm5lcltpXS5lbGlkZWRfbm9k ZSwKKwkJCQkJCQkJam9pbl91bnJvbGxlci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyW2tdLAor CQkJCQkJCQl0cnVlKTsKKwl9CisKKwlyZXR1cm4gdWpvaW47Cit9CisKKy8qCisgKiBGcmVlIG1l bW9yeSBhbGxvY2F0ZWQgZm9yIHBncGFfam9pbl91bnJvbGxlci4KKyAqLwordm9pZAorcGdwYV9k ZXN0cm95X2pvaW5fdW5yb2xsZXIocGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyKQor eworCXBmcmVlKGpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5KTsKKwlwZnJlZShqb2luX3Vucm9sbGVy LT5pbm5lcl9zdWJwbGFucyk7CisJcGZyZWUoam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25v ZGVzKTsKKwlwZnJlZShqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnMpOworCXBmcmVlKGpv aW5fdW5yb2xsZXIpOworfQorCisvKgorICogSWRlbnRpZnkgdGhlIGpvaW4gc3RyYXRlZ3kgdXNl ZCBieSBhIGpvaW4gYW5kIHRoZSAicmVhbCIgaW5uZXIgYW5kIG91dGVyCisgKiBwbGFucy4KKyAq CisgKiBGb3IgZXhhbXBsZSwgYSBIYXNoIEpvaW4gYWx3YXlzIGhhcyBhIEhhc2ggbm9kZSBvbiB0 aGUgaW5uZXIgc2lkZSwgYnV0CisgKiBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzIHRoZSBy ZWFsIGlubmVyIGlucHV0IGlzIHRoZSBIYXNoIG5vZGUncyBjaGlsZCwKKyAqIG5vdCB0aGUgSGFz aCBub2RlIGl0c2VsZi4KKyAqCisgKiBMaWtld2lzZSwgYSBNZXJnZSBKb2luIG1heSBoYXZlIFNv cnQgbm90ZSBvbiB0aGUgaW5uZXIgb3Igb3V0ZXIgc2lkZTsgaWYKKyAqIGl0IGRvZXMsIHRoZSBy ZWFsIGlucHV0IHRvIHRoZSBqb2luIGlzIHRoZSBTb3J0IG5vZGUncyBjaGlsZCwgbm90IHRoZQor ICogU29ydCBub2RlIGl0c2VsZi4KKyAqCisgKiBJbiBhZGRpdGlvbiwgd2l0aCBhIE1lcmdlIEpv aW4gb3IgYSBOZXN0ZWQgTG9vcCwgdGhlIGpvaW4gcGxhbm5pbmcgY29kZQorICogbWF5IGFkZCBh ZGRpdGlvbmFsIG5vZGVzIHN1Y2ggYXMgTWF0ZXJpYWxpemUgb3IgTWVtb2l6ZS4gV2UgcmVnYXJk IHRoZXNlCisgKiBhcyBhbiBhc3BlY3Qgb2YgdGhlIGpvaW4gc3RyYXRlZ3kuIEFzIGluIHRoZSBw cmV2aW91cyBjYXNlcywgdGhlIHRydWUgaW5wdXQKKyAqIHRvIHRoZSBqb2luIGlzIHRoZSB1bmRl cmx5aW5nIG5vZGUuCisgKgorICogSG93ZXZlciwgaWYgYW55IGludm9sdmVkIGNoaWxkIG5vZGUg cHJldmlvdXNseSBoYWQgYSBub3ctZWxpZGVkIG5vZGUgc3RhY2tlZAorICogb24gdG9wLCB0aGVu IHdlIGNhbid0ICJsb29rIHRocm91Z2giIHRoYXQgbm9kZSAtLSBpbmRlZWQsIHdoYXQncyBnb2lu ZyB0byBiZQorICogcmVsZXZhbnQgZm9yIG91ciBwdXJwb3NlcyBpcyB0aGUgRWxpZGVkTm9kZSBv biB0b3Agb2YgdGhhdCBwbGFuIG5vZGUsIHJhdGhlcgorICogdGhhbiB0aGUgcGxhbiBub2RlIGl0 c2VsZi4KKyAqCisgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgZWxpZGVkIG5vZGVzLCB3ZSB3YW50 IHRoYXQgb25lIHRoYXQgd291bGQgaGF2ZSBiZWVuCisgKiB1cHBlcm1vc3QgaW4gdGhlIHBsYW4g dHJlZSBwcmlvciB0byBzZXRyZWZzIHByb2Nlc3Npbmc7IHdlIGV4cGVjdCB0byBmaW5kCisgKiB0 aGF0IG9uZSBsYXN0IGluIHRoZSBsaXN0IG9mIGVsaWRlZCBub2Rlcy4KKyAqCisgKiBPbiByZXR1 cm4gKnJlYWxvdXRlciBhbmQgKnJlYWxpbm5lciB3aWxsIGhhdmUgYmVlbiBzZXQgdG8gdGhlIHJl YWwgaW5uZXIKKyAqIGFuZCByZWFsIG91dGVyIHBsYW5zIHRoYXQgd2UgaWRlbnRpZmllZCwgYW5k ICplbGlkZWRyZWFsb3V0ZXIgYW5kCisgKiAqZWxpZGVkcmVhbGlubmVyIHRvIHRoZSBsYXN0IG9m IGFueSBjb3JyZXNwb2RpbmcgZWxpZGVkIG5vZGVzLgorICogQWRkaXRpb25hbGx5LCAqZm91bmRf YW55X291dGVyX2dhdGhlciBhbmQgKmZvdW5kX2FueV9pbm5lcl9nYXRoZXIgd2lsbAorICogYmUg c2V0IHRvIHRydWUgaWYgd2UgbG9va2VkIHRocm91Z2ggYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdl IG5vZGUgb24KKyAqIHRoYXQgc2lkZSBvZiB0aGUgam9pbiwgYW5kIGZhbHNlIG90aGVyd2lzZS4K KyAqLworc3RhdGljIHBncGFfam9pbl9zdHJhdGVneQorcGdwYV9kZWNvbXBvc2Vfam9pbihwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJUGxhbiAqKnJl YWxvdXRlciwgUGxhbiAqKnJlYWxpbm5lciwKKwkJCQkJRWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxv dXRlciwgRWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxpbm5lciwKKwkJCQkJYm9vbCAqZm91bmRfYW55 X291dGVyX2dhdGhlciwgYm9vbCAqZm91bmRfYW55X2lubmVyX2dhdGhlcikKK3sKKwlQbGFubmVk U3RtdCAqcHN0bXQgPSB3YWxrZXItPnBzdG10OworCUpvaW5UeXBlCWpvaW50eXBlID0gKChKb2lu ICopIHBsYW4pLT5qb2ludHlwZTsKKwlQbGFuCSAgICpvdXRlcnBsYW4gPSBwbGFuLT5sZWZ0dHJl ZTsKKwlQbGFuCSAgICppbm5lcnBsYW4gPSBwbGFuLT5yaWdodHRyZWU7CisJRWxpZGVkTm9kZSAq ZWxpZGVkb3V0ZXI7CisJRWxpZGVkTm9kZSAqZWxpZGVkaW5uZXI7CisJcGdwYV9qb2luX3N0cmF0 ZWd5IHN0cmF0ZWd5OworCWJvb2wJCXVuaXF1ZW91dGVyOworCWJvb2wJCXVuaXF1ZWlubmVyOwor CisJZWxpZGVkb3V0ZXIgPSBwZ3BhX2xhc3RfZWxpZGVkX25vZGUocHN0bXQsIG91dGVycGxhbik7 CisJZWxpZGVkaW5uZXIgPSBwZ3BhX2xhc3RfZWxpZGVkX25vZGUocHN0bXQsIGlubmVycGxhbik7 CisJKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIgPSBmYWxzZTsKKwkqZm91bmRfYW55X2lubmVyX2dh dGhlciA9IGZhbHNlOworCisJc3dpdGNoIChub2RlVGFnKHBsYW4pKQorCXsKKwkJY2FzZSBUX01l cmdlSm9pbjoKKworCQkJLyoKKwkJCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGNob3NlbiB0byBw bGFjZSBhIE1hdGVyaWFsIG5vZGUgb24gdGhlCisJCQkgKiBpbm5lciBzaWRlIG9mIHRoZSBNZXJn ZUpvaW47IGlmIHRoaXMgaXMgcHJlc2VudCwgd2UgcmVjb3JkIGl0CisJCQkgKiBhcyBwYXJ0IG9m IHRoZSBqb2luIHN0cmF0ZWd5LgorCQkJICovCisJCQlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAm JiBJc0EoaW5uZXJwbGFuLCBNYXRlcmlhbCkpCisJCQl7CisJCQkJZWxpZGVkaW5uZXIgPSBwZ3Bh X2Rlc2NlbmRfbm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRf TUVSR0VfSk9JTl9NQVRFUklBTElaRTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlzdHJhdGVneSA9IEpT VFJBVF9NRVJHRV9KT0lOX1BMQUlOOworCisJCQkvKgorCQkJICogRm9yIGEgTWVyZ2VKb2luLCBl aXRoZXIgdGhlIG91dGVyIG9yIHRoZSBpbm5lciBzdWJwbGFuLCBvcgorCQkJICogYm90aCwgbWF5 IGhhdmUgbmVlZGVkIHRvIGJlIHNvcnRlZDsgd2UgbXVzdCBkaXNyZWdhcmQgYW55IFNvcnQKKwkJ CSAqIG9yIEluY3JlbWVudGFsU29ydCBub2RlIHRvIGZpbmQgdGhlIHJlYWwgaW5uZXIgb3Igb3V0 ZXIKKwkJCSAqIHN1YnBsYW4uCisJCQkgKi8KKwkJCWlmIChlbGlkZWRvdXRlciA9PSBOVUxMICYm IGlzX3NvcnRpbmdfcGxhbihvdXRlcnBsYW4pKQorCQkJCWVsaWRlZG91dGVyID0gcGdwYV9kZXNj ZW5kX25vZGUocHN0bXQsICZvdXRlcnBsYW4pOworCQkJaWYgKGVsaWRlZGlubmVyID09IE5VTEwg JiYgaXNfc29ydGluZ19wbGFuKGlubmVycGxhbikpCisJCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rl c2NlbmRfbm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQlicmVhazsKKworCQljYXNlIFRfTmVz dExvb3A6CisKKwkJCS8qCisJCQkgKiBUaGUgcGxhbm5lciBtYXkgaGF2ZSBjaG9zZW4gdG8gcGxh Y2UgYSBNYXRlcmlhbCBvciBNZW1vaXplIG5vZGUKKwkJCSAqIG9uIHRoZSBpbm5lciBzaWRlIG9m IHRoZSBOZXN0TG9vcDsgaWYgdGhpcyBpcyBwcmVzZW50LCB3ZQorCQkJICogcmVjb3JkIGl0IGFz IHBhcnQgb2YgdGhlIGpvaW4gc3RyYXRlZ3kuCisJCQkgKi8KKwkJCWlmIChlbGlkZWRpbm5lciA9 PSBOVUxMICYmIElzQShpbm5lcnBsYW4sIE1hdGVyaWFsKSkKKwkJCXsKKwkJCQllbGlkZWRpbm5l ciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCQlzdHJhdGVneSA9 IEpTVFJBVF9ORVNURURfTE9PUF9NQVRFUklBTElaRTsKKwkJCX0KKwkJCWVsc2UgaWYgKGVsaWRl ZGlubmVyID09IE5VTEwgJiYgSXNBKGlubmVycGxhbiwgTWVtb2l6ZSkpCisJCQl7CisJCQkJZWxp ZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQkJc3Ry YXRlZ3kgPSBKU1RSQVRfTkVTVEVEX0xPT1BfTUVNT0laRTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlz dHJhdGVneSA9IEpTVFJBVF9ORVNURURfTE9PUF9QTEFJTjsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9IYXNoSm9pbjoKKworCQkJLyoKKwkJCSAqIFRoZSBpbm5lciBzdWJwbGFuIG9mIGEgSGFzaEpv aW4gaXMgYWx3YXlzIGEgSGFzaCBub2RlOyB0aGUgcmVhbAorCQkJICogaW5uZXIgc3VicGxhbiBp cyB0aGUgSGFzaCBub2RlJ3MgY2hpbGQuCisJCQkgKi8KKwkJCUFzc2VydChJc0EoaW5uZXJwbGFu LCBIYXNoKSk7CisJCQlBc3NlcnQoZWxpZGVkaW5uZXIgPT0gTlVMTCk7CisJCQllbGlkZWRpbm5l ciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCXN0cmF0ZWd5ID0g SlNUUkFUX0hBU0hfSk9JTjsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9S LCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLCAoaW50KSBub2RlVGFnKHBsYW4pKTsKKwl9 CisKKwkvKgorCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGRlY2lkZWQgdG8gaW1wbGVtZW50IGEg c2VtaWpvaW4gYnkgZmlyc3QgbWFraW5nCisJICogdGhlIG51bGxhYmxlIHNpZGUgb2YgdGhlIHBs YW4gdW5pcXVlLCBhbmQgdGhlbiBwZXJmb3JtaW5nIGEgbm9ybWFsIGpvaW4KKwkgKiBhZ2FpbnN0 IHRoZSByZXN1bHQuIFRoZXJlZm9yZSwgd2UgbWlnaHQgbmVlZCB0byBkZXNjZW5kIHRocm91Z2gg YQorCSAqIHVuaXF1ZSBub2RlIG9uIGVpdGhlciBzaWRlIG9mIHRoZSBwbGFuLgorCSAqLworCXVu aXF1ZW91dGVyID0gcGdwYV9kZXNjZW5kX2FueV91bmlxdWUocHN0bXQsICZvdXRlcnBsYW4sICZl bGlkZWRvdXRlcik7CisJdW5pcXVlaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShwc3Rt dCwgJmlubmVycGxhbiwgJmVsaWRlZGlubmVyKTsKKworCS8qCisJICogVGhlIHBsYW5uZXIgbWF5 IGhhdmUgZGVjaWRlZCB0byBwYXJhbGxlbGl6ZSBwYXJ0IG9mIHRoZSBqb2luIHRyZWUsIHNvCisJ ICogd2UgY291bGQgZmluZCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSBoZXJlLiBOb3Rl IHRoYXQsIGlmCisJICogcHJlc2VudCwgdGhpcyB3aWxsIGFwcGVhciBiZWxvdyBub2RlcyB3ZSBj b25zaWRlcmVkIGFzIHBhcnQgb2YgdGhlIGpvaW4KKwkgKiBzdHJhdGVneSwgYnV0IHdlIGNvdWxk IGZpbmQgYW5vdGhlciB1bmlxdWVuZXNzLWVuZm9yY2luZyBub2RlIGJlbG93IHRoZQorCSAqIEdh dGhlciBvciBHYXRoZXIgTWVyZ2UsIGlmIHByZXNlbnQuCisJICovCisJaWYgKGVsaWRlZG91dGVy ID09IE5VTEwpCisJeworCQllbGlkZWRvdXRlciA9IHBncGFfZGVzY2VuZF9hbnlfZ2F0aGVyKHBz dG10LCAmb3V0ZXJwbGFuLAorCQkJCQkJCQkJCQkgIGZvdW5kX2FueV9vdXRlcl9nYXRoZXIpOwor CQlpZiAoZm91bmRfYW55X291dGVyX2dhdGhlciAmJgorCQkJcGdwYV9kZXNjZW5kX2FueV91bmlx dWUocHN0bXQsICZvdXRlcnBsYW4sICZlbGlkZWRvdXRlcikpCisJCQl1bmlxdWVvdXRlciA9IHRy dWU7CisJfQorCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMKQorCXsKKwkJZWxpZGVkaW5uZXIgPSBw Z3BhX2Rlc2NlbmRfYW55X2dhdGhlcihwc3RtdCwgJmlubmVycGxhbiwKKwkJCQkJCQkJCQkJICBm b3VuZF9hbnlfaW5uZXJfZ2F0aGVyKTsKKwkJaWYgKGZvdW5kX2FueV9pbm5lcl9nYXRoZXIgJiYK KwkJCXBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10LCAmaW5uZXJwbGFuLCAmZWxpZGVkaW5u ZXIpKQorCQkJdW5pcXVlaW5uZXIgPSB0cnVlOworCX0KKworCS8qCisJICogSXQncyBwb3NzaWJs ZSB0aGF0IFJlc3VsdCBub2RlIGhhcyBiZWVuIGluc2VydGVkIGVpdGhlciB0byBwcm9qZWN0IGEK KwkgKiB0YXJnZXQgbGlzdCBvciB0byBpbXBsZW1lbnQgYSBvbmUtdGltZSBmaWx0ZXIuIElmIHNv LCB3ZSBjYW4gZGVzY2VuZAorCSAqIHRocm91Z2h0IGl0LiBOb3RlIHRoYXQgYSByZXN1bHQgbm9k ZSB3aXRob3V0IGEgY2hpbGQgd291bGQgYmUgYQorCSAqIGRlZ2VuZXJhdGUgc2NhbiBvciBqb2lu LCBhbmQgbm90IHNvbWV0aGluZyB3ZSBjb3VsZCBkZXNjZW5kIHRocm91Z2guCisJICoKKwkgKiBY WFguIEkgc3VzcGVjdCBpdCdzIHBvc3NpYmxlIGZvciB0aGlzIHRvIGhhcHBlbiBhYm92ZSB0aGUg R2F0aGVyIG9yCisJICogR2F0aGVyIE1lcmdlIG5vZGUsIHRvbywgYnV0IGFwcGFyZW50bHkgd2Ug aGF2ZSBubyB0ZXN0IGNhc2UgZm9yIHRoYXQKKwkgKiBzY2VuYXJpby4KKwkgKi8KKwlpZiAoZWxp ZGVkb3V0ZXIgPT0gTlVMTCAmJiBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKG91dGVycGxhbikp CisJCWVsaWRlZG91dGVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZvdXRlcnBsYW4pOwor CWlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIGlzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQoaW5u ZXJwbGFuKSkKKwkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJmlubmVy cGxhbik7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBzZW1pam9pbiB0aGF0IHdhcyBjb252ZXJ0 ZWQgdG8gYW4gaW5uZXIgam9pbiBieSBtYWtpbmcgb25lCisJICogc2lkZSBvciB0aGUgb3RoZXIg dW5pcXVlLCBtYWtlIGEgbm90ZSB0aGF0IHRoZSBpbm5lciBvciBvdXRlciBzdWJwbGFuLAorCSAq IGFzIGFwcHJvcHJpYXRlLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHF1ZXJ5IHBsYW4gZmVhdHVy ZSB3aGVuIHRoZSBtYWluCisJICogdHJlZSB0cmF2ZXJzYWwgcmVhY2hlcyBpdC4KKwkgKgorCSAq IENvbnZlcnNlbHksIGlmIHRoZSBwbGFubmVyIGNvdWxkIGhhdmUgbWFkZSBvbmUgc2lkZSBvZiB0 aGUgam9pbiB1bmlxdWUKKwkgKiBhbmQgdGhlcmVieSBjb252ZXJ0ZWQgaXQgdG8gYW4gaW5uZXIg am9pbiwgYW5kIGNob3NlIG5vdCB0byBkbyBzbywgdGhhdAorCSAqIGlzIGFsc28gd29ydGggbm90 aW5nLgorCSAqCisJICogTkI6IFRoaXMgY29kZSBjb3VsZCBhcHBlYXIgc2xpZ2h0bHkgaGlnaGVy IHVwIGluIGluIHRoaXMgZnVuY3Rpb24sIGJ1dAorCSAqIG5vbmUgb2YgdGhlIG5vZGVzIHRocm91 Z2ggd2hpY2ggd2UganVzdCBkZXNjZW5kZWQgc2hvdWxkIGhhdmUKKwkgKiBhc3NvY2lhdGVkIFJU SXMuCisJICoKKwkgKiBOQjogVGhpcyBzZWVtcyBsaWtlIGEgc29tZXdoYXQgaGFja3kgd2F5IG9m IHBhc3NpbmcgaW5mb3JtYXRpb24gdXAgdG8KKwkgKiB0aGUgbWFpbiB0cmVlIHdhbGssIGJ1dCBJ IGRvbid0IGN1cnJlbnRseSBoYXZlIGEgYmV0dGVyIGlkZWEuCisJICovCisJaWYgKHVuaXF1ZW91 dGVyKQorCQlwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9TRU1JSk9JTl9V TklRVUUsIG91dGVycGxhbik7CisJZWxzZSBpZiAoam9pbnR5cGUgPT0gSk9JTl9SSUdIVF9TRU1J KQorCQlwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9TRU1JSk9JTl9OT05f VU5JUVVFLCBvdXRlcnBsYW4pOworCWlmICh1bmlxdWVpbm5lcikKKwkJcGdwYV9hZGRfZnV0dXJl X2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFLCBpbm5lcnBsYW4pOworCWVs c2UgaWYgKGpvaW50eXBlID09IEpPSU5fU0VNSSkKKwkJcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUo d2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwgaW5uZXJwbGFuKTsKKworCS8qIFNl dCBvdXRwdXQgcGFyYW1ldGVycy4gKi8KKwkqcmVhbG91dGVyID0gb3V0ZXJwbGFuOworCSpyZWFs aW5uZXIgPSBpbm5lcnBsYW47CisJKmVsaWRlZHJlYWxvdXRlciA9IGVsaWRlZG91dGVyOworCSpl bGlkZWRyZWFsaW5uZXIgPSBlbGlkZWRpbm5lcjsKKwlyZXR1cm4gc3RyYXRlZ3k7Cit9CisKKy8q CisgKiBEZXNjZW5kIHRocm91Z2ggYSBQbGFuIG5vZGUgaW4gYSBqb2luIHRyZWUgdGhhdCB0aGUg Y2FsbGVyIGhhcyBkZXRlcm1pbmVkCisgKiB0byBiZSBpcnJlbGV2YW50LgorICoKKyAqIFVwZGF0 ZXMgKnBsYW4sIGFuZCByZXR1cm5zIHRoZSBsYXN0IG9mIGFueSBlbGlkZWQgbm9kZXMgcGVydGFp bmluZyB0byB0aGUKKyAqIG5ldyBwbGFuIG5vZGUuCisgKi8KK3N0YXRpYyBFbGlkZWROb2RlICoK K3BncGFfZGVzY2VuZF9ub2RlKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4pCit7CisJ KnBsYW4gPSAoKnBsYW4pLT5sZWZ0dHJlZTsKKwlyZXR1cm4gcGdwYV9sYXN0X2VsaWRlZF9ub2Rl KHBzdG10LCAqcGxhbik7Cit9CisKKy8qCisgKiBEZXNjZW5kIHRocm91Z2ggYSBHYXRoZXIgb3Ig R2F0aGVyIE1lcmdlIG5vZGUsIGlmIHByZXNlbnQsIGFuZCBhbnkgU29ydAorICogb3IgSW5jcmVt ZW50YWxTb3J0IG5vZGUgb2NjdXJyaW5nIHVuZGVyIGEgR2F0aGVyIE1lcmdlLgorICoKKyAqIENh bGxlciBzaG91bGQgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZXJlIGlzIG5vIEVsaWRlZE5vZGUgcGVy dGFpbmluZyB0bworICogdGhlIGluaXRpYWwgdmFsdWUgb2YgKnBsYW4uCisgKgorICogVXBkYXRl cyAqcGxhbiwgYW5kIHJldHVybnMgdGhlIGxhc3Qgb2YgYW55IGVsaWRlZCBub2RlcyBwZXJ0YWlu aW5nIHRvIHRoZQorICogbmV3IHBsYW4gbm9kZS4gU2V0cyAqZm91bmRfYW55X2dhdGhlciA9IHRy dWUgaWYgZWl0aGVyIEdhdGhlciBvcgorICogR2F0aGVyIE1lcmdlIHdhcyBmb3VuZCwgYW5kIG90 aGVyd2lzZSBsZWF2ZXMgaXQgdW5jaGFuZ2VkLgorICovCitzdGF0aWMgRWxpZGVkTm9kZSAqCitw Z3BhX2Rlc2NlbmRfYW55X2dhdGhlcihQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAor CQkJCQkJYm9vbCAqZm91bmRfYW55X2dhdGhlcikKK3sKKwlpZiAoSXNBKCpwbGFuLCBHYXRoZXIp KQorCXsKKwkJKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlOworCQlyZXR1cm4gcGdwYV9kZXNjZW5k X25vZGUocHN0bXQsIHBsYW4pOworCX0KKworCWlmIChJc0EoKnBsYW4sIEdhdGhlck1lcmdlKSkK Kwl7CisJCUVsaWRlZE5vZGUgKmVsaWRlZCA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFu KTsKKworCQlpZiAoZWxpZGVkID09IE5VTEwgJiYgaXNfc29ydGluZ19wbGFuKCpwbGFuKSkKKwkJ CWVsaWRlZCA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKworCQkqZm91bmRfYW55 X2dhdGhlciA9IHRydWU7CisJCXJldHVybiBlbGlkZWQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9 CisKKy8qCisgKiBJZiAqcGxhbiBpcyBhbiBBZ2cgb3IgVW5pcXVlIG5vZGUsIHdlIHdhbnQgdG8g ZGVzY2VuZCB0aHJvdWdoIGl0LCB1bmxlc3MKKyAqIGl0IGhhcyBhIGNvcnJlc3BvbmRpbmcgZWxp ZGVkIG5vZGUuIElmIGl0cyBpbW1lZGlhdGUgY2hpbGQgaXMgYSBTb3J0IG9yCisgKiBJbmNyZW1l bnRhbFNvcnQsIHdlIGFsc28gd2FudCB0byBkZXNjZW5kIHRocm91Z2ggdGhhdCwgdW5sZXNzIGl0 IGhhcyBhCisgKiBjb3JyZXNwb25kaW5nIGVsaWRlZCBub2RlLgorICoKKyAqIE9uIGVudHJ5LCAq ZWxpZGVkX25vZGUgbXVzdCBiZSB0aGUgbGFzdCBvZiBhbnkgZWxpZGVkIG5vZGVzIGNvcnJlc3Bv bmRpbmcKKyAqIHRvICpwbGFuOyBvbiBleGl0LCB0aGlzIHdpbGwgc3RpbGwgYmUgdHJ1ZSwgYnV0 ICpwbGFuIG1heSBoYXZlIGJlZW4gdXBkYXRlZC4KKyAqCisgKiBUaGUgcmVhc29uIHdlIGRvbid0 IHdhbnQgdG8gZGVzY2VuZCB0aHJvdWdoIGVsaWRlZCBub2RlcyBpcyB0aGF0IGEgc2luZ2xlCisg KiBqb2luIHRyZWUgY2FuJ3QgY3Jvc3MgdGhyb3VnaCBhbnkgc29ydCBvZiBlbGlkZWQgbm9kZTog c3VicXVlcmllcyBhcmUKKyAqIHBsYW5uZWQgc2VwYXJhdGVseSwgYW5kIHBsYW5uaW5nIGluc2lk ZSBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgaXMKKyAqIHNlcGFyYXRlIGZyb20gcGxhbm5pbmcg b3V0c2lkZSBvZiBpdC4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRydWUgaWYgd2UgZGVz Y2VuZCB0aHJvdWdoIGEgbm9kZSB0aGF0IHdlIGJlbGlldmUgaXMKKyAqIG1ha2luZyBvbmUgc2lk ZSBvZiBhIHNlbWlqb2luIHVuaXF1ZSwgYW5kIG90aGVyd2lzZSBmYWxzZS4KKyAqLworc3RhdGlj IGJvb2wKK3BncGFfZGVzY2VuZF9hbnlfdW5pcXVlKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAq KnBsYW4sCisJCQkJCQlFbGlkZWROb2RlICoqZWxpZGVkX25vZGUpCit7CisJYm9vbAkJZGVzY2Vu ZCA9IGZhbHNlOworCWJvb2wJCXNqdW5pcXVlID0gZmFsc2U7CisKKwlpZiAoKmVsaWRlZF9ub2Rl ICE9IE5VTEwpCisJCXJldHVybiBzanVuaXF1ZTsKKworCWlmIChJc0EoKnBsYW4sIFVuaXF1ZSkp CisJeworCQlkZXNjZW5kID0gdHJ1ZTsKKwkJc2p1bmlxdWUgPSB0cnVlOworCX0KKwllbHNlIGlm IChJc0EoKnBsYW4sIEFnZykpCisJeworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgc2ltcGxlIEFn ZyBub2RlLCB0aGVuIGFzc3VtZSBpdCdzIGhlcmUgdG8gaW1wbGVtZW50CisJCSAqIHNlbWlqb2lu IHVuaXF1ZW5lc3MuIE90aGVyd2lzZSwgYXNzdW1lIGl0J3MgY29tcGxldGluZyBhbiBlYWdlcgor CQkgKiBhZ2dyZWdhdGlvbiBvciBwYXJ0aXRpb253aXNlIGFnZ3JlZ2F0aW9uIG9wZXJhdGlvbiB0 aGF0IGJlZ2FuIGF0IGEKKwkJICogaGlnaGVyIGxldmVsIG9mIHRoZSBwbGFuIHRyZWUuCisJCSAq CisJCSAqIFhYWC4gSSBzdXNwZWN0IHRoaXMgbG9naWMgZG9lcyBub3QgY292ZXIgYWxsIGNhc2Vz OiBjb3VsZG4ndCBTSgorCQkgKiB1bmlxdWVuZXNzIGJlIGltcGxlbWVudGVkIGluIHR3byBzdGVw cyB3aXRoIGFuIGludGVybWVkaWF0ZSBHYXRoZXI/CisJCSAqLworCQlkZXNjZW5kID0gdHJ1ZTsK KwkJc2p1bmlxdWUgPSAoKChBZ2cgKikgKnBsYW4pLT5hZ2dzcGxpdCA9PSBBR0dTUExJVF9TSU1Q TEUpOworCX0KKworCWlmIChkZXNjZW5kKQorCXsKKwkJKmVsaWRlZF9ub2RlID0gcGdwYV9kZXNj ZW5kX25vZGUocHN0bXQsIHBsYW4pOworCisJCWlmICgqZWxpZGVkX25vZGUgPT0gTlVMTCAmJiBp c19zb3J0aW5nX3BsYW4oKnBsYW4pKQorCQkJKmVsaWRlZF9ub2RlID0gcGdwYV9kZXNjZW5kX25v ZGUocHN0bXQsIHBsYW4pOworCX0KKworCXJldHVybiBzanVuaXF1ZTsKK30KKworLyoKKyAqIElz IHRoaXMgYSBSZXN1bHQgbm9kZSB0aGF0IGhhcyBhIGNoaWxkPworICovCitzdGF0aWMgYm9vbAor aXNfcmVzdWx0X25vZGVfd2l0aF9jaGlsZChQbGFuICpwbGFuKQoreworCXJldHVybiBJc0EocGxh biwgUmVzdWx0KSAmJiBwbGFuLT5sZWZ0dHJlZSAhPSBOVUxMOworfQorCisvKgorICogSXMgdGhp cyBhIFBsYW4gbm9kZSB3aG9zZSBwdXJwb3NlIGlzIHB1dCB0aGUgZGF0YSBpbiBhIGNlcnRhaW4g b3JkZXI/CisgKi8KK3N0YXRpYyBib29sCitpc19zb3J0aW5nX3BsYW4oUGxhbiAqcGxhbikKK3sK KwlyZXR1cm4gSXNBKHBsYW4sIFNvcnQpIHx8IElzQShwbGFuLCBJbmNyZW1lbnRhbFNvcnQpOwor fQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uaCBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjRkYzcyOTg2YTcwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX2pvaW4uaApAQCAtMCwwICsxLDEwNSBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogcGdwYV9qb2luLmgKKyAqCSAgYW5hbHlzaXMgb2Ygam9pbnMgaW4gUGxhbiB0 cmVlcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pv aW4uaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfSk9JTl9ICisj ZGVmaW5lIFBHUEFfSk9JTl9ICisKKyNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKwordHlw ZWRlZiBzdHJ1Y3QgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0IHBncGFfcGxhbl93YWxrZXJfY29u dGV4dDsKK3R5cGVkZWYgc3RydWN0IHBncGFfam9pbl91bnJvbGxlciBwZ3BhX2pvaW5fdW5yb2xs ZXI7Cit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Vucm9sbGVkX2pvaW4gcGdwYV91bnJvbGxlZF9qb2lu OworCisvKgorICogQWx0aG91Z2ggdGhlcmUgYXJlIHRocmVlIG1haW4gam9pbiBzdHJhdGVnaWVz LCB3ZSB0cnkgdG8gY2xhc3NpZnkgdGhpbmdzCisgKiBtb3JlIHByZWNpc2VseSBoZXJlOiBtZXJn ZSBqb2lucyBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgbWF0ZXJpYWxpemF0aW9uCisgKiBvbiB0 aGUgaW5uZXIgc2lkZSwgYW5kIG5lc3RlZCBsb29wcyBjYW4gdXNlIGVpdGhlciBtYXRlcmlhbGl6 YXRpb24gb3IKKyAqIG1lbW9pemF0aW9uLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlKU1RSQVRf TUVSR0VfSk9JTl9QTEFJTiA9IDAsCisJSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJQUxJWkUsCisJ SlNUUkFUX05FU1RFRF9MT09QX1BMQUlOLAorCUpTVFJBVF9ORVNURURfTE9PUF9NQVRFUklBTEla RSwKKwlKU1RSQVRfTkVTVEVEX0xPT1BfTUVNT0laRSwKKwlKU1RSQVRfSEFTSF9KT0lOCisJLyog dXBkYXRlIE5VTV9QR1BBX0pPSU5fU1RSQVRFR1kgaWYgeW91IGFkZCBhbnl0aGluZyBoZXJlICov Cit9IHBncGFfam9pbl9zdHJhdGVneTsKKworI2RlZmluZSBOVU1fUEdQQV9KT0lOX1NUUkFURUdZ CQkoKGludCkgSlNUUkFUX0hBU0hfSk9JTiArIDEpCisKKy8qCisgKiBJbiBhbiBvdXRlci1kZWVw IGpvaW4gdHJlZSwgZXZlcnkgbWVtYmVyIG9mIGFuIHVucm9sbGVkIGpvaW4gd2lsbCBiZSBhIHNj YW4sCisgKiBidXQgam9pbiB0cmVlcyB3aXRoIG90aGVyIHNoYXBlcyBjYW4gY29udGFpbiB1bnJv bGxlZCBqb2lucy4KKyAqCisgKiBUaGUgcGxhbiBub2RlIHdlIHN0b3JlIGhlcmUgd2lsbCBiZSB0 aGUgaW5uZXIgb3Igb3V0ZXIgY2hpbGQgb2YgdGhlIGpvaW4KKyAqIG5vZGUsIGFzIGFwcHJvcHJp YXRlLCBleGNlcHQgdGhhdCB3ZSBsb29rIHRocm91Z2ggc3Vibm9kZXMgdGhhdCB3ZSByZWdhcmQg YXMKKyAqIHBhcnQgb2YgdGhlIGpvaW4gbWV0aG9kIGl0c2VsZi4gRm9yIGluc3RhbmNlLCBmb3Ig YSBOZXN0ZWQgTG9vcCB0aGF0CisgKiBtYXRlcmlhbGl6ZXMgdGhlIGlubmVyIGlucHV0LCB3ZSds bCBzdG9yZSB0aGUgY2hpbGQgb2YgdGhlIE1hdGVyaWFsaXplIG5vZGUsCisgKiBub3QgdGhlIE1h dGVyaWFsaXplIG5vZGUgaXRzZWxmLgorICoKKyAqIElmIHNldHJlZnMgcHJvY2Vzc2luZyBlbGlk ZWQgb25lIG9yIG1vcmUgbm9kZXMgZnJvbSB0aGUgcGxhbiB0cmVlLCB0aGVuCisgKiB3ZSdsbCBz dG9yZSBkZXRhaWxzIGFib3V0IHRoZSB0b3Btb3N0IG9mIHRob3NlIGluIGVsaWRlZF9ub2RlOyBv dGhlcndpc2UsCisgKiBpdCB3aWxsIGJlIE5VTEwuCisgKgorICogRXhhY3RseSBvbmUgb2Ygc2Nh biBhbmQgdW5yb2xsZWRfam9pbiB3aWxsIGJlIG5vbi1OVUxMLgorICovCit0eXBlZGVmIHN0cnVj dAoreworCVBsYW4JICAgKnBsYW47CisJRWxpZGVkTm9kZSAqZWxpZGVkX25vZGU7CisJc3RydWN0 IHBncGFfc2NhbiAqc2NhbjsKKwlwZ3BhX3Vucm9sbGVkX2pvaW4gKnVucm9sbGVkX2pvaW47Cit9 IHBncGFfam9pbl9tZW1iZXI7CisKKy8qCisgKiBXZSBjb252ZXJ0IG91dGVyLWRlZXAgam9pbiB0 cmVlcyB0byBhIGZsYXQgc3RydWN0dXJlOyB0aGF0IGlzLCAoKEEgSk9JTiBCKQorICogSk9JTiBD KSBKT0lOIEQgZ2V0cyBjb252ZXJ0ZWQgdG8gb3V0ZXIgPSBBLCBpbm5lciA9IDxCIEMgRD4uICBX aGVuIGpvaW5zCisgKiBhcmVuJ3Qgb3V0ZXItZGVlcCwgc3Vic3RydWN0dXJlIGlzIHJlcXVpcmVk LCBlLmcuIChBIEpPSU4gQikgSk9JTiAoQyBKT0lOIEQpCisgKiBpcyByZXByZXNlbnRlZCBhcyBv dXRlciA9IEEsIGlubmVyID0gPEIgWD4sIHdoZXJlIFggaXMgYSBwZ3BhX3Vucm9sbGVkX2pvaW4K KyAqIGNvdmVyaW5nIEMtRC4KKyAqLworc3RydWN0IHBncGFfdW5yb2xsZWRfam9pbgoreworCS8q IE91dGVybW9zdCBtZW1iZXI7IG11c3Qgbm90IGl0c2VsZiBiZSBhbiB1bnJvbGxlZCBqb2luLiAq LworCXBncGFfam9pbl9tZW1iZXIgb3V0ZXI7CisKKwkvKiBOdW1iZXIgb2YgaW5uZXIgbWVtYmVy cy4gTGVuZ3RoIG9mIHRoZSBzdHJhdGVneSBhbmQgaW5uZXIgYXJyYXlzLiAqLworCXVuc2lnbmVk CW5pbm5lcjsKKworCS8qIEFycmF5IG9mIHN0cmF0ZWdpZXMsIG9uZSBwZXIgbm9uLW91dGVybW9z dCBtZW1iZXIuICovCisJcGdwYV9qb2luX3N0cmF0ZWd5ICpzdHJhdGVneTsKKworCS8qIEFycmF5 IG9mIG1lbWJlcnMsIGV4Y2x1ZGluZyB0aGUgb3V0ZXJtb3N0LiBEZWVwZXN0IGZpcnN0LiAqLwor CXBncGFfam9pbl9tZW1iZXIgKmlubmVyOworfTsKKworLyoKKyAqIERvZXMgdGhpcyBwbGFuIG5v ZGUgaW5oZXJpdCBmcm9tIEpvaW4/CisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorcGdwYV9pc19q b2luKFBsYW4gKnBsYW4pCit7CisJcmV0dXJuIElzQShwbGFuLCBOZXN0TG9vcCkgfHwgSXNBKHBs YW4sIE1lcmdlSm9pbikgfHwgSXNBKHBsYW4sIEhhc2hKb2luKTsKK30KKworZXh0ZXJuIHBncGFf am9pbl91bnJvbGxlciAqcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcih2b2lkKTsKK2V4dGVybiB2 b2lkIHBncGFfdW5yb2xsX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJ CQkJCQkJIFBsYW4gKnBsYW4sIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyLAorCQkJCQkJCSBwZ3Bh X2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIsCisJCQkJCQkJIHBncGFfam9pbl91bnJvbGxl ciAqKm91dGVyX2pvaW5fdW5yb2xsZXIsCisJCQkJCQkJIHBncGFfam9pbl91bnJvbGxlciAqKmlu bmVyX2pvaW5fdW5yb2xsZXIpOworZXh0ZXJuIHBncGFfdW5yb2xsZWRfam9pbiAqcGdwYV9idWls ZF91bnJvbGxlZF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJ CQkJCQkJCXBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcik7CitleHRlcm4gdm9pZCBw Z3BhX2Rlc3Ryb3lfam9pbl91bnJvbGxlcihwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xs ZXIpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9v dXRwdXQuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjc2NDdhY2RmNWEKLS0tIC9kZXYvbnVsbAor KysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKQEAgLTAsMCArMSw1NzEg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfb3V0cHV0LmMKKyAqCSAgcHJvZHVj ZSB0ZXh0dWFsIG91dHB1dCBmcm9tIHRoZSByZXN1bHRzIG9mIGEgcGxhbiB0cmVlIHdhbGsKKyAq CisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYwor ICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisj aW5jbHVkZSAicGdwYV9vdXRwdXQuaCIKKyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKKworI2luY2x1 ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisj aW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIK KworLyoKKyAqIENvbnRleHQgb2JqZWN0IGZvciB0ZXh0dWFsIGFkdmljZSBnZW5lcmF0aW9uLgor ICoKKyAqIHJ0X2lkZW50aWZpZXJzIGlzIHRoZSBjYWxsZXItcHJvdmlkZWQgYXJyYXkgb2YgcmFu Z2UgdGFibGUgaWRlbnRpZmllcnMuCisgKiBTZWUgdGhlIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2Yg cGdwYV9pZGVudGlmaWVyLmMgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBidWYgaXMgdGhlIGNh bGxlci1wcm92aWRlZCBvdXRwdXQgYnVmZmVyLgorICoKKyAqIHdyYXBfY29sdW1uIGlzIHRoZSB3 cmFwIGNvbHVtbiwgc28gdGhhdCB3ZSBkb24ndCBjcmVhdGUgb3V0cHV0IHRoYXQgaXMKKyAqIHRv byB3aWRlLiBTZWUgcGdwYV9tYXliZV9saW5lYnJlYWsoKSBhbmQgY29tbWVudHMgaW4gcGdwYV9v dXRwdXRfYWR2aWNlLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX291dHB1dF9jb250ZXh0Cit7 CisJY29uc3QgY2hhciAqKnJpZF9zdHJpbmdzOworCVN0cmluZ0luZm8JYnVmOworCWludAkJCXdy YXBfY29sdW1uOworfSBwZ3BhX291dHB1dF9jb250ZXh0OworCitzdGF0aWMgdm9pZCBwZ3BhX291 dHB1dF91bnJvbGxlZF9qb2luKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJ CQkgIHBncGFfdW5yb2xsZWRfam9pbiAqam9pbik7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9q b2luX21lbWJlcihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJcGdwYV9q b2luX21lbWJlciAqbWVtYmVyKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3NjYW5fc3RyYXRl Z3kocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCSAgcGdwYV9zY2FuX3N0 cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJICBMaXN0ICpzY2Fucyk7CitzdGF0aWMgdm9pZCBw Z3BhX291dHB1dF9yZWxhdGlvbl9uYW1lKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIE9p ZCByZWxpZCk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9xdWVyeV9mZWF0dXJlKHBncGFfb3V0 cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkgIHBncGFfcWZfdHlwZSB0eXBlLAorCQkJ CQkJCQkJICBMaXN0ICpxdWVyeV9mZWF0dXJlcyk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9z aW1wbGVfc3RyYXRlZ3kocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCQlj aGFyICpzdHJhdGVneSwKKwkJCQkJCQkJCQlMaXN0ICpyZWxpZF9zZXRzKTsKK3N0YXRpYyB2b2lk IHBncGFfb3V0cHV0X25vX2dhdGhlcihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJ CQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3JlbGF0 aW9ucyhwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJ CQkJICBCaXRtYXBzZXQgKnJlbGlkcyk7CisKK3N0YXRpYyBjaGFyICpwZ3BhX2NzdHJpbmdfam9p bl9zdHJhdGVneShwZ3BhX2pvaW5fc3RyYXRlZ3kgc3RyYXRlZ3kpOworc3RhdGljIGNoYXIgKnBn cGFfY3N0cmluZ19zY2FuX3N0cmF0ZWd5KHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSk7Citz dGF0aWMgY2hhciAqcGdwYV9jc3RyaW5nX3F1ZXJ5X2ZlYXR1cmVfdHlwZShwZ3BhX3FmX3R5cGUg dHlwZSk7CisKK3N0YXRpYyB2b2lkIHBncGFfbWF5YmVfbGluZWJyZWFrKFN0cmluZ0luZm8gYnVm LCBpbnQgd3JhcF9jb2x1bW4pOworCisvKgorICogQXBwZW5kIHF1ZXJ5IGFkdmljZSB0byB0aGUg cHJvdmlkZWQgYnVmZmVyLgorICoKKyAqIEJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sICd3 YWxrZXInIG11c3QgYmUgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlCisgKiBtYWluIHBsYW4gdHJl ZSBhbmQgYWxsIHN1YnBsYW5zIGZyb20gdGhlIFBsYW5uZWRTdG10LgorICoKKyAqICdydF9pZGVu dGlmaWVycycgaXMgYSB0YWJsZSBvZiB1bmlxdWUgaWRlbnRpZmllcnMsIG9uZSBmb3IgZWFjaCBS VEkuCisgKiBTZWUgcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdCgpLgor ICoKKyAqIFJlc3VsdHMgd2lsbCBiZSBhcHBlbmRlZCB0byAnYnVmJy4KKyAqLwordm9pZAorcGdw YV9vdXRwdXRfYWR2aWNlKFN0cmluZ0luZm8gYnVmLCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQg KndhbGtlciwKKwkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzKQoreworCUlu ZGV4CQlydGFibGVfbGVuZ3RoID0gbGlzdF9sZW5ndGgod2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsK KwlMaXN0Q2VsbCAgICpsYzsKKwlwZ3BhX291dHB1dF9jb250ZXh0IGNvbnRleHQ7CisKKwkvKiBC YXNpYyBpbml0aWFsaXphdGlvbi4gKi8KKwltZW1zZXQoJmNvbnRleHQsIDAsIHNpemVvZihwZ3Bh X291dHB1dF9jb250ZXh0KSk7CisJY29udGV4dC5idWYgPSBidWY7CisKKwkvKgorCSAqIENvbnZl cnQgaWRlbnRpZmllcnMgdG8gc3RyaW5nIGZvcm0uIE5vdGUgdGhhdCB0aGUgbG9vcCB2YXJpYWJs ZSBoZXJlIGlzCisJICogbm90IGFuIFJUSSwgYmVjYXVzZSBSVElzIGFyZSAxLWJhc2VkLiBTb21l IFJUSXMgd2lsbCBoYXZlIG5vCisJICogaWRlbnRpZmllciwgZWl0aGVyIGJlY2F1c2UgdGhlIHJl bG9wdGtpbmQgaXMgUlRFX0pPSU4gb3IgYmVjYXVzZSB0aGF0CisJICogcG9ydGlvbiBvZiB0aGUg cXVlcnkgZGlkbid0IG1ha2UgaXQgaW50byB0aGUgZmluYWwgcGxhbi4KKwkgKi8KKwljb250ZXh0 LnJpZF9zdHJpbmdzID0gcGFsbG9jMF9hcnJheShjb25zdCBjaGFyICosIHJ0YWJsZV9sZW5ndGgp OworCWZvciAoaW50IGkgPSAwOyBpIDwgcnRhYmxlX2xlbmd0aDsgKytpKQorCQlpZiAocnRfaWRl bnRpZmllcnNbaV0uYWxpYXNfbmFtZSAhPSBOVUxMKQorCQkJY29udGV4dC5yaWRfc3RyaW5nc1tp XSA9IHBncGFfaWRlbnRpZmllcl9zdHJpbmcoJnJ0X2lkZW50aWZpZXJzW2ldKTsKKworCS8qCisJ ICogSWYgdGhlIHVzZXIgY2hvb3NlcyB0byB1c2UgRVhQTEFJTiAoUExBTl9BRFZJQ0UpIGluIGFu IDgwLWNvbHVtbiB3aW5kb3cKKwkgKiBmcm9tIGEgcHNxbCBjbGllbnQgd2l0aCBkZWZhdWx0IHNl dHRpbmdzLCBwc3FsIHdpbGwgYWRkIG9uZSBzcGFjZSB0bworCSAqIHRoZSBsZWZ0IG9mIHRoZSBv dXRwdXQgYW5kIEVYUExBSU4gd2lsbCBhZGQgdHdvIG1vcmUgdG8gdGhlIGxlZnQgb2YgdGhlCisJ ICogYWR2aWNlLiBUaHVzLCBsaW5lcyBvZiBtb3JlIHRoYW4gNzcgY2hhcmFjdGVycyB3aWxsIHdy YXAuIFdlIHNldCB0aGUKKwkgKiB3cmFwIGxpbWl0IHRvIDc2IGhlcmUgc28gdGhhdCB0aGUgb3V0 cHV0IHdvbid0IHJlYWNoIGFsbCB0aGUgd2F5IHRvIHRoZQorCSAqIHZlcnkgbGFzdCBjb2x1bW4g b2YgdGhlIHRlcm1pbmFsLgorCSAqCisJICogT2YgY291cnNlLCB0aGlzIGlzIGZhaXJseSBhcmJp dHJhcnkgc2V0IG9mIGFzc3VtcHRpb25zLCBhbmQgb25lIGNvdWxkCisJICogd2VsbCBtYWtlIGFu IGFyZ3VtZW50IGZvciBhIGRpZmZlcmVudCB3cmFwIGxpbWl0LCBvciBmb3IgYSBjb25maWd1cmFi bGUKKwkgKiBvbmUuCisJICovCisJY29udGV4dC53cmFwX2NvbHVtbiA9IDc2OworCisJLyoKKwkg KiBFYWNoIHBpZWNlIG9mIEpPSU5fT1JERVIoKSBhZHZpY2UgZnVsbHkgZGVzY3JpYmVzIHRoZSBq b2luIG9yZGVyIGZvciBhCisJICogYSBzaW5nbGUgdW5yb2xsZWQgam9pbi4gTWVyZ2luZyBpcyBu b3QgcGVybWl0dGVkLCBiZWNhdXNlIHRoYXQgd291bGQKKwkgKiBjaGFuZ2UgdGhlIG1lYW5pbmcs IGUuZy4gU0VRX1NDQU4oYSBiIGMgZCkgbWVhbnMgc2ltcGx5IHRoYXQgc2VxdWVudGlhbAorCSAq IHNjYW5zIHNob3VsZCBiZSB1c2VkIGZvciBhbGwgb2YgdGhvc2UgcmVsYXRpb25zLCBhbmQgaXMg dGh1cyBlcXVpdmFsZW50CisJICogdG8gU0VRX1NDQU4oYSBiKSBTRVFfU0NBTihjIGQpLCBidXQg Sk9JTl9PUkRFUihhIGIgYyBkKSBtZWFucyB0aGF0ICJhIgorCSAqIGlzIHRoZSBkcml2aW5nIHRh YmxlIHdoaWNoIGlzIHRoZW4gam9pbmVkIHRvICJiIiB0aGVuICJjIiB0aGVuICJkIiwKKwkgKiB3 aGljaCBpcyB0b3RhbGx5IGRpZmZlcmVudCBmcm9tIEpPSU5fT1JERVIoYSBiKSBhbmQgSk9JTl9P UkRFUihjIGQpLgorCSAqLworCWZvcmVhY2gobGMsIHdhbGtlci0+dG9wbGV2ZWxfdW5yb2xsZWRf am9pbnMpCisJeworCQlwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luID0gbGZpcnN0KGxjKTsKKwor CQlpZiAoYnVmLT5sZW4gPiAwKQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnXG4nKTsK KwkJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LmJ1ZiwgIkpPSU5fT1JERVIoIik7CisJCXBncGFf b3V0cHV0X3Vucm9sbGVkX2pvaW4oJmNvbnRleHQsIHVqb2luKTsKKwkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoY29udGV4dC5idWYsICcpJyk7CisJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQu YnVmLCBjb250ZXh0LndyYXBfY29sdW1uKTsKKwl9CisKKwkvKiBFbWl0IGpvaW4gc3RyYXRlZ3kg YWR2aWNlLiAqLworCWZvciAoaW50IHMgPSAwOyBzIDwgTlVNX1BHUEFfSk9JTl9TVFJBVEVHWTsg KytzKQorCXsKKwkJY2hhcgkgICAqc3RyYXRlZ3kgPSBwZ3BhX2NzdHJpbmdfam9pbl9zdHJhdGVn eShzKTsKKworCQlwZ3BhX291dHB1dF9zaW1wbGVfc3RyYXRlZ3koJmNvbnRleHQsCisJCQkJCQkJ CQlzdHJhdGVneSwKKwkJCQkJCQkJCXdhbGtlci0+am9pbl9zdHJhdGVnaWVzW3NdKTsKKwl9CisK KwkvKgorCSAqIEVtaXQgc2NhbiBzdHJhdGVneSBhZHZpY2UgKGJ1dCBub3QgZm9yIG9yZGluYXJ5 IHNjYW5zLCB3aGljaCBhcmUKKwkgKiBkZWZpbml0aW9uYWxseSB1bmludGVyZXN0aW5nKS4KKwkg Ki8KKwlmb3IgKGludCBjID0gMDsgYyA8IE5VTV9QR1BBX1NDQU5fU1RSQVRFR1k7ICsrYykKKwkJ aWYgKGMgIT0gUEdQQV9TQ0FOX09SRElOQVJZKQorCQkJcGdwYV9vdXRwdXRfc2Nhbl9zdHJhdGVn eSgmY29udGV4dCwgYywgd2Fsa2VyLT5zY2Fuc1tjXSk7CisKKwkvKiBFbWl0IHF1ZXJ5IGZlYXR1 cmUgYWR2aWNlLiAqLworCWZvciAoaW50IHQgPSAwOyB0IDwgTlVNX1BHUEFfUUZfVFlQRVM7ICsr dCkKKwkJcGdwYV9vdXRwdXRfcXVlcnlfZmVhdHVyZSgmY29udGV4dCwgdCwgd2Fsa2VyLT5xdWVy eV9mZWF0dXJlc1t0XSk7CisKKwkvKiBFbWl0IE5PX0dBVEhFUiBhZHZpY2UuICovCisJcGdwYV9v dXRwdXRfbm9fZ2F0aGVyKCZjb250ZXh0LCB3YWxrZXItPm5vX2dhdGhlcl9zY2Fucyk7Cit9CisK Ky8qCisgKiBPdXRwdXQgdGhlIG1lbWJlcnMgb2YgYW4gdW5yb2xsZWQgam9pbiwgZmlyc3QgdGhl IG91dGVybW9zdCBtZW1iZXIsIGFuZAorICogdGhlbiB0aGUgaW5uZXIgbWVtYmVycyBvbmUgYnkg b25lLCBhcyBwYXJ0IG9mIEpPSU5fT1JERVIoKSBhZHZpY2UuCisgKi8KK3N0YXRpYyB2b2lkCitw Z3BhX291dHB1dF91bnJvbGxlZF9qb2luKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJ CQkJCQkgIHBncGFfdW5yb2xsZWRfam9pbiAqam9pbikKK3sKKwlwZ3BhX291dHB1dF9qb2luX21l bWJlcihjb250ZXh0LCAmam9pbi0+b3V0ZXIpOworCisJZm9yIChpbnQgayA9IDA7IGsgPCBqb2lu LT5uaW5uZXI7ICsraykKKwl7CisJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlciA9ICZqb2luLT5p bm5lcltrXTsKKworCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQt PndyYXBfY29sdW1uKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcp OworCQlwZ3BhX291dHB1dF9qb2luX21lbWJlcihjb250ZXh0LCBtZW1iZXIpOworCX0KK30KKwor LyoKKyAqIE91dHB1dCBhIHNpbmdsZSBtZW1iZXIgb2YgYW4gdW5yb2xsZWQgam9pbiBhcyBwYXJ0 IG9mIEpPSU5fT1JERVIoKSBhZHZpY2UuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9q b2luX21lbWJlcihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJcGdwYV9qb2lu X21lbWJlciAqbWVtYmVyKQoreworCWlmIChtZW1iZXItPnVucm9sbGVkX2pvaW4gIT0gTlVMTCkK Kwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKwkJcGdwYV9v dXRwdXRfdW5yb2xsZWRfam9pbihjb250ZXh0LCBtZW1iZXItPnVucm9sbGVkX2pvaW4pOworCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJfQorCWVsc2UKKwl7CisJ CXBncGFfc2NhbiAgKnNjYW4gPSBtZW1iZXItPnNjYW47CisKKwkJQXNzZXJ0KHNjYW4gIT0gTlVM TCk7CisJCWlmIChibXNfbWVtYmVyc2hpcChzY2FuLT5yZWxpZHMpID09IEJNU19TSU5HTEVUT04p CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5y ZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1 ZiwgJ3snKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYs IHNjYW4tPnJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICd9 Jyk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBPdXRwdXQgYWR2aWNlIGZvciBhIExpc3Qgb2YgcGdw YV9zY2FuIG9iamVjdHMuCisgKgorICogQWxsIHRoZSBzY2FucyBtdXN0IHVzZSB0aGUgc3RyYXRl Z3kgc3BlY2lmaWVkIGJ5IHRoZSAic3RyYXRlZ3kiIGFyZ3VtZW50LgorICovCitzdGF0aWMgdm9p ZAorcGdwYV9vdXRwdXRfc2Nhbl9zdHJhdGVneShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0 LAorCQkJCQkJICBwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkgIExpc3QgKnNj YW5zKQoreworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlmIChzY2FucyA9PSBOSUwpCisJCXJl dHVybjsKKworCWlmIChjb250ZXh0LT5idWYtPmxlbiA+IDApCisJCWFwcGVuZFN0cmluZ0luZm9D aGFyKGNvbnRleHQtPmJ1ZiwgJ1xuJyk7CisJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5idWYs ICIlcygiLAorCQkJCQkgcGdwYV9jc3RyaW5nX3NjYW5fc3RyYXRlZ3koc3RyYXRlZ3kpKTsKKwor CWZvcmVhY2hfcHRyKHBncGFfc2Nhbiwgc2Nhbiwgc2NhbnMpCisJeworCQlQbGFuCSAgICpwbGFu ID0gc2Nhbi0+cGxhbjsKKworCQlpZiAoZmlyc3QpCisJCQlmaXJzdCA9IGZhbHNlOworCQllbHNl CisJCXsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3Jh cF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOwor CQl9CisKKwkJLyogT3V0cHV0IHRoZSByZWxhdGlvbiBpZGVudGlmaWVycy4gKi8KKwkJaWYgKGJt c19tZW1iZXJzaGlwKHNjYW4tPnJlbGlkcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCXBncGFfb3V0 cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHNjYW4tPnJlbGlkcyk7CisJCWVs c2UKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOworCQkJ cGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRz KTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwkJfQorCisJ CS8qIEZvciBpbmRleCBvciBpbmRleC1vbmx5IHNjYW5zLCBvdXRwdXQgaW5kZXggaW5mb3JtYXRp b24uICovCisJCWlmIChzdHJhdGVneSA9PSBQR1BBX1NDQU5fSU5ERVgpCisJCXsKKwkJCUFzc2Vy dChJc0EocGxhbiwgSW5kZXhTY2FuKSk7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0 LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNv bnRleHQtPmJ1ZiwgJyAnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9uX25hbWUoY29udGV4dCwg KChJbmRleFNjYW4gKikgcGxhbiktPmluZGV4aWQpOworCQl9CisJCWVsc2UgaWYgKHN0cmF0ZWd5 ID09IFBHUEFfU0NBTl9JTkRFWF9PTkxZKQorCQl7CisJCQlBc3NlcnQoSXNBKHBsYW4sIEluZGV4 T25seVNjYW4pKTsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4 dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAn ICcpOworCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25fbmFtZShjb250ZXh0LAorCQkJCQkJCQkJICAo KEluZGV4T25seVNjYW4gKikgcGxhbiktPmluZGV4aWQpOworCQl9CisJfQorCisJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCXBncGFfbWF5YmVfbGluZWJyZWFrKGNv bnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworfQorCisvKgorICogT3V0cHV0IGEg c2NoZW1hLXF1YWxpZmllZCByZWxhdGlvbiBuYW1lLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9v dXRwdXRfcmVsYXRpb25fbmFtZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBPaWQgcmVs aWQpCit7CisJT2lkCQkJbnNwb2lkID0gZ2V0X3JlbF9uYW1lc3BhY2UocmVsaWQpOworCWNoYXIJ ICAgKnJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKG5zcG9pZCk7CisJ Y2hhcgkgICAqcmVsbmFtZSA9IGdldF9yZWxfbmFtZShyZWxpZCk7CisKKwlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKGNvbnRleHQtPmJ1ZiwgcXVvdGVfaWRlbnRpZmllcihyZWxuYW1lc3BhY2UpKTsK KwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcuJyk7CisJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhjb250ZXh0LT5idWYsIHF1b3RlX2lkZW50aWZpZXIocmVsbmFtZSkpOworfQor CisvKgorICogT3V0cHV0IGFkdmljZSBmb3IgYSBMaXN0IG9mIHBncGFfcXVlcnlfZmVhdHVyZSBv YmplY3RzLgorICoKKyAqIEFsbCBmZWF0dXJlcyBtdXN0IGJlIG9mIHRoZSB0eXBlIHNwZWNpZmll ZCBieSB0aGUgInR5cGUiIGFyZ3VtZW50LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRf cXVlcnlfZmVhdHVyZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBwZ3BhX3FmX3R5cGUg dHlwZSwKKwkJCQkJCSAgTGlzdCAqcXVlcnlfZmVhdHVyZXMpCit7CisJYm9vbAkJZmlyc3QgPSB0 cnVlOworCisJaWYgKHF1ZXJ5X2ZlYXR1cmVzID09IE5JTCkKKwkJcmV0dXJuOworCisJaWYgKGNv bnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVm LCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiVzKCIsCisJCQkJCSBw Z3BhX2NzdHJpbmdfcXVlcnlfZmVhdHVyZV90eXBlKHR5cGUpKTsKKworCWZvcmVhY2hfcHRyKHBn cGFfcXVlcnlfZmVhdHVyZSwgcWYsIHF1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJaWYgKGZpcnN0KQor CQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhj b250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9D aGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCWlmIChibXNfbWVtYmVyc2hpcChxZi0+ cmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRl eHQsIGNvbnRleHQtPmJ1ZiwgcWYtPnJlbGlkcyk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOworCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25z KGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcWYtPnJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJCX0KKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hh cihjb250ZXh0LT5idWYsICcpJyk7CisJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVm LCBjb250ZXh0LT53cmFwX2NvbHVtbik7Cit9CisKKy8qCisgKiBPdXRwdXQgInNpbXBsZSIgYWR2 aWNlIGZvciBhIExpc3Qgb2YgQml0bWFwc2V0IG9iamVjdHMgZWFjaCBvZiB3aGljaAorICogY29u dGFpbnMgb25lIG9yIG1vcmUgUlRJcy4KKyAqCisgKiBCeSBzaW1wbGUsIHdlIGp1c3QgbWVhbiB0 aGF0IHRoZSBhZHZpY2UgZW1pdHRlZCBmb2xsb3dzIHRoZSBtb3N0CisgKiBzdHJhaWdodGZvcndh cmQgcGF0dGVybjogdGhlIHN0cmF0ZWd5IG5hbWUsIGZvbGxvd2VkIGJ5IGEgbGlzdCBvZiBpdGVt cworICogc2VwYXJhdGVkIGJ5IHNwYWNlcyBhbmQgc3Vycm91bmRlZCBieSBwYXJlbnRoZXNlcy4g SW5kaXZpZHVhbCBpdGVtcyBpbgorICogdGhlIGxpc3QgYXJlIGEgc2luZ2xlIHJlbGF0aW9uIGlk ZW50aWZpZXIgZm9yIGEgQml0bWFwc2V0IHRoYXQgY29udGFpbnMKKyAqIGp1c3Qgb25lIG1lbWJl ciwgb3IgYSBzdWItbGlzdCBhZ2FpbiBzZXBhcmF0ZWQgYnkgc3BhY2VzIGFuZCBzdXJyb3VuZGVk CisgKiBieSBwYXJlbnRoZXNlcyBmb3IgYSBCaXRtYXBzZXQgd2l0aCBtdWx0aXBsZSBtZW1iZXJz LiBCaXRtYXBzZXRzIHdpdGgKKyAqIG5vIG1lbWJlcnMgcHJvYmFibHkgc2hvdWxkbid0IG9jY3Vy IGhlcmUsIGJ1dCBpZiB0aGV5IGRvIHRoZXknbGwgYmUKKyAqIHJlbmRlcmVkIGFzIGFuIGVtcHR5 IHN1Yi1saXN0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfc2ltcGxlX3N0cmF0ZWd5 KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKnN0cmF0ZWd5LAorCQkJCQkJCUxp c3QgKnJlbGlkX3NldHMpCit7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJaWYgKHJlbGlkX3Nl dHMgPT0gTklMKQorCQlyZXR1cm47CisKKwlpZiAoY29udGV4dC0+YnVmLT5sZW4gPiAwKQorCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICdcbicpOworCWFwcGVuZFN0cmluZ0lu Zm8oY29udGV4dC0+YnVmLCAiJXMoIiwgc3RyYXRlZ3kpOworCisJZm9yZWFjaF9ub2RlKEJpdG1h cHNldCwgcmVsaWRzLCByZWxpZF9zZXRzKQorCXsKKwkJaWYgKGZpcnN0KQorCQkJZmlyc3QgPSBm YWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYs IGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQt PmJ1ZiwgJyAnKTsKKwkJfQorCisJCWlmIChibXNfbWVtYmVyc2hpcChyZWxpZHMpID09IEJNU19T SU5HTEVUT04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVm LCByZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQt PmJ1ZiwgJygnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5i dWYsIHJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7 CisJCX0KKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJ cGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7 Cit9CisKKy8qCisgKiBPdXRwdXQgTk9fR0FUSEVSIGFkdmljZSBmb3IgYWxsIHJlbGF0aW9ucyBu b3QgYXBwZWFyaW5nIGJlbmVhdGggYW55CisgKiBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUu CisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9ub19nYXRoZXIocGdwYV9vdXRwdXRfY29u dGV4dCAqY29udGV4dCwgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJaWYgKHJlbGlkcyA9PSBOVUxM KQorCQlyZXR1cm47CisJaWYgKGNvbnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoY29udGV4dC0+YnVmLCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNv bnRleHQtPmJ1ZiwgIk5PX0dBVEhFUigiKTsKKwlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4 dCwgY29udGV4dC0+YnVmLCByZWxpZHMpOworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQt PmJ1ZiwgJyknKTsKK30KKworLyoKKyAqIE91dHB1dCB0aGUgaWRlbnRpZmllcnMgZm9yIGVhY2gg UlRJIGluIHRoZSBwcm92aWRlZCBzZXQuCisgKgorICogSWRlbnRpZmllcnMgYXJlIHNlcGFyYXRl ZCBieSBzcGFjZXMsIGFuZCBhIGxpbmUgYnJlYWsgaXMgcG9zc2libGUgYWZ0ZXIKKyAqIGVhY2gg b25lLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfcmVsYXRpb25zKHBncGFfb3V0cHV0 X2NvbnRleHQgKmNvbnRleHQsIFN0cmluZ0luZm8gYnVmLAorCQkJCQkgIEJpdG1hcHNldCAqcmVs aWRzKQoreworCWludAkJCXJ0aSA9IC0xOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCXdoaWxl ICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkgPj0gMCkKKwl7CisJCWNvbnN0 IGNoYXIgKnJpZF9zdHJpbmcgPSBjb250ZXh0LT5yaWRfc3RyaW5nc1tydGkgLSAxXTsKKworCQlp ZiAocmlkX3N0cmluZyA9PSBOVUxMKQorCQkJZWxvZyhFUlJPUiwgIm5vIGlkZW50aWZpZXIgZm9y IFJUSSAlZCIsIHJ0aSk7CisKKwkJaWYgKGZpcnN0KQorCQl7CisJCQlmaXJzdCA9IGZhbHNlOwor CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHJpZF9zdHJpbmcpOworCQl9CisJCWVsc2UK KwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoYnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7 CisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiAlcyIsIHJpZF9zdHJpbmcpOworCQl9CisJfQor fQorCisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3BlY2lm aWVkIGpvaW4gc3RyYXRlZ3kuCisgKi8KK3N0YXRpYyBjaGFyICoKK3BncGFfY3N0cmluZ19qb2lu X3N0cmF0ZWd5KHBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSkKK3sKKwlzd2l0Y2ggKHN0cmF0 ZWd5KQorCXsKKwkJY2FzZSBKU1RSQVRfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiAiTUVS R0VfSk9JTl9QTEFJTiI7CisJCWNhc2UgSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJ CQlyZXR1cm4gIk1FUkdFX0pPSU5fTUFURVJJQUxJWkUiOworCQljYXNlIEpTVFJBVF9ORVNURURf TE9PUF9QTEFJTjoKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfUExBSU4iOworCQljYXNlIEpTVFJB VF9ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfTUFURVJJ QUxJWkUiOworCQljYXNlIEpTVFJBVF9ORVNURURfTE9PUF9NRU1PSVpFOgorCQkJcmV0dXJuICJO RVNURURfTE9PUF9NRU1PSVpFIjsKKwkJY2FzZSBKU1RSQVRfSEFTSF9KT0lOOgorCQkJcmV0dXJu ICJIQVNIX0pPSU4iOworCX0KKworCXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9 CisKKy8qCisgKiBHZXQgYSBDIHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZp ZWQgc2NhbiBzdHJhdGVneS4KKyAqLworc3RhdGljIGNoYXIgKgorcGdwYV9jc3RyaW5nX3NjYW5f c3RyYXRlZ3kocGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5KQoreworCXN3aXRjaCAoc3RyYXRl Z3kpCisJeworCQljYXNlIFBHUEFfU0NBTl9PUkRJTkFSWToKKwkJCXJldHVybiAiT1JESU5BUllf U0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX1NFUToKKwkJCXJldHVybiAiU0VRX1NDQU4iOworCQlj YXNlIFBHUEFfU0NBTl9CSVRNQVBfSEVBUDoKKwkJCXJldHVybiAiQklUTUFQX0hFQVBfU0NBTiI7 CisJCWNhc2UgUEdQQV9TQ0FOX0ZPUkVJR046CisJCQlyZXR1cm4gIkZPUkVJR05fSk9JTiI7CisJ CWNhc2UgUEdQQV9TQ0FOX0lOREVYOgorCQkJcmV0dXJuICJJTkRFWF9TQ0FOIjsKKwkJY2FzZSBQ R1BBX1NDQU5fSU5ERVhfT05MWToKKwkJCXJldHVybiAiSU5ERVhfT05MWV9TQ0FOIjsKKwkJY2Fz ZSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRToKKwkJCXJldHVybiAiUEFSVElUSU9OV0lTRSI7CisJ CWNhc2UgUEdQQV9TQ0FOX1RJRDoKKwkJCXJldHVybiAiVElEX1NDQU4iOworCX0KKworCXBnX3Vu cmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBHZXQgYSBDIHN0cmluZyB0 aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQgc2NhbiBzdHJhdGVneS4KKyAqLworc3Rh dGljIGNoYXIgKgorcGdwYV9jc3RyaW5nX3F1ZXJ5X2ZlYXR1cmVfdHlwZShwZ3BhX3FmX3R5cGUg dHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpCisJeworCQljYXNlIFBHUEFRRl9HQVRIRVI6CisJCQly ZXR1cm4gIkdBVEhFUiI7CisJCWNhc2UgUEdQQVFGX0dBVEhFUl9NRVJHRToKKwkJCXJldHVybiAi R0FUSEVSX01FUkdFIjsKKwkJY2FzZSBQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRToKKwkJCXJl dHVybiAiU0VNSUpPSU5fTk9OX1VOSVFVRSI7CisJCWNhc2UgUEdQQVFGX1NFTUlKT0lOX1VOSVFV RToKKwkJCXJldHVybiAiU0VNSUpPSU5fVU5JUVVFIjsKKwl9CisKKworCXBnX3VucmVhY2hhYmxl KCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBJbnNlcnQgYSBsaW5lIGJyZWFrIGludG8g dGhlIFN0cmluZ0luZm9EYXRhLCBpZiBuZWVkZWQuCisgKgorICogSWYgd3JhcF9jb2x1bW4gaXMg emVybyBvciBuZWdhdGl2ZSwgdGhpcyBkb2VzIG5vdGhpbmcuIE90aGVyd2lzZSwgd2UKKyAqIGNv bnNpZGVyIGluc2VydGluZyBhIG5ld2xpbmUuIFdlIG9ubHkgaW5zZXJ0IGEgbmV3bGluZSBpZiB0 aGUgbGVuZ3RoIG9mCisgKiB0aGUgbGFzdCBsaW5lIGluIHRoZSBidWZmZXIgZXhjZWVkcyB3cmFw X2NvbHVtbiwgYW5kIG5vdCBpZiB3ZSdkIGJlCisgKiBpbnNlcnRpbmcgYSBuZXdsaW5lIGF0IG9y IGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IGxpbmUuCisgKgorICogVGhlIHBv c2l0aW9uIGF0IHdoaWNoIHRoZSBuZXdsaW5lIGlzIGluc2VydGVkIGlzIHNpbXBseSB3aGVyZXZl ciB0aGUKKyAqIGJ1ZmZlciBlbmRlZCB0aGUgbGFzdCB0aW1lIHRoaXMgZnVuY3Rpb24gd2FzIGNh bGxlZC4gSW4gb3RoZXIgd29yZHMsCisgKiB0aGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGNhbGwg dGhpcyBmdW5jdGlvbiBldmVyeSB0aW1lIHdlIHJlYWNoIGEgZ29vZAorICogcGxhY2UgZm9yIGEg bGluZSBicmVhay4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfbWF5YmVfbGluZWJyZWFrKFN0cmlu Z0luZm8gYnVmLCBpbnQgd3JhcF9jb2x1bW4pCit7CisJY2hhcgkgICAqdHJhaWxpbmdfbmw7CisJ aW50CQkJbGluZV9zdGFydDsKKwlpbnQJCQlzYXZlX2N1cnNvcjsKKworCS8qIElmIGxpbmUgd3Jh cHBpbmcgaXMgZGlzYWJsZWQsIGV4aXQgcXVpY2tseS4gKi8KKwlpZiAod3JhcF9jb2x1bW4gPD0g MCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBTZXQgbGluZV9zdGFydCB0byB0aGUgYnl0ZSBvZmZz ZXQgd2l0aGluIGJ1Zi0+ZGF0YSBvZiB0aGUgZmlyc3QKKwkgKiBjaGFyYWN0ZXIgb2YgdGhlIGN1 cnJlbnQgbGluZSwgd2hlcmUgdGhlIGN1cnJlbnQgbGluZSBtZWFucyB0aGUgbGFzdAorCSAqIG9u ZSBpbiB0aGUgYnVmZmVyLiBOb3RlIHRoYXQgbGluZV9zdGFydCBjb3VsZCBiZSB0aGUgb2Zmc2V0 IG9mIHRoZQorCSAqIHRyYWlsaW5nICdcMCcgaWYgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBi dWZmZXIgaXMgYSBsaW5lIGJyZWFrLgorCSAqLworCXRyYWlsaW5nX25sID0gc3RycmNocihidWYt PmRhdGEsICdcbicpOworCWlmICh0cmFpbGluZ19ubCA9PSBOVUxMKQorCQlsaW5lX3N0YXJ0ID0g MDsKKwllbHNlCisJCWxpbmVfc3RhcnQgPSAodHJhaWxpbmdfbmwgLSBidWYtPmRhdGEpICsgMTsK KworCS8qCisJICogUmVtZW1iZXIgdGhhdCB0aGUgY3VycmVudCBlbmQgb2YgdGhlIGJ1ZmZlciBp cyBhIHBvdGVudGlhbCBsb2NhdGlvbiB0bworCSAqIGluc2VydCBhIGxpbmUgYnJlYWsgb24gYSBm dXR1cmUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgorCSAqLworCXNhdmVfY3Vyc29yID0gYnVmLT5j dXJzb3I7CisJYnVmLT5jdXJzb3IgPSBidWYtPmxlbjsKKworCS8qIElmIHdlIGhhdmVuJ3QgcGFz c2VkIHRoZSB3cmFwIGNvbHVtbiwgd2UgZG9uJ3QgbmVlZCBhIG5ld2xpbmUuICovCisJaWYgKGJ1 Zi0+bGVuIC0gbGluZV9zdGFydCA8PSB3cmFwX2NvbHVtbikKKwkJcmV0dXJuOworCisJLyoKKwkg KiBJdCBvbmx5IG1ha2VzIHNlbnNlIHRvIGluc2VydCBhIG5ld2xpbmUgYXQgYSBwb3NpdGlvbiBs YXRlciB0aGFuIHRoZQorCSAqIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBsaW5lLgorCSAqLwor CWlmIChidWYtPmN1cnNvciA8PSBsaW5lX3N0YXJ0KQorCQlyZXR1cm47CisKKwkvKiBJbnNlcnQg YSBuZXdsaW5lIGF0IHRoZSBwcmV2aW91cyBjdXJzb3IgbG9jYXRpb24uICovCisJZW5sYXJnZVN0 cmluZ0luZm8oYnVmLCAxKTsKKwltZW1tb3ZlKCZidWYtPmRhdGFbc2F2ZV9jdXJzb3JdICsgMSwg JmJ1Zi0+ZGF0YVtzYXZlX2N1cnNvcl0sCisJCQlidWYtPmxlbiAtIHNhdmVfY3Vyc29yKTsKKwkr K2J1Zi0+Y3Vyc29yOworCWJ1Zi0+ZGF0YVsrK2J1Zi0+bGVuXSA9ICdcMCc7CisJYnVmLT5kYXRh W3NhdmVfY3Vyc29yXSA9ICdcbic7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfb3V0cHV0LmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ3NDk2ZDc2ZjUyCi0tLSAv ZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5oCkBAIC0w LDAgKzEsMjIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfb3V0cHV0LmgKKyAq CSAgcHJvZHVjZSB0ZXh0dWFsIG91dHB1dCBmcm9tIHRoZSByZXN1bHRzIG9mIGEgcGxhbiB0cmVl IHdhbGsKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9v dXRwdXQuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfT1VUUFVU X0gKKyNkZWZpbmUgUEdQQV9PVVRQVVRfSAorCisjaW5jbHVkZSAicGdwYV9pZGVudGlmaWVyLmgi CisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworZXh0ZXJuIHZvaWQgcGdwYV9vdXRwdXRfYWR2 aWNlKFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCSAgIHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAq d2Fsa2VyLAorCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMpOworCisj ZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueSBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uNGMzYTNlZDZkYjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKQEAgLTAsMCArMSwzMDEgQEAKKyV7Cisv KgorICogUGFyc2VyIGZvciBwbGFuIGFkdmljZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0y MDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5o IgorCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJm bWdyLmgiCisjaW5jbHVkZSAibm9kZXMvbWlzY25vZGVzLmgiCisjaW5jbHVkZSAidXRpbHMvYnVp bHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbG9hdC5oIgorCisjaW5jbHVkZSAicGdwYV9hc3Qu aCIKKyNpbmNsdWRlICJwZ3BhX3BhcnNlci5oIgorCisvKgorICogQmlzb24gZG9lc24ndCBhbGxv Y2F0ZSBhbnl0aGluZyB0aGF0IG5lZWRzIHRvIGxpdmUgYWNyb3NzIHBhcnNlciBjYWxscywKKyAq IHNvIHdlIGNhbiBlYXNpbHkgaGF2ZSBpdCB1c2UgcGFsbG9jIGluc3RlYWQgb2YgbWFsbG9jLiAg VGhpcyBwcmV2ZW50cworICogbWVtb3J5IGxlYWtzIGlmIHdlIGVycm9yIG91dCBkdXJpbmcgcGFy c2luZy4KKyAqLworI2RlZmluZSBZWU1BTExPQyBwYWxsb2MKKyNkZWZpbmUgWVlGUkVFICAgcGZy ZWUKKyV9CisKKy8qIEJJU09OIERlY2xhcmF0aW9ucyAqLworJXBhcnNlLXBhcmFtIHtMaXN0ICoq cmVzdWx0fQorJXBhcnNlLXBhcmFtIHtjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3B9CislcGFyc2Ut cGFyYW0ge3l5c2Nhbl90IHl5c2Nhbm5lcn0KKyVsZXgtcGFyYW0ge0xpc3QgKipyZXN1bHR9Cisl bGV4LXBhcmFtIHtjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3B9CislbGV4LXBhcmFtIHt5eXNjYW5f dCB5eXNjYW5uZXJ9CislcHVyZS1wYXJzZXIKKyVleHBlY3QgMAorJW5hbWUtcHJlZml4PSJwZ3Bh X3l5IgorCisldW5pb24KK3sKKwljaGFyCSAgICpzdHI7CisJaW50CQkJaW50ZWdlcjsKKwlMaXN0 CSAgICpsaXN0OworCXBncGFfYWR2aWNlX2l0ZW0gKml0ZW07CisJcGdwYV9hZHZpY2VfdGFyZ2V0 ICp0YXJnZXQ7CisJcGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQ7Cit9CisldG9rZW4gPHN0cj4g VE9LX0lERU5UIFRPS19UQUdfSk9JTl9PUkRFUiBUT0tfVEFHX0lOREVYCisldG9rZW4gPHN0cj4g VE9LX1RBR19TSU1QTEUgVE9LX1RBR19HRU5FUklDCisldG9rZW4gPGludGVnZXI+IFRPS19JTlRF R0VSCisKKyV0eXBlIDxpbnRlZ2VyPiBvcHRfcmlfb2NjdXJyZW5jZQorJXR5cGUgPGl0ZW0+IGFk dmljZV9pdGVtCisldHlwZSA8bGlzdD4gYWR2aWNlX2l0ZW1fbGlzdCBnZW5lcmljX3RhcmdldF9s aXN0CisldHlwZSA8bGlzdD4gaW5kZXhfdGFyZ2V0X2xpc3Qgam9pbl9vcmRlcl90YXJnZXRfbGlz dAorJXR5cGUgPGxpc3Q+IG9wdF9wYXJ0aXRpb24gc2ltcGxlX3RhcmdldF9saXN0CisldHlwZSA8 c3RyPiBpZGVudGlmaWVyIG9wdF9wbGFuX25hbWUKKyV0eXBlIDx0YXJnZXQ+IGdlbmVyaWNfc3Vi bGlzdCBqb2luX29yZGVyX3N1Ymxpc3QKKyV0eXBlIDx0YXJnZXQ+IHJlbGF0aW9uX2lkZW50aWZp ZXIKKyV0eXBlIDxpdGFyZ2V0PiBpbmRleF9uYW1lCisKKyVzdGFydCBwYXJzZV90b3BsZXZlbAor CisvKiBHcmFtbWFyIGZvbGxvd3MgKi8KKyUlCisKK3BhcnNlX3RvcGxldmVsOiBhZHZpY2VfaXRl bV9saXN0CisJCXsKKwkJCSh2b2lkKSB5eW5lcnJzOwkJCQkvKiBzdXBwcmVzcyBjb21waWxlciB3 YXJuaW5nICovCisJCQkqcmVzdWx0ID0gJDE7CisJCX0KKwk7CisKK2FkdmljZV9pdGVtX2xpc3Q6 IGFkdmljZV9pdGVtX2xpc3QgYWR2aWNlX2l0ZW0KKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsg fQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworYWR2aWNlX2l0ZW06IFRPS19UQUdfSk9JTl9P UkRFUiAnKCcgam9pbl9vcmRlcl90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2Mw X29iamVjdChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJCSQkLT50YWcgPSBQR1BBX1RBR19KT0lOX09S REVSOworCQkJJCQtPnRhcmdldHMgPSAkMzsKKwkJCWlmICgkMyA9PSBOSUwpCisJCQkJcGdwYV95 eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkgIkpP SU5fT1JERVIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSB0YXJnZXQiKTsKKwkJfQorCXwgVE9LX1RB R19JTkRFWCAnKCcgaW5kZXhfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9v YmplY3QocGdwYV9hZHZpY2VfaXRlbSk7CisJCQlpZiAoc3RyY21wKCQxLCAiaW5kZXhfb25seV9z Y2FuIikgPT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOworCQkJ ZWxzZSBpZiAoc3RyY21wKCQxLCAiaW5kZXhfc2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9IFBH UEFfVEFHX0lOREVYX1NDQU47CisJCQllbHNlCisJCQkJZWxvZyhFUlJPUiwgInRhZyBwYXJzaW5n IGZhaWxlZDogJXMiLCAkMSk7CisJCQkkJC0+dGFyZ2V0cyA9ICQzOworCQl9CisJfCBUT0tfVEFH X1NJTVBMRSAnKCcgc2ltcGxlX3RhcmdldF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBf b2JqZWN0KHBncGFfYWR2aWNlX2l0ZW0pOworCQkJaWYgKHN0cmNtcCgkMSwgImJpdG1hcF9oZWFw X3NjYW4iKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOwor CQkJZWxzZSBpZiAoc3RyY21wKCQxLCAibm9fZ2F0aGVyIikgPT0gMCkKKwkJCQkkJC0+dGFnID0g UEdQQV9UQUdfTk9fR0FUSEVSOworCQkJZWxzZSBpZiAoc3RyY21wKCQxLCAic2VxX3NjYW4iKSA9 PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19TRVFfU0NBTjsKKwkJCWVsc2UgaWYgKHN0cmNt cCgkMSwgInRpZF9zY2FuIikgPT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQQV9UQUdfVElEX1NDQU47 CisJCQllbHNlCisJCQkJZWxvZyhFUlJPUiwgInRhZyBwYXJzaW5nIGZhaWxlZDogJXMiLCAkMSk7 CisJCQkkJC0+dGFyZ2V0cyA9ICQzOworCQl9CisJfCBUT0tfVEFHX0dFTkVSSUMgJygnIGdlbmVy aWNfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCWJvb2wJZmFpbDsKKworCQkJJCQgPSBwYWxsb2Mw X29iamVjdChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJCSQkLT50YWcgPSBwZ3BhX3BhcnNlX2Fkdmlj ZV90YWcoJDEsICZmYWlsKTsKKwkJCWlmIChmYWlsKQorCQkJeworCQkJCXBncGFfeXllcnJvcihy ZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJICJ1bnJlY29nbml6 ZWQgYWR2aWNlIHRhZyIpOworCQkJfQorCisJCQlpZiAoJCQtPnRhZyA9PSBQR1BBX1RBR19GT1JF SUdOX0pPSU4pCisJCQl7CisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJn ZXQsICQzKQorCQkJCXsKKwkJCQkJaWYgKHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURF TlRJRklFUiB8fAorCQkJCQkJbGlzdF9sZW5ndGgodGFyZ2V0LT5jaGlsZHJlbikgPT0gMSkKKwkJ CQkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAor CQkJCQkJCQkJCSAiRk9SRUlHTl9KT0lOIHRhcmdldHMgbXVzdCBjb250YWluIG1vcmUgdGhhbiBv bmUgcmVsYXRpb24gaWRlbnRpZmllciIpOworCQkJCX0KKwkJCX0KKworCQkJJCQtPnRhcmdldHMg PSAkMzsKKwkJfQorCTsKKworcmVsYXRpb25faWRlbnRpZmllcjogaWRlbnRpZmllciBvcHRfcmlf b2NjdXJyZW5jZSBvcHRfcGFydGl0aW9uIG9wdF9wbGFuX25hbWUKKwkJeworCQkJJCQgPSBwYWxs b2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCQkJJCQtPnR0eXBlID0gUEdQQV9UQVJH RVRfSURFTlRJRklFUjsKKwkJCSQkLT5yaWQuYWxpYXNfbmFtZSA9ICQxOworCQkJJCQtPnJpZC5v Y2N1cnJlbmNlID0gJDI7CisJCQlpZiAobGlzdF9sZW5ndGgoJDMpID09IDIpCisJCQl7CisJCQkJ JCQtPnJpZC5wYXJ0bnNwID0gbGluaXRpYWwoJDMpOworCQkJCSQkLT5yaWQucGFydHJlbCA9IGxz ZWNvbmQoJDMpOworCQkJfQorCQkJZWxzZSBpZiAoJDMgIT0gTklMKQorCQkJCSQkLT5yaWQucGFy dHJlbCA9IGxpbml0aWFsKCQzKTsKKwkJCSQkLT5yaWQucGxhbl9uYW1lID0gJDQ7CisJCX0KKwk7 CisKK2luZGV4X25hbWU6IGlkZW50aWZpZXIKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChw Z3BhX2luZGV4X3RhcmdldCk7CisJCQkkJC0+aW5kbmFtZSA9ICQxOworCQl9CisJfCBpZGVudGlm aWVyICcuJyBpZGVudGlmaWVyCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9pbmRl eF90YXJnZXQpOworCQkJJCQtPmluZG5hbWVzcGFjZSA9ICQxOworCQkJJCQtPmluZG5hbWUgPSAk MzsKKwkJfQorCTsKKworb3B0X3JpX29jY3VycmVuY2U6CisJJyMnIFRPS19JTlRFR0VSCisJCXsK KwkJCWlmICgkMiA8PSAwKQorCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21z Z19wLCB5eXNjYW5uZXIsCisJCQkJCQkJICJvbmx5IHBvc2l0aXZlIG9jY3VycmVuY2UgbnVtYmVy cyBhcmUgcGVybWl0dGVkIik7CisJCQkkJCA9ICQyOworCQl9CisJfAorCQl7CisJCQkvKiBUaGUg ZGVmYXVsdCBvY2N1cnJlbmNlIG51bWJlciBpcyAxLiAqLworCQkJJCQgPSAxOworCQl9CisJOwor CitpZGVudGlmaWVyOiBUT0tfSURFTlQKKwl8IFRPS19UQUdfSk9JTl9PUkRFUgorCXwgVE9LX1RB R19JTkRFWAorCXwgVE9LX1RBR19TSU1QTEUKKwl8IFRPS19UQUdfR0VORVJJQworCTsKKworLyoK KyAqIFdoZW4gZ2VuZXJhdGluZyBhZHZpY2UsIHdlIGFsd2F5cyBzY2hlbWEtcXVhbGlmeSB0aGUg cGFydGl0aW9uIG5hbWUsIGJ1dAorICogd2hlbiBwYXJzaW5nIGFkdmljZSwgd2UgYWNjZXB0IGEg c3BlY2lmaWNhdGlvbiB0aGF0IGxhY2tzIG9uZS4KKyAqLworb3B0X3BhcnRpdGlvbjoKKwknLycg VE9LX0lERU5UICcuJyBUT0tfSURFTlQKKwkJeyAkJCA9IGxpc3RfbWFrZTIoJDIsICQ0KTsgfQor CXwgJy8nIFRPS19JREVOVAorCQl7ICQkID0gbGlzdF9tYWtlMSgkMik7IH0KKwl8CisJCXsgJCQg PSBOSUw7IH0KKwk7CisKK29wdF9wbGFuX25hbWU6CisJJ0AnIFRPS19JREVOVAorCQl7ICQkID0g JDI7IH0KKwl8CisJCXsgJCQgPSBOVUxMOyB9CisJOworCitnZW5lcmljX3RhcmdldF9saXN0OiBn ZW5lcmljX3RhcmdldF9saXN0IHJlbGF0aW9uX2lkZW50aWZpZXIKKwkJeyAkJCA9IGxhcHBlbmQo JDEsICQyKTsgfQorCXwgZ2VuZXJpY190YXJnZXRfbGlzdCBnZW5lcmljX3N1Ymxpc3QKKwkJeyAk JCA9IGxhcHBlbmQoJDEsICQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworZ2VuZXJp Y19zdWJsaXN0OiAnKCcgc2ltcGxlX3RhcmdldF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxv YzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdF VF9PUkRFUkVEX0xJU1Q7CisJCQkkJC0+Y2hpbGRyZW4gPSAkMjsKKwkJfQorCTsKKworaW5kZXhf dGFyZ2V0X2xpc3Q6CisJICBpbmRleF90YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVyIGlu ZGV4X25hbWUKKwkJeworCQkJJDItPml0YXJnZXQgPSAkMzsKKwkJCSQkID0gbGFwcGVuZCgkMSwg JDIpOworCQl9CisJfAorCQl7ICQkID0gTklMOyB9CisJOworCitqb2luX29yZGVyX3RhcmdldF9s aXN0OiBqb2luX29yZGVyX3RhcmdldF9saXN0IHJlbGF0aW9uX2lkZW50aWZpZXIKKwkJeyAkJCA9 IGxhcHBlbmQoJDEsICQyKTsgfQorCXwgam9pbl9vcmRlcl90YXJnZXRfbGlzdCBqb2luX29yZGVy X3N1Ymxpc3QKKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsg fQorCTsKKworam9pbl9vcmRlcl9zdWJsaXN0OgorCScoJyBqb2luX29yZGVyX3RhcmdldF9saXN0 ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJ CQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q7CisJCQkkJC0+Y2hpbGRyZW4g PSAkMjsKKwkJfQorCXwgJ3snIHNpbXBsZV90YXJnZXRfbGlzdCAnfScKKwkJeworCQkJJCQgPSBw YWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCQkJJCQtPnR0eXBlID0gUEdQQV9U QVJHRVRfVU5PUkRFUkVEX0xJU1Q7CisJCQkkJC0+Y2hpbGRyZW4gPSAkMjsKKwkJfQorCTsKKwor c2ltcGxlX3RhcmdldF9saXN0OiBzaW1wbGVfdGFyZ2V0X2xpc3QgcmVsYXRpb25faWRlbnRpZmll cgorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfAorCQl7ICQkID0gTklMOyB9CisJOwor CislJQorCisvKgorICogUGFyc2UgYW4gYWR2aWNlX3N0cmluZyBhbmQgcmV0dXJuIHRoZSByZXN1 bHRpbmcgbGlzdCBvZiBwZ3BhX2FkdmljZV9pdGVtCisgKiBvYmplY3RzLiBJZiBhIHBhcnNlIGVy cm9yIG9jY3VycywgaW5zdGVhZCByZXR1cm4gTlVMTC4KKyAqCisgKiBJZiB0aGUgcmV0dXJuIHZh bHVlIGlzIE5VTEwsICplcnJvcl9wIHdpbGwgYmUgc2V0IHRvIHRoZSBlcnJvciBtZXNzYWdlOwor ICogb3RoZXJ3aXNlLCAqZXJyb3JfcCB3aWxsIGJlIHNldCB0byBOVUxMLgorICovCitMaXN0ICoK K3BncGFfcGFyc2UoY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZywgY2hhciAqKmVycm9yX3ApCit7 CisJeXlzY2FuX3QJc2Nhbm5lcjsKKwlMaXN0CSAgICpyZXN1bHQ7CisJY2hhcgkgICAqZXJyb3Ig PSBOVUxMOworCisJcGdwYV9zY2FubmVyX2luaXQoYWR2aWNlX3N0cmluZywgJnNjYW5uZXIpOwor CXBncGFfeXlwYXJzZSgmcmVzdWx0LCAmZXJyb3IsIHNjYW5uZXIpOworCXBncGFfc2Nhbm5lcl9m aW5pc2goc2Nhbm5lcik7CisKKwlpZiAoZXJyb3IgIT0gTlVMTCkKKwl7CisJCSplcnJvcl9wID0g ZXJyb3I7CisJCXJldHVybiBOVUxMOworCX0KKworCSplcnJvcl9wID0gTlVMTDsKKwlyZXR1cm4g cmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5u ZXIuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFkM2VhZDExMTI1Ci0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYwpAQCAtMCwwICsxLDIwMjQg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfcGxhbm5lci5jCisgKgkgIHBsYW5u ZXIgaG9va3MKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9wbGFubmVyLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3Rn cmVzLmgiCisKKyNpbmNsdWRlICJwZ19wbGFuX2FkdmljZS5oIgorI2luY2x1ZGUgInBncGFfY29s bGVjdG9yLmgiCisjaW5jbHVkZSAicGdwYV9pZGVudGlmaWVyLmgiCisjaW5jbHVkZSAicGdwYV9v dXRwdXQuaCIKKyNpbmNsdWRlICJwZ3BhX3BsYW5uZXIuaCIKKyNpbmNsdWRlICJwZ3BhX3Ryb3Zl LmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworI2luY2x1ZGUgImNvbW1vbi9oYXNoZm5f dW5zdGFibGUuaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJvcHRp bWl6ZXIvZXh0ZW5kcGxhbi5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wYXRobm9kZS5oIgorI2lu Y2x1ZGUgIm9wdGltaXplci9wYXRocy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wbGFuY2F0Lmgi CisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5uZXIuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0 cmVlLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKKyNpZmRlZiBVU0VfQVNTRVJU X0NIRUNLSU5HCisKKy8qCisgKiBXaGVuIGFzc2VydGlvbnMgYXJlIGVuYWJsZWQsIHdlIHRyeSBn ZW5lcmF0aW5nIHJlbGF0aW9uIGlkZW50aWZpZXJzIGR1cmluZworICogcGxhbm5pbmcsIHNhdmlu ZyB0aGVtIGluIGEgaGFzaCB0YWJsZSwgYW5kIHRoZW4gY3Jvc3MtY2hlY2tpbmcgdGhlbSBhZ2Fp bnN0CisgKiB0aGUgb25lcyBnZW5lcmF0ZWQgYWZ0ZXIgcGxhbm5pbmcgaXMgY29tcGxldGUuCisg Ki8KK3R5cGVkZWYgc3RydWN0IHBncGFfcmlfY2hlY2tlcl9rZXkKK3sKKwljaGFyCSAgICpwbGFu X25hbWU7CisJSW5kZXgJCXJ0aTsKK30gcGdwYV9yaV9jaGVja2VyX2tleTsKKwordHlwZWRlZiBz dHJ1Y3QgcGdwYV9yaV9jaGVja2VyCit7CisJcGdwYV9yaV9jaGVja2VyX2tleSBrZXk7CisJdWlu dDMyCQlzdGF0dXM7CisJY29uc3QgY2hhciAqcmlkX3N0cmluZzsKK30gcGdwYV9yaV9jaGVja2Vy OworCitzdGF0aWMgdWludDMyIHBncGFfcmlfY2hlY2tlcl9oYXNoX2tleShwZ3BhX3JpX2NoZWNr ZXJfa2V5IGtleSk7CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorcGdwYV9yaV9jaGVja2VyX2NvbXBh cmVfa2V5KHBncGFfcmlfY2hlY2tlcl9rZXkgYSwgcGdwYV9yaV9jaGVja2VyX2tleSBiKQorewor CWlmIChhLnJ0aSAhPSBiLnJ0aSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChhLnBsYW5fbmFtZSA9 PSBOVUxMKQorCQlyZXR1cm4gKGIucGxhbl9uYW1lID09IE5VTEwpOworCWlmIChiLnBsYW5fbmFt ZSA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHN0cmNtcChhLnBsYW5fbmFtZSwg Yi5wbGFuX25hbWUpID09IDA7Cit9CisKKyNkZWZpbmUgU0hfUFJFRklYCQkJcGdwYV9yaV9jaGVj aworI2RlZmluZSBTSF9FTEVNRU5UX1RZUEUJCXBncGFfcmlfY2hlY2tlcgorI2RlZmluZSBTSF9L RVlfVFlQRQkJCXBncGFfcmlfY2hlY2tlcl9rZXkKKyNkZWZpbmUgU0hfS0VZCQkJCWtleQorI2Rl ZmluZSBTSF9IQVNIX0tFWSh0Yiwga2V5KQlwZ3BhX3JpX2NoZWNrZXJfaGFzaF9rZXkoa2V5KQor I2RlZmluZQlTSF9FUVVBTCh0YiwgYSwgYikJcGdwYV9yaV9jaGVja2VyX2NvbXBhcmVfa2V5KGEs IGIpCisjZGVmaW5lIFNIX1NDT1BFCQkJc3RhdGljIGlubGluZQorI2RlZmluZSBTSF9ERUNMQVJF CisjZGVmaW5lIFNIX0RFRklORQorI2luY2x1ZGUgImxpYi9zaW1wbGVoYXNoLmgiCisKKyNlbmRp ZgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5uZXJfc3RhdGUKK3sKKwlFeHBsYWluU3RhdGUg KmV4cGxhaW5fc3RhdGU7CisJYm9vbAkJZ2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrOworCWJvb2wJ CWdlbmVyYXRlX2FkdmljZV9zdHJpbmc7CisJcGdwYV90cm92ZSAqdHJvdmU7CisJTWVtb3J5Q29u dGV4dCB0cm92ZV9jeHQ7CisJTGlzdAkgICAqc2pfdW5pcXVlX3JlbHM7CisKKyNpZmRlZiBVU0Vf QVNTRVJUX0NIRUNLSU5HCisJcGdwYV9yaV9jaGVja19oYXNoICpyaV9jaGVja19oYXNoOworI2Vu ZGlmCit9IHBncGFfcGxhbm5lcl9zdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9qb2luX3N0 YXRlCit7CisJLyogTW9zdC1yZWNlbnRseS1jb25zaWRlcmVkIG91dGVyIHJlbC4gKi8KKwlSZWxP cHRJbmZvICpvdXRlcnJlbDsKKworCS8qIE1vc3QtcmVjZW50bHktY29uc2lkZXJlZCBpbm5lciBy ZWwuICovCisJUmVsT3B0SW5mbyAqaW5uZXJyZWw7CisKKwkvKgorCSAqIEFycmF5IG9mIHJlbGF0 aW9uIGlkZW50aWZpZXJzIGZvciBhbGwgbWVtYmVycyBvZiB0aGlzIGpvaW5yZWwsIHdpdGgKKwkg KiBvdXRlcnJlbCBpZGVuaWZpZXJzIGJlZm9yZSBpbm5lcnJlbCBpZGVudGlmaWVycy4KKwkgKi8K KwlwZ3BhX2lkZW50aWZpZXIgKnJpZHM7CisKKwkvKiBOdW1iZXIgb2Ygb3V0ZXIgcmVsIGlkZW50 aWZpZXJzLiAqLworCWludAkJCW91dGVyX2NvdW50OworCisJLyogTnVtYmVyIG9mIGlubmVyIHJl bCBpZGVudGlmaWVycy4gKi8KKwlpbnQJCQlpbm5lcl9jb3VudDsKKworCS8qCisJICogVHJvdmUg bG9va3VwIHJlc3VsdHMuCisJICoKKwkgKiBqb2luX2VudHJpZXMgYW5kIHJlbF9lbnRyaWVzIGFy ZSBhcnJheXMgb2YgZW50cmllcywgYW5kIGpvaW5faW5kZXhlcworCSAqIGFuZCByZWxfaW5kZXhl cyBhcmUgdGhlIGludGVnZXIgb2Zmc2V0cyB3aXRoaW4gdGhvc2UgYXJyYXlzIG9mIGVudHJpZXMK KwkgKiBwb3RlbnRpYWxseSByZWxldmFudCB0byB1cy4gVGhlICJqb2luIiBmaWVsZHMgY29ycmVz cG9uZCB0byBhIGxvb2t1cAorCSAqIHVzaW5nIFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4gYW5kIHRo ZSAicmVsIiBmaWVsZHMgdG8gYSBsb29rdXAgdXNpbmcKKwkgKiBQR1BBX1RST1ZFX0xPT0tVUF9S RUwuCisJICovCisJcGdwYV90cm92ZV9lbnRyeSAqam9pbl9lbnRyaWVzOworCUJpdG1hcHNldCAg KmpvaW5faW5kZXhlczsKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICpyZWxfZW50cmllczsKKwlCaXRtYXBz ZXQgICpyZWxfaW5kZXhlczsKK30gcGdwYV9qb2luX3N0YXRlOworCisvKiBTYXZlZCBob29rIHZh bHVlcyAqLworc3RhdGljIGdldF9yZWxhdGlvbl9pbmZvX2hvb2tfdHlwZSBwcmV2X2dldF9yZWxh dGlvbl9pbmZvID0gTlVMTDsKK3N0YXRpYyBqb2luX3BhdGhfc2V0dXBfaG9va190eXBlIHByZXZf am9pbl9wYXRoX3NldHVwID0gTlVMTDsKK3N0YXRpYyBqb2lucmVsX3NldHVwX2hvb2tfdHlwZSBw cmV2X2pvaW5yZWxfc2V0dXAgPSBOVUxMOworc3RhdGljIHBsYW5uZXJfc2V0dXBfaG9va190eXBl IHByZXZfcGxhbm5lcl9zZXR1cCA9IE5VTEw7CitzdGF0aWMgcGxhbm5lcl9zaHV0ZG93bl9ob29r X3R5cGUgcHJldl9wbGFubmVyX3NodXRkb3duID0gTlVMTDsKKworLyogT3RoZXIgZ2xvYmFsIHZh cmlhYmVzICovCitzdGF0aWMgaW50CXBsYW5uZXJfZXh0ZW5zaW9uX2lkID0gLTE7CisKKy8qIEZ1 bmN0aW9uIHByb3RvdHlwZXMuICovCitzdGF0aWMgdm9pZCBwZ3BhX2dldF9yZWxhdGlvbl9pbmZv KFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkgICBPaWQgcmVsYXRpb25PYmplY3RJZCwKKwkJ CQkJCQkJICAgYm9vbCBpbmhwYXJlbnQsCisJCQkJCQkJCSAgIFJlbE9wdEluZm8gKnJlbCk7Citz dGF0aWMgdm9pZCBwZ3BhX2pvaW5yZWxfc2V0dXAoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJ ICAgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkgICBSZWxPcHRJbmZvICpvdXRlcnJlbCwK KwkJCQkJCQkgICBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkJCQkgICBTcGVjaWFsSm9pbklu Zm8gKnNqaW5mbywKKwkJCQkJCQkgICBMaXN0ICpyZXN0cmljdGxpc3QpOworc3RhdGljIHZvaWQg cGdwYV9qb2luX3BhdGhfc2V0dXAoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCSBSZWxPcHRJ bmZvICpqb2lucmVsLAorCQkJCQkJCQkgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsCisJCQkJCQkJCSBS ZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkJCQkJIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJ CQkgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKTsKK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9z ZXR1cChQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJCQkJICAgY29uc3Qg Y2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJCSAgIGRvdWJsZSAqdHVwbGVfZnJhY3Rpb24sCisJ CQkJCQkJICAgRXhwbGFpblN0YXRlICplcyk7CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJfc2h1 dGRvd24oUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJCQkJCQkgIGNvbnN0 IGNoYXIgKnF1ZXJ5X3N0cmluZywgUGxhbm5lZFN0bXQgKnBzdG10KTsKK3N0YXRpYyB2b2lkIHBn cGFfcGxhbm5lcl9hcHBseV9qb2lucmVsX2FkdmljZSh1aW50NjQgKnBnc19tYXNrX3AsCisJCQkJ CQkJCQkJCSAgY2hhciAqcGxhbl9uYW1lLAorCQkJCQkJCQkJCQkgIHBncGFfam9pbl9zdGF0ZSAq cGpzKTsKK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9hcHBseV9qb2luX3BhdGhfYWR2aWNlKEpv aW5UeXBlIGpvaW50eXBlLAorCQkJCQkJCQkJCQkJdWludDY0ICpwZ3NfbWFza19wLAorCQkJCQkJ CQkJCQkJY2hhciAqcGxhbl9uYW1lLAorCQkJCQkJCQkJCQkJcGdwYV9qb2luX3N0YXRlICpwanMp Oworc3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKFJlbE9wdEluZm8g KnJlbCwKKwkJCQkJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJpZXMsCisJCQkJ CQkJCQkJICAgQml0bWFwc2V0ICpzY2FuX2luZGV4ZXMsCisJCQkJCQkJCQkJICAgcGdwYV90cm92 ZV9lbnRyeSAqcmVsX2VudHJpZXMsCisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxfaW5kZXhl cyk7CitzdGF0aWMgdWludDY0IHBncGFfam9pbl9zdHJhdGVneV9tYXNrX2Zyb21fYWR2aWNlX3Rh ZyhwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcpOworc3RhdGljIGJvb2wgcGdwYV9qb2luX29yZGVy X3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkJ CQkgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCSBwZ3BhX3Ryb3ZlX2VudHJ5ICpl bnRyeSk7CitzdGF0aWMgYm9vbCBwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbihpbnQgb3V0 ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAq cmlkcywKKwkJCQkJCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCQkJCSAg Ym9vbCAqcmVzdHJpY3RfbWV0aG9kKTsKK3N0YXRpYyBib29sIHBncGFfb3BhcXVlX2pvaW5fcGVy bWl0c19qb2luKGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCQkJCSAg cGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50 cnksCisJCQkJCQkJCQkJICBib29sICpyZXN0cmljdF9tZXRob2QpOworc3RhdGljIGJvb2wgcGdw YV9zZW1pam9pbl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQs CisJCQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkgICBwZ3BhX3Ry b3ZlX2VudHJ5ICplbnRyeSwKKwkJCQkJCQkJCSAgIGJvb2wgb3V0ZXJfc2lkZV9udWxsYWJsZSwK KwkJCQkJCQkJCSAgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCk7CisKK3N0YXRpYyBMaXN0ICpwZ3Bh X3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNrKExpc3QgKmxpc3QsIHBncGFfdHJvdmUgKnRyb3ZlLAor CQkJCQkJCQkJCSAgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkJCQkJCSAgcGdw YV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkgIHBncGFfcGxhbl93YWxr ZXJfY29udGV4dCAqd2Fsa2VyKTsKKworc3RhdGljIGlubGluZSB2b2lkIHBncGFfcmlfY2hlY2tl cl9zYXZlKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLAorCQkJCQkJCQkJCVBsYW5uZXJJbmZvICpy b290LAorCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbCk7CitzdGF0aWMgdm9pZCBwZ3BhX3JpX2No ZWNrZXJfdmFsaWRhdGUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsCisJCQkJCQkJCQkgUGxhbm5l ZFN0bXQgKnBzdG10KTsKKworc3RhdGljIGNoYXIgKnBncGFfYm1zX3RvX2NzdHJpbmcoQml0bWFw c2V0ICpibXMpOworc3RhdGljIGNvbnN0IGNoYXIgKnBncGFfam9pbnR5cGVfdG9fY3N0cmluZyhK b2luVHlwZSBqb2ludHlwZSk7CisKKy8qCisgKiBJbnN0YWxsIHBsYW5uZXItcmVsYXRlZCBob29r cy4KKyAqLwordm9pZAorcGdwYV9wbGFubmVyX2luc3RhbGxfaG9va3Modm9pZCkKK3sKKwlwbGFu bmVyX2V4dGVuc2lvbl9pZCA9IEdldFBsYW5uZXJFeHRlbnNpb25JZCgicGdfcGxhbl9hZHZpY2Ui KTsKKwlwcmV2X2dldF9yZWxhdGlvbl9pbmZvID0gZ2V0X3JlbGF0aW9uX2luZm9faG9vazsKKwln ZXRfcmVsYXRpb25faW5mb19ob29rID0gcGdwYV9nZXRfcmVsYXRpb25faW5mbzsKKwlwcmV2X2pv aW5yZWxfc2V0dXAgPSBqb2lucmVsX3NldHVwX2hvb2s7CisJam9pbnJlbF9zZXR1cF9ob29rID0g cGdwYV9qb2lucmVsX3NldHVwOworCXByZXZfam9pbl9wYXRoX3NldHVwID0gam9pbl9wYXRoX3Nl dHVwX2hvb2s7CisJam9pbl9wYXRoX3NldHVwX2hvb2sgPSBwZ3BhX2pvaW5fcGF0aF9zZXR1cDsK KwlwcmV2X3BsYW5uZXJfc2V0dXAgPSBwbGFubmVyX3NldHVwX2hvb2s7CisJcGxhbm5lcl9zZXR1 cF9ob29rID0gcGdwYV9wbGFubmVyX3NldHVwOworCXByZXZfcGxhbm5lcl9zaHV0ZG93biA9IHBs YW5uZXJfc2h1dGRvd25faG9vazsKKwlwbGFubmVyX3NodXRkb3duX2hvb2sgPSBwZ3BhX3BsYW5u ZXJfc2h1dGRvd247Cit9CisKKy8qCisgKiBIb29rIGZ1bmN0aW9uIGZvciBnZXRfcmVsYXRpb25f aW5mbygpLgorICoKKyAqIFdlIGNhbiBhcHBseSBzY2FuIGFkdmljZSBhdCB0aGlzIG9waW50LCBh bmQgd2UgYWxzbyB1c2VlIHRoaXMgYXMgYW4KKyAqIG9wcG9ydHVuaXR5IHRvIGRvIHJhbmdlLXRh YmxlIGlkZW50aWZpZXIgY3Jvc3MtY2hlY2tpbmcgaW4gYXNzZXJ0LWVuYWJsZWQKKyAqIGJ1aWxk cy4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8g KnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLAorCQkJCQkgICBib29sIGluaHBhcmVudCwgUmVs T3B0SW5mbyAqcmVsKQoreworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCisJLyogRmV0Y2gg b3VyIHByaXZhdGUgc3RhdGUsIHNldCB1cCBieSBwZ3BhX3BsYW5uZXJfc2V0dXAoKS4gKi8KKwlw cHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0ZW5zaW9uU3RhdGUocm9vdC0+Z2xvYiwgcGxhbm5lcl9l eHRlbnNpb25faWQpOworCisJLyogU2F2ZSBkZXRhaWxzIG5lZWRlZCBmb3IgcmFuZ2UgdGFibGUg aWRlbnRpZmllciBjcm9zcy1jaGVja2luZy4gKi8KKwlpZiAocHBzICE9IE5VTEwpCisJCXBncGFf cmlfY2hlY2tlcl9zYXZlKHBwcywgcm9vdCwgcmVsKTsKKworCS8qIElmIHF1ZXJ5IGFkdmljZSB3 YXMgcHJvdmlkZWQsIHNlYXJjaCBmb3IgcmVsZXZhbnQgZW50cmllcy4gKi8KKwlpZiAocHBzICE9 IE5VTEwgJiYgcHBzLT50cm92ZSAhPSBOVUxMKQorCXsKKwkJcGdwYV9pZGVudGlmaWVyIHJpZDsK KwkJcGdwYV90cm92ZV9yZXN1bHQgdHJlc3VsdF9zY2FuOworCQlwZ3BhX3Ryb3ZlX3Jlc3VsdCB0 cmVzdWx0X3JlbDsKKworCQkvKiBTZWFyY2ggZm9yIHNjYW4gYWR2aWNlIGFuZCBnZW5lcmFsIHJl bCBhZHZpY2UuICovCisJCXBncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShyb290LCByZWwt PnJlbGlkLCAmcmlkKTsKKwkJcGdwYV90cm92ZV9sb29rdXAocHBzLT50cm92ZSwgUEdQQV9UUk9W RV9MT09LVVBfU0NBTiwgMSwgJnJpZCwKKwkJCQkJCSAgJnRyZXN1bHRfc2Nhbik7CisJCXBncGFf dHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX1JFTCwgMSwgJnJpZCwK KwkJCQkJCSAgJnRyZXN1bHRfcmVsKTsKKworCQkvKiBJZiByZWxldmFudCBlbnRyaWVzIHdlcmUg Zm91bmQsIGFwcGx5IHRoZW0uICovCisJCWlmICh0cmVzdWx0X3NjYW4uaW5kZXhlcyAhPSBOVUxM IHx8IHRyZXN1bHRfcmVsLmluZGV4ZXMgIT0gTlVMTCkKKwkJeworCQkJdWludDY0CQlvcmlnaW5h bF9tYXNrID0gcmVsLT5wZ3NfbWFzazsKKworCQkJcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2 aWNlKHJlbCwKKwkJCQkJCQkJCQkgICB0cmVzdWx0X3NjYW4uZW50cmllcywKKwkJCQkJCQkJCQkg ICB0cmVzdWx0X3NjYW4uaW5kZXhlcywKKwkJCQkJCQkJCQkgICB0cmVzdWx0X3JlbC5lbnRyaWVz LAorCQkJCQkJCQkJCSAgIHRyZXN1bHRfcmVsLmluZGV4ZXMpOworCisJCQkvKiBFbWl0IGRlYnVn Z2luZyBtZXNzYWdlLCBpZiBlbmFibGVkLiAqLworCQkJaWYgKHBnX3BsYW5fYWR2aWNlX3RyYWNl X21hc2sgJiYgb3JpZ2luYWxfbWFzayAhPSByZWwtPnBnc19tYXNrKQorCQkJCWVyZXBvcnQoV0FS TklORywKKwkJCQkJCShlcnJtc2coInN0cmF0ZWd5IG1hc2sgZm9yIFJUSSAldSBjaGFuZ2VkIGZy b20gMHglIiBQUkl4NjQgIiB0byAweCUiIFBSSXg2NCwKKwkJCQkJCQkJcmVsLT5yZWxpZCwgb3Jp Z2luYWxfbWFzaywgcmVsLT5wZ3NfbWFzaykpKTsKKwkJfQorCX0KKworCS8qIFBhc3MgY2FsbCB0 byBwcmV2aW91cyBob29rLiAqLworCWlmIChwcmV2X2dldF9yZWxhdGlvbl9pbmZvKQorCQkoKnBy ZXZfZ2V0X3JlbGF0aW9uX2luZm8pIChyb290LCByZWxhdGlvbk9iamVjdElkLCBpbmhwYXJlbnQs IHJlbCk7Cit9CisKKy8qCisgKiBTZWFyY2ggZm9yIGFkdmljZSBwZXJ0YWluaW5nIHRvIGEgcHJv cG9zZWQgam9pbi4KKyAqLworc3RhdGljIHBncGFfam9pbl9zdGF0ZSAqCitwZ3BhX2dldF9qb2lu X3N0YXRlKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQlSZWxP cHRJbmZvICpvdXRlcnJlbCwgUmVsT3B0SW5mbyAqaW5uZXJyZWwpCit7CisJcGdwYV9wbGFubmVy X3N0YXRlICpwcHM7CisJcGdwYV9qb2luX3N0YXRlICpwanM7CisJYm9vbAkJbmV3X3BqcyA9IGZh bHNlOworCisJLyogRmV0Y2ggb3VyIHByaXZhdGUgc3RhdGUsIHNldCB1cCBieSBwZ3BhX3BsYW5u ZXJfc2V0dXAoKS4gKi8KKwlwcHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0ZW5zaW9uU3RhdGUocm9v dC0+Z2xvYiwgcGxhbm5lcl9leHRlbnNpb25faWQpOworCWlmIChwcHMgPT0gTlVMTCB8fCBwcHMt PnRyb3ZlID09IE5VTEwpCisJeworCQkvKiBObyBhZHZpY2UgYXBwbGllcyB0byB0aGlzIHF1ZXJ5 LCBoZW5jZSBub25lIHRvIHRoaXMgam9pbnJlbC4gKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ LyoKKwkgKiBTZWUgd2hldGhlciB3ZSd2ZSBwcmV2aW91c2x5IGFzc29jaWF0ZWQgYSBwZ3BhX2pv aW5fc3RhdGUgd2l0aCB0aGlzCisJICogam9pbnJlbC4gSWYgd2UgaGF2ZSBub3QsIHdlIG5lZWQg dG8gdHJ5IHRvIGNvbnN0cnVjdCBvbmUuIElmIHdlIGhhdmUsCisJICogdGhlbiB0aGVyZSBhcmUg dHdvIGNhc2VzOiAoYSkgaWYgaW5uZXJyZWwgYW5kIG91dGVycmVsIGFyZSB1bmNoYW5nZWQsCisJ ICogd2UgY2FuIHNpbXBseSB1c2UgaXQsIGFuZCAoYikgaWYgdGhleSBoYXZlIGNoYW5nZWQsIHdl IG5lZWQgdG8gcmVqaWdnZXIKKwkgKiB0aGUgYXJyYXkgb2YgaWRlbnRpZmllcnMgYnV0IGNhbiBz dGlsbCBza2lwIHRoZSB0cm92ZSBsb29rdXAuCisJICovCisJcGpzID0gR2V0UmVsT3B0SW5mb0V4 dGVuc2lvblN0YXRlKGpvaW5yZWwsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwlpZiAocGpzICE9 IE5VTEwpCisJeworCQlpZiAocGpzLT5qb2luX2luZGV4ZXMgPT0gTlVMTCAmJiBwanMtPnJlbF9p bmRleGVzID09IE5VTEwpCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSdzIG5vIHBvdGVudGlh bGx5IHJlbGV2YW50IGFkdmljZSwgdGhlbiB0aGUgcHJlc2VuY2Ugb2YKKwkJCSAqIHRoaXMgcGdw YV9qb2luX3N0YXRlIGFjdHMgbGlrZSBhIG5lZ2F0aXZlIGNhY2hlIGVudHJ5OiBpdCB0ZWxscwor CQkJICogdXMgbm90IHRvIGJvdGhlciBzZWFyY2hpbmcgdGhlIHRyb3ZlIGZvciBhZHZpY2UsIGJl Y2F1c2Ugd2UKKwkJCSAqIHdpbGwgbm90IGZpbmQgYW55LgorCQkJICovCisJCQlyZXR1cm4gTlVM TDsKKwkJfQorCisJCWlmIChwanMtPm91dGVycmVsID09IG91dGVycmVsICYmIHBqcy0+aW5uZXJy ZWwgPT0gaW5uZXJyZWwpCisJCXsKKwkJCS8qIE5vIHVwZGF0ZXMgcmVxdWlyZWQsIHNvIGp1c3Qg cmV0dXJuLiAqLworCQkJLyogWFhYLiBEb2VzIHRoaXMgbmVlZCB0byBkbyBzb21ldGhpbmcgZGlm ZmVyZW50IHVuZGVyIEdFUU8/ICovCisJCQlyZXR1cm4gcGpzOworCQl9CisJfQorCisJLyoKKwkg KiBJZiB0aGVyZSdzIG5vIHBncGFfam9pbl9zdGF0ZSB5ZXQsIHdlIG5lZWQgdG8gYWxsb2NhdGUg b25lLiBUcm92ZSBrZXlzCisJICogd2lsbCBub3QgZ2V0IGJ1aWx0IGZvciBSVEVfSk9JTiBSVEVz LCBzbyB0aGUgYXJyYXkgbWF5IGVuZCB1cCBiZWluZworCSAqIGxhcmdlciB0aGFuIG5lZWRlZC4g SXQncyBub3Qgd29ydGggdHJ5aW5nIHRvIGNvbXB1dGUgYSBwZXJmZWN0bHkKKwkgKiBhY2N1cmF0 ZSBjb3VudCBoZXJlLgorCSAqLworCWlmIChwanMgPT0gTlVMTCkKKwl7CisJCWludAkJCXBlc3Np bWlzdGljX2NvdW50ID0gYm1zX251bV9tZW1iZXJzKGpvaW5yZWwtPnJlbGlkcyk7CisKKwkJcGpz ID0gcGFsbG9jMF9vYmplY3QocGdwYV9qb2luX3N0YXRlKTsKKwkJcGpzLT5yaWRzID0gcGFsbG9j X2FycmF5KHBncGFfaWRlbnRpZmllciwgcGVzc2ltaXN0aWNfY291bnQpOworCQluZXdfcGpzID0g dHJ1ZTsKKwl9CisKKwkvKgorCSAqIEVpdGhlciB3ZSBqdXN0IGFsbG9jYXRlZCBhIG5ldyBwZ3Bh X2pvaW5fc3RhdGUsIG9yIHRoZSBleGlzdGluZyBvbmUKKwkgKiBuZWVkcyByZWNvbmZpZ3VyaW5n IGZvciBhIG5ldyBpbm5lcnJlbCBhbmQgb3V0ZXJyZWwuIFRoZSByZXF1aXJlZCBhcnJheQorCSAq IHNpemUgY2FuJ3QgY2hhbmdlLCBzbyB3ZSBjYW4gb3ZlcndyaXRlIHRoZSBleGlzdGluZyBvbmUu CisJICovCisJcGpzLT5vdXRlcnJlbCA9IG91dGVycmVsOworCXBqcy0+aW5uZXJyZWwgPSBpbm5l cnJlbDsKKwlwanMtPm91dGVyX2NvdW50ID0KKwkJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJzX2J5 X3JlbGlkcyhyb290LCBvdXRlcnJlbC0+cmVsaWRzLCBwanMtPnJpZHMpOworCXBqcy0+aW5uZXJf Y291bnQgPQorCQlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKHJvb3QsIGlubmVy cmVsLT5yZWxpZHMsCisJCQkJCQkJCQkJICAgcGpzLT5yaWRzICsgcGpzLT5vdXRlcl9jb3VudCk7 CisKKwkvKgorCSAqIElmIHdlIGFsbG9jYXRlZCBhIG5ldyBwZ3BhX2pvaW5fc3RhdGUsIHNlYXJj aCBvdXIgdHJvdmUgb2YgYWR2aWNlIGZvcgorCSAqIHJlbGV2YW50IGVudHJpZXMuIFRoZSB0cm92 ZSBsb29rdXAgd2lsbCByZXR1cm4gdGhlIHNhbWUgcmVzdWx0cyBmb3IKKwkgKiBldmVyeSBvdXRl cnJlbC9pbm5lcnJlbCBjb21iaW5hdGlvbiwgc28gd2UgZG9uJ3QgbmVlZCB0byByZXBlYXQgdGhh dAorCSAqIHdvcmsgZXZlcnkgdGltZS4KKwkgKi8KKwlpZiAobmV3X3BqcykKKwl7CisJCXBncGFf dHJvdmVfcmVzdWx0IHRyZXN1bHQ7CisKKwkJLyogRmluZCBqb2luIGVudHJpZXMuICovCisJCXBn cGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4sCisJCQkJ CQkgIHBqcy0+b3V0ZXJfY291bnQgKyBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJICBwanMtPnJp ZHMsICZ0cmVzdWx0KTsKKwkJcGpzLT5qb2luX2VudHJpZXMgPSB0cmVzdWx0LmVudHJpZXM7CisJ CXBqcy0+am9pbl9pbmRleGVzID0gdHJlc3VsdC5pbmRleGVzOworCisJCS8qIEZpbmQgcmVsIGVu dHJpZXMuICovCisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9P S1VQX1JFTCwKKwkJCQkJCSAgcGpzLT5vdXRlcl9jb3VudCArIHBqcy0+aW5uZXJfY291bnQsCisJ CQkJCQkgIHBqcy0+cmlkcywgJnRyZXN1bHQpOworCQlwanMtPnJlbF9lbnRyaWVzID0gdHJlc3Vs dC5lbnRyaWVzOworCQlwanMtPnJlbF9pbmRleGVzID0gdHJlc3VsdC5pbmRleGVzOworCisJCS8q IE5vdyB0aGF0IHRoZSBuZXcgcGdwYV9qb2luX3N0YXRlIGlzIGZ1bGx5IHZhbGlkLCBzYXZlIGEg cG9pbnRlci4gKi8KKwkJU2V0UmVsT3B0SW5mb0V4dGVuc2lvblN0YXRlKGpvaW5yZWwsIHBsYW5u ZXJfZXh0ZW5zaW9uX2lkLCBwanMpOworCisJCS8qCisJCSAqIElmIHRoZXJlIHdhcyBubyByZWxl dmFudCBhZHZpY2UgZm91bmQsIGp1c3QgcmV0dXJuIE5VTEwuIFRoaXMKKwkJICogcGdwYV9qb2lu X3N0YXRlIHdpbGwgc3RpY2sgYXJvdW5kIGFzIGEgc29ydCBvZiBuZWdhdGl2ZSBjYWNoZQorCQkg KiBlbnRyeSwgc28gdGhhdCBmdXR1cmUgY2FsbHMgZm9yIHRoaXMgc2FtZSBqb2lucmVsIHF1aWNr bHkgcmV0dXJuCisJCSAqIE5VTEwuCisJCSAqLworCQlpZiAocGpzLT5qb2luX2luZGV4ZXMgPT0g TlVMTCAmJiBwanMtPnJlbF9pbmRleGVzID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisK KwlyZXR1cm4gcGpzOworfQorCisvKgorICogRW5mb3JjZSBhbnkgcHJvdmlkZWQgYWR2aWNlIHRo YXQgaXMgcmVsZXZhbnQgdG8gYW55IG1ldGhvZCBvZiBpbXBsZW1lbnRpbmcKKyAqIHRoaXMgam9p bi4KKyAqCisgKiBBbHRob3VnaCB3ZSdyZSBwYXNzZWQgdGhlIG91dGVycmVsIGFuZCBpbm5lcnJl bCBoZXJlLCB0aG9zZSBhcmUganVzdAorICogd2hhdGV2ZXIgdmFsdWVzIGhhcHBlbmVkIHRvIHBy b21wdCB0aGUgY3JlYXRpb24gb2YgdGhpcyBqb2lucmVsOyB0aGV5CisgKiBzaG91bGRuJ3QgcmVh bGx5IGluZmx1ZW5jZSBvdXIgY2hvaWNlIG9mIHdoYXQgYWR2aWNlIHRvIGFwcGx5LgorICovCitz dGF0aWMgdm9pZAorcGdwYV9qb2lucmVsX3NldHVwKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpqb2lucmVsLAorCQkJCSAgIFJlbE9wdEluZm8gKm91dGVycmVsLCBSZWxPcHRJbmZvICpp bm5lcnJlbCwKKwkJCQkgICBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywgTGlzdCAqcmVzdHJpY3Rs aXN0KQoreworCXBncGFfam9pbl9zdGF0ZSAqcGpzOworCisJQXNzZXJ0KGJtc19tZW1iZXJzaGlw KGpvaW5yZWwtPnJlbGlkcykgPT0gQk1TX01VTFRJUExFKTsKKworCS8qIEdldCBvdXIgcHJpdmF0 ZSBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBqb2luLiAqLworCXBqcyA9IHBncGFfZ2V0X2pv aW5fc3RhdGUocm9vdCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVsKTsKKworCS8qIElmIHRo ZXJlIGlzIHJlbGV2YW50IGFkdmljZSwgY2FsbCBhIGhlbHBlciBmdW5jdGlvbiB0byBhcHBseSBp dC4gKi8KKwlpZiAocGpzICE9IE5VTEwpCisJeworCQl1aW50NjQJCW9yaWdpbmFsX21hc2sgPSBq b2lucmVsLT5wZ3NfbWFzazsKKworCQlwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbnJlbF9hZHZpY2Uo JmpvaW5yZWwtPnBnc19tYXNrLAorCQkJCQkJCQkJCSAgcm9vdC0+cGxhbl9uYW1lLAorCQkJCQkJ CQkJCSAgcGpzKTsKKworCQkvKiBFbWl0IGRlYnVnZ2luZyBtZXNzYWdlLCBpZiBlbmFibGVkLiAq LworCQlpZiAocGdfcGxhbl9hZHZpY2VfdHJhY2VfbWFzayAmJiBvcmlnaW5hbF9tYXNrICE9IGpv aW5yZWwtPnBnc19tYXNrKQorCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkoZXJybXNnKCJzdHJh dGVneSBtYXNrIGZvciBqb2luIG9uIFJUSXMgJXMgY2hhbmdlZCBmcm9tIDB4JSIgUFJJeDY0ICIg dG8gMHglIiBQUkl4NjQsCisJCQkJCQkJcGdwYV9ibXNfdG9fY3N0cmluZyhqb2lucmVsLT5yZWxp ZHMpLAorCQkJCQkJCW9yaWdpbmFsX21hc2ssCisJCQkJCQkJam9pbnJlbC0+cGdzX21hc2spKSk7 CisJfQorCisJLyogUGFzcyBjYWxsIHRvIHByZXZpb3VzIGhvb2suICovCisJaWYgKHByZXZfam9p bnJlbF9zZXR1cCkKKwkJKCpwcmV2X2pvaW5yZWxfc2V0dXApIChyb290LCBqb2lucmVsLCBvdXRl cnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJICAgc2ppbmZvLCByZXN0cmljdGxpc3QpOworfQorCisv KgorICogRW5mb3JjZSBhbnkgcHJvdmlkZWQgYWR2aWNlIHRoYXQgaXMgcmVsZXZhbnQgdG8gdGhp cyBwYXJ0aWN1bGFyIG1ldGhvZCBvZgorICogaW1wbGVtZW50aW5nIHRoaXMgcGFydGljdWxhciBq b2luLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9qb2luX3BhdGhfc2V0dXAoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCSBSZWxPcHRJbmZvICpvdXRlcnJlbCwg UmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCSBKb2luVHlwZSBqb2ludHlwZSwgSm9pblBhdGhF eHRyYURhdGEgKmV4dHJhKQoreworCXBncGFfam9pbl9zdGF0ZSAqcGpzOworCisJQXNzZXJ0KGJt c19tZW1iZXJzaGlwKGpvaW5yZWwtPnJlbGlkcykgPT0gQk1TX01VTFRJUExFKTsKKworCS8qCisJ ICogSWYgd2UncmUgY29uc2lkZXJpbmcgaW1wbGVtZW50aW5nIGEgc2VtaWpvaW4gYnkgbWFraW5n IG9uZSBzaWRlIHVuaXF1ZSwKKwkgKiBtYWtlIGEgbm90ZSBvZiBpdCBpbiB0aGUgcGdwYV9wbGFu bmVyX3N0YXRlLiBTZWUgY29tbWVudHMgZm9yCisJICogcGdwYV9zal91bmlxdWVfcmVsIGZvciB3 aHkgd2UgZG8gdGhpcy4KKwkgKi8KKwlpZiAoam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfT1VURVIg fHwgam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfSU5ORVIpCisJeworCQlwZ3BhX3BsYW5uZXJfc3Rh dGUgKnBwczsKKwkJUmVsT3B0SW5mbyAqdW5pcXVlcmVsOworCisJCXVuaXF1ZXJlbCA9IGpvaW50 eXBlID09IEpPSU5fVU5JUVVFX09VVEVSID8gb3V0ZXJyZWwgOiBpbm5lcnJlbDsKKwkJcHBzID0g R2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKHJvb3QtPmdsb2IsIHBsYW5uZXJfZXh0ZW5z aW9uX2lkKTsKKwkJaWYgKHBwcyAhPSBOVUxMICYmCisJCQkocHBzLT5nZW5lcmF0ZV9hZHZpY2Vf c3RyaW5nIHx8IHBwcy0+Z2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrKSkKKwkJeworCQkJYm9vbAkJ Zm91bmQgPSBmYWxzZTsKKworCQkJLyogQXZvaWQgYWRkaW5nIGR1cGxpY2F0ZXMuICovCisJCQlm b3JlYWNoX3B0cihwZ3BhX3NqX3VuaXF1ZV9yZWwsIHVyLCBwcHMtPnNqX3VuaXF1ZV9yZWxzKQor CQkJeworCQkJCS8qCisJCQkJICogV2Ugc2hvdWxkIGFsd2F5cyB1c2UgdGhlIHNhbWUgcG9pbnRl ciBmb3IgdGhlIHNhbWUgcGxhbgorCQkJCSAqIG5hbWUsIHNvIHdlIG5lZWQgbm90IHVzZSBzdHJj bXAoKSBoZXJlLgorCQkJCSAqLworCQkJCWlmIChyb290LT5wbGFuX25hbWUgPT0gdXItPnBsYW5f bmFtZSAmJgorCQkJCQlibXNfZXF1YWwodW5pcXVlcmVsLT5yZWxpZHMsIHVyLT5yZWxpZHMpKQor CQkJCXsKKwkJCQkJZm91bmQgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJ CS8qIElmIG5vdCBhIGR1cGxpY2F0ZSwgYXBwZW5kIHRvIHRoZSBsaXN0LiAqLworCQkJaWYgKCFm b3VuZCkKKwkJCXsKKwkJCQlwZ3BhX3NqX3VuaXF1ZV9yZWwgKnVyID0gcGFsbG9jX29iamVjdChw Z3BhX3NqX3VuaXF1ZV9yZWwpOworCisJCQkJdXItPnBsYW5fbmFtZSA9IHJvb3QtPnBsYW5fbmFt ZTsKKwkJCQl1ci0+cmVsaWRzID0gdW5pcXVlcmVsLT5yZWxpZHM7CisJCQkJcHBzLT5zal91bmlx dWVfcmVscyA9IGxhcHBlbmQocHBzLT5zal91bmlxdWVfcmVscywgdXIpOworCQkJfQorCQl9CisJ fQorCisJLyogR2V0IG91ciBwcml2YXRlIHN0YXRlIGluZm9ybWF0aW9uIGZvciB0aGlzIGpvaW4u ICovCisJcGpzID0gcGdwYV9nZXRfam9pbl9zdGF0ZShyb290LCBqb2lucmVsLCBvdXRlcnJlbCwg aW5uZXJyZWwpOworCisJLyogSWYgdGhlcmUgaXMgcmVsZXZhbnQgYWR2aWNlLCBjYWxsIGEgaGVs cGVyIGZ1bmN0aW9uIHRvIGFwcGx5IGl0LiAqLworCWlmIChwanMgIT0gTlVMTCkKKwl7CisJCXVp bnQ2NAkJb3JpZ2luYWxfbWFzayA9IGV4dHJhLT5wZ3NfbWFzazsKKworCQlwZ3BhX3BsYW5uZXJf YXBwbHlfam9pbl9wYXRoX2FkdmljZShqb2ludHlwZSwKKwkJCQkJCQkJCQkJJmV4dHJhLT5wZ3Nf bWFzaywKKwkJCQkJCQkJCQkJcm9vdC0+cGxhbl9uYW1lLAorCQkJCQkJCQkJCQlwanMpOworCisJ CS8qIEVtaXQgZGVidWdnaW5nIG1lc3NhZ2UsIGlmIGVuYWJsZWQuICovCisJCWlmIChwZ19wbGFu X2FkdmljZV90cmFjZV9tYXNrICYmIG9yaWdpbmFsX21hc2sgIT0gZXh0cmEtPnBnc19tYXNrKQor CQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkoZXJybXNnKCJzdHJhdGVneSBtYXNrIGZvciAlcyBq b2luIG9uICVzIHdpdGggb3V0ZXIgJXMgYW5kIGlubmVyICVzIGNoYW5nZWQgZnJvbSAweCUiIFBS SXg2NCAiIHRvIDB4JSIgUFJJeDY0LAorCQkJCQkJCXBncGFfam9pbnR5cGVfdG9fY3N0cmluZyhq b2ludHlwZSksCisJCQkJCQkJcGdwYV9ibXNfdG9fY3N0cmluZyhqb2lucmVsLT5yZWxpZHMpLAor CQkJCQkJCXBncGFfYm1zX3RvX2NzdHJpbmcob3V0ZXJyZWwtPnJlbGlkcyksCisJCQkJCQkJcGdw YV9ibXNfdG9fY3N0cmluZyhpbm5lcnJlbC0+cmVsaWRzKSwKKwkJCQkJCQlvcmlnaW5hbF9tYXNr LAorCQkJCQkJCWV4dHJhLT5wZ3NfbWFzaykpKTsKKwl9CisKKwkvKiBQYXNzIGNhbGwgdG8gcHJl dmlvdXMgaG9vay4gKi8KKwlpZiAocHJldl9qb2luX3BhdGhfc2V0dXApCisJCSgqcHJldl9qb2lu X3BhdGhfc2V0dXApIChyb290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJ CSBqb2ludHlwZSwgZXh0cmEpOworfQorCisvKgorICogQ2Fycnkgb3V0IHdoYXRldmVyIHNldHVw IHdvcmsgd2UgbmVlZCB0byBkbyBiZWZvcmUgcGxhbm5pbmcuCisgKi8KK3N0YXRpYyB2b2lkCitw Z3BhX3BsYW5uZXJfc2V0dXAoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLCBjb25z dCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJICAgZG91YmxlICp0dXBsZV9mcmFjdGlvbiwgRXhw bGFpblN0YXRlICplcykKK3sKKwlwZ3BhX3Ryb3ZlICp0cm92ZSA9IE5VTEw7CisJcGdwYV9wbGFu bmVyX3N0YXRlICpwcHM7CisJYm9vbAkJZ2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrID0gZmFsc2U7 CisJYm9vbAkJZ2VuZXJhdGVfYWR2aWNlX3N0cmluZyA9IGZhbHNlOworCWJvb2wJCW5lZWRzX3Bw cyA9IGZhbHNlOworCisJLyoKKwkgKiBEZWNpZGUgd2hldGhlciB3ZSBuZWVkIHRvIGdlbmVyYXRl IGFuIGFkdmljZSBzdHJpbmcuIFdlIG11c3QgZG8gdGhpcyBpZgorCSAqIHRoZSB1c2VyIGhhcyB0 b2xkIHVzIHRvIGRvIGl0IGNhdGVnb3JpY2FsbHksIG9yIGlmIGF0IGxlYXN0IG9uZQorCSAqIGNv bGxlY3RvciBpcyBlbmFibGVkLCBvciBpZiB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIGl0IHVzaW5n IHRoZQorCSAqIEVYUExBSU4gKFBMQU5fQURWSUNFKSBvcHRpb24uCisJICovCisJZ2VuZXJhdGVf YWR2aWNlX3N0cmluZyA9IChwZ19wbGFuX2FkdmljZV9hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFp bHMgfHwKKwkJCQkJCQkgIHBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3RvciB8fAorCQkJCQkJ CSAgcGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3RvciB8fAorCQkJCQkJCSAgcGdfcGxhbl9h ZHZpY2Vfc2hvdWxkX2V4cGxhaW4oZXMpKTsKKwlpZiAoZ2VuZXJhdGVfYWR2aWNlX3N0cmluZykK KwkJbmVlZHNfcHBzID0gdHJ1ZTsKKworCS8qCisJICogSWYgYW55IGFkdmljZSB3YXMgcHJvdmlk ZWQsIGJ1aWxkIGEgdHJvdmUgb2YgYWR2aWNlIGZvciB1c2UgZHVyaW5nCisJICogcGxhbm5pbmcu CisJICovCisJaWYgKHBnX3BsYW5fYWR2aWNlX2FkdmljZSAhPSBOVUxMICYmIHBnX3BsYW5fYWR2 aWNlX2FkdmljZVswXSAhPSAnXDAnKQorCXsKKwkJTGlzdAkgICAqYWR2aWNlX2l0ZW1zOworCQlj aGFyCSAgICplcnJvcjsKKworCQkvKgorCQkgKiBQYXJzaW5nIHNob3VsZG4ndCBmYWlsIGhlcmUs IGJlY2F1c2Ugd2UgbXVzdCBoYXZlIHByZXZpb3VzbHkgcGFyc2VkCisJCSAqIHN1Y2Nlc3NmdWxs eSBpbiBwZ19wbGFuX2FkdmljZV9hZHZpY2VfY2hlY2tfaG9vaywgYnV0IGlmIGl0IGRvZXMsCisJ CSAqIGVtaXQgYSB3YXJuaW5nLgorCQkgKi8KKwkJYWR2aWNlX2l0ZW1zID0gcGdwYV9wYXJzZShw Z19wbGFuX2FkdmljZV9hZHZpY2UsICZlcnJvcik7CisJCWlmIChlcnJvcikKKwkJCWVsb2coV0FS TklORywgImNvdWxkIG5vdCBwYXJzZSBhZHZpY2U6ICVzIiwgZXJyb3IpOworCisJCS8qCisJCSAq IEl0J3MgcG9zc2libGUgdGhhdCB0aGUgYWR2aWNlIHN0cmluZyB3YXMgbm9uLWVtcHR5IGJ1dCBj b250YWluZWQgbm8KKwkJICogYWN0dWFsIGFkdmljZSwgZS5nLiBpdCB3YXMgYWxsIHdoaXRlc3Bh Y2UuCisJCSAqLworCQlpZiAoYWR2aWNlX2l0ZW1zICE9IE5JTCkKKwkJeworCQkJdHJvdmUgPSBw Z3BhX2J1aWxkX3Ryb3ZlKGFkdmljZV9pdGVtcyk7CisJCQluZWVkc19wcHMgPSB0cnVlOworCisJ CQkvKgorCQkJICogSWYgd2Uga25vdyB0aGF0IHdlJ3JlIHJ1bm5pbmcgdW5kZXIgRVhQTEFJTiwg b3IgaWYgdGhlIHVzZXIKKwkJCSAqIGhhcyB0b2xkIHVzIHRvIGFsd2F5cyBkbyB0aGUgd29yaywg Z2VuZXJhdGUgYWR2aWNlIGZlZWRiYWNrLgorCQkJICovCisJCQlpZiAoZXMgIT0gTlVMTCB8fCBw Z19wbGFuX2FkdmljZV9hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMpCisJCQkJZ2VuZXJhdGVf YWR2aWNlX2ZlZWRiYWNrID0gdHJ1ZTsKKwkJfQorCX0KKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hF Q0tJTkcKKworCS8qCisJICogSWYgYXNzZXJ0cyBhcmUgZW5hYmxlZCwgYWx3YXlzIGJ1aWxkIGEg cHJpdmF0ZSBzdGF0ZSBvYmplY3QgZm9yCisJICogY3Jvc3MtY2hlY2tzLgorCSAqLworCW5lZWRz X3BwcyA9IHRydWU7CisjZW5kaWYKKworCS8qCisJICogV2Ugb25seSBjcmVhdGUgYW5kIGluaXRp YWxpemUgYSBwcml2YXRlIHN0YXRlIG9iamVjdCBpZiBpdCdzIG5lZWRlZCBmb3IKKwkgKiBzb21l IHB1cnBvc2UuIFRoYXQgY291bGQgYmUgKDEpIHJlY29yZGluZyB0aGF0IHdlIHdpbGwgbmVlZCB0 byBnZW5lcmF0ZQorCSAqIGFuIGFkdmljZSBzdHJpbmcsICgyKSBzdG9yaW5nIGEgdHJvdmUgb2Yg c3VwcGxpZWQgYWR2aWNlLCBvciAoMykKKwkgKiBmYWNpbGl0YXRpbmcgZGVidWdnaW5nIGNyb3Nz LWNoZWNrcyB3aGVuIGFzc2VydHMgYXJlIGVuYWJsZWQuCisJICovCisJaWYgKG5lZWRzX3BwcykK Kwl7CisJCXBwcyA9IHBhbGxvYzBfb2JqZWN0KHBncGFfcGxhbm5lcl9zdGF0ZSk7CisJCXBwcy0+ ZXhwbGFpbl9zdGF0ZSA9IGVzOworCQlwcHMtPmdlbmVyYXRlX2FkdmljZV9mZWVkYmFjayA9IGdl bmVyYXRlX2FkdmljZV9mZWVkYmFjazsKKwkJcHBzLT5nZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nID0g Z2VuZXJhdGVfYWR2aWNlX3N0cmluZzsKKwkJcHBzLT50cm92ZSA9IHRyb3ZlOworI2lmZGVmIFVT RV9BU1NFUlRfQ0hFQ0tJTkcKKwkJcHBzLT5yaV9jaGVja19oYXNoID0KKwkJCXBncGFfcmlfY2hl Y2tfY3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LCAxMDI0LCBOVUxMKTsKKyNlbmRpZgorCQlT ZXRQbGFubmVyR2xvYmFsRXh0ZW5zaW9uU3RhdGUoZ2xvYiwgcGxhbm5lcl9leHRlbnNpb25faWQs IHBwcyk7CisJfQorfQorCisvKgorICogQ2Fycnkgb3V0IHdoYXRldmVyIHdvcmsgd2Ugd2FudCB0 byBkbyBhZnRlciBwbGFubmluZyBpcyBjb21wbGV0ZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFf cGxhbm5lcl9zaHV0ZG93bihQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJ CSAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBQbGFubmVkU3RtdCAqcHN0bXQpCit7CisJcGdw YV9wbGFubmVyX3N0YXRlICpwcHM7CisJcGdwYV90cm92ZSAqdHJvdmUgPSBOVUxMOworCXBncGFf cGxhbl93YWxrZXJfY29udGV4dCB3YWxrZXIgPSB7MH07CS8qIHBsYWNhdGUgY29tcGlsZXIgKi8K Kwlib29sCQlnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2sgPSBmYWxzZTsKKwlib29sCQlnZW5lcmF0 ZV9hZHZpY2Vfc3RyaW5nID0gZmFsc2U7CisJTGlzdAkgICAqcGdwYV9pdGVtcyA9IE5JTDsKKwlw Z3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzID0gTlVMTDsKKworCS8qIEZldGNoIG91ciBw cml2YXRlIHN0YXRlLCBzZXQgdXAgYnkgcGdwYV9wbGFubmVyX3NldHVwKCkuICovCisJcHBzID0g R2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKGdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lk KTsKKwlpZiAocHBzICE9IE5VTEwpCisJeworCQl0cm92ZSA9IHBwcy0+dHJvdmU7CisJCWdlbmVy YXRlX2FkdmljZV9mZWVkYmFjayA9IHBwcy0+Z2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrOworCQln ZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nID0gcHBzLT5nZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nOworCX0K KworCS8qCisJICogSWYgd2UncmUgdHJ5aW5nIHRvIGdlbmVyYXRlIGFuIGFkdmljZSBzdHJpbmcg b3IgaWYgd2UncmUgdHJ5aW5nIHRvCisJICogcHJvdmlkZSBhZHZpY2UgZmVlZGJhY2ssIHRoZW4g d2Ugd2lsbCBuZWVkIHRvIGNyZWF0ZSByYW5nZSB0YWJsZQorCSAqIGlkZW50aWZpZXJzLgorCSAq LworCWlmIChnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nIHx8IGdlbmVyYXRlX2FkdmljZV9mZWVkYmFj aykKKwl7CisJCXBncGFfcGxhbl93YWxrZXIoJndhbGtlciwgcHN0bXQsIHBwcy0+c2pfdW5pcXVl X3JlbHMpOworCQlydF9pZGVudGlmaWVycyA9IHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9w bGFubmVkX3N0bXQocHN0bXQpOworCX0KKworCS8qIEdlbmVyYXRlIHRoZSBhZHZpY2Ugc3RyaW5n LCBpZiB3ZSBuZWVkIHRvIGRvIHNvLiAqLworCWlmIChnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nKQor CXsKKwkJY2hhcgkgICAqYWR2aWNlX3N0cmluZzsKKwkJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJ CS8qIEdlbmVyYXRlIGEgdGV4dHVhbCBhZHZpY2Ugc3RyaW5nLiAqLworCQlpbml0U3RyaW5nSW5m bygmYnVmKTsKKwkJcGdwYV9vdXRwdXRfYWR2aWNlKCZidWYsICZ3YWxrZXIsIHJ0X2lkZW50aWZp ZXJzKTsKKwkJYWR2aWNlX3N0cmluZyA9IGJ1Zi5kYXRhOworCisJCS8qIElmIHRoZSBhZHZpY2Ug c3RyaW5nIGlzIGVtcHR5LCBkb24ndCBib3RoZXIgY29sbGVjdGluZyBpdC4gKi8KKwkJaWYgKGFk dmljZV9zdHJpbmdbMF0gIT0gJ1wwJykKKwkJCXBncGFfY29sbGVjdF9hZHZpY2UocHN0bXQtPnF1 ZXJ5SWQsIHF1ZXJ5X3N0cmluZywgYWR2aWNlX3N0cmluZyk7CisKKwkJLyogU2F2ZSB0aGUgYWR2 aWNlIHN0cmluZyBpbiB0aGUgZmluYWwgcGxhbi4gKi8KKwkJcGdwYV9pdGVtcyA9IGxhcHBlbmQo cGdwYV9pdGVtcywKKwkJCQkJCQkgbWFrZURlZkVsZW0oImFkdmljZV9zdHJpbmciLAorCQkJCQkJ CQkJCSAoTm9kZSAqKSBtYWtlU3RyaW5nKGFkdmljZV9zdHJpbmcpLAorCQkJCQkJCQkJCSAtMSkp OworCX0KKworCS8qCisJICogSWYgd2UncmUgdHJ5aW5nIHRvIHByb3ZpZGUgYWR2aWNlIGZlZWRi YWNrLCB0aGVuIHdlIHdpbGwgbmVlZCB0bworCSAqIGFuYWx5emUgaG93IHN1Y2Nlc3NmdWwgdGhl IGFkdmljZSB3YXMuCisJICovCisJaWYgKGdlbmVyYXRlX2FkdmljZV9mZWVkYmFjaykKKwl7CisJ CUxpc3QJICAgKmZlZWRiYWNrID0gTklMOworCisJCS8qCisJCSAqIEluamVjdCBhIE5vZGUtdHJl ZSByZXByZXNlbnRhdGlvbiBvZiBhbGwgdGhlIHRyb3ZlLWVudHJ5IGZsYWdzIGludG8KKwkJICog dGhlIFBsYW5uZWRTdG10LgorCQkgKi8KKwkJZmVlZGJhY2sgPSBwZ3BhX3BsYW5uZXJfYXBwZW5k X2ZlZWRiYWNrKGZlZWRiYWNrLAorCQkJCQkJCQkJCQkJdHJvdmUsCisJCQkJCQkJCQkJCQlQR1BB X1RST1ZFX0xPT0tVUF9TQ0FOLAorCQkJCQkJCQkJCQkJcnRfaWRlbnRpZmllcnMsICZ3YWxrZXIp OworCQlmZWVkYmFjayA9IHBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soZmVlZGJhY2ssCisJ CQkJCQkJCQkJCQl0cm92ZSwKKwkJCQkJCQkJCQkJCVBHUEFfVFJPVkVfTE9PS1VQX0pPSU4sCisJ CQkJCQkJCQkJCQlydF9pZGVudGlmaWVycywgJndhbGtlcik7CisJCWZlZWRiYWNrID0gcGdwYV9w bGFubmVyX2FwcGVuZF9mZWVkYmFjayhmZWVkYmFjaywKKwkJCQkJCQkJCQkJCXRyb3ZlLAorCQkJ CQkJCQkJCQkJUEdQQV9UUk9WRV9MT09LVVBfUkVMLAorCQkJCQkJCQkJCQkJcnRfaWRlbnRpZmll cnMsICZ3YWxrZXIpOworCisJCXBncGFfaXRlbXMgPSBsYXBwZW5kKHBncGFfaXRlbXMsIG1ha2VE ZWZFbGVtKCJmZWVkYmFjayIsCisJCQkJCQkJCQkJCQkJIChOb2RlICopIGZlZWRiYWNrLAorCQkJ CQkJCQkJCQkJCSAtMSkpOworCX0KKworCS8qIFB1c2ggd2hhdGV2ZXIgZGF0YSB3ZSdyZSBzYXZp bmcgaW50byB0aGUgUGxhbm5lZFN0bXQuICovCisJaWYgKHBncGFfaXRlbXMgIT0gTklMKQorCQlw c3RtdC0+ZXh0ZW5zaW9uX3N0YXRlID0KKwkJCWxhcHBlbmQocHN0bXQtPmV4dGVuc2lvbl9zdGF0 ZSwKKwkJCQkJbWFrZURlZkVsZW0oInBnX3BsYW5fYWR2aWNlIiwgKE5vZGUgKikgcGdwYV9pdGVt cywgLTEpKTsKKworCS8qCisJICogSWYgYXNzZXJ0aW9ucyBhcmUgZW5hYmxlZCwgY3Jvc3MtY2hl Y2sgdGhlIGdlbmVyYXRlZCByYW5nZSB0YWJsZQorCSAqIGlkZW50aWZpZXJzLgorCSAqLworCWlm IChwcHMgIT0gTlVMTCkKKwkJcGdwYV9yaV9jaGVja2VyX3ZhbGlkYXRlKHBwcywgcHN0bXQpOwor fQorCisvKgorICogRW5mb3JjZSBvdmVyYWxsIHJlc3RyaWN0aW9ucyBvbiBhIGpvaW4gcmVsYXRp b24gdGhhdCBhcHBseSB1bmlmb3JtbHkKKyAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGNob2ljZSBvZiBp bm5lciBhbmQgb3V0ZXIgcmVsLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX2FwcGx5 X2pvaW5yZWxfYWR2aWNlKHVpbnQ2NCAqcGdzX21hc2tfcCwgY2hhciAqcGxhbl9uYW1lLAorCQkJ CQkJCQkgIHBncGFfam9pbl9zdGF0ZSAqcGpzKQoreworCWludAkJCWkgPSAtMTsKKwlpbnQJCQlm bGFnczsKKwlib29sCQlnYXRoZXJfY29uZmxpY3QgPSBmYWxzZTsKKwl1aW50NjQJCWdhdGhlcl9t YXNrID0gMDsKKwlCaXRtYXBzZXQgICpnYXRoZXJfcGFydGlhbF9tYXRjaCA9IE5VTEw7CisJQml0 bWFwc2V0ICAqZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBOVUxMOworCWJvb2wJCXBhcnRpdGlvbndpc2Vf Y29uZmxpY3QgPSBmYWxzZTsKKwlpbnQJCQlwYXJ0aXRpb253aXNlX291dGNvbWUgPSAwOworCUJp dG1hcHNldCAgKnBhcnRpdGlvbndpc2VfcGFydGlhbF9tYXRjaCA9IE5VTEw7CisJQml0bWFwc2V0 ICAqcGFydGl0aW9ud2lzZV9mdWxsX21hdGNoID0gTlVMTDsKKworCS8qIEl0ZXJhdGUgb3ZlciBh bGwgcG9zc2libHktcmVsZXZhbnQgYWR2aWNlLiAqLworCXdoaWxlICgoaSA9IGJtc19uZXh0X21l bWJlcihwanMtPnJlbF9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkg KmVudHJ5ID0gJnBqcy0+cmVsX2VudHJpZXNbaV07CisJCXBncGFfaXRtX3R5cGUgaXRtOworCQli b29sCQlmdWxsX21hdGNoID0gZmFsc2U7CisJCXVpbnQ2NAkJbXlfZ2F0aGVyX21hc2sgPSAwOwor CQlpbnQJCQlteV9wYXJ0aXRpb253aXNlX291dGNvbWUgPSAwOwkvKiA+MCB5ZXMsIDwwIG5vICov CisKKwkJLyoKKwkJICogRm9yIEdBVEhFUiBhbmQgR0FUSEVSX01FUkdFLCBpZiB0aGUgc3BlY2lm aWVkIHJlbGF0aW9ucyBleGFjdGx5CisJCSAqIG1hdGNoIHRoaXMgam9pbnJlbCwgZG8gd2hhdGV2 ZXIgdGhlIGFkdmljZSBzYXlzOyBvdGhlcndpc2UsIGRvbid0CisJCSAqIGFsbG93IEdhdGhlciBv ciBHYXRoZXIgTWVyZ2UgYXQgdGhpcyBsZXZlbC4gRm9yIE5PX0dBVEhFUiwgdGhlcmUKKwkJICog bXVzdCBiZSBhIHNpbmdsZSB0YXJnZXQgcmVsYXRpb24gd2hpY2ggbXVzdCBiZSBpbmNsdWRlZCBp biB0aGlzCisJCSAqIGpvaW5yZWwsIHNvIGp1c3QgZG9uJ3QgYWxsb3cgR2F0aGVyIG9yIEdhdGhl ciBNZXJnZSBoZXJlLCBmdWxsCisJCSAqIHN0b3AuCisJCSAqLworCQlpZiAoZW50cnktPnRhZyA9 PSBQR1BBX1RBR19OT19HQVRIRVIpCisJCXsKKwkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJ REVSX05PTlBBUlRJQUw7CisJCQlmdWxsX21hdGNoID0gdHJ1ZTsKKwkJfQorCQllbHNlCisJCXsK KwkJCWludAkJCXRvdGFsX2NvdW50OworCisJCQl0b3RhbF9jb3VudCA9IHBqcy0+b3V0ZXJfY291 bnQgKyBwanMtPmlubmVyX2NvdW50OworCQkJaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90 YXJnZXQodG90YWxfY291bnQsIHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJCWVudHJ5LT50YXJnZXQp OworCQkJQXNzZXJ0KGl0bSAhPSBQR1BBX0lUTV9ESVNKT0lOVCk7CisKKwkJCWlmIChpdG0gPT0g UEdQQV9JVE1fRVFVQUwpCisJCQl7CisJCQkJZnVsbF9tYXRjaCA9IHRydWU7CisJCQkJaWYgKGVu dHJ5LT50YWcgPT0gUEdQQV9UQUdfUEFSVElUSU9OV0lTRSkKKwkJCQkJbXlfcGFydGl0aW9ud2lz ZV9vdXRjb21lID0gMTsKKwkJCQllbHNlIGlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhF UikKKwkJCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfR0FUSEVSOworCQkJCWVsc2UgaWYgKGVudHJ5 LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSX01FUkdFKQorCQkJCQlteV9nYXRoZXJfbWFzayA9IFBH U19HQVRIRVJfTUVSR0U7CisJCQkJZWxzZQorCQkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBh ZHZpY2UgdGFnOiAlZCIsCisJCQkJCQkgKGludCkgZW50cnktPnRhZyk7CisJCQl9CisJCQllbHNl CisJCQl7CisJCQkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfUEFSVElUSU9OV0lTRSkKKwkJ CQl7CisJCQkJCW15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSA9IC0xOworCQkJCQlteV9nYXRoZXJf bWFzayA9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCQkJCX0KKwkJCQllbHNlIGlmIChlbnRy eS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUiB8fAorCQkJCQkJIGVudHJ5LT50YWcgPT0gUEdQQV9U QUdfR0FUSEVSX01FUkdFKQorCQkJCXsKKwkJCQkJbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lID0g LTE7CisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCQkJ fQorCQkJCWVsc2UKKwkJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgYWR2aWNlIHRhZzogJWQi LAorCQkJCQkJIChpbnQpIGVudHJ5LT50YWcpOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogSWYg d2Ugc2V0IG15X2dhdGhlcl9tYXNrIHVwIGFib3ZlLCB0aGVuIHdlICgxKSBtYWtlIGEgbm90ZSBp ZiB0aGUKKwkJICogYWR2aWNlIGNvbmZsaWN0ZWQsICgyKSByZW1lbWJlciB0aGUgbWFzayB2YWx1 ZSwgYW5kICgzKSByZW1lbWJlcgorCQkgKiB3aGV0aGVyIHRoaXMgd2FzIGEgZnVsbCBvciBwYXJ0 aWFsIG1hdGNoLgorCQkgKi8KKwkJaWYgKG15X2dhdGhlcl9tYXNrICE9IDApCisJCXsKKwkJCWlm IChnYXRoZXJfbWFzayAhPSAwICYmIGdhdGhlcl9tYXNrICE9IG15X2dhdGhlcl9tYXNrKQorCQkJ CWdhdGhlcl9jb25mbGljdCA9IHRydWU7CisJCQlnYXRoZXJfbWFzayA9IG15X2dhdGhlcl9tYXNr OworCQkJaWYgKGZ1bGxfbWF0Y2gpCisJCQkJZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBibXNfYWRkX21l bWJlcihnYXRoZXJfZnVsbF9tYXRjaCwgaSk7CisJCQllbHNlCisJCQkJZ2F0aGVyX3BhcnRpYWxf bWF0Y2ggPSBibXNfYWRkX21lbWJlcihnYXRoZXJfcGFydGlhbF9tYXRjaCwgaSk7CisJCX0KKwor CQkvKgorCQkgKiBMaWtld2lzZSwgaWYgd2Ugc2V0IG15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSB1 cCBhYm92ZSwgdGhlbiB3ZSAoMSkKKwkJICogbWFrZSBhIG5vdGUgaWYgdGhlIGFkdmljZSBjb25m bGljdGVkLCAoMikgcmVtZW1iZXIgd2hhdCB0aGUgZGVzaXJlZAorCQkgKiBvdXRjb21lIHdhcywg YW5kICgzKSByZW1lbWJlciB3aGV0aGVyIHRoaXMgd2FzIGEgZnVsbCBvciBwYXJ0aWFsCisJCSAq IG1hdGNoLgorCQkgKi8KKwkJaWYgKG15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSAwKQorCQl7 CisJCQlpZiAocGFydGl0aW9ud2lzZV9vdXRjb21lICE9IDAgJiYKKwkJCQlwYXJ0aXRpb253aXNl X291dGNvbWUgIT0gbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lKQorCQkJCXBhcnRpdGlvbndpc2Vf Y29uZmxpY3QgPSB0cnVlOworCQkJcGFydGl0aW9ud2lzZV9vdXRjb21lID0gbXlfcGFydGl0aW9u d2lzZV9vdXRjb21lOworCQkJaWYgKGZ1bGxfbWF0Y2gpCisJCQkJcGFydGl0aW9ud2lzZV9mdWxs X21hdGNoID0KKwkJCQkJYm1zX2FkZF9tZW1iZXIocGFydGl0aW9ud2lzZV9mdWxsX21hdGNoLCBp KTsKKwkJCWVsc2UKKwkJCQlwYXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2ggPQorCQkJCQlibXNf YWRkX21lbWJlcihwYXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2gsIGkpOworCQl9CisJfQorCisJ LyoKKwkgKiBNYXJrIGV2ZXJ5IEdhdGhlci1yZWxhdGVkIHBpZWNlIG9mIGFkdmljZSBhcyBwYXJ0 aWFsbHkgbWF0Y2hlZCwgYW5kIGlmCisJICogdGhlIHNldCBvZiB0YXJnZXRzIGV4YWN0bHkgbWF0 Y2hlZCB0aGlzIHJlbGF0aW9uLCBmdWxseSBtYXRjaGVkLiBJZgorCSAqIHRoZXJlIHdhcyBhIGNv bmZsaWN0LCBtYXJrIHRoZW0gYWxsIGFzIGNvbmZsaWN0aW5nLgorCSAqLworCWZsYWdzID0gUEdQ QV9URV9NQVRDSF9QQVJUSUFMOworCWlmIChnYXRoZXJfY29uZmxpY3QpCisJCWZsYWdzIHw9IFBH UEFfVEVfQ09ORkxJQ1RJTkc7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmll cywgZ2F0aGVyX3BhcnRpYWxfbWF0Y2gsIGZsYWdzKTsKKwlmbGFncyB8PSBQR1BBX1RFX01BVENI X0ZVTEw7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgZ2F0aGVyX2Z1 bGxfbWF0Y2gsIGZsYWdzKTsKKworCS8qIExpa2V3aXNlIGZvciBwYXJ0aXRpb253aXNlIGFkdmlj ZS4gKi8KKwlmbGFncyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAocGFydGl0aW9ud2lz ZV9jb25mbGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ryb3Zl X3NldF9mbGFncyhwanMtPnJlbF9lbnRyaWVzLCBwYXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2gs IGZsYWdzKTsKKwlmbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJcGdwYV90cm92ZV9zZXRf ZmxhZ3MocGpzLT5yZWxfZW50cmllcywgcGFydGl0aW9ud2lzZV9mdWxsX21hdGNoLCBmbGFncyk7 CisKKwkvKiBJZiB0aGVyZSBpcyBhIG5vbi1jb25mbGljdGluZyBnYXRoZXIgc3BlY2lmaWNhdGlv biwgZW5mb3JjZSBpdC4gKi8KKwlpZiAoZ2F0aGVyX21hc2sgIT0gMCAmJiAhZ2F0aGVyX2NvbmZs aWN0KQorCXsKKwkJKnBnc19tYXNrX3AgJj0KKwkJCX4oUEdTX0dBVEhFUiB8IFBHU19HQVRIRVJf TUVSR0UgfCBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCk7CisJCSpwZ3NfbWFza19wIHw9IGdhdGhl cl9tYXNrOworCX0KKworCS8qCisJICogSWYgdGhlcmUgaXMgYSBub24tY29uZmxpY3RpbmcgcGFy dGl0aW9ud2lzZSBzcGVjaWZpY2F0aW9uLCBlbmZvcmNlLgorCSAqCisJICogVG8gZm9yY2UgYSBw YXJ0aXRpb253aXNlIGpvaW4sIHdlIGRpc2FibGUgYWxsIHRoZSBvcmRpbmFyeSBtZWFucyBvZgor CSAqIHBlcmZvcm1pbmcgYSBqb2luLCBhbmQgaW5zdGVhZCBvbmx5IEFwcGVuZCBhbmQgTWVyZ2VB cHBlbmQgcGF0aHMgaGVyZS4KKwkgKiBUbyBwcmV2ZW50IG9uZSwgd2UganVzdCBkaXNhYmxlIEFw cGVuZCBhbmQgTWVyZ2VBcHBlbmQuICBOb3RlIHRoYXQgd2UKKwkgKiBtdXN0IG5vdCB1bnNldCBQ R1NfQ09OU0lERVJfUEFSVElUSU9OV0lTRSBldmVuIHdoZW4gd2UgZG9uJ3Qgd2FudCBhCisJICog cGFydGl0aW9ud2lzZSBqb2luIGhlcmUsIGJlY2F1c2Ugd2UgbWlnaHQgd2FudCBvbmUgYXQgYSBo aWdoZXIgbGV2ZWwKKwkgKiB0aGF0IGlzIGNvbnN0cnVjdGluZyB1c2luZyBwYXRocyBmcm9tIHRo aXMgbGV2ZWwuCisJICovCisJaWYgKHBhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSAwICYmICFwYXJ0 aXRpb253aXNlX2NvbmZsaWN0KQorCXsKKwkJaWYgKHBhcnRpdGlvbndpc2Vfb3V0Y29tZSA+IDAp CisJCQkqcGdzX21hc2tfcCA9ICgqcGdzX21hc2tfcCAmIH5QR1NfSk9JTl9BTlkpIHwKKwkJCQlQ R1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQUEVORCB8IFBHU19DT05TSURFUl9QQVJUSVRJT05XSVNF OworCQllbHNlCisJCQkqcGdzX21hc2tfcCAmPSB+KFBHU19BUFBFTkQgfCBQR1NfTUVSR0VfQVBQ RU5EKTsKKwl9Cit9CisKKy8qCisgKiBFbmZvcmNlIHJlc3RyaWN0aW9ucyBvbiB0aGUgam9pbiBv cmRlciBvciBqb2luIG1ldGhvZC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcGxhbm5lcl9hcHBs eV9qb2luX3BhdGhfYWR2aWNlKEpvaW5UeXBlIGpvaW50eXBlLCB1aW50NjQgKnBnc19tYXNrX3As CisJCQkJCQkJCQljaGFyICpwbGFuX25hbWUsCisJCQkJCQkJCQlwZ3BhX2pvaW5fc3RhdGUgKnBq cykKK3sKKwlpbnQJCQlpID0gLTE7CisJQml0bWFwc2V0ICAqam9fcGVybWl0X2luZGV4ZXMgPSBO VUxMOworCUJpdG1hcHNldCAgKmpvX2RlbnlfaW5kZXhlcyA9IE5VTEw7CisJQml0bWFwc2V0ICAq am9fZGVueV9yZWxfaW5kZXhlcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqam1faW5kZXhlcyA9IE5V TEw7CisJYm9vbAkJam1fY29uZmxpY3QgPSBmYWxzZTsKKwl1aW50MzIJCWpvaW5fbWFzayA9IDA7 CisJQml0bWFwc2V0ICAqc2pfcGVybWl0X2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNldCAgKnNq X2RlbnlfaW5kZXhlcyA9IE5VTEw7CisKKwkvKgorCSAqIFJlY29uc2lkZXIgUEFSVElUSU9OV0lT RSguLi4pIGFkdmljZS4KKwkgKgorCSAqIFdlIGFscmVhZHkgdGhvdWdodCBhYm91dCB0aGlzIGZv ciB0aGUgam9pbnJlbCBhcyBhIHdob2xlLCBidXQgaW4gc29tZQorCSAqIGNhc2VzLCBwYXJ0aXRp b253aXNlIGFkdmljZSBjYW4gYWxzbyBjb25zdHJhaW4gdGhlIGpvaW4gb3JkZXIuIEZvcgorCSAq IGluc3RhbmNlLCBpZiB0aGUgYWR2aWNlIHNheXMgUEFSVElUSU9OV0lTRSgodDEgdDIpKSwgd2Ug c2hvdWxkbid0IGJ1aWxkCisJICogam9pbiBwYXRocyBmb3IgYSBhbnkgam9pbnJlbCB0aGF0IGlu Y2x1ZGVzIHQxIG9yIHQyIHVubGVzcyBpdCBhbHNvCisJICogaW5jbHVkZXMgdGhlIG90aGVyLiBJ biBnZW5lcmFsLCB0aGUgcGFyaXRpb253aXNlIG9wZXJhdGlvbiBtdXN0IGhhdmUKKwkgKiBhbHJl YWR5IGJlZW4gY29tcGxldGVkIHdpdGhpbiBvbmUgc2lkZSBvZiB0aGUgY3VycmVudCBqb2luIG9y IHRoZQorCSAqIG90aGVyLCBlbHNlIHRoZSBqb2luIG9yZGVyIGlzIGltcGVybWlzc2libGUuCisJ ICoKKwkgKiBOQjogSXQgbWlnaHQgc2VlbSB0ZW1wdGluZyB0byB0cnkgdG8gZGVhbCB3aXRoIFBB UlRJVElPTldJU0UgYWR2aXNlCisJICogZW50aXJlbHkgaW4gdGhpcyBmdW5jdGlvbiwgYnV0IHRo YXQgZG9lc24ndCB3b3JrLiBIZXJlLCB3ZSBjYW4gb25seQorCSAqIGFmZmVjdCB0aGUgcGdzX21h c2sgd2l0aGluIGEgcGFydGljdWxhciBKb2luUGF0aEV4dHJhRGF0YSwgdGhhdCBpcywgZm9yCisJ ICogYSBwYXJ0aWN1bGFyIGNob2ljZSBvZiBpbm5lcnJlbCBhbmQgb3V0ZXJyZWwuIFBhcnRpdGlv bndpc2UgcGF0aHMgYXJlCisJICogbm90IGJ1aWx0IHRoYXQgd2F5LCBzbyB3ZSBtdXN0IHNldCBw Z3NfbWFzayBmb3IgdGhlIFJlbE9wdEluZm8sIHdoaWNoCisJICogaXMgYmVzdCBkb25lIGluIHBn cGFfcGxhbm5lcl9hcHBseV9qb2lucmVsX2FkdmljZS4KKwkgKi8KKwl3aGlsZSAoKGkgPSBibXNf bmV4dF9tZW1iZXIocGpzLT5yZWxfaW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3Zl X2VudHJ5ICplbnRyeSA9ICZwanMtPnJlbF9lbnRyaWVzW2ldOworCQlwZ3BhX2l0bV90eXBlIGlu bmVyX2l0bTsKKwkJcGdwYV9pdG1fdHlwZSBvdXRlcl9pdG07CisKKwkJaWYgKGVudHJ5LT50YWcg IT0gUEdQQV9UQUdfUEFSVElUSU9OV0lTRSkKKwkJCWNvbnRpbnVlOworCisJCW91dGVyX2l0bSA9 IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KHBqcy0+b3V0ZXJfY291bnQsCisJCQkJCQkJ CQkJCQkgIHBqcy0+cmlkcywgZW50cnktPnRhcmdldCk7CisJCWlmIChvdXRlcl9pdG0gPT0gUEdQ QV9JVE1fRVFVQUwgfHwKKwkJCW91dGVyX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJT RVQpCisJCQljb250aW51ZTsKKworCQlpbm5lcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNo X3RhcmdldChwanMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJICBwanMtPnJpZHMgKyBwanMt Pm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkJICBlbnRyeS0+dGFyZ2V0KTsKKwkJaWYgKGlubmVy X2l0bSA9PSBQR1BBX0lUTV9FUVVBTCB8fAorCQkJaW5uZXJfaXRtID09IFBHUEFfSVRNX1RBUkdF VFNfQVJFX1NVQlNFVCkKKwkJCWNvbnRpbnVlOworCisJCWpvX2RlbnlfcmVsX2luZGV4ZXMgPSBi bXNfYWRkX21lbWJlcihqb19kZW55X3JlbF9pbmRleGVzLCBpKTsKKwl9CisKKwkvKiBJdGVyYXRl IG92ZXIgYWR2aWNlIHRoYXQgcGVydGFpbnMgdG8gdGhlIGpvaW4gb3JkZXIgYW5kIG1ldGhvZC4g Ki8KKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBqcy0+am9pbl9pbmRl eGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJnBqcy0+am9p bl9lbnRyaWVzW2ldOworCQl1aW50MzIJCW15X2pvaW5fbWFzazsKKworCQkvKiBIYW5kbGUgam9p biBvcmRlciBhZHZpY2UuICovCisJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX0pPSU5fT1JE RVIpCisJCXsKKwkJCWlmIChwZ3BhX2pvaW5fb3JkZXJfcGVybWl0c19qb2luKHBqcy0+b3V0ZXJf Y291bnQsCisJCQkJCQkJCQkJCSBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkgcGpzLT5y aWRzLAorCQkJCQkJCQkJCQkgZW50cnkpKQorCQkJCWpvX3Blcm1pdF9pbmRleGVzID0gYm1zX2Fk ZF9tZW1iZXIoam9fcGVybWl0X2luZGV4ZXMsIGkpOworCQkJZWxzZQorCQkJCWpvX2RlbnlfaW5k ZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX2RlbnlfaW5kZXhlcywgaSk7CisJCQljb250aW51ZTsK KwkJfQorCisJCS8qIEhhbmRsZSBqb2luIG1ldGhvZCBhZHZpY2UuICovCisJCW15X2pvaW5fbWFz ayA9IHBncGFfam9pbl9zdHJhdGVneV9tYXNrX2Zyb21fYWR2aWNlX3RhZyhlbnRyeS0+dGFnKTsK KwkJaWYgKG15X2pvaW5fbWFzayAhPSAwKQorCQl7CisJCQlib29sCQlwZXJtaXQ7CisJCQlib29s CQlyZXN0cmljdF9tZXRob2Q7CisKKwkJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX0ZPUkVJ R05fSk9JTikKKwkJCQlwZXJtaXQgPSBwZ3BhX29wYXF1ZV9qb2luX3Blcm1pdHNfam9pbihwanMt Pm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJ CQkJCQkJICAgcGpzLT5yaWRzLAorCQkJCQkJCQkJCQkJCSAgIGVudHJ5LAorCQkJCQkJCQkJCQkJ CSAgICZyZXN0cmljdF9tZXRob2QpOworCQkJZWxzZQorCQkJCXBlcm1pdCA9IHBncGFfam9pbl9t ZXRob2RfcGVybWl0c19qb2luKHBqcy0+b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpz LT5pbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJCQkgICBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQkJ ICAgZW50cnksCisJCQkJCQkJCQkJCQkJICAgJnJlc3RyaWN0X21ldGhvZCk7CisJCQlpZiAoIXBl cm1pdCkKKwkJCQlqb19kZW55X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19kZW55X2luZGV4 ZXMsIGkpOworCQkJZWxzZSBpZiAocmVzdHJpY3RfbWV0aG9kKQorCQkJeworCQkJCWptX2luZGV4 ZXMgPSBibXNfYWRkX21lbWJlcihqbV9pbmRleGVzLCBpKTsKKwkJCQlpZiAoam9pbl9tYXNrICE9 IDAgJiYgam9pbl9tYXNrICE9IG15X2pvaW5fbWFzaykKKwkJCQkJam1fY29uZmxpY3QgPSB0cnVl OworCQkJCWpvaW5fbWFzayA9IG15X2pvaW5fbWFzazsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9 CisKKwkJLyogSGFuZGxlIHNlbWlqb2luIHVuaXF1ZW5lc3MgYWR2aWNlLiAqLworCQlpZiAoZW50 cnktPnRhZyA9PSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUUgfHwKKwkJCWVudHJ5LT50YWcgPT0g UEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRSkKKwkJeworCQkJYm9vbAkJb3V0ZXJfc2lkZV9u dWxsYWJsZTsKKwkJCWJvb2wJCXJlc3RyaWN0X21ldGhvZDsKKworCQkJLyogUGxhbm5lciBoYXMg bnVsbGFibGUgc2lkZSBvZiB0aGUgc2VtaWpvaW4gb24gdGhlIG91dGVyIHNpZGU/ICovCisJCQlv dXRlcl9zaWRlX251bGxhYmxlID0gKGpvaW50eXBlID09IEpPSU5fVU5JUVVFX09VVEVSIHx8CisJ CQkJCQkJCSAgIGpvaW50eXBlID09IEpPSU5fUklHSFRfU0VNSSk7CisKKwkJCWlmICghcGdwYV9z ZW1pam9pbl9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJcGpzLT5p bm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJcGpzLT5yaWRzLAorCQkJCQkJCQkJCQllbnRyeSwKKwkJ CQkJCQkJCQkJb3V0ZXJfc2lkZV9udWxsYWJsZSwKKwkJCQkJCQkJCQkJJnJlc3RyaWN0X21ldGhv ZCkpCisJCQkJam9fZGVueV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam9fZGVueV9pbmRleGVz LCBpKTsKKwkJCWVsc2UgaWYgKHJlc3RyaWN0X21ldGhvZCkKKwkJCXsKKwkJCQlib29sCQlhZHZp Y2VfdW5pcXVlOworCQkJCWJvb2wJCWp0X3VuaXF1ZTsKKwkJCQlib29sCQlqdF9ub25fdW5pcXVl OworCisJCQkJLyogQWR2aWNlIHdhbnRzIHRvIHVuaXF1ZS1pZnkgYW5kIHVzZSBhIHJlZ3VsYXIg am9pbj8gKi8KKwkJCQlhZHZpY2VfdW5pcXVlID0gKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfU0VN SUpPSU5fVU5JUVVFKTsKKworCQkJCS8qIFBsYW5uZXIgaXMgdHJ5aW5nIHRvIHVuaXF1ZS1pZnkg YW5kIHVzZSBhIHJlZ3VsYXIgam9pbj8gKi8KKwkJCQlqdF91bmlxdWUgPSAoam9pbnR5cGUgPT0g Sk9JTl9VTklRVUVfSU5ORVIgfHwKKwkJCQkJCQkgam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfT1VU RVIpOworCisJCQkJLyogUGxhbm5lciBpcyB0cnlpbmcgYSBzZW1pLWpvaW4sIHdpdGhvdXQgdW5p cXVlLWlmeWluZz8gKi8KKwkJCQlqdF9ub25fdW5pcXVlID0gKGpvaW50eXBlID09IEpPSU5fU0VN SSB8fAorCQkJCQkJCQkgam9pbnR5cGUgPT0gSk9JTl9SSUdIVF9TRU1JKTsKKworCQkJCWlmICgh anRfdW5pcXVlICYmICFqdF9ub25fdW5pcXVlKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogVGhp cyBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzZW1pam9pbiB0byB3aGljaCBTSl9VTklRVUUKKwkJCQkJ ICogb3IgU0pfTk9OX1VOSVFVRSBjYW4gYmUgYXBwbGllZC4KKwkJCQkJICovCisJCQkJCWVudHJ5 LT5mbGFncyB8PSBQR1BBX1RFX0lOQVBQTElDQUJMRTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoYWR2 aWNlX3VuaXF1ZSAhPSBqdF91bmlxdWUpCisJCQkJCXNqX2RlbnlfaW5kZXhlcyA9IGJtc19hZGRf bWVtYmVyKHNqX2RlbnlfaW5kZXhlcywgaSk7CisJCQkJZWxzZQorCQkJCQlzal9wZXJtaXRfaW5k ZXhlcyA9IGJtc19hZGRfbWVtYmVyKHNqX3Blcm1pdF9pbmRleGVzLCBpKTsKKwkJCX0KKwkJCWNv bnRpbnVlOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB0aGUgYWR2aWNlIGluZGljYXRlcyBib3Ro IHRoYXQgdGhpcyBqb2luIG9yZGVyIGlzIHBlcm1pc3NpYmxlIGFuZAorCSAqIGFsc28gdGhhdCBp dCBpc24ndCwgdGhlbiBtYXJrIGFkdmljZSByZWxhdGVkIHRvIHRoZSBqb2luIG9yZGVyIGFzCisJ ICogY29uZmxpY3RpbmcuCisJICovCisJaWYgKGpvX3Blcm1pdF9pbmRleGVzICE9IE5VTEwgJiYK KwkJKGpvX2RlbnlfaW5kZXhlcyAhPSBOVUxMIHx8IGpvX2RlbnlfcmVsX2luZGV4ZXMgIT0gTlVM TCkpCisJeworCQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPmpvaW5fZW50cmllcywgam9fcGVy bWl0X2luZGV4ZXMsCisJCQkJCQkJIFBHUEFfVEVfQ09ORkxJQ1RJTkcpOworCQlwZ3BhX3Ryb3Zl X3NldF9mbGFncyhwanMtPmpvaW5fZW50cmllcywgam9fZGVueV9pbmRleGVzLAorCQkJCQkJCSBQ R1BBX1RFX0NPTkZMSUNUSU5HKTsKKwkJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50 cmllcywgam9fZGVueV9yZWxfaW5kZXhlcywKKwkJCQkJCQkgUEdQQV9URV9DT05GTElDVElORyk7 CisJfQorCisJLyoKKwkgKiBJZiBtb3JlIHRoYW4gb25lIGpvaW4gbWV0aG9kIHNwZWNpZmljYXRp b24gaXMgcmVsZXZhbnQgaGVyZSBhbmQgdGhleQorCSAqIGRpZmZlciwgbWFyayB0aGVtIGFsbCBh cyBjb25mbGljdGluZy4KKwkgKi8KKwlpZiAoam1fY29uZmxpY3QpCisJCXBncGFfdHJvdmVfc2V0 X2ZsYWdzKHBqcy0+am9pbl9lbnRyaWVzLCBqbV9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NP TkZMSUNUSU5HKTsKKworCS8qIElmIHNlbWlqb2luIGFkdmljZSBzYXlzIGJvdGggeWVzIGFuZCBu bywgbWFyayBpdCBhbGwgYXMgY29uZmxpY3RpbmcuICovCisJaWYgKHNqX3Blcm1pdF9pbmRleGVz ICE9IE5VTEwgJiYgc2pfZGVueV9pbmRleGVzICE9IE5VTEwpCisJeworCQlwZ3BhX3Ryb3ZlX3Nl dF9mbGFncyhwanMtPmpvaW5fZW50cmllcywgc2pfcGVybWl0X2luZGV4ZXMsCisJCQkJCQkJIFBH UEFfVEVfQ09ORkxJQ1RJTkcpOworCQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPmpvaW5fZW50 cmllcywgc2pfZGVueV9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsKKwl9 CisKKwkvKgorCSAqIElmIHdlIHdlcmUgYWR2aXNlZCB0byBkZW55IHRoaXMgam9pbiBvcmRlciwg dGhlbiBkbyBzby4gSG93ZXZlciwgaWYgd2UKKwkgKiB3ZXJlIGFsc28gYWR2aXNlZCB0byBwZXJt aXQgaXQsIHRoZW4gZG8gbm90aGluZywgc2luY2UgdGhlIGFkdmljZQorCSAqIGNvbmZsaWN0cy4K KwkgKi8KKwlpZiAoKGpvX2RlbnlfaW5kZXhlcyAhPSBOVUxMIHx8IGpvX2RlbnlfcmVsX2luZGV4 ZXMgIT0gTlVMTCkgJiYKKwkJam9fcGVybWl0X2luZGV4ZXMgPT0gTlVMTCkKKwkJKnBnc19tYXNr X3AgPSAoKnBnc19tYXNrX3AgJiB+UEdTX0pPSU5fQU5ZKSB8IGpvaW5fbWFzazsKKworCS8qCisJ ICogSWYgd2Ugd2VyZSBhZHZpc2VkIHRvIHJlc3RyaWN0IHRoZSBqb2luIG1ldGhvZCwgdGhlbiBk byBzby4gSG93ZXZlciwgaWYKKwkgKiB3ZSBnb3QgY29uZmxpY3Rpbmcgam9pbiBtZXRob2QgYWR2 aWNlLCB0aGVuIGluc3RlYWQgZG8gbm90aGluZy4KKwkgKi8KKwlpZiAoam9pbl9tYXNrICE9IDAg JiYgIWptX2NvbmZsaWN0KQorCQkqcGdzX21hc2tfcCA9ICgqcGdzX21hc2tfcCAmIH5QR1NfSk9J Tl9BTlkpIHwgam9pbl9tYXNrOworCisJLyoKKwkgKiBJZiB3ZSB3ZXJlIGFkdmlzZWQgdG8gZGVu eSB0aGlzIGR1ZSB0byBzZW1pam9pbi1yZWxhdGVkIGFkdmljZSwgdGhlbiBkbworCSAqIHNvLiBI b3dldmVyLCBpZiB3ZSBnb3QgY29uZmxpY3Rpbmcgc2VtaWpvaW4gYWR2aWNlLCB0aGVuIGluc3Rl YWQgZG8KKwkgKiBub3RoaW5nLgorCSAqLworCWlmIChzal9kZW55X2luZGV4ZXMgIT0gTlVMTCAm JiBzal9wZXJtaXRfaW5kZXhlcyA9PSBOVUxMKQorCQkqcGdzX21hc2tfcCA9ICgqcGdzX21hc2tf cCAmIH5QR1NfSk9JTl9BTlkpIHwgam9pbl9tYXNrOworfQorCisvKgorICogVHJhbnNsYXRlIGFu IGFkdmljZSB0YWcgaW50byBhIHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVneSBtYXNrLgorICoKKyAq IFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB3aXRoIHRhZyB0eXBlcyB0aGF0IGRvbid0IHJl cHJlc2VudCBqb2luCisgKiBzdHJhdGVnaWVzLiBJbiBzdWNoIGNhc2VzLCB3ZSBqdXN0IHJldHVy biAwLCB3aGljaCBjYW4ndCBiZSBjb25mdXNlZCB3aXRoCisgKiBhIHZhbGlkIG1hc2suCisgKi8K K3N0YXRpYyB1aW50NjQKK3BncGFfam9pbl9zdHJhdGVneV9tYXNrX2Zyb21fYWR2aWNlX3RhZyhw Z3BhX2FkdmljZV90YWdfdHlwZSB0YWcpCit7CisJc3dpdGNoICh0YWcpCisJeworCQljYXNlIFBH UEFfVEFHX0ZPUkVJR05fSk9JTjoKKwkJCXJldHVybiBQR1NfRk9SRUlHTkpPSU47CisJCWNhc2Ug UEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiBQR1NfTUVSR0VKT0lOX1BMQUlO OworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gUEdT X01FUkdFSk9JTl9NQVRFUklBTElaRTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJ TjoKKwkJCXJldHVybiBQR1NfTkVTVExPT1BfUExBSU47CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVE X0xPT1BfTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gUEdTX05FU1RMT09QX01BVEVSSUFMSVpFOwor CQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQlyZXR1cm4gUEdTX05FU1RM T09QX01FTU9JWkU7CisJCWNhc2UgUEdQQV9UQUdfSEFTSF9KT0lOOgorCQkJcmV0dXJuIFBHU19I QVNISk9JTjsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCX0KK30KKworLyoKKyAqIERvZXMg YSBjZXJ0YWluIGl0ZW0gb2Ygam9pbiBvcmRlciBhZHZpY2UgcGVybWl0IGEgY2VydGFpbiBqb2lu PworICovCitzdGF0aWMgYm9vbAorcGdwYV9qb2luX29yZGVyX3Blcm1pdHNfam9pbihpbnQgb3V0 ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpyaWRz LAorCQkJCQkJCSBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSkKK3sKKwlib29sCQlsb29wID0gdHJ1 ZTsKKwlib29sCQlzdWJsaXN0ID0gZmFsc2U7CisJaW50CQkJbGVuZ3RoOworCWludAkJCW91dGVy X2xlbmd0aDsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCA9IGVudHJ5LT50YXJnZXQ7CisJ cGdwYV9hZHZpY2VfdGFyZ2V0ICpwcmVmaXhfdGFyZ2V0OworCisJLyogV2UgZGVmaW5pdGVseSBo YXZlIGF0IGxlYXN0IGEgcGFydGlhbCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRyeS4gKi8KKwll bnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCisJLyoKKwkgKiBGaW5kIHRo ZSBpbm5lcm1vc3Qgc3VibGlzdCB0aGF0IGNvbnRhaW5zIGFsbCBrZXlzOyBpZiBubyBzdWJsaXN0 IGRvZXMsCisJICogdGhlbiBjb250aW51ZSBwcm9jZXNzaW5nIHdpdGggdGhlIHRvcGxldmVsIGxp c3QuCisJICoKKwkgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIGFkdmljZSBzYXlzIEpPSU5fT1JERVIo dDEgdDIgKHQzIHQ0IHQ1KSksIHRoZW4gd2UKKwkgKiBzaG91bGQgZXZhbHVhdGUgam9pbnMgdGhh dCBvbmx5IGludm9sdmUgdDMsIHQ0LCBhbmQvb3IgdDUgYWdhaW5zdCB0aGUKKwkgKiAodDMgdDQg dDUpIHN1Ymxpc3QsIGFuZCBvdGhlcnMgYWdhaW5zdCB0aGUgZnVsbCBsaXN0LgorCSAqCisJICog Tm90ZSB0aGF0ICgxKSBvdXRlcm1vc3Qgc3VibGlzdCBpcyBhbHdheXMgb3JkZXJlZCBhbmQgKDIp IHdoZW5ldmVyIHdlCisJICogem9vbSBpbnRvIGFuIHVub3JkZXJlZCBzdWJsaXN0LCB3ZSBpbnN0 YW50bHkgYWNjZXB0IHRoZSBwcm9wb3NlZCBqb2luLgorCSAqIElmIHRoZSBhZHZpY2Ugc2F5cyBK T0lOX09SREVSKHQxIHQyIHt0MyB0NCB0NX0pLCBhbnkgYXBwcm9hY2ggdG8KKwkgKiBqb2luaW5n IHQzLCB0NCwgYW5kL29yIHQ1IGlzIGFjY2VwdGFibGUuCisJICovCisJd2hpbGUgKGxvb3ApCisJ eworCQlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpOwor CisJCWxvb3AgPSBmYWxzZTsKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGls ZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCXBncGFfaXRtX3R5cGUgaXRtOwor CisJCQlpZiAoY2hpbGRfdGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQor CQkJCWNvbnRpbnVlOworCisJCQlpdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChv dXRlcl9jb3VudCArIGlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJcmlkcywgY2hpbGRfdGFyZ2V0 KTsKKwkJCWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwgfHwgaXRtID09IFBHUEFfSVRNX0tFWVNf QVJFX1NVQlNFVCkKKwkJCXsKKwkJCQlpZiAoY2hpbGRfdGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RB UkdFVF9PUkRFUkVEX0xJU1QpCisJCQkJeworCQkJCQl0YXJnZXQgPSBjaGlsZF90YXJnZXQ7CisJ CQkJCXN1Ymxpc3QgPSB0cnVlOworCQkJCQlsb29wID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJ fQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFzc2VydChjaGlsZF90YXJnZXQtPnR0eXBlID09IFBH UEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUKTsKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJfQorCQkJ fQorCQl9CisJfQorCisJLyoKKwkgKiBUcnkgdG8gZmluZCBhIHByZWZpeCBvZiB0aGUgc2VsZWN0 ZWQgam9pbiBvcmRlciBsaXN0IHRoYXQgaXMgZXhhY3RseQorCSAqIGVxdWFsIHRvIHRoZSBvdXRl ciBzaWRlIG9mIHRoZSBwcm9wb3NlZCBqb2luLgorCSAqLworCWxlbmd0aCA9IGxpc3RfbGVuZ3Ro KHRhcmdldC0+Y2hpbGRyZW4pOworCXByZWZpeF90YXJnZXQgPSBwYWxsb2MwX29iamVjdChwZ3Bh X2FkdmljZV90YXJnZXQpOworCXByZWZpeF90YXJnZXQtPnR0eXBlID0gUEdQQV9UQVJHRVRfT1JE RVJFRF9MSVNUOworCWZvciAob3V0ZXJfbGVuZ3RoID0gMTsgb3V0ZXJfbGVuZ3RoIDw9IGxlbmd0 aDsgKytvdXRlcl9sZW5ndGgpCisJeworCQlwZ3BhX2l0bV90eXBlIGl0bTsKKworCQkvKiBBdm9p ZCBsZWFraW5nIG1lbW9yeSBpbiBldmVyeSBsb29wIGl0ZXJhdGlvbi4gKi8KKwkJaWYgKHByZWZp eF90YXJnZXQtPmNoaWxkcmVuICE9IE5VTEwpCisJCQlsaXN0X2ZyZWUocHJlZml4X3RhcmdldC0+ Y2hpbGRyZW4pOworCQlwcmVmaXhfdGFyZ2V0LT5jaGlsZHJlbiA9IGxpc3RfY29weV9oZWFkKHRh cmdldC0+Y2hpbGRyZW4sCisJCQkJCQkJCQkJCQkgb3V0ZXJfbGVuZ3RoKTsKKworCQkvKiBTZWFy Y2gsIGhvcGluZyB0byBmaW5kIGFuIGV4YWN0IG1hdGNoLiAqLworCQlpdG0gPSBwZ3BhX2lkZW50 aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCwgcmlkcywgcHJlZml4X3RhcmdldCk7CisJ CWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBJZiB0 aGUgcHJlZml4IG9mIHRoZSBqb2luIG9yZGVyIGxpc3QgdGhhdCB3ZSdyZSBjb25zaWRlcmluZwor CQkgKiBpbmNsdWRlcyBzb21lIGJ1dCBub3QgYWxsIG9mIHRoZSBvdXRlciByZWxzLCB3ZSBjYW4g bWFrZSB0aGUgcHJlZml4CisJCSAqIGxvbmdlciB0byBmaW5kIGFuIGV4YWN0IG1hdGNoLiBCdXQg dGhlIGFkdmljZSBoYXNuJ3QgbWVudGlvbmVkCisJCSAqIGV2ZXJ5dGhpbmcgdGhhdCdzIHBhcnQg b2Ygb3VyIG91dGVyIHJlbCB5ZXQsIGJ1dCBoYXMgbWVudGlvbmVkCisJCSAqIHRoaW5ncyB0aGF0 IGFyZSBub3QsIHRoZW4gdGhpcyBqb2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGpvaW4gb3JkZXIKKwkJ ICogbGlzdC4KKwkJICovCisJCWlmIChpdG0gIT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VU KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogSWYgdGhlIHByZXZpb3VzIGxvb3Bl ZCBzdG9wcGVkIGJlZm9yZSB0aGUgcHJlZml4X3RhcmdldCBpbmNsdWRlZCB0aGUKKwkgKiBlbnRp cmUgam9pbiBvcmRlciBsaXN0LCB0aGVuIHRoZSBuZXh0IG1lbWJlciBvZiB0aGUgam9pbiBvcmRl ciBsaXN0CisJICogbXVzdCBleGFjdGx5IG1hdGNoIHRoZSBpbm5lciBzaWRlIG9mIHRoZSBqb2lu LgorCSAqCisJICogRXhhbXBsZTogR2l2ZW4gSk9JTl9PUkRFUih0MSB0MiAodDMgdDQgdDUpKSwg aWYgdGhlIG91dGVyIHNpZGUgb2YgdGhlCisJICogY3VycmVudCBqb2luIGluY2x1ZGVzIG9ubHkg dDEsIHRoZW4gdGhlIGlubmVyIHNpZGUgbXVzdCBiZSBleGFjdGx5IHQyOworCSAqIGlmIHRoZSBv dXRlciBzaWRlIGluY2x1ZGVzIGJvdGggdDEgYW5kIHQyLCB0aGVuIHRoZSBpbm5lciBzaWRlIG11 c3QKKwkgKiBpbmNsdWRlIGV4YWN0bHkgdDMsIHQ0LCBhbmQgdDUuCisJICovCisJaWYgKG91dGVy X2xlbmd0aCA8IGxlbmd0aCkKKwl7CisJCXBncGFfYWR2aWNlX3RhcmdldCAqaW5uZXJfdGFyZ2V0 OworCQlwZ3BhX2l0bV90eXBlIGl0bTsKKworCQlpbm5lcl90YXJnZXQgPSBsaXN0X250aCh0YXJn ZXQtPmNoaWxkcmVuLCBvdXRlcl9sZW5ndGgpOworCisJCWl0bSA9IHBncGFfaWRlbnRpZmllcnNf bWF0Y2hfdGFyZ2V0KGlubmVyX2NvdW50LCByaWRzICsgb3V0ZXJfY291bnQsCisJCQkJCQkJCQkJ CWlubmVyX3RhcmdldCk7CisKKwkJLyoKKwkJICogQmVmb3JlIHJldHVybmluZywgY29uc2lkZXIg d2hldGhlciB3ZSBuZWVkIHRvIG1hcmsgdGhpcyBlbnRyeSBhcworCQkgKiBmdWxseSBtYXRjaGVk LiBJZiB3ZSdyZSBjb25zaWRlcmluZyB0aGUgZnVsbCBsaXN0IHJhdGhlciB0aGFuIGEKKwkJICog c3VibGlzdCwgYW5kIGlmIHdlIGZvdW5kIGV2ZXJ5IGl0ZW0gYnV0IG9uZSBvbiB0aGUgb3V0ZXIg c2lkZSBvZgorCQkgKiB0aGUgam9pbiBhbmQgdGhlIGxhc3QgaXRlbSBvbiB0aGUgaW5uZXIgc2lk ZSBvZiB0aGUgam9pbiwgdGhlbiB0aGUKKwkJICogYW5zd2VyIGlzIHllcy4KKwkJICovCisJCWlm ICghc3VibGlzdCAmJiBvdXRlcl9sZW5ndGggKyAxID09IGxlbmd0aCAmJiBpdG0gPT0gUEdQQV9J VE1fRVFVQUwpCisJCQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCisJCXJl dHVybiAoaXRtID09IFBHUEFfSVRNX0VRVUFMKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGdldCBo ZXJlLCB0aGVuIHRoZSBvdXRlciBzaWRlIG9mIHRoZSBqb2luIGluY2x1ZGVzIHRoZSBlbnRpcmV0 eQorCSAqIG9mIHRoZSBqb2luIG9yZGVyIGxpc3QuIEluIHRoaXMgY2FzZSwgd2UgYmVoYXZlIGRp ZmZlcmVudGx5IGRlcGVuZGluZworCSAqIG9uIHdoZXRoZXIgd2UncmUgbG9va2luZyBhdCB0aGUg dG9wLWxldmVsIGpvaW4gb3JkZXIgbGlzdCBvciBzdWJsaXN0LgorCSAqIEF0IHRoZSB0b3AtbGV2 ZWwsIHdlIHRyZWF0IHRoZSBzcGVjaWZpZWQgbGlzdCBhcyBtYW5kYXRpbmcgdGhhdCB0aGUKKwkg KiBhY3R1YWwgam9pbiBvcmRlciBoYXMgdGhlIGdpdmVuIGxpc3QgYXMgYSBwcmVmaXgsIGJ1dCBh IHN1Ymxpc3QKKwkgKiByZXF1aXJlcyBhbiBleGFjdCBtYXRjaC4KKwkgKgorCSAqIEV4bWFwbGU6 IEdpdmVuIEpPSU5fT1JERVIodDEgdDIgKHQzIHQ0IHQ1KSksIHdlIG11c3Qgc3RhcnQgYnkgam9p bmluZworCSAqIGFsbCBmaXZlIG9mIHRob3NlIHJlbGF0aW9ucyBhbmQgaW4gdGhhdCBzZXF1ZW5j ZSwgYnV0IG9uY2UgdGhhdCBpcworCSAqIGRvbmUsIGl0J3MgT0sgdG8gam9pbiBhbnkgb3RoZXIg cmVscyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBqb2luIHByb2JsZW0uCisJICogVGhpcyBhbGxvd3Mg YSB1c2VyIHRvIHNwZWNpZnkgdGhlIGRyaXZpbmcgdGFibGUgYW5kIHBlcmhhcHMgdGhlIGZpcnN0 CisJICogZmV3IHRoaW5ncyB0byB3aGljaCBpdCBzaG91bGQgYmUgam9pbmVkIHdoaWxlIGxlYXZp bmcgdGhlIHJlc3Qgb2YgdGhlCisJICogam9pbiBvcmRlciB1cCB0aGUgb3B0aW1pemVyLiBCdXQg aXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBiZSBzdXJwcmlzaW5nLAorCSAqIGdpdmVuIHRoYXQgc3Bl Y2lmaWNhdGlvbiwgaWYgdGhlIHVzZXIgY291bGQgYWRkIHQ2IHRvIHRoZSAodDMgdDQgdDUpCisJ ICogc3ViLWpvaW4sIHNvIHdlIGRvbid0IGFsbG93IHRoYXQuIElmIHdlIGRpZCB3YW50IHRvIGFs bG93IGl0LCB0aGUgbG9naWMKKwkgKiBlYXJsaWVyIGluIHRoaXMgZnVuY3Rpb24gd291bGQgcmVx dWlyZSBzdWJzdGFudGlhbCBhZGp1c3RtZW50OiB3ZSBjb3VsZAorCSAqIGFsbG93IHRoZSB0My10 NC10NS10NiBqb2luIHRvIGJlIGJ1aWx0IGhlcmUsIGJ1dCB0aGUgbmV4dCBzdGVwIG9mCisJICog am9pbmluZyB0MS10MiB0byB0aGUgcmVzdWx0IHdvdWxkIHN0aWxsIGJlIHJlamVjdGVkLgorCSAq LworCWlmICghc3VibGlzdCkKKwkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsK KwlyZXR1cm4gIXN1Ymxpc3Q7Cit9CisKKy8qCisgKiBEb2VzIGEgY2VydGFpbiBpdGVtIG9mIGpv aW4gbWV0aG9kIGFkdmljZSBwZXJtaXQgYSBjZXJ0YWluIGpvaW4/CisgKgorICogQWR2aWNlIHN1 Y2ggYXMgSEFTSF9KT0lOKCh4IHkpKSBtZWFucyB0aGF0IHRoZXJlIHNob3VsZCBiZSBhIGhhc2gg am9pbiB3aXRoCisgKiBleGFjdGx5IHggYW5kIHkgb24gdGhlIGlubmVyIHNpZGUuIE9idmlvdXNs eSwgdGhpcyBtZWFucyB0aGF0IGlmIHdlIGFyZQorICogY29uc2lkZXJpbmcgYSBqb2luIHdpdGgg ZXhhY3RseSB4IGFuZCB5IG9uIHRoZSBpbm5lciBzaWRlLCB3ZSBzaG91bGQgZW5mb3JjZQorICog dGhlIHVzZSBvZiBhIGhhc2ggam9pbi4gSG93ZXZlciwgaXQgYWxzbyBtZWFucyB0aGF0IHdlIG11 c3QgcmVqZWN0IHNvbWUKKyAqIGluY29tcGF0aWJsZSBqb2luIG9yZGVycyBlbnRpcmVseS4gIEZv ciBleGFtcGxlLCBhIGpvaW4gd2l0aCBleGFjdGx5IHgKKyAqIGFuZCB5IG9uIHRoZSBvdXRlciBz aWRlIHNob3VsZG4ndCBiZSBhbGxvd2VkLCBiZWNhdXNlIHN1Y2ggcGF0aHMgbWlnaHQgd2luCisg KiBvdmVyIHRoZSBhZHZpY2UtZHJpdmVuIHBhdGggb24gY29zdC4KKyAqCisgKiBUbyBhY2NvbW1v ZGF0ZSB0aGVzZSByZXF1aXJlbWVudHMsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHRo ZSBqb2luCisgKiBzaG91bGQgYmUgYWxsb3dlZCBhbmQgZmFsc2UgaWYgaXQgc2hvdWxkIG5vdC4g RnVydGhlcm1vcmUsICpyZXN0cmljdF9tZXRob2QKKyAqIGlzIHNldCB0byB0cnVlIGlmIHRoZSBq b2luIG1ldGhvZCBzaG91bGQgYmUgZW5mb3JjZWQgYW5kIGZhbHNlIGlmIG5vdC4KKyAqLworc3Rh dGljIGJvb2wKK3BncGFfam9pbl9tZXRob2RfcGVybWl0c19qb2luKGludCBvdXRlcl9jb3VudCwg aW50IGlubmVyX2NvdW50LAorCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJ CSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJICBib29sICpyZXN0cmljdF9tZXRo b2QpCit7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQgPSBlbnRyeS0+dGFyZ2V0OworCXBn cGFfaXRtX3R5cGUgaW5uZXJfaXRtOworCXBncGFfaXRtX3R5cGUgb3V0ZXJfaXRtOworCXBncGFf aXRtX3R5cGUgam9pbl9pdG07CisKKwkvKiBXZSBkZWZpbml0ZWx5IGhhdmUgYXQgbGVhc3QgYSBw YXJ0aWFsIG1hdGNoIGZvciB0aGlzIHRyb3ZlIGVudHJ5LiAqLworCWVudHJ5LT5mbGFncyB8PSBQ R1BBX1RFX01BVENIX1BBUlRJQUw7CisKKwkqcmVzdHJpY3RfbWV0aG9kID0gZmFsc2U7CisKKwkv KgorCSAqIElmIG91ciBpbm5lciByZWwgbWVudGlvbnMgZXhhY3RseSB0aGUgc2FtZSByZWxhdGlv bnMgYXMgdGhlIGFkdmljZQorCSAqIHRhcmdldCwgYWxsb3cgdGhlIGpvaW4gYW5kIGVuZm9yY2Ug dGhlIGpvaW4gbWV0aG9kIHJlc3RyaWN0aW9uLgorCSAqCisJICogSWYgb3VyIGlubmVyIHJlbCBt ZW50aW9ucyBhIHN1cGVyc2V0IG9mIHRoZSB0YXJnZXQgcmVsYXRpb25zLCBhbGxvdyB0aGUKKwkg KiBqb2luLiBUaGUgam9pbiB3ZSBjYXJlIGFib3V0IGhhcyBhbHJlYWR5IHRha2VuIHBsYWNlLCBh bmQgdGhpcyBhZHZpY2UKKwkgKiBpbXBvc2VzIG5vIGZ1cnRoZXIgcmVzdHJpY3Rpb25zLgorCSAq LworCWlubmVyX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KGlubmVyX2NvdW50 LAorCQkJCQkJCQkJCQkgIHJpZHMgKyBvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJICB0YXJnZXQp OworCWlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJeworCQllbnRyeS0+ZmxhZ3Mg fD0gUEdQQV9URV9NQVRDSF9GVUxMOworCQkqcmVzdHJpY3RfbWV0aG9kID0gdHJ1ZTsKKwkJcmV0 dXJuIHRydWU7CisJfQorCWVsc2UgaWYgKGlubmVyX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FS RV9TVUJTRVQpCisJCXJldHVybiB0cnVlOworCisJLyoKKwkgKiBJZiBvdXIgb3V0ZXIgcmVsIG1l bnRpb25zIGEgc3Vwc2Vyc2V0IG9mIHRoZSByZWxhdGlvbnMgaW4gdGhlIGFkdmljZQorCSAqIHRh cmdldCwgbm8gcmVzdHJpY3Rpb25zIGFwcGx5LiBUaGUgam9pbiB3ZSBjYXJlIGhhcyBhbHJlYWR5 IHRha2VuCisJICogcGxhY2UsIGFuZCB0aGlzIGFkdmljZSBpbXBvc2VzIG5vIGZ1cnRoZXIgcmVz dHJpY3Rpb25zLgorCSAqCisJICogT24gdGhlIG90aGVyIGhhbmQsIGlmIG91ciBvdXRlciByZWwg bWVudGlvbnMgZXhhY3RseSB0aGUgcmVsYXRpb25zCisJICogbWVudGlvbmVkIGluIHRoZSBhZHZp Y2UgdGFyZ2V0LCB0aGUgcGxhbm5lciBpcyB0cnlpbmcgdG8gcmV2ZXJzZSB0aGUKKwkgKiBzaWRl cyBvZiB0aGUgam9pbiBhcyBjb21wYXJlZCB3aXRoIG91ciBkZXNpcmVkIG91dGNvbWUuIFJlamVj dCB0aGF0LgorCSAqLworCW91dGVyX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0 KG91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkgIHJpZHMsIHRhcmdldCk7CisJaWYgKG91dGVyX2l0 bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCXJldHVybiB0cnVlOworCWVsc2Ug aWYgKG91dGVyX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoK KwkgKiBJZiB0aGUgYWR2aWNlIHRhcmdldCBtZW50aW9ucyBvbmx5IGEgc2luZ2xlIHJlbGF0aW9u LCB0aGUgdGVzdCBiZWxvdworCSAqIGNhbm5vdCBldmVyIHBhc3MsIHNvIHNhdmUgc29tZSB3b3Jr IGJ5IGV4aXRpbmcgbm93LgorCSAqLworCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VU X0lERU5USUZJRVIpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogSWYgZXZlcnl0aGluZyBp biB0aGUgam9pbnJlbCBhcHBlYXJzIGluIHRoZSBhZHZpY2UgdGFyZ2V0LCB3ZSdyZSBiZWxvdwor CSAqIHRoZSBsZXZlbCBvZiB0aGUgam9pbiB3ZSB3YW50IHRvIGNvbnRyb2wuCisJICoKKwkgKiBG b3IgZXhhbXBsZSwgSEFTSF9KT0lOKCh4IHkpKSBkb2Vzbid0IHJlc3RyaWN0IGhvdyB4IGFuZCB5 IGNhbiBiZQorCSAqIGpvaW5lZC4KKwkgKgorCSAqIFRoaXMgbG9va3VwIHNob3VsZG4ndCByZXR1 cm4gUEdQQV9JVE1fRElTSk9JTlQsIGJlY2F1c2UgYW55IHN1Y2ggYWR2aWNlCisJICogc2hvdWxk IG5vdCBoYXZlIGJlZW4gcmV0dXJuZWQgZnJvbSB0aGUgdHJvdmUgaW4gdGhlIGZpcnN0IHBsYWNl LgorCSAqLworCWpvaW5faXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQob3V0ZXJf Y291bnQgKyBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJIHJpZHMsIHRhcmdldCk7CisJQXNzZXJ0 KGpvaW5faXRtICE9IFBHUEFfSVRNX0RJU0pPSU5UKTsKKwlpZiAoam9pbl9pdG0gPT0gUEdQQV9J VE1fS0VZU19BUkVfU1VCU0VUIHx8CisJCWpvaW5faXRtID09IFBHUEFfSVRNX0VRVUFMKQorCQly ZXR1cm4gdHJ1ZTsKKworCS8qCisJICogV2UndmUgYWxyZWFkeSBwZXJtaXR0ZWQgYWxsIGFsbG93 YWJsZSBjYXNlcywgc28gcmVqZWN0IHRoaXMuCisJICoKKwkgKiBJZiB3ZSByZWFjaCB0aGlzIHBv aW50LCB0aGVuIHRoZSBhZHZpY2Ugb3ZlcmxhcHMgd2l0aCB0aGlzIGpvaW4gYnV0CisJICogaXNu J3QgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBlaXRoZXIgc2lkZSwgYW5kIHRoZXJlJ3MgYWxz byBhdCBsZWFzdAorCSAqIG9uZSByZWxhdGlvbiBwcmVzZW50IGluIHRoZSBqb2luIHRoYXQgaXNu J3QgbWVudGlvbmVkIGJ5IHRoZSBhZHZpY2UuCisJICoKKwkgKiBGb3IgaW5zdGFuY2UsIGluIHRo ZSBIQVNIX0pPSU4oKHggeSkpIGV4YW1wbGUsIHdlIHdvdWxkIHJlYWNoIGhlcmUgaWYgeAorCSAq IHdlcmUgb24gb25lIHNpZGUgb2YgdGhlIGpvaW4sIHkgb24gdGhlIG90aGVyLCBhbmQgYXQgbGVh c3Qgb25lIG9mIHRoZQorCSAqIHR3byBzaWRlcyBhbHNvIGluY2x1ZGVkIHNvbWUgb3RoZXIgcmVs YXRpb24sIHNheSB0LiBJbiB0aGF0IGNhc2UsCisJICogYWNjZXB0aW5nIHRoaXMgam9pbiB3b3Vs ZCBhbGxvdyB0aGUgKHggeSB0KSBqb2lucmVsIHRvIGNvbnRhaW4KKwkgKiBub24tZGlzYWJsZWQg cGF0aHMgdGhhdCBkbyBub3QgcHV0ICh4IHkpIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgaGFzaAor CSAqIGpvaW47IHdlIGNvdWxkIGluc3RlYWQgZW5kIHVwIHdpdGggc29tZXRoaW5nIGxpa2UgKHgg Sk9JTiB0KSBKT0lOIHkuCisJICovCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogRG9lcyBh ZHZpY2UgY29uY2VybmluZyBhbiBvcGFxdWUgam9pbiBwZXJtaXQgYSBjZXJ0YWluIGpvaW4/Cisg KgorICogQnkgYW4gb3BhcXVlIGpvaW4sIHdlIG1lYW4gb25lIHdoZXJlIHRoZSBleGFjdCBtZWNo YW5pc20gYnkgd2hpY2ggdGhlCisgKiBqb2luIGlzIHBlcmZvcm1lZCBpcyBub3QgdmlzaWJsZSB0 byBQb3N0Z3JlU1FMLiBDdXJyZW50bHkgdGhpcyBpcyB0aGUKKyAqIGNhc2Ugb25seSBmb3IgZm9y ZWlnbiBqb2luczogRk9SRUlHTl9KT0lOKCh4IHkgeikpIG1lYW5zIHRoYXQgeCwgeSwgYW5kCisg KiB6IGFyZSBqb2luZWQgb24gdGhlIHJlbW90ZSBzaWRlLCBidXQgd2Uga25vdyBub3RoaW5nIGFi b3V0IHRoZSBqb2luIG9yZGVyCisgKiBvciBqb2luIG1ldGhvZHMgdXNlZCBvdmVyIHRoZXJlLgor ICoKKyAqIFRoZSBsb2dpYyBoZXJlIG5lZWRzIHRvIGRpZmZlciBmcm9tIHBncGFfam9pbl9tZXRo b2RfcGVybWl0c19qb2luIGJlY2F1c2UsCisgKiBmb3Igb3RoZXIgam9pbiB0eXBlcywgdGhlIGFk dmljZSB0YXJnZXQgaXMgdGhlIHNldCBvZiBpbm5lciByZWxzOyBoZXJlLCBpdAorICogaW5jbHVk ZXMgYm90aCBpbm5lciBhbmQgb3V0ZXIgcmVscy4KKyAqLworc3RhdGljIGJvb2wKK3BncGFfb3Bh cXVlX2pvaW5fcGVybWl0c19qb2luKGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAor CQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRy eSAqZW50cnksCisJCQkJCQkJICBib29sICpyZXN0cmljdF9tZXRob2QpCit7CisJcGdwYV9hZHZp Y2VfdGFyZ2V0ICp0YXJnZXQgPSBlbnRyeS0+dGFyZ2V0OworCXBncGFfaXRtX3R5cGUgam9pbl9p dG07CisKKwkvKiBXZSBkZWZpbml0ZWx5IGhhdmUgYXQgbGVhc3QgYSBwYXJ0aWFsIG1hdGNoIGZv ciB0aGlzIHRyb3ZlIGVudHJ5LiAqLworCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX1BB UlRJQUw7CisKKwkqcmVzdHJpY3RfbWV0aG9kID0gZmFsc2U7CisKKwlqb2luX2l0bSA9IHBncGFf aWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJ CQkJCQkJCSByaWRzLCB0YXJnZXQpOworCWlmIChqb2luX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkK Kwl7CisJCS8qCisJCSAqIFdlIGhhdmUgYW4gZXhhY3QgbWF0Y2gsIGFuZCBzaG91bGQgdGhlcmVm b3JlIGFsbG93IHRoZSBqb2luIGFuZAorCQkgKiBlbmZvcmNlIHRoZSB1c2Ugb2YgdGhlIHJlbGV2 YW50IG9wYXF1ZSBqb2luIG1ldGhvZC4KKwkJICovCisJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RF X01BVENIX0ZVTEw7CisJCSpyZXN0cmljdF9tZXRob2QgPSB0cnVlOworCQlyZXR1cm4gdHJ1ZTsK Kwl9CisKKwlpZiAoam9pbl9pdG0gPT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUIHx8CisJCWpv aW5faXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwl7CisJCS8qCisJCSAqIElm IGpvaW5faXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCwgdGhlbiB0aGUgam9pbiB3 ZSBjYXJlCisJCSAqIGFib3V0IGhhcyBhbHJlYWR5IHRha2VuIHBsYWNlIGFuZCBubyBmdXJ0aGVy IHJlc3RyaWN0aW9ucyBhcHBseS4KKwkJICoKKwkJICogSWYgam9pbl9pdG0gPT0gUEdQQV9JVE1f S0VZU19BUkVfU1VCU0VULCB3ZSdyZSBzdGlsbCBidWlsZGluZyB1cCB0bworCQkgKiB0aGUgam9p biB3ZSBjYXJlIGFib3V0IGFuZCBoYXZlIG5vdCBpbnRyb2R1Y2VkIGFueSBleHRyYW5lb3VzCisJ CSAqIHJlbGF0aW9ucyBub3QgbmFtZWQgaW4gdGhlIGFkdmljZS4gTm90ZSB0aGF0IEZvcmVpZ25T Y2FuIHBhdGhzIGZvcgorCQkgKiBqb2lucyBhcmUgYnVpbHQgdXAgZnJvbSBGb3JlaWduU2NhbiBw YXRocyBmcm9tIHVuZGVybHlpbmcgam9pbnMgYW5kCisJCSAqIHNjYW5zLCBzbyB3ZSBtdXN0IG5v dCBkaXNhYmxlIHRoaXMgam9pbiB3aGVuIGNvbnNpZGVyaW5nIGEgc3Vic2V0CisJCSAqIG9mIHRo ZSByZWxhdGlvbnMgd2UgdWx0aW1hdGVseSB3YW50LgorCQkgKi8KKwkJcmV0dXJuIHRydWU7CisJ fQorCisJLyoKKwkgKiBUaGUgYWR2aWNlIG92ZXJsYXBzIHRoZSBqb2luLCBidXQgYXQgbGVhc3Qg b25lIHJlbGF0aW9uIGlzIHByZXNlbnQgaW4KKwkgKiB0aGUgam9pbiB0aGF0IGlzbid0IG1lbnRp b25lZCBieSB0aGUgYWR2aWNlLiBXZSB3YW50IHRvIGRpc2FibGUgc3VjaAorCSAqIHBhdGhzIHNv IHRoYXQgd2UgYWN0dWFsbHkgcHVzaCBkb3duIHRoZSBqb2luIGFzIGludGVuZGVkLgorCSAqLwor CXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMgYWR2aWNlIGNvbmNlcm5pbmcgYSBzZW1p am9pbiBwZXJtaXQgYSBjZXJ0YWluIGpvaW4/CisgKgorICogVW5saWtlIGpvaW4gbWV0aG9kIGFk dmljZSwgd2hpY2ggbGlzdHMgdGhlIHJlbHMgb24gdGhlIGlubmVyIHNpZGUgb2YgdGhlCisgKiBq b2luLCBzZW1pam9pbiB1bmlxdWVuZXNzIGFkdmljZSBsaXN0cyB0aGUgcmVscyBvbiB0aGUgbnVs bGFibGUgc2lkZSBvZiB0aGUKKyAqIGpvaW4uIFRob3NlIGNhbiBiZSB0aGUgc2FtZSwgaWYgdGhl IGpvaW4gdHlwZSBpcyBKT0lOX1VOSVFVRV9JTk5FUiBvcgorICogSk9JTl9TRU1JLCBvciB0aGV5 IGNhbiBiZSBkaWZmZXJlbnQsIGluIGNhc2Ugb2YgSk9JTl9VTklRVUVfT1VURVIgb3IKKyAqIEpP SU5fUklHSFRfU0VNSS4KKyAqCisgKiBXZSBkb24ndCBrbm93IGhlcmUgd2hldGhlciB0aGUgY2Fs bGVyIHNwZWNpZmllZCBTRU1JSk9JTl9VTklRVUUgb3IKKyAqIFNFTUlKT0lOX05PTl9VTklRVUUu IFRoZSBjYWxsZXIgc2hvdWxkIGNoZWNrIHRoZSBqb2luIHR5cGUgYWdhaW5zdCB0aGUKKyAqIGFk dmljZSB0eXBlIGlmIGFuZCBvbmx5IGlmIHdlIHNldCAqcmVzdHJpY3RfbWV0aG9kIHRvIHRydWUu CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3NlbWlqb2luX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJf Y291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkcywK KwkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJICAgYm9vbCBvdXRlcl9p c19udWxsYWJsZSwKKwkJCQkJCSAgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCkKK3sKKwlwZ3BhX2Fk dmljZV90YXJnZXQgKnRhcmdldCA9IGVudHJ5LT50YXJnZXQ7CisJcGdwYV9pdG1fdHlwZSBqb2lu X2l0bTsKKwlwZ3BhX2l0bV90eXBlIGlubmVyX2l0bTsKKwlwZ3BhX2l0bV90eXBlIG91dGVyX2l0 bTsKKworCSpyZXN0cmljdF9tZXRob2QgPSBmYWxzZTsKKworCS8qIFdlIGRlZmluaXRlbHkgaGF2 ZSBhdCBsZWFzdCBhIHBhcnRpYWwgbWF0Y2ggZm9yIHRoaXMgdHJvdmUgZW50cnkuICovCisJZW50 cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKworCS8qCisJICogSWYgb3V0ZXIg cmVsIGlzIHRoZSBudWxsYWJsZSBzaWRlIGFuZCBjb250YWlucyBleGFjdGx5IHRoZSBzYW1lCisJ ICogcmVsYXRpb25zIGFzIHRoZSBhZHZpY2UgdGFyZ2V0LCB0aGVuIHRoZSBqb2luIG9yZGVyIGlz IGFsbG93YWJsZSwgYnV0CisJICogdGhlIGNhbGxlciBtdXN0IGNoZWNrIHdoZXRoZXIgdGhlIGFk dmljZSB0YWcgKGVpdGhlciBTRU1JSk9JTl9VTklRVUUgb3IKKwkgKiBTRU1JSk9JTl9OT05fVU5J UVVFKSBtYXRjaGVzIHRoZSBqb2luIHR5cGUuCisJICoKKwkgKiBJZiB0aGUgb3V0ZXIgcmVsIGlz IGEgc3VwZXJzZXQgb2YgdGhlIHRhcmdldCByZWxhdGlvbnMsIHRoZSBqb2luIHdlCisJICogY2Fy ZSBhYm91dCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSwgc28gd2Ugc2hvdWxkIGltcG9zZSBubyBm dXRoZXIKKwkgKiByZXN0cml0aW9ucy4KKwkgKi8KKwlvdXRlcl9pdG0gPSBwZ3BhX2lkZW50aWZp ZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJICByaWRzLCB0YXJnZXQp OworCWlmIChvdXRlcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJeworCQllbnRyeS0+ZmxhZ3Mg fD0gUEdQQV9URV9NQVRDSF9GVUxMOworCQlpZiAob3V0ZXJfaXNfbnVsbGFibGUpCisJCXsKKwkJ CSpyZXN0cmljdF9tZXRob2QgPSB0cnVlOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisJZWxz ZSBpZiAob3V0ZXJfaXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJcmV0dXJu IHRydWU7CisKKwkvKiBBcyBhYm92ZSwgYnV0IGZvciB0aGUgaW5uZXIgcmVsLiAqLworCWlubmVy X2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KGlubmVyX2NvdW50LAorCQkJCQkJ CQkJCQkgIHJpZHMgKyBvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJICB0YXJnZXQpOworCWlmIChp bm5lcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJeworCQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9U RV9NQVRDSF9GVUxMOworCQlpZiAoIW91dGVyX2lzX251bGxhYmxlKQorCQl7CisJCQkqcmVzdHJp Y3RfbWV0aG9kID0gdHJ1ZTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCWVsc2UgaWYgKGlu bmVyX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCXJldHVybiB0cnVlOwor CisJLyoKKwkgKiBJZiBldmVyeXRoaW5nIGluIHRoZSBqb2lucmVsIGFwcGVhcnMgaW4gdGhlIGFk dmljZSB0YXJnZXQsIHdlJ3JlIGJlbG93CisJICogdGhlIGxldmVsIG9mIHRoZSBqb2luIHdlIHdh bnQgdG8gY29udHJvbC4KKwkgKi8KKwlqb2luX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hf dGFyZ2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSByaWRzLCB0YXJn ZXQpOworCUFzc2VydChqb2luX2l0bSAhPSBQR1BBX0lUTV9ESVNKT0lOVCk7CisJaWYgKGpvaW5f aXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCB8fAorCQlqb2luX2l0bSA9PSBQR1BBX0lU TV9FUVVBTCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIFdlJ3ZlIHRlc3RlZCBmb3IgYWxs IGFsbG93YWJsZSBwb3NzaWJpbGl0aWVzLCBhbmQgc28gbXVzdCByZWplY3QgdGhpcworCSAqIGpv aW4gb3JkZXIuIFRoaXMgY2FuIGhhcHBlbiBpbiB0d28gd2F5cy4KKwkgKgorCSAqIEZpcnN0LCB3 ZSBtaWdoIGJlIGNvbnNpZGVyaW5nIGEgc2VtaWpvaW4gdGhhdCBvdmVybGFwcyBpbmNvbXBsZXRl bHkKKwkgKiB3aXRoIG9uZSBvciBib3RoIHNpZGVzIG9mIHRoZSBqb2luLiBGb3IgZXhhbXBsZSwg aWYgdGhlIHVzZXIgaGFzCisJICogc3BlY2lmaWVkIFNFTUlKT0lOX1VOSVFVRSgodDEgdDIpKSBv ciBTRU1JSk9JTl9OT05fVU5JUVVFKCh0MSB0MikpLCB3ZQorCSAqIHNob3VsZCByZWplY3QgYSBw cm9wb3NlZCB0Mi10MyBqb2luLCBzaW5jZSB0aGF0IGNvdWxkIG5vdCByZXN1bHQgaW4gYQorCSAq IGZpbmFsIHBsYW4gY29tcGF0aWJsZSB3aXRoIHRoZSBhZHZpY2UuCisJICoKKwkgKiBTZWNvbmQs IHdlIG1pZ2h0IGJlIGNvbnNpZGVyaW5nIGEgc2VtaWpvaW4gd2hlcmUgdGhlIGFkdmljZSB0YXJn ZXQKKwkgKiBwZXJmZWN0bHkgbWF0Y2hlcyBvbmUgc2lkZSBvZiB0aGUgam9pbiwgYnV0IGl0J3Mg dGhlIHdyb25nIG9uZS4gRm9yCisJICogZXhhbXBsZSwgaW4gdGhlIGV4YW1wbGUgYWJvdmUsIHdl IG1pZ2h0IHNlZSBhIDMtd2F5IGpvaW4gYmV0d2VlbiB0MSwKKwkgKiB0MiwgYW5kIHQzLCB3aXRo ICh0MSB0Mikgb24gdGhlIG5vbi1udWxsYWJsZSBzaWRlLiBUaGF0LCB0b28sIHdvdWxkIGJlCisJ ICogaW5jb21wYXRpYmxlIHdpdGggdGhlIGFkdmljZS4KKwkgKi8KKwlyZXR1cm4gZmFsc2U7Cit9 CisKKy8qCisgKiBBcHBseSBzY2FuIGFkdmljZSB0byBhIFJlbE9wdEluZm8uCisgKi8KK3N0YXRp YyB2b2lkCitwZ3BhX3BsYW5uZXJfYXBwbHlfc2Nhbl9hZHZpY2UoUmVsT3B0SW5mbyAqcmVsLAor CQkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKnNjYW5fZW50cmllcywKKwkJCQkJCQkgICBCaXRt YXBzZXQgKnNjYW5faW5kZXhlcywKKwkJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpyZWxfZW50 cmllcywKKwkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbF9pbmRleGVzKQoreworCWJvb2wJCWdhdGhl cl9jb25mbGljdCA9IGZhbHNlOworCUJpdG1hcHNldCAgKmdhdGhlcl9wYXJ0aWFsX21hdGNoID0g TlVMTDsKKwlCaXRtYXBzZXQgICpnYXRoZXJfZnVsbF9tYXRjaCA9IE5VTEw7CisJaW50CQkJaSA9 IC0xOworCXBncGFfdHJvdmVfZW50cnkgKnNjYW5fZW50cnkgPSBOVUxMOworCWludAkJCWZsYWdz OworCWJvb2wJCXNjYW5fdHlwZV9jb25mbGljdCA9IGZhbHNlOworCUJpdG1hcHNldCAgKnNjYW5f dHlwZV9pbmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQgICpzY2FuX3R5cGVfcmVsX2luZGV4ZXMg PSBOVUxMOworCXVpbnQ2NAkJZ2F0aGVyX21hc2sgPSAwOworCXVpbnQ2NAkJc2Nhbl90eXBlID0g MDsKKworCS8qIFNjcnV0aW5pemUgYXZhaWxhYmxlIHNjYW4gYWR2aWNlLiAqLworCXdoaWxlICgo aSA9IGJtc19uZXh0X21lbWJlcihzY2FuX2luZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90 cm92ZV9lbnRyeSAqbXlfZW50cnkgPSAmc2Nhbl9lbnRyaWVzW2ldOworCQl1aW50NjQJCW15X3Nj YW5fdHlwZSA9IDA7CisKKwkJLyogVHJhbnNsYXRlIG91ciBhZHZpY2UgdGFncyB0byBhIHNjYW4g c3RyYXRlZ3kgYWR2aWNlIHZhbHVlLiAqLworCQlpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RB R19CSVRNQVBfSEVBUF9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0gUEdTX0JJVE1BUFNDQU47CisJ CWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOKQorCQkJ bXlfc2Nhbl90eXBlID0gUEdTX0lOREVYT05MWVNDQU4gfCBQR1NfQ09OU0lERVJfSU5ERVhPTkxZ OworCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0lOREVYX1NDQU4pCisJCQlt eV9zY2FuX3R5cGUgPSBQR1NfSU5ERVhTQ0FOOworCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09 IFBHUEFfVEFHX1NFUV9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0gUEdTX1NFUVNDQU47CisJCWVs c2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfVElEX1NDQU4pCisJCQlteV9zY2FuX3R5 cGUgPSBQR1NfVElEU0NBTjsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIHVuZGVyc3RhbmRhYmxl IHNjYW4gYWR2aWNlLCBoYW5nIG9uIHRvIHRoZSBlbnRyeSwgdGhlCisJCSAqIGluZmVycmVkIHNj YW4gdHlwZSB0eXBlLCBhbmQgdGhlIGluZGV4IGF0IHdoaWNoIHdlIGZvdW5kIGl0LgorCQkgKgor CQkgKiBBbHNvIG1ha2UgYSBub3RlIGlmIHdlIHNlZSBjb25mbGljdGluZyBzY2FuIHR5cGUgYWR2 aWNlLiBOb3RlIHRoYXQKKwkJICogd2UgcmVnYXJkIHR3byBpbmRleCBzcGVjaWZpY2F0aW9ucyBh cyBjb25mbGljdGluZyB1bmxlc3MgdGhleSBtYXRjaAorCQkgKiBleGFjdGx5LiBJbiB0aGVvcnks IHBlcmhhcHMgd2UgY291bGQgcmVnYXJkIElOREVYX1NDQU4oYSBjKSBhbmQKKwkJICogSU5ERVhf U0NBTihhIGIuYykgYXMgbm9uLWNvbmZsaWN0aW5nIGlmIGl0IGhhcHBlbnMgdGhhdCB0aGUgb25s eQorCQkgKiBpbmRleCBuYW1lZCBjIGlzIGluIHNjaGVtYSBiLCBidXQgaXQgZG9lc24ndCBzZWVt IHdvcnRoIHRoZSBjb2RlLgorCQkgKi8KKwkJaWYgKG15X3NjYW5fdHlwZSAhPSAwKQorCQl7CisJ CQlpZiAoc2Nhbl90eXBlICE9IDAgJiYgc2Nhbl90eXBlICE9IG15X3NjYW5fdHlwZSkKKwkJCQlz Y2FuX3R5cGVfY29uZmxpY3QgPSB0cnVlOworCQkJaWYgKCFzY2FuX3R5cGVfY29uZmxpY3QgJiYg c2Nhbl9lbnRyeSAhPSBOVUxMICYmCisJCQkJbXlfZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBO VUxMICYmCisJCQkJc2Nhbl9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0ICE9IE5VTEwgJiYKKwkJCQkh cGdwYV9pbmRleF90YXJnZXRzX2VxdWFsKHNjYW5fZW50cnktPnRhcmdldC0+aXRhcmdldCwKKwkJ CQkJCQkJCQkgIG15X2VudHJ5LT50YXJnZXQtPml0YXJnZXQpKQorCQkJCXNjYW5fdHlwZV9jb25m bGljdCA9IHRydWU7CisJCQlzY2FuX2VudHJ5ID0gbXlfZW50cnk7CisJCQlzY2FuX3R5cGUgPSBt eV9zY2FuX3R5cGU7CisJCQlzY2FuX3R5cGVfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKHNjYW5f dHlwZV9pbmRleGVzLCBpKTsKKwkJfQorCX0KKworCS8qIFNjcnV0aW5pemUgYXZhaWxhYmxlIGdh dGhlci1yZWxhdGVkIGFuZCBwYXJ0aXRpb253aXNlIGFkdmljZS4gKi8KKwlpID0gLTE7CisJd2hp bGUgKChpID0gYm1zX25leHRfbWVtYmVyKHJlbF9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBn cGFfdHJvdmVfZW50cnkgKm15X2VudHJ5ID0gJnJlbF9lbnRyaWVzW2ldOworCQl1aW50NjQJCW15 X2dhdGhlcl9tYXNrID0gMDsKKwkJYm9vbAkJanVzdF9vbmVfcmVsOworCisJCWp1c3Rfb25lX3Jl bCA9IG15X2VudHJ5LT50YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIKKwkJ CXx8IGxpc3RfbGVuZ3RoKG15X2VudHJ5LT50YXJnZXQtPmNoaWxkcmVuKSA9PSAxOworCisJCS8q CisJCSAqIFBBUlRJVElPTldJU0UgYmVoYXZlcyBsaWtlIGEgc2NhbiB0eXBlLCBleGNlcHQgdGhh dCBpZiB0aGVyZSdzIG1vcmUKKwkJICogdGhhbiBvbmUgcmVsYXRpb24gdGFyZ2V0ZWQsIGl0IGhh cyBubyBlZmZlY3QgYXQgdGhpcyBsZXZlbC4KKwkJICovCisJCWlmIChteV9lbnRyeS0+dGFnID09 IFBHUEFfVEFHX1BBUlRJVElPTldJU0UpCisJCXsKKwkJCWlmIChqdXN0X29uZV9yZWwpCisJCQl7 CisJCQkJY29uc3QgdWludDY0IG15X3NjYW5fdHlwZSA9IFBHU19BUFBFTkQgfCBQR1NfTUVSR0Vf QVBQRU5EOworCisJCQkJaWYgKHNjYW5fdHlwZSAhPSAwICYmIHNjYW5fdHlwZSAhPSBteV9zY2Fu X3R5cGUpCisJCQkJCXNjYW5fdHlwZV9jb25mbGljdCA9IHRydWU7CisJCQkJc2Nhbl9lbnRyeSA9 IG15X2VudHJ5OworCQkJCXNjYW5fdHlwZSA9IG15X3NjYW5fdHlwZTsKKwkJCQlzY2FuX3R5cGVf cmVsX2luZGV4ZXMgPQorCQkJCQlibXNfYWRkX21lbWJlcihzY2FuX3R5cGVfcmVsX2luZGV4ZXMs IGkpOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBHQVRIRVIgYW5kIEdB VEhFUl9NRVJHRSBhcHBsaWVkIHRvIGEgc2luZ2xlIHJlbCBtZWFuIHRoYXQgd2Ugc2hvdWxkCisJ CSAqIHVzZSB0aGUgY29ycmVzcG9uZGluZ3Mgc3RyYXRlZ3kgaGVyZSwgd2hpbGUgYXBwbHlpbmcg ZWl0aGVyIHRvIG1vcmUKKwkJICogdGhhbiBvbmUgcmVsIG1lYW5zIHdlIHNob3VsZCBub3QgdXNl IHRob3NlIHN0cmF0ZWdpZXMgaGVyZSwgYnV0CisJCSAqIHJhdGhlciBhdCB0aGUgbGV2ZWwgb2Yg dGhlIGpvaW5yZWwgdGhhdCBjb3JyZXNwb25kcyB0byB3aGF0IHdhcworCQkgKiBzcGVjaWZpZWQu IE5PX0dBVEhFUiBjYW4gb25seSBiZSBhcHBsaWVkIHRvIHNpbmdsZSByZWxzLgorCQkgKgorCQkg KiBOb3RlIHRoYXQgc2V0dGluZyBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCBpbiBteV9nYXRoZXJf bWFzayBpcworCQkgKiBlcXVpdmFsZW50IHRvIGFsbG93aW5nIHRoZSBub24tdXNlIG9mIGVpdGhl ciBmb3JtIG9mIEdhdGhlciBoZXJlLgorCQkgKi8KKwkJaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQ QV9UQUdfR0FUSEVSIHx8CisJCQlteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUl9NRVJH RSkKKwkJeworCQkJaWYgKCFqdXN0X29uZV9yZWwpCisJCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1Nf Q09OU0lERVJfTk9OUEFSVElBTDsKKwkJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9U QUdfR0FUSEVSKQorCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0dBVEhFUjsKKwkJCWVsc2UKKwkJ CQlteV9nYXRoZXJfbWFzayA9IFBHU19HQVRIRVJfTUVSR0U7CisJCX0KKwkJZWxzZSBpZiAobXlf ZW50cnktPnRhZyA9PSBQR1BBX1RBR19OT19HQVRIRVIpCisJCXsKKwkJCUFzc2VydChqdXN0X29u ZV9yZWwpOworCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJ fQorCisJCS8qCisJCSAqIElmIHdlIHNldCBteV9nYXRoZXJfbWFzayB1cCBhYm92ZSwgdGhlbiB3 ZSAoMSkgbWFrZSBhIG5vdGUgaWYgdGhlCisJCSAqIGFkdmljZSBjb25mbGljdGVkLCAoMikgcmVt ZW1iZXIgdGhlIG1hc2sgdmFsdWUsIGFuZCAoMykgcmVtZW1iZXIKKwkJICogd2hldGhlciB0aGlz IHdhcyBhIGZ1bGwgb3IgcGFydGlhbCBtYXRjaC4KKwkJICovCisJCWlmIChteV9nYXRoZXJfbWFz ayAhPSAwKQorCQl7CisJCQlpZiAoZ2F0aGVyX21hc2sgIT0gMCAmJiBnYXRoZXJfbWFzayAhPSBt eV9nYXRoZXJfbWFzaykKKwkJCQlnYXRoZXJfY29uZmxpY3QgPSB0cnVlOworCQkJZ2F0aGVyX21h c2sgPSBteV9nYXRoZXJfbWFzazsKKwkJCWlmIChqdXN0X29uZV9yZWwpCisJCQkJZ2F0aGVyX2Z1 bGxfbWF0Y2ggPSBibXNfYWRkX21lbWJlcihnYXRoZXJfZnVsbF9tYXRjaCwgaSk7CisJCQllbHNl CisJCQkJZ2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBibXNfYWRkX21lbWJlcihnYXRoZXJfcGFydGlh bF9tYXRjaCwgaSk7CisJCX0KKwl9CisKKwkvKiBFbmZvcmNlIGNob2ljZSBvZiBpbmRleC4gKi8K KwlpZiAoc2Nhbl9lbnRyeSAhPSBOVUxMICYmICFzY2FuX3R5cGVfY29uZmxpY3QgJiYKKwkJKHNj YW5fZW50cnktPnRhZyA9PSBQR1BBX1RBR19JTkRFWF9TQ0FOIHx8CisJCSBzY2FuX2VudHJ5LT50 YWcgPT0gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOKSkKKwl7CisJCXBncGFfaW5kZXhfdGFyZ2V0 ICppdGFyZ2V0ID0gc2Nhbl9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0OworCQlJbmRleE9wdEluZm8g Km1hdGNoZWRfaW5kZXggPSBOVUxMOworCisJCWZvcmVhY2hfbm9kZShJbmRleE9wdEluZm8sIGlu ZGV4LCByZWwtPmluZGV4bGlzdCkKKwkJeworCQkJY2hhcgkgICAqcmVsbmFtZSA9IGdldF9yZWxf bmFtZShpbmRleC0+aW5kZXhvaWQpOworCQkJT2lkCQkJbnNwb2lkID0gZ2V0X3JlbF9uYW1lc3Bh Y2UoaW5kZXgtPmluZGV4b2lkKTsKKwkJCWNoYXIJICAgKnJlbG5hbWVzcGFjZSA9IGdldF9uYW1l c3BhY2VfbmFtZShuc3BvaWQpOworCisJCQlpZiAoc3RyY21wKGl0YXJnZXQtPmluZG5hbWUsIHJl bG5hbWUpID09IDAgJiYKKwkJCQkoaXRhcmdldC0+aW5kbmFtZXNwYWNlID09IE5VTEwgfHwKKwkJ CQkgc3RyY21wKGl0YXJnZXQtPmluZG5hbWVzcGFjZSwgcmVsbmFtZXNwYWNlKSA9PSAwKSkKKwkJ CXsKKwkJCQltYXRjaGVkX2luZGV4ID0gaW5kZXg7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwor CQlpZiAobWF0Y2hlZF9pbmRleCA9PSBOVUxMKQorCQl7CisJCQkvKiBEb24ndCBmb3JjZSB0aGUg c2NhbiB0eXBlIGlmIHRoZSBpbmRleCBkb2Vzbid0IGV4aXN0LiAqLworCQkJc2Nhbl90eXBlID0g MDsKKworCQkJLyogTWFyayBhZHZpY2UgYXMgaW5hcHBsaWNhYmxlLiAqLworCQkJcGdwYV90cm92 ZV9zZXRfZmxhZ3Moc2Nhbl9lbnRyaWVzLCBzY2FuX3R5cGVfaW5kZXhlcywKKwkJCQkJCQkJIFBH UEFfVEVfSU5BUFBMSUNBQkxFKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIFJldGFpbiB0aGlz IGluZGV4IGFuZCBkaXNjYXJkIHRoZSByZXN0LiAqLworCQkJcmVsLT5pbmRleGxpc3QgPSBsaXN0 X21ha2UxKG1hdGNoZWRfaW5kZXgpOworCQl9CisJfQorCisJLyoKKwkgKiBNYXJrIGFsbCB0aGUg c2NhbiBtZXRob2QgZW50cmllcyBhcyBmdWxseSBtYXRjaGVkOyBhbmQgaWYgdGhleSBzcGVjaWZ5 CisJICogZGlmZmVyZW50IHRoaW5ncywgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4KKwkg Ki8KKwlmbGFncyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTCB8IFBHUEFfVEVfTUFUQ0hfRlVMTDsK KwlpZiAoc2Nhbl90eXBlX2NvbmZsaWN0KQorCQlmbGFncyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5H OworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHNjYW5fZW50cmllcywgc2Nhbl90eXBlX2luZGV4ZXMs IGZsYWdzKTsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhyZWxfZW50cmllcywgc2Nhbl90eXBlX3Jl bF9pbmRleGVzLCBmbGFncyk7CisKKwkvKgorCSAqIE1hcmsgZXZlcnkgR2F0aGVyLXJlbGF0ZWQg cGllY2Ugb2YgYWR2aWNlIGFzIHBhcnRpYWxseSBtYXRjaGVkLiBNYXJrCisJICogdGhlIG9uZXMg dGhhdCBpbmNsdWRlZCB0aGlzIHJlbGF0aW9uIGFzIGEgdGFyZ2V0IGJ5IGl0c2VsZiBhcyBmdWxs eQorCSAqIG1hdGNoZWQuIElmIHRoZXJlIHdhcyBhIGNvbmZsaWN0LCBtYXJrIHRoZW0gYWxsIGFz IGNvbmZsaWN0aW5nLgorCSAqLworCWZsYWdzID0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCWlm IChnYXRoZXJfY29uZmxpY3QpCisJCWZsYWdzIHw9IFBHUEFfVEVfQ09ORkxJQ1RJTkc7CisJcGdw YV90cm92ZV9zZXRfZmxhZ3MocmVsX2VudHJpZXMsIGdhdGhlcl9wYXJ0aWFsX21hdGNoLCBmbGFn cyk7CisJZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCXBncGFfdHJvdmVfc2V0X2ZsYWdz KHJlbF9lbnRyaWVzLCBnYXRoZXJfZnVsbF9tYXRjaCwgZmxhZ3MpOworCisJLyogSWYgdGhlcmUg aXMgYSBub24tY29uZmxpY3Rpbmcgc2NhbiBzcGVjaWZpY2F0aW9uLCBlbmZvcmNlIGl0LiAqLwor CWlmIChzY2FuX3R5cGUgIT0gMCAmJiAhc2Nhbl90eXBlX2NvbmZsaWN0KQorCXsKKwkJcmVsLT5w Z3NfbWFzayAmPQorCQkJfihQR1NfU0NBTl9BTlkgfCBQR1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQ UEVORCB8CisJCQkgIFBHU19DT05TSURFUl9JTkRFWE9OTFkpOworCQlyZWwtPnBnc19tYXNrIHw9 IHNjYW5fdHlwZTsKKwl9CisKKwkvKiBJZiB0aGVyZSBpcyBhIG5vbi1jb25mbGljdGluZyBnYXRo ZXIgc3BlY2lmaWNhdGlvbiwgZW5mb3JjZSBpdC4gKi8KKwlpZiAoZ2F0aGVyX21hc2sgIT0gMCAm JiAhZ2F0aGVyX2NvbmZsaWN0KQorCXsKKwkJcmVsLT5wZ3NfbWFzayAmPQorCQkJfihQR1NfR0FU SEVSIHwgUEdTX0dBVEhFUl9NRVJHRSB8IFBHU19DT05TSURFUl9OT05QQVJUSUFMKTsKKwkJcmVs LT5wZ3NfbWFzayB8PSBnYXRoZXJfbWFzazsKKwl9Cit9CisKKy8qCisgKiBBZGQgZmVlZGJhY2sg ZW50cmllcyB0byBmb3Igb25lIHRyb3ZlIHNsaWNlIHRvIHRoZSBwcm92aWRlZCBsaXN0IGFuZAor ICogcmV0dXJuIHRoZSByZXN1bHRpbmcgbGlzdC4KKyAqCisgKiBGZWVkYmFjayBlbnRyaWVzIGFy ZSBnZW5lcmF0ZWQgZnJvbSB0aGUgdHJvdmUgZW50cnkncyBmbGFncy4gSXQncyBhc3N1bWVkCisg KiB0aGF0IHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgc2V0IGFsbCByZWxldmFudCBmbGFncyB3aXRo IHRoZSBleGNlcHRpb24gb2YKKyAqIFBHUEFfVEVfRkFJTEVELiBXZSBzZXQgdGhhdCBmbGFnIGhl cmUgaWYgYXBwcm9wcmlhdGUuCisgKi8KK3N0YXRpYyBMaXN0ICoKK3BncGFfcGxhbm5lcl9hcHBl bmRfZmVlZGJhY2soTGlzdCAqbGlzdCwgcGdwYV90cm92ZSAqdHJvdmUsCisJCQkJCQkJIHBncGFf dHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVu dGlmaWVycywKKwkJCQkJCQkgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIpCit7CisJ cGdwYV90cm92ZV9lbnRyeSAqZW50cmllczsKKwlpbnQJCQluZW50cmllczsKKwlTdHJpbmdJbmZv RGF0YSBidWY7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlwZ3BhX3Ryb3ZlX2xvb2t1cF9h bGwodHJvdmUsIHR5cGUsICZlbnRyaWVzLCAmbmVudHJpZXMpOworCWZvciAoaW50IGkgPSAwOyBp IDwgbmVudHJpZXM7ICsraSkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJmVudHJp ZXNbaV07CisJCURlZkVsZW0gICAgKml0ZW07CisKKwkJLyoKKwkJICogSWYgdGhpcyBlbnRyeSB3 YXMgZnVsbHkgbWF0Y2hlZCwgY2hlY2sgd2hldGhlciBnZW5lcmF0aW5nIGFkdmljZQorCQkgKiBm cm9tIHRoaXMgcGxhbiB3b3VsZCBwcm9kdWNlIHN1Y2ggYW4gZW50cnkuIElmIG5vdCwgbGFiZWwg dGhlIGVudHJ5CisJCSAqIGFzIGZhaWxlZC4KKwkJICovCisJCWlmICgoZW50cnktPmZsYWdzICYg UEdQQV9URV9NQVRDSF9GVUxMKSAhPSAwICYmCisJCQkhcGdwYV93YWxrZXJfd291bGRfYWR2aXNl KHdhbGtlciwgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkgIGVudHJ5LT50YWcsIGVudHJ5LT50 YXJnZXQpKQorCQkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfRkFJTEVEOworCisJCWl0ZW0gPSBt YWtlRGVmRWxlbShwZ3BhX2NzdHJpbmdfdHJvdmVfZW50cnkoZW50cnkpLAorCQkJCQkJICAgKE5v ZGUgKikgbWFrZUludGVnZXIoZW50cnktPmZsYWdzKSwgLTEpOworCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBpdGVtKTsKKwl9CisKKwlyZXR1cm4gbGlzdDsKK30KKworI2lmZGVmIFVTRV9BU1NFUlRf Q0hFQ0tJTkcKKworLyoKKyAqIEZhc3QgaGFzaCBmdW5jdGlvbiBmb3IgYSBrZXkgY29uc2lzdGlu ZyBvZiBhbiBSVEkgYW5kIHBsYW4gbmFtZS4KKyAqLworc3RhdGljIHVpbnQzMgorcGdwYV9yaV9j aGVja2VyX2hhc2hfa2V5KHBncGFfcmlfY2hlY2tlcl9rZXkga2V5KQoreworCWZhc3RoYXNoX3N0 YXRlIGhzOworCWludAkJCXNwX2xlbjsKKworCWZhc3RoYXNoX2luaXQoJmhzLCAwKTsKKworCWhz LmFjY3VtID0ga2V5LnJ0aTsKKwlmYXN0aGFzaF9jb21iaW5lKCZocyk7CisKKwkvKiBwbGFuX25h bWUgY2FuIGJlIE5VTEwgKi8KKwlpZiAoa2V5LnBsYW5fbmFtZSA9PSBOVUxMKQorCQlzcF9sZW4g PSAwOworCWVsc2UKKwkJc3BfbGVuID0gZmFzdGhhc2hfYWNjdW1fY3N0cmluZygmaHMsIGtleS5w bGFuX25hbWUpOworCisJLyogaGFzaGZuX3Vuc3RhYmxlLmggcmVjb21tZW5kcyB1c2luZyBzdHJp bmcgbGVuZ3RoIGFzIHR3ZWFrICovCisJcmV0dXJuIGZhc3RoYXNoX2ZpbmFsMzIoJmhzLCBzcF9s ZW4pOworfQorCisjZW5kaWYKKworLyoKKyAqIFNhdmUgdGhlIHJhbmdlIHRhYmxlIGlkZW50aWZp ZXIgZm9yIG9uZSByZWxhdGlvbiBmb3IgZnV0dXJlIGNyb3NzLWNoZWNraW5nLgorICovCitzdGF0 aWMgdm9pZAorcGdwYV9yaV9jaGVja2VyX3NhdmUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsIFBs YW5uZXJJbmZvICpyb290LAorCQkJCQkgUmVsT3B0SW5mbyAqcmVsKQoreworI2lmZGVmIFVTRV9B U1NFUlRfQ0hFQ0tJTkcKKwlwZ3BhX3JpX2NoZWNrZXJfa2V5IGtleTsKKwlwZ3BhX3JpX2NoZWNr ZXIgKmNoZWNrOworCXBncGFfaWRlbnRpZmllciByaWQ7CisJY29uc3QgY2hhciAqcmlkX3N0cmlu ZzsKKwlib29sCQlmb3VuZDsKKworCWtleS5ydGkgPSBibXNfc2luZ2xldG9uX21lbWJlcihyZWwt PnJlbGlkcyk7CisJa2V5LnBsYW5fbmFtZSA9IHJvb3QtPnBsYW5fbmFtZTsKKwlwZ3BhX2NvbXB1 dGVfaWRlbnRpZmllcl9ieV9ydGkocm9vdCwga2V5LnJ0aSwgJnJpZCk7CisJcmlkX3N0cmluZyA9 IHBncGFfaWRlbnRpZmllcl9zdHJpbmcoJnJpZCk7CisJY2hlY2sgPSBwZ3BhX3JpX2NoZWNrX2lu c2VydChwcHMtPnJpX2NoZWNrX2hhc2gsIGtleSwgJmZvdW5kKTsKKwlBc3NlcnQoIWZvdW5kIHx8 IHN0cmNtcChjaGVjay0+cmlkX3N0cmluZywgcmlkX3N0cmluZykgPT0gMCk7CisJY2hlY2stPnJp ZF9zdHJpbmcgPSByaWRfc3RyaW5nOworI2VuZGlmCit9CisKKy8qCisgKiBWYWxpZGF0ZSB0aGF0 IHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVycyB3ZSB3ZXJlIGFibGUgdG8gZ2VuZXJhdGUgZHVy aW5nCisgKiBwbGFubmluZyBtYXRjaCB0aGUgb25lcyB3ZSBnZW5lcmF0ZWQgZnJvbSB0aGUgZmlu YWwgcGxhbi4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcmlfY2hlY2tlcl92YWxpZGF0ZShwZ3Bh X3BsYW5uZXJfc3RhdGUgKnBwcywgUGxhbm5lZFN0bXQgKnBzdG10KQoreworI2lmZGVmIFVTRV9B U1NFUlRfQ0hFQ0tJTkcKKwlwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzOworCXBncGFf cmlfY2hlY2tfaXRlcmF0b3IgaXQ7CisJcGdwYV9yaV9jaGVja2VyICpjaGVjazsKKworCS8qIENy ZWF0ZSBpZGVudGlmaWVycyBmcm9tIHRoZSBwbGFubmVkIHN0YXRlbWVudC4gKi8KKwlydF9pZGVu dGlmaWVycyA9IHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQocHN0bXQp OworCisJLyogSXRlcmF0ZSBvdmVyIGlkZW50aWZpZXJzIGNyZWF0ZWQgZHVyaW5nIHBsYW5uaW5n LCBzbyB3ZSBjYW4gY29tcGFyZS4gKi8KKwlwZ3BhX3JpX2NoZWNrX3N0YXJ0X2l0ZXJhdGUocHBz LT5yaV9jaGVja19oYXNoLCAmaXQpOworCXdoaWxlICgoY2hlY2sgPSBwZ3BhX3JpX2NoZWNrX2l0 ZXJhdGUocHBzLT5yaV9jaGVja19oYXNoLCAmaXQpKSAhPSBOVUxMKQorCXsKKwkJaW50CQkJcnRv ZmZzZXQgPSAwOworCQljb25zdCBjaGFyICpyaWRfc3RyaW5nOworCQlJbmRleAkJZmxhdF9ydGk7 CisKKwkJLyoKKwkJICogSWYgdGhlcmUncyBubyBwbGFuIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRo aXMgZW50cnksIHRoZW4gdGhlCisJCSAqIHJ0b2Zmc2V0IGlzIDAuIE90aGVyd2lzZSwgd2UgY2Fu IHNlYXJjaCB0aGUgU3ViUGxhblJUSW5mbyBsaXN0IHRvCisJCSAqIGZpbmQgdGhlIHJ0b2Zmc2V0 LgorCQkgKi8KKwkJaWYgKGNoZWNrLT5rZXkucGxhbl9uYW1lICE9IE5VTEwpCisJCXsKKwkJCWZv cmVhY2hfbm9kZShTdWJQbGFuUlRJbmZvLCBydGluZm8sIHBzdG10LT5zdWJydGluZm9zKQorCQkJ eworCQkJCS8qCisJCQkJICogSWYgcnRpbmZvLT5kdW1teSBpcyBzZXQsIHRoZW4gdGhlIHN1YnF1 ZXJ5J3MgcmFuZ2UgdGFibGUKKwkJCQkgKiB3aWxsIG9ubHkgaGF2ZSBiZWVuIHBhcnRpYWxseSBj b3BpZWQgdG8gdGhlIGZpbmFsIHJhbmdlCisJCQkJICogdGFibGUuIFNwZWNpZmljYWxseSwgb25s eSBSVEVfUkVMQVRJT04gZW50cmllcyBhbmQKKwkJCQkgKiBSVEVfU1VCUVVFUlkgZW50cmllcyB0 aGF0IHdlcmUgb25jZSBSVEVfUkVMQVRJT04gZW50cmllcworCQkJCSAqIHdpbGwgYmUgY29waWVk LCBhcyBwZXIgYWRkX3J0ZXNfdG9fZmxhdF9ydGFibGUuIFRoZXJlZm9yZSwKKwkJCQkgKiB0aGVy ZSdzIG5vIGZpeGVkIHJ0b2Zmc2V0IHRoYXQgd2UgY2FuIGFwcGx5IHRvIHRoZSBSVElzCisJCQkJ ICogdXNlZCBkdXJpbmcgcGxhbm5pbmcgdG8gbG9jYXRlIHRoZSBjb3JyZXNwb25kaW5nIHJlbGF0 aW9ucworCQkJCSAqIGluIHRoZSBmaW5hbCBydGFibGUuCisJCQkJICoKKwkJCQkgKiBXaXRoIG1v cmUgY29tcGxleCBsb2dpYywgd2UgY291bGQgd29yayBhcm91bmQgdGhhdCBwcm9ibGVtCisJCQkJ ICogYnkgcmVtZW1iZXJpbmcgdGhlIHdob2xlIGNvbnRlbnRzIG9mIHRoZSBzdWJxdWVyeSdzIHJ0 YWJsZQorCQkJCSAqIGR1cmluZyBwbGFubmluZywgZGV0ZXJtaW5pbmcgd2hpY2ggb2YgdGhvc2Ug d291bGQgaGF2ZSBiZWVuCisJCQkJICogY29waWVkIHRvIHRoZSBmaW5hbCBydGFibGUsIGFuZCBt YXRjaGluZyB0aGVtIHVwLiBCdXQgaXQKKwkJCQkgKiBkb2Vzbid0IHNlZW0gbGlrZSBhIHdvcnRo d2hpbGUgZW5kZWF2b3IgZm9yIHJpZ2h0IG5vdywKKwkJCQkgKiBiZWNhdXNlIFJUSXMgZnJvbSBz dWNoIHN1YnF1ZXJpZXMgd29uJ3QgYXBwZWFyIGluIHRoZSBwbGFuCisJCQkJICogdHJlZSBpdHNl bGYsIGp1c3QgaW4gdGhlIHJhbmdlIHRhYmxlLiBIZW5jZSwgd2UgY2FuIG5laXRoZXIKKwkJCQkg KiBnZW5lcmF0ZSBub3IgYWNjZXB0IGFkdmljZSBmb3IgdGhlbS4KKwkJCQkgKi8KKwkJCQlpZiAo c3RyY21wKGNoZWNrLT5rZXkucGxhbl9uYW1lLCBydGluZm8tPnBsYW5fbmFtZSkgPT0gMAorCQkJ CQkmJiAhcnRpbmZvLT5kdW1teSkKKwkJCQl7CisJCQkJCXJ0b2Zmc2V0ID0gcnRpbmZvLT5ydG9m ZnNldDsKKwkJCQkJQXNzZXJ0KHJ0b2Zmc2V0ID4gMCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ CX0KKworCQkJLyoKKwkJCSAqIEl0J3Mgbm90IGFuIGVycm9yIGlmIHdlIGRvbid0IGZpbmQgdGhl IHBsYW4gbmFtZTogdGhhdCBqdXN0CisJCQkgKiBtZWFucyB0aGF0IHdlIHBsYW5uZWQgYSBzdWJw bGFuIGJ5IHRoaXMgbmFtZSBidXQgaXQgZW5kZWQgdXAKKwkJCSAqIGJlaW5nIGEgZHVtbXkgc3Vi cGxhbiBhbmQgc28gd2Fzbid0IGluY2x1ZGVkIGluIHRoZSBmaW5hbCBwbGFuCisJCQkgKiB0cmVl LgorCQkJICovCisJCQlpZiAocnRvZmZzZXQgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJfQorCisJ CS8qCisJCSAqIGNoZWNrLT5rZXkucnRpIGlzIHRoZSBSVEkgdGhhdCB3ZSBzYXcgcHJpb3IgdG8g cmFuZ2UtdGFibGUKKwkJICogZmxhdHRlbmluZywgc28gd2UgbXVzdCBhZGQgdGhlIGFwcHJvcHJp YXRlIFJUIG9mZnNldCB0byBnZXQgdGhlCisJCSAqIGZpbmFsIFJUSS4KKwkJICovCisJCWZsYXRf cnRpID0gY2hlY2stPmtleS5ydGkgKyBydG9mZnNldDsKKwkJQXNzZXJ0KGZsYXRfcnRpIDw9IGxp c3RfbGVuZ3RoKHBzdG10LT5ydGFibGUpKTsKKworCQkvKiBBc3NlcnQgdGhhdCB0aGUgc3RyaW5n IHdlIGNvbXB1dGUgbm93IG1hdGNoZXMgdGhlIHByZXZpb3VzIG9uZS4gKi8KKwkJcmlkX3N0cmlu ZyA9IHBncGFfaWRlbnRpZmllcl9zdHJpbmcoJnJ0X2lkZW50aWZpZXJzW2ZsYXRfcnRpIC0gMV0p OworCQlBc3NlcnQoc3RyY21wKHJpZF9zdHJpbmcsIGNoZWNrLT5yaWRfc3RyaW5nKSA9PSAwKTsK Kwl9CisjZW5kaWYKK30KKworLyoKKyAqIENvbnZlcnQgYSBiaXRtYXBzZXQgdG8gYSBDIHN0cmlu ZyBvZiBjb21tYS1zZXBhcmF0ZWQgaW50ZWdlcnMuCisgKi8KK3N0YXRpYyBjaGFyICoKK3BncGFf Ym1zX3RvX2NzdHJpbmcoQml0bWFwc2V0ICpibXMpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOwor CWludAkJCXggPSAtMTsKKworCWlmIChibXNfaXNfZW1wdHkoYm1zKSkKKwkJcmV0dXJuICJub25l IjsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCXdoaWxlICgoeCA9IGJtc19uZXh0X21lbWJl cihibXMsIHgpKSA+PSAwKQorCXsKKwkJaWYgKGJ1Zi5sZW4gPiAwKQorCQkJYXBwZW5kU3RyaW5n SW5mbygmYnVmLCAiLCAlZCIsIHgpOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYs ICIlZCIsIHgpOworCX0KKworCXJldHVybiBidWYuZGF0YTsKK30KKworLyoKKyAqIENvbnZlcnQg YSBKb2luVHlwZSB0byBhIEMgc3RyaW5nLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitwZ3Bh X2pvaW50eXBlX3RvX2NzdHJpbmcoSm9pblR5cGUgam9pbnR5cGUpCit7CisJc3dpdGNoIChqb2lu dHlwZSkKKwl7CisJCWNhc2UgSk9JTl9JTk5FUjoKKwkJCXJldHVybiAiaW5uZXIiOworCQljYXNl IEpPSU5fTEVGVDoKKwkJCXJldHVybiAibGVmdCI7CisJCWNhc2UgSk9JTl9GVUxMOgorCQkJcmV0 dXJuICJmdWxsIjsKKwkJY2FzZSBKT0lOX1JJR0hUOgorCQkJcmV0dXJuICJyaWdodCI7CisJCWNh c2UgSk9JTl9TRU1JOgorCQkJcmV0dXJuICJzZW1pIjsKKwkJY2FzZSBKT0lOX0FOVEk6CisJCQly ZXR1cm4gImFudGkiOworCQljYXNlIEpPSU5fUklHSFRfU0VNSToKKwkJCXJldHVybiAicmlnaHQg c2VtaSI7CisJCWNhc2UgSk9JTl9SSUdIVF9BTlRJOgorCQkJcmV0dXJuICJyaWdodCBhbnRpIjsK KwkJY2FzZSBKT0lOX1VOSVFVRV9PVVRFUjoKKwkJCXJldHVybiAidW5pcXVlIG91dGVyIjsKKwkJ Y2FzZSBKT0lOX1VOSVFVRV9JTk5FUjoKKwkJCXJldHVybiAidW5pcXVlIGlubmVyIjsKKwl9CisJ cmV0dXJuICI/Pz8iOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3BsYW5uZXIuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdkNDBiOTEwYjAwCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaApAQCAtMCwwICsx LDE3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3BsYW5uZXIuaAorICoJICBw bGFubmVyIGhvb2tzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfcGxhbm5lci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQ QV9QTEFOTkVSX0gKKyNkZWZpbmUgUEdQQV9QTEFOTkVSX0gKKworZXh0ZXJuIHZvaWQgcGdwYV9w bGFubmVyX2luc3RhbGxfaG9va3Modm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9zY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjEwNzU0NGI2 ZmI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4u YwpAQCAtMCwwICsxLDMwNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9zY2Fu LmMKKyAqCSAgYW5hbHlzaXMgb2Ygc2NhbnMgaW4gUGxhbiB0cmVlcworICoKKyAqIENvcHlyaWdo dCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYworICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfc2Nh bi5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wYXJzZW5v ZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorCitzdGF0aWMgcGdwYV9zY2Fu ICpwZ3BhX21ha2Vfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAq cGxhbiwKKwkJCQkJCQkJIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJIEJp dG1hcHNldCAqcmVsaWRzLAorCQkJCQkJCQkgYm9vbCBuZWVkc19ub19nYXRoZXIpOworCisKK3N0 YXRpYyBSVEVLaW5kIHVuaXF1ZV9ub25qb2luX3J0ZWtpbmQoQml0bWFwc2V0ICpyZWxpZHMsIExp c3QgKnJ0YWJsZSk7CisKKy8qCisgKiBCdWlsZCBhIHBncGFfc2NhbiBvYmplY3QgZm9yIGEgUGxh biBub2RlIGFuZCB1cGRhdGUgdGhlIHBsYW4gd2Fsa2VyCisgKiBjb250ZXh0IGFzIGFwcG9wcmlh dGUuICBJZiB0aGlzIGlzIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBzY2FuLCBhbHNvCisgKiBi dWlsZCBwZ3BhX3NjYW4gZm9yIGFueSBzY2FucyB0aGF0IHdlcmUgY29uc29saWRhdGVkIGludG8g dGhpcyBvbmUgYnkKKyAqIEFwcGVuZC9NZXJnZUFwcGVuZCBwdWxsLXVwLgorICoKKyAqIElmIHRo ZXJlIGlzIGF0IGxlYXN0IG9uZSBFbGlkZWROb2RlIGZvciB0aGlzIHBsYW4gbm9kZSwgcGFzcyB0 aGUgdXBwZXJtb3N0CisgKiBvbmUgYXMgZWxpZGVkX25vZGUsIGVsc2UgcGFzcyBOVUxMLgorICoK KyAqIFNldCB0aGUgJ2JlbmVhdGhfYW55X2dhdGhlcicgbm9kZSBpZiB3ZSBhcmUgdW5kZXJuZWF0 aCBhIEdhdGhlciBvcgorICogR2F0aGVyIE1lcmdlIG5vZGUuCisgKgorICogU2V0IHRoZSAnd2l0 aGluX2pvaW5fcHJvYmxlbScgZmxhZyBpZiB3ZSdyZSBpbnNpZGUgb2YgYSBqb2luIHByb2JsZW0g YW5kCisgKiBub3Qgb3RoZXJ3aXNlLgorICovCitwZ3BhX3NjYW4gKgorcGdwYV9idWlsZF9zY2Fu KHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCUVsaWRl ZE5vZGUgKmVsaWRlZF9ub2RlLAorCQkJCWJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyLCBib29sIHdp dGhpbl9qb2luX3Byb2JsZW0pCit7CisJcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5ID0gUEdQ QV9TQ0FOX09SRElOQVJZOworCUJpdG1hcHNldCAgKnJlbGlkcyA9IE5VTEw7CisJaW50CQkJcnRp ID0gLTE7CisJYm9vbAkJbmVlZHNfbm9fZ2F0aGVyID0gIWJlbmVhdGhfYW55X2dhdGhlcjsKKwlM aXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IE5JTDsKKworCWlmIChlbGlkZWRfbm9k ZSAhPSBOVUxMKQorCXsKKwkJTm9kZVRhZwkJZWxpZGVkX3R5cGUgPSBlbGlkZWRfbm9kZS0+ZWxp ZGVkX3R5cGU7CisKKwkJLyoKKwkJICogSWYgc2V0cmVmcyBwcm9jZXNzaW5nIGVsaWRlZCBhbiBB cHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSB0aGF0IGhhZAorCQkgKiBvbmx5IG9uZSBzdXJ2aXZp bmcgY2hpbGQsIGl0IG1pZ2h0IGJlIGEgcGFydGl0aW9ud2lzZSBvcGVyYXRpb24sCisJCSAqIGJ1 dCB0aGVuIHRoaXMgaXMgZWl0aGVyIGEgc2V0b3Agb3ZlciBzdWJxdWVyaWVzLCBvciBhIHBhcnRp dGlvbndpc2UKKwkJICogb3BlcmF0aW9uICh3aGljaCBtaWdodCBiZSBhIHNjYW4gb3IgYSBqb2lu IGluIHJlYWxpdHksIGJ1dCBoZXJlIHdlCisJCSAqIGRvbid0IGNhcmUgYWJvdXQgdGhlIGRpc3Rp bmN0aW9uIGFuZCBjb25zaWRlciBpdCBzaW1wbHkgYSBzY2FuKS4KKwkJICoKKwkJICogQSBzZXRv cCBvdmVyIHN1YnF1ZXJpZXMsIG9yIGEgdHJpdmlhbCBTdWJRdWVyeVNjYW4gdGhhdCB3YXMgZWxp ZGVkLAorCQkgKiBpcyBhbiAib3JkaW5hcnkiIHNjYW4gaS5lLiBvbmUgZm9yIHdoaWNoIHdlIG5l ZWQgdG8gZ2VuZXJhdGUgYWR2aWNlCisJCSAqIGJlY2F1c2UgdGhlIHBsYW5uZXIgaGFzIG5vdCBt YWRlIGFueSBtZWFuaW5nZnVsIGNob2ljZS4KKwkJICovCisJCXJlbGlkcyA9IGVsaWRlZF9ub2Rl LT5yZWxpZHM7CisJCWlmICgoZWxpZGVkX3R5cGUgPT0gVF9BcHBlbmQgfHwgZWxpZGVkX3R5cGUg PT0gVF9NZXJnZUFwcGVuZCkgJiYKKwkJCXVuaXF1ZV9ub25qb2luX3J0ZWtpbmQocmVsaWRzLAor CQkJCQkJCQkgICB3YWxrZXItPnBzdG10LT5ydGFibGUpID09IFJURV9SRUxBVElPTikKKwkJCXN0 cmF0ZWd5ID0gUEdQQV9TQ0FOX1BBUlRJVElPTldJU0U7CisJCWVsc2UKKwkJCXN0cmF0ZWd5ID0g UEdQQV9TQ0FOX09SRElOQVJZOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgYW4gZWxpZGVkIEFw cGVuZCBvciBNZXJnZUFwcGVuZCBub2RlLCB3ZSBkb24ndCBuZWVkIHRvCisJCSAqIGVtaXQgTk9f R0FUSEVSKCkgYmVjYXVzZSB3ZSdsbCBhbHNvIGVtaXQgaXQgZm9yIHRoZSB1bmRlcmx5aW5nCisJ CSAqIHNjYW4sIHdoaWNoIGlzIGdvb2QgZW5vdWdoLgorCQkgKgorCQkgKiBJZiBpdCdzIGFuIGVs aWRlZCBTdWJxdWVyeVNjYW4sIHRoZSBzYW1lIGFyZ3VtZW50IGlzIGxpa2VseSB0bworCQkgKiBh cHBseSwgYmVjYXVzZSB0aGUgc3VicXVlcnkgcHJvYmFibHkgY29udGFpbnMgcmVmZXJlbmNlcyB0 byB0YWJsZXMsCisJCSAqIGFuZCBpZiBpdCBkb2Vzbid0LCB0aGVuIHBsYW5uZXIgaXNuJ3QgbGlr ZWx5IHRvIHdhbnQgdG8gZG8gaXQgaW4KKwkJICogcGFyYWxsZWwgYW55d2F5LiBCdXQgYWxzbywg d2UgY2FuJ3QgaW1wbGVtZW50IE5PX0dBVEhFUigpIGFkdmljZQorCQkgKiBmb3IgYSBub24tcmVs YXRpb24gUlRFS2luZCwgYmVjYXVzZSBnZXRfcmVsYXRpb25faW5mbygpIGlzbid0CisJCSAqIGNh bGxlZCBpbiBzdWNoIGNhc2VzLiBUaGF0IHNob3VsZCBwcm9iYWJseSBiZSBmaXhlZCBhdCBzb21l IHBvaW50LAorCQkgKiBidXQgdW50aWwgdGhlbiB3ZSBzaG91bGRuJ3QgZW1pdCBpdC4KKwkJICov CisJCW5lZWRzX25vX2dhdGhlciA9IGZhbHNlOworCisJCS8qIEpvaW4gUlRJcyBjYW4gYmUgcHJl c2VudCwgYnV0IGFkdmljZSBuZXZlciByZWZlcnMgdG8gdGhlbS4gKi8KKwkJcmVsaWRzID0gcGdw YV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKHJlbGlkcywgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsK Kwl9CisJZWxzZSBpZiAoKHJ0aSA9IHBncGFfc2NhbnJlbGlkKHBsYW4pKSAhPSAwKQorCXsKKwkJ UmFuZ2VUYmxFbnRyeSAqcnRlOworCisJCXJlbGlkcyA9IGJtc19tYWtlX3NpbmdsZXRvbihydGkp OworCisJCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKKwkJeworCQkJY2FzZSBUX1NlcVNjYW46CisJ CQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fU0VROworCQkJCWJyZWFrOworCQkJY2FzZSBUX0JpdG1h cEhlYXBTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX0JJVE1BUF9IRUFQOworCQkJCWJy ZWFrOworCQkJY2FzZSBUX0luZGV4U2NhbjoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9JTkRF WDsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgorCQkJCXN0cmF0ZWd5ID0g UEdQQV9TQ0FOX0lOREVYX09OTFk7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfVGlkU2NhbjoKKwkJ CWNhc2UgVF9UaWRSYW5nZVNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fVElEOworCQkJ CWJyZWFrOworCQkJZGVmYXVsdDoKKworCQkJCS8qCisJCQkJICogVGhpcyBjYXNlIGluY2x1ZGVz IGEgRm9yZWlnblNjYW4gdGFyZ2V0aW5nIGEgc2luZ2xlCisJCQkJICogcmVsYXRpb247IG5vIG90 aGVyIHN0cmF0ZWd5IGlzIHBvc3NpYmxlIGluIHRoYXQgY2FzZSwgYnV0CisJCQkJICogc2VlIGJl bG93LCB3aGVyZSB0aGluZ3MgYXJlIGRpZmZlcmVudCBpbiBtdWx0aS1yZWxhdGlvbgorCQkJCSAq IGNhc2VzLgorCQkJCSAqLworCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCisJ CQkJLyoKKwkJCQkgKiBXZSBjYW4ndCBoYW5kbGUgTk9fR0FUSEVSKCkgZm9yIG5vbi1yZWxhdGlv biBSVEVzIGJlY2F1c2UKKwkJCQkgKiBnZXRfcmVsYXRpb25faW5mbyB3b24ndCBiZSBjYWxsZWQu CisJCQkJICovCisJCQkJcnRlID0gcnRfZmV0Y2gocnRpLCB3YWxrZXItPnBzdG10LT5ydGFibGUp OworCQkJCWlmIChydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJCQluZWVkc19ub19n YXRoZXIgPSBmYWxzZTsKKworCQkJCWJyZWFrOworCQl9CisJfQorCWVsc2UgaWYgKChyZWxpZHMg PSBwZ3BhX3JlbGlkcyhwbGFuKSkgIT0gTlVMTCkKKwl7CisJCXN3aXRjaCAobm9kZVRhZyhwbGFu KSkKKwkJeworCQkJY2FzZSBUX0ZvcmVpZ25TY2FuOgorCisJCQkJLyoKKwkJCQkgKiBJZiBtdWx0 aXBsZSByZWxhdGlvbnMgYXJlIGJlaW5nIHRhcmdldGVkIGJ5IGEgc2luZ2xlCisJCQkJICogZm9y ZWlnbiBzY2FuLCB0aGVuIHRoZSBmb3JlaWduIGpvaW4gaGFzIGJlZW4gcHVzaGVkIHRvIHRoZQor CQkJCSAqIHJlbW90ZSBzaWRlLCBhbmQgd2Ugd2FudCB0aGF0IHRvIGJlIHJlZmxlY3RlZCBpbiB0 aGUKKwkJCQkgKiBnZW5lcmF0ZWQgYWR2aWNlLgorCQkJCSAqLworCQkJCXN0cmF0ZWd5ID0gUEdQ QV9TQ0FOX0ZPUkVJR047CisJCQkJYnJlYWs7CisJCQljYXNlIFRfQXBwZW5kOgorCisJCQkJLyoK KwkJCQkgKiBBcHBlbmQgbm9kZXMgY2FuIHJlcHJlc2VudCBwYXJ0aXRpb253aXNlIHNjYW5zIG9m IGEgYQorCQkJCSAqIHJlbGF0aW9uLCBidXQgd2hlbiB0aGV5IGltcGxlbWVudCBhIHNldCBvcGVy YXRpb24sIHRoZXkgYXJlCisJCQkJICoganVzdCBvcmRpbmFyeSBzY2Fucy4KKwkJCQkgKi8KKwkJ CQlpZiAodW5pcXVlX25vbmpvaW5fcnRla2luZChyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJs ZSkKKwkJCQkJPT0gUlRFX1JFTEFUSU9OKQorCQkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9QQVJU SVRJT05XSVNFOworCQkJCWVsc2UKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7 CisKKwkJCQkvKiBOT19HQVRIRVIoKSBzaG91bGQgYmUgZW1pdHRlZCBmb3IgdW5kZXJseWluZyBy ZWxzIG9ubHkuICovCisJCQkJbmVlZHNfbm9fZ2F0aGVyID0gZmFsc2U7CisKKwkJCQkvKiBCZSBz dXJlIHRvIGFjY291bnQgZm9yIHB1bGxlZC11cCBzY2Fucy4gKi8KKwkJCQljaGlsZF9hcHBlbmRf cmVsaWRfc2V0cyA9CisJCQkJCSgoQXBwZW5kICopIHBsYW4pLT5jaGlsZF9hcHBlbmRfcmVsaWRf c2V0czsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCQkvKiBTb21lIGxv Z2ljIGhlcmUgYXMgZm9yIEFwcGVuZCwgYWJvdmUuICovCisJCQkJaWYgKHVuaXF1ZV9ub25qb2lu X3J0ZWtpbmQocmVsaWRzLCB3YWxrZXItPnBzdG10LT5ydGFibGUpCisJCQkJCT09IFJURV9SRUxB VElPTikKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRTsKKwkJCQllbHNl CisJCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCisJCQkJLyogTk9fR0FUSEVS KCkgc2hvdWxkIGJlIGVtaXR0ZWQgZm9yIHVuZGVybHlpbmcgcmVscyBvbmx5LiAqLworCQkJCW5l ZWRzX25vX2dhdGhlciA9IGZhbHNlOworCisJCQkJLyogQmUgc3VyZSB0byBhY2NvdW50IGZvciBw dWxsZWQtdXAgc2NhbnMuICovCisJCQkJY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCQko KE1lcmdlQXBwZW5kICopIHBsYW4pLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKKwkJCQlicmVh azsKKwkJCWRlZmF1bHQ6CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisKKwkJ CQkvKgorCQkJCSAqIFdlIGNhbid0IGhhbmRsZSBOT19HQVRIRVIoKSBmb3Igc2luZ2xlIG5vbi1y ZWxhdGlvbiBSVEVzCisJCQkJICogYmVjYXVzZSBnZXRfcmVsYXRpb25faW5mbyB3b24ndCBiZSBj YWxsZWQuCisJCQkJICovCisJCQkJaWYgKGJtc19tZW1iZXJzaGlwKHJlbGlkcykgPT0gQk1TX1NJ TkdMRVRPTikKKwkJCQl7CisJCQkJCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKworCQkJCQlydGUgPSBy dF9mZXRjaChibXNfc2luZ2xldG9uX21lbWJlcihyZWxpZHMpLAorCQkJCQkJCQkgICB3YWxrZXIt PnBzdG10LT5ydGFibGUpOworCQkJCQlpZiAocnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikK KwkJCQkJCW5lZWRzX25vX2dhdGhlciA9IGZhbHNlOworCQkJCX0KKworCQkJCWJyZWFrOworCQl9 CisKKworCQkvKiBKb2luIFJUSXMgY2FuIGJlIHByZXNlbnQsIGJ1dCBhZHZpY2UgbmV2ZXIgcmVm ZXJzIHRvIHRoZW0uICovCisJCXJlbGlkcyA9IHBncGFfZmlsdGVyX291dF9qb2luX3JlbGlkcyhy ZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJfQorCisJLyoKKwkgKiBJZiB0aGlzIGlz IGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBub2RlIGludG8gd2hpY2ggc3Vib3JkaW5hdGUgQXBw ZW5kCisJICogb3IgTWVyZ2VBcHBlbmQgcGF0aHMgd2VyZSBtZXJnZWQsIGVhY2ggb2YgdGhvc2Ug bWVyZ2VkIHBhdGhzIGlzCisJICogZWZmZWN0aXZlbHkgYW5vdGhlciBzY2FuIGZvciB3aGljaCB3 ZSBuZWVkIHRvIGFjY291bnQuCisJICovCisJZm9yZWFjaF9ub2RlKEJpdG1hcHNldCwgY2hpbGRf cmVsaWRzLCBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cykKKwl7CisJCUJpdG1hcHNldCAgKmNoaWxk X25vbmpvaW5fcmVsaWRzOworCisJCWNoaWxkX25vbmpvaW5fcmVsaWRzID0KKwkJCXBncGFfZmls dGVyX291dF9qb2luX3JlbGlkcyhjaGlsZF9yZWxpZHMsCisJCQkJCQkJCQkJd2Fsa2VyLT5wc3Rt dC0+cnRhYmxlKTsKKwkJKHZvaWQpIHBncGFfbWFrZV9zY2FuKHdhbGtlciwgcGxhbiwgc3RyYXRl Z3ksCisJCQkJCQkJICBjaGlsZF9ub25qb2luX3JlbGlkcywgZmFsc2UpOworCX0KKworCS8qCisJ ICogSWYgdGhpcyBwbGFuIG5vZGUgaGFzIG5vIGFzc29jaWF0ZWQgUlRJcywgaXQncyBub3QgYSBz Y2FuLiBXaGVuIHRoZQorCSAqICd3aXRoaW5fam9pbl9wcm9ibGVtJyBmbGFnIGlzIHNldCwgdGhh dCdzIHVuZXhwZWN0ZWQsIHNvIHRocm93IGFuCisJICogZXJyb3IsIGVsc2UgcmV0dXJuIHF1aWV0 bHkuCisJICovCisJaWYgKHJlbGlkcyA9PSBOVUxMKQorCXsKKwkJaWYgKHdpdGhpbl9qb2luX3By b2JsZW0pCisJCQllbG9nKEVSUk9SLCAicGxhbiBub2RlIGhhcyBubyBSVElzOiAlZCIsIChpbnQp IG5vZGVUYWcocGxhbikpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcGdwYV9tYWtl X3NjYW4od2Fsa2VyLCBwbGFuLCBzdHJhdGVneSwgcmVsaWRzLCBuZWVkc19ub19nYXRoZXIpOwor fQorCisvKgorICogQ3JlYXRlIGEgc2luZ2xlIHBncGFfc2NhbiBvYmplY3QgYW5kIHVwZGF0ZSB0 aGUgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0LgorICovCitzdGF0aWMgcGdwYV9zY2FuICoKK3Bn cGFfbWFrZV9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFu LAorCQkJICAgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LCBCaXRtYXBzZXQgKnJlbGlkcywK KwkJCSAgIGJvb2wgbmVlZHNfbm9fZ2F0aGVyKQoreworCXBncGFfc2NhbiAgKnNjYW47CisKKwkv KiBDcmVhdGUgdGhlIHNjYW4gb2JqZWN0LiAqLworCXNjYW4gPSBwYWxsb2Moc2l6ZW9mKHBncGFf c2NhbikpOworCXNjYW4tPnBsYW4gPSBwbGFuOworCXNjYW4tPnN0cmF0ZWd5ID0gc3RyYXRlZ3k7 CisJc2Nhbi0+cmVsaWRzID0gcmVsaWRzOworCisJLyogQWRkIGl0IHRvIHRoZSBhcHByb3ByaWF0 ZSBsaXN0LiAqLworCXdhbGtlci0+c2NhbnNbc2Nhbi0+c3RyYXRlZ3ldID0gbGFwcGVuZCh3YWxr ZXItPnNjYW5zW3NjYW4tPnN0cmF0ZWd5XSwKKwkJCQkJCQkJCQkJc2Nhbik7CisKKwkvKiBDYWxs ZXIgdGVsbHMgdXMgd2hldGhlciBOT19HQVRIRVIoKSBhZHZpY2UgZm9yIHRoaXMgc2NhbiBpcyBu ZWVkZWQuICovCisJaWYgKG5lZWRzX25vX2dhdGhlcikKKwkJd2Fsa2VyLT5ub19nYXRoZXJfc2Nh bnMgPSBibXNfYWRkX21lbWJlcnMod2Fsa2VyLT5ub19nYXRoZXJfc2NhbnMsCisJCQkJCQkJCQkJ CQkgIHNjYW4tPnJlbGlkcyk7CisKKwlyZXR1cm4gc2NhbjsKK30KKworLyoKKyAqIERldGVybWlu ZSB0aGUgdW5pcXVlIHJ0ZWtpbmQgb2YgYSBzZXQgb2YgcmVsaWRzLgorICovCitzdGF0aWMgUlRF S2luZAordW5pcXVlX25vbmpvaW5fcnRla2luZChCaXRtYXBzZXQgKnJlbGlkcywgTGlzdCAqcnRh YmxlKQoreworCWludAkJCXJ0aSA9IC0xOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwlSVEVLaW5k CQlydGVraW5kOworCisJQXNzZXJ0KHJlbGlkcyAhPSBOVUxMKTsKKworCXdoaWxlICgocnRpID0g Ym1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkgPj0gMCkKKwl7CisJCVJhbmdlVGJsRW50cnkg KnJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcnRhYmxlKTsKKworCQlpZiAocnRlLT5ydGVraW5kID09IFJU RV9KT0lOKQorCQkJY29udGludWU7CisKKwkJaWYgKGZpcnN0KQorCQl7CisJCQlydGVraW5kID0g cnRlLT5ydGVraW5kOworCQkJZmlyc3QgPSBmYWxzZTsKKwkJfQorCQllbHNlIGlmIChydGVraW5k ICE9IHJ0ZS0+cnRla2luZCkKKwkJCWVsb2coRVJST1IsICJydGVraW5kIG1pc21hdGNoOiAlZCB2 cy4gJWQiLAorCQkJCSBydGVraW5kLCBydGUtPnJ0ZWtpbmQpOworCX0KKworCWlmIChmaXJzdCkK KwkJZWxvZyhFUlJPUiwgIm5vIG5vbi1SVEVfSk9JTiBSVEVzIGZvdW5kIik7CisKKwlyZXR1cm4g cnRla2luZDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2Fu LmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zYmI4NzI2ZmYxZQotLS0gL2Rldi9udWxsCisrKyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmgKQEAgLTAsMCArMSw4NSBAQAorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9zY2FuLmgKKyAqCSAgYW5hbHlzaXMgb2Ygc2NhbnMg aW4gUGxhbiB0cmVlcworICoKKyAqIEZvciBwdXJwb3NlcyBvZiB0aGlzIG1vZHVsZSwgYSAic2Nh biIgaW5jbHVkZXMgKDEpIHNpbmdsZSBwbGFuIG5vZGVzIHRoYXQKKyAqIHNjYW4gbXVsdGlwbGUg UlRJcywgc3VjaCBhcyBhIGRlZ2VuZXJhdGUgUmVzdWx0IG5vZGUgdGhhdCByZXBsYWNlcyB3aGF0 CisgKiB3b3VsZCBvdGhlcndpc2UgaGF2ZSBiZWVuIGEgam9pbiwgYW5kICgyKSBBcHBlbmQgYW5k IE1lcmdlQXBwZW5kIG5vZGVzCisgKiBpbXBsZW1lbnRpbmcgYSBwYXJ0aXRpb253aXNlIHNjYW4g b3IgYSBwYXJ0aXRpb253aXNlIGpvaW4uIFNhaWQKKyAqIGRpZmZlcmVudGx5LCBzY2FucyBhcmUg dGhlIGxlYXZlcyBvZiB0aGUgam9pbiB0cmVlIGZvciBhIHNpbmdsZSBqb2luCisgKiBwcm9ibGVt LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4u aAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfU0NBTl9ICisjZGVm aW5lIFBHUEFfU0NBTl9ICisKKyNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKwordHlwZWRl ZiBzdHJ1Y3QgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0IHBncGFfcGxhbl93YWxrZXJfY29udGV4 dDsKKworLyoKKyAqIFNjYW4gc3RyYXRlZ2llcy4KKyAqCisgKiBQR1BBX1NDQU5fT1JESU5BUlkg aXMgYW55IHNjYW4gc3RyYXRlZ3kgdGhhdCBpc24ndCBpbnRlcmVzdGluZyB0byB1cworICogYmVj YXVzZSB0aGVyZSBpcyBubyBtZWFuaW5nZnVsIHBsYW5uZXIgZGVjaXNpb24gaW52b2x2ZWQuIEZv ciBleGFtcGxlLAorICogdGhlIG9ubHkgd2F5IHRvIHNjYW4gYSBzdWJxdWVyeSBpcyBhIFN1YnF1 ZXJ5U2NhbiwgYW5kIHRoZSBvbmx5IHdheSB0bworICogc2NhbiBhIFZBTFVFUyBjb25zdHJ1Y3Qg aXMgYSBWYWx1ZXNTY2FuLiBXZSBuZWVkIG5vdCBjYXJlIGV4YWN0bHkgd2hpY2gKKyAqIHR5cGUg b2YgcGxhbm5lciBub2RlIHdhcyB1c2VkIGluIHN1Y2ggY2FzZXMsIGJlY2F1c2UgdGhlIHNhbWUg dGhpbmcgd2lsbAorICogaGFwcGVuIHdoZW4gcmVwbGFubmluZy4KKyAqCisgKiBQR1BBX1NDQU5f T1JESU5BUlkgYWxzbyBpbmNsdWRlcyBSZXN1bHQgbm9kZXMgdGhhdCBjb3JyZXNwb25kIHRvIHNj YW5zCisgKiBvciBldmVuIGpvaW5zIHRoYXQgYXJlIHByb3ZlZCBlbXB0eS4gV2UgZG9uJ3Qga25v dyB3aGV0aGVyIG9yIG5vdCB0aGUgc2NhbgorICogb3Igam9pbiB3aWxsIHN0aWxsIGJlIHByb3Zh Ymx5IGVtcHR5IGF0IHJlcGxhbm5pbmcgdGltZSwgYnV0IGlmIGl0IGlzLAorICogdGhlbiBubyBz Y2FuLXR5cGUgYWR2aWNlIGlzIG5lZWRlZCwgYW5kIGlmIGl0J3Mgbm90LCB3ZSBjYW4ndCByZWNv bW1lbmQKKyAqIGEgc2NhbiB0eXBlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHBsYW4uCisgKgorICog UEdQQV9TQ0FOX1BBUlRJVElPTldJU0UgYWxzbyBsdW1wcyB0b2dldGhlciBzY2FucyBhbmQgam9p bnM6IHRoaXMgY2FuCisgKiBiZSBlaXRoZXIgYSBwYXJ0aXRpb253aXNlIHNjYW4gb2YgYSBwYXJ0 aXRpb25lZCB0YWJsZSBvciBhIHBhcnRpdGlvbndpc2UKKyAqIGpvaW4gYmV0d2VlbiBzZXZlcmFs IHBhcnRpdGlvbmVkIHRhYmxlcy4gTm90ZSB0aGF0IGFsbCBkZWNpc2lvbnMgYWJvdXQKKyAqIHdo ZXRoZXIgb3Igbm90IHRvIHVzZSBwYXJ0aXRpb253aXNlIGpvaW4gYXJlIG1lYW5pbmdmdWw6IG5v IG1hdHRlciB3aGF0CisgKiB3ZSBkZWNpZGVkIHRoaXMgdGltZSwgd2UgY291bGQgZG8gbW9yZSBv ciBmZXdlciB0aGluZ3MgcGFydGl0aW9ud2lzZSB0aGUKKyAqIG5leHQgdGltZS4KKyAqCisgKiBQ R1BBX1NDQU5fRk9SRUlHTiBpcyBvbmx5IHVzZWQgd2hlbiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUg cmVsYXRpb24gaW52b2x2ZWQ7CisgKiBhIHNpbmdsZS10YWJsZSBmb3JlaWduIHNjYW4gaXMgY2xh c3NpZmllZCBhcyBvcmRpbmFyeSwgc2luY2UgdGhlcmUgaXMgbm8KKyAqIGRlY2lzaW9uIHRvIG1h a2UgaW4gdGhhdCBjYXNlLgorICoKKyAqIE90aGVyIHNjYW4gc3RyYXRlZ2llcyBtYXAgb25lLXRv LW9uZSB0byBwbGFuIG5vZGVzLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlQR1BBX1NDQU5fT1JE SU5BUlkgPSAwLAorCVBHUEFfU0NBTl9TRVEsCisJUEdQQV9TQ0FOX0JJVE1BUF9IRUFQLAorCVBH UEFfU0NBTl9GT1JFSUdOLAorCVBHUEFfU0NBTl9JTkRFWCwKKwlQR1BBX1NDQU5fSU5ERVhfT05M WSwKKwlQR1BBX1NDQU5fUEFSVElUSU9OV0lTRSwKKwlQR1BBX1NDQU5fVElECisJLyogdXBkYXRl IE5VTV9QR1BBX1NDQU5fU1RSQVRFR1kgaWYgeW91IGFkZCBhbnl0aGluZyBoZXJlICovCit9IHBn cGFfc2Nhbl9zdHJhdGVneTsKKworI2RlZmluZSBOVU1fUEdQQV9TQ0FOX1NUUkFURUdZCSgoaW50 KSBQR1BBX1NDQU5fVElEICsgMSkKKworLyoKKyAqIEFsbCBvZiB0aGUgZGV0YWlscyB3ZSBuZWVk IHJlZ2FyZGluZyBhIHNjYW4uCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfc2NhbgoreworCVBs YW4JICAgKnBsYW47CisJcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5OworCUJpdG1hcHNldCAg KnJlbGlkczsKK30gcGdwYV9zY2FuOworCitleHRlcm4gcGdwYV9zY2FuICpwZ3BhX2J1aWxkX3Nj YW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJCQkJ CSAgRWxpZGVkTm9kZSAqZWxpZGVkX25vZGUsCisJCQkJCQkJCSAgYm9vbCBiZW5lYXRoX2FueV9n YXRoZXIsCisJCQkJCQkJCSAgYm9vbCB3aXRoaW5fam9pbl9wcm9ibGVtKTsKKworI2VuZGlmCmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uYTg4NzczNWYzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sCkBAIC0wLDAgKzEsMjk3IEBACisldG9weworLyoK KyAqIFNjYW5uZXIgZm9yIHBsYW4gYWR2aWNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIw MjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubAorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIK KworI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJub2Rlcy9taXNjbm9kZXMu aCIKKyNpbmNsdWRlICJwYXJzZXIvc2NhbnN1cC5oIgorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIK KyNpbmNsdWRlICJwZ3BhX3BhcnNlci5oIgorCisvKgorICogRXh0cmEgZGF0YSB0aGF0IHdlIHBh c3MgYXJvdW5kIHdoZW4gZHVyaW5nIHNjYW5uaW5nLgorICoKKyAqICdsaXRidWYnIGlzIHVzZWQg dG8gaW1wbGVtZW50IHRoZSA8eGQ+IGV4Y2x1c2l2ZSBzdGF0ZSwgd2hpY2ggaGFuZGxlcworICog ZG91YmxlLXF1b3RlZCBpZGVudGlmaWVycy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV95eV9l eHRyYV90eXBlCit7CisJU3RyaW5nSW5mb0RhdGEJbGl0YnVmOworfSBwZ3BhX3l5X2V4dHJhX3R5 cGU7CisKK30KKworJXsKKy8qIExDT1ZfRVhDTF9TVEFSVCAqLworCisjZGVmaW5lIFlZX0RFQ0wg XAorCWV4dGVybiBpbnQgcGdwYV95eWxleCh1bmlvbiBZWVNUWVBFICp5eWx2YWxfcGFyYW0sIExp c3QgKipyZXN1bHQsIFwKKwkJCQkJCSAgY2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5f dCB5eXNjYW5uZXIpCisKKy8qIE5vIHJlYXNvbiB0byBjb25zdHJhaW4gYW1vdW50IG9mIGRhdGEg c2x1cnBlZCAqLworI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDE2Nzc3MjE2CisKKy8qIEF2b2lk IGV4aXQoKSBvbiBmYXRhbCBzY2FubmVyIGVycm9ycyAoYSBiaXQgdWdseSAtLSBzZWUgeXlfZmF0 YWxfZXJyb3IpICovCisjdW5kZWYgZnByaW50ZgorI2RlZmluZSBmcHJpbnRmKGZpbGUsIGZtdCwg bXNnKSAgZnByaW50Zl90b19lcmVwb3J0KGZtdCwgbXNnKQorCitzdGF0aWMgdm9pZAorZnByaW50 Zl90b19lcmVwb3J0KGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgY2hhciAqbXNnKQoreworCWVyZXBv cnQoRVJST1IsIChlcnJtc2dfaW50ZXJuYWwoIiVzIiwgbXNnKSkpOworfQorJX0KKworJW9wdGlv biByZWVudHJhbnQKKyVvcHRpb24gYmlzb24tYnJpZGdlCislb3B0aW9uIDhiaXQKKyVvcHRpb24g bmV2ZXItaW50ZXJhY3RpdmUKKyVvcHRpb24gbm9kZWZhdWx0Cislb3B0aW9uIG5vaW5wdXQKKyVv cHRpb24gbm91bnB1dAorJW9wdGlvbiBub3l5d3JhcAorJW9wdGlvbiBub3l5YWxsb2MKKyVvcHRp b24gbm95eXJlYWxsb2MKKyVvcHRpb24gbm95eWZyZWUKKyVvcHRpb24gd2FybgorJW9wdGlvbiBw cmVmaXg9InBncGFfeXkiCislb3B0aW9uIGV4dHJhLXR5cGU9InBncGFfeXlfZXh0cmFfdHlwZSAq IgorCisvKgorICogV2hhdCBmb2xsb3dzIGlzIGEgc2V2ZXJlbHkgc3RyaXBwZWQtZG93biB2ZXJz aW9uIG9mIHRoZSBjb3JlIHNjYW5uZXIuIFdlCisgKiBvbmx5IGNhcmUgYWJvdXQgcmVjb2duaXpp bmcgaWRlbnRpZmllcnMgd2l0aCBvciB3aXRob3V0IGlkZW50aWZpZXIgcXVvdGluZworICogKGku ZS4gZG91YmxlLXF1b3RpbmcpLCBkZWNpbWFsIGludGVnZXJzLCBhbmQgYSBzbWFsbCBoYW5kZnVs IG9mIG90aGVyCisgKiB0aGluZ3MuIEtlZXAgdGhlc2UgcnVsZXMgaW4gc3luYyB3aXRoIHNyYy9i YWNrZW5kL3BhcnNlci9zY2FuLmwuIEFzIGluIHRoYXQKKyAqIGZpbGUsIHdlIHVzZSBhbiBleGNs dXNpdmUgc3RhdGUgY2FsbGVkICd4YycgZm9yIEMtc3R5bGUgY29tbWVudHMsIGFuZCBhbgorICog ZXhjbHVzaXZlIHN0YXRlIGNhbGxlZCAneGQnIGZvciBkb3VibGUtcXVvdGVkIGlkZW50aWZpZXJz LgorICovCisleCB4YworJXggeGQKKworaWRlbnRfc3RhcnQJCVtBLVphLXpcMjAwLVwzNzdfXQor aWRlbnRfY29udAkJW0EtWmEtelwyMDAtXDM3N18wLTlcJF0KKworaWRlbnRpZmllcgkJe2lkZW50 X3N0YXJ0fXtpZGVudF9jb250fSoKKworZGVjZGlnaXQJCVswLTldCitkZWNpbnRlZ2VyCQl7ZGVj ZGlnaXR9KF8/e2RlY2RpZ2l0fSkqCisKK3NwYWNlCQkJWyBcdFxuXHJcZlx2XQord2hpdGVzcGFj ZQkJe3NwYWNlfSsKKworZHF1b3RlCQkJXCIKK3hkc3RhcnQJCQl7ZHF1b3RlfQoreGRzdG9wCQkJ e2RxdW90ZX0KK3hkZG91YmxlCQl7ZHF1b3RlfXtkcXVvdGV9Cit4ZGluc2lkZQkJW14iXSsKKwor eGNzdGFydAkJCVwvXCoKK3hjc3RvcAkJCVwqK1wvCit4Y2luc2lkZQkJW14qL10rCisKKyUlCisK K3t3aGl0ZXNwYWNlfQl7IC8qIGlnbm9yZSAqLyB9CisKK3tpZGVudGlmaWVyfQl7CisJCQkJCWNo YXIgICAqc3RyOworCQkJCQlib29sCWZhaWw7CisJCQkJCXBncGFfYWR2aWNlX3RhZ190eXBlCXRh ZzsKKworCQkJCQkvKgorCQkJCQkgKiBVbmxpa2UgdGhlIGNvcmUgc2Nhbm5lciwgd2UgZG9uJ3Qg dHJ1bmNhdGUgaWRlbnRpZmllcnMKKwkJCQkJICogaGVyZS4gVGhlcmUgaXMgbm8gb2J2aW91cyBy ZWFzb24gdG8gZG8gc28uCisJCQkJCSAqLworCQkJCQlzdHIgPSBkb3duY2FzZV9pZGVudGlmaWVy KHl5dGV4dCwgeXlsZW5nLCBmYWxzZSwgZmFsc2UpOworCQkJCQl5eWx2YWwtPnN0ciA9IHN0cjsK KworCQkJCQkvKgorCQkJCQkgKiBJZiBpdCdzIG5vdCBhIHRhZywganVzdCByZXR1cm4gVE9LX0lE RU5UOyBlbHNlLCByZXR1cm4KKwkJCQkJICogYSB0b2tlbiB0eXBlIGJhc2VkIG9uIGhvdyBmdXJ0 aGVyIHBhcnNpbmcgc2hvdWxkCisJCQkJCSAqIHByb2NlZWQuCisJCQkJCSAqLworCQkJCQl0YWcg PSBwZ3BhX3BhcnNlX2FkdmljZV90YWcoc3RyLCAmZmFpbCk7CisJCQkJCWlmIChmYWlsKQorCQkJ CQkJcmV0dXJuIFRPS19JREVOVDsKKwkJCQkJZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX0pPSU5f T1JERVIpCisJCQkJCQlyZXR1cm4gVE9LX1RBR19KT0lOX09SREVSOworCQkJCQllbHNlIGlmICh0 YWcgPT0gUEdQQV9UQUdfSU5ERVhfU0NBTiB8fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfSU5E RVhfT05MWV9TQ0FOKQorCQkJCQkJcmV0dXJuIFRPS19UQUdfSU5ERVg7CisJCQkJCWVsc2UgaWYg KHRhZyA9PSBQR1BBX1RBR19TRVFfU0NBTiB8fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfVElE X1NDQU4gfHwKKwkJCQkJCQkgdGFnID09IFBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU4gfHwKKwkJ CQkJCQkgdGFnID09IFBHUEFfVEFHX05PX0dBVEhFUikKKwkJCQkJCXJldHVybiBUT0tfVEFHX1NJ TVBMRTsKKwkJCQkJZWxzZQorCQkJCQkJcmV0dXJuIFRPS19UQUdfR0VORVJJQzsKKwkJCQl9CisK K3tkZWNpbnRlZ2VyfQl7CisJCQkJCWNoYXIgICAqZW5kcHRyOworCisJCQkJCWVycm5vID0gMDsK KwkJCQkJeXlsdmFsLT5pbnRlZ2VyID0gc3RydG9pbnQoeXl0ZXh0LCAmZW5kcHRyLCAxMCk7CisJ CQkJCWlmICgqZW5kcHRyICE9ICdcMCcgfHwgZXJybm8gPT0gRVJBTkdFKQorCQkJCQkJcGdwYV95 eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJCSAi aW50ZWdlciBvdXQgb2YgcmFuZ2UiKTsKKwkJCQkJcmV0dXJuIFRPS19JTlRFR0VSOworCQkJCX0K Kwore3hjc3RhcnR9CQl7CisJCQkJCUJFR0lOKHhjKTsKKwkJCQl9CisKK3t4ZHN0YXJ0fQkJewor CQkJCQlCRUdJTih4ZCk7CisJCQkJCXJlc2V0U3RyaW5nSW5mbygmeXlleHRyYS0+bGl0YnVmKTsK KwkJCQl9CisKKy4JCQkJeyByZXR1cm4geXl0ZXh0WzBdOyB9CisKKzx4Yz57eGNzdG9wfQl7CisJ CQkJCUJFR0lOKElOSVRJQUwpOworCQkJCX0KKworPHhjPnt4Y2luc2lkZX0JeworCQkJCQkvKiBk aXNjYXJkIG11bHRpcGxlIGNoYXJhY3RlcnMgd2l0aG91dCBzbGFzaCBvciBhc3RlcmlzayAqLwor CQkJCX0KKworPHhjPi4JCQl7CisJCQkJCS8qCisJCQkJCSAqIERpc2NhcmQgYW55IHNpbmdsZSBj aGFyYWN0ZXIuIGZsZXggcHJlZmVycyBsb25nZXIKKwkJCQkJICogbWF0Y2hlcywgc28gdGhpcyBy dWxlIHdpbGwgbmV2ZXIgYmUgcGlja2VkIHdoZW4gd2UgY291bGQKKwkJCQkJICogaGF2ZSBtYXRj aGVkIHhjc3RvcC4KKwkJCQkJICoKKwkJCQkJICogTkI6IEF0IHByZXNlbnQsIHdlIGRvbid0IGJv dGhlciB0byBzdXBwb3J0IG5lc3RlZAorCQkJCQkgKiBDLXN0eWxlIGNvbW1lbnRzIGhlcmUsIGJ1 dCB0aGlzIGxvZ2ljIGNvdWxkIGJlIGV4dGVuZGVkCisJCQkJCSAqIGlmIHRoYXQgcmVzdHJpY3Rp b24gcG9zZXMgYSBwcm9ibGVtLgorCQkJCQkgKi8KKwkJCQl9CisKKzx4Yz48PEVPRj4+CQl7CisJ CQkJCUJFR0lOKElOSVRJQUwpOworCQkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJv cl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCQkgInVudGVybWluYXRlZCBjb21tZW50Iik7CisJ CQkJfQorCis8eGQ+e3hkc3RvcH0JeworCQkJCQlCRUdJTihJTklUSUFMKTsKKwkJCQkJaWYgKHl5 ZXh0cmEtPmxpdGJ1Zi5sZW4gPT0gMCkKKwkJCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNl X2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJCQkgInplcm8tbGVuZ3RoIGRlbGltaXRl ZCBpZGVudGlmaWVyIik7CisJCQkJCXl5bHZhbC0+c3RyID0gcHN0cmR1cCh5eWV4dHJhLT5saXRi dWYuZGF0YSk7CisJCQkJCXJldHVybiBUT0tfSURFTlQ7CisJCQkJfQorCis8eGQ+e3hkZG91Ymxl fQl7CisJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZ5eWV4dHJhLT5saXRidWYsICciJyk7CisJ CQkJfQorCis8eGQ+e3hkaW5zaWRlfQl7CisJCQkJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oJnl5 ZXh0cmEtPmxpdGJ1ZiwgeXl0ZXh0LCB5eWxlbmcpOworCQkJCX0KKworPHhkPjw8RU9GPj4JCXsK KwkJCQkJQkVHSU4oSU5JVElBTCk7CisJCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vy cm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJCSAidW50ZXJtaW5hdGVkIHF1b3RlZCBpZGVu dGlmaWVyIik7CisJCQkJfQorCislJQorCisvKiBMQ09WX0VYQ0xfU1RPUCAqLworCisvKgorICog SGFuZGxlciBmb3IgZXJyb3JzIHdoaWxlIHNjYW5uaW5nIG9yIHBhcnNpbmcgYWR2aWNlLgorICoK KyAqIGJpc29uIHBhc3NlcyB0aGUgZXJyb3IgbWVzc2FnZSB0byB1cyB2aWEgJ21lc3NhZ2UnLCBh bmQgdGhlIGNvbnRleHQgaXMKKyAqIGF2YWlsYWJsZSB2aWEgdGhlICd5eXRleHQnIG1hY3JvLiBX ZSBhc3NlbWJsZSB0aG9zZSB2YWx1ZXMgaW50byBhIGZpbmFsCisgKiBlcnJvciB0ZXh0IGFuZCB0 aGVuIGFycmFuZ2UgdG8gcGFzcyBpdCBiYWNrIHRvIHRoZSBjYWxsZXIgb2YgcGdwYV95eXBhcnNl KCkKKyAqIGJ5IHN0b3JpbmcgaXQgaW50byAqcGFyc2VfZXJyb3JfbXNnX3AuCisgKi8KK3ZvaWQK K3BncGFfeXllcnJvcihMaXN0ICoqcmVzdWx0LCBjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3AsIHl5 c2Nhbl90IHl5c2Nhbm5lciwKKwkJCSBjb25zdCBjaGFyICptZXNzYWdlKQoreworCXN0cnVjdCB5 eWd1dHNfdCAqeXlnID0gKHN0cnVjdCB5eWd1dHNfdCAqKSB5eXNjYW5uZXI7CS8qIG5lZWRlZCBm b3IgeXl0ZXh0CisJCQkJCQkJCQkJCQkJCQkgKiBtYWNybyAqLworCisKKwkvKiByZXBvcnQgb25s eSB0aGUgZmlyc3QgZXJyb3IgaW4gYSBwYXJzZSBvcGVyYXRpb24gKi8KKwlpZiAoKnBhcnNlX2Vy cm9yX21zZ19wKQorCQlyZXR1cm47CisKKwlpZiAoeXl0ZXh0WzBdKQorCQkqcGFyc2VfZXJyb3Jf bXNnX3AgPSBwc3ByaW50ZigiJXMgYXQgb3IgbmVhciBcIiVzXCIiLCBtZXNzYWdlLCB5eXRleHQp OworCWVsc2UKKwkJKnBhcnNlX2Vycm9yX21zZ19wID0gcHNwcmludGYoIiVzIGF0IGVuZCBvZiBp bnB1dCIsIG1lc3NhZ2UpOworfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgYWR2aWNlIHNjYW5u ZXIuCisgKgorICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBwYXJzaW5nIGJlZ2lucy4K KyAqLwordm9pZAorcGdwYV9zY2FubmVyX2luaXQoY29uc3QgY2hhciAqc3RyLCB5eXNjYW5fdCAq eXlzY2FubmVycCkKK3sKKwl5eXNjYW5fdAl5eXNjYW5uZXI7CisJcGdwYV95eV9leHRyYV90eXBl CSp5eWV4dCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfeXlfZXh0cmFfdHlwZSk7CisKKwlpZiAoeXls ZXhfaW5pdCh5eXNjYW5uZXJwKSAhPSAwKQorCQllbG9nKEVSUk9SLCAieXlsZXhfaW5pdCgpIGZh aWxlZDogJW0iKTsKKworCXl5c2Nhbm5lciA9ICp5eXNjYW5uZXJwOworCisJaW5pdFN0cmluZ0lu Zm8oJnl5ZXh0LT5saXRidWYpOworCXBncGFfeXlzZXRfZXh0cmEoeXlleHQsIHl5c2Nhbm5lcik7 CisKKwl5eV9zY2FuX3N0cmluZyhzdHIsIHl5c2Nhbm5lcik7Cit9CisKKworLyoKKyAqIFNodXQg ZG93biB0aGUgYWR2aWNlIHNjYW5uZXIuCisgKgorICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGFm dGVyIHBhcnNpbmcgaXMgY29tcGxldGUuCisgKi8KK3ZvaWQKK3BncGFfc2Nhbm5lcl9maW5pc2go eXlzY2FuX3QgeXlzY2FubmVyKQoreworCXl5bGV4X2Rlc3Ryb3koeXlzY2FubmVyKTsKK30KKwor LyoKKyAqIEludGVyZmFjZSBmdW5jdGlvbnMgdG8gbWFrZSBmbGV4IHVzZSBwYWxsb2MoKSBpbnN0 ZWFkIG9mIG1hbGxvYygpLgorICogSXQnZCBiZSBiZXR0ZXIgdG8gbWFrZSB0aGVzZSBzdGF0aWMs IGJ1dCBmbGV4IGluc2lzdHMgb3RoZXJ3aXNlLgorICovCisKK3ZvaWQgKgoreXlhbGxvYyh5eV9z aXplX3Qgc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJldHVybiBwYWxsb2Moc2l6ZSk7 Cit9CisKK3ZvaWQgKgoreXlyZWFsbG9jKHZvaWQgKnB0ciwgeXlfc2l6ZV90IHNpemUsIHl5c2Nh bl90IHl5c2Nhbm5lcikKK3sKKwlpZiAocHRyKQorCQlyZXR1cm4gcmVwYWxsb2MocHRyLCBzaXpl KTsKKwllbHNlCisJCXJldHVybiBwYWxsb2Moc2l6ZSk7Cit9CisKK3ZvaWQKK3l5ZnJlZSh2b2lk ICpwdHIsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlpZiAocHRyKQorCQlwZnJlZShwdHIpOwor fQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uOWRiMTA3N2Q0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYwpAQCAtMCwwICsxLDQ5MiBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogcGdwYV90cm92ZS5jCisgKgkgIEFsbCBvZiB0aGUgYWR2aWNlIGdpdmVu IGZvciBhIHBhcnRpY3VsYXIgcXVlcnksIGFwcHJvcHJpYXRlbHkKKyAqICAgIG9yZ2FuaXplZCBm b3IgY29udmVuaWVudCBhY2Nlc3MuCisgKgorICogVGhpcyBuYW1lIGNvbWVzIGZyb20gdGhlIEVu Z2xpc2ggZXhwcmVzc2lvbiAidHJvdmUgb2YgYWR2aWNlIiwgd2hpY2gKKyAqIG1lYW5zIGEgY29s bGVjdGlvbiBvZiB3aXNkb20uIFRoaXMgc2xpZ2h0bHkgdW51c3VhbCB0ZXJtIGlzIGNob3NlbiB0 bworICogYXZvaWQgbmFtaW5nIGNvbmZ1c2lvbjsgZm9yIGV4YW1wbGUsICJjb2xsZWN0aW9uIG9m IGFkdmljZSIgd291bGQKKyAqIGludml0ZSBjb25mdXNpb24gd2l0aCBwZ3BhX2NvbGxlY3Rvci5j LiBOb3RlIHRoYXQsIHdoaWxlIHdlIGRvbid0IGtub3cKKyAqIHdoZXRoZXIgdGhlIHByb3ZpZGVk IGFkdmljZSBpcyBhY3R1YWxseSB3aXNlLCBpdCdzIG5vdCBvdXIgam9iIHRvCisgKiBxdWVzdGlv biB0aGUgdXNlcidzIGNob2ljZXMuCisgKgorICogVGhlIGdvYWwgb2YgdGhpcyBtb2R1bGUgaXMg dG8gbWFrZSBpdCBlYXN5IHRvIGxvY2F0ZSB0aGUgc3BlY2lmaWMKKyAqIGJpdHMgb2YgYWR2aWNl IHRoYXQgcGVydGFpbiB0byBhbnkgZ2l2ZW4gcGFydCBvZiBhIHF1ZXJ5LCBvciB0bworICogZGV0 ZXJtaW5lIHRoYXQgdGhlcmUgYXJlIG5vbmUuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIw MjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfdHJvdmUuaCIKKworI2lu Y2x1ZGUgImNvbW1vbi9oYXNoZm5fdW5zdGFibGUuaCIKKworLyoKKyAqIEFuIGFkdmljZSB0cm92 ZSBpcyBvcmdhbml6ZWQgaW50byBhIHNlcmllcyBvZiAic2xpY2VzIiwgZWFjaCBvZiB3aGljaAor ICogY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgb25lIHRvcGljIGUuZy4gc2NhbiBtZXRob2Rz LiBFYWNoIHNsaWNlIGNvbnNpc3RzCisgKiBvZiBhbiBhcnJheSBvZiB0cm92ZSBlbnRyaWVzIHBs dXMgYSBoYXNoIHRhYmxlIHRoYXQgd2UgY2FuIHVzZSB0byBkZXRlcm1pbmUKKyAqIHdoaWNoIG9u ZXMgYXJlIHJlbGV2YW50IHRvIGEgcGFydGljdWxhciBwYXJ0IG9mIHRoZSBxdWVyeS4KKyAqLwor dHlwZWRlZiBzdHJ1Y3QgcGdwYV90cm92ZV9zbGljZQoreworCXVuc2lnbmVkCW5hbGxvY2F0ZWQ7 CisJdW5zaWduZWQJbnVzZWQ7CisJcGdwYV90cm92ZV9lbnRyeSAqZW50cmllczsKKwlzdHJ1Y3Qg cGdwYV90cm92ZV9lbnRyeV9oYXNoICpoYXNoOworfSBwZ3BhX3Ryb3ZlX3NsaWNlOworCisvKgor ICogU2NhbiBhZHZpY2UgaXMgc3RvcmVkIGludG8gJ3NjYW4nOyBqb2luIGFkdmljZSBpcyBzdG9y ZWQgaW50byAnam9pbic7IGFuZAorICogYWR2aWNlIHRoYXQgY2FuIGFwcGx5IHRvIGJvdGggY2Fz ZXMgaXMgc3RvcmVkIGludG8gJ3JlbCcuIFRoaXMgbGV0cyBjYWxsZXJzCisgKiBhc2sganVzdCBm b3Igd2hhdCdzIHJlbGV2YW50LiBUaGVzZSBzbGljZXMgY29ycmVzcG9uZCB0byB0aGUgcG9zc2li bGUgdmFsdWVzCisgKiBvZiBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlLgorICovCitzdHJ1Y3QgcGdw YV90cm92ZQoreworCXBncGFfdHJvdmVfc2xpY2Ugam9pbjsKKwlwZ3BhX3Ryb3ZlX3NsaWNlIHJl bDsKKwlwZ3BhX3Ryb3ZlX3NsaWNlIHNjYW47Cit9OworCisvKgorICogV2UncmUgZ29pbmcgdG8g YnVpbGQgYSBoYXNoIHRhYmxlIHRvIGFsbG93IGNsaWVudHMgb2YgdGhpcyBtb2R1bGUgdG8gZmlu ZAorICogcmVsZXZhbnQgYWR2aWNlIGZvciBhIGdpdmVuIHBhcnQgb2YgdGhlIHF1ZXJ5IHF1aWNr bHkuIEhvd2V2ZXIsIHdlJ3JlIGdvaW5nCisgKiB0byB1c2Ugb25seSB0aHJlZSBvZiB0aGUgZml2 ZSBrZXkgZmllbGRzIGFzIGhhc2gga2V5cy4gVGhlcmUgYXJlIHR3byByZWFzb25zCisgKiBmb3Ig dGhpcy4KKyAqCisgKiBGaXJzdCwgaXQncyBhbGxvd2FibGUgdG8gc2V0IHBhcnRpdGlvbl9zY2hl bWEgdG8gTlVMTCB0byBtYXRjaCBhIHBhcnRpdGlvbgorICogd2l0aCB0aGUgY29ycmVjdCBuYW1l IGluIGFueSBzY2hlbWEuCisgKgorICogU2Vjb25kLCB3ZSBleHBlY3QgdGhlICJvY2N1cnJlbmNl IiBhbmQgInBhcnRpdGlvbl9zY2hlbWEiIHBvcnRpb25zIG9mIHRoZQorICogcmVsYXRpb24gaWRl bnRpZmllcnMgdG8gYmUgbW9zdGx5IHVuaW50ZXJlc3RpbmcuIE1vc3Qgb2YgdGhlIHRpbWUsIHRo ZQorICogb2NjdXJyZW5jZSBmaWVsZCB3aWxsIGJlIDEgYW5kIHRoZSBwYXJ0aXRpb25fc2NoZW1h IHZhbHVlcyB3aWxsIGFsbCBiZSB0aGUKKyAqIHNhbWUuIEV2ZW4gd2hlbiB0aGVyZSBpcyBzb21l IHZhcmlhdGlvbiwgdGhlIGFic29sdXRlIG51bWJlciBvZiBlbnRyaWVzCisgKiB0aGF0IGhhdmUg dGhlIHNhbWUgdmFsdWVzIGZvciBhbGwgdGhyZWUgb2YgdGhlc2Uga2V5IGZpZWxkcyBzaG91bGQg YmUKKyAqIHF1aXRlIHNtYWxsLgorICovCit0eXBlZGVmIHN0cnVjdAoreworCWNvbnN0IGNoYXIg KmFsaWFzX25hbWU7CisJY29uc3QgY2hhciAqcGFydGl0aW9uX25hbWU7CisJY29uc3QgY2hhciAq cGxhbl9uYW1lOworfSBwZ3BhX3Ryb3ZlX2VudHJ5X2tleTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sK KwlwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXk7CisJaW50CQkJc3RhdHVzOworCUJpdG1hcHNldCAg KmluZGV4ZXM7Cit9IHBncGFfdHJvdmVfZW50cnlfZWxlbWVudDsKKworc3RhdGljIHVpbnQzMiBw Z3BhX3Ryb3ZlX2VudHJ5X2hhc2hfa2V5KHBncGFfdHJvdmVfZW50cnlfa2V5IGtleSk7CisKK3N0 YXRpYyBpbmxpbmUgYm9vbAorcGdwYV90cm92ZV9lbnRyeV9jb21wYXJlX2tleShwZ3BhX3Ryb3Zl X2VudHJ5X2tleSBhLCBwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBiKQoreworCWlmIChzdHJjbXAoYS5h bGlhc19uYW1lLCBiLmFsaWFzX25hbWUpICE9IDApCisJCXJldHVybiBmYWxzZTsKKworCWlmICgh c3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwoYS5wYXJ0aXRpb25fbmFtZSwgYi5wYXJ0aXRpb25f bmFtZSkpCisJCXJldHVybiBmYWxzZTsKKworCWlmICghc3RyaW5nc19lcXVhbF9vcl9ib3RoX251 bGwoYS5wbGFuX25hbWUsIGIucGxhbl9uYW1lKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJu IHRydWU7Cit9CisKKyNkZWZpbmUgU0hfUFJFRklYCQkJcGdwYV90cm92ZV9lbnRyeQorI2RlZmlu ZSBTSF9FTEVNRU5UX1RZUEUJCXBncGFfdHJvdmVfZW50cnlfZWxlbWVudAorI2RlZmluZSBTSF9L RVlfVFlQRQkJCXBncGFfdHJvdmVfZW50cnlfa2V5CisjZGVmaW5lIFNIX0tFWQkJCQlrZXkKKyNk ZWZpbmUgU0hfSEFTSF9LRVkodGIsIGtleSkJcGdwYV90cm92ZV9lbnRyeV9oYXNoX2tleShrZXkp CisjZGVmaW5lCVNIX0VRVUFMKHRiLCBhLCBiKQlwZ3BhX3Ryb3ZlX2VudHJ5X2NvbXBhcmVfa2V5 KGEsIGIpCisjZGVmaW5lIFNIX1NDT1BFCQkJc3RhdGljIGlubGluZQorI2RlZmluZSBTSF9ERUNM QVJFCisjZGVmaW5lIFNIX0RFRklORQorI2luY2x1ZGUgImxpYi9zaW1wbGVoYXNoLmgiCisKK3N0 YXRpYyB2b2lkIHBncGFfaW5pdF90cm92ZV9zbGljZShwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2Up Oworc3RhdGljIHZvaWQgcGdwYV90cm92ZV9hZGRfdG9fc2xpY2UocGdwYV90cm92ZV9zbGljZSAq dHNsaWNlLAorCQkJCQkJCQkJcGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnLAorCQkJCQkJCQkJcGdw YV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworc3RhdGljIHZvaWQgcGdwYV90cm92ZV9hZGRfdG9f aGFzaChwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2ggKmhhc2gsCisJCQkJCQkJCSAgIHBncGFfYWR2aWNl X3RhcmdldCAqdGFyZ2V0LAorCQkJCQkJCQkgICBpbnQgaW5kZXgpOworc3RhdGljIEJpdG1hcHNl dCAqcGdwYV90cm92ZV9zbGljZV9sb29rdXAocGdwYV90cm92ZV9zbGljZSAqdHNsaWNlLAorCQkJ CQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWQpOworCisvKgorICogQnVpbGQgYSB0cm92ZSBv ZiBhZHZpY2UgZnJvbSBhIGxpc3Qgb2YgYWR2aWNlIGl0ZW1zLgorICoKKyAqIENhbGxlciBjYW4g b2J0YWluIGEgbGlzdCBvZiBhZHZpY2UgaXRlbXMgdG8gcGFzcyB0byB0aGlzIGZ1bmN0aW9uIGJ5 CisgKiBjYWxsaW5nIHBncGFfcGFyc2UoKS4KKyAqLworcGdwYV90cm92ZSAqCitwZ3BhX2J1aWxk X3Ryb3ZlKExpc3QgKmFkdmljZV9pdGVtcykKK3sKKwlwZ3BhX3Ryb3ZlICp0cm92ZSA9IHBhbGxv Y19vYmplY3QocGdwYV90cm92ZSk7CisKKwlwZ3BhX2luaXRfdHJvdmVfc2xpY2UoJnRyb3ZlLT5q b2luKTsKKwlwZ3BhX2luaXRfdHJvdmVfc2xpY2UoJnRyb3ZlLT5yZWwpOworCXBncGFfaW5pdF90 cm92ZV9zbGljZSgmdHJvdmUtPnNjYW4pOworCisJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfaXRl bSwgaXRlbSwgYWR2aWNlX2l0ZW1zKQorCXsKKwkJc3dpdGNoIChpdGVtLT50YWcpCisJCXsKKwkJ CWNhc2UgUEdQQV9UQUdfSk9JTl9PUkRFUjoKKwkJCQl7CisJCQkJCXBncGFfYWR2aWNlX3Rhcmdl dCAqdGFyZ2V0OworCisJCQkJCS8qCisJCQkJCSAqIEZvciBtb3N0IGFkdmljZSB0eXBlcywgZWFj aCBlbGVtZW50IGluIHRoZSB0b3AtbGV2ZWwKKwkJCQkJICogbGlzdCBpcyBhIHNlcGFyYXRlIHRh cmdldCwgYnV0IGl0J3MgbW9zdCBjb252ZW5pZW50IHRvCisJCQkJCSAqIHJlZ2FyZCB0aGUgZW50 aXJldHkgb2YgYSBKT0lOX09SREVSIHNwZWNpZmljYXRpb24gYXMgYQorCQkJCQkgKiBzaW5nbGUg dGFyZ2V0LiBTaW5jZSBpdCB3YXNuJ3QgcmVwcmVzZW50ZWQgdGhhdCB3YXkKKwkJCQkJICogZHVy aW5nIHBhcnNpbmcsIGJ1aWxkIGEgc3Vycm9nYXRlIG9iamVjdCBub3cuCisJCQkJCSAqLworCQkJ CQl0YXJnZXQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCQkJCQl0YXJn ZXQtPnR0eXBlID0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOworCQkJCQl0YXJnZXQtPmNoaWxk cmVuID0gaXRlbS0+dGFyZ2V0czsKKworCQkJCQlwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZSgmdHJv dmUtPmpvaW4sCisJCQkJCQkJCQkJCWl0ZW0tPnRhZywgdGFyZ2V0KTsKKwkJCQl9CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTjoKKwkJCWNhc2UgUEdQQV9U QUdfSU5ERVhfT05MWV9TQ0FOOgorCQkJY2FzZSBQR1BBX1RBR19JTkRFWF9TQ0FOOgorCQkJY2Fz ZSBQR1BBX1RBR19TRVFfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdfVElEX1NDQU46CisKKwkJCQkv KgorCQkJCSAqIFNjYW4gYWR2aWNlLgorCQkJCSAqLworCQkJCWZvcmVhY2hfcHRyKHBncGFfYWR2 aWNlX3RhcmdldCwgdGFyZ2V0LCBpdGVtLT50YXJnZXRzKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJ ICogRm9yIG5vdywgYWxsIG9mIG91ciBzY2FuIHR5cGVzIHRhcmdldCBzaW5nbGUgcmVsYXRpb25z LAorCQkJCQkgKiBidXQgaW4gdGhlIGZ1dHVyZSB0aGlzIG1pZ2h0IG5vdCBiZSB0cnVlLCBlLmcu IGEgY3VzdG9tCisJCQkJCSAqIHNjYW4gY291bGQgcmVwbGFjZSBhIGpvaW4uCisJCQkJCSAqLwor CQkJCQlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKTsKKwkJ CQkJcGdwYV90cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5zY2FuLAorCQkJCQkJCQkJCQlpdGVt LT50YWcsIHRhcmdldCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFBHUEFfVEFHX0ZP UkVJR05fSk9JTjoKKwkJCWNhc2UgUEdQQV9UQUdfSEFTSF9KT0lOOgorCQkJY2FzZSBQR1BBX1RB R19NRVJHRV9KT0lOX01BVEVSSUFMSVpFOgorCQkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BM QUlOOgorCQkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCWNhc2Ug UEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xP T1BfUExBSU46CisJCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU6CisJCQljYXNl IFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRToKKworCQkJCS8qCisJCQkJICogSm9pbiBzdHJhdGVn eSBhZHZpY2UuCisJCQkJICovCisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCB0 YXJnZXQsIGl0ZW0tPnRhcmdldHMpCisJCQkJeworCQkJCQlwZ3BhX3Ryb3ZlX2FkZF90b19zbGlj ZSgmdHJvdmUtPmpvaW4sCisJCQkJCQkJCQkJCWl0ZW0tPnRhZywgdGFyZ2V0KTsKKwkJCQl9CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgUEdQQV9UQUdfUEFSVElUSU9OV0lTRToKKwkJCWNhc2UgUEdQ QV9UQUdfR0FUSEVSOgorCQkJY2FzZSBQR1BBX1RBR19HQVRIRVJfTUVSR0U6CisJCQljYXNlIFBH UEFfVEFHX05PX0dBVEhFUjoKKworCQkJCS8qCisJCQkJICogQWR2aWNlIGFib3V0IGEgUmVsT3B0 SW5mbyByZWxldmFudCB0byBib3RoIHNjYW5zIGFuZCBqb2lucy4KKwkJCQkgKi8KKwkJCQlmb3Jl YWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRhcmdldCwgaXRlbS0+dGFyZ2V0cykKKwkJCQl7 CisJCQkJCXBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92ZS0+cmVsLAorCQkJCQkJCQkJCQlp dGVtLT50YWcsIHRhcmdldCk7CisJCQkJfQorCQkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJu IHRyb3ZlOworfQorCisvKgorICogU2VhcmNoIGEgdHJvdmUgb2YgYWR2aWNlIGZvciByZWxldmFu dCBlbnRyaWVzLgorICoKKyAqIEFsbCBwYXJhbWV0ZXJzIGFyZSBpbnB1dCBwYXJhbWV0ZXJzIGV4 Y2VwdCBmb3IgKnJlc3VsdCwgd2hpY2ggaXMgYW4gb3V0cHV0CisgKiBwYXJhbWV0ZXIgdXNlZCB0 byByZXR1cm4gcmVzdWx0cyB0byB0aGUgY2FsbGVyLgorICovCit2b2lkCitwZ3BhX3Ryb3ZlX2xv b2t1cChwZ3BhX3Ryb3ZlICp0cm92ZSwgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJ CSAgaW50IG5yaWRzLCBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsIHBncGFfdHJvdmVfcmVzdWx0ICpy ZXN1bHQpCit7CisJcGdwYV90cm92ZV9zbGljZSAqdHNsaWNlOworCUJpdG1hcHNldCAgKmluZGV4 ZXM7CisKKwlBc3NlcnQobnJpZHMgPiAwKTsKKworCWlmICh0eXBlID09IFBHUEFfVFJPVkVfTE9P S1VQX1NDQU4pCisJCXRzbGljZSA9ICZ0cm92ZS0+c2NhbjsKKwllbHNlIGlmICh0eXBlID09IFBH UEFfVFJPVkVfTE9PS1VQX0pPSU4pCisJCXRzbGljZSA9ICZ0cm92ZS0+am9pbjsKKwllbHNlCisJ CXRzbGljZSA9ICZ0cm92ZS0+cmVsOworCisJaW5kZXhlcyA9IHBncGFfdHJvdmVfc2xpY2VfbG9v a3VwKHRzbGljZSwgJnJpZHNbMF0pOworCWZvciAoaW50IGkgPSAxOyBpIDwgbnJpZHM7ICsraSkK Kwl7CisJCUJpdG1hcHNldCAgKm90aGVyX2luZGV4ZXM7CisKKwkJLyoKKwkJICogSWYgdGhlIGNh bGxlciBpcyBhc2tpbmcgYWJvdXQgdHdvIHJlbGF0aW9ucyB0aGF0IGFyZW4ndCBwYXJ0IG9mIHRo ZQorCQkgKiBzYW1lIHN1YnF1ZXJ5LCB0aGV5J3ZlIG1lc3NlZCB1cC4KKwkJICovCisJCUFzc2Vy dChzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWRzWzBdLnBsYW5fbmFtZSwKKwkJCQkJCQkJ CQkgIHJpZHNbaV0ucGxhbl9uYW1lKSk7CisKKwkJb3RoZXJfaW5kZXhlcyA9IHBncGFfdHJvdmVf c2xpY2VfbG9va3VwKHRzbGljZSwgJnJpZHNbaV0pOworCQlpbmRleGVzID0gYm1zX3VuaW9uKGlu ZGV4ZXMsIG90aGVyX2luZGV4ZXMpOworCX0KKworCXJlc3VsdC0+ZW50cmllcyA9IHRzbGljZS0+ ZW50cmllczsKKwlyZXN1bHQtPmluZGV4ZXMgPSBpbmRleGVzOworfQorCisvKgorICogUmV0dXJu IGFsbCBlbnRyaWVzIGluIGEgdHJvdmUgc2xpY2UgdG8gdGhlIGNhbGxlci4KKyAqCisgKiBUaGUg Zmlyc3QgdHdvIGFyZ3VtZW50cyBhcmUgaW5wdXQgYXJndW1lbnRzLCBhbmQgdGhlIHJlbWFpbmRl ciBhcmUgb3V0cHV0CisgKiBhcmd1bWVudHMuCisgKi8KK3ZvaWQKK3BncGFfdHJvdmVfbG9va3Vw X2FsbChwZ3BhX3Ryb3ZlICp0cm92ZSwgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJ CQkgIHBncGFfdHJvdmVfZW50cnkgKiplbnRyaWVzLCBpbnQgKm5lbnRyaWVzKQoreworCXBncGFf dHJvdmVfc2xpY2UgKnRzbGljZTsKKworCWlmICh0eXBlID09IFBHUEFfVFJPVkVfTE9PS1VQX1ND QU4pCisJCXRzbGljZSA9ICZ0cm92ZS0+c2NhbjsKKwllbHNlIGlmICh0eXBlID09IFBHUEFfVFJP VkVfTE9PS1VQX0pPSU4pCisJCXRzbGljZSA9ICZ0cm92ZS0+am9pbjsKKwllbHNlCisJCXRzbGlj ZSA9ICZ0cm92ZS0+cmVsOworCisJKmVudHJpZXMgPSB0c2xpY2UtPmVudHJpZXM7CisJKm5lbnRy aWVzID0gdHNsaWNlLT5udXNlZDsKK30KKworLyoKKyAqIENvbnZlcnQgYSB0cm92ZSBlbnRyeSB0 byBhbiBpdGVtIG9mIHBsYW4gYWR2aWNlIHRoYXQgd291bGQgcHJvZHVjZSBpdC4KKyAqLworY2hh ciAqCitwZ3BhX2NzdHJpbmdfdHJvdmVfZW50cnkocGdwYV90cm92ZV9lbnRyeSAqZW50cnkpCit7 CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJYXBwZW5k U3RyaW5nSW5mbygmYnVmLCAiJXMiLCBwZ3BhX2NzdHJpbmdfYWR2aWNlX3RhZyhlbnRyeS0+dGFn KSk7CisKKwkvKiBKT0lOX09SREVSIHRhZ3MgYXJlIHRyYW5zZm9ybWVkIGJ5IHBncGFfYnVpbGRf dHJvdmU7IHVuZG8gdGhhdCBoZXJlICovCisJaWYgKGVudHJ5LT50YWcgIT0gUEdQQV9UQUdfSk9J Tl9PUkRFUikKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJygnKTsKKwllbHNlCisJCUFz c2VydChlbnRyeS0+dGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpOwor CisJcGdwYV9mb3JtYXRfYWR2aWNlX3RhcmdldCgmYnVmLCBlbnRyeS0+dGFyZ2V0KTsKKworCWlm IChlbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0ICE9IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcigmYnVmLCAnICcpOworCQlwZ3BhX2Zvcm1hdF9pbmRleF90YXJnZXQoJmJ1ZiwgZW50cnkt PnRhcmdldC0+aXRhcmdldCk7CisJfQorCisJaWYgKGVudHJ5LT50YWcgIT0gUEdQQV9UQUdfSk9J Tl9PUkRFUikKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyknKTsKKworCXJldHVybiBi dWYuZGF0YTsKK30KKworLyoKKyAqIFNldCBQR1BBX1RFXyogZmxhZ3Mgb24gYSBzZXQgb2YgdHJv dmUgZW50cmllcy4KKyAqLwordm9pZAorcGdwYV90cm92ZV9zZXRfZmxhZ3MocGdwYV90cm92ZV9l bnRyeSAqZW50cmllcywgQml0bWFwc2V0ICppbmRleGVzLCBpbnQgZmxhZ3MpCit7CisJaW50CQkJ aSA9IC0xOworCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKGluZGV4ZXMsIGkpKSA+PSAw KQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmZW50cmllc1tpXTsKKworCQllbnRy eS0+ZmxhZ3MgfD0gZmxhZ3M7CisJfQorfQorCisvKgorICogQWRkIGEgbmV3IGFkdmljZSB0YXJn ZXQgdG8gYW4gZXhpc3RpbmcgcGdwYV90cm92ZV9zbGljZSBvYmplY3QuCisgKi8KK3N0YXRpYyB2 b2lkCitwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZShwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsCisJ CQkJCQlwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcsCisJCQkJCQlwZ3BhX2FkdmljZV90YXJnZXQg KnRhcmdldCkKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeTsKKworCWlmICh0c2xpY2UtPm51 c2VkID49IHRzbGljZS0+bmFsbG9jYXRlZCkKKwl7CisJCWludAkJCW5ld19hbGxvY2F0ZWQ7CisK KwkJbmV3X2FsbG9jYXRlZCA9IHRzbGljZS0+bmFsbG9jYXRlZCAqIDI7CisJCXRzbGljZS0+ZW50 cmllcyA9IHJlcGFsbG9jX2FycmF5KHRzbGljZS0+ZW50cmllcywgcGdwYV90cm92ZV9lbnRyeSwK KwkJCQkJCQkJCQkgbmV3X2FsbG9jYXRlZCk7CisJCXRzbGljZS0+bmFsbG9jYXRlZCA9IG5ld19h bGxvY2F0ZWQ7CisJfQorCisJZW50cnkgPSAmdHNsaWNlLT5lbnRyaWVzW3RzbGljZS0+bnVzZWRd OworCWVudHJ5LT50YWcgPSB0YWc7CisJZW50cnktPnRhcmdldCA9IHRhcmdldDsKKwllbnRyeS0+ ZmxhZ3MgPSAwOworCisJcGdwYV90cm92ZV9hZGRfdG9faGFzaCh0c2xpY2UtPmhhc2gsIHRhcmdl dCwgdHNsaWNlLT5udXNlZCk7CisKKwl0c2xpY2UtPm51c2VkKys7Cit9CisKKy8qCisgKiBVcGRh dGUgdGhlIGhhc2ggdGFibGUgZm9yIGEgbmV3bHktYWRkZWQgYWR2aWNlIHRhcmdldC4KKyAqLwor c3RhdGljIHZvaWQKK3BncGFfdHJvdmVfYWRkX3RvX2hhc2gocGdwYV90cm92ZV9lbnRyeV9oYXNo ICpoYXNoLCBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJICAgaW50IGluZGV4KQor eworCXBncGFfdHJvdmVfZW50cnlfa2V5IGtleTsKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1lbnQg KmVsZW1lbnQ7CisJYm9vbAkJZm91bmQ7CisKKwkvKiBGb3Igbm9uLWlkZW50aWZpZXJzLCBhZGQg ZW50cmllcyBmb3IgYWxsIGRlc2NlbmRlbnRzLiAqLworCWlmICh0YXJnZXQtPnR0eXBlICE9IFBH UEFfVEFSR0VUX0lERU5USUZJRVIpCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJn ZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJcGdwYV90cm92ZV9h ZGRfdG9faGFzaChoYXNoLCBjaGlsZF90YXJnZXQsIGluZGV4KTsKKwkJfQorCQlyZXR1cm47CisJ fQorCisJLyogU2FuaXR5IGNoZWNrcy4gKi8KKwlBc3NlcnQodGFyZ2V0LT5yaWQub2NjdXJyZW5j ZSA+IDApOworCUFzc2VydCh0YXJnZXQtPnJpZC5hbGlhc19uYW1lICE9IE5VTEwpOworCisJLyog QWRkIGFuIGVudHJ5IGZvciB0aGlzIHJlbGF0aW9uIGlkZW50aWZpZXIuICovCisJa2V5LmFsaWFz X25hbWUgPSB0YXJnZXQtPnJpZC5hbGlhc19uYW1lOworCWtleS5wYXJ0aXRpb25fbmFtZSA9IHRh cmdldC0+cmlkLnBhcnRyZWw7CisJa2V5LnBsYW5fbmFtZSA9IHRhcmdldC0+cmlkLnBsYW5fbmFt ZTsKKwllbGVtZW50ID0gcGdwYV90cm92ZV9lbnRyeV9pbnNlcnQoaGFzaCwga2V5LCAmZm91bmQp OworCWlmICghZm91bmQpCisJCWVsZW1lbnQtPmluZGV4ZXMgPSBOVUxMOworCWVsZW1lbnQtPmlu ZGV4ZXMgPSBibXNfYWRkX21lbWJlcihlbGVtZW50LT5pbmRleGVzLCBpbmRleCk7Cit9CisKKy8q CisgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYSBuZXcgcGdwYV90cm92ZV9zbGljZSBvYmplY3Qu CisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2luaXRfdHJvdmVfc2xpY2UocGdwYV90cm92ZV9zbGlj ZSAqdHNsaWNlKQoreworCS8qCisJICogSW4gYW4gaWRlYWwgd29ybGQsIHdlJ2xsIG1ha2UgdHNs aWNlLT5uYWxsb2NhdGVkIGJpZyBlbm91Z2ggdGhhdCB0aGUKKwkgKiBhcnJheSBhbmQgaGFzaCB0 YWJsZSB3aWxsIGJlIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoZSBudW1iZXIgb2YKKwkgKiBh ZHZpY2UgaXRlbXMgaW4gdGhpcyB0cm92ZSBzbGljZSwgYnV0IGEgZ2VuZXJvdXMgZGVmYXVsdCB2 YWx1ZSBpcyBub3QKKwkgKiBnb29kIGZvciBwZXJmb3JtYW5jZSwgYmVjYXVzZSBwZ3BhX2luaXRf dHJvdmVfc2xpY2UoKSBoYXMgdG8gemVybyBhbgorCSAqIGFtb3VudCBvZiBtZW1vcnkgcHJvcG9y dGlvbmFsIHRvIHRzbGljZS0+bmFsbG9jYXRlZC4gSGVuY2UsIHdlIGtlZXAgdGhlCisJICogc3Rh cnRpbmcgdmFsdWUgcXVpdGUgc21hbGwsIG9uIHRoZSB0aGVvcnkgdGhhdCBhZHZpY2Ugc3RyaW5n cyB3aWxsCisJICogb2Z0ZW4gYmUgcmVsYXRpdmVseSBzaG9ydC4KKwkgKi8KKwl0c2xpY2UtPm5h bGxvY2F0ZWQgPSAxNjsKKwl0c2xpY2UtPm51c2VkID0gMDsKKwl0c2xpY2UtPmVudHJpZXMgPSBw YWxsb2NfYXJyYXkocGdwYV90cm92ZV9lbnRyeSwgdHNsaWNlLT5uYWxsb2NhdGVkKTsKKwl0c2xp Y2UtPmhhc2ggPSBwZ3BhX3Ryb3ZlX2VudHJ5X2NyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwK KwkJCQkJCQkJCQkgICB0c2xpY2UtPm5hbGxvY2F0ZWQsIE5VTEwpOworfQorCisvKgorICogRmFz dCBoYXNoIGZ1bmN0aW9uIGZvciBhIGtleSBjb25zaXN0aW5nIG9mIGFsaWFzX25hbWUsIHBhcnRp dGlvbl9uYW1lLAorICogYW5kIHBsYW5fbmFtZS4KKyAqLworc3RhdGljIHVpbnQzMgorcGdwYV90 cm92ZV9lbnRyeV9oYXNoX2tleShwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXkpCit7CisJZmFzdGhh c2hfc3RhdGUgaHM7CisJaW50CQkJc3BfbGVuOworCisJZmFzdGhhc2hfaW5pdCgmaHMsIDApOwor CisJLyogYWxpYXNfbmFtZSBtYXkgbm90IGJlIE5VTEwgKi8KKwlzcF9sZW4gPSBmYXN0aGFzaF9h Y2N1bV9jc3RyaW5nKCZocywga2V5LmFsaWFzX25hbWUpOworCisJLyogcGFydGl0aW9uX25hbWUg YW5kIHBsYW5fbmFtZSwgaG93ZXZlciwgY2FuIGJlIE5VTEwgKi8KKwlpZiAoa2V5LnBhcnRpdGlv bl9uYW1lICE9IE5VTEwpCisJCXNwX2xlbiArPSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywg a2V5LnBhcnRpdGlvbl9uYW1lKTsKKwlpZiAoa2V5LnBsYW5fbmFtZSAhPSBOVUxMKQorCQlzcF9s ZW4gKz0gZmFzdGhhc2hfYWNjdW1fY3N0cmluZygmaHMsIGtleS5wbGFuX25hbWUpOworCisJLyoK KwkgKiBoYXNoZm5fdW5zdGFibGUuaCByZWNvbW1lbmRzIHVzaW5nIHN0cmluZyBsZW5ndGggYXMg dHdlYWsuIEl0J3Mgbm90CisJICogY2xlYXIgdG8gbWUgd2hhdCB0byBkbyBpZiB0aGVyZSBhcmUg bXVsdGlwbGUgc3RyaW5ncywgc28gZm9yIG5vdyBJJ20KKwkgKiBqdXN0IHVzaW5nIHRoZSB0b3Rh bCBvZiBhbGwgb2YgdGhlIGxlbmd0aHMuCisJICovCisJcmV0dXJuIGZhc3RoYXNoX2ZpbmFsMzIo JmhzLCBzcF9sZW4pOworfQorCisvKgorICogTG9vayBmb3IgbWF0Y2hpbmcgZW50cmllcy4KKyAq Lworc3RhdGljIEJpdG1hcHNldCAqCitwZ3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cChwZ3BhX3Ryb3Zl X3NsaWNlICp0c2xpY2UsIHBncGFfaWRlbnRpZmllciAqcmlkKQoreworCXBncGFfdHJvdmVfZW50 cnlfa2V5IGtleTsKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1lbnQgKmVsZW1lbnQ7CisJQml0bWFw c2V0ICAqcmVzdWx0ID0gTlVMTDsKKworCUFzc2VydChyaWQtPm9jY3VycmVuY2UgPj0gMSk7CisK KwlrZXkuYWxpYXNfbmFtZSA9IHJpZC0+YWxpYXNfbmFtZTsKKwlrZXkucGFydGl0aW9uX25hbWUg PSByaWQtPnBhcnRyZWw7CisJa2V5LnBsYW5fbmFtZSA9IHJpZC0+cGxhbl9uYW1lOworCisJZWxl bWVudCA9IHBncGFfdHJvdmVfZW50cnlfbG9va3VwKHRzbGljZS0+aGFzaCwga2V5KTsKKworCWlm IChlbGVtZW50ICE9IE5VTEwpCisJeworCQlpbnQJCQlpID0gLTE7CisKKwkJd2hpbGUgKChpID0g Ym1zX25leHRfbWVtYmVyKGVsZW1lbnQtPmluZGV4ZXMsIGkpKSA+PSAwKQorCQl7CisJCQlwZ3Bh X3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZ0c2xpY2UtPmVudHJpZXNbaV07CisKKwkJCS8qCisJCQkg KiBXZSBrbm93IHRoYXQgdGhpcyB0YXJnZXQgb3Igb25lIG9mIGl0cyBkZXNjZW5kZW50cyBtYXRj aGVzIHRoZQorCQkJICogaWRlbnRpZmllciBvbiB0aGUgdGhyZWUga2V5IGZpZWxkcyBhYm92ZSwg YnV0IHdlIGRvbid0IGtub3cKKwkJCSAqIHdoaWNoIGRlc2NlbmRlbnQgb3Igd2hldGhlciB0aGUg b2NjdXJlbmNlIGFuZCBzY2hlbWEgYWxzbworCQkJICogbWF0Y2guCisJCQkgKi8KKwkJCWlmIChw Z3BhX2lkZW50aWZpZXJfbWF0Y2hlc190YXJnZXQocmlkLCBlbnRyeS0+dGFyZ2V0KSkKKwkJCQly ZXN1bHQgPSBibXNfYWRkX21lbWJlcihyZXN1bHQsIGkpOworCQl9CisJfQorCisJcmV0dXJuIHJl c3VsdDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5o IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ3OWMzZjc1Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfdHJvdmUuaAorICoJICBBbGwgb2YgdGhlIGFkdmlj ZSBnaXZlbiBmb3IgYSBwYXJ0aWN1bGFyIHF1ZXJ5LCBhcHByb3ByaWF0ZWx5CisgKiAgICBvcmdh bml6ZWQgZm9yIGNvbnZlbmllbnQgYWNjZXNzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0y MDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworI2lmbmRlZiBQR1BBX1RST1ZFX0gKKyNkZWZpbmUgUEdQQV9UUk9WRV9ICisKKyNpbmNsdWRl ICJwZ3BhX2FzdC5oIgorCisjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCisKK3R5cGVkZWYg c3RydWN0IHBncGFfdHJvdmUgcGdwYV90cm92ZTsKKworLyoKKyAqIEZsYWdzIHRoYXQgY2FuIGJl IHNldCBvbiBhIHBncGFfdHJvdmVfZW50cnkgdG8gaW5kaWNhdGUgd2hhdCBoYXBwZW5lZCB3aGVu CisgKiB0cnlpbmcgdG8gcGxhbiB1c2luZyBhZHZpY2UuCisgKgorICogUEdQQV9URV9NQVRDSF9Q QVJUSUFMIG1lYW5zIHRoYXQgd2UgZm91bmQgc29tZSBwYXJ0IG9mIHRoZSBxdWVyeSB0aGF0IGF0 CisgKiBsZWFzdCBwYXJ0aWFsbHkgbWF0Y2hlZCB0aGUgdGFyZ2V0OyBlLmcuIGdpdmVuIEpPSU5f T1JERVIoYSBiKSwgdGhpcyB3b3VsZAorICogYmUgc2V0IGlmIHdlIGV2ZXIgc2F3IGFueSBqb2lu cmVsIGluY2x1ZGluZyBlaXRoZXIgImEiIG9yICJiIi4KKyAqCisgKiBQR1BBX1RFX01BVENIX0ZV TEwgbWVhbnMgdGhhdCB3ZSBmb3VuZCBhbiBleGFjdCBtYXRjaCBmb3IgdGhlIHRhcmdldDsgZS5n LgorICogZ2l2ZW4gSk9JTl9PUkRFUihhIGIpLCB0aGlzIHdvdWxkIGJlIHNldCBpZiB3ZSBzYXcg YSBqb2lucmVsIGNvbnRhaW5pbmcKKyAqIGV4YWN0bHkgImEiIGFuZCAiYiIgYW5kIG5vdGhpbmcg ZWxzZS4KKyAqCisgKiBQR1BBX1RFX0lOQVBQTElDQUJMRSBtZWFucyB0aGF0IHRoZSBhZHZpY2Ug ZG9lc24ndCBwcm9wZXJseSBhcHBseSB0byB0aGUKKyAqIHRhcmdldDsgZS5nLiBJTkRFWF9TQ0FO KGZvbyBiYXJfaWR4KSB3b3VsZCBiZSBzbyBtYXJrZWQgaWYgYmFyX2lkeCBkb2VzIG5vdAorICog ZXhpc3Qgb24gZm9vLiBUaGUgZmFjdCB0aGF0IHRoaXMgYml0IGhhcyBiZWVuIHNldCBkb2VzIG5v dCBtZWFuIHRoYXQgdGhlCisgKiBhZHZpY2UgaGFkIG5vIGVmZmVjdC4KKyAqCisgKiBQR1BBX1RF X0NPTkZMSUNUSU5HIG1lYW5zIHRoYXQgYSBjb25mbGljdCB3YXMgZGV0ZWN0ZWQgYmV0d2VlbiB3 aGF0IHRoaXMKKyAqIGFkdmljZSB3YW50cyBhbmQgd2hhdCBzb21lIG90aGVyIHBsYW4gYWR2aWNl IHdhbnRzOyBlLmcuIEpPSU5fT1JERVIoYSBiKQorICogd291bGQgY29uZmxpY3Qgd2l0aCBIQVNI X0pPSU4oYSksIGJlY2F1c2UgdGhlIGZvcm1lciByZXF1aXJlcyAiYSIgdG8gYmUgdGhlCisgKiBv dXRlciB0YWJsZSB3aGlsZSB0aGUgbGF0dGVyIHJlcXVpcmVzIGl0IHRvIGJlIHRoZSBpbm5lciB0 YWJsZS4KKyAqCisgKiBQR1BBX1RFX0ZBSUxFRCBtZWFucyB0aGF0IHRoZSByZXN1bHRpbmcgcGxh biBkaWQgbm90IGNvbmZvcm0gdG8gdGhlIGFkdmljZS4KKyAqLworI2RlZmluZSBQR1BBX1RFX01B VENIX1BBUlRJQUwJCTB4MDAwMQorI2RlZmluZSBQR1BBX1RFX01BVENIX0ZVTEwJCQkweDAwMDIK KyNkZWZpbmUgUEdQQV9URV9JTkFQUExJQ0FCTEUJCTB4MDAwNAorI2RlZmluZSBQR1BBX1RFX0NP TkZMSUNUSU5HCQkJMHgwMDA4CisjZGVmaW5lIFBHUEFfVEVfRkFJTEVECQkJCTB4MDAxMAorCisv KgorICogRWFjaCBlbnRyeSBpbiBhIHRyb3ZlIG9mIGFkdmljZSByZXByZXNlbnRzIHRoZSBhcHBs aWNhdGlvbiBvZiBhIHRhZyB0bworICogYSBzaW5nbGUgdGFyZ2V0LgorICovCit0eXBlZGVmIHN0 cnVjdCBwZ3BhX3Ryb3ZlX2VudHJ5Cit7CisJcGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnOworCXBn cGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0OworCWludAkJCWZsYWdzOworfSBwZ3BhX3Ryb3ZlX2Vu dHJ5OworCisvKgorICogV2hhdCBraW5kIG9mIGluZm9ybWF0aW9uIGRvZXMgdGhlIGNhbGxlciB3 YW50IHRvIGZpbmQgaW4gYSB0cm92ZT8KKyAqCisgKiBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOIG1l YW5zIHdlJ3JlIGxvb2tpbmcgZm9yIHNjYW4gYWR2aWNlLgorICoKKyAqIFBHUEFfVFJPVkVfTE9P S1VQX0pPSU4gbWVhbnMgd2UncmUgbG9va2luZyBmb3Igam9pbi1yZWxhdGVkIGFkdmljZS4KKyAq IFRoaXMgaW5jbHVkZXMgam9pbiBvcmRlciBhZHZpY2UsIGpvaW4gbWV0aG9kIGFkdmljZSwgYW5k IHNlbWlqb2luLXVuaXF1ZW5lc3MKKyAqIGFkdmljZS4KKyAqCisgKiBQR1BBX1RST1ZFX0xPT0tV UF9SRUwgbWVhbnMgd2UncmUgbG9va2luZyBmb3IgZ2VuZXJhbCBhZHZpY2UgYWJvdXQgdGhpcwor ICogYSBSZWxPcHRJbmZvIHRoYXQgbWF5IGNvcnJlc3BvbmQgdG8gZWl0aGVyIGEgc2NhbiBvciBh IGpvaW4uIFRoaXMgaW5jbHVkZXMKKyAqIGdhdGhlci1yZWxhdGVkIGFkdmljZSBhbmQgcGFydGl0 aW9ud2lzZSBhZHZpY2UuIE5vdGUgdGhhdCBwYXJ0aXRpb253aXNlCisgKiBhZHZpY2UgbWlnaHQg c2VlbSBsaWtlIGpvaW4gYWR2aWNlLCBidXQgdGhhdCdzIG5vdCBhIGhlbHBmdWwgd2F5IG9mIHZp ZXdpbmcKKyAqIHRoZSBtYXR0ZXIgYmVjYXVzZSAoMSkgcGFydGl0aW9ud2lzZSBhZHZpY2UgaXMg YWxzbyByZWxldmFudCBhdCB0aGUgc2NhbgorICogbGV2ZWwgYW5kICgyKSBvdGhlciB0eXBlcyBv ZiBqb2luIGFkdmljZSBhZmZlY3Qgb25seSB3aGF0IHRvIGRvIGZyb20KKyAqIGpvaW5fcGF0aF9z ZXR1cF9ob29rLCBidXQgcGFydGl0aW9ud2lzZSBhZHZpY2UgYWZmZWN0cyB3aGF0IHRvIGRvIGlu CisgKiBqb2lucmVsX3NldHVwX2hvb2suCisgKi8KK3R5cGVkZWYgZW51bSBwZ3BhX3Ryb3ZlX2xv b2t1cF90eXBlCit7CisJUEdQQV9UUk9WRV9MT09LVVBfSk9JTiwKKwlQR1BBX1RST1ZFX0xPT0tV UF9SRUwsCisJUEdQQV9UUk9WRV9MT09LVVBfU0NBTgorfSBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBl OworCisvKgorICogVGhpcyBzdHJ1Y3QgaXMgdXNlZCB0byBzdG9yZSB0aGUgcmVzdWx0IG9mIGEg dHJvdmUgbG9va3VwLiBGb3IgZWFjaCBtZW1iZXIKKyAqIG9mICJpbmRleGVzIiwgdGhlIGVudHJ5 IGF0IHRoZSBjb3JyZXNwb25kaW5nIG9mZnNldCB3aXRoaW4gImVudHJpZXMiIGlzIG9uZQorICog b2YgdGhlIHJlc3VsdHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfdHJvdmVfcmVzdWx0Cit7 CisJcGdwYV90cm92ZV9lbnRyeSAqZW50cmllczsKKwlCaXRtYXBzZXQgICppbmRleGVzOworfSBw Z3BhX3Ryb3ZlX3Jlc3VsdDsKKworZXh0ZXJuIHBncGFfdHJvdmUgKnBncGFfYnVpbGRfdHJvdmUo TGlzdCAqYWR2aWNlX2l0ZW1zKTsKK2V4dGVybiB2b2lkIHBncGFfdHJvdmVfbG9va3VwKHBncGFf dHJvdmUgKnRyb3ZlLAorCQkJCQkJCSAgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJ CQkJCSAgaW50IG5yaWRzLAorCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJ CSAgcGdwYV90cm92ZV9yZXN1bHQgKnJlc3VsdCk7CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX2xv b2t1cF9hbGwocGdwYV90cm92ZSAqdHJvdmUsCisJCQkJCQkJCSAgcGdwYV90cm92ZV9sb29rdXBf dHlwZSB0eXBlLAorCQkJCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKiplbnRyaWVzLAorCQkJCQkJ CQkgIGludCAqbmVudHJpZXMpOworZXh0ZXJuIGNoYXIgKnBncGFfY3N0cmluZ190cm92ZV9lbnRy eShwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSk7CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX3NldF9m bGFncyhwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzLAorCQkJCQkJCQkgQml0bWFwc2V0ICppbmRl eGVzLCBpbnQgZmxhZ3MpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV93YWxrZXIuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDliOWU4NDQyNGYKLS0t IC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKQEAg LTAsMCArMSwxMDAyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3dhbGtlci5j CisgKgkgIFBsYW4gdHJlZSBpdGVyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAy NSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfam9pbi5oIgorI2luY2x1 ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJu b2Rlcy9wbGFubm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisjaW5jbHVk ZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKK3N0YXRpYyB2b2lkIHBncGFfd2Fsa19yZWN1cnNpdmVs eShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJCQkJ ICBib29sIHdpdGhpbl9qb2luX3Byb2JsZW0sCisJCQkJCQkJCSAgcGdwYV9qb2luX3Vucm9sbGVy ICpqb2luX3Vucm9sbGVyLAorCQkJCQkJCQkgIExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywK KwkJCQkJCQkJICBib29sIGJlbmVhdGhfYW55X2dhdGhlcik7CitzdGF0aWMgQml0bWFwc2V0ICpw Z3BhX3Byb2Nlc3NfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtl ciwKKwkJCQkJCQkJCQkJIHBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4pOworCitzdGF0aWMgcGdw YV9xdWVyeV9mZWF0dXJlICpwZ3BhX2FkZF9mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4 dCAqd2Fsa2VyLAorCQkJCQkJCQkJCQlwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkJCQkJUGxh biAqcGxhbik7CisKK3N0YXRpYyB2b2lkIHBncGFfcWZfYWRkX3J0aShMaXN0ICphY3RpdmVfcXVl cnlfZmVhdHVyZXMsIEluZGV4IHJ0aSk7CitzdGF0aWMgdm9pZCBwZ3BhX3FmX2FkZF9ydGlzKExp c3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgQml0bWFwc2V0ICpyZWxpZHMpOworc3RhdGljIHZv aWQgcGdwYV9xZl9hZGRfcGxhbl9ydGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgUGxh biAqcGxhbiwKKwkJCQkJCQkJICBMaXN0ICpydGFibGUpOworCitzdGF0aWMgYm9vbCBwZ3BhX3dh bGtlcl9qb2luX29yZGVyX21hdGNoZXMocGdwYV91bnJvbGxlZF9qb2luICp1am9pbiwKKwkJCQkJ CQkJCQkgICBJbmRleCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCSAgIHBncGFfaWRlbnRpZmll ciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJICAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJn ZXQsCisJCQkJCQkJCQkJICAgYm9vbCB0b3BsZXZlbCk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtl cl9qb2luX29yZGVyX21hdGNoZXNfbWVtYmVyKHBncGFfam9pbl9tZW1iZXIgKm1lbWJlciwKKwkJ CQkJCQkJCQkJCSAgSW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJCSAgcGdwYV9pZGVu dGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0 ICp0YXJnZXQpOworc3RhdGljIHBncGFfc2NhbiAqcGdwYV93YWxrZXJfZmluZF9zY2FuKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCXBncGFfc2Nhbl9zdHJhdGVn eSBzdHJhdGVneSwKKwkJCQkJCQkJCQlCaXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgYm9vbCBw Z3BhX3dhbGtlcl9pbmRleF90YXJnZXRfbWF0Y2hlc19wbGFuKHBncGFfaW5kZXhfdGFyZ2V0ICpp dGFyZ2V0LAorCQkJCQkJCQkJCQkJICBQbGFuICpwbGFuKTsKK3N0YXRpYyBib29sIHBncGFfd2Fs a2VyX2NvbnRhaW5zX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJ CQkJCQkJCQkJIHBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJCQkJCSBCaXRtYXBzZXQgKnJlbGlk cyk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHBncGFfcGxhbl93YWxr ZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJICBwZ3BhX2pvaW5fc3RyYXRlZ3kgc3RyYXRl Z3ksCisJCQkJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyBib29sIHBncGFfd2Fs a2VyX2NvbnRhaW5zX25vX2dhdGhlcihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwK KwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbGlkcyk7CisKKy8qCisgKiBUb3AtbGV2ZWwgZW50 cnlwb2ludCBmb3IgdGhlIHBsYW4gdHJlZSB3YWxrLgorICoKKyAqIFBvcHVsYXRlcyB3YWxrZXIg YmFzZWQgb24gYSB0cmF2ZXJzYWwgb2YgdGhlIFBsYW4gdHJlZXMgaW4gcHN0bXQuCisgKgorICog c2pfdW5pcXVlX3JlbHMgaXMgYSBsaXN0IG9mIHBncGFfc2pfdW5pcXVlX3JlbCBvYmplY3RzLCBv bmUgZm9yIGVhY2gKKyAqIHJlbGF0aW9uIHdlIGNvbnNpZGVyZWQgbWFraW5nIHVuaXF1ZSBhcyBw YXJ0IG9mIHNlbWlqb2luIHBsYW5uaW5nLgorICovCit2b2lkCitwZ3BhX3BsYW5fd2Fsa2VyKHBn cGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFubmVkU3RtdCAqcHN0bXQsCisJCQkJ IExpc3QgKnNqX3VuaXF1ZV9yZWxzKQoreworCUxpc3RDZWxsICAgKmxjOworCUxpc3QJICAgKnNq X3VuaXF1ZV9ydGlzID0gTlVMTDsKKwlMaXN0CSAgICpzal9ub251bmlxdWVfcWZzID0gTlVMTDsK KworCS8qIEluaXRpYWxpemF0aW9uLiAqLworCW1lbXNldCh3YWxrZXIsIDAsIHNpemVvZihwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQpKTsKKwl3YWxrZXItPnBzdG10ID0gcHN0bXQ7CisKKwkvKiBX YWxrIHRoZSBtYWluIHBsYW4gdHJlZS4gKi8KKwlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2Vy LCBwc3RtdC0+cGxhblRyZWUsIDAsIE5VTEwsIE5JTCwgZmFsc2UpOworCisJLyogTWFpbiBwbGFu IHRyZWUgd2FsayB3b24ndCByZWFjaCBzdWJwbGFucywgc28gd2FsayB0aG9zZS4gKi8KKwlmb3Jl YWNoKGxjLCBwc3RtdC0+c3VicGxhbnMpCisJeworCQlQbGFuCSAgICpwbGFuID0gbGZpcnN0KGxj KTsKKworCQlpZiAocGxhbiAhPSBOVUxMKQorCQkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtl ciwgcGxhbiwgMCwgTlVMTCwgTklMLCBmYWxzZSk7CisJfQorCisJLyogQWRqdXN0IFJUSXMgZnJv bSBzal91bmlxdWVfcmVscyBmb3IgdGhlIGZsYXR0ZW5lZCByYW5nZSB0YWJsZS4gKi8KKwlmb3Jl YWNoX3B0cihwZ3BhX3NqX3VuaXF1ZV9yZWwsIHVyLCBzal91bmlxdWVfcmVscykKKwl7CisJCWlu dAkJCXJ0aW5kZXggPSAtMTsKKwkJaW50CQkJcnRvZmZzZXQgPSAwOworCQlib29sCQlkdW1teSA9 IGZhbHNlOworCQlCaXRtYXBzZXQgICpyZWxpZHMgPSBOVUxMOworCisJCS8qIElmIHRoaXMgaXMg YSBzdWJwbGFuLCBmaW5kIHRoZSByYW5nZSB0YWJsZSBvZmZzZXQuICovCisJCWlmICh1ci0+cGxh bl9uYW1lICE9IE5VTEwpCisJCXsKKwkJCWZvcmVhY2hfbm9kZShTdWJQbGFuUlRJbmZvLCBydGlu Zm8sIHBzdG10LT5zdWJydGluZm9zKQorCQkJeworCQkJCWlmIChzdHJjbXAodXItPnBsYW5fbmFt ZSwgcnRpbmZvLT5wbGFuX25hbWUpID09IDApCisJCQkJeworCQkJCQlydG9mZnNldCA9IHJ0aW5m by0+cnRvZmZzZXQ7CisJCQkJCWR1bW15ID0gcnRpbmZvLT5kdW1teTsKKwkJCQkJYnJlYWs7CisJ CQkJfQorCQkJfQorCisJCQlpZiAocnRvZmZzZXQgPT0gMCkKKwkJCQllbG9nKEVSUk9SLCAibm8g cnRvZmZzZXQgZm9yIHBsYW4gJXMiLCB1ci0+cGxhbl9uYW1lKTsKKwkJfQorCisJCS8qIElmIHRo aXMgZW50cnkgcGVydGFpbnMgdG8gYSBkdW1teSBzdWJxdWVyeSwgaWdub3JlIGl0LiAqLworCQlp ZiAoZHVtbXkpCisJCQljb250aW51ZTsKKworCQkvKiBPZmZzZXQgZWFjaCBlbnRyeSBmcm9tIHRo ZSBvcmlnaW5hbCBzZXQuICovCisJCXdoaWxlICgocnRpbmRleCA9IGJtc19uZXh0X21lbWJlcih1 ci0+cmVsaWRzLCBydGluZGV4KSkgPj0gMCkKKwkJCXJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKHJl bGlkcywgcnRpbmRleCArIHJ0b2Zmc2V0KTsKKworCQkvKiBTdG9yZSB0aGUgcmVzdWx0aW5nIHNl dC4gKi8KKwkJc2pfdW5pcXVlX3J0aXMgPSBsYXBwZW5kKHNqX3VuaXF1ZV9ydGlzLCByZWxpZHMp OworCX0KKworCS8qCisJICogUmVtb3ZlIGFueSBub24tdW5pcXVlIHNlbWpvaW4gcXVlcnkgZmVh dHVyZXMgZm9yIHdoaWNoIG1ha2luZyB0aGUgcmVsCisJICogdW5pcXVlIHdhc24ndCBjb25zaWRl cmVkLgorCSAqLworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsCisJCQkJd2Fs a2VyLT5xdWVyeV9mZWF0dXJlc1tQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRV0pCisJeworCQlp ZiAobGlzdF9tZW1iZXIoc2pfdW5pcXVlX3J0aXMsIHFmLT5yZWxpZHMpKQorCQkJc2pfbm9udW5p cXVlX3FmcyA9IGxhcHBlbmQoc2pfbm9udW5pcXVlX3FmcywgcWYpOworCX0KKwl3YWxrZXItPnF1 ZXJ5X2ZlYXR1cmVzW1BHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFXSA9IHNqX25vbnVuaXF1ZV9x ZnM7CisKKwkvKgorCSAqIElmIHdlIGZpbmQgYW55IGNhc2VzIHdoZXJlIGFuYWx5c2lzIG9mIHRo ZSBQbGFuIHRyZWUgc2hvd3MgdGhhdCB0aGUKKwkgKiBzZW1pam9pbiB3YXMgbWFkZSB1bmlxdWUg YnV0IHRoaXMgcG9zc2liaWxpdHkgd2FzIG5ldmVyIG9ic2VydmVkIHRvIGJlCisJICogY29uc2lk ZXJlZCBkdXJpbmcgcGxhbm5pbmcsIHRoZW4gd2UgaGF2ZSBhIGJ1ZyBzb21ld2hlcmUuCisJICov CisJZm9yZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwKKwkJCQl3YWxrZXItPnF1ZXJ5 X2ZlYXR1cmVzW1BHUEFRRl9TRU1JSk9JTl9VTklRVUVdKQorCXsKKwkJaWYgKCFsaXN0X21lbWJl cihzal91bmlxdWVfcnRpcywgcWYtPnJlbGlkcykpCisJCXsKKwkJCVN0cmluZ0luZm9EYXRhIGJ1 ZjsKKworCQkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJCQlvdXRCaXRtYXBzZXQoJmJ1ZiwgcWYt PnJlbGlkcyk7CisJCQllbG9nKEVSUk9SLAorCQkJCSAidW5pcXVlIHNlbWlqb2luIGZvdW5kIGZv ciByZWxpZHMgJXMgYnV0IG5vdCBvYnNlcnZlZCBkdXJpbmcgcGxhbm5pbmciLAorCQkJCSBidWYu ZGF0YSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBNYWluIHdvcmtob3JzZSBmb3IgdGhlIHBsYW4g dHJlZSB3YWxrLgorICoKKyAqIElmIHdpdGhpbl9qb2luX3Byb2JsZW0gaXMgdHJ1ZSwgd2UgZW5j b3VudGVyZWQgYSBqb2luIGF0IHNvbWUgaGlnaGVyIGxldmVsCisgKiBvZiB0aGUgdHJlZSB3YWxr IGFuZCBoYXZlbid0IHlldCBkZXNjZW5kZWQgb3V0IG9mIHRoZSBwb3J0aW9uIG9mIHRoZSBwbGFu CisgKiB0cmVlIHRoYXQgaXMgcGFydCBvZiB0aGF0IHNhbWUgam9pbiBwcm9ibGVtLiBXZSdyZSBu byBsb25nZXIgaW4gdGhlIHNhbWUKKyAqIGpvaW4gcHJvYmxlbSBpZiAoMSkgd2UgY3Jvc3MgaW50 byBhIGRpZmZlcmVudCBzdWJxdWVyeSBvciAoMikgd2UgZGVzY2VuZAorICogdGhyb3VnaCBhbiBB cHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSwgYmVsb3cgd2hpY2ggYW55IGZ1cnRoZXIgam9pbnMg d291bGQKKyAqIGJlIHBhcnRpdGlvbndpc2Ugam9pbnMgcGxhbm5lZCBzZXBhcmF0ZWx5IGZyb20g dGhlIG91dGVyIGpvaW4gcHJvYmxlbS4KKyAqCisgKiBJZiBqb2luX3Vucm9sbGVyICE9IE5VTEws IHRoZSBqb2luIHVucm9sbGVyIGNvZGUgZXhwZWN0cyB1cyB0byBmaW5kIGEgam9pbgorICogdGhh dCBzaG91bGQgYmUgdW5yb2xsZWQgaW50byB0aGF0IG9iamVjdC4gVGhpcyBpbXBsaWVzIHRoYXQg d2UncmUgd2l0aGluIGEKKyAqIGpvaW4gcHJvYmxlbSwgYnV0IHRoZSByZXZlcnNlIGlzIG5vdCB0 cnVlOiB3aGVuIHdlJ3ZlIHRyYXZlcnNlZCBhbGwgdGhlCisgKiBqb2lucyBidXQgYXJlIHN0aWxs IGxvb2tpbmcgZm9yIHRoZSBzY2FuIHRoYXQgaXMgdGhlIGxlYWYgb2YgdGhlIGpvaW4gdHJlZSwK KyAqIGpvaW5fdW5yb2xsZXIgd2lsbCBiZSBOVUxMIGJ1dCB3aXRoaW5fam9pbl9wcm9ibGVtIHdp bGwgYmUgdHJ1ZS4KKyAqCisgKiBFYWNoIGVsZW1lbnQgb2YgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVz IGNvcnJlc3BvbmRzIHRvIHNvbWUgaXRlbSBvZiBhZHZpY2UKKyAqIHRoYXQgbmVlZHMgdG8gZW51 bWVyYXRlIGFsbCB0aGUgcmVsYXRpb25zIGl0IGFmZmVjdHMuIFdlIGFkZCBSVElzIHdlIGZpbmQK KyAqIGR1cmluZyB0cmVlIHRyYXZlcnNhbCB0byBlYWNoIG9mIHRoZXNlIHF1ZXJ5IGZlYXR1cmVz LgorICoKKyAqIElmIGJlbmVhdGhfYW55X2dhdGhlciA9PSB0cnVlLCBzb21lIGhpZ2hlciBsZXZl bCBvZiB0aGUgdHJlZSB0cmF2ZXJzYWwgZm91bmQKKyAqIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJn ZSBub2RlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQkgIGJvb2wgd2l0aGlu X2pvaW5fcHJvYmxlbSwKKwkJCQkJICBwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIs CisJCQkJCSAgTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkgIGJvb2wgYmVuZWF0 aF9hbnlfZ2F0aGVyKQoreworCXBncGFfam9pbl91bnJvbGxlciAqb3V0ZXJfam9pbl91bnJvbGxl ciA9IE5VTEw7CisJcGdwYV9qb2luX3Vucm9sbGVyICppbm5lcl9qb2luX3Vucm9sbGVyID0gTlVM TDsKKwlib29sCQlqb2luX3Vucm9sbGVyX3RvcGxldmVsID0gZmFsc2U7CisJTGlzdAkgICAqcHVz aGRvd25fcXVlcnlfZmVhdHVyZXMgPSBOSUw7CisJTGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAq ZXh0cmFwbGFucyA9IE5JTDsKKwlMaXN0CSAgICplbGlkZWRfbm9kZXMgPSBOSUw7CisKKwlBc3Nl cnQod2l0aGluX2pvaW5fcHJvYmxlbSB8fCBqb2luX3Vucm9sbGVyID09IE5VTEwpOworCisJLyoK KwkgKiBJZiB0aGlzIGlzIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLCBkaXJlY3RseSBh ZGQgaXQgdG8gdGhlIGxpc3QKKwkgKiBvZiBjdXJyZW50bHktYWN0aXZlIHF1ZXJ5IGZlYXR1cmVz LgorCSAqCisJICogT3RoZXJ3aXNlLCBjaGVjayB0aGUgZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzIGxp c3QgdG8gc2VlIHdoZXRoZXIgdGhpcyB3YXMKKwkgKiBwcmV2aW91c2x5IGlkZW50aWZpZWQgYXMg YSBwbGFuIG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmVhdGVkIGFzIGEKKwkgKiBxdWVyeSBmZWF0 dXJlLgorCSAqCisJICogTm90ZSB0aGF0IHRoZSBjYWxsZXIgYWxzbyBoYXMgYSBjb3B5IHRvIGFj dGl2ZV9xdWVyeV9mZWF0dXJlcywgc28gd2UKKwkgKiBjYW4ndCBkZXN0cnVjdGl2ZWx5IG1vZGlm eSBpdCB3aXRob3V0IG1ha2luZyBhIGNvcHkuCisJICovCisJaWYgKElzQShwbGFuLCBHYXRoZXIp KQorCXsKKwkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0KKwkJCWxhcHBlbmQobGlzdF9jb3B5KGFj dGl2ZV9xdWVyeV9mZWF0dXJlcyksCisJCQkJCXBncGFfYWRkX2ZlYXR1cmUod2Fsa2VyLCBQR1BB UUZfR0FUSEVSLCBwbGFuKSk7CisJCWJlbmVhdGhfYW55X2dhdGhlciA9IHRydWU7CisJfQorCWVs c2UgaWYgKElzQShwbGFuLCBHYXRoZXJNZXJnZSkpCisJeworCQlhY3RpdmVfcXVlcnlfZmVhdHVy ZXMgPQorCQkJbGFwcGVuZChsaXN0X2NvcHkoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKSwKKwkJCQkJ cGdwYV9hZGRfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9HQVRIRVJfTUVSR0UsIHBsYW4pKTsKKwkJ YmVuZWF0aF9hbnlfZ2F0aGVyID0gdHJ1ZTsKKwl9CisJZWxzZQorCXsKKwkJZm9yZWFjaF9wdHIo cGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwgd2Fsa2VyLT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMpCisJ CXsKKwkJCWlmIChxZi0+cGxhbiA9PSBwbGFuKQorCQkJeworCQkJCWFjdGl2ZV9xdWVyeV9mZWF0 dXJlcyA9IGxpc3RfY29weShhY3RpdmVfcXVlcnlfZmVhdHVyZXMpOworCQkJCWFjdGl2ZV9xdWVy eV9mZWF0dXJlcyA9IGxhcHBlbmQoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBxZik7CisJCQkJd2Fs a2VyLT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMgPQorCQkJCQlsaXN0X2RlbGV0ZV9wdHIod2Fsa2Vy LT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMsIHBsYW4pOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJ fQorCisJLyoKKwkgKiBGaW5kIGFsbCBlbGlkZWQgbm9kZXMgZm9yIHRoaXMgUGxhbiBub2RlLgor CSAqLworCWZvcmVhY2hfbm9kZShFbGlkZWROb2RlLCBuLCB3YWxrZXItPnBzdG10LT5lbGlkZWRO b2RlcykKKwl7CisJCWlmIChuLT5wbGFuX25vZGVfaWQgPT0gcGxhbi0+cGxhbl9ub2RlX2lkKQor CQkJZWxpZGVkX25vZGVzID0gbGFwcGVuZChlbGlkZWRfbm9kZXMsIG4pOworCX0KKworCS8qIElm IHdlIGZvdW5kIGFueSBlbGlkZWRfbm9kZXMsIGhhbmRsZSB0aGVtLiAqLworCWlmIChlbGlkZWRf bm9kZXMgIT0gTklMKQorCXsKKwkJaW50CQkJbnVtX2VsaWRlZF9ub2RlcyA9IGxpc3RfbGVuZ3Ro KGVsaWRlZF9ub2Rlcyk7CisJCUVsaWRlZE5vZGUgKmxhc3RfZWxpZGVkX25vZGU7CisKKwkJLyoK KwkJICogUlRJcyBmb3IgdGhlIGZpbmFsIC0tIGFuZCB0aHVzIGxvZ2ljYWxseSB1cHBlcm1vc3Qg LS0gZWxpZGVkIG5vZGUKKwkJICogc2hvdWxkIGJlIGNvbGxlY3RlZCBmb3IgcXVlcnkgZmVhdHVy ZXMgcGFzc2VkIGRvd24gYnkgdGhlIGNhbGxlci4KKwkJICogSG93ZXZlciwgZWxpZGVkIG5vZGVz IGFjdCBhcyBiYXJyaWVycyB0byBxdWVyeSBmZWF0dXJlcywgd2hpY2gKKwkJICogbWVhbnMgdGhh dCAoMSkgdGhlIHJlbWFpbmluZyBlbGlkZWQgbm9kZXMsIGlmIGFueSwgc2hvdWxkIGJlCisJCSAq IGlnbm9yZWQgZm9yIHB1cnBvc2VzIG9mIHF1ZXJ5IGZlYXR1cmVzIGFuZCAoMikgdGhlIGxpc3Qg b2YgYWN0aXZlCisJCSAqIHF1ZXJ5IGZlYXR1cmVzIHNob3VsZCBiZSByZXNldCB0byBlbXB0eSBz byB0aGF0IHdlIGRvIG5vdCBhZGQgUlRJcworCQkgKiBmcm9tIHRoZSBwbGFuIG5vZGUgdGhhdCBp cyBsb2dpY2FsbHkgYmVuZWF0aCB0aGUgZWxpZGVkIG5vZGUgdG8gdGhlCisJCSAqIHF1ZXJ5IGZl YXR1cmVzIHBhc3NlZCBkb3duIGZyb20gdGhlIGNhbGxlci4KKwkJICovCisJCWxhc3RfZWxpZGVk X25vZGUgPSBsaXN0X250aChlbGlkZWRfbm9kZXMsIG51bV9lbGlkZWRfbm9kZXMgLSAxKTsKKwkJ cGdwYV9xZl9hZGRfcnRpcyhhY3RpdmVfcXVlcnlfZmVhdHVyZXMsCisJCQkJCQkgcGdwYV9maWx0 ZXJfb3V0X2pvaW5fcmVsaWRzKGxhc3RfZWxpZGVkX25vZGUtPnJlbGlkcywKKwkJCQkJCQkJCQkJ CQkgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKSk7CisJCWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9IE5J TDsKKworCQkvKgorCQkgKiBJZiB3ZSdyZSB3aXRoaW4gYSBqb2luIHByb2JsZW0sIHRoZSBqb2lu X3Vucm9sbGVyIGlzIHJlc3BvbnNpYmxlCisJCSAqIGZvciBidWlsZGluZyB0aGUgc2NhbiBmb3Ig dGhlIGZpbmFsIGVsaWRlZCBub2RlLCBzbyB0aHJvdyBpdCBvdXQuCisJCSAqLworCQlpZiAod2l0 aGluX2pvaW5fcHJvYmxlbSkKKwkJCWVsaWRlZF9ub2RlcyA9IGxpc3RfdHJ1bmNhdGUoZWxpZGVk X25vZGVzLCBudW1fZWxpZGVkX25vZGVzIC0gMSk7CisKKwkJLyogQnVpbGQgc2NhbnMgZm9yIGFs bCAob3IgdGhlIHJlbWFpbmluZykgZWxpZGVkIG5vZGVzLiAqLworCQlmb3JlYWNoX25vZGUoRWxp ZGVkTm9kZSwgZWxpZGVkX25vZGUsIGVsaWRlZF9ub2RlcykKKwkJeworCQkJKHZvaWQpIHBncGFf YnVpbGRfc2Nhbih3YWxrZXIsIHBsYW4sIGVsaWRlZF9ub2RlLAorCQkJCQkJCQkgICBiZW5lYXRo X2FueV9nYXRoZXIsIHdpdGhpbl9qb2luX3Byb2JsZW0pOworCQl9CisKKwkJLyoKKwkJICogSWYg dGhlcmUgd2VyZSBhbnkgZWxpZGVkIG5vZGVzLCB0aGVuIGV2ZXJ5dGhpbmcgYmVuZWF0aCB0aG9z ZSBub2RlcworCQkgKiBpcyBub3QgcGFydCBvZiB0aGUgc2FtZSBqb2luIHByb2JsZW0uCisJCSAq CisJCSAqIEluIG1vcmUgZGV0YWlsLCBpZiBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgd2FzIGVs aWRlZCwgdGhlbiBhCisJCSAqIHBhcnRpdGlvbndpc2Ugam9pbiB3YXMgY2hvc2VuIGFuZCBvbmx5 IGEgc2luZ2xlIGNoaWxkIHN1cnZpdmVkOyBpZgorCQkgKiBhIFN1YnF1ZXJ5U2NhbiB3YXMgZWxp ZGVkLCB0aGUgc3VicXVlcnkgd2FzIHBsYW5uZWQgd2l0aG91dAorCQkgKiBmbGF0dGVuaW5nIGl0 IGludG8gdGhlIHBhcmVudC4KKwkJICovCisJCXdpdGhpbl9qb2luX3Byb2JsZW0gPSBmYWxzZTsK KwkJam9pbl91bnJvbGxlciA9IE5VTEw7CisJfQorCisJLyoKKwkgKiBJZiB3ZSdyZSB3aXRoaW4g YSBqb2luIHByb2JsZW0sIHRoZSBqb2luIHVucm9sbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgorCSAq IGJ1aWxkaW5nIGFueSByZXF1aXJlZCBzY2FuIGZvciB0aGlzIG5vZGUuIElmIG5vdCwgd2UgZG8g aXQgaGVyZS4KKwkgKi8KKwlpZiAoIXdpdGhpbl9qb2luX3Byb2JsZW0pCisJCSh2b2lkKSBwZ3Bh X2J1aWxkX3NjYW4od2Fsa2VyLCBwbGFuLCBOVUxMLCBiZW5lYXRoX2FueV9nYXRoZXIsIGZhbHNl KTsKKworCS8qCisJICogSWYgdGhpcyBqb2luIG5lZWRzIHRvIHVucm9sbGVkIGJ1dCB0aGVyZSdz IG5vIGpvaW4gdW5yb2xsZXIgYWxyZWFkeQorCSAqIGF2YWlsYWJsZSwgY3JlYXRlIG9uZS4KKwkg Ki8KKwlpZiAoam9pbl91bnJvbGxlciA9PSBOVUxMICYmIHBncGFfaXNfam9pbihwbGFuKSkKKwl7 CisJCWpvaW5fdW5yb2xsZXIgPSBwZ3BhX2NyZWF0ZV9qb2luX3Vucm9sbGVyKCk7CisJCWpvaW5f dW5yb2xsZXJfdG9wbGV2ZWwgPSB0cnVlOworCQl3aXRoaW5fam9pbl9wcm9ibGVtID0gdHJ1ZTsK Kwl9CisKKwkvKgorCSAqIElmIHRoaXMgam9pbiBpcyB0byBiZSB1bnJvbGxlZCwgcGdwYV91bnJv bGxfam9pbigpIHdpbGwgcmV0dXJuIHRoZSBqb2luCisJICogdW5yb2xsZXIgb2JqZWN0IHRoYXQg c2hvdWxkIGJlIHBhc3NlZCBkb3duIHdoZW4gd2UgcmVjdXJzZSBpbnRvIHRoZQorCSAqIG91dGVy IGFuZCBpbm5lciBzaWRlcyBvZiB0aGUgcGxhbi4KKwkgKi8KKwlpZiAoam9pbl91bnJvbGxlciAh PSBOVUxMKQorCQlwZ3BhX3Vucm9sbF9qb2luKHdhbGtlciwgcGxhbiwgYmVuZWF0aF9hbnlfZ2F0 aGVyLCBqb2luX3Vucm9sbGVyLAorCQkJCQkJICZvdXRlcl9qb2luX3Vucm9sbGVyLCAmaW5uZXJf am9pbl91bnJvbGxlcik7CisKKwkvKiBBZGQgUlRJcyBmcm9tIHRoZSBwbGFuIG5vZGUgdG8gYWxs IGFjdGl2ZSBxdWVyeSBmZWF0dXJlcy4gKi8KKwlwZ3BhX3FmX2FkZF9wbGFuX3J0aXMoYWN0aXZl X3F1ZXJ5X2ZlYXR1cmVzLCBwbGFuLCB3YWxrZXItPnBzdG10LT5ydGFibGUpOworCisJLyoKKwkg KiBSZWN1cnNlIGludG8gdGhlIG91dGVyIGFuZCBpbm5lciBzdWJ0cmVlcy4KKwkgKgorCSAqIEFz IGFuIGV4Y2VwdGlvbiwgaWYgdGhpcyBpcyBhIEZvcmVpZ25TY2FuLCBkb24ndCByZWN1cnNlLiBw b3N0Z3Jlc19mZHcKKwkgKiBzb21ldGltZXMgc3RvcmVzIGFuIEVQUSByZWNoZWNrIHBsYW4gaW4g cGxhbi0+bGVmdHJlZSwgYnV0IHRoYXQncyBnb2luZworCSAqIHRvIG1lbnRpb24gdGhlIHNhbWUg c2V0IG9mIHJlbGF0aW9ucyBhcyB0aGUgRm9yZWlnblNjYW4gaXRzZWxmLCBhbmQgd2UKKwkgKiBo YXZlIG5vIHdheSB0byBlbWl0IGFkdmljZSB0YXJnZXRpbmcgdGhlIEVQUSBjYXNlIHZzLiB0aGUg bm9uLUVQUSBjYXNlLgorCSAqIE1vcmVvdmVyLCBpdCdzIG5vdCBlbnRpcmVseSBjbGVhciB3aGF0 IG90aGVyIEZEV3MgbWlnaHQgZG8gd2l0aCB0aGUKKwkgKiBsZWZ0IGFuZCByaWdodCBzdWJ0cmVl cy4gTWF5YmUgc29tZSBiZXR0ZXIgaGFuZGxpbmcgaXMgbmVlZGVkIGhlcmUsIGJ1dAorCSAqIGZv ciBub3csIHdlIGp1c3QgcHVudC4KKwkgKi8KKwlpZiAoIUlzQShwbGFuLCBGb3JlaWduU2Nhbikp CisJeworCQlpZiAocGxhbi0+bGVmdHRyZWUgIT0gTlVMTCkKKwkJCXBncGFfd2Fsa19yZWN1cnNp dmVseSh3YWxrZXIsIHBsYW4tPmxlZnR0cmVlLCB3aXRoaW5fam9pbl9wcm9ibGVtLAorCQkJCQkJ CQkgIG91dGVyX2pvaW5fdW5yb2xsZXIsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCQkJ ICBiZW5lYXRoX2FueV9nYXRoZXIpOworCQlpZiAocGxhbi0+cmlnaHR0cmVlICE9IE5VTEwpCisJ CQlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBwbGFuLT5yaWdodHRyZWUsIHdpdGhpbl9q b2luX3Byb2JsZW0sCisJCQkJCQkJCSAgaW5uZXJfam9pbl91bnJvbGxlciwgYWN0aXZlX3F1ZXJ5 X2ZlYXR1cmVzLAorCQkJCQkJCQkgIGJlbmVhdGhfYW55X2dhdGhlcik7CisJfQorCisJLyoKKwkg KiBJZiB3ZSBjcmVhdGVkIGEgam9pbiB1bnJvbGxlciB1cCBhYm92ZSwgdGhlbiBpdCdzIGFsc28g b3VyIGpvaW4gdG8gdXNlCisJICogaXQgdG8gYnVpbGQgdGhlIGZpbmFsIHBncGFfdW5yb2xsZWRf am9pbiwgYW5kIHRvIGRlc3Ryb3kgdGhlIG9iamVjdC4KKwkgKi8KKwlpZiAoam9pbl91bnJvbGxl cl90b3BsZXZlbCkKKwl7CisJCXBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW47CisKKwkJdWpvaW4g PSBwZ3BhX2J1aWxkX3Vucm9sbGVkX2pvaW4od2Fsa2VyLCBqb2luX3Vucm9sbGVyKTsKKwkJd2Fs a2VyLT50b3BsZXZlbF91bnJvbGxlZF9qb2lucyA9CisJCQlsYXBwZW5kKHdhbGtlci0+dG9wbGV2 ZWxfdW5yb2xsZWRfam9pbnMsIHVqb2luKTsKKwkJcGdwYV9kZXN0cm95X2pvaW5fdW5yb2xsZXIo am9pbl91bnJvbGxlcik7CisJCSh2b2lkKSBwZ3BhX3Byb2Nlc3NfdW5yb2xsZWRfam9pbih3YWxr ZXIsIHVqb2luKTsKKwl9CisKKwkvKgorCSAqIFNvbWUgcGxhbiB0eXBlcyBjYW4gaGF2ZSBhZGRp dGlvbmFsIGNoaWxkcmVuLiBOb2RlcyBsaWtlIEFwcGVuZCB0aGF0CisJICogY2FuIGhhdmUgYW55 IG51bWJlciBvZiBjaGlsZHJlbiBzdG9yZSB0aGVtIGluIGEgTGlzdDsgYSBTdWJxdWVyeVNjYW4K KwkgKiBqdXN0IGhhcyBhIGZpZWxkIGZvciBhIHNpbmdsZSBhZGRpdGlvbmFsIFBsYW4uCisJICov CisJc3dpdGNoIChub2RlVGFnKHBsYW4pKQorCXsKKwkJY2FzZSBUX0FwcGVuZDoKKwkJCXsKKwkJ CQlBcHBlbmQJICAgKmFwbGFuID0gKEFwcGVuZCAqKSBwbGFuOworCisJCQkJZXh0cmFwbGFucyA9 IGFwbGFuLT5hcHBlbmRwbGFuczsKKwkJCQlpZiAoYm1zX2lzX2VtcHR5KGFwbGFuLT5hcHByZWxp ZHMpKQorCQkJCQlwdXNoZG93bl9xdWVyeV9mZWF0dXJlcyA9IGFjdGl2ZV9xdWVyeV9mZWF0dXJl czsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CisJCQl7CisJCQkJTWVy Z2VBcHBlbmQgKm1hcGxhbiA9IChNZXJnZUFwcGVuZCAqKSBwbGFuOworCisJCQkJZXh0cmFwbGFu cyA9IG1hcGxhbi0+bWVyZ2VwbGFuczsKKwkJCQlpZiAoYm1zX2lzX2VtcHR5KG1hcGxhbi0+YXBw cmVsaWRzKSkKKwkJCQkJcHVzaGRvd25fcXVlcnlfZmVhdHVyZXMgPSBhY3RpdmVfcXVlcnlfZmVh dHVyZXM7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0JpdG1hcEFuZDoKKwkJCWV4dHJhcGxh bnMgPSAoKEJpdG1hcEFuZCAqKSBwbGFuKS0+Yml0bWFwcGxhbnM7CisJCQlicmVhazsKKwkJY2Fz ZSBUX0JpdG1hcE9yOgorCQkJZXh0cmFwbGFucyA9ICgoQml0bWFwT3IgKikgcGxhbiktPmJpdG1h cHBsYW5zOworCQkJYnJlYWs7CisJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisKKwkJCS8qCisJCQkg KiBXZSBkb24ndCBwYXNzIGRvd24gYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzIGFjcm9zcyBoZXJlLCBi ZWNhdXNlCisJCQkgKiB0aG9zZSBhcmUgc3BlY2lmaWMgdG8gYSBzdWJxdWVyeSBsZXZlbC4KKwkJ CSAqLworCQkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgKChTdWJxdWVyeVNjYW4gKikg cGxhbiktPnN1YnBsYW4sCisJCQkJCQkJCSAgMCwgTlVMTCwgTklMLCBiZW5lYXRoX2FueV9nYXRo ZXIpOworCQkJYnJlYWs7CisJCWNhc2UgVF9DdXN0b21TY2FuOgorCQkJZXh0cmFwbGFucyA9ICgo Q3VzdG9tU2NhbiAqKSBwbGFuKS0+Y3VzdG9tX3BsYW5zOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6 CisJCQlicmVhazsKKwl9CisKKwkvKiBJZiB3ZSBmb3VuZCBhIGxpc3Qgb2YgZXh0cmEgY2hpbGRy ZW4sIGl0ZXJhdGUgb3ZlciBpdC4gKi8KKwlmb3JlYWNoKGxjLCBleHRyYXBsYW5zKQorCXsKKwkJ UGxhbgkgICAqc3VicGxhbiA9IGxmaXJzdChsYyk7CisKKwkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5 KHdhbGtlciwgc3VicGxhbiwgMCwgTlVMTCwgcHVzaGRvd25fcXVlcnlfZmVhdHVyZXMsCisJCQkJ CQkJICBiZW5lYXRoX2FueV9nYXRoZXIpOworCX0KK30KKworLyoKKyAqIFBlcmZvcm0gZmluYWwg cHJvY2Vzc2luZyBvZiBhIG5ld2x5LWNvbnN0cnVjdGVkIHBncGFfdW5yb2xsZWRfam9pbi4gVGhp cworICogb25seSBuZWVkcyB0byBiZSBjYWxsZWQgZm9yIHRvcGxldmVsIHBncGFfdW5yb2xsZWRf am9pbiBvYmplY3RzLCBzaW5jZSBpdAorICogcmVjdXJzZXMgdG8gc3ViLWpvaW5zIGFzIG5lZWRl ZC4KKyAqCisgKiBPdXIgZ29hbCBpcyB0byBhZGQgdGhlIHNldCBvZiBpbm5lciByZWxpZHMgdG8g dGhlIHJlbGV2YW50IGpvaW5fc3RyYXRlZ2llcworICogbGlzdCwgYW5kIHRvIGRvIHRoZSBzYW1l IGZvciBhbnkgc3ViLWpvaW5zLiBUbyB0aGF0IGVuZCwgdGhlIHJldHVybiB2YWx1ZQorICogaXMg dGhlIHNldCBvZiByZWxpZHMgZm91bmQgYmVuZWF0aCB0aGUgdGhlIGpvaW4sIGJ1dCBpdCBpcyBl eHBlY3RlZCB0aGF0CisgKiB0aGUgdG9wbGV2ZWwgY2FsbGVyIHdpbGwgaWdub3JlIHRoaXMuCisg Ki8KK3N0YXRpYyBCaXRtYXBzZXQgKgorcGdwYV9wcm9jZXNzX3Vucm9sbGVkX2pvaW4ocGdwYV9w bGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgICBwZ3BhX3Vucm9sbGVkX2pvaW4g KnVqb2luKQoreworCUJpdG1hcHNldCAgKmFsbF9yZWxpZHMgPSBibXNfY29weSh1am9pbi0+b3V0 ZXIuc2Nhbi0+cmVsaWRzKTsKKworCS8qIElmIHRoaXMgZmFpbHMsIHdlIGRpZG4ndCB1bnJvbGwg cHJvcGVybHkuICovCisJQXNzZXJ0KHVqb2luLT5vdXRlci51bnJvbGxlZF9qb2luID09IE5VTEwp OworCisJZm9yIChpbnQgayA9IDA7IGsgPCB1am9pbi0+bmlubmVyOyArK2spCisJeworCQlwZ3Bh X2pvaW5fbWVtYmVyICptZW1iZXIgPSAmdWpvaW4tPmlubmVyW2tdOworCQlCaXRtYXBzZXQgICpy ZWxpZHM7CisKKwkJaWYgKG1lbWJlci0+dW5yb2xsZWRfam9pbiAhPSBOVUxMKQorCQkJcmVsaWRz ID0gcGdwYV9wcm9jZXNzX3Vucm9sbGVkX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkJbWVtYmVy LT51bnJvbGxlZF9qb2luKTsKKwkJZWxzZQorCQl7CisJCQlBc3NlcnQobWVtYmVyLT5zY2FuICE9 IE5VTEwpOworCQkJcmVsaWRzID0gbWVtYmVyLT5zY2FuLT5yZWxpZHM7CisJCX0KKwkJd2Fsa2Vy LT5qb2luX3N0cmF0ZWdpZXNbdWpvaW4tPnN0cmF0ZWd5W2tdXSA9CisJCQlsYXBwZW5kKHdhbGtl ci0+am9pbl9zdHJhdGVnaWVzW3Vqb2luLT5zdHJhdGVneVtrXV0sIHJlbGlkcyk7CisJCWFsbF9y ZWxpZHMgPSBibXNfYWRkX21lbWJlcnMoYWxsX3JlbGlkcywgcmVsaWRzKTsKKwl9CisKKwlyZXR1 cm4gYWxsX3JlbGlkczsKK30KKworLyoKKyAqIEFycmFuZ2UgZm9yIHRoZSBnaXZlbiBwbGFuIG5v ZGUgdG8gYmUgdHJlYXRlZCBhcyBhIHF1ZXJ5IGZlYXR1cmUgd2hlbiB0aGUKKyAqIHRyZWUgd2Fs ayByZWFjaGVzIGl0LgorICoKKyAqIE1ha2Ugc3VyZSB0byBvbmx5IHVzZSB0aGlzIGZvciBub2Rl cyB0aGF0IHRoZSB0cmVlIHdhbGsgY2FuJ3QgaGF2ZSByZWFjaGVkCisgKiB5ZXQhCisgKi8KK3Zv aWQKK3BncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fs a2VyLAorCQkJCQkJcGdwYV9xZl90eXBlIHR5cGUsIFBsYW4gKnBsYW4pCit7CisJcGdwYV9xdWVy eV9mZWF0dXJlICpxZiA9IHBncGFfYWRkX2ZlYXR1cmUod2Fsa2VyLCB0eXBlLCBwbGFuKTsKKwor CXdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzID0KKwkJbGFwcGVuZCh3YWxrZXItPmZ1dHVy ZV9xdWVyeV9mZWF0dXJlcywgcWYpOworfQorCisvKgorICogUmV0dXJuIHRoZSBsYXN0IG9mIGFu eSBlbGlkZWQgbm9kZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGxhbiBub2RlIElELgorICoKKyAq IFRoZSBsYXN0IGVsaWRlZCBub2RlIGlzIHRoZSBvbmUgdGhhdCB3b3VsZCBoYXZlIGJlZW4gdXBw ZXJtb3N0IGluIHRoZSBwbGFuCisgKiB0cmVlIGhhZCBpdCBub3QgYmVlbiByZW1vdmVkIGR1cmlu ZyBzZXRyZWZzIHByb2Nlc3NpZy4KKyAqLworRWxpZGVkTm9kZSAqCitwZ3BhX2xhc3RfZWxpZGVk X25vZGUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICpwbGFuKQoreworCUVsaWRlZE5vZGUgKmVs aWRlZF9ub2RlID0gTlVMTDsKKworCWZvcmVhY2hfbm9kZShFbGlkZWROb2RlLCBuLCBwc3RtdC0+ ZWxpZGVkTm9kZXMpCisJeworCQlpZiAobi0+cGxhbl9ub2RlX2lkID09IHBsYW4tPnBsYW5fbm9k ZV9pZCkKKwkJCWVsaWRlZF9ub2RlID0gbjsKKwl9CisKKwlyZXR1cm4gZWxpZGVkX25vZGU7Cit9 CisKKy8qCisgKiBDZXJ0YWluIHBsYW4gbm9kZXMgY2FuIHJlZmVyIHRvIGEgc2V0IG9mIFJUSXMu IEV4dHJhY3QgYW5kIHJldHVybiB0aGUgc2V0LgorICovCitCaXRtYXBzZXQgKgorcGdwYV9yZWxp ZHMoUGxhbiAqcGxhbikKK3sKKwlpZiAoSXNBKHBsYW4sIFJlc3VsdCkpCisJCXJldHVybiAoKFJl c3VsdCAqKSBwbGFuKS0+cmVsaWRzOworCWVsc2UgaWYgKElzQShwbGFuLCBGb3JlaWduU2Nhbikp CisJCXJldHVybiAoKEZvcmVpZ25TY2FuICopIHBsYW4pLT5mc19yZWxpZHM7CisJZWxzZSBpZiAo SXNBKHBsYW4sIEFwcGVuZCkpCisJCXJldHVybiAoKEFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRz OworCWVsc2UgaWYgKElzQShwbGFuLCBNZXJnZUFwcGVuZCkpCisJCXJldHVybiAoKE1lcmdlQXBw ZW5kICopIHBsYW4pLT5hcHByZWxpZHM7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEV4 dHJhY3QgdGhlIHNjYW5uZWQgUlRJIGZyb20gYSBwbGFuIG5vZGUuCisgKgorICogUmV0dXJucyAw IGlmIHRoZXJlIGlzbid0IG9uZS4KKyAqLworSW5kZXgKK3BncGFfc2NhbnJlbGlkKFBsYW4gKnBs YW4pCit7CisJc3dpdGNoIChub2RlVGFnKHBsYW4pKQorCXsKKwkJY2FzZSBUX1NlcVNjYW46CisJ CWNhc2UgVF9TYW1wbGVTY2FuOgorCQljYXNlIFRfQml0bWFwSGVhcFNjYW46CisJCWNhc2UgVF9U aWRTY2FuOgorCQljYXNlIFRfVGlkUmFuZ2VTY2FuOgorCQljYXNlIFRfU3VicXVlcnlTY2FuOgor CQljYXNlIFRfRnVuY3Rpb25TY2FuOgorCQljYXNlIFRfVGFibGVGdW5jU2NhbjoKKwkJY2FzZSBU X1ZhbHVlc1NjYW46CisJCWNhc2UgVF9DdGVTY2FuOgorCQljYXNlIFRfTmFtZWRUdXBsZXN0b3Jl U2NhbjoKKwkJY2FzZSBUX1dvcmtUYWJsZVNjYW46CisJCWNhc2UgVF9Gb3JlaWduU2NhbjoKKwkJ Y2FzZSBUX0N1c3RvbVNjYW46CisJCWNhc2UgVF9JbmRleFNjYW46CisJCWNhc2UgVF9JbmRleE9u bHlTY2FuOgorCQkJcmV0dXJuICgoU2NhbiAqKSBwbGFuKS0+c2NhbnJlbGlkOworCQlkZWZhdWx0 OgorCQkJcmV0dXJuIDA7CisJfQorfQorCisvKgorICogQ29uc3RydWN0IGEgbmV3IEJpdG1hcHNl dCBjb250YWluaW5nIG5vbi1SVEVfSk9JTiBtZW1iZXJzIG9mICdyZWxpZHMnLgorICovCitCaXRt YXBzZXQgKgorcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKEJpdG1hcHNldCAqcmVsaWRzLCBM aXN0ICpydGFibGUpCit7CisJaW50CQkJcnRpID0gLTE7CisJQml0bWFwc2V0ICAqcmVzdWx0ID0g TlVMTDsKKworCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkgPj0g MCkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcnRhYmxlKTsKKwor CQlpZiAocnRlLT5ydGVraW5kICE9IFJURV9KT0lOKQorCQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1i ZXIocmVzdWx0LCBydGkpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDcmVh dGUgYSBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgYW5kIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBhbGwgcXVl cnkgZmVhdHVyZXMKKyAqIGZvciB0aGlzIHBsYW4uCisgKi8KK3N0YXRpYyBwZ3BhX3F1ZXJ5X2Zl YXR1cmUgKgorcGdwYV9hZGRfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtl ciwKKwkJCQkgcGdwYV9xZl90eXBlIHR5cGUsIFBsYW4gKnBsYW4pCit7CisJcGdwYV9xdWVyeV9m ZWF0dXJlICpxZiA9IHBhbGxvYzBfb2JqZWN0KHBncGFfcXVlcnlfZmVhdHVyZSk7CisKKwlxZi0+ dHlwZSA9IHR5cGU7CisJcWYtPnBsYW4gPSBwbGFuOworCisJd2Fsa2VyLT5xdWVyeV9mZWF0dXJl c1txZi0+dHlwZV0gPQorCQlsYXBwZW5kKHdhbGtlci0+cXVlcnlfZmVhdHVyZXNbcWYtPnR5cGVd LCBxZik7CisKKwlyZXR1cm4gcWY7Cit9CisKKy8qCisgKiBBZGQgYSBzaW5nbGUgUlRJIHRvIGVh Y2ggYWN0aXZlIHF1ZXJ5IGZlYXR1cmUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3FmX2FkZF9y dGkoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBJbmRleCBydGkpCit7CisJZm9yZWFjaF9w dHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJ cWYtPnJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKHFmLT5yZWxpZHMsIHJ0aSk7CisJfQorfQorCisv KgorICogQWRkIGEgc2V0IG9mIFJUSXMgdG8gZWFjaCBhY3RpdmUgcXVlcnkgZmVhdHVyZS4KKyAq Lworc3RhdGljIHZvaWQKK3BncGFfcWZfYWRkX3J0aXMoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1 cmVzLCBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1 cmUsIHFmLCBhY3RpdmVfcXVlcnlfZmVhdHVyZXMpCisJeworCQlxZi0+cmVsaWRzID0gYm1zX2Fk ZF9tZW1iZXJzKHFmLT5yZWxpZHMsIHJlbGlkcyk7CisJfQorfQorCisvKgorICogQWRkIFJUSXMg ZGlyZWN0bHkgY29udGFpbmVkIGluIGEgcGxhbiBub2RlIHRvIGVhY2ggYWN0aXZlIHF1ZXJ5IGZl YXR1cmUsCisgKiBidXQgZmlsdGVyIG91dCBhbnkgam9pbiBSVElzLCBzaW5jZSBhZHZpY2UgZG9l c24ndCBtZW50aW9uIHRob3NlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9xZl9hZGRfcGxhbl9y dGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgUGxhbiAqcGxhbiwgTGlzdCAqcnRhYmxl KQoreworCUJpdG1hcHNldCAgKnJlbGlkczsKKwlJbmRleAkJcnRpOworCisJaWYgKChyZWxpZHMg PSBwZ3BhX3JlbGlkcyhwbGFuKSkgIT0gTlVMTCkKKwl7CisJCXJlbGlkcyA9IHBncGFfZmlsdGVy X291dF9qb2luX3JlbGlkcyhyZWxpZHMsIHJ0YWJsZSk7CisJCXBncGFfcWZfYWRkX3J0aXMoYWN0 aXZlX3F1ZXJ5X2ZlYXR1cmVzLCByZWxpZHMpOworCX0KKwllbHNlIGlmICgocnRpID0gcGdwYV9z Y2FucmVsaWQocGxhbikpICE9IDApCisJCXBncGFfcWZfYWRkX3J0aShhY3RpdmVfcXVlcnlfZmVh dHVyZXMsIHJ0aSk7Cit9CisKKy8qCisgKiBJZiB3ZSBnZW5lcmF0ZWQgcGxhbiBhZHZpY2UgdXNp bmcgdGhlIHByb3ZpZGVkIHdhbGtlciBvYmplY3QgYW5kIGFycmF5CisgKiBvZiBpZGVudGlmaWVy cywgd291bGQgd2UgZ2VuZXJhdGUgdGhlIHNwZWNpZmllZCB0YWcvdGFyZ2V0IGNvbWJpbmF0aW9u PworICoKKyAqIElmIHllcywgdGhlIHBsYW4gY29uZm9ybXMgdG8gdGhlIGFkdmljZTsgaWYgbm8s IGl0IGRvZXMgbm90LiBOb3RlIHRoYXQKKyAqIHdlIGhhdmUga25vdyB3YXkgb2Yga25vd2luZyB3 aGV0aGVyIHRoZSBwbGFubmVyIHdhcyBmb3JjZWQgdG8gZW1pdCBhIHBsYW4KKyAqIHRoYXQgY29u Zm9ybWVkIHRvIHRoZSBhZHZpY2Ugb3IganVzdCBoYXBwZW5lZCB0byBkbyBzby4KKyAqLworYm9v bAorcGdwYV93YWxrZXJfd291bGRfYWR2aXNlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fs a2VyLAorCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkgcGdw YV9hZHZpY2VfdGFnX3R5cGUgdGFnLAorCQkJCQkJIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0 KQoreworCUluZGV4CQlydGFibGVfbGVuZ3RoID0gbGlzdF9sZW5ndGgod2Fsa2VyLT5wc3RtdC0+ cnRhYmxlKTsKKwlCaXRtYXBzZXQgICpyZWxpZHMgPSBOVUxMOworCisJaWYgKHRhZyA9PSBQR1BB X1RBR19KT0lOX09SREVSKQorCXsKKwkJZm9yZWFjaF9wdHIocGdwYV91bnJvbGxlZF9qb2luLCB1 am9pbiwgd2Fsa2VyLT50b3BsZXZlbF91bnJvbGxlZF9qb2lucykKKwkJeworCQkJaWYgKHBncGFf d2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlcyh1am9pbiwgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJ CQkJICAgcnRfaWRlbnRpZmllcnMsIHRhcmdldCwgdHJ1ZSkpCisJCQkJcmV0dXJuIHRydWU7CisJ CX0KKworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKHRhcmdldC0+dHR5cGUgPT0gUEdQQV9U QVJHRVRfSURFTlRJRklFUikKKwl7CisJCUluZGV4CQlydGk7CisKKwkJcnRpID0gcGdwYV9jb21w dXRlX3J0aV9mcm9tX2lkZW50aWZpZXIocnRhYmxlX2xlbmd0aCwgcnRfaWRlbnRpZmllcnMsCisJ CQkJCQkJCQkJCSAgICZ0YXJnZXQtPnJpZCk7CisJCWlmIChydGkgPT0gMCkKKwkJCXJldHVybiBm YWxzZTsKKwkJcmVsaWRzID0gYm1zX21ha2Vfc2luZ2xldG9uKHJ0aSk7CisJfQorCWVsc2UKKwl7 CisJCUFzc2VydCh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCk7CisJ CWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNo aWxkcmVuKQorCQl7CisJCQlJbmRleAkJcnRpOworCisJCQlBc3NlcnQoY2hpbGRfdGFyZ2V0LT50 dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKTsKKwkJCXJ0aSA9IHBncGFfY29tcHV0ZV9y dGlfZnJvbV9pZGVudGlmaWVyKHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCQkgICBydF9pZGVu dGlmaWVycywKKwkJCQkJCQkJCQkJCSAgICZjaGlsZF90YXJnZXQtPnJpZCk7CisJCQlpZiAocnRp ID09IDApCisJCQkJcmV0dXJuIGZhbHNlOworCQkJcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocmVs aWRzLCBydGkpOworCQl9CisJfQorCisJc3dpdGNoICh0YWcpCisJeworCQljYXNlIFBHUEFfVEFH X0pPSU5fT1JERVI6CisJCQkvKiBzaG91bGQgaGF2ZSBiZWVuIGhhbmRsZWQgYWJvdmUgKi8KKwkJ CXBnX3VucmVhY2hhYmxlKCk7CisJCQlicmVhazsKKwkJY2FzZSBQR1BBX1RBR19CSVRNQVBfSEVB UF9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2ZpbmRfc2Nhbih3YWxrZXIsCisJCQkJCQkJ CQkJIFBHUEFfU0NBTl9CSVRNQVBfSEVBUCwKKwkJCQkJCQkJCQkgcmVsaWRzKSAhPSBOVUxMOwor CQljYXNlIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9maW5k X3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCSBQR1BBX1NDQU5fRk9SRUlHTiwKKwkJCQkJCQkJCQkg cmVsaWRzKSAhPSBOVUxMOworCQljYXNlIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjoKKwkJCXsK KwkJCQlwZ3BhX3NjYW4gICpzY2FuOworCisJCQkJc2NhbiA9IHBncGFfd2Fsa2VyX2ZpbmRfc2Nh bih3YWxrZXIsIFBHUEFfU0NBTl9JTkRFWF9PTkxZLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJ CQlpZiAoc2NhbiA9PSBOVUxMKQorCQkJCQlyZXR1cm4gZmFsc2U7CisKKwkJCQlyZXR1cm4gcGdw YV93YWxrZXJfaW5kZXhfdGFyZ2V0X21hdGNoZXNfcGxhbih0YXJnZXQtPml0YXJnZXQsIHNjYW4t PnBsYW4pOworCQkJfQorCQljYXNlIFBHUEFfVEFHX0lOREVYX1NDQU46CisJCQl7CisJCQkJcGdw YV9zY2FuICAqc2NhbjsKKworCQkJCXNjYW4gPSBwZ3BhX3dhbGtlcl9maW5kX3NjYW4od2Fsa2Vy LCBQR1BBX1NDQU5fSU5ERVgsCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQkJCWlmIChzY2FuID09 IE5VTEwpCisJCQkJCXJldHVybiBmYWxzZTsKKworCQkJCXJldHVybiBwZ3BhX3dhbGtlcl9pbmRl eF90YXJnZXRfbWF0Y2hlc19wbGFuKHRhcmdldC0+aXRhcmdldCwgc2Nhbi0+cGxhbik7CisJCQl9 CisJCWNhc2UgUEdQQV9UQUdfUEFSVElUSU9OV0lTRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9m aW5kX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRSwKKwkJ CQkJCQkJCQkgcmVsaWRzKSAhPSBOVUxMOworCQljYXNlIFBHUEFfVEFHX1NFUV9TQ0FOOgorCQkJ cmV0dXJuIHBncGFfd2Fsa2VyX2ZpbmRfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJIFBHUEFfU0NB Tl9TRVEsCisJCQkJCQkJCQkJIHJlbGlkcykgIT0gTlVMTDsKKwkJY2FzZSBQR1BBX1RBR19USURf U0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9maW5kX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJ CSBQR1BBX1NDQU5fVElELAorCQkJCQkJCQkJCSByZWxpZHMpICE9IE5VTEw7CisJCWNhc2UgUEdQ QV9UQUdfR0FUSEVSOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUod2Fs a2VyLAorCQkJCQkJCQkJCQkJUEdQQVFGX0dBVEhFUiwKKwkJCQkJCQkJCQkJCXJlbGlkcyk7CisJ CWNhc2UgUEdQQV9UQUdfR0FUSEVSX01FUkdFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRh aW5zX2ZlYXR1cmUod2Fsa2VyLAorCQkJCQkJCQkJCQkJUEdQQVFGX0dBVEhFUl9NRVJHRSwKKwkJ CQkJCQkJCQkJCXJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRToK KwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0dXJlKHdhbGtlciwKKwkJCQkJCQkJ CQkJCVBHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFLAorCQkJCQkJCQkJCQkJcmVsaWRzKTsKKwkJ Y2FzZSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29u dGFpbnNfZmVhdHVyZSh3YWxrZXIsCisJCQkJCQkJCQkJCQlQR1BBUUZfU0VNSUpPSU5fVU5JUVVF LAorCQkJCQkJCQkJCQkJcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19IQVNIX0pPSU46CisJCQly ZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSBKU1RS QVRfSEFTSF9KT0lOLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19NRVJH RV9KT0lOX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4o d2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJQUxJWkUsCisJCQkJ CQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU46CisJCQly ZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSBKU1RS QVRfTUVSR0VfSk9JTl9QTEFJTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9U QUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFp bnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSBKU1RSQVRfTkVTVEVEX0xPT1BfTUFURVJJQUxJ WkUsCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01F TU9JWkU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJ CQkJCQkJCSBKU1RSQVRfTkVTVEVEX0xPT1BfTUVNT0laRSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7 CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfUExBSU46CisJCQlyZXR1cm4gcGdwYV93YWxr ZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSBKU1RSQVRfTkVTVEVEX0xPT1Bf UExBSU4sCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX05PX0dBVEhFUjoK KwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19ub19nYXRoZXIod2Fsa2VyLCByZWxpZHMp OworCX0KKworCS8qIHNob3VsZCBub3QgZ2V0IGhlcmUgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisK Ky8qCisgKiBEb2VzIHRoZSBpbmRleCB0YXJnZXQgbWF0Y2ggdGhlIFBsYW4/CisgKgorICogU2hv dWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gd2Uga25vdyB0aGF0IGl0YXJnZXQgbWFuZGF0ZXMgYW4g SW5kZXggU2NhbiBvcgorICogSW5kZXggT25seSBTY2FuIGFuZCB0aGlzIGNvcnJlc3BvbmRzIHRv IHRoZSB0eXBlIG9mIFBsYW4uIEhlcmUsIG91ciBqb2IgaXMKKyAqIGp1c3QgdG8gY2hlY2sgd2hl dGhlciBpdCdzIHRoZSBzYW1lIGluZGV4LgorICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJf aW5kZXhfdGFyZ2V0X21hdGNoZXNfcGxhbihwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldCwgUGxh biAqcGxhbikKK3sKKwlPaWQJCQlpbmRleG9pZCA9IEludmFsaWRPaWQ7CisKKwkvKiBSZXRyaWV2 ZSB0aGUgaW5kZXggT0lEIGZyb20gdGhlIHBsYW4uICovCisJaWYgKElzQShwbGFuLCBJbmRleFNj YW4pKQorCQlpbmRleG9pZCA9ICgoSW5kZXhTY2FuICopIHBsYW4pLT5pbmRleGlkOworCWVsc2Ug aWYgKElzQShwbGFuLCBJbmRleE9ubHlTY2FuKSkKKwkJaW5kZXhvaWQgPSAoKEluZGV4T25seVNj YW4gKikgcGxhbiktPmluZGV4aWQ7CisJZWxzZQorCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVk IG5vZGUgdHlwZTogJWQiLCAoaW50KSBub2RlVGFnKHBsYW4pKTsKKworCS8qIENoZWNrIHdoZXRo ZXIgc2NoZW1hIG5hbWUgbWF0Y2hlcywgaWYgc3BlY2lmaWVkIGluIGluZGV4IHRhcmdldC4gKi8K KwlpZiAoaXRhcmdldC0+aW5kbmFtZXNwYWNlICE9IE5VTEwpCisJeworCQlPaWQJCQluc3BvaWQg PSBnZXRfcmVsX25hbWVzcGFjZShpbmRleG9pZCk7CisJCWNoYXIJICAgKnJlbG5hbWVzcGFjZSA9 IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKG5zcG9pZCk7CisKKwkJaWYgKHN0cmNtcChpdGFy Z2V0LT5pbmRuYW1lc3BhY2UsIHJlbG5hbWVzcGFjZSkgIT0gMCkKKwkJCXJldHVybiBmYWxzZTsK Kwl9CisKKwkvKiBDaGVjayB3aGV0aGVyIHJlbGF0aW9uIG5hbWUgbWF0Y2hlcy4gKi8KKwlyZXR1 cm4gKHN0cmNtcChpdGFyZ2V0LT5pbmRuYW1lLCBnZXRfcmVsX25hbWUoaW5kZXhvaWQpKSA9PSAw KTsKK30KKworLyoKKyAqIERvZXMgYW4gdW5yb2xsZWQgam9pbiBtYXRjaCB0aGUgam9pbiBvcmRl ciBzcGVjaWZpZWQgYnkgYW4gYWR2aWNlIHRhcmdldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFf d2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlcyhwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luLAorCQkJ CQkJCSAgIEluZGV4IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpy dF9pZGVudGlmaWVycywKKwkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJ CQkJCQkgICBib29sIHRvcGxldmVsKQoreworCWludAkJCW5jaGlsZHJlbiA9IGxpc3RfbGVuZ3Ro KHRhcmdldC0+Y2hpbGRyZW4pOworCisJQXNzZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJH RVRfT1JERVJFRF9MSVNUKTsKKworCS8qIEF0IHRvcGxldmVsLCB3ZSBhbGxvdyBhIHByZWZpeCBt YXRjaC4gKi8KKwlpZiAodG9wbGV2ZWwpCisJeworCQlpZiAobmNoaWxkcmVuID4gdWpvaW4tPm5p bm5lciArIDEpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCWVsc2UKKwl7CisJCWlmIChuY2hpbGRy ZW4gIT0gdWpvaW4tPm5pbm5lciArIDEpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogT3V0 ZXJtb3N0IHJlbCBtdXN0IG1hdGNoLiAqLworCWlmICghcGdwYV93YWxrZXJfam9pbl9vcmRlcl9t YXRjaGVzX21lbWJlcigmdWpvaW4tPm91dGVyLAorCQkJCQkJCQkJCQkgICBydGFibGVfbGVuZ3Ro LAorCQkJCQkJCQkJCQkgICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJICAgbGluaXRpYWwo dGFyZ2V0LT5jaGlsZHJlbikpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBFYWNoIGlubmVyIHJl bCBtdXN0IG1hdGNoLiAqLworCWZvciAoaW50IG4gPSAwOyBuIDwgbmNoaWxkcmVuIC0gMTsgKytu KQorCXsKKwkJcGdwYV9hZHZpY2VfdGFyZ2V0ICpjaGlsZF90YXJnZXQgPSBsaXN0X250aCh0YXJn ZXQtPmNoaWxkcmVuLCBuICsgMSk7CisKKwkJaWYgKCFwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21h dGNoZXNfbWVtYmVyKCZ1am9pbi0+aW5uZXJbbl0sCisJCQkJCQkJCQkJCQkgICBydGFibGVfbGVu Z3RoLAorCQkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCQkgICBjaGls ZF90YXJnZXQpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisv KgorICogRG9lcyBvbmUgbWVtYmVyIG9mIGFuIHVucm9sbGVkIGpvaW4gbWF0Y2ggYW4gYWR2aWNl IHRhcmdldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hl c19tZW1iZXIocGdwYV9qb2luX21lbWJlciAqbWVtYmVyLAorCQkJCQkJCQkJICBJbmRleCBydGFi bGVfbGVuZ3RoLAorCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAor CQkJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlCaXRtYXBzZXQgICpy ZWxpZHMgPSBOVUxMOworCisJaWYgKG1lbWJlci0+dW5yb2xsZWRfam9pbiAhPSBOVUxMKQorCXsK KwkJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUKQorCQkJcmV0 dXJuIGZhbHNlOworCQlyZXR1cm4gcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKG1lbWJl ci0+dW5yb2xsZWRfam9pbiwKKwkJCQkJCQkJCQkJICBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJ CQkgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgIHRhcmdldCwKKwkJCQkJCQkJCQkJICBm YWxzZSk7CisJfQorCisJQXNzZXJ0KG1lbWJlci0+c2NhbiAhPSBOVUxMKTsKKwlzd2l0Y2ggKHRh cmdldC0+dHR5cGUpCisJeworCQljYXNlIFBHUEFfVEFSR0VUX09SREVSRURfTElTVDoKKwkJCS8q IENvdWxkIG9ubHkgbWF0Y2ggYW4gdW5yb2xsZWQgam9pbiAqLworCQkJcmV0dXJuIGZhbHNlOwor CisJCWNhc2UgUEdQQV9UQVJHRVRfVU5PUkRFUkVEX0xJU1Q6CisJCQl7CisJCQkJZm9yZWFjaF9w dHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJ CQkJeworCQkJCQlJbmRleAkJcnRpOworCisJCQkJCXJ0aSA9IHBncGFfY29tcHV0ZV9ydGlfZnJv bV9pZGVudGlmaWVyKHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZp ZXJzLAorCQkJCQkJCQkJCQkJCQkgICAmY2hpbGRfdGFyZ2V0LT5yaWQpOworCQkJCQlpZiAocnRp ID09IDApCisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCXJlbGlkcyA9IGJtc19hZGRfbWVtYmVy KHJlbGlkcywgcnRpKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisKKwkJY2FzZSBQR1BBX1RB UkdFVF9JREVOVElGSUVSOgorCQkJeworCQkJCUluZGV4CQlydGk7CisKKwkJCQlydGkgPSBwZ3Bh X2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmllcihydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkJ CSAgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkJCSAgICZ0YXJnZXQtPnJpZCk7CisJCQkJ aWYgKHJ0aSA9PSAwKQorCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJcmVsaWRzID0gYm1zX21ha2Vf c2luZ2xldG9uKHJ0aSk7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCisJcmV0dXJuIGJtc19lcXVh bChtZW1iZXItPnNjYW4tPnJlbGlkcywgcmVsaWRzKTsKK30KKworLyoKKyAqIEZpbmQgdGhlIHNj YW4gd2hlcmUgdGhlIHdhbGtlciBzYXlzIHRoYXQgdGhlIGdpdmVuIHNjYW4gc3RyYXRlZ3kgc2hv dWxkIGJlCisgKiB1c2VkIGZvciB0aGUgZ2l2ZW4gcmVsaWQgc2V0LCBpZiBvbmUgZXhpc3RzLgor ICoKKyAqIFJldHVybnMgdGhlIHBncGFfc2NhbiBvYmplY3QsIG9yIE5VTEwgaWYgbm9uZSB3YXMg Zm91bmQuCisgKi8KK3N0YXRpYyBwZ3BhX3NjYW4gKgorcGdwYV93YWxrZXJfZmluZF9zY2FuKHBn cGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkgIHBncGFfc2Nhbl9zdHJhdGVn eSBzdHJhdGVneSwKKwkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlMaXN0CSAgICpzY2Fu cyA9IHdhbGtlci0+c2NhbnNbc3RyYXRlZ3ldOworCisJZm9yZWFjaF9wdHIocGdwYV9zY2FuLCBz Y2FuLCBzY2FucykKKwl7CisJCWlmIChibXNfZXF1YWwoc2Nhbi0+cmVsaWRzLCByZWxpZHMpKQor CQkJcmV0dXJuIHNjYW47CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBEb2VzIHRo aXMgd2Fsa2VyIHNheSB0aGF0IHRoZSBnaXZlbiBxdWVyeSBmZWF0dXJlIGFwcGxpZXMgdG8gdGhl IGdpdmVuCisgKiByZWxpZCBzZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9jb250 YWluc19mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSBw Z3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJTGlzdAkg ICAqcXVlcnlfZmVhdHVyZXMgPSB3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3R5cGVdOworCisJZm9y ZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwgcXVlcnlfZmVhdHVyZXMpCisJeworCQlp ZiAoYm1zX2VxdWFsKHFmLT5yZWxpZHMsIHJlbGlkcykpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisK KwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBEb2VzIHRoZSB3YWxrZXIgc2F5IHRoYXQgdGhl IGdpdmVuIGpvaW4gc3RyYXRlZ3kgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZQorICogZ2l2ZW4gcmVs aWQgc2V0PworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfY29udGFpbnNfam9pbihwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCSAgcGdwYV9qb2luX3N0cmF0ZWd5 IHN0cmF0ZWd5LAorCQkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlMaXN0CSAgICpqb2lu X3N0cmF0ZWdpZXMgPSB3YWxrZXItPmpvaW5fc3RyYXRlZ2llc1tzdHJhdGVneV07CisKKwlmb3Jl YWNoX3B0cihCaXRtYXBzZXQsIGpzcmVsaWRzLCBqb2luX3N0cmF0ZWdpZXMpCisJeworCQlpZiAo Ym1zX2VxdWFsKGpzcmVsaWRzLCByZWxpZHMpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0 dXJuIGZhbHNlOworfQorCisvKgorICogRG9lcyB0aGUgd2Fsa2VyIHNheSB0aGF0IHRoZSBnaXZl biByZWxpZHMgc2hvdWxkIGJlIG1hcmtlZCBhcyBOT19HQVRIRVI/CisgKi8KK3N0YXRpYyBib29s CitwZ3BhX3dhbGtlcl9jb250YWluc19ub19nYXRoZXIocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 ICp3YWxrZXIsCisJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJcmV0dXJuIGJtc19p c19zdWJzZXQocmVsaWRzLCB3YWxrZXItPm5vX2dhdGhlcl9zY2Fucyk7Cit9CmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmggYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfd2Fsa2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmI5MWEzNmNhM2RkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3dhbGtlci5oCkBAIC0wLDAgKzEsMTQxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBwZ3BhX3dhbGtlci5oCisgKgkgIFBsYW4gdHJlZSBpdGVyYXRpb24KKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaAorICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfV0FMS0VSX0gKKyNkZWZpbmUgUEdQQV9X QUxLRVJfSAorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKyNpbmNsdWRlICJwZ3BhX2pvaW4uaCIK KyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKKworLyoKKyAqIFdoZW4gZ2VuZXJhdGluZyBhZHZpY2Us IHdlIHNob3VsZCBlbWl0IGVpdGhlciBTRU1JSk9JTl9VTklRVUUgYWR2aWNlIG9yCisgKiBTRU1J Sk9JTl9OT05fVU5JUVVFIGFkdmljZSBmb3IgZWFjaCBzZW1pam9pbiBkZXBlbmRpbmcgb24gd2hl dGhlciB3ZSBjaG9zZQorICogdG8gaW1wbGVtZW50IGl0IGFzIGEgc2VtaWpvaW4gb3Igd2hldGhl ciB3ZSBpbnN0ZWFkIGNob3NlIHRvIG1ha2UgdGhlCisgKiBudWxsYWJsZSBzaWRlIHVuaXF1ZSBh bmQgdGhlbiBwZXJmb3JtIGFuIGlubmVyIGpvaW4uIFdoZW4gdGhlIG1ha2UtdW5pcXVlCisgKiBz dHJhdGVneSBpcyBub3QgY2hvc2VuLCBpdCdzIG5vdCBlYXN5IHRvIHRlbGwgZnJvbSB0aGUgZmlu YWwgcGxhbiB0cmVlCisgKiB3aGV0aGVyIGl0IHdhcyBjb25zaWRlcmVkLiBUaGF0J3MgYXdrd2Fy ZCwgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGVtaXQKKyAqIHVzZWxlc3MgU0VNSUpPSU5fTk9O X1VOSVFVRSBhZHZpY2Ugd2hlbiB0aGVyZSB3YXMgbm8gZGVjaXNpb24gdG8gYmUgbWFkZS4KKyAq CisgKiBUbyBhdm9pZCB0aGF0LCBkdXJpbmcgcGxhbm5pbmcsIHdlIGNyZWF0ZSBhIHBncGFfc2pf dW5pcXVlX3JlbCBmb3IgZWFjaAorICogcmVsYXRpb24gdGhhdCB3ZSBjb25zaWRlcmVkIG1ha2lu ZyB1bmlxdWUgZm9yIHB1cnBvc2VzIG9mIHNlbWlqb2luIHBsYW5uaW5nLgorICovCit0eXBlZGVm IHN0cnVjdCBwZ3BhX3NqX3VuaXF1ZV9yZWwKK3sKKwljaGFyCSAgICpwbGFuX25hbWU7CisJQml0 bWFwc2V0ICAqcmVsaWRzOworfSBwZ3BhX3NqX3VuaXF1ZV9yZWw7CisKKy8qCisgKiBXZSB1c2Ug dGhlIHRlcm0gInF1ZXJ5IGZlYXR1cmUiIHRvIHJlZmVyIHRvIHBsYW4gbm9kZXMgdGhhdCBhcmUg aW50ZXJlc3RpbmcKKyAqIGluIHRoZSBmb2xsb3dpbmcgd2F5OiB0byBnZW5lcmF0ZSBhZHZpY2Us IHdlJ2xsIG5lZWQgdG8ga25vdyB0aGUgc2V0IG9mCisgKiBzYW1lLXN1YnF1ZXJ5LCBub24tam9p biBSVElzIG9jY3VyaW5nIGF0IG9yIGJlbG93IHRoYXQgcGxhbiBub2RlLCB3aXRob3V0CisgKiBh ZG1peHR1cmUgb2YgcGFyZW50IGFuZCBjaGlsZCBSVElzLgorICoKKyAqIEZvciBleGFtcGxlLCBH YXRoZXIgbm9kZXMsIGRlc2lnaW5hdGVkIGJ5IFBHUEFRRl9HQVRIRVIsIGFuZCBHYXRoZXIgTWVy Z2UKKyAqIG5vZGVzLCBkZXNpZ25hdGVkIGJ5IFBHUEFRRl9HQVRIRVJfTUVSR0UsIGFyZSBxdWVy eSBmZWF0dXJlcywgYmVjYXVzZSB3ZSdsbAorICogd2FudCB0byBhZG1pdCBzb21lIGtpbmQgb2Yg YWR2aWNlIHRoYXQgZGVzY3JpYmVzIHRoZSBwb3J0aW9uIG9mIHRoZSBwbGFuCisgKiB0cmVlIHRo YXQgYXBwZWFycyBiZW5lYXRoIHRob3NlIG5vZGVzLgorICoKKyAqIEVhY2ggc2VtaWpvaW4gY2Fu IGJlIGltcGxlbWVudGVkIGVpdGhlciBieSBkaXJlY3RseSBwZXJmb3JtaW5nIGEgc2VtaWpvaW4s CisgKiBvciBieSBtYWtpbmcgb25lIHNpZGUgdW5pcXVlIGFuZCB0aGVuIHBlcmZvcm1pbmcgYSBu b3JtYWwgam9pbi4gRWl0aGVyIHdheSwKKyAqIHdlIHVzZSBhIHF1ZXJ5IGZlYXR1cmUgdG8gbm90 aWNlIHdoYXQgZGVjaXNpb24gd2FzIG1hZGUsIHNvIHRoYXQgd2UgY2FuCisgKiBkZXNjcmliZSBp dCBieSBlbnVtZXJhdGluZyB0aGUgUlRJcyBvbiB0aGF0IHNpZGUgb2YgdGhlIGpvaW4uCisgKgor ICogVG8gZWxhYm9yYXRlIG9uIHRoZSAibm8gYWRtaXh0dXJlIG9mIHBhcmVudCBhbmQgY2hpbGQg UlRJcyIgcnVsZSwgaW4gYWxsIG9mCisgKiB0aGVzZSBjYXNlcywgaWYgdGhlIGVudGlyZXR5IG9m IGFuIGluaGVyaXRhbmNlIGhpZXJhcmNoeSBhcHBlYXJzIGJlbmVhdGgKKyAqIHRoZSBxdWVyeSBm ZWF0dXJlLCB3ZSBvbmx5IHdhbnQgdG8gbmFtZSB0aGUgcGFyZW50IHRhYmxlLiBCdXQgaXQncyBh bHNvCisgKiBwb3NzaWJsZSB0byBoYXZlIGNhc2VzIHdoZXJlIHdlIG11c3QgbmFtZSBjaGlsZCB0 YWJsZXMuIFRoaXMgaXMgcGFydGljdWxhcmx5CisgKiBsaWtlbHkgdG8gaGFwcGVuIHdoZW4gcGFy dGl0aW9ud2lzZSBqb2luIGlzIGluIHVzZSwgYnV0IGNvdWxkIGhhcHBlbiBmb3IKKyAqIEdhdGhl ciBvciBHYXRoZXIgTWVyZ2UgZXZlbiB3aXRob3V0IHRoYXQsIGlmIG9uZSBvZiB0aG9zZSBhcHBl YXJzIGJlbG93CisgKiBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSBmb3IgYSBzaW5nbGUg dGFibGUuCisgKi8KK3R5cGVkZWYgZW51bSBwZ3BhX3FmX3R5cGUKK3sKKwlQR1BBUUZfR0FUSEVS LAorCVBHUEFRRl9HQVRIRVJfTUVSR0UsCisJUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUUsCisJ UEdQQVFGX1NFTUlKT0lOX1VOSVFVRQorCS8qIHVwZGF0ZSBOVU1fUEdQQV9RRl9UWVBFUyBpZiB5 b3UgYWRkIGFueXRoaW5nIGhlcmUgKi8KK30gcGdwYV9xZl90eXBlOworCisjZGVmaW5lIE5VTV9Q R1BBX1FGX1RZUEVTICgoaW50KSBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFICsgMSkKKworLyoKKyAq IEZvciBlYWNoIHF1ZXJ5IGZlYXR1cmUsIHdlIGtlZXAgdHJhY2sgb2YgdGhlIGZlYXR1cmUgdHlw ZSBhbmQgdGhlIHNldCBvZgorICogcmVsaWRzIHRoYXQgd2UgZm91bmQgdW5kZXJuZWF0aCB0aGUg cmVsZXZhbnQgcGxhbiBub2RlLiBTZWUgdGhlIGNvbW1lbnRzCisgKiBvbiBwZ3BhX3FmX3R5cGUs IGFib3ZlLCBmb3IgYWRkaXRpb25hbCBkZXRhaWxzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3Bh X3F1ZXJ5X2ZlYXR1cmUKK3sKKwlwZ3BhX3FmX3R5cGUgdHlwZTsKKwlQbGFuCSAgICpwbGFuOwor CUJpdG1hcHNldCAgKnJlbGlkczsKK30gcGdwYV9xdWVyeV9mZWF0dXJlOworCisvKgorICogQ29u dGV4dCBvYmplY3QgZm9yIHBsYW4gdHJlZSB3YWxrLgorICoKKyAqIHBzdG10IGlzIHRoZSBQbGFu bmVkU3RtdCB3ZSdyZSBzdHVkeWluZy4KKyAqCisgKiBzY2FucyBpcyBhbiBhcnJheSBvZiBsaXN0 cyBvZiBwZ3BhX3NjYW4gb2JqZWN0cy4gVGhlIGFycmF5IGlzIGluZGV4ZWQgYnkKKyAqIHRoZSBz Y2FuJ3MgcGdwYV9zY2FuX3N0cmF0ZWd5LgorICoKKyAqIG5vX2dhdGhlcl9zY2FucyBpcyB0aGUg c2V0IG9mIHNjYW4gUlRJcyB0aGF0IGRvIG5vdCBhcHBlYXIgYmVuZWF0aCBhbnkKKyAqIEdhdGhl ciBvciBHYXRoZXIgTWVyZ2Ugbm9kZS4KKyAqCisgKiB0b3BsZXZlbF91bnJvbGxlZF9qb2lucyBp cyBhIGxpc3Qgb2YgYWxsIHBncGFfdW5yb2xsZWRfam9pbiBvYmplY3RzIHRoYXQKKyAqIGFyZSBu b3QgYSBjaGlsZCBvZiBzb21lIG90aGVyIHBncGFfdW5yb2xsZWRfam9pbi4KKyAqCisgKiBqb2lu X3N0cmF0ZWd5IGlzIGFuIGFycmF5IG9mIGxpc3RzIG9mIEJpdG1hcHNldCBvYmplY3RzLiBFYWNo IEJpdG1hcHNldAorICogaXMgdGhlIHNldCBvZiByZWxpZHMgdGhhdCBhcHBlYXJzIG9uIHRoZSBp bm5lciBzaWRlIG9mIHNvbWUgam9pbiAoZXhjbHVkaW5nCisgKiBSVElzIGZyb20gcGFydGl0aW9u IGNoaWxkcmVuIGFuZCBzdWJxdWVyaWVzKS4gVGhlIGFycmF5IGlzIGluZGV4ZWQgYnkKKyAqIHBn cGFfam9pbl9zdHJhdGVneS4KKyAqCisgKiBxdWVyeV9mZWF0dXJlcyBpcyBhbiBhcnJheSBsaXN0 cyBvZiBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgb2JqZWN0cywgaW5kZXhlZAorICogYnkgcGdwYV9xZl90 eXBlLgorICoKKyAqIGZ1dHVyZV9xdWVyeV9mZWF0dXJlcyBpcyBvbmx5IHVzZWQgZHVyaW5nIHRo ZSBwbGFuIHRyZWUgd2FsayBhbmQgc2hvdWxkCisgKiBiZSBlbXB0eSB3aGVuIHRoZSB0cmVlIHdh bGsgY29uY2x1ZGVzLiBJdCBpcyBhIGxpc3Qgb2YgcGdwYV9xdWVyeV9mZWF0dXJlCisgKiBvYmpl Y3RzIGZvciBQbGFuIG5vZGVzIHRoYXQgdGhlIHBsYW4gdHJlZSB3YWxrIGhhcyBub3QgeWV0IGVu Y291bnRlcmVkOworICogd2hlbiBlbmNvdW50ZXJlZCwgdGhleSB3aWxsIGJlIG1vdmVkIHRvIHRo ZSBsaXN0IG9mIGFjdGl2ZSBxdWVyeSBmZWF0dXJlcworICogdGhhdCBpcyBwcm9wYWdhdGVkIHZp YSB0aGUgY2FsbCBzdGFjay4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9wbGFuX3dhbGtlcl9j b250ZXh0Cit7CisJUGxhbm5lZFN0bXQgKnBzdG10OworCUxpc3QJICAgKnNjYW5zW05VTV9QR1BB X1NDQU5fU1RSQVRFR1ldOworCUJpdG1hcHNldCAgKm5vX2dhdGhlcl9zY2FuczsKKwlMaXN0CSAg ICp0b3BsZXZlbF91bnJvbGxlZF9qb2luczsKKwlMaXN0CSAgICpqb2luX3N0cmF0ZWdpZXNbTlVN X1BHUEFfSk9JTl9TVFJBVEVHWV07CisJTGlzdAkgICAqcXVlcnlfZmVhdHVyZXNbTlVNX1BHUEFf UUZfVFlQRVNdOworCUxpc3QJICAgKmZ1dHVyZV9xdWVyeV9mZWF0dXJlczsKK30gcGdwYV9wbGFu X3dhbGtlcl9jb250ZXh0OworCitleHRlcm4gdm9pZCBwZ3BhX3BsYW5fd2Fsa2VyKHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSBQbGFubmVkU3RtdCAqcHN0bXQsCisJ CQkJCQkJIExpc3QgKnNqX3VuaXF1ZV9yZWxzKTsKKworZXh0ZXJuIHZvaWQgcGdwYV9hZGRfZnV0 dXJlX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQlw Z3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkJCVBsYW4gKnBsYW4pOworCitleHRlcm4gRWxpZGVk Tm9kZSAqcGdwYV9sYXN0X2VsaWRlZF9ub2RlKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqcGxh bik7CitleHRlcm4gQml0bWFwc2V0ICpwZ3BhX3JlbGlkcyhQbGFuICpwbGFuKTsKK2V4dGVybiBJ bmRleCBwZ3BhX3NjYW5yZWxpZChQbGFuICpwbGFuKTsKK2V4dGVybiBCaXRtYXBzZXQgKnBncGFf ZmlsdGVyX291dF9qb2luX3JlbGlkcyhCaXRtYXBzZXQgKnJlbGlkcywgTGlzdCAqcnRhYmxlKTsK KworZXh0ZXJuIGJvb2wgcGdwYV93YWxrZXJfd291bGRfYWR2aXNlKHBncGFfcGxhbl93YWxrZXJf Y29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmll cnMsCisJCQkJCQkJCQkgcGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnLAorCQkJCQkJCQkJIHBncGFf YWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3NxbC9nYXRoZXIuc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwv Z2F0aGVyLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzc2NjY2 YmYxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRo ZXIuc3FsCkBAIC0wLDAgKzEsODYgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhf cGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMTsKK1NFVCBwYXJhbGxlbF9zZXR1cF9jb3N0 ID0gMDsKK1NFVCBwYXJhbGxlbF90dXBsZV9jb3N0ID0gMDsKK1NFVCBtaW5fcGFyYWxsZWxfdGFi bGVfc2Nhbl9zaXplID0gMDsKK1NFVCBkZWJ1Z19wYXJhbGxlbF9xdWVyeSA9IG9mZjsKKworQ1JF QVRFIFRBQkxFIGd0X2RpbSAoaWQgc2VyaWFsIHByaW1hcnkga2V5LCBkaW0gdGV4dCkKKwlXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBndF9kaW0gKGRpbSkg U0VMRUNUIHJhbmRvbSgpOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFD VVVNIEFOQUxZWkUgZ3RfZGltOworCitDUkVBVEUgVEFCTEUgZ3RfZmFjdCAoCisJaWQgaW50IG5v dCBudWxsLAorCWRpbV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgZ3RfZGltIChpZCkK KykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gZ3RfZmFj dAorCVNFTEVDVCBnLCAoZyUzKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOwor VkFDVVVNIEFOQUxZWkUgZ3RfZmFjdDsKKworLS0gQnkgZGVmYXVsdCwgd2UgZXhwZWN0IEdhdGhl ciBNZXJnZSB3aXRoIGEgcGFyYWxsZWwgaGFzaCBqb2luLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworCistLSBGb3JjZSBHYXRoZXIgb3IgR2F0aGVy IE1lcmdlIG9mIGJvdGggcmVsYXRpb25zIHRvZ2V0aGVyLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBkKSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK0NPTU1JVDsKKworLS0gRm9yY2UgYSBzZXBhcmF0 ZSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9wZXJhdGlvbiBmb3IgZWFjaCByZWxhdGlvbi4KK0JF R0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZiBk KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3Rf ZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihmIGQpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBn dF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChkIGQvZC5kKSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworQ09NTUlUOworCistLSBGb3JjZSBh IEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb24gb25lIHJlbGF0aW9uIGJ1dCBubyBwYXJhbGxlbGlz bSBvbiBvdGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdn YXRoZXJfbWVyZ2UoZikgbm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnZ2F0aGVyX21lcmdlKGQpIG5vX2dhdGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5k aW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ2dhdGhlcihmKSBub19nYXRoZXIoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdnYXRoZXIoZCkgbm9fZ2F0aGVyKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK0NPTU1JVDsKKworLS0gRm9yY2Ugbm8gR2F0aGVyIG9y IEdhdGhlciBNZXJnZSB1c2UgYXQgYWxsLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ25vX2dhdGhlcihmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK0NPTU1JVDsKKworLS0gQ2FuJ3QgZm9yY2UgR2F0aGVy IE1lcmdlIHdpdGhvdXQgdGhlIE9SREVSIEJZIGNsYXVzZSwgYnV0IGp1c3QgR2F0aGVyIGlzIE9L LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJn ZSgoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBG Uk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09NTUlUOworCistLSBUZXN0IGNvbmZsaWN0aW5nIGFk dmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIo KGYgZCkpIG5vX2dhdGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlk IE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3NxbC9qb2luX29yZGVyLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5f b3JkZXIuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZTE2ZTU0 ZWZhZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5f b3JkZXIuc3FsCkBAIC0wLDAgKzEsMTQ1IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQg bWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CisKK0NSRUFURSBUQUJMRSBqb19k aW0xIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0xIHRleHQsIHZhbDEgaW50KQorCVdJVEgg KGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2RpbTEgKGlkLCBk aW0xLCB2YWwxKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgMykg KyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpv X2RpbTE7CitDUkVBVEUgVEFCTEUgam9fZGltMiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGlt MiB0ZXh0LCB2YWwyIGludCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJ TlNFUlQgSU5UTyBqb19kaW0yIChpZCwgZGltMiwgdmFsMikKKwlTRUxFQ1QgZywgJ3NvbWUgZmls bGVyIHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwx MDAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZGltMjsKKworQ1JFQVRFIFRBQkxFIGpvX2ZhY3Qg KAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW0xX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJl bmNlcyBqb19kaW0xIChpZCksCisJZGltMl9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMg am9fZGltMiAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VS VCBJTlRPIGpvX2ZhY3QKKwlTRUxFQ1QgZywgKGclMTAwKSsxLCAoZyUxMDApKzEgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19mYWN0OworCistLSBX ZSBleHBlY3QgdG8gam9pbiB0byBkMiBmaXJzdCBhbmQgdGhlbiBkMSwgc2luY2UgdGhlIGNvbmRp dGlvbiBvbiBkMgorLS0gaXMgbW9yZSBzZWxlY3RpdmUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBk MSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9p ZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworCistLSBGb3JjZSBhIGZl dyBkaWZmZXJlbnQgam9pbiBvcmRlcnMuIFNvbWUgb2YgdGhlc2UgYXJlIHZlcnkgaW5lZmZpY2ll bnQsCistLSBidXQgdGhlIHBsYW5uZXIgY29uc2lkZXJzIHRoZW0gYWxsIHZpYWJsZS4KK0JFR0lO OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDEgZDIp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2Zh Y3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBK T0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQg dmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIo ZiBkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQK KwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEg PSAxIEFORCB2YWwyID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9p bl9vcmRlcihkMSBmIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQg PSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hF UkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdqb2luX29yZGVyKGYgKGQxIGQyKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04g Zi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBk Mi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIHtkMSBkMn0pJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19k aW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5k aW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CitDT01NSVQ7CisK Ky0tIEZvcmNlIGEgam9pbiBvcmRlciBieSBtZW50aW9uaW5nIGp1c3QgYSBwcmVmaXggb2YgdGhl IGpvaW4gbGlzdC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdq b2luX29yZGVyKGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBk MS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUg dmFsMSA9IDEgQU5EIHZhbDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdqb2luX29yZGVyKGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFf aWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJ V0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworQ09NTUlUOworCistLSBqb19mYWN0IGlzIG5v dCBwYXJ0aXRpb25lZCwgYnV0IGxldCdzIHRyeSBwcmV0ZW5kaW5nIHRoYXQgaXQgaXMgYW5kCist LSB2ZXJpZnlpbmcgdGhhdCB0aGUgYWR2aWNlIGRvZXMgbm90IGFwcGx5LgorQkVHSU47CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZi9kMSBkMSBkMiknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBm CisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4g am9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwy ID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmL2Qx IChkMSBkMikpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlk CisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwx ID0gMSBBTkQgdmFsMiA9IDE7CitDT01NSVQ7CisKKy0tIFRoZSB1bnVzdWFsIGZvcm11bGF0aW9u IG9mIHRoaXMgcXVlcnkgaXMgaW50ZW5kZWQgdG8gcHJldmVudCB0aGUgcXVlcnkKKy0tIHBsYW5u ZXIgZnJvbSByZWR1Y2luZyB0aGUgRlVMTCBKT0lOIHRvIHNvbWUgb3RoZXIgam9pbiB0eXBlLCBz byB0aGF0IHdlCistLSBjYW4gdGVzdCB3aGF0IGhhcHBlbnMgd2l0aCBhIGpvaW4gdHlwZSB0aGF0 IGNhbm5vdCBiZSByZW9yZGVyZWQuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9J TiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBm LmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CisKKy0tIFdlIHNob3VsZCBub3QgYmUgYWJs ZSB0byBmb3JjZSB0aGUgcGxhbm5lciB0byBqb2luIGYgdG8gZDEgZmlyc3QsIGJlY2F1c2UKKy0t IHRoYXQgaXMgbm90IGEgdmFsaWQgam9pbiBvcmRlciwgYnV0IHdlIHNob3VsZCBiZSBhYmxlIHRv IGZvcmNlIHRoZSBwbGFubmVyCistLSB0byBtYWtlIGVpdGhlciBkMiBvciBmIHRoZSBkcml2aW5n IHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5f b3JkZXIoZiBkMSBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9f ZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0x X2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdqb2luX29yZGVyKGYgZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVM TCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5p ZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMiBmIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9f ZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDAp CisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CitDT01NSVQ7CisK Ky0tIFR3byBpbmNvbXBhdGlibGUgam9pbiBvcmRlcnMgc2hvdWxkIGNvbmZsaWN0LiBJbiB0aGUg c2Vjb25kIGNhc2UsCistLSB0aGUgY29uZmxpY3QgaXMgaW1wbGljaXQ6IGlmIGQxIGlzIG9uIHRo ZSBpbm5lciBzaWRlIG9mIGEgam9pbiBvZiBhbnkKKy0tIHR5cGUsIGl0IGNhbm5vdCBhbHNvIGJl IHRoZSBkcml2aW5nIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ2pvaW5fb3JkZXIoZikgam9pbl9vcmRlcihkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpv X2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAw KQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQxKSBoYXNoX2pvaW4oZDEpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEg ZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0y X2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQg SVMgTlVMTDsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3Fs L2pvaW5fc3RyYXRlZ3kuc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9zdHJh dGVneS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVkZDVjNGMw ZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9z dHJhdGVneS5zcWwKQEAgLTAsMCArMSw4NCBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VU IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworCitDUkVBVEUgVEFCTEUgam9p bl9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9pbl9kaW0gKGRpbSkgU0VMRUNUIHJh bmRvbSgpOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZ WkUgam9pbl9kaW07CisKK0NSRUFURSBUQUJMRSBqb2luX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5 IGtleSwKKwlkaW1faWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpvaW5fZGltIChpZCkK KykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9pbl9m YWN0CisJU0VMRUNUIGcsIChnJTMpKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7 CitDUkVBVEUgSU5ERVggam9pbl9mYWN0X2RpbV9pZCBPTiBqb2luX2ZhY3QgKGRpbV9pZCk7CitW QUNVVU0gQU5BTFlaRSBqb2luX2ZhY3Q7CisKKy0tIFdlIGV4cGVjdCBhIGhhc2ggam9pbiBieSBk ZWZhdWx0LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisKKy0tIFRy eSBmb3JjaW5nIGVhY2ggam9pbiBtZXRob2QgaW4gdHVybiB3aXRoIGpvaW5fZGltIGFzIHRoZSBp bm5lciB0YWJsZS4KKy0tIEFsbCBvZiB0aGVzZSBzaG91bGQgd29yayBleGNlcHQgZm9yIE1FUkdF X0pPSU5fTUFURVJJQUxJWkU7IHRoYXQgd2lsbAorLS0gZmFpbCwgYmVjYXVzZSB0aGUgcGxhbm5l ciBrbm93cyB0aGF0IGpvaW5fZGltIChpZCkgaXMgdW5pcXVlLCBhbmQgd2lsbAorLS0gcmVmdXNl IHRvIGFkZCBtYXJrL3Jlc3RvcmUgb3ZlcmhlYWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSEFTSF9KT0lOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04g Zi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJH RV9KT0lOX01BVEVSSUFMSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQg PSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX1BM QUlOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJP TSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NQVRFUklBTElaRShkKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9m YWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUVNT0laRShkKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBq b2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBm LmRpbV9pZCA9IGQuaWQ7CitDT01NSVQ7CisKKy0tIE5vdyB0cnkgZm9yY2luZyBlYWNoIGpvaW4g bWV0aG9kIGluIHR1cm4gd2l0aCBqb2luX2ZhY3QgYXMgdGhlIGlubmVyCistLSB0YWJsZS4gQWxs IG9mIHRoZXNlIHNob3VsZCB3b3JrLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ0hBU0hfSk9JTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9N QVRFUklBTElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9QTEFJTihmKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9m YWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZiknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpP SU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01FTU9JWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J05FU1RFRF9MT09QX1BMQUlOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQg PSBkLmlkOworQ09NTUlUOworCistLSBOb24td29ya2luZyBjYXNlcy4gV2UgY2FuJ3QgZm9yY2Ug YSBmb3JlaWduIGpvaW4gYmV0d2VlbiB0aGVzZSB0YWJsZXMsCistLSBiZWNhdXNlIHRoZXkgYXJl bid0IGZvcmVpZ24gdGFibGVzLiBXZSBhbHNvIGNhbid0IHVzZSB0d28gZGlmZmVyZW50CistLSBz dHJhdGVnaWVzIG9uIHRoZSBzYW1lIHRhYmxlLCBub3IgY2FuIHdlIHB1dCBib3RoIHRhYmxlcyBv biB0aGUgaW5uZXIKKy0tIHNpZGUgb2YgdGhlIHNhbWUgam9pbi4KK0JFR0lOOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGYgZCkpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lO IGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJTihmKSBORVNURURfTE9PUF9NQVRFUklBTElaRShm KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9p bl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oZiBkKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9J TiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2xvY2FsX2NvbGxlY3Rvci5zcWwgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3NxbC9sb2NhbF9jb2xsZWN0b3Iuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5kYjFlMjM0ODhkNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2xvY2FsX2NvbGxlY3Rvci5zcWwKQEAgLTAsMCArMSw0NCBA QAorQ1JFQVRFIEVYVEVOU0lPTiBwZ19wbGFuX2FkdmljZTsKK1NFVCBkZWJ1Z19wYXJhbGxlbF9x dWVyeSA9IG9mZjsKKworLS0gVHJ5IGNsZWFyaW5nIGFkdmljZSBiZWZvcmUgd2UndmUgY29sbGVj dGVkIGFueS4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisKKy0t IFNldCBhIHNtYWxsIGFkdmljZSBjb2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQgd2UnbGwgZXhjZWVk IGl0LgorU0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAyOworCist LSBFbmFibGUgdGhlIGNvbGxlY3Rvci4KK1NFVCBwZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0 b3IgPSBvbjsKKworLS0gU2V0IHVwIGEgZHVtbXkgdGFibGUuCitDUkVBVEUgVEFCTEUgZHVtbXlf dGFibGUgKGEgaW50IHByaW1hcnkga2V5LCBiIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UsIHBhcmFsbGVsX3dvcmtlcnMgPSAwKTsKKworLS0gVGVzdCBxdWVyaWVzLgor U0VMRUNUICogRlJPTSBkdW1teV90YWJsZSBhLCBkdW1teV90YWJsZSBiOworU0VMRUNUICogRlJP TSBkdW1teV90YWJsZTsKKworLS0gU2hvdWxkIHJldHVybiB0aGUgYWR2aWNlIGZyb20gdGhlIHNl Y29uZCB0ZXN0IHF1ZXJ5LgorU0VMRUNUIGFkdmljZSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9j YWxfYWR2aWNlKCkgT1JERVIgQlkgaWQgREVTQyBMSU1JVCAxOworCistLSBOb3cgdHJ5IGNsZWFy aW5nIGFkdmljZSBhZ2Fpbi4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNl KCk7CisKKy0tIFJhaXNlIHRoZSBjb2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQgdGhlIGNvbGxlY3Rv ciB1c2VzIG11bHRpcGxlIGNodW5rcy4KK1NFVCBwZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0 aW9uX2xpbWl0ID0gMjAwMDsKKworLS0gUHVzaCBhIGJ1bmNoIG9mIHF1ZXJpZXMgdGhyb3VnaCB0 aGUgY29sbGVjdG9yLgorRE8gJCQKK0JFR0lOCisJRk9SIHggSU4gMS4uMjAwMCBMT09QCisJCUVY RUNVVEUgJ1NFTEVDVCAqIEZST00gZHVtbXlfdGFibGUnOworCUVORCBMT09QOworRU5ECiskJDsK KworLS0gQ2hlY2sgdGhhdCB0aGUgY29sbGVjdG9yIHdvcmtlZC4KK1NFTEVDVCBDT1VOVCgqKSBG Uk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisKKy0tIEFuZCBjbGVhciBvbmUg bW9yZSB0aW1lLCB0byB2ZXJpZnkgdGhhdCB0aGlzIGRvZXNuJ3QgY2F1c2UgYSBwcm9ibGVtCist LSBldmVuIHdpdGggYSBsYXJnZXIgbnVtYmVyIG9mIGVudHJpZXMuCitTRUxFQ1QgcGdfY2xlYXJf Y29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9w YXJ0aXRpb253aXNlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u YzUxNDU2ZGJiYjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Nx bC9wYXJ0aXRpb253aXNlLnNxbApAQCAtMCwwICsxLDk5IEBACitMT0FEICdwZ19wbGFuX2Fkdmlj ZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgZW5hYmxl X3BhcnRpdGlvbndpc2Vfam9pbiA9IHRydWU7CisKK0NSRUFURSBUQUJMRSBwdDEgKGlkIGludGVn ZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdF IChpZCk7CitDUkVBVEUgVEFCTEUgcHQxYSBQQVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJP TSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JF QVRFIFRBQkxFIHB0MWIgUEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRv ICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJM RSBwdDFjIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkK KwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdDEgKGlk LCBkaW0xLCB2YWwxKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUg MykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDApIGc7CitWQUNVVU0gQU5BTFla RSBwdDE7CisKK0NSRUFURSBUQUJMRSBwdDIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTIg dGV4dCwgdmFsMiBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUg cHQyYSBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MmIgUEFSVElU SU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEggKGF1dG92 YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDJjIFBBUlRJVElPTiBPRiBw dDIgRk9SIFZBTFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdDIgKGlkLCBkaW0yLCB2YWwyKQorCVNFTEVD VCBnLCAnc29tZSBvdGhlciB0ZXh0ICcgfHwgZywgKGcgJSA1KSArIDEKKwkgIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMzAwMCwyKSBnOworVkFDVVVNIEFOQUxZWkUgcHQyOworCitDUkVBVEUgVEFC TEUgcHQzIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0zIHRleHQsIHZhbDMgaW50KQorCVBB UlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0M2EgUEFSVElUSU9OIE9GIHB0 MyBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDNiIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVF UyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitDUkVBVEUgVEFCTEUgcHQzYyBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAo MjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5T RVJUIElOVE8gcHQzIChpZCwgZGltMywgdmFsMykKKwlTRUxFQ1QgZywgJ2EgdGhpcmQgcmFuZG9t IHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAw LDMpIGc7CitWQUNVVU0gQU5BTFlaRSBwdDM7CisKK0NSRUFURSBUQUJMRSBwdG1pc21hdGNoIChp ZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW1tIHRleHQsIHZhbG0gaW50KQorCVBBUlRJVElPTiBC WSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hhIFBBUlRJVElPTiBPRiBwdG1p c21hdGNoCisgICAgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTUwMSkKKwlXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaGIgUEFSVElUSU9O IE9GIHB0bWlzbWF0Y2gKKyAgICBGT1IgVkFMVUVTIEZST00gKDE1MDEpIHRvICgzMDAxKQorCVdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0bWlzbWF0Y2gg KGlkLCBkaW1tLCB2YWxtKQorCVNFTEVDVCBnLCAneWV0IGFub3RoZXIgdGV4dCAnIHx8IGcsIChn ICUgMikgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDApIGc7CitWQUNVVU0gQU5B TFlaRSBwdG1pc21hdGNoOworCitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VM RUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlk ID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKwor LS0gU3VwcHJlc3MgcGFydGl0aW9ud2lzZSBqb2luLCBvciBkbyBpdCBqdXN0IHBhcnRpYWxseS4K K0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNF KHB0MSBwdDIgcHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0g cHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0MikgcHQz KSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEs IHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBB TkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKK0NPTU1JVDsKKworLS0gVGVz dCBjb25mbGljdGluZyBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0MikgKHB0MSBwdDMpKSc7CitFWFBMQUlOIChQ TEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJF IHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5E IHZhbDIgPSAxIEFORCB2YWwzID0gMTsKK0NPTU1JVDsKKworLS0gQ2FuJ3QgZm9yY2UgYSBwYXJ0 aXRpb253aXNlIGpvaW4gd2l0aCBhIG1pc21hdGNoZWQgdGFibGUuCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0bWlzbWF0Y2gp KSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEs IHB0bWlzbWF0Y2ggV0hFUkUgcHQxLmlkID0gcHRtaXNtYXRjaC5pZDsKK0NPTU1JVDsKKworLS0g Rm9yY2Ugam9pbiBvcmRlciBmb3IgYSBwYXJ0aWN1bGFyIGJyYW5jaCBvZiB0aGUgcGFydGl0aW9u d2lzZSBqb2luIHdpdGgKKy0tIGFuZCB3aXRob3V0IG1lbnRpb25pbmcgdGhlIHNjaGVtYSBuYW1l LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIo cHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWEpJzsKK0VYUExB SU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMg V0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0g MSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdKT0lOX09SREVSKHB0My9wdDNhIHB0Mi9wdDJhIHB0MS9wdDFhKSc7CitFWFBMQUlO IChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdI RVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEg QU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2Uvc3FsL3ByZXBhcmVkLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL3ByZXBhcmVkLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u M2VjMzBlZWRlZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Nx bC9wcmVwYXJlZC5zcWwKQEAgLTAsMCArMSwzNyBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOwor U0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworCitDUkVBVEUgVEFCTEUg cHRhYiAoaWQgaW50ZWdlciwgdmFsIHRleHQpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZh bHNlKTsKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9 IGZhbHNlOworCistLSBOb3QgcHJlcGFyZWQsIHNvIGFkdmljZSBzaG91bGQgYmUgZ2VuZXJhdGVk LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgCitTRUxFQ1QgKiBGUk9NIHB0YWI7 CisKKy0tIFByZXBhcmVkLCBzbyBhZHZpY2Ugc2hvdWxkIG5vdCBiZSBnZW5lcmF0ZWQuCitQUkVQ QVJFIHB0MSBBUyBTRUxFQ1QgKiBGUk9NIHB0YWI7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBFWEVDVVRFIHB0MTsKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9h ZHZpY2VfZGV0YWlscyA9IHRydWU7CisKKy0tIFByZXBhcmVkLCBidXQgYWx3YXlzX3N0b3JlX2Fk dmljZV9kZXRhaWxzID0gdHJ1ZSwgc28gc2hvdWxkIHNob3cgYWR2aWNlLgorUFJFUEFSRSBwdDIg QVMgU0VMRUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg RVhFQ1VURSBwdDI7CisKKy0tIE5vdCBwcmVwYXJlZCwgc28gZmVlZGJhY2sgc2hvdWxkIGJlIGdl bmVyYXRlZC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMg PSBmYWxzZTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocHRhYiknOwor RVhQTEFJTiAoQ09TVFMgT0ZGKSAKK1NFTEVDVCAqIEZST00gcHRhYjsKKworLS0gUHJlcGFyZWQs IHNvIGFkdmljZSBzaG91bGQgbm90IGJlIGdlbmVyYXRlZC4KK1BSRVBBUkUgcHQzIEFTIFNFTEVD VCAqIEZST00gcHRhYjsKK0VYUExBSU4gKENPU1RTIE9GRikgRVhFQ1VURSBwdDE7CisKK1NFVCBw Z19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSB0cnVlOworCistLSBQ cmVwYXJlZCwgYnV0IGFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWUsIHNvIHNob3Vs ZCBzaG93IGZlZWRiYWNrLgorUFJFUEFSRSBwdDQgQVMgU0VMRUNUICogRlJPTSBwdGFiOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgRVhFQ1VURSBwdDI7CisKZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3FsIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9zcWwvc2Nhbi5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjRmYzQ5NGM3ZDhlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9z cWwvc2Nhbi5zcWwKQEAgLTAsMCArMSwxOTUgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NF VCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBzZXFfcGFnZV9jb3N0 ID0gMC4xOworU0VUIHJhbmRvbV9wYWdlX2Nvc3QgPSAwLjE7CitTRVQgY3B1X3R1cGxlX2Nvc3Qg PSAwOworU0VUIGNwdV9pbmRleF90dXBsZV9jb3N0ID0gMDsKKworQ1JFQVRFIFRBQkxFIHNjYW5f dGFibGUgKGEgaW50IHByaW1hcnkga2V5LCBiIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gc2Nhbl90YWJsZQorCVNFTEVDVCBnLCAnc29tZSB0 ZXh0ICcgfHwgZyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMDApIGc7CitDUkVBVEUgSU5E RVggc2Nhbl90YWJsZV9iIE9OIHNjYW5fdGFibGUgVVNJTkcgYnJpbiAoYik7CitWQUNVVU0gQU5B TFlaRSBzY2FuX3RhYmxlOworCistLSBTZXF1ZW50aWFsIHNjYW4KK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKworLS0gSW5kZXggc2Nh bgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworCistLSBJbmRleC1vbmx5IHNjYW4KK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKwor LS0gQml0bWFwIGhlYXAgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ICdzb21lIHRleHQgOCc7CisKKy0tIFRJ RCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisKKy0tIFRJRCByYW5nZSBzY2FuCitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlX SEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CisKKy0tIFRyeSBmb3JjaW5n IGVhY2ggb2Ygb3VyIHRlc3QgcXVlcmllcyB0byB1c2UgdGhlIHNjYW4gdHlwZSB0aGV5CistLSB3 YW50ZWQgdG8gdXNlIGFueXdheS4gVGhpcyBzaG91bGQgc3VjY2VlZC4KK0JFR0lOOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBz Y2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVD VCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFi bGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1B UF9IRUFQX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ICdzb21lIHRleHQgOCc7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5fdGFibGUpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBXSEVSRSBjdGlkID0gJygwLDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGN0aWQgPiAnKDEsMSknIEFORCBjdGlk IDwgJygyLDEpJzsKK0NPTU1JVDsKKworLS0gVHJ5IHRvIGZvcmNlIGEgZnVsbCBzY2FuIG9mIHRo ZSB0YWJsZSB0byB1c2Ugc29tZSBvdGhlciBzY2FuIHR5cGUuIEFsbAorLS0gb2YgdGhlc2Ugd2ls bCBmYWlsLiBBbiBpbmRleCBzY2FuIG9yIGJpdG1hcCBoZWFwIHNjYW4gY291bGQgcG90ZW50aWFs bHkKKy0tIGdlbmVyYXRlIHRoZSBjb3JyZWN0IGFuc3dlciwgYnV0IHRoZSBwbGFubmVyIGRvZXMg bm90IGV2ZW4gY29uc2lkZXIgdGhlc2UKKy0tIHBvc3NpYmlsaXRpZXMgZHVlIHRvIHRoZSBsYWNr IG9mIGEgV0hFUkUgY2xhdXNlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUg c2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGU7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitDT01NSVQ7CisKKy0tIFRy eSBhZ2FpbiB0byBmb3JjZSBpbmRleCB1c2UuIFRoaXMgc2hvdWxkIG5vdyBzdWNjZWVkIGZvciB0 aGUgSU5ERVhfU0NBTgorLS0gYW5kIEJJVE1BUF9IRUFQX1NDQU4sIGJ1dCB0aGUgSU5ERVhfT05M WV9TQ0FOIGNhbid0IGJlIGZvcmNlZCBiZWNhdXNlIHRoZQorLS0gcXVlcnkgZmV0Y2hlcyBjb2x1 bW5zIG5vdCBpbmNsdWRlZCBpbiB0aGUgaW5kZXguCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPiAwOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRF WF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2Fu X3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CitDT01NSVQ7CisKKy0tIFdlIGNhbiBmb3JjZSBhIHBy aW1hcnkga2V5IGxvb2t1cCB0byB1c2UgYSBzZXF1ZW50aWFsIHNjYW4sIGJ1dCB3ZQorLS0gY2Fu J3QgZm9yY2UgaXQgdG8gdXNlIGFuIGluZGV4LW9ubHkgc2NhbiAoZHVlIHRvIHRoZSBjb2x1bW4g bGlzdCkKKy0tIG9yIGEgVElEIHNjYW4gKGR1ZSB0byB0aGUgYWJzZW5jZSBvZiBhIFRJRCBxdWFs KS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihz Y2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihz Y2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFdlIGNhbiBmb3JjaWJs eSBkb3duZ3JhZGUgYW4gaW5kZXgtb25seSBzY2FuIHRvIGFuIGluZGV4IHNjYW4sIGJ1dCB3ZSBj YW4ndAorLS0gZm9yY2UgdGhlIHVzZSBvZiBhbiBpbmRleCB0aGF0IHRoZSBwbGFubmVyIHRoaW5r cyBpcyBpbmFwcGxpY2FibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5f dGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJs ZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFdlIGNhbiBmb3JjZSB0aGUgdXNl IG9mIGEgc2VxdWVudGlhbCBzY2FuIGluIHBsYWNlIG9mIGEgYml0bWFwIGhlYXAgc2NhbiwKKy0t IGJ1dCBhIHBsYWluIGluZGV4IHNjYW4gb24gYSBCUklOIGluZGV4IGlzIG5vdCBwb3NzaWJsZS4K K0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2Fu X3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2UgdGhlIHVzZSBvZiBhIHNl cXVlbnRpYWwgc2NhbiByYXRoZXIgdGhhbiBhIFRJRCBzY2FuIG9yCistLSBUSUQgcmFuZ2Ugc2Nh bi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihz Y2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygx LDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CitDT01NSVQ7CisKKy0tIFRlc3QgbW9yZSBjb21wbGV4 IHNjZW5hcmlvcyB3aXRoIGluZGV4IHNjYW5zLgorQkVHSU47CistLSBTaG91bGQgc3RpbGwgd29y ayBpZiB3ZSBtZW50aW9uIHRoZSBzY2hlbWEuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg V0hFUkUgYSA9IDE7CistLSBCdXQgbm90IGlmIHdlIG1lbnRpb24gdGhlIHdyb25nIHNjaGVtYS4K K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxl IGNpbGJ1cC5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKy0tIEl0J3MgT0sgdG8g cmVwZWF0IHRoZSBzYW1lIGFkdmljZS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHNjYW5f dGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworLS0gQnV0IGl0IGRvZXNuJ3Qgd29yayBpZiB0 aGUgaW5kZXggdGFyZ2V0IGlzIGV2ZW4gbm90aW9uYWxseSBkaWZmZXJlbnQuCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxl X3BrZXkgc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CitDT01NSVQ7CisKKy0tIFRlc3QgYXNzb3J0ZWQgaW5jb3JyZWN0IGFkdmljZS4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihub3RoaW5nKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUg V0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1ND QU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJF IGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1ND QU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUg V0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFRlc3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8g bXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGFsaWFzLgorQkVHSU47CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEs MTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lO IHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTihzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUg cyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzIzIpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJp ZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZU IEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ1NFUV9TQ0FOKHMpIFNFUV9TQ0FOKHMjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExF RlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3Rh YmxlIHMgT04gZyA9IHMuYTsKK0NPTU1JVDsKKworLS0gVGVzdCBvdXIgYWJpbGl0eSB0byByZWZl ciB0byBzY2FucyB3aXRoaW4gYSBzdWJxdWVyeS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBh ID0gMSBPRkZTRVQgMCkgeDsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQg MCk7CitCRUdJTjsKKy0tIFNob3VsZCBub3QgbWF0Y2guCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0g MSBPRkZTRVQgMCkgeDsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7 CistLSBTaG91bGQgbWF0Y2ggZmlyc3QgcXVlcnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc0B4KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUg YSA9IDEgT0ZGU0VUIDApIHg7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VU IDApOworLS0gU2hvdWxkIG1hdGNoIHNlY29uZCBxdWVyeSBvbmx5LgorU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg cyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3NxbC9zZW1pam9pbi5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Nx bC9zZW1pam9pbi5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVh NGFlNTJkMWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwv c2VtaWpvaW4uc3FsCkBAIC0wLDAgKzEsMTE4IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitT RVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CisKK0NSRUFURSBUQUJMRSBz al93aWRlICgKKwlpZCBpbnRlZ2VyIHByaW1hcnkga2V5LAorCXZhbDEgaW50ZWdlciwKKwlwYWRk aW5nIHRleHQgc3RvcmFnZSBwbGFpbgorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitJTlNFUlQgSU5UTyBzal93aWRlCisJU0VMRUNUIGcsIGclMTArMSwgcmVwZWF0KCcgJywg MzAwKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBnOworQ1JFQVRFIElOREVYIE9OIHNq X3dpZGUgKHZhbDEpOworVkFDVVVNIEFOQUxZWkUgc2pfd2lkZTsKKworQ1JFQVRFIFRBQkxFIHNq X25hcnJvdyAoCisJaWQgaW50ZWdlciBwcmltYXJ5IGtleSwKKwl2YWwxIGludGVnZXIKKykgV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gc2pfbmFycm93CisJ U0VMRUNUIGcsIGclMTArMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBnOworQ1JFQVRF IElOREVYIE9OIHNqX25hcnJvdyAodmFsMSk7CitWQUNVVU0gQU5BTFlaRSBzal9uYXJyb3c7CisK Ky0tIFdlIGV4cGVjdCB0aGlzIHRvIG1ha2UgdGhlIFZBTFVFUyBsaXN0IHVuaXF1ZSBhbmQgdXNl IGluZGV4IGxvb2t1cHMgdG8KKy0tIGZpbmQgdGhlIHJvd3MgaW4gc2pfd2lkZSwgc28gYXMgdG8g YXZvaWQgYSBmdWxsIHNjYW4gb2Ygc2pfd2lkZS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX3dpZGUKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxV RVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworCistLSBJZiB3ZSBh c2sgZm9yIGEgdW5pcXVlIHNlbWlqb2luLCB3ZSBzaG91bGQgZ2V0IHRoZSBzYW1lIHBsYW4gYXMg d2l0aAorLS0gbm8gYWR2aWNlLiBJZiB3ZSBhc2sgZm9yIGEgbm9uLXVuaXF1ZSBzZW1pam9pbiwg d2Ugc2hvdWxkIHNlZSBhIFNlbWkKKy0tIEpvaW4gb3BlcmF0aW9uIGluIHRoZSBwbGFuIHRyZWUu CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5p cXVlKCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIHNqX3dpZGUKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxVRVMgKDEsIDEpLCAo MiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX3dpZGUKKwlXSEVSRSAoaWQs IHZhbDEpIElOIChWQUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkp OworQ09NTUlUOworCistLSBCZWNhdXNlIHRoaXMgdGFibGUgaXMgbmFycm93ZXIgdGhhbiB0aGUg cHJldmlvdXMgb25lLCBhIHNlcXVlbnRpYWwgc2NhbgorLS0gaXMgbGVzcyBleHBlbnNpdmUsIGFu ZCB3ZSBjaG9vc2UgYSBzdHJhaWdodGZvcndhcmQgU2VtaSBKb2luIHBsYW4gYnkKKy0tIGRlZmF1 bHQuIChOb3RlIHRoYXQgdGhpcyBpcyBhbHNvIHZlcnkgc2Vuc2l0aXZlIHRvIHRoZSBsZW5ndGgg b2YgdGhlIElOCistLSBsaXN0LCB3aGljaCBhZmZlY3RzIGhvdyBtYW55IGluZGV4IGxvb2t1cHMg dGhlIGFsdGVybmF0aXZlIHBsYW4gd2lsbCBuZWVkLikKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25hcnJvdworCVdIRVJFIChpZCwgdmFsMSkgSU4g KFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CisKKy0tIEhl cmUsIHdlIGV4cGVjdCBhZHZpc2luZyBhIHVuaXF1ZSBzZW1pam9pbiB0byBzd2l0aCB0byB0aGUg c2FtZSBwbGFuIHRoYXQKKy0tIHdlIGdvdCB3aXRoIHNqX3dpZGUsIGFuZCBhZHZpc2luZyBhIG5v bi11bmlxdWUgc2VtaWpvaW4gc2hvdWxkIG5vdCBjaGFuZ2UKKy0tIHRoZSBwbGFuLgorQkVHSU47 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZSgiKlZB TFVFUyoiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSBzal9uYXJyb3cKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxVRVMgKDEsIDEpLCAoMiwgMiks ICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25hcnJvdworCVdIRVJFIChpZCwgdmFs MSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CitD T01NSVQ7CisKKy0tIEluIHRoZSBhYm92ZSBleGFtcGxlLCB3ZSBtYWRlIHRoZSBvdXRlciBzaWRl IG9mIHRoZSBqb2luIHVuaXF1ZSwgYnV0IGhlcmUsCistLSB3ZSBzaG91bGQgbWFrZSB0aGUgaW5u ZXIgc2lkZSB1bmlxdWUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0 IHZhbDEgZnJvbSBzal9uYXJyb3cpOworCistLSBXZSBzaG91bGQgYmUgYWJsZSB0byBmb3JjZSBh IHBsYW4gd2l0aCBvciB3aXRob3V0IHRoZSBtYWtlLXVuaXF1ZSBzdHJhdGVneSwKKy0tIHdpdGgg ZWl0aGVyIHNpZGUgYXMgdGhlIGRyaXZpbmcgdGFibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKHNqX25hcnJvdyknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fbm9uX3VuaXF1ZShz al9uYXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFs MSBmcm9tIHNqX25hcnJvdyk7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3Nl bWlqb2luX3VuaXF1ZShzal9uYXJyb3cpIGpvaW5fb3JkZXIoc2pfbmFycm93KSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKHNq X25hcnJvdykgam9pbl9vcmRlcihzal9uYXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBX SEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CitDT01NSVQ7CisKKy0tIEhv d2V2ZXIsIG1lbnRpb25pbmcgdGhlIHdyb25nIHNpZGUgb2YgdGhlIGpvaW4gc2hvdWxkIHJlc3Vs dCBpbiBhbiBhZHZpY2UKKy0tIGZhaWx1cmUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKGcpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAg ICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoZyknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs MTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsKK0NP TU1JVDsKKworLS0gVGVzdCBjb25mbGljdGluZyBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKHNqX25hcnJvdykgc2VtaWpv aW5fbm9uX3VuaXF1ZShzal9uYXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBn IGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CitDT01NSVQ7CisKKy0tIFRyeSBhcHBs eWluZyBTRU1JSk9JTl9VTklRVUUoKSB0byBhIG5vbi1zZW1pam9pbi4KK0JFR0lOOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoZyknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwMCkgZywgc2pfbmFycm93IHMgV0hFUkUgZyA9IHMudmFsMTsKK0NPTU1JVDsKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3N5bnRheC5zcWwgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3NxbC9zeW50YXguc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi41NmE1ZDU0ZTJiNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2Uvc3FsL3N5bnRheC5zcWwKQEAgLTAsMCArMSw2OCBAQAorTE9BRCAncGdfcGxhbl9h ZHZpY2UnOworCistLSBBbiBlbXB0eSBzdHJpbmcgaXMgYWxsb3dlZC4gRW1wdHkgdGFyZ2V0IGxp c3RzIGFyZSBhbGxvd2VkIGZvciBtb3N0IGFkdmljZQorLS0gdGFncywgYnV0IG5vdCBmb3IgSk9J Tl9PUkRFUi4gIlN1cHBsaWVkIFBsYW4gQWR2aWNlIiBzaG91bGQgYmUgb21pdHRlZCBpbgorLS0g dGV4dCBmb3JtYXQgd2hlbiB0aGVyZSBpcyBubyBhY3R1YWwgYWR2aWNlLCBidXQgbm90IGluIG5v bi10ZXh0IGZvcm1hdC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnJzsKK0VYUExBSU4g KENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9T Q0FOKCknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIEZP Uk1BVCBKU09OKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSk9JTl9P UkRFUigpJzsKKworLS0gVGVzdCBhc3NvcnRlZCB2YXJpYXRpb25zIGluIGNhcGl0YWxpemF0aW9u LCB3aGl0ZXNwYWNlLCBhbmQgd2hpY2ggcGFydHMgb2YKKy0tIHRoZSByZWxhdGlvbiBpZGVudGlm aWVyIGFyZSBpbmNsdWRlZC4gVGhlc2Ugc2hvdWxkIGFsbCB3b3JrLgorU0VUIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdTRVFfU0NBTih4KSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAx OworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZXFfc2Nhbih4QHkpJzsKK0VYUExBSU4g KENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9z Y2FuKHgjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnU0VRX1NDQU4gKHgveSknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxF Q1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnICBTRVFfU0NBTiAoIHggLyB5IC4g eiApICAnOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnU0VRX1NDQU4oIngiIzIvInkiLiJ6IkAidCIpJzsKK0VYUExBSU4gKENPU1RT IE9GRikgU0VMRUNUIDE7CisKKy0tIFN5bnRheCBlcnJvcnMuCitTRVQgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ1NFUVVFTlRJQUxfU0NBTih4KSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oJzsK K1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIic7CitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCIiKSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKCJhIic7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FO KCMnOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcoKSc7CitTRVQgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJzEyMyc7CisKKy0tIFRhZ3MgbGlrZSBTRVFfU0NBTiBhbmQgTk9fR0FUSEVS IGRvbid0IGFsbG93IHN1Ymxpc3RzIGF0IGFsbDsgb3RoZXIgdGFncywKKy0tIGV4Y2VwdCBmb3Ig Sk9JTl9PUkRFUiwgYWxsb3cgYXQgbW9zdCBvbmUgbGV2ZWwgb2Ygc3VibGlzdC4gSGVuY2UsIHRo ZXNlCistLSBleGFtcGxlcyBzaG91bGQgZXJyb3Igb3V0LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdTRVFfU0NBTigoeCkpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnR0FU SEVSKCgoeCkpKSc7CisKKy0tIExlZ2FsIGNvbW1lbnRzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICcvKiovJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihfKS8qKiovJzsKK0VYUExBSU4gKENPU1RTIE9G RikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qIGNvbW1lbnQgKi8g SEFTSF9KT0lOKC8qeCoveSknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyogY29tbWVudCAqLyBIQVNIX0pPSU4oeS8vKngqL3op JzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisKKy0tIFVudGVybWluYXRlZCBjb21t ZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyonOworU0VUIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKCJmT08iKSAvKiBvb3BzJzsKKworLS0gTmVzdGVkIGNv bW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLCBzbyB0aGUgZmlyc3Qgb2YgdGhlc2UgaXMgbGVnYWwg YW5kCistLSB0aGUgc2Vjb25kIGlzIG5vdC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn LyovKi8nOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnLyovKiBzdHVmZiAqLyovJzsKKworLS0gRm9yZWlnbiBqb2luIHJlcXVpcmVz IG11bHRpcGxlIHJlbGF0aW9uIGlkZW50aWZpZXJzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdGT1JFSUdOX0pPSU4oYSknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JF SUdOX0pPSU4oKGEpKSc7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3QvMDAx X3JlZ3Jlc3MucGwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY3NTk1Y2RkZjc1Ci0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS90LzAwMV9yZWdyZXNzLnBsCkBAIC0w LDAgKzEsMTQ4IEBACisjIENvcHlyaWdodCAoYykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorCisjIFJ1biB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3RzIHVu ZGVyIHBnX3BsYW5fYWR2aWNlIHRvIGNoZWNrIGZvciBwcm9ibGVtcy4KK3VzZSBzdHJpY3Q7Cit1 c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBDd2QgICAgICAgICAgICBxdyhhYnNf cGF0aCk7Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcoZGlybmFtZSk7CisKK3VzZSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6 Ok1vcmU7CisKKyMgSW5pdGlhbGl6ZSB0aGUgcHJpbWFyeSBub2RlCitteSAkbm9kZSA9IFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicpOworJG5vZGUtPmluaXQoKTsKKworIyBT ZXQgdXAgb3VyIGRlc2lyZWQgY29uZmlndXJhdGlvbi4KKyMKKyMgV2UgcnVuIHdpdGggcGdfcGxh bl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQgc2V0IHRvIGVuc3VyZSB0aGF0IHRoZQor IyBwbGFuIHRyZWUgd2Fsa2VyIGNvZGUgcnVucyBhZ2FpbnN0IGV2ZXJ5IHF1ZXJ5IGluIHRoZSBy ZWdyZXNzaW9uIHRlc3RzLiBJZgorIyB3ZSdyZSB1bmFibGUgdG8gcHJvcGVybHkgYW5hbHl6ZSBh bnkgb2YgdGhvc2UgcGxhbiB0cmVlcywgdGhpcyB0ZXN0IHNob3VsZCBmYWlsLgorIworIyBXZSBz ZXQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlIHRvIGFuIGFkdmljZSBzdHJpbmcgdGhhdCB3aWxsIGNh dXNlIHRoZSBhZHZpY2UKKyMgdHJvdmUgdG8gYmUgcG9wdWxhdGVkIHdpdGggYSBmZXcgZW50cmll cyBvZiB2YXJpb3VzIHNvcnRzLCBidXQgd2hpY2ggd2UgZG8KKyMgbm90IGV4cGVjdCB0byBtYXRj aCBhbnl0aGluZyBpbiB0aGUgcmVncmVzc2lvbiB0ZXN0IHF1ZXJpZXMuIFRoaXMgd2F5LCB0aGUK KyMgcGxhbm5lciBob29rcyB3aWxsIGJlIGNhbGxlZCwgaW1wcm92aW5nIGNvZGUgY292ZXJhZ2Us IGJ1dCBubyBwbGFucyBzaG91bGQKKyMgYWN0dWFsbHkgY2hhbmdlLgorIworIyBwZ19wbGFuX2Fk dmljZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2U9ZmFsc2UgaXMgbmVlZGVkIHRvIGF2 b2lkIGJyZWFraW5nCisjIHJlZ3Jlc3Npb24gdGVzdCBxdWVyaWVzIHRoYXQgdXNlIEVYUExBSU4u IEluIHRoZSByZWFsIHdvcmxkLCBpdCBzZWVtcyBsaWtlCisjIHVzZXJzIHdpbGwgd2FudCBFWFBM QUlOIG91dHB1dCB0byBzaG93IHN1cHBsaWVkIGFkdmljZSBzbyB0aGF0IGl0J3MgY2xlYXIKKyMg d2hldGhlciBub3JtYWwgcGxhbm5lciBiZWhhdmlvciBoYXMgYmVlbiBhbHRlcmVkLCBidXQgaGVy ZSB0aGF0J3MgdW5kZXNpcmFibGUuCiskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u ZicsIDw8RU9NKTsKK3BnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PTEwMDAw MDAKK3BnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0b3I9dHJ1ZQorc2hhcmVkX3ByZWxvYWRf bGlicmFyaWVzPXBnX3BsYW5fYWR2aWNlCitwZ19wbGFuX2FkdmljZS5hZHZpY2U9J1NFUV9TQ0FO KGVudGlyZWx5X2ZpY3RpdGlvdXMpIEhBU0hfSk9JTih0b3RhbF9mYWJyaWNhdGlvbikgR0FUSEVS KGNvbXBsZXRlbHlfaW1hZ2luYXJ5KScKK3BnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1 cHBsaWVkX2FkdmljZT1mYWxzZQorRU9NCiskbm9kZS0+c3RhcnQ7CisKK215ICRzcmNkaXIgPSBh YnNfcGF0aCgiLi4vLi4iKTsKKworIyAtLWRscGF0aCBpcyBuZWVkZWQgdG8gYmUgYWJsZSB0byBm aW5kIHRoZSBsb2NhdGlvbiBvZiByZWdyZXNzLnNvCisjIGFuZCBhbnkgbGlicmFyaWVzIHRoZSBy ZWdyZXNzaW9uIHRlc3RzIHJlcXVpcmUuCitteSAkZGxwYXRoID0gZGlybmFtZSgkRU5We1JFR1JF U1NfU0hMSUJ9KTsKKworIyAtLW91dHB1dGRpciBwb2ludHMgdG8gdGhlIHBhdGggd2hlcmUgdG8g cGxhY2UgdGhlIG91dHB1dCBmaWxlcy4KK215ICRvdXRwdXRkaXIgPSAkUG9zdGdyZVNRTDo6VGVz dDo6VXRpbHM6OnRtcF9jaGVjazsKKworIyAtLWlucHV0ZGlyIHBvaW50cyB0byB0aGUgcGF0aCBv ZiB0aGUgaW5wdXQgZmlsZXMuCitteSAkaW5wdXRkaXIgPSAiJHNyY2Rpci9zcmMvdGVzdC9yZWdy ZXNzIjsKKworIyBSdW4gdGhlIHRlc3RzLgorbXkgJHJjID0KKyAgc3lzdGVtKCRFTlZ7UEdfUkVH UkVTU30gLiAiICIKKwkgIC4gIi0tYmluZGlyPSAiCisJICAuICItLWRscGF0aD1cIiRkbHBhdGhc IiAiCisJICAuICItLWhvc3Q9IiAuICRub2RlLT5ob3N0IC4gIiAiCisJICAuICItLXBvcnQ9IiAu ICRub2RlLT5wb3J0IC4gIiAiCisJICAuICItLXNjaGVkdWxlPSRzcmNkaXIvc3JjL3Rlc3QvcmVn cmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAiCisJICAuICItLW1heC1jb25jdXJyZW50LXRlc3RzPTIw ICIKKwkgIC4gIi0taW5wdXRkaXI9XCIkaW5wdXRkaXJcIiAiCisJICAuICItLW91dHB1dGRpcj1c IiRvdXRwdXRkaXJcIiIpOworCisjIER1bXAgb3V0IHRoZSByZWdyZXNzaW9uIGRpZmZzIGZpbGUs IGlmIHRoZXJlIGlzIG9uZQoraWYgKCRyYyAhPSAwKQoreworCW15ICRkaWZmcyA9ICIkb3V0cHV0 ZGlyL3JlZ3Jlc3Npb24uZGlmZnMiOworCWlmICgtZSAkZGlmZnMpCisJeworCQlwcmludCAiPT09 IGR1bXBpbmcgJGRpZmZzID09PVxuIjsKKwkJcHJpbnQgc2x1cnBfZmlsZSgkZGlmZnMpOworCQlw cmludCAiPT09IEVPRiA9PT1cbiI7CisJfQorfQorCisjIFJlcG9ydCByZXN1bHRzCitpcygkcmMs IDAsICdyZWdyZXNzaW9uIHRlc3RzIHBhc3MnKTsKKworIyBDcmVhdGUgdGhlIGV4dGVuc2lvbiBz byB3ZSBjYW4gYWNjZXNzIHRoZSBjb2xsZWN0b3IKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgJ0NSRUFURSBFWFRFTlNJT04gcGdfcGxhbl9hZHZpY2UnKTsKKworIyBWZXJpZnkgdGhhdCBh IGxhcmdlIGFtb3VudCBvZiBhZHZpY2Ugd2FzIGNvbGxlY3RlZAorbXkgJGFsbF9xdWVyeV9jb3Vu dCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworU0VMRUNUIENPVU5UKCop IEZST00gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCk7CitFT00KK2NtcF9vaygkYWxs X3F1ZXJ5X2NvdW50LCAnPicsIDIwMDAwLCAiY29waW91cyBhZHZpY2UgY29sbGVjdGVkIik7CisK KyMgVmVyaWZ5IHRoYXQgbG90cyBvZiBkaWZmZXJlbnQgYWR2aWNlIHN0cmluZ3Mgd2VyZSBjb2xs ZWN0ZWQKK215ICRkaXN0aW5jdF9xdWVyeV9jb3VudCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgPDxFT00pOworU0VMRUNUIENPVU5UKCopIEZST00KKwkoU0VMRUNUIERJU1RJTkNUIGFk dmljZSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpKTsKK0VPTQorY21wX29r KCRkaXN0aW5jdF9xdWVyeV9jb3VudCwgJz4nLCAzMDAwLCAiZGl2ZXJzZSBhZHZpY2UgY29sbGVj dGVkIik7CisKKyMgV2Ugd2FudCB0byB0ZXN0IGZvciB0aGUgcHJlc2VuY2Ugb2Ygb3VyIGtub3du IHRhZ3MgaW4gdGhlIGNvbGxlY3RlZCBhZHZpY2UuCisjIFB1dCBhbGwgdGFncyBpbnRvIHRoZSBo YXNoIHRoYXQgZm9sbG93czsgbWFwIGFueSB0YWdzIHRoYXQgYXJlbid0IHRlc3RlZAorIyBieSB0 aGUgY29yZSByZWdyZXNzaW9uIHRlc3RzIHRvIDAsIGFuZCBvdGhlcnMgdG8gMS4KK215ICV0YWdf bWFwID0gKAorCUJJVE1BUF9IRUFQX1NDQU4gPT4gMSwKKwlGT1JFSUdOX0pPSU4gPT4gMCwKKwlH QVRIRVIgPT4gMSwKKwlHQVRIRVJfTUVSR0UgPT4gMSwKKwlIQVNIX0pPSU4gPT4gMSwKKwlJTkRF WF9PTkxZX1NDQU4gPT4gMSwKKwlJTkRFWF9TQ0FOID0+IDEsCisJSk9JTl9PUkRFUiA9PiAxLAor CU1FUkdFX0pPSU5fTUFURVJJQUxJWkUgPT4gMSwKKwlNRVJHRV9KT0lOX1BMQUlOID0+IDEsCisJ TkVTVEVEX0xPT1BfTUFURVJJQUxJWkUgPT4gMSwKKwlORVNURURfTE9PUF9NRU1PSVpFID0+IDEs CisJTkVTVEVEX0xPT1BfUExBSU4gPT4gMSwKKwlOT19HQVRIRVIgPT4gMSwKKwlQQVJUSVRJT05X SVNFID0+IDEsCisJU0VNSUpPSU5fTk9OX1VOSVFVRSA9PiAxLAorCVNFTUlKT0lOX1VOSVFVRSA9 PiAxLAorCVNFUV9TQ0FOID0+IDEsCisJVElEX1NDQU4gPT4gMSwKKyk7Citmb3IgbXkgJHRhZyAo c29ydCBrZXlzICV0YWdfbWFwKQoreworCW15ICRjaGVja2l0ID0gJHRhZ19tYXB7JHRhZ307CisK KwkjIFNlYXJjaCBmb3IgdGhlIGdpdmVuIHRhZy4gVGhpcyBpcyBub3QgZW50aXJlbHkgcm9idXN0 OiBpdCBjb3VsZCBnZXQgdGhyb3duCisJIyBvZmYgYnkgYSB0YWJsZSBhbGlhcyBzdWNoIGFzICJG T1JFSUdOX0pPSU4oIiwgYnV0IHRoYXQgcHJvYmFibHkgd29uJ3QKKwkjIGhhcHBlbiBpbiB0aGUg Y29yZSByZWdyZXNzaW9uIHRlc3RzLgorCW15ICR0YWdfY291bnQgPSAkbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIDw8RU9NKTsKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX2dldF9jb2xsZWN0 ZWRfc2hhcmVkX2FkdmljZSgpCisJV0hFUkUgYWR2aWNlIExJS0UgJyUkdGFnKCUnCitFT00KKwor CSMgQ2hlY2sgdGhhdCB0aGUgdGFnIGdvdCBhIG5vbi10cml2aWFsIGFtb3VudCBvZiB1c2UsIHVu bGVzcyB0b2xkIG90aGVyd2lzZS4KKwljbXBfb2soJHRhZ19jb3VudCwgJz4nLCAxMCwgIm11bHRp cGxlIHVzZXMgb2YgJHRhZyIpIGlmICRjaGVja2l0OworCisJIyBSZWdhcmRsZXNzLCBub3RlIHRo ZSBleGFjdCBjb3VudCBpbiB0aGUgbG9nLCBmb3IgaHVtYW4gY29uc3VtcHRpb24uCisJbm90ZSgi Zm91bmQgJHRhZ19jb3VudCBhZHZpY2Ugc3RyaW5ncyBjb250YWluaW5nICR0YWciKTsKK30KKwor IyBUcmlnZ2VyIGEgcGFydGlhbCBjbGVhbnVwIG9mIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3Rv ciwgYW5kIHRoZW4gYSBmdWxsCisjIGNsZWFudXAuCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIDw8RU9NKTsKK1NFVCBwZ19wbGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdD01 MDA7CitTRUxFQ1QgKiBGUk9NIHBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCk7CitF T00KKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29udHJpYi5z Z21sIGIvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbAppbmRleCAyNGI3MDZiMjlhZC4uYmRkNDg2 NWY1M2YgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL2NvbnRyaWIuc2dtbApAQCAtMTU2LDYgKzE1Niw3IEBAIENSRUFURSBFWFRFTlNJT04g PHJlcGxhY2VhYmxlPmV4dGVuc2lvbl9uYW1lPC9yZXBsYWNlYWJsZT47CiAgJnBnZnJlZXNwYWNl bWFwOwogICZwZ2xvZ2ljYWxpbnNwZWN0OwogICZwZ292ZXJleHBsYWluOworICZwZ3BsYW5hZHZp Y2U7CiAgJnBncHJld2FybTsKICAmcGdyb3dsb2NrczsKICAmcGdzdGF0c3RhdGVtZW50czsKZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sIGIvZG9jL3NyYy9zZ21sL2ZpbGVs aXN0LnNnbWwKaW5kZXggYWM2NmZjYmRiNTcuLmQ5MGI0MzM4ZDJhIDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvZmlsZWxpc3Quc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbApA QCAtMTQ5LDYgKzE0OSw3IEBACiA8IUVOVElUWSBwZ2ZyZWVzcGFjZW1hcCAgU1lTVEVNICJwZ2Zy ZWVzcGFjZW1hcC5zZ21sIj4KIDwhRU5USVRZIHBnbG9naWNhbGluc3BlY3QgIFNZU1RFTSAicGds b2dpY2FsaW5zcGVjdC5zZ21sIj4KIDwhRU5USVRZIHBnb3ZlcmV4cGxhaW4gICBTWVNURU0gInBn b3ZlcmV4cGxhaW4uc2dtbCI+Cis8IUVOVElUWSBwZ3BsYW5hZHZpY2UgICAgU1lTVEVNICJwZ3Bs YW5hZHZpY2Uuc2dtbCI+CiA8IUVOVElUWSBwZ3ByZXdhcm0gICAgICAgU1lTVEVNICJwZ3ByZXdh cm0uc2dtbCI+CiA8IUVOVElUWSBwZ3Jvd2xvY2tzICAgICAgU1lTVEVNICJwZ3Jvd2xvY2tzLnNn bWwiPgogPCFFTlRJVFkgcGdzdGF0c3RhdGVtZW50cyBTWVNURU0gInBnc3RhdHN0YXRlbWVudHMu c2dtbCI+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNnbWwgYi9kb2Mv c3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmIzMTlmOTBmZWJlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NyYy9zZ21sL3Bn cGxhbmFkdmljZS5zZ21sCkBAIC0wLDAgKzEsOTUyIEBACis8IS0tIGRvYy9zcmMvc2dtbC9wZ3Bs YW5hZHZpY2Uuc2dtbCAtLT4KKworPHNlY3QxIGlkPSJwZ3BsYW5hZHZpY2UiIHhyZWZsYWJlbD0i cGdfcHJld2FybSI+CisgPHRpdGxlPnBnX3BsYW5fYWR2aWNlICZtZGFzaDsgaGVscCB0aGUgcGxh bm5lciBnZXQgdGhlIHJpZ2h0IHBsYW48L3RpdGxlPgorCisgPGluZGV4dGVybSB6b25lPSJwZ3Bs YW5hZHZpY2UiPgorICA8cHJpbWFyeT5wZ19wbGFuX2FkdmljZTwvcHJpbWFyeT4KKyA8L2luZGV4 dGVybT4KKworIDxwYXJhPgorICBUaGUgPGZpbGVuYW1lPnBnX3BsYW5fYWR2aWNlPC9maWxlbmFt ZT4gYWxsb3dzIGtleSBwbGFubmVyIGRlY2lzaW9ucyB0byBiZQorICBkZXNjcmliZWQsIHJlcHJv ZHVjZWQsIGFuZCBhbHRlcmVkIHVzaW5nIGEgc3BlY2lhbC1wdXJwb3NlICJwbGFuIGFkdmljZSIK KyAgbWluaS1sYW5ndWFnZS4gSXQgaXMgaW50ZW5kZWQgdG8gYWxsb3cgc3RhYmlsaXphdGlvbiBv ZiBwbGFuIGNob2ljZXMgdGhhdAorICB0aGUgdXNlciBiZWxpZXZlcyB0byBiZSBnb29kLCBhcyB3 ZWxsIGFzIGV4cGVyaW1lbnRhdGlvbiB3aXRoIHBsYW5zIHRoYXQKKyAgdGhlIHBsYW5uZXIgYmVs aWV2ZXMgdG8gYmUgbm9uLW9wdGltYWwuCisgPC9wYXJhPgorCisgPHBhcmE+CisgIE5vdGUgdGhh dCwgc2luY2UgdGhlIHBsYW5uZXIgb2Z0ZW4gbWFrZXMgZ29vZCBkZWNpc2lvbnMsIG92ZXJyaWRp bmcgaXRzCisgIGp1ZGdlbWVudCBjYW4gZWFzaWx5IGJhY2tmaXJlLiBGb3IgZXhhbXBsZSwgaWYg dGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAgdW5kZXJseWluZyBkYXRhIGNoYW5nZXMsIHRoZSBw bGFubmVyIG5vcm1hbGx5IGhhcyB0aGUgb3B0aW9uIHRvIGFkanVzdCB0aGUKKyAgcGxhbiBpbiBh biBhdHRlbXB0IHRvIHByZXNlcnZlIGdvb2QgcGVyZm9ybWFuY2UuIElmIHRoZSBwbGFuIGFkdmlj ZSBwcmV2ZW50cworICB0aGlzLCBhIHZlcnkgcG9vciBwbGFuIG1heSBiZSBjaG9zZW4uIEl0IGlz IGltcG9ydGFudCB0byB1c2UgcGxhbiBhZHZpY2UKKyAgb25seSB3aGVuIHJpc2tzIG9mIGNvbnN0 cmFpbmluZyB0aGUgcGxhbm5lcidzIGNob2ljZXMgYXJlIG91dHdlaWdoZWQgYnkKKyAgdGhlIGJl bmVmaXRzLgorIDwvcGFyYT4KKworIDxzZWN0MiBpZD0icGdwbGFuYWR2aWNlLWdldHRpbmctc3Rh cnRlZCI+CisgIDx0aXRsZT5HZXR0aW5nIFN0YXJ0ZWQ8L3RpdGxlPgorCisgIDxwYXJhPgorICAg SW4gb3JkZXIgdG8gdXNlIHRoaXMgbW9kdWxlLCB0aGUgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8 L2xpdGVyYWw+IG1vZHVsZQorICAgbXVzdCBiZSBsb2FkZWQuIFlvdSBjYW4gZG8gdGhpcyBvbiBh IHN5c3RlbS13aWRlIGJhc2lzIGJ5IGFkZGluZworICAgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8 L2xpdGVyYWw+IHRvCisgICA8eHJlZiBsaW5rZW5kPSJndWMtc2hhcmVkLXByZWxvYWQtbGlicmFy aWVzIi8+IGFuZCByZXN0YXJ0aW5nIHRoZQorICAgc2VydmVyLCBvciBieSBhZGRpbmcgaXQgdG8K KyAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1zZXNzaW9uLXByZWxvYWQtbGlicmFyaWVzIi8+IGFuZCBz dGFydGluZyBhIG5ldyBzZXNzaW9uLAorICAgb3IgYnkgbG9hZGluZyBpdCBpbnRvIGFuIGluZGl2 aWR1YWwgc2Vzc2lvbiB1c2luZyB0aGUKKyAgIDxsaW5rIGxpbmtlbmQ9InNxbC1sb2FkIj48bGl0 ZXJhbD5MT0FEPC9saXRlcmFsPjwvbGluaz4gY29tbWFuZC4gSWYgeW91CisgICB3aXNoIHRvIHVz ZSB0aGUKKyAgIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZS1jb2xsZWN0b3IiPmNvbGxlY3Rv ciBpbnRlcmZhY2U8L2xpbms+LAorICAgeW91IG11c3QgYWxzbyB0aGUgPGxpdGVyYWw+cGdfcGxh bl9hZHZpY2U8L2xpdGVyYWw+IGV4dGVuc2lvbgorICAgaW4gdGhlIGRhdGFiYXNlIHdoZXJlIHlv dSB3aXNoIHRvIHVzZSB0aGUgY29sbGVjdG9yLiBVc2UgdGhlIGNvbW1hbmQKKyAgIDxsaXRlcmFs PkNSRUFURSBFWFRFTlNJT04gcGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IHRvIGRvIHRoaXMuIElm IHlvdSBkbworICAgbm90IHdpc2ggdG8gdXNlIHRoZSBjb2xsZWN0b3IgaW50ZXJmYWNlLCB0aGlz IHN0ZXAgaXMgbm90IHJlcXVpcmVkLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBPbmNlIHRo ZSA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4gbW9kdWxlIGlzIGxvYWRlZCwKKyAg IDxsaW5rIGxpbmtlbmQ9InNxbC1leHBsYWluIj48bGl0ZXJhbD5FWFBMQUlOPC9saXRlcmFsPjwv bGluaz4gd2lsbCBzdXBwb3J0CisgICBhIDxsaXRlcmFsPlBMQU5fQURWSUNFPC9saXRlcmFsPiBv cHRpb24uIFlvdSBjYW4gdXNlIHRoaXMgb3B0aW9uIHRvIHNlZQorICAgYSBwbGFuIGFkdmljZSBz dHJpbmcgZm9yIHRoZSBjaG9zZW4gcGxhbi4gRm9yIGV4YW1wbGU6CisgIDwvcGFyYT4KKworPHBy b2dyYW1saXN0aW5nPgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKyAgICAgICAg U0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBk LmlkOworICAgICAgICAgICAgIFFVRVJZIFBMQU4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQor ICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgTk9fR0FU SEVSKGYgZCkKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPHBhcmE+CisgICBJbiB0aGlzIGV4YW1w bGUsIHRoZSB1c2VyIGhhcyBub3Qgc3BlY2lmaWVkIGFueSBhZHZpY2U7IGluc3RlYWQsIHRoZQor ICAgcGxhbm5lciBoYXMgYmVlbiBwZXJtaXR0ZWQgdG8gbWFrZSB3aGF0ZXZlciBkZWNpc2lvbnMg aXQgdGhpbmtzIGJlc3QsIGFuZAorICAgdGhvc2UgZGVjaXNpb25zIGFyZSBtZW1vcmlhbGl6ZWQg aW4gdGhlIGZvcm0gb2YgYW4gYWR2aWNlIHN0cmluZy4KKyAgIDxsaXRlcmFsPkpPSU5fT1JERVIo ZiBkKTwvbGl0ZXJhbD4gbWVhbnMgdGhhdCA8bGl0ZXJhbD5mPC9saXRlcmFsPiBzaG91bGQKKyAg IGJlIHRoZSBkcml2aW5nIHRhYmxlLCBhbmQgdGhlIGZpcnN0IHRhYmxlIHRvIHdoaWNoIGl0IHNo b3VsZCBiZSBqb2luZWQgaXMKKyAgIDxsaXRlcmFsPmQ8L2xpdGVyYWw+LiA8bGl0ZXJhbD5IQVNI X0pPSU4oZCk8L2xpdGVyYWw+IG1lYW5zIHRoYXQKKyAgIDxsaXRlcmFsPmQ8L2xpdGVyYWw+IHNo b3VsZCBhcHBlYXIgb24gdGhlIGlubmVyIHNpZGUgb2YgYSBoYXNoIGpvaW4uCisgICA8bGl0ZXJh bD5TRVFfU0NBTihmIGQpPC9saXRlcmFsPiBtZWFucyB0aGF0IGJvdGggPGxpdGVyYWw+ZjwvbGl0 ZXJhbD4KKyAgIGFuZCA8bGl0ZXJhbD5kPC9saXRlcmFsPiBzaG91bGQgYmUgYWNjZXNzZWQgdmlh IGEgc2VxdWVudGlhbCBzY2FuLgorICAgPGxpdGVyYWw+Tk9fR0FUSEVSKGYgZCk8L2xpdGVyYWw+ IG1lYW5zIHRoYXQgbmVpdGhlciA8bGl0ZXJhbD5mPC9saXRlcmFsPgorICAgbm9yIDxsaXRlcmFs PmQ8L2xpdGVyYWw+IHNob3VsZCBhcHBlYXIgYmVuZWF0aCBhIDxsaXRlcmFsPkdhdGhlcjwvbGl0 ZXJhbD4KKyAgIG9yIDxsaXRlcmFsPkdhdGhlciBNZXJnZTwvbGl0ZXJhbD4gbm9kZS4gRm9yIG1v cmUgZGV0YWlscyBvbiB0aGUgcGxhbgorICAgYWR2aWNlIG1pbmktbGFuZ3VhZ2UsIHNlZSB0aGUg aW5mb3JtYXRpb24gb24KKyAgIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZS10YXJnZXRzIj5h ZHZpY2UgdGFyZ2V0czwvbGluaz4gYW5kCisgICA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2Ut dGFncyI+YWR2aWNlIHRhZ3M8L2xpbms+LCBiZWxvdy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgor ICAgSWYgeW91IHdhbnQgdG8gc2VlIHRoZSBhZHZpY2Ugc3RyaW5ncyBmb3IgYSBsYXJnZSBudW1i ZXIgb2YgcXVlcmllcywgb3IKKyAgIGFuIGVudGlyZSB3b3JrbG9hZCwgcnVubmluZyA8bGl0ZXJh bD5FWFBMQUlOIChQTEFOX0FEVklDRSk8L2xpdGVyYWw+IGZvcgorICAgZWFjaCBvbmUgbWF5IG5v dCBiZSBjb252ZW5pZW50LiBJbiBzdWNoIHNpdHVhdGlvbnMsIGl0IGNhbiBiZSBtb3JlCisgICBj b252ZW5pZW50IHRvIHVzZSBhbgorICAgPGxpbmsgbGlua2VuZD0icGdwbGFuYWR2aWNlLWNvbGxl Y3RvciI+YWR2aWNlIGNvbGxlY3RvcjwvbGluaz4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAg IE9uY2UgeW91IGhhdmUgYW4gYWR2aWNlIHN0cmluZyBmb3IgYSBxdWVyeSwgeW91IGNhbiB1c2Ug aXQgdG8gY29udHJvbCBob3cKKyAgIHRoYXQgcXVlcnkgaXMgcGxhbm5lZC4gWW91IGNhbiBkbyB0 aGlzIGJ5IHNldHRpbmcKKyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlLmFkdmljZTwvbGl0ZXJh bD4gdG8gdGhlIGFkdmljZSBzdHJpbmcgeW91J3ZlCisgICBjaG9zZW4uIFRoaXMgY2FuIGJlIGFu IGFkdmljZSBzdHJpbmcgdGhhdCB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSBzeXN0ZW0sCisgICBvciBv bmUgeW91J3ZlIHdyaXR0ZW4geW91cnNlbGYuIE9uZSBnb29kIHdheSBvZiBjcmVhdGluZyB5b3Vy IG93biBhZHZpY2UKKyAgIHN0cmluZyBpcyB0byB0YWtlIHRoZSBzdHJpbmcgZ2VuZXJhdGVkIGJ5 IHRoZSBzeXN0ZW0gYW5kIHBpY2sgb3V0IGp1c3QKKyAgIHRob3NlIGVsZW1lbnRzIHRoYXQgeW91 IHdpc2ggdG8gZW5mb3JjZS4gSW4gdGhlIGV4YW1wbGUgYWJvdmUsCisgICA8bGl0ZXJhbD5wZ19w bGFuX2FkdmljZTwvbGl0ZXJhbD4gZW1pdHMgYWR2aWNlIGZvciB0aGUgam9pbiBvcmRlciwgdGhl CisgICBqb2luIG1ldGhvZCwgdGhlIHNjYW4gbWV0aG9kLCBhbmQgdGhlIHVzZSBvZiBwYXJhbGxl bGlzbSwgYnV0IHlvdSBtaWdodAorICAgb25seSB3YW50IHRvIGNvbnRyb2wgdGhlIGpvaW4gb3Jk ZXI6CisgIDwvcGFyYT4KKworPHByb2dyYW1saXN0aW5nPgorU0VUIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdKT0lOX09SREVSKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorICAgICAgICBT RUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQu aWQ7CisgICAgICAgICAgICAgUVVFUlkgUExBTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisg ICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gam9pbl9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihmIGQpIC8qIG1hdGNoZWQgKi8KKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPHBhcmE+Cisg ICBTaW5jZSB0aGUgPGxpdGVyYWw+UExBTl9BRFZJQ0U8L2xpdGVyYWw+IG9wdGlvbiB0bworICAg PGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD4gd2FzIG5vdCBzcGVjaWZpZWQsIG5vIGFkdmljZSBz dHJpbmcgaXMgZ2VuZXJhdGVkCisgICBmb3IgdGhlIHBsYW4uIEhvd2V2ZXIsIHRoZSBzdXBwbGll ZCBwbGFuIGFkdmljZSBpcyBzdGlsbCBzaG93biBzbyB0aGF0CisgICBhbnlvbmUgbG9va2luZyBh dCB0aGUgPGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD4gb3V0cHV0IGtub3dzIHRoYXQgdGhlCisg ICBjaG9zZW4gcGxhbiB3YXMgaW5mbHVlbmNlZCBieSBwbGFuIGFkdmljZS4gSWYgaW5mb3JtYXRp b24gYWJvdXQgc3VwcGxpZWQKKyAgIHBsYW4gYWR2aWNlIGlzIG5vdCBkZXNpcmVkLCBpdCBjYW4g YmUgc3VwcHJlc3NlZCBieSBjb25maWd1cmluZworICAgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2Uu YWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlID0gZmFsc2U8L2xpdGVyYWw+LgorICAgRm9y IGVhY2ggcGllY2Ugb2Ygc3VwcGxpZWQgYWR2aWNlLCB0aGUgb3V0cHV0IHNob3dzCisgICA8bGlu ayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UtZmVlZGJhY2siPmFkdmljZSBmZWVkYmFjazwvbGluaz4g aW5kaWNhdGluZworICAgd2hldGhlciBvciBub3QgdGhlIGFkdmljZSB3YXMgc3VjY2Vzc2Z1bGx5 IGFwcGxpZWQgdG8gdGhlIHF1ZXJ5LiBJbiB0aGlzCisgICBjYXNlLCB0aGUgZmVlZGJhY2sgc2F5 cyA8bGl0ZXJhbD4vKiBtYXRjaGVkICovPC9saXRlcmFsPiwgd2hpY2ggbWVhbnMgdGhhdAorICAg PGxpdGVyYWw+ZjwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPmQ8L2xpdGVyYWw+IHdlcmUgZm91bmQg aW4gdGhlIHF1ZXJ5IGFuZAorICAgdGhhdCB0aGUgcmVzdWx0aW5nIHF1ZXJ5IHBsYW4gY29uZm9y bXMgdG8gdGhlIHNwZWNpZmllZCBhZHZpY2UuCisgIDwvcGFyYT4KKworIDwvc2VjdDI+CisKKyA8 c2VjdDIgaWQ9InBncGxhbmFkdmljZS1ob3ctaXQtd29ya3MiPgorICA8dGl0bGU+SG93IEl0IFdv cmtzPC90aXRsZT4KKworICA8cGFyYT4KKyAgIFBsYW4gYWR2aWNlIGlzIHdyaXR0ZW4gaW1wZXJh dGl2ZWx5OyB0aGF0IGlzLCBpdCBzcGVjaWZpZXMgd2hhdCBzaG91bGQgYmUKKyAgIGRvbmUuIEhv d2V2ZXIsIGF0IGFuIGltcGxlbWVudGF0aW9uIGxldmVsLAorICAgPGxpdGVyYWw+cGdfcGxhbl9h ZHZpY2U8L2xpdGVyYWw+IHdvcmtzIGJ5IHRlbGxpbmcgdGhlIGNvcmUgcGxhbm5lciB3aGF0Cisg ICBzaG91bGQgbm90IGJlIGRvbmUuIEluIG90aGVyIHdvcmRzLCBpdCBvcGVyYXRlcyBieSBjb25z dHJhaW5pbmcgdGhlCisgICBwbGFubmVyJ3MgY2hvaWNlcywgbm90IGJ5IHJlcGxhY2luZyBpdC4g VGhlcmVmb3JlLCBubyBtYXR0ZXIgd2hhdCBhZHZpY2UKKyAgIHlvdSBwcm92aWRlLCB5b3Ugd2ls bCBvbmx5IGV2ZXIgZ2V0IGEgcGxhbiB0aGF0IHRoZSBjb3JlIHBsYW5uZXIgd291bGQgaGF2ZQor ICAgY29uc2lkZXJlZCBmb3IgdGhlIHF1ZXJ5IGluIHF1ZXN0aW9uLiBJZiB5b3UgYXR0ZW1wdCB0 byBmb3JjZSB3aGF0IHlvdQorICAgYmVsaWV2ZSB0byBiZSB0aGUgY29ycmVjdCBwbGFuIGJ5IHN1 cHBseWluZyBhbiBhZHZpY2Ugc3RyaW5nLCBhbmQgdGhlCisgICBwbGFubmVyIHN0aWxsIGZhaWxz IHRvIHByb2R1Y2UgdGhlIGRlc2lyZWQgcGxhbiwgdGhpcyBtZWFucyB0aGF0IGVpdGhlcgorICAg dGhlcmUgaXMgYSBidWcgaW4geW91ciBhZHZpY2Ugc3RyaW5nLCBvciB0aGUgcGxhbiBpbiBxdWVz dGlvbiB3YXMgbm90CisgICBjb25zaWRlcmVkIHZpYWJsZSBieSB0aGUgY29yZSBwbGFubmVyLiBU aGlzIGNvbW1vbmx5IGhhcHBlbnMgZm9yIG9uZSBvZiB0d28KKyAgIHJlYXNvbnMuIEZpcnN0LCBp dCBtaWdodCBiZSB0aGUgcGxhbm5lciBiZWxpZXZlcyB0aGF0IHRoZSBwbGFuIHlvdSdyZSB0cnlp bmcKKyAgIHRvIGZvcmNlIHdvdWxkIGJlIHNlbWFudGljYWxseSBpbmNvcnJlY3QgLS0gdGhhdCBp cywgaXQgd291bGQgcHJvZHVjZSB0aGUKKyAgIHdyb25nIHJlc3VsdHMgLS0gYW5kIGZvciB0aGF0 IHJlYXNvbiBpdCB3YXNuJ3QgY29uc2lkZXJlZC4gU2Vjb25kLCBpdCBtaWdodAorICAgYmUgdGhh dCB0aGUgcGxhbm5lciByZWplY3RlZCB0aGUgcGxhbiB5b3Ugd2VyZSBob3BpbmcgdG8gZ2VuZXJh dGUgb24gc29tZQorICAgZ3JvdW5kcyBvdGhlciB0aGFuIGNvc3QuIEZvciBleGFtcGxlLCBnaXZl biBhIHZlcnkgc2ltcGxlIHF1ZXJ5IHN1Y2ggYXMKKyAgIDxsaXRlcmFsPlNFTEVDVCAqIEZST00g c29tZV90YWJsZTwvbGl0ZXJhbD4sIHRoZSBxdWVyeSBwbGFubmVyIHdpbGwKKyAgIGRlY2lkZSB0 aGF0IHRoZSB1c2Ugb2YgYW4gaW5kZXggaXMgd29ydGhsZXNzIGhlcmUgYmVmb3JlIGl0IHBlcmZv cm1zIGFueQorICAgY29zdGluZyBjYWxjdWxhdGlvbnMuIFlvdSBjYW5ub3QgZm9yY2UgaXQgdG8g dXNlIGFuIGluZGV4IGZvciB0aGlzIHF1ZXJ5CisgICBldmVuIGlmIHlvdSBzZXQgPGxpdGVyYWw+ ZW5hYmxlX3NlcXNjYW4gPSBmYWxzZTwvbGl0ZXJhbD4sIGFuZCB5b3UgY2FuJ3QKKyAgIGZvcmNl IGl0IHRvIHVzZSBhbiBpbmRleCB1c2luZyBwbGFuIGFkdmljZSwgZWl0aGVyLgorICA8L3BhcmE+ CisKKyAgPHBhcmE+CisgICBTcGVjaWZ5aW5nIHBsYW4gYWR2aWNlIHNob3VsZCBuZXZlciBjYXVz ZSBwbGFubmVyIGZhaWx1cmUuIEhvd2V2ZXIsIGlmIHlvdQorICAgc3BlY2lmeSBwbGFuIGFkdmlj ZSB0aGF0IGFza3MgZm9yIHNvbWV0aGluZyBpbXBvc3NpYmxlLCB5b3UgbWF5IGdldCBhIHBsYW4K KyAgIHdoZXJlIHNvbWUgcGxhbiBub2RlcyBhcmUgZmxhZ2dlZCBhcyA8bGl0ZXJhbD5EaXNhYmxl ZDogdHJ1ZTwvbGl0ZXJhbD4gaW4KKyAgIHRoZSA8bGl0ZXJhbD5FWFBMQUlOPC9saXRlcmFsPiBv dXRwdXQuIEluIHNvbWUgY2FzZXMsIHN1Y2ggcGxhbnMgd2lsbCBiZQorICAgYmFzaWNhbGx5IHRo ZSBzYW1lIHBsYW4geW91IHdvdWxkIGhhdmUgZ290dGVuIHdpdGggbm8gc3VwcGxpZWQgYWR2aWNl IGF0CisgICBhbGwsIGJ1dCBpbiBvdGhlciBjYXNlcywgdGhleSBtYXkgYmUgbXVjaCB3b3JzZS4g Rm9yIGV4YW1wbGU6CisgIDwvcGFyYT4KKworPHByb2dyYW1saXN0aW5nPgorU0VUIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKHggZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYp CisgICAgICAgIFNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4KKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9v cAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAg LT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAgICAg ICBJbmRleCBDb25kOiAoaWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIoeCBmIGQpIC8qIHBhcnRpYWxseSBtYXRjaGVkICovCis8L3Byb2dyYW1saXN0 aW5nPgorCisgIDxwYXJhPgorICAgQmVjYXVzZSBuZWl0aGVyIDxsaXRlcmFsPmY8L2xpdGVyYWw+ IG5vciA8bGl0ZXJhbD5kPC9saXRlcmFsPiBpcyB0aGUKKyAgIGZpcnN0IHRhYmxlIGluIHRoZSA8 bGl0ZXJhbD5KT0lOX09SREVSKCk8L2xpdGVyYWw+IHNwZWNpZmljYXRpb24sIHRoZQorICAgcGxh bm5lciBkaXNhYmxlcyBhbGwgZGlyZWN0IGpvaW5zIGJldHdlZW4gdGhlIHR3byBvZiB0aGVtLCB0 aGlua2luZyB0aGF0CisgICB0aGUgam9pbiB0byA8bGl0ZXJhbD54PC9saXRlcmFsPiBzaG91bGQg aGFwcGVuIGZpcnN0LiBTaW5jZSBwbGFubmluZyBpc24ndAorICAgYWxsb3dlZCB0byBmYWlsLCBh IGRpc2FibGVkIHBsYW4gYmV0d2VlbiB0aGUgdHdvIHRhYmxlcyBpcyBldmVudHVhbGx5CisgICBz ZWxlY3RlZCBhbnl3YXksIGJ1dCBoZXJlIGl0J3MgYSA8bGl0ZXJhbD5OZXN0ZWQgTG9vcDwvbGl0 ZXJhbD4gcmF0aGVyIHRoYW4KKyAgIHRoZSA8bGl0ZXJhbD5IYXNoIEpvaW48L2xpdGVyYWw+IHRo YXQgd2FzIGNob3NlbiBpbiB0aGUgYWJvdmUgZXhhbXBsZSB3aGVyZQorICAgbm8gYWR2aWNlIHdh cyBzcGVjaWZpZWQuIFRoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCB3YXlzIHRoYXQgdGhpcyBr aW5kCisgICBvZiB0aGluZyBjYW4gaGFwcGVuOyB3aGVuIGl0IGRvZXMsIHRoZSByZXN1bHRpbmcg cGxhbiBpcyBnZW5lcmFsbHkgd29yc2UKKyAgIHRoYW4gaWYgbm8gYWR2aWNlIGhhZCBiZWVuIHNw ZWNpZmllZCBhdCBhbGwuIFRoZXJlZm9yZSwgaXQgaXMgYSBnb29kIGlkZWEKKyAgIHRvIHZhbGlk YXRlIHRoYXQgdGhlIGFkdmljZSB5b3Ugc3BlY2lmeSBhcHBsaWVzIHRvIHRoZSBxdWVyeSB0byB3 aGljaCBpdAorICAgaXMgYXBwbGllZCBhbmQgdGhhdCB0aGUgcmVzdWx0cyBhcmUgYXMgZXhwZWN0 ZWQuCisgIDwvcGFyYT4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBncGxhbmFkdmljZS10 YXJnZXRzIj4KKyAgPHRpdGxlPkFkdmljZSBUYXJnZXRzPC90aXRsZT4KKworICA8cGFyYT4KKyAg IEFuIDxmaXJzdHRlcm0+YWR2aWNlIHRhcmdldDwvZmlyc3R0ZXJtPiB1bmlxdWVseSBpZGVudGlm aWVzIGEgcGFydGljdWxhcgorICAgaW5zdGFuY2Ugb2YgYSBwYXJ0aWN1bGFyIHRhYmxlIGludm9s dmVkIGluIGEgcGFydGljdWxhciBxdWVyeS4gSW4gc2ltcGxlCisgICBjYXNlcywgc3VjaCBhcyB0 aGUgZXhhbXBsZXMgc2hvd24gYWJvdmUsIHRoZSBhZHZpY2UgdGFyZ2V0IGlzIHNpbXBseSB0aGUK KyAgIHJlbGF0aW9uIGFsaWFzLiBIb3dldmVyLCBhIG1vcmUgY29tcGxleCBzeW50YXggaXMgcmVx dWlyZWQgd2hlbiBzdWJxdWVyaWVzCisgICBhcmUgdXNlZCwgd2hlbiB0YWJsZXMgYXJlIHBhcnRp dGlvbmVkLCBvciB3aGVuIHRoZSBzYW1lIHJlbGF0aW9uIGFsaWFzIGlzCisgICBtZW50aW9uZWQg bW9yZSB0aGFuIG9uY2UgaW4gdGhlIHNhbWUgc3VicXVlcnkgKGUuZy4gPGxpdGVyYWw+KGZvbyBK T0lOIGJhcgorICAgT04gZm9vLmEgPSBiYXIuYSkgeCBKT0lOIGZvbyBPTiB4LmIgPSBmb28uYjwv bGl0ZXJhbD4uIEFueSBjb21iaW5hdGlvbiBvZgorICAgdGhlc2UgdGhyZWUgdGhpbmdzIGNhbiBv Y2N1ciBzaW11bHRhbmVvdXNseTogYSByZWxhdGlvbiBjb3VsZCBiZSBtZW50aW9uZWQKKyAgIG1v cmUgdGhhbiBvbmNlLCBiZSBwYXJ0aXRpb25lZCwgYW5kIGJlIHVzZWQgaW5zaWRlIG9mIGEgc3Vi cXVlcnkuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEJlY2F1c2Ugb2YgdGhpcywgdGhlIGdl bmVyYWwgc3ludGF4IGZvciBhIHJlbGF0aW9uIGlkZW50aWZpZXIgaXM6CisgIDwvcGFyYT4KKwor PHByb2dyYW1saXN0aW5nPgorYWxpYXNfbmFtZSNvY2N1cnJlbmNlX251bWJlci9wYXJ0aXRpb25f c2NoZW1hLnBhcnRpdGlvbl9uYW1lQHBsYW5fbmFtZQorPC9wcm9ncmFtbGlzdGluZz4KKworICA8 cGFyYT4KKyAgIEFsbCBjb21wb25lbnRzIGV4Y2VwdCBmb3IgdGhlIDxsaXRlcmFsPmFsaWFzX25h bWU8L2xpdGVyYWw+IGFyZSBvcHRpb25hbAorICAgYW5kIGluY2x1ZGVkIG9ubHkgd2hlbiByZXF1 aXJlZC4gV2hlbiBhIGNvbXBvbmVudCBpcyBvbWl0dGVkLCB0aGUgYXNzb2NpYXRlZAorICAgcHVu Y3R1YXRpb24gbXVzdCBhbHNvIGJlIG9taXR0ZWQuIEZvciB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBv ZiBhIHRhYmxlCisgICB3aXRoaW4gYSBnaXZlbiBzdWJxdWVyeSwgZ2VuZXJhdGVkIGFkdmljZSB3 aWxsIG9taXQgdGhlIG9jY3VycmVuY2UgbnVtYmVyLAorICAgYnV0IGl0IGlzIGxlZ2FsIHRvIHdy aXRlIDxsaXRlcmFsPiMxPC9saXRlcmFsPiwgaWYgZGVzaXJlZC4gVGhlIHBhcnRpdGlvbgorICAg c2NoZW1hIGFuZCBwYXJ0aXRpb24gbmFtZSBhcmUgaW5jbHVkZWQgb25seSBmb3IgY2hpbGRyZW4g b2YgcGFydGl0aW9uZWQKKyAgIHRhYmxlcy4gSW4gZ2VuZXJhdGVkIGFkdmljZSwgd2UgYWx3YXlz IGluY3VkZSBib3RoLCBidXQgaXQgaXMgbGVnYWwgdG8KKyAgIG9taXQgdGhlIHNjaGVtYS4gVGhl IHBsYW4gbmFtZSBpcyBvbWl0dGVkIGZvciB0aGUgdG9wbGV2ZWwgcGxhbiwgYW5kIG11c3QKKyAg IGJlIGluY2x1ZGVkIGZvciBhbnkgc3VicGxhbi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAg SXQgaXMgbm90IGFsd2F5cyBlYXN5IHRvIGRldGVybWluZSB0aGUgY29ycmVjdCBhZHZpY2UgdGFy Z2V0IGJ5IGV4YW1pbmluZworICAgdGhlIHF1ZXJ5OyBmb3IgaW5zdGFuY2UsIGlmIHRoZSBwbGFu bmVyIHB1bGxzIHVwIGEgc3VicXVlcnkgaW50byB0aGUgcGFyZW50CisgICBxdWVyeSBsZXZlbCwg ZXZlcnl0aGluZyBpbnNpZGUgb2YgaXQgYmVjb21lcyBwYXJ0IG9mIHRoZSBwYXJlbnQgcXVlcnkg bGV2ZWwsCisgICBhbmQgdXNlcyB0aGUgcGFyZW50IHF1ZXJ5J3Mgc3VicGxhbiBuYW1lIChvciBu byBzdWJwbGFuIG5hbWUsIGlmIHB1bGxlZCB1cAorICAgdG8gdGhlIHRvcGxldmVsKS4gRnVydGhl cm1vcmUsIHRoZSBjb3JyZWN0IHN1YnF1ZXJ5IG5hbWUgaXMgc29tZXRpbWVzIG5vdAorICAgb2J2 aW91cy4gRm9yIGV4YW1wbGUsIHdoZW4gdHdvIHF1ZXJpZXMgYXJlIGpvaW5lZCB1c2luZyBhbiBv cGVyYXRpb24gc3VjaCBhcworICAgPGxpdGVyYWw+VU5JT048L2xpdGVyYWw+IG9yIDxsaXRlcmFs PklOVEVSU0VDVDwvbGl0ZXJhbD4sIG5vIG5hbWUgZm9yIHRoZQorICAgc3VicXVlcmllcyBpcyBw cmVzZW50IGluIHRoZSBTUUwgc3ludGF4OyBpbnN0ZWFkLCBhIHN5c3RlbS1nZW5lcmF0ZWQgbmFt ZSBpcworICAgYXNzaWduZWQgdG8gZWFjaCBicmFuY2guIFRoZSBlYXNpZXN0IHdheSB0byBkaXNj b3ZlciB0aGUgcHJvcGVyIGFkdmljZQorICAgdGFyZ2V0cyBpcyB0byB1c2UgPGxpdGVyYWw+RVhQ TEFJTiAoUExBTl9BRFZJQ0UpPC9saXRlcmFsPiBhbmQgZXhhbWluZSB0aGUKKyAgIGdlbmVyYXRl ZCBhZHZpY2UuCisgIDwvcGFyYT4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBncGxhbmFk dmljZS10YWdzIj4KKyAgPHRpdGxlPkFkdmljZSBUYWdzPC90aXRsZT4KKworICA8cGFyYT4KKyAg IEFuIDxmaXJzdHRlcm0+YWR2aWNlIHRhZzwvZmlyc3R0ZXJtPiBzcGVjaWZpZXMgYSBwYXJ0aWN1 bGFyIGJlaGF2aW9yIHRoYXQKKyAgIHNob3VsZCBiZSBlbmZvcmNlZCBmb3Igc29tZSBwb3J0aW9u IG9mIHRoZSBxdWVyeSwgc3VjaCBhcyBhIHBhcnRpY3VsYXIKKyAgIGpvaW4gb3JkZXIgb3Igam9p biBtZXRob2QuIEFsbCBhZHZpY2UgdGFncyB0YWtlCisgICA8bGluayBsaW5rZW5kPSJwZ3BsYW5h ZHZpY2UtdGFyZ2V0cyI+YWR2aWNlIHRhcmdldHM8L2xpbms+IGFzIGFyZ3VtZW50cywKKyAgIGFu ZCBtYW55IGFsbG93IGxpc3RzIG9mIGFkdmljZSB0YXJnZXRzLCB3aGljaCBpbiBzb21lIGNhc2Vz IGNhbiBiZSBuZXN0ZWQKKyAgIG11bHRpcGxlIGxldmVscyBkZWVwLiBTZXZlcmFsIGRpZmZlcmVu dCBjbGFzc2VzIG9mIGFkdmljZSB0YXJnZXRzIGV4aXN0LAorICAgZWFjaCBjb250cm9sbGluZyBh IGRpZmZlcmVudCBhc3BlY3Qgb2YgcXVlcnkgcGxhbm5pbmcuCisgIDwvcGFyYT4KKworICA8c2Vj dDMgaWQ9InBncGxhbmFkdmljZS1zY2FuLW1ldGhvZCI+CisgIDx0aXRsZT5TY2FuIE1ldGhvZCBB ZHZpY2U8L3RpdGxlPgorICAgPHN5bm9wc2lzPgorU0VRX1NDQU4oPHJlcGxhY2VhYmxlPnRhcmdl dDwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCitUSURfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9y ZXBsYWNlYWJsZT4gWyAuLi4gXSkKK0lOREVYX1NDQU4oPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVw bGFjZWFibGU+IDxyZXBsYWNlYWJsZT5pbmRleF9uYW1lPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkK K0lOREVYX09OTFlfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gPHJlcGxh Y2VhYmxlPmluZGV4X25hbWU8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQorRk9SRUlHTl9TQ0FOKCg8 cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkgWyAuLi4gXSkKK0JJVE1B UF9IRUFQX1NDQU4oPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0pPC9z eW5vcHNpcz4KKworICAgPHBhcmE+CisgICAgPGxpdGVyYWw+U0VRX1NDQU48L2xpdGVyYWw+IHNw ZWNpZmllcyB0aGF0IGVhY2ggdGFyZ2V0IHRhYmxlIHNob3VsZCBiZQorICAgIHNjYW5uZWQgdXNp bmcgYSA8bGl0ZXJhbD5TZXEgU2NhbjwvbGl0ZXJhbD4uIDxsaXRlcmFsPlRJRF9TQ0FOPC9saXRl cmFsPgorICAgIHNwZWNpZmllcyB0aGF0IGVhY2ggdGFyZ2V0IHRhYmxlIHNob3VsZCBiZSBzY2Fu bmVkIHVzaW5nIGEKKyAgICA8bGl0ZXJhbD5USUQgU2NhbjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+ VElEIFJhbmdlIFNjYW48L2xpdGVyYWw+LgorICAgIDxsaXRlcmFsPkJJVE1BUF9IRUFQX1NDQU48 L2xpdGVyYWw+IHNwZWNpZmllcyB0aGF0IGVhY2ggdGFyZ2V0IHRhYmxlCisgICAgc2hvdWxkIGJl IHNjYW5uZWQgdXNpbmcgYSA8bGl0ZXJhbD5CaXRtYXAgSGVhcCBTY2FuPC9saXRlcmFsPi4KKyAg IDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgPGxpdGVyYWw+SU5ERVhfU0NBTjwvbGl0ZXJhbD4g c3BlY2lmaWVzIHRoYXQgZWFjaCB0YXJnZXQgdGFibGUgc2hvdWxkCisgICAgYmUgc2Nhbm5lZCB1 c2luZyBhbiA8bGl0ZXJhbD5JbmRleCBTY2FuPC9saXRlcmFsPiBvbiB0aGUgZ2l2ZW4gaW5kZXgK KyAgICBuYW1lLiA8bGl0ZXJhbD5JTkRFWF9PTkxZX1NDQU48L2xpdGVyYWw+IGlzIHNpbWlsYXIs IGJ1dCBzcGVjaWZpZXMgdGhlCisgICAgdXNlIG9mIGFuIDxsaXRlcmFsPkluZGV4IE9ubHkgU2Nh bjwvbGl0ZXJhbD4uIEluIGVpdGhlciBjYXNlLCB0aGUgaW5kZXgKKyAgICBuYW1lIGNhbiBiZSwg YnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsIHNjaGVtYS1xdWFsaWZpZWQuCisgICA8L3BhcmE+CisK KyAgIDxwYXJhPgorICAgIDxsaXRlcmFsPkZPUkVJR05fU0NBTjwvbGl0ZXJhbD4gc3BlY2lmaWVz IHRoYXQgYSBmb3JlaWduIGpvaW4gYmV0d2VlbgorICAgIGEgc2V2ZXJhbCBmb3JlaWduIHRhYmxl cyBzaG91bGQgYmUgcHVzaGVkIGRvd24gdG8gYSByZW1vdGUgc2VydmVyIHNvCisgICAgdGhhdCBp dCBjYW4gYmUgaW1wbGVuZW50ZWQgYXMgYSBzaW5nbGUgPGxpdGVyYWw+Rm9yZWlnbiBTY2FuPC9s aXRlcmFsPi4KKyAgICBTcGVjaWZ5aW5nIDxsaXRlcmFsPkZPUkVJR05fU0NBTjwvbGl0ZXJhbD4g Zm9yIGEgc2luZ2xlIGZvcmVpZ24gdGFibGUgaXMKKyAgICBuZWl0aGVyIG5lY2Vzc2FyeSBub3Ig cGVybWlzc2libGU6IGEgPGxpdGVyYWw+Rm9yZWlnbiBTY2FuPC9saXRlcmFsPiB3aWxsCisgICAg bmVlZCB0byBiZSB1c2VkIHJlZ2FyZGxlc3MuIElmIHlvdSB3YW50IHRvIHByZXZlbnQgYSBqb2lu IGZyb20gYmVpbmcKKyAgICBwdXNoZWQgZG93biwgY29uc2lkZXIgdXNpbmcgdGhlIDxsaXRlcmFs PkpPSU5fT1JERVI8L2xpdGVyYWw+IHRhZyBmb3IKKyAgICB0aGF0IHB1cnBvc2UuCisgICA8L3Bh cmE+CisKKyAgIDxwYXJhPgorICAgIFRoZSBwbGFubmVyIHN1cHBvcnRzIG1hbnkgdHlwZXMgb2Yg c2NhbnMgb3RoZXIgdGhhbiB0aG9zZSBsaXN0ZWQgaGVyZTsKKyAgICBob3dldmVyLCBpbiBtb3N0 IG9mIHRob3NlIGNhc2VzLCB0aGVyZSBpcyBubyBtZWFuaW5nZnVsIGRlY2lzaW9uIHRvIGJlCisg ICAgbWFkZSwgYW5kIGhlbmNlIG5vIG5lZWQgZm9yIGFkdmljZS4gRm9yIGV4YW1wbGUsIHRoZSBv dXRwdXQgb2YgYQorICAgIHNldC1yZXR1cm5pbmcgZnVuY3Rpb24gdGhhdCBhcHBlYXJzIGluIHRo ZSA8bGl0ZXJhbD5GUk9NPC9saXRlcmFsPiBjbGF1c2UKKyAgICBjYW4gb25seSBldmVyIGJlIHNj YW5uZWQgdXNpbmcgYSA8bGl0ZXJhbD5GdW5jdGlvbiBTY2FuPC9saXRlcmFsPiwgc28KKyAgICB0 aGVyZSBpcyBubyBvcHBvcnR1bml0eSBmb3IgYWR2aWNlIHRvIGNoYW5nZSBhbnl0aGluZy4KKyAg IDwvcGFyYT4KKworICA8L3NlY3QzPgorCisgIDxzZWN0MyBpZD0icGdwbGFuYWR2aWNlLWpvaW4t b3JkZXIiPgorICA8dGl0bGU+Sm9pbiBPcmRlciBBZHZpY2U8L3RpdGxlPgorICAgPHN5bm9wc2lz PgorSk9JTl9PUkRFUig8cmVwbGFjZWFibGU+am9pbl9vcmRlcl9pdGVtPC9yZXBsYWNlYWJsZT4g WyAuLi4gXSkKKworPHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGU+am9pbl9vcmRlcl9pdGVtPC9y ZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+CisKKzxyZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9y ZXBsYWNlYWJsZT4gfAorKCA8cmVwbGFjZWFibGU+am9pbl9vcmRlcl9pdGVtPC9yZXBsYWNlYWJs ZT4gWyAuLi4gXSApIHwKK3sgPHJlcGxhY2VhYmxlPmpvaW5fb3JkZXJfaXRlbTwvcmVwbGFjZWFi bGU+IFsgLi4uIF0gfTwvc3lub3BzaXM+CisKKyAgIDxwYXJhPgorICAgIFdoZW4gPGxpdGVyYWw+ Sk9JTl9PUkRFUjwvbGl0ZXJhbD4gaXMgdXNlZCB3aXRob3V0IGFueSBzdWJsaXN0cywgaXQKKyAg ICBzcGVjaWZpZXMgYW4gb3V0ZXItZGVlcCBqb2luIHdpdGggdGhlIGZpcnN0IGFkdmljZSB0YXJn ZXQgYXMgdGhlIGRyaXZpbmcKKyAgICB0YWJsZSwgam9pbmVkIHRvIGVhY2ggc3Vic2VxdWVudCBh ZHZpY2UgdGFyZ2V0IGluIHR1cm4gaW4gdGhlIG9yZGVyCisgICAgc3BlY2lmaWVkLiBGb3IgaW5z dGFuY2UsIDxsaXRlcmFsPkpPSU5fT1JERVIoYSBiIGMpPC9saXRlcmFsPiBtZWFucyB0aGF0Cisg ICAgPGxpdGVyYWw+YTwvbGl0ZXJhbD4gc2hvdWxkIGJlIHRoZSBkcml2aW5nIHRhYmxlLCBhbmQg dGhhdCBpdCBzaG91bGQgYmUKKyAgICBqb2luZWQgZmlyc3QgdG8gPGxpdGVyYWw+YjwvbGl0ZXJh bD4gYW5kIHRoZW4gdG8gPGxpdGVyYWw+YzwvbGl0ZXJhbD4uCisgICAgSWYgdGhlcmUgYXJlIG1v cmUgdGFibGVzIGluIHRoZSBxdWVyeSB0aGFuIDxsaXRlcmFsPmE8L2xpdGVyYWw+LAorICAgIDxs aXRlcmFsPmI8L2xpdGVyYWw+LCBhbmQgPGxpdGVyYWw+YzwvbGl0ZXJhbD4sIHRoZSByZXN0IGNh biBiZSBqb2luZWQKKyAgICBhZnRlcndhcmRzIGluIGFueSBtYW5uZXIuCisgICA8L3BhcmE+CisK KyAgIDxwYXJhPgorICAgIElmIGEgPGxpdGVyYWw+Sk9JTl9PUkRFUjwvbGl0ZXJhbD4gbGlzdCBj b250YWlucyBhIHBhcmVudGhlc2l6ZWQgc3VibGlzdCwKKyAgICBpdCBzcGVjaWZpZXMgYSBub24t b3V0ZXItZGVlcCBqb2luLiBUaGUgdGFibGVzIGluIHRoZSBzdWJsaXN0IG11c3QgZmlyc3QKKyAg ICBiZSBqb2luZWQgdG8gZWFjaCBvdGhlciBtdWNoIGFzIGlmIHRoZSBzdWJsaXN0IHdlcmUgYSB0 b3BsZXZlbAorICAgIDxsaXRlcmFsPkpPSU5fT1JERVI8L2xpdGVyYWw+IGxpc3QsIGFuZCB0aGUg cmVzdWx0aW5nIGpvaW4gcHJvZHVjdCBtdXN0CisgICAgdGhlbiBhcHBlYXIgb24gdGhlIGlubmVy IHNpZGUgb2YgYSBqb2luIGF0IHRoZSBhcHByb3ByaWF0ZSBwb2ludCBpbiB0aGUKKyAgICBqb2lu IG9yZGVyLiBGb3IgZXhhbXBsZSwgPGxpdGVyYWw+Sk9JTl9PUkRFUihhIChiIGMpIGQpPC9saXRl cmFsPiByZXF1aXJlcworICAgIGEgcGxhbiBvZiB0aGlzIGZvcm06CisgICA8L3BhcmE+CisKKzxw cm9ncmFtbGlzdGluZz4KK0pvaW4KKyAgLT4gIEpvaW4KKyAgICAgICAgLT4gU2NhbiBvbiBhCisg ICAgICAgIC0+IEpvaW4KKyAgICAgICAgICAgICAtPiBTY2FuIG9uIGIKKyAgICAgICAgICAgICAt PiBTY2FuIG9uIGMKKyAgLT4gIFNjYW4gb24gZAorPC9wcm9ncmFtbGlzdGluZz4KKworICAgPHBh cmE+CisgICAgSWYgYSA8bGl0ZXJhbD5KT0lOX09SREVSPC9saXRlcmFsPiBsaXN0IGNvbnRhaW5z IGEgc3VibGlzdCBzdXJyb25kZWQgYnkKKyAgICBjdXJseSBicmFjZXMsIHRoaXMgYWxzbyBzcGVj aWZpZXMgYSBub24tb3V0ZXItZGVlcCBqb2luLiBIb3dldmVyLCB0aGUgam9pbgorICAgIG9yZGVy IHdpdGhpbiB0aGUgc3VibGlzdCBpcyBub3QgY29uc3RyYWluZWQuIEZvciBleGFtcGxlLCBzcGVj aWZpeWluZworICAgIDxsaXRlcmFsPkpPSU5fT1JERVIoYSB7YiBjfSBkPC9saXRlcmFsPiB3b3Vs ZCBhbGxvdyB0aGUgc2NhbnMgb2YKKyAgICA8bGl0ZXJhbD5iPC9saXRlcmFsPiBhbmQgPGxpdGVy YWw+YzwvbGl0ZXJhbD4gdG8gYmUgc3dhcHBlZCBpbiB0aGUKKyAgICBwcmV2aW91cyBleGFtcGxl LCB3aGljaCBpcyBub3QgYWxsb3dlZCB3aGVuIHBhcmVudGhlc2UgYXJlIHVzZWQuCisgICA8L3Bh cmE+CisKKyAgIDxwYXJhPgorICAgIFBhcmVudGhlc2l6ZWQgc3VibGlzdHMgY2FuIGJlIGFyYml0 cmFyaWx5IG5lc3RlZCwgYnV0IHN1Ymxpc3RzIHN1cnJvdW5kZWQKKyAgICBieSBjdXJseSBicmFj ZXMgY2Fubm90IHRoZW1zZWx2ZXMgY29udGFpbiBzdWJsaXN0cy4KKyAgIDwvcGFyYT4KKworICAg PHBhcmE+CisgICAgTXVsdGlwbGUgaW5zdGFuY2VzIG9mIDxsaXRlcmFsPkpPSU5fT1JERVIoKTwv bGl0ZXJhbD4gY2FuIHNvbWV0aW1lcyBiZQorICAgIG5lZWRlZCBpbiBvcmRlciB0byBmdWxseSBj b25zdHJhaW50IHRoZSBqb2luIG9yZGVyLiBUaGlzIG9jY3VycyB3aGVuIHRoZXJlCisgICAgYXJl IG11bHRpcGxlIGpvaW4gcHJvYmxlbXMgdGhhdCBhcmUgb3B0aW1pemVkIHNlcGFyYXRlbHkgYnkg dGhlIHBsYW5uZXIuCisgICAgVGhpcyBjYW4gaGFwcGVuIGR1ZSB0byB0aGUgcHJlc2VuY2Ugb2Yg c3VicXVlcmllcywgb3IgYmVjYXVzZSB0aGVyZSBpcyBhCisgICAgcGFydGl0aW9ud2lzZSBqb2lu LiBJbiB0aGUgbGF0dGVyIGNhc2UsIGVhY2ggYnJhbmNoIG9mIHRoZSBwYXJ0aXRpb253aXNlCisg ICAgam9pbiBjYW4gaGF2ZSBpdHMgb3duIGpvaW4gb3JkZXIsIGluZGVwZW5kZW50IG9mIGV2ZXJ5 IG90aGVyIGJyYW5jaC4KKyAgIDwvcGFyYT4KKworICA8L3NlY3QzPgorCisgIDxzZWN0MyBpZD0i cGdwbGFuYWR2aWNlLWpvaW4tbWV0aG9kIj4KKyAgPHRpdGxlPkpvaW4gTWV0aG9kIEFkdmljZTwv dGl0bGU+CisgICA8c3lub3BzaXM+Citqb2luX21ldGhvZF9uYW1lKDxyZXBsYWNlYWJsZT5qb2lu X21ldGhvZF9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKKworPHBocmFzZT53aGVyZSA8cmVw bGFjZWFibGU+am9pbl9tZXRob2RfbmFtZTwvcmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgorCit7 IE1FUkdFX0pPSU5fTUFURVJJQUxJWkUgfCBNRVJHRV9KT0lOX1BMQUlOIHwgTkVTVEVEX0xPT1Bf TUFURVJJQUxJWkUgfCBORVNURURfTE9PUF9QTEFJTiB8IEhBU0hfSk9JTiB9CisKKzxwaHJhc2U+ YW5kIDxyZXBsYWNlYWJsZT5qb2luX21ldGhvZF9pdGVtPC9yZXBsYWNlYWJsZT4gaXM6PC9waHJh c2U+CisKKzxyZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gfAorKCA8cmVw bGFjZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0gKSB9PC9zeW5vcHNp cz4KKworICAgPHBhcmE+CisgICAgSm9pbiBtZXRob2QgYWR2aWNlIHNwZWNpZmllcyB0aGUgdGFi bGUsIG9yIHNldCBvZiB0YWJsZXMsIHRoYXQgc2hvdWxkCisgICAgYXBwZWFyIG9uIHRoZSBpbm5l ciBzaWRlIG9mIGEgam9pbiB1c2luZyB0aGUgbmFtZWQgam9pbiBtZXRob2QuIEZvcgorICAgIGV4 YW1wbGUsIDxsaXRlcmFsPkhBU0hfSk9JTihhIGIpPC9saXRlcmFsPiBtZWFucyB0aGF0IGVhY2gg b2YKKyAgICA8bGl0ZXJhbD5hPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+YjwvbGl0ZXJhbD4gc2hv dWxkIGFwcGVhciBvbiB0aGUgaW5uZXIKKyAgICBzaWRlIG9mIGEgaGFzaCBqb2luOyBhIGNvbmZp cm1pbmcgcGxhbiBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgdHdvIGhhc2gKKyAgICBqb2lucywgb25l IG9mIHdoaWNoIGhhcyA8bGl0ZXJhbD5hPC9saXRlcmFsPiBhbmQgbm90aGluZyBlbHNlIG9uIHRo ZQorICAgIGlubmVyIHNpZGUsIGFuZCB0aGUgb3RoZXIgb2Ygd2hpY2ggaGFzIDxsaXRlcmFsPmI8 L2xpdGVyYWw+IGFuZCBub3RoaW5nCisgICAgZWxzZSBvbiB0aGUgaW5uZXIgc2lkZS4gT24gdGhl IG90aGVyIGhhbmQsCisgICAgPGxpdGVyYWw+SEFTSF9KT0lOKChhIGIpKTwvbGl0ZXJhbD4gbWVh bnMgdGhhdCB0aGUgam9pbiBwcm9kdWN0IG9mCisgICAgPGxpdGVyYWw+YTwvbGl0ZXJhbD4gYW5k IDxsaXRlcmFsPmI8L2xpdGVyYWw+IHNob3VsZCBhcHBlYXIgdG9nZXRoZXIKKyAgICBvbiB0aGUg aW5uZXIgc2lkZSBvZiBhIGEgc2luZ2xlIGhhc2ggam9pbi4KKyAgIDwvcGFyYT4KKworICAgPHBh cmE+CisgICAgTm90ZSB0aGF0IGpvaW4gbWV0aG9kIGFkdmljZSBpbXBsaWVzIGEgbmVnYXRpdmUg am9pbiBvcmRlciBjb25zdHJhaW50LgorICAgIFNpbmNlIHRoZSBuYW1lZCB0YWJsZSBvciB0YWJs ZXMgbXVzdCBiZSBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIGpvaW4gdXNpbmcKKyAgICB0aGUgc3Bl Y2lmaWVkIG1ldGhvZCwgbm9uZSBvZiB0aGVtIGNhbiBiZSB0aGUgZHJpdmluZyB0YWJsZSBmb3Ig dGhlIGVudGlyZQorICAgIGpvaW4gcHJvYmxlbS4gTW9yZW92ZXIsIG5vIHRhYmxlIGluc2lkZSB0 aGUgc2V0IHNob3VsZCBiZSBqb2luZWQgdG8gYW55CisgICAgdGFibGUgb3V0c2lkZSB0aGUgc2V0 IHVudGlsIGFsbCB0YWJsZXMgd2l0aGluIHRoZSBzZXQgaGF2ZSBiZWVuIGpvaW5lZCB0bworICAg IGVhY2ggb3RoZXIuIEZvciBleGFtcGxlLCBpZiB0aGUgYWR2aWNlIHNwZWNpZmllcworICAgIDxs aXRlcmFsPkhBU0hfSk9JTigoYSBiKSk8L2xpdGVyYWw+IGFuZCB0aGUgc3lzdGVtIGJlZ2lucyBi eSBqb2luaW5nIGVpdGhlcgorICAgIG9mIHRob3NlIHRhYmxlcyB0byBzb21lIHRoaXJkIHRhYmxl IDxsaXRlcmFsPmM8L2xpdGVyYWw+LCB0aGUgcmVzdWx0aW5nCisgICAgcGxhbiBjb3VsZCBuZXZl ciBiZSBjb21wbGlhbnQgd2l0aCB0aGUgcmVxdWVzdCB0byBwdXQgZXhhY3RseSB0aG9zZSB0d28K KyAgICB0YWJsZXMgb24gdGhlIGlubmVyIHNpZGUgb2YgYSBoYXNoIGpvaW4uIFdoZW4gdXNpbmcg Ym90aCBqb2luIG9yZGVyIGFkdmljZQorICAgIGFuZCBqb2luIG1ldGhvZCBhZHZpY2UgZm9yIHRo ZSBzYW1lIHF1ZXJ5LCBpdCBpcyBhIGdvb2QgaWRlYSB0byBtYWtlIHN1cmUKKyAgICB0aGF0IHRo ZXkgZG8gbm90IG1hbmRhdGUgaW5jb21wYXRpYmxlIGpvaW4gb3JkZXJzLgorICAgPC9wYXJhPgor CisgIDwvc2VjdDM+CisKKyAgPHNlY3QzIGlkPSJwZ3BsYW5hZHZpY2UtcGFydGl0aW9ud2lzZSI+ CisgIDx0aXRsZT5QYXJ0aXRpb253aXNlIEFkdmljZTwvdGl0bGU+CisgICA8c3lub3BzaXM+CitQ QVJUSVRJT05XSVNFKDxyZXBsYWNlYWJsZT5wYXJ0aXRpb253aXNlX2l0ZW08L3JlcGxhY2VhYmxl PiBbIC4uLiBdKQorCis8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZT5wYXJ0aXRpb253aXNlX2l0 ZW08L3JlcGxhY2VhYmxlPiBpczo8L3BocmFzZT4KKworPHJlcGxhY2VhYmxlPmFkdmljZV90YXJn ZXQ8L3JlcGxhY2VhYmxlPiB8CisoIDxyZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNl YWJsZT4gWyAuLi4gXSApIH08L3N5bm9wc2lzPgorCisgICA8cGFyYT4KKyAgICBXaGVuIGFwcGxp ZWQgdG8gYSBzaW5nbGUgdGFyZ2V0LCA8bGl0ZXJhbD5QQVJUSVRJT05XSVNFPC9saXRlcmFsPgor ICAgIHNwZWNpZmllcyB0aGF0IHRoZSBzcGVjaWZpZWQgdGFibGUgc2hvdWxkIG5vdCBiZSBwYXJ0 IG9mIGFueSBwYXJ0aXRpb253aXNlCisgICAgam9pbi4gV2hlbiBhcHBsaWVkIHRvIGEgbGlzdCBv ZiB0YXJnZXRzLCA8bGl0ZXJhbD5QQVJUSVRJT05XSVNFPC9saXRlcmFsPgorICAgIHNwZWNpZmll cyB0aGF0IGV4YWN0bHkgdGhhdCBzZXQgb2YgdGFibGVzIHNob3VsZCBiZSBqb2luZWQgaW4KKyAg ICBwYXJ0aXRpb253aXNlIGZhc2hpb24uIE5vdGUgdGhhdCwgcmVnYXJkbGVzcyBvZiB3aGF0IGFk dmljZSBpcyBzcGVjaWZpZWQsCisgICAgbm8gcGFydGl0aW9ud2lzZSBqb2lucyB3aWxsIGJlIHBv c3NpYmxlIGlmCisgICAgPGxpdGVyYWw+ZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiA9IG9mZjwv bGl0ZXJhbD4uCisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mz4KKworICA8c2VjdDMgaWQ9InBncGxh bmFkdmljZS1zZW1pam9pbi11bmlxdWUiPgorICA8dGl0bGU+U2VtaWpvaW4gVW5pcXVlbmVzcyBB ZHZpY2U8L3RpdGxlPgorICAgPHN5bm9wc2lzPgorU0VNSUpPSU5fVU5JUVVFKDxyZXBsYWNlYWJs ZT5zal91bmlxdWVfaXRlbTwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCitTRU1JSk9JTl9OT05fVU5J UVVFKDxyZXBsYWNlYWJsZT5zal91bmlxdWVfaXRlbTwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCisK KzxwaHJhc2U+d2hlcmUgPHJlcGxhY2VhYmxlPnNqX3VuaXF1ZV9pdGVtPC9yZXBsYWNlYWJsZT4g aXM6PC9waHJhc2U+CisKKzxyZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4g fAorKCA8cmVwbGFjZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0gKSB9 PC9zeW5vcHNpcz4KKworICAgPHBhcmE+CisgICAgVGhlIHBsYW5uZXIgc29tZXRpbWVzIGhhcyBh IGNob2ljZSBiZXR3ZWVuIGltcGxlbWVudGluZyBhIHNlbWlqb2luCisgICAgZGlyZWN0bHkgYW5k IGltcGxlbWVtbnRpbmcgYSBzZW1pam9pbiBieSBtYWtpbmcgdGhlIG51bGxhYmxlIHNpZGUgdW5p cXVlCisgICAgYW5kIHRoZW4gcGVyZm9ybWluZyBhbiBpbm5lciBqb2luLiA8bGl0ZXJhbD5TRU1J Sk9JTl9VTklRVUU8L2xpdGVyYWw+CisgICAgc3BlY2lmaWVzIHRoZSBsYXR0ZXIgc3RyYXRlZ3ks IHdoaWxlIDxsaXRlcmFsPlNFTUlKT0lOX05PTl9VTklRVUU8L2xpdGVyYWw+CisgICAgc3BlY2lm aWVzIHRoZSBmb3JtZXIgc3RyYXRlZ3kuIEluIGVpdGhlciBjYXNlLCB0aGUgYXJndW1lbnQgaXMg dGhlIHNpbmdsZQorICAgIHRhYmxlIG9yIGxpc3Qgb2YgdGFibGVzIHRoYXQgYXBwZWFyIGJlbmVh dGggdGhlIG51bGxhYmxlIHNpZGUgb2YgdGhlIGpvaW4uCisgICA8L3BhcmE+CisKKyAgPC9zZWN0 Mz4KKworICA8c2VjdDMgaWQ9InBncGxhbmFkdmljZS1wYXJhbGxlbC1xdWVyeWoiPgorICA8dGl0 bGU+UGFyYWxsZWwgUXVlcnkgQWR2aWNlPC90aXRsZT4KKyAgIDxzeW5vcHNpcz4KK0dBVEhFUig8 cmVwbGFjZWFibGU+Z2F0aGVyX2l0ZW08L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQorR0FUSEVSX01F UkdFKDxyZXBsYWNlYWJsZT5nYXRoZXJfaXRlbTwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCitOT19H QVRIRVIoPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQor Cis8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZT5nYXRoZXJfaXRlbTwvcmVwbGFjZWFibGU+IGlz OjwvcGhyYXNlPgorCis8cmVwbGFjZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+IHwK KyggPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdICkgfTwv c3lub3BzaXM+CisKKyAgIDxwYXJhPgorICAgIDxsaXRlcmFsPkdBVEhFUjwvbGl0ZXJhbD4gb3Ig PGxpdGVyYWw+R0FUSEVSX01FUkdFPC9saXRlcmFsPiBzcGVjaWZpZXMKKyAgICB0aGF0IDxsaXRl cmFsPkdhdGhlcjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+R2F0aGVyIE1lcmdlPC9saXRlcmFsPiwK KyAgICByZXNwZWN0aXZlbHksIHNob3VsZCBiZSBwbGFjZWQgb24gdG9wIG9mIHRoZSBzaW5nbGUg dGFibGUgc3BlY2lmaWVkIGFzCisgICAgYSB0YXJnZXQsIG9yIG9uIHRvcCBvZiB0aGUgam9pbiBi ZXR3ZWVuIHRoZSBsaXN0IG9mIHRhYmxlcyBzcGVjaWZpZWQgYXMKKyAgICBhIHRhcmdldC4gVGhp cyBtZWFucyB0aGF0IDxsaXRlcmFsPkdBVEhFUihhIGIgYyk8L2xpdGVyYWw+IGlzIGEgcmVxdWVz dAorICAgIGZvciB0aHJlZSBkaWZmZXJlbnQgPGxpdGVyYWw+R2F0aGVyPC9saXRlcmFsPiBub2Rl cywgd2hpbGUKKyAgICA8bGl0ZXJhbD5HQVRIRVIoKGEgYiBjKSk8L2xpdGVyYWw+IGlzIGEgcmVx dWVzdCBmb3IgYSBzaW5nbGUKKyAgICA8bGl0ZXJhbD5HYXRoZXI8L2xpdGVyYWw+IG5vZGUgb24g dG9wIG9mIGEgMy13YXkgam9pbi4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgPGxpdGVy YWw+Tk9fR0FUSEVSPC9saXRlcmFsPiBzcGVjaWZpZXMgdGhhdCBub25lIG9mIHRoZSB0YWJsZXMg Z2l2ZW4KKyAgICBhcyBhcmd1bWVudHMgc2hvdWxkIGFwcGVhciBiZW5lYXRoIGEgPGxpdGVyYWw+ R2F0aGVyPC9saXRlcmFsPiBvcgorICAgIDxsaXRlcmFsPkdhdGhlciBNZXJnZTwvbGl0ZXJhbD4g bm9kZS4KKyAgIDwvcGFyYT4KKworICA8L3NlY3QzPgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBp ZD0icGdwbGFuYWR2aWNlLWZlZWRiYWNrIj4KKyAgPHRpdGxlPkFkdmljZSBGZWVkYmFjazwvdGl0 bGU+CisKKyAgPHBhcmE+CisgICA8bGl0ZXJhbD5FWFBMQUlOPC9saXRlcmFsPiBwcm92aWRlcyBm ZWVkYmFjayBvbiB3aGV0aGVyIHN1cHBsaWVkIGFkdmljZSB3YXMKKyAgIHN1Y2Nlc3NmdWxseSBh cHBsaWVkIHRvIHRoZSBxdWVyeSBpbiB0aGUgZm9ybSBvZiBhIGNvbW1lbnQgb24gZWFjaCBwaWVj ZQorICAgb2Ygc3VwcGxpZWQgYWR2aWNlLiBGb3IgZXhhbXBsZToKKyAgPC9wYXJhPgorCis8cHJv Z3JhbWxpc3Rpbmc+CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2hhc2hfam9pbihmIGcp IGpvaW5fb3JkZXIoZiBnKSBpbmRleF9zY2FuKGYgbm9fc3VjaF9pbmRleCknOworU0VUCityaGFh cz0jIEVYUExBSU4gKENPU1RTIE9GRikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNFTEVDVCAqIEZST00gam9fZmFjdCBmCisgICAgICAgIExFRlQg Sk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisgICAgICAgIExFRlQgSk9JTiBq b19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisgICAgICAgIFdIRVJFIHZhbDEgPSAxIEFO RCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6ICgoZDEuaWQgPSBmLmRpbTFfaWQpIEFO RCAoZDIuaWQgPSBmLmRpbTJfaWQpKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEp CisgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBqb19kaW0xIGQxCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAg IC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKGYgbm9fc3VjaF9pbmRleCkgLyogbWF0Y2hlZCwg aW5hcHBsaWNhYmxlLCBmYWlsZWQgKi8KKyAgIEhBU0hfSk9JTihmKSAvKiBtYXRjaGVkICovCisg ICBIQVNIX0pPSU4oZykgLyogbm90IG1hdGNoZWQgKi8KKyAgIEpPSU5fT1JERVIoZiBnKSAvKiBw YXJ0aWFsbHkgbWF0Y2hlZCAqLworPC9wcm9ncmFtbGlzdGluZz4KKworICA8cGFyYT4KKyAgIEZv ciB0aGlzIHF1ZXJ5LCA8bGl0ZXJhbD5mPC9saXRlcmFsPiBpcyBhIHZhbGlkIGFkdmljZSB0YXJn ZXQsIGJ1dAorICAgPGxpdGVyYWw+ZzwvbGl0ZXJhbD4gaXMgbm90LiBUaGVyZWZvcmUsIHRoZSBy ZXF1ZXN0IHRvIHBsYWNlCisgICA8bGl0ZXJhbD5mPC9saXRlcmFsPiBvbiB0aGUgaW5uZXIgc2lk ZSBvZiBhIGhhc2ggam9pbiBpcyBsaXN0ZWQgYXMKKyAgIDxsaXRlcmFsPm1hdGNoZWQ8L2xpdGVy YWw+LCBidXQgdGhlIHJlcXVlc3QgdG8gcGxhY2UgPGxpdGVyYWw+ZzwvbGl0ZXJhbD4KKyAgIG9u IHRoZSBpbm5lciBzaWRlIG9mIGEgaGFzaCBqb2luIGlzIGxpc3RlZCBhcworICAgPGxpdGVyYWw+ bm90IG1hdGNoZWQ8L2xpdGVyYWw+LiBUaGUgPGxpdGVyYWw+Sk9JTl9PUkRFUjwvbGl0ZXJhbD4g YWR2aWNlCisgICB0YWcgaW52b2x2ZXMgb25lIHZhbGlkIHRhcmdldCBhbmQgb25lIGludmFsZCB0 YXJnZXQsIGFuZCBzbyBpcyBsaXN0ZWQgYXMKKyAgIDxsaXRlcmFsPnBhcnRpYWxseSBtYXRjaGVk PC9saXRlcmFsPi4gTm90ZSB0aGF0CisgICA8bGl0ZXJhbD5IQVNIX0pPSU4oZiBnKTwvbGl0ZXJh bD4gaXMgYWN0dWFsbHkgYSByZXF1ZXN0IGZvciB0d28gbG9naWNhbGx5CisgICBzZXBhcmF0ZSBi ZWhhdmlvcnMsIHdoZXJlYXMgPGxpdGVyYWw+Sk9JTl9PUkRFUihmIGcpPC9saXRlcmFsPiBpcyBh IHNpbmdsZQorICAgcmVxdWVzdC4gV2hlbiBwcm92aWRpbmcgYWR2aWNlIGZlZWRiYWNrLCA8bGl0 ZXJhbD5FWFBMQUlOPC9saXRlcmFsPiBzaG93cworICAgZWFjaCBsb2dpY2FsIHJlcXVlc3Qgc2Vw YXJ0ZWx5LCB0b2dldGhlciB3aXRoIGFsbCB0aGUgZmVlZGJhY2sgYXBwbGljYWJsZQorICAgdG8g dGhhdCByZXF1ZXN0IHR5cGUuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEFkdmljZSBmZWVk YmFjayBjYW4gaW5jbHVkZSBhbnkgb2YgdGhlIGZvbGxsb3dpbmc6CisgIDwvcGFyYT4KKworICA8 aXRlbWl6ZWRsaXN0PgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIDxsaXRlcmFs Pm1hdGNoZWQ8L2xpdGVyYWw+IG1lYW5zIHRoYXQgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYWR2aWNl IHRhcmdldHMKKyAgICAgd2VyZSBvYnNlcnZlZCBkdXJpbmcgcXVlcnkgcGxhbm5pbmcuCisgICAg PC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAg ICA8bGl0ZXJhbD5wYXJ0aWFsbHkgbWF0Y2hlZDwvbGl0ZXJhbD4gbWVhbnMgdGhhdCBzb21lIGJ1 dCBub3QgYWxsIG9mIHRoZQorICAgICBzcGVjaWZpZWQgYWR2aWNlIHRhcmdldGVzIHdlcmUgb2Jz ZXJ2ZWQgZHVyaW5nIHF1ZXJ5IHBsYW5uaW5nLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+ CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAgPGxpdGVyYWw+bm90IG1hdGNoZWQ8 L2xpdGVyYWw+IG1lYW5zIHRoYXQgbm9uZSBvZiB0aGUKKyAgICAgc3BlY2lmaWVkIGFkdmljZSB0 YXJnZXRzIHdlcmUgb2JzZXJ2ZWQgZHVyaW5nIHF1ZXJ5IHBsYW5uaW5nLiBUaGlzIG1heQorICAg ICBiZSBoYXBwZW4gaWYgdGhlIGFkdmljZSBzaW1wbHkgZG9lc24ndCBtYXRjaCB0aGUgcXVlcnks IG9yIGl0IG1heQorICAgICBvY2N1ciBpZiB0aGUgcmVsZXZhbnQgcG9ydGlvbiBvZiB0aGUgcXVl cnkgd2FzIG5vdCBwbGFubmVkLCBwZXJoYXBzCisgICAgIGJlY2F1c2UgaXQgd2FzIGdhdGVkIGJ5 IGEgY29uZGl0aW9uIHRoYXQgd2FzIHNpbXBsaWZpZWQgdG8gY29uc3RhbnQgZmFsc2UuCisgICAg PC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAg ICA8bGl0ZXJhbD5pbmFwcGxpY2FibGU8L2xpdGVyYWw+IG1lYW5zIHRoYXQgdGhlIGFkdmljZSB0 YWcgY291bGQgbm90CisgICAgIGJlIGFwcGxpZWQgdG8gdGhlIGFkdmljZSB0YXJnZXRzIGZvciBz b21lIHJlYXNvbi4gRm9yIGV4YW1wbGUsIHRoaXMgd2lsbAorICAgICBoYXBwZW4gaWYgdGhlIHVz ZSBvZiBhIG5vbmV4aXN0ZW50IGluZGV4IGlzIHJlcXVlc3RlZCwgb3IgaWYgYW4gYXR0ZW1wdAor ICAgICBpcyBtYWRlIHRvIGNvbnRyb2wgc2VtaWpvaW4gdW5pcXVuZXNzIGZvciBhIG5vbi1zZW1p am9pbi4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAg PHBhcmE+CisgICAgIDxsaXRlcmFsPmNvbmZsaWN0aW5nPC9saXRlcmFsPiBtZWFucyB0aGF0IHR3 byBvciBtb3JlIHBpZWNlcyBvZiBhZHZpY2UKKyAgICAgcmVxdWVzdCBpbmNvbXBhdGlibGUgYmVo YXZpb3JzLiBGb3IgZXhhbXBsZSwgaWYgeW91IGFkdmlzZSBhIHNlcXVlbnRpYWwKKyAgICAgc2Nh biBhbmQgYW4gaW5kZXggc2NhbiBmb3IgdGhlIHNhbWUgdGFibGUsIGJvdGggcmVxdWVzdHMgd2ls bCBiZSBmbGFnZ2VkCisgICAgIGFzIGNvbmZsaWN0aW5nLiBUaGlzIGFsc28gY29tbW9ubHkgaGFw cGVucyBpZiBqb2luIG1ldGhvZCBhZHZpY2Ugb3IKKyAgICAgc2VtaWpvaW4gdW5pcXVlbmVzcyBh ZHZpY2UgaW1wbGllcyBhIGpvaW4gb3JkZXIgaW5jb21wYXRpYmxlIHdpdGggdGhlCisgICAgIG9u ZSBleHBsaWNpdGx5IHNwZWNpZmllZDsgc2VlCisgICAgIDx4cmVmIGxpbmtlbmQ9InBncGxhbmFk dmljZS1qb2luLW1ldGhvZCIgLz4uCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAg PGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICA8bGl0ZXJhbD5mYWlsZWQ8L2xpdGVyYWw+IG1l YW5zIHRoYXQgcXVlcnkgcGxhbiBkb2VzIG5vdCBjb21wbHkgd2l0aAorICAgICB0aGUgYWR2aWNl LiBUaGlzIG9ubHkgb2NjdXJzIGZvciBlbnRyaWVzIHRoYXQgYXJlIGFsc28gc2hvd24gYXMKKyAg ICAgPGxpdGVyYWw+bWF0Y2hlZDwvbGl0ZXJhbD4uIEl0IGZyZXF1ZW50bHkgb2NjdXJzIGZvciBl bnRyaWVzIHRoYXQgYXJlCisgICAgIGFsc28gbWFya2VkIGFzIDxsaXRlcmFsPmNvbmZsaWN0aW5n PC9saXRlcmFsPiBvcgorICAgICA8bGl0ZXJhbD5pbmFwcGxpY2FibGU8L2xpdGVyYWw+LiBIb3dl dmVyLCBpdCBjYW4gYWxzbyBvY2N1ciB3aGVuIHRoZQorICAgICBhZHZpY2UgaXMgdmFsaWQgaW5z b2ZhciBhcyA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4gaXMgYWJsZQorICAgICB0 byBkZXRlcm1pbmUsIGJ1dCB0aGUgcGxhbm5lciBpcyBub3QgYWJsZSB0byBjb25zdHJ1Y3QgYSBs ZWdhbAorICAgICBwbGFuIHRoYXQgY2FuIGNvbXBseSB3aXRoIHRoZSBhZHZpY2UuIEl0IGlzIGlt cG9ydGFudCB0byBub3RlIHRoYXQgdGhlCisgICAgIHNhbml0eSBjaGVja3MgcGVyZm9ybWVkIGJ5 IDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBhcmUgZmFpcmx5CisgICAgIHN1cGVy ZmljaWFsIGFuZCBmb2N1c2VkIG1vc3RseSBvbiBsb29raW5nIGZvciBsb2dpY2FsIGluY29uc2lz dGVuY2llcyBpbgorICAgICB0aGUgYWR2aWNlIHN0cmluZzsgb25seSB0aGUgcGxhbm5lciBrbm93 cyB3aGF0IHdpbGwgYWN0dWFsbHkgd29yay4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgor CisgIDwvaXRlbWl6ZWRsaXN0PgorCisgIDxwYXJhPgorICAgQWxsIGFkdmljZSBzaG91bGQgYmUg bWFya2VkIGFzIGV4YWN0bHkgb25lIG9mIDxsaXRlcmFsPm1hdGNoZWQ8L2xpdGVyYWw+LAorICAg PGxpdGVyYWw+cGFydGlhbGx5IG1hdGNoZWQ8L2xpdGVyYWw+LCBvciA8bGl0ZXJhbD5ub3QgbWF0 Y2hlZDwvbGl0ZXJhbD4uCisgIDwvcGFyYT4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBn cGxhbmFkdmljZS1jb2xsZWN0b3IiPgorICA8dGl0bGU+QWR2aWNlIENvbGxlY3RvcnM8L3RpdGxl PgorCisgIDxwYXJhPgorICAgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IGNhbiBi ZSBjb25maWd1cmVkIHRvIGF1dG9tYXRpY2FsbHkKKyAgIGdlbmVyYXRlIGFkdmljZSBldmVyeSB0 aW1lIGEgcXVlcnkgaXMgcGxhbm5lZCBhbmQgc3RvcmUgdGhlIHF1ZXJ5IGFuZAorICAgdGhlIGdl bmVyYXRlZCBhZHZpY2Ugc3RyaW5nIGVpdGhlciBpbiBsb2NhbCBvciBzaGFyZWQgbWVtb3J5Lgor ICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUbyBlbmFibGUgYSBjb2xsZWN0b3IsIHlvdSBtdXN0 IGZpcnN0IHNldCBhIGNvbGxlY3Rpb24gbGltaXQuIFdoZW4gdGhlCisgICBudW1iZXIgb2YgcXVl cmllcyBmb3Igd2hpY2ggYWR2aWNlIGhhcyBiZWVuIHN0b3JlZCBleGNlZWRzIHRoZSBjb2xsZWN0 aW9uCisgICBsaW1pdCwgdGhlIG9sZGVzdCBxdWVyaWVzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBh ZHZpY2Ugd2lsbCBiZSBkaXNjYXJkZWQuCisgICBUaGVuLCB5b3UgbXVzdCBhZGp1c3QgYSBzZXBh cmF0ZSBzZXR0aW5nIHRvIGFjdHVhbGx5IGVuYWJsZSBhZHZpY2UKKyAgIGNvbGxlY3Rpb24uIEZv ciB0aGUgbG9jYWwgY29sbGVjdG9yLCBzZXQgdGhlIGNvbGxlY3Rpb24gbGltaXQgYnkgY29uZmln dXJpbmcKKyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQ8 L2xpdGVyYWw+IHRvIGEgdmFsdWUKKyAgIGdyZWF0ZXIgdGhhbiB6ZXJvLCBhbmQgdGhlbiBlbmFi bGUgYWR2aWNlIGNvbGxlY3Rpb24gYnkgc2V0dGluZworICAgPGxpdGVyYWw+cGdfcGxhbl9hZHZp Y2UubG9jYWxfY29sbGVjdG9yID0gdHJ1ZTwvbGl0ZXJhbD4uIEZvciB0aGUgc2hhcmVkCisgICBj b2xsZWN0b3IsIHRoZSBwcm9jZWR1cmUgaXMgdGhlIHNhbWUsIGV4Y2VwdCB0aGF0IHRoZSBuYW1l cyBvZiB0aGUgc2V0dGluZ3MKKyAgIGFyZSA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZS5zaGFyZWRf Y29sbGVjdGlvbl9saW1pdDwvbGl0ZXJhbD4gYW5kCisgICA8bGl0ZXJhbD5wZ19wbGFuX2Fkdmlj ZS5zaGFyZWRfY29sbGVjdG9yPC9saXRlcmFsPi4gTm90ZSB0aGF0IHRoZSBsb2NhbAorICAgY29s bGVjdG9yIHN0b3JlcyBxdWVyeSB0ZXh0cyBhbmQgYWR2aWNlIHN0cmluZ3MgaW4gYmFja2VuZC1s b2NhbCBtZW1vcnksCisgICBhbmQgdGhlIHNoYXJlZCBjb2xsZWN0b3IgZG9lcyB0aGUgc2FtZSBp biBkeW5hbWljIHNoYXJlZCBtZW1vcnksIHNvCisgICBjb25maWd1cmluZyBsYXJnZSBsaW1pdHMg bWF5IHJlc3VsdCBpbiBjb25zaWRlcmFibGUgbWVtb3J5IGNvbnN1bXB0aW9uLgorICA8L3BhcmE+ CisKKyAgPHBhcmE+CisgICBPbmNlIHRoZSBjb2xsZWN0b3IgaXMgZW5hYmxlZCwgeW91IGNhbiBy dW4gYW55IHF1ZXJpZXMgZm9yIHdoaWNoIHlvdSB3aXNoCisgICB0byBzZWUgdGhlIGdlbmVyYXRl ZCBwbGFuIGFkdmljZS4gVGhlbiwgeW91IGNhbiBleGFtaW5lIHdoYXQgaGFzIGJlZW4KKyAgIGNv bGxlY3RlZCB1c2luZyB3aGljaGV2ZXIgb2YKKyAgIDxsaXRlcmFsPlNFTEVDVCAqIEZST00gcGdf Z2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTwvbGl0ZXJhbD4gb3IKKyAgIDxsaXRlcmFsPlNF TEVDVCAqIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCk8L2xpdGVyYWw+Cisg ICBjb3JyZXNwb25kcyB0byB0aGUgY29sbGVjdG9yIHlvdSBlbmFibGVkLiBUbyBkaXNjYXJkIHRo ZSBjb2xsZWN0ZWQgYWR2aWNlCisgICBhbmQgcmVsZWFzZSBtZW1vcnksIHlvdSBjYW4gY2FsbAor ICAgPGxpdGVyYWw+cGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpPC9saXRlcmFsPgor ICAgb3IgPGxpdGVyYWw+cGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKTwvbGl0ZXJh bD4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEluIGFkZGl0aW9uIHRvIHRoZSBxdWVyeSB0 ZXh0cyBhbiBhZHZpY2Ugc3RyaW5ncywgdGhlIGFkdmljZSBjb2xsZWN0b3JzCisgICB3aWxsIGFs c28gc3RvcmUgdGhlIE9JRCBvZiB0aGUgcm9sZSB0aGF0IGNhdXNlZCB0aGUgcXVlcnkgdG8gYmUg cGxhbm5lZCwKKyAgIHRoZSBPSUQgb2YgdGhlIGRhdGFiYXNlIGluIHdoaWNoIHRoZSBxdWVyeSB3 YXMgcGxhbm5lZCwgdGhlIHF1ZXJ5IElELAorICAgYW5kIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBj b2xsZWN0aW9uIG9jY3VycmVkLiBUaGlzIG1vZHVsZSBkb2VzIG5vdAorICAgYXV0b21hdGljYWxs eSBlbmFibGUgcXVlcnkgSUQgY29tcHV0YXRpb247IHRoZXJlZm9yZSwgaWYgeW91IHdhbnQgdGhl CisgICBxdWVyeSBJRCB2YWx1ZSB0byBiZSBwb3B1bGF0ZWQgaW4gY29sbGVjdGVkIGFkdmljZSwg YmUgc3VyZSB0byBjb25maWd1cmUKKyAgIDxsaXRlcmFsPmVuYWJsZV9xdWVyeV9pZCA9IG9uPC9s aXRlcmFsPi4gT3RoZXJ3aXNlLCB0aGUgcXVlcnkgSUQgbWF5CisgICBhbHdheXMgc2hvdyBhcyA8 bGl0ZXJhbD4wPC9saXRlcmFsPi4KKyAgPC9wYXJhPgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBp ZD0icGdwbGFuYWR2aWNlLWZ1bmN0aW9ucyI+CisgIDx0aXRsZT5GdW5jdGlvbnM8L3RpdGxlPgor CisgIDxwYXJhPgorICAgTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyB3aWxsIG9ubHkgYmUgYXZh aWxhYmxlIGlmIHRoZQorICAgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IGV4dGVu c2lvbiBoYXMgYmVlbiBpbnN0YWxsZWQgaW4gdGhlCisgICBjdXJyZW50IGRhdGFiYXNlLCB3aGlj aCBpcyBub3QgbWFuZGF0b3J5LCBzaW5jZSBtdWNoIG9mIHRoZSBmdW5jdGlvbmFsaXR5CisgICBv ZiB0aGlzIG1vZHVsZSBjYW4gYmUgdXNlZCB3aXRob3V0IGluc3RhbGxpbmcgdGhlIGV4dGVuc2lv bi4KKyAgPC9wYXJhPgorCisgIDx2YXJpYWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgPHRlcm0+CisgICAgIDxmdW5jdGlvbj5wZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNl KCkgcmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmlt YXJ5PnBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5k ZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAg ICBSZW1vdmVzIGFsbCBjb2xsZWN0ZWQgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIGZy b20gYmFja2VuZC1sb2NhbAorICAgICAgbWVtb3J5LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0 aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJt PgorICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSByZXR1cm5z IHNldG9mIChpZCBiaWdpbnQsCisgICAgICAgIHVzZXJpZCBvaWQsIGRiaWQgb2lkLCBxdWVyeWlk IGJpZ2ludCwgY29sbGVjdGlvbl90aW1lIHRpbWVzdGFtcHR6LAorICAgICAgICBxdWVyeSB0ZXh0 LCBhZHZpY2UgdGV4dCk8L2Z1bmN0aW9uPgorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1h cnk+cGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0 ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBS ZXR1cm5zIGFsbCBxdWVyeSB0ZXh0cyBhbmQgYWR2aWNlIHN0cmluZ3Mgc3RvcmVkIGluIHRoZSBs b2NhbAorICAgICAgPGxpbmsgbGlua2VuZD0icGdwbGFuYWR2aWNlLWNvbGxlY3RvciI+YWR2aWNl IGNvbGxlY3RvcjwvbGluaz4uCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92 YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxmdW5j dGlvbj5wZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpIHJldHVybnMgdm9pZDwvZnVu Y3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT5wZ19jbGVhcl9jb2xsZWN0 ZWRfc2hhcmVkX2FkdmljZTwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJt PgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFJlbW92ZXMgYWxsIGNvbGxl Y3RlZCBxdWVyeSB0ZXh0cyBhbmQgYWR2aWNlIHN0cmluZ3MgZnJvbSBzaGFyZWQKKyAgICAgIG1l bW9yeS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4K KworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2dldF9j b2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpIHJldHVybnMgc2V0b2YgKGlkIGJpZ2ludCwKKyAgICAg ICAgdXNlcmlkIG9pZCwgZGJpZCBvaWQsIHF1ZXJ5aWQgYmlnaW50LCBjb2xsZWN0aW9uX3RpbWUg dGltZXN0YW1wdHosCisgICAgICAgIHF1ZXJ5IHRleHQsIGFkdmljZSB0ZXh0KTwvZnVuY3Rpb24+ CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT5wZ19nZXRfY29sbGVjdGVkX3NoYXJl ZF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBSZXR1cm5zIGFsbCBxdWVyeSB0ZXh0cyBh bmQgYWR2aWNlIHN0cmluZ3Mgc3RvcmVkIGluIHRoZSBzaGFyZWQKKyAgICAgIDxsaW5rIGxpbmtl bmQ9InBncGxhbmFkdmljZS1jb2xsZWN0b3IiPmFkdmljZSBjb2xsZWN0b3I8L2xpbms+LgorICAg ICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgIDwvdmFy aWFibGVsaXN0PgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0icGdwbGFuYWR2aWNlLWNvbmZp Zy1wYXJhbXMiPgorICA8dGl0bGU+Q29uZmlndXJhdGlvbiBQYXJhbWV0ZXJzPC90aXRsZT4KKwor ICA8dmFyaWFibGVsaXN0PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8 dmFybmFtZT5wZ19wbGFuX2FkdmljZS5hZHZpY2U8L3Zhcm5hbWU+ICg8dHlwZT5zdHJpbmc8L3R5 cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfcGxhbl9h ZHZpY2UuYWR2aWNlPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4K KyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8 cGFyYT4KKyAgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmFkdmljZTwvdmFybmFtZT4gaXMg YW4gYWR2aWNlIHN0cmluZyB0byBiZQorICAgICAgdXNlZCBkdXJpbmcgcXVlcnkgcGxhbm5pbmcu CisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAg IDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNl LmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZTwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48 L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfcGxh bl9hZHZpY2UuYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlIDwvdmFybmFtZT4gY29uZmln dXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVy bT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8dmFybmFtZT5wZ19wbGFu X2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2U8L3Zhcm5hbWU+IGNhdXNlcwor ICAgICAgPGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD4gdG8gYWx3YXlzIHNob3cgYW55IHN1cHBs aWVkIGFkdmljZSBhbmQgdGhlCisgICAgICBhc3NvY2lhdGVkCisgICAgICA8bGluayBsaW5rZW5k PSJwZ3BsYW5hZHZpY2UtZmVlZGJhY2siPmFkdmljZSBmZWVkYmFjazwvbGluaz4uCisgICAgICBU aGUgZGVmYXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPi4gSWYgc2V0IHRvCisg ICAgICA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4sIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBk aXNwbGF5ZWQgb25seSB3aGVuCisgICAgICA8bGl0ZXJhbD5FWFBMQUlOIChQTEFOX0FEVklDRSk8 L2xpdGVyYWw+IGlzIHVzZWQuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92 YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDx2YXJu YW1lPnBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlsczwvdmFybmFtZT4g KDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+ PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzIDwvdmFy bmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJt PgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8dmFy bmFtZT5wZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHM8L3Zhcm5hbWU+ IGFsbG93cworICAgICAgPGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD4gdG8gc2hvdyBkZXRhaWxz IHJlbGF0ZWQgdG8gcGxhbiBhZHZpY2UgZXZlbgorICAgICAgd2hlbiBwcmVwYXJlZCBxdWVyaWVz IGFyZSB1c2VkLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMKKyAgICAgIDxsaXRlcmFsPmZhbHNlPC9s aXRlcmFsPi4gIFdoZW4gcGxhbm5pbmcgYSBwcmVwYXJlZCBxdWVyeSwgd2UgZG8gbm90CisgICAg ICBrbm93IHdoZXRoZXIgPGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD4gd2lsbCBiZSB1c2VkLCBz byBieSBkZWZhdWx0LCB0bworICAgICAgcmVkdWNlIG92ZXJoZWFkLCB3ZSBkbyBub3QgZ2VuZXJh dGUgcGxhbiBhZHZpY2UsIGFuZCB3ZSBkbyBub3QgZ2VuZXJhdGUKKyAgICAgIGZlZWRiYWNrIG9u IHN1cHBsaWVkIGFkdmljZS4gVGhpcyBtZWFucyB0aGF0IGlmCisgICAgICA8bGl0ZXJhbD5FWFBM QUlOIEVYRUNVVEU8L2xpdGVyYWw+IGlzIGxhdGVyIHVzZWQgb24gdGhlIHByZXBhcmVkIHF1ZXJ5 LAorICAgICAgaXQgd2lsbCBub3QgYmUgYWJsZSB0byBzaG93IHRoaXMgaW5mb3JtYXRpb24uIENo YW5naW5nIHRoaXMgc2V0dGluZyB0bworICAgICAgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4gYXZv aWRzIHRoaXMgcHJvYmxlbSwgYnV0IGFkZHMgYWRkaXRpb25hbAorICAgICAgb3ZlcmhlYWQuIEl0 IGlzIHByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIGVuYWJsZSB0aGlzIG9wdGlvbiBvbmx5IGluCisg ICAgICBzZXNzaW9ucyB3aGVyZSBpdCBpcyBuZWVkZWQsIHJhdGhlciB0aGFuIG9uIGEgc3lzdGVt LXdpZGUgYmFzaXMuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0 ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1lPnBn X3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3RvcjwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5 cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfcGxhbl9h ZHZpY2UubG9jYWxfY29sbGVjdG9yPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwv cHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVt PgorICAgICA8cGFyYT4KKyAgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxl Y3RvcjwvdmFybmFtZT4gZW5hYmxlcyB0aGUKKyAgICAgIGxvY2FsIDxsaW5rIGxpbmtlbmQ9InBn cGxhbmFkdmljZS1jb2xsZWN0b3IiPmFkdmljZSBjb2xsZWN0b3I8L2xpbms+LgorICAgICAgVGhl IGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5 PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0 aW9uX2xpbWl0PC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRl cm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5wZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0 aW9uX2xpbWl0PC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAg ICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFy YT4KKyAgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQ8 L3Zhcm5hbWU+IHNldHMgdGhlCisgICAgICBtYXhpbXVtIG51bWJlciBvZiBxdWVyeSB0ZXh0cyBh bmQgYWR2aWNlIHN0cmluZ3MgcmV0YWluZWQgYnkgdGhlCisgICAgICBsb2NhbCA8bGluayBsaW5r ZW5kPSJwZ3BsYW5hZHZpY2UtY29sbGVjdG9yIj5hZHZpY2UgY29sbGVjdG9yPC9saW5rPi4KKyAg ICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxsaXRlcmFsPjA8L2xpdGVyYWw+LgorICAgICA8L3Bh cmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVu dHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5zaGFyZWRfY29s bGVjdG9yPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+ CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5wZ19wbGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdG9y PC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRl eHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAg IDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0b3I8L3Zhcm5hbWU+IGVuYWJs ZXMgdGhlCisgICAgICBzaGFyZWQgPGxpbmsgbGlua2VuZD0icGdwbGFuYWR2aWNlLWNvbGxlY3Rv ciI+YWR2aWNlIGNvbGxlY3RvcjwvbGluaz4uCisgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8 bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4uICBPbmx5IHN1cGVydXNlcnMgYW5kIHVzZXJzCisgICAg ICB3aXRoIHRoZSBhcHByb3ByaWF0ZSA8bGl0ZXJhbD5TRVQ8L2xpdGVyYWw+IHByaXZpbGVnZSBj YW4gY2hhbmdlIHRoaXMKKyAgICAgIHNldHRpbmcuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3Rp dGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+ CisgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PC92 YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8 cHJpbWFyeT48dmFybmFtZT5wZ19wbGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdDwv dmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0 ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8 dmFybmFtZT5wZ19wbGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdDwvdmFybmFtZT4g c2V0cyB0aGUKKyAgICAgIG1heGltdW0gbnVtYmVyIG9mIHF1ZXJ5IHRleHRzIGFuZCBhZHZpY2Ug c3RyaW5ncyByZXRhaW5lZCBieSB0aGUKKyAgICAgIHNoYXJlZCA8bGluayBsaW5rZW5kPSJwZ3Bs YW5hZHZpY2UtY29sbGVjdG9yIj5hZHZpY2UgY29sbGVjdG9yPC9saW5rPi4KKyAgICAgIFRoZSBk ZWZhdWx0IHZhbHVlIGlzIDxsaXRlcmFsPjA8L2xpdGVyYWw+LiAgT25seSBzdXBlcnVzZXJzIGFu ZCB1c2VycworICAgICAgd2l0aCB0aGUgYXBwcm9wcmlhdGUgPGxpdGVyYWw+U0VUPC9saXRlcmFs PiBwcml2aWxlZ2UgY2FuIGNoYW5nZSB0aGlzCisgICAgICBzZXR0aW5nLgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5 PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS50cmFjZV9tYXNrPC92 YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8 cHJpbWFyeT48dmFybmFtZT5wZ19wbGFuX2FkdmljZS50cmFjZV9tYXNrPC92YXJuYW1lPiBjb25m aWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90 ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFdoZW4gPHZhcm5hbWU+ cGdfcGxhbl9hZHZpY2UudHJhY2VfbWFzazwvdmFybmFtZT4gaXMKKyAgICAgIDxsaXRlcmFsPnRy dWU8L2xpdGVyYWw+LCA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4gd2lsbCBwcmlu dAorICAgICAgbWVzc2FnZXMgZHVyaW5nIHF1ZXJ5IHBsYW5uaW5nIGVhY2ggdGltZSB0aGF0Cisg ICAgICA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4gYWx0ZXJzIHRoZSBtYXNrIG9m IGFsbG93YWJsZSBxdWVyeQorICAgICAgcGxhbiB0eXBlcyBpbiByZXNwb25zZSB0byBzdXBwbGll ZCBwbGFuIGFkdmljZS4gVGhlIGRlZmF1bHQgdmFsdWVzIGlzCisgICAgICA8bGl0ZXJhbD5mYWxz ZTwvbGl0ZXJhbD4uIFRoZSBtZXNzYWdlcyBwcmludGVkIGJ5IHRoaXMgc2V0dGluZyBhcmUgbm90 CisgICAgICBleGNlcHRlZCB0byBiZSB1c2VmdWwgZXhjZXB0IGZvciBwdXJwb3NlcyBvZiBkZWJ1 Z2dpbmcgdGhpcyBtb2R1bGUuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92 YXJsaXN0ZW50cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+CisKKyA8L3NlY3QyPgorCisgPHNlY3Qy IGlkPSJwZ3BsYW5hZHZpY2UtYXV0aG9yIj4KKyAgPHRpdGxlPkF1dGhvcjwvdGl0bGU+CisKKyAg PHBhcmE+CisgICBSb2JlcnQgSGFhcyA8ZW1haWw+cmhhYXNAcG9zdGdyZXNxbC5vcmc8L2VtYWls PgorICA8L3BhcmE+CisgPC9zZWN0Mj4KKworPC9zZWN0MT4KZGlmZiAtLWdpdCBhL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKaW5kZXggNzdlNWY4ZmRjMTYuLjA2NjRkOTk0NDkwIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdApAQCAtMzk3Niw2ICszOTc2LDQ0IEBAIHBnX3V1aWRfdAogcGdfd2NoYXIKIHBnX3djaGFy X3RibAogcGdwX2FybW9yX2hlYWRlcnNfc3RhdGUKK3BncGFfY29sbGVjdGVkX2FkdmljZQorcGdw YV9hZHZpY2VfaXRlbQorcGdwYV9hZHZpY2VfdGFnX3R5cGUKK3BncGFfYWR2aWNlX3RhcmdldAor cGdwYV9pZGVudGlmaWVyCitwZ3BhX2luZGV4X3RhcmdldAorcGdwYV9pbmRleF90eXBlCitwZ3Bh X2l0bV90eXBlCitwZ3BhX2pvaW5fY2xhc3MKK3BncGFfam9pbl9tZW1iZXIKK3BncGFfam9pbl9z dGF0ZQorcGdwYV9qb2luX3N0cmF0ZWd5CitwZ3BhX2pvaW5fdW5yb2xsZXIKK3BncGFfbG9jYWxf YWR2aWNlCitwZ3BhX2xvY2FsX2FkdmljZV9jaHVuaworcGdwYV9vdXRwdXRfY29udGV4dAorcGdw YV9wbGFuX3dhbGtlcl9jb250ZXh0CitwZ3BhX3BsYW5uZXJfc3RhdGUKK3BncGFfcWZfdHlwZQor cGdwYV9xdWVyeV9mZWF0dXJlCitwZ3BhX3JpX2NoZWNrZXIKK3BncGFfcmlfY2hlY2tlcl9rZXkK K3BncGFfc2NhbgorcGdwYV9zY2FuX3N0cmF0ZWd5CitwZ3BhX3NoYXJlZF9hZHZpY2UKK3BncGFf c2hhcmVkX2FkdmljZV9jaHVuaworcGdwYV9zaGFyZWRfc3RhdGUKK3BncGFfc2pfdW5pcXVlX3Jl bAorcGdwYV90YXJnZXRfdHlwZQorcGdwYV90cm92ZQorcGdwYV90cm92ZV9lbnRyeQorcGdwYV90 cm92ZV9lbnRyeV9lbGVtZW50CitwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2gKK3BncGFfdHJvdmVfZW50 cnlfa2V5CitwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlCitwZ3BhX3Ryb3ZlX3Jlc3VsdAorcGdwYV90 cm92ZV9zbGljZQorcGdwYV91bnJvbGxlZF9qb2luCiBwZ3NvY2tldAogcGdzcWxfdGhpbmdfdAog cGdzc0VudHJ5Ci0tIAoyLjUxLjAKCg== --000000000000511f07064975dd6d--