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 1wfKNy-005ObK-0H for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Jul 2026 16:35:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wfKNw-002Htg-35 for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Jul 2026 16:35:32 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wfKNw-002HtY-1l for pgsql-hackers@lists.postgresql.org; Thu, 02 Jul 2026 16:35:32 +0000 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wfKNu-00000001Nvn-1UHk for pgsql-hackers@lists.postgresql.org; Thu, 02 Jul 2026 16:35:32 +0000 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-c1222885048so25308766b.2 for ; Thu, 02 Jul 2026 09:35:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783010128; x=1783614928; darn=lists.postgresql.org; h=subject:from:cc:to:content-language:user-agent:mime-version:date :message-id:content-type:from:to:cc:subject:date:message-id:reply-to :content-type; bh=mydLraKGnBHY3PQ3VPzZUsOih5K7K6hzKnolAepr/7s=; b=qdCbFVR36VN1sLPrbLtmbBSxYfUnf+4OI6O6RziyrmHEaSowHlX/pXmPTWeK3aV+Ul IMOSO/VVUCrzM264NDj4s8LvKdP60K91yZEglMZJkFDa6npy0ok3DSX8xzh1/OCir+nJ 998LrEiNMkBAOtUk9nPePMd/9om5T9Hd5QQAm778W9HSH09TIQbP3FtRq8HVN72Vr1M5 mIFPoBoXbyZHAGKiAWahjTZMkgJsKjFkFUQtHjVKmFOJ+eQTE1NHwTM3RVbYOZgLCYXX d2Y/25TlfjswGqeyi3oaOOtrrzR2JuXrOLi6ziWf2riYOCyd9Qwa9lo2Eix2n6DZbHHt 2GVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783010128; x=1783614928; h=subject:from:cc:to:content-language:user-agent:mime-version:date :message-id:content-type:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=mydLraKGnBHY3PQ3VPzZUsOih5K7K6hzKnolAepr/7s=; b=Gi7vK6j+3jY2EqQj1kgeq9o29oiR/pfbKmamuf8krLEXPPjNzllwLno0R311Lik1xZ daxpBpvOGa7LfmulOMJ9rdMQUbB1QeeSNhsd/Xj5GY0a3CefhQCY3i+qeEqcheKzLq2h K250wwHqxlLSCq5yXPFJDk/cwrDxGrHq0XyHxiXkRAB8Z31EL/OK3oJ6NCV8zKCv2/v9 68w/wF4giIjwP8Rjsxpl3JaNUF68TM7N6LJxxzdTVVOloQXYrGCtWC1mCVKh3mGSQmQC 9oC8Sv8O5GU2ltp2Mcist3tCm50UpbdYAH4L8w0tNyuQcSO8/A7rSFZjweK88zg5SVGN 06jQ== X-Gm-Message-State: AOJu0YyeVCXxFx+61dyhaj6tFe7usW/4aSJJ7BLsqypaPhpDm9jIKDjB yPk7LTGuULSC7lEvZjltdxnpqKgt6mErXHXquG5uc/3OKAOiVarYD0KrGSFnUEPG X-Gm-Gg: AfdE7cljLam772yEgQ3rjhIpNz9kv72yEn2Cajcq/FUKft/7NHR//Ud13YeQqblsYJn APEYx+OC0hypd++KrpvwE+fPQYLJ0kGtKYUqxnsCCocWS6oO9cYEFObV7MkqX+l6gk253B6VluS k5KmY5dpOzqm0le9UsvCpGy0RyvW4jk1UNaHX83UO/rFtv3Y3OJq/6eSluj4FWfG3HcJydYoAoU OPaUt4vWZYxTV+BMEJlePzlmVw6pKXRVS9ejVgpXQlbU0De+RN4NPjC9T5YMFAww0NdHwF7Z2Cq 913tTBmtH5l4bVmlkLO5GGuFAVKTZ4B1d91i1FOGNACZ5xvLibDbz3oBVkt79s/J7P7TrnNY+8j Brg3I68+Bh6ZuNuh6XOrlWUuRLUumd1AicUCO6PAKlc9YFngLD+RL+8xiJAIXuvsCbP5TkbHEXp i4dtgYx5rh7/GqJvnCwZc0O4MxmG1FWMk7RR8wVB1P5JpywS75V7mdGNxUkscqQuQkOJofiFrjQ UjC X-Received: by 2002:a17:907:3e1a:b0:bed:a51c:e8e7 with SMTP id a640c23a62f3a-c12aa372d15mr173439566b.3.1783010127929; Thu, 02 Jul 2026 09:35:27 -0700 (PDT) Received: from [10.64.144.24] ([163.116.235.144]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c12b6093794sm156483866b.21.2026.07.02.09.35.26 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 02 Jul 2026 09:35:26 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------iABVHbzyLI4PqmstWwrO17aa" Message-ID: <123bbb65-ae76-4112-b33d-864aca745b7b@gmail.com> Date: Thu, 2 Jul 2026 18:35:24 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: pgsql-hackers@lists.postgresql.org Cc: robertmhaas@gmail.com From: Florin Irion Subject: pg_plan_advice: add NO_ scan and join method tags List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------iABVHbzyLI4PqmstWwrO17aa Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hello, The attached patch adds negative scan- and join-method advice to pg_plan_advice. These tags are the complement of the existing positive ones:   NO_SEQ_SCAN, NO_INDEX_SCAN, NO_INDEX_ONLY_SCAN,   NO_BITMAP_HEAP_SCAN, NO_TID_SCAN   NO_HASH_JOIN, NO_NESTED_LOOP (+ _PLAIN/_MATERIALIZE/_MEMOIZE),   NO_MERGE_JOIN (+ _PLAIN/_MATERIALIZE) Each NO_ tag forbids the corresponding strategy for the named relation, so the planner is free to choose any other one that is eligible. In many cases this is more convenient than listing all the methods you want, when in fact you only need to exclude a single one. Some points about the design: - The NO_ join tags keep the same join-order constraint as their positive counterparts. NO_HASH_JOIN(x) means "use hash join or merge join with x on the inner side", so x cannot become the driving relation. - Several NO_ tags for the same relation can be combined without problem. A NO_ tag and a positive tag for the same method are in conflict (both are marked as conflicting and neither is applied); a NO_ tag and a positive tag for different methods are compatible. - The scan NO_ tags use simple_target_list (no sublists), and the join NO_ tags use generic_target_list, exactly as their positive counterparts do. Regression tests (no_scan, no_join) and documentation are included. The patch applies on master and is pgindent-clean. I would be glad to receive any feedback. Thank you, Florin --------------iABVHbzyLI4PqmstWwrO17aa Content-Type: text/plain; charset=UTF-8; name="v1-0001-pg_plan_advice-Add-NO_SCAN-and-NO_JOIN_METHOD-tag.patch" Content-Disposition: attachment; filename*0="v1-0001-pg_plan_advice-Add-NO_SCAN-and-NO_JOIN_METHOD-tag.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA3NjYyOGJkOGFlZTFiODk3N2U0MTZmNDUxNjJhY2EzNzk1ZTc1YmE5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBGbG9yaW4gSXJpb24gPGZsb3Jpbi5pcmlvbkBlbnRl cnByaXNlZGIuY29tPgpEYXRlOiBUaHUsIDE4IEp1biAyMDI2IDE0OjI4OjUwICswMjAwClN1 YmplY3Q6IFtQQVRDSCB2MV0gcGdfcGxhbl9hZHZpY2U6IEFkZCBOT19TQ0FOIGFuZCBOT19K T0lOX01FVEhPRCB0YWdzCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9w bGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpB ZGQgTk9fU0VRX1NDQU4sIE5PX0lOREVYX1NDQU4sIE5PX0lOREVYX09OTFlfU0NBTiwKTk9f QklUTUFQX0hFQVBfU0NBTiwgYW5kIE5PX1RJRF9TQ0FOIGFzIG5lZ2F0aXZlIHNjYW4tbWV0 aG9kCmRpcmVjdGl2ZXM7IGFuZCBOT19IQVNIX0pPSU4sIE5PX05FU1RFRF9MT09QIChwbHVz IF9QTEFJTiwKX01FTU9JWkUsIF9NQVRFUklBTElaRSB2YXJpYW50cyksIGFuZCBOT19NRVJH RV9KT0lOIChwbHVzIF9QTEFJTiwKX01BVEVSSUFMSVpFIHZhcmlhbnRzKSBhcyBuZWdhdGl2 ZSBqb2luLW1ldGhvZCBkaXJlY3RpdmVzLgoKRWFjaCBOT18gdGFnIGlzIHRoZSBsb2dpY2Fs IGNvbXBsZW1lbnQgb2YgaXRzIHBvc2l0aXZlIGNvdW50ZXJwYXJ0LgpTY2FuIE5PXyB0YWdz IHVzZSBzaW1wbGVfdGFyZ2V0X2xpc3QgKHN1Ymxpc3RzIGludmFsaWQpOyBqb2luIE5PXwp0 YWdzIHVzZSBnZW5lcmljX3RhcmdldF9saXN0IChzdWJsaXN0cyBhbGxvd2VkKS4gQmVjYXVz ZSBvZiB0aGlzLApib3RoIHRoZSBzY2FubmVyIGFuZCB0aGUgcGFyc2VyIG9ubHkgbmVlZCB0 byBoYW5kbGUgdGhlIE5PXyBzY2FuCnRhZ3MgZXhwbGljaXRseTogdGhlIHNjYW5uZXIgY2xh c3NpZmllcyB0aGVtIGFzIFRPS19UQUdfU0lNUExFIGFuZAp0aGUgcGFyc2VyIHJlc29sdmVz IHRoZWlyIG5hbWVzIGluIHRoZSBUT0tfVEFHX1NJTVBMRSBhY3Rpb24uIFRoZQpOT18gam9p biB0YWdzIGZhbGwgdGhyb3VnaCB0byB0aGUgZGVmYXVsdCBUT0tfVEFHX0dFTkVSSUMgYnJh bmNoLAp3aGVyZSB0aGUgdGFnIGlzIHJlc29sdmVkIGdlbmVyaWNhbGx5IGJ5IHBncGFfcGFy c2VfYWR2aWNlX3RhZywgc28KdGhleSBuZWVkIG5vIHNjYW5uZXIgb3IgcGFyc2VyIGNoYW5n ZS4KCkNvbmZsaWN0IGRldGVjdGlvbiBtYXJrcyBib3RoIGEgcG9zaXRpdmUgYW5kIGl0cyBO T18gY291bnRlcnBhcnQgYXMKY29uZmxpY3Rpbmcgd2hlbiB0aGV5IHRhcmdldCB0aGUgc2Ft ZSByZWxhdGlvbiBhbmQgbWV0aG9kLgoKTk9fIGpvaW4gdGFncyBjYXJyeSB0aGUgc2FtZSBq b2luLW9yZGVyIGNvbnN0cmFpbnQgYXMgdGhlaXIgcG9zaXRpdmUKY291bnRlcnBhcnRzOiBO T19IQVNIX0pPSU4oeCkgbWVhbnMgeCBtYXkgbm90IGFwcGVhciBvbiB0aGUgb3V0ZXIKKGRy aXZpbmcpIHNpZGUg4oCUIGVxdWl2YWxlbnRseSwgaXQgbWVhbnMgInVzZSBoYXNoIGpvaW4g b3IgbWVyZ2Ugam9pbgp3aXRoIHggYXMgaW5uZXIiLiBUaGUgY29uc3RyYWludCBpcyBzZW1h bnRpY2FsbHkgaW50cmluc2ljLCBub3QKaW5jaWRlbnRhbC4KLS0tCiBjb250cmliL3BnX3Bs YW5fYWR2aWNlL01ha2VmaWxlICAgICAgICAgICAgIHwgICA0ICstCiBjb250cmliL3BnX3Bs YW5fYWR2aWNlL2V4cGVjdGVkL25vX2pvaW4ub3V0IHwgMjg4ICsrKysrKysrKysrKysrKysr KysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL25vX3NjYW4ub3V0IHwgMTk3 ICsrKysrKysrKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYyAgICAg ICAgICAgfCAgNTIgKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oICAg ICAgICAgICB8ICAxMyArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkg ICAgICAgIHwgIDEwICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMg ICAgICAgfCAxODQgKysrKysrKysrKystLQogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3NjYW5uZXIubCAgICAgICB8ICAgNyArLQogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3Ryb3ZlLmMgICAgICAgICB8ICAxMyArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf d2Fsa2VyLmMgICAgICAgIHwgIDcxICsrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Nx bC9ub19qb2luLnNxbCAgICAgIHwgIDkyICsrKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL25vX3NjYW4uc3FsICAgICAgfCAgODggKysrKysrCiBkb2Mvc3JjL3NnbWwvcGdw bGFuYWR2aWNlLnNnbWwgICAgICAgICAgICAgIHwgMTI5ICsrKysrKysrKwogMTMgZmlsZXMg Y2hhbmdlZCwgMTEyNSBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL25vX2pvaW4ub3V0 CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9u b19zY2FuLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL25vX2pvaW4uc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9zcWwvbm9fc2Nhbi5zcWwKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2 aWNlL01ha2VmaWxlIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZQppbmRleCBk MDE2NzIzNzk0ZC4uMmRmZTM2ZmVmNGMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvTWFrZWZpbGUKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZQpA QCAtMTksOCArMTksOCBAQCBIRUFERVJTX3BnX3BsYW5fYWR2aWNlID0gcGdfcGxhbl9hZHZp Y2UuaAogCiBQR0ZJTEVERVNDID0gInBnX3BsYW5fYWR2aWNlIC0gaGVscCB0aGUgcGxhbm5l ciBnZXQgdGhlIHJpZ2h0IHBsYW4iCiAKLVJFR1JFU1MgPSBhbHRlcm5hdGl2ZXMgZ2F0aGVy IGpvaW5fb3JkZXIgam9pbl9zdHJhdGVneSBwYXJ0aXRpb253aXNlIFwKLQlwcmVwYXJlZCBz Y2FuIHNlbWlqb2luIHN5bnRheAorUkVHUkVTUyA9IGFsdGVybmF0aXZlcyBnYXRoZXIgam9p bl9vcmRlciBqb2luX3N0cmF0ZWd5IG5vX2pvaW4gbm9fc2NhbiBcCisJcGFydGl0aW9ud2lz ZSBwcmVwYXJlZCBzY2FuIHNlbWlqb2luIHN5bnRheAogCiBFWFRSQV9JTlNUQUxMID0gY29u dHJpYi90c21fc3lzdGVtX3RpbWUKIApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9leHBlY3RlZC9ub19qb2luLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhw ZWN0ZWQvbm9fam9pbi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjVjM2YzZmRiNzcyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9leHBlY3RlZC9ub19qb2luLm91dApAQCAtMCwwICsxLDI4OCBAQAorTE9BRCAncGdf cGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAw OworQ1JFQVRFIFRBQkxFIG5vX2pvaW5fZGltIChpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGRp bSB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJ TlRPIG5vX2pvaW5fZGltIChkaW0pIFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVy YXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIG5vX2pvaW5fZGltOworQ1JF QVRFIFRBQkxFIG5vX2pvaW5fZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5LAorCWRpbV9p ZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgbm9fam9pbl9kaW0gKGlkKQorKSBXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBub19qb2luX2Zh Y3QKKwlTRUxFQ1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkg ZzsKK0NSRUFURSBJTkRFWCBub19qb2luX2ZhY3RfZGltX2lkIE9OIG5vX2pvaW5fZmFjdCAo ZGltX2lkKTsKK1ZBQ1VVTSBBTkFMWVpFIG5vX2pvaW5fZmFjdDsKKy0tIEJhc2VsaW5lOiBo YXNoIGpvaW4gd2l0aCBkIG9uIHRoZSBpbm5lciBzaWRlLgorRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX2pvaW5fZmFjdCBmIEpPSU4gbm9f am9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAg LT4gIFNlcSBTY2FuIG9uIG5vX2pvaW5fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIG5vX2pvaW5fZGltIGQKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBk KQorICAgTk9fR0FUSEVSKGYgZCkKKygxMCByb3dzKQorCistLSBOT19IQVNIX0pPSU4oZCk6 IGQgc3RheXMgaW5uZXIsIHBsYW5uZXIgZmFsbHMgYmFjayB0byBhbm90aGVyIG1ldGhvZC4K K0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdOT19IQVNIX0pP SU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBG Uk9NIG5vX2pvaW5fZmFjdCBmIEpPSU4gbm9fam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQu aWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEg U2NhbiBvbiBub19qb2luX2ZhY3QgZgorICAgLT4gIE1lbW9pemUKKyAgICAgICAgIENhY2hl IEtleTogZi5kaW1faWQKKyAgICAgICAgIENhY2hlIE1vZGU6IGxvZ2ljYWwKKyAgICAgICAg IC0+ICBJbmRleCBTY2FuIHVzaW5nIG5vX2pvaW5fZGltX3BrZXkgb24gbm9fam9pbl9kaW0g ZAorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW1faWQpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBOT19IQVNIX0pPSU4oZCkgLyogbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTkVTVEVEX0xP T1BfTUVNT0laRShkKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMu bm9fam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTUgcm93cykKKworQ09N TUlUOworLS0gTk9fSEFTSF9KT0lOKGYpOiB0aGUgam9pbi1vcmRlciBjb25zdHJhaW50IGZv cmNlcyBmIHRvIHRoZSBpbm5lciBzaWRlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ05PX0hBU0hfSk9JTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fam9pbl9mYWN0IGYgSk9JTiBub19q b2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGlt X2lkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgbm9fam9pbl9kaW1fcGtleSBvbiBub19q b2luX2RpbSBkCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBub19qb2luX2ZhY3RfZGltX2lk IG9uIG5vX2pvaW5fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBOT19IQVNI X0pPSU4oZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIoZCBmKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAgSU5ERVhfU0NBTihk IHB1YmxpYy5ub19qb2luX2RpbV9wa2V5IGYgcHVibGljLm5vX2pvaW5fZmFjdF9kaW1faWQp CisgICBOT19HQVRIRVIoZiBkKQorKDExIHJvd3MpCisKK0NPTU1JVDsKKy0tIE5PX05FU1RF RF9MT09QKGYpOiBmIGZvcmNlZCBpbm5lciwgYWxsIE5MIHZhcmlhbnRzIGZvcmJpZGRlbiAt PiBtZXJnZSBqb2luLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ05PX05FU1RFRF9MT09QKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCisJU0VMRUNUICogRlJPTSBub19qb2luX2ZhY3QgZiBKT0lOIG5vX2pvaW5fZGltIGQg T04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAt PiAgSW5kZXggU2NhbiB1c2luZyBub19qb2luX2RpbV9wa2V5IG9uIG5vX2pvaW5fZGltIGQK KyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIG5vX2pvaW5fZmFjdF9kaW1faWQgb24gbm9fam9p bl9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5PX05FU1RFRF9MT09QKGYp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGQgZikKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMu bm9fam9pbl9kaW1fcGtleSBmIHB1YmxpYy5ub19qb2luX2ZhY3RfZGltX2lkKQorICAgTk9f R0FUSEVSKGYgZCkKKygxMSByb3dzKQorCitDT01NSVQ7CistLSBOT19NRVJHRV9KT0lOKGQp OiBkIGFscmVhZHkgaW5uZXIsIGhhc2ggam9pbiBzdGlsbCBhbGxvd2VkIC0+IHBsYW4gdW5j aGFuZ2VkLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05P X01FUkdFX0pPSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIG5vX2pvaW5fZmFjdCBmIEpPSU4gbm9fam9pbl9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgor ICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIG5v X2pvaW5fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5v X2pvaW5fZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5PX01FUkdFX0pPSU4o ZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBOT19HQVRI RVIoZiBkKQorKDEyIHJvd3MpCisKK0NPTU1JVDsKKy0tIFN0YWNraW5nOiBOT19IQVNIX0pP SU4oZikgKyBOT19ORVNURURfTE9PUChmKSBsZWF2ZXMgb25seSBtZXJnZSBqb2luLgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05PX0hBU0hfSk9JTihm KSBOT19ORVNURURfTE9PUChmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gbm9fam9pbl9mYWN0IGYgSk9JTiBub19qb2luX2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgbm9fam9pbl9kaW1fcGtleSBvbiBub19qb2luX2RpbSBkCisg ICAtPiAgSW5kZXggU2NhbiB1c2luZyBub19qb2luX2ZhY3RfZGltX2lkIG9uIG5vX2pvaW5f ZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBOT19IQVNIX0pPSU4oZikgLyog bWF0Y2hlZCAqLworICAgTk9fTkVTVEVEX0xPT1AoZikgLyogbWF0Y2hlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTUVSR0VfSk9JTl9Q TEFJTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ub19qb2luX2RpbV9wa2V5IGYgcHVi bGljLm5vX2pvaW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3Mp CisKK0NPTU1JVDsKKy0tIFNwZWNpZmljIE5PXyB2YXJpYW50cyB0YXJnZXRpbmcgZCwgYWxy ZWFkeSB0aGUgaW5uZXIgc2lkZTogZm9yYmlkZGluZyBhbnkgb25lCistLSBOTCBvciBtZXJn ZSB2YXJpYW50IGxlYXZlcyBoYXNoIGpvaW4gYXZhaWxhYmxlLCBzbyB0aGUgcGxhbiBpcyB1 bmNoYW5nZWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn Tk9fTkVTVEVEX0xPT1BfUExBSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX2pvaW5fZmFjdCBmIEpPSU4gbm9fam9pbl9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBT ZXEgU2NhbiBvbiBub19qb2luX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBub19qb2luX2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBO T19ORVNURURfTE9PUF9QTEFJTihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9T Q0FOKGYgZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdOT19ORVNURURfTE9PUF9NRU1PSVpFKGQpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBub19qb2lu X2ZhY3QgZiBKT0lOIG5vX2pvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25k OiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIG5vX2pvaW5fZmFjdCBm CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vX2pvaW5fZGltIGQK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5PX05FU1RFRF9MT09QX01FTU9JWkUoZCkg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo ZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBOT19HQVRIRVIo ZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn Tk9fTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX2pvaW5fZmFjdCBmIEpPSU4gbm9fam9p bl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltX2lk ID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBub19qb2luX2ZhY3QgZgorICAgLT4gIEhh c2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub19qb2luX2RpbSBkCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBOT19ORVNURURfTE9PUF9NQVRFUklBTElaRShkKSAvKiBtYXRj aGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisg ICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIE5PX0dBVEhFUihmIGQpCiso MTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdOT19NRVJH RV9KT0lOX1BMQUlOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJ U0VMRUNUICogRlJPTSBub19qb2luX2ZhY3QgZiBKT0lOIG5vX2pvaW5fZGltIGQgT04gZi5k aW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9p bgorICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9u IG5vX2pvaW5fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IG5vX2pvaW5fZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5PX01FUkdFX0pP SU5fUExBSU4oZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisg ICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnTk9fTUVSR0VfSk9JTl9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fam9pbl9mYWN0IGYg Sk9JTiBub19qb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDog KGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBub19qb2luX2ZhY3QgZgor ICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub19qb2luX2RpbSBkCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBOT19NRVJHRV9KT0lOX01BVEVSSUFMSVpFKGQp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgTk9fR0FUSEVS KGYgZCkKKygxMiByb3dzKQorCitDT01NSVQ7CistLSBDb25mbGljdDogc2FtZSBtZXRob2Qg cmVxdWlyZWQgYW5kIGZvcmJpZGRlbjsgYm90aCBtYXJrZWQgY29uZmxpY3RpbmcuCitCRUdJ TjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFTSF9KT0lOKGYpIE5P X0hBU0hfSk9JTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gbm9fam9pbl9mYWN0IGYgSk9JTiBub19qb2luX2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJn ZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIEluZGV4 IFNjYW4gdXNpbmcgbm9fam9pbl9kaW1fcGtleSBvbiBub19qb2luX2RpbSBkCisgICAtPiAg SW5kZXggU2NhbiB1c2luZyBub19qb2luX2ZhY3RfZGltX2lkIG9uIG5vX2pvaW5fZmFjdCBm CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oZikgLyogbWF0Y2hlZCwg Y29uZmxpY3RpbmcsIGZhaWxlZCAqLworICAgTk9fSEFTSF9KT0lOKGYpIC8qIG1hdGNoZWQs IGNvbmZsaWN0aW5nICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRF UihkIGYpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGlj Lm5vX2pvaW5fZGltX3BrZXkgZiBwdWJsaWMubm9fam9pbl9mYWN0X2RpbV9pZCkKKyAgIE5P X0dBVEhFUihmIGQpCisoMTIgcm93cykKKworQ09NTUlUOworLS0gTm8gY29uZmxpY3Q6IE5P X0hBU0hfSk9JTihmKSBhbmQgYSBwb3NpdGl2ZSB0YWcgZm9yIGEgZGlmZmVyZW50IG1ldGhv ZC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdOT19IQVNI X0pPSU4oZikgTkVTVEVEX0xPT1BfUExBSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX2pvaW5fZmFjdCBmIEpPSU4gbm9fam9p bl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIG5vX2pvaW5fZGltIGQKKyAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIG5vX2pvaW5fZmFjdF9kaW1faWQgb24gbm9fam9pbl9mYWN0IGYKKyAg ICAgICAgIEluZGV4IENvbmQ6IChkaW1faWQgPSBkLmlkKQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgTk9fSEFTSF9KT0lOKGYpIC8qIG1hdGNoZWQgKi8KKyAgIE5FU1RFRF9MT09Q X1BMQUlOKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGQgZikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGYpCisgICBTRVFfU0NBTihk KQorICAgSU5ERVhfU0NBTihmIHB1YmxpYy5ub19qb2luX2ZhY3RfZGltX2lkKQorICAgTk9f R0FUSEVSKGYgZCkKKygxMyByb3dzKQorCitDT01NSVQ7CitEUk9QIFRBQkxFIG5vX2pvaW5f ZmFjdDsKK0RST1AgVEFCTEUgbm9fam9pbl9kaW07CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3BsYW5fYWR2aWNlL2V4cGVjdGVkL25vX3NjYW4ub3V0IGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9leHBlY3RlZC9ub19zY2FuLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uMDhmMmEyMWI2NTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL2V4cGVjdGVkL25vX3NjYW4ub3V0CkBAIC0wLDAgKzEsMTk3IEBACitM T0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dh dGhlciA9IDA7CitTRVQgc2VxX3BhZ2VfY29zdCA9IDAuMTsKK1NFVCByYW5kb21fcGFnZV9j b3N0ID0gMC4xOworU0VUIGNwdV90dXBsZV9jb3N0ID0gMDsKK1NFVCBjcHVfaW5kZXhfdHVw bGVfY29zdCA9IDA7CitDUkVBVEUgVEFCTEUgbm9fc2Nhbl90YWJsZSAoYSBpbnQgcHJpbWFy eSBrZXksIGIgdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJ TlNFUlQgSU5UTyBub19zY2FuX3RhYmxlCisJU0VMRUNUIGcsICdzb21lIHRleHQgJyB8fCBn IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIG5v X3NjYW5fdGFibGU7CistLSBCYXNlbGluZXMgd2l0aG91dCBhZHZpY2U6IHNlcSBzY2FuIGZv ciBhIGZ1bGwgcmVhZCwgaW5kZXggc2NhbiBmb3IgYSBsb29rdXAuCitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fc2Nhbl90YWJsZTsKKyAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBTZXEgU2NhbiBvbiBub19zY2FuX3RhYmxlCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgU0VRX1NDQU4obm9fc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihub19zY2FuX3Rh YmxlKQorKDQgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIG5vX3NjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXgg U2NhbiB1c2luZyBub19zY2FuX3RhYmxlX3BrZXkgb24gbm9fc2Nhbl90YWJsZQorICAgSW5k ZXggQ29uZDogKGEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1ND QU4obm9fc2Nhbl90YWJsZSBwdWJsaWMubm9fc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FU SEVSKG5vX3NjYW5fdGFibGUpCisoNSByb3dzKQorCistLSBOT19TRVFfU0NBTiB3aXRoIG5v IGluZGV4YWJsZSBxdWFsOiBubyBhbHRlcm5hdGl2ZSwgc28gdGhlIGFkdmljZSBmYWlscy4K K0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdOT19TRVFfU0NB Tihub19zY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gbm9fc2Nhbl90YWJsZTsKKyAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBub19zY2FuX3Rh YmxlCisgICBEaXNhYmxlZDogdHJ1ZQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTk9f U0VRX1NDQU4obm9fc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4obm9fc2Nhbl90YWJsZSkKKyAgIE5PX0dB VEhFUihub19zY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gTk9fU0VRX1ND QU4gd2l0aCBhbiBpbmRleGFibGUgcXVhbDogZmFsbHMgYmFjayB0byBpbmRleCBzY2FuLgor QkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05PX1NFUV9TQ0FO KG5vX3NjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJ U0VMRUNUICogRlJPTSBub19zY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4 IFNjYW4gdXNpbmcgbm9fc2Nhbl90YWJsZV9wa2V5IG9uIG5vX3NjYW5fdGFibGUKKyAgIElu ZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5PX1NFUV9T Q0FOKG5vX3NjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBJTkRFWF9TQ0FOKG5vX3NjYW5fdGFibGUgcHVibGljLm5vX3NjYW5fdGFibGVf cGtleSkKKyAgIE5PX0dBVEhFUihub19zY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlU OworLS0gTk9fSU5ERVhfU0NBTjogZmFsbHMgYmFjayB0byBiaXRtYXAgaGVhcCBzY2FuLgor QkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05PX0lOREVYX1ND QU4obm9fc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK KwlTRUxFQ1QgKiBGUk9NIG5vX3NjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9u IG5vX3NjYW5fdGFibGUKKyAgIFJlY2hlY2sgQ29uZDogKGEgPSAxKQorICAgLT4gIEJpdG1h cCBJbmRleCBTY2FuIG9uIG5vX3NjYW5fdGFibGVfcGtleQorICAgICAgICAgSW5kZXggQ29u ZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTk9fSU5ERVhfU0NBTihu b19zY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgQklUTUFQX0hFQVBfU0NBTihub19zY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKG5vX3Nj YW5fdGFibGUpCisoOSByb3dzKQorCitDT01NSVQ7CistLSBOT19JTkRFWF9PTkxZX1NDQU46 IGZhbGxzIGJhY2sgdG8gYSBwbGFpbiBpbmRleCBzY2FuLgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05PX0lOREVYX09OTFlfU0NBTihub19zY2FuX3Rh YmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCBhIEZS T00gbm9fc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5n IG5vX3NjYW5fdGFibGVfcGtleSBvbiBub19zY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAo YSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBOT19JTkRFWF9PTkxZX1NDQU4o bm9fc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIElOREVYX1NDQU4obm9fc2Nhbl90YWJsZSBwdWJsaWMubm9fc2Nhbl90YWJsZV9wa2V5 KQorICAgTk9fR0FUSEVSKG5vX3NjYW5fdGFibGUpCisoNyByb3dzKQorCitDT01NSVQ7Cist LSBOT19CSVRNQVBfSEVBUF9TQ0FOOiB3aXRoIG9ubHkgYSBCUklOIGluZGV4IGF2YWlsYWJs ZSwgZmFsbHMgYmFjayB0byBzZXEgc2Nhbi4KK0NSRUFURSBJTkRFWCBub19zY2FuX3RhYmxl X2IgT04gbm9fc2Nhbl90YWJsZSBVU0lORyBicmluIChiKTsKK1ZBQ1VVTSBBTkFMWVpFIG5v X3NjYW5fdGFibGU7CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnTk9fQklUTUFQX0hFQVBfU0NBTihub19zY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fc2Nhbl90YWJsZSBXSEVS RSBiID4gJ3NvbWUgdGV4dCA4JzsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBub19zY2FuX3RhYmxlCisgICBG aWx0ZXI6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIE5PX0JJVE1BUF9IRUFQX1NDQU4obm9fc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKG5vX3NjYW5fdGFibGUp CisgICBOT19HQVRIRVIobm9fc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKKy0t IE5PX1RJRF9TQ0FOOiBmYWxscyBiYWNrIHRvIHNlcSBzY2FuLgorQkVHSU47CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05PX1RJRF9TQ0FOKG5vX3NjYW5fdGFibGUp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBu b19zY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gbm9fc2Nhbl90YWJsZQorICAgRmls dGVyOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IE5PX1RJRF9TQ0FOKG5vX3NjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihub19zY2FuX3RhYmxlKQorICAgTk9fR0FUSEVS KG5vX3NjYW5fdGFibGUpCisoNyByb3dzKQorCitDT01NSVQ7CistLSBNdWx0aXBsZSBOT18g c2NhbiB0YWdzIHN0YWNrIHdpdGhvdXQgY29uZmxpY3QuCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTk9fU0VRX1NDQU4obm9fc2Nhbl90YWJsZSkgTk9f QklUTUFQX0hFQVBfU0NBTihub19zY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fc2Nhbl90YWJsZSBXSEVSRSBhID0g MTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIG5vX3NjYW5fdGFibGVfcGtleSBvbiBub19z Y2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBOT19TRVFfU0NBTihub19zY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgICBO T19CSVRNQVBfSEVBUF9TQ0FOKG5vX3NjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKG5vX3NjYW5fdGFibGUgcHVibGlj Lm5vX3NjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihub19zY2FuX3RhYmxlKQorKDgg cm93cykKKworQ09NTUlUOworLS0gQ29uZmxpY3Q6IHNhbWUgbWV0aG9kIHJlcXVpcmVkIGFu ZCBmb3JiaWRkZW47IGJvdGggY29uZmxpY3RpbmcsIG5laXRoZXIgYXBwbGllZC4KK0JFR0lO OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihub19zY2Fu X3RhYmxlKSBOT19TRVFfU0NBTihub19zY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fc2Nhbl90YWJsZTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIG5vX3NjYW5fdGFibGUKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKG5vX3NjYW5fdGFibGUpIC8qIG1hdGNo ZWQsIGNvbmZsaWN0aW5nICovCisgICBOT19TRVFfU0NBTihub19zY2FuX3RhYmxlKSAvKiBt YXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgU0VRX1NDQU4obm9fc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihub19zY2FuX3Rh YmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gTm8gY29uZmxpY3Q6IE5PX1NFUV9TQ0FO IGFuZCBhIHBvc2l0aXZlIElOREVYX1NDQU4gYXJlIGNvbXBhdGlibGUuCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTk9fU0VRX1NDQU4obm9fc2Nhbl90 YWJsZSkgSU5ERVhfU0NBTihub19zY2FuX3RhYmxlIG5vX3NjYW5fdGFibGVfcGtleSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX3Nj YW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2Fu IHVzaW5nIG5vX3NjYW5fdGFibGVfcGtleSBvbiBub19zY2FuX3RhYmxlCisgICBJbmRleCBD b25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBOT19TRVFfU0NBTihu b19zY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgICBJTkRFWF9TQ0FOKG5vX3NjYW5fdGFi bGUgbm9fc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihub19zY2FuX3RhYmxlIHB1YmxpYy5ub19zY2FuX3Rh YmxlX3BrZXkpCisgICBOT19HQVRIRVIobm9fc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NP TU1JVDsKKy0tIFNjYW4gdGFncyBmb3JiaWQgc3VibGlzdHMgKHNpbXBsZV90YXJnZXRfbGlz dCk6IHRoaXMgaXMgYSBzeW50YXggZXJyb3IuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ05PX1NFUV9TQ0FOKChub19zY2FuX3RhYmxlIG5vX3NjYW5fdGFibGUpKSc7CitFUlJP UjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNl IjogIk5PX1NFUV9TQ0FOKChub19zY2FuX3RhYmxlIG5vX3NjYW5fdGFibGUpKSIKK0RFVEFJ TDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIo IgorRFJPUCBUQUJMRSBub19zY2FuX3RhYmxlOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX2FzdC5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2Fz dC5jCmluZGV4IDAxZGI4ZDI0Y2QwLi4wMjAyNWI2MWRkMyAxMDA2NDQKLS0tIGEvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9hc3QuYwpAQCAtNTgsOCArNTgsMzQgQEAgcGdwYV9jc3RyaW5nX2FkdmljZV90 YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgYWR2aWNlX3RhZykKIAkJCXJldHVybiAiTkVTVEVE X0xPT1BfTUVNT0laRSI7CiAJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfUExBSU46CiAJ CQlyZXR1cm4gIk5FU1RFRF9MT09QX1BMQUlOIjsKKwkJY2FzZSBQR1BBX1RBR19OT19CSVRN QVBfSEVBUF9TQ0FOOgorCQkJcmV0dXJuICJOT19CSVRNQVBfSEVBUF9TQ0FOIjsKIAkJY2Fz ZSBQR1BBX1RBR19OT19HQVRIRVI6CiAJCQlyZXR1cm4gIk5PX0dBVEhFUiI7CisJCWNhc2Ug UEdQQV9UQUdfTk9fSEFTSF9KT0lOOgorCQkJcmV0dXJuICJOT19IQVNIX0pPSU4iOworCQlj YXNlIFBHUEFfVEFHX05PX0lOREVYX09OTFlfU0NBTjoKKwkJCXJldHVybiAiTk9fSU5ERVhf T05MWV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19OT19JTkRFWF9TQ0FOOgorCQkJcmV0dXJu ICJOT19JTkRFWF9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19OT19NRVJHRV9KT0lOOgorCQkJ cmV0dXJuICJOT19NRVJHRV9KT0lOIjsKKwkJY2FzZSBQR1BBX1RBR19OT19NRVJHRV9KT0lO X01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJOT19NRVJHRV9KT0lOX01BVEVSSUFMSVpFIjsK KwkJY2FzZSBQR1BBX1RBR19OT19NRVJHRV9KT0lOX1BMQUlOOgorCQkJcmV0dXJuICJOT19N RVJHRV9KT0lOX1BMQUlOIjsKKwkJY2FzZSBQR1BBX1RBR19OT19ORVNURURfTE9PUDoKKwkJ CXJldHVybiAiTk9fTkVTVEVEX0xPT1AiOworCQljYXNlIFBHUEFfVEFHX05PX05FU1RFRF9M T09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJOT19ORVNURURfTE9PUF9NQVRFUklBTEla RSI7CisJCWNhc2UgUEdQQV9UQUdfTk9fTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJCXJldHVy biAiTk9fTkVTVEVEX0xPT1BfTUVNT0laRSI7CisJCWNhc2UgUEdQQV9UQUdfTk9fTkVTVEVE X0xPT1BfUExBSU46CisJCQlyZXR1cm4gIk5PX05FU1RFRF9MT09QX1BMQUlOIjsKKwkJY2Fz ZSBQR1BBX1RBR19OT19TRVFfU0NBTjoKKwkJCXJldHVybiAiTk9fU0VRX1NDQU4iOworCQlj YXNlIFBHUEFfVEFHX05PX1RJRF9TQ0FOOgorCQkJcmV0dXJuICJOT19USURfU0NBTiI7CiAJ CWNhc2UgUEdQQV9UQUdfUEFSVElUSU9OV0lTRToKIAkJCXJldHVybiAiUEFSVElUSU9OV0lT RSI7CiAJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRToKQEAgLTEzNSw4ICsx NjEsMzQgQEAgcGdwYV9wYXJzZV9hZHZpY2VfdGFnKGNvbnN0IGNoYXIgKnRhZywgYm9vbCAq ZmFpbCkKIAkJCQlyZXR1cm4gUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRTsKIAkJCWlm IChzdHJjbXAodGFnLCAibmVzdGVkX2xvb3BfcGxhaW4iKSA9PSAwKQogCQkJCXJldHVybiBQ R1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjsKKwkJCWlmIChzdHJjbXAodGFnLCAibm9fYml0 bWFwX2hlYXBfc2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX05PX0JJVE1BUF9I RUFQX1NDQU47CiAJCQlpZiAoc3RyY21wKHRhZywgIm5vX2dhdGhlciIpID09IDApCiAJCQkJ cmV0dXJuIFBHUEFfVEFHX05PX0dBVEhFUjsKKwkJCWlmIChzdHJjbXAodGFnLCAibm9faGFz aF9qb2luIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTk9fSEFTSF9KT0lOOworCQkJ aWYgKHN0cmNtcCh0YWcsICJub19pbmRleF9vbmx5X3NjYW4iKSA9PSAwKQorCQkJCXJldHVy biBQR1BBX1RBR19OT19JTkRFWF9PTkxZX1NDQU47CisJCQlpZiAoc3RyY21wKHRhZywgIm5v X2luZGV4X3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19OT19JTkRFWF9TQ0FO OworCQkJaWYgKHN0cmNtcCh0YWcsICJub19tZXJnZV9qb2luIikgPT0gMCkKKwkJCQlyZXR1 cm4gUEdQQV9UQUdfTk9fTUVSR0VfSk9JTjsKKwkJCWlmIChzdHJjbXAodGFnLCAibm9fbWVy Z2Vfam9pbl9tYXRlcmlhbGl6ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX05PX01F UkdFX0pPSU5fTUFURVJJQUxJWkU7CisJCQlpZiAoc3RyY21wKHRhZywgIm5vX21lcmdlX2pv aW5fcGxhaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19OT19NRVJHRV9KT0lOX1BM QUlOOworCQkJaWYgKHN0cmNtcCh0YWcsICJub19uZXN0ZWRfbG9vcCIpID09IDApCisJCQkJ cmV0dXJuIFBHUEFfVEFHX05PX05FU1RFRF9MT09QOworCQkJaWYgKHN0cmNtcCh0YWcsICJu b19uZXN0ZWRfbG9vcF9tYXRlcmlhbGl6ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFH X05PX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOworCQkJaWYgKHN0cmNtcCh0YWcsICJub19u ZXN0ZWRfbG9vcF9tZW1vaXplIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTk9fTkVT VEVEX0xPT1BfTUVNT0laRTsKKwkJCWlmIChzdHJjbXAodGFnLCAibm9fbmVzdGVkX2xvb3Bf cGxhaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19OT19ORVNURURfTE9PUF9QTEFJ TjsKKwkJCWlmIChzdHJjbXAodGFnLCAibm9fc2VxX3NjYW4iKSA9PSAwKQorCQkJCXJldHVy biBQR1BBX1RBR19OT19TRVFfU0NBTjsKKwkJCWlmIChzdHJjbXAodGFnLCAibm9fdGlkX3Nj YW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19OT19USURfU0NBTjsKIAkJCWJyZWFr OwogCQljYXNlICdwJzoKIAkJCWlmIChzdHJjbXAodGFnLCAicGFydGl0aW9ud2lzZSIpID09 IDApCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmggYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmgKaW5kZXggNGJkNmZmYTVlM2EuLmMx OGZjMTY0YWJjIDEwMDY0NAotLS0gYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0 LmgKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oCkBAIC05Myw3ICs5 MywyMCBAQCB0eXBlZGVmIGVudW0gcGdwYV9hZHZpY2VfdGFnX3R5cGUKIAlQR1BBX1RBR19O RVNURURfTE9PUF9NQVRFUklBTElaRSwKIAlQR1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpF LAogCVBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOLAorCVBHUEFfVEFHX05PX0JJVE1BUF9I RUFQX1NDQU4sCiAJUEdQQV9UQUdfTk9fR0FUSEVSLAorCVBHUEFfVEFHX05PX0hBU0hfSk9J TiwKKwlQR1BBX1RBR19OT19JTkRFWF9PTkxZX1NDQU4sCisJUEdQQV9UQUdfTk9fSU5ERVhf U0NBTiwKKwlQR1BBX1RBR19OT19NRVJHRV9KT0lOLAorCVBHUEFfVEFHX05PX01FUkdFX0pP SU5fTUFURVJJQUxJWkUsCisJUEdQQV9UQUdfTk9fTUVSR0VfSk9JTl9QTEFJTiwKKwlQR1BB X1RBR19OT19ORVNURURfTE9PUCwKKwlQR1BBX1RBR19OT19ORVNURURfTE9PUF9NQVRFUklB TElaRSwKKwlQR1BBX1RBR19OT19ORVNURURfTE9PUF9NRU1PSVpFLAorCVBHUEFfVEFHX05P X05FU1RFRF9MT09QX1BMQUlOLAorCVBHUEFfVEFHX05PX1NFUV9TQ0FOLAorCVBHUEFfVEFH X05PX1RJRF9TQ0FOLAogCVBHUEFfVEFHX1BBUlRJVElPTldJU0UsCiAJUEdQQV9UQUdfU0VN SUpPSU5fTk9OX1VOSVFVRSwKIAlQR1BBX1RBR19TRU1JSk9JTl9VTklRVUUsCmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKaW5kZXggNTgxMWE2ZTVlNTYuLjM4Njg0YmVm NzI3IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkK KysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BhcnNlci55CkBAIC0xMDgsOCAr MTA4LDE4IEBAIGFkdmljZV9pdGVtOiBUT0tfVEFHX0pPSU5fT1JERVIgJygnIGpvaW5fb3Jk ZXJfdGFyZ2V0X2xpc3QgJyknCiAJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX0JJVE1BUF9IRUFQ X1NDQU47CiAJCQllbHNlIGlmIChzdHJjbXAoJDEsICJkb19ub3Rfc2NhbiIpID09IDApCiAJ CQkJJCQtPnRhZyA9IFBHUEFfVEFHX0RPX05PVF9TQ0FOOworCQkJZWxzZSBpZiAoc3RyY21w KCQxLCAibm9fYml0bWFwX2hlYXBfc2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFf VEFHX05PX0JJVE1BUF9IRUFQX1NDQU47CiAJCQllbHNlIGlmIChzdHJjbXAoJDEsICJub19n YXRoZXIiKSA9PSAwKQogCQkJCSQkLT50YWcgPSBQR1BBX1RBR19OT19HQVRIRVI7CisJCQll bHNlIGlmIChzdHJjbXAoJDEsICJub19pbmRleF9vbmx5X3NjYW4iKSA9PSAwKQorCQkJCSQk LT50YWcgPSBQR1BBX1RBR19OT19JTkRFWF9PTkxZX1NDQU47CisJCQllbHNlIGlmIChzdHJj bXAoJDEsICJub19pbmRleF9zY2FuIikgPT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQQV9UQUdf Tk9fSU5ERVhfU0NBTjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgIm5vX3NlcV9zY2FuIikg PT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQQV9UQUdfTk9fU0VRX1NDQU47CisJCQllbHNlIGlm IChzdHJjbXAoJDEsICJub190aWRfc2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFf VEFHX05PX1RJRF9TQ0FOOwogCQkJZWxzZSBpZiAoc3RyY21wKCQxLCAic2VxX3NjYW4iKSA9 PSAwKQogCQkJCSQkLT50YWcgPSBQR1BBX1RBR19TRVFfU0NBTjsKIAkJCWVsc2UgaWYgKHN0 cmNtcCgkMSwgInRpZF9zY2FuIikgPT0gMCkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9wbGFubmVyLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf cGxhbm5lci5jCmluZGV4IGIzMzI5Yjc5M2FhLi5hMjk1MDBlMGUxZCAxMDA2NDQKLS0tIGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYworKysgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCkBAIC0xNTUsNiArMTU1LDkgQEAgc3RhdGlj IGJvb2wgcGdwYV9zZW1pam9pbl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQg aW5uZXJfY291bnQsCiAJCQkJCQkJCQkgICBib29sIG91dGVyX2lzX251bGxhYmxlLAogCQkJ CQkJCQkJICAgYm9vbCAqcmVzdHJpY3RfbWV0aG9kKTsKIAorc3RhdGljIHVpbnQ2NCBwZ3Bh X25vX2pvaW5fbWFza19mcm9tX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFn KTsKK3N0YXRpYyB1aW50NjQgcGdwYV9ub19zY2FuX21hc2tfZnJvbV9hZHZpY2VfdGFnKHBn cGFfYWR2aWNlX3RhZ190eXBlIHRhZyk7CisKIHN0YXRpYyBMaXN0ICpwZ3BhX3BsYW5uZXJf YXBwZW5kX2ZlZWRiYWNrKExpc3QgKmxpc3QsIHBncGFfdHJvdmUgKnRyb3ZlLAogCQkJCQkJ CQkJCSAgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAogCQkJCQkJCQkJCSAgcGdwYV9p ZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKQEAgLTk0Nyw4ICs5NTAsMTIgQEAgcGdwYV9w bGFubmVyX2FwcGx5X2pvaW5fcGF0aF9hZHZpY2UoSm9pblR5cGUgam9pbnR5cGUsIHVpbnQ2 NCAqcGdzX21hc2tfcCwKIAlCaXRtYXBzZXQgICpqb19kZW55X2luZGV4ZXMgPSBOVUxMOwog CUJpdG1hcHNldCAgKmpvX2RlbnlfcmVsX2luZGV4ZXMgPSBOVUxMOwogCUJpdG1hcHNldCAg KmptX2luZGV4ZXMgPSBOVUxMOwotCWJvb2wJCWptX2NvbmZsaWN0ID0gZmFsc2U7CisJYm9v bAkJam1fcG9zX2NvbmZsaWN0ID0gZmFsc2U7CS8qIHBvc2l0aXZlIHRhZ3MgZGlzYWdyZWUg Ki8KKwlib29sCQlqbV9wb3NfbmVnX2NvbmZsaWN0ID0gZmFsc2U7CS8qIGEgcG9zaXRpdmUg bWV0aG9kIGlzCisJCQkJCQkJCQkJCQkgKiBmb3JiaWRkZW4gKi8KIAl1aW50NjQJCWpvaW5f bWFzayA9IDA7CisJQml0bWFwc2V0ICAqbm9fam1faW5kZXhlcyA9IE5VTEw7CisJdWludDY0 CQlub19qb2luX21hc2sgPSAwOwogCUJpdG1hcHNldCAgKnNqX3Blcm1pdF9pbmRleGVzID0g TlVMTDsKIAlCaXRtYXBzZXQgICpzal9kZW55X2luZGV4ZXMgPSBOVUxMOwogCkBAIC0xMDQz LDEyICsxMDUwLDQzIEBAIHBncGFfcGxhbm5lcl9hcHBseV9qb2luX3BhdGhfYWR2aWNlKEpv aW5UeXBlIGpvaW50eXBlLCB1aW50NjQgKnBnc19tYXNrX3AsCiAJCQl7CiAJCQkJam1faW5k ZXhlcyA9IGJtc19hZGRfbWVtYmVyKGptX2luZGV4ZXMsIGkpOwogCQkJCWlmIChqb2luX21h c2sgIT0gMCAmJiBqb2luX21hc2sgIT0gbXlfam9pbl9tYXNrKQotCQkJCQlqbV9jb25mbGlj dCA9IHRydWU7CisJCQkJCWptX3Bvc19jb25mbGljdCA9IHRydWU7CiAJCQkJam9pbl9tYXNr ID0gbXlfam9pbl9tYXNrOwogCQkJfQogCQkJY29udGludWU7CiAJCX0KIAorCQkvKiBIYW5k bGUgTk9fIGpvaW4gbWV0aG9kIGFkdmljZS4gKi8KKwkJeworCQkJdWludDY0CQlteV9ub19q b2luX21hc2s7CisKKwkJCW15X25vX2pvaW5fbWFzayA9IHBncGFfbm9fam9pbl9tYXNrX2Zy b21fYWR2aWNlX3RhZyhlbnRyeS0+dGFnKTsKKwkJCWlmIChteV9ub19qb2luX21hc2sgIT0g MCkKKwkJCXsKKwkJCQlib29sCQlwZXJtaXQ7CisJCQkJYm9vbAkJcmVzdHJpY3RfbWV0aG9k OworCisJCQkJLyoKKwkJCQkgKiBOT18gam9pbiB0YWdzIGltcG9zZSB0aGUgc2FtZSBqb2lu LW9yZGVyIGNvbnN0cmFpbnQgYXMKKwkJCQkgKiBwb3NpdGl2ZSBvbmVzOiB0aGUgdGFyZ2V0 IG11c3QgYmUgdGhlIGlubmVyIHJlbC4gIFJldXNlCisJCQkJICogcGdwYV9qb2luX21ldGhv ZF9wZXJtaXRzX2pvaW4gdG8gZW5mb3JjZSBpdC4KKwkJCQkgKi8KKwkJCQlwZXJtaXQgPSBw Z3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50LAorCQkJCQkJ CQkJCQkJCSAgIHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpzLT5yaWRz LAorCQkJCQkJCQkJCQkJCSAgIGVudHJ5LAorCQkJCQkJCQkJCQkJCSAgICZyZXN0cmljdF9t ZXRob2QpOworCQkJCWlmICghcGVybWl0KQorCQkJCQlqb19kZW55X2luZGV4ZXMgPSBibXNf YWRkX21lbWJlcihqb19kZW55X2luZGV4ZXMsIGkpOworCQkJCWVsc2UgaWYgKHJlc3RyaWN0 X21ldGhvZCkKKwkJCQl7CisJCQkJCW5vX2ptX2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihu b19qbV9pbmRleGVzLCBpKTsKKwkJCQkJbm9fam9pbl9tYXNrIHw9IG15X25vX2pvaW5fbWFz azsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwogCQkvKiBIYW5kbGUgc2Vt aWpvaW4gdW5pcXVlbmVzcyBhZHZpY2UuICovCiAJCWlmIChlbnRyeS0+dGFnID09IFBHUEFf VEFHX1NFTUlKT0lOX1VOSVFVRSB8fAogCQkJZW50cnktPnRhZyA9PSBQR1BBX1RBR19TRU1J Sk9JTl9OT05fVU5JUVVFKQpAQCAtMTExOCwxMyArMTE1NiwyNiBAQCBwZ3BhX3BsYW5uZXJf YXBwbHlfam9pbl9wYXRoX2FkdmljZShKb2luVHlwZSBqb2ludHlwZSwgdWludDY0ICpwZ3Nf bWFza19wLAogCX0KIAogCS8qCi0JICogSWYgbW9yZSB0aGFuIG9uZSBqb2luIG1ldGhvZCBz cGVjaWZpY2F0aW9uIGlzIHJlbGV2YW50IGhlcmUgYW5kIHRoZXkKLQkgKiBkaWZmZXIsIG1h cmsgdGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICogSWYgbW9yZSB0aGFuIG9uZSBwb3Np dGl2ZSBqb2luIG1ldGhvZCBzcGVjaWZpY2F0aW9uIGlzIHJlbGV2YW50IGhlcmUKKwkgKiBh bmQgdGhleSBkaWZmZXIsIG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCiAJICovCi0J aWYgKGptX2NvbmZsaWN0KQorCWlmIChqbV9wb3NfY29uZmxpY3QpCiAJCXBncGFfdHJvdmVf c2V0X2ZsYWdzKHBqcy0+am9pbl9lbnRyaWVzLCBqbV9pbmRleGVzLAogCQkJCQkJCSBQR1BB X0ZCX0NPTkZMSUNUSU5HKTsKIAorCS8qCisJICogRGV0ZWN0IHBvc2l0aXZlLXZzLW5lZ2F0 aXZlIGpvaW4gbWV0aG9kIGNvbmZsaWN0OiBhIG1ldGhvZCBib3RoCisJICogcmVxdWlyZWQg YnkgYSBwb3NpdGl2ZSB0YWcgYW5kIGZvcmJpZGRlbiBieSBhIE5PXyB0YWcuCisJICovCisJ aWYgKChqb2luX21hc2sgJiBub19qb2luX21hc2spICE9IDApCisJeworCQlqbV9wb3NfbmVn X2NvbmZsaWN0ID0gdHJ1ZTsKKwkJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2Vu dHJpZXMsIGptX2luZGV4ZXMsCisJCQkJCQkJIFBHUEFfRkJfQ09ORkxJQ1RJTkcpOworCQlw Z3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPmpvaW5fZW50cmllcywgbm9fam1faW5kZXhlcywK KwkJCQkJCQkgUEdQQV9GQl9DT05GTElDVElORyk7CisJfQorCiAJLyogSWYgc2VtaWpvaW4g YWR2aWNlIHNheXMgYm90aCB5ZXMgYW5kIG5vLCBtYXJrIGl0IGFsbCBhcyBjb25mbGljdGlu Zy4gKi8KIAlpZiAoc2pfcGVybWl0X2luZGV4ZXMgIT0gTlVMTCAmJiBzal9kZW55X2luZGV4 ZXMgIT0gTlVMTCkKIAl7CkBAIC0xMTQzLDE4ICsxMTk0LDE4IEBAIHBncGFfcGxhbm5lcl9h cHBseV9qb2luX3BhdGhfYWR2aWNlKEpvaW5UeXBlIGpvaW50eXBlLCB1aW50NjQgKnBnc19t YXNrX3AsCiAJaWYgKChqb19kZW55X2luZGV4ZXMgIT0gTlVMTCB8fCBqb19kZW55X3JlbF9p bmRleGVzICE9IE5VTEwpICYmCiAJCWpvX3Blcm1pdF9pbmRleGVzID09IE5VTEwpCiAJCSpw Z3NfbWFza19wICY9IH5QR1NfSk9JTl9BTlk7Ci0JaWYgKGpvaW5fbWFzayAhPSAwICYmICFq bV9jb25mbGljdCkKKwlpZiAoam9pbl9tYXNrICE9IDAgJiYgIWptX3Bvc19jb25mbGljdCAm JiAham1fcG9zX25lZ19jb25mbGljdCkKIAkJKnBnc19tYXNrX3AgJj0gfihQR1NfSk9JTl9B TlkgJiB+am9pbl9tYXNrKTsKKwlpZiAobm9fam9pbl9tYXNrICE9IDAgJiYgIWptX3Bvc19u ZWdfY29uZmxpY3QpCisJCSpwZ3NfbWFza19wICY9IH5ub19qb2luX21hc2s7CiAJaWYgKHNq X2RlbnlfaW5kZXhlcyAhPSBOVUxMICYmIHNqX3Blcm1pdF9pbmRleGVzID09IE5VTEwpCiAJ CSpwZ3NfbWFza19wICY9IH5QR1NfSk9JTl9BTlk7CiB9CiAKIC8qCi0gKiBUcmFuc2xhdGUg YW4gYWR2aWNlIHRhZyBpbnRvIGEgcGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWd5IG1hc2suCisg KiBUcmFuc2xhdGUgYSBwb3NpdGl2ZSBqb2luIGFkdmljZSB0YWcgaW50byBhIHN0cmF0ZWd5 IG1hc2sgdG8gZW5mb3JjZS4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQg d2l0aCB0YWcgdHlwZXMgdGhhdCBkb24ndCByZXByZXNlbnQgam9pbgotICogc3RyYXRlZ2ll cy4gSW4gc3VjaCBjYXNlcywgd2UganVzdCByZXR1cm4gMCwgd2hpY2ggY2FuJ3QgYmUgY29u ZnVzZWQgd2l0aAotICogYSB2YWxpZCBtYXNrLgorICogUmV0dXJucyAwIGZvciB0YWdzIHRo YXQgZG9uJ3QgcmVwcmVzZW50IChwb3NpdGl2ZSkgam9pbiBzdHJhdGVnaWVzLgogICovCiBz dGF0aWMgdWludDY0CiBwZ3BhX2pvaW5fc3RyYXRlZ3lfbWFza19mcm9tX2FkdmljZV90YWco cGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnKQpAQCAtMTE4MCw2ICsxMjMxLDM3IEBAIHBncGFf am9pbl9zdHJhdGVneV9tYXNrX2Zyb21fYWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlw ZSB0YWcpCiAJfQogfQogCisvKgorICogVHJhbnNsYXRlIGEgTk9fIGpvaW4gYWR2aWNlIHRh ZyBpbnRvIGEgc3RyYXRlZ3kgbWFzayB0byBmb3JiaWQuCisgKgorICogUmV0dXJucyAwIGZv ciB0YWdzIHRoYXQgYXJlbid0IE5PXyBqb2luIHRhZ3MuCisgKi8KK3N0YXRpYyB1aW50NjQK K3BncGFfbm9fam9pbl9tYXNrX2Zyb21fYWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlw ZSB0YWcpCit7CisJc3dpdGNoICh0YWcpCisJeworCQljYXNlIFBHUEFfVEFHX05PX0hBU0hf Sk9JTjoKKwkJCXJldHVybiBQR1NfSEFTSEpPSU47CisJCWNhc2UgUEdQQV9UQUdfTk9fTUVS R0VfSk9JTjoKKwkJCXJldHVybiBQR1NfTUVSR0VKT0lOX0FOWTsKKwkJY2FzZSBQR1BBX1RB R19OT19NRVJHRV9KT0lOX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuIFBHU19NRVJHRUpPSU5f TUFURVJJQUxJWkU7CisJCWNhc2UgUEdQQV9UQUdfTk9fTUVSR0VfSk9JTl9QTEFJTjoKKwkJ CXJldHVybiBQR1NfTUVSR0VKT0lOX1BMQUlOOworCQljYXNlIFBHUEFfVEFHX05PX05FU1RF RF9MT09QOgorCQkJcmV0dXJuIFBHU19ORVNUTE9PUF9BTlk7CisJCWNhc2UgUEdQQV9UQUdf Tk9fTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gUEdTX05FU1RMT09QX01B VEVSSUFMSVpFOworCQljYXNlIFBHUEFfVEFHX05PX05FU1RFRF9MT09QX01FTU9JWkU6CisJ CQlyZXR1cm4gUEdTX05FU1RMT09QX01FTU9JWkU7CisJCWNhc2UgUEdQQV9UQUdfTk9fTkVT VEVEX0xPT1BfUExBSU46CisJCQlyZXR1cm4gUEdTX05FU1RMT09QX1BMQUlOOworCQlkZWZh dWx0OgorCQkJcmV0dXJuIDA7CisJfQorfQorCiAvKgogICogRG9lcyBhIGNlcnRhaW4gaXRl bSBvZiBqb2luIG9yZGVyIGFkdmljZSBwZXJtaXQgYSBjZXJ0YWluIGpvaW4/CiAgKgpAQCAt MTYxOSw2ICsxNzAxLDMxIEBAIHBncGFfc2VtaWpvaW5fcGVybWl0c19qb2luKGludCBvdXRl cl9jb3VudCwgaW50IGlubmVyX2NvdW50LAogCXJldHVybiBmYWxzZTsKIH0KIAorLyoKKyAq IFRyYW5zbGF0ZSBhIE5PXyBzY2FuIGFkdmljZSB0YWcgaW50byBhIHN0cmF0ZWd5IG1hc2sg dG8gZm9yYmlkLgorICoKKyAqIFJldHVybnMgMCBmb3IgdGFncyB0aGF0IGFyZW4ndCBOT18g c2NhbiB0YWdzLgorICovCitzdGF0aWMgdWludDY0CitwZ3BhX25vX3NjYW5fbWFza19mcm9t X2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnKQoreworCXN3aXRjaCAodGFn KQorCXsKKwkJY2FzZSBQR1BBX1RBR19OT19CSVRNQVBfSEVBUF9TQ0FOOgorCQkJcmV0dXJu IFBHU19CSVRNQVBTQ0FOOworCQljYXNlIFBHUEFfVEFHX05PX0lOREVYX09OTFlfU0NBTjoK KwkJCXJldHVybiBQR1NfSU5ERVhPTkxZU0NBTiB8IFBHU19DT05TSURFUl9JTkRFWE9OTFk7 CisJCWNhc2UgUEdQQV9UQUdfTk9fSU5ERVhfU0NBTjoKKwkJCXJldHVybiBQR1NfSU5ERVhT Q0FOOworCQljYXNlIFBHUEFfVEFHX05PX1NFUV9TQ0FOOgorCQkJcmV0dXJuIFBHU19TRVFT Q0FOOworCQljYXNlIFBHUEFfVEFHX05PX1RJRF9TQ0FOOgorCQkJcmV0dXJuIFBHU19USURT Q0FOOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJfQorfQorCiAvKgogICogQXBwbHkg c2NhbiBhZHZpY2UgdG8gYSBSZWxPcHRJbmZvLgogICovCkBAIC0xNjM3LDE5ICsxNzQ0LDM2 IEBAIHBncGFfcGxhbm5lcl9hcHBseV9zY2FuX2FkdmljZShSZWxPcHRJbmZvICpyZWwsCiAJ aW50CQkJaSA9IC0xOwogCXBncGFfdHJvdmVfZW50cnkgKnNjYW5fZW50cnkgPSBOVUxMOwog CWludAkJCWZsYWdzOwotCWJvb2wJCXNjYW5fdHlwZV9jb25mbGljdCA9IGZhbHNlOworCWJv b2wJCXNjYW5fcG9zX2NvbmZsaWN0ID0gZmFsc2U7CS8qIHBvc2l0aXZlIHRhZ3MgZGlzYWdy ZWUgKi8KKwlib29sCQlzY2FuX3Bvc19uZWdfY29uZmxpY3QgPSBmYWxzZTsJLyogYSBwb3Np dGl2ZSBtZXRob2QgaXMKKwkJCQkJCQkJCQkJCSAqIGZvcmJpZGRlbiAqLwogCUJpdG1hcHNl dCAgKnNjYW5fdHlwZV9pbmRleGVzID0gTlVMTDsKIAlCaXRtYXBzZXQgICpzY2FuX3R5cGVf cmVsX2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNldCAgKm5vX3NjYW5faW5kZXhlcyA9IE5V TEw7CiAJdWludDY0CQlnYXRoZXJfbWFzayA9IDA7CiAJdWludDY0CQlzY2FuX3R5cGUgPSBh bGxfc2Nhbl9tYXNrOwkvKiBzZW50aW5lbDogbm8gYWR2aWNlIHlldCAqLworCXVpbnQ2NAkJ bm9fc2Nhbl9tYXNrID0gMDsKIAogCS8qIFNjcnV0aW5pemUgYXZhaWxhYmxlIHNjYW4gYWR2 aWNlLiAqLwogCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihzY2FuX2luZGV4ZXMsIGkp KSA+PSAwKQogCXsKIAkJcGdwYV90cm92ZV9lbnRyeSAqbXlfZW50cnkgPSAmc2Nhbl9lbnRy aWVzW2ldOwogCQl1aW50NjQJCW15X3NjYW5fdHlwZSA9IGFsbF9zY2FuX21hc2s7CisJCXVp bnQ2NAkJbXlfbm9fc2Nhbl9tYXNrOworCisJCS8qCisJCSAqIE5PXyBzY2FuIHRhZ3MganVz dCBhY2N1bXVsYXRlIGEgc2V0IG9mIGZvcmJpZGRlbiBtZXRob2RzOyBoYW5kbGUKKwkJICog dGhlbSBzZXBhcmF0ZWx5IGZyb20gdGhlIHBvc2l0aXZlIHNjYW4tdHlwZSBsb2dpYyBiZWxv dy4KKwkJICovCisJCW15X25vX3NjYW5fbWFzayA9IHBncGFfbm9fc2Nhbl9tYXNrX2Zyb21f YWR2aWNlX3RhZyhteV9lbnRyeS0+dGFnKTsKKwkJaWYgKG15X25vX3NjYW5fbWFzayAhPSAw KQorCQl7CisJCQlub19zY2FuX21hc2sgfD0gbXlfbm9fc2Nhbl9tYXNrOworCQkJbm9fc2Nh bl9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIobm9fc2Nhbl9pbmRleGVzLCBpKTsKKwkJCWNv bnRpbnVlOworCQl9CiAKLQkJLyogVHJhbnNsYXRlIG91ciBhZHZpY2UgdGFncyB0byBhIHNj YW4gc3RyYXRlZ3kgYWR2aWNlIHZhbHVlLiAqLworCQkvKiBUcmFuc2xhdGUgcG9zaXRpdmUg YWR2aWNlIHRhZ3MgdG8gYSBzY2FuIHN0cmF0ZWd5IHZhbHVlLiAqLwogCQlpZiAobXlfZW50 cnktPnRhZyA9PSBQR1BBX1RBR19ET19OT1RfU0NBTikKIAkJCW15X3NjYW5fdHlwZSA9IDA7 CiAJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NB TikKQEAgLTE2OTAsMTkgKzE4MTQsMjcgQEAgcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2 aWNlKFJlbE9wdEluZm8gKnJlbCwKIAkJaWYgKG15X3NjYW5fdHlwZSAhPSBhbGxfc2Nhbl9t YXNrKQogCQl7CiAJCQlpZiAoc2Nhbl90eXBlICE9IGFsbF9zY2FuX21hc2sgJiYgc2Nhbl90 eXBlICE9IG15X3NjYW5fdHlwZSkKLQkJCQlzY2FuX3R5cGVfY29uZmxpY3QgPSB0cnVlOwot CQkJaWYgKCFzY2FuX3R5cGVfY29uZmxpY3QgJiYgc2Nhbl9lbnRyeSAhPSBOVUxMICYmCisJ CQkJc2Nhbl9wb3NfY29uZmxpY3QgPSB0cnVlOworCQkJaWYgKCFzY2FuX3Bvc19jb25mbGlj dCAmJiBzY2FuX2VudHJ5ICE9IE5VTEwgJiYKIAkJCQlteV9lbnRyeS0+dGFyZ2V0LT5pdGFy Z2V0ICE9IE5VTEwgJiYKIAkJCQlzY2FuX2VudHJ5LT50YXJnZXQtPml0YXJnZXQgIT0gTlVM TCAmJgogCQkJCSFwZ3BhX2luZGV4X3RhcmdldHNfZXF1YWwoc2Nhbl9lbnRyeS0+dGFyZ2V0 LT5pdGFyZ2V0LAogCQkJCQkJCQkJCSAgbXlfZW50cnktPnRhcmdldC0+aXRhcmdldCkpCi0J CQkJc2Nhbl90eXBlX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCQlzY2FuX3Bvc19jb25mbGljdCA9 IHRydWU7CiAJCQlzY2FuX2VudHJ5ID0gbXlfZW50cnk7CiAJCQlzY2FuX3R5cGUgPSBteV9z Y2FuX3R5cGU7CiAJCQlzY2FuX3R5cGVfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKHNjYW5f dHlwZV9pbmRleGVzLCBpKTsKIAkJfQogCX0KIAorCS8qCisJICogRGV0ZWN0IHBvc2l0aXZl LXZzLW5lZ2F0aXZlIHNjYW4gY29uZmxpY3Q6IGEgcG9zaXRpdmUgc2NhbiB0eXBlIHRoYXQg aXMKKwkgKiBzaW11bHRhbmVvdXNseSBmb3JiaWRkZW4gYnkgYSBOT18gdGFnLiAgVHdvIE5P XyB0YWdzIGZvciBkaWZmZXJlbnQKKwkgKiBtZXRob2RzIGFyZSBuZXZlciBpbiBjb25mbGlj dCB3aXRoIGVhY2ggb3RoZXIuCisJICovCisJaWYgKHNjYW5fdHlwZSAhPSBhbGxfc2Nhbl9t YXNrICYmIChzY2FuX3R5cGUgJiBub19zY2FuX21hc2spICE9IDApCisJCXNjYW5fcG9zX25l Z19jb25mbGljdCA9IHRydWU7CisKIAkvKiBTY3J1dGluaXplIGF2YWlsYWJsZSBnYXRoZXIt cmVsYXRlZCBhbmQgcGFydGl0aW9ud2lzZSBhZHZpY2UuICovCiAJaSA9IC0xOwogCXdoaWxl ICgoaSA9IGJtc19uZXh0X21lbWJlcihyZWxfaW5kZXhlcywgaSkpID49IDApCkBAIC0xNzI1 LDcgKzE4NTcsNyBAQCBwZ3BhX3BsYW5uZXJfYXBwbHlfc2Nhbl9hZHZpY2UoUmVsT3B0SW5m byAqcmVsLAogCQkJCWNvbnN0IHVpbnQ2NCBteV9zY2FuX3R5cGUgPSBQR1NfQVBQRU5EIHwg UEdTX01FUkdFX0FQUEVORDsKIAogCQkJCWlmIChzY2FuX3R5cGUgIT0gYWxsX3NjYW5fbWFz ayAmJiBzY2FuX3R5cGUgIT0gbXlfc2Nhbl90eXBlKQotCQkJCQlzY2FuX3R5cGVfY29uZmxp Y3QgPSB0cnVlOworCQkJCQlzY2FuX3Bvc19jb25mbGljdCA9IHRydWU7CiAJCQkJc2Nhbl9l bnRyeSA9IG15X2VudHJ5OwogCQkJCXNjYW5fdHlwZSA9IG15X3NjYW5fdHlwZTsKIAkJCQlz Y2FuX3R5cGVfcmVsX2luZGV4ZXMgPQpAQCAtMTc3OCw3ICsxOTEwLDcgQEAgcGdwYV9wbGFu bmVyX2FwcGx5X3NjYW5fYWR2aWNlKFJlbE9wdEluZm8gKnJlbCwKIAl9CiAKIAkvKiBFbmZv cmNlIGNob2ljZSBvZiBpbmRleC4gKi8KLQlpZiAoc2Nhbl9lbnRyeSAhPSBOVUxMICYmICFz Y2FuX3R5cGVfY29uZmxpY3QgJiYKKwlpZiAoc2Nhbl9lbnRyeSAhPSBOVUxMICYmICFzY2Fu X3Bvc19jb25mbGljdCAmJgogCQkoc2Nhbl9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0lOREVY X1NDQU4gfHwKIAkJIHNjYW5fZW50cnktPnRhZyA9PSBQR1BBX1RBR19JTkRFWF9PTkxZX1ND QU4pKQogCXsKQEAgLTE4MjIsMTQgKzE5NTQsMjQgQEAgcGdwYV9wbGFubmVyX2FwcGx5X3Nj YW5fYWR2aWNlKFJlbE9wdEluZm8gKnJlbCwKIAogCS8qCiAJICogTWFyayBhbGwgdGhlIHNj YW4gbWV0aG9kIGVudHJpZXMgYXMgZnVsbHkgbWF0Y2hlZDsgYW5kIGlmIHRoZXkgc3BlY2lm eQotCSAqIGRpZmZlcmVudCB0aGluZ3MsIG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3Rpbmcu CisJICogZGlmZmVyZW50IHRoaW5ncywgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4g IEFsc28gbWFyayB0aGVtIGFzCisJICogY29uZmxpY3RpbmcgaWYgYW55IE5PXyB0YWcgZm9y YmlkcyB0aGUgcmVxdWVzdGVkIHNjYW4gbWV0aG9kLgogCSAqLwogCWZsYWdzID0gUEdQQV9G Ql9NQVRDSF9QQVJUSUFMIHwgUEdQQV9GQl9NQVRDSF9GVUxMOwotCWlmIChzY2FuX3R5cGVf Y29uZmxpY3QpCisJaWYgKHNjYW5fcG9zX2NvbmZsaWN0IHx8IHNjYW5fcG9zX25lZ19jb25m bGljdCkKIAkJZmxhZ3MgfD0gUEdQQV9GQl9DT05GTElDVElORzsKIAlwZ3BhX3Ryb3ZlX3Nl dF9mbGFncyhzY2FuX2VudHJpZXMsIHNjYW5fdHlwZV9pbmRleGVzLCBmbGFncyk7CiAJcGdw YV90cm92ZV9zZXRfZmxhZ3MocmVsX2VudHJpZXMsIHNjYW5fdHlwZV9yZWxfaW5kZXhlcywg ZmxhZ3MpOwogCisJLyoKKwkgKiBNYXJrIE5PXyBzY2FuIGVudHJpZXMgYXMgZnVsbHkgbWF0 Y2hlZC4gQWxzbyBtYXJrIHRoZW0gYXMgY29uZmxpY3RpbmcKKwkgKiB3aGVuIGEgcG9zaXRp dmUgdGFnIHJlcXVlc3RzIHRoZSBzYW1lIHNjYW4gbWV0aG9kLgorCSAqLworCWZsYWdzID0g UEdQQV9GQl9NQVRDSF9QQVJUSUFMIHwgUEdQQV9GQl9NQVRDSF9GVUxMOworCWlmIChzY2Fu X3Bvc19uZWdfY29uZmxpY3QpCisJCWZsYWdzIHw9IFBHUEFfRkJfQ09ORkxJQ1RJTkc7CisJ cGdwYV90cm92ZV9zZXRfZmxhZ3Moc2Nhbl9lbnRyaWVzLCBub19zY2FuX2luZGV4ZXMsIGZs YWdzKTsKKwogCS8qCiAJICogTWFyayBldmVyeSBHYXRoZXItcmVsYXRlZCBwaWVjZSBvZiBh ZHZpY2UgYXMgcGFydGlhbGx5IG1hdGNoZWQuIE1hcmsKIAkgKiB0aGUgb25lcyB0aGF0IGlu Y2x1ZGVkIHRoaXMgcmVsYXRpb24gYXMgYSB0YXJnZXQgYnkgaXRzZWxmIGFzIGZ1bGx5CkBA IC0xODQ3LDggKzE5ODksMTAgQEAgcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKFJl bE9wdEluZm8gKnJlbCwKIAkgKiBPbmx5IGNsZWFyIGJpdHMgaGVyZSwgc28gdGhhdCB3ZSBz dGlsbCByZXNwZWN0IHRoZSBlbmFibGVfKiBHVUNzLiBEbwogCSAqIG5vdGhpbmcgaW4gY2Fz ZXMgd2hlcmUgdGhlIGFkdmljZSBvbiBhIHNpbmdsZSB0b3BpYyBjb25mbGljdHMuCiAJICov Ci0JaWYgKHNjYW5fdHlwZSAhPSBhbGxfc2Nhbl9tYXNrICYmICFzY2FuX3R5cGVfY29uZmxp Y3QpCisJaWYgKHNjYW5fdHlwZSAhPSBhbGxfc2Nhbl9tYXNrICYmICFzY2FuX3Bvc19jb25m bGljdCAmJiAhc2Nhbl9wb3NfbmVnX2NvbmZsaWN0KQogCQlyZWwtPnBnc19tYXNrICY9IH4o YWxsX3NjYW5fbWFzayAmIH5zY2FuX3R5cGUpOworCWlmIChub19zY2FuX21hc2sgIT0gMCAm JiAhc2Nhbl9wb3NfbmVnX2NvbmZsaWN0KQorCQlyZWwtPnBnc19tYXNrICY9IH4oYWxsX3Nj YW5fbWFzayAmIG5vX3NjYW5fbWFzayk7CiAJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgIWdh dGhlcl9jb25mbGljdCkKIAl7CiAJCXVpbnQ2NAkJYWxsX2dhdGhlcl9tYXNrOwpkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubCBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwKaW5kZXggZTZkNjBmNTdlMWUuLmZjODky OWUzMWRkIDEwMDY0NAotLS0gYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5l ci5sCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwKQEAgLTEy OSw3ICsxMjksMTIgQEAgeGNpbnNpZGUJCVteKi9dKwogCQkJCQkJCSB0YWcgPT0gUEdQQV9U QUdfVElEX1NDQU4gfHwKIAkJCQkJCQkgdGFnID09IFBHUEFfVEFHX0JJVE1BUF9IRUFQX1ND QU4gfHwKIAkJCQkJCQkgdGFnID09IFBHUEFfVEFHX05PX0dBVEhFUiB8fAotCQkJCQkJCSB0 YWcgPT0gUEdQQV9UQUdfRE9fTk9UX1NDQU4pCisJCQkJCQkJIHRhZyA9PSBQR1BBX1RBR19E T19OT1RfU0NBTiB8fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfTk9fU0VRX1NDQU4gfHwK KwkJCQkJCQkgdGFnID09IFBHUEFfVEFHX05PX1RJRF9TQ0FOIHx8CisJCQkJCQkJIHRhZyA9 PSBQR1BBX1RBR19OT19CSVRNQVBfSEVBUF9TQ0FOIHx8CisJCQkJCQkJIHRhZyA9PSBQR1BB X1RBR19OT19JTkRFWF9TQ0FOIHx8CisJCQkJCQkJIHRhZyA9PSBQR1BBX1RBR19OT19JTkRF WF9PTkxZX1NDQU4pCiAJCQkJCQlyZXR1cm4gVE9LX1RBR19TSU1QTEU7CiAJCQkJCWVsc2UK IAkJCQkJCXJldHVybiBUT0tfVEFHX0dFTkVSSUM7CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV90cm92ZS5jCmluZGV4IGNhNjlmM2JkM2RmLi5hYmUxMDM2M2QzZSAxMDA2NDQKLS0tIGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKQEAgLTE2Niw2ICsxNjYsMTEgQEAgcGdwYV9idWls ZF90cm92ZShMaXN0ICphZHZpY2VfaXRlbXMpCiAJCQljYXNlIFBHUEFfVEFHX0RPX05PVF9T Q0FOOgogCQkJY2FzZSBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU46CiAJCQljYXNlIFBHUEFf VEFHX0lOREVYX1NDQU46CisJCQljYXNlIFBHUEFfVEFHX05PX0JJVE1BUF9IRUFQX1NDQU46 CisJCQljYXNlIFBHUEFfVEFHX05PX0lOREVYX09OTFlfU0NBTjoKKwkJCWNhc2UgUEdQQV9U QUdfTk9fSU5ERVhfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdfTk9fU0VRX1NDQU46CisJCQlj YXNlIFBHUEFfVEFHX05PX1RJRF9TQ0FOOgogCQkJY2FzZSBQR1BBX1RBR19TRVFfU0NBTjoK IAkJCWNhc2UgUEdQQV9UQUdfVElEX1NDQU46CiAKQEAgLTE5Miw2ICsxOTcsMTQgQEAgcGdw YV9idWlsZF90cm92ZShMaXN0ICphZHZpY2VfaXRlbXMpCiAJCQljYXNlIFBHUEFfVEFHX05F U1RFRF9MT09QX01BVEVSSUFMSVpFOgogCQkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9N RU1PSVpFOgogCQkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjoKKwkJCWNhc2Ug UEdQQV9UQUdfTk9fSEFTSF9KT0lOOgorCQkJY2FzZSBQR1BBX1RBR19OT19NRVJHRV9KT0lO OgorCQkJY2FzZSBQR1BBX1RBR19OT19NRVJHRV9KT0lOX01BVEVSSUFMSVpFOgorCQkJY2Fz ZSBQR1BBX1RBR19OT19NRVJHRV9KT0lOX1BMQUlOOgorCQkJY2FzZSBQR1BBX1RBR19OT19O RVNURURfTE9PUDoKKwkJCWNhc2UgUEdQQV9UQUdfTk9fTkVTVEVEX0xPT1BfTUFURVJJQUxJ WkU6CisJCQljYXNlIFBHUEFfVEFHX05PX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQljYXNl IFBHUEFfVEFHX05PX05FU1RFRF9MT09QX1BMQUlOOgogCQkJY2FzZSBQR1BBX1RBR19TRU1J Sk9JTl9OT05fVU5JUVVFOgogCQkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU6CiAK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwppbmRleCBlNDkzNjFhZTI2Ni4u ODkwNTJlOTA3MDcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93 YWxrZXIuYworKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKQEAg LTg5NCw2ICs4OTQsNzcgQEAgcGdwYV93YWxrZXJfd291bGRfYWR2aXNlKHBncGFfcGxhbl93 YWxrZXJfY29udGV4dCAqd2Fsa2VyLAogCQkJCQkJCQkJCQkgcmVsaWRzKTsKIAkJY2FzZSBQ R1BBX1RBR19OT19HQVRIRVI6CiAJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfbm9f Z2F0aGVyKHdhbGtlciwgcmVsaWRzKTsKKworCQkJLyoKKwkJCSAqIEZvciBOT18gc2NhbiB0 YWdzLCB0aGUgYWR2aWNlIGlzIHNhdGlzZmllZCB3aGVuIHRoZSBwbGFuIGRvZXMKKwkJCSAq IE5PVCB1c2UgdGhlIGZvcmJpZGRlbiBzY2FuIHN0cmF0ZWd5LgorCQkJICovCisJCWNhc2Ug UEdQQV9UQUdfTk9fU0VRX1NDQU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfZmluZF9zY2Fu KHdhbGtlciwKKwkJCQkJCQkJCQkgUEdQQV9TQ0FOX1NFUSwKKwkJCQkJCQkJCQkgcmVsaWRz KSA9PSBOVUxMOworCQljYXNlIFBHUEFfVEFHX05PX0JJVE1BUF9IRUFQX1NDQU46CisJCQly ZXR1cm4gcGdwYV93YWxrZXJfZmluZF9zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkgUEdQQV9T Q0FOX0JJVE1BUF9IRUFQLAorCQkJCQkJCQkJCSByZWxpZHMpID09IE5VTEw7CisJCWNhc2Ug UEdQQV9UQUdfTk9fSU5ERVhfU0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9maW5kX3Nj YW4od2Fsa2VyLAorCQkJCQkJCQkJCSBQR1BBX1NDQU5fSU5ERVgsCisJCQkJCQkJCQkJIHJl bGlkcykgPT0gTlVMTDsKKwkJY2FzZSBQR1BBX1RBR19OT19JTkRFWF9PTkxZX1NDQU46CisJ CQlyZXR1cm4gcGdwYV93YWxrZXJfZmluZF9zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkgUEdQ QV9TQ0FOX0lOREVYX09OTFksCisJCQkJCQkJCQkJIHJlbGlkcykgPT0gTlVMTDsKKwkJY2Fz ZSBQR1BBX1RBR19OT19USURfU0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9maW5kX3Nj YW4od2Fsa2VyLAorCQkJCQkJCQkJCSBQR1BBX1NDQU5fVElELAorCQkJCQkJCQkJCSByZWxp ZHMpID09IE5VTEw7CisKKwkJCS8qCisJCQkgKiBGb3IgTk9fIGpvaW4gdGFncywgdGhlIGFk dmljZSBpcyBzYXRpc2ZpZWQgd2hlbiB0aGUgcGxhbiBkb2VzCisJCQkgKiBOT1QgdXNlIGFu eSBvZiB0aGUgZm9yYmlkZGVuIGpvaW4gc3RyYXRlZ2llcy4KKwkJCSAqLworCQljYXNlIFBH UEFfVEFHX05PX0hBU0hfSk9JTjoKKwkJCXJldHVybiAhcGdwYV93YWxrZXJfY29udGFpbnNf am9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSAgSlNUUkFUX0hBU0hfSk9JTiwKKwkJCQkJCQkJ CQkJICByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX05PX01FUkdFX0pPSU46CisJCQlyZXR1 cm4gIXBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgIEpT VFJBVF9NRVJHRV9KT0lOX1BMQUlOLAorCQkJCQkJCQkJCQkgIHJlbGlkcykgJiYKKwkJCQkh cGdwYV93YWxrZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJICAgSlNUUkFU X01FUkdFX0pPSU5fTUFURVJJQUxJWkUsCisJCQkJCQkJCQkJICAgcmVsaWRzKTsKKwkJY2Fz ZSBQR1BBX1RBR19OT19NRVJHRV9KT0lOX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICFwZ3Bh X3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJICBKU1RSQVRfTUVS R0VfSk9JTl9NQVRFUklBTElaRSwKKwkJCQkJCQkJCQkJICByZWxpZHMpOworCQljYXNlIFBH UEFfVEFHX05PX01FUkdFX0pPSU5fUExBSU46CisJCQlyZXR1cm4gIXBncGFfd2Fsa2VyX2Nv bnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgIEpTVFJBVF9NRVJHRV9KT0lOX1BM QUlOLAorCQkJCQkJCQkJCQkgIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTk9fTkVTVEVE X0xPT1A6CisJCQlyZXR1cm4gIXBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAor CQkJCQkJCQkJCQkgIEpTVFJBVF9ORVNURURfTE9PUF9QTEFJTiwKKwkJCQkJCQkJCQkJICBy ZWxpZHMpICYmCisJCQkJIXBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJ CQkJCQkJCSAgIEpTVFJBVF9ORVNURURfTE9PUF9NQVRFUklBTElaRSwKKwkJCQkJCQkJCQkg ICByZWxpZHMpICYmCisJCQkJIXBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAor CQkJCQkJCQkJCSAgIEpTVFJBVF9ORVNURURfTE9PUF9NRU1PSVpFLAorCQkJCQkJCQkJCSAg IHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTk9fTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6 CisJCQlyZXR1cm4gIXBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJ CQkJCQkgIEpTVFJBVF9ORVNURURfTE9PUF9NQVRFUklBTElaRSwKKwkJCQkJCQkJCQkJICBy ZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX05PX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQly ZXR1cm4gIXBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkg IEpTVFJBVF9ORVNURURfTE9PUF9NRU1PSVpFLAorCQkJCQkJCQkJCQkgIHJlbGlkcyk7CisJ CWNhc2UgUEdQQV9UQUdfTk9fTkVTVEVEX0xPT1BfUExBSU46CisJCQlyZXR1cm4gIXBncGFf d2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgIEpTVFJBVF9ORVNU RURfTE9PUF9QTEFJTiwKKwkJCQkJCQkJCQkJICByZWxpZHMpOwogCX0KIAogCS8qIHNob3Vs ZCBub3QgZ2V0IGhlcmUgKi8KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL25vX2pvaW4uc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvbm9fam9pbi5z cWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE5YTlhY2M5OWZl Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvbm9fam9p bi5zcWwKQEAgLTAsMCArMSw5MiBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1h eF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworCitDUkVBVEUgVEFCTEUgbm9f am9pbl9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQpCisJV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gbm9fam9pbl9kaW0gKGRp bSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBn OworVkFDVVVNIEFOQUxZWkUgbm9fam9pbl9kaW07CisKK0NSRUFURSBUQUJMRSBub19qb2lu X2ZhY3QgKAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW1faWQgaW50ZWdlciBub3QgbnVs bCByZWZlcmVuY2VzIG5vX2pvaW5fZGltIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gbm9fam9pbl9mYWN0CisJU0VMRUNUIGcsIChn JTMpKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitDUkVBVEUgSU5ERVgg bm9fam9pbl9mYWN0X2RpbV9pZCBPTiBub19qb2luX2ZhY3QgKGRpbV9pZCk7CitWQUNVVU0g QU5BTFlaRSBub19qb2luX2ZhY3Q7CisKKy0tIEJhc2VsaW5lOiBoYXNoIGpvaW4gd2l0aCBk IG9uIHRoZSBpbm5lciBzaWRlLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK KwlTRUxFQ1QgKiBGUk9NIG5vX2pvaW5fZmFjdCBmIEpPSU4gbm9fam9pbl9kaW0gZCBPTiBm LmRpbV9pZCA9IGQuaWQ7CisKKy0tIE5PX0hBU0hfSk9JTihkKTogZCBzdGF5cyBpbm5lciwg cGxhbm5lciBmYWxscyBiYWNrIHRvIGFub3RoZXIgbWV0aG9kLgorQkVHSU47CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05PX0hBU0hfSk9JTihkKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fam9pbl9mYWN0 IGYgSk9JTiBub19qb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKKwor LS0gTk9fSEFTSF9KT0lOKGYpOiB0aGUgam9pbi1vcmRlciBjb25zdHJhaW50IGZvcmNlcyBm IHRvIHRoZSBpbm5lciBzaWRlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ05PX0hBU0hfSk9JTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fam9pbl9mYWN0IGYgSk9JTiBub19qb2luX2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKKworLS0gTk9fTkVTVEVEX0xPT1Ao Zik6IGYgZm9yY2VkIGlubmVyLCBhbGwgTkwgdmFyaWFudHMgZm9yYmlkZGVuIC0+IG1lcmdl IGpvaW4uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTk9f TkVTVEVEX0xPT1AoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIG5vX2pvaW5fZmFjdCBmIEpPSU4gbm9fam9pbl9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQ7CitDT01NSVQ7CisKKy0tIE5PX01FUkdFX0pPSU4oZCk6IGQgYWxyZWFk eSBpbm5lciwgaGFzaCBqb2luIHN0aWxsIGFsbG93ZWQgLT4gcGxhbiB1bmNoYW5nZWQuCitC RUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTk9fTUVSR0VfSk9J TihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gbm9fam9pbl9mYWN0IGYgSk9JTiBub19qb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5p ZDsKK0NPTU1JVDsKKworLS0gU3RhY2tpbmc6IE5PX0hBU0hfSk9JTihmKSArIE5PX05FU1RF RF9MT09QKGYpIGxlYXZlcyBvbmx5IG1lcmdlIGpvaW4uCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTk9fSEFTSF9KT0lOKGYpIE5PX05FU1RFRF9MT09Q KGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJP TSBub19qb2luX2ZhY3QgZiBKT0lOIG5vX2pvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlk OworQ09NTUlUOworCistLSBTcGVjaWZpYyBOT18gdmFyaWFudHMgdGFyZ2V0aW5nIGQsIGFs cmVhZHkgdGhlIGlubmVyIHNpZGU6IGZvcmJpZGRpbmcgYW55IG9uZQorLS0gTkwgb3IgbWVy Z2UgdmFyaWFudCBsZWF2ZXMgaGFzaCBqb2luIGF2YWlsYWJsZSwgc28gdGhlIHBsYW4gaXMg dW5jaGFuZ2VkLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J05PX05FU1RFRF9MT09QX1BMQUlOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCisJU0VMRUNUICogRlJPTSBub19qb2luX2ZhY3QgZiBKT0lOIG5vX2pvaW5fZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdOT19ORVNURURfTE9PUF9NRU1PSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBub19qb2luX2ZhY3QgZiBKT0lOIG5vX2pv aW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdOT19ORVNURURfTE9PUF9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fam9pbl9mYWN0IGYg Sk9JTiBub19qb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnTk9fTUVSR0VfSk9JTl9QTEFJTihkKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fam9pbl9mYWN0 IGYgSk9JTiBub19qb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTk9fTUVSR0VfSk9JTl9NQVRFUklBTElaRShkKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9f am9pbl9mYWN0IGYgSk9JTiBub19qb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK0NP TU1JVDsKKworLS0gQ29uZmxpY3Q6IHNhbWUgbWV0aG9kIHJlcXVpcmVkIGFuZCBmb3JiaWRk ZW47IGJvdGggbWFya2VkIGNvbmZsaWN0aW5nLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihmKSBOT19IQVNIX0pPSU4oZiknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX2pvaW5f ZmFjdCBmIEpPSU4gbm9fam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitDT01NSVQ7 CisKKy0tIE5vIGNvbmZsaWN0OiBOT19IQVNIX0pPSU4oZikgYW5kIGEgcG9zaXRpdmUgdGFn IGZvciBhIGRpZmZlcmVudCBtZXRob2QuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnTk9fSEFTSF9KT0lOKGYpIE5FU1RFRF9MT09QX1BMQUlOKGYpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBub19q b2luX2ZhY3QgZiBKT0lOIG5vX2pvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09N TUlUOworCitEUk9QIFRBQkxFIG5vX2pvaW5fZmFjdDsKK0RST1AgVEFCTEUgbm9fam9pbl9k aW07CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9ub19zY2FuLnNx bCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL25vX3NjYW4uc3FsCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMTg5ZWY3MzQ0MAotLS0gL2Rldi9udWxs CisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL25vX3NjYW4uc3FsCkBAIC0wLDAg KzEsODggQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29y a2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBzZXFfcGFnZV9jb3N0ID0gMC4xOworU0VUIHJh bmRvbV9wYWdlX2Nvc3QgPSAwLjE7CitTRVQgY3B1X3R1cGxlX2Nvc3QgPSAwOworU0VUIGNw dV9pbmRleF90dXBsZV9jb3N0ID0gMDsKKworQ1JFQVRFIFRBQkxFIG5vX3NjYW5fdGFibGUg KGEgaW50IHByaW1hcnkga2V5LCBiIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVk ID0gZmFsc2UpOworSU5TRVJUIElOVE8gbm9fc2Nhbl90YWJsZQorCVNFTEVDVCBnLCAnc29t ZSB0ZXh0ICcgfHwgZyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMDApIGc7CitWQUNV VU0gQU5BTFlaRSBub19zY2FuX3RhYmxlOworCistLSBCYXNlbGluZXMgd2l0aG91dCBhZHZp Y2U6IHNlcSBzY2FuIGZvciBhIGZ1bGwgcmVhZCwgaW5kZXggc2NhbiBmb3IgYSBsb29rdXAu CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9f c2Nhbl90YWJsZTsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBub19zY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworCistLSBOT19TRVFfU0NBTiB3 aXRoIG5vIGluZGV4YWJsZSBxdWFsOiBubyBhbHRlcm5hdGl2ZSwgc28gdGhlIGFkdmljZSBm YWlscy4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdOT19T RVFfU0NBTihub19zY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gbm9fc2Nhbl90YWJsZTsKK0NPTU1JVDsKKworLS0gTk9f U0VRX1NDQU4gd2l0aCBhbiBpbmRleGFibGUgcXVhbDogZmFsbHMgYmFjayB0byBpbmRleCBz Y2FuLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05PX1NF UV9TQ0FOKG5vX3NjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCisJU0VMRUNUICogRlJPTSBub19zY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlU OworCistLSBOT19JTkRFWF9TQ0FOOiBmYWxscyBiYWNrIHRvIGJpdG1hcCBoZWFwIHNjYW4u CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTk9fSU5ERVhf U0NBTihub19zY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gbm9fc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK0NPTU1JVDsK KworLS0gTk9fSU5ERVhfT05MWV9TQ0FOOiBmYWxscyBiYWNrIHRvIGEgcGxhaW4gaW5kZXgg c2Nhbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdOT19J TkRFWF9PTkxZX1NDQU4obm9fc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgYSBGUk9NIG5vX3NjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CitDT01NSVQ7CisKKy0tIE5PX0JJVE1BUF9IRUFQX1NDQU46IHdpdGggb25seSBhIEJSSU4g aW5kZXggYXZhaWxhYmxlLCBmYWxscyBiYWNrIHRvIHNlcSBzY2FuLgorQ1JFQVRFIElOREVY IG5vX3NjYW5fdGFibGVfYiBPTiBub19zY2FuX3RhYmxlIFVTSU5HIGJyaW4gKGIpOworVkFD VVVNIEFOQUxZWkUgbm9fc2Nhbl90YWJsZTsKK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdOT19CSVRNQVBfSEVBUF9TQ0FOKG5vX3NjYW5fdGFibGUpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBub19z Y2FuX3RhYmxlIFdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworQ09NTUlUOworCistLSBOT19U SURfU0NBTjogZmFsbHMgYmFjayB0byBzZXEgc2Nhbi4KK0JFR0lOOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdOT19USURfU0NBTihub19zY2FuX3RhYmxlKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fc2Nh bl90YWJsZSBXSEVSRSBjdGlkID0gJygwLDEpJzsKK0NPTU1JVDsKKworLS0gTXVsdGlwbGUg Tk9fIHNjYW4gdGFncyBzdGFjayB3aXRob3V0IGNvbmZsaWN0LgorQkVHSU47CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05PX1NFUV9TQ0FOKG5vX3NjYW5fdGFibGUp IE5PX0JJVE1BUF9IRUFQX1NDQU4obm9fc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX3NjYW5fdGFibGUgV0hFUkUg YSA9IDE7CitDT01NSVQ7CisKKy0tIENvbmZsaWN0OiBzYW1lIG1ldGhvZCByZXF1aXJlZCBh bmQgZm9yYmlkZGVuOyBib3RoIGNvbmZsaWN0aW5nLCBuZWl0aGVyIGFwcGxpZWQuCitCRUdJ TjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4obm9fc2Nh bl90YWJsZSkgTk9fU0VRX1NDQU4obm9fc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX3NjYW5fdGFibGU7CitDT01N SVQ7CisKKy0tIE5vIGNvbmZsaWN0OiBOT19TRVFfU0NBTiBhbmQgYSBwb3NpdGl2ZSBJTkRF WF9TQ0FOIGFyZSBjb21wYXRpYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ05PX1NFUV9TQ0FOKG5vX3NjYW5fdGFibGUpIElOREVYX1NDQU4obm9f c2Nhbl90YWJsZSBub19zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBub19zY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworQ09NTUlUOworCistLSBTY2FuIHRhZ3MgZm9yYmlkIHN1Ymxpc3RzIChzaW1wbGVfdGFy Z2V0X2xpc3QpOiB0aGlzIGlzIGEgc3ludGF4IGVycm9yLgorU0VUIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdOT19TRVFfU0NBTigobm9fc2Nhbl90YWJsZSBub19zY2FuX3RhYmxlKSkn OworCitEUk9QIFRBQkxFIG5vX3NjYW5fdGFibGU7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3Nn bWwvcGdwbGFuYWR2aWNlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNnbWwK aW5kZXggYjEzOTVlYzk1MWUuLmRmZjY1OTRhNTRiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3Nn bWwvcGdwbGFuYWR2aWNlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3BncGxhbmFkdmljZS5z Z21sCkBAIC0zMjAsNiArMzIwLDU4IEBAIERPX05PVF9TQ0FOKDxyZXBsYWNlYWJsZT50YXJn ZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKTwvc3lub3BzaXM+CiAKICAgPC9zZWN0Mz4KIAor ICA8c2VjdDMgaWQ9InBncGxhbmFkdmljZS1uby1zY2FuLW1ldGhvZCI+CisgIDx0aXRsZT5O ZWdhdGl2ZSBTY2FuIE1ldGhvZCBBZHZpY2U8L3RpdGxlPgorICAgPHN5bm9wc2lzPgorTk9f U0VRX1NDQU4oPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCitO T19USURfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkK K05PX0lOREVYX1NDQU4oPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4u IF0pCitOT19JTkRFWF9PTkxZX1NDQU4oPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFi bGU+IFsgLi4uIF0pCitOT19CSVRNQVBfSEVBUF9TQ0FOKDxyZXBsYWNlYWJsZT50YXJnZXQ8 L3JlcGxhY2VhYmxlPiBbIC4uLiBdKTwvc3lub3BzaXM+CisKKyAgIDxwYXJhPgorICAgIFRo ZXNlIHRhZ3MgYXJlIHRoZSBuZWdhdGl2ZSBjb3VudGVycGFydHMgb2YgdGhlIHBvc2l0aXZl IHNjYW4gbWV0aG9kIHRhZ3MuCisgICAgRWFjaCA8bGl0ZXJhbD5OT188L2xpdGVyYWw+IHRh ZyBmb3JiaWRzIHRoZSBjb3JyZXNwb25kaW5nIHNjYW4gbWV0aG9kIGZvcgorICAgIHRoZSBz cGVjaWZpZWQgcmVsYXRpb24gb3IgcmVsYXRpb25zLiBUaGUgcGxhbm5lciB3aWxsIGNob29z ZSBhbnkgb3RoZXIKKyAgICBlbGlnaWJsZSBzY2FuIG1ldGhvZCBpbnN0ZWFkLgorICAgPC9w YXJhPgorCisgICA8cGFyYT4KKyAgICBGb3IgZXhhbXBsZSwgPGxpdGVyYWw+Tk9fU0VRX1ND QU4odCk8L2xpdGVyYWw+IHRlbGxzIHRoZSBwbGFubmVyIG5vdCB0bworICAgIHVzZSBhIDxs aXRlcmFsPlNlcSBTY2FuPC9saXRlcmFsPiBvbiA8bGl0ZXJhbD50PC9saXRlcmFsPi4gSWYg dGhlIG9ubHkKKyAgICB2aWFibGUgYWx0ZXJuYXRpdmUgaXMgYW4gaW5kZXggc2NhbiwgdGhl IHBsYW5uZXIgd2lsbCB1c2UgdGhhdC4gSWYgbm8KKyAgICBhbHRlcm5hdGl2ZSBpcyBhdmFp bGFibGUsIHRoZSBwbGFuIHN0aWxsIHVzZXMgdGhlIGZvcmJpZGRlbiBtZXRob2QgYW5kIHRo ZQorICAgIGFkdmljZSBpcyByZXBvcnRlZCBhcyA8bGl0ZXJhbD5mYWlsZWQ8L2xpdGVyYWw+ LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBVbmxpa2UgdGhlIHBvc2l0aXZlIHNj YW4gbWV0aG9kIHRhZ3MsIG11bHRpcGxlIG5lZ2F0aXZlIHNjYW4gbWV0aG9kIHRhZ3MKKyAg ICBmb3IgdGhlIHNhbWUgcmVsYXRpb24gY2FuIGJlIGNvbWJpbmVkIGZyZWVseSB3aXRob3V0 IGNvbmZsaWN0LiBGb3IgZXhhbXBsZSwKKyAgICA8bGl0ZXJhbD5OT19TRVFfU0NBTih0KSBO T19CSVRNQVBfSEVBUF9TQ0FOKHQpPC9saXRlcmFsPiBpcyB2YWxpZCBhbmQKKyAgICByZXN0 cmljdHMgdGhlIHBsYW5uZXIgdG8gdXNlIGFuIGluZGV4IHNjYW4gb3IgVElEIHNjYW4gb24g PGxpdGVyYWw+dDwvbGl0ZXJhbD4uCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIEEg bmVnYXRpdmUgdGFnIGFuZCBhIHBvc2l0aXZlIHRhZyBzcGVjaWZ5aW5nIHRoZSBzYW1lIG1l dGhvZCBhcmUgaW4KKyAgICBjb25mbGljdCB3aXRoIGVhY2ggb3RoZXIuIEZvciBleGFtcGxl LCA8bGl0ZXJhbD5TRVFfU0NBTih0KQorICAgIE5PX1NFUV9TQ0FOKHQpPC9saXRlcmFsPiBp cyBhIGNvbnRyYWRpY3Rpb24sIGFuZCBib3RoIHBpZWNlcyBvZiBhZHZpY2Ugd2lsbAorICAg IGJlIG1hcmtlZCA8bGl0ZXJhbD5jb25mbGljdGluZzwvbGl0ZXJhbD4uIEhvd2V2ZXIsIGEg bmVnYXRpdmUgdGFnIGZvciBvbmUKKyAgICBtZXRob2QgZG9lcyBub3QgY29uZmxpY3Qgd2l0 aCBhIHBvc2l0aXZlIHRhZyBmb3IgYSBkaWZmZXJlbnQgbWV0aG9kLiBGb3IKKyAgICBpbnN0 YW5jZSwgPGxpdGVyYWw+Tk9fU0VRX1NDQU4odCkgSU5ERVhfU0NBTih0IG15X2luZGV4KTwv bGl0ZXJhbD4gaXMgbm90IGEKKyAgICBjb25mbGljdDogdGhlIGluZGV4IHNjYW4gaXMgZW5m b3JjZWQgYW5kIHRoZSBwcm9oaWJpdGlvbiBvbiBzZXF1ZW50aWFsIHNjYW5zCisgICAgaXMg YWxzbyBzYXRpc2ZpZWQuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIE5vdGUgdGhh dCA8bGl0ZXJhbD5OT19TRVFfU0NBTigoeCB5KSk8L2xpdGVyYWw+IGFuZCBzaW1pbGFyIGZv cm1zIHdpdGggYQorICAgIHBhcmVudGhlc2l6ZWQgc3VibGlzdCBhcmUgbm90IHZhbGlkIHN5 bnRheCBmb3IgbmVnYXRpdmUgc2NhbiB0YWdzLCBiZWNhdXNlCisgICAgc2NhbiBtZXRob2Rz IGFwcGx5IHRvIGluZGl2aWR1YWwgcmVsYXRpb25zLCBub3Qgam9pbiBwcm9kdWN0cy4gTmVn YXRpdmUgc2NhbgorICAgIHRhZ3MgdXNlIHRoZSBzYW1lIHRhcmdldCBzeW50YXggYXMgdGhl aXIgcG9zaXRpdmUgY291bnRlcnBhcnRzOiBhCisgICAgZmxhdCBsaXN0IG9mIHJlbGF0aW9u IGlkZW50aWZpZXJzLgorICAgPC9wYXJhPgorCisgIDwvc2VjdDM+CisKICAgPHNlY3QzIGlk PSJwZ3BsYW5hZHZpY2Utam9pbi1vcmRlciI+CiAgIDx0aXRsZT5Kb2luIE9yZGVyIEFkdmlj ZTwvdGl0bGU+CiAgICA8c3lub3BzaXM+CkBAIC00MzMsNiArNDg1LDgzIEBAIGpvaW5fbWV0 aG9kX25hbWUoPHJlcGxhY2VhYmxlPmpvaW5fbWV0aG9kX2l0ZW08L3JlcGxhY2VhYmxlPiBb IC4uLiBdKQogCiAgIDwvc2VjdDM+CiAKKyAgPHNlY3QzIGlkPSJwZ3BsYW5hZHZpY2Utbm8t am9pbi1tZXRob2QiPgorICA8dGl0bGU+TmVnYXRpdmUgSm9pbiBNZXRob2QgQWR2aWNlPC90 aXRsZT4KKyAgIDxzeW5vcHNpcz4KK25vX2pvaW5fbWV0aG9kX25hbWUoPHJlcGxhY2VhYmxl PmpvaW5fbWV0aG9kX2l0ZW08L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQorCis8cGhyYXNlPndo ZXJlIDxyZXBsYWNlYWJsZT5ub19qb2luX21ldGhvZF9uYW1lPC9yZXBsYWNlYWJsZT4gaXM6 PC9waHJhc2U+CisKK3sgTk9fSEFTSF9KT0lOIHwKKyAgTk9fTkVTVEVEX0xPT1AgfCBOT19O RVNURURfTE9PUF9QTEFJTiB8IE5PX05FU1RFRF9MT09QX01BVEVSSUFMSVpFIHwgTk9fTkVT VEVEX0xPT1BfTUVNT0laRSB8CisgIE5PX01FUkdFX0pPSU4gfCBOT19NRVJHRV9KT0lOX1BM QUlOIHwgTk9fTUVSR0VfSk9JTl9NQVRFUklBTElaRSB9CisKKzxwaHJhc2U+YW5kIDxyZXBs YWNlYWJsZT5qb2luX21ldGhvZF9pdGVtPC9yZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+CisK K3sgPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiB8CisoIDxyZXBs YWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSApIH08L3N5bm9w c2lzPgorCisgICA8cGFyYT4KKyAgICBUaGVzZSB0YWdzIGFyZSB0aGUgbmVnYXRpdmUgY291 bnRlcnBhcnRzIG9mIHRoZSBwb3NpdGl2ZSBqb2luIG1ldGhvZCB0YWdzLgorICAgIEEgbmVn YXRpdmUgam9pbiBtZXRob2QgdGFnIHNwZWNpZmllcyB0aGF0IHRoZSBuYW1lZCBqb2luIG1l dGhvZCAob3IgZmFtaWx5CisgICAgb2Ygam9pbiBtZXRob2RzKSBzaG91bGQgPGVtcGhhc2lz Pm5vdDwvZW1waGFzaXM+IGJlIHVzZWQgd2hlbiB0aGUgc3BlY2lmaWVkCisgICAgcmVsYXRp b24gb3Igc2V0IG9mIHJlbGF0aW9ucyBhcHBlYXJzIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEg am9pbi4gVGhlCisgICAgcGxhbm5lciB3aWxsIGNob29zZSBhbnkgb3RoZXIgZWxpZ2libGUg am9pbiBtZXRob2QgaW5zdGVhZC4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgQm90 aCBhIGNvYXJzZXIgZ3JvdXAgZm9ybSBhbmQgYSBmaW5lciBzcGVjaWZpYyBmb3JtIGFyZSBh dmFpbGFibGUgZm9yCisgICAgbmVzdGVkLWxvb3AgYW5kIG1lcmdlLWpvaW4uIDxsaXRlcmFs Pk5PX05FU1RFRF9MT09QKHQpPC9saXRlcmFsPiBkaXNhYmxlcworICAgIGFsbCB0aHJlZSBu ZXN0ZWQtbG9vcCB2YXJpYW50cyAoPGxpdGVyYWw+TkVTVEVEX0xPT1BfUExBSU48L2xpdGVy YWw+LAorICAgIDxsaXRlcmFsPk5FU1RFRF9MT09QX01BVEVSSUFMSVpFPC9saXRlcmFsPiwg YW5kCisgICAgPGxpdGVyYWw+TkVTVEVEX0xPT1BfTUVNT0laRTwvbGl0ZXJhbD4pLCB3aGls ZQorICAgIDxsaXRlcmFsPk5PX05FU1RFRF9MT09QX1BMQUlOKHQpPC9saXRlcmFsPiBkaXNh YmxlcyBvbmx5IHRoZSBwbGFpbiB2YXJpYW50LAorICAgIGxlYXZpbmcgdGhlIG90aGVyIHR3 byBhdmFpbGFibGUuIFNpbWlsYXJseSwKKyAgICA8bGl0ZXJhbD5OT19NRVJHRV9KT0lOKHQp PC9saXRlcmFsPiBkaXNhYmxlcyBib3RoIG1lcmdlLWpvaW4gdmFyaWFudHMsIHdoaWxlCisg ICAgPGxpdGVyYWw+Tk9fTUVSR0VfSk9JTl9QTEFJTih0KTwvbGl0ZXJhbD4gYW5kCisgICAg PGxpdGVyYWw+Tk9fTUVSR0VfSk9JTl9NQVRFUklBTElaRSh0KTwvbGl0ZXJhbD4gdGFyZ2V0 IGluZGl2aWR1YWwgdmFyaWFudHMuCisgICAgPGxpdGVyYWw+Tk9fSEFTSF9KT0lOPC9saXRl cmFsPiBoYXMgb25seSBvbmUgZm9ybSBzaW5jZSB0aGVyZSBpcyBvbmx5IG9uZQorICAgIGhh c2gtam9pbiB2YXJpYW50LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBMaWtlIHBv c2l0aXZlIGpvaW4gbWV0aG9kIHRhZ3MsIG5lZ2F0aXZlIGpvaW4gbWV0aG9kIHRhZ3MgYWNj ZXB0CisgICAgcGFyZW50aGVzaXplZCBzdWJsaXN0cyBzcGVjaWZ5aW5nIGEgc2V0IG9mIHJl bGF0aW9ucyB0aGF0IHNob3VsZCBhcHBlYXIKKyAgICB0b2dldGhlciBvbiB0aGUgaW5uZXIg c2lkZS4gRm9yIGV4YW1wbGUsCisgICAgPGxpdGVyYWw+Tk9fSEFTSF9KT0lOKChhIGIpKTwv bGl0ZXJhbD4gbWVhbnMgdGhhdCB0aGUgam9pbiBwcm9kdWN0IG9mCisgICAgPGxpdGVyYWw+ YTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPmI8L2xpdGVyYWw+IHNob3VsZCBub3QgYXBwZWFy IHRvZ2V0aGVyIG9uCisgICAgdGhlIGlubmVyIHNpZGUgb2YgYSBoYXNoIGpvaW4uCisgICA8 L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIE5lZ2F0aXZlIGpvaW4gbWV0aG9kIHRhZ3MgaW1w b3NlIHRoZSBzYW1lIGpvaW4tb3JkZXIgY29uc3RyYWludCBhcyB0aGVpcgorICAgIHBvc2l0 aXZlIGNvdW50ZXJwYXJ0czogdGhlIHNwZWNpZmllZCByZWxhdGlvbiAob3Igam9pbiBwcm9k dWN0KSBjYW5ub3QKKyAgICBiZWNvbWUgdGhlIGRyaXZpbmcgdGFibGUuIEZvciBleGFtcGxl LCA8bGl0ZXJhbD5OT19IQVNIX0pPSU4odCk8L2xpdGVyYWw+CisgICAgaW1wbGllcyB0aGF0 IDxsaXRlcmFsPnQ8L2xpdGVyYWw+IGNhbm5vdCBiZSB0aGUgb3V0ZXJtb3N0IHJlbGF0aW9u IGluIHRoZQorICAgIGpvaW4sIGV4YWN0bHkgYXMgPGxpdGVyYWw+SEFTSF9KT0lOKHQpPC9s aXRlcmFsPiB3b3VsZC4gVGhpbmsgb2YKKyAgICA8bGl0ZXJhbD5OT19IQVNIX0pPSU4odCk8 L2xpdGVyYWw+IGFzIHNheWluZworICAgIDxxdW90ZT51c2UgYW55dGhpbmcgYnV0IGEgaGFz aCBqb2luLCBidXQga2VlcCA8bGl0ZXJhbD50PC9saXRlcmFsPiBvbiB0aGUKKyAgICBpbm5l ciBzaWRlLjwvcXVvdGU+CisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIE11bHRpcGxl IG5lZ2F0aXZlIGpvaW4gbWV0aG9kIHRhZ3MgZm9yIHRoZSBzYW1lIHJlbGF0aW9uIGNhbiBi ZSBjb21iaW5lZAorICAgIGZyZWVseS4gRm9yIGV4YW1wbGUsIDxsaXRlcmFsPk5PX0hBU0hf Sk9JTih0KSBOT19ORVNURURfTE9PUCh0KTwvbGl0ZXJhbD4KKyAgICByZXN0cmljdHMgdGhl IHBsYW5uZXIgdG8gbWVyZ2Utam9pbiB3aGVuIDxsaXRlcmFsPnQ8L2xpdGVyYWw+IGlzIG9u IHRoZQorICAgIGlubmVyIHNpZGUuIEEgbmVnYXRpdmUgdGFnIGZvciBvbmUgbWV0aG9kIGRv ZXMgbm90IGNvbmZsaWN0IHdpdGggYSBwb3NpdGl2ZQorICAgIHRhZyBmb3IgYSBkaWZmZXJl bnQgbWV0aG9kOiA8bGl0ZXJhbD5OT19IQVNIX0pPSU4odCkKKyAgICBORVNURURfTE9PUF9Q TEFJTih0KTwvbGl0ZXJhbD4gaXMgbm90IGEgY29uZmxpY3QuCisgICA8L3BhcmE+CisKKyAg IDxwYXJhPgorICAgIEEgbmVnYXRpdmUgdGFnIGFuZCBhIHBvc2l0aXZlIHRhZyBzcGVjaWZ5 aW5nIHRoZSBzYW1lIGpvaW4gbWV0aG9kIGFyZSBpbgorICAgIGNvbmZsaWN0LiBGb3IgZXhh bXBsZSwgPGxpdGVyYWw+SEFTSF9KT0lOKHQpIE5PX0hBU0hfSk9JTih0KTwvbGl0ZXJhbD4K KyAgICBjb250cmFkaWN0cyBpdHNlbGYsIGFuZCBib3RoIGVudHJpZXMgd2lsbCBiZSBtYXJr ZWQKKyAgICA8bGl0ZXJhbD5jb25mbGljdGluZzwvbGl0ZXJhbD4uCisgICA8L3BhcmE+CisK KyAgPC9zZWN0Mz4KKwogICA8c2VjdDMgaWQ9InBncGxhbmFkdmljZS1wYXJ0aXRpb253aXNl Ij4KICAgPHRpdGxlPlBhcnRpdGlvbndpc2UgQWR2aWNlPC90aXRsZT4KICAgIDxzeW5vcHNp cz4KLS0gCjIuNDUuMQoK --------------iABVHbzyLI4PqmstWwrO17aa--