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 1vt9zH-006LmZ-2J for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Feb 2026 19:47:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vt9zG-005Zz5-1J for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Feb 2026 19:46:58 +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 1vt9zF-005Zyu-0T for pgsql-hackers@lists.postgresql.org; Thu, 19 Feb 2026 19:46:57 +0000 Received: from mail-ed1-x52e.google.com ([2a00:1450:4864:20::52e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vt9zA-00000000BMi-1giF for pgsql-hackers@lists.postgresql.org; Thu, 19 Feb 2026 19:46:56 +0000 Received: by mail-ed1-x52e.google.com with SMTP id 4fb4d7f45d1cf-65b94e0a875so1922014a12.0 for ; Thu, 19 Feb 2026 11:46:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771530412; cv=none; d=google.com; s=arc-20240605; b=gb2nLOvXjqJYALKBHn+jSTPOnjWdQktxHTqRS7KawYIvrbLTBjzh8SDfVnyu5ZmZfF gMkvTE1Z6lWFjRPe5yLyITCNDm3/SlMPc/FQY3nN1MUF9P6r6L2/ELWDQiFif90PMNeO V6PXINQyk1bYij4OGtg/7dDh7xAbEaKBLKONkny/9cViFuNqy9homZi+qpJdbvFHm3Zq +3PRFaS5AE79GKZ//w9aiMipxgdY3OpP3o4SOxg/1kDVhaQB5d0dyfJxwKhGut1t6Q+W xiP4oqZSecR5KXI5kzGDiOA8HcJm7J1goaDFren0xjDagwnsHDlrLQWb9gktrvRADsbV ITMA== 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=Nano00hkc4x/ZN1E6MqpAuRWRXA+K4ZGdISHG5vpmX0=; fh=icnfGS3OSH/LKBFbGUrWI+kF9q78gGobqOqTFsgpiC4=; b=by7oUZ+b1aBjaHp1TAe/eehyyqAJ5CXV6BPH3KpmUDMZ92/ZdERupgesfib8Ism0Q8 VnGZlsgN0hz1AivZvJnnZYjzDiruZXfek2WbzilO0Rv3M5nmvuF3R4yKXOBOutCyUorv dREXCkaxi8xiaEWuxY/tyKd/xAk6+56BMRf8FFQLtasEQ88t6cmVMMOQOTHSMcfgLTYn U4JYP4sNRz/7gcURRAqPWdKp1yv1y6PxYDjkLXTcoNiYlTp0MrdGmatzRazSzgEgkqmi Sc57RoBkoyfSpOlHe/PTk5YLT7m7weWMWP7Rokui2xS6MKdeoWG9vU9fVOfQFVLg7iOc Y37A==; 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=1771530412; x=1772135212; 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=Nano00hkc4x/ZN1E6MqpAuRWRXA+K4ZGdISHG5vpmX0=; b=RFwcuX0fewbBcrnKcLDPM9jFwjyimpC9oxHF1v4LDbkntPJhZXlshbfrLMxLGbRPtL uAxrLQG2rT0p1GjfAzKpbiPE3JxnsF7Sc8steAJRFgyotPrn8EDGOOi+eacq+MuNbSye CddUfgW9mfynaa+Tb8EnzLvpV3rIeNhPLa952GetcR3s5N33GH2FVMgX7uN38uj0EnYv gu1DAWfvkveDV7QP3lFquC6o12z95HEyN64PIh71AxXfv/ExjuBtn2bAAYHvrf4xWWqD /5RoGMhAKZ+kcovBjJvf4c2h4ip9APgXStduPgbj5mNtBxFqSIXEWrh6I4AuV9gX+M8Y Ym6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771530412; x=1772135212; 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=Nano00hkc4x/ZN1E6MqpAuRWRXA+K4ZGdISHG5vpmX0=; b=LIPeK5dfUuRcKECysbcz1tN6zJyhptq/ag3Zs9pIPoMf47MWL1bO9rrgYnWPHU4aSq eirJpKyJhfxcQTMZrG1rdOJc2Vb7mDgQ7V7w8/kyrwZIYgxsuoETFrAjCQP42zSo3D6Z hfPZhL01b+auSD1ktP+RVw61gDdIbs+K7U+EgfJqK37OOpcN4+8UrxiwnKVm1Egf2Qvb rrV0M2nPPSV3nDRMkgwr+q1KD/oG/fxIpt3WhE3H3d1V01vsmkSf194GnoKKTDwP3S0w Ut2ye03VZcY+YRPkyrqyOoR0b6rbCOzIOn/EiXIcJlShVE4Pr6OqtrptfA8O9dXDWmvQ QCAw== X-Forwarded-Encrypted: i=1; AJvYcCWxzVUUgqMXcQaBOiR+edNEL2SjkuE3QFJAQmfiSaBUovKQq+oSnXYf2s4ZvN1CsOLS3AowX6SpeMtdp4Hp@lists.postgresql.org X-Gm-Message-State: AOJu0YyrZdnvJ7FPIUaeNsfdLk0oBJ/Ptp1D0Gyf6tndFWayzi7oiwx+ qfgFrpfZvZvkN9pRvW2JBMSeSGKdf3DdMGtyjdqre/7LTFEGMPIv7EHFnL1f5kphfZl7+njpvP+ 9nOEApH0uYO+Swv3xBMaUuJbTKnKp3eg= X-Gm-Gg: AZuq6aI+q9mkuT7W4QwJdTXeT9abUmA3iY+QdFOhsGiODJ6iZV0fsgg3U2SNchU92x1 7aynbnrEsP/I1pcOnL/WxxJTk55Ey6Ty2nQjSlReW3a80rAyIcI5NFPOV8YkGCvN2zIo6S6ANUs 7uTnRr2imVvQ4e6LYDO+X89lLYk+29mBOgwi7CIR+Jf9ToKwjp1zSdHwhvvkOBeUuFhCdeaF4JF 5xHxaulMmkXbF5IqfDCesWTtVT79vge0bso35131GPJAnuAa8WNaQdSiTtlnRUhOKPjr2Xve94h Hte3zbSLTsu7lfa0BpiktAKp8hDE8+MItZcBhJQ= X-Received: by 2002:a17:907:3c87:b0:b87:d92a:f6d with SMTP id a640c23a62f3a-b903dad83a1mr408009266b.14.1771530411631; Thu, 19 Feb 2026 11:46:51 -0800 (PST) MIME-Version: 1.0 References: <1136161.1769654478@sss.pgh.pa.us> In-Reply-To: From: Robert Haas Date: Thu, 19 Feb 2026 14:46:38 -0500 X-Gm-Features: AaiRm535Uf9EJIdOZLIB9Vd98QJBsUWSqPKrPhkLOkqyAYdHAGv6jDTi3fvIuw8 Message-ID: Subject: Re: pg_plan_advice To: Alexandra Wang Cc: Richard Guo , Lukas Fittl , Tom Lane , Jacob Champion , Dian Fay , Matheus Alcantara , Jakub Wartak , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000e54172064b3290cb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e54172064b3290cb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Feb 19, 2026 at 1:53=E2=80=AFAM Alexandra Wang wrote: > I'm about halfway through reviewing 0002 and only now finally > understand what 0001 is doing. 0001 looks good to me. Great! > This took me a bit to work through. I'll send more feedback by the end > of this week. Yeah, it's a huge patch. Thanks for having a look through it. I look forward to your feedback. Here's v17. I have committed what was previously 0004 (which Richard reviewed on another thread) so that is dropped from this version. In addition, this version fixes the last issue that was causing failures running test_plan_advice with pg_plan_advice.feedback_warnings=3Don. In my previous email, I said that I thought the failure in question might be caused by some undesirable coding in the self-join elimination code, but that turned out to be incorrect. Instead, the problem was that pga_identifier.c was using planenr_rt_fetch() in some places, and it needs to use rt_fetch() everywhere. That's because planner_rt_fetch() consults simple_rte_array, which both self-join elimination and join removal can mutate, while rt_fetch() uses the Query's rtable directly, and that never changes. Since we're trying to create stable identifiers, "never changes" is what we want. In addition to changing that, I also cleaned up a few XXX comments. --=20 Robert Haas EDB: http://www.enterprisedb.com --000000000000e54172064b3290cb Content-Type: application/octet-stream; name="v17-0002-Replace-get_relation_info_hook-with-build_simple.patch" Content-Disposition: attachment; filename="v17-0002-Replace-get_relation_info_hook-with-build_simple.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mltvfa4p1 RnJvbSA4ZGIyMWI1YTVhZjJmMjViM2FiNTAyNmU0ZjJlZTZjMGNlZWNkYWM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgMTAgRmViIDIwMjYgMDg6MTM6NDYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNyAy LzVdIFJlcGxhY2UgZ2V0X3JlbGF0aW9uX2luZm9faG9vayB3aXRoCiBidWlsZF9zaW1wbGVfcmVs X2hvb2suCgpGb3IgYSBsb25nIHRpbWUsIFBvc3RncmVTUUwgaGFzIGhhZCBhIGdldF9yZWxhdGlv bl9pbmZvX2hvb2sgd2hpY2gKcGx1Z2lucyBjYW4gdXNlIHRvIGVkaXRvcmlhbGl6ZSBvbiB0aGUg aW5mb3JtYXRpb24gdGhhdApnZXRfcmVsYXRpb25faW5mbyBvYnRhaW5zIGZyb20gdGhlIGNhdGFs b2dzLiBIb3dldmVyLCB0aGlzIGhvb2sgaXMKb25seSBjYWxsZWQgZm9yIGJhc2VyZWxzIG9mIHR5 cGUgUlRFX1JFTEFUSU9OLCBhbmQgdGhlcmUgaXMKcG90ZW50aWFsIHV0aWxpdHkgaW4gYSBzaW1p bGFyIGNhbGwgYmFjayBmb3Igb3RoZXIgdHlwZXMgb2YKUlRFcy4gVGhpcyBtaWdodCBoYXZlIGhh ZCB1dGlsaXR5IGV2ZW4gYmVmb3JlIGNvbW1pdAo0MDIwYjM3MGYyMTQzMTViOGMxMDQzMDMwMTg5 OGFjMjE2NTgxNDNmIGFkZGVkIHBnc19tYXNrIHRvClJlbE9wdEluZm8sIGJ1dCBpdCBjZXJ0YWlu bHkgaGFzIHV0aWxpdHkgbm93LgoKU28sIG1vdmUgdGhlIGNhbGxiYWNrIHVwIG9uZSBsZXZlbCwg ZGVsZXRpbmcgZ2V0X3JlbGF0aW9uX2luZm9faG9vayBhbmQKYWRkaW5nIGJ1aWxkX3NpbXBsZV9y ZWxfaG9vayBpbnN0ZWFkLiBUaGUgbmV3IGNhbGxiYWNrIGlzIGNhbGxlZCBqdXN0CnNsaWdodGx5 IGxhdGVyIHRoYW4gYmVmb3JlIGFuZCB3aXRoIHNsaWdodGx5IGRpZmZlcmVudCBhcmd1bWVudHMs IGJ1dCBpdApzaG91bGQgYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCB0byBhZGp1c3QgZXhpc3Rp bmcgY29kZSB0aGF0IGN1cnJlbnR5eQp1c2VzIGdldF9yZWxhdGlvbl9pbmZvX2hvb2s6IHRoZSB2 YWx1ZXMgcHJldmlvdXNseSBhdmFpbGFibGUgYXMKcmVsYXRpb25PYmplY3RJZCBhbmQgaW5ocGFy ZW50IGFyZSBub3cgYXZhaWxhYmxlIHZpYSBydGUtPnJlbGlkIGFuZApydGUtPmluaCwgYW5kIGNh bGxzIHdoZXJlIHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04gY2FuIGJlIGlnbm9yZWQgaWYK ZGVzaXJlZC4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgfCAxNCAt LS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jIHwgMTUg KysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCAgICAgfCAg NiArKysrKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9wbGFuY2F0LmggICAgICB8ICA4IC0tLS0t LS0tCiA0IGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBiL3NyYy9i YWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCBkNjNlNzM5MGJlNy4uYjJmYmQ2 YTA4MmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwor KysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTU3LDkgKzU3LDYg QEAKIC8qIEdVQyBwYXJhbWV0ZXIgKi8KIGludAkJCWNvbnN0cmFpbnRfZXhjbHVzaW9uID0gQ09O U1RSQUlOVF9FWENMVVNJT05fUEFSVElUSU9OOwogCi0vKiBIb29rIGZvciBwbHVnaW5zIHRvIGdl dCBjb250cm9sIGluIGdldF9yZWxhdGlvbl9pbmZvKCkgKi8KLWdldF9yZWxhdGlvbl9pbmZvX2hv b2tfdHlwZSBnZXRfcmVsYXRpb25faW5mb19ob29rID0gTlVMTDsKLQogdHlwZWRlZiBzdHJ1Y3Qg Tm90bnVsbEhhc2hFbnRyeQogewogCU9pZAkJCXJlbGlkOwkJCS8qIE9JRCBvZiB0aGUgcmVsYXRp b24gKi8KQEAgLTU3MSwxNyArNTY4LDYgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8g KnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkJc2V0X3JlbGF0 aW9uX3BhcnRpdGlvbl9pbmZvKHJvb3QsIHJlbCwgcmVsYXRpb24pOwogCiAJdGFibGVfY2xvc2Uo cmVsYXRpb24sIE5vTG9jayk7Ci0KLQkvKgotCSAqIEFsbG93IGEgcGx1Z2luIHRvIGVkaXRvcmlh bGl6ZSBvbiB0aGUgaW5mbyB3ZSBvYnRhaW5lZCBmcm9tIHRoZQotCSAqIGNhdGFsb2dzLiAgQWN0 aW9ucyBtaWdodCBpbmNsdWRlIGFsdGVyaW5nIHRoZSBhc3N1bWVkIHJlbGF0aW9uIHNpemUsCi0J ICogcmVtb3ZpbmcgYW4gaW5kZXgsIG9yIGFkZGluZyBhIGh5cG90aGV0aWNhbCBpbmRleCB0byB0 aGUgaW5kZXhsaXN0LgotCSAqCi0JICogQW4gZXh0ZW5zaW9uIGNhbiBhbHNvIG1vZGlmeSByZWwt PnBnc19tYXNrIGhlcmUgdG8gY29udHJvbCBwYXRoCi0JICogZ2VuZXJhdGlvbi4KLQkgKi8KLQlp ZiAoZ2V0X3JlbGF0aW9uX2luZm9faG9vaykKLQkJKCpnZXRfcmVsYXRpb25faW5mb19ob29rKSAo cm9vdCwgcmVsYXRpb25PYmplY3RJZCwgaW5ocGFyZW50LCByZWwpOwogfQogCiAvKgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCmluZGV4IGE3MTRjODNmMWJhLi40YTg5ZWRhMDE0MiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwpAQCAtNDcsNiArNDcsOSBAQCB0eXBl ZGVmIHN0cnVjdCBKb2luSGFzaEVudHJ5CiAJUmVsT3B0SW5mbyAqam9pbl9yZWw7CiB9IEpvaW5I YXNoRW50cnk7CiAKKy8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgaW4gYnVpbGRf c2ltcGxlX3JlbCgpICovCitidWlsZF9zaW1wbGVfcmVsX2hvb2tfdHlwZSBidWlsZF9zaW1wbGVf cmVsX2hvb2sgPSBOVUxMOworCiAvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGR1 cmluZyBqb2lucmVsIHNldHVwICovCiBqb2lucmVsX3NldHVwX2hvb2tfdHlwZSBqb2lucmVsX3Nl dHVwX2hvb2sgPSBOVUxMOwogCkBAIC0zOTQsNiArMzk3LDE4IEBAIGJ1aWxkX3NpbXBsZV9yZWwo UGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwgUmVsT3B0SW5mbyAqcGFyZW50KQogCQkJYnJl YWs7CiAJfQogCisJLyoKKwkgKiBBbGxvdyBhIHBsdWdpbiB0byBlZGl0b3JpYWxpemUgb24gdGhl IG5ldyBSZWxPcHRJbmZvLiBUaGlzIGNvdWxkCisJICogaW52b2x2ZSBlZGl0b3JpYWxpemluZyBv biB0aGUgaW5mb3JtYXRpb24gd2hpY2ggZ2V0X3JlbGF0aW9uX2luZm8KKwkgKiBvYnRhaW5lZCBm cm9tIHRoZSBjYXRhbG9ncywgc3VjaCBhcyBhbHRlcmluZyB0aGUgYXNzdW1lZCByZWxhdGlvbiBz aXplLAorCSAqIHJlbW92aW5nIGFuIGluZGV4LCBvciBhZGRpbmcgYSBoeXBvdGhldGljYWwgaW5k ZXggdG8gdGhlIGluZGV4bGlzdC4KKwkgKgorCSAqIEFuIGV4dGVuc2lvbiBjYW4gYWxzbyBtb2Rp ZnkgcmVsLT5wZ3NfbWFzayBoZXJlIHRvIGNvbnRyb2wgcGF0aAorCSAqIGdlbmVyYXRpb24uCisJ ICovCisJaWYgKGJ1aWxkX3NpbXBsZV9yZWxfaG9vaykKKwkJKCpidWlsZF9zaW1wbGVfcmVsX2hv b2spIChyb290LCByZWwsIHJ0ZSk7CisKIAkvKgogCSAqIFdlIG11c3QgYXBwbHkgdGhlIHBhcnRp YWxseSBmaWxsZWQgaW4gUmVsT3B0SW5mbyBiZWZvcmUgY2FsbGluZwogCSAqIGFwcGx5X2NoaWxk X2Jhc2VxdWFscyBkdWUgdG8gc29tZSB0cmFuc2Zvcm1hdGlvbnMgd2l0aGluIHRoYXQgZnVuY3Rp b24KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2lu Y2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKaW5kZXggY2Y4YTY1NGZhNTMuLjgyOTc4NzBjZjdl IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaApAQCAtMTcsNiArMTcsMTIgQEAKICNpbmNsdWRl ICJub2Rlcy9iaXRtYXBzZXQuaCIKICNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKIAorLyog SG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBnZXRfcmVsYXRpb25faW5mbygpICov Cit0eXBlZGVmIHZvaWQgKCpidWlsZF9zaW1wbGVfcmVsX2hvb2tfdHlwZSkgKFBsYW5uZXJJbmZv ICpyb290LAorCQkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwsCisJCQkJCQkJCQkJCVJhbmdlVGJs RW50cnkgKnJ0ZSk7CitleHRlcm4gUEdETExJTVBPUlQgYnVpbGRfc2ltcGxlX3JlbF9ob29rX3R5 cGUgYnVpbGRfc2ltcGxlX3JlbF9ob29rOworCiAvKgogICogRXZlcnl0aGluZyBpbiBzdWJwYXRo cyBvciBwYXJ0aWFsX3N1YnBhdGhzIHdpbGwgYmVjb21lIHBhcnQgb2YgdGhlCiAgKiBBcHBlbmQg bm9kZSdzIHN1YnBhdGhzIGxpc3QuIFBhcnRpYWwgYW5kIG5vbi1wYXJ0aWFsIHN1YnBhdGhzIGNh biBiZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5jYXQuaCBiL3NyYy9p bmNsdWRlL29wdGltaXplci9wbGFuY2F0LmgKaW5kZXggOGQ3Y2M2ZDk4ODYuLjA5YmFmMWE2OTE2 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbmNhdC5oCisrKyBiL3NyYy9p bmNsdWRlL29wdGltaXplci9wbGFuY2F0LmgKQEAgLTE3LDE0ICsxNyw2IEBACiAjaW5jbHVkZSAi bm9kZXMvcGF0aG5vZGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKIAotLyogSG9v ayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBnZXRfcmVsYXRpb25faW5mbygpICovCi10 eXBlZGVmIHZvaWQgKCpnZXRfcmVsYXRpb25faW5mb19ob29rX3R5cGUpIChQbGFubmVySW5mbyAq cm9vdCwKLQkJCQkJCQkJCQkJIE9pZCByZWxhdGlvbk9iamVjdElkLAotCQkJCQkJCQkJCQkgYm9v bCBpbmhwYXJlbnQsCi0JCQkJCQkJCQkJCSBSZWxPcHRJbmZvICpyZWwpOwotZXh0ZXJuIFBHRExM SU1QT1JUIGdldF9yZWxhdGlvbl9pbmZvX2hvb2tfdHlwZSBnZXRfcmVsYXRpb25faW5mb19ob29r OwotCi0KIGV4dGVybiB2b2lkIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBP aWQgcmVsYXRpb25PYmplY3RJZCwKIAkJCQkJCQkgIGJvb2wgaW5ocGFyZW50LCBSZWxPcHRJbmZv ICpyZWwpOwogCi0tIAoyLjUxLjAKCg== --000000000000e54172064b3290cb Content-Type: application/octet-stream; name="v17-0004-Consider-startup-cost-as-a-figure-of-merit-for-p.patch" Content-Disposition: attachment; filename="v17-0004-Consider-startup-cost-as-a-figure-of-merit-for-p.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mltvfa4v3 RnJvbSBmOTUxOGZlOWI2MDU0NzFmOWU0OGU1ZjNlZWRhMDBmMTdjYjFiMzk1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgNiBGZWIgMjAyNiAxNDo1MToyMyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE3IDQv NV0gQ29uc2lkZXIgc3RhcnR1cCBjb3N0IGFzIGEgZmlndXJlIG9mIG1lcml0IGZvcgogcGFydGlh bCBwYXRocy4KClByZXZpb3VzbHksIHRoZSBjb21lbnRzIHN0YXRlZCB0aGF0IHRoZXJlIHdhcyBu byBwdXJwb3NlIHRvIGNvbnNpZGVyaW5nCnN0YXJ0dXAgY29zdCBmb3IgcGFydGlhbCBwYXRocywg YnV0IHRoaXMgaXMgbm90IHRoZSBjYXNlOiBpdCdzIHBlcmZlY3RseQpyZWFzb25hYmxlIHRvIHdh bnQgYSBmYXN0LXN0YXJ0IHBhdGggZm9yIGEgcGxhbiB0aGF0IGludm9sdmVzIGEgTElNSVQKKHBl cmhhcHMgb3ZlciBhbiBhZ2dyZWdhdGUsIHNvIHRoYXQgdGhlcmUgaXMgZW5vdWdoIGRhdGEgYmVp bmcgcHJvY2Vzc2VkCnRvIGp1c3RpZnkgcGFyYWxsZWwgcXVlcnkgYnV0IHlldCB3ZSBkb24ndCB3 YW50IGFsbCB0aGUgcmVzdWx0IHJvd3MpLgoKQWNjb3JkaW5nbHksIHJld3JpdGUgYWRkX3BhcnRp YWxfcGF0aCBhbmQgYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjayB0bwpjb25zaWRlciBzdGFydHVw IGNvc3RzLiBUaGlzIGFsc28gZml4ZXMgYW4gaW5kZXBlbmRlbnQgYnVnIGluCmFkZF9wYXJ0aWFs X3BhdGhfcHJlY2hlY2s6IGNvbW1pdCBlMjIyNTM0Njc5NDJmZGIxMDAwODc3ODdjM2UxZTNhODYy MGM1NGIyCmZhaWxlZCB0byB1cGRhdGUgaXQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGUgbmV3IGRp c2FibGVkX25vZGVzIGZpZWxkLgpUaGF0IGJ1ZyBmaXggaXMgZm9ybWFsbHkgc2VwYXJhdGUgZnJv bSB0aGUgcmVzdCBvZiB0aGlzIHBhdGNoIGFuZCBjb3VsZApiZSBjb21taXR0ZWQgc2VwYXJhdGVs eSwgYnV0IEkgdGhpbmsgaXQgbWFrZXMgbW9yZSBzZW5zZSB0byBmaXggYm90aAppc3N1ZXMgdG9n ZXRoZXIsIGJlY2F1c2UgdGhlbiB3ZSBjYW4gKGFzIHRoaXMgY29tbWl0IGRvZXMpIGp1c3QgbWFr ZQphZGRfcGFydGlhbF9wYXRoX3ByZWNoZWNrIGRvIHRoZSBjb3N0IGNvbXBhcmlzb25zIGluIHRo ZSBzYW1lIHdheSBhcwpjb21wYXJlX3BhdGhfY29zdHNfZnV6emlseSwgd2hpY2ggaG9wZWZ1bGx5 IHJlZHVjZXMgdGhlIGNoYW5jZXMgb2YKZW5kaW5nIHVwIHdpdGggc29tZXRoaW5nIHRoYXQncyBz dGlsbCBpbmNvcnJlY3QuCgpUaGlzIHBhdGNoIGlzIGJhc2VkIG9uIGVhcmxpZXIgd29yayBvbiB0 aGlzIHRvcGljIGJ5IFRvbWFzIFZvbmRyYSwKYnV0IEkgaGF2ZSByZXdyaXR0ZW4gYSBncmVhdCBk ZWFsIG9mIGl0LgoKQ28tYXV0aG9yZWQtYnk6IFJvYmVydCBIYWFzIDxyaGFhc0Bwb3N0Z3Jlc3Fs Lm9yZz4KQ28tYXV0aG9yZWQtYnk6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgotLS0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMgICAgICAgICB8ICAgMyArCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jICAgICAgICAgfCAxNTkgKysrKysr KysrKystLS0tLS0tCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCAgICAgICAgICAg ICAgfCAgIDIgKy0KIC4uLi9yZWdyZXNzL2V4cGVjdGVkL2luY3JlbWVudGFsX3NvcnQub3V0ICAg ICB8ICAxOCArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luX2hhc2gub3V0ICAgICAg IHwgIDEzICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luX2hhc2guc3FsICAgICAgICAgICAg fCAgMTAgKy0KIDYgZmlsZXMgY2hhbmdlZCwgMTIyIGluc2VydGlvbnMoKyksIDgzIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCmluZGV4IGUwYzAwZTI2ZGQ1 Li4wNDQ1NjBkYTdiZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9p bnBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCkBAIC0x MDQ4LDYgKzEwNDgsNyBAQCB0cnlfcGFydGlhbF9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpy b290LAogCWluaXRpYWxfY29zdF9uZXN0bG9vcChyb290LCAmd29ya3NwYWNlLCBqb2ludHlwZSwg bmVzdGxvb3Bfc3VidHlwZSwKIAkJCQkJCSAgb3V0ZXJfcGF0aCwgaW5uZXJfcGF0aCwgZXh0cmEp OwogCWlmICghYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjayhqb2lucmVsLCB3b3Jrc3BhY2UuZGlz YWJsZWRfbm9kZXMsCisJCQkJCQkJCSAgIHdvcmtzcGFjZS5zdGFydHVwX2Nvc3QsCiAJCQkJCQkJ CSAgIHdvcmtzcGFjZS50b3RhbF9jb3N0LCBwYXRoa2V5cykpCiAJCXJldHVybjsKIApAQCAtMTIz Nyw2ICsxMjM4LDcgQEAgdHJ5X3BhcnRpYWxfbWVyZ2Vqb2luX3BhdGgoUGxhbm5lckluZm8gKnJv b3QsCiAJCQkJCQkgICBleHRyYSk7CiAKIAlpZiAoIWFkZF9wYXJ0aWFsX3BhdGhfcHJlY2hlY2so am9pbnJlbCwgd29ya3NwYWNlLmRpc2FibGVkX25vZGVzLAorCQkJCQkJCQkgICB3b3Jrc3BhY2Uu c3RhcnR1cF9jb3N0LAogCQkJCQkJCQkgICB3b3Jrc3BhY2UudG90YWxfY29zdCwgcGF0aGtleXMp KQogCQlyZXR1cm47CiAKQEAgLTEzNjksNiArMTM3MSw3IEBAIHRyeV9wYXJ0aWFsX2hhc2hqb2lu X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJaW5pdGlhbF9jb3N0X2hhc2hqb2luKHJvb3QsICZ3 b3Jrc3BhY2UsIGpvaW50eXBlLCBoYXNoY2xhdXNlcywKIAkJCQkJCSAgb3V0ZXJfcGF0aCwgaW5u ZXJfcGF0aCwgZXh0cmEsIHBhcmFsbGVsX2hhc2gpOwogCWlmICghYWRkX3BhcnRpYWxfcGF0aF9w cmVjaGVjayhqb2lucmVsLCB3b3Jrc3BhY2UuZGlzYWJsZWRfbm9kZXMsCisJCQkJCQkJCSAgIHdv cmtzcGFjZS5zdGFydHVwX2Nvc3QsCiAJCQkJCQkJCSAgIHdvcmtzcGFjZS50b3RhbF9jb3N0LCBO SUwpKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L3BhdGhub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4 IDlmMzk3YTQwZmE2Li5iMjRiZWMyYWUzOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvcGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRo bm9kZS5jCkBAIC03NzgsMTAgKzc3OCw5IEBAIGFkZF9wYXRoX3ByZWNoZWNrKFJlbE9wdEluZm8g KnBhcmVudF9yZWwsIGludCBkaXNhYmxlZF9ub2RlcywKICAqCiAgKgkgIEJlY2F1c2Ugd2UgZG9u J3QgY29uc2lkZXIgcGFyYW1ldGVyaXplZCBwYXRocyBoZXJlLCB3ZSBhbHNvIGRvbid0CiAgKgkg IG5lZWQgdG8gY29uc2lkZXIgdGhlIHJvdyBjb3VudHMgYXMgYSBtZWFzdXJlIG9mIHF1YWxpdHk6 IGV2ZXJ5IHBhdGggd2lsbAotICoJICBwcm9kdWNlIHRoZSBzYW1lIG51bWJlciBvZiByb3dzLiAg TmVpdGhlciBkbyB3ZSBuZWVkIHRvIGNvbnNpZGVyIHN0YXJ0dXAKLSAqCSAgY29zdHM6IHBhcmFs bGVsaXNtIGlzIG9ubHkgdXNlZCBmb3IgcGxhbnMgdGhhdCB3aWxsIGJlIHJ1biB0byBjb21wbGV0 aW9uLgotICoJICBUaGVyZWZvcmUsIHRoaXMgcm91dGluZSBpcyBtdWNoIHNpbXBsZXIgdGhhbiBh ZGRfcGF0aDogaXQgbmVlZHMgdG8KLSAqCSAgY29uc2lkZXIgb25seSBkaXNhYmxlZCBub2Rlcywg cGF0aGtleXMgYW5kIHRvdGFsIGNvc3QuCisgKgkgIHByb2R1Y2UgdGhlIHNhbWUgbnVtYmVyIG9m IHJvd3MuICBIb3dldmVyLCB3ZSBkbyBuZWVkIHRvIGNvbnNpZGVyIHRoZQorICoJICBzdGFydHVw IGNvc3RzOiB0aGlzIHBhcnRpYWwgcGF0aCBjb3VsZCBiZSB1c2VkIGJlbmVhdGggYSBMaW1pdCBu b2RlLAorICoJICBzbyBhIGZhc3Qtc3RhcnQgcGxhbiBjb3VsZCBiZSBjb3JyZWN0LgogICoKICAq CSAgQXMgd2l0aCBhZGRfcGF0aCwgd2UgcGZyZWUgcGF0aHMgdGhhdCBhcmUgZm91bmQgdG8gYmUg ZG9taW5hdGVkIGJ5CiAgKgkgIGFub3RoZXIgcGFydGlhbCBwYXRoOyB0aGlzIHJlcXVpcmVzIHRo YXQgdGhlcmUgYmUgbm8gb3RoZXIgcmVmZXJlbmNlcyB0bwpAQCAtODE5LDUyICs4MTgsMzYgQEAg YWRkX3BhcnRpYWxfcGF0aChSZWxPcHRJbmZvICpwYXJlbnRfcmVsLCBQYXRoICpuZXdfcGF0aCkK IAkJLyogQ29tcGFyZSBwYXRoa2V5cy4gKi8KIAkJa2V5c2NtcCA9IGNvbXBhcmVfcGF0aGtleXMo bmV3X3BhdGgtPnBhdGhrZXlzLCBvbGRfcGF0aC0+cGF0aGtleXMpOwogCi0JCS8qIFVubGVzcyBw YXRoa2V5cyBhcmUgaW5jb21wYXRpYmxlLCBrZWVwIGp1c3Qgb25lIG9mIHRoZSB0d28gcGF0aHMu ICovCisJCS8qCisJCSAqIFVubGVzcyBwYXRoa2V5cyBhcmUgaW5jb21wYXRpYmxlLCBzZWUgaWYg b25lIG9mIHRoZSBwYXRocyBkb21pbmF0ZXMKKwkJICogdGhlIG90aGVyIChib3RoIGluIHN0YXJ0 dXAgYW5kIHRvdGFsIGNvc3QpLiBJdCBtYXkgaGFwcGVuIHRoYXQgb25lCisJCSAqIHBhdGggaGFz IGxvd2VyIHN0YXJ0dXAgY29zdCwgdGhlIG90aGVyIGhhcyBsb3dlciB0b3RhbCBjb3N0LgorCQkg Ki8KIAkJaWYgKGtleXNjbXAgIT0gUEFUSEtFWVNfRElGRkVSRU5UKQogCQl7Ci0JCQlpZiAodW5s aWtlbHkobmV3X3BhdGgtPmRpc2FibGVkX25vZGVzICE9IG9sZF9wYXRoLT5kaXNhYmxlZF9ub2Rl cykpCisJCQlQYXRoQ29zdENvbXBhcmlzb24gY29zdGNtcDsKKworCQkJLyoKKwkJCSAqIERvIGEg ZnV6enkgY29zdCBjb21wYXJpc29uIHdpdGggc3RhbmRhcmQgZnV6emluZXNzIGxpbWl0LgorCQkJ ICovCisJCQljb3N0Y21wID0gY29tcGFyZV9wYXRoX2Nvc3RzX2Z1enppbHkobmV3X3BhdGgsIG9s ZF9wYXRoLAorCQkJCQkJCQkJCQkJIFNURF9GVVpaX0ZBQ1RPUik7CisJCQlpZiAoY29zdGNtcCA9 PSBDT1NUU19CRVRURVIxKQogCQkJewotCQkJCWlmIChuZXdfcGF0aC0+ZGlzYWJsZWRfbm9kZXMg PiBvbGRfcGF0aC0+ZGlzYWJsZWRfbm9kZXMpCi0JCQkJCWFjY2VwdF9uZXcgPSBmYWxzZTsKLQkJ CQllbHNlCisJCQkJaWYgKGtleXNjbXAgPT0gUEFUSEtFWVNfQkVUVEVSMSkKIAkJCQkJcmVtb3Zl X29sZCA9IHRydWU7CiAJCQl9Ci0JCQllbHNlIGlmIChuZXdfcGF0aC0+dG90YWxfY29zdCA+IG9s ZF9wYXRoLT50b3RhbF9jb3N0Ci0JCQkJCSAqIFNURF9GVVpaX0ZBQ1RPUikKKwkJCWVsc2UgaWYg KGNvc3RjbXAgPT0gQ09TVFNfQkVUVEVSMikKIAkJCXsKLQkJCQkvKiBOZXcgcGF0aCBjb3N0cyBt b3JlOyBrZWVwIGl0IG9ubHkgaWYgcGF0aGtleXMgYXJlIGJldHRlci4gKi8KLQkJCQlpZiAoa2V5 c2NtcCAhPSBQQVRIS0VZU19CRVRURVIxKQorCQkJCWlmIChrZXlzY21wID09IFBBVEhLRVlTX0JF VFRFUjIpCiAJCQkJCWFjY2VwdF9uZXcgPSBmYWxzZTsKIAkJCX0KLQkJCWVsc2UgaWYgKG9sZF9w YXRoLT50b3RhbF9jb3N0ID4gbmV3X3BhdGgtPnRvdGFsX2Nvc3QKLQkJCQkJICogU1REX0ZVWlpf RkFDVE9SKQorCQkJZWxzZSBpZiAoY29zdGNtcCA9PSBDT1NUU19FUVVBTCkKIAkJCXsKLQkJCQkv KiBPbGQgcGF0aCBjb3N0cyBtb3JlOyBrZWVwIGl0IG9ubHkgaWYgcGF0aGtleXMgYXJlIGJldHRl ci4gKi8KLQkJCQlpZiAoa2V5c2NtcCAhPSBQQVRIS0VZU19CRVRURVIyKQorCQkJCWlmIChrZXlz Y21wID09IFBBVEhLRVlTX0JFVFRFUjEpCiAJCQkJCXJlbW92ZV9vbGQgPSB0cnVlOwotCQkJfQot CQkJZWxzZSBpZiAoa2V5c2NtcCA9PSBQQVRIS0VZU19CRVRURVIxKQotCQkJewotCQkJCS8qIENv c3RzIGFyZSBhYm91dCB0aGUgc2FtZSwgbmV3IHBhdGggaGFzIGJldHRlciBwYXRoa2V5cy4gKi8K LQkJCQlyZW1vdmVfb2xkID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UgaWYgKGtleXNjbXAgPT0gUEFU SEtFWVNfQkVUVEVSMikKLQkJCXsKLQkJCQkvKiBDb3N0cyBhcmUgYWJvdXQgdGhlIHNhbWUsIG9s ZCBwYXRoIGhhcyBiZXR0ZXIgcGF0aGtleXMuICovCi0JCQkJYWNjZXB0X25ldyA9IGZhbHNlOwot CQkJfQotCQkJZWxzZSBpZiAob2xkX3BhdGgtPnRvdGFsX2Nvc3QgPiBuZXdfcGF0aC0+dG90YWxf Y29zdCAqIDEuMDAwMDAwMDAwMSkKLQkJCXsKLQkJCQkvKiBQYXRoa2V5cyBhcmUgdGhlIHNhbWUs IGFuZCB0aGUgb2xkIHBhdGggY29zdHMgbW9yZS4gKi8KLQkJCQlyZW1vdmVfb2xkID0gdHJ1ZTsK LQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFBhdGhrZXlzIGFyZSB0aGUgc2Ft ZSwgYW5kIG5ldyBwYXRoIGlzbid0IG1hdGVyaWFsbHkKLQkJCQkgKiBjaGVhcGVyLgotCQkJCSAq LwotCQkJCWFjY2VwdF9uZXcgPSBmYWxzZTsKKwkJCQllbHNlIGlmIChrZXlzY21wID09IFBBVEhL RVlTX0JFVFRFUjIpCisJCQkJCWFjY2VwdF9uZXcgPSBmYWxzZTsKIAkJCX0KIAkJfQogCkBAIC05 MTUsMTYgKzg5OCwxNiBAQCBhZGRfcGFydGlhbF9wYXRoKFJlbE9wdEluZm8gKnBhcmVudF9yZWws IFBhdGggKm5ld19wYXRoKQogICogYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjawogICoJICBDaGVj ayB3aGV0aGVyIGEgcHJvcG9zZWQgbmV3IHBhcnRpYWwgcGF0aCBjb3VsZCBwb3NzaWJseSBnZXQg YWNjZXB0ZWQuCiAgKgotICogVW5saWtlIGFkZF9wYXRoX3ByZWNoZWNrLCB3ZSBjYW4gaWdub3Jl IHN0YXJ0dXAgY29zdCBhbmQgcGFyYW1ldGVyaXphdGlvbiwKLSAqIHNpbmNlIHRoZXkgZG9uJ3Qg bWF0dGVyIGZvciBwYXJ0aWFsIHBhdGhzIChzZWUgYWRkX3BhcnRpYWxfcGF0aCkuICBCdXQKLSAq IHdlIGRvIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGFkZCBhIHBhcnRpYWwgcGF0aCBpZiB0 aGVyZSdzIGFscmVhZHkKLSAqIGEgY29tcGxldGUgcGF0aCB0aGF0IGRvbWluYXRlcyBpdCwgc2lu Y2UgaW4gdGhhdCBjYXNlIHRoZSBwcm9wb3NlZCBwYXRoCi0gKiBpcyBzdXJlbHkgYSBsb3Nlci4K KyAqIFVubGlrZSBhZGRfcGF0aF9wcmVjaGVjaywgd2UgY2FuIGlnbm9yZSBwYXJhbWV0ZXJpemF0 aW9uLCBzaW5jZSBpdCBkb2Vzbid0CisgKiBtYXR0ZXIgZm9yIHBhcnRpYWwgcGF0aHMgKHNlZSBh ZGRfcGFydGlhbF9wYXRoKS4gIEJ1dCB3ZSBkbyB3YW50IHRvIG1ha2UKKyAqIHN1cmUgd2UgZG9u J3QgYWRkIGEgcGFydGlhbCBwYXRoIGlmIHRoZXJlJ3MgYWxyZWFkeSBhIGNvbXBsZXRlIHBhdGgg dGhhdAorICogZG9taW5hdGVzIGl0LCBzaW5jZSBpbiB0aGF0IGNhc2UgdGhlIHByb3Bvc2VkIHBh dGggaXMgc3VyZWx5IGEgbG9zZXIuCiAgKi8KIGJvb2wKIGFkZF9wYXJ0aWFsX3BhdGhfcHJlY2hl Y2soUmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgaW50IGRpc2FibGVkX25vZGVzLAotCQkJCQkJICBD b3N0IHRvdGFsX2Nvc3QsIExpc3QgKnBhdGhrZXlzKQorCQkJCQkJICBDb3N0IHN0YXJ0dXBfY29z dCwgQ29zdCB0b3RhbF9jb3N0LCBMaXN0ICpwYXRoa2V5cykKIHsKKwlib29sCQljb25zaWRlcl9z dGFydHVwID0gcGFyZW50X3JlbC0+Y29uc2lkZXJfc3RhcnR1cDsKIAlMaXN0Q2VsbCAgICpwMTsK IAogCS8qCkBAIC05MzQsMjUgKzkxNyw4MCBAQCBhZGRfcGFydGlhbF9wYXRoX3ByZWNoZWNrKFJl bE9wdEluZm8gKnBhcmVudF9yZWwsIGludCBkaXNhYmxlZF9ub2RlcywKIAkgKiBpcyBjbGVhcmx5 IHN1cGVyaW9yIHRvIHNvbWUgZXhpc3RpbmcgcGFydGlhbCBwYXRoIC0tIGF0IGxlYXN0LCBtb2R1 bG8KIAkgKiBmaW5hbCBjb3N0IGNvbXB1dGF0aW9ucy4gIElmIHNvLCB3ZSBkZWZpbml0ZWx5IHdh bnQgdG8gY29uc2lkZXIgaXQuCiAJICoKLQkgKiBVbmxpa2UgYWRkX3BhdGgoKSwgd2UgYWx3YXlz IGNvbXBhcmUgcGF0aGtleXMgaGVyZS4gIFRoaXMgaXMgYmVjYXVzZSB3ZQotCSAqIGV4cGVjdCBw YXJ0aWFsX3BhdGhsaXN0IHRvIGJlIHZlcnkgc2hvcnQsIGFuZCBnZXR0aW5nIGEgZGVmaW5pdGl2 ZQorCSAqIFVubGlrZSBhZGRfcGF0aCgpLCB3ZSBuZXZlciB0cnkgdG8gZXhpdCB0aGlzIGxvb3Ag ZWFybHkuIFRoaXMgaXMgYmVjYXVzZQorCSAqIHdlIGV4cGVjdCBwYXJ0aWFsX3BhdGhsaXN0IHRv IGJlIHZlcnkgc2hvcnQsIGFuZCBnZXR0aW5nIGEgZGVmaW5pdGl2ZQogCSAqIGFuc3dlciBhdCB0 aGlzIHN0YWdlIGF2b2lkcyB0aGUgbmVlZCB0byBjYWxsIGFkZF9wYXRoX3ByZWNoZWNrLgogCSAq LwogCWZvcmVhY2gocDEsIHBhcmVudF9yZWwtPnBhcnRpYWxfcGF0aGxpc3QpCiAJewogCQlQYXRo CSAgICpvbGRfcGF0aCA9IChQYXRoICopIGxmaXJzdChwMSk7CisJCVBhdGhDb3N0Q29tcGFyaXNv biBjb3N0Y21wOwogCQlQYXRoS2V5c0NvbXBhcmlzb24ga2V5c2NtcDsKIAotCQlrZXlzY21wID0g Y29tcGFyZV9wYXRoa2V5cyhwYXRoa2V5cywgb2xkX3BhdGgtPnBhdGhrZXlzKTsKLQkJaWYgKGtl eXNjbXAgIT0gUEFUSEtFWVNfRElGRkVSRU5UKQorCQkvKgorCQkgKiBGaXJzdCwgY29tcGFyZSBj b3N0cyBhbmQgZGlzYWJsZWQgbm9kZXMuIFRoaXMgbG9naWMgc2hvdWxkIGJlCisJCSAqIGlkZW50 aWNhbCB0byBjb21wYXJlX3BhdGhfY29zdHNfZnV6emlseSwgZXhjZXB0IHRoYXQgb25lIG9mIHRo ZQorCQkgKiBwYXRocyBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldCwgYW5kIHRoZSBmdXp6IGZhY3Rv ciBpcyBhbHdheXMKKwkJICogU1REX0ZVWlpfRkFDVE9SLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5 KG9sZF9wYXRoLT5kaXNhYmxlZF9ub2RlcyAhPSBkaXNhYmxlZF9ub2RlcykpCiAJCXsKLQkJCWlm ICh0b3RhbF9jb3N0ID4gb2xkX3BhdGgtPnRvdGFsX2Nvc3QgKiBTVERfRlVaWl9GQUNUT1IgJiYK LQkJCQlrZXlzY21wICE9IFBBVEhLRVlTX0JFVFRFUjEpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQkJ aWYgKG9sZF9wYXRoLT50b3RhbF9jb3N0ID4gdG90YWxfY29zdCAqIFNURF9GVVpaX0ZBQ1RPUiAm JgotCQkJCWtleXNjbXAgIT0gUEFUSEtFWVNfQkVUVEVSMikKLQkJCQlyZXR1cm4gdHJ1ZTsKKwkJ CWlmIChkaXNhYmxlZF9ub2RlcyA8IG9sZF9wYXRoLT5kaXNhYmxlZF9ub2RlcykKKwkJCQljb3N0 Y21wID0gQ09TVFNfQkVUVEVSMTsKKwkJCWVsc2UKKwkJCQljb3N0Y21wID0gQ09TVFNfQkVUVEVS MjsKKwkJfQorCQllbHNlIGlmICh0b3RhbF9jb3N0ID4gb2xkX3BhdGgtPnRvdGFsX2Nvc3QgKiBT VERfRlVaWl9GQUNUT1IpCisJCXsKKwkJCWlmIChjb25zaWRlcl9zdGFydHVwICYmCisJCQkJb2xk X3BhdGgtPnN0YXJ0dXBfY29zdCA+IHN0YXJ0dXBfY29zdCAqIFNURF9GVVpaX0ZBQ1RPUikKKwkJ CQljb3N0Y21wID0gQ09TVFNfRElGRkVSRU5UOworCQkJZWxzZQorCQkJCWNvc3RjbXAgPSBDT1NU U19CRVRURVIyOworCQl9CisJCWVsc2UgaWYgKG9sZF9wYXRoLT50b3RhbF9jb3N0ID4gdG90YWxf Y29zdCAqIFNURF9GVVpaX0ZBQ1RPUikKKwkJeworCQkJaWYgKGNvbnNpZGVyX3N0YXJ0dXAgJiYK KwkJCQlzdGFydHVwX2Nvc3QgPiBvbGRfcGF0aC0+c3RhcnR1cF9jb3N0ICogU1REX0ZVWlpfRkFD VE9SKQorCQkJCWNvc3RjbXAgPSBDT1NUU19ESUZGRVJFTlQ7CisJCQllbHNlCisJCQkJY29zdGNt cCA9IENPU1RTX0JFVFRFUjE7CiAJCX0KKwkJZWxzZSBpZiAoc3RhcnR1cF9jb3N0ID4gb2xkX3Bh dGgtPnN0YXJ0dXBfY29zdCAqIFNURF9GVVpaX0ZBQ1RPUikKKwkJCWNvc3RjbXAgPSBDT1NUU19C RVRURVIyOworCQllbHNlIGlmIChvbGRfcGF0aC0+c3RhcnR1cF9jb3N0ID4gc3RhcnR1cF9jb3N0 ICogU1REX0ZVWlpfRkFDVE9SKQorCQkJY29zdGNtcCA9IENPU1RTX0JFVFRFUjE7CisJCWVsc2UK KwkJCWNvc3RjbXAgPSBDT1NUU19FUVVBTDsKKworCQkvKgorCQkgKiBJZiBvbmUgcGF0aCB3aW5z IG9uIHN0YXJ0dXAgY29zdCBhbmQgdGhlIG90aGVyIG9uIHRvdGFsIGNvc3QsIHdlCisJCSAqIGNh bid0IHNheSBmb3Igc3VyZSB3aGljaCBpcyBiZXR0ZXIuCisJCSAqLworCQlpZiAoY29zdGNtcCA9 PSBDT1NUU19ESUZGRVJFTlQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBJZiB0aGUgdHdv IHBhdGhzIGhhdmUgZGlmZmVyZW50IHBhdGhrZXlzLCB3ZSBjYW4ndCBzYXkgZm9yIHN1cmUKKwkJ ICogd2hpY2ggaXMgYmV0dGVyLgorCQkgKi8KKwkJa2V5c2NtcCA9IGNvbXBhcmVfcGF0aGtleXMo cGF0aGtleXMsIG9sZF9wYXRoLT5wYXRoa2V5cyk7CisJCWlmIChrZXlzY21wID09IFBBVEhLRVlT X0RJRkZFUkVOVCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIElmIHRoZSBleGlzdGluZyBw YXRoIGlzIGNoZWFwZXIgYW5kIHRoZSBwYXRoa2V5cyBhcmUgZXF1YWwgb3Igd29yc2UsCisJCSAq IHRoZSBuZXcgcGF0aCBpcyBub3QgaW50ZXJlc3RpbmcuCisJCSAqLworCQlpZiAoY29zdGNtcCA9 PSBDT1NUU19CRVRURVIyICYmIGtleXNjbXAgIT0gUEFUSEtFWVNfQkVUVEVSMSkKKwkJCXJldHVy biBmYWxzZTsKKworCQkvKgorCQkgKiBJZiB0aGUgbmV3IHBhdGggaXMgY2hlYXBlciBhbmQgdGhl IHBhdGhrZXlzIGFyZSBlcXVhbCBvciBiZXR0ZXIsCisJCSAqIGl0IGlzIGRlZmluaXRlbHkgaW50 ZXJlc3RpbmcuCisJCSAqLworCQlpZiAoY29zdGNtcCA9PSBDT1NUU19CRVRURVIxICYmIGtleXNj bXAgIT0gUEFUSEtFWVNfQkVUVEVSMikKKwkJCXJldHVybiB0cnVlOwogCX0KIAogCS8qCkBAIC05 NjAsMTQgKzk5OCw5IEBAIGFkZF9wYXJ0aWFsX3BhdGhfcHJlY2hlY2soUmVsT3B0SW5mbyAqcGFy ZW50X3JlbCwgaW50IGRpc2FibGVkX25vZGVzLAogCSAqIGNsZWFybHkgZ29vZCBlbm91Z2ggdGhh dCBpdCBtaWdodCByZXBsYWNlIG9uZS4gIENvbXBhcmUgaXQgdG8KIAkgKiBub24tcGFyYWxsZWwg cGxhbnMuICBJZiBpdCBsb3NlcyBldmVuIGJlZm9yZSBhY2NvdW50aW5nIGZvciB0aGUgY29zdCBv ZgogCSAqIHRoZSBHYXRoZXIgbm9kZSwgd2Ugc2hvdWxkIGRlZmluaXRlbHkgcmVqZWN0IGl0Lgot CSAqCi0JICogTm90ZSB0aGF0IHdlIHBhc3MgdGhlIHRvdGFsX2Nvc3QgdG8gYWRkX3BhdGhfcHJl Y2hlY2sgdHdpY2UuICBUaGlzIGlzCi0JICogYmVjYXVzZSBpdCdzIG5ldmVyIGFkdmFudGFnZW91 cyB0byBjb25zaWRlciB0aGUgc3RhcnR1cCBjb3N0IG9mIGEKLQkgKiBwYXJ0aWFsIHBhdGg7IHRo ZSByZXN1bHRpbmcgcGxhbnMsIGlmIHJ1biBpbiBwYXJhbGxlbCwgd2lsbCBiZSBydW4gdG8KLQkg KiBjb21wbGV0aW9uLgogCSAqLwotCWlmICghYWRkX3BhdGhfcHJlY2hlY2socGFyZW50X3JlbCwg ZGlzYWJsZWRfbm9kZXMsIHRvdGFsX2Nvc3QsIHRvdGFsX2Nvc3QsCi0JCQkJCQkgICBwYXRoa2V5 cywgTlVMTCkpCisJaWYgKCFhZGRfcGF0aF9wcmVjaGVjayhwYXJlbnRfcmVsLCBkaXNhYmxlZF9u b2Rlcywgc3RhcnR1cF9jb3N0LAorCQkJCQkJICAgdG90YWxfY29zdCwgcGF0aGtleXMsIE5VTEwp KQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2Rl LmgKaW5kZXggODI5Nzg3MGNmN2UuLmI4YjIyMDRlZWI1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5v ZGUuaApAQCAtNjEsNyArNjEsNyBAQCBleHRlcm4gYm9vbCBhZGRfcGF0aF9wcmVjaGVjayhSZWxP cHRJbmZvICpwYXJlbnRfcmVsLCBpbnQgZGlzYWJsZWRfbm9kZXMsCiAJCQkJCQkJICBMaXN0ICpw YXRoa2V5cywgUmVsaWRzIHJlcXVpcmVkX291dGVyKTsKIGV4dGVybiB2b2lkIGFkZF9wYXJ0aWFs X3BhdGgoUmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgUGF0aCAqbmV3X3BhdGgpOwogZXh0ZXJuIGJv b2wgYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjayhSZWxPcHRJbmZvICpwYXJlbnRfcmVsLAotCQkJ CQkJCQkJICBpbnQgZGlzYWJsZWRfbm9kZXMsCisJCQkJCQkJCQkgIGludCBkaXNhYmxlZF9ub2Rl cywgQ29zdCBzdGFydHVwX2Nvc3QsCiAJCQkJCQkJCQkgIENvc3QgdG90YWxfY29zdCwgTGlzdCAq cGF0aGtleXMpOwogCiBleHRlcm4gUGF0aCAqY3JlYXRlX3NlcXNjYW5fcGF0aChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9pbmNyZW1lbnRhbF9zb3J0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv aW5jcmVtZW50YWxfc29ydC5vdXQKaW5kZXggZmRlYzViOWJhNTIuLjI5MDkwZGNhMWJhIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luY3JlbWVudGFsX3NvcnQub3V0Cisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5jcmVtZW50YWxfc29ydC5vdXQKQEAgLTE0 NTAsMjEgKzE0NTAsMjMgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgYSxiLHN1bShjKSBm cm9tIHQgZ3JvdXAgYnkgMSwyIG9yZGVyIGJ5IDEsMiwzIGxpbWl0IDEKIAogc2V0IGVuYWJsZV9p bmNyZW1lbnRhbF9zb3J0ID0gb247CiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBhLGIsc3Vt KGMpIGZyb20gdCBncm91cCBieSAxLDIgb3JkZXIgYnkgMSwyLDMgbGltaXQgMTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICBMaW1pdAogICAgLT4gIEluY3JlbWVudGFsIFNvcnQKICAgICAgICAgIFNvcnQgS2V5 OiBhLCBiLCAoc3VtKGMpKQogICAgICAgICAgUHJlc29ydGVkIEtleTogYSwgYgotICAgICAgICAg LT4gIEdyb3VwQWdncmVnYXRlCisgICAgICAgICAtPiAgRmluYWxpemUgR3JvdXBBZ2dyZWdhdGUK ICAgICAgICAgICAgICAgIEdyb3VwIEtleTogYSwgYgogICAgICAgICAgICAgICAgLT4gIEdhdGhl ciBNZXJnZQogICAgICAgICAgICAgICAgICAgICAgV29ya2VycyBQbGFubmVkOiAyCi0gICAgICAg ICAgICAgICAgICAgICAtPiAgSW5jcmVtZW50YWwgU29ydAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgU29ydCBLZXk6IGEsIGIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXNvcnRl ZCBLZXk6IGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBJbmRleCBT Y2FuIHVzaW5nIHRfYV9pZHggb24gdAotKDEyIHJvd3MpCisgICAgICAgICAgICAgICAgICAgICAt PiAgUGFydGlhbCBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3Jv dXAgS2V5OiBhLCBiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSW5jcmVtZW50YWwg U29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IGEsIGIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXNvcnRlZCBLZXk6IGEKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBJbmRleCBTY2FuIHVzaW5nIHRf YV9pZHggb24gdAorKDE0IHJvd3MpCiAKIC0tIEluY3JlbWVudGFsIHNvcnQgdnMuIHNldCBvcGVy YXRpb25zIHdpdGggdmFybm8gMAogc2V0IGVuYWJsZV9oYXNoYWdnIHRvIG9mZjsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbl9oYXNoLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvam9pbl9oYXNoLm91dAppbmRleCA0NzQ5ZjZlZDcwZC4uYmM3Y2M3NjQ2 N2YgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbl9oYXNoLm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW5faGFzaC5vdXQKQEAgLTc2LDggKzc2 LDggQEAgaW5zZXJ0IGludG8gZXh0cmVtZWx5X3NrZXdlZAogdXBkYXRlIHBnX2NsYXNzCiAgIHNl dCByZWx0dXBsZXMgPSAyLCByZWxwYWdlcyA9IHBnX3JlbGF0aW9uX3NpemUoJ2V4dHJlbWVseV9z a2V3ZWQnKSAvIDgxOTIKICAgd2hlcmUgcmVsbmFtZSA9ICdleHRyZW1lbHlfc2tld2VkJzsKLS0t IE1ha2UgYSByZWxhdGlvbiB3aXRoIGEgY291cGxlIG9mIGVub3Jtb3VzIHR1cGxlcy4KLWNyZWF0 ZSB0YWJsZSB3aWRlIGFzIHNlbGVjdCBnZW5lcmF0ZV9zZXJpZXMoMSwgMikgYXMgaWQsIHJwYWQo JycsIDMyMDAwMCwgJ3gnKSBhcyB0OworLS0gTWFrZSBhIHJlbGF0aW9uIHdpdGggc2V2ZXJhbCBl bm9ybW91cyB0dXBsZXMuCitjcmVhdGUgdGFibGUgd2lkZSBhcyBzZWxlY3QgZ2VuZXJhdGVfc2Vy aWVzKDEsIDMpIGFzIGlkLCBycGFkKCcnLCAzMjAwMDAsICd4JykgYXMgdDsKIGFsdGVyIHRhYmxl IHdpZGUgc2V0IChwYXJhbGxlbF93b3JrZXJzID0gMik7CiAtLSBUaGUgIm9wdGltYWwiIGNhc2U6 IHRoZSBoYXNoIHRhYmxlIGZpdHMgaW4gbWVtb3J5OyB3ZSBwbGFuIGZvciAxCiAtLSBiYXRjaCwg d2Ugc3RpY2sgdG8gdGhhdCBudW1iZXIsIGFuZCBwZWFrIG1lbW9yeSB1c2FnZSBzdGF5cyB3aXRo aW4KQEAgLTkyMiw3ICs5MjIsNyBAQCBzZXQgd29ya19tZW0gPSAnMTI4a0InOwogc2V0IGhhc2hf bWVtX211bHRpcGxpZXIgPSAxLjA7CiBleHBsYWluIChjb3N0cyBvZmYpCiAgIHNlbGVjdCBsZW5n dGgobWF4KHMudCkpCi0gIGZyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2Uo dCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRlKSBzIHVzaW5nIChpZCk7CisgIGZyb20gd2lkZSBs ZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRl IHdoZXJlIGlkIDwgMykgcyB1c2luZyAoaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEZpbmFsaXpl IEFnZ3JlZ2F0ZQpAQCAtOTM0LDEwICs5MzQsMTEgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKQogICAg ICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIHdpZGUKICAgICAgICAg ICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gd2lkZSB3aWRlXzEKLSg5IHJvd3MpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChpZCA8IDMpCisoMTAgcm93cykKIAog c2VsZWN0IGxlbmd0aChtYXgocy50KSkKLWZyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwg Y29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRlKSBzIHVzaW5nIChpZCk7Citmcm9t IHdpZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxlc2NlKHQsICcnKSB8fCAnJyBhcyB0IGZy b20gd2lkZSB3aGVyZSBpZCA8IDMpIHMgdXNpbmcgKGlkKTsKICBsZW5ndGggCiAtLS0tLS0tLQog IDMyMDAwMApAQCAtOTQ3LDcgKzk0OCw3IEBAIHNlbGVjdCBmaW5hbCA+IDEgYXMgbXVsdGliYXRj aAogICBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAogJCQKICAgc2VsZWN0IGxlbmd0aChtYXgocy50 KSkKLSAgZnJvbSB3aWRlIGxlZnQgam9pbiAoc2VsZWN0IGlkLCBjb2FsZXNjZSh0LCAnJykgfHwg JycgYXMgdCBmcm9tIHdpZGUpIHMgdXNpbmcgKGlkKTsKKyAgZnJvbSB3aWRlIGxlZnQgam9pbiAo c2VsZWN0IGlkLCBjb2FsZXNjZSh0LCAnJykgfHwgJycgYXMgdCBmcm9tIHdpZGUgd2hlcmUgaWQg PCAzKSBzIHVzaW5nIChpZCk7CiAkJCk7CiAgbXVsdGliYXRjaCAKIC0tLS0tLS0tLS0tLQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbl9oYXNoLnNxbCBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2pvaW5faGFzaC5zcWwKaW5kZXggNDlkM2ZkNjE4NTYuLjUzZGIxNzU0YmIyIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luX2hhc2guc3FsCisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW5faGFzaC5zcWwKQEAgLTgzLDggKzgzLDggQEAgdXBkYXRlIHBn X2NsYXNzCiAgIHNldCByZWx0dXBsZXMgPSAyLCByZWxwYWdlcyA9IHBnX3JlbGF0aW9uX3NpemUo J2V4dHJlbWVseV9za2V3ZWQnKSAvIDgxOTIKICAgd2hlcmUgcmVsbmFtZSA9ICdleHRyZW1lbHlf c2tld2VkJzsKIAotLS0gTWFrZSBhIHJlbGF0aW9uIHdpdGggYSBjb3VwbGUgb2YgZW5vcm1vdXMg dHVwbGVzLgotY3JlYXRlIHRhYmxlIHdpZGUgYXMgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygxLCAy KSBhcyBpZCwgcnBhZCgnJywgMzIwMDAwLCAneCcpIGFzIHQ7CistLSBNYWtlIGEgcmVsYXRpb24g d2l0aCBzZXZlcmFsIGVub3Jtb3VzIHR1cGxlcy4KK2NyZWF0ZSB0YWJsZSB3aWRlIGFzIHNlbGVj dCBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgYXMgaWQsIHJwYWQoJycsIDMyMDAwMCwgJ3gnKSBhcyB0 OwogYWx0ZXIgdGFibGUgd2lkZSBzZXQgKHBhcmFsbGVsX3dvcmtlcnMgPSAyKTsKIAogLS0gVGhl ICJvcHRpbWFsIiBjYXNlOiB0aGUgaGFzaCB0YWJsZSBmaXRzIGluIG1lbW9yeTsgd2UgcGxhbiBm b3IgMQpAQCAtNDk2LDE0ICs0OTYsMTQgQEAgc2V0IHdvcmtfbWVtID0gJzEyOGtCJzsKIHNldCBo YXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOwogZXhwbGFpbiAoY29zdHMgb2ZmKQogICBzZWxlY3Qg bGVuZ3RoKG1heChzLnQpKQotICBmcm9tIHdpZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxl c2NlKHQsICcnKSB8fCAnJyBhcyB0IGZyb20gd2lkZSkgcyB1c2luZyAoaWQpOworICBmcm9tIHdp ZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxlc2NlKHQsICcnKSB8fCAnJyBhcyB0IGZyb20g d2lkZSB3aGVyZSBpZCA8IDMpIHMgdXNpbmcgKGlkKTsKIHNlbGVjdCBsZW5ndGgobWF4KHMudCkp Ci1mcm9tIHdpZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxlc2NlKHQsICcnKSB8fCAnJyBh cyB0IGZyb20gd2lkZSkgcyB1c2luZyAoaWQpOworZnJvbSB3aWRlIGxlZnQgam9pbiAoc2VsZWN0 IGlkLCBjb2FsZXNjZSh0LCAnJykgfHwgJycgYXMgdCBmcm9tIHdpZGUgd2hlcmUgaWQgPCAzKSBz IHVzaW5nIChpZCk7CiBzZWxlY3QgZmluYWwgPiAxIGFzIG11bHRpYmF0Y2gKICAgZnJvbSBoYXNo X2pvaW5fYmF0Y2hlcygKICQkCiAgIHNlbGVjdCBsZW5ndGgobWF4KHMudCkpCi0gIGZyb20gd2lk ZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3 aWRlKSBzIHVzaW5nIChpZCk7CisgIGZyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29h bGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRlIHdoZXJlIGlkIDwgMykgcyB1c2luZyAo aWQpOwogJCQpOwogcm9sbGJhY2sgdG8gc2V0dGluZ3M7CiAKLS0gCjIuNTEuMAoK --000000000000e54172064b3290cb Content-Type: application/octet-stream; name="v17-0005-Test-pg_plan_advice-using-a-new-test_plan_advice.patch" Content-Disposition: attachment; filename="v17-0005-Test-pg_plan_advice-using-a-new-test_plan_advice.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mltvfa4y4 RnJvbSA5ZjAzMjAxMTVkYzA2Y2JiMWJkNjU1ZjcyOTA2YmQyYmVkOTRjNGFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFNhdCwgNyBGZWIgMjAyNiAwOTozNjowOCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE3IDUv NV0gVGVzdCBwZ19wbGFuX2FkdmljZSB1c2luZyBhIG5ldyB0ZXN0X3BsYW5fYWR2aWNlCiBtb2R1 bGUuCgpUaGUgVEFQIHRlc3QgaW5jbHVkZWQgaW4gdGhpcyBuZXcgbW9kdWxlIHJ1bnMgdGhlIHJl Z3Jlc3Npb24gdGVzdHMKd2l0aCBwZ19wbGFuX2FkdmljZSBsb2FkZWQuIEl0IGFycmFuZ2VzIGZv ciBlYWNoIHF1ZXJ5IHRvIGJlIHBsYW5uZWQKdHdpY2UuICBUaGUgZmlyc3QgdGltZSwgd2UgZ2Vu ZXJhdGUgcGxhbiBhZHZpY2UuIFRoZSBzZWNvbmQgdGltZSwgd2UKcmVwbGFuIHRoZSBxdWVyeSB1 c2luZyB0aGUgcmVzdWx0aW5nIGFkdmljZSBzdHJpbmcuIElmIHRoZSB0ZXN0cwpmYWlsLCB0aGF0 IG1lYW5zIHRoYXQgdXNpbmcgcGdfcGxhbl9hZHZpY2UgdG8gdGVsbCB0aGUgcGxhbm5lciB0bwpk byB3aGF0IGl0IHdhcyBnb2luZyB0byBkbyBhbnl3YXkgYnJlYWtzIHNvbWV0aGluZywgd2hpY2gg aW5kaWNhdGVzCmEgcHJvYmxlbSBlaXRoZXIgd2l0aCBwZ19wbGFuX2FkdmljZSBvciB3aXRoIHRo ZSBwbGFubmVyLgoKVGhlIHRlc3QgYWxzbyBlbmFibGVzIHBnX3BsYW5fYWR2aWNlLmZlZWRiYWNr X3dhcm5pbmdzLCBzbyB0aGF0IGlmIHRoZQpwbGFuIGFkdmljZSBmYWlscyB0byBhcHBseSBjbGVh bmx5IHdoZW4gdGhlIHF1ZXJ5IGlzIHJlcGxhbm5lZCwgYQpmYWlsdXJlIHdpbGwgb2NjdXIuCi0t LQogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAxICsK IHNyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICB8ICAgMSArCiBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFrZWZpbGUgICAgfCAgMjggKysrKwog c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkIHwgIDI5ICsrKysK IC4uLi90ZXN0X3BsYW5fYWR2aWNlL3QvMDAxX3JlcGxhbl9yZWdyZXNzLnBsICB8ICA2NSArKysr KysrKwogLi4uL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2FkdmljZS5jICAgICAgIHwgMTQz ICsrKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAyNjcgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9NYWtl ZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2Fkdmlj ZS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9w bGFuX2FkdmljZS90LzAwMV9yZXBsYW5fcmVncmVzcy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90ZXN0X3BsYW5fYWR2aWNlLmMKCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtl ZmlsZQppbmRleCA0NGM3MTYzYzFjZC4uZThjMzFlYzhlNzQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtMzgs NiArMzgsNyBAQCBTVUJESVJTID0gXAogCQkgIHRlc3Rfb2F0X2hvb2tzIFwKIAkJICB0ZXN0X3Bh cnNlciBcCiAJCSAgdGVzdF9wZ19kdW1wIFwKKwkJICB0ZXN0X3BsYW5fYWR2aWNlIFwKIAkJICB0 ZXN0X3ByZWR0ZXN0IFwKIAkJICB0ZXN0X3JhZGl4dHJlZSBcCiAJCSAgdGVzdF9yYnRyZWUgXApk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVs ZXMvbWVzb24uYnVpbGQKaW5kZXggMjYzNGE1MTk5MzUuLjY5OThhMjI2ZmE3IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvbWVz b24uYnVpbGQKQEAgLTM5LDYgKzM5LDcgQEAgc3ViZGlyKCd0ZXN0X21pc2MnKQogc3ViZGlyKCd0 ZXN0X29hdF9ob29rcycpCiBzdWJkaXIoJ3Rlc3RfcGFyc2VyJykKIHN1YmRpcigndGVzdF9wZ19k dW1wJykKK3N1YmRpcigndGVzdF9wbGFuX2FkdmljZScpCiBzdWJkaXIoJ3Rlc3RfcHJlZHRlc3Qn KQogc3ViZGlyKCd0ZXN0X3JhZGl4dHJlZScpCiBzdWJkaXIoJ3Rlc3RfcmJ0cmVlJykKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9NYWtlZmlsZSBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYmUwMjZjZTM0YmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFrZWZpbGUKQEAgLTAsMCArMSwyOCBAQAor IyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFrZWZpbGUKKworUEdGSUxFREVT QyA9ICJ0ZXN0X3BsYW5fYWR2aWNlIC0gdGVzdCB3aGV0aGVyIGdlbmVyYXRlZCBwbGFuIGFkdmlj ZSB3b3JrcyIKKworTU9EVUxFX2JpZyA9IHRlc3RfcGxhbl9hZHZpY2UKK09CSlMgPSBcCisJJChX SU4zMlJFUykgXAorCXRlc3RfcGxhbl9hZHZpY2UubworCitFWFRSQV9JTlNUQUxMID0gY29udHJp Yi9wZ19wbGFuX2FkdmljZQorCitUQVBfVEVTVFMgPSAxCisKK2lmZGVmIFVTRV9QR1hTCitQR19D T05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQor aW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxh bl9hZHZpY2UKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxk ZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9j b250cmliLWdsb2JhbC5taworZW5kaWYKKworb3ZlcnJpZGUgQ1BQRkxBR1MgKz0gLUkkKHRvcF9z cmNkaXIpL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UKKworUkVHUkVTU19TSExJQj0kKGFic190b3Bf YnVpbGRkaXIpL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcyQoRExTVUZGSVgpCitleHBvcnQgUkVH UkVTU19TSExJQgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNl L21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL21lc29uLmJ1 aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZmRlNDIwYmFlZAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9tZXNv bi5idWlsZApAQCAtMCwwICsxLDI5IEBACisjIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit0ZXN0X3BsYW5fYWR2aWNlX3NvdXJj ZXMgPSBmaWxlcygKKyAgJ3Rlc3RfcGxhbl9hZHZpY2UuYycsCispCisKK2lmIGhvc3Rfc3lzdGVt ID09ICd3aW5kb3dzJworICB0ZXN0X3BsYW5fYWR2aWNlX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5w cm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICd0ZXN0X3Bs YW5fYWR2aWNlJywKKyAgICAnLS1GSUxFREVTQycsICd0ZXN0X3BsYW5fYWR2aWNlIC0gdGVzdCB3 aGV0aGVyIGdlbmVyYXRlZCBwbGFuIGFkdmljZSB3b3JrcycsXSkKK2VuZGlmCisKK3Rlc3RfcGxh bl9hZHZpY2UgPSBzaGFyZWRfbW9kdWxlKCd0ZXN0X3BsYW5fYWR2aWNlJywKKyAgdGVzdF9wbGFu X2FkdmljZV9zb3VyY2VzLAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBwZ19wbGFuX2FkdmljZV9p bmMsCisgIGt3YXJnczogcGdfdGVzdF9tb2RfYXJncywKKykKK3Rlc3RfaW5zdGFsbF9saWJzICs9 IHRlc3RfcGxhbl9hZHZpY2UKKwordGVzdHMgKz0geworICAnbmFtZSc6ICd0ZXN0X3BsYW5fYWR2 aWNlJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29u LmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAg J3QvMDAxX3JlcGxhbl9yZWdyZXNzLnBsJywKKyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL3QvMDAxX3JlcGxhbl9yZWdyZXNzLnBs IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL3QvMDAxX3JlcGxhbl9yZWdyZXNz LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zMDMyMTBmMTNiOAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90LzAw MV9yZXBsYW5fcmVncmVzcy5wbApAQCAtMCwwICsxLDY1IEBACisjIENvcHlyaWdodCAoYykgMjAy MS0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFJ1biB0aGUg Y29yZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIHBnX3BsYW5fYWR2aWNlIHRvIGNoZWNrIGZvciBw cm9ibGVtcy4KK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3Vz ZSBDd2QgICAgICAgICAgICBxdyhhYnNfcGF0aCk7Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcoZGly bmFtZSk7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6 OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgSW5pdGlhbGl6ZSB0aGUgcHJpbWFy eSBub2RlCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicp OworJG5vZGUtPmluaXQoKTsKKworIyBTZXQgdXAgb3VyIGRlc2lyZWQgY29uZmlndXJhdGlvbi4K KyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgPDxFT00pOworc2hhcmVkX3By ZWxvYWRfbGlicmFyaWVzPSd0ZXN0X3BsYW5fYWR2aWNlJworcGdfcGxhbl9hZHZpY2UuYWx3YXlz X2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlPWZhbHNlCitwZ19wbGFuX2FkdmljZS5mZWVkYmFja193 YXJuaW5ncz10cnVlCitFT00KKyRub2RlLT5zdGFydDsKKworbXkgJHNyY2RpciA9IGFic19wYXRo KCIuLi8uLi8uLi8uLiIpOworCisjIC0tZGxwYXRoIGlzIG5lZWRlZCB0byBiZSBhYmxlIHRvIGZp bmQgdGhlIGxvY2F0aW9uIG9mIHJlZ3Jlc3Muc28KKyMgYW5kIGFueSBsaWJyYXJpZXMgdGhlIHJl Z3Jlc3Npb24gdGVzdHMgcmVxdWlyZS4KK215ICRkbHBhdGggPSBkaXJuYW1lKCRFTlZ7UkVHUkVT U19TSExJQn0pOworCisjIC0tb3V0cHV0ZGlyIHBvaW50cyB0byB0aGUgcGF0aCB3aGVyZSB0byBw bGFjZSB0aGUgb3V0cHV0IGZpbGVzLgorbXkgJG91dHB1dGRpciA9ICRQb3N0Z3JlU1FMOjpUZXN0 OjpVdGlsczo6dG1wX2NoZWNrOworCisjIC0taW5wdXRkaXIgcG9pbnRzIHRvIHRoZSBwYXRoIG9m IHRoZSBpbnB1dCBmaWxlcy4KK215ICRpbnB1dGRpciA9ICIkc3JjZGlyL3NyYy90ZXN0L3JlZ3Jl c3MiOworCisjIFJ1biB0aGUgdGVzdHMuCitteSAkcmMgPQorICBzeXN0ZW0oJEVOVntQR19SRUdS RVNTfSAuICIgIgorCSAgLiAiLS1iaW5kaXI9ICIKKwkgIC4gIi0tZGxwYXRoPVwiJGRscGF0aFwi ICIKKwkgIC4gIi0taG9zdD0iIC4gJG5vZGUtPmhvc3QgLiAiICIKKwkgIC4gIi0tcG9ydD0iIC4g JG5vZGUtPnBvcnQgLiAiICIKKwkgIC4gIi0tc2NoZWR1bGU9JHNyY2Rpci9zcmMvdGVzdC9yZWdy ZXNzL3BhcmFsbGVsX3NjaGVkdWxlICIKKwkgIC4gIi0tbWF4LWNvbmN1cnJlbnQtdGVzdHM9MjAg IgorCSAgLiAiLS1pbnB1dGRpcj1cIiRpbnB1dGRpclwiICIKKwkgIC4gIi0tb3V0cHV0ZGlyPVwi JG91dHB1dGRpclwiIik7CisKKyMgRHVtcCBvdXQgdGhlIHJlZ3Jlc3Npb24gZGlmZnMgZmlsZSwg aWYgdGhlcmUgaXMgb25lCitpZiAoJHJjICE9IDApCit7CisJbXkgJGRpZmZzID0gIiRvdXRwdXRk aXIvcmVncmVzc2lvbi5kaWZmcyI7CisJaWYgKC1lICRkaWZmcykKKwl7CisJCXByaW50ICI9PT0g ZHVtcGluZyAkZGlmZnMgPT09XG4iOworCQlwcmludCBzbHVycF9maWxlKCRkaWZmcyk7CisJCXBy aW50ICI9PT0gRU9GID09PVxuIjsKKwl9Cit9CisKKyMgUmVwb3J0IHJlc3VsdHMKK2lzKCRyYywg MCwgJ3JlZ3Jlc3Npb24gdGVzdHMgcGFzcycpOworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90ZXN0X3BsYW5fYWR2aWNlLmMg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2FkdmljZS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45OTY2NzVkYzM4NgotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90ZXN0X3BsYW5f YWR2aWNlLmMKQEAgLTAsMCArMSwxNDMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHRl c3RfcGxhbl9hZHZpY2UuYworICoJICBUZXN0IHBnX3BsYW5fYWR2aWNlIGJ5IHBsYW5uaW5nIGV2 ZXJ5IHF1ZXJ5IHdpdGggZ2VuZXJhdGVkIGFkdmljZS4KKyAqCisgKiBXaXRoIHRoaXMgbW9kdWxl IGxvYWRlZCwgZXZlcnkgdGltZSBhIHF1ZXJ5IGlzIGV4ZWN1dGVkLCB3ZSBlbmQgdXAKKyAqIHBs YW5uaW5nIGl0IHR3aWNlLiBUaGUgZmlyc3QgdGltZSB3ZSBwbGFuIGl0LCB3ZSBnZW5lcmF0ZSBw bGFuIGFkdmljZSwKKyAqIHdoaWNoIHdlIHRoZW4gZmVlZCBiYWNrIHRvIHBnX3BsYW5fYWR2aWNl IGFzIHRoZSBzdXBwbGllZCBwbGFuIGFkdmljZS4KKyAqIEl0IGlzIHRoZW4gcGxhbm5lZCBhIHNl Y29uZCB0aW1lIHVzaW5nIHRoYXQgYWR2aWNlLiBUaGlzIGhvcGVmdWxseQorICogYWxsb3dzIHVz IHRvIGRldGVjdCBjYXNlcyB3aGVyZSB0aGUgYWR2aWNlIGlzIGluY29ycmVjdCBvciBjYXVzZXMK KyAqIGZhaWx1cmVzIG9yIHBsYW4gY2hhbmdlcyBmb3Igc29tZSByZWFzb24uCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICoJICBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2Fk dmljZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5o IgorCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVk ZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1ZGUgInBnX3BsYW5fYWR2aWNlLmgiCisj aW5jbHVkZSAidXRpbHMvZ3VjLmgiCisKK1BHX01PRFVMRV9NQUdJQzsKKworc3RhdGljIGJvb2wg aW5fcmVjdXJzaW9uID0gZmFsc2U7CisKK3N0YXRpYyBjaGFyICp0ZXN0X3BsYW5fYWR2aWNlX2Fk dmlzb3IoUGxhbm5lckdsb2JhbCAqZ2xvYiwKKwkJCQkJCQkJCSAgUXVlcnkgKnBhcnNlLAorCQkJ CQkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCQkJCQkgIGludCBjdXJzb3JP cHRpb25zLAorCQkJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzKTsKK3N0YXRpYyBEZWZFbGVtICpm aW5kX2RlZmVsZW1fYnlfZGVmbmFtZShMaXN0ICpkZWZsaXN0LCBjaGFyICpkZWZuYW1lKTsKKwor LyoKKyAqIEluaXRpYWxpemUgdGhpcyBtb2R1bGUuCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQp Cit7CisJdm9pZAkgICAqKCphZGRfYWR2aXNvcl9mbikgKHBnX3BsYW5fYWR2aWNlX2Fkdmlzb3Jf aG9vayBob29rKTsKKworCS8qCisJICogQXNrIHBnX3BsYW5fYWR2aWNlIHRvIGdldCBhZHZpY2Ug c3RyaW5ncyBmcm9tIHRlc3RfcGxhbl9hZHZpY2VfYWR2aXNvcgorCSAqLworCWFkZF9hZHZpc29y X2ZuID0KKwkJbG9hZF9leHRlcm5hbF9mdW5jdGlvbigicGdfcGxhbl9hZHZpY2UiLCAicGdfcGxh bl9hZHZpY2VfYWRkX2Fkdmlzb3IiLAorCQkJCQkJCSAgIHRydWUsIE5VTEwpOworCisJKCphZGRf YWR2aXNvcl9mbikgKHRlc3RfcGxhbl9hZHZpY2VfYWR2aXNvcik7Cit9CisKKy8qCisgKiBSZS1w bGFuIHRoZSBnaXZlbiBxdWVyeSBhbmQgcmV0dXJuIHRoZSBnZW5lcmF0ZWQgYWR2aWNlIHN0cmlu ZyBhcyB0aGUKKyAqIHN1cHBsaWVkIGFkdmljZS4KKyAqLworc3RhdGljIGNoYXIgKgordGVzdF9w bGFuX2FkdmljZV9hZHZpc29yKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJ CQkJCSBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAorCQkJCQkJ IEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJUGxhbm5lZFN0bXQgKnBzdG10OworCWludAkJCXNhdmVf bmVzdGxldmVsID0gMDsKKwlEZWZFbGVtICAgICpwZ3BhX2l0ZW07CisJRGVmRWxlbSAgICAqYWR2 aWNlX3N0cmluZ19pdGVtOworCisJLyoKKwkgKiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxl ZCBmcm9tIHRoZSBwbGFubmVyIGFuZCB0cmlnZ2VycyBwbGFubmluZywKKwkgKiB3ZSBuZWVkIGEg cmVjdXJzaW9uIGd1YXJkLgorCSAqLworCWlmIChpbl9yZWN1cnNpb24pCisJCXJldHVybiBOVUxM OworCisJUEdfVFJZKCk7CisJeworCQlpbl9yZWN1cnNpb24gPSB0cnVlOworCisJCS8qCisJCSAq IFBsYW5uaW5nIGNhbiB0cmlnZ2VyIGV4cHJlc3Npb24gZXZhbHVhdGlvbiwgd2hpY2ggY2FuIHJl c3VsdCBpbgorCQkgKiBzZW5kaW5nIE5PVElDRSBtZXNzYWdlcyBvciBvdGhlciBvdXRwdXQgdG8g dGhlIGNsaWVudC4gVG8gYXZvaWQKKwkJICogdGhhdCwgd2Ugc2V0IGNsaWVudF9taW5fbWVzc2Fn ZXMgPSBFUlJPUiBpbiB0aGUgaG9wZXMgb2YgZ2V0dGluZworCQkgKiB0aGUgc2FtZSBvdXRwdXQg d2l0aCBhbmQgd2l0aG91dCB0aGlzIG1vZHVsZS4KKwkJICoKKwkJICogV2UgYWxzbyBuZWVkIHRv IHNldCBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgc28KKwkJICog dGhhdCBwZ19wbGFuX2FkdmljZSB3aWxsIGdlbmVyYXRlIGFuIGFkdmljZSBzdHJpbmcsIHNpbmNl IHRoZSB3aG9sZQorCQkgKiBwb2ludCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGdldCBhY2Nlc3Mg dG8gdGhhdC4KKwkJICovCisJCXNhdmVfbmVzdGxldmVsID0gTmV3R1VDTmVzdExldmVsKCk7CisJ CXNldF9jb25maWdfb3B0aW9uKCJjbGllbnRfbWluX21lc3NhZ2VzIiwgImVycm9yIiwKKwkJCQkJ CSAgUEdDX1NVU0VULCBQR0NfU19TRVNTSU9OLAorCQkJCQkJICBHVUNfQUNUSU9OX1NBVkUsIHRy dWUsIDAsIGZhbHNlKTsKKwkJc2V0X2NvbmZpZ19vcHRpb24oInBnX3BsYW5fYWR2aWNlLmFsd2F5 c19zdG9yZV9hZHZpY2VfZGV0YWlscyIsICJ0cnVlIiwKKwkJCQkJCSAgUEdDX1NVU0VULCBQR0Nf U19TRVNTSU9OLAorCQkJCQkJICBHVUNfQUNUSU9OX1NBVkUsIHRydWUsIDAsIGZhbHNlKTsKKwor CQkvKgorCQkgKiBSZXBsYW4uIFdlIG11c3QgY29weSB0aGUgUXVlcnksIGJlY2F1c2UgdGhlIHBs YW5uZXIgbW9kaWZpZXMgaXQuCisJCSAqIChBcyBub3RlZCBlbHNld2hlcmUsIHRoYXQncyB1bmZv cnR1bmF0ZTsgcGVyaGFwcyBpdCB3aWxsIGJlIGZpeGVkCisJCSAqIHNvbWUgZGF5LikKKwkJICov CisJCXBzdG10ID0gcGxhbm5lcihjb3B5T2JqZWN0KHBhcnNlKSwgcXVlcnlfc3RyaW5nLCBjdXJz b3JPcHRpb25zLAorCQkJCQkJZ2xvYi0+Ym91bmRQYXJhbXMsIGVzKTsKKwl9CisJUEdfRklOQUxM WSgpOworCXsKKwkJaW5fcmVjdXJzaW9uID0gZmFsc2U7CisJfQorCVBHX0VORF9UUlkoKTsKKwor CS8qIFJvbGwgYmFjayBhbnkgR1VDIGNoYW5nZXMgKi8KKwlpZiAoc2F2ZV9uZXN0bGV2ZWwgPiAw KQorCQlBdEVPWGFjdF9HVUMoZmFsc2UsIHNhdmVfbmVzdGxldmVsKTsKKworCS8qIEV4dHJhY3Qg YW5kIHJldHVybiB0aGUgYWR2aWNlIHN0cmluZyAqLworCXBncGFfaXRlbSA9IGZpbmRfZGVmZWxl bV9ieV9kZWZuYW1lKHBzdG10LT5leHRlbnNpb25fc3RhdGUsCisJCQkJCQkJCQkJInBnX3BsYW5f YWR2aWNlIik7CisJaWYgKHBncGFfaXRlbSA9PSBOVUxMKQorCQllbG9nKEVSUk9SLCAiZXh0ZW5z aW9uIHN0YXRlIGZvciBwZ19wbGFuX2FkdmljZSBub3QgZm91bmQiKTsKKwlhZHZpY2Vfc3RyaW5n X2l0ZW0gPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZSgoTGlzdCAqKSBwZ3BhX2l0ZW0tPmFyZywK KwkJCQkJCQkJCQkJCSAiYWR2aWNlX3N0cmluZyIpOworCWlmIChhZHZpY2Vfc3RyaW5nX2l0ZW0g PT0gTlVMTCkKKwkJZWxvZyhFUlJPUiwKKwkJCSAiYWR2aWNlIHN0cmluZyBmb3IgcGdfcGxhbl9h ZHZpY2Ugbm90IGZvdW5kIGluIGV4dGVuc2lvbiBzdGF0ZSIpOworCXJldHVybiBzdHJWYWwoYWR2 aWNlX3N0cmluZ19pdGVtLT5hcmcpOworfQorCisvKgorICogU2VhcmNoIGEgbGlzdCBvZiBEZWZF bGVtIG9iamVjdHMgZm9yIGEgZ2l2ZW4gZGVmbmFtZS4KKyAqLworc3RhdGljIERlZkVsZW0gKgor ZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSkKK3sK Kwlmb3JlYWNoX25vZGUoRGVmRWxlbSwgaXRlbSwgZGVmbGlzdCkKKwl7CisJCWlmIChzdHJjbXAo aXRlbS0+ZGVmbmFtZSwgZGVmbmFtZSkgPT0gMCkKKwkJCXJldHVybiBpdGVtOworCX0KKworCXJl dHVybiBOVUxMOworfQotLSAKMi41MS4wCgo= --000000000000e54172064b3290cb Content-Type: application/octet-stream; name="v17-0001-Allow-extensions-to-mark-an-individual-index-as-.patch" Content-Disposition: attachment; filename="v17-0001-Allow-extensions-to-mark-an-individual-index-as-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mltvfa4h0 RnJvbSA5YmQ3Y2FmNGVmYTQ1ZTc0ZDgyMzM4ZWE2ZDFhZjhjZTkzOTk1M2Y1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFNhdCwgNyBGZWIgMjAyNiAwODoxNDo0MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE3IDEv NV0gQWxsb3cgZXh0ZW5zaW9ucyB0byBtYXJrIGFuIGluZGl2aWR1YWwgaW5kZXggYXMKIGRpc2Fi bGVkLgoKVXAgdW50aWwgbm93LCB0aGUgb25seSB3YXkgZm9yIGEgbG9hZGFibGUgbW9kdWxlIHRv IGRpc2FibGUgdGhlIHVzZSBvZiBhCnBhcnRpY3VsYXIgaW5kZXggd2FzIHRvIHVzZSBnZXRfcmVs YXRpb25faW5mb19ob29rIHRvIHJlbW92ZSBpdCBmcm9tIHRoZQppbmRleCBsaXN0LiBXaGlsZSB0 aGF0IHdvcmtzLCBpdCBoYXMgc29tZSBkaXNhZHZhbnRhZ2VzLiBGaXJzdCwgdGhlCmluZGV4IGJl Y29tZXMgaW52aXNpYmxlIGZvciBhbGwgcHVycG9zZXMsIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVz ZWQgZm9yCm9wdGltaXphdGlvbnMgc3VjaCBhcyBzZWxmLWpvaW4gZWxpbWluYXRpb24gb3IgbGVm dCBqb2luIHJlbW92YWwsIHdoaWNoCmNhbiBzZXZlcmVseSBkZWdyYWRlIHRoZSByZXN1bHRpbmcg cGxhbi4KClNlY29uZCwgaWYgdGhlIG1vZHVsZSBhdHRlbXB0cyB0byBjb21wZWwgdGhlIHVzZSBv ZiBhIGNlcnRhaW4gaW5kZXgKYnkgcmVtb3ZpbmcgYWxsIG90aGVyIGluZGV4ZXMgZnJvbSB0aGUg aW5kZXggbGlzdCBhbmQgZGlzYWJsaW5nCm90aGVyIHNjYW4gdHlwZXMsIGJ1dCB0aGUgcGxhbm5l ciBpcyB1bmFibGUgdG8gdXNlIHRoZSBjaG9zZW4gaW5kZXgKZm9yIHNvbWUgcmVhc29uLCBpdCB3 aWxsIGZhbGwgYmFjayB0byBhIHNlcXVlbnRpYWwgc2NhbiwgYmVjYXVzZSB0aGF0CmlzIG9ubHkg ZGlzYWJsZWQsIHdoZXJlYXMgdGhlIG90aGVyIGluZGV4ZXMgYXJlLCBmcm9tIHRoZSBwbGFubmVy J3MKcG9pbnQgb2YgdmlldywgY29tcGxldGVseSBnb25lLiBXaGlsZSB0aGlzIHNpdHVhdGlvbiBp ZGVhbGx5IHNob3VsZG4ndApvY2N1ciwgaXQncyBoYXJkIGZvciBhIGxvYWRhYmxlIG1vZHVsZSB0 byBiZSBjb21wbGV0ZWx5IHN1cmUgd2hldGhlcgp0aGUgcGxhbm5lciB3aWxsIHZpZXcgYSBjZXJ0 YWluIGluZGV4IGFzIHVzYWJsZSBmb3IgYSBjZXJ0YWluIHF1ZXJ5LgpJZiBpdCBpc24ndCwgaXQn cyBtb3JlIGRlc2lyYWJsZSB0byBmYWxsIGJhY2sgdG8gdGhlIG5leHQtY2hlYXBlc3QKcGxhbiB0 aGFuIHRvIGJlIGZvcmNlZCBpbnRvIGEgc2VxdWVudGlhbCBzY2FuLgotLS0KIHNyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3BhdGhub2RlLmMgfCA4ICsrKysrKysrCiBzcmMvaW5jbHVkZS9ub2Rl cy9wYXRobm9kZXMuaCAgICAgICAgIHwgMiArKwogMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRp b25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXggZWY4ZWY2ZTg5 ZDMuLjlmMzk3YTQwZmE2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w YXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKQEAg LTEwODMsNiArMTA4MywxNCBAQCBjcmVhdGVfaW5kZXhfcGF0aChQbGFubmVySW5mbyAqcm9vdCwK IAogCWNvc3RfaW5kZXgocGF0aG5vZGUsIHJvb3QsIGxvb3BfY291bnQsIHBhcnRpYWxfcGF0aCk7 CiAKKwkvKgorCSAqIGNvc3RfaW5kZXggd2lsbCBzZXQgZGlzYWJsZWRfbm9kZXMgdG8gMSBpZiB0 aGlzIHJlbCBpcyBub3QgYWxsb3dlZCB0bworCSAqIHVzZSBpbmRleCBzY2FucyBpbiBnZW5lcmFs LCBidXQgaXQgZG9lc24ndCBoYXZlIHRoZSBJbmRleE9wdEluZm8gdG8KKwkgKiBrbm93IHdoZXRo ZXIgdGhpcyBzcGVjaWZpYyBpbmRleCBoYXMgYmVlbiBkaXNhYmxlZC4KKwkgKi8KKwlpZiAoaW5k ZXgtPmRpc2FibGVkKQorCQlwYXRobm9kZS0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IDE7CisKIAly ZXR1cm4gcGF0aG5vZGU7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggYzE3NWVlOTViNjgu LjI3NzU4ZWMxNmZlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAor KysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTQxMiw2ICsxNDEyLDggQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJYm9vbAkJbnVsbHNub3RkaXN0aW5jdDsKIAkv KiBpcyB1bmlxdWVuZXNzIGVuZm9yY2VkIGltbWVkaWF0ZWx5PyAqLwogCWJvb2wJCWltbWVkaWF0 ZTsKKwkvKiB0cnVlIGlmIHBhdGhzIHVzaW5nIHRoaXMgaW5kZXggc2hvdWxkIGJlIG1hcmtlZCBk aXNhYmxlZCAqLworCWJvb2wJCWRpc2FibGVkOwogCS8qIHRydWUgaWYgaW5kZXggZG9lc24ndCBy ZWFsbHkgZXhpc3QgKi8KIAlib29sCQloeXBvdGhldGljYWw7CiAKLS0gCjIuNTEuMAoK --000000000000e54172064b3290cb Content-Type: application/octet-stream; name="v17-0003-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v17-0003-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mltvfa4t2 RnJvbSA0NzUyZTFjMjM0NzRhMWYyZGNiN2VhNmI0ZGZhMDNkOWQ0ZTdlZjBkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjYgSmFuIDIwMjYgMDk6NTY6MzYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNyAz 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 dCBpcyBvdXQgb2Ygc2NvcGUgZm9yIHRoaXMKY29tbWl0LgoKUmV2aWV3ZWQtYnk6IEx1a2FzIEZp dHRsIDxsdWthc0BmaXR0bC5jb20+ClJldmlld2VkLWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndh cnRha0BlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogR3JlZyBCdXJkIDxncmVnQGJ1cmQu bWU+ClJldmlld2VkLWJ5OiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJwcmlz ZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21haWwuY29tPgpS ZXZpZXdlZC1ieTogRGlhbiBGYXkgPGRpQG5tZmF5LmNvbT4KUmV2aWV3ZWQtYnk6IEFqYXkgUGFs IDxhamF5LnBhbC5rQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEpvaG4gTmF5bG9yIDxqb2huY25h eWxvcmxzQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cDovL3Bvc3Rnci5lcy9tL0NBK1RnbW9a LUpoMVQ2UXlXb0NPRE1WUWRoVFVQWWthWmpXenR6UDFFbjQ9WkhvS1B6d0BtYWlsLmdtYWlsLmNv bQotLS0KIGNvbnRyaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg IDEgKwogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg MSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUgICAgICAgICAgICAgfCAgICAz ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgNTAg KwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgICAgICAgICAgICAgICAgIHwgIDI2MCAr KwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0ICAgIHwgIDM3MSAr KysKIC4uLi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91dCAgICB8ICA1MDkg KysrKwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0IHwgIDMz OSArKysKIC4uLi9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0ICAgICAgICAgICAgICB8ICAg NjkgKwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0IHwgIDQy NiArKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3ByZXBhcmVkLm91dCAgfCAg IDY3ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5vdXQgICAgICB8ICA3 NTcgKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NlbWlqb2luLm91dCAg fCAgMzc3ICsrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0ICAg IHwgIDE5MiArKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWlsZCAgICAgICAgICAg IHwgICA3OSArCiAuLi4vcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwgICAg fCAgIDQzICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYyAgICAgICB8 ICA1NjMgKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJv bCB8ICAgIDUgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oICAgICAg IHwgICA2MSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMgICAgICAgICAgICAg fCAgMzUxICsrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oICAgICAgICAgICAg IHwgIDE4NSArKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5jICAgICAg IHwgIDYzOSArKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oICAg ICAgIHwgICAxOCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jICAg ICAgfCAgNDgxICsrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgg ICAgICB8ICAgNTIgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYyAgICAgICAg ICAgIHwgIDYzNyArKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uaCAgICAg ICAgICAgIHwgIDEwNSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMgICAg ICAgICAgfCAgNTcxICsrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0Lmgg ICAgICAgICAgfCAgIDIyICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueSAg ICAgICAgICB8ICAzMDEgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5j ICAgICAgICAgfCAyMTY2ICsrKysrKysrKysrKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfcGxhbm5lci5oICAgICAgICAgfCAgIDE3ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9zY2FuLmMgICAgICAgICAgICB8ICAyNjkgKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9zY2FuLmggICAgICAgICAgICB8ICAgODUgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3NjYW5uZXIubCAgICAgICAgIHwgIDI5NyArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV90cm92ZS5jICAgICAgICAgICB8ICA1MTYgKysrKwogY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3Ryb3ZlLmggICAgICAgICAgIHwgIDExNCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfd2Fsa2VyLmMgICAgICAgICAgfCAxMDI5ICsrKysrKysrCiBjb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfd2Fsa2VyLmggICAgICAgICAgfCAgMTQxICsrCiBjb250cmliL3BnX3BsYW5f YWR2aWNlL3NxbC9nYXRoZXIuc3FsICAgICAgICAgfCAgIDg2ICsKIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsICAgICB8ICAxNDUgKysKIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL2pvaW5fc3RyYXRlZ3kuc3FsICB8ICAgODQgKwogLi4uL3BnX3BsYW5fYWR2aWNl L3NxbC9sb2NhbF9jb2xsZWN0b3Iuc3FsICAgIHwgICA0NiArCiBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbCAgfCAgIDk5ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL3ByZXBhcmVkLnNxbCAgICAgICB8ICAgMzcgKwogY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvc2Nhbi5zcWwgICAgICAgICAgIHwgIDE5NSArKwogY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvc2VtaWpvaW4uc3FsICAgICAgIHwgIDExOCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3NxbC9zeW50YXguc3FsICAgICAgICAgfCAgIDY4ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv dC8wMDFfcmVncmVzcy5wbCAgICAgICB8ICAxNDggKysKIGRvYy9zcmMvc2dtbC9jb250cmliLnNn bWwgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNn bWwgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBkb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNl LnNnbWwgICAgICAgICAgICAgICAgfCAxMDM2ICsrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDM5ICsKIDUzIGZpbGVzIGNoYW5nZWQsIDE0 MjcyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2 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 MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBmOWRiNjkyMTkwCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dApAQCAtMCww ICsxLDMzOSBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3Jr 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 ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3Qg ZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisg ICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGYpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworICAgTkVT VEVEX0xPT1BfUExBSU4oZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoZiBkKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZCkKKyAgIFNFUV9TQ0FO KGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRIRVIo ZiBkKQorKDE0IHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uMzBjMDc2ODJjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQKQEAgLTAsMCArMSw2OSBA QAorQ1JFQVRFIEVYVEVOU0lPTiBwZ19wbGFuX2FkdmljZTsKK1NFVCBkZWJ1Z19wYXJhbGxlbF9x dWVyeSA9IG9mZjsKKy0tIFRyeSBjbGVhcmluZyBhZHZpY2UgYmVmb3JlIHdlJ3ZlIGNvbGxlY3Rl ZCBhbnkuCitTRUxFQ1QgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOworIHBnX2Ns ZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAKKygxIHJvdykKKworLS0gU2V0IGEgc21hbGwgYWR2aWNlIGNvbGxlY3Rpb24gbGlt aXQgc28gdGhhdCB3ZSdsbCBleGNlZWQgaXQuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29s bGVjdGlvbl9saW1pdCA9IDI7CistLSBFbmFibGUgdGhlIGNvbGxlY3Rvci4KK1NFVCBwZ19wbGFu X2FkdmljZS5sb2NhbF9jb2xsZWN0b3IgPSBvbjsKKy0tIFNldCB1cCBhIGR1bW15IHRhYmxlLgor Q1JFQVRFIFRBQkxFIGR1bW15X3RhYmxlIChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlLCBwYXJhbGxlbF93b3JrZXJzID0gMCk7Cist LSBUZXN0IHF1ZXJpZXMuCitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlIGEsIGR1bW15X3RhYmxl IGI7CisgYSB8IGIgfCBhIHwgYiAKKy0tLSstLS0rLS0tKy0tLQorKDAgcm93cykKKworU0VMRUNU ICogRlJPTSBkdW1teV90YWJsZTsKKyBhIHwgYiAKKy0tLSstLS0KKygwIHJvd3MpCisKKy0tIFNo b3VsZCByZXR1cm4gdGhlIGFkdmljZSBmcm9tIHRoZSBzZWNvbmQgdGVzdCBxdWVyeS4KK1NFVCBw Z19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0b3IgPSBvZmY7CitTRUxFQ1QgYWR2aWNlIEZST00g cGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSBPUkRFUiBCWSBpZCBERVNDIExJTUlUIDE7 CisgICAgICAgICBhZHZpY2UgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNF UV9TQ0FOKGR1bW15X3RhYmxlKSArCisgTk9fR0FUSEVSKGR1bW15X3RhYmxlKQorKDEgcm93KQor CistLSBOb3cgdHJ5IGNsZWFyaW5nIGFkdmljZSBhZ2Fpbi4KK1NFTEVDVCBwZ19jbGVhcl9jb2xs ZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBSYWlz ZSB0aGUgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0IHRoZSBjb2xsZWN0b3IgdXNlcyBtdWx0aXBs ZSBjaHVua3MuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDIw MDA7CitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdG9yID0gb247CistLSBQdXNoIGEg YnVuY2ggb2YgcXVlcmllcyB0aHJvdWdoIHRoZSBjb2xsZWN0b3IuCitETyAkJAorQkVHSU4KKwlG T1IgeCBJTiAxLi4yMDAwIExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUICogRlJPTSBkdW1teV90YWJs ZSc7CisJRU5EIExPT1A7CitFTkQKKyQkOworLS0gQ2hlY2sgdGhhdCB0aGUgY29sbGVjdG9yIHdv cmtlZC4KK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNl KCk7CisgY291bnQgCistLS0tLS0tCisgIDIwMDAKKygxIHJvdykKKworLS0gQW5kIGNsZWFyIG9u ZSBtb3JlIHRpbWUsIHRvIHZlcmlmeSB0aGF0IHRoaXMgZG9lc24ndCBjYXVzZSBhIHByb2JsZW0K Ky0tIGV2ZW4gd2l0aCBhIGxhcmdlciBudW1iZXIgb2YgZW50cmllcy4KK1NFTEVDVCBwZ19jbGVh cl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2Fk dmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uu b3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91dApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmIzZDBhODI0NDMKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndp c2Uub3V0CkBAIC0wLDAgKzEsNDI2IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4 X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgZW5hYmxlX3BhcnRpdGlvbndp c2Vfam9pbiA9IHRydWU7CitDUkVBVEUgVEFCTEUgcHQxIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5 LCBkaW0xIHRleHQsIHZhbDEgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRF IFRBQkxFIHB0MWEgUEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAx KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFi IFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQxYyBQQVJUSVRJ T04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQxIChpZCwgZGltMSwgdmFsMSkK KwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHQxOworQ1JFQVRF IFRBQkxFIHB0MiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkK KwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDJhIFBBUlRJVElPTiBP RiBwdDIgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQyYiBQQVJUSVRJT04gT0YgcHQyIEZPUiBW QUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MmMgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZS T00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsK K0lOU0VSVCBJTlRPIHB0MiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIG90aGVy IHRleHQgJyB8fCBnLCAoZyAlIDUpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAw LDIpIGc7CitWQUNVVU0gQU5BTFlaRSBwdDI7CitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2Vy IHByaW1hcnkga2V5LCBkaW0zIHRleHQsIHZhbDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAo aWQpOworQ1JFQVRFIFRBQkxFIHB0M2EgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00g KDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFU RSBUQUJMRSBwdDNiIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAo MjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUg cHQzYyBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJ V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwg ZGltMywgdmFsMykKKwlTRUxFQ1QgZywgJ2EgdGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAl IDcpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwLDMpIGc7CitWQUNVVU0gQU5B TFlaRSBwdDM7CitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaCAoaWQgaW50ZWdlciBwcmltYXJ5IGtl eSwgZGltbSB0ZXh0LCB2YWxtIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFU RSBUQUJMRSBwdG1pc21hdGNoYSBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBWQUxV RVMgRlJPTSAoMSkgdG8gKDE1MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hiIFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAg Rk9SIFZBTFVFUyBGUk9NICgxNTAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdG1pc21hdGNoIChpZCwgZGltbSwgdmFsbSkKKwlT RUxFQ1QgZywgJ3lldCBhbm90aGVyIHRleHQgJyB8fCBnLCAoZyAlIDIpICsgMQorCSAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHRtaXNtYXRjaDsKK0VY UExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBw dDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwx ID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIE5lc3Rl ZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6 IChwdDJfMS5pZCA9IHB0M18xLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0 MmEgcHQyXzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAg ICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dDNhIHB0M18xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkK KyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWFfcGtleSBvbiBwdDFhIHB0MV8xCisg ICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFz aCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMi5pZCA9IHB0M18yLmlkKQor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAgICAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIHB0MWJfcGtleSBvbiBwdDFiIHB0MV8yCisgICAgICAgICAgICAgICBJbmRleCBDb25k OiAoaWQgPSBwdDJfMi5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAg LT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBI YXNoIENvbmQ6IChwdDJfMy5pZCA9IHB0M18zLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAx KQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdDNjIHB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2 YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWNfcGtleSBvbiBwdDFj IHB0MV8zCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMy5pZCkKKyAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJhIHB0My9wdWJsaWMucHQzYSBwdDEvcHVibGljLnB0 MWEpCisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYiBwdDMvcHVibGljLnB0M2IgcHQxL3B1 YmxpYy5wdDFiKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNj IHB0MS9wdWJsaWMucHQxYykKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHB0MS9wdWJsaWMucHQxYSBw dDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQorICAgSEFTSF9KT0lOKHB0My9wdWJsaWMu cHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorICAgU0VRX1NDQU4ocHQyL3B1 YmxpYy5wdDJhIHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNi CisgICAgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYykKKyAgIElOREVYX1NDQU4ocHQx L3B1YmxpYy5wdDFhIHB1YmxpYy5wdDFhX3BrZXkgcHQxL3B1YmxpYy5wdDFiIHB1YmxpYy5wdDFi X3BrZXkKKyAgICBwdDEvcHVibGljLnB0MWMgcHVibGljLnB0MWNfcGtleSkKKyAgIFBBUlRJVElP TldJU0UoKHB0MSBwdDIgcHQzKSkKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1 YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGlj LnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQz L3B1YmxpYy5wdDNjKQorKDQ3IHJvd3MpCisKKy0tIFN1cHByZXNzIHBhcnRpdGlvbndpc2Ugam9p biwgb3IgZG8gaXQganVzdCBwYXJ0aWFsbHkuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRShwdDEgcHQyIHB0MyknOworRVhQTEFJTiAoUExB Tl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBw dDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2 YWwyID0gMSBBTkQgdmFsMyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgIEhhc2ggQ29uZDogKHB0Mi5pZCA9IHB0My5pZCkKKyAgICAgICAgIC0+ICBBcHBl bmQKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQz YSBwdDNfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAgICAgICAgICAg RmlsdGVyOiAodmFsMyA9IDEpCisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgSW5kZXggU2Nh biB1c2luZyBwdDFhX3BrZXkgb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKGlkID0gcHQyLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAg ICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFiX3BrZXkgb24gcHQxYiBwdDFfMgorICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyLmlkKQorICAgICAgICAgICAgICAgRmlsdGVy OiAodmFsMSA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFjX3BrZXkgb24g cHQxYyBwdDFfMworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyLmlkKQorICAg ICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBQQVJUSVRJT05XSVNFKHB0MSkgLyogbWF0Y2hlZCAqLworICAgUEFSVElUSU9OV0lTRShwdDIp IC8qIG1hdGNoZWQgKi8KKyAgIFBBUlRJVElPTldJU0UocHQzKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDIgcHQzIHB0MSkKKyAgIE5FU1RF RF9MT09QX1BMQUlOKHB0MSkKKyAgIEhBU0hfSk9JTihwdDMpCisgICBTRVFfU0NBTihwdDIvcHVi bGljLnB0MmEgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EK KyAgICBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorICAgSU5ERVhfU0NBTihwdDEv cHVibGljLnB0MWEgcHVibGljLnB0MWFfcGtleSBwdDEvcHVibGljLnB0MWIgcHVibGljLnB0MWJf cGtleQorICAgIHB0MS9wdWJsaWMucHQxYyBwdWJsaWMucHQxY19wa2V5KQorICAgUEFSVElUSU9O V0lTRShwdDIgcHQzIHB0MSkKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1Ymxp Yy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0 MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1 YmxpYy5wdDNjKQorKDQzIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnUEFSVElUSU9OV0lTRSgocHQxIHB0MikgcHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwg Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0 Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFO RCB2YWwzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKHB0MS5pZCA9IHB0My5p ZCkKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAg IEhhc2ggQ29uZDogKHB0MV8xLmlkID0gcHQyXzEuaWQpCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9 IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB0MmEgcHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDIgPSAxKQorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBD b25kOiAocHQxXzIuaWQgPSBwdDJfMi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdDFiIHB0MV8yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAg ICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHQyYiBwdDJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9 IDEpCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChw dDFfMy5pZCA9IHB0Ml8zLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWMg cHQxXzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJj IHB0Ml8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAg IC0+ICBIYXNoCisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHQzYSBwdDNfMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEp CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyKSkgLyogbWF0 Y2hlZCAqLworICAgUEFSVElUSU9OV0lTRShwdDMpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0MS9wdWJsaWMucHQxYSBwdDIvcHVibGljLnB0 MmEpCisgICBKT0lOX09SREVSKHB0MS9wdWJsaWMucHQxYiBwdDIvcHVibGljLnB0MmIpCisgICBK T0lOX09SREVSKHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmMpCisgICBKT0lOX09SREVS KHtwdDEgcHQyfSBwdDMpCisgICBIQVNIX0pPSU4ocHQyL3B1YmxpYy5wdDJhIHB0Mi9wdWJsaWMu cHQyYiBwdDIvcHVibGljLnB0MmMgcHQzKQorICAgU0VRX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB0 Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWIgcHQyL3B1YmxpYy5wdDJiCisgICAgcHQxL3B1 YmxpYy5wdDFjIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNi CisgICAgcHQzL3B1YmxpYy5wdDNjKQorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0MikgcHQzKQor ICAgTk9fR0FUSEVSKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5w dDFjIHB0Mi9wdWJsaWMucHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMg cHQzL3B1YmxpYy5wdDNhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisoNDcgcm93 cykKKworQ09NTUlUOworLS0gVGVzdCBjb25mbGljdGluZyBhZHZpY2UuCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0MikgKHB0 MSBwdDMpKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJP TSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlk CisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQK KyAgIERpc2FibGVkOiB0cnVlCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNo IEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8xLmlkID0gcHQzXzEuaWQpCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAgICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4g dXNpbmcgcHQxYV9wa2V5IG9uIHB0MWEgcHQxXzEKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6 IChpZCA9IHB0Ml8xLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAt PiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhh c2ggQ29uZDogKHB0Ml8yLmlkID0gcHQzXzIuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHQyYiBwdDJfMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEp CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB0M2IgcHQzXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYl9wa2V5IG9uIHB0MWIg cHQxXzIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8yLmlkKQorICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8zLmlkID0gcHQz XzMuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYyBwdDJfMworICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2MgcHQzXzMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIElu ZGV4IFNjYW4gdXNpbmcgcHQxY19wa2V5IG9uIHB0MWMgcHQxXzMKKyAgICAgICAgICAgICAgIElu ZGV4IENvbmQ6IChpZCA9IHB0Ml8zLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9 IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyKSkg LyogbWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxlZCAqLworICAgUEFSVElUSU9OV0lTRSgocHQx IHB0MykpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2Eg cHQxL3B1YmxpYy5wdDFhKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmIgcHQzL3B1Ymxp Yy5wdDNiIHB0MS9wdWJsaWMucHQxYikKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJjIHB0 My9wdWJsaWMucHQzYyBwdDEvcHVibGljLnB0MWMpCisgICBORVNURURfTE9PUF9QTEFJTihwdDEv cHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYykKKyAgIEhBU0hfSk9J TihwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAgIFNF UV9TQ0FOKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2EgcHQyL3B1YmxpYy5wdDJiIHB0 My9wdWJsaWMucHQzYgorICAgIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MpCisgICBJ TkRFWF9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMucHQx YiBwdWJsaWMucHQxYl9wa2V5CisgICAgcHQxL3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkp CisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyIHB0MykpCisgICBOT19HQVRIRVIocHQxL3B1Ymxp Yy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisg ICAgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1 YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyg1MSByb3dzKQorCitDT01NSVQ7CistLSBDYW4n dCBmb3JjZSBhIHBhcnRpdGlvbndpc2Ugam9pbiB3aXRoIGEgbWlzbWF0Y2hlZCB0YWJsZS4KK0JF R0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKChw dDEgcHRtaXNtYXRjaCkpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxF Q1QgKiBGUk9NIHB0MSwgcHRtaXNtYXRjaCBXSEVSRSBwdDEuaWQgPSBwdG1pc21hdGNoLmlkOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAg RGlzYWJsZWQ6IHRydWUKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dDFhIHB0MV8xCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYiBwdDFfMgorICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB0MWMgcHQxXzMKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBJ bmRleCBTY2FuIHVzaW5nIHB0bWlzbWF0Y2hhX3BrZXkgb24gcHRtaXNtYXRjaGEgcHRtaXNtYXRj aF8xCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDEuaWQpCisgICAgICAgICAt PiAgSW5kZXggU2NhbiB1c2luZyBwdG1pc21hdGNoYl9wa2V5IG9uIHB0bWlzbWF0Y2hiIHB0bWlz bWF0Y2hfMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQxLmlkKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0bWlzbWF0Y2gpKSAvKiBt YXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KHB0MSBwdG1pc21hdGNoKQorICAgTkVTVEVEX0xPT1BfUExBSU4ocHRtaXNtYXRjaCkKKyAgIFNF UV9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQor ICAgSU5ERVhfU0NBTihwdG1pc21hdGNoL3B1YmxpYy5wdG1pc21hdGNoYSBwdWJsaWMucHRtaXNt YXRjaGFfcGtleQorICAgIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hiIHB1YmxpYy5wdG1p c21hdGNoYl9wa2V5KQorICAgUEFSVElUSU9OV0lTRShwdDEgcHRtaXNtYXRjaCkKKyAgIE5PX0dB VEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYworICAg IHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hhIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0 Y2hiKQorKDIyIHJvd3MpCisKK0NPTU1JVDsKKy0tIEZvcmNlIGpvaW4gb3JkZXIgZm9yIGEgcGFy dGljdWxhciBicmFuY2ggb2YgdGhlIHBhcnRpdGlvbndpc2Ugam9pbiB3aXRoCistLSBhbmQgd2l0 aG91dCBtZW50aW9uaW5nIHRoZSBzY2hlbWEgbmFtZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGlj LnB0MmEgcHQxL3B1YmxpYy5wdDFhKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZG KQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQg cHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0g MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9p bgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQzXzEuaWQgPSBwdDJfMS5pZCkKKyAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAgICAgICAgICAg ICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2lu ZyBwdDFhX3BrZXkgb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlk ID0gcHQyXzEuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBO ZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBD b25kOiAocHQyXzIuaWQgPSBwdDNfMi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAg ICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9 IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFiX3BrZXkgb24gcHQxYiBwdDFf MgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzIuaWQpCisgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzMuaWQgPSBwdDNfMy5p ZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBwdDFjX3BrZXkgb24gcHQxYyBwdDFfMworICAgICAgICAgICAgICAgSW5kZXgg Q29uZDogKGlkID0gcHQyXzMuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQzL3B1YmxpYy5wdDNhIHB0 Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0 MmEgcHQxL3B1YmxpYy5wdDFhKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmIgcHQzL3B1 YmxpYy5wdDNiIHB0MS9wdWJsaWMucHQxYikKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJj IHB0My9wdWJsaWMucHQzYyBwdDEvcHVibGljLnB0MWMpCisgICBORVNURURfTE9PUF9QTEFJTihw dDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYykKKyAgIEhBU0hf Sk9JTihwdDIvcHVibGljLnB0MmEgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAg IFNFUV9TQ0FOKHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQyL3B1YmxpYy5wdDJi IHB0My9wdWJsaWMucHQzYgorICAgIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MpCisg ICBJTkRFWF9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMu cHQxYiBwdWJsaWMucHQxYl9wa2V5CisgICAgcHQxL3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3Br ZXkpCisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyIHB0MykpCisgICBOT19HQVRIRVIocHQxL3B1 YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJh CisgICAgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQz L3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyg0OSByb3dzKQorCitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIocHQzL3B0M2EgcHQyL3B0MmEgcHQxL3B0 MWEpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0 MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAg IEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAg LT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBI YXNoIENvbmQ6IChwdDNfMS5pZCA9IHB0Ml8xLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAx KQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2 YWwyID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWFfcGtleSBvbiBwdDFh IHB0MV8xCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMS5pZCkKKyAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMi5pZCA9IHB0 M18yLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJ bmRleCBTY2FuIHVzaW5nIHB0MWJfcGtleSBvbiBwdDFiIHB0MV8yCisgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAoaWQgPSBwdDJfMi5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEg PSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICBIYXNoIENvbmQ6IChwdDJfMy5pZCA9IHB0M18zLmlkKQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWNfcGtl eSBvbiBwdDFjIHB0MV8zCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMy5p ZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihwdDMvcHQzYSBwdDIvcHQyYSBwdDEvcHQxYSkgLyogbWF0Y2hl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQzL3B1YmxpYy5w dDNhIHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWEpCisgICBKT0lOX09SREVSKHB0Mi9w dWJsaWMucHQyYiBwdDMvcHVibGljLnB0M2IgcHQxL3B1YmxpYy5wdDFiKQorICAgSk9JTl9PUkRF UihwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNjIHB0MS9wdWJsaWMucHQxYykKKyAgIE5F U1RFRF9MT09QX1BMQUlOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1Ymxp Yy5wdDFjKQorICAgSEFTSF9KT0lOKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2IgcHQz L3B1YmxpYy5wdDNjKQorICAgU0VRX1NDQU4ocHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQy YSBwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiCisgICAgcHQyL3B1YmxpYy5wdDJjIHB0 My9wdWJsaWMucHQzYykKKyAgIElOREVYX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB1YmxpYy5wdDFh X3BrZXkgcHQxL3B1YmxpYy5wdDFiIHB1YmxpYy5wdDFiX3BrZXkKKyAgICBwdDEvcHVibGljLnB0 MWMgcHVibGljLnB0MWNfcGtleSkKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBwdDIgcHQzKSkKKyAg IE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQx YyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0 My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorKDQ5IHJvd3Mp CisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQv cHJlcGFyZWQub3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wcmVwYXJlZC5v dXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA3YTdjNjIzNjU5Ci0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wcmVwYXJl ZC5vdXQKQEAgLTAsMCArMSw2NyBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9w YXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworQ1JFQVRFIFRBQkxFIHB0YWIgKGlkIGlu dGVnZXIsIHZhbCB0ZXh0KSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitTRVQg cGdfcGxhbl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gZmFsc2U7CistLSBO b3QgcHJlcGFyZWQsIHNvIGFkdmljZSBzaG91bGQgYmUgZ2VuZXJhdGVkLgorRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgCitTRUxFQ1QgKiBGUk9NIHB0YWI7CisgICAgICAgUVVFUlkg UExBTiAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB0YWIK KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihwdGFiKQorICAgTk9fR0FUSEVS KHB0YWIpCisoNCByb3dzKQorCistLSBQcmVwYXJlZCwgc28gYWR2aWNlIHNob3VsZCBub3QgYmUg Z2VuZXJhdGVkLgorUFJFUEFSRSBwdDEgQVMgU0VMRUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgRVhFQ1VURSBwdDE7CisgICAgUVVFUlkgUExBTiAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB0YWIKKygxIHJvdykKKworU0VUIHBn X3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWU7CistLSBQcmVw YXJlZCwgYnV0IGFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWUsIHNvIHNob3VsZCBz aG93IGFkdmljZS4KK1BSRVBBUkUgcHQyIEFTIFNFTEVDVCAqIEZST00gcHRhYjsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIEVYRUNVVEUgcHQyOworICAgICAgIFFVRVJZIFBMQU4g ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwdGFiCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocHRhYikKKyAgIE5PX0dBVEhFUihwdGFi KQorKDQgcm93cykKKworLS0gTm90IHByZXBhcmVkLCBzbyBmZWVkYmFjayBzaG91bGQgYmUgZ2Vu ZXJhdGVkLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9 IGZhbHNlOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihwdGFiKSc7CitF WFBMQUlOIChDT1NUUyBPRkYpIAorU0VMRUNUICogRlJPTSBwdGFiOworICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2Vx IFNjYW4gb24gcHRhYgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocHRhYikg LyogbWF0Y2hlZCAqLworKDMgcm93cykKKworLS0gUHJlcGFyZWQsIHNvIGFkdmljZSBzaG91bGQg bm90IGJlIGdlbmVyYXRlZC4KK1BSRVBBUkUgcHQzIEFTIFNFTEVDVCAqIEZST00gcHRhYjsKK0VY UExBSU4gKENPU1RTIE9GRikgRVhFQ1VURSBwdDE7CisgICAgUVVFUlkgUExBTiAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB0YWIKKygxIHJvdykKKworU0VUIHBnX3BsYW5f YWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWU7CistLSBQcmVwYXJlZCwg YnV0IGFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWUsIHNvIHNob3VsZCBzaG93IGZl ZWRiYWNrLgorUFJFUEFSRSBwdDQgQVMgU0VMRUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgRVhFQ1VURSBwdDI7CisgICAgICAgUVVFUlkgUExBTiAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB0YWIKKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihwdGFiKQorICAgTk9fR0FUSEVSKHB0YWIpCiso NCByb3dzKQorCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3Nj YW4ub3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zY2FuLm91dApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2Y5ZTEzYjZkNDEKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0CkBAIC0wLDAg KzEsNzU3IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtl cnNfcGVyX2dhdGhlciA9IDA7CitTRVQgc2VxX3BhZ2VfY29zdCA9IDAuMTsKK1NFVCByYW5kb21f cGFnZV9jb3N0ID0gMC4xOworU0VUIGNwdV90dXBsZV9jb3N0ID0gMDsKK1NFVCBjcHVfaW5kZXhf dHVwbGVfY29zdCA9IDA7CitDUkVBVEUgVEFCTEUgc2Nhbl90YWJsZSAoYSBpbnQgcHJpbWFyeSBr ZXksIGIgdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQg SU5UTyBzY2FuX3RhYmxlCisJU0VMRUNUIGcsICdzb21lIHRleHQgJyB8fCBnIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMDAwMCkgZzsKK0NSRUFURSBJTkRFWCBzY2FuX3RhYmxlX2IgT04gc2Nh bl90YWJsZSBVU0lORyBicmluIChiKTsKK1ZBQ1VVTSBBTkFMWVpFIHNjYW5fdGFibGU7CistLSBT ZXF1ZW50aWFsIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZTsKKyAgICAgICBRVUVSWSBQTEFOICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxl KQorKDQgcm93cykKKworLS0gSW5kZXggc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90 YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFi bGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDUgcm93cykKKworLS0gSW5kZXgt b25seSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9N IHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxl X3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg1IHJvd3MpCisKKy0tIEJpdG1h cCBoZWFwIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBzY2FuX3RhYmxl CisgICBSZWNoZWNrIENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiBzY2FuX3RhYmxlX2IKKyAgICAgICAgIEluZGV4IENvbmQ6IChiID4g J3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBf SEVBUF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3Mp CisKKy0tIFRJRCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBUaWQgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKGN0aWQgPSAnKDAsMSknOjp0 aWQpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkKKyAg IE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDUgcm93cykKKworLS0gVElEIHJhbmdlIHNjYW4KK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQor CVdIRVJFIGN0aWQgPiAnKDEsMSknIEFORCBjdGlkIDwgJygyLDEpJzsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgVGlkIFJhbmdlIFNjYW4gb24gc2Nhbl90YWJsZQorICAgVElEIENvbmQ6ICgoY3RpZCA+ICco MSwxKSc6OnRpZCkgQU5EIChjdGlkIDwgJygyLDEpJzo6dGlkKSkKKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUp CisoNSByb3dzKQorCistLSBUcnkgZm9yY2luZyBlYWNoIG9mIG91ciB0ZXN0IHF1ZXJpZXMgdG8g dXNlIHRoZSBzY2FuIHR5cGUgdGhleQorLS0gd2FudGVkIHRvIHVzZSBhbnl3YXkuIFRoaXMgc2hv dWxkIHN1Y2NlZWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn U0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gc2Nhbl90YWJsZQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nh bl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9T Q0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg2IHJvd3MpCisKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNj YW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNU ICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2Fu X3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtl eSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4o c2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFi bGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOwor ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nh bl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFi bGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9T Q0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVD VCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBzY2Fu X3RhYmxlCisgICBSZWNoZWNrIENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyAgIC0+ ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBzY2FuX3RhYmxlX2IKKyAgICAgICAgIEluZGV4IENvbmQ6 IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEJJ VE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihz Y2FuX3RhYmxlKQorKDkgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBUaWQgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKGN0 aWQgPSAnKDAsMSknOjp0aWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihz Y2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElE X1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl CisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBUaWQgUmFuZ2UgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKChjdGlkID4g JygxLDEpJzo6dGlkKSBBTkQgKGN0aWQgPCAnKDIsMSknOjp0aWQpKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nh bl90YWJsZSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRyeSB0byBmb3JjZSBhIGZ1bGwgc2Nh biBvZiB0aGUgdGFibGUgdG8gdXNlIHNvbWUgb3RoZXIgc2NhbiB0eXBlLiBBbGwKKy0tIG9mIHRo ZXNlIHdpbGwgZmFpbC4gQW4gaW5kZXggc2NhbiBvciBiaXRtYXAgaGVhcCBzY2FuIGNvdWxkIHBv dGVudGlhbGx5CistLSBnZW5lcmF0ZSB0aGUgY29ycmVjdCBhbnN3ZXIsIGJ1dCB0aGUgcGxhbm5l ciBkb2VzIG5vdCBldmVuIGNvbnNpZGVyIHRoZXNlCistLSBwb3NzaWJpbGl0aWVzIGR1ZSB0byB0 aGUgbGFjayBvZiBhIFdIRVJFIGNsYXVzZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6 IHRydWUKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBz Y2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkK Kyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05M WV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2Fu X3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3 IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBf U0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVk OiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5f dGFibGUpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3Mp CisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJs ZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2Fu IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBUSURfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNj YW5fdGFibGUpCisoNyByb3dzKQorCitDT01NSVQ7CistLSBUcnkgYWdhaW4gdG8gZm9yY2UgaW5k ZXggdXNlLiBUaGlzIHNob3VsZCBub3cgc3VjY2VlZCBmb3IgdGhlIElOREVYX1NDQU4KKy0tIGFu ZCBCSVRNQVBfSEVBUF9TQ0FOLCBidXQgdGhlIElOREVYX09OTFlfU0NBTiBjYW4ndCBiZSBmb3Jj ZWQgYmVjYXVzZSB0aGUKKy0tIHF1ZXJ5IGZldGNoZXMgY29sdW1ucyBub3QgaW5jbHVkZWQgaW4g dGhlIGluZGV4LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lO REVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKKyAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4 IENvbmQ6IChhID4gMCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nh bl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkK KyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3Br ZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBXSEVSRSBhID4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEZpbHRlcjogKGEgPiAwKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nh bl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCiso OCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQ X1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24gc2Nhbl90YWJsZQorICAgUmVj aGVjayBDb25kOiAoYSA+IDApCisgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gc2Nhbl90YWJs ZV9wa2V5CisgICAgICAgICBJbmRleCBDb25kOiAoYSA+IDApCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpCisgICBO T19HQVRIRVIoc2Nhbl90YWJsZSkKKyg5IHJvd3MpCisKK0NPTU1JVDsKKy0tIFdlIGNhbiBmb3Jj ZSBhIHByaW1hcnkga2V5IGxvb2t1cCB0byB1c2UgYSBzZXF1ZW50aWFsIHNjYW4sIGJ1dCB3ZQor LS0gY2FuJ3QgZm9yY2UgaXQgdG8gdXNlIGFuIGluZGV4LW9ubHkgc2NhbiAoZHVlIHRvIHRoZSBj b2x1bW4gbGlzdCkKKy0tIG9yIGEgVElEIHNjYW4gKGR1ZSB0byB0aGUgYWJzZW5jZSBvZiBhIFRJ RCBxdWFsKS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFf U0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBGaWx0ZXI6IChhID0gMSkKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVS KHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJF IGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNj YW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorICAgSW5kZXgg Q29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FO KHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5f dGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hF UkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg SW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgRGlzYWJs ZWQ6IHRydWUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCitDT01NSVQ7Cist LSBXZSBjYW4gZm9yY2libHkgZG93bmdyYWRlIGFuIGluZGV4LW9ubHkgc2NhbiB0byBhbiBpbmRl eCBzY2FuLCBidXQgd2UgY2FuJ3QKKy0tIGZvcmNlIHRoZSB1c2Ugb2YgYW4gaW5kZXggdGhhdCB0 aGUgcGxhbm5lciB0aGlua3MgaXMgaW5hcHBsaWNhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3Br ZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5 IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUg cHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93 cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5f dGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisg ICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9T Q0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nh bl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2Fu X3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5n IHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorICAgSW5k ZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihz Y2FuX3RhYmxlIHNjYW5fdGFibGVfYikgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxl X3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsKKy0t IFdlIGNhbiBmb3JjZSB0aGUgdXNlIG9mIGEgc2VxdWVudGlhbCBzY2FuIGluIHBsYWNlIG9mIGEg Yml0bWFwIGhlYXAgc2NhbiwKKy0tIGJ1dCBhIHBsYWluIGluZGV4IHNjYW4gb24gYSBCUklOIGlu ZGV4IGlzIG5vdCBwb3NzaWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4 JzsKKyAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIEZp bHRlcjogKGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkK Kyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NB TihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIERpc2Fi bGVkOiB0cnVlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSAvKiBtYXRjaGVkLCBmYWls ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUg cHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93 cykKKworQ09NTUlUOworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNj YW4gcmF0aGVyIHRoYW4gYSBUSUQgc2NhbiBvcgorLS0gVElEIHJhbmdlIHNjYW4uCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9f R0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBB TkQgY3RpZCA8ICcoMiwxKSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQor ICAgRmlsdGVyOiAoKGN0aWQgPiAnKDEsMSknOjp0aWQpIEFORCAoY3RpZCA8ICcoMiwxKSc6OnRp ZCkpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJs ZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVGVz dCBtb3JlIGNvbXBsZXggc2NlbmFyaW9zIHdpdGggaW5kZXggc2NhbnMuCitCRUdJTjsKKy0tIFNo b3VsZCBzdGlsbCB3b3JrIGlmIHdlIG1lbnRpb24gdGhlIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1 c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAx KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworLS0gQnV0IG5vdCBpZiB3ZSBtZW50aW9u IHRoZSB3cm9uZyBzY2hlbWEuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lO REVYX1NDQU4oc2Nhbl90YWJsZSBjaWxidXAuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQor ICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhf U0NBTihzY2FuX3RhYmxlIGNpbGJ1cC5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGluYXBw bGljYWJsZSwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NB TihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90 YWJsZSkKKyg3IHJvd3MpCisKKy0tIEl0J3MgT0sgdG8gcmVwZWF0IHRoZSBzYW1lIGFkdmljZS4K K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxl IHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQor ICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhf U0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworICAgSU5ERVhf U0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCistLSBCdXQgaXQg ZG9lc24ndCB3b3JrIGlmIHRoZSBpbmRleCB0YXJnZXQgaXMgZXZlbiBub3Rpb25hbGx5IGRpZmZl cmVudC4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2Fu X3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJ bmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FO KHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAqLwor ICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNo ZWQsIGNvbmZsaWN0aW5nICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NB TihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90 YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3QgYXNzb3J0ZWQgaW5jb3JyZWN0IGFk dmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NB Tihub3RoaW5nKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3Rh YmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4obm90aGluZykgLyogbm90IG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJs aWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQor CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4obm90aGluZyB3 aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3Rh YmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpIC8qIG5vdCBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNj YW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxl KQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9T Q0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg SU5ERVhfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSAvKiBtYXRjaGVkLCBpbmFwcGxpY2FibGUsIGZh aWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2Fu X3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkK Kyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05M WV9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlciknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBP bmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENv bmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihu b3RoaW5nIHdoYXRzb2V2ZXIpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtl eSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4 IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXgg Q29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FO KHNjYW5fdGFibGUgYm9ndXMpIC8qIG1hdGNoZWQsIGluYXBwbGljYWJsZSwgZmFpbGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVi bGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykK KworQ09NTUlUOworLS0gVGVzdCBvdXIgYWJpbGl0eSB0byByZWZlciB0byBtdWx0aXBsZSBpbnN0 YW5jZXMgb2YgdGhlIHNhbWUgYWxpYXMuCitCRUdJTjsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpP SU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBz IE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBK b2luCisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAgICAgICAtPiAgRnVuY3Rpb24g U2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg c2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKGEgPSBnLmcpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24g c2Nhbl90YWJsZSBzXzEKKyAgICAgICAgIEluZGV4IENvbmQ6IChhID0gZy5nKQorIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIE5FU1RFRF9MT09QX1BM QUlOKHMgcyMyKQorICAgSU5ERVhfU0NBTihzIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkgcyMyIHB1 YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoZyBzIHMjMikKKygxMiByb3dzKQor CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJp ZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZU IEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBK b2luCisgICAtPiAgSGFzaCBMZWZ0IEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGcuZyA9IHMu YSkKKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUg cworICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUg c18xCisgICAgICAgICBJbmRleCBDb25kOiAoYSA9IGcuZykKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIFNFUV9TQ0FOKHMpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURfTE9PUF9QTEFJTihzIzIpCisgICBI QVNIX0pPSU4ocykKKyAgIFNFUV9TQ0FOKHMpCisgICBJTkRFWF9TQ0FOKHMjMiBwdWJsaWMuc2Nh bl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKGcgcyBzIzIpCisoMTcgcm93cykKKworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzIzIpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwx MCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4g c2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIExlZnQgSm9pbgor ICAgSGFzaCBDb25kOiAoZy5nID0gc18xLmEpCisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2lu CisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAg ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcwor ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBnLmcpCisgICAtPiAgSGFzaAorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgc18xCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBTRVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURfTE9PUF9QTEFJTihzKQorICAgSEFT SF9KT0lOKHMjMikKKyAgIFNFUV9TQ0FOKHMjMikKKyAgIElOREVYX1NDQU4ocyBwdWJsaWMuc2Nh bl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKGcgcyBzIzIpCisoMTcgcm93cykKKworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSBTRVFfU0NBTihzIzIpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0 ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAg ICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggTGVmdCBKb2luCisgICBIYXNoIENvbmQ6IChn LmcgPSBzXzEuYSkKKyAgIC0+ICBIYXNoIExlZnQgSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAo Zy5nID0gcy5hKQorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVz IGcKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2Nh bl90YWJsZSBzCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFi bGUgc18xCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBtYXRjaGVk ICovCisgICBTRVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBIQVNIX0pPSU4ocyBzIzIpCisgICBTRVFf U0NBTihzIHMjMikKKyAgIE5PX0dBVEhFUihnIHMgcyMyKQorKDE3IHJvd3MpCisKK0NPTU1JVDsK Ky0tIFRlc3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8gc2NhbnMgd2l0aGluIGEgc3VicXVlcnku CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNU ICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CisgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNj YW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNAeCBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KQorICAgTk9fR0FUSEVSKHggc0B4KQorKDUgcm93cykKKworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3Rh YmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGlj LnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1ZXJ5IHNAdW5uYW1l ZF9zdWJxdWVyeSkKKyg1IHJvd3MpCisKK0JFR0lOOworLS0gU2hvdWxkIG5vdCBtYXRjaC4KK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc0B4IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisg ICBOT19HQVRIRVIoeCBzQHgpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUg YSA9IDEgT0ZGU0VUIDApOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBv biBzY2FuX3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIFNFUV9TQ0FOKHMpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGljLnNjYW5fdGFi bGVfcGtleSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1ZXJ5IHNAdW5uYW1lZF9zdWJxdWVy eSkKKyg3IHJvd3MpCisKKy0tIFNob3VsZCBtYXRjaCBmaXJzdCBxdWVyeSBvbmx5LgorU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzQHgpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKKyAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBz Y2FuX3RhYmxlIHMKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgU0VRX1NDQU4oc0B4KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgU0VRX1NDQU4oc0B4KQorICAgTk9fR0FUSEVSKHggc0B4KQorKDcgcm93cykKKworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2lu ZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEp CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgpIC8qIG5vdCBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3Vi cXVlcnkgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1 ZXJ5IHNAdW5uYW1lZF9zdWJxdWVyeSkKKyg3IHJvd3MpCisKKy0tIFNob3VsZCBtYXRjaCBzZWNv bmQgcXVlcnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1ND QU4oc0B1bm5hbWVkX3N1YnF1ZXJ5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEg T0ZGU0VUIDApIHg7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAg IEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FO KHNAdW5uYW1lZF9zdWJxdWVyeSkgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNAeCBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9f R0FUSEVSKHggc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAx IE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAgRmlsdGVyOiAoYSA9IDEpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3Vi cXVlcnkpCisgICBOT19HQVRIRVIodW5uYW1lZF9zdWJxdWVyeSBzQHVubmFtZWRfc3VicXVlcnkp CisoNyByb3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNl L2V4cGVjdGVkL3NlbWlqb2luLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQv c2VtaWpvaW4ub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NTUx YzAyOGExZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0 ZWQvc2VtaWpvaW4ub3V0CkBAIC0wLDAgKzEsMzc3IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7 CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitDUkVBVEUgVEFCTEUg c2pfd2lkZSAoCisJaWQgaW50ZWdlciBwcmltYXJ5IGtleSwKKwl2YWwxIGludGVnZXIsCisJcGFk ZGluZyB0ZXh0IHN0b3JhZ2UgcGxhaW4KKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFs c2UpOworSU5TRVJUIElOVE8gc2pfd2lkZQorCVNFTEVDVCBnLCBnJTEwKzEsIHJlcGVhdCgnICcs IDMwMCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgZzsKK0NSRUFURSBJTkRFWCBPTiBz al93aWRlICh2YWwxKTsKK1ZBQ1VVTSBBTkFMWVpFIHNqX3dpZGU7CitDUkVBVEUgVEFCTEUgc2pf bmFycm93ICgKKwlpZCBpbnRlZ2VyIHByaW1hcnkga2V5LAorCXZhbDEgaW50ZWdlcgorKSBXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBzal9uYXJyb3cKKwlT RUxFQ1QgZywgZyUxMCsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGc7CitDUkVBVEUg SU5ERVggT04gc2pfbmFycm93ICh2YWwxKTsKK1ZBQ1VVTSBBTkFMWVpFIHNqX25hcnJvdzsKKy0t IFdlIGV4cGVjdCB0aGlzIHRvIG1ha2UgdGhlIFZBTFVFUyBsaXN0IHVuaXF1ZSBhbmQgdXNlIGlu ZGV4IGxvb2t1cHMgdG8KKy0tIGZpbmQgdGhlIHJvd3MgaW4gc2pfd2lkZSwgc28gYXMgdG8gYXZv aWQgYSBmdWxsIHNjYW4gb2Ygc2pfd2lkZS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIHNqX3dpZGUKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxVRVMg KDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVk IExvb3AKKyAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICBHcm91cCBLZXk6ICIqVkFMVUVT KiIuY29sdW1uMSwgIipWQUxVRVMqIi5jb2x1bW4yCisgICAgICAgICAtPiAgVmFsdWVzIFNjYW4g b24gIipWQUxVRVMqIgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2pfd2lkZV9wa2V5IG9uIHNq X3dpZGUKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9ICIqVkFMVUVTKiIuY29sdW1uMSkKKyAg ICAgICAgIEZpbHRlcjogKHZhbDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIpCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUigiKlZBTFVFUyoiIHNqX3dpZGUpCisgICBORVNURURf TE9PUF9QTEFJTihzal93aWRlKQorICAgSU5ERVhfU0NBTihzal93aWRlIHB1YmxpYy5zal93aWRl X3BrZXkpCisgICBTRU1JSk9JTl9VTklRVUUoIipWQUxVRVMqIikKKyAgIE5PX0dBVEhFUihzal93 aWRlICIqVkFMVUVTKiIpCisoMTMgcm93cykKKworLS0gSWYgd2UgYXNrIGZvciBhIHVuaXF1ZSBz ZW1pam9pbiwgd2Ugc2hvdWxkIGdldCB0aGUgc2FtZSBwbGFuIGFzIHdpdGgKKy0tIG5vIGFkdmlj ZS4gSWYgd2UgYXNrIGZvciBhIG5vbi11bmlxdWUgc2VtaWpvaW4sIHdlIHNob3VsZCBzZWUgYSBT ZW1pCistLSBKb2luIG9wZXJhdGlvbiBpbiB0aGUgcGxhbiB0cmVlLgorQkVHSU47CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZSgiKlZBTFVFUyoiKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBzal93aWRl CisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIpLCAoMywgMyksICg0 LCA0KSwgKDUsIDUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgSGFzaEFnZ3JlZ2F0 ZQorICAgICAgICAgR3JvdXAgS2V5OiAiKlZBTFVFUyoiLmNvbHVtbjEsICIqVkFMVUVTKiIuY29s dW1uMgorICAgICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIqVkFMVUVTKiIKKyAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIHNqX3dpZGVfcGtleSBvbiBzal93aWRlCisgICAgICAgICBJbmRleCBDb25k OiAoaWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpCisgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gIipW QUxVRVMqIi5jb2x1bW4yKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fVU5J UVVFKCIqVkFMVUVTKiIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKCIqVkFMVUVTKiIgc2pfd2lkZSkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHNq X3dpZGUpCisgICBJTkRFWF9TQ0FOKHNqX3dpZGUgcHVibGljLnNqX3dpZGVfcGtleSkKKyAgIFNF TUlKT0lOX1VOSVFVRSgiKlZBTFVFUyoiKQorICAgTk9fR0FUSEVSKHNqX3dpZGUgIipWQUxVRVMq IikKKygxNSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlq b2luX25vbl91bmlxdWUoIipWQUxVRVMqIiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gc2pfd2lkZQorCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVF UyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEhhc2ggU2VtaSBKb2luCisgICBIYXNoIENvbmQ6ICgoc2pfd2lkZS5pZCA9ICIqVkFMVUVTKiIu Y29sdW1uMSkgQU5EIChzal93aWRlLnZhbDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIpKQorICAgLT4g IFNlcSBTY2FuIG9uIHNqX3dpZGUKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgVmFsdWVzIFNj YW4gb24gIipWQUxVRVMqIgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fTk9O X1VOSVFVRSgiKlZBTFVFUyoiKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihzal93aWRlICIqVkFMVUVTKiIpCisgICBIQVNIX0pPSU4oIipWQUxV RVMqIikKKyAgIFNFUV9TQ0FOKHNqX3dpZGUpCisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFM VUVTKiIpCisgICBOT19HQVRIRVIoc2pfd2lkZSAiKlZBTFVFUyoiKQorKDEzIHJvd3MpCisKK0NP TU1JVDsKKy0tIEJlY2F1c2UgdGhpcyB0YWJsZSBpcyBuYXJyb3dlciB0aGFuIHRoZSBwcmV2aW91 cyBvbmUsIGEgc2VxdWVudGlhbCBzY2FuCistLSBpcyBsZXNzIGV4cGVuc2l2ZSwgYW5kIHdlIGNo b29zZSBhIHN0cmFpZ2h0Zm9yd2FyZCBTZW1pIEpvaW4gcGxhbiBieQorLS0gZGVmYXVsdC4gKE5v dGUgdGhhdCB0aGlzIGlzIGFsc28gdmVyeSBzZW5zaXRpdmUgdG8gdGhlIGxlbmd0aCBvZiB0aGUg SU4KKy0tIGxpc3QsIHdoaWNoIGFmZmVjdHMgaG93IG1hbnkgaW5kZXggbG9va3VwcyB0aGUgYWx0 ZXJuYXRpdmUgcGxhbiB3aWxsIG5lZWQuKQorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gc2pfbmFycm93CisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVT ICgxLCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBIYXNoIFNlbWkgSm9pbgorICAgSGFzaCBDb25kOiAoKHNqX25hcnJvdy5pZCA9ICIq VkFMVUVTKiIuY29sdW1uMSkgQU5EIChzal9uYXJyb3cudmFsMSA9ICIqVkFMVUVTKiIuY29sdW1u MikpCisgICAtPiAgU2VxIFNjYW4gb24gc2pfbmFycm93CisgICAtPiAgSGFzaAorICAgICAgICAg LT4gIFZhbHVlcyBTY2FuIG9uICIqVkFMVUVTKiIKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKHNqX25hcnJvdyAiKlZBTFVFUyoiKQorICAgSEFTSF9KT0lOKCIqVkFMVUVT KiIpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFM VUVTKiIpCisgICBOT19HQVRIRVIoc2pfbmFycm93ICIqVkFMVUVTKiIpCisoMTEgcm93cykKKwor LS0gSGVyZSwgd2UgZXhwZWN0IGFkdmlzaW5nIGEgdW5pcXVlIHNlbWlqb2luIHRvIHN3aXRoIHRv IHRoZSBzYW1lIHBsYW4gdGhhdAorLS0gd2UgZ290IHdpdGggc2pfd2lkZSwgYW5kIGFkdmlzaW5n IGEgbm9uLXVuaXF1ZSBzZW1pam9pbiBzaG91bGQgbm90IGNoYW5nZQorLS0gdGhlIHBsYW4uCitC RUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVl KCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIHNqX25hcnJvdworCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgy LCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFz aCBKb2luCisgICBIYXNoIENvbmQ6ICgoc2pfbmFycm93LmlkID0gIipWQUxVRVMqIi5jb2x1bW4x KSBBTkQgKHNqX25hcnJvdy52YWwxID0gIipWQUxVRVMqIi5jb2x1bW4yKSkKKyAgIC0+ICBTZXEg U2NhbiBvbiBzal9uYXJyb3cKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0 ZQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiAiKlZBTFVFUyoiLmNvbHVtbjEsICIqVkFMVUVT KiIuY29sdW1uMgorICAgICAgICAgICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIqVkFMVUVTKiIK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX1VOSVFVRSgiKlZBTFVFUyoiKSAv KiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9u YXJyb3cgIipWQUxVRVMqIikKKyAgIEhBU0hfSk9JTigiKlZBTFVFUyoiKQorICAgU0VRX1NDQU4o c2pfbmFycm93KQorICAgU0VNSUpPSU5fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRIRVIo c2pfbmFycm93ICIqVkFMVUVTKiIpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25hcnJvdworCVdIRVJF IChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1 LCA1KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29u ZDogKChzal9uYXJyb3cuaWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpIEFORCAoc2pfbmFycm93LnZh bDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIpKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdwor ICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZBTFVFUyoiCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHNqX25h cnJvdyAiKlZBTFVFUyoiKQorICAgSEFTSF9KT0lOKCIqVkFMVUVTKiIpCisgICBTRVFfU0NBTihz al9uYXJyb3cpCisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRI RVIoc2pfbmFycm93ICIqVkFMVUVTKiIpCisoMTMgcm93cykKKworQ09NTUlUOworLS0gSW4gdGhl IGFib3ZlIGV4YW1wbGUsIHdlIG1hZGUgdGhlIG91dGVyIHNpZGUgb2YgdGhlIGpvaW4gdW5pcXVl LCBidXQgaGVyZSwKKy0tIHdlIHNob3VsZCBtYWtlIHRoZSBpbm5lciBzaWRlIHVuaXF1ZS4KK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJv dyk7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBD b25kOiAoZy5nID0gc2pfbmFycm93LnZhbDEpCisgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5l cmF0ZV9zZXJpZXMgZworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisg ICAgICAgICAgICAgICBHcm91cCBLZXk6IHNqX25hcnJvdy52YWwxCisgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gc2pfbmFycm93CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9J Tl9PUkRFUihnIHNqX25hcnJvdykKKyAgIEhBU0hfSk9JTihzal9uYXJyb3cpCisgICBTRVFfU0NB Tihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9VTklRVUUoc2pfbmFycm93KQorICAgTk9fR0FUSEVS KGcgc2pfbmFycm93KQorKDEzIHJvd3MpCisKKy0tIFdlIHNob3VsZCBiZSBhYmxlIHRvIGZvcmNl IGEgcGxhbiB3aXRoIG9yIHdpdGhvdXQgdGhlIG1ha2UtdW5pcXVlIHN0cmF0ZWd5LAorLS0gd2l0 aCBlaXRoZXIgc2lkZSBhcyB0aGUgZHJpdmluZyB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoc2pfbmFycm93KSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cp OworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNo IENvbmQ6IChnLmcgPSBzal9uYXJyb3cudmFsMSkKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdl bmVyYXRlX3NlcmllcyBnCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUK KyAgICAgICAgICAgICAgIEdyb3VwIEtleTogc2pfbmFycm93LnZhbDEKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBzal9uYXJyb3cKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNF TUlKT0lOX1VOSVFVRShzal9uYXJyb3cpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGcgc2pfbmFycm93KQorICAgSEFTSF9KT0lOKHNqX25hcnJv dykKKyAgIFNFUV9TQ0FOKHNqX25hcnJvdykKKyAgIFNFTUlKT0lOX1VOSVFVRShzal9uYXJyb3cp CisgICBOT19HQVRIRVIoZyBzal9uYXJyb3cpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKHNqX25hcnJvdyknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93 KTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBTZW1p IEpvaW4KKyAgIEhhc2ggQ29uZDogKGcuZyA9IHNqX25hcnJvdy52YWwxKQorICAgLT4gIEZ1bmN0 aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gc2pfbmFycm93CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9J Tl9OT05fVU5JUVVFKHNqX25hcnJvdykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoZyBzal9uYXJyb3cpCisgICBIQVNIX0pPSU4oc2pfbmFycm93 KQorICAgU0VRX1NDQU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5fTk9OX1VOSVFVRShzal9uYXJy b3cpCisgICBOT19HQVRIRVIoZyBzal9uYXJyb3cpCisoMTMgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoc2pfbmFycm93KSBqb2luX29y ZGVyKHNqX25hcnJvdyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVj dCB2YWwxIGZyb20gc2pfbmFycm93KTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChzal9uYXJyb3cudmFsMSA9IGcu ZykKKyAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICBHcm91cCBLZXk6IHNqX25hcnJvdy52 YWwxCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2pfbmFycm93CisgICAtPiAgSGFzaAorICAg ICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX1VOSVFVRShzal9uYXJyb3cpIC8qIG1hdGNoZWQgKi8K KyAgIEpPSU5fT1JERVIoc2pfbmFycm93KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJyb3cgZykKKyAgIEhBU0hfSk9JTihnKQorICAg U0VRX1NDQU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJvdykKKyAgIE5P X0dBVEhFUihnIHNqX25hcnJvdykKKygxNiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoc2pfbmFycm93KSBqb2luX29yZGVyKHNq X25hcnJvdyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwx IGZyb20gc2pfbmFycm93KTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgSGFzaCBSaWdodCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29uZDogKHNqX25hcnJvdy52YWwx ID0gZy5nKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworICAgLT4gIEhhc2gKKyAgICAg ICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBTRU1JSk9JTl9OT05fVU5JUVVFKHNqX25hcnJvdykgLyogbWF0Y2hlZCAq LworICAgSk9JTl9PUkRFUihzal9uYXJyb3cpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKHNqX25hcnJvdyBnKQorICAgSEFTSF9KT0lOKGcpCisg ICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9OT05fVU5JUVVFKHNqX25hcnJvdykK KyAgIE5PX0dBVEhFUihnIHNqX25hcnJvdykKKygxNCByb3dzKQorCitDT01NSVQ7CistLSBIb3dl dmVyLCBtZW50aW9uaW5nIHRoZSB3cm9uZyBzaWRlIG9mIHRoZSBqb2luIHNob3VsZCByZXN1bHQg aW4gYW4gYWR2aWNlCistLSBmYWlsdXJlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShnKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAg V0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICBK b2luIEZpbHRlcjogKGcuZyA9IHNqX25hcnJvdy52YWwxKQorICAgLT4gIEhhc2hBZ2dyZWdhdGUK KyAgICAgICAgIEdyb3VwIEtleTogc2pfbmFycm93LnZhbDEKKyAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBzal9uYXJyb3cKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBn CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9VTklRVUUoZykgLyogbWF0Y2hl ZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9u YXJyb3cgZykKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGcpCisgICBTRVFfU0NBTihzal9uYXJyb3cp CisgICBTRU1JSk9JTl9VTklRVUUoc2pfbmFycm93KQorICAgTk9fR0FUSEVSKGcgc2pfbmFycm93 KQorKDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpv aW5fbm9uX3VuaXF1ZShnKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2Vs ZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEpvaW4gRmls dGVyOiAoZy5nID0gc2pfbmFycm93LnZhbDEpCisgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAg ICAgR3JvdXAgS2V5OiBzal9uYXJyb3cudmFsMQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNq X25hcnJvdworICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX05PTl9VTklRVUUoZykgLyogbWF0Y2hlZCwg ZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJy b3cgZykKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGcpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisg ICBTRU1JSk9JTl9VTklRVUUoc2pfbmFycm93KQorICAgTk9fR0FUSEVSKGcgc2pfbmFycm93KQor KDE1IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3QgY29uZmxpY3RpbmcgYWR2aWNlLgorQkVHSU47 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShzal9u YXJyb3cpIHNlbWlqb2luX25vbl91bmlxdWUoc2pfbmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBn CisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGcuZyA9IHNqX25h cnJvdy52YWwxKQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAg IC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgR3Jv dXAgS2V5OiBzal9uYXJyb3cudmFsMQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNq X25hcnJvdworIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25h cnJvdykgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcgKi8KKyAgIFNFTUlKT0lOX05PTl9VTklRVUUo c2pfbmFycm93KSAvKiBtYXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihnIHNqX25hcnJvdykKKyAgIEhBU0hfSk9JTihz al9uYXJyb3cpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9VTklRVUUoc2pf bmFycm93KQorICAgTk9fR0FUSEVSKGcgc2pfbmFycm93KQorKDE2IHJvd3MpCisKK0NPTU1JVDsK Ky0tIFRyeSBhcHBseWluZyBTRU1JSk9JTl9VTklRVUUoKSB0byBhIG5vbi1zZW1pam9pbi4KK0JF R0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUo ZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwMCkgZywgc2pfbmFycm93IHMgV0hFUkUgZyA9IHMudmFsMTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAocy52YWwxID0gZy5nKQorICAgLT4gIElu ZGV4IFNjYW4gdXNpbmcgc2pfbmFycm93X3ZhbDFfaWR4IG9uIHNqX25hcnJvdyBzCisgICAtPiAg U29ydAorICAgICAgICAgU29ydCBLZXk6IGcuZworICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4g b24gZ2VuZXJhdGVfc2VyaWVzIGcKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lO X1VOSVFVRShnKSAvKiBtYXRjaGVkLCBpbmFwcGxpY2FibGUsIGZhaWxlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocyBnKQorICAgTUVSR0VfSk9JTl9QTEFJTihn KQorICAgSU5ERVhfU0NBTihzIHB1YmxpYy5zal9uYXJyb3dfdmFsMV9pZHgpCisgICBOT19HQVRI RVIoZyBzKQorKDEzIHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvZXhwZWN0ZWQvc3ludGF4Lm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhw ZWN0ZWQvc3ludGF4Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u YmU2MTQwMmI1NjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4 cGVjdGVkL3N5bnRheC5vdXQKQEAgLTAsMCArMSwxOTIgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNl JzsKKy0tIEFuIGVtcHR5IHN0cmluZyBpcyBhbGxvd2VkLiBFbXB0eSB0YXJnZXQgbGlzdHMgYXJl IGFsbG93ZWQgZm9yIG1vc3QgYWR2aWNlCistLSB0YWdzLCBidXQgbm90IGZvciBKT0lOX09SREVS LiAiU3VwcGxpZWQgUGxhbiBBZHZpY2UiIHNob3VsZCBiZSBvbWl0dGVkIGluCistLSB0ZXh0IGZv cm1hdCB3aGVuIHRoZXJlIGlzIG5vIGFjdHVhbCBhZHZpY2UsIGJ1dCBub3QgaW4gbm9uLXRleHQg Zm9ybWF0LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcnOworRVhQTEFJTiAoQ09TVFMg T0ZGKSBTRUxFQ1QgMTsKKyBRVUVSWSBQTEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0CisoMSBy b3cpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oKSc7CitFWFBMQUlO IChDT1NUUyBPRkYpIFNFTEVDVCAxOworIFFVRVJZIFBMQU4gCistLS0tLS0tLS0tLS0KKyBSZXN1 bHQKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9Q TEFJTigpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgRk9STUFUIEpTT04pIFNFTEVDVCAxOworICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICsKKyAgICAgIlBsYW4iOiB7ICAgICAgICAgICAgICAgICArCisgICAg ICAgIk5vZGUgVHlwZSI6ICJSZXN1bHQiLCAgKworICAgICAgICJQYXJhbGxlbCBBd2FyZSI6IGZh bHNlLCsKKyAgICAgICAiQXN5bmMgQ2FwYWJsZSI6IGZhbHNlLCArCisgICAgICAgIkRpc2FibGVk IjogZmFsc2UgICAgICAgKworICAgICB9LCAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAg IlN1cHBsaWVkIFBsYW4gQWR2aWNlIjogIiIrCisgICB9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgKworIF0KKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09S REVSKCknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2 aWNlLmFkdmljZSI6ICJKT0lOX09SREVSKCkiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2 aWNlOiBKT0lOX09SREVSIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgdGFyZ2V0IGF0IG9yIG5lYXIg IikiCistLSBUZXN0IGFzc29ydGVkIHZhcmlhdGlvbnMgaW4gY2FwaXRhbGl6YXRpb24sIHdoaXRl c3BhY2UsIGFuZCB3aGljaCBwYXJ0cyBvZgorLS0gdGhlIHJlbGF0aW9uIGlkZW50aWZpZXIgYXJl IGluY2x1ZGVkLiBUaGVzZSBzaG91bGQgYWxsIHdvcmsuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ1NFUV9TQ0FOKHgpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oeCkg Lyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnc2VxX3NjYW4oeEB5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgUmVzdWx0CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTih4 QHkpIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ1NFUV9zY2FuKHgjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1ND QU4oeCMyKSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKworU0VUIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdTRVFfU0NBTiAoeC95KSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAx OworICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBT RVFfU0NBTih4L3kpIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJyAgU0VRX1NDQU4gKCB4IC8geSAuIHogKSAgJzsKK0VYUExBSU4gKENP U1RTIE9GRikgU0VMRUNUIDE7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTih4L3kueikgLyogbm90IG1hdGNoZWQgKi8KKygz IHJvd3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIngiIzIvInki LiJ6IkAidCIpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9T Q0FOKHgjMi95LnpAdCkgLyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3MpCisKKy0tIFN5bnRheCBl cnJvcnMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUVVFTlRJQUxfU0NBTih4KSc7 CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2 aWNlIjogIlNFUVVFTlRJQUxfU0NBTih4KSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZp Y2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICJTRVFVRU5USUFMX1NDQU4iCitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3Ig cGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4iCitERVRBSUw6ICBD b3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgZW5kIG9mIGlucHV0CitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCc7CitFUlJPUjogIGludmFsaWQgdmFs dWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUV9TQ0FOKCIKK0RF VEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBlbmQgb2YgaW5w dXQKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIic7CitFUlJPUjogIGlu dmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUV9T Q0FOKCIiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB1bnRlcm1pbmF0ZWQgcXVv dGVkIGlkZW50aWZpZXIgYXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKCIiKSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAi cGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUV9TQ0FOKCIiKSIKK0RFVEFJTDogIENvdWxkIG5v dCBwYXJzZSBhZHZpY2U6IHplcm8tbGVuZ3RoIGRlbGltaXRlZCBpZGVudGlmaWVyIGF0IG9yIG5l YXIgIiIiCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCJhIic7CitFUlJP UjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjog IlNFUV9TQ0FOKCJhIiIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBl cnJvciBhdCBlbmQgb2YgaW5wdXQKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1ND QU4oIyc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZp Y2UuYWR2aWNlIjogIlNFUV9TQ0FOKCMiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNl OiBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiIyIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnKCknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2 aWNlLmFkdmljZSI6ICIoKSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRh eCBlcnJvciBhdCBvciBuZWFyICIoIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcxMjMn OworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFk dmljZSI6ICIxMjMiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJy b3IgYXQgb3IgbmVhciAiMTIzIgorLS0gVGFncyBsaWtlIFNFUV9TQ0FOIGFuZCBOT19HQVRIRVIg ZG9uJ3QgYWxsb3cgc3VibGlzdHMgYXQgYWxsOyBvdGhlciB0YWdzLAorLS0gZXhjZXB0IGZvciBK T0lOX09SREVSLCBhbGxvdyBhdCBtb3N0IG9uZSBsZXZlbCBvZiBzdWJsaXN0LiBIZW5jZSwgdGhl c2UKKy0tIGV4YW1wbGVzIHNob3VsZCBlcnJvciBvdXQuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ1NFUV9TQ0FOKCh4KSknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0 ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFfU0NBTigoeCkpIgorREVUQUlMOiAgQ291 bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIigiCitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0dBVEhFUigoKHgpKSknOworRVJST1I6ICBpbnZhbGlkIHZh bHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJHQVRIRVIoKCh4KSkp IgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5l YXIgIigiCistLSBMZWdhbCBjb21tZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn LyoqLyc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworIFFVRVJZIFBMQU4gCistLS0t LS0tLS0tLS0KKyBSZXN1bHQKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdIQVNIX0pPSU4oXykvKioqLyc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSEFTSF9KT0lO KF8pIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJy8qIGNvbW1lbnQgKi8gSEFTSF9KT0lOKC8qeCoveSknOworRVhQTEFJTiAoQ09TVFMg T0ZGKSBTRUxFQ1QgMTsKKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIEhBU0hfSk9JTih5KSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKworU0VU IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKiBjb21tZW50ICovIEhBU0hfSk9JTih5Ly8qeCov eiknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg UmVzdWx0CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oeS96KSAvKiBub3Qg bWF0Y2hlZCAqLworKDMgcm93cykKKworLS0gVW50ZXJtaW5hdGVkIGNvbW1lbnRzLgorU0VUIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKic7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBh cmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIi8qIgorREVUQUlMOiAgQ291bGQgbm90 IHBhcnNlIGFkdmljZTogdW50ZXJtaW5hdGVkIGNvbW1lbnQgYXQgZW5kIG9mIGlucHV0CitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIoImZPTyIpIC8qIG9vcHMnOworRVJS T1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6 ICJKT0lOX09SREVSKCJmT08iKSAvKiBvb3BzIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFk dmljZTogdW50ZXJtaW5hdGVkIGNvbW1lbnQgYXQgZW5kIG9mIGlucHV0CistLSBOZXN0ZWQgY29t bWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQsIHNvIHRoZSBmaXJzdCBvZiB0aGVzZSBpcyBsZWdhbCBh bmQKKy0tIHRoZSBzZWNvbmQgaXMgbm90LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcv Ki8qLyc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworIFFVRVJZIFBMQU4gCistLS0t LS0tLS0tLS0KKyBSZXN1bHQKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICcvKi8qIHN0dWZmICovKi8nOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIg InBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICIvKi8qIHN0dWZmICovKi8iCitERVRBSUw6ICBDb3Vs ZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiKiIKKy0tIEZvcmVp Z24gam9pbiByZXF1aXJlcyBtdWx0aXBsZSByZWxhdGlvbiBpZGVudGlmaWVycy4KK1NFVCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lOKGEpJzsKK0VSUk9SOiAgaW52YWxpZCB2 YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiRk9SRUlHTl9KT0lO KGEpIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogRk9SRUlHTl9KT0lOIHRhcmdl dHMgbXVzdCBjb250YWluIG1vcmUgdGhhbiBvbmUgcmVsYXRpb24gaWRlbnRpZmllciBhdCBvciBu ZWFyICIpIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGEpKSc7 CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2 aWNlIjogIkZPUkVJR05fSk9JTigoYSkpIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmlj ZTogRk9SRUlHTl9KT0lOIHRhcmdldHMgbXVzdCBjb250YWluIG1vcmUgdGhhbiBvbmUgcmVsYXRp b24gaWRlbnRpZmllciBhdCBvciBuZWFyICIpIgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFu X2FkdmljZS9tZXNvbi5idWlsZCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY3MjI5ZGRkY2VmCi0tLSAv ZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWlsZApAQCAtMCww ICsxLDc5IEBACisjIENvcHlyaWdodCAoYykgMjAyMi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorCitwZ19wbGFuX2FkdmljZV9zb3VyY2VzID0gZmlsZXMoCisgICdw Z19wbGFuX2FkdmljZS5jJywKKyAgJ3BncGFfYXN0LmMnLAorICAncGdwYV9jb2xsZWN0b3IuYycs CisgICdwZ3BhX2lkZW50aWZpZXIuYycsCisgICdwZ3BhX2pvaW4uYycsCisgICdwZ3BhX291dHB1 dC5jJywKKyAgJ3BncGFfcGxhbm5lci5jJywKKyAgJ3BncGFfc2Nhbi5jJywKKyAgJ3BncGFfdHJv dmUuYycsCisgICdwZ3BhX3dhbGtlci5jJywKKykKKworcGdwYV9zY2FubmVyID0gY3VzdG9tX3Rh cmdldCgncGdwYV9zY2FubmVyJywKKyAgaW5wdXQ6ICdwZ3BhX3NjYW5uZXIubCcsCisgIG91dHB1 dDogJ3BncGFfc2Nhbm5lci5jJywKKyAgY29tbWFuZDogZmxleF9jbWQsCispCitnZW5lcmF0ZWRf c291cmNlcyArPSBwZ3BhX3NjYW5uZXIKK3BnX3BsYW5fYWR2aWNlX3NvdXJjZXMgKz0gcGdwYV9z Y2FubmVyCisKK3BncGFfcGFyc2VyID0gY3VzdG9tX3RhcmdldCgncGdwYV9wYXJzZXInLAorICBp bnB1dDogJ3BncGFfcGFyc2VyLnknLAorICBrd2FyZ3M6IGJpc29uX2t3LAorKQorZ2VuZXJhdGVk X3NvdXJjZXMgKz0gcGdwYV9wYXJzZXIudG9fbGlzdCgpCitwZ19wbGFuX2FkdmljZV9zb3VyY2Vz ICs9IHBncGFfcGFyc2VyCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICBwZ19wbGFu X2FkdmljZV9zb3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFf YXJnczogWworICAgICctLU5BTUUnLCAncGdfcGxhbl9hZHZpY2UnLAorICAgICctLUZJTEVERVND JywgJ3BnX3BsYW5fYWR2aWNlIC0gaGVscCB0aGUgcGxhbm5lciBnZXQgdGhlIHJpZ2h0IHBsYW4n LF0pCitlbmRpZgorCitwZ19wbGFuX2FkdmljZV9pbmMgPSBpbmNsdWRlX2RpcmVjdG9yaWVzKCcu JykKKworcGdfcGxhbl9hZHZpY2UgPSBzaGFyZWRfbW9kdWxlKCdwZ19wbGFuX2FkdmljZScsCisg IHBnX3BsYW5fYWR2aWNlX3NvdXJjZXMsCisgIGluY2x1ZGVfZGlyZWN0b3JpZXM6IHBnX3BsYW5f YWR2aWNlX2luYywKKyAga3dhcmdzOiBjb250cmliX21vZF9hcmdzLAorKQorY29udHJpYl90YXJn ZXRzICs9IHBnX3BsYW5fYWR2aWNlCisKK2luc3RhbGxfZGF0YSgKKyAgJ3BnX3BsYW5fYWR2aWNl LS0xLjAuc3FsJywKKyAgJ3BnX3BsYW5fYWR2aWNlLmNvbnRyb2wnLAorICBrd2FyZ3M6IGNvbnRy aWJfZGF0YV9hcmdzLAorKQorCitpbnN0YWxsX2hlYWRlcnMoCisgICdwZ19wbGFuX2FkdmljZS5o JywKKyAgaW5zdGFsbF9kaXI6IGRpcl9pbmNsdWRlX2V4dGVuc2lvbiAvICdwZ19wbGFuX2Fkdmlj ZScsCispCisKK3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAncGdfcGxhbl9hZHZpY2UnLAorICAnc2Qn OiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWls ZF9kaXIoKSwKKyAgJ3JlZ3Jlc3MnOiB7CisgICAgJ3NxbCc6IFsKKyAgICAgICdnYXRoZXInLAor ICAgICAgJ2pvaW5fb3JkZXInLAorICAgICAgJ2pvaW5fc3RyYXRlZ3knLAorICAgICAgJ2xvY2Fs X2NvbGxlY3RvcicsCisgICAgICAncGFydGl0aW9ud2lzZScsCisgICAgICAncHJlcGFyZWQnLAor ICAgICAgJ3NjYW4nLAorICAgICAgJ3NlbWlqb2luJywKKyAgICAgICdzeW50YXgnLAorICAgIF0s CisgIH0sCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX3JlZ3Jlc3Mu cGwnLAorICAgIF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFu X2FkdmljZS0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u NDUwYzQyMDQwZmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn X3BsYW5fYWR2aWNlLS0xLjAuc3FsCkBAIC0wLDAgKzEsNDMgQEAKKy8qIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2Ny aXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04K K1xlY2hvIFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiBwZ19wbGFuX2FkdmljZSIgdG8gbG9hZCB0aGlz IGZpbGUuIFxxdWl0CisKK0NSRUFURSBGVU5DVElPTiBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxf YWR2aWNlKCkKK1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19jbGVhcl9j b2xsZWN0ZWRfbG9jYWxfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5D VElPTiBwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpCitSRVRVUk5TIHZvaWQKK0FT ICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UnCitM QU5HVUFHRSBDIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIHBnX2dldF9jb2xsZWN0ZWRfbG9j YWxfYWR2aWNlKAorCU9VVCBpZCBiaWdpbnQsCisJT1VUIHVzZXJpZCBvaWQsCisJT1VUIGRiaWQg b2lkLAorCU9VVCBxdWVyeWlkIGJpZ2ludCwKKwlPVVQgY29sbGVjdGlvbl90aW1lIHRpbWVzdGFt cHR6LAorCU9VVCBxdWVyeSB0ZXh0LAorCU9VVCBhZHZpY2UgdGV4dAorKQorUkVUVVJOUyBTRVRP RiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9h ZHZpY2UnCitMQU5HVUFHRSBDIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIHBnX2dldF9jb2xs ZWN0ZWRfc2hhcmVkX2FkdmljZSgKKwlPVVQgaWQgYmlnaW50LAorCU9VVCB1c2VyaWQgb2lkLAor CU9VVCBkYmlkIG9pZCwKKwlPVVQgcXVlcnlpZCBiaWdpbnQsCisJT1VUIGNvbGxlY3Rpb25fdGlt ZSB0aW1lc3RhbXB0eiwKKwlPVVQgcXVlcnkgdGV4dCwKKwlPVVQgYWR2aWNlIHRleHQKKykKK1JF VFVSTlMgU0VUT0YgcmVjb3JkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2dldF9jb2xsZWN0 ZWRfc2hhcmVkX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitSRVZPS0UgQUxMIE9OIEZV TkNUSU9OIHBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkgRlJPTSBQVUJMSUM7CitS RVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpIEZS T00gUFVCTElDOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2Fk dmljZS5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45OWI5Nzg0Mzk5MQotLS0gL2Rldi9udWxs CisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYwpAQCAtMCwwICsx LDU2MyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdfcGxhbl9hZHZpY2UuYworICoJ ICBtYWluIGVudHJ5cG9pbnRzIGZvciBnZW5lcmF0aW5nIGFuZCBhcHBseWluZyBwbGFubmVyIGFk dmljZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFu X2FkdmljZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSAicGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRlICJwZ3BhX2FzdC5o IgorI2luY2x1ZGUgInBncGFfY29sbGVjdG9yLmgiCisjaW5jbHVkZSAicGdwYV9pZGVudGlmaWVy LmgiCisjaW5jbHVkZSAicGdwYV9vdXRwdXQuaCIKKyNpbmNsdWRlICJwZ3BhX3BsYW5uZXIuaCIK KyNpbmNsdWRlICJwZ3BhX3Ryb3ZlLmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworI2lu Y2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW4uaCIK KyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluX2Zvcm1hdC5oIgorI2luY2x1ZGUgImNvbW1hbmRz L2V4cGxhaW5fc3RhdGUuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAib3B0aW1p emVyL3BsYW5uZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3RyeS5oIgorI2luY2x1 ZGUgInV0aWxzL2d1Yy5oIgorCitQR19NT0RVTEVfTUFHSUM7CisKK3N0YXRpYyBwZ3BhX3NoYXJl ZF9zdGF0ZSAqcGdwYV9zdGF0ZSA9IE5VTEw7CitzdGF0aWMgZHNhX2FyZWEgKnBncGFfZHNhX2Fy ZWEgPSBOVUxMOworc3RhdGljIExpc3QgKmFkdmlzb3JfaG9va19saXN0ID0gTklMOworCisvKiBH VUMgdmFyaWFibGVzICovCitjaGFyCSAgICpwZ19wbGFuX2FkdmljZV9hZHZpY2UgPSBOVUxMOwor Ym9vbAkJcGdfcGxhbl9hZHZpY2VfYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gZmFsc2U7 CitzdGF0aWMgYm9vbCBwZ19wbGFuX2FkdmljZV9hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZp Y2UgPSB0cnVlOworYm9vbAkJcGdfcGxhbl9hZHZpY2VfZmVlZGJhY2tfd2FybmluZ3MgPSBmYWxz ZTsKK2Jvb2wJCXBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3RvciA9IGZhbHNlOworaW50CQkJ cGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDA7Citib29sCQlwZ19wbGFu X2FkdmljZV9zaGFyZWRfY29sbGVjdG9yID0gZmFsc2U7CitpbnQJCQlwZ19wbGFuX2FkdmljZV9z aGFyZWRfY29sbGVjdGlvbl9saW1pdCA9IDA7Citib29sCQlwZ19wbGFuX2FkdmljZV90cmFjZV9t YXNrID0gZmFsc2U7CisKKy8qIFNhdmVkIGhvb2sgdmFsdWUgKi8KK3N0YXRpYyBleHBsYWluX3Bl cl9wbGFuX2hvb2tfdHlwZSBwcmV2X2V4cGxhaW5fcGVyX3BsYW4gPSBOVUxMOworCisvKiBPdGhl ciBmaWxlLWxldmVsIGdsb2JhbHMgKi8KK3N0YXRpYyBpbnQJZXNfZXh0ZW5zaW9uX2lkOworc3Rh dGljIE1lbW9yeUNvbnRleHQgcGdwYV9tZW1vcnlfY29udGV4dCA9IE5VTEw7CisKK3N0YXRpYyB2 b2lkIHBncGFfaW5pdF9zaGFyZWRfc3RhdGUodm9pZCAqcHRyLCB2b2lkICphcmcpOworc3RhdGlj IHZvaWQgcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9vcHRpb25faGFuZGxlcihFeHBsYWluU3RhdGUg KmVzLAorCQkJCQkJCQkJCQkJICBEZWZFbGVtICpvcHQsCisJCQkJCQkJCQkJCQkgIFBhcnNlU3Rh dGUgKnBzdGF0ZSk7CitzdGF0aWMgdm9pZCBwZ19wbGFuX2FkdmljZV9leHBsYWluX3Blcl9wbGFu X2hvb2soUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCQkJCQkJCQkJIEludG9DbGF1c2Ug KmludG8sCisJCQkJCQkJCQkJCQkgRXhwbGFpblN0YXRlICplcywKKwkJCQkJCQkJCQkJCSBjb25z dCBjaGFyICpxdWVyeVN0cmluZywKKwkJCQkJCQkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywK KwkJCQkJCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7CitzdGF0aWMgYm9vbCBw Z19wbGFuX2FkdmljZV9hZHZpY2VfY2hlY2tfaG9vayhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0 cmEsCisJCQkJCQkJCQkJCSBHdWNTb3VyY2Ugc291cmNlKTsKK3N0YXRpYyBEZWZFbGVtICpmaW5k X2RlZmVsZW1fYnlfZGVmbmFtZShMaXN0ICpkZWZsaXN0LCBjaGFyICpkZWZuYW1lKTsKKworLyoK KyAqIEluaXRpYWxpemUgdGhpcyBtb2R1bGUuCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCit7 CisJRGVmaW5lQ3VzdG9tU3RyaW5nVmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmFkdmljZSIsCisJ CQkJCQkJICAgImFkdmljZSB0byBhcHBseSBkdXJpbmcgcXVlcnkgcGxhbm5pbmciLAorCQkJCQkJ CSAgIE5VTEwsCisJCQkJCQkJICAgJnBnX3BsYW5fYWR2aWNlX2FkdmljZSwKKwkJCQkJCQkgICBO VUxMLAorCQkJCQkJCSAgIFBHQ19VU0VSU0VULAorCQkJCQkJCSAgIDAsCisJCQkJCQkJICAgcGdf cGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNrX2hvb2ssCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkg ICBOVUxMKTsKKworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2UuYWx3 YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlIiwKKwkJCQkJCQkgIkVYUExBSU4gb3V0cHV0IGlu Y2x1ZGVzIHN1cHBsaWVkIGFkdmljZSBldmVuIHdpdGhvdXQgRVhQTEFJTiAoUExBTl9BRFZJQ0Up IiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBnX3BsYW5fYWR2aWNlX2Fsd2F5c19leHBsYWlu X3N1cHBsaWVkX2FkdmljZSwKKwkJCQkJCQkgdHJ1ZSwKKwkJCQkJCQkgUEdDX1VTRVJTRVQsCisJ CQkJCQkJIDAsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwpOwor CisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVf YWR2aWNlX2RldGFpbHMiLAorCQkJCQkJCSAiR2VuZXJhdGUgYWR2aWNlIHN0cmluZ3MgZXZlbiB3 aGVuIHNlZW1pbmdseSBub3QgcmVxdWlyZWQiLAorCQkJCQkJCSAiVXNlIHRoaXMgb3B0aW9uIHRv IHNlZSBnZW5lcmF0ZWQgYWR2aWNlIGZvciBwcmVwYXJlZCBxdWVyaWVzLiIsCisJCQkJCQkJICZw Z19wbGFuX2FkdmljZV9hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMsCisJCQkJCQkJIGZhbHNl LAorCQkJCQkJCSBQR0NfVVNFUlNFVCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJ CQkgTlVMTCwKKwkJCQkJCQkgTlVMTCk7CisKKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBn X3BsYW5fYWR2aWNlLmZlZWRiYWNrX3dhcm5pbmdzIiwKKwkJCQkJCQkgIldhcm4gd2hlbiBzdXBw bGllZCBhZHZpY2UgZG9lcyBub3QgYXBwbHkgY2xlYW5seSIsCisJCQkJCQkJIE5VTEwsCisJCQkJ CQkJICZwZ19wbGFuX2FkdmljZV9mZWVkYmFja193YXJuaW5ncywKKwkJCQkJCQkgZmFsc2UsCisJ CQkJCQkJIFBHQ19VU0VSU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBO VUxMLAorCQkJCQkJCSBOVUxMKTsKKworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfcGxh bl9hZHZpY2UubG9jYWxfY29sbGVjdG9yIiwKKwkJCQkJCQkgIkVuYWJsZSB0aGUgbG9jYWwgYWR2 aWNlIGNvbGxlY3Rvci4iLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSAmcGdfcGxhbl9hZHZpY2Vf bG9jYWxfY29sbGVjdG9yLAorCQkJCQkJCSBmYWxzZSwKKwkJCQkJCQkgUEdDX1VTRVJTRVQsCisJ CQkJCQkJIDAsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwpOwor CisJRGVmaW5lQ3VzdG9tSW50VmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rp b25fbGltaXQiLAorCQkJCQkJCSIjIG9mIGFkdmljZSBlbnRyaWVzIHRvIHJldGFpbiBpbiBwZXIt YmFja2VuZCBtZW1vcnkiLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX3BsYW5fYWR2aWNlX2xv Y2FsX2NvbGxlY3Rpb25fbGltaXQsCisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRfTUFYLAorCQkJ CQkJCVBHQ19VU0VSU0VULAorCQkJCQkJCTAsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMLAor CQkJCQkJCU5VTEwpOworCisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19wbGFuX2Fkdmlj ZS5zaGFyZWRfY29sbGVjdG9yIiwKKwkJCQkJCQkgIkVuYWJsZSB0aGUgc2hhcmVkIGFkdmljZSBj b2xsZWN0b3IuIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBnX3BsYW5fYWR2aWNlX3NoYXJl ZF9jb2xsZWN0b3IsCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBQR0NfU1VTRVQsCisJCQkJCQkJ IDAsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwpOworCisJRGVm aW5lQ3VzdG9tSW50VmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xp bWl0IiwKKwkJCQkJCQkiIyBvZiBhZHZpY2UgZW50cmllcyB0byByZXRhaW4gaW4gc2hhcmVkIG1l bW9yeSIsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQkmcGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxl Y3Rpb25fbGltaXQsCisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRfTUFYLAorCQkJCQkJCVBHQ19T VVNFVCwKKwkJCQkJCQkwLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxM KTsKKworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2UudHJhY2VfbWFz ayIsCisJCQkJCQkJICJFbWl0IGRlYnVnZ2luZyBtZXNzYWdlcyBzaG93aW5nIHRoZSBjb21wdXRl ZCBzdHJhdGVneSBtYXNrIGZvciBlYWNoIHJlbGF0aW9uIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJ CQkgJnBnX3BsYW5fYWR2aWNlX3RyYWNlX21hc2ssCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBQ R0NfVVNFUlNFVCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCwKKwkJ CQkJCQkgTlVMTCk7CisKKwlNYXJrR1VDUHJlZml4UmVzZXJ2ZWQoInBnX3BsYW5fYWR2aWNlIik7 CisKKwkvKiBHZXQgYW4gSUQgdGhhdCB3ZSBjYW4gdXNlIHRvIGNhY2hlIGRhdGEgaW4gYW4gRXhw bGFpblN0YXRlLiAqLworCWVzX2V4dGVuc2lvbl9pZCA9IEdldEV4cGxhaW5FeHRlbnNpb25JZCgi cGdfcGxhbl9hZHZpY2UiKTsKKworCS8qIFJlZ2lzdGVyIHRoZSBuZXcgRVhQTEFJTiBvcHRpb25z IGltcGxlbWVudGVkIGJ5IHRoaXMgbW9kdWxlLiAqLworCVJlZ2lzdGVyRXh0ZW5zaW9uRXhwbGFp bk9wdGlvbigicGxhbl9hZHZpY2UiLAorCQkJCQkJCQkgICBwZ19wbGFuX2FkdmljZV9leHBsYWlu X29wdGlvbl9oYW5kbGVyKTsKKworCS8qIEluc3RhbGwgaG9va3MgKi8KKwlwZ3BhX3BsYW5uZXJf aW5zdGFsbF9ob29rcygpOworCXByZXZfZXhwbGFpbl9wZXJfcGxhbiA9IGV4cGxhaW5fcGVyX3Bs YW5faG9vazsKKwlleHBsYWluX3Blcl9wbGFuX2hvb2sgPSBwZ19wbGFuX2FkdmljZV9leHBsYWlu X3Blcl9wbGFuX2hvb2s7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHNoYXJlZCBzdGF0ZSB3aGVu IGZpcnN0IGNyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2luaXRfc2hhcmVkX3N0YXRl KHZvaWQgKnB0ciwgdm9pZCAqYXJnKQoreworCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IChw Z3BhX3NoYXJlZF9zdGF0ZSAqKSBwdHI7CisKKwlMV0xvY2tJbml0aWFsaXplKCZzdGF0ZS0+bG9j aywgTFdMb2NrTmV3VHJhbmNoZUlkKCJwZ19wbGFuX2FkdmljZV9sb2NrIikpOworCXN0YXRlLT5k c2FfdHJhbmNoZSA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfcGxhbl9hZHZpY2VfZHNhIik7CisJ c3RhdGUtPmFyZWEgPSBEU0FfSEFORExFX0lOVkFMSUQ7CisJc3RhdGUtPnNoYXJlZF9jb2xsZWN0 b3IgPSBJbnZhbGlkRHNhUG9pbnRlcjsKK30KKworLyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8g YSBtZW1vcnkgY29udGV4dCB3aGVyZSBsb25nLWxpdmVkIGRhdGEgbWFuYWdlZCBieSB0aGlzCisg KiBtb2R1bGUgY2FuIGJlIHN0b3JlZC4KKyAqLworTWVtb3J5Q29udGV4dAorcGdfcGxhbl9hZHZp Y2VfZ2V0X21jeHQodm9pZCkKK3sKKwlpZiAocGdwYV9tZW1vcnlfY29udGV4dCA9PSBOVUxMKQor CQlwZ3BhX21lbW9yeV9jb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcE1lbW9yeUNv bnRleHQsCisJCQkJCQkJCQkJCQkJInBnX3BsYW5fYWR2aWNlIiwKKwkJCQkJCQkJCQkJCQlBTExP Q1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCXJldHVybiBwZ3BhX21lbW9yeV9jb250ZXh0OworfQor CisvKgorICogR2V0IGEgcG9pbnRlciB0byBvdXIgc2hhcmVkIHN0YXRlLgorICoKKyAqIElmIG5v IHNoYXJlZCBzdGF0ZSBleGlzdHMsIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBpdC4gSWYgaXQgZG9l cyBleGlzdCBidXQKKyAqIHRoaXMgYmFja2VuZCBoYXMgbm90IHlldCBhY2Nlc3NlZCBpdCwgYXR0 YWNoIHRvIGl0LiBPdGhlcndpc2UsIGp1c3QgcmV0dXJuCisgKiBvdXIgY2FjaGVkIHBvaW50ZXIu CisgKgorICogQWxvbmcgdGhlIHdheSwgbWFrZSBzdXJlIHRoZSByZWxldmFudCBMV0xvY2sgdHJh bmNoZXMgYXJlIHJlZ2lzdGVyZWQuCisgKi8KK3BncGFfc2hhcmVkX3N0YXRlICoKK3BnX3BsYW5f YWR2aWNlX2F0dGFjaCh2b2lkKQoreworCWlmIChwZ3BhX3N0YXRlID09IE5VTEwpCisJeworCQli b29sCQlmb3VuZDsKKworCQlwZ3BhX3N0YXRlID0KKwkJCUdldE5hbWVkRFNNU2VnbWVudCgicGdf cGxhbl9hZHZpY2UiLCBzaXplb2YocGdwYV9zaGFyZWRfc3RhdGUpLAorCQkJCQkJCSAgIHBncGFf aW5pdF9zaGFyZWRfc3RhdGUsICZmb3VuZCwgTlVMTCk7CisJfQorCisJcmV0dXJuIHBncGFfc3Rh dGU7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHBnX3BsYW5fYWR2aWNlJ3MgRFNB IGFyZWEsIGNyZWF0aW5nIGl0IGlmIG5lZWRlZC4KKyAqLworZHNhX2FyZWEgKgorcGdfcGxhbl9h ZHZpY2VfZHNhX2FyZWEodm9pZCkKK3sKKwlpZiAocGdwYV9kc2FfYXJlYSA9PSBOVUxMKQorCXsK KwkJcGdwYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gcGdfcGxhbl9hZHZpY2VfYXR0YWNoKCk7CisJ CWRzYV9oYW5kbGUJYXJlYV9oYW5kbGU7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwor CQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBnX3BsYW5fYWR2aWNlX2dldF9t Y3h0KCkpOworCisJCUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOwor CQlhcmVhX2hhbmRsZSA9IHN0YXRlLT5hcmVhOworCQlpZiAoYXJlYV9oYW5kbGUgPT0gRFNBX0hB TkRMRV9JTlZBTElEKQorCQl7CisJCQlwZ3BhX2RzYV9hcmVhID0gZHNhX2NyZWF0ZShzdGF0ZS0+ ZHNhX3RyYW5jaGUpOworCQkJZHNhX3BpbihwZ3BhX2RzYV9hcmVhKTsKKwkJCXN0YXRlLT5hcmVh ID0gZHNhX2dldF9oYW5kbGUocGdwYV9kc2FfYXJlYSk7CisJCQlMV0xvY2tSZWxlYXNlKCZzdGF0 ZS0+bG9jayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9j ayk7CisJCQlwZ3BhX2RzYV9hcmVhID0gZHNhX2F0dGFjaChhcmVhX2hhbmRsZSk7CisJCX0KKwor CQlkc2FfcGluX21hcHBpbmcocGdwYV9kc2FfYXJlYSk7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGNvbnRleHQpOworCX0KKworCXJldHVybiBwZ3BhX2RzYV9hcmVhOworfQorCisvKgor ICogV2FzIHRoZSBQTEFOX0FEVklDRSBvcHRpb24gc3BlY2lmaWVkIGFuZCBub3Qgc2V0IHRvIGZh bHNlPworICovCitib29sCitwZ19wbGFuX2FkdmljZV9zaG91bGRfZXhwbGFpbihFeHBsYWluU3Rh dGUgKmVzKQoreworCWJvb2wJICAgKnBsYW5fYWR2aWNlID0gTlVMTDsKKworCWlmIChlcyAhPSBO VUxMKQorCQlwbGFuX2FkdmljZSA9IEdldEV4cGxhaW5FeHRlbnNpb25TdGF0ZShlcywgZXNfZXh0 ZW5zaW9uX2lkKTsKKwlyZXR1cm4gcGxhbl9hZHZpY2UgIT0gTlVMTCAmJiAqcGxhbl9hZHZpY2U7 Cit9CisKKy8qCisgKiBHZXQgdGhlIGFkdmljZSB0aGF0IHNob3VsZCBiZSB1c2VkIHdoaWxlIHBs YW5uaW5nIGEgcGFydGljdWxhciBxdWVyeS4KKyAqLworY2hhciAqCitwZ19wbGFuX2FkdmljZV9n ZXRfc3VwcGxpZWRfcXVlcnlfYWR2aWNlKFBsYW5uZXJHbG9iYWwgKmdsb2IsCisJCQkJCQkJCQkJ IFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJ CQkJCQkJCSBpbnQgY3Vyc29yT3B0aW9ucywKKwkJCQkJCQkJCQkgRXhwbGFpblN0YXRlICplcykK K3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCS8qCisJICogSWYgYW55IGFkdmlzb3JzIGFyZSBsb2Fk ZWQsIGNvbnN1bHQgdGhlbS4gVGhlIGZpcnN0IG9uZSB0aGF0IHByb2R1Y2VzIGEKKwkgKiBub24t TlVMTCBzdHJpbmcgd2lucy4KKwkgKi8KKwlmb3JlYWNoKGxjLCBhZHZpc29yX2hvb2tfbGlzdCkK Kwl7CisJCXBnX3BsYW5fYWR2aWNlX2Fkdmlzb3JfaG9vayBob29rID0gbGZpcnN0KGxjKTsKKwkJ Y2hhcgkgICAqYWR2aWNlX3N0cmluZzsKKworCQlhZHZpY2Vfc3RyaW5nID0gKCpob29rKSAoZ2xv YiwgcGFyc2UsIHF1ZXJ5X3N0cmluZywgY3Vyc29yT3B0aW9ucywgZXMpOworCQlpZiAoYWR2aWNl X3N0cmluZyAhPSBOVUxMKQorCQkJcmV0dXJuIGFkdmljZV9zdHJpbmc7CisJfQorCisJLyogT3Ro ZXJ3aXNlLCBqdXN0IHVzZSB0aGUgdmFsdWUgb2YgdGhlIEdVQy4gKi8KKwlyZXR1cm4gcGdfcGxh bl9hZHZpY2VfYWR2aWNlOworfQorCisvKgorICogQWRkIGFuIGFkdmlzb3IsIHdoaWNoIGNhbiBz dXBwbHkgYWR2aWNlIHN0cmluZ3MgdG8gYmUgdXNlZCBkdXJpbmcgZnV0dXJlCisgKiBxdWVyeSBw bGFubmluZyBvcGVyYXRpb25zLgorICoKKyAqIFRoZSBhZHZpc29yIHNob3VsZCByZXR1cm4gTlVM TCBpZiBpdCBoYXMgbm8gYWR2aWNlIHN0cmluZyB0byBvZmZlciBmb3IgYQorICogZ2l2ZW4gcXVl cnkuIElmIG11bHRpcGxlIGFkdmlzb3JzIGFyZSBhZGRlZCwgdGhleSB3aWxsIGJlIGNvbnN1bHRl ZCBpbiB0aGUKKyAqIG9yZGVyIGFkZGVkIHVudGlsIG9uZSBvZiB0aGVtIHJldHVybnMgYSBub24t TlVMTCB2YWx1ZS4KKyAqLwordm9pZAorcGdfcGxhbl9hZHZpY2VfYWRkX2Fkdmlzb3IocGdfcGxh bl9hZHZpY2VfYWR2aXNvcl9ob29rIGhvb2spCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0 OworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19wbGFuX2FkdmljZV9n ZXRfbWN4dCgpKTsKKwlhZHZpc29yX2hvb2tfbGlzdCA9IGxhcHBlbmQoYWR2aXNvcl9ob29rX2xp c3QsIGhvb2spOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKworLyoK KyAqIFJlbW92ZSBhbiBhZHZpc29yLgorICovCit2b2lkCitwZ19wbGFuX2FkdmljZV9yZW1vdmVf YWR2aXNvcihwZ19wbGFuX2FkdmljZV9hZHZpc29yX2hvb2sgaG9vaykKK3sKKwlNZW1vcnlDb250 ZXh0IG9sZGNvbnRleHQ7CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBn X3BsYW5fYWR2aWNlX2dldF9tY3h0KCkpOworCWFkdmlzb3JfaG9va19saXN0ID0gbGlzdF9kZWxl dGVfcHRyKGFkdmlzb3JfaG9va19saXN0LCBob29rKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY29udGV4dCk7Cit9CisKKy8qCisgKiBIYW5kbGVyIGZvciBFWFBMQUlOIChQTEFOX0FEVklD RSkuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2FkdmljZV9leHBsYWluX29wdGlvbl9oYW5k bGVyKEV4cGxhaW5TdGF0ZSAqZXMsIERlZkVsZW0gKm9wdCwKKwkJCQkJCQkJCSAgUGFyc2VTdGF0 ZSAqcHN0YXRlKQoreworCWJvb2wJICAgKnBsYW5fYWR2aWNlOworCisJcGxhbl9hZHZpY2UgPSBH ZXRFeHBsYWluRXh0ZW5zaW9uU3RhdGUoZXMsIGVzX2V4dGVuc2lvbl9pZCk7CisKKwlpZiAocGxh bl9hZHZpY2UgPT0gTlVMTCkKKwl7CisJCXBsYW5fYWR2aWNlID0gcGFsbG9jMF9vYmplY3QoYm9v bCk7CisJCVNldEV4cGxhaW5FeHRlbnNpb25TdGF0ZShlcywgZXNfZXh0ZW5zaW9uX2lkLCBwbGFu X2FkdmljZSk7CisJfQorCisJKnBsYW5fYWR2aWNlID0gZGVmR2V0Qm9vbGVhbihvcHQpOworfQor CisvKgorICogRGlzcGxheSBhIHN0cmluZyB0aGF0IGlzIGxpa2VseSB0byBjb25zaXN0IG9mIG11 bHRpcGxlIGxpbmVzIGluIEVYUExBSU4KKyAqIG91dHB1dC4KKyAqLworc3RhdGljIHZvaWQKK3Bn X3BsYW5fYWR2aWNlX2V4cGxhaW5fdGV4dF9tdWx0aWxpbmUoRXhwbGFpblN0YXRlICplcywgY2hh ciAqcWxhYmVsLAorCQkJCQkJCQkJICBjaGFyICp2YWx1ZSkKK3sKKwljaGFyCSAgICpzOworCisJ LyogRm9yIG5vbi10ZXh0IGZvcm1hdHMsIGl0J3MgYmVzdCBub3QgdG8gYWRkIGFueSBzcGVjaWFs IGhhbmRsaW5nLiAqLworCWlmIChlcy0+Zm9ybWF0ICE9IEVYUExBSU5fRk9STUFUX1RFWFQpCisJ eworCQlFeHBsYWluUHJvcGVydHlUZXh0KHFsYWJlbCwgdmFsdWUsIGVzKTsKKwkJcmV0dXJuOwor CX0KKworCS8qIEluIHRleHQgZm9ybWF0LCBpZiB0aGVyZSBpcyBubyBkYXRhLCBkaXNwbGF5IG5v dGhpbmcuICovCisJaWYgKCp2YWx1ZSA9PSAnXDAnKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEl0 IGxvb2tzIG5pY2VzdCB0byBpbmRlbnQgZWFjaCBsaW5lIG9mIHRoZSBhZHZpY2Ugc2VwYXJhdGVs eSwgYmVnaW5uaW5nCisJICogb24gdGhlIGxpbmUgYmVsb3cgdGhlIGxhYmVsLgorCSAqLworCUV4 cGxhaW5JbmRlbnRUZXh0KGVzKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsICIlczpcbiIs IHFsYWJlbCk7CisJZXMtPmluZGVudCsrOworCXdoaWxlICgocyA9IHN0cmNocih2YWx1ZSwgJ1xu JykpICE9IE5VTEwpCisJeworCQlFeHBsYWluSW5kZW50VGV4dChlcyk7CisJCWFwcGVuZEJpbmFy eVN0cmluZ0luZm8oZXMtPnN0ciwgdmFsdWUsIChzIC0gdmFsdWUpICsgMSk7CisJCXZhbHVlID0g cyArIDE7CisJfQorCisJLyogRG9uJ3QgaW50ZXJwcmV0IGEgdGVybWluYWwgbmV3bGluZSBhcyBh IHJlcXVlc3QgZm9yIGFuIGVtcHR5IGxpbmUuICovCisJaWYgKCp2YWx1ZSAhPSAnXDAnKQorCXsK KwkJRXhwbGFpbkluZGVudFRleHQoZXMpOworCQlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsICIl c1xuIiwgdmFsdWUpOworCX0KKworCWVzLT5pbmRlbnQtLTsKK30KKworLyoKKyAqIEFkZCBhZHZp Y2UgZmVlZGJhY2sgdG8gdGhlIEVYUExBSU4gb3V0cHV0LgorICovCitzdGF0aWMgdm9pZAorcGdf cGxhbl9hZHZpY2VfZXhwbGFpbl9mZWVkYmFjayhFeHBsYWluU3RhdGUgKmVzLCBMaXN0ICpmZWVk YmFjaykKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsK Kwlmb3JlYWNoX25vZGUoRGVmRWxlbSwgaXRlbSwgZmVlZGJhY2spCisJeworCQlpbnQJCQlmbGFn cyA9IGRlZkdldEludDMyKGl0ZW0pOworCisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVzIC8q ICIsIGl0ZW0tPmRlZm5hbWUpOworCQlwZ3BhX3Ryb3ZlX2FwcGVuZF9mbGFncygmYnVmLCBmbGFn cyk7CisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiAqL1xuIik7CisJfQorCisJcGdfcGxhbl9h ZHZpY2VfZXhwbGFpbl90ZXh0X211bHRpbGluZShlcywgIlN1cHBsaWVkIFBsYW4gQWR2aWNlIiwK KwkJCQkJCQkJCQkgIGJ1Zi5kYXRhKTsKK30KKworLyoKKyAqIEFkZCByZWxldmFudCBkZXRhaWxz LCBpZiBhbnksIHRvIHRoZSBFWFBMQUlOIG91dHB1dCBmb3IgYSBzaW5nbGUgcGxhbi4KKyAqLwor c3RhdGljIHZvaWQKK3BnX3BsYW5fYWR2aWNlX2V4cGxhaW5fcGVyX3BsYW5faG9vayhQbGFubmVk U3RtdCAqcGxhbm5lZHN0bXQsCisJCQkJCQkJCQkgSW50b0NsYXVzZSAqaW50bywKKwkJCQkJCQkJ CSBFeHBsYWluU3RhdGUgKmVzLAorCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAor CQkJCQkJCQkJIFBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJCQkJCQkJIFF1ZXJ5RW52aXJvbm1l bnQgKnF1ZXJ5RW52KQoreworCWJvb2wJCXNob3VsZF9leHBsYWluOworCURlZkVsZW0gICAgKnBn cGFfaXRlbTsKKwlMaXN0CSAgICpwZ3BhX2xpc3Q7CisKKwlpZiAocHJldl9leHBsYWluX3Blcl9w bGFuKQorCQlwcmV2X2V4cGxhaW5fcGVyX3BsYW4ocGxhbm5lZHN0bXQsIGludG8sIGVzLCBxdWVy eVN0cmluZywgcGFyYW1zLAorCQkJCQkJCSAgcXVlcnlFbnYpOworCisJLyogU2hvdWxkIGFuIGFk dmljZSBzdHJpbmcgYmUgcGFydCBvZiB0aGUgRVhQTEFJTiBvdXRwdXQ/ICovCisJc2hvdWxkX2V4 cGxhaW4gPSBwZ19wbGFuX2FkdmljZV9zaG91bGRfZXhwbGFpbihlcyk7CisKKwkvKiBGaW5kIGFu eSBkYXRhIHBncGFfcGxhbm5lcl9zaHV0ZG93biBzdGFzaGVkIGluIHRoZSBQbGFubmVkU3RtdC4g Ki8KKwlwZ3BhX2l0ZW0gPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShwbGFubmVkc3RtdC0+ZXh0 ZW5zaW9uX3N0YXRlLAorCQkJCQkJCQkJCSJwZ19wbGFuX2FkdmljZSIpOworCXBncGFfbGlzdCA9 IHBncGFfaXRlbSA9PSBOVUxMID8gTlVMTCA6IChMaXN0ICopIHBncGFfaXRlbS0+YXJnOworCisJ LyoKKwkgKiBCeSBkZWZhdWx0LCBpZiB0aGVyZSBpcyBhIHJlY29yZCBvZiBhdHRlbXB0aW5nIHRv IGFwcGx5IGFkdmljZSBkdXJpbmcKKwkgKiBxdWVyeSBwbGFubmluZywgd2UgYWx3YXlzIG91dHB1 dCB0aGF0IGluZm9ybWF0aW9uLCBidXQgdGhlIHVzZXIgY2FuIHNldAorCSAqIHBnX3BsYW5fYWR2 aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSA9IGZhbHNlIHRvIHN1cHByZXNzIHRo YXQKKwkgKiBiZWhhdmlvci4gSWYgdGhleSBkbywgd2UnbGwgb25seSBkaXNwbGF5IGl0IHdoZW4g dGhlIFBMQU5fQURWSUNFIG9wdGlvbgorCSAqIHdhcyBzcGVjaWZpZWQgYW5kIG5vdCBzZXQgdG8g ZmFsc2UuCisJICoKKwkgKiBOQjogSWYgd2UncmUgZXhwbGFpbmluZyBhIHF1ZXJ5IHBsYW5uZWQg YmVmb3JlaGFuZCAtLSBpLmUuIGEgcHJlcGFyZWQKKwkgKiBzdGF0ZW1lbnQgLS0gdGhlIGFwcGxp Y2F0aW9uIG9mIHF1ZXJ5IGFkdmljZSBtYXkgbm90IGhhdmUgYmVlbgorCSAqIHJlY29yZGVkLCBh bmQgdGhlcmVmb3JlIHRoaXMgd29uJ3QgYmUgYWJsZSB0byBzaG93IGFueXRoaW5nLiBVc2UKKwkg KiBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSB0cnVlIHRvIHdv cmsgYXJvdW5kIHRoaXMuCisJICovCisJaWYgKHBncGFfbGlzdCAhPSBOVUxMICYmIChwZ19wbGFu X2FkdmljZV9hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UgfHwKKwkJCQkJCQkgIHNob3Vs ZF9leHBsYWluKSkKKwl7CisJCURlZkVsZW0gICAgKmZlZWRiYWNrOworCisJCWZlZWRiYWNrID0g ZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUocGdwYV9saXN0LCAiZmVlZGJhY2siKTsKKwkJaWYgKGZl ZWRiYWNrICE9IE5VTEwpCisJCQlwZ19wbGFuX2FkdmljZV9leHBsYWluX2ZlZWRiYWNrKGVzLCAo TGlzdCAqKSBmZWVkYmFjay0+YXJnKTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBQTEFOX0FEVklD RSBvcHRpb24gd2FzIHNwZWNpZmllZCAtLSBhbmQgbm90IHNlbnQgdG8gRkFMU0UgLS0KKwkgKiBz aG93IGdlbmVyYXRlZCBhZHZpY2UuCisJICovCisJaWYgKHNob3VsZF9leHBsYWluKQorCXsKKwkJ RGVmRWxlbSAgICAqYWR2aWNlX3N0cmluZ19pdGVtOworCQljaGFyCSAgICphZHZpY2Vfc3RyaW5n ID0gTlVMTDsKKworCQlhZHZpY2Vfc3RyaW5nX2l0ZW0gPQorCQkJZmluZF9kZWZlbGVtX2J5X2Rl Zm5hbWUocGdwYV9saXN0LCAiYWR2aWNlX3N0cmluZyIpOworCQlpZiAoYWR2aWNlX3N0cmluZ19p dGVtICE9IE5VTEwpCisJCXsKKwkJCWFkdmljZV9zdHJpbmcgPSBzdHJWYWwoYWR2aWNlX3N0cmlu Z19pdGVtLT5hcmcpOworCQkJcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl90ZXh0X211bHRpbGluZShl cywgIkdlbmVyYXRlZCBQbGFuIEFkdmljZSIsCisJCQkJCQkJCQkJCQkgIGFkdmljZV9zdHJpbmcp OworCQl9CisJfQorfQorCisvKgorICogQ2hlY2sgaG9vayBmb3IgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlCisgKi8KK3N0YXRpYyBib29sCitwZ19wbGFuX2FkdmljZV9hZHZpY2VfY2hlY2tfaG9vayhj aGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCit7CisJTWVtb3J5 Q29udGV4dCBvbGRjb250ZXh0OworCU1lbW9yeUNvbnRleHQgdG1wY29udGV4dDsKKwljaGFyCSAg ICplcnJvcjsKKworCWlmICgqbmV3dmFsID09IE5VTEwpCisJCXJldHVybiB0cnVlOworCisJdG1w Y29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJ CQkJCQkJCSAgICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiLAorCQkJCQkJCQkJICAgQUxMT0NTRVRf REVGQVVMVF9TSVpFUyk7CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBj b250ZXh0KTsKKworCS8qCisJICogSXQgd291bGQgYmUgbmljZSB0byBzYXZlIHRoZSBwYXJzZSB0 cmVlIHRoYXQgd2UgY29uc3RydWN0IGhlcmUgZm9yCisJICogZXZlbnR1YWwgdXNlIHdoZW4gcGxh bm5pbmcgd2l0aCB0aGlzIGFkdmljZSwgYnV0ICpleHRyYSBjYW4gb25seSBwb2ludAorCSAqIHRv IGEgc2luZ2xlIGd1Y19tYWxsb2MnZCBjaHVuaywgYW5kIG91ciBwYXJzZSB0cmVlIGludm9sdmVz IGFuCisJICogYXJiaXRyYXJ5IG51bWJlciBvZiBtZW1vcnkgYWxsb2NhdGlvbnMuCisJICovCisJ KHZvaWQpIHBncGFfcGFyc2UoKm5ld3ZhbCwgJmVycm9yKTsKKworCWlmIChlcnJvciAhPSBOVUxM KQorCXsKKwkJR1VDX2NoZWNrX2VycmRldGFpbCgiQ291bGQgbm90IHBhcnNlIGFkdmljZTogJXMi LCBlcnJvcik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY29udGV4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0bXBjb250ZXh0KTsKKworCXJldHVy biB0cnVlOworfQorCisvKgorICogU2VhcmNoIGEgbGlzdCBvZiBEZWZFbGVtIG9iamVjdHMgZm9y IGEgZ2l2ZW4gZGVmbmFtZS4KKyAqLworc3RhdGljIERlZkVsZW0gKgorZmluZF9kZWZlbGVtX2J5 X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSkKK3sKKwlmb3JlYWNoX25vZGUo RGVmRWxlbSwgaXRlbSwgZGVmbGlzdCkKKwl7CisJCWlmIChzdHJjbXAoaXRlbS0+ZGVmbmFtZSwg ZGVmbmFtZSkgPT0gMCkKKwkJCXJldHVybiBpdGVtOworCX0KKworCXJldHVybiBOVUxMOworfQpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jb250cm9s IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jb250cm9sCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYTZmZGM5ZTdiMgotLS0gL2Rldi9udWxs CisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbApAQCAt MCwwICsxLDUgQEAKKyMgcGdfcGxhbl9hZHZpY2UgZXh0ZW5zaW9uCitjb21tZW50ID0gJ2hlbHAg dGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcK K21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3BnX3BsYW5fYWR2aWNlJworcmVsb2NhdGFibGUg PSB0cnVlCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNl LmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIxZjY2MDkyZmEyCi0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oCkBAIC0wLDAgKzEsNjEg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBnX3BsYW5fYWR2aWNlLmgKKyAqCSAgbWFp biBoZWFkZXIgZmlsZSBmb3IgcGdfcGxhbl9hZHZpY2UgY29udHJpYiBtb2R1bGUKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaAorICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHX1BMQU5fQURWSUNFX0gKKyNkZWZp bmUgUEdfUExBTl9BRFZJQ0VfSAorCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5o IgorI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgorI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rl cy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAidXRpbHMvZHNhLmgi CisKK3R5cGVkZWYgc3RydWN0IHBncGFfc2hhcmVkX3N0YXRlCit7CisJTFdMb2NrCQlsb2NrOwor CWludAkJCWRzYV90cmFuY2hlOworCWRzYV9oYW5kbGUJYXJlYTsKKwlkc2FfcG9pbnRlciBzaGFy ZWRfY29sbGVjdG9yOworfSBwZ3BhX3NoYXJlZF9zdGF0ZTsKKworLyogSG9vayBmb3Igb3RoZXIg cGx1Z2lucyB0byBzdXBwbHkgYWR2aWNlIHN0cmluZ3MgKi8KK3R5cGVkZWYgY2hhciAqKCpwZ19w bGFuX2FkdmljZV9hZHZpc29yX2hvb2spIChQbGFubmVyR2xvYmFsICpnbG9iLAorCQkJCQkJCQkJ CQkgIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCQkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcs CisJCQkJCQkJCQkJCSAgaW50IGN1cnNvck9wdGlvbnMsCisJCQkJCQkJCQkJCSAgRXhwbGFpblN0 YXRlICplcyk7CisKKy8qIEdVQyB2YXJpYWJsZXMgKi8KK2V4dGVybiBjaGFyICpwZ19wbGFuX2Fk dmljZV9hZHZpY2U7CitleHRlcm4gYm9vbCBwZ19wbGFuX2FkdmljZV9hbHdheXNfc3RvcmVfYWR2 aWNlX2RldGFpbHM7CitleHRlcm4gYm9vbCBwZ19wbGFuX2FkdmljZV9mZWVkYmFja193YXJuaW5n czsKK2V4dGVybiBib29sIHBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3RvcjsKK2V4dGVybiBp bnQJcGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdDsKK2V4dGVybiBib29sIHBn X3BsYW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3I7CitleHRlcm4gaW50CXBnX3BsYW5fYWR2aWNl X3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0OworZXh0ZXJuIGJvb2wgcGdfcGxhbl9hZHZpY2VfdHJh Y2VfbWFzazsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAoZm9yIHVzZSBieSBwZ19wbGFuX2Fk dmljZSBpdHNlbGYpICovCitleHRlcm4gTWVtb3J5Q29udGV4dCBwZ19wbGFuX2FkdmljZV9nZXRf bWN4dCh2b2lkKTsKK2V4dGVybiBwZ3BhX3NoYXJlZF9zdGF0ZSAqcGdfcGxhbl9hZHZpY2VfYXR0 YWNoKHZvaWQpOworZXh0ZXJuIGRzYV9hcmVhICpwZ19wbGFuX2FkdmljZV9kc2FfYXJlYSh2b2lk KTsKK2V4dGVybiBib29sIHBnX3BsYW5fYWR2aWNlX3Nob3VsZF9leHBsYWluKEV4cGxhaW5TdGF0 ZSAqZXMpOworZXh0ZXJuIGNoYXIgKnBnX3BsYW5fYWR2aWNlX2dldF9zdXBwbGllZF9xdWVyeV9h ZHZpY2UoUGxhbm5lckdsb2JhbCAqZ2xvYiwKKwkJCQkJCQkJCQkJCQkgIFF1ZXJ5ICpwYXJzZSwK KwkJCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJCQkJCQkg IGludCBjdXJzb3JPcHRpb25zLAorCQkJCQkJCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CisK Ky8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKGZvciB1c2UgYnkgb3RoZXIgcGx1Z2lucykgKi8KK2V4 dGVybiBQR0RMTEVYUE9SVCB2b2lkIHBnX3BsYW5fYWR2aWNlX2FkZF9hZHZpc29yKHBnX3BsYW5f YWR2aWNlX2Fkdmlzb3JfaG9vayBob29rKTsKK2V4dGVybiBQR0RMTEVYUE9SVCB2b2lkIHBnX3Bs YW5fYWR2aWNlX3JlbW92ZV9hZHZpc29yKHBnX3BsYW5fYWR2aWNlX2Fkdmlzb3JfaG9vayBob29r KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0 LmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg1YmQ3NDg1OWRmCi0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jCkBAIC0wLDAgKzEsMzUxIEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX2FzdC5jCisgKgkgIGFkZGl0aW9uYWwgc3VwcG9ydGlu ZyBjb2RlIHJlbGF0ZWQgdG8gcGxhbiBhZHZpY2UgcGFyc2luZworICoKKyAqIENvcHlyaWdodCAo YykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAq CSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ3BhX2FzdC5o IgorCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCisjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKworc3RhdGljIGJvb2wgcGdwYV9pZGVudGlmaWVyc19j b3Zlcl90YXJnZXQoaW50IG5yaWRzLCBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJ ICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJCQkJCQkgIGJvb2wgKnJpZHNfdXNl ZCk7CisKKy8qCisgKiBHZXQgYSBDIHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVj aWZpZWQgYWR2aWNlIHRhZy4KKyAqLworY2hhciAqCitwZ3BhX2NzdHJpbmdfYWR2aWNlX3RhZyhw Z3BhX2FkdmljZV90YWdfdHlwZSBhZHZpY2VfdGFnKQoreworCXN3aXRjaCAoYWR2aWNlX3RhZykK Kwl7CisJCWNhc2UgUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTjoKKwkJCXJldHVybiAiQklUTUFQ X0hFQVBfU0NBTiI7CisJCWNhc2UgUEdQQV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJcmV0dXJuICJG T1JFSUdOX0pPSU4iOworCQljYXNlIFBHUEFfVEFHX0dBVEhFUjoKKwkJCXJldHVybiAiR0FUSEVS IjsKKwkJY2FzZSBQR1BBX1RBR19HQVRIRVJfTUVSR0U6CisJCQlyZXR1cm4gIkdBVEhFUl9NRVJH RSI7CisJCWNhc2UgUEdQQV9UQUdfSEFTSF9KT0lOOgorCQkJcmV0dXJuICJIQVNIX0pPSU4iOwor CQljYXNlIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjoKKwkJCXJldHVybiAiSU5ERVhfT05MWV9T Q0FOIjsKKwkJY2FzZSBQR1BBX1RBR19JTkRFWF9TQ0FOOgorCQkJcmV0dXJuICJJTkRFWF9TQ0FO IjsKKwkJY2FzZSBQR1BBX1RBR19KT0lOX09SREVSOgorCQkJcmV0dXJuICJKT0lOX09SREVSIjsK KwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJNRVJH RV9KT0lOX01BVEVSSUFMSVpFIjsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOOgor CQkJcmV0dXJuICJNRVJHRV9KT0lOX1BMQUlOIjsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9P UF9NQVRFUklBTElaRToKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUiOworCQlj YXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQlyZXR1cm4gIk5FU1RFRF9MT09Q X01FTU9JWkUiOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJcmV0dXJu ICJORVNURURfTE9PUF9QTEFJTiI7CisJCWNhc2UgUEdQQV9UQUdfTk9fR0FUSEVSOgorCQkJcmV0 dXJuICJOT19HQVRIRVIiOworCQljYXNlIFBHUEFfVEFHX1BBUlRJVElPTldJU0U6CisJCQlyZXR1 cm4gIlBBUlRJVElPTldJU0UiOworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU6 CisJCQlyZXR1cm4gIlNFTUlKT0lOX05PTl9VTklRVUUiOworCQljYXNlIFBHUEFfVEFHX1NFTUlK T0lOX1VOSVFVRToKKwkJCXJldHVybiAiU0VNSUpPSU5fVU5JUVVFIjsKKwkJY2FzZSBQR1BBX1RB R19TRVFfU0NBTjoKKwkJCXJldHVybiAiU0VRX1NDQU4iOworCQljYXNlIFBHUEFfVEFHX1RJRF9T Q0FOOgorCQkJcmV0dXJuICJUSURfU0NBTiI7CisJfQorCisJcGdfdW5yZWFjaGFibGUoKTsKKwly ZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIENvbnZlcnQgYW4gYWR2aWNlIHRhZywgZm9ybWF0dGVk IGFzIGEgc3RyaW5nIHRoYXQgaGFzIGFscmVhZHkgYmVlbgorICogZG93bmNhc2VkIGFzIGFwcHJv cHJpYXRlLCB0byBhIHBncGFfYWR2aWNlX3RhZ190eXBlLgorICoKKyAqIElmIHdlIHN1Y2NlZWQs IHNldCAqZmFpbCA9IGZhbHNlIGFuZCByZXR1cm4gdGhlIHJlc3VsdDsgaWYgd2UgZmFpbCwKKyAq IHNldCAqZmFpbCA9IHRydWUgYW5kIHJldXJuIGFuIGFyYml0cmFyeSB2YWx1ZS4KKyAqLworcGdw YV9hZHZpY2VfdGFnX3R5cGUKK3BncGFfcGFyc2VfYWR2aWNlX3RhZyhjb25zdCBjaGFyICp0YWcs IGJvb2wgKmZhaWwpCit7CisJKmZhaWwgPSBmYWxzZTsKKworCXN3aXRjaCAodGFnWzBdKQorCXsK KwkJY2FzZSAnYic6CisJCQlpZiAoc3RyY21wKHRhZywgImJpdG1hcF9oZWFwX3NjYW4iKSA9PSAw KQorCQkJCXJldHVybiBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOworCQkJYnJlYWs7CisJCWNh c2UgJ2YnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJmb3JlaWduX2pvaW4iKSA9PSAwKQorCQkJCXJl dHVybiBQR1BBX1RBR19GT1JFSUdOX0pPSU47CisJCQlicmVhazsKKwkJY2FzZSAnZyc6CisJCQlp ZiAoc3RyY21wKHRhZywgImdhdGhlciIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0dBVEhF UjsKKwkJCWlmIChzdHJjbXAodGFnLCAiZ2F0aGVyX21lcmdlIikgPT0gMCkKKwkJCQlyZXR1cm4g UEdQQV9UQUdfR0FUSEVSX01FUkdFOworCQkJYnJlYWs7CisJCWNhc2UgJ2gnOgorCQkJaWYgKHN0 cmNtcCh0YWcsICJoYXNoX2pvaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19IQVNIX0pP SU47CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJCQlpZiAoc3RyY21wKHRhZywgImluZGV4X3Nj YW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19JTkRFWF9TQ0FOOworCQkJaWYgKHN0cmNt cCh0YWcsICJpbmRleF9vbmx5X3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19JTkRF WF9PTkxZX1NDQU47CisJCQlicmVhazsKKwkJY2FzZSAnaic6CisJCQlpZiAoc3RyY21wKHRhZywg ImpvaW5fb3JkZXIiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19KT0lOX09SREVSOworCQkJ YnJlYWs7CisJCWNhc2UgJ20nOgorCQkJaWYgKHN0cmNtcCh0YWcsICJtZXJnZV9qb2luX21hdGVy aWFsaXplIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTEla RTsKKwkJCWlmIChzdHJjbXAodGFnLCAibWVyZ2Vfam9pbl9wbGFpbiIpID09IDApCisJCQkJcmV0 dXJuIFBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU47CisJCQlicmVhazsKKwkJY2FzZSAnbic6CisJ CQlpZiAoc3RyY21wKHRhZywgIm5lc3RlZF9sb29wX21hdGVyaWFsaXplIikgPT0gMCkKKwkJCQly ZXR1cm4gUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU7CisJCQlpZiAoc3RyY21wKHRh ZywgIm5lc3RlZF9sb29wX21lbW9pemUiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19ORVNU RURfTE9PUF9NRU1PSVpFOworCQkJaWYgKHN0cmNtcCh0YWcsICJuZXN0ZWRfbG9vcF9wbGFpbiIp ID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOworCQkJaWYgKHN0 cmNtcCh0YWcsICJub19nYXRoZXIiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19OT19HQVRI RVI7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQlpZiAoc3RyY21wKHRhZywgInBhcnRpdGlv bndpc2UiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19QQVJUSVRJT05XSVNFOworCQkJYnJl YWs7CisJCWNhc2UgJ3MnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJzZW1pam9pbl9ub25fdW5pcXVl IikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRTsKKwkJCWlm IChzdHJjbXAodGFnLCAic2VtaWpvaW5fdW5pcXVlIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9U QUdfU0VNSUpPSU5fVU5JUVVFOworCQkJaWYgKHN0cmNtcCh0YWcsICJzZXFfc2NhbiIpID09IDAp CisJCQkJcmV0dXJuIFBHUEFfVEFHX1NFUV9TQ0FOOworCQkJYnJlYWs7CisJCWNhc2UgJ3QnOgor CQkJaWYgKHN0cmNtcCh0YWcsICJ0aWRfc2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFH X1RJRF9TQ0FOOworCQkJYnJlYWs7CisJfQorCisJLyogZGlkbid0IHdvcmsgb3V0ICovCisJKmZh aWwgPSB0cnVlOworCisJLyogcmV0dXJuIGFuIGFyYml0cmFyeSB2YWx1ZSB0byB1bndpbmQgdGhl IGNhbGwgc3RhY2sgKi8KKwlyZXR1cm4gUEdQQV9UQUdfU0VRX1NDQU47Cit9CisKKy8qCisgKiBG b3JtYXQgYSBwZ3BhX2FkdmljZV90YXJnZXQgYXMgYSBzdHJpbmcgYW5kIGFwcGVuZCByZXN1bHQg dG8gYSBTdHJpbmdJbmZvLgorICovCit2b2lkCitwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KFN0 cmluZ0luZm8gc3RyLCBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlpZiAodGFyZ2V0 LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJYm9vbAkJZmlyc3QgPSB0 cnVlOworCQljaGFyCSAgICpkZWxpbXM7CisKKwkJaWYgKHRhcmdldC0+dHR5cGUgPT0gUEdQQV9U QVJHRVRfVU5PUkRFUkVEX0xJU1QpCisJCQlkZWxpbXMgPSAie30iOworCQllbHNlCisJCQlkZWxp bXMgPSAiKCkiOworCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0ciwgZGVsaW1zWzBdKTsKKwkJ Zm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hp bGRyZW4pCisJCXsKKwkJCWlmIChmaXJzdCkKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJZWxzZQor CQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0ciwgJyAnKTsKKwkJCXBncGFfZm9ybWF0X2Fkdmlj ZV90YXJnZXQoc3RyLCBjaGlsZF90YXJnZXQpOworCQl9CisJCWFwcGVuZFN0cmluZ0luZm9DaGFy KHN0ciwgZGVsaW1zWzFdKTsKKwl9CisJZWxzZQorCXsKKwkJY29uc3QgY2hhciAqcnRfaWRlbnRp ZmllcjsKKworCQlydF9pZGVudGlmaWVyID0gcGdwYV9pZGVudGlmaWVyX3N0cmluZygmdGFyZ2V0 LT5yaWQpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwgcnRfaWRlbnRpZmllcik7CisJ fQorfQorCisvKgorICogRm9ybWF0IGEgcGdwYV9pbmRleF90YXJnZXQgYXMgYSBzdHJpbmcgYW5k IGFwcGVuZCByZXN1bHQgdG8gYSBTdHJpbmdJbmZvLgorICovCit2b2lkCitwZ3BhX2Zvcm1hdF9p bmRleF90YXJnZXQoU3RyaW5nSW5mbyBzdHIsIHBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0KQor eworCWlmIChpdGFyZ2V0LT5pbmRuYW1lc3BhY2UgIT0gTlVMTCkKKwkJYXBwZW5kU3RyaW5nSW5m byhzdHIsICIlcy4iLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoaXRhcmdldC0+aW5kbmFtZXNw YWNlKSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhzdHIsIHF1b3RlX2lkZW50aWZpZXIoaXRh cmdldC0+aW5kbmFtZSkpOworfQorCisvKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgdHdvIHBncGFf aW5kZXhfdGFyZ2V0IG9iamVjdHMgYXJlIGV4YWN0bHkgaWRlbnRpY2FsLgorICovCitib29sCitw Z3BhX2luZGV4X3RhcmdldHNfZXF1YWwocGdwYV9pbmRleF90YXJnZXQgKmkxLCBwZ3BhX2luZGV4 X3RhcmdldCAqaTIpCit7CisJLyogaW5kbmFtZXNwYWNlIGNhbiBiZSBOVUxMLCBhbmQgdHdvIE5V TEwgdmFsdWVzIGFyZSBlcXVhbCAqLworCWlmICgoaTEtPmluZG5hbWVzcGFjZSAhPSBOVUxMIHx8 IGkyLT5pbmRuYW1lc3BhY2UgIT0gTlVMTCkgJiYKKwkJKGkxLT5pbmRuYW1lc3BhY2UgPT0gTlVM TCB8fCBpMi0+aW5kbmFtZXNwYWNlID09IE5VTEwgfHwKKwkJIHN0cmNtcChpMS0+aW5kbmFtZXNw YWNlLCBpMi0+aW5kbmFtZXNwYWNlKSAhPSAwKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChzdHJj bXAoaTEtPmluZG5hbWUsIGkyLT5pbmRuYW1lKSAhPSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwly ZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIgYW4gaWRlbnRpZmllciBtYXRj aGVzIGFuIGFueSBwYXJ0IG9mIGFuIGFkdmljZSB0YXJnZXQuCisgKi8KK2Jvb2wKK3BncGFfaWRl bnRpZmllcl9tYXRjaGVzX3RhcmdldChwZ3BhX2lkZW50aWZpZXIgKnJpZCwgcGdwYV9hZHZpY2Vf dGFyZ2V0ICp0YXJnZXQpCit7CisJLyogRm9yIG5vbi1pZGVudGlmaWVycywgY2hlY2sgYWxsIGRl c2NlbmRlbnRzLiAqLworCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJ RVIpCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwg dGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYgKHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3Rh cmdldChyaWQsIGNoaWxkX3RhcmdldCkpCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJcmV0dXJu IGZhbHNlOworCX0KKworCS8qIFN0cmFpZ2h0Zm9yd2FyZCBjb21wYXJpc29ucyBvZiBhbGlhcyBu YW1lIGFuZCBvY2NjdXJyZW5jZSBudW1iZXIuICovCisJaWYgKHN0cmNtcChyaWQtPmFsaWFzX25h bWUsIHRhcmdldC0+cmlkLmFsaWFzX25hbWUpICE9IDApCisJCXJldHVybiBmYWxzZTsKKwlpZiAo cmlkLT5vY2N1cnJlbmNlICE9IHRhcmdldC0+cmlkLm9jY3VycmVuY2UpCisJCXJldHVybiBmYWxz ZTsKKworCS8qCisJICogSWYgYSByZWxhdGlvbiBpZGVudGlmZXIgbWVudGlvbnMgYSBwYXJ0aXRp b24gbmFtZSwgaXQgc2hvdWxkIGFsc28KKwkgKiBzcGVjaWZ5IGEgcGFydGl0aW9uIHNjaGVtYS4g QnV0IHRoZSB0YXJnZXQgbWF5IGxlYXZlIHRoZSBzY2hlbWEgTlVMTCB0bworCSAqIG1hdGNoIGFu eXRoaW5nLgorCSAqLworCUFzc2VydChyaWQtPnBhcnRuc3AgIT0gTlVMTCB8fCByaWQtPnBhcnRy ZWwgPT0gTlVMTCk7CisJaWYgKHJpZC0+cGFydG5zcCAhPSBOVUxMICYmIHRhcmdldC0+cmlkLnBh cnRuc3AgIT0gTlVMTCAmJgorCQlzdHJjbXAocmlkLT5wYXJ0bnNwLCB0YXJnZXQtPnJpZC5wYXJ0 bnNwKSAhPSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIFRoZXNlIGZpZWxkcyBjYW4g YmUgTlVMTCBvbiBlaXRoZXIgc2lkZSwgYnV0IE5VTEwgb25seSBtYXRjaGVzIGFub3RoZXIKKwkg KiBOVUxMLgorCSAqLworCWlmICghc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlkLT5wYXJ0 cmVsLCB0YXJnZXQtPnJpZC5wYXJ0cmVsKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICghc3RyaW5n c19lcXVhbF9vcl9ib3RoX251bGwocmlkLT5wbGFuX25hbWUsIHRhcmdldC0+cmlkLnBsYW5fbmFt ZSkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogTWF0Y2gg aWRlbnRpZmllcnMgdG8gYWR2aWNlIHRhcmdldHMgYW5kIHJldHVybiBhbiBlbnVtIHZhbHVlIGlu ZGljYXRpbmcKKyAqIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgc2V0IG9mIGtleXMgYW5k IHRoZSBzZXQgb2YgdGFyZ2V0cy4KKyAqCisgKiBTZWUgdGhlIGNvbW1lbnRzIGZvciBwZ3BhX2l0 bV90eXBlLgorICovCitwZ3BhX2l0bV90eXBlCitwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3Rhcmdl dChpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfYWR2aWNl X3RhcmdldCAqdGFyZ2V0KQoreworCWJvb2wJCWFsbF9yaWRzX3VzZWQgPSB0cnVlOworCWJvb2wJ CWFueV9yaWRzX3VzZWQgPSBmYWxzZTsKKwlib29sCQlhbGxfdGFyZ2V0c191c2VkOworCWJvb2wJ ICAgKnJpZHNfdXNlZCA9IHBhbGxvYzBfYXJyYXkoYm9vbCwgbnJpZHMpOworCisJYWxsX3Rhcmdl dHNfdXNlZCA9CisJCXBncGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0KG5yaWRzLCByaWRzLCB0 YXJnZXQsIHJpZHNfdXNlZCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5yaWRzOyArK2kpCisJ eworCQlpZiAocmlkc191c2VkW2ldKQorCQkJYW55X3JpZHNfdXNlZCA9IHRydWU7CisJCWVsc2UK KwkJCWFsbF9yaWRzX3VzZWQgPSBmYWxzZTsKKwl9CisKKwlpZiAoYWxsX3JpZHNfdXNlZCkKKwl7 CisJCWlmIChhbGxfdGFyZ2V0c191c2VkKQorCQkJcmV0dXJuIFBHUEFfSVRNX0VRVUFMOworCQll bHNlCisJCQlyZXR1cm4gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUOworCX0KKwllbHNlCisJewor CQlpZiAoYWxsX3RhcmdldHNfdXNlZCkKKwkJCXJldHVybiBQR1BBX0lUTV9UQVJHRVRTX0FSRV9T VUJTRVQ7CisJCWVsc2UgaWYgKGFueV9yaWRzX3VzZWQpCisJCQlyZXR1cm4gUEdQQV9JVE1fSU5U RVJTRUNUSU5HOworCQllbHNlCisJCQlyZXR1cm4gUEdQQV9JVE1fRElTSk9JTlQ7CisJfQorfQor CisvKgorICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IHRhcmdldCBvciBzdWItdGFyZ2V0IGlzIG1h dGNoZWQgYnkgYXQgbGVhc3Qgb25lCisgKiBpZGVudGlmaWVyLCBhbmQgb3RoZXJ3aXNlIGZhbHNl LgorICoKKyAqIEFsc28gc2V0cyByaWRzX3VzZWRbaV0gPSB0cnVlIGZvciBlYWNoIGlkZW5pZmll ciB0aGF0IG1hdGNoZXMgYXQgbGVhc3Qgb25lCisgKiB0YXJnZXQuCisgKi8KK3N0YXRpYyBib29s CitwZ3BhX2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmll ciAqcmlkcywKKwkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LCBib29sICpyaWRz X3VzZWQpCit7CisJYm9vbAkJcmVzdWx0ID0gZmFsc2U7CisKKwlpZiAodGFyZ2V0LT50dHlwZSAh PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJcmVzdWx0ID0gdHJ1ZTsKKworCQlmb3Jl YWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJl bikKKwkJeworCQkJaWYgKCFwZ3BhX2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChucmlkcywgcmlk cywgY2hpbGRfdGFyZ2V0LAorCQkJCQkJCQkJCQkgICByaWRzX3VzZWQpKQorCQkJCXJlc3VsdCA9 IGZhbHNlOworCQl9CisJfQorCWVsc2UKKwl7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbnJpZHM7 ICsraSkKKwkJeworCQkJaWYgKHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldCgmcmlkc1tp XSwgdGFyZ2V0KSkKKwkJCXsKKwkJCQlyaWRzX3VzZWRbaV0gPSB0cnVlOworCQkJCXJlc3VsdCA9 IHRydWU7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX2FzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZDNm OGQ1OGE3MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9h c3QuaApAQCAtMCwwICsxLDE4NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9h c3QuaAorICoJICBhYnN0cmFjdCBzeW50YXggdHJlZXMgZm9yIHBsYW4gYWR2aWNlLCBwbHVzIHBh cnNlci9zY2FubmVyIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9hc3QuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVm IFBHUEFfQVNUX0gKKyNkZWZpbmUgUEdQQV9BU1RfSAorCisjaW5jbHVkZSAicGdwYV9pZGVudGlm aWVyLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCisKKy8qCisgKiBBZHZpY2UgaXRl bXMgZ2VuZXJhbGx5IHRha2UgdGhlIGZvcm0gU09NRV9UQUcoaXRlbSBbLi4uXSksIHdoZXJlIGFu IGl0ZW0KKyAqIGNhbiB0YWtlIHZhcmlvdXMgZm9ybXMuIFRoZSBzaW1wbGVzdCBjYXNlIGlzIGEg cmVsYXRpb24gaWRlbnRpZmllciwgYnV0CisgKiBzb21lIHRhZ3MgYWxsb3cgc3VibGlzdHMsIGFu ZCBKT0lOX09SREVSKCkgYWxsb3dzIGJvdGggb3JkZXJlZCBhbmQgdW5vcmRlcmVkCisgKiBzdWJs aXN0cy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJUEdQQV9UQVJHRVRfSURFTlRJRklFUiwJCS8q IHJlbGF0aW9uIGlkZW50aWZpZXIgKi8KKwlQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QsCS8qIChp dGVtIC4uLikgKi8KKwlQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVAkvKiB7aXRlbSAuLi59ICov Cit9IHBncGFfdGFyZ2V0X3R5cGU7CisKKy8qCisgKiBBbiBpbmRleCBzcGVjaWZpY2F0aW9uLgor ICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2luZGV4X3RhcmdldAoreworCS8qIEluZGV4IHNjaGVt YSBhbmQgbmFtZSAqLworCWNoYXIJICAgKmluZG5hbWVzcGFjZTsKKwljaGFyCSAgICppbmRuYW1l OworfSBwZ3BhX2luZGV4X3RhcmdldDsKKworLyoKKyAqIEEgc2luZ2xlIGl0ZW0gYWJvdXQgd2hp Y2ggYWR2aWNlIGlzIGJlaW5nIGdpdmVuLCB3aGljaCBjb3VsZCBiZSBlaXRoZXIKKyAqIGEgcmVs YXRpb24gaWRlbnRpZmllciB0aGF0IHdlIHdhbnQgdG8gYnJlYWsgb3V0IGludG8gaXRzIGNvbnN0 aXR1ZW50IGZpZWxkcywKKyAqIG9yIGEgc3VibGlzdCBvZiBzb21lIGtpbmQuCisgKi8KK3R5cGVk ZWYgc3RydWN0IHBncGFfYWR2aWNlX3RhcmdldAoreworCXBncGFfdGFyZ2V0X3R5cGUgdHR5cGU7 CisKKwkvKgorCSAqIFRoaXMgZmllbGQgaXMgbWVhbmluZ2Z1bCB3aGVuIHR0eXBlIGlzIFBHUEFf VEFSR0VUX0lERU5USUZJRVIuCisJICoKKwkgKiBBbGwgaWRlbnRpZmllcnMgbXVzdCBoYXZlIGFu IGFsaWFzIG5hbWUgYW5kIGFuIG9jY3VycmVuY2UgbnVtYmVyOyB0aGUKKwkgKiByZW1haW5pbmcg ZmllbGRzIGNhbiBiZSBOVUxMLiBOb3RlIHRoYXQgaXQncyBwb3NzaWJsZSB0byBzcGVjaWZ5IGEK KwkgKiBwYXJ0aXRpb24gbmFtZSB3aXRob3V0IGEgcGFydGl0aW9uIHNjaGVtYSwgYnV0IG5vdCB0 aGUgcmV2ZXJzZS4KKwkgKi8KKwlwZ3BhX2lkZW50aWZpZXIgcmlkOworCisJLyoKKwkgKiBUaGlz IGZpZWxkIGlzIHNldCB3aGVuIHR0eXBlIGlzIFBQR0FfVEFSR0VUX0lERU5USUZJRVIgYW5kIHRo ZSBhZHZpY2UKKwkgKiB0YWcgaXMgUEdQQV9UQUdfSU5ERVhfU0NBTiBvciBQR1BBX1RBR19JTkRF WF9PTkxZX1NDQU4uCisJICovCisJcGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQ7CisKKwkvKgor 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 ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmY4ZjUzZTdjZjAKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jCkBAIC0wLDAg KzEsNDgxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 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 c3VicXVlcnksIG5vdCB0aGUgZmluYWwgZmxhdHRlbmVkIHJhbmdlIHRhYmxlLgorICoKKyAqIE5C OiBBbGwgb2YgdGhpcyBjb2RlIG11c3QgdXNlIHJ0X2ZldGNoKCksIG5vdCBwbGFubmVyX3J0X2Zl dGNoKCkhCisgKiBKb2luIHJlbW92YWwgYW5kIHNlbGYtam9pbiBlbGltaW5hdGlvbiByZW1vdmUg cmVscyBmcm9tIHRoZSBhcnJheXMKKyAqIHRoYXQgcGxhbm5lcl9ydF9mZXRjaCgpIHVzZXM7IHVz aW5nIHJ0X2ZldGNoKCkgaXMgbmVjZXNzYXJ5IHRvIGdldAorICogc3RhYmxlIHJlc3VsdHMuCisg KgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmll ci5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgi CisKKyNpbmNsdWRlICJwZ3BhX2lkZW50aWZpZXIuaCIKKworI2luY2x1ZGUgInBhcnNlci9wYXJz ZXRyZWUuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2xz eXNjYWNoZS5oIgorCitzdGF0aWMgSW5kZXggKnBncGFfY3JlYXRlX3RvcF9ydGlfbWFwKEluZGV4 IHJ0YWJsZV9sZW5ndGgsIExpc3QgKnJ0YWJsZSwKKwkJCQkJCQkJCSAgTGlzdCAqYXBwaW5mb3Mp Oworc3RhdGljIGludAlwZ3BhX29jY3VycmVuY2VfbnVtYmVyKExpc3QgKnJ0YWJsZSwgSW5kZXgg KnRvcF9ydGlfbWFwLAorCQkJCQkJCQkgICBTdWJQbGFuUlRJbmZvICpydGluZm8sIEluZGV4IHJ0 aSk7CisKKy8qCisgKiBDcmVhdGUgYSByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGZyb20gc2NyYXRj aC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgY2FsbGVyIHRvIGRvIGFsbCB0aGUg aGVhdnkgbGlmdGluZywgc28gaXQncworICogZ2VuZXJhbGx5IGJldHRlciB0byB1c2Ugb25lIG9m IHRoZSBmdW5jdGlvbnMgYmVsb3cgaW5zdGVhZC4KKyAqCisgKiBTZWUgdGhlIGZpbGUgaGVhZGVy IGNvbW1lbnRzIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIGZvcm1hdCBvZiBhbgorICogaWRlbnRp Zmllci4KKyAqLworY29uc3QgY2hhciAqCitwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKGNvbnN0IHBn cGFfaWRlbnRpZmllciAqcmlkKQoreworCWNvbnN0IGNoYXIgKnJlc3VsdDsKKworCUFzc2VydChy aWQtPmFsaWFzX25hbWUgIT0gTlVMTCk7CisJcmVzdWx0ID0gcXVvdGVfaWRlbnRpZmllcihyaWQt PmFsaWFzX25hbWUpOworCisJQXNzZXJ0KHJpZC0+b2NjdXJyZW5jZSA+PSAwKTsKKwlpZiAocmlk LT5vY2N1cnJlbmNlID4gMSkKKwkJcmVzdWx0ID0gcHNwcmludGYoIiVzIyVkIiwgcmVzdWx0LCBy aWQtPm9jY3VycmVuY2UpOworCisJaWYgKHJpZC0+cGFydHJlbCAhPSBOVUxMKQorCXsKKwkJaWYg KHJpZC0+cGFydG5zcCA9PSBOVUxMKQorCQkJcmVzdWx0ID0gcHNwcmludGYoIiVzLyVzIiwgcmVz dWx0LAorCQkJCQkJCSAgcXVvdGVfaWRlbnRpZmllcihyaWQtPnBhcnRyZWwpKTsKKwkJZWxzZQor CQkJcmVzdWx0ID0gcHNwcmludGYoIiVzLyVzLiVzIiwgcmVzdWx0LAorCQkJCQkJCSAgcXVvdGVf aWRlbnRpZmllcihyaWQtPnBhcnRuc3ApLAorCQkJCQkJCSAgcXVvdGVfaWRlbnRpZmllcihyaWQt PnBhcnRyZWwpKTsKKwl9CisKKwlpZiAocmlkLT5wbGFuX25hbWUgIT0gTlVMTCkKKwkJcmVzdWx0 ID0gcHNwcmludGYoIiVzQCVzIiwgcmVzdWx0LCBxdW90ZV9pZGVudGlmaWVyKHJpZC0+cGxhbl9u YW1lKSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ29tcHV0ZSBhIHJlbGF0aW9u IGlkZW50aWZpZXIgZm9yIGEgcGFydGljdWxhciBSVEkuCisgKgorICogVGhlIGNhbGxlciBwcm92 aWRlcyByb290IGFuZCBydGksIGFuZCBnZXRzIHRoZSBuZWNlc3NhcnkgZGV0YWlscyBiYWNrIHZp YQorICogdGhlIHJlbWFpbmluZyBwYXJhbWV0ZXJzLgorICovCit2b2lkCitwZ3BhX2NvbXB1dGVf aWRlbnRpZmllcl9ieV9ydGkoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJ0aSwKKwkJCQkJCQkg ICBwZ3BhX2lkZW50aWZpZXIgKnJpZCkKK3sKKwlJbmRleAkJdG9wX3J0aSA9IHJ0aTsKKwlpbnQJ CQlvY2N1cnJlbmNlID0gMTsKKwlSYW5nZVRibEVudHJ5ICpydGU7CisJUmFuZ2VUYmxFbnRyeSAq dG9wX3J0ZTsKKwljaGFyCSAgICpwYXJ0bnNwID0gTlVMTDsKKwljaGFyCSAgICpwYXJ0cmVsID0g TlVMTDsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIGNoaWxkIFJURSwgZmluZCB0aGUgdG9wbW9z dCBwYXJlbnQgdGhhdCBpcyBzdGlsbCBvZiB0eXBlCisJICogUlRFX1JFTEFUSU9OLiBXZSBkbyB0 aGlzIGJlY2F1c2Ugd2UgaWRlbnRpZnkgY2hpbGRyZW4gb2YgcGFydGl0aW9uZWQKKwkgKiB0YWJs ZXMgYnkgdGhlIG5hbWUgb2YgdGhlIGNoaWxkIHRhYmxlLCBidXQgc3VicXVlcmllcyBjYW4gYWxz byBoYXZlCisJICogY2hpbGQgcmVscyBhbmQgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aG9zZSBoZXJl LgorCSAqLworCWZvciAoOzspCisJeworCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvOworCQlSYW5n ZVRibEVudHJ5ICpwYXJlbnRfcnRlOworCisJCS8qIGFwcGVuZF9yZWxfYXJyYXkgY2FuIGJlIE5V TEwgaWYgdGhlcmUgYXJlIG5vIGNoaWxkcmVuICovCisJCWlmIChyb290LT5hcHBlbmRfcmVsX2Fy cmF5ID09IE5VTEwgfHwKKwkJCShhcHBpbmZvID0gcm9vdC0+YXBwZW5kX3JlbF9hcnJheVt0b3Bf cnRpXSkgPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCXBhcmVudF9ydGUgPSBydF9mZXRjaChhcHBp bmZvLT5wYXJlbnRfcmVsaWQsIHJvb3QtPnBhcnNlLT5ydGFibGUpOworCQlpZiAocGFyZW50X3J0 ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQlicmVhazsKKworCQl0b3BfcnRpID0gYXBw aW5mby0+cGFyZW50X3JlbGlkOworCX0KKworCS8qIEdldCB0aGUgcmFuZ2UgdGFibGUgZW50cmll cyBmb3IgdGhlIFJUSSBhbmQgdG9wIFJUSS4gKi8KKwlydGUgPSBydF9mZXRjaChydGksIHJvb3Qt PnBhcnNlLT5ydGFibGUpOworCXRvcF9ydGUgPSBydF9mZXRjaCh0b3BfcnRpLCByb290LT5wYXJz ZS0+cnRhYmxlKTsKKwlBc3NlcnQocnRlLT5ydGVraW5kICE9IFJURV9KT0lOKTsKKwlBc3NlcnQo dG9wX3J0ZS0+cnRla2luZCAhPSBSVEVfSk9JTik7CisKKwkvKiBXb3JrIG91dCB0aGUgY29ycmVj dCBvY2N1cnJlbmNlIG51bWJlci4gKi8KKwlmb3IgKEluZGV4IHByaW9yX3J0aSA9IDE7IHByaW9y X3J0aSA8IHRvcF9ydGk7ICsrcHJpb3JfcnRpKQorCXsKKwkJUmFuZ2VUYmxFbnRyeSAqcHJpb3Jf cnRlOworCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMg YSBjaGlsZCByZWwgb2YgYSBwYXJlbnQgdGhhdCBpcyBhIHJlbGF0aW9uLCBza2lwIGl0LgorCQkg KgorCQkgKiBTdWNoIHJhbmdlIHRhYmxlIGVudHJpZXMgYXJlIGRpc2FtYmlndWF0ZWQgYnkgbWVu dGlvbmluZyB0aGUgc2NoZW1hCisJCSAqIGFuZCBuYW1lIG9mIHRoZSB0YWJsZSwgbm90IGJ5IGNv dW50aW5nIHRoZW0gYXMgc2VwYXJhdGUgb2NjdXJyZW5jZXMKKwkJICogb2YgdGhlIHNhbWUgdGFi bGUuCisJCSAqCisJCSAqIE5COiBhcHBlbmRfcmVsX2FycmF5IGNhbiBiZSBOVUxMIGlmIHRoZXJl IGFyZSBubyBjaGlsZHJlbgorCQkgKi8KKwkJaWYgKHJvb3QtPmFwcGVuZF9yZWxfYXJyYXkgIT0g TlVMTCAmJgorCQkJKGFwcGluZm8gPSByb290LT5hcHBlbmRfcmVsX2FycmF5W3ByaW9yX3J0aV0p ICE9IE5VTEwpCisJCXsKKwkJCVJhbmdlVGJsRW50cnkgKnBhcmVudF9ydGU7CisKKwkJCXBhcmVu dF9ydGUgPSBydF9mZXRjaChhcHBpbmZvLT5wYXJlbnRfcmVsaWQsIHJvb3QtPnBhcnNlLT5ydGFi bGUpOworCQkJaWYgKHBhcmVudF9ydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OKQorCQkJCWNv bnRpbnVlOworCQl9CisKKwkJLyogU2tpcCBOVUxMIGVudHJpZXMgYW5kIGpvaW5zLiAqLworCQlw cmlvcl9ydGUgPSBydF9mZXRjaChwcmlvcl9ydGksIHJvb3QtPnBhcnNlLT5ydGFibGUpOworCQlp ZiAocHJpb3JfcnRlID09IE5VTEwgfHwgcHJpb3JfcnRlLT5ydGVraW5kID09IFJURV9KT0lOKQor CQkJY29udGludWU7CisKKwkJLyogU2tpcCBpZiB0aGUgYWxpYXMgbmFtZSBkaWZmZXJzLiAqLwor CQlpZiAoc3RyY21wKHByaW9yX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lLCBydGUtPmVyZWYtPmFsaWFz bmFtZSkgIT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIExvb2tzIGxpa2UgYSB0cnVlIGR1cGxp Y2F0ZS4gKi8KKwkJKytvY2N1cnJlbmNlOworCX0KKworCS8qIElmIHRoaXMgaXMgYSBjaGlsZCB0 YWJsZSwgZ2V0IHRoZSBzY2hlbWEgYW5kIHJlbGF0aW9uIG5hbWVzLiAqLworCWlmIChydGkgIT0g dG9wX3J0aSkKKwl7CisJCXBhcnRuc3AgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChnZXRf cmVsX25hbWVzcGFjZShydGUtPnJlbGlkKSk7CisJCXBhcnRyZWwgPSBnZXRfcmVsX25hbWUocnRl LT5yZWxpZCk7CisJfQorCisJLyogT0ssIHdlIGhhdmUgYWxsIHRoZSBhbnN3ZXJzIHdlIG5lZWQu IFJldHVybiB0aGVtIHRvIHRoZSBjYWxsZXIuICovCisJcmlkLT5hbGlhc19uYW1lID0gdG9wX3J0 ZS0+ZXJlZi0+YWxpYXNuYW1lOworCXJpZC0+b2NjdXJyZW5jZSA9IG9jY3VycmVuY2U7CisJcmlk LT5wYXJ0bnNwID0gcGFydG5zcDsKKwlyaWQtPnBhcnRyZWwgPSBwYXJ0cmVsOworCXJpZC0+cGxh bl9uYW1lID0gcm9vdC0+cGxhbl9uYW1lOworfQorCisvKgorICogQ29tcHV0ZSBhIHJlbGF0aW9u IGlkZW50aWZpZXIgZm9yIGEgc2V0IG9mIFJUSXMsIGV4Y2VwdCBmb3IgYW55IFJURV9KT0lOCisg KiBSVElzIHRoYXQgbWF5IGJlIHByZXNlbnQuCisgKgorICogUlRFX0pPSU4gZW50cmllcyBhcmUg ZXhjbHVkZWQgYmVjYXVzZSB0aGV5IGNhbm5vdCBiZSBtZW50aW9uZWQgYnkgcGxhbgorICogYWR2 aWNlLgorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRo YXQgdGhlIHRrZXlzIGFycmF5IGlzIGxhcmdlCisgKiBlbm91Z2ggdG8gc3RvcmUgdGhlIHJlc3Vs dHMuCisgKgorICogVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGlkZW50aWZpZXJz IGNvbXB1dGVkLgorICovCitpbnQKK3BncGFfY29tcHV0ZV9pZGVudGlmaWVyc19ieV9yZWxpZHMo UGxhbm5lckluZm8gKnJvb3QsIEJpdG1hcHNldCAqcmVsaWRzLAorCQkJCQkJCQkgICBwZ3BhX2lk ZW50aWZpZXIgKnJpZHMpCit7CisJaW50CQkJY291bnQgPSAwOworCWludAkJCXJ0aSA9IC0xOwor CisJd2hpbGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAwKQorCXsK KwkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0Y2gocnRpLCByb290LT5wYXJzZS0+cnRhYmxl KTsKKworCQlpZiAocnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7CisJCXBn cGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShyb290LCBydGksICZyaWRzW2NvdW50KytdKTsK Kwl9CisKKwlBc3NlcnQoY291bnQgPiAwKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBD cmVhdGUgYW4gYXJyYXkgb2YgcmFuZ2UgdGFibGUgaWRlbnRpZmllcnMgZm9yIGFsbCB0aGUgbm9u LU5VTEwsCisgKiBub24tUlRFX0pPSU4gZW50cmllcyBpbiB0aGUgUGxhbm5lZFN0bXQncyByYW5n ZSB0YWJsZS4KKyAqLworcGdwYV9pZGVudGlmaWVyICoKK3BncGFfY3JlYXRlX2lkZW50aWZpZXJz X2Zvcl9wbGFubmVkX3N0bXQoUGxhbm5lZFN0bXQgKnBzdG10KQoreworCUluZGV4CQlydGFibGVf bGVuZ3RoID0gbGlzdF9sZW5ndGgocHN0bXQtPnJ0YWJsZSk7CisJcGdwYV9pZGVudGlmaWVyICpy ZXN1bHQgPSBwYWxsb2MwX2FycmF5KHBncGFfaWRlbnRpZmllciwgcnRhYmxlX2xlbmd0aCk7CisJ SW5kZXgJICAgKnRvcF9ydGlfbWFwOworCWludAkJCXJ0aW5mb2luZGV4ID0gMDsKKwlTdWJQbGFu UlRJbmZvICpydGluZm8gPSBOVUxMOworCVN1YlBsYW5SVEluZm8gKm5leHRydGluZm8gPSBOVUxM OworCisJLyoKKwkgKiBBY2NvdW50IGZvciByZWxhdGlvbnMgYWRkZGVkIGJ5IGluaGVyaXRhbmNl IGV4cGFuc2lvbiBvZiBwYXJ0aXRpb25lZAorCSAqIHRhYmxlcy4KKwkgKi8KKwl0b3BfcnRpX21h cCA9IHBncGFfY3JlYXRlX3RvcF9ydGlfbWFwKHJ0YWJsZV9sZW5ndGgsIHBzdG10LT5ydGFibGUs CisJCQkJCQkJCQkJICBwc3RtdC0+YXBwZW5kUmVsYXRpb25zKTsKKworCS8qCisJICogV2hlbiB3 ZSBiZWdpbiBpdGVyYXRpbmcsIHdlJ3JlIHByb2Nlc3NpbmcgdGhlIHBvcnRpb24gb2YgdGhlIHJh bmdlCisJICogdGFibGUgdGhhdCBvcmlnaW5hdGVkIGZyb20gdGhlIHRvcC1sZXZlbCBQbGFubmVy SW5mbywgc28gc3VicnRpbmZvIGlzCisJICogTlVMTC4gTGF0ZXIsIHN1YnJ0aW5mbyB3aWxsIGJl IHRoZSBTdWJQbGFuUlRJbmZvIGZvciB0aGUgc3VicXVlcnkgd2hvc2UKKwkgKiBwb3J0aW9uIG9m IHRoZSByYW5nZSB0YWJsZSB3ZSBhcmUgcHJvY2Vzc2luZy4gbmV4dHJ0aW5mbyBpcyBhbHdheXMg dGhlCisJICogU3ViUGxhblJUSW5mbyB0aGF0IGZvbGxvd3MgdGhlIGN1cnJlbnQgb25lLCBpZiBh bnksIHNvIHdoZW4gd2UncmUKKwkgKiBwcm9jZXNzaW5nIHRoZSB0b3AtbGV2ZWwgcXVlcnkncyBw b3J0aW9uIG9mIHRoZSByYW5nZSB0YWJsZSwgdGhlIG5leHQKKwkgKiBTdWJQbGFuUlRJbmZvIGlz IHRoZSB2ZXJ5IGZpcnN0IG9uZS4KKwkgKi8KKwlpZiAocHN0bXQtPnN1YnJ0aW5mb3MgIT0gTlVM TCkKKwkJbmV4dHJ0aW5mbyA9IGxpbml0aWFsKHBzdG10LT5zdWJydGluZm9zKTsKKworCS8qIE1h aW4gbG9vcCBvdmVyIHRoZSByYW5nZSB0YWJsZS4gKi8KKwlmb3IgKEluZGV4IHJ0aSA9IDE7IHJ0 aSA8PSBydGFibGVfbGVuZ3RoOyBydGkrKykKKwl7CisJCWNvbnN0IGNoYXIgKnBsYW5fbmFtZTsK KwkJSW5kZXgJCXRvcF9ydGk7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKwkJUmFuZ2VUYmxFbnRy eSAqdG9wX3J0ZTsKKwkJY2hhcgkgICAqcGFydG5zcCA9IE5VTEw7CisJCWNoYXIJICAgKnBhcnRy ZWwgPSBOVUxMOworCQlpbnQJCQlvY2N1cnJlbmNlOworCQlwZ3BhX2lkZW50aWZpZXIgKnJpZDsK KworCQkvKgorCQkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IFN1YlBsYW5SVEluZm8sIGlmIGl0J3Mg dGltZSB0byBkbyB0aGF0LgorCQkgKgorCQkgKiBUaGlzIGxvb3AgcHJvYmFibHkgc2hvdWxkbid0 IGV2ZXIgaXRlcmF0ZSBtb3JlIHRoYW4gb25jZSwgYmVjYXVzZQorCQkgKiB0aGF0IHdvdWxkIGlt cGx5IHRoYXQgYSBzdWJxdWVyeSB3YXMgcGxhbm5lZCBidXQgYWRkZWQgbm90aGluZyB0bworCQkg KiB0aGUgcmFuZ2UgdGFibGU7IGJ1dCBsZXQncyBiZSBkZWZlbnNpdmUgYW5kIGFzc3VtZSBpdCBj YW4gaGFwcGVuLgorCQkgKi8KKwkJd2hpbGUgKG5leHRydGluZm8gIT0gTlVMTCAmJiBydGkgPiBu ZXh0cnRpbmZvLT5ydG9mZnNldCkKKwkJeworCQkJcnRpbmZvID0gbmV4dHJ0aW5mbzsKKwkJCWlm ICgrK3J0aW5mb2luZGV4ID49IGxpc3RfbGVuZ3RoKHBzdG10LT5zdWJydGluZm9zKSkKKwkJCQlu ZXh0cnRpbmZvID0gTlVMTDsKKwkJCWVsc2UKKwkJCQluZXh0cnRpbmZvID0gbGlzdF9udGgocHN0 bXQtPnN1YnJ0aW5mb3MsIHJ0aW5mb2luZGV4KTsKKwkJfQorCisJCS8qIEZldGNoIHRoZSByYW5n ZSB0YWJsZSBlbnRyeSwgaWYgYW55LiAqLworCQlydGUgPSBydF9mZXRjaChydGksIHBzdG10LT5y dGFibGUpOworCisJCS8qCisJCSAqIFdlIGNhbid0IGFuZCBkb24ndCBuZWVkIHRvIGlkZW50aWZ5 IG51bGwgZW50cmllcywgYW5kIHdlIGRvbid0IHdhbnQKKwkJICogdG8gaWRlbnRpZnkgam9pbiBl bnRyaWVzLgorCQkgKi8KKwkJaWYgKHJ0ZSA9PSBOVUxMIHx8IHJ0ZS0+cnRla2luZCA9PSBSVEVf Sk9JTikKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgbm90IGEgcmVsYXRp b24gYWRkZWQgYnkgcGFydGl0aW9uZWQgdGFibGUgZXhwYW5zaW9uLAorCQkgKiB0aGVuIHRoZSB0 b3AgUlRJL1JURSBhcmUganVzdCB0aGUgc2FtZSBhcyB0aGlzIFJUSS9SVEUuIE90aGVyd2lzZSwK KwkJICogd2UgbmVlZCB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSB0b3AgUlRJL1JURSwgYW5kIG11 c3QgYWxzbyBmZXRjaAorCQkgKiB0aGUgcGFydGl0aW9uIHNjaGVtYSBhbmQgbmFtZS4KKwkJICov CisJCXRvcF9ydGkgPSB0b3BfcnRpX21hcFtydGkgLSAxXTsKKwkJaWYgKHJ0aSA9PSB0b3BfcnRp KQorCQkJdG9wX3J0ZSA9IHJ0ZTsKKwkJZWxzZQorCQl7CisJCQl0b3BfcnRlID0gcnRfZmV0Y2go dG9wX3J0aSwgcHN0bXQtPnJ0YWJsZSk7CisJCQlwYXJ0bnNwID0KKwkJCQlnZXRfbmFtZXNwYWNl X25hbWVfb3JfdGVtcChnZXRfcmVsX25hbWVzcGFjZShydGUtPnJlbGlkKSk7CisJCQlwYXJ0cmVs ID0gZ2V0X3JlbF9uYW1lKHJ0ZS0+cmVsaWQpOworCQl9CisKKwkJLyogQ29tcHV0ZSB0aGUgY29y cmVjdCBvY2N1cnJlbmNlIG51bWJlci4gKi8KKwkJb2NjdXJyZW5jZSA9IHBncGFfb2NjdXJyZW5j ZV9udW1iZXIocHN0bXQtPnJ0YWJsZSwgdG9wX3J0aV9tYXAsCisJCQkJCQkJCQkJCXJ0aW5mbywg dG9wX3J0aSk7CisKKwkJLyogR2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHBsYW4gKE5VTEwg Zm9yIHRvcGxldmVsIHF1ZXJ5KS4gKi8KKwkJcGxhbl9uYW1lID0gcnRpbmZvID09IE5VTEwgPyBO VUxMIDogcnRpbmZvLT5wbGFuX25hbWU7CisKKwkJLyogU2F2ZSBhbGwgdGhlIGRldGFpbHMgd2Un dmUgZGVyaXZlZC4gKi8KKwkJcmlkID0gJnJlc3VsdFtydGkgLSAxXTsKKwkJcmlkLT5hbGlhc19u YW1lID0gdG9wX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lOworCQlyaWQtPm9jY3VycmVuY2UgPSBvY2N1 cnJlbmNlOworCQlyaWQtPnBhcnRuc3AgPSBwYXJ0bnNwOworCQlyaWQtPnBhcnRyZWwgPSBwYXJ0 cmVsOworCQlyaWQtPnBsYW5fbmFtZSA9IHBsYW5fbmFtZTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0 OworfQorCisvKgorICogU2VhcmNoIGZvciBhIHBncGFfaWRlbnRpZmllciBpbiB0aGUgYXJyYXkg b2YgaWRlbnRpZmllcnMgY29tcHV0ZWQgZm9yIHRoZQorICogcmFuZ2UgdGFibGUuIElmIGV4YWN0 bHkgb25lIG1hdGNoIGlzIGZvdW5kLCByZXR1cm4gdGhlIG1hdGNoaW5nIFJUSTsgZWxzZQorICog cmV0dXJuIDAuCisgKi8KK0luZGV4CitwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmllcihp bnQgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmll cnMsCisJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJpZCkKK3sKKwlJbmRleAkJcmVzdWx0ID0g MDsKKworCWZvciAoSW5kZXggcnRpID0gMTsgcnRpIDw9IHJ0YWJsZV9sZW5ndGg7ICsrcnRpKQor CXsKKwkJcGdwYV9pZGVudGlmaWVyICpydGlfcmlkID0gJnJ0X2lkZW50aWZpZXJzW3J0aSAtIDFd OworCisJCS8qIElmIHRoZXJlJ3Mgbm8gaWRlbnRpZmllciBmb3IgdGhpcyBSVEksIHNraXAgaXQu ICovCisJCWlmIChydGlfcmlkLT5hbGlhc19uYW1lID09IE5VTEwpCisJCQljb250aW51ZTsKKwor CQkvKgorCQkgKiBJZiBpdCBtYXRjaGVzLCByZXR1cm4gdGhpcyBSVEkuIEFzIHVzdWFsLCBhbiBv bWl0dGVkIHBhcnRpdGlvbgorCQkgKiBzY2hlbWEgbWF0Y2hlcyBhbnl0aGluZywgYnV0IHBhcnRp dGlvbiBhbmQgcGxhbiBuYW1lcyBtdXN0IGVpdGhlcgorCQkgKiBtYXRjaCBleGFjdGx5IG9yIGJl IG9taXR0ZWQgb24gYm90aCBzaWRlcy4KKwkJICovCisJCWlmIChzdHJjbXAocmlkLT5hbGlhc19u YW1lLCBydGlfcmlkLT5hbGlhc19uYW1lKSA9PSAwICYmCisJCQlyaWQtPm9jY3VycmVuY2UgPT0g cnRpX3JpZC0+b2NjdXJyZW5jZSAmJgorCQkJKHJpZC0+cGFydG5zcCA9PSBOVUxMIHx8IHJ0aV9y aWQtPnBhcnRuc3AgPT0gTlVMTCB8fAorCQkJIHN0cmNtcChyaWQtPnBhcnRuc3AsIHJ0aV9yaWQt PnBhcnRuc3ApID09IDApICYmCisJCQlzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWQtPnBh cnRyZWwsIHJ0aV9yaWQtPnBhcnRyZWwpICYmCisJCQlzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVs bChyaWQtPnBsYW5fbmFtZSwgcnRpX3JpZC0+cGxhbl9uYW1lKSkKKwkJeworCQkJaWYgKHJlc3Vs dCAhPSAwKQorCQkJeworCQkJCS8qIE11bHRpcGxlIG1hdGNoZXMgd2VyZSBmb3VuZC4gKi8KKwkJ CQlyZXR1cm4gMDsKKwkJCX0KKwkJCXJlc3VsdCA9IHJ0aTsKKwkJfQorCX0KKworCXJldHVybiBy ZXN1bHQ7Cit9CisKKy8qCisgKiBCdWlsZCBhIG1hcHBpbmcgZnJvbSBlYWNoIFJUSSB0byB0aGUg UlRJIHdob3NlIGFsaWFzX25hbWUgd2lsbCBiZSB1c2VkIHRvCisgKiBjb25zdHJ1Y3QgdGhlIHJh bmdlIHRhYmxlIGlkZW50aWZpZXIuCisgKgorICogRm9yIGNoaWxkIHJlbGF0aW9ucywgdGhpcyBp cyB0aGUgdG9wbW9zdCBwYXJlbnQgdGhhdCBpcyBzdGlsbCBvZiB0eXBlCisgKiBSVEVfUkVMQVRJ T04uIEZvciBvdGhlciByZWxhdGlvbnMsIGl0J3MganVzdCB0aGUgb3JpZ2luYWwgUlRJLgorICoK KyAqIFNpbmNlIHdlJ3JlIGV2ZW50dWFsbHkgZ29pbmcgdG8gbmVlZCB0aGlzIGluZm9ybWF0aW9u IGZvciBldmVyeSBSVEkgaW4KKyAqIHRoZSByYW5nZSB0YWJsZSwgaXQncyBiZXN0IHRvIGNvbXB1 dGUgYWxsIHRoZSBhbnN3ZXJzIGluIGEgc2luZ2xlIHBhc3Mgb3ZlcgorICogdGhlIEFwcGVuZFJl bEluZm8gbGlzdC4gT3RoZXJ3aXNlLCB3ZSBtaWdodCBlbmQgdXAgc2VhcmNoaW5nIHRocm91Z2gg dGhhdAorICogbGlzdCByZXBlYXRlZGx5IGZvciBlbnRyaWVzIG9mIGludGVyZXN0LgorICoKKyAq IE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgYXJyYXkgaXMgdXNlcyB6ZXJvLWJhc2VkIGluZGV4aW5n LCB3aGlsZSBSVElzIHVzZQorICogMS1iYXNlZCBpbmRleGluZywgc28gc3VidHJhY3QgMSBmcm9t IHRoZSBSVEkgYmVmb3JlIGxvb2tpbmcgaXQgdXAgaW4gdGhlCisgKiBhcnJheS4KKyAqLworc3Rh dGljIEluZGV4ICoKK3BncGFfY3JlYXRlX3RvcF9ydGlfbWFwKEluZGV4IHJ0YWJsZV9sZW5ndGgs IExpc3QgKnJ0YWJsZSwgTGlzdCAqYXBwaW5mb3MpCit7CisJSW5kZXgJICAgKnRvcF9ydGlfbWFw ID0gcGFsbG9jMF9hcnJheShJbmRleCwgcnRhYmxlX2xlbmd0aCk7CisKKwkvKiBJbml0aWFsbHks IG1ha2UgZXZlcnkgUlRJIHBvaW50IHRvIGl0c2VsZi4gKi8KKwlmb3IgKEluZGV4IHJ0aSA9IDE7 IHJ0aSA8PSBydGFibGVfbGVuZ3RoOyArK3J0aSkKKwkJdG9wX3J0aV9tYXBbcnRpIC0gMV0gPSBy dGk7CisKKwkvKiBVcGRhdGUgdGhlIG1hcCBmb3IgZWFjaCBBcHBlbmRSZWxJbmZvIG9iamVjdC4g Ki8KKwlmb3JlYWNoX25vZGUoQXBwZW5kUmVsSW5mbywgYXBwaW5mbywgYXBwaW5mb3MpCisJewor CQlJbmRleAkJcGFyZW50X3J0aSA9IGFwcGluZm8tPnBhcmVudF9yZWxpZDsKKwkJUmFuZ2VUYmxF bnRyeSAqcGFyZW50X3J0ZSA9IHJ0X2ZldGNoKHBhcmVudF9ydGksIHJ0YWJsZSk7CisKKwkJLyog SWYgdGhlIHBhcmVudCBpcyBub3QgUlRFX1JFTEFUSU9OLCBpZ25vcmUgdGhpcyBlbnRyeS4gKi8K KwkJaWYgKHBhcmVudF9ydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJY29udGludWU7 CisKKwkJLyoKKwkJICogTWFwIHRoZSBjaGlsZCB0byB3aGVyZXZlciB3ZSBtYXBwZWQgdGhlIHBh cmVudC4gUGFyZW50cyBhbHdheXMKKwkJICogcHJlY2VkZSB0aGVpciBjaGlsZHJlbiBpbiB0aGUg QXBwZW5kUmVsSW5mbyBsaXN0LCBzbyB0aGlzIHNob3VsZAorCQkgKiB3b3JrIG91dC4KKwkJICov CisJCXRvcF9ydGlfbWFwW2FwcGluZm8tPmNoaWxkX3JlbGlkIC0gMV0gPSB0b3BfcnRpX21hcFtw YXJlbnRfcnRpIC0gMV07CisJfQorCisJcmV0dXJuIHRvcF9ydGlfbWFwOworfQorCisvKgorICog RmluZCB0aGUgb2NjdXJlbmNlIG51bWJlciBvZiBhIGNlcnRhaW4gcmVsYXRpb24gd2l0aGluIGEg Y2VydGFpbiBzdWJxdWVyeS4KKyAqCisgKiBUaGUgc2FtZSBhbGlhcyBuYW1lIGNhbiBvY2N1ciBt dWx0aXBsZSB0aW1lcyB3aXRoaW4gYSBzdWJxdWVyeSwgYnV0IHdlIHdhbnQKKyAqIHRvIGRpc2Ft YmlndWF0ZSBieSBnaXZpbmcgZGlmZmVyZW50IG9jY3VycmVuY2VzIGRpZmZlcmVudCBpbnRlZ2Vy IGluZGV4ZXMuCisgKiBIb3dldmVyLCBjaGlsZCB0YWJsZXMgYXJlIGRpc2FtYmlndWF0ZWQgYnkg aW5jbHVkaW5nIHRoZSB0YWJsZSBuYW1lIHJhdGhlcgorICogdGhhbiBieSBpbmNyZW1lbnRpbmcg dGhlIG9jY3VycmVuY2UgbnVtYmVyOyBhbmQgam9pbnMgYXJlIG5vdCBuYW1lZCBhbmQgc28KKyAq IHNob3VsZG4ndCBpbmNyZW1lbnQgdGhlIG9jY3VyZW5jZSBudW1iZXIgZWl0aGVyLgorICovCitz dGF0aWMgaW50CitwZ3BhX29jY3VycmVuY2VfbnVtYmVyKExpc3QgKnJ0YWJsZSwgSW5kZXggKnRv cF9ydGlfbWFwLAorCQkJCQkgICBTdWJQbGFuUlRJbmZvICpydGluZm8sIEluZGV4IHJ0aSkKK3sK KwlJbmRleAkJcnRvZmZzZXQgPSAocnRpbmZvID09IE5VTEwpID8gMCA6IHJ0aW5mby0+cnRvZmZz ZXQ7CisJaW50CQkJb2NjdXJyZW5jZSA9IDE7CisJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0 Y2gocnRpLCBydGFibGUpOworCisJZm9yIChJbmRleCBwcmlvcl9ydGkgPSBydG9mZnNldCArIDE7 IHByaW9yX3J0aSA8IHJ0aTsgKytwcmlvcl9ydGkpCisJeworCQlSYW5nZVRibEVudHJ5ICpwcmlv cl9ydGU7CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBhIGNoaWxkIHJlbCBvZiBhIHBhcmVudCB0 aGF0IGlzIGEgcmVsYXRpb24sIHNraXAgaXQuCisJCSAqCisJCSAqIFN1Y2ggcmFuZ2UgdGFibGUg ZW50cmllcyBhcmUgZGlzYW1iaWd1YXRlZCBieSBtZW50aW9uaW5nIHRoZSBzY2hlbWEKKwkJICog YW5kIG5hbWUgb2YgdGhlIHRhYmxlLCBub3QgYnkgY291bnRpbmcgdGhlbSBhcyBzZXBhcmF0ZSBv Y2N1cnJlbmNlcworCQkgKiBvZiB0aGUgc2FtZSB0YWJsZS4KKwkJICovCisJCWlmICh0b3BfcnRp X21hcFtwcmlvcl9ydGkgLSAxXSAhPSBwcmlvcl9ydGkpCisJCQljb250aW51ZTsKKworCQkvKiBT a2lwIGpvaW5zLiAqLworCQlwcmlvcl9ydGUgPSBydF9mZXRjaChwcmlvcl9ydGksIHJ0YWJsZSk7 CisJCWlmIChwcmlvcl9ydGUtPnJ0ZWtpbmQgPT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKwor CQkvKiBTa2lwIGlmIHRoZSBhbGlhcyBuYW1lIGRpZmZlcnMuICovCisJCWlmIChzdHJjbXAocHJp b3JfcnRlLT5lcmVmLT5hbGlhc25hbWUsIHJ0ZS0+ZXJlZi0+YWxpYXNuYW1lKSAhPSAwKQorCQkJ Y29udGludWU7CisKKwkJLyogTG9va3MgbGlrZSBhIHRydWUgZHVwbGljYXRlLiAqLworCQkrK29j Y3VycmVuY2U7CisJfQorCisJcmV0dXJuIG9jY3VycmVuY2U7Cit9CmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5oIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX2lkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uYjAwMGQyYjcwODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfaWRlbnRpZmllci5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIHBncGFfaWRlbnRpZmllci5oCisgKgkgIGNyZWF0ZSBhcHByb3ByaWF0ZSBpZGVu dGlmaWVycyBmb3IgcmFuZ2UgdGFibGUgZW50cmllcworICoKKyAqIENvcHlyaWdodCAoYykgMjAx Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaAorICoKKyAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisKKyNpZm5kZWYgUEdQQV9JREVOVElGSUVSX0gKKyNkZWZpbmUgUEdQQV9JREVO VElGSUVSX0gKKworI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgorI2luY2x1ZGUgIm5vZGVz L3BsYW5ub2Rlcy5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2lkZW50aWZpZXIKK3sKKwljb25z dCBjaGFyICphbGlhc19uYW1lOworCWludAkJCW9jY3VycmVuY2U7CisJY29uc3QgY2hhciAqcGFy dG5zcDsKKwljb25zdCBjaGFyICpwYXJ0cmVsOworCWNvbnN0IGNoYXIgKnBsYW5fbmFtZTsKK30g cGdwYV9pZGVudGlmaWVyOworCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgY29tcGFyaW5n IHBvc3NpYmx5LU5VTEwgc3RyaW5ncy4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorc3RyaW5nc19l cXVhbF9vcl9ib3RoX251bGwoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKK3sKKwlpZiAo YSA9PSBiKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlIGlmIChhID09IE5VTEwgfHwgYiA9PSBOVUxM KQorCQlyZXR1cm4gZmFsc2U7CisJZWxzZQorCQlyZXR1cm4gc3RyY21wKGEsIGIpID09IDA7Cit9 CisKK2V4dGVybiBjb25zdCBjaGFyICpwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKGNvbnN0IHBncGFf aWRlbnRpZmllciAqcmlkKTsKK2V4dGVybiB2b2lkIHBncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5 X3J0aShQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggcnRpLAorCQkJCQkJCQkJCSAgIHBncGFfaWRl bnRpZmllciAqcmlkKTsKK2V4dGVybiBpbnQJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJzX2J5X3Jl bGlkcyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxpZHMs CisJCQkJCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkcyk7CitleHRlcm4gcGdwYV9pZGVu dGlmaWVyICpwZ3BhX2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KFBsYW5uZWRT dG10ICpwc3RtdCk7CisKK2V4dGVybiBJbmRleCBwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRp ZmllcihpbnQgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJ0 X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkKTsKKworI2Vu ZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5jIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uYjZjNTg4ZGZlMmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfam9pbi5jCkBAIC0wLDAgKzEsNjM3IEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBwZ3BhX2pvaW4uYworICoJICBhbmFseXNpcyBvZiBqb2lucyBpbiBQbGFu IHRyZWVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf am9pbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVz LmgiCisKKyNpbmNsdWRlICJwZ3BhX2pvaW4uaCIKKyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKKyNp bmNsdWRlICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAibm9kZXMvcGF0aG5vZGVzLmgiCisj aW5jbHVkZSAibm9kZXMvcHJpbnQuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisK Ky8qCisgKiBUZW1wb3Jhcnkgb2JqZWN0IHVzZWQgd2hlbiB1bnJvbGxpbmcgYSBqb2luIHRyZWUu CisgKi8KK3N0cnVjdCBwZ3BhX2pvaW5fdW5yb2xsZXIKK3sKKwl1bnNpZ25lZAluYWxsb2NhdGVk OworCXVuc2lnbmVkCW51c2VkOworCVBsYW4JICAgKm91dGVyX3N1YnBsYW47CisJRWxpZGVkTm9k ZSAqb3V0ZXJfZWxpZGVkX25vZGU7CisJYm9vbAkJb3V0ZXJfYmVuZWF0aF9hbnlfZ2F0aGVyOwor CXBncGFfam9pbl9zdHJhdGVneSAqc3RyYXRlZ3k7CisJUGxhbgkgICoqaW5uZXJfc3VicGxhbnM7 CisJRWxpZGVkTm9kZSAqKmlubmVyX2VsaWRlZF9ub2RlczsKKwlwZ3BhX2pvaW5fdW5yb2xsZXIg Kippbm5lcl91bnJvbGxlcnM7CisJYm9vbAkgICAqaW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyOwor fTsKKworc3RhdGljIHBncGFfam9pbl9zdHJhdGVneSBwZ3BhX2RlY29tcG9zZV9qb2luKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCQkgIFBsYW4gKnBsYW4sCisJ CQkJCQkJCQkJCSAgUGxhbiAqKnJlYWxvdXRlciwKKwkJCQkJCQkJCQkJICBQbGFuICoqcmVhbGlu bmVyLAorCQkJCQkJCQkJCQkgIEVsaWRlZE5vZGUgKiplbGlkZWRyZWFsb3V0ZXIsCisJCQkJCQkJ CQkJCSAgRWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxpbm5lciwKKwkJCQkJCQkJCQkJICBib29sICpm b3VuZF9hbnlfb3V0ZXJfZ2F0aGVyLAorCQkJCQkJCQkJCQkgIGJvb2wgKmZvdW5kX2FueV9pbm5l cl9nYXRoZXIpOworc3RhdGljIEVsaWRlZE5vZGUgKnBncGFfZGVzY2VuZF9ub2RlKFBsYW5uZWRT dG10ICpwc3RtdCwgUGxhbiAqKnBsYW4pOworc3RhdGljIEVsaWRlZE5vZGUgKnBncGFfZGVzY2Vu ZF9hbnlfZ2F0aGVyKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4sCisJCQkJCQkJCQkJ ICAgYm9vbCAqZm91bmRfYW55X2dhdGhlcik7CitzdGF0aWMgYm9vbCBwZ3BhX2Rlc2NlbmRfYW55 X3VuaXF1ZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJCQkJCQkJRWxpZGVk Tm9kZSAqKmVsaWRlZF9ub2RlKTsKKworc3RhdGljIGJvb2wgaXNfcmVzdWx0X25vZGVfd2l0aF9j aGlsZChQbGFuICpwbGFuKTsKK3N0YXRpYyBib29sIGlzX3NvcnRpbmdfcGxhbihQbGFuICpwbGFu KTsKKworLyoKKyAqIENyZWF0ZSBhbiBpbml0aWFsbHktZW1wdHkgb2JqZWN0IGZvciB1bnJvbGxp bmcgam9pbnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgaGVscGVyIG9iamVjdCB0 aGF0IGNhbiBsYXRlciBiZSB1c2VkIHRvIGNyZWF0ZSBhCisgKiBwZ3BhX3Vucm9sbGVkX2pvaW4s IGFmdGVyIGZpcnN0IGNhbGxpbmcgcGdwYV91bnJvbGxfam9pbiBvbmUgb3IgbW9yZSB0aW1lcy4K KyAqLworcGdwYV9qb2luX3Vucm9sbGVyICoKK3BncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIodm9p ZCkKK3sKKwlwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXI7CisKKwlqb2luX3Vucm9s bGVyID0gcGFsbG9jMF9vYmplY3QocGdwYV9qb2luX3Vucm9sbGVyKTsKKwlqb2luX3Vucm9sbGVy LT5uYWxsb2NhdGVkID0gNDsKKwlqb2luX3Vucm9sbGVyLT5zdHJhdGVneSA9CisJCXBhbGxvY19h cnJheShwZ3BhX2pvaW5fc3RyYXRlZ3ksIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCWpv aW5fdW5yb2xsZXItPmlubmVyX3N1YnBsYW5zID0KKwkJcGFsbG9jX2FycmF5KFBsYW4gKiwgam9p bl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25v ZGVzID0KKwkJcGFsbG9jX2FycmF5KEVsaWRlZE5vZGUgKiwgam9pbl91bnJvbGxlci0+bmFsbG9j YXRlZCk7CisJam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzID0KKwkJcGFsbG9jX2FycmF5 KHBncGFfam9pbl91bnJvbGxlciAqLCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwlqb2lu X3Vucm9sbGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRoZXIgPQorCQlwYWxsb2NfYXJyYXkoYm9v bCwgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisKKwlyZXR1cm4gam9pbl91bnJvbGxlcjsK K30KKworLyoKKyAqIFVucm9sbCBvbmUgbGV2ZWwgb2YgYW4gdW5yb2xsYWJsZSBqb2luIHRyZWUu CisgKgorICogT3VyIGJhc2ljIGdvYWwgaGVyZSBpcyB0byB1bnJvbGwgam9pbiB0cmVlcyBhcyB0 aGV5IG9jY3VyIGluIHRoZSBQbGFuCisgKiB0cmVlIGludG8gYSBzaW1wbGVyIGFuZCBtb3JlIHJl Z3VsYXIgc3RydWN0dXJlIHRoYXQgd2UgY2FuIG1vcmUgZWFzaWx5CisgKiB1c2UgZm9yIGZ1cnRo ZXIgcHJvY2Vzc2luZy4gVW5yb2xsaW5nIGlzIG91dGVyLWRlZXAsIHNvIGlmIHRoZSBwbGFuIHRy ZWUKKyAqIGhhcyBKb2luMShKb2luMihBLEIpLEpvaW4zKEMsRCkpLCB0aGUgc2FtZSBqb2luIHVu cm9sbGVyIG9iamVjdCBzaG91bGQgYmUKKyAqIHVzZWQgZm9yIEpvaW4xIGFuZCBKb2luMiwgYnV0 IGEgZGlmZmVyZW50IG9uZSB3aWxsIGJlIG5lZWRlZCBmb3IgSm9pbjMsCisgKiBzaW5jZSB0aGF0 IGludm9sdmVzIGEgam9pbiB3aXRoaW4gdGhlICppbm5lciogc2lkZSBvZiBhbm90aGVyIGpvaW4u CisgKgorICogcGdwYV9wbGFuX3dhbGtlciBjcmVhdGVzIGEgInRvcCBsZXZlbCIgam9pbiB1bnJv bGxlciBvYmplY3Qgd2hlbiBpdAorICogZW5jb3VudGVycyBhIGpvaW4gaW4gYSBwb3J0aW9uIG9m IHRoZSBwbGFuIHRyZWUgaW4gd2hpY2ggbm8gam9pbiB1bnJvbGxlcgorICogaXMgYWxyZWFkeSBh Y3RpdmUuIEZyb20gdGhlcmUsIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGRldGVy bWluZworICogdG8gd2hhdCBwb3J0aW9uIG9mIHRoZSBwbGFuIHRyZWUgdGhhdCBqb2luIHVucm9s bGVyIGFwcGxpZXMsIGFuZCBmb3IKKyAqIGNyZWF0aW5nIGFueSBzdWJvcmRpbmF0ZSBqb2luIHVu cm9sbGVyIG9iamVjdHMgdGhhdCBhcmUgbmVlZGVkIGFzIGEgcmVzdWx0CisgKiBvZiBub24tb3V0 ZXItZGVlcCBqb2luIHRyZWVzLiBXZSBkbyB0aGlzIGJ5IHJldHVybmluZyB0aGUgam9pbiB1bnJv bGxlcgorICogb2JqZWN0cyB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBmdXJ0aGVyIHRyYXZlcnNh bCBvZiB0aGUgb3V0ZXIgYW5kIGlubmVyCisgKiBzdWJ0cmVlcyBvZiB0aGUgY3VycmVudCBwbGFu IG5vZGUgdmlhICpvdXRlcl9qb2luX3Vucm9sbGVyIGFuZAorICogKmlubmVyX2pvaW5fdW5yb2xs ZXIsIHJlc3BlY3RpdmVseS4KKyAqLwordm9pZAorcGdwYV91bnJvbGxfam9pbihwZ3BhX3BsYW5f d2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkgYm9vbCBiZW5lYXRoX2Fu eV9nYXRoZXIsCisJCQkJIHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlciwKKwkJCQkg cGdwYV9qb2luX3Vucm9sbGVyICoqb3V0ZXJfam9pbl91bnJvbGxlciwKKwkJCQkgcGdwYV9qb2lu X3Vucm9sbGVyICoqaW5uZXJfam9pbl91bnJvbGxlcikKK3sKKwlwZ3BhX2pvaW5fc3RyYXRlZ3kg c3RyYXRlZ3k7CisJUGxhbgkgICAqcmVhbGlubmVyLAorCQkJICAgKnJlYWxvdXRlcjsKKwlFbGlk ZWROb2RlICplbGlkZWRpbm5lciwKKwkJCSAgICplbGlkZWRvdXRlcjsKKwlpbnQJCQluOworCWJv b2wJCWZvdW5kX2FueV9vdXRlcl9nYXRoZXIgPSBmYWxzZTsKKwlib29sCQlmb3VuZF9hbnlfaW5u ZXJfZ2F0aGVyID0gZmFsc2U7CisKKwlBc3NlcnQoam9pbl91bnJvbGxlciAhPSBOVUxMKTsKKwor CS8qCisJICogV2UgbmVlZCB0byBwYXNzIHRoZSBqb2luX3Vucm9sbGVyIG9iamVjdCBkb3duIHRo cm91Z2ggY2VydGFpbiB0eXBlcyBvZgorCSAqIHBsYW4gbm9kZXMgLS0gYW55dGhpbmcgdGhhdCdz IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgam9pbiBzdHJhdGVneSwgYW5kCisJICogYW55IG90aGVy IG5vZGVzIHRoYXQgY2FuIG9jY3VyIGluIGEgam9pbiB0cmVlIGRlc3BpdGUgbm90IGJlaW5nIHNj YW5zCisJICogb3Igam9pbnMuCisJICoKKwkgKiBUaGlzIGluY2x1ZGVzOgorCSAqCisJICogKDEp IE1hdGVyaWFsaXplLCBNZW1vaXplLCBhbmQgSGFzaCBub2Rlcywgd2hpY2ggYXJlIHBhcnQgb2Yg dGhlIGpvaW4KKwkgKiBzdHJhdGVneSwKKwkgKgorCSAqICgyKSBHYXRoZXIgYW5kIEdhdGhlciBN ZXJnZSBub2Rlcywgd2hpY2ggY2FuIG9jY3VyIGF0IGFueSBwb2ludCBpbiB0aGUKKwkgKiBqb2lu IHRyZWUgd2hlcmUgdGhlIHBsYW5uZXIgZGVjaWRlZCB0byBpbml0aWF0ZSBwYXJhbGxlbGlzbSwK KwkgKgorCSAqICgzKSBTb3J0IGFuZCBJbmNyZW1lbnRhbFNvcnQgbm9kZXMsIHdoaWNoIGNhbiBv Y2N1ciBiZW5lYXRoIE1lcmdlSm9pbgorCSAqIG9yIEdhdGhlck1lcmdlLAorCSAqCisJICogKDQp IEFnZyBhbmQgVW5pcXVlIG5vZGVzLCB3aGljaCBjYW4gb2NjdXIgd2hlbiB3ZSBkZWNpZGUgdG8g bWFrZSB0aGUKKwkgKiBudWxsYWJsZSBzaWRlIG9mIGEgc2VtaWpvaW4gdW5pcXVlIGFuZCB0aGVu IGpvaW4gdGhlIHJlc3VsdCwgYW5kCisJICoKKwkgKiAoNSkgUmVzdWx0IG5vZGVzIHdpdGggY2hp bGRyZW4sIHdoaWNoIGNhbiBiZSBhZGRlZCBlaXRoZXIgdG8gcHJvamVjdCB0bworCSAqIGVuZm9y Y2UgYSBvbmUtdGltZSBmaWx0ZXIgKGJ1dCBSZXN1bHQgbm9kZXMgd2l0aG91dCBjaGlsZHJlbiBh cmUKKwkgKiBkZWdlbmVyYXRlIHNjYW5zIG9yIGpvaW5zKS4KKwkgKi8KKwlpZiAoSXNBKHBsYW4s IE1hdGVyaWFsKSB8fCBJc0EocGxhbiwgTWVtb2l6ZSkgfHwgSXNBKHBsYW4sIEhhc2gpCisJCXx8 IElzQShwbGFuLCBHYXRoZXIpIHx8IElzQShwbGFuLCBHYXRoZXJNZXJnZSkKKwkJfHwgaXNfc29y dGluZ19wbGFuKHBsYW4pIHx8IElzQShwbGFuLCBBZ2cpIHx8IElzQShwbGFuLCBVbmlxdWUpCisJ CXx8IGlzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQocGxhbikpCisJeworCQkqb3V0ZXJfam9pbl91 bnJvbGxlciA9IGpvaW5fdW5yb2xsZXI7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFNpbmNl IHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCBub2RlcyB0aGF0IHJlcXVpcmUgcGFzcy10aHJvdWdoIHRy ZWF0bWVudCwKKwkgKiB0aGlzIHNob3VsZCBiZSBhbiB1bnJvbGxhYmxlIGpvaW4uCisJICovCisJ c3RyYXRlZ3kgPSBwZ3BhX2RlY29tcG9zZV9qb2luKHdhbGtlciwgcGxhbiwKKwkJCQkJCQkJICAg JnJlYWxvdXRlciwgJnJlYWxpbm5lciwKKwkJCQkJCQkJICAgJmVsaWRlZG91dGVyLCAmZWxpZGVk aW5uZXIsCisJCQkJCQkJCSAgICZmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyLAorCQkJCQkJCQkgICAm Zm91bmRfYW55X2lubmVyX2dhdGhlcik7CisKKwkvKiBJZiBvdXIgd29ya3NwYWNlIGlzIGZ1bGws IGV4cGFuZCBpdC4gKi8KKwlpZiAoam9pbl91bnJvbGxlci0+bnVzZWQgPj0gam9pbl91bnJvbGxl ci0+bmFsbG9jYXRlZCkKKwl7CisJCWpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQgKj0gMjsKKwkJ am9pbl91bnJvbGxlci0+c3RyYXRlZ3kgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxl ci0+c3RyYXRlZ3ksCisJCQkJCQkgICBwZ3BhX2pvaW5fc3RyYXRlZ3ksCisJCQkJCQkgICBqb2lu X3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnMg PQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnMsCisJCQkJ CQkgICBQbGFuICosCisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9p bl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVzID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5f dW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2RlcywKKwkJCQkJCSAgIEVsaWRlZE5vZGUgKiwKKwkJ CQkJCSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5l cl9iZW5lYXRoX2FueV9nYXRoZXIgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+ aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyLAorCQkJCQkJICAgYm9vbCwKKwkJCQkJCSAgIGpvaW5f dW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnMg PQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzLAorCQkJ CQkJICAgcGdwYV9qb2luX3Vucm9sbGVyICosCisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5uYWxs b2NhdGVkKTsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHdlJ3JlIGZsYXR0ZW5pbmcgb3V0ZXItZGVl cCBqb2luIHRyZWVzLCBpdCBmb2xsb3dzIHRoYXQgaWYgdGhlCisJICogb3V0ZXIgc2lkZSBpcyBz dGlsbCBhbiB1bnJvbGxhYmxlIGpvaW4sIGl0IHNob3VsZCBiZSB1bnJvbGxlZCBpbnRvIHRoaXMK KwkgKiBzYW1lIG9iamVjdC4gT3RoZXJ3aXNlLCB3ZSd2ZSByZWFjaGVkIHRoZSBsaW1pdCBvZiB3 aGF0IHdlIGNhbiB1bnJvbGwKKwkgKiBpbnRvIHRoaXMgb2JqZWN0IGFuZCBtdXN0IHJlbWVtYmVy IHRoZSBvdXRlciBzaWRlIGFzIHRoZSBmaW5hbCBvdXRlcgorCSAqIHN1YnBsYW4uCisJICovCisJ aWYgKGVsaWRlZG91dGVyID09IE5VTEwgJiYgcGdwYV9pc19qb2luKHJlYWxvdXRlcikpCisJCSpv dXRlcl9qb2luX3Vucm9sbGVyID0gam9pbl91bnJvbGxlcjsKKwllbHNlCisJeworCQlqb2luX3Vu cm9sbGVyLT5vdXRlcl9zdWJwbGFuID0gcmVhbG91dGVyOworCQlqb2luX3Vucm9sbGVyLT5vdXRl cl9lbGlkZWRfbm9kZSA9IGVsaWRlZG91dGVyOworCQlqb2luX3Vucm9sbGVyLT5vdXRlcl9iZW5l YXRoX2FueV9nYXRoZXIgPQorCQkJYmVuZWF0aF9hbnlfZ2F0aGVyIHx8IGZvdW5kX2FueV9vdXRl cl9nYXRoZXI7CisJfQorCisJLyoKKwkgKiBTdG9yZSB0aGUgaW5uZXIgc3VicGxhbi4gSWYgaXQn cyBhbiB1bnJvbGxhYmxlIGpvaW4sIGl0IG5lZWRzIHRvIGJlCisJICogZmxhdHRlbmVkIGluIHR1 cm4sIGJ1dCBpbnRvIGEgbmV3IHVucm9sbGVyIG9iamVjdCwgbm90IHRoaXMgb25lLgorCSAqLwor CW4gPSBqb2luX3Vucm9sbGVyLT5udXNlZCsrOworCWpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5W25d ID0gc3RyYXRlZ3k7CisJam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnNbbl0gPSByZWFsaW5u ZXI7CisJam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVzW25dID0gZWxpZGVkaW5uZXI7 CisJam9pbl91bnJvbGxlci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyW25dID0KKwkJYmVuZWF0 aF9hbnlfZ2F0aGVyIHx8IGZvdW5kX2FueV9pbm5lcl9nYXRoZXI7CisJaWYgKGVsaWRlZGlubmVy ID09IE5VTEwgJiYgcGdwYV9pc19qb2luKHJlYWxpbm5lcikpCisJCSppbm5lcl9qb2luX3Vucm9s bGVyID0gcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcigpOworCWVsc2UKKwkJKmlubmVyX2pvaW5f dW5yb2xsZXIgPSBOVUxMOworCWpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVyc1tuXSA9ICpp bm5lcl9qb2luX3Vucm9sbGVyOworfQorCisvKgorICogVXNlIHRoZSBkYXRhIHdlJ3ZlIGFjY3Vt dWxhdGVkIGluIGEgcGdwYV9qb2luX3Vucm9sbGVyIG9iamVjdCB0byBjb25zdHJ1Y3QKKyAqIGEg cGdwYV91bnJvbGxlZF9qb2luLgorICovCitwZ3BhX3Vucm9sbGVkX2pvaW4gKgorcGdwYV9idWls ZF91bnJvbGxlZF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJ IHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcikKK3sKKwlwZ3BhX3Vucm9sbGVkX2pv aW4gKnVqb2luOworCWludAkJCWk7CisKKwkvKgorCSAqIFdlIHNob3VsZG4ndCBoYXZlIGdvbmUg ZXZlbiBzbyBmYXIgYXMgdG8gY3JlYXRlIGEgam9pbiB1bnJvbGxlciB1bmxlc3MKKwkgKiB3ZSBm b3VuZCBhdCBsZWFzdCBvbmUgdW5yb2xsYWJsZSBqb2luLgorCSAqLworCUFzc2VydChqb2luX3Vu cm9sbGVyLT5udXNlZCA+IDApOworCisJLyogQWxsb2NhdGUgcmVzdWx0IHN0cnVjdHVyZXMuICov CisJdWpvaW4gPSBwYWxsb2MwX29iamVjdChwZ3BhX3Vucm9sbGVkX2pvaW4pOworCXVqb2luLT5u aW5uZXIgPSBqb2luX3Vucm9sbGVyLT5udXNlZDsKKwl1am9pbi0+c3RyYXRlZ3kgPSBwYWxsb2Mw X2FycmF5KHBncGFfam9pbl9zdHJhdGVneSwgam9pbl91bnJvbGxlci0+bnVzZWQpOworCXVqb2lu LT5pbm5lciA9IHBhbGxvYzBfYXJyYXkocGdwYV9qb2luX21lbWJlciwgam9pbl91bnJvbGxlci0+ bnVzZWQpOworCisJLyogSGFuZGxlIHRoZSBvdXRlcm1vc3Qgam9pbi4gKi8KKwl1am9pbi0+b3V0 ZXIucGxhbiA9IGpvaW5fdW5yb2xsZXItPm91dGVyX3N1YnBsYW47CisJdWpvaW4tPm91dGVyLmVs aWRlZF9ub2RlID0gam9pbl91bnJvbGxlci0+b3V0ZXJfZWxpZGVkX25vZGU7CisJdWpvaW4tPm91 dGVyLnNjYW4gPQorCQlwZ3BhX2J1aWxkX3NjYW4od2Fsa2VyLCB1am9pbi0+b3V0ZXIucGxhbiwK KwkJCQkJCXVqb2luLT5vdXRlci5lbGlkZWRfbm9kZSwKKwkJCQkJCWpvaW5fdW5yb2xsZXItPm91 dGVyX2JlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCXRydWUpOworCisJLyoKKwkgKiBXZSB3YW50 IHRoZSBqb2lucyBmcm9tIHRoZSBkZWVwZXN0IHBhcnQgb2YgdGhlIHBsYW4gdHJlZSB0byBhcHBl YXIKKwkgKiBmaXJzdCBpbiB0aGUgcmVzdWx0IG9iamVjdCwgYnV0IHRoZSBqb2luIHVucm9sbGVy IGFkZHMgdGhlbSBpbiBleGFjdGx5CisJICogdGhlIHJldmVyc2Ugb2YgdGhhdCBvcmRlciwgc28g d2UgbmVlZCB0byBmbGlwIHRoZSBvcmRlciBvZiB0aGUgYXJyYXlzCisJICogd2hlbiBjb25zdHJ1 Y3RpbmcgdGhlIGZpbmFsIHJlc3VsdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgam9pbl91bnJv bGxlci0+bnVzZWQ7ICsraSkKKwl7CisJCWludAkJCWsgPSBqb2luX3Vucm9sbGVyLT5udXNlZCAt IGkgLSAxOworCisJCS8qIENvcHkgc3RyYXRlZ3ksIFBsYW4sIGFuZCBFbGlkZWROb2RlLiAqLwor CQl1am9pbi0+c3RyYXRlZ3lbaV0gPSBqb2luX3Vucm9sbGVyLT5zdHJhdGVneVtrXTsKKwkJdWpv aW4tPmlubmVyW2ldLnBsYW4gPSBqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFuc1trXTsKKwkJ dWpvaW4tPmlubmVyW2ldLmVsaWRlZF9ub2RlID0gam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVk X25vZGVzW2tdOworCisJCS8qCisJCSAqIEZpbGwgaW4gcmVtYWluaW5nIGRldGFpbHMsIHVzaW5n IGVpdGhlciB0aGUgbmVzdGVkIGpvaW4gdW5yb2xsZXIsCisJCSAqIG9yIGJ5IGRlcml2aW5nIHRo ZW0gZnJvbSB0aGUgcGxhbiBhbmQgZWxpZGVkIG5vZGVzLgorCQkgKi8KKwkJaWYgKGpvaW5fdW5y b2xsZXItPmlubmVyX3Vucm9sbGVyc1trXSAhPSBOVUxMKQorCQkJdWpvaW4tPmlubmVyW2ldLnVu cm9sbGVkX2pvaW4gPQorCQkJCXBncGFfYnVpbGRfdW5yb2xsZWRfam9pbih3YWxrZXIsCisJCQkJ CQkJCQkJIGpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVyc1trXSk7CisJCWVsc2UKKwkJCXVq b2luLT5pbm5lcltpXS5zY2FuID0KKwkJCQlwZ3BhX2J1aWxkX3NjYW4od2Fsa2VyLCB1am9pbi0+ aW5uZXJbaV0ucGxhbiwKKwkJCQkJCQkJdWpvaW4tPmlubmVyW2ldLmVsaWRlZF9ub2RlLAorCQkJ CQkJCQlqb2luX3Vucm9sbGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRoZXJba10sCisJCQkJCQkJ CXRydWUpOworCX0KKworCXJldHVybiB1am9pbjsKK30KKworLyoKKyAqIEZyZWUgbWVtb3J5IGFs bG9jYXRlZCBmb3IgcGdwYV9qb2luX3Vucm9sbGVyLgorICovCit2b2lkCitwZ3BhX2Rlc3Ryb3lf am9pbl91bnJvbGxlcihwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIpCit7CisJcGZy ZWUoam9pbl91bnJvbGxlci0+c3RyYXRlZ3kpOworCXBmcmVlKGpvaW5fdW5yb2xsZXItPmlubmVy X3N1YnBsYW5zKTsKKwlwZnJlZShqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMpOwor CXBmcmVlKGpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVycyk7CisJcGZyZWUoam9pbl91bnJv bGxlcik7Cit9CisKKy8qCisgKiBJZGVudGlmeSB0aGUgam9pbiBzdHJhdGVneSB1c2VkIGJ5IGEg am9pbiBhbmQgdGhlICJyZWFsIiBpbm5lciBhbmQgb3V0ZXIKKyAqIHBsYW5zLgorICoKKyAqIEZv ciBleGFtcGxlLCBhIEhhc2ggSm9pbiBhbHdheXMgaGFzIGEgSGFzaCBub2RlIG9uIHRoZSBpbm5l ciBzaWRlLCBidXQKKyAqIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMgdGhlIHJlYWwgaW5u ZXIgaW5wdXQgaXMgdGhlIEhhc2ggbm9kZSdzIGNoaWxkLAorICogbm90IHRoZSBIYXNoIG5vZGUg aXRzZWxmLgorICoKKyAqIExpa2V3aXNlLCBhIE1lcmdlIEpvaW4gbWF5IGhhdmUgU29ydCBub3Rl IG9uIHRoZSBpbm5lciBvciBvdXRlciBzaWRlOyBpZgorICogaXQgZG9lcywgdGhlIHJlYWwgaW5w dXQgdG8gdGhlIGpvaW4gaXMgdGhlIFNvcnQgbm9kZSdzIGNoaWxkLCBub3QgdGhlCisgKiBTb3J0 IG5vZGUgaXRzZWxmLgorICoKKyAqIEluIGFkZGl0aW9uLCB3aXRoIGEgTWVyZ2UgSm9pbiBvciBh IE5lc3RlZCBMb29wLCB0aGUgam9pbiBwbGFubmluZyBjb2RlCisgKiBtYXkgYWRkIGFkZGl0aW9u YWwgbm9kZXMgc3VjaCBhcyBNYXRlcmlhbGl6ZSBvciBNZW1vaXplLiBXZSByZWdhcmQgdGhlc2UK KyAqIGFzIGFuIGFzcGVjdCBvZiB0aGUgam9pbiBzdHJhdGVneS4gQXMgaW4gdGhlIHByZXZpb3Vz IGNhc2VzLCB0aGUgdHJ1ZSBpbnB1dAorICogdG8gdGhlIGpvaW4gaXMgdGhlIHVuZGVybHlpbmcg bm9kZS4KKyAqCisgKiBIb3dldmVyLCBpZiBhbnkgaW52b2x2ZWQgY2hpbGQgbm9kZSBwcmV2aW91 c2x5IGhhZCBhIG5vdy1lbGlkZWQgbm9kZSBzdGFja2VkCisgKiBvbiB0b3AsIHRoZW4gd2UgY2Fu J3QgImxvb2sgdGhyb3VnaCIgdGhhdCBub2RlIC0tIGluZGVlZCwgd2hhdCdzIGdvaW5nIHRvIGJl CisgKiByZWxldmFudCBmb3Igb3VyIHB1cnBvc2VzIGlzIHRoZSBFbGlkZWROb2RlIG9uIHRvcCBv ZiB0aGF0IHBsYW4gbm9kZSwgcmF0aGVyCisgKiB0aGFuIHRoZSBwbGFuIG5vZGUgaXRzZWxmLgor ICoKKyAqIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbGlkZWQgbm9kZXMsIHdlIHdhbnQgdGhhdCBv bmUgdGhhdCB3b3VsZCBoYXZlIGJlZW4KKyAqIHVwcGVybW9zdCBpbiB0aGUgcGxhbiB0cmVlIHBy aW9yIHRvIHNldHJlZnMgcHJvY2Vzc2luZzsgd2UgZXhwZWN0IHRvIGZpbmQKKyAqIHRoYXQgb25l IGxhc3QgaW4gdGhlIGxpc3Qgb2YgZWxpZGVkIG5vZGVzLgorICoKKyAqIE9uIHJldHVybiAqcmVh bG91dGVyIGFuZCAqcmVhbGlubmVyIHdpbGwgaGF2ZSBiZWVuIHNldCB0byB0aGUgcmVhbCBpbm5l cgorICogYW5kIHJlYWwgb3V0ZXIgcGxhbnMgdGhhdCB3ZSBpZGVudGlmaWVkLCBhbmQgKmVsaWRl ZHJlYWxvdXRlciBhbmQKKyAqICplbGlkZWRyZWFsaW5uZXIgdG8gdGhlIGxhc3Qgb2YgYW55IGNv cnJlc3BvZGluZyBlbGlkZWQgbm9kZXMuCisgKiBBZGRpdGlvbmFsbHksICpmb3VuZF9hbnlfb3V0 ZXJfZ2F0aGVyIGFuZCAqZm91bmRfYW55X2lubmVyX2dhdGhlciB3aWxsCisgKiBiZSBzZXQgdG8g dHJ1ZSBpZiB3ZSBsb29rZWQgdGhyb3VnaCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSBv bgorICogdGhhdCBzaWRlIG9mIHRoZSBqb2luLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitz dGF0aWMgcGdwYV9qb2luX3N0cmF0ZWd5CitwZ3BhX2RlY29tcG9zZV9qb2luKHBncGFfcGxhbl93 YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQlQbGFuICoqcmVhbG91dGVy LCBQbGFuICoqcmVhbGlubmVyLAorCQkJCQlFbGlkZWROb2RlICoqZWxpZGVkcmVhbG91dGVyLCBF bGlkZWROb2RlICoqZWxpZGVkcmVhbGlubmVyLAorCQkJCQlib29sICpmb3VuZF9hbnlfb3V0ZXJf Z2F0aGVyLCBib29sICpmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyKQoreworCVBsYW5uZWRTdG10ICpw c3RtdCA9IHdhbGtlci0+cHN0bXQ7CisJSm9pblR5cGUJam9pbnR5cGUgPSAoKEpvaW4gKikgcGxh biktPmpvaW50eXBlOworCVBsYW4JICAgKm91dGVycGxhbiA9IHBsYW4tPmxlZnR0cmVlOworCVBs YW4JICAgKmlubmVycGxhbiA9IHBsYW4tPnJpZ2h0dHJlZTsKKwlFbGlkZWROb2RlICplbGlkZWRv dXRlcjsKKwlFbGlkZWROb2RlICplbGlkZWRpbm5lcjsKKwlwZ3BhX2pvaW5fc3RyYXRlZ3kgc3Ry YXRlZ3k7CisJYm9vbAkJdW5pcXVlb3V0ZXI7CisJYm9vbAkJdW5pcXVlaW5uZXI7CisKKwllbGlk ZWRvdXRlciA9IHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgb3V0ZXJwbGFuKTsKKwllbGlk ZWRpbm5lciA9IHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgaW5uZXJwbGFuKTsKKwkqZm91 bmRfYW55X291dGVyX2dhdGhlciA9IGZhbHNlOworCSpmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyID0g ZmFsc2U7CisKKwlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCisJeworCQljYXNlIFRfTWVyZ2VKb2lu OgorCisJCQkvKgorCQkJICogVGhlIHBsYW5uZXIgbWF5IGhhdmUgY2hvc2VuIHRvIHBsYWNlIGEg TWF0ZXJpYWwgbm9kZSBvbiB0aGUKKwkJCSAqIGlubmVyIHNpZGUgb2YgdGhlIE1lcmdlSm9pbjsg aWYgdGhpcyBpcyBwcmVzZW50LCB3ZSByZWNvcmQgaXQKKwkJCSAqIGFzIHBhcnQgb2YgdGhlIGpv aW4gc3RyYXRlZ3kuCisJCQkgKi8KKwkJCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIElzQShp bm5lcnBsYW4sIE1hdGVyaWFsKSkKKwkJCXsKKwkJCQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2Vu ZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCQlzdHJhdGVneSA9IEpTVFJBVF9NRVJHRV9K T0lOX01BVEVSSUFMSVpFOworCQkJfQorCQkJZWxzZQorCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX01F UkdFX0pPSU5fUExBSU47CisKKwkJCS8qCisJCQkgKiBGb3IgYSBNZXJnZUpvaW4sIGVpdGhlciB0 aGUgb3V0ZXIgb3IgdGhlIGlubmVyIHN1YnBsYW4sIG9yCisJCQkgKiBib3RoLCBtYXkgaGF2ZSBu ZWVkZWQgdG8gYmUgc29ydGVkOyB3ZSBtdXN0IGRpc3JlZ2FyZCBhbnkgU29ydAorCQkJICogb3Ig SW5jcmVtZW50YWxTb3J0IG5vZGUgdG8gZmluZCB0aGUgcmVhbCBpbm5lciBvciBvdXRlcgorCQkJ ICogc3VicGxhbi4KKwkJCSAqLworCQkJaWYgKGVsaWRlZG91dGVyID09IE5VTEwgJiYgaXNfc29y dGluZ19wbGFuKG91dGVycGxhbikpCisJCQkJZWxpZGVkb3V0ZXIgPSBwZ3BhX2Rlc2NlbmRfbm9k ZShwc3RtdCwgJm91dGVycGxhbik7CisJCQlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBpc19z b3J0aW5nX3BsYW4oaW5uZXJwbGFuKSkKKwkJCQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2VuZF9u b2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9OZXN0TG9vcDoK KworCQkJLyoKKwkJCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGNob3NlbiB0byBwbGFjZSBhIE1h dGVyaWFsIG9yIE1lbW9pemUgbm9kZQorCQkJICogb24gdGhlIGlubmVyIHNpZGUgb2YgdGhlIE5l c3RMb29wOyBpZiB0aGlzIGlzIHByZXNlbnQsIHdlCisJCQkgKiByZWNvcmQgaXQgYXMgcGFydCBv ZiB0aGUgam9pbiBzdHJhdGVneS4KKwkJCSAqLworCQkJaWYgKGVsaWRlZGlubmVyID09IE5VTEwg JiYgSXNBKGlubmVycGxhbiwgTWF0ZXJpYWwpKQorCQkJeworCQkJCWVsaWRlZGlubmVyID0gcGdw YV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJCXN0cmF0ZWd5ID0gSlNUUkFU X05FU1RFRF9MT09QX01BVEVSSUFMSVpFOworCQkJfQorCQkJZWxzZSBpZiAoZWxpZGVkaW5uZXIg PT0gTlVMTCAmJiBJc0EoaW5uZXJwbGFuLCBNZW1vaXplKSkKKwkJCXsKKwkJCQllbGlkZWRpbm5l ciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCQlzdHJhdGVneSA9 IEpTVFJBVF9ORVNURURfTE9PUF9NRU1PSVpFOworCQkJfQorCQkJZWxzZQorCQkJCXN0cmF0ZWd5 ID0gSlNUUkFUX05FU1RFRF9MT09QX1BMQUlOOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0hhc2hK b2luOgorCisJCQkvKgorCQkJICogVGhlIGlubmVyIHN1YnBsYW4gb2YgYSBIYXNoSm9pbiBpcyBh bHdheXMgYSBIYXNoIG5vZGU7IHRoZSByZWFsCisJCQkgKiBpbm5lciBzdWJwbGFuIGlzIHRoZSBI YXNoIG5vZGUncyBjaGlsZC4KKwkJCSAqLworCQkJQXNzZXJ0KElzQShpbm5lcnBsYW4sIEhhc2gp KTsKKwkJCUFzc2VydChlbGlkZWRpbm5lciA9PSBOVUxMKTsKKwkJCWVsaWRlZGlubmVyID0gcGdw YV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJc3RyYXRlZ3kgPSBKU1RSQVRf SEFTSF9KT0lOOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnJl Y29nbml6ZWQgbm9kZSB0eXBlOiAlZCIsIChpbnQpIG5vZGVUYWcocGxhbikpOworCX0KKworCS8q CisJICogVGhlIHBsYW5uZXIgbWF5IGhhdmUgZGVjaWRlZCB0byBpbXBsZW1lbnQgYSBzZW1pam9p biBieSBmaXJzdCBtYWtpbmcKKwkgKiB0aGUgbnVsbGFibGUgc2lkZSBvZiB0aGUgcGxhbiB1bmlx dWUsIGFuZCB0aGVuIHBlcmZvcm1pbmcgYSBub3JtYWwgam9pbgorCSAqIGFnYWluc3QgdGhlIHJl c3VsdC4gVGhlcmVmb3JlLCB3ZSBtaWdodCBuZWVkIHRvIGRlc2NlbmQgdGhyb3VnaCBhCisJICog dW5pcXVlIG5vZGUgb24gZWl0aGVyIHNpZGUgb2YgdGhlIHBsYW4uCisJICovCisJdW5pcXVlb3V0 ZXIgPSBwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShwc3RtdCwgJm91dGVycGxhbiwgJmVsaWRlZG91 dGVyKTsKKwl1bmlxdWVpbm5lciA9IHBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10LCAmaW5u ZXJwbGFuLCAmZWxpZGVkaW5uZXIpOworCisJLyoKKwkgKiBDYW4gd2Ugc2VlIGEgUmVzdWx0IG5v ZGUgaGVyZSwgdG8gcHJvamVjdCBhYm92ZSBhIEdhdGhlcj8gU28gZmFyIEkndmUKKwkgKiBmb3Vu ZCBubyBleGFtcGxlIHRoYXQgYmVoYXZlcyB0aGF0IHdheTsgcmF0aGVyLCB0aGUgR2F0aGVyIG9y IEdhdGhlcgorCSAqIE1lcmdlIGlzIG1hZGUgdG8gcHJvamVjdC4gSGVuY2UsIGRvbid0IHRlc3Qg aXNfcmVzdWx0X25vZGVfd2l0aF9jaGlsZCgpCisJICogYXQgdGhpcyBwb2ludC4KKwkgKi8KKwor CS8qCisJICogVGhlIHBsYW5uZXIgbWF5IGhhdmUgZGVjaWRlZCB0byBwYXJhbGxlbGl6ZSBwYXJ0 IG9mIHRoZSBqb2luIHRyZWUsIHNvCisJICogd2UgY291bGQgZmluZCBhIEdhdGhlciBvciBHYXRo ZXIgTWVyZ2Ugbm9kZSBoZXJlLiBOb3RlIHRoYXQsIGlmCisJICogcHJlc2VudCwgdGhpcyB3aWxs IGFwcGVhciBiZWxvdyBub2RlcyB3ZSBjb25zaWRlcmVkIGFzIHBhcnQgb2YgdGhlIGpvaW4KKwkg KiBzdHJhdGVneSwgYnV0IHdlIGNvdWxkIGZpbmQgYW5vdGhlciB1bmlxdWVuZXNzLWVuZm9yY2lu ZyBub2RlIGJlbG93IHRoZQorCSAqIEdhdGhlciBvciBHYXRoZXIgTWVyZ2UsIGlmIHByZXNlbnQu CisJICovCisJaWYgKGVsaWRlZG91dGVyID09IE5VTEwpCisJeworCQllbGlkZWRvdXRlciA9IHBn cGFfZGVzY2VuZF9hbnlfZ2F0aGVyKHBzdG10LCAmb3V0ZXJwbGFuLAorCQkJCQkJCQkJCQkgIGZv dW5kX2FueV9vdXRlcl9nYXRoZXIpOworCQlpZiAoZm91bmRfYW55X291dGVyX2dhdGhlciAmJgor CQkJcGdwYV9kZXNjZW5kX2FueV91bmlxdWUocHN0bXQsICZvdXRlcnBsYW4sICZlbGlkZWRvdXRl cikpCisJCQl1bmlxdWVvdXRlciA9IHRydWU7CisJfQorCWlmIChlbGlkZWRpbm5lciA9PSBOVUxM KQorCXsKKwkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfYW55X2dhdGhlcihwc3RtdCwgJmlu bmVycGxhbiwKKwkJCQkJCQkJCQkJICBmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyKTsKKwkJaWYgKGZv dW5kX2FueV9pbm5lcl9nYXRoZXIgJiYKKwkJCXBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10 LCAmaW5uZXJwbGFuLCAmZWxpZGVkaW5uZXIpKQorCQkJdW5pcXVlaW5uZXIgPSB0cnVlOworCX0K KworCS8qCisJICogSXQncyBwb3NzaWJsZSB0aGF0IFJlc3VsdCBub2RlIGhhcyBiZWVuIGluc2Vy dGVkIGVpdGhlciB0byBwcm9qZWN0IGEKKwkgKiB0YXJnZXQgbGlzdCBvciB0byBpbXBsZW1lbnQg YSBvbmUtdGltZSBmaWx0ZXIuIElmIHNvLCB3ZSBjYW4gZGVzY2VuZAorCSAqIHRocm91Z2h0IGl0 LiBOb3RlIHRoYXQgYSByZXN1bHQgbm9kZSB3aXRob3V0IGEgY2hpbGQgd291bGQgYmUgYQorCSAq IGRlZ2VuZXJhdGUgc2NhbiBvciBqb2luLCBhbmQgbm90IHNvbWV0aGluZyB3ZSBjb3VsZCBkZXNj ZW5kIHRocm91Z2guCisJICovCisJaWYgKGVsaWRlZG91dGVyID09IE5VTEwgJiYgaXNfcmVzdWx0 X25vZGVfd2l0aF9jaGlsZChvdXRlcnBsYW4pKQorCQllbGlkZWRvdXRlciA9IHBncGFfZGVzY2Vu ZF9ub2RlKHBzdG10LCAmb3V0ZXJwbGFuKTsKKwlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBp c19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKGlubmVycGxhbikpCisJCWVsaWRlZGlubmVyID0gcGdw YV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCisJLyoKKwkgKiBJZiB0aGlzIGlz IGEgc2VtaWpvaW4gdGhhdCB3YXMgY29udmVydGVkIHRvIGFuIGlubmVyIGpvaW4gYnkgbWFraW5n IG9uZQorCSAqIHNpZGUgb3IgdGhlIG90aGVyIHVuaXF1ZSwgbWFrZSBhIG5vdGUgdGhhdCB0aGUg aW5uZXIgb3Igb3V0ZXIgc3VicGxhbiwKKwkgKiBhcyBhcHByb3ByaWF0ZSwgc2hvdWxkIGJlIHRy ZWF0ZWQgYXMgYSBxdWVyeSBwbGFuIGZlYXR1cmUgd2hlbiB0aGUgbWFpbgorCSAqIHRyZWUgdHJh dmVyc2FsIHJlYWNoZXMgaXQuCisJICoKKwkgKiBDb252ZXJzZWx5LCBpZiB0aGUgcGxhbm5lciBj b3VsZCBoYXZlIG1hZGUgb25lIHNpZGUgb2YgdGhlIGpvaW4gdW5pcXVlCisJICogYW5kIHRoZXJl YnkgY29udmVydGVkIGl0IHRvIGFuIGlubmVyIGpvaW4sIGFuZCBjaG9zZSBub3QgdG8gZG8gc28s IHRoYXQKKwkgKiBpcyBhbHNvIHdvcnRoIG5vdGluZy4KKwkgKgorCSAqIE5COiBUaGlzIGNvZGUg Y291bGQgYXBwZWFyIHNsaWdodGx5IGhpZ2hlciB1cCBpbiBpbiB0aGlzIGZ1bmN0aW9uLCBidXQK KwkgKiBub25lIG9mIHRoZSBub2RlcyB0aHJvdWdoIHdoaWNoIHdlIGp1c3QgZGVzY2VuZGVkIHNo b3VsZCBoYXZlCisJICogYXNzb2NpYXRlZCBSVElzLgorCSAqCisJICogTkI6IFRoaXMgc2VlbXMg bGlrZSBhIHNvbWV3aGF0IGhhY2t5IHdheSBvZiBwYXNzaW5nIGluZm9ybWF0aW9uIHVwIHRvCisJ ICogdGhlIG1haW4gdHJlZSB3YWxrLCBidXQgSSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIGJldHRl ciBpZGVhLgorCSAqLworCWlmICh1bmlxdWVvdXRlcikKKwkJcGdwYV9hZGRfZnV0dXJlX2ZlYXR1 cmUod2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFLCBvdXRlcnBsYW4pOworCWVsc2UgaWYg KGpvaW50eXBlID09IEpPSU5fUklHSFRfU0VNSSkKKwkJcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUo d2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwgb3V0ZXJwbGFuKTsKKwlpZiAodW5p cXVlaW5uZXIpCisJCXBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlK T0lOX1VOSVFVRSwgaW5uZXJwbGFuKTsKKwllbHNlIGlmIChqb2ludHlwZSA9PSBKT0lOX1NFTUkp CisJCXBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlKT0lOX05PTl9V TklRVUUsIGlubmVycGxhbik7CisKKwkvKiBTZXQgb3V0cHV0IHBhcmFtZXRlcnMuICovCisJKnJl YWxvdXRlciA9IG91dGVycGxhbjsKKwkqcmVhbGlubmVyID0gaW5uZXJwbGFuOworCSplbGlkZWRy ZWFsb3V0ZXIgPSBlbGlkZWRvdXRlcjsKKwkqZWxpZGVkcmVhbGlubmVyID0gZWxpZGVkaW5uZXI7 CisJcmV0dXJuIHN0cmF0ZWd5OworfQorCisvKgorICogRGVzY2VuZCB0aHJvdWdoIGEgUGxhbiBu b2RlIGluIGEgam9pbiB0cmVlIHRoYXQgdGhlIGNhbGxlciBoYXMgZGV0ZXJtaW5lZAorICogdG8g YmUgaXJyZWxldmFudC4KKyAqCisgKiBVcGRhdGVzICpwbGFuLCBhbmQgcmV0dXJucyB0aGUgbGFz dCBvZiBhbnkgZWxpZGVkIG5vZGVzIHBlcnRhaW5pbmcgdG8gdGhlCisgKiBuZXcgcGxhbiBub2Rl LgorICovCitzdGF0aWMgRWxpZGVkTm9kZSAqCitwZ3BhX2Rlc2NlbmRfbm9kZShQbGFubmVkU3Rt dCAqcHN0bXQsIFBsYW4gKipwbGFuKQoreworCSpwbGFuID0gKCpwbGFuKS0+bGVmdHRyZWU7CisJ cmV0dXJuIHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgKnBsYW4pOworfQorCisvKgorICog RGVzY2VuZCB0aHJvdWdoIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLCBpZiBwcmVzZW50 LCBhbmQgYW55IFNvcnQKKyAqIG9yIEluY3JlbWVudGFsU29ydCBub2RlIG9jY3VycmluZyB1bmRl ciBhIEdhdGhlciBNZXJnZS4KKyAqCisgKiBDYWxsZXIgc2hvdWxkIGhhdmUgdmVyaWZpZWQgdGhh dCB0aGVyZSBpcyBubyBFbGlkZWROb2RlIHBlcnRhaW5pbmcgdG8KKyAqIHRoZSBpbml0aWFsIHZh bHVlIG9mICpwbGFuLgorICoKKyAqIFVwZGF0ZXMgKnBsYW4sIGFuZCByZXR1cm5zIHRoZSBsYXN0 IG9mIGFueSBlbGlkZWQgbm9kZXMgcGVydGFpbmluZyB0byB0aGUKKyAqIG5ldyBwbGFuIG5vZGUu IFNldHMgKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlIGlmIGVpdGhlciBHYXRoZXIgb3IKKyAqIEdh dGhlciBNZXJnZSB3YXMgZm91bmQsIGFuZCBvdGhlcndpc2UgbGVhdmVzIGl0IHVuY2hhbmdlZC4K KyAqLworc3RhdGljIEVsaWRlZE5vZGUgKgorcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIoUGxhbm5l ZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCWJvb2wgKmZvdW5kX2FueV9nYXRoZXIp Cit7CisJaWYgKElzQSgqcGxhbiwgR2F0aGVyKSkKKwl7CisJCSpmb3VuZF9hbnlfZ2F0aGVyID0g dHJ1ZTsKKwkJcmV0dXJuIHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKwl9CisKKwlp ZiAoSXNBKCpwbGFuLCBHYXRoZXJNZXJnZSkpCisJeworCQlFbGlkZWROb2RlICplbGlkZWQgPSBw Z3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgcGxhbik7CisKKwkJaWYgKGVsaWRlZCA9PSBOVUxMICYm IGlzX3NvcnRpbmdfcGxhbigqcGxhbikpCisJCQllbGlkZWQgPSBwZ3BhX2Rlc2NlbmRfbm9kZShw c3RtdCwgcGxhbik7CisKKwkJKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlOworCQlyZXR1cm4gZWxp ZGVkOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogSWYgKnBsYW4gaXMgYW4gQWdn IG9yIFVuaXF1ZSBub2RlLCB3ZSB3YW50IHRvIGRlc2NlbmQgdGhyb3VnaCBpdCwgdW5sZXNzCisg KiBpdCBoYXMgYSBjb3JyZXNwb25kaW5nIGVsaWRlZCBub2RlLiBJZiBpdHMgaW1tZWRpYXRlIGNo aWxkIGlzIGEgU29ydCBvcgorICogSW5jcmVtZW50YWxTb3J0LCB3ZSBhbHNvIHdhbnQgdG8gZGVz Y2VuZCB0aHJvdWdoIHRoYXQsIHVubGVzcyBpdCBoYXMgYQorICogY29ycmVzcG9uZGluZyBlbGlk ZWQgbm9kZS4KKyAqCisgKiBPbiBlbnRyeSwgKmVsaWRlZF9ub2RlIG11c3QgYmUgdGhlIGxhc3Qg b2YgYW55IGVsaWRlZCBub2RlcyBjb3JyZXNwb25kaW5nCisgKiB0byAqcGxhbjsgb24gZXhpdCwg dGhpcyB3aWxsIHN0aWxsIGJlIHRydWUsIGJ1dCAqcGxhbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQu CisgKgorICogVGhlIHJlYXNvbiB3ZSBkb24ndCB3YW50IHRvIGRlc2NlbmQgdGhyb3VnaCBlbGlk ZWQgbm9kZXMgaXMgdGhhdCBhIHNpbmdsZQorICogam9pbiB0cmVlIGNhbid0IGNyb3NzIHRocm91 Z2ggYW55IHNvcnQgb2YgZWxpZGVkIG5vZGU6IHN1YnF1ZXJpZXMgYXJlCisgKiBwbGFubmVkIHNl cGFyYXRlbHksIGFuZCBwbGFubmluZyBpbnNpZGUgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIGlz CisgKiBzZXBhcmF0ZSBmcm9tIHBsYW5uaW5nIG91dHNpZGUgb2YgaXQuCisgKgorICogVGhlIHJl dHVybiB2YWx1ZSBpcyB0cnVlIGlmIHdlIGRlc2NlbmQgdGhyb3VnaCBhIG5vZGUgdGhhdCB3ZSBi ZWxpZXZlIGlzCisgKiBtYWtpbmcgb25lIHNpZGUgb2YgYSBzZW1pam9pbiB1bmlxdWUsIGFuZCBv dGhlcndpc2UgZmFsc2UuCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1 ZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJCQkJRWxpZGVkTm9kZSAqKmVs aWRlZF9ub2RlKQoreworCWJvb2wJCWRlc2NlbmQgPSBmYWxzZTsKKwlib29sCQlzanVuaXF1ZSA9 IGZhbHNlOworCisJaWYgKCplbGlkZWRfbm9kZSAhPSBOVUxMKQorCQlyZXR1cm4gc2p1bmlxdWU7 CisKKwlpZiAoSXNBKCpwbGFuLCBVbmlxdWUpKQorCXsKKwkJZGVzY2VuZCA9IHRydWU7CisJCXNq dW5pcXVlID0gdHJ1ZTsKKwl9CisJZWxzZSBpZiAoSXNBKCpwbGFuLCBBZ2cpKQorCXsKKwkJLyoK KwkJICogSWYgdGhpcyBpcyBhIHNpbXBsZSBBZ2cgbm9kZSwgdGhlbiBhc3N1bWUgaXQncyBoZXJl IHRvIGltcGxlbWVudAorCQkgKiBzZW1pam9pbiB1bmlxdWVuZXNzLiBPdGhlcndpc2UsIGFzc3Vt ZSBpdCdzIGNvbXBsZXRpbmcgYW4gZWFnZXIKKwkJICogYWdncmVnYXRpb24gb3IgcGFydGl0aW9u d2lzZSBhZ2dyZWdhdGlvbiBvcGVyYXRpb24gdGhhdCBiZWdhbiBhdCBhCisJCSAqIGhpZ2hlciBs ZXZlbCBvZiB0aGUgcGxhbiB0cmVlLgorCQkgKgorCQkgKiAoTm90ZSB0aGF0IHdoZW4gd2UncmUg dXNpbmcgYW4gQWdnIG5vZGUgZm9yIHVuaXF1ZW5lc3MsIHRoZXJlJ3Mgbm8KKwkJICogbmVlZCBm b3IgYW55IGNhc2Ugb3RoZXIgdGhhbiBBR0dTUExJVF9TSU1QTEUsIGJlY2F1c2UgdGhlcmUncyBu bworCQkgKiBhZ2dyZWdhdGVkIGNvbHVtbiBiZWluZyAqIGNvbXB1dGVkLiBIb3dldmVyLCB0aGUg ZmFjdCB0aGF0CisJCSAqIEFHR1NQTElUX1NJTVBMRSBpcyBpbiB1c2UgZG9lc24ndCBwcm92ZSB0 aGF0IHRoaXMgQWdnIGlzIGhlcmUgZm9yCisJCSAqIHRoZSBzZW1pam9pbiB1bmlxdWVuZXNzLiBN YXliZSB3ZSBzaG91bGQgYWRqdXN0IGFuIEFnZyBub2RlIHRvCisJCSAqIGNhcnJ5IGEgInB1cnBv c2UiIGZpZWxkIHNvIHRoYXQgY29kZSBsaWtlIHRoaXMgY2FuIGJlIG1vcmUgY2VydGFpbgorCQkg KiBvZiBpdHMgYW5hbHlzaXMuKQorCQkgKi8KKwkJZGVzY2VuZCA9IHRydWU7CisJCXNqdW5pcXVl ID0gKCgoQWdnICopICpwbGFuKS0+YWdnc3BsaXQgPT0gQUdHU1BMSVRfU0lNUExFKTsKKwl9CisK KwlpZiAoZGVzY2VuZCkKKwl7CisJCSplbGlkZWRfbm9kZSA9IHBncGFfZGVzY2VuZF9ub2RlKHBz dG10LCBwbGFuKTsKKworCQlpZiAoKmVsaWRlZF9ub2RlID09IE5VTEwgJiYgaXNfc29ydGluZ19w bGFuKCpwbGFuKSkKKwkJCSplbGlkZWRfbm9kZSA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBw bGFuKTsKKwl9CisKKwlyZXR1cm4gc2p1bmlxdWU7Cit9CisKKy8qCisgKiBJcyB0aGlzIGEgUmVz dWx0IG5vZGUgdGhhdCBoYXMgYSBjaGlsZD8KKyAqLworc3RhdGljIGJvb2wKK2lzX3Jlc3VsdF9u b2RlX3dpdGhfY2hpbGQoUGxhbiAqcGxhbikKK3sKKwlyZXR1cm4gSXNBKHBsYW4sIFJlc3VsdCkg JiYgcGxhbi0+bGVmdHRyZWUgIT0gTlVMTDsKK30KKworLyoKKyAqIElzIHRoaXMgYSBQbGFuIG5v ZGUgd2hvc2UgcHVycG9zZSBpcyBwdXQgdGhlIGRhdGEgaW4gYSBjZXJ0YWluIG9yZGVyPworICov CitzdGF0aWMgYm9vbAoraXNfc29ydGluZ19wbGFuKFBsYW4gKnBsYW4pCit7CisJcmV0dXJuIElz QShwbGFuLCBTb3J0KSB8fCBJc0EocGxhbiwgSW5jcmVtZW50YWxTb3J0KTsKK30KZGlmZiAtLWdp dCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmggYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfam9pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li40ZGM3Mjk4NmE3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9qb2luLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IHBncGFfam9pbi5oCisgKgkgIGFuYWx5c2lzIG9mIGpvaW5zIGluIFBsYW4gdHJlZXMKKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX0pPSU5fSAorI2RlZmluZSBQR1BB X0pPSU5fSAorCisjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisKK3R5cGVkZWYgc3RydWN0 IHBncGFfcGxhbl93YWxrZXJfY29udGV4dCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQ7Cit0eXBl ZGVmIHN0cnVjdCBwZ3BhX2pvaW5fdW5yb2xsZXIgcGdwYV9qb2luX3Vucm9sbGVyOwordHlwZWRl ZiBzdHJ1Y3QgcGdwYV91bnJvbGxlZF9qb2luIHBncGFfdW5yb2xsZWRfam9pbjsKKworLyoKKyAq IEFsdGhvdWdoIHRoZXJlIGFyZSB0aHJlZSBtYWluIGpvaW4gc3RyYXRlZ2llcywgd2UgdHJ5IHRv IGNsYXNzaWZ5IHRoaW5ncworICogbW9yZSBwcmVjaXNlbHkgaGVyZTogbWVyZ2Ugam9pbnMgaGF2 ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIG1hdGVyaWFsaXphdGlvbgorICogb24gdGhlIGlubmVyIHNp ZGUsIGFuZCBuZXN0ZWQgbG9vcHMgY2FuIHVzZSBlaXRoZXIgbWF0ZXJpYWxpemF0aW9uIG9yCisg KiBtZW1vaXphdGlvbi4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJSlNUUkFUX01FUkdFX0pPSU5f UExBSU4gPSAwLAorCUpTVFJBVF9NRVJHRV9KT0lOX01BVEVSSUFMSVpFLAorCUpTVFJBVF9ORVNU RURfTE9PUF9QTEFJTiwKKwlKU1RSQVRfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUsCisJSlNUUkFU X05FU1RFRF9MT09QX01FTU9JWkUsCisJSlNUUkFUX0hBU0hfSk9JTgorCS8qIHVwZGF0ZSBOVU1f UEdQQV9KT0lOX1NUUkFURUdZIGlmIHlvdSBhZGQgYW55dGhpbmcgaGVyZSAqLworfSBwZ3BhX2pv aW5fc3RyYXRlZ3k7CisKKyNkZWZpbmUgTlVNX1BHUEFfSk9JTl9TVFJBVEVHWQkJKChpbnQpIEpT VFJBVF9IQVNIX0pPSU4gKyAxKQorCisvKgorICogSW4gYW4gb3V0ZXItZGVlcCBqb2luIHRyZWUs IGV2ZXJ5IG1lbWJlciBvZiBhbiB1bnJvbGxlZCBqb2luIHdpbGwgYmUgYSBzY2FuLAorICogYnV0 IGpvaW4gdHJlZXMgd2l0aCBvdGhlciBzaGFwZXMgY2FuIGNvbnRhaW4gdW5yb2xsZWQgam9pbnMu CisgKgorICogVGhlIHBsYW4gbm9kZSB3ZSBzdG9yZSBoZXJlIHdpbGwgYmUgdGhlIGlubmVyIG9y IG91dGVyIGNoaWxkIG9mIHRoZSBqb2luCisgKiBub2RlLCBhcyBhcHByb3ByaWF0ZSwgZXhjZXB0 IHRoYXQgd2UgbG9vayB0aHJvdWdoIHN1Ym5vZGVzIHRoYXQgd2UgcmVnYXJkIGFzCisgKiBwYXJ0 IG9mIHRoZSBqb2luIG1ldGhvZCBpdHNlbGYuIEZvciBpbnN0YW5jZSwgZm9yIGEgTmVzdGVkIExv b3AgdGhhdAorICogbWF0ZXJpYWxpemVzIHRoZSBpbm5lciBpbnB1dCwgd2UnbGwgc3RvcmUgdGhl IGNoaWxkIG9mIHRoZSBNYXRlcmlhbGl6ZSBub2RlLAorICogbm90IHRoZSBNYXRlcmlhbGl6ZSBu b2RlIGl0c2VsZi4KKyAqCisgKiBJZiBzZXRyZWZzIHByb2Nlc3NpbmcgZWxpZGVkIG9uZSBvciBt b3JlIG5vZGVzIGZyb20gdGhlIHBsYW4gdHJlZSwgdGhlbgorICogd2UnbGwgc3RvcmUgZGV0YWls cyBhYm91dCB0aGUgdG9wbW9zdCBvZiB0aG9zZSBpbiBlbGlkZWRfbm9kZTsgb3RoZXJ3aXNlLAor ICogaXQgd2lsbCBiZSBOVUxMLgorICoKKyAqIEV4YWN0bHkgb25lIG9mIHNjYW4gYW5kIHVucm9s bGVkX2pvaW4gd2lsbCBiZSBub24tTlVMTC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQbGFu CSAgICpwbGFuOworCUVsaWRlZE5vZGUgKmVsaWRlZF9ub2RlOworCXN0cnVjdCBwZ3BhX3NjYW4g KnNjYW47CisJcGdwYV91bnJvbGxlZF9qb2luICp1bnJvbGxlZF9qb2luOworfSBwZ3BhX2pvaW5f bWVtYmVyOworCisvKgorICogV2UgY29udmVydCBvdXRlci1kZWVwIGpvaW4gdHJlZXMgdG8gYSBm bGF0IHN0cnVjdHVyZTsgdGhhdCBpcywgKChBIEpPSU4gQikKKyAqIEpPSU4gQykgSk9JTiBEIGdl dHMgY29udmVydGVkIHRvIG91dGVyID0gQSwgaW5uZXIgPSA8QiBDIEQ+LiAgV2hlbiBqb2lucwor ICogYXJlbid0IG91dGVyLWRlZXAsIHN1YnN0cnVjdHVyZSBpcyByZXF1aXJlZCwgZS5nLiAoQSBK T0lOIEIpIEpPSU4gKEMgSk9JTiBEKQorICogaXMgcmVwcmVzZW50ZWQgYXMgb3V0ZXIgPSBBLCBp bm5lciA9IDxCIFg+LCB3aGVyZSBYIGlzIGEgcGdwYV91bnJvbGxlZF9qb2luCisgKiBjb3Zlcmlu ZyBDLUQuCisgKi8KK3N0cnVjdCBwZ3BhX3Vucm9sbGVkX2pvaW4KK3sKKwkvKiBPdXRlcm1vc3Qg bWVtYmVyOyBtdXN0IG5vdCBpdHNlbGYgYmUgYW4gdW5yb2xsZWQgam9pbi4gKi8KKwlwZ3BhX2pv aW5fbWVtYmVyIG91dGVyOworCisJLyogTnVtYmVyIG9mIGlubmVyIG1lbWJlcnMuIExlbmd0aCBv ZiB0aGUgc3RyYXRlZ3kgYW5kIGlubmVyIGFycmF5cy4gKi8KKwl1bnNpZ25lZAluaW5uZXI7CisK KwkvKiBBcnJheSBvZiBzdHJhdGVnaWVzLCBvbmUgcGVyIG5vbi1vdXRlcm1vc3QgbWVtYmVyLiAq LworCXBncGFfam9pbl9zdHJhdGVneSAqc3RyYXRlZ3k7CisKKwkvKiBBcnJheSBvZiBtZW1iZXJz LCBleGNsdWRpbmcgdGhlIG91dGVybW9zdC4gRGVlcGVzdCBmaXJzdC4gKi8KKwlwZ3BhX2pvaW5f bWVtYmVyICppbm5lcjsKK307CisKKy8qCisgKiBEb2VzIHRoaXMgcGxhbiBub2RlIGluaGVyaXQg ZnJvbSBKb2luPworICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3BncGFfaXNfam9pbihQbGFuICpw bGFuKQoreworCXJldHVybiBJc0EocGxhbiwgTmVzdExvb3ApIHx8IElzQShwbGFuLCBNZXJnZUpv aW4pIHx8IElzQShwbGFuLCBIYXNoSm9pbik7Cit9CisKK2V4dGVybiBwZ3BhX2pvaW5fdW5yb2xs ZXIgKnBncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIodm9pZCk7CitleHRlcm4gdm9pZCBwZ3BhX3Vu cm9sbF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSBQbGFu ICpwbGFuLCBib29sIGJlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCQkgcGdwYV9qb2luX3Vucm9s bGVyICpqb2luX3Vucm9sbGVyLAorCQkJCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKipvdXRlcl9q b2luX3Vucm9sbGVyLAorCQkJCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKippbm5lcl9qb2luX3Vu cm9sbGVyKTsKK2V4dGVybiBwZ3BhX3Vucm9sbGVkX2pvaW4gKnBncGFfYnVpbGRfdW5yb2xsZWRf am9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJCQlwZ3Bh X2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIpOworZXh0ZXJuIHZvaWQgcGdwYV9kZXN0cm95 X2pvaW5fdW5yb2xsZXIocGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyKTsKKworI2Vu ZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjY3NjQ3YWNkZjVhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCkBAIC0wLDAgKzEsNTcxIEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX291dHB1dC5jCisgKgkgIHByb2R1Y2UgdGV4dHVhbCBv dXRwdXQgZnJvbSB0aGUgcmVzdWx0cyBvZiBhIHBsYW4gdHJlZSB3YWxrCisgKgorICogQ29weXJp Z2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBn cGFfb3V0cHV0LmgiCisjaW5jbHVkZSAicGdwYV9zY2FuLmgiCisKKyNpbmNsdWRlICJub2Rlcy9w YXJzZW5vZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUgInV0 aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKKy8qCisgKiBD b250ZXh0IG9iamVjdCBmb3IgdGV4dHVhbCBhZHZpY2UgZ2VuZXJhdGlvbi4KKyAqCisgKiBydF9p ZGVudGlmaWVycyBpcyB0aGUgY2FsbGVyLXByb3ZpZGVkIGFycmF5IG9mIHJhbmdlIHRhYmxlIGlk ZW50aWZpZXJzLgorICogU2VlIHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHBncGFfaWRlbnRp Zmllci5jIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogYnVmIGlzIHRoZSBjYWxsZXItcHJvdmlk ZWQgb3V0cHV0IGJ1ZmZlci4KKyAqCisgKiB3cmFwX2NvbHVtbiBpcyB0aGUgd3JhcCBjb2x1bW4s IHNvIHRoYXQgd2UgZG9uJ3QgY3JlYXRlIG91dHB1dCB0aGF0IGlzCisgKiB0b28gd2lkZS4gU2Vl IHBncGFfbWF5YmVfbGluZWJyZWFrKCkgYW5kIGNvbW1lbnRzIGluIHBncGFfb3V0cHV0X2Fkdmlj ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9vdXRwdXRfY29udGV4dAoreworCWNvbnN0IGNo YXIgKipyaWRfc3RyaW5nczsKKwlTdHJpbmdJbmZvCWJ1ZjsKKwlpbnQJCQl3cmFwX2NvbHVtbjsK K30gcGdwYV9vdXRwdXRfY29udGV4dDsKKworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfdW5yb2xs ZWRfam9pbihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJICBwZ3BhX3Vu cm9sbGVkX2pvaW4gKmpvaW4pOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIo cGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCXBncGFfam9pbl9tZW1iZXIg Km1lbWJlcik7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9zY2FuX3N0cmF0ZWd5KHBncGFfb3V0 cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkgIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJh dGVneSwKKwkJCQkJCQkJCSAgTGlzdCAqc2NhbnMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRf cmVsYXRpb25fbmFtZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBPaWQgcmVsaWQpOwor c3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfcXVlcnlfZmVhdHVyZShwZ3BhX291dHB1dF9jb250ZXh0 ICpjb250ZXh0LAorCQkJCQkJCQkJICBwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkJCSAgTGlz dCAqcXVlcnlfZmVhdHVyZXMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfc2ltcGxlX3N0cmF0 ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkJY2hhciAqc3RyYXRl Z3ksCisJCQkJCQkJCQkJTGlzdCAqcmVsaWRfc2V0cyk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1 dF9ub19nYXRoZXIocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJICBCaXRt YXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9yZWxhdGlvbnMocGdwYV9v dXRwdXRfY29udGV4dCAqY29udGV4dCwgU3RyaW5nSW5mbyBidWYsCisJCQkJCQkJCSAgQml0bWFw c2V0ICpyZWxpZHMpOworCitzdGF0aWMgY2hhciAqcGdwYV9jc3RyaW5nX2pvaW5fc3RyYXRlZ3ko cGdwYV9qb2luX3N0cmF0ZWd5IHN0cmF0ZWd5KTsKK3N0YXRpYyBjaGFyICpwZ3BhX2NzdHJpbmdf c2Nhbl9zdHJhdGVneShwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3kpOworc3RhdGljIGNoYXIg KnBncGFfY3N0cmluZ19xdWVyeV9mZWF0dXJlX3R5cGUocGdwYV9xZl90eXBlIHR5cGUpOworCitz dGF0aWMgdm9pZCBwZ3BhX21heWJlX2xpbmVicmVhayhTdHJpbmdJbmZvIGJ1ZiwgaW50IHdyYXBf Y29sdW1uKTsKKworLyoKKyAqIEFwcGVuZCBxdWVyeSBhZHZpY2UgdG8gdGhlIHByb3ZpZGVkIGJ1 ZmZlci4KKyAqCisgKiBCZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCAnd2Fsa2VyJyBtdXN0 IGJlIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZQorICogbWFpbiBwbGFuIHRyZWUgYW5kIGFsbCBz dWJwbGFucyBmcm9tIHRoZSBQbGFubmVkU3RtdC4KKyAqCisgKiAncnRfaWRlbnRpZmllcnMnIGlz IGEgdGFibGUgb2YgdW5pcXVlIGlkZW50aWZpZXJzLCBvbmUgZm9yIGVhY2ggUlRJLgorICogU2Vl IHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQoKS4KKyAqCisgKiBSZXN1 bHRzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJ2J1ZicuCisgKi8KK3ZvaWQKK3BncGFfb3V0cHV0X2Fk dmljZShTdHJpbmdJbmZvIGJ1ZiwgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJ CQkJICAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycykKK3sKKwlJbmRleAkJcnRhYmxl X2xlbmd0aCA9IGxpc3RfbGVuZ3RoKHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJTGlzdENlbGwg ICAqbGM7CisJcGdwYV9vdXRwdXRfY29udGV4dCBjb250ZXh0OworCisJLyogQmFzaWMgaW5pdGlh bGl6YXRpb24uICovCisJbWVtc2V0KCZjb250ZXh0LCAwLCBzaXplb2YocGdwYV9vdXRwdXRfY29u dGV4dCkpOworCWNvbnRleHQuYnVmID0gYnVmOworCisJLyoKKwkgKiBDb252ZXJ0IGlkZW50aWZp ZXJzIHRvIHN0cmluZyBmb3JtLiBOb3RlIHRoYXQgdGhlIGxvb3AgdmFyaWFibGUgaGVyZSBpcwor CSAqIG5vdCBhbiBSVEksIGJlY2F1c2UgUlRJcyBhcmUgMS1iYXNlZC4gU29tZSBSVElzIHdpbGwg aGF2ZSBubworCSAqIGlkZW50aWZpZXIsIGVpdGhlciBiZWNhdXNlIHRoZSByZWxvcHRraW5kIGlz IFJURV9KT0lOIG9yIGJlY2F1c2UgdGhhdAorCSAqIHBvcnRpb24gb2YgdGhlIHF1ZXJ5IGRpZG4n dCBtYWtlIGl0IGludG8gdGhlIGZpbmFsIHBsYW4uCisJICovCisJY29udGV4dC5yaWRfc3RyaW5n cyA9IHBhbGxvYzBfYXJyYXkoY29uc3QgY2hhciAqLCBydGFibGVfbGVuZ3RoKTsKKwlmb3IgKGlu dCBpID0gMDsgaSA8IHJ0YWJsZV9sZW5ndGg7ICsraSkKKwkJaWYgKHJ0X2lkZW50aWZpZXJzW2ld LmFsaWFzX25hbWUgIT0gTlVMTCkKKwkJCWNvbnRleHQucmlkX3N0cmluZ3NbaV0gPSBwZ3BhX2lk ZW50aWZpZXJfc3RyaW5nKCZydF9pZGVudGlmaWVyc1tpXSk7CisKKwkvKgorCSAqIElmIHRoZSB1 c2VyIGNob29zZXMgdG8gdXNlIEVYUExBSU4gKFBMQU5fQURWSUNFKSBpbiBhbiA4MC1jb2x1bW4g d2luZG93CisJICogZnJvbSBhIHBzcWwgY2xpZW50IHdpdGggZGVmYXVsdCBzZXR0aW5ncywgcHNx bCB3aWxsIGFkZCBvbmUgc3BhY2UgdG8KKwkgKiB0aGUgbGVmdCBvZiB0aGUgb3V0cHV0IGFuZCBF WFBMQUlOIHdpbGwgYWRkIHR3byBtb3JlIHRvIHRoZSBsZWZ0IG9mIHRoZQorCSAqIGFkdmljZS4g VGh1cywgbGluZXMgb2YgbW9yZSB0aGFuIDc3IGNoYXJhY3RlcnMgd2lsbCB3cmFwLiBXZSBzZXQg dGhlCisJICogd3JhcCBsaW1pdCB0byA3NiBoZXJlIHNvIHRoYXQgdGhlIG91dHB1dCB3b24ndCBy ZWFjaCBhbGwgdGhlIHdheSB0byB0aGUKKwkgKiB2ZXJ5IGxhc3QgY29sdW1uIG9mIHRoZSB0ZXJt aW5hbC4KKwkgKgorCSAqIE9mIGNvdXJzZSwgdGhpcyBpcyBmYWlybHkgYXJiaXRyYXJ5IHNldCBv ZiBhc3N1bXB0aW9ucywgYW5kIG9uZSBjb3VsZAorCSAqIHdlbGwgbWFrZSBhbiBhcmd1bWVudCBm b3IgYSBkaWZmZXJlbnQgd3JhcCBsaW1pdCwgb3IgZm9yIGEgY29uZmlndXJhYmxlCisJICogb25l LgorCSAqLworCWNvbnRleHQud3JhcF9jb2x1bW4gPSA3NjsKKworCS8qCisJICogRWFjaCBwaWVj ZSBvZiBKT0lOX09SREVSKCkgYWR2aWNlIGZ1bGx5IGRlc2NyaWJlcyB0aGUgam9pbiBvcmRlciBm b3IgYQorCSAqIGEgc2luZ2xlIHVucm9sbGVkIGpvaW4uIE1lcmdpbmcgaXMgbm90IHBlcm1pdHRl ZCwgYmVjYXVzZSB0aGF0IHdvdWxkCisJICogY2hhbmdlIHRoZSBtZWFuaW5nLCBlLmcuIFNFUV9T Q0FOKGEgYiBjIGQpIG1lYW5zIHNpbXBseSB0aGF0IHNlcXVlbnRpYWwKKwkgKiBzY2FucyBzaG91 bGQgYmUgdXNlZCBmb3IgYWxsIG9mIHRob3NlIHJlbGF0aW9ucywgYW5kIGlzIHRodXMgZXF1aXZh bGVudAorCSAqIHRvIFNFUV9TQ0FOKGEgYikgU0VRX1NDQU4oYyBkKSwgYnV0IEpPSU5fT1JERVIo YSBiIGMgZCkgbWVhbnMgdGhhdCAiYSIKKwkgKiBpcyB0aGUgZHJpdmluZyB0YWJsZSB3aGljaCBp cyB0aGVuIGpvaW5lZCB0byAiYiIgdGhlbiAiYyIgdGhlbiAiZCIsCisJICogd2hpY2ggaXMgdG90 YWxseSBkaWZmZXJlbnQgZnJvbSBKT0lOX09SREVSKGEgYikgYW5kIEpPSU5fT1JERVIoYyBkKS4K KwkgKi8KKwlmb3JlYWNoKGxjLCB3YWxrZXItPnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zKQorCXsK KwkJcGdwYV91bnJvbGxlZF9qb2luICp1am9pbiA9IGxmaXJzdChsYyk7CisKKwkJaWYgKGJ1Zi0+ bGVuID4gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJ1xuJyk7CisJCWFwcGVuZFN0 cmluZ0luZm8oY29udGV4dC5idWYsICJKT0lOX09SREVSKCIpOworCQlwZ3BhX291dHB1dF91bnJv bGxlZF9qb2luKCZjb250ZXh0LCB1am9pbik7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRl eHQuYnVmLCAnKScpOworCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LmJ1ZiwgY29udGV4 dC53cmFwX2NvbHVtbik7CisJfQorCisJLyogRW1pdCBqb2luIHN0cmF0ZWd5IGFkdmljZS4gKi8K Kwlmb3IgKGludCBzID0gMDsgcyA8IE5VTV9QR1BBX0pPSU5fU1RSQVRFR1k7ICsrcykKKwl7CisJ CWNoYXIJICAgKnN0cmF0ZWd5ID0gcGdwYV9jc3RyaW5nX2pvaW5fc3RyYXRlZ3kocyk7CisKKwkJ cGdwYV9vdXRwdXRfc2ltcGxlX3N0cmF0ZWd5KCZjb250ZXh0LAorCQkJCQkJCQkJc3RyYXRlZ3ks CisJCQkJCQkJCQl3YWxrZXItPmpvaW5fc3RyYXRlZ2llc1tzXSk7CisJfQorCisJLyoKKwkgKiBF bWl0IHNjYW4gc3RyYXRlZ3kgYWR2aWNlIChidXQgbm90IGZvciBvcmRpbmFyeSBzY2Fucywgd2hp Y2ggYXJlCisJICogZGVmaW5pdGlvbmFsbHkgdW5pbnRlcmVzdGluZykuCisJICovCisJZm9yIChp bnQgYyA9IDA7IGMgPCBOVU1fUEdQQV9TQ0FOX1NUUkFURUdZOyArK2MpCisJCWlmIChjICE9IFBH UEFfU0NBTl9PUkRJTkFSWSkKKwkJCXBncGFfb3V0cHV0X3NjYW5fc3RyYXRlZ3koJmNvbnRleHQs IGMsIHdhbGtlci0+c2NhbnNbY10pOworCisJLyogRW1pdCBxdWVyeSBmZWF0dXJlIGFkdmljZS4g Ki8KKwlmb3IgKGludCB0ID0gMDsgdCA8IE5VTV9QR1BBX1FGX1RZUEVTOyArK3QpCisJCXBncGFf b3V0cHV0X3F1ZXJ5X2ZlYXR1cmUoJmNvbnRleHQsIHQsIHdhbGtlci0+cXVlcnlfZmVhdHVyZXNb dF0pOworCisJLyogRW1pdCBOT19HQVRIRVIgYWR2aWNlLiAqLworCXBncGFfb3V0cHV0X25vX2dh dGhlcigmY29udGV4dCwgd2Fsa2VyLT5ub19nYXRoZXJfc2NhbnMpOworfQorCisvKgorICogT3V0 cHV0IHRoZSBtZW1iZXJzIG9mIGFuIHVucm9sbGVkIGpvaW4sIGZpcnN0IHRoZSBvdXRlcm1vc3Qg bWVtYmVyLCBhbmQKKyAqIHRoZW4gdGhlIGlubmVyIG1lbWJlcnMgb25lIGJ5IG9uZSwgYXMgcGFy dCBvZiBKT0lOX09SREVSKCkgYWR2aWNlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRf dW5yb2xsZWRfam9pbihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJICBwZ3Bh X3Vucm9sbGVkX2pvaW4gKmpvaW4pCit7CisJcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIoY29udGV4 dCwgJmpvaW4tPm91dGVyKTsKKworCWZvciAoaW50IGsgPSAwOyBrIDwgam9pbi0+bmlubmVyOyAr K2spCisJeworCQlwZ3BhX2pvaW5fbWVtYmVyICptZW1iZXIgPSAmam9pbi0+aW5uZXJba107CisK KwkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVt bik7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJcGdwYV9v dXRwdXRfam9pbl9tZW1iZXIoY29udGV4dCwgbWVtYmVyKTsKKwl9Cit9CisKKy8qCisgKiBPdXRw dXQgYSBzaW5nbGUgbWVtYmVyIG9mIGFuIHVucm9sbGVkIGpvaW4gYXMgcGFydCBvZiBKT0lOX09S REVSKCkgYWR2aWNlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIo cGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCXBncGFfam9pbl9tZW1iZXIgKm1l bWJlcikKK3sKKwlpZiAobWVtYmVyLT51bnJvbGxlZF9qb2luICE9IE5VTEwpCisJeworCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcoJyk7CisJCXBncGFfb3V0cHV0X3Vucm9s bGVkX2pvaW4oY29udGV4dCwgbWVtYmVyLT51bnJvbGxlZF9qb2luKTsKKwkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCX0KKwllbHNlCisJeworCQlwZ3BhX3NjYW4g ICpzY2FuID0gbWVtYmVyLT5zY2FuOworCisJCUFzc2VydChzY2FuICE9IE5VTEwpOworCQlpZiAo Ym1zX21lbWJlcnNoaXAoc2Nhbi0+cmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9v dXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsKKwkJ ZWxzZQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICd7Jyk7CisJ CQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5yZWxp ZHMpOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnfScpOworCQl9CisJ fQorfQorCisvKgorICogT3V0cHV0IGFkdmljZSBmb3IgYSBMaXN0IG9mIHBncGFfc2NhbiBvYmpl Y3RzLgorICoKKyAqIEFsbCB0aGUgc2NhbnMgbXVzdCB1c2UgdGhlIHN0cmF0ZWd5IHNwZWNpZmll ZCBieSB0aGUgInN0cmF0ZWd5IiBhcmd1bWVudC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0 cHV0X3NjYW5fc3RyYXRlZ3kocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCSAg cGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJICBMaXN0ICpzY2FucykKK3sKKwli b29sCQlmaXJzdCA9IHRydWU7CisKKwlpZiAoc2NhbnMgPT0gTklMKQorCQlyZXR1cm47CisKKwlp ZiAoY29udGV4dC0+YnVmLT5sZW4gPiAwKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0 LT5idWYsICdcbicpOworCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAiJXMoIiwKKwkJ CQkJIHBncGFfY3N0cmluZ19zY2FuX3N0cmF0ZWd5KHN0cmF0ZWd5KSk7CisKKwlmb3JlYWNoX3B0 cihwZ3BhX3NjYW4sIHNjYW4sIHNjYW5zKQorCXsKKwkJUGxhbgkgICAqcGxhbiA9IHNjYW4tPnBs YW47CisKKwkJaWYgKGZpcnN0KQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlw Z3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsK KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCS8q IE91dHB1dCB0aGUgcmVsYXRpb24gaWRlbnRpZmllcnMuICovCisJCWlmIChibXNfbWVtYmVyc2hp cChzY2FuLT5yZWxpZHMpID09IEJNU19TSU5HTEVUT04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlv bnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5yZWxpZHMpOworCQllbHNlCisJCXsKKwkJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKwkJCXBncGFfb3V0cHV0 X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHNjYW4tPnJlbGlkcyk7CisJCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJCX0KKworCQkvKiBGb3IgaW5k ZXggb3IgaW5kZXgtb25seSBzY2Fucywgb3V0cHV0IGluZGV4IGluZm9ybWF0aW9uLiAqLworCQlp ZiAoc3RyYXRlZ3kgPT0gUEdQQV9TQ0FOX0lOREVYKQorCQl7CisJCQlBc3NlcnQoSXNBKHBsYW4s IEluZGV4U2NhbikpOworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250 ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYs ICcgJyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbl9uYW1lKGNvbnRleHQsICgoSW5kZXhTY2Fu ICopIHBsYW4pLT5pbmRleGlkKTsKKwkJfQorCQllbHNlIGlmIChzdHJhdGVneSA9PSBQR1BBX1ND QU5fSU5ERVhfT05MWSkKKwkJeworCQkJQXNzZXJ0KElzQShwbGFuLCBJbmRleE9ubHlTY2FuKSk7 CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29s dW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJCXBn cGFfb3V0cHV0X3JlbGF0aW9uX25hbWUoY29udGV4dCwKKwkJCQkJCQkJCSAgKChJbmRleE9ubHlT Y2FuICopIHBsYW4pLT5pbmRleGlkKTsKKwkJfQorCX0KKworCWFwcGVuZFN0cmluZ0luZm9DaGFy KGNvbnRleHQtPmJ1ZiwgJyknKTsKKwlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYs IGNvbnRleHQtPndyYXBfY29sdW1uKTsKK30KKworLyoKKyAqIE91dHB1dCBhIHNjaGVtYS1xdWFs aWZpZWQgcmVsYXRpb24gbmFtZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3JlbGF0 aW9uX25hbWUocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgT2lkIHJlbGlkKQoreworCU9p ZAkJCW5zcG9pZCA9IGdldF9yZWxfbmFtZXNwYWNlKHJlbGlkKTsKKwljaGFyCSAgICpyZWxuYW1l c3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChuc3BvaWQpOworCWNoYXIJICAgKnJl bG5hbWUgPSBnZXRfcmVsX25hbWUocmVsaWQpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhj b250ZXh0LT5idWYsIHF1b3RlX2lkZW50aWZpZXIocmVsbmFtZXNwYWNlKSk7CisJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnLicpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco Y29udGV4dC0+YnVmLCBxdW90ZV9pZGVudGlmaWVyKHJlbG5hbWUpKTsKK30KKworLyoKKyAqIE91 dHB1dCBhZHZpY2UgZm9yIGEgTGlzdCBvZiBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgb2JqZWN0cy4KKyAq CisgKiBBbGwgZmVhdHVyZXMgbXVzdCBiZSBvZiB0aGUgdHlwZSBzcGVjaWZpZWQgYnkgdGhlICJ0 eXBlIiBhcmd1bWVudC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3F1ZXJ5X2ZlYXR1 cmUocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJ CQkgIExpc3QgKnF1ZXJ5X2ZlYXR1cmVzKQoreworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlm IChxdWVyeV9mZWF0dXJlcyA9PSBOSUwpCisJCXJldHVybjsKKworCWlmIChjb250ZXh0LT5idWYt PmxlbiA+IDApCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ1xuJyk7CisJ YXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIlcygiLAorCQkJCQkgcGdwYV9jc3RyaW5n X3F1ZXJ5X2ZlYXR1cmVfdHlwZSh0eXBlKSk7CisKKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2Zl YXR1cmUsIHFmLCBxdWVyeV9mZWF0dXJlcykKKwl7CisJCWlmIChmaXJzdCkKKwkJCWZpcnN0ID0g ZmFsc2U7CisJCWVsc2UKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVm LCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0 LT5idWYsICcgJyk7CisJCX0KKworCQlpZiAoYm1zX21lbWJlcnNoaXAocWYtPnJlbGlkcykgPT0g Qk1TX1NJTkdMRVRPTikKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0 LT5idWYsIHFmLT5yZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFy KGNvbnRleHQtPmJ1ZiwgJygnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBj b250ZXh0LT5idWYsIHFmLT5yZWxpZHMpOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4 dC0+YnVmLCAnKScpOworCQl9CisJfQorCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+ YnVmLCAnKScpOworCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+ d3JhcF9jb2x1bW4pOworfQorCisvKgorICogT3V0cHV0ICJzaW1wbGUiIGFkdmljZSBmb3IgYSBM aXN0IG9mIEJpdG1hcHNldCBvYmplY3RzIGVhY2ggb2Ygd2hpY2gKKyAqIGNvbnRhaW5zIG9uZSBv ciBtb3JlIFJUSXMuCisgKgorICogQnkgc2ltcGxlLCB3ZSBqdXN0IG1lYW4gdGhhdCB0aGUgYWR2 aWNlIGVtaXR0ZWQgZm9sbG93cyB0aGUgbW9zdAorICogc3RyYWlnaHRmb3J3YXJkIHBhdHRlcm46 IHRoZSBzdHJhdGVneSBuYW1lLCBmb2xsb3dlZCBieSBhIGxpc3Qgb2YgaXRlbXMKKyAqIHNlcGFy YXRlZCBieSBzcGFjZXMgYW5kIHN1cnJvdW5kZWQgYnkgcGFyZW50aGVzZXMuIEluZGl2aWR1YWwg aXRlbXMgaW4KKyAqIHRoZSBsaXN0IGFyZSBhIHNpbmdsZSByZWxhdGlvbiBpZGVudGlmaWVyIGZv ciBhIEJpdG1hcHNldCB0aGF0IGNvbnRhaW5zCisgKiBqdXN0IG9uZSBtZW1iZXIsIG9yIGEgc3Vi LWxpc3QgYWdhaW4gc2VwYXJhdGVkIGJ5IHNwYWNlcyBhbmQgc3Vycm91bmRlZAorICogYnkgcGFy ZW50aGVzZXMgZm9yIGEgQml0bWFwc2V0IHdpdGggbXVsdGlwbGUgbWVtYmVycy4gQml0bWFwc2V0 cyB3aXRoCisgKiBubyBtZW1iZXJzIHByb2JhYmx5IHNob3VsZG4ndCBvY2N1ciBoZXJlLCBidXQg aWYgdGhleSBkbyB0aGV5J2xsIGJlCisgKiByZW5kZXJlZCBhcyBhbiBlbXB0eSBzdWItbGlzdC4K KyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3NpbXBsZV9zdHJhdGVneShwZ3BhX291dHB1 dF9jb250ZXh0ICpjb250ZXh0LCBjaGFyICpzdHJhdGVneSwKKwkJCQkJCQlMaXN0ICpyZWxpZF9z ZXRzKQoreworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlmIChyZWxpZF9zZXRzID09IE5JTCkK KwkJcmV0dXJuOworCisJaWYgKGNvbnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoY29udGV4dC0+YnVmLCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQt PmJ1ZiwgIiVzKCIsIHN0cmF0ZWd5KTsKKworCWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIHJlbGlk cywgcmVsaWRfc2V0cykKKwl7CisJCWlmIChmaXJzdCkKKwkJCWZpcnN0ID0gZmFsc2U7CisJCWVs c2UKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53 cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7 CisJCX0KKworCQlpZiAoYm1zX21lbWJlcnNoaXAocmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQor CQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcmVsaWRzKTsK KwkJZWxzZQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcoJyk7 CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCByZWxpZHMp OworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCQl9CisJfQor CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCXBncGFfbWF5YmVf bGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworfQorCisvKgor ICogT3V0cHV0IE5PX0dBVEhFUiBhZHZpY2UgZm9yIGFsbCByZWxhdGlvbnMgbm90IGFwcGVhcmlu ZyBiZW5lYXRoIGFueQorICogR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLgorICovCitzdGF0 aWMgdm9pZAorcGdwYV9vdXRwdXRfbm9fZ2F0aGVyKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRl eHQsIEJpdG1hcHNldCAqcmVsaWRzKQoreworCWlmIChyZWxpZHMgPT0gTlVMTCkKKwkJcmV0dXJu OworCWlmIChjb250ZXh0LT5idWYtPmxlbiA+IDApCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNv bnRleHQtPmJ1ZiwgJ1xuJyk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYs ICJOT19HQVRIRVIoIik7CisJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQt PmJ1ZiwgcmVsaWRzKTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7 Cit9CisKKy8qCisgKiBPdXRwdXQgdGhlIGlkZW50aWZpZXJzIGZvciBlYWNoIFJUSSBpbiB0aGUg cHJvdmlkZWQgc2V0LgorICoKKyAqIElkZW50aWZpZXJzIGFyZSBzZXBhcmF0ZWQgYnkgc3BhY2Vz LCBhbmQgYSBsaW5lIGJyZWFrIGlzIHBvc3NpYmxlIGFmdGVyCisgKiBlYWNoIG9uZS4KKyAqLwor c3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3JlbGF0aW9ucyhwZ3BhX291dHB1dF9jb250ZXh0ICpj b250ZXh0LCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlp bnQJCQlydGkgPSAtMTsKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwl3aGlsZSAoKHJ0aSA9IGJt c19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aSkpID49IDApCisJeworCQljb25zdCBjaGFyICpyaWRf c3RyaW5nID0gY29udGV4dC0+cmlkX3N0cmluZ3NbcnRpIC0gMV07CisKKwkJaWYgKHJpZF9zdHJp bmcgPT0gTlVMTCkKKwkJCWVsb2coRVJST1IsICJubyBpZGVudGlmaWVyIGZvciBSVEkgJWQiLCBy dGkpOworCisJCWlmIChmaXJzdCkKKwkJeworCQkJZmlyc3QgPSBmYWxzZTsKKwkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoYnVmLCByaWRfc3RyaW5nKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBn cGFfbWF5YmVfbGluZWJyZWFrKGJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICIgJXMiLCByaWRfc3RyaW5nKTsKKwkJfQorCX0KK30KKworLyoKKyAq IEdldCBhIEMgc3RyaW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHNwZWNpZmllZCBqb2luIHN0 cmF0ZWd5LgorICovCitzdGF0aWMgY2hhciAqCitwZ3BhX2NzdHJpbmdfam9pbl9zdHJhdGVneShw Z3BhX2pvaW5fc3RyYXRlZ3kgc3RyYXRlZ3kpCit7CisJc3dpdGNoIChzdHJhdGVneSkKKwl7CisJ CWNhc2UgSlNUUkFUX01FUkdFX0pPSU5fUExBSU46CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fUExB SU4iOworCQljYXNlIEpTVFJBVF9NRVJHRV9KT0lOX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJN RVJHRV9KT0lOX01BVEVSSUFMSVpFIjsKKwkJY2FzZSBKU1RSQVRfTkVTVEVEX0xPT1BfUExBSU46 CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX1BMQUlOIjsKKwkJY2FzZSBKU1RSQVRfTkVTVEVEX0xP T1BfTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX01BVEVSSUFMSVpFIjsKKwkJ Y2FzZSBKU1RSQVRfTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJCXJldHVybiAiTkVTVEVEX0xPT1Bf TUVNT0laRSI7CisJCWNhc2UgSlNUUkFUX0hBU0hfSk9JTjoKKwkJCXJldHVybiAiSEFTSF9KT0lO IjsKKwl9CisKKwlwZ191bnJlYWNoYWJsZSgpOworCXJldHVybiBOVUxMOworfQorCisvKgorICog R2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVkIHNjYW4gc3Ry YXRlZ3kuCisgKi8KK3N0YXRpYyBjaGFyICoKK3BncGFfY3N0cmluZ19zY2FuX3N0cmF0ZWd5KHBn cGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSkKK3sKKwlzd2l0Y2ggKHN0cmF0ZWd5KQorCXsKKwkJ Y2FzZSBQR1BBX1NDQU5fT1JESU5BUlk6CisJCQlyZXR1cm4gIk9SRElOQVJZX1NDQU4iOworCQlj YXNlIFBHUEFfU0NBTl9TRVE6CisJCQlyZXR1cm4gIlNFUV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1ND QU5fQklUTUFQX0hFQVA6CisJCQlyZXR1cm4gIkJJVE1BUF9IRUFQX1NDQU4iOworCQljYXNlIFBH UEFfU0NBTl9GT1JFSUdOOgorCQkJcmV0dXJuICJGT1JFSUdOX0pPSU4iOworCQljYXNlIFBHUEFf U0NBTl9JTkRFWDoKKwkJCXJldHVybiAiSU5ERVhfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX0lO REVYX09OTFk6CisJCQlyZXR1cm4gIklOREVYX09OTFlfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FO X1BBUlRJVElPTldJU0U6CisJCQlyZXR1cm4gIlBBUlRJVElPTldJU0UiOworCQljYXNlIFBHUEFf U0NBTl9USUQ6CisJCQlyZXR1cm4gIlRJRF9TQ0FOIjsKKwl9CisKKwlwZ191bnJlYWNoYWJsZSgp OworCXJldHVybiBOVUxMOworfQorCisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNw b25kcyB0byB0aGUgc3BlY2lmaWVkIHNjYW4gc3RyYXRlZ3kuCisgKi8KK3N0YXRpYyBjaGFyICoK K3BncGFfY3N0cmluZ19xdWVyeV9mZWF0dXJlX3R5cGUocGdwYV9xZl90eXBlIHR5cGUpCit7CisJ c3dpdGNoICh0eXBlKQorCXsKKwkJY2FzZSBQR1BBUUZfR0FUSEVSOgorCQkJcmV0dXJuICJHQVRI RVIiOworCQljYXNlIFBHUEFRRl9HQVRIRVJfTUVSR0U6CisJCQlyZXR1cm4gIkdBVEhFUl9NRVJH RSI7CisJCWNhc2UgUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUU6CisJCQlyZXR1cm4gIlNFTUlK T0lOX05PTl9VTklRVUUiOworCQljYXNlIFBHUEFRRl9TRU1JSk9JTl9VTklRVUU6CisJCQlyZXR1 cm4gIlNFTUlKT0lOX1VOSVFVRSI7CisJfQorCisKKwlwZ191bnJlYWNoYWJsZSgpOworCXJldHVy biBOVUxMOworfQorCisvKgorICogSW5zZXJ0IGEgbGluZSBicmVhayBpbnRvIHRoZSBTdHJpbmdJ bmZvRGF0YSwgaWYgbmVlZGVkLgorICoKKyAqIElmIHdyYXBfY29sdW1uIGlzIHplcm8gb3IgbmVn YXRpdmUsIHRoaXMgZG9lcyBub3RoaW5nLiBPdGhlcndpc2UsIHdlCisgKiBjb25zaWRlciBpbnNl cnRpbmcgYSBuZXdsaW5lLiBXZSBvbmx5IGluc2VydCBhIG5ld2xpbmUgaWYgdGhlIGxlbmd0aCBv ZgorICogdGhlIGxhc3QgbGluZSBpbiB0aGUgYnVmZmVyIGV4Y2VlZHMgd3JhcF9jb2x1bW4sIGFu ZCBub3QgaWYgd2UnZCBiZQorICogaW5zZXJ0aW5nIGEgbmV3bGluZSBhdCBvciBiZWZvcmUgdGhl IGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBsaW5lLgorICoKKyAqIFRoZSBwb3NpdGlvbiBhdCB3 aGljaCB0aGUgbmV3bGluZSBpcyBpbnNlcnRlZCBpcyBzaW1wbHkgd2hlcmV2ZXIgdGhlCisgKiBi dWZmZXIgZW5kZWQgdGhlIGxhc3QgdGltZSB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQuIEluIG90 aGVyIHdvcmRzLAorICogdGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBjYWxsIHRoaXMgZnVuY3Rp b24gZXZlcnkgdGltZSB3ZSByZWFjaCBhIGdvb2QKKyAqIHBsYWNlIGZvciBhIGxpbmUgYnJlYWsu CisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX21heWJlX2xpbmVicmVhayhTdHJpbmdJbmZvIGJ1Ziwg aW50IHdyYXBfY29sdW1uKQoreworCWNoYXIJICAgKnRyYWlsaW5nX25sOworCWludAkJCWxpbmVf c3RhcnQ7CisJaW50CQkJc2F2ZV9jdXJzb3I7CisKKwkvKiBJZiBsaW5lIHdyYXBwaW5nIGlzIGRp c2FibGVkLCBleGl0IHF1aWNrbHkuICovCisJaWYgKHdyYXBfY29sdW1uIDw9IDApCisJCXJldHVy bjsKKworCS8qCisJICogU2V0IGxpbmVfc3RhcnQgdG8gdGhlIGJ5dGUgb2Zmc2V0IHdpdGhpbiBi dWYtPmRhdGEgb2YgdGhlIGZpcnN0CisJICogY2hhcmFjdGVyIG9mIHRoZSBjdXJyZW50IGxpbmUs IHdoZXJlIHRoZSBjdXJyZW50IGxpbmUgbWVhbnMgdGhlIGxhc3QKKwkgKiBvbmUgaW4gdGhlIGJ1 ZmZlci4gTm90ZSB0aGF0IGxpbmVfc3RhcnQgY291bGQgYmUgdGhlIG9mZnNldCBvZiB0aGUKKwkg KiB0cmFpbGluZyAnXDAnIGlmIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyIGlzIGEg bGluZSBicmVhay4KKwkgKi8KKwl0cmFpbGluZ19ubCA9IHN0cnJjaHIoYnVmLT5kYXRhLCAnXG4n KTsKKwlpZiAodHJhaWxpbmdfbmwgPT0gTlVMTCkKKwkJbGluZV9zdGFydCA9IDA7CisJZWxzZQor CQlsaW5lX3N0YXJ0ID0gKHRyYWlsaW5nX25sIC0gYnVmLT5kYXRhKSArIDE7CisKKwkvKgorCSAq IFJlbWVtYmVyIHRoYXQgdGhlIGN1cnJlbnQgZW5kIG9mIHRoZSBidWZmZXIgaXMgYSBwb3RlbnRp YWwgbG9jYXRpb24gdG8KKwkgKiBpbnNlcnQgYSBsaW5lIGJyZWFrIG9uIGEgZnV0dXJlIGNhbGwg dG8gdGhpcyBmdW5jdGlvbi4KKwkgKi8KKwlzYXZlX2N1cnNvciA9IGJ1Zi0+Y3Vyc29yOworCWJ1 Zi0+Y3Vyc29yID0gYnVmLT5sZW47CisKKwkvKiBJZiB3ZSBoYXZlbid0IHBhc3NlZCB0aGUgd3Jh cCBjb2x1bW4sIHdlIGRvbid0IG5lZWQgYSBuZXdsaW5lLiAqLworCWlmIChidWYtPmxlbiAtIGxp bmVfc3RhcnQgPD0gd3JhcF9jb2x1bW4pCisJCXJldHVybjsKKworCS8qCisJICogSXQgb25seSBt YWtlcyBzZW5zZSB0byBpbnNlcnQgYSBuZXdsaW5lIGF0IGEgcG9zaXRpb24gbGF0ZXIgdGhhbiB0 aGUKKwkgKiBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgbGluZS4KKwkgKi8KKwlpZiAoYnVmLT5j dXJzb3IgPD0gbGluZV9zdGFydCkKKwkJcmV0dXJuOworCisJLyogSW5zZXJ0IGEgbmV3bGluZSBh dCB0aGUgcHJldmlvdXMgY3Vyc29yIGxvY2F0aW9uLiAqLworCWVubGFyZ2VTdHJpbmdJbmZvKGJ1 ZiwgMSk7CisJbWVtbW92ZSgmYnVmLT5kYXRhW3NhdmVfY3Vyc29yXSArIDEsICZidWYtPmRhdGFb c2F2ZV9jdXJzb3JdLAorCQkJYnVmLT5sZW4gLSBzYXZlX2N1cnNvcik7CisJKytidWYtPmN1cnNv cjsKKwlidWYtPmRhdGFbKytidWYtPmxlbl0gPSAnXDAnOworCWJ1Zi0+ZGF0YVtzYXZlX2N1cnNv cl0gPSAnXG4nOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291 dHB1dC5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40NzQ5NmQ3NmY1MgotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuaApAQCAtMCwwICsxLDIyIEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX291dHB1dC5oCisgKgkgIHByb2R1Y2Ug dGV4dHVhbCBvdXRwdXQgZnJvbSB0aGUgcmVzdWx0cyBvZiBhIHBsYW4gdHJlZSB3YWxrCisgKgor ICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKKyAq CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX09VVFBVVF9ICisjZGVmaW5l IFBHUEFfT1VUUFVUX0gKKworI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorI2luY2x1ZGUg InBncGFfd2Fsa2VyLmgiCisKK2V4dGVybiB2b2lkIHBncGFfb3V0cHV0X2FkdmljZShTdHJpbmdJ bmZvIGJ1ZiwKKwkJCQkJCQkgICBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJ CQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzKTsKKworI2VuZGlmCmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjRjM2EzZWQ2ZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3BhcnNlci55CkBAIC0wLDAgKzEsMzAxIEBACisleworLyoKKyAqIFBhcnNl ciBmb3IgcGxhbiBhZHZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAyNSwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfcGFyc2VyLnkKKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1 ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiZm1nci5oIgorI2lu Y2x1ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisj aW5jbHVkZSAidXRpbHMvZmxvYXQuaCIKKworI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVk ZSAicGdwYV9wYXJzZXIuaCIKKworLyoKKyAqIEJpc29uIGRvZXNuJ3QgYWxsb2NhdGUgYW55dGhp bmcgdGhhdCBuZWVkcyB0byBsaXZlIGFjcm9zcyBwYXJzZXIgY2FsbHMsCisgKiBzbyB3ZSBjYW4g ZWFzaWx5IGhhdmUgaXQgdXNlIHBhbGxvYyBpbnN0ZWFkIG9mIG1hbGxvYy4gIFRoaXMgcHJldmVu dHMKKyAqIG1lbW9yeSBsZWFrcyBpZiB3ZSBlcnJvciBvdXQgZHVyaW5nIHBhcnNpbmcuCisgKi8K KyNkZWZpbmUgWVlNQUxMT0MgcGFsbG9jCisjZGVmaW5lIFlZRlJFRSAgIHBmcmVlCislfQorCisv KiBCSVNPTiBEZWNsYXJhdGlvbnMgKi8KKyVwYXJzZS1wYXJhbSB7TGlzdCAqKnJlc3VsdH0KKyVw YXJzZS1wYXJhbSB7Y2hhciAqKnBhcnNlX2Vycm9yX21zZ19wfQorJXBhcnNlLXBhcmFtIHt5eXNj YW5fdCB5eXNjYW5uZXJ9CislbGV4LXBhcmFtIHtMaXN0ICoqcmVzdWx0fQorJWxleC1wYXJhbSB7 Y2hhciAqKnBhcnNlX2Vycm9yX21zZ19wfQorJWxleC1wYXJhbSB7eXlzY2FuX3QgeXlzY2FubmVy fQorJXB1cmUtcGFyc2VyCislZXhwZWN0IDAKKyVuYW1lLXByZWZpeD0icGdwYV95eSIKKworJXVu aW9uCit7CisJY2hhcgkgICAqc3RyOworCWludAkJCWludGVnZXI7CisJTGlzdAkgICAqbGlzdDsK KwlwZ3BhX2FkdmljZV9pdGVtICppdGVtOworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0Owor CXBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0OworfQorJXRva2VuIDxzdHI+IFRPS19JREVOVCBU T0tfVEFHX0pPSU5fT1JERVIgVE9LX1RBR19JTkRFWAorJXRva2VuIDxzdHI+IFRPS19UQUdfU0lN UExFIFRPS19UQUdfR0VORVJJQworJXRva2VuIDxpbnRlZ2VyPiBUT0tfSU5URUdFUgorCisldHlw ZSA8aW50ZWdlcj4gb3B0X3JpX29jY3VycmVuY2UKKyV0eXBlIDxpdGVtPiBhZHZpY2VfaXRlbQor JXR5cGUgPGxpc3Q+IGFkdmljZV9pdGVtX2xpc3QgZ2VuZXJpY190YXJnZXRfbGlzdAorJXR5cGUg PGxpc3Q+IGluZGV4X3RhcmdldF9saXN0IGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3QKKyV0eXBlIDxs aXN0PiBvcHRfcGFydGl0aW9uIHNpbXBsZV90YXJnZXRfbGlzdAorJXR5cGUgPHN0cj4gaWRlbnRp ZmllciBvcHRfcGxhbl9uYW1lCisldHlwZSA8dGFyZ2V0PiBnZW5lcmljX3N1Ymxpc3Qgam9pbl9v cmRlcl9zdWJsaXN0CisldHlwZSA8dGFyZ2V0PiByZWxhdGlvbl9pZGVudGlmaWVyCisldHlwZSA8 aXRhcmdldD4gaW5kZXhfbmFtZQorCislc3RhcnQgcGFyc2VfdG9wbGV2ZWwKKworLyogR3JhbW1h ciBmb2xsb3dzICovCislJQorCitwYXJzZV90b3BsZXZlbDogYWR2aWNlX2l0ZW1fbGlzdAorCQl7 CisJCQkodm9pZCkgeXluZXJyczsJCQkJLyogc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAqLwor CQkJKnJlc3VsdCA9ICQxOworCQl9CisJOworCithZHZpY2VfaXRlbV9saXN0OiBhZHZpY2VfaXRl bV9saXN0IGFkdmljZV9pdGVtCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsg JCQgPSBOSUw7IH0KKwk7CisKK2FkdmljZV9pdGVtOiBUT0tfVEFHX0pPSU5fT1JERVIgJygnIGpv aW5fb3JkZXJfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdw YV9hZHZpY2VfaXRlbSk7CisJCQkkJC0+dGFnID0gUEdQQV9UQUdfSk9JTl9PUkRFUjsKKwkJCSQk LT50YXJnZXRzID0gJDM7CisJCQlpZiAoJDMgPT0gTklMKQorCQkJCXBncGFfeXllcnJvcihyZXN1 bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJICJKT0lOX09SREVSIG11 c3QgaGF2ZSBhdCBsZWFzdCBvbmUgdGFyZ2V0Iik7CisJCX0KKwl8IFRPS19UQUdfSU5ERVggJygn IGluZGV4X3RhcmdldF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFf YWR2aWNlX2l0ZW0pOworCQkJaWYgKHN0cmNtcCgkMSwgImluZGV4X29ubHlfc2NhbiIpID09IDAp CisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjsKKwkJCWVsc2UgaWYgKHN0 cmNtcCgkMSwgImluZGV4X3NjYW4iKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19JTkRF WF9TQ0FOOworCQkJZWxzZQorCQkJCWVsb2coRVJST1IsICJ0YWcgcGFyc2luZyBmYWlsZWQ6ICVz IiwgJDEpOworCQkJJCQtPnRhcmdldHMgPSAkMzsKKwkJfQorCXwgVE9LX1RBR19TSU1QTEUgJygn IHNpbXBsZV90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3Bh X2FkdmljZV9pdGVtKTsKKwkJCWlmIChzdHJjbXAoJDEsICJiaXRtYXBfaGVhcF9zY2FuIikgPT0g MCkKKwkJCQkkJC0+dGFnID0gUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTjsKKwkJCWVsc2UgaWYg KHN0cmNtcCgkMSwgIm5vX2dhdGhlciIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX05P X0dBVEhFUjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgInNlcV9zY2FuIikgPT0gMCkKKwkJCQkk JC0+dGFnID0gUEdQQV9UQUdfU0VRX1NDQU47CisJCQllbHNlIGlmIChzdHJjbXAoJDEsICJ0aWRf c2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX1RJRF9TQ0FOOworCQkJZWxzZQor CQkJCWVsb2coRVJST1IsICJ0YWcgcGFyc2luZyBmYWlsZWQ6ICVzIiwgJDEpOworCQkJJCQtPnRh cmdldHMgPSAkMzsKKwkJfQorCXwgVE9LX1RBR19HRU5FUklDICcoJyBnZW5lcmljX3RhcmdldF9s aXN0ICcpJworCQl7CisJCQlib29sCWZhaWw7CisKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdw YV9hZHZpY2VfaXRlbSk7CisJCQkkJC0+dGFnID0gcGdwYV9wYXJzZV9hZHZpY2VfdGFnKCQxLCAm ZmFpbCk7CisJCQlpZiAoZmFpbCkKKwkJCXsKKwkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJz ZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCSAidW5yZWNvZ25pemVkIGFkdmljZSB0 YWciKTsKKwkJCX0KKworCQkJaWYgKCQkLT50YWcgPT0gUEdQQV9UQUdfRk9SRUlHTl9KT0lOKQor CQkJeworCQkJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0LCAkMykKKwkJ CQl7CisJCQkJCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIgfHwK KwkJCQkJCWxpc3RfbGVuZ3RoKHRhcmdldC0+Y2hpbGRyZW4pID09IDEpCisJCQkJCQkJcGdwYV95 eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJCQkg IkZPUkVJR05fSk9JTiB0YXJnZXRzIG11c3QgY29udGFpbiBtb3JlIHRoYW4gb25lIHJlbGF0aW9u IGlkZW50aWZpZXIiKTsKKwkJCQl9CisJCQl9CisKKwkJCSQkLT50YXJnZXRzID0gJDM7CisJCX0K Kwk7CisKK3JlbGF0aW9uX2lkZW50aWZpZXI6IGlkZW50aWZpZXIgb3B0X3JpX29jY3VycmVuY2Ug b3B0X3BhcnRpdGlvbiBvcHRfcGxhbl9uYW1lCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3Qo cGdwYV9hZHZpY2VfdGFyZ2V0KTsKKwkJCSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX0lERU5USUZJ RVI7CisJCQkkJC0+cmlkLmFsaWFzX25hbWUgPSAkMTsKKwkJCSQkLT5yaWQub2NjdXJyZW5jZSA9 ICQyOworCQkJaWYgKGxpc3RfbGVuZ3RoKCQzKSA9PSAyKQorCQkJeworCQkJCSQkLT5yaWQucGFy dG5zcCA9IGxpbml0aWFsKCQzKTsKKwkJCQkkJC0+cmlkLnBhcnRyZWwgPSBsc2Vjb25kKCQzKTsK KwkJCX0KKwkJCWVsc2UgaWYgKCQzICE9IE5JTCkKKwkJCQkkJC0+cmlkLnBhcnRyZWwgPSBsaW5p dGlhbCgkMyk7CisJCQkkJC0+cmlkLnBsYW5fbmFtZSA9ICQ0OworCQl9CisJOworCitpbmRleF9u YW1lOiBpZGVudGlmaWVyCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9pbmRleF90 YXJnZXQpOworCQkJJCQtPmluZG5hbWUgPSAkMTsKKwkJfQorCXwgaWRlbnRpZmllciAnLicgaWRl bnRpZmllcgorCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfaW5kZXhfdGFyZ2V0KTsK KwkJCSQkLT5pbmRuYW1lc3BhY2UgPSAkMTsKKwkJCSQkLT5pbmRuYW1lID0gJDM7CisJCX0KKwk7 CisKK29wdF9yaV9vY2N1cnJlbmNlOgorCScjJyBUT0tfSU5URUdFUgorCQl7CisJCQlpZiAoJDIg PD0gMCkKKwkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2Fu bmVyLAorCQkJCQkJCSAib25seSBwb3NpdGl2ZSBvY2N1cnJlbmNlIG51bWJlcnMgYXJlIHBlcm1p dHRlZCIpOworCQkJJCQgPSAkMjsKKwkJfQorCXwKKwkJeworCQkJLyogVGhlIGRlZmF1bHQgb2Nj dXJyZW5jZSBudW1iZXIgaXMgMS4gKi8KKwkJCSQkID0gMTsKKwkJfQorCTsKKworaWRlbnRpZmll cjogVE9LX0lERU5UCisJfCBUT0tfVEFHX0pPSU5fT1JERVIKKwl8IFRPS19UQUdfSU5ERVgKKwl8 IFRPS19UQUdfU0lNUExFCisJfCBUT0tfVEFHX0dFTkVSSUMKKwk7CisKKy8qCisgKiBXaGVuIGdl bmVyYXRpbmcgYWR2aWNlLCB3ZSBhbHdheXMgc2NoZW1hLXF1YWxpZnkgdGhlIHBhcnRpdGlvbiBu YW1lLCBidXQKKyAqIHdoZW4gcGFyc2luZyBhZHZpY2UsIHdlIGFjY2VwdCBhIHNwZWNpZmljYXRp b24gdGhhdCBsYWNrcyBvbmUuCisgKi8KK29wdF9wYXJ0aXRpb246CisJJy8nIFRPS19JREVOVCAn LicgVE9LX0lERU5UCisJCXsgJCQgPSBsaXN0X21ha2UyKCQyLCAkNCk7IH0KKwl8ICcvJyBUT0tf SURFTlQKKwkJeyAkJCA9IGxpc3RfbWFrZTEoJDIpOyB9CisJfAorCQl7ICQkID0gTklMOyB9CisJ OworCitvcHRfcGxhbl9uYW1lOgorCSdAJyBUT0tfSURFTlQKKwkJeyAkJCA9ICQyOyB9CisJfAor CQl7ICQkID0gTlVMTDsgfQorCTsKKworZ2VuZXJpY190YXJnZXRfbGlzdDogZ2VuZXJpY190YXJn ZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVyCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0K Kwl8IGdlbmVyaWNfdGFyZ2V0X2xpc3QgZ2VuZXJpY19zdWJsaXN0CisJCXsgJCQgPSBsYXBwZW5k KCQxLCAkMik7IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2dlbmVyaWNfc3VibGlzdDog JygnIHNpbXBsZV90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChw Z3BhX2FkdmljZV90YXJnZXQpOworCQkJJCQtPnR0eXBlID0gUEdQQV9UQVJHRVRfT1JERVJFRF9M SVNUOworCQkJJCQtPmNoaWxkcmVuID0gJDI7CisJCX0KKwk7CisKK2luZGV4X3RhcmdldF9saXN0 OgorCSAgaW5kZXhfdGFyZ2V0X2xpc3QgcmVsYXRpb25faWRlbnRpZmllciBpbmRleF9uYW1lCisJ CXsKKwkJCSQyLT5pdGFyZ2V0ID0gJDM7CisJCQkkJCA9IGxhcHBlbmQoJDEsICQyKTsKKwkJfQor CXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworam9pbl9vcmRlcl90YXJnZXRfbGlzdDogam9pbl9v cmRlcl90YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVyCisJCXsgJCQgPSBsYXBwZW5kKCQx LCAkMik7IH0KKwl8IGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3Qgam9pbl9vcmRlcl9zdWJsaXN0CisJ CXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2pv aW5fb3JkZXJfc3VibGlzdDoKKwknKCcgam9pbl9vcmRlcl90YXJnZXRfbGlzdCAnKScKKwkJewor CQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCQkJJCQtPnR0eXBl ID0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOworCQkJJCQtPmNoaWxkcmVuID0gJDI7CisJCX0K Kwl8ICd7JyBzaW1wbGVfdGFyZ2V0X2xpc3QgJ30nCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmpl Y3QocGdwYV9hZHZpY2VfdGFyZ2V0KTsKKwkJCSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX1VOT1JE RVJFRF9MSVNUOworCQkJJCQtPmNoaWxkcmVuID0gJDI7CisJCX0KKwk7CisKK3NpbXBsZV90YXJn ZXRfbGlzdDogc2ltcGxlX3RhcmdldF9saXN0IHJlbGF0aW9uX2lkZW50aWZpZXIKKwkJeyAkJCA9 IGxhcHBlbmQoJDEsICQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworJSUKKworLyoK KyAqIFBhcnNlIGFuIGFkdmljZV9zdHJpbmcgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGxpc3Qg b2YgcGdwYV9hZHZpY2VfaXRlbQorICogb2JqZWN0cy4gSWYgYSBwYXJzZSBlcnJvciBvY2N1cnMs IGluc3RlYWQgcmV0dXJuIE5VTEwuCisgKgorICogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBOVUxM LCAqZXJyb3JfcCB3aWxsIGJlIHNldCB0byB0aGUgZXJyb3IgbWVzc2FnZTsKKyAqIG90aGVyd2lz ZSwgKmVycm9yX3Agd2lsbCBiZSBzZXQgdG8gTlVMTC4KKyAqLworTGlzdCAqCitwZ3BhX3BhcnNl KGNvbnN0IGNoYXIgKmFkdmljZV9zdHJpbmcsIGNoYXIgKiplcnJvcl9wKQoreworCXl5c2Nhbl90 CXNjYW5uZXI7CisJTGlzdAkgICAqcmVzdWx0OworCWNoYXIJICAgKmVycm9yID0gTlVMTDsKKwor CXBncGFfc2Nhbm5lcl9pbml0KGFkdmljZV9zdHJpbmcsICZzY2FubmVyKTsKKwlwZ3BhX3l5cGFy c2UoJnJlc3VsdCwgJmVycm9yLCBzY2FubmVyKTsKKwlwZ3BhX3NjYW5uZXJfZmluaXNoKHNjYW5u ZXIpOworCisJaWYgKGVycm9yICE9IE5VTEwpCisJeworCQkqZXJyb3JfcCA9IGVycm9yOworCQly ZXR1cm4gTlVMTDsKKwl9CisKKwkqZXJyb3JfcCA9IE5VTEw7CisJcmV0dXJuIHJlc3VsdDsKK30K ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi5jNzdkNjhkYzE0NQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKQEAgLTAsMCArMSwyMTY2IEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3BsYW5uZXIuYworICoJICBVc2UgcGxhbm5lciBob29r cyB0byBvYnNlcnZlIGFuZCBtb2RpZml5IHBsYW5uZXIgYmVoYXZpb3IKKyAqCisgKiBBbGwgaW50 ZXJhY3Rpb24gd2l0aCB0aGUgY29yZSBwbGFubmVyIGhhcHBlbnMgaGVyZS4gTXVjaCBvZiBpdCBo YXMgdG8KKyAqIGRvIHdpdGggZW5mb3JjaW5nIHN1cHBsaWVkIGFkdmljZSwgYnV0IHdlIGFsc28g bmVlZCB0aGVzZSBob29rcyB0bworICogZ2VuZXJhdGUgYWR2aWNlIHN0cmluZ3MgKHRob3VnaCB0 aGUgaGVhdnkgbGlmdGluZyBpbiB0aGF0IGNhc2UgaXMKKyAqIG1vc3RseSBkb25lIGJ5IHBncGFf d2Fsa2VyLmMpLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3BsYW5uZXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9z dGdyZXMuaCIKKworI2luY2x1ZGUgInBnX3BsYW5fYWR2aWNlLmgiCisjaW5jbHVkZSAicGdwYV9j b2xsZWN0b3IuaCIKKyNpbmNsdWRlICJwZ3BhX2lkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJwZ3Bh X291dHB1dC5oIgorI2luY2x1ZGUgInBncGFfcGxhbm5lci5oIgorI2luY2x1ZGUgInBncGFfdHJv dmUuaCIKKyNpbmNsdWRlICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAiY29tbWFuZHMvZGVm cmVtLmgiCisjaW5jbHVkZSAiY29tbW9uL2hhc2hmbl91bnN0YWJsZS5oIgorI2luY2x1ZGUgIm5v ZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9leHRlbmRwbGFuLmgiCisjaW5j bHVkZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhzLmgi CisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5jYXQuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGxh bm5lci5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKyNpbmNsdWRlICJ1dGlscy9s c3lzY2FjaGUuaCIKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKworLyoKKyAqIFdoZW4g YXNzZXJ0aW9ucyBhcmUgZW5hYmxlZCwgd2UgdHJ5IGdlbmVyYXRpbmcgcmVsYXRpb24gaWRlbnRp ZmllcnMgZHVyaW5nCisgKiBwbGFubmluZywgc2F2aW5nIHRoZW0gaW4gYSBoYXNoIHRhYmxlLCBh bmQgdGhlbiBjcm9zcy1jaGVja2luZyB0aGVtIGFnYWluc3QKKyAqIHRoZSBvbmVzIGdlbmVyYXRl ZCBhZnRlciBwbGFubmluZyBpcyBjb21wbGV0ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9y aV9jaGVja2VyX2tleQoreworCWNoYXIJICAgKnBsYW5fbmFtZTsKKwlJbmRleAkJcnRpOworfSBw Z3BhX3JpX2NoZWNrZXJfa2V5OworCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3JpX2NoZWNrZXIKK3sK KwlwZ3BhX3JpX2NoZWNrZXJfa2V5IGtleTsKKwl1aW50MzIJCXN0YXR1czsKKwljb25zdCBjaGFy ICpyaWRfc3RyaW5nOworfSBwZ3BhX3JpX2NoZWNrZXI7CisKK3N0YXRpYyB1aW50MzIgcGdwYV9y aV9jaGVja2VyX2hhc2hfa2V5KHBncGFfcmlfY2hlY2tlcl9rZXkga2V5KTsKKworc3RhdGljIGlu bGluZSBib29sCitwZ3BhX3JpX2NoZWNrZXJfY29tcGFyZV9rZXkocGdwYV9yaV9jaGVja2VyX2tl eSBhLCBwZ3BhX3JpX2NoZWNrZXJfa2V5IGIpCit7CisJaWYgKGEucnRpICE9IGIucnRpKQorCQly ZXR1cm4gZmFsc2U7CisJaWYgKGEucGxhbl9uYW1lID09IE5VTEwpCisJCXJldHVybiAoYi5wbGFu X25hbWUgPT0gTlVMTCk7CisJaWYgKGIucGxhbl9uYW1lID09IE5VTEwpCisJCXJldHVybiBmYWxz ZTsKKwlyZXR1cm4gc3RyY21wKGEucGxhbl9uYW1lLCBiLnBsYW5fbmFtZSkgPT0gMDsKK30KKwor I2RlZmluZSBTSF9QUkVGSVgJCQlwZ3BhX3JpX2NoZWNrCisjZGVmaW5lIFNIX0VMRU1FTlRfVFlQ RQkJcGdwYV9yaV9jaGVja2VyCisjZGVmaW5lIFNIX0tFWV9UWVBFCQkJcGdwYV9yaV9jaGVja2Vy X2tleQorI2RlZmluZSBTSF9LRVkJCQkJa2V5CisjZGVmaW5lIFNIX0hBU0hfS0VZKHRiLCBrZXkp CXBncGFfcmlfY2hlY2tlcl9oYXNoX2tleShrZXkpCisjZGVmaW5lCVNIX0VRVUFMKHRiLCBhLCBi KQlwZ3BhX3JpX2NoZWNrZXJfY29tcGFyZV9rZXkoYSwgYikKKyNkZWZpbmUgU0hfU0NPUEUJCQlz dGF0aWMgaW5saW5lCisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNkZWZpbmUgU0hfREVGSU5FCisjaW5j bHVkZSAibGliL3NpbXBsZWhhc2guaCIKKworI2VuZGlmCisKK3R5cGVkZWYgZW51bSBwZ3BhX2pv X291dGNvbWUKK3sKKwlQR1BBX0pPX1BFUk1JVFRFRCwJCQkvKiBwZXJtaXQgdGhpcyBqb2luIG9y ZGVyICovCisJUEdQQV9KT19ERU5JRUQsCQkJCS8qIGRlbnkgdGhpcyBqb2luIG9yZGVyICovCisJ UEdQQV9KT19JTkRJRkZFUkVOVAkJCS8qIGRvIG5laXRoZXIgKi8KK30gcGdwYV9qb19vdXRjb21l OworCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5uZXJfc3RhdGUKK3sKKwlFeHBsYWluU3RhdGUg KmV4cGxhaW5fc3RhdGU7CisJYm9vbAkJZ2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrOworCWJvb2wJ CWdlbmVyYXRlX2FkdmljZV9zdHJpbmc7CisJcGdwYV90cm92ZSAqdHJvdmU7CisJTWVtb3J5Q29u dGV4dCB0cm92ZV9jeHQ7CisJTGlzdAkgICAqc2pfdW5pcXVlX3JlbHM7CisKKyNpZmRlZiBVU0Vf QVNTRVJUX0NIRUNLSU5HCisJcGdwYV9yaV9jaGVja19oYXNoICpyaV9jaGVja19oYXNoOworI2Vu ZGlmCit9IHBncGFfcGxhbm5lcl9zdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9qb2luX3N0 YXRlCit7CisJLyogTW9zdC1yZWNlbnRseS1jb25zaWRlcmVkIG91dGVyIHJlbC4gKi8KKwlSZWxP cHRJbmZvICpvdXRlcnJlbDsKKworCS8qIE1vc3QtcmVjZW50bHktY29uc2lkZXJlZCBpbm5lciBy ZWwuICovCisJUmVsT3B0SW5mbyAqaW5uZXJyZWw7CisKKwkvKgorCSAqIEFycmF5IG9mIHJlbGF0 aW9uIGlkZW50aWZpZXJzIGZvciBhbGwgbWVtYmVycyBvZiB0aGlzIGpvaW5yZWwsIHdpdGgKKwkg KiBvdXRlcnJlbCBpZGVuaWZpZXJzIGJlZm9yZSBpbm5lcnJlbCBpZGVudGlmaWVycy4KKwkgKi8K KwlwZ3BhX2lkZW50aWZpZXIgKnJpZHM7CisKKwkvKiBOdW1iZXIgb2Ygb3V0ZXIgcmVsIGlkZW50 aWZpZXJzLiAqLworCWludAkJCW91dGVyX2NvdW50OworCisJLyogTnVtYmVyIG9mIGlubmVyIHJl bCBpZGVudGlmaWVycy4gKi8KKwlpbnQJCQlpbm5lcl9jb3VudDsKKworCS8qCisJICogVHJvdmUg bG9va3VwIHJlc3VsdHMuCisJICoKKwkgKiBqb2luX2VudHJpZXMgYW5kIHJlbF9lbnRyaWVzIGFy ZSBhcnJheXMgb2YgZW50cmllcywgYW5kIGpvaW5faW5kZXhlcworCSAqIGFuZCByZWxfaW5kZXhl cyBhcmUgdGhlIGludGVnZXIgb2Zmc2V0cyB3aXRoaW4gdGhvc2UgYXJyYXlzIG9mIGVudHJpZXMK KwkgKiBwb3RlbnRpYWxseSByZWxldmFudCB0byB1cy4gVGhlICJqb2luIiBmaWVsZHMgY29ycmVz cG9uZCB0byBhIGxvb2t1cAorCSAqIHVzaW5nIFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4gYW5kIHRo ZSAicmVsIiBmaWVsZHMgdG8gYSBsb29rdXAgdXNpbmcKKwkgKiBQR1BBX1RST1ZFX0xPT0tVUF9S RUwuCisJICovCisJcGdwYV90cm92ZV9lbnRyeSAqam9pbl9lbnRyaWVzOworCUJpdG1hcHNldCAg KmpvaW5faW5kZXhlczsKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICpyZWxfZW50cmllczsKKwlCaXRtYXBz ZXQgICpyZWxfaW5kZXhlczsKK30gcGdwYV9qb2luX3N0YXRlOworCisvKiBTYXZlZCBob29rIHZh bHVlcyAqLworc3RhdGljIGJ1aWxkX3NpbXBsZV9yZWxfaG9va190eXBlIHByZXZfYnVpbGRfc2lt cGxlX3JlbCA9IE5VTEw7CitzdGF0aWMgam9pbl9wYXRoX3NldHVwX2hvb2tfdHlwZSBwcmV2X2pv aW5fcGF0aF9zZXR1cCA9IE5VTEw7CitzdGF0aWMgam9pbnJlbF9zZXR1cF9ob29rX3R5cGUgcHJl dl9qb2lucmVsX3NldHVwID0gTlVMTDsKK3N0YXRpYyBwbGFubmVyX3NldHVwX2hvb2tfdHlwZSBw cmV2X3BsYW5uZXJfc2V0dXAgPSBOVUxMOworc3RhdGljIHBsYW5uZXJfc2h1dGRvd25faG9va190 eXBlIHByZXZfcGxhbm5lcl9zaHV0ZG93biA9IE5VTEw7CisKKy8qIE90aGVyIGdsb2JhbCB2YXJp YWJlcyAqLworc3RhdGljIGludAlwbGFubmVyX2V4dGVuc2lvbl9pZCA9IC0xOworCisvKiBGdW5j dGlvbiBwcm90b3R5cGVzLiAqLworc3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX3NldHVwKFBsYW5u ZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCQkgICBjb25zdCBjaGFyICpxdWVy eV9zdHJpbmcsCisJCQkJCQkJICAgaW50IGN1cnNvck9wdGlvbnMsCisJCQkJCQkJICAgZG91Ymxl ICp0dXBsZV9mcmFjdGlvbiwKKwkJCQkJCQkgICBFeHBsYWluU3RhdGUgKmVzKTsKK3N0YXRpYyB2 b2lkIHBncGFfcGxhbm5lcl9zaHV0ZG93bihQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFy c2UsCisJCQkJCQkJCSAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBQbGFubmVkU3RtdCAqcHN0 bXQpOworc3RhdGljIHZvaWQgcGdwYV9idWlsZF9zaW1wbGVfcmVsKFBsYW5uZXJJbmZvICpyb290 LAorCQkJCQkJCQkgIFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCQkJICBSYW5nZVRibEVudHJ5ICpy dGUpOworc3RhdGljIHZvaWQgcGdwYV9qb2lucmVsX3NldHVwKFBsYW5uZXJJbmZvICpyb290LAor CQkJCQkJCSAgIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJICAgUmVsT3B0SW5mbyAqb3V0 ZXJyZWwsCisJCQkJCQkJICAgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJICAgU3BlY2lh bEpvaW5JbmZvICpzamluZm8sCisJCQkJCQkJICAgTGlzdCAqcmVzdHJpY3RsaXN0KTsKK3N0YXRp YyB2b2lkIHBncGFfam9pbl9wYXRoX3NldHVwKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkg UmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkJIFJlbE9wdEluZm8gKm91dGVycmVsLAorCQkJ CQkJCQkgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJCSBKb2luVHlwZSBqb2ludHlwZSwK KwkJCQkJCQkJIEpvaW5QYXRoRXh0cmFEYXRhICpleHRyYSk7CitzdGF0aWMgcGdwYV9qb2luX3N0 YXRlICpwZ3BhX2dldF9qb2luX3N0YXRlKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCQlS ZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkJCQlSZWxPcHRJbmZvICpvdXRlcnJlbCwKKwkJ CQkJCQkJCQkJUmVsT3B0SW5mbyAqaW5uZXJyZWwpOworc3RhdGljIHZvaWQgcGdwYV9wbGFubmVy X2FwcGx5X2pvaW5yZWxfYWR2aWNlKHVpbnQ2NCAqcGdzX21hc2tfcCwKKwkJCQkJCQkJCQkJICBj aGFyICpwbGFuX25hbWUsCisJCQkJCQkJCQkJCSAgcGdwYV9qb2luX3N0YXRlICpwanMpOworc3Rh dGljIHZvaWQgcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5fcGF0aF9hZHZpY2UoSm9pblR5cGUgam9p bnR5cGUsCisJCQkJCQkJCQkJCQl1aW50NjQgKnBnc19tYXNrX3AsCisJCQkJCQkJCQkJCQljaGFy ICpwbGFuX25hbWUsCisJCQkJCQkJCQkJCQlwZ3BhX2pvaW5fc3RhdGUgKnBqcyk7CitzdGF0aWMg dm9pZCBwZ3BhX3BsYW5uZXJfYXBwbHlfc2Nhbl9hZHZpY2UoUmVsT3B0SW5mbyAqcmVsLAorCQkJ CQkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKnNjYW5fZW50cmllcywKKwkJCQkJCQkJCQkgICBC aXRtYXBzZXQgKnNjYW5faW5kZXhlcywKKwkJCQkJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpy ZWxfZW50cmllcywKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbF9pbmRleGVzKTsKK3N0YXRp YyB1aW50NjQgcGdwYV9qb2luX3N0cmF0ZWd5X21hc2tfZnJvbV9hZHZpY2VfdGFnKHBncGFfYWR2 aWNlX3RhZ190eXBlIHRhZyk7CitzdGF0aWMgcGdwYV9qb19vdXRjb21lIHBncGFfam9pbl9vcmRl cl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkJCWludCBpbm5lcl9j b3VudCwKKwkJCQkJCQkJCQkJCQlwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJCQkJ cGdwYV90cm92ZV9lbnRyeSAqZW50cnkpOworc3RhdGljIGJvb2wgcGdwYV9qb2luX21ldGhvZF9w ZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJ ICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2VudHJ5ICpl bnRyeSwKKwkJCQkJCQkJCQkgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCk7CitzdGF0aWMgYm9vbCBw Z3BhX29wYXF1ZV9qb2luX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9j b3VudCwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkJCQkgIHBn cGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCQkJCSAgYm9vbCAqcmVzdHJpY3RfbWV0aG9k KTsKK3N0YXRpYyBib29sIHBncGFfc2VtaWpvaW5fcGVybWl0c19qb2luKGludCBvdXRlcl9jb3Vu dCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAor CQkJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJCQkgICBib29sIG91 dGVyX3NpZGVfbnVsbGFibGUsCisJCQkJCQkJCQkgICBib29sICpyZXN0cmljdF9tZXRob2QpOwor CitzdGF0aWMgTGlzdCAqcGdwYV9wbGFubmVyX2FwcGVuZF9mZWVkYmFjayhMaXN0ICpsaXN0LCBw Z3BhX3Ryb3ZlICp0cm92ZSwKKwkJCQkJCQkJCQkgIHBncGFfdHJvdmVfbG9va3VwX3R5cGUgdHlw ZSwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJ CQkJICBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlcik7CitzdGF0aWMgdm9pZCBwZ3Bh X3BsYW5uZXJfZmVlZGJhY2tfd2FybmluZyhMaXN0ICpmZWVkYmFjayk7CisKK3N0YXRpYyBpbmxp bmUgdm9pZCBwZ3BhX3JpX2NoZWNrZXJfc2F2ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwcywKKwkJ CQkJCQkJCQlQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwpOwor c3RhdGljIHZvaWQgcGdwYV9yaV9jaGVja2VyX3ZhbGlkYXRlKHBncGFfcGxhbm5lcl9zdGF0ZSAq cHBzLAorCQkJCQkJCQkJIFBsYW5uZWRTdG10ICpwc3RtdCk7CisKK3N0YXRpYyBjaGFyICpwZ3Bh X2Jtc190b19jc3RyaW5nKEJpdG1hcHNldCAqYm1zKTsKK3N0YXRpYyBjb25zdCBjaGFyICpwZ3Bh X2pvaW50eXBlX3RvX2NzdHJpbmcoSm9pblR5cGUgam9pbnR5cGUpOworCisvKgorICogSW5zdGFs bCBwbGFubmVyLXJlbGF0ZWQgaG9va3MuCisgKi8KK3ZvaWQKK3BncGFfcGxhbm5lcl9pbnN0YWxs X2hvb2tzKHZvaWQpCit7CisJcGxhbm5lcl9leHRlbnNpb25faWQgPSBHZXRQbGFubmVyRXh0ZW5z aW9uSWQoInBnX3BsYW5fYWR2aWNlIik7CisJcHJldl9wbGFubmVyX3NldHVwID0gcGxhbm5lcl9z ZXR1cF9ob29rOworCXBsYW5uZXJfc2V0dXBfaG9vayA9IHBncGFfcGxhbm5lcl9zZXR1cDsKKwlw cmV2X3BsYW5uZXJfc2h1dGRvd24gPSBwbGFubmVyX3NodXRkb3duX2hvb2s7CisJcGxhbm5lcl9z aHV0ZG93bl9ob29rID0gcGdwYV9wbGFubmVyX3NodXRkb3duOworCXByZXZfYnVpbGRfc2ltcGxl X3JlbCA9IGJ1aWxkX3NpbXBsZV9yZWxfaG9vazsKKwlidWlsZF9zaW1wbGVfcmVsX2hvb2sgPSBw Z3BhX2J1aWxkX3NpbXBsZV9yZWw7CisJcHJldl9qb2lucmVsX3NldHVwID0gam9pbnJlbF9zZXR1 cF9ob29rOworCWpvaW5yZWxfc2V0dXBfaG9vayA9IHBncGFfam9pbnJlbF9zZXR1cDsKKwlwcmV2 X2pvaW5fcGF0aF9zZXR1cCA9IGpvaW5fcGF0aF9zZXR1cF9ob29rOworCWpvaW5fcGF0aF9zZXR1 cF9ob29rID0gcGdwYV9qb2luX3BhdGhfc2V0dXA7Cit9CisKKy8qCisgKiBDYXJyeSBvdXQgd2hh dGV2ZXIgc2V0dXAgd29yayB3ZSBuZWVkIHRvIGRvIGJlZm9yZSBwbGFubmluZy4KKyAqLworc3Rh dGljIHZvaWQKK3BncGFfcGxhbm5lcl9zZXR1cChQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAq cGFyc2UsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkgICBpbnQgY3Vyc29yT3B0aW9u cywgZG91YmxlICp0dXBsZV9mcmFjdGlvbiwKKwkJCQkgICBFeHBsYWluU3RhdGUgKmVzKQorewor CXBncGFfdHJvdmUgKnRyb3ZlID0gTlVMTDsKKwlwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwczsKKwlj aGFyCSAgICpzdXBwbGllZF9hZHZpY2U7CisJYm9vbAkJZ2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNr ID0gZmFsc2U7CisJYm9vbAkJZ2VuZXJhdGVfYWR2aWNlX3N0cmluZyA9IGZhbHNlOworCWJvb2wJ CW5lZWRzX3BwcyA9IGZhbHNlOworCisJLyoKKwkgKiBEZWNpZGUgd2hldGhlciB3ZSBuZWVkIHRv IGdlbmVyYXRlIGFuIGFkdmljZSBzdHJpbmcuIFdlIG11c3QgZG8gdGhpcyBpZgorCSAqIHRoZSB1 c2VyIGhhcyB0b2xkIHVzIHRvIGRvIGl0IGNhdGVnb3JpY2FsbHksIG9yIGlmIGF0IGxlYXN0IG9u ZQorCSAqIGNvbGxlY3RvciBpcyBlbmFibGVkLCBvciBpZiB0aGUgdXNlciBoYXMgcmVxdWVzdGVk IGl0IHVzaW5nIHRoZSBFWFBMQUlOCisJICogKFBMQU5fQURWSUNFKSBvcHRpb24uCisJICovCisJ Z2VuZXJhdGVfYWR2aWNlX3N0cmluZyA9IChwZ19wbGFuX2FkdmljZV9hbHdheXNfc3RvcmVfYWR2 aWNlX2RldGFpbHMgfHwKKwkJCQkJCQkgIHBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3RvciB8 fAorCQkJCQkJCSAgcGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3RvciB8fAorCQkJCQkJCSAg cGdfcGxhbl9hZHZpY2Vfc2hvdWxkX2V4cGxhaW4oZXMpKTsKKwlpZiAoZ2VuZXJhdGVfYWR2aWNl X3N0cmluZykKKwkJbmVlZHNfcHBzID0gdHJ1ZTsKKworCS8qCisJICogSWYgYW55IGFkdmljZSB3 YXMgcHJvdmlkZWQsIGJ1aWxkIGEgdHJvdmUgb2YgYWR2aWNlIGZvciB1c2UgZHVyaW5nCisJICog cGxhbm5pbmcuCisJICovCisJc3VwcGxpZWRfYWR2aWNlID0gcGdfcGxhbl9hZHZpY2VfZ2V0X3N1 cHBsaWVkX3F1ZXJ5X2FkdmljZShnbG9iLCBwYXJzZSwKKwkJCQkJCQkJCQkJCQkJCSAgIHF1ZXJ5 X3N0cmluZywKKwkJCQkJCQkJCQkJCQkJCSAgIGN1cnNvck9wdGlvbnMsCisJCQkJCQkJCQkJCQkJ CQkgICBlcyk7CisJaWYgKHN1cHBsaWVkX2FkdmljZSAhPSBOVUxMICYmIHN1cHBsaWVkX2Fkdmlj ZVswXSAhPSAnXDAnKQorCXsKKwkJTGlzdAkgICAqYWR2aWNlX2l0ZW1zOworCQljaGFyCSAgICpl cnJvcjsKKworCQkvKgorCQkgKiBJZiB0aGUgc3VwcGxpZWQgYWR2aWNlIHN0cmluZyBjb21lcyBm cm9tIHBnX3BsYW5fYWR2aWNlLmFkdmljZSwKKwkJICogcGFyc2luZyBzaG91bGRuJ3QgZmFpbCBo ZXJlLCBiZWNhdXNlIHdlIG11c3QgaGF2ZSBwcmV2aW91c2x5IHBhcnNlZAorCQkgKiBzdWNjZXNz ZnVsbHkgaW4gcGdfcGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNrX2hvb2suIEhvd2V2ZXIsIGl0IG1p Z2h0CisJCSAqIGFsc28gYmUgY29tZSBmcm9tIGEgaG9vayByZWdpc3RlcmVkIHZpYSBwZ19wbGFu X2FkdmljZV9hZGRfYWR2aXNvciwKKwkJICogYW5kIHdlIGNhbid0IGJlIHN1cmUgd2hldGhlciB0 aGF0J3MgdmFsaWQuIChQbHVzLCBoYXZpbmcgYW4gZXJyb3IKKwkJICogY2hlY2sgb2YgaGVyZSBz ZWVtcyBsaWtlIGEgZ29vZCBpZGVhIGFueXdheSwganVzdCBmb3Igc2FmZXR5LikKKwkJICovCisJ CWFkdmljZV9pdGVtcyA9IHBncGFfcGFyc2Uoc3VwcGxpZWRfYWR2aWNlLCAmZXJyb3IpOworCQlp ZiAoZXJyb3IpCisJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCWVycm1zZygiY291bGQgbm90IHBh cnNlIHN1cHBsaWVkIGFkdmljZTogJXMiLCBlcnJvcikpOworCisJCS8qCisJCSAqIEl0J3MgcG9z c2libGUgdGhhdCB0aGUgYWR2aWNlIHN0cmluZyB3YXMgbm9uLWVtcHR5IGJ1dCBjb250YWluZWQg bm8KKwkJICogYWN0dWFsIGFkdmljZSwgZS5nLiBpdCB3YXMgYWxsIHdoaXRlc3BhY2UuCisJCSAq LworCQlpZiAoYWR2aWNlX2l0ZW1zICE9IE5JTCkKKwkJeworCQkJdHJvdmUgPSBwZ3BhX2J1aWxk X3Ryb3ZlKGFkdmljZV9pdGVtcyk7CisJCQluZWVkc19wcHMgPSB0cnVlOworCisJCQkvKgorCQkJ ICogSWYgd2Uga25vdyB0aGF0IHdlJ3JlIHJ1bm5pbmcgdW5kZXIgRVhQTEFJTiwgb3IgaWYgdGhl IHVzZXIgaGFzCisJCQkgKiB0b2xkIHVzIHRvIGFsd2F5cyBkbyB0aGUgd29yaywgZ2VuZXJhdGUg YWR2aWNlIGZlZWRiYWNrLgorCQkJICovCisJCQlpZiAoZXMgIT0gTlVMTCB8fCBwZ19wbGFuX2Fk dmljZV9mZWVkYmFja193YXJuaW5ncyB8fAorCQkJCXBnX3BsYW5fYWR2aWNlX2Fsd2F5c19zdG9y ZV9hZHZpY2VfZGV0YWlscykKKwkJCQlnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2sgPSB0cnVlOwor CQl9CisJfQorCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCisJLyoKKwkgKiBJZiBhc3Nl cnRzIGFyZSBlbmFibGVkLCBhbHdheXMgYnVpbGQgYSBwcml2YXRlIHN0YXRlIG9iamVjdCBmb3IK KwkgKiBjcm9zcy1jaGVja3MuCisJICovCisJbmVlZHNfcHBzID0gdHJ1ZTsKKyNlbmRpZgorCisJ LyoKKwkgKiBXZSBvbmx5IGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIHByaXZhdGUgc3RhdGUgb2Jq ZWN0IGlmIGl0J3MgbmVlZGVkIGZvcgorCSAqIHNvbWUgcHVycG9zZS4gVGhhdCBjb3VsZCBiZSAo MSkgcmVjb3JkaW5nIHRoYXQgd2Ugd2lsbCBuZWVkIHRvIGdlbmVyYXRlCisJICogYW4gYWR2aWNl IHN0cmluZywgKDIpIHN0b3JpbmcgYSB0cm92ZSBvZiBzdXBwbGllZCBhZHZpY2UsIG9yICgzKQor CSAqIGZhY2lsaXRhdGluZyBkZWJ1Z2dpbmcgY3Jvc3MtY2hlY2tzIHdoZW4gYXNzZXJ0cyBhcmUg ZW5hYmxlZC4KKwkgKi8KKwlpZiAobmVlZHNfcHBzKQorCXsKKwkJcHBzID0gcGFsbG9jMF9vYmpl Y3QocGdwYV9wbGFubmVyX3N0YXRlKTsKKwkJcHBzLT5leHBsYWluX3N0YXRlID0gZXM7CisJCXBw cy0+Z2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrID0gZ2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrOwor CQlwcHMtPmdlbmVyYXRlX2FkdmljZV9zdHJpbmcgPSBnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nOwor CQlwcHMtPnRyb3ZlID0gdHJvdmU7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCQlwcHMt PnJpX2NoZWNrX2hhc2ggPQorCQkJcGdwYV9yaV9jaGVja19jcmVhdGUoQ3VycmVudE1lbW9yeUNv bnRleHQsIDEwMjQsIE5VTEwpOworI2VuZGlmCisJCVNldFBsYW5uZXJHbG9iYWxFeHRlbnNpb25T dGF0ZShnbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCwgcHBzKTsKKwl9Cit9CisKKy8qCisgKiBD YXJyeSBvdXQgd2hhdGV2ZXIgd29yayB3ZSB3YW50IHRvIGRvIGFmdGVyIHBsYW5uaW5nIGlzIGNv bXBsZXRlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX3NodXRkb3duKFBsYW5uZXJH bG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJp bmcsIFBsYW5uZWRTdG10ICpwc3RtdCkKK3sKKwlwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwczsKKwlw Z3BhX3Ryb3ZlICp0cm92ZSA9IE5VTEw7CisJcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0IHdhbGtl ciA9IHswfTsJLyogcGxhY2F0ZSBjb21waWxlciAqLworCWJvb2wJCWdlbmVyYXRlX2FkdmljZV9m ZWVkYmFjayA9IGZhbHNlOworCWJvb2wJCWdlbmVyYXRlX2FkdmljZV9zdHJpbmcgPSBmYWxzZTsK KwlMaXN0CSAgICpwZ3BhX2l0ZW1zID0gTklMOworCXBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRp ZmllcnMgPSBOVUxMOworCisJLyogRmV0Y2ggb3VyIHByaXZhdGUgc3RhdGUsIHNldCB1cCBieSBw Z3BhX3BsYW5uZXJfc2V0dXAoKS4gKi8KKwlwcHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0ZW5zaW9u U3RhdGUoZ2xvYiwgcGxhbm5lcl9leHRlbnNpb25faWQpOworCWlmIChwcHMgIT0gTlVMTCkKKwl7 CisJCXRyb3ZlID0gcHBzLT50cm92ZTsKKwkJZ2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrID0gcHBz LT5nZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2s7CisJCWdlbmVyYXRlX2FkdmljZV9zdHJpbmcgPSBw cHMtPmdlbmVyYXRlX2FkdmljZV9zdHJpbmc7CisJfQorCisJLyoKKwkgKiBJZiB3ZSdyZSB0cnlp bmcgdG8gZ2VuZXJhdGUgYW4gYWR2aWNlIHN0cmluZyBvciBpZiB3ZSdyZSB0cnlpbmcgdG8KKwkg KiBwcm92aWRlIGFkdmljZSBmZWVkYmFjaywgdGhlbiB3ZSB3aWxsIG5lZWQgdG8gY3JlYXRlIHJh bmdlIHRhYmxlCisJICogaWRlbnRpZmllcnMuCisJICovCisJaWYgKGdlbmVyYXRlX2FkdmljZV9z dHJpbmcgfHwgZ2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrKQorCXsKKwkJcGdwYV9wbGFuX3dhbGtl cigmd2Fsa2VyLCBwc3RtdCwgcHBzLT5zal91bmlxdWVfcmVscyk7CisJCXJ0X2lkZW50aWZpZXJz ID0gcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdChwc3RtdCk7CisJfQor CisJLyogR2VuZXJhdGUgdGhlIGFkdmljZSBzdHJpbmcsIGlmIHdlIG5lZWQgdG8gZG8gc28uICov CisJaWYgKGdlbmVyYXRlX2FkdmljZV9zdHJpbmcpCisJeworCQljaGFyCSAgICphZHZpY2Vfc3Ry aW5nOworCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkJLyogR2VuZXJhdGUgYSB0ZXh0dWFsIGFk dmljZSBzdHJpbmcuICovCisJCWluaXRTdHJpbmdJbmZvKCZidWYpOworCQlwZ3BhX291dHB1dF9h ZHZpY2UoJmJ1ZiwgJndhbGtlciwgcnRfaWRlbnRpZmllcnMpOworCQlhZHZpY2Vfc3RyaW5nID0g YnVmLmRhdGE7CisKKwkJLyogSWYgdGhlIGFkdmljZSBzdHJpbmcgaXMgZW1wdHksIGRvbid0IGJv dGhlciBjb2xsZWN0aW5nIGl0LiAqLworCQlpZiAoYWR2aWNlX3N0cmluZ1swXSAhPSAnXDAnKQor CQkJcGdwYV9jb2xsZWN0X2FkdmljZShwc3RtdC0+cXVlcnlJZCwgcXVlcnlfc3RyaW5nLCBhZHZp Y2Vfc3RyaW5nKTsKKworCQkvKiBTYXZlIHRoZSBhZHZpY2Ugc3RyaW5nIGluIHRoZSBmaW5hbCBw bGFuLiAqLworCQlwZ3BhX2l0ZW1zID0gbGFwcGVuZChwZ3BhX2l0ZW1zLAorCQkJCQkJCSBtYWtl RGVmRWxlbSgiYWR2aWNlX3N0cmluZyIsCisJCQkJCQkJCQkJIChOb2RlICopIG1ha2VTdHJpbmco YWR2aWNlX3N0cmluZyksCisJCQkJCQkJCQkJIC0xKSk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSdy ZSB0cnlpbmcgdG8gcHJvdmlkZSBhZHZpY2UgZmVlZGJhY2ssIHRoZW4gd2Ugd2lsbCBuZWVkIHRv CisJICogYW5hbHl6ZSBob3cgc3VjY2Vzc2Z1bCB0aGUgYWR2aWNlIHdhcy4KKwkgKi8KKwlpZiAo Z2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrKQorCXsKKwkJTGlzdAkgICAqZmVlZGJhY2sgPSBOSUw7 CisKKwkJLyoKKwkJICogSW5qZWN0IGEgTm9kZS10cmVlIHJlcHJlc2VudGF0aW9uIG9mIGFsbCB0 aGUgdHJvdmUtZW50cnkgZmxhZ3MgaW50bworCQkgKiB0aGUgUGxhbm5lZFN0bXQuCisJCSAqLwor CQlmZWVkYmFjayA9IHBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soZmVlZGJhY2ssCisJCQkJ CQkJCQkJCQl0cm92ZSwKKwkJCQkJCQkJCQkJCVBHUEFfVFJPVkVfTE9PS1VQX1NDQU4sCisJCQkJ CQkJCQkJCQlydF9pZGVudGlmaWVycywgJndhbGtlcik7CisJCWZlZWRiYWNrID0gcGdwYV9wbGFu bmVyX2FwcGVuZF9mZWVkYmFjayhmZWVkYmFjaywKKwkJCQkJCQkJCQkJCXRyb3ZlLAorCQkJCQkJ CQkJCQkJUEdQQV9UUk9WRV9MT09LVVBfSk9JTiwKKwkJCQkJCQkJCQkJCXJ0X2lkZW50aWZpZXJz LCAmd2Fsa2VyKTsKKwkJZmVlZGJhY2sgPSBwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNrKGZl ZWRiYWNrLAorCQkJCQkJCQkJCQkJdHJvdmUsCisJCQkJCQkJCQkJCQlQR1BBX1RST1ZFX0xPT0tV UF9SRUwsCisJCQkJCQkJCQkJCQlydF9pZGVudGlmaWVycywgJndhbGtlcik7CisKKwkJcGdwYV9p dGVtcyA9IGxhcHBlbmQocGdwYV9pdGVtcywgbWFrZURlZkVsZW0oImZlZWRiYWNrIiwKKwkJCQkJ CQkJCQkJCQkgKE5vZGUgKikgZmVlZGJhY2ssIC0xKSk7CisKKwkJLyogSWYgd2Ugd2VyZSBhc2tl ZCB0byBnZW5lcmF0ZSBmZWVkYmFjayB3YXJuaW5ncywgZG8gc28uICovCisJCWlmIChwZ19wbGFu X2FkdmljZV9mZWVkYmFja193YXJuaW5ncykKKwkJCXBncGFfcGxhbm5lcl9mZWVkYmFja193YXJu aW5nKGZlZWRiYWNrKTsKKwl9CisKKwkvKiBQdXNoIHdoYXRldmVyIGRhdGEgd2UncmUgc2F2aW5n IGludG8gdGhlIFBsYW5uZWRTdG10LiAqLworCWlmIChwZ3BhX2l0ZW1zICE9IE5JTCkKKwkJcHN0 bXQtPmV4dGVuc2lvbl9zdGF0ZSA9CisJCQlsYXBwZW5kKHBzdG10LT5leHRlbnNpb25fc3RhdGUs CisJCQkJCW1ha2VEZWZFbGVtKCJwZ19wbGFuX2FkdmljZSIsIChOb2RlICopIHBncGFfaXRlbXMs IC0xKSk7CisKKwkvKgorCSAqIElmIGFzc2VydGlvbnMgYXJlIGVuYWJsZWQsIGNyb3NzLWNoZWNr IHRoZSBnZW5lcmF0ZWQgcmFuZ2UgdGFibGUKKwkgKiBpZGVudGlmaWVycy4KKwkgKi8KKwlpZiAo cHBzICE9IE5VTEwpCisJCXBncGFfcmlfY2hlY2tlcl92YWxpZGF0ZShwcHMsIHBzdG10KTsKK30K KworLyoKKyAqIEhvb2sgZnVuY3Rpb24gZm9yIGJ1aWxkX3NpbXBsZV9yZWwoKS4KKyAqCisgKiBX ZSBjYW4gYXBwbHkgc2NhbiBhZHZpY2UgYXQgdGhpcyBwb2ludCwgYW5kIHdlIGFsc28gdXNlZSB0 aGlzIGFzIGFuCisgKiBvcHBvcnR1bml0eSB0byBkbyByYW5nZS10YWJsZSBpZGVudGlmaWVyIGNy b3NzLWNoZWNraW5nIGluIGFzc2VydC1lbmFibGVkCisgKiBidWlsZHMuCisgKi8KK3N0YXRpYyB2 b2lkCitwZ3BhX2J1aWxkX3NpbXBsZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnJlbCwgUmFuZ2VUYmxFbnRyeSAqcnRlKQoreworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOwor CisJLyogRmV0Y2ggb3VyIHByaXZhdGUgc3RhdGUsIHNldCB1cCBieSBwZ3BhX3BsYW5uZXJfc2V0 dXAoKS4gKi8KKwlwcHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0ZW5zaW9uU3RhdGUocm9vdC0+Z2xv YiwgcGxhbm5lcl9leHRlbnNpb25faWQpOworCisJLyogU2F2ZSBkZXRhaWxzIG5lZWRlZCBmb3Ig cmFuZ2UgdGFibGUgaWRlbnRpZmllciBjcm9zcy1jaGVja2luZy4gKi8KKwlpZiAocHBzICE9IE5V TEwpCisJCXBncGFfcmlfY2hlY2tlcl9zYXZlKHBwcywgcm9vdCwgcmVsKTsKKworCS8qIElmIHF1 ZXJ5IGFkdmljZSB3YXMgcHJvdmlkZWQsIHNlYXJjaCBmb3IgcmVsZXZhbnQgZW50cmllcy4gKi8K KwlpZiAocHBzICE9IE5VTEwgJiYgcHBzLT50cm92ZSAhPSBOVUxMKQorCXsKKwkJcGdwYV9pZGVu dGlmaWVyIHJpZDsKKwkJcGdwYV90cm92ZV9yZXN1bHQgdHJlc3VsdF9zY2FuOworCQlwZ3BhX3Ry b3ZlX3Jlc3VsdCB0cmVzdWx0X3JlbDsKKworCQkvKiBTZWFyY2ggZm9yIHNjYW4gYWR2aWNlIGFu ZCBnZW5lcmFsIHJlbCBhZHZpY2UuICovCisJCXBncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0 aShyb290LCByZWwtPnJlbGlkLCAmcmlkKTsKKwkJcGdwYV90cm92ZV9sb29rdXAocHBzLT50cm92 ZSwgUEdQQV9UUk9WRV9MT09LVVBfU0NBTiwgMSwgJnJpZCwKKwkJCQkJCSAgJnRyZXN1bHRfc2Nh bik7CisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX1JF TCwgMSwgJnJpZCwKKwkJCQkJCSAgJnRyZXN1bHRfcmVsKTsKKworCQkvKiBJZiByZWxldmFudCBl bnRyaWVzIHdlcmUgZm91bmQsIGFwcGx5IHRoZW0uICovCisJCWlmICh0cmVzdWx0X3NjYW4uaW5k ZXhlcyAhPSBOVUxMIHx8IHRyZXN1bHRfcmVsLmluZGV4ZXMgIT0gTlVMTCkKKwkJeworCQkJdWlu dDY0CQlvcmlnaW5hbF9tYXNrID0gcmVsLT5wZ3NfbWFzazsKKworCQkJcGdwYV9wbGFubmVyX2Fw cGx5X3NjYW5fYWR2aWNlKHJlbCwKKwkJCQkJCQkJCQkgICB0cmVzdWx0X3NjYW4uZW50cmllcywK KwkJCQkJCQkJCQkgICB0cmVzdWx0X3NjYW4uaW5kZXhlcywKKwkJCQkJCQkJCQkgICB0cmVzdWx0 X3JlbC5lbnRyaWVzLAorCQkJCQkJCQkJCSAgIHRyZXN1bHRfcmVsLmluZGV4ZXMpOworCisJCQkv KiBFbWl0IGRlYnVnZ2luZyBtZXNzYWdlLCBpZiBlbmFibGVkLiAqLworCQkJaWYgKHBnX3BsYW5f YWR2aWNlX3RyYWNlX21hc2sgJiYgb3JpZ2luYWxfbWFzayAhPSByZWwtPnBnc19tYXNrKQorCQkJ CWVyZXBvcnQoV0FSTklORywKKwkJCQkJCShlcnJtc2coInN0cmF0ZWd5IG1hc2sgZm9yIFJUSSAl dSBjaGFuZ2VkIGZyb20gMHglIiBQUkl4NjQgIiB0byAweCUiIFBSSXg2NCwKKwkJCQkJCQkJcmVs LT5yZWxpZCwgb3JpZ2luYWxfbWFzaywgcmVsLT5wZ3NfbWFzaykpKTsKKwkJfQorCX0KKworCS8q IFBhc3MgY2FsbCB0byBwcmV2aW91cyBob29rLiAqLworCWlmIChwcmV2X2J1aWxkX3NpbXBsZV9y ZWwpCisJCSgqcHJldl9idWlsZF9zaW1wbGVfcmVsKSAocm9vdCwgcmVsLCBydGUpOworfQorCisv KgorICogRW5mb3JjZSBhbnkgcHJvdmlkZWQgYWR2aWNlIHRoYXQgaXMgcmVsZXZhbnQgdG8gYW55 IG1ldGhvZCBvZiBpbXBsZW1lbnRpbmcKKyAqIHRoaXMgam9pbi4KKyAqCisgKiBBbHRob3VnaCB3 ZSdyZSBwYXNzZWQgdGhlIG91dGVycmVsIGFuZCBpbm5lcnJlbCBoZXJlLCB0aG9zZSBhcmUganVz dAorICogd2hhdGV2ZXIgdmFsdWVzIGhhcHBlbmVkIHRvIHByb21wdCB0aGUgY3JlYXRpb24gb2Yg dGhpcyBqb2lucmVsOyB0aGV5CisgKiBzaG91bGRuJ3QgcmVhbGx5IGluZmx1ZW5jZSBvdXIgY2hv aWNlIG9mIHdoYXQgYWR2aWNlIHRvIGFwcGx5LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9qb2lu cmVsX3NldHVwKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCSAg IFJlbE9wdEluZm8gKm91dGVycmVsLCBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkgICBTcGVj aWFsSm9pbkluZm8gKnNqaW5mbywgTGlzdCAqcmVzdHJpY3RsaXN0KQoreworCXBncGFfam9pbl9z dGF0ZSAqcGpzOworCisJQXNzZXJ0KGJtc19tZW1iZXJzaGlwKGpvaW5yZWwtPnJlbGlkcykgPT0g Qk1TX01VTFRJUExFKTsKKworCS8qIEdldCBvdXIgcHJpdmF0ZSBzdGF0ZSBpbmZvcm1hdGlvbiBm b3IgdGhpcyBqb2luLiAqLworCXBqcyA9IHBncGFfZ2V0X2pvaW5fc3RhdGUocm9vdCwgam9pbnJl bCwgb3V0ZXJyZWwsIGlubmVycmVsKTsKKworCS8qIElmIHRoZXJlIGlzIHJlbGV2YW50IGFkdmlj ZSwgY2FsbCBhIGhlbHBlciBmdW5jdGlvbiB0byBhcHBseSBpdC4gKi8KKwlpZiAocGpzICE9IE5V TEwpCisJeworCQl1aW50NjQJCW9yaWdpbmFsX21hc2sgPSBqb2lucmVsLT5wZ3NfbWFzazsKKwor CQlwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbnJlbF9hZHZpY2UoJmpvaW5yZWwtPnBnc19tYXNrLAor CQkJCQkJCQkJCSAgcm9vdC0+cGxhbl9uYW1lLAorCQkJCQkJCQkJCSAgcGpzKTsKKworCQkvKiBF bWl0IGRlYnVnZ2luZyBtZXNzYWdlLCBpZiBlbmFibGVkLiAqLworCQlpZiAocGdfcGxhbl9hZHZp Y2VfdHJhY2VfbWFzayAmJiBvcmlnaW5hbF9tYXNrICE9IGpvaW5yZWwtPnBnc19tYXNrKQorCQkJ ZXJlcG9ydChXQVJOSU5HLAorCQkJCQkoZXJybXNnKCJzdHJhdGVneSBtYXNrIGZvciBqb2luIG9u IFJUSXMgJXMgY2hhbmdlZCBmcm9tIDB4JSIgUFJJeDY0ICIgdG8gMHglIiBQUkl4NjQsCisJCQkJ CQkJcGdwYV9ibXNfdG9fY3N0cmluZyhqb2lucmVsLT5yZWxpZHMpLAorCQkJCQkJCW9yaWdpbmFs X21hc2ssCisJCQkJCQkJam9pbnJlbC0+cGdzX21hc2spKSk7CisJfQorCisJLyogUGFzcyBjYWxs IHRvIHByZXZpb3VzIGhvb2suICovCisJaWYgKHByZXZfam9pbnJlbF9zZXR1cCkKKwkJKCpwcmV2 X2pvaW5yZWxfc2V0dXApIChyb290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJ CQkJICAgc2ppbmZvLCByZXN0cmljdGxpc3QpOworfQorCisvKgorICogRW5mb3JjZSBhbnkgcHJv dmlkZWQgYWR2aWNlIHRoYXQgaXMgcmVsZXZhbnQgdG8gdGhpcyBwYXJ0aWN1bGFyIG1ldGhvZCBv ZgorICogaW1wbGVtZW50aW5nIHRoaXMgcGFydGljdWxhciBqb2luLgorICovCitzdGF0aWMgdm9p ZAorcGdwYV9qb2luX3BhdGhfc2V0dXAoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpv aW5yZWwsCisJCQkJCSBSZWxPcHRJbmZvICpvdXRlcnJlbCwgUmVsT3B0SW5mbyAqaW5uZXJyZWws CisJCQkJCSBKb2luVHlwZSBqb2ludHlwZSwgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKQorewor CXBncGFfam9pbl9zdGF0ZSAqcGpzOworCisJQXNzZXJ0KGJtc19tZW1iZXJzaGlwKGpvaW5yZWwt PnJlbGlkcykgPT0gQk1TX01VTFRJUExFKTsKKworCS8qCisJICogSWYgd2UncmUgY29uc2lkZXJp bmcgaW1wbGVtZW50aW5nIGEgc2VtaWpvaW4gYnkgbWFraW5nIG9uZSBzaWRlIHVuaXF1ZSwKKwkg KiBtYWtlIGEgbm90ZSBvZiBpdCBpbiB0aGUgcGdwYV9wbGFubmVyX3N0YXRlLiBTZWUgY29tbWVu dHMgZm9yCisJICogcGdwYV9zal91bmlxdWVfcmVsIGZvciB3aHkgd2UgZG8gdGhpcy4KKwkgKi8K KwlpZiAoam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfT1VURVIgfHwgam9pbnR5cGUgPT0gSk9JTl9V TklRVUVfSU5ORVIpCisJeworCQlwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwczsKKwkJUmVsT3B0SW5m byAqdW5pcXVlcmVsOworCisJCXVuaXF1ZXJlbCA9IGpvaW50eXBlID09IEpPSU5fVU5JUVVFX09V VEVSID8gb3V0ZXJyZWwgOiBpbm5lcnJlbDsKKwkJcHBzID0gR2V0UGxhbm5lckdsb2JhbEV4dGVu c2lvblN0YXRlKHJvb3QtPmdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwkJaWYgKHBwcyAh PSBOVUxMICYmCisJCQkocHBzLT5nZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nIHx8IHBwcy0+Z2VuZXJh dGVfYWR2aWNlX2ZlZWRiYWNrKSkKKwkJeworCQkJYm9vbAkJZm91bmQgPSBmYWxzZTsKKworCQkJ LyogQXZvaWQgYWRkaW5nIGR1cGxpY2F0ZXMuICovCisJCQlmb3JlYWNoX3B0cihwZ3BhX3NqX3Vu aXF1ZV9yZWwsIHVyLCBwcHMtPnNqX3VuaXF1ZV9yZWxzKQorCQkJeworCQkJCS8qCisJCQkJICog V2Ugc2hvdWxkIGFsd2F5cyB1c2UgdGhlIHNhbWUgcG9pbnRlciBmb3IgdGhlIHNhbWUgcGxhbgor CQkJCSAqIG5hbWUsIHNvIHdlIG5lZWQgbm90IHVzZSBzdHJjbXAoKSBoZXJlLgorCQkJCSAqLwor CQkJCWlmIChyb290LT5wbGFuX25hbWUgPT0gdXItPnBsYW5fbmFtZSAmJgorCQkJCQlibXNfZXF1 YWwodW5pcXVlcmVsLT5yZWxpZHMsIHVyLT5yZWxpZHMpKQorCQkJCXsKKwkJCQkJZm91bmQgPSB0 cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCS8qIElmIG5vdCBhIGR1cGxpY2F0 ZSwgYXBwZW5kIHRvIHRoZSBsaXN0LiAqLworCQkJaWYgKCFmb3VuZCkKKwkJCXsKKwkJCQlwZ3Bh X3NqX3VuaXF1ZV9yZWwgKnVyID0gcGFsbG9jX29iamVjdChwZ3BhX3NqX3VuaXF1ZV9yZWwpOwor CisJCQkJdXItPnBsYW5fbmFtZSA9IHJvb3QtPnBsYW5fbmFtZTsKKwkJCQl1ci0+cmVsaWRzID0g dW5pcXVlcmVsLT5yZWxpZHM7CisJCQkJcHBzLT5zal91bmlxdWVfcmVscyA9IGxhcHBlbmQocHBz LT5zal91bmlxdWVfcmVscywgdXIpOworCQkJfQorCQl9CisJfQorCisJLyogR2V0IG91ciBwcml2 YXRlIHN0YXRlIGluZm9ybWF0aW9uIGZvciB0aGlzIGpvaW4uICovCisJcGpzID0gcGdwYV9nZXRf am9pbl9zdGF0ZShyb290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwpOworCisJLyogSWYg dGhlcmUgaXMgcmVsZXZhbnQgYWR2aWNlLCBjYWxsIGEgaGVscGVyIGZ1bmN0aW9uIHRvIGFwcGx5 IGl0LiAqLworCWlmIChwanMgIT0gTlVMTCkKKwl7CisJCXVpbnQ2NAkJb3JpZ2luYWxfbWFzayA9 IGV4dHJhLT5wZ3NfbWFzazsKKworCQlwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbl9wYXRoX2Fkdmlj ZShqb2ludHlwZSwKKwkJCQkJCQkJCQkJJmV4dHJhLT5wZ3NfbWFzaywKKwkJCQkJCQkJCQkJcm9v dC0+cGxhbl9uYW1lLAorCQkJCQkJCQkJCQlwanMpOworCisJCS8qIEVtaXQgZGVidWdnaW5nIG1l c3NhZ2UsIGlmIGVuYWJsZWQuICovCisJCWlmIChwZ19wbGFuX2FkdmljZV90cmFjZV9tYXNrICYm IG9yaWdpbmFsX21hc2sgIT0gZXh0cmEtPnBnc19tYXNrKQorCQkJZXJlcG9ydChXQVJOSU5HLAor CQkJCQkoZXJybXNnKCJzdHJhdGVneSBtYXNrIGZvciAlcyBqb2luIG9uICVzIHdpdGggb3V0ZXIg JXMgYW5kIGlubmVyICVzIGNoYW5nZWQgZnJvbSAweCUiIFBSSXg2NCAiIHRvIDB4JSIgUFJJeDY0 LAorCQkJCQkJCXBncGFfam9pbnR5cGVfdG9fY3N0cmluZyhqb2ludHlwZSksCisJCQkJCQkJcGdw YV9ibXNfdG9fY3N0cmluZyhqb2lucmVsLT5yZWxpZHMpLAorCQkJCQkJCXBncGFfYm1zX3RvX2Nz dHJpbmcob3V0ZXJyZWwtPnJlbGlkcyksCisJCQkJCQkJcGdwYV9ibXNfdG9fY3N0cmluZyhpbm5l cnJlbC0+cmVsaWRzKSwKKwkJCQkJCQlvcmlnaW5hbF9tYXNrLAorCQkJCQkJCWV4dHJhLT5wZ3Nf bWFzaykpKTsKKwl9CisKKwkvKiBQYXNzIGNhbGwgdG8gcHJldmlvdXMgaG9vay4gKi8KKwlpZiAo cHJldl9qb2luX3BhdGhfc2V0dXApCisJCSgqcHJldl9qb2luX3BhdGhfc2V0dXApIChyb290LCBq b2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJCSBqb2ludHlwZSwgZXh0cmEpOwor fQorCisvKgorICogU2VhcmNoIGZvciBhZHZpY2UgcGVydGFpbmluZyB0byBhIHByb3Bvc2VkIGpv aW4uCisgKi8KK3N0YXRpYyBwZ3BhX2pvaW5fc3RhdGUgKgorcGdwYV9nZXRfam9pbl9zdGF0ZShQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJUmVsT3B0SW5mbyAq b3V0ZXJyZWwsIFJlbE9wdEluZm8gKmlubmVycmVsKQoreworCXBncGFfcGxhbm5lcl9zdGF0ZSAq cHBzOworCXBncGFfam9pbl9zdGF0ZSAqcGpzOworCWJvb2wJCW5ld19wanMgPSBmYWxzZTsKKwor CS8qIEZldGNoIG91ciBwcml2YXRlIHN0YXRlLCBzZXQgdXAgYnkgcGdwYV9wbGFubmVyX3NldHVw KCkuICovCisJcHBzID0gR2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKHJvb3QtPmdsb2Is IHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwlpZiAocHBzID09IE5VTEwgfHwgcHBzLT50cm92ZSA9 PSBOVUxMKQorCXsKKwkJLyogTm8gYWR2aWNlIGFwcGxpZXMgdG8gdGhpcyBxdWVyeSwgaGVuY2Ug bm9uZSB0byB0aGlzIGpvaW5yZWwuICovCisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICog U2VlIHdoZXRoZXIgd2UndmUgcHJldmlvdXNseSBhc3NvY2lhdGVkIGEgcGdwYV9qb2luX3N0YXRl IHdpdGggdGhpcworCSAqIGpvaW5yZWwuIElmIHdlIGhhdmUgbm90LCB3ZSBuZWVkIHRvIHRyeSB0 byBjb25zdHJ1Y3Qgb25lLiBJZiB3ZSBoYXZlLAorCSAqIHRoZW4gdGhlcmUgYXJlIHR3byBjYXNl czogKGEpIGlmIGlubmVycmVsIGFuZCBvdXRlcnJlbCBhcmUgdW5jaGFuZ2VkLAorCSAqIHdlIGNh biBzaW1wbHkgdXNlIGl0LCBhbmQgKGIpIGlmIHRoZXkgaGF2ZSBjaGFuZ2VkLCB3ZSBuZWVkIHRv IHJlamlnZ2VyCisJICogdGhlIGFycmF5IG9mIGlkZW50aWZpZXJzIGJ1dCBjYW4gc3RpbGwgc2tp cCB0aGUgdHJvdmUgbG9va3VwLgorCSAqLworCXBqcyA9IEdldFJlbE9wdEluZm9FeHRlbnNpb25T dGF0ZShqb2lucmVsLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisJaWYgKHBqcyAhPSBOVUxMKQor CXsKKwkJaWYgKHBqcy0+am9pbl9pbmRleGVzID09IE5VTEwgJiYgcGpzLT5yZWxfaW5kZXhlcyA9 PSBOVUxMKQorCQl7CisJCQkvKgorCQkJICogSWYgdGhlcmUncyBubyBwb3RlbnRpYWxseSByZWxl dmFudCBhZHZpY2UsIHRoZW4gdGhlIHByZXNlbmNlIG9mCisJCQkgKiB0aGlzIHBncGFfam9pbl9z dGF0ZSBhY3RzIGxpa2UgYSBuZWdhdGl2ZSBjYWNoZSBlbnRyeTogaXQgdGVsbHMKKwkJCSAqIHVz IG5vdCB0byBib3RoZXIgc2VhcmNoaW5nIHRoZSB0cm92ZSBmb3IgYWR2aWNlLCBiZWNhdXNlIHdl CisJCQkgKiB3aWxsIG5vdCBmaW5kIGFueS4KKwkJCSAqLworCQkJcmV0dXJuIE5VTEw7CisJCX0K KworCQlpZiAocGpzLT5vdXRlcnJlbCA9PSBvdXRlcnJlbCAmJiBwanMtPmlubmVycmVsID09IGlu bmVycmVsKQorCQl7CisJCQkvKiBObyB1cGRhdGVzIHJlcXVpcmVkLCBzbyBqdXN0IHJldHVybi4g Ki8KKwkJCS8qIFhYWC4gRG9lcyB0aGlzIG5lZWQgdG8gZG8gc29tZXRoaW5nIGRpZmZlcmVudCB1 bmRlciBHRVFPPyAqLworCQkJcmV0dXJuIHBqczsKKwkJfQorCX0KKworCS8qCisJICogSWYgdGhl cmUncyBubyBwZ3BhX2pvaW5fc3RhdGUgeWV0LCB3ZSBuZWVkIHRvIGFsbG9jYXRlIG9uZS4gVHJv dmUga2V5cworCSAqIHdpbGwgbm90IGdldCBidWlsdCBmb3IgUlRFX0pPSU4gUlRFcywgc28gdGhl IGFycmF5IG1heSBlbmQgdXAgYmVpbmcKKwkgKiBsYXJnZXIgdGhhbiBuZWVkZWQuIEl0J3Mgbm90 IHdvcnRoIHRyeWluZyB0byBjb21wdXRlIGEgcGVyZmVjdGx5CisJICogYWNjdXJhdGUgY291bnQg aGVyZS4KKwkgKi8KKwlpZiAocGpzID09IE5VTEwpCisJeworCQlpbnQJCQlwZXNzaW1pc3RpY19j b3VudCA9IGJtc19udW1fbWVtYmVycyhqb2lucmVsLT5yZWxpZHMpOworCisJCXBqcyA9IHBhbGxv YzBfb2JqZWN0KHBncGFfam9pbl9zdGF0ZSk7CisJCXBqcy0+cmlkcyA9IHBhbGxvY19hcnJheShw Z3BhX2lkZW50aWZpZXIsIHBlc3NpbWlzdGljX2NvdW50KTsKKwkJbmV3X3BqcyA9IHRydWU7CisJ fQorCisJLyoKKwkgKiBFaXRoZXIgd2UganVzdCBhbGxvY2F0ZWQgYSBuZXcgcGdwYV9qb2luX3N0 YXRlLCBvciB0aGUgZXhpc3Rpbmcgb25lCisJICogbmVlZHMgcmVjb25maWd1cmluZyBmb3IgYSBu ZXcgaW5uZXJyZWwgYW5kIG91dGVycmVsLiBUaGUgcmVxdWlyZWQgYXJyYXkKKwkgKiBzaXplIGNh bid0IGNoYW5nZSwgc28gd2UgY2FuIG92ZXJ3cml0ZSB0aGUgZXhpc3Rpbmcgb25lLgorCSAqLwor CXBqcy0+b3V0ZXJyZWwgPSBvdXRlcnJlbDsKKwlwanMtPmlubmVycmVsID0gaW5uZXJyZWw7CisJ cGpzLT5vdXRlcl9jb3VudCA9CisJCXBncGFfY29tcHV0ZV9pZGVudGlmaWVyc19ieV9yZWxpZHMo cm9vdCwgb3V0ZXJyZWwtPnJlbGlkcywgcGpzLT5yaWRzKTsKKwlwanMtPmlubmVyX2NvdW50ID0K KwkJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJzX2J5X3JlbGlkcyhyb290LCBpbm5lcnJlbC0+cmVs aWRzLAorCQkJCQkJCQkJCSAgIHBqcy0+cmlkcyArIHBqcy0+b3V0ZXJfY291bnQpOworCisJLyoK KwkgKiBJZiB3ZSBhbGxvY2F0ZWQgYSBuZXcgcGdwYV9qb2luX3N0YXRlLCBzZWFyY2ggb3VyIHRy b3ZlIG9mIGFkdmljZSBmb3IKKwkgKiByZWxldmFudCBlbnRyaWVzLiBUaGUgdHJvdmUgbG9va3Vw IHdpbGwgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdHMgZm9yCisJICogZXZlcnkgb3V0ZXJyZWwvaW5u ZXJyZWwgY29tYmluYXRpb24sIHNvIHdlIGRvbid0IG5lZWQgdG8gcmVwZWF0IHRoYXQKKwkgKiB3 b3JrIGV2ZXJ5IHRpbWUuCisJICovCisJaWYgKG5ld19wanMpCisJeworCQlwZ3BhX3Ryb3ZlX3Jl c3VsdCB0cmVzdWx0OworCisJCS8qIEZpbmQgam9pbiBlbnRyaWVzLiAqLworCQlwZ3BhX3Ryb3Zl X2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOLAorCQkJCQkJICBwanMt Pm91dGVyX2NvdW50ICsgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCSAgcGpzLT5yaWRzLCAmdHJl c3VsdCk7CisJCXBqcy0+am9pbl9lbnRyaWVzID0gdHJlc3VsdC5lbnRyaWVzOworCQlwanMtPmpv aW5faW5kZXhlcyA9IHRyZXN1bHQuaW5kZXhlczsKKworCQkvKiBGaW5kIHJlbCBlbnRyaWVzLiAq LworCQlwZ3BhX3Ryb3ZlX2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9SRUws CisJCQkJCQkgIHBqcy0+b3V0ZXJfY291bnQgKyBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJICBw anMtPnJpZHMsICZ0cmVzdWx0KTsKKwkJcGpzLT5yZWxfZW50cmllcyA9IHRyZXN1bHQuZW50cmll czsKKwkJcGpzLT5yZWxfaW5kZXhlcyA9IHRyZXN1bHQuaW5kZXhlczsKKworCQkvKiBOb3cgdGhh dCB0aGUgbmV3IHBncGFfam9pbl9zdGF0ZSBpcyBmdWxseSB2YWxpZCwgc2F2ZSBhIHBvaW50ZXIu ICovCisJCVNldFJlbE9wdEluZm9FeHRlbnNpb25TdGF0ZShqb2lucmVsLCBwbGFubmVyX2V4dGVu c2lvbl9pZCwgcGpzKTsKKworCQkvKgorCQkgKiBJZiB0aGVyZSB3YXMgbm8gcmVsZXZhbnQgYWR2 aWNlIGZvdW5kLCBqdXN0IHJldHVybiBOVUxMLiBUaGlzCisJCSAqIHBncGFfam9pbl9zdGF0ZSB3 aWxsIHN0aWNrIGFyb3VuZCBhcyBhIHNvcnQgb2YgbmVnYXRpdmUgY2FjaGUKKwkJICogZW50cnks IHNvIHRoYXQgZnV0dXJlIGNhbGxzIGZvciB0aGlzIHNhbWUgam9pbnJlbCBxdWlja2x5IHJldHVy bgorCQkgKiBOVUxMLgorCQkgKi8KKwkJaWYgKHBqcy0+am9pbl9pbmRleGVzID09IE5VTEwgJiYg cGpzLT5yZWxfaW5kZXhlcyA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJu IHBqczsKK30KKworLyoKKyAqIEVuZm9yY2Ugb3ZlcmFsbCByZXN0cmljdGlvbnMgb24gYSBqb2lu IHJlbGF0aW9uIHRoYXQgYXBwbHkgdW5pZm9ybWx5CisgKiByZWdhcmRsZXNzIG9mIHRoZSBjaG9p Y2Ugb2YgaW5uZXIgYW5kIG91dGVyIHJlbC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcGxhbm5l cl9hcHBseV9qb2lucmVsX2FkdmljZSh1aW50NjQgKnBnc19tYXNrX3AsIGNoYXIgKnBsYW5fbmFt ZSwKKwkJCQkJCQkJICBwZ3BhX2pvaW5fc3RhdGUgKnBqcykKK3sKKwlpbnQJCQlpID0gLTE7CisJ aW50CQkJZmxhZ3M7CisJYm9vbAkJZ2F0aGVyX2NvbmZsaWN0ID0gZmFsc2U7CisJdWludDY0CQln YXRoZXJfbWFzayA9IDA7CisJQml0bWFwc2V0ICAqZ2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBOVUxM OworCUJpdG1hcHNldCAgKmdhdGhlcl9mdWxsX21hdGNoID0gTlVMTDsKKwlib29sCQlwYXJ0aXRp b253aXNlX2NvbmZsaWN0ID0gZmFsc2U7CisJaW50CQkJcGFydGl0aW9ud2lzZV9vdXRjb21lID0g MDsKKwlCaXRtYXBzZXQgICpwYXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2ggPSBOVUxMOworCUJp dG1hcHNldCAgKnBhcnRpdGlvbndpc2VfZnVsbF9tYXRjaCA9IE5VTEw7CisKKwkvKiBJdGVyYXRl IG92ZXIgYWxsIHBvc3NpYmx5LXJlbGV2YW50IGFkdmljZS4gKi8KKwl3aGlsZSAoKGkgPSBibXNf bmV4dF9tZW1iZXIocGpzLT5yZWxfaW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3Zl X2VudHJ5ICplbnRyeSA9ICZwanMtPnJlbF9lbnRyaWVzW2ldOworCQlwZ3BhX2l0bV90eXBlIGl0 bTsKKwkJYm9vbAkJZnVsbF9tYXRjaCA9IGZhbHNlOworCQl1aW50NjQJCW15X2dhdGhlcl9tYXNr ID0gMDsKKwkJaW50CQkJbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lID0gMDsJLyogPjAgeWVzLCA8 MCBubyAqLworCisJCS8qCisJCSAqIEZvciBHQVRIRVIgYW5kIEdBVEhFUl9NRVJHRSwgaWYgdGhl IHNwZWNpZmllZCByZWxhdGlvbnMgZXhhY3RseQorCQkgKiBtYXRjaCB0aGlzIGpvaW5yZWwsIGRv IHdoYXRldmVyIHRoZSBhZHZpY2Ugc2F5czsgb3RoZXJ3aXNlLCBkb24ndAorCQkgKiBhbGxvdyBH YXRoZXIgb3IgR2F0aGVyIE1lcmdlIGF0IHRoaXMgbGV2ZWwuIEZvciBOT19HQVRIRVIsIHRoZXJl CisJCSAqIG11c3QgYmUgYSBzaW5nbGUgdGFyZ2V0IHJlbGF0aW9uIHdoaWNoIG11c3QgYmUgaW5j bHVkZWQgaW4gdGhpcworCQkgKiBqb2lucmVsLCBzbyBqdXN0IGRvbid0IGFsbG93IEdhdGhlciBv ciBHYXRoZXIgTWVyZ2UgaGVyZSwgZnVsbAorCQkgKiBzdG9wLgorCQkgKi8KKwkJaWYgKGVudHJ5 LT50YWcgPT0gUEdQQV9UQUdfTk9fR0FUSEVSKQorCQl7CisJCQlteV9nYXRoZXJfbWFzayA9IFBH U19DT05TSURFUl9OT05QQVJUSUFMOworCQkJZnVsbF9tYXRjaCA9IHRydWU7CisJCX0KKwkJZWxz ZQorCQl7CisJCQlpbnQJCQl0b3RhbF9jb3VudDsKKworCQkJdG90YWxfY291bnQgPSBwanMtPm91 dGVyX2NvdW50ICsgcGpzLT5pbm5lcl9jb3VudDsKKwkJCWl0bSA9IHBncGFfaWRlbnRpZmllcnNf bWF0Y2hfdGFyZ2V0KHRvdGFsX2NvdW50LCBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQllbnRyeS0+ dGFyZ2V0KTsKKwkJCUFzc2VydChpdG0gIT0gUEdQQV9JVE1fRElTSk9JTlQpOworCisJCQlpZiAo aXRtID09IFBHUEFfSVRNX0VRVUFMKQorCQkJeworCQkJCWZ1bGxfbWF0Y2ggPSB0cnVlOworCQkJ CWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX1BBUlRJVElPTldJU0UpCisJCQkJCW15X3BhcnRp dGlvbndpc2Vfb3V0Y29tZSA9IDE7CisJCQkJZWxzZSBpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RB R19HQVRIRVIpCisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0dBVEhFUjsKKwkJCQllbHNlIGlm IChlbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUl9NRVJHRSkKKwkJCQkJbXlfZ2F0aGVyX21h c2sgPSBQR1NfR0FUSEVSX01FUkdFOworCQkJCWVsc2UKKwkJCQkJZWxvZyhFUlJPUiwgInVuZXhw ZWN0ZWQgYWR2aWNlIHRhZzogJWQiLAorCQkJCQkJIChpbnQpIGVudHJ5LT50YWcpOworCQkJfQor CQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJICogSWYgc3BlY2lmaWVkIHJlbGF0aW9ucyBkb24n dCBleGFjdGx5IG1hdGNoIHRoaXMgam9pbnJlbCwKKwkJCQkgKiB0aGVuIHdlIHNob3VsZCBkbyB0 aGUgb3Bwb3NpdGUgb2Ygd2hhdGV2ZXIgdGhlIGFkdmljZSBzYXlzLgorCQkJCSAqIEZvciBpbnN0 YW5jZSwgaWYgd2UgaGF2ZSBQQVJUSVRJT05XSVNFKChhIGIgYykpIG9yCisJCQkJICogR0FUSEVS KChhIGIgYykpIGFuZCB0aGlzIGpvaW5yZWwgY292ZXJzIHthLCBifSBvciB7YSwgYiwgYywKKwkJ CQkgKiBkfSBvciB7YSwgZH0sIHdlIHNob3VsZG4ndCBwbGFuIGl0IHBhcnRpdGl0aW9ud2lzZSBv ciBwdXQgYQorCQkJCSAqIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb24gaXQgaGVyZS4KKwkJCQkg KgorCQkJCSAqIEFsc28sIHdlIGNhbid0IHB1dCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2UgYXQg dGhpcyBsZXZlbAorCQkJCSAqIGlmIHRoZXJlIGlzIFBBUlRJVElPTldJU0UgYWR2aWNlIHRoYXQg b3ZlcmxhcHMgd2l0aCBpdCwKKwkJCQkgKiB1bmxlc3MgdGhlIFBBUlRJVElPTldJU0UgYWR2aWNl IGNvdmVycyBhIHN1YnNldCBvZiB0aGUKKwkJCQkgKiByZWxhdGlvbnMgaW4gdGhlIGpvaW5yZWwu IFRvIGNvbnRpbnVlIHRoZSBwcmV2aW91cyBleGFtcGxlLAorCQkJCSAqIFBBUlRJVElPTldJU0Uo KGEgYiBjKSkgaXMgbG9naWNhbGx5IGluY29tcGF0aWJsZSB3aXRoCisJCQkJICogR0FUSEVSKChh IGIpKSBvciBHQVRIRVIoKGEgZCkpLCBidXQgbm90IHdpdGggR0FUSEVSKChhIGIgYworCQkJCSAq IGQpKS4KKwkJCQkgKgorCQkJCSAqIENvbnZlcnNlbHksIHdlIGNhbid0IHByb2NlZWQgcGFydGl0 aW9ud2lzZSBhdCB0aGlzIGxldmVsIGlmCisJCQkJICogdGhlcmUgaXMgb3ZlcmxhcHBpbmcgR0FU SEVSIG9yIEdBVEhFUl9NRVJHRSBhZHZpY2UsIHVubGVzcworCQkJCSAqIHRoYXQgYWR2aWNlIGNv dmVycyBhIHN1cGVyc2V0IG9mIHRoZSByZWxhdGlvbnMgaW4gdGhpcworCQkJCSAqIGpvaW5yZWwu IFRoaXMgaXMganVzdCB0aGUgZmxpcCBzaWRlIG9mIHRoZSBwcmVjZWRpbmcgcG9pbnQuCisJCQkJ ICovCisJCQkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfUEFSVElUSU9OV0lTRSkKKwkJCQl7 CisJCQkJCW15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSA9IC0xOworCQkJCQlpZiAoaXRtICE9IFBH UEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NP TlNJREVSX05PTlBBUlRJQUw7CisJCQkJfQorCQkJCWVsc2UgaWYgKGVudHJ5LT50YWcgPT0gUEdQ QV9UQUdfR0FUSEVSIHx8CisJCQkJCQkgZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVJfTUVS R0UpCisJCQkJeworCQkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19DT05TSURFUl9OT05QQVJUSUFM OworCQkJCQlpZiAoaXRtICE9IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCkKKwkJCQkJCW15X3Bh cnRpdGlvbndpc2Vfb3V0Y29tZSA9IC0xOworCQkJCX0KKwkJCQllbHNlCisJCQkJCWVsb2coRVJS T1IsICJ1bmV4cGVjdGVkIGFkdmljZSB0YWc6ICVkIiwKKwkJCQkJCSAoaW50KSBlbnRyeS0+dGFn KTsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIElmIHdlIHNldCBteV9nYXRoZXJfbWFzayB1cCBh Ym92ZSwgdGhlbiB3ZSAoMSkgbWFrZSBhIG5vdGUgaWYgdGhlCisJCSAqIGFkdmljZSBjb25mbGlj dGVkLCAoMikgcmVtZW1iZXIgdGhlIG1hc2sgdmFsdWUsIGFuZCAoMykgcmVtZW1iZXIKKwkJICog d2hldGhlciB0aGlzIHdhcyBhIGZ1bGwgb3IgcGFydGlhbCBtYXRjaC4KKwkJICovCisJCWlmICht eV9nYXRoZXJfbWFzayAhPSAwKQorCQl7CisJCQlpZiAoZ2F0aGVyX21hc2sgIT0gMCAmJiBnYXRo ZXJfbWFzayAhPSBteV9nYXRoZXJfbWFzaykKKwkJCQlnYXRoZXJfY29uZmxpY3QgPSB0cnVlOwor CQkJZ2F0aGVyX21hc2sgPSBteV9nYXRoZXJfbWFzazsKKwkJCWlmIChmdWxsX21hdGNoKQorCQkJ CWdhdGhlcl9mdWxsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX2Z1bGxfbWF0Y2gsIGkp OworCQkJZWxzZQorCQkJCWdhdGhlcl9wYXJ0aWFsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0 aGVyX3BhcnRpYWxfbWF0Y2gsIGkpOworCQl9CisKKwkJLyoKKwkJICogTGlrZXdpc2UsIGlmIHdl IHNldCBteV9wYXJ0aXRpb253aXNlX291dGNvbWUgdXAgYWJvdmUsIHRoZW4gd2UgKDEpCisJCSAq IG1ha2UgYSBub3RlIGlmIHRoZSBhZHZpY2UgY29uZmxpY3RlZCwgKDIpIHJlbWVtYmVyIHdoYXQg dGhlIGRlc2lyZWQKKwkJICogb3V0Y29tZSB3YXMsIGFuZCAoMykgcmVtZW1iZXIgd2hldGhlciB0 aGlzIHdhcyBhIGZ1bGwgb3IgcGFydGlhbAorCQkgKiBtYXRjaC4KKwkJICovCisJCWlmIChteV9w YXJ0aXRpb253aXNlX291dGNvbWUgIT0gMCkKKwkJeworCQkJaWYgKHBhcnRpdGlvbndpc2Vfb3V0 Y29tZSAhPSAwICYmCisJCQkJcGFydGl0aW9ud2lzZV9vdXRjb21lICE9IG15X3BhcnRpdGlvbndp c2Vfb3V0Y29tZSkKKwkJCQlwYXJ0aXRpb253aXNlX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCXBhcnRp dGlvbndpc2Vfb3V0Y29tZSA9IG15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZTsKKwkJCWlmIChmdWxs X21hdGNoKQorCQkJCXBhcnRpdGlvbndpc2VfZnVsbF9tYXRjaCA9CisJCQkJCWJtc19hZGRfbWVt YmVyKHBhcnRpdGlvbndpc2VfZnVsbF9tYXRjaCwgaSk7CisJCQllbHNlCisJCQkJcGFydGl0aW9u d2lzZV9wYXJ0aWFsX21hdGNoID0KKwkJCQkJYm1zX2FkZF9tZW1iZXIocGFydGl0aW9ud2lzZV9w YXJ0aWFsX21hdGNoLCBpKTsKKwkJfQorCX0KKworCS8qCisJICogTWFyayBldmVyeSBHYXRoZXIt cmVsYXRlZCBwaWVjZSBvZiBhZHZpY2UgYXMgcGFydGlhbGx5IG1hdGNoZWQsIGFuZCBpZgorCSAq IHRoZSBzZXQgb2YgdGFyZ2V0cyBleGFjdGx5IG1hdGNoZWQgdGhpcyByZWxhdGlvbiwgZnVsbHkg bWF0Y2hlZC4gSWYKKwkgKiB0aGVyZSB3YXMgYSBjb25mbGljdCwgbWFyayB0aGVtIGFsbCBhcyBj b25mbGljdGluZy4KKwkgKi8KKwlmbGFncyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAo Z2F0aGVyX2NvbmZsaWN0KQorCQlmbGFncyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFf dHJvdmVfc2V0X2ZsYWdzKHBqcy0+cmVsX2VudHJpZXMsIGdhdGhlcl9wYXJ0aWFsX21hdGNoLCBm bGFncyk7CisJZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCXBncGFfdHJvdmVfc2V0X2Zs YWdzKHBqcy0+cmVsX2VudHJpZXMsIGdhdGhlcl9mdWxsX21hdGNoLCBmbGFncyk7CisKKwkvKiBM aWtld2lzZSBmb3IgcGFydGl0aW9ud2lzZSBhZHZpY2UuICovCisJZmxhZ3MgPSBQR1BBX1RFX01B VENIX1BBUlRJQUw7CisJaWYgKHBhcnRpdGlvbndpc2VfY29uZmxpY3QpCisJCWZsYWdzIHw9IFBH UEFfVEVfQ09ORkxJQ1RJTkc7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmll cywgcGFydGl0aW9ud2lzZV9wYXJ0aWFsX21hdGNoLCBmbGFncyk7CisJZmxhZ3MgfD0gUEdQQV9U RV9NQVRDSF9GVUxMOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+cmVsX2VudHJpZXMsIHBh cnRpdGlvbndpc2VfZnVsbF9tYXRjaCwgZmxhZ3MpOworCisJLyoKKwkgKiBFbmZvcmNlIHJlc3Ry aWN0aW9ucyBvbiB0aGUgR2F0aGVyL0dhdGhlciBNZXJnZS4gIE9ubHkgY2xlYXIgYml0cyBoZXJl LAorCSAqIHNvIHRoYXQgd2Ugc3RpbGwgcmVzcGVjdCB0aGUgZW5hYmxlXyogR1VDcy4gRG8gbm90 aGluZyBpZiB0aGUgYWR2aXNlCisJICogY29uZmxpY3RzLgorCSAqLworCWlmIChnYXRoZXJfbWFz ayAhPSAwICYmICFnYXRoZXJfY29uZmxpY3QpCisJeworCQl1aW50NjQJCWFsbF9nYXRoZXJfbWFz azsKKworCQlhbGxfZ2F0aGVyX21hc2sgPQorCQkJUEdTX0dBVEhFUiB8IFBHU19HQVRIRVJfTUVS R0UgfCBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJKnBnc19tYXNrX3AgJj0gfihhbGxfZ2F0 aGVyX21hc2sgJiB+Z2F0aGVyX21hc2spOworCX0KKworCS8qCisJICogQXMgYWJvdmUsIGJ1dCBm b3IgcGFydGl0aW9ud2lzZSBhZHZpY2UuCisJICoKKwkgKiBUbyBpbmR1Y2UgYSBwYXJ0aXRpb253 aXNlIGpvaW4sIHdlIGRpc2FibGUgYWxsIHRoZSBvcmRpbmFyeSBtZWFucyBvZgorCSAqIHBlcmZv cm1pbmcgYSBqb2luLCBzbyB0aGF0IGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBwYXRoIHdpbGwg aG9wZWZ1bGx5CisJICogYmUgY2hvc2VuLgorCSAqCisJICogVG8gcHJldmVudCBvbmUsIHdlIGp1 c3QgZGlzYWJsZSBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kLiAgTm90ZSB0aGF0IHdlCisJICogbXVz dCBub3QgdW5zZXQgUEdTX0NPTlNJREVSX1BBUlRJVElPTldJU0UgZXZlbiB3aGVuIHdlIGRvbid0 IHdhbnQgYQorCSAqIHBhcnRpdGlvbndpc2Ugam9pbiBoZXJlLCBiZWNhdXNlIHdlIG1pZ2h0IHdh bnQgb25lIGF0IGEgaGlnaGVyIGxldmVsCisJICogdGhhdCBpcyBjb25zdHJ1Y3RpbmcgdXNpbmcg cGF0aHMgZnJvbSB0aGlzIGxldmVsLgorCSAqLworCWlmIChwYXJ0aXRpb253aXNlX291dGNvbWUg IT0gMCAmJiAhcGFydGl0aW9ud2lzZV9jb25mbGljdCkKKwl7CisJCWlmIChwYXJ0aXRpb253aXNl X291dGNvbWUgPiAwKQorCQkJKnBnc19tYXNrX3AgPSAoKnBnc19tYXNrX3AgJiB+UEdTX0pPSU5f QU5ZKTsKKwkJZWxzZQorCQkJKnBnc19tYXNrX3AgJj0gfihQR1NfQVBQRU5EIHwgUEdTX01FUkdF X0FQUEVORCk7CisJfQorfQorCisvKgorICogRW5mb3JjZSByZXN0cmljdGlvbnMgb24gdGhlIGpv aW4gb3JkZXIgb3Igam9pbiBtZXRob2QuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJf YXBwbHlfam9pbl9wYXRoX2FkdmljZShKb2luVHlwZSBqb2ludHlwZSwgdWludDY0ICpwZ3NfbWFz a19wLAorCQkJCQkJCQkJY2hhciAqcGxhbl9uYW1lLAorCQkJCQkJCQkJcGdwYV9qb2luX3N0YXRl ICpwanMpCit7CisJaW50CQkJaSA9IC0xOworCUJpdG1hcHNldCAgKmpvX3Blcm1pdF9pbmRleGVz ID0gTlVMTDsKKwlCaXRtYXBzZXQgICpqb19kZW55X2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNl dCAgKmpvX2RlbnlfcmVsX2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNldCAgKmptX2luZGV4ZXMg PSBOVUxMOworCWJvb2wJCWptX2NvbmZsaWN0ID0gZmFsc2U7CisJdWludDMyCQlqb2luX21hc2sg PSAwOworCUJpdG1hcHNldCAgKnNqX3Blcm1pdF9pbmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQg ICpzal9kZW55X2luZGV4ZXMgPSBOVUxMOworCisJLyoKKwkgKiBSZWNvbnNpZGVyIFBBUlRJVElP TldJU0UoLi4uKSBhZHZpY2UuCisJICoKKwkgKiBXZSBhbHJlYWR5IHRob3VnaHQgYWJvdXQgdGhp cyBmb3IgdGhlIGpvaW5yZWwgYXMgYSB3aG9sZSwgYnV0IGluIHNvbWUKKwkgKiBjYXNlcywgcGFy dGl0aW9ud2lzZSBhZHZpY2UgY2FuIGFsc28gY29uc3RyYWluIHRoZSBqb2luIG9yZGVyLiBGb3IK KwkgKiBpbnN0YW5jZSwgaWYgdGhlIGFkdmljZSBzYXlzIFBBUlRJVElPTldJU0UoKHQxIHQyKSks IHdlIHNob3VsZG4ndCBidWlsZAorCSAqIGpvaW4gcGF0aHMgZm9yIGEgYW55IGpvaW5yZWwgdGhh dCBpbmNsdWRlcyB0MSBvciB0MiB1bmxlc3MgaXQgYWxzbworCSAqIGluY2x1ZGVzIHRoZSBvdGhl ci4gSW4gZ2VuZXJhbCwgdGhlIHBhcml0aW9ud2lzZSBvcGVyYXRpb24gbXVzdCBoYXZlCisJICog YWxyZWFkeSBiZWVuIGNvbXBsZXRlZCB3aXRoaW4gb25lIHNpZGUgb2YgdGhlIGN1cnJlbnQgam9p biBvciB0aGUKKwkgKiBvdGhlciwgZWxzZSB0aGUgam9pbiBvcmRlciBpcyBpbXBlcm1pc3NpYmxl LgorCSAqCisJICogTkI6IEl0IG1pZ2h0IHNlZW0gdGVtcHRpbmcgdG8gdHJ5IHRvIGRlYWwgd2l0 aCBQQVJUSVRJT05XSVNFIGFkdmlzZQorCSAqIGVudGlyZWx5IGluIHRoaXMgZnVuY3Rpb24sIGJ1 dCB0aGF0IGRvZXNuJ3Qgd29yay4gSGVyZSwgd2UgY2FuIG9ubHkKKwkgKiBhZmZlY3QgdGhlIHBn c19tYXNrIHdpdGhpbiBhIHBhcnRpY3VsYXIgSm9pblBhdGhFeHRyYURhdGEsIHRoYXQgaXMsIGZv cgorCSAqIGEgcGFydGljdWxhciBjaG9pY2Ugb2YgaW5uZXJyZWwgYW5kIG91dGVycmVsLiBQYXJ0 aXRpb253aXNlIHBhdGhzIGFyZQorCSAqIG5vdCBidWlsdCB0aGF0IHdheSwgc28gd2UgbXVzdCBz ZXQgcGdzX21hc2sgZm9yIHRoZSBSZWxPcHRJbmZvLCB3aGljaAorCSAqIGlzIGJlc3QgZG9uZSBp biBwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbnJlbF9hZHZpY2UuCisJICovCisJd2hpbGUgKChpID0g Ym1zX25leHRfbWVtYmVyKHBqcy0+cmVsX2luZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90 cm92ZV9lbnRyeSAqZW50cnkgPSAmcGpzLT5yZWxfZW50cmllc1tpXTsKKwkJcGdwYV9pdG1fdHlw ZSBpbm5lcl9pdG07CisJCXBncGFfaXRtX3R5cGUgb3V0ZXJfaXRtOworCisJCWlmIChlbnRyeS0+ dGFnICE9IFBHUEFfVEFHX1BBUlRJVElPTldJU0UpCisJCQljb250aW51ZTsKKworCQlvdXRlcl9p dG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChwanMtPm91dGVyX2NvdW50LAorCQkJ CQkJCQkJCQkJICBwanMtPnJpZHMsIGVudHJ5LT50YXJnZXQpOworCQlpZiAob3V0ZXJfaXRtID09 IFBHUEFfSVRNX0VRVUFMIHx8CisJCQlvdXRlcl9pdG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVf U1VCU0VUKQorCQkJY29udGludWU7CisKKwkJaW5uZXJfaXRtID0gcGdwYV9pZGVudGlmaWVyc19t YXRjaF90YXJnZXQocGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJCSAgcGpzLT5yaWRzICsg cGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJCSAgZW50cnktPnRhcmdldCk7CisJCWlmIChp bm5lcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwgfHwKKwkJCWlubmVyX2l0bSA9PSBQR1BBX0lUTV9U QVJHRVRTX0FSRV9TVUJTRVQpCisJCQljb250aW51ZTsKKworCQlqb19kZW55X3JlbF9pbmRleGVz ID0gYm1zX2FkZF9tZW1iZXIoam9fZGVueV9yZWxfaW5kZXhlcywgaSk7CisJfQorCisJLyogSXRl cmF0ZSBvdmVyIGFkdmljZSB0aGF0IHBlcnRhaW5zIHRvIHRoZSBqb2luIG9yZGVyIGFuZCBtZXRo b2QuICovCisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwanMtPmpvaW5f aW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZwanMt PmpvaW5fZW50cmllc1tpXTsKKwkJdWludDMyCQlteV9qb2luX21hc2s7CisKKwkJLyogSGFuZGxl IGpvaW4gb3JkZXIgYWR2aWNlLiAqLworCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19KT0lO X09SREVSKQorCQl7CisJCQlwZ3BhX2pvX291dGNvbWUgam9fb3V0Y29tZTsKKworCQkJam9fb3V0 Y29tZSA9IHBncGFfam9pbl9vcmRlcl9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJ CQkJCQkJCQkJCQkgIHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICBwanMtPnJpZHMs CisJCQkJCQkJCQkJCQkJICBlbnRyeSk7CisJCQlpZiAoam9fb3V0Y29tZSA9PSBQR1BBX0pPX1BF Uk1JVFRFRCkKKwkJCQlqb19wZXJtaXRfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX3Blcm1p dF9pbmRleGVzLCBpKTsKKwkJCWVsc2UgaWYgKGpvX291dGNvbWUgPT0gUEdQQV9KT19ERU5JRUQp CisJCQkJam9fZGVueV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam9fZGVueV9pbmRleGVzLCBp KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSGFuZGxlIGpvaW4gbWV0aG9kIGFkdmljZS4g Ki8KKwkJbXlfam9pbl9tYXNrID0gcGdwYV9qb2luX3N0cmF0ZWd5X21hc2tfZnJvbV9hZHZpY2Vf dGFnKGVudHJ5LT50YWcpOworCQlpZiAobXlfam9pbl9tYXNrICE9IDApCisJCXsKKwkJCWJvb2wJ CXBlcm1pdDsKKwkJCWJvb2wJCXJlc3RyaWN0X21ldGhvZDsKKworCQkJaWYgKGVudHJ5LT50YWcg PT0gUEdQQV9UQUdfRk9SRUlHTl9KT0lOKQorCQkJCXBlcm1pdCA9IHBncGFfb3BhcXVlX2pvaW5f cGVybWl0c19qb2luKHBqcy0+b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpzLT5pbm5l cl9jb3VudCwKKwkJCQkJCQkJCQkJCQkgICBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQkJICAgZW50 cnksCisJCQkJCQkJCQkJCQkJICAgJnJlc3RyaWN0X21ldGhvZCk7CisJCQllbHNlCisJCQkJcGVy bWl0ID0gcGdwYV9qb2luX21ldGhvZF9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJ CQkJCQkJCQkJCQkgICBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+cmlk cywKKwkJCQkJCQkJCQkJCQkgICBlbnRyeSwKKwkJCQkJCQkJCQkJCQkgICAmcmVzdHJpY3RfbWV0 aG9kKTsKKwkJCWlmICghcGVybWl0KQorCQkJCWpvX2RlbnlfaW5kZXhlcyA9IGJtc19hZGRfbWVt YmVyKGpvX2RlbnlfaW5kZXhlcywgaSk7CisJCQllbHNlIGlmIChyZXN0cmljdF9tZXRob2QpCisJ CQl7CisJCQkJam1faW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGptX2luZGV4ZXMsIGkpOworCQkJ CWlmIChqb2luX21hc2sgIT0gMCAmJiBqb2luX21hc2sgIT0gbXlfam9pbl9tYXNrKQorCQkJCQlq bV9jb25mbGljdCA9IHRydWU7CisJCQkJam9pbl9tYXNrID0gbXlfam9pbl9tYXNrOworCQkJfQor CQkJY29udGludWU7CisJCX0KKworCQkvKiBIYW5kbGUgc2VtaWpvaW4gdW5pcXVlbmVzcyBhZHZp Y2UuICovCisJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRSB8fAor CQkJZW50cnktPnRhZyA9PSBQR1BBX1RBR19TRU1JSk9JTl9OT05fVU5JUVVFKQorCQl7CisJCQli b29sCQlvdXRlcl9zaWRlX251bGxhYmxlOworCQkJYm9vbAkJcmVzdHJpY3RfbWV0aG9kOworCisJ CQkvKiBQbGFubmVyIGhhcyBudWxsYWJsZSBzaWRlIG9mIHRoZSBzZW1pam9pbiBvbiB0aGUgb3V0 ZXIgc2lkZT8gKi8KKwkJCW91dGVyX3NpZGVfbnVsbGFibGUgPSAoam9pbnR5cGUgPT0gSk9JTl9V TklRVUVfT1VURVIgfHwKKwkJCQkJCQkJICAgam9pbnR5cGUgPT0gSk9JTl9SSUdIVF9TRU1JKTsK KworCQkJaWYgKCFwZ3BhX3NlbWlqb2luX3Blcm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50LAor CQkJCQkJCQkJCQlwanMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQlwanMtPnJpZHMsCisJCQkJ CQkJCQkJCWVudHJ5LAorCQkJCQkJCQkJCQlvdXRlcl9zaWRlX251bGxhYmxlLAorCQkJCQkJCQkJ CQkmcmVzdHJpY3RfbWV0aG9kKSkKKwkJCQlqb19kZW55X2luZGV4ZXMgPSBibXNfYWRkX21lbWJl cihqb19kZW55X2luZGV4ZXMsIGkpOworCQkJZWxzZSBpZiAocmVzdHJpY3RfbWV0aG9kKQorCQkJ eworCQkJCWJvb2wJCWFkdmljZV91bmlxdWU7CisJCQkJYm9vbAkJanRfdW5pcXVlOworCQkJCWJv b2wJCWp0X25vbl91bmlxdWU7CisKKwkJCQkvKiBBZHZpY2Ugd2FudHMgdG8gdW5pcXVlLWlmeSBh bmQgdXNlIGEgcmVndWxhciBqb2luPyAqLworCQkJCWFkdmljZV91bmlxdWUgPSAoZW50cnktPnRh ZyA9PSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUUpOworCisJCQkJLyogUGxhbm5lciBpcyB0cnlp bmcgdG8gdW5pcXVlLWlmeSBhbmQgdXNlIGEgcmVndWxhciBqb2luPyAqLworCQkJCWp0X3VuaXF1 ZSA9IChqb2ludHlwZSA9PSBKT0lOX1VOSVFVRV9JTk5FUiB8fAorCQkJCQkJCSBqb2ludHlwZSA9 PSBKT0lOX1VOSVFVRV9PVVRFUik7CisKKwkJCQkvKiBQbGFubmVyIGlzIHRyeWluZyBhIHNlbWkt am9pbiwgd2l0aG91dCB1bmlxdWUtaWZ5aW5nPyAqLworCQkJCWp0X25vbl91bmlxdWUgPSAoam9p bnR5cGUgPT0gSk9JTl9TRU1JIHx8CisJCQkJCQkJCSBqb2ludHlwZSA9PSBKT0lOX1JJR0hUX1NF TUkpOworCisJCQkJaWYgKCFqdF91bmlxdWUgJiYgIWp0X25vbl91bmlxdWUpCisJCQkJeworCQkJ CQkvKgorCQkJCQkgKiBUaGlzIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHNlbWlqb2luIHRvIHdoaWNo IFNKX1VOSVFVRQorCQkJCQkgKiBvciBTSl9OT05fVU5JUVVFIGNhbiBiZSBhcHBsaWVkLgorCQkJ CQkgKi8KKwkJCQkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfSU5BUFBMSUNBQkxFOworCQkJCX0K KwkJCQllbHNlIGlmIChhZHZpY2VfdW5pcXVlICE9IGp0X3VuaXF1ZSkKKwkJCQkJc2pfZGVueV9p bmRleGVzID0gYm1zX2FkZF9tZW1iZXIoc2pfZGVueV9pbmRleGVzLCBpKTsKKwkJCQllbHNlCisJ CQkJCXNqX3Blcm1pdF9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoc2pfcGVybWl0X2luZGV4ZXMs IGkpOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHRoZSBhZHZp Y2UgaW5kaWNhdGVzIGJvdGggdGhhdCB0aGlzIGpvaW4gb3JkZXIgaXMgcGVybWlzc2libGUgYW5k CisJICogYWxzbyB0aGF0IGl0IGlzbid0LCB0aGVuIG1hcmsgYWR2aWNlIHJlbGF0ZWQgdG8gdGhl IGpvaW4gb3JkZXIgYXMKKwkgKiBjb25mbGljdGluZy4KKwkgKi8KKwlpZiAoam9fcGVybWl0X2lu ZGV4ZXMgIT0gTlVMTCAmJgorCQkoam9fZGVueV9pbmRleGVzICE9IE5VTEwgfHwgam9fZGVueV9y ZWxfaW5kZXhlcyAhPSBOVUxMKSkKKwl7CisJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+am9p bl9lbnRyaWVzLCBqb19wZXJtaXRfaW5kZXhlcywKKwkJCQkJCQkgUEdQQV9URV9DT05GTElDVElO Ryk7CisJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+am9pbl9lbnRyaWVzLCBqb19kZW55X2lu ZGV4ZXMsCisJCQkJCQkJIFBHUEFfVEVfQ09ORkxJQ1RJTkcpOworCQlwZ3BhX3Ryb3ZlX3NldF9m bGFncyhwanMtPnJlbF9lbnRyaWVzLCBqb19kZW55X3JlbF9pbmRleGVzLAorCQkJCQkJCSBQR1BB X1RFX0NPTkZMSUNUSU5HKTsKKwl9CisKKwkvKgorCSAqIElmIG1vcmUgdGhhbiBvbmUgam9pbiBt ZXRob2Qgc3BlY2lmaWNhdGlvbiBpcyByZWxldmFudCBoZXJlIGFuZCB0aGV5CisJICogZGlmZmVy LCBtYXJrIHRoZW0gYWxsIGFzIGNvbmZsaWN0aW5nLgorCSAqLworCWlmIChqbV9jb25mbGljdCkK KwkJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2VudHJpZXMsIGptX2luZGV4ZXMsCisJ CQkJCQkJIFBHUEFfVEVfQ09ORkxJQ1RJTkcpOworCisJLyogSWYgc2VtaWpvaW4gYWR2aWNlIHNh eXMgYm90aCB5ZXMgYW5kIG5vLCBtYXJrIGl0IGFsbCBhcyBjb25mbGljdGluZy4gKi8KKwlpZiAo c2pfcGVybWl0X2luZGV4ZXMgIT0gTlVMTCAmJiBzal9kZW55X2luZGV4ZXMgIT0gTlVMTCkKKwl7 CisJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+am9pbl9lbnRyaWVzLCBzal9wZXJtaXRfaW5k ZXhlcywKKwkJCQkJCQkgUEdQQV9URV9DT05GTElDVElORyk7CisJCXBncGFfdHJvdmVfc2V0X2Zs YWdzKHBqcy0+am9pbl9lbnRyaWVzLCBzal9kZW55X2luZGV4ZXMsCisJCQkJCQkJIFBHUEFfVEVf Q09ORkxJQ1RJTkcpOworCX0KKworCS8qCisJICogRW5mb3JjZSByZXN0cmljdGlvbnMgb24gdGhl IGpvaW4gb3JkZXIgYW5kIGpvaW4gbWV0aG9kLCBhbmQgYW55CisJICogc2VtaWpvaW4tcmVsYXRl ZCByZXN0cmljdGlvbnMuIE9ubHkgY2xlYXIgYml0cyBoZXJlLCBzbyB0aGF0IHdlIHN0aWxsCisJ ICogcmVzcGVjdCB0aGUgZW5hYmxlXyogR1VDcy4gRG8gbm90aGluZyBpbiBjYXNlcyB3aGVyZSB0 aGUgYWR2aWNlIG9uIGEKKwkgKiBzaW5nbGUgdG9waWMgY29uZmxpY3RzLgorCSAqLworCWlmICgo am9fZGVueV9pbmRleGVzICE9IE5VTEwgfHwgam9fZGVueV9yZWxfaW5kZXhlcyAhPSBOVUxMKSAm JgorCQlqb19wZXJtaXRfaW5kZXhlcyA9PSBOVUxMKQorCQkqcGdzX21hc2tfcCAmPSB+UEdTX0pP SU5fQU5ZOworCWlmIChqb2luX21hc2sgIT0gMCAmJiAham1fY29uZmxpY3QpCisJCSpwZ3NfbWFz a19wICY9IH4oUEdTX0pPSU5fQU5ZICYgfmpvaW5fbWFzayk7CisJaWYgKHNqX2RlbnlfaW5kZXhl cyAhPSBOVUxMICYmIHNqX3Blcm1pdF9pbmRleGVzID09IE5VTEwpCisJCSpwZ3NfbWFza19wICY9 IH5QR1NfSk9JTl9BTlk7Cit9CisKKy8qCisgKiBUcmFuc2xhdGUgYW4gYWR2aWNlIHRhZyBpbnRv IGEgcGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWd5IG1hc2suCisgKgorICogVGhpcyBmdW5jdGlvbiBj YW4gYmUgY2FsbGVkIHdpdGggdGFnIHR5cGVzIHRoYXQgZG9uJ3QgcmVwcmVzZW50IGpvaW4KKyAq IHN0cmF0ZWdpZXMuIEluIHN1Y2ggY2FzZXMsIHdlIGp1c3QgcmV0dXJuIDAsIHdoaWNoIGNhbid0 IGJlIGNvbmZ1c2VkIHdpdGgKKyAqIGEgdmFsaWQgbWFzay4KKyAqLworc3RhdGljIHVpbnQ2NAor cGdwYV9qb2luX3N0cmF0ZWd5X21hc2tfZnJvbV9hZHZpY2VfdGFnKHBncGFfYWR2aWNlX3RhZ190 eXBlIHRhZykKK3sKKwlzd2l0Y2ggKHRhZykKKwl7CisJCWNhc2UgUEdQQV9UQUdfRk9SRUlHTl9K T0lOOgorCQkJcmV0dXJuIFBHU19GT1JFSUdOSk9JTjsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9K T0lOX1BMQUlOOgorCQkJcmV0dXJuIFBHU19NRVJHRUpPSU5fUExBSU47CisJCWNhc2UgUEdQQV9U QUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCXJldHVybiBQR1NfTUVSR0VKT0lOX01BVEVS SUFMSVpFOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJcmV0dXJuIFBH U19ORVNUTE9PUF9QTEFJTjsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTEla RToKKwkJCXJldHVybiBQR1NfTkVTVExPT1BfTUFURVJJQUxJWkU7CisJCWNhc2UgUEdQQV9UQUdf TkVTVEVEX0xPT1BfTUVNT0laRToKKwkJCXJldHVybiBQR1NfTkVTVExPT1BfTUVNT0laRTsKKwkJ Y2FzZSBQR1BBX1RBR19IQVNIX0pPSU46CisJCQlyZXR1cm4gUEdTX0hBU0hKT0lOOworCQlkZWZh dWx0OgorCQkJcmV0dXJuIDA7CisJfQorfQorCisvKgorICogRG9lcyBhIGNlcnRhaW4gaXRlbSBv ZiBqb2luIG9yZGVyIGFkdmljZSBwZXJtaXQgYSBjZXJ0YWluIGpvaW4/CisgKgorICogUmV0dXJu cyBQR1BBX0pPX0RFTklFRCBpZiB0aGUgYWR2aWNlIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBw cm9wb3NlZAorICogam9pbiBvcmRlci4KKyAqCisgKiBSZXR1cm5zIFBHUEFfSk9fUEVSTUlUVEVE IGlmIHRoZSBhZHZpY2Ugc3BlY2lmaWVzIGV4YWN0bHkgdGhlIHByb3Bvc2VkCisgKiBqb2luIG9y ZGVyLiBUaGlzIGltcGxpZXMgdGhhdCBhIHBhcnRpdGlvbndpc2Ugam9pbiBzaG91bGQgbm90IGJl CisgKiBwZXJmb3JtZWQgYXQgdGhpcyBsZXZlbDsgcmF0aGVyLCBvbmUgb2YgdGhlIHRyYWRpdGlv bmFsIGpvaW4gbWV0aG9kcworICogc2hvdWxkIGJlIHVzZWQuCisgKgorICogUmV0dXJucyBQR1BB X0pPX0lORElGRkVSRU5UIGlmIHRoZSBhZHZpY2UgZG9lcyBub3QgY2FyZSB3aGF0IGhhcHBlbnMu CisgKiBXZSB1c2UgdGhpcyBmb3IgdW5vcmRlcmVkIEpPSU5fT1JERVIgc3VibGlzdHMsIHdoaWNo IGFyZSBjb21wYXRpYmxlIHdpdGgKKyAqIHBhcnRpdGlvbndpc2Ugam9pbiBidXQgZG8gbm90IG1h bmRhdGUgaXQuCisgKi8KK3N0YXRpYyBwZ3BhX2pvX291dGNvbWUKK3BncGFfam9pbl9vcmRlcl9w ZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkJIHBn cGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgcGdwYV90cm92ZV9lbnRyeSAqZW50cnkpCit7 CisJYm9vbAkJbG9vcCA9IHRydWU7CisJYm9vbAkJc3VibGlzdCA9IGZhbHNlOworCWludAkJCWxl bmd0aDsKKwlpbnQJCQlvdXRlcl9sZW5ndGg7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQg PSBlbnRyeS0+dGFyZ2V0OworCXBncGFfYWR2aWNlX3RhcmdldCAqcHJlZml4X3RhcmdldDsKKwor CS8qIFdlIGRlZmluaXRlbHkgaGF2ZSBhdCBsZWFzdCBhIHBhcnRpYWwgbWF0Y2ggZm9yIHRoaXMg dHJvdmUgZW50cnkuICovCisJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsK KworCS8qCisJICogRmluZCB0aGUgaW5uZXJtb3N0IHN1Ymxpc3QgdGhhdCBjb250YWlucyBhbGwg a2V5czsgaWYgbm8gc3VibGlzdCBkb2VzLAorCSAqIHRoZW4gY29udGludWUgcHJvY2Vzc2luZyB3 aXRoIHRoZSB0b3BsZXZlbCBsaXN0LgorCSAqCisJICogRm9yIGV4YW1wbGUsIGlmIHRoZSBhZHZp Y2Ugc2F5cyBKT0lOX09SREVSKHQxIHQyICh0MyB0NCB0NSkpLCB0aGVuIHdlCisJICogc2hvdWxk IGV2YWx1YXRlIGpvaW5zIHRoYXQgb25seSBpbnZvbHZlIHQzLCB0NCwgYW5kL29yIHQ1IGFnYWlu c3QgdGhlCisJICogKHQzIHQ0IHQ1KSBzdWJsaXN0LCBhbmQgb3RoZXJzIGFnYWluc3QgdGhlIGZ1 bGwgbGlzdC4KKwkgKgorCSAqIE5vdGUgdGhhdCAoMSkgb3V0ZXJtb3N0IHN1Ymxpc3QgaXMgYWx3 YXlzIG9yZGVyZWQgYW5kICgyKSB3aGVuZXZlciB3ZQorCSAqIHpvb20gaW50byBhbiB1bm9yZGVy ZWQgc3VibGlzdCwgd2UgaW5zdGFudGx5IHJldHVybgorCSAqIFBHUEFfSk9fSU5ESUZGRVJFTlQu CisJICovCisJd2hpbGUgKGxvb3ApCisJeworCQlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BB X1RBUkdFVF9PUkRFUkVEX0xJU1QpOworCisJCWxvb3AgPSBmYWxzZTsKKwkJZm9yZWFjaF9wdHIo cGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsK KwkJCXBncGFfaXRtX3R5cGUgaXRtOworCisJCQlpZiAoY2hpbGRfdGFyZ2V0LT50dHlwZSA9PSBQ R1BBX1RBUkdFVF9JREVOVElGSUVSKQorCQkJCWNvbnRpbnVlOworCisJCQlpdG0gPSBwZ3BhX2lk ZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCArIGlubmVyX2NvdW50LAorCQkJCQkJ CQkJCQkJcmlkcywgY2hpbGRfdGFyZ2V0KTsKKwkJCWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwg fHwgaXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCkKKwkJCXsKKwkJCQlpZiAoY2hpbGRf dGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpCisJCQkJeworCQkJCQl0 YXJnZXQgPSBjaGlsZF90YXJnZXQ7CisJCQkJCXN1Ymxpc3QgPSB0cnVlOworCQkJCQlsb29wID0g dHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFzc2VydChj aGlsZF90YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUKTsKKwkJCQkJ cmV0dXJuIFBHUEFfSk9fSU5ESUZGRVJFTlQ7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoK KwkgKiBUcnkgdG8gZmluZCBhIHByZWZpeCBvZiB0aGUgc2VsZWN0ZWQgam9pbiBvcmRlciBsaXN0 IHRoYXQgaXMgZXhhY3RseQorCSAqIGVxdWFsIHRvIHRoZSBvdXRlciBzaWRlIG9mIHRoZSBwcm9w b3NlZCBqb2luLgorCSAqLworCWxlbmd0aCA9IGxpc3RfbGVuZ3RoKHRhcmdldC0+Y2hpbGRyZW4p OworCXByZWZpeF90YXJnZXQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOwor CXByZWZpeF90YXJnZXQtPnR0eXBlID0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOworCWZvciAo b3V0ZXJfbGVuZ3RoID0gMTsgb3V0ZXJfbGVuZ3RoIDw9IGxlbmd0aDsgKytvdXRlcl9sZW5ndGgp CisJeworCQlwZ3BhX2l0bV90eXBlIGl0bTsKKworCQkvKiBBdm9pZCBsZWFraW5nIG1lbW9yeSBp biBldmVyeSBsb29wIGl0ZXJhdGlvbi4gKi8KKwkJaWYgKHByZWZpeF90YXJnZXQtPmNoaWxkcmVu ICE9IE5VTEwpCisJCQlsaXN0X2ZyZWUocHJlZml4X3RhcmdldC0+Y2hpbGRyZW4pOworCQlwcmVm aXhfdGFyZ2V0LT5jaGlsZHJlbiA9IGxpc3RfY29weV9oZWFkKHRhcmdldC0+Y2hpbGRyZW4sCisJ CQkJCQkJCQkJCQkgb3V0ZXJfbGVuZ3RoKTsKKworCQkvKiBTZWFyY2gsIGhvcGluZyB0byBmaW5k IGFuIGV4YWN0IG1hdGNoLiAqLworCQlpdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3Rhcmdl dChvdXRlcl9jb3VudCwgcmlkcywgcHJlZml4X3RhcmdldCk7CisJCWlmIChpdG0gPT0gUEdQQV9J VE1fRVFVQUwpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBJZiB0aGUgcHJlZml4IG9mIHRoZSBq b2luIG9yZGVyIGxpc3QgdGhhdCB3ZSdyZSBjb25zaWRlcmluZworCQkgKiBpbmNsdWRlcyBzb21l IGJ1dCBub3QgYWxsIG9mIHRoZSBvdXRlciByZWxzLCB3ZSBjYW4gbWFrZSB0aGUgcHJlZml4CisJ CSAqIGxvbmdlciB0byBmaW5kIGFuIGV4YWN0IG1hdGNoLiBCdXQgdGhlIGFkdmljZSBoYXNuJ3Qg bWVudGlvbmVkCisJCSAqIGV2ZXJ5dGhpbmcgdGhhdCdzIHBhcnQgb2Ygb3VyIG91dGVyIHJlbCB5 ZXQsIGJ1dCBoYXMgbWVudGlvbmVkCisJCSAqIHRoaW5ncyB0aGF0IGFyZSBub3QsIHRoZW4gdGhp cyBqb2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGpvaW4gb3JkZXIKKwkJICogbGlzdC4KKwkJICovCisJ CWlmIChpdG0gIT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQkJcmV0dXJuIFBHUEFf Sk9fREVOSUVEOworCX0KKworCS8qCisJICogSWYgdGhlIHByZXZpb3VzIGxvb3BlZCBzdG9wcGVk IGJlZm9yZSB0aGUgcHJlZml4X3RhcmdldCBpbmNsdWRlZCB0aGUKKwkgKiBlbnRpcmUgam9pbiBv cmRlciBsaXN0LCB0aGVuIHRoZSBuZXh0IG1lbWJlciBvZiB0aGUgam9pbiBvcmRlciBsaXN0CisJ ICogbXVzdCBleGFjdGx5IG1hdGNoIHRoZSBpbm5lciBzaWRlIG9mIHRoZSBqb2luLgorCSAqCisJ ICogRXhhbXBsZTogR2l2ZW4gSk9JTl9PUkRFUih0MSB0MiAodDMgdDQgdDUpKSwgaWYgdGhlIG91 dGVyIHNpZGUgb2YgdGhlCisJICogY3VycmVudCBqb2luIGluY2x1ZGVzIG9ubHkgdDEsIHRoZW4g dGhlIGlubmVyIHNpZGUgbXVzdCBiZSBleGFjdGx5IHQyOworCSAqIGlmIHRoZSBvdXRlciBzaWRl IGluY2x1ZGVzIGJvdGggdDEgYW5kIHQyLCB0aGVuIHRoZSBpbm5lciBzaWRlIG11c3QKKwkgKiBp bmNsdWRlIGV4YWN0bHkgdDMsIHQ0LCBhbmQgdDUuCisJICovCisJaWYgKG91dGVyX2xlbmd0aCA8 IGxlbmd0aCkKKwl7CisJCXBncGFfYWR2aWNlX3RhcmdldCAqaW5uZXJfdGFyZ2V0OworCQlwZ3Bh X2l0bV90eXBlIGl0bTsKKworCQlpbm5lcl90YXJnZXQgPSBsaXN0X250aCh0YXJnZXQtPmNoaWxk cmVuLCBvdXRlcl9sZW5ndGgpOworCisJCWl0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFy Z2V0KGlubmVyX2NvdW50LCByaWRzICsgb3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCWlubmVyX3Rh cmdldCk7CisKKwkJLyoKKwkJICogQmVmb3JlIHJldHVybmluZywgY29uc2lkZXIgd2hldGhlciB3 ZSBuZWVkIHRvIG1hcmsgdGhpcyBlbnRyeSBhcworCQkgKiBmdWxseSBtYXRjaGVkLiBJZiB3ZSdy ZSBjb25zaWRlcmluZyB0aGUgZnVsbCBsaXN0IHJhdGhlciB0aGFuIGEKKwkJICogc3VibGlzdCwg YW5kIGlmIHdlIGZvdW5kIGV2ZXJ5IGl0ZW0gYnV0IG9uZSBvbiB0aGUgb3V0ZXIgc2lkZSBvZgor CQkgKiB0aGUgam9pbiBhbmQgdGhlIGxhc3QgaXRlbSBvbiB0aGUgaW5uZXIgc2lkZSBvZiB0aGUg am9pbiwgdGhlbiB0aGUKKwkJICogYW5zd2VyIGlzIHllcy4KKwkJICovCisJCWlmICghc3VibGlz dCAmJiBvdXRlcl9sZW5ndGggKyAxID09IGxlbmd0aCAmJiBpdG0gPT0gUEdQQV9JVE1fRVFVQUwp CisJCQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCisJCXJldHVybiAoaXRt ID09IFBHUEFfSVRNX0VRVUFMKSA/IFBHUEFfSk9fUEVSTUlUVEVEIDogUEdQQV9KT19ERU5JRUQ7 CisJfQorCisJLyoKKwkgKiBJZiB3ZSBnZXQgaGVyZSwgdGhlbiB0aGUgb3V0ZXIgc2lkZSBvZiB0 aGUgam9pbiBpbmNsdWRlcyB0aGUgZW50aXJldHkKKwkgKiBvZiB0aGUgam9pbiBvcmRlciBsaXN0 LiBJbiB0aGlzIGNhc2UsIHdlIGJlaGF2ZSBkaWZmZXJlbnRseSBkZXBlbmRpbmcKKwkgKiBvbiB3 aGV0aGVyIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIHRvcC1sZXZlbCBqb2luIG9yZGVyIGxpc3Qgb3Ig c3VibGlzdC4KKwkgKiBBdCB0aGUgdG9wLWxldmVsLCB3ZSB0cmVhdCB0aGUgc3BlY2lmaWVkIGxp c3QgYXMgbWFuZGF0aW5nIHRoYXQgdGhlCisJICogYWN0dWFsIGpvaW4gb3JkZXIgaGFzIHRoZSBn aXZlbiBsaXN0IGFzIGEgcHJlZml4LCBidXQgYSBzdWJsaXN0CisJICogcmVxdWlyZXMgYW4gZXhh Y3QgbWF0Y2guCisJICoKKwkgKiBFeG1hcGxlOiBHaXZlbiBKT0lOX09SREVSKHQxIHQyICh0MyB0 NCB0NSkpLCB3ZSBtdXN0IHN0YXJ0IGJ5IGpvaW5pbmcKKwkgKiBhbGwgZml2ZSBvZiB0aG9zZSBy ZWxhdGlvbnMgYW5kIGluIHRoYXQgc2VxdWVuY2UsIGJ1dCBvbmNlIHRoYXQgaXMKKwkgKiBkb25l LCBpdCdzIE9LIHRvIGpvaW4gYW55IG90aGVyIHJlbHMgdGhhdCBhcmUgcGFydCBvZiB0aGUgam9p biBwcm9ibGVtLgorCSAqIFRoaXMgYWxsb3dzIGEgdXNlciB0byBzcGVjaWZ5IHRoZSBkcml2aW5n IHRhYmxlIGFuZCBwZXJoYXBzIHRoZSBmaXJzdAorCSAqIGZldyB0aGluZ3MgdG8gd2hpY2ggaXQg c2hvdWxkIGJlIGpvaW5lZCB3aGlsZSBsZWF2aW5nIHRoZSByZXN0IG9mIHRoZQorCSAqIGpvaW4g b3JkZXIgdXAgdGhlIG9wdGltaXplci4gQnV0IGl0IHNlZW1zIGxpa2UgaXQgd291bGQgYmUgc3Vy cHJpc2luZywKKwkgKiBnaXZlbiB0aGF0IHNwZWNpZmljYXRpb24sIGlmIHRoZSB1c2VyIGNvdWxk IGFkZCB0NiB0byB0aGUgKHQzIHQ0IHQ1KQorCSAqIHN1Yi1qb2luLCBzbyB3ZSBkb24ndCBhbGxv dyB0aGF0LiBJZiB3ZSBkaWQgd2FudCB0byBhbGxvdyBpdCwgdGhlIGxvZ2ljCisJICogZWFybGll ciBpbiB0aGlzIGZ1bmN0aW9uIHdvdWxkIHJlcXVpcmUgc3Vic3RhbnRpYWwgYWRqdXN0bWVudDog d2UgY291bGQKKwkgKiBhbGxvdyB0aGUgdDMtdDQtdDUtdDYgam9pbiB0byBiZSBidWlsdCBoZXJl LCBidXQgdGhlIG5leHQgc3RlcCBvZgorCSAqIGpvaW5pbmcgdDEtdDIgdG8gdGhlIHJlc3VsdCB3 b3VsZCBzdGlsbCBiZSByZWplY3RlZC4KKwkgKi8KKwlpZiAoIXN1Ymxpc3QpCisJCWVudHJ5LT5m bGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJcmV0dXJuIHN1Ymxpc3QgPyBQR1BBX0pPX0RF TklFRCA6IFBHUEFfSk9fUEVSTUlUVEVEOworfQorCisvKgorICogRG9lcyBhIGNlcnRhaW4gaXRl bSBvZiBqb2luIG1ldGhvZCBhZHZpY2UgcGVybWl0IGEgY2VydGFpbiBqb2luPworICoKKyAqIEFk dmljZSBzdWNoIGFzIEhBU0hfSk9JTigoeCB5KSkgbWVhbnMgdGhhdCB0aGVyZSBzaG91bGQgYmUg YSBoYXNoIGpvaW4gd2l0aAorICogZXhhY3RseSB4IGFuZCB5IG9uIHRoZSBpbm5lciBzaWRlLiBP YnZpb3VzbHksIHRoaXMgbWVhbnMgdGhhdCBpZiB3ZSBhcmUKKyAqIGNvbnNpZGVyaW5nIGEgam9p biB3aXRoIGV4YWN0bHkgeCBhbmQgeSBvbiB0aGUgaW5uZXIgc2lkZSwgd2Ugc2hvdWxkIGVuZm9y Y2UKKyAqIHRoZSB1c2Ugb2YgYSBoYXNoIGpvaW4uIEhvd2V2ZXIsIGl0IGFsc28gbWVhbnMgdGhh dCB3ZSBtdXN0IHJlamVjdCBzb21lCisgKiBpbmNvbXBhdGlibGUgam9pbiBvcmRlcnMgZW50aXJl bHkuICBGb3IgZXhhbXBsZSwgYSBqb2luIHdpdGggZXhhY3RseSB4CisgKiBhbmQgeSBvbiB0aGUg b3V0ZXIgc2lkZSBzaG91bGRuJ3QgYmUgYWxsb3dlZCwgYmVjYXVzZSBzdWNoIHBhdGhzIG1pZ2h0 IHdpbgorICogb3ZlciB0aGUgYWR2aWNlLWRyaXZlbiBwYXRoIG9uIGNvc3QuCisgKgorICogVG8g YWNjb21tb2RhdGUgdGhlc2UgcmVxdWlyZW1lbnRzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1 ZSBpZiB0aGUgam9pbgorICogc2hvdWxkIGJlIGFsbG93ZWQgYW5kIGZhbHNlIGlmIGl0IHNob3Vs ZCBub3QuIEZ1cnRoZXJtb3JlLCAqcmVzdHJpY3RfbWV0aG9kCisgKiBpcyBzZXQgdG8gdHJ1ZSBp ZiB0aGUgam9pbiBtZXRob2Qgc2hvdWxkIGJlIGVuZm9yY2VkIGFuZCBmYWxzZSBpZiBub3QuCisg Ki8KK3N0YXRpYyBib29sCitwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJf Y291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywK KwkJCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCSAgYm9vbCAqcmVzdHJp Y3RfbWV0aG9kKQoreworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0ID0gZW50cnktPnRhcmdl dDsKKwlwZ3BhX2l0bV90eXBlIGlubmVyX2l0bTsKKwlwZ3BhX2l0bV90eXBlIG91dGVyX2l0bTsK KwlwZ3BhX2l0bV90eXBlIGpvaW5faXRtOworCisJLyogV2UgZGVmaW5pdGVseSBoYXZlIGF0IGxl YXN0IGEgcGFydGlhbCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRyeS4gKi8KKwllbnRyeS0+Zmxh Z3MgfD0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCisJKnJlc3RyaWN0X21ldGhvZCA9IGZhbHNl OworCisJLyoKKwkgKiBJZiBvdXIgaW5uZXIgcmVsIG1lbnRpb25zIGV4YWN0bHkgdGhlIHNhbWUg cmVsYXRpb25zIGFzIHRoZSBhZHZpY2UKKwkgKiB0YXJnZXQsIGFsbG93IHRoZSBqb2luIGFuZCBl bmZvcmNlIHRoZSBqb2luIG1ldGhvZCByZXN0cmljdGlvbi4KKwkgKgorCSAqIElmIG91ciBpbm5l ciByZWwgbWVudGlvbnMgYSBzdXBlcnNldCBvZiB0aGUgdGFyZ2V0IHJlbGF0aW9ucywgYWxsb3cg dGhlCisJICogam9pbi4gVGhlIGpvaW4gd2UgY2FyZSBhYm91dCBoYXMgYWxyZWFkeSB0YWtlbiBw bGFjZSwgYW5kIHRoaXMgYWR2aWNlCisJICogaW1wb3NlcyBubyBmdXJ0aGVyIHJlc3RyaWN0aW9u cy4KKwkgKi8KKwlpbm5lcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbm5l cl9jb3VudCwKKwkJCQkJCQkJCQkJICByaWRzICsgb3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCSAg dGFyZ2V0KTsKKwlpZiAoaW5uZXJfaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCXsKKwkJZW50cnkt PmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwkJKnJlc3RyaWN0X21ldGhvZCA9IHRydWU7 CisJCXJldHVybiB0cnVlOworCX0KKwllbHNlIGlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fVEFS R0VUU19BUkVfU1VCU0VUKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogSWYgb3VyIG91dGVy IHJlbCBtZW50aW9ucyBhIHN1cHNlcnNldCBvZiB0aGUgcmVsYXRpb25zIGluIHRoZSBhZHZpY2UK KwkgKiB0YXJnZXQsIG5vIHJlc3RyaWN0aW9ucyBhcHBseS4gVGhlIGpvaW4gd2UgY2FyZSBoYXMg YWxyZWFkeSB0YWtlbgorCSAqIHBsYWNlLCBhbmQgdGhpcyBhZHZpY2UgaW1wb3NlcyBubyBmdXJ0 aGVyIHJlc3RyaWN0aW9ucy4KKwkgKgorCSAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBvdXIgb3V0 ZXIgcmVsIG1lbnRpb25zIGV4YWN0bHkgdGhlIHJlbGF0aW9ucworCSAqIG1lbnRpb25lZCBpbiB0 aGUgYWR2aWNlIHRhcmdldCwgdGhlIHBsYW5uZXIgaXMgdHJ5aW5nIHRvIHJldmVyc2UgdGhlCisJ ICogc2lkZXMgb2YgdGhlIGpvaW4gYXMgY29tcGFyZWQgd2l0aCBvdXIgZGVzaXJlZCBvdXRjb21l LiBSZWplY3QgdGhhdC4KKwkgKi8KKwlvdXRlcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNo X3RhcmdldChvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJICByaWRzLCB0YXJnZXQpOworCWlmIChv dXRlcl9pdG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQlyZXR1cm4gdHJ1ZTsK KwllbHNlIGlmIChvdXRlcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCXJldHVybiBmYWxzZTsK KworCS8qCisJICogSWYgdGhlIGFkdmljZSB0YXJnZXQgbWVudGlvbnMgb25seSBhIHNpbmdsZSBy ZWxhdGlvbiwgdGhlIHRlc3QgYmVsb3cKKwkgKiBjYW5ub3QgZXZlciBwYXNzLCBzbyBzYXZlIHNv bWUgd29yayBieSBleGl0aW5nIG5vdy4KKwkgKi8KKwlpZiAodGFyZ2V0LT50dHlwZSA9PSBQR1BB X1RBUkdFVF9JREVOVElGSUVSKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElmIGV2ZXJ5 dGhpbmcgaW4gdGhlIGpvaW5yZWwgYXBwZWFycyBpbiB0aGUgYWR2aWNlIHRhcmdldCwgd2UncmUg YmVsb3cKKwkgKiB0aGUgbGV2ZWwgb2YgdGhlIGpvaW4gd2Ugd2FudCB0byBjb250cm9sLgorCSAq CisJICogRm9yIGV4YW1wbGUsIEhBU0hfSk9JTigoeCB5KSkgZG9lc24ndCByZXN0cmljdCBob3cg eCBhbmQgeSBjYW4gYmUKKwkgKiBqb2luZWQuCisJICoKKwkgKiBUaGlzIGxvb2t1cCBzaG91bGRu J3QgcmV0dXJuIFBHUEFfSVRNX0RJU0pPSU5ULCBiZWNhdXNlIGFueSBzdWNoIGFkdmljZQorCSAq IHNob3VsZCBub3QgaGF2ZSBiZWVuIHJldHVybmVkIGZyb20gdGhlIHRyb3ZlIGluIHRoZSBmaXJz dCBwbGFjZS4KKwkgKi8KKwlqb2luX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0 KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSByaWRzLCB0YXJnZXQpOwor CUFzc2VydChqb2luX2l0bSAhPSBQR1BBX0lUTV9ESVNKT0lOVCk7CisJaWYgKGpvaW5faXRtID09 IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCB8fAorCQlqb2luX2l0bSA9PSBQR1BBX0lUTV9FUVVB TCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIFdlJ3ZlIGFscmVhZHkgcGVybWl0dGVkIGFs bCBhbGxvd2FibGUgY2FzZXMsIHNvIHJlamVjdCB0aGlzLgorCSAqCisJICogSWYgd2UgcmVhY2gg dGhpcyBwb2ludCwgdGhlbiB0aGUgYWR2aWNlIG92ZXJsYXBzIHdpdGggdGhpcyBqb2luIGJ1dAor CSAqIGlzbid0IGVudGlyZWx5IGNvbnRhaW5lZCB3aXRoaW4gZWl0aGVyIHNpZGUsIGFuZCB0aGVy ZSdzIGFsc28gYXQgbGVhc3QKKwkgKiBvbmUgcmVsYXRpb24gcHJlc2VudCBpbiB0aGUgam9pbiB0 aGF0IGlzbid0IG1lbnRpb25lZCBieSB0aGUgYWR2aWNlLgorCSAqCisJICogRm9yIGluc3RhbmNl LCBpbiB0aGUgSEFTSF9KT0lOKCh4IHkpKSBleGFtcGxlLCB3ZSB3b3VsZCByZWFjaCBoZXJlIGlm IHgKKwkgKiB3ZXJlIG9uIG9uZSBzaWRlIG9mIHRoZSBqb2luLCB5IG9uIHRoZSBvdGhlciwgYW5k IGF0IGxlYXN0IG9uZSBvZiB0aGUKKwkgKiB0d28gc2lkZXMgYWxzbyBpbmNsdWRlZCBzb21lIG90 aGVyIHJlbGF0aW9uLCBzYXkgdC4gSW4gdGhhdCBjYXNlLAorCSAqIGFjY2VwdGluZyB0aGlzIGpv aW4gd291bGQgYWxsb3cgdGhlICh4IHkgdCkgam9pbnJlbCB0byBjb250YWluCisJICogbm9uLWRp c2FibGVkIHBhdGhzIHRoYXQgZG8gbm90IHB1dCAoeCB5KSBvbiB0aGUgaW5uZXIgc2lkZSBvZiBh IGhhc2gKKwkgKiBqb2luOyB3ZSBjb3VsZCBpbnN0ZWFkIGVuZCB1cCB3aXRoIHNvbWV0aGluZyBs aWtlICh4IEpPSU4gdCkgSk9JTiB5LgorCSAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAq IERvZXMgYWR2aWNlIGNvbmNlcm5pbmcgYW4gb3BhcXVlIGpvaW4gcGVybWl0IGEgY2VydGFpbiBq b2luPworICoKKyAqIEJ5IGFuIG9wYXF1ZSBqb2luLCB3ZSBtZWFuIG9uZSB3aGVyZSB0aGUgZXhh Y3QgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoZQorICogam9pbiBpcyBwZXJmb3JtZWQgaXMgbm90IHZp c2libGUgdG8gUG9zdGdyZVNRTC4gQ3VycmVudGx5IHRoaXMgaXMgdGhlCisgKiBjYXNlIG9ubHkg Zm9yIGZvcmVpZ24gam9pbnM6IEZPUkVJR05fSk9JTigoeCB5IHopKSBtZWFucyB0aGF0IHgsIHks IGFuZAorICogeiBhcmUgam9pbmVkIG9uIHRoZSByZW1vdGUgc2lkZSwgYnV0IHdlIGtub3cgbm90 aGluZyBhYm91dCB0aGUgam9pbiBvcmRlcgorICogb3Igam9pbiBtZXRob2RzIHVzZWQgb3ZlciB0 aGVyZS4KKyAqCisgKiBUaGUgbG9naWMgaGVyZSBuZWVkcyB0byBkaWZmZXIgZnJvbSBwZ3BhX2pv aW5fbWV0aG9kX3Blcm1pdHNfam9pbiBiZWNhdXNlLAorICogZm9yIG90aGVyIGpvaW4gdHlwZXMs IHRoZSBhZHZpY2UgdGFyZ2V0IGlzIHRoZSBzZXQgb2YgaW5uZXIgcmVsczsgaGVyZSwgaXQKKyAq IGluY2x1ZGVzIGJvdGggaW5uZXIgYW5kIG91dGVyIHJlbHMuCisgKi8KK3N0YXRpYyBib29sCitw Z3BhX29wYXF1ZV9qb2luX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9j b3VudCwKKwkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfdHJv dmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCSAgYm9vbCAqcmVzdHJpY3RfbWV0aG9kKQoreworCXBn cGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0ID0gZW50cnktPnRhcmdldDsKKwlwZ3BhX2l0bV90eXBl IGpvaW5faXRtOworCisJLyogV2UgZGVmaW5pdGVseSBoYXZlIGF0IGxlYXN0IGEgcGFydGlhbCBt YXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRyeS4gKi8KKwllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9N QVRDSF9QQVJUSUFMOworCisJKnJlc3RyaWN0X21ldGhvZCA9IGZhbHNlOworCisJam9pbl9pdG0g PSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCArIGlubmVyX2NvdW50 LAorCQkJCQkJCQkJCQkgcmlkcywgdGFyZ2V0KTsKKwlpZiAoam9pbl9pdG0gPT0gUEdQQV9JVE1f RVFVQUwpCisJeworCQkvKgorCQkgKiBXZSBoYXZlIGFuIGV4YWN0IG1hdGNoLCBhbmQgc2hvdWxk IHRoZXJlZm9yZSBhbGxvdyB0aGUgam9pbiBhbmQKKwkJICogZW5mb3JjZSB0aGUgdXNlIG9mIHRo ZSByZWxldmFudCBvcGFxdWUgam9pbiBtZXRob2QuCisJCSAqLworCQllbnRyeS0+ZmxhZ3MgfD0g UEdQQV9URV9NQVRDSF9GVUxMOworCQkqcmVzdHJpY3RfbWV0aG9kID0gdHJ1ZTsKKwkJcmV0dXJu IHRydWU7CisJfQorCisJaWYgKGpvaW5faXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCB8 fAorCQlqb2luX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJeworCQkvKgor CQkgKiBJZiBqb2luX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQsIHRoZW4gdGhl IGpvaW4gd2UgY2FyZQorCQkgKiBhYm91dCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBhbmQgbm8g ZnVydGhlciByZXN0cmljdGlvbnMgYXBwbHkuCisJCSAqCisJCSAqIElmIGpvaW5faXRtID09IFBH UEFfSVRNX0tFWVNfQVJFX1NVQlNFVCwgd2UncmUgc3RpbGwgYnVpbGRpbmcgdXAgdG8KKwkJICog dGhlIGpvaW4gd2UgY2FyZSBhYm91dCBhbmQgaGF2ZSBub3QgaW50cm9kdWNlZCBhbnkgZXh0cmFu ZW91cworCQkgKiByZWxhdGlvbnMgbm90IG5hbWVkIGluIHRoZSBhZHZpY2UuIE5vdGUgdGhhdCBG b3JlaWduU2NhbiBwYXRocyBmb3IKKwkJICogam9pbnMgYXJlIGJ1aWx0IHVwIGZyb20gRm9yZWln blNjYW4gcGF0aHMgZnJvbSB1bmRlcmx5aW5nIGpvaW5zIGFuZAorCQkgKiBzY2Fucywgc28gd2Ug bXVzdCBub3QgZGlzYWJsZSB0aGlzIGpvaW4gd2hlbiBjb25zaWRlcmluZyBhIHN1YnNldAorCQkg KiBvZiB0aGUgcmVsYXRpb25zIHdlIHVsdGltYXRlbHkgd2FudC4KKwkJICovCisJCXJldHVybiB0 cnVlOworCX0KKworCS8qCisJICogVGhlIGFkdmljZSBvdmVybGFwcyB0aGUgam9pbiwgYnV0IGF0 IGxlYXN0IG9uZSByZWxhdGlvbiBpcyBwcmVzZW50IGluCisJICogdGhlIGpvaW4gdGhhdCBpc24n dCBtZW50aW9uZWQgYnkgdGhlIGFkdmljZS4gV2Ugd2FudCB0byBkaXNhYmxlIHN1Y2gKKwkgKiBw YXRocyBzbyB0aGF0IHdlIGFjdHVhbGx5IHB1c2ggZG93biB0aGUgam9pbiBhcyBpbnRlbmRlZC4K KwkgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBEb2VzIGFkdmljZSBjb25jZXJuaW5n IGEgc2VtaWpvaW4gcGVybWl0IGEgY2VydGFpbiBqb2luPworICoKKyAqIFVubGlrZSBqb2luIG1l dGhvZCBhZHZpY2UsIHdoaWNoIGxpc3RzIHRoZSByZWxzIG9uIHRoZSBpbm5lciBzaWRlIG9mIHRo ZQorICogam9pbiwgc2VtaWpvaW4gdW5pcXVlbmVzcyBhZHZpY2UgbGlzdHMgdGhlIHJlbHMgb24g dGhlIG51bGxhYmxlIHNpZGUgb2YgdGhlCisgKiBqb2luLiBUaG9zZSBjYW4gYmUgdGhlIHNhbWUs IGlmIHRoZSBqb2luIHR5cGUgaXMgSk9JTl9VTklRVUVfSU5ORVIgb3IKKyAqIEpPSU5fU0VNSSwg b3IgdGhleSBjYW4gYmUgZGlmZmVyZW50LCBpbiBjYXNlIG9mIEpPSU5fVU5JUVVFX09VVEVSIG9y CisgKiBKT0lOX1JJR0hUX1NFTUkuCisgKgorICogV2UgZG9uJ3Qga25vdyBoZXJlIHdoZXRoZXIg dGhlIGNhbGxlciBzcGVjaWZpZWQgU0VNSUpPSU5fVU5JUVVFIG9yCisgKiBTRU1JSk9JTl9OT05f VU5JUVVFLiBUaGUgY2FsbGVyIHNob3VsZCBjaGVjayB0aGUgam9pbiB0eXBlIGFnYWluc3QgdGhl CisgKiBhZHZpY2UgdHlwZSBpZiBhbmQgb25seSBpZiB3ZSBzZXQgKnJlc3RyaWN0X21ldGhvZCB0 byB0cnVlLgorICovCitzdGF0aWMgYm9vbAorcGdwYV9zZW1pam9pbl9wZXJtaXRzX2pvaW4oaW50 IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIg KnJpZHMsCisJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSwKKwkJCQkJCSAgIGJvb2wg b3V0ZXJfaXNfbnVsbGFibGUsCisJCQkJCQkgICBib29sICpyZXN0cmljdF9tZXRob2QpCit7CisJ cGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQgPSBlbnRyeS0+dGFyZ2V0OworCXBncGFfaXRtX3R5 cGUgam9pbl9pdG07CisJcGdwYV9pdG1fdHlwZSBpbm5lcl9pdG07CisJcGdwYV9pdG1fdHlwZSBv dXRlcl9pdG07CisKKwkqcmVzdHJpY3RfbWV0aG9kID0gZmFsc2U7CisKKwkvKiBXZSBkZWZpbml0 ZWx5IGhhdmUgYXQgbGVhc3QgYSBwYXJ0aWFsIG1hdGNoIGZvciB0aGlzIHRyb3ZlIGVudHJ5LiAq LworCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisKKwkvKgorCSAqIElm IG91dGVyIHJlbCBpcyB0aGUgbnVsbGFibGUgc2lkZSBhbmQgY29udGFpbnMgZXhhY3RseSB0aGUg c2FtZQorCSAqIHJlbGF0aW9ucyBhcyB0aGUgYWR2aWNlIHRhcmdldCwgdGhlbiB0aGUgam9pbiBv cmRlciBpcyBhbGxvd2FibGUsIGJ1dAorCSAqIHRoZSBjYWxsZXIgbXVzdCBjaGVjayB3aGV0aGVy IHRoZSBhZHZpY2UgdGFnIChlaXRoZXIgU0VNSUpPSU5fVU5JUVVFIG9yCisJICogU0VNSUpPSU5f Tk9OX1VOSVFVRSkgbWF0Y2hlcyB0aGUgam9pbiB0eXBlLgorCSAqCisJICogSWYgdGhlIG91dGVy IHJlbCBpcyBhIHN1cGVyc2V0IG9mIHRoZSB0YXJnZXQgcmVsYXRpb25zLCB0aGUgam9pbiB3ZQor CSAqIGNhcmUgYWJvdXQgaGFzIGFscmVhZHkgdGFrZW4gcGxhY2UsIHNvIHdlIHNob3VsZCBpbXBv c2Ugbm8gZnV0aGVyCisJICogcmVzdHJpdGlvbnMuCisJICovCisJb3V0ZXJfaXRtID0gcGdwYV9p ZGVudGlmaWVyc19tYXRjaF90YXJnZXQob3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCSAgcmlkcywg dGFyZ2V0KTsKKwlpZiAob3V0ZXJfaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCXsKKwkJZW50cnkt PmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwkJaWYgKG91dGVyX2lzX251bGxhYmxlKQor CQl7CisJCQkqcmVzdHJpY3RfbWV0aG9kID0gdHJ1ZTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJ fQorCWVsc2UgaWYgKG91dGVyX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJ CXJldHVybiB0cnVlOworCisJLyogQXMgYWJvdmUsIGJ1dCBmb3IgdGhlIGlubmVyIHJlbC4gKi8K Kwlpbm5lcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbm5lcl9jb3VudCwK KwkJCQkJCQkJCQkJICByaWRzICsgb3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCSAgdGFyZ2V0KTsK KwlpZiAoaW5uZXJfaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCXsKKwkJZW50cnktPmZsYWdzIHw9 IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwkJaWYgKCFvdXRlcl9pc19udWxsYWJsZSkKKwkJeworCQkJ KnJlc3RyaWN0X21ldGhvZCA9IHRydWU7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKwllbHNl IGlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQlyZXR1cm4g dHJ1ZTsKKworCS8qCisJICogSWYgZXZlcnl0aGluZyBpbiB0aGUgam9pbnJlbCBhcHBlYXJzIGlu IHRoZSBhZHZpY2UgdGFyZ2V0LCB3ZSdyZSBiZWxvdworCSAqIHRoZSBsZXZlbCBvZiB0aGUgam9p biB3ZSB3YW50IHRvIGNvbnRyb2wuCisJICovCisJam9pbl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJz X21hdGNoX3RhcmdldChvdXRlcl9jb3VudCArIGlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkgcmlk cywgdGFyZ2V0KTsKKwlBc3NlcnQoam9pbl9pdG0gIT0gUEdQQV9JVE1fRElTSk9JTlQpOworCWlm IChqb2luX2l0bSA9PSBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQgfHwKKwkJam9pbl9pdG0gPT0g UEdQQV9JVE1fRVFVQUwpCisJCXJldHVybiB0cnVlOworCisJLyoKKwkgKiBXZSd2ZSB0ZXN0ZWQg Zm9yIGFsbCBhbGxvd2FibGUgcG9zc2liaWxpdGllcywgYW5kIHNvIG11c3QgcmVqZWN0IHRoaXMK KwkgKiBqb2luIG9yZGVyLiBUaGlzIGNhbiBoYXBwZW4gaW4gdHdvIHdheXMuCisJICoKKwkgKiBG aXJzdCwgd2UgbWlnaCBiZSBjb25zaWRlcmluZyBhIHNlbWlqb2luIHRoYXQgb3ZlcmxhcHMgaW5j b21wbGV0ZWx5CisJICogd2l0aCBvbmUgb3IgYm90aCBzaWRlcyBvZiB0aGUgam9pbi4gRm9yIGV4 YW1wbGUsIGlmIHRoZSB1c2VyIGhhcworCSAqIHNwZWNpZmllZCBTRU1JSk9JTl9VTklRVUUoKHQx IHQyKSkgb3IgU0VNSUpPSU5fTk9OX1VOSVFVRSgodDEgdDIpKSwgd2UKKwkgKiBzaG91bGQgcmVq ZWN0IGEgcHJvcG9zZWQgdDItdDMgam9pbiwgc2luY2UgdGhhdCBjb3VsZCBub3QgcmVzdWx0IGlu IGEKKwkgKiBmaW5hbCBwbGFuIGNvbXBhdGlibGUgd2l0aCB0aGUgYWR2aWNlLgorCSAqCisJICog U2Vjb25kLCB3ZSBtaWdodCBiZSBjb25zaWRlcmluZyBhIHNlbWlqb2luIHdoZXJlIHRoZSBhZHZp Y2UgdGFyZ2V0CisJICogcGVyZmVjdGx5IG1hdGNoZXMgb25lIHNpZGUgb2YgdGhlIGpvaW4sIGJ1 dCBpdCdzIHRoZSB3cm9uZyBvbmUuIEZvcgorCSAqIGV4YW1wbGUsIGluIHRoZSBleGFtcGxlIGFi b3ZlLCB3ZSBtaWdodCBzZWUgYSAzLXdheSBqb2luIGJldHdlZW4gdDEsCisJICogdDIsIGFuZCB0 Mywgd2l0aCAodDEgdDIpIG9uIHRoZSBub24tbnVsbGFibGUgc2lkZS4gVGhhdCwgdG9vLCB3b3Vs ZCBiZQorCSAqIGluY29tcGF0aWJsZSB3aXRoIHRoZSBhZHZpY2UuCisJICovCisJcmV0dXJuIGZh bHNlOworfQorCisvKgorICogQXBwbHkgc2NhbiBhZHZpY2UgdG8gYSBSZWxPcHRJbmZvLgorICov CitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKFJlbE9wdEluZm8g KnJlbCwKKwkJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJpZXMsCisJCQkJCQkJ ICAgQml0bWFwc2V0ICpzY2FuX2luZGV4ZXMsCisJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAq cmVsX2VudHJpZXMsCisJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxfaW5kZXhlcykKK3sKKwlib29s CQlnYXRoZXJfY29uZmxpY3QgPSBmYWxzZTsKKwlCaXRtYXBzZXQgICpnYXRoZXJfcGFydGlhbF9t YXRjaCA9IE5VTEw7CisJQml0bWFwc2V0ICAqZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBOVUxMOworCWlu dAkJCWkgPSAtMTsKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJ5ID0gTlVMTDsKKwlpbnQJ CQlmbGFnczsKKwlib29sCQlzY2FuX3R5cGVfY29uZmxpY3QgPSBmYWxzZTsKKwlCaXRtYXBzZXQg ICpzY2FuX3R5cGVfaW5kZXhlcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqc2Nhbl90eXBlX3JlbF9p bmRleGVzID0gTlVMTDsKKwl1aW50NjQJCWdhdGhlcl9tYXNrID0gMDsKKwl1aW50NjQJCXNjYW5f dHlwZSA9IDA7CisKKwkvKiBTY3J1dGluaXplIGF2YWlsYWJsZSBzY2FuIGFkdmljZS4gKi8KKwl3 aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIoc2Nhbl9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJ CXBncGFfdHJvdmVfZW50cnkgKm15X2VudHJ5ID0gJnNjYW5fZW50cmllc1tpXTsKKwkJdWludDY0 CQlteV9zY2FuX3R5cGUgPSAwOworCisJCS8qIFRyYW5zbGF0ZSBvdXIgYWR2aWNlIHRhZ3MgdG8g YSBzY2FuIHN0cmF0ZWd5IGFkdmljZSB2YWx1ZS4gKi8KKwkJaWYgKG15X2VudHJ5LT50YWcgPT0g UEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTikKKwkJeworCQkJLyoKKwkJCSAqIEN1cnJlbnRseSwg UEdTX0NPTlNJREVSX0lOREVYT05MWSBjYW4gc3VwcHJlc3MgQml0bWFwIEhlYXAKKwkJCSAqIFNj YW5zLCBzbyBkb24ndCBjbGVhciBpdCB3aGVuIHN1Y2ggYSBzY2FuIGlzIHJlcXVlc3RlZC4gVGhp cworCQkJICogaGFwcGVucyBiZWNhdXNlIGJ1aWxkX2luZGV4X3NjYW4oKSB0aGlua3MgdGhhdCB0 aGUgcG9zc2liaWxpdHkKKwkJCSAqIG9mIGFuIGluZGV4LW9ubHkgc2NhbiBpcyBhIHN1ZmZpY2ll bnQgcmVhc29uIHRvIGNvbnNpZGVyIHVzaW5nCisJCQkgKiBhbiBvdGhlcndpc2UtdXNlbGVzcyBp bmRleCwgYW5kIGdldF9pbmRleF9wYXRocygpIHRoaW5rcyB0aGF0CisJCQkgKiB0aGUgc2FtZSBw YXRocyB0aGF0IGFyZSB1c2VmdWwgZm9yIGluZGV4IG9yIGluZGV4LW9ubHkgc2NhbnMKKwkJCSAq IHNob3VsZCBhbHNvIGJlIGNvbnNpZGVyZWQgZm9yIGJpdG1hcCBzY2Fucy4gUGVyaGFwcyB0aGF0 IGxvZ2ljCisJCQkgKiBzaG91bGQgYmUgdGlnaHRlbmVkIHVwLCBidXQgdW50aWwgdGhlbiB3ZSBu ZWVkIHRvIGluY2x1ZGUKKwkJCSAqIFBHU19DT05TSURFUl9JTkRFWE9OTFkgaW4gbXlfc2Nhbl90 eXBlIGhlcmUuCisJCQkgKi8KKwkJCW15X3NjYW5fdHlwZSA9IFBHU19CSVRNQVBTQ0FOIHwgUEdT X0NPTlNJREVSX0lOREVYT05MWTsKKwkJfQorCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBH UEFfVEFHX0lOREVYX09OTFlfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19JTkRFWE9OTFlT Q0FOIHwgUEdTX0NPTlNJREVSX0lOREVYT05MWTsKKwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9 PSBQR1BBX1RBR19JTkRFWF9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0gUEdTX0lOREVYU0NBTjsK KwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19TRVFfU0NBTikKKwkJCW15X3Nj YW5fdHlwZSA9IFBHU19TRVFTQ0FOOworCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFf VEFHX1RJRF9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0gUEdTX1RJRFNDQU47CisKKwkJLyoKKwkJ ICogSWYgdGhpcyBpcyB1bmRlcnN0YW5kYWJsZSBzY2FuIGFkdmljZSwgaGFuZyBvbiB0byB0aGUg ZW50cnksIHRoZQorCQkgKiBpbmZlcnJlZCBzY2FuIHR5cGUgdHlwZSwgYW5kIHRoZSBpbmRleCBh dCB3aGljaCB3ZSBmb3VuZCBpdC4KKwkJICoKKwkJICogQWxzbyBtYWtlIGEgbm90ZSBpZiB3ZSBz ZWUgY29uZmxpY3Rpbmcgc2NhbiB0eXBlIGFkdmljZS4gTm90ZSB0aGF0CisJCSAqIHdlIHJlZ2Fy ZCB0d28gaW5kZXggc3BlY2lmaWNhdGlvbnMgYXMgY29uZmxpY3RpbmcgdW5sZXNzIHRoZXkgbWF0 Y2gKKwkJICogZXhhY3RseS4gSW4gdGhlb3J5LCBwZXJoYXBzIHdlIGNvdWxkIHJlZ2FyZCBJTkRF WF9TQ0FOKGEgYykgYW5kCisJCSAqIElOREVYX1NDQU4oYSBiLmMpIGFzIG5vbi1jb25mbGljdGlu ZyBpZiBpdCBoYXBwZW5zIHRoYXQgdGhlIG9ubHkKKwkJICogaW5kZXggbmFtZWQgYyBpcyBpbiBz Y2hlbWEgYiwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCB0aGUgY29kZS4KKwkJICovCisJCWlm IChteV9zY2FuX3R5cGUgIT0gMCkKKwkJeworCQkJaWYgKHNjYW5fdHlwZSAhPSAwICYmIHNjYW5f dHlwZSAhPSBteV9zY2FuX3R5cGUpCisJCQkJc2Nhbl90eXBlX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJ CWlmICghc2Nhbl90eXBlX2NvbmZsaWN0ICYmIHNjYW5fZW50cnkgIT0gTlVMTCAmJgorCQkJCW15 X2VudHJ5LT50YXJnZXQtPml0YXJnZXQgIT0gTlVMTCAmJgorCQkJCXNjYW5fZW50cnktPnRhcmdl dC0+aXRhcmdldCAhPSBOVUxMICYmCisJCQkJIXBncGFfaW5kZXhfdGFyZ2V0c19lcXVhbChzY2Fu X2VudHJ5LT50YXJnZXQtPml0YXJnZXQsCisJCQkJCQkJCQkJICBteV9lbnRyeS0+dGFyZ2V0LT5p dGFyZ2V0KSkKKwkJCQlzY2FuX3R5cGVfY29uZmxpY3QgPSB0cnVlOworCQkJc2Nhbl9lbnRyeSA9 IG15X2VudHJ5OworCQkJc2Nhbl90eXBlID0gbXlfc2Nhbl90eXBlOworCQkJc2Nhbl90eXBlX2lu ZGV4ZXMgPSBibXNfYWRkX21lbWJlcihzY2FuX3R5cGVfaW5kZXhlcywgaSk7CisJCX0KKwl9CisK KwkvKiBTY3J1dGluaXplIGF2YWlsYWJsZSBnYXRoZXItcmVsYXRlZCBhbmQgcGFydGl0aW9ud2lz ZSBhZHZpY2UuICovCisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihyZWxf aW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICpteV9lbnRyeSA9ICZy ZWxfZW50cmllc1tpXTsKKwkJdWludDY0CQlteV9nYXRoZXJfbWFzayA9IDA7CisJCWJvb2wJCWp1 c3Rfb25lX3JlbDsKKworCQlqdXN0X29uZV9yZWwgPSBteV9lbnRyeS0+dGFyZ2V0LT50dHlwZSA9 PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSCisJCQl8fCBsaXN0X2xlbmd0aChteV9lbnRyeS0+dGFy Z2V0LT5jaGlsZHJlbikgPT0gMTsKKworCQkvKgorCQkgKiBQQVJUSVRJT05XSVNFIGJlaGF2ZXMg bGlrZSBhIHNjYW4gdHlwZSwgZXhjZXB0IHRoYXQgaWYgdGhlcmUncyBtb3JlCisJCSAqIHRoYW4g b25lIHJlbGF0aW9uIHRhcmdldGVkLCBpdCBoYXMgbm8gZWZmZWN0IGF0IHRoaXMgbGV2ZWwuCisJ CSAqLworCQlpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19QQVJUSVRJT05XSVNFKQorCQl7 CisJCQlpZiAoanVzdF9vbmVfcmVsKQorCQkJeworCQkJCWNvbnN0IHVpbnQ2NCBteV9zY2FuX3R5 cGUgPSBQR1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQUEVORDsKKworCQkJCWlmIChzY2FuX3R5cGUg IT0gMCAmJiBzY2FuX3R5cGUgIT0gbXlfc2Nhbl90eXBlKQorCQkJCQlzY2FuX3R5cGVfY29uZmxp Y3QgPSB0cnVlOworCQkJCXNjYW5fZW50cnkgPSBteV9lbnRyeTsKKwkJCQlzY2FuX3R5cGUgPSBt eV9zY2FuX3R5cGU7CisJCQkJc2Nhbl90eXBlX3JlbF9pbmRleGVzID0KKwkJCQkJYm1zX2FkZF9t ZW1iZXIoc2Nhbl90eXBlX3JlbF9pbmRleGVzLCBpKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9 CisKKwkJLyoKKwkJICogR0FUSEVSIGFuZCBHQVRIRVJfTUVSR0UgYXBwbGllZCB0byBhIHNpbmds ZSByZWwgbWVhbiB0aGF0IHdlIHNob3VsZAorCQkgKiB1c2UgdGhlIGNvcnJlc3BvbmRpbmdzIHN0 cmF0ZWd5IGhlcmUsIHdoaWxlIGFwcGx5aW5nIGVpdGhlciB0byBtb3JlCisJCSAqIHRoYW4gb25l IHJlbCBtZWFucyB3ZSBzaG91bGQgbm90IHVzZSB0aG9zZSBzdHJhdGVnaWVzIGhlcmUsIGJ1dAor CQkgKiByYXRoZXIgYXQgdGhlIGxldmVsIG9mIHRoZSBqb2lucmVsIHRoYXQgY29ycmVzcG9uZHMg dG8gd2hhdCB3YXMKKwkJICogc3BlY2lmaWVkLiBOT19HQVRIRVIgY2FuIG9ubHkgYmUgYXBwbGll ZCB0byBzaW5nbGUgcmVscy4KKwkJICoKKwkJICogTm90ZSB0aGF0IHNldHRpbmcgUEdTX0NPTlNJ REVSX05PTlBBUlRJQUwgaW4gbXlfZ2F0aGVyX21hc2sgaXMKKwkJICogZXF1aXZhbGVudCB0byBh bGxvd2luZyB0aGUgbm9uLXVzZSBvZiBlaXRoZXIgZm9ybSBvZiBHYXRoZXIgaGVyZS4KKwkJICov CisJCWlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUiB8fAorCQkJbXlfZW50cnkt PnRhZyA9PSBQR1BBX1RBR19HQVRIRVJfTUVSR0UpCisJCXsKKwkJCWlmICghanVzdF9vbmVfcmVs KQorCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCQllbHNl IGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUikKKwkJCQlteV9nYXRoZXJfbWFz ayA9IFBHU19HQVRIRVI7CisJCQllbHNlCisJCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfR0FUSEVS X01FUkdFOworCQl9CisJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfTk9fR0FU SEVSKQorCQl7CisJCQlBc3NlcnQoanVzdF9vbmVfcmVsKTsKKwkJCW15X2dhdGhlcl9tYXNrID0g UEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCX0KKworCQkvKgorCQkgKiBJZiB3ZSBzZXQgbXlf Z2F0aGVyX21hc2sgdXAgYWJvdmUsIHRoZW4gd2UgKDEpIG1ha2UgYSBub3RlIGlmIHRoZQorCQkg KiBhZHZpY2UgY29uZmxpY3RlZCwgKDIpIHJlbWVtYmVyIHRoZSBtYXNrIHZhbHVlLCBhbmQgKDMp IHJlbWVtYmVyCisJCSAqIHdoZXRoZXIgdGhpcyB3YXMgYSBmdWxsIG9yIHBhcnRpYWwgbWF0Y2gu CisJCSAqLworCQlpZiAobXlfZ2F0aGVyX21hc2sgIT0gMCkKKwkJeworCQkJaWYgKGdhdGhlcl9t YXNrICE9IDAgJiYgZ2F0aGVyX21hc2sgIT0gbXlfZ2F0aGVyX21hc2spCisJCQkJZ2F0aGVyX2Nv bmZsaWN0ID0gdHJ1ZTsKKwkJCWdhdGhlcl9tYXNrID0gbXlfZ2F0aGVyX21hc2s7CisJCQlpZiAo anVzdF9vbmVfcmVsKQorCQkJCWdhdGhlcl9mdWxsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0 aGVyX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxzZQorCQkJCWdhdGhlcl9wYXJ0aWFsX21hdGNoID0g Ym1zX2FkZF9tZW1iZXIoZ2F0aGVyX3BhcnRpYWxfbWF0Y2gsIGkpOworCQl9CisJfQorCisJLyog RW5mb3JjZSBjaG9pY2Ugb2YgaW5kZXguICovCisJaWYgKHNjYW5fZW50cnkgIT0gTlVMTCAmJiAh c2Nhbl90eXBlX2NvbmZsaWN0ICYmCisJCShzY2FuX2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfSU5E RVhfU0NBTiB8fAorCQkgc2Nhbl9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0lOREVYX09OTFlfU0NB TikpCisJeworCQlwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldCA9IHNjYW5fZW50cnktPnRhcmdl dC0+aXRhcmdldDsKKwkJSW5kZXhPcHRJbmZvICptYXRjaGVkX2luZGV4ID0gTlVMTDsKKworCQlm b3JlYWNoX25vZGUoSW5kZXhPcHRJbmZvLCBpbmRleCwgcmVsLT5pbmRleGxpc3QpCisJCXsKKwkJ CWNoYXIJICAgKnJlbG5hbWUgPSBnZXRfcmVsX25hbWUoaW5kZXgtPmluZGV4b2lkKTsKKwkJCU9p ZAkJCW5zcG9pZCA9IGdldF9yZWxfbmFtZXNwYWNlKGluZGV4LT5pbmRleG9pZCk7CisJCQljaGFy CSAgICpyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChuc3BvaWQpOwor CisJCQlpZiAoc3RyY21wKGl0YXJnZXQtPmluZG5hbWUsIHJlbG5hbWUpID09IDAgJiYKKwkJCQko aXRhcmdldC0+aW5kbmFtZXNwYWNlID09IE5VTEwgfHwKKwkJCQkgc3RyY21wKGl0YXJnZXQtPmlu ZG5hbWVzcGFjZSwgcmVsbmFtZXNwYWNlKSA9PSAwKSkKKwkJCXsKKwkJCQltYXRjaGVkX2luZGV4 ID0gaW5kZXg7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAobWF0Y2hlZF9pbmRleCA9 PSBOVUxMKQorCQl7CisJCQkvKiBEb24ndCBmb3JjZSB0aGUgc2NhbiB0eXBlIGlmIHRoZSBpbmRl eCBkb2Vzbid0IGV4aXN0LiAqLworCQkJc2Nhbl90eXBlID0gMDsKKworCQkJLyogTWFyayBhZHZp Y2UgYXMgaW5hcHBsaWNhYmxlLiAqLworCQkJcGdwYV90cm92ZV9zZXRfZmxhZ3Moc2Nhbl9lbnRy aWVzLCBzY2FuX3R5cGVfaW5kZXhlcywKKwkJCQkJCQkJIFBHUEFfVEVfSU5BUFBMSUNBQkxFKTsK KwkJfQorCQllbHNlCisJCXsKKwkJCS8qIERpc2FibGUgZXZlcnkgb3RoZXIgaW5kZXguICovCisJ CQlmb3JlYWNoX25vZGUoSW5kZXhPcHRJbmZvLCBpbmRleCwgcmVsLT5pbmRleGxpc3QpCisJCQl7 CisJCQkJaWYgKGluZGV4ICE9IG1hdGNoZWRfaW5kZXgpCisJCQkJCWluZGV4LT5kaXNhYmxlZCA9 IHRydWU7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIE1hcmsgYWxsIHRoZSBzY2FuIG1ldGhv ZCBlbnRyaWVzIGFzIGZ1bGx5IG1hdGNoZWQ7IGFuZCBpZiB0aGV5IHNwZWNpZnkKKwkgKiBkaWZm ZXJlbnQgdGhpbmdzLCBtYXJrIHRoZW0gYWxsIGFzIGNvbmZsaWN0aW5nLgorCSAqLworCWZsYWdz ID0gUEdQQV9URV9NQVRDSF9QQVJUSUFMIHwgUEdQQV9URV9NQVRDSF9GVUxMOworCWlmIChzY2Fu X3R5cGVfY29uZmxpY3QpCisJCWZsYWdzIHw9IFBHUEFfVEVfQ09ORkxJQ1RJTkc7CisJcGdwYV90 cm92ZV9zZXRfZmxhZ3Moc2Nhbl9lbnRyaWVzLCBzY2FuX3R5cGVfaW5kZXhlcywgZmxhZ3MpOwor CXBncGFfdHJvdmVfc2V0X2ZsYWdzKHJlbF9lbnRyaWVzLCBzY2FuX3R5cGVfcmVsX2luZGV4ZXMs IGZsYWdzKTsKKworCS8qCisJICogTWFyayBldmVyeSBHYXRoZXItcmVsYXRlZCBwaWVjZSBvZiBh ZHZpY2UgYXMgcGFydGlhbGx5IG1hdGNoZWQuIE1hcmsKKwkgKiB0aGUgb25lcyB0aGF0IGluY2x1 ZGVkIHRoaXMgcmVsYXRpb24gYXMgYSB0YXJnZXQgYnkgaXRzZWxmIGFzIGZ1bGx5CisJICogbWF0 Y2hlZC4gSWYgdGhlcmUgd2FzIGEgY29uZmxpY3QsIG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3Rp bmcuCisJICovCisJZmxhZ3MgPSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisJaWYgKGdhdGhlcl9j b25mbGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ryb3ZlX3Nl dF9mbGFncyhyZWxfZW50cmllcywgZ2F0aGVyX3BhcnRpYWxfbWF0Y2gsIGZsYWdzKTsKKwlmbGFn cyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocmVsX2VudHJp ZXMsIGdhdGhlcl9mdWxsX21hdGNoLCBmbGFncyk7CisKKwkvKgorCSAqIEVuZm9yY2UgcmVzdHJp Y3Rpb25zIG9uIHRoZSBzY2FuIHR5cGUgYW5kIHVzZSBvZiBHYXRoZXIvR2F0aGVyIE1lcmdlLgor CSAqIE9ubHkgY2xlYXIgYml0cyBoZXJlLCBzbyB0aGF0IHdlIHN0aWxsIHJlc3BlY3QgdGhlIGVu YWJsZV8qIEdVQ3MuIERvCisJICogbm90aGluZyBpbiBjYXNlcyB3aGVyZSB0aGUgYWR2aWNlIG9u IGEgc2luZ2xlIHRvcGljIGNvbmZsaWN0cy4KKwkgKi8KKwlpZiAoc2Nhbl90eXBlICE9IDAgJiYg IXNjYW5fdHlwZV9jb25mbGljdCkKKwl7CisJCXVpbnQ2NAkJYWxsX3NjYW5fbWFzazsKKworCQlh bGxfc2Nhbl9tYXNrID0gUEdTX1NDQU5fQU5ZIHwgUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBF TkQgfAorCQkJUEdTX0NPTlNJREVSX0lOREVYT05MWTsKKwkJcmVsLT5wZ3NfbWFzayAmPSB+KGFs bF9zY2FuX21hc2sgJiB+c2Nhbl90eXBlKTsKKwl9CisJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYg IWdhdGhlcl9jb25mbGljdCkKKwl7CisJCXVpbnQ2NAkJYWxsX2dhdGhlcl9tYXNrOworCisJCWFs bF9nYXRoZXJfbWFzayA9CisJCQlQR1NfR0FUSEVSIHwgUEdTX0dBVEhFUl9NRVJHRSB8IFBHU19D T05TSURFUl9OT05QQVJUSUFMOworCQlyZWwtPnBnc19tYXNrICY9IH4oYWxsX2dhdGhlcl9tYXNr ICYgfmdhdGhlcl9tYXNrKTsKKwl9Cit9CisKKy8qCisgKiBBZGQgZmVlZGJhY2sgZW50cmllcyB0 byBmb3Igb25lIHRyb3ZlIHNsaWNlIHRvIHRoZSBwcm92aWRlZCBsaXN0IGFuZAorICogcmV0dXJu IHRoZSByZXN1bHRpbmcgbGlzdC4KKyAqCisgKiBGZWVkYmFjayBlbnRyaWVzIGFyZSBnZW5lcmF0 ZWQgZnJvbSB0aGUgdHJvdmUgZW50cnkncyBmbGFncy4gSXQncyBhc3N1bWVkCisgKiB0aGF0IHRo ZSBjYWxsZXIgaGFzIGFscmVhZHkgc2V0IGFsbCByZWxldmFudCBmbGFncyB3aXRoIHRoZSBleGNl cHRpb24gb2YKKyAqIFBHUEFfVEVfRkFJTEVELiBXZSBzZXQgdGhhdCBmbGFnIGhlcmUgaWYgYXBw cm9wcmlhdGUuCisgKi8KK3N0YXRpYyBMaXN0ICoKK3BncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJh Y2soTGlzdCAqbGlzdCwgcGdwYV90cm92ZSAqdHJvdmUsCisJCQkJCQkJIHBncGFfdHJvdmVfbG9v a3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywK KwkJCQkJCQkgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIpCit7CisJcGdwYV90cm92 ZV9lbnRyeSAqZW50cmllczsKKwlpbnQJCQluZW50cmllczsKKwlTdHJpbmdJbmZvRGF0YSBidWY7 CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlwZ3BhX3Ryb3ZlX2xvb2t1cF9hbGwodHJvdmUs IHR5cGUsICZlbnRyaWVzLCAmbmVudHJpZXMpOworCWZvciAoaW50IGkgPSAwOyBpIDwgbmVudHJp ZXM7ICsraSkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJmVudHJpZXNbaV07CisJ CURlZkVsZW0gICAgKml0ZW07CisKKwkJLyoKKwkJICogSWYgdGhpcyBlbnRyeSB3YXMgZnVsbHkg bWF0Y2hlZCwgY2hlY2sgd2hldGhlciBnZW5lcmF0aW5nIGFkdmljZQorCQkgKiBmcm9tIHRoaXMg cGxhbiB3b3VsZCBwcm9kdWNlIHN1Y2ggYW4gZW50cnkuIElmIG5vdCwgbGFiZWwgdGhlIGVudHJ5 CisJCSAqIGFzIGZhaWxlZC4KKwkJICovCisJCWlmICgoZW50cnktPmZsYWdzICYgUEdQQV9URV9N QVRDSF9GVUxMKSAhPSAwICYmCisJCQkhcGdwYV93YWxrZXJfd291bGRfYWR2aXNlKHdhbGtlciwg cnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkgIGVudHJ5LT50YWcsIGVudHJ5LT50YXJnZXQpKQor CQkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfRkFJTEVEOworCisJCWl0ZW0gPSBtYWtlRGVmRWxl bShwZ3BhX2NzdHJpbmdfdHJvdmVfZW50cnkoZW50cnkpLAorCQkJCQkJICAgKE5vZGUgKikgbWFr ZUludGVnZXIoZW50cnktPmZsYWdzKSwgLTEpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBpdGVt KTsKKwl9CisKKwlyZXR1cm4gbGlzdDsKK30KKworLyoKKyAqIEVtaXQgYSBXQVJOSU5HIHRlbGwg dGhlIHVzZXIgYWJvdXQgYSBwcm9ibGVtIHdpdGggdGhlIHN1cHBsaWVkIHBsYW4gYWR2aWNlLgor ICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX2ZlZWRiYWNrX3dhcm5pbmcoTGlzdCAqZmVl ZGJhY2spCit7CisJU3RyaW5nSW5mb0RhdGEgZGV0YWlsYnVmOworCVN0cmluZ0luZm9EYXRhIGZs YWdidWY7CisKKwkvKiBRdWljayBleGl0IGlmIHRoZXJlJ3Mgbm8gZmVlZGJhY2suICovCisJaWYg KGZlZWRiYWNrID09IE5JTCkKKwkJcmV0dXJuOworCisJLyogSW5pdGlhbGl6ZSBidWZmZXJzLiAq LworCWluaXRTdHJpbmdJbmZvKCZkZXRhaWxidWYpOworCWluaXRTdHJpbmdJbmZvKCZmbGFnYnVm KTsKKworCS8qIE1haW4gbG9vcC4gKi8KKwlmb3JlYWNoX25vZGUoRGVmRWxlbSwgaXRlbSwgZmVl ZGJhY2spCisJeworCQlpbnQJCQlmbGFncyA9IGRlZkdldEludDMyKGl0ZW0pOworCisJCS8qCisJ CSAqIERvbid0IGVtaXQgYW55dGhpbmcgaWYgaXQgd2FzIGZ1bGx5IG1hdGNoZWQgd2l0aCBubyBw cm9ibGVtcyBmb3VuZC4KKwkJICoKKwkJICogTkI6IEZlZWRiYWNrIHNob3VsZCBuZXZlciBiZSBt YXJrZWQgZnVsbHkgbWF0Y2hlZCB3aXRob3V0IGFsc28KKwkJICogYmVpbmcgbWFya2VkIHBhcnRp YWxseSBtYXRjaGVkLgorCQkgKi8KKwkJaWYgKGZsYWdzID09IChQR1BBX1RFX01BVENIX1BBUlRJ QUwgfCBQR1BBX1RFX01BVENIX0ZVTEwpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogVGVy bWluYXRlIGVhY2ggZGV0YWlsIGxpbmUgZXhjZXB0IHRoZSBsYXN0IHdpdGggYSBuZXdsaW5lLiBU aGlzIGlzCisJCSAqIGFsc28gYSBjb252ZW5pZW50IHBsYWNlIHRvIHJlc2V0IGZsYWdidWYuCisJ CSAqLworCQlpZiAoZGV0YWlsYnVmLmxlbiA+IDApCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9D aGFyKCZkZXRhaWxidWYsICdcbicpOworCQkJcmVzZXRTdHJpbmdJbmZvKCZmbGFnYnVmKTsKKwkJ fQorCisJCS8qIEdlbmVyYXRlIG91dHB1dC4gKi8KKwkJcGdwYV90cm92ZV9hcHBlbmRfZmxhZ3Mo JmZsYWdidWYsIGZsYWdzKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmZGV0YWlsYnVmLCBfKCJhZHZp Y2UgJXMgZmVlZGJhY2sgaXMgXCIlc1wiIiksCisJCQkJCQkgaXRlbS0+ZGVmbmFtZSwgZmxhZ2J1 Zi5kYXRhKTsKKwl9CisKKwkvKiBFbWl0IHRoZSB3YXJuaW5nLCBpZiBhbnkgcHJvYmxlbXMgd2Vy ZSBmb3VuZC4gKi8KKwlpZiAoZGV0YWlsYnVmLmxlbiA+IDApCisJCWVyZXBvcnQoV0FSTklORywK KwkJCQllcnJtc2coInN1cHBsaWVkIHBsYW4gYWR2aWNlIHdhcyBub3QgZW5mb3JjZWQiKSwKKwkJ CQllcnJkZXRhaWwoIiVzIiwgZGV0YWlsYnVmLmRhdGEpKTsKK30KKworI2lmZGVmIFVTRV9BU1NF UlRfQ0hFQ0tJTkcKKworLyoKKyAqIEZhc3QgaGFzaCBmdW5jdGlvbiBmb3IgYSBrZXkgY29uc2lz dGluZyBvZiBhbiBSVEkgYW5kIHBsYW4gbmFtZS4KKyAqLworc3RhdGljIHVpbnQzMgorcGdwYV9y aV9jaGVja2VyX2hhc2hfa2V5KHBncGFfcmlfY2hlY2tlcl9rZXkga2V5KQoreworCWZhc3RoYXNo X3N0YXRlIGhzOworCWludAkJCXNwX2xlbjsKKworCWZhc3RoYXNoX2luaXQoJmhzLCAwKTsKKwor CWhzLmFjY3VtID0ga2V5LnJ0aTsKKwlmYXN0aGFzaF9jb21iaW5lKCZocyk7CisKKwkvKiBwbGFu X25hbWUgY2FuIGJlIE5VTEwgKi8KKwlpZiAoa2V5LnBsYW5fbmFtZSA9PSBOVUxMKQorCQlzcF9s ZW4gPSAwOworCWVsc2UKKwkJc3BfbGVuID0gZmFzdGhhc2hfYWNjdW1fY3N0cmluZygmaHMsIGtl eS5wbGFuX25hbWUpOworCisJLyogaGFzaGZuX3Vuc3RhYmxlLmggcmVjb21tZW5kcyB1c2luZyBz dHJpbmcgbGVuZ3RoIGFzIHR3ZWFrICovCisJcmV0dXJuIGZhc3RoYXNoX2ZpbmFsMzIoJmhzLCBz cF9sZW4pOworfQorCisjZW5kaWYKKworLyoKKyAqIFNhdmUgdGhlIHJhbmdlIHRhYmxlIGlkZW50 aWZpZXIgZm9yIG9uZSByZWxhdGlvbiBmb3IgZnV0dXJlIGNyb3NzLWNoZWNraW5nLgorICovCitz dGF0aWMgdm9pZAorcGdwYV9yaV9jaGVja2VyX3NhdmUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMs IFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkgUmVsT3B0SW5mbyAqcmVsKQoreworI2lmZGVmIFVT RV9BU1NFUlRfQ0hFQ0tJTkcKKwlwZ3BhX3JpX2NoZWNrZXJfa2V5IGtleTsKKwlwZ3BhX3JpX2No ZWNrZXIgKmNoZWNrOworCXBncGFfaWRlbnRpZmllciByaWQ7CisJY29uc3QgY2hhciAqcmlkX3N0 cmluZzsKKwlib29sCQlmb3VuZDsKKworCWtleS5ydGkgPSBibXNfc2luZ2xldG9uX21lbWJlcihy ZWwtPnJlbGlkcyk7CisJa2V5LnBsYW5fbmFtZSA9IHJvb3QtPnBsYW5fbmFtZTsKKwlwZ3BhX2Nv bXB1dGVfaWRlbnRpZmllcl9ieV9ydGkocm9vdCwga2V5LnJ0aSwgJnJpZCk7CisJcmlkX3N0cmlu ZyA9IHBncGFfaWRlbnRpZmllcl9zdHJpbmcoJnJpZCk7CisJY2hlY2sgPSBwZ3BhX3JpX2NoZWNr X2luc2VydChwcHMtPnJpX2NoZWNrX2hhc2gsIGtleSwgJmZvdW5kKTsKKwlBc3NlcnQoIWZvdW5k IHx8IHN0cmNtcChjaGVjay0+cmlkX3N0cmluZywgcmlkX3N0cmluZykgPT0gMCk7CisJY2hlY2st PnJpZF9zdHJpbmcgPSByaWRfc3RyaW5nOworI2VuZGlmCit9CisKKy8qCisgKiBWYWxpZGF0ZSB0 aGF0IHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVycyB3ZSB3ZXJlIGFibGUgdG8gZ2VuZXJhdGUg ZHVyaW5nCisgKiBwbGFubmluZyBtYXRjaCB0aGUgb25lcyB3ZSBnZW5lcmF0ZWQgZnJvbSB0aGUg ZmluYWwgcGxhbi4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcmlfY2hlY2tlcl92YWxpZGF0ZShw Z3BhX3BsYW5uZXJfc3RhdGUgKnBwcywgUGxhbm5lZFN0bXQgKnBzdG10KQoreworI2lmZGVmIFVT RV9BU1NFUlRfQ0hFQ0tJTkcKKwlwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzOworCXBn cGFfcmlfY2hlY2tfaXRlcmF0b3IgaXQ7CisJcGdwYV9yaV9jaGVja2VyICpjaGVjazsKKworCS8q IENyZWF0ZSBpZGVudGlmaWVycyBmcm9tIHRoZSBwbGFubmVkIHN0YXRlbWVudC4gKi8KKwlydF9p ZGVudGlmaWVycyA9IHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQocHN0 bXQpOworCisJLyogSXRlcmF0ZSBvdmVyIGlkZW50aWZpZXJzIGNyZWF0ZWQgZHVyaW5nIHBsYW5u aW5nLCBzbyB3ZSBjYW4gY29tcGFyZS4gKi8KKwlwZ3BhX3JpX2NoZWNrX3N0YXJ0X2l0ZXJhdGUo cHBzLT5yaV9jaGVja19oYXNoLCAmaXQpOworCXdoaWxlICgoY2hlY2sgPSBwZ3BhX3JpX2NoZWNr X2l0ZXJhdGUocHBzLT5yaV9jaGVja19oYXNoLCAmaXQpKSAhPSBOVUxMKQorCXsKKwkJaW50CQkJ cnRvZmZzZXQgPSAwOworCQljb25zdCBjaGFyICpyaWRfc3RyaW5nOworCQlJbmRleAkJZmxhdF9y dGk7CisKKwkJLyoKKwkJICogSWYgdGhlcmUncyBubyBwbGFuIG5hbWUgYXNzb2NpYXRlZCB3aXRo IHRoaXMgZW50cnksIHRoZW4gdGhlCisJCSAqIHJ0b2Zmc2V0IGlzIDAuIE90aGVyd2lzZSwgd2Ug Y2FuIHNlYXJjaCB0aGUgU3ViUGxhblJUSW5mbyBsaXN0IHRvCisJCSAqIGZpbmQgdGhlIHJ0b2Zm c2V0LgorCQkgKi8KKwkJaWYgKGNoZWNrLT5rZXkucGxhbl9uYW1lICE9IE5VTEwpCisJCXsKKwkJ CWZvcmVhY2hfbm9kZShTdWJQbGFuUlRJbmZvLCBydGluZm8sIHBzdG10LT5zdWJydGluZm9zKQor CQkJeworCQkJCS8qCisJCQkJICogSWYgcnRpbmZvLT5kdW1teSBpcyBzZXQsIHRoZW4gdGhlIHN1 YnF1ZXJ5J3MgcmFuZ2UgdGFibGUKKwkJCQkgKiB3aWxsIG9ubHkgaGF2ZSBiZWVuIHBhcnRpYWxs eSBjb3BpZWQgdG8gdGhlIGZpbmFsIHJhbmdlCisJCQkJICogdGFibGUuIFNwZWNpZmljYWxseSwg b25seSBSVEVfUkVMQVRJT04gZW50cmllcyBhbmQKKwkJCQkgKiBSVEVfU1VCUVVFUlkgZW50cmll cyB0aGF0IHdlcmUgb25jZSBSVEVfUkVMQVRJT04gZW50cmllcworCQkJCSAqIHdpbGwgYmUgY29w aWVkLCBhcyBwZXIgYWRkX3J0ZXNfdG9fZmxhdF9ydGFibGUuIFRoZXJlZm9yZSwKKwkJCQkgKiB0 aGVyZSdzIG5vIGZpeGVkIHJ0b2Zmc2V0IHRoYXQgd2UgY2FuIGFwcGx5IHRvIHRoZSBSVElzCisJ CQkJICogdXNlZCBkdXJpbmcgcGxhbm5pbmcgdG8gbG9jYXRlIHRoZSBjb3JyZXNwb25kaW5nIHJl bGF0aW9ucworCQkJCSAqIGluIHRoZSBmaW5hbCBydGFibGUuCisJCQkJICoKKwkJCQkgKiBXaXRo IG1vcmUgY29tcGxleCBsb2dpYywgd2UgY291bGQgd29yayBhcm91bmQgdGhhdCBwcm9ibGVtCisJ CQkJICogYnkgcmVtZW1iZXJpbmcgdGhlIHdob2xlIGNvbnRlbnRzIG9mIHRoZSBzdWJxdWVyeSdz IHJ0YWJsZQorCQkJCSAqIGR1cmluZyBwbGFubmluZywgZGV0ZXJtaW5pbmcgd2hpY2ggb2YgdGhv c2Ugd291bGQgaGF2ZSBiZWVuCisJCQkJICogY29waWVkIHRvIHRoZSBmaW5hbCBydGFibGUsIGFu ZCBtYXRjaGluZyB0aGVtIHVwLiBCdXQgaXQKKwkJCQkgKiBkb2Vzbid0IHNlZW0gbGlrZSBhIHdv cnRod2hpbGUgZW5kZWF2b3IgZm9yIHJpZ2h0IG5vdywKKwkJCQkgKiBiZWNhdXNlIFJUSXMgZnJv bSBzdWNoIHN1YnF1ZXJpZXMgd29uJ3QgYXBwZWFyIGluIHRoZSBwbGFuCisJCQkJICogdHJlZSBp dHNlbGYsIGp1c3QgaW4gdGhlIHJhbmdlIHRhYmxlLiBIZW5jZSwgd2UgY2FuIG5laXRoZXIKKwkJ CQkgKiBnZW5lcmF0ZSBub3IgYWNjZXB0IGFkdmljZSBmb3IgdGhlbS4KKwkJCQkgKi8KKwkJCQlp ZiAoc3RyY21wKGNoZWNrLT5rZXkucGxhbl9uYW1lLCBydGluZm8tPnBsYW5fbmFtZSkgPT0gMAor CQkJCQkmJiAhcnRpbmZvLT5kdW1teSkKKwkJCQl7CisJCQkJCXJ0b2Zmc2V0ID0gcnRpbmZvLT5y dG9mZnNldDsKKwkJCQkJQXNzZXJ0KHJ0b2Zmc2V0ID4gMCk7CisJCQkJCWJyZWFrOworCQkJCX0K KwkJCX0KKworCQkJLyoKKwkJCSAqIEl0J3Mgbm90IGFuIGVycm9yIGlmIHdlIGRvbid0IGZpbmQg dGhlIHBsYW4gbmFtZTogdGhhdCBqdXN0CisJCQkgKiBtZWFucyB0aGF0IHdlIHBsYW5uZWQgYSBz dWJwbGFuIGJ5IHRoaXMgbmFtZSBidXQgaXQgZW5kZWQgdXAKKwkJCSAqIGJlaW5nIGEgZHVtbXkg c3VicGxhbiBhbmQgc28gd2Fzbid0IGluY2x1ZGVkIGluIHRoZSBmaW5hbCBwbGFuCisJCQkgKiB0 cmVlLgorCQkJICovCisJCQlpZiAocnRvZmZzZXQgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJfQor CisJCS8qCisJCSAqIGNoZWNrLT5rZXkucnRpIGlzIHRoZSBSVEkgdGhhdCB3ZSBzYXcgcHJpb3Ig dG8gcmFuZ2UtdGFibGUKKwkJICogZmxhdHRlbmluZywgc28gd2UgbXVzdCBhZGQgdGhlIGFwcHJv cHJpYXRlIFJUIG9mZnNldCB0byBnZXQgdGhlCisJCSAqIGZpbmFsIFJUSS4KKwkJICovCisJCWZs YXRfcnRpID0gY2hlY2stPmtleS5ydGkgKyBydG9mZnNldDsKKwkJQXNzZXJ0KGZsYXRfcnRpIDw9 IGxpc3RfbGVuZ3RoKHBzdG10LT5ydGFibGUpKTsKKworCQkvKiBBc3NlcnQgdGhhdCB0aGUgc3Ry aW5nIHdlIGNvbXB1dGUgbm93IG1hdGNoZXMgdGhlIHByZXZpb3VzIG9uZS4gKi8KKwkJcmlkX3N0 cmluZyA9IHBncGFfaWRlbnRpZmllcl9zdHJpbmcoJnJ0X2lkZW50aWZpZXJzW2ZsYXRfcnRpIC0g MV0pOworCQlBc3NlcnQoc3RyY21wKHJpZF9zdHJpbmcsIGNoZWNrLT5yaWRfc3RyaW5nKSA9PSAw KTsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqIENvbnZlcnQgYSBiaXRtYXBzZXQgdG8gYSBDIHN0 cmluZyBvZiBjb21tYS1zZXBhcmF0ZWQgaW50ZWdlcnMuCisgKi8KK3N0YXRpYyBjaGFyICoKK3Bn cGFfYm1zX3RvX2NzdHJpbmcoQml0bWFwc2V0ICpibXMpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVm OworCWludAkJCXggPSAtMTsKKworCWlmIChibXNfaXNfZW1wdHkoYm1zKSkKKwkJcmV0dXJuICJu b25lIjsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCXdoaWxlICgoeCA9IGJtc19uZXh0X21l bWJlcihibXMsIHgpKSA+PSAwKQorCXsKKwkJaWYgKGJ1Zi5sZW4gPiAwKQorCQkJYXBwZW5kU3Ry aW5nSW5mbygmYnVmLCAiLCAlZCIsIHgpOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZi dWYsICIlZCIsIHgpOworCX0KKworCXJldHVybiBidWYuZGF0YTsKK30KKworLyoKKyAqIENvbnZl cnQgYSBKb2luVHlwZSB0byBhIEMgc3RyaW5nLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitw Z3BhX2pvaW50eXBlX3RvX2NzdHJpbmcoSm9pblR5cGUgam9pbnR5cGUpCit7CisJc3dpdGNoIChq b2ludHlwZSkKKwl7CisJCWNhc2UgSk9JTl9JTk5FUjoKKwkJCXJldHVybiAiaW5uZXIiOworCQlj YXNlIEpPSU5fTEVGVDoKKwkJCXJldHVybiAibGVmdCI7CisJCWNhc2UgSk9JTl9GVUxMOgorCQkJ cmV0dXJuICJmdWxsIjsKKwkJY2FzZSBKT0lOX1JJR0hUOgorCQkJcmV0dXJuICJyaWdodCI7CisJ CWNhc2UgSk9JTl9TRU1JOgorCQkJcmV0dXJuICJzZW1pIjsKKwkJY2FzZSBKT0lOX0FOVEk6CisJ CQlyZXR1cm4gImFudGkiOworCQljYXNlIEpPSU5fUklHSFRfU0VNSToKKwkJCXJldHVybiAicmln aHQgc2VtaSI7CisJCWNhc2UgSk9JTl9SSUdIVF9BTlRJOgorCQkJcmV0dXJuICJyaWdodCBhbnRp IjsKKwkJY2FzZSBKT0lOX1VOSVFVRV9PVVRFUjoKKwkJCXJldHVybiAidW5pcXVlIG91dGVyIjsK KwkJY2FzZSBKT0lOX1VOSVFVRV9JTk5FUjoKKwkJCXJldHVybiAidW5pcXVlIGlubmVyIjsKKwl9 CisJcmV0dXJuICI/Pz8iOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3BsYW5uZXIuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdkNDBiOTEwYjAwCi0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaApAQCAtMCww ICsxLDE3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3BsYW5uZXIuaAorICoJ ICBwbGFubmVyIGhvb2tzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfcGxhbm5lci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYg UEdQQV9QTEFOTkVSX0gKKyNkZWZpbmUgUEdQQV9QTEFOTkVSX0gKKworZXh0ZXJuIHZvaWQgcGdw YV9wbGFubmVyX2luc3RhbGxfaG9va3Modm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9zY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmEwNGY5 ZWNhOGUxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Nj YW4uYwpAQCAtMCwwICsxLDI2OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9z Y2FuLmMKKyAqCSAgYW5hbHlzaXMgb2Ygc2NhbnMgaW4gUGxhbiB0cmVlcworICoKKyAqIENvcHly aWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYworICoKKyAqLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFf c2Nhbi5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wYXJz ZW5vZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorCitzdGF0aWMgcGdwYV9z Y2FuICpwZ3BhX21ha2Vfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxh biAqcGxhbiwKKwkJCQkJCQkJIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJ IEJpdG1hcHNldCAqcmVsaWRzKTsKKworCitzdGF0aWMgUlRFS2luZCB1bmlxdWVfbm9uam9pbl9y dGVraW5kKEJpdG1hcHNldCAqcmVsaWRzLCBMaXN0ICpydGFibGUpOworCisvKgorICogQnVpbGQg YSBwZ3BhX3NjYW4gb2JqZWN0IGZvciBhIFBsYW4gbm9kZSBhbmQgdXBkYXRlIHRoZSBwbGFuIHdh bGtlcgorICogY29udGV4dCBhcyBhcHBvcHJpYXRlLiAgSWYgdGhpcyBpcyBhbiBBcHBlbmQgb3Ig TWVyZ2VBcHBlbmQgc2NhbiwgYWxzbworICogYnVpbGQgcGdwYV9zY2FuIGZvciBhbnkgc2NhbnMg dGhhdCB3ZXJlIGNvbnNvbGlkYXRlZCBpbnRvIHRoaXMgb25lIGJ5CisgKiBBcHBlbmQvTWVyZ2VB cHBlbmQgcHVsbC11cC4KKyAqCisgKiBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgRWxpZGVkTm9k ZSBmb3IgdGhpcyBwbGFuIG5vZGUsIHBhc3MgdGhlIHVwcGVybW9zdAorICogb25lIGFzIGVsaWRl ZF9ub2RlLCBlbHNlIHBhc3MgTlVMTC4KKyAqCisgKiBTZXQgdGhlICdiZW5lYXRoX2FueV9nYXRo ZXInIG5vZGUgaWYgd2UgYXJlIHVuZGVybmVhdGggYSBHYXRoZXIgb3IKKyAqIEdhdGhlciBNZXJn ZSBub2RlIChleGNlcHQgZm9yIGEgc2luZ2xlLWNvcHkgR2F0aGVyIG5vZGUsIGZvciB3aGljaAor ICogR0FUSEVSIG9yIEdBVEhFUl9NRVJHRSBhZHZpY2Ugc2hvdWxkIG5vdCBiZSBlbWl0dGVkKS4K KyAqCisgKiBTZXQgdGhlICd3aXRoaW5fam9pbl9wcm9ibGVtJyBmbGFnIGlmIHdlJ3JlIGluc2lk ZSBvZiBhIGpvaW4gcHJvYmxlbSBhbmQKKyAqIG5vdCBvdGhlcndpc2UuCisgKi8KK3BncGFfc2Nh biAqCitwZ3BhX2J1aWxkX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBs YW4gKnBsYW4sCisJCQkJRWxpZGVkTm9kZSAqZWxpZGVkX25vZGUsCisJCQkJYm9vbCBiZW5lYXRo X2FueV9nYXRoZXIsIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxlbSkKK3sKKwlwZ3BhX3NjYW5fc3Ry YXRlZ3kgc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisJQml0bWFwc2V0ICAqcmVsaWRz ID0gTlVMTDsKKwlpbnQJCQlydGkgPSAtMTsKKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRf c2V0cyA9IE5JTDsKKwlOb2RlVGFnCQlub2RldHlwZSA9IG5vZGVUYWcocGxhbik7CisKKwlpZiAo ZWxpZGVkX25vZGUgIT0gTlVMTCkKKwl7CisJCW5vZGV0eXBlID0gZWxpZGVkX25vZGUtPmVsaWRl ZF90eXBlOworCQlyZWxpZHMgPSBlbGlkZWRfbm9kZS0+cmVsaWRzOworCisJCS8qCisJCSAqIElm IHNldHJlZnMgcHJvY2Vzc2luZyBlbGlkZWQgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUg dGhhdCBoYWQKKwkJICogb25seSBvbmUgc3Vydml2aW5nIGNoaWxkLCBpdCBtaWdodCBiZSBhIHBh cnRpdGlvbndpc2Ugb3BlcmF0aW9uLAorCQkgKiBidXQgdGhlbiB0aGlzIGlzIGVpdGhlciBhIHNl dG9wIG92ZXIgc3VicXVlcmllcywgb3IgYSBwYXJ0aXRpb253aXNlCisJCSAqIG9wZXJhdGlvbiAo d2hpY2ggbWlnaHQgYmUgYSBzY2FuIG9yIGEgam9pbiBpbiByZWFsaXR5LCBidXQgaGVyZSB3ZQor CQkgKiBkb24ndCBjYXJlIGFib3V0IHRoZSBkaXN0aW5jdGlvbiBhbmQgY29uc2lkZXIgaXQgc2lt cGx5IGEgc2NhbikuCisJCSAqCisJCSAqIEEgc2V0b3Agb3ZlciBzdWJxdWVyaWVzLCBvciBhIHRy aXZpYWwgU3ViUXVlcnlTY2FuIHRoYXQgd2FzIGVsaWRlZCwKKwkJICogaXMgYW4gIm9yZGluYXJ5 IiBzY2FuIGkuZS4gb25lIGZvciB3aGljaCB3ZSBuZWVkIHRvIGdlbmVyYXRlIGFkdmljZQorCQkg KiBiZWNhdXNlIHRoZSBwbGFubmVyIGhhcyBub3QgbWFkZSBhbnkgbWVhbmluZ2Z1bCBjaG9pY2Uu CisJCSAqLworCQlpZiAoKG5vZGV0eXBlID09IFRfQXBwZW5kIHx8IG5vZGV0eXBlID09IFRfTWVy Z2VBcHBlbmQpICYmCisJCQl1bmlxdWVfbm9uam9pbl9ydGVraW5kKHJlbGlkcywKKwkJCQkJCQkJ ICAgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKSA9PSBSVEVfUkVMQVRJT04pCisJCQlzdHJhdGVneSA9 IFBHUEFfU0NBTl9QQVJUSVRJT05XSVNFOworCQllbHNlCisJCQlzdHJhdGVneSA9IFBHUEFfU0NB Tl9PUkRJTkFSWTsKKworCQkvKiBKb2luIFJUSXMgY2FuIGJlIHByZXNlbnQsIGJ1dCBhZHZpY2Ug bmV2ZXIgcmVmZXJzIHRvIHRoZW0uICovCisJCXJlbGlkcyA9IHBncGFfZmlsdGVyX291dF9qb2lu X3JlbGlkcyhyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJfQorCWVsc2UgaWYgKChy dGkgPSBwZ3BhX3NjYW5yZWxpZChwbGFuKSkgIT0gMCkKKwl7CisJCXJlbGlkcyA9IGJtc19tYWtl X3NpbmdsZXRvbihydGkpOworCisJCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKKwkJeworCQkJY2Fz ZSBUX1NlcVNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fU0VROworCQkJCWJyZWFrOwor CQkJY2FzZSBUX0JpdG1hcEhlYXBTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX0JJVE1B UF9IRUFQOworCQkJCWJyZWFrOworCQkJY2FzZSBUX0luZGV4U2NhbjoKKwkJCQlzdHJhdGVneSA9 IFBHUEFfU0NBTl9JTkRFWDsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgor CQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX0lOREVYX09OTFk7CisJCQkJYnJlYWs7CisJCQljYXNl IFRfVGlkU2NhbjoKKwkJCWNhc2UgVF9UaWRSYW5nZVNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BB X1NDQU5fVElEOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKworCQkJCS8qCisJCQkJICogVGhp cyBjYXNlIGluY2x1ZGVzIGEgRm9yZWlnblNjYW4gdGFyZ2V0aW5nIGEgc2luZ2xlCisJCQkJICog cmVsYXRpb247IG5vIG90aGVyIHN0cmF0ZWd5IGlzIHBvc3NpYmxlIGluIHRoYXQgY2FzZSwgYnV0 CisJCQkJICogc2VlIGJlbG93LCB3aGVyZSB0aGluZ3MgYXJlIGRpZmZlcmVudCBpbiBtdWx0aS1y ZWxhdGlvbgorCQkJCSAqIGNhc2VzLgorCQkJCSAqLworCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FO X09SRElOQVJZOworCQkJCWJyZWFrOworCQl9CisJfQorCWVsc2UgaWYgKChyZWxpZHMgPSBwZ3Bh X3JlbGlkcyhwbGFuKSkgIT0gTlVMTCkKKwl7CisJCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKKwkJ eworCQkJY2FzZSBUX0ZvcmVpZ25TY2FuOgorCisJCQkJLyoKKwkJCQkgKiBJZiBtdWx0aXBsZSBy ZWxhdGlvbnMgYXJlIGJlaW5nIHRhcmdldGVkIGJ5IGEgc2luZ2xlCisJCQkJICogZm9yZWlnbiBz Y2FuLCB0aGVuIHRoZSBmb3JlaWduIGpvaW4gaGFzIGJlZW4gcHVzaGVkIHRvIHRoZQorCQkJCSAq IHJlbW90ZSBzaWRlLCBhbmQgd2Ugd2FudCB0aGF0IHRvIGJlIHJlZmxlY3RlZCBpbiB0aGUKKwkJ CQkgKiBnZW5lcmF0ZWQgYWR2aWNlLgorCQkJCSAqLworCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FO X0ZPUkVJR047CisJCQkJYnJlYWs7CisJCQljYXNlIFRfQXBwZW5kOgorCisJCQkJLyoKKwkJCQkg KiBBcHBlbmQgbm9kZXMgY2FuIHJlcHJlc2VudCBwYXJ0aXRpb253aXNlIHNjYW5zIG9mIGEgYQor CQkJCSAqIHJlbGF0aW9uLCBidXQgd2hlbiB0aGV5IGltcGxlbWVudCBhIHNldCBvcGVyYXRpb24s IHRoZXkgYXJlCisJCQkJICoganVzdCBvcmRpbmFyeSBzY2Fucy4KKwkJCQkgKi8KKwkJCQlpZiAo dW5pcXVlX25vbmpvaW5fcnRla2luZChyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSkKKwkJ CQkJPT0gUlRFX1JFTEFUSU9OKQorCQkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9QQVJUSVRJT05X SVNFOworCQkJCWVsc2UKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisKKwkJ CQkvKiBCZSBzdXJlIHRvIGFjY291bnQgZm9yIHB1bGxlZC11cCBzY2Fucy4gKi8KKwkJCQljaGls ZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJCSgoQXBwZW5kICopIHBsYW4pLT5jaGlsZF9hcHBl bmRfcmVsaWRfc2V0czsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCQkv KiBTb21lIGxvZ2ljIGhlcmUgYXMgZm9yIEFwcGVuZCwgYWJvdmUuICovCisJCQkJaWYgKHVuaXF1 ZV9ub25qb2luX3J0ZWtpbmQocmVsaWRzLCB3YWxrZXItPnBzdG10LT5ydGFibGUpCisJCQkJCT09 IFJURV9SRUxBVElPTikKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRTsK KwkJCQllbHNlCisJCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCisJCQkJLyog QmUgc3VyZSB0byBhY2NvdW50IGZvciBwdWxsZWQtdXAgc2NhbnMuICovCisJCQkJY2hpbGRfYXBw ZW5kX3JlbGlkX3NldHMgPQorCQkJCQkoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5jaGlsZF9hcHBl bmRfcmVsaWRfc2V0czsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJc3RyYXRlZ3kgPSBQ R1BBX1NDQU5fT1JESU5BUlk7CisJCQkJYnJlYWs7CisJCX0KKworCisJCS8qIEpvaW4gUlRJcyBj YW4gYmUgcHJlc2VudCwgYnV0IGFkdmljZSBuZXZlciByZWZlcnMgdG8gdGhlbS4gKi8KKwkJcmVs aWRzID0gcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKHJlbGlkcywgd2Fsa2VyLT5wc3RtdC0+ cnRhYmxlKTsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYW4gQXBwZW5kIG9yIE1lcmdlQXBw ZW5kIG5vZGUgaW50byB3aGljaCBzdWJvcmRpbmF0ZSBBcHBlbmQKKwkgKiBvciBNZXJnZUFwcGVu ZCBwYXRocyB3ZXJlIG1lcmdlZCwgZWFjaCBvZiB0aG9zZSBtZXJnZWQgcGF0aHMgaXMKKwkgKiBl ZmZlY3RpdmVseSBhbm90aGVyIHNjYW4gZm9yIHdoaWNoIHdlIG5lZWQgdG8gYWNjb3VudC4KKwkg Ki8KKwlmb3JlYWNoX25vZGUoQml0bWFwc2V0LCBjaGlsZF9yZWxpZHMsIGNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzKQorCXsKKwkJQml0bWFwc2V0ICAqY2hpbGRfbm9uam9pbl9yZWxpZHM7CisKKwkJ Y2hpbGRfbm9uam9pbl9yZWxpZHMgPQorCQkJcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKGNo aWxkX3JlbGlkcywKKwkJCQkJCQkJCQl3YWxrZXItPnBzdG10LT5ydGFibGUpOworCQkodm9pZCkg cGdwYV9tYWtlX3NjYW4od2Fsa2VyLCBwbGFuLCBzdHJhdGVneSwKKwkJCQkJCQkgIGNoaWxkX25v bmpvaW5fcmVsaWRzKTsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgcGxhbiBub2RlIGhhcyBubyBh c3NvY2lhdGVkIFJUSXMsIGl0J3Mgbm90IGEgc2Nhbi4gV2hlbiB0aGUKKwkgKiAnd2l0aGluX2pv aW5fcHJvYmxlbScgZmxhZyBpcyBzZXQsIHRoYXQncyB1bmV4cGVjdGVkLCBzbyB0aHJvdyBhbgor CSAqIGVycm9yLCBlbHNlIHJldHVybiBxdWlldGx5LgorCSAqLworCWlmIChyZWxpZHMgPT0gTlVM TCkKKwl7CisJCWlmICh3aXRoaW5fam9pbl9wcm9ibGVtKQorCQkJZWxvZyhFUlJPUiwgInBsYW4g bm9kZSBoYXMgbm8gUlRJczogJWQiLCAoaW50KSBub2RlVGFnKHBsYW4pKTsKKwkJcmV0dXJuIE5V TEw7CisJfQorCisJLyoKKwkgKiBBZGQgdGhlIGFwcHJvcHJpYXRlIHNldCBvZiBSVElzIHRvIHdh bGtlci0+bm9fZ2F0aGVyX3NjYW5zLgorCSAqCisJICogQWRkIG5vdGhpbmcgaWYgd2UncmUgYmVu ZWF0aCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSwgc2luY2UKKwkgKiBOT19HQVRIRVIg YWR2aWNlIGlzIGNsZWFybHkgaW5hcHByb3ByaWF0ZSBpbiB0aGF0IHNpdHVhdGlvbi4KKwkgKgor CSAqIEFkZCBub3RoaW5nIGlmIHRoaXMgaXMgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUs IHdoZXRoZXIgb3Igbm90CisJICogZWxpZGVkLiBXZSdsbCBlbWl0IE5PX0dBVEhFUigpIGZvciB0 aGUgdW5kZXJseWluZyBzY2FuLCB3aGljaCBpcyBnb29kCisJICogZW5vdWdoLgorCSAqLworCWlm ICghYmVuZWF0aF9hbnlfZ2F0aGVyICYmIG5vZGV0eXBlICE9IFRfQXBwZW5kICYmCisJCW5vZGV0 eXBlICE9IFRfTWVyZ2VBcHBlbmQpCisJCXdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zID0KKwkJCWJt c19hZGRfbWVtYmVycyh3YWxrZXItPm5vX2dhdGhlcl9zY2FucywgcmVsaWRzKTsKKworCS8qIENh bGxlciB0ZWxscyB1cyB3aGV0aGVyIE5PX0dBVEhFUigpIGFkdmljZSBmb3IgdGhpcyBzY2FuIGlz IG5lZWRlZC4gKi8KKwlyZXR1cm4gcGdwYV9tYWtlX3NjYW4od2Fsa2VyLCBwbGFuLCBzdHJhdGVn eSwgcmVsaWRzKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIHNpbmdsZSBwZ3BhX3NjYW4gb2JqZWN0 IGFuZCB1cGRhdGUgdGhlIHBncGFfcGxhbl93YWxrZXJfY29udGV4dC4KKyAqLworc3RhdGljIHBn cGFfc2NhbiAqCitwZ3BhX21ha2Vfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtl ciwgUGxhbiAqcGxhbiwKKwkJCSAgIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwgQml0bWFw c2V0ICpyZWxpZHMpCit7CisJcGdwYV9zY2FuICAqc2NhbjsKKworCS8qIENyZWF0ZSB0aGUgc2Nh biBvYmplY3QuICovCisJc2NhbiA9IHBhbGxvYyhzaXplb2YocGdwYV9zY2FuKSk7CisJc2Nhbi0+ cGxhbiA9IHBsYW47CisJc2Nhbi0+c3RyYXRlZ3kgPSBzdHJhdGVneTsKKwlzY2FuLT5yZWxpZHMg PSByZWxpZHM7CisKKwkvKiBBZGQgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIGxpc3QuICovCisJd2Fs a2VyLT5zY2Fuc1tzY2FuLT5zdHJhdGVneV0gPSBsYXBwZW5kKHdhbGtlci0+c2NhbnNbc2Nhbi0+ c3RyYXRlZ3ldLAorCQkJCQkJCQkJCQlzY2FuKTsKKworCXJldHVybiBzY2FuOworfQorCisvKgor ICogRGV0ZXJtaW5lIHRoZSB1bmlxdWUgcnRla2luZCBvZiBhIHNldCBvZiByZWxpZHMuCisgKi8K K3N0YXRpYyBSVEVLaW5kCit1bmlxdWVfbm9uam9pbl9ydGVraW5kKEJpdG1hcHNldCAqcmVsaWRz LCBMaXN0ICpydGFibGUpCit7CisJaW50CQkJcnRpID0gLTE7CisJYm9vbAkJZmlyc3QgPSB0cnVl OworCVJURUtpbmQJCXJ0ZWtpbmQ7CisKKwlBc3NlcnQocmVsaWRzICE9IE5VTEwpOworCisJd2hp bGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAwKQorCXsKKwkJUmFu Z2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0Y2gocnRpLCBydGFibGUpOworCisJCWlmIChydGUtPnJ0 ZWtpbmQgPT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKworCQlpZiAoZmlyc3QpCisJCXsKKwkJ CXJ0ZWtpbmQgPSBydGUtPnJ0ZWtpbmQ7CisJCQlmaXJzdCA9IGZhbHNlOworCQl9CisJCWVsc2Ug aWYgKHJ0ZWtpbmQgIT0gcnRlLT5ydGVraW5kKQorCQkJZWxvZyhFUlJPUiwgInJ0ZWtpbmQgbWlz bWF0Y2g6ICVkIHZzLiAlZCIsCisJCQkJIHJ0ZWtpbmQsIHJ0ZS0+cnRla2luZCk7CisJfQorCisJ aWYgKGZpcnN0KQorCQllbG9nKEVSUk9SLCAibm8gbm9uLVJURV9KT0lOIFJURXMgZm91bmQiKTsK KworCXJldHVybiBydGVraW5kOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3NjYW4uaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNiYjg3MjZmZjFlCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaApAQCAtMCwwICsxLDg1 IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3NjYW4uaAorICoJICBhbmFseXNp cyBvZiBzY2FucyBpbiBQbGFuIHRyZWVzCisgKgorICogRm9yIHB1cnBvc2VzIG9mIHRoaXMgbW9k dWxlLCBhICJzY2FuIiBpbmNsdWRlcyAoMSkgc2luZ2xlIHBsYW4gbm9kZXMgdGhhdAorICogc2Nh biBtdWx0aXBsZSBSVElzLCBzdWNoIGFzIGEgZGVnZW5lcmF0ZSBSZXN1bHQgbm9kZSB0aGF0IHJl cGxhY2VzIHdoYXQKKyAqIHdvdWxkIG90aGVyd2lzZSBoYXZlIGJlZW4gYSBqb2luLCBhbmQgKDIp IEFwcGVuZCBhbmQgTWVyZ2VBcHBlbmQgbm9kZXMKKyAqIGltcGxlbWVudGluZyBhIHBhcnRpdGlv bndpc2Ugc2NhbiBvciBhIHBhcnRpdGlvbndpc2Ugam9pbi4gU2FpZAorICogZGlmZmVyZW50bHks IHNjYW5zIGFyZSB0aGUgbGVhdmVzIG9mIHRoZSBqb2luIHRyZWUgZm9yIGEgc2luZ2xlIGpvaW4K KyAqIHByb2JsZW0uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfc2Nhbi5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9T Q0FOX0gKKyNkZWZpbmUgUEdQQV9TQ0FOX0gKKworI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5o IgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgcGdwYV9wbGFuX3dh bGtlcl9jb250ZXh0OworCisvKgorICogU2NhbiBzdHJhdGVnaWVzLgorICoKKyAqIFBHUEFfU0NB Tl9PUkRJTkFSWSBpcyBhbnkgc2NhbiBzdHJhdGVneSB0aGF0IGlzbid0IGludGVyZXN0aW5nIHRv IHVzCisgKiBiZWNhdXNlIHRoZXJlIGlzIG5vIG1lYW5pbmdmdWwgcGxhbm5lciBkZWNpc2lvbiBp bnZvbHZlZC4gRm9yIGV4YW1wbGUsCisgKiB0aGUgb25seSB3YXkgdG8gc2NhbiBhIHN1YnF1ZXJ5 IGlzIGEgU3VicXVlcnlTY2FuLCBhbmQgdGhlIG9ubHkgd2F5IHRvCisgKiBzY2FuIGEgVkFMVUVT IGNvbnN0cnVjdCBpcyBhIFZhbHVlc1NjYW4uIFdlIG5lZWQgbm90IGNhcmUgZXhhY3RseSB3aGlj aAorICogdHlwZSBvZiBwbGFubmVyIG5vZGUgd2FzIHVzZWQgaW4gc3VjaCBjYXNlcywgYmVjYXVz ZSB0aGUgc2FtZSB0aGluZyB3aWxsCisgKiBoYXBwZW4gd2hlbiByZXBsYW5uaW5nLgorICoKKyAq IFBHUEFfU0NBTl9PUkRJTkFSWSBhbHNvIGluY2x1ZGVzIFJlc3VsdCBub2RlcyB0aGF0IGNvcnJl c3BvbmQgdG8gc2NhbnMKKyAqIG9yIGV2ZW4gam9pbnMgdGhhdCBhcmUgcHJvdmVkIGVtcHR5LiBX ZSBkb24ndCBrbm93IHdoZXRoZXIgb3Igbm90IHRoZSBzY2FuCisgKiBvciBqb2luIHdpbGwgc3Rp bGwgYmUgcHJvdmFibHkgZW1wdHkgYXQgcmVwbGFubmluZyB0aW1lLCBidXQgaWYgaXQgaXMsCisg KiB0aGVuIG5vIHNjYW4tdHlwZSBhZHZpY2UgaXMgbmVlZGVkLCBhbmQgaWYgaXQncyBub3QsIHdl IGNhbid0IHJlY29tbWVuZAorICogYSBzY2FuIHR5cGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgcGxh bi4KKyAqCisgKiBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRSBhbHNvIGx1bXBzIHRvZ2V0aGVyIHNj YW5zIGFuZCBqb2luczogdGhpcyBjYW4KKyAqIGJlIGVpdGhlciBhIHBhcnRpdGlvbndpc2Ugc2Nh biBvZiBhIHBhcnRpdGlvbmVkIHRhYmxlIG9yIGEgcGFydGl0aW9ud2lzZQorICogam9pbiBiZXR3 ZWVuIHNldmVyYWwgcGFydGl0aW9uZWQgdGFibGVzLiBOb3RlIHRoYXQgYWxsIGRlY2lzaW9ucyBh Ym91dAorICogd2hldGhlciBvciBub3QgdG8gdXNlIHBhcnRpdGlvbndpc2Ugam9pbiBhcmUgbWVh bmluZ2Z1bDogbm8gbWF0dGVyIHdoYXQKKyAqIHdlIGRlY2lkZWQgdGhpcyB0aW1lLCB3ZSBjb3Vs ZCBkbyBtb3JlIG9yIGZld2VyIHRoaW5ncyBwYXJ0aXRpb253aXNlIHRoZQorICogbmV4dCB0aW1l LgorICoKKyAqIFBHUEFfU0NBTl9GT1JFSUdOIGlzIG9ubHkgdXNlZCB3aGVuIHRoZXJlJ3MgbW9y ZSB0aGFuIG9uZSByZWxhdGlvbiBpbnZvbHZlZDsKKyAqIGEgc2luZ2xlLXRhYmxlIGZvcmVpZ24g c2NhbiBpcyBjbGFzc2lmaWVkIGFzIG9yZGluYXJ5LCBzaW5jZSB0aGVyZSBpcyBubworICogZGVj aXNpb24gdG8gbWFrZSBpbiB0aGF0IGNhc2UuCisgKgorICogT3RoZXIgc2NhbiBzdHJhdGVnaWVz IG1hcCBvbmUtdG8tb25lIHRvIHBsYW4gbm9kZXMuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVBH UEFfU0NBTl9PUkRJTkFSWSA9IDAsCisJUEdQQV9TQ0FOX1NFUSwKKwlQR1BBX1NDQU5fQklUTUFQ X0hFQVAsCisJUEdQQV9TQ0FOX0ZPUkVJR04sCisJUEdQQV9TQ0FOX0lOREVYLAorCVBHUEFfU0NB Tl9JTkRFWF9PTkxZLAorCVBHUEFfU0NBTl9QQVJUSVRJT05XSVNFLAorCVBHUEFfU0NBTl9USUQK KwkvKiB1cGRhdGUgTlVNX1BHUEFfU0NBTl9TVFJBVEVHWSBpZiB5b3UgYWRkIGFueXRoaW5nIGhl cmUgKi8KK30gcGdwYV9zY2FuX3N0cmF0ZWd5OworCisjZGVmaW5lIE5VTV9QR1BBX1NDQU5fU1RS QVRFR1kJKChpbnQpIFBHUEFfU0NBTl9USUQgKyAxKQorCisvKgorICogQWxsIG9mIHRoZSBkZXRh aWxzIHdlIG5lZWQgcmVnYXJkaW5nIGEgc2Nhbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9z Y2FuCit7CisJUGxhbgkgICAqcGxhbjsKKwlwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3k7CisJ Qml0bWFwc2V0ICAqcmVsaWRzOworfSBwZ3BhX3NjYW47CisKK2V4dGVybiBwZ3BhX3NjYW4gKnBn cGFfYnVpbGRfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxh biwKKwkJCQkJCQkJICBFbGlkZWROb2RlICplbGlkZWRfbm9kZSwKKwkJCQkJCQkJICBib29sIGJl bmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCQkJICBib29sIHdpdGhpbl9qb2luX3Byb2JsZW0pOwor CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVy LmwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hODg3NzM1ZjMxNAotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwKQEAgLTAsMCArMSwyOTcgQEAK KyV0b3B7CisvKgorICogU2Nhbm5lciBmb3IgcGxhbiBhZHZpY2UKKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMDAtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisg KiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sCisgKi8KKyNpbmNsdWRlICJw b3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgIm5vZGVz L21pc2Nub2Rlcy5oIgorI2luY2x1ZGUgInBhcnNlci9zY2Fuc3VwLmgiCisKKyNpbmNsdWRlICJw Z3BhX2FzdC5oIgorI2luY2x1ZGUgInBncGFfcGFyc2VyLmgiCisKKy8qCisgKiBFeHRyYSBkYXRh IHRoYXQgd2UgcGFzcyBhcm91bmQgd2hlbiBkdXJpbmcgc2Nhbm5pbmcuCisgKgorICogJ2xpdGJ1 ZicgaXMgdXNlZCB0byBpbXBsZW1lbnQgdGhlIDx4ZD4gZXhjbHVzaXZlIHN0YXRlLCB3aGljaCBo YW5kbGVzCisgKiBkb3VibGUtcXVvdGVkIGlkZW50aWZpZXJzLgorICovCit0eXBlZGVmIHN0cnVj dCBwZ3BhX3l5X2V4dHJhX3R5cGUKK3sKKwlTdHJpbmdJbmZvRGF0YQlsaXRidWY7Cit9IHBncGFf eXlfZXh0cmFfdHlwZTsKKworfQorCisleworLyogTENPVl9FWENMX1NUQVJUICovCisKKyNkZWZp bmUgWVlfREVDTCBcCisJZXh0ZXJuIGludCBwZ3BhX3l5bGV4KHVuaW9uIFlZU1RZUEUgKnl5bHZh bF9wYXJhbSwgTGlzdCAqKnJlc3VsdCwgXAorCQkJCQkJICBjaGFyICoqcGFyc2VfZXJyb3JfbXNn X3AsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKworLyogTm8gcmVhc29uIHRvIGNvbnN0cmFpbiBhbW91 bnQgb2YgZGF0YSBzbHVycGVkICovCisjZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgMTY3NzcyMTYK KworLyogQXZvaWQgZXhpdCgpIG9uIGZhdGFsIHNjYW5uZXIgZXJyb3JzIChhIGJpdCB1Z2x5IC0t IHNlZSB5eV9mYXRhbF9lcnJvcikgKi8KKyN1bmRlZiBmcHJpbnRmCisjZGVmaW5lIGZwcmludGYo ZmlsZSwgZm10LCBtc2cpICBmcHJpbnRmX3RvX2VyZXBvcnQoZm10LCBtc2cpCisKK3N0YXRpYyB2 b2lkCitmcHJpbnRmX3RvX2VyZXBvcnQoY29uc3QgY2hhciAqZm10LCBjb25zdCBjaGFyICptc2cp Cit7CisJZXJlcG9ydChFUlJPUiwgKGVycm1zZ19pbnRlcm5hbCgiJXMiLCBtc2cpKSk7Cit9Cisl fQorCislb3B0aW9uIHJlZW50cmFudAorJW9wdGlvbiBiaXNvbi1icmlkZ2UKKyVvcHRpb24gOGJp dAorJW9wdGlvbiBuZXZlci1pbnRlcmFjdGl2ZQorJW9wdGlvbiBub2RlZmF1bHQKKyVvcHRpb24g bm9pbnB1dAorJW9wdGlvbiBub3VucHV0Cislb3B0aW9uIG5veXl3cmFwCislb3B0aW9uIG5veXlh bGxvYworJW9wdGlvbiBub3l5cmVhbGxvYworJW9wdGlvbiBub3l5ZnJlZQorJW9wdGlvbiB3YXJu Cislb3B0aW9uIHByZWZpeD0icGdwYV95eSIKKyVvcHRpb24gZXh0cmEtdHlwZT0icGdwYV95eV9l eHRyYV90eXBlICoiCisKKy8qCisgKiBXaGF0IGZvbGxvd3MgaXMgYSBzZXZlcmVseSBzdHJpcHBl ZC1kb3duIHZlcnNpb24gb2YgdGhlIGNvcmUgc2Nhbm5lci4gV2UKKyAqIG9ubHkgY2FyZSBhYm91 dCByZWNvZ25pemluZyBpZGVudGlmaWVycyB3aXRoIG9yIHdpdGhvdXQgaWRlbnRpZmllciBxdW90 aW5nCisgKiAoaS5lLiBkb3VibGUtcXVvdGluZyksIGRlY2ltYWwgaW50ZWdlcnMsIGFuZCBhIHNt YWxsIGhhbmRmdWwgb2Ygb3RoZXIKKyAqIHRoaW5ncy4gS2VlcCB0aGVzZSBydWxlcyBpbiBzeW5j IHdpdGggc3JjL2JhY2tlbmQvcGFyc2VyL3NjYW4ubC4gQXMgaW4gdGhhdAorICogZmlsZSwgd2Ug dXNlIGFuIGV4Y2x1c2l2ZSBzdGF0ZSBjYWxsZWQgJ3hjJyBmb3IgQy1zdHlsZSBjb21tZW50cywg YW5kIGFuCisgKiBleGNsdXNpdmUgc3RhdGUgY2FsbGVkICd4ZCcgZm9yIGRvdWJsZS1xdW90ZWQg aWRlbnRpZmllcnMuCisgKi8KKyV4IHhjCisleCB4ZAorCitpZGVudF9zdGFydAkJW0EtWmEtelwy MDAtXDM3N19dCitpZGVudF9jb250CQlbQS1aYS16XDIwMC1cMzc3XzAtOVwkXQorCitpZGVudGlm aWVyCQl7aWRlbnRfc3RhcnR9e2lkZW50X2NvbnR9KgorCitkZWNkaWdpdAkJWzAtOV0KK2RlY2lu dGVnZXIJCXtkZWNkaWdpdH0oXz97ZGVjZGlnaXR9KSoKKworc3BhY2UJCQlbIFx0XG5cclxmXHZd Cit3aGl0ZXNwYWNlCQl7c3BhY2V9KworCitkcXVvdGUJCQlcIgoreGRzdGFydAkJCXtkcXVvdGV9 Cit4ZHN0b3AJCQl7ZHF1b3RlfQoreGRkb3VibGUJCXtkcXVvdGV9e2RxdW90ZX0KK3hkaW5zaWRl CQlbXiJdKworCit4Y3N0YXJ0CQkJXC9cKgoreGNzdG9wCQkJXCorXC8KK3hjaW5zaWRlCQlbXiov XSsKKworJSUKKwore3doaXRlc3BhY2V9CXsgLyogaWdub3JlICovIH0KKwore2lkZW50aWZpZXJ9 CXsKKwkJCQkJY2hhciAgICpzdHI7CisJCQkJCWJvb2wJZmFpbDsKKwkJCQkJcGdwYV9hZHZpY2Vf dGFnX3R5cGUJdGFnOworCisJCQkJCS8qCisJCQkJCSAqIFVubGlrZSB0aGUgY29yZSBzY2FubmVy LCB3ZSBkb24ndCB0cnVuY2F0ZSBpZGVudGlmaWVycworCQkJCQkgKiBoZXJlLiBUaGVyZSBpcyBu byBvYnZpb3VzIHJlYXNvbiB0byBkbyBzby4KKwkJCQkJICovCisJCQkJCXN0ciA9IGRvd25jYXNl X2lkZW50aWZpZXIoeXl0ZXh0LCB5eWxlbmcsIGZhbHNlLCBmYWxzZSk7CisJCQkJCXl5bHZhbC0+ c3RyID0gc3RyOworCisJCQkJCS8qCisJCQkJCSAqIElmIGl0J3Mgbm90IGEgdGFnLCBqdXN0IHJl dHVybiBUT0tfSURFTlQ7IGVsc2UsIHJldHVybgorCQkJCQkgKiBhIHRva2VuIHR5cGUgYmFzZWQg b24gaG93IGZ1cnRoZXIgcGFyc2luZyBzaG91bGQKKwkJCQkJICogcHJvY2VlZC4KKwkJCQkJICov CisJCQkJCXRhZyA9IHBncGFfcGFyc2VfYWR2aWNlX3RhZyhzdHIsICZmYWlsKTsKKwkJCQkJaWYg KGZhaWwpCisJCQkJCQlyZXR1cm4gVE9LX0lERU5UOworCQkJCQllbHNlIGlmICh0YWcgPT0gUEdQ QV9UQUdfSk9JTl9PUkRFUikKKwkJCQkJCXJldHVybiBUT0tfVEFHX0pPSU5fT1JERVI7CisJCQkJ CWVsc2UgaWYgKHRhZyA9PSBQR1BBX1RBR19JTkRFWF9TQ0FOIHx8CisJCQkJCQkJIHRhZyA9PSBQ R1BBX1RBR19JTkRFWF9PTkxZX1NDQU4pCisJCQkJCQlyZXR1cm4gVE9LX1RBR19JTkRFWDsKKwkJ CQkJZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX1NFUV9TQ0FOIHx8CisJCQkJCQkJIHRhZyA9PSBQ R1BBX1RBR19USURfU0NBTiB8fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfQklUTUFQX0hFQVBf U0NBTiB8fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfTk9fR0FUSEVSKQorCQkJCQkJcmV0dXJu IFRPS19UQUdfU0lNUExFOworCQkJCQllbHNlCisJCQkJCQlyZXR1cm4gVE9LX1RBR19HRU5FUklD OworCQkJCX0KKwore2RlY2ludGVnZXJ9CXsKKwkJCQkJY2hhciAgICplbmRwdHI7CisKKwkJCQkJ ZXJybm8gPSAwOworCQkJCQl5eWx2YWwtPmludGVnZXIgPSBzdHJ0b2ludCh5eXRleHQsICZlbmRw dHIsIDEwKTsKKwkJCQkJaWYgKCplbmRwdHIgIT0gJ1wwJyB8fCBlcnJubyA9PSBFUkFOR0UpCisJ CQkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAor CQkJCQkJCQkJICJpbnRlZ2VyIG91dCBvZiByYW5nZSIpOworCQkJCQlyZXR1cm4gVE9LX0lOVEVH RVI7CisJCQkJfQorCit7eGNzdGFydH0JCXsKKwkJCQkJQkVHSU4oeGMpOworCQkJCX0KKwore3hk c3RhcnR9CQl7CisJCQkJCUJFR0lOKHhkKTsKKwkJCQkJcmVzZXRTdHJpbmdJbmZvKCZ5eWV4dHJh LT5saXRidWYpOworCQkJCX0KKworLgkJCQl7IHJldHVybiB5eXRleHRbMF07IH0KKworPHhjPnt4 Y3N0b3B9CXsKKwkJCQkJQkVHSU4oSU5JVElBTCk7CisJCQkJfQorCis8eGM+e3hjaW5zaWRlfQl7 CisJCQkJCS8qIGRpc2NhcmQgbXVsdGlwbGUgY2hhcmFjdGVycyB3aXRob3V0IHNsYXNoIG9yIGFz dGVyaXNrICovCisJCQkJfQorCis8eGM+LgkJCXsKKwkJCQkJLyoKKwkJCQkJICogRGlzY2FyZCBh bnkgc2luZ2xlIGNoYXJhY3Rlci4gZmxleCBwcmVmZXJzIGxvbmdlcgorCQkJCQkgKiBtYXRjaGVz LCBzbyB0aGlzIHJ1bGUgd2lsbCBuZXZlciBiZSBwaWNrZWQgd2hlbiB3ZSBjb3VsZAorCQkJCQkg KiBoYXZlIG1hdGNoZWQgeGNzdG9wLgorCQkJCQkgKgorCQkJCQkgKiBOQjogQXQgcHJlc2VudCwg d2UgZG9uJ3QgYm90aGVyIHRvIHN1cHBvcnQgbmVzdGVkCisJCQkJCSAqIEMtc3R5bGUgY29tbWVu dHMgaGVyZSwgYnV0IHRoaXMgbG9naWMgY291bGQgYmUgZXh0ZW5kZWQKKwkJCQkJICogaWYgdGhh dCByZXN0cmljdGlvbiBwb3NlcyBhIHByb2JsZW0uCisJCQkJCSAqLworCQkJCX0KKworPHhjPjw8 RU9GPj4JCXsKKwkJCQkJQkVHSU4oSU5JVElBTCk7CisJCQkJCXBncGFfeXllcnJvcihyZXN1bHQs IHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJCSAidW50ZXJtaW5hdGVkIGNv bW1lbnQiKTsKKwkJCQl9CisKKzx4ZD57eGRzdG9wfQl7CisJCQkJCUJFR0lOKElOSVRJQUwpOwor CQkJCQlpZiAoeXlleHRyYS0+bGl0YnVmLmxlbiA9PSAwKQorCQkJCQkJcGdwYV95eWVycm9yKHJl c3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJCSAiemVyby1sZW5n dGggZGVsaW1pdGVkIGlkZW50aWZpZXIiKTsKKwkJCQkJeXlsdmFsLT5zdHIgPSBwc3RyZHVwKHl5 ZXh0cmEtPmxpdGJ1Zi5kYXRhKTsKKwkJCQkJcmV0dXJuIFRPS19JREVOVDsKKwkJCQl9CisKKzx4 ZD57eGRkb3VibGV9CXsKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJnl5ZXh0cmEtPmxpdGJ1 ZiwgJyInKTsKKwkJCQl9CisKKzx4ZD57eGRpbnNpZGV9CXsKKwkJCQkJYXBwZW5kQmluYXJ5U3Ry aW5nSW5mbygmeXlleHRyYS0+bGl0YnVmLCB5eXRleHQsIHl5bGVuZyk7CisJCQkJfQorCis8eGQ+ PDxFT0Y+PgkJeworCQkJCQlCRUdJTihJTklUSUFMKTsKKwkJCQkJcGdwYV95eWVycm9yKHJlc3Vs dCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJICJ1bnRlcm1pbmF0ZWQg cXVvdGVkIGlkZW50aWZpZXIiKTsKKwkJCQl9CisKKyUlCisKKy8qIExDT1ZfRVhDTF9TVE9QICov CisKKy8qCisgKiBIYW5kbGVyIGZvciBlcnJvcnMgd2hpbGUgc2Nhbm5pbmcgb3IgcGFyc2luZyBh ZHZpY2UuCisgKgorICogYmlzb24gcGFzc2VzIHRoZSBlcnJvciBtZXNzYWdlIHRvIHVzIHZpYSAn bWVzc2FnZScsIGFuZCB0aGUgY29udGV4dCBpcworICogYXZhaWxhYmxlIHZpYSB0aGUgJ3l5dGV4 dCcgbWFjcm8uIFdlIGFzc2VtYmxlIHRob3NlIHZhbHVlcyBpbnRvIGEgZmluYWwKKyAqIGVycm9y IHRleHQgYW5kIHRoZW4gYXJyYW5nZSB0byBwYXNzIGl0IGJhY2sgdG8gdGhlIGNhbGxlciBvZiBw Z3BhX3l5cGFyc2UoKQorICogYnkgc3RvcmluZyBpdCBpbnRvICpwYXJzZV9lcnJvcl9tc2dfcC4K KyAqLwordm9pZAorcGdwYV95eWVycm9yKExpc3QgKipyZXN1bHQsIGNoYXIgKipwYXJzZV9lcnJv cl9tc2dfcCwgeXlzY2FuX3QgeXlzY2FubmVyLAorCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7 CisJc3RydWN0IHl5Z3V0c190ICp5eWcgPSAoc3RydWN0IHl5Z3V0c190ICopIHl5c2Nhbm5lcjsJ LyogbmVlZGVkIGZvciB5eXRleHQKKwkJCQkJCQkJCQkJCQkJCSAqIG1hY3JvICovCisKKworCS8q IHJlcG9ydCBvbmx5IHRoZSBmaXJzdCBlcnJvciBpbiBhIHBhcnNlIG9wZXJhdGlvbiAqLworCWlm ICgqcGFyc2VfZXJyb3JfbXNnX3ApCisJCXJldHVybjsKKworCWlmICh5eXRleHRbMF0pCisJCSpw YXJzZV9lcnJvcl9tc2dfcCA9IHBzcHJpbnRmKCIlcyBhdCBvciBuZWFyIFwiJXNcIiIsIG1lc3Nh Z2UsIHl5dGV4dCk7CisJZWxzZQorCQkqcGFyc2VfZXJyb3JfbXNnX3AgPSBwc3ByaW50ZigiJXMg YXQgZW5kIG9mIGlucHV0IiwgbWVzc2FnZSk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBh ZHZpY2Ugc2Nhbm5lci4KKyAqCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHBhcnNp bmcgYmVnaW5zLgorICovCit2b2lkCitwZ3BhX3NjYW5uZXJfaW5pdChjb25zdCBjaGFyICpzdHIs IHl5c2Nhbl90ICp5eXNjYW5uZXJwKQoreworCXl5c2Nhbl90CXl5c2Nhbm5lcjsKKwlwZ3BhX3l5 X2V4dHJhX3R5cGUJKnl5ZXh0ID0gcGFsbG9jMF9vYmplY3QocGdwYV95eV9leHRyYV90eXBlKTsK KworCWlmICh5eWxleF9pbml0KHl5c2Nhbm5lcnApICE9IDApCisJCWVsb2coRVJST1IsICJ5eWxl eF9pbml0KCkgZmFpbGVkOiAlbSIpOworCisJeXlzY2FubmVyID0gKnl5c2Nhbm5lcnA7CisKKwlp bml0U3RyaW5nSW5mbygmeXlleHQtPmxpdGJ1Zik7CisJcGdwYV95eXNldF9leHRyYSh5eWV4dCwg eXlzY2FubmVyKTsKKworCXl5X3NjYW5fc3RyaW5nKHN0ciwgeXlzY2FubmVyKTsKK30KKworCisv KgorICogU2h1dCBkb3duIHRoZSBhZHZpY2Ugc2Nhbm5lci4KKyAqCisgKiBUaGlzIHNob3VsZCBi ZSBjYWxsZWQgYWZ0ZXIgcGFyc2luZyBpcyBjb21wbGV0ZS4KKyAqLwordm9pZAorcGdwYV9zY2Fu bmVyX2ZpbmlzaCh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJeXlsZXhfZGVzdHJveSh5eXNjYW5u ZXIpOworfQorCisvKgorICogSW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBtYWtlIGZsZXggdXNlIHBh bGxvYygpIGluc3RlYWQgb2YgbWFsbG9jKCkuCisgKiBJdCdkIGJlIGJldHRlciB0byBtYWtlIHRo ZXNlIHN0YXRpYywgYnV0IGZsZXggaW5zaXN0cyBvdGhlcndpc2UuCisgKi8KKwordm9pZCAqCit5 eWFsbG9jKHl5X3NpemVfdCBzaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmV0dXJuIHBh bGxvYyhzaXplKTsKK30KKwordm9pZCAqCit5eXJlYWxsb2Modm9pZCAqcHRyLCB5eV9zaXplX3Qg c2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWlmIChwdHIpCisJCXJldHVybiByZXBhbGxv YyhwdHIsIHNpemUpOworCWVsc2UKKwkJcmV0dXJuIHBhbGxvYyhzaXplKTsKK30KKwordm9pZAor eXlmcmVlKHZvaWQgKnB0ciwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWlmIChwdHIpCisJCXBm cmVlKHB0cik7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJv dmUuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lOTI0OTU5YzAxMAotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCkBAIC0wLDAgKzEsNTE2IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3Ryb3ZlLmMKKyAqCSAgQWxsIG9mIHRoZSBh ZHZpY2UgZ2l2ZW4gZm9yIGEgcGFydGljdWxhciBxdWVyeSwgYXBwcm9wcmlhdGVseQorICogICAg b3JnYW5pemVkIGZvciBjb252ZW5pZW50IGFjY2Vzcy4KKyAqCisgKiBUaGlzIG5hbWUgY29tZXMg ZnJvbSB0aGUgRW5nbGlzaCBleHByZXNzaW9uICJ0cm92ZSBvZiBhZHZpY2UiLCB3aGljaAorICog bWVhbnMgYSBjb2xsZWN0aW9uIG9mIHdpc2RvbS4gVGhpcyBzbGlnaHRseSB1bnVzdWFsIHRlcm0g aXMgY2hvc2VuIHRvCisgKiBhdm9pZCBuYW1pbmcgY29uZnVzaW9uOyBmb3IgZXhhbXBsZSwgImNv bGxlY3Rpb24gb2YgYWR2aWNlIiB3b3VsZAorICogaW52aXRlIGNvbmZ1c2lvbiB3aXRoIHBncGFf Y29sbGVjdG9yLmMuIE5vdGUgdGhhdCwgd2hpbGUgd2UgZG9uJ3Qga25vdworICogd2hldGhlciB0 aGUgcHJvdmlkZWQgYWR2aWNlIGlzIGFjdHVhbGx5IHdpc2UsIGl0J3Mgbm90IG91ciBqb2IgdG8K KyAqIHF1ZXN0aW9uIHRoZSB1c2VyJ3MgY2hvaWNlcy4KKyAqCisgKiBUaGUgZ29hbCBvZiB0aGlz IG1vZHVsZSBpcyB0byBtYWtlIGl0IGVhc3kgdG8gbG9jYXRlIHRoZSBzcGVjaWZpYworICogYml0 cyBvZiBhZHZpY2UgdGhhdCBwZXJ0YWluIHRvIGFueSBnaXZlbiBwYXJ0IG9mIGEgcXVlcnksIG9y IHRvCisgKiBkZXRlcm1pbmUgdGhhdCB0aGVyZSBhcmUgbm9uZS4KKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisg KgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV90cm92 ZS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2hhc2hmbl91bnN0YWJsZS5oIgorCisvKgorICogQW4g YWR2aWNlIHRyb3ZlIGlzIG9yZ2FuaXplZCBpbnRvIGEgc2VyaWVzIG9mICJzbGljZXMiLCBlYWNo IG9mIHdoaWNoCisgKiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBvbmUgdG9waWMgZS5nLiBz Y2FuIG1ldGhvZHMuIEVhY2ggc2xpY2UgY29uc2lzdHMKKyAqIG9mIGFuIGFycmF5IG9mIHRyb3Zl IGVudHJpZXMgcGx1cyBhIGhhc2ggdGFibGUgdGhhdCB3ZSBjYW4gdXNlIHRvIGRldGVybWluZQor ICogd2hpY2ggb25lcyBhcmUgcmVsZXZhbnQgdG8gYSBwYXJ0aWN1bGFyIHBhcnQgb2YgdGhlIHF1 ZXJ5LgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Ryb3ZlX3NsaWNlCit7CisJdW5zaWduZWQJ bmFsbG9jYXRlZDsKKwl1bnNpZ25lZAludXNlZDsKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVz OworCXN0cnVjdCBwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2ggKmhhc2g7Cit9IHBncGFfdHJvdmVfc2xp Y2U7CisKKy8qCisgKiBTY2FuIGFkdmljZSBpcyBzdG9yZWQgaW50byAnc2Nhbic7IGpvaW4gYWR2 aWNlIGlzIHN0b3JlZCBpbnRvICdqb2luJzsgYW5kCisgKiBhZHZpY2UgdGhhdCBjYW4gYXBwbHkg dG8gYm90aCBjYXNlcyBpcyBzdG9yZWQgaW50byAncmVsJy4gVGhpcyBsZXRzIGNhbGxlcnMKKyAq IGFzayBqdXN0IGZvciB3aGF0J3MgcmVsZXZhbnQuIFRoZXNlIHNsaWNlcyBjb3JyZXNwb25kIHRv IHRoZSBwb3NzaWJsZSB2YWx1ZXMKKyAqIG9mIHBncGFfdHJvdmVfbG9va3VwX3R5cGUuCisgKi8K K3N0cnVjdCBwZ3BhX3Ryb3ZlCit7CisJcGdwYV90cm92ZV9zbGljZSBqb2luOworCXBncGFfdHJv dmVfc2xpY2UgcmVsOworCXBncGFfdHJvdmVfc2xpY2Ugc2NhbjsKK307CisKKy8qCisgKiBXZSdy ZSBnb2luZyB0byBidWlsZCBhIGhhc2ggdGFibGUgdG8gYWxsb3cgY2xpZW50cyBvZiB0aGlzIG1v ZHVsZSB0byBmaW5kCisgKiByZWxldmFudCBhZHZpY2UgZm9yIGEgZ2l2ZW4gcGFydCBvZiB0aGUg cXVlcnkgcXVpY2tseS4gSG93ZXZlciwgd2UncmUgZ29pbmcKKyAqIHRvIHVzZSBvbmx5IHRocmVl IG9mIHRoZSBmaXZlIGtleSBmaWVsZHMgYXMgaGFzaCBrZXlzLiBUaGVyZSBhcmUgdHdvIHJlYXNv bnMKKyAqIGZvciB0aGlzLgorICoKKyAqIEZpcnN0LCBpdCdzIGFsbG93YWJsZSB0byBzZXQgcGFy dGl0aW9uX3NjaGVtYSB0byBOVUxMIHRvIG1hdGNoIGEgcGFydGl0aW9uCisgKiB3aXRoIHRoZSBj b3JyZWN0IG5hbWUgaW4gYW55IHNjaGVtYS4KKyAqCisgKiBTZWNvbmQsIHdlIGV4cGVjdCB0aGUg Im9jY3VycmVuY2UiIGFuZCAicGFydGl0aW9uX3NjaGVtYSIgcG9ydGlvbnMgb2YgdGhlCisgKiBy ZWxhdGlvbiBpZGVudGlmaWVycyB0byBiZSBtb3N0bHkgdW5pbnRlcmVzdGluZy4gTW9zdCBvZiB0 aGUgdGltZSwgdGhlCisgKiBvY2N1cnJlbmNlIGZpZWxkIHdpbGwgYmUgMSBhbmQgdGhlIHBhcnRp dGlvbl9zY2hlbWEgdmFsdWVzIHdpbGwgYWxsIGJlIHRoZQorICogc2FtZS4gRXZlbiB3aGVuIHRo ZXJlIGlzIHNvbWUgdmFyaWF0aW9uLCB0aGUgYWJzb2x1dGUgbnVtYmVyIG9mIGVudHJpZXMKKyAq IHRoYXQgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgZm9yIGFsbCB0aHJlZSBvZiB0aGVzZSBrZXkgZmll bGRzIHNob3VsZCBiZQorICogcXVpdGUgc21hbGwuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJ Y29uc3QgY2hhciAqYWxpYXNfbmFtZTsKKwljb25zdCBjaGFyICpwYXJ0aXRpb25fbmFtZTsKKwlj b25zdCBjaGFyICpwbGFuX25hbWU7Cit9IHBncGFfdHJvdmVfZW50cnlfa2V5OworCit0eXBlZGVm IHN0cnVjdAoreworCXBncGFfdHJvdmVfZW50cnlfa2V5IGtleTsKKwlpbnQJCQlzdGF0dXM7CisJ Qml0bWFwc2V0ICAqaW5kZXhlczsKK30gcGdwYV90cm92ZV9lbnRyeV9lbGVtZW50OworCitzdGF0 aWMgdWludDMyIHBncGFfdHJvdmVfZW50cnlfaGFzaF9rZXkocGdwYV90cm92ZV9lbnRyeV9rZXkg a2V5KTsKKworc3RhdGljIGlubGluZSBib29sCitwZ3BhX3Ryb3ZlX2VudHJ5X2NvbXBhcmVfa2V5 KHBncGFfdHJvdmVfZW50cnlfa2V5IGEsIHBncGFfdHJvdmVfZW50cnlfa2V5IGIpCit7CisJaWYg KHN0cmNtcChhLmFsaWFzX25hbWUsIGIuYWxpYXNfbmFtZSkgIT0gMCkKKwkJcmV0dXJuIGZhbHNl OworCisJaWYgKCFzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChhLnBhcnRpdGlvbl9uYW1lLCBi LnBhcnRpdGlvbl9uYW1lKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFzdHJpbmdzX2VxdWFs X29yX2JvdGhfbnVsbChhLnBsYW5fbmFtZSwgYi5wbGFuX25hbWUpKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworI2RlZmluZSBTSF9QUkVGSVgJCQlwZ3BhX3Ryb3ZlX2Vu dHJ5CisjZGVmaW5lIFNIX0VMRU1FTlRfVFlQRQkJcGdwYV90cm92ZV9lbnRyeV9lbGVtZW50Cisj ZGVmaW5lIFNIX0tFWV9UWVBFCQkJcGdwYV90cm92ZV9lbnRyeV9rZXkKKyNkZWZpbmUgU0hfS0VZ CQkJCWtleQorI2RlZmluZSBTSF9IQVNIX0tFWSh0Yiwga2V5KQlwZ3BhX3Ryb3ZlX2VudHJ5X2hh c2hfa2V5KGtleSkKKyNkZWZpbmUJU0hfRVFVQUwodGIsIGEsIGIpCXBncGFfdHJvdmVfZW50cnlf Y29tcGFyZV9rZXkoYSwgYikKKyNkZWZpbmUgU0hfU0NPUEUJCQlzdGF0aWMgaW5saW5lCisjZGVm aW5lIFNIX0RFQ0xBUkUKKyNkZWZpbmUgU0hfREVGSU5FCisjaW5jbHVkZSAibGliL3NpbXBsZWhh c2guaCIKKworc3RhdGljIHZvaWQgcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKHBncGFfdHJvdmVfc2xp Y2UgKnRzbGljZSk7CitzdGF0aWMgdm9pZCBwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZShwZ3BhX3Ry b3ZlX3NsaWNlICp0c2xpY2UsCisJCQkJCQkJCQlwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcsCisJ CQkJCQkJCQlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitzdGF0aWMgdm9pZCBwZ3BhX3Ry b3ZlX2FkZF90b19oYXNoKHBncGFfdHJvdmVfZW50cnlfaGFzaCAqaGFzaCwKKwkJCQkJCQkJICAg cGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsCisJCQkJCQkJCSAgIGludCBpbmRleCk7CitzdGF0 aWMgQml0bWFwc2V0ICpwZ3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cChwZ3BhX3Ryb3ZlX3NsaWNlICp0 c2xpY2UsCisJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZCk7CisKKy8qCisgKiBCdWls ZCBhIHRyb3ZlIG9mIGFkdmljZSBmcm9tIGEgbGlzdCBvZiBhZHZpY2UgaXRlbXMuCisgKgorICog Q2FsbGVyIGNhbiBvYnRhaW4gYSBsaXN0IG9mIGFkdmljZSBpdGVtcyB0byBwYXNzIHRvIHRoaXMg ZnVuY3Rpb24gYnkKKyAqIGNhbGxpbmcgcGdwYV9wYXJzZSgpLgorICovCitwZ3BhX3Ryb3ZlICoK K3BncGFfYnVpbGRfdHJvdmUoTGlzdCAqYWR2aWNlX2l0ZW1zKQoreworCXBncGFfdHJvdmUgKnRy b3ZlID0gcGFsbG9jX29iamVjdChwZ3BhX3Ryb3ZlKTsKKworCXBncGFfaW5pdF90cm92ZV9zbGlj ZSgmdHJvdmUtPmpvaW4pOworCXBncGFfaW5pdF90cm92ZV9zbGljZSgmdHJvdmUtPnJlbCk7CisJ cGdwYV9pbml0X3Ryb3ZlX3NsaWNlKCZ0cm92ZS0+c2Nhbik7CisKKwlmb3JlYWNoX3B0cihwZ3Bh X2FkdmljZV9pdGVtLCBpdGVtLCBhZHZpY2VfaXRlbXMpCisJeworCQlzd2l0Y2ggKGl0ZW0tPnRh ZykKKwkJeworCQkJY2FzZSBQR1BBX1RBR19KT0lOX09SREVSOgorCQkJCXsKKwkJCQkJcGdwYV9h ZHZpY2VfdGFyZ2V0ICp0YXJnZXQ7CisKKwkJCQkJLyoKKwkJCQkJICogRm9yIG1vc3QgYWR2aWNl IHR5cGVzLCBlYWNoIGVsZW1lbnQgaW4gdGhlIHRvcC1sZXZlbAorCQkJCQkgKiBsaXN0IGlzIGEg c2VwYXJhdGUgdGFyZ2V0LCBidXQgaXQncyBtb3N0IGNvbnZlbmllbnQgdG8KKwkJCQkJICogcmVn YXJkIHRoZSBlbnRpcmV0eSBvZiBhIEpPSU5fT1JERVIgc3BlY2lmaWNhdGlvbiBhcyBhCisJCQkJ CSAqIHNpbmdsZSB0YXJnZXQuIFNpbmNlIGl0IHdhc24ndCByZXByZXNlbnRlZCB0aGF0IHdheQor CQkJCQkgKiBkdXJpbmcgcGFyc2luZywgYnVpbGQgYSBzdXJyb2dhdGUgb2JqZWN0IG5vdy4KKwkJ CQkJICovCisJCQkJCXRhcmdldCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7 CisJCQkJCXRhcmdldC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q7CisJCQkJCXRh cmdldC0+Y2hpbGRyZW4gPSBpdGVtLT50YXJnZXRzOworCisJCQkJCXBncGFfdHJvdmVfYWRkX3Rv X3NsaWNlKCZ0cm92ZS0+am9pbiwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJ CX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOgorCQkJ Y2FzZSBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU46CisJCQljYXNlIFBHUEFfVEFHX0lOREVYX1ND QU46CisJCQljYXNlIFBHUEFfVEFHX1NFUV9TQ0FOOgorCQkJY2FzZSBQR1BBX1RBR19USURfU0NB TjoKKworCQkJCS8qCisJCQkJICogU2NhbiBhZHZpY2UuCisJCQkJICovCisJCQkJZm9yZWFjaF9w dHIocGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJnZXQsIGl0ZW0tPnRhcmdldHMpCisJCQkJeworCQkJ CQkvKgorCQkJCQkgKiBGb3Igbm93LCBhbGwgb2Ygb3VyIHNjYW4gdHlwZXMgdGFyZ2V0IHNpbmds ZSByZWxhdGlvbnMsCisJCQkJCSAqIGJ1dCBpbiB0aGUgZnV0dXJlIHRoaXMgbWlnaHQgbm90IGJl IHRydWUsIGUuZy4gYSBjdXN0b20KKwkJCQkJICogc2NhbiBjb3VsZCByZXBsYWNlIGEgam9pbi4K KwkJCQkJICovCisJCQkJCUFzc2VydCh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5U SUZJRVIpOworCQkJCQlwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZSgmdHJvdmUtPnNjYW4sCisJCQkJ CQkJCQkJCWl0ZW0tPnRhZywgdGFyZ2V0KTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug UEdQQV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJY2FzZSBQR1BBX1RBR19IQVNIX0pPSU46CisJCQlj YXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQljYXNlIFBHUEFfVEFHX01F UkdFX0pPSU5fUExBSU46CisJCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpF OgorCQkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpFOgorCQkJY2FzZSBQR1BBX1RB R19ORVNURURfTE9PUF9QTEFJTjoKKwkJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFV RToKKwkJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFOgorCisJCQkJLyoKKwkJCQkgKiBK b2luIHN0cmF0ZWd5IGFkdmljZS4KKwkJCQkgKi8KKwkJCQlmb3JlYWNoX3B0cihwZ3BhX2Fkdmlj ZV90YXJnZXQsIHRhcmdldCwgaXRlbS0+dGFyZ2V0cykKKwkJCQl7CisJCQkJCXBncGFfdHJvdmVf YWRkX3RvX3NsaWNlKCZ0cm92ZS0+am9pbiwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQp OworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBQR1BBX1RBR19QQVJUSVRJT05XSVNFOgor CQkJY2FzZSBQR1BBX1RBR19HQVRIRVI6CisJCQljYXNlIFBHUEFfVEFHX0dBVEhFUl9NRVJHRToK KwkJCWNhc2UgUEdQQV9UQUdfTk9fR0FUSEVSOgorCisJCQkJLyoKKwkJCQkgKiBBZHZpY2UgYWJv dXQgYSBSZWxPcHRJbmZvIHJlbGV2YW50IHRvIGJvdGggc2NhbnMgYW5kIGpvaW5zLgorCQkJCSAq LworCQkJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0LCBpdGVtLT50YXJn ZXRzKQorCQkJCXsKKwkJCQkJcGdwYV90cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5yZWwsCisJ CQkJCQkJCQkJCWl0ZW0tPnRhZywgdGFyZ2V0KTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCX0KKwl9 CisKKwlyZXR1cm4gdHJvdmU7Cit9CisKKy8qCisgKiBTZWFyY2ggYSB0cm92ZSBvZiBhZHZpY2Ug Zm9yIHJlbGV2YW50IGVudHJpZXMuCisgKgorICogQWxsIHBhcmFtZXRlcnMgYXJlIGlucHV0IHBh cmFtZXRlcnMgZXhjZXB0IGZvciAqcmVzdWx0LCB3aGljaCBpcyBhbiBvdXRwdXQKKyAqIHBhcmFt ZXRlciB1c2VkIHRvIHJldHVybiByZXN1bHRzIHRvIHRoZSBjYWxsZXIuCisgKi8KK3ZvaWQKK3Bn cGFfdHJvdmVfbG9va3VwKHBncGFfdHJvdmUgKnRyb3ZlLCBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBl IHR5cGUsCisJCQkJICBpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAqcmlkcywgcGdwYV90cm92 ZV9yZXN1bHQgKnJlc3VsdCkKK3sKKwlwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2U7CisJQml0bWFw c2V0ICAqaW5kZXhlczsKKworCUFzc2VydChucmlkcyA+IDApOworCisJaWYgKHR5cGUgPT0gUEdQ QV9UUk9WRV9MT09LVVBfU0NBTikKKwkJdHNsaWNlID0gJnRyb3ZlLT5zY2FuOworCWVsc2UgaWYg KHR5cGUgPT0gUEdQQV9UUk9WRV9MT09LVVBfSk9JTikKKwkJdHNsaWNlID0gJnRyb3ZlLT5qb2lu OworCWVsc2UKKwkJdHNsaWNlID0gJnRyb3ZlLT5yZWw7CisKKwlpbmRleGVzID0gcGdwYV90cm92 ZV9zbGljZV9sb29rdXAodHNsaWNlLCAmcmlkc1swXSk7CisJZm9yIChpbnQgaSA9IDE7IGkgPCBu cmlkczsgKytpKQorCXsKKwkJQml0bWFwc2V0ICAqb3RoZXJfaW5kZXhlczsKKworCQkvKgorCQkg KiBJZiB0aGUgY2FsbGVyIGlzIGFza2luZyBhYm91dCB0d28gcmVsYXRpb25zIHRoYXQgYXJlbid0 IHBhcnQgb2YgdGhlCisJCSAqIHNhbWUgc3VicXVlcnksIHRoZXkndmUgbWVzc2VkIHVwLgorCQkg Ki8KKwkJQXNzZXJ0KHN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZHNbMF0ucGxhbl9uYW1l LAorCQkJCQkJCQkJCSAgcmlkc1tpXS5wbGFuX25hbWUpKTsKKworCQlvdGhlcl9pbmRleGVzID0g cGdwYV90cm92ZV9zbGljZV9sb29rdXAodHNsaWNlLCAmcmlkc1tpXSk7CisJCWluZGV4ZXMgPSBi bXNfdW5pb24oaW5kZXhlcywgb3RoZXJfaW5kZXhlcyk7CisJfQorCisJcmVzdWx0LT5lbnRyaWVz ID0gdHNsaWNlLT5lbnRyaWVzOworCXJlc3VsdC0+aW5kZXhlcyA9IGluZGV4ZXM7Cit9CisKKy8q CisgKiBSZXR1cm4gYWxsIGVudHJpZXMgaW4gYSB0cm92ZSBzbGljZSB0byB0aGUgY2FsbGVyLgor ICoKKyAqIFRoZSBmaXJzdCB0d28gYXJndW1lbnRzIGFyZSBpbnB1dCBhcmd1bWVudHMsIGFuZCB0 aGUgcmVtYWluZGVyIGFyZSBvdXRwdXQKKyAqIGFyZ3VtZW50cy4KKyAqLwordm9pZAorcGdwYV90 cm92ZV9sb29rdXBfYWxsKHBncGFfdHJvdmUgKnRyb3ZlLCBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBl IHR5cGUsCisJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqKmVudHJpZXMsIGludCAqbmVudHJpZXMp Cit7CisJcGdwYV90cm92ZV9zbGljZSAqdHNsaWNlOworCisJaWYgKHR5cGUgPT0gUEdQQV9UUk9W RV9MT09LVVBfU0NBTikKKwkJdHNsaWNlID0gJnRyb3ZlLT5zY2FuOworCWVsc2UgaWYgKHR5cGUg PT0gUEdQQV9UUk9WRV9MT09LVVBfSk9JTikKKwkJdHNsaWNlID0gJnRyb3ZlLT5qb2luOworCWVs c2UKKwkJdHNsaWNlID0gJnRyb3ZlLT5yZWw7CisKKwkqZW50cmllcyA9IHRzbGljZS0+ZW50cmll czsKKwkqbmVudHJpZXMgPSB0c2xpY2UtPm51c2VkOworfQorCisvKgorICogQ29udmVydCBhIHRy b3ZlIGVudHJ5IHRvIGFuIGl0ZW0gb2YgcGxhbiBhZHZpY2UgdGhhdCB3b3VsZCBwcm9kdWNlIGl0 LgorICovCitjaGFyICoKK3BncGFfY3N0cmluZ190cm92ZV9lbnRyeShwZ3BhX3Ryb3ZlX2VudHJ5 ICplbnRyeSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3RyaW5nSW5mbygmYnVm KTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlcyIsIHBncGFfY3N0cmluZ19hZHZpY2VfdGFn KGVudHJ5LT50YWcpKTsKKworCS8qIEpPSU5fT1JERVIgdGFncyBhcmUgdHJhbnNmb3JtZWQgYnkg cGdwYV9idWlsZF90cm92ZTsgdW5kbyB0aGF0IGhlcmUgKi8KKwlpZiAoZW50cnktPnRhZyAhPSBQ R1BBX1RBR19KT0lOX09SREVSKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnKCcpOwor CWVsc2UKKwkJQXNzZXJ0KGVudHJ5LT50YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX09SREVS RURfTElTVCk7CisKKwlwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KCZidWYsIGVudHJ5LT50YXJn ZXQpOworCisJaWYgKGVudHJ5LT50YXJnZXQtPml0YXJnZXQgIT0gTlVMTCkKKwl7CisJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKCZidWYsICcgJyk7CisJCXBncGFfZm9ybWF0X2luZGV4X3RhcmdldCgm YnVmLCBlbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0KTsKKwl9CisKKwlpZiAoZW50cnktPnRhZyAhPSBQ R1BBX1RBR19KT0lOX09SREVSKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnKScpOwor CisJcmV0dXJuIGJ1Zi5kYXRhOworfQorCisvKgorICogU2V0IFBHUEFfVEVfKiBmbGFncyBvbiBh IHNldCBvZiB0cm92ZSBlbnRyaWVzLgorICovCit2b2lkCitwZ3BhX3Ryb3ZlX3NldF9mbGFncyhw Z3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzLCBCaXRtYXBzZXQgKmluZGV4ZXMsIGludCBmbGFncykK K3sKKwlpbnQJCQlpID0gLTE7CisKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIoaW5kZXhl cywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZlbnRyaWVzW2ld OworCisJCWVudHJ5LT5mbGFncyB8PSBmbGFnczsKKwl9Cit9CisKKy8qCisgKiBBcHBlbmQgYSBz dHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNwZWNpZmllZCBQR1BBX1RFXyogZmxhZ3MgdG8g dGhlCisgKiBnaXZlbiBTdHJpbmdJbmZvLgorICovCit2b2lkCitwZ3BhX3Ryb3ZlX2FwcGVuZF9m bGFncyhTdHJpbmdJbmZvIGJ1ZiwgaW50IGZsYWdzKQoreworCWlmICgoZmxhZ3MgJiBQR1BBX1RF X01BVENIX0ZVTEwpICE9IDApCisJeworCQlBc3NlcnQoKGZsYWdzICYgUEdQQV9URV9NQVRDSF9Q QVJUSUFMKSAhPSAwKTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJtYXRjaGVkIik7CisJfQor CWVsc2UgaWYgKChmbGFncyAmIFBHUEFfVEVfTUFUQ0hfUEFSVElBTCkgIT0gMCkKKwkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICJwYXJ0aWFsbHkgbWF0Y2hlZCIpOworCWVsc2UKKwkJYXBwZW5kU3Ry aW5nSW5mbyhidWYsICJub3QgbWF0Y2hlZCIpOworCWlmICgoZmxhZ3MgJiBQR1BBX1RFX0lOQVBQ TElDQUJMRSkgIT0gMCkKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIsIGluYXBwbGljYWJsZSIp OworCWlmICgoZmxhZ3MgJiBQR1BBX1RFX0NPTkZMSUNUSU5HKSAhPSAwKQorCQlhcHBlbmRTdHJp bmdJbmZvKGJ1ZiwgIiwgY29uZmxpY3RpbmciKTsKKwlpZiAoKGZsYWdzICYgUEdQQV9URV9GQUlM RUQpICE9IDApCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiLCBmYWlsZWQiKTsKK30KKworLyoK KyAqIEFkZCBhIG5ldyBhZHZpY2UgdGFyZ2V0IHRvIGFuIGV4aXN0aW5nIHBncGFfdHJvdmVfc2xp Y2Ugb2JqZWN0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV90cm92ZV9hZGRfdG9fc2xpY2UocGdw YV90cm92ZV9zbGljZSAqdHNsaWNlLAorCQkJCQkJcGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnLAor CQkJCQkJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJcGdwYV90cm92ZV9lbnRyeSAq ZW50cnk7CisKKwlpZiAodHNsaWNlLT5udXNlZCA+PSB0c2xpY2UtPm5hbGxvY2F0ZWQpCisJewor CQlpbnQJCQluZXdfYWxsb2NhdGVkOworCisJCW5ld19hbGxvY2F0ZWQgPSB0c2xpY2UtPm5hbGxv Y2F0ZWQgKiAyOworCQl0c2xpY2UtPmVudHJpZXMgPSByZXBhbGxvY19hcnJheSh0c2xpY2UtPmVu dHJpZXMsIHBncGFfdHJvdmVfZW50cnksCisJCQkJCQkJCQkJIG5ld19hbGxvY2F0ZWQpOworCQl0 c2xpY2UtPm5hbGxvY2F0ZWQgPSBuZXdfYWxsb2NhdGVkOworCX0KKworCWVudHJ5ID0gJnRzbGlj ZS0+ZW50cmllc1t0c2xpY2UtPm51c2VkXTsKKwllbnRyeS0+dGFnID0gdGFnOworCWVudHJ5LT50 YXJnZXQgPSB0YXJnZXQ7CisJZW50cnktPmZsYWdzID0gMDsKKworCXBncGFfdHJvdmVfYWRkX3Rv X2hhc2godHNsaWNlLT5oYXNoLCB0YXJnZXQsIHRzbGljZS0+bnVzZWQpOworCisJdHNsaWNlLT5u dXNlZCsrOworfQorCisvKgorICogVXBkYXRlIHRoZSBoYXNoIHRhYmxlIGZvciBhIG5ld2x5LWFk ZGVkIGFkdmljZSB0YXJnZXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3Ryb3ZlX2FkZF90b19o YXNoKHBncGFfdHJvdmVfZW50cnlfaGFzaCAqaGFzaCwgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJn ZXQsCisJCQkJCSAgIGludCBpbmRleCkKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXk7CisJ cGdwYV90cm92ZV9lbnRyeV9lbGVtZW50ICplbGVtZW50OworCWJvb2wJCWZvdW5kOworCisJLyog Rm9yIG5vbi1pZGVudGlmaWVycywgYWRkIGVudHJpZXMgZm9yIGFsbCBkZXNjZW5kZW50cy4gKi8K KwlpZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJZm9y ZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRy ZW4pCisJCXsKKwkJCXBncGFfdHJvdmVfYWRkX3RvX2hhc2goaGFzaCwgY2hpbGRfdGFyZ2V0LCBp bmRleCk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8qIFNhbml0eSBjaGVja3MuICovCisJQXNz ZXJ0KHRhcmdldC0+cmlkLm9jY3VycmVuY2UgPiAwKTsKKwlBc3NlcnQodGFyZ2V0LT5yaWQuYWxp YXNfbmFtZSAhPSBOVUxMKTsKKworCS8qIEFkZCBhbiBlbnRyeSBmb3IgdGhpcyByZWxhdGlvbiBp ZGVudGlmaWVyLiAqLworCWtleS5hbGlhc19uYW1lID0gdGFyZ2V0LT5yaWQuYWxpYXNfbmFtZTsK KwlrZXkucGFydGl0aW9uX25hbWUgPSB0YXJnZXQtPnJpZC5wYXJ0cmVsOworCWtleS5wbGFuX25h bWUgPSB0YXJnZXQtPnJpZC5wbGFuX25hbWU7CisJZWxlbWVudCA9IHBncGFfdHJvdmVfZW50cnlf aW5zZXJ0KGhhc2gsIGtleSwgJmZvdW5kKTsKKwlpZiAoIWZvdW5kKQorCQllbGVtZW50LT5pbmRl eGVzID0gTlVMTDsKKwllbGVtZW50LT5pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoZWxlbWVudC0+ aW5kZXhlcywgaW5kZXgpOworfQorCisvKgorICogQ3JlYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3 IHBncGFfdHJvdmVfc2xpY2Ugb2JqZWN0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9pbml0X3Ry b3ZlX3NsaWNlKHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSkKK3sKKwkvKgorCSAqIEluIGFuIGlk ZWFsIHdvcmxkLCB3ZSdsbCBtYWtlIHRzbGljZS0+bmFsbG9jYXRlZCBiaWcgZW5vdWdoIHRoYXQg dGhlCisJICogYXJyYXkgYW5kIGhhc2ggdGFibGUgd2lsbCBiZSBsYXJnZSBlbm91Z2ggdG8gY29u dGFpbiB0aGUgbnVtYmVyIG9mCisJICogYWR2aWNlIGl0ZW1zIGluIHRoaXMgdHJvdmUgc2xpY2Us IGJ1dCBhIGdlbmVyb3VzIGRlZmF1bHQgdmFsdWUgaXMgbm90CisJICogZ29vZCBmb3IgcGVyZm9y bWFuY2UsIGJlY2F1c2UgcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKCkgaGFzIHRvIHplcm8gYW4KKwkg KiBhbW91bnQgb2YgbWVtb3J5IHByb3BvcnRpb25hbCB0byB0c2xpY2UtPm5hbGxvY2F0ZWQuIEhl bmNlLCB3ZSBrZWVwIHRoZQorCSAqIHN0YXJ0aW5nIHZhbHVlIHF1aXRlIHNtYWxsLCBvbiB0aGUg dGhlb3J5IHRoYXQgYWR2aWNlIHN0cmluZ3Mgd2lsbAorCSAqIG9mdGVuIGJlIHJlbGF0aXZlbHkg c2hvcnQuCisJICovCisJdHNsaWNlLT5uYWxsb2NhdGVkID0gMTY7CisJdHNsaWNlLT5udXNlZCA9 IDA7CisJdHNsaWNlLT5lbnRyaWVzID0gcGFsbG9jX2FycmF5KHBncGFfdHJvdmVfZW50cnksIHRz bGljZS0+bmFsbG9jYXRlZCk7CisJdHNsaWNlLT5oYXNoID0gcGdwYV90cm92ZV9lbnRyeV9jcmVh dGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJICAgdHNsaWNlLT5uYWxsb2NhdGVk LCBOVUxMKTsKK30KKworLyoKKyAqIEZhc3QgaGFzaCBmdW5jdGlvbiBmb3IgYSBrZXkgY29uc2lz dGluZyBvZiBhbGlhc19uYW1lLCBwYXJ0aXRpb25fbmFtZSwKKyAqIGFuZCBwbGFuX25hbWUuCisg Ki8KK3N0YXRpYyB1aW50MzIKK3BncGFfdHJvdmVfZW50cnlfaGFzaF9rZXkocGdwYV90cm92ZV9l bnRyeV9rZXkga2V5KQoreworCWZhc3RoYXNoX3N0YXRlIGhzOworCWludAkJCXNwX2xlbjsKKwor CWZhc3RoYXNoX2luaXQoJmhzLCAwKTsKKworCS8qIGFsaWFzX25hbWUgbWF5IG5vdCBiZSBOVUxM ICovCisJc3BfbGVuID0gZmFzdGhhc2hfYWNjdW1fY3N0cmluZygmaHMsIGtleS5hbGlhc19uYW1l KTsKKworCS8qIHBhcnRpdGlvbl9uYW1lIGFuZCBwbGFuX25hbWUsIGhvd2V2ZXIsIGNhbiBiZSBO VUxMICovCisJaWYgKGtleS5wYXJ0aXRpb25fbmFtZSAhPSBOVUxMKQorCQlzcF9sZW4gKz0gZmFz dGhhc2hfYWNjdW1fY3N0cmluZygmaHMsIGtleS5wYXJ0aXRpb25fbmFtZSk7CisJaWYgKGtleS5w bGFuX25hbWUgIT0gTlVMTCkKKwkJc3BfbGVuICs9IGZhc3RoYXNoX2FjY3VtX2NzdHJpbmcoJmhz LCBrZXkucGxhbl9uYW1lKTsKKworCS8qCisJICogaGFzaGZuX3Vuc3RhYmxlLmggcmVjb21tZW5k cyB1c2luZyBzdHJpbmcgbGVuZ3RoIGFzIHR3ZWFrLiBJdCdzIG5vdAorCSAqIGNsZWFyIHRvIG1l IHdoYXQgdG8gZG8gaWYgdGhlcmUgYXJlIG11bHRpcGxlIHN0cmluZ3MsIHNvIGZvciBub3cgSSdt CisJICoganVzdCB1c2luZyB0aGUgdG90YWwgb2YgYWxsIG9mIHRoZSBsZW5ndGhzLgorCSAqLwor CXJldHVybiBmYXN0aGFzaF9maW5hbDMyKCZocywgc3BfbGVuKTsKK30KKworLyoKKyAqIExvb2sg Zm9yIG1hdGNoaW5nIGVudHJpZXMuCisgKi8KK3N0YXRpYyBCaXRtYXBzZXQgKgorcGdwYV90cm92 ZV9zbGljZV9sb29rdXAocGdwYV90cm92ZV9zbGljZSAqdHNsaWNlLCBwZ3BhX2lkZW50aWZpZXIg KnJpZCkKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXk7CisJcGdwYV90cm92ZV9lbnRyeV9l bGVtZW50ICplbGVtZW50OworCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7CisKKwlBc3NlcnQo cmlkLT5vY2N1cnJlbmNlID49IDEpOworCisJa2V5LmFsaWFzX25hbWUgPSByaWQtPmFsaWFzX25h bWU7CisJa2V5LnBhcnRpdGlvbl9uYW1lID0gcmlkLT5wYXJ0cmVsOworCWtleS5wbGFuX25hbWUg PSByaWQtPnBsYW5fbmFtZTsKKworCWVsZW1lbnQgPSBwZ3BhX3Ryb3ZlX2VudHJ5X2xvb2t1cCh0 c2xpY2UtPmhhc2gsIGtleSk7CisKKwlpZiAoZWxlbWVudCAhPSBOVUxMKQorCXsKKwkJaW50CQkJ aSA9IC0xOworCisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihlbGVtZW50LT5pbmRleGVz LCBpKSkgPj0gMCkKKwkJeworCQkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmdHNsaWNlLT5l bnRyaWVzW2ldOworCisJCQkvKgorCQkJICogV2Uga25vdyB0aGF0IHRoaXMgdGFyZ2V0IG9yIG9u ZSBvZiBpdHMgZGVzY2VuZGVudHMgbWF0Y2hlcyB0aGUKKwkJCSAqIGlkZW50aWZpZXIgb24gdGhl IHRocmVlIGtleSBmaWVsZHMgYWJvdmUsIGJ1dCB3ZSBkb24ndCBrbm93CisJCQkgKiB3aGljaCBk ZXNjZW5kZW50IG9yIHdoZXRoZXIgdGhlIG9jY3VyZW5jZSBhbmQgc2NoZW1hIGFsc28KKwkJCSAq IG1hdGNoLgorCQkJICovCisJCQlpZiAocGdwYV9pZGVudGlmaWVyX21hdGNoZXNfdGFyZ2V0KHJp ZCwgZW50cnktPnRhcmdldCkpCisJCQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1iZXIocmVzdWx0LCBp KTsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90 cm92ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMWI3NWFmNzI0 YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5o CkBAIC0wLDAgKzEsMTE0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3Ryb3Zl LmgKKyAqCSAgQWxsIG9mIHRoZSBhZHZpY2UgZ2l2ZW4gZm9yIGEgcGFydGljdWxhciBxdWVyeSwg YXBwcm9wcmlhdGVseQorICogICAgb3JnYW5pemVkIGZvciBjb252ZW5pZW50IGFjY2Vzcy4KKyAq CisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5oCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9UUk9WRV9ICisjZGVmaW5l IFBHUEFfVFJPVkVfSAorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKworI2luY2x1ZGUgIm5vZGVz L2JpdG1hcHNldC5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Ryb3ZlIHBncGFfdHJvdmU7CisK Ky8qCisgKiBGbGFncyB0aGF0IGNhbiBiZSBzZXQgb24gYSBwZ3BhX3Ryb3ZlX2VudHJ5IHRvIGlu ZGljYXRlIHdoYXQgaGFwcGVuZWQgd2hlbgorICogdHJ5aW5nIHRvIHBsYW4gdXNpbmcgYWR2aWNl LgorICoKKyAqIFBHUEFfVEVfTUFUQ0hfUEFSVElBTCBtZWFucyB0aGF0IHdlIGZvdW5kIHNvbWUg cGFydCBvZiB0aGUgcXVlcnkgdGhhdCBhdAorICogbGVhc3QgcGFydGlhbGx5IG1hdGNoZWQgdGhl IHRhcmdldDsgZS5nLiBnaXZlbiBKT0lOX09SREVSKGEgYiksIHRoaXMgd291bGQKKyAqIGJlIHNl dCBpZiB3ZSBldmVyIHNhdyBhbnkgam9pbnJlbCBpbmNsdWRpbmcgZWl0aGVyICJhIiBvciAiYiIu CisgKgorICogUEdQQV9URV9NQVRDSF9GVUxMIG1lYW5zIHRoYXQgd2UgZm91bmQgYW4gZXhhY3Qg bWF0Y2ggZm9yIHRoZSB0YXJnZXQ7IGUuZy4KKyAqIGdpdmVuIEpPSU5fT1JERVIoYSBiKSwgdGhp cyB3b3VsZCBiZSBzZXQgaWYgd2Ugc2F3IGEgam9pbnJlbCBjb250YWluaW5nCisgKiBleGFjdGx5 ICJhIiBhbmQgImIiIGFuZCBub3RoaW5nIGVsc2UuCisgKgorICogUEdQQV9URV9JTkFQUExJQ0FC TEUgbWVhbnMgdGhhdCB0aGUgYWR2aWNlIGRvZXNuJ3QgcHJvcGVybHkgYXBwbHkgdG8gdGhlCisg KiB0YXJnZXQ7IGUuZy4gSU5ERVhfU0NBTihmb28gYmFyX2lkeCkgd291bGQgYmUgc28gbWFya2Vk IGlmIGJhcl9pZHggZG9lcyBub3QKKyAqIGV4aXN0IG9uIGZvby4gVGhlIGZhY3QgdGhhdCB0aGlz IGJpdCBoYXMgYmVlbiBzZXQgZG9lcyBub3QgbWVhbiB0aGF0IHRoZQorICogYWR2aWNlIGhhZCBu byBlZmZlY3QuCisgKgorICogUEdQQV9URV9DT05GTElDVElORyBtZWFucyB0aGF0IGEgY29uZmxp Y3Qgd2FzIGRldGVjdGVkIGJldHdlZW4gd2hhdCB0aGlzCisgKiBhZHZpY2Ugd2FudHMgYW5kIHdo YXQgc29tZSBvdGhlciBwbGFuIGFkdmljZSB3YW50czsgZS5nLiBKT0lOX09SREVSKGEgYikKKyAq IHdvdWxkIGNvbmZsaWN0IHdpdGggSEFTSF9KT0lOKGEpLCBiZWNhdXNlIHRoZSBmb3JtZXIgcmVx dWlyZXMgImEiIHRvIGJlIHRoZQorICogb3V0ZXIgdGFibGUgd2hpbGUgdGhlIGxhdHRlciByZXF1 aXJlcyBpdCB0byBiZSB0aGUgaW5uZXIgdGFibGUuCisgKgorICogUEdQQV9URV9GQUlMRUQgbWVh bnMgdGhhdCB0aGUgcmVzdWx0aW5nIHBsYW4gZGlkIG5vdCBjb25mb3JtIHRvIHRoZSBhZHZpY2Uu CisgKi8KKyNkZWZpbmUgUEdQQV9URV9NQVRDSF9QQVJUSUFMCQkweDAwMDEKKyNkZWZpbmUgUEdQ QV9URV9NQVRDSF9GVUxMCQkJMHgwMDAyCisjZGVmaW5lIFBHUEFfVEVfSU5BUFBMSUNBQkxFCQkw eDAwMDQKKyNkZWZpbmUgUEdQQV9URV9DT05GTElDVElORwkJCTB4MDAwOAorI2RlZmluZSBQR1BB X1RFX0ZBSUxFRAkJCQkweDAwMTAKKworLyoKKyAqIEVhY2ggZW50cnkgaW4gYSB0cm92ZSBvZiBh ZHZpY2UgcmVwcmVzZW50cyB0aGUgYXBwbGljYXRpb24gb2YgYSB0YWcgdG8KKyAqIGEgc2luZ2xl IHRhcmdldC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV90cm92ZV9lbnRyeQoreworCXBncGFf YWR2aWNlX3RhZ190eXBlIHRhZzsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldDsKKwlpbnQJ CQlmbGFnczsKK30gcGdwYV90cm92ZV9lbnRyeTsKKworLyoKKyAqIFdoYXQga2luZCBvZiBpbmZv cm1hdGlvbiBkb2VzIHRoZSBjYWxsZXIgd2FudCB0byBmaW5kIGluIGEgdHJvdmU/CisgKgorICog UEdQQV9UUk9WRV9MT09LVVBfU0NBTiBtZWFucyB3ZSdyZSBsb29raW5nIGZvciBzY2FuIGFkdmlj ZS4KKyAqCisgKiBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOIG1lYW5zIHdlJ3JlIGxvb2tpbmcgZm9y IGpvaW4tcmVsYXRlZCBhZHZpY2UuCisgKiBUaGlzIGluY2x1ZGVzIGpvaW4gb3JkZXIgYWR2aWNl LCBqb2luIG1ldGhvZCBhZHZpY2UsIGFuZCBzZW1pam9pbi11bmlxdWVuZXNzCisgKiBhZHZpY2Uu CisgKgorICogUEdQQV9UUk9WRV9MT09LVVBfUkVMIG1lYW5zIHdlJ3JlIGxvb2tpbmcgZm9yIGdl bmVyYWwgYWR2aWNlIGFib3V0IHRoaXMKKyAqIGEgUmVsT3B0SW5mbyB0aGF0IG1heSBjb3JyZXNw b25kIHRvIGVpdGhlciBhIHNjYW4gb3IgYSBqb2luLiBUaGlzIGluY2x1ZGVzCisgKiBnYXRoZXIt cmVsYXRlZCBhZHZpY2UgYW5kIHBhcnRpdGlvbndpc2UgYWR2aWNlLiBOb3RlIHRoYXQgcGFydGl0 aW9ud2lzZQorICogYWR2aWNlIG1pZ2h0IHNlZW0gbGlrZSBqb2luIGFkdmljZSwgYnV0IHRoYXQn cyBub3QgYSBoZWxwZnVsIHdheSBvZiB2aWV3aW5nCisgKiB0aGUgbWF0dGVyIGJlY2F1c2UgKDEp IHBhcnRpdGlvbndpc2UgYWR2aWNlIGlzIGFsc28gcmVsZXZhbnQgYXQgdGhlIHNjYW4KKyAqIGxl dmVsIGFuZCAoMikgb3RoZXIgdHlwZXMgb2Ygam9pbiBhZHZpY2UgYWZmZWN0IG9ubHkgd2hhdCB0 byBkbyBmcm9tCisgKiBqb2luX3BhdGhfc2V0dXBfaG9vaywgYnV0IHBhcnRpdGlvbndpc2UgYWR2 aWNlIGFmZmVjdHMgd2hhdCB0byBkbyBpbgorICogam9pbnJlbF9zZXR1cF9ob29rLgorICovCit0 eXBlZGVmIGVudW0gcGdwYV90cm92ZV9sb29rdXBfdHlwZQoreworCVBHUEFfVFJPVkVfTE9PS1VQ X0pPSU4sCisJUEdQQV9UUk9WRV9MT09LVVBfUkVMLAorCVBHUEFfVFJPVkVfTE9PS1VQX1NDQU4K K30gcGdwYV90cm92ZV9sb29rdXBfdHlwZTsKKworLyoKKyAqIFRoaXMgc3RydWN0IGlzIHVzZWQg dG8gc3RvcmUgdGhlIHJlc3VsdCBvZiBhIHRyb3ZlIGxvb2t1cC4gRm9yIGVhY2ggbWVtYmVyCisg KiBvZiAiaW5kZXhlcyIsIHRoZSBlbnRyeSBhdCB0aGUgY29ycmVzcG9uZGluZyBvZmZzZXQgd2l0 aGluICJlbnRyaWVzIiBpcyBvbmUKKyAqIG9mIHRoZSByZXN1bHRzLgorICovCit0eXBlZGVmIHN0 cnVjdCBwZ3BhX3Ryb3ZlX3Jlc3VsdAoreworCXBncGFfdHJvdmVfZW50cnkgKmVudHJpZXM7CisJ Qml0bWFwc2V0ICAqaW5kZXhlczsKK30gcGdwYV90cm92ZV9yZXN1bHQ7CisKK2V4dGVybiBwZ3Bh X3Ryb3ZlICpwZ3BhX2J1aWxkX3Ryb3ZlKExpc3QgKmFkdmljZV9pdGVtcyk7CitleHRlcm4gdm9p ZCBwZ3BhX3Ryb3ZlX2xvb2t1cChwZ3BhX3Ryb3ZlICp0cm92ZSwKKwkJCQkJCQkgIHBncGFfdHJv dmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkgIGludCBucmlkcywKKwkJCQkJCQkgIHBncGFf aWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfdHJvdmVfcmVzdWx0ICpyZXN1bHQpOwor ZXh0ZXJuIHZvaWQgcGdwYV90cm92ZV9sb29rdXBfYWxsKHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJ CQkJCQkgIHBncGFfdHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkJICBwZ3BhX3Ryb3Zl X2VudHJ5ICoqZW50cmllcywKKwkJCQkJCQkJICBpbnQgKm5lbnRyaWVzKTsKK2V4dGVybiBjaGFy ICpwZ3BhX2NzdHJpbmdfdHJvdmVfZW50cnkocGdwYV90cm92ZV9lbnRyeSAqZW50cnkpOworZXh0 ZXJuIHZvaWQgcGdwYV90cm92ZV9zZXRfZmxhZ3MocGdwYV90cm92ZV9lbnRyeSAqZW50cmllcywK KwkJCQkJCQkJIEJpdG1hcHNldCAqaW5kZXhlcywgaW50IGZsYWdzKTsKK2V4dGVybiB2b2lkIHBn cGFfdHJvdmVfYXBwZW5kX2ZsYWdzKFN0cmluZ0luZm8gYnVmLCBpbnQgZmxhZ3MpOworCisjZW5k aWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uODZhNmM5MjFmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKQEAgLTAsMCArMSwxMDI5IEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3dhbGtlci5jCisgKgkgIE1haW4gZW50cnlwb2ludHMg Zm9yIGFuYWx5emluZyBhIHBsYW4gdG8gZ2VuZXJhdGUgYW4gYWR2aWNlIHN0cmluZworICoKKyAq IENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jCisgKgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVk ZSAicGdwYV9qb2luLmgiCisjaW5jbHVkZSAicGdwYV9zY2FuLmgiCisjaW5jbHVkZSAicGdwYV93 YWxrZXIuaCIKKworI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorI2luY2x1ZGUgInBhcnNl ci9wYXJzZXRyZWUuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKworc3RhdGljIHZv aWQgcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2Vy LCBQbGFuICpwbGFuLAorCQkJCQkJCQkgIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxlbSwKKwkJCQkJ CQkJICBwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIsCisJCQkJCQkJCSAgTGlzdCAq YWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJCQkgIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVy KTsKK3N0YXRpYyBCaXRtYXBzZXQgKnBncGFfcHJvY2Vzc191bnJvbGxlZF9qb2luKHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCQkgcGdwYV91bnJvbGxlZF9qb2lu ICp1am9pbik7CisKK3N0YXRpYyBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgKnBncGFfYWRkX2ZlYXR1cmUo cGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJCXBncGFfcWZfdHlw ZSB0eXBlLAorCQkJCQkJCQkJCQlQbGFuICpwbGFuKTsKKworc3RhdGljIHZvaWQgcGdwYV9xZl9h ZGRfcnRpKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgSW5kZXggcnRpKTsKK3N0YXRpYyB2 b2lkIHBncGFfcWZfYWRkX3J0aXMoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBCaXRtYXBz ZXQgKnJlbGlkcyk7CitzdGF0aWMgdm9pZCBwZ3BhX3FmX2FkZF9wbGFuX3J0aXMoTGlzdCAqYWN0 aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBQbGFuICpwbGFuLAorCQkJCQkJCQkgIExpc3QgKnJ0YWJsZSk7 CisKK3N0YXRpYyBib29sIHBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlcyhwZ3BhX3Vucm9s bGVkX2pvaW4gKnVqb2luLAorCQkJCQkJCQkJCSAgIEluZGV4IHJ0YWJsZV9sZW5ndGgsCisJCQkJ CQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkgICBw Z3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJCQkJCQkgICBib29sIHRvcGxldmVsKTsK K3N0YXRpYyBib29sIHBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlc19tZW1iZXIocGdwYV9q b2luX21lbWJlciAqbWVtYmVyLAorCQkJCQkJCQkJCQkJICBJbmRleCBydGFibGVfbGVuZ3RoLAor CQkJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJ CQkJICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitzdGF0aWMgcGdwYV9zY2FuICpwZ3Bh X3dhbGtlcl9maW5kX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJ CQkJCQkJcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJCUJpdG1hcHNldCAq cmVsaWRzKTsKK3N0YXRpYyBib29sIHBncGFfd2Fsa2VyX2luZGV4X3RhcmdldF9tYXRjaGVzX3Bs YW4ocGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQsCisJCQkJCQkJCQkJCQkgIFBsYW4gKnBsYW4p Oworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZShwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJ CQkJCQkJIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyBib29sIHBncGFfd2Fsa2VyX2NvbnRh aW5zX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkgIHBn cGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMp Oworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVyKHBncGFfcGxhbl93 YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqcmVsaWRzKTsK KworLyoKKyAqIFRvcC1sZXZlbCBlbnRyeXBvaW50IGZvciB0aGUgcGxhbiB0cmVlIHdhbGsuCisg KgorICogUG9wdWxhdGVzIHdhbGtlciBiYXNlZCBvbiBhIHRyYXZlcnNhbCBvZiB0aGUgUGxhbiB0 cmVlcyBpbiBwc3RtdC4KKyAqCisgKiBzal91bmlxdWVfcmVscyBpcyBhIGxpc3Qgb2YgcGdwYV9z al91bmlxdWVfcmVsIG9iamVjdHMsIG9uZSBmb3IgZWFjaAorICogcmVsYXRpb24gd2UgY29uc2lk ZXJlZCBtYWtpbmcgdW5pcXVlIGFzIHBhcnQgb2Ygc2VtaWpvaW4gcGxhbm5pbmcuCisgKi8KK3Zv aWQKK3BncGFfcGxhbl93YWxrZXIocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBs YW5uZWRTdG10ICpwc3RtdCwKKwkJCQkgTGlzdCAqc2pfdW5pcXVlX3JlbHMpCit7CisJTGlzdENl bGwgICAqbGM7CisJTGlzdAkgICAqc2pfdW5pcXVlX3J0aXMgPSBOVUxMOworCUxpc3QJICAgKnNq X25vbnVuaXF1ZV9xZnMgPSBOVUxMOworCisJLyogSW5pdGlhbGl6YXRpb24uICovCisJbWVtc2V0 KHdhbGtlciwgMCwgc2l6ZW9mKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCkpOworCXdhbGtlci0+ cHN0bXQgPSBwc3RtdDsKKworCS8qIFdhbGsgdGhlIG1haW4gcGxhbiB0cmVlLiAqLworCXBncGFf d2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHBzdG10LT5wbGFuVHJlZSwgMCwgTlVMTCwgTklMLCBm YWxzZSk7CisKKwkvKiBNYWluIHBsYW4gdHJlZSB3YWxrIHdvbid0IHJlYWNoIHN1YnBsYW5zLCBz byB3YWxrIHRob3NlLiAqLworCWZvcmVhY2gobGMsIHBzdG10LT5zdWJwbGFucykKKwl7CisJCVBs YW4JICAgKnBsYW4gPSBsZmlyc3QobGMpOworCisJCWlmIChwbGFuICE9IE5VTEwpCisJCQlwZ3Bh X3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBwbGFuLCAwLCBOVUxMLCBOSUwsIGZhbHNlKTsKKwl9 CisKKwkvKiBBZGp1c3QgUlRJcyBmcm9tIHNqX3VuaXF1ZV9yZWxzIGZvciB0aGUgZmxhdHRlbmVk IHJhbmdlIHRhYmxlLiAqLworCWZvcmVhY2hfcHRyKHBncGFfc2pfdW5pcXVlX3JlbCwgdXIsIHNq X3VuaXF1ZV9yZWxzKQorCXsKKwkJaW50CQkJcnRpbmRleCA9IC0xOworCQlpbnQJCQlydG9mZnNl dCA9IDA7CisJCWJvb2wJCWR1bW15ID0gZmFsc2U7CisJCUJpdG1hcHNldCAgKnJlbGlkcyA9IE5V TEw7CisKKwkJLyogSWYgdGhpcyBpcyBhIHN1YnBsYW4sIGZpbmQgdGhlIHJhbmdlIHRhYmxlIG9m ZnNldC4gKi8KKwkJaWYgKHVyLT5wbGFuX25hbWUgIT0gTlVMTCkKKwkJeworCQkJZm9yZWFjaF9u b2RlKFN1YlBsYW5SVEluZm8sIHJ0aW5mbywgcHN0bXQtPnN1YnJ0aW5mb3MpCisJCQl7CisJCQkJ aWYgKHN0cmNtcCh1ci0+cGxhbl9uYW1lLCBydGluZm8tPnBsYW5fbmFtZSkgPT0gMCkKKwkJCQl7 CisJCQkJCXJ0b2Zmc2V0ID0gcnRpbmZvLT5ydG9mZnNldDsKKwkJCQkJZHVtbXkgPSBydGluZm8t PmR1bW15OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChydG9mZnNldCA9PSAw KQorCQkJCWVsb2coRVJST1IsICJubyBydG9mZnNldCBmb3IgcGxhbiAlcyIsIHVyLT5wbGFuX25h bWUpOworCQl9CisKKwkJLyogSWYgdGhpcyBlbnRyeSBwZXJ0YWlucyB0byBhIGR1bW15IHN1YnF1 ZXJ5LCBpZ25vcmUgaXQuICovCisJCWlmIChkdW1teSkKKwkJCWNvbnRpbnVlOworCisJCS8qIE9m ZnNldCBlYWNoIGVudHJ5IGZyb20gdGhlIG9yaWdpbmFsIHNldC4gKi8KKwkJd2hpbGUgKChydGlu ZGV4ID0gYm1zX25leHRfbWVtYmVyKHVyLT5yZWxpZHMsIHJ0aW5kZXgpKSA+PSAwKQorCQkJcmVs aWRzID0gYm1zX2FkZF9tZW1iZXIocmVsaWRzLCBydGluZGV4ICsgcnRvZmZzZXQpOworCisJCS8q IFN0b3JlIHRoZSByZXN1bHRpbmcgc2V0LiAqLworCQlzal91bmlxdWVfcnRpcyA9IGxhcHBlbmQo c2pfdW5pcXVlX3J0aXMsIHJlbGlkcyk7CisJfQorCisJLyoKKwkgKiBSZW1vdmUgYW55IG5vbi11 bmlxdWUgc2Vtam9pbiBxdWVyeSBmZWF0dXJlcyBmb3Igd2hpY2ggbWFraW5nIHRoZSByZWwKKwkg KiB1bmlxdWUgd2Fzbid0IGNvbnNpZGVyZWQuCisJICovCisJZm9yZWFjaF9wdHIocGdwYV9xdWVy eV9mZWF0dXJlLCBxZiwKKwkJCQl3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW1BHUEFRRl9TRU1JSk9J Tl9OT05fVU5JUVVFXSkKKwl7CisJCWlmIChsaXN0X21lbWJlcihzal91bmlxdWVfcnRpcywgcWYt PnJlbGlkcykpCisJCQlzal9ub251bmlxdWVfcWZzID0gbGFwcGVuZChzal9ub251bmlxdWVfcWZz LCBxZik7CisJfQorCXdhbGtlci0+cXVlcnlfZmVhdHVyZXNbUEdQQVFGX1NFTUlKT0lOX05PTl9V TklRVUVdID0gc2pfbm9udW5pcXVlX3FmczsKKworCS8qCisJICogSWYgd2UgZmluZCBhbnkgY2Fz ZXMgd2hlcmUgYW5hbHlzaXMgb2YgdGhlIFBsYW4gdHJlZSBzaG93cyB0aGF0IHRoZQorCSAqIHNl bWlqb2luIHdhcyBtYWRlIHVuaXF1ZSBidXQgdGhpcyBwb3NzaWJpbGl0eSB3YXMgbmV2ZXIgb2Jz ZXJ2ZWQgdG8gYmUKKwkgKiBjb25zaWRlcmVkIGR1cmluZyBwbGFubmluZywgdGhlbiB3ZSBoYXZl IGEgYnVnIHNvbWV3aGVyZS4KKwkgKi8KKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUs IHFmLAorCQkJCXdhbGtlci0+cXVlcnlfZmVhdHVyZXNbUEdQQVFGX1NFTUlKT0lOX1VOSVFVRV0p CisJeworCQlpZiAoIWxpc3RfbWVtYmVyKHNqX3VuaXF1ZV9ydGlzLCBxZi0+cmVsaWRzKSkKKwkJ eworCQkJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJCQlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwkJ CW91dEJpdG1hcHNldCgmYnVmLCBxZi0+cmVsaWRzKTsKKwkJCWVsb2coRVJST1IsCisJCQkJICJ1 bmlxdWUgc2VtaWpvaW4gZm91bmQgZm9yIHJlbGlkcyAlcyBidXQgbm90IG9ic2VydmVkIGR1cmlu ZyBwbGFubmluZyIsCisJCQkJIGJ1Zi5kYXRhKTsKKwkJfQorCX0KKworCS8qCisJICogSXQncyBw b3NzaWJsZSBmb3IgYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIHF1ZXJ5IGZlYXR1cmUgdG8gZmlu ZCBubworCSAqIFJUSXMgd2hlbiBwYXJ0aXRpb253aXNlIGFnZ3JlZ2F0aW9uIGlzIGluIHVzZS4g V2Ugc2hvdWxkbid0IGVtaXQKKwkgKiBzb21ldGhpbmcgbGlrZSBHQVRIRVJfTUVSR0UoKCkpLCBz byBpbnN0ZWFkIGVtaXQgbm90aGluZy4gVGhpcyBtZWFucworCSAqIHRoYXQgd2Ugd29uJ3QgYWR2 aXNlIGVpdGhlciBHQVRIRVIgb3IgR0FUSEVSX01FUkdFIG9yIE5PX0dBVEhFUiBpbiBzdWNoCisJ ICogY2FzZXMsIHdoaWNoIG1pZ2h0IGJlIHNvbWV0aGluZyB3ZSB3YW50IHRvIGltcHJvdmUgaW4g dGhlIGZ1dHVyZS4KKwkgKgorCSAqIChTaG91bGQgdGhlIFBhcnRpYWwgQWdncmVnYXRlcyBpbiBz dWNoIGEgY2FzZSBiZSBjcmVhdGVkIGluIGFuCisJICogVVBQRVJSRUxfR1JPVVBfQUdHIHdpdGgg YSBub24tZW1wdHkgcmVsaWQgc2V0PyBSaWdodCBub3cgdGhhdCBkb2Vzbid0CisJICogaGFwcGVu LCBidXQgaXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBtYWtlIGxpZmUgZWFzaWVyIGZvciB1cyBpZiBp dCBkaWQuKQorCSAqLworCWZvciAoaW50IHQgPSAwOyB0IDwgTlVNX1BHUEFfUUZfVFlQRVM7ICsr dCkKKwl7CisJCUxpc3QJICAgKnF1ZXJ5X2ZlYXR1cmVzID0gTklMOworCisJCWZvcmVhY2hfcHRy KHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIHdhbGtlci0+cXVlcnlfZmVhdHVyZXNbdF0pCisJCXsK KwkJCWlmIChxZi0+cmVsaWRzICE9IE5VTEwpCisJCQkJcXVlcnlfZmVhdHVyZXMgPSBsYXBwZW5k KHF1ZXJ5X2ZlYXR1cmVzLCBxZik7CisJCQllbHNlCisJCQkJQXNzZXJ0KHQgPT0gUEdQQVFGX0dB VEhFUiB8fCB0ID09IFBHUEFRRl9HQVRIRVJfTUVSR0UpOworCQl9CisKKwkJd2Fsa2VyLT5xdWVy eV9mZWF0dXJlc1t0XSA9IHF1ZXJ5X2ZlYXR1cmVzOworCX0KK30KKworLyoKKyAqIE1haW4gd29y a2hvcnNlIGZvciB0aGUgcGxhbiB0cmVlIHdhbGsuCisgKgorICogSWYgd2l0aGluX2pvaW5fcHJv YmxlbSBpcyB0cnVlLCB3ZSBlbmNvdW50ZXJlZCBhIGpvaW4gYXQgc29tZSBoaWdoZXIgbGV2ZWwK KyAqIG9mIHRoZSB0cmVlIHdhbGsgYW5kIGhhdmVuJ3QgeWV0IGRlc2NlbmRlZCBvdXQgb2YgdGhl IHBvcnRpb24gb2YgdGhlIHBsYW4KKyAqIHRyZWUgdGhhdCBpcyBwYXJ0IG9mIHRoYXQgc2FtZSBq b2luIHByb2JsZW0uIFdlJ3JlIG5vIGxvbmdlciBpbiB0aGUgc2FtZQorICogam9pbiBwcm9ibGVt IGlmICgxKSB3ZSBjcm9zcyBpbnRvIGEgZGlmZmVyZW50IHN1YnF1ZXJ5IG9yICgyKSB3ZSBkZXNj ZW5kCisgKiB0aHJvdWdoIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBub2RlLCBiZWxvdyB3aGlj aCBhbnkgZnVydGhlciBqb2lucyB3b3VsZAorICogYmUgcGFydGl0aW9ud2lzZSBqb2lucyBwbGFu bmVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgb3V0ZXIgam9pbiBwcm9ibGVtLgorICoKKyAqIElmIGpv aW5fdW5yb2xsZXIgIT0gTlVMTCwgdGhlIGpvaW4gdW5yb2xsZXIgY29kZSBleHBlY3RzIHVzIHRv IGZpbmQgYSBqb2luCisgKiB0aGF0IHNob3VsZCBiZSB1bnJvbGxlZCBpbnRvIHRoYXQgb2JqZWN0 LiBUaGlzIGltcGxpZXMgdGhhdCB3ZSdyZSB3aXRoaW4gYQorICogam9pbiBwcm9ibGVtLCBidXQg dGhlIHJldmVyc2UgaXMgbm90IHRydWU6IHdoZW4gd2UndmUgdHJhdmVyc2VkIGFsbCB0aGUKKyAq IGpvaW5zIGJ1dCBhcmUgc3RpbGwgbG9va2luZyBmb3IgdGhlIHNjYW4gdGhhdCBpcyB0aGUgbGVh ZiBvZiB0aGUgam9pbiB0cmVlLAorICogam9pbl91bnJvbGxlciB3aWxsIGJlIE5VTEwgYnV0IHdp dGhpbl9qb2luX3Byb2JsZW0gd2lsbCBiZSB0cnVlLgorICoKKyAqIEVhY2ggZWxlbWVudCBvZiBh Y3RpdmVfcXVlcnlfZmVhdHVyZXMgY29ycmVzcG9uZHMgdG8gc29tZSBpdGVtIG9mIGFkdmljZQor ICogdGhhdCBuZWVkcyB0byBlbnVtZXJhdGUgYWxsIHRoZSByZWxhdGlvbnMgaXQgYWZmZWN0cy4g V2UgYWRkIFJUSXMgd2UgZmluZAorICogZHVyaW5nIHRyZWUgdHJhdmVyc2FsIHRvIGVhY2ggb2Yg dGhlc2UgcXVlcnkgZmVhdHVyZXMuCisgKgorICogSWYgYmVuZWF0aF9hbnlfZ2F0aGVyID09IHRy dWUsIHNvbWUgaGlnaGVyIGxldmVsIG9mIHRoZSB0cmVlIHRyYXZlcnNhbCBmb3VuZAorICogYSBH YXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3dhbGtf cmVjdXJzaXZlbHkocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4s CisJCQkJCSAgYm9vbCB3aXRoaW5fam9pbl9wcm9ibGVtLAorCQkJCQkgIHBncGFfam9pbl91bnJv bGxlciAqam9pbl91bnJvbGxlciwKKwkJCQkJICBMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMs CisJCQkJCSAgYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIpCit7CisJcGdwYV9qb2luX3Vucm9sbGVy ICpvdXRlcl9qb2luX3Vucm9sbGVyID0gTlVMTDsKKwlwZ3BhX2pvaW5fdW5yb2xsZXIgKmlubmVy X2pvaW5fdW5yb2xsZXIgPSBOVUxMOworCWJvb2wJCWpvaW5fdW5yb2xsZXJfdG9wbGV2ZWwgPSBm YWxzZTsKKwlMaXN0Q2VsbCAgICpsYzsKKwlMaXN0CSAgICpleHRyYXBsYW5zID0gTklMOworCUxp c3QJICAgKmVsaWRlZF9ub2RlcyA9IE5JTDsKKworCUFzc2VydCh3aXRoaW5fam9pbl9wcm9ibGVt IHx8IGpvaW5fdW5yb2xsZXIgPT0gTlVMTCk7CisKKwkvKgorCSAqIENoZWNrIHRoZSBmdXR1cmVf cXVlcnlfZmVhdHVyZXMgbGlzdCB0byBzZWUgd2hldGhlciB0aGlzIHdhcyBwcmV2aW91c2x5CisJ ICogaWRlbnRpZmllZCBhcyBhIHBsYW4gbm9kZSB0aGF0IG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXMg YSBxdWVyeSBmZWF0dXJlLgorCSAqIFdlIG11c3QgZG8gdGhpcyBiZWZvcmUgaGFuZGxpbmcgZWxp ZGVkIG5vZGVzLCBiZWNhdXNlIGlmIHRoZXJlJ3MgYW4KKwkgKiBlbGlkZWQgbm9kZSBhc3NvY2lh dGVkIHdpdGggYSBmdXR1cmUgcXVlcnkgZmVhdHVyZSwgdGhlIFJUSXMgYXNzb2NpYXRlZAorCSAq IHdpdGggdGhlIGVsaWRlZCBub2RlIHNob3VsZCBiZSB0aGUgb25seSBvbmVzIGF0dHJpYnV0ZWQg dG8gdGhlIHF1ZXJ5CisJICogZmVhdHVyZS4KKwkgKi8KKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5 X2ZlYXR1cmUsIHFmLCB3YWxrZXItPmZ1dHVyZV9xdWVyeV9mZWF0dXJlcykKKwl7CisJCWlmIChx Zi0+cGxhbiA9PSBwbGFuKQorCQl7CisJCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPSBsaXN0X2Nv cHkoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKTsKKwkJCWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9IGxh cHBlbmQoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBxZik7CisJCQl3YWxrZXItPmZ1dHVyZV9xdWVy eV9mZWF0dXJlcyA9CisJCQkJbGlzdF9kZWxldGVfcHRyKHdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2Zl YXR1cmVzLCBwbGFuKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBGaW5kIGFsbCBl bGlkZWQgbm9kZXMgZm9yIHRoaXMgUGxhbiBub2RlLgorCSAqLworCWZvcmVhY2hfbm9kZShFbGlk ZWROb2RlLCBuLCB3YWxrZXItPnBzdG10LT5lbGlkZWROb2RlcykKKwl7CisJCWlmIChuLT5wbGFu X25vZGVfaWQgPT0gcGxhbi0+cGxhbl9ub2RlX2lkKQorCQkJZWxpZGVkX25vZGVzID0gbGFwcGVu ZChlbGlkZWRfbm9kZXMsIG4pOworCX0KKworCS8qIElmIHdlIGZvdW5kIGFueSBlbGlkZWRfbm9k ZXMsIGhhbmRsZSB0aGVtLiAqLworCWlmIChlbGlkZWRfbm9kZXMgIT0gTklMKQorCXsKKwkJaW50 CQkJbnVtX2VsaWRlZF9ub2RlcyA9IGxpc3RfbGVuZ3RoKGVsaWRlZF9ub2Rlcyk7CisJCUVsaWRl ZE5vZGUgKmxhc3RfZWxpZGVkX25vZGU7CisKKwkJLyoKKwkJICogUlRJcyBmb3IgdGhlIGZpbmFs IC0tIGFuZCB0aHVzIGxvZ2ljYWxseSB1cHBlcm1vc3QgLS0gZWxpZGVkIG5vZGUKKwkJICogc2hv dWxkIGJlIGNvbGxlY3RlZCBmb3IgcXVlcnkgZmVhdHVyZXMgcGFzc2VkIGRvd24gYnkgdGhlIGNh bGxlci4KKwkJICogSG93ZXZlciwgZWxpZGVkIG5vZGVzIGFjdCBhcyBiYXJyaWVycyB0byBxdWVy eSBmZWF0dXJlcywgd2hpY2gKKwkJICogbWVhbnMgdGhhdCAoMSkgdGhlIHJlbWFpbmluZyBlbGlk ZWQgbm9kZXMsIGlmIGFueSwgc2hvdWxkIGJlCisJCSAqIGlnbm9yZWQgZm9yIHB1cnBvc2VzIG9m IHF1ZXJ5IGZlYXR1cmVzIGFuZCAoMikgdGhlIGxpc3Qgb2YgYWN0aXZlCisJCSAqIHF1ZXJ5IGZl YXR1cmVzIHNob3VsZCBiZSByZXNldCB0byBlbXB0eSBzbyB0aGF0IHdlIGRvIG5vdCBhZGQgUlRJ cworCQkgKiBmcm9tIHRoZSBwbGFuIG5vZGUgdGhhdCBpcyBsb2dpY2FsbHkgYmVuZWF0aCB0aGUg ZWxpZGVkIG5vZGUgdG8gdGhlCisJCSAqIHF1ZXJ5IGZlYXR1cmVzIHBhc3NlZCBkb3duIGZyb20g dGhlIGNhbGxlci4KKwkJICovCisJCWxhc3RfZWxpZGVkX25vZGUgPSBsaXN0X250aChlbGlkZWRf bm9kZXMsIG51bV9lbGlkZWRfbm9kZXMgLSAxKTsKKwkJcGdwYV9xZl9hZGRfcnRpcyhhY3RpdmVf cXVlcnlfZmVhdHVyZXMsCisJCQkJCQkgcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKGxhc3Rf ZWxpZGVkX25vZGUtPnJlbGlkcywKKwkJCQkJCQkJCQkJCQkgd2Fsa2VyLT5wc3RtdC0+cnRhYmxl KSk7CisJCWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9IE5JTDsKKworCQkvKgorCQkgKiBJZiB3ZSdy ZSB3aXRoaW4gYSBqb2luIHByb2JsZW0sIHRoZSBqb2luX3Vucm9sbGVyIGlzIHJlc3BvbnNpYmxl CisJCSAqIGZvciBidWlsZGluZyB0aGUgc2NhbiBmb3IgdGhlIGZpbmFsIGVsaWRlZCBub2RlLCBz byB0aHJvdyBpdCBvdXQuCisJCSAqLworCQlpZiAod2l0aGluX2pvaW5fcHJvYmxlbSkKKwkJCWVs aWRlZF9ub2RlcyA9IGxpc3RfdHJ1bmNhdGUoZWxpZGVkX25vZGVzLCBudW1fZWxpZGVkX25vZGVz IC0gMSk7CisKKwkJLyogQnVpbGQgc2NhbnMgZm9yIGFsbCAob3IgdGhlIHJlbWFpbmluZykgZWxp ZGVkIG5vZGVzLiAqLworCQlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgZWxpZGVkX25vZGUsIGVs aWRlZF9ub2RlcykKKwkJeworCQkJKHZvaWQpIHBncGFfYnVpbGRfc2Nhbih3YWxrZXIsIHBsYW4s IGVsaWRlZF9ub2RlLAorCQkJCQkJCQkgICBiZW5lYXRoX2FueV9nYXRoZXIsIHdpdGhpbl9qb2lu X3Byb2JsZW0pOworCQl9CisKKwkJLyoKKwkJICogSWYgdGhlcmUgd2VyZSBhbnkgZWxpZGVkIG5v ZGVzLCB0aGVuIGV2ZXJ5dGhpbmcgYmVuZWF0aCB0aG9zZSBub2RlcworCQkgKiBpcyBub3QgcGFy dCBvZiB0aGUgc2FtZSBqb2luIHByb2JsZW0uCisJCSAqCisJCSAqIEluIG1vcmUgZGV0YWlsLCBp ZiBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgd2FzIGVsaWRlZCwgdGhlbiBhCisJCSAqIHBhcnRp dGlvbndpc2Ugam9pbiB3YXMgY2hvc2VuIGFuZCBvbmx5IGEgc2luZ2xlIGNoaWxkIHN1cnZpdmVk OyBpZgorCQkgKiBhIFN1YnF1ZXJ5U2NhbiB3YXMgZWxpZGVkLCB0aGUgc3VicXVlcnkgd2FzIHBs YW5uZWQgd2l0aG91dAorCQkgKiBmbGF0dGVuaW5nIGl0IGludG8gdGhlIHBhcmVudC4KKwkJICov CisJCXdpdGhpbl9qb2luX3Byb2JsZW0gPSBmYWxzZTsKKwkJam9pbl91bnJvbGxlciA9IE5VTEw7 CisJfQorCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2Rl LCBkaXJlY3RseSBhZGQgaXQgdG8gdGhlIGxpc3QKKwkgKiBvZiBjdXJyZW50bHktYWN0aXZlIHF1 ZXJ5IGZlYXR1cmVzLiBXZSBtdXN0IGRvIHRoaXMgYWZ0ZXIgaGFuZGxpbmcKKwkgKiBlbGlkZWQg bm9kZXMsIHNpbmNlIHRoZSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUgb2NjdXJzIGxvZ2lj YWxseQorCSAqIGJlbmVhdGggYW55IGFzc29jaWF0ZWQgZWxpZGVkIG5vZGVzLgorCSAqCisJICog RXhjZXB0aW9uOiBXZSBkaXNyZWdhcmQgYW55IHNpbmdsZV9jb3B5IEdhdGhlciBub2Rlcy4gVGhl c2UgYXJlIGNyZWF0ZWQKKwkgKiBieSBkZWJ1Z19wYXJhbGxlbF9xdWVyeSwgYW5kIGhhdmluZyB0 aGVtIGFmZmVjdCB0aGUgcGxhbiBhZHZpY2UgaXMKKwkgKiBjb3VudGVycHJvZHVjdGl2ZSwgYXMg dGhlIHJlc3VsdCB3aWxsIGJlIHRvIGFkdmlzZSB0aGUgdXNlIG9mIGEgcmVhbAorCSAqIEdhdGhl ciBub2RlLCByYXRoZXIgdGhhbiBhIHNpbmdsZSBjb3B5IG9uZS4KKwkgKi8KKwlpZiAoSXNBKHBs YW4sIEdhdGhlcikgJiYgISgoR2F0aGVyICopIHBsYW4pLT5zaW5nbGVfY29weSkKKwl7CisJCWFj dGl2ZV9xdWVyeV9mZWF0dXJlcyA9CisJCQlsYXBwZW5kKGxpc3RfY29weShhY3RpdmVfcXVlcnlf ZmVhdHVyZXMpLAorCQkJCQlwZ3BhX2FkZF9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX0dBVEhFUiwg cGxhbikpOworCQliZW5lYXRoX2FueV9nYXRoZXIgPSB0cnVlOworCX0KKwllbHNlIGlmIChJc0Eo cGxhbiwgR2F0aGVyTWVyZ2UpKQorCXsKKwkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0KKwkJCWxh cHBlbmQobGlzdF9jb3B5KGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyksCisJCQkJCXBncGFfYWRkX2Zl YXR1cmUod2Fsa2VyLCBQR1BBUUZfR0FUSEVSX01FUkdFLCBwbGFuKSk7CisJCWJlbmVhdGhfYW55 X2dhdGhlciA9IHRydWU7CisJfQorCisJLyoKKwkgKiBJZiB3ZSdyZSB3aXRoaW4gYSBqb2luIHBy b2JsZW0sIHRoZSBqb2luIHVucm9sbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgorCSAqIGJ1aWxkaW5n IGFueSByZXF1aXJlZCBzY2FuIGZvciB0aGlzIG5vZGUuIElmIG5vdCwgd2UgZG8gaXQgaGVyZS4K KwkgKi8KKwlpZiAoIXdpdGhpbl9qb2luX3Byb2JsZW0pCisJCSh2b2lkKSBwZ3BhX2J1aWxkX3Nj YW4od2Fsa2VyLCBwbGFuLCBOVUxMLCBiZW5lYXRoX2FueV9nYXRoZXIsIGZhbHNlKTsKKworCS8q CisJICogSWYgdGhpcyBqb2luIG5lZWRzIHRvIHVucm9sbGVkIGJ1dCB0aGVyZSdzIG5vIGpvaW4g dW5yb2xsZXIgYWxyZWFkeQorCSAqIGF2YWlsYWJsZSwgY3JlYXRlIG9uZS4KKwkgKi8KKwlpZiAo am9pbl91bnJvbGxlciA9PSBOVUxMICYmIHBncGFfaXNfam9pbihwbGFuKSkKKwl7CisJCWpvaW5f dW5yb2xsZXIgPSBwZ3BhX2NyZWF0ZV9qb2luX3Vucm9sbGVyKCk7CisJCWpvaW5fdW5yb2xsZXJf dG9wbGV2ZWwgPSB0cnVlOworCQl3aXRoaW5fam9pbl9wcm9ibGVtID0gdHJ1ZTsKKwl9CisKKwkv KgorCSAqIElmIHRoaXMgam9pbiBpcyB0byBiZSB1bnJvbGxlZCwgcGdwYV91bnJvbGxfam9pbigp IHdpbGwgcmV0dXJuIHRoZSBqb2luCisJICogdW5yb2xsZXIgb2JqZWN0IHRoYXQgc2hvdWxkIGJl IHBhc3NlZCBkb3duIHdoZW4gd2UgcmVjdXJzZSBpbnRvIHRoZQorCSAqIG91dGVyIGFuZCBpbm5l ciBzaWRlcyBvZiB0aGUgcGxhbi4KKwkgKi8KKwlpZiAoam9pbl91bnJvbGxlciAhPSBOVUxMKQor CQlwZ3BhX3Vucm9sbF9qb2luKHdhbGtlciwgcGxhbiwgYmVuZWF0aF9hbnlfZ2F0aGVyLCBqb2lu X3Vucm9sbGVyLAorCQkJCQkJICZvdXRlcl9qb2luX3Vucm9sbGVyLCAmaW5uZXJfam9pbl91bnJv bGxlcik7CisKKwkvKiBBZGQgUlRJcyBmcm9tIHRoZSBwbGFuIG5vZGUgdG8gYWxsIGFjdGl2ZSBx dWVyeSBmZWF0dXJlcy4gKi8KKwlwZ3BhX3FmX2FkZF9wbGFuX3J0aXMoYWN0aXZlX3F1ZXJ5X2Zl YXR1cmVzLCBwbGFuLCB3YWxrZXItPnBzdG10LT5ydGFibGUpOworCisJLyoKKwkgKiBSZWN1cnNl IGludG8gdGhlIG91dGVyIGFuZCBpbm5lciBzdWJ0cmVlcy4KKwkgKgorCSAqIEFzIGFuIGV4Y2Vw dGlvbiwgaWYgdGhpcyBpcyBhIEZvcmVpZ25TY2FuLCBkb24ndCByZWN1cnNlLiBwb3N0Z3Jlc19m ZHcKKwkgKiBzb21ldGltZXMgc3RvcmVzIGFuIEVQUSByZWNoZWNrIHBsYW4gaW4gcGxhbi0+bGVm dHJlZSwgYnV0IHRoYXQncyBnb2luZworCSAqIHRvIG1lbnRpb24gdGhlIHNhbWUgc2V0IG9mIHJl bGF0aW9ucyBhcyB0aGUgRm9yZWlnblNjYW4gaXRzZWxmLCBhbmQgd2UKKwkgKiBoYXZlIG5vIHdh eSB0byBlbWl0IGFkdmljZSB0YXJnZXRpbmcgdGhlIEVQUSBjYXNlIHZzLiB0aGUgbm9uLUVQUSBj YXNlLgorCSAqIE1vcmVvdmVyLCBpdCdzIG5vdCBlbnRpcmVseSBjbGVhciB3aGF0IG90aGVyIEZE V3MgbWlnaHQgZG8gd2l0aCB0aGUKKwkgKiBsZWZ0IGFuZCByaWdodCBzdWJ0cmVlcy4gTWF5YmUg c29tZSBiZXR0ZXIgaGFuZGxpbmcgaXMgbmVlZGVkIGhlcmUsIGJ1dAorCSAqIGZvciBub3csIHdl IGp1c3QgcHVudC4KKwkgKi8KKwlpZiAoIUlzQShwbGFuLCBGb3JlaWduU2NhbikpCisJeworCQlp ZiAocGxhbi0+bGVmdHRyZWUgIT0gTlVMTCkKKwkJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxr ZXIsIHBsYW4tPmxlZnR0cmVlLCB3aXRoaW5fam9pbl9wcm9ibGVtLAorCQkJCQkJCQkgIG91dGVy X2pvaW5fdW5yb2xsZXIsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCQkJICBiZW5lYXRo X2FueV9nYXRoZXIpOworCQlpZiAocGxhbi0+cmlnaHR0cmVlICE9IE5VTEwpCisJCQlwZ3BhX3dh bGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBwbGFuLT5yaWdodHRyZWUsIHdpdGhpbl9qb2luX3Byb2Js ZW0sCisJCQkJCQkJCSAgaW5uZXJfam9pbl91bnJvbGxlciwgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVz LAorCQkJCQkJCQkgIGJlbmVhdGhfYW55X2dhdGhlcik7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBj cmVhdGVkIGEgam9pbiB1bnJvbGxlciB1cCBhYm92ZSwgdGhlbiBpdCdzIGFsc28gb3VyIGpvaW4g dG8gdXNlCisJICogaXQgdG8gYnVpbGQgdGhlIGZpbmFsIHBncGFfdW5yb2xsZWRfam9pbiwgYW5k IHRvIGRlc3Ryb3kgdGhlIG9iamVjdC4KKwkgKi8KKwlpZiAoam9pbl91bnJvbGxlcl90b3BsZXZl bCkKKwl7CisJCXBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW47CisKKwkJdWpvaW4gPSBwZ3BhX2J1 aWxkX3Vucm9sbGVkX2pvaW4od2Fsa2VyLCBqb2luX3Vucm9sbGVyKTsKKwkJd2Fsa2VyLT50b3Bs ZXZlbF91bnJvbGxlZF9qb2lucyA9CisJCQlsYXBwZW5kKHdhbGtlci0+dG9wbGV2ZWxfdW5yb2xs ZWRfam9pbnMsIHVqb2luKTsKKwkJcGdwYV9kZXN0cm95X2pvaW5fdW5yb2xsZXIoam9pbl91bnJv bGxlcik7CisJCSh2b2lkKSBwZ3BhX3Byb2Nlc3NfdW5yb2xsZWRfam9pbih3YWxrZXIsIHVqb2lu KTsKKwl9CisKKwkvKgorCSAqIFNvbWUgcGxhbiB0eXBlcyBjYW4gaGF2ZSBhZGRpdGlvbmFsIGNo aWxkcmVuLiBOb2RlcyBsaWtlIEFwcGVuZCB0aGF0CisJICogY2FuIGhhdmUgYW55IG51bWJlciBv ZiBjaGlsZHJlbiBzdG9yZSB0aGVtIGluIGEgTGlzdDsgYSBTdWJxdWVyeVNjYW4KKwkgKiBqdXN0 IGhhcyBhIGZpZWxkIGZvciBhIHNpbmdsZSBhZGRpdGlvbmFsIFBsYW4uCisJICovCisJc3dpdGNo IChub2RlVGFnKHBsYW4pKQorCXsKKwkJY2FzZSBUX0FwcGVuZDoKKwkJCXsKKwkJCQlBcHBlbmQJ ICAgKmFwbGFuID0gKEFwcGVuZCAqKSBwbGFuOworCisJCQkJZXh0cmFwbGFucyA9IGFwbGFuLT5h cHBlbmRwbGFuczsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CisJCQl7 CisJCQkJTWVyZ2VBcHBlbmQgKm1hcGxhbiA9IChNZXJnZUFwcGVuZCAqKSBwbGFuOworCisJCQkJ ZXh0cmFwbGFucyA9IG1hcGxhbi0+bWVyZ2VwbGFuczsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNl IFRfQml0bWFwQW5kOgorCQkJZXh0cmFwbGFucyA9ICgoQml0bWFwQW5kICopIHBsYW4pLT5iaXRt YXBwbGFuczsKKwkJCWJyZWFrOworCQljYXNlIFRfQml0bWFwT3I6CisJCQlleHRyYXBsYW5zID0g KChCaXRtYXBPciAqKSBwbGFuKS0+Yml0bWFwcGxhbnM7CisJCQlicmVhazsKKwkJY2FzZSBUX1N1 YnF1ZXJ5U2NhbjoKKworCQkJLyoKKwkJCSAqIFdlIGRvbid0IHBhc3MgZG93biBhY3RpdmVfcXVl cnlfZmVhdHVyZXMgYWNyb3NzIGhlcmUsIGJlY2F1c2UKKwkJCSAqIHRob3NlIGFyZSBzcGVjaWZp YyB0byBhIHN1YnF1ZXJ5IGxldmVsLgorCQkJICovCisJCQlwZ3BhX3dhbGtfcmVjdXJzaXZlbHko d2Fsa2VyLCAoKFN1YnF1ZXJ5U2NhbiAqKSBwbGFuKS0+c3VicGxhbiwKKwkJCQkJCQkJICAwLCBO VUxMLCBOSUwsIGJlbmVhdGhfYW55X2dhdGhlcik7CisJCQlicmVhazsKKwkJY2FzZSBUX0N1c3Rv bVNjYW46CisJCQlleHRyYXBsYW5zID0gKChDdXN0b21TY2FuICopIHBsYW4pLT5jdXN0b21fcGxh bnM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCS8qIElmIHdlIGZv dW5kIGEgbGlzdCBvZiBleHRyYSBjaGlsZHJlbiwgaXRlcmF0ZSBvdmVyIGl0LiAqLworCWZvcmVh Y2gobGMsIGV4dHJhcGxhbnMpCisJeworCQlQbGFuCSAgICpzdWJwbGFuID0gbGZpcnN0KGxjKTsK KworCQlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBzdWJwbGFuLCAwLCBOVUxMLCBOSUws CisJCQkJCQkJICBiZW5lYXRoX2FueV9nYXRoZXIpOworCX0KK30KKworLyoKKyAqIFBlcmZvcm0g ZmluYWwgcHJvY2Vzc2luZyBvZiBhIG5ld2x5LWNvbnN0cnVjdGVkIHBncGFfdW5yb2xsZWRfam9p bi4gVGhpcworICogb25seSBuZWVkcyB0byBiZSBjYWxsZWQgZm9yIHRvcGxldmVsIHBncGFfdW5y b2xsZWRfam9pbiBvYmplY3RzLCBzaW5jZSBpdAorICogcmVjdXJzZXMgdG8gc3ViLWpvaW5zIGFz IG5lZWRlZC4KKyAqCisgKiBPdXIgZ29hbCBpcyB0byBhZGQgdGhlIHNldCBvZiBpbm5lciByZWxp ZHMgdG8gdGhlIHJlbGV2YW50IGpvaW5fc3RyYXRlZ2llcworICogbGlzdCwgYW5kIHRvIGRvIHRo ZSBzYW1lIGZvciBhbnkgc3ViLWpvaW5zLiBUbyB0aGF0IGVuZCwgdGhlIHJldHVybiB2YWx1ZQor ICogaXMgdGhlIHNldCBvZiByZWxpZHMgZm91bmQgYmVuZWF0aCB0aGUgdGhlIGpvaW4sIGJ1dCBp dCBpcyBleHBlY3RlZCB0aGF0CisgKiB0aGUgdG9wbGV2ZWwgY2FsbGVyIHdpbGwgaWdub3JlIHRo aXMuCisgKi8KK3N0YXRpYyBCaXRtYXBzZXQgKgorcGdwYV9wcm9jZXNzX3Vucm9sbGVkX2pvaW4o cGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgICBwZ3BhX3Vucm9sbGVk X2pvaW4gKnVqb2luKQoreworCUJpdG1hcHNldCAgKmFsbF9yZWxpZHMgPSBibXNfY29weSh1am9p bi0+b3V0ZXIuc2Nhbi0+cmVsaWRzKTsKKworCS8qIElmIHRoaXMgZmFpbHMsIHdlIGRpZG4ndCB1 bnJvbGwgcHJvcGVybHkuICovCisJQXNzZXJ0KHVqb2luLT5vdXRlci51bnJvbGxlZF9qb2luID09 IE5VTEwpOworCisJZm9yIChpbnQgayA9IDA7IGsgPCB1am9pbi0+bmlubmVyOyArK2spCisJewor CQlwZ3BhX2pvaW5fbWVtYmVyICptZW1iZXIgPSAmdWpvaW4tPmlubmVyW2tdOworCQlCaXRtYXBz ZXQgICpyZWxpZHM7CisKKwkJaWYgKG1lbWJlci0+dW5yb2xsZWRfam9pbiAhPSBOVUxMKQorCQkJ cmVsaWRzID0gcGdwYV9wcm9jZXNzX3Vucm9sbGVkX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkJ bWVtYmVyLT51bnJvbGxlZF9qb2luKTsKKwkJZWxzZQorCQl7CisJCQlBc3NlcnQobWVtYmVyLT5z Y2FuICE9IE5VTEwpOworCQkJcmVsaWRzID0gbWVtYmVyLT5zY2FuLT5yZWxpZHM7CisJCX0KKwkJ d2Fsa2VyLT5qb2luX3N0cmF0ZWdpZXNbdWpvaW4tPnN0cmF0ZWd5W2tdXSA9CisJCQlsYXBwZW5k KHdhbGtlci0+am9pbl9zdHJhdGVnaWVzW3Vqb2luLT5zdHJhdGVneVtrXV0sIHJlbGlkcyk7CisJ CWFsbF9yZWxpZHMgPSBibXNfYWRkX21lbWJlcnMoYWxsX3JlbGlkcywgcmVsaWRzKTsKKwl9CisK KwlyZXR1cm4gYWxsX3JlbGlkczsKK30KKworLyoKKyAqIEFycmFuZ2UgZm9yIHRoZSBnaXZlbiBw bGFuIG5vZGUgdG8gYmUgdHJlYXRlZCBhcyBhIHF1ZXJ5IGZlYXR1cmUgd2hlbiB0aGUKKyAqIHRy ZWUgd2FsayByZWFjaGVzIGl0LgorICoKKyAqIE1ha2Ugc3VyZSB0byBvbmx5IHVzZSB0aGlzIGZv ciBub2RlcyB0aGF0IHRoZSB0cmVlIHdhbGsgY2FuJ3QgaGF2ZSByZWFjaGVkCisgKiB5ZXQhCisg Ki8KK3ZvaWQKK3BncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4 dCAqd2Fsa2VyLAorCQkJCQkJcGdwYV9xZl90eXBlIHR5cGUsIFBsYW4gKnBsYW4pCit7CisJcGdw YV9xdWVyeV9mZWF0dXJlICpxZiA9IHBncGFfYWRkX2ZlYXR1cmUod2Fsa2VyLCB0eXBlLCBwbGFu KTsKKworCXdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzID0KKwkJbGFwcGVuZCh3YWxrZXIt PmZ1dHVyZV9xdWVyeV9mZWF0dXJlcywgcWYpOworfQorCisvKgorICogUmV0dXJuIHRoZSBsYXN0 IG9mIGFueSBlbGlkZWQgbm9kZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGxhbiBub2RlIElELgor ICoKKyAqIFRoZSBsYXN0IGVsaWRlZCBub2RlIGlzIHRoZSBvbmUgdGhhdCB3b3VsZCBoYXZlIGJl ZW4gdXBwZXJtb3N0IGluIHRoZSBwbGFuCisgKiB0cmVlIGhhZCBpdCBub3QgYmVlbiByZW1vdmVk IGR1cmluZyBzZXRyZWZzIHByb2Nlc3NpZy4KKyAqLworRWxpZGVkTm9kZSAqCitwZ3BhX2xhc3Rf ZWxpZGVkX25vZGUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICpwbGFuKQoreworCUVsaWRlZE5v ZGUgKmVsaWRlZF9ub2RlID0gTlVMTDsKKworCWZvcmVhY2hfbm9kZShFbGlkZWROb2RlLCBuLCBw c3RtdC0+ZWxpZGVkTm9kZXMpCisJeworCQlpZiAobi0+cGxhbl9ub2RlX2lkID09IHBsYW4tPnBs YW5fbm9kZV9pZCkKKwkJCWVsaWRlZF9ub2RlID0gbjsKKwl9CisKKwlyZXR1cm4gZWxpZGVkX25v ZGU7Cit9CisKKy8qCisgKiBDZXJ0YWluIHBsYW4gbm9kZXMgY2FuIHJlZmVyIHRvIGEgc2V0IG9m IFJUSXMuIEV4dHJhY3QgYW5kIHJldHVybiB0aGUgc2V0LgorICovCitCaXRtYXBzZXQgKgorcGdw YV9yZWxpZHMoUGxhbiAqcGxhbikKK3sKKwlpZiAoSXNBKHBsYW4sIFJlc3VsdCkpCisJCXJldHVy biAoKFJlc3VsdCAqKSBwbGFuKS0+cmVsaWRzOworCWVsc2UgaWYgKElzQShwbGFuLCBGb3JlaWdu U2NhbikpCisJCXJldHVybiAoKEZvcmVpZ25TY2FuICopIHBsYW4pLT5mc19yZWxpZHM7CisJZWxz ZSBpZiAoSXNBKHBsYW4sIEFwcGVuZCkpCisJCXJldHVybiAoKEFwcGVuZCAqKSBwbGFuKS0+YXBw cmVsaWRzOworCWVsc2UgaWYgKElzQShwbGFuLCBNZXJnZUFwcGVuZCkpCisJCXJldHVybiAoKE1l cmdlQXBwZW5kICopIHBsYW4pLT5hcHByZWxpZHM7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoK KyAqIEV4dHJhY3QgdGhlIHNjYW5uZWQgUlRJIGZyb20gYSBwbGFuIG5vZGUuCisgKgorICogUmV0 dXJucyAwIGlmIHRoZXJlIGlzbid0IG9uZS4KKyAqLworSW5kZXgKK3BncGFfc2NhbnJlbGlkKFBs YW4gKnBsYW4pCit7CisJc3dpdGNoIChub2RlVGFnKHBsYW4pKQorCXsKKwkJY2FzZSBUX1NlcVNj YW46CisJCWNhc2UgVF9TYW1wbGVTY2FuOgorCQljYXNlIFRfQml0bWFwSGVhcFNjYW46CisJCWNh c2UgVF9UaWRTY2FuOgorCQljYXNlIFRfVGlkUmFuZ2VTY2FuOgorCQljYXNlIFRfU3VicXVlcnlT Y2FuOgorCQljYXNlIFRfRnVuY3Rpb25TY2FuOgorCQljYXNlIFRfVGFibGVGdW5jU2NhbjoKKwkJ Y2FzZSBUX1ZhbHVlc1NjYW46CisJCWNhc2UgVF9DdGVTY2FuOgorCQljYXNlIFRfTmFtZWRUdXBs ZXN0b3JlU2NhbjoKKwkJY2FzZSBUX1dvcmtUYWJsZVNjYW46CisJCWNhc2UgVF9Gb3JlaWduU2Nh bjoKKwkJY2FzZSBUX0N1c3RvbVNjYW46CisJCWNhc2UgVF9JbmRleFNjYW46CisJCWNhc2UgVF9J bmRleE9ubHlTY2FuOgorCQkJcmV0dXJuICgoU2NhbiAqKSBwbGFuKS0+c2NhbnJlbGlkOworCQlk ZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJfQorfQorCisvKgorICogQ29uc3RydWN0IGEgbmV3IEJp dG1hcHNldCBjb250YWluaW5nIG5vbi1SVEVfSk9JTiBtZW1iZXJzIG9mICdyZWxpZHMnLgorICov CitCaXRtYXBzZXQgKgorcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKEJpdG1hcHNldCAqcmVs aWRzLCBMaXN0ICpydGFibGUpCit7CisJaW50CQkJcnRpID0gLTE7CisJQml0bWFwc2V0ICAqcmVz dWx0ID0gTlVMTDsKKworCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRp KSkgPj0gMCkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcnRhYmxl KTsKKworCQlpZiAocnRlLT5ydGVraW5kICE9IFJURV9KT0lOKQorCQkJcmVzdWx0ID0gYm1zX2Fk ZF9tZW1iZXIocmVzdWx0LCBydGkpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisg KiBDcmVhdGUgYSBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgYW5kIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBh bGwgcXVlcnkgZmVhdHVyZXMKKyAqIGZvciB0aGlzIHBsYW4uCisgKi8KK3N0YXRpYyBwZ3BhX3F1 ZXJ5X2ZlYXR1cmUgKgorcGdwYV9hZGRfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQg KndhbGtlciwKKwkJCQkgcGdwYV9xZl90eXBlIHR5cGUsIFBsYW4gKnBsYW4pCit7CisJcGdwYV9x dWVyeV9mZWF0dXJlICpxZiA9IHBhbGxvYzBfb2JqZWN0KHBncGFfcXVlcnlfZmVhdHVyZSk7CisK KwlxZi0+dHlwZSA9IHR5cGU7CisJcWYtPnBsYW4gPSBwbGFuOworCisJd2Fsa2VyLT5xdWVyeV9m ZWF0dXJlc1txZi0+dHlwZV0gPQorCQlsYXBwZW5kKHdhbGtlci0+cXVlcnlfZmVhdHVyZXNbcWYt PnR5cGVdLCBxZik7CisKKwlyZXR1cm4gcWY7Cit9CisKKy8qCisgKiBBZGQgYSBzaW5nbGUgUlRJ IHRvIGVhY2ggYWN0aXZlIHF1ZXJ5IGZlYXR1cmUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3Fm X2FkZF9ydGkoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBJbmRleCBydGkpCit7CisJZm9y ZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKQor CXsKKwkJcWYtPnJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKHFmLT5yZWxpZHMsIHJ0aSk7CisJfQor fQorCisvKgorICogQWRkIGEgc2V0IG9mIFJUSXMgdG8gZWFjaCBhY3RpdmUgcXVlcnkgZmVhdHVy ZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcWZfYWRkX3J0aXMoTGlzdCAqYWN0aXZlX3F1ZXJ5 X2ZlYXR1cmVzLCBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5 X2ZlYXR1cmUsIHFmLCBhY3RpdmVfcXVlcnlfZmVhdHVyZXMpCisJeworCQlxZi0+cmVsaWRzID0g Ym1zX2FkZF9tZW1iZXJzKHFmLT5yZWxpZHMsIHJlbGlkcyk7CisJfQorfQorCisvKgorICogQWRk IFJUSXMgZGlyZWN0bHkgY29udGFpbmVkIGluIGEgcGxhbiBub2RlIHRvIGVhY2ggYWN0aXZlIHF1 ZXJ5IGZlYXR1cmUsCisgKiBidXQgZmlsdGVyIG91dCBhbnkgam9pbiBSVElzLCBzaW5jZSBhZHZp Y2UgZG9lc24ndCBtZW50aW9uIHRob3NlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9xZl9hZGRf cGxhbl9ydGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgUGxhbiAqcGxhbiwgTGlzdCAq cnRhYmxlKQoreworCUJpdG1hcHNldCAgKnJlbGlkczsKKwlJbmRleAkJcnRpOworCisJaWYgKChy ZWxpZHMgPSBwZ3BhX3JlbGlkcyhwbGFuKSkgIT0gTlVMTCkKKwl7CisJCXJlbGlkcyA9IHBncGFf ZmlsdGVyX291dF9qb2luX3JlbGlkcyhyZWxpZHMsIHJ0YWJsZSk7CisJCXBncGFfcWZfYWRkX3J0 aXMoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCByZWxpZHMpOworCX0KKwllbHNlIGlmICgocnRpID0g cGdwYV9zY2FucmVsaWQocGxhbikpICE9IDApCisJCXBncGFfcWZfYWRkX3J0aShhY3RpdmVfcXVl cnlfZmVhdHVyZXMsIHJ0aSk7Cit9CisKKy8qCisgKiBJZiB3ZSBnZW5lcmF0ZWQgcGxhbiBhZHZp Y2UgdXNpbmcgdGhlIHByb3ZpZGVkIHdhbGtlciBvYmplY3QgYW5kIGFycmF5CisgKiBvZiBpZGVu dGlmaWVycywgd291bGQgd2UgZ2VuZXJhdGUgdGhlIHNwZWNpZmllZCB0YWcvdGFyZ2V0IGNvbWJp bmF0aW9uPworICoKKyAqIElmIHllcywgdGhlIHBsYW4gY29uZm9ybXMgdG8gdGhlIGFkdmljZTsg aWYgbm8sIGl0IGRvZXMgbm90LiBOb3RlIHRoYXQKKyAqIHdlIGhhdmUga25vdyB3YXkgb2Yga25v d2luZyB3aGV0aGVyIHRoZSBwbGFubmVyIHdhcyBmb3JjZWQgdG8gZW1pdCBhIHBsYW4KKyAqIHRo YXQgY29uZm9ybWVkIHRvIHRoZSBhZHZpY2Ugb3IganVzdCBoYXBwZW5lZCB0byBkbyBzby4KKyAq LworYm9vbAorcGdwYV93YWxrZXJfd291bGRfYWR2aXNlKHBncGFfcGxhbl93YWxrZXJfY29udGV4 dCAqd2Fsa2VyLAorCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJ CQkgcGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnLAorCQkJCQkJIHBncGFfYWR2aWNlX3RhcmdldCAq dGFyZ2V0KQoreworCUluZGV4CQlydGFibGVfbGVuZ3RoID0gbGlzdF9sZW5ndGgod2Fsa2VyLT5w c3RtdC0+cnRhYmxlKTsKKwlCaXRtYXBzZXQgICpyZWxpZHMgPSBOVUxMOworCisJaWYgKHRhZyA9 PSBQR1BBX1RBR19KT0lOX09SREVSKQorCXsKKwkJZm9yZWFjaF9wdHIocGdwYV91bnJvbGxlZF9q b2luLCB1am9pbiwgd2Fsa2VyLT50b3BsZXZlbF91bnJvbGxlZF9qb2lucykKKwkJeworCQkJaWYg KHBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlcyh1am9pbiwgcnRhYmxlX2xlbmd0aCwKKwkJ CQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsIHRhcmdldCwgdHJ1ZSkpCisJCQkJcmV0dXJuIHRy dWU7CisJCX0KKworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKHRhcmdldC0+dHR5cGUgPT0g UEdQQV9UQVJHRVRfSURFTlRJRklFUikKKwl7CisJCUluZGV4CQlydGk7CisKKwkJcnRpID0gcGdw YV9jb21wdXRlX3J0aV9mcm9tX2lkZW50aWZpZXIocnRhYmxlX2xlbmd0aCwgcnRfaWRlbnRpZmll cnMsCisJCQkJCQkJCQkJCSAgICZ0YXJnZXQtPnJpZCk7CisJCWlmIChydGkgPT0gMCkKKwkJCXJl dHVybiBmYWxzZTsKKwkJcmVsaWRzID0gYm1zX21ha2Vfc2luZ2xldG9uKHJ0aSk7CisJfQorCWVs c2UKKwl7CisJCUFzc2VydCh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX09SREVSRURfTElT VCk7CisJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJn ZXQtPmNoaWxkcmVuKQorCQl7CisJCQlJbmRleAkJcnRpOworCisJCQlBc3NlcnQoY2hpbGRfdGFy Z2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKTsKKwkJCXJ0aSA9IHBncGFfY29t cHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCQkgICBy dF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJCSAgICZjaGlsZF90YXJnZXQtPnJpZCk7CisJCQlp ZiAocnRpID09IDApCisJCQkJcmV0dXJuIGZhbHNlOworCQkJcmVsaWRzID0gYm1zX2FkZF9tZW1i ZXIocmVsaWRzLCBydGkpOworCQl9CisJfQorCisJc3dpdGNoICh0YWcpCisJeworCQljYXNlIFBH UEFfVEFHX0pPSU5fT1JERVI6CisJCQkvKiBzaG91bGQgaGF2ZSBiZWVuIGhhbmRsZWQgYWJvdmUg Ki8KKwkJCXBnX3VucmVhY2hhYmxlKCk7CisJCQlicmVhazsKKwkJY2FzZSBQR1BBX1RBR19CSVRN QVBfSEVBUF9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2ZpbmRfc2Nhbih3YWxrZXIsCisJ CQkJCQkJCQkJIFBHUEFfU0NBTl9CSVRNQVBfSEVBUCwKKwkJCQkJCQkJCQkgcmVsaWRzKSAhPSBO VUxMOworCQljYXNlIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtl cl9maW5kX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCSBQR1BBX1NDQU5fRk9SRUlHTiwKKwkJCQkJ CQkJCQkgcmVsaWRzKSAhPSBOVUxMOworCQljYXNlIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjoK KwkJCXsKKwkJCQlwZ3BhX3NjYW4gICpzY2FuOworCisJCQkJc2NhbiA9IHBncGFfd2Fsa2VyX2Zp bmRfc2Nhbih3YWxrZXIsIFBHUEFfU0NBTl9JTkRFWF9PTkxZLAorCQkJCQkJCQkJCQkgcmVsaWRz KTsKKwkJCQlpZiAoc2NhbiA9PSBOVUxMKQorCQkJCQlyZXR1cm4gZmFsc2U7CisKKwkJCQlyZXR1 cm4gcGdwYV93YWxrZXJfaW5kZXhfdGFyZ2V0X21hdGNoZXNfcGxhbih0YXJnZXQtPml0YXJnZXQs IHNjYW4tPnBsYW4pOworCQkJfQorCQljYXNlIFBHUEFfVEFHX0lOREVYX1NDQU46CisJCQl7CisJ CQkJcGdwYV9zY2FuICAqc2NhbjsKKworCQkJCXNjYW4gPSBwZ3BhX3dhbGtlcl9maW5kX3NjYW4o d2Fsa2VyLCBQR1BBX1NDQU5fSU5ERVgsCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQkJCWlmIChz Y2FuID09IE5VTEwpCisJCQkJCXJldHVybiBmYWxzZTsKKworCQkJCXJldHVybiBwZ3BhX3dhbGtl cl9pbmRleF90YXJnZXRfbWF0Y2hlc19wbGFuKHRhcmdldC0+aXRhcmdldCwgc2Nhbi0+cGxhbik7 CisJCQl9CisJCWNhc2UgUEdQQV9UQUdfUEFSVElUSU9OV0lTRToKKwkJCXJldHVybiBwZ3BhX3dh bGtlcl9maW5kX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCSBQR1BBX1NDQU5fUEFSVElUSU9OV0lT RSwKKwkJCQkJCQkJCQkgcmVsaWRzKSAhPSBOVUxMOworCQljYXNlIFBHUEFfVEFHX1NFUV9TQ0FO OgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2ZpbmRfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJIFBH UEFfU0NBTl9TRVEsCisJCQkJCQkJCQkJIHJlbGlkcykgIT0gTlVMTDsKKwkJY2FzZSBQR1BBX1RB R19USURfU0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9maW5kX3NjYW4od2Fsa2VyLAorCQkJ CQkJCQkJCSBQR1BBX1NDQU5fVElELAorCQkJCQkJCQkJCSByZWxpZHMpICE9IE5VTEw7CisJCWNh c2UgUEdQQV9UQUdfR0FUSEVSOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2ZlYXR1 cmUod2Fsa2VyLAorCQkJCQkJCQkJCQkJUEdQQVFGX0dBVEhFUiwKKwkJCQkJCQkJCQkJCXJlbGlk cyk7CisJCWNhc2UgUEdQQV9UQUdfR0FUSEVSX01FUkdFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2Vy X2NvbnRhaW5zX2ZlYXR1cmUod2Fsa2VyLAorCQkJCQkJCQkJCQkJUEdQQVFGX0dBVEhFUl9NRVJH RSwKKwkJCQkJCQkJCQkJCXJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VO SVFVRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0dXJlKHdhbGtlciwKKwkJ CQkJCQkJCQkJCVBHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFLAorCQkJCQkJCQkJCQkJcmVsaWRz KTsKKwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU6CisJCQlyZXR1cm4gcGdwYV93YWxr ZXJfY29udGFpbnNfZmVhdHVyZSh3YWxrZXIsCisJCQkJCQkJCQkJCQlQR1BBUUZfU0VNSUpPSU5f VU5JUVVFLAorCQkJCQkJCQkJCQkJcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19IQVNIX0pPSU46 CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJ CSBKU1RSQVRfSEFTSF9KT0lOLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RB R19NRVJHRV9KT0lOX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5z X2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJQUxJWkUs CisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU46 CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJ CSBKU1RSQVRfTUVSR0VfSk9JTl9QTEFJTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2Ug UEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJf Y29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSBKU1RSQVRfTkVTVEVEX0xPT1BfTUFU RVJJQUxJWkUsCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9M T09QX01FTU9JWkU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfam9pbih3YWxrZXIs CisJCQkJCQkJCQkJCSBKU1RSQVRfTkVTVEVEX0xPT1BfTUVNT0laRSwKKwkJCQkJCQkJCQkJIHJl bGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfUExBSU46CisJCQlyZXR1cm4gcGdw YV93YWxrZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSBKU1RSQVRfTkVTVEVE X0xPT1BfUExBSU4sCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX05PX0dB VEhFUjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19ub19nYXRoZXIod2Fsa2VyLCBy ZWxpZHMpOworCX0KKworCS8qIHNob3VsZCBub3QgZ2V0IGhlcmUgKi8KKwlyZXR1cm4gZmFsc2U7 Cit9CisKKy8qCisgKiBEb2VzIHRoZSBpbmRleCB0YXJnZXQgbWF0Y2ggdGhlIFBsYW4/CisgKgor ICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gd2Uga25vdyB0aGF0IGl0YXJnZXQgbWFuZGF0 ZXMgYW4gSW5kZXggU2NhbiBvcgorICogSW5kZXggT25seSBTY2FuIGFuZCB0aGlzIGNvcnJlc3Bv bmRzIHRvIHRoZSB0eXBlIG9mIFBsYW4uIEhlcmUsIG91ciBqb2IgaXMKKyAqIGp1c3QgdG8gY2hl Y2sgd2hldGhlciBpdCdzIHRoZSBzYW1lIGluZGV4LgorICovCitzdGF0aWMgYm9vbAorcGdwYV93 YWxrZXJfaW5kZXhfdGFyZ2V0X21hdGNoZXNfcGxhbihwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdl dCwgUGxhbiAqcGxhbikKK3sKKwlPaWQJCQlpbmRleG9pZCA9IEludmFsaWRPaWQ7CisKKwkvKiBS ZXRyaWV2ZSB0aGUgaW5kZXggT0lEIGZyb20gdGhlIHBsYW4uICovCisJaWYgKElzQShwbGFuLCBJ bmRleFNjYW4pKQorCQlpbmRleG9pZCA9ICgoSW5kZXhTY2FuICopIHBsYW4pLT5pbmRleGlkOwor CWVsc2UgaWYgKElzQShwbGFuLCBJbmRleE9ubHlTY2FuKSkKKwkJaW5kZXhvaWQgPSAoKEluZGV4 T25seVNjYW4gKikgcGxhbiktPmluZGV4aWQ7CisJZWxzZQorCQllbG9nKEVSUk9SLCAidW5yZWNv Z25pemVkIG5vZGUgdHlwZTogJWQiLCAoaW50KSBub2RlVGFnKHBsYW4pKTsKKworCS8qIENoZWNr IHdoZXRoZXIgc2NoZW1hIG5hbWUgbWF0Y2hlcywgaWYgc3BlY2lmaWVkIGluIGluZGV4IHRhcmdl dC4gKi8KKwlpZiAoaXRhcmdldC0+aW5kbmFtZXNwYWNlICE9IE5VTEwpCisJeworCQlPaWQJCQlu c3BvaWQgPSBnZXRfcmVsX25hbWVzcGFjZShpbmRleG9pZCk7CisJCWNoYXIJICAgKnJlbG5hbWVz cGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKG5zcG9pZCk7CisKKwkJaWYgKHN0cmNt cChpdGFyZ2V0LT5pbmRuYW1lc3BhY2UsIHJlbG5hbWVzcGFjZSkgIT0gMCkKKwkJCXJldHVybiBm YWxzZTsKKwl9CisKKwkvKiBDaGVjayB3aGV0aGVyIHJlbGF0aW9uIG5hbWUgbWF0Y2hlcy4gKi8K KwlyZXR1cm4gKHN0cmNtcChpdGFyZ2V0LT5pbmRuYW1lLCBnZXRfcmVsX25hbWUoaW5kZXhvaWQp KSA9PSAwKTsKK30KKworLyoKKyAqIERvZXMgYW4gdW5yb2xsZWQgam9pbiBtYXRjaCB0aGUgam9p biBvcmRlciBzcGVjaWZpZWQgYnkgYW4gYWR2aWNlIHRhcmdldD8KKyAqLworc3RhdGljIGJvb2wK K3BncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlcyhwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2lu LAorCQkJCQkJCSAgIEluZGV4IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJICAgcGdwYV9pZGVudGlm aWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdl dCwKKwkJCQkJCQkgICBib29sIHRvcGxldmVsKQoreworCWludAkJCW5jaGlsZHJlbiA9IGxpc3Rf bGVuZ3RoKHRhcmdldC0+Y2hpbGRyZW4pOworCisJQXNzZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQ QV9UQVJHRVRfT1JERVJFRF9MSVNUKTsKKworCS8qIEF0IHRvcGxldmVsLCB3ZSBhbGxvdyBhIHBy ZWZpeCBtYXRjaC4gKi8KKwlpZiAodG9wbGV2ZWwpCisJeworCQlpZiAobmNoaWxkcmVuID4gdWpv aW4tPm5pbm5lciArIDEpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCWVsc2UKKwl7CisJCWlmIChu Y2hpbGRyZW4gIT0gdWpvaW4tPm5pbm5lciArIDEpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ LyogT3V0ZXJtb3N0IHJlbCBtdXN0IG1hdGNoLiAqLworCWlmICghcGdwYV93YWxrZXJfam9pbl9v cmRlcl9tYXRjaGVzX21lbWJlcigmdWpvaW4tPm91dGVyLAorCQkJCQkJCQkJCQkgICBydGFibGVf bGVuZ3RoLAorCQkJCQkJCQkJCQkgICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJICAgbGlu aXRpYWwodGFyZ2V0LT5jaGlsZHJlbikpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBFYWNoIGlu bmVyIHJlbCBtdXN0IG1hdGNoLiAqLworCWZvciAoaW50IG4gPSAwOyBuIDwgbmNoaWxkcmVuIC0g MTsgKytuKQorCXsKKwkJcGdwYV9hZHZpY2VfdGFyZ2V0ICpjaGlsZF90YXJnZXQgPSBsaXN0X250 aCh0YXJnZXQtPmNoaWxkcmVuLCBuICsgMSk7CisKKwkJaWYgKCFwZ3BhX3dhbGtlcl9qb2luX29y ZGVyX21hdGNoZXNfbWVtYmVyKCZ1am9pbi0+aW5uZXJbbl0sCisJCQkJCQkJCQkJCQkgICBydGFi bGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCQkg ICBjaGlsZF90YXJnZXQpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOwor fQorCisvKgorICogRG9lcyBvbmUgbWVtYmVyIG9mIGFuIHVucm9sbGVkIGpvaW4gbWF0Y2ggYW4g YWR2aWNlIHRhcmdldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2pvaW5fb3JkZXJf bWF0Y2hlc19tZW1iZXIocGdwYV9qb2luX21lbWJlciAqbWVtYmVyLAorCQkJCQkJCQkJICBJbmRl eCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZp ZXJzLAorCQkJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlCaXRtYXBz ZXQgICpyZWxpZHMgPSBOVUxMOworCisJaWYgKG1lbWJlci0+dW5yb2xsZWRfam9pbiAhPSBOVUxM KQorCXsKKwkJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUKQor CQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVz KG1lbWJlci0+dW5yb2xsZWRfam9pbiwKKwkJCQkJCQkJCQkJICBydGFibGVfbGVuZ3RoLAorCQkJ CQkJCQkJCQkgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgIHRhcmdldCwKKwkJCQkJCQkJ CQkJICBmYWxzZSk7CisJfQorCisJQXNzZXJ0KG1lbWJlci0+c2NhbiAhPSBOVUxMKTsKKwlzd2l0 Y2ggKHRhcmdldC0+dHR5cGUpCisJeworCQljYXNlIFBHUEFfVEFSR0VUX09SREVSRURfTElTVDoK KwkJCS8qIENvdWxkIG9ubHkgbWF0Y2ggYW4gdW5yb2xsZWQgam9pbiAqLworCQkJcmV0dXJuIGZh bHNlOworCisJCWNhc2UgUEdQQV9UQVJHRVRfVU5PUkRFUkVEX0xJU1Q6CisJCQl7CisJCQkJZm9y ZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRy ZW4pCisJCQkJeworCQkJCQlJbmRleAkJcnRpOworCisJCQkJCXJ0aSA9IHBncGFfY29tcHV0ZV9y dGlfZnJvbV9pZGVudGlmaWVyKHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCQkJCSAgIHJ0X2lk ZW50aWZpZXJzLAorCQkJCQkJCQkJCQkJCQkgICAmY2hpbGRfdGFyZ2V0LT5yaWQpOworCQkJCQlp ZiAocnRpID09IDApCisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCXJlbGlkcyA9IGJtc19hZGRf bWVtYmVyKHJlbGlkcywgcnRpKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisKKwkJY2FzZSBQ R1BBX1RBUkdFVF9JREVOVElGSUVSOgorCQkJeworCQkJCUluZGV4CQlydGk7CisKKwkJCQlydGkg PSBwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmllcihydGFibGVfbGVuZ3RoLAorCQkJCQkJ CQkJCQkJCSAgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkJCSAgICZ0YXJnZXQtPnJpZCk7 CisJCQkJaWYgKHJ0aSA9PSAwKQorCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJcmVsaWRzID0gYm1z X21ha2Vfc2luZ2xldG9uKHJ0aSk7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCisJcmV0dXJuIGJt c19lcXVhbChtZW1iZXItPnNjYW4tPnJlbGlkcywgcmVsaWRzKTsKK30KKworLyoKKyAqIEZpbmQg dGhlIHNjYW4gd2hlcmUgdGhlIHdhbGtlciBzYXlzIHRoYXQgdGhlIGdpdmVuIHNjYW4gc3RyYXRl Z3kgc2hvdWxkIGJlCisgKiB1c2VkIGZvciB0aGUgZ2l2ZW4gcmVsaWQgc2V0LCBpZiBvbmUgZXhp c3RzLgorICoKKyAqIFJldHVybnMgdGhlIHBncGFfc2NhbiBvYmplY3QsIG9yIE5VTEwgaWYgbm9u ZSB3YXMgZm91bmQuCisgKi8KK3N0YXRpYyBwZ3BhX3NjYW4gKgorcGdwYV93YWxrZXJfZmluZF9z Y2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkgIHBncGFfc2Nhbl9z dHJhdGVneSBzdHJhdGVneSwKKwkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlMaXN0CSAg ICpzY2FucyA9IHdhbGtlci0+c2NhbnNbc3RyYXRlZ3ldOworCisJZm9yZWFjaF9wdHIocGdwYV9z Y2FuLCBzY2FuLCBzY2FucykKKwl7CisJCWlmIChibXNfZXF1YWwoc2Nhbi0+cmVsaWRzLCByZWxp ZHMpKQorCQkJcmV0dXJuIHNjYW47CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBE b2VzIHRoaXMgd2Fsa2VyIHNheSB0aGF0IHRoZSBnaXZlbiBxdWVyeSBmZWF0dXJlIGFwcGxpZXMg dG8gdGhlIGdpdmVuCisgKiByZWxpZCBzZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtl cl9jb250YWluc19mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJ CQkJCSBwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJ TGlzdAkgICAqcXVlcnlfZmVhdHVyZXMgPSB3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3R5cGVdOwor CisJZm9yZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwgcXVlcnlfZmVhdHVyZXMpCisJ eworCQlpZiAoYm1zX2VxdWFsKHFmLT5yZWxpZHMsIHJlbGlkcykpCisJCQlyZXR1cm4gdHJ1ZTsK Kwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBEb2VzIHRoZSB3YWxrZXIgc2F5IHRo YXQgdGhlIGdpdmVuIGpvaW4gc3RyYXRlZ3kgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZQorICogZ2l2 ZW4gcmVsaWQgc2V0PworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfY29udGFpbnNfam9p bihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCSAgcGdwYV9qb2luX3N0 cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlMaXN0CSAg ICpqb2luX3N0cmF0ZWdpZXMgPSB3YWxrZXItPmpvaW5fc3RyYXRlZ2llc1tzdHJhdGVneV07CisK Kwlmb3JlYWNoX3B0cihCaXRtYXBzZXQsIGpzcmVsaWRzLCBqb2luX3N0cmF0ZWdpZXMpCisJewor CQlpZiAoYm1zX2VxdWFsKGpzcmVsaWRzLCByZWxpZHMpKQorCQkJcmV0dXJuIHRydWU7CisJfQor CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogRG9lcyB0aGUgd2Fsa2VyIHNheSB0aGF0IHRo ZSBnaXZlbiByZWxpZHMgc2hvdWxkIGJlIG1hcmtlZCBhcyBOT19HQVRIRVI/CisgKi8KK3N0YXRp YyBib29sCitwZ3BhX3dhbGtlcl9jb250YWluc19ub19nYXRoZXIocGdwYV9wbGFuX3dhbGtlcl9j b250ZXh0ICp3YWxrZXIsCisJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJcmV0dXJu IGJtc19pc19zdWJzZXQocmVsaWRzLCB3YWxrZXItPm5vX2dhdGhlcl9zY2Fucyk7Cit9CmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmggYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmIzN2UyMDlkY2M1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3dhbGtlci5oCkBAIC0wLDAgKzEsMTQxIEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiBwZ3BhX3dhbGtlci5oCisgKgkgIE1haW4gZW50cnlwb2ludHMgZm9yIGFuYWx5 emluZyBhIHBsYW4gdG8gZ2VuZXJhdGUgYW4gYWR2aWNlIHN0cmluZworICoKKyAqIENvcHlyaWdo dCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9XQUxLRVJfSAorI2RlZmluZSBQR1BBX1dBTEtF Ul9ICisKKyNpbmNsdWRlICJwZ3BhX2FzdC5oIgorI2luY2x1ZGUgInBncGFfam9pbi5oIgorI2lu Y2x1ZGUgInBncGFfc2Nhbi5oIgorCisvKgorICogV2hlbiBnZW5lcmF0aW5nIGFkdmljZSwgd2Ug c2hvdWxkIGVtaXQgZWl0aGVyIFNFTUlKT0lOX1VOSVFVRSBhZHZpY2Ugb3IKKyAqIFNFTUlKT0lO X05PTl9VTklRVUUgYWR2aWNlIGZvciBlYWNoIHNlbWlqb2luIGRlcGVuZGluZyBvbiB3aGV0aGVy IHdlIGNob3NlCisgKiB0byBpbXBsZW1lbnQgaXQgYXMgYSBzZW1pam9pbiBvciB3aGV0aGVyIHdl IGluc3RlYWQgY2hvc2UgdG8gbWFrZSB0aGUKKyAqIG51bGxhYmxlIHNpZGUgdW5pcXVlIGFuZCB0 aGVuIHBlcmZvcm0gYW4gaW5uZXIgam9pbi4gV2hlbiB0aGUgbWFrZS11bmlxdWUKKyAqIHN0cmF0 ZWd5IGlzIG5vdCBjaG9zZW4sIGl0J3Mgbm90IGVhc3kgdG8gdGVsbCBmcm9tIHRoZSBmaW5hbCBw bGFuIHRyZWUKKyAqIHdoZXRoZXIgaXQgd2FzIGNvbnNpZGVyZWQuIFRoYXQncyBhd2t3YXJkLCBi ZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZW1pdAorICogdXNlbGVzcyBTRU1JSk9JTl9OT05fVU5J UVVFIGFkdmljZSB3aGVuIHRoZXJlIHdhcyBubyBkZWNpc2lvbiB0byBiZSBtYWRlLgorICoKKyAq IFRvIGF2b2lkIHRoYXQsIGR1cmluZyBwbGFubmluZywgd2UgY3JlYXRlIGEgcGdwYV9zal91bmlx dWVfcmVsIGZvciBlYWNoCisgKiByZWxhdGlvbiB0aGF0IHdlIGNvbnNpZGVyZWQgbWFraW5nIHVu aXF1ZSBmb3IgcHVycG9zZXMgb2Ygc2VtaWpvaW4gcGxhbm5pbmcuCisgKi8KK3R5cGVkZWYgc3Ry dWN0IHBncGFfc2pfdW5pcXVlX3JlbAoreworCWNoYXIJICAgKnBsYW5fbmFtZTsKKwlCaXRtYXBz ZXQgICpyZWxpZHM7Cit9IHBncGFfc2pfdW5pcXVlX3JlbDsKKworLyoKKyAqIFdlIHVzZSB0aGUg dGVybSAicXVlcnkgZmVhdHVyZSIgdG8gcmVmZXIgdG8gcGxhbiBub2RlcyB0aGF0IGFyZSBpbnRl cmVzdGluZworICogaW4gdGhlIGZvbGxvd2luZyB3YXk6IHRvIGdlbmVyYXRlIGFkdmljZSwgd2Un bGwgbmVlZCB0byBrbm93IHRoZSBzZXQgb2YKKyAqIHNhbWUtc3VicXVlcnksIG5vbi1qb2luIFJU SXMgb2NjdXJpbmcgYXQgb3IgYmVsb3cgdGhhdCBwbGFuIG5vZGUsIHdpdGhvdXQKKyAqIGFkbWl4 dHVyZSBvZiBwYXJlbnQgYW5kIGNoaWxkIFJUSXMuCisgKgorICogRm9yIGV4YW1wbGUsIEdhdGhl ciBub2RlcywgZGVzaWdpbmF0ZWQgYnkgUEdQQVFGX0dBVEhFUiwgYW5kIEdhdGhlciBNZXJnZQor ICogbm9kZXMsIGRlc2lnbmF0ZWQgYnkgUEdQQVFGX0dBVEhFUl9NRVJHRSwgYXJlIHF1ZXJ5IGZl YXR1cmVzLCBiZWNhdXNlIHdlJ2xsCisgKiB3YW50IHRvIGFkbWl0IHNvbWUga2luZCBvZiBhZHZp Y2UgdGhhdCBkZXNjcmliZXMgdGhlIHBvcnRpb24gb2YgdGhlIHBsYW4KKyAqIHRyZWUgdGhhdCBh cHBlYXJzIGJlbmVhdGggdGhvc2Ugbm9kZXMuCisgKgorICogRWFjaCBzZW1pam9pbiBjYW4gYmUg aW1wbGVtZW50ZWQgZWl0aGVyIGJ5IGRpcmVjdGx5IHBlcmZvcm1pbmcgYSBzZW1pam9pbiwKKyAq IG9yIGJ5IG1ha2luZyBvbmUgc2lkZSB1bmlxdWUgYW5kIHRoZW4gcGVyZm9ybWluZyBhIG5vcm1h bCBqb2luLiBFaXRoZXIgd2F5LAorICogd2UgdXNlIGEgcXVlcnkgZmVhdHVyZSB0byBub3RpY2Ug d2hhdCBkZWNpc2lvbiB3YXMgbWFkZSwgc28gdGhhdCB3ZSBjYW4KKyAqIGRlc2NyaWJlIGl0IGJ5 IGVudW1lcmF0aW5nIHRoZSBSVElzIG9uIHRoYXQgc2lkZSBvZiB0aGUgam9pbi4KKyAqCisgKiBU byBlbGFib3JhdGUgb24gdGhlICJubyBhZG1peHR1cmUgb2YgcGFyZW50IGFuZCBjaGlsZCBSVElz IiBydWxlLCBpbiBhbGwgb2YKKyAqIHRoZXNlIGNhc2VzLCBpZiB0aGUgZW50aXJldHkgb2YgYW4g aW5oZXJpdGFuY2UgaGllcmFyY2h5IGFwcGVhcnMgYmVuZWF0aAorICogdGhlIHF1ZXJ5IGZlYXR1 cmUsIHdlIG9ubHkgd2FudCB0byBuYW1lIHRoZSBwYXJlbnQgdGFibGUuIEJ1dCBpdCdzIGFsc28K KyAqIHBvc3NpYmxlIHRvIGhhdmUgY2FzZXMgd2hlcmUgd2UgbXVzdCBuYW1lIGNoaWxkIHRhYmxl cy4gVGhpcyBpcyBwYXJ0aWN1bGFybHkKKyAqIGxpa2VseSB0byBoYXBwZW4gd2hlbiBwYXJ0aXRp b253aXNlIGpvaW4gaXMgaW4gdXNlLCBidXQgY291bGQgaGFwcGVuIGZvcgorICogR2F0aGVyIG9y IEdhdGhlciBNZXJnZSBldmVuIHdpdGhvdXQgdGhhdCwgaWYgb25lIG9mIHRob3NlIGFwcGVhcnMg YmVsb3cKKyAqIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBub2RlIGZvciBhIHNpbmdsZSB0YWJs ZS4KKyAqLwordHlwZWRlZiBlbnVtIHBncGFfcWZfdHlwZQoreworCVBHUEFRRl9HQVRIRVIsCisJ UEdQQVFGX0dBVEhFUl9NRVJHRSwKKwlQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwKKwlQR1BB UUZfU0VNSUpPSU5fVU5JUVVFCisJLyogdXBkYXRlIE5VTV9QR1BBX1FGX1RZUEVTIGlmIHlvdSBh ZGQgYW55dGhpbmcgaGVyZSAqLworfSBwZ3BhX3FmX3R5cGU7CisKKyNkZWZpbmUgTlVNX1BHUEFf UUZfVFlQRVMgKChpbnQpIFBHUEFRRl9TRU1JSk9JTl9VTklRVUUgKyAxKQorCisvKgorICogRm9y IGVhY2ggcXVlcnkgZmVhdHVyZSwgd2Uga2VlcCB0cmFjayBvZiB0aGUgZmVhdHVyZSB0eXBlIGFu ZCB0aGUgc2V0IG9mCisgKiByZWxpZHMgdGhhdCB3ZSBmb3VuZCB1bmRlcm5lYXRoIHRoZSByZWxl dmFudCBwbGFuIG5vZGUuIFNlZSB0aGUgY29tbWVudHMKKyAqIG9uIHBncGFfcWZfdHlwZSwgYWJv dmUsIGZvciBhZGRpdGlvbmFsIGRldGFpbHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfcXVl cnlfZmVhdHVyZQoreworCXBncGFfcWZfdHlwZSB0eXBlOworCVBsYW4JICAgKnBsYW47CisJQml0 bWFwc2V0ICAqcmVsaWRzOworfSBwZ3BhX3F1ZXJ5X2ZlYXR1cmU7CisKKy8qCisgKiBDb250ZXh0 IG9iamVjdCBmb3IgcGxhbiB0cmVlIHdhbGsuCisgKgorICogcHN0bXQgaXMgdGhlIFBsYW5uZWRT dG10IHdlJ3JlIHN0dWR5aW5nLgorICoKKyAqIHNjYW5zIGlzIGFuIGFycmF5IG9mIGxpc3RzIG9m IHBncGFfc2NhbiBvYmplY3RzLiBUaGUgYXJyYXkgaXMgaW5kZXhlZCBieQorICogdGhlIHNjYW4n cyBwZ3BhX3NjYW5fc3RyYXRlZ3kuCisgKgorICogbm9fZ2F0aGVyX3NjYW5zIGlzIHRoZSBzZXQg b2Ygc2NhbiBSVElzIHRoYXQgZG8gbm90IGFwcGVhciBiZW5lYXRoIGFueQorICogR2F0aGVyIG9y IEdhdGhlciBNZXJnZSBub2RlLgorICoKKyAqIHRvcGxldmVsX3Vucm9sbGVkX2pvaW5zIGlzIGEg bGlzdCBvZiBhbGwgcGdwYV91bnJvbGxlZF9qb2luIG9iamVjdHMgdGhhdAorICogYXJlIG5vdCBh IGNoaWxkIG9mIHNvbWUgb3RoZXIgcGdwYV91bnJvbGxlZF9qb2luLgorICoKKyAqIGpvaW5fc3Ry YXRlZ3kgaXMgYW4gYXJyYXkgb2YgbGlzdHMgb2YgQml0bWFwc2V0IG9iamVjdHMuIEVhY2ggQml0 bWFwc2V0CisgKiBpcyB0aGUgc2V0IG9mIHJlbGlkcyB0aGF0IGFwcGVhcnMgb24gdGhlIGlubmVy IHNpZGUgb2Ygc29tZSBqb2luIChleGNsdWRpbmcKKyAqIFJUSXMgZnJvbSBwYXJ0aXRpb24gY2hp bGRyZW4gYW5kIHN1YnF1ZXJpZXMpLiBUaGUgYXJyYXkgaXMgaW5kZXhlZCBieQorICogcGdwYV9q b2luX3N0cmF0ZWd5LgorICoKKyAqIHF1ZXJ5X2ZlYXR1cmVzIGlzIGFuIGFycmF5IGxpc3RzIG9m IHBncGFfcXVlcnlfZmVhdHVyZSBvYmplY3RzLCBpbmRleGVkCisgKiBieSBwZ3BhX3FmX3R5cGUu CisgKgorICogZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzIGlzIG9ubHkgdXNlZCBkdXJpbmcgdGhlIHBs YW4gdHJlZSB3YWxrIGFuZCBzaG91bGQKKyAqIGJlIGVtcHR5IHdoZW4gdGhlIHRyZWUgd2FsayBj b25jbHVkZXMuIEl0IGlzIGEgbGlzdCBvZiBwZ3BhX3F1ZXJ5X2ZlYXR1cmUKKyAqIG9iamVjdHMg Zm9yIFBsYW4gbm9kZXMgdGhhdCB0aGUgcGxhbiB0cmVlIHdhbGsgaGFzIG5vdCB5ZXQgZW5jb3Vu dGVyZWQ7CisgKiB3aGVuIGVuY291bnRlcmVkLCB0aGV5IHdpbGwgYmUgbW92ZWQgdG8gdGhlIGxp c3Qgb2YgYWN0aXZlIHF1ZXJ5IGZlYXR1cmVzCisgKiB0aGF0IGlzIHByb3BhZ2F0ZWQgdmlhIHRo ZSBjYWxsIHN0YWNrLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRl eHQKK3sKKwlQbGFubmVkU3RtdCAqcHN0bXQ7CisJTGlzdAkgICAqc2NhbnNbTlVNX1BHUEFfU0NB Tl9TVFJBVEVHWV07CisJQml0bWFwc2V0ICAqbm9fZ2F0aGVyX3NjYW5zOworCUxpc3QJICAgKnRv cGxldmVsX3Vucm9sbGVkX2pvaW5zOworCUxpc3QJICAgKmpvaW5fc3RyYXRlZ2llc1tOVU1fUEdQ QV9KT0lOX1NUUkFURUdZXTsKKwlMaXN0CSAgICpxdWVyeV9mZWF0dXJlc1tOVU1fUEdQQV9RRl9U WVBFU107CisJTGlzdAkgICAqZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzOworfSBwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQ7CisKK2V4dGVybiB2b2lkIHBncGFfcGxhbl93YWxrZXIocGdwYV9wbGFuX3dh bGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJIFBsYW5uZWRTdG10ICpwc3RtdCwKKwkJCQkJ CQkgTGlzdCAqc2pfdW5pcXVlX3JlbHMpOworCitleHRlcm4gdm9pZCBwZ3BhX2FkZF9mdXR1cmVf ZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCXBncGFf cWZfdHlwZSB0eXBlLAorCQkJCQkJCQkJUGxhbiAqcGxhbik7CisKK2V4dGVybiBFbGlkZWROb2Rl ICpwZ3BhX2xhc3RfZWxpZGVkX25vZGUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICpwbGFuKTsK K2V4dGVybiBCaXRtYXBzZXQgKnBncGFfcmVsaWRzKFBsYW4gKnBsYW4pOworZXh0ZXJuIEluZGV4 IHBncGFfc2NhbnJlbGlkKFBsYW4gKnBsYW4pOworZXh0ZXJuIEJpdG1hcHNldCAqcGdwYV9maWx0 ZXJfb3V0X2pvaW5fcmVsaWRzKEJpdG1hcHNldCAqcmVsaWRzLCBMaXN0ICpydGFibGUpOworCitl eHRlcm4gYm9vbCBwZ3BhX3dhbGtlcl93b3VsZF9hZHZpc2UocGdwYV9wbGFuX3dhbGtlcl9jb250 ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywK KwkJCQkJCQkJCSBwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcsCisJCQkJCQkJCQkgcGdwYV9hZHZp Y2VfdGFyZ2V0ICp0YXJnZXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRo ZXIuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43NzY2NjZiZjE5 NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2dhdGhlci5z cWwKQEAgLTAsMCArMSw4NiBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJh bGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAxOworU0VUIHBhcmFsbGVsX3NldHVwX2Nvc3QgPSAw OworU0VUIHBhcmFsbGVsX3R1cGxlX2Nvc3QgPSAwOworU0VUIG1pbl9wYXJhbGxlbF90YWJsZV9z Y2FuX3NpemUgPSAwOworU0VUIGRlYnVnX3BhcmFsbGVsX3F1ZXJ5ID0gb2ZmOworCitDUkVBVEUg VEFCTEUgZ3RfZGltIChpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGd0X2RpbSAoZGltKSBTRUxF Q1QgcmFuZG9tKCk6OnRleHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0g QU5BTFlaRSBndF9kaW07CisKK0NSRUFURSBUQUJMRSBndF9mYWN0ICgKKwlpZCBpbnQgbm90IG51 bGwsCisJZGltX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBndF9kaW0gKGlkKQorKSBX SVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBndF9mYWN0CisJ U0VMRUNUIGcsIChnJTMpKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitWQUNV VU0gQU5BTFlaRSBndF9mYWN0OworCistLSBCeSBkZWZhdWx0LCB3ZSBleHBlY3QgR2F0aGVyIE1l cmdlIHdpdGggYSBwYXJhbGxlbCBoYXNoIGpvaW4uCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisKKy0tIEZvcmNlIEdhdGhlciBvciBHYXRoZXIgTWVy Z2Ugb2YgYm90aCByZWxhdGlvbnMgdG9nZXRoZXIuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQg T04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZCBPUkRFUiBCWSBkLmlkOworQ09NTUlUOworCistLSBGb3JjZSBhIHNlcGFyYXRlIEdh dGhlciBvciBHYXRoZXIgTWVyZ2Ugb3BlcmF0aW9uIGZvciBlYWNoIHJlbGF0aW9uLgorQkVHSU47 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZShmIGQpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0 IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKGYgZCknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoKGQgZC9kLmQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04g Zi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIGEgR2F0 aGVyIG9yIEdhdGhlciBNZXJnZSBvbiBvbmUgcmVsYXRpb24gYnV0IG5vIHBhcmFsbGVsaXNtIG9u IG90aGVyLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhl cl9tZXJnZShmKSBub19nYXRoZXIoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdn YXRoZXJfbWVyZ2UoZCkgbm9fZ2F0aGVyKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnZ2F0aGVyKGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQg PSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J2dhdGhlcihkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZCBPUkRFUiBCWSBkLmlkOworQ09NTUlUOworCistLSBGb3JjZSBubyBHYXRoZXIgb3IgR2F0 aGVyIE1lcmdlIHVzZSBhdCBhbGwuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnbm9fZ2F0aGVyKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZCBPUkRFUiBCWSBkLmlkOworQ09NTUlUOworCistLSBDYW4ndCBmb3JjZSBHYXRoZXIgTWVy Z2Ugd2l0aG91dCB0aGUgT1JERVIgQlkgY2xhdXNlLCBidXQganVzdCBHYXRoZXIgaXMgT0suCitC RUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKChm IGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00g Z3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBP TiBmLmRpbV9pZCA9IGQuaWQ7CitDT01NSVQ7CisKKy0tIFRlc3QgY29uZmxpY3RpbmcgYWR2aWNl LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBk KSkgbm9fZ2F0aGVyKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JE RVIgQlkgZC5pZDsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL2pvaW5fb3JkZXIuc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRl ci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVlMTZlNTRlZmFk Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRl ci5zcWwKQEAgLTAsMCArMSwxNDUgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhf cGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKKworQ1JFQVRFIFRBQkxFIGpvX2RpbTEg KGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZGltMSAoaWQsIGRpbTEs IHZhbDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEK KwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZGlt MTsKK0NSRUFURSBUQUJMRSBqb19kaW0yIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRl eHQsIHZhbDIgaW50KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VS VCBJTlRPIGpvX2RpbTIgKGlkLCBkaW0yLCB2YWwyKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIg dGV4dCAnIHx8IGcsIChnICUgNykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAp IGc7CitWQUNVVU0gQU5BTFlaRSBqb19kaW0yOworCitDUkVBVEUgVEFCTEUgam9fZmFjdCAoCisJ aWQgaW50IHByaW1hcnkga2V5LAorCWRpbTFfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2Vz IGpvX2RpbTEgKGlkKSwKKwlkaW0yX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19k aW0yIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElO VE8gam9fZmFjdAorCVNFTEVDVCBnLCAoZyUxMDApKzEsIChnJTEwMCkrMSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2ZhY3Q7CisKKy0tIFdlIGV4 cGVjdCB0byBqb2luIHRvIGQyIGZpcnN0IGFuZCB0aGVuIGQxLCBzaW5jZSB0aGUgY29uZGl0aW9u IG9uIGQyCistLSBpcyBtb3JlIHNlbGVjdGl2ZS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9O IGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0g ZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisKKy0tIEZvcmNlIGEgZmV3IGRp ZmZlcmVudCBqb2luIG9yZGVycy4gU29tZSBvZiB0aGVzZSBhcmUgdmVyeSBpbmVmZmljaWVudCwK Ky0tIGJ1dCB0aGUgcGxhbm5lciBjb25zaWRlcnMgdGhlbSBhbGwgdmlhYmxlLgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMSBkMiknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBm CisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4g am9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwy ID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQy IGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBq b19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxF RlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEg QU5EIHZhbDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29y ZGVyKGQxIGYgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQx LmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2 YWwxID0gMSBBTkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J2pvaW5fb3JkZXIoZiAoZDEgZDIpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRp bTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlk CisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdqb2luX29yZGVyKGYge2QxIGQyfSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEg ZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJf aWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK0NPTU1JVDsKKworLS0g Rm9yY2UgYSBqb2luIG9yZGVyIGJ5IG1lbnRpb25pbmcganVzdCBhIHByZWZpeCBvZiB0aGUgam9p biBsaXN0LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5f b3JkZXIoZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlk CisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwx ID0gMSBBTkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pv aW5fb3JkZXIoZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9 IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVS RSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CitDT01NSVQ7CisKKy0tIGpvX2ZhY3QgaXMgbm90IHBh cnRpdGlvbmVkLCBidXQgbGV0J3MgdHJ5IHByZXRlbmRpbmcgdGhhdCBpdCBpcyBhbmQKKy0tIHZl cmlmeWluZyB0aGF0IHRoZSBhZHZpY2UgZG9lcyBub3QgYXBwbHkuCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmL2QxIGQxIGQyKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlM RUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19k aW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAx OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYvZDEgKGQx IGQyKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g am9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlM RUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAx IEFORCB2YWwyID0gMTsKK0NPTU1JVDsKKworLS0gVGhlIHVudXN1YWwgZm9ybXVsYXRpb24gb2Yg dGhpcyBxdWVyeSBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IHRoZSBxdWVyeQorLS0gcGxhbm5lciBm cm9tIHJlZHVjaW5nIHRoZSBGVUxMIEpPSU4gdG8gc29tZSBvdGhlciBqb2luIHR5cGUsIHNvIHRo YXQgd2UKKy0tIGNhbiB0ZXN0IHdoYXQgaGFwcGVucyB3aXRoIGEgam9pbiB0eXBlIHRoYXQgY2Fu bm90IGJlIHJlb3JkZXJlZC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpv X2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGlt MV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKworLS0gV2Ugc2hvdWxkIG5vdCBiZSBhYmxlIHRv IGZvcmNlIHRoZSBwbGFubmVyIHRvIGpvaW4gZiB0byBkMSBmaXJzdCwgYmVjYXVzZQorLS0gdGhh dCBpcyBub3QgYSB2YWxpZCBqb2luIG9yZGVyLCBidXQgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZm9y Y2UgdGhlIHBsYW5uZXIKKy0tIHRvIG1ha2UgZWl0aGVyIGQyIG9yIGYgdGhlIGRyaXZpbmcgdGFi bGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRl cihmIGQxIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0y IGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQg T1IgZi5kaW0xX2lkIElTIE5VTEw7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J2pvaW5fb3JkZXIoZiBkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpP SU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0g Zi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdqb2luX29yZGVyKGQyIGYgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0 IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlP TiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK0NPTU1JVDsKKworLS0g VHdvIGluY29tcGF0aWJsZSBqb2luIG9yZGVycyBzaG91bGQgY29uZmxpY3QuIEluIHRoZSBzZWNv bmQgY2FzZSwKKy0tIHRoZSBjb25mbGljdCBpcyBpbXBsaWNpdDogaWYgZDEgaXMgb24gdGhlIGlu bmVyIHNpZGUgb2YgYSBqb2luIG9mIGFueQorLS0gdHlwZSwgaXQgY2Fubm90IGFsc28gYmUgdGhl IGRyaXZpbmcgdGFibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnam9pbl9vcmRlcihmKSBqb2luX29yZGVyKGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFj dCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJ T04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDEpIGhhc2hfam9pbihkMSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQor CUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQg KyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBO VUxMOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9p bl9zdHJhdGVneS5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5 LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWRkNWM0YzBlMTQK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0 ZWd5LnNxbApAQCAtMCwwICsxLDg0IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4 X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CisKK0NSRUFURSBUQUJMRSBqb2luX2Rp bSAoaWQgc2VyaWFsIHByaW1hcnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2RpbSAoZGltKSBTRUxFQ1QgcmFuZG9t KCk6OnRleHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBq b2luX2RpbTsKKworQ1JFQVRFIFRBQkxFIGpvaW5fZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5 LAorCWRpbV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9pbl9kaW0gKGlkKQorKSBX SVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2ZhY3QK KwlTRUxFQ1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK0NS RUFURSBJTkRFWCBqb2luX2ZhY3RfZGltX2lkIE9OIGpvaW5fZmFjdCAoZGltX2lkKTsKK1ZBQ1VV TSBBTkFMWVpFIGpvaW5fZmFjdDsKKworLS0gV2UgZXhwZWN0IGEgaGFzaCBqb2luIGJ5IGRlZmF1 bHQuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9p bl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKworLS0gVHJ5IGZv cmNpbmcgZWFjaCBqb2luIG1ldGhvZCBpbiB0dXJuIHdpdGggam9pbl9kaW0gYXMgdGhlIGlubmVy IHRhYmxlLgorLS0gQWxsIG9mIHRoZXNlIHNob3VsZCB3b3JrIGV4Y2VwdCBmb3IgTUVSR0VfSk9J Tl9NQVRFUklBTElaRTsgdGhhdCB3aWxsCistLSBmYWlsLCBiZWNhdXNlIHRoZSBwbGFubmVyIGtu b3dzIHRoYXQgam9pbl9kaW0gKGlkKSBpcyB1bmlxdWUsIGFuZCB3aWxsCistLSByZWZ1c2UgdG8g YWRkIG1hcmsvcmVzdG9yZSBvdmVyaGVhZC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdIQVNIX0pPSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pP SU5fTUFURVJJQUxJWkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQu aWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fUExBSU4o ZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpv aW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3Qg ZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NRU1PSVpFKGQpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5f ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdORVNURURfTE9PUF9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZDsKK0NPTU1JVDsKKworLS0gTm93IHRyeSBmb3JjaW5nIGVhY2ggam9pbiBtZXRo b2QgaW4gdHVybiB3aXRoIGpvaW5fZmFjdCBhcyB0aGUgaW5uZXIKKy0tIHRhYmxlLiBBbGwgb2Yg dGhlc2Ugc2hvdWxkIHdvcmsuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnSEFTSF9KT0lOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJ U0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBk LmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01BVEVS SUFMSVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX1BMQUlOKGYpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3Qg ZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NQVRFUklBTElaRShmKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBq b2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUVNT0laRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVT VEVEX0xPT1BfUExBSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQu aWQ7CitDT01NSVQ7CisKKy0tIE5vbi13b3JraW5nIGNhc2VzLiBXZSBjYW4ndCBmb3JjZSBhIGZv cmVpZ24gam9pbiBiZXR3ZWVuIHRoZXNlIHRhYmxlcywKKy0tIGJlY2F1c2UgdGhleSBhcmVuJ3Qg Zm9yZWlnbiB0YWJsZXMuIFdlIGFsc28gY2FuJ3QgdXNlIHR3byBkaWZmZXJlbnQKKy0tIHN0cmF0 ZWdpZXMgb24gdGhlIHNhbWUgdGFibGUsIG5vciBjYW4gd2UgcHV0IGJvdGggdGFibGVzIG9uIHRo ZSBpbm5lcgorLS0gc2lkZSBvZiB0aGUgc2FtZSBqb2luLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJR05fSk9JTigoZiBkKSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9p bl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGYpIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2Zh Y3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJTihmIGQpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpv aW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbCBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2Uvc3FsL2xvY2FsX2NvbGxlY3Rvci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjMyMjVkZDk5MDU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbApAQCAtMCwwICsxLDQ2IEBACitD UkVBVEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlOworU0VUIGRlYnVnX3BhcmFsbGVsX3F1ZXJ5 ID0gb2ZmOworCistLSBUcnkgY2xlYXJpbmcgYWR2aWNlIGJlZm9yZSB3ZSd2ZSBjb2xsZWN0ZWQg YW55LgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0gU2V0 IGEgc21hbGwgYWR2aWNlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB3ZSdsbCBleGNlZWQgaXQu CitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDI7CisKKy0tIEVu YWJsZSB0aGUgY29sbGVjdG9yLgorU0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3RvciA9 IG9uOworCistLSBTZXQgdXAgYSBkdW1teSB0YWJsZS4KK0NSRUFURSBUQUJMRSBkdW1teV90YWJs ZSAoYSBpbnQgcHJpbWFyeSBrZXksIGIgdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBmYWxzZSwgcGFyYWxsZWxfd29ya2VycyA9IDApOworCistLSBUZXN0IHF1ZXJpZXMuCitTRUxF Q1QgKiBGUk9NIGR1bW15X3RhYmxlIGEsIGR1bW15X3RhYmxlIGI7CitTRUxFQ1QgKiBGUk9NIGR1 bW15X3RhYmxlOworCistLSBTaG91bGQgcmV0dXJuIHRoZSBhZHZpY2UgZnJvbSB0aGUgc2Vjb25k IHRlc3QgcXVlcnkuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdG9yID0gb2ZmOwor U0VMRUNUIGFkdmljZSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCkgT1JERVIg QlkgaWQgREVTQyBMSU1JVCAxOworCistLSBOb3cgdHJ5IGNsZWFyaW5nIGFkdmljZSBhZ2Fpbi4K K1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisKKy0tIFJhaXNlIHRo ZSBjb2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQgdGhlIGNvbGxlY3RvciB1c2VzIG11bHRpcGxlIGNo dW5rcy4KK1NFVCBwZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjAwMDsK K1NFVCBwZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0b3IgPSBvbjsKKworLS0gUHVzaCBhIGJ1 bmNoIG9mIHF1ZXJpZXMgdGhyb3VnaCB0aGUgY29sbGVjdG9yLgorRE8gJCQKK0JFR0lOCisJRk9S IHggSU4gMS4uMjAwMCBMT09QCisJCUVYRUNVVEUgJ1NFTEVDVCAqIEZST00gZHVtbXlfdGFibGUn OworCUVORCBMT09QOworRU5ECiskJDsKKworLS0gQ2hlY2sgdGhhdCB0aGUgY29sbGVjdG9yIHdv cmtlZC4KK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNl KCk7CisKKy0tIEFuZCBjbGVhciBvbmUgbW9yZSB0aW1lLCB0byB2ZXJpZnkgdGhhdCB0aGlzIGRv ZXNuJ3QgY2F1c2UgYSBwcm9ibGVtCistLSBldmVuIHdpdGggYSBsYXJnZXIgbnVtYmVyIG9mIGVu dHJpZXMuCitTRUxFQ1QgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOwpkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzUxNDU2ZGJiYjUKLS0tIC9kZXYvbnVsbAorKysgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbApAQCAtMCwwICsxLDk5 IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVy X2dhdGhlciA9IDA7CitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiA9IHRydWU7CisKK0NS RUFURSBUQUJMRSBwdDEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBp bnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHQxYSBQQVJUSVRJ T04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MWIgUEFSVElUSU9OIE9GIHB0MSBG T1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFjIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVF UyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitJTlNFUlQgSU5UTyBwdDEgKGlkLCBkaW0xLCB2YWwxKQorCVNFTEVDVCBnLCAnc29tZSBm aWxsZXIgdGV4dCAnIHx8IGcsIChnICUgMykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDMwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdDE7CisKK0NSRUFURSBUQUJMRSBwdDIgKGlkIGlu dGVnZXIgcHJpbWFyeSBrZXksIGRpbTIgdGV4dCwgdmFsMiBpbnQpCisJUEFSVElUSU9OIEJZIFJB TkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHQyYSBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMg RlJPTSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOwor Q1JFQVRFIFRBQkxFIHB0MmIgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDEwMDEp IHRvICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBU QUJMRSBwdDJjIFBBUlRJVElPTiBPRiBwdDIgRk9SIFZBTFVFUyBGUk9NICgyMDAxKSB0byAoMzAw MSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdDIg KGlkLCBkaW0yLCB2YWwyKQorCVNFTEVDVCBnLCAnc29tZSBvdGhlciB0ZXh0ICcgfHwgZywgKGcg JSA1KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCwyKSBnOworVkFDVVVNIEFO QUxZWkUgcHQyOworCitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBk aW0zIHRleHQsIHZhbDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRB QkxFIHB0M2EgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQor CVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDNiIFBB UlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQzYyBQQVJUSVRJT04g T0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwgZGltMywgdmFsMykKKwlT RUxFQ1QgZywgJ2EgdGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwLDMpIGc7CitWQUNVVU0gQU5BTFlaRSBwdDM7CisKK0NS RUFURSBUQUJMRSBwdG1pc21hdGNoIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW1tIHRleHQs IHZhbG0gaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0bWlz bWF0Y2hhIFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAgRk9SIFZBTFVFUyBGUk9NICgxKSB0 byAoMTUwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFC TEUgcHRtaXNtYXRjaGIgUEFSVElUSU9OIE9GIHB0bWlzbWF0Y2gKKyAgICBGT1IgVkFMVUVTIEZS T00gKDE1MDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsK K0lOU0VSVCBJTlRPIHB0bWlzbWF0Y2ggKGlkLCBkaW1tLCB2YWxtKQorCVNFTEVDVCBnLCAneWV0 IGFub3RoZXIgdGV4dCAnIHx8IGcsIChnICUgMikgKyAxCisJICBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDMwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdG1pc21hdGNoOworCitFWFBMQUlOIChQTEFO X0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0 MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZh bDIgPSAxIEFORCB2YWwzID0gMTsKKworLS0gU3VwcHJlc3MgcGFydGl0aW9ud2lzZSBqb2luLCBv ciBkbyBpdCBqdXN0IHBhcnRpYWxseS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKHB0MSBwdDIgcHQzKSc7CitFWFBMQUlOIChQTEFOX0FE VklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5p ZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIg PSAxIEFORCB2YWwzID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFS VElUSU9OV0lTRSgocHQxIHB0MikgcHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBB TkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwz ID0gMTsKK0NPTU1JVDsKKworLS0gVGVzdCBjb25mbGljdGluZyBhZHZpY2UuCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0Mikg KHB0MSBwdDMpKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQz LmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKK0NPTU1JVDsK KworLS0gQ2FuJ3QgZm9yY2UgYSBwYXJ0aXRpb253aXNlIGpvaW4gd2l0aCBhIG1pc21hdGNoZWQg dGFibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElU SU9OV0lTRSgocHQxIHB0bWlzbWF0Y2gpKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0bWlzbWF0Y2ggV0hFUkUgcHQxLmlkID0gcHRtaXNt YXRjaC5pZDsKK0NPTU1JVDsKKworLS0gRm9yY2Ugam9pbiBvcmRlciBmb3IgYSBwYXJ0aWN1bGFy IGJyYW5jaCBvZiB0aGUgcGFydGl0aW9ud2lzZSBqb2luIHdpdGgKKy0tIGFuZCB3aXRob3V0IG1l bnRpb25pbmcgdGhlIHNjaGVtYSBuYW1lLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ0pPSU5fT1JERVIocHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBw dDEvcHVibGljLnB0MWEpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxF Q1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQg PSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKHB0My9wdDNhIHB0Mi9w dDJhIHB0MS9wdDFhKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0g cHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKK0NPTU1J VDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3ByZXBhcmVkLnNxbCBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3ByZXBhcmVkLnNxbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2VjMzBlZWRlZTUKLS0tIC9kZXYvbnVsbAorKysgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wcmVwYXJlZC5zcWwKQEAgLTAsMCArMSwzNyBAQAor TE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRo ZXIgPSAwOworCitDUkVBVEUgVEFCTEUgcHRhYiAoaWQgaW50ZWdlciwgdmFsIHRleHQpIFdJVEgg KGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFsd2F5 c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IGZhbHNlOworCistLSBOb3QgcHJlcGFyZWQsIHNvIGFk dmljZSBzaG91bGQgYmUgZ2VuZXJhdGVkLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgCitTRUxFQ1QgKiBGUk9NIHB0YWI7CisKKy0tIFByZXBhcmVkLCBzbyBhZHZpY2Ugc2hvdWxk IG5vdCBiZSBnZW5lcmF0ZWQuCitQUkVQQVJFIHB0MSBBUyBTRUxFQ1QgKiBGUk9NIHB0YWI7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBFWEVDVVRFIHB0MTsKKworU0VUIHBnX3Bs YW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWU7CisKKy0tIFByZXBh cmVkLCBidXQgYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gdHJ1ZSwgc28gc2hvdWxkIHNo b3cgYWR2aWNlLgorUFJFUEFSRSBwdDIgQVMgU0VMRUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgRVhFQ1VURSBwdDI7CisKKy0tIE5vdCBwcmVwYXJlZCwg c28gZmVlZGJhY2sgc2hvdWxkIGJlIGdlbmVyYXRlZC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hbHdh eXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSBmYWxzZTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnU0VRX1NDQU4ocHRhYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSAKK1NFTEVDVCAqIEZS T00gcHRhYjsKKworLS0gUHJlcGFyZWQsIHNvIGFkdmljZSBzaG91bGQgbm90IGJlIGdlbmVyYXRl ZC4KK1BSRVBBUkUgcHQzIEFTIFNFTEVDVCAqIEZST00gcHRhYjsKK0VYUExBSU4gKENPU1RTIE9G RikgRVhFQ1VURSBwdDE7CisKK1NFVCBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNl X2RldGFpbHMgPSB0cnVlOworCistLSBQcmVwYXJlZCwgYnV0IGFsd2F5c19zdG9yZV9hZHZpY2Vf ZGV0YWlscyA9IHRydWUsIHNvIHNob3VsZCBzaG93IGZlZWRiYWNrLgorUFJFUEFSRSBwdDQgQVMg U0VMRUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgRVhF Q1VURSBwdDI7CisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4u c3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRmYzQ5NGM3ZDhlCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwKQEAgLTAsMCArMSwxOTUgQEAKK0xP QUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVy ID0gMDsKK1NFVCBzZXFfcGFnZV9jb3N0ID0gMC4xOworU0VUIHJhbmRvbV9wYWdlX2Nvc3QgPSAw LjE7CitTRVQgY3B1X3R1cGxlX2Nvc3QgPSAwOworU0VUIGNwdV9pbmRleF90dXBsZV9jb3N0ID0g MDsKKworQ1JFQVRFIFRBQkxFIHNjYW5fdGFibGUgKGEgaW50IHByaW1hcnkga2V5LCBiIHRleHQp CisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gc2Nhbl90 YWJsZQorCVNFTEVDVCBnLCAnc29tZSB0ZXh0ICcgfHwgZyBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LCAxMDAwMDApIGc7CitDUkVBVEUgSU5ERVggc2Nhbl90YWJsZV9iIE9OIHNjYW5fdGFibGUgVVNJ TkcgYnJpbiAoYik7CitWQUNVVU0gQU5BTFlaRSBzY2FuX3RhYmxlOworCistLSBTZXF1ZW50aWFs IHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZTsKKworLS0gSW5kZXggc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworCistLSBJbmRleC1vbmx5 IHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nh bl90YWJsZSBXSEVSRSBhID0gMTsKKworLS0gQml0bWFwIGhlYXAgc2NhbgorRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ ICdzb21lIHRleHQgOCc7CisKKy0tIFRJRCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisK Ky0tIFRJRCByYW5nZSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICco MiwxKSc7CisKKy0tIFRyeSBmb3JjaW5nIGVhY2ggb2Ygb3VyIHRlc3QgcXVlcmllcyB0byB1c2Ug dGhlIHNjYW4gdHlwZSB0aGV5CistLSB3YW50ZWQgdG8gdXNlIGFueXdheS4gVGhpcyBzaG91bGQg c3VjY2VlZC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFf U0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGU7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hF UkUgYiA+ICdzb21lIHRleHQgOCc7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J1RJRF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBjdGlkID0gJygwLDEpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJF IGN0aWQgPiAnKDEsMSknIEFORCBjdGlkIDwgJygyLDEpJzsKK0NPTU1JVDsKKworLS0gVHJ5IHRv IGZvcmNlIGEgZnVsbCBzY2FuIG9mIHRoZSB0YWJsZSB0byB1c2Ugc29tZSBvdGhlciBzY2FuIHR5 cGUuIEFsbAorLS0gb2YgdGhlc2Ugd2lsbCBmYWlsLiBBbiBpbmRleCBzY2FuIG9yIGJpdG1hcCBo ZWFwIHNjYW4gY291bGQgcG90ZW50aWFsbHkKKy0tIGdlbmVyYXRlIHRoZSBjb3JyZWN0IGFuc3dl ciwgYnV0IHRoZSBwbGFubmVyIGRvZXMgbm90IGV2ZW4gY29uc2lkZXIgdGhlc2UKKy0tIHBvc3Np YmlsaXRpZXMgZHVlIHRvIHRoZSBsYWNrIG9mIGEgV0hFUkUgY2xhdXNlLgorQkVHSU47CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2Fu X3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5E RVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxl KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGU7CitDT01NSVQ7CisKKy0tIFRyeSBhZ2FpbiB0byBmb3JjZSBpbmRleCB1c2UuIFRoaXMg c2hvdWxkIG5vdyBzdWNjZWVkIGZvciB0aGUgSU5ERVhfU0NBTgorLS0gYW5kIEJJVE1BUF9IRUFQ X1NDQU4sIGJ1dCB0aGUgSU5ERVhfT05MWV9TQ0FOIGNhbid0IGJlIGZvcmNlZCBiZWNhdXNlIHRo ZQorLS0gcXVlcnkgZmV0Y2hlcyBjb2x1bW5zIG5vdCBpbmNsdWRlZCBpbiB0aGUgaW5kZXguCitC RUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2Fu X3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxl X3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CitDT01NSVQ7 CisKKy0tIFdlIGNhbiBmb3JjZSBhIHByaW1hcnkga2V5IGxvb2t1cCB0byB1c2UgYSBzZXF1ZW50 aWFsIHNjYW4sIGJ1dCB3ZQorLS0gY2FuJ3QgZm9yY2UgaXQgdG8gdXNlIGFuIGluZGV4LW9ubHkg c2NhbiAoZHVlIHRvIHRoZSBjb2x1bW4gbGlzdCkKKy0tIG9yIGEgVElEIHNjYW4gKGR1ZSB0byB0 aGUgYWJzZW5jZSBvZiBhIFRJRCBxdWFsKS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxl IHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01N SVQ7CisKKy0tIFdlIGNhbiBmb3JjaWJseSBkb3duZ3JhZGUgYW4gaW5kZXgtb25seSBzY2FuIHRv IGFuIGluZGV4IHNjYW4sIGJ1dCB3ZSBjYW4ndAorLS0gZm9yY2UgdGhlIHVzZSBvZiBhbiBpbmRl eCB0aGF0IHRoZSBwbGFubmVyIHRoaW5rcyBpcyBpbmFwcGxpY2FibGUuCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5f dGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9T Q0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisK Ky0tIFdlIGNhbiBmb3JjZSB0aGUgdXNlIG9mIGEgc2VxdWVudGlhbCBzY2FuIGluIHBsYWNlIG9m IGEgYml0bWFwIGhlYXAgc2NhbiwKKy0tIGJ1dCBhIHBsYWluIGluZGV4IHNjYW4gb24gYSBCUklO IGluZGV4IGlzIG5vdCBwb3NzaWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4 dCA4JzsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2Fu X3RhYmxlIHNjYW5fdGFibGVfYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBXZSBj YW4gZm9yY2UgdGhlIHVzZSBvZiBhIHNlcXVlbnRpYWwgc2NhbiByYXRoZXIgdGhhbiBhIFRJRCBz Y2FuIG9yCistLSBUSUQgcmFuZ2Ugc2Nhbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwx KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CitDT01NSVQ7 CisKKy0tIFRlc3QgbW9yZSBjb21wbGV4IHNjZW5hcmlvcyB3aXRoIGluZGV4IHNjYW5zLgorQkVH SU47CistLSBTaG91bGQgc3RpbGwgd29yayBpZiB3ZSBtZW50aW9uIHRoZSBzY2hlbWEuCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJs aWMuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CistLSBCdXQgbm90IGlmIHdlIG1l bnRpb24gdGhlIHdyb25nIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIGNpbGJ1cC5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVS RSBhID0gMTsKKy0tIEl0J3MgT0sgdG8gcmVwZWF0IHRoZSBzYW1lIGFkdmljZS4KK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFi bGVfcGtleSBzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworLS0g QnV0IGl0IGRvZXNuJ3Qgd29yayBpZiB0aGUgaW5kZXggdGFyZ2V0IGlzIGV2ZW4gbm90aW9uYWxs eSBkaWZmZXJlbnQuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1ND QU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkgc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFRlc3QgYXNzb3J0ZWQgaW5j b3JyZWN0IGFkdmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTihub3RoaW5nKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUg YSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nh bl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNU IGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUg YSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NB TihzY2FuX3RhYmxlIGJvZ3VzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFRlc3Qg b3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGFs aWFzLgorQkVHSU47CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBn ID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTAp IGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNj YW5fdGFibGUgcyBPTiBnID0gcy5hOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBz IE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpIFNFUV9TQ0FOKHMj MiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdl bmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkg eAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKK0NPTU1JVDsKKworLS0g VGVzdCBvdXIgYWJpbGl0eSB0byByZWZlciB0byBzY2FucyB3aXRoaW4gYSBzdWJxdWVyeS4KK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CitCRUdJTjsKKy0tIFNob3VsZCBub3QgbWF0Y2gu CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg cyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CistLSBTaG91bGQgbWF0Y2ggZmlyc3QgcXVlcnkgb25s eS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc0B4KSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworLS0gU2hvdWxkIG1hdGNoIHNlY29uZCBxdWVy eSBvbmx5LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzQHVu bmFtZWRfc3VicXVlcnkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQg MCkgeDsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CitDT01NSVQ7 CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zZW1pam9pbi5zcWwgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zZW1pam9pbi5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVhNGFlNTJkMWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2VtaWpvaW4uc3FsCkBAIC0wLDAgKzEsMTE4IEBACitM T0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhl ciA9IDA7CisKK0NSRUFURSBUQUJMRSBzal93aWRlICgKKwlpZCBpbnRlZ2VyIHByaW1hcnkga2V5 LAorCXZhbDEgaW50ZWdlciwKKwlwYWRkaW5nIHRleHQgc3RvcmFnZSBwbGFpbgorKSBXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBzal93aWRlCisJU0VMRUNU IGcsIGclMTArMSwgcmVwZWF0KCcgJywgMzAwKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAw KSBnOworQ1JFQVRFIElOREVYIE9OIHNqX3dpZGUgKHZhbDEpOworVkFDVVVNIEFOQUxZWkUgc2pf d2lkZTsKKworQ1JFQVRFIFRBQkxFIHNqX25hcnJvdyAoCisJaWQgaW50ZWdlciBwcmltYXJ5IGtl eSwKKwl2YWwxIGludGVnZXIKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOwor SU5TRVJUIElOVE8gc2pfbmFycm93CisJU0VMRUNUIGcsIGclMTArMSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCAxMDAwKSBnOworQ1JFQVRFIElOREVYIE9OIHNqX25hcnJvdyAodmFsMSk7CitWQUNV VU0gQU5BTFlaRSBzal9uYXJyb3c7CisKKy0tIFdlIGV4cGVjdCB0aGlzIHRvIG1ha2UgdGhlIFZB TFVFUyBsaXN0IHVuaXF1ZSBhbmQgdXNlIGluZGV4IGxvb2t1cHMgdG8KKy0tIGZpbmQgdGhlIHJv d3MgaW4gc2pfd2lkZSwgc28gYXMgdG8gYXZvaWQgYSBmdWxsIHNjYW4gb2Ygc2pfd2lkZS4KK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX3dpZGUKKwlX SEVSRSAoaWQsIHZhbDEpIElOIChWQUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQp LCAoNSwgNSkpOworCistLSBJZiB3ZSBhc2sgZm9yIGEgdW5pcXVlIHNlbWlqb2luLCB3ZSBzaG91 bGQgZ2V0IHRoZSBzYW1lIHBsYW4gYXMgd2l0aAorLS0gbm8gYWR2aWNlLiBJZiB3ZSBhc2sgZm9y IGEgbm9uLXVuaXF1ZSBzZW1pam9pbiwgd2Ugc2hvdWxkIHNlZSBhIFNlbWkKKy0tIEpvaW4gb3Bl cmF0aW9uIGluIHRoZSBwbGFuIHRyZWUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX3dpZGUKKwlXSEVSRSAoaWQsIHZh bDEpIElOIChWQUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKCIq VkFMVUVTKiIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIHNqX3dpZGUKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxVRVMgKDEsIDEpLCAoMiwgMiks ICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworQ09NTUlUOworCistLSBCZWNhdXNlIHRoaXMgdGFi bGUgaXMgbmFycm93ZXIgdGhhbiB0aGUgcHJldmlvdXMgb25lLCBhIHNlcXVlbnRpYWwgc2Nhbgor LS0gaXMgbGVzcyBleHBlbnNpdmUsIGFuZCB3ZSBjaG9vc2UgYSBzdHJhaWdodGZvcndhcmQgU2Vt aSBKb2luIHBsYW4gYnkKKy0tIGRlZmF1bHQuIChOb3RlIHRoYXQgdGhpcyBpcyBhbHNvIHZlcnkg c2Vuc2l0aXZlIHRvIHRoZSBsZW5ndGggb2YgdGhlIElOCistLSBsaXN0LCB3aGljaCBhZmZlY3Rz IGhvdyBtYW55IGluZGV4IGxvb2t1cHMgdGhlIGFsdGVybmF0aXZlIHBsYW4gd2lsbCBuZWVkLikK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25hcnJv dworCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAo NCwgNCksICg1LCA1KSk7CisKKy0tIEhlcmUsIHdlIGV4cGVjdCBhZHZpc2luZyBhIHVuaXF1ZSBz ZW1pam9pbiB0byBzd2l0aCB0byB0aGUgc2FtZSBwbGFuIHRoYXQKKy0tIHdlIGdvdCB3aXRoIHNq X3dpZGUsIGFuZCBhZHZpc2luZyBhIG5vbi11bmlxdWUgc2VtaWpvaW4gc2hvdWxkIG5vdCBjaGFu Z2UKKy0tIHRoZSBwbGFuLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ3NlbWlqb2luX3VuaXF1ZSgiKlZBTFVFUyoiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBzal9uYXJyb3cKKwlXSEVSRSAoaWQsIHZhbDEpIElO IChWQUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKCIqVkFMVUVT KiIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNq X25hcnJvdworCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMs IDMpLCAoNCwgNCksICg1LCA1KSk7CitDT01NSVQ7CisKKy0tIEluIHRoZSBhYm92ZSBleGFtcGxl LCB3ZSBtYWRlIHRoZSBvdXRlciBzaWRlIG9mIHRoZSBqb2luIHVuaXF1ZSwgYnV0IGhlcmUsCist LSB3ZSBzaG91bGQgbWFrZSB0aGUgaW5uZXIgc2lkZSB1bmlxdWUuCitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBn CisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworCistLSBXZSBz aG91bGQgYmUgYWJsZSB0byBmb3JjZSBhIHBsYW4gd2l0aCBvciB3aXRob3V0IHRoZSBtYWtlLXVu aXF1ZSBzdHJhdGVneSwKKy0tIHdpdGggZWl0aGVyIHNpZGUgYXMgdGhlIGRyaXZpbmcgdGFibGUu CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5p cXVlKHNqX25hcnJvdyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVj dCB2YWwxIGZyb20gc2pfbmFycm93KTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnc2VtaWpvaW5fbm9uX3VuaXF1ZShzal9uYXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAg ICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShzal9uYXJyb3cpIGpvaW5fb3Jk ZXIoc2pfbmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0 IHZhbDEgZnJvbSBzal9uYXJyb3cpOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdzZW1pam9pbl9ub25fdW5pcXVlKHNqX25hcnJvdykgam9pbl9vcmRlcihzal9uYXJyb3cpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRl X3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25h cnJvdyk7CitDT01NSVQ7CisKKy0tIEhvd2V2ZXIsIG1lbnRpb25pbmcgdGhlIHdyb25nIHNpZGUg b2YgdGhlIGpvaW4gc2hvdWxkIHJlc3VsdCBpbiBhbiBhZHZpY2UKKy0tIGZhaWx1cmUuCitCRUdJ TjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKGcp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVy YXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNq X25hcnJvdyk7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25v bl91bmlxdWUoZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2 YWwxIGZyb20gc2pfbmFycm93KTsKK0NPTU1JVDsKKworLS0gVGVzdCBjb25mbGljdGluZyBhZHZp Y2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5f dW5pcXVlKHNqX25hcnJvdykgc2VtaWpvaW5fbm9uX3VuaXF1ZShzal9uYXJyb3cpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7 CitDT01NSVQ7CisKKy0tIFRyeSBhcHBseWluZyBTRU1JSk9JTl9VTklRVUUoKSB0byBhIG5vbi1z ZW1pam9pbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1p am9pbl91bmlxdWUoZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZywgc2pfbmFycm93IHMgV0hFUkUgZyA9 IHMudmFsMTsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3Fs L3N5bnRheC5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zeW50YXguc3FsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NmE1ZDU0ZTJiNQotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3N5bnRheC5zcWwKQEAgLTAsMCAr MSw2OCBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworCistLSBBbiBlbXB0eSBzdHJpbmcgaXMg YWxsb3dlZC4gRW1wdHkgdGFyZ2V0IGxpc3RzIGFyZSBhbGxvd2VkIGZvciBtb3N0IGFkdmljZQor LS0gdGFncywgYnV0IG5vdCBmb3IgSk9JTl9PUkRFUi4gIlN1cHBsaWVkIFBsYW4gQWR2aWNlIiBz aG91bGQgYmUgb21pdHRlZCBpbgorLS0gdGV4dCBmb3JtYXQgd2hlbiB0aGVyZSBpcyBubyBhY3R1 YWwgYWR2aWNlLCBidXQgbm90IGluIG5vbi10ZXh0IGZvcm1hdC4KK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxF Q1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIEZPUk1BVCBKU09OKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUigpJzsKKworLS0gVGVzdCBhc3NvcnRlZCB2YXJp YXRpb25zIGluIGNhcGl0YWxpemF0aW9uLCB3aGl0ZXNwYWNlLCBhbmQgd2hpY2ggcGFydHMgb2YK Ky0tIHRoZSByZWxhdGlvbiBpZGVudGlmaWVyIGFyZSBpbmNsdWRlZC4gVGhlc2Ugc2hvdWxkIGFs bCB3b3JrLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTih4KSc7CitFWFBM QUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdz ZXFfc2Nhbih4QHkpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9zY2FuKHgjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBT RUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4gKHgveSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnICBTRVFfU0NBTiAoIHggLyB5IC4geiApICAnOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxF Q1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIngiIzIvInkiLiJ6 IkAidCIpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisKKy0tIFN5bnRheCBlcnJv cnMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUVVFTlRJQUxfU0NBTih4KSc7CitT RVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOJzsKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnU0VRX1NDQU4oJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VR X1NDQU4oIic7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCIiKSc7CitT RVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCJhIic7CitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCMnOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICcoKSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJzEyMyc7CisKKy0tIFRhZ3MgbGlr ZSBTRVFfU0NBTiBhbmQgTk9fR0FUSEVSIGRvbid0IGFsbG93IHN1Ymxpc3RzIGF0IGFsbDsgb3Ro ZXIgdGFncywKKy0tIGV4Y2VwdCBmb3IgSk9JTl9PUkRFUiwgYWxsb3cgYXQgbW9zdCBvbmUgbGV2 ZWwgb2Ygc3VibGlzdC4gSGVuY2UsIHRoZXNlCistLSBleGFtcGxlcyBzaG91bGQgZXJyb3Igb3V0 LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigoeCkpJzsKK1NFVCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnR0FUSEVSKCgoeCkpKSc7CisKKy0tIExlZ2FsIGNvbW1lbnRz LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKiovJzsKK0VYUExBSU4gKENPU1RTIE9G RikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihfKS8q KiovJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJy8qIGNvbW1lbnQgKi8gSEFTSF9KT0lOKC8qeCoveSknOworRVhQTEFJTiAoQ09T VFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyogY29tbWVu dCAqLyBIQVNIX0pPSU4oeS8vKngqL3opJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7 CisKKy0tIFVudGVybWluYXRlZCBjb21tZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnLyonOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKCJmT08iKSAv KiBvb3BzJzsKKworLS0gTmVzdGVkIGNvbW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLCBzbyB0aGUg Zmlyc3Qgb2YgdGhlc2UgaXMgbGVnYWwgYW5kCistLSB0aGUgc2Vjb25kIGlzIG5vdC4KK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKi8nOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxF Q1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKiBzdHVmZiAqLyovJzsKKwor LS0gRm9yZWlnbiBqb2luIHJlcXVpcmVzIG11bHRpcGxlIHJlbGF0aW9uIGlkZW50aWZpZXJzLgor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oYSknOworU0VUIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGEpKSc7CmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3QvMDAxX3JlZ3Jlc3MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjY3NTk1Y2RkZjc1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS90LzAwMV9yZWdyZXNzLnBsCkBAIC0wLDAgKzEsMTQ4IEBACisjIENvcHlyaWdodCAoYykgMjAy MS0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFJ1biB0aGUg Y29yZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIHBnX3BsYW5fYWR2aWNlIHRvIGNoZWNrIGZvciBw cm9ibGVtcy4KK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3Vz ZSBDd2QgICAgICAgICAgICBxdyhhYnNfcGF0aCk7Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcoZGly bmFtZSk7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6 OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgSW5pdGlhbGl6ZSB0aGUgcHJpbWFy eSBub2RlCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicp OworJG5vZGUtPmluaXQoKTsKKworIyBTZXQgdXAgb3VyIGRlc2lyZWQgY29uZmlndXJhdGlvbi4K KyMKKyMgV2UgcnVuIHdpdGggcGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQg c2V0IHRvIGVuc3VyZSB0aGF0IHRoZQorIyBwbGFuIHRyZWUgd2Fsa2VyIGNvZGUgcnVucyBhZ2Fp bnN0IGV2ZXJ5IHF1ZXJ5IGluIHRoZSByZWdyZXNzaW9uIHRlc3RzLiBJZgorIyB3ZSdyZSB1bmFi bGUgdG8gcHJvcGVybHkgYW5hbHl6ZSBhbnkgb2YgdGhvc2UgcGxhbiB0cmVlcywgdGhpcyB0ZXN0 IHNob3VsZCBmYWlsLgorIworIyBXZSBzZXQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlIHRvIGFuIGFk dmljZSBzdHJpbmcgdGhhdCB3aWxsIGNhdXNlIHRoZSBhZHZpY2UKKyMgdHJvdmUgdG8gYmUgcG9w dWxhdGVkIHdpdGggYSBmZXcgZW50cmllcyBvZiB2YXJpb3VzIHNvcnRzLCBidXQgd2hpY2ggd2Ug ZG8KKyMgbm90IGV4cGVjdCB0byBtYXRjaCBhbnl0aGluZyBpbiB0aGUgcmVncmVzc2lvbiB0ZXN0 IHF1ZXJpZXMuIFRoaXMgd2F5LCB0aGUKKyMgcGxhbm5lciBob29rcyB3aWxsIGJlIGNhbGxlZCwg aW1wcm92aW5nIGNvZGUgY292ZXJhZ2UsIGJ1dCBubyBwbGFucyBzaG91bGQKKyMgYWN0dWFsbHkg Y2hhbmdlLgorIworIyBwZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZp Y2U9ZmFsc2UgaXMgbmVlZGVkIHRvIGF2b2lkIGJyZWFraW5nCisjIHJlZ3Jlc3Npb24gdGVzdCBx dWVyaWVzIHRoYXQgdXNlIEVYUExBSU4uIEluIHRoZSByZWFsIHdvcmxkLCBpdCBzZWVtcyBsaWtl CisjIHVzZXJzIHdpbGwgd2FudCBFWFBMQUlOIG91dHB1dCB0byBzaG93IHN1cHBsaWVkIGFkdmlj ZSBzbyB0aGF0IGl0J3MgY2xlYXIKKyMgd2hldGhlciBub3JtYWwgcGxhbm5lciBiZWhhdmlvciBo YXMgYmVlbiBhbHRlcmVkLCBidXQgaGVyZSB0aGF0J3MgdW5kZXNpcmFibGUuCiskbm9kZS0+YXBw ZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsIDw8RU9NKTsKK3BnX3BsYW5fYWR2aWNlLnNoYXJl ZF9jb2xsZWN0aW9uX2xpbWl0PTEwMDAwMDAKK3BnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0 b3I9dHJ1ZQorc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzPXBnX3BsYW5fYWR2aWNlCitwZ19wbGFu X2FkdmljZS5hZHZpY2U9J1NFUV9TQ0FOKGVudGlyZWx5X2ZpY3RpdGlvdXMpIEhBU0hfSk9JTih0 b3RhbF9mYWJyaWNhdGlvbikgR0FUSEVSKGNvbXBsZXRlbHlfaW1hZ2luYXJ5KScKK3BnX3BsYW5f YWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZT1mYWxzZQorRU9NCiskbm9kZS0+ c3RhcnQ7CisKK215ICRzcmNkaXIgPSBhYnNfcGF0aCgiLi4vLi4iKTsKKworIyAtLWRscGF0aCBp cyBuZWVkZWQgdG8gYmUgYWJsZSB0byBmaW5kIHRoZSBsb2NhdGlvbiBvZiByZWdyZXNzLnNvCisj IGFuZCBhbnkgbGlicmFyaWVzIHRoZSByZWdyZXNzaW9uIHRlc3RzIHJlcXVpcmUuCitteSAkZGxw YXRoID0gZGlybmFtZSgkRU5We1JFR1JFU1NfU0hMSUJ9KTsKKworIyAtLW91dHB1dGRpciBwb2lu dHMgdG8gdGhlIHBhdGggd2hlcmUgdG8gcGxhY2UgdGhlIG91dHB1dCBmaWxlcy4KK215ICRvdXRw dXRkaXIgPSAkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRtcF9jaGVjazsKKworIyAtLWlucHV0 ZGlyIHBvaW50cyB0byB0aGUgcGF0aCBvZiB0aGUgaW5wdXQgZmlsZXMuCitteSAkaW5wdXRkaXIg PSAiJHNyY2Rpci9zcmMvdGVzdC9yZWdyZXNzIjsKKworIyBSdW4gdGhlIHRlc3RzLgorbXkgJHJj ID0KKyAgc3lzdGVtKCRFTlZ7UEdfUkVHUkVTU30gLiAiICIKKwkgIC4gIi0tYmluZGlyPSAiCisJ ICAuICItLWRscGF0aD1cIiRkbHBhdGhcIiAiCisJICAuICItLWhvc3Q9IiAuICRub2RlLT5ob3N0 IC4gIiAiCisJICAuICItLXBvcnQ9IiAuICRub2RlLT5wb3J0IC4gIiAiCisJICAuICItLXNjaGVk dWxlPSRzcmNkaXIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAiCisJICAuICIt LW1heC1jb25jdXJyZW50LXRlc3RzPTIwICIKKwkgIC4gIi0taW5wdXRkaXI9XCIkaW5wdXRkaXJc IiAiCisJICAuICItLW91dHB1dGRpcj1cIiRvdXRwdXRkaXJcIiIpOworCisjIER1bXAgb3V0IHRo ZSByZWdyZXNzaW9uIGRpZmZzIGZpbGUsIGlmIHRoZXJlIGlzIG9uZQoraWYgKCRyYyAhPSAwKQor eworCW15ICRkaWZmcyA9ICIkb3V0cHV0ZGlyL3JlZ3Jlc3Npb24uZGlmZnMiOworCWlmICgtZSAk ZGlmZnMpCisJeworCQlwcmludCAiPT09IGR1bXBpbmcgJGRpZmZzID09PVxuIjsKKwkJcHJpbnQg c2x1cnBfZmlsZSgkZGlmZnMpOworCQlwcmludCAiPT09IEVPRiA9PT1cbiI7CisJfQorfQorCisj IFJlcG9ydCByZXN1bHRzCitpcygkcmMsIDAsICdyZWdyZXNzaW9uIHRlc3RzIHBhc3MnKTsKKwor IyBDcmVhdGUgdGhlIGV4dGVuc2lvbiBzbyB3ZSBjYW4gYWNjZXNzIHRoZSBjb2xsZWN0b3IKKyRu b2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBFWFRFTlNJT04gcGdfcGxhbl9hZHZp Y2UnKTsKKworIyBWZXJpZnkgdGhhdCBhIGxhcmdlIGFtb3VudCBvZiBhZHZpY2Ugd2FzIGNvbGxl Y3RlZAorbXkgJGFsbF9xdWVyeV9jb3VudCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg PDxFT00pOworU0VMRUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2 aWNlKCk7CitFT00KK2NtcF9vaygkYWxsX3F1ZXJ5X2NvdW50LCAnPicsIDIwMDAwLCAiY29waW91 cyBhZHZpY2UgY29sbGVjdGVkIik7CisKKyMgVmVyaWZ5IHRoYXQgbG90cyBvZiBkaWZmZXJlbnQg YWR2aWNlIHN0cmluZ3Mgd2VyZSBjb2xsZWN0ZWQKK215ICRkaXN0aW5jdF9xdWVyeV9jb3VudCA9 ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworU0VMRUNUIENPVU5UKCopIEZS T00KKwkoU0VMRUNUIERJU1RJTkNUIGFkdmljZSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVk X2FkdmljZSgpKTsKK0VPTQorY21wX29rKCRkaXN0aW5jdF9xdWVyeV9jb3VudCwgJz4nLCAzMDAw LCAiZGl2ZXJzZSBhZHZpY2UgY29sbGVjdGVkIik7CisKKyMgV2Ugd2FudCB0byB0ZXN0IGZvciB0 aGUgcHJlc2VuY2Ugb2Ygb3VyIGtub3duIHRhZ3MgaW4gdGhlIGNvbGxlY3RlZCBhZHZpY2UuCisj IFB1dCBhbGwgdGFncyBpbnRvIHRoZSBoYXNoIHRoYXQgZm9sbG93czsgbWFwIGFueSB0YWdzIHRo YXQgYXJlbid0IHRlc3RlZAorIyBieSB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3RzIHRvIDAsIGFu ZCBvdGhlcnMgdG8gMS4KK215ICV0YWdfbWFwID0gKAorCUJJVE1BUF9IRUFQX1NDQU4gPT4gMSwK KwlGT1JFSUdOX0pPSU4gPT4gMCwKKwlHQVRIRVIgPT4gMSwKKwlHQVRIRVJfTUVSR0UgPT4gMSwK KwlIQVNIX0pPSU4gPT4gMSwKKwlJTkRFWF9PTkxZX1NDQU4gPT4gMSwKKwlJTkRFWF9TQ0FOID0+ IDEsCisJSk9JTl9PUkRFUiA9PiAxLAorCU1FUkdFX0pPSU5fTUFURVJJQUxJWkUgPT4gMSwKKwlN RVJHRV9KT0lOX1BMQUlOID0+IDEsCisJTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUgPT4gMSwKKwlO RVNURURfTE9PUF9NRU1PSVpFID0+IDEsCisJTkVTVEVEX0xPT1BfUExBSU4gPT4gMSwKKwlOT19H QVRIRVIgPT4gMSwKKwlQQVJUSVRJT05XSVNFID0+IDEsCisJU0VNSUpPSU5fTk9OX1VOSVFVRSA9 PiAxLAorCVNFTUlKT0lOX1VOSVFVRSA9PiAxLAorCVNFUV9TQ0FOID0+IDEsCisJVElEX1NDQU4g PT4gMSwKKyk7Citmb3IgbXkgJHRhZyAoc29ydCBrZXlzICV0YWdfbWFwKQoreworCW15ICRjaGVj a2l0ID0gJHRhZ19tYXB7JHRhZ307CisKKwkjIFNlYXJjaCBmb3IgdGhlIGdpdmVuIHRhZy4gVGhp cyBpcyBub3QgZW50aXJlbHkgcm9idXN0OiBpdCBjb3VsZCBnZXQgdGhyb3duCisJIyBvZmYgYnkg YSB0YWJsZSBhbGlhcyBzdWNoIGFzICJGT1JFSUdOX0pPSU4oIiwgYnV0IHRoYXQgcHJvYmFibHkg d29uJ3QKKwkjIGhhcHBlbiBpbiB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3RzLgorCW15ICR0YWdf Y291bnQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8RU9NKTsKK1NFTEVDVCBDT1VO VCgqKSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpCisJV0hFUkUgYWR2aWNl IExJS0UgJyUkdGFnKCUnCitFT00KKworCSMgQ2hlY2sgdGhhdCB0aGUgdGFnIGdvdCBhIG5vbi10 cml2aWFsIGFtb3VudCBvZiB1c2UsIHVubGVzcyB0b2xkIG90aGVyd2lzZS4KKwljbXBfb2soJHRh Z19jb3VudCwgJz4nLCAxMCwgIm11bHRpcGxlIHVzZXMgb2YgJHRhZyIpIGlmICRjaGVja2l0Owor CisJIyBSZWdhcmRsZXNzLCBub3RlIHRoZSBleGFjdCBjb3VudCBpbiB0aGUgbG9nLCBmb3IgaHVt YW4gY29uc3VtcHRpb24uCisJbm90ZSgiZm91bmQgJHRhZ19jb3VudCBhZHZpY2Ugc3RyaW5ncyBj b250YWluaW5nICR0YWciKTsKK30KKworIyBUcmlnZ2VyIGEgcGFydGlhbCBjbGVhbnVwIG9mIHRo ZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciwgYW5kIHRoZW4gYSBmdWxsCisjIGNsZWFudXAuCisk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8RU9NKTsKK1NFVCBwZ19wbGFuX2FkdmljZS5z aGFyZWRfY29sbGVjdGlvbl9saW1pdD01MDA7CitTRUxFQ1QgKiBGUk9NIHBnX2NsZWFyX2NvbGxl Y3RlZF9zaGFyZWRfYWR2aWNlKCk7CitFT00KKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQg YS9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbApp bmRleCAyNGI3MDZiMjlhZC4uYmRkNDg2NWY1M2YgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9j b250cmliLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbApAQCAtMTU2LDYgKzE1 Niw3IEBAIENSRUFURSBFWFRFTlNJT04gPHJlcGxhY2VhYmxlPmV4dGVuc2lvbl9uYW1lPC9yZXBs YWNlYWJsZT47CiAgJnBnZnJlZXNwYWNlbWFwOwogICZwZ2xvZ2ljYWxpbnNwZWN0OwogICZwZ292 ZXJleHBsYWluOworICZwZ3BsYW5hZHZpY2U7CiAgJnBncHJld2FybTsKICAmcGdyb3dsb2NrczsK ICAmcGdzdGF0c3RhdGVtZW50czsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5z Z21sIGIvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwKaW5kZXggYWM2NmZjYmRiNTcuLmQ5MGI0 MzM4ZDJhIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbAorKysgYi9kb2Mv c3JjL3NnbWwvZmlsZWxpc3Quc2dtbApAQCAtMTQ5LDYgKzE0OSw3IEBACiA8IUVOVElUWSBwZ2Zy ZWVzcGFjZW1hcCAgU1lTVEVNICJwZ2ZyZWVzcGFjZW1hcC5zZ21sIj4KIDwhRU5USVRZIHBnbG9n aWNhbGluc3BlY3QgIFNZU1RFTSAicGdsb2dpY2FsaW5zcGVjdC5zZ21sIj4KIDwhRU5USVRZIHBn b3ZlcmV4cGxhaW4gICBTWVNURU0gInBnb3ZlcmV4cGxhaW4uc2dtbCI+Cis8IUVOVElUWSBwZ3Bs YW5hZHZpY2UgICAgU1lTVEVNICJwZ3BsYW5hZHZpY2Uuc2dtbCI+CiA8IUVOVElUWSBwZ3ByZXdh cm0gICAgICAgU1lTVEVNICJwZ3ByZXdhcm0uc2dtbCI+CiA8IUVOVElUWSBwZ3Jvd2xvY2tzICAg ICAgU1lTVEVNICJwZ3Jvd2xvY2tzLnNnbWwiPgogPCFFTlRJVFkgcGdzdGF0c3RhdGVtZW50cyBT WVNURU0gInBnc3RhdHN0YXRlbWVudHMuc2dtbCI+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv cGdwbGFuYWR2aWNlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNnbWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVmYzQyODdkZjk1Ci0tLSAvZGV2L251 bGwKKysrIGIvZG9jL3NyYy9zZ21sL3BncGxhbmFkdmljZS5zZ21sCkBAIC0wLDAgKzEsMTAzNiBA QAorPCEtLSBkb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNnbWwgLS0+CisKKzxzZWN0MSBpZD0i cGdwbGFuYWR2aWNlIiB4cmVmbGFiZWw9InBnX3ByZXdhcm0iPgorIDx0aXRsZT5wZ19wbGFuX2Fk dmljZSAmbWRhc2g7IGhlbHAgdGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuPC90aXRsZT4K KworIDxpbmRleHRlcm0gem9uZT0icGdwbGFuYWR2aWNlIj4KKyAgPHByaW1hcnk+cGdfcGxhbl9h ZHZpY2U8L3ByaW1hcnk+CisgPC9pbmRleHRlcm0+CisKKyA8cGFyYT4KKyAgVGhlIDxmaWxlbmFt ZT5wZ19wbGFuX2FkdmljZTwvZmlsZW5hbWU+IGFsbG93cyBrZXkgcGxhbm5lciBkZWNpc2lvbnMg dG8gYmUKKyAgZGVzY3JpYmVkLCByZXByb2R1Y2VkLCBhbmQgYWx0ZXJlZCB1c2luZyBhIHNwZWNp YWwtcHVycG9zZSAicGxhbiBhZHZpY2UiCisgIG1pbmktbGFuZ3VhZ2UuIEl0IGlzIGludGVuZGVk IHRvIGFsbG93IHN0YWJpbGl6YXRpb24gb2YgcGxhbiBjaG9pY2VzIHRoYXQKKyAgdGhlIHVzZXIg YmVsaWV2ZXMgdG8gYmUgZ29vZCwgYXMgd2VsbCBhcyBleHBlcmltZW50YXRpb24gd2l0aCBwbGFu cyB0aGF0CisgIHRoZSBwbGFubmVyIGJlbGlldmVzIHRvIGJlIG5vbi1vcHRpbWFsLgorIDwvcGFy YT4KKworIDxwYXJhPgorICBOb3RlIHRoYXQsIHNpbmNlIHRoZSBwbGFubmVyIG9mdGVuIG1ha2Vz IGdvb2QgZGVjaXNpb25zLCBvdmVycmlkaW5nIGl0cworICBqdWRnZW1lbnQgY2FuIGVhc2lseSBi YWNrZmlyZS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlCisgIHVuZGVy bHlpbmcgZGF0YSBjaGFuZ2VzLCB0aGUgcGxhbm5lciBub3JtYWxseSBoYXMgdGhlIG9wdGlvbiB0 byBhZGp1c3QgdGhlCisgIHBsYW4gaW4gYW4gYXR0ZW1wdCB0byBwcmVzZXJ2ZSBnb29kIHBlcmZv cm1hbmNlLiBJZiB0aGUgcGxhbiBhZHZpY2UgcHJldmVudHMKKyAgdGhpcywgYSB2ZXJ5IHBvb3Ig cGxhbiBtYXkgYmUgY2hvc2VuLiBJdCBpcyBpbXBvcnRhbnQgdG8gdXNlIHBsYW4gYWR2aWNlCisg IG9ubHkgd2hlbiB0aGUgcmlza3Mgb2YgY29uc3RyYWluaW5nIHRoZSBwbGFubmVyJ3MgY2hvaWNl cyBhcmUgb3V0d2VpZ2hlZCBieQorICB0aGUgYmVuZWZpdHMuCisgPC9wYXJhPgorCisgPHNlY3Qy IGlkPSJwZ3BsYW5hZHZpY2UtZ2V0dGluZy1zdGFydGVkIj4KKyAgPHRpdGxlPkdldHRpbmcgU3Rh cnRlZDwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBJbiBvcmRlciB0byB1c2UgdGhpcyBtb2R1bGUs IHRoZSA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4gbW9kdWxlCisgICBtdXN0IGJl IGxvYWRlZC4gWW91IGNhbiBkbyB0aGlzIG9uIGEgc3lzdGVtLXdpZGUgYmFzaXMgYnkgYWRkaW5n CisgICA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4gdG8KKyAgIDx4cmVmIGxpbmtl bmQ9Imd1Yy1zaGFyZWQtcHJlbG9hZC1saWJyYXJpZXMiLz4gYW5kIHJlc3RhcnRpbmcgdGhlCisg ICBzZXJ2ZXIsIG9yIGJ5IGFkZGluZyBpdCB0bworICAgPHhyZWYgbGlua2VuZD0iZ3VjLXNlc3Np b24tcHJlbG9hZC1saWJyYXJpZXMiLz4gYW5kIHN0YXJ0aW5nIGEgbmV3IHNlc3Npb24sCisgICBv ciBieSBsb2FkaW5nIGl0IGludG8gYW4gaW5kaXZpZHVhbCBzZXNzaW9uIHVzaW5nIHRoZQorICAg PGxpbmsgbGlua2VuZD0ic3FsLWxvYWQiPjxsaXRlcmFsPkxPQUQ8L2xpdGVyYWw+PC9saW5rPiBj b21tYW5kLiBJZiB5b3UKKyAgIHdpc2ggdG8gdXNlIHRoZQorICAgPGxpbmsgbGlua2VuZD0icGdw bGFuYWR2aWNlLWNvbGxlY3RvciI+Y29sbGVjdG9yIGludGVyZmFjZTwvbGluaz4sCisgICB5b3Ug bXVzdCBhbHNvIGluc3RhbGwgdGhlIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBl eHRlbnNpb24KKyAgIGluIHRoZSBkYXRhYmFzZSB3aGVyZSB5b3Ugd2lzaCB0byB1c2UgdGhlIGNv bGxlY3Rvci4gVXNlIHRoZSBjb21tYW5kCisgICA8bGl0ZXJhbD5DUkVBVEUgRVhURU5TSU9OIHBn X3BsYW5fYWR2aWNlPC9saXRlcmFsPiB0byBkbyB0aGlzLiBJZiB5b3UgZG8KKyAgIG5vdCB3aXNo IHRvIHVzZSB0aGUgY29sbGVjdG9yIGludGVyZmFjZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1aXJl ZC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgT25jZSB0aGUgPGxpdGVyYWw+cGdfcGxhbl9h ZHZpY2U8L2xpdGVyYWw+IG1vZHVsZSBpcyBsb2FkZWQsCisgICA8bGluayBsaW5rZW5kPSJzcWwt ZXhwbGFpbiI+PGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD48L2xpbms+IHdpbGwgc3VwcG9ydAor ICAgYSA8bGl0ZXJhbD5QTEFOX0FEVklDRTwvbGl0ZXJhbD4gb3B0aW9uLiBZb3UgY2FuIHVzZSB0 aGlzIG9wdGlvbiB0byBzZWUKKyAgIGEgcGxhbiBhZHZpY2Ugc3RyaW5nIGZvciB0aGUgY2hvc2Vu IHBsYW4uIEZvciBleGFtcGxlOgorICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisgICAgICAgIFNFTEVDVCAqIEZST00gam9pbl9m YWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICBR VUVSWSBQTEFOCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpv aW4KKyAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBq b2luX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2Rp bSBkCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNI X0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIE5PX0dBVEhFUihmIGQpCis8L3Byb2dyYW1s aXN0aW5nPgorCisgIDxwYXJhPgorICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgdXNlciBoYXMgbm90 IHNwZWNpZmllZCBhbnkgYWR2aWNlOyBpbnN0ZWFkLCB0aGUKKyAgIHBsYW5uZXIgaGFzIGJlZW4g cGVybWl0dGVkIHRvIG1ha2Ugd2hhdGV2ZXIgZGVjaXNpb25zIGl0IHRoaW5rcyBiZXN0LCBhbmQK KyAgIHRob3NlIGRlY2lzaW9ucyBhcmUgbWVtb3JpYWxpemVkIGluIHRoZSBmb3JtIG9mIGFuIGFk dmljZSBzdHJpbmcuCisgICA8bGl0ZXJhbD5KT0lOX09SREVSKGYgZCk8L2xpdGVyYWw+IG1lYW5z IHRoYXQgPGxpdGVyYWw+ZjwvbGl0ZXJhbD4gc2hvdWxkCisgICBiZSB0aGUgZHJpdmluZyB0YWJs ZSwgYW5kIHRoZSBmaXJzdCB0YWJsZSB0byB3aGljaCBpdCBzaG91bGQgYmUgam9pbmVkIGlzCisg ICA8bGl0ZXJhbD5kPC9saXRlcmFsPi4gPGxpdGVyYWw+SEFTSF9KT0lOKGQpPC9saXRlcmFsPiBt ZWFucyB0aGF0CisgICA8bGl0ZXJhbD5kPC9saXRlcmFsPiBzaG91bGQgYXBwZWFyIG9uIHRoZSBp bm5lciBzaWRlIG9mIGEgaGFzaCBqb2luLgorICAgPGxpdGVyYWw+U0VRX1NDQU4oZiBkKTwvbGl0 ZXJhbD4gbWVhbnMgdGhhdCBib3RoIDxsaXRlcmFsPmY8L2xpdGVyYWw+CisgICBhbmQgPGxpdGVy YWw+ZDwvbGl0ZXJhbD4gc2hvdWxkIGJlIGFjY2Vzc2VkIHZpYSBhIHNlcXVlbnRpYWwgc2Nhbi4K KyAgIDxsaXRlcmFsPk5PX0dBVEhFUihmIGQpPC9saXRlcmFsPiBtZWFucyB0aGF0IG5laXRoZXIg PGxpdGVyYWw+ZjwvbGl0ZXJhbD4KKyAgIG5vciA8bGl0ZXJhbD5kPC9saXRlcmFsPiBzaG91bGQg YXBwZWFyIGJlbmVhdGggYSA8bGl0ZXJhbD5HYXRoZXI8L2xpdGVyYWw+CisgICBvciA8bGl0ZXJh bD5HYXRoZXIgTWVyZ2U8L2xpdGVyYWw+IG5vZGUuIEZvciBtb3JlIGRldGFpbHMgb24gdGhlIHBs YW4KKyAgIGFkdmljZSBtaW5pLWxhbmd1YWdlLCBzZWUgdGhlIGluZm9ybWF0aW9uIG9uCisgICA8 bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UtdGFyZ2V0cyI+YWR2aWNlIHRhcmdldHM8L2xpbms+ IGFuZAorICAgPGxpbmsgbGlua2VuZD0icGdwbGFuYWR2aWNlLXRhZ3MiPmFkdmljZSB0YWdzPC9s aW5rPiwgYmVsb3cuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIElmIHlvdSB3YW50IHRvIHNl ZSB0aGUgYWR2aWNlIHN0cmluZ3MgZm9yIGEgbGFyZ2UgbnVtYmVyIG9mIHF1ZXJpZXMsIG9yCisg ICBhbiBlbnRpcmUgd29ya2xvYWQsIHJ1bm5pbmcgPGxpdGVyYWw+RVhQTEFJTiAoUExBTl9BRFZJ Q0UpPC9saXRlcmFsPiBmb3IKKyAgIGVhY2ggb25lIG1heSBub3QgYmUgY29udmVuaWVudC4gSW4g c3VjaCBzaXR1YXRpb25zLCBpdCBjYW4gYmUgbW9yZQorICAgY29udmVuaWVudCB0byB1c2UgYW4K KyAgIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZS1jb2xsZWN0b3IiPmFkdmljZSBjb2xsZWN0 b3I8L2xpbms+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBPbmNlIHlvdSBoYXZlIGFuIGFk dmljZSBzdHJpbmcgZm9yIGEgcXVlcnksIHlvdSBjYW4gdXNlIGl0IHRvIGNvbnRyb2wgaG93Cisg ICB0aGF0IHF1ZXJ5IGlzIHBsYW5uZWQuIFlvdSBjYW4gZG8gdGhpcyBieSBzZXR0aW5nCisgICA8 bGl0ZXJhbD5wZ19wbGFuX2FkdmljZS5hZHZpY2U8L2xpdGVyYWw+IHRvIHRoZSBhZHZpY2Ugc3Ry aW5nIHlvdSd2ZQorICAgY2hvc2VuLiBUaGlzIGNhbiBiZSBhbiBhZHZpY2Ugc3RyaW5nIHRoYXQg d2FzIGdlbmVyYXRlZCBieSB0aGUgc3lzdGVtLAorICAgb3Igb25lIHlvdSd2ZSB3cml0dGVuIHlv dXJzZWxmLiBPbmUgZ29vZCB3YXkgb2YgY3JlYXRpbmcgeW91ciBvd24gYWR2aWNlCisgICBzdHJp bmcgaXMgdG8gdGFrZSB0aGUgc3RyaW5nIGdlbmVyYXRlZCBieSB0aGUgc3lzdGVtIGFuZCBwaWNr IG91dCBqdXN0CisgICB0aG9zZSBlbGVtZW50cyB0aGF0IHlvdSB3aXNoIHRvIGVuZm9yY2UuIElu IHRoZSBleGFtcGxlIGFib3ZlLAorICAgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+ IGVtaXRzIGFkdmljZSBmb3IgdGhlIGpvaW4gb3JkZXIsIHRoZQorICAgam9pbiBtZXRob2QsIHRo ZSBzY2FuIG1ldGhvZCwgYW5kIHRoZSB1c2Ugb2YgcGFyYWxsZWxpc20sIGJ1dCB5b3UgbWlnaHQK KyAgIG9ubHkgd2FudCB0byBjb250cm9sIHRoZSBqb2luIG9yZGVyOgorICA8L3BhcmE+CisKKzxw cm9ncmFtbGlzdGluZz4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUihm IGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRikKKyAgICAgICAgU0VMRUNUICogRlJPTSBqb2luX2Zh Y3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgIFFV RVJZIFBMQU4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9p bgorICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpv aW5fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGlt IGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKSAvKiBtYXRjaGVk ICovCis8L3Byb2dyYW1saXN0aW5nPgorCisgIDxwYXJhPgorICAgU2luY2UgdGhlIDxsaXRlcmFs PlBMQU5fQURWSUNFPC9saXRlcmFsPiBvcHRpb24gdG8KKyAgIDxsaXRlcmFsPkVYUExBSU48L2xp dGVyYWw+IHdhcyBub3Qgc3BlY2lmaWVkLCBubyBhZHZpY2Ugc3RyaW5nIGlzIGdlbmVyYXRlZAor ICAgZm9yIHRoZSBwbGFuLiBIb3dldmVyLCB0aGUgc3VwcGxpZWQgcGxhbiBhZHZpY2UgaXMgc3Rp bGwgc2hvd24gc28gdGhhdAorICAgYW55b25lIGxvb2tpbmcgYXQgdGhlIDxsaXRlcmFsPkVYUExB SU48L2xpdGVyYWw+IG91dHB1dCBrbm93cyB0aGF0IHRoZQorICAgY2hvc2VuIHBsYW4gd2FzIGlu Zmx1ZW5jZWQgYnkgcGxhbiBhZHZpY2UuIElmIGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkCisg ICBwbGFuIGFkdmljZSBpcyBub3QgZGVzaXJlZCwgaXQgY2FuIGJlIHN1cHByZXNzZWQgYnkgY29u ZmlndXJpbmcKKyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBs aWVkX2FkdmljZSA9IGZhbHNlPC9saXRlcmFsPi4KKyAgIEZvciBlYWNoIHBpZWNlIG9mIHN1cHBs aWVkIGFkdmljZSwgdGhlIG91dHB1dCBzaG93cworICAgPGxpbmsgbGlua2VuZD0icGdwbGFuYWR2 aWNlLWZlZWRiYWNrIj5hZHZpY2UgZmVlZGJhY2s8L2xpbms+IGluZGljYXRpbmcKKyAgIHdoZXRo ZXIgb3Igbm90IHRoZSBhZHZpY2Ugd2FzIHN1Y2Nlc3NmdWxseSBhcHBsaWVkIHRvIHRoZSBxdWVy eS4gSW4gdGhpcworICAgY2FzZSwgdGhlIGZlZWRiYWNrIHNheXMgPGxpdGVyYWw+LyogbWF0Y2hl ZCAqLzwvbGl0ZXJhbD4sIHdoaWNoIG1lYW5zIHRoYXQKKyAgIDxsaXRlcmFsPmY8L2xpdGVyYWw+ IGFuZCA8bGl0ZXJhbD5kPC9saXRlcmFsPiB3ZXJlIGZvdW5kIGluIHRoZSBxdWVyeSBhbmQKKyAg IHRoYXQgdGhlIHJlc3VsdGluZyBxdWVyeSBwbGFuIGNvbmZvcm1zIHRvIHRoZSBzcGVjaWZpZWQg YWR2aWNlLgorICA8L3BhcmE+CisKKyA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJwZ3BsYW5hZHZp Y2UtaG93LWl0LXdvcmtzIj4KKyAgPHRpdGxlPkhvdyBJdCBXb3JrczwvdGl0bGU+CisKKyAgPHBh cmE+CisgICBQbGFuIGFkdmljZSBpcyB3cml0dGVuIGltcGVyYXRpdmVseTsgdGhhdCBpcywgaXQg c3BlY2lmaWVzIHdoYXQgc2hvdWxkIGJlCisgICBkb25lLiBIb3dldmVyLCBhdCBhbiBpbXBsZW1l bnRhdGlvbiBsZXZlbCwKKyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiB3b3Jr cyBieSB0ZWxsaW5nIHRoZSBjb3JlIHBsYW5uZXIgd2hhdAorICAgc2hvdWxkIG5vdCBiZSBkb25l LiBJbiBvdGhlciB3b3JkcywgaXQgb3BlcmF0ZXMgYnkgY29uc3RyYWluaW5nIHRoZQorICAgcGxh bm5lcidzIGNob2ljZXMsIG5vdCBieSByZXBsYWNpbmcgaXQuIFRoZXJlZm9yZSwgbm8gbWF0dGVy IHdoYXQgYWR2aWNlCisgICB5b3UgcHJvdmlkZSwgeW91IHdpbGwgb25seSBldmVyIGdldCBhIHBs YW4gdGhhdCB0aGUgY29yZSBwbGFubmVyIHdvdWxkIGhhdmUKKyAgIGNvbnNpZGVyZWQgZm9yIHRo ZSBxdWVyeSBpbiBxdWVzdGlvbi4gSWYgeW91IGF0dGVtcHQgdG8gZm9yY2Ugd2hhdCB5b3UKKyAg IGJlbGlldmUgdG8gYmUgdGhlIGNvcnJlY3QgcGxhbiBieSBzdXBwbHlpbmcgYW4gYWR2aWNlIHN0 cmluZywgYW5kIHRoZQorICAgcGxhbm5lciBzdGlsbCBmYWlscyB0byBwcm9kdWNlIHRoZSBkZXNp cmVkIHBsYW4sIHRoaXMgbWVhbnMgdGhhdCBlaXRoZXIKKyAgIHRoZXJlIGlzIGEgYnVnIGluIHlv dXIgYWR2aWNlIHN0cmluZywgb3IgdGhlIHBsYW4gaW4gcXVlc3Rpb24gd2FzIG5vdAorICAgY29u c2lkZXJlZCB2aWFibGUgYnkgdGhlIGNvcmUgcGxhbm5lci4gVGhpcyBjb21tb25seSBoYXBwZW5z IGZvciBvbmUgb2YgdHdvCisgICByZWFzb25zLiBGaXJzdCwgaXQgbWlnaHQgYmUgdGhlIHBsYW5u ZXIgYmVsaWV2ZXMgdGhhdCB0aGUgcGxhbiB5b3UncmUgdHJ5aW5nCisgICB0byBmb3JjZSB3b3Vs ZCBiZSBzZW1hbnRpY2FsbHkgaW5jb3JyZWN0IC0gdGhhdCBpcywgaXQgd291bGQgcHJvZHVjZSB0 aGUKKyAgIHdyb25nIHJlc3VsdHMgLSBhbmQgZm9yIHRoYXQgcmVhc29uIGl0IHdhc24ndCBjb25z aWRlcmVkLiBTZWNvbmQsIGl0IG1pZ2h0CisgICBiZSB0aGF0IHRoZSBwbGFubmVyIHJlamVjdGVk IHRoZSBwbGFuIHlvdSB3ZXJlIGhvcGluZyB0byBnZW5lcmF0ZSBvbiBzb21lCisgICBncm91bmRz IG90aGVyIHRoYW4gY29zdC4gRm9yIGV4YW1wbGUsIGdpdmVuIGEgdmVyeSBzaW1wbGUgcXVlcnkg c3VjaCBhcworICAgPGxpdGVyYWw+U0VMRUNUICogRlJPTSBzb21lX3RhYmxlPC9saXRlcmFsPiwg dGhlIHF1ZXJ5IHBsYW5uZXIgd2lsbAorICAgZGVjaWRlIHRoYXQgdGhlIHVzZSBvZiBhbiBpbmRl eCBpcyB3b3J0aGxlc3MgaGVyZSBiZWZvcmUgaXQgcGVyZm9ybXMgYW55CisgICBjb3N0aW5nIGNh bGN1bGF0aW9ucy4gWW91IGNhbm5vdCBmb3JjZSBpdCB0byB1c2UgYW4gaW5kZXggZm9yIHRoaXMg cXVlcnkKKyAgIGV2ZW4gaWYgeW91IHNldCA8bGl0ZXJhbD5lbmFibGVfc2Vxc2NhbiA9IGZhbHNl PC9saXRlcmFsPiwgYW5kIHlvdSBjYW4ndAorICAgZm9yY2UgaXQgdG8gdXNlIGFuIGluZGV4IHVz aW5nIHBsYW4gYWR2aWNlLCBlaXRoZXIuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFNwZWNp ZnlpbmcgcGxhbiBhZHZpY2Ugc2hvdWxkIG5ldmVyIGNhdXNlIHBsYW5uZXIgZmFpbHVyZS4gSG93 ZXZlciwgaWYgeW91CisgICBzcGVjaWZ5IHBsYW4gYWR2aWNlIHRoYXQgYXNrcyBmb3Igc29tZXRo aW5nIGltcG9zc2libGUsIHlvdSBtYXkgZ2V0IGEgcGxhbgorICAgd2hlcmUgc29tZSBwbGFuIG5v ZGVzIGFyZSBmbGFnZ2VkIGFzIDxsaXRlcmFsPkRpc2FibGVkOiB0cnVlPC9saXRlcmFsPiBpbgor ICAgdGhlIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IG91dHB1dC4gSW4gc29tZSBjYXNlcywg c3VjaCBwbGFucyB3aWxsIGJlCisgICBiYXNpY2FsbHkgdGhlIHNhbWUgcGxhbiB5b3Ugd291bGQg aGF2ZSBnb3R0ZW4gd2l0aCBubyBzdXBwbGllZCBhZHZpY2UgYXQKKyAgIGFsbCwgYnV0IGluIG90 aGVyIGNhc2VzLCB0aGV5IG1heSBiZSBtdWNoIHdvcnNlLiBGb3IgZXhhbXBsZToKKyAgPC9wYXJh PgorCis8cHJvZ3JhbWxpc3Rpbmc+CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5f T1JERVIoeCBmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRikKKyAgICAgICAgU0VMRUNUICogRlJP TSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNhYmxlZDogdHJ1ZQor ICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBq b2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYu ZGltX2lkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUih4IGYgZCkgLyog cGFydGlhbGx5IG1hdGNoZWQgKi8KKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPHBhcmE+CisgICBC ZWNhdXNlIG5laXRoZXIgPGxpdGVyYWw+ZjwvbGl0ZXJhbD4gbm9yIDxsaXRlcmFsPmQ8L2xpdGVy YWw+IGlzIHRoZQorICAgZmlyc3QgdGFibGUgaW4gdGhlIDxsaXRlcmFsPkpPSU5fT1JERVIoKTwv bGl0ZXJhbD4gc3BlY2lmaWNhdGlvbiwgdGhlCisgICBwbGFubmVyIGRpc2FibGVzIGFsbCBkaXJl Y3Qgam9pbnMgYmV0d2VlbiB0aGUgdHdvIG9mIHRoZW0sIHRoaW5raW5nIHRoYXQKKyAgIHRoZSBq b2luIHRvIDxsaXRlcmFsPng8L2xpdGVyYWw+IHNob3VsZCBoYXBwZW4gZmlyc3QuIFNpbmNlIHBs YW5uaW5nIGlzbid0CisgICBhbGxvd2VkIHRvIGZhaWwsIGEgZGlzYWJsZWQgcGxhbiBiZXR3ZWVu IHRoZSB0d28gcmVsYXRpb25zIGlzIGV2ZW50dWFsbHkKKyAgIHNlbGVjdGVkIGFueXdheSwgYnV0 IGhlcmUgaXQncyBhIDxsaXRlcmFsPk5lc3RlZCBMb29wPC9saXRlcmFsPiByYXRoZXIgdGhhbgor ICAgdGhlIDxsaXRlcmFsPkhhc2ggSm9pbjwvbGl0ZXJhbD4gdGhhdCB3YXMgY2hvc2VuIGluIHRo ZSBhYm92ZSBleGFtcGxlIHdoZXJlCisgICBubyBhZHZpY2Ugd2FzIHNwZWNpZmllZC4gVGhlcmUg YXJlIHNldmVyYWwgZGlmZmVyZW50IHdheXMgdGhhdCB0aGlzIGtpbmQKKyAgIG9mIHRoaW5nIGNh biBoYXBwZW47IHdoZW4gaXQgZG9lcywgdGhlIHJlc3VsdGluZyBwbGFuIGlzIGdlbmVyYWxseSB3 b3JzZQorICAgdGhhbiBpZiBubyBhZHZpY2UgaGFkIGJlZW4gc3BlY2lmaWVkIGF0IGFsbC4gVGhl cmVmb3JlLCBpdCBpcyBhIGdvb2QgaWRlYQorICAgdG8gdmFsaWRhdGUgdGhhdCB0aGUgYWR2aWNl IHlvdSBzcGVjaWZ5IGFwcGxpZXMgdG8gdGhlIHF1ZXJ5IHRvIHdoaWNoIGl0CisgICBpcyBhcHBs aWVkIGFuZCB0aGF0IHRoZSByZXN1bHRzIGFyZSBhcyBleHBlY3RlZC4KKyAgPC9wYXJhPgorCisg PC9zZWN0Mj4KKworIDxzZWN0MiBpZD0icGdwbGFuYWR2aWNlLXRhcmdldHMiPgorICA8dGl0bGU+ QWR2aWNlIFRhcmdldHM8L3RpdGxlPgorCisgIDxwYXJhPgorICAgQW4gPGZpcnN0dGVybT5hZHZp Y2UgdGFyZ2V0PC9maXJzdHRlcm0+IHVuaXF1ZWx5IGlkZW50aWZpZXMgYSBwYXJ0aWN1bGFyCisg ICBpbnN0YW5jZSBvZiBhIHBhcnRpY3VsYXIgcmVsYXRpb24gaW52b2x2ZWQgaW4gYSBwYXJ0aWN1 bGFyIHF1ZXJ5LiBJbiBzaW1wbGUKKyAgIGNhc2VzLCBzdWNoIGFzIHRoZSBleGFtcGxlcyBzaG93 biBhYm92ZSwgdGhlIGFkdmljZSB0YXJnZXQgaXMgc2ltcGx5IHRoZQorICAgcmVsYXRpb24gYWxp YXMuIEhvd2V2ZXIsIGEgbW9yZSBjb21wbGV4IHN5bnRheCBpcyByZXF1aXJlZCB3aGVuIHN1YnF1 ZXJpZXMKKyAgIGFyZSB1c2VkLCB3aGVuIHRhYmxlcyBhcmUgcGFydGl0aW9uZWQsIG9yIHdoZW4g dGhlIHNhbWUgcmVsYXRpb24gYWxpYXMgaXMKKyAgIG1lbnRpb25lZCBtb3JlIHRoYW4gb25jZSBp biB0aGUgc2FtZSBzdWJxdWVyeSAoZS5nLiwgPGxpdGVyYWw+KGZvbyBKT0lOIGJhcgorICAgT04g Zm9vLmEgPSBiYXIuYSkgeCBKT0lOIGZvbyBPTiB4LmIgPSBmb28uYjwvbGl0ZXJhbD4pLiBBbnkg Y29tYmluYXRpb24gb2YKKyAgIHRoZXNlIHRocmVlIHRoaW5ncyBjYW4gb2NjdXIgc2ltdWx0YW5l b3VzbHk6IGEgcmVsYXRpb24gY291bGQgYmUgbWVudGlvbmVkCisgICBtb3JlIHRoYW4gb25jZSwg YmUgcGFydGl0aW9uZWQsIGFuZCBiZSB1c2VkIGluc2lkZSBvZiBhIHN1YnF1ZXJ5LgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICBCZWNhdXNlIG9mIHRoaXMsIHRoZSBnZW5lcmFsIHN5bnRheCBm b3IgYSByZWxhdGlvbiBpZGVudGlmaWVyIGlzOgorICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGlu Zz4KK2FsaWFzX25hbWUjb2NjdXJyZW5jZV9udW1iZXIvcGFydGl0aW9uX3NjaGVtYS5wYXJ0aXRp b25fbmFtZUBwbGFuX25hbWUKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPHBhcmE+CisgICBBbGwg Y29tcG9uZW50cyBleGNlcHQgZm9yIHRoZSA8bGl0ZXJhbD5hbGlhc19uYW1lPC9saXRlcmFsPiBh cmUgb3B0aW9uYWwKKyAgIGFuZCBhcmUgaW5jbHVkZWQgb25seSB3aGVuIHJlcXVpcmVkLiBXaGVu IGEgY29tcG9uZW50IGlzIG9taXR0ZWQsIHRoZQorICAgcHJlY2VkaW5nIHB1bmN0dWF0aW9uIG11 c3QgYWxzbyBiZSBvbWl0dGVkLiBGb3IgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYQorICAgcmVs YXRpb24gd2l0aGluIGEgZ2l2ZW4gc3VicXVlcnksIGdlbmVyYXRlZCBhZHZpY2Ugd2lsbCBvbWl0 IHRoZSBvY2N1cnJlbmNlCisgICBudW1iZXIsIGJ1dCBpdCBpcyBsZWdhbCB0byB3cml0ZSA8bGl0 ZXJhbD4jMTwvbGl0ZXJhbD4sIGlmIGRlc2lyZWQuIFRoZQorICAgcGFydGl0aW9uIHNjaGVtYSBh bmQgcGFydGl0aW9uIG5hbWUgYXJlIGluY2x1ZGVkIG9ubHkgZm9yIGNoaWxkcmVuIG9mCisgICBw YXJ0aXRpb25lZCB0YWJsZXMuIEluIGdlbmVyYXRlZCBhZHZpY2UsIDxsaXRlcmFsPnBnX3BsYW5f YWR2aWNlPC9saXRlcmFsPgorICAgYWx3YXlzIGluY2x1ZGVzIGJvdGgsIGJ1dCBpdCBpcyBsZWdh bCB0byBvbWl0IHRoZSBzY2hlbWEuIFRoZSBwbGFuIG5hbWUgaXMKKyAgIG9taXR0ZWQgZm9yIHRo ZSB0b3AtbGV2ZWwgcGxhbiwgYW5kIG11c3QgYmUgaW5jbHVkZWQgZm9yIGFueSBzdWJwbGFuLgor ICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJdCBpcyBub3QgYWx3YXlzIGVhc3kgdG8gZGV0ZXJt aW5lIHRoZSBjb3JyZWN0IGFkdmljZSB0YXJnZXQgYnkgZXhhbWluaW5nCisgICB0aGUgcXVlcnku IEZvciBpbnN0YW5jZSwgaWYgdGhlIHBsYW5uZXIgcHVsbHMgdXAgYSBzdWJxdWVyeSBpbnRvIHRo ZSBwYXJlbnQKKyAgIHF1ZXJ5IGxldmVsLCBldmVyeXRoaW5nIGluc2lkZSBvZiBpdCBiZWNvbWVz IHBhcnQgb2YgdGhlIHBhcmVudCBxdWVyeSBsZXZlbCwKKyAgIGFuZCB1c2VzIHRoZSBwYXJlbnQg cXVlcnkncyBzdWJwbGFuIG5hbWUgKG9yIG5vIHN1YnBsYW4gbmFtZSwgaWYgcHVsbGVkIHVwCisg ICB0byB0aGUgdG9wIGxldmVsKS4gRnVydGhlcm1vcmUsIHRoZSBjb3JyZWN0IHN1YnF1ZXJ5IG5h bWUgaXMgc29tZXRpbWVzIG5vdAorICAgb2J2aW91cy4gRm9yIGV4YW1wbGUsIHdoZW4gdHdvIHF1 ZXJpZXMgYXJlIGpvaW5lZCB1c2luZyBhbiBvcGVyYXRpb24gc3VjaCBhcworICAgPGxpdGVyYWw+ VU5JT048L2xpdGVyYWw+IG9yIDxsaXRlcmFsPklOVEVSU0VDVDwvbGl0ZXJhbD4sIG5vIG5hbWUg Zm9yIHRoZQorICAgc3VicXVlcmllcyBpcyBwcmVzZW50IGluIHRoZSBTUUwgc3ludGF4OyBpbnN0 ZWFkLCBhIHN5c3RlbS1nZW5lcmF0ZWQgbmFtZSBpcworICAgYXNzaWduZWQgdG8gZWFjaCBicmFu Y2guIFRoZSBlYXNpZXN0IHdheSB0byBkaXNjb3ZlciB0aGUgcHJvcGVyIGFkdmljZQorICAgdGFy Z2V0cyBpcyB0byB1c2UgPGxpdGVyYWw+RVhQTEFJTiAoUExBTl9BRFZJQ0UpPC9saXRlcmFsPiBh bmQgZXhhbWluZSB0aGUKKyAgIGdlbmVyYXRlZCBhZHZpY2UuCisgIDwvcGFyYT4KKworIDwvc2Vj dDI+CisKKyA8c2VjdDIgaWQ9InBncGxhbmFkdmljZS10YWdzIj4KKyAgPHRpdGxlPkFkdmljZSBU YWdzPC90aXRsZT4KKworICA8cGFyYT4KKyAgIEFuIDxmaXJzdHRlcm0+YWR2aWNlIHRhZzwvZmly c3R0ZXJtPiBzcGVjaWZpZXMgYSBwYXJ0aWN1bGFyIGJlaGF2aW9yIHRoYXQKKyAgIHNob3VsZCBi ZSBlbmZvcmNlZCBmb3Igc29tZSBwb3J0aW9uIG9mIHRoZSBxdWVyeSwgc3VjaCBhcyBhIHBhcnRp Y3VsYXIKKyAgIGpvaW4gb3JkZXIgb3Igam9pbiBtZXRob2QuIEFsbCBhZHZpY2UgdGFncyB0YWtl CisgICA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UtdGFyZ2V0cyI+YWR2aWNlIHRhcmdldHM8 L2xpbms+IGFzIGFyZ3VtZW50cywKKyAgIGFuZCBtYW55IGFsbG93IGxpc3RzIG9mIGFkdmljZSB0 YXJnZXRzLCB3aGljaCBpbiBzb21lIGNhc2VzIGNhbiBiZSBuZXN0ZWQKKyAgIG11bHRpcGxlIGxl dmVscyBkZWVwLiBTZXZlcmFsIGRpZmZlcmVudCBjbGFzc2VzIG9mIGFkdmljZSB0YXJnZXRzIGV4 aXN0LAorICAgZWFjaCBjb250cm9sbGluZyBhIGRpZmZlcmVudCBhc3BlY3Qgb2YgcXVlcnkgcGxh bm5pbmcuCisgIDwvcGFyYT4KKworICA8c2VjdDMgaWQ9InBncGxhbmFkdmljZS1zY2FuLW1ldGhv ZCI+CisgIDx0aXRsZT5TY2FuIE1ldGhvZCBBZHZpY2U8L3RpdGxlPgorICAgPHN5bm9wc2lzPgor U0VRX1NDQU4oPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCitUSURf U0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKK0lOREVYX1ND QU4oPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5pbmRleF9u YW1lPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKK0lOREVYX09OTFlfU0NBTig8cmVwbGFjZWFibGU+ dGFyZ2V0PC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmluZGV4X25hbWU8L3JlcGxhY2VhYmxl PiBbIC4uLiBdKQorRk9SRUlHTl9TQ0FOKCg8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJs ZT4gWyAuLi4gXSkgWyAuLi4gXSkKK0JJVE1BUF9IRUFQX1NDQU4oPHJlcGxhY2VhYmxlPnRhcmdl dDwvcmVwbGFjZWFibGU+IFsgLi4uIF0pPC9zeW5vcHNpcz4KKworICAgPHBhcmE+CisgICAgPGxp dGVyYWw+U0VRX1NDQU48L2xpdGVyYWw+IHNwZWNpZmllcyB0aGF0IGVhY2ggdGFyZ2V0IHNob3Vs ZCBiZQorICAgIHNjYW5uZWQgdXNpbmcgYSA8bGl0ZXJhbD5TZXEgU2NhbjwvbGl0ZXJhbD4uIDxs aXRlcmFsPlRJRF9TQ0FOPC9saXRlcmFsPgorICAgIHNwZWNpZmllcyB0aGF0IGVhY2ggdGFyZ2V0 IHNob3VsZCBiZSBzY2FubmVkIHVzaW5nIGEKKyAgICA8bGl0ZXJhbD5USUQgU2NhbjwvbGl0ZXJh bD4gb3IgPGxpdGVyYWw+VElEIFJhbmdlIFNjYW48L2xpdGVyYWw+LgorICAgIDxsaXRlcmFsPkJJ VE1BUF9IRUFQX1NDQU48L2xpdGVyYWw+IHNwZWNpZmllcyB0aGF0IGVhY2ggdGFyZ2V0CisgICAg c2hvdWxkIGJlIHNjYW5uZWQgdXNpbmcgYSA8bGl0ZXJhbD5CaXRtYXAgSGVhcCBTY2FuPC9saXRl cmFsPi4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgPGxpdGVyYWw+SU5ERVhfU0NBTjwv bGl0ZXJhbD4gc3BlY2lmaWVzIHRoYXQgZWFjaCB0YXJnZXQgc2hvdWxkCisgICAgYmUgc2Nhbm5l ZCB1c2luZyBhbiA8bGl0ZXJhbD5JbmRleCBTY2FuPC9saXRlcmFsPiBvbiB0aGUgZ2l2ZW4gaW5k ZXgKKyAgICBuYW1lLiA8bGl0ZXJhbD5JTkRFWF9PTkxZX1NDQU48L2xpdGVyYWw+IGlzIHNpbWls YXIsIGJ1dCBzcGVjaWZpZXMgdGhlCisgICAgdXNlIG9mIGFuIDxsaXRlcmFsPkluZGV4IE9ubHkg U2NhbjwvbGl0ZXJhbD4uIEluIGVpdGhlciBjYXNlLCB0aGUgaW5kZXgKKyAgICBuYW1lIGNhbiBi ZSwgYnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsIHNjaGVtYS1xdWFsaWZpZWQuCisgICA8L3BhcmE+ CisKKyAgIDxwYXJhPgorICAgIDxsaXRlcmFsPkZPUkVJR05fU0NBTjwvbGl0ZXJhbD4gc3BlY2lm aWVzIHRoYXQgYSBqb2luIGJldHdlZW4gdHdvIG9yCisgICAgbW9yZSBmb3JlaWduIHRhYmxlcyBz aG91bGQgYmUgcHVzaGVkIGRvd24gdG8gYSByZW1vdGUgc2VydmVyIHNvCisgICAgdGhhdCBpdCBj YW4gYmUgaW1wbGVtZW50ZWQgYXMgYSBzaW5nbGUgPGxpdGVyYWw+Rm9yZWlnbiBTY2FuPC9saXRl cmFsPi4KKyAgICBTcGVjaWZ5aW5nIDxsaXRlcmFsPkZPUkVJR05fU0NBTjwvbGl0ZXJhbD4gZm9y IGEgc2luZ2xlIGZvcmVpZ24gdGFibGUgaXMKKyAgICBuZWl0aGVyIG5lY2Vzc2FyeSBub3IgcGVy bWlzc2libGU6IGEgPGxpdGVyYWw+Rm9yZWlnbiBTY2FuPC9saXRlcmFsPiB3aWxsCisgICAgbmVl ZCB0byBiZSB1c2VkIHJlZ2FyZGxlc3MuIElmIHlvdSB3YW50IHRvIHByZXZlbnQgYSBqb2luIGZy b20gYmVpbmcKKyAgICBwdXNoZWQgZG93biwgY29uc2lkZXIgdXNpbmcgdGhlIDxsaXRlcmFsPkpP SU5fT1JERVI8L2xpdGVyYWw+IHRhZyBmb3IKKyAgICB0aGF0IHB1cnBvc2UuCisgICA8L3BhcmE+ CisKKyAgIDxwYXJhPgorICAgIFRoZSBwbGFubmVyIHN1cHBvcnRzIG1hbnkgdHlwZXMgb2Ygc2Nh bnMgb3RoZXIgdGhhbiB0aG9zZSBsaXN0ZWQgaGVyZTsKKyAgICBob3dldmVyLCBpbiBtb3N0IG9m IHRob3NlIGNhc2VzLCB0aGVyZSBpcyBubyBtZWFuaW5nZnVsIGRlY2lzaW9uIHRvIGJlCisgICAg bWFkZSwgYW5kIGhlbmNlIG5vIG5lZWQgZm9yIGFkdmljZS4gRm9yIGV4YW1wbGUsIHRoZSBvdXRw dXQgb2YgYQorICAgIHNldC1yZXR1cm5pbmcgZnVuY3Rpb24gdGhhdCBhcHBlYXJzIGluIHRoZSA8 bGl0ZXJhbD5GUk9NPC9saXRlcmFsPiBjbGF1c2UKKyAgICBjYW4gb25seSBldmVyIGJlIHNjYW5u ZWQgdXNpbmcgYSA8bGl0ZXJhbD5GdW5jdGlvbiBTY2FuPC9saXRlcmFsPiwgc28KKyAgICB0aGVy ZSBpcyBubyBvcHBvcnR1bml0eSBmb3IgYWR2aWNlIHRvIGNoYW5nZSBhbnl0aGluZy4KKyAgIDwv cGFyYT4KKworICA8L3NlY3QzPgorCisgIDxzZWN0MyBpZD0icGdwbGFuYWR2aWNlLWpvaW4tb3Jk ZXIiPgorICA8dGl0bGU+Sm9pbiBPcmRlciBBZHZpY2U8L3RpdGxlPgorICAgPHN5bm9wc2lzPgor Sk9JTl9PUkRFUig8cmVwbGFjZWFibGU+am9pbl9vcmRlcl9pdGVtPC9yZXBsYWNlYWJsZT4gWyAu Li4gXSkKKworPHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGU+am9pbl9vcmRlcl9pdGVtPC9yZXBs YWNlYWJsZT4gaXM6PC9waHJhc2U+CisKKzxyZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBs YWNlYWJsZT4gfAorKCA8cmVwbGFjZWFibGU+am9pbl9vcmRlcl9pdGVtPC9yZXBsYWNlYWJsZT4g WyAuLi4gXSApIHwKK3sgPHJlcGxhY2VhYmxlPmpvaW5fb3JkZXJfaXRlbTwvcmVwbGFjZWFibGU+ IFsgLi4uIF0gfTwvc3lub3BzaXM+CisKKyAgIDxwYXJhPgorICAgIFdoZW4gPGxpdGVyYWw+Sk9J Tl9PUkRFUjwvbGl0ZXJhbD4gaXMgdXNlZCB3aXRob3V0IGFueSBzdWJsaXN0cywgaXQKKyAgICBz cGVjaWZpZXMgYW4gb3V0ZXItZGVlcCBqb2luIHdpdGggdGhlIGZpcnN0IGFkdmljZSB0YXJnZXQg YXMgdGhlIGRyaXZpbmcKKyAgICB0YWJsZSwgam9pbmVkIHRvIGVhY2ggc3Vic2VxdWVudCBhZHZp Y2UgdGFyZ2V0IGluIHR1cm4gaW4gdGhlIG9yZGVyCisgICAgc3BlY2lmaWVkLiBGb3IgaW5zdGFu Y2UsIDxsaXRlcmFsPkpPSU5fT1JERVIoYSBiIGMpPC9saXRlcmFsPiBtZWFucyB0aGF0CisgICAg PGxpdGVyYWw+YTwvbGl0ZXJhbD4gc2hvdWxkIGJlIHRoZSBkcml2aW5nIHRhYmxlLCBhbmQgdGhh dCBpdCBzaG91bGQgYmUKKyAgICBqb2luZWQgZmlyc3QgdG8gPGxpdGVyYWw+YjwvbGl0ZXJhbD4g YW5kIHRoZW4gdG8gPGxpdGVyYWw+YzwvbGl0ZXJhbD4uCisgICAgSWYgdGhlcmUgYXJlIG1vcmUg cmVsYXRpb25zIGluIHRoZSBxdWVyeSB0aGFuIDxsaXRlcmFsPmE8L2xpdGVyYWw+LAorICAgIDxs aXRlcmFsPmI8L2xpdGVyYWw+LCBhbmQgPGxpdGVyYWw+YzwvbGl0ZXJhbD4sIHRoZSByZXN0IGNh biBiZSBqb2luZWQKKyAgICBhZnRlcndhcmRzIGluIGFueSBtYW5uZXIuCisgICA8L3BhcmE+CisK KyAgIDxwYXJhPgorICAgIElmIGEgPGxpdGVyYWw+Sk9JTl9PUkRFUjwvbGl0ZXJhbD4gbGlzdCBj b250YWlucyBhIHBhcmVudGhlc2l6ZWQgc3VibGlzdCwKKyAgICBpdCBzcGVjaWZpZXMgYSBub24t b3V0ZXItZGVlcCBqb2luLiBUaGUgcmVsYXRpb25zIGluIHRoZSBzdWJsaXN0IG11c3QgZmlyc3QK KyAgICBiZSBqb2luZWQgdG8gZWFjaCBvdGhlciBtdWNoIGFzIGlmIHRoZSBzdWJsaXN0IHdlcmUg YSB0b3AtbGV2ZWwKKyAgICA8bGl0ZXJhbD5KT0lOX09SREVSPC9saXRlcmFsPiBsaXN0LCBhbmQg dGhlIHJlc3VsdGluZyBqb2luIHByb2R1Y3QgbXVzdAorICAgIHRoZW4gYXBwZWFyIG9uIHRoZSBp bm5lciBzaWRlIG9mIGEgam9pbiBhdCB0aGUgYXBwcm9wcmlhdGUgcG9pbnQgaW4gdGhlCisgICAg am9pbiBvcmRlci4gRm9yIGV4YW1wbGUsIDxsaXRlcmFsPkpPSU5fT1JERVIoYSAoYiBjKSBkKTwv bGl0ZXJhbD4gcmVxdWlyZXMKKyAgICBhIHBsYW4gb2YgdGhpcyBmb3JtOgorICAgPC9wYXJhPgor Cis8cHJvZ3JhbWxpc3Rpbmc+CitKb2luCisgIC0+ICBKb2luCisgICAgICAgIC0+IFNjYW4gb24g YQorICAgICAgICAtPiBKb2luCisgICAgICAgICAgICAgLT4gU2NhbiBvbiBiCisgICAgICAgICAg ICAgLT4gU2NhbiBvbiBjCisgIC0+ICBTY2FuIG9uIGQKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAg IDxwYXJhPgorICAgIElmIGEgPGxpdGVyYWw+Sk9JTl9PUkRFUjwvbGl0ZXJhbD4gbGlzdCBjb250 YWlucyBhIHN1Ymxpc3Qgc3Vycm91bmRlZCBieQorICAgIGN1cmx5IGJyYWNlcywgdGhpcyBhbHNv IHNwZWNpZmllcyBhIG5vbi1vdXRlci1kZWVwIGpvaW4uIEhvd2V2ZXIsIHRoZSBqb2luCisgICAg b3JkZXIgd2l0aGluIHRoZSBzdWJsaXN0IGlzIG5vdCBjb25zdHJhaW5lZC4gRm9yIGV4YW1wbGUs IHNwZWNpZml5aW5nCisgICAgPGxpdGVyYWw+Sk9JTl9PUkRFUihhIHtiIGN9IGQpPC9saXRlcmFs PiB3b3VsZCBhbGxvdyB0aGUgc2NhbnMgb2YKKyAgICA8bGl0ZXJhbD5iPC9saXRlcmFsPiBhbmQg PGxpdGVyYWw+YzwvbGl0ZXJhbD4gdG8gYmUgc3dhcHBlZCBpbiB0aGUKKyAgICBwcmV2aW91cyBl eGFtcGxlLCB3aGljaCBpcyBub3QgYWxsb3dlZCB3aGVuIHBhcmVudGhlc2VzIGFyZSB1c2VkLgor ICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBQYXJlbnRoZXNpemVkIHN1Ymxpc3RzIGNhbiBi ZSBhcmJpdHJhcmlseSBuZXN0ZWQsIGJ1dCBzdWJsaXN0cyBzdXJyb3VuZGVkCisgICAgYnkgY3Vy bHkgYnJhY2VzIGNhbm5vdCB0aGVtc2VsdmVzIGNvbnRhaW4gc3VibGlzdHMuCisgICA8L3BhcmE+ CisKKyAgIDxwYXJhPgorICAgIE11bHRpcGxlIGluc3RhbmNlcyBvZiA8bGl0ZXJhbD5KT0lOX09S REVSKCk8L2xpdGVyYWw+IGNhbiBzb21ldGltZXMgYmUKKyAgICBuZWVkZWQgaW4gb3JkZXIgdG8g ZnVsbHkgY29uc3RyYWludCB0aGUgam9pbiBvcmRlci4gVGhpcyBvY2N1cnMgd2hlbiB0aGVyZQor ICAgIGFyZSBtdWx0aXBsZSBqb2luIHByb2JsZW1zIHRoYXQgYXJlIG9wdGltaXplZCBzZXBhcmF0 ZWx5IGJ5IHRoZSBwbGFubmVyLgorICAgIFRoaXMgY2FuIGhhcHBlbiBkdWUgdG8gdGhlIHByZXNl bmNlIG9mIHN1YnF1ZXJpZXMsIG9yIGJlY2F1c2UgdGhlcmUgaXMgYQorICAgIHBhcnRpdGlvbndp c2Ugam9pbi4gSW4gdGhlIGxhdHRlciBjYXNlLCBlYWNoIGJyYW5jaCBvZiB0aGUgcGFydGl0aW9u d2lzZQorICAgIGpvaW4gY2FuIGhhdmUgaXRzIG93biBqb2luIG9yZGVyLCBpbmRlcGVuZGVudCBv ZiBldmVyeSBvdGhlciBicmFuY2guCisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mz4KKworICA8c2Vj dDMgaWQ9InBncGxhbmFkdmljZS1qb2luLW1ldGhvZCI+CisgIDx0aXRsZT5Kb2luIE1ldGhvZCBB ZHZpY2U8L3RpdGxlPgorICAgPHN5bm9wc2lzPgoram9pbl9tZXRob2RfbmFtZSg8cmVwbGFjZWFi bGU+am9pbl9tZXRob2RfaXRlbTwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCisKKzxwaHJhc2U+d2hl cmUgPHJlcGxhY2VhYmxlPmpvaW5fbWV0aG9kX25hbWU8L3JlcGxhY2VhYmxlPiBpczo8L3BocmFz ZT4KKworeyBNRVJHRV9KT0lOX01BVEVSSUFMSVpFIHwgTUVSR0VfSk9JTl9QTEFJTiB8IE5FU1RF RF9MT09QX01BVEVSSUFMSVpFIHwgTkVTVEVEX0xPT1BfUExBSU4gfCBIQVNIX0pPSU4gfQorCis8 cGhyYXNlPmFuZCA8cmVwbGFjZWFibGU+am9pbl9tZXRob2RfaXRlbTwvcmVwbGFjZWFibGU+IGlz OjwvcGhyYXNlPgorCit7IDxyZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4g fAorKCA8cmVwbGFjZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0gKSB9 PC9zeW5vcHNpcz4KKworICAgPHBhcmE+CisgICAgSm9pbiBtZXRob2QgYWR2aWNlIHNwZWNpZmll cyB0aGUgcmVsYXRpb24sIG9yIHNldCBvZiByZWxhdGlvbnMsIHRoYXQgc2hvdWxkCisgICAgYXBw ZWFyIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgam9pbiB1c2luZyB0aGUgbmFtZWQgam9pbiBtZXRo b2QuIEZvcgorICAgIGV4YW1wbGUsIDxsaXRlcmFsPkhBU0hfSk9JTihhIGIpPC9saXRlcmFsPiBt ZWFucyB0aGF0IGVhY2ggb2YKKyAgICA8bGl0ZXJhbD5hPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+ YjwvbGl0ZXJhbD4gc2hvdWxkIGFwcGVhciBvbiB0aGUgaW5uZXIKKyAgICBzaWRlIG9mIGEgaGFz aCBqb2luOyBhIGNvbmZvcm1pbmcgcGxhbiBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgdHdvIGhhc2gK KyAgICBqb2lucywgb25lIG9mIHdoaWNoIGhhcyA8bGl0ZXJhbD5hPC9saXRlcmFsPiBhbmQgbm90 aGluZyBlbHNlIG9uIHRoZQorICAgIGlubmVyIHNpZGUsIGFuZCB0aGUgb3RoZXIgb2Ygd2hpY2gg aGFzIDxsaXRlcmFsPmI8L2xpdGVyYWw+IGFuZCBub3RoaW5nCisgICAgZWxzZSBvbiB0aGUgaW5u ZXIgc2lkZS4gT24gdGhlIG90aGVyIGhhbmQsCisgICAgPGxpdGVyYWw+SEFTSF9KT0lOKChhIGIp KTwvbGl0ZXJhbD4gbWVhbnMgdGhhdCB0aGUgam9pbiBwcm9kdWN0IG9mCisgICAgPGxpdGVyYWw+ YTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPmI8L2xpdGVyYWw+IHNob3VsZCBhcHBlYXIgdG9nZXRo ZXIKKyAgICBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIHNpbmdsZSBoYXNoIGpvaW4uCisgICA8L3Bh cmE+CisKKyAgIDxwYXJhPgorICAgIE5vdGUgdGhhdCBqb2luIG1ldGhvZCBhZHZpY2UgaW1wbGll cyBhIG5lZ2F0aXZlIGpvaW4gb3JkZXIgY29uc3RyYWludC4KKyAgICBTaW5jZSB0aGUgbmFtZWQg cmVsYXRpb24gb3IgcmVsYXRpb25zIG11c3QgYmUgb24gdGhlIGlubmVyIHNpZGUgb2YgYSBqb2lu CisgICAgdXNpbmcgdGhlIHNwZWNpZmllZCBtZXRob2QsIG5vbmUgb2YgdGhlbSBjYW4gYmUgdGhl IGRyaXZpbmcgdGFibGUgZm9yIHRoZQorICAgIGVudGlyZSBqb2luIHByb2JsZW0uIE1vcmVvdmVy LCBubyByZWxhdGlvbiBpbnNpZGUgdGhlIHNldCBzaG91bGQgYmUgam9pbmVkCisgICAgdG8gYW55 IHJlbGF0aW9uIG91dHNpZGUgdGhlIHNldCB1bnRpbCBhbGwgcmVsYXRpb25zIHdpdGhpbiB0aGUg c2V0IGhhdmUKKyAgICBiZWVuIGpvaW5lZCB0byBlYWNoIG90aGVyLiBGb3IgZXhhbXBsZSwgaWYg dGhlIGFkdmljZSBzcGVjaWZpZXMKKyAgICA8bGl0ZXJhbD5IQVNIX0pPSU4oKGEgYikpPC9saXRl cmFsPiBhbmQgdGhlIHN5c3RlbSBiZWdpbnMgYnkgam9pbmluZyBlaXRoZXIKKyAgICBvZiB0aG9z ZSB0byBzb21lIHRoaXJkIHJlbGF0aW9uIDxsaXRlcmFsPmM8L2xpdGVyYWw+LCB0aGUgcmVzdWx0 aW5nCisgICAgcGxhbiBjb3VsZCBuZXZlciBiZSBjb21wbGlhbnQgd2l0aCB0aGUgcmVxdWVzdCB0 byBwdXQgZXhhY3RseSB0aG9zZSB0d28KKyAgICByZWxhdGlvbnMgb24gdGhlIGlubmVyIHNpZGUg b2YgYSBoYXNoIGpvaW4uIFdoZW4gdXNpbmcgYm90aCBqb2luIG9yZGVyCisgICAgYWR2aWNlIGFu ZCBqb2luIG1ldGhvZCBhZHZpY2UgZm9yIHRoZSBzYW1lIHF1ZXJ5LCBpdCBpcyBhIGdvb2QgaWRl YSB0byBtYWtlCisgICAgc3VyZSB0aGF0IHRoZXkgZG8gbm90IG1hbmRhdGUgaW5jb21wYXRpYmxl IGpvaW4gb3JkZXJzLgorICAgPC9wYXJhPgorCisgIDwvc2VjdDM+CisKKyAgPHNlY3QzIGlkPSJw Z3BsYW5hZHZpY2UtcGFydGl0aW9ud2lzZSI+CisgIDx0aXRsZT5QYXJ0aXRpb253aXNlIEFkdmlj ZTwvdGl0bGU+CisgICA8c3lub3BzaXM+CitQQVJUSVRJT05XSVNFKDxyZXBsYWNlYWJsZT5wYXJ0 aXRpb253aXNlX2l0ZW08L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQorCis8cGhyYXNlPndoZXJlIDxy ZXBsYWNlYWJsZT5wYXJ0aXRpb253aXNlX2l0ZW08L3JlcGxhY2VhYmxlPiBpczo8L3BocmFzZT4K KworeyA8cmVwbGFjZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+IHwKKyggPHJlcGxh Y2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdICkgfTwvc3lub3BzaXM+ CisKKyAgIDxwYXJhPgorICAgIFdoZW4gYXBwbGllZCB0byBhIHNpbmdsZSB0YXJnZXQsIDxsaXRl cmFsPlBBUlRJVElPTldJU0U8L2xpdGVyYWw+CisgICAgc3BlY2lmaWVzIHRoYXQgdGhlIHNwZWNp ZmllZCB0YWJsZSBzaG91bGQgbm90IGJlIHBhcnQgb2YgYW55IHBhcnRpdGlvbndpc2UKKyAgICBq b2luLiBXaGVuIGFwcGxpZWQgdG8gYSBsaXN0IG9mIHRhcmdldHMsIDxsaXRlcmFsPlBBUlRJVElP TldJU0U8L2xpdGVyYWw+CisgICAgc3BlY2lmaWVzIHRoYXQgZXhhY3RseSB0aGF0IHNldCBvZiBy ZWxhdGlvbnMgc2hvdWxkIGJlIGpvaW5lZCBpbgorICAgIHBhcnRpdGlvbndpc2UgZmFzaGlvbi4g Tm90ZSB0aGF0LCByZWdhcmRsZXNzIG9mIHdoYXQgYWR2aWNlIGlzIHNwZWNpZmllZCwKKyAgICBu byBwYXJ0aXRpb253aXNlIGpvaW5zIHdpbGwgYmUgcG9zc2libGUgaWYKKyAgICA8bGl0ZXJhbD5l bmFibGVfcGFydGl0aW9ud2lzZV9qb2luID0gb2ZmPC9saXRlcmFsPi4KKyAgIDwvcGFyYT4KKwor ICA8L3NlY3QzPgorCisgIDxzZWN0MyBpZD0icGdwbGFuYWR2aWNlLXNlbWlqb2luLXVuaXF1ZSI+ CisgIDx0aXRsZT5TZW1pam9pbiBVbmlxdWVuZXNzIEFkdmljZTwvdGl0bGU+CisgICA8c3lub3Bz aXM+CitTRU1JSk9JTl9VTklRVUUoPHJlcGxhY2VhYmxlPnNqX3VuaXF1ZV9pdGVtPC9yZXBsYWNl YWJsZT4gWyAuLi4gXSkKK1NFTUlKT0lOX05PTl9VTklRVUUoPHJlcGxhY2VhYmxlPnNqX3VuaXF1 ZV9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKKworPHBocmFzZT53aGVyZSA8cmVwbGFjZWFi bGU+c2pfdW5pcXVlX2l0ZW08L3JlcGxhY2VhYmxlPiBpczo8L3BocmFzZT4KKworeyA8cmVwbGFj ZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+IHwKKyggPHJlcGxhY2VhYmxlPmFkdmlj ZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdICkgfTwvc3lub3BzaXM+CisKKyAgIDxwYXJh PgorICAgIFRoZSBwbGFubmVyIHNvbWV0aW1lcyBoYXMgYSBjaG9pY2UgYmV0d2VlbiBpbXBsZW1l bnRpbmcgYSBzZW1pam9pbgorICAgIGRpcmVjdGx5IGFuZCBpbXBsZW1lbW50aW5nIGEgc2VtaWpv aW4gYnkgbWFraW5nIHRoZSBudWxsYWJsZSBzaWRlIHVuaXF1ZQorICAgIGFuZCB0aGVuIHBlcmZv cm1pbmcgYW4gaW5uZXIgam9pbi4gPGxpdGVyYWw+U0VNSUpPSU5fVU5JUVVFPC9saXRlcmFsPgor ICAgIHNwZWNpZmllcyB0aGUgbGF0dGVyIHN0cmF0ZWd5LCB3aGlsZSA8bGl0ZXJhbD5TRU1JSk9J Tl9OT05fVU5JUVVFPC9saXRlcmFsPgorICAgIHNwZWNpZmllcyB0aGUgZm9ybWVyIHN0cmF0ZWd5 LiBJbiBlaXRoZXIgY2FzZSwgdGhlIGFyZ3VtZW50IGlzIHRoZSBzaW5nbGUKKyAgICByZWxhdGlv biBvciBsaXN0IG9mIHJlbGF0aW9ucyB0aGF0IGFwcGVhciBiZW5lYXRoIHRoZSBudWxsYWJsZSBz aWRlIG9mIHRoZQorICAgIGpvaW4uCisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mz4KKworICA8c2Vj dDMgaWQ9InBncGxhbmFkdmljZS1wYXJhbGxlbC1xdWVyeWoiPgorICA8dGl0bGU+UGFyYWxsZWwg UXVlcnkgQWR2aWNlPC90aXRsZT4KKyAgIDxzeW5vcHNpcz4KK0dBVEhFUig8cmVwbGFjZWFibGU+ Z2F0aGVyX2l0ZW08L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQorR0FUSEVSX01FUkdFKDxyZXBsYWNl YWJsZT5nYXRoZXJfaXRlbTwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCitOT19HQVRIRVIoPHJlcGxh Y2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQorCis8cGhyYXNlPndo ZXJlIDxyZXBsYWNlYWJsZT5nYXRoZXJfaXRlbTwvcmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgor Cit7IDxyZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gfAorKCA8cmVwbGFj ZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0gKSB9PC9zeW5vcHNpcz4K KworICAgPHBhcmE+CisgICAgPGxpdGVyYWw+R0FUSEVSPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5H QVRIRVJfTUVSR0U8L2xpdGVyYWw+IHNwZWNpZmllcworICAgIHRoYXQgPGxpdGVyYWw+R2F0aGVy PC9saXRlcmFsPiBvciA8bGl0ZXJhbD5HYXRoZXIgTWVyZ2U8L2xpdGVyYWw+LAorICAgIHJlc3Bl Y3RpdmVseSwgc2hvdWxkIGJlIHBsYWNlZCBvbiB0b3Agb2YgdGhlIHNpbmdsZSByZWxhdGlvbiBz cGVjaWZpZWQgYXMKKyAgICBhIHRhcmdldCwgb3Igb24gdG9wIG9mIHRoZSBqb2luIGJldHdlZW4g dGhlIGxpc3Qgb2YgcmVsYXRpb25zIHNwZWNpZmllZCBhcworICAgIGEgdGFyZ2V0LiBUaGlzIG1l YW5zIHRoYXQgPGxpdGVyYWw+R0FUSEVSKGEgYiBjKTwvbGl0ZXJhbD4gaXMgYSByZXF1ZXN0Cisg ICAgZm9yIHRocmVlIGRpZmZlcmVudCA8bGl0ZXJhbD5HYXRoZXI8L2xpdGVyYWw+IG5vZGVzLCB3 aGlsZQorICAgIDxsaXRlcmFsPkdBVEhFUigoYSBiIGMpKTwvbGl0ZXJhbD4gaXMgYSByZXF1ZXN0 IGZvciBhIHNpbmdsZQorICAgIDxsaXRlcmFsPkdhdGhlcjwvbGl0ZXJhbD4gbm9kZSBvbiB0b3Ag b2YgYSAzLXdheSBqb2luLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICA8bGl0ZXJhbD5O T19HQVRIRVI8L2xpdGVyYWw+IHNwZWNpZmllcyB0aGF0IG5vIDxsaXRlcmFsPkdhdGhlcjwvbGl0 ZXJhbD4gb3IKKyAgICA8bGl0ZXJhbD5HYXRoZXIgTWVyZ2U8L2xpdGVyYWw+IG5vZGUgc2hvdWxk IGFwcGVhciBhYm92ZSBhbnkgb2YgdGhlCisgICAgdGFyZ2V0cywgYnV0IGl0IG9ubHkgY29uc3Ry YWlucyB0aGUgcGxhbm5pbmcgb2YgYW4gaW5kaXZpZHVhbCBzdWJxdWVyeSwKKyAgICBhbmQgb3V0 ZXIgc3VicXVlcnkgbGV2ZWxzIGNhbiBzdGlsbCB1c2UgcGFyYWxsZWwgcXVlcnkuIEZvciBleGFt cGxlLAorICAgIDxsaXRlcmFsPk5PX0dBVEhFUihpbm5lcl9leGFtcGxlQGFueV8xKTwvbGl0ZXJh bD4gcHJlY2x1ZGVzIHVzaW5nIGEKKyAgICA8bGl0ZXJhbD5QYXJhbGxlbCBTZXEgU2NhbjwvbGl0 ZXJhbD4gdG8gYWNjZXNzIHRoZQorICAgIDxsaXRlcmFsPmlubmVyX2V4YW1wbGU8L2xpdGVyYWw+ IHRhYmxlIHdpdGhpbiB0aGUgPGxpdGVyYWw+YW55XzE8L2xpdGVyYWw+CisgICAgc3VicXVlcnks IGJ1dCBpdCBkb2VzIG5vdCBwcmV2ZW50IHRoZSBwbGFubmVyIGZyb20gcGxhY2luZworICAgIDxs aXRlcmFsPlN1YlBsYW4gYW55XzE8L2xpdGVyYWw+IGJlbmVhdGggYSA8bGl0ZXJhbD5HYXRoZXI8 L2xpdGVyYWw+CisgICAgb3IgPGxpdGVyYWw+R2F0aGVyIE1lcmdlPC9saXRlcmFsPiBub2RlLiBU aGUgZm9sbG93aW5nIHBsYW4gaXMKKyAgICBjb21wYXRpYmxlIHdpdGggPGxpdGVyYWw+Tk9fR0FU SEVSKGlubmVyX2V4YW1wbGVAYW55XzEpPC9saXRlcmFsPiwgYnV0CisgICAgbm90IHdpdGggPGxp dGVyYWw+Tk9fR0FUSEVSKG91dGVyX2V4YW1wbGUpPC9saXRlcmFsPjoKKyAgIDwvcGFyYT4KKwor PHByb2dyYW1saXN0aW5nPgorIEZpbmFsaXplIEFnZ3JlZ2F0ZQorICAgLT4gIEdhdGhlcgorICAg ICAgICAgLT4gIFBhcnRpYWwgQWdncmVnYXRlCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwg U2VxIFNjYW4gb24gb3V0ZXJfZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo c29tZXRoaW5nID0gKGhhc2hlZCBTdWJQbGFuIGFueV8xKS5jb2wxKQorICAgICAgICAgICAgICAg ICAgICAgU3ViUGxhbiBhbnlfMQorICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gaW5uZXJfZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChz b21ldGhpbmdfZWxzZSA+IDEwMCkKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgIDxwYXJhPgorICAg IEhlcmUgaXMgdGhlIHJldmVyc2UgY2FzZSwgdGhhdCBpcywgYSBwbGFuIGNvbXBhdGlibGUgd2l0 aAorICAgIDxsaXRlcmFsPk5PX0dBVEhFUihvdXRlcl9leGFtcGxlKTwvbGl0ZXJhbD4gYnV0IG5v dCB3aXRoCisgICAgPGxpdGVyYWw+Tk9fR0FUSEVSKGlubmVyX2V4YW1wbGVAYW55XzEpPC9saXRl cmFsPjoKKyAgIDwvcGFyYT4KKworPHByb2dyYW1saXN0aW5nPgorIEFnZ3JlZ2F0ZQorICAgLT4g IFNlcSBTY2FuIG9uIG91dGVyX2V4YW1wbGUKKyAgICAgICAgIEZpbHRlcjogKHNvbWV0aGluZyA9 IChoYXNoZWQgU3ViUGxhbiBhbnlfMSkuY29sMSkKKyAgICAgICAgIFN1YlBsYW4gYW55XzEKKyAg ICAgICAgICAgLT4gIEdhdGhlcgorICAgICAgICAgICAgICAgICAtPiBQYXJhbGxlbCBTZXEgU2Nh biBvbiBpbm5lcl9leGFtcGxlCisgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoc29tZXRo aW5nX2Vsc2UgPiAxMDApCis8L3Byb2dyYW1saXN0aW5nPgorCisgIDwvc2VjdDM+CisgPC9zZWN0 Mj4KKworIDxzZWN0MiBpZD0icGdwbGFuYWR2aWNlLWZlZWRiYWNrIj4KKyAgPHRpdGxlPkFkdmlj ZSBGZWVkYmFjazwvdGl0bGU+CisKKyAgPHBhcmE+CisgICA8bGl0ZXJhbD5FWFBMQUlOPC9saXRl cmFsPiBwcm92aWRlcyBmZWVkYmFjayBvbiB3aGV0aGVyIHN1cHBsaWVkIGFkdmljZSB3YXMKKyAg IHN1Y2Nlc3NmdWxseSBhcHBsaWVkIHRvIHRoZSBxdWVyeSBpbiB0aGUgZm9ybSBvZiBhIGNvbW1l bnQgb24gZWFjaCBwaWVjZQorICAgb2Ygc3VwcGxpZWQgYWR2aWNlLiBGb3IgZXhhbXBsZToKKyAg PC9wYXJhPgorCis8cHJvZ3JhbWxpc3Rpbmc+CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J2hhc2hfam9pbihmIGcpIGpvaW5fb3JkZXIoZiBnKSBpbmRleF9zY2FuKGYgbm9fc3VjaF9pbmRl eCknOworU0VUCityaGFhcz0jIEVYUExBSU4gKENPU1RTIE9GRikgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCAqIEZST00gam9fZmFjdCBm CisgICAgICAgIExFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisgICAg ICAgIExFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisgICAgICAgIFdI RVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6ICgoZDEuaWQg PSBmLmRpbTFfaWQpIEFORCAoZDIuaWQgPSBmLmRpbTJfaWQpKQorICAgLT4gIE5lc3RlZCBMb29w CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgRmls dGVyOiAodmFsMiA9IDEpCisgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwxID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFj dCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKGYgbm9fc3VjaF9pbmRl eCkgLyogbWF0Y2hlZCwgaW5hcHBsaWNhYmxlLCBmYWlsZWQgKi8KKyAgIEhBU0hfSk9JTihmKSAv KiBtYXRjaGVkICovCisgICBIQVNIX0pPSU4oZykgLyogbm90IG1hdGNoZWQgKi8KKyAgIEpPSU5f T1JERVIoZiBnKSAvKiBwYXJ0aWFsbHkgbWF0Y2hlZCAqLworPC9wcm9ncmFtbGlzdGluZz4KKwor ICA8cGFyYT4KKyAgIEZvciB0aGlzIHF1ZXJ5LCA8bGl0ZXJhbD5mPC9saXRlcmFsPiBpcyBhIHZh bGlkIGFkdmljZSB0YXJnZXQsIGJ1dAorICAgPGxpdGVyYWw+ZzwvbGl0ZXJhbD4gaXMgbm90LiBU aGVyZWZvcmUsIHRoZSByZXF1ZXN0IHRvIHBsYWNlCisgICA8bGl0ZXJhbD5mPC9saXRlcmFsPiBv biB0aGUgaW5uZXIgc2lkZSBvZiBhIGhhc2ggam9pbiBpcyBsaXN0ZWQgYXMKKyAgIDxsaXRlcmFs Pm1hdGNoZWQ8L2xpdGVyYWw+LCBidXQgdGhlIHJlcXVlc3QgdG8gcGxhY2UgPGxpdGVyYWw+Zzwv bGl0ZXJhbD4KKyAgIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgaGFzaCBqb2luIGlzIGxpc3RlZCBh cworICAgPGxpdGVyYWw+bm90IG1hdGNoZWQ8L2xpdGVyYWw+LiBUaGUgPGxpdGVyYWw+Sk9JTl9P UkRFUjwvbGl0ZXJhbD4gYWR2aWNlCisgICB0YWcgaW52b2x2ZXMgb25lIHZhbGlkIHRhcmdldCBh bmQgb25lIGludmFsZCB0YXJnZXQsIGFuZCBzbyBpcyBsaXN0ZWQgYXMKKyAgIDxsaXRlcmFsPnBh cnRpYWxseSBtYXRjaGVkPC9saXRlcmFsPi4gTm90ZSB0aGF0CisgICA8bGl0ZXJhbD5IQVNIX0pP SU4oZiBnKTwvbGl0ZXJhbD4gaXMgYWN0dWFsbHkgYSByZXF1ZXN0IGZvciB0d28gbG9naWNhbGx5 CisgICBzZXBhcmF0ZSBiZWhhdmlvcnMsIHdoZXJlYXMgPGxpdGVyYWw+Sk9JTl9PUkRFUihmIGcp PC9saXRlcmFsPiBpcyBhIHNpbmdsZQorICAgcmVxdWVzdC4gV2hlbiBwcm92aWRpbmcgYWR2aWNl IGZlZWRiYWNrLCA8bGl0ZXJhbD5FWFBMQUlOPC9saXRlcmFsPiBzaG93cworICAgZWFjaCBsb2dp Y2FsIHJlcXVlc3Qgc2VwYXJhdGVseSwgdG9nZXRoZXIgd2l0aCBhbGwgdGhlIGZlZWRiYWNrIGFw cGxpY2FibGUKKyAgIHRvIHRoYXQgcmVxdWVzdCB0eXBlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+ CisgICBBZHZpY2UgZmVlZGJhY2sgY2FuIGluY2x1ZGUgYW55IG9mIHRoZSBmb2xsbG93aW5nOgor ICA8L3BhcmE+CisKKyAgPGl0ZW1pemVkbGlzdD4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJh PgorICAgICA8bGl0ZXJhbD5tYXRjaGVkPC9saXRlcmFsPiBtZWFucyB0aGF0IGFsbCBvZiB0aGUg c3BlY2lmaWVkIGFkdmljZSB0YXJnZXRzCisgICAgIHdlcmUgb2JzZXJ2ZWQgdG9nZXRoZXIgZHVy aW5nIHF1ZXJ5IHBsYW5uaW5nLCBhdCBhIHRpbWUgYXQgd2hpY2ggdGhlCisgICAgIGFkdmljZSBj b3VsZCBiYmUgZW5mb3JjZWQuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxp c3RpdGVtPgorICAgIDxwYXJhPgorICAgICA8bGl0ZXJhbD5wYXJ0aWFsbHkgbWF0Y2hlZDwvbGl0 ZXJhbD4gbWVhbnMgdGhhdCBzb21lIGJ1dCBub3QgYWxsIG9mIHRoZQorICAgICBzcGVjaWZpZWQg YWR2aWNlIHRhcmdldHMgd2VyZSBvYnNlcnZlZCBkdXJpbmcgcXVlcnkgcGxhbm5pbmcsIG9yIGFs bAorICAgICBvZiB0aGUgYWR2aWNlIHRhcmdldHMgd2VyZSBvYnNlcnZlZCBidXQgbm90IHRvZ2V0 aGVyLiBGb3IgZXhhbXBsZSwgdGhpcworICAgICBtYXkgaGFwcGVuIGlmIGFsbCB0aGUgdGFyZ2V0 cyBvZiA8bGl0ZXJhbD5KT0lOX09SREVSPC9saXRlcmFsPiBhZHZpY2UKKyAgICAgaW5kaXZpZHVh bGx5IG1hdGNoIHRoZSBxdWVyeSwgYnV0IHRoZSBwcm9wb3NlZCBqb2luIG9yZGVyIGlzIG5vdCBs ZWdhbC4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAg PHBhcmE+CisgICAgIDxsaXRlcmFsPm5vdCBtYXRjaGVkPC9saXRlcmFsPiBtZWFucyB0aGF0IG5v bmUgb2YgdGhlCisgICAgIHNwZWNpZmllZCBhZHZpY2UgdGFyZ2V0cyB3ZXJlIG9ic2VydmVkIGR1 cmluZyBxdWVyeSBwbGFubmluZy4gVGhpcyBtYXkKKyAgICAgaGFwcGVuIGlmIHRoZSBhZHZpY2Ug c2ltcGx5IGRvZXNuJ3QgbWF0Y2ggdGhlIHF1ZXJ5LCBvciBpdCBtYXkKKyAgICAgb2NjdXIgaWYg dGhlIHJlbGV2YW50IHBvcnRpb24gb2YgdGhlIHF1ZXJ5IHdhcyBub3QgcGxhbm5lZCwgcGVyaGFw cworICAgICBiZWNhdXNlIGl0IHdhcyBnYXRlZCBieSBhIGNvbmRpdGlvbiB0aGF0IHdhcyBzaW1w bGlmaWVkIHRvIGNvbnN0YW50IGZhbHNlLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisK KyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAgPGxpdGVyYWw+aW5hcHBsaWNhYmxlPC9s aXRlcmFsPiBtZWFucyB0aGF0IHRoZSBhZHZpY2UgdGFnIGNvdWxkIG5vdAorICAgICBiZSBhcHBs aWVkIHRvIHRoZSBhZHZpY2UgdGFyZ2V0cyBmb3Igc29tZSByZWFzb24uIEZvciBleGFtcGxlLCB0 aGlzIHdpbGwKKyAgICAgaGFwcGVuIGlmIHRoZSB1c2Ugb2YgYSBub25leGlzdGVudCBpbmRleCBp cyByZXF1ZXN0ZWQsIG9yIGlmIGFuIGF0dGVtcHQKKyAgICAgaXMgbWFkZSB0byBjb250cm9sIHNl bWlqb2luIHVuaXF1bmVzcyBmb3IgYSBub24tc2VtaWpvaW4uCisgICAgPC9wYXJhPgorICAgPC9s aXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICA8bGl0ZXJhbD5jb25m bGljdGluZzwvbGl0ZXJhbD4gbWVhbnMgdGhhdCB0d28gb3IgbW9yZSBwaWVjZXMgb2YgYWR2aWNl CisgICAgIHJlcXVlc3QgaW5jb21wYXRpYmxlIGJlaGF2aW9ycy4gRm9yIGV4YW1wbGUsIGlmIHlv dSBhZHZpc2UgYSBzZXF1ZW50aWFsCisgICAgIHNjYW4gYW5kIGFuIGluZGV4IHNjYW4gZm9yIHRo ZSBzYW1lIHRhYmxlLCBib3RoIHJlcXVlc3RzIHdpbGwgYmUgZmxhZ2dlZAorICAgICBhcyBjb25m bGljdGluZy4gVGhpcyBhbHNvIGNvbW1vbmx5IGhhcHBlbnMgaWYgam9pbiBtZXRob2QgYWR2aWNl IG9yCisgICAgIHNlbWlqb2luIHVuaXF1ZW5lc3MgYWR2aWNlIGltcGxpZXMgYSBqb2luIG9yZGVy IGluY29tcGF0aWJsZSB3aXRoIHRoZQorICAgICBvbmUgZXhwbGljaXRseSBzcGVjaWZpZWQ7IHNl ZQorICAgICA8eHJlZiBsaW5rZW5kPSJwZ3BsYW5hZHZpY2Utam9pbi1tZXRob2QiIC8+LgorICAg IDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAg ICAgPGxpdGVyYWw+ZmFpbGVkPC9saXRlcmFsPiBtZWFucyB0aGF0IHF1ZXJ5IHBsYW4gZG9lcyBu b3QgY29tcGx5IHdpdGgKKyAgICAgdGhlIGFkdmljZS4gVGhpcyBvbmx5IG9jY3VycyBmb3IgZW50 cmllcyB0aGF0IGFyZSBhbHNvIHNob3duIGFzCisgICAgIDxsaXRlcmFsPm1hdGNoZWQ8L2xpdGVy YWw+LiBJdCBmcmVxdWVudGx5IG9jY3VycyBmb3IgZW50cmllcyB0aGF0IGFyZQorICAgICBhbHNv IG1hcmtlZCBhcyA8bGl0ZXJhbD5jb25mbGljdGluZzwvbGl0ZXJhbD4gb3IKKyAgICAgPGxpdGVy YWw+aW5hcHBsaWNhYmxlPC9saXRlcmFsPi4gSG93ZXZlciwgaXQgY2FuIGFsc28gb2NjdXIgd2hl biB0aGUKKyAgICAgYWR2aWNlIGlzIHZhbGlkIGluc29mYXIgYXMgPGxpdGVyYWw+cGdfcGxhbl9h ZHZpY2U8L2xpdGVyYWw+IGlzIGFibGUKKyAgICAgdG8gZGV0ZXJtaW5lLCBidXQgdGhlIHBsYW5u ZXIgaXMgbm90IGFibGUgdG8gY29uc3RydWN0IGEgbGVnYWwKKyAgICAgcGxhbiB0aGF0IGNhbiBj b21wbHkgd2l0aCB0aGUgYWR2aWNlLiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZQor ICAgICBzYW5pdHkgY2hlY2tzIHBlcmZvcm1lZCBieSA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwv bGl0ZXJhbD4gYXJlIGZhaXJseQorICAgICBzdXBlcmZpY2lhbCBhbmQgZm9jdXNlZCBtb3N0bHkg b24gbG9va2luZyBmb3IgbG9naWNhbCBpbmNvbnNpc3RlbmNpZXMgaW4KKyAgICAgdGhlIGFkdmlj ZSBzdHJpbmc7IG9ubHkgdGhlIHBsYW5uZXIga25vd3Mgd2hhdCB3aWxsIGFjdHVhbGx5IHdvcmsu CisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICA8L2l0ZW1pemVkbGlzdD4KKworICA8 cGFyYT4KKyAgIEFsbCBhZHZpY2Ugc2hvdWxkIGJlIG1hcmtlZCBhcyBleGFjdGx5IG9uZSBvZiA8 bGl0ZXJhbD5tYXRjaGVkPC9saXRlcmFsPiwKKyAgIDxsaXRlcmFsPnBhcnRpYWxseSBtYXRjaGVk PC9saXRlcmFsPiwgb3IgPGxpdGVyYWw+bm90IG1hdGNoZWQ8L2xpdGVyYWw+LgorICA8L3BhcmE+ CisKKyA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJwZ3BsYW5hZHZpY2UtY29sbGVjdG9yIj4KKyAg PHRpdGxlPkFkdmljZSBDb2xsZWN0b3JzPC90aXRsZT4KKworICA8cGFyYT4KKyAgIDxsaXRlcmFs PnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBjYW4gYmUgY29uZmlndXJlZCB0byBhdXRvbWF0aWNh bGx5CisgICBnZW5lcmF0ZSBhZHZpY2UgZXZlcnkgdGltZSBhIHF1ZXJ5IGlzIHBsYW5uZWQgYW5k IHN0b3JlIHRoZSBxdWVyeSBhbmQKKyAgIHRoZSBnZW5lcmF0ZWQgYWR2aWNlIHN0cmluZyBlaXRo ZXIgaW4gbG9jYWwgb3Igc2hhcmVkIG1lbW9yeS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAg VG8gZW5hYmxlIGEgY29sbGVjdG9yLCB5b3UgbXVzdCBmaXJzdCBzZXQgYSBjb2xsZWN0aW9uIGxp bWl0LiBXaGVuIHRoZQorICAgbnVtYmVyIG9mIHF1ZXJpZXMgZm9yIHdoaWNoIGFkdmljZSBoYXMg YmVlbiBzdG9yZWQgZXhjZWVkcyB0aGUgY29sbGVjdGlvbgorICAgbGltaXQsIHRoZSBvbGRlc3Qg cXVlcmllcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYWR2aWNlIHdpbGwgYmUgZGlzY2FyZGVkLgor ICAgVGhlbiwgeW91IG11c3QgYWRqdXN0IGEgc2VwYXJhdGUgc2V0dGluZyB0byBhY3R1YWxseSBl bmFibGUgYWR2aWNlCisgICBjb2xsZWN0aW9uLiBGb3IgdGhlIGxvY2FsIGNvbGxlY3Rvciwgc2V0 IHRoZSBjb2xsZWN0aW9uIGxpbWl0IGJ5IGNvbmZpZ3VyaW5nCisgICA8bGl0ZXJhbD5wZ19wbGFu X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0PC9saXRlcmFsPiB0byBhIHZhbHVlCisgICBn cmVhdGVyIHRoYW4gemVybywgYW5kIHRoZW4gZW5hYmxlIGFkdmljZSBjb2xsZWN0aW9uIGJ5IHNl dHRpbmcKKyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3RvciA9IHRydWU8 L2xpdGVyYWw+LiBGb3IgdGhlIHNoYXJlZAorICAgY29sbGVjdG9yLCB0aGUgcHJvY2VkdXJlIGlz IHRoZSBzYW1lLCBleGNlcHQgdGhhdCB0aGUgbmFtZXMgb2YgdGhlIHNldHRpbmdzCisgICBhcmUg PGxpdGVyYWw+cGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ8L2xpdGVyYWw+ IGFuZAorICAgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvcjwvbGl0ZXJh bD4uIE5vdGUgdGhhdCB0aGUgbG9jYWwKKyAgIGNvbGxlY3RvciBzdG9yZXMgcXVlcnkgdGV4dHMg YW5kIGFkdmljZSBzdHJpbmdzIGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5LAorICAgYW5kIHRoZSBz aGFyZWQgY29sbGVjdG9yIGRvZXMgdGhlIHNhbWUgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5LCBz bworICAgY29uZmlndXJpbmcgbGFyZ2UgbGltaXRzIG1heSByZXN1bHQgaW4gY29uc2lkZXJhYmxl IG1lbW9yeSBjb25zdW1wdGlvbi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgT25jZSB0aGUg Y29sbGVjdG9yIGlzIGVuYWJsZWQsIHlvdSBjYW4gcnVuIGFueSBxdWVyaWVzIGZvciB3aGljaCB5 b3Ugd2lzaAorICAgdG8gc2VlIHRoZSBnZW5lcmF0ZWQgcGxhbiBhZHZpY2UuIFRoZW4sIHlvdSBj YW4gZXhhbWluZSB3aGF0IGhhcyBiZWVuCisgICBjb2xsZWN0ZWQgdXNpbmcgd2hpY2hldmVyIG9m CisgICA8bGl0ZXJhbD5TRUxFQ1QgKiBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNl KCk8L2xpdGVyYWw+IG9yCisgICA8bGl0ZXJhbD5TRUxFQ1QgKiBGUk9NIHBnX2dldF9jb2xsZWN0 ZWRfc2hhcmVkX2FkdmljZSgpPC9saXRlcmFsPgorICAgY29ycmVzcG9uZHMgdG8gdGhlIGNvbGxl Y3RvciB5b3UgZW5hYmxlZC4gVG8gZGlzY2FyZCB0aGUgY29sbGVjdGVkIGFkdmljZQorICAgYW5k IHJlbGVhc2UgbWVtb3J5LCB5b3UgY2FuIGNhbGwKKyAgIDxsaXRlcmFsPnBnX2NsZWFyX2NvbGxl Y3RlZF9sb2NhbF9hZHZpY2UoKTwvbGl0ZXJhbD4KKyAgIG9yIDxsaXRlcmFsPnBnX2NsZWFyX2Nv bGxlY3RlZF9zaGFyZWRfYWR2aWNlKCk8L2xpdGVyYWw+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+ CisgICBJbiBhZGRpdGlvbiB0byB0aGUgcXVlcnkgdGV4dHMgYW4gYWR2aWNlIHN0cmluZ3MsIHRo ZSBhZHZpY2UgY29sbGVjdG9ycworICAgd2lsbCBhbHNvIHN0b3JlIHRoZSBPSUQgb2YgdGhlIHJv bGUgdGhhdCBjYXVzZWQgdGhlIHF1ZXJ5IHRvIGJlIHBsYW5uZWQsCisgICB0aGUgT0lEIG9mIHRo ZSBkYXRhYmFzZSBpbiB3aGljaCB0aGUgcXVlcnkgd2FzIHBsYW5uZWQsIHRoZSBxdWVyeSBJRCwK KyAgIGFuZCB0aGUgdGltZSBhdCB3aGljaCB0aGUgY29sbGVjdGlvbiBvY2N1cnJlZC4gVGhpcyBt b2R1bGUgZG9lcyBub3QKKyAgIGF1dG9tYXRpY2FsbHkgZW5hYmxlIHF1ZXJ5IElEIGNvbXB1dGF0 aW9uOyB0aGVyZWZvcmUsIGlmIHlvdSB3YW50IHRoZQorICAgcXVlcnkgSUQgdmFsdWUgdG8gYmUg cG9wdWxhdGVkIGluIGNvbGxlY3RlZCBhZHZpY2UsIGJlIHN1cmUgdG8gY29uZmlndXJlCisgICA8 bGl0ZXJhbD5lbmFibGVfcXVlcnlfaWQgPSBvbjwvbGl0ZXJhbD4uIE90aGVyd2lzZSwgdGhlIHF1 ZXJ5IElEIG1heQorICAgYWx3YXlzIHNob3cgYXMgPGxpdGVyYWw+MDwvbGl0ZXJhbD4uCisgIDwv cGFyYT4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBncGxhbmFkdmljZS1mdW5jdGlvbnMi PgorICA8dGl0bGU+RnVuY3Rpb25zPC90aXRsZT4KKworICA8cGFyYT4KKyAgIE5vdGUgdGhhdCB0 aGVzZSBmdW5jdGlvbnMgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUKKyAgIDxsaXRlcmFs PnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBleHRlbnNpb24gaGFzIGJlZW4gaW5zdGFsbGVkIGlu IHRoZQorICAgY3VycmVudCBkYXRhYmFzZSwgd2hpY2ggaXMgbm90IG1hbmRhdG9yeSwgc2luY2Ug bXVjaCBvZiB0aGUgZnVuY3Rpb25hbGl0eQorICAgb2YgdGhpcyBtb2R1bGUgY2FuIGJlIHVzZWQg d2l0aG91dCBpbnN0YWxsaW5nIHRoZSBleHRlbnNpb24uCisgIDwvcGFyYT4KKworICA8dmFyaWFi bGVsaXN0PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+ cGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpIHJldHVybnMgdm9pZDwvZnVuY3Rpb24+ CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT5wZ19jbGVhcl9jb2xsZWN0ZWRfbG9j YWxfYWR2aWNlPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAg ICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmVtb3ZlcyBhbGwgY29sbGVjdGVkIHF1 ZXJ5IHRleHRzIGFuZCBhZHZpY2Ugc3RyaW5ncyBmcm9tIGJhY2tlbmQtbG9jYWwKKyAgICAgIG1l bW9yeS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4K KworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2dldF9j b2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCkgcmV0dXJucyBzZXRvZiAoaWQgYmlnaW50LAorICAgICAg ICB1c2VyaWQgb2lkLCBkYmlkIG9pZCwgcXVlcnlpZCBiaWdpbnQsIGNvbGxlY3Rpb25fdGltZSB0 aW1lc3RhbXB0eiwKKyAgICAgICAgcXVlcnkgdGV4dCwgYWR2aWNlIHRleHQpPC9mdW5jdGlvbj4K KyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2dldF9jb2xsZWN0ZWRfbG9jYWxf YWR2aWNlPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8 bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmV0dXJucyBhbGwgcXVlcnkgdGV4dHMgYW5k IGFkdmljZSBzdHJpbmdzIHN0b3JlZCBpbiB0aGUgbG9jYWwKKyAgICAgIDxsaW5rIGxpbmtlbmQ9 InBncGxhbmFkdmljZS1jb2xsZWN0b3IiPmFkdmljZSBjb2xsZWN0b3I8L2xpbms+LgorICAgICA8 L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlz dGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfY2xlYXJfY29sbGVjdGVkX3No YXJlZF9hZHZpY2UoKSByZXR1cm5zIHZvaWQ8L2Z1bmN0aW9uPgorICAgICA8aW5kZXh0ZXJtPgor ICAgICAgPHByaW1hcnk+cGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2U8L3ByaW1hcnk+ CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAg PHBhcmE+CisgICAgICBSZW1vdmVzIGFsbCBjb2xsZWN0ZWQgcXVlcnkgdGV4dHMgYW5kIGFkdmlj ZSBzdHJpbmdzIGZyb20gc2hhcmVkCisgICAgICBtZW1vcnkuCisgICAgIDwvcGFyYT4KKyAgICA8 L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAg PHRlcm0+CisgICAgIDxmdW5jdGlvbj5wZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKSBy ZXR1cm5zIHNldG9mIChpZCBiaWdpbnQsCisgICAgICAgIHVzZXJpZCBvaWQsIGRiaWQgb2lkLCBx dWVyeWlkIGJpZ2ludCwgY29sbGVjdGlvbl90aW1lIHRpbWVzdGFtcHR6LAorICAgICAgICBxdWVy eSB0ZXh0LCBhZHZpY2UgdGV4dCk8L2Z1bmN0aW9uPgorICAgICA8aW5kZXh0ZXJtPgorICAgICAg PHByaW1hcnk+cGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlPC9wcmltYXJ5PgorICAgICA8 L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgor ICAgICAgUmV0dXJucyBhbGwgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIHN0b3JlZCBp biB0aGUgc2hhcmVkCisgICAgICA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UtY29sbGVjdG9y Ij5hZHZpY2UgY29sbGVjdG9yPC9saW5rPi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+ CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKworIDwvc2VjdDI+CisK KyA8c2VjdDIgaWQ9InBncGxhbmFkdmljZS1jb25maWctcGFyYW1zIj4KKyAgPHRpdGxlPkNvbmZp Z3VyYXRpb24gUGFyYW1ldGVyczwvdGl0bGU+CisKKyAgPHZhcmlhYmxlbGlzdD4KKworICAgPHZh cmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UuYWR2 aWNlPC92YXJuYW1lPiAoPHR5cGU+c3RyaW5nPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAg ICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmFkdmljZTwvdmFybmFtZT4gY29u ZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwv dGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8dmFybmFtZT5wZ19w bGFuX2FkdmljZS5hZHZpY2U8L3Zhcm5hbWU+IGlzIGFuIGFkdmljZSBzdHJpbmcgdG8gYmUKKyAg ICAgIHVzZWQgZHVyaW5nIHF1ZXJ5IHBsYW5uaW5nLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0 aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJt PgorICAgICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9h ZHZpY2U8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4K KyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1 cHBsaWVkX2FkdmljZSA8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5 PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAg IDxwYXJhPgorICAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UuYWx3YXlzX2V4cGxhaW5fc3Vw cGxpZWRfYWR2aWNlPC92YXJuYW1lPiBjYXVzZXMKKyAgICAgIDxsaXRlcmFsPkVYUExBSU48L2xp dGVyYWw+IHRvIGFsd2F5cyBzaG93IGFueSBzdXBwbGllZCBhZHZpY2UgYW5kIHRoZQorICAgICAg YXNzb2NpYXRlZAorICAgICAgPGxpbmsgbGlua2VuZD0icGdwbGFuYWR2aWNlLWZlZWRiYWNrIj5h ZHZpY2UgZmVlZGJhY2s8L2xpbms+LgorICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVy YWw+dHJ1ZTwvbGl0ZXJhbD4uIElmIHNldCB0bworICAgICAgPGxpdGVyYWw+ZmFsc2U8L2xpdGVy YWw+LCB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgZGlzcGxheWVkIG9ubHkgd2hlbgorICAgICAg PGxpdGVyYWw+RVhQTEFJTiAoUExBTl9BRFZJQ0UpPC9saXRlcmFsPiBpcyB1c2VkLgorICAgICA8 L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlz dGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5hbHdheXNf c3RvcmVfYWR2aWNlX2RldGFpbHM8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAg ICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmFs d2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1l dGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlz dGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UuYWx3YXlz X3N0b3JlX2FkdmljZV9kZXRhaWxzPC92YXJuYW1lPiBhbGxvd3MKKyAgICAgIDxsaXRlcmFsPkVY UExBSU48L2xpdGVyYWw+IHRvIHNob3cgZGV0YWlscyByZWxhdGVkIHRvIHBsYW4gYWR2aWNlIGV2 ZW4KKyAgICAgIHdoZW4gcHJlcGFyZWQgcXVlcmllcyBhcmUgdXNlZC4gIFRoZSBkZWZhdWx0IHZh bHVlIGlzCisgICAgICA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4uICBXaGVuIHBsYW5uaW5nIGEg cHJlcGFyZWQgcXVlcnksIGl0IGlzIG5vdAorICAgICAgcG9zc2libGUgdG8ga25vdyB3aGV0aGVy IDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IHdpbGwgbGF0ZXIgYmUgdXNlZCwKKyAgICAgIHNv IGJ5IGRlZmF1bHQsIHRvIHJlZHVjZSBvdmVyaGVhZCwgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8 L2xpdGVyYWw+CisgICAgICB3aWxsIG5vdCBnZW5lcmF0ZSBwbGFuIGFkdmljZSBvciBmZWVkYmFj ayBvbiBzdXBwbGllZCBhZHZpY2UuIFRoaXMgbWVhbnMKKyAgICAgIHRoYXQgaWYgPGxpdGVyYWw+ RVhQTEFJTiBFWEVDVVRFPC9saXRlcmFsPiBpcyB1c2VkIG9uIHRoZSBwcmVwYXJlZCBxdWVyeSwK KyAgICAgIGl0IHdpbGwgbm90IGJlIGFibGUgdG8gc2hvdyB0aGlzIGluZm9ybWF0aW9uLiBDaGFu Z2luZyB0aGlzIHNldHRpbmcgdG8KKyAgICAgIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+IGF2b2lk cyB0aGlzIHByb2JsZW0sIGJ1dCBhZGRzIGFkZGl0aW9uYWwKKyAgICAgIG92ZXJoZWFkLiBJdCBp cyBwcm9iYWJseSBhIGdvb2QgaWRlYSB0byBlbmFibGUgdGhpcyBvcHRpb24gb25seSBpbgorICAg ICAgc2Vzc2lvbnMgd2hlcmUgaXQgaXMgbmVlZGVkLCByYXRoZXIgdGhhbiBvbiBhIHN5c3RlbS13 aWRlIGJhc2lzLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5wZ19w bGFuX2FkdmljZS5mZWVkYmFja193YXJuaW5nczwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5 cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfcGxhbl9h ZHZpY2UuZmVlZGJhY2tfd2FybmluZ3M8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVy PC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0 ZW0+CisgICAgIDxwYXJhPgorICAgICAgV2hlbiBzZXQgdG8gdHJ1ZSwgPHZhcm5hbWU+cGdfcGxh bl9hZHZpY2UuZmVlZGJhY2tfd2FybmluZ3M8L3Zhcm5hbWU+CisgICAgICBlbWl0cyBhIHdhcm5p bmcgd2hlbmV2ZXIgc3VwcGxpZWQgcGxhbiBhZHZpY2UgaXMgbm90IHN1Y2Nlc3NmdWxseQorICAg ICAgZW5mb3JjZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFs Pi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKwor ICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZp Y2UubG9jYWxfY29sbGVjdG9yPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAg IDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5wZ19wbGFuX2FkdmljZS5sb2Nh bF9jb2xsZWN0b3I8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5Pgor ICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxw YXJhPgorICAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdG9yPC92YXJu YW1lPiBlbmFibGVzIHRoZQorICAgICAgbG9jYWwgPGxpbmsgbGlua2VuZD0icGdwbGFuYWR2aWNl LWNvbGxlY3RvciI+YWR2aWNlIGNvbGxlY3RvcjwvbGluaz4uCisgICAgICBUaGUgZGVmYXVsdCB2 YWx1ZSBpcyA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4uCisgICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRl cm0+CisgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQ8 L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAg IDxwcmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQ8 L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4 dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAg PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdDwvdmFybmFtZT4g c2V0cyB0aGUKKyAgICAgIG1heGltdW0gbnVtYmVyIG9mIHF1ZXJ5IHRleHRzIGFuZCBhZHZpY2Ug c3RyaW5ncyByZXRhaW5lZCBieSB0aGUKKyAgICAgIGxvY2FsIDxsaW5rIGxpbmtlbmQ9InBncGxh bmFkdmljZS1jb2xsZWN0b3IiPmFkdmljZSBjb2xsZWN0b3I8L2xpbms+LgorICAgICAgVGhlIGRl ZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+MDwvbGl0ZXJhbD4uCisgICAgIDwvcGFyYT4KKyAgICA8 L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAg PHRlcm0+CisgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0b3I8L3Zh cm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxw cmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0b3I8L3Zhcm5hbWU+ IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAg ICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPHZhcm5hbWU+ cGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvcjwvdmFybmFtZT4gZW5hYmxlcyB0aGUKKyAg ICAgIHNoYXJlZCA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UtY29sbGVjdG9yIj5hZHZpY2Ug Y29sbGVjdG9yPC9saW5rPi4KKyAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxsaXRlcmFsPmZh bHNlPC9saXRlcmFsPi4gIE9ubHkgc3VwZXJ1c2VycyBhbmQgdXNlcnMKKyAgICAgIHdpdGggdGhl IGFwcHJvcHJpYXRlIDxsaXRlcmFsPlNFVDwvbGl0ZXJhbD4gcHJpdmlsZWdlIGNhbiBjaGFuZ2Ug dGhpcworICAgICAgc2V0dGluZy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8 L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZh cm5hbWU+cGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ8L3Zhcm5hbWU+ICg8 dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2 YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PC92YXJuYW1lPiBj b25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAg PC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDx2YXJuYW1lPnBn X3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PC92YXJuYW1lPiBzZXRzIHRoZQor ICAgICAgbWF4aW11bSBudW1iZXIgb2YgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIHJl dGFpbmVkIGJ5IHRoZQorICAgICAgc2hhcmVkIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZS1j b2xsZWN0b3IiPmFkdmljZSBjb2xsZWN0b3I8L2xpbms+LgorICAgICAgVGhlIGRlZmF1bHQgdmFs dWUgaXMgPGxpdGVyYWw+MDwvbGl0ZXJhbD4uICBPbmx5IHN1cGVydXNlcnMgYW5kIHVzZXJzCisg ICAgICB3aXRoIHRoZSBhcHByb3ByaWF0ZSA8bGl0ZXJhbD5TRVQ8L2xpdGVyYWw+IHByaXZpbGVn ZSBjYW4gY2hhbmdlIHRoaXMKKyAgICAgIHNldHRpbmcuCisgICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRl cm0+CisgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnRyYWNlX21hc2s8L3Zhcm5hbWU+ICg8 dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2 YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnRyYWNlX21hc2s8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24g cGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAg ICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgV2hlbiA8dmFybmFtZT5wZ19wbGFuX2Fk dmljZS50cmFjZV9tYXNrPC92YXJuYW1lPiBpcworICAgICAgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJh bD4sIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiB3aWxsIHByaW50CisgICAgICBt ZXNzYWdlcyBkdXJpbmcgcXVlcnkgcGxhbm5pbmcgZWFjaCB0aW1lIHRoYXQKKyAgICAgIDxsaXRl cmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBhbHRlcnMgdGhlIG1hc2sgb2YgYWxsb3dhYmxl IHF1ZXJ5CisgICAgICBwbGFuIHR5cGVzIGluIHJlc3BvbnNlIHRvIHN1cHBsaWVkIHBsYW4gYWR2 aWNlLiBUaGUgZGVmYXVsdCB2YWx1ZXMgaXMKKyAgICAgIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFs Pi4gVGhlIG1lc3NhZ2VzIHByaW50ZWQgYnkgdGhpcyBzZXR0aW5nIGFyZSBub3QKKyAgICAgIGV4 Y2VwdGVkIHRvIGJlIHVzZWZ1bCBleGNlcHQgZm9yIHB1cnBvc2VzIG9mIGRlYnVnZ2luZyB0aGlz IG1vZHVsZS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRy eT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBncGxh bmFkdmljZS1saW1pdGF0aW9ucyI+CisgIDx0aXRsZT5MaW1pdGF0aW9uczwvdGl0bGU+CisKKyAg PHBhcmE+CisgICBJdCBpcyBjdXJyZW50bHkgbm90IHBvc3NpYmxlIHRvIGNvbnRyb2wgYW55IGFz cGVjdCBvZiB0aGUgcGxhbm5lcidzIGJlaGF2aW9yCisgICB3aXRoIHJlc3BlY3QgdG8gYWdncmVn YXRpb24uIFRoaXMgaW5jbHVkZXMgYm90aCB3aGV0aGVyIGFnZ3JlZ2F0ZXMgYXJlCisgICBjb21w dXRlZCBieSBzb3J0aW5nIG9yIGhhc2hpbmcsIGFuZCBhbHNvIHdoZXRoZXIgc3RyYXRlZ2llcyBz dWNoIGFzCisgICA8bGluayBsaW5rZW5kPSJndWMtZW5hYmxlLWVhZ2VyLWFnZ3JlZ2F0ZSI+ZWFn ZXIgYWdncmVnYXRpb248L2xpbms+IG9yCisgICA8bGluayBsaW5rZW5kPSJndWMtZW5hYmxlLXBh cnRpdGlvbndpc2UtYWdncmVnYXRlIj5wYXJ0aXRpb253aXNlCisgICBhZ2dyZWdhdGlvbjwvbGlu az4gYXJlIHVzZWQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEl0IGFsc28gaXMgY3VycmVu dGx5IG5vdCBwb3NzaWJsZSB0byBjb250cm9sIGFueSBhc3BlY3Qgb2YgdGhlIHBsYW5uZXIncwor ICAgYmVoYXZpb3Igd2l0aCByZXNwZWN0IHRvIHNldCBvcGVyYXRpb25zIHN1Y2ggYXMgPGxpdGVy YWw+VU5JT048L2xpdGVyYWw+CisgICBvciA8bGl0ZXJhbD5JTlRFUlNFQ1Q8L2xpdGVyYWw+Lgor ICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBBcyBkaXNjdXNzZWQgYWJvdmUgdW5kZXIsIDxsaW5r IGxpbmtlbmQ9InBncGxhbmFkdmljZS1ob3ctaXQtd29ya3MiPkhvdworICAgSXQgV29ya3M8L2xp bms+LCB0aGUgdXNlIG9mIHBsYW4gYWR2aWNlIGNhbiBvbmx5IGFmZmVjdCB3aGljaCBwbGFuCisg ICB0aGUgcGxhbm5lciBjaG9vc2VzIGZyb20gYW1vbmcgdGhvc2UgaXQgYmVsaWV2ZXMgdG8gYmUg dmlhYmxlLiBJdCBjYW4gbmV2ZXIKKyAgIGZvcmNlIHRoZSBjaG9pY2Ugb2YgYSBwbGFuIHdoaWNo IHRoZSBwbGFubmVyIHJlZnVzZWQgdG8gY29uc2lkZXIgaW4gdGhlCisgICBmaXJzdCBwbGFjZS4K KyAgPC9wYXJhPgorIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBncGxhbmFkdmljZS1hdXRob3Ii PgorICA8dGl0bGU+QXV0aG9yPC90aXRsZT4KKworICA8cGFyYT4KKyAgIFJvYmVydCBIYWFzIDxl bWFpbD5yaGFhc0Bwb3N0Z3Jlc3FsLm9yZzwvZW1haWw+CisgIDwvcGFyYT4KKyA8L3NlY3QyPgor Cis8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAyNDE5NDU3MzRlYy4uYmVl OTVjYWFjYWYgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cisr KyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0zOTgxLDYgKzM5ODEsNDUg QEAgcGdfdXVpZF90CiBwZ193Y2hhcgogcGdfd2NoYXJfdGJsCiBwZ3BfYXJtb3JfaGVhZGVyc19z dGF0ZQorcGdwYV9jb2xsZWN0ZWRfYWR2aWNlCitwZ3BhX2FkdmljZV9pdGVtCitwZ3BhX2Fkdmlj ZV90YWdfdHlwZQorcGdwYV9hZHZpY2VfdGFyZ2V0CitwZ3BhX2lkZW50aWZpZXIKK3BncGFfaW5k ZXhfdGFyZ2V0CitwZ3BhX2luZGV4X3R5cGUKK3BncGFfaXRtX3R5cGUKK3BncGFfam9fb3V0Y29t ZQorcGdwYV9qb2luX2NsYXNzCitwZ3BhX2pvaW5fbWVtYmVyCitwZ3BhX2pvaW5fc3RhdGUKK3Bn cGFfam9pbl9zdHJhdGVneQorcGdwYV9qb2luX3Vucm9sbGVyCitwZ3BhX2xvY2FsX2FkdmljZQor cGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsKK3BncGFfb3V0cHV0X2NvbnRleHQKK3BncGFfcGxhbl93 YWxrZXJfY29udGV4dAorcGdwYV9wbGFubmVyX3N0YXRlCitwZ3BhX3FmX3R5cGUKK3BncGFfcXVl cnlfZmVhdHVyZQorcGdwYV9yaV9jaGVja2VyCitwZ3BhX3JpX2NoZWNrZXJfa2V5CitwZ3BhX3Nj YW4KK3BncGFfc2Nhbl9zdHJhdGVneQorcGdwYV9zaGFyZWRfYWR2aWNlCitwZ3BhX3NoYXJlZF9h ZHZpY2VfY2h1bmsKK3BncGFfc2hhcmVkX3N0YXRlCitwZ3BhX3NqX3VuaXF1ZV9yZWwKK3BncGFf dGFyZ2V0X3R5cGUKK3BncGFfdHJvdmUKK3BncGFfdHJvdmVfZW50cnkKK3BncGFfdHJvdmVfZW50 cnlfZWxlbWVudAorcGdwYV90cm92ZV9lbnRyeV9oYXNoCitwZ3BhX3Ryb3ZlX2VudHJ5X2tleQor cGdwYV90cm92ZV9sb29rdXBfdHlwZQorcGdwYV90cm92ZV9yZXN1bHQKK3BncGFfdHJvdmVfc2xp Y2UKK3BncGFfdW5yb2xsZWRfam9pbgogcGdzb2NrZXQKIHBnc3FsX3RoaW5nX3QKIHBnc3NFbnRy eQotLSAKMi41MS4wCgo= --000000000000e54172064b3290cb--