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 1vLOQl-00F2LR-0i for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Nov 2025 16:19:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vLOQj-007H0R-2a for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Nov 2025 16:19:46 +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 1vLOQi-007H0J-1g for pgsql-hackers@lists.postgresql.org; Tue, 18 Nov 2025 16:19:45 +0000 Received: from mail-ej1-x635.google.com ([2a00:1450:4864:20::635]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vLOQe-000BtS-1V for pgsql-hackers@lists.postgresql.org; Tue, 18 Nov 2025 16:19:43 +0000 Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-b727f452fffso1105719466b.1 for ; Tue, 18 Nov 2025 08:19:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763482778; x=1764087578; 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=bpKkXBCDv2xcm/DVmSJNI5g1vGcY2mURt839Tllowrs=; b=Zy7HgRlzoGuJi8g/9mlLpoWkgM4HLX0aCVx+mtZXUg5UnUNRQuO2YAaiCvi7h+DCVw 1DVYNwEzS7g52obRNTkJxsmyKmdHkcGitVBk0QFm7V+x+0Wf35Y3+APCO0ympSsMjS/5 WqHz1z6O/HQ1ko0hwTCdesGiL/vBMJdKIS5JLxaUDINjO/fTBLbUgqRkazz3xq0+X2M2 v+U8Lft4ilKqoAPKQiFH5+2L+sllefBVwfTWDWl4CazdG/VMoX7SGon7kwqzWes+hady ak2F0DWt4BZND7OM7zu4HvucHGOpk8TJchuVjUb1oBCZv7DVjLhLm8mskcc5gJCRjU59 XZMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763482778; x=1764087578; 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=bpKkXBCDv2xcm/DVmSJNI5g1vGcY2mURt839Tllowrs=; b=p9feq2ipkLi02e9HaeK6mAqQse3Xxt45hAl2Dn2ODegriEeY4i47Itp9/QrWMNN9E9 Fu7bFxhk85GklJWoC9RBcWemVa2t65bvJNfWVdTw4Tav1jV0xRc/kAylYi3sEQP1OS5X 1KJv563g0bAS9KkSK3KayjJpNVrytBEchCdO2QVFSDGV6cpTUcgGCIy06wYyMvySblVZ 6W+MkvnUXL8S68gVtnZlXG5IPPCgmziWSOF7VfyDK2TzwXbXx4tQEF1Z1mxMAUEARlvQ lY718Piil2FCYS3NyyUGMNA8vIEhoo8lo/A8/nrd5nKJYwa5N8j4zCm74NzwbMHF3zfa yicA== X-Forwarded-Encrypted: i=1; AJvYcCW9cV8ndtKWMGPMqPI8WdJrcsNQKbDNZJKAcEozD6zrspeeIRM66ELONtwmFAjE3E6y+DUd0vmcJ70kJQCx@lists.postgresql.org X-Gm-Message-State: AOJu0Ywby3V/MxU4X0ZJt9rg4zdt1i9oNW/ZZLkYlMv3cnElDo/K7a31 /0mGmi4Nq6IqHFJJtBzY/hmSJMdYQNjOuHKitop8d5IeDEuq+RbrDGeOnmEw2OEWtBE7EgWFkZl 00WO9+ybLCl9scr56TjQY20BIXEsDO5o= X-Gm-Gg: ASbGncuI2WGF0K+6e31SDoYyDodNOzsDYergQ1Tc3gyOTvNPoC7dLk+3q3Tea/5gWHQ NxlDqyAhsZzdZNAvNDoQ1c72yTLjxISyhAEHHHbYJJxKyVmJ7/kU0PGALK+HulQ6VpMjDX0aMDl 4XyAQP0ytniqeN/YncmUDisIPM0c6KbH05yifcH6ZNAjd131CtWLGIxms1x0/2+uMv5uWAyDLex YYBD9jxx/hUAZRPryahHwhTtJVCiGPiroThW50ptf84yR5t2EJ95+hJ7tk+OP23G+ch4WdMOdEC msYybo9Aw37/f81W9o4pUxBooAU= X-Google-Smtp-Source: AGHT+IE25vNyKxRqGveN4YepAxz/5avMPLb3FMWpKh4xEuNmK5AvdrQdU9KfGZ8hPEEX+8ETv7Vc9kck4NlCCVn6xRI= X-Received: by 2002:a17:906:c10a:b0:b61:e088:b560 with SMTP id a640c23a62f3a-b76346ef9cemr4917666b.4.1763482778129; Tue, 18 Nov 2025 08:19:38 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Robert Haas Date: Tue, 18 Nov 2025 11:19:24 -0500 X-Gm-Features: AWmQ_bnruDH9T6ImWrE0ipFBE66V5X_mI1v6nhsDYhQQmEnrcPHTDX4hIQeFh3E Message-ID: Subject: Re: pg_plan_advice To: Matheus Alcantara Cc: Jakub Wartak , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000008fa27b0643e0d41b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008fa27b0643e0d41b Content-Type: text/plain; charset="UTF-8" Here's v4. This version has some bug fixes and test case changes to 0005 and 0006, with the goal of getting CI to pass cleanly (which it now does for me, but let's see if cfbot agrees). -- Robert Haas EDB: http://www.enterprisedb.com --0000000000008fa27b0643e0d41b Content-Type: application/octet-stream; name="v4-0001-Store-information-about-range-table-flattening-in.patch" Content-Disposition: attachment; filename="v4-0001-Store-information-about-range-table-flattening-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mi4s3jg40 RnJvbSA4NzlhMGY3MjBjMDQ2YTY0MGM0NDc1NGM1MjY0YzUxYmJmMDIxNGRmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTI6MDA6MTggLTA0MDAKU3ViamVjdDogW1BBVENIIHY0IDEv Nl0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgcmFuZ2UtdGFibGUgZmxhdHRlbmluZyBpbiB0aGUK IGZpbmFsIHBsYW4uCgpTdXBwb3NlIHRoYXQgd2UncmUgY3VycmVudGx5IHBsYW5uaW5nIGEgcXVl cnkgYW5kLCB3aGVuIHRoYXQgc2FtZQpxdWVyeSB3YXMgcHJldmlvdXNseSBwbGFubmVkIGFuZCBl eGVjdXRlZCwgd2UgbGVhcm5lZCBzb21ldGhpbmcgYWJvdXQKaG93IGEgY2VydGFpbiB0YWJsZSB3 aXRoaW4gdGhhdCBxdWVyeSBzaG91bGQgYmUgcGxhbm5lZC4gV2Ugd2FudCB0bwp0YWtlIG5vdGUg d2hlbiB0aGF0IHNhbWUgdGFibGUgaXMgYmVpbmcgcGxhbm5lZCBkdXJpbmcgdGhlIGN1cnJlbnQK cGxhbm5pbmcgY3ljbGUsIGJ1dCB0aGlzIGlzIGRpZmZpY3VsdCB0byBkbywgYmVjYXVzZSB0aGUg UlRJIG9mIHRoZQp0YWJsZSBmcm9tIHRoZSBwcmV2aW91cyBwbGFuIHdvbid0IG5lY2Vzc2FyaWx5 IGJlIGVxdWFsIHRvIHRoZSBSVEkKdGhhdCB3ZSBzZWUgZHVyaW5nIHRoZSBjdXJyZW50IHBsYW5u aW5nIGN5Y2xlLiBUaGlzIGlzIGJlY2F1c2UgZWFjaApzdWJxdWVyeSBoYXMgYSBzZXBhcmF0ZSBy YW5nZSB0YWJsZSBkdXJpbmcgcGxhbm5pbmcsIGJ1dCB0aGVzZSBhcmUKZmxhdHRlbmVkIGludG8g b25lIHJhbmdlIHRhYmxlIHdoZW4gY29uc3RydWN0aW5nIHRoZSBmaW5hbCBwbGFuLApjaGFuZ2lu ZyBSVElzLgoKQ29tbWl0IDhjNDlhNDg0ZThlYmIwMTk5ZmJhNGJkNjhlYWFlZGFmNDliNDhlZDAg YWxsb3dzIHVzIHRvIG1hdGNoIHVwCnN1YnF1ZXJpZXMgc2VlbiBpbiB0aGUgcHJldmlvdXMgcGxh bm5pbmcgY3ljbGVzIHdpdGggdGhlIHN1YnF1ZXJpZXMKY3VycmVudGx5IGJlaW5nIHBsYW5uZWQg anVzdCBieSBjb21wYXJpbmcgdGV4dHVhbCBuYW1lcywgYnV0IHRoYXQncwpub3QgcXVpdGUgZW5v dWdoIHRvIGxldCB1cyBkZWR1Y2UgYW55dGhpbmcgYWJvdXQgaW5kaXZpZHVhbCB0YWJsZXMsCmJl Y2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGVyZSBlYWNoIHN1YnF1ZXJ5J3MgcmFuZ2UgdGFibGUgYXBw ZWFycyBpbgp0aGUgZmluYWwsIGZsYXR0ZW5lZCByYW5nZSB0YWJsZS4KClRvIGZpeCB0aGF0LCBz dG9yZSBhIGxpc3Qgb2YgU3ViUGxhblJUSW5mbyBvYmplY3RzIGluIHRoZSBmaW5hbApwbGFubmVk IHN0YXRlbWVudCwgZWFjaCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIHN1YnBsYW4sIHRoZSBv ZmZzZXQKYXQgd2hpY2ggaXQgYmVnaW5zIGluIHRoZSBmbGF0dGVuZWQgcmFuZ2UgdGFibGUsIGFu ZCB3aGV0aGVyIG9yIG5vdAppdCB3YXMgYSBkdW1teSBzdWJwbGFuIC0tIGlmIGl0IHdhcywgc29t ZSBSVElzIG1heSBoYXZlIGJlZW4gZHJvcHBlZApmcm9tIHRoZSBmaW5hbCByYW5nZSB0YWJsZSwg YnV0IGFsc28gdGhlcmUncyBubyBuZWVkIHRvIGNvbnRyb2wgaG93CmEgZHVtbXkgc3VicXVlcnkg Z2V0cyBwbGFubmVkLiBUaGUgdG9wbGV2ZWwgc3VicXVlcnkgaGFzIG5vIG5hbWUgYW5kCmFsd2F5 cyBiZWdpbnMgYXQgcnRvZmZzZXQgMCwgc28gd2UgbWFrZSBubyBlbnRyeSBmb3IgaXQuCgpUaGlz IGNvbW1pdCB0ZWFjaGVzIHBnX292ZXJleHBsYWluJ2UgUkFOR0VfVEFCTEUgb3B0aW9uIHRvIG1h a2UgdXNlCm9mIHRoaXMgbmV3IGRhdGEgdG8gZGlzcGxheSB0aGUgc3VicXVlcnkgbmFtZSBmb3Ig ZWFjaCByYW5nZSB0YWJsZQplbnRyeS4KCk5PVEUgVE8gUkVWSUVXRVJTOiBJZiB0aGVyZSdzIGEg Y2xlYW4gd2F5IHRvIG1ha2UgcGdfb3ZlcmV4cGxhaW4gZGlzcGxheQp0aGlzIGluZm9ybWF0aW9u IHdpdGhvdXQgdGhlIG5ldyBpbmZyYXN0cnVjdHVyZSBwcm92aWRlZCBieSB0aGlzIHBhdGNoLAp0 aGVuIHRoaXMgcGF0Y2ggaXMgdW5uZWNlc3NhcnkuIEkgdGhvdWdodCB0aGVyZSB3b3VsZCBiZSBh IHdheSB0byBkbwp0aGF0LCBidXQgSSBjb3VsZG4ndCBmaWd1cmUgYW55dGhpbmcgb3V0OiB0aGVy ZSBzZWVtcyB0byBiZSBub3RoaW5nIHRoYXQKcmVjb3JkcyBpbiB0aGUgZmluYWwgUGxhbm5lZFN0 bXQgd2hlcmUgc3VicXVlcnkncyByYW5nZSB0YWJsZSBlbmRzIGFuZAp0aGUgbmV4dCBvbmUgYmVn aW5zLiBJbiBwcmFjdGljZSwgb25lIGNvdWxkIHVzdWFsbHkgZmlndXJlIGl0IG91dCBieQptYXRj aGluZyB1cCB0YWJsZXMgYnkgcmVsYXRpb24gT0lELCBidXQgdGhhdCdzIG5laXRoZXIgY2xlYW4g bm9yCnRoZW9yZXRpY2FsbHkgc291bmQuCi0tLQogY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19v dmVyZXhwbGFpbi5jIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jICAgIHwgMjAgKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oICAgICAgICAgICB8ICAzICsrKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmggICAgICAgICAgIHwgMTcgKysrKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgfCAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMo KykKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg Yi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKaW5kZXggYmQ3MGI2ZDlk NWUuLjVkYzcwN2Q2OWUzIDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMKKysrIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5j CkBAIC0zOTUsNiArMzk1LDggQEAgc3RhdGljIHZvaWQKIG92ZXJleHBsYWluX3JhbmdlX3RhYmxl KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgRXhwbGFpblN0YXRlICplcykKIHsKIAlJbmRleAkJ cnRpOworCUxpc3RDZWxsICAgKmxjX3N1YnJ0aW5mbyA9IGxpc3RfaGVhZChwbGFubmVkc3RtdC0+ c3VicnRpbmZvcyk7CisJU3ViUGxhblJUSW5mbyAqcnRpbmZvID0gTlVMTDsKIAogCS8qIE9wZW4g Z3JvdXAsIG9uZSBlbnRyeSBwZXIgUmFuZ2VUYmxFbnRyeSAqLwogCUV4cGxhaW5PcGVuR3JvdXAo IlJhbmdlIFRhYmxlIiwgIlJhbmdlIFRhYmxlIiwgZmFsc2UsIGVzKTsKQEAgLTQwNSw2ICs0MDcs MTggQEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBF eHBsYWluU3RhdGUgKmVzKQogCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHBs YW5uZWRzdG10LT5ydGFibGUpOwogCQljaGFyCSAgICpraW5kID0gTlVMTDsKIAkJY2hhcgkgICAq cmVsa2luZDsKKwkJU3ViUGxhblJUSW5mbyAqbmV4dF9ydGluZm87CisKKwkJLyogQWR2YW5jZSB0 byBuZXh0IFN1YlJUSW5mbywgaWYgaXQncyB0aW1lLiAqLworCQlpZiAobGNfc3VicnRpbmZvICE9 IE5VTEwpCisJCXsKKwkJCW5leHRfcnRpbmZvID0gbGZpcnN0KGxjX3N1YnJ0aW5mbyk7CisJCQlp ZiAocnRpID4gbmV4dF9ydGluZm8tPnJ0b2Zmc2V0KQorCQkJeworCQkJCXJ0aW5mbyA9IG5leHRf cnRpbmZvOworCQkJCWxjX3N1YnJ0aW5mbyA9IGxuZXh0KHBsYW5uZWRzdG10LT5zdWJydGluZm9z LCBsY19zdWJydGluZm8pOworCQkJfQorCQl9CiAKIAkJLyogTlVMTCBlbnRyaWVzIGFyZSBwb3Nz aWJsZTsgc2tpcCB0aGVtICovCiAJCWlmIChydGUgPT0gTlVMTCkKQEAgLTQ2OSw2ICs0ODMsMjgg QEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBFeHBs YWluU3RhdGUgKmVzKQogCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgiSW4gRnJvbSBDbGF1c2UiLCBy dGUtPmluRnJvbUNsLCBlcyk7CiAJCX0KIAorCQkvKgorCQkgKiBJbmRpY2F0ZSB3aGljaCBzdWJw bGFuIGlzIHRoZSBvcmlnaW4gb2Ygd2hpY2ggUlRFLiBOb3RlIGR1bW15CisJCSAqIHN1YnBsYW5z LiBIZXJlIGFnYWluLCB3ZSBjcnVuY2ggbW9yZSBvbnRvIG9uZSBsaW5lIGluIHRleHQgZm9ybWF0 LgorCQkgKi8KKwkJaWYgKHJ0aW5mbyAhPSBOVUxMKQorCQl7CisJCQlpZiAoZXMtPmZvcm1hdCA9 PSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCQkJeworCQkJCWlmICghcnRpbmZvLT5kdW1teSkKKwkJ CQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3VicGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7 CisJCQkJZWxzZQorCQkJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJTdWJwbGFuIiwKKwkJCQkJCQkJ CQlwc3ByaW50ZigiJXMgKGR1bW15KSIsCisJCQkJCQkJCQkJCQkgcnRpbmZvLT5wbGFuX25hbWUp LCBlcyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3Vi cGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7CisJCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgi U3VicGxhbiBJcyBEdW1teSIsIHJ0aW5mby0+ZHVtbXksIGVzKTsKKwkJCX0KKwkJfQorCiAJCS8q IHJ0ZS0+YWxpYXMgaXMgb3B0aW9uYWw7IHJ0ZS0+ZXJlZiBpcyByZXF1ZXN0ZWQgKi8KIAkJaWYg KHJ0ZS0+YWxpYXMgIT0gTlVMTCkKIAkJCW92ZXJleHBsYWluX2FsaWFzKCJBbGlhcyIsIHJ0ZS0+ YWxpYXMsIGVzKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5u ZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCBjNGZkNjQ2 Yjk5OS4uMGU2YjNmNjBmMzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAg LTYwNyw2ICs2MDcsNyBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hh ciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPnVucHJ1bmFibGVS ZWxpZHMgPSBibXNfZGlmZmVyZW5jZShnbG9iLT5hbGxSZWxpZHMsCiAJCQkJCQkJCQkJCSAgZ2xv Yi0+cHJ1bmFibGVSZWxpZHMpOwogCXJlc3VsdC0+cGVybUluZm9zID0gZ2xvYi0+ZmluYWxydGVw ZXJtaW5mb3M7CisJcmVzdWx0LT5zdWJydGluZm9zID0gZ2xvYi0+c3VicnRpbmZvczsKIAlyZXN1 bHQtPnJlc3VsdFJlbGF0aW9ucyA9IGdsb2ItPnJlc3VsdFJlbGF0aW9uczsKIAlyZXN1bHQtPmFw cGVuZFJlbGF0aW9ucyA9IGdsb2ItPmFwcGVuZFJlbGF0aW9uczsKIAlyZXN1bHQtPnN1YnBsYW5z ID0gZ2xvYi0+c3VicGxhbnM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXgg Y2NkYzliYzI2NGEuLmFkYWJhZTA5YTIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVm cy5jCkBAIC0zOTksNiArMzk5LDI2IEBAIGFkZF9ydGVzX3RvX2ZsYXRfcnRhYmxlKFBsYW5uZXJJ bmZvICpyb290LCBib29sIHJlY3Vyc2luZykKIAlJbmRleAkJcnRpOwogCUxpc3RDZWxsICAgKmxj OwogCisJLyoKKwkgKiBSZWNvcmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIG1ha2UgaXQgcG9zc2li bGUgZm9yIGNvZGUgdGhhdCBsb29rcyBhdAorCSAqIHRoZSBmaW5hbCByYW5nZSB0YWJsZSB0byB1 bmRlcnN0YW5kIGhvdyBpdCB3YXMgY29uc3RydWN0ZWQuIChJZgorCSAqIGZpbmFscnRhYmxlIGlz IHN0aWxsIE5JTCwgdGhlbiB0aGlzIGlzIHRoZSB2ZXJ5IHRvcG1vc3QgUGxhbm5lckluZm8sCisJ ICogd2hpY2ggd2lsbCBhbHdheXMgaGF2ZSBwbGFuX25hbWUgPT0gTlVMTCBhbmQgcnRvZmZzZXQg PT0gMDsgd2Ugb21pdCB0aGUKKwkgKiBkZWdlbmVyYXRlIGxpc3QgZW50cnkuKQorCSAqLworCWlm IChyb290LT5nbG9iLT5maW5hbHJ0YWJsZSAhPSBOSUwpCisJeworCQlTdWJQbGFuUlRJbmZvICpy dGluZm8gPSBtYWtlTm9kZShTdWJQbGFuUlRJbmZvKTsKKworCQlydGluZm8tPnBsYW5fbmFtZSA9 IHJvb3QtPnBsYW5fbmFtZTsKKwkJcnRpbmZvLT5ydG9mZnNldCA9IGxpc3RfbGVuZ3RoKHJvb3Qt Pmdsb2ItPmZpbmFscnRhYmxlKTsKKworCQkvKiBXaGVuIHJlY3Vyc2luZyA9IHRydWUsIGl0J3Mg YW4gdW5wbGFubmVkIG9yIGR1bW15IHN1YnF1ZXJ5LiAqLworCQlydGluZm8tPmR1bW15ID0gcmVj dXJzaW5nOworCisJCXJvb3QtPmdsb2ItPnN1YnJ0aW5mb3MgPSBsYXBwZW5kKHJvb3QtPmdsb2It PnN1YnJ0aW5mb3MsIHJ0aW5mbyk7CisJfQorCiAJLyoKIAkgKiBBZGQgdGhlIHF1ZXJ5J3Mgb3du IFJURXMgdG8gdGhlIGZsYXR0ZW5lZCByYW5nZXRhYmxlLgogCSAqCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CmluZGV4IDMwZDg4OWI1NGM1Li5hM2E4MDA4NjlkZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAg LTEzNSw2ICsxMzUsOSBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogImZsYXQi IGxpc3Qgb2YgUlRFUGVybWlzc2lvbkluZm9zICovCiAJTGlzdAkgICAqZmluYWxydGVwZXJtaW5m b3M7CiAKKwkvKiBsaXN0IG9mIFN1YlBsYW5SVEluZm8gbm9kZXMgKi8KKwlMaXN0CSAgICpzdWJy dGluZm9zOworCiAJLyogImZsYXQiIGxpc3Qgb2YgUGxhblJvd01hcmtzICovCiAJTGlzdAkgICAq ZmluYWxyb3dtYXJrczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCBjNDM5M2E5NDMyMS4uMTUy NmRkMmVjNmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0xMzEsNiArMTMxLDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAkgKi8KIAlMaXN0CSAgICpzdWJwbGFuczsKIAorCS8qIGEg bGlzdCBvZiBTdWJQbGFuUlRJbmZvIG9iamVjdHMgKi8KKwlMaXN0CSAgICpzdWJydGluZm9zOwor CiAJLyogaW5kaWNlcyBvZiBzdWJwbGFucyB0aGF0IHJlcXVpcmUgUkVXSU5EICovCiAJQml0bWFw c2V0ICAqcmV3aW5kUGxhbklEczsKIApAQCAtMTgyMSw0ICsxODI0LDE4IEBAIHR5cGVkZWYgZW51 bSBNb25vdG9uaWNGdW5jdGlvbgogCU1PTk9UT05JQ0ZVTkNfQk9USCA9IE1PTk9UT05JQ0ZVTkNf SU5DUkVBU0lORyB8IE1PTk9UT05JQ0ZVTkNfREVDUkVBU0lORywKIH0gTW9ub3RvbmljRnVuY3Rp b247CiAKKy8qCisgKiBTdWJQbGFuUlRJbmZvCisgKgorICogSW5mb3JtYXRpb24gYWJvdXQgd2hp Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBjYW1lIGZyb20gd2hpY2ggc3VicXVlcnkKKyAqIHBsYW5u aW5nIGN5Y2xlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU3ViUGxhblJUSW5mbworeworCU5vZGVU YWcJCXR5cGU7CisJY29uc3QgY2hhciAqcGxhbl9uYW1lOworCUluZGV4CQlydG9mZnNldDsKKwli b29sCQlkdW1teTsKK30gU3ViUGxhblJUSW5mbzsKKwogI2VuZGlmCQkJCQkJCS8qIFBMQU5OT0RF U19IICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDIzYmNlNzJhZTY0Li45ZGE4YWQ5 OWEyMCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI4ODksNiArMjg4OSw3IEBAIFN1 YkxpbmsKIFN1YkxpbmtUeXBlCiBTdWJPcHRzCiBTdWJQbGFuCitTdWJQbGFuUlRJbmZvCiBTdWJQ bGFuU3RhdGUKIFN1YlJlbEluZm8KIFN1YlJlbW92ZVJlbHMKLS0gCjIuNTEuMAoK --0000000000008fa27b0643e0d41b Content-Type: application/octet-stream; name="v4-0003-Store-information-about-Append-node-consolidation.patch" Content-Disposition: attachment; filename="v4-0003-Store-information-about-Append-node-consolidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mi4s3jgg2 RnJvbSBlYjkzZmRiNTFjNDVhNzJmNDUwMGZmNDE0OWVjMWNjNDNlZTIwZjQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6MDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHY0IDMv Nl0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgQXBwZW5kIG5vZGUgY29uc29saWRhdGlvbiBpbgog dGhlIGZpbmFsIHBsYW4uCgpBbiBleHRlbnNpb24gKG9yIGNvcmUgY29kZSkgbWlnaHQgd2FudCB0 byByZWNvbnN0cnVjdCB0aGUgcGxhbm5lcidzCmRlY2lzaW9ucyBhYm91dCB3aGV0aGVyIGFuZCB3 aGVyZSB0byBwZXJmb3JtIHBhcnRpdGlvbndpc2Ugam9pbnMgZnJvbQp0aGUgZmluYWwgcGxhbi4g VG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUgdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMKb2Yg cGFydGl0aW9uZWQgdGFibGVzIGFwcGVhcmluZyBpbiB0aGUgcGxhbi4gQnV0IHdoZW4gYW4gQXBw ZW5kUGF0aApvciBNZXJnZUFwcGVuZFBhdGggcHVsbHMgdXAgY2hpbGQgcGF0aHMgZnJvbSBhIHN1 Ym9yZGluYXRlIEFwcGVuZFBhdGgKb3IgTWVyZ2VBcHBlbmRQYXRoLCB0aGUgUlRJcyBvZiB0aGUg c3Vib3JkaW5hdGUgcGF0aCBkbyBub3QgYXBwZWFyCmluIHRoZSBmaW5hbCBwbGFuLCBtYWtpbmcg dGhpcyBraW5kIG9mIHJlY29uc3RydWN0aW9uIGltcG9zc2libGUuCgpUbyBhdm9pZCB0aGlzLCBw cm9wYWdhdGUgdGhlIFJUSSBzZXRzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHByZXNlbnQKaW4gdGhl ICdhcHByZWxpZHMnIGZpZWxkIG9mIHRoZSBzdWJvcmRpbmF0ZSBBcHBlbmQgb3IgTWVyZ2VBcHBl bmQKbm9kZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBpbnRvIHRoZSBzdXJ2aXZpbmcg QXBwZW5kIG9yCk1lcmdlQXBwZW5kIG5vZGUsIHVzaW5nIGEgbmV3ICdjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cycgZmllbGQgZm9yCnRoYXQgcHVycG9zZS4gVGhlIHZhbHVlIG9mIHRoaXMgZmllbGQg aXMgYSBsaXN0IG9mIEJpdG1hcHNldHMsCmJlY2F1c2UgZWFjaCByZWxhdGlvbiB3aG9zZSBhcHBl bmQtbGlzdCB3YXMgcHVsbGVkIHVwIGhhZCBpdHMgb3duCnNldCBvZiBSVElzOiBqdXN0IG9uZSwg aWYgaXQgd2FzIGEgcGFydGl0aW9ud2lzZSBzY2FuLCBvciBtb3JlIHRoYW4Kb25lLCBpZiBpdCB3 YXMgYSBwYXJ0aXRpb253aXNlIGpvaW4uIFNpbmNlIG91ciBnb2FsIGlzIHRvIHNlZSB3aGVyZQpw YXJ0aXRpb253aXNlIGpvaW5zIHdlcmUgZG9uZSwgaXQgaXMgZXNzZW50aWFsIHRvIGF2b2lkIGxv c2luZyB0aGUKaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBSVElzIHdlcmUgZ3JvdXBlZCBpbiB0 aGUgcHVsbGVkLXVwCnJlbGF0aW9ucy4KClRoaXMgY29tbWl0IGFsc28gdXBkYXRlcyBwZ19vdmVy ZXhwbGFpbiBzbyB0aGF0IEVYUExBSU4gKFJBTkdFX1RBQkxFKQp3aWxsIGRpc3BsYXkgdGhlIHNh dmVkIFJUSSBzZXRzLgotLS0KIC4uLi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgICAgICAg ICAgICAgICB8ICA0ICstCiBjb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg ICAgICAgfCA1NiArKysrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0 aHMuYyAgICAgICAgIHwgOTggKysrKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvam9pbnJlbHMuYyAgICAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL2NyZWF0ZXBsYW4uYyAgICAgICB8ICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3BsYW5uZXIuYyAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wcmVw L3ByZXB1bmlvbi5jICAgICAgICB8IDExICsrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYyAgICAgICAgIHwgIDUgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgg ICAgICAgICAgICAgICAgIHwgMTAgKysKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAg ICAgICAgICAgICAgICB8IDExICsrKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgg ICAgICAgICAgICAgIHwgIDIgKwogMTEgZmlsZXMgY2hhbmdlZCwgMTc1IGluc2VydGlvbnMoKyks IDI3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhw ZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0IGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3Rl ZC9wZ19vdmVyZXhwbGFpbi5vdXQKaW5kZXggY2E5YTIzZWE2MWYuLmEzNzdmYjI1NzFkIDEwMDY0 NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91 dAorKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91 dApAQCAtMTA0LDYgKzEwNCw3IEBAICQkKTsKICAgICAgICAgICAgICAgIFBhcmFsbGVsIFNhZmU6 IHRydWUKICAgICAgICAgICAgICAgIFBsYW4gTm9kZSBJRDogMgogICAgICAgICAgICAgICAgQXBw ZW5kIFJUSXM6IDEKKyAgICAgICAgICAgICAgIENoaWxkIEFwcGVuZCBSVElzOiBub25lCiAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYnJhc3NpY2EgdmVnZXRhYmxlc18xCiAgICAgICAg ICAgICAgICAgICAgICBEaXNhYmxlZCBOb2RlczogMAogICAgICAgICAgICAgICAgICAgICAgUGFy YWxsZWwgU2FmZTogdHJ1ZQpAQCAtMTQyLDcgKzE0Myw3IEBAICQkKTsKICAgIFJlbGF0aW9uIEtp bmQ6IHJlbGF0aW9uCiAgICBSZWxhdGlvbiBMb2NrIE1vZGU6IEFjY2Vzc1NoYXJlTG9jawogIFVu cHJ1bmFibGUgUlRJczogMSAzIDQKLSg1MyByb3dzKQorKDU0IHJvd3MpCiAKIC0tIFRlc3QgYSBk aWZmZXJlbnQgb3V0cHV0IGZvcm1hdC4KIFNFTEVDVCBleHBsYWluX2ZpbHRlcigkJApAQCAtMTk3 LDYgKzE5OCw3IEBAICQkKTsKICAgICAgICAgICAgICAgIDxleHRQYXJhbT5ub25lPC9leHRQYXJh bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgPGFsbFBhcmFt Pm5vbmU8L2FsbFBhcmFtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAg ICAgICA8QXBwZW5kLVJUSXM+MTwvQXBwZW5kLVJUSXM+ICAgICAgICAgICAgICAgICAgICAgICAg ICsKKyAgICAgICAgICAgICAgIDxDaGlsZC1BcHBlbmQtUlRJcz5ub25lPC9DaGlsZC1BcHBlbmQt UlRJcz4gICAgICAgICAgKwogICAgICAgICAgICAgICAgPFN1YnBsYW5zLVJlbW92ZWQ+MDwvU3Vi cGxhbnMtUmVtb3ZlZD4gICAgICAgICAgICAgICArCiAgICAgICAgICAgICAgICA8UGxhbnM+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAg ICAgICAgPFBsYW4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jIGIv Y29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCmluZGV4IGZhOTA3ZmE0NzJl Li42NTM4ZmZjYWZiMCAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVy ZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwpA QCAtNTQsNiArNTQsOCBAQCBzdGF0aWMgdm9pZCBvdmVyZXhwbGFpbl9hbGlhcyhjb25zdCBjaGFy ICpxbGFiZWwsIEFsaWFzICphbGlhcywKIAkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3Rh dGljIHZvaWQgb3ZlcmV4cGxhaW5fYml0bWFwc2V0KGNvbnN0IGNoYXIgKnFsYWJlbCwgQml0bWFw c2V0ICpibXMsCiAJCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CitzdGF0aWMgdm9pZCBvdmVy ZXhwbGFpbl9iaXRtYXBzZXRfbGlzdChjb25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmJtc19saXN0 LAorCQkJCQkJCQkJICAgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBvdmVyZXhwbGFp bl9pbnRsaXN0KGNvbnN0IGNoYXIgKnFsYWJlbCwgTGlzdCAqbGlzdCwKIAkJCQkJCQkJRXhwbGFp blN0YXRlICplcyk7CiAKQEAgLTIzMiwxMSArMjM0LDE3IEBAIG92ZXJleHBsYWluX3Blcl9ub2Rl X2hvb2soUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQlvdmVyZXhw bGFpbl9iaXRtYXBzZXQoIkFwcGVuZCBSVElzIiwKIAkJCQkJCQkJCSAgKChBcHBlbmQgKikgcGxh biktPmFwcHJlbGlkcywKIAkJCQkJCQkJCSAgZXMpOworCQkJCW92ZXJleHBsYWluX2JpdG1hcHNl dF9saXN0KCJDaGlsZCBBcHBlbmQgUlRJcyIsCisJCQkJCQkJCQkJICAgKChBcHBlbmQgKikgcGxh biktPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAorCQkJCQkJCQkJCSAgIGVzKTsKIAkJCQlicmVh azsKIAkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKIAkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXQoIkFw cGVuZCBSVElzIiwKIAkJCQkJCQkJCSAgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRz LAogCQkJCQkJCQkJICBlcyk7CisJCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0X2xpc3QoIkNoaWxk IEFwcGVuZCBSVElzIiwKKwkJCQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5jaGls ZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCQkJCQkgICBlcyk7CiAJCQkJYnJlYWs7CiAJCQlj YXNlIFRfUmVzdWx0OgogCkBAIC04MTUsNiArODIzLDU0IEBAIG92ZXJleHBsYWluX2JpdG1hcHNl dChjb25zdCBjaGFyICpxbGFiZWwsIEJpdG1hcHNldCAqYm1zLCBFeHBsYWluU3RhdGUgKmVzKQog CXBmcmVlKGJ1Zi5kYXRhKTsKIH0KIAorLyoKKyAqIEVtaXQgYSB0ZXh0IHByb3BlcnR5IGRlc2Ny aWJpbmcgdGhlIGNvbnRlbnRzIG9mIGEgbGlzdCBvZiBiaXRtYXBzZXRzLgorICogSWYgYSBiaXRt YXBzZXQgY29udGFpbnMgZXhhY3RseSAxIG1lbWJlciwgd2UganVzdCBwcmludCBhbiBpbnRlZ2Vy OworICogb3RoZXJ3aXNlLCB3ZSBzdXJyb3VuZCB0aGUgbGlzdCBvZiBtZW1iZXJzIGJ5IHBhcmVu dGhlc2VzLgorICoKKyAqIElmIHRoZXJlIGFyZSBubyBiaXRtYXBzZXRzIGluIHRoZSBsaXN0LCB3 ZSBwcmludCB0aGUgd29yZCAibm9uZSIuCisgKi8KK3N0YXRpYyB2b2lkCitvdmVyZXhwbGFpbl9i aXRtYXBzZXRfbGlzdChjb25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmJtc19saXN0LAorCQkJCQkJ ICAgRXhwbGFpblN0YXRlICplcykKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3Ry aW5nSW5mbygmYnVmKTsKKworCWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIGJtcywgYm1zX2xpc3Qp CisJeworCQlpZiAoYm1zX21lbWJlcnNoaXAoYm1zKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJYXBw ZW5kU3RyaW5nSW5mbygmYnVmLCAiICVkIiwgYm1zX3NpbmdsZXRvbl9tZW1iZXIoYm1zKSk7CisJ CWVsc2UKKwkJeworCQkJaW50CQkJeCA9IC0xOworCQkJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICIgKCIpOworCQkJd2hpbGUgKCh4ID0gYm1z X25leHRfbWVtYmVyKGJtcywgeCkpID49IDApCisJCQl7CisJCQkJaWYgKGZpcnN0KQorCQkJCQlm aXJzdCA9IGZhbHNlOworCQkJCWVsc2UKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1Ziwg JyAnKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlZCIsIHgpOworCQkJfQorCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyknKTsKKwkJfQorCX0KKworCWlmIChidWYubGVuID09 IDApCisJeworCQlFeHBsYWluUHJvcGVydHlUZXh0KHFsYWJlbCwgIm5vbmUiLCBlcyk7CisJCXJl dHVybjsKKwl9CisKKwlBc3NlcnQoYnVmLmRhdGFbMF0gPT0gJyAnKTsKKwlFeHBsYWluUHJvcGVy dHlUZXh0KHFsYWJlbCwgYnVmLmRhdGEgKyAxLCBlcyk7CisJcGZyZWUoYnVmLmRhdGEpOworfQor CiAvKgogICogRW1pdCBhIHRleHQgcHJvcGVydHkgZGVzY3JpYmluZyB0aGUgY29udGVudHMgb2Yg YSBsaXN0IG9mIGludGVnZXJzLCBPSURzLAogICogb3IgWElEcyAtLSBlaXRoZXIgYSBzcGFjZS1z ZXBhcmF0ZWQgbGlzdCBvZiBpbnRlZ2VyIG1lbWJlcnMsIG9yIHRoZSB3b3JkCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCA0YzQzZmQwYjE5Yi4uOTI4YjhkODRhZDggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAtMTI4LDggKzEyOCwxMCBAQCBz dGF0aWMgUGF0aCAqZ2V0X2NoZWFwZXN0X3BhcmFtZXRlcml6ZWRfY2hpbGRfcGF0aChQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCSAgIFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBzdGF0 aWMgdm9pZCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsCiAJCQkJCQkJCQkg IExpc3QgKipzdWJwYXRocywKLQkJCQkJCQkJCSAgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpOwot c3RhdGljIFBhdGggKmdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCk7CisJ CQkJCQkJCQkgIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzLAorCQkJCQkJCQkJICBMaXN0ICoqY2hp bGRfYXBwZW5kX3JlbGlkX3NldHMpOworc3RhdGljIFBhdGggKmdldF9zaW5nbGV0b25fYXBwZW5k X3N1YnBhdGgoUGF0aCAqcGF0aCwKKwkJCQkJCQkJCQkgIExpc3QgKipjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cyk7CiBzdGF0aWMgdm9pZCBzZXRfZHVtbXlfcmVsX3BhdGhsaXN0KFJlbE9wdEluZm8g KnJlbCk7CiBzdGF0aWMgdm9pZCBzZXRfc3VicXVlcnlfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJICBJbmRleCBydGksIFJhbmdlVGJsRW50cnkg KnJ0ZSk7CkBAIC0xNDA2LDExICsxNDA4LDE1IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiB7CiAJTGlzdAkgICAqc3VicGF0aHMg PSBOSUw7CiAJYm9vbAkJc3VicGF0aHNfdmFsaWQgPSB0cnVlOworCUxpc3QJICAgKnN1YnBhdGhf Y2FycyA9IE5JTDsKIAlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhzID0gTklMOwogCWJvb2wJCXN0 YXJ0dXBfc3VicGF0aHNfdmFsaWQgPSB0cnVlOworCUxpc3QJICAgKnN0YXJ0dXBfc3VicGF0aF9j YXJzID0gTklMOwogCUxpc3QJICAgKnBhcnRpYWxfc3VicGF0aHMgPSBOSUw7CisJTGlzdAkgICAq cGFydGlhbF9zdWJwYXRoX2NhcnMgPSBOSUw7CiAJTGlzdAkgICAqcGFfcGFydGlhbF9zdWJwYXRo cyA9IE5JTDsKIAlMaXN0CSAgICpwYV9ub25wYXJ0aWFsX3N1YnBhdGhzID0gTklMOworCUxpc3QJ ICAgKnBhX3N1YnBhdGhfY2FycyA9IE5JTDsKIAlib29sCQlwYXJ0aWFsX3N1YnBhdGhzX3ZhbGlk ID0gdHJ1ZTsKIAlib29sCQlwYV9zdWJwYXRoc192YWxpZDsKIAlMaXN0CSAgICphbGxfY2hpbGRf cGF0aGtleXMgPSBOSUw7CkBAIC0xNDQzLDcgKzE0NDksNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5k X3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQlpZiAoY2hpbGRyZWwt PnBhdGhsaXN0ICE9IE5JTCAmJgogCQkJY2hpbGRyZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGgtPnBh cmFtX2luZm8gPT0gTlVMTCkKIAkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoY2hpbGRyZWwt PmNoZWFwZXN0X3RvdGFsX3BhdGgsCi0JCQkJCQkJCQkgICZzdWJwYXRocywgTlVMTCk7CisJCQkJ CQkJCQkgICZzdWJwYXRocywgTlVMTCwgJnN1YnBhdGhfY2Fycyk7CiAJCWVsc2UKIAkJCXN1YnBh dGhzX3ZhbGlkID0gZmFsc2U7CiAKQEAgLTE0NzIsNyArMTQ3OCw4IEBAIGFkZF9wYXRoc190b19h cHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQlBc3NlcnQo Y2hlYXBlc3RfcGF0aC0+cGFyYW1faW5mbyA9PSBOVUxMKTsKIAkJCWFjY3VtdWxhdGVfYXBwZW5k X3N1YnBhdGgoY2hlYXBlc3RfcGF0aCwKIAkJCQkJCQkJCSAgJnN0YXJ0dXBfc3VicGF0aHMsCi0J CQkJCQkJCQkgIE5VTEwpOworCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJICAmc3RhcnR1cF9z dWJwYXRoX2NhcnMpOwogCQl9CiAJCWVsc2UKIAkJCXN0YXJ0dXBfc3VicGF0aHNfdmFsaWQgPSBm YWxzZTsKQEAgLTE0ODMsNyArMTQ5MCw4IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCXsKIAkJCWNoZWFwZXN0X3BhcnRpYWxf cGF0aCA9IGxpbml0aWFsKGNoaWxkcmVsLT5wYXJ0aWFsX3BhdGhsaXN0KTsKIAkJCWFjY3VtdWxh dGVfYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfcGFydGlhbF9wYXRoLAotCQkJCQkJCQkJICAmcGFy dGlhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkgICZwYXJ0aWFsX3N1YnBhdGhzLCBOVUxM LAorCQkJCQkJCQkJICAmcGFydGlhbF9zdWJwYXRoX2NhcnMpOwogCQl9CiAJCWVsc2UKIAkJCXBh cnRpYWxfc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKQEAgLTE1MTIsNyArMTUyMCw4IEBAIGFkZF9w YXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ CQkJQXNzZXJ0KGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAhPSBOVUxMKTsKIAkJCQlhY2N1bXVsYXRl X2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3BhcnRpYWxfcGF0aCwKIAkJCQkJCQkJCQkgICZwYV9w YXJ0aWFsX3N1YnBhdGhzLAotCQkJCQkJCQkJCSAgJnBhX25vbnBhcnRpYWxfc3VicGF0aHMpOwor CQkJCQkJCQkJCSAgJnBhX25vbnBhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJICAmcGFfc3Vi cGF0aF9jYXJzKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTE1MzEsNyArMTU0MCw4IEBAIGFk ZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CiAJCQkJICovCiAJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChucHBhdGgsCiAJCQkJCQkJ CQkJICAmcGFfbm9ucGFydGlhbF9zdWJwYXRocywKLQkJCQkJCQkJCQkgIE5VTEwpOworCQkJCQkJ CQkJCSAgTlVMTCwKKwkJCQkJCQkJCQkgICZwYV9zdWJwYXRoX2NhcnMpOwogCQkJfQogCQl9CiAK QEAgLTE2MDYsMTQgKzE2MTYsMTYgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkgKiBpZiB3ZSBoYXZlIHplcm8gb3Igb25lIGxp dmUgc3VicGF0aCBkdWUgdG8gY29uc3RyYWludCBleGNsdXNpb24uKQogCSAqLwogCWlmIChzdWJw YXRoc192YWxpZCkKLQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgo cm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0 ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN1YnBhdGhzLAorCQkJCQkJCQkJCQkJICBOSUwsIHN1 YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCSAgTklMLCBOVUxMLCAwLCBmYWxzZSwKIAkJCQkJCQkJ CQkJCSAgLTEpKTsKIAogCS8qIGJ1aWxkIGFuIEFwcGVuZFBhdGggZm9yIHRoZSBjaGVhcCBzdGFy dHVwIHBhdGhzLCBpZiB2YWxpZCAqLwogCWlmIChzdGFydHVwX3N1YnBhdGhzX3ZhbGlkKQogCQlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN0YXJ0 dXBfc3VicGF0aHMsCi0JCQkJCQkJCQkJCQkgIE5JTCwgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEp KTsKKwkJCQkJCQkJCQkJCSAgTklMLCBzdGFydHVwX3N1YnBhdGhfY2FycywKKwkJCQkJCQkJCQkJ CSAgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEpKTsKIAogCS8qCiAJICogQ29uc2lkZXIgYW4gYXBw ZW5kIG9mIHVub3JkZXJlZCwgdW5wYXJhbWV0ZXJpemVkIHBhcnRpYWwgcGF0aHMuICBNYWtlCkBA IC0xNjU0LDYgKzE2NjYsNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIEdlbmVyYXRlIGEgcGFydGlhbCBhcHBlbmQg cGF0aC4gKi8KIAkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5J TCwgcGFydGlhbF9zdWJwYXRocywKKwkJCQkJCQkJCQlwYXJ0aWFsX3N1YnBhdGhfY2FycywKIAkJ CQkJCQkJCQlOSUwsIE5VTEwsIHBhcmFsbGVsX3dvcmtlcnMsCiAJCQkJCQkJCQkJZW5hYmxlX3Bh cmFsbGVsX2FwcGVuZCwKIAkJCQkJCQkJCQktMSk7CkBAIC0xNzA0LDYgKzE3MTcsNyBAQCBhZGRf cGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CiAJCWFwcGVuZHBhdGggPSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBwYV9ub25wYXJ0 aWFsX3N1YnBhdGhzLAogCQkJCQkJCQkJCXBhX3BhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJ cGFfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCU5JTCwgTlVMTCwgcGFyYWxsZWxfd29ya2Vycywg dHJ1ZSwKIAkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQlhZGRfcGFydGlhbF9wYXRoKHJlbCwg KFBhdGggKikgYXBwZW5kcGF0aCk7CkBAIC0xNzM3LDYgKzE3NTEsNyBAQCBhZGRfcGF0aHNfdG9f YXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIFNl bGVjdCB0aGUgY2hpbGQgcGF0aHMgZm9yIGFuIEFwcGVuZCB3aXRoIHRoaXMgcGFyYW1ldGVyaXph dGlvbiAqLwogCQlzdWJwYXRocyA9IE5JTDsKKwkJc3VicGF0aF9jYXJzID0gTklMOwogCQlzdWJw YXRoc192YWxpZCA9IHRydWU7CiAJCWZvcmVhY2gobGNyLCBsaXZlX2NoaWxkcmVscykKIAkJewpA QCAtMTc1OSwxMiArMTc3NCwxMyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCXN1YnBhdGhzX3ZhbGlkID0gZmFsc2U7CiAJ CQkJYnJlYWs7CiAJCQl9Ci0JCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1YnBhdGgsICZz dWJwYXRocywgTlVMTCk7CisJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1YnBhdGgsICZz dWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCSAgJnN1YnBhdGhfY2Fycyk7CiAJCX0KIAogCQlpZiAo c3VicGF0aHNfdmFsaWQpCiAJCQlhZGRfcGF0aChyZWwsIChQYXRoICopCi0JCQkJCSBjcmVhdGVf YXBwZW5kX3BhdGgocm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQkJCQkgY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlbCwgc3VicGF0aHMsIE5JTCwgc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJ CU5JTCwgcmVxdWlyZWRfb3V0ZXIsIDAsIGZhbHNlLAogCQkJCQkJCQkJCS0xKSk7CiAJfQpAQCAt MTc5MSw2ICsxODA3LDcgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQljb250aW51ZTsKIAogCQkJYXBwZW5kcGF0aCA9IGNy ZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5JTCwgbGlzdF9tYWtlMShwYXRoKSwKKwkJCQkJ CQkJCQkJbGlzdF9tYWtlMShyZWwtPnJlbGlkcyksCiAJCQkJCQkJCQkJCU5JTCwgTlVMTCwKIAkJ CQkJCQkJCQkJcGF0aC0+cGFyYWxsZWxfd29ya2VycywgdHJ1ZSwKIAkJCQkJCQkJCQkJcGFydGlh bF9yb3dzKTsKQEAgLTE4NzQsOCArMTg5MSwxMSBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3Bh dGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJewogCQlMaXN0CSAgICpw YXRoa2V5cyA9IChMaXN0ICopIGxmaXJzdChsY3ApOwogCQlMaXN0CSAgICpzdGFydHVwX3N1YnBh dGhzID0gTklMOworCQlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhfY2FycyA9IE5JTDsKIAkJTGlz dAkgICAqdG90YWxfc3VicGF0aHMgPSBOSUw7CisJCUxpc3QJICAgKnRvdGFsX3N1YnBhdGhfY2Fy cyA9IE5JTDsKIAkJTGlzdAkgICAqZnJhY3Rpb25hbF9zdWJwYXRocyA9IE5JTDsKKwkJTGlzdAkg ICAqZnJhY3Rpb25hbF9zdWJwYXRoX2NhcnMgPSBOSUw7CiAJCWJvb2wJCXN0YXJ0dXBfbmVxX3Rv dGFsID0gZmFsc2U7CiAJCWJvb2wJCWZyYWN0aW9uX25lcV90b3RhbCA9IGZhbHNlOwogCQlib29s CQltYXRjaF9wYXJ0aXRpb25fb3JkZXI7CkBAIC0yMDM4LDE2ICsyMDU4LDIzIEBAIGdlbmVyYXRl X29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwK IAkJCQkgKiBqdXN0IGEgc2luZ2xlIHN1YnBhdGggKGFuZCBoZW5jZSBhcmVuJ3QgZG9pbmcgYW55 dGhpbmcKIAkJCQkgKiB1c2VmdWwpLgogCQkJCSAqLwotCQkJCWNoZWFwZXN0X3N0YXJ0dXAgPSBn ZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXApOwotCQkJCWNoZWFw ZXN0X3RvdGFsID0gZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCk7 CisJCQkJY2hlYXBlc3Rfc3RhcnR1cCA9CisJCQkJCWdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBh dGgoY2hlYXBlc3Rfc3RhcnR1cCwKKwkJCQkJCQkJCQkJCSAmc3RhcnR1cF9zdWJwYXRoX2NhcnMp OworCQkJCWNoZWFwZXN0X3RvdGFsID0KKwkJCQkJZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0 aChjaGVhcGVzdF90b3RhbCwKKwkJCQkJCQkJCQkJCSAmdG90YWxfc3VicGF0aF9jYXJzKTsKIAog CQkJCXN0YXJ0dXBfc3VicGF0aHMgPSBsYXBwZW5kKHN0YXJ0dXBfc3VicGF0aHMsIGNoZWFwZXN0 X3N0YXJ0dXApOwogCQkJCXRvdGFsX3N1YnBhdGhzID0gbGFwcGVuZCh0b3RhbF9zdWJwYXRocywg Y2hlYXBlc3RfdG90YWwpOwogCiAJCQkJaWYgKGNoZWFwZXN0X2ZyYWN0aW9uYWwpCiAJCQkJewot CQkJCQljaGVhcGVzdF9mcmFjdGlvbmFsID0gZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChj aGVhcGVzdF9mcmFjdGlvbmFsKTsKLQkJCQkJZnJhY3Rpb25hbF9zdWJwYXRocyA9IGxhcHBlbmQo ZnJhY3Rpb25hbF9zdWJwYXRocywgY2hlYXBlc3RfZnJhY3Rpb25hbCk7CisJCQkJCWNoZWFwZXN0 X2ZyYWN0aW9uYWwgPQorCQkJCQkJZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVz dF9mcmFjdGlvbmFsLAorCQkJCQkJCQkJCQkJCSAmZnJhY3Rpb25hbF9zdWJwYXRoX2NhcnMpOwor CQkJCQlmcmFjdGlvbmFsX3N1YnBhdGhzID0KKwkJCQkJCWxhcHBlbmQoZnJhY3Rpb25hbF9zdWJw YXRocywgY2hlYXBlc3RfZnJhY3Rpb25hbCk7CiAJCQkJfQogCQkJfQogCQkJZWxzZQpAQCAtMjA1 NywxMyArMjA4NCwxNiBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICogY2hpbGQgcGF0aHMgZm9yIHRoZSBNZXJn ZUFwcGVuZC4KIAkJCQkgKi8KIAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0 X3N0YXJ0dXAsCi0JCQkJCQkJCQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJ CQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCQkgICZzdGFydHVwX3N1YnBh dGhfY2Fycyk7CiAJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCwK LQkJCQkJCQkJCQkgICZ0b3RhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkJICAmdG90YWxf c3VicGF0aHMsIE5VTEwsCisJCQkJCQkJCQkJICAmdG90YWxfc3VicGF0aF9jYXJzKTsKIAogCQkJ CWlmIChjaGVhcGVzdF9mcmFjdGlvbmFsKQogCQkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRo KGNoZWFwZXN0X2ZyYWN0aW9uYWwsCi0JCQkJCQkJCQkJCSAgJmZyYWN0aW9uYWxfc3VicGF0aHMs IE5VTEwpOworCQkJCQkJCQkJCQkgICZmcmFjdGlvbmFsX3N1YnBhdGhzLCBOVUxMLAorCQkJCQkJ CQkJCQkgICZmcmFjdGlvbmFsX3N1YnBhdGhfY2Fycyk7CiAJCQl9CiAJCX0KIApAQCAtMjA3NSw2 ICsyMTA1LDcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQkJCSAgcmVsLAogCQkJCQkJCQkJCQkJCSAg c3RhcnR1cF9zdWJwYXRocywKIAkJCQkJCQkJCQkJCQkgIE5JTCwKKwkJCQkJCQkJCQkJCQkgIHN0 YXJ0dXBfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCQkJCSAgcGF0aGtleXMsCiAJCQkJCQkJCQkJ CQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCSAgMCwKQEAgLTIwODUsNiArMjExNiw3IEBAIGdlbmVy YXRlX29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKIAkJCQkJCQkJCQkJCQkJICByZWwsCiAJCQkJCQkJCQkJCQkJCSAgdG90YWxfc3VicGF0aHMs CiAJCQkJCQkJCQkJCQkJCSAgTklMLAorCQkJCQkJCQkJCQkJCQkgIHRvdGFsX3N1YnBhdGhfY2Fy cywKIAkJCQkJCQkJCQkJCQkJICBwYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJ CQkJCQkJCQkJCQkgIDAsCkBAIC0yMDk2LDYgKzIxMjgsNyBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBw ZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJ CQkJCSAgcmVsLAogCQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aHMsCiAJCQkJCQkJ CQkJCQkJCSAgTklMLAorCQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aF9jYXJzLAog CQkJCQkJCQkJCQkJCQkgIHBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCQkgIE5VTEwsCiAJCQkJCQkJ CQkJCQkJCSAgMCwKQEAgLTIxMDgsMTIgKzIxNDEsMTQgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVu ZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJYWRkX3BhdGgo cmVsLCAoUGF0aCAqKSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJ CQkJCXJlbCwKIAkJCQkJCQkJCQkJCQkJCXN0YXJ0dXBfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJ CQlzdGFydHVwX3N1YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCQkJCXBhdGhrZXlzLAogCQkJCQkJ CQkJCQkJCQkJTlVMTCkpOwogCQkJaWYgKHN0YXJ0dXBfbmVxX3RvdGFsKQogCQkJCWFkZF9wYXRo KHJlbCwgKFBhdGggKikgY3JlYXRlX21lcmdlX2FwcGVuZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJ CQkJCQkJcmVsLAogCQkJCQkJCQkJCQkJCQkJCXRvdGFsX3N1YnBhdGhzLAorCQkJCQkJCQkJCQkJ CQkJCXRvdGFsX3N1YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCQkJCQlwYXRoa2V5cywKIAkJCQkJ CQkJCQkJCQkJCQlOVUxMKSk7CiAKQEAgLTIxMjEsNiArMjE1Niw3IEBAIGdlbmVyYXRlX29yZGVy ZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChyb290LAogCQkJ CQkJCQkJCQkJCQkJCXJlbCwKIAkJCQkJCQkJCQkJCQkJCQlmcmFjdGlvbmFsX3N1YnBhdGhzLAor CQkJCQkJCQkJCQkJCQkJCWZyYWN0aW9uYWxfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCQkJCQkJ CXBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCQkJCU5VTEwpKTsKIAkJfQpAQCAtMjIyMyw3ICsyMjU5 LDggQEAgZ2V0X2NoZWFwZXN0X3BhcmFtZXRlcml6ZWRfY2hpbGRfcGF0aChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogICogcGF0aHMpLgogICovCiBzdGF0aWMgdm9pZAotYWNj dW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoqc3VicGF0aHMsIExpc3Qg KipzcGVjaWFsX3N1YnBhdGhzKQorYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRo LCBMaXN0ICoqc3VicGF0aHMsIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzLAorCQkJCQkJICBMaXN0 ICoqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpCiB7CiAJaWYgKElzQShwYXRoLCBBcHBlbmRQYXRo KSkKIAl7CkBAIC0yMjMyLDYgKzIyNjksOCBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCWlm ICghYXBhdGgtPnBhdGgucGFyYWxsZWxfYXdhcmUgfHwgYXBhdGgtPmZpcnN0X3BhcnRpYWxfcGF0 aCA9PSAwKQogCQl7CiAJCQkqc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3VicGF0aHMsIGFwYXRo LT5zdWJwYXRocyk7CisJCQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQo KmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1 cm47CiAJCX0KIAkJZWxzZSBpZiAoc3BlY2lhbF9zdWJwYXRocyAhPSBOVUxMKQpAQCAtMjI0Niw2 ICsyMjg1LDggQEAgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoq c3VicGF0aHMsIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzKQogCQkJCQkJCQkJCQkJICBhcGF0aC0+ Zmlyc3RfcGFydGlhbF9wYXRoKTsKIAkJCSpzcGVjaWFsX3N1YnBhdGhzID0gbGlzdF9jb25jYXQo KnNwZWNpYWxfc3VicGF0aHMsCiAJCQkJCQkJCQkJCW5ld19zcGVjaWFsX3N1YnBhdGhzKTsKKwkJ CSpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMsIHBhdGgtPnBhcmVudC0+cmVsaWRzKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAg LTIyNTQsNiArMjI5NSw4IEBAIGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwg TGlzdCAqKnN1YnBhdGhzLCBMaXN0ICoqc3BlY2lhbF9zdWJwYXRocykKIAkJTWVyZ2VBcHBlbmRQ YXRoICptcGF0aCA9IChNZXJnZUFwcGVuZFBhdGggKikgcGF0aDsKIAogCQkqc3VicGF0aHMgPSBs aXN0X2NvbmNhdCgqc3VicGF0aHMsIG1wYXRoLT5zdWJwYXRocyk7CisJCSpjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cyA9CisJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgcGF0aC0+ cGFyZW50LT5yZWxpZHMpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMjY1LDEwICsyMzA4LDE1IEBA IGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwgTGlzdCAqKnN1YnBhdGhzLCBM aXN0ICoqc3BlY2lhbF9zdWJwYXRocykKICAqCQlSZXR1cm5zIHRoZSBzaW5nbGUgc3VicGF0aCBv ZiBhbiBBcHBlbmQvTWVyZ2VBcHBlbmQsIG9yIGp1c3QKICAqCQlyZXR1cm4gJ3BhdGgnIGlmIGl0 J3Mgbm90IGEgc2luZ2xlIHN1Yi1wYXRoIEFwcGVuZC9NZXJnZUFwcGVuZC4KICAqCisgKiBBcyBh IHNpZGUgZWZmZWN0LCB3aGVuZXZlciB3ZSByZXR1cm4gYSBzaW5nbGUgc3VicGF0aCByYXRoZXIg dGhhbiB0aGUKKyAqIG9yaWdpbmFsIHBhdGgsIGFkZCB0aGUgcmVsaWQgc2V0IGZvciB0aGUgb3Jp Z2luYWwgcGF0aCB0bworICogY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHNvIHRoYXQgdGhvc2Ug cmVsaWRzIGRvbid0IGVudGlyZWx5IGRpc2FwcGVhcgorICogZnJvbSB0aGUgZmluYWwgcGxhbi4K KyAqCiAgKiBOb3RlOiAncGF0aCcgbXVzdCBub3QgYmUgYSBwYXJhbGxlbC1hd2FyZSBwYXRoLgog ICovCiBzdGF0aWMgUGF0aCAqCi1nZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBh dGgpCitnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipjaGls ZF9hcHBlbmRfcmVsaWRfc2V0cykKIHsKIAlBc3NlcnQoIXBhdGgtPnBhcmFsbGVsX2F3YXJlKTsK IApAQCAtMjI3NywxNCArMjMyNSwyMiBAQCBnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgpCiAJCUFwcGVuZFBhdGggKmFwYXRoID0gKEFwcGVuZFBhdGggKikgcGF0aDsKIAog CQlpZiAobGlzdF9sZW5ndGgoYXBhdGgtPnN1YnBhdGhzKSA9PSAxKQorCQl7CisJCQkqY2hpbGRf YXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRz LCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1cm4gKFBhdGggKikgbGluaXRpYWwoYXBh dGgtPnN1YnBhdGhzKTsKKwkJfQogCX0KIAllbHNlIGlmIChJc0EocGF0aCwgTWVyZ2VBcHBlbmRQ YXRoKSkKIAl7CiAJCU1lcmdlQXBwZW5kUGF0aCAqbXBhdGggPSAoTWVyZ2VBcHBlbmRQYXRoICop IHBhdGg7CiAKIAkJaWYgKGxpc3RfbGVuZ3RoKG1wYXRoLT5zdWJwYXRocykgPT0gMSkKKwkJewor CQkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cywgcGF0aC0+cGFyZW50LT5yZWxpZHMpOwogCQkJcmV0dXJuIChQYXRoICopIGxp bml0aWFsKG1wYXRoLT5zdWJwYXRocyk7CisJCX0KIAl9CiAKIAlyZXR1cm4gcGF0aDsKQEAgLTIz MTMsNyArMjM2OSw3IEBAIHNldF9kdW1teV9yZWxfcGF0aGxpc3QoUmVsT3B0SW5mbyAqcmVsKQog CXJlbC0+cGFydGlhbF9wYXRobGlzdCA9IE5JTDsKIAogCS8qIFNldCB1cCB0aGUgZHVtbXkgcGF0 aCAqLwotCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJl bCwgTklMLCBOSUwsCisJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgo TlVMTCwgcmVsLCBOSUwsIE5JTCwgTklMLAogCQkJCQkJCQkJCQkgIE5JTCwgcmVsLT5sYXRlcmFs X3JlbGlkcywKIAkJCQkJCQkJCQkJICAwLCBmYWxzZSwgLTEpKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2pvaW5yZWxzLmMKaW5kZXggNWQxZmMzODk5ZGEuLmMxZWQwZDM4NzBmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKQEAgLTE1MzAsNyArMTUzMCw3IEBAIG1hcmtf ZHVtbXlfcmVsKFJlbE9wdEluZm8gKnJlbCkKIAogCS8qIFNldCB1cCB0aGUgZHVtbXkgcGF0aCAq LwogCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJlbCwg TklMLCBOSUwsCi0JCQkJCQkJCQkJCSAgTklMLCByZWwtPmxhdGVyYWxfcmVsaWRzLAorCQkJCQkJ CQkJCQkgIE5JTCwgTklMLCByZWwtPmxhdGVyYWxfcmVsaWRzLAogCQkJCQkJCQkJCQkgIDAsIGZh bHNlLCAtMSkpOwogCiAJLyogU2V0IG9yIHVwZGF0ZSBjaGVhcGVzdF90b3RhbF9wYXRoIGFuZCBy ZWxhdGVkIGZpZWxkcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmlu ZGV4IDhhZjA5MWJhNjQ3Li44OGI0YzU5MDFiMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2NyZWF0ZXBsYW4uYwpAQCAtMTI2NSw2ICsxMjY1LDcgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBs YW5uZXJJbmZvICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAlwbGFu LT5wbGFuLmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5wbGFuLnJpZ2h0dHJlZSA9IE5VTEw7CiAJ cGxhbi0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CisJcGxhbi0+Y2hpbGRfYXBwZW5kX3JlbGlk X3NldHMgPSBiZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogCiAJaWYgKHBhdGhr ZXlzICE9IE5JTCkKIAl7CkBAIC0xNDc3LDYgKzE0NzgsNyBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5k X3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBs YW4tPmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5yaWdodHRyZWUgPSBOVUxMOwogCW5vZGUtPmFw cHJlbGlkcyA9IHJlbC0+cmVsaWRzOworCW5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0g YmVzdF9wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAogCS8qCiAJICogQ29tcHV0ZSBz b3J0IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVk LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDlkNTI2MjY1MWU3Li5lYjYy Nzk0YWVjZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDAyNyw2ICs0 MDI3LDcgQEAgY3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJCQkgICBwYXRocywKIAkJCQkJCQkgICBO SUwsCiAJCQkJCQkJICAgTklMLAorCQkJCQkJCSAgIE5JTCwKIAkJCQkJCQkgICBOVUxMLAogCQkJ CQkJCSAgIDAsCiAJCQkJCQkJICAgZmFsc2UsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcHJlcC9wcmVwdW5pb24uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1 bmlvbi5jCmluZGV4IGY1MjhmMDk2YTU2Li5jYTIyNThlNDRkMSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3ByZXAvcHJlcHVuaW9uLmMKQEAgLTg0Myw3ICs4NDMsNyBAQCBnZW5lcmF0ZV91bmlvbl9w YXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJICogdW5pb24g Y2hpbGQuCiAJICovCiAJYXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwg cmVzdWx0X3JlbCwgY2hlYXBlc3RfcGF0aGxpc3QsCi0JCQkJCQkJCQkJTklMLCBOSUwsIE5VTEws IDAsIGZhbHNlLCAtMSk7CisJCQkJCQkJCQkJTklMLCBOSUwsIE5JTCwgTlVMTCwgMCwgZmFsc2Us IC0xKTsKIAogCS8qCiAJICogRXN0aW1hdGUgbnVtYmVyIG9mIGdyb3Vwcy4gIEZvciBub3cgd2Ug anVzdCBhc3N1bWUgdGhlIG91dHB1dCBpcyB1bmlxdWUKQEAgLTg4OSw3ICs4ODksNyBAQCBnZW5l cmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3Qs CiAKIAkJcGFwYXRoID0gKFBhdGggKikKIAkJCWNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1 bHRfcmVsLCBOSUwsIHBhcnRpYWxfcGF0aGxpc3QsCi0JCQkJCQkJICAgTklMLCBOVUxMLCBwYXJh bGxlbF93b3JrZXJzLAorCQkJCQkJCSAgIE5JTCwgTklMLCBOVUxMLCBwYXJhbGxlbF93b3JrZXJz LAogCQkJCQkJCSAgIGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQsIC0xKTsKIAkJZ3BhdGggPSAoUGF0 aCAqKQogCQkJY3JlYXRlX2dhdGhlcl9wYXRoKHJvb3QsIHJlc3VsdF9yZWwsIHBhcGF0aCwKQEAg LTEwMTgsNiArMTAxOCw3IEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQg Km9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfbWVyZ2Vf YXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJCQkgcmVzdWx0X3JlbCwKIAkJCQkJCQkJCQkJ CQkgb3JkZXJlZF9wYXRobGlzdCwKKwkJCQkJCQkJCQkJCQkgTklMLAogCQkJCQkJCQkJCQkJCSB1 bmlvbl9wYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkgTlVMTCk7CiAKQEAgLTEyMjQsOCArMTIyNSwx MCBAQCBnZW5lcmF0ZV9ub251bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJICogYmV0d2VlbiB0aGUgc2V0IG9wIHRhcmdldGxpc3QgYW5kIHRo ZSB0YXJnZXRsaXN0IG9mIHRoZQogCQkJCSAqIGxlZnQgaW5wdXQuICBUaGUgQXBwZW5kIHdpbGwg YmUgcmVtb3ZlZCBpbiBzZXRyZWZzLmMuCiAJCQkJICovCi0JCQkJYXBhdGggPSAoUGF0aCAqKSBj cmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVzdWx0X3JlbCwgbGlzdF9tYWtlMShscGF0aCksCi0J CQkJCQkJCQkJCQkJTklMLCBOSUwsIE5VTEwsIDAsIGZhbHNlLCAtMSk7CisJCQkJYXBhdGggPSAo UGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVzdWx0X3JlbCwKKwkJCQkJCQkJCQkJ CQlsaXN0X21ha2UxKGxwYXRoKSwKKwkJCQkJCQkJCQkJCQlOSUwsIE5JTCwgTklMLCBOVUxMLCAw LAorCQkJCQkJCQkJCQkJCWZhbHNlLCAtMSk7CiAKIAkJCQlhZGRfcGF0aChyZXN1bHRfcmVsLCBh cGF0aCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2Rl LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4IGU0ZmQ2OTUw ZmFkLi5jMGE5ODExYjEzMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCkBA IC0xMzAwLDYgKzEzMDAsNyBAQCBBcHBlbmRQYXRoICoKIGNyZWF0ZV9hcHBlbmRfcGF0aChQbGFu bmVySW5mbyAqcm9vdCwKIAkJCQkgICBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICAgTGlzdCAqc3Vi cGF0aHMsIExpc3QgKnBhcnRpYWxfc3VicGF0aHMsCisJCQkJICAgTGlzdCAqY2hpbGRfYXBwZW5k X3JlbGlkX3NldHMsCiAJCQkJICAgTGlzdCAqcGF0aGtleXMsIFJlbGlkcyByZXF1aXJlZF9vdXRl ciwKIAkJCQkgICBpbnQgcGFyYWxsZWxfd29ya2VycywgYm9vbCBwYXJhbGxlbF9hd2FyZSwKIAkJ CQkgICBkb3VibGUgcm93cykKQEAgLTEzMDksNiArMTMxMCw3IEBAIGNyZWF0ZV9hcHBlbmRfcGF0 aChQbGFubmVySW5mbyAqcm9vdCwKIAogCUFzc2VydCghcGFyYWxsZWxfYXdhcmUgfHwgcGFyYWxs ZWxfd29ya2VycyA+IDApOwogCisJcGF0aG5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0g Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiAJcGF0aG5vZGUtPnBhdGgucGF0aHR5cGUgPSBUX0Fw cGVuZDsKIAlwYXRobm9kZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJcGF0aG5vZGUtPnBhdGgucGF0 aHRhcmdldCA9IHJlbC0+cmVsdGFyZ2V0OwpAQCAtMTQ3MSw2ICsxNDczLDcgQEAgTWVyZ2VBcHBl bmRQYXRoICoKIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCSBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkgTGlzdCAqc3VicGF0aHMsCisJCQkJCQkgTGlz dCAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkgTGlzdCAqcGF0aGtleXMsCiAJCQkJ CQkgUmVsaWRzIHJlcXVpcmVkX291dGVyKQogewpAQCAtMTQ4Niw2ICsxNDg5LDcgQEAgY3JlYXRl X21lcmdlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCUFzc2VydChibXNf aXNfZW1wdHkocmVsLT5sYXRlcmFsX3JlbGlkcykgJiYgYm1zX2lzX2VtcHR5KHJlcXVpcmVkX291 dGVyKSk7CiAKKwlwYXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBjaGlsZF9hcHBl bmRfcmVsaWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfTWVyZ2VBcHBlbmQ7 CiAJcGF0aG5vZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJn ZXQgPSByZWwtPnJlbHRhcmdldDsKQEAgLTM5NTAsNiArMzk1NCw3IEBAIHJlcGFyYW1ldGVyaXpl X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFBhdGggKnBhdGgsCiAJCQkJfQogCQkJCXJldHVybiAo UGF0aCAqKQogCQkJCQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBjaGlsZHBhdGhzLCBw YXJ0aWFscGF0aHMsCisJCQkJCQkJCQkgICBhcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMs CiAJCQkJCQkJCQkgICBhcGF0aC0+cGF0aC5wYXRoa2V5cywgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJ CQkJCQkgICBhcGF0aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzLAogCQkJCQkJCQkJICAgYXBhdGgt PnBhdGgucGFyYWxsZWxfYXdhcmUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRo bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IGNmM2ExNmI4YjBl Li43NWE3MDQ4OWU1YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTIxNzEsNiArMjE3MSwxMiBA QCB0eXBlZGVmIHN0cnVjdCBDdXN0b21QYXRoCiAgKiBGb3IgcGFydGlhbCBBcHBlbmQsICdzdWJw YXRocycgY29udGFpbnMgbm9uLXBhcnRpYWwgc3VicGF0aHMgZm9sbG93ZWQgYnkKICAqIHBhcnRp YWwgc3VicGF0aHMuCiAgKgorICogV2hlbmV2ZXIgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aCgp IGFsbG93cyB1cyB0byBjb25zb2xpZGF0ZSBtdWx0aXBsZQorICogbGV2ZWxzIG9mIEFwcGVuZCBw YXRocyBhcmUgY29uc29saWRhdGVkIGRvd24gdG8gb25lLCB3ZSBzdG9yZSB0aGUgUlRJCisgKiBz ZXRzIGZvciB0aGUgb21pdHRlZCBwYXRocyBpbiBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cy4gVGhp cyBpcyBub3QgbmVjZXNzYXJ5CisgKiBmb3IgcGxhbm5pbmcgb3IgZXhlY3V0aW9uOyB3ZSBkbyBp dCBmb3IgdGhlIGJlbmVmaXQgb2YgY29kZSB0aGF0IHdhbnRzCisgKiB0byBpbnNwZWN0IHRoZSBm aW5hbCBwbGFuIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCBjYW1lIHRvIGJlLgorICoKICAqIE5vdGU6 IGl0IGlzIHBvc3NpYmxlIGZvciAic3VicGF0aHMiIHRvIGNvbnRhaW4gb25seSBvbmUsIG9yIGV2 ZW4gbm8sCiAgKiBlbGVtZW50cy4gIFRoZXNlIGNhc2VzIGFyZSBvcHRpbWl6ZWQgZHVyaW5nIGNy ZWF0ZV9hcHBlbmRfcGxhbi4KICAqIEluIHBhcnRpY3VsYXIsIGFuIEFwcGVuZFBhdGggd2l0aCBu byBzdWJwYXRocyBpcyBhICJkdW1teSIgcGF0aCB0aGF0CkBAIC0yMTg2LDYgKzIxOTIsNyBAQCB0 eXBlZGVmIHN0cnVjdCBBcHBlbmRQYXRoCiAJLyogSW5kZXggb2YgZmlyc3QgcGFydGlhbCBwYXRo IGluIHN1YnBhdGhzOyBsaXN0X2xlbmd0aChzdWJwYXRocykgaWYgbm9uZSAqLwogCWludAkJCWZp cnN0X3BhcnRpYWxfcGF0aDsKIAlDYXJkaW5hbGl0eSBsaW1pdF90dXBsZXM7CS8qIGhhcmQgbGlt aXQgb24gb3V0cHV0IHR1cGxlcywgb3IgLTEgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVs aWRfc2V0czsKIH0gQXBwZW5kUGF0aDsKIAogI2RlZmluZSBJU19EVU1NWV9BUFBFTkQocCkgXApA QCAtMjIwMiwxMiArMjIwOSwxNSBAQCBleHRlcm4gYm9vbCBpc19kdW1teV9yZWwoUmVsT3B0SW5m byAqcmVsKTsKIC8qCiAgKiBNZXJnZUFwcGVuZFBhdGggcmVwcmVzZW50cyBhIE1lcmdlQXBwZW5k IHBsYW4sIGllLCB0aGUgbWVyZ2luZyBvZiBzb3J0ZWQKICAqIHJlc3VsdHMgZnJvbSBzZXZlcmFs IG1lbWJlciBwbGFucyB0byBwcm9kdWNlIHNpbWlsYXJseS1zb3J0ZWQgb3V0cHV0LgorICoKKyAq IGNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGhlcmUgYXMgZm9y IEFwcGVuZFBhdGguCiAgKi8KIHR5cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kUGF0aAogewogCVBh dGgJCXBhdGg7CiAJTGlzdAkgICAqc3VicGF0aHM7CQkvKiBsaXN0IG9mIGNvbXBvbmVudCBQYXRo cyAqLwogCUNhcmRpbmFsaXR5IGxpbWl0X3R1cGxlczsJLyogaGFyZCBsaW1pdCBvbiBvdXRwdXQg dHVwbGVzLCBvciAtMSAqLworCUxpc3QJICAgKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogfSBN ZXJnZUFwcGVuZFBhdGg7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFu bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDVkMDUyMGQ1ZTU4 Li4wNDViN2VlODRhNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTM5NCw5ICszOTQsMTYgQEAg c3RydWN0IFBhcnRpdGlvblBydW5lSW5mbzsJCS8qIGZvcndhcmQgcmVmZXJlbmNlIHRvIHN0cnVj dCBiZWxvdyAqLwogdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kCiB7CiAJUGxhbgkJcGxhbjsKKwogCS8q IFJUSXMgb2YgYXBwZW5kcmVsKHMpIGZvcm1lZCBieSB0aGlzIG5vZGUgKi8KIAlCaXRtYXBzZXQg ICphcHByZWxpZHM7CisKKwkvKiBzZXRzIG9mIFJUSXMgb2YgYXBwZW5kcmVscyBjb25zb2xpZGF0 ZWQgaW50byB0aGlzIG5vZGUgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsK KworCS8qIHBsYW5zIHRvIHJ1biAqLwogCUxpc3QJICAgKmFwcGVuZHBsYW5zOworCiAJLyogIyBv ZiBhc3luY2hyb25vdXMgcGxhbnMgKi8KIAlpbnQJCQluYXN5bmNwbGFuczsKIApAQCAtNDI2LDYg KzQzMywxMCBAQCB0eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVuZAogCS8qIFJUSXMgb2YgYXBwZW5k cmVsKHMpIGZvcm1lZCBieSB0aGlzIG5vZGUgKi8KIAlCaXRtYXBzZXQgICphcHByZWxpZHM7CiAK KwkvKiBzZXRzIG9mIFJUSXMgb2YgYXBwZW5kcmVscyBjb25zb2xpZGF0ZWQgaW50byB0aGlzIG5v ZGUgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKKworCS8qIHBsYW5zIHRv IHJ1biAqLwogCUxpc3QJICAgKm1lcmdlcGxhbnM7CiAKIAkvKiB0aGVzZSBmaWVsZHMgYXJlIGp1 c3QgbGlrZSB0aGUgc29ydC1rZXkgaW5mbyBpbiBzdHJ1Y3QgU29ydDogKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BhdGhub2RlLmgKaW5kZXggOTU1ZTkwNTY4NTguLjQ0MzcyNDhjYjY3IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aG5vZGUuaApAQCAtNzAsMTIgKzcwLDE0IEBAIGV4dGVybiBUaWRSYW5nZVBhdGggKmNy ZWF0ZV90aWRyYW5nZXNjYW5fcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJICBS ZWxpZHMgcmVxdWlyZWRfb3V0ZXIpOwogZXh0ZXJuIEFwcGVuZFBhdGggKmNyZWF0ZV9hcHBlbmRf cGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJICBMaXN0 ICpzdWJwYXRocywgTGlzdCAqcGFydGlhbF9zdWJwYXRocywKKwkJCQkJCQkJCSAgTGlzdCAqY2hp bGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkJCQkgIExpc3QgKnBhdGhrZXlzLCBSZWxpZHMg cmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkgIGludCBwYXJhbGxlbF93b3JrZXJzLCBib29sIHBh cmFsbGVsX2F3YXJlLAogCQkJCQkJCQkJICBkb3VibGUgcm93cyk7CiBleHRlcm4gTWVyZ2VBcHBl bmRQYXRoICpjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJ CQkJCQkJCQkgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQkJIExpc3QgKnN1YnBhdGhzLAor CQkJCQkJCQkJCQkJIExpc3QgKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJ IExpc3QgKnBhdGhrZXlzLAogCQkJCQkJCQkJCQkJIFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBl eHRlcm4gR3JvdXBSZXN1bHRQYXRoICpjcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgoUGxhbm5lcklu Zm8gKnJvb3QsCi0tIAoyLjUxLjAKCg== --0000000000008fa27b0643e0d41b Content-Type: application/octet-stream; name="v4-0002-Store-information-about-elided-nodes-in-the-final.patch" Content-Disposition: attachment; filename="v4-0002-Store-information-about-elided-nodes-in-the-final.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mi4s3jge1 RnJvbSBmNDM3NzA1MjI3MzZmZDBiMzZiNzJhY2RkYjJjNzkxOGFjNDNiNDNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6NDIgLTA0MDAKU3ViamVjdDogW1BBVENIIHY0IDIv Nl0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgZWxpZGVkIG5vZGVzIGluIHRoZSBmaW5hbAogcGxh bi4KCkFuIGV4dGVuc2lvbiAob3IgY29yZSBjb2RlKSBtaWdodCB3YW50IHRvIHJlY29uc3RydWN0 IHRoZSBwbGFubmVyJ3MKY2hvaWNlIG9mIGpvaW4gb3JkZXIgZnJvbSB0aGUgZmluYWwgcGxhbi4g VG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUKdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMgdGhh dCB3ZXJlIHBhcnQgb2YgdGhlIGpvaW4gcHJvYmxlbSBpbiB0aGF0IHBsYW4uClRoZSBwcmV2aW91 cyBjb21taXQsIHRvZ2V0aGVyIHdpdGggdGhlIGVhcmxpZXIgd29yayBpbgo4YzQ5YTQ4NGU4ZWJi MDE5OWZiYTRiZDY4ZWFhZWRhZjQ5YjQ4ZWQwLCBpcyBlbm91Z2ggdG8gbGV0IHVzIG1hdGNoIHVw ClJUSXMgd2Ugc2VlIGluIHRoZSBmaW5hbCBwbGFuIHdpdGggUlRJcyB0aGF0IHdlIHNlZSBkdXJp bmcgdGhlIHBsYW5uaW5nCmN5Y2xlLCBidXQgd2Ugc3RpbGwgaGF2ZSBhIHByb2JsZW0gaWYgdGhl IHBsYW5uZXIgZGVjaWRlcyB0byBkcm9wIHNvbWUKUlRJcyBvdXQgb2YgdGhlIGZpbmFsIHBsYW4g YWx0b2dldGhlci4KClRvIGZpeCB0aGF0LCB3aGVuIHNldHJlZnMuYyByZW1vdmVzIGEgU3VicXVl cnlTY2FuLCBzaW5nbGUtY2hpbGQgQXBwZW5kLApvciBzaW5nbGUtY2hpbGQgTWVyZ2VBcHBlbmQg ZnJvbSB0aGUgZmluYWwgUGxhbiB0cmVlLCByZWNvcmQgdGhlIHR5cGUgb2YKdGhlIHJlbW92ZWQg bm9kZSBhbmQgdGhlIFJUSXMgdGhhdCB0aGUgcmVtb3ZlZCBub2RlIHdvdWxkIGhhdmUgc2Nhbm5l ZAppbiB0aGUgZmluYWwgcGxhbiB0cmVlLiBJdCB3b3VsZCBiZSBuYXR1cmFsIHRvIHJlY29yZCB0 aGlzIGluZm9ybWF0aW9uCm9uIHRoZSBjaGlsZCBvZiB0aGUgcmVtb3ZlZCBwbGFuIG5vZGUsIGJ1 dCB0aGF0IHdvdWxkIHJlcXVpcmUgYWRkaW5nCmFuIGFkZGl0aW9uYWwgcG9pbnRlciBmaWVsZCB0 byB0eXBlIFBsYW4sIHdoaWNoIHNlZW1zIHVuZGVzaXJhYmxlLgpTbywgaW5zdGVhZCwgc3RvcmUg dGhlIGluZm9ybWF0aW9uIGluIGEgc2VwYXJhdGUgbGlzdCB0aGF0IHRoZQpleGVjdXRvciBuZWVk IG5ldmVyIGNvbnN1bHQsIGFuZCB1c2UgdGhlIHBsYW5fbm9kZV9pZCB0byBpZGVudGlmeQp0aGUg cGxhbiBub2RlIHdpdGggd2hpY2ggdGhlIHJlbW92ZWQgbm9kZSBpcyBsb2dpY2FsbHkgYXNzb2Np YXRlZC4KCkFsc28sIHVwZGF0ZSBwZ19vdmVyZXhwbGFpbiB0byBkaXNwbGF5IHRoZXNlIGRldGFp bHMuCi0tLQogLi4uL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91dCAgICAgICAgICAgICAgIHwg IDQgKy0KIGNvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyAgICAgICB8IDM5 ICsrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAg ICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgICAg ICAgfCA1MiArKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aCAgICAgICAgICAgICAgICAgfCAgMyArKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgg ICAgICAgICAgICAgICAgIHwgMTcgKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCAgICAgICAgICAgICAgfCAgMSArCiA3IGZpbGVzIGNoYW5nZWQsIDExNCBpbnNlcnRpb25z KCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4v ZXhwZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0IGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBl Y3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQKaW5kZXggNTVkMzQ2NjZkODcuLmNhOWEyM2VhNjFmIDEw MDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWlu Lm91dAorKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWlu Lm91dApAQCAtNDUyLDYgKzQ1Miw4IEBAIFNFTEVDVCAqIEZST00gdmVnZXRhYmxlcyBXSEVSRSBn ZW51cyA9ICdkYXVjdXMnOwogIFNlcSBTY2FuIG9uIGRhdWN1cyB2ZWdldGFibGVzCiAgICBGaWx0 ZXI6IChnZW51cyA9ICdkYXVjdXMnOjp0ZXh0KQogICAgU2NhbiBSVEk6IDIKKyAgIEVsaWRlZCBO b2RlIFR5cGU6IEFwcGVuZAorICAgRWxpZGVkIE5vZGUgUlRJczogMQogIFJUSSAxIChyZWxhdGlv biwgaW5oZXJpdGVkLCBpbi1mcm9tLWNsYXVzZSk6CiAgICBFcmVmOiB2ZWdldGFibGVzIChpZCwg bmFtZSwgZ2VudXMpCiAgICBSZWxhdGlvbjogdmVnZXRhYmxlcwpAQCAtNDY1LDcgKzQ2Nyw3IEBA IFNFTEVDVCAqIEZST00gdmVnZXRhYmxlcyBXSEVSRSBnZW51cyA9ICdkYXVjdXMnOwogICAgUmVs YXRpb24gS2luZDogcmVsYXRpb24KICAgIFJlbGF0aW9uIExvY2sgTW9kZTogQWNjZXNzU2hhcmVM b2NrCiAgVW5wcnVuYWJsZSBSVElzOiAxIDIKLSgxNiByb3dzKQorKDE4IHJvd3MpCiAKIC0tIEFs c28gdGVzdCBhIGNhc2UgdGhhdCBpbnZvbHZlcyBhIHdyaXRlLgogRVhQTEFJTiAoUkFOR0VfVEFC TEUsIENPU1RTIE9GRikKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3Zl cmV4cGxhaW4uYyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwppbmRl eCA1ZGM3MDdkNjllMy4uZmE5MDdmYTQ3MmUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4 cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYworKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMKQEAgLTE5MSw2ICsxOTEsOCBAQCBvdmVyZXhwbGFpbl9wZXJfbm9kZV9ob29r KFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJICovCiAJaWYgKG9wdGlv bnMtPnJhbmdlX3RhYmxlKQogCXsKKwkJYm9vbAkJb3BlbmVkX2VsaWRlZF9ub2RlcyA9IGZhbHNl OworCiAJCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKIAkJewogCQkJY2FzZSBUX1NlcVNjYW46CkBA IC0yNTEsNiArMjUzLDQzIEBAIG92ZXJleHBsYWluX3Blcl9ub2RlX2hvb2soUGxhblN0YXRlICpw bGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCWRlZmF1bHQ6CiAJCQkJYnJlYWs7CiAJCX0K KworCQlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgZXMtPnBzdG10LT5lbGlkZWROb2RlcykK KwkJeworCQkJY2hhcgkgICAqZWxpZGVkbm9kZXRhZzsKKworCQkJaWYgKG4tPnBsYW5fbm9kZV9p ZCAhPSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQkJY29udGludWU7CisKKwkJCWlmICghb3BlbmVk X2VsaWRlZF9ub2RlcykKKwkJCXsKKwkJCQlFeHBsYWluT3Blbkdyb3VwKCJFbGlkZWQgTm9kZXMi LCAiRWxpZGVkIE5vZGVzIiwgZmFsc2UsIGVzKTsKKwkJCQlvcGVuZWRfZWxpZGVkX25vZGVzID0g dHJ1ZTsKKwkJCX0KKworCQkJc3dpdGNoIChuLT5lbGlkZWRfdHlwZSkKKwkJCXsKKwkJCQljYXNl IFRfQXBwZW5kOgorCQkJCQllbGlkZWRub2RldGFnID0gIkFwcGVuZCI7CisJCQkJCWJyZWFrOwor CQkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCQkJZWxpZGVkbm9kZXRhZyA9ICJNZXJnZUFwcGVu ZCI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCQkJCWVsaWRlZG5v ZGV0YWcgPSAiU3VicXVlcnlTY2FuIjsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJ ZWxpZGVkbm9kZXRhZyA9IHBzcHJpbnRmKCIlZCIsIG4tPmVsaWRlZF90eXBlKTsKKwkJCQkJYnJl YWs7CisJCQl9CisKKwkJCUV4cGxhaW5PcGVuR3JvdXAoIkVsaWRlZCBOb2RlIiwgTlVMTCwgdHJ1 ZSwgZXMpOworCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiRWxpZGVkIE5vZGUgVHlwZSIsIGVsaWRl ZG5vZGV0YWcsIGVzKTsKKwkJCW92ZXJleHBsYWluX2JpdG1hcHNldCgiRWxpZGVkIE5vZGUgUlRJ cyIsIG4tPnJlbGlkcywgZXMpOworCQkJRXhwbGFpbkNsb3NlR3JvdXAoIkVsaWRlZCBOb2RlIiwg TlVMTCwgdHJ1ZSwgZXMpOworCQl9CisJCWlmIChvcGVuZWRfZWxpZGVkX25vZGVzKQorCQkJRXhw bGFpbkNsb3NlR3JvdXAoIkVsaWRlZCBOb2RlcyIsICJFbGlkZWQgTm9kZXMiLCBmYWxzZSwgZXMp OwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5l ci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDBlNmIzZjYw ZjMxLi45ZDUyNjI2NTFlNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAt NjE4LDYgKzYxOCw3IEBAIHN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBhcnNlLCBjb25zdCBjaGFy ICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAogCXJlc3VsdC0+cGFyYW1FeGVjVHlw ZXMgPSBnbG9iLT5wYXJhbUV4ZWNUeXBlczsKIAkvKiB1dGlsaXR5U3RtdCBzaG91bGQgYmUgbnVs bCwgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgY29weSBpdCAqLwogCXJlc3VsdC0+dXRpbGl0eVN0bXQg PSBwYXJzZS0+dXRpbGl0eVN0bXQ7CisJcmVzdWx0LT5lbGlkZWROb2RlcyA9IGdsb2ItPmVsaWRl ZE5vZGVzOwogCXJlc3VsdC0+c3RtdF9sb2NhdGlvbiA9IHBhcnNlLT5zdG10X2xvY2F0aW9uOwog CXJlc3VsdC0+c3RtdF9sZW4gPSBwYXJzZS0+c3RtdF9sZW47CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3NldHJlZnMuYwppbmRleCBhZGFiYWUwOWEyMy4uMjNhMDBkNDUyYjcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTIxMSw2ICsyMTEsOSBAQCBzdGF0aWMgTGlzdCAq c2V0X3dpbmRvd2FnZ19ydW5jb25kaXRpb25fcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJCQkJCQkJCSAgIExpc3QgKnJ1bmNvbmRpdGlvbiwKIAkJCQkJCQkJCQkJCSAgIFBsYW4g KnBsYW4pOwogCitzdGF0aWMgdm9pZCByZWNvcmRfZWxpZGVkX25vZGUoUGxhbm5lckdsb2JhbCAq Z2xvYiwgaW50IHBsYW5fbm9kZV9pZCwKKwkJCQkJCQkgICBOb2RlVGFnIGVsaWRlZF90eXBlLCBC aXRtYXBzZXQgKnJlbGlkcyk7CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTQ2 MCwxMCArMTQ2MywxNyBAQCBzZXRfc3VicXVlcnlzY2FuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8g KnJvb3QsCiAKIAlpZiAodHJpdmlhbF9zdWJxdWVyeXNjYW4ocGxhbikpCiAJeworCQlJbmRleAkJ c2NhbnJlbGlkOworCiAJCS8qCiAJCSAqIFdlIGNhbiBvbWl0IHRoZSBTdWJxdWVyeVNjYW4gbm9k ZSBhbmQganVzdCBwdWxsIHVwIHRoZSBzdWJwbGFuLgogCQkgKi8KIAkJcmVzdWx0ID0gY2xlYW5f dXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIHBsYW4sIHBsYW4tPnN1YnBsYW4pOworCisJ CS8qIFJlbWVtYmVyIHRoYXQgd2UgcmVtb3ZlZCBhIFN1YnF1ZXJ5U2NhbiAqLworCQlzY2FucmVs aWQgPSBwbGFuLT5zY2FuLnNjYW5yZWxpZCArIHJ0b2Zmc2V0OworCQlyZWNvcmRfZWxpZGVkX25v ZGUocm9vdC0+Z2xvYiwgcGxhbi0+c3VicGxhbi0+cGxhbl9ub2RlX2lkLAorCQkJCQkJICAgVF9T dWJxdWVyeVNjYW4sIGJtc19tYWtlX3NpbmdsZXRvbihzY2FucmVsaWQpKTsKIAl9CiAJZWxzZQog CXsKQEAgLTE4OTEsNyArMTkwMSwxNyBAQCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lcklu Zm8gKnJvb3QsCiAJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChhcGxhbi0+YXBwZW5k cGxhbnMpOwogCiAJCWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9PSBhcGxhbi0+cGxhbi5wYXJhbGxl bF9hd2FyZSkKLQkJCXJldHVybiBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikg YXBsYW4sIHApOworCQl7CisJCQlQbGFuCSAgICpyZXN1bHQ7CisKKwkJCXJlc3VsdCA9IGNsZWFu X3VwX3JlbW92ZWRfcGxhbl9sZXZlbCgoUGxhbiAqKSBhcGxhbiwgcCk7CisKKwkJCS8qIFJlbWVt YmVyIHRoYXQgd2UgcmVtb3ZlZCBhbiBBcHBlbmQgKi8KKwkJCXJlY29yZF9lbGlkZWRfbm9kZShy b290LT5nbG9iLCBwLT5wbGFuX25vZGVfaWQsIFRfQXBwZW5kLAorCQkJCQkJCSAgIG9mZnNldF9y ZWxpZF9zZXQoYXBsYW4tPmFwcHJlbGlkcywgcnRvZmZzZXQpKTsKKworCQkJcmV0dXJuIHJlc3Vs dDsKKwkJfQogCX0KIAogCS8qCkBAIC0xOTU5LDcgKzE5NzksMTcgQEAgc2V0X21lcmdlYXBwZW5k X3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBs aW5pdGlhbChtcGxhbi0+bWVyZ2VwbGFucyk7CiAKIAkJaWYgKHAtPnBhcmFsbGVsX2F3YXJlID09 IG1wbGFuLT5wbGFuLnBhcmFsbGVsX2F3YXJlKQotCQkJcmV0dXJuIGNsZWFuX3VwX3JlbW92ZWRf cGxhbl9sZXZlbCgoUGxhbiAqKSBtcGxhbiwgcCk7CisJCXsKKwkJCVBsYW4JICAgKnJlc3VsdDsK KworCQkJcmVzdWx0ID0gY2xlYW5fdXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIG1wbGFu LCBwKTsKKworCQkJLyogUmVtZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGEgTWVyZ2VBcHBlbmQgKi8K KwkJCXJlY29yZF9lbGlkZWRfbm9kZShyb290LT5nbG9iLCBwLT5wbGFuX25vZGVfaWQsIFRfTWVy Z2VBcHBlbmQsCisJCQkJCQkJICAgb2Zmc2V0X3JlbGlkX3NldChtcGxhbi0+YXBwcmVsaWRzLCBy dG9mZnNldCkpOworCisJCQlyZXR1cm4gcmVzdWx0OworCQl9CiAJfQogCiAJLyoKQEAgLTM3NzQs MyArMzgwNCwyMSBAQCBleHRyYWN0X3F1ZXJ5X2RlcGVuZGVuY2llc193YWxrZXIoTm9kZSAqbm9k ZSwgUGxhbm5lckluZm8gKmNvbnRleHQpCiAJcmV0dXJuIGV4cHJlc3Npb25fdHJlZV93YWxrZXIo bm9kZSwgZXh0cmFjdF9xdWVyeV9kZXBlbmRlbmNpZXNfd2Fsa2VyLAogCQkJCQkJCQkgIGNvbnRl eHQpOwogfQorCisvKgorICogUmVjb3JkIHNvbWUgZGV0YWlscyBhYm91dCBhIG5vZGUgcmVtb3Zl ZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzCisgKiBwcm9jZXNpbmcsIGZvciB0aGUgYmVu ZWZpdCBvZiBjb2RlIHRyeWluZyB0byByZWNvbnN0cnVjdCBwbGFubmVyIGRlY2lzaW9ucworICog ZnJvbSBleGFtaW5hdGlvbiBvZiB0aGUgZmluYWwgcGxhbiB0cmVlLgorICovCitzdGF0aWMgdm9p ZAorcmVjb3JkX2VsaWRlZF9ub2RlKFBsYW5uZXJHbG9iYWwgKmdsb2IsIGludCBwbGFuX25vZGVf aWQsCisJCQkJICAgTm9kZVRhZyBlbGlkZWRfdHlwZSwgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJ RWxpZGVkTm9kZSAqbiA9IG1ha2VOb2RlKEVsaWRlZE5vZGUpOworCisJbi0+cGxhbl9ub2RlX2lk ID0gcGxhbl9ub2RlX2lkOworCW4tPmVsaWRlZF90eXBlID0gZWxpZGVkX3R5cGU7CisJbi0+cmVs aWRzID0gcmVsaWRzOworCisJZ2xvYi0+ZWxpZGVkTm9kZXMgPSBsYXBwZW5kKGdsb2ItPmVsaWRl ZE5vZGVzLCBuKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o IGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggYTNhODAwODY5ZGYuLmNmM2Ex NmI4YjBlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTU5LDYgKzE1OSw5IEBAIHR5cGVkZWYg c3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiB0eXBlIE9JRHMgZm9yIFBBUkFNX0VYRUMgUGFyYW1z ICovCiAJTGlzdAkgICAqcGFyYW1FeGVjVHlwZXM7CiAKKwkvKiBpbmZvIGFib3V0IG5vZGVzIGVs aWRlZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzIHByb2Nlc3NpbmcgKi8KKwlMaXN0CSAg ICplbGlkZWROb2RlczsKKwogCS8qIGhpZ2hlc3QgUGxhY2VIb2xkZXJWYXIgSUQgYXNzaWduZWQg Ki8KIAlJbmRleAkJbGFzdFBISWQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggMTUyNmRkMmVj NmIuLjVkMDUyMGQ1ZTU4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtMTUyLDYgKzE1Miw5IEBA IHR5cGVkZWYgc3RydWN0IFBsYW5uZWRTdG10CiAJLyogbm9uLW51bGwgaWYgdGhpcyBpcyB1dGls aXR5IHN0bXQgKi8KIAlOb2RlCSAgICp1dGlsaXR5U3RtdDsKIAorCS8qIGluZm8gYWJvdXQgbm9k ZXMgZWxpZGVkIGZyb20gdGhlIHBsYW4gZHVyaW5nIHNldHJlZnMgcHJvY2Vzc2luZyAqLworCUxp c3QJICAgKmVsaWRlZE5vZGVzOworCiAJLyoKIAkgKiBEZWZFbGVtIG9iamVjdHMgYWRkZWQgYnkg ZXh0ZW5zaW9ucywgZS5nLiB1c2luZyBwbGFubmVyX3NodXRkb3duX2hvb2sKIAkgKgpAQCAtMTgz OCw0ICsxODQxLDE4IEBAIHR5cGVkZWYgc3RydWN0IFN1YlBsYW5SVEluZm8KIAlib29sCQlkdW1t eTsKIH0gU3ViUGxhblJUSW5mbzsKIAorLyoKKyAqIEVsaWRlZE5vZGUKKyAqCisgKiBJbmZvcm1h dGlvbiBhYm91dCBub2RlcyBlbGlkZWQgZnJvbSB0aGUgZmluYWwgcGxhbiB0cmVlOiB0cml2aWFs IHN1YnF1ZXJ5CisgKiBzY2FucywgYW5kIHNpbmdsZS1jaGlsZCBBcHBlbmQgYW5kIE1lcmdlQXBw ZW5kIG5vZGVzLgorICovCit0eXBlZGVmIHN0cnVjdCBFbGlkZWROb2RlCit7CisJTm9kZVRhZwkJ dHlwZTsKKwlpbnQJCQlwbGFuX25vZGVfaWQ7CisJTm9kZVRhZwkJZWxpZGVkX3R5cGU7CisJQml0 bWFwc2V0ICAqcmVsaWRzOworfSBFbGlkZWROb2RlOworCiAjZW5kaWYJCQkJCQkJLyogUExBTk5P REVTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOWRhOGFkOTlhMjAuLjZjODJh YTk1MTFlIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNjk4LDYgKzY5OCw3IEBAIEVh Y2hTdGF0ZQogRWRnZQogRWRpdGFibGVPYmplY3RUeXBlCiBFbGVtZW50c1N0YXRlCitFbGlkZWRO b2RlCiBFbmFibGVUaW1lb3V0UGFyYW1zCiBFbmREYXRhUHRyVHlwZQogRW5kRGlyZWN0TW9kaWZ5 X2Z1bmN0aW9uCi0tIAoyLjUxLjAKCg== --0000000000008fa27b0643e0d41b Content-Type: application/octet-stream; name="v4-0004-Temporary-hack-to-unbreak-partitionwise-join-cont.patch" Content-Disposition: attachment; filename="v4-0004-Temporary-hack-to-unbreak-partitionwise-join-cont.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mi4s3jgh3 RnJvbSA3NDRiOTkyOTM5NTVlMGExMzgxMzRkYjIyZGRmNGQzMGVmNjNiMWYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFdlZCwgMjkgT2N0IDIwMjUgMTU6MTc6NDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHY0IDQv Nl0gVGVtcG9yYXJ5IGhhY2sgdG8gdW5icmVhayBwYXJ0aXRpb253aXNlIGpvaW4gY29udHJvbC4K ClJlc2V0dGluZyB0aGUgcGF0aGxpc3QgYW5kIHBhcnRpYWwgcGF0aGxpc3QgdG8gTklMIHdoZW4g dGhlCnRvcG1vc3Qgc2Nhbi9qb2luIHJlbCBpcyBhIHBhcnRpdGlvbmVkIGpvaW5yZWwgaXMgaW5j b3JyZWN0LiBUaGUgaXNzdWUKd2FzIG9yaWdpbmFsbHkgcmVwb3J0ZWQgYnkgQXNodXRvc2ggQmFw YXQgaGVyZToKCmh0dHA6Ly9wb3N0Z3IuZXMvbS9DQUV4SFc1dG96ZTU4K2pMLTQ1NEozdHkxMXNx SnlVMTNTejVySlBRWkRtQVN3WmdXaUFAbWFpbC5nbWFpbC5jb20KCkkgZmFpbGVkIHRvIHVuZGVy c3RhbmQgQXNodXRvc2gncyBleHBsYW5hdGlvbiB1bnRpbCBJIGhpdCB0aGUgcHJvYmxlbQpteXNl bGYsIHNvIGhlcmUncyBteSBhdHRlbXB0IHRvIHJlLWV4cGxhaW4gd2hhdCBoZSBoYWQgc2FpZCwg anVzdCBpbgpjYXNlIHlvdSBmaW5kIG15IGV4cGxhbmF0aW9uIGFueSBjbGVhcmVyOgoKaHR0cDov L3Bvc3Rnci5lcy9tL0NBJTJCVGdtb1p2QkQlMkI1dnlRcnVYQlZYVzc0Rk1nV3hFJTNETzRLNHJD ckN0RUVMV05qLU1MQSU0MG1haWwuZ21haWwuY29tCgpBcyBzdWJzZXF1ZW50IGRpc2N1c3Npb24g b24gdGhhdCB0aHJlYWQgaW5kaWNhdGVzLCBpdCBpcyB1bmNsZWFyCmV4YWN0bHkgd2hhdCB0aGUg cmlnaHQgZml4IGZvciB0aGlzIHByb2JsZW0gaXMsIGFuZCBhdCBsZWFzdCBhcyBvZgp0aGlzIHdy aXRpbmcsIGl0IGlzIGV2ZW4gbW9yZSB1bmNsZWFyIGhvdyB0byBhZGp1c3QgdGhlIHRlc3QgY2Fz ZXMKdGhhdCBicmVhay4gV2hhdCBJJ3ZlIGRvbmUgaGVyZSBpcyBqdXN0IGFjY2VwdCBhbGwgdGhl IGNoYW5nZXMgdG8gdGhlCnJlZ3Jlc3Npb24gdGVzdCBvdXRwdXRzLCB3aGljaCBpcyBhbG1vc3Qg Y2VydGFpbmx5IHRoZSB3cm9uZyBpZGVhLAplc3BlY2lhbGx5IHNpbmNlIEkndmUgYWxzbyBhZGRl ZCBubyBjb21tZW50cy4KClRoaXMgaXMganVzdCBhIHRlbXBvcmFyeSBoYWNrIHRvIG1ha2UgaXQg cG9zc2libGUgdG8gdGVzdCB0aGlzIHBhdGNoCnNldCwgYmVjYXVzZSB3aXRob3V0IHRoaXMsIFBB UlRJVElPTldJU0UoKSBhZHZpY2UgY2FuJ3QgYmUgdXNlZCB0bwpzdXBwcmVzcyBhIHBhcnRpdGlv bndpc2Ugam9pbiwgYmVjYXVzZSBhbGwgb2YgdGhlIGFsdGVybmF0aXZlcyBnZXQKZWxpbWluYXRl ZCByZWdhcmRsZXNzIG9mIGNvc3QuCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm5lci5jICAgICAgICAgfCAgIDQgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0 aW9uX2pvaW4ub3V0IHwgMTcyICsrKysrKysrLS0tLS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dCAgICAgIHwgIDQxICsrLS0tCiAzIGZpbGVzIGNoYW5nZWQs IDkxIGluc2VydGlvbnMoKyksIDEyNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMKaW5kZXggZWI2Mjc5NGFlY2QuLjhiMWFiODQ3ZjM5IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC03OTI3LDcgKzc5MjcsNyBAQCBhcHBseV9zY2Fuam9p bl90YXJnZXRfdG9fcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJICogZ2VuZXJhdGVfdXNlZnVs X2dhdGhlcl9wYXRocyB0byBhZGQgcGF0aChzKSB0byB0aGUgbWFpbiBsaXN0LCBhbmQKIAkgKiBm aW5hbGx5IHphcCB0aGUgcGFydGlhbCBwYXRobGlzdC4KIAkgKi8KLQlpZiAocmVsX2lzX3BhcnRp dGlvbmVkKQorCWlmIChyZWxfaXNfcGFydGl0aW9uZWQgJiYgSVNfU0lNUExFX1JFTChyZWwpKQog CQlyZWwtPnBhdGhsaXN0ID0gTklMOwogCiAJLyoKQEAgLTc5NTMsNyArNzk1Myw3IEBAIGFwcGx5 X3NjYW5qb2luX3RhcmdldF90b19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAl9CiAKIAkvKiBG aW5pc2ggZHJvcHBpbmcgb2xkIHBhdGhzIGZvciBhIHBhcnRpdGlvbmVkIHJlbCwgcGVyIGNvbW1l bnQgYWJvdmUgKi8KLQlpZiAocmVsX2lzX3BhcnRpdGlvbmVkKQorCWlmIChyZWxfaXNfcGFydGl0 aW9uZWQgJiYgSVNfU0lNUExFX1JFTChyZWwpKQogCQlyZWwtPnBhcnRpYWxfcGF0aGxpc3QgPSBO SUw7CiAKIAkvKiBFeHRyYWN0IFNSRi1mcmVlIHNjYW4vam9pbiB0YXJnZXQuICovCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9qb2luLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2pvaW4ub3V0CmluZGV4IDcxMzgyOGJlMzM1 Li4zZTM0ZjA1YmE2MiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0 aXRpb25fam9pbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25f am9pbi5vdXQKQEAgLTY1LDMxICs2NSwyNCBAQCBTRUxFQ1QgdDEuYSwgdDEuYywgdDIuYiwgdDIu YyBGUk9NIHBydDEgdDEsIHBydDIgdDIgV0hFUkUgdDEuYSA9IHQyLmIgQU5EIHQxLmIgPQogLS0g aW5uZXIgam9pbiB3aXRoIHBhcnRpYWxseS1yZWR1bmRhbnQgam9pbiBjbGF1c2VzCiBFWFBMQUlO IChDT1NUUyBPRkYpCiBTRUxFQ1QgdDEuYSwgdDEuYywgdDIuYiwgdDIuYyBGUk9NIHBydDEgdDEs IHBydDIgdDIgV0hFUkUgdDEuYSA9IHQyLmEgQU5EIHQxLmEgPSB0Mi5iIE9SREVSIEJZIHQxLmEs IHQyLmI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFNvcnQKLSAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1l cmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6ICh0MS5hID0gdDIuYSkKICAgIC0+ICBBcHBlbmQKLSAg ICAgICAgIC0+ICBNZXJnZSBKb2luCi0gICAgICAgICAgICAgICBNZXJnZSBDb25kOiAodDFfMS5h ID0gdDJfMS5hKQotICAgICAgICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgaXBydDFfcDFf YSBvbiBwcnQxX3AxIHQxXzEKLSAgICAgICAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAg ICAgICAgICBTb3J0IEtleTogdDJfMS5iCi0gICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHJ0Ml9wMSB0Ml8xCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChh ID0gYikKLSAgICAgICAgIC0+ICBIYXNoIEpvaW4KLSAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHQxXzIuYSA9IHQyXzIuYSkKLSAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQxX3Ay IHQxXzIKLSAgICAgICAgICAgICAgIC0+ICBIYXNoCi0gICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHJ0Ml9wMiB0Ml8yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0 ZXI6IChhID0gYikKLSAgICAgICAgIC0+ICBIYXNoIEpvaW4KLSAgICAgICAgICAgICAgIEhhc2gg Q29uZDogKHQxXzMuYSA9IHQyXzMuYSkKLSAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw cnQxX3AzIHQxXzMKLSAgICAgICAgICAgICAgIC0+ICBIYXNoCi0gICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHJ0Ml9wMyB0Ml8zCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICBGaWx0ZXI6IChhID0gYikKLSgyMiByb3dzKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNp bmcgaXBydDFfcDFfYSBvbiBwcnQxX3AxIHQxXzEKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVz aW5nIGlwcnQxX3AyX2Egb24gcHJ0MV9wMiB0MV8yCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBpcHJ0MV9wM19hIG9uIHBydDFfcDMgdDFfMworICAgLT4gIFNvcnQKKyAgICAgICAgIFNv cnQgS2V5OiB0Mi5iCisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHJ0Ml9wMSB0Ml8xCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChhID0g YikKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQyX3AyIHQyXzIKKyAgICAgICAg ICAgICAgICAgICAgIEZpbHRlcjogKGEgPSBiKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHBydDJfcDMgdDJfMworICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoYSA9IGIpCiso MTUgcm93cykKIAogU0VMRUNUIHQxLmEsIHQxLmMsIHQyLmIsIHQyLmMgRlJPTSBwcnQxIHQxLCBw cnQyIHQyIFdIRVJFIHQxLmEgPSB0Mi5hIEFORCB0MS5hID0gdDIuYiBPUkRFUiBCWSB0MS5hLCB0 Mi5iOwogIGEgIHwgIGMgICB8IGIgIHwgIGMgICAKQEAgLTEyNDksNTYgKzEyNDIsNTAgQEAgU0VU IGVuYWJsZV9oYXNoam9pbiBUTyBvZmY7CiBTRVQgZW5hYmxlX25lc3Rsb29wIFRPIG9mZjsKIEVY UExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCB0MS4qIEZST00gcHJ0MSB0MSBXSEVSRSB0MS5hIElO IChTRUxFQ1QgdDEuYiBGUk9NIHBydDIgdDEgV0hFUkUgdDEuYiBJTiAoU0VMRUNUICh0MS5hICsg dDEuYikvMiBGUk9NIHBydDFfZSB0MSBXSEVSRSB0MS5jID0gMCkpIEFORCB0MS5iID0gMCBPUkRF UiBCWSB0MS5hOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBNZXJnZSBBcHBlbmQKLSAgIFNvcnQg S2V5OiB0MS5hCi0gICAtPiAgTWVyZ2UgU2VtaSBKb2luCi0gICAgICAgICBNZXJnZSBDb25kOiAo dDFfMy5hID0gdDFfNi5iKQotICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgIFNvcnQg S2V5OiB0MV8zLmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9p bgorICAgTWVyZ2UgQ29uZDogKHQxLmEgPSB0MV8xLmIpCisgICAtPiAgU29ydAorICAgICAgICAg U29ydCBLZXk6IHQxLmEKKyAgICAgICAgIC0+ICBBcHBlbmQKICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwcnQxX3AxIHQxXzMKICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGIg PSAwKQotICAgICAgICAgLT4gIE1lcmdlIFNlbWkgSm9pbgotICAgICAgICAgICAgICAgTWVyZ2Ug Q29uZDogKHQxXzYuYiA9ICgoKHQxXzkuYSArIHQxXzkuYikgLyAyKSkpCi0gICAgICAgICAgICAg ICAtPiAgU29ydAotICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQxXzYuYgotICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDJfcDEgdDFfNgotICAgICAgICAgICAg ICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKCh0MV85LmEgKyB0 MV85LmIpIC8gMikpCi0gICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0MV9l X3AxIHQxXzkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGMgPSAwKQotICAg LT4gIE1lcmdlIFNlbWkgSm9pbgotICAgICAgICAgTWVyZ2UgQ29uZDogKHQxXzQuYSA9IHQxXzcu YikKLSAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAgICBTb3J0IEtleTogdDFfNC5hCiAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0MV9wMiB0MV80CiAgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6IChiID0gMCkKLSAgICAgICAgIC0+ICBNZXJnZSBTZW1pIEpvaW4KLSAg ICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICh0MV83LmIgPSAoKCh0MV8xMC5hICsgdDFfMTAuYikg LyAyKSkpCi0gICAgICAgICAgICAgICAtPiAgU29ydAotICAgICAgICAgICAgICAgICAgICAgU29y dCBLZXk6IHQxXzcuYgotICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDJf cDIgdDFfNwotICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgICAgICAgIFNv cnQgS2V5OiAoKCh0MV8xMC5hICsgdDFfMTAuYikgLyAyKSkKLSAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwcnQxX2VfcDIgdDFfMTAKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZpbHRlcjogKGMgPSAwKQotICAgLT4gIE1lcmdlIFNlbWkgSm9pbgotICAgICAgICAgTWVy Z2UgQ29uZDogKHQxXzUuYSA9IHQxXzguYikKLSAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAg ICAgICBTb3J0IEtleTogdDFfNS5hCiAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0 MV9wMyB0MV81CiAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChiID0gMCkKLSAgICAgICAg IC0+ICBNZXJnZSBTZW1pIEpvaW4KLSAgICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICh0MV84LmIg PSAoKCh0MV8xMS5hICsgdDFfMTEuYikgLyAyKSkpCi0gICAgICAgICAgICAgICAtPiAgU29ydAot ICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQxXzguYgotICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHBydDJfcDMgdDFfOAotICAgICAgICAgICAgICAgLT4gIFNvcnQK LSAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKCh0MV8xMS5hICsgdDFfMTEuYikgLyAy KSkKLSAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQxX2VfcDMgdDFfMTEK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGMgPSAwKQotKDQ3IHJvd3MpCisg ICAtPiAgVW5pcXVlCisgICAgICAgICAtPiAgTWVyZ2UgQXBwZW5kCisgICAgICAgICAgICAgICBT b3J0IEtleTogdDFfMS5iCisgICAgICAgICAgICAgICAtPiAgTWVyZ2UgU2VtaSBKb2luCisgICAg ICAgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAodDFfNi5iID0gKCgodDFfOS5hICsgdDFfOS5i KSAvIDIpKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAg ICAgICAgICAgICBTb3J0IEtleTogdDFfNi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHJ0Ml9wMSB0MV82CisgICAgICAgICAgICAgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoKHQxXzkuYSArIHQxXzku YikgLyAyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQx X2VfcDEgdDFfOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoYyA9 IDApCisgICAgICAgICAgICAgICAtPiAgTWVyZ2UgU2VtaSBKb2luCisgICAgICAgICAgICAgICAg ICAgICBNZXJnZSBDb25kOiAodDFfNy5iID0gKCgodDFfMTAuYSArIHQxXzEwLmIpIC8gMikpKQor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IFNvcnQgS2V5OiB0MV83LmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwcnQyX3AyIHQxXzcKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAg ICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogKCgodDFfMTAuYSArIHQxXzEwLmIpIC8gMikp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0MV9lX3AyIHQx XzEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChjID0gMCkKKyAg ICAgICAgICAgICAgIC0+ICBNZXJnZSBTZW1pIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE1l cmdlIENvbmQ6ICh0MV84LmIgPSAoKCh0MV8xMS5hICsgdDFfMTEuYikgLyAyKSkpCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBL ZXk6IHQxXzguYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBy dDJfcDMgdDFfOAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIFNvcnQgS2V5OiAoKCh0MV8xMS5hICsgdDFfMTEuYikgLyAyKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQxX2VfcDMgdDFfMTEKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGMgPSAwKQorKDQxIHJvd3Mp CiAKIFNFTEVDVCB0MS4qIEZST00gcHJ0MSB0MSBXSEVSRSB0MS5hIElOIChTRUxFQ1QgdDEuYiBG Uk9NIHBydDIgdDEgV0hFUkUgdDEuYiBJTiAoU0VMRUNUICh0MS5hICsgdDEuYikvMiBGUk9NIHBy dDFfZSB0MSBXSEVSRSB0MS5jID0gMCkpIEFORCB0MS5iID0gMCBPUkRFUiBCWSB0MS5hOwogICBh ICB8IGIgfCAgYyAgIApAQCAtNDkyMywzMiArNDkxMCwyNyBAQCBBTkFMWVpFIHBsdDNfYWR2Owog LS0gJzAwMDEnIG9mIHRoYXQgcGFydGl0aW9uCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1Qg dDEuYSwgdDEuYywgdDIuYSwgdDIuYywgdDMuYSwgdDMuYyBGUk9NIChwbHQxX2FkdiB0MSBMRUZU IEpPSU4gcGx0Ml9hZHYgdDIgT04gKHQxLmMgPSB0Mi5jKSkgRlVMTCBKT0lOIHBsdDNfYWR2IHQz IE9OICh0MS5jID0gdDMuYykgV0hFUkUgY29hbGVzY2UodDEuYSwgMCkgJSA1ICE9IDMgQU5EIGNv YWxlc2NlKHQxLmEsIDApICUgNSAhPSA0IE9SREVSIEJZIHQxLmMsIHQxLmEsIHQyLmEsIHQzLmE7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBTb3J0CiAgICBTb3J0IEtleTogdDEuYywgdDEu YSwgdDIuYSwgdDMuYQotICAgLT4gIEFwcGVuZAotICAgICAgICAgLT4gIEhhc2ggRnVsbCBKb2lu Ci0gICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8xLmMgPSB0M18xLmMpCi0gICAgICAgICAg ICAgICBGaWx0ZXI6ICgoKENPQUxFU0NFKHQxXzEuYSwgMCkgJSA1KSA8PiAzKSBBTkQgKChDT0FM RVNDRSh0MV8xLmEsIDApICUgNSkgPD4gNCkpCi0gICAgICAgICAgICAgICAtPiAgSGFzaCBMZWZ0 IEpvaW4KLSAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzEuYyA9IHQyXzEuYykK KyAgIC0+ICBIYXNoIEZ1bGwgSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAodDEuYyA9IHQzLmMp CisgICAgICAgICBGaWx0ZXI6ICgoKENPQUxFU0NFKHQxLmEsIDApICUgNSkgPD4gMykgQU5EICgo Q09BTEVTQ0UodDEuYSwgMCkgJSA1KSA8PiA0KSkKKyAgICAgICAgIC0+ICBIYXNoIExlZnQgSm9p bgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEuYyA9IHQyLmMpCisgICAgICAgICAgICAg ICAtPiAgQXBwZW5kCiAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGx0MV9h ZHZfcDEgdDFfMQotICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwbHQyX2Fkdl9wMSB0Ml8xCi0gICAgICAgICAg ICAgICAtPiAgSGFzaAotICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBsdDNf YWR2X3AxIHQzXzEKLSAgICAgICAgIC0+ICBIYXNoIEZ1bGwgSm9pbgotICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDFfMi5jID0gdDNfMi5jKQotICAgICAgICAgICAgICAgRmlsdGVyOiAoKChD T0FMRVNDRSh0MV8yLmEsIDApICUgNSkgPD4gMykgQU5EICgoQ09BTEVTQ0UodDFfMi5hLCAwKSAl IDUpIDw+IDQpKQotICAgICAgICAgICAgICAgLT4gIEhhc2ggTGVmdCBKb2luCi0gICAgICAgICAg ICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8yLmMgPSB0Ml8yLmMpCiAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcGx0MV9hZHZfcDIgdDFfMgotICAgICAgICAgICAgICAgICAg ICAgLT4gIEhhc2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw bHQyX2Fkdl9wMiB0Ml8yCiAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHBsdDJfYWR2X3AxIHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwbHQyX2Fkdl9wMiB0Ml8yCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAg ICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBsdDNf YWR2X3AxIHQzXzEKICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwbHQzX2Fk dl9wMiB0M18yCi0oMjMgcm93cykKKygxOCByb3dzKQogCiBTRUxFQ1QgdDEuYSwgdDEuYywgdDIu YSwgdDIuYywgdDMuYSwgdDMuYyBGUk9NIChwbHQxX2FkdiB0MSBMRUZUIEpPSU4gcGx0Ml9hZHYg dDIgT04gKHQxLmMgPSB0Mi5jKSkgRlVMTCBKT0lOIHBsdDNfYWR2IHQzIE9OICh0MS5jID0gdDMu YykgV0hFUkUgY29hbGVzY2UodDEuYSwgMCkgJSA1ICE9IDMgQU5EIGNvYWxlc2NlKHQxLmEsIDAp ICUgNSAhPSA0IE9SREVSIEJZIHQxLmMsIHQxLmEsIHQyLmEsIHQzLmE7CiAgYSAgfCAgYyAgIHwg YSAgfCAgYyAgIHwgYSAgfCAgYyAgIApAQCAtNTI0MCwxNyArNTIyMiwxNSBAQCBTRUxFQ1QgeC5p ZCwgeS5pZCBGUk9NIGZyYWN0X3QgeCBMRUZUIEpPSU4gZnJhY3RfdCB5IFVTSU5HIChpZCkgT1JE RVIgQlkgeC5pZCBBUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTGltaXQKLSAg IC0+ICBNZXJnZSBBcHBlbmQKLSAgICAgICAgIFNvcnQgS2V5OiB4LmlkCi0gICAgICAgICAtPiAg TWVyZ2UgTGVmdCBKb2luCi0gICAgICAgICAgICAgICBNZXJnZSBDb25kOiAoeF8xLmlkID0geV8x LmlkKQorICAgLT4gIE1lcmdlIExlZnQgSm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKHguaWQg PSB5LmlkKQorICAgICAgICAgLT4gIEFwcGVuZAogICAgICAgICAgICAgICAgLT4gIEluZGV4IE9u bHkgU2NhbiB1c2luZyBmcmFjdF90MF9wa2V5IG9uIGZyYWN0X3QwIHhfMQotICAgICAgICAgICAg ICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBmcmFjdF90MF9wa2V5IG9uIGZyYWN0X3QwIHlf MQotICAgICAgICAgLT4gIE1lcmdlIExlZnQgSm9pbgotICAgICAgICAgICAgICAgTWVyZ2UgQ29u ZDogKHhfMi5pZCA9IHlfMi5pZCkKICAgICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4g dXNpbmcgZnJhY3RfdDFfcGtleSBvbiBmcmFjdF90MSB4XzIKKyAgICAgICAgIC0+ICBBcHBlbmQK KyAgICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgZnJhY3RfdDBfcGtleSBv biBmcmFjdF90MCB5XzEKICAgICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcg ZnJhY3RfdDFfcGtleSBvbiBmcmFjdF90MSB5XzIKLSgxMSByb3dzKQorKDkgcm93cykKIAogRVhQ TEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUIHguaWQsIHkuaWQgRlJPTSBmcmFjdF90IHggTEVGVCBK T0lOIGZyYWN0X3QgeSBVU0lORyAoaWQpIE9SREVSIEJZIHguaWQgREVTQyBMSU1JVCAxMDsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dAppbmRleCBjZjZiMzJkMTE3My4uODU0 OTYwMWUzYmMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0 Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQKQEAgLTg1 MCwxMCArODUwLDExIEBAIHdoZXJlICh0MS5hLCB0Mi5hKSBpbiAoc2VsZWN0IGEsIGEgZnJvbSB1 bmlxdWVfdGJsX3AgdDMpCiBvcmRlciBieSB0MS5hLCB0Mi5hOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSBNZXJnZSBBcHBlbmQKLSAgIFNvcnQgS2V5OiB0MS5hCi0gICAtPiAgTmVzdGVkIExv b3AKLSAgICAgICAgIE91dHB1dDogdDFfMS5hLCB0MV8xLmIsIHQyXzEuYSwgdDJfMS5iCisgTWVy Z2UgSm9pbgorICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0Mi5hLCB0Mi5iCisgICBNZXJnZSBDb25k OiAodDEuYSA9IHQyLmEpCisgICAtPiAgTWVyZ2UgQXBwZW5kCisgICAgICAgICBTb3J0IEtleTog dDEuYQogICAgICAgICAgLT4gIE5lc3RlZCBMb29wCiAgICAgICAgICAgICAgICBPdXRwdXQ6IHQx XzEuYSwgdDFfMS5iLCB0M18xLmEKICAgICAgICAgICAgICAgIC0+ICBVbmlxdWUKQEAgLTg2Mywx NSArODY0LDYgQEAgb3JkZXIgYnkgdDEuYSwgdDIuYTsKICAgICAgICAgICAgICAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIHVuaXF1ZV90YmxfcDFfYV9pZHggb24gcHVibGljLnVuaXF1ZV90YmxfcDEg dDFfMQogICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLmEsIHQxXzEuYgogICAgICAg ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHQxXzEuYSA9IHQzXzEuYSkKLSAgICAgICAgIC0+ ICBNZW1vaXplCi0gICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEuYSwgdDJfMS5iCi0gICAgICAg ICAgICAgICBDYWNoZSBLZXk6IHQxXzEuYQotICAgICAgICAgICAgICAgQ2FjaGUgTW9kZTogbG9n aWNhbAotICAgICAgICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdW5pcXVlX3RibF9wMV9h X2lkeCBvbiBwdWJsaWMudW5pcXVlX3RibF9wMSB0Ml8xCi0gICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzEuYSwgdDJfMS5iCi0gICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAo dDJfMS5hID0gdDFfMS5hKQotICAgLT4gIE5lc3RlZCBMb29wCi0gICAgICAgICBPdXRwdXQ6IHQx XzIuYSwgdDFfMi5iLCB0Ml8yLmEsIHQyXzIuYgogICAgICAgICAgLT4gIE5lc3RlZCBMb29wCiAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIuYSwgdDFfMi5iLCB0M18yLmEKICAgICAgICAgICAg ICAgIC0+ICBVbmlxdWUKQEAgLTg4MSwxNSArODczLDYgQEAgb3JkZXIgYnkgdDEuYSwgdDIuYTsK ICAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHVuaXF1ZV90YmxfcDJfYV9pZHgg b24gcHVibGljLnVuaXF1ZV90YmxfcDIgdDFfMgogICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0MV8yLmEsIHQxXzIuYgogICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHQxXzIu YSA9IHQzXzIuYSkKLSAgICAgICAgIC0+ICBNZW1vaXplCi0gICAgICAgICAgICAgICBPdXRwdXQ6 IHQyXzIuYSwgdDJfMi5iCi0gICAgICAgICAgICAgICBDYWNoZSBLZXk6IHQxXzIuYQotICAgICAg ICAgICAgICAgQ2FjaGUgTW9kZTogbG9naWNhbAotICAgICAgICAgICAgICAgLT4gIEluZGV4IFNj YW4gdXNpbmcgdW5pcXVlX3RibF9wMl9hX2lkeCBvbiBwdWJsaWMudW5pcXVlX3RibF9wMiB0Ml8y Ci0gICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIuYSwgdDJfMi5iCi0gICAgICAgICAg ICAgICAgICAgICBJbmRleCBDb25kOiAodDJfMi5hID0gdDFfMi5hKQotICAgLT4gIE5lc3RlZCBM b29wCi0gICAgICAgICBPdXRwdXQ6IHQxXzMuYSwgdDFfMy5iLCB0Ml8zLmEsIHQyXzMuYgogICAg ICAgICAgLT4gIE5lc3RlZCBMb29wCiAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMuYSwgdDFf My5iLCB0M18zLmEKICAgICAgICAgICAgICAgIC0+ICBVbmlxdWUKQEAgLTkwMiwxNCArODg1LDE2 IEBAIG9yZGVyIGJ5IHQxLmEsIHQyLmE7CiAgICAgICAgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyB1bmlxdWVfdGJsX3AzX2FfaWR4IG9uIHB1YmxpYy51bmlxdWVfdGJsX3AzIHQxXzMKICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy5hLCB0MV8zLmIKICAgICAgICAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6ICh0MV8zLmEgPSB0M18zLmEpCi0gICAgICAgICAtPiAgTWVtb2l6 ZQotICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLmEsIHQyXzMuYgotICAgICAgICAgICAgICAg Q2FjaGUgS2V5OiB0MV8zLmEKLSAgICAgICAgICAgICAgIENhY2hlIE1vZGU6IGxvZ2ljYWwKKyAg IC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgT3V0cHV0OiB0Mi5hLCB0Mi5iCisgICAgICAgICAt PiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyB1bmlxdWVfdGJs X3AxX2FfaWR4IG9uIHB1YmxpYy51bmlxdWVfdGJsX3AxIHQyXzEKKyAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMS5hLCB0Ml8xLmIKKyAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIHVuaXF1ZV90YmxfcDJfYV9pZHggb24gcHVibGljLnVuaXF1ZV90YmxfcDIgdDJfMgor ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLmEsIHQyXzIuYgogICAgICAgICAgICAg ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdW5pcXVlX3RibF9wM19hX2lkeCBvbiBwdWJsaWMudW5p cXVlX3RibF9wMyB0Ml8zCiAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMuYSwgdDJf My5iCi0gICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodDJfMy5hID0gdDFfMy5hKQot KDU5IHJvd3MpCisoNDQgcm93cykKIAogcmVzZXQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbjsK IGRyb3AgdGFibGUgdW5pcXVlX3RibF9wOwotLSAKMi41MS4wCgo= --0000000000008fa27b0643e0d41b Content-Type: application/octet-stream; name="v4-0005-Allow-for-plugin-control-over-path-generation-str.patch" Content-Disposition: attachment; filename="v4-0005-Allow-for-plugin-control-over-path-generation-str.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mi4s3jgi4 RnJvbSA0ZmNmNTEyODg2YjZkMGQwZGM2M2MyMzBlZjA1NWEyODAxNTg1N2U2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgMjQgT2N0IDIwMjUgMTU6MTE6NDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHY0IDUv Nl0gQWxsb3cgZm9yIHBsdWdpbiBjb250cm9sIG92ZXIgcGF0aCBnZW5lcmF0aW9uCiBzdHJhdGVn aWVzLgoKRWFjaCBSZWxPcHRJbmZvIG5vdyBoYXMgYSBwZ3NfbWFzayBtZW1iZXIgd2hpY2ggaXMg YSBtYXNrIG9mIGFjY2VwdGFibGUKc3RyYXRlZ2llcy4gRm9yIG1vc3QgcmVscywgdGhpcyBpcyBw b3B1bGF0ZWQgZnJvbSBQbGFubmVyR2xvYmFsJ3MKZGVmYXVsdF9wZ3NfbWFzaywgd2hpY2ggaXMg Y29tcHV0ZWQgZnJvbSB0aGUgdmFsdWVzIG9mIHRoZSBlbmFibGVfKgpHVUNzIGF0IHRoZSBzdGFy dCBvZiBwbGFubmluZy4KCkZvciBiYXNlcmVscywgZ2V0X3JlbGF0aW9uX2luZm9faG9vayBjYW4g YmUgdXNlZCB0byBhZGp1c3QgcGdzX21hc2sgZm9yCmVhY2ggbmV3IFJlbE9wdEluZm8sIGF0IGxl YXN0IGZvciByZWxzIG9mIHR5cGUgUlRFX1JFTEFUSU9OLiBBZGp1c3RpbmcKcGdzX21hc2sgaXMg bGVzcyB1c2VmdWwgZm9yIG90aGVyIHR5cGVzIG9mIHJlbHMsIGJ1dCBpZiBpdCBwcm92ZXMgdG8K YmUgbmVjZXNzYXJ5LCB3ZSBjYW4gcmV2aXNpdCB0aGUgd2F5IHRoaXMgaG9vayB3b3JrcyBvciBh ZGQgYSBuZXcgb25lLgoKRm9yIGpvaW5yZWxzLCB0d28gbmV3IGhvb2tzIGFyZSBhZGRlZC4gam9p bnJlbF9zZXR1cF9ob29rIGlzIGNhbGxlZCBlYWNoCnRpbWUgYSBqb2lucmVsIGlzIGNyZWF0ZWQs IGFuZCBvbmUgdGhpbmcgdGhhdCBjYW4gYmUgZG9uZSBmcm9tIHRoYXQgaG9vawppcyB0byBtYW5p cHVsYXRlIHBnc19tYXNrIGZvciB0aGUgbmV3IGpvaW5yZWwuIGpvaW5fcGF0aF9zZXR1cF9ob29r IGlzCmNhbGxlZCBlYWNoIHRpbWUgd2UncmUgYWJvdXQgdG8gYWRkIHBhdGhzIHRvIGEgam9pbnJl bCBieSBjb25zaWRlcmluZwpzb21lIHBhcnRpY3VsYXIgY29tYmluYXRpb24gb2YgYW4gb3V0ZXIg cmVsLCBhbiBpbm5lciByZWwsIGFuZCBhIGpvaW4KdHlwZS4gSXQgY2FuIG1vZGlmeSB0aGUgcGdz X21hc2sgcHJvcGFnYXRlZCBpbnRvIEpvaW5QYXRoRXh0cmFEYXRhIHRvCnJlc3RyaWN0IHN0cmF0 ZWd5IGNob2ljZSBmb3IgdGhhdCBwYXJpY3VsYXIgY29tYmluYXRpb24gb2YgcmVscy4KClRvIG1h a2Ugam9pbnJlbF9zZXR1cF9ob29rIHdvcmsgYXMgaW50ZW5kZWQsIHRoZSBleGlzdGluZyBjYWxs cyB0bwpidWlsZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvIGFyZSBtb3ZlZCBsYXRlciBpbiB0aGUg Y2FsbGluZyBmdW5jdGlvbnM7CnRoaXMgaXMgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIGNoZWNrcyB3 aGV0aGVyIHRoZSByZWwncyBwZ3NfbWFzayBpbmNsdWRlcwpQR1NfQ09OU0lERVJfUEFSVElUSU9O V0lTRSwgc28gd2Ugd2FudCBpdCB0byBvbmx5IGJlIGNhbGxlZCBhZnRlcgpwbHVnaW5zIGhhdmUg aGFkIGEgY2hhbmNlIHRvIGFsdGVyIHBnc19tYXNrLgoKVXBwZXIgcmVscyBjdXJyZW50bHkgaW5o ZXJpdCBwZ3NfbWFzayBmcm9tIHRoZSBpbnB1dCByZWxhdGlvbi4gSXQncwp1bmNsZWFyIHRoYXQg dGhpcyBpcyB0aGUgbW9zdCB1c2VmdWwgYmVoYXZpb3IsIGJ1dCBhdCB0aGUgbW9tZW50IHRoZXJl CmFyZSBubyBob29rcyB0byBhbGxvdyB0aGUgbWFzayB0byBiZSBzZXQgaW4gYW55IG90aGVyIHdh eS4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgICB8IDIyMiArKysrKysrKysr KysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgICB8 ICAgNCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYyAgIHwgIDg4ICsr KysrKystLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3RpZHBhdGguYyAgICB8ICAgNyAr LQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIHwgICA0ICstCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgfCAgNTQgKysrKysrCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jICAgfCAgMTkgKy0KIHNyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BsYW5jYXQuYyAgICB8ICAgMyArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9yZWxub2RlLmMgICAgfCAgNDMgKysrKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oICAgICAgICAgICB8ICA4MiArKysrKysrKy0KIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0 LmggICAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgg ICAgICAgIHwgIDExICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCAgICAgICAgICAg fCAgIDkgKy0KIDE0IGZpbGVzIGNoYW5nZWQsIDQ1NCBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCA5MjhiOGQ4NGFk OC4uOGU5ZGRlM2QxOTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Fs bHBhdGhzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAt OTU0LDcgKzk1NCw3IEBAIHNldF90YWJsZXNhbXBsZV9yZWxfcGF0aGxpc3QoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgUmFuZ2VUYmxFbnRyeSAqCiAJCSBibXNfbWVtYmVyc2hp cChyb290LT5hbGxfcXVlcnlfcmVscykgIT0gQk1TX1NJTkdMRVRPTikgJiYKIAkJIShHZXRUc21S b3V0aW5lKHJ0ZS0+dGFibGVzYW1wbGUtPnRzbWhhbmRsZXIpLT5yZXBlYXRhYmxlX2Fjcm9zc19z Y2FucykpCiAJewotCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX21hdGVyaWFsX3BhdGgocmVsLCBw YXRoKTsKKwkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKHJlbCwgcGF0aCwg dHJ1ZSk7CiAJfQogCiAJYWRkX3BhdGgocmVsLCBwYXRoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jCmluZGV4IDgzMzVjZjViNWM1Li42ZTQ3YzlmNTg5MyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0yNzUsNiArMjc1LDcgQEAgY29zdF9zZXFzY2Fu KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCWRvdWJsZQkJc3BjX3NlcV9wYWdlX2Nv c3Q7CiAJUXVhbENvc3QJcXBxdWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKKwl1aW50 NjQJCWVuYWJsZV9tYXNrID0gUEdTX1NFUVNDQU47CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBs aWVkIHRvIGJhc2UgcmVsYXRpb25zICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBA IC0zMjcsOCArMzI4LDExIEBAIGNvc3Rfc2Vxc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAq cm9vdCwKIAkJICovCiAJCXBhdGgtPnJvd3MgPSBjbGFtcF9yb3dfZXN0KHBhdGgtPnJvd3MgLyBw YXJhbGxlbF9kaXZpc29yKTsKIAl9CisJZWxzZQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lE RVJfTk9OUEFSVElBTDsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gZW5hYmxlX3NlcXNjYW4g PyAwIDogMTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAm IGVuYWJsZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCXBhdGgtPnN0YXJ0dXBfY29z dCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgY3B1 X3J1bl9jb3N0ICsgZGlza19ydW5fY29zdDsKIH0KQEAgLTM1NCw2ICszNTgsNyBAQCBjb3N0X3Nh bXBsZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJc3BjX3BhZ2VfY29z dDsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2 NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNl IHJlbGF0aW9ucyB3aXRoIHRhYmxlc2FtcGxlIGNsYXVzZXMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+ cmVsaWQgPiAwKTsKQEAgLTQwMSw3ICs0MDYsMTEgQEAgY29zdF9zYW1wbGVzY2FuKFBhdGggKnBh dGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0 LT5jb3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5wZXJf dHVwbGUgKiBwYXRoLT5yb3dzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSAwOworCWlmIChw YXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURF Ul9OT05QQVJUSUFMOworCisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdz X21hc2sgJiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlwYXRoLT5zdGFy dHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29z dCArIHJ1bl9jb3N0OwogfQpAQCAtNDQwLDcgKzQ0OSw4IEBAIGNvc3RfZ2F0aGVyKEdhdGhlclBh dGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXJhbGxlbF9z ZXR1cF9jb3N0OwogCXJ1bl9jb3N0ICs9IHBhcmFsbGVsX3R1cGxlX2Nvc3QgKiBwYXRoLT5wYXRo LnJvd3M7CiAKLQlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gcGF0aC0+c3VicGF0aC0+ZGlz YWJsZWRfbm9kZXM7CisJcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHBhdGgtPnN1YnBhdGgt PmRpc2FibGVkX25vZGVzCisJCSsgKChyZWwtPnBnc19tYXNrICYgUEdTX0dBVEhFUikgIT0gMCA/ IDAgOiAxKTsKIAlwYXRoLT5wYXRoLnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRo LT5wYXRoLnRvdGFsX2Nvc3QgPSAoc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3QpOwogfQpAQCAtNTA2 LDggKzUxNiw4IEBAIGNvc3RfZ2F0aGVyX21lcmdlKEdhdGhlck1lcmdlUGF0aCAqcGF0aCwgUGxh bm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhcmFsbGVsX3NldHVwX2Nvc3Q7CiAJ cnVuX2Nvc3QgKz0gcGFyYWxsZWxfdHVwbGVfY29zdCAqIHBhdGgtPnBhdGgucm93cyAqIDEuMDU7 CiAKLQlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9kZXMKLQkJ KyAoZW5hYmxlX2dhdGhlcm1lcmdlID8gMCA6IDEpOworCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9k ZXMgPSBwYXRoLT5zdWJwYXRoLT5kaXNhYmxlZF9ub2RlcworCQkrICgocmVsLT5wZ3NfbWFzayAm IFBHU19HQVRIRVJfTUVSR0UpICE9IDAgPyAwIDogMSk7CiAJcGF0aC0+cGF0aC5zdGFydHVwX2Nv c3QgPSBzdGFydHVwX2Nvc3QgKyBpbnB1dF9zdGFydHVwX2Nvc3Q7CiAJcGF0aC0+cGF0aC50b3Rh bF9jb3N0ID0gKHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0ICsgaW5wdXRfdG90YWxfY29zdCk7CiB9 CkBAIC01NTcsNiArNTY3LDcgQEAgY29zdF9pbmRleChJbmRleFBhdGggKnBhdGgsIFBsYW5uZXJJ bmZvICpyb290LCBkb3VibGUgbG9vcF9jb3VudCwKIAlkb3VibGUJCXBhZ2VzX2ZldGNoZWQ7CiAJ ZG91YmxlCQlyYW5kX2hlYXBfcGFnZXM7CiAJZG91YmxlCQlpbmRleF9wYWdlczsKKwl1aW50NjQJ CWVuYWJsZV9tYXNrOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0 aW9ucyAqLwogCUFzc2VydChJc0EoYmFzZXJlbCwgUmVsT3B0SW5mbykgJiYKQEAgLTU4OCw4ICs1 OTksMTEgQEAgY29zdF9pbmRleChJbmRleFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LCBk b3VibGUgbG9vcF9jb3VudCwKIAkJCQkJCQkJCQkJICBwYXRoLT5pbmRleGNsYXVzZXMpOwogCX0K IAotCS8qIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZW5hYmxlX2luZGV4b25seXNjYW47IGluZHhw YXRoLmMgZG9lcyB0aGF0ICovCi0JcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IGVuYWJsZV9p bmRleHNjYW4gPyAwIDogMTsKKwkvKiBpcyB0aGlzIHNjYW4gdHlwZSBkaXNhYmxlZD8gKi8KKwll bmFibGVfbWFzayA9IChpbmRleG9ubHkgPyBQR1NfSU5ERVhPTkxZU0NBTiA6IFBHU19JTkRFWFND QU4pCisJCXwgKHBhdGgtPnBhdGgucGFyYWxsZWxfd29ya2VycyA9PSAwID8gUEdTX0NPTlNJREVS X05PTlBBUlRJQUwgOiAwKTsKKwlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2Vy ZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAKIAkv KgogCSAqIENhbGwgaW5kZXgtYWNjZXNzLW1ldGhvZC1zcGVjaWZpYyBjb2RlIHRvIGVzdGltYXRl IHRoZSBwcm9jZXNzaW5nIGNvc3QKQEAgLTEwMTAsNiArMTAyNCw3IEBAIGNvc3RfYml0bWFwX2hl YXBfc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqYmFzZXJl bCwKIAlkb3VibGUJCXNwY19zZXFfcGFnZV9jb3N0LAogCQkJCXNwY19yYW5kb21fcGFnZV9jb3N0 OwogCWRvdWJsZQkJVDsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gUEdTX0JJVE1BUFNDQU47CiAK IAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zICovCiAJQXNzZXJ0 KElzQShiYXNlcmVsLCBSZWxPcHRJbmZvKSk7CkBAIC0xMDc1LDYgKzEwOTAsOCBAQCBjb3N0X2Jp dG1hcF9oZWFwX3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KmJhc2VyZWwsCiAKIAkJcGF0aC0+cm93cyA9IGNsYW1wX3Jvd19lc3QocGF0aC0+cm93cyAvIHBh cmFsbGVsX2Rpdmlzb3IpOwogCX0KKwllbHNlCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURF Ul9OT05QQVJUSUFMOwogCiAKIAlydW5fY29zdCArPSBjcHVfcnVuX2Nvc3Q7CkBAIC0xMDgzLDcg KzExMDAsOCBAQCBjb3N0X2JpdG1hcF9oZWFwX3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKmJhc2VyZWwsCiAJc3RhcnR1cF9jb3N0ICs9IHBhdGgtPnBhdGh0 YXJnZXQtPmNvc3Quc3RhcnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0 LnBlcl90dXBsZSAqIHBhdGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGVuYWJs ZV9iaXRtYXBzY2FuID8gMCA6IDE7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJl bC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlwYXRo LT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0 dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMTI0MCw2ICsxMjU4LDcgQEAgY29zdF90aWRzY2Fu KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCWRvdWJsZQkJbnR1cGxlczsKIAlMaXN0 Q2VsbCAgICpsOwogCWRvdWJsZQkJc3BjX3JhbmRvbV9wYWdlX2Nvc3Q7CisJdWludDY0CQllbmFi bGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRp b25zICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBAIC0xMjYxLDEwICsxMjgwLDEw IEBAIGNvc3RfdGlkc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCQkvKgog CQkgKiBXZSBtdXN0IHVzZSBhIFRJRCBzY2FuIGZvciBDdXJyZW50T2ZFeHByOyBpbiBhbnkgb3Ro ZXIgY2FzZSwgd2UKLQkJICogc2hvdWxkIGJlIGdlbmVyYXRpbmcgYSBUSUQgc2NhbiBvbmx5IGlm IGVuYWJsZV90aWRzY2FuPXRydWUuIEFsc28sCi0JCSAqIGlmIEN1cnJlbnRPZkV4cHIgaXMgdGhl IHF1YWwsIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZS4KKwkJICogc2hvdWxkIGJlIGdlbmVyYXRp bmcgYSBUSUQgc2NhbiBvbmx5IGlmIFRJRCBzY2FucyBhcmUgYWxsb3dlZC4KKwkJICogQWxzbywg aWYgQ3VycmVudE9mRXhwciBpcyB0aGUgcXVhbCwgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lLgog CQkgKi8KLQkJQXNzZXJ0KGVuYWJsZV90aWRzY2FuIHx8IElzQShxdWFsLCBDdXJyZW50T2ZFeHBy KSk7CisJCUFzc2VydCgoYmFzZXJlbC0+cGdzX21hc2sgJiBQR1NfVElEU0NBTikgIT0gMCB8fCBJ c0EocXVhbCwgQ3VycmVudE9mRXhwcikpOwogCQlBc3NlcnQobGlzdF9sZW5ndGgodGlkcXVhbHMp ID09IDEgfHwgIUlzQShxdWFsLCBDdXJyZW50T2ZFeHByKSk7CiAKIAkJaWYgKElzQShxdWFsLCBT Y2FsYXJBcnJheU9wRXhwcikpCkBAIC0xMzE2LDEwICsxMzM1LDE0IEBAIGNvc3RfdGlkc2NhbihQ YXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCS8qCiAJICogVGhlcmUgYXJlIGFzc2Vy dGlvbnMgYWJvdmUgdmVyaWZ5aW5nIHRoYXQgd2Ugb25seSByZWFjaCB0aGlzIGZ1bmN0aW9uCi0J ICogZWl0aGVyIHdoZW4gZW5hYmxlX3RpZHNjYW49dHJ1ZSBvciB3aGVuIHRoZSBUSUQgc2NhbiBp cyB0aGUgb25seSBsZWdhbAotCSAqIHBhdGgsIHNvIGl0J3Mgc2FmZSB0byBzZXQgZGlzYWJsZWRf bm9kZXMgdG8gemVybyBoZXJlLgorCSAqIGVpdGhlciB3aGVuIGJhc2VyZWwtPnBnc19tYXNrIGlu Y2x1ZGVzIFBHU19USURTQ0FOIG9yIHdoZW4gdGhlIFRJRCBzY2FuCisJICogaXMgdGhlIG9ubHkg bGVnYWwgcGF0aCwgc28gd2Ugb25seSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBlZmZlY3RzIG9mCisJ ICogUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaGVyZS4KIAkgKi8KLQlwYXRoLT5kaXNhYmxlZF9u b2RlcyA9IDA7CisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21h c2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQor CQkoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDog MDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29z dCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMTM0OSw2ICsxMzcyLDcgQEAgY29z dF90aWRyYW5nZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJZG91YmxlCQlu c2VxcGFnZXM7CiAJZG91YmxlCQlzcGNfcmFuZG9tX3BhZ2VfY29zdDsKIAlkb3VibGUJCXNwY19z ZXFfcGFnZV9jb3N0OworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfVElEU0NBTjsKIAogCS8q IFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQoYmFz ZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTE0MTIsOCArMTQzNiwxNSBAQCBjb3N0X3RpZHJhbmdlc2Nh bihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+ cGF0aHRhcmdldC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQt PmNvc3QucGVyX3R1cGxlICogcGF0aC0+cm93czsKIAotCS8qIHdlIHNob3VsZCBub3QgZ2VuZXJh dGUgdGhpcyBwYXRoIHR5cGUgd2hlbiBlbmFibGVfdGlkc2Nhbj1mYWxzZSAqLwotCUFzc2VydChl bmFibGVfdGlkc2Nhbik7CisJLyoKKwkgKiBXZSBzaG91bGQgbm90IGdlbmVyYXRlIHRoaXMgcGF0 aCB0eXBlIHdoZW4gUEdTX1RJRFNDQU4gaXMgdW5zZXQsIGJ1dCB3ZQorCSAqIG1pZ2h0IG5lZWQg dG8gZGlzYWJsZSB0aGlzIHBhdGggZHVlIHRvIFBHU19DT05TSURFUl9OT05QQVJUSUFMLgorCSAq LworCUFzc2VydCgoYmFzZXJlbC0+cGdzX21hc2sgJiBQR1NfVElEU0NBTikgIT0gMCk7CisJaWYg KHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJ REVSX05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdz X21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsKIAlwYXRoLT5kaXNh YmxlZF9ub2RlcyA9IDA7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBh dGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKQEAgLTE0MzcsNiArMTQ2 OCw3IEBAIGNvc3Rfc3VicXVlcnlzY2FuKFN1YnF1ZXJ5U2NhblBhdGggKnBhdGgsIFBsYW5uZXJJ bmZvICpyb290LAogCUxpc3QJICAgKnFwcXVhbHM7CiAJUXVhbENvc3QJcXBxdWFsX2Nvc3Q7CiAJ Q29zdAkJY3B1X3Blcl90dXBsZTsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFNo b3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgdGhhdCBhcmUgc3VicXVlcmll cyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTQ2Nyw3ICsxNDk5LDEwIEBA IGNvc3Rfc3VicXVlcnlzY2FuKFN1YnF1ZXJ5U2NhblBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpy b290LAogCSAqIFN1YnF1ZXJ5U2NhbiBub2RlLCBwbHVzIGNwdV90dXBsZV9jb3N0IHRvIGFjY291 bnQgZm9yIHNlbGVjdGlvbiBhbmQKIAkgKiBwcm9qZWN0aW9uIG92ZXJoZWFkLgogCSAqLwotCXBh dGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBwYXRoLT5zdWJwYXRoLT5kaXNhYmxlZF9ub2RlczsK KwlpZiAocGF0aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9 IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBw YXRoLT5zdWJwYXRoLT5kaXNhYmxlZF9ub2RlcworCQkrICgoKGJhc2VyZWwtPnBnc19tYXNrICYg ZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrKSA/IDEgOiAwKTsKIAlwYXRoLT5wYXRoLnN0YXJ0 dXBfY29zdCA9IHBhdGgtPnN1YnBhdGgtPnN0YXJ0dXBfY29zdDsKIAlwYXRoLT5wYXRoLnRvdGFs X2Nvc3QgPSBwYXRoLT5zdWJwYXRoLT50b3RhbF9jb3N0OwogCkBAIC0xNTE4LDYgKzE1NTMsNyBA QCBjb3N0X2Z1bmN0aW9uc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlDb3N0 CQljcHVfcGVyX3R1cGxlOwogCVJhbmdlVGJsRW50cnkgKnJ0ZTsKIAlRdWFsQ29zdAlleHByY29z dDsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxp ZWQgdG8gYmFzZSByZWxhdGlvbnMgdGhhdCBhcmUgZnVuY3Rpb25zICovCiAJQXNzZXJ0KGJhc2Vy ZWwtPnJlbGlkID4gMCk7CkBAIC0xNTU4LDcgKzE1OTQsMTAgQEAgY29zdF9mdW5jdGlvbnNjYW4o UGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhdGgtPnBh dGh0YXJnZXQtPmNvc3Quc3RhcnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5j b3N0LnBlcl90dXBsZSAqIHBhdGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7 CisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdT X0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJl bC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsKIAlwYXRo LT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0 dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMTU4MCw2ICsxNjE5LDcgQEAgY29zdF90YWJsZWZ1 bmNzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJCWNwdV9wZXJfdHVw bGU7CiAJUmFuZ2VUYmxFbnRyeSAqcnRlOwogCVF1YWxDb3N0CWV4cHJjb3N0OworCXVpbnQ2NAkJ ZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJl bGF0aW9ucyB0aGF0IGFyZSBmdW5jdGlvbnMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAw KTsKQEAgLTE2MTUsNyArMTY1NSwxMCBAQCBjb3N0X3RhYmxlZnVuY3NjYW4oUGF0aCAqcGF0aCwg UGxhbm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNv c3Quc3RhcnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0LnBlcl90dXBs ZSAqIHBhdGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CisJaWYgKHBhdGgt PnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05P TlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21hc2sg JiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsKIAlwYXRoLT5zdGFydHVwX2Nv c3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIHJ1 bl9jb3N0OwogfQpAQCAtMTYzNSw2ICsxNjc4LDcgQEAgY29zdF92YWx1ZXNzY2FuKFBhdGggKnBh dGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJCXJ1bl9jb3N0ID0gMDsKIAlRdWFsQ29zdAlx cHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2NAkJZW5hYmxlX21hc2sg PSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0aW9ucyB0aGF0 IGFyZSB2YWx1ZXMgbGlzdHMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTE2 NjMsNyArMTcwNywxMCBAQCBjb3N0X3ZhbHVlc3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3Quc3RhcnR1cDsK IAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0LnBlcl90dXBsZSAqIHBhdGgtPnJv d3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CisJaWYgKHBhdGgtPnBhcmFsbGVsX3dv cmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJ cGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFz aykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVw X2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwogfQpA QCAtMTY4Niw2ICsxNzMzLDcgQEAgY29zdF9jdGVzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZv ICpyb290LAogCUNvc3QJCXJ1bl9jb3N0ID0gMDsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlD b3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hv dWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0aW9ucyB0aGF0IGFyZSBDVEVzICovCiAJ QXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBAIC0xNzExLDcgKzE3NTksMTAgQEAgY29zdF9j dGVzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBw YXRoLT5wYXRodGFyZ2V0LT5jb3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+cGF0aHRh cmdldC0+Y29zdC5wZXJfdHVwbGUgKiBwYXRoLT5yb3dzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9k ZXMgPSAwOworCWlmIChwYXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNr IHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJ KGJhc2VyZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8gMSA6IDA7 CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3Qg PSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKIH0KQEAgLTE3MjgsNiArMTc3OSw3IEBAIGNvc3Rf bmFtZWR0dXBsZXN0b3Jlc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlDb3N0 CQlydW5fY29zdCA9IDA7CiAJUXVhbENvc3QJcXBxdWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Blcl90 dXBsZTsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFw cGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgdGhhdCBhcmUgVHVwbGVzdG9yZXMgKi8KIAlBc3NlcnQo YmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTE3NDksNyArMTgwMSwxMCBAQCBjb3N0X25hbWVkdHVw bGVzdG9yZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJY3B1X3Blcl90dXBs ZSArPSBjcHVfdHVwbGVfY29zdCArIHFwcXVhbF9jb3N0LnBlcl90dXBsZTsKIAlydW5fY29zdCAr PSBjcHVfcGVyX3R1cGxlICogYmFzZXJlbC0+dHVwbGVzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9k ZXMgPSAwOworCWlmIChwYXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNr IHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJ KGJhc2VyZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8gMSA6IDA7 CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3Qg PSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKIH0KQEAgLTE3NjYsNiArMTgyMSw3IEBAIGNvc3Rf cmVzdWx0c2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlDb3N0CQlydW5fY29z dCA9IDA7CiAJUXVhbENvc3QJcXBxdWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKKwl1 aW50NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8g UlRFX1JFU1VMVCBiYXNlIHJlbGF0aW9ucyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDAp OwpAQCAtMTc4NCw3ICsxODQwLDEwIEBAIGNvc3RfcmVzdWx0c2NhbihQYXRoICpwYXRoLCBQbGFu bmVySW5mbyAqcm9vdCwKIAljcHVfcGVyX3R1cGxlID0gY3B1X3R1cGxlX2Nvc3QgKyBxcHF1YWxf Y29zdC5wZXJfdHVwbGU7CiAJcnVuX2Nvc3QgKz0gY3B1X3Blcl90dXBsZSAqIGJhc2VyZWwtPnR1 cGxlczsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxf d29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsK KwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9t YXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0 dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9 CkBAIC0xODAyLDYgKzE4NjEsNyBAQCBjb3N0X3JlY3Vyc2l2ZV91bmlvbihQYXRoICpydW5pb24s IFBhdGggKm5ydGVybSwgUGF0aCAqcnRlcm0pCiAJQ29zdAkJc3RhcnR1cF9jb3N0OwogCUNvc3QJ CXRvdGFsX2Nvc3Q7CiAJZG91YmxlCQl0b3RhbF9yb3dzOworCXVpbnQ2NAkJZW5hYmxlX21hc2sg PSAwOwogCiAJLyogV2UgcHJvYmFibHkgaGF2ZSBkZWNlbnQgZXN0aW1hdGVzIGZvciB0aGUgbm9u LXJlY3Vyc2l2ZSB0ZXJtICovCiAJc3RhcnR1cF9jb3N0ID0gbnJ0ZXJtLT5zdGFydHVwX2Nvc3Q7 CkBAIC0xODI0LDcgKzE4ODQsMTAgQEAgY29zdF9yZWN1cnNpdmVfdW5pb24oUGF0aCAqcnVuaW9u LCBQYXRoICpucnRlcm0sIFBhdGggKnJ0ZXJtKQogCSAqLwogCXRvdGFsX2Nvc3QgKz0gY3B1X3R1 cGxlX2Nvc3QgKiB0b3RhbF9yb3dzOwogCi0JcnVuaW9uLT5kaXNhYmxlZF9ub2RlcyA9IG5ydGVy bS0+ZGlzYWJsZWRfbm9kZXMgKyBydGVybS0+ZGlzYWJsZWRfbm9kZXM7CisJaWYgKHJ1bmlvbi0+ cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9O UEFSVElBTDsKKwlydW5pb24tPmRpc2FibGVkX25vZGVzID0KKwkJKHJ1bmlvbi0+cGFyZW50LT5w Z3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXJ1bmlvbi0+ c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXJ1bmlvbi0+dG90YWxfY29zdCA9IHRvdGFs X2Nvc3Q7CiAJcnVuaW9uLT5yb3dzID0gdG90YWxfcm93czsKQEAgLTIwOTQsNyArMjE1NywxMSBA QCBjb3N0X2luY3JlbWVudGFsX3NvcnQoUGF0aCAqcGF0aCwKIAogCXBhdGgtPnJvd3MgPSBpbnB1 dF90dXBsZXM7CiAKLQkvKiBzaG91bGQgbm90IGdlbmVyYXRlIHRoZXNlIHBhdGhzIHdoZW4gZW5h YmxlX2luY3JlbWVudGFsX3NvcnQ9ZmFsc2UgKi8KKwkvKgorCSAqIFdlIHNob3VsZCBub3QgZ2Vu ZXJhdGUgdGhlc2UgcGF0aHMgd2hlbiBlbmFibGVfaW5jcmVtZW50YWxfc29ydD1mYWxzZS4KKwkg KiBXZSBjYW4gaWdub3JlIFBHU19DT05TSURFUl9OT05QQVJUSUFMIGhlcmUsIGJlY2F1c2UgaWYg aXQncyByZWxldmFudCwKKwkgKiBpdCB3aWxsIGhhdmUgYWxyZWFkeSBhZmZlY3RlZCB0aGUgaW5w dXQgcGF0aC4KKwkgKi8KIAlBc3NlcnQoZW5hYmxlX2luY3JlbWVudGFsX3NvcnQpOwogCXBhdGgt PmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9kZXM7CiAKQEAgLTIxMzIsNiArMjE5 OSwxMCBAQCBjb3N0X3NvcnQoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAKIAlzdGFy dHVwX2Nvc3QgKz0gaW5wdXRfY29zdDsKIAorCS8qCisJICogV2UgY2FuIGlnbm9yZSBQR1NfQ09O U0lERVJfTk9OUEFSVElBTCBoZXJlLCBiZWNhdXNlIGlmIGl0J3MgcmVsZXZhbnQsCisJICogaXQg d2lsbCBoYXZlIGFscmVhZHkgYWZmZWN0ZWQgdGhlIGlucHV0IHBhdGguCisJICovCiAJcGF0aC0+ cm93cyA9IHR1cGxlczsKIAlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlucHV0X2Rpc2FibGVkX25v ZGVzICsgKGVuYWJsZV9zb3J0ID8gMCA6IDEpOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0 dXBfY29zdDsKQEAgLTIyMjMsOSArMjI5NCwxNSBAQCBhcHBlbmRfbm9ucGFydGlhbF9jb3N0KExp c3QgKnN1YnBhdGhzLCBpbnQgbnVtcGF0aHMsIGludCBwYXJhbGxlbF93b3JrZXJzKQogdm9pZAog Y29zdF9hcHBlbmQoQXBwZW5kUGF0aCAqYXBhdGgsIFBsYW5uZXJJbmZvICpyb290KQogeworCVJl bE9wdEluZm8gKnJlbCA9IGFwYXRoLT5wYXRoLnBhcmVudDsKIAlMaXN0Q2VsbCAgICpsOworCXVp bnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfQVBQRU5EOworCisJaWYgKGFwYXRoLT5wYXRoLnBhcmFs bGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJ QUw7CiAKLQlhcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IDA7CisJYXBhdGgtPnBhdGguZGlz YWJsZWRfbm9kZXMgPQorCQkocmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSA9PSBlbmFibGVf bWFzayA/IDAgOiAxOwogCWFwYXRoLT5wYXRoLnN0YXJ0dXBfY29zdCA9IDA7CiAJYXBhdGgtPnBh dGgudG90YWxfY29zdCA9IDA7CiAJYXBhdGgtPnBhdGgucm93cyA9IDA7CkBAIC0yNDM1LDExICsy NTEyLDE2IEBAIGNvc3RfbWVyZ2VfYXBwZW5kKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290 LAogCQkJCSAgQ29zdCBpbnB1dF9zdGFydHVwX2Nvc3QsIENvc3QgaW5wdXRfdG90YWxfY29zdCwK IAkJCQkgIGRvdWJsZSB0dXBsZXMpCiB7CisJUmVsT3B0SW5mbyAqcmVsID0gcGF0aC0+cGFyZW50 OwogCUNvc3QJCXN0YXJ0dXBfY29zdCA9IDA7CiAJQ29zdAkJcnVuX2Nvc3QgPSAwOwogCUNvc3QJ CWNvbXBhcmlzb25fY29zdDsKIAlkb3VibGUJCU47CiAJZG91YmxlCQlsb2dOOworCXVpbnQ2NAkJ ZW5hYmxlX21hc2sgPSBQR1NfTUVSR0VfQVBQRU5EOworCisJaWYgKHBhdGgtPnBhcmFsbGVsX3dv cmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CiAK IAkvKgogCSAqIEF2b2lkIGxvZygwKS4uLgpAQCAtMjQ2Miw3ICsyNTQ0LDkgQEAgY29zdF9tZXJn ZV9hcHBlbmQoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJICovCiAJcnVuX2Nvc3Qg Kz0gY3B1X3R1cGxlX2Nvc3QgKiBBUFBFTkRfQ1BVX0NPU1RfTVVMVElQTElFUiAqIHR1cGxlczsK IAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9kZXM7CisJcGF0aC0+ ZGlzYWJsZWRfbm9kZXMgPQorCQkocmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSA9PSBlbmFi bGVfbWFzayA/IDAgOiAxOworCXBhdGgtPmRpc2FibGVkX25vZGVzICs9IGlucHV0X2Rpc2FibGVk X25vZGVzOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdCArIGlucHV0X3N0YXJ0 dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3QgKyBp bnB1dF90b3RhbF9jb3N0OwogfQpAQCAtMjQ4MSw3ICsyNTY1LDcgQEAgY29zdF9tZXJnZV9hcHBl bmQoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAgKi8KIHZvaWQKIGNvc3RfbWF0ZXJp YWwoUGF0aCAqcGF0aCwKLQkJCSAgaW50IGlucHV0X2Rpc2FibGVkX25vZGVzLAorCQkJICBib29s IGVuYWJsZWQsIGludCBpbnB1dF9kaXNhYmxlZF9ub2RlcywKIAkJCSAgQ29zdCBpbnB1dF9zdGFy dHVwX2Nvc3QsIENvc3QgaW5wdXRfdG90YWxfY29zdCwKIAkJCSAgZG91YmxlIHR1cGxlcywgaW50 IHdpZHRoKQogewpAQCAtMjQ5MCw2ICsyNTc0LDExIEBAIGNvc3RfbWF0ZXJpYWwoUGF0aCAqcGF0 aCwKIAlkb3VibGUJCW5ieXRlcyA9IHJlbGF0aW9uX2J5dGVfc2l6ZSh0dXBsZXMsIHdpZHRoKTsK IAlkb3VibGUJCXdvcmtfbWVtX2J5dGVzID0gd29ya19tZW0gKiAoU2l6ZSkgMTAyNDsKIAorCWlm IChwYXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDAgJiYKKwkJcGF0aC0+cGFyZW50ICE9IE5VTEwg JiYKKwkJKHBhdGgtPnBhcmVudC0+cGdzX21hc2sgJiBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCkg PT0gMCkKKwkJZW5hYmxlZCA9IGZhbHNlOworCiAJcGF0aC0+cm93cyA9IHR1cGxlczsKIAogCS8q CkBAIC0yNTE5LDcgKzI2MDgsNyBAQCBjb3N0X21hdGVyaWFsKFBhdGggKnBhdGgsCiAJCXJ1bl9j b3N0ICs9IHNlcV9wYWdlX2Nvc3QgKiBucGFnZXM7CiAJfQogCi0JcGF0aC0+ZGlzYWJsZWRfbm9k ZXMgPSBpbnB1dF9kaXNhYmxlZF9ub2RlcyArIChlbmFibGVfbWF0ZXJpYWwgPyAwIDogMSk7CisJ cGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSBpbnB1dF9kaXNhYmxlZF9ub2RlcyArIChlbmFibGVkID8g MCA6IDEpOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3Rh bF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0zMjcxLDcgKzMzNjAsNyBA QCBjb3N0X2dyb3VwKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogICovCiB2b2lkCiBp bml0aWFsX2Nvc3RfbmVzdGxvb3AoUGxhbm5lckluZm8gKnJvb3QsIEpvaW5Db3N0V29ya3NwYWNl ICp3b3Jrc3BhY2UsCi0JCQkJCSAgSm9pblR5cGUgam9pbnR5cGUsCisJCQkJCSAgSm9pblR5cGUg am9pbnR5cGUsIHVpbnQ2NCBlbmFibGVfbWFzaywKIAkJCQkJICBQYXRoICpvdXRlcl9wYXRoLCBQ YXRoICppbm5lcl9wYXRoLAogCQkJCQkgIEpvaW5QYXRoRXh0cmFEYXRhICpleHRyYSkKIHsKQEAg LTMyODUsNyArMzM3NCw3IEBAIGluaXRpYWxfY29zdF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9v dCwgSm9pbkNvc3RXb3Jrc3BhY2UgKndvcmtzcGFjZSwKIAlDb3N0CQlpbm5lcl9yZXNjYW5fcnVu X2Nvc3Q7CiAKIAkvKiBDb3VudCB1cCBkaXNhYmxlZCBub2Rlcy4gKi8KLQlkaXNhYmxlZF9ub2Rl cyA9IGVuYWJsZV9uZXN0bG9vcCA/IDAgOiAxOworCWRpc2FibGVkX25vZGVzID0gKGV4dHJhLT5w Z3NfbWFzayAmIGVuYWJsZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCWRpc2FibGVk X25vZGVzICs9IGlubmVyX3BhdGgtPmRpc2FibGVkX25vZGVzOwogCWRpc2FibGVkX25vZGVzICs9 IG91dGVyX3BhdGgtPmRpc2FibGVkX25vZGVzOwogCkBAIC0zNjg1LDcgKzM3NzQsMTkgQEAgaW5p dGlhbF9jb3N0X21lcmdlam9pbihQbGFubmVySW5mbyAqcm9vdCwgSm9pbkNvc3RXb3Jrc3BhY2Ug KndvcmtzcGFjZSwKIAlBc3NlcnQob3V0ZXJzdGFydHNlbCA8PSBvdXRlcmVuZHNlbCk7CiAJQXNz ZXJ0KGlubmVyc3RhcnRzZWwgPD0gaW5uZXJlbmRzZWwpOwogCi0JZGlzYWJsZWRfbm9kZXMgPSBl bmFibGVfbWVyZ2Vqb2luID8gMCA6IDE7CisJLyoKKwkgKiBXZSBkb24ndCBkZWNpZGUgd2hldGhl ciB0byBtYXRlcmlhbGl6ZSB0aGUgaW5uZXIgcGF0aCB1bnRpbCB3ZSBnZXQgdG8KKwkgKiBmaW5h bF9jb3N0X21lcmdlam9pbigpLCBzbyB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdG8gY2hlY2sgdGhl IHBnc19tYXNrCisJICogYWdhaW4gUEdTX01FUkdFSk9JTl9QTEFJTiBvciBQR1NfTUVSR0VKT0lO X01BVEVSSUFMSVpFLiBJbnN0ZWFkLCB3ZQorCSAqIGp1c3QgYWNjb3VudCBmb3IgYW55IGNoaWxk IG5vZGVzIGhlcmUgYW5kIGFzc3VtZSB0aGF0IHRoaXMgbm9kZSBpcyBub3QKKwkgKiBpdHNsZWYg ZGlzYWJsZWQ7IHdlIGNhbiBzb3J0IG91dCB0aGUgZGV0YWlscyBpbiBmaW5hbF9jb3N0X21lcmdl am9pbigpLgorCSAqCisJICogKFdlIGNvdWxkIGJlIG1vcmUgcHJlY2lzZSBoZXJlIGJ5IHNldHRp bmcgZGlzYWJsZWRfbm9kZXMgdG8gMSBhdCB0aGlzCisJICogc3RhZ2UgaWYgYm90aCBQR1NfTUVS R0VKT0lOX1BMQUlOIGFuZCBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFIGFyZQorCSAqIGRpc2Fi bGVkLCBidXQgdGhhdCBzZWVtcyB0byBhZ2FpbnN0IHRoZSBpZGVhIG9mIG1ha2luZyB0aGlzIGZ1 bmN0aW9uCisJICogcHJvZHVjZSBhIHF1aWNrLCBvcHRpbWlzdGljIGFwcHJveGltYXRpb24gb2Yg dGhlIGZpbmFsIGNvc3QuKQorCSAqLworCWRpc2FibGVkX25vZGVzID0gMDsKIAogCS8qIGNvc3Qg b2Ygc291cmNlIGRhdGEgKi8KIApAQCAtMzg2NCw5ICszOTY1LDcgQEAgZmluYWxfY29zdF9tZXJn ZWpvaW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlUGF0aCAqcGF0aCwKIAlkb3VibGUJCW1lcmdl am9pbnR1cGxlcywKIAkJCQlyZXNjYW5uZWR0dXBsZXM7CiAJZG91YmxlCQlyZXNjYW5yYXRpbzsK LQotCS8qIFNldCB0aGUgbnVtYmVyIG9mIGRpc2FibGVkIG5vZGVzLiAqLwotCXBhdGgtPmpwYXRo LnBhdGguZGlzYWJsZWRfbm9kZXMgPSB3b3Jrc3BhY2UtPmRpc2FibGVkX25vZGVzOworCXVpbnQ2 NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogUHJvdGVjdCBzb21lIGFzc3VtcHRpb25zIGJlbG93 IHRoYXQgcm93Y291bnRzIGFyZW4ndCB6ZXJvICovCiAJaWYgKGlubmVyX3BhdGhfcm93cyA8PSAw KQpAQCAtMzk5NiwxNiArNDA5NSwyMCBAQCBmaW5hbF9jb3N0X21lcmdlam9pbihQbGFubmVySW5m byAqcm9vdCwgTWVyZ2VQYXRoICpwYXRoLAogCQlwYXRoLT5tYXRlcmlhbGl6ZV9pbm5lciA9IGZh bHNlOwogCiAJLyoKLQkgKiBQcmVmZXIgbWF0ZXJpYWxpemluZyBpZiBpdCBsb29rcyBjaGVhcGVy LCB1bmxlc3MgdGhlIHVzZXIgaGFzIGFza2VkIHRvCi0JICogc3VwcHJlc3MgbWF0ZXJpYWxpemF0 aW9uLgorCSAqIElmIG1lcmdlIGpvaW5zIHdpdGggbWF0ZXJpYWxpemF0aW9uIGFyZSBlbmFibGVk LCB0aGVuIGNob29zZQorCSAqIG1hdGVyaWFsaXphdGlvbiBpZiBlaXRoZXIgKGEpIGl0IGxvb2tz IGNoZWFwZXIgb3IgKGIpIG1lcmdlIGpvaW5zCisJICogd2l0aG91dCBtYXRlcmlhbGl6YXRpb24g YXJlIGRpc2FibGVkLgogCSAqLwotCWVsc2UgaWYgKGVuYWJsZV9tYXRlcmlhbCAmJiBtYXRfaW5u ZXJfY29zdCA8IGJhcmVfaW5uZXJfY29zdCkKKwllbHNlIGlmICgoZXh0cmEtPnBnc19tYXNrICYg UEdTX01FUkdFSk9JTl9NQVRFUklBTElaRSkgIT0gMCAmJgorCQkJIChtYXRfaW5uZXJfY29zdCA8 IGJhcmVfaW5uZXJfY29zdCB8fAorCQkJICAoZXh0cmEtPnBnc19tYXNrICYgUEdTX01FUkdFSk9J Tl9QTEFJTikgPT0gMCkpCiAJCXBhdGgtPm1hdGVyaWFsaXplX2lubmVyID0gdHJ1ZTsKIAogCS8q Ci0JICogRXZlbiBpZiBtYXRlcmlhbGl6aW5nIGRvZXNuJ3QgbG9vayBjaGVhcGVyLCB3ZSAqbXVz dCogZG8gaXQgaWYgdGhlCi0JICogaW5uZXIgcGF0aCBpcyB0byBiZSB1c2VkIGRpcmVjdGx5ICh3 aXRob3V0IHNvcnRpbmcpIGFuZCBpdCBkb2Vzbid0Ci0JICogc3VwcG9ydCBtYXJrL3Jlc3RvcmUu CisJICogUmVnYXJkbGVzcyBvZiB3aGF0IHBsYW4gc2hhcGVzIGFyZSBlbmFibGVkIGFuZCB3aGF0 IHRoZSBjb3N0cyBzZWVtIHRvCisJICogYmUsIHdlICptdXN0KiBtYXRlcmlhbGl6ZSBpdCBpZiB0 aGUgaW5uZXIgcGF0aCBpcyB0byBiZSB1c2VkIGRpcmVjdGx5CisJICogKHdpdGhvdXQgc29ydGlu ZykgYW5kIGl0IGRvZXNuJ3Qgc3VwcG9ydCBtYXJrL3Jlc3RvcmUuIFBsYW5uZXIgZmFpbHVyZQor CSAqIGlzIG5vdCBhbiBvcHRpb24hCiAJICoKIAkgKiBTaW5jZSB0aGUgaW5uZXIgc2lkZSBtdXN0 IGJlIG9yZGVyZWQsIGFuZCBvbmx5IFNvcnRzIGFuZCBJbmRleFNjYW5zIGNhbgogCSAqIGNyZWF0 ZSBvcmRlciB0byBiZWdpbiB3aXRoLCBhbmQgdGhleSBib3RoIHN1cHBvcnQgbWFyay9yZXN0b3Jl LCB5b3UKQEAgLTQwMTMsMTAgKzQxMTYsNiBAQCBmaW5hbF9jb3N0X21lcmdlam9pbihQbGFubmVy SW5mbyAqcm9vdCwgTWVyZ2VQYXRoICpwYXRoLAogCSAqIG1lcmdlIGpvaW5zIGNhbiAqcHJlc2Vy dmUqIHRoZSBvcmRlciBvZiB0aGVpciBpbnB1dHMsIHNvIHRoZXkgY2FuIGJlCiAJICogc2VsZWN0 ZWQgYXMgdGhlIGlucHV0IG9mIGEgbWVyZ2Vqb2luLCBhbmQgdGhleSBkb24ndCBzdXBwb3J0CiAJ ICogbWFyay9yZXN0b3JlIGF0IHByZXNlbnQuCi0JICoKLQkgKiBXZSBkb24ndCB0ZXN0IHRoZSB2 YWx1ZSBvZiBlbmFibGVfbWF0ZXJpYWwgaGVyZSwgYmVjYXVzZQotCSAqIG1hdGVyaWFsaXphdGlv biBpcyByZXF1aXJlZCBmb3IgY29ycmVjdG5lc3MgaW4gdGhpcyBjYXNlLCBhbmQgdHVybmluZwot CSAqIGl0IG9mZiBkb2VzIG5vdCBlbnRpdGxlIHVzIHRvIGRlbGl2ZXIgYW4gaW52YWxpZCBwbGFu LgogCSAqLwogCWVsc2UgaWYgKGlubmVyc29ydGtleXMgPT0gTklMICYmCiAJCQkgIUV4ZWNTdXBw b3J0c01hcmtSZXN0b3JlKGlubmVyX3BhdGgpKQpAQCAtNDAzMCwxMCArNDEyOSwxMSBAQCBmaW5h bF9jb3N0X21lcmdlam9pbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VQYXRoICpwYXRoLAogCSAq IHRob3VnaC4KIAkgKgogCSAqIFNpbmNlIG1hdGVyaWFsaXphdGlvbiBpcyBhIHBlcmZvcm1hbmNl IG9wdGltaXphdGlvbiBpbiB0aGlzIGNhc2UsCi0JICogcmF0aGVyIHRoYW4gbmVjZXNzYXJ5IGZv ciBjb3JyZWN0bmVzcywgd2Ugc2tpcCBpdCBpZiBlbmFibGVfbWF0ZXJpYWwgaXMKLQkgKiBvZmYu CisJICogcmF0aGVyIHRoYW4gbmVjZXNzYXJ5IGZvciBjb3JyZWN0bmVzcywgd2Ugc2tpcCBpdCBp ZiBtYXRlcmlhbGl6YXRpb24gaXMKKwkgKiBzd2l0Y2hlZCBvZmYuCiAJICovCi0JZWxzZSBpZiAo ZW5hYmxlX21hdGVyaWFsICYmIGlubmVyc29ydGtleXMgIT0gTklMICYmCisJZWxzZSBpZiAoKGV4 dHJhLT5wZ3NfbWFzayAmIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkUpICE9IDAgJiYKKwkJCSBp bm5lcnNvcnRrZXlzICE9IE5JTCAmJgogCQkJIHJlbGF0aW9uX2J5dGVfc2l6ZShpbm5lcl9wYXRo X3Jvd3MsCiAJCQkJCQkJCWlubmVyX3BhdGgtPnBhdGh0YXJnZXQtPndpZHRoKSA+CiAJCQkgd29y a19tZW0gKiAoU2l6ZSkgMTAyNCkKQEAgLTQwNDEsMTEgKzQxNDEsMjkgQEAgZmluYWxfY29zdF9t ZXJnZWpvaW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlUGF0aCAqcGF0aCwKIAllbHNlCiAJCXBh dGgtPm1hdGVyaWFsaXplX2lubmVyID0gZmFsc2U7CiAKLQkvKiBDaGFyZ2UgdGhlIHJpZ2h0IGlu Y3JlbWVudGFsIGNvc3QgZm9yIHRoZSBjaG9zZW4gY2FzZSAqLworCS8qIEdldCB0aGUgbnVtYmVy IG9mIGRpc2FibGVkIG5vZGVzLCBub3QgeWV0IGluY2x1ZGluZyB0aGlzIG9uZS4gKi8KKwlwYXRo LT5qcGF0aC5wYXRoLmRpc2FibGVkX25vZGVzID0gd29ya3NwYWNlLT5kaXNhYmxlZF9ub2RlczsK KworCS8qCisJICogQ2hhcmdlIHRoZSByaWdodCBpbmNyZW1lbnRhbCBjb3N0IGZvciB0aGUgY2hv c2VuIGNhc2UsIGFuZCB1cGRhdGUKKwkgKiBlbmFibGVfbWFzayBhcyBhcHByb3ByaWF0ZS4KKwkg Ki8KIAlpZiAocGF0aC0+bWF0ZXJpYWxpemVfaW5uZXIpCisJewogCQlydW5fY29zdCArPSBtYXRf aW5uZXJfY29zdDsKKwkJZW5hYmxlX21hc2sgfD0gUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRTsK Kwl9CiAJZWxzZQorCXsKIAkJcnVuX2Nvc3QgKz0gYmFyZV9pbm5lcl9jb3N0OworCQllbmFibGVf bWFzayB8PSBQR1NfTUVSR0VKT0lOX1BMQUlOOworCX0KKworCS8qIEluY3JlbWVudGFsIGNvdW50 IG9mIGRpc2FibGVkIG5vZGVzIGlmIHRoaXMgbm9kZSBpcyBkaXNhYmxlZC4gKi8KKwlpZiAocGF0 aC0+anBhdGgucGF0aC5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBH U19DT05TSURFUl9OT05QQVJUSUFMOworCWlmICgoZXh0cmEtPnBnc19tYXNrICYgZW5hYmxlX21h c2spICE9IGVuYWJsZV9tYXNrKQorCQkrK3BhdGgtPmpwYXRoLnBhdGguZGlzYWJsZWRfbm9kZXM7 CiAKIAkvKiBDUFUgY29zdHMgKi8KIApAQCAtNDE4Myw5ICs0MzAxLDEzIEBAIGluaXRpYWxfY29z dF9oYXNoam9pbihQbGFubmVySW5mbyAqcm9vdCwgSm9pbkNvc3RXb3Jrc3BhY2UgKndvcmtzcGFj ZSwKIAlpbnQJCQludW1iYXRjaGVzOwogCWludAkJCW51bV9za2V3X21jdnM7CiAJc2l6ZV90CQlz cGFjZV9hbGxvd2VkOwkvKiB1bnVzZWQgKi8KKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gUEdTX0hB U0hKT0lOOworCisJaWYgKG91dGVyX3BhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5h YmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CiAKIAkvKiBDb3VudCB1cCBkaXNh YmxlZCBub2Rlcy4gKi8KLQlkaXNhYmxlZF9ub2RlcyA9IGVuYWJsZV9oYXNoam9pbiA/IDAgOiAx OworCWRpc2FibGVkX25vZGVzID0gKGV4dHJhLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSA9PSBl bmFibGVfbWFzayA/IDAgOiAxOwogCWRpc2FibGVkX25vZGVzICs9IGlubmVyX3BhdGgtPmRpc2Fi bGVkX25vZGVzOwogCWRpc2FibGVkX25vZGVzICs9IG91dGVyX3BhdGgtPmRpc2FibGVkX25vZGVz OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwppbmRleCBjNjJlM2Y4NzcyNC4u MjY5NzlkNzFlMGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhw YXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwpAQCAtMjIz Myw4ICsyMjMzLDggQEAgY2hlY2tfaW5kZXhfb25seShSZWxPcHRJbmZvICpyZWwsIEluZGV4T3B0 SW5mbyAqaW5kZXgpCiAJTGlzdENlbGwgICAqbGM7CiAJaW50CQkJaTsKIAotCS8qIEluZGV4LW9u bHkgc2NhbnMgbXVzdCBiZSBlbmFibGVkICovCi0JaWYgKCFlbmFibGVfaW5kZXhvbmx5c2NhbikK KwkvKiBJZiB3ZSdyZSBub3QgYWxsb3dlZCB0byBjb25zaWRlciBpbmRleC1vbmx5IHNjYW5zLCBn aXZlIHVwIG5vdyAqLworCWlmICgocmVsLT5wZ3NfbWFzayAmIFBHU19DT05TSURFUl9JTkRFWE9O TFkpID09IDApCiAJCXJldHVybiBmYWxzZTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv am9pbnBhdGguYwppbmRleCBlYTViNjQxNTE4Ni4uMzg4ZDg0NTZmZjYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvam9pbnBhdGguYwpAQCAtMjksOCArMjksOSBAQAogI2luY2x1ZGUgInV0aWxz L2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgiCiAKLS8qIEhvb2sgZm9y IHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgaW4gYWRkX3BhdGhzX3RvX2pvaW5yZWwoKSAqLworLyog SG9va3MgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgaW4gYWRkX3BhdGhzX3RvX2pvaW5yZWwo KSAqLwogc2V0X2pvaW5fcGF0aGxpc3RfaG9va190eXBlIHNldF9qb2luX3BhdGhsaXN0X2hvb2sg PSBOVUxMOworam9pbl9wYXRoX3NldHVwX2hvb2tfdHlwZSBqb2luX3BhdGhfc2V0dXBfaG9vayA9 IE5VTEw7CiAKIC8qCiAgKiBQYXRocyBwYXJhbWV0ZXJpemVkIGJ5IGEgcGFyZW50IHJlbCBjYW4g YmUgY29uc2lkZXJlZCB0byBiZSBwYXJhbWV0ZXJpemVkCkBAIC0xNTEsNiArMTUyLDcgQEAgYWRk X3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJZXh0cmEubWVyZ2VjbGF1c2Vf bGlzdCA9IE5JTDsKIAlleHRyYS5zamluZm8gPSBzamluZm87CiAJZXh0cmEucGFyYW1fc291cmNl X3JlbHMgPSBOVUxMOworCWV4dHJhLnBnc19tYXNrID0gam9pbnJlbC0+cGdzX21hc2s7CiAKIAkv KgogCSAqIFNlZSBpZiB0aGUgaW5uZXIgcmVsYXRpb24gaXMgcHJvdmFibHkgdW5pcXVlIGZvciB0 aGlzIG91dGVyIHJlbC4KQEAgLTIwNywxMyArMjA5LDM4IEBAIGFkZF9wYXRoc190b19qb2lucmVs KFBsYW5uZXJJbmZvICpyb290LAogCWlmIChqb2ludHlwZSA9PSBKT0lOX1VOSVFVRV9PVVRFUiB8 fCBqb2ludHlwZSA9PSBKT0lOX1VOSVFVRV9JTk5FUikKIAkJam9pbnR5cGUgPSBKT0lOX0lOTkVS OwogCisJLyoKKwkgKiBHaXZlIGV4dGVuc2lvbnMgYSBjaGFuY2UgdG8gdGFrZSBjb250cm9sLiBJ biBwYXJ0aWN1bGFyLCBhbiBleHRlbnNpb24KKwkgKiBtaWdodCB3YW50IHRvIG1vZGlmeSBleHRy YS5wZ3NfbWFzay4gSXQncyBwb3NzaWJsZSB0byBvdmVycmlkZSBwZ3NfbWFzaworCSAqIG9uIGEg cXVlcnktd2lkZSBiYXNpcyB1c2luZyBqb2luX3NlYXJjaF9ob29rLCBvciBmb3IgYSBwYXJ0aWN1 bGFyCisJICogcmVsYXRpb24gdXNpbmcgam9pbnJlbF9zZXR1cF9ob29rLCBidXQgZXh0ZW5zaW9u cyB0aGF0IHdhbnQgdG8gcHJvdmlkZQorCSAqIGRpZmZlcmVudCBhZHZpY2UgZm9yIHRoZSBzYW1l IGpvaW5yZWwgYmFzZWQgb24gdGhlIGNob2ljZSBvZiBpbm5lcnJlbAorCSAqIGFuZCBvdXRlcnJl bCB3aWxsIG5lZWQgdG8gdXNlIHRoaXMgaG9vay4KKwkgKgorCSAqIEEgdmVyeSBzaW1wbGUgd2F5 IGZvciBhbiBleHRlbnNpb24gdG8gdXNlIHRoaXMgaG9vayBpcyB0byBzZXQKKwkgKiBleHRyYS5w Z3NfbWFzayA9IDAsIGlmIGl0IHNpbXBseSBkb2Vzbid0IHdhbnQgYW55IG9mIHRoZSBwYXRocwor CSAqIGdlbmVyYXRlZCBieSB0aGlzIGNhbGwgdG8gYWRkX3BhdGhzX3RvX2pvaW5yZWwoKSB0byBi ZSBzZWxlY3RlZC4gQW4KKwkgKiBleHRlbnNpb24gY291bGQgdXNlIHRoaXMgdGVjaG5pcXVlIHRv IGNvbnN0cmFpbiB0aGUgam9pbiBvcmRlciwgc2luY2UKKwkgKiBpdCBjb3VsZCB0aGVyZWJ5IGFy cmFuZ2UgdG8gcmVqZWN0IGFsbCBwYXRocyBmcm9tIGpvaW4gb3JkZXJzIHRoYXQgaXQKKwkgKiBk b2VzIG5vdCBsaWtlLiBBbiBleHRlbnNpb24gY2FuIGFsc28gc2VsZWN0aXZlbHkgY2xlYXIgYml0 cyBmcm9tCisJICogZXh0cmEucGdzX21hc2sgdG8gcnVsZSBvdXQgc3BlY2lmaWMgdGVjaG5pcXVl cyBmb3Igc3BlY2lmaWMgam9pbnMsIG9yCisJICogZXZlbiByZXBsYWNlIHRoZSBtYXNrIGVudGly ZWx5LgorCSAqCisJICogTkI6IEJlbG93IHRoaXMgcG9pbnQsIHRoaXMgZnVuY3Rpb24gc2hvdWxk IGJlIGNhcmVmdWwgdG8gcmVmZXJlbmNlCisJICogZXh0cmEucGdzX21hc2sgcmF0aGVyIHRoYW4g cmVsLT5wZ3NfbWFzayB0byBhdm9pZCBkaXNyZWdhcmRpbmcgYW55CisJICogY2hhbmdlcyBtYWRl IGJ5IHRoZSBob29rIHdlJ3JlIGFib3V0IHRvIGNhbGwuCisJICovCisJaWYgKGpvaW5fcGF0aF9z ZXR1cF9ob29rKQorCQlqb2luX3BhdGhfc2V0dXBfaG9vayhyb290LCBqb2lucmVsLCBvdXRlcnJl bCwgaW5uZXJyZWwsCisJCQkJCQkJIGpvaW50eXBlLCAmZXh0cmEpOworCiAJLyoKIAkgKiBGaW5k IHBvdGVudGlhbCBtZXJnZWpvaW4gY2xhdXNlcy4gIFdlIGNhbiBza2lwIHRoaXMgaWYgd2UgYXJl IG5vdAogCSAqIGludGVyZXN0ZWQgaW4gZG9pbmcgYSBtZXJnZWpvaW4uICBIb3dldmVyLCBtZXJn ZWpvaW4gbWF5IGJlIG91ciBvbmx5Ci0JICogd2F5IG9mIGltcGxlbWVudGluZyBhIGZ1bGwgb3V0 ZXIgam9pbiwgc28gb3ZlcnJpZGUgZW5hYmxlX21lcmdlam9pbiBpZgotCSAqIGl0J3MgYSBmdWxs IGpvaW4uCisJICogd2F5IG9mIGltcGxlbWVudGluZyBhIGZ1bGwgb3V0ZXIgam9pbiwgc28gaW4g dGhhdCBjYXNlIHdlIGRvbid0IGNhcmUKKwkgKiB3aGV0aGVyIG1lcmdlam9pbnMgYXJlIGRpc2Fi bGVkLgogCSAqLwotCWlmIChlbmFibGVfbWVyZ2Vqb2luIHx8IGpvaW50eXBlID09IEpPSU5fRlVM TCkKKwlpZiAoKGV4dHJhLnBnc19tYXNrICYgUEdTX01FUkdFSk9JTl9BTlkpICE9IDAgfHwgam9p bnR5cGUgPT0gSk9JTl9GVUxMKQogCQlleHRyYS5tZXJnZWNsYXVzZV9saXN0ID0gc2VsZWN0X21l cmdlam9pbl9jbGF1c2VzKHJvb3QsCiAJCQkJCQkJCQkJCQkJCSAgam9pbnJlbCwKIAkJCQkJCQkJ CQkJCQkJICBvdXRlcnJlbCwKQEAgLTMyMSwxMCArMzQ4LDEwIEBAIGFkZF9wYXRoc190b19qb2lu cmVsKFBsYW5uZXJJbmZvICpyb290LAogCiAJLyoKIAkgKiA0LiBDb25zaWRlciBwYXRocyB3aGVy ZSBib3RoIG91dGVyIGFuZCBpbm5lciByZWxhdGlvbnMgbXVzdCBiZSBoYXNoZWQKLQkgKiBiZWZv cmUgYmVpbmcgam9pbmVkLiAgQXMgYWJvdmUsIGRpc3JlZ2FyZCBlbmFibGVfaGFzaGpvaW4gZm9y IGZ1bGwKLQkgKiBqb2lucywgYmVjYXVzZSB0aGVyZSBtYXkgYmUgbm8gb3RoZXIgYWx0ZXJuYXRp dmUuCisJICogYmVmb3JlIGJlaW5nIGpvaW5lZC4gIEFzIGFib3ZlLCB3aGVuIGl0J3MgYSBmdWxs IGpvaW4sIHdlIG11c3QgdHJ5IHRoaXMKKwkgKiBldmVuIHdoZW4gdGhlIHBhdGggdHlwZSBpcyBk aXNhYmxlZCwgYmVjYXVzZSBpdCBtYXkgYmUgb3VyIG9ubHkgb3B0aW9uLgogCSAqLwotCWlmIChl bmFibGVfaGFzaGpvaW4gfHwgam9pbnR5cGUgPT0gSk9JTl9GVUxMKQorCWlmICgoZXh0cmEucGdz X21hc2sgJiBQR1NfSEFTSEpPSU4pICE9IDAgfHwgam9pbnR5cGUgPT0gSk9JTl9GVUxMKQogCQlo YXNoX2lubmVyX2FuZF9vdXRlcihyb290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCiAJ CQkJCQkJIGpvaW50eXBlLCAmZXh0cmEpOwogCkBAIC0zMzMsNyArMzYwLDcgQEAgYWRkX3BhdGhz X3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJICogdG8gdGhlIHNhbWUgc2VydmVyIGFu ZCBhc3NpZ25lZCB0byB0aGUgc2FtZSB1c2VyIHRvIGNoZWNrIGFjY2VzcwogCSAqIHBlcm1pc3Np b25zIGFzLCBnaXZlIHRoZSBGRFcgYSBjaGFuY2UgdG8gcHVzaCBkb3duIGpvaW5zLgogCSAqLwot CWlmIChqb2lucmVsLT5mZHdyb3V0aW5lICYmCisJaWYgKChleHRyYS5wZ3NfbWFzayAmIFBHU19G T1JFSUdOSk9JTikgIT0gMCAmJiBqb2lucmVsLT5mZHdyb3V0aW5lICYmCiAJCWpvaW5yZWwtPmZk d3JvdXRpbmUtPkdldEZvcmVpZ25Kb2luUGF0aHMpCiAJCWpvaW5yZWwtPmZkd3JvdXRpbmUtPkdl dEZvcmVpZ25Kb2luUGF0aHMocm9vdCwgam9pbnJlbCwKIAkJCQkJCQkJCQkJCSBvdXRlcnJlbCwg aW5uZXJyZWwsCkBAIC0zNDIsOCArMzY5LDEzIEBAIGFkZF9wYXRoc190b19qb2lucmVsKFBsYW5u ZXJJbmZvICpyb290LAogCS8qCiAJICogNi4gRmluYWxseSwgZ2l2ZSBleHRlbnNpb25zIGEgY2hh bmNlIHRvIG1hbmlwdWxhdGUgdGhlIHBhdGggbGlzdC4gIFRoZXkKIAkgKiBjb3VsZCBhZGQgbmV3 IHBhdGhzIChzdWNoIGFzIEN1c3RvbVBhdGhzKSBieSBjYWxsaW5nIGFkZF9wYXRoKCksIG9yCi0J ICogYWRkX3BhcnRpYWxfcGF0aCgpIGlmIHBhcmFsbGVsIGF3YXJlLiAgVGhleSBjb3VsZCBhbHNv IGRlbGV0ZSBvciBtb2RpZnkKLQkgKiBwYXRocyBhZGRlZCBieSB0aGUgY29yZSBjb2RlLgorCSAq IGFkZF9wYXJ0aWFsX3BhdGgoKSBpZiBwYXJhbGxlbCBhd2FyZS4KKwkgKgorCSAqIEluIHRoZW9y eSwgZXh0ZW5zaW9ucyBjb3VsZCBhbHNvIHVzZSB0aGlzIGhvb2sgdG8gZGVsZXRlIG9yIG1vZGlm eQorCSAqIHBhdGhzIGFkZGVkIGJ5IHRoZSBjb3JlIGNvZGUsIGJ1dCBpbiBwcmFjdGljZSB0aGlz IGlzIGRpZmZpY3VsdCB0byBtYWtlCisJICogd29yaywgc2luY2UgaXQncyB0b28gbGF0ZSB0byBn ZXQgYmFjayBhbnkgcGF0aHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbgorCSAqIGRpc2NhcmRlZCBi eSBhZGRfcGF0aCgpIG9yIGFkZF9wYXJ0aWFsX3BhdGgoKS4gSWYgeW91J3JlIHRyeWluZyB0bwor CSAqIHN1cHByZXNzIHBhdGhzLCBjb25zaWRlciB1c2luZyBqb2luX3BhdGhfc2V0dXBfaG9vayBp bnN0ZWFkLgogCSAqLwogCWlmIChzZXRfam9pbl9wYXRobGlzdF9ob29rKQogCQlzZXRfam9pbl9w YXRobGlzdF9ob29rKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKQEAgLTY5MCw3 ICs3MjIsNyBAQCBnZXRfbWVtb2l6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICppbm5lcnJlbCwKIAlMaXN0CSAgICpwaF9sYXRlcmFsX3ZhcnM7CiAKIAkvKiBPYnZpb3VzbHkg bm90IGlmIGl0J3MgZGlzYWJsZWQgKi8KLQlpZiAoIWVuYWJsZV9tZW1vaXplKQorCWlmICgoZXh0 cmEtPnBnc19tYXNrICYgUEdTX05FU1RMT09QX01FTU9JWkUpID09IDApCiAJCXJldHVybiBOVUxM OwogCiAJLyoKQEAgLTg0NSw2ICs4NzcsNyBAQCB0cnlfbmVzdGxvb3BfcGF0aChQbGFubmVySW5m byAqcm9vdCwKIAkJCQkgIFBhdGggKmlubmVyX3BhdGgsCiAJCQkJICBMaXN0ICpwYXRoa2V5cywK IAkJCQkgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCSAgdWludDY0IG5lc3Rsb29wX3N1YnR5cGUs CiAJCQkJICBKb2luUGF0aEV4dHJhRGF0YSAqZXh0cmEpCiB7CiAJUmVsaWRzCQlyZXF1aXJlZF9v dXRlcjsKQEAgLTkyNyw2ICs5NjAsNyBAQCB0cnlfbmVzdGxvb3BfcGF0aChQbGFubmVySW5mbyAq cm9vdCwKIAkgKiBtZXRob2RvbG9neSB3b3J0aHdoaWxlLgogCSAqLwogCWluaXRpYWxfY29zdF9u ZXN0bG9vcChyb290LCAmd29ya3NwYWNlLCBqb2ludHlwZSwKKwkJCQkJCSAgbmVzdGxvb3Bfc3Vi dHlwZSB8IFBHU19DT05TSURFUl9OT05QQVJUSUFMLAogCQkJCQkJICBvdXRlcl9wYXRoLCBpbm5l cl9wYXRoLCBleHRyYSk7CiAKIAlpZiAoYWRkX3BhdGhfcHJlY2hlY2soam9pbnJlbCwgd29ya3Nw YWNlLmRpc2FibGVkX25vZGVzLApAQCAtOTY0LDYgKzk5OCw3IEBAIHRyeV9wYXJ0aWFsX25lc3Rs b29wX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkgIFBhdGggKmlubmVyX3BhdGgsCiAJ CQkJCQkgIExpc3QgKnBhdGhrZXlzLAogCQkJCQkJICBKb2luVHlwZSBqb2ludHlwZSwKKwkJCQkJ CSAgdWludDY0IG5lc3Rsb29wX3N1YnR5cGUsCiAJCQkJCQkgIEpvaW5QYXRoRXh0cmFEYXRhICpl eHRyYSkKIHsKIAlKb2luQ29zdFdvcmtzcGFjZSB3b3Jrc3BhY2U7CkBAIC0xMDExLDcgKzEwNDYs NyBAQCB0cnlfcGFydGlhbF9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqIEJl Zm9yZSBjcmVhdGluZyBhIHBhdGgsIGdldCBhIHF1aWNrIGxvd2VyIGJvdW5kIG9uIHdoYXQgaXQg aXMgbGlrZWx5IHRvCiAJICogY29zdC4gIEJhaWwgb3V0IHJpZ2h0IGF3YXkgaWYgaXQgbG9va3Mg dGVycmlibGUuCiAJICovCi0JaW5pdGlhbF9jb3N0X25lc3Rsb29wKHJvb3QsICZ3b3Jrc3BhY2Us IGpvaW50eXBlLAorCWluaXRpYWxfY29zdF9uZXN0bG9vcChyb290LCAmd29ya3NwYWNlLCBqb2lu dHlwZSwgbmVzdGxvb3Bfc3VidHlwZSwKIAkJCQkJCSAgb3V0ZXJfcGF0aCwgaW5uZXJfcGF0aCwg ZXh0cmEpOwogCWlmICghYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjayhqb2lucmVsLCB3b3Jrc3Bh Y2UuZGlzYWJsZWRfbm9kZXMsCiAJCQkJCQkJCSAgIHdvcmtzcGFjZS50b3RhbF9jb3N0LCBwYXRo a2V5cykpCkBAIC0xODU5LDE0ICsxODk0LDE0IEBAIG1hdGNoX3Vuc29ydGVkX291dGVyKFBsYW5u ZXJJbmZvICpyb290LAogCWlmIChuZXN0am9pbk9LKQogCXsKIAkJLyoKLQkJICogQ29uc2lkZXIg bWF0ZXJpYWxpemluZyB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCwgdW5sZXNzCi0JCSAqIGVuYWJs ZV9tYXRlcmlhbCBpcyBvZmYgb3IgdGhlIHBhdGggaW4gcXVlc3Rpb24gbWF0ZXJpYWxpemVzIGl0 cwotCQkgKiBvdXRwdXQgYW55d2F5LgorCQkgKiBDb25zaWRlciBtYXRlcmlhbGl6aW5nIHRoZSBj aGVhcGVzdCBpbm5lciBwYXRoLCB1bmxlc3MgdGhhdCBpcworCQkgKiBkaXNhYmxlZCBvciB0aGUg cGF0aCBpbiBxdWVzdGlvbiBtYXRlcmlhbGl6ZXMgaXRzIG91dHB1dCBhbnl3YXkuCiAJCSAqLwot CQlpZiAoZW5hYmxlX21hdGVyaWFsICYmIGlubmVyX2NoZWFwZXN0X3RvdGFsICE9IE5VTEwgJiYK KwkJaWYgKChleHRyYS0+cGdzX21hc2sgJiBQR1NfTkVTVExPT1BfTUFURVJJQUxJWkUpICE9IDAg JiYKKwkJCWlubmVyX2NoZWFwZXN0X3RvdGFsICE9IE5VTEwgJiYKIAkJCSFFeGVjTWF0ZXJpYWxp emVzT3V0cHV0KGlubmVyX2NoZWFwZXN0X3RvdGFsLT5wYXRodHlwZSkpCiAJCQltYXRwYXRoID0g KFBhdGggKikKLQkJCQljcmVhdGVfbWF0ZXJpYWxfcGF0aChpbm5lcnJlbCwgaW5uZXJfY2hlYXBl c3RfdG90YWwpOworCQkJCWNyZWF0ZV9tYXRlcmlhbF9wYXRoKGlubmVycmVsLCBpbm5lcl9jaGVh cGVzdF90b3RhbCwgdHJ1ZSk7CiAJfQogCiAJZm9yZWFjaChsYzEsIG91dGVycmVsLT5wYXRobGlz dCkKQEAgLTE5MDksNiArMTk0NCw3IEBAIG1hdGNoX3Vuc29ydGVkX291dGVyKFBsYW5uZXJJbmZv ICpyb290LAogCQkJCQkJCQkgIGlubmVycGF0aCwKIAkJCQkJCQkJICBtZXJnZV9wYXRoa2V5cywK IAkJCQkJCQkJICBqb2ludHlwZSwKKwkJCQkJCQkJICBQR1NfTkVTVExPT1BfUExBSU4sCiAJCQkJ CQkJCSAgZXh0cmEpOwogCiAJCQkJLyoKQEAgLTE5MjUsNiArMTk2MSw3IEBAIG1hdGNoX3Vuc29y dGVkX291dGVyKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJICBtcGF0aCwKIAkJCQkJCQkJ CSAgbWVyZ2VfcGF0aGtleXMsCiAJCQkJCQkJCQkgIGpvaW50eXBlLAorCQkJCQkJCQkJICBQR1Nf TkVTVExPT1BfTUVNT0laRSwKIAkJCQkJCQkJCSAgZXh0cmEpOwogCQkJfQogCkBAIC0xOTM2LDYg KzE5NzMsNyBAQCBtYXRjaF91bnNvcnRlZF9vdXRlcihQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJ CQkJICBtYXRwYXRoLAogCQkJCQkJCQkgIG1lcmdlX3BhdGhrZXlzLAogCQkJCQkJCQkgIGpvaW50 eXBlLAorCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NQVRFUklBTElaRSwKIAkJCQkJCQkJICBleHRy YSk7CiAJCX0KIApAQCAtMjA1MiwxNiArMjA5MCwxNyBAQCBjb25zaWRlcl9wYXJhbGxlbF9uZXN0 bG9vcChQbGFubmVySW5mbyAqcm9vdCwKIAogCS8qCiAJICogQ29uc2lkZXIgbWF0ZXJpYWxpemlu ZyB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCwgdW5sZXNzOiAxKQotCSAqIGVuYWJsZV9tYXRlcmlh bCBpcyBvZmYsIDIpIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoIGlzIG5vdAorCSAqIG1hdGVyaWFs aXphdGlvbiBpcyBkaXNhYmxlZCBoZXJlLCAyKSB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCBpcyBu b3QKIAkgKiBwYXJhbGxlbC1zYWZlLCAzKSB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCBpcyBwYXJh bWV0ZXJpemVkIGJ5IHRoZSBvdXRlcgogCSAqIHJlbCwgb3IgNCkgdGhlIGNoZWFwZXN0IGlubmVy IHBhdGggbWF0ZXJpYWxpemVzIGl0cyBvdXRwdXQgYW55d2F5LgogCSAqLwotCWlmIChlbmFibGVf bWF0ZXJpYWwgJiYgaW5uZXJfY2hlYXBlc3RfdG90YWwtPnBhcmFsbGVsX3NhZmUgJiYKKwlpZiAo KGV4dHJhLT5wZ3NfbWFzayAmIFBHU19ORVNUTE9PUF9NQVRFUklBTElaRSkgIT0gMCAmJgorCQlp bm5lcl9jaGVhcGVzdF90b3RhbC0+cGFyYWxsZWxfc2FmZSAmJgogCQkhUEFUSF9QQVJBTV9CWV9S RUwoaW5uZXJfY2hlYXBlc3RfdG90YWwsIG91dGVycmVsKSAmJgogCQkhRXhlY01hdGVyaWFsaXpl c091dHB1dChpbm5lcl9jaGVhcGVzdF90b3RhbC0+cGF0aHR5cGUpKQogCXsKIAkJbWF0cGF0aCA9 IChQYXRoICopCi0JCQljcmVhdGVfbWF0ZXJpYWxfcGF0aChpbm5lcnJlbCwgaW5uZXJfY2hlYXBl c3RfdG90YWwpOworCQkJY3JlYXRlX21hdGVyaWFsX3BhdGgoaW5uZXJyZWwsIGlubmVyX2NoZWFw ZXN0X3RvdGFsLCB0cnVlKTsKIAkJQXNzZXJ0KG1hdHBhdGgtPnBhcmFsbGVsX3NhZmUpOwogCX0K IApAQCAtMjA5MSw3ICsyMTMwLDggQEAgY29uc2lkZXJfcGFyYWxsZWxfbmVzdGxvb3AoUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJY29udGludWU7CiAKIAkJCXRyeV9wYXJ0aWFsX25lc3Rsb29wX3Bh dGgocm9vdCwgam9pbnJlbCwgb3V0ZXJwYXRoLCBpbm5lcnBhdGgsCi0JCQkJCQkJCQkgIHBhdGhr ZXlzLCBqb2ludHlwZSwgZXh0cmEpOworCQkJCQkJCQkJICBwYXRoa2V5cywgam9pbnR5cGUsCisJ CQkJCQkJCQkgIFBHU19ORVNUTE9PUF9QTEFJTiwgZXh0cmEpOwogCiAJCQkvKgogCQkJICogVHJ5 IGdlbmVyYXRpbmcgYSBtZW1vaXplIHBhdGggYW5kIHNlZSBpZiB0aGF0IG1ha2VzIHRoZSBuZXN0 ZWQKQEAgLTIxMDIsMTMgKzIxNDIsMTUgQEAgY29uc2lkZXJfcGFyYWxsZWxfbmVzdGxvb3AoUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkgZXh0cmEpOwogCQkJaWYgKG1wYXRoICE9IE5VTEwp CiAJCQkJdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChyb290LCBqb2lucmVsLCBvdXRlcnBhdGgs IG1wYXRoLAotCQkJCQkJCQkJCSAgcGF0aGtleXMsIGpvaW50eXBlLCBleHRyYSk7CisJCQkJCQkJ CQkJICBwYXRoa2V5cywgam9pbnR5cGUsCisJCQkJCQkJCQkJICBQR1NfTkVTVExPT1BfTUVNT0la RSwgZXh0cmEpOwogCQl9CiAKIAkJLyogQWxzbyBjb25zaWRlciBtYXRlcmlhbGl6ZWQgZm9ybSBv ZiB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCAqLwogCQlpZiAobWF0cGF0aCAhPSBOVUxMKQogCQkJ dHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChyb290LCBqb2lucmVsLCBvdXRlcnBhdGgsIG1hdHBh dGgsCi0JCQkJCQkJCQkgIHBhdGhrZXlzLCBqb2ludHlwZSwgZXh0cmEpOworCQkJCQkJCQkJICBw YXRoa2V5cywgam9pbnR5cGUsCisJCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NQVRFUklBTElaRSwg ZXh0cmEpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv dGlkcGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvdGlkcGF0aC5jCmluZGV4IDJi ZmIzMzhiODFjLi42MzlhMGQzY2FkYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvdGlkcGF0aC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3RpZHBhdGgu YwpAQCAtNTAwLDE4ICs1MDAsMTkgQEAgY3JlYXRlX3RpZHNjYW5fcGF0aHMoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKIAlMaXN0CSAgICp0aWRxdWFsczsKIAlMaXN0CSAgICp0 aWRyYW5nZXF1YWxzOwogCWJvb2wJCWlzQ3VycmVudE9mOworCWJvb2wJCWVuYWJsZWQgPSAocmVs LT5wZ3NfbWFzayAmIFBHU19USURTQ0FOKSAhPSAwOwogCiAJLyoKIAkgKiBJZiBhbnkgc3VpdGFi bGUgcXVhbHMgZXhpc3QgaW4gdGhlIHJlbCdzIGJhc2VyZXN0cmljdCBsaXN0LCBnZW5lcmF0ZSBh CiAJICogcGxhaW4gKHVucGFyYW1ldGVyaXplZCkgVGlkUGF0aCB3aXRoIHRoZW0uCiAJICoKLQkg KiBXZSBza2lwIHRoaXMgd2hlbiBlbmFibGVfdGlkc2NhbiA9IGZhbHNlLCBleGNlcHQgd2hlbiB0 aGUgcXVhbCBpcworCSAqIFdlIHNraXAgdGhpcyB3aGVuIFRJRCBzY2FucyBhcmUgZGlzYWJsZWQs IGV4Y2VwdCB3aGVuIHRoZSBxdWFsIGlzCiAJICogQ3VycmVudE9mRXhwci4gSW4gdGhhdCBjYXNl LCBhIFRJRCBzY2FuIGlzIHRoZSBvbmx5IGNvcnJlY3QgcGF0aC4KIAkgKi8KIAl0aWRxdWFscyA9 IFRpZFF1YWxGcm9tUmVzdHJpY3RJbmZvTGlzdChyb290LCByZWwtPmJhc2VyZXN0cmljdGluZm8s IHJlbCwKIAkJCQkJCQkJCQkgICAmaXNDdXJyZW50T2YpOwogCi0JaWYgKHRpZHF1YWxzICE9IE5J TCAmJiAoZW5hYmxlX3RpZHNjYW4gfHwgaXNDdXJyZW50T2YpKQorCWlmICh0aWRxdWFscyAhPSBO SUwgJiYgKGVuYWJsZWQgfHwgaXNDdXJyZW50T2YpKQogCXsKIAkJLyoKIAkJICogVGhpcyBwYXRo IHVzZXMgbm8gam9pbiBjbGF1c2VzLCBidXQgaXQgY291bGQgc3RpbGwgaGF2ZSByZXF1aXJlZApA QCAtNTMzLDcgKzUzNCw3IEBAIGNyZWF0ZV90aWRzY2FuX3BhdGhzKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpyZWwpCiAJfQogCiAJLyogU2tpcCB0aGUgcmVzdCBpZiBUSUQgc2NhbnMg YXJlIGRpc2FibGVkLiAqLwotCWlmICghZW5hYmxlX3RpZHNjYW4pCisJaWYgKCFlbmFibGVkKQog CQlyZXR1cm4gZmFsc2U7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxh bi5jCmluZGV4IDg4YjRjNTkwMWIwLi4wYTJlNjg4YjIzMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtNjUwMyw3ICs2NTAzLDcgQEAgUGxhbiAqCiBtYXRlcmlh bGl6ZV9maW5pc2hlZF9wbGFuKFBsYW4gKnN1YnBsYW4pCiB7CiAJUGxhbgkgICAqbWF0cGxhbjsK LQlQYXRoCQltYXRwYXRoOwkJLyogZHVtbXkgZm9yIHJlc3VsdCBvZiBjb3N0X21hdGVyaWFsICov CisJUGF0aAkJbWF0cGF0aDsJCS8qIGR1bW15IGZvciBjb3N0X21hdGVyaWFsICovCiAJQ29zdAkJ aW5pdHBsYW5fY29zdDsKIAlib29sCQl1bnNhZmVfaW5pdHBsYW5zOwogCkBAIC02NTI1LDcgKzY1 MjUsOSBAQCBtYXRlcmlhbGl6ZV9maW5pc2hlZF9wbGFuKFBsYW4gKnN1YnBsYW4pCiAJc3VicGxh bi0+dG90YWxfY29zdCAtPSBpbml0cGxhbl9jb3N0OwogCiAJLyogU2V0IGNvc3QgZGF0YSAqLwor CW1hdHBhdGgucGFyZW50ID0gTlVMTDsKIAljb3N0X21hdGVyaWFsKCZtYXRwYXRoLAorCQkJCSAg ZW5hYmxlX21hdGVyaWFsLAogCQkJCSAgc3VicGxhbi0+ZGlzYWJsZWRfbm9kZXMsCiAJCQkJICBz dWJwbGFuLT5zdGFydHVwX2Nvc3QsCiAJCQkJICBzdWJwbGFuLT50b3RhbF9jb3N0LApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDhiMWFiODQ3ZjM5Li5lMjY4M2IyNDgxZiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDYyLDYgKzQ2Miw1MyBAQCBz dGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBp bnQgY3Vyc29yT3B0aW9ucywKIAkJdHVwbGVfZnJhY3Rpb24gPSAwLjA7CiAJfQogCisJLyoKKwkg KiBDb21wdXRlIHRoZSBpbml0aWFsIHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVneSBtYXNrLgorCSAq CisJICogU29tZSBzdHJhdGVnaWVzLCBzdWNoIGFzIFBHU19GT1JFSUdOSk9JTiwgaGF2ZSBubyBj b3JyZXNwb25kaW5nIGVuYWJsZV8qCisJICogR1VDLCBhbmQgc28gdGhlIGNvcnJlc3BvbmRpbmcg Yml0cyBhcmUgYWx3YXlzIHNldCBpbiB0aGUgZGVmYXVsdAorCSAqIHN0cmF0ZWd5IG1hc2suCisJ ICoKKwkgKiBJdCBtYXkgc2VlbSBzdXJwcmlzaW5nIHRoYXQgZW5hYmxlX2luZGV4c2NhbiBzZXRz IGJvdGggUEdTX0lOREVYU0NBTgorCSAqIGFuZCBQR1NfSU5ERVhPTkxZU0NBTi4gSG93ZXZlciwg dGhlIGhpc3RvcmljYWwgYmVoYXZpb3Igb2YgdGhpcyBHVUMKKwkgKiBjb3JyZXNwb25kcyB0byB0 aGlzIGV4YWN0bHk6IGVuYWJsZV9pbmRleHNjYW49b2ZmIGRpc2FibGVzIGJvdGgKKwkgKiBpbmRl eC1zY2FuIGFuZCBpbmRleC1vbmx5IHNjYW4gcGF0aHMsIHdoZXJlYXMgZW5hYmxlX2luZGV4b25s eXNjYW49b2ZmCisJICogY29udmVydHMgdGhlIGluZGV4LW9ubHkgc2NhbiBwYXRocyB0aGF0IHdl IHdvdWxkIGhhdmUgY29uc2lkZXJlZCBpbnRvCisJICogaW5kZXggc2NhbiBwYXRocy4KKwkgKi8K KwlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrID0gUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQg fCBQR1NfRk9SRUlHTkpPSU4gfAorCQlQR1NfR0FUSEVSIHwgUEdTX0NPTlNJREVSX05PTlBBUlRJ QUw7CisJaWYgKGVuYWJsZV90aWRzY2FuKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBH U19USURTQ0FOOworCWlmIChlbmFibGVfc2Vxc2NhbikKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFz ayB8PSBQR1NfU0VRU0NBTjsKKwlpZiAoZW5hYmxlX2luZGV4c2NhbikKKwkJZ2xvYi0+ZGVmYXVs dF9wZ3NfbWFzayB8PSBQR1NfSU5ERVhTQ0FOIHwgUEdTX0lOREVYT05MWVNDQU47CisJaWYgKGVu YWJsZV9pbmRleG9ubHlzY2FuKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19DT05T SURFUl9JTkRFWE9OTFk7CisJaWYgKGVuYWJsZV9iaXRtYXBzY2FuKQorCQlnbG9iLT5kZWZhdWx0 X3Bnc19tYXNrIHw9IFBHU19CSVRNQVBTQ0FOOworCWlmIChlbmFibGVfbWVyZ2Vqb2luKQorCXsK KwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfTUVSR0VKT0lOX1BMQUlOOworCQlpZiAo ZW5hYmxlX21hdGVyaWFsKQorCQkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfTUVSR0VK T0lOX01BVEVSSUFMSVpFOworCX0KKwlpZiAoZW5hYmxlX25lc3Rsb29wKQorCXsKKwkJZ2xvYi0+ ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfTkVTVExPT1BfUExBSU47CisJCWlmIChlbmFibGVfbWF0 ZXJpYWwpCisJCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19ORVNUTE9PUF9NQVRFUklB TElaRTsKKwkJaWYgKGVuYWJsZV9tZW1vaXplKQorCQkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8 PSBQR1NfTkVTVExPT1BfTUVNT0laRTsKKwl9CisJaWYgKGVuYWJsZV9oYXNoam9pbikKKwkJZ2xv Yi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfSEFTSEpPSU47CisJaWYgKGVuYWJsZV9nYXRoZXJt ZXJnZSkKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfR0FUSEVSX01FUkdFOworCWlm IChlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9 IFBHU19DT05TSURFUl9QQVJUSVRJT05XSVNFOworCiAJLyogQWxsb3cgcGx1Z2lucyB0byB0YWtl IGNvbnRyb2wgYWZ0ZXIgd2UndmUgaW5pdGlhbGl6ZWQgImdsb2IiICovCiAJaWYgKHBsYW5uZXJf c2V0dXBfaG9vaykKIAkJKCpwbGFubmVyX3NldHVwX2hvb2spIChnbG9iLCBwYXJzZSwgcXVlcnlf c3RyaW5nLCAmdHVwbGVfZnJhY3Rpb24sIGVzKTsKQEAgLTM5NTQsNiArNDAwMSw5IEBAIG1ha2Vf Z3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJ CWlzX3BhcmFsbGVsX3NhZmUocm9vdCwgKE5vZGUgKikgaGF2aW5nUXVhbCkpCiAJCWdyb3VwZWRf cmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9IHRydWU7CiAKKwkvKiBBc3N1bWUgdGhhdCB0aGUgc2Ft ZSBwYXRoIGdlbmVyYXRpb24gc3RyYXRlZ2llcyBhcmUgYWxsb3dlZCAqLworCWdyb3VwZWRfcmVs LT5wZ3NfbWFzayA9IGlucHV0X3JlbC0+cGdzX21hc2s7CisKIAkvKgogCSAqIElmIHRoZSBpbnB1 dCByZWwgYmVsb25ncyB0byBhIHNpbmdsZSBGRFcsIHNvIGRvZXMgdGhlIGdyb3VwZWQgcmVsLgog CSAqLwpAQCAtNTM0OCw2ICs1Mzk4LDkgQEAgY3JlYXRlX29yZGVyZWRfcGF0aHMoUGxhbm5lcklu Zm8gKnJvb3QsCiAJaWYgKGlucHV0X3JlbC0+Y29uc2lkZXJfcGFyYWxsZWwgJiYgdGFyZ2V0X3Bh cmFsbGVsX3NhZmUpCiAJCW9yZGVyZWRfcmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9IHRydWU7CiAK KwkvKiBBc3N1bWUgdGhhdCB0aGUgc2FtZSBwYXRoIGdlbmVyYXRpb24gc3RyYXRlZ2llcyBhcmUg YWxsb3dlZC4gKi8KKwlvcmRlcmVkX3JlbC0+cGdzX21hc2sgPSBpbnB1dF9yZWwtPnBnc19tYXNr OworCiAJLyoKIAkgKiBJZiB0aGUgaW5wdXQgcmVsIGJlbG9uZ3MgdG8gYSBzaW5nbGUgRkRXLCBz byBkb2VzIHRoZSBvcmRlcmVkX3JlbC4KIAkgKi8KQEAgLTc0MjgsNiArNzQ4MSw3IEBAIGNyZWF0 ZV9wYXJ0aWFsX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQln cm91cGVkX3JlbC0+cmVsaWRzKTsKIAlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPmNvbnNpZGVyX3Bh cmFsbGVsID0KIAkJZ3JvdXBlZF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVsOworCXBhcnRpYWxseV9n cm91cGVkX3JlbC0+cGdzX21hc2sgPSBncm91cGVkX3JlbC0+cGdzX21hc2s7CiAJcGFydGlhbGx5 X2dyb3VwZWRfcmVsLT5yZWxvcHRraW5kID0gZ3JvdXBlZF9yZWwtPnJlbG9wdGtpbmQ7CiAJcGFy dGlhbGx5X2dyb3VwZWRfcmVsLT5zZXJ2ZXJpZCA9IGdyb3VwZWRfcmVsLT5zZXJ2ZXJpZDsKIAlw YXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnVzZXJpZCA9IGdyb3VwZWRfcmVsLT51c2VyaWQ7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwppbmRleCBjMGE5ODExYjEzMC4uZWI1N2YwNTM4 YmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKKysr IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwpAQCAtMTY1OCw3ICsxNjU4 LDcgQEAgY3JlYXRlX2dyb3VwX3Jlc3VsdF9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAgKgkgIHBhdGhub2RlLgogICovCiBNYXRlcmlhbFBhdGggKgotY3JlYXRlX21h dGVyaWFsX3BhdGgoUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoKQorY3JlYXRlX21hdGVy aWFsX3BhdGgoUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoLCBib29sIGVuYWJsZWQpCiB7 CiAJTWF0ZXJpYWxQYXRoICpwYXRobm9kZSA9IG1ha2VOb2RlKE1hdGVyaWFsUGF0aCk7CiAKQEAg LTE2NzcsNiArMTY3Nyw3IEBAIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKFJlbE9wdEluZm8gKnJlbCwg UGF0aCAqc3VicGF0aCkKIAlwYXRobm9kZS0+c3VicGF0aCA9IHN1YnBhdGg7CiAKIAljb3N0X21h dGVyaWFsKCZwYXRobm9kZS0+cGF0aCwKKwkJCQkgIGVuYWJsZWQsCiAJCQkJICBzdWJwYXRoLT5k aXNhYmxlZF9ub2RlcywKIAkJCQkgIHN1YnBhdGgtPnN0YXJ0dXBfY29zdCwKIAkJCQkgIHN1YnBh dGgtPnRvdGFsX2Nvc3QsCkBAIC0xNzI5LDggKzE3MzAsMTUgQEAgY3JlYXRlX21lbW9pemVfcGF0 aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoLAogCXBh dGhub2RlLT5lc3RfdW5pcXVlX2tleXMgPSAwLjA7CiAJcGF0aG5vZGUtPmVzdF9oaXRfcmF0aW8g PSAwLjA7CiAKLQkvKiB3ZSBzaG91bGQgbm90IGdlbmVyYXRlIHRoaXMgcGF0aCB0eXBlIHdoZW4g ZW5hYmxlX21lbW9pemU9ZmFsc2UgKi8KLQlBc3NlcnQoZW5hYmxlX21lbW9pemUpOworCS8qCisJ ICogV2Ugc2hvdWxkIG5vdCBiZSBhc2tlZCB0byBnZW5lcmF0ZSB0aGlzIHBhdGggdHlwZSB3aGVu IG1lbW9pemF0aW9uIGlzCisJICogZGlzYWJsZWQsIHNvIHNldCBvdXIgY291bnQgb2YgZGlzYWJs ZWQgbm9kZXMgZXF1YWwgdG8gdGhlIHN1YnBhdGgncworCSAqIGNvdW50LgorCSAqCisJICogSXQg d291bGQgYmUgbmljZSB0byBhbHNvIEFzc2VydCB0aGF0IG1lbW9pemF0aW9uIGlzIGVuYWJsZWQs IGJ1dCB0aGUKKwkgKiB2YWx1ZSBvZiBlbmFibGVfbWVtb2l6ZSBpcyBub3QgY29udHJvbGxpbmc6 IHdoYXQgd2Ugd291bGQgbmVlZCB0byBjaGVjaworCSAqIGlzIHRoYXQgdGhlIEpvaW5QYXRoRXh0 cmFEYXRhJ3MgcGdzX21hc2sgaW5jbHVkZWQgUEdTX05FU1RMT09QX01FTU9JWkUuCisJICovCiAJ cGF0aG5vZGUtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBzdWJwYXRoLT5kaXNhYmxlZF9ub2RlczsK IAogCS8qCkBAIC0zOTY0LDEzICszOTcyLDE2IEBAIHJlcGFyYW1ldGVyaXplX3BhdGgoUGxhbm5l ckluZm8gKnJvb3QsIFBhdGggKnBhdGgsCiAJCQl7CiAJCQkJTWF0ZXJpYWxQYXRoICptcGF0aCA9 IChNYXRlcmlhbFBhdGggKikgcGF0aDsKIAkJCQlQYXRoCSAgICpzcGF0aCA9IG1wYXRoLT5zdWJw YXRoOworCQkJCWJvb2wJCWVuYWJsZWQ7CiAKIAkJCQlzcGF0aCA9IHJlcGFyYW1ldGVyaXplX3Bh dGgocm9vdCwgc3BhdGgsCiAJCQkJCQkJCQkJCXJlcXVpcmVkX291dGVyLAogCQkJCQkJCQkJCQls b29wX2NvdW50KTsKKwkJCQllbmFibGVkID0KKwkJCQkJKG1wYXRoLT5wYXRoLmRpc2FibGVkX25v ZGVzIDw9IHNwYXRoLT5kaXNhYmxlZF9ub2Rlcyk7CiAJCQkJaWYgKHNwYXRoID09IE5VTEwpCiAJ CQkJCXJldHVybiBOVUxMOwotCQkJCXJldHVybiAoUGF0aCAqKSBjcmVhdGVfbWF0ZXJpYWxfcGF0 aChyZWwsIHNwYXRoKTsKKwkJCQlyZXR1cm4gKFBhdGggKikgY3JlYXRlX21hdGVyaWFsX3BhdGgo cmVsLCBzcGF0aCwgZW5hYmxlZCk7CiAJCQl9CiAJCWNhc2UgVF9NZW1vaXplOgogCQkJewpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCmluZGV4IGQ5NTBiZDkzMDAyLi5mZmQ3YmIzYjIy MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwpAQCAtNTU3LDYgKzU1Nyw5IEBA IGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJ ZCwgYm9vbCBpbmhwYXJlbnQsCiAJICogQWxsb3cgYSBwbHVnaW4gdG8gZWRpdG9yaWFsaXplIG9u IHRoZSBpbmZvIHdlIG9idGFpbmVkIGZyb20gdGhlCiAJICogY2F0YWxvZ3MuICBBY3Rpb25zIG1p Z2h0IGluY2x1ZGUgYWx0ZXJpbmcgdGhlIGFzc3VtZWQgcmVsYXRpb24gc2l6ZSwKIAkgKiByZW1v dmluZyBhbiBpbmRleCwgb3IgYWRkaW5nIGEgaHlwb3RoZXRpY2FsIGluZGV4IHRvIHRoZSBpbmRl eGxpc3QuCisJICoKKwkgKiBBbiBleHRlbnNpb24gY2FuIGFsc28gbW9kaWZ5IHJlbC0+cGdzX21h c2sgaGVyZSB0byBjb250cm9sIHBhdGgKKwkgKiBnZW5lcmF0aW9uLgogCSAqLwogCWlmIChnZXRf cmVsYXRpb25faW5mb19ob29rKQogCQkoKmdldF9yZWxhdGlvbl9pbmZvX2hvb2spIChyb290LCBy ZWxhdGlvbk9iamVjdElkLCBpbmhwYXJlbnQsIHJlbCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9y ZWxub2RlLmMKaW5kZXggMTE1OGJjMTk0YzMuLjAzNGQwYzljODdhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvcmVsbm9kZS5jCkBAIC00Nyw2ICs0Nyw5IEBAIHR5cGVkZWYgc3RydWN0IEpvaW5I YXNoRW50cnkKIAlSZWxPcHRJbmZvICpqb2luX3JlbDsKIH0gSm9pbkhhc2hFbnRyeTsKIAorLyog SG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBkdXJpbmcgam9pbnJlbCBzZXR1cCAqLwor am9pbnJlbF9zZXR1cF9ob29rX3R5cGUgam9pbnJlbF9zZXR1cF9ob29rID0gTlVMTDsKKwogc3Rh dGljIHZvaWQgYnVpbGRfam9pbnJlbF90bGlzdChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqam9pbnJlbCwKIAkJCQkJCQkJUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJCQkJCQlTcGVj aWFsSm9pbkluZm8gKnNqaW5mbywKQEAgLTIyNSw2ICsyMjgsNyBAQCBidWlsZF9zaW1wbGVfcmVs KFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFJlbE9wdEluZm8gKnBhcmVudCkKIAlyZWwt PmNvbnNpZGVyX3N0YXJ0dXAgPSAocm9vdC0+dHVwbGVfZnJhY3Rpb24gPiAwKTsKIAlyZWwtPmNv bnNpZGVyX3BhcmFtX3N0YXJ0dXAgPSBmYWxzZTsJLyogbWlnaHQgZ2V0IGNoYW5nZWQgbGF0ZXIg Ki8KIAlyZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0gZmFsc2U7IC8qIG1pZ2h0IGdldCBjaGFuZ2Vk IGxhdGVyICovCisJcmVsLT5wZ3NfbWFzayA9IHJvb3QtPmdsb2ItPmRlZmF1bHRfcGdzX21hc2s7 CiAJcmVsLT5yZWx0YXJnZXQgPSBjcmVhdGVfZW1wdHlfcGF0aHRhcmdldCgpOwogCXJlbC0+cGF0 aGxpc3QgPSBOSUw7CiAJcmVsLT5wcGlsaXN0ID0gTklMOwpAQCAtODIyLDYgKzgyNiw3IEBAIGJ1 aWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LAogCWpvaW5yZWwtPmNvbnNpZGVyX3N0YXJ0 dXAgPSAocm9vdC0+dHVwbGVfZnJhY3Rpb24gPiAwKTsKIAlqb2lucmVsLT5jb25zaWRlcl9wYXJh bV9zdGFydHVwID0gZmFsc2U7CiAJam9pbnJlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPSBmYWxzZTsK Kwlqb2lucmVsLT5wZ3NfbWFzayA9IHJvb3QtPmdsb2ItPmRlZmF1bHRfcGdzX21hc2s7CiAJam9p bnJlbC0+cmVsdGFyZ2V0ID0gY3JlYXRlX2VtcHR5X3BhdGh0YXJnZXQoKTsKIAlqb2lucmVsLT5w YXRobGlzdCA9IE5JTDsKIAlqb2lucmVsLT5wcGlsaXN0ID0gTklMOwpAQCAtOTM0LDEwICs5Mzks NiBAQCBidWlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwKIAkgKi8KIAlqb2lucmVsLT5o YXNfZWNsYXNzX2pvaW5zID0gaGFzX3JlbGV2YW50X2VjbGFzc19qb2luY2xhdXNlKHJvb3QsIGpv aW5yZWwpOwogCi0JLyogU3RvcmUgdGhlIHBhcnRpdGlvbiBpbmZvcm1hdGlvbi4gKi8KLQlidWls ZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJf cmVsLCBzamluZm8sCi0JCQkJCQkJCSByZXN0cmljdGxpc3QpOwotCiAJLyoKIAkgKiBTZXQgZXN0 aW1hdGVzIG9mIHRoZSBqb2lucmVsJ3Mgc2l6ZS4KIAkgKi8KQEAgLTk2Myw2ICs5NjQsMTggQEAg YnVpbGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJCWlzX3BhcmFsbGVsX3NhZmUocm9v dCwgKE5vZGUgKikgam9pbnJlbC0+cmVsdGFyZ2V0LT5leHBycykpCiAJCWpvaW5yZWwtPmNvbnNp ZGVyX3BhcmFsbGVsID0gdHJ1ZTsKIAorCS8qCisJICogQWxsb3cgYSBwbHVnaW4gdG8gZWRpdG9y aWFsaXplIG9uIHRoZSBuZXcgam9pbnJlbCdzIHByb3BlcnRpZXMuIEFjdGlvbnMKKwkgKiBtaWdo dCBpbmNsdWRlIGFsdGVyaW5nIHRoZSBzaXplIGVzdGltYXRlIG9yIGNsZWFyaW5nIGNvbnNpZGVy X3BhcmFsbGVsLgorCSAqLworCWlmIChqb2lucmVsX3NldHVwX2hvb2spCisJCSgqam9pbnJlbF9z ZXR1cF9ob29rKSAocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWwsIHNqaW5mbywK KwkJCQkJCQkgICByZXN0cmljdGxpc3QpOworCisJLyogU3RvcmUgdGhlIHBhcnRpdGlvbiBpbmZv cm1hdGlvbi4gKi8KKwlidWlsZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvKHJvb3QsIGpvaW5yZWws IG91dGVyX3JlbCwgaW5uZXJfcmVsLCBzamluZm8sCisJCQkJCQkJCSByZXN0cmljdGxpc3QpOwor CiAJLyogQWRkIHRoZSBqb2lucmVsIHRvIHRoZSBQbGFubmVySW5mby4gKi8KIAlhZGRfam9pbl9y ZWwocm9vdCwgam9pbnJlbCk7CiAKQEAgLTEwMTksNiArMTAzMiw3IEBAIGJ1aWxkX2NoaWxkX2pv aW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpvdXRlcl9yZWwsCiAJam9pbnJl bC0+Y29uc2lkZXJfc3RhcnR1cCA9IChyb290LT50dXBsZV9mcmFjdGlvbiA+IDApOwogCWpvaW5y ZWwtPmNvbnNpZGVyX3BhcmFtX3N0YXJ0dXAgPSBmYWxzZTsKIAlqb2lucmVsLT5jb25zaWRlcl9w YXJhbGxlbCA9IGZhbHNlOworCWpvaW5yZWwtPnBnc19tYXNrID0gcm9vdC0+Z2xvYi0+ZGVmYXVs dF9wZ3NfbWFzazsKIAlqb2lucmVsLT5yZWx0YXJnZXQgPSBjcmVhdGVfZW1wdHlfcGF0aHRhcmdl dCgpOwogCWpvaW5yZWwtPnBhdGhsaXN0ID0gTklMOwogCWpvaW5yZWwtPnBwaWxpc3QgPSBOSUw7 CkBAIC0xMTAyLDEwICsxMTE2LDYgQEAgYnVpbGRfY2hpbGRfam9pbl9yZWwoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKIAkgKi8KIAlqb2lucmVsLT5oYXNfZWNsYXNz X2pvaW5zID0gcGFyZW50X2pvaW5yZWwtPmhhc19lY2xhc3Nfam9pbnM7CiAKLQkvKiBJcyB0aGUg am9pbiBiZXR3ZWVuIHBhcnRpdGlvbnMgaXRzZWxmIHBhcnRpdGlvbmVkPyAqLwotCWJ1aWxkX2pv aW5yZWxfcGFydGl0aW9uX2luZm8ocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWws IHNqaW5mbywKLQkJCQkJCQkJIHJlc3RyaWN0bGlzdCk7Ci0KIAkvKiBDaGlsZCBqb2lucmVsIGlz IHBhcmFsbGVsIHNhZmUgaWYgcGFyZW50IGlzIHBhcmFsbGVsIHNhZmUuICovCiAJam9pbnJlbC0+ Y29uc2lkZXJfcGFyYWxsZWwgPSBwYXJlbnRfam9pbnJlbC0+Y29uc2lkZXJfcGFyYWxsZWw7CiAK QEAgLTExMTMsNiArMTEyMywyMCBAQCBidWlsZF9jaGlsZF9qb2luX3JlbChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAogCXNldF9qb2lucmVsX3NpemVfZXN0aW1hdGVz KHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVsLAogCQkJCQkJCSAgIHNqaW5mbywg cmVzdHJpY3RsaXN0KTsKIAorCS8qCisJICogQWxsb3cgYSBwbHVnaW4gdG8gZWRpdG9yaWFsaXpl IG9uIHRoZSBuZXcgam9pbnJlbCdzIHByb3BlcnRpZXMuIEFjdGlvbnMKKwkgKiBtaWdodCBpbmNs dWRlIGFsdGVyaW5nIHRoZSBzaXplIGVzdGltYXRlIG9yIGNsZWFyaW5nIGNvbnNpZGVyX3BhcmFs bGVsLAorCSAqIGFsdGhvdWdoIHRoZSBsYXR0ZXIgd291bGQgYmUgYmV0dGVyIGRvbmUgaW4gdGhl IHBhcmVudCBqb2lucmVsIHJhdGhlcgorCSAqIHRoYW4gaGVyZS4KKwkgKi8KKwlpZiAoam9pbnJl bF9zZXR1cF9ob29rKQorCQkoKmpvaW5yZWxfc2V0dXBfaG9vaykgKHJvb3QsIGpvaW5yZWwsIG91 dGVyX3JlbCwgaW5uZXJfcmVsLCBzamluZm8sCisJCQkJCQkJICAgcmVzdHJpY3RsaXN0KTsKKwor CS8qIElzIHRoZSBqb2luIGJldHdlZW4gcGFydGl0aW9ucyBpdHNlbGYgcGFydGl0aW9uZWQ/ICov CisJYnVpbGRfam9pbnJlbF9wYXJ0aXRpb25faW5mbyhyb290LCBqb2lucmVsLCBvdXRlcl9yZWws IGlubmVyX3JlbCwgc2ppbmZvLAorCQkJCQkJCQkgcmVzdHJpY3RsaXN0KTsKKwogCS8qIFdlIGJ1 aWxkIHRoZSBqb2luIG9ubHkgb25jZS4gKi8KIAlBc3NlcnQoIWZpbmRfam9pbl9yZWwocm9vdCwg am9pbnJlbC0+cmVsaWRzKSk7CiAKQEAgLTE2MDIsNiArMTYyNiw3IEBAIGZldGNoX3VwcGVyX3Jl bChQbGFubmVySW5mbyAqcm9vdCwgVXBwZXJSZWxhdGlvbktpbmQga2luZCwgUmVsaWRzIHJlbGlk cykKIAl1cHBlcnJlbCA9IG1ha2VOb2RlKFJlbE9wdEluZm8pOwogCXVwcGVycmVsLT5yZWxvcHRr aW5kID0gUkVMT1BUX1VQUEVSX1JFTDsKIAl1cHBlcnJlbC0+cmVsaWRzID0gYm1zX2NvcHkocmVs aWRzKTsKKwl1cHBlcnJlbC0+cGdzX21hc2sgPSByb290LT5nbG9iLT5kZWZhdWx0X3Bnc19tYXNr OwogCiAJLyogY2hlYXAgc3RhcnR1cCBjb3N0IGlzIGludGVyZXN0aW5nIGlmZiBub3QgYWxsIHR1 cGxlcyB0byBiZSByZXRyaWV2ZWQgKi8KIAl1cHBlcnJlbC0+Y29uc2lkZXJfc3RhcnR1cCA9IChy b290LT50dXBsZV9mcmFjdGlvbiA+IDApOwpAQCAtMjExOCw3ICsyMTQzLDcgQEAgYnVpbGRfam9p bnJlbF9wYXJ0aXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwKIAlQYXJ0aXRpb25TY2hlbWUg cGFydF9zY2hlbWU7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIHBhcnRpdGlvbndpc2Ugam9pbiB0 ZWNobmlxdWUgaXMgZGlzYWJsZWQuICovCi0JaWYgKCFlbmFibGVfcGFydGl0aW9ud2lzZV9qb2lu KQorCWlmICgoam9pbnJlbC0+cGdzX21hc2sgJiBQR1NfQ09OU0lERVJfUEFSVElUSU9OV0lTRSkg PT0gMCkKIAl7CiAJCUFzc2VydCghSVNfUEFSVElUSU9ORURfUkVMKGpvaW5yZWwpKTsKIAkJcmV0 dXJuOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5j bHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCA3NWE3MDQ4OWU1YS4uNDc0NmQzYzQzYzQgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRl L25vZGVzL3BhdGhub2Rlcy5oCkBAIC0yMiw2ICsyMiw3OSBAQAogI2luY2x1ZGUgIm5vZGVzL3Bh cnNlbm9kZXMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Jsb2NrLmgiCiAKKy8qCisgKiBQYXRoIGdl bmVyYXRpb24gc3RyYXRlZ2llcy4KKyAqCisgKiBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgdG8g c3BlY2lmeSB0aGUgc2V0IG9mIHN0cmF0ZWdpZXMgdGhhdCB0aGUgcGxhbm5lcgorICogc2hvdWxk IHVzZSwgZWl0aGVyIGZvciB0aGUgcXVlcnkgYXMgYSB3aG9sZSBvciBmb3IgYSBzcGVjaWZpYyBi YXNlcmVsIG9yCisgKiBqb2lucmVsLiBUaGUgdmFyaW91cyBwbGFubmVyLXJlbGF0ZWQgZW5hYmxl XyogR1VDcyBhcmUgdXNlZCB0byBzZXQgdGhlCisgKiBQbGFubmVyR2xvYmFsJ3MgZGVmYXVsdF9w Z3NfbWFzaywgYW5kIHRoYXQgaW4gdHVybiBpcyB1c2VkIHRvIHNldCBlYWNoCisgKiBSZWxPcHRJ bmZvJ3MgcGdzX21hc2suIEluIGJvdGggY2FzZXMsIGV4dGVuc2lvbnMgY2FuIHVzZSBob29rcyB0 byBtb2RpZnkgdGhlCisgKiBkZWZhdWx0IHZhbHVlLiAgTm90IGV2ZXJ5IHN0cmF0ZWd5IGxpc3Rl ZCBoZXJlIGhhcyBhIGNvcnJlc3BvbmRpbmcgZW5hYmxlXyoKKyAqIEdVQzsgdGhvc2UgdGhhdCBk b24ndCBhcmUgYWx3YXlzIGFsbG93ZWQgdW5sZXNzIGRpc2FibGVkIGJ5IGFuIGV4dGVuc2lvbi4K KyAqIE5vdCBhbGwgc3RyYXRlZ2llcyBhcmUgcmVsZXZhbnQgZm9yIGV2ZXJ5IFJlbE9wdEluZm87 IGUuZy4gUEdTX1NFUVNDQU4KKyAqIGRvZXNuJ3QgYWZmZWN0IGpvaW5yZWxzIG9uZSB3YXkgb3Ig dGhlIG90aGVyLgorICoKKyAqIEluIG1vc3QgY2FzZXMsIGRpc2FibGluZyBhIHBhdGggZ2VuZXJh dGlvbiBzdHJhdGVneSBtZXJlbHkgbWVhbnMgdGhhdCBhbnkKKyAqIHBhdGhzIGdlbmVyYXRlZCB1 c2luZyB0aGF0IHN0cmF0ZWd5IGFyZSBtYXJrZWQgYXMgZGlzYWJsZWQsIGJ1dCBpbiBzb21lCisg KiBjYXNlcywgcGF0aCBnZW5lcmF0aW9uIGlzIHNraXBwZWQgYWx0b2dldGhlci4gVGhlIGxhdHRl ciBzdHJhdGVneSBpcyBvbmx5CisgKiBwZXJtaXNzaWJsZSB3aGVuIGl0IGNhbid0IHJlc3VsdCBp biBwbGFubmVyIGZhaWx1cmUgLS0gZm9yIGluc3RhbmNlLCB3ZQorICogY291bGRuJ3QgZG8gdGhp cyBmb3Igc2VxdWVudGlhbCBzY2FucyBvbiBhIHBsYWluIHJlbCwgYmVjYXVzZSB0aGVyZSBtaWdo dAorICogbm90IGJlIGFueSBvdGhlciBwb3NzaWJsZSBwYXRoLiBOZXZlcnRoZWxlc3MsIHRoZSBi ZWhhdmlvcnMgaW4gZWFjaAorICogaW5kaXZpZHVhbCBjYXNlIGFyZSB0byBzb21lIGV4dGVudCB0 aGUgcmVzdWx0IG9mIGhpc3RvcmljYWwgYWNjaWRlbnQsCisgKiBjaG9zZW4gdG8gbWF0Y2ggdGhl IHByZWV4aXN0aW5nIGJlaGF2aW9ycyBvZiB0aGUgZW5hYmxlXyogR1VDcy4KKyAqCisgKiBJbiBh IGZldyBjYXNlcywgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIGJpdCBmb3IgdGhlIHNhbWUgc3RyYXRl Z3ksIGNvbnRyb2xsaW5nCisgKiBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0aGUgcGxhbm5lciBiZWhh dmlvci4gV2hlbiBQR1NfQ09OU0lERVJfSU5ERVhPTkxZIGlzCisgKiB1bnNldCwgd2UgZG9uJ3Qg ZXZlbiBjb25zaWRlciBpbmRleC1vbmx5IHNjYW5zLCBhbmQgYW55IHN1Y2ggc2NhbnMgdGhhdAor ICogd291bGQgaGF2ZSBiZWVuIGdlbmVyYXRlZCBiZWNvbWUgaW5kZXggc2NhbnMgaW5zdGVhZC4g T24gdGhlIG90aGVyIGhhbmQsCisgKiB1bnNldHRpbmcgUEdTX0lOREVYU0NBTiBvciBQR1NfSU5E RVhPTkxZU0NBTiBjYXVzZXMgZ2VuZXJhdGVkIHBhdGhzIG9mIHRoZQorICogY29ycmVzcG9uZGlu ZyB0eXBlcyB0byBiZSBtYXJrZWQgYXMgZGlzYWJsZWQuIFNpbWlsYXJseSwgdW5zZXR0aW5nCisg KiBQR1NfQ09OU0lERVJfUEFSVElUSU9OV0lTRSBwcmV2ZW50cyBhbnkgc29ydCBvZiB0aGlua2lu ZyBhYm91dCBwYXJ0aXRpb253aXNlCisgKiBqb2lucyBmb3IgdGhlIGN1cnJlbnQgcmVsLCB3aGlj aCBpbmNpZGVudGFsbHkgd2lsbCBwcmVjbHVkZSBoaWdoZXItbGV2ZWwKKyAqIGpvaW5yZWxzIGZy b20gYnVpbGRpbmcgcGFyaXRpdG9ud2lzZSBwYXRocyB1c2luZyBwYXRocyB0YWtlbiBmcm9tIHRo ZQorICogY3VycmVudCByZWwncyBjaGlsZHJlbi4gT24gdGhlIG90aGVyIGhhbmQsIHVuc2V0dGlu ZyBQR1NfQVBQRU5EIG9yCisgKiBQR1NfTUVSR0VfQVBQRU5EIHdpbGwgb25seSBhcnJhbmdlIHRv IGRpc2FibGUgcGF0aHMgb2YgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIHR5cGVzIGlmIHRoZXkgYXJl IGdlbmVyYXRlZCBhdCB0aGUgbGV2ZWwgb2YgdGhlIGN1cnJlbnQgcmVsLgorICoKKyAqIEZpbmFs bHksIHVuc2V0dGluZyBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCBkaXNhYmxlcyBhbGwgbm9uLXBh cnRpYWwgcGF0aHMKKyAqIGV4Y2VwdCB0aG9zZSB0aGF0IHVzZSBHYXRoZXIgb3IgR2F0aGVyIE1l cmdlLiBJbiBtb3N0IG90aGVyIGNhc2VzLCBhCisgKiBwbHVnaW4gY2FuIG51ZGdlIHRoZSBwbGFu bmVyIHRvd2FyZCBhIHBhcnRpY3VsYXIgc3RyYXRlZ3kgYnkgZGlzYWJsaW5nCisgKiBhbGwgb2Yg dGhlIG90aGVycywgYnV0IHRoYXQgZG9lc24ndCB3b3JrIGhlcmU6IHVuc2V0dGluZyBQR1NfU0VR U0NBTiwKKyAqIGZvciBpbnN0YW5jZSwgd291bGQgZGlzYWJsZSBib3RoIHBhcnRpYWwgYW5kIG5v bi1wYXJ0aWFsIHNlcXVlbnRpYWwgc2NhbnMuCisgKi8KKyNkZWZpbmUgUEdTX1NFUVNDQU4JCQkJ CTB4MDAwMDAwMDEKKyNkZWZpbmUgUEdTX0lOREVYU0NBTgkJCQkweDAwMDAwMDAyCisjZGVmaW5l IFBHU19JTkRFWE9OTFlTQ0FOCQkJMHgwMDAwMDAwNAorI2RlZmluZSBQR1NfQklUTUFQU0NBTgkJ CQkweDAwMDAwMDA4CisjZGVmaW5lIFBHU19USURTQ0FOCQkJCQkweDAwMDAwMDEwCisjZGVmaW5l IFBHU19GT1JFSUdOSk9JTgkJCQkweDAwMDAwMDIwCisjZGVmaW5lIFBHU19NRVJHRUpPSU5fUExB SU4JCQkweDAwMDAwMDQwCisjZGVmaW5lIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkUJMHgwMDAw MDA4MAorI2RlZmluZSBQR1NfTkVTVExPT1BfUExBSU4JCQkweDAwMDAwMTAwCisjZGVmaW5lIFBH U19ORVNUTE9PUF9NQVRFUklBTElaRQkweDAwMDAwMjAwCisjZGVmaW5lIFBHU19ORVNUTE9PUF9N RU1PSVpFCQkweDAwMDAwNDAwCisjZGVmaW5lIFBHU19IQVNISk9JTgkJCQkweDAwMDAwODAwCisj ZGVmaW5lIFBHU19BUFBFTkQJCQkJCTB4MDAwMDEwMDAKKyNkZWZpbmUgUEdTX01FUkdFX0FQUEVO RAkJCTB4MDAwMDIwMDAKKyNkZWZpbmUgUEdTX0dBVEhFUgkJCQkJMHgwMDAwNDAwMAorI2RlZmlu ZSBQR1NfR0FUSEVSX01FUkdFCQkJMHgwMDAwODAwMAorI2RlZmluZSBQR1NfQ09OU0lERVJfSU5E RVhPTkxZCQkweDAwMDEwMDAwCisjZGVmaW5lIFBHU19DT05TSURFUl9QQVJUSVRJT05XSVNFCTB4 MDAwMjAwMDAKKyNkZWZpbmUgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwJCTB4MDAwNDAwMDAKKwor LyoKKyAqIENvbnZlbmllbmNlIG1hY3JvcyBmb3IgdXNlZnVsIGNvbWJpbmF0aW9uIG9mIHRoZSBi aXRzIGRlZmluZWQgYWJvdmUuCisgKi8KKyNkZWZpbmUgUEdTX1NDQU5fQU5ZCQlcCisJKFBHU19T RVFTQ0FOIHwgUEdTX0lOREVYU0NBTiB8IFBHU19JTkRFWE9OTFlTQ0FOIHwgUEdTX0JJVE1BUFND QU4gfCBcCisJIFBHU19USURTQ0FOKQorI2RlZmluZSBQR1NfTUVSR0VKT0lOX0FOWQlcCisJKFBH U19NRVJHRUpPSU5fUExBSU4gfCBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFKQorI2RlZmluZSBQ R1NfTkVTVExPT1BfQU5ZCVwKKwkoUEdTX05FU1RMT09QX1BMQUlOIHwgUEdTX05FU1RMT09QX01B VEVSSUFMSVpFIHwgUEdTX05FU1RMT09QX01FTU9JWkUpCisjZGVmaW5lIFBHU19KT0lOX0FOWQkJ XAorCShQR1NfRk9SRUlHTkpPSU4gfCBQR1NfTUVSR0VKT0lOX0FOWSB8IFBHU19ORVNUTE9PUF9B TlkgfCBQR1NfSEFTSEpPSU4pCiAKIC8qCiAgKiBSZWxpZHMKQEAgLTE4Niw2ICsyNTksOSBAQCB0 eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogd29yc3QgUFJPUEFSQUxMRUwgaGF6YXJk IGxldmVsICovCiAJY2hhcgkJbWF4UGFyYWxsZWxIYXphcmQ7CiAKKwkvKiBtYXNrIG9mIGFsbG93 ZWQgcGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWdpZXMgKi8KKwl1aW50NjQJCWRlZmF1bHRfcGdzX21h c2s7CisKIAkvKiBwYXJ0aXRpb24gZGVzY3JpcHRvcnMgKi8KIAlQYXJ0aXRpb25EaXJlY3Rvcnkg cGFydGl0aW9uX2RpcmVjdG9yeSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCkBA IC05MzksNyArMTAxNSw3IEBAIHR5cGVkZWYgc3RydWN0IFJlbE9wdEluZm8KIAlDYXJkaW5hbGl0 eSByb3dzOwogCiAJLyoKLQkgKiBwZXItcmVsYXRpb24gcGxhbm5lciBjb250cm9sIGZsYWdzCisJ ICogcGVyLXJlbGF0aW9uIHBsYW5uZXIgY29udHJvbAogCSAqLwogCS8qIGtlZXAgY2hlYXAtc3Rh cnR1cC1jb3N0IHBhdGhzPyAqLwogCWJvb2wJCWNvbnNpZGVyX3N0YXJ0dXA7CkBAIC05NDcsNiAr MTAyMyw4IEBAIHR5cGVkZWYgc3RydWN0IFJlbE9wdEluZm8KIAlib29sCQljb25zaWRlcl9wYXJh bV9zdGFydHVwOwogCS8qIGNvbnNpZGVyIHBhcmFsbGVsIHBhdGhzPyAqLwogCWJvb2wJCWNvbnNp ZGVyX3BhcmFsbGVsOworCS8qIHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVneSBtYXNrICovCisJdWlu dDY0CQlwZ3NfbWFzazsKIAogCS8qCiAJICogZGVmYXVsdCByZXN1bHQgdGFyZ2V0bGlzdCBmb3Ig UGF0aHMgc2Nhbm5pbmcgdGhpcyByZWxhdGlvbjsgbGlzdCBvZgpAQCAtMzUwNSw2ICszNTgzLDcg QEAgdHlwZWRlZiBzdHJ1Y3QgU2VtaUFudGlKb2luRmFjdG9ycwogICogc2ppbmZvIGlzIGV4dHJh IGluZm8gYWJvdXQgc3BlY2lhbCBqb2lucyBmb3Igc2VsZWN0aXZpdHkgZXN0aW1hdGlvbgogICog c2VtaWZhY3RvcnMgaXMgYXMgc2hvd24gYWJvdmUgKG9ubHkgdmFsaWQgZm9yIFNFTUkvQU5USS9p bm5lcl91bmlxdWUgam9pbnMpCiAgKiBwYXJhbV9zb3VyY2VfcmVscyBhcmUgT0sgdGFyZ2V0cyBm b3IgcGFyYW1ldGVyaXphdGlvbiBvZiByZXN1bHQgcGF0aHMKKyAqIHBnc19tYXNrIGlzIGEgYml0 bWFzayBvZiBQR1NfKiBjb25zdGFudHMgdG8gbGltaXQgdGhlIGpvaW4gc3RyYXRlZ3kKICAqLwog dHlwZWRlZiBzdHJ1Y3QgSm9pblBhdGhFeHRyYURhdGEKIHsKQEAgLTM1MTQsNiArMzU5Myw3IEBA IHR5cGVkZWYgc3RydWN0IEpvaW5QYXRoRXh0cmFEYXRhCiAJU3BlY2lhbEpvaW5JbmZvICpzamlu Zm87CiAJU2VtaUFudGlKb2luRmFjdG9ycyBzZW1pZmFjdG9yczsKIAlSZWxpZHMJCXBhcmFtX3Nv dXJjZV9yZWxzOworCXVpbnQ2NAkJcGdzX21hc2s7CiB9IEpvaW5QYXRoRXh0cmFEYXRhOwogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRl L29wdGltaXplci9jb3N0LmgKaW5kZXggYjUyM2JjZGE4ZjMuLjJkODA0NjJiZWNlIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGlt aXplci9jb3N0LmgKQEAgLTEyNSw3ICsxMjUsNyBAQCBleHRlcm4gdm9pZCBjb3N0X21lcmdlX2Fw cGVuZChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkgIENvc3QgaW5wdXRf c3RhcnR1cF9jb3N0LCBDb3N0IGlucHV0X3RvdGFsX2Nvc3QsCiAJCQkJCQkJICBkb3VibGUgdHVw bGVzKTsKIGV4dGVybiB2b2lkIGNvc3RfbWF0ZXJpYWwoUGF0aCAqcGF0aCwKLQkJCQkJCSAgaW50 IGlucHV0X2Rpc2FibGVkX25vZGVzLAorCQkJCQkJICBib29sIGVuYWJsZWQsIGludCBpbnB1dF9k aXNhYmxlZF9ub2RlcywKIAkJCQkJCSAgQ29zdCBpbnB1dF9zdGFydHVwX2Nvc3QsIENvc3QgaW5w dXRfdG90YWxfY29zdCwKIAkJCQkJCSAgZG91YmxlIHR1cGxlcywgaW50IHdpZHRoKTsKIGV4dGVy biB2b2lkIGNvc3RfYWdnKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LApAQCAtMTQ4LDcg KzE0OCw3IEBAIGV4dGVybiB2b2lkIGNvc3RfZ3JvdXAoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsCiAJCQkJCSAgIGRvdWJsZSBpbnB1dF90dXBsZXMpOwogZXh0ZXJuIHZvaWQgaW5pdGlh bF9jb3N0X25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkgIEpvaW5Db3N0V29y a3NwYWNlICp3b3Jrc3BhY2UsCi0JCQkJCQkJCSAgSm9pblR5cGUgam9pbnR5cGUsCisJCQkJCQkJ CSAgSm9pblR5cGUgam9pbnR5cGUsIHVpbnQ2NCBlbmFibGVfbWFzaywKIAkJCQkJCQkJICBQYXRo ICpvdXRlcl9wYXRoLCBQYXRoICppbm5lcl9wYXRoLAogCQkJCQkJCQkgIEpvaW5QYXRoRXh0cmFE YXRhICpleHRyYSk7CiBleHRlcm4gdm9pZCBmaW5hbF9jb3N0X25lc3Rsb29wKFBsYW5uZXJJbmZv ICpyb290LCBOZXN0UGF0aCAqcGF0aCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXpl ci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKaW5kZXggNDQz NzI0OGNiNjcuLjI3NGNkNDFiYWIxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv cGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaApAQCAtMTcs NiArMTcsMTQgQEAKICNpbmNsdWRlICJub2Rlcy9iaXRtYXBzZXQuaCIKICNpbmNsdWRlICJub2Rl cy9wYXRobm9kZXMuaCIKIAorLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBkdXJp bmcgam9pbnJlbCBzZXR1cCAqLwordHlwZWRlZiB2b2lkICgqam9pbnJlbF9zZXR1cF9ob29rX3R5 cGUpIChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqam9pbnJlbCwK KwkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAorCQkJCQkJCQkJCSBSZWxPcHRJbmZv ICppbm5lcl9yZWwsCisJCQkJCQkJCQkJIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLAorCQkJCQkJ CQkJCSBMaXN0ICpyZXN0cmljdGxpc3QpOworZXh0ZXJuIFBHRExMSU1QT1JUIGpvaW5yZWxfc2V0 dXBfaG9va190eXBlIGpvaW5yZWxfc2V0dXBfaG9vazsKIAogLyoKICAqIHByb3RvdHlwZXMgZm9y IHBhdGhub2RlLmMKQEAgLTg0LDcgKzkyLDggQEAgZXh0ZXJuIEdyb3VwUmVzdWx0UGF0aCAqY3Jl YXRlX2dyb3VwX3Jlc3VsdF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJIFJl bE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCQkJCSBQYXRoVGFyZ2V0ICp0YXJnZXQsCiAJCQkJCQkJ CQkJCQkgTGlzdCAqaGF2aW5ncXVhbCk7Ci1leHRlcm4gTWF0ZXJpYWxQYXRoICpjcmVhdGVfbWF0 ZXJpYWxfcGF0aChSZWxPcHRJbmZvICpyZWwsIFBhdGggKnN1YnBhdGgpOworZXh0ZXJuIE1hdGVy aWFsUGF0aCAqY3JlYXRlX21hdGVyaWFsX3BhdGgoUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJw YXRoLAorCQkJCQkJCQkJCSAgYm9vbCBlbmFibGVkKTsKIGV4dGVybiBNZW1vaXplUGF0aCAqY3Jl YXRlX21lbW9pemVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQlSZWxPcHRJbmZv ICpyZWwsCiAJCQkJCQkJCQkJUGF0aCAqc3VicGF0aCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L29wdGltaXplci9wYXRocy5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKaW5kZXgg ZjZhNjJkZjBiNDMuLjYxYzE2MDdmODcyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aHMuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaApAQCAtMjgsNyAr MjgsMTQgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9z aXplOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtaW5fcGFyYWxsZWxfaW5kZXhfc2Nhbl9zaXpl OwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2dyb3VwX2J5X3Jlb3JkZXJpbmc7CiAK LS8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgaW4gc2V0X3JlbF9wYXRobGlzdCgp ICovCisvKiBIb29rcyBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBzZXRfcmVsX3BhdGhs aXN0KCkgKi8KK3R5cGVkZWYgdm9pZCAoKmpvaW5fcGF0aF9zZXR1cF9ob29rX3R5cGUpIChQbGFu bmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkgICBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJ CQkJCSAgIFJlbE9wdEluZm8gKm91dGVycmVsLAorCQkJCQkJCQkJCSAgIFJlbE9wdEluZm8gKmlu bmVycmVsLAorCQkJCQkJCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJCQkJCSAgIEpv aW5QYXRoRXh0cmFEYXRhICpleHRyYSk7CitleHRlcm4gUEdETExJTVBPUlQgam9pbl9wYXRoX3Nl dHVwX2hvb2tfdHlwZSBqb2luX3BhdGhfc2V0dXBfaG9vazsKIHR5cGVkZWYgdm9pZCAoKnNldF9y ZWxfcGF0aGxpc3RfaG9va190eXBlKSAoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCVJl bE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCQkJSW5kZXggcnRpLAotLSAKMi41MS4wCgo= --0000000000008fa27b0643e0d41b Content-Type: application/octet-stream; name="v4-0006-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v4-0006-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mi4s3jgj5 RnJvbSBmYWM1OGZlNDE4Mjg4MDU5NzZkMjg5ZDIwNjQzNzE2OGE0YWE3MTA2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgNCBOb3YgMjAyNSAxNDo0NTozMSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjQgNi82 XSBXSVA6IEFkZCBwZ19wbGFuX2FkdmljZSBjb250cmliIG1vZHVsZS4KClByb3ZpZGUgYSBmYWNp bGl0eSB0aGF0ICgxKSBjYW4gYmUgdXNlZCB0byBzdGFiaWxpemUgY2VydGFpbiBwbGFuIGNob2lj ZXMKc28gdGhhdCB0aGUgcGxhbm5lciBjYW5ub3QgcmV2ZXJzZSBjb3Vyc2Ugd2l0aG91dCBhdXRo b3JpemF0aW9uIGFuZAooMikgY2FuIGJlIHVzZWQgYnkga25vd2xlZGdlYWJsZSB1c2VycyB0byBp bnNpc3Qgb24gcGxhbiBjaG9pY2VzIGNvbnRyYXJ5CnRvIHdoYXQgdGhlIHBsYW5uZXIgYmVsaWV2 ZXMgYmVzdC4gSW4gYm90aCBjYXNlcywgdGVycmlibGUgb3V0Y29tZXMgYXJlCnBvc3NpYmxlOiB1 c2VycyBzaG91bGQgdGhpbmsgdHdpY2UgYW5kIHBlcmhhcHMgdGhyZWUgdGltZXMgYmVmb3JlCmNv bnN0cmFpbmluZyB0aGUgcGxhbm5lcidzIGFiaWxpdHkgdG8gZG8gYXMgaXQgdGhpbmtzIGJlc3Q7 IG5ldmVydGhlbGVzcywKdGhlcmUgYXJlIHByb2JsZW1zIHRoYXQgYXJlIG11Y2ggbW9yZSBlYXNp bHkgc29sdmVkIHdpdGggdGhlc2UgZmFjaWxpdGllcwp0aGFuIHdpdGhvdXQgdGhlbS4KCldlIHRh a2UgdGhlIGFwcHJvYWNoIG9mIGFuYWx5emluZyBhIGZpbmlzaGVkIHBsYW4gdG8gcHJvZHVjZSB0 ZXh0dWFsCm91dHB1dCwgd2hpY2ggd2UgY2FsbCAicGxhbiBhZHZpY2UiLCB0aGF0IGRlc2NyaWJl cyBrZXkgZGVjaXNpb25zIG1hZGUKZHVyaW5nIHBsYW47IGlmIHRoYXQgcGxhbiBhZHZpY2UgaXMg cHJvdmlkZWQgZHVyaW5nIGZ1dHVyZSBwbGFubmluZwpjeWNsZXMsIGl0IHdpbGwgZm9yY2UgdGhv c2Uga2V5IGRlY2lzaW9ucyB0byBiZSBtYWRlIGluIHRoZSBzYW1lIHdheS4KTm90IGFsbCBwbGFu bmVyIGRlY2lzaW9ucyBjYW4gYmUgY29udHJvbGxlZCB1c2luZyBhZHZpY2U7IGZvciBleGFtcGxl LApkZWNpc2lvbnMgYWJvdXQgaG93IHRvIHBlcmZvcm0gYWdncmVnYXRpb24gYXJlIGN1cnJlbnRs eSBvdXQgb2Ygc2NvcGUsCmFzIGlzIGNob2ljZSBvZiBzb3J0IG9yZGVyLiBQbGFuIGFkdmljZSBj YW4gYWxzbyBiZSBlZGl0ZWQgYnkgdGhlIHVzZXIsCm9yIGV2ZW4gd3JpdHRlbiBmcm9tIHNjcmF0 Y2ggaW4gc2ltcGxlIGNhc2VzLCBtYWtpbmcgaXQgcG9zc2libGUgdG8KZ2VuZXJhdGUgb3V0Y29t ZXMgdGhhdCB0aGUgcGxhbm5lciB3b3VsZCBub3QgaGF2ZSBwcm9kdWNlZC4gUGFydGlhbAphZHZp Y2UgY2FuIGJlIHByb3ZpZGVkIHRvIGNvbnRyb2wgc29tZSBwbGFubmVyIG91dGNvbWVzIGJ1dCBu b3Qgb3RoZXJzLgoKQ3VycmVudGx5LCBwbGFuIGFkdmljZSBpcyBmb2N1c2VkIG9ubHkgb24gc3Bl Y2lmaWMgb3V0Y29tZXMsIHN1Y2ggYXMKdGhlIGNob2ljZSB0byB1c2UgYSBzZXF1ZW50aWFsIHNj YW4gZm9yIGEgcGFydGljdWxhciByZWxhdGlvbiwgYW5kIG5vdApvbiBlc3RpbWF0ZXMgdGhhdCBt aWdodCBjb250cmlidXRlIHRvIHRob3NlIG91dGNvbWVzLCBzdWNoIGFzIGEKcG9zc2libHktaW5j b3JyZWN0IHNlbGVjdGl2aXR5IGVzdGltYXRlLiBXaGlsZSBpdCB3b3VsZCBiZSB1c2VmdWwgdG8K dXNlcnMgdG8gYmUgYWJsZSB0byBwcm92aWRlIHBsYW4gYWR2aWNlIHRoYXQgYWZmZWN0cyBzZWxl Y3Rpdml0eQplc3RpbWF0ZXMgb3Igb3RoZXIgYXNwZWN0cyBvZiBjb3N0aW5nLCB0aGF0IGlzIG91 dCBvZiBzY29wZSBmb3IgdGhpcwpjb21taXQuCgpGb3IgbW9yZSBkZXRhaWxzLCBzZWUgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9SRUFETUUuCgpOT1RFOiBUaGlzIGNvZGUgaXMganVzdCBhIHByb29m IG9mIGNvbmNlcHQuIEEgYnVuY2ggb2YgdGhpbmdzIGRvbid0CndvcmsgYW5kIGEgbG90IG9mIHRo ZSBjb2RlIG5lZWRzIGNsZWFudXAuIEl0IGhhcyBubyBTR01MIGRvY3VtZW50YXRpb24KYW5kIG5v dCBlbm91Z2ggdGVzdCBjYXNlcywgYW5kIHNvbWUgb2YgdGhlIGV4aXN0aW5nIHRlc3QgY2FzZXMg ZG9uJ3QKZG8gYXMgd2Ugd291bGQgaG9wZS4gS25vd24gcHJvYmxlbXMgYXJlIGNhbGxlZCBvdXQg YnkgWFhYLgotLS0KIGNvbnRyaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDEgKwogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgMSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUgICAgICAgICAgICAg fCAgICAzICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICAgICB8 ICAgNTAgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgICAgICAgICAgICAgICAgIHwg IDI3NSArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dCAgICB8 ICAzMjAgKysrKwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3JkZXIub3V0ICAg IHwgIDI5MiArKysKIC4uLi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91 dCB8ICAyOTcgKysrCiAuLi4vZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dCAgICAgICAgICAg ICAgfCAgIDY1ICsKIC4uLi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91 dCB8ICAyNDMgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0ICAg ICAgfCAgNzU3ICsrKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRh eC5vdXQgICAgfCAgIDU5ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQgICAg ICAgICAgICB8ICAgNzAgKwogLi4uL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLS0xLjAu c3FsICAgIHwgICA0MiArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMg ICAgICAgfCAgNDU0ICsrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNl LmNvbnRyb2wgfCAgICA1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2Uu aCAgICAgICB8ICAgMzcgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jICAgICAg ICAgICAgIHwgIDM5MiArKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmggICAg ICAgICAgICAgfCAgMjA0ICsrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9y LmMgICAgICAgfCAgNjM3ICsrKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxl Y3Rvci5oICAgICAgIHwgICAxOCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRp Zmllci5jICAgICAgfCAgNDc2ICsrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRl bnRpZmllci5oICAgICAgfCAgIDUyICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2lu LmMgICAgICAgICAgICB8ICA2MTUgKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf am9pbi5oICAgICAgICAgICAgfCAgMTA1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9v dXRwdXQuYyAgICAgICAgICB8ICA2MjggKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfb3V0cHV0LmggICAgICAgICAgfCAgIDIyICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9wYXJzZXIueSAgICAgICAgICB8ICAzMzcgKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3BsYW5uZXIuYyAgICAgICAgIHwgMTcwNiArKysrKysrKysrKysrKysrKwogY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaCAgICAgICAgIHwgICAxNyArCiBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jICAgICAgICAgICAgfCAgMjU4ICsrKwogY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaCAgICAgICAgICAgIHwgICA4NiArCiBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sICAgICAgICAgfCAgMjk5ICsrKwogY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMgICAgICAgICAgIHwgIDQ5MCArKysrKwogY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmggICAgICAgICAgIHwgIDExMyArKwogY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jICAgICAgICAgIHwgIDg5MCArKysrKysrKysK IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaCAgICAgICAgICB8ICAxMjIgKysK IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwgICAgICAgICB8ICAgNzYgKwog Y29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwgICAgIHwgICA5NiArCiBj b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbCAgfCAgIDc2ICsKIC4u Li9wZ19wbGFuX2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbCAgICB8ICAgNDEgKwogY29u dHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwgIHwgICA3OCArCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNxbCAgICAgICAgICAgfCAgMTk1ICsrCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zeW50YXguc3FsICAgICAgICAgfCAgIDQyICsKIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvdC8wMDFfcmVncmVzcy5wbCAgICAgICB8ICAxNDcgKysKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMzcgKwogNDYgZmls ZXMgY2hhbmdlZCwgMTEyMjYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3Bs YW5fYWR2aWNlL1JFQURNRQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvZXhwZWN0ZWQvZ2F0aGVyLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0CiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iu b3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9w YXJ0aXRpb253aXNlLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvZXhwZWN0ZWQvc2Nhbi5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5f YWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3Bn X3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRoZXIuc3FsCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0 ZWd5LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2xv Y2FsX2NvbGxlY3Rvci5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf cGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvc3ludGF4LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvdC8wMDFfcmVncmVzcy5wbAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZp bGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4IDJmMGE4OGQzZjc3Li5kZDA0YzIwYWNkMiAxMDA2 NDQKLS0tIGEvY29udHJpYi9NYWtlZmlsZQorKysgYi9jb250cmliL01ha2VmaWxlCkBAIC0zNCw2 ICszNCw3IEBAIFNVQkRJUlMgPSBcCiAJCXBnX2ZyZWVzcGFjZW1hcCBcCiAJCXBnX2xvZ2ljYWxp bnNwZWN0IFwKIAkJcGdfb3ZlcmV4cGxhaW4gXAorCQlwZ19wbGFuX2FkdmljZSBcCiAJCXBnX3By ZXdhcm0JXAogCQlwZ19zdGF0X3N0YXRlbWVudHMgXAogCQlwZ19zdXJnZXJ5CVwKZGlmZiAtLWdp dCBhL2NvbnRyaWIvbWVzb24uYnVpbGQgYi9jb250cmliL21lc29uLmJ1aWxkCmluZGV4IGVkMzBl ZTdkNjM5Li5jYjcxOGRiZGFjMCAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNvbi5idWlsZAorKysg Yi9jb250cmliL21lc29uLmJ1aWxkCkBAIC00OCw2ICs0OCw3IEBAIHN1YmRpcigncGdjcnlwdG8n KQogc3ViZGlyKCdwZ19mcmVlc3BhY2VtYXAnKQogc3ViZGlyKCdwZ19sb2dpY2FsaW5zcGVjdCcp CiBzdWJkaXIoJ3BnX292ZXJleHBsYWluJykKK3N1YmRpcigncGdfcGxhbl9hZHZpY2UnKQogc3Vi ZGlyKCdwZ19wcmV3YXJtJykKIHN1YmRpcigncGdyb3dsb2NrcycpCiBzdWJkaXIoJ3BnX3N0YXRf c3RhdGVtZW50cycpCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25v cmUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE5YTE0MjUzMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorL3BncGFfcGFy c2VyLmgKKy9wZ3BhX3BhcnNlci5jCisvcGdwYV9zY2FubmVyLmMKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2Vm aWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZDRjNTU5YWVkOAot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKQEAgLTAs MCArMSw1MCBAQAorIyBjb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxlCisKK01PRFVMRV9i aWcgPSBwZ19wbGFuX2FkdmljZQorT0JKUyA9IFwKKwkkKFdJTjMyUkVTKSBcCisJcGdfcGxhbl9h ZHZpY2UubyBcCisJcGdwYV9hc3QubyBcCisJcGdwYV9jb2xsZWN0b3IubyBcCisJcGdwYV9pZGVu dGlmaWVyLm8gXAorCXBncGFfam9pbi5vIFwKKwlwZ3BhX291dHB1dC5vIFwKKwlwZ3BhX3BhcnNl ci5vIFwKKwlwZ3BhX3BsYW5uZXIubyBcCisJcGdwYV9zY2FuLm8gXAorCXBncGFfc2Nhbm5lci5v IFwKKwlwZ3BhX3Ryb3ZlLm8gXAorCXBncGFfd2Fsa2VyLm8KKworRVhURU5TSU9OID0gcGdfcGxh bl9hZHZpY2UKK0RBVEEgPSBwZ19wbGFuX2FkdmljZS0tMS4wLnNxbAorUEdGSUxFREVTQyA9ICJw Z19wbGFuX2FkdmljZSAtIGhlbHAgdGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuIgorCitS RUdSRVNTID0gZ2F0aGVyIGpvaW5fb3JkZXIgam9pbl9zdHJhdGVneSBwYXJ0aXRpb253aXNlIHNj YW4KK1RBUF9URVNUUyA9IDEKKworRVhUUkFfQ0xFQU4gPSBwZ3BhX3BhcnNlci5oIHBncGFfcGFy c2VyLmMgcGdwYV9zY2FubmVyLmMKKworIyByZXF1aXJlZCBmb3IgMDAxX3JlZ3Jlc3MucGwKK1JF R1JFU1NfU0hMSUI9JChhYnNfdG9wX2J1aWxkZGlyKS9zcmMvdGVzdC9yZWdyZXNzL3JlZ3Jlc3Mk KERMU1VGRklYKQorZXhwb3J0IFJFR1JFU1NfU0hMSUIKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NP TkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitp bmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UKK3Rv cF9idWlsZGRpciA9IC4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUu Z2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5tawor ZW5kaWYKKworIyBTZWUgbm90ZXMgaW4gc3JjL2JhY2tlbmQvcGFyc2VyL01ha2VmaWxlIGFib3V0 IHRoZSBmb2xsb3dpbmcgdHdvIHJ1bGVzCitwZ3BhX3BhcnNlci5oOiBwZ3BhX3BhcnNlci5jCisJ dG91Y2ggJEAKKworcGdwYV9wYXJzZXIuYzogQklTT05GTEFHUyArPSAtZAorCisjIEZvcmNlIHRo ZXNlIGRlcGVuZGVuY2llcyB0byBiZSBrbm93biBldmVuIHdpdGhvdXQgZGVwZW5kZW5jeSBpbmZv IGJ1aWx0OgorcGdwYV9wYXJzZXIubyBwZ3BhX3NjYW5uZXIubzogcGdwYV9wYXJzZXIuaApkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDU5 MGNkMDNjZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURN RQpAQCAtMCwwICsxLDI3NSBAQAorY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUKKworUGxh biBBZHZpY2UKKz09PT09PT09PT09CisKK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBtaW5pLWxh bmd1YWdlIGZvciAicGxhbiBhZHZpY2UiIHRoYXQgYWxsb3dzIGZvcgorY29udHJvbCBvZiBjZXJ0 YWluIGtleSBwbGFubmVyIGRlY2lzaW9ucy4gR29hbHMgaW5jbHVkZSAoMSkgZW5mb3JjaW5nIHBs YW4KK3N0YWJpbGl0eSAobXkgcHJldmlvdXMgcGxhbiB3YXMgZ29vZCBhbmQgSSB3b3VsZCBsaWtl IHRvIGtlZXAgZ2V0dGluZyBhCitzaW1pbGFyIG9uZSkgYW5kICgyKSBhbGxvd2luZyB1c2VycyB0 byBleHBlcmltZW50IHdpdGggcGxhbnMgb3RoZXIgdGhhbgordGhlIG9uZSBwcmVmZXJyZWQgYnkg dGhlIG9wdGltaXplci4gTm9uLWdvYWxzIGluY2x1ZGUgKDEpIGNvbnRyb2xsaW5nCitldmVyeSBw b3NzaWJsZSBwbGFubmVyIGRlY2lzaW9uIGFuZCAoMikgZm9yY2luZyBjb25zaWRlcmF0aW9uIG9m IHBsYW5zCit0aGF0IHRoZSBvcHRpbWl6ZXIgcmVqZWN0cyBmb3IgcmVhc29ucyBvdGhlciB0aGFu IGNvc3QuIChUaGVyZSBpcyBzb21lCityb29tIGZvciBiaWtlc2hlZGRpbmcgYWJvdXQgd2hhdCBl eGFjdGx5IHRoaXMgbm9uLWdvYWwgbWVhbnM6IHdoYXQgaWYKK3dlIHNraXAgcGF0aCBnZW5lcmF0 aW9uIGVudGlyZWx5IGZvciBhIGNlcnRhaW4gY2FzZSBvbiB0aGUgdGhlb3J5IHRoYXQKK3dlIGtu b3cgaXQgY2Fubm90IHdpbiBvbiBjb3N0PyBEb2VzIHRoYXQgY291bnQgYXMgYSBjb3N0LWJhc2Vk IHJlamVjdGlvbgorZXZlbiB0aG91Z2ggbm8gY29zdCB3YXMgZXZlciBjb21wdXRlZD8pCisKK0dl bmVyYWxseSwgcGxhbiBhZHZpY2UgaXMgYSBzZXJpZXMgb2Ygd2hpdGVzcGFjZS1zZXBhcmF0ZWQg YWR2aWNlIGl0ZW1zLAorZWFjaCBvZiB3aGljaCBhcHBsaWVzIGFuIGFkdmljZSB0YWcgdG8gYSBs aXN0IG9mIGFkdmljZSB0YXJnZXRzLiBGb3IKK2V4YW1wbGUsICJTRVFfU0NBTihmb28pIEhBU0hf Sk9JTihiYXJAc3MpIiBjb250YWlucyB0d28gaXRlbXMgb2YgYWR2aWNlLAordGhlIGZpcnN0IG9m IHdoaWNoIGFwcGxpZXMgdGhlIFNFUV9TQ0FOIHRhZyB0byAiZm9vIiBhbmQgdGhlIHNlY29uZCBv Zgord2hpY2ggYXBwbGllcyB0aGUgSEFTSF9KT0lOIHRhZyB0byAiYmFyQHNzIi4gSW4gdGhpcyBz aW1wbGUgZXhhbXBsZSwgZWFjaAordGFyZ2V0IGlkZW50aWZpZXMgYSBzaW5nbGUgcmVsYXRpb247 IHNlZSAiUmVsYXRpb24gSWRlbnRpZmllcnMiLCBiZWxvdy4KK0FkdmljZSB0YWdzIGNhbiBhbHNv IGJlIGFwcGxpZWQgdG8gZ3JvdXBzIG9mIHJlbGF0aW9uczsgZm9yIGV4YW1wbGUsCisiSEFTSF9K T0lOKGJheiAoYmxldGNoIHF1dXgpKSIgYXBwbGllcyB0aGUgSEFTSF9KT0lOIHRhZyB0byB0aGUg c2luZ2xlCityZWxhdGlvbiBpZGVudGlmaWVyICJiYXoiIGFzIHdlbGwgYXMgdG8gdGhlIDItaXRl bSBsaXN0IGNvbnRhaW5pbmcKKyJibGV0Y2giIGFuZCAicXV1eCIuCisKK0NyaXRpY2FsbHksIHRo aXMgbW9kdWxlIGtub3dzIGJvdGggaG93IHRvIGdlbmVyYXRlIHBsYW4gYWR2aWNlIGZyb20gYW4K K2FscmVhZHktZXhpc3RpbmcgcGxhbiwgYW5kIGFsc28gaG93IHRvIGVuZm9yY2UgaXQgZHVyaW5n IGZ1dHVyZSBwbGFubmluZworY3ljbGVzLiBFdmVyeXRoaW5nIGl0IGRvZXMgaXMgaW50ZW5kZWQg dG8gYmUgInJvdW5kLXRyaXAgc2FmZSI6IGlmIHlvdQorZ2VuZXJhdGUgYWR2aWNlIGZyb20gYSBw bGFuIGFuZCB0aGVuIGZlZWQgdGhhdCBiYWNrIGludG8gYSBmdXR1cmUgcGxhbmluZworY3ljbGUs IGVhY2ggcGllY2Ugb2YgYWR2aWNlIHNob3VsZCBiZSBndWFyYW50ZWVkIHRvIGFwcGx5IHRvIHRo ZSBleGFjdGx5IHRoZQorc2FtZSBwYXJ0IG9mIHRoZSBxdWVyeSBmcm9tIHdoaWNoIGl0IHdhcyBn ZW5lcmF0ZWQgd2l0aG91dCBhbWJpZ3VpdHkgb3IKK2d1ZXNzd29yaywgYW5kIGl0IHNob3VsZCBz dWNjZXNmdWxseSBlbmZvcmNlIHRoZSBzYW1lIHBsYW5uaW5nIGRlY2lzaW9uIHRoYXQKK2xlZCB0 byBpdCBiZWluZyBnZW5lcmF0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBOb3RlIHRoYXQgdGhlcmUg aXMgbm8KK2ludGVudGlvbiB0aGF0IHRoZXNlIGd1YXJhbnRlZXMgaG9sZCBpbiB0aGUgcHJlc2Vu Y2Ugb2YgaW50ZXJ2ZW5pbmcgRERMOworZS5nLiBpZiB5b3UgY2hhbmdlIHRoZSBwcm9wZXJ0aWVz IG9mIGEgZnVuY3Rpb24gc28gdGhhdCBhIHN1YnF1ZXJ5IGlzIG5vCitsb25nZXIgaW5saW5lZCwg b3IgaWYgeW91IGRyb3AgYW4gaW5kZXggbmFtZWQgaW4gdGhlIHBsYW4gYWR2aWNlLCB0aGUgYWR2 aWNlCitpc24ndCBnb2luZyB0byB3b3JrIGFueSBtb3JlLiBUaGF0J3MgZXhwZWN0ZWQuCisKK1Ro aXMgbW9kdWxlIGFpbXMgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gZm9sbG93IGFueSBwcm92aWRl ZCBhZHZpY2Ugd2l0aG91dAorcmVnYXJkIHRvIHdoZXRoZXIgaXQgaXMgYXBwZWFycyB0byBiZSBn b29kIGFkdmljZSBvciBiYWQgYWR2aWNlLiAgSWYgdGhlCit1c2VyIHByb3ZpZGVzIGJhZCBhZHZp Y2UsIHdoZXRoZXIgZGVyaXZlZCBmcm9tIGEgcHJldmlvdXNseS1nZW5lcmF0ZWQgcGxhbgorb3Ig bWFudWFsbHkgd3JpdHRlbiwgdGhleSBtYXkgZ2V0IGEgYmFkIHBsYW4uIFdlIHJlZ2FyZCB0aGlz IGFzIHVzZXIgZXJyb3IsCitub3QgYSBkZWZlY3QgaW4gdGhpcyBtb2R1bGUuIEl0IHNlZW1zIGxp a2VseSB0aGF0IGFwcGx5aW5nIGFkdmljZQoranVkaWNpb3VzbHkgYW5kIG9ubHkgd2hlbiB0cnVs eSByZXF1aXJlZCB0byBhdm9pZCBwcm9ibGVtcyB3aWxsIGJlIGEgbW9yZQorc3VjY2Vzc2Z1bCBz dHJhdGVneSB0aGFuIGFwcGx5aW5nIGl0IHdpdGggYSBicm9hZCBicnVzaCwgYnV0IHVzZXJzIGFy ZSBmcmVlCit0byBleHBlcmltZW50IHdpdGggd2hhdGV2ZXIgc3RyYXRlZ2llcyB0aGV5IHRoaW5r IGJlc3QuCisKK1JlbGF0aW9uIElkZW50aWZpZXJzCis9PT09PT09PT09PT09PT09PT09PQorCitV bmlxdWVseSBpZGVudGlmeWluZyB0aGUgcGFydCBvZiBhIHF1ZXJ5IHRvIHdoaWNoIGEgY2VydGFp biBwaWVjZSBvZgorYWR2aWNlIGFwcGxpZXMgaXMgaGFyZGVyIHRoYW4gaXQgc291bmRzLiBPdXIg YmFzaWMgYXBwcm9hY2ggaXMgdG8gdXNlCityZWxhdGlvbiBhbGlhc2VzIGFzIGEgc3RhcnRpbmcg cG9pbnQsIGFuZCB0aGVuIGRpc2FtYmlndWF0ZS4gVGhlcmUgYXJlCit0aHJlZSB3YXlzIHRoYXQg c2FtZSByZWxhdGlvbiBhbGlhcyBjYW4gb2NjdXIgbXVsdGlwbGUgdGltZXM6CisKKzEuIEl0IGNh biBhcHBlYXIgaW4gbW9yZSB0aGFuIG9uZSBzdWJxdWVyeS4KKworMi4gSXQgY2FuIGFwcGVhciBt b3JlIHRoYW4gb25jZSBpbiB0aGUgc2FtZSBzdWJxdWVyeSwKKyAgIGUuZy4gKGZvbyBKT0lOIGJh cikgeCBKT0lOIGZvby4KKworMy4gVGhlIHRhYmxlIGNhbiBiZSBwYXJ0aXRpb25lZC4KKworQW55 IGNvbWJpbmF0aW9uIG9mIHRoZXNlIHRoaW5ncyBjYW4gb2NjdXIgc2ltdWx0YW5lb3VzbHkuICBU aGVyZWZvcmUsIG91cgorZ2VuZXJhbCBzeW50YXggZm9yIGEgcmVsYXRpb24gaWRlbnRpZmllciBp czoKKworYWxpYXNfbmFtZSNvY2N1cnJlbmNlX251bWJlci9wYXJ0aXRpb25fc2NoZW1hLnBhcnRp dGlvbl9uYW1lQHBsYW5fbmFtZQorCitBbGwgY29tcG9uZW50cyBleGNlcHQgZm9yIHRoZSBhbGlh c19uYW1lIGFyZSBvcHRpb25hbCBhbmQgaW5jbHVkZWQgb25seQord2hlbiByZXF1aXJlZC4gV2hl biBhIGNvbXBvbmVudCBpcyBvbWl0dGVkLCB0aGUgYXNzb2NpYXRlZCBwdW5jdHVhdGlvbgorbXVz dCBhbHNvIGJlIG9taXR0ZWQuIE9jY3VycmVuY2UgbnVtYmVycyBhcmUgY291bnRlZCBpZ25vcmlu ZyBjaGlsZHJlbiBvZgorcGFydGl0aW9uZWQgdGFibGVzLiAgV2hlbiB0aGUgZ2VuZXJhdGVkIG9j Y3VycmVuY2UgbnVtYmVyIGlzIDEsIHdlIG9taXQKK3RoZSBvY2N1cnJlbmNlIG51bWJlci4gVGhl IHBhcnRpdGlvbiBzY2hlbWEgYW5kIHBhcnRpdGlvbiBuYW1lIGFyZSBpbmNsdWRlZAorb25seSBm b3IgY2hpbGRyZW4gb2YgcGFydGl0aW9uZWQgdGFibGVzLiBJbiBnZW5lcmF0ZWQgYWR2aWNlLCB0 aGUKK3BhcnRpdGlvbl9zY2hlbWEgaXMgYWx3YXlzIGluY2x1ZGVkIHdoZW5ldmVyIHRoZXJlIGlz IGEgcGFydGl0aW9uX25hbWUsCitidXQgdXNlci13cml0dGVuIGFkdmljZSBtYXkgbWVudGlvbiB0 aGUgbmFtZSBhbmQgb21pdCB0aGUgc2NoZW1hLiBUaGUKK3BsYW5fbmFtZSBpcyBvbWl0dGVkIGZv ciB0aGUgdG9wLWxldmVsIFBsYW5uZXJJbmZvLgorCitTY2FuIEFkdmljZQorPT09PT09PT09PT0K KworRm9yIG1hbnkgdHlwZXMgb2Ygc2Nhbiwgbm8gYWR2aWNlIGlzIGdlbmVyYXRlZCBvciBwb3Nz aWJsZTsgZm9yIGluc3RhbmNlLAorYSBzdWJxdWVyeSBpcyBhbHdheXMgc2Nhbm5lZCB1c2luZyBh IHN1YnF1ZXJ5IHNjYW4uIFdoaWxlIHRoYXQgc2NhbiBtYXkgYmUKK2VsaWRlZCB2aWEgc2V0cmVm cyBwcm9jZXNzaW5nLCB0aGlzIGRvZXNuJ3QgY2hhbmdlIHRoZSBmYWN0IHRoYXQgb25seSBvbmUK K2Jhc2ljIGFwcHJvYWNoIGV4aXN0cy4gSGVuY2UsIHNjYW4gYWR2aWNlIGFwcGxpZXMgbW9zdGx5 IHRvIHJlbGF0aW9ucywgd2hpY2gKK2NhbiBiZSBzY2FubmVkIGluIG11bHRpcGxlIHdheXMuCisK K1dlIHRlbmQgdG8gdGhpbmsgb2YgYSBzY2FuIGFzIHRhcmdldGluZyBhIHNpbmdsZSByZWxhdGlv biwgYW5kIHRoYXQncworbm9ybWFsbHkgdGhlIGNhc2UsIGJ1dCBpdCBkb2Vzbid0IGhhdmUgdG8g YmUuIEZvciBpbnN0YW5jZSwgaWYgYSBqb2luIGlzCitwcm92ZW4gZW1wdHksIHRoZSB3aG9sZSB0 aGluZyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBSZXN1bHQgbm9kZQord2hpY2gsIGlu IGVmZmVjdCwgaXMgYSBkZWdlbmVyYXRlIHNjYW4gb2YgZXZlcnkgcmVsYXRpb24gaW4gdGhlIGNv bGxhcHNlZAorcG9ydGlvbiBvZiB0aGUgam9pbiB0cmVlLiBTaW1pbGFybHksIGl0J3MgcG9zc2li bGUgdG8gaW5qZWN0IGEgY3VzdG9tIHNjYW4KK2luIHN1Y2ggYSB3YXkgdGhhdCBpdCByZXBsYWNl cyBhbiBlbnRpcmUgam9pbi4gSWYgd2UgZXZlciBlbWl0IGFkdmljZQorZm9yIHRoZXNlIGNhc2Vz LCBpdCB3b3VsZCB0YXJnZXQgc2V0cyBvZiByZWxhdGlvbiBpZGVudGlmaWVycyBzdXJyb3VuZGVk CitieSBjdXJseSBicmFuY2VzLCBlLmcuIFNPTUVfU09SVF9PRl9TQ0FOKGZvbyAoYmFyIGJheikp IHdvdWxkIG1lYW4gdGhhdCB0aGUKK3RoZSBnaXZlbiBzY2FuIHR5cGUgd291bGQgYmUgdXNlZCBm b3IgZm9vIGFzIGEgc2luZ2xlIHJlbGF0aW9uIGFuZCBhbHNvIHRoZQorY29tYmluYXRpb24gb2Yg YmFyIGFuZCBiYXogYXMgYSBqb2luIHByb2R1Y3QuIFdlIGhhdmUgbm8gc3VjaCBjYXNlcyBhdAor cHJlc2VudC4KKworRm9yIGluZGV4IGFuZCBpbmRleC1vbmx5IHNjYW5zLCBib3RoIHRoZSByZWxh dGlvbiBiZWluZyBzY2FubmVkIGFuZCB0aGUKK2luZGV4IG9yIGluZGV4ZXMgYmVpbmcgdXNlZCBt dXN0IGJlIHNwZWNpZmllZC4gRm9yIGV4YW1wbGUsIElOREVYX1NDQU4oZm9vCitmb29fYV9pZHgg YmFyIGJhcl9iX2lkeCkgaW5kaWNhdGVzIHRoYXQgYW4gaW5kZXggc2NhbiAobm90IGFuIGluZGV4 LW9ubHkKK3NjYW4pIHNob3VsZCBiZSB1c2VkIG9uIGZvb19hX2lkeCB3aGVuIHNjYW5uaW5nIGZv bywgYW5kIHRoYXQgYW4gaW5kZXggc2Nhbgorc2hvdWxkIGJlIHVzZWQgb24gYmFyX2JfaWR4IHdo ZW4gc2Nhbm5pbmcgYmFyLgorCitCaXRtYXAgaGVhcCBzY2FucyBhbGxvdyBmb3IgYSBtb3JlIGNv bXBsaWNhdGVkIGluZGV4IHNwZWNpZmljYXRpb24uIEZvcgorZXhhbXBsZSwgQklUTUFQX0hFQVBf U0NBTihmb28gJiYoZm9vX2FfaWR4IHx8KGZvb19iX2lkeCBmb29fY19pZHgpKSkgc2F5cwordGhh dCBmb28gc2hvdWxkIGJlIHNjYW5uZWQgdXNpbmcgYSBCaXRtYXBIZWFwU2NhbiBvdmVyIGEgQml0 bWFwQW5kIGJldHdlZW4KK2Zvb19hX2lkeCBhbmQgdGhlIHJlc3VsdCBvZiBhIEJpdG1hcE9yIGJl dHdlZW4gZm9vX2JfaWR4IGFuZCBmb29fY19pZHguCisKK1hYWDogQ3VycmVudGx5LCBCSVRNQVBf SEVBUF9TQ0FOIGRvZXMgbm90IGVuZm9yY2UgdGhlIGluZGV4IHNwZWNpZmljYXRpb24sCitiZWNh dXNlIHRoZSBhdmFpbGFibGUgaG9va3MgYXJlIGluc3VmZmljaWVudCB0byBkbyBzby4gSXQncyBw b3NzaWJsZSB0aGF0Cit0aGlzIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGV4Y2x1ZGUgdGhlIGluZGV4 IHNwZWNpZmljYXRpb24gYWx0b2dldGhlciBhbmQKK3NpbXBseSBpbnNpc3QgdGhhdCBzb21lIHNv cnQgb2YgYml0bWFwIGhlYXAgc2NhbiBpcyB1c2VkOyBhbHRlcm5hdGl2ZWx5LAord2UgbmVlZCBi ZXR0ZXIgaG9va3MuCisKK0pvaW4gT3JkZXIgQWR2aWNlCis9PT09PT09PT09PT09PT09PQorCitU aGUgSk9JTl9PUkRFUiB0YWcgc3BlY2lmaWVzIHRoZSBvcmRlciBpbiB3aGljaCBzZXZlcmFsIHRh YmxlcyB0aGF0IGFyZQorcGFydCBvZiB0aGUgc2FtZSBqb2luIHByb2JsZW0gc2hvdWxkIGJlIGpv aW5lZC4gRWFjaCBzdWJxdWVyeSAoZXhjZXB0IGZvcgordGhvc2UgdGhhdCBhcmUgaW5saW5lZCkg aXMgYSBzZXBhcmF0ZSBqb2luIHByb2JsZW0uIFdpdGhpbiBhIHN1YnF1ZXJ5LAorcGFydGl0aW9u d2lzZSBqb2lucyBjYW4gY3JlYXRlIGFkZGl0aW9uYWwsIHNlcGFyYXRlIGpvaW4gcHJvYmxlbXMu IEhlbmNlLAorcXVlcmllcyBpbnZvbHZpbmcgcGFydGl0aW9ud2lzZSBqb2lucyBtYXkgdXNlIEpP SU5fT1JERVIoKSBtYW55IHRpbWVzLgorCitXZSB0YWtlIHRoZSBjYW5vbmljYWwgam9pbiBzdHJ1 Y3R1cmUgdG8gYmUgYW4gb3V0ZXItZGVlcCB0cmVlLCBzbworSk9JTl9PUkRFUih0MSB0MiB0Mykg c2F5cyB0aGF0IHQxIGlzIHRoZSBkcml2aW5nIHRhYmxlIGFuZCBzaG91bGQgYmUgam9pbmVkCitm aXJzdCB0byB0MiBhbmQgdGhlbiB0byB0My4gSWYgdGhlIGpvaW4gcHJvYmxlbSBpbnZvbHZlcyBh ZGRpdGlvbmFsIHRhYmxlcywKK3RoZXkgY2FuIGJlIGpvaW5lZCBpbiBhbnkgb3JkZXIgYWZ0ZXIg dGhlIGpvaW4gYmV0d2VlbiB0MSwgdDIsIGFuZCB0MyBoYXMKK2JlZW4gY29uc3RydWN0dXJlZC4g R2VuZXJhdGVkIGpvaW4gYWR2aWNlIGFsd2F5cyBtZW50aW9ucyBhbGwgdGFibGVzCitpbiB0aGUg am9pbiBwcm9ibGVtLCBidXQgbWFudWFsbHkgd3JpdHRlbiBqb2luIGFkdmljZSBuZWVkIG5vdCBk byBzby4KKworRm9yIHRyZWVzIHdoaWNoIGFyZSBub3Qgb3V0ZXItZGVlcCwgcGFyZW50aGVzZXMg Y2FuIGJlIHVzZWQuIEZvciBleGFtcGxlLAorSk9JTl9PUkRFUih0MSAodDIgdDMpKSBzYXlzIHRo YXQgdGhlIHRvcC1sZXZlbCBqb2luIHNob3VsZCBoYXZlIHQxIG9uIHRoZQorb3V0ZXIgc2lkZSBh bmQgYSBqb2luIGJldHdlZW4gdDIgYW5kIHQzIG9uIHRoZSBpbm5lciBzaWRlLiBUaGF0IGpvaW4g c2hvdWxkCitiZSBjb25zdHJ1Y3RlZCBzbyB0aGF0IHQyIGlzIG9uIHRoZSBvdXRlciBzaWRlIGFu ZCB0MyBpcyBvbiB0aGUgaW5uZXIgc2lkZS4KKworSW4gc29tZSBjYXNlcywgaXQncyBub3QgcG9z c2libGUgdG8gZnVsbHkgc3BlY2lmeSB0aGUgam9pbiBvcmRlciBpbiB0aGlzIHdheS4KK0ZvciBl eGFtcGxlLCBpZiB0MiBhbmQgdDMgYXJlIGJlaW5nIHNjYW5uZWQgYnkgYSBzaW5nbGUgY3VzdG9t IHNjYW4gb3IgZm9yZWlnbgorc2Nhbiwgb3IgaWYgYSBwYXJ0aXRpb253aXNlIGpvaW4gaXMgYmVp bmcgcGVyZm9ybWVkIGJldHdlZW4gdGhvc2UgdGFibGVzLCB0aGVuCitpdCdzIGltcG9zc2libGUg dG8gc2F5IHRoYXQgdDIgaXMgdGhlIG91dGVyIHRhYmxlIGFuZCB0MyBpcyB0aGUgaW5uZXIgdGFi bGUsCitvciB0aGUgb3RoZXIgd2F5IGFyb3VuZDsgaXQncyBqdXN0IHVuZGVmaW5lZC4gSW4gc3Vj aCBjYXNlcywgd2UgZ2VuZXJhdGUKK2pvaW4gYWR2aWNlIHRoYXQgdXNlcyBjdXJseSBicmFjZXMs IGludGVuZGluZyB0byBpbmRpY2F0ZSBhIGxhY2sgb2Ygb3JkZXJpbmc6CitKT0lOX09SREVSKHQx IHt0MiB0M30pIHNheXMgdGhhdCB0aGUgdXBwZXJtb3N0IGpvaW4gc2hvdWxkIGhhdmUgdDEgb24g dGhlIG91dGVyCitzaWRlIGFuZCBzb21lIGtpbmQgb2Ygam9pbiBiZXR3ZWVuIHQyIGFuZCB0MyBv biB0aGUgaW5uZXIgc2lkZSwgYnV0IHdpdGhvdXQKK3NheWluZyBob3cgdGhhdCBqb2luIG11c3Qg YmUgcGVyZm9ybWVkIG9yIGFueXRoaW5nIGFib3V0IHdoaWNoIHJlbGF0aW9uIHNob3VsZAorYXBw ZWFyIG9uIHdoaWNoIHNpZGUgb2YgdGhlIGpvaW4sIG9yIGV2ZW4gd2hldGhlciB0aGlzIGtpbmQg b2Ygam9pbiBoYXMgc2lkZXMuCisKK0pvaW4gU3RyYXRlZ3kgQWR2aWNlCis9PT09PT09PT09PT09 PT09PT09PQorCitUYWdzIHN1Y2ggYXMgTkVTVEVEX0xPT1BfUExBSU4gc3BlY2lmeSB0aGUgbWV0 aG9kIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8KK3BlcmZvcm0gYSBjZXJ0YWluIGpvaW4uIE1vcmUg c3BlY2lmaWNhbGx5LCBORVNURURfTE9PUF9QTEFJTih4ICh5IHopKSBzYXlzCit0aGF0IHRoZSBw bGFuIHNob3VsZCBwdXQgdGhlIHJlbGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMgIngiIG9uIHRo ZSBpbm5lcgorc2lkZSBvZiBhIHBsYWluIG5lc3RlZCBsb29wIChvbmUgd2l0aG91dCBtYXRlcmlh bGl6YXRpb24gb3IgbWVtb2l6YXRpb24pCithbmQgdGhhdCBpdCBzaG91bGQgYWxzbyBwdXQgYSBq b2luIGJldHdlZW4gdGhlIHJlbGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMKKyJ5IiBhbmQgdGhl IHJlbGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMgInoiIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEg bmVzdGVkCitsb29wLiBIZW5jZSwgZm9yIGFuIE4tdGFibGUgam9pbiBwcm9ibGVtLCB0aGVyZSB3 aWxsIGJlIE4tMSBwaWVjZXMgb2Ygam9pbgorc3RyYXRlZ3kgYWR2aWNlOyBubyBqb2luIHN0cmF0 ZWd5IGFkdmljZSBpcyByZXF1aXJlZCBmb3IgdGhlIG91dGVybW9zdAordGFibGUgaW4gdGhlIGpv aW4gcHJvYmxlbS4KKworQ29uc2lkZXJpbmcgdGhhdCB3ZSBoYXZlIGJvdGggam9pbiBvcmRlciBh ZHZpY2UgYW5kIGpvaW4gc3RyYXRlZ3kgYWR2aWNlLAoraXQgbWlnaHQgc2VlbSBuYXR1cmFsIHRv IHNheSB0aGF0IE5FU1RFRF9MT09QX1BMQUlOKHgpIHNob3VsZCBiZSByZWRlZmluZWQKK3RvIG1l YW4gdGhhdCB4IHNob3VsZCBhcHBlYXIgYnkgaXRzZWxmIG9uIG9uZSBzaWRlIG9yIHRoZSBvdGhl ciBvZiBhIG5lc3RlZAorbG9vcCwgcmF0aGVyIHRoYW4gc3BlY2lmaWNhbGx5IG9uIHRoZSBpbm5l ciBzaWRlLCBidXQgdGhpcyBkZWZpbml0aW9uIGFwcGVhcnMKK3VzZWxlc3MgaW4gcHJhY3RpY2Uu IEl0IGdpdmVzIHRoZSBwbGFubmVyIHRvbyBtdWNoIGZyZWVkb20gdG8gZG8gdGhpbmdzIHRoYXQK K2JlYXIgbGl0dGxlIHJlc2VtYmxhbmNlIHRvIHdoYXQgdGhlIHVzZXIgcHJvYmFibHkgaGFkIGlu IG1pbmQuIFRoaXMgbWFrZXMKK29ubHkgYSBsaW1pdGVkIGFtb3VudCBvZiBwcmFjdGljYWwgZGlm ZmVyZW5jZSBpbiB0aGUgY2FzZSBvZiBhIG1lcmdlIGpvaW4gb3IKK3VucGFyYW1ldGVyaXplZCBu ZXN0ZWQgbG9vcCwgYnV0IGZvciBhIHBhcmFtZXRlcml6ZWQgbmVzdGVkIGxvb3Agb3IgYSBoYXNo Citqb2luLCB0aGUgdHdvIHNpZGVzIGFyZSB0cmVhdGVkIHZlcnkgZGlmZmVyZW50bHkgYW5kIHNh eWluZyB0aGF0IGEgY2VydGFpbgorcmVsYXRpb24gc2hvdWxkIGJlIGludm9sdmVkIGluIG9uZSBv ZiB0aG9zZSBvcGVyYXRpb25zIHdpdGhvdXQgc2F5aW5nIHdoaWNoCityb2xlIGl0IHNob3VsZCB0 YWtlIGlzbid0IHNheWluZyBtdWNoLgorCitUaGlzIGNob2ljZSBvZiBkZWZpbml0aW9uIGltcGxp ZXMgdGhhdCBqb2luIHN0cmF0ZWd5IGFkdmljZSBhbHNvIGltcG9zZXMgc29tZQoram9pbiBvcmRl ciBjb25zdHJhaW50cy4gRm9yIGV4YW1wbGUsIGdpdmVuIGEgam9pbiBiZXR3ZWVuIGZvbyBhbmQg YmFyLAorSEFTSF9KT0lOKGJhcikgaW1wbGllcyB0aGF0IGZvbyBpcyB0aGUgZHJpdmluZyB0YWJs ZS4gT3RoZXJ3aXNlLCBpdCB3b3VsZAorYmUgaW1wb3NzaWJsZSB0byBwdXQgYmFyIGJlbmVhdGgg dGhlIGlubmVyIHNpZGUgb2YgYSBIYXNoIEpvaW4uCisKK05vdGUgdGhhdCwgZ2l2ZW4gdGhpcyBk ZWZpbml0aW9uLCBpdCdzIHJlYXNvbmFibGUgdG8gY29uc2lkZXIgZGVsZXRpbmcgdGhlCitqb2lu IG9yZGVyIGFkdmljZSBidXQgYXBwbHlpbmcgdGhlIGpvaW4gc3RyYXRlZ3kgYWR2aWNlLiBGb3Ig ZXhhbXBsZSwKK2NvbnNpZGVyIGEgc3RhciBzY2hlbWEgd2l0aCB0YWJsZXMgZmFjdCwgZGltMSwg ZGltMiwgZGltMywgZGltNCwgYW5kIGRpbTUuCitUaGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg YWR2aWNlIG1pZ2h0IHNwZWNpZnkgSk9JTl9PUkRFUihmYWN0IGRpbTEgZGltMworZGltNCBkaW0y IGRpbTUpIEhBU0hfSk9JTihkaW0yIGRpbTQpIE5FU1RFRF9MT09QX1BMQUlOKGRpbTEgZGltMyBk aW01KS4KK0RlbGV0aW5nIHRoZSBKT0lOX09SREVSIGFkdmljZSBhbGxvd3MgdGhlIHBsYW5uZXIg dG8gcmVvcmRlciB0aGUgam9pbnMKK2hvd2V2ZXIgaXQgbGlrZXMgd2hpbGUgc3RpbGwgZm9yY2lu ZyB0aGUgc2FtZSBjaG9pY2Ugb2Ygam9pbiBtZXRob2QuIFRoaXMKK3NlZW1zIHBvdGVudGlhbGx5 IHVzZWZ1bCwgYW5kIGlzIG9uZSByZWFzb24gd2h5IGEgdW5pZmllZCBzeW50YXggdGhhdCBjb250 cm9scworYm90aCBqb2luIG9yZGVyIGFuZCBqb2luIG1ldGhvZCBpbiBhIHNpbmdsZSBsb2N1dGlv biB3YXMgbm90IGNob3Nlbi4KKworQWR2aWNlIENvbXBsZXRlbmVzcworPT09PT09PT09PT09PT09 PT09PQorCitBbiBlc3NlbnRpYWwgZ3VpZGluZyBwcmluY2lwbGUgaXMgdGhhdCBubyBpbmZlcmVu Y2UgbWF5IG1hZGUgb24gdGhlIGJhc2lzCitvZiB0aGUgYWJzZW5jZSBvZiBhZHZpY2UuIFRoZSB1 c2VyIGlzIGVudGl0bGVkIHRvIHJlbW92ZSBhbnkgcG9ydGlvbiBvZiB0aGUKK2dlbmVyYXRlZCBh ZHZpY2Ugd2hpY2ggdGhleSBkZWVtIHVuc3VpdGFibGUgb3IgY291bnRlcnByb2R1Y3RpdmUgYW5k IHRoZQorcmVzdWx0IHNob3VsZCBvbmx5IGJlIHRvIGluY3JlYXNlIHRoZSBmbGV4aWJpbGl0eSBh ZmZvcmRlZCB0byB0aGUgcGxhbm5lci4KK1RoaXMgbWVhbnMgdGhhdCBpZiBhZHZpY2UgY2FuIHNh eSB0aGF0IGEgY2VydGFpbiBvcHRpbWl6YXRpb24gb3IgdGVjaG5pcXVlCitzaG91bGQgYmUgdXNl ZCwgaXQgc2hvdWxkIGFsc28gYmUgYWJsZSB0byBzYXkgdGhhdCB0aGUgb3B0aW1pemF0aW9uIG9y Cit0ZWNobmlxdWUgc2hvdWxkIG5vdCBiZSB1c2VkLiBXZSBzaG91bGQgbmV2ZXIgYXNzdW1lIHRo YXQgdGhlIGFic2VuY2Ugb2YgYW4KK2luc3RydWN0aW9uIHRvIGRvIGEgY2VydGFpbiB0aGluZyBt ZWFucyB0aGF0IGl0IHNob3VsZCBub3QgYmUgZG9uZTsgYWxsCitpbnN0cnVjdGlvbnMgbXVzdCBi ZSBleHBsaWNpdC4KKworU2VtaWpvaW4gVW5pcXVlbmVzcworPT09PT09PT09PT09PT09PT09PQor CitGYWNlZCB3aXRoIGEgc2VtaWpvaW4sIHRoZSBwbGFubmVyIGNvbnNpZGVycyBib3RoIGEgZGly ZWN0IGltcGxlbWVudGF0aW9uCithbmQgYSBwbGFuIHdoZXJlIHRoZSBvbmUgc2lkZSBpcyBtYWRl IHVuaXF1ZSBhbmQgdGhlbiBhbiBpbm5lciBqb2luIGlzCitwZXJmb3JtZWQuIFdlIGVtaXQgU0VN SUpPSU5fVU5JUVVFKCkgYWR2aWNlIHdoZW4gdGhpcyB0cmFuc2Zvcm1hdGlvbiBvY2N1cnMKK2Fu ZCBTRU1JSk9JTl9OT05fVU5JUVVFKCkgYWR2aWNlIHdoZW4gaXQgZG9lc24ndC4gVGhlc2UgaXRl bXMgd29yayBsaWtlCitqb2luIHN0cmF0ZWd5IGFkdmljZTogdGhlIGlubmVyIHNpZGUgb2YgdGhl IHJlbGV2YW50IGpvaW4gaXMgbmFtZWQsIGFuZCB0aGUKK2Nob3NlbiBqb2luIG9yZGVyIG11c3Qg YmUgY29tcGF0aWJsZSB3aXRoIHRoZSBhZHZpY2UgaGF2aW5nIHNvbWUgZWZmZWN0LgorCitYWFg6 IEN1cnJlbnRseSwgU0VNSUpPSU5fTk9OX1VOSVFVRSgpIGFkdmljZSBpcyBlbWl0dGVkIGluIHNv bWUgc2l0dWF0aW9ucword2hlcmUgdGhlIFNFTUlKT0lOX1VOSVFVRSgpIGFwcHJvYWNoIHdhcyBk ZXRlcm1pbmVkIHRvIGJlIG5vbi12aWFibGU7IGlkZWFsbHksCit3ZSBzaG91bGQgYXZvaWQgdGhh dC4KKworWFhYOiBSaWdodCBzZW1pam9pbnMgaGF2ZW4ndCBiZWVuIHByb3Blcmx5IHRob3VnaHQg dGhyb3VnaC4gVGhlIGFzc29jaWF0ZWQKK2NvZGUgcHJvYmFibHkganVzdCBkb2Vzbid0IHdvcmsu CisKK1hYWDogU2VtaWpvaW4gdW5pcXVlbmVzcyBhZHZpY2UgaGFzIG5vIGF1dG9tYXRlZCB0ZXN0 cyBhbmQgbmVlZCBzdWJzdGFudGlhbGx5Cittb3JlIG1hbnVhbCB0ZXN0aW5nLgorCitQYXJ0aXRp b253aXNlCis9PT09PT09PT09PT09CisKK1BBUlRJVElPTldJU0UoKSBhZHZpc2UgY2FuIGJlIHVz ZWQgdG8gc3BlY2lmeSBib3RoIHRob3NlIHBhcnRpdGlvbndpc2Ugam9pbnMKK3doaWNoIHNob3Vs ZCBiZSBwZXJmb3JtZWQgYW5kIHRob3NlIHdoaWNoIHNob3VsZCBub3QgYmUgcGVyZm9ybWVkOyB0 aGUgaWRlYQoraXMgdGhhdCBlYWNoIGFyZ3VtZW50IHRvIFBBUlRJVElPTldJU0Ugc3BlY2lmaWVz IGEgc2V0IG9mIHJlbGF0aW9ucyB0aGF0CitzaG91bGQgYmUgc2Nhbm5lZCBwYXJ0aXRpb253aXNl IGFmdGVyIGJlaW5nIGpvaW5lZCB0byBlYWNoIG90aGVyIGFuZCBub3RoaW5nCitlbHNlLiBIZW5j ZSwgZm9yIGV4YW1wbGUsIFBBUlRJVElPTldJU0UoKHQxIHQyKSB0Mykgc3BlY2lmaWVzIHRoYXQg dGhlCitxdWVyeSBzaG91bGQgY29udGFpbiBhIHBhcnRpdGlvbndpc2Ugam9pbiBiZXR3ZWVuIHQx IGFuZCB0MiBhbmQgdGhhdCB0Mworc2hvdWxkIG5vdCBiZSBwYXJ0IG9mIGFueSBwYXJ0aXRpb253 aXNlIGpvaW4uIElmIHRoZXJlIGFyZSBubyBvdGhlciByZWxzCitpbiB0aGUgcXVlcnksIHNwZWNp ZnlpbmcganVzdCBQQVJUSVRJT05XSVNFKCh0MSB0MikpIHdvdWxkIGhhdmUgdGhlIHNhbWUKK2Vm ZmVjdCwgc2luY2UgdGhlcmUgd291bGQgYmUgbm8gb3RoZXIgcmVscyB0byB3aGljaCB0MyBjb3Vs ZCBiZSBqb2luZWQgaW4KK2EgcGFydGl0aW9ud2lzZSBmYXNoaW9uLgorCitQYXJhbGxlbCBRdWVy eSAoR2F0aGVyLCBldGMuKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRWFjaCBh cmd1bWVudCB0byBHQVRIRVIoKSBvciBHQVRIRVJfTUVSR0UoKSBpcyBhIHNpbmdsZSByZWxhdGlv biBvciBhbgorZXhhY3Qgc2V0IG9mIHJlbGF0aW9ucyBvbiB0b3Agb2Ygd2hpY2ggYSBHYXRoZXIg b3IgR2F0aGVyIE1lcmdlIG5vZGUsCityZXNwZWN0aXZlbHksIHNob3VsZCBiZSBwbGFjZWQuIEVh Y2ggYXJndW1lbnQgdG8gTk9fR0FUSEVSKCkgaXMgYSBzaW5nbGUKK3JlbGF0aW9uIHRoYXQgc2hv dWxkIG5vdCBhcHBlYXIgYmVuZWF0aCBhbnkgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlOwor dGhhdCBpcywgcGFyYWxsZWxpc20gc2hvdWxkIG5vdCBiZSB1c2VkLgorCitJbXBsaWNpdCBKb2lu IE9yZGVyIENvbnN0cmFpbnRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1do ZW4gSk9JTl9PUkRFUigpIGFkdmljZSBpcyBub3QgcHJvdmlkZWQgZm9yIGEgcGFydGljdWxhciBq b2luIHByb2JsZW0sCitvdGhlciBwaWVjZXMgb2YgYWR2aWNlIG1heSBzdGlsbCBpbmNpZGVudGFs bHkgY29uc3RyYWludCB0aGUgam9pbiBvcmRlci4KK0ZvciBleGFtcGxlLCBhIHVzZXIgd2hvIHNw ZWNpZmllcyBIQVNIX0pPSU4oKGZvbyBiYXIpKSBpcyBleHBsaWNpdGx5IHNheWluZwordGhhdCB0 aGVyZSBzaG91bGQgYmUgYSBoYXNoIGpvaW4gd2l0aCBleGFjdGx5IGZvbyBhbmQgYmFyIG9uIHRo ZSBvdXRlcgorc2lkZSBvZiBpdCwgYnV0IHRoYXQgYWxzbyBpbXBsaWVzIHRoYXQgZm9vIGFuZCBi YXIgbXVzdCBiZSBqb2luZWQgdG8KK2VhY2ggb3RoZXIgYmVmb3JlIGVpdGhlciBvZiB0aGVtIGlz IGpvaW5lZCB0byBhbnl0aGluZyBlbHNlLiBPdGhlcndpc2UsCit0aGUgam9pbiB0aGUgdXNlciBp cyBhdHRlbXB0aW5nIHRvIGNvbnN0cmFpbnQgd29uJ3QgYWN0dWFsbHkgb2NjdXIgaW4gdGhlCitx dWVyeSwgd2hpY2ggZW5kcyB1cCBsb29raW5nIGxpa2UgdGhlIHN5c3RlbSBoYXMganVzdCBkZWNp ZGVkIHRvIGlnbm9yZQordGhlIGFkdmljZSBhbHRvZ2V0aGVyLgorCitGdXR1cmUgV29yaworPT09 PT09PT09PT0KKworV2UgZG9uJ3QgaGFuZGxlIGNob2ljZSBvZiBhZ2dyZWdhdGlvbjogaXQgd291 bGQgYmUgbmljZSB0byBiZSBhYmxlIHRvIGZvcmNlCitzb3J0ZWQgb3IgZ3JvdXBlZCBhZ2dyZWdh dGlvbi4gSSdtIGd1ZXNzaW5nIHRoaXMgY2FuIGJlIGxlZnQgdG8gZnV0dXJlIHdvcmsuCisKK01v cmUgc2VyaW91c2x5LCB3ZSBkb24ndCBrbm93IGFueXRoaW5nIGFib3V0IGVhZ2VyIGFnZ3JlZ2F0 aW9uLCB3aGljaCBjb3VsZAoraGF2ZSBhIGxhcmdlIGltcGFjdCBvbiB0aGUgc2hhcGUgb2YgdGhl IHBsYW4gdHJlZS4gWFhYOiBUaGlzIG5lZWRzIHNvbWUgc3R1ZHkKK3RvIGRldGVybWluZSBob3cg bGFyZ2UgYSBwcm9ibGVtIGl0IGlzLCBhbmQgbWlnaHQgbmVlZCB0byBiZSBmaXhlZCBzb29uZXIK K3JhdGhlciB0aGFuIGxhdGVyLgorCitXZSBkb24ndCBvZmZlciBhbnkgY29udHJvbCBvdmVyIGVz dGltYXRlcywgb25seSBvdXRjb21lcy4gSXQgc2VlbXMgbGlrZSBhCitnb29kIGlkZWEgdG8gaW5j b3Jwb3JhdGUgdGhhdCBhYmlsaXR5IGF0IHNvbWUgZnV0dXJlIHBvaW50LCBhcyBwZ19oaW50X3Bs YW4KK2RvZXMuIEhvd2V2ZXIsIHNpbmNlIHByaW1hcnkgZ29hbCBvZiB0aGUgaW5pdGlhbCBkZXZl bG9wbWVudCB3b3JrIGlzIHRvIGJlCithYmxlIHRvIGluZHVjZSB0aGUgcGxhbm5lciB0byByZWNy ZWF0ZSBhIGRlc2lyZWQgcGxhbiB0aGF0IHdvcmtlZCB3ZWxsIGluCit0aGUgcGFzdCwgdGhpcyBo YXMgbm90IGJlZW4gaW5jbHVkZWQgaW4gdGhlIGluaXRpYWwgZGV2ZWxvcG1lbnQgZWZmb3J0Lgpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0IGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMDIyNGEyYWVlNwotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dApAQCAtMCwwICsxLDMy MCBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Bl cl9nYXRoZXIgPSAxOworU0VUIHBhcmFsbGVsX3NldHVwX2Nvc3QgPSAwOworU0VUIHBhcmFsbGVs X3R1cGxlX2Nvc3QgPSAwOworU0VUIG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemUgPSAwOwor U0VUIGRlYnVnX3BhcmFsbGVsX3F1ZXJ5ID0gb2ZmOworQ1JFQVRFIFRBQkxFIGd0X2RpbSAoaWQg c2VyaWFsIHByaW1hcnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBmYWxzZSk7CitJTlNFUlQgSU5UTyBndF9kaW0gKGRpbSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0 IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgZ3RfZGltOwor Q1JFQVRFIFRBQkxFIGd0X2ZhY3QgKAorCWlkIGludCBub3QgbnVsbCwKKwlkaW1faWQgaW50ZWdl ciBub3QgbnVsbCByZWZlcmVuY2VzIGd0X2RpbSAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGd0X2ZhY3QKKwlTRUxFQ1QgZywgKGclMykrMSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2ZhY3Q7 CistLSBCeSBkZWZhdWx0LCB3ZSBleHBlY3QgR2F0aGVyIE1lcmdlIHdpdGggYSBwYXJhbGxlbCBo YXNoIGpvaW4uCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQu aWQ7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgR2F0aGVyIE1lcmdlCisgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgIC0+ICBTb3J0Cisg ICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgICAgICAg ICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgICAgICAgICAgICAg IC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2Vx IFNjYW4gb24gZ3RfZGltIGQKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSX01FUkdF KChmIGQpKQorKDE0IHJvd3MpCisKKy0tIEZvcmNlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb2Yg Ym90aCByZWxhdGlvbnMgdG9nZXRoZXIuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5k aW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR2F0aGVyIE1lcmdlCisgICBXb3JrZXJzIFBs YW5uZWQ6IDEKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAg ICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKGYu ZGltX2lkID0gZC5pZCkKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBn dF9mYWN0IGYKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAg ICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIEdBVEhFUl9NRVJHRSgoZiBkKSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBT RVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0UoKGYgZCkpCisoMTYgcm93cykKKworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoKGYgZCkpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0CisgICBTb3J0IEtl eTogZi5kaW1faWQKKyAgIC0+ICBHYXRoZXIKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQor ICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25k OiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2Fu IG9uIGd0X2ZhY3QgZgorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKChmIGQpKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNF UV9TQ0FOKGYgZCkKKyAgIEdBVEhFUigoZiBkKSkKKygxNiByb3dzKQorCitDT01NSVQ7CistLSBG b3JjZSBhIHNlcGFyYXRlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb3BlcmF0aW9uIGZvciBlYWNo IHJlbGF0aW9uLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dh dGhlcl9tZXJnZShmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JE RVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAg R2F0aGVyIE1lcmdlCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBT b3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgICAgICAgIC0+ ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAg ICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAg ICAgIFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4g b24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUl9NRVJHRShmKSAv KiBtYXRjaGVkICovCisgICBHQVRIRVJfTUVSR0UoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihk KQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSX01FUkdFKGYgZCkKKygyMCByb3dzKQorCitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihmIGQpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBn dF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENv bmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYu ZGltX2lkCisgICAgICAgICAtPiAgR2F0aGVyCisgICAgICAgICAgICAgICBXb3JrZXJzIFBsYW5u ZWQ6IDEKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYK KyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZC5pZAorICAgICAgICAgLT4gIEdhdGhl cgorICAgICAgICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAgICAgICAtPiAg UGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IEdBVEhFUihmKSAvKiBtYXRjaGVkICovCisgICBHQVRIRVIoZCkgLyogbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9Q TEFJTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSKGYgZCkKKygyMCByb3dzKQorCitD T01NSVQ7CistLSBGb3JjZSBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb24gb25lIHJlbGF0aW9u IGJ1dCBubyBwYXJhbGxlbGlzbSBvbiBvdGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZikgbm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBn dF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENv bmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgR2F0aGVyIE1lcmdlCisgICAgICAgICBXb3Jr ZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtl eTogZi5kaW1faWQKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9m YWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGd0X2RpbV9wa2V5IG9uIGd0X2RpbSBkCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoZikgLyogbWF0Y2hlZCAqLwor ICAgTk9fR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYp CisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmd0X2RpbV9wa2V5KQorICAgR0FUSEVSX01FUkdFKGYp CisgICBOT19HQVRIRVIoZCkKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ2dhdGhlcl9tZXJnZShkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRp bV9pZCA9IGQuaWQpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgR2F0aGVyIE1lcmdlCisg ICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAg ICAgICBTb3J0IEtleTogZC5pZAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2Fu IG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoZCkg LyogbWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkK KyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUl9NRVJHRShkKQorICAgTk9fR0FUSEVSKGYpCiso MTkgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZikg bm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIg QlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBndF9kaW1fcGtleSBvbiBndF9kaW0gZAorICAgLT4gIFNvcnQKKyAgICAg ICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIEdhdGhlcgorICAgICAgICAgICAg ICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNj YW4gb24gZ3RfZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoZikgLyog bWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAg IFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmd0X2RpbV9wa2V5KQorICAgR0FU SEVSKGYpCisgICBOT19HQVRIRVIoZCkKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRp bV9pZCA9IGQuaWQpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgU29ydAorICAgICAgICAg U29ydCBLZXk6IGQuaWQKKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtl cnMgUGxhbm5lZDogMQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0 X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoZCkgLyogbWF0Y2hlZCAq LworICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FO KGYgZCkKKyAgIEdBVEhFUihkKQorICAgTk9fR0FUSEVSKGYpCisoMTkgcm93cykKKworQ09NTUlU OworLS0gRm9yY2Ugbm8gR2F0aGVyIG9yIEdhdGhlciBNZXJnZSB1c2UgYXQgYWxsLgorQkVHSU47 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ25vX2dhdGhlcihmIGQpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYg Sk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2Ug Q29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGd0X2RpbV9w a2V5IG9uIGd0X2RpbSBkCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lk CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBOT19HQVRIRVIoZikgLyogbWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGQpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAg IE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVi bGljLmd0X2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygxNSByb3dzKQorCitDT01NSVQ7 CistLSBDYW4ndCBmb3JjZSBHYXRoZXIgTWVyZ2Ugd2l0aG91dCB0aGUgT1JERVIgQlkgY2xhdXNl LCBidXQganVzdCBHYXRoZXIgaXMgT0suCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5k aW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEdhdGhlcgorICAgRGlzYWJsZWQ6IHRydWUKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAg LT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBk LmlkKQorICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAg ICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2Nh biBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdFKChm IGQpKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FU SEVSKChmIGQpKQorKDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnZ2F0aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOwor ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdhdGhlcgorICAg V29ya2VycyBQbGFubmVkOiAxCisgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICBI YXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNj YW4gb24gZ3RfZmFjdCBmCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAg ICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBHQVRIRVIoKGYgZCkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBk KQorICAgR0FUSEVSKChmIGQpKQorKDE0IHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3JkZXIub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5lODc2NTIzNzBjMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQKQEAgLTAsMCArMSwyOTIg QEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJf Z2F0aGVyID0gMDsKK0NSRUFURSBUQUJMRSBqb19kaW0xIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5 LCBkaW0xIHRleHQsIHZhbDEgaW50KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNl KTsKK0lOU0VSVCBJTlRPIGpvX2RpbTEgKGlkLCBkaW0xLCB2YWwxKQorCVNFTEVDVCBnLCAnc29t ZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgMykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2RpbTE7CitDUkVBVEUgVEFCTEUgam9fZGlt MiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkKKwlXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19kaW0yIChpZCwgZGlt MiwgdmFsMikKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDcpICsg MQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9f ZGltMjsKK0NSRUFURSBUQUJMRSBqb19mYWN0ICgKKwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGlt MV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9fZGltMSAoaWQpLAorCWRpbTJfaWQg aW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpvX2RpbTIgKGlkKQorKSBXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19mYWN0CisJU0VMRUNUIGcsIChn JTEwMCkrMSwgKGclMTAwKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFD VVVNIEFOQUxZWkUgam9fZmFjdDsKKy0tIFdlIGV4cGVjdCB0byBqb2luIHRvIGQyIGZpcnN0IGFu ZCB0aGVuIGQxLCBzaW5jZSB0aGUgY29uZGl0aW9uIG9uIGQyCistLSBpcyBtb3JlIHNlbGVjdGl2 ZS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2Zh Y3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBK T0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQg dmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAg SGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEp CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIoZiBkMiBkMSkKKyAgIEhBU0hfSk9JTihkMiBkMSkKKyAgIFNFUV9TQ0FOKGYg ZDIgZDEpCisgICBOT19HQVRIRVIoZiBkMSBkMikKKygxNiByb3dzKQorCistLSBGb3JjZSBhIGZl dyBkaWZmZXJlbnQgam9pbiBvcmRlcnMuIFNvbWUgb2YgdGhlc2UgYXJlIHZlcnkgaW5lZmZpY2ll bnQsCistLSBidXQgdGhlIHBsYW5uZXIgY29uc2lkZXJzIHRoZW0gYWxsIHZpYWJsZS4KK0JFR0lO OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDEgZDIp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2Zh Y3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBK T0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQg dmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAg SGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gam9fZGltMSBkMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEp CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg Sk9JTl9PUkRFUihmIGQxIGQyKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihmIGQxIGQyKQorICAgSEFTSF9KT0lOKGQxIGQyKQorICAgU0VRX1ND QU4oZiBkMSBkMikKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJvd3MpCisKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZU IEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0y IGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOwor ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDog KGYuZGltMV9pZCA9IGQxLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25k OiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBm CisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2Rp bTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEhh c2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwxID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo ZiBkMiBkMSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZiBkMiBkMSkKKyAgIEhBU0hfSk9JTihkMiBkMSkKKyAgIFNFUV9TQ0FOKGYgZDIgZDEp CisgICBOT19HQVRIRVIoZiBkMSBkMikKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDEgZiBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2Rp bTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRp bTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0g ZDIuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChkMS5pZCA9IGYu ZGltMV9pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMSBmIGQyKSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMSBmIGQyKQorICAg SEFTSF9KT0lOKGYgZDIpCisgICBTRVFfU0NBTihkMSBmIGQyKQorICAgTk9fR0FUSEVSKGYgZDEg ZDIpCisoMTggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2lu X29yZGVyKGYgKGQxIGQyKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lk ID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdI RVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNo IENvbmQ6ICgoZi5kaW0xX2lkID0gZDEuaWQpIEFORCAoZi5kaW0yX2lkID0gZDIuaWQpKQorICAg LT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBOZXN0 ZWQgTG9vcAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIE1h dGVyaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBk MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgKGQxIGQyKSkgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiAoZDEgZDIpKQorICAgTkVT VEVEX0xPT1BfTUFURVJJQUxJWkUoZDIpCisgICBIQVNIX0pPSU4oZDIpCisgICBTRVFfU0NBTihm IGQxIGQyKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93cykKKworQ09NTUlUOworLS0g VGhlIHVudXN1YWwgZm9ybXVsYXRpb24gb2YgdGhpcyBxdWVyeSBpcyBpbnRlbmRlZCB0byBwcmV2 ZW50IHRoZSBxdWVyeQorLS0gcGxhbm5lciBmcm9tIHJlZHVjaW5nIHRoZSBGVUxMIEpPSU4gdG8g c29tZSBvdGhlciBqb2luIHR5cGUsIHNvIHRoYXQgd2UKKy0tIGNhbiB0ZXN0IHdoYXQgaGFwcGVu cyB3aXRoIGEgam9pbiB0eXBlIHRoYXQgY2Fubm90IGJlIHJlb3JkZXJlZC4KK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBK T0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQy LmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFf aWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkpCisgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAg ICAgICBNZXJnZSBDb25kOiAoKChkMi5pZCArIDApKSA9ICgoZi5kaW0yX2lkICsgMCkpKQorICAg ICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGQyLmlkICsgMCkpCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgLT4gIFNv cnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCArIDApKQorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIE1hdGVyaWFsaXplCisgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoZDIgZiBkMSkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIE5FU1RF RF9MT09QX01BVEVSSUFMSVpFKGQxKQorICAgU0VRX1NDQU4oZDIgZiBkMSkKKyAgIE5PX0dBVEhF UihkMSBmIGQyKQorKDE4IHJvd3MpCisKKy0tIFdlIHNob3VsZCBub3QgYmUgYWJsZSB0byBmb3Jj ZSB0aGUgcGxhbm5lciB0byBqb2luIGYgdG8gZDEgZmlyc3QsIGJlY2F1c2UKKy0tIHRoYXQgaXMg bm90IGEgdmFsaWQgam9pbiBvcmRlciwgYnV0IHdlIHNob3VsZCBiZSBhYmxlIHRvIGZvcmNlIHRo ZSBwbGFubmVyCistLSB0byBtYWtlIGVpdGhlciBkMiBvciBmIHRoZSBkcml2aW5nIHRhYmxlLgor QkVHSU47CistLSBYWFg6IFRoZSBhZHZpY2UgZmVlZGJhY2sgc2F5cyAncGFydGlhbGx5IG1hdGNo ZWQnIGhlcmUgd2hpY2ggaXNuJ3QgZXhhY3RseQorLS0gd3JvbmcgZ2l2ZW4gdGhlIHdheSB0aGF0 IGZsYWcgaXMgaGFuZGxlZCBpbiB0aGUgY29kZSwgYnV0IGl0J3MgYXQgdGhlIHZlcnkKKy0tIGxl YXN0IGNvbmZ1c2luZy4gU29tZXRoaW5nIHNob3VsZCBwcm9iYWJseSBiZSBpbXByb3ZlZCBoZXJl LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDEgZDIp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2Rp bTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5k aW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFf aWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUK KyAgIEpvaW4gRmlsdGVyOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5V TEwpKQorICAgLT4gIE1lcmdlIEZ1bGwgSm9pbgorICAgICAgICAgRGlzYWJsZWQ6IHRydWUKKyAg ICAgICAgIE1lcmdlIENvbmQ6ICgoKGQyLmlkICsgMCkpID0gKChmLmRpbTJfaWQgKyAwKSkpCisg ICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAtPiAg U29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgU2VxIFNjYW4gb24gam9f ZGltMSBkMQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQxIGQyKSAv KiBwYXJ0aWFsbHkgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZDIgZiBkMSkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIE5FU1RFRF9MT09QX1BM QUlOKGQxKQorICAgU0VRX1NDQU4oZDIgZiBkMSkKKyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDIx IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihm IGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQy IE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1Ig Zi5kaW0xX2lkIElTIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmls dGVyOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQorICAgLT4g IE1lcmdlIEZ1bGwgSm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZi5kaW0yX2lkICsgMCkp ID0gKChkMi5pZCArIDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0 IEtleTogKChmLmRpbTJfaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBq b19mYWN0IGYKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChk Mi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAg IC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkKKyAgIE1F UkdFX0pPSU5fUExBSU4oZDIpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNF UV9TQ0FOKGYgZDIgZDEpCisgICBOT19HQVRIRVIoZDEgZiBkMikKKygyMCByb3dzKQorCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDIgZiBkMSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQor CUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQg KyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBO VUxMOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9 IGYuZGltMV9pZCkgT1IgKGYuZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpv aW4KKyAgICAgICAgIE1lcmdlIENvbmQ6ICgoKGQyLmlkICsgMCkpID0gKChmLmRpbTJfaWQgKyAw KSkpCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQg KyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAg ICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgTWF0ZXJpYWxp emUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGYgZDEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGYgZDEpCisgICBNRVJHRV9KT0lOX1BMQUlO KGYpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGQyIGYgZDEp CisgICBOT19HQVRIRVIoZDEgZiBkMikKKygyMCByb3dzKQorCitDT01NSVQ7CistLSBYWFg6IGFk ZCB0ZXN0cyBmb3Igam9pbiBvcmRlciBwcmVmaXggbWF0Y2hpbmcKKy0tIFhYWDogam9pbl9vcmRl cihqdXN0b25lcmVsKSBzaG91bGRuJ3QgcmVwb3J0IHBhcnRpYWxseSBtYXRjaGVkCmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0IGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzFlZTI2YTMzN2EKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0 CkBAIC0wLDAgKzEsMjk3IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFs bGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitDUkVBVEUgVEFCTEUgam9pbl9kaW0gKGlkIHNl cmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworSU5TRVJUIElOVE8gam9pbl9kaW0gKGRpbSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0 IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9pbl9kaW07 CitDUkVBVEUgVEFCTEUgam9pbl9mYWN0ICgKKwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGltX2lk IGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb2luX2RpbSAoaWQpCispIFdJVEggKGF1dG92 YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvaW5fZmFjdAorCVNFTEVDVCBn LCAoZyUzKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworQ1JFQVRFIElOREVY IGpvaW5fZmFjdF9kaW1faWQgT04gam9pbl9mYWN0IChkaW1faWQpOworVkFDVVVNIEFOQUxZWkUg am9pbl9mYWN0OworLS0gV2UgZXhwZWN0IGEgaGFzaCBqb2luIGJ5IGRlZmF1bHQuCitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9J TiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFz aCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU2VxIFNjYW4g b24gam9pbl9mYWN0IGYKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9p bl9kaW0gZAorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAg SEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBOT19HQVRIRVIoZiBkKQorKDEwIHJv d3MpCisKKy0tIFRyeSBmb3JjaW5nIGVhY2ggam9pbiBtZXRob2QgaW4gdHVybiB3aXRoIGpvaW5f ZGltIGFzIHRoZSBpbm5lciB0YWJsZS4KKy0tIEFsbCBvZiB0aGVzZSBzaG91bGQgd29yayBleGNl cHQgZm9yIE1FUkdFX0pPSU5fTUFURVJJQUxJWkU7IHRoYXQgd2lsbAorLS0gZmFpbCwgYmVjYXVz ZSB0aGUgcGxhbm5lciBrbm93cyB0aGF0IGpvaW5fZGltIChpZCkgaXMgdW5pcXVlLCBhbmQgd2ls bAorLS0gcmVmdXNlIHRvIGFkZCBtYXJrL3Jlc3RvcmUgb3ZlcmhlYWQuCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFTSF9KT0lOKGQpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpv aW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpv aW4KKyAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBq b2luX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2Rp bSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oZCkgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9K T0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9NQVRFUklBTEla RShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00g am9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBEaXNhYmxlZDogdHJ1ZQorICAgTWVyZ2UgQ29uZDog KGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1f aWQgb24gam9pbl9mYWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkg b24gam9pbl9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTUVSR0VfSk9JTl9NQVRF UklBTElaRShkKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIElOREVYX1ND QU4oZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCBkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAg Tk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ01FUkdFX0pPSU5fUExBSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29u ZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9k aW1faWQgb24gam9pbl9mYWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3Br ZXkgb24gam9pbl9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTUVSR0VfSk9JTl9Q TEFJTihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBJTkRFWF9TQ0FOKGYgcHVibGlj LmpvaW5fZmFjdF9kaW1faWQgZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihm IGQpCisoMTEgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNU RURfTE9PUF9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29w CisgICBKb2luIEZpbHRlcjogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBq b2luX2ZhY3QgZgorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g am9pbl9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfTUFURVJJ QUxJWkUoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZiBkKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZCkKKyAgIFNFUV9TQ0FOKGYg ZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NRU1PSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgU2VxIFNj YW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBNZW1vaXplCisgICAgICAgICBDYWNoZSBLZXk6IGYu ZGltX2lkCisgICAgICAgICBDYWNoZSBNb2RlOiBsb2dpY2FsCisgICAgICAgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgICAgICAgICAgICAgIElu ZGV4IENvbmQ6IChpZCA9IGYuZGltX2lkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVT VEVEX0xPT1BfTUVNT0laRShkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihmIGQpCisgICBORVNURURfTE9PUF9NRU1PSVpFKGQpCisgICBTRVFf U0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FU SEVSKGYgZCkKKygxNSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J05FU1RFRF9MT09QX1BMQUlOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQg PSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIE5lc3RlZCBMb29wCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBJ bmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAgICAgICAgSW5k ZXggQ29uZDogKGlkID0gZi5kaW1faWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNU RURfTE9PUF9QTEFJTihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihmIGQpCisgICBORVNURURfTE9PUF9QTEFJTihkKQorICAgU0VRX1NDQU4o ZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihm IGQpCisoMTIgcm93cykKKworQ09NTUlUOworLS0gTm93IHRyeSBmb3JjaW5nIGVhY2ggam9pbiBt ZXRob2QgaW4gdHVybiB3aXRoIGpvaW5fZmFjdCBhcyB0aGUgaW5uZXIKKy0tIHRhYmxlLiBBbGwg b2YgdGhlc2Ugc2hvdWxkIHdvcmsuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnSEFTSF9KT0lOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQg PSBkLmlkOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAo ZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ICBI YXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIEhBU0hfSk9JTihmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBIQVNIX0pPSU4oZikKKyAgIFNFUV9TQ0FO KGQgZikKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGYpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpv aW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpv aW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAg ICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3Qg ZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTUVSR0VfSk9JTl9NQVRFUklBTElaRShmKSAv KiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYp CisgICBNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpv aW5fZGltX3BrZXkgZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCkKKyAgIE5PX0dBVEhFUihmIGQp CisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9K T0lOX1BMQUlOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5k aW1faWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGlt IGQKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0 IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAg TUVSR0VfSk9JTl9QTEFJTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5 IGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBkKQorKDExIHJvd3Mp CisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUFURVJJ QUxJWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBG Uk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0 ZXI6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorICAg LT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAg IE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpCisgICBTRVFfU0NBTihkIGYpCisgICBOT19HQVRI RVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn TkVTVEVEX0xPT1BfTUVNT0laRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgU2VxIFNjYW4gb24g am9pbl9kaW0gZAorICAgLT4gIE1lbW9pemUKKyAgICAgICAgIENhY2hlIEtleTogZC5pZAorICAg ICAgICAgQ2FjaGUgTW9kZTogbG9naWNhbAorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg am9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgorICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKGRpbV9pZCA9IGQuaWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9P UF9NRU1PSVpFKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGQgZikKKyAgIE5FU1RFRF9MT09QX01FTU9JWkUoZikKKyAgIFNFUV9TQ0FOKGQp CisgICBJTkRFWF9TQ0FOKGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIo ZiBkKQorKDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVT VEVEX0xPT1BfUExBSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQu aWQ7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyAgICAg ICAgIEluZGV4IENvbmQ6IChkaW1faWQgPSBkLmlkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgTkVTVEVEX0xPT1BfUExBSU4oZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZikKKyAgIFNF UV9TQ0FOKGQpCisgICBJTkRFWF9TQ0FOKGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQpCisgICBO T19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK0NPTU1JVDsKKy0tIFdlIGNhbid0IGZvcmNlIGEg Zm9yZWlnbiBqb2luIGJldHdlZW4gdGhlc2UgdGFibGVzLCBiZWNhdXNlIHRoZXkKKy0tIGFyZW4n dCBmb3JlaWduIHRhYmxlcy4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdGT1JFSUdOX0pPSU4oKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNhYmxlZDogdHJ1ZQorICAgLT4gIFNlcSBTY2FuIG9u IGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpv aW5fZGltIGQKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGltX2lkKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgRk9SRUlHTl9KT0lOKChmIGQpKSAvKiBtYXRjaGVkLCBmYWlsZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RF RF9MT09QX1BMQUlOKGQpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5q b2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygxMyByb3dzKQorCitDT01NSVQ7CmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rv ci5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5v dXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgwMjRhMDYzYTA0Ci0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9sb2NhbF9j b2xsZWN0b3Iub3V0CkBAIC0wLDAgKzEsNjUgQEAKK0NSRUFURSBFWFRFTlNJT04gcGdfcGxhbl9h ZHZpY2U7CitTRVQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7CistLSBUcnkgY2xlYXJpbmcg YWR2aWNlIGJlZm9yZSB3ZSd2ZSBjb2xsZWN0ZWQgYW55LgorU0VMRUNUIHBnX2NsZWFyX2NvbGxl Y3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIFNldCBh IHNtYWxsIGFkdmljZSBjb2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQgd2UnbGwgZXhjZWVkIGl0Lgor U0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAyOworLS0gU2V0IHVw IGEgZHVtbXkgdGFibGUuCitDUkVBVEUgVEFCTEUgZHVtbXlfdGFibGUgKGEgaW50IHByaW1hcnkg a2V5LCBiIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UsIHBhcmFsbGVs X3dvcmtlcnMgPSAwKTsKKy0tIFRlc3QgcXVlcmllcy4KK1NFTEVDVCAqIEZST00gZHVtbXlfdGFi bGUgYSwgZHVtbXlfdGFibGUgYjsKKyBhIHwgYiB8IGEgfCBiIAorLS0tKy0tLSstLS0rLS0tCiso MCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlOworIGEgfCBiIAorLS0tKy0tLQor KDAgcm93cykKKworLS0gU2hvdWxkIHJldHVybiB0aGUgYWR2aWNlIGZyb20gdGhlIHNlY29uZCB0 ZXN0IHF1ZXJ5LgorU0VMRUNUIGFkdmljZSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2 aWNlKCkgT1JERVIgQlkgaWQgTElNSVQgMTsKKyAgICAgICAgIGFkdmljZSAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU0VRX1NDQU4oZHVtbXlfdGFibGUpICsKKyBOT19HQVRI RVIoZHVtbXlfdGFibGUpCisoMSByb3cpCisKKy0tIE5vdyB0cnkgY2xlYXJpbmcgYWR2aWNlIGFn YWluLgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBwZ19jbGVh cl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgCisoMSByb3cpCisKKy0tIFJhaXNlIHRoZSBjb2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQg dGhlIGNvbGxlY3RvciB1c2VzIG11bHRpcGxlIGNodW5rcy4KK1NFVCBwZ19wbGFuX2FkdmljZS5s b2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjAwMDsKKy0tIFB1c2ggYSBidW5jaCBvZiBxdWVyaWVz IHRocm91Z2ggdGhlIGNvbGxlY3Rvci4KK0RPICQkCitCRUdJTgorCUZPUiB4IElOIDEuLjIwMDAg TE9PUAorCQlFWEVDVVRFICdTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlJzsKKwlFTkQgTE9PUDsK K0VORAorJCQ7CistLSBDaGVjayB0aGF0IHRoZSBjb2xsZWN0b3Igd29ya2VkLgorU0VMRUNUIENP VU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBjb3VudCAKKy0t LS0tLS0KKyAgMjAwMAorKDEgcm93KQorCistLSBBbmQgY2xlYXIgb25lIG1vcmUgdGltZSwgdG8g dmVyaWZ5IHRoYXQgdGhpcyBkb2Vzbid0IGNhdXNlIGEgcHJvYmxlbQorLS0gZXZlbiB3aXRoIGEg bGFyZ2VyIG51bWJlciBvZiBlbnRyaWVzLgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2Nh bF9hZHZpY2UoKTsKKyBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lzZS5vdXQgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0Cm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kZjBmMDU1MzFkNQotLS0gL2Rldi9udWxsCisrKyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lzZS5vdXQKQEAgLTAsMCAr MSwyNDMgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vy c19wZXJfZ2F0aGVyID0gMDsKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luID0gdHJ1ZTsK K0NSRUFURSBUQUJMRSBwdDEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFs MSBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHQxYSBQQVJU SVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MWIgUEFSVElUSU9OIE9GIHB0 MSBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFjIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZB TFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBm YWxzZSk7CitJTlNFUlQgSU5UTyBwdDEgKGlkLCBkaW0xLCB2YWwxKQorCVNFTEVDVCBnLCAnc29t ZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgMykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDMwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdDE7CitDUkVBVEUgVEFCTEUgcHQyIChpZCBp bnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50KQorCVBBUlRJVElPTiBCWSBS QU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0MmEgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVT IEZST00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsK K0NSRUFURSBUQUJMRSBwdDJiIFBBUlRJVElPTiBPRiBwdDIgRk9SIFZBTFVFUyBGUk9NICgxMDAx KSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUg VEFCTEUgcHQyYyBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMw MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQy IChpZCwgZGltMiwgdmFsMikKKwlTRUxFQ1QgZywgJ3NvbWUgb3RoZXIgdGV4dCAnIHx8IGcsIChn ICUgNSkgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDApIGc7CitWQUNVVU0gQU5B TFlaRSBwdDI7CitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0z IHRleHQsIHZhbDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxF IHB0M2EgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDNiIFBBUlRJ VElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQzYyBQQVJUSVRJT04gT0Yg cHQzIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwgZGltMywgdmFsMykKKwlTRUxF Q1QgZywgJ2EgdGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHQzOworQ1JFQVRFIFRB QkxFIHB0bWlzbWF0Y2ggKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbW0gdGV4dCwgdmFsbSBp bnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaGEg UEFSVElUSU9OIE9GIHB0bWlzbWF0Y2gKKyAgICBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxNTAx KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdG1p c21hdGNoYiBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMTUw MSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJU IElOVE8gcHRtaXNtYXRjaCAoaWQsIGRpbW0sIHZhbG0pCisJU0VMRUNUIGcsICd5ZXQgYW5vdGhl ciB0ZXh0ICcgfHwgZywgKGcgJSAyKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAw MCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0bWlzbWF0Y2g7CitFWFBMQUlOIChQTEFOX0FEVklDRSwg Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0 Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFO RCB2YWwzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzEuaWQgPSBwdDNfMS5p ZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNfMQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBwdDFhX3BrZXkgb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgSW5kZXgg Q29uZDogKGlkID0gcHQyXzEuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkK KyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAocHQyXzIuaWQgPSBwdDNfMi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwy ID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVy OiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFiX3BrZXkgb24g cHQxYiBwdDFfMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzIuaWQpCisg ICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAg ICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzMuaWQg PSBwdDNfMy5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisg ICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAt PiAgSW5kZXggU2NhbiB1c2luZyBwdDFjX3BrZXkgb24gcHQxYyBwdDFfMworICAgICAgICAgICAg ICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzMuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2 YWwxID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0Mi9wdWJs aWMucHQyYSBwdDMvcHVibGljLnB0M2EgcHQxL3B1YmxpYy5wdDFhKQorICAgSk9JTl9PUkRFUihw dDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiIHB0MS9wdWJsaWMucHQxYikKKyAgIEpPSU5f T1JERVIocHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYyBwdDEvcHVibGljLnB0MWMpCisg ICBORVNURURfTE9PUF9QTEFJTihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9w dWJsaWMucHQxYykKKyAgIEhBU0hfSk9JTihwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNi IHB0My9wdWJsaWMucHQzYykKKyAgIFNFUV9TQ0FOKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGlj LnB0M2EgcHQyL3B1YmxpYy5wdDJiIHB0My9wdWJsaWMucHQzYgorICAgIHB0Mi9wdWJsaWMucHQy YyBwdDMvcHVibGljLnB0M2MpCisgICBJTkRFWF9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdWJsaWMu cHQxYV9wa2V5IHB0MS9wdWJsaWMucHQxYiBwdWJsaWMucHQxYl9wa2V5CisgICAgcHQxL3B1Ymxp Yy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkpCisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyIHB0Mykp CisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGlj LnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQy YyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyg0NyBy b3dzKQorCistLSBTdXBwcmVzcyBwYXJ0aXRpb253aXNlIGpvaW4sIG9yIGRvIGl0IGp1c3QgcGFy dGlhbGx5LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJ VElPTldJU0UocHQxIHB0MiBwdDMpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYp CitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBw dDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAx OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAocHQxLmlkID0gcHQyLmlkKQorICAgLT4g IEFwcGVuZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWEgcHQxXzEKKyAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWIgcHQx XzIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB0MWMgcHQxXzMKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAg LT4gIEhhc2gKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29u ZDogKHB0Mi5pZCA9IHB0My5pZCkKKyAgICAgICAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0 Ml8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgQXBwZW5kCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNfMQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBQQVJUSVRJT05XSVNFKHB0MSkgLyogbWF0Y2hlZCAqLworICAgUEFSVElUSU9OV0lTRShw dDIpIC8qIG1hdGNoZWQgKi8KKyAgIFBBUlRJVElPTldJU0UocHQzKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDEgKHB0MiBwdDMpKQorICAg SEFTSF9KT0lOKHB0MyBwdDMpCisgICBTRVFfU0NBTihwdDEvcHVibGljLnB0MWEgcHQxL3B1Ymxp Yy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0 MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IKKyAgICBw dDMvcHVibGljLnB0M2MpCisgICBQQVJUSVRJT05XSVNFKHB0MSBwdDIgcHQzKQorICAgTk9fR0FU SEVSKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjIHB0Mi9w dWJsaWMucHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMgcHQzL3B1Ymxp Yy5wdDNhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisoNDAgcm93cykKKworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKChwdDEgcHQyKSBw dDMpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0 MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAg IEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgor ICAgSGFzaCBDb25kOiAocHQxLmlkID0gcHQzLmlkKQorICAgLT4gIEFwcGVuZAorICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQxXzEuaWQgPSBwdDJf MS5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFhIHB0MV8xCisgICAgICAg ICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAtPiAgSGFz aCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDFfMi5pZCA9IHB0Ml8yLmlkKQor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWIgcHQxXzIKKyAgICAgICAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0MV8zLmlkID0gcHQyXzMuaWQpCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYyBwdDFfMworICAgICAgICAgICAgICAgICAgICAg RmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBBcHBl bmQKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0M18zCisgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFBB UlRJVElPTldJU0UoKHB0MSBwdDIpKSAvKiBtYXRjaGVkICovCisgICBQQVJUSVRJT05XSVNFKHB0 MykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo cHQxL3B1YmxpYy5wdDFhIHB0Mi9wdWJsaWMucHQyYSkKKyAgIEpPSU5fT1JERVIocHQxL3B1Ymxp Yy5wdDFiIHB0Mi9wdWJsaWMucHQyYikKKyAgIEpPSU5fT1JERVIocHQxL3B1YmxpYy5wdDFjIHB0 Mi9wdWJsaWMucHQyYykKKyAgIEpPSU5fT1JERVIoe3B0MSBwdDJ9IHB0MykKKyAgIEhBU0hfSk9J TihwdDIvcHVibGljLnB0MmEgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMpCisg ICBTRVFfU0NBTihwdDEvcHVibGljLnB0MWEgcHQyL3B1YmxpYy5wdDJhIHB0MS9wdWJsaWMucHQx YiBwdDIvcHVibGljLnB0MmIKKyAgICBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJjIHB0 My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IKKyAgICBwdDMvcHVibGljLnB0M2MpCisgICBQ QVJUSVRJT05XSVNFKChwdDEgcHQyKSBwdDMpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFh IHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQy L3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5w dDNiIHB0My9wdWJsaWMucHQzYykKKyg0NyByb3dzKQorCitDT01NSVQ7CistLSBDYW4ndCBmb3Jj ZSBhIHBhcnRpdGlvbndpc2Ugam9pbiB3aXRoIGEgbWlzbWF0Y2hlZCB0YWJsZS4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKChwdDEgcHRt aXNtYXRjaCkpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NIHB0MSwgcHRtaXNtYXRjaCBXSEVSRSBwdDEuaWQgPSBwdG1pc21hdGNoLmlkOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJs ZWQ6IHRydWUKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFhIHB0 MV8xCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYiBwdDFfMgorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB0MWMgcHQxXzMKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBJbmRleCBT Y2FuIHVzaW5nIHB0bWlzbWF0Y2hhX3BrZXkgb24gcHRtaXNtYXRjaGEgcHRtaXNtYXRjaF8xCisg ICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDEuaWQpCisgICAgICAgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBwdG1pc21hdGNoYl9wa2V5IG9uIHB0bWlzbWF0Y2hiIHB0bWlzbWF0Y2hf MgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQxLmlkKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0bWlzbWF0Y2gpKSAvKiBtYXRjaGVk LCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0MSBw dG1pc21hdGNoKQorICAgTkVTVEVEX0xPT1BfUExBSU4ocHRtaXNtYXRjaCkKKyAgIFNFUV9TQ0FO KHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQorICAgSU5E RVhfU0NBTihwdG1pc21hdGNoL3B1YmxpYy5wdG1pc21hdGNoYSBwdWJsaWMucHRtaXNtYXRjaGFf cGtleQorICAgIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hiIHB1YmxpYy5wdG1pc21hdGNo Yl9wa2V5KQorICAgUEFSVElUSU9OV0lTRShwdDEgcHRtaXNtYXRjaCkKKyAgIE5PX0dBVEhFUihw dDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYworICAgIHB0bWlz bWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hhIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hiKQor KDIyIHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv ZXhwZWN0ZWQvc2Nhbi5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4u b3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42MWYzNjFmY2Y5Ywot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5v dXQKQEAgLTAsMCArMSw3NTcgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFy YWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBzZXFfcGFnZV9jb3N0ID0gMC4xOwor U0VUIHJhbmRvbV9wYWdlX2Nvc3QgPSAwLjE7CitTRVQgY3B1X3R1cGxlX2Nvc3QgPSAwOworU0VU IGNwdV9pbmRleF90dXBsZV9jb3N0ID0gMDsKK0NSRUFURSBUQUJMRSBzY2FuX3RhYmxlIChhIGlu dCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNl KTsKK0lOU0VSVCBJTlRPIHNjYW5fdGFibGUKKwlTRUxFQ1QgZywgJ3NvbWUgdGV4dCAnIHx8IGcg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwKSBnOworQ1JFQVRFIElOREVYIHNjYW5fdGFi bGVfYiBPTiBzY2FuX3RhYmxlIFVTSU5HIGJyaW4gKGIpOworVkFDVVVNIEFOQUxZWkUgc2Nhbl90 YWJsZTsKKy0tIFNlcXVlbnRpYWwgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgIFFVRVJZIFBMQU4gICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVS KHNjYW5fdGFibGUpCisoNCByb3dzKQorCistLSBJbmRleCBzY2FuCitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1 c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAx KQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJs aWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNSByb3dzKQor CistLSBJbmRleC1vbmx5IHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5n IHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVi bGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDUgcm93cykK KworLS0gQml0bWFwIGhlYXAgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ICdzb21lIHRleHQgOCc7CisgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhl YXAgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBSZWNoZWNrIENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4 Jzo6dGV4dCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBzY2FuX3RhYmxlX2IKKyAgICAg ICAgIEluZGV4IENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFi bGVfYikKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworLS0gVElEIHNjYW4K K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBXSEVSRSBjdGlkID0gJygwLDEpJzsKKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRpZCBTY2FuIG9uIHNj YW5fdGFibGUKKyAgIFRJRCBDb25kOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoNSByb3dzKQorCistLSBUSUQgcmFuZ2Ugc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICco MSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUaWQgUmFuZ2UgU2Nh biBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKChjdGlkID4gJygxLDEpJzo6dGlkKSBBTkQg KGN0aWQgPCAnKDIsMSknOjp0aWQpKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFRJRF9T Q0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg1IHJvd3MpCisKKy0t IFRyeSBmb3JjaW5nIGVhY2ggb2Ygb3VyIHRlc3QgcXVlcmllcyB0byB1c2UgdGhlIHNjYW4gdHlw ZSB0aGV5CistLSB3YW50ZWQgdG8gdXNlIGFueXdheS4gVGhpcyBzaG91bGQgc3VjY2VlZC4KK0JF R0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3Rh YmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGU7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxl CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRj aGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkK KyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDYgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBz Y2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5k ZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRl eCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1ND QU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90 YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBz Y2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0 bWFwIEhlYXAgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBSZWNoZWNrIENvbmQ6IChiID4gJ3NvbWUg dGV4dCA4Jzo6dGV4dCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBzY2FuX3RhYmxlX2IK KyAgICAgICAgIEluZGV4IENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxl X2IpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVB UF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfYikKKyAgIE5PX0dBVEhFUihzY2Fu X3RhYmxlKQorKDkgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdU SURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBUaWQgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKGN0aWQg PSAnKDAsMSknOjp0aWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2Fu X3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1ND QU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJ V0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBUaWQgUmFuZ2UgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKChjdGlkID4gJygx LDEpJzo6dGlkKSBBTkQgKGN0aWQgPCAnKDIsMSknOjp0aWQpKQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90 YWJsZSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRyeSB0byBmb3JjZSBhIGZ1bGwgc2NhbiBv ZiB0aGUgdGFibGUgdG8gdXNlIHNvbWUgb3RoZXIgc2NhbiB0eXBlLiBBbGwKKy0tIG9mIHRoZXNl IHdpbGwgZmFpbC4gQW4gaW5kZXggc2NhbiBvciBiaXRtYXAgaGVhcCBzY2FuIGNvdWxkIHBvdGVu dGlhbGx5CistLSBnZW5lcmF0ZSB0aGUgY29ycmVjdCBhbnN3ZXIsIGJ1dCB0aGUgcGxhbm5lciBk b2VzIG5vdCBldmVuIGNvbnNpZGVyIHRoZXNlCistLSBwb3NzaWJpbGl0aWVzIGR1ZSB0byB0aGUg bGFjayBvZiBhIFdIRVJFIGNsYXVzZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRy dWUKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2Fu X3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3 IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9T Q0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NB TihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90 YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyBy b3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5f dGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZTsKKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEg U2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhF UihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVHJ5IGFnYWluIHRvIGZvcmNl IGluZGV4IHVzZS4gVGhpcyBzaG91bGQgbm93IHN1Y2NlZWQgZm9yIHRoZSBJTkRFWF9TQ0FOCist LSBhbmQgQklUTUFQX0hFQVBfU0NBTiwgYnV0IHRoZSBJTkRFWF9PTkxZX1NDQU4gY2FuJ3QgYmUg Zm9yY2VkIGJlY2F1c2UgdGhlCistLSBxdWVyeSBmZXRjaGVzIGNvbHVtbnMgbm90IGluY2x1ZGVk IGluIHRoZSBpbmRleC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7 CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJ bmRleCBDb25kOiAoYSA+IDApCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FO KHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3Br ZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJs ZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNl cSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgICBGaWx0ZXI6IChhID4g MCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxl IHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxl KQorKDggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBf SEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIFJlY2hlY2sg Q29uZDogKGEgPiAwKQorICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHNjYW5fdGFibGVfcGtl eQorICAgICAgICAgSW5kZXggQ29uZDogKGEgPiAwKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90 YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCiso OSByb3dzKQorCitDT01NSVQ7CistLSBXZSBjYW4gZm9yY2UgYSBwcmltYXJ5IGtleSBsb29rdXAg dG8gdXNlIGEgc2VxdWVudGlhbCBzY2FuLCBidXQgd2UKKy0tIGNhbid0IGZvcmNlIGl0IHRvIHVz ZSBhbiBpbmRleC1vbmx5IHNjYW4gKGR1ZSB0byB0aGUgY29sdW1uIGxpc3QpCistLSBvciBhIFRJ RCBzY2FuIChkdWUgdG8gdGhlIGFic2VuY2Ugb2YgYSBUSUQgcXVhbCkuCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPSAxOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJs ZQorICAgRmlsdGVyOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NB TihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg U0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nh bl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg SU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRI RVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90 YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgICBJbmRleCBDb25k OiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxl KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRF WF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihz Y2FuX3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gV2UgY2FuIGZvcmNpYmx5IGRvd25n cmFkZSBhbiBpbmRleC1vbmx5IHNjYW4gdG8gYW4gaW5kZXggc2NhbiwgYnV0IHdlIGNhbid0Cist LSBmb3JjZSB0aGUgdXNlIG9mIGFuIGluZGV4IHRoYXQgdGhlIHBsYW5uZXIgdGhpbmtzIGlzIGlu YXBwbGljYWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJ TkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRl eCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNj YW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkp CisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxl X3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2lu ZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5z Y2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dB VEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRy dWUKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhf U0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYikgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhF UihzY2FuX3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gV2UgY2FuIGZvcmNlIHRoZSB1 c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4gaW4gcGxhY2Ugb2YgYSBiaXRtYXAgaGVhcCBzY2FuLAor LS0gYnV0IGEgcGxhaW4gaW5kZXggc2NhbiBvbiBhIEJSSU4gaW5kZXggaXMgbm90IHBvc3NpYmxl LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNj YW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoYiA+ICdzb21lIHRl eHQgOCc6OnRleHQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3Rh YmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4o c2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90 YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90 YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYikgLyogbWF0 Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nh bl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOwor LS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4gcmF0aGVyIHRoYW4g YSBUSUQgc2NhbiBvcgorLS0gVElEIHJhbmdlIHNjYW4uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQg PSAnKDAsMSknOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJs ZQorICAgRmlsdGVyOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFi bGUpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwx KSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoKGN0 aWQgPiAnKDEsMSknOjp0aWQpIEFORCAoY3RpZCA8ICcoMiwxKSc6OnRpZCkpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhF UihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBtb3JlIGNvbXBsZXgg c2NlbmFyaW9zIHdpdGggaW5kZXggc2NhbnMuCitCRUdJTjsKKy0tIFNob3VsZCBzdGlsbCB3b3Jr IGlmIHdlIG1lbnRpb24gdGhlIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBX SEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxl X3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3Br ZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FO KHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3Rh YmxlKQorKDcgcm93cykKKworLS0gQnV0IG5vdCBpZiB3ZSBtZW50aW9uIHRoZSB3cm9uZyBzY2hl bWEuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90 YWJsZSBjaWxidXAuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5f dGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgY2lsYnVwLnNjYW5fdGFi bGVfcGtleSkgLyogbWF0Y2hlZCwgaW5hcHBsaWNhYmxlICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisg ICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKKy0tIEl0J3MgT0sgdG8gcmVwZWF0 IHRoZSBzYW1lIGFkdmljZS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5E RVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0 Y2hlZCAqLworICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJs ZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCBy b3dzKQorCistLSBCdXQgaXQgZG9lc24ndCB3b3JrIGlmIHRoZSBpbmRleCB0YXJnZXQgaXMgZXZl biBub3Rpb25hbGx5IGRpZmZlcmVudC4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBv biBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVk LCBjb25mbGljdGluZyAqLworICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisg ICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3QgYXNz b3J0ZWQgaW5jb3JyZWN0IGFkdmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdTRVFfU0NBTihub3RoaW5nKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkg U2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDog KGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4obm90aGluZykgLyog bm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1ND QU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lO REVYX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkg U2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDog KGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihub3RoaW5nIHdo YXRzb2V2ZXIpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg SU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3Rh YmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSAvKiBtYXRjaGVk LCBpbmFwcGxpY2FibGUsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElO REVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19H QVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlciknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5f dGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IElOREVYX09OTFlfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpIC8qIG5vdCBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVi bGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nh bl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNU IGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5k ZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRl eCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1ND QU4oc2Nhbl90YWJsZSBib2d1cykgLyogbWF0Y2hlZCwgaW5hcHBsaWNhYmxlICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNj YW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09N TUlUOworLS0gVGVzdCBvdXIgYWJpbGl0eSB0byByZWZlciB0byBtdWx0aXBsZSBpbnN0YW5jZXMg b2YgdGhlIHNhbWUgYWxpYXMuCitCRUdJTjsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nh bl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcg PSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisg ICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBv biBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90 YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEg PSBnLmcpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZSBzXzEKKyAgICAgICAgIEluZGV4IENvbmQ6IChhID0gZy5nKQorIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHMg cyMyKQorICAgSU5ERVhfU0NBTihzIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkgcyMyIHB1YmxpYy5z Y2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoZyBzIHMjMikKKygxMiByb3dzKQorCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwx MCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4g c2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisg ICAtPiAgSGFzaCBMZWZ0IEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGcuZyA9IHMuYSkKKyAg ICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAg LT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgc18xCisg ICAgICAgICBJbmRleCBDb25kOiAoYSA9IGcuZykKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IFNFUV9TQ0FOKHMpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURfTE9PUF9QTEFJTihzIzIpCisgICBIQVNIX0pP SU4ocykKKyAgIFNFUV9TQ0FOKHMpCisgICBJTkRFWF9TQ0FOKHMjMiBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KQorICAgTk9fR0FUSEVSKGcgcyBzIzIpCisoMTcgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBM RUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90 YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIExlZnQgSm9pbgorICAgSGFz aCBDb25kOiAoZy5nID0gc18xLmEpCisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAg ICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBnLmcpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgc18xCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBT RVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURfTE9PUF9QTEFJTihzKQorICAgSEFTSF9KT0lO KHMjMikKKyAgIFNFUV9TQ0FOKHMjMikKKyAgIElOREVYX1NDQU4ocyBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KQorICAgTk9fR0FUSEVSKGcgcyBzIzIpCisoMTcgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSBTRVFfU0NBTihzIzIpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJp ZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZU IEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggTGVmdCBKb2luCisgICBIYXNoIENvbmQ6IChnLmcgPSBz XzEuYSkKKyAgIC0+ICBIYXNoIExlZnQgSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZy5nID0g cy5hKQorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2Nhbl90YWJs ZSBzCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgc18x CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBtYXRjaGVkICovCisg ICBTRVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBIQVNIX0pPSU4ocyBzIzIpCisgICBTRVFfU0NBTihz IHMjMikKKyAgIE5PX0dBVEhFUihnIHMgcyMyKQorKDE3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRl c3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8gc2NhbnMgd2l0aGluIGEgc3VicXVlcnkuCitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CisgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFi bGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNAeCBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5 KQorICAgTk9fR0FUSEVSKHggc0B4KQorKDUgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdI RVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGljLnNjYW5f dGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1ZXJ5IHNAdW5uYW1lZF9zdWJx dWVyeSkKKyg1IHJvd3MpCisKK0JFR0lOOworLS0gU2hvdWxkIG5vdCBtYXRjaC4KK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24g c2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTihzKSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIElOREVYX1NDQU4oc0B4IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19H QVRIRVIoeCBzQHgpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEg T0ZGU0VUIDApOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2Fu X3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIFNFUV9TQ0FOKHMpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGljLnNjYW5fdGFibGVfcGtl eSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1ZXJ5IHNAdW5uYW1lZF9zdWJxdWVyeSkKKyg3 IHJvd3MpCisKKy0tIFNob3VsZCBtYXRjaCBmaXJzdCBxdWVyeSBvbmx5LgorU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzQHgpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg cyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3Rh YmxlIHMKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VR X1NDQU4oc0B4KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VR X1NDQU4oc0B4KQorICAgTk9fR0FUSEVSKHggc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2Fu X3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgpIC8qIG5vdCBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkg cHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1ZXJ5IHNA dW5uYW1lZF9zdWJxdWVyeSkKKyg3IHJvd3MpCisKKy0tIFNob3VsZCBtYXRjaCBzZWNvbmQgcXVl cnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc0B1 bm5hbWVkX3N1YnF1ZXJ5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VU IDApIHg7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJ bmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4 IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNAdW5u YW1lZF9zdWJxdWVyeSkgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9TQ0FOKHNAeCBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVS KHggc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNF VCAwKTsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNl cSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAgRmlsdGVyOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkp CisgICBOT19HQVRIRVIodW5uYW1lZF9zdWJxdWVyeSBzQHVubmFtZWRfc3VicXVlcnkpCisoNyBy b3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVj dGVkL3N5bnRheC5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRheC5v dXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRkZGIxMmNhZTU4Ci0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgu b3V0CkBAIC0wLDAgKzEsNTkgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKKy0tIEFuIGVtcHR5 IHN0cmluZyBpcyBhbGxvd2VkLCBhbmQgc28gaXMgYW4gZW1wdHkgdGFyZ2V0IGxpc3QuCitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJyc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J1NFUV9TQ0FOKCknOworLS0gVGVzdCBhc3NvcnRlZCB2YXJpYXRpb25zIGluIGNhcGl0YWxpemF0 aW9uLCB3aGl0ZXNwYWNlLCBhbmQgd2hpY2ggcGFydHMgb2YKKy0tIHRoZSByZWxhdGlvbiBpZGVu dGlmaWVyIGFyZSBpbmNsdWRlZC4gVGhlc2Ugc2hvdWxkIGFsbCB3b3JrLgorU0VUIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTih4KSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ3NlcV9zY2FuKHhAeSknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfc2Nh bih4IzIpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4gKHgveSknOwor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcgIFNFUV9TQ0FOICggeCAvIHkgLiB6ICkgICc7 CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCJ4IiMyLyJ5Ii4ieiJAInQi KSc7CistLSBTeW50YXggZXJyb3JzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFV RU5USUFMX1NDQU4oeCknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBn X3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFVRU5USUFMX1NDQU4oeCkiCitERVRBSUw6ICBDb3Vs ZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiU0VRVUVOVElBTF9T Q0FOIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTic7CitFUlJPUjogIGlu dmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUV9T Q0FOIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IGVu ZCBvZiBpbnB1dAorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTignOworRVJS T1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6 ICJTRVFfU0NBTigiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJy b3IgYXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FO KCInOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNl LmFkdmljZSI6ICJTRVFfU0NBTigiIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTog dW50ZXJtaW5hdGVkIHF1b3RlZCBpZGVudGlmaWVyIGF0IGVuZCBvZiBpbnB1dAorU0VUIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigjJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBm b3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oIyIKK0RFVEFJ TDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIjIgor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcoKSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUg Zm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIigpIgorREVUQUlMOiAgQ291 bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIigiCitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJzEyMyc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBh cmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIjEyMyIKK0RFVEFJTDogIENvdWxkIG5v dCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIxMjMiCistLSBMZWdhbCBj b21tZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyoqLyc7CitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihfKS8qKiovJzsKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnLyogY29tbWVudCAqLyBIQVNIX0pPSU4oLyp4Ki95KSc7CitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJy8qIGNvbW1lbnQgKi8gSEFTSF9KT0lOKHkvLyp4Ki96KSc7Cist LSBVbnRlcm1pbmF0ZWQgY29tbWVudHMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8q JzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5h ZHZpY2UiOiAiLyoiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB1bnRlcm1pbmF0 ZWQgY29tbWVudCBhdCBlbmQgb2YgaW5wdXQKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn Sk9JTl9PUkRFUigiZk9PIikgLyogb29wcyc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBh cmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIkpPSU5fT1JERVIoImZPTyIpIC8qIG9v cHMiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB1bnRlcm1pbmF0ZWQgY29tbWVu dCBhdCBlbmQgb2YgaW5wdXQKKy0tIE5lc3RlZCBjb21tZW50cyBhcmUgbm90IHN1cHBvcnRlZCwg c28gdGhlIGZpcnN0IG9mIHRoZXNlIGlzIGxlZ2FsIGFuZAorLS0gdGhlIHNlY29uZCBpcyBub3Qu CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qLyovJzsKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnLyovKiBzdHVmZiAqLyovJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3Ig cGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiLyovKiBzdHVmZiAqLyovIgorREVU QUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIioi CistLSBGb3JlaWduIGpvaW4gcmVxdWlyZXMgbXVsdGlwbGUgcmVsYXRpb24gaWRlbnRpZmllcnMu CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJR05fSk9JTihhKSc7CitFUlJPUjog IGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIkZP UkVJR05fSk9JTihhKSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IEZPUkVJR05f Sk9JTiB0YXJnZXRzIG11c3QgY29udGFpbiBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGlkZW50aWZp ZXIgYXQgb3IgbmVhciAiKSIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRk9SRUlHTl9K T0lOKChhKSknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5f YWR2aWNlLmFkdmljZSI6ICJGT1JFSUdOX0pPSU4oKGEpKSIKK0RFVEFJTDogIENvdWxkIG5vdCBw YXJzZSBhZHZpY2U6IEZPUkVJR05fSk9JTiB0YXJnZXRzIG11c3QgY29udGFpbiBtb3JlIHRoYW4g b25lIHJlbGF0aW9uIGlkZW50aWZpZXIgYXQgb3IgbmVhciAiKSIKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL21l c29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNDUyZTVh ZDQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVp bGQKQEAgLTAsMCArMSw3MCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNCwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworcGdfcGxhbl9hZHZpY2Vfc291cmNlcyA9IGZp bGVzKAorICAncGdfcGxhbl9hZHZpY2UuYycsCisgICdwZ3BhX2FzdC5jJywKKyAgJ3BncGFfY29s bGVjdG9yLmMnLAorICAncGdwYV9pZGVudGlmaWVyLmMnLAorICAncGdwYV9qb2luLmMnLAorICAn cGdwYV9vdXRwdXQuYycsCisgICdwZ3BhX3BsYW5uZXIuYycsCisgICdwZ3BhX3NjYW4uYycsCisg ICdwZ3BhX3Ryb3ZlLmMnLAorICAncGdwYV93YWxrZXIuYycsCispCisKK3BncGFfc2Nhbm5lciA9 IGN1c3RvbV90YXJnZXQoJ3BncGFfc2Nhbm5lcicsCisgIGlucHV0OiAncGdwYV9zY2FubmVyLmwn LAorICBvdXRwdXQ6ICdwZ3BhX3NjYW5uZXIuYycsCisgIGNvbW1hbmQ6IGZsZXhfY21kLAorKQor Z2VuZXJhdGVkX3NvdXJjZXMgKz0gcGdwYV9zY2FubmVyCitwZ19wbGFuX2FkdmljZV9zb3VyY2Vz ICs9IHBncGFfc2Nhbm5lcgorCitwZ3BhX3BhcnNlciA9IGN1c3RvbV90YXJnZXQoJ3BncGFfcGFy c2VyJywKKyAgaW5wdXQ6ICdwZ3BhX3BhcnNlci55JywKKyAga3dhcmdzOiBiaXNvbl9rdywKKykK K2dlbmVyYXRlZF9zb3VyY2VzICs9IHBncGFfcGFyc2VyLnRvX2xpc3QoKQorcGdfcGxhbl9hZHZp Y2Vfc291cmNlcyArPSBwZ3BhX3BhcnNlcgorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycK KyAgcGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSByY19saWJfZ2VuLnByb2Nlc3Mod2luMzJ2ZXJf cmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3BnX3BsYW5fYWR2aWNlJywKKyAgICAn LS1GSUxFREVTQycsICdwZ19wbGFuX2FkdmljZSAtIGhlbHAgdGhlIHBsYW5uZXIgZ2V0IHRoZSBy aWdodCBwbGFuJyxdKQorZW5kaWYKKworcGdfcGxhbl9hZHZpY2UgPSBzaGFyZWRfbW9kdWxlKCdw Z19wbGFuX2FkdmljZScsCisgIHBnX3BsYW5fYWR2aWNlX3NvdXJjZXMsCisgIGluY2x1ZGVfZGly ZWN0b3JpZXM6IGluY2x1ZGVfZGlyZWN0b3JpZXMoJy4nKSwKKyAga3dhcmdzOiBjb250cmliX21v ZF9hcmdzLAorKQorY29udHJpYl90YXJnZXRzICs9IHBnX3BsYW5fYWR2aWNlCisKK2luc3RhbGxf ZGF0YSgKKyAgJ3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsJywKKyAgJ3BnX3BsYW5fYWR2aWNlLmNv bnRyb2wnLAorICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdzLAorKQorCit0ZXN0cyArPSB7Cisg ICduYW1lJzogJ3BnX3BsYW5fYWR2aWNlJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2Vf ZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICdyZWdyZXNzJzog eworICAgICdzcWwnOiBbCisgICAgICAnZ2F0aGVyJywKKyAgICAgICdqb2luX29yZGVyJywKKyAg ICAgICdqb2luX3N0cmF0ZWd5JywKKyAgICAgICdsb2NhbF9jb2xsZWN0b3InLAorICAgICAgJ3Bh cnRpdGlvbndpc2UnLAorICAgICAgJ3NjYW4nLAorICAgICAgJ3N5bnRheCcsCisgICAgXSwKKyAg fSwKKyAgJ3RhcCc6IHsKKyAgICAndGVzdHMnOiBbCisgICAgICAndC8wMDFfcmVncmVzcy5wbCcs CisgICAgXSwKKyAgfSwKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdf cGxhbl9hZHZpY2UtLTEuMC5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2 aWNlLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yOWY0 ZjIyNDg2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxh bl9hZHZpY2UtLTEuMC5zcWwKQEAgLTAsMCArMSw0MiBAQAorLyogY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQg aXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVj aG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlIiB0byBsb2FkIHRoaXMgZmls ZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZp Y2UoKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2NsZWFyX2NvbGxl Y3RlZF9sb2NhbF9hZHZpY2UnCitMQU5HVUFHRSBDIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9O IHBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkKK1JFVFVSTlMgdm9pZAorQVMgJ01P RFVMRV9QQVRITkFNRScsICdwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZScKK0xBTkdV QUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9h ZHZpY2UoCisJT1VUIGlkIGJpZ2ludCwKKwlPVVQgdXNlcmlkIG9pZCwKKwlPVVQgZGJpZCBvaWQs CisJT1VUIHF1ZXJ5aWQgYmlnaW50LAorCU9VVCBjb2xsZWN0aW9uX3RpbWUgdGltZXN0YW1wdHos CisJT1VUIHF1ZXJ5IHRleHQsCisJT1VUIGFkdmljZSB0ZXh0CispCitSRVRVUk5TIFNFVE9GIHJl Y29yZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2Fkdmlj ZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0X2NvbGxlY3Rl ZF9zaGFyZWRfYWR2aWNlKAorCU9VVCBpZCBiaWdpbnQsCisJT1VUIHVzZXJpZCBvaWQsCisJT1VU IGRiaWQgb2lkLAorCU9VVCBxdWVyeWlkIGJpZ2ludCwKKwlPVVQgY29sbGVjdGlvbl90aW1lIHRp bWVzdGFtcHR6LAorCU9VVCBxdWVyeSB0ZXh0LAorCU9VVCBhZHZpY2UgdGV4dAorKQorUkVUVVJO UyBTRVRPRiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfZ2V0X2NvbGxlY3RlZF9z aGFyZWRfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK1JFVk9LRSBBTEwgT04gRlVOQ1RJ T04gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkgRlJPTSBQVUJMSUM7CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmYzMmU4YjdhMGQzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jCkBAIC0wLDAgKzEsNDU0IEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiBwZ19wbGFuX2FkdmljZS5jCisgKgkgIG1haW4gZW50cnlwb2ludHMg Zm9yIGdlbmVyYXRpbmcgYW5kIGFwcGx5aW5nIHBsYW5uZXIgYWR2aWNlCisgKgorICogQ29weXJp Z2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJw Z19wbGFuX2FkdmljZS5oIgorI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9j b2xsZWN0b3IuaCIKKyNpbmNsdWRlICJwZ3BhX2lkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJwZ3Bh X291dHB1dC5oIgorI2luY2x1ZGUgInBncGFfcGxhbm5lci5oIgorI2luY2x1ZGUgInBncGFfdHJv dmUuaCIKKyNpbmNsdWRlICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAiY29tbWFuZHMvZGVm cmVtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbi5oIgorI2luY2x1ZGUgImNvbW1hbmRz L2V4cGxhaW5fZm9ybWF0LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5oIgor I2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbm5lci5oIgorI2lu Y2x1ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5LmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisK K1BHX01PRFVMRV9NQUdJQzsKKworc3RhdGljIHBncGFfc2hhcmVkX3N0YXRlICpwZ3BhX3N0YXRl ID0gTlVMTDsKK3N0YXRpYyBkc2FfYXJlYSAqcGdwYV9kc2FfYXJlYSA9IE5VTEw7CisKKy8qIEdV QyB2YXJpYWJsZXMgKi8KK2NoYXIJICAgKnBnX3BsYW5fYWR2aWNlX2FkdmljZSA9IE5VTEw7Citz dGF0aWMgYm9vbCBwZ19wbGFuX2FkdmljZV9hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2Ug PSB0cnVlOworaW50CQkJcGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDA7 CitpbnQJCQlwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdCA9IDA7CisKKy8q IFNhdmVkIGhvb2sgdmFsdWUgKi8KK3N0YXRpYyBleHBsYWluX3Blcl9wbGFuX2hvb2tfdHlwZSBw cmV2X2V4cGxhaW5fcGVyX3BsYW4gPSBOVUxMOworCisvKiBPdGhlciBmaWxlLWxldmVsIGdsb2Jh bHMgKi8KK3N0YXRpYyBpbnQJZXNfZXh0ZW5zaW9uX2lkOworc3RhdGljIE1lbW9yeUNvbnRleHQg cGdwYV9tZW1vcnlfY29udGV4dCA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIHBnX3BsYW5fYWR2aWNl X2V4cGxhaW5fb3B0aW9uX2hhbmRsZXIoRXhwbGFpblN0YXRlICplcywKKwkJCQkJCQkJCQkJCSAg RGVmRWxlbSAqb3B0LAorCQkJCQkJCQkJCQkJICBQYXJzZVN0YXRlICpwc3RhdGUpOworc3RhdGlj IHZvaWQgcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9wZXJfcGxhbl9ob29rKFBsYW5uZWRTdG10ICpw bGFubmVkc3RtdCwKKwkJCQkJCQkJCQkJCSBJbnRvQ2xhdXNlICppbnRvLAorCQkJCQkJCQkJCQkJ IEV4cGxhaW5TdGF0ZSAqZXMsCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcs CisJCQkJCQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCisJCQkJCQkJCQkJCQkgUXVlcnlF bnZpcm9ubWVudCAqcXVlcnlFbnYpOworc3RhdGljIGJvb2wgcGdfcGxhbl9hZHZpY2VfYWR2aWNl X2NoZWNrX2hvb2soY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLAorCQkJCQkJCQkJCQkgR3Vj U291cmNlIHNvdXJjZSk7CitzdGF0aWMgRGVmRWxlbSAqZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUo TGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSk7CisKKy8qCisgKiBJbml0aWFsaXplIHRoaXMg bW9kdWxlLgorICovCit2b2lkCitfUEdfaW5pdCh2b2lkKQoreworCURlZmluZUN1c3RvbVN0cmlu Z1ZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5hZHZpY2UiLAorCQkJCQkJCSAgICJhZHZpY2UgdG8g YXBwbHkgZHVyaW5nIHF1ZXJ5IHBsYW5uaW5nIiwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAg ICZwZ19wbGFuX2FkdmljZV9hZHZpY2UsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBQR0Nf VVNFUlNFVCwKKwkJCQkJCQkgICAwLAorCQkJCQkJCSAgIHBnX3BsYW5fYWR2aWNlX2FkdmljZV9j aGVja19ob29rLAorCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgTlVMTCk7CisKKwlEZWZpbmVD dXN0b21Cb29sVmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVk X2FkdmljZSIsCisJCQkJCQkJICJFWFBMQUlOIG91dHB1dCBpbmNsdWRlcyBzdXBwbGllZCBhZHZp Y2UgZXZlbiB3aXRob3V0IEVYUExBSU4gKFBMQU5fQURWSUNFKSIsCisJCQkJCQkJIE5VTEwsCisJ CQkJCQkJICZwZ19wbGFuX2FkdmljZV9hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UsCisJ CQkJCQkJIHRydWUsCisJCQkJCQkJIFBHQ19VU0VSU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBO VUxMLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMKTsKKworCURlZmluZUN1c3RvbUludFZh cmlhYmxlKCJwZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0IiwKKwkJCQkJCQki IyBvZiBhZHZpY2UgZW50cmllcyB0byByZXRhaW4gaW4gcGVyLWJhY2tlbmQgbWVtb3J5IiwKKwkJ CQkJCQlOVUxMLAorCQkJCQkJCSZwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0 LAorCQkJCQkJCTAsCisJCQkJCQkJMCwgSU5UX01BWCwKKwkJCQkJCQlQR0NfVVNFUlNFVCwKKwkJ CQkJCQkwLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMKTsKKworCURl ZmluZUN1c3RvbUludFZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9s aW1pdCIsCisJCQkJCQkJIiMgb2YgYWR2aWNlIGVudHJpZXMgdG8gcmV0YWluIGluIHNoYXJlZCBt ZW1vcnkiLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX3BsYW5fYWR2aWNlX3NoYXJlZF9jb2xs ZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJCQkJCQkJMCwgSU5UX01BWCwKKwkJCQkJCQlQR0Nf U1VTRVQsCisJCQkJCQkJMCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVM TCk7CisKKwlNYXJrR1VDUHJlZml4UmVzZXJ2ZWQoInBnX3BsYW5fYWR2aWNlIik7CisKKwkvKiBH ZXQgYW4gSUQgdGhhdCB3ZSBjYW4gdXNlIHRvIGNhY2hlIGRhdGEgaW4gYW4gRXhwbGFpblN0YXRl LiAqLworCWVzX2V4dGVuc2lvbl9pZCA9IEdldEV4cGxhaW5FeHRlbnNpb25JZCgicGdfcGxhbl9h ZHZpY2UiKTsKKworCS8qIFJlZ2lzdGVyIHRoZSBuZXcgRVhQTEFJTiBvcHRpb25zIGltcGxlbWVu dGVkIGJ5IHRoaXMgbW9kdWxlLiAqLworCVJlZ2lzdGVyRXh0ZW5zaW9uRXhwbGFpbk9wdGlvbigi cGxhbl9hZHZpY2UiLAorCQkJCQkJCQkgICBwZ19wbGFuX2FkdmljZV9leHBsYWluX29wdGlvbl9o YW5kbGVyKTsKKworCS8qIEluc3RhbGwgaG9va3MgKi8KKwlwZ3BhX3BsYW5uZXJfaW5zdGFsbF9o b29rcygpOworCXByZXZfZXhwbGFpbl9wZXJfcGxhbiA9IGV4cGxhaW5fcGVyX3BsYW5faG9vazsK KwlleHBsYWluX3Blcl9wbGFuX2hvb2sgPSBwZ19wbGFuX2FkdmljZV9leHBsYWluX3Blcl9wbGFu X2hvb2s7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHNoYXJlZCBzdGF0ZSB3aGVuIGZpcnN0IGNy ZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2luaXRfc2hhcmVkX3N0YXRlKHZvaWQgKnB0 cikKK3sKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSAocGdwYV9zaGFyZWRfc3RhdGUgKikg cHRyOworCisJTFdMb2NrSW5pdGlhbGl6ZSgmc3RhdGUtPmxvY2ssIExXTG9ja05ld1RyYW5jaGVJ ZCgicGdfcGxhbl9hZHZpY2VfbG9jayIpKTsKKwlzdGF0ZS0+ZHNhX3RyYW5jaGUgPSBMV0xvY2tO ZXdUcmFuY2hlSWQoInBnX3BsYW5fYWR2aWNlX2RzYSIpOworCXN0YXRlLT5hcmVhID0gRFNBX0hB TkRMRV9JTlZBTElEOworCXN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID0gSW52YWxpZERzYVBvaW50 ZXI7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbWVtb3J5IGNvbnRleHQgd2hl cmUgbG9uZy1saXZlZCBkYXRhIG1hbmFnZWQgYnkgdGhpcworICogbW9kdWxlIGNhbiBiZSBzdG9y ZWQuCisgKi8KK01lbW9yeUNvbnRleHQKK3BnX3BsYW5fYWR2aWNlX2dldF9tY3h0KHZvaWQpCit7 CisJaWYgKHBncGFfbWVtb3J5X2NvbnRleHQgPT0gTlVMTCkKKwkJcGdwYV9tZW1vcnlfY29udGV4 dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJ CSJwZ19wbGFuX2FkdmljZSIsCisJCQkJCQkJCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7 CisKKwlyZXR1cm4gcGdwYV9tZW1vcnlfY29udGV4dDsKK30KKworLyoKKyAqIEdldCBhIHBvaW50 ZXIgdG8gb3VyIHNoYXJlZCBzdGF0ZS4KKyAqCisgKiBJZiBubyBzaGFyZWQgc3RhdGUgZXhpc3Rz LCBjcmVhdGUgYW5kIGluaXRpYWxpemUgaXQuIElmIGl0IGRvZXMgZXhpc3QgYnV0CisgKiB0aGlz IGJhY2tlbmQgaGFzIG5vdCB5ZXQgYWNjZXNzZWQgaXQsIGF0dGFjaCB0byBpdC4gT3RoZXJ3aXNl LCBqdXN0IHJldHVybgorICogb3VyIGNhY2hlZCBwb2ludGVyLgorICoKKyAqIEFsb25nIHRoZSB3 YXksIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgTFdMb2NrIHRyYW5jaGVzIGFyZSByZWdpc3RlcmVk LgorICovCitwZ3BhX3NoYXJlZF9zdGF0ZSAqCitwZ19wbGFuX2FkdmljZV9hdHRhY2godm9pZCkK K3sKKwlpZiAocGdwYV9zdGF0ZSA9PSBOVUxMKQorCXsKKwkJYm9vbAkJZm91bmQ7CisKKwkJcGdw YV9zdGF0ZSA9CisJCQlHZXROYW1lZERTTVNlZ21lbnQoInBnX3BsYW5fYWR2aWNlIiwgc2l6ZW9m KHBncGFfc2hhcmVkX3N0YXRlKSwKKwkJCQkJCQkgICBwZ3BhX2luaXRfc2hhcmVkX3N0YXRlLCAm Zm91bmQpOworCX0KKworCXJldHVybiBwZ3BhX3N0YXRlOworfQorCisvKgorICogUmV0dXJuIGEg cG9pbnRlciB0byBwZ19wbGFuX2FkdmljZSdzIERTQSBhcmVhLCBjcmVhdGluZyBpdCBpZiBuZWVk ZWQuCisgKi8KK2RzYV9hcmVhICoKK3BnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKHZvaWQpCit7CisJ aWYgKHBncGFfZHNhX2FyZWEgPT0gTlVMTCkKKwl7CisJCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0 ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFjaCgpOworCQlkc2FfaGFuZGxlCWFyZWFfaGFuZGxlOwor CQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhwZ19wbGFuX2FkdmljZV9nZXRfbWN4dCgpKTsKKworCQlMV0xvY2tBY3F1aXJl KCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKwkJYXJlYV9oYW5kbGUgPSBzdGF0ZS0+YXJl YTsKKwkJaWYgKGFyZWFfaGFuZGxlID09IERTQV9IQU5ETEVfSU5WQUxJRCkKKwkJeworCQkJcGdw YV9kc2FfYXJlYSA9IGRzYV9jcmVhdGUoc3RhdGUtPmRzYV90cmFuY2hlKTsKKwkJCWRzYV9waW4o cGdwYV9kc2FfYXJlYSk7CisJCQlzdGF0ZS0+YXJlYSA9IGRzYV9nZXRfaGFuZGxlKHBncGFfZHNh X2FyZWEpOworCQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCQl9CisJCWVsc2UKKwkJ eworCQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCQkJcGdwYV9kc2FfYXJlYSA9IGRz YV9hdHRhY2goYXJlYV9oYW5kbGUpOworCQl9CisKKwkJZHNhX3Bpbl9tYXBwaW5nKHBncGFfZHNh X2FyZWEpOworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwly ZXR1cm4gcGdwYV9kc2FfYXJlYTsKK30KKworLyoKKyAqIEhhbmRsZXIgZm9yIEVYUExBSU4gKFBM QU5fQURWSUNFKS4KKyAqLworc3RhdGljIHZvaWQKK3BnX3BsYW5fYWR2aWNlX2V4cGxhaW5fb3B0 aW9uX2hhbmRsZXIoRXhwbGFpblN0YXRlICplcywgRGVmRWxlbSAqb3B0LAorCQkJCQkJCQkJICBQ YXJzZVN0YXRlICpwc3RhdGUpCit7CisJYm9vbAkgICAqcGxhbl9hZHZpY2U7CisKKwlwbGFuX2Fk dmljZSA9IEdldEV4cGxhaW5FeHRlbnNpb25TdGF0ZShlcywgZXNfZXh0ZW5zaW9uX2lkKTsKKwor CWlmIChwbGFuX2FkdmljZSA9PSBOVUxMKQorCXsKKwkJcGxhbl9hZHZpY2UgPSBwYWxsb2MwX29i amVjdChib29sKTsKKwkJU2V0RXhwbGFpbkV4dGVuc2lvblN0YXRlKGVzLCBlc19leHRlbnNpb25f aWQsIHBsYW5fYWR2aWNlKTsKKwl9CisKKwkqcGxhbl9hZHZpY2UgPSBkZWZHZXRCb29sZWFuKG9w dCk7Cit9CisKKy8qCisgKiBEaXNwbGF5IGEgc3RyaW5nIHRoYXQgaXMgbGlrZWx5IHRvIGNvbnNp c3Qgb2YgbXVsdGlwbGUgbGluZXMgaW4gRVhQTEFJTgorICogb3V0cHV0LgorICovCitzdGF0aWMg dm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl90ZXh0X211bHRpbGluZShFeHBsYWluU3RhdGUg KmVzLCBjaGFyICpxbGFiZWwsCisJCQkJCQkJCQkgIGNoYXIgKnZhbHVlKQoreworCWNoYXIJICAg KnM7CisKKwkvKiBGb3Igbm9uLXRleHQgZm9ybWF0cywgaXQncyBiZXN0IG5vdCB0byBhZGQgYW55 IHNwZWNpYWwgaGFuZGxpbmcuICovCisJaWYgKGVzLT5mb3JtYXQgIT0gRVhQTEFJTl9GT1JNQVRf VEVYVCkKKwl7CisJCUV4cGxhaW5Qcm9wZXJ0eVRleHQocWxhYmVsLCB2YWx1ZSwgZXMpOworCQly ZXR1cm47CisJfQorCisJLyogSW4gdGV4dCBmb3JtYXQsIGlmIHRoZXJlIGlzIG5vIGRhdGEsIGRp c3BsYXkgbm90aGluZy4gKi8KKwlpZiAoKnFsYWJlbCA9PSAnXDAnKQorCQlyZXR1cm47CisKKwkv KgorCSAqIEl0IGxvb2tzIG5pY2VzdCB0byBpbmRlbnQgZWFjaCBsaW5lIG9mIHRoZSBhZHZpY2Ug c2VwYXJhdGVseSwgYmVnaW5uaW5nCisJICogb24gdGhlIGxpbmUgYmVsb3cgdGhlIGxhYmVsLgor CSAqLworCUV4cGxhaW5JbmRlbnRUZXh0KGVzKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIs ICIlczpcbiIsIHFsYWJlbCk7CisJZXMtPmluZGVudCsrOworCXdoaWxlICgocyA9IHN0cmNocih2 YWx1ZSwgJ1xuJykpICE9IE5VTEwpCisJeworCQlFeHBsYWluSW5kZW50VGV4dChlcyk7CisJCWFw cGVuZEJpbmFyeVN0cmluZ0luZm8oZXMtPnN0ciwgdmFsdWUsIChzIC0gdmFsdWUpICsgMSk7CisJ CXZhbHVlID0gcyArIDE7CisJfQorCisJLyogRG9uJ3QgaW50ZXJwcmV0IGEgdGVybWluYWwgbmV3 bGluZSBhcyBhIHJlcXVlc3QgZm9yIGFuIGVtcHR5IGxpbmUuICovCisJaWYgKCp2YWx1ZSAhPSAn XDAnKQorCXsKKwkJRXhwbGFpbkluZGVudFRleHQoZXMpOworCQlhcHBlbmRTdHJpbmdJbmZvKGVz LT5zdHIsICIlc1xuIiwgdmFsdWUpOworCX0KKworCWVzLT5pbmRlbnQtLTsKK30KKworLyoKKyAq IEFkZCBhZHZpY2UgZmVlZGJhY2sgdG8gdGhlIEVYUExBSU4gb3V0cHV0LgorICovCitzdGF0aWMg dm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9mZWVkYmFjayhFeHBsYWluU3RhdGUgKmVzLCBM aXN0ICpmZWVkYmFjaykKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3RyaW5nSW5m bygmYnVmKTsKKwlmb3JlYWNoX25vZGUoRGVmRWxlbSwgaXRlbSwgZmVlZGJhY2spCisJeworCQlp bnQJCQlmbGFncyA9IGRlZkdldEludDMyKGl0ZW0pOworCisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1 ZiwgIiVzIC8qICIsIGl0ZW0tPmRlZm5hbWUpOworCQlpZiAoKGZsYWdzICYgUEdQQV9URV9NQVRD SF9GVUxMKSAhPSAwKQorCQl7CisJCQlBc3NlcnQoKGZsYWdzICYgUEdQQV9URV9NQVRDSF9QQVJU SUFMKSAhPSAwKTsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIm1hdGNoZWQiKTsKKwkJfQor CQllbHNlIGlmICgoZmxhZ3MgJiBQR1BBX1RFX01BVENIX1BBUlRJQUwpICE9IDApCisJCQlhcHBl bmRTdHJpbmdJbmZvKCZidWYsICJwYXJ0aWFsbHkgbWF0Y2hlZCIpOworCQllbHNlCisJCQlhcHBl bmRTdHJpbmdJbmZvKCZidWYsICJub3QgbWF0Y2hlZCIpOworCQlpZiAoKGZsYWdzICYgUEdQQV9U RV9JTkFQUExJQ0FCTEUpICE9IDApCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIsIGluYXBw bGljYWJsZSIpOworCQlpZiAoKGZsYWdzICYgUEdQQV9URV9DT05GTElDVElORykgIT0gMCkKKwkJ CWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiwgY29uZmxpY3RpbmciKTsKKwkJaWYgKChmbGFncyAm IFBHUEFfVEVfRkFJTEVEKSAhPSAwKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCBmYWls ZWQiKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiICovXG4iKTsKKwl9CisKKwlwZ19wbGFu X2FkdmljZV9leHBsYWluX3RleHRfbXVsdGlsaW5lKGVzLCAiU3VwcGxpZWQgUGxhbiBBZHZpY2Ui LAorCQkJCQkJCQkJCSAgYnVmLmRhdGEpOworfQorCisvKgorICogQWRkIHJlbGV2YW50IGRldGFp bHMsIGlmIGFueSwgdG8gdGhlIEVYUExBSU4gb3V0cHV0IGZvciBhIHNpbmdsZSBwbGFuLgorICov CitzdGF0aWMgdm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9wZXJfcGxhbl9ob29rKFBsYW5u ZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQkJCQkJCSBJbnRvQ2xhdXNlICppbnRvLAorCQkJCQkJ CQkJIEV4cGxhaW5TdGF0ZSAqZXMsCisJCQkJCQkJCQkgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcs CisJCQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCisJCQkJCQkJCQkgUXVlcnlFbnZpcm9u bWVudCAqcXVlcnlFbnYpCit7CisJYm9vbAkgICAqcGxhbl9hZHZpY2UgPSBHZXRFeHBsYWluRXh0 ZW5zaW9uU3RhdGUoZXMsIGVzX2V4dGVuc2lvbl9pZCk7CisJRGVmRWxlbSAgICAqcGdwYV9pdGVt OworCUxpc3QJICAgKnBncGFfbGlzdDsKKworCWlmIChwcmV2X2V4cGxhaW5fcGVyX3BsYW4pCisJ CXByZXZfZXhwbGFpbl9wZXJfcGxhbihwbGFubmVkc3RtdCwgaW50bywgZXMsIHF1ZXJ5U3RyaW5n LCBwYXJhbXMsCisJCQkJCQkJICBxdWVyeUVudik7CisKKwkvKiBGaW5kIGFueSBkYXRhIHBncGFf cGxhbm5lcl9zaHV0ZG93biBzdGFzaGVkIGluIHRoZSBQbGFubmVkU3RtdC4gKi8KKwlwZ3BhX2l0 ZW0gPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShwbGFubmVkc3RtdC0+ZXh0ZW5zaW9uX3N0YXRl LAorCQkJCQkJCQkJCSJwZ19wbGFuX2FkdmljZSIpOworCXBncGFfbGlzdCA9IHBncGFfaXRlbSA9 PSBOVUxMID8gTlVMTCA6IChMaXN0ICopIHBncGFfaXRlbS0+YXJnOworCisJLyoKKwkgKiBCeSBk ZWZhdWx0LCBpZiB0aGVyZSBpcyBhIHJlY29yZCBvZiBhdHRlbXB0aW5nIHRvIGFwcGx5IGFkdmlj ZSBkdXJpbmcKKwkgKiBxdWVyeSBwbGFubmluZywgd2UgYWx3YXlzIG91dHB1dCB0aGF0IGluZm9y bWF0aW9uLCBidXQgdGhlIHVzZXIgY2FuIHNldAorCSAqIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19l eHBsYWluX3N1cHBsaWVkX2FkdmljZSA9IGZhbHNlIHRvIHN1cHByZXNzIHRoYXQKKwkgKiBiZWhh dmlvci4gSWYgdGhleSBkbywgd2UnbGwgb25seSBkaXNwbGF5IGl0IHdoZW4gdGhlIFBMQU5fQURW SUNFIG9wdGlvbgorCSAqIHdhcyBzcGVjaWZpZWQgYW5kIG5vdCBzZXQgdG8gZmFsc2UuCisJICoK KwkgKiBOQjogSWYgd2UncmUgZXhwbGFpbmluZyBhIHF1ZXJ5IHBsYW5uZWQgYmVmb3JlaGFuZCAt LSBpLmUuIGEgcHJlcGFyZWQKKwkgKiBzdGF0ZW1lbnQgLS0gdGhlIGFwcGxpY2F0aW9uIG9mIHF1 ZXJ5IGFkdmljZSBtYXkgbm90IGhhdmUgYmVlbgorCSAqIHJlY29yZGVkLCBhbmQgdGhlcmVmb3Jl IHRoaXMgd29uJ3QgYmUgYWJsZSB0byBzaG93IGFueXRoaW5nLgorCSAqLworCWlmIChwZ3BhX2xp c3QgIT0gTlVMTCAmJiAocGdfcGxhbl9hZHZpY2VfYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2 aWNlIHx8CisJCQkJCQkJICAocGxhbl9hZHZpY2UgIT0gTlVMTCAmJiAqcGxhbl9hZHZpY2UpKSkK Kwl7CisJCURlZkVsZW0gICAgKmZlZWRiYWNrOworCisJCWZlZWRiYWNrID0gZmluZF9kZWZlbGVt X2J5X2RlZm5hbWUocGdwYV9saXN0LCAiZmVlZGJhY2siKTsKKwkJaWYgKGZlZWRiYWNrICE9IE5V TEwpCisJCQlwZ19wbGFuX2FkdmljZV9leHBsYWluX2ZlZWRiYWNrKGVzLCAoTGlzdCAqKSBmZWVk YmFjay0+YXJnKTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBQTEFOX0FEVklDRSBvcHRpb24gd2Fz IHNwZWNpZmllZCAtLSBhbmQgbm90IHNlbnQgdG8gRkFMU0UgLS0KKwkgKiBzaG93IGdlbmVyYXRl ZCBhZHZpY2UuCisJICovCisJaWYgKHBsYW5fYWR2aWNlICE9IE5VTEwgJiYgKnBsYW5fYWR2aWNl KQorCXsKKwkJRGVmRWxlbSAgICAqYWR2aWNlX3N0cmluZ19pdGVtOworCQljaGFyCSAgICphZHZp Y2Vfc3RyaW5nOworCisJCWFkdmljZV9zdHJpbmdfaXRlbSA9CisJCQlmaW5kX2RlZmVsZW1fYnlf ZGVmbmFtZShwZ3BhX2xpc3QsICJhZHZpY2Vfc3RyaW5nIik7CisJCWlmIChhZHZpY2Vfc3RyaW5n X2l0ZW0gIT0gTlVMTCkKKwkJeworCQkJLyogQWR2aWNlIGhhcyBhbHJlYWR5IGJlZW4gZ2VuZXJh dGVkOyB3ZSBjYW4gcmV1c2UgaXQuICovCisJCQlhZHZpY2Vfc3RyaW5nID0gc3RyVmFsKGFkdmlj ZV9zdHJpbmdfaXRlbS0+YXJnKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBncGFfcGxhbl93YWxr ZXJfY29udGV4dCB3YWxrZXI7CisJCQlTdHJpbmdJbmZvRGF0YSBidWY7CisJCQlwZ3BhX2lkZW50 aWZpZXIgKnJ0X2lkZW50aWZpZXJzOworCisJCQkvKiBBZHZpY2Ugbm90IHlldCBnZW5lcmF0ZWQ7 IGRvIHRoYXQgbm93LiAqLworCQkJcGdwYV9wbGFuX3dhbGtlcigmd2Fsa2VyLCBwbGFubmVkc3Rt dCk7CisJCQlydF9pZGVudGlmaWVycyA9CisJCQkJcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9y X3BsYW5uZWRfc3RtdChwbGFubmVkc3RtdCk7CisJCQlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwkJ CXBncGFfb3V0cHV0X2FkdmljZSgmYnVmLCAmd2Fsa2VyLCBydF9pZGVudGlmaWVycyk7CisJCQlh ZHZpY2Vfc3RyaW5nID0gYnVmLmRhdGE7CisJCX0KKworCQlpZiAoYWR2aWNlX3N0cmluZ1swXSAh PSAnXDAnKQorCQkJcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl90ZXh0X211bHRpbGluZShlcywgIkdl bmVyYXRlZCBQbGFuIEFkdmljZSIsCisJCQkJCQkJCQkJCQkgIGFkdmljZV9zdHJpbmcpOworCX0K K30KKworLyoKKyAqIENoZWNrIGhvb2sgZm9yIHBnX3BsYW5fYWR2aWNlLmFkdmljZQorICovCitz dGF0aWMgYm9vbAorcGdfcGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNrX2hvb2soY2hhciAqKm5ld3Zh bCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQoreworCU1lbW9yeUNvbnRleHQgb2xk Y29udGV4dDsKKwlNZW1vcnlDb250ZXh0IHRtcGNvbnRleHQ7CisJY2hhcgkgICAqZXJyb3I7CisK KwlpZiAoKm5ld3ZhbCA9PSBOVUxMKQorCQlyZXR1cm4gdHJ1ZTsKKworCXRtcGNvbnRleHQgPSBB bGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkgICAi cGdfcGxhbl9hZHZpY2UuYWR2aWNlIiwKKwkJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfU0la RVMpOworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY29udGV4dCk7CisK KwkvKgorCSAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gc2F2ZSB0aGUgcGFyc2UgdHJlZSB0aGF0IHdl IGNvbnN0cnVjdCBoZXJlIGZvcgorCSAqIGV2ZW50dWFsIHVzZSB3aGVuIHBsYW5uaW5nIHdpdGgg dGhpcyBhZHZpY2UsIGJ1dCAqZXh0cmEgY2FuIG9ubHkgcG9pbnQKKwkgKiB0byBhIHNpbmdsZSBn dWNfbWFsbG9jJ2QgY2h1bmssIGFuZCBvdXIgcGFyc2UgdHJlZSBpbnZvbHZlcyBhbgorCSAqIGFy Yml0cmFyeSBudW1iZXIgb2YgbWVtb3J5IGFsbG9jYXRpb25zLgorCSAqLworCSh2b2lkKSBwZ3Bh X3BhcnNlKCpuZXd2YWwsICZlcnJvcik7CisKKwlpZiAoZXJyb3IgIT0gTlVMTCkKKwl7CisJCUdV Q19jaGVja19lcnJkZXRhaWwoIkNvdWxkIG5vdCBwYXJzZSBhZHZpY2U6ICVzIiwgZXJyb3IpOwor CQlyZXR1cm4gZmFsc2U7CisJfQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OworCU1lbW9yeUNvbnRleHREZWxldGUodG1wY29udGV4dCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30K KworLyoKKyAqIFNlYXJjaCBhIGxpc3Qgb2YgRGVmRWxlbSBvYmplY3RzIGZvciBhIGdpdmVuIGRl Zm5hbWUuCisgKi8KK3N0YXRpYyBEZWZFbGVtICoKK2ZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKExp c3QgKmRlZmxpc3QsIGNoYXIgKmRlZm5hbWUpCit7CisJZm9yZWFjaF9ub2RlKERlZkVsZW0sIGl0 ZW0sIGRlZmxpc3QpCisJeworCQlpZiAoc3RyY21wKGl0ZW0tPmRlZm5hbWUsIGRlZm5hbWUpID09 IDApCisJCQlyZXR1cm4gaXRlbTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbCBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYWE2ZmRjOWU3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmNvbnRyb2wKQEAgLTAsMCArMSw1IEBA CisjIHBnX3BsYW5fYWR2aWNlIGV4dGVuc2lvbgorY29tbWVudCA9ICdoZWxwIHRoZSBwbGFubmVy IGdldCB0aGUgcmlnaHQgcGxhbicKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0 aG5hbWUgPSAnJGxpYmRpci9wZ19wbGFuX2FkdmljZScKK3JlbG9jYXRhYmxlID0gdHJ1ZQpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi44NmVmYjNiNjExMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaApAQCAtMCwwICsxLDM3IEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBwZ19wbGFuX2FkdmljZS5oCisgKgkgIG1haW4gaGVhZGVyIGZp bGUgZm9yIHBnX3BsYW5fYWR2aWNlIGNvbnRyaWIgbW9kdWxlCisgKgorICogQ29weXJpZ2h0IChj KSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJ ICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmgKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19QTEFOX0FEVklDRV9ICisjZGVmaW5lIFBHX1BMQU5f QURWSUNFX0gKKworI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorI2luY2x1ZGUgInN0b3Jh Z2UvbHdsb2NrLmgiCisjaW5jbHVkZSAidXRpbHMvZHNhLmgiCisKK3R5cGVkZWYgc3RydWN0IHBn cGFfc2hhcmVkX3N0YXRlCit7CisJTFdMb2NrCQlsb2NrOworCWludAkJCWRzYV90cmFuY2hlOwor CWRzYV9oYW5kbGUJYXJlYTsKKwlkc2FfcG9pbnRlciBzaGFyZWRfY29sbGVjdG9yOworfSBwZ3Bh X3NoYXJlZF9zdGF0ZTsKKworLyogR1VDIHZhcmlhYmxlcyAqLworZXh0ZXJuIGludAlwZ19wbGFu X2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0OworZXh0ZXJuIGludAlwZ19wbGFuX2Fkdmlj ZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdDsKK2V4dGVybiBjaGFyICpwZ19wbGFuX2FkdmljZV9h ZHZpY2U7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK2V4dGVybiBNZW1vcnlDb250ZXh0 IHBnX3BsYW5fYWR2aWNlX2dldF9tY3h0KHZvaWQpOworZXh0ZXJuIHBncGFfc2hhcmVkX3N0YXRl ICpwZ19wbGFuX2FkdmljZV9hdHRhY2godm9pZCk7CitleHRlcm4gZHNhX2FyZWEgKnBnX3BsYW5f YWR2aWNlX2RzYV9hcmVhKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9hc3QuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3Qu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDJmZmJmYTM3NjAKLS0t IC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMKQEAgLTAs MCArMSwzOTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfYXN0LmMKKyAqCSAg YWRkaXRpb25hbCBzdXBwb3J0aW5nIGNvZGUgcmVsYXRlZCB0byBwbGFuIGFkdmljZSBwYXJzaW5n CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKwor I2luY2x1ZGUgInBncGFfYXN0LmgiCisKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAi dXRpbHMvYXJyYXkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorCitzdGF0aWMgYm9v bCBwZ3BhX2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmll ciAqcmlkcywKKwkJCQkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJCQkJ CQkJCSAgYm9vbCAqcmlkc191c2VkKTsKKworLyoKKyAqIEdldCBhIEMgc3RyaW5nIHRoYXQgY29y cmVzcG9uZHMgdG8gdGhlIHNwZWNpZmllZCBhZHZpY2UgdGFnLgorICovCitjaGFyICoKK3BncGFf Y3N0cmluZ19hZHZpY2VfdGFnKHBncGFfYWR2aWNlX3RhZ190eXBlIGFkdmljZV90YWcpCit7CisJ c3dpdGNoIChhZHZpY2VfdGFnKQorCXsKKwkJY2FzZSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FO OgorCQkJcmV0dXJuICJCSVRNQVBfSEVBUF9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19GT1JFSUdO X0pPSU46CisJCQlyZXR1cm4gIkZPUkVJR05fSk9JTiI7CisJCWNhc2UgUEdQQV9UQUdfR0FUSEVS OgorCQkJcmV0dXJuICJHQVRIRVIiOworCQljYXNlIFBHUEFfVEFHX0dBVEhFUl9NRVJHRToKKwkJ CXJldHVybiAiR0FUSEVSX01FUkdFIjsKKwkJY2FzZSBQR1BBX1RBR19IQVNIX0pPSU46CisJCQly ZXR1cm4gIkhBU0hfSk9JTiI7CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOgorCQkJ cmV0dXJuICJJTkRFWF9PTkxZX1NDQU4iOworCQljYXNlIFBHUEFfVEFHX0lOREVYX1NDQU46CisJ CQlyZXR1cm4gIklOREVYX1NDQU4iOworCQljYXNlIFBHUEFfVEFHX0pPSU5fT1JERVI6CisJCQly ZXR1cm4gIkpPSU5fT1JERVIiOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJ WkU6CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fTUFURVJJQUxJWkUiOworCQljYXNlIFBHUEFfVEFH X01FUkdFX0pPSU5fUExBSU46CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fUExBSU4iOworCQljYXNl IFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJORVNURURfTE9P UF9NQVRFUklBTElaRSI7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJ CXJldHVybiAiTkVTVEVEX0xPT1BfTUVNT0laRSI7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xP T1BfUExBSU46CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX1BMQUlOIjsKKwkJY2FzZSBQR1BBX1RB R19OT19HQVRIRVI6CisJCQlyZXR1cm4gIk5PX0dBVEhFUiI7CisJCWNhc2UgUEdQQV9UQUdfUEFS VElUSU9OV0lTRToKKwkJCXJldHVybiAiUEFSVElUSU9OV0lTRSI7CisJCWNhc2UgUEdQQV9UQUdf U0VNSUpPSU5fTk9OX1VOSVFVRToKKwkJCXJldHVybiAiU0VNSUpPSU5fTk9OX1VOSVFVRSI7CisJ CWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFOgorCQkJcmV0dXJuICJTRU1JSk9JTl9VTklR VUUiOworCQljYXNlIFBHUEFfVEFHX1NFUV9TQ0FOOgorCQkJcmV0dXJuICJTRVFfU0NBTiI7CisJ CWNhc2UgUEdQQV9UQUdfVElEX1NDQU46CisJCQlyZXR1cm4gIlRJRF9TQ0FOIjsKKwl9CisKKwlw Z191bnJlYWNoYWJsZSgpOworCXJldHVybiBOVUxMOworfQorCisvKgorICogQ29udmVydCBhbiBh ZHZpY2UgdGFnLCBmb3JtYXR0ZWQgYXMgYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuCisg KiBkb3duY2FzZWQgYXMgYXBwcm9wcmlhdGUsIHRvIGEgcGdwYV9hZHZpY2VfdGFnX3R5cGUuCisg KgorICogSWYgd2Ugc3VjY2VlZCwgc2V0ICpmYWlsID0gZmFsc2UgYW5kIHJldHVybiB0aGUgcmVz dWx0OyBpZiB3ZSBmYWlsLAorICogc2V0ICpmYWlsID0gdHJ1ZSBhbmQgcmV1cm4gYW4gYXJiaXRy YXJ5IHZhbHVlLgorICovCitwZ3BhX2FkdmljZV90YWdfdHlwZQorcGdwYV9wYXJzZV9hZHZpY2Vf dGFnKGNvbnN0IGNoYXIgKnRhZywgYm9vbCAqZmFpbCkKK3sKKwkqZmFpbCA9IGZhbHNlOworCisJ c3dpdGNoICh0YWdbMF0pCisJeworCQljYXNlICdiJzoKKwkJCWlmIChzdHJjbXAodGFnLCAiYml0 bWFwX2hlYXBfc2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0JJVE1BUF9IRUFQX1ND QU47CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQlpZiAoc3RyY21wKHRhZywgImZvcmVpZ25f am9pbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjsKKwkJCWJyZWFr OworCQljYXNlICdnJzoKKwkJCWlmIChzdHJjbXAodGFnLCAiZ2F0aGVyIikgPT0gMCkKKwkJCQly ZXR1cm4gUEdQQV9UQUdfR0FUSEVSOworCQkJaWYgKHN0cmNtcCh0YWcsICJnYXRoZXJfbWVyZ2Ui KSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19HQVRIRVJfTUVSR0U7CisJCQlicmVhazsKKwkJ Y2FzZSAnaCc6CisJCQlpZiAoc3RyY21wKHRhZywgImhhc2hfam9pbiIpID09IDApCisJCQkJcmV0 dXJuIFBHUEFfVEFHX0hBU0hfSk9JTjsKKwkJCWJyZWFrOworCQljYXNlICdpJzoKKwkJCWlmIChz dHJjbXAodGFnLCAiaW5kZXhfc2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0lOREVY X1NDQU47CisJCQlpZiAoc3RyY21wKHRhZywgImluZGV4X29ubHlfc2NhbiIpID09IDApCisJCQkJ cmV0dXJuIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjsKKwkJCWJyZWFrOworCQljYXNlICdqJzoK KwkJCWlmIChzdHJjbXAodGFnLCAiam9pbl9vcmRlciIpID09IDApCisJCQkJcmV0dXJuIFBHUEFf VEFHX0pPSU5fT1JERVI7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlpZiAoc3RyY21wKHRh ZywgIm1lcmdlX2pvaW5fbWF0ZXJpYWxpemUiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19N RVJHRV9KT0lOX01BVEVSSUFMSVpFOworCQkJaWYgKHN0cmNtcCh0YWcsICJtZXJnZV9qb2luX3Bs YWluIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjsKKwkJCWJy ZWFrOworCQljYXNlICduJzoKKwkJCWlmIChzdHJjbXAodGFnLCAibmVzdGVkX2xvb3BfbWF0ZXJp YWxpemUiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTEla RTsKKwkJCWlmIChzdHJjbXAodGFnLCAibmVzdGVkX2xvb3BfbWVtb2l6ZSIpID09IDApCisJCQkJ cmV0dXJuIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU7CisJCQlpZiAoc3RyY21wKHRhZywg Im5lc3RlZF9sb29wX3BsYWluIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTkVTVEVEX0xP T1BfUExBSU47CisJCQlpZiAoc3RyY21wKHRhZywgIm5vX2dhdGhlciIpID09IDApCisJCQkJcmV0 dXJuIFBHUEFfVEFHX05PX0dBVEhFUjsKKwkJCWJyZWFrOworCQljYXNlICdwJzoKKwkJCWlmIChz dHJjbXAodGFnLCAicGFydGl0aW9ud2lzZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1BB UlRJVElPTldJU0U7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlpZiAoc3RyY21wKHRhZywg InNlbWlqb2luX25vbl91bmlxdWUiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19TRU1JSk9J Tl9OT05fVU5JUVVFOworCQkJaWYgKHN0cmNtcCh0YWcsICJzZW1pam9pbl91bmlxdWUiKSA9PSAw KQorCQkJCXJldHVybiBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU7CisJCQlpZiAoc3RyY21wKHRh ZywgInNlcV9zY2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfU0VRX1NDQU47CisJCQli cmVhazsKKwkJY2FzZSAndCc6CisJCQlpZiAoc3RyY21wKHRhZywgInRpZF9zY2FuIikgPT0gMCkK KwkJCQlyZXR1cm4gUEdQQV9UQUdfVElEX1NDQU47CisJCQlicmVhazsKKwl9CisKKwkvKiBkaWRu J3Qgd29yayBvdXQgKi8KKwkqZmFpbCA9IHRydWU7CisKKwkvKiByZXR1cm4gYW4gYXJiaXRyYXJ5 IHZhbHVlIHRvIHVud2luZCB0aGUgY2FsbCBzdGFjayAqLworCXJldHVybiBQR1BBX1RBR19TRVFf U0NBTjsKK30KKworLyoKKyAqIEZvcm1hdCBhIHBncGFfYWR2aWNlX3RhcmdldCBhcyBhIHN0cmlu ZyBhbmQgYXBwZW5kIHJlc3VsdCB0byBhIFN0cmluZ0luZm8uCisgKi8KK3ZvaWQKK3BncGFfZm9y bWF0X2FkdmljZV90YXJnZXQoU3RyaW5nSW5mbyBzdHIsIHBncGFfYWR2aWNlX3RhcmdldCAqdGFy Z2V0KQoreworCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJ eworCQlib29sCQlmaXJzdCA9IHRydWU7CisJCWNoYXIJICAgKmRlbGltczsKKworCQlpZiAodGFy Z2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVCkKKwkJCWRlbGltcyA9ICJ7 fSI7CisJCWVsc2UKKwkJCWRlbGltcyA9ICIoKSI7CisKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo c3RyLCBkZWxpbXNbMF0pOworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxk X3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYgKGZpcnN0KQorCQkJCWZpcnN0 ID0gZmFsc2U7CisJCQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoc3RyLCAnICcpOwor CQkJcGdwYV9mb3JtYXRfYWR2aWNlX3RhcmdldChzdHIsIGNoaWxkX3RhcmdldCk7CisJCX0KKwkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoc3RyLCBkZWxpbXNbMV0pOworCX0KKwllbHNlCisJeworCQlj b25zdCBjaGFyICpydF9pZGVudGlmaWVyOworCisJCXJ0X2lkZW50aWZpZXIgPSBwZ3BhX2lkZW50 aWZpZXJfc3RyaW5nKCZ0YXJnZXQtPnJpZCk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoc3Ry LCBydF9pZGVudGlmaWVyKTsKKwl9Cit9CisKKy8qCisgKiBGb3JtYXQgYSBwZ3BhX2luZGV4X3Rh cmdldCBhcyBhIHN0cmluZyBhbmQgYXBwZW5kIHJlc3VsdCB0byBhIFN0cmluZ0luZm8uCisgKi8K K3ZvaWQKK3BncGFfZm9ybWF0X2luZGV4X3RhcmdldChTdHJpbmdJbmZvIHN0ciwgcGdwYV9pbmRl eF90YXJnZXQgKml0YXJnZXQpCit7CisJaWYgKGl0YXJnZXQtPml0eXBlICE9IFBHUEFfSU5ERVhf TkFNRSkKKwl7CisJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCQlpZiAoaXRhcmdldC0+aXR5cGUg PT0gUEdQQV9JTkRFWF9BTkQpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwgIiYmKCIp OworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwgInx8KCIpOworCisJCWZv cmVhY2hfcHRyKHBncGFfaW5kZXhfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIGl0YXJnZXQtPmNoaWxk cmVuKQorCQl7CisJCQlpZiAoZmlyc3QpCisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCWVsc2UKKwkJ CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihzdHIsICcgJyk7CisJCQlwZ3BhX2Zvcm1hdF9pbmRleF90 YXJnZXQoc3RyLCBjaGlsZF90YXJnZXQpOworCQl9CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0 ciwgJyknKTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKGl0YXJnZXQtPmluZG5hbWVzcGFjZSAhPSBO VUxMKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhzdHIsICIlcy4iLAorCQkJCQkJCSBxdW90ZV9pZGVu dGlmaWVyKGl0YXJnZXQtPmluZG5hbWVzcGFjZSkpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KHN0ciwgcXVvdGVfaWRlbnRpZmllcihpdGFyZ2V0LT5pbmRuYW1lKSk7CisJfQorfQorCisvKgor ICogRGV0ZXJtaW5lIHdoZXRoZXIgdHdvIHBncGFfaW5kZXhfdGFyZ2V0IG9iamVjdHMgYXJlIGV4 YWN0bHkgaWRlbnRpY2FsLgorICovCitib29sCitwZ3BhX2luZGV4X3RhcmdldHNfZXF1YWwocGdw YV9pbmRleF90YXJnZXQgKmkxLCBwZ3BhX2luZGV4X3RhcmdldCAqaTIpCit7CisJaWYgKGkxLT5p dHlwZSAhPSBpMi0+aXR5cGUpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChpMS0+aXR5cGUgPT0g UEdQQV9JTkRFWF9OQU1FKQorCXsKKwkJLyogaW5kbmFtZXNwYWNlIGNhbiBiZSBOVUxMLCBhbmQg dHdvIE5VTEwgdmFsdWVzIGFyZSBlcXVhbCAqLworCQlpZiAoKGkxLT5pbmRuYW1lc3BhY2UgIT0g TlVMTCB8fCBpMi0+aW5kbmFtZXNwYWNlICE9IE5VTEwpICYmCisJCQkoaTEtPmluZG5hbWVzcGFj ZSA9PSBOVUxMIHx8IGkyLT5pbmRuYW1lc3BhY2UgPT0gTlVMTCB8fAorCQkJIHN0cmNtcChpMS0+ aW5kbmFtZXNwYWNlLCBpMi0+aW5kbmFtZXNwYWNlKSAhPSAwKSkKKwkJCXJldHVybiBmYWxzZTsK KwkJaWYgKHN0cmNtcChpMS0+aW5kbmFtZSwgaTItPmluZG5hbWUpICE9IDApCisJCQlyZXR1cm4g ZmFsc2U7CisJfQorCWVsc2UKKwl7CisJCWludAkJCWkxX2xlbmd0aCA9IGxpc3RfbGVuZ3RoKGkx LT5jaGlsZHJlbik7CisKKwkJaWYgKGkxX2xlbmd0aCAhPSBsaXN0X2xlbmd0aChpMi0+Y2hpbGRy ZW4pKQorCQkJcmV0dXJuIGZhbHNlOworCQlmb3IgKGludCBuID0gMDsgbiA8IGkxX2xlbmd0aDsg KytuKQorCQl7CisJCQlwZ3BhX2luZGV4X3RhcmdldCAqYzEgPSBsaXN0X250aChpMS0+Y2hpbGRy ZW4sIG4pOworCQkJcGdwYV9pbmRleF90YXJnZXQgKmMyID0gbGlzdF9udGgoaTItPmNoaWxkcmVu LCBuKTsKKworCQkJaWYgKCFwZ3BhX2luZGV4X3RhcmdldHNfZXF1YWwoYzEsIGMyKSkKKwkJCQly ZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIENoZWNr IHdoZXRoZXIgYW4gaWRlbnRpZmllciBtYXRjaGVzIGFuIGFueSBwYXJ0IG9mIGFuIGFkdmljZSB0 YXJnZXQuCisgKi8KK2Jvb2wKK3BncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChwZ3BhX2lk ZW50aWZpZXIgKnJpZCwgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJLyogRm9yIG5v bi1pZGVudGlmaWVycywgY2hlY2sgYWxsIGRlc2NlbmRlbnRzLiAqLworCWlmICh0YXJnZXQtPnR0 eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX2Fk dmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYg KHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChyaWQsIGNoaWxkX3RhcmdldCkpCisJCQkJ cmV0dXJuIHRydWU7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChzdHJjbXAocmlk LT5hbGlhc19uYW1lLCB0YXJnZXQtPnJpZC5hbGlhc19uYW1lKSAhPSAwKQorCQlyZXR1cm4gZmFs c2U7CisJaWYgKHJpZC0+b2NjdXJyZW5jZSAhPSB0YXJnZXQtPnJpZC5vY2N1cnJlbmNlKQorCQly ZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIFRoZSBpZGVudGlmaWVyIG11c3Qgc3BlY2lmeSBhIHNj aGVtYSwgYnV0IHRoZSB0YXJnZXQgbWF5IGxlYXZlIHRoZQorCSAqIHNjaGVtYSBOVUxMIHRvIG1h dGNoIGFueXRoaW5nLgorCSAqLworCWlmICh0YXJnZXQtPnJpZC5wYXJ0bnNwICE9IE5VTEwgJiYK KwkJc3RyY21wKHJpZC0+cGFydG5zcCwgdGFyZ2V0LT5yaWQucGFydG5zcCkgIT0gMCkKKwkJcmV0 dXJuIGZhbHNlOworCisKKwkvKgorCSAqIFRoZXNlIGZpZWxkcyBjYW4gYmUgTlVMTCBvbiBlaXRo ZXIgc2lkZSwgYnV0IE5VTEwgb25seSBtYXRjaGVzIGFub3RoZXIKKwkgKiBOVUxMLgorCSAqLwor CWlmICghc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlkLT5wYXJ0cmVsLCB0YXJnZXQtPnJp ZC5wYXJ0cmVsKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICghc3RyaW5nc19lcXVhbF9vcl9ib3Ro X251bGwocmlkLT5wbGFuX25hbWUsIHRhcmdldC0+cmlkLnBsYW5fbmFtZSkpCisJCXJldHVybiBm YWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogTWF0Y2ggaWRlbnRpZmllcnMgdG8g YWR2aWNlIHRhcmdldHMgYW5kIHJldHVybiBhbiBlbnVtIHZhbHVlIGluZGljYXRpbmcKKyAqIHRo ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgc2V0IG9mIGtleXMgYW5kIHRoZSBzZXQgb2YgdGFy Z2V0cy4KKyAqCisgKiBTZWUgdGhlIGNvbW1lbnRzIGZvciBwZ3BhX2l0bV90eXBlLgorICovCitw Z3BhX2l0bV90eXBlCitwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbnQgbnJpZHMsIHBn cGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0 KQoreworCWJvb2wJCWFsbF9yaWRzX3VzZWQgPSB0cnVlOworCWJvb2wJCWFueV9yaWRzX3VzZWQg PSBmYWxzZTsKKwlib29sCQlhbGxfdGFyZ2V0c191c2VkOworCWJvb2wJICAgKnJpZHNfdXNlZCA9 IHBhbGxvYzBfYXJyYXkoYm9vbCwgbnJpZHMpOworCisJYWxsX3RhcmdldHNfdXNlZCA9CisJCXBn cGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0KG5yaWRzLCByaWRzLCB0YXJnZXQsIHJpZHNfdXNl ZCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5yaWRzOyArK2kpCisJeworCQlpZiAocmlkc191 c2VkW2ldKQorCQkJYW55X3JpZHNfdXNlZCA9IHRydWU7CisJCWVsc2UKKwkJCWFsbF9yaWRzX3Vz ZWQgPSBmYWxzZTsKKwl9CisKKwlpZiAoYWxsX3JpZHNfdXNlZCkKKwl7CisJCWlmIChhbGxfdGFy Z2V0c191c2VkKQorCQkJcmV0dXJuIFBHUEFfSVRNX0VRVUFMOworCQllbHNlCisJCQlyZXR1cm4g UEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUOworCX0KKwllbHNlCisJeworCQlpZiAoYWxsX3Rhcmdl dHNfdXNlZCkKKwkJCXJldHVybiBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQ7CisJCWVsc2Ug aWYgKGFueV9yaWRzX3VzZWQpCisJCQlyZXR1cm4gUEdQQV9JVE1fSU5URVJTRUNUSU5HOworCQll bHNlCisJCQlyZXR1cm4gUEdQQV9JVE1fRElTSk9JTlQ7CisJfQorfQorCisvKgorICogUmV0dXJu cyB0cnVlIGlmIGV2ZXJ5IHRhcmdldCBvciBzdWItdGFyZ2V0IGlzIG1hdGNoZWQgYnkgYXQgbGVh c3Qgb25lCisgKiBpZGVudGlmaWVyLCBhbmQgb3RoZXJ3aXNlIGZhbHNlLgorICoKKyAqIEFsc28g c2V0cyByaWRzX3VzZWRbaV0gPSB0cnVlIGZvciBlYWNoIGlkZW5pZmllciB0aGF0IG1hdGNoZXMg YXQgbGVhc3Qgb25lCisgKiB0YXJnZXQuCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX2lkZW50aWZp ZXJzX2NvdmVyX3RhcmdldChpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJ CQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LCBib29sICpyaWRzX3VzZWQpCit7CisJYm9v bAkJcmVzdWx0ID0gZmFsc2U7CisKKwlpZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9J REVOVElGSUVSKQorCXsKKwkJcmVzdWx0ID0gdHJ1ZTsKKworCQlmb3JlYWNoX3B0cihwZ3BhX2Fk dmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYg KCFwZ3BhX2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChucmlkcywgcmlkcywgY2hpbGRfdGFyZ2V0 LAorCQkJCQkJCQkJCQkgICByaWRzX3VzZWQpKQorCQkJCXJlc3VsdCA9IGZhbHNlOworCQl9CisJ fQorCWVsc2UKKwl7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbnJpZHM7ICsraSkKKwkJeworCQkJ aWYgKHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldCgmcmlkc1tpXSwgdGFyZ2V0KSkKKwkJ CXsKKwkJCQlyaWRzX3VzZWRbaV0gPSB0cnVlOworCQkJCXJlc3VsdCA9IHRydWU7CisJCQl9CisJ CX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX2FzdC5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNmZlNzMwYTRkNAotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaApAQCAtMCwwICsx LDIwNCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9hc3QuaAorICoJICBhYnN0 cmFjdCBzeW50YXggdHJlZXMgZm9yIHBsYW4gYWR2aWNlLCBwbHVzIHBhcnNlci9zY2FubmVyIHN1 cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9h c3QuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfQVNUX0gKKyNk ZWZpbmUgUEdQQV9BU1RfSAorCisjaW5jbHVkZSAicGdwYV9pZGVudGlmaWVyLmgiCisKKyNpbmNs dWRlICJub2Rlcy9wZ19saXN0LmgiCisKKy8qCisgKiBBZHZpY2UgaXRlbXMgZ2VuZXJhbGx5IHRh a2UgdGhlIGZvcm0gU09NRV9UQUcoaXRlbSBbLi4uXSksIHdoZXJlIGFuIGl0ZW0KKyAqIGNhbiB0 YWtlIHZhcmlvdXMgZm9ybXMuIFRoZSBzaW1wbGVzdCBjYXNlIGlzIGEgcmVsYXRpb24gaWRlbnRp ZmllciwgYnV0CisgKiBzb21lIHRhZ3MgYWxsb3cgc3VibGlzdHMsIGFuZCBKT0lOX09SREVSKCkg YWxsb3dzIGJvdGggb3JkZXJlZCBhbmQgdW5vcmRlcmVkCisgKiBzdWJsaXN0cy4KKyAqLwordHlw ZWRlZiBlbnVtCit7CisJUEdQQV9UQVJHRVRfSURFTlRJRklFUiwJCS8qIHJlbGF0aW9uIGlkZW50 aWZpZXIgKi8KKwlQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QsCS8qIChpdGVtIC4uLikgKi8KKwlQ R1BBX1RBUkdFVF9VTk9SREVSRURfTElTVAkvKiB7aXRlbSAuLi59ICovCit9IHBncGFfdGFyZ2V0 X3R5cGU7CisKKy8qCisgKiBXaGVuIGFuIGFkdmljZSBpdGVtIGRlc2NyaWJlcyBhIGJpdG1hcCBp bmRleCBzY2FuLCBpdCBtYXkgbmVlZCB0byBkZXNjcmliZQorICogdGhlIHVzZSBvZiBtdWx0aXBs ZSBpbmRleGVzLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlQR1BBX0lOREVYX05BTUUsCQkJLyog aW5kZXggc2NoZW1hICsgbmFtZSAqLworCVBHUEFfSU5ERVhfQU5ELAkJCQkvKiAmJihpdGVtIC4u LikgKi8KKwlQR1BBX0lOREVYX09SCQkJCS8qIHx8KGl0ZW0gLi4uKSAqLworfSBwZ3BhX2luZGV4 X3R5cGU7CisKKy8qCisgKiBBbiBpbmRleCBzcGVjaWZpY2F0aW9uLiBXZSB1c2UgdGhpcyBmb3Ig SU5ERVhfU0NBTiwgSU5ERVhfT05MWV9TQ0FOLAorICogYW5kIEJJVE1BUF9IRUFQX1NDQU4gYWR2 aWNlLCBidXQgaW4gdGhlIGZvcm1lciB0d28gY2FzZXMsIHRoZSB0YXJnZXQgbXVzdAorICogYmUg b2YgdHlwZSBQR1BBX0lOREVYX05BTUUuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfaW5kZXhf dGFyZ2V0Cit7CisJcGdwYV9pbmRleF90eXBlIGl0eXBlOworCisJLyogSW5kZXggc2NoZW0gYW5k IG5hbWUsIHdoZW4gaXR5cGUgPT0gUEdQQV9JTkRFWF9OQU1FICovCisJY2hhcgkgICAqaW5kbmFt ZXNwYWNlOworCWNoYXIJICAgKmluZG5hbWU7CisKKwkvKiBMaXN0IG9mIHBncGFfaW5kZXhfdGFy Z2V0IG9iamVjdHMsIHdoZW4gaXR5cGUgIT0gUEdQQV9JTkRFWF9OQU1FICovCisJTGlzdAkgICAq Y2hpbGRyZW47Cit9IHBncGFfaW5kZXhfdGFyZ2V0OworCisvKgorICogQSBzaW5nbGUgaXRlbSBh Ym91dCB3aGljaCBhZHZpY2UgaXMgYmVpbmcgZ2l2ZW4sIHdoaWNoIGNvdWxkIGJlIGVpdGhlcgor ICogYSByZWxhdGlvbiBpZGVudGlmaWVyIHRoYXQgd2Ugd2FudCB0byBicmVhayBvdXQgaW50byBp dHMgY29uc3RpdHVlbnQgZmllbGRzLAorICogb3IgYSBzdWJsaXN0IG9mIHNvbWUga2luZC4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9hZHZpY2VfdGFyZ2V0Cit7CisJcGdwYV90YXJnZXRfdHlw ZSB0dHlwZTsKKworCS8qCisJICogVGhpcyBmaWVsZCBpcyBtZWFuaW5nZnVsIHdoZW4gdHR5cGUg aXMgUEdQQV9UQVJHRVRfSURFTlRJRklFUi4KKwkgKgorCSAqIEFsbCBpZGVudGlmaWVycyBtdXN0 IGhhdmUgYW4gYWxpYXMgbmFtZSBhbmQgYW4gb2NjdXJyZW5jZSBudW1iZXI7IHRoZQorCSAqIHJl bWFpbmluZyBmaWVsZHMgY2FuIGJlIE5VTEwuIE5vdGUgdGhhdCBpdCdzIHBvc3NpYmxlIHRvIHNw ZWNpZnkgYQorCSAqIHBhcnRpdGlvbiBuYW1lIHdpdGhvdXQgYSBwYXJ0aXRpb24gc2NoZW1hLCBi dXQgbm90IHRoZSByZXZlcnNlLgorCSAqLworCXBncGFfaWRlbnRpZmllciByaWQ7CisKKwkvKgor CSAqIFRoaXMgZmllbGQgaXMgc2V0IHdoZW4gdHR5cGUgaXMgUFBHQV9UQVJHRVRfSURFTlRJRklF UiBhbmQgdGhlIGFkdmljZQorCSAqIHRhZyBpcyBQR1BBX1RBR19JTkRFWF9TQ0FOLCBQR1BBX1RB R19JTkRFWF9PTkxZX1NDQU4sIG9yCisJICogUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTi4KKwkg Ki8KKwlwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldDsKKworCS8qCisJICogV2hlbiB0aGUgdHR5 cGUgaXMgUEdQQV9UQVJHRVRfPGFueXRoaW5nPl9MSVNULCB0aGlzIGZpZWxkIGNvbnRhaW5zIGEK KwkgKiBsaXN0IG9mIGFkZGl0aW9uYWwgcGdwYV9hZHZpY2VfdGFyZ2V0IG9iamVjdHMuIE90aGVy d2lzZSwgaXQgaXMgdW51c2VkLgorCSAqLworCUxpc3QJICAgKmNoaWxkcmVuOworfSBwZ3BhX2Fk dmljZV90YXJnZXQ7CisKKy8qCisgKiBUaGVzZSBhcmUgYWxsIHRoZSBraW5kcyBvZiBhZHZpY2Ug dGhhdCB3ZSBrbm93IGhvdyB0byBwYXJzZS4gSWYgYSBrZXl3b3JkCisgKiBpcyBmb3VuZCBhdCB0 aGUgdG9wIGxldmVsLCBpdCBtdXN0IGJlIGluIHRoaXMgbGlzdC4KKyAqCisgKiBJZiB5b3UgY2hh bmdlIGFueXRoaW5nIGhlcmUsIGFsc28gdXBkYXRlIHBncGFfcGFyc2VfYWR2aWNlX3RhZyBhbmQK KyAqIHBncGFfY3N0cmluZ19hZHZpY2VfdGFnLgorICovCit0eXBlZGVmIGVudW0gcGdwYV9hZHZp Y2VfdGFnX3R5cGUKK3sKKwlQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOLAorCVBHUEFfVEFHX0ZP UkVJR05fSk9JTiwKKwlQR1BBX1RBR19HQVRIRVIsCisJUEdQQV9UQUdfR0FUSEVSX01FUkdFLAor CVBHUEFfVEFHX0hBU0hfSk9JTiwKKwlQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU4sCisJUEdQQV9U QUdfSU5ERVhfU0NBTiwKKwlQR1BBX1RBR19KT0lOX09SREVSLAorCVBHUEFfVEFHX01FUkdFX0pP SU5fTUFURVJJQUxJWkUsCisJUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTiwKKwlQR1BBX1RBR19O RVNURURfTE9PUF9NQVRFUklBTElaRSwKKwlQR1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpFLAor CVBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOLAorCVBHUEFfVEFHX05PX0dBVEhFUiwKKwlQR1BB X1RBR19QQVJUSVRJT05XSVNFLAorCVBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUUsCisJUEdQ QV9UQUdfU0VNSUpPSU5fVU5JUVVFLAorCVBHUEFfVEFHX1NFUV9TQ0FOLAorCVBHUEFfVEFHX1RJ RF9TQ0FOCit9IHBncGFfYWR2aWNlX3RhZ190eXBlOworCisvKgorICogQW4gaXRlbSBvZiBhZHZp Y2UsIG1lYW5pbmcgYSB0YWcgYW5kIHRoZSBsaXN0IG9mIGFsbCB0YXJnZXRzIHRvIHdoaWNoCisg KiBpdCBpcyBiZWluZyBhcHBsaWVkLgorICoKKyAqICJ0YXJnZXRzIiBpcyBhIGxpc3Qgb2YgcGdw YV9hZHZpY2VfdGFyZ2V0IG9iamVjdHMuCisgKgorICogVGhlIExpc3QgcmV0dXJuZWQgZnJvbSBw Z3BhX3l5cGFyc2UgaXMgbGlzdCBvZiBwZ3BhX2FkdmljZV9pdGVtIG9iamVjdHMuCisgKi8KK3R5 cGVkZWYgc3RydWN0IHBncGFfYWR2aWNlX2l0ZW0KK3sKKwlwZ3BhX2FkdmljZV90YWdfdHlwZSB0 YWc7CisJTGlzdAkgICAqdGFyZ2V0czsKK30gcGdwYV9hZHZpY2VfaXRlbTsKKworLyoKKyAqIFJl c3VsdCBvZiBjb21wYXJpbmcgYW4gYXJyYXkgb2YgcGdwYV9yZWxhdGlvbl9pZGVudGlmaWVyIG9i amVjdHMgdG8gYQorICogcGdwYV9hZHZpY2VfdGFyZ2V0LgorICoKKyAqIFBHUEFfSVRNX0VRVUFM IG1lYW5zIGFsbCB0YXJnZXRzIGFyZSBtYXRjaGVkIGJ5IHNvbWUgaWRlbnRpZmllciwgYW5kCisg KiBhbGwgaWRlbnRpZmllcnMgd2VyZSBtYXRjaGVkIHRvIGEgdGFyZ2V0LgorICoKKyAqIFBHUEFf SVRNX0tFWVNfQVJFX1NVQlNFVCBtZWFucyB0aGF0IGFsbCBpZGVudGlmaWVycyBtYXRjaGVkIHRv IGEgdGFyZ2V0LAorICogYnV0IHRoZXJlIHdlcmUgbGVmdG92ZXIgdGFyZ2V0cy4gR2VuZXJhbGx5 LCB0aGlzIG1lYW5zIHRoYXQgdGhlIGFkdmljZSBpcworICogbG9va2luZyB0byBhcHBseSB0byBh bGwgb2YgdGhlIHJlbHMgd2UgaGF2ZSBwbHVzIHNvbWUgYWRkaXRpb25hbCBvbmVzIHRoYXQKKyAq IHdlIGRvbid0IGhhdmUuCisgKgorICogUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUIG1lYW5z IHRoYXQgYWxsIHRhcmdldHMgYXJlIG1hdGNoZWQgYnkgYW4KKyAqIGlkZW50aWZpZXJzLCBidXQg dGhlcmUgd2VyZSBsZWZ0b3ZlciBpZGVudGlmaWVycy4gR2VuZXJhbGx5LCB0aGlzIG1lYW5zCisg KiB0aGF0IHRoZSBhZHZpY2UgaXMgbG9va2luZyB0byBhcHBseSB0byBzb21lIGJ1dCBub3QgYWxs IG9mIHRoZSByZWxzIHdlIGhhdmUuCisgKgorICogUEdQQV9JVE1fSU5URVJTRUNUSU5HIG1lYW5z IHRoYXQgc29tZSBpZGVudGlmZWlycyBhbmQgdGFyZ2V0cyB3ZXJlIG1hdGNoZWQsCisgKiBidXQg bmVpdGhlciBhbGwgaWRlbnRpZmllcnMgbm9yIGFsbCB0YXJnZXRzIGNvdWxkIGJlIG1hdGNoZWQg dG8gaXRlbXMgaW4KKyAqIHRoZSBvdGhlciBzZXQuCisgKgorICogUEdQQV9JVE1fRElTSk9JTlQg bWVhbnMgdGhhdCBubyBtYXRjaGVzIGJldHdlZW4gaWRlbnRpZmVpcnMgYW5kIHRhcmdldHMgd2Vy ZQorICogZm91bmQuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVBHUEFfSVRNX0VRVUFMLAorCVBH UEFfSVRNX0tFWVNfQVJFX1NVQlNFVCwKKwlQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQsCisJ UEdQQV9JVE1fSU5URVJTRUNUSU5HLAorCVBHUEFfSVRNX0RJU0pPSU5UCit9IHBncGFfaXRtX3R5 cGU7CisKKy8qIGZvciBwZ3BhX3NjYW5uZXIubCBhbmQgcGdwYV9wYXJzZXIueSAqLwordW5pb24g WVlTVFlQRTsKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKKyNkZWZpbmUgWVlfVFlQ RURFRl9ZWV9TQ0FOTkVSX1QKK3R5cGVkZWYgdm9pZCAqeXlzY2FuX3Q7CisjZW5kaWYKKworLyog aW4gcGdwYV9zY2FubmVyLmwgKi8KK2V4dGVybiBpbnQJcGdwYV95eWxleCh1bmlvbiBZWVNUWVBF ICp5eWx2YWxfcGFyYW0sIExpc3QgKipyZXN1bHQsCisJCQkJCSAgIGNoYXIgKipwYXJzZV9lcnJv cl9tc2dfcCwgeXlzY2FuX3QgeXlzY2FubmVyKTsKK2V4dGVybiB2b2lkIHBncGFfeXllcnJvcihM aXN0ICoqcmVzdWx0LCBjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3AsCisJCQkJCQkgeXlzY2FuX3Qg eXlzY2FubmVyLAorCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIHZvaWQgcGdw YV9zY2FubmVyX2luaXQoY29uc3QgY2hhciAqc3RyLCB5eXNjYW5fdCAqeXlzY2FubmVycCk7Citl eHRlcm4gdm9pZCBwZ3BhX3NjYW5uZXJfZmluaXNoKHl5c2Nhbl90IHl5c2Nhbm5lcik7CisKKy8q IGluIHBncGFfcGFyc2VyLnkgKi8KK2V4dGVybiBpbnQJcGdwYV95eXBhcnNlKExpc3QgKipyZXN1 bHQsIGNoYXIgKipwYXJzZV9lcnJvcl9tc2dfcCwKKwkJCQkJCSB5eXNjYW5fdCB5eXNjYW5uZXIp OworZXh0ZXJuIExpc3QgKnBncGFfcGFyc2UoY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZywgY2hh ciAqKmVycm9yX3ApOworCisvKiBpbiBwZ3BhX2FzdC5jICovCitleHRlcm4gY2hhciAqcGdwYV9j c3RyaW5nX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgYWR2aWNlX3RhZyk7CitleHRl cm4gYm9vbCBwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190YXJnZXQocGdwYV9pZGVudGlmaWVyICpy aWQsCisJCQkJCQkJCQkJICAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworZXh0ZXJuIHBn cGFfaXRtX3R5cGUgcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQoaW50IG5yaWRzLAorCQkJ CQkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCQkJICAgcGdwYV9h ZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworZXh0ZXJuIGJvb2wgcGdwYV9pbmRleF90YXJnZXRzX2Vx dWFsKHBncGFfaW5kZXhfdGFyZ2V0ICppMSwKKwkJCQkJCQkJCSBwZ3BhX2luZGV4X3RhcmdldCAq aTIpOworZXh0ZXJuIHBncGFfYWR2aWNlX3RhZ190eXBlIHBncGFfcGFyc2VfYWR2aWNlX3RhZyhj b25zdCBjaGFyICp0YWcsIGJvb2wgKmZhaWwpOworZXh0ZXJuIHZvaWQgcGdwYV9mb3JtYXRfYWR2 aWNlX3RhcmdldChTdHJpbmdJbmZvIHN0ciwKKwkJCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0 ICp0YXJnZXQpOworZXh0ZXJuIHZvaWQgcGdwYV9mb3JtYXRfaW5kZXhfdGFyZ2V0KFN0cmluZ0lu Zm8gc3RyLAorCQkJCQkJCQkJIHBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0KTsKKworI2VuZGlm CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjEyMDg1ZDlkNzVmCi0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5jCkBAIC0wLDAgKzEsNjM3IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX2NvbGxlY3Rvci5jCisgKgkgIGNvbGxlY3Qg YWR2aWNlIGludG8gYmFja2VuZC1sb2NhbCBvciBzaGFyZWQgbWVtb3J5CisgKgorICogQ29weXJp Z2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUg InBnX3BsYW5fYWR2aWNlLmgiCisjaW5jbHVkZSAicGdwYV9jb2xsZWN0b3IuaCIKKworI2luY2x1 ZGUgImRhdGF0eXBlL3RpbWVzdGFtcC5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCisjaW5jbHVkZSAidXRp bHMvYWNsLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy90 aW1lc3RhbXAuaCIKKworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19jbGVhcl9jb2xsZWN0ZWRfbG9j YWxfYWR2aWNlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfY2xlYXJfY29sbGVjdGVkX3NoYXJl ZF9hZHZpY2UpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2Fk dmljZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2Fkdmlj ZSk7CisKKyNkZWZpbmUgQURWSUNFX0NIVU5LX1NJWkUJCTEwMjQKKyNkZWZpbmUgQURWSUNFX0NI VU5LX0FSUkFZX1NJWkUJNjQKKworI2RlZmluZQlQR19HRVRfQURWSUNFX0NPTFVNTlMJNworCisv KgorICogQWR2aWNlIGV4dHJhY3RlZCBmcm9tIG9uZSBxdWVyeSBwbGFuLCB0b2dldGhlciB3aXRo IHRoZSBxdWVyeSBzdHJpbmcKKyAqIGFuZCB2YXJpb3VzIG90aGVyIGlkZW50aWZ5aW5nIGRldGFp bHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfY29sbGVjdGVkX2FkdmljZQoreworCU9pZAkJ CXVzZXJpZDsJCQkvKiB1c2VyIE9JRCAqLworCU9pZAkJCWRiaWQ7CQkJLyogZGF0YWJhc2UgT0lE ICovCisJdWludDY0CQlxdWVyeWlkOwkJLyogcXVlcnkgaWRlbnRpZmllciAqLworCVRpbWVzdGFt cFR6IHRpbWVzdGFtcDsJCS8qIHF1ZXJ5IHRpbWVzdGFtcCAqLworCWludAkJCWFkdmljZV9vZmZz ZXQ7CS8qIHN0YXJ0IG9mIGFkdmljZSBpbiB0ZXh0dWFsIGRhdGEgKi8KKwljaGFyCQl0ZXh0dWFs X2RhdGFbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30gcGdwYV9jb2xsZWN0ZWRfYWR2aWNlOwor CisvKgorICogQSBidW5jaCBvZiBwb2ludGVycyB0byBwZ3BhX2NvbGxlY3RlZF9hZHZpY2Ugb2Jq ZWN0cywgc3RvcmVkIGluCisgKiBiYWNrZW5kLWxvY2FsIG1lbW9yeS4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgcGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsKK3sKKwlwZ3BhX2NvbGxlY3RlZF9hZHZpY2Ug KmVudHJpZXNbQURWSUNFX0NIVU5LX1NJWkVdOworfSBwZ3BhX2xvY2FsX2FkdmljZV9jaHVuazsK KworLyoKKyAqIEluZm9ybWF0aW9uIGFib3V0IGFsbCBvZiB0aGUgcGdwYV9jb2xsZWN0ZWRfYWR2 aWNlIG9iamVjdHMgdGhhdCB3ZSdyZQorICogc3RvcmluZyBpbiBsb2NhbCBtZW1vcnkuCisgKgor ICogV2UgYXNzaWduIGNvbnNlY3V0aXZlIElEcywgc3RhcnRpbmcgZnJvbSAwLCB0byBlYWNoIHBn cGFfY29sbGVjdGVkX2FkdmljZQorICogb2JqZWN0IHRoYXQgd2Ugc3RvcmUuIFRoZSBhY3R1YWwg c3RvcmFnZSBpcyBhbiBhcnJheSBvZiBjaHVua3MsIHdoaWNoCisgKiBoZWxwcyBrZWVwIG1lbWNw eSgpIG92ZXJoZWFkIGxvdyB3aGVuIHdlIHN0YXJ0IGRpc2NhcmRpbmcgb2xkZXIgZGF0YS4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9sb2NhbF9hZHZpY2UKK3sKKwl1aW50NjQJCW5leHRfaWQ7 CisJdWludDY0CQlvbGRlc3RfaWQ7CisJdWludDY0CQliYXNlX2lkOworCWludAkJCWNodW5rX2Fy cmF5X2FsbG9jYXRlZF9zaXplOworCXBncGFfbG9jYWxfYWR2aWNlX2NodW5rICoqY2h1bmtzOwor fSBwZ3BhX2xvY2FsX2FkdmljZTsKKworLyoKKyAqIEp1c3QgbGlrZSBwZ3BhX2xvY2FsX2Fkdmlj ZV9jaHVuaywgYnV0IHN0b3JlZCBpbiBhIGR5bmFtaWMgc2hhcmVkIGFyZWEsCisgKiBzbyB3ZSBt dXN0IHVzZSBkc2FfcG9pbnRlciBpbnN0ZWFkIG9mIG5hdGl2ZSBwb2ludGVycy4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgcGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rCit7CisJZHNhX3BvaW50ZXIgZW50 cmllc1tBRFZJQ0VfQ0hVTktfU0laRV07Cit9IHBncGFfc2hhcmVkX2FkdmljZV9jaHVuazsKKwor LyoKKyAqIEp1c3QgbGlrZSBwZ3BhX2xvY2FsX2FkdmljZSwgYnV0IHN0b3JlZCBpbiBhIGR5bmFt aWMgc2hhcmVkIGFyZWEsIHNvCisgKiB3ZSBtdXN0IHVzZSBkc2FfcG9pbnRlciBpbnN0ZWFkIG9m IG5hdGl2ZSBwb2ludGVycy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9zaGFyZWRfYWR2aWNl Cit7CisJdWludDY0CQluZXh0X2lkOworCXVpbnQ2NAkJb2xkZXN0X2lkOworCXVpbnQ2NAkJYmFz ZV9pZDsKKwlpbnQJCQljaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZTsKKwlkc2FfcG9pbnRlciBj aHVua3M7Cit9IHBncGFfc2hhcmVkX2FkdmljZTsKKworLyogUG9pbnRlcnMgdG8gbG9jYWwgYW5k IHNoYXJlZCBjb2xsZWN0b3JzICovCitzdGF0aWMgcGdwYV9sb2NhbF9hZHZpY2UgKmxvY2FsX2Nv bGxlY3RvciA9IE5VTEw7CitzdGF0aWMgcGdwYV9zaGFyZWRfYWR2aWNlICpzaGFyZWRfY29sbGVj dG9yID0gTlVMTDsKKworLyogU3RhdGljIGZ1bmN0aW9ucyAqLworc3RhdGljIHBncGFfY29sbGVj dGVkX2FkdmljZSAqcGdwYV9tYWtlX2NvbGxlY3RlZF9hZHZpY2UoT2lkIHVzZXJpZCwKKwkJCQkJ CQkJCQkJCQkJIE9pZCBkYmlkLAorCQkJCQkJCQkJCQkJCQkgdWludDY0IHF1ZXJ5SWQsCisJCQkJ CQkJCQkJCQkJCSBUaW1lc3RhbXBUeiB0aW1lc3RhbXAsCisJCQkJCQkJCQkJCQkJCSBjb25zdCBj aGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICphZHZpY2Vfc3Ry aW5nLAorCQkJCQkJCQkJCQkJCQkgZHNhX2FyZWEgKmFyZWEsCisJCQkJCQkJCQkJCQkJCSBkc2Ff cG9pbnRlciAqcmVzdWx0KTsKK3N0YXRpYyB2b2lkIHBncGFfc3RvcmVfbG9jYWxfYWR2aWNlKHBn cGFfY29sbGVjdGVkX2FkdmljZSAqY2EpOworc3RhdGljIHZvaWQgcGdwYV90cmltX2xvY2FsX2Fk dmljZShpbnQgbGltaXQpOworc3RhdGljIHZvaWQgcGdwYV9zdG9yZV9zaGFyZWRfYWR2aWNlKGRz YV9wb2ludGVyIGNhX3BvaW50ZXIpOworc3RhdGljIHZvaWQgcGdwYV90cmltX3NoYXJlZF9hZHZp Y2UoZHNhX2FyZWEgKmFyZWEsIGludCBsaW1pdCk7CisKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBl eHRyYWN0IHRoZSBxdWVyeSBzdHJpbmcgZnJvbSBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKi8KK3N0 YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitxdWVyeV9zdHJpbmcocGdwYV9jb2xsZWN0ZWRfYWR2 aWNlICpjYSkKK3sKKwlyZXR1cm4gY2EtPnRleHR1YWxfZGF0YTsKK30KKworLyogSGVscGVyIGZ1 bmN0aW9uIHRvIGV4dHJhY3QgdGhlIGFkdmljZSBzdHJpbmcgZnJvbSBwZ3BhX2NvbGxlY3RlZF9h ZHZpY2UgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCithZHZpY2Vfc3RyaW5nKHBncGFf Y29sbGVjdGVkX2FkdmljZSAqY2EpCit7CisJcmV0dXJuIGNhLT50ZXh0dWFsX2RhdGEgKyBjYS0+ YWR2aWNlX29mZnNldDsKK30KKworLyoKKyAqIFN0b3JlIGNvbGxlY3RlZCBxdWVyeSBhZHZpY2Ug aW50byB0aGUgbG9jYWwgb3Igc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IsCisgKiBhcyBhcHByb3By aWF0ZS4KKyAqLwordm9pZAorcGdwYV9jb2xsZWN0X2FkdmljZSh1aW50NjQgcXVlcnlJZCwgY29u c3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQljb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nKQor eworCU9pZAkJCXVzZXJpZCA9IEdldFVzZXJJZCgpOworCU9pZAkJCWRiaWQgPSBNeURhdGFiYXNl SWQ7CisJVGltZXN0YW1wVHogbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCisJaWYgKHBn X3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQgPiAwKQorCXsKKwkJcGdwYV9jb2xs ZWN0ZWRfYWR2aWNlICpjYTsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJCW9sZGNv bnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGdfcGxhbl9hZHZpY2VfZ2V0X21jeHQoKSk7 CisJCWNhID0gcGdwYV9tYWtlX2NvbGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlk LCBub3csCisJCQkJCQkJCQkJcXVlcnlfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nLAorCQkJCQkJCQkJ CU5VTEwsIE5VTEwpOworCQlwZ3BhX3N0b3JlX2xvY2FsX2FkdmljZShjYSk7CisJCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwlpZiAocGdfcGxhbl9hZHZpY2Vfc2hh cmVkX2NvbGxlY3Rpb25fbGltaXQgPiAwKQorCXsKKwkJZHNhX2FyZWEgICAqYXJlYSA9IHBnX3Bs YW5fYWR2aWNlX2RzYV9hcmVhKCk7CisJCWRzYV9wb2ludGVyIGNhX3BvaW50ZXI7CisKKwkJcGdw YV9tYWtlX2NvbGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlkLCBub3csCisJCQkJ CQkJCSAgIHF1ZXJ5X3N0cmluZywgYWR2aWNlX3N0cmluZywgYXJlYSwKKwkJCQkJCQkJICAgJmNh X3BvaW50ZXIpOworCQlwZ3BhX3N0b3JlX3NoYXJlZF9hZHZpY2UoY2FfcG9pbnRlcik7CisJfQor fQorCisvKgorICogQWxsb2NhdGUgYW5kIGZpbGwgYSBuZXcgcGdwYV9jb2xsZWN0ZWRfYWR2aWNl IG9iamVjdC4KKyAqCisgKiBJZiBhcmVhICE9IE5VTEwsIGl0IGlzIHVzZWQgdG8gYWxsb2NhdGUg dGhlIG5ldyBvYmplY3QsIGFuZCB0aGUgcmVzdWx0aW5nCisgKiBkc2FfcG9pbnRlciBpcyByZXR1 cm5lZCB2aWEgKnJlc3VsdC4KKyAqCisgKiBJZiBhcmVhID09IE5VTEwsIHRoZSBuZXcgb2JqZWN0 IGlzIGFsbG9jYXRlZCBpbiB0aGUgY3VycmVudCBtZW1vcnkgY29udGV4dCwKKyAqIGFuZCByZXN1 bHQgaXMgbm90IGV4YW1pbmVkIG9yIG1vZGlmaWVkLgorICovCitzdGF0aWMgcGdwYV9jb2xsZWN0 ZWRfYWR2aWNlICoKK3BncGFfbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKE9pZCB1c2VyaWQsIE9pZCBk YmlkLCB1aW50NjQgcXVlcnlJZCwKKwkJCQkJCSAgIFRpbWVzdGFtcFR6IHRpbWVzdGFtcCwKKwkJ CQkJCSAgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKmFk dmljZV9zdHJpbmcsCisJCQkJCQkgICBkc2FfYXJlYSAqYXJlYSwgZHNhX3BvaW50ZXIgKnJlc3Vs dCkKK3sKKwlzaXplX3QJCXF1ZXJ5X3N0cmluZ19sZW5ndGggPSBzdHJsZW4ocXVlcnlfc3RyaW5n KSArIDE7CisJc2l6ZV90CQlhZHZpY2Vfc3RyaW5nX2xlbmd0aCA9IHN0cmxlbihhZHZpY2Vfc3Ry aW5nKSArIDE7CisJc2l6ZV90CQl0b3RhbF9sZW5ndGg7CisJcGdwYV9jb2xsZWN0ZWRfYWR2aWNl ICpjYTsKKworCXRvdGFsX2xlbmd0aCA9IG9mZnNldG9mKHBncGFfY29sbGVjdGVkX2FkdmljZSwg dGV4dHVhbF9kYXRhKQorCQkrIHF1ZXJ5X3N0cmluZ19sZW5ndGggKyBhZHZpY2Vfc3RyaW5nX2xl bmd0aDsKKworCWlmIChhcmVhID09IE5VTEwpCisJCWNhID0gcGFsbG9jKHRvdGFsX2xlbmd0aCk7 CisJZWxzZQorCXsKKwkJKnJlc3VsdCA9IGRzYV9hbGxvY2F0ZShhcmVhLCB0b3RhbF9sZW5ndGgp OworCQljYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCAqcmVzdWx0KTsKKwl9CisKKwljYS0+dXNl cmlkID0gR2V0VXNlcklkKCk7CisJY2EtPmRiaWQgPSBNeURhdGFiYXNlSWQ7CisJY2EtPnF1ZXJ5 aWQgPSBxdWVyeUlkOworCWNhLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisJY2EtPmFkdmljZV9v ZmZzZXQgPSBxdWVyeV9zdHJpbmdfbGVuZ3RoOworCisJbWVtY3B5KGNhLT50ZXh0dWFsX2RhdGEs IHF1ZXJ5X3N0cmluZywgcXVlcnlfc3RyaW5nX2xlbmd0aCk7CisJbWVtY3B5KCZjYS0+dGV4dHVh bF9kYXRhW2NhLT5hZHZpY2Vfb2Zmc2V0XSwKKwkJICAgYWR2aWNlX3N0cmluZywgYWR2aWNlX3N0 cmluZ19sZW5ndGgpOworCisJcmV0dXJuIGNhOworfQorCisvKgorICogQWRkIGEgcGdfY29sbGVj dGVkX2FkdmljZSBvYmplY3QgdG8gb3VyIGJhY2tlbmQtbG9jYWwgYWR2aWNlIGNvbGxlY3Rpb24u CisgKgorICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBzd2l0Y2hpbmcgdG8gdGhlIGFwcHJv cHJpYXRlIG1lbW9yeSBjb250ZXh0OworICogdGhlIHByb3ZpZGVkIG9iamVjdCBzaG91bGQgaGF2 ZSBiZWVuIGFsbG9jYXRlZCBpbiB0aGF0IHNhbWUgY29udGV4dC4KKyAqLworc3RhdGljIHZvaWQK K3BncGFfc3RvcmVfbG9jYWxfYWR2aWNlKHBncGFfY29sbGVjdGVkX2FkdmljZSAqY2EpCit7CisJ dWludDY0CQljaHVua19udW1iZXI7CisJdWludDY0CQljaHVua19vZmZzZXQ7CisJcGdwYV9sb2Nh bF9hZHZpY2UgKmxhID0gbG9jYWxfY29sbGVjdG9yOworCisJLyogSWYgdGhlIGxvY2FsIGFkdmlj ZSBjb2xsZWN0b3IgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0LCBkbyB0aGF0IG5vdy4gKi8KKwlpZiAo bGEgPT0gTlVMTCkKKwl7CisJCWxhID0gcGFsbG9jMChzaXplb2YocGdwYV9sb2NhbF9hZHZpY2Up KTsKKwkJbGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gQURWSUNFX0NIVU5LX0FSUkFZ X1NJWkU7CisJCWxhLT5jaHVua3MgPSBwYWxsb2MwX2FycmF5KHBncGFfbG9jYWxfYWR2aWNlX2No dW5rICosCisJCQkJCQkJCSAgIGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSk7CisJCWxv Y2FsX2NvbGxlY3RvciA9IGxhOworCX0KKworCS8qIENvbXB1dGUgY2h1bmsgYW5kIG9mZnNldCBh dCB3aGljaCB0byBzdG9yZSB0aGlzIGFkdmljZS4gKi8KKwljaHVua19udW1iZXIgPSAobGEtPm5l eHRfaWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwljaHVua19vZmZzZXQg PSAobGEtPm5leHRfaWQgLSBsYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCS8q IEV4dGVuZCBjaHVuayBhcnJheSwgaWYgbmVlZGVkLiAqLworCWlmIChjaHVua19udW1iZXIgPj0g bGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKQorCXsKKwkJaW50CQkJbmV3X3NpemU7CisK KwkJbmV3X3NpemUgPSBsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgKyBBRFZJQ0VfQ0hV TktfQVJSQVlfU0laRTsKKwkJbGEtPmNodW5rcyA9IHJlcGFsbG9jMF9hcnJheShsYS0+Y2h1bmtz LAorCQkJCQkJCQkJIHBncGFfbG9jYWxfYWR2aWNlX2NodW5rICosCisJCQkJCQkJCQkgbGEtPmNo dW5rX2FycmF5X2FsbG9jYXRlZF9zaXplLAorCQkJCQkJCQkJIG5ld19zaXplKTsKKwkJbGEtPmNo dW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gbmV3X3NpemU7CisJfQorCisJLyogQWxsb2NhdGUg bmV3IGNodW5rLCBpZiBuZWVkZWQuICovCisJaWYgKGxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXSA9 PSBOVUxMKQorCQlsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0gPSBwYWxsb2MwX29iamVjdChwZ3Bh X2xvY2FsX2FkdmljZV9jaHVuayk7CisKKwkvKiBTYXZlIHBvaW50ZXIgYW5kIGJ1bXAgbmV4dC1p ZCBjb3VudGVyLiAqLworCUFzc2VydChsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNb Y2h1bmtfb2Zmc2V0XSA9PSBOVUxMKTsKKwlsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJp ZXNbY2h1bmtfb2Zmc2V0XSA9IGNhOworCSsrbGEtPm5leHRfaWQ7CisKKwkvKiBJZiB3ZSd2ZSBl eGNlZWRlZCB0aGUgc3RvcmFnZSBsaW1pdCwgZGlzY2FyZCBvbGQgZGF0YS4gKi8KKwlwZ3BhX3Ry aW1fbG9jYWxfYWR2aWNlKHBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQpOwor fQorCisvKgorICogQWRkIGEgcGdfY29sbGVjdGVkX2FkdmljZSBvYmplY3QgdG8gdGhlIHNoYXJl ZCBhZHZpY2UgY29sbGVjdGlvbi4KKyAqCisgKiAnY2FfcG9pbnRlcicgc2hvdWxkIGhhdmUgYmVl biBhbGxvY2F0ZWQgZnJvbSB0aGUgcGdfcGxhbl9hZHZpY2UgRFNBIGFyZWEKKyAqIGFuZCBzaG91 bGQgcG9pbnQgdG8gYW4gb2JqZWN0IG9mIHR5cGUgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlLgorICov CitzdGF0aWMgdm9pZAorcGdwYV9zdG9yZV9zaGFyZWRfYWR2aWNlKGRzYV9wb2ludGVyIGNhX3Bv aW50ZXIpCit7CisJdWludDY0CQljaHVua19udW1iZXI7CisJdWludDY0CQljaHVua19vZmZzZXQ7 CisJcGdwYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gcGdfcGxhbl9hZHZpY2VfYXR0YWNoKCk7CisJ ZHNhX2FyZWEgICAqYXJlYSA9IHBnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKCk7CisJcGdwYV9zaGFy ZWRfYWR2aWNlICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisJZHNhX3BvaW50ZXIgKmNodW5rX2Fy cmF5OworCXBncGFfc2hhcmVkX2FkdmljZV9jaHVuayAqY2h1bms7CisKKwkvKiBMb2NrIHRoZSBz aGFyZWQgc3RhdGUuICovCisJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lW RSk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hlZCB0byB0aGUgc2hhcmVkIGFkdmlj ZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3cuCisJICogSWYgd2UncmUgdGhlIGZpcnN0IG9u ZXMgdG8gYXR0YWNoLCB3ZSBtYXkgbmVlZCB0byBjcmVhdGUgdGhlIG9iamVjdC4KKwkgKi8KKwlp ZiAoc2EgPT0gTlVMTCkKKwl7CisJCWlmIChzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9PSBJbnZh bGlkRHNhUG9pbnRlcikKKwkJCXN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID0KKwkJCQlkc2FfYWxs b2NhdGUwKGFyZWEsIHNpemVvZihwZ3BhX3NoYXJlZF9hZHZpY2UpKTsKKwkJc2hhcmVkX2NvbGxl Y3RvciA9IHNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFyZWRfY29sbGVjdG9y KTsKKwl9CisKKwkvKgorCSAqIEl0J3MgcG9zc2libGUgdGhhdCBzb21lIG90aGVyIGJhY2tlbmQg bWF5IGhhdmUgc3VjY2VlZGVkIGluIGNyZWF0aW5nCisJICogdGhlIG1haW4gY29sbGVjdG9yIG9i amVjdCBidXQgZmFpbGVkIHRvIGFsbG9jYXRlIGFuIGluaXRpYWwgY2h1bmsKKwkgKiBhcnJheSwg c28gd2UgbXVzdCBiZSBwcmVwYXJlZCB0byBhbGxvY2F0ZSB0aGUgY2h1bmsgYXJyYXkgaGVyZSB3 aGV0aGVyCisJICogb3Igbm90IHdlIGNyZWF0ZWQgdGhlIGNvbGxlY3RvciBvYmplY3QuCisJICov CisJaWYgKHNoYXJlZF9jb2xsZWN0b3ItPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID09IDAp CisJeworCQlzYS0+Y2h1bmtzID0KKwkJCWRzYV9hbGxvY2F0ZTAoYXJlYSwKKwkJCQkJCSAgc2l6 ZW9mKGRzYV9wb2ludGVyKSAqIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFKTsKKwkJc2EtPmNodW5r X2FycmF5X2FsbG9jYXRlZF9zaXplID0gQURWSUNFX0NIVU5LX0FSUkFZX1NJWkU7CisJfQorCisJ LyogQ29tcHV0ZSBjaHVuayBhbmQgb2Zmc2V0IGF0IHdoaWNoIHRvIHN0b3JlIHRoaXMgYWR2aWNl LiAqLworCWNodW5rX251bWJlciA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNlX2lkKSAvIEFEVklD RV9DSFVOS19TSVpFOworCWNodW5rX29mZnNldCA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNlX2lk KSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBjaHVu ayBhcnJheSBhbmQsIGlmIG5lZWRlZCwgZXh0ZW5kIGl0LiAqLworCWlmIChjaHVua19udW1iZXIg Pj0gc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKQorCXsKKwkJaW50CQkJbmV3X3NpemU7 CisJCWRzYV9wb2ludGVyIG5ld19jaHVua3M7CisKKwkJLyoKKwkJICogRFNBIGNhbid0IGVubGFy Z2UgYW4gZXhpc3RpbmcgYWxsb2NhdGlvbiwgc28gd2UgbXVzdCBtYWtlIGEgbmV3CisJCSAqIGFs bG9jYXRpb24gYW5kIGNvcHkgZGF0YSBvdmVyLgorCQkgKi8KKwkJbmV3X3NpemUgPSBzYS0+Y2h1 bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgKyBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwkJbmV3 X2NodW5rcyA9IGRzYV9hbGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKGRzYV9wb2ludGVyKSAqIG5ld19z aXplKTsKKwkJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgbmV3X2NodW5rcyk7 CisJCW1lbWNweShjaHVua19hcnJheSwgZHNhX2dldF9hZGRyZXNzKGFyZWEsIHNhLT5jaHVua3Mp LAorCQkJICAgc2l6ZW9mKGRzYV9wb2ludGVyKSAqIHNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRf c2l6ZSk7CisJCWRzYV9mcmVlKGFyZWEsIHNhLT5jaHVua3MpOworCQlzYS0+Y2h1bmtzID0gbmV3 X2NodW5rczsKKwkJc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gbmV3X3NpemU7CisJ fQorCWVsc2UKKwkJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5r cyk7CisKKwkvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgY2h1bmssIGFsbG9jYXRp bmcgaXQgaWYgbmVlZGVkLiAqLworCWlmIChjaHVua19hcnJheVtjaHVua19udW1iZXJdID09IElu dmFsaWREc2FQb2ludGVyKQorCQljaHVua19hcnJheVtjaHVua19udW1iZXJdID0KKwkJCWRzYV9h bGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKHBncGFfc2hhcmVkX2FkdmljZV9jaHVuaykpOworCWNodW5r ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIGNodW5rX2FycmF5W2NodW5rX251bWJlcl0pOworCisJ LyogU2F2ZSBwb2ludGVyIGFuZCBidW1wIG5leHQtaWQgY291bnRlci4gKi8KKwlBc3NlcnQoY2h1 bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSA9PSBJbnZhbGlkRHNhUG9pbnRlcik7CisJY2h1bmst PmVudHJpZXNbY2h1bmtfb2Zmc2V0XSA9IGNhX3BvaW50ZXI7CisJKytzYS0+bmV4dF9pZDsKKwor CS8qIElmIHdlJ3ZlIGV4Y2VlZGVkIHRoZSBzdG9yYWdlIGxpbWl0LCBkaXNjYXJkIG9sZCBkYXRh LiAqLworCXBncGFfdHJpbV9zaGFyZWRfYWR2aWNlKGFyZWEsIHBnX3BsYW5fYWR2aWNlX3NoYXJl ZF9jb2xsZWN0aW9uX2xpbWl0KTsKKworCS8qIFJlbGVhc2UgbG9jayBvbiBzaGFyZWQgc3RhdGUu ICovCisJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworfQorCisvKgorICogRGlzY2FyZCBj b2xsZWN0ZWQgYWR2aWNlIHN0b3JlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeSBpbiBleGNlc3Mg b2YgdGhlCisgKiBzcGVjaWZpZWQgbGltaXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3RyaW1f bG9jYWxfYWR2aWNlKGludCBsaW1pdCkKK3sKKwlwZ3BhX2xvY2FsX2FkdmljZSAqbGEgPSBsb2Nh bF9jb2xsZWN0b3I7CisJdWludDY0CQljdXJyZW50X2NvdW50OworCXVpbnQ2NAkJdHJpbV9jb3Vu dDsKKwl1aW50NjQJCXRvdGFsX2NodW5rX2NvdW50OworCXVpbnQ2NAkJdHJpbV9jaHVua19jb3Vu dDsKKwl1aW50NjQJCXJlbWFpbmluZ19jaHVua19jb3VudDsKKworCS8qIElmIHdlIGhhdmVuJ3Qg eWV0IHJlYWNoZWQgdGhlIGxpbWl0LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uICovCisJY3VycmVu dF9jb3VudCA9IGxhLT5uZXh0X2lkIC0gbGEtPm9sZGVzdF9pZDsKKwlpZiAoY3VycmVudF9jb3Vu dCA8PSBsaW1pdCkKKwkJcmV0dXJuOworCisJLyogRnJlZSBlbm91Z2ggZW50cmllcyB0byBnZXQg dXMgYmFjayBkb3duIHRvIHRoZSBsaW1pdC4gKi8KKwl0cmltX2NvdW50ID0gY3VycmVudF9jb3Vu dCAtIGxpbWl0OworCXdoaWxlICh0cmltX2NvdW50ID4gMCkKKwl7CisJCXVpbnQ2NAkJY2h1bmtf bnVtYmVyOworCQl1aW50NjQJCWNodW5rX29mZnNldDsKKworCQljaHVua19udW1iZXIgPSAobGEt Pm9sZGVzdF9pZCAtIGxhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19v ZmZzZXQgPSAobGEtPm9sZGVzdF9pZCAtIGxhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpF OworCisJCUFzc2VydChsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zm c2V0XSAhPSBOVUxMKTsKKwkJcGZyZWUobGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5lbnRyaWVz W2NodW5rX29mZnNldF0pOworCQlsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1 bmtfb2Zmc2V0XSA9IE5VTEw7CisJCSsrbGEtPm9sZGVzdF9pZDsKKwkJLS10cmltX2NvdW50Owor CX0KKworCS8qIEZyZWUgYW55IGNodW5rcyB0aGF0IGFyZSBub3cgZW50aXJlbHkgdW51c2VkLiAq LworCXRyaW1fY2h1bmtfY291bnQgPSAobGEtPm9sZGVzdF9pZCAtIGxhLT5iYXNlX2lkKSAvIEFE VklDRV9DSFVOS19TSVpFOworCWZvciAodWludDY0IG4gPSAwOyBuIDwgdHJpbV9jaHVua19jb3Vu dDsgKytuKQorCQlwZnJlZShsYS0+Y2h1bmtzW25dKTsKKworCS8qIFNsaWRlIHJlbWFpbmluZyBj aHVuayBwb2ludGVycyBiYWNrIHRvd2FyZCB0aGUgYmFzZSBvZiB0aGUgYXJyYXkuICovCisJdG90 YWxfY2h1bmtfY291bnQgPSAobGEtPm5leHRfaWQgLSBsYS0+YmFzZV9pZCArCisJCQkJCQkgQURW SUNFX0NIVU5LX1NJWkUgLSAxKSAvIEFEVklDRV9DSFVOS19TSVpFOworCXJlbWFpbmluZ19jaHVu a19jb3VudCA9IHRvdGFsX2NodW5rX2NvdW50IC0gdHJpbV9jaHVua19jb3VudDsKKwlpZiAocmVt YWluaW5nX2NodW5rX2NvdW50ID4gMCkKKwkJbWVtbW92ZSgmbGEtPmNodW5rc1swXSwgJmxhLT5j aHVua3NbdHJpbV9jaHVua19jb3VudF0sCisJCQkJc2l6ZW9mKHBncGFfbG9jYWxfYWR2aWNlX2No dW5rICopICogcmVtYWluaW5nX2NodW5rX2NvdW50KTsKKworCS8qIERvbid0IGxlYXZlIHN0YWxl IHBvaW50ZXJzIGFyb3VuZC4gKi8KKwltZW1zZXQoJmxhLT5jaHVua3NbcmVtYWluaW5nX2NodW5r X2NvdW50XSwgMCwKKwkJICAgc2l6ZW9mKHBncGFfbG9jYWxfYWR2aWNlX2NodW5rICopCisJCSAg ICogKHRvdGFsX2NodW5rX2NvdW50IC0gcmVtYWluaW5nX2NodW5rX2NvdW50KSk7CisKKwkvKiBB ZGp1c3QgYmFzZSBJRCB2YWx1ZSBhY2NvcmRpbmdseS4gKi8KKwlsYS0+YmFzZV9pZCArPSB0cmlt X2NodW5rX2NvdW50ICogQURWSUNFX0NIVU5LX1NJWkU7Cit9CisKKy8qCisgKiBEaXNjYXJkIGNv bGxlY3RlZCBhZHZpY2Ugc3RvcmVkIGluIHNoYXJlZCBtZW1vcnkgaW4gZXhjZXNzIG9mIHRoZQor ICogc3BlY2lmaWVkIGxpbWl0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV90cmltX3NoYXJlZF9h ZHZpY2UoZHNhX2FyZWEgKmFyZWEsIGludCBsaW1pdCkKK3sKKwlwZ3BhX3NoYXJlZF9hZHZpY2Ug KnNhID0gc2hhcmVkX2NvbGxlY3RvcjsKKwl1aW50NjQJCWN1cnJlbnRfY291bnQ7CisJdWludDY0 CQl0cmltX2NvdW50OworCXVpbnQ2NAkJdG90YWxfY2h1bmtfY291bnQ7CisJdWludDY0CQl0cmlt X2NodW5rX2NvdW50OworCXVpbnQ2NAkJcmVtYWluaW5nX2NodW5rX2NvdW50OworCWRzYV9wb2lu dGVyICpjaHVua19hcnJheTsKKworCS8qIElmIHdlIGhhdmVuJ3QgeWV0IHJlYWNoZWQgdGhlIGxp bWl0LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uICovCisJY3VycmVudF9jb3VudCA9IHNhLT5uZXh0 X2lkIC0gc2EtPm9sZGVzdF9pZDsKKwlpZiAoY3VycmVudF9jb3VudCA8PSBsaW1pdCkKKwkJcmV0 dXJuOworCisJLyogR2V0IGEgcG9pbnRlciB0byB0aGUgY2h1bmsgYXJyYXkuICovCisJY2h1bmtf YXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyk7CisKKwkvKiBGcmVlIGVu b3VnaCBlbnRyaWVzIHRvIGdldCB1cyBiYWNrIGRvd24gdG8gdGhlIGxpbWl0LiAqLworCXRyaW1f Y291bnQgPSBjdXJyZW50X2NvdW50IC0gbGltaXQ7CisJd2hpbGUgKHRyaW1fY291bnQgPiAwKQor CXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlw Z3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKmNodW5rOworCisJCWNodW5rX251bWJlciA9IChzYS0+ b2xkZXN0X2lkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29m ZnNldCA9IChzYS0+b2xkZXN0X2lkIC0gc2EtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7 CisKKwkJY2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgY2h1bmtfYXJyYXlbY2h1bmtfbnVt YmVyXSk7CisJCUFzc2VydChjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdICE9IEludmFsaWRE c2FQb2ludGVyKTsKKwkJZHNhX2ZyZWUoYXJlYSwgY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0 XSk7CisJCWNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBJbnZhbGlkRHNhUG9pbnRlcjsK KwkJKytzYS0+b2xkZXN0X2lkOworCQktLXRyaW1fY291bnQ7CisJfQorCisJLyogRnJlZSBhbnkg Y2h1bmtzIHRoYXQgYXJlIG5vdyBlbnRpcmVseSB1bnVzZWQuICovCisJdHJpbV9jaHVua19jb3Vu dCA9IChzYS0+b2xkZXN0X2lkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJ Zm9yICh1aW50NjQgbiA9IDA7IG4gPCB0cmltX2NodW5rX2NvdW50OyArK24pCisJCWRzYV9mcmVl KGFyZWEsIGNodW5rX2FycmF5W25dKTsKKworCS8qIFNsaWRlIHJlbWFpbmluZyBjaHVuayBwb2lu dGVycyBiYWNrIHRvd2FyZCB0aGUgYmFzZSBvZiB0aGUgYXJyYXkuICovCisJdG90YWxfY2h1bmtf Y291bnQgPSAoc2EtPm5leHRfaWQgLSBzYS0+YmFzZV9pZCArCisJCQkJCQkgQURWSUNFX0NIVU5L X1NJWkUgLSAxKSAvIEFEVklDRV9DSFVOS19TSVpFOworCXJlbWFpbmluZ19jaHVua19jb3VudCA9 IHRvdGFsX2NodW5rX2NvdW50IC0gdHJpbV9jaHVua19jb3VudDsKKwlpZiAocmVtYWluaW5nX2No dW5rX2NvdW50ID4gMCkKKwkJbWVtbW92ZSgmY2h1bmtfYXJyYXlbMF0sICZjaHVua19hcnJheVt0 cmltX2NodW5rX2NvdW50XSwKKwkJCQlzaXplb2YoZHNhX3BvaW50ZXIpICogcmVtYWluaW5nX2No dW5rX2NvdW50KTsKKworCS8qIERvbid0IGxlYXZlIHN0YWxlIHBvaW50ZXJzIGFyb3VuZC4gKi8K KwltZW1zZXQoJmNodW5rX2FycmF5W3JlbWFpbmluZ19jaHVua19jb3VudF0sIDAsCisJCSAgIHNp emVvZihwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKikKKwkJICAgKiAodG90YWxfY2h1bmtfY291 bnQgLSByZW1haW5pbmdfY2h1bmtfY291bnQpKTsKKworCS8qIEFkanVzdCBiYXNlIElEIHZhbHVl IGFjY29yZGluZ2x5LiAqLworCXNhLT5iYXNlX2lkICs9IHRyaW1fY2h1bmtfY291bnQgKiBBRFZJ Q0VfQ0hVTktfU0laRTsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBmdW5jdGlvbiB0byBkaXNj YXJkIGFkdmljZSBjb2xsZWN0ZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1vcnkKKyAqLworRGF0dW0K K3BnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlp ZiAobG9jYWxfY29sbGVjdG9yICE9IE5VTEwpCisJCXBncGFfdHJpbV9sb2NhbF9hZHZpY2UoMCk7 CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9u IHRvIGRpc2NhcmQgYWR2aWNlIGNvbGxlY3RlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeQorICov CitEYXR1bQorcGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJH UykKK3sKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBwZ19wbGFuX2FkdmljZV9hdHRhY2go KTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEoKTsKKworCUxX TG9ja0FjcXVpcmUoJnN0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCisJLyoKKwkgKiBJZiB3 ZSdyZSBub3QgYXR0YWNoZWQgdG8gdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yIHlldCwgZml4 IHRoYXQgbm93OworCSAqIGJ1dCBpZiB0aGUgY29sbGVjdG9yIGRvZXNuJ3QgZXZlbiBleGlzdCwg d2UgY2FuIHJldHVybiB3aXRob3V0IGRvaW5nCisJICogYW55dGhpbmcgZWxzZS4KKwkgKi8KKwlp ZiAoc2hhcmVkX2NvbGxlY3RvciA9PSBOVUxMKQorCXsKKwkJaWYgKHN0YXRlLT5zaGFyZWRfY29s bGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZzdGF0 ZS0+bG9jayk7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisJCXNoYXJlZF9jb2xsZWN0b3Ig PSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IpOworCX0KKwor CS8qIERvIHRoZSByZWFsIHdvcmsgKi8KKwlwZ3BhX3RyaW1fc2hhcmVkX2FkdmljZShhcmVhLCAw KTsKKworCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKworCVBHX1JFVFVSTl9WT0lEKCk7 Cit9CisKKy8qCisgKiBTUUwtY2FsbGFibGUgU1JGIHRvIHJldHVybiBhZHZpY2UgY29sbGVjdGVk IGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19nZXRfY29sbGVjdGVkX2xv Y2FsX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaW5mbyA9 IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlwZ3BhX2xvY2FsX2Fkdmlj ZSAqbGEgPSBsb2NhbF9jb2xsZWN0b3I7CisJT2lkCQkJdXNlcmlkID0gR2V0VXNlcklkKCk7CisK KwlJbml0TWF0ZXJpYWxpemVkU1JGKGZjaW5mbywgMCk7CisKKwlpZiAobGEgPT0gTlVMTCkKKwkJ cmV0dXJuIChEYXR1bSkgMDsKKworCS8qIExvb3Agb3ZlciBhbGwgZW50cmllcy4gKi8KKwlmb3Ig KHVpbnQ2NCBpZCA9IGxhLT5vbGRlc3RfaWQ7IGlkIDwgbGEtPm5leHRfaWQ7ICsraWQpCisJewor CQl1aW50NjQJCWNodW5rX251bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZzZXQ7CisJCXBncGFf Y29sbGVjdGVkX2FkdmljZSAqY2E7CisJCURhdHVtCQl2YWx1ZXNbUEdfR0VUX0FEVklDRV9DT0xV TU5TXTsKKwkJYm9vbAkJbnVsbHNbUEdfR0VUX0FEVklDRV9DT0xVTU5TXSA9IHswfTsKKworCQlj aHVua19udW1iZXIgPSAoaWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwkJ Y2h1bmtfb2Zmc2V0ID0gKGlkIC0gbGEtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisK KwkJY2EgPSBsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0XTsK KworCQlpZiAoIW1lbWJlcl9jYW5fc2V0X3JvbGUodXNlcmlkLCBjYS0+dXNlcmlkKSkKKwkJCWNv bnRpbnVlOworCisJCXZhbHVlc1swXSA9IFVJbnQ2NEdldERhdHVtKGlkKTsKKwkJdmFsdWVzWzFd ID0gT2JqZWN0SWRHZXREYXR1bShjYS0+dXNlcmlkKTsKKwkJdmFsdWVzWzJdID0gT2JqZWN0SWRH ZXREYXR1bShjYS0+ZGJpZCk7CisJCXZhbHVlc1szXSA9IFVJbnQ2NEdldERhdHVtKGNhLT5xdWVy eWlkKTsKKwkJdmFsdWVzWzRdID0gVGltZXN0YW1wR2V0RGF0dW0oY2EtPnRpbWVzdGFtcCk7CisJ CXZhbHVlc1s1XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocXVlcnlfc3RyaW5nKGNhKSk7CisJCXZh bHVlc1s2XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2aWNlX3N0cmluZyhjYSkpOworCisJCXR1 cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsCisJ CQkJCQkJIHZhbHVlcywgbnVsbHMpOworCX0KKworCXJldHVybiAoRGF0dW0pIDA7Cit9CisKKy8q CisgKiBTUUwtY2FsbGFibGUgU1JGIHRvIHJldHVybiBhZHZpY2UgY29sbGVjdGVkIGluIHNoYXJl ZCBtZW1vcnkKKyAqLworRGF0dW0KK3BnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZShQR19G VU5DVElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZv ICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBwZ19w bGFuX2FkdmljZV9hdHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfcGxhbl9hZHZpY2Vf ZHNhX2FyZWEoKTsKKwlkc2FfcG9pbnRlciAqY2h1bmtfYXJyYXk7CisJcGdwYV9zaGFyZWRfYWR2 aWNlICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisKKwlJbml0TWF0ZXJpYWxpemVkU1JGKGZjaW5m bywgMCk7CisKKwkvKiBMb2NrIHRoZSBzaGFyZWQgc3RhdGUuICovCisJTFdMb2NrQWNxdWlyZSgm c3RhdGUtPmxvY2ssIExXX1NIQVJFRCk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hl ZCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3c7CisJICog YnV0IGlmIHRoZSBjb2xsZWN0b3IgZG9lc24ndCBldmVuIGV4aXN0LCB3ZSBjYW4gcmV0dXJuIHdp dGhvdXQgZG9pbmcKKwkgKiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChzYSA9PSBOVUxMKQor CXsKKwkJaWYgKHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQor CQl7CisJCQlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisJCQlyZXR1cm4gKERhdHVtKSAw OworCQl9CisJCXNoYXJlZF9jb2xsZWN0b3IgPSBzYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBz dGF0ZS0+c2hhcmVkX2NvbGxlY3Rvcik7CisJfQorCisJLyogR2V0IGEgcG9pbnRlciB0byB0aGUg Y2h1bmsgYXJyYXkuICovCisJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2Et PmNodW5rcyk7CisKKwkvKiBMb29wIG92ZXIgYWxsIGVudHJpZXMuICovCisJZm9yICh1aW50NjQg aWQgPSBzYS0+b2xkZXN0X2lkOyBpZCA8IHNhLT5uZXh0X2lkOyArK2lkKQorCXsKKwkJdWludDY0 CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlwZ3BhX3NoYXJlZF9h ZHZpY2VfY2h1bmsgKmNodW5rOworCQlwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlEYXR1 bQkJdmFsdWVzW1BHX0dFVF9BRFZJQ0VfQ09MVU1OU107CisJCWJvb2wJCW51bGxzW1BHX0dFVF9B RFZJQ0VfQ09MVU1OU10gPSB7MH07CisKKwkJY2h1bmtfbnVtYmVyID0gKGlkIC0gc2EtPmJhc2Vf aWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChpZCAtIHNhLT5iYXNl X2lkKSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJCWNodW5rID0gZHNhX2dldF9hZGRyZXNzKGFy ZWEsIGNodW5rX2FycmF5W2NodW5rX251bWJlcl0pOworCQljYSA9IGRzYV9nZXRfYWRkcmVzcyhh cmVhLCBjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdKTsKKworCQl2YWx1ZXNbMF0gPSBVSW50 NjRHZXREYXR1bShpZCk7CisJCXZhbHVlc1sxXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPnVzZXJp ZCk7CisJCXZhbHVlc1syXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPmRiaWQpOworCQl2YWx1ZXNb M10gPSBVSW50NjRHZXREYXR1bShjYS0+cXVlcnlpZCk7CisJCXZhbHVlc1s0XSA9IFRpbWVzdGFt cEdldERhdHVtKGNhLT50aW1lc3RhbXApOworCQl2YWx1ZXNbNV0gPSBDU3RyaW5nR2V0VGV4dERh dHVtKHF1ZXJ5X3N0cmluZyhjYSkpOworCQl2YWx1ZXNbNl0gPSBDU3RyaW5nR2V0VGV4dERhdHVt KGFkdmljZV9zdHJpbmcoY2EpKTsKKworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNl dFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLAorCQkJCQkJCSB2YWx1ZXMsIG51bGxzKTsKKwl9CisK KwkvKiBSZWxlYXNlIGxvY2sgb24gc2hhcmVkIHN0YXRlLiAqLworCUxXTG9ja1JlbGVhc2UoJnN0 YXRlLT5sb2NrKTsKKworCXJldHVybiAoRGF0dW0pIDA7Cit9CmRpZmYgLS1naXQgYS9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfY29sbGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmI2ZTc0NmEwNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX2NvbGxlY3Rvci5oCkBAIC0wLDAgKzEsMTggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIHBncGFfY29sbGVjdG9yLmgKKyAqCSAgY29sbGVjdCBhZHZpY2UgaW50byBiYWNrZW5kLWxv Y2FsIG9yIHNoYXJlZCBtZW1vcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisj aWZuZGVmIFBHUEFfQ09MTEVDVE9SX0gKKyNkZWZpbmUgUEdQQV9DT0xMRUNUT1JfSAorCitleHRl cm4gdm9pZCBwZ3BhX2NvbGxlY3RfYWR2aWNlKHVpbnQ2NCBxdWVyeUlkLCBjb25zdCBjaGFyICpx dWVyeV9zdHJpbmcsCisJCQkJCQkJCWNvbnN0IGNoYXIgKmFkdmljZV9zdHJpbmcpOworCisjZW5k aWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yZmE4MDc1ZDY2ZQotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKQEAgLTAsMCArMSw0NzYg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfaWRlbnRpZmllci5jCisgKgkgIGNy ZWF0ZSBhcHByb3ByaWF0ZSBpZGVudGlmaWVycyBmb3IgcmFuZ2UgdGFibGUgZW50cmllcworICoK KyAqIFRoZSBnb2FsIG9mIHRoaXMgbW9kdWxlIGlzIHRvIGJlIGFibGUgdG8gcHJvZHVjZSBpZGVu dGlmaWVycyBmb3IgcmFuZ2UKKyAqIHRhYmxlIGVudHJpZXMgdGhhdCBhcmUgdW5pcXVlLCB1bmRl cnN0YW5kYWJsZSB0byBodW1hbiBiZWluZ3MsIGFuZAorICogYWJsZSB0byBiZSByZWNvbnN0cnVj dGVkIGR1cmluZyBmdXR1cmUgcGxhbm5pbmcgY3ljbGVzLiBBcyBhbgorICogZXhjZXB0aW9uLCB3 ZSBkbyBub3QgY2FyZSBhYm91dCwgb3Igd2FudCB0byBwcm9kdWNlLCBpZGVudGlmaWVycyBmb3IK KyAqIFJURV9KT0lOIGVudHJpZXMuIFRoaXMgaXMgYmVjYXVzZSAoMSkgd2Ugd291bGQgZW5kIHVw IHdpdGggYSB0b24gb2YKKyAqIFJURXMgd2l0aCB1bmhlbHBmdWwgbmFtZXMgbGlrZSB1bm5hbWVk X2pvaW5fMTc7ICgyKSBub3QgYWxsIGpvaW5zIGhhdmUKKyAqIFJURXM7IGFuZCAoMykgd2UgaW50 ZW5kIHRvIHJlZmVyIHRvIGpvaW5zIGJ5IHRoZWlyIGNvbnN0aXR1ZW50IG1lbWJlcnMKKyAqIHJh dGhlciB0aGFuIGJ5IHJlZmVyZW5jZSB0byB0aGUgam9pbiBSVEUuCisgKgorICogSW4gZ2VuZXJh bCwgd2UgY29uc3RydWN0IGlkZW50aWZpZXJzIG9mIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAqCisg KiBhbGlhc19uYW1lI29jY3VycmVuY2VfbnVtYmVyL2NoaWxkX3RhYmxlX25hbWVAc3VicXVlcnlf bmFtZQorICoKKyAqIEhvd2V2ZXIsIG9jY3VycmVuY2VfbnVtYmVyIGlzIG9taXR0ZWQgd2hlbiBp dCBpcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZQorICogd2l0aGluIHRoZSBzYW1lIHN1YnF1ZXJ5LCBj aGlsZF90YWJsZV9uYW1lIGlzIG9taXR0ZWQgZm9yIHJlbGF0aW9ucyB0aGF0CisgKiBhcmUgbm90 IGNoaWxkIHRhYmxlcywgYW5kIHN1YnF1ZXJ5X25hbWUgaXMgb21pdHRlZCBmb3IgdGhlIHRvcG1v c3QKKyAqIHF1ZXJ5IGxldmVsLiBXaGVuZXZlciBhbiBpdGVtIGlzIG9taXR0ZWQsIHRoZSBwcmVj ZWRpbmcgcHVuY3R1YXRpb24gbWFyaworICogaXMgYWxzbyBvbWl0dGVkLiAgSWRlbnRpZmllci1z dHlsZSBlc2NhcGluZyBpcyBhcHBsaWVkIHRvIGFsaWFzX25hbWUgYW5kCisgKiBzdWJxdWVyeV9u YW1lLiAgV2hlbmV2ZXIgd2UgaW5jbHVkZSBjaGlsZF90YWJsZV9uYW1lLCB3ZSBhbHdheXMKKyAq IHNjaGVtYS1xdWFsaWZpZWQgbmFtZSwgYnV0IHdyaXRpbmcgdGhlaXIgb3duIHBsYW4gYWR2aWNl IGFyZSBub3QgcmVxdWlyZWQKKyAqIHRvIGRvIHNvLiAgSWRlbnRpZmllci1zdHlsZSBlc2NhcGlu ZyBpcyBhcHBsaWVkIHRvIHRoZSBzY2hlbWEgYW5kIHRvIHRoZQorICogcmVsYXRpb24gbmFtZXMg c2VwYXJhdGVseS4KKyAqCisgKiBUaGUgdXBzaG90IG9mIGFsbCBvZiB0aGVzZSBydWxlcyBpcyB0 aGF0IGluIHNpbXBsZSBjYXNlcywgdGhlIHJlbGF0aW9uCisgKiBpZGVudGlmaWVyIGlzIHRleHR1 YWxseSBpZGVudGljYWwgdG8gdGhlIGFsaWFzIG5hbWUsIG1ha2luZyBsaWZlIGVhc2llcgorICog Zm9yIHVzZXJzLiBIb3dldmVyLCBldmVuIGluIGNvbXBsZXggY2FzZXMsIGV2ZXJ5IHJlbGF0aW9u IGlkZW50aWZpZXIKKyAqIGZvciBhIGdpdmVuIHF1ZXJ5IHdpbGwgYmUgdW5pcXVlIChvciBhdCBs ZWFzdCB3ZSBob3BlIHNvOiBpZiBub3QsIHRoaXMKKyAqIGNvZGUgaXMgYnVnZ3kgYW5kIHRoZSBp ZGVudGlmaWVyIGZvcm1hdCBtaWdodCBuZWVkIHRvIGJlIHJldGhvdWdodCkuCisgKgorICogQSBr ZXkgZ29hbCBvZiB0aGlzIHN5c3RlbSBpcyB0aGF0IHdlIHdhbnQgdG8gYmUgYWJsZSB0byByZWNv bnN0cnVjdCB0aGUKKyAqIHNhbWUgaWRlbnRpZmllcnMgZHVyaW5nIGEgZnV0dXJlIHBsYW5uaW5n IGN5Y2xlIGZvciB0aGUgc2FtZSBxdWVyeSwgc28KKyAqIHRoYXQgaWYgYSBjZXJ0YWluIGJlaGF2 aW9yIGlzIHNwZWNpZmllZCBmb3IgYSBjZXJ0YWluIGlkZW50aWZpZXIsIHdlIGNhbgorICogcHJv cGVybHkgaWRlbnRpZnkgdGhlIFJUSSBmb3Igd2hpY2ggdGhhdCBiZWhhdmlvciBpcyBtYW5kYXRl ZC4gSW4gb3JkZXIKKyAqIGZvciB0aGlzIHRvIHdvcmssIHN1YnF1ZXJ5IG5hbWVzIG11c3QgYmUg dW5pcXVlIGFuZCBrbm93biBiZWZvcmUgdGhlCisgKiBzdWJxdWVyeSBpcyBwbGFubmVkLCBhbmQg dGhlIHJlbWFpbmRlciBvZiB0aGUgaWRlbnRpZmllciBtdXN0IG5vdCBkZXBlbmQKKyAqIG9uIGFu eSBwYXJ0IG9mIHRoZSBxdWVyeSBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHN1YnF1ZXJ5IGxldmVs LiBJbgorICogcGFydGljdWxhciwgb2NjdXJyZW5jZV9udW1iZXIgbXVzdCBiZSBjYWxjdWxhdGVk IHJlbGF0aXZlIHRvIHRoZSByYW5nZQorICogdGFibGUgZm9yIHRoZSByZWxldmFudCBzdWJxdWVy eSwgbm90IHRoZSBmaW5hbCBmbGF0dGVuZWQgcmFuZ2UgdGFibGUuCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgor ICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJw Z3BhX2lkZW50aWZpZXIuaCIKKworI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKyNpbmNs dWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorCitz dGF0aWMgSW5kZXggKnBncGFfY3JlYXRlX3RvcF9ydGlfbWFwKEluZGV4IHJ0YWJsZV9sZW5ndGgs IExpc3QgKnJ0YWJsZSwKKwkJCQkJCQkJCSAgTGlzdCAqYXBwaW5mb3MpOworc3RhdGljIGludAlw Z3BhX29jY3VycmVuY2VfbnVtYmVyKExpc3QgKnJ0YWJsZSwgSW5kZXggKnRvcF9ydGlfbWFwLAor CQkJCQkJCQkgICBTdWJQbGFuUlRJbmZvICpydGluZm8sIEluZGV4IHJ0aSk7CisKKy8qCisgKiBD cmVhdGUgYSByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGZyb20gc2NyYXRjaC4KKyAqCisgKiBUaGlz IGZ1bmN0aW9uIGxlYXZlcyB0aGUgY2FsbGVyIHRvIGRvIGFsbCB0aGUgaGVhdnkgbGlmdGluZywg c28gaXQncworICogZ2VuZXJhbGx5IGJldHRlciB0byB1c2Ugb25lIG9mIHRoZSBmdW5jdGlvbnMg YmVsb3cgaW5zdGVhZC4KKyAqCisgKiBTZWUgdGhlIGZpbGUgaGVhZGVyIGNvbW1lbnRzIGZvciBt b3JlIGRldGFpbHMgb24gdGhlIGZvcm1hdCBvZiBhbgorICogaWRlbnRpZmllci4KKyAqLworY29u c3QgY2hhciAqCitwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKGNvbnN0IHBncGFfaWRlbnRpZmllciAq cmlkKQoreworCWNvbnN0IGNoYXIgKnJlc3VsdDsKKworCUFzc2VydChyaWQtPmFsaWFzX25hbWUg IT0gTlVMTCk7CisJcmVzdWx0ID0gcXVvdGVfaWRlbnRpZmllcihyaWQtPmFsaWFzX25hbWUpOwor CisJQXNzZXJ0KHJpZC0+b2NjdXJyZW5jZSA+PSAwKTsKKwlpZiAocmlkLT5vY2N1cnJlbmNlID4g MSkKKwkJcmVzdWx0ID0gcHNwcmludGYoIiVzIyVkIiwgcmVzdWx0LCByaWQtPm9jY3VycmVuY2Up OworCisJaWYgKHJpZC0+cGFydHJlbCAhPSBOVUxMKQorCXsKKwkJaWYgKHJpZC0+cGFydG5zcCA9 PSBOVUxMKQorCQkJcmVzdWx0ID0gcHNwcmludGYoIiVzLyVzIiwgcmVzdWx0LAorCQkJCQkJCSAg cXVvdGVfaWRlbnRpZmllcihyaWQtPnBhcnRuc3ApKTsKKwkJZWxzZQorCQkJcmVzdWx0ID0gcHNw cmludGYoIiVzLyVzLiVzIiwgcmVzdWx0LAorCQkJCQkJCSAgcXVvdGVfaWRlbnRpZmllcihyaWQt PnBhcnRuc3ApLAorCQkJCQkJCSAgcXVvdGVfaWRlbnRpZmllcihyaWQtPnBhcnRyZWwpKTsKKwl9 CisKKwlpZiAocmlkLT5wbGFuX25hbWUgIT0gTlVMTCkKKwkJcmVzdWx0ID0gcHNwcmludGYoIiVz QCVzIiwgcmVzdWx0LCBxdW90ZV9pZGVudGlmaWVyKHJpZC0+cGxhbl9uYW1lKSk7CisKKwlyZXR1 cm4gcmVzdWx0OworfQorCisvKgorICogQ29tcHV0ZSBhIHJlbGF0aW9uIGlkZW50aWZpZXIgZm9y IGEgcGFydGljdWxhciBSVEkuCisgKgorICogVGhlIGNhbGxlciBwcm92aWRlcyByb290IGFuZCBy dGksIGFuZCBnZXRzIHRoZSBuZWNlc3NhcnkgZGV0YWlscyBiYWNrIHZpYQorICogdGhlIHJlbWFp bmluZyBwYXJhbWV0ZXJzLgorICovCit2b2lkCitwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcl9ieV9y dGkoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJ0aSwKKwkJCQkJCQkgICBwZ3BhX2lkZW50aWZp ZXIgKnJpZCkKK3sKKwlJbmRleAkJdG9wX3J0aSA9IHJ0aTsKKwlpbnQJCQlvY2N1cnJlbmNlID0g MTsKKwlSYW5nZVRibEVudHJ5ICpydGU7CisJUmFuZ2VUYmxFbnRyeSAqdG9wX3J0ZTsKKwljaGFy CSAgICpwYXJ0bnNwID0gTlVMTDsKKwljaGFyCSAgICpwYXJ0cmVsID0gTlVMTDsKKworCS8qCisJ ICogSWYgdGhpcyBpcyBhIGNoaWxkIFJURSwgZmluZCB0aGUgdG9wbW9zdCBwYXJlbnQgdGhhdCBp cyBzdGlsbCBvZiB0eXBlCisJICogUlRFX1JFTEFUSU9OLiBXZSBkbyB0aGlzIGJlY2F1c2Ugd2Ug aWRlbnRpZnkgY2hpbGRyZW4gb2YgcGFydGl0aW9uZWQKKwkgKiB0YWJsZXMgYnkgdGhlIG5hbWUg b2YgdGhlIGNoaWxkIHRhYmxlLCBidXQgc3VicXVlcmllcyBjYW4gYWxzbyBoYXZlCisJICogY2hp bGQgcmVscyBhbmQgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aG9zZSBoZXJlLgorCSAqLworCWZvciAo OzspCisJeworCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvOworCQlSYW5nZVRibEVudHJ5ICpwYXJl bnRfcnRlOworCisJCS8qIGFwcGVuZF9yZWxfYXJyYXkgY2FuIGJlIE5VTEwgaWYgdGhlcmUgYXJl IG5vIGNoaWxkcmVuICovCisJCWlmIChyb290LT5hcHBlbmRfcmVsX2FycmF5ID09IE5VTEwgfHwK KwkJCShhcHBpbmZvID0gcm9vdC0+YXBwZW5kX3JlbF9hcnJheVt0b3BfcnRpXSkgPT0gTlVMTCkK KwkJCWJyZWFrOworCisJCXBhcmVudF9ydGUgPSBwbGFubmVyX3J0X2ZldGNoKGFwcGluZm8tPnBh cmVudF9yZWxpZCwgcm9vdCk7CisJCWlmIChwYXJlbnRfcnRlLT5ydGVraW5kICE9IFJURV9SRUxB VElPTikKKwkJCWJyZWFrOworCisJCXRvcF9ydGkgPSBhcHBpbmZvLT5wYXJlbnRfcmVsaWQ7CisJ fQorCisJLyogR2V0IHRoZSByYW5nZSB0YWJsZSBlbnRyaWVzIGZvciB0aGUgUlRJIGFuZCB0b3Ag UlRJLiAqLworCXJ0ZSA9IHBsYW5uZXJfcnRfZmV0Y2gocnRpLCByb290KTsKKwl0b3BfcnRlID0g cGxhbm5lcl9ydF9mZXRjaCh0b3BfcnRpLCByb290KTsKKwlBc3NlcnQocnRlLT5ydGVraW5kICE9 IFJURV9KT0lOKTsKKwlBc3NlcnQodG9wX3J0ZS0+cnRla2luZCAhPSBSVEVfSk9JTik7CisKKwkv KiBXb3JrIG91dCB0aGUgY29ycmVjdCBvY2N1cnJlbmNlIG51bWJlci4gKi8KKwlmb3IgKEluZGV4 IHByaW9yX3J0aSA9IDE7IHByaW9yX3J0aSA8IHRvcF9ydGk7ICsrcHJpb3JfcnRpKQorCXsKKwkJ UmFuZ2VUYmxFbnRyeSAqcHJpb3JfcnRlOworCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvOworCisJ CS8qCisJCSAqIElmIHRoaXMgaXMgYSBjaGlsZCByZWwgb2YgYSBwYXJlbnQgdGhhdCBpcyBhIHJl bGF0aW9uLCBza2lwIGl0LgorCQkgKgorCQkgKiBTdWNoIHJhbmdlIHRhYmxlIGVudHJpZXMgYXJl IGRpc2FtYmlndWF0ZWQgYnkgbWVudGlvbmluZyB0aGUgc2NoZW1hCisJCSAqIGFuZCBuYW1lIG9m IHRoZSB0YWJsZSwgbm90IGJ5IGNvdW50aW5nIHRoZW0gYXMgc2VwYXJhdGUgb2NjdXJyZW5jZXMK KwkJICogb2YgdGhlIHNhbWUgdGFibGUuCisJCSAqCisJCSAqIE5COiBhcHBlbmRfcmVsX2FycmF5 IGNhbiBiZSBOVUxMIGlmIHRoZXJlIGFyZSBubyBjaGlsZHJlbgorCQkgKi8KKwkJaWYgKHJvb3Qt PmFwcGVuZF9yZWxfYXJyYXkgIT0gTlVMTCAmJgorCQkJKGFwcGluZm8gPSByb290LT5hcHBlbmRf cmVsX2FycmF5W3ByaW9yX3J0aV0pICE9IE5VTEwpCisJCXsKKwkJCVJhbmdlVGJsRW50cnkgKnBh cmVudF9ydGU7CisKKwkJCXBhcmVudF9ydGUgPSBwbGFubmVyX3J0X2ZldGNoKGFwcGluZm8tPnBh cmVudF9yZWxpZCwgcm9vdCk7CisJCQlpZiAocGFyZW50X3J0ZS0+cnRla2luZCA9PSBSVEVfUkVM QVRJT04pCisJCQkJY29udGludWU7CisJCX0KKworCQkvKiBTa2lwIE5VTEwgZW50cmllcyBhbmQg am9pbnMuICovCisJCXByaW9yX3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2gocHJpb3JfcnRpLCByb290 KTsKKwkJaWYgKHByaW9yX3J0ZSA9PSBOVUxMIHx8IHByaW9yX3J0ZS0+cnRla2luZCA9PSBSVEVf Sk9JTikKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgaWYgdGhlIGFsaWFzIG5hbWUgZGlmZmVy cy4gKi8KKwkJaWYgKHN0cmNtcChwcmlvcl9ydGUtPmVyZWYtPmFsaWFzbmFtZSwgcnRlLT5lcmVm LT5hbGlhc25hbWUpICE9IDApCisJCQljb250aW51ZTsKKworCQkvKiBMb29rcyBsaWtlIGEgdHJ1 ZSBkdXBsaWNhdGUuICovCisJCSsrb2NjdXJyZW5jZTsKKwl9CisKKwkvKiBJZiB0aGlzIGlzIGEg Y2hpbGQgdGFibGUsIGdldCB0aGUgc2NoZW1hIGFuZCByZWxhdGlvbiBuYW1lcy4gKi8KKwlpZiAo cnRpICE9IHRvcF9ydGkpCisJeworCQlwYXJ0bnNwID0gZ2V0X25hbWVzcGFjZV9uYW1lX29yX3Rl bXAoZ2V0X3JlbF9uYW1lc3BhY2UocnRlLT5yZWxpZCkpOworCQlwYXJ0cmVsID0gZ2V0X3JlbF9u YW1lKHJ0ZS0+cmVsaWQpOworCX0KKworCS8qIE9LLCB3ZSBoYXZlIGFsbCB0aGUgYW5zd2VycyB3 ZSBuZWVkLiBSZXR1cm4gdGhlbSB0byB0aGUgY2FsbGVyLiAqLworCXJpZC0+YWxpYXNfbmFtZSA9 IHRvcF9ydGUtPmVyZWYtPmFsaWFzbmFtZTsKKwlyaWQtPm9jY3VycmVuY2UgPSBvY2N1cnJlbmNl OworCXJpZC0+cGFydG5zcCA9IHBhcnRuc3A7CisJcmlkLT5wYXJ0cmVsID0gcGFydHJlbDsKKwly aWQtPnBsYW5fbmFtZSA9IHJvb3QtPnBsYW5fbmFtZTsKK30KKworLyoKKyAqIENvbXB1dGUgYSBy ZWxhdGlvbiBpZGVudGlmaWVyIGZvciBhIHNldCBvZiBSVElzLCBleGNlcHQgZm9yIGFueSBSVEVf Sk9JTgorICogUlRJcyB0aGF0IG1heSBiZSBwcmVzZW50LgorICoKKyAqIFJURV9KT0lOIGVudHJp ZXMgYXJlIGV4Y2x1ZGVkIGJlY2F1c2UgdGhleSBjYW5ub3QgYmUgbWVudGlvbmVkIGJ5IHBsYW4K KyAqIGFkdmljZS4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcg c3VyZSB0aGF0IHRoZSB0a2V5cyBhcnJheSBpcyBsYXJnZQorICogZW5vdWdoIHRvIHN0b3JlIHRo ZSByZXN1bHRzLgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBpZGVu dGlmaWVycyBjb21wdXRlZC4KKyAqLworaW50CitwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlf cmVsaWRzKFBsYW5uZXJJbmZvICpyb290LCBCaXRtYXBzZXQgKnJlbGlkcywKKwkJCQkJCQkJICAg cGdwYV9pZGVudGlmaWVyICpyaWRzKQoreworCWludAkJCWNvdW50ID0gMDsKKwlpbnQJCQlydGkg PSAtMTsKKworCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkgPj0g MCkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHBsYW5uZXJfcnRfZmV0Y2gocnRpLCByb290 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 X21hcFtwcmlvcl9ydGkgLSAxXSAhPSBwcmlvcl9ydGkpCisJCQlicmVhazsKKworCQkvKiBTa2lw IGpvaW5zLiAqLworCQlwcmlvcl9ydGUgPSBydF9mZXRjaChwcmlvcl9ydGksIHJ0YWJsZSk7CisJ CWlmIChwcmlvcl9ydGUtPnJ0ZWtpbmQgPT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKworCQkv KiBTa2lwIGlmIHRoZSBhbGlhcyBuYW1lIGRpZmZlcnMuICovCisJCWlmIChzdHJjbXAocHJpb3Jf cnRlLT5lcmVmLT5hbGlhc25hbWUsIHJ0ZS0+ZXJlZi0+YWxpYXNuYW1lKSAhPSAwKQorCQkJY29u dGludWU7CisKKwkJLyogTG9va3MgbGlrZSBhIHRydWUgZHVwbGljYXRlLiAqLworCQkrK29jY3Vy cmVuY2U7CisJfQorCisJcmV0dXJuIG9jY3VycmVuY2U7Cit9CmRpZmYgLS1naXQgYS9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5oIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX2lkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uYjAwMGQyYjcwODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfaWRlbnRpZmllci5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIHBncGFfaWRlbnRpZmllci5oCisgKgkgIGNyZWF0ZSBhcHByb3ByaWF0ZSBpZGVudGlm aWVycyBmb3IgcmFuZ2UgdGFibGUgZW50cmllcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0y MDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisKKyNpZm5kZWYgUEdQQV9JREVOVElGSUVSX0gKKyNkZWZpbmUgUEdQQV9JREVOVElG SUVSX0gKKworI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgorI2luY2x1ZGUgIm5vZGVzL3Bs YW5ub2Rlcy5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2lkZW50aWZpZXIKK3sKKwljb25zdCBj aGFyICphbGlhc19uYW1lOworCWludAkJCW9jY3VycmVuY2U7CisJY29uc3QgY2hhciAqcGFydG5z cDsKKwljb25zdCBjaGFyICpwYXJ0cmVsOworCWNvbnN0IGNoYXIgKnBsYW5fbmFtZTsKK30gcGdw YV9pZGVudGlmaWVyOworCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgY29tcGFyaW5nIHBv c3NpYmx5LU5VTEwgc3RyaW5ncy4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorc3RyaW5nc19lcXVh bF9vcl9ib3RoX251bGwoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKK3sKKwlpZiAoYSA9 PSBiKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlIGlmIChhID09IE5VTEwgfHwgYiA9PSBOVUxMKQor CQlyZXR1cm4gZmFsc2U7CisJZWxzZQorCQlyZXR1cm4gc3RyY21wKGEsIGIpID09IDA7Cit9CisK K2V4dGVybiBjb25zdCBjaGFyICpwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKGNvbnN0IHBncGFfaWRl bnRpZmllciAqcmlkKTsKK2V4dGVybiB2b2lkIHBncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0 aShQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggcnRpLAorCQkJCQkJCQkJCSAgIHBncGFfaWRlbnRp ZmllciAqcmlkKTsKK2V4dGVybiBpbnQJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJzX2J5X3JlbGlk cyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxpZHMsCisJ CQkJCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkcyk7CitleHRlcm4gcGdwYV9pZGVudGlm aWVyICpwZ3BhX2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KFBsYW5uZWRTdG10 ICpwc3RtdCk7CisKK2V4dGVybiBJbmRleCBwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmll cihpbnQgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lk ZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkKTsKKworI2VuZGlm CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5jIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uMjg2MTg3NjRkODYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfam9pbi5jCkBAIC0wLDAgKzEsNjE1IEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiBwZ3BhX2pvaW4uYworICoJICBhbmFseXNpcyBvZiBqb2lucyBpbiBQbGFuIHRy ZWVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9p bi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgi CisKKyNpbmNsdWRlICJwZ3BhX2pvaW4uaCIKKyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKKyNpbmNs dWRlICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAibm9kZXMvcGF0aG5vZGVzLmgiCisjaW5j bHVkZSAibm9kZXMvcHJpbnQuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisKKy8q CisgKiBUZW1wb3Jhcnkgb2JqZWN0IHVzZWQgd2hlbiB1bnJvbGxpbmcgYSBqb2luIHRyZWUuCisg Ki8KK3N0cnVjdCBwZ3BhX2pvaW5fdW5yb2xsZXIKK3sKKwl1bnNpZ25lZAluYWxsb2NhdGVkOwor CXVuc2lnbmVkCW51c2VkOworCVBsYW4JICAgKm91dGVyX3N1YnBsYW47CisJRWxpZGVkTm9kZSAq b3V0ZXJfZWxpZGVkX25vZGU7CisJYm9vbAkJb3V0ZXJfYmVuZWF0aF9hbnlfZ2F0aGVyOworCXBn cGFfam9pbl9zdHJhdGVneSAqc3RyYXRlZ3k7CisJUGxhbgkgICoqaW5uZXJfc3VicGxhbnM7CisJ RWxpZGVkTm9kZSAqKmlubmVyX2VsaWRlZF9ub2RlczsKKwlwZ3BhX2pvaW5fdW5yb2xsZXIgKipp bm5lcl91bnJvbGxlcnM7CisJYm9vbAkgICAqaW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyOworfTsK Kworc3RhdGljIHBncGFfam9pbl9zdHJhdGVneSBwZ3BhX2RlY29tcG9zZV9qb2luKHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCQkgIFBsYW4gKnBsYW4sCisJCQkJ CQkJCQkJCSAgUGxhbiAqKnJlYWxvdXRlciwKKwkJCQkJCQkJCQkJICBQbGFuICoqcmVhbGlubmVy LAorCQkJCQkJCQkJCQkgIEVsaWRlZE5vZGUgKiplbGlkZWRyZWFsb3V0ZXIsCisJCQkJCQkJCQkJ CSAgRWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxpbm5lciwKKwkJCQkJCQkJCQkJICBib29sICpmb3Vu ZF9hbnlfb3V0ZXJfZ2F0aGVyLAorCQkJCQkJCQkJCQkgIGJvb2wgKmZvdW5kX2FueV9pbm5lcl9n YXRoZXIpOworc3RhdGljIEVsaWRlZE5vZGUgKnBncGFfZGVzY2VuZF9ub2RlKFBsYW5uZWRTdG10 ICpwc3RtdCwgUGxhbiAqKnBsYW4pOworc3RhdGljIEVsaWRlZE5vZGUgKnBncGFfZGVzY2VuZF9h bnlfZ2F0aGVyKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4sCisJCQkJCQkJCQkJICAg Ym9vbCAqZm91bmRfYW55X2dhdGhlcik7CitzdGF0aWMgYm9vbCBwZ3BhX2Rlc2NlbmRfYW55X3Vu aXF1ZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJCQkJCQkJRWxpZGVkTm9k ZSAqKmVsaWRlZF9ub2RlKTsKKworc3RhdGljIGJvb2wgaXNfcmVzdWx0X25vZGVfd2l0aF9jaGls ZChQbGFuICpwbGFuKTsKK3N0YXRpYyBib29sIGlzX3NvcnRpbmdfcGxhbihQbGFuICpwbGFuKTsK KworLyoKKyAqIENyZWF0ZSBhbiBpbml0aWFsbHktZW1wdHkgb2JqZWN0IGZvciB1bnJvbGxpbmcg am9pbnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgaGVscGVyIG9iamVjdCB0aGF0 IGNhbiBsYXRlciBiZSB1c2VkIHRvIGNyZWF0ZSBhCisgKiBwZ3BhX3Vucm9sbGVkX2pvaW4sIGFm dGVyIGZpcnN0IGNhbGxpbmcgcGdwYV91bnJvbGxfam9pbiBvbmUgb3IgbW9yZSB0aW1lcy4KKyAq LworcGdwYV9qb2luX3Vucm9sbGVyICoKK3BncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIodm9pZCkK K3sKKwlwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXI7CisKKwlqb2luX3Vucm9sbGVy ID0gcGFsbG9jMF9vYmplY3QocGdwYV9qb2luX3Vucm9sbGVyKTsKKwlqb2luX3Vucm9sbGVyLT5u YWxsb2NhdGVkID0gNDsKKwlqb2luX3Vucm9sbGVyLT5zdHJhdGVneSA9CisJCXBhbGxvY19hcnJh eShwZ3BhX2pvaW5fc3RyYXRlZ3ksIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCWpvaW5f dW5yb2xsZXItPmlubmVyX3N1YnBsYW5zID0KKwkJcGFsbG9jX2FycmF5KFBsYW4gKiwgam9pbl91 bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVz ID0KKwkJcGFsbG9jX2FycmF5KEVsaWRlZE5vZGUgKiwgam9pbl91bnJvbGxlci0+bmFsbG9jYXRl ZCk7CisJam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzID0KKwkJcGFsbG9jX2FycmF5KHBn cGFfam9pbl91bnJvbGxlciAqLCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwlqb2luX3Vu cm9sbGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRoZXIgPQorCQlwYWxsb2NfYXJyYXkoYm9vbCwg am9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisKKwlyZXR1cm4gam9pbl91bnJvbGxlcjsKK30K KworLyoKKyAqIFVucm9sbCBvbmUgbGV2ZWwgb2YgYW4gdW5yb2xsYWJsZSBqb2luIHRyZWUuCisg KgorICogT3VyIGJhc2ljIGdvYWwgaGVyZSBpcyB0byB1bnJvbGwgam9pbiB0cmVlcyBhcyB0aGV5 IG9jY3VyIGluIHRoZSBQbGFuCisgKiB0cmVlIGludG8gYSBzaW1wbGVyIGFuZCBtb3JlIHJlZ3Vs YXIgc3RydWN0dXJlIHRoYXQgd2UgY2FuIG1vcmUgZWFzaWx5CisgKiB1c2UgZm9yIGZ1cnRoZXIg cHJvY2Vzc2luZy4gVW5yb2xsaW5nIGlzIG91dGVyLWRlZXAsIHNvIGlmIHRoZSBwbGFuIHRyZWUK KyAqIGhhcyBKb2luMShKb2luMihBLEIpLEpvaW4zKEMsRCkpLCB0aGUgc2FtZSBqb2luIHVucm9s bGVyIG9iamVjdCBzaG91bGQgYmUKKyAqIHVzZWQgZm9yIEpvaW4xIGFuZCBKb2luMiwgYnV0IGEg ZGlmZmVyZW50IG9uZSB3aWxsIGJlIG5lZWRlZCBmb3IgSm9pbjMsCisgKiBzaW5jZSB0aGF0IGlu dm9sdmVzIGEgam9pbiB3aXRoaW4gdGhlICppbm5lciogc2lkZSBvZiBhbm90aGVyIGpvaW4uCisg KgorICogcGdwYV9wbGFuX3dhbGtlciBjcmVhdGVzIGEgInRvcCBsZXZlbCIgam9pbiB1bnJvbGxl ciBvYmplY3Qgd2hlbiBpdAorICogZW5jb3VudGVycyBhIGpvaW4gaW4gYSBwb3J0aW9uIG9mIHRo ZSBwbGFuIHRyZWUgaW4gd2hpY2ggbm8gam9pbiB1bnJvbGxlcgorICogaXMgYWxyZWFkeSBhY3Rp dmUuIEZyb20gdGhlcmUsIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGRldGVybWlu ZworICogdG8gd2hhdCBwb3J0aW9uIG9mIHRoZSBwbGFuIHRyZWUgdGhhdCBqb2luIHVucm9sbGVy IGFwcGxpZXMsIGFuZCBmb3IKKyAqIGNyZWF0aW5nIGFueSBzdWJvcmRpbmF0ZSBqb2luIHVucm9s bGVyIG9iamVjdHMgdGhhdCBhcmUgbmVlZGVkIGFzIGEgcmVzdWx0CisgKiBvZiBub24tb3V0ZXIt ZGVlcCBqb2luIHRyZWVzLiBXZSBkbyB0aGlzIGJ5IHJldHVybmluZyB0aGUgam9pbiB1bnJvbGxl cgorICogb2JqZWN0cyB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBmdXJ0aGVyIHRyYXZlcnNhbCBv ZiB0aGUgb3V0ZXIgYW5kIGlubmVyCisgKiBzdWJ0cmVlcyBvZiB0aGUgY3VycmVudCBwbGFuIG5v ZGUgdmlhICpvdXRlcl9qb2luX3Vucm9sbGVyIGFuZAorICogKmlubmVyX2pvaW5fdW5yb2xsZXIs IHJlc3BlY3RpdmVseS4KKyAqLwordm9pZAorcGdwYV91bnJvbGxfam9pbihwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkgYm9vbCBiZW5lYXRoX2FueV9n YXRoZXIsCisJCQkJIHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlciwKKwkJCQkgcGdw YV9qb2luX3Vucm9sbGVyICoqb3V0ZXJfam9pbl91bnJvbGxlciwKKwkJCQkgcGdwYV9qb2luX3Vu cm9sbGVyICoqaW5uZXJfam9pbl91bnJvbGxlcikKK3sKKwlwZ3BhX2pvaW5fc3RyYXRlZ3kgc3Ry YXRlZ3k7CisJUGxhbgkgICAqcmVhbGlubmVyLAorCQkJICAgKnJlYWxvdXRlcjsKKwlFbGlkZWRO b2RlICplbGlkZWRpbm5lciwKKwkJCSAgICplbGlkZWRvdXRlcjsKKwlpbnQJCQluOworCWJvb2wJ CWZvdW5kX2FueV9vdXRlcl9nYXRoZXIgPSBmYWxzZTsKKwlib29sCQlmb3VuZF9hbnlfaW5uZXJf Z2F0aGVyID0gZmFsc2U7CisKKwlBc3NlcnQoam9pbl91bnJvbGxlciAhPSBOVUxMKTsKKworCS8q CisJICogV2UgbmVlZCB0byBwYXNzIHRoZSBqb2luX3Vucm9sbGVyIG9iamVjdCBkb3duIHRocm91 Z2ggY2VydGFpbiB0eXBlcyBvZgorCSAqIHBsYW4gbm9kZXMgLS0gYW55dGhpbmcgdGhhdCdzIGNv bnNpZGVyZWQgcGFydCBvZiB0aGUgam9pbiBzdHJhdGVneSwgYW5kCisJICogYW55IG90aGVyIG5v ZGVzIHRoYXQgY2FuIG9jY3VyIGluIGEgam9pbiB0cmVlIGRlc3BpdGUgbm90IGJlaW5nIHNjYW5z CisJICogb3Igam9pbnMuCisJICoKKwkgKiBUaGlzIGluY2x1ZGVzOgorCSAqCisJICogKDEpIE1h dGVyaWFsaXplLCBNZW1vaXplLCBhbmQgSGFzaCBub2Rlcywgd2hpY2ggYXJlIHBhcnQgb2YgdGhl IGpvaW4KKwkgKiBzdHJhdGVneSwKKwkgKgorCSAqICgyKSBHYXRoZXIgYW5kIEdhdGhlciBNZXJn ZSBub2Rlcywgd2hpY2ggY2FuIG9jY3VyIGF0IGFueSBwb2ludCBpbiB0aGUKKwkgKiBqb2luIHRy ZWUgd2hlcmUgdGhlIHBsYW5uZXIgZGVjaWRlZCB0byBpbml0aWF0ZSBwYXJhbGxlbGlzbSwKKwkg KgorCSAqICgzKSBTb3J0IGFuZCBJbmNyZW1lbnRhbFNvcnQgbm9kZXMsIHdoaWNoIGNhbiBvY2N1 ciBiZW5lYXRoIE1lcmdlSm9pbgorCSAqIG9yIEdhdGhlck1lcmdlLAorCSAqCisJICogKDQpIEFn ZyBhbmQgVW5pcXVlIG5vZGVzLCB3aGljaCBjYW4gb2NjdXIgd2hlbiB3ZSBkZWNpZGUgdG8gbWFr ZSB0aGUKKwkgKiBudWxsYWJsZSBzaWRlIG9mIGEgc2VtaWpvaW4gdW5pcXVlIGFuZCB0aGVuIGpv aW4gdGhlIHJlc3VsdCwgYW5kCisJICoKKwkgKiAoNSkgUmVzdWx0IG5vZGVzIHdpdGggY2hpbGRy ZW4sIHdoaWNoIGNhbiBiZSBhZGRlZCBlaXRoZXIgdG8gcHJvamVjdCB0bworCSAqIGVuZm9yY2Ug YSBvbmUtdGltZSBmaWx0ZXIgKGJ1dCBSZXN1bHQgbm9kZXMgd2l0aG91dCBjaGlsZHJlbiBhcmUK KwkgKiBkZWdlbmVyYXRlIHNjYW5zIG9yIGpvaW5zKS4KKwkgKi8KKwlpZiAoSXNBKHBsYW4sIE1h dGVyaWFsKSB8fCBJc0EocGxhbiwgTWVtb2l6ZSkgfHwgSXNBKHBsYW4sIEhhc2gpCisJCXx8IElz QShwbGFuLCBHYXRoZXIpIHx8IElzQShwbGFuLCBHYXRoZXJNZXJnZSkKKwkJfHwgaXNfc29ydGlu Z19wbGFuKHBsYW4pIHx8IElzQShwbGFuLCBBZ2cpIHx8IElzQShwbGFuLCBVbmlxdWUpCisJCXx8 IGlzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQocGxhbikpCisJeworCQkqb3V0ZXJfam9pbl91bnJv bGxlciA9IGpvaW5fdW5yb2xsZXI7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHdl J3ZlIGFscmVhZHkgaGFuZGxlZCBub2RlcyB0aGF0IHJlcXVpcmUgcGFzcy10aHJvdWdoIHRyZWF0 bWVudCwKKwkgKiB0aGlzIHNob3VsZCBiZSBhbiB1bnJvbGxhYmxlIGpvaW4uCisJICovCisJc3Ry YXRlZ3kgPSBwZ3BhX2RlY29tcG9zZV9qb2luKHdhbGtlciwgcGxhbiwKKwkJCQkJCQkJICAgJnJl YWxvdXRlciwgJnJlYWxpbm5lciwKKwkJCQkJCQkJICAgJmVsaWRlZG91dGVyLCAmZWxpZGVkaW5u ZXIsCisJCQkJCQkJCSAgICZmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyLAorCQkJCQkJCQkgICAmZm91 bmRfYW55X2lubmVyX2dhdGhlcik7CisKKwkvKiBJZiBvdXIgd29ya3NwYWNlIGlzIGZ1bGwsIGV4 cGFuZCBpdC4gKi8KKwlpZiAoam9pbl91bnJvbGxlci0+bnVzZWQgPj0gam9pbl91bnJvbGxlci0+ bmFsbG9jYXRlZCkKKwl7CisJCWpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQgKj0gMjsKKwkJam9p bl91bnJvbGxlci0+c3RyYXRlZ3kgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+ c3RyYXRlZ3ksCisJCQkJCQkgICBwZ3BhX2pvaW5fc3RyYXRlZ3ksCisJCQkJCQkgICBqb2luX3Vu cm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnMgPQor CQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnMsCisJCQkJCQkg ICBQbGFuICosCisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9pbl91 bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVzID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5y b2xsZXItPmlubmVyX2VsaWRlZF9ub2RlcywKKwkJCQkJCSAgIEVsaWRlZE5vZGUgKiwKKwkJCQkJ CSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl9i ZW5lYXRoX2FueV9nYXRoZXIgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5u ZXJfYmVuZWF0aF9hbnlfZ2F0aGVyLAorCQkJCQkJICAgYm9vbCwKKwkJCQkJCSAgIGpvaW5fdW5y b2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnMgPQor CQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzLAorCQkJCQkJ ICAgcGdwYV9qb2luX3Vucm9sbGVyICosCisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5uYWxsb2Nh dGVkKTsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHdlJ3JlIGZsYXR0ZW5pbmcgb3V0ZXItZGVlcCBq b2luIHRyZWVzLCBpdCBmb2xsb3dzIHRoYXQgaWYgdGhlCisJICogb3V0ZXIgc2lkZSBpcyBzdGls bCBhbiB1bnJvbGxhYmxlIGpvaW4sIGl0IHNob3VsZCBiZSB1bnJvbGxlZCBpbnRvIHRoaXMKKwkg KiBzYW1lIG9iamVjdC4gT3RoZXJ3aXNlLCB3ZSd2ZSByZWFjaGVkIHRoZSBsaW1pdCBvZiB3aGF0 IHdlIGNhbiB1bnJvbGwKKwkgKiBpbnRvIHRoaXMgb2JqZWN0IGFuZCBtdXN0IHJlbWVtYmVyIHRo ZSBvdXRlciBzaWRlIGFzIHRoZSBmaW5hbCBvdXRlcgorCSAqIHN1YnBsYW4uCisJICovCisJaWYg KGVsaWRlZG91dGVyID09IE5VTEwgJiYgcGdwYV9pc19qb2luKHJlYWxvdXRlcikpCisJCSpvdXRl cl9qb2luX3Vucm9sbGVyID0gam9pbl91bnJvbGxlcjsKKwllbHNlCisJeworCQlqb2luX3Vucm9s bGVyLT5vdXRlcl9zdWJwbGFuID0gcmVhbG91dGVyOworCQlqb2luX3Vucm9sbGVyLT5vdXRlcl9l bGlkZWRfbm9kZSA9IGVsaWRlZG91dGVyOworCQlqb2luX3Vucm9sbGVyLT5vdXRlcl9iZW5lYXRo X2FueV9nYXRoZXIgPQorCQkJYmVuZWF0aF9hbnlfZ2F0aGVyIHx8IGZvdW5kX2FueV9vdXRlcl9n YXRoZXI7CisJfQorCisJLyoKKwkgKiBTdG9yZSB0aGUgaW5uZXIgc3VicGxhbi4gSWYgaXQncyBh biB1bnJvbGxhYmxlIGpvaW4sIGl0IG5lZWRzIHRvIGJlCisJICogZmxhdHRlbmVkIGluIHR1cm4s IGJ1dCBpbnRvIGEgbmV3IHVucm9sbGVyIG9iamVjdCwgbm90IHRoaXMgb25lLgorCSAqLworCW4g PSBqb2luX3Vucm9sbGVyLT5udXNlZCsrOworCWpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5W25dID0g c3RyYXRlZ3k7CisJam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnNbbl0gPSByZWFsaW5uZXI7 CisJam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVzW25dID0gZWxpZGVkaW5uZXI7CisJ am9pbl91bnJvbGxlci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyW25dID0KKwkJYmVuZWF0aF9h bnlfZ2F0aGVyIHx8IGZvdW5kX2FueV9pbm5lcl9nYXRoZXI7CisJaWYgKGVsaWRlZGlubmVyID09 IE5VTEwgJiYgcGdwYV9pc19qb2luKHJlYWxpbm5lcikpCisJCSppbm5lcl9qb2luX3Vucm9sbGVy ID0gcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcigpOworCWVsc2UKKwkJKmlubmVyX2pvaW5fdW5y b2xsZXIgPSBOVUxMOworCWpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVyc1tuXSA9ICppbm5l cl9qb2luX3Vucm9sbGVyOworfQorCisvKgorICogVXNlIHRoZSBkYXRhIHdlJ3ZlIGFjY3VtdWxh dGVkIGluIGEgcGdwYV9qb2luX3Vucm9sbGVyIG9iamVjdCB0byBjb25zdHJ1Y3QKKyAqIGEgcGdw YV91bnJvbGxlZF9qb2luLgorICovCitwZ3BhX3Vucm9sbGVkX2pvaW4gKgorcGdwYV9idWlsZF91 bnJvbGxlZF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJIHBn cGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcikKK3sKKwlwZ3BhX3Vucm9sbGVkX2pvaW4g KnVqb2luOworCWludAkJCWk7CisKKwkvKgorCSAqIFdlIHNob3VsZG4ndCBoYXZlIGdvbmUgZXZl biBzbyBmYXIgYXMgdG8gY3JlYXRlIGEgam9pbiB1bnJvbGxlciB1bmxlc3MKKwkgKiB3ZSBmb3Vu ZCBhdCBsZWFzdCBvbmUgdW5yb2xsYWJsZSBqb2luLgorCSAqLworCUFzc2VydChqb2luX3Vucm9s bGVyLT5udXNlZCA+IDApOworCisJLyogQWxsb2NhdGUgcmVzdWx0IHN0cnVjdHVyZXMuICovCisJ dWpvaW4gPSBwYWxsb2MwX29iamVjdChwZ3BhX3Vucm9sbGVkX2pvaW4pOworCXVqb2luLT5uaW5u ZXIgPSBqb2luX3Vucm9sbGVyLT5udXNlZDsKKwl1am9pbi0+c3RyYXRlZ3kgPSBwYWxsb2MwX2Fy cmF5KHBncGFfam9pbl9zdHJhdGVneSwgam9pbl91bnJvbGxlci0+bnVzZWQpOworCXVqb2luLT5p bm5lciA9IHBhbGxvYzBfYXJyYXkocGdwYV9qb2luX21lbWJlciwgam9pbl91bnJvbGxlci0+bnVz ZWQpOworCisJLyogSGFuZGxlIHRoZSBvdXRlcm1vc3Qgam9pbi4gKi8KKwl1am9pbi0+b3V0ZXIu cGxhbiA9IGpvaW5fdW5yb2xsZXItPm91dGVyX3N1YnBsYW47CisJdWpvaW4tPm91dGVyLmVsaWRl ZF9ub2RlID0gam9pbl91bnJvbGxlci0+b3V0ZXJfZWxpZGVkX25vZGU7CisJdWpvaW4tPm91dGVy LnNjYW4gPQorCQlwZ3BhX2J1aWxkX3NjYW4od2Fsa2VyLCB1am9pbi0+b3V0ZXIucGxhbiwKKwkJ CQkJCXVqb2luLT5vdXRlci5lbGlkZWRfbm9kZSwKKwkJCQkJCWpvaW5fdW5yb2xsZXItPm91dGVy X2JlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCXRydWUpOworCisJLyoKKwkgKiBXZSB3YW50IHRo ZSBqb2lucyBmcm9tIHRoZSBkZWVwZXN0IHBhcnQgb2YgdGhlIHBsYW4gdHJlZSB0byBhcHBlYXIK KwkgKiBmaXJzdCBpbiB0aGUgcmVzdWx0IG9iamVjdCwgYnV0IHRoZSBqb2luIHVucm9sbGVyIGFk ZHMgdGhlbSBpbiBleGFjdGx5CisJICogdGhlIHJldmVyc2Ugb2YgdGhhdCBvcmRlciwgc28gd2Ug bmVlZCB0byBmbGlwIHRoZSBvcmRlciBvZiB0aGUgYXJyYXlzCisJICogd2hlbiBjb25zdHJ1Y3Rp bmcgdGhlIGZpbmFsIHJlc3VsdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgam9pbl91bnJvbGxl ci0+bnVzZWQ7ICsraSkKKwl7CisJCWludAkJCWsgPSBqb2luX3Vucm9sbGVyLT5udXNlZCAtIGkg LSAxOworCisJCS8qIENvcHkgc3RyYXRlZ3ksIFBsYW4sIGFuZCBFbGlkZWROb2RlLiAqLworCQl1 am9pbi0+c3RyYXRlZ3lbaV0gPSBqb2luX3Vucm9sbGVyLT5zdHJhdGVneVtrXTsKKwkJdWpvaW4t PmlubmVyW2ldLnBsYW4gPSBqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFuc1trXTsKKwkJdWpv aW4tPmlubmVyW2ldLmVsaWRlZF9ub2RlID0gam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25v ZGVzW2tdOworCisJCS8qCisJCSAqIEZpbGwgaW4gcmVtYWluaW5nIGRldGFpbHMsIHVzaW5nIGVp dGhlciB0aGUgbmVzdGVkIGpvaW4gdW5yb2xsZXIsCisJCSAqIG9yIGJ5IGRlcml2aW5nIHRoZW0g ZnJvbSB0aGUgcGxhbiBhbmQgZWxpZGVkIG5vZGVzLgorCQkgKi8KKwkJaWYgKGpvaW5fdW5yb2xs ZXItPmlubmVyX3Vucm9sbGVyc1trXSAhPSBOVUxMKQorCQkJdWpvaW4tPmlubmVyW2ldLnVucm9s bGVkX2pvaW4gPQorCQkJCXBncGFfYnVpbGRfdW5yb2xsZWRfam9pbih3YWxrZXIsCisJCQkJCQkJ CQkJIGpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVyc1trXSk7CisJCWVsc2UKKwkJCXVqb2lu LT5pbm5lcltpXS5zY2FuID0KKwkJCQlwZ3BhX2J1aWxkX3NjYW4od2Fsa2VyLCB1am9pbi0+aW5u ZXJbaV0ucGxhbiwKKwkJCQkJCQkJdWpvaW4tPmlubmVyW2ldLmVsaWRlZF9ub2RlLAorCQkJCQkJ CQlqb2luX3Vucm9sbGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRoZXJbaV0sCisJCQkJCQkJCXRy dWUpOworCX0KKworCXJldHVybiB1am9pbjsKK30KKworLyoKKyAqIEZyZWUgbWVtb3J5IGFsbG9j YXRlZCBmb3IgcGdwYV9qb2luX3Vucm9sbGVyLgorICovCit2b2lkCitwZ3BhX2Rlc3Ryb3lfam9p bl91bnJvbGxlcihwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIpCit7CisJcGZyZWUo am9pbl91bnJvbGxlci0+c3RyYXRlZ3kpOworCXBmcmVlKGpvaW5fdW5yb2xsZXItPmlubmVyX3N1 YnBsYW5zKTsKKwlwZnJlZShqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMpOworCXBm cmVlKGpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVycyk7CisJcGZyZWUoam9pbl91bnJvbGxl cik7Cit9CisKKy8qCisgKiBJZGVudGlmeSB0aGUgam9pbiBzdHJhdGVneSB1c2VkIGJ5IGEgam9p biBhbmQgdGhlICJyZWFsIiBpbm5lciBhbmQgb3V0ZXIKKyAqIHBsYW5zLgorICoKKyAqIEZvciBl eGFtcGxlLCBhIEhhc2ggSm9pbiBhbHdheXMgaGFzIGEgSGFzaCBub2RlIG9uIHRoZSBpbm5lciBz aWRlLCBidXQKKyAqIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMgdGhlIHJlYWwgaW5uZXIg aW5wdXQgaXMgdGhlIEhhc2ggbm9kZSdzIGNoaWxkLAorICogbm90IHRoZSBIYXNoIG5vZGUgaXRz ZWxmLgorICoKKyAqIExpa2V3aXNlLCBhIE1lcmdlIEpvaW4gbWF5IGhhdmUgU29ydCBub3RlIG9u IHRoZSBpbm5lciBvciBvdXRlciBzaWRlOyBpZgorICogaXQgZG9lcywgdGhlIHJlYWwgaW5wdXQg dG8gdGhlIGpvaW4gaXMgdGhlIFNvcnQgbm9kZSdzIGNoaWxkLCBub3QgdGhlCisgKiBTb3J0IG5v ZGUgaXRzZWxmLgorICoKKyAqIEluIGFkZGl0aW9uLCB3aXRoIGEgTWVyZ2UgSm9pbiBvciBhIE5l c3RlZCBMb29wLCB0aGUgam9pbiBwbGFubmluZyBjb2RlCisgKiBtYXkgYWRkIGFkZGl0aW9uYWwg bm9kZXMgc3VjaCBhcyBNYXRlcmlhbGl6ZSBvciBNZW1vaXplLiBXZSByZWdhcmQgdGhlc2UKKyAq IGFzIGFuIGFzcGVjdCBvZiB0aGUgam9pbiBzdHJhdGVneS4gQXMgaW4gdGhlIHByZXZpb3VzIGNh c2VzLCB0aGUgdHJ1ZSBpbnB1dAorICogdG8gdGhlIGpvaW4gaXMgdGhlIHVuZGVybHlpbmcgbm9k ZS4KKyAqCisgKiBIb3dldmVyLCBpZiBhbnkgaW52b2x2ZWQgY2hpbGQgbm9kZSBwcmV2aW91c2x5 IGhhZCBhIG5vdy1lbGlkZWQgbm9kZSBzdGFja2VkCisgKiBvbiB0b3AsIHRoZW4gd2UgY2FuJ3Qg Imxvb2sgdGhyb3VnaCIgdGhhdCBub2RlIC0tIGluZGVlZCwgd2hhdCdzIGdvaW5nIHRvIGJlCisg KiByZWxldmFudCBmb3Igb3VyIHB1cnBvc2VzIGlzIHRoZSBFbGlkZWROb2RlIG9uIHRvcCBvZiB0 aGF0IHBsYW4gbm9kZSwgcmF0aGVyCisgKiB0aGFuIHRoZSBwbGFuIG5vZGUgaXRzZWxmLgorICoK KyAqIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbGlkZWQgbm9kZXMsIHdlIHdhbnQgdGhhdCBvbmUg dGhhdCB3b3VsZCBoYXZlIGJlZW4KKyAqIHVwcGVybW9zdCBpbiB0aGUgcGxhbiB0cmVlIHByaW9y IHRvIHNldHJlZnMgcHJvY2Vzc2luZzsgd2UgZXhwZWN0IHRvIGZpbmQKKyAqIHRoYXQgb25lIGxh c3QgaW4gdGhlIGxpc3Qgb2YgZWxpZGVkIG5vZGVzLgorICoKKyAqIE9uIHJldHVybiAqcmVhbG91 dGVyIGFuZCAqcmVhbGlubmVyIHdpbGwgaGF2ZSBiZWVuIHNldCB0byB0aGUgcmVhbCBpbm5lcgor ICogYW5kIHJlYWwgb3V0ZXIgcGxhbnMgdGhhdCB3ZSBpZGVudGlmaWVkLCBhbmQgKmVsaWRlZHJl YWxvdXRlciBhbmQKKyAqICplbGlkZWRyZWFsaW5uZXIgdG8gdGhlIGxhc3Qgb2YgYW55IGNvcnJl c3BvZGluZyBlbGlkZWQgbm9kZXMuCisgKiBBZGRpdGlvbmFsbHksICpmb3VuZF9hbnlfb3V0ZXJf Z2F0aGVyIGFuZCAqZm91bmRfYW55X2lubmVyX2dhdGhlciB3aWxsCisgKiBiZSBzZXQgdG8gdHJ1 ZSBpZiB3ZSBsb29rZWQgdGhyb3VnaCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSBvbgor ICogdGhhdCBzaWRlIG9mIHRoZSBqb2luLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0 aWMgcGdwYV9qb2luX3N0cmF0ZWd5CitwZ3BhX2RlY29tcG9zZV9qb2luKHBncGFfcGxhbl93YWxr ZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQlQbGFuICoqcmVhbG91dGVyLCBQ bGFuICoqcmVhbGlubmVyLAorCQkJCQlFbGlkZWROb2RlICoqZWxpZGVkcmVhbG91dGVyLCBFbGlk ZWROb2RlICoqZWxpZGVkcmVhbGlubmVyLAorCQkJCQlib29sICpmb3VuZF9hbnlfb3V0ZXJfZ2F0 aGVyLCBib29sICpmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyKQoreworCVBsYW5uZWRTdG10ICpwc3Rt dCA9IHdhbGtlci0+cHN0bXQ7CisJSm9pblR5cGUJam9pbnR5cGUgPSAoKEpvaW4gKikgcGxhbikt PmpvaW50eXBlOworCVBsYW4JICAgKm91dGVycGxhbiA9IHBsYW4tPmxlZnR0cmVlOworCVBsYW4J ICAgKmlubmVycGxhbiA9IHBsYW4tPnJpZ2h0dHJlZTsKKwlFbGlkZWROb2RlICplbGlkZWRvdXRl cjsKKwlFbGlkZWROb2RlICplbGlkZWRpbm5lcjsKKwlwZ3BhX2pvaW5fc3RyYXRlZ3kgc3RyYXRl Z3k7CisJYm9vbAkJdW5pcXVlb3V0ZXI7CisJYm9vbAkJdW5pcXVlaW5uZXI7CisKKwllbGlkZWRv dXRlciA9IHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgb3V0ZXJwbGFuKTsKKwllbGlkZWRp bm5lciA9IHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgaW5uZXJwbGFuKTsKKwkqZm91bmRf YW55X291dGVyX2dhdGhlciA9IGZhbHNlOworCSpmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyID0gZmFs c2U7CisKKwlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCisJeworCQljYXNlIFRfTWVyZ2VKb2luOgor CisJCQkvKgorCQkJICogVGhlIHBsYW5uZXIgbWF5IGhhdmUgY2hvc2VuIHRvIHBsYWNlIGEgTWF0 ZXJpYWwgbm9kZSBvbiB0aGUKKwkJCSAqIGlubmVyIHNpZGUgb2YgdGhlIE1lcmdlSm9pbjsgaWYg dGhpcyBpcyBwcmVzZW50LCB3ZSByZWNvcmQgaXQKKwkJCSAqIGFzIHBhcnQgb2YgdGhlIGpvaW4g c3RyYXRlZ3kuCisJCQkgKi8KKwkJCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIElzQShpbm5l cnBsYW4sIE1hdGVyaWFsKSkKKwkJCXsKKwkJCQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2VuZF9u b2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCQlzdHJhdGVneSA9IEpTVFJBVF9NRVJHRV9KT0lO X01BVEVSSUFMSVpFOworCQkJfQorCQkJZWxzZQorCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX01FUkdF X0pPSU5fUExBSU47CisKKwkJCS8qCisJCQkgKiBGb3IgYSBNZXJnZUpvaW4sIGVpdGhlciB0aGUg b3V0ZXIgb3IgdGhlIGlubmVyIHN1YnBsYW4sIG9yCisJCQkgKiBib3RoLCBtYXkgaGF2ZSBuZWVk ZWQgdG8gYmUgc29ydGVkOyB3ZSBtdXN0IGRpc3JlZ2FyZCBhbnkgU29ydAorCQkJICogb3IgSW5j cmVtZW50YWxTb3J0IG5vZGUgdG8gZmluZCB0aGUgcmVhbCBpbm5lciBvciBvdXRlcgorCQkJICog c3VicGxhbi4KKwkJCSAqLworCQkJaWYgKGVsaWRlZG91dGVyID09IE5VTEwgJiYgaXNfc29ydGlu Z19wbGFuKG91dGVycGxhbikpCisJCQkJZWxpZGVkb3V0ZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShw c3RtdCwgJm91dGVycGxhbik7CisJCQlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBpc19zb3J0 aW5nX3BsYW4oaW5uZXJwbGFuKSkKKwkJCQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2VuZF9ub2Rl KHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9OZXN0TG9vcDoKKwor CQkJLyoKKwkJCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGNob3NlbiB0byBwbGFjZSBhIE1hdGVy aWFsIG9yIE1lbW9pemUgbm9kZQorCQkJICogb24gdGhlIGlubmVyIHNpZGUgb2YgdGhlIE5lc3RM b29wOyBpZiB0aGlzIGlzIHByZXNlbnQsIHdlCisJCQkgKiByZWNvcmQgaXQgYXMgcGFydCBvZiB0 aGUgam9pbiBzdHJhdGVneS4KKwkJCSAqLworCQkJaWYgKGVsaWRlZGlubmVyID09IE5VTEwgJiYg SXNBKGlubmVycGxhbiwgTWF0ZXJpYWwpKQorCQkJeworCQkJCWVsaWRlZGlubmVyID0gcGdwYV9k ZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX05F U1RFRF9MT09QX01BVEVSSUFMSVpFOworCQkJfQorCQkJZWxzZSBpZiAoZWxpZGVkaW5uZXIgPT0g TlVMTCAmJiBJc0EoaW5uZXJwbGFuLCBNZW1vaXplKSkKKwkJCXsKKwkJCQllbGlkZWRpbm5lciA9 IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCQlzdHJhdGVneSA9IEpT VFJBVF9ORVNURURfTE9PUF9NRU1PSVpFOworCQkJfQorCQkJZWxzZQorCQkJCXN0cmF0ZWd5ID0g SlNUUkFUX05FU1RFRF9MT09QX1BMQUlOOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0hhc2hKb2lu OgorCisJCQkvKgorCQkJICogVGhlIGlubmVyIHN1YnBsYW4gb2YgYSBIYXNoSm9pbiBpcyBhbHdh eXMgYSBIYXNoIG5vZGU7IHRoZSByZWFsCisJCQkgKiBpbm5lciBzdWJwbGFuIGlzIHRoZSBIYXNo IG5vZGUncyBjaGlsZC4KKwkJCSAqLworCQkJQXNzZXJ0KElzQShpbm5lcnBsYW4sIEhhc2gpKTsK KwkJCUFzc2VydChlbGlkZWRpbm5lciA9PSBOVUxMKTsKKwkJCWVsaWRlZGlubmVyID0gcGdwYV9k ZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJc3RyYXRlZ3kgPSBKU1RSQVRfSEFT SF9KT0lOOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnJlY29n bml6ZWQgbm9kZSB0eXBlOiAlZCIsIChpbnQpIG5vZGVUYWcocGxhbikpOworCX0KKworCS8qCisJ ICogVGhlIHBsYW5uZXIgbWF5IGhhdmUgZGVjaWRlZCB0byBpbXBsZW1lbnQgYSBzZW1pam9pbiBi eSBmaXJzdCBtYWtpbmcKKwkgKiB0aGUgbnVsbGFibGUgc2lkZSBvZiB0aGUgcGxhbiB1bmlxdWUs IGFuZCB0aGVuIHBlcmZvcm1pbmcgYSBub3JtYWwgam9pbgorCSAqIGFnYWluc3QgdGhlIHJlc3Vs dC4gVGhlcmVmb3JlLCB3ZSBtaWdodCBuZWVkIHRvIGRlc2NlbmQgdGhyb3VnaCBhCisJICogdW5p cXVlIG5vZGUgb24gZWl0aGVyIHNpZGUgb2YgdGhlIHBsYW4uCisJICovCisJdW5pcXVlb3V0ZXIg PSBwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShwc3RtdCwgJm91dGVycGxhbiwgJmVsaWRlZG91dGVy KTsKKwl1bmlxdWVpbm5lciA9IHBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10LCAmaW5uZXJw bGFuLCAmZWxpZGVkaW5uZXIpOworCisJLyoKKwkgKiBUaGUgcGxhbm5lciBtYXkgaGF2ZSBkZWNp ZGVkIHRvIHBhcmFsbGVsaXplIHBhcnQgb2YgdGhlIGpvaW4gdHJlZSwgc28KKwkgKiB3ZSBjb3Vs ZCBmaW5kIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlIGhlcmUuIE5vdGUgdGhhdCwgaWYK KwkgKiBwcmVzZW50LCB0aGlzIHdpbGwgYXBwZWFyIGJlbG93IG5vZGVzIHdlIGNvbnNpZGVyZWQg YXMgcGFydCBvZiB0aGUgam9pbgorCSAqIHN0cmF0ZWd5LCBidXQgd2UgY291bGQgZmluZCBhbm90 aGVyIHVuaXF1ZW5lc3MtZW5mb3JjaW5nIG5vZGUgYmVsb3cgdGhlCisJICogR2F0aGVyIG9yIEdh dGhlciBNZXJnZSwgaWYgcHJlc2VudC4KKwkgKi8KKwlpZiAoZWxpZGVkb3V0ZXIgPT0gTlVMTCkK Kwl7CisJCWVsaWRlZG91dGVyID0gcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIocHN0bXQsICZvdXRl cnBsYW4sCisJCQkJCQkJCQkJCSAgZm91bmRfYW55X291dGVyX2dhdGhlcik7CisJCWlmIChmb3Vu ZF9hbnlfb3V0ZXJfZ2F0aGVyICYmCisJCQlwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShwc3RtdCwg Jm91dGVycGxhbiwgJmVsaWRlZG91dGVyKSkKKwkJCXVuaXF1ZW91dGVyID0gdHJ1ZTsKKwl9CisJ aWYgKGVsaWRlZGlubmVyID09IE5VTEwpCisJeworCQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2Vu ZF9hbnlfZ2F0aGVyKHBzdG10LCAmaW5uZXJwbGFuLAorCQkJCQkJCQkJCQkgIGZvdW5kX2FueV9p bm5lcl9nYXRoZXIpOworCQlpZiAoZm91bmRfYW55X2lubmVyX2dhdGhlciAmJgorCQkJcGdwYV9k ZXNjZW5kX2FueV91bmlxdWUocHN0bXQsICZpbm5lcnBsYW4sICZlbGlkZWRpbm5lcikpCisJCQl1 bmlxdWVpbm5lciA9IHRydWU7CisJfQorCisJLyoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgUmVz dWx0IG5vZGUgaGFzIGJlZW4gaW5zZXJ0ZWQgZWl0aGVyIHRvIHByb2plY3QgYQorCSAqIHRhcmdl dCBsaXN0IG9yIHRvIGltcGxlbWVudCBhIG9uZS10aW1lIGZpbHRlci4gSWYgc28sIHdlIGNhbiBk ZXNjZW5kCisJICogdGhyb3VnaHQgaXQuIE5vdGUgdGhhdCBhIHJlc3VsdCBub2RlIHdpdGhvdXQg YSBjaGlsZCB3b3VsZCBiZSBhCisJICogZGVnZW5lcmF0ZSBzY2FuIG9yIGpvaW4sIGFuZCBub3Qg c29tZXRoaW5nIHdlIGNvdWxkIGRlc2NlbmQgdGhyb3VnaC4KKwkgKgorCSAqIFhYWC4gSSBzdXNw ZWN0IGl0J3MgcG9zc2libGUgZm9yIHRoaXMgdG8gaGFwcGVuIGFib3ZlIHRoZSBHYXRoZXIgb3IK KwkgKiBHYXRoZXIgTWVyZ2Ugbm9kZSwgdG9vLCBidXQgYXBwYXJlbnRseSB3ZSBoYXZlIG5vIHRl c3QgY2FzZSBmb3IgdGhhdAorCSAqIHNjZW5hcmlvLgorCSAqLworCWlmIChlbGlkZWRvdXRlciA9 PSBOVUxMICYmIGlzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQob3V0ZXJwbGFuKSkKKwkJZWxpZGVk b3V0ZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJm91dGVycGxhbik7CisJaWYgKGVsaWRl ZGlubmVyID09IE5VTEwgJiYgaXNfcmVzdWx0X25vZGVfd2l0aF9jaGlsZChpbm5lcnBsYW4pKQor CQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwor CS8qCisJICogSWYgdGhpcyBpcyBhIHNlbWlqb2luIHRoYXQgd2FzIGNvbnZlcnRlZCB0byBhbiBp bm5lciBqb2luIGJ5IG1ha2luZyBvbmUKKwkgKiBzaWRlIG9yIHRoZSBvdGhlciB1bmlxdWUsIG1h a2UgYSBub3RlIHRoYXQgdGhlIGlubmVyIG9yIG91dGVyIHN1YnBsYW4sCisJICogYXMgYXBwcm9w cmlhdGUsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgcXVlcnkgcGxhbiBmZWF0dXJlIHdoZW4gdGhl IG1haW4KKwkgKiB0cmVlIHRyYXZlcnNhbCByZWFjaGVzIGl0LgorCSAqCisJICogQ29udmVyc2Vs eSwgaWYgdGhlIHBsYW5uZXIgY291bGQgaGF2ZSBtYWRlIG9uZSBzaWRlIG9mIHRoZSBqb2luIHVu aXF1ZQorCSAqIGFuZCB0aGVyZWJ5IGNvbnZlcnRlZCBpdCB0byBhbiBpbm5lciBqb2luLCBhbmQg Y2hvc2Ugbm90IHRvIGRvIHNvLCB0aGF0CisJICogaXMgYWxzbyB3b3J0aCBub3RpbmcuCisJICoK KwkgKiBYWFg6IFdlIGFkbWl0IHRvbyBtdWNoIG5vbi11bmlxdWUgYWR2aWNlLCBhcyBpbiB0aGUg Zm9sbG93aW5nIGV4YW1wbGUKKwkgKiBmcm9tIHRoZSByZWdyZXNzaW9uIHRlc3RzOiBFWFBMQUlO IChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKSBERUxFVEUgRlJPTQorCSAqIHBydDFfbCBXSEVSRSBF WElTVFMgKFNFTEVDVCAxIEZST00gaW50NF90YmwsIExBVEVSQUwgKFNFTEVDVAorCSAqIGludDRf dGJsLmYxIEZST00gaW50OF90YmwgTElNSVQgMikgc3MgV0hFUkUgcHJ0MV9sLmMgSVMgTlVMTCku IFdlIGVtaXQKKwkgKiBTRU1JSk9JTl9OT05fVU5JUVVFKChpbnQ0X3RibCBzcykpIGJ1dCBjcmVh dGVfdW5pcXVlX3BhdGgoKSBmYWlscyBpbgorCSAqIHRoaXMgY2FzZSwgc28gdGhlcmUncyBubyBz ai11bmlxdWUgdmVyc2lvbiBwb3NzaWJsZS4KKwkgKgorCSAqIE5COiBUaGlzIGNvZGUgY291bGQg YXBwZWFyIHNsaWdodGx5IGhpZ2hlciB1cCBpbiBpbiB0aGlzIGZ1bmN0aW9uLCBidXQKKwkgKiBu b25lIG9mIHRoZSBub2RlcyB0aHJvdWdoIHdoaWNoIHdlIGp1c3QgZGVzY2VuZGVkIHNob3VsZCBi ZSBoYXZlCisJICogYXNzb2NpYXRlZCBSVElzLgorCSAqCisJICogTkI6IFRoaXMgc2VlbXMgbGlr ZSBhIHNvbWV3aGF0IGhhY2t5IHdheSBvZiBwYXNzaW5nIGluZm9ybWF0aW9uIHVwIHRvCisJICog dGhlIG1haW4gdHJlZSB3YWxrLCBidXQgSSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIGJldHRlciBp ZGVhLgorCSAqLworCWlmICh1bmlxdWVvdXRlcikKKwkJcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUo d2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFLCBvdXRlcnBsYW4pOworCWVsc2UgaWYgKGpv aW50eXBlID09IEpPSU5fUklHSFRfU0VNSSkKKwkJcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUod2Fs a2VyLCBQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwgb3V0ZXJwbGFuKTsKKwlpZiAodW5pcXVl aW5uZXIpCisJCXBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlKT0lO X1VOSVFVRSwgaW5uZXJwbGFuKTsKKwllbHNlIGlmIChqb2ludHlwZSA9PSBKT0lOX1NFTUkpCisJ CXBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlKT0lOX05PTl9VTklR VUUsIGlubmVycGxhbik7CisKKwkvKiBTZXQgb3V0cHV0IHBhcmFtZXRlcnMuICovCisJKnJlYWxv dXRlciA9IG91dGVycGxhbjsKKwkqcmVhbGlubmVyID0gaW5uZXJwbGFuOworCSplbGlkZWRyZWFs b3V0ZXIgPSBlbGlkZWRvdXRlcjsKKwkqZWxpZGVkcmVhbGlubmVyID0gZWxpZGVkaW5uZXI7CisJ cmV0dXJuIHN0cmF0ZWd5OworfQorCisvKgorICogRGVzY2VuZCB0aHJvdWdoIGEgUGxhbiBub2Rl IGluIGEgam9pbiB0cmVlIHRoYXQgdGhlIGNhbGxlciBoYXMgZGV0ZXJtaW5lZAorICogdG8gYmUg aXJyZWxldmFudC4KKyAqCisgKiBVcGRhdGVzICpwbGFuLCBhbmQgcmV0dXJucyB0aGUgbGFzdCBv ZiBhbnkgZWxpZGVkIG5vZGVzIHBlcnRhaW5pbmcgdG8gdGhlCisgKiBuZXcgcGxhbiBub2RlLgor ICovCitzdGF0aWMgRWxpZGVkTm9kZSAqCitwZ3BhX2Rlc2NlbmRfbm9kZShQbGFubmVkU3RtdCAq cHN0bXQsIFBsYW4gKipwbGFuKQoreworCSpwbGFuID0gKCpwbGFuKS0+bGVmdHRyZWU7CisJcmV0 dXJuIHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgKnBsYW4pOworfQorCisvKgorICogRGVz Y2VuZCB0aHJvdWdoIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLCBpZiBwcmVzZW50LCBh bmQgYW55IFNvcnQKKyAqIG9yIEluY3JlbWVudGFsU29ydCBub2RlIG9jY3VycmluZyB1bmRlciBh IEdhdGhlciBNZXJnZS4KKyAqCisgKiBDYWxsZXIgc2hvdWxkIGhhdmUgdmVyaWZpZWQgdGhhdCB0 aGVyZSBpcyBubyBFbGlkZWROb2RlIHBlcnRhaW5pbmcgdG8KKyAqIHRoZSBpbml0aWFsIHZhbHVl IG9mICpwbGFuLgorICoKKyAqIFVwZGF0ZXMgKnBsYW4sIGFuZCByZXR1cm5zIHRoZSBsYXN0IG9m IGFueSBlbGlkZWQgbm9kZXMgcGVydGFpbmluZyB0byB0aGUKKyAqIG5ldyBwbGFuIG5vZGUuIFNl dHMgKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlIGlmIGVpdGhlciBHYXRoZXIgb3IKKyAqIEdhdGhl ciBNZXJnZSB3YXMgZm91bmQsIGFuZCBvdGhlcndpc2UgbGVhdmVzIGl0IHVuY2hhbmdlZC4KKyAq Lworc3RhdGljIEVsaWRlZE5vZGUgKgorcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIoUGxhbm5lZFN0 bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCWJvb2wgKmZvdW5kX2FueV9nYXRoZXIpCit7 CisJaWYgKElzQSgqcGxhbiwgR2F0aGVyKSkKKwl7CisJCSpmb3VuZF9hbnlfZ2F0aGVyID0gdHJ1 ZTsKKwkJcmV0dXJuIHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKwl9CisKKwlpZiAo SXNBKCpwbGFuLCBHYXRoZXJNZXJnZSkpCisJeworCQlFbGlkZWROb2RlICplbGlkZWQgPSBwZ3Bh X2Rlc2NlbmRfbm9kZShwc3RtdCwgcGxhbik7CisKKwkJaWYgKGVsaWRlZCA9PSBOVUxMICYmIGlz X3NvcnRpbmdfcGxhbigqcGxhbikpCisJCQllbGlkZWQgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3Rt dCwgcGxhbik7CisKKwkJKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlOworCQlyZXR1cm4gZWxpZGVk OworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogSWYgKnBsYW4gaXMgYW4gQWdnIG9y IFVuaXF1ZSBub2RlLCB3ZSB3YW50IHRvIGRlc2NlbmQgdGhyb3VnaCBpdCwgdW5sZXNzCisgKiBp dCBoYXMgYSBjb3JyZXNwb25kaW5nIGVsaWRlZCBub2RlLiBJZiBpdHMgaW1tZWRpYXRlIGNoaWxk IGlzIGEgU29ydCBvcgorICogSW5jcmVtZW50YWxTb3J0LCB3ZSBhbHNvIHdhbnQgdG8gZGVzY2Vu ZCB0aHJvdWdoIHRoYXQsIHVubGVzcyBpdCBoYXMgYQorICogY29ycmVzcG9uZGluZyBlbGlkZWQg bm9kZS4KKyAqCisgKiBPbiBlbnRyeSwgKmVsaWRlZF9ub2RlIG11c3QgYmUgdGhlIGxhc3Qgb2Yg YW55IGVsaWRlZCBub2RlcyBjb3JyZXNwb25kaW5nCisgKiB0byAqcGxhbjsgb24gZXhpdCwgdGhp cyB3aWxsIHN0aWxsIGJlIHRydWUsIGJ1dCAqcGxhbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQuCisg KgorICogVGhlIHJlYXNvbiB3ZSBkb24ndCB3YW50IHRvIGRlc2NlbmQgdGhyb3VnaCBlbGlkZWQg bm9kZXMgaXMgdGhhdCBhIHNpbmdsZQorICogam9pbiB0cmVlIGNhbid0IGNyb3NzIHRocm91Z2gg YW55IHNvcnQgb2YgZWxpZGVkIG5vZGU6IHN1YnF1ZXJpZXMgYXJlCisgKiBwbGFubmVkIHNlcGFy YXRlbHksIGFuZCBwbGFubmluZyBpbnNpZGUgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIGlzCisg KiBzZXBhcmF0ZSBmcm9tIHBsYW5uaW5nIG91dHNpZGUgb2YgaXQuCisgKgorICogVGhlIHJldHVy biB2YWx1ZSBpcyB0cnVlIGlmIHdlIGRlc2NlbmQgdGhyb3VnaCBhdCBsZWFzdCBvbmUgbm9kZSwg YW5kCisgKiBvdGhlcndpc2UgZmFsc2UuCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX2Rlc2NlbmRf YW55X3VuaXF1ZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJCQkJRWxpZGVk Tm9kZSAqKmVsaWRlZF9ub2RlKQoreworCWlmICgqZWxpZGVkX25vZGUgIT0gTlVMTCkKKwkJcmV0 dXJuIGZhbHNlOworCisJaWYgKElzQSgqcGxhbiwgQWdnKSB8fCBJc0EoKnBsYW4sIFVuaXF1ZSkp CisJeworCQkqZWxpZGVkX25vZGUgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgcGxhbik7CisK KwkJaWYgKCplbGlkZWRfbm9kZSA9PSBOVUxMICYmIGlzX3NvcnRpbmdfcGxhbigqcGxhbikpCisJ CQkqZWxpZGVkX25vZGUgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgcGxhbik7CisKKwkJcmV0 dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogSXMgdGhpcyBhIFJl c3VsdCBub2RlIHRoYXQgaGFzIGEgY2hpbGQ/CisgKi8KK3N0YXRpYyBib29sCitpc19yZXN1bHRf bm9kZV93aXRoX2NoaWxkKFBsYW4gKnBsYW4pCit7CisJcmV0dXJuIElzQShwbGFuLCBSZXN1bHQp ICYmIHBsYW4tPmxlZnR0cmVlICE9IE5VTEw7Cit9CisKKy8qCisgKiBJcyB0aGlzIGEgUGxhbiBu b2RlIHdob3NlIHB1cnBvc2UgaXMgcHV0IHRoZSBkYXRhIGluIGEgY2VydGFpbiBvcmRlcj8KKyAq Lworc3RhdGljIGJvb2wKK2lzX3NvcnRpbmdfcGxhbihQbGFuICpwbGFuKQoreworCXJldHVybiBJ c0EocGxhbiwgU29ydCkgfHwgSXNBKHBsYW4sIEluY3JlbWVudGFsU29ydCk7Cit9CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5oIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX2pvaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uNGRjNzI5ODZhNzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfam9pbi5oCkBAIC0wLDAgKzEsMTA1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBwZ3BhX2pvaW4uaAorICoJICBhbmFseXNpcyBvZiBqb2lucyBpbiBQbGFuIHRyZWVzCisgKgor ICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5oCisgKgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9KT0lOX0gKKyNkZWZpbmUgUEdQ QV9KT0lOX0gKKworI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorCit0eXBlZGVmIHN0cnVj dCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0OwordHlw ZWRlZiBzdHJ1Y3QgcGdwYV9qb2luX3Vucm9sbGVyIHBncGFfam9pbl91bnJvbGxlcjsKK3R5cGVk ZWYgc3RydWN0IHBncGFfdW5yb2xsZWRfam9pbiBwZ3BhX3Vucm9sbGVkX2pvaW47CisKKy8qCisg KiBBbHRob3VnaCB0aGVyZSBhcmUgdGhyZWUgbWFpbiBqb2luIHN0cmF0ZWdpZXMsIHdlIHRyeSB0 byBjbGFzc2lmeSB0aGluZ3MKKyAqIG1vcmUgcHJlY2lzZWx5IGhlcmU6IG1lcmdlIGpvaW5zIGhh dmUgdGhlIG9wdGlvbiBvZiB1c2luZyBtYXRlcmlhbGl6YXRpb24KKyAqIG9uIHRoZSBpbm5lciBz aWRlLCBhbmQgbmVzdGVkIGxvb3BzIGNhbiB1c2UgZWl0aGVyIG1hdGVyaWFsaXphdGlvbiBvcgor ICogbWVtb2l6YXRpb24uCisgKi8KK3R5cGVkZWYgZW51bQoreworCUpTVFJBVF9NRVJHRV9KT0lO X1BMQUlOID0gMCwKKwlKU1RSQVRfTUVSR0VfSk9JTl9NQVRFUklBTElaRSwKKwlKU1RSQVRfTkVT VEVEX0xPT1BfUExBSU4sCisJSlNUUkFUX05FU1RFRF9MT09QX01BVEVSSUFMSVpFLAorCUpTVFJB VF9ORVNURURfTE9PUF9NRU1PSVpFLAorCUpTVFJBVF9IQVNIX0pPSU4KKwkvKiB1cGRhdGUgTlVN X1BHUEFfSk9JTl9TVFJBVEVHWSBpZiB5b3UgYWRkIGFueXRoaW5nIGhlcmUgKi8KK30gcGdwYV9q b2luX3N0cmF0ZWd5OworCisjZGVmaW5lIE5VTV9QR1BBX0pPSU5fU1RSQVRFR1kJCSgoaW50KSBK U1RSQVRfSEFTSF9KT0lOICsgMSkKKworLyoKKyAqIEluIGFuIG91dGVyLWRlZXAgam9pbiB0cmVl LCBldmVyeSBtZW1iZXIgb2YgYW4gdW5yb2xsZWQgam9pbiB3aWxsIGJlIGEgc2NhbiwKKyAqIGJ1 dCBqb2luIHRyZWVzIHdpdGggb3RoZXIgc2hhcGVzIGNhbiBjb250YWluIHVucm9sbGVkIGpvaW5z LgorICoKKyAqIFRoZSBwbGFuIG5vZGUgd2Ugc3RvcmUgaGVyZSB3aWxsIGJlIHRoZSBpbm5lciBv ciBvdXRlciBjaGlsZCBvZiB0aGUgam9pbgorICogbm9kZSwgYXMgYXBwcm9wcmlhdGUsIGV4Y2Vw dCB0aGF0IHdlIGxvb2sgdGhyb3VnaCBzdWJub2RlcyB0aGF0IHdlIHJlZ2FyZCBhcworICogcGFy dCBvZiB0aGUgam9pbiBtZXRob2QgaXRzZWxmLiBGb3IgaW5zdGFuY2UsIGZvciBhIE5lc3RlZCBM b29wIHRoYXQKKyAqIG1hdGVyaWFsaXplcyB0aGUgaW5uZXIgaW5wdXQsIHdlJ2xsIHN0b3JlIHRo ZSBjaGlsZCBvZiB0aGUgTWF0ZXJpYWxpemUgbm9kZSwKKyAqIG5vdCB0aGUgTWF0ZXJpYWxpemUg bm9kZSBpdHNlbGYuCisgKgorICogSWYgc2V0cmVmcyBwcm9jZXNzaW5nIGVsaWRlZCBvbmUgb3Ig bW9yZSBub2RlcyBmcm9tIHRoZSBwbGFuIHRyZWUsIHRoZW4KKyAqIHdlJ2xsIHN0b3JlIGRldGFp bHMgYWJvdXQgdGhlIHRvcG1vc3Qgb2YgdGhvc2UgaW4gZWxpZGVkX25vZGU7IG90aGVyd2lzZSwK KyAqIGl0IHdpbGwgYmUgTlVMTC4KKyAqCisgKiBFeGFjdGx5IG9uZSBvZiBzY2FuIGFuZCB1bnJv bGxlZF9qb2luIHdpbGwgYmUgbm9uLU5VTEwuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUGxh bgkgICAqcGxhbjsKKwlFbGlkZWROb2RlICplbGlkZWRfbm9kZTsKKwlzdHJ1Y3QgcGdwYV9zY2Fu ICpzY2FuOworCXBncGFfdW5yb2xsZWRfam9pbiAqdW5yb2xsZWRfam9pbjsKK30gcGdwYV9qb2lu X21lbWJlcjsKKworLyoKKyAqIFdlIGNvbnZlcnQgb3V0ZXItZGVlcCBqb2luIHRyZWVzIHRvIGEg ZmxhdCBzdHJ1Y3R1cmU7IHRoYXQgaXMsICgoQSBKT0lOIEIpCisgKiBKT0lOIEMpIEpPSU4gRCBn ZXRzIGNvbnZlcnRlZCB0byBvdXRlciA9IEEsIGlubmVyID0gPEIgQyBEPi4gIFdoZW4gam9pbnMK KyAqIGFyZW4ndCBvdXRlci1kZWVwLCBzdWJzdHJ1Y3R1cmUgaXMgcmVxdWlyZWQsIGUuZy4gKEEg Sk9JTiBCKSBKT0lOIChDIEpPSU4gRCkKKyAqIGlzIHJlcHJlc2VudGVkIGFzIG91dGVyID0gQSwg aW5uZXIgPSA8QiBYPiwgd2hlcmUgWCBpcyBhIHBncGFfdW5yb2xsZWRfam9pbgorICogY292ZXJp bmcgQy1ELgorICovCitzdHJ1Y3QgcGdwYV91bnJvbGxlZF9qb2luCit7CisJLyogT3V0ZXJtb3N0 IG1lbWJlcjsgbXVzdCBub3QgaXRzZWxmIGJlIGFuIHVucm9sbGVkIGpvaW4uICovCisJcGdwYV9q b2luX21lbWJlciBvdXRlcjsKKworCS8qIE51bWJlciBvZiBpbm5lciBtZW1iZXJzLiBMZW5ndGgg b2YgdGhlIHN0cmF0ZWd5IGFuZCBpbm5lciBhcnJheXMuICovCisJdW5zaWduZWQJbmlubmVyOwor CisJLyogQXJyYXkgb2Ygc3RyYXRlZ2llcywgb25lIHBlciBub24tb3V0ZXJtb3N0IG1lbWJlci4g Ki8KKwlwZ3BhX2pvaW5fc3RyYXRlZ3kgKnN0cmF0ZWd5OworCisJLyogQXJyYXkgb2YgbWVtYmVy cywgZXhjbHVkaW5nIHRoZSBvdXRlcm1vc3QuIERlZXBlc3QgZmlyc3QuICovCisJcGdwYV9qb2lu X21lbWJlciAqaW5uZXI7Cit9OworCisvKgorICogRG9lcyB0aGlzIHBsYW4gbm9kZSBpbmhlcml0 IGZyb20gSm9pbj8KKyAqLworc3RhdGljIGlubGluZSBib29sCitwZ3BhX2lzX2pvaW4oUGxhbiAq cGxhbikKK3sKKwlyZXR1cm4gSXNBKHBsYW4sIE5lc3RMb29wKSB8fCBJc0EocGxhbiwgTWVyZ2VK b2luKSB8fCBJc0EocGxhbiwgSGFzaEpvaW4pOworfQorCitleHRlcm4gcGdwYV9qb2luX3Vucm9s bGVyICpwZ3BhX2NyZWF0ZV9qb2luX3Vucm9sbGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgcGdwYV91 bnJvbGxfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkgUGxh biAqcGxhbiwgYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIsCisJCQkJCQkJIHBncGFfam9pbl91bnJv bGxlciAqam9pbl91bnJvbGxlciwKKwkJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICoqb3V0ZXJf am9pbl91bnJvbGxlciwKKwkJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICoqaW5uZXJfam9pbl91 bnJvbGxlcik7CitleHRlcm4gcGdwYV91bnJvbGxlZF9qb2luICpwZ3BhX2J1aWxkX3Vucm9sbGVk X2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJCQkJcGdw YV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyKTsKK2V4dGVybiB2b2lkIHBncGFfZGVzdHJv eV9qb2luX3Vucm9sbGVyKHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcik7CisKKyNl bmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi44OWE2NzVmZjkzZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYwpAQCAtMCwwICsxLDYyOCBAQAorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9vdXRwdXQuYworICoJICBwcm9kdWNlIHRleHR1YWwg b3V0cHV0IGZyb20gdGhlIHJlc3VsdHMgb2YgYSBwbGFuIHRyZWUgd2FsaworICoKKyAqIENvcHly aWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJw Z3BhX291dHB1dC5oIgorI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorCisjaW5jbHVkZSAibm9kZXMv cGFyc2Vub2Rlcy5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKyNpbmNsdWRlICJ1 dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorCisvKgorICog Q29udGV4dCBvYmplY3QgZm9yIHRleHR1YWwgYWR2aWNlIGdlbmVyYXRpb24uCisgKgorICogcnRf aWRlbnRpZmllcnMgaXMgdGhlIGNhbGxlci1wcm92aWRlZCBhcnJheSBvZiByYW5nZSB0YWJsZSBp ZGVudGlmaWVycy4KKyAqIFNlZSB0aGUgY29tbWVudHMgYXQgdGhlIHRvcCBvZiBwZ3BhX2lkZW50 aWZpZXIuYyBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGJ1ZiBpcyB0aGUgY2FsbGVyLXByb3Zp ZGVkIG91dHB1dCBidWZmZXIuCisgKgorICogd3JhcF9jb2x1bW4gaXMgdGhlIHdyYXAgY29sdW1u LCBzbyB0aGF0IHdlIGRvbid0IGNyZWF0ZSBvdXRwdXQgdGhhdCBpcworICogdG9vIHdpZGUuIFNl ZSBwZ3BhX21heWJlX2xpbmVicmVhaygpIGFuZCBjb21tZW50cyBpbiBwZ3BhX291dHB1dF9hZHZp Y2UuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfb3V0cHV0X2NvbnRleHQKK3sKKwljb25zdCBj aGFyICoqcmlkX3N0cmluZ3M7CisJU3RyaW5nSW5mbwlidWY7CisJaW50CQkJd3JhcF9jb2x1bW47 Cit9IHBncGFfb3V0cHV0X2NvbnRleHQ7CisKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3Vucm9s bGVkX2pvaW4ocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCSAgcGdwYV91 bnJvbGxlZF9qb2luICpqb2luKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X2pvaW5fbWVtYmVy KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQlwZ3BhX2pvaW5fbWVtYmVy ICptZW1iZXIpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfc2Nhbl9zdHJhdGVneShwZ3BhX291 dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJICBwZ3BhX3NjYW5fc3RyYXRlZ3kgc3Ry YXRlZ3ksCisJCQkJCQkJCQkgIExpc3QgKnNjYW5zKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0 X2JpdG1hcF9pbmRleF9kZXRhaWxzKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJ CQkJCQkJCSBQbGFuICpwbGFuKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3JlbGF0aW9uX25h bWUocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgT2lkIHJlbGlkKTsKK3N0YXRpYyB2b2lk IHBncGFfb3V0cHV0X3F1ZXJ5X2ZlYXR1cmUocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwK KwkJCQkJCQkJCSAgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJCQkgIExpc3QgKnF1ZXJ5X2Zl YXR1cmVzKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3NpbXBsZV9zdHJhdGVneShwZ3BhX291 dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJCWNoYXIgKnN0cmF0ZWd5LAorCQkJCQkJ CQkJCUxpc3QgKnJlbGlkX3NldHMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfbm9fZ2F0aGVy KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCSAgQml0bWFwc2V0ICpyZWxp ZHMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfcmVsYXRpb25zKHBncGFfb3V0cHV0X2NvbnRl eHQgKmNvbnRleHQsIFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRz KTsKKworc3RhdGljIGNoYXIgKnBncGFfY3N0cmluZ19qb2luX3N0cmF0ZWd5KHBncGFfam9pbl9z dHJhdGVneSBzdHJhdGVneSk7CitzdGF0aWMgY2hhciAqcGdwYV9jc3RyaW5nX3NjYW5fc3RyYXRl Z3kocGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5KTsKK3N0YXRpYyBjaGFyICpwZ3BhX2NzdHJp bmdfcXVlcnlfZmVhdHVyZV90eXBlKHBncGFfcWZfdHlwZSB0eXBlKTsKKworc3RhdGljIHZvaWQg cGdwYV9tYXliZV9saW5lYnJlYWsoU3RyaW5nSW5mbyBidWYsIGludCB3cmFwX2NvbHVtbik7CisK Ky8qCisgKiBBcHBlbmQgcXVlcnkgYWR2aWNlIHRvIHRoZSBwcm92aWRlZCBidWZmZXIuCisgKgor ICogQmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgJ3dhbGtlcicgbXVzdCBiZSB1c2VkIHRv IGl0ZXJhdGUgb3ZlciB0aGUKKyAqIG1haW4gcGxhbiB0cmVlIGFuZCBhbGwgc3VicGxhbnMgZnJv bSB0aGUgUGxhbm5lZFN0bXQuCisgKgorICogJ3J0X2lkZW50aWZpZXJzJyBpcyBhIHRhYmxlIG9m IHVuaXF1ZSBpZGVudGlmaWVycywgb25lIGZvciBlYWNoIFJUSS4KKyAqIFNlZSBwZ3BhX2NyZWF0 ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KCkuCisgKgorICogUmVzdWx0cyB3aWxsIGJl IGFwcGVuZGVkIHRvICdidWYnLgorICovCit2b2lkCitwZ3BhX291dHB1dF9hZHZpY2UoU3RyaW5n SW5mbyBidWYsIHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCSAgIHBncGFf aWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMpCit7CisJSW5kZXgJCXJ0YWJsZV9sZW5ndGggPSBs aXN0X2xlbmd0aCh3YWxrZXItPnBzdG10LT5ydGFibGUpOworCUxpc3RDZWxsICAgKmxjOworCXBn cGFfb3V0cHV0X2NvbnRleHQgY29udGV4dDsKKworCS8qIEJhc2ljIGluaXRpYWxpemF0aW9uLiAq LworCW1lbXNldCgmY29udGV4dCwgMCwgc2l6ZW9mKHBncGFfb3V0cHV0X2NvbnRleHQpKTsKKwlj b250ZXh0LmJ1ZiA9IGJ1ZjsKKworCS8qCisJICogQ29udmVydCBpZGVudGlmaWVycyB0byBzdHJp bmcgZm9ybS4gTm90ZSB0aGF0IHRoZSBsb29wIHZhcmlhYmxlIGhlcmUgaXMKKwkgKiBub3QgYW4g UlRJLCBiZWNhdXNlIFJUSXMgYXJlIDEtYmFzZWQuIFNvbWUgUlRJcyB3aWxsIGhhdmUgbm8KKwkg KiBpZGVudGlmaWVyLCBlaXRoZXIgYmVjYXVzZSB0aGUgcmVsb3B0a2luZCBpcyBSVEVfSk9JTiBv ciBiZWNhdXNlIHRoYXQKKwkgKiBwb3J0aW9uIG9mIHRoZSBxdWVyeSBkaWRuJ3QgbWFrZSBpdCBp bnRvIHRoZSBmaW5hbCBwbGFuLgorCSAqLworCWNvbnRleHQucmlkX3N0cmluZ3MgPSBwYWxsb2Mw X2FycmF5KGNvbnN0IGNoYXIgKiwgcnRhYmxlX2xlbmd0aCk7CisJZm9yIChpbnQgaSA9IDA7IGkg PCBydGFibGVfbGVuZ3RoOyArK2kpCisJCWlmIChydF9pZGVudGlmaWVyc1tpXS5hbGlhc19uYW1l ICE9IE5VTEwpCisJCQljb250ZXh0LnJpZF9zdHJpbmdzW2ldID0gcGdwYV9pZGVudGlmaWVyX3N0 cmluZygmcnRfaWRlbnRpZmllcnNbaV0pOworCisJLyoKKwkgKiBJZiB0aGUgdXNlciBjaG9vc2Vz IHRvIHVzZSBFWFBMQUlOIChQTEFOX0FEVklDRSkgaW4gYW4gODAtY29sdW1uIHdpbmRvdworCSAq IGZyb20gYSBwc3FsIGNsaWVudCB3aXRoIGRlZmF1bHQgc2V0dGluZ3MsIHBzcWwgd2lsbCBhZGQg b25lIHNwYWNlIHRvCisJICogdGhlIGxlZnQgb2YgdGhlIG91dHB1dCBhbmQgRVhQTEFJTiB3aWxs IGFkZCB0d28gbW9yZSB0byB0aGUgbGVmdCBvZiB0aGUKKwkgKiBhZHZpY2UuIFRodXMsIGxpbmVz IG9mIG1vcmUgdGhhbiA3NyBjaGFyYWN0ZXJzIHdpbGwgd3JhcC4gV2Ugc2V0IHRoZQorCSAqIHdy YXAgbGltaXQgdG8gNzYgaGVyZSBzbyB0aGF0IHRoZSBvdXRwdXQgd29uJ3QgcmVhY2ggYWxsIHRo ZSB3YXkgdG8gdGhlCisJICogdmVyeSBsYXN0IGNvbHVtbiBvZiB0aGUgdGVybWluYWwuCisJICoK KwkgKiBPZiBjb3Vyc2UsIHRoaXMgaXMgZmFpcmx5IGFyYml0cmFyeSBzZXQgb2YgYXNzdW1wdGlv bnMsIGFuZCBvbmUgY291bGQKKwkgKiB3ZWxsIG1ha2UgYW4gYXJndW1lbnQgZm9yIGEgZGlmZmVy ZW50IHdyYXAgbGltaXQsIG9yIGZvciBhIGNvbmZpZ3VyYWJsZQorCSAqIG9uZS4KKwkgKi8KKwlj b250ZXh0LndyYXBfY29sdW1uID0gNzY7CisKKwkvKgorCSAqIEVhY2ggcGllY2Ugb2YgSk9JTl9P UkRFUigpIGFkdmljZSBmdWxseSBkZXNjcmliZXMgdGhlIGpvaW4gb3JkZXIgZm9yIGEKKwkgKiBh IHNpbmdsZSB1bnJvbGxlZCBqb2luLiBNZXJnaW5nIGlzIG5vdCBwZXJtaXR0ZWQsIGJlY2F1c2Ug dGhhdCB3b3VsZAorCSAqIGNoYW5nZSB0aGUgbWVhbmluZywgZS5nLiBTRVFfU0NBTihhIGIgYyBk KSBtZWFucyBzaW1wbHkgdGhhdCBzZXF1ZW50aWFsCisJICogc2NhbnMgc2hvdWxkIGJlIHVzZWQg Zm9yIGFsbCBvZiB0aG9zZSByZWxhdGlvbnMsIGFuZCBpcyB0aHVzIGVxdWl2YWxlbnQKKwkgKiB0 byBTRVFfU0NBTihhIGIpIFNFUV9TQ0FOKGMgZCksIGJ1dCBKT0lOX09SREVSKGEgYiBjIGQpIG1l YW5zIHRoYXQgImEiCisJICogaXMgdGhlIGRyaXZpbmcgdGFibGUgd2hpY2ggaXMgdGhlbiBqb2lu ZWQgdG8gImIiIHRoZW4gImMiIHRoZW4gImQiLAorCSAqIHdoaWNoIGlzIHRvdGFsbHkgZGlmZmVy ZW50IGZyb20gSk9JTl9PUkRFUihhIGIpIGFuZCBKT0lOX09SREVSKGMgZCkuCisJICovCisJZm9y ZWFjaChsYywgd2Fsa2VyLT50b3BsZXZlbF91bnJvbGxlZF9qb2lucykKKwl7CisJCXBncGFfdW5y b2xsZWRfam9pbiAqdWpvaW4gPSBsZmlyc3QobGMpOworCisJCWlmIChidWYtPmxlbiA+IDApCisJ CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICdcbicpOworCQlhcHBlbmRTdHJpbmdJbmZvKGNv bnRleHQuYnVmLCAiSk9JTl9PUkRFUigiKTsKKwkJcGdwYV9vdXRwdXRfdW5yb2xsZWRfam9pbigm Y29udGV4dCwgdWpvaW4pOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LmJ1ZiwgJykn KTsKKwkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC5idWYsIGNvbnRleHQud3JhcF9jb2x1 bW4pOworCX0KKworCS8qIEVtaXQgam9pbiBzdHJhdGVneSBhZHZpY2UuICovCisJZm9yIChpbnQg cyA9IDA7IHMgPCBOVU1fUEdQQV9KT0lOX1NUUkFURUdZOyArK3MpCisJeworCQljaGFyCSAgICpz dHJhdGVneSA9IHBncGFfY3N0cmluZ19qb2luX3N0cmF0ZWd5KHMpOworCisJCXBncGFfb3V0cHV0 X3NpbXBsZV9zdHJhdGVneSgmY29udGV4dCwKKwkJCQkJCQkJCXN0cmF0ZWd5LAorCQkJCQkJCQkJ d2Fsa2VyLT5qb2luX3N0cmF0ZWdpZXNbc10pOworCX0KKworCS8qCisJICogRW1pdCBzY2FuIHN0 cmF0ZWd5IGFkdmljZSAoYnV0IG5vdCBmb3Igb3JkaW5hcnkgc2NhbnMsIHdoaWNoIGFyZQorCSAq IGRlZmluaXRpb25hbGx5IHVuaW50ZXJlc3RpbmcpLgorCSAqLworCWZvciAoaW50IGMgPSAwOyBj IDwgTlVNX1BHUEFfU0NBTl9TVFJBVEVHWTsgKytjKQorCQlpZiAoYyAhPSBQR1BBX1NDQU5fT1JE SU5BUlkpCisJCQlwZ3BhX291dHB1dF9zY2FuX3N0cmF0ZWd5KCZjb250ZXh0LCBjLCB3YWxrZXIt PnNjYW5zW2NdKTsKKworCS8qIEVtaXQgcXVlcnkgZmVhdHVyZSBhZHZpY2UuICovCisJZm9yIChp bnQgdCA9IDA7IHQgPCBOVU1fUEdQQV9RRl9UWVBFUzsgKyt0KQorCQlwZ3BhX291dHB1dF9xdWVy eV9mZWF0dXJlKCZjb250ZXh0LCB0LCB3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3RdKTsKKworCS8q IEVtaXQgTk9fR0FUSEVSIGFkdmljZS4gKi8KKwlwZ3BhX291dHB1dF9ub19nYXRoZXIoJmNvbnRl eHQsIHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zKTsKK30KKworLyoKKyAqIE91dHB1dCB0aGUgbWVt YmVycyBvZiBhbiB1bnJvbGxlZCBqb2luLCBmaXJzdCB0aGUgb3V0ZXJtb3N0IG1lbWJlciwgYW5k CisgKiB0aGVuIHRoZSBpbm5lciBtZW1iZXJzIG9uZSBieSBvbmUsIGFzIHBhcnQgb2YgSk9JTl9P UkRFUigpIGFkdmljZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3Vucm9sbGVkX2pv aW4ocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCSAgcGdwYV91bnJvbGxlZF9q b2luICpqb2luKQoreworCXBncGFfb3V0cHV0X2pvaW5fbWVtYmVyKGNvbnRleHQsICZqb2luLT5v dXRlcik7CisKKwlmb3IgKGludCBrID0gMDsgayA8IGpvaW4tPm5pbm5lcjsgKytrKQorCXsKKwkJ cGdwYV9qb2luX21lbWJlciAqbWVtYmVyID0gJmpvaW4tPmlubmVyW2tdOworCisJCXBncGFfbWF5 YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCXBncGFfb3V0cHV0X2pvaW5f bWVtYmVyKGNvbnRleHQsIG1lbWJlcik7CisJfQorfQorCisvKgorICogT3V0cHV0IGEgc2luZ2xl IG1lbWJlciBvZiBhbiB1bnJvbGxlZCBqb2luIGFzIHBhcnQgb2YgSk9JTl9PUkRFUigpIGFkdmlj ZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X2pvaW5fbWVtYmVyKHBncGFfb3V0cHV0 X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQlwZ3BhX2pvaW5fbWVtYmVyICptZW1iZXIpCit7CisJ aWYgKG1lbWJlci0+dW5yb2xsZWRfam9pbiAhPSBOVUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOworCQlwZ3BhX291dHB1dF91bnJvbGxlZF9qb2luKGNv bnRleHQsIG1lbWJlci0+dW5yb2xsZWRfam9pbik7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNv bnRleHQtPmJ1ZiwgJyknKTsKKwl9CisJZWxzZQorCXsKKwkJcGdwYV9zY2FuICAqc2NhbiA9IG1l bWJlci0+c2NhbjsKKworCQlBc3NlcnQoc2NhbiAhPSBOVUxMKTsKKwkJaWYgKGJtc19tZW1iZXJz aGlwKHNjYW4tPnJlbGlkcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCXBncGFfb3V0cHV0X3JlbGF0 aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHNjYW4tPnJlbGlkcyk7CisJCWVsc2UKKwkJewor CQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAneycpOworCQkJcGdwYV9vdXRw dXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsKKwkJCWFw cGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ30nKTsKKwkJfQorCX0KK30KKworLyoK KyAqIE91dHB1dCBhZHZpY2UgZm9yIGEgTGlzdCBvZiBwZ3BhX3NjYW4gb2JqZWN0cy4KKyAqCisg KiBBbGwgdGhlIHNjYW5zIG11c3QgdXNlIHRoZSBzdHJhdGVneSBzcGVjaWZpZWQgYnkgdGhlICJz dHJhdGVneSIgYXJndW1lbnQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9zY2FuX3N0 cmF0ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkgIHBncGFfc2Nhbl9z dHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCSAgTGlzdCAqc2NhbnMpCit7CisJYm9vbAkJZmlyc3Qg PSB0cnVlOworCisJaWYgKHNjYW5zID09IE5JTCkKKwkJcmV0dXJuOworCisJaWYgKGNvbnRleHQt PmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnXG4n KTsKKwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiVzKCIsCisJCQkJCSBwZ3BhX2Nz dHJpbmdfc2Nhbl9zdHJhdGVneShzdHJhdGVneSkpOworCisJZm9yZWFjaF9wdHIocGdwYV9zY2Fu LCBzY2FuLCBzY2FucykKKwl7CisJCVBsYW4JICAgKnBsYW4gPSBzY2FuLT5wbGFuOworCisJCWlm IChmaXJzdCkKKwkJCWZpcnN0ID0gZmFsc2U7CisJCWVsc2UKKwkJeworCQkJcGdwYV9tYXliZV9s aW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCX0KKworCQkvKiBPdXRwdXQgdGhl IHJlbGF0aW9uIGlkZW50aWZpZXJzLiAqLworCQlpZiAoYm1zX21lbWJlcnNoaXAoc2Nhbi0+cmVs aWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQs IGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcoJyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMo Y29udGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5yZWxpZHMpOworCQkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCQl9CisKKwkJLyogRm9yIHNjYW5zIGludm9sdmlu ZyBpbmRleGVzLCBvdXRwdXQgaW5kZXggaW5mb3JtYXRpb24uICovCisJCWlmIChzdHJhdGVneSA9 PSBQR1BBX1NDQU5fSU5ERVgpCisJCXsKKwkJCUFzc2VydChJc0EocGxhbiwgSW5kZXhTY2FuKSk7 CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29s dW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJCXBn cGFfb3V0cHV0X3JlbGF0aW9uX25hbWUoY29udGV4dCwgKChJbmRleFNjYW4gKikgcGxhbiktPmlu ZGV4aWQpOworCQl9CisJCWVsc2UgaWYgKHN0cmF0ZWd5ID09IFBHUEFfU0NBTl9JTkRFWF9PTkxZ KQorCQl7CisJCQlBc3NlcnQoSXNBKHBsYW4sIEluZGV4T25seVNjYW4pKTsKKwkJCXBncGFfbWF5 YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQkJcGdwYV9vdXRwdXRfcmVs YXRpb25fbmFtZShjb250ZXh0LAorCQkJCQkJCQkJICAoKEluZGV4T25seVNjYW4gKikgcGxhbikt PmluZGV4aWQpOworCQl9CisJCWVsc2UgaWYgKHN0cmF0ZWd5ID09IFBHUEFfU0NBTl9CSVRNQVBf SEVBUCkKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0 LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcg Jyk7CisJCQlwZ3BhX291dHB1dF9iaXRtYXBfaW5kZXhfZGV0YWlscyhjb250ZXh0LCBwbGFuLT5s ZWZ0dHJlZSk7CisJCX0KKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYs ICcpJyk7CisJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFw X2NvbHVtbik7Cit9CisKKy8qCisgKiBPdXRwdXQgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggaW5k ZXggb3IgaW5kZXhlcyBwb3dlciBhIEJpdG1hcEhlYXBTY2FuLgorICoKKyAqIFdlIGVtaXQgJiYo aTEgaTIgaTMpIGZvciBhIEJpdG1hcEFuZCBiZXR3ZWVuIGluZGV4ZXMgaTEsIGkyLCBhbmQgaTM7 CisgKiBhbmQgbGlrZXdpc2UgfHwoaTEgaTIgaTMpIGZvciBhIHNpbWlsYXIgQml0bWFwT3Igb3Bl cmF0aW9uLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfYml0bWFwX2luZGV4X2RldGFp bHMocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgUGxhbiAqcGxhbikKK3sKKwljaGFyCSAg ICpvcGVyYXRvcjsKKwlMaXN0CSAgICpiaXRtYXBwbGFuczsKKwlib29sCQlmaXJzdCA9IHRydWU7 CisKKwlpZiAoSXNBKHBsYW4sIEJpdG1hcEluZGV4U2NhbikpCisJeworCQlCaXRtYXBJbmRleFNj YW4gKmJpdG1hcGluZGV4c2NhbiA9IChCaXRtYXBJbmRleFNjYW4gKikgcGxhbjsKKworCQlwZ3Bh X291dHB1dF9yZWxhdGlvbl9uYW1lKGNvbnRleHQsIGJpdG1hcGluZGV4c2Nhbi0+aW5kZXhpZCk7 CisJCXJldHVybjsKKwl9CisKKwlpZiAoSXNBKHBsYW4sIEJpdG1hcE9yKSkKKwl7CisJCW9wZXJh dG9yID0gInx8IjsKKwkJYml0bWFwcGxhbnMgPSAoKEJpdG1hcE9yICopIHBsYW4pLT5iaXRtYXBw bGFuczsKKwl9CisJZWxzZSBpZiAoSXNBKHBsYW4sIEJpdG1hcEFuZCkpCisJeworCQlvcGVyYXRv ciA9ICImJiI7CisJCWJpdG1hcHBsYW5zID0gKChCaXRtYXBBbmQgKikgcGxhbiktPmJpdG1hcHBs YW5zOworCX0KKwllbHNlCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIG5vZGUgdHlwZTogJWQi LCAoaW50KSBub2RlVGFnKHBsYW4pKTsKKworCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVm LCAiJXMoIiwgb3BlcmF0b3IpOworCWZvcmVhY2hfcHRyKFBsYW4sIGNoaWxkX3BsYW4sIGJpdG1h cHBsYW5zKQorCXsKKwkJaWYgKGZpcnN0KQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7 CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29s dW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQor CQlwZ3BhX291dHB1dF9iaXRtYXBfaW5kZXhfZGV0YWlscyhjb250ZXh0LCBjaGlsZF9wbGFuKTsK Kwl9CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworfQorCisvKgor ICogT3V0cHV0IGEgc2NoZW1hLXF1YWxpZmllZCByZWxhdGlvbiBuYW1lLgorICovCitzdGF0aWMg dm9pZAorcGdwYV9vdXRwdXRfcmVsYXRpb25fbmFtZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250 ZXh0LCBPaWQgcmVsaWQpCit7CisJT2lkCQkJbnNwb2lkID0gZ2V0X3JlbF9uYW1lc3BhY2UocmVs aWQpOworCWNoYXIJICAgKnJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1w KG5zcG9pZCk7CisJY2hhcgkgICAqcmVsbmFtZSA9IGdldF9yZWxfbmFtZShyZWxpZCk7CisKKwlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1ZiwgcXVvdGVfaWRlbnRpZmllcihyZWxu YW1lc3BhY2UpKTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcuJyk7CisJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYsIHF1b3RlX2lkZW50aWZpZXIocmVs bmFtZSkpOworfQorCisvKgorICogT3V0cHV0IGFkdmljZSBmb3IgYSBMaXN0IG9mIHBncGFfcXVl cnlfZmVhdHVyZSBvYmplY3RzLgorICoKKyAqIEFsbCBmZWF0dXJlcyBtdXN0IGJlIG9mIHRoZSB0 eXBlIHNwZWNpZmllZCBieSB0aGUgInR5cGUiIGFyZ3VtZW50LgorICovCitzdGF0aWMgdm9pZAor cGdwYV9vdXRwdXRfcXVlcnlfZmVhdHVyZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBw Z3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCSAgTGlzdCAqcXVlcnlfZmVhdHVyZXMpCit7CisJYm9v bAkJZmlyc3QgPSB0cnVlOworCisJaWYgKHF1ZXJ5X2ZlYXR1cmVzID09IE5JTCkKKwkJcmV0dXJu OworCisJaWYgKGNvbnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo Y29udGV4dC0+YnVmLCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiVz KCIsCisJCQkJCSBwZ3BhX2NzdHJpbmdfcXVlcnlfZmVhdHVyZV90eXBlKHR5cGUpKTsKKworCWZv cmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIHF1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJ aWYgKGZpcnN0KQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJl X2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCWlmIChibXNfbWVt YmVyc2hpcChxZi0+cmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVs YXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcWYtPnJlbGlkcyk7CisJCWVsc2UKKwkJewor CQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOworCQkJcGdwYV9vdXRw dXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcWYtPnJlbGlkcyk7CisJCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJCX0KKwl9CisKKwlhcHBlbmRT dHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJcGdwYV9tYXliZV9saW5lYnJlYWso Y29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7Cit9CisKKy8qCisgKiBPdXRwdXQg InNpbXBsZSIgYWR2aWNlIGZvciBhIExpc3Qgb2YgQml0bWFwc2V0IG9iamVjdHMgZWFjaCBvZiB3 aGljaAorICogY29udGFpbnMgb25lIG9yIG1vcmUgUlRJcy4KKyAqCisgKiBCeSBzaW1wbGUsIHdl IGp1c3QgbWVhbiB0aGF0IHRoZSBhZHZpY2UgZW1pdHRlZCBmb2xsb3dzIHRoZSBtb3N0CisgKiBz dHJhaWdodGZvcndhcmQgcGF0dGVybjogdGhlIHN0cmF0ZWd5IG5hbWUsIGZvbGxvd2VkIGJ5IGEg bGlzdCBvZiBpdGVtcworICogc2VwYXJhdGVkIGJ5IHNwYWNlcyBhbmQgc3Vycm91bmRlZCBieSBw YXJlbnRoZXNlcy4gSW5kaXZpZHVhbCBpdGVtcyBpbgorICogdGhlIGxpc3QgYXJlIGEgc2luZ2xl IHJlbGF0aW9uIGlkZW50aWZpZXIgZm9yIGEgQml0bWFwc2V0IHRoYXQgY29udGFpbnMKKyAqIGp1 c3Qgb25lIG1lbWJlciwgb3IgYSBzdWItbGlzdCBhZ2FpbiBzZXBhcmF0ZWQgYnkgc3BhY2VzIGFu ZCBzdXJyb3VuZGVkCisgKiBieSBwYXJlbnRoZXNlcyBmb3IgYSBCaXRtYXBzZXQgd2l0aCBtdWx0 aXBsZSBtZW1iZXJzLiBCaXRtYXBzZXRzIHdpdGgKKyAqIG5vIG1lbWJlcnMgcHJvYmFibHkgc2hv dWxkbid0IG9jY3VyIGhlcmUsIGJ1dCBpZiB0aGV5IGRvIHRoZXknbGwgYmUKKyAqIHJlbmRlcmVk IGFzIGFuIGVtcHR5IHN1Yi1saXN0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfc2lt cGxlX3N0cmF0ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKnN0cmF0ZWd5 LAorCQkJCQkJCUxpc3QgKnJlbGlkX3NldHMpCit7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJ aWYgKHJlbGlkX3NldHMgPT0gTklMKQorCQlyZXR1cm47CisKKwlpZiAoY29udGV4dC0+YnVmLT5s ZW4gPiAwKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICdcbicpOworCWFw cGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAiJXMoIiwgc3RyYXRlZ3kpOworCisJZm9yZWFj aF9ub2RlKEJpdG1hcHNldCwgcmVsaWRzLCByZWxpZF9zZXRzKQorCXsKKwkJaWYgKGZpcnN0KQor CQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhj b250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9D aGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCWlmIChibXNfbWVtYmVyc2hpcChyZWxp ZHMpID09IEJNU19TSU5HTEVUT04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwg Y29udGV4dC0+YnVmLCByZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9D aGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0 LCBjb250ZXh0LT5idWYsIHJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0 LT5idWYsICcpJyk7CisJCX0KKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5i dWYsICcpJyk7CisJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53 cmFwX2NvbHVtbik7Cit9CisKKy8qCisgKiBPdXRwdXQgTk9fR0FUSEVSIGFkdmljZSBmb3IgYWxs IHJlbGF0aW9ucyBub3QgYXBwZWFyaW5nIGJlbmVhdGggYW55CisgKiBHYXRoZXIgb3IgR2F0aGVy IE1lcmdlIG5vZGUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9ub19nYXRoZXIocGdw YV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJaWYgKHJl bGlkcyA9PSBOVUxMKQorCQlyZXR1cm47CisJaWYgKGNvbnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKGNvbnRleHQtPmJ1ZiwgIk5PX0dBVEhFUigiKTsKKwlwZ3BhX291dHB1dF9yZWxh dGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCByZWxpZHMpOworCWFwcGVuZFN0cmluZ0luZm9D aGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKK30KKworLyoKKyAqIE91dHB1dCB0aGUgaWRlbnRpZmll cnMgZm9yIGVhY2ggUlRJIGluIHRoZSBwcm92aWRlZCBzZXQuCisgKgorICogSWRlbnRpZmllcnMg YXJlIHNlcGFyYXRlZCBieSBzcGFjZXMsIGFuZCBhIGxpbmUgYnJlYWsgaXMgcG9zc2libGUgYWZ0 ZXIKKyAqIGVhY2ggb25lLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfcmVsYXRpb25z KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIFN0cmluZ0luZm8gYnVmLAorCQkJCQkgIEJp dG1hcHNldCAqcmVsaWRzKQoreworCWludAkJCXJ0aSA9IC0xOworCWJvb2wJCWZpcnN0ID0gdHJ1 ZTsKKworCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkgPj0gMCkK Kwl7CisJCWNvbnN0IGNoYXIgKnJpZF9zdHJpbmcgPSBjb250ZXh0LT5yaWRfc3RyaW5nc1tydGkg LSAxXTsKKworCQlpZiAocmlkX3N0cmluZyA9PSBOVUxMKQorCQkJZWxvZyhFUlJPUiwgIm5vIGlk ZW50aWZpZXIgZm9yIFJUSSAlZCIsIHJ0aSk7CisKKwkJaWYgKGZpcnN0KQorCQl7CisJCQlmaXJz dCA9IGZhbHNlOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHJpZF9zdHJpbmcpOwor CQl9CisJCWVsc2UKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoYnVmLCBjb250ZXh0LT53 cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiAlcyIsIHJpZF9zdHJpbmcp OworCQl9CisJfQorfQorCisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0 byB0aGUgc3BlY2lmaWVkIGpvaW4gc3RyYXRlZ3kuCisgKi8KK3N0YXRpYyBjaGFyICoKK3BncGFf Y3N0cmluZ19qb2luX3N0cmF0ZWd5KHBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSkKK3sKKwlz d2l0Y2ggKHN0cmF0ZWd5KQorCXsKKwkJY2FzZSBKU1RSQVRfTUVSR0VfSk9JTl9QTEFJTjoKKwkJ CXJldHVybiAiTUVSR0VfSk9JTl9QTEFJTiI7CisJCWNhc2UgSlNUUkFUX01FUkdFX0pPSU5fTUFU RVJJQUxJWkU6CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fTUFURVJJQUxJWkUiOworCQljYXNlIEpT VFJBVF9ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfUExBSU4iOwor CQljYXNlIEpTVFJBVF9ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiAiTkVTVEVE X0xPT1BfTUFURVJJQUxJWkUiOworCQljYXNlIEpTVFJBVF9ORVNURURfTE9PUF9NRU1PSVpFOgor CQkJcmV0dXJuICJORVNURURfTE9PUF9NRU1PSVpFIjsKKwkJY2FzZSBKU1RSQVRfSEFTSF9KT0lO OgorCQkJcmV0dXJuICJIQVNIX0pPSU4iOworCX0KKworCXBnX3VucmVhY2hhYmxlKCk7CisJcmV0 dXJuIE5VTEw7Cit9CisKKy8qCisgKiBHZXQgYSBDIHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRv IHRoZSBzcGVjaWZpZWQgc2NhbiBzdHJhdGVneS4KKyAqLworc3RhdGljIGNoYXIgKgorcGdwYV9j c3RyaW5nX3NjYW5fc3RyYXRlZ3kocGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5KQoreworCXN3 aXRjaCAoc3RyYXRlZ3kpCisJeworCQljYXNlIFBHUEFfU0NBTl9PUkRJTkFSWToKKwkJCXJldHVy biAiT1JESU5BUllfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX1NFUToKKwkJCXJldHVybiAiU0VR X1NDQU4iOworCQljYXNlIFBHUEFfU0NBTl9CSVRNQVBfSEVBUDoKKwkJCXJldHVybiAiQklUTUFQ X0hFQVBfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX0ZPUkVJR046CisJCQlyZXR1cm4gIkZPUkVJ R05fSk9JTiI7CisJCWNhc2UgUEdQQV9TQ0FOX0lOREVYOgorCQkJcmV0dXJuICJJTkRFWF9TQ0FO IjsKKwkJY2FzZSBQR1BBX1NDQU5fSU5ERVhfT05MWToKKwkJCXJldHVybiAiSU5ERVhfT05MWV9T Q0FOIjsKKwkJY2FzZSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRToKKwkJCXJldHVybiAiUEFSVElU SU9OV0lTRSI7CisJCWNhc2UgUEdQQV9TQ0FOX1RJRDoKKwkJCXJldHVybiAiVElEX1NDQU4iOwor CX0KKworCXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBHZXQg YSBDIHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQgc2NhbiBzdHJhdGVn eS4KKyAqLworc3RhdGljIGNoYXIgKgorcGdwYV9jc3RyaW5nX3F1ZXJ5X2ZlYXR1cmVfdHlwZShw Z3BhX3FmX3R5cGUgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpCisJeworCQljYXNlIFBHUEFRRl9H QVRIRVI6CisJCQlyZXR1cm4gIkdBVEhFUiI7CisJCWNhc2UgUEdQQVFGX0dBVEhFUl9NRVJHRToK KwkJCXJldHVybiAiR0FUSEVSX01FUkdFIjsKKwkJY2FzZSBQR1BBUUZfU0VNSUpPSU5fTk9OX1VO SVFVRToKKwkJCXJldHVybiAiU0VNSUpPSU5fTk9OX1VOSVFVRSI7CisJCWNhc2UgUEdQQVFGX1NF TUlKT0lOX1VOSVFVRToKKwkJCXJldHVybiAiU0VNSUpPSU5fVU5JUVVFIjsKKwl9CisKKworCXBn X3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBJbnNlcnQgYSBsaW5l IGJyZWFrIGludG8gdGhlIFN0cmluZ0luZm9EYXRhLCBpZiBuZWVkZWQuCisgKgorICogSWYgd3Jh cF9jb2x1bW4gaXMgemVybyBvciBuZWdhdGl2ZSwgdGhpcyBkb2VzIG5vdGhpbmcuIE90aGVyd2lz ZSwgd2UKKyAqIGNvbnNpZGVyIGluc2VydGluZyBhIG5ld2xpbmUuIFdlIG9ubHkgaW5zZXJ0IGEg bmV3bGluZSBpZiB0aGUgbGVuZ3RoIG9mCisgKiB0aGUgbGFzdCBsaW5lIGluIHRoZSBidWZmZXIg ZXhjZWVkcyB3cmFwX2NvbHVtbiwgYW5kIG5vdCBpZiB3ZSdkIGJlCisgKiBpbnNlcnRpbmcgYSBu ZXdsaW5lIGF0IG9yIGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IGxpbmUuCisg KgorICogVGhlIHBvc2l0aW9uIGF0IHdoaWNoIHRoZSBuZXdsaW5lIGlzIGluc2VydGVkIGlzIHNp bXBseSB3aGVyZXZlciB0aGUKKyAqIGJ1ZmZlciBlbmRlZCB0aGUgbGFzdCB0aW1lIHRoaXMgZnVu Y3Rpb24gd2FzIGNhbGxlZC4gSW4gb3RoZXIgd29yZHMsCisgKiB0aGUgY2FsbGVyIGlzIGV4cGVj dGVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBldmVyeSB0aW1lIHdlIHJlYWNoIGEgZ29vZAorICog cGxhY2UgZm9yIGEgbGluZSBicmVhay4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfbWF5YmVfbGlu ZWJyZWFrKFN0cmluZ0luZm8gYnVmLCBpbnQgd3JhcF9jb2x1bW4pCit7CisJY2hhcgkgICAqdHJh aWxpbmdfbmw7CisJaW50CQkJbGluZV9zdGFydDsKKwlpbnQJCQlzYXZlX2N1cnNvcjsKKworCS8q IElmIGxpbmUgd3JhcHBpbmcgaXMgZGlzYWJsZWQsIGV4aXQgcXVpY2tseS4gKi8KKwlpZiAod3Jh cF9jb2x1bW4gPD0gMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBTZXQgbGluZV9zdGFydCB0byB0 aGUgYnl0ZSBvZmZzZXQgd2l0aGluIGJ1Zi0+ZGF0YSBvZiB0aGUgZmlyc3QKKwkgKiBjaGFyYWN0 ZXIgb2YgdGhlIGN1cnJlbnQgbGluZSwgd2hlcmUgdGhlIGN1cnJlbnQgbGluZSBtZWFucyB0aGUg bGFzdAorCSAqIG9uZSBpbiB0aGUgYnVmZmVyLiBOb3RlIHRoYXQgbGluZV9zdGFydCBjb3VsZCBi ZSB0aGUgb2Zmc2V0IG9mIHRoZQorCSAqIHRyYWlsaW5nICdcMCcgaWYgdGhlIGxhc3QgY2hhcmFj dGVyIGluIHRoZSBidWZmZXIgaXMgYSBsaW5lIGJyZWFrLgorCSAqLworCXRyYWlsaW5nX25sID0g c3RycmNocihidWYtPmRhdGEsICdcbicpOworCWlmICh0cmFpbGluZ19ubCA9PSBOVUxMKQorCQls aW5lX3N0YXJ0ID0gMDsKKwllbHNlCisJCWxpbmVfc3RhcnQgPSAodHJhaWxpbmdfbmwgLSBidWYt PmRhdGEpICsgMTsKKworCS8qCisJICogUmVtZW1iZXIgdGhhdCB0aGUgY3VycmVudCBlbmQgb2Yg dGhlIGJ1ZmZlciBpcyBhIHBvdGVudGlhbCBsb2NhdGlvbiB0bworCSAqIGluc2VydCBhIGxpbmUg YnJlYWsgb24gYSBmdXR1cmUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgorCSAqLworCXNhdmVfY3Vy c29yID0gYnVmLT5jdXJzb3I7CisJYnVmLT5jdXJzb3IgPSBidWYtPmxlbjsKKworCS8qIElmIHdl IGhhdmVuJ3QgcGFzc2VkIHRoZSB3cmFwIGNvbHVtbiwgd2UgZG9uJ3QgbmVlZCBhIG5ld2xpbmUu ICovCisJaWYgKGJ1Zi0+bGVuIC0gbGluZV9zdGFydCA8PSB3cmFwX2NvbHVtbikKKwkJcmV0dXJu OworCisJLyoKKwkgKiBJdCBvbmx5IG1ha2VzIHNlbnNlIHRvIGluc2VydCBhIG5ld2xpbmUgYXQg YSBwb3NpdGlvbiBsYXRlciB0aGFuIHRoZQorCSAqIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBs aW5lLgorCSAqLworCWlmIChidWYtPmN1cnNvciA8PSBsaW5lX3N0YXJ0KQorCQlyZXR1cm47CisK KwkvKiBJbnNlcnQgYSBuZXdsaW5lIGF0IHRoZSBwcmV2aW91cyBjdXJzb3IgbG9jYXRpb24uICov CisJZW5sYXJnZVN0cmluZ0luZm8oYnVmLCAxKTsKKwltZW1tb3ZlKCZidWYtPmRhdGFbc2F2ZV9j dXJzb3JdICsgMSwgJmJ1Zi0+ZGF0YVtzYXZlX2N1cnNvcl0sCisJCQlidWYtPmxlbiAtIHNhdmVf Y3Vyc29yKTsKKwkrK2J1Zi0+Y3Vyc29yOworCWJ1Zi0+ZGF0YVsrK2J1Zi0+bGVuXSA9ICdcMCc7 CisJYnVmLT5kYXRhW3NhdmVfY3Vyc29yXSA9ICdcbic7Cit9CmRpZmYgLS1naXQgYS9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfb3V0cHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ3NDk2 ZDc2ZjUyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291 dHB1dC5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFf b3V0cHV0LmgKKyAqCSAgcHJvZHVjZSB0ZXh0dWFsIG91dHB1dCBmcm9tIHRoZSByZXN1bHRzIG9m IGEgcGxhbiB0cmVlIHdhbGsKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9vdXRwdXQuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVm IFBHUEFfT1VUUFVUX0gKKyNkZWZpbmUgUEdQQV9PVVRQVVRfSAorCisjaW5jbHVkZSAicGdwYV9p ZGVudGlmaWVyLmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworZXh0ZXJuIHZvaWQgcGdw YV9vdXRwdXRfYWR2aWNlKFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCSAgIHBncGFfcGxhbl93YWxr ZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRp ZmllcnMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9wYXJzZXIueSBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDYxN2U3ZjJmNjQKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKQEAgLTAsMCArMSwz MzcgQEAKKyV7CisvKgorICogUGFyc2VyIGZvciBwbGFuIGFkdmljZQorICoKKyAqIENvcHlyaWdo dCAoYykgMjAwMC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQorICovCisKKyNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisK KyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAibm9kZXMvbWlzY25vZGVzLmgiCisjaW5jbHVk ZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbG9hdC5oIgorCisjaW5jbHVk ZSAicGdwYV9hc3QuaCIKKyNpbmNsdWRlICJwZ3BhX3BhcnNlci5oIgorCisvKgorICogQmlzb24g ZG9lc24ndCBhbGxvY2F0ZSBhbnl0aGluZyB0aGF0IG5lZWRzIHRvIGxpdmUgYWNyb3NzIHBhcnNl ciBjYWxscywKKyAqIHNvIHdlIGNhbiBlYXNpbHkgaGF2ZSBpdCB1c2UgcGFsbG9jIGluc3RlYWQg b2YgbWFsbG9jLiAgVGhpcyBwcmV2ZW50cworICogbWVtb3J5IGxlYWtzIGlmIHdlIGVycm9yIG91 dCBkdXJpbmcgcGFyc2luZy4KKyAqLworI2RlZmluZSBZWU1BTExPQyBwYWxsb2MKKyNkZWZpbmUg WVlGUkVFICAgcGZyZWUKKyV9CisKKy8qIEJJU09OIERlY2xhcmF0aW9ucyAqLworJXBhcnNlLXBh cmFtIHtMaXN0ICoqcmVzdWx0fQorJXBhcnNlLXBhcmFtIHtjaGFyICoqcGFyc2VfZXJyb3JfbXNn X3B9CislcGFyc2UtcGFyYW0ge3l5c2Nhbl90IHl5c2Nhbm5lcn0KKyVsZXgtcGFyYW0ge0xpc3Qg KipyZXN1bHR9CislbGV4LXBhcmFtIHtjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3B9CislbGV4LXBh cmFtIHt5eXNjYW5fdCB5eXNjYW5uZXJ9CislcHVyZS1wYXJzZXIKKyVleHBlY3QgMAorJW5hbWUt cHJlZml4PSJwZ3BhX3l5IgorCisldW5pb24KK3sKKwljaGFyCSAgICpzdHI7CisJaW50CQkJaW50 ZWdlcjsKKwlMaXN0CSAgICpsaXN0OworCXBncGFfYWR2aWNlX2l0ZW0gKml0ZW07CisJcGdwYV9h ZHZpY2VfdGFyZ2V0ICp0YXJnZXQ7CisJcGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQ7Cit9Cisl dG9rZW4gPHN0cj4gVE9LX0lERU5UIFRPS19UQUdfSk9JTl9PUkRFUiBUT0tfVEFHX0JJVE1BUCBU T0tfVEFHX0lOREVYCisldG9rZW4gPHN0cj4gVE9LX1RBR19TSU1QTEUgVE9LX1RBR19HRU5FUklD CisldG9rZW4gPGludGVnZXI+IFRPS19JTlRFR0VSCisldG9rZW4gVE9LX09SIFRPS19BTkQKKwor JXR5cGUgPGludGVnZXI+IG9wdF9yaV9vY2N1cnJlbmNlCisldHlwZSA8aXRlbT4gYWR2aWNlX2l0 ZW0KKyV0eXBlIDxsaXN0PiBhZHZpY2VfaXRlbV9saXN0IGJpdG1hcF9zdWJsaXN0IGJpdG1hcF90 YXJnZXRfbGlzdCBnZW5lcmljX3RhcmdldF9saXN0CisldHlwZSA8bGlzdD4gaW5kZXhfdGFyZ2V0 X2xpc3Qgam9pbl9vcmRlcl90YXJnZXRfbGlzdAorJXR5cGUgPGxpc3Q+IG9wdF9wYXJ0aXRpb24g c2ltcGxlX3RhcmdldF9saXN0CisldHlwZSA8c3RyPiBpZGVudGlmaWVyIG9wdF9wbGFuX25hbWUK KyV0eXBlIDx0YXJnZXQ+IGdlbmVyaWNfc3VibGlzdCBqb2luX29yZGVyX3N1Ymxpc3QKKyV0eXBl IDx0YXJnZXQ+IHJlbGF0aW9uX2lkZW50aWZpZXIKKyV0eXBlIDxpdGFyZ2V0PiBiaXRtYXBfdGFy Z2V0X2l0ZW0gaW5kZXhfbmFtZQorCislc3RhcnQgcGFyc2VfdG9wbGV2ZWwKKworLyogR3JhbW1h ciBmb2xsb3dzICovCislJQorCitwYXJzZV90b3BsZXZlbDogYWR2aWNlX2l0ZW1fbGlzdAorCQl7 CisJCQkodm9pZCkgeXluZXJyczsJCQkJLyogc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAqLwor CQkJKnJlc3VsdCA9ICQxOworCQl9CisJOworCithZHZpY2VfaXRlbV9saXN0OiBhZHZpY2VfaXRl bV9saXN0IGFkdmljZV9pdGVtCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsg JCQgPSBOSUw7IH0KKwk7CisKK2FkdmljZV9pdGVtOiBUT0tfVEFHX0pPSU5fT1JERVIgJygnIGpv aW5fb3JkZXJfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdw YV9hZHZpY2VfaXRlbSk7CisJCQkkJC0+dGFnID0gUEdQQV9UQUdfSk9JTl9PUkRFUjsKKwkJCSQk LT50YXJnZXRzID0gJDM7CisJCX0KKwl8IFRPS19UQUdfSU5ERVggJygnIGluZGV4X3RhcmdldF9s aXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX2l0ZW0pOwor CQkJaWYgKHN0cmNtcCgkMSwgImluZGV4X29ubHlfc2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9 IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgImluZGV4 X3NjYW4iKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19JTkRFWF9TQ0FOOworCQkJZWxz ZQorCQkJCWVsb2coRVJST1IsICJ0YWcgcGFyc2luZyBmYWlsZWQ6ICVzIiwgJDEpOworCQkJJCQt PnRhcmdldHMgPSAkMzsKKwkJfQorCXwgVE9LX1RBR19CSVRNQVAgJygnIGJpdG1hcF90YXJnZXRf bGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV9pdGVtKTsK KwkJCSQkLT50YWcgPSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOworCQkJJCQtPnRhcmdldHMg PSAkMzsKKwkJfQorCXwgVE9LX1RBR19TSU1QTEUgJygnIHNpbXBsZV90YXJnZXRfbGlzdCAnKScK KwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJCWlmIChz dHJjbXAoJDEsICJub19nYXRoZXIiKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19OT19H QVRIRVI7CisJCQllbHNlIGlmIChzdHJjbXAoJDEsICJzZXFfc2NhbiIpID09IDApCisJCQkJJCQt PnRhZyA9IFBHUEFfVEFHX1NFUV9TQ0FOOworCQkJZWxzZSBpZiAoc3RyY21wKCQxLCAidGlkX3Nj YW4iKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19USURfU0NBTjsKKwkJCWVsc2UKKwkJ CQllbG9nKEVSUk9SLCAidGFnIHBhcnNpbmcgZmFpbGVkOiAlcyIsICQxKTsKKwkJCSQkLT50YXJn ZXRzID0gJDM7CisJCX0KKwl8IFRPS19UQUdfR0VORVJJQyAnKCcgZ2VuZXJpY190YXJnZXRfbGlz dCAnKScKKwkJeworCQkJYm9vbAlmYWlsOworCisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFf YWR2aWNlX2l0ZW0pOworCQkJJCQtPnRhZyA9IHBncGFfcGFyc2VfYWR2aWNlX3RhZygkMSwgJmZh aWwpOworCQkJaWYgKGZhaWwpCisJCQl7CisJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2Vf ZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkgInVucmVjb2duaXplZCBhZHZpY2UgdGFn Iik7CisJCQl9CisKKwkJCWlmICgkJC0+dGFnID09IFBHUEFfVEFHX0ZPUkVJR05fSk9JTikKKwkJ CXsKKwkJCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRhcmdldCwgJDMpCisJCQkJ eworCQkJCQlpZiAodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSIHx8CisJ CQkJCQlsaXN0X2xlbmd0aCh0YXJnZXQtPmNoaWxkcmVuKSA9PSAxKQorCQkJCQkJCXBncGFfeXll cnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJCQkJICJG T1JFSUdOX0pPSU4gdGFyZ2V0cyBtdXN0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSByZWxhdGlvbiBp ZGVudGlmaWVyIik7CisJCQkJfQorCQkJfQorCisJCQkkJC0+dGFyZ2V0cyA9ICQzOworCQl9CisJ OworCityZWxhdGlvbl9pZGVudGlmaWVyOiBpZGVudGlmaWVyIG9wdF9yaV9vY2N1cnJlbmNlIG9w dF9wYXJ0aXRpb24gb3B0X3BsYW5fbmFtZQorCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBn cGFfYWR2aWNlX3RhcmdldCk7CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9JREVOVElGSUVS OworCQkJJCQtPnJpZC5hbGlhc19uYW1lID0gJDE7CisJCQkkJC0+cmlkLm9jY3VycmVuY2UgPSAk MjsKKwkJCWlmIChsaXN0X2xlbmd0aCgkMykgPT0gMikKKwkJCXsKKwkJCQkkJC0+cmlkLnBhcnRu c3AgPSBsaW5pdGlhbCgkMyk7CisJCQkJJCQtPnJpZC5wYXJ0cmVsID0gbHNlY29uZCgkMyk7CisJ CQl9CisJCQllbHNlIGlmICgkMyAhPSBOSUwpCisJCQkJJCQtPnJpZC5wYXJ0cmVsID0gbGluaXRp YWwoJDMpOworCQkJJCQtPnJpZC5wbGFuX25hbWUgPSAkNDsKKwkJfQorCTsKKworaW5kZXhfbmFt ZTogaWRlbnRpZmllcgorCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfaW5kZXhfdGFy Z2V0KTsKKwkJCSQkLT5pdHlwZSA9IFBHUEFfSU5ERVhfTkFNRTsKKwkJCSQkLT5pbmRuYW1lID0g JDE7CisJCX0KKwl8IGlkZW50aWZpZXIgJy4nIGlkZW50aWZpZXIKKwkJeworCQkJJCQgPSBwYWxs b2MwX29iamVjdChwZ3BhX2luZGV4X3RhcmdldCk7CisJCQkkJC0+aXR5cGUgPSBQR1BBX0lOREVY X05BTUU7CisJCQkkJC0+aW5kbmFtZXNwYWNlID0gJDE7CisJCQkkJC0+aW5kbmFtZSA9ICQzOwor CQl9CisJOworCitvcHRfcmlfb2NjdXJyZW5jZToKKwknIycgVE9LX0lOVEVHRVIKKwkJeworCQkJ aWYgKCQyIDw9IDApCisJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3As IHl5c2Nhbm5lciwKKwkJCQkJCQkgIm9ubHkgcG9zaXRpdmUgb2NjdXJyZW5jZSBudW1iZXJzIGFy ZSBwZXJtaXR0ZWQiKTsKKwkJCSQkID0gJDI7CisJCX0KKwl8CisJCXsKKwkJCS8qIFRoZSBkZWZh dWx0IG9jY3VycmVuY2UgbnVtYmVyIGlzIDEuICovCisJCQkkJCA9IDE7CisJCX0KKwk7CisKK2lk ZW50aWZpZXI6IFRPS19JREVOVAorCXwgVE9LX1RBR19KT0lOX09SREVSCisJfCBUT0tfVEFHX0lO REVYCisJfCBUT0tfVEFHX0JJVE1BUAorCXwgVE9LX1RBR19TSU1QTEUKKwl8IFRPS19UQUdfR0VO RVJJQworCTsKKworLyoKKyAqIFdoZW4gZ2VuZXJhdGluZyBhZHZpY2UsIHdlIGFsd2F5cyBzY2hl bWEtcXVhbGlmeSB0aGUgcGFydGl0aW9uIG5hbWUsIGJ1dAorICogd2hlbiBwYXJzaW5nIGFkdmlj ZSwgd2UgYWNjZXB0IGEgc3BlY2lmaWNhdGlvbiB0aGF0IGxhY2tzIG9uZS4KKyAqLworb3B0X3Bh cnRpdGlvbjoKKwknLycgVE9LX0lERU5UICcuJyBUT0tfSURFTlQKKwkJeyAkJCA9IGxpc3RfbWFr ZTIoJDIsICQ0KTsgfQorCXwgJy8nIFRPS19JREVOVAorCQl7ICQkID0gbGlzdF9tYWtlMSgkMik7 IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK29wdF9wbGFuX25hbWU6CisJJ0AnIFRPS19J REVOVAorCQl7ICQkID0gJDI7IH0KKwl8CisJCXsgJCQgPSBOVUxMOyB9CisJOworCitiaXRtYXBf dGFyZ2V0X2xpc3Q6IGJpdG1hcF90YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVyIGJpdG1h cF90YXJnZXRfaXRlbQorCQl7CisJCQkkMi0+aXRhcmdldCA9ICQzOworCQkJJCQgPSBsYXBwZW5k KCQxLCAkMik7CisJCX0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2JpdG1hcF90YXJnZXRf aXRlbTogaW5kZXhfbmFtZQorCQl7ICQkID0gJDE7IH0KKwl8IFRPS19PUiAnKCcgYml0bWFwX3N1 Ymxpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9pbmRleF90YXJnZXQp OworCQkJJCQtPml0eXBlID0gUEdQQV9JTkRFWF9PUjsKKwkJCSQkLT5jaGlsZHJlbiA9ICQzOwor CQl9CisJfCBUT0tfQU5EICcoJyBiaXRtYXBfc3VibGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxs b2MwX29iamVjdChwZ3BhX2luZGV4X3RhcmdldCk7CisJCQkkJC0+aXR5cGUgPSBQR1BBX0lOREVY X0FORDsKKwkJCSQkLT5jaGlsZHJlbiA9ICQzOworCQl9CisJOworCitiaXRtYXBfc3VibGlzdDog Yml0bWFwX3N1Ymxpc3QgYml0bWFwX3RhcmdldF9pdGVtCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAk Mik7IH0KKwl8IGJpdG1hcF90YXJnZXRfaXRlbQorCQl7ICQkID0gbGlzdF9tYWtlMSgkMSk7IH0K Kwk7CisKK2dlbmVyaWNfdGFyZ2V0X2xpc3Q6IGdlbmVyaWNfdGFyZ2V0X2xpc3QgcmVsYXRpb25f aWRlbnRpZmllcgorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfCBnZW5lcmljX3Rhcmdl dF9saXN0IGdlbmVyaWNfc3VibGlzdAorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfAor CQl7ICQkID0gTklMOyB9CisJOworCitnZW5lcmljX3N1Ymxpc3Q6ICcoJyBnZW5lcmljX3Rhcmdl dF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3Rhcmdl dCk7CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q7CisJCQkkJC0+Y2hp bGRyZW4gPSAkMjsKKwkJfQorCTsKKworaW5kZXhfdGFyZ2V0X2xpc3Q6CisJICBpbmRleF90YXJn ZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVyIGluZGV4X25hbWUKKwkJeworCQkJJDItPml0YXJn ZXQgPSAkMzsKKwkJCSQkID0gbGFwcGVuZCgkMSwgJDIpOworCQl9CisJfAorCQl7ICQkID0gTklM OyB9CisJOworCitqb2luX29yZGVyX3RhcmdldF9saXN0OiBqb2luX29yZGVyX3RhcmdldF9saXN0 IHJlbGF0aW9uX2lkZW50aWZpZXIKKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQorCXwgam9p bl9vcmRlcl90YXJnZXRfbGlzdCBqb2luX29yZGVyX3N1Ymxpc3QKKwkJeyAkJCA9IGxhcHBlbmQo JDEsICQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworam9pbl9vcmRlcl9zdWJsaXN0 OgorCScoJyBqb2luX29yZGVyX3RhcmdldF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBf b2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9P UkRFUkVEX0xJU1Q7CisJCQkkJC0+Y2hpbGRyZW4gPSAkMjsKKwkJfQorCXwgJ3snIHNpbXBsZV90 YXJnZXRfbGlzdCAnfScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90 YXJnZXQpOworCQkJJCQtPnR0eXBlID0gUEdQQV9UQVJHRVRfVU5PUkRFUkVEX0xJU1Q7CisJCQkk JC0+Y2hpbGRyZW4gPSAkMjsKKwkJfQorCTsKKworc2ltcGxlX3RhcmdldF9saXN0OiBzaW1wbGVf dGFyZ2V0X2xpc3QgcmVsYXRpb25faWRlbnRpZmllcgorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIp OyB9CisJfAorCQl7ICQkID0gTklMOyB9CisJOworCislJQorCisvKgorICogUGFyc2UgYW4gYWR2 aWNlX3N0cmluZyBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgbGlzdCBvZiBwZ3BhX2FkdmljZV9p dGVtCisgKiBvYmplY3RzLiBJZiBhIHBhcnNlIGVycm9yIG9jY3VycywgaW5zdGVhZCByZXR1cm4g TlVMTC4KKyAqCisgKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIE5VTEwsICplcnJvcl9wIHdpbGwg YmUgc2V0IHRvIHRoZSBlcnJvciBtZXNzYWdlOworICogb3RoZXJ3aXNlLCAqZXJyb3JfcCB3aWxs IGJlIHNldCB0byBOVUxMLgorICovCitMaXN0ICoKK3BncGFfcGFyc2UoY29uc3QgY2hhciAqYWR2 aWNlX3N0cmluZywgY2hhciAqKmVycm9yX3ApCit7CisJeXlzY2FuX3QJc2Nhbm5lcjsKKwlMaXN0 CSAgICpyZXN1bHQ7CisJY2hhcgkgICAqZXJyb3IgPSBOVUxMOworCisJcGdwYV9zY2FubmVyX2lu aXQoYWR2aWNlX3N0cmluZywgJnNjYW5uZXIpOworCXBncGFfeXlwYXJzZSgmcmVzdWx0LCAmZXJy b3IsIHNjYW5uZXIpOworCXBncGFfc2Nhbm5lcl9maW5pc2goc2Nhbm5lcik7CisKKwlpZiAoZXJy b3IgIT0gTlVMTCkKKwl7CisJCSplcnJvcl9wID0gZXJyb3I7CisJCXJldHVybiBOVUxMOworCX0K KworCSplcnJvcl9wID0gTlVMTDsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9wbGFubmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmJmMWVkYTNiOGY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3BsYW5uZXIuYwpAQCAtMCwwICsxLDE3MDYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIHBncGFfcGxhbm5lci5jCisgKgkgIHBsYW5uZXIgaG9va3MKKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisg KgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ19wbGFu X2FkdmljZS5oIgorI2luY2x1ZGUgInBncGFfY29sbGVjdG9yLmgiCisjaW5jbHVkZSAicGdwYV9p ZGVudGlmaWVyLmgiCisjaW5jbHVkZSAicGdwYV9vdXRwdXQuaCIKKyNpbmNsdWRlICJwZ3BhX3Bs YW5uZXIuaCIKKyNpbmNsdWRlICJwZ3BhX3Ryb3ZlLmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIu aCIKKworI2luY2x1ZGUgImNvbW1vbi9oYXNoZm5fdW5zdGFibGUuaCIKKyNpbmNsdWRlICJub2Rl cy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvZXh0ZW5kcGxhbi5oIgorI2luY2x1 ZGUgIm9wdGltaXplci9wYXRobm9kZS5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wYXRocy5oIgor I2luY2x1ZGUgIm9wdGltaXplci9wbGFuY2F0LmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5u ZXIuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5 c2NhY2hlLmgiCisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisKKy8qCisgKiBXaGVuIGFz c2VydGlvbnMgYXJlIGVuYWJsZWQsIHdlIHRyeSBnZW5lcmF0aW5nIHJlbGF0aW9uIGlkZW50aWZp ZXJzIGR1cmluZworICogcGxhbm5pbmcsIHNhdmluZyB0aGVtIGluIGEgaGFzaCB0YWJsZSwgYW5k IHRoZW4gY3Jvc3MtY2hlY2tpbmcgdGhlbSBhZ2FpbnN0CisgKiB0aGUgb25lcyBnZW5lcmF0ZWQg YWZ0ZXIgcGxhbm5pbmcgaXMgY29tcGxldGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfcmlf Y2hlY2tlcl9rZXkKK3sKKwljaGFyCSAgICpwbGFuX25hbWU7CisJSW5kZXgJCXJ0aTsKK30gcGdw YV9yaV9jaGVja2VyX2tleTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9yaV9jaGVja2VyCit7CisJ cGdwYV9yaV9jaGVja2VyX2tleSBrZXk7CisJdWludDMyCQlzdGF0dXM7CisJY29uc3QgY2hhciAq cmlkX3N0cmluZzsKK30gcGdwYV9yaV9jaGVja2VyOworCitzdGF0aWMgdWludDMyIHBncGFfcmlf Y2hlY2tlcl9oYXNoX2tleShwZ3BhX3JpX2NoZWNrZXJfa2V5IGtleSk7CisKK3N0YXRpYyBpbmxp bmUgYm9vbAorcGdwYV9yaV9jaGVja2VyX2NvbXBhcmVfa2V5KHBncGFfcmlfY2hlY2tlcl9rZXkg YSwgcGdwYV9yaV9jaGVja2VyX2tleSBiKQoreworCWlmIChhLnJ0aSAhPSBiLnJ0aSkKKwkJcmV0 dXJuIGZhbHNlOworCWlmIChhLnBsYW5fbmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gKGIucGxhbl9u YW1lID09IE5VTEwpOworCWlmIChiLnBsYW5fbmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7 CisJcmV0dXJuIHN0cmNtcChhLnBsYW5fbmFtZSwgYi5wbGFuX25hbWUpID09IDA7Cit9CisKKyNk ZWZpbmUgU0hfUFJFRklYCQkJcGdwYV9yaV9jaGVjaworI2RlZmluZSBTSF9FTEVNRU5UX1RZUEUJ CXBncGFfcmlfY2hlY2tlcgorI2RlZmluZSBTSF9LRVlfVFlQRQkJCXBncGFfcmlfY2hlY2tlcl9r ZXkKKyNkZWZpbmUgU0hfS0VZCQkJCWtleQorI2RlZmluZSBTSF9IQVNIX0tFWSh0Yiwga2V5KQlw Z3BhX3JpX2NoZWNrZXJfaGFzaF9rZXkoa2V5KQorI2RlZmluZQlTSF9FUVVBTCh0YiwgYSwgYikJ cGdwYV9yaV9jaGVja2VyX2NvbXBhcmVfa2V5KGEsIGIpCisjZGVmaW5lIFNIX1NDT1BFCQkJc3Rh dGljIGlubGluZQorI2RlZmluZSBTSF9ERUNMQVJFCisjZGVmaW5lIFNIX0RFRklORQorI2luY2x1 ZGUgImxpYi9zaW1wbGVoYXNoLmgiCisKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Bs YW5uZXJfc3RhdGUKK3sKKwlFeHBsYWluU3RhdGUgKmV4cGxhaW5fc3RhdGU7CisJcGdwYV90cm92 ZSAqdHJvdmU7CisJTWVtb3J5Q29udGV4dCB0cm92ZV9jeHQ7CisKKyNpZmRlZiBVU0VfQVNTRVJU X0NIRUNLSU5HCisJcGdwYV9yaV9jaGVja19oYXNoICpyaV9jaGVja19oYXNoOworI2VuZGlmCit9 IHBncGFfcGxhbm5lcl9zdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9qb2luX3N0YXRlCit7 CisJLyogTW9zdC1yZWNlbnRseS1jb25zaWRlcmVkIG91dGVyIHJlbC4gKi8KKwlSZWxPcHRJbmZv ICpvdXRlcnJlbDsKKworCS8qIE1vc3QtcmVjZW50bHktY29uc2lkZXJlZCBpbm5lciByZWwuICov CisJUmVsT3B0SW5mbyAqaW5uZXJyZWw7CisKKwkvKgorCSAqIEFycmF5IG9mIHJlbGF0aW9uIGlk ZW50aWZpZXJzIGZvciBhbGwgbWVtYmVycyBvZiB0aGlzIGpvaW5yZWwsIHdpdGgKKwkgKiBvdXRl cnJlbCBpZGVuaWZpZXJzIGJlZm9yZSBpbm5lcnJlbCBpZGVudGlmaWVycy4KKwkgKi8KKwlwZ3Bh X2lkZW50aWZpZXIgKnJpZHM7CisKKwkvKiBOdW1iZXIgb2Ygb3V0ZXIgcmVsIGlkZW50aWZpZXJz LiAqLworCWludAkJCW91dGVyX2NvdW50OworCisJLyogTnVtYmVyIG9mIGlubmVyIHJlbCBpZGVu dGlmaWVycy4gKi8KKwlpbnQJCQlpbm5lcl9jb3VudDsKKworCS8qCisJICogVHJvdmUgbG9va3Vw IHJlc3VsdHMuCisJICoKKwkgKiBqb2luX2VudHJpZXMgYW5kIHJlbF9lbnRyaWVzIGFyZSBhcnJh eXMgb2YgZW50cmllcywgYW5kIGpvaW5faW5kZXhlcworCSAqIGFuZCByZWxfaW5kZXhlcyBhcmUg dGhlIGludGVnZXIgb2Zmc2V0cyB3aXRoaW4gdGhvc2UgYXJyYXlzIG9mIGVudHJpZXMKKwkgKiBw b3RlbnRpYWxseSByZWxldmFudCB0byB1cy4gVGhlICJqb2luIiBmaWVsZHMgY29ycmVzcG9uZCB0 byBhIGxvb2t1cAorCSAqIHVzaW5nIFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4gYW5kIHRoZSAicmVs IiBmaWVsZHMgdG8gYSBsb29rdXAgdXNpbmcKKwkgKiBQR1BBX1RST1ZFX0xPT0tVUF9SRUwuCisJ ICovCisJcGdwYV90cm92ZV9lbnRyeSAqam9pbl9lbnRyaWVzOworCUJpdG1hcHNldCAgKmpvaW5f aW5kZXhlczsKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICpyZWxfZW50cmllczsKKwlCaXRtYXBzZXQgICpy ZWxfaW5kZXhlczsKK30gcGdwYV9qb2luX3N0YXRlOworCisvKiBTYXZlZCBob29rIHZhbHVlcyAq Lworc3RhdGljIGdldF9yZWxhdGlvbl9pbmZvX2hvb2tfdHlwZSBwcmV2X2dldF9yZWxhdGlvbl9p bmZvID0gTlVMTDsKK3N0YXRpYyBqb2luX3BhdGhfc2V0dXBfaG9va190eXBlIHByZXZfam9pbl9w YXRoX3NldHVwID0gTlVMTDsKK3N0YXRpYyBqb2lucmVsX3NldHVwX2hvb2tfdHlwZSBwcmV2X2pv aW5yZWxfc2V0dXAgPSBOVUxMOworc3RhdGljIHBsYW5uZXJfc2V0dXBfaG9va190eXBlIHByZXZf cGxhbm5lcl9zZXR1cCA9IE5VTEw7CitzdGF0aWMgcGxhbm5lcl9zaHV0ZG93bl9ob29rX3R5cGUg cHJldl9wbGFubmVyX3NodXRkb3duID0gTlVMTDsKKworLyogT3RoZXIgZ2xvYmFsIHZhcmlhYmVz ICovCitzdGF0aWMgaW50CXBsYW5uZXJfZXh0ZW5zaW9uX2lkID0gLTE7CisKKy8qIEZ1bmN0aW9u IHByb3RvdHlwZXMuICovCitzdGF0aWMgdm9pZCBwZ3BhX2dldF9yZWxhdGlvbl9pbmZvKFBsYW5u ZXJJbmZvICpyb290LAorCQkJCQkJCQkgICBPaWQgcmVsYXRpb25PYmplY3RJZCwKKwkJCQkJCQkJ ICAgYm9vbCBpbmhwYXJlbnQsCisJCQkJCQkJCSAgIFJlbE9wdEluZm8gKnJlbCk7CitzdGF0aWMg dm9pZCBwZ3BhX2pvaW5yZWxfc2V0dXAoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJICAgUmVs T3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkgICBSZWxPcHRJbmZvICpvdXRlcnJlbCwKKwkJCQkJ CQkgICBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkJCQkgICBTcGVjaWFsSm9pbkluZm8gKnNq aW5mbywKKwkJCQkJCQkgICBMaXN0ICpyZXN0cmljdGxpc3QpOworc3RhdGljIHZvaWQgcGdwYV9q b2luX3BhdGhfc2V0dXAoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCSBSZWxPcHRJbmZvICpq b2lucmVsLAorCQkJCQkJCQkgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsCisJCQkJCQkJCSBSZWxPcHRJ bmZvICppbm5lcnJlbCwKKwkJCQkJCQkJIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJCQkgSm9p blBhdGhFeHRyYURhdGEgKmV4dHJhKTsKK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9zZXR1cChQ bGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJCQkJICAgY29uc3QgY2hhciAq cXVlcnlfc3RyaW5nLAorCQkJCQkJCSAgIGRvdWJsZSAqdHVwbGVfZnJhY3Rpb24sCisJCQkJCQkJ ICAgRXhwbGFpblN0YXRlICplcyk7CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJfc2h1dGRvd24o UGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJCQkJCQkgIGNvbnN0IGNoYXIg KnF1ZXJ5X3N0cmluZywgUGxhbm5lZFN0bXQgKnBzdG10KTsKK3N0YXRpYyB2b2lkIHBncGFfcGxh bm5lcl9hcHBseV9qb2lucmVsX2FkdmljZSh1aW50NjQgKnBnc19tYXNrX3AsCisJCQkJCQkJCQkJ CSAgY2hhciAqcGxhbl9uYW1lLAorCQkJCQkJCQkJCQkgIHBncGFfam9pbl9zdGF0ZSAqcGpzKTsK K3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9hcHBseV9qb2luX3BhdGhfYWR2aWNlKEpvaW5UeXBl IGpvaW50eXBlLAorCQkJCQkJCQkJCQkJdWludDY0ICpwZ3NfbWFza19wLAorCQkJCQkJCQkJCQkJ Y2hhciAqcGxhbl9uYW1lLAorCQkJCQkJCQkJCQkJcGdwYV9qb2luX3N0YXRlICpwanMpOworc3Rh dGljIHZvaWQgcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKFJlbE9wdEluZm8gKnJlbCwK KwkJCQkJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJpZXMsCisJCQkJCQkJCQkJ ICAgQml0bWFwc2V0ICpzY2FuX2luZGV4ZXMsCisJCQkJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRy eSAqcmVsX2VudHJpZXMsCisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxfaW5kZXhlcyk7Citz dGF0aWMgdWludDY0IHBncGFfam9pbl9zdHJhdGVneV9tYXNrX2Zyb21fYWR2aWNlX3RhZyhwZ3Bh X2FkdmljZV90YWdfdHlwZSB0YWcpOworc3RhdGljIGJvb2wgcGdwYV9qb2luX29yZGVyX3Blcm1p dHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkgcGdw YV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCSBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSk7 CitzdGF0aWMgYm9vbCBwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291 bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywK KwkJCQkJCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCQkJCSAgYm9vbCAq cmVzdHJpY3RfbWV0aG9kKTsKK3N0YXRpYyBib29sIHBncGFfb3BhcXVlX2pvaW5fcGVybWl0c19q b2luKGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCQkJCSAgcGdwYV9p ZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJ CQkJCQkJCQkJICBib29sICpyZXN0cmljdF9tZXRob2QpOworCitzdGF0aWMgTGlzdCAqcGdwYV9w bGFubmVyX2FwcGVuZF9mZWVkYmFjayhMaXN0ICpsaXN0LCBwZ3BhX3Ryb3ZlICp0cm92ZSwKKwkJ CQkJCQkJCQkgIHBncGFfdHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkJCQkgIHBncGFf aWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJICBwZ3BhX3BsYW5fd2Fsa2Vy X2NvbnRleHQgKndhbGtlcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ3BhX3JpX2NoZWNrZXJf c2F2ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwcywKKwkJCQkJCQkJCQlQbGFubmVySW5mbyAqcm9v dCwKKwkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwpOworc3RhdGljIHZvaWQgcGdwYV9yaV9jaGVj a2VyX3ZhbGlkYXRlKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLAorCQkJCQkJCQkJIFBsYW5uZWRT dG10ICpwc3RtdCk7CisKKy8qCisgKiBJbnN0YWxsIHBsYW5uZXItcmVsYXRlZCBob29rcy4KKyAq Lwordm9pZAorcGdwYV9wbGFubmVyX2luc3RhbGxfaG9va3Modm9pZCkKK3sKKwlwbGFubmVyX2V4 dGVuc2lvbl9pZCA9IEdldFBsYW5uZXJFeHRlbnNpb25JZCgicGdfcGxhbl9hZHZpY2UiKTsKKwlw cmV2X2dldF9yZWxhdGlvbl9pbmZvID0gZ2V0X3JlbGF0aW9uX2luZm9faG9vazsKKwlnZXRfcmVs YXRpb25faW5mb19ob29rID0gcGdwYV9nZXRfcmVsYXRpb25faW5mbzsKKwlwcmV2X2pvaW5yZWxf c2V0dXAgPSBqb2lucmVsX3NldHVwX2hvb2s7CisJam9pbnJlbF9zZXR1cF9ob29rID0gcGdwYV9q b2lucmVsX3NldHVwOworCXByZXZfam9pbl9wYXRoX3NldHVwID0gam9pbl9wYXRoX3NldHVwX2hv b2s7CisJam9pbl9wYXRoX3NldHVwX2hvb2sgPSBwZ3BhX2pvaW5fcGF0aF9zZXR1cDsKKwlwcmV2 X3BsYW5uZXJfc2V0dXAgPSBwbGFubmVyX3NldHVwX2hvb2s7CisJcGxhbm5lcl9zZXR1cF9ob29r ID0gcGdwYV9wbGFubmVyX3NldHVwOworCXByZXZfcGxhbm5lcl9zaHV0ZG93biA9IHBsYW5uZXJf c2h1dGRvd25faG9vazsKKwlwbGFubmVyX3NodXRkb3duX2hvb2sgPSBwZ3BhX3BsYW5uZXJfc2h1 dGRvd247Cit9CisKKy8qCisgKiBIb29rIGZ1bmN0aW9uIGZvciBnZXRfcmVsYXRpb25faW5mbygp LgorICoKKyAqIFdlIGNhbiBhcHBseSBzY2FuIGFkdmljZSBhdCB0aGlzIG9waW50LCBhbmQgd2Ug YWxzbyB1c2VlIHRoaXMgYXMgYW4KKyAqIG9wcG9ydHVuaXR5IHRvIGRvIHJhbmdlLXRhYmxlIGlk ZW50aWZpZXIgY3Jvc3MtY2hlY2tpbmcgaW4gYXNzZXJ0LWVuYWJsZWQKKyAqIGJ1aWxkcy4KKyAq CisgKiBYWFg6IFdlIGN1cnJlbnRseSBlbWl0IHVzZWxlc3MgYWR2aWNlIGxpa2UgTk9fR0FUSEVS KCIqUkVTVUxUKiIpIGZvciB0cml2aWFsCisgKiBxdWVyaWVzLiBUaGUgYWR2aWNlIGlzIHVzZWxl c3MgYmVjYXVzZSBnZXRfcmVsYXRpb25faW5mbyBpc24ndCBjYWxsZWQgZm9yCisgKiBub24tcmVs YXRpb24gUlRFcy4gV2Ugc2hvdWxkIGVpdGhlciBzdXBwcmVzcyB0aGUgYWR2aWNlIGluIHN1Y2gg Y2FzZXMsIG9yCisgKiBhZGQgYSBob29rIHRoYXQgY2FuIGFwcGx5IGl0LgorICovCitzdGF0aWMg dm9pZAorcGdwYV9nZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0 aW9uT2JqZWN0SWQsCisJCQkJCSAgIGJvb2wgaW5ocGFyZW50LCBSZWxPcHRJbmZvICpyZWwpCit7 CisJcGdwYV9wbGFubmVyX3N0YXRlICpwcHM7CisKKwkvKiBGZXRjaCBvdXIgcHJpdmF0ZSBzdGF0 ZSwgc2V0IHVwIGJ5IHBncGFfcGxhbm5lcl9zZXR1cCgpLiAqLworCXBwcyA9IEdldFBsYW5uZXJH bG9iYWxFeHRlbnNpb25TdGF0ZShyb290LT5nbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisK KwkvKiBTYXZlIGRldGFpbHMgbmVlZGVkIGZvciByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGNyb3Nz LWNoZWNraW5nLiAqLworCWlmIChwcHMgIT0gTlVMTCkKKwkJcGdwYV9yaV9jaGVja2VyX3NhdmUo cHBzLCByb290LCByZWwpOworCisJLyogSWYgcXVlcnkgYWR2aWNlIHdhcyBwcm92aWRlZCwgc2Vh cmNoIGZvciByZWxldmFudCBlbnRyaWVzLiAqLworCWlmIChwcHMgIT0gTlVMTCAmJiBwcHMtPnRy b3ZlICE9IE5VTEwpCisJeworCQlwZ3BhX2lkZW50aWZpZXIgcmlkOworCQlwZ3BhX3Ryb3ZlX3Jl c3VsdCB0cmVzdWx0X3NjYW47CisJCXBncGFfdHJvdmVfcmVzdWx0IHRyZXN1bHRfcmVsOworCisJ CS8qIFNlYXJjaCBmb3Igc2NhbiBhZHZpY2UgYW5kIGdlbmVyYWwgcmVsIGFkdmljZS4gKi8KKwkJ cGdwYV9jb21wdXRlX2lkZW50aWZpZXJfYnlfcnRpKHJvb3QsIHJlbC0+cmVsaWQsICZyaWQpOwor CQlwZ3BhX3Ryb3ZlX2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOLCAx LCAmcmlkLAorCQkJCQkJICAmdHJlc3VsdF9zY2FuKTsKKwkJcGdwYV90cm92ZV9sb29rdXAocHBz LT50cm92ZSwgUEdQQV9UUk9WRV9MT09LVVBfUkVMLCAxLCAmcmlkLAorCQkJCQkJICAmdHJlc3Vs dF9yZWwpOworCisJCS8qIElmIHJlbGV2YW50IGVudHJpZXMgd2VyZSBmb3VuZCwgYXBwbHkgdGhl bS4gKi8KKwkJaWYgKHRyZXN1bHRfc2Nhbi5pbmRleGVzICE9IE5VTEwgfHwgdHJlc3VsdF9yZWwu aW5kZXhlcyAhPSBOVUxMKQorCQkJcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKHJlbCwK KwkJCQkJCQkJCQkgICB0cmVzdWx0X3NjYW4uZW50cmllcywKKwkJCQkJCQkJCQkgICB0cmVzdWx0 X3NjYW4uaW5kZXhlcywKKwkJCQkJCQkJCQkgICB0cmVzdWx0X3JlbC5lbnRyaWVzLAorCQkJCQkJ CQkJCSAgIHRyZXN1bHRfcmVsLmluZGV4ZXMpOworCX0KKworCS8qIFBhc3MgY2FsbCB0byBwcmV2 aW91cyBob29rLiAqLworCWlmIChwcmV2X2dldF9yZWxhdGlvbl9pbmZvKQorCQkoKnByZXZfZ2V0 X3JlbGF0aW9uX2luZm8pIChyb290LCByZWxhdGlvbk9iamVjdElkLCBpbmhwYXJlbnQsIHJlbCk7 Cit9CisKKy8qCisgKiBTZWFyY2ggZm9yIGFkdmljZSBwZXJ0YWluaW5nIHRvIGEgcHJvcG9zZWQg am9pbi4KKyAqLworc3RhdGljIHBncGFfam9pbl9zdGF0ZSAqCitwZ3BhX2dldF9qb2luX3N0YXRl KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQlSZWxPcHRJbmZv ICpvdXRlcnJlbCwgUmVsT3B0SW5mbyAqaW5uZXJyZWwpCit7CisJcGdwYV9wbGFubmVyX3N0YXRl ICpwcHM7CisJcGdwYV9qb2luX3N0YXRlICpwanM7CisJYm9vbAkJbmV3X3BqcyA9IGZhbHNlOwor CisJLyogRmV0Y2ggb3VyIHByaXZhdGUgc3RhdGUsIHNldCB1cCBieSBwZ3BhX3BsYW5uZXJfc2V0 dXAoKS4gKi8KKwlwcHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0ZW5zaW9uU3RhdGUocm9vdC0+Z2xv YiwgcGxhbm5lcl9leHRlbnNpb25faWQpOworCWlmIChwcHMgPT0gTlVMTCB8fCBwcHMtPnRyb3Zl ID09IE5VTEwpCisJeworCQkvKiBObyBhZHZpY2UgYXBwbGllcyB0byB0aGlzIHF1ZXJ5LCBoZW5j ZSBub25lIHRvIHRoaXMgam9pbnJlbC4gKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkg KiBTZWUgd2hldGhlciB3ZSd2ZSBwcmV2aW91c2x5IGFzc29jaWF0ZWQgYSBwZ3BhX2pvaW5fc3Rh dGUgd2l0aCB0aGlzCisJICogam9pbnJlbC4gSWYgd2UgaGF2ZSBub3QsIHdlIG5lZWQgdG8gdHJ5 IHRvIGNvbnN0cnVjdCBvbmUuIElmIHdlIGhhdmUsCisJICogdGhlbiB0aGVyZSBhcmUgdHdvIGNh c2VzOiAoYSkgaWYgaW5uZXJyZWwgYW5kIG91dGVycmVsIGFyZSB1bmNoYW5nZWQsCisJICogd2Ug Y2FuIHNpbXBseSB1c2UgaXQsIGFuZCAoYikgaWYgdGhleSBoYXZlIGNoYW5nZWQsIHdlIG5lZWQg dG8gcmVqaWdnZXIKKwkgKiB0aGUgYXJyYXkgb2YgaWRlbnRpZmllcnMgYnV0IGNhbiBzdGlsbCBz a2lwIHRoZSB0cm92ZSBsb29rdXAuCisJICovCisJcGpzID0gR2V0UmVsT3B0SW5mb0V4dGVuc2lv blN0YXRlKGpvaW5yZWwsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwlpZiAocGpzICE9IE5VTEwp CisJeworCQlpZiAocGpzLT5qb2luX2luZGV4ZXMgPT0gTlVMTCAmJiBwanMtPnJlbF9pbmRleGVz ID09IE5VTEwpCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSdzIG5vIHBvdGVudGlhbGx5IHJl bGV2YW50IGFkdmljZSwgdGhlbiB0aGUgcHJlc2VuY2Ugb2YKKwkJCSAqIHRoaXMgcGdwYV9qb2lu X3N0YXRlIGFjdHMgbGlrZSBhIG5lZ2F0aXZlIGNhY2hlIGVudHJ5OiBpdCB0ZWxscworCQkJICog dXMgbm90IHRvIGJvdGhlciBzZWFyY2hpbmcgdGhlIHRyb3ZlIGZvciBhZHZpY2UsIGJlY2F1c2Ug d2UKKwkJCSAqIHdpbGwgbm90IGZpbmQgYW55LgorCQkJICovCisJCQlyZXR1cm4gTlVMTDsKKwkJ fQorCisJCWlmIChwanMtPm91dGVycmVsID09IG91dGVycmVsICYmIHBqcy0+aW5uZXJyZWwgPT0g aW5uZXJyZWwpCisJCXsKKwkJCS8qIE5vIHVwZGF0ZXMgcmVxdWlyZWQsIHNvIGp1c3QgcmV0dXJu LiAqLworCQkJLyogWFhYLiBEb2VzIHRoaXMgbmVlZCB0byBkbyBzb21ldGhpbmcgZGlmZmVyZW50 IHVuZGVyIEdFUU8/ICovCisJCQlyZXR1cm4gcGpzOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB0 aGVyZSdzIG5vIHBncGFfam9pbl9zdGF0ZSB5ZXQsIHdlIG5lZWQgdG8gYWxsb2NhdGUgb25lLiBU cm92ZSBrZXlzCisJICogd2lsbCBub3QgZ2V0IGJ1aWx0IGZvciBSVEVfSk9JTiBSVEVzLCBzbyB0 aGUgYXJyYXkgbWF5IGVuZCB1cCBiZWluZworCSAqIGxhcmdlciB0aGFuIG5lZWRlZC4gSXQncyBu b3Qgd29ydGggdHJ5aW5nIHRvIGNvbXB1dGUgYSBwZXJmZWN0bHkKKwkgKiBhY2N1cmF0ZSBjb3Vu dCBoZXJlLgorCSAqLworCWlmIChwanMgPT0gTlVMTCkKKwl7CisJCWludAkJCXBlc3NpbWlzdGlj X2NvdW50ID0gYm1zX251bV9tZW1iZXJzKGpvaW5yZWwtPnJlbGlkcyk7CisKKwkJcGpzID0gcGFs bG9jMF9vYmplY3QocGdwYV9qb2luX3N0YXRlKTsKKwkJcGpzLT5yaWRzID0gcGFsbG9jX2FycmF5 KHBncGFfaWRlbnRpZmllciwgcGVzc2ltaXN0aWNfY291bnQpOworCQluZXdfcGpzID0gdHJ1ZTsK Kwl9CisKKwkvKgorCSAqIEVpdGhlciB3ZSBqdXN0IGFsbG9jYXRlZCBhIG5ldyBwZ3BhX2pvaW5f c3RhdGUsIG9yIHRoZSBleGlzdGluZyBvbmUKKwkgKiBuZWVkcyByZWNvbmZpZ3VyaW5nIGZvciBh IG5ldyBpbm5lcnJlbCBhbmQgb3V0ZXJyZWwuIFRoZSByZXF1aXJlZCBhcnJheQorCSAqIHNpemUg Y2FuJ3QgY2hhbmdlLCBzbyB3ZSBjYW4gb3ZlcndyaXRlIHRoZSBleGlzdGluZyBvbmUuCisJICov CisJcGpzLT5vdXRlcnJlbCA9IG91dGVycmVsOworCXBqcy0+aW5uZXJyZWwgPSBpbm5lcnJlbDsK KwlwanMtPm91dGVyX2NvdW50ID0KKwkJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJzX2J5X3JlbGlk cyhyb290LCBvdXRlcnJlbC0+cmVsaWRzLCBwanMtPnJpZHMpOworCXBqcy0+aW5uZXJfY291bnQg PQorCQlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKHJvb3QsIGlubmVycmVsLT5y ZWxpZHMsCisJCQkJCQkJCQkJICAgcGpzLT5yaWRzICsgcGpzLT5vdXRlcl9jb3VudCk7CisKKwkv KgorCSAqIElmIHdlIGFsbG9jYXRlZCBhIG5ldyBwZ3BhX2pvaW5fc3RhdGUsIHNlYXJjaCBvdXIg dHJvdmUgb2YgYWR2aWNlIGZvcgorCSAqIHJlbGV2YW50IGVudHJpZXMuIFRoZSB0cm92ZSBsb29r dXAgd2lsbCByZXR1cm4gdGhlIHNhbWUgcmVzdWx0cyBmb3IKKwkgKiBldmVyeSBvdXRlcnJlbC9p bm5lcnJlbCBjb21iaW5hdGlvbiwgc28gd2UgZG9uJ3QgbmVlZCB0byByZXBlYXQgdGhhdAorCSAq IHdvcmsgZXZlcnkgdGltZS4KKwkgKi8KKwlpZiAobmV3X3BqcykKKwl7CisJCXBncGFfdHJvdmVf cmVzdWx0IHRyZXN1bHQ7CisKKwkJLyogRmluZCBqb2luIGVudHJpZXMuICovCisJCXBncGFfdHJv dmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4sCisJCQkJCQkgIHBq cy0+b3V0ZXJfY291bnQgKyBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJICBwanMtPnJpZHMsICZ0 cmVzdWx0KTsKKwkJcGpzLT5qb2luX2VudHJpZXMgPSB0cmVzdWx0LmVudHJpZXM7CisJCXBqcy0+ am9pbl9pbmRleGVzID0gdHJlc3VsdC5pbmRleGVzOworCisJCS8qIEZpbmQgcmVsIGVudHJpZXMu ICovCisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX1JF TCwKKwkJCQkJCSAgcGpzLT5vdXRlcl9jb3VudCArIHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkg IHBqcy0+cmlkcywgJnRyZXN1bHQpOworCQlwanMtPnJlbF9lbnRyaWVzID0gdHJlc3VsdC5lbnRy aWVzOworCQlwanMtPnJlbF9pbmRleGVzID0gdHJlc3VsdC5pbmRleGVzOworCisJCS8qIE5vdyB0 aGF0IHRoZSBuZXcgcGdwYV9qb2luX3N0YXRlIGlzIGZ1bGx5IHZhbGlkLCBzYXZlIGEgcG9pbnRl ci4gKi8KKwkJU2V0UmVsT3B0SW5mb0V4dGVuc2lvblN0YXRlKGpvaW5yZWwsIHBsYW5uZXJfZXh0 ZW5zaW9uX2lkLCBwanMpOworCisJCS8qCisJCSAqIElmIHRoZXJlIHdhcyBubyByZWxldmFudCBh ZHZpY2UgZm91bmQsIGp1c3QgcmV0dXJuIE5VTEwuIFRoaXMKKwkJICogcGdwYV9qb2luX3N0YXRl IHdpbGwgc3RpY2sgYXJvdW5kIGFzIGEgc29ydCBvZiBuZWdhdGl2ZSBjYWNoZQorCQkgKiBlbnRy eSwgc28gdGhhdCBmdXR1cmUgY2FsbHMgZm9yIHRoaXMgc2FtZSBqb2lucmVsIHF1aWNrbHkgcmV0 dXJuCisJCSAqIE5VTEwuCisJCSAqLworCQlpZiAocGpzLT5qb2luX2luZGV4ZXMgPT0gTlVMTCAm JiBwanMtPnJlbF9pbmRleGVzID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1 cm4gcGpzOworfQorCisvKgorICogRW5mb3JjZSBhbnkgcHJvdmlkZWQgYWR2aWNlIHRoYXQgaXMg cmVsZXZhbnQgdG8gYW55IG1ldGhvZCBvZiBpbXBsZW1lbnRpbmcKKyAqIHRoaXMgam9pbi4KKyAq CisgKiBBbHRob3VnaCB3ZSdyZSBwYXNzZWQgdGhlIG91dGVycmVsIGFuZCBpbm5lcnJlbCBoZXJl LCB0aG9zZSBhcmUganVzdAorICogd2hhdGV2ZXIgdmFsdWVzIGhhcHBlbmVkIHRvIHByb21wdCB0 aGUgY3JlYXRpb24gb2YgdGhpcyBqb2lucmVsOyB0aGV5CisgKiBzaG91bGRuJ3QgcmVhbGx5IGlu Zmx1ZW5jZSBvdXIgY2hvaWNlIG9mIHdoYXQgYWR2aWNlIHRvIGFwcGx5LgorICovCitzdGF0aWMg dm9pZAorcGdwYV9qb2lucmVsX3NldHVwKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpq b2lucmVsLAorCQkJCSAgIFJlbE9wdEluZm8gKm91dGVycmVsLCBSZWxPcHRJbmZvICppbm5lcnJl bCwKKwkJCQkgICBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywgTGlzdCAqcmVzdHJpY3RsaXN0KQor eworCXBncGFfam9pbl9zdGF0ZSAqcGpzOworCisJQXNzZXJ0KGJtc19tZW1iZXJzaGlwKGpvaW5y ZWwtPnJlbGlkcykgPT0gQk1TX01VTFRJUExFKTsKKworCS8qIEdldCBvdXIgcHJpdmF0ZSBzdGF0 ZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBqb2luLiAqLworCXBqcyA9IHBncGFfZ2V0X2pvaW5fc3Rh dGUocm9vdCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVsKTsKKworCS8qIElmIHRoZXJlIGlz IHJlbGV2YW50IGFkdmljZSwgY2FsbCBhIGhlbHBlciBmdW5jdGlvbiB0byBhcHBseSBpdC4gKi8K KwlpZiAocGpzICE9IE5VTEwpCisJCXBncGFfcGxhbm5lcl9hcHBseV9qb2lucmVsX2FkdmljZSgm am9pbnJlbC0+cGdzX21hc2ssCisJCQkJCQkJCQkJICByb290LT5wbGFuX25hbWUsCisJCQkJCQkJ CQkJICBwanMpOworCisJLyogUGFzcyBjYWxsIHRvIHByZXZpb3VzIGhvb2suICovCisJaWYgKHBy ZXZfam9pbnJlbF9zZXR1cCkKKwkJKCpwcmV2X2pvaW5yZWxfc2V0dXApIChyb290LCBqb2lucmVs LCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJICAgc2ppbmZvLCByZXN0cmljdGxpc3QpOwor fQorCisvKgorICogRW5mb3JjZSBhbnkgcHJvdmlkZWQgYWR2aWNlIHRoYXQgaXMgcmVsZXZhbnQg dG8gdGhpcyBwYXJ0aWN1bGFyIG1ldGhvZCBvZgorICogaW1wbGVtZW50aW5nIHRoaXMgcGFydGlj dWxhciBqb2luLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9qb2luX3BhdGhfc2V0dXAoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCSBSZWxPcHRJbmZvICpvdXRl cnJlbCwgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCSBKb2luVHlwZSBqb2ludHlwZSwgSm9p blBhdGhFeHRyYURhdGEgKmV4dHJhKQoreworCXBncGFfam9pbl9zdGF0ZSAqcGpzOworCisJQXNz ZXJ0KGJtc19tZW1iZXJzaGlwKGpvaW5yZWwtPnJlbGlkcykgPT0gQk1TX01VTFRJUExFKTsKKwor CS8qIEdldCBvdXIgcHJpdmF0ZSBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBqb2luLiAqLwor CXBqcyA9IHBncGFfZ2V0X2pvaW5fc3RhdGUocm9vdCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVy cmVsKTsKKworCS8qIElmIHRoZXJlIGlzIHJlbGV2YW50IGFkdmljZSwgY2FsbCBhIGhlbHBlciBm dW5jdGlvbiB0byBhcHBseSBpdC4gKi8KKwlpZiAocGpzICE9IE5VTEwpCisJCXBncGFfcGxhbm5l cl9hcHBseV9qb2luX3BhdGhfYWR2aWNlKGpvaW50eXBlLAorCQkJCQkJCQkJCQkmZXh0cmEtPnBn c19tYXNrLAorCQkJCQkJCQkJCQlyb290LT5wbGFuX25hbWUsCisJCQkJCQkJCQkJCXBqcyk7CisK KwkvKiBQYXNzIGNhbGwgdG8gcHJldmlvdXMgaG9vay4gKi8KKwlpZiAocHJldl9qb2luX3BhdGhf c2V0dXApCisJCSgqcHJldl9qb2luX3BhdGhfc2V0dXApIChyb290LCBqb2lucmVsLCBvdXRlcnJl bCwgaW5uZXJyZWwsCisJCQkJCQkJCSBqb2ludHlwZSwgZXh0cmEpOworfQorCisvKgorICogUHJl cGFyZSBhZHZpY2UgZm9yIHVzZSBieSBhIHF1ZXJ5LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9w bGFubmVyX3NldHVwKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hh ciAqcXVlcnlfc3RyaW5nLAorCQkJCSAgIGRvdWJsZSAqdHVwbGVfZnJhY3Rpb24sIEV4cGxhaW5T dGF0ZSAqZXMpCit7CisJcGdwYV90cm92ZSAqdHJvdmUgPSBOVUxMOworCXBncGFfcGxhbm5lcl9z dGF0ZSAqcHBzOworCWJvb2wJCW5lZWRzX3BwcyA9IGZhbHNlOworCisJLyoKKwkgKiBJZiBhbnkg YWR2aWNlIHdhcyBwcm92aWRlZCwgYnVpbGQgYSB0cm92ZSBvZiBhZHZpY2UgZm9yIHVzZSBkdXJp bmcKKwkgKiBwbGFubmluZy4KKwkgKi8KKwlpZiAocGdfcGxhbl9hZHZpY2VfYWR2aWNlICE9IE5V TEwgJiYgcGdfcGxhbl9hZHZpY2VfYWR2aWNlWzBdICE9ICdcMCcpCisJeworCQlMaXN0CSAgICph ZHZpY2VfaXRlbXM7CisJCWNoYXIJICAgKmVycm9yOworCisJCS8qCisJCSAqIFBhcnNpbmcgc2hv dWxkbid0IGZhaWwgaGVyZSwgYmVjYXVzZSB3ZSBtdXN0IGhhdmUgcHJldmlvdXNseSBwYXJzZWQK KwkJICogc3VjY2Vzc2Z1bGx5IGluIHBnX3BsYW5fYWR2aWNlX2FkdmljZV9jaGVja19ob29rLCBi dXQgaWYgaXQgZG9lcywKKwkJICogZW1pdCBhIHdhcm5pbmcuCisJCSAqLworCQlhZHZpY2VfaXRl bXMgPSBwZ3BhX3BhcnNlKHBnX3BsYW5fYWR2aWNlX2FkdmljZSwgJmVycm9yKTsKKwkJaWYgKGVy cm9yKQorCQkJZWxvZyhXQVJOSU5HLCAiY291bGQgbm90IHBhcnNlIGFkdmljZTogJXMiLCBlcnJv cik7CisKKwkJLyoKKwkJICogSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBhZHZpY2Ugc3RyaW5nIHdh cyBub24tZW1wdHkgYnV0IGNvbnRhaW5lZCBubworCQkgKiBhY3R1YWwgYWR2aWNlLCBlLmcuIGl0 IHdhcyBhbGwgd2hpdGVzcGFjZS4KKwkJICovCisJCWlmIChhZHZpY2VfaXRlbXMgIT0gTklMKQor CQl7CisJCQl0cm92ZSA9IHBncGFfYnVpbGRfdHJvdmUoYWR2aWNlX2l0ZW1zKTsKKwkJCW5lZWRz X3BwcyA9IHRydWU7CisJCX0KKwl9CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisKKwkv KgorCSAqIElmIGFzc2VydHMgYXJlIGVuYWJsZWQsIGFsd2F5cyBidWlsZCBhIHByaXZhdGUgc3Rh dGUgb2JqZWN0IGZvcgorCSAqIGNyb3NzLWNoZWNrcy4KKwkgKi8KKwluZWVkc19wcHMgPSB0cnVl OworI2VuZGlmCisKKwkvKiBJbml0aWFsaXplIGFuZCBzdG9yZSBwcml2YXRlIHN0YXRlLCBpZiBy ZXF1aXJlZC4gKi8KKwlpZiAobmVlZHNfcHBzKQorCXsKKwkJcHBzID0gcGFsbG9jMF9vYmplY3Qo cGdwYV9wbGFubmVyX3N0YXRlKTsKKwkJcHBzLT5leHBsYWluX3N0YXRlID0gZXM7CisJCXBwcy0+ dHJvdmUgPSB0cm92ZTsKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJCXBwcy0+cmlfY2hl Y2tfaGFzaCA9CisJCQlwZ3BhX3JpX2NoZWNrX2NyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwg MTAyNCwgTlVMTCk7CisjZW5kaWYKKwkJU2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKGds b2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkLCBwcHMpOworCX0KK30KKworLyoKKyAqIENhcnJ5IG91 dCB3aGF0ZXZlciB3b3JrIHdlIHdhbnQgdG8gZG8gYWZ0ZXIgcGxhbm5pbmcgaXMgY29tcGxldGUu CisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfc2h1dGRvd24oUGxhbm5lckdsb2JhbCAq Z2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgUGxh bm5lZFN0bXQgKnBzdG10KQoreworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCXBncGFfdHJv dmUgKnRyb3ZlID0gTlVMTDsKKwlFeHBsYWluU3RhdGUgKmVzID0gTlVMTDsKKwlwZ3BhX3BsYW5f d2Fsa2VyX2NvbnRleHQgd2Fsa2VyID0gezB9OwkvKiBwbGFjYXRlIGNvbXBpbGVyICovCisJYm9v bAkJZG9fYWR2aWNlX2ZlZWRiYWNrOworCWJvb2wJCWRvX2NvbGxlY3RfYWR2aWNlOworCUxpc3QJ ICAgKnBncGFfaXRlbXMgPSBOSUw7CisJcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycyA9 IE5VTEw7CisKKwkvKiBGZXRjaCBvdXIgcHJpdmF0ZSBzdGF0ZSwgc2V0IHVwIGJ5IHBncGFfcGxh bm5lcl9zZXR1cCgpLiAqLworCXBwcyA9IEdldFBsYW5uZXJHbG9iYWxFeHRlbnNpb25TdGF0ZShn bG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisJaWYgKHBwcyAhPSBOVUxMKQorCXsKKwkJdHJv dmUgPSBwcHMtPnRyb3ZlOworCQllcyA9IHBwcy0+ZXhwbGFpbl9zdGF0ZTsKKwl9CisKKwkvKiBJ ZiBhdCBsZWFzdCBvbmUgY29sbGVjdG9yIGlzIGVuYWJsZWQsIGdlbmVyYXRlIGFkdmljZS4gKi8K Kwlkb19jb2xsZWN0X2FkdmljZSA9IChwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xp bWl0ID4gMCB8fAorCQkJCQkJIHBnX3BsYW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0 ID4gMCk7CisKKwkvKiBJZiB3ZSBhcHBsaWVkIGFkdmljZSwgZ2VuZXJhdGUgZmVlZGJhY2suICov CisJZG9fYWR2aWNlX2ZlZWRiYWNrID0gKHRyb3ZlICE9IE5VTEwgJiYgZXMgIT0gTlVMTCk7CisK KwkvKiBJZiBlaXRoZXIgb2YgdGhlIGFib3ZlIGFwcGx5LCBhbmFseXplIHRoZSByZXN1bHRpbmcg UGxhbm5lZFN0bXQuICovCisJaWYgKGRvX2NvbGxlY3RfYWR2aWNlIHx8IGRvX2FkdmljZV9mZWVk YmFjaykKKwl7CisJCXBncGFfcGxhbl93YWxrZXIoJndhbGtlciwgcHN0bXQpOworCQlydF9pZGVu dGlmaWVycyA9IHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQocHN0bXQp OworCX0KKworCS8qCisJICogSWYgYWR2aWNlIGNvbGxlY3Rpb24gaXMgZW5hYmxlZCwgcHV0IHRo ZSBhZHZpY2UgaW4gc3RyaW5nIGZvcm0gYW5kIHNlbmQKKwkgKiBpdCB0byB0aGUgY29sbGVjdG9y LgorCSAqLworCWlmIChkb19jb2xsZWN0X2FkdmljZSkKKwl7CisJCWNoYXIJICAgKmFkdmljZV9z dHJpbmc7CisJCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCQkvKiBHZW5lcmF0ZSBhIHRleHR1YWwg YWR2aWNlIHN0cmluZy4gKi8KKwkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJCXBncGFfb3V0cHV0 X2FkdmljZSgmYnVmLCAmd2Fsa2VyLCBydF9pZGVudGlmaWVycyk7CisJCWFkdmljZV9zdHJpbmcg PSBidWYuZGF0YTsKKworCQkvKiBJZiB0aGUgYWR2aWNlIHN0cmluZyBpcyBlbXB0eSwgZG9uJ3Qg Ym90aGVyIGNvbGxlY3RpbmcgaXQuICovCisJCWlmIChhZHZpY2Vfc3RyaW5nWzBdICE9ICdcMCcp CisJCQlwZ3BhX2NvbGxlY3RfYWR2aWNlKHBzdG10LT5xdWVyeUlkLCBxdWVyeV9zdHJpbmcsIGFk dmljZV9zdHJpbmcpOworCisJCS8qCisJCSAqIElmIHdlJ3ZlIGdvbmUgdG8gdGhlIHRyb3VibGUg b2YgZ2VuZXJhdGluZyBhbiBhZHZpY2Ugc3RyaW5nLCBhbmQgaWYKKwkJICogd2UncmUgaW5zaWRl IEVYUExBSU4sIHNhdmUgdGhlIHN0cmluZyBzbyB3ZSBkb24ndCBuZWVkIHRvCisJCSAqIHJlZ2Vu ZXJhdGUgaXQuCisJCSAqLworCQlpZiAoZXMgIT0gTlVMTCkKKwkJCXBncGFfaXRlbXMgPSBsYXBw ZW5kKHBncGFfaXRlbXMsCisJCQkJCQkJCSBtYWtlRGVmRWxlbSgiYWR2aWNlX3N0cmluZyIsCisJ CQkJCQkJCQkJCSAoTm9kZSAqKSBtYWtlU3RyaW5nKGFkdmljZV9zdHJpbmcpLAorCQkJCQkJCQkJ CQkgLTEpKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGFyZSBwbGFubmluZyB3aXRoaW4gRVhQTEFJ TiwgbWFrZSBhcnJhbmdlbWVudHMgdG8gYWxsb3cgRVhQTEFJTgorCSAqIHRvIHRlbGwgdGhlIHVz ZXIgd2hhdCBoYXMgaGFwcGVuZWQgd2l0aCB0aGUgcHJvdmlkZWQgYWR2aWNlLgorCSAqCisJICog TkI6IElmIEVYUExBSU4gaXMgdXNlZCBvbiBhIHByZXBhcmVkIGlzIGEgcHJlcGFyZWQgc3RhdGVt ZW50LCBwbGFubmluZworCSAqIHdpbGwgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkIGhhcHBlbmVkIHdp dGhvdXQgcmVjb3JkaW5nIHRoZXNlIGRldGFpbHMuIFdlCisJICogY291bGQgY29uc2lkZXIgYWRk aW5nIGEgR1VDIHRvIGNhdGVyIHRvIHRoYXQgc2NlbmFyaW87IG9yIHdlIGNvdWxkIGRvCisJICog dGhpcyB3b3JrIGFsbCB0aGUgdGltZSwgYnV0IHRoYXQgc2VlbXMgbGlrZSB0b28gbXVjaCBvdmVy aGVhZC4KKwkgKi8KKwlpZiAoZG9fYWR2aWNlX2ZlZWRiYWNrKQorCXsKKwkJTGlzdAkgICAqZmVl ZGJhY2sgPSBOSUw7CisKKwkJLyoKKwkJICogSW5qZWN0IGEgTm9kZS10cmVlIHJlcHJlc2VudGF0 aW9uIG9mIGFsbCB0aGUgdHJvdmUtZW50cnkgZmxhZ3MgaW50bworCQkgKiB0aGUgUGxhbm5lZFN0 bXQuCisJCSAqLworCQlmZWVkYmFjayA9IHBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soZmVl ZGJhY2ssCisJCQkJCQkJCQkJCQl0cm92ZSwKKwkJCQkJCQkJCQkJCVBHUEFfVFJPVkVfTE9PS1VQ X1NDQU4sCisJCQkJCQkJCQkJCQlydF9pZGVudGlmaWVycywgJndhbGtlcik7CisJCWZlZWRiYWNr ID0gcGdwYV9wbGFubmVyX2FwcGVuZF9mZWVkYmFjayhmZWVkYmFjaywKKwkJCQkJCQkJCQkJCXRy b3ZlLAorCQkJCQkJCQkJCQkJUEdQQV9UUk9WRV9MT09LVVBfSk9JTiwKKwkJCQkJCQkJCQkJCXJ0 X2lkZW50aWZpZXJzLCAmd2Fsa2VyKTsKKwkJZmVlZGJhY2sgPSBwZ3BhX3BsYW5uZXJfYXBwZW5k X2ZlZWRiYWNrKGZlZWRiYWNrLAorCQkJCQkJCQkJCQkJdHJvdmUsCisJCQkJCQkJCQkJCQlQR1BB X1RST1ZFX0xPT0tVUF9SRUwsCisJCQkJCQkJCQkJCQlydF9pZGVudGlmaWVycywgJndhbGtlcik7 CisKKwkJcGdwYV9pdGVtcyA9IGxhcHBlbmQocGdwYV9pdGVtcywgbWFrZURlZkVsZW0oImZlZWRi YWNrIiwKKwkJCQkJCQkJCQkJCQkgKE5vZGUgKikgZmVlZGJhY2ssCisJCQkJCQkJCQkJCQkJIC0x KSk7CisJfQorCisJLyogUHVzaCB3aGF0ZXZlciBkYXRhIHdlJ3JlIHNhdmluZyBpbnRvIHRoZSBQ bGFubmVkU3RtdC4gKi8KKwlpZiAocGdwYV9pdGVtcyAhPSBOSUwpCisJCXBzdG10LT5leHRlbnNp b25fc3RhdGUgPQorCQkJbGFwcGVuZChwc3RtdC0+ZXh0ZW5zaW9uX3N0YXRlLAorCQkJCQltYWtl RGVmRWxlbSgicGdfcGxhbl9hZHZpY2UiLCAoTm9kZSAqKSBwZ3BhX2l0ZW1zLCAtMSkpOworCisJ LyoKKwkgKiBJZiBhc3NlcnRpb25zIGFyZSBlbmFibGVkLCBjcm9zcy1jaGVjayB0aGUgZ2VuZXJh dGVkIHJhbmdlIHRhYmxlCisJICogaWRlbnRpZmllcnMuCisJICovCisJaWYgKHBwcyAhPSBOVUxM KQorCQlwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocHBzLCBwc3RtdCk7Cit9CisKKy8qCisgKiBF bmZvcmNlIG92ZXJhbGwgcmVzdHJpY3Rpb25zIG9uIGEgam9pbiByZWxhdGlvbiB0aGF0IGFwcGx5 IHVuaWZvcm1seQorICogcmVnYXJkbGVzcyBvZiB0aGUgY2hvaWNlIG9mIGlubmVyIGFuZCBvdXRl ciByZWwuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbnJlbF9hZHZp Y2UodWludDY0ICpwZ3NfbWFza19wLCBjaGFyICpwbGFuX25hbWUsCisJCQkJCQkJCSAgcGdwYV9q b2luX3N0YXRlICpwanMpCit7CisJaW50CQkJaSA9IC0xOworCWludAkJCWZsYWdzOworCWJvb2wJ CWdhdGhlcl9jb25mbGljdCA9IGZhbHNlOworCXVpbnQ2NAkJZ2F0aGVyX21hc2sgPSAwOworCUJp dG1hcHNldCAgKmdhdGhlcl9wYXJ0aWFsX21hdGNoID0gTlVMTDsKKwlCaXRtYXBzZXQgICpnYXRo ZXJfZnVsbF9tYXRjaCA9IE5VTEw7CisJYm9vbAkJcGFydGl0aW9ud2lzZV9jb25mbGljdCA9IGZh bHNlOworCWludAkJCXBhcnRpdGlvbndpc2Vfb3V0Y29tZSA9IDA7CisJQml0bWFwc2V0ICAqcGFy dGl0aW9ud2lzZV9wYXJ0aWFsX21hdGNoID0gTlVMTDsKKwlCaXRtYXBzZXQgICpwYXJ0aXRpb253 aXNlX2Z1bGxfbWF0Y2ggPSBOVUxMOworCisJLyogSXRlcmF0ZSBvdmVyIGFsbCBwb3NzaWJseS1y ZWxldmFudCBhZHZpY2UuICovCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBqcy0+cmVs X2luZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmcGpz LT5yZWxfZW50cmllc1tpXTsKKwkJcGdwYV9pdG1fdHlwZSBpdG07CisJCWJvb2wJCWZ1bGxfbWF0 Y2ggPSBmYWxzZTsKKwkJdWludDY0CQlteV9nYXRoZXJfbWFzayA9IDA7CisJCWludAkJCW15X3Bh cnRpdGlvbndpc2Vfb3V0Y29tZSA9IDA7CS8qID4wIHllcywgPDAgbm8gKi8KKworCQkvKgorCQkg KiBGb3IgR0FUSEVSIGFuZCBHQVRIRVJfTUVSR0UsIGlmIHRoZSBzcGVjaWZpZWQgcmVsYXRpb25z IGV4YWN0bHkKKwkJICogbWF0Y2ggdGhpcyBqb2lucmVsLCBkbyB3aGF0ZXZlciB0aGUgYWR2aWNl IHNheXM7IG90aGVyd2lzZSwgZG9uJ3QKKwkJICogYWxsb3cgR2F0aGVyIG9yIEdhdGhlciBNZXJn ZSBhdCB0aGlzIGxldmVsLiBGb3IgTk9fR0FUSEVSLCB0aGVyZQorCQkgKiBtdXN0IGJlIGEgc2lu Z2xlIHRhcmdldCByZWxhdGlvbiB3aGljaCBtdXN0IGJlIGluY2x1ZGVkIGluIHRoaXMKKwkJICog am9pbnJlbCwgc28ganVzdCBkb24ndCBhbGxvdyBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIGhlcmUs IGZ1bGwKKwkJICogc3RvcC4KKwkJICovCisJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX05P X0dBVEhFUikKKwkJeworCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElB TDsKKwkJCWZ1bGxfbWF0Y2ggPSB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJaW50CQkJdG90 YWxfY291bnQ7CisKKwkJCXRvdGFsX2NvdW50ID0gcGpzLT5vdXRlcl9jb3VudCArIHBqcy0+aW5u ZXJfY291bnQ7CisJCQlpdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldCh0b3RhbF9j b3VudCwgcGpzLT5yaWRzLAorCQkJCQkJCQkJCQkJZW50cnktPnRhcmdldCk7CisJCQlBc3NlcnQo aXRtICE9IFBHUEFfSVRNX0RJU0pPSU5UKTsKKworCQkJaWYgKGl0bSA9PSBQR1BBX0lUTV9FUVVB TCkKKwkJCXsKKwkJCQlmdWxsX21hdGNoID0gdHJ1ZTsKKwkJCQlpZiAoZW50cnktPnRhZyA9PSBQ R1BBX1RBR19QQVJUSVRJT05XSVNFKQorCQkJCQlteV9wYXJ0aXRpb253aXNlX291dGNvbWUgPSAx OworCQkJCWVsc2UgaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSKQorCQkJCQlteV9n YXRoZXJfbWFzayA9IFBHU19HQVRIRVI7CisJCQkJZWxzZSBpZiAoZW50cnktPnRhZyA9PSBQR1BB X1RBR19HQVRIRVJfTUVSR0UpCisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0dBVEhFUl9NRVJH RTsKKwkJCQllbHNlCisJCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGFkdmljZSB0YWc6ICVk IiwKKwkJCQkJCSAoaW50KSBlbnRyeS0+dGFnKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlp ZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19QQVJUSVRJT05XSVNFKQorCQkJCXsKKwkJCQkJbXlf cGFydGl0aW9ud2lzZV9vdXRjb21lID0gLTE7CisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NP TlNJREVSX05PTlBBUlRJQUw7CisJCQkJfQorCQkJCWVsc2UgaWYgKGVudHJ5LT50YWcgPT0gUEdQ QV9UQUdfR0FUSEVSIHx8CisJCQkJCQkgZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVJfTUVS R0UpCisJCQkJeworCQkJCQlteV9wYXJ0aXRpb253aXNlX291dGNvbWUgPSAtMTsKKwkJCQkJbXlf Z2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJCQl9CisJCQkJZWxzZQor CQkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBhZHZpY2UgdGFnOiAlZCIsCisJCQkJCQkgKGlu dCkgZW50cnktPnRhZyk7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBJZiB3ZSBzZXQgbXlfZ2F0 aGVyX21hc2sgdXAgYWJvdmUsIHRoZW4gd2UgKDEpIG1ha2UgYSBub3RlIGlmIHRoZQorCQkgKiBh ZHZpY2UgY29uZmxpY3RlZCwgKDIpIHJlbWVtYmVyIHRoZSBtYXNrIHZhbHVlLCBhbmQgKDMpIHJl bWVtYmVyCisJCSAqIHdoZXRoZXIgdGhpcyB3YXMgYSBmdWxsIG9yIHBhcnRpYWwgbWF0Y2guCisJ CSAqLworCQlpZiAobXlfZ2F0aGVyX21hc2sgIT0gMCkKKwkJeworCQkJaWYgKGdhdGhlcl9tYXNr ICE9IDAgJiYgZ2F0aGVyX21hc2sgIT0gbXlfZ2F0aGVyX21hc2spCisJCQkJZ2F0aGVyX2NvbmZs aWN0ID0gdHJ1ZTsKKwkJCWdhdGhlcl9tYXNrID0gbXlfZ2F0aGVyX21hc2s7CisJCQlpZiAoZnVs bF9tYXRjaCkKKwkJCQlnYXRoZXJfZnVsbF9tYXRjaCA9IGJtc19hZGRfbWVtYmVyKGdhdGhlcl9m dWxsX21hdGNoLCBpKTsKKwkJCWVsc2UKKwkJCQlnYXRoZXJfcGFydGlhbF9tYXRjaCA9IGJtc19h ZGRfbWVtYmVyKGdhdGhlcl9wYXJ0aWFsX21hdGNoLCBpKTsKKwkJfQorCisJCS8qCisJCSAqIExp a2V3aXNlLCBpZiB3ZSBzZXQgbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lIHVwIGFib3ZlLCB0aGVu IHdlICgxKQorCQkgKiBtYWtlIGEgbm90ZSBpZiB0aGUgYWR2aWNlIGNvbmZsaWN0ZWQsICgyKSBy ZW1lbWJlciB3aGF0IHRoZSBkZXNpcmVkCisJCSAqIG91dGNvbWUgd2FzLCBhbmQgKDMpIHJlbWVt YmVyIHdoZXRoZXIgdGhpcyB3YXMgYSBmdWxsIG9yIHBhcnRpYWwKKwkJICogbWF0Y2guCisJCSAq LworCQlpZiAobXlfcGFydGl0aW9ud2lzZV9vdXRjb21lICE9IDApCisJCXsKKwkJCWlmIChwYXJ0 aXRpb253aXNlX291dGNvbWUgIT0gMCAmJgorCQkJCXBhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSBt eV9wYXJ0aXRpb253aXNlX291dGNvbWUpCisJCQkJcGFydGl0aW9ud2lzZV9jb25mbGljdCA9IHRy dWU7CisJCQlwYXJ0aXRpb253aXNlX291dGNvbWUgPSBteV9wYXJ0aXRpb253aXNlX291dGNvbWU7 CisJCQlpZiAoZnVsbF9tYXRjaCkKKwkJCQlwYXJ0aXRpb253aXNlX2Z1bGxfbWF0Y2ggPQorCQkJ CQlibXNfYWRkX21lbWJlcihwYXJ0aXRpb253aXNlX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxzZQor CQkJCXBhcnRpdGlvbndpc2VfcGFydGlhbF9tYXRjaCA9CisJCQkJCWJtc19hZGRfbWVtYmVyKHBh cnRpdGlvbndpc2VfcGFydGlhbF9tYXRjaCwgaSk7CisJCX0KKwl9CisKKwkvKgorCSAqIE1hcmsg ZXZlcnkgR2F0aGVyLXJlbGF0ZWQgcGllY2Ugb2YgYWR2aWNlIGFzIHBhcnRpYWxseSBtYXRjaGVk LCBhbmQgaWYKKwkgKiB0aGUgc2V0IG9mIHRhcmdldHMgZXhhY3RseSBtYXRjaGVkIHRoaXMgcmVs YXRpb24sIGZ1bGx5IG1hdGNoZWQuIElmCisJICogdGhlcmUgd2FzIGEgY29uZmxpY3QsIG1hcmsg dGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJZmxhZ3MgPSBQR1BBX1RFX01BVENIX1BB UlRJQUw7CisJaWYgKGdhdGhlcl9jb25mbGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElD VElORzsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPnJlbF9lbnRyaWVzLCBnYXRoZXJfcGFy dGlhbF9tYXRjaCwgZmxhZ3MpOworCWZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwlwZ3Bh X3Ryb3ZlX3NldF9mbGFncyhwanMtPnJlbF9lbnRyaWVzLCBnYXRoZXJfZnVsbF9tYXRjaCwgZmxh Z3MpOworCisJLyogTGlrZXdpc2UgZm9yIHBhcnRpdGlvbndpc2UgYWR2aWNlLiAqLworCWZsYWdz ID0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCWlmIChwYXJ0aXRpb253aXNlX2NvbmZsaWN0KQor CQlmbGFncyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBq cy0+cmVsX2VudHJpZXMsIHBhcnRpdGlvbndpc2VfcGFydGlhbF9tYXRjaCwgZmxhZ3MpOworCWZs YWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPnJl bF9lbnRyaWVzLCBwYXJ0aXRpb253aXNlX2Z1bGxfbWF0Y2gsIGZsYWdzKTsKKworCS8qIElmIHRo ZXJlIGlzIGEgbm9uLWNvbmZsaWN0aW5nIGdhdGhlciBzcGVjaWZpY2F0aW9uLCBlbmZvcmNlIGl0 LiAqLworCWlmIChnYXRoZXJfbWFzayAhPSAwICYmICFnYXRoZXJfY29uZmxpY3QpCisJeworCQkq cGdzX21hc2tfcCAmPQorCQkJfihQR1NfR0FUSEVSIHwgUEdTX0dBVEhFUl9NRVJHRSB8IFBHU19D T05TSURFUl9OT05QQVJUSUFMKTsKKwkJKnBnc19tYXNrX3AgfD0gZ2F0aGVyX21hc2s7CisJfQor CisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhIG5vbi1jb25mbGljdGluZyBwYXJ0aXRpb253aXNlIHNw ZWNpZmljYXRpb24sIGVuZm9yY2UuCisJICoKKwkgKiBUbyBmb3JjZSBhIHBhcnRpdGlvbndpc2Ug am9pbiwgd2UgZGlzYWJsZSBhbGwgdGhlIG9yZGluYXJ5IG1lYW5zIG9mCisJICogcGVyZm9ybWlu ZyBhIGpvaW4sIGFuZCBpbnN0ZWFkIG9ubHkgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCBwYXRocyBo ZXJlLgorCSAqIFRvIHByZXZlbnQgb25lLCB3ZSBqdXN0IGRpc2FibGUgQXBwZW5kIGFuZCBNZXJn ZUFwcGVuZC4gIE5vdGUgdGhhdCB3ZQorCSAqIG11c3Qgbm90IHVuc2V0IFBHU19DT05TSURFUl9Q QVJUSVRJT05XSVNFIGV2ZW4gd2hlbiB3ZSBkb24ndCB3YW50IGEKKwkgKiBwYXJ0aXRpb253aXNl IGpvaW4gaGVyZSwgYmVjYXVzZSB3ZSBtaWdodCB3YW50IG9uZSBhdCBhIGhpZ2hlciBsZXZlbAor CSAqIHRoYXQgaXMgY29uc3RydWN0aW5nIHVzaW5nIHBhdGhzIGZyb20gdGhpcyBsZXZlbC4KKwkg Ki8KKwlpZiAocGFydGl0aW9ud2lzZV9vdXRjb21lICE9IDAgJiYgIXBhcnRpdGlvbndpc2VfY29u ZmxpY3QpCisJeworCQlpZiAocGFydGl0aW9ud2lzZV9vdXRjb21lID4gMCkKKwkJCSpwZ3NfbWFz a19wID0gKCpwZ3NfbWFza19wICYgflBHU19KT0lOX0FOWSkgfAorCQkJCVBHU19BUFBFTkQgfCBQ R1NfTUVSR0VfQVBQRU5EIHwgUEdTX0NPTlNJREVSX1BBUlRJVElPTldJU0U7CisJCWVsc2UKKwkJ CSpwZ3NfbWFza19wICY9IH4oUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQpOworCX0KK30K KworLyoKKyAqIEVuZm9yY2UgcmVzdHJpY3Rpb25zIG9uIHRoZSBqb2luIG9yZGVyIG9yIGpvaW4g bWV0aG9kLgorICoKKyAqIE5vdGUgdGhhdCwgYWx0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8gdmll dyBQQVJUSVRJT05XSVNFIGFkdmljZSBhcworICogY29udHJvbGxpbmcgdGhlIGpvaW4gbWV0aG9k LCB3ZSBjYW4ndCBlbmZvcmNlIGl0IGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUKKyAqIHBhdGggd2hl cmUgdGhpcyBleGVjdXRlcyBvbmx5IGRlYWxzIHdpdGggam9pbiBwYXRocyB0aGF0IGFyZSBidWls dCBkaXJlY3RseQorICogZnJvbSBhIHNpbmdsZSBvdXRlciBwYXRoIGFuZCBhIHNpbmdsZSBpbm5l ciBwYXRoLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5fcGF0aF9h ZHZpY2UoSm9pblR5cGUgam9pbnR5cGUsIHVpbnQ2NCAqcGdzX21hc2tfcCwKKwkJCQkJCQkJCWNo YXIgKnBsYW5fbmFtZSwKKwkJCQkJCQkJCXBncGFfam9pbl9zdGF0ZSAqcGpzKQoreworCWludAkJ CWkgPSAtMTsKKwlCaXRtYXBzZXQgICpqb19wZXJtaXRfaW5kZXhlcyA9IE5VTEw7CisJQml0bWFw c2V0ICAqam9fZGVueV9pbmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQgICpqbV9pbmRleGVzID0g TlVMTDsKKwlib29sCQlqbV9jb25mbGljdCA9IGZhbHNlOworCXVpbnQzMgkJam9pbl9tYXNrID0g MDsKKworCS8qIEl0ZXJhdGUgb3ZlciBhbGwgcG9zc2libHktcmVsZXZhbnQgYWR2aWNlLiAqLwor CXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwanMtPmpvaW5faW5kZXhlcywgaSkpID49IDAp CisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZwanMtPmpvaW5fZW50cmllc1tpXTsK KwkJdWludDMyCQlteV9qb2luX21hc2s7CisKKwkJLyogSGFuZGxlIGpvaW4gb3JkZXIgYWR2aWNl LiAqLworCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19KT0lOX09SREVSKQorCQl7CisJCQlp ZiAocGdwYV9qb2luX29yZGVyX3Blcm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50LAorCQkJCQkJ CQkJCQkgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJIHBqcy0+cmlkcywKKwkJCQkJCQkJ CQkJIGVudHJ5KSkKKwkJCQlqb19wZXJtaXRfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX3Bl cm1pdF9pbmRleGVzLCBpKTsKKwkJCWVsc2UKKwkJCQlqb19kZW55X2luZGV4ZXMgPSBibXNfYWRk X21lbWJlcihqb19kZW55X2luZGV4ZXMsIGkpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBI YW5kbGUgam9pbiBzdHJhdGVneSBhZHZpY2UuICovCisJCW15X2pvaW5fbWFzayA9IHBncGFfam9p bl9zdHJhdGVneV9tYXNrX2Zyb21fYWR2aWNlX3RhZyhlbnRyeS0+dGFnKTsKKwkJaWYgKG15X2pv aW5fbWFzayAhPSAwKQorCQl7CisJCQlib29sCQlwZXJtaXQ7CisJCQlib29sCQlyZXN0cmljdF9t ZXRob2Q7CisKKwkJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX0ZPUkVJR05fSk9JTikKKwkJ CQlwZXJtaXQgPSBwZ3BhX29wYXF1ZV9qb2luX3Blcm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50 LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpz LT5yaWRzLAorCQkJCQkJCQkJCQkJCSAgIGVudHJ5LAorCQkJCQkJCQkJCQkJCSAgICZyZXN0cmlj dF9tZXRob2QpOworCQkJZWxzZQorCQkJCXBlcm1pdCA9IHBncGFfam9pbl9tZXRob2RfcGVybWl0 c19qb2luKHBqcy0+b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpzLT5pbm5lcl9jb3Vu dCwKKwkJCQkJCQkJCQkJCQkgICBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQkJICAgZW50cnksCisJ CQkJCQkJCQkJCQkJICAgJnJlc3RyaWN0X21ldGhvZCk7CisJCQlpZiAoIXBlcm1pdCkKKwkJCQlq b19kZW55X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19kZW55X2luZGV4ZXMsIGkpOworCQkJ ZWxzZSBpZiAocmVzdHJpY3RfbWV0aG9kKQorCQkJeworCQkJCWpvX3Blcm1pdF9pbmRleGVzID0g Ym1zX2FkZF9tZW1iZXIoam9fcGVybWl0X2luZGV4ZXMsIGkpOworCQkJCWptX2luZGV4ZXMgPSBi bXNfYWRkX21lbWJlcihqb19wZXJtaXRfaW5kZXhlcywgaSk7CisJCQkJaWYgKGpvaW5fbWFzayAh PSAwICYmIGpvaW5fbWFzayAhPSBteV9qb2luX21hc2spCisJCQkJCWptX2NvbmZsaWN0ID0gdHJ1 ZTsKKwkJCQlqb2luX21hc2sgPSBteV9qb2luX21hc2s7CisJCQl9CisJCQljb250aW51ZTsKKwkJ fQorCisJCS8qIEhhbmRsZSBzZW1pam9pbiB1bmlxdWVuZXNzIGFkdmljZS4gKi8KKwkJaWYgKGVu dHJ5LT50YWcgPT0gUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFIHx8CisJCQllbnRyeS0+dGFnID09 IFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUUpCisJCXsKKwkJCWJvb2wJCWFkdmljZV91bmlx dWU7CisJCQlib29sCQlqdF91bmlxdWU7CisJCQlib29sCQlqdF9ub25fdW5pcXVlOworCQkJYm9v bAkJcmVzdHJpY3RfbWV0aG9kOworCisJCQkvKiBBZHZpY2Ugd2FudHMgdG8gdW5pcXVlLWlmeSBh bmQgdXNlIGEgcmVndWxhciBqb2luPyAqLworCQkJYWR2aWNlX3VuaXF1ZSA9IChlbnRyeS0+dGFn ID09IFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRSk7CisKKwkJCS8qIFBsYW5uZXIgaXMgdHJ5aW5n IHRvIHVuaXF1ZS1pZnkgYW5kIHVzZSBhIHJlZ3VsYXIgam9pbj8gKi8KKwkJCWp0X3VuaXF1ZSA9 IChqb2ludHlwZSA9PSBKT0lOX1VOSVFVRV9JTk5FUiB8fAorCQkJCQkJIGpvaW50eXBlID09IEpP SU5fVU5JUVVFX09VVEVSKTsKKworCQkJLyogUGxhbm5lciBpcyB0cnlpbmcgYSBzZW1pLWpvaW4s IHdpdGhvdXQgdW5pcXVlLWlmeWluZz8gKi8KKwkJCWp0X25vbl91bmlxdWUgPSAoam9pbnR5cGUg PT0gSk9JTl9TRU1JIHx8CisJCQkJCQkJIGpvaW50eXBlID09IEpPSU5fUklHSFRfU0VNSSk7CisK KwkJCS8qCisJCQkgKiBUaGVzZSBhZHZpY2UgdGFncyBiZWhhdmUgdmVyeSBtdWNoIGxpa2Ugam9p biBtZXRob2QgYWR2aWNlLCBpbgorCQkJICogdGhhdCB0aGV5IHdhbnQgdGhlIGlubmVyIHNpZGUg b2YgdGhlIHNlbWlqb2luIHRvIG1hdGNoIHRoZQorCQkJICogcmVsYXRpb25zIGxpc3RlZCBpbiB0 aGUgYWR2aWNlLiBIZW5jZSwgd2UgdGVzdCB3aGV0aGVyIGpvaW4KKwkJCSAqIG1ldGhvZCBhZHZp Y2Ugd291bGQgZW5mb3JjZSBhIGpvaW4gb3JkZXIgcmVzdHJpY3Rpb24gaGVyZSwgYW5kCisJCQkg KiBkaXNhbGxvdyB0aGUgam9pbiBpZiBub3QuCisJCQkgKgorCQkJICogWFhYLiBUaGluayBoYXJk ZXIgYWJvdXQgcmlnaHQgc2VtaWpvaW5zLgorCQkJICovCisJCQlpZiAoIXBncGFfam9pbl9tZXRo b2RfcGVybWl0c19qb2luKHBqcy0+b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCSAgIHBqcy0+aW5u ZXJfY291bnQsCisJCQkJCQkJCQkJCSAgIHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJICAgZW50cnks CisJCQkJCQkJCQkJCSAgICZyZXN0cmljdF9tZXRob2QpKQorCQkJCWpvX2RlbnlfaW5kZXhlcyA9 IGJtc19hZGRfbWVtYmVyKGpvX2RlbnlfaW5kZXhlcywgaSk7CisJCQllbHNlIGlmIChyZXN0cmlj dF9tZXRob2QpCisJCQl7CisJCQkJam9fcGVybWl0X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihq b19wZXJtaXRfaW5kZXhlcywgaSk7CisJCQkJaWYgKCFqdF91bmlxdWUgJiYgIWp0X25vbl91bmlx dWUpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBUaGlzIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHNl bWlqb2luIHRvIHdoaWNoIFNKX1VOSVFVRQorCQkJCQkgKiBvciBTSl9OT05fVU5JUVVFIGNhbiBi ZSBhcHBsaWVkLgorCQkJCQkgKi8KKwkJCQkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfSU5BUFBM SUNBQkxFOworCQkJCX0KKwkJCQllbHNlIGlmIChhZHZpY2VfdW5pcXVlICE9IGp0X3VuaXF1ZSkK KwkJCQkJam9fZGVueV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam9fZGVueV9pbmRleGVzLCBp KTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB0aGUgYWR2aWNl IGluZGljYXRlcyBib3RoIHRoYXQgdGhpcyBqb2luIG9yZGVyIGlzIHBlcm1pc3NpYmxlIGFuZAor CSAqIGFsc28gdGhhdCBpdCBpc24ndCwgdGhlbiBtYXJrIGFkdmljZSByZWxhdGVkIHRvIHRoZSBq b2luIG9yZGVyIGFzCisJICogY29uZmxpY3RpbmcuCisJICovCisJaWYgKGpvX3Blcm1pdF9pbmRl eGVzICE9IE5VTEwgJiYgam9fZGVueV9pbmRleGVzICE9IE5VTEwpCisJeworCQlwZ3BhX3Ryb3Zl X3NldF9mbGFncyhwanMtPmpvaW5fZW50cmllcywgam9fcGVybWl0X2luZGV4ZXMsCisJCQkJCQkJ IFBHUEFfVEVfQ09ORkxJQ1RJTkcpOworCQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPmpvaW5f ZW50cmllcywgam9fZGVueV9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsK Kwl9CisKKwkvKgorCSAqIElmIG1vcmUgdGhhbiBvbmUgam9pbiBtZXRob2Qgc3BlY2lmaWNhdGlv biBpcyByZWxldmFudCBoZXJlIGFuZCB0aGV5CisJICogZGlmZmVyLCBtYXJrIHRoZW0gYWxsIGFz IGNvbmZsaWN0aW5nLgorCSAqLworCWlmIChqbV9jb25mbGljdCkKKwkJcGdwYV90cm92ZV9zZXRf ZmxhZ3MocGpzLT5qb2luX2VudHJpZXMsIGptX2luZGV4ZXMsCisJCQkJCQkJIFBHUEFfVEVfQ09O RkxJQ1RJTkcpOworCisJLyoKKwkgKiBJZiB3ZSB3ZXJlIGFkdmlzZWQgdG8gZGVueSB0aGlzIGpv aW4gb3JkZXIsIHRoZW4gZG8gc28uIEhvd2V2ZXIsIGlmIHdlCisJICogd2VyZSBhbHNvIGFkdmlz ZWQgdG8gcGVybWl0IGl0LCB0aGVuIGRvIG5vdGhpbmcsIHNpbmNlIHRoZSBhZHZpY2UKKwkgKiBj b25mbGljdHMuCisJICovCisJaWYgKGpvX2RlbnlfaW5kZXhlcyAhPSBOVUxMICYmIGpvX3Blcm1p dF9pbmRleGVzID09IE5VTEwpCisJCSpwZ3NfbWFza19wID0gMDsKKworCS8qCisJICogSWYgd2Ug d2VyZSBhZHZpc2VkIHRvIHJlc3RyaWN0IHRoZSBqb2luIG1ldGhvZCwgdGhlbiBkbyBzby4gSG93 ZXZlciwgaWYKKwkgKiB3ZSBnb3QgY29uZmxpY3Rpbmcgam9pbiBtZXRob2QgYWR2aWNlIG9yIHdl cmUgYWxzbyBhZHZpc2VkIHRvIHJlamVjdAorCSAqIHRoaXMgam9pbiBvcmRlciBjb21wbGV0ZWx5 LCB0aGVuIGluc3RlYWQgZG8gbm90aGluZy4KKwkgKi8KKwlpZiAoam9pbl9tYXNrICE9IDAgJiYg IWptX2NvbmZsaWN0ICYmIGpvX2RlbnlfaW5kZXhlcyA9PSBOVUxMKQorCQkqcGdzX21hc2tfcCA9 ICgqcGdzX21hc2tfcCAmIH5QR1NfSk9JTl9BTlkpIHwgam9pbl9tYXNrOworfQorCisvKgorICog VHJhbnNsYXRlIGFuIGFkdmljZSB0YWcgaW50byBhIHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVneSBt YXNrLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB3aXRoIHRhZyB0eXBlcyB0 aGF0IGRvbid0IHJlcHJlc2VudCBqb2luCisgKiBzdHJhdGVnaWVzLiBJbiBzdWNoIGNhc2VzLCB3 ZSBqdXN0IHJldHVybiAwLCB3aGljaCBjYW4ndCBiZSBjb25mdXNlZCB3aXRoCisgKiBhIHZhbGlk IG1hc2suCisgKi8KK3N0YXRpYyB1aW50NjQKK3BncGFfam9pbl9zdHJhdGVneV9tYXNrX2Zyb21f YWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcpCit7CisJc3dpdGNoICh0YWcpCisJ eworCQljYXNlIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjoKKwkJCXJldHVybiBQR1NfRk9SRUlHTkpP SU47CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiBQR1NfTUVS R0VKT0lOX1BMQUlOOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJ CQlyZXR1cm4gUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRTsKKwkJY2FzZSBQR1BBX1RBR19ORVNU RURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiBQR1NfTkVTVExPT1BfUExBSU47CisJCWNhc2UgUEdQ QV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gUEdTX05FU1RMT09QX01B VEVSSUFMSVpFOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQlyZXR1 cm4gUEdTX05FU1RMT09QX01FTU9JWkU7CisJCWNhc2UgUEdQQV9UQUdfSEFTSF9KT0lOOgorCQkJ cmV0dXJuIFBHU19IQVNISk9JTjsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCX0KK30KKwor LyoKKyAqIERvZXMgYSBjZXJ0YWluIGl0ZW0gb2Ygam9pbiBvcmRlciBhZHZpY2UgcGVybWl0IGEg Y2VydGFpbiBqb2luPworICovCitzdGF0aWMgYm9vbAorcGdwYV9qb2luX29yZGVyX3Blcm1pdHNf am9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkgcGdwYV9pZGVu dGlmaWVyICpyaWRzLAorCQkJCQkJCSBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSkKK3sKKwlib29s CQlsb29wID0gdHJ1ZTsKKwlib29sCQlzdWJsaXN0ID0gZmFsc2U7CisJaW50CQkJbGVuZ3RoOwor CWludAkJCW91dGVyX2xlbmd0aDsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCA9IGVudHJ5 LT50YXJnZXQ7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICpwcmVmaXhfdGFyZ2V0OworCisJLyogV2Ug ZGVmaW5pdGVseSBoYXZlIGF0IGxlYXN0IGEgcGFydGlhbCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBl bnRyeS4gKi8KKwllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCisJLyoK KwkgKiBGaW5kIHRoZSBpbm5lcm1vc3Qgc3VibGlzdCB0aGF0IGNvbnRhaW5zIGFsbCBrZXlzOyBp ZiBubyBzdWJsaXN0IGRvZXMsCisJICogdGhlbiBjb250aW51ZSBwcm9jZXNzaW5nIHdpdGggdGhl IHRvcGxldmVsIGxpc3QuCisJICoKKwkgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIGFkdmljZSBzYXlz IEpPSU5fT1JERVIodDEgdDIgKHQzIHQ0IHQ1KSksIHRoZW4gd2UKKwkgKiBzaG91bGQgZXZhbHVh dGUgam9pbnMgdGhhdCBvbmx5IGludm9sdmUgdDMsIHQ0LCBhbmQvb3IgdDUgYWdhaW5zdCB0aGUK KwkgKiAodDMgdDQgdDUpIHN1Ymxpc3QsIGFuZCBvdGhlcnMgYWdhaW5zdCB0aGUgZnVsbCBsaXN0 LgorCSAqCisJICogTm90ZSB0aGF0ICgxKSBvdXRlcm1vc3Qgc3VibGlzdCBpcyBhbHdheXMgb3Jk ZXJlZCBhbmQgKDIpIHdoZW5ldmVyIHdlCisJICogem9vbSBpbnRvIGFuIHVub3JkZXJlZCBzdWJs aXN0LCB3ZSBpbnN0YW50bHkgYWNjZXB0IHRoZSBwcm9wb3NlZCBqb2luLgorCSAqIElmIHRoZSBh ZHZpY2Ugc2F5cyBKT0lOX09SREVSKHQxIHQyIHt0MyB0NCB0NX0pLCBhbnkgYXBwcm9hY2ggdG8K KwkgKiBqb2luaW5nIHQzLCB0NCwgYW5kL29yIHQ1IGlzIGFjY2VwdGFibGUuCisJICovCisJd2hp bGUgKGxvb3ApCisJeworCQlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRF UkVEX0xJU1QpOworCisJCWxvb3AgPSBmYWxzZTsKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2Vf dGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCXBncGFfaXRt X3R5cGUgaXRtOworCisJCQlpZiAoY2hpbGRfdGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9J REVOVElGSUVSKQorCQkJCWNvbnRpbnVlOworCisJCQlpdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21h dGNoX3RhcmdldChvdXRlcl9jb3VudCArIGlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJcmlkcywg Y2hpbGRfdGFyZ2V0KTsKKwkJCWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwgfHwgaXRtID09IFBH UEFfSVRNX0tFWVNfQVJFX1NVQlNFVCkKKwkJCXsKKwkJCQlpZiAoY2hpbGRfdGFyZ2V0LT50dHlw ZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpCisJCQkJeworCQkJCQl0YXJnZXQgPSBjaGls ZF90YXJnZXQ7CisJCQkJCXN1Ymxpc3QgPSB0cnVlOworCQkJCQlsb29wID0gdHJ1ZTsKKwkJCQkJ YnJlYWs7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFzc2VydChjaGlsZF90YXJnZXQt PnR0eXBlID09IFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUKTsKKwkJCQkJcmV0dXJuIHRydWU7 CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBUcnkgdG8gZmluZCBhIHByZWZpeCBv ZiB0aGUgc2VsZWN0ZWQgam9pbiBvcmRlciBsaXN0IHRoYXQgaXMgZXhhY3RseQorCSAqIGVxdWFs IHRvIHRoZSBvdXRlciBzaWRlIG9mIHRoZSBwcm9wb3NlZCBqb2luLgorCSAqLworCWxlbmd0aCA9 IGxpc3RfbGVuZ3RoKHRhcmdldC0+Y2hpbGRyZW4pOworCXByZWZpeF90YXJnZXQgPSBwYWxsb2Mw X29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCXByZWZpeF90YXJnZXQtPnR0eXBlID0gUEdQ QV9UQVJHRVRfT1JERVJFRF9MSVNUOworCWZvciAob3V0ZXJfbGVuZ3RoID0gMTsgb3V0ZXJfbGVu Z3RoIDw9IGxlbmd0aDsgKytvdXRlcl9sZW5ndGgpCisJeworCQlwZ3BhX2l0bV90eXBlIGl0bTsK KworCQkvKiBBdm9pZCBsZWFraW5nIG1lbW9yeSBpbiBldmVyeSBsb29wIGl0ZXJhdGlvbi4gKi8K KwkJaWYgKHByZWZpeF90YXJnZXQtPmNoaWxkcmVuICE9IE5VTEwpCisJCQlsaXN0X2ZyZWUocHJl Zml4X3RhcmdldC0+Y2hpbGRyZW4pOworCQlwcmVmaXhfdGFyZ2V0LT5jaGlsZHJlbiA9IGxpc3Rf Y29weV9oZWFkKHRhcmdldC0+Y2hpbGRyZW4sCisJCQkJCQkJCQkJCQkgb3V0ZXJfbGVuZ3RoKTsK KworCQkvKiBTZWFyY2gsIGhvcGluZyB0byBmaW5kIGFuIGV4YWN0IG1hdGNoLiAqLworCQlpdG0g PSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCwgcmlkcywgcHJlZml4 X3RhcmdldCk7CisJCWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCQlicmVhazsKKworCQkv KgorCQkgKiBJZiB0aGUgcHJlZml4IG9mIHRoZSBqb2luIG9yZGVyIGxpc3QgdGhhdCB3ZSdyZSBj b25zaWRlcmluZworCQkgKiBpbmNsdWRlcyBzb21lIGJ1dCBub3QgYWxsIG9mIHRoZSBvdXRlciBy ZWxzLCB3ZSBjYW4gbWFrZSB0aGUgcHJlZml4CisJCSAqIGxvbmdlciB0byBmaW5kIGFuIGV4YWN0 IG1hdGNoLiBCdXQgdGhlIGFkdmljZSBoYXNuJ3QgbWVudGlvbmVkCisJCSAqIGV2ZXJ5dGhpbmcg dGhhdCdzIHBhcnQgb2Ygb3VyIG91dGVyIHJlbCB5ZXQsIGJ1dCBoYXMgbWVudGlvbmVkCisJCSAq IHRoaW5ncyB0aGF0IGFyZSBub3QsIHRoZW4gdGhpcyBqb2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGpv aW4gb3JkZXIKKwkJICogbGlzdC4KKwkJICovCisJCWlmIChpdG0gIT0gUEdQQV9JVE1fVEFSR0VU U19BUkVfU1VCU0VUKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogSWYgdGhlIHBy ZXZpb3VzIGxvb3BlZCBzdG9wcGVkIGJlZm9yZSB0aGUgcHJlZml4X3RhcmdldCBpbmNsdWRlZCB0 aGUKKwkgKiBlbnRpcmUgam9pbiBvcmRlciBsaXN0LCB0aGVuIHRoZSBuZXh0IG1lbWJlciBvZiB0 aGUgam9pbiBvcmRlciBsaXN0CisJICogbXVzdCBleGFjdGx5IG1hdGNoIHRoZSBpbm5lciBzaWRl IG9mIHRoZSBqb2luLgorCSAqCisJICogRXhhbXBsZTogR2l2ZW4gSk9JTl9PUkRFUih0MSB0MiAo dDMgdDQgdDUpKSwgaWYgdGhlIG91dGVyIHNpZGUgb2YgdGhlCisJICogY3VycmVudCBqb2luIGlu Y2x1ZGVzIG9ubHkgdDEsIHRoZW4gdGhlIGlubmVyIHNpZGUgbXVzdCBiZSBleGFjdGx5IHQyOwor CSAqIGlmIHRoZSBvdXRlciBzaWRlIGluY2x1ZGVzIGJvdGggdDEgYW5kIHQyLCB0aGVuIHRoZSBp bm5lciBzaWRlIG11c3QKKwkgKiBpbmNsdWRlIGV4YWN0bHkgdDMsIHQ0LCBhbmQgdDUuCisJICov CisJaWYgKG91dGVyX2xlbmd0aCA8IGxlbmd0aCkKKwl7CisJCXBncGFfYWR2aWNlX3RhcmdldCAq aW5uZXJfdGFyZ2V0OworCQlwZ3BhX2l0bV90eXBlIGl0bTsKKworCQlpbm5lcl90YXJnZXQgPSBs aXN0X250aCh0YXJnZXQtPmNoaWxkcmVuLCBvdXRlcl9sZW5ndGgpOworCisJCWl0bSA9IHBncGFf aWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KGlubmVyX2NvdW50LCByaWRzICsgb3V0ZXJfY291bnQs CisJCQkJCQkJCQkJCWlubmVyX3RhcmdldCk7CisKKwkJLyoKKwkJICogQmVmb3JlIHJldHVybmlu ZywgY29uc2lkZXIgd2hldGhlciB3ZSBuZWVkIHRvIG1hcmsgdGhpcyBlbnRyeSBhcworCQkgKiBm dWxseSBtYXRjaGVkLiBJZiB3ZSBmb3VuZCBldmVyeSBpdGVtIGJ1dCBvbmUgb24gdGhlIGxlZnRo YW5kIHNpZGUKKwkJICogb2YgdGhlIGpvaW4gYW5kIHRoZSBsYXN0IGl0ZW0gb24gdGhlIHJpZ2h0 aGFuZCBzaWRlIG9mIHRoZSBqb2luLAorCQkgKiB0aGVuIHRoZSBhbnN3ZXIgaXMgeWVzLgorCQkg Ki8KKwkJaWYgKG91dGVyX2xlbmd0aCArIDEgPT0gbGVuZ3RoICYmIGl0bSA9PSBQR1BBX0lUTV9F UVVBTCkKKwkJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisKKwkJcmV0dXJu IChpdG0gPT0gUEdQQV9JVE1fRVFVQUwpOworCX0KKworCS8qCisJICogSWYgd2UgZ2V0IGhlcmUs IHRoZW4gdGhlIG91dGVyIHNpZGUgb2YgdGhlIGpvaW4gaW5jbHVkZXMgdGhlIGVudGlyZXR5CisJ ICogb2YgdGhlIGpvaW4gb3JkZXIgbGlzdC4gSW4gdGhpcyBjYXNlLCB3ZSBiZWhhdmUgZGlmZmVy ZW50bHkgZGVwZW5kaW5nCisJICogb24gd2hldGhlciB3ZSdyZSBsb29raW5nIGF0IHRoZSB0b3At bGV2ZWwgam9pbiBvcmRlciBsaXN0IG9yIHN1Ymxpc3QuCisJICogQXQgdGhlIHRvcC1sZXZlbCwg d2UgdHJlYXQgdGhlIHNwZWNpZmllZCBsaXN0IGFzIG1hbmRhdGluZyB0aGF0IHRoZQorCSAqIGFj dHVhbCBqb2luIG9yZGVyIGhhcyB0aGUgZ2l2ZW4gbGlzdCBhcyBhIHByZWZpeCwgYnV0IGEgc3Vi bGlzdAorCSAqIHJlcXVpcmVzIGFuIGV4YWN0IG1hdGNoLgorCSAqCisJICogRXhtYXBsZTogR2l2 ZW4gSk9JTl9PUkRFUih0MSB0MiAodDMgdDQgdDUpKSwgd2UgbXVzdCBzdGFydCBieSBqb2luaW5n CisJICogYWxsIGZpdmUgb2YgdGhvc2UgcmVsYXRpb25zIGFuZCBpbiB0aGF0IHNlcXVlbmNlLCBi dXQgb25jZSB0aGF0IGlzCisJICogZG9uZSwgaXQncyBPSyB0byBqb2luIGFueSBvdGhlciByZWxz IHRoYXQgYXJlIHBhcnQgb2YgdGhlIGpvaW4gcHJvYmxlbS4KKwkgKiBUaGlzIGFsbG93cyBhIHVz ZXIgdG8gc3BlY2lmeSB0aGUgZHJpdmluZyB0YWJsZSBhbmQgcGVyaGFwcyB0aGUgZmlyc3QKKwkg KiBmZXcgdGhpbmdzIHRvIHdoaWNoIGl0IHNob3VsZCBiZSBqb2luZWQgd2hpbGUgbGVhdmluZyB0 aGUgcmVzdCBvZiB0aGUKKwkgKiBqb2luIG9yZGVyIHVwIHRoZSBvcHRpbWl6ZXIuIEJ1dCBpdCBz ZWVtcyBsaWtlIGl0IHdvdWxkIGJlIHN1cnByaXNpbmcsCisJICogZ2l2ZW4gdGhhdCBzcGVjaWZp Y2F0aW9uLCBpZiB0aGUgdXNlciBjb3VsZCBhZGQgdDYgdG8gdGhlICh0MyB0NCB0NSkKKwkgKiBz dWItam9pbiwgc28gd2UgZG9uJ3QgYWxsb3cgdGhhdC4gSWYgd2UgZGlkIHdhbnQgdG8gYWxsb3cg aXQsIHRoZSBsb2dpYworCSAqIGVhcmxpZXIgaW4gdGhpcyBmdW5jdGlvbiB3b3VsZCByZXF1aXJl IHN1YnN0YW50aWFsIGFkanVzdG1lbnQ6IHdlIGNvdWxkCisJICogYWxsb3cgdGhlIHQzLXQ0LXQ1 LXQ2IGpvaW4gdG8gYmUgYnVpbHQgaGVyZSwgYnV0IHRoZSBuZXh0IHN0ZXAgb2YKKwkgKiBqb2lu aW5nIHQxLXQyIHRvIHRoZSByZXN1bHQgd291bGQgc3RpbGwgYmUgcmVqZWN0ZWQuCisJICovCisJ cmV0dXJuICFzdWJsaXN0OworfQorCisvKgorICogRG9lcyBhIGNlcnRhaW4gaXRlbSBvZiBqb2lu IG1ldGhvZCBhZHZpY2UgcGVybWl0IGEgY2VydGFpbiBqb2luPworICoKKyAqIEFkdmljZSBzdWNo IGFzIEhBU0hfSk9JTigoeCB5KSkgbWVhbnMgdGhhdCB0aGVyZSBzaG91bGQgYmUgYSBoYXNoIGpv aW4gd2l0aAorICogZXhhY3RseSB4IGFuZCB5IG9uIHRoZSBpbm5lciBzaWRlLiBPYnZpb3VzbHks IHRoaXMgbWVhbnMgdGhhdCBpZiB3ZSBhcmUKKyAqIGNvbnNpZGVyaW5nIGEgam9pbiB3aXRoIGV4 YWN0bHkgeCBhbmQgeSBvbiB0aGUgaW5uZXIgc2lkZSwgd2Ugc2hvdWxkIGVuZm9yY2UKKyAqIHRo ZSB1c2Ugb2YgYSBoYXNoIGpvaW4uIEhvd2V2ZXIsIGl0IGFsc28gbWVhbnMgdGhhdCB3ZSBtdXN0 IHJlamVjdCBzb21lCisgKiBpbmNvbXBhdGlibGUgam9pbiBvcmRlcnMgZW50aXJlbHkuICBGb3Ig ZXhhbXBsZSwgYSBqb2luIHdpdGggZXhhY3RseSB4CisgKiBhbmQgeSBvbiB0aGUgb3V0ZXIgc2lk ZSBzaG91bGRuJ3QgYmUgYWxsb3dlZCwgYmVjYXVzZSBzdWNoIHBhdGhzIG1pZ2h0IHdpbgorICog b3ZlciB0aGUgYWR2aWNlLWRyaXZlbiBwYXRoIG9uIGNvc3QuCisgKgorICogVG8gYWNjb21tb2Rh dGUgdGhlc2UgcmVxdWlyZW1lbnRzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUg am9pbgorICogc2hvdWxkIGJlIGFsbG93ZWQgYW5kIGZhbHNlIGlmIGl0IHNob3VsZCBub3QuIEZ1 cnRoZXJtb3JlLCAqcmVzdHJpY3RfbWV0aG9kCisgKiBpcyBzZXQgdG8gdHJ1ZSBpZiB0aGUgam9p biBtZXRob2Qgc2hvdWxkIGJlIGVuZm9yY2VkIGFuZCBmYWxzZSBpZiBub3QuCisgKi8KK3N0YXRp YyBib29sCitwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGlu dCBpbm5lcl9jb3VudCwKKwkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkg IHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCSAgYm9vbCAqcmVzdHJpY3RfbWV0aG9k KQoreworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0ID0gZW50cnktPnRhcmdldDsKKwlwZ3Bh X2l0bV90eXBlIGlubmVyX2l0bTsKKwlwZ3BhX2l0bV90eXBlIG91dGVyX2l0bTsKKwlwZ3BhX2l0 bV90eXBlIGpvaW5faXRtOworCisJLyogV2UgZGVmaW5pdGVseSBoYXZlIGF0IGxlYXN0IGEgcGFy dGlhbCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRyeS4gKi8KKwllbnRyeS0+ZmxhZ3MgfD0gUEdQ QV9URV9NQVRDSF9QQVJUSUFMOworCisJKnJlc3RyaWN0X21ldGhvZCA9IGZhbHNlOworCisJLyoK KwkgKiBJZiBvdXIgaW5uZXIgcmVsIG1lbnRpb25zIGV4YWN0bHkgdGhlIHNhbWUgcmVsYXRpb25z IGFzIHRoZSBhZHZpY2UKKwkgKiB0YXJnZXQsIGFsbG93IHRoZSBqb2luIGFuZCBlbmZvcmNlIHRo ZSBqb2luIG1ldGhvZCByZXN0cmljdGlvbi4KKwkgKgorCSAqIElmIG91ciBpbm5lciByZWwgbWVu dGlvbnMgYSBzdXBlcnNldCBvZiB0aGUgdGFyZ2V0IHJlbGF0aW9ucywgYWxsb3cgdGhlCisJICog am9pbi4gVGhlIGpvaW4gd2UgY2FyZSBhYm91dCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSwgYW5k IHRoaXMgYWR2aWNlCisJICogaW1wb3NlcyBubyBmdXJ0aGVyIHJlc3RyaWN0aW9ucy4KKwkgKi8K Kwlpbm5lcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbm5lcl9jb3VudCwK KwkJCQkJCQkJCQkJICByaWRzICsgb3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCSAgdGFyZ2V0KTsK KwlpZiAoaW5uZXJfaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCXsKKwkJZW50cnktPmZsYWdzIHw9 IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwkJKnJlc3RyaWN0X21ldGhvZCA9IHRydWU7CisJCXJldHVy biB0cnVlOworCX0KKwllbHNlIGlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVf U1VCU0VUKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogSWYgb3VyIG91dGVyIHJlbCBtZW50 aW9ucyBhIHN1cHNlcnNldCBvZiB0aGUgcmVsYXRpb25zIGluIHRoZSBhZHZpY2UKKwkgKiB0YXJn ZXQsIG5vIHJlc3RyaWN0aW9ucyBhcHBseS4gVGhlIGpvaW4gd2UgY2FyZSBoYXMgYWxyZWFkeSB0 YWtlbgorCSAqIHBsYWNlLCBhbmQgdGhpcyBhZHZpY2UgaW1wb3NlcyBubyBmdXJ0aGVyIHJlc3Ry aWN0aW9ucy4KKwkgKgorCSAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBvdXIgb3V0ZXIgcmVsIG1l bnRpb25zIGV4YWN0bHkgdGhlIHJlbGF0aW9ucworCSAqIG1lbnRpb25lZCBpbiB0aGUgYWR2aWNl IHRhcmdldCwgdGhlIHBsYW5uZXIgaXMgdHJ5aW5nIHRvIHJldmVyc2UgdGhlCisJICogc2lkZXMg b2YgdGhlIGpvaW4gYXMgY29tcGFyZWQgd2l0aCBvdXIgZGVzaXJlZCBvdXRjb21lLiBSZWplY3Qg dGhhdC4KKwkgKi8KKwlvdXRlcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChv dXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJICByaWRzLCB0YXJnZXQpOworCWlmIChvdXRlcl9pdG0g PT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlIGlm IChvdXRlcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJ ICogSWYgdGhlIGFkdmljZSB0YXJnZXQgbWVudGlvbnMgb25seSBhIHNpbmdsZSByZWxhdGlvbiwg dGhlIHRlc3QgYmVsb3cKKwkgKiBjYW5ub3QgZXZlciBwYXNzLCBzbyBzYXZlIHNvbWUgd29yayBi eSBleGl0aW5nIG5vdy4KKwkgKi8KKwlpZiAodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9J REVOVElGSUVSKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElmIGV2ZXJ5dGhpbmcgaW4g dGhlIGpvaW5yZWwgaXMgYXBwZWFycyBpbiB0aGUgYWR2aWNlIHRhcmdldCwgd2UncmUKKwkgKiBi ZWxvdyB0aGUgbGV2ZWwgb2YgdGhlIGpvaW4gd2Ugd2FudCB0byBjb250cm9sLgorCSAqCisJICog Rm9yIGV4YW1wbGUsIEhBU0hfSk9JTigoeCB5KSkgZG9lc24ndCByZXN0cmljdCBob3cgeCBhbmQg eSBjYW4gYmUKKwkgKiBqb2luZWQuCisJICoKKwkgKiBUaGlzIGxvb2t1cCBzaG91bGRuJ3QgcmV0 dXJuIFBHUEFfSVRNX0RJU0pPSU5ULCBiZWNhdXNlIGFueSBzdWNoIGFkdmljZQorCSAqIHNob3Vs ZCBub3QgaGF2ZSBiZWVuIHJldHVybmVkIGZyb20gdGhlIHRyb3ZlIGluIHRoZSBmaXJzdCBwbGFj ZS4KKwkgKi8KKwlqb2luX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVy X2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSByaWRzLCB0YXJnZXQpOworCUFzc2Vy dChqb2luX2l0bSAhPSBQR1BBX0lUTV9ESVNKT0lOVCk7CisJaWYgKGpvaW5faXRtID09IFBHUEFf SVRNX0tFWVNfQVJFX1NVQlNFVCB8fAorCQlqb2luX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwkJ cmV0dXJuIHRydWU7CisKKwkvKgorCSAqIFdlJ3ZlIGFscmVhZHkgcGVybWl0dGVkIGFsbCBhbGxv d2FibGUgY2FzZXMsIHNvIHJlamVjdCB0aGlzLgorCSAqCisJICogSWYgd2UgcmVhY2ggdGhpcyBw b2ludCwgdGhlbiB0aGUgYWR2aWNlIG92ZXJsYXBzIHdpdGggdGhpcyBqb2luIGJ1dAorCSAqIGlz bid0IGVudGlyZWx5IGNvbnRhaW5lZCB3aXRoaW4gZWl0aGVyIHNpZGUsIGFuZCB0aGVyZSdzIGFs c28gYXQgbGVhc3QKKwkgKiBvbmUgcmVsYXRpb24gcHJlc2VudCBpbiB0aGUgam9pbiB0aGF0IGlz bid0IG1lbnRpb25lZCBieSB0aGUgYWR2aWNlLgorCSAqCisJICogRm9yIGluc3RhbmNlLCBpbiB0 aGUgSEFTSF9KT0lOKCh4IHkpKSBleGFtcGxlLCB3ZSB3b3VsZCByZWFjaCBoZXJlIGlmIHgKKwkg KiB3ZXJlIG9uIG9uZSBzaWRlIG9mIHRoZSBqb2luLCB5IG9uIHRoZSBvdGhlciwgYW5kIGF0IGxl YXN0IG9uZSBvZiB0aGUKKwkgKiB0d28gc2lkZXMgYWxzbyBpbmNsdWRlZCBzb21lIG90aGVyIHJl bGF0aW9uLCBzYXkgdC4gSW4gdGhhdCBjYXNlLAorCSAqIGFjY2VwdGluZyB0aGlzIGpvaW4gd291 bGQgYWxsb3cgdGhlICh4IHkgdCkgam9pbnJlbCB0byBjb250YWluCisJICogbm9uLWRpc2FibGVk IHBhdGhzIHRoYXQgZG8gbm90IHB1dCAoeCB5KSBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIGhhc2gK KwkgKiBqb2luOyB3ZSBjb3VsZCBpbnN0ZWFkIGVuZCB1cCB3aXRoIHNvbWV0aGluZyBsaWtlICh4 IEpPSU4gdCkgSk9JTiB5LgorCSAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMg YWR2aWNlIGNvbmNlcm5pbmcgYW4gb3BhcXVlIGpvaW4gcGVybWl0IGEgY2VydGFpbiBqb2luPwor ICoKKyAqIEJ5IGFuIG9wYXF1ZSBqb2luLCB3ZSBtZWFuIG9uZSB3aGVyZSB0aGUgZXhhY3QgbWVj aGFuaXNtIGJ5IHdoaWNoIHRoZQorICogam9pbiBpcyBwZXJmb3JtZWQgaXMgbm90IHZpc2libGUg dG8gUG9zdGdyZVNRTC4gQ3VycmVudGx5IHRoaXMgaXMgdGhlCisgKiBjYXNlIG9ubHkgZm9yIGZv cmVpZ24gam9pbnM6IEZPUkVJR05fSk9JTigoeCB5IHopKSBtZWFucyB0aGF0IHgsIHksIGFuZAor ICogeiBhcmUgam9pbmVkIG9uIHRoZSByZW1vdGUgc2lkZSwgYnV0IHdlIGtub3cgbm90aGluZyBh Ym91dCB0aGUgam9pbiBvcmRlcgorICogb3Igam9pbiBtZXRob2RzIHVzZWQgb3ZlciB0aGVyZS4K KyAqLworc3RhdGljIGJvb2wKK3BncGFfb3BhcXVlX2pvaW5fcGVybWl0c19qb2luKGludCBvdXRl cl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWRz LAorCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJICBib29sICpyZXN0 cmljdF9tZXRob2QpCit7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQgPSBlbnRyeS0+dGFy Z2V0OworCXBncGFfaXRtX3R5cGUgam9pbl9pdG07CisKKwkvKiBXZSBkZWZpbml0ZWx5IGhhdmUg YXQgbGVhc3QgYSBwYXJ0aWFsIG1hdGNoIGZvciB0aGlzIHRyb3ZlIGVudHJ5LiAqLworCWVudHJ5 LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisKKwkqcmVzdHJpY3RfbWV0aG9kID0g ZmFsc2U7CisKKwlqb2luX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVy X2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSByaWRzLCB0YXJnZXQpOworCWlmIChq b2luX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwl7CisJCS8qCisJCSAqIFdlIGhhdmUgYW4gZXhh Y3QgbWF0Y2gsIGFuZCBzaG91bGQgdGhlcmVmb3JlIGFsbG93IHRoZSBqb2luIGFuZAorCQkgKiBl bmZvcmNlIHRoZSB1c2Ugb2YgdGhlIHJlbGV2YW50IG9wYXF1ZSBqb2luIG1ldGhvZC4KKwkJICov CisJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJCSpyZXN0cmljdF9tZXRo b2QgPSB0cnVlOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAoam9pbl9pdG0gPT0gUEdQQV9J VE1fS0VZU19BUkVfU1VCU0VUIHx8CisJCWpvaW5faXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJF X1NVQlNFVCkKKwl7CisJCS8qCisJCSAqIElmIGpvaW5faXRtID09IFBHUEFfSVRNX1RBUkdFVFNf QVJFX1NVQlNFVCwgdGhlbiB0aGUgam9pbiB3ZSBjYXJlCisJCSAqIGFib3V0IGhhcyBhbHJlYWR5 IHRha2VuIHBsYWNlIGFuZCBubyBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBhcHBseS4KKwkJICoKKwkJ ICogSWYgam9pbl9pdG0gPT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VULCB3ZSdyZSBzdGlsbCBi dWlsZGluZyB1cCB0bworCQkgKiB0aGUgam9pbiB3ZSBjYXJlIGFib3V0IGFuZCBoYXZlIG5vdCBp bnRyb2R1Y2VkIGFueSBleHRyYW5lb3VzCisJCSAqIHJlbGF0aW9ucyBub3QgbmFtZWQgaW4gdGhl IGFkdmljZS4gTm90ZSB0aGF0IEZvcmVpZ25TY2FuIHBhdGhzIGZvcgorCQkgKiBqb2lucyBhcmUg YnVpbHQgdXAgZnJvbSBGb3JlaWduU2NhbiBwYXRocyBmcm9tIHVuZGVybHlpbmcgam9pbnMgYW5k CisJCSAqIHNjYW5zLCBzbyB3ZSBtdXN0IG5vdCBkaXNhYmxlIHRoaXMgam9pbiB3aGVuIGNvbnNp ZGVyaW5nIGEgc3Vic2V0CisJCSAqIG9mIHRoZSByZWxhdGlvbnMgd2UgdWx0aW1hdGVseSB3YW50 LgorCQkgKi8KKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoKKwkgKiBUaGUgYWR2aWNlIG92ZXJs YXBzIHRoZSBqb2luLCBidXQgYXQgbGVhc3Qgb25lIHJlbGF0aW9uIGlzIHByZXNlbnQgaW4KKwkg KiB0aGUgam9pbiB0aGF0IGlzbid0IG1lbnRpb25lZCBieSB0aGUgYWR2aWNlLiBXZSB3YW50IHRv IGRpc2FibGUgc3VjaAorCSAqIHBhdGhzIHNvIHRoYXQgd2UgYWN0dWFsbHkgcHVzaCBkb3duIHRo ZSBqb2luIGFzIGludGVuZGVkLgorCSAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIEFw cGx5IHNjYW4gYWR2aWNlIHRvIGEgUmVsT3B0SW5mby4KKyAqCisgKiBYWFguIEZvciBiaXRtYXAg aGVhcCBzY2Fucywgd2UncmUganVzdCBpZ25vcmluZyB0aGUgaW5kZXggaW5mb3JtYXRpb24gZnJv bQorICogdGhlIGFkdmljZS4gVGhhdCdzIG5vdCBjb29sLgorICovCitzdGF0aWMgdm9pZAorcGdw YV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCQkgICBw Z3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJpZXMsCisJCQkJCQkJICAgQml0bWFwc2V0ICpzY2Fu X2luZGV4ZXMsCisJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqcmVsX2VudHJpZXMsCisJCQkJ CQkJICAgQml0bWFwc2V0ICpyZWxfaW5kZXhlcykKK3sKKwlib29sCQlnYXRoZXJfY29uZmxpY3Qg PSBmYWxzZTsKKwlCaXRtYXBzZXQgICpnYXRoZXJfcGFydGlhbF9tYXRjaCA9IE5VTEw7CisJQml0 bWFwc2V0ICAqZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBOVUxMOworCWludAkJCWkgPSAtMTsKKwlwZ3Bh X3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJ5ID0gTlVMTDsKKwlpbnQJCQlmbGFnczsKKwlib29sCQlz Y2FuX3R5cGVfY29uZmxpY3QgPSBmYWxzZTsKKwlCaXRtYXBzZXQgICpzY2FuX3R5cGVfaW5kZXhl cyA9IE5VTEw7CisJQml0bWFwc2V0ICAqc2Nhbl90eXBlX3JlbF9pbmRleGVzID0gTlVMTDsKKwl1 aW50NjQJCWdhdGhlcl9tYXNrID0gMDsKKwl1aW50NjQJCXNjYW5fdHlwZSA9IDA7CisKKwkvKiBT Y3J1dGluaXplIGF2YWlsYWJsZSBzY2FuIGFkdmljZS4gKi8KKwl3aGlsZSAoKGkgPSBibXNfbmV4 dF9tZW1iZXIoc2Nhbl9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkg Km15X2VudHJ5ID0gJnNjYW5fZW50cmllc1tpXTsKKwkJdWludDY0CQlteV9zY2FuX3R5cGUgPSAw OworCisJCS8qIFRyYW5zbGF0ZSBvdXIgYWR2aWNlIHRhZ3MgdG8gYSBzY2FuIHN0cmF0ZWd5IGFk dmljZSB2YWx1ZS4gKi8KKwkJaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfQklUTUFQX0hF QVBfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19CSVRNQVBTQ0FOOworCQllbHNlIGlmICht eV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTikKKwkJCW15X3NjYW5fdHlw ZSA9IFBHU19JTkRFWE9OTFlTQ0FOIHwgUEdTX0NPTlNJREVSX0lOREVYT05MWTsKKwkJZWxzZSBp ZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19JTkRFWF9TQ0FOKQorCQkJbXlfc2Nhbl90eXBl ID0gUEdTX0lOREVYU0NBTjsKKwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19T RVFfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19TRVFTQ0FOOworCQllbHNlIGlmIChteV9l bnRyeS0+dGFnID09IFBHUEFfVEFHX1RJRF9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0gUEdTX1RJ RFNDQU47CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyB1bmRlcnN0YW5kYWJsZSBzY2FuIGFkdmlj ZSwgaGFuZyBvbiB0byB0aGUgZW50cnksIHRoZQorCQkgKiBpbmZlcnJlZCBzY2FuIHR5cGUgdHlw ZSwgYW5kIHRoZSBpbmRleCBhdCB3aGljaCB3ZSBmb3VuZCBpdC4KKwkJICoKKwkJICogQWxzbyBt YWtlIGEgbm90ZSBpZiB3ZSBzZWUgY29uZmxpY3Rpbmcgc2NhbiB0eXBlIGFkdmljZS4gTm90ZSB0 aGF0CisJCSAqIHdlIHJlZ2FyZCB0d28gaW5kZXggc3BlY2lmaWNhdGlvbnMgYXMgY29uZmxpY3Rp bmcgdW5sZXNzIHRoZXkgbWF0Y2gKKwkJICogZXhhY3RseS4gSW4gdGhlb3J5LCBwZXJoYXBzIHdl IGNvdWxkIHJlZ2FyZCBJTkRFWF9TQ0FOKGEgYykgYW5kCisJCSAqIElOREVYX1NDQU4oYSBiLmMp IGFzIG5vbi1jb25mbGljdGluZyBpZiBpdCBoYXBwZW5zIHRoYXQgdGhlIG9ubHkKKwkJICogaW5k ZXggbmFtZWQgYyBpcyBpbiBzY2hlbWEgYiwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCB0aGUg Y29kZS4KKwkJICovCisJCWlmIChteV9zY2FuX3R5cGUgIT0gMCkKKwkJeworCQkJaWYgKHNjYW5f dHlwZSAhPSAwICYmIHNjYW5fdHlwZSAhPSBteV9zY2FuX3R5cGUpCisJCQkJc2Nhbl90eXBlX2Nv bmZsaWN0ID0gdHJ1ZTsKKwkJCWlmICghc2Nhbl90eXBlX2NvbmZsaWN0ICYmIHNjYW5fZW50cnkg IT0gTlVMTCAmJgorCQkJCW15X2VudHJ5LT50YXJnZXQtPml0YXJnZXQgIT0gTlVMTCAmJgorCQkJ CXNjYW5fZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBOVUxMICYmCisJCQkJIXBncGFfaW5kZXhf dGFyZ2V0c19lcXVhbChzY2FuX2VudHJ5LT50YXJnZXQtPml0YXJnZXQsCisJCQkJCQkJCQkJICBt eV9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0KSkKKwkJCQlzY2FuX3R5cGVfY29uZmxpY3QgPSB0cnVl OworCQkJc2Nhbl9lbnRyeSA9IG15X2VudHJ5OworCQkJc2Nhbl90eXBlID0gbXlfc2Nhbl90eXBl OworCQkJc2Nhbl90eXBlX2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihzY2FuX3R5cGVfaW5kZXhl cywgaSk7CisJCX0KKwl9CisKKwkvKiBTY3J1dGluaXplIGF2YWlsYWJsZSBnYXRoZXItcmVsYXRl ZCBhbmQgcGFydGl0aW9ud2lzZSBhZHZpY2UuICovCisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJt c19uZXh0X21lbWJlcihyZWxfaW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3ZlX2Vu dHJ5ICpteV9lbnRyeSA9ICZyZWxfZW50cmllc1tpXTsKKwkJdWludDY0CQlteV9nYXRoZXJfbWFz ayA9IDA7CisJCWJvb2wJCWp1c3Rfb25lX3JlbDsKKworCQlqdXN0X29uZV9yZWwgPSBteV9lbnRy eS0+dGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSCisJCQl8fCBsaXN0X2xl bmd0aChteV9lbnRyeS0+dGFyZ2V0LT5jaGlsZHJlbikgPT0gMTsKKworCQkvKgorCQkgKiBQQVJU SVRJT05XSVNFIGJlaGF2ZXMgbGlrZSBhIHNjYW4gdHlwZSwgZXhjZXB0IHRoYXQgaWYgdGhlcmUn cyBtb3JlCisJCSAqIHRoYW4gb25lIHJlbGF0aW9uIHRhcmdldGVkLCBpdCBoYXMgbm8gZWZmZWN0 IGF0IHRoaXMgbGV2ZWwuCisJCSAqLworCQlpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19Q QVJUSVRJT05XSVNFKQorCQl7CisJCQlpZiAoanVzdF9vbmVfcmVsKQorCQkJeworCQkJCWNvbnN0 IHVpbnQ2NCBteV9zY2FuX3R5cGUgPSBQR1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQUEVORDsKKwor CQkJCWlmIChzY2FuX3R5cGUgIT0gMCAmJiBzY2FuX3R5cGUgIT0gbXlfc2Nhbl90eXBlKQorCQkJ CQlzY2FuX3R5cGVfY29uZmxpY3QgPSB0cnVlOworCQkJCXNjYW5fZW50cnkgPSBteV9lbnRyeTsK KwkJCQlzY2FuX3R5cGUgPSBteV9zY2FuX3R5cGU7CisJCQkJc2Nhbl90eXBlX3JlbF9pbmRleGVz ID0KKwkJCQkJYm1zX2FkZF9tZW1iZXIoc2Nhbl90eXBlX3JlbF9pbmRleGVzLCBpKTsKKwkJCX0K KwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogR0FUSEVSIGFuZCBHQVRIRVJfTUVSR0Ug YXBwbGllZCB0byBhIHNpbmdsZSByZWwgbWVhbiB0aGF0IHdlIHNob3VsZAorCQkgKiB1c2UgdGhl IGNvcnJlc3BvbmRpbmdzIHN0cmF0ZWd5IGhlcmUsIHdoaWxlIGFwcGx5aW5nIGVpdGhlciB0byBt b3JlCisJCSAqIHRoYW4gb25lIHJlbCBtZWFucyB3ZSBzaG91bGQgbm90IHVzZSB0aG9zZSBzdHJh dGVnaWVzIGhlcmUsIGJ1dAorCQkgKiByYXRoZXIgYXQgdGhlIGxldmVsIG9mIHRoZSBqb2lucmVs IHRoYXQgY29ycmVzcG9uZHMgdG8gd2hhdCB3YXMKKwkJICogc3BlY2lmaWVkLiBOT19HQVRIRVIg Y2FuIG9ubHkgYmUgYXBwbGllZCB0byBzaW5nbGUgcmVscy4KKwkJICoKKwkJICogTm90ZSB0aGF0 IHNldHRpbmcgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaW4gbXlfZ2F0aGVyX21hc2sgaXMKKwkJ ICogZXF1aXZhbGVudCB0byBhbGxvd2luZyB0aGUgbm9uLXVzZSBvZiBlaXRoZXIgZm9ybSBvZiBH YXRoZXIgaGVyZS4KKwkJICovCisJCWlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhF UiB8fAorCQkJbXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVJfTUVSR0UpCisJCXsKKwkJ CWlmICghanVzdF9vbmVfcmVsKQorCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05P TlBBUlRJQUw7CisJCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUikK KwkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19HQVRIRVI7CisJCQllbHNlCisJCQkJbXlfZ2F0aGVy X21hc2sgPSBQR1NfR0FUSEVSX01FUkdFOworCQl9CisJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcg PT0gUEdQQV9UQUdfTk9fR0FUSEVSKQorCQl7CisJCQlBc3NlcnQoanVzdF9vbmVfcmVsKTsKKwkJ CW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCX0KKworCQkvKgor CQkgKiBJZiB3ZSBzZXQgbXlfZ2F0aGVyX21hc2sgdXAgYWJvdmUsIHRoZW4gd2UgKDEpIG1ha2Ug YSBub3RlIGlmIHRoZQorCQkgKiBhZHZpY2UgY29uZmxpY3RlZCwgKDIpIHJlbWVtYmVyIHRoZSBt YXNrIHZhbHVlLCBhbmQgKDMpIHJlbWVtYmVyCisJCSAqIHdoZXRoZXIgdGhpcyB3YXMgYSBmdWxs IG9yIHBhcnRpYWwgbWF0Y2guCisJCSAqLworCQlpZiAobXlfZ2F0aGVyX21hc2sgIT0gMCkKKwkJ eworCQkJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgZ2F0aGVyX21hc2sgIT0gbXlfZ2F0aGVyX21h c2spCisJCQkJZ2F0aGVyX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCWdhdGhlcl9tYXNrID0gbXlfZ2F0 aGVyX21hc2s7CisJCQlpZiAoanVzdF9vbmVfcmVsKQorCQkJCWdhdGhlcl9mdWxsX21hdGNoID0g Ym1zX2FkZF9tZW1iZXIoZ2F0aGVyX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxzZQorCQkJCWdhdGhl cl9wYXJ0aWFsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX3BhcnRpYWxfbWF0Y2gsIGkp OworCQl9CisJfQorCisJLyogRW5mb3JjZSBjaG9pY2Ugb2YgaW5kZXguICovCisJaWYgKHNjYW5f ZW50cnkgIT0gTlVMTCAmJiAhc2Nhbl90eXBlX2NvbmZsaWN0ICYmCisJCShzY2FuX2VudHJ5LT50 YWcgPT0gUEdQQV9UQUdfSU5ERVhfU0NBTiB8fAorCQkgc2Nhbl9lbnRyeS0+dGFnID09IFBHUEFf VEFHX0lOREVYX09OTFlfU0NBTikpCisJeworCQlwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldCA9 IHNjYW5fZW50cnktPnRhcmdldC0+aXRhcmdldDsKKwkJSW5kZXhPcHRJbmZvICptYXRjaGVkX2lu ZGV4ID0gTlVMTDsKKworCQlBc3NlcnQoaXRhcmdldC0+aXR5cGUgPT0gUEdQQV9JTkRFWF9OQU1F KTsKKworCQlmb3JlYWNoX25vZGUoSW5kZXhPcHRJbmZvLCBpbmRleCwgcmVsLT5pbmRleGxpc3Qp CisJCXsKKwkJCWNoYXIJICAgKnJlbG5hbWUgPSBnZXRfcmVsX25hbWUoaW5kZXgtPmluZGV4b2lk KTsKKwkJCU9pZAkJCW5zcG9pZCA9IGdldF9yZWxfbmFtZXNwYWNlKGluZGV4LT5pbmRleG9pZCk7 CisJCQljaGFyCSAgICpyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWUobnNwb2lkKTsK KworCQkJaWYgKHN0cmNtcChpdGFyZ2V0LT5pbmRuYW1lLCByZWxuYW1lKSA9PSAwICYmCisJCQkJ KGl0YXJnZXQtPmluZG5hbWVzcGFjZSA9PSBOVUxMIHx8CisJCQkJIHN0cmNtcChpdGFyZ2V0LT5p bmRuYW1lc3BhY2UsIHJlbG5hbWVzcGFjZSkgPT0gMCkpCisJCQl7CisJCQkJbWF0Y2hlZF9pbmRl eCA9IGluZGV4OworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKG1hdGNoZWRfaW5kZXgg PT0gTlVMTCkKKwkJeworCQkJLyogRG9uJ3QgZm9yY2UgdGhlIHNjYW4gdHlwZSBpZiB0aGUgaW5k ZXggZG9lc24ndCBleGlzdC4gKi8KKwkJCXNjYW5fdHlwZSA9IDA7CisKKwkJCS8qIE1hcmsgYWR2 aWNlIGFzIGluYXBwbGljYWJsZS4gKi8KKwkJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHNjYW5fZW50 cmllcywgc2Nhbl90eXBlX2luZGV4ZXMsCisJCQkJCQkJCSBQR1BBX1RFX0lOQVBQTElDQUJMRSk7 CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBSZXRhaW4gdGhpcyBpbmRleCBhbmQgZGlzY2FyZCB0 aGUgcmVzdC4gKi8KKwkJCXJlbC0+aW5kZXhsaXN0ID0gbGlzdF9tYWtlMShtYXRjaGVkX2luZGV4 KTsKKwkJfQorCX0KKworCS8qCisJICogTWFyayBhbGwgdGhlIHNjYW4gbWV0aG9kIGVudHJpZXMg YXMgZnVsbHkgbWF0Y2hlZDsgYW5kIGlmIHRoZXkgc3BlY2lmeQorCSAqIGRpZmZlcmVudCB0aGlu Z3MsIG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJZmxhZ3MgPSBQR1BBX1RF X01BVENIX1BBUlRJQUwgfCBQR1BBX1RFX01BVENIX0ZVTEw7CisJaWYgKHNjYW5fdHlwZV9jb25m bGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ryb3ZlX3NldF9m bGFncyhzY2FuX2VudHJpZXMsIHNjYW5fdHlwZV9pbmRleGVzLCBmbGFncyk7CisJcGdwYV90cm92 ZV9zZXRfZmxhZ3MocmVsX2VudHJpZXMsIHNjYW5fdHlwZV9yZWxfaW5kZXhlcywgZmxhZ3MpOwor CisJLyoKKwkgKiBNYXJrIGV2ZXJ5IEdhdGhlci1yZWxhdGVkIHBpZWNlIG9mIGFkdmljZSBhcyBw YXJ0aWFsbHkgbWF0Y2hlZC4gTWFyaworCSAqIHRoZSBvbmVzIHRoYXQgaW5jbHVkZWQgdGhpcyBy ZWxhdGlvbiBhcyBhIHRhcmdldCBieSBpdHNlbGYgYXMgZnVsbHkKKwkgKiBtYXRjaGVkLiBJZiB0 aGVyZSB3YXMgYSBjb25mbGljdCwgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4KKwkgKi8K KwlmbGFncyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAoZ2F0aGVyX2NvbmZsaWN0KQor CQlmbGFncyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHJl bF9lbnRyaWVzLCBnYXRoZXJfcGFydGlhbF9tYXRjaCwgZmxhZ3MpOworCWZsYWdzIHw9IFBHUEFf VEVfTUFUQ0hfRlVMTDsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhyZWxfZW50cmllcywgZ2F0aGVy X2Z1bGxfbWF0Y2gsIGZsYWdzKTsKKworCS8qIElmIHRoZXJlIGlzIGEgbm9uLWNvbmZsaWN0aW5n IHNjYW4gc3BlY2lmaWNhdGlvbiwgZW5mb3JjZSBpdC4gKi8KKwlpZiAoc2Nhbl90eXBlICE9IDAg JiYgIXNjYW5fdHlwZV9jb25mbGljdCkKKwl7CisJCXJlbC0+cGdzX21hc2sgJj0KKwkJCX4oUEdT X1NDQU5fQU5ZIHwgUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQgfAorCQkJICBQR1NfQ09O U0lERVJfSU5ERVhPTkxZKTsKKwkJcmVsLT5wZ3NfbWFzayB8PSBzY2FuX3R5cGU7CisJfQorCisJ LyogSWYgdGhlcmUgaXMgYSBub24tY29uZmxpY3RpbmcgZ2F0aGVyIHNwZWNpZmljYXRpb24sIGVu Zm9yY2UgaXQuICovCisJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgIWdhdGhlcl9jb25mbGljdCkK Kwl7CisJCXJlbC0+cGdzX21hc2sgJj0KKwkJCX4oUEdTX0dBVEhFUiB8IFBHU19HQVRIRVJfTUVS R0UgfCBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCk7CisJCXJlbC0+cGdzX21hc2sgfD0gZ2F0aGVy X21hc2s7CisJfQorfQorCisvKgorICogQWRkIGZlZWRiYWNrIGVudHJpZXMgdG8gZm9yIG9uZSB0 cm92ZSBzbGljZSB0byB0aGUgcHJvdmlkZWQgbGlzdCBhbmQKKyAqIHJldHVybiB0aGUgcmVzdWx0 aW5nIGxpc3QuCisgKgorICogRmVlZGJhY2sgZW50cmllcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhl IHRyb3ZlIGVudHJ5J3MgZmxhZ3MuIEl0J3MgYXNzdW1lZAorICogdGhhdCB0aGUgY2FsbGVyIGhh cyBhbHJlYWR5IHNldCBhbGwgcmVsZXZhbnQgZmxhZ3Mgd2l0aCB0aGUgZXhjZXB0aW9uIG9mCisg KiBQR1BBX1RFX0ZBSUxFRC4gV2Ugc2V0IHRoYXQgZmxhZyBoZXJlIGlmIGFwcHJvcHJpYXRlLgor ICovCitzdGF0aWMgTGlzdCAqCitwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNrKExpc3QgKmxp c3QsIHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJCSBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5 cGUsCisJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJIHBn cGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyKQoreworCXBncGFfdHJvdmVfZW50cnkgKmVu dHJpZXM7CisJaW50CQkJbmVudHJpZXM7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0 cmluZ0luZm8oJmJ1Zik7CisJcGdwYV90cm92ZV9sb29rdXBfYWxsKHRyb3ZlLCB0eXBlLCAmZW50 cmllcywgJm5lbnRyaWVzKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG5lbnRyaWVzOyArK2kpCisJ eworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZlbnRyaWVzW2ldOworCQlEZWZFbGVtICAg ICppdGVtOworCisJCS8qCisJCSAqIElmIHRoaXMgZW50cnkgd2FzIGZ1bGx5IG1hdGNoZWQsIGNo ZWNrIHdoZXRoZXIgZ2VuZXJhdGluZyBhZHZpY2UKKwkJICogZnJvbSB0aGlzIHBsYW4gd291bGQg cHJvZHVjZSBzdWNoIGFuIGVudHJ5LiBJZiBub3QsIGxhYmVsIHRoZSBlbnRyeQorCQkgKiBhcyBm YWlsZWQuCisJCSAqLworCQlpZiAoKGVudHJ5LT5mbGFncyAmIFBHUEFfVEVfTUFUQ0hfRlVMTCkg IT0gMCAmJgorCQkJIXBncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZSh3YWxrZXIsIHJ0X2lkZW50aWZp ZXJzLAorCQkJCQkJCQkJICBlbnRyeS0+dGFnLCBlbnRyeS0+dGFyZ2V0KSkKKwkJCWVudHJ5LT5m bGFncyB8PSBQR1BBX1RFX0ZBSUxFRDsKKworCQlpdGVtID0gbWFrZURlZkVsZW0ocGdwYV9jc3Ry aW5nX3Ryb3ZlX2VudHJ5KGVudHJ5KSwKKwkJCQkJCSAgIChOb2RlICopIG1ha2VJbnRlZ2VyKGVu dHJ5LT5mbGFncyksIC0xKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgaXRlbSk7CisJfQorCisJ cmV0dXJuIGxpc3Q7Cit9CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisKKy8qCisgKiBG YXN0IGhhc2ggZnVuY3Rpb24gZm9yIGEga2V5IGNvbnNpc3Rpbmcgb2YgYW4gUlRJIGFuZCBwbGFu IG5hbWUuCisgKi8KK3N0YXRpYyB1aW50MzIKK3BncGFfcmlfY2hlY2tlcl9oYXNoX2tleShwZ3Bh X3JpX2NoZWNrZXJfa2V5IGtleSkKK3sKKwlmYXN0aGFzaF9zdGF0ZSBoczsKKwlpbnQJCQlzcF9s ZW47CisKKwlmYXN0aGFzaF9pbml0KCZocywgMCk7CisKKwlocy5hY2N1bSA9IGtleS5ydGk7CisJ ZmFzdGhhc2hfY29tYmluZSgmaHMpOworCisJLyogcGxhbl9uYW1lIGNhbiBiZSBOVUxMICovCisJ aWYgKGtleS5wbGFuX25hbWUgPT0gTlVMTCkKKwkJc3BfbGVuID0gMDsKKwllbHNlCisJCXNwX2xl biA9IGZhc3RoYXNoX2FjY3VtX2NzdHJpbmcoJmhzLCBrZXkucGxhbl9uYW1lKTsKKworCS8qIGhh c2hmbl91bnN0YWJsZS5oIHJlY29tbWVuZHMgdXNpbmcgc3RyaW5nIGxlbmd0aCBhcyB0d2VhayAq LworCXJldHVybiBmYXN0aGFzaF9maW5hbDMyKCZocywgc3BfbGVuKTsKK30KKworI2VuZGlmCisK Ky8qCisgKiBTYXZlIHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGZvciBvbmUgcmVsYXRpb24g Zm9yIGZ1dHVyZSBjcm9zcy1jaGVja2luZy4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcmlfY2hl Y2tlcl9zYXZlKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLCBQbGFubmVySW5mbyAqcm9vdCwKKwkJ CQkJIFJlbE9wdEluZm8gKnJlbCkKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJcGdw YV9yaV9jaGVja2VyX2tleSBrZXk7CisJcGdwYV9yaV9jaGVja2VyICpjaGVjazsKKwlwZ3BhX2lk ZW50aWZpZXIgcmlkOworCWNvbnN0IGNoYXIgKnJpZF9zdHJpbmc7CisJYm9vbAkJZm91bmQ7CisK KwlrZXkucnRpID0gYm1zX3NpbmdsZXRvbl9tZW1iZXIocmVsLT5yZWxpZHMpOworCWtleS5wbGFu X25hbWUgPSByb290LT5wbGFuX25hbWU7CisJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJfYnlfcnRp KHJvb3QsIGtleS5ydGksICZyaWQpOworCXJpZF9zdHJpbmcgPSBwZ3BhX2lkZW50aWZpZXJfc3Ry aW5nKCZyaWQpOworCWNoZWNrID0gcGdwYV9yaV9jaGVja19pbnNlcnQocHBzLT5yaV9jaGVja19o YXNoLCBrZXksICZmb3VuZCk7CisJQXNzZXJ0KCFmb3VuZCB8fCBzdHJjbXAoY2hlY2stPnJpZF9z dHJpbmcsIHJpZF9zdHJpbmcpID09IDApOworCWNoZWNrLT5yaWRfc3RyaW5nID0gcmlkX3N0cmlu ZzsKKyNlbmRpZgorfQorCisvKgorICogVmFsaWRhdGUgdGhhdCB0aGUgcmFuZ2UgdGFibGUgaWRl bnRpZmllcnMgd2Ugd2VyZSBhYmxlIHRvIGdlbmVyYXRlIGR1cmluZworICogcGxhbm5pbmcgbWF0 Y2ggdGhlIG9uZXMgd2UgZ2VuZXJhdGVkIGZyb20gdGhlIGZpbmFsIHBsYW4uCisgKi8KK3N0YXRp YyB2b2lkCitwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMs IFBsYW5uZWRTdG10ICpwc3RtdCkKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJcGdw YV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVyczsKKwlwZ3BhX3JpX2NoZWNrX2l0ZXJhdG9yIGl0 OworCXBncGFfcmlfY2hlY2tlciAqY2hlY2s7CisKKwkvKiBDcmVhdGUgaWRlbnRpZmllcnMgZnJv bSB0aGUgcGxhbm5lZCBzdGF0ZW1lbnQuICovCisJcnRfaWRlbnRpZmllcnMgPSBwZ3BhX2NyZWF0 ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KHBzdG10KTsKKworCS8qIEl0ZXJhdGUgb3Zl ciBpZGVudGlmaWVycyBjcmVhdGVkIGR1cmluZyBwbGFubmluZywgc28gd2UgY2FuIGNvbXBhcmUu ICovCisJcGdwYV9yaV9jaGVja19zdGFydF9pdGVyYXRlKHBwcy0+cmlfY2hlY2tfaGFzaCwgJml0 KTsKKwl3aGlsZSAoKGNoZWNrID0gcGdwYV9yaV9jaGVja19pdGVyYXRlKHBwcy0+cmlfY2hlY2tf aGFzaCwgJml0KSkgIT0gTlVMTCkKKwl7CisJCWludAkJCXJ0b2Zmc2V0ID0gMDsKKwkJY29uc3Qg Y2hhciAqcmlkX3N0cmluZzsKKwkJSW5kZXgJCWZsYXRfcnRpOworCisJCS8qCisJCSAqIElmIHRo ZXJlJ3Mgbm8gcGxhbiBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVudHJ5LCB0aGVuIHRoZQor CQkgKiBydG9mZnNldCBpcyAwLiBPdGhlcndpc2UsIHdlIGNhbiBzZWFyY2ggdGhlIFN1YlBsYW5S VEluZm8gbGlzdCB0bworCQkgKiBmaW5kIHRoZSBydG9mZnNldC4KKwkJICovCisJCWlmIChjaGVj ay0+a2V5LnBsYW5fbmFtZSAhPSBOVUxMKQorCQl7CisJCQlmb3JlYWNoX25vZGUoU3ViUGxhblJU SW5mbywgcnRpbmZvLCBwc3RtdC0+c3VicnRpbmZvcykKKwkJCXsKKwkJCQkvKgorCQkJCSAqIElm IHJ0aW5mby0+ZHVtbXkgaXMgc2V0LCB0aGVuIHRoZSBzdWJxdWVyeSdzIHJhbmdlIHRhYmxlCisJ CQkJICogd2lsbCBvbmx5IGhhdmUgYmVlbiBwYXJ0aWFsbHkgY29waWVkIHRvIHRoZSBmaW5hbCBy YW5nZQorCQkJCSAqIHRhYmxlLiBTcGVjaWZpY2FsbHksIG9ubHkgUlRFX1JFTEFUSU9OIGVudHJp ZXMgYW5kCisJCQkJICogUlRFX1NVQlFVRVJZIGVudHJpZXMgdGhhdCB3ZXJlIG9uY2UgUlRFX1JF TEFUSU9OIGVudHJpZXMKKwkJCQkgKiB3aWxsIGJlIGNvcGllZCwgYXMgcGVyIGFkZF9ydGVzX3Rv X2ZsYXRfcnRhYmxlLiBUaGVyZWZvcmUsCisJCQkJICogdGhlcmUncyBubyBmaXhlZCBydG9mZnNl dCB0aGF0IHdlIGNhbiBhcHBseSB0byB0aGUgUlRJcworCQkJCSAqIHVzZWQgZHVyaW5nIHBsYW5u aW5nIHRvIGxvY2F0ZSB0aGUgY29ycmVzcG9uZGluZyByZWxhdGlvbnMKKwkJCQkgKiBpbiB0aGUg ZmluYWwgcnRhYmxlLgorCQkJCSAqCisJCQkJICogV2l0aCBtb3JlIGNvbXBsZXggbG9naWMsIHdl IGNvdWxkIHdvcmsgYXJvdW5kIHRoYXQgcHJvYmxlbQorCQkJCSAqIGJ5IHJlbWVtYmVyaW5nIHRo ZSB3aG9sZSBjb250ZW50cyBvZiB0aGUgc3VicXVlcnkncyBydGFibGUKKwkJCQkgKiBkdXJpbmcg cGxhbm5pbmcsIGRldGVybWluaW5nIHdoaWNoIG9mIHRob3NlIHdvdWxkIGhhdmUgYmVlbgorCQkJ CSAqIGNvcGllZCB0byB0aGUgZmluYWwgcnRhYmxlLCBhbmQgbWF0Y2hpbmcgdGhlbSB1cC4gQnV0 IGl0CisJCQkJICogZG9lc24ndCBzZWVtIGxpa2UgYSB3b3J0aHdoaWxlIGVuZGVhdm9yIGZvciBy aWdodCBub3csCisJCQkJICogYmVjYXVzZSBSVElzIGZyb20gc3VjaCBzdWJxdWVyaWVzIHdvbid0 IGFwcGVhciBpbiB0aGUgcGxhbgorCQkJCSAqIHRyZWUgaXRzZWxmLCBqdXN0IGluIHRoZSByYW5n ZSB0YWJsZS4gSGVuY2UsIHdlIGNhbiBuZWl0aGVyCisJCQkJICogZ2VuZXJhdGUgbm9yIGFjY2Vw dCBhZHZpY2UgZm9yIHRoZW0uCisJCQkJICovCisJCQkJaWYgKHN0cmNtcChjaGVjay0+a2V5LnBs YW5fbmFtZSwgcnRpbmZvLT5wbGFuX25hbWUpID09IDAKKwkJCQkJJiYgIXJ0aW5mby0+ZHVtbXkp CisJCQkJeworCQkJCQlydG9mZnNldCA9IHJ0aW5mby0+cnRvZmZzZXQ7CisJCQkJCUFzc2VydChy dG9mZnNldCA+IDApOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCS8qCisJCQkgKiBJ dCdzIG5vdCBhbiBlcnJvciBpZiB3ZSBkb24ndCBmaW5kIHRoZSBwbGFuIG5hbWU6IHRoYXQganVz dAorCQkJICogbWVhbnMgdGhhdCB3ZSBwbGFubmVkIGEgc3VicGxhbiBieSB0aGlzIG5hbWUgYnV0 IGl0IGVuZGVkIHVwCisJCQkgKiBiZWluZyBhIGR1bW15IHN1YnBsYW4gYW5kIHNvIHdhc24ndCBp bmNsdWRlZCBpbiB0aGUgZmluYWwgcGxhbgorCQkJICogdHJlZS4KKwkJCSAqLworCQkJaWYgKHJ0 b2Zmc2V0ID09IDApCisJCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBjaGVjay0+a2V5 LnJ0aSBpcyB0aGUgUlRJIHRoYXQgd2Ugc2F3IHByaW9yIHRvIHJhbmdlLXRhYmxlCisJCSAqIGZs YXR0ZW5pbmcsIHNvIHdlIG11c3QgYWRkIHRoZSBhcHByb3ByaWF0ZSBSVCBvZmZzZXQgdG8gZ2V0 IHRoZQorCQkgKiBmaW5hbCBSVEkuCisJCSAqLworCQlmbGF0X3J0aSA9IGNoZWNrLT5rZXkucnRp ICsgcnRvZmZzZXQ7CisJCUFzc2VydChmbGF0X3J0aSA8PSBsaXN0X2xlbmd0aChwc3RtdC0+cnRh YmxlKSk7CisKKwkJLyogQXNzZXJ0IHRoYXQgdGhlIHN0cmluZyB3ZSBjb21wdXRlIG5vdyBtYXRj aGVzIHRoZSBwcmV2aW91cyBvbmUuICovCisJCXJpZF9zdHJpbmcgPSBwZ3BhX2lkZW50aWZpZXJf c3RyaW5nKCZydF9pZGVudGlmaWVyc1tmbGF0X3J0aSAtIDFdKTsKKwkJQXNzZXJ0KHN0cmNtcChy aWRfc3RyaW5nLCBjaGVjay0+cmlkX3N0cmluZykgPT0gMCk7CisJfQorI2VuZGlmCit9CmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uN2Q0MGI5MTBiMDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfcGxhbm5lci5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIHBncGFfcGxhbm5lci5oCisgKgkgIHBsYW5uZXIgaG9va3MKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmgKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1BMQU5ORVJfSAorI2RlZmluZSBQ R1BBX1BMQU5ORVJfSAorCitleHRlcm4gdm9pZCBwZ3BhX3BsYW5uZXJfaW5zdGFsbF9ob29rcyh2 b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf c2Nhbi5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjM1MWQzZGJmOTIKLS0tIC9kZXYvbnVsbAorKysg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jCkBAIC0wLDAgKzEsMjU4IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3NjYW4uYworICoJICBhbmFseXNpcyBvZiBz Y2FucyBpbiBQbGFuIHRyZWVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfc2Nhbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9zY2FuLmgiCisjaW5jbHVkZSAicGdwYV93 YWxrZXIuaCIKKworI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRlICJwYXJz ZXIvcGFyc2V0cmVlLmgiCisKK3N0YXRpYyBwZ3BhX3NjYW4gKnBncGFfbWFrZV9zY2FuKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQkJCQkgcGdwYV9z Y2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxpZHMsCisJCQkJ CQkJCSBib29sIGJlbmVhdGhfYW55X2dhdGhlcik7CisKKworc3RhdGljIFJURUtpbmQgdW5pcXVl X25vbmpvaW5fcnRla2luZChCaXRtYXBzZXQgKnJlbGlkcywgTGlzdCAqcnRhYmxlKTsKKworLyoK KyAqIEJ1aWxkIGEgcGdwYV9zY2FuIG9iamVjdCBmb3IgYSBQbGFuIG5vZGUgYW5kIHVwZGF0ZSB0 aGUgcGxhbiB3YWxrZXIKKyAqIGNvbnRleHQgYXMgYXBwb3ByaWF0ZS4gIElmIHRoaXMgaXMgYW4g QXBwZW5kIG9yIE1lcmdlQXBwZW5kIHNjYW4sIGFsc28KKyAqIGJ1aWxkIHBncGFfc2NhbiBmb3Ig YW55IHNjYW5zIHRoYXQgd2VyZSBjb25zb2xpZGF0ZWQgaW50byB0aGlzIG9uZSBieQorICogQXBw ZW5kL01lcmdlQXBwZW5kIHB1bGwtdXAuCisgKgorICogSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25l IEVsaWRlZE5vZGUgZm9yIHRoaXMgcGxhbiBub2RlLCBwYXNzIHRoZSB1cHBlcm1vc3QKKyAqIG9u ZSBhcyBlbGlkZWRfbm9kZSwgZWxzZSBwYXNzIE5VTEwuCisgKgorICogU2V0IHRoZSAnYmVuZWF0 aF9hbnlfZ2F0aGVyJyBub2RlIGlmIHdlIGFyZSB1bmRlcm5lYXRoIGEgR2F0aGVyIG9yCisgKiBH YXRoZXIgTWVyZ2Ugbm9kZS4KKyAqCisgKiBTZXQgdGhlICd3aXRoaW5fam9pbl9wcm9ibGVtJyBm bGFnIGlmIHdlJ3JlIGluc2lkZSBvZiBhIGpvaW4gcHJvYmxlbSBhbmQKKyAqIG5vdCBvdGhlcndp c2UuCisgKi8KK3BncGFfc2NhbiAqCitwZ3BhX2J1aWxkX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9j b250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJRWxpZGVkTm9kZSAqZWxpZGVkX25vZGUs CisJCQkJYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIsIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxlbSkK K3sKKwlwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisJ Qml0bWFwc2V0ICAqcmVsaWRzID0gTlVMTDsKKwlpbnQJCQlydGkgPSAtMTsKKwlMaXN0CSAgICpj aGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IE5JTDsKKworCWlmIChlbGlkZWRfbm9kZSAhPSBOVUxM KQorCXsKKwkJTm9kZVRhZwkJZWxpZGVkX3R5cGUgPSBlbGlkZWRfbm9kZS0+ZWxpZGVkX3R5cGU7 CisKKwkJLyoKKwkJICogSWYgc2V0cmVmcyBwcm9jZXNzaW5nIGVsaWRlZCBhbiBBcHBlbmQgb3Ig TWVyZ2VBcHBlbmQgbm9kZSB0aGF0IGhhZAorCQkgKiBvbmx5IG9uZSBzdXJ2aXZpbmcgY2hpbGQs IHRoZW4gdGhpcyBpcyBhIHBhcnRpdGlvbndpc2UgInNjYW4iIC0tCisJCSAqIHdoaWNoIG1heSBy ZWFsbHkgYmUgYSBwYXJ0aXRpb253aXNlIGpvaW4sIGJ1dCB0aGVyZSdzIG5vIG5lZWQgdG8KKwkJ ICogZGlzdGluZ3Vpc2guCisJCSAqCisJCSAqIElmIGl0J3MgYSB0cml2aWFsIFN1YnF1ZXJ5U2Nh biB0aGF0IHdhcyBlbGlkZWQsIHRoZW4gdGhpcyBpcyBhbgorCQkgKiAib3JkaW5hcnkiIHNjYW4g aS5lLiBvbmUgZm9yIHdoaWNoIHdlIG5lZWQgdG8gZ2VuZXJhdGUgYWR2aWNlCisJCSAqIGJlY2F1 c2UgdGhlIHBsYW5uZXIgaGFzIG5vdCBtYWRlIGFueSBtZWFuaW5nZnVsIGNob2ljZS4KKwkJICov CisJCXJlbGlkcyA9IGVsaWRlZF9ub2RlLT5yZWxpZHM7CisJCWlmIChlbGlkZWRfdHlwZSA9PSBU X0FwcGVuZCB8fCBlbGlkZWRfdHlwZSA9PSBUX01lcmdlQXBwZW5kKQorCQkJc3RyYXRlZ3kgPSBQ R1BBX1NDQU5fUEFSVElUSU9OV0lTRTsKKwkJZWxzZQorCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5f T1JESU5BUlk7CisKKwkJLyogSm9pbiBSVElzIGNhbiBiZSBwcmVzZW50LCBidXQgYWR2aWNlIG5l dmVyIHJlZmVycyB0byB0aGVtLiAqLworCQlyZWxpZHMgPSBwZ3BhX2ZpbHRlcl9vdXRfam9pbl9y ZWxpZHMocmVsaWRzLCB3YWxrZXItPnBzdG10LT5ydGFibGUpOworCX0KKwllbHNlIGlmICgocnRp ID0gcGdwYV9zY2FucmVsaWQocGxhbikpICE9IDApCisJeworCQlyZWxpZHMgPSBibXNfbWFrZV9z aW5nbGV0b24ocnRpKTsKKworCQlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCisJCXsKKwkJCWNhc2Ug VF9TZXFTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX1NFUTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgVF9CaXRtYXBIZWFwU2NhbjoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9CSVRNQVBf SEVBUDsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9JbmRleFNjYW46CisJCQkJc3RyYXRlZ3kgPSBQ R1BBX1NDQU5fSU5ERVg7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKKwkJ CQlzdHJhdGVneSA9IFBHUEFfU0NBTl9JTkRFWF9PTkxZOworCQkJCWJyZWFrOworCQkJY2FzZSBU X1RpZFNjYW46CisJCQljYXNlIFRfVGlkUmFuZ2VTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9T Q0FOX1RJRDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisKKwkJCQkvKgorCQkJCSAqIFRoaXMg Y2FzZSBpbmNsdWRlcyBhIEZvcmVpZ25TY2FuIHRhcmdldGluZyBhIHNpbmdsZQorCQkJCSAqIHJl bGF0aW9uOyBubyBvdGhlciBzdHJhdGVneSBpcyBwb3NzaWJsZSBpbiB0aGF0IGNhc2UsIGJ1dAor CQkJCSAqIHNlZSBiZWxvdywgd2hlcmUgdGhpbmdzIGFyZSBkaWZmZXJlbnQgaW4gbXVsdGktcmVs YXRpb24KKwkJCQkgKiBjYXNlcy4KKwkJCQkgKi8KKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9P UkRJTkFSWTsKKwkJCQlicmVhazsKKwkJfQorCX0KKwllbHNlIGlmICgocmVsaWRzID0gcGdwYV9y ZWxpZHMocGxhbikpICE9IE5VTEwpCisJeworCQlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCisJCXsK KwkJCWNhc2UgVF9Gb3JlaWduU2NhbjoKKworCQkJCS8qCisJCQkJICogSWYgbXVsdGlwbGUgcmVs YXRpb25zIGFyZSBiZWluZyB0YXJnZXRlZCBieSBhIHNpbmdsZQorCQkJCSAqIGZvcmVpZ24gc2Nh biwgdGhlbiB0aGUgZm9yZWlnbiBqb2luIGhhcyBiZWVuIHB1c2hlZCB0byB0aGUKKwkJCQkgKiBy ZW1vdGUgc2lkZSwgYW5kIHdlIHdhbnQgdGhhdCB0byBiZSByZWZsZWN0ZWQgaW4gdGhlCisJCQkJ ICogZ2VuZXJhdGVkIGFkdmljZS4KKwkJCQkgKi8KKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9G T1JFSUdOOworCQkJCWJyZWFrOworCQkJY2FzZSBUX0FwcGVuZDoKKworCQkJCS8qCisJCQkJICog QXBwZW5kIG5vZGVzIGNhbiByZXByZXNlbnQgcGFydGl0aW9ud2lzZSBzY2FucyBvZiBhIGEKKwkJ CQkgKiByZWxhdGlvbiwgYnV0IHdoZW4gdGhleSBpbXBsZW1lbnQgYSBzZXQgb3BlcmF0aW9uLCB0 aGV5IGFyZQorCQkJCSAqIGp1c3Qgb3JkaW5hcnkgc2NhbnMuCisJCQkJICovCisJCQkJaWYgKHVu aXF1ZV9ub25qb2luX3J0ZWtpbmQocmVsaWRzLCB3YWxrZXItPnBzdG10LT5ydGFibGUpCisJCQkJ CT09IFJURV9SRUxBVElPTikKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fUEFSVElUSU9OV0lT RTsKKwkJCQllbHNlCisJCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCQkJCWNo aWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQkJKChBcHBlbmQgKikgcGxhbiktPmNoaWxkX2Fw cGVuZF9yZWxpZF9zZXRzOworCQkJCWJyZWFrOworCQkJY2FzZSBUX01lcmdlQXBwZW5kOgorCQkJ CS8qIFNvbWUgbG9naWMgaGVyZSBhcyBmb3IgQXBwZW5kLCBhYm92ZS4gKi8KKwkJCQlpZiAodW5p cXVlX25vbmpvaW5fcnRla2luZChyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSkKKwkJCQkJ PT0gUlRFX1JFTEFUSU9OKQorCQkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9QQVJUSVRJT05XSVNF OworCQkJCWVsc2UKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisJCQkJY2hp bGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCQkoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5jaGls ZF9hcHBlbmRfcmVsaWRfc2V0czsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJc3RyYXRl Z3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisJCQkJYnJlYWs7CisJCX0KKworCisJCS8qIEpvaW4g UlRJcyBjYW4gYmUgcHJlc2VudCwgYnV0IGFkdmljZSBuZXZlciByZWZlcnMgdG8gdGhlbS4gKi8K KwkJcmVsaWRzID0gcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKHJlbGlkcywgd2Fsa2VyLT5w c3RtdC0+cnRhYmxlKTsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYW4gQXBwZW5kIG9yIE1l cmdlQXBwZW5kIG5vZGUgaW50byB3aGljaCBzdWJvcmRpbmF0ZSBBcHBlbmQKKwkgKiBvciBNZXJn ZUFwcGVuZCBwYXRocyB3ZXJlIG1lcmdlZCwgZWFjaCBvZiB0aG9zZSBtZXJnZWQgcGF0aHMgaXMK KwkgKiBlZmZlY3RpdmVseSBhbm90aGVyIHNjYW4gZm9yIHdoaWNoIHdlIG5lZWQgdG8gYWNjb3Vu dC4KKwkgKi8KKwlmb3JlYWNoX25vZGUoQml0bWFwc2V0LCBjaGlsZF9yZWxpZHMsIGNoaWxkX2Fw cGVuZF9yZWxpZF9zZXRzKQorCXsKKwkJQml0bWFwc2V0ICAqY2hpbGRfbm9uam9pbl9yZWxpZHM7 CisKKwkJY2hpbGRfbm9uam9pbl9yZWxpZHMgPQorCQkJcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVs aWRzKGNoaWxkX3JlbGlkcywKKwkJCQkJCQkJCQl3YWxrZXItPnBzdG10LT5ydGFibGUpOworCQko dm9pZCkgcGdwYV9tYWtlX3NjYW4od2Fsa2VyLCBwbGFuLCBzdHJhdGVneSwKKwkJCQkJCQkgIGNo aWxkX25vbmpvaW5fcmVsaWRzLAorCQkJCQkJCSAgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKKwl9CisK KwkvKgorCSAqIElmIHRoaXMgcGxhbiBub2RlIGhhcyBubyBhc3NvY2lhdGVkIFJUSXMsIGl0J3Mg bm90IGEgc2Nhbi4gV2hlbiB0aGUKKwkgKiAnd2l0aGluX2pvaW5fcHJvYmxlbScgZmxhZyBpcyBz ZXQsIHRoYXQncyB1bmV4cGVjdGVkLCBzbyB0aHJvdyBhbgorCSAqIGVycm9yLCBlbHNlIHJldHVy biBxdWlldGx5LgorCSAqLworCWlmIChyZWxpZHMgPT0gTlVMTCkKKwl7CisJCWlmICh3aXRoaW5f am9pbl9wcm9ibGVtKQorCQkJZWxvZyhFUlJPUiwgInBsYW4gbm9kZSBoYXMgbm8gUlRJczogJWQi LCAoaW50KSBub2RlVGFnKHBsYW4pKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHBn cGFfbWFrZV9zY2FuKHdhbGtlciwgcGxhbiwgc3RyYXRlZ3ksIHJlbGlkcywgYmVuZWF0aF9hbnlf Z2F0aGVyKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIHNpbmdsZSBwZ3BhX3NjYW4gb2JqZWN0IGFu ZCB1cGRhdGUgdGhlIHBncGFfcGxhbl93YWxrZXJfY29udGV4dC4KKyAqLworc3RhdGljIHBncGFf c2NhbiAqCitwZ3BhX21ha2Vfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwg UGxhbiAqcGxhbiwKKwkJCSAgIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwgQml0bWFwc2V0 ICpyZWxpZHMsCisJCQkgICBib29sIGJlbmVhdGhfYW55X2dhdGhlcikKK3sKKwlwZ3BhX3NjYW4g ICpzY2FuOworCisJLyogQ3JlYXRlIHRoZSBzY2FuIG9iamVjdC4gKi8KKwlzY2FuID0gcGFsbG9j KHNpemVvZihwZ3BhX3NjYW4pKTsKKwlzY2FuLT5wbGFuID0gcGxhbjsKKwlzY2FuLT5zdHJhdGVn eSA9IHN0cmF0ZWd5OworCXNjYW4tPnJlbGlkcyA9IHJlbGlkczsKKwlzY2FuLT5iZW5lYXRoX2Fu eV9nYXRoZXIgPSBiZW5lYXRoX2FueV9nYXRoZXI7CisKKwkvKiBBZGQgaXQgdG8gdGhlIGFwcHJv cHJpYXRlIGxpc3QuICovCisJd2Fsa2VyLT5zY2Fuc1tzY2FuLT5zdHJhdGVneV0gPSBsYXBwZW5k KHdhbGtlci0+c2NhbnNbc2Nhbi0+c3RyYXRlZ3ldLAorCQkJCQkJCQkJCQlzY2FuKTsKKworCS8q CisJICogV2UgaW50ZW5kIHRvIGVtaXQgTk9fR0FUSEVSKCkgYWR2aWNlIGZvciBlYWNoIHNjYW4g dGhhdCBkb2Vzbid0IGFwcGVhcgorCSAqIGJlbmVhdGggYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdl IG5vZGUsIGJ1dCB3ZSBuZWVkIG5vdCBkbyB0aGlzIGZvcgorCSAqIHBhcnRpdGlvbndpc2Ugc2Nh bnMsIGJlY2F1c2UgZW1pdHRpbmcgTk9fR0FUSEVSKCkgZm9yIHRoZSBjaGlsZCBzY2FucworCSAq IHN1ZmZpY2VzLgorCSAqLworCWlmICghc2Nhbi0+YmVuZWF0aF9hbnlfZ2F0aGVyICYmIHNjYW4t PnN0cmF0ZWd5ICE9IFBHUEFfU0NBTl9QQVJUSVRJT05XSVNFKQorCQl3YWxrZXItPm5vX2dhdGhl cl9zY2FucyA9IGJtc19hZGRfbWVtYmVycyh3YWxrZXItPm5vX2dhdGhlcl9zY2FucywKKwkJCQkJ CQkJCQkJCSAgc2Nhbi0+cmVsaWRzKTsKKworCXJldHVybiBzY2FuOworfQorCisvKgorICogRGV0 ZXJtaW5lIHRoZSB1bmlxdWUgcnRla2luZCBvZiBhIHNldCBvZiByZWxpZHMuCisgKi8KK3N0YXRp YyBSVEVLaW5kCit1bmlxdWVfbm9uam9pbl9ydGVraW5kKEJpdG1hcHNldCAqcmVsaWRzLCBMaXN0 ICpydGFibGUpCit7CisJaW50CQkJcnRpID0gLTE7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCVJU RUtpbmQJCXJ0ZWtpbmQ7CisKKwlBc3NlcnQocmVsaWRzICE9IE5VTEwpOworCisJd2hpbGUgKChy dGkgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAwKQorCXsKKwkJUmFuZ2VUYmxF bnRyeSAqcnRlID0gcnRfZmV0Y2gocnRpLCBydGFibGUpOworCisJCWlmIChydGUtPnJ0ZWtpbmQg PT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKworCQlpZiAoZmlyc3QpCisJCXsKKwkJCXJ0ZWtp bmQgPSBydGUtPnJ0ZWtpbmQ7CisJCQlmaXJzdCA9IGZhbHNlOworCQl9CisJCWVsc2UgaWYgKHJ0 ZWtpbmQgIT0gcnRlLT5ydGVraW5kKQorCQkJZWxvZyhFUlJPUiwgInJ0ZWtpbmQgbWlzbWF0Y2g6 ICVkIHZzLiAlZCIsCisJCQkJIHJ0ZWtpbmQsIHJ0ZS0+cnRla2luZCk7CisJfQorCisJaWYgKGZp cnN0KQorCQllbG9nKEVSUk9SLCAibm8gbm9uLVJURV9KT0lOIFJURXMgZm91bmQiKTsKKworCXJl dHVybiBydGVraW5kOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3NjYW4uaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjkwYTA4YjQxYzViCi0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaApAQCAtMCwwICsxLDg2IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3NjYW4uaAorICoJICBhbmFseXNpcyBvZiBz Y2FucyBpbiBQbGFuIHRyZWVzCisgKgorICogRm9yIHB1cnBvc2VzIG9mIHRoaXMgbW9kdWxlLCBh ICJzY2FuIiBpbmNsdWRlcyAoMSkgc2luZ2xlIHBsYW4gbm9kZXMgdGhhdAorICogc2NhbiBtdWx0 aXBsZSBSVElzLCBzdWNoIGFzIGEgZGVnZW5lcmF0ZSBSZXN1bHQgbm9kZSB0aGF0IHJlcGxhY2Vz IHdoYXQKKyAqIHdvdWxkIG90aGVyd2lzZSBoYXZlIGJlZW4gYSBqb2luLCBhbmQgKDIpIEFwcGVu ZCBhbmQgTWVyZ2VBcHBlbmQgbm9kZXMKKyAqIGltcGxlbWVudGluZyBhIHBhcnRpdGlvbndpc2Ug c2NhbiBvciBhIHBhcnRpdGlvbndpc2Ugam9pbi4gU2FpZAorICogZGlmZmVyZW50bHksIHNjYW5z IGFyZSB0aGUgbGVhdmVzIG9mIHRoZSBqb2luIHRyZWUgZm9yIGEgc2luZ2xlIGpvaW4KKyAqIHBy b2JsZW0uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf c2Nhbi5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9TQ0FOX0gK KyNkZWZpbmUgUEdQQV9TQ0FOX0gKKworI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorCit0 eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgcGdwYV9wbGFuX3dhbGtlcl9j b250ZXh0OworCisvKgorICogU2NhbiBzdHJhdGVnaWVzLgorICoKKyAqIFBHUEFfU0NBTl9PUkRJ TkFSWSBpcyBhbnkgc2NhbiBzdHJhdGVneSB0aGF0IGlzbid0IGludGVyZXN0aW5nIHRvIHVzCisg KiBiZWNhdXNlIHRoZXJlIGlzIG5vIG1lYW5pbmdmdWwgcGxhbm5lciBkZWNpc2lvbiBpbnZvbHZl ZC4gRm9yIGV4YW1wbGUsCisgKiB0aGUgb25seSB3YXkgdG8gc2NhbiBhIHN1YnF1ZXJ5IGlzIGEg U3VicXVlcnlTY2FuLCBhbmQgdGhlIG9ubHkgd2F5IHRvCisgKiBzY2FuIGEgVkFMVUVTIGNvbnN0 cnVjdCBpcyBhIFZhbHVlc1NjYW4uIFdlIG5lZWQgbm90IGNhcmUgZXhhY3RseSB3aGljaAorICog dHlwZSBvZiBwbGFubmVyIG5vZGUgd2FzIHVzZWQgaW4gc3VjaCBjYXNlcywgYmVjYXVzZSB0aGUg c2FtZSB0aGluZyB3aWxsCisgKiBoYXBwZW4gd2hlbiByZXBsYW5uaW5nLgorICoKKyAqIFBHUEFf U0NBTl9PUkRJTkFSWSBhbHNvIGluY2x1ZGVzIFJlc3VsdCBub2RlcyB0aGF0IGNvcnJlc3BvbmQg dG8gc2NhbnMKKyAqIG9yIGV2ZW4gam9pbnMgdGhhdCBhcmUgcHJvdmVkIGVtcHR5LiBXZSBkb24n dCBrbm93IHdoZXRoZXIgb3Igbm90IHRoZSBzY2FuCisgKiBvciBqb2luIHdpbGwgc3RpbGwgYmUg cHJvdmFibHkgZW1wdHkgYXQgcmVwbGFubmluZyB0aW1lLCBidXQgaWYgaXQgaXMsCisgKiB0aGVu IG5vIHNjYW4tdHlwZSBhZHZpY2UgaXMgbmVlZGVkLCBhbmQgaWYgaXQncyBub3QsIHdlIGNhbid0 IHJlY29tbWVuZAorICogYSBzY2FuIHR5cGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgcGxhbi4KKyAq CisgKiBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRSBhbHNvIGx1bXBzIHRvZ2V0aGVyIHNjYW5zIGFu ZCBqb2luczogdGhpcyBjYW4KKyAqIGJlIGVpdGhlciBhIHBhcnRpdGlvbndpc2Ugc2NhbiBvZiBh IHBhcnRpdGlvbmVkIHRhYmxlIG9yIGEgcGFydGl0aW9ud2lzZQorICogam9pbiBiZXR3ZWVuIHNl dmVyYWwgcGFydGl0aW9uZWQgdGFibGVzLiBOb3RlIHRoYXQgYWxsIGRlY2lzaW9ucyBhYm91dAor ICogd2hldGhlciBvciBub3QgdG8gdXNlIHBhcnRpdGlvbndpc2Ugam9pbiBhcmUgbWVhbmluZ2Z1 bDogbm8gbWF0dGVyIHdoYXQKKyAqIHdlIGRlY2lkZWQgdGhpcyB0aW1lLCB3ZSBjb3VsZCBkbyBt b3JlIG9yIGZld2VyIHRoaW5ncyBwYXJ0aXRpb253aXNlIHRoZQorICogbmV4dCB0aW1lLgorICoK KyAqIFBHUEFfU0NBTl9GT1JFSUdOIGlzIG9ubHkgdXNlZCB3aGVuIHRoZXJlJ3MgbW9yZSB0aGFu IG9uZSByZWxhdGlvbiBpbnZvbHZlZDsKKyAqIGEgc2luZ2xlLXRhYmxlIGZvcmVpZ24gc2NhbiBp cyBjbGFzc2lmaWVkIGFzIG9yZGluYXJ5LCBzaW5jZSB0aGVyZSBpcyBubworICogZGVjaXNpb24g dG8gbWFrZSBpbiB0aGF0IGNhc2UuCisgKgorICogT3RoZXIgc2NhbiBzdHJhdGVnaWVzIG1hcCBv bmUtdG8tb25lIHRvIHBsYW4gbm9kZXMuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVBHUEFfU0NB Tl9PUkRJTkFSWSA9IDAsCisJUEdQQV9TQ0FOX1NFUSwKKwlQR1BBX1NDQU5fQklUTUFQX0hFQVAs CisJUEdQQV9TQ0FOX0ZPUkVJR04sCisJUEdQQV9TQ0FOX0lOREVYLAorCVBHUEFfU0NBTl9JTkRF WF9PTkxZLAorCVBHUEFfU0NBTl9QQVJUSVRJT05XSVNFLAorCVBHUEFfU0NBTl9USUQKKwkvKiB1 cGRhdGUgTlVNX1BHUEFfU0NBTl9TVFJBVEVHWSBpZiB5b3UgYWRkIGFueXRoaW5nIGhlcmUgKi8K K30gcGdwYV9zY2FuX3N0cmF0ZWd5OworCisjZGVmaW5lIE5VTV9QR1BBX1NDQU5fU1RSQVRFR1kJ KChpbnQpIFBHUEFfU0NBTl9USUQgKyAxKQorCisvKgorICogQWxsIG9mIHRoZSBkZXRhaWxzIHdl IG5lZWQgcmVnYXJkaW5nIGEgc2Nhbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9zY2FuCit7 CisJUGxhbgkgICAqcGxhbjsKKwlwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3k7CisJQml0bWFw c2V0ICAqcmVsaWRzOworCWJvb2wJCWJlbmVhdGhfYW55X2dhdGhlcjsKK30gcGdwYV9zY2FuOwor CitleHRlcm4gcGdwYV9zY2FuICpwZ3BhX2J1aWxkX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250 ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJCQkJCSAgRWxpZGVkTm9kZSAqZWxpZGVkX25v ZGUsCisJCQkJCQkJCSAgYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIsCisJCQkJCQkJCSAgYm9vbCB3 aXRoaW5fam9pbl9wcm9ibGVtKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Nj YW5uZXIubApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmU3ZDdiYTEz YTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5l ci5sCkBAIC0wLDAgKzEsMjk5IEBACisldG9weworLyoKKyAqIFNjYW5uZXIgZm9yIHBsYW4gYWR2 aWNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKgorICogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5u ZXIubAorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImNvbW1vbi9zdHJp bmcuaCIKKyNpbmNsdWRlICJub2Rlcy9taXNjbm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvc2Nh bnN1cC5oIgorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKyNpbmNsdWRlICJwZ3BhX3BhcnNlci5o IgorCisvKgorICogRXh0cmEgZGF0YSB0aGF0IHdlIHBhc3MgYXJvdW5kIHdoZW4gZHVyaW5nIHNj YW5uaW5nLgorICoKKyAqICdsaXRidWYnIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSA8eGQ+IGV4 Y2x1c2l2ZSBzdGF0ZSwgd2hpY2ggaGFuZGxlcworICogZG91YmxlLXF1b3RlZCBpZGVudGlmaWVy cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV95eV9leHRyYV90eXBlCit7CisJU3RyaW5nSW5m b0RhdGEJbGl0YnVmOworfSBwZ3BhX3l5X2V4dHJhX3R5cGU7CisKK30KKworJXsKKy8qIExDT1Zf RVhDTF9TVEFSVCAqLworCisjZGVmaW5lIFlZX0RFQ0wgXAorCWV4dGVybiBpbnQgcGdwYV95eWxl eCh1bmlvbiBZWVNUWVBFICp5eWx2YWxfcGFyYW0sIExpc3QgKipyZXN1bHQsIFwKKwkJCQkJCSAg Y2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisKKy8qIE5vIHJl YXNvbiB0byBjb25zdHJhaW4gYW1vdW50IG9mIGRhdGEgc2x1cnBlZCAqLworI2RlZmluZSBZWV9S RUFEX0JVRl9TSVpFIDE2Nzc3MjE2CisKKy8qIEF2b2lkIGV4aXQoKSBvbiBmYXRhbCBzY2FubmVy IGVycm9ycyAoYSBiaXQgdWdseSAtLSBzZWUgeXlfZmF0YWxfZXJyb3IpICovCisjdW5kZWYgZnBy aW50ZgorI2RlZmluZSBmcHJpbnRmKGZpbGUsIGZtdCwgbXNnKSAgZnByaW50Zl90b19lcmVwb3J0 KGZtdCwgbXNnKQorCitzdGF0aWMgdm9pZAorZnByaW50Zl90b19lcmVwb3J0KGNvbnN0IGNoYXIg KmZtdCwgY29uc3QgY2hhciAqbXNnKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJtc2dfaW50ZXJu YWwoIiVzIiwgbXNnKSkpOworfQorJX0KKworJW9wdGlvbiByZWVudHJhbnQKKyVvcHRpb24gYmlz b24tYnJpZGdlCislb3B0aW9uIDhiaXQKKyVvcHRpb24gbmV2ZXItaW50ZXJhY3RpdmUKKyVvcHRp b24gbm9kZWZhdWx0Cislb3B0aW9uIG5vaW5wdXQKKyVvcHRpb24gbm91bnB1dAorJW9wdGlvbiBu b3l5d3JhcAorJW9wdGlvbiBub3l5YWxsb2MKKyVvcHRpb24gbm95eXJlYWxsb2MKKyVvcHRpb24g bm95eWZyZWUKKyVvcHRpb24gd2FybgorJW9wdGlvbiBwcmVmaXg9InBncGFfeXkiCislb3B0aW9u IGV4dHJhLXR5cGU9InBncGFfeXlfZXh0cmFfdHlwZSAqIgorCisvKgorICogV2hhdCBmb2xsb3dz IGlzIGEgc2V2ZXJlbHkgc3RyaXBwZWQtZG93biB2ZXJzaW9uIG9mIHRoZSBjb3JlIHNjYW5uZXIu IFdlCisgKiBvbmx5IGNhcmUgYWJvdXQgcmVjb2duaXppbmcgaWRlbnRpZmllcnMgd2l0aCBvciB3 aXRob3V0IGlkZW50aWZpZXIgcXVvdGluZworICogKGkuZS4gZG91YmxlLXF1b3RpbmcpLCBkZWNp bWFsIGludGVnZXJzLCBhbmQgYSBzbWFsbCBoYW5kZnVsIG9mIG90aGVyCisgKiB0aGluZ3MuIEtl ZXAgdGhlc2UgcnVsZXMgaW4gc3luYyB3aXRoIHNyYy9iYWNrZW5kL3BhcnNlci9zY2FuLmwuIEFz IGluIHRoYXQKKyAqIGZpbGUsIHdlIHVzZSBhbiBleGNsdXNpdmUgc3RhdGUgY2FsbGVkICd4Yycg Zm9yIEMtc3R5bGUgY29tbWVudHMsIGFuZCBhbgorICogZXhjbHVzaXZlIHN0YXRlIGNhbGxlZCAn eGQnIGZvciBkb3VibGUtcXVvdGVkIGlkZW50aWZpZXJzLgorICovCisleCB4YworJXggeGQKKwor aWRlbnRfc3RhcnQJCVtBLVphLXpcMjAwLVwzNzdfXQoraWRlbnRfY29udAkJW0EtWmEtelwyMDAt XDM3N18wLTlcJF0KKworaWRlbnRpZmllcgkJe2lkZW50X3N0YXJ0fXtpZGVudF9jb250fSoKKwor ZGVjZGlnaXQJCVswLTldCitkZWNpbnRlZ2VyCQl7ZGVjZGlnaXR9KF8/e2RlY2RpZ2l0fSkqCisK K3NwYWNlCQkJWyBcdFxuXHJcZlx2XQord2hpdGVzcGFjZQkJe3NwYWNlfSsKKworZHF1b3RlCQkJ XCIKK3hkc3RhcnQJCQl7ZHF1b3RlfQoreGRzdG9wCQkJe2RxdW90ZX0KK3hkZG91YmxlCQl7ZHF1 b3RlfXtkcXVvdGV9Cit4ZGluc2lkZQkJW14iXSsKKworeGNzdGFydAkJCVwvXCoKK3hjc3RvcAkJ CVwqK1wvCit4Y2luc2lkZQkJW14qL10rCisKKyUlCisKK3t3aGl0ZXNwYWNlfQl7IC8qIGlnbm9y ZSAqLyB9CisKK3tpZGVudGlmaWVyfQl7CisJCQkJCWNoYXIgICAqc3RyOworCQkJCQlib29sCWZh aWw7CisJCQkJCXBncGFfYWR2aWNlX3RhZ190eXBlCXRhZzsKKworCQkJCQkvKgorCQkJCQkgKiBV bmxpa2UgdGhlIGNvcmUgc2Nhbm5lciwgd2UgZG9uJ3QgdHJ1bmNhdGUgaWRlbnRpZmllcnMKKwkJ CQkJICogaGVyZS4gVGhlcmUgaXMgbm8gb2J2aW91cyByZWFzb24gdG8gZG8gc28uCisJCQkJCSAq LworCQkJCQlzdHIgPSBkb3duY2FzZV9pZGVudGlmaWVyKHl5dGV4dCwgeXlsZW5nLCBmYWxzZSwg ZmFsc2UpOworCQkJCQl5eWx2YWwtPnN0ciA9IHN0cjsKKworCQkJCQkvKgorCQkJCQkgKiBJZiBp dCdzIG5vdCBhIHRhZywganVzdCByZXR1cm4gVE9LX0lERU5UOyBlbHNlLCByZXR1cm4KKwkJCQkJ ICogYSB0b2tlbiB0eXBlIGJhc2VkIG9uIGhvdyBmdXJ0aGVyIHBhcnNpbmcgc2hvdWxkCisJCQkJ CSAqIHByb2NlZWQuCisJCQkJCSAqLworCQkJCQl0YWcgPSBwZ3BhX3BhcnNlX2FkdmljZV90YWco c3RyLCAmZmFpbCk7CisJCQkJCWlmIChmYWlsKQorCQkJCQkJcmV0dXJuIFRPS19JREVOVDsKKwkJ CQkJZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCQkJCQlyZXR1cm4gVE9L X1RBR19KT0lOX09SREVSOworCQkJCQllbHNlIGlmICh0YWcgPT0gUEdQQV9UQUdfSU5ERVhfU0NB TiB8fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOKQorCQkJCQkJcmV0 dXJuIFRPS19UQUdfSU5ERVg7CisJCQkJCWVsc2UgaWYgKHRhZyA9PSBQR1BBX1RBR19CSVRNQVBf SEVBUF9TQ0FOKQorCQkJCQkJcmV0dXJuIFRPS19UQUdfQklUTUFQOworCQkJCQllbHNlIGlmICh0 YWcgPT0gUEdQQV9UQUdfU0VRX1NDQU4gfHwKKwkJCQkJCQkgdGFnID09IFBHUEFfVEFHX1RJRF9T Q0FOIHx8CisJCQkJCQkJIHRhZyA9PSBQR1BBX1RBR19OT19HQVRIRVIpCisJCQkJCQlyZXR1cm4g VE9LX1RBR19TSU1QTEU7CisJCQkJCWVsc2UKKwkJCQkJCXJldHVybiBUT0tfVEFHX0dFTkVSSUM7 CisJCQkJfQorCit7ZGVjaW50ZWdlcn0JeworCQkJCQljaGFyICAgKmVuZHB0cjsKKworCQkJCQll cnJubyA9IDA7CisJCQkJCXl5bHZhbC0+aW50ZWdlciA9IHN0cnRvaW50KHl5dGV4dCwgJmVuZHB0 ciwgMTApOworCQkJCQlpZiAoKmVuZHB0ciAhPSAnXDAnIHx8IGVycm5vID09IEVSQU5HRSkKKwkJ CQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJ CQkJCQkJCQkgImludGVnZXIgb3V0IG9mIHJhbmdlIik7CisJCQkJCXJldHVybiBUT0tfSU5URUdF UjsKKwkJCQl9CisKK3t4Y3N0YXJ0fQkJeworCQkJCQlCRUdJTih4Yyk7CisJCQkJfQorCit7eGRz dGFydH0JCXsKKwkJCQkJQkVHSU4oeGQpOworCQkJCQlyZXNldFN0cmluZ0luZm8oJnl5ZXh0cmEt PmxpdGJ1Zik7CisJCQkJfQorCisifHwiCQkJeyByZXR1cm4gVE9LX09SOyB9CisKKyImJiIJCQl7 IHJldHVybiBUT0tfQU5EOyB9CisKKy4JCQkJeyByZXR1cm4geXl0ZXh0WzBdOyB9CisKKzx4Yz57 eGNzdG9wfQl7CisJCQkJCUJFR0lOKElOSVRJQUwpOworCQkJCX0KKworPHhjPnt4Y2luc2lkZX0J eworCQkJCQkvKiBkaXNjYXJkIG11bHRpcGxlIGNoYXJhY3RlcnMgd2l0aG91dCBzbGFzaCBvciBh c3RlcmlzayAqLworCQkJCX0KKworPHhjPi4JCQl7CisJCQkJCS8qCisJCQkJCSAqIERpc2NhcmQg YW55IHNpbmdsZSBjaGFyYWN0ZXIuIGZsZXggcHJlZmVycyBsb25nZXIKKwkJCQkJICogbWF0Y2hl cywgc28gdGhpcyBydWxlIHdpbGwgbmV2ZXIgYmUgcGlja2VkIHdoZW4gd2UgY291bGQKKwkJCQkJ ICogaGF2ZSBtYXRjaGVkIHhjc3RvcC4KKwkJCQkJICoKKwkJCQkJICogTkI6IEF0IHByZXNlbnQs IHdlIGRvbid0IGJvdGhlciB0byBzdXBwb3J0IG5lc3RlZAorCQkJCQkgKiBDLXN0eWxlIGNvbW1l bnRzIGhlcmUsIGJ1dCB0aGlzIGxvZ2ljIGNvdWxkIGJlIGV4dGVuZGVkCisJCQkJCSAqIGlmIHRo YXQgcmVzdHJpY3Rpb24gcG9zZXMgYSBwcm9ibGVtLgorCQkJCQkgKi8KKwkJCQl9CisKKzx4Yz48 PEVPRj4+CQl7CisJCQkJCUJFR0lOKElOSVRJQUwpOworCQkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0 LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCQkgInVudGVybWluYXRlZCBj b21tZW50Iik7CisJCQkJfQorCis8eGQ+e3hkc3RvcH0JeworCQkJCQlCRUdJTihJTklUSUFMKTsK KwkJCQkJeXlsdmFsLT5zdHIgPSBwc3RyZHVwKHl5ZXh0cmEtPmxpdGJ1Zi5kYXRhKTsKKwkJCQkJ cmV0dXJuIFRPS19JREVOVDsKKwkJCQl9CisKKzx4ZD57eGRkb3VibGV9CXsKKwkJCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoJnl5ZXh0cmEtPmxpdGJ1ZiwgJyInKTsKKwkJCQl9CisKKzx4ZD57eGRp bnNpZGV9CXsKKwkJCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbygmeXlleHRyYS0+bGl0YnVmLCB5 eXRleHQsIHl5bGVuZyk7CisJCQkJfQorCis8eGQ+PDxFT0Y+PgkJeworCQkJCQlCRUdJTihJTklU SUFMKTsKKwkJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nh bm5lciwKKwkJCQkJCQkJICJ1bnRlcm1pbmF0ZWQgcXVvdGVkIGlkZW50aWZpZXIiKTsKKwkJCQl9 CisKKyUlCisKKy8qIExDT1ZfRVhDTF9TVE9QICovCisKKy8qCisgKiBIYW5kbGVyIGZvciBlcnJv cnMgd2hpbGUgc2Nhbm5pbmcgb3IgcGFyc2luZyBhZHZpY2UuCisgKgorICogYmlzb24gcGFzc2Vz IHRoZSBlcnJvciBtZXNzYWdlIHRvIHVzIHZpYSAnbWVzc2FnZScsIGFuZCB0aGUgY29udGV4dCBp cworICogYXZhaWxhYmxlIHZpYSB0aGUgJ3l5dGV4dCcgbWFjcm8uIFdlIGFzc2VtYmxlIHRob3Nl IHZhbHVlcyBpbnRvIGEgZmluYWwKKyAqIGVycm9yIHRleHQgYW5kIHRoZW4gYXJyYW5nZSB0byBw YXNzIGl0IGJhY2sgdG8gdGhlIGNhbGxlciBvZiBwZ3BhX3l5cGFyc2UoKQorICogYnkgc3Rvcmlu ZyBpdCBpbnRvICpwYXJzZV9lcnJvcl9tc2dfcC4KKyAqLwordm9pZAorcGdwYV95eWVycm9yKExp c3QgKipyZXN1bHQsIGNoYXIgKipwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FuX3QgeXlzY2FubmVy LAorCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJc3RydWN0IHl5Z3V0c190ICp5eWcgPSAo c3RydWN0IHl5Z3V0c190ICopIHl5c2Nhbm5lcjsJLyogbmVlZGVkIGZvciB5eXRleHQKKwkJCQkJ CQkJCQkJCQkJCSAqIG1hY3JvICovCisKKworCS8qIHJlcG9ydCBvbmx5IHRoZSBmaXJzdCBlcnJv ciBpbiBhIHBhcnNlIG9wZXJhdGlvbiAqLworCWlmICgqcGFyc2VfZXJyb3JfbXNnX3ApCisJCXJl dHVybjsKKworCWlmICh5eXRleHRbMF0pCisJCSpwYXJzZV9lcnJvcl9tc2dfcCA9IHBzcHJpbnRm KCIlcyBhdCBvciBuZWFyIFwiJXNcIiIsIG1lc3NhZ2UsIHl5dGV4dCk7CisJZWxzZQorCQkqcGFy c2VfZXJyb3JfbXNnX3AgPSBwc3ByaW50ZigiJXMgYXQgZW5kIG9mIGlucHV0IiwgbWVzc2FnZSk7 Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBhZHZpY2Ugc2Nhbm5lci4KKyAqCisgKiBUaGlz IHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHBhcnNpbmcgYmVnaW5zLgorICovCit2b2lkCitwZ3Bh X3NjYW5uZXJfaW5pdChjb25zdCBjaGFyICpzdHIsIHl5c2Nhbl90ICp5eXNjYW5uZXJwKQorewor CXl5c2Nhbl90CXl5c2Nhbm5lcjsKKwlwZ3BhX3l5X2V4dHJhX3R5cGUJKnl5ZXh0ID0gcGFsbG9j MF9vYmplY3QocGdwYV95eV9leHRyYV90eXBlKTsKKworCWlmICh5eWxleF9pbml0KHl5c2Nhbm5l cnApICE9IDApCisJCWVsb2coRVJST1IsICJ5eWxleF9pbml0KCkgZmFpbGVkOiAlbSIpOworCisJ eXlzY2FubmVyID0gKnl5c2Nhbm5lcnA7CisKKwlpbml0U3RyaW5nSW5mbygmeXlleHQtPmxpdGJ1 Zik7CisJcGdwYV95eXNldF9leHRyYSh5eWV4dCwgeXlzY2FubmVyKTsKKworCXl5X3NjYW5fc3Ry aW5nKHN0ciwgeXlzY2FubmVyKTsKK30KKworCisvKgorICogU2h1dCBkb3duIHRoZSBhZHZpY2Ug c2Nhbm5lci4KKyAqCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgcGFyc2luZyBpcyBj b21wbGV0ZS4KKyAqLwordm9pZAorcGdwYV9zY2FubmVyX2ZpbmlzaCh5eXNjYW5fdCB5eXNjYW5u ZXIpCit7CisJeXlsZXhfZGVzdHJveSh5eXNjYW5uZXIpOworfQorCisvKgorICogSW50ZXJmYWNl IGZ1bmN0aW9ucyB0byBtYWtlIGZsZXggdXNlIHBhbGxvYygpIGluc3RlYWQgb2YgbWFsbG9jKCku CisgKiBJdCdkIGJlIGJldHRlciB0byBtYWtlIHRoZXNlIHN0YXRpYywgYnV0IGZsZXggaW5zaXN0 cyBvdGhlcndpc2UuCisgKi8KKwordm9pZCAqCit5eWFsbG9jKHl5X3NpemVfdCBzaXplLCB5eXNj YW5fdCB5eXNjYW5uZXIpCit7CisJcmV0dXJuIHBhbGxvYyhzaXplKTsKK30KKwordm9pZCAqCit5 eXJlYWxsb2Modm9pZCAqcHRyLCB5eV9zaXplX3Qgc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKQor eworCWlmIChwdHIpCisJCXJldHVybiByZXBhbGxvYyhwdHIsIHNpemUpOworCWVsc2UKKwkJcmV0 dXJuIHBhbGxvYyhzaXplKTsKK30KKwordm9pZAoreXlmcmVlKHZvaWQgKnB0ciwgeXlzY2FuX3Qg eXlzY2FubmVyKQoreworCWlmIChwdHIpCisJCXBmcmVlKHB0cik7Cit9CmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV90cm92ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5h OTIxMjFmZWIxZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV90cm92ZS5jCkBAIC0wLDAgKzEsNDkwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBw Z3BhX3Ryb3ZlLmMKKyAqCSAgQWxsIG9mIHRoZSBhZHZpY2UgZ2l2ZW4gZm9yIGEgcGFydGljdWxh ciBxdWVyeSwgYXBwcm9wcmlhdGVseQorICogICAgb3JnYW5pemVkIGZvciBjb252ZW5pZW50IGFj Y2Vzcy4KKyAqCisgKiBUaGlzIG5hbWUgY29tZXMgZnJvbSB0aGUgRW5nbGlzaCBleHByZXNzaW9u ICJ0cm92ZSBvZiBhZHZpY2UiLCB3aGljaAorICogbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHdpc2Rv bS4gVGhpcyBzbGlnaHRseSB1bnVzdWFsIHRlcm0gaXMgY2hvc2VuIHRvCisgKiBhdm9pZCBuYW1p bmcgY29uZnVzaW9uOyBmb3IgZXhhbXBsZSwgImNvbGxlY3Rpb24gb2YgYWR2aWNlIiB3b3VsZAor ICogaW52aXRlIGNvbmZ1c2lvbiB3aXRoIHBncGFfY29sbGVjdG9yLmMuIE5vdGUgdGhhdCwgd2hp bGUgd2UgZG9uJ3Qga25vdworICogd2hldGhlciB0aGUgcHJvdmlkZWQgYWR2aWNlIGlzIGFjdHVh bGx5IHdpc2UsIGl0J3Mgbm90IG91ciBqb2IgdG8KKyAqIHF1ZXN0aW9uIHRoZSB1c2VyJ3MgY2hv aWNlcy4KKyAqCisgKiBUaGUgZ29hbCBvZiB0aGlzIG1vZHVsZSBpcyB0byBtYWtlIGl0IGVhc3kg dG8gbG9jYXRlIHRoZSBzcGVjaWZpYworICogYml0cyBvZiBhZHZpY2UgdGhhdCBwZXJ0YWluIHRv IGFueSBnaXZlbiBwYXJ0IG9mIGEgcXVlcnksIG9yIHRvCisgKiBkZXRlcm1pbmUgdGhhdCB0aGVy ZSBhcmUgbm9uZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV90cm92ZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV90cm92ZS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2hh c2hmbl91bnN0YWJsZS5oIgorCisvKgorICogQW4gYWR2aWNlIHRyb3ZlIGlzIG9yZ2FuaXplZCBp bnRvIGEgc2VyaWVzIG9mICJzbGljZXMiLCBlYWNoIG9mIHdoaWNoCisgKiBjb250YWlucyBpbmZv cm1hdGlvbiBhYm91dCBvbmUgdG9waWMgZS5nLiBzY2FuIG1ldGhvZHMuIEVhY2ggc2xpY2UgY29u c2lzdHMKKyAqIG9mIGFuIGFycmF5IG9mIHRyb3ZlIGVudHJpZXMgcGx1cyBhIGhhc2ggdGFibGUg dGhhdCB3ZSBjYW4gdXNlIHRvIGRldGVybWluZQorICogd2hpY2ggb25lcyBhcmUgcmVsZXZhbnQg dG8gYSBwYXJ0aWN1bGFyIHBhcnQgb2YgdGhlIHF1ZXJ5LgorICovCit0eXBlZGVmIHN0cnVjdCBw Z3BhX3Ryb3ZlX3NsaWNlCit7CisJdW5zaWduZWQJbmFsbG9jYXRlZDsKKwl1bnNpZ25lZAludXNl ZDsKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzOworCXN0cnVjdCBwZ3BhX3Ryb3ZlX2VudHJ5 X2hhc2ggKmhhc2g7Cit9IHBncGFfdHJvdmVfc2xpY2U7CisKKy8qCisgKiBTY2FuIGFkdmljZSBp cyBzdG9yZWQgaW50byAnc2Nhbic7IGpvaW4gYWR2aWNlIGlzIHN0b3JlZCBpbnRvICdqb2luJzsg YW5kCisgKiBhZHZpY2UgdGhhdCBjYW4gYXBwbHkgdG8gYm90aCBjYXNlcyBpcyBzdG9yZWQgaW50 byAncmVsJy4gVGhpcyBsZXRzIGNhbGxlcnMKKyAqIGFzayBqdXN0IGZvciB3aGF0J3MgcmVsZXZh bnQuIFRoZXNlIHNsaWNlcyBjb3JyZXNwb25kIHRvIHRoZSBwb3NzaWJsZSB2YWx1ZXMKKyAqIG9m IHBncGFfdHJvdmVfbG9va3VwX3R5cGUuCisgKi8KK3N0cnVjdCBwZ3BhX3Ryb3ZlCit7CisJcGdw YV90cm92ZV9zbGljZSBqb2luOworCXBncGFfdHJvdmVfc2xpY2UgcmVsOworCXBncGFfdHJvdmVf c2xpY2Ugc2NhbjsKK307CisKKy8qCisgKiBXZSdyZSBnb2luZyB0byBidWlsZCBhIGhhc2ggdGFi bGUgdG8gYWxsb3cgY2xpZW50cyBvZiB0aGlzIG1vZHVsZSB0byBmaW5kCisgKiByZWxldmFudCBh ZHZpY2UgZm9yIGEgZ2l2ZW4gcGFydCBvZiB0aGUgcXVlcnkgcXVpY2tseS4gSG93ZXZlciwgd2Un cmUgZ29pbmcKKyAqIHRvIHVzZSBvbmx5IHRocmVlIG9mIHRoZSBmaXZlIGtleSBmaWVsZHMgYXMg aGFzaCBrZXlzLiBUaGVyZSBhcmUgdHdvIHJlYXNvbnMKKyAqIGZvciB0aGlzLgorICoKKyAqIEZp cnN0LCBpdCdzIGFsbG93YWJsZSB0byBzZXQgcGFydGl0aW9uX3NjaGVtYSB0byBOVUxMIHRvIG1h dGNoIGEgcGFydGl0aW9uCisgKiB3aXRoIHRoZSBjb3JyZWN0IG5hbWUgaW4gYW55IHNjaGVtYS4K KyAqCisgKiBTZWNvbmQsIHdlIGV4cGVjdCB0aGUgIm9jY3VycmVuY2UiIGFuZCAicGFydGl0aW9u X3NjaGVtYSIgcG9ydGlvbnMgb2YgdGhlCisgKiByZWxhdGlvbiBpZGVudGlmaWVycyB0byBiZSBt b3N0bHkgdW5pbnRlcmVzdGluZy4gTW9zdCBvZiB0aGUgdGltZSwgdGhlCisgKiBvY2N1cnJlbmNl IGZpZWxkIHdpbGwgYmUgMSBhbmQgdGhlIHBhcnRpdGlvbl9zY2hlbWEgdmFsdWVzIHdpbGwgYWxs IGJlIHRoZQorICogc2FtZS4gRXZlbiB3aGVuIHRoZXJlIGlzIHNvbWUgdmFyaWF0aW9uLCB0aGUg YWJzb2x1dGUgbnVtYmVyIG9mIGVudHJpZXMKKyAqIHRoYXQgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMg Zm9yIGFsbCB0aHJlZSBvZiB0aGVzZSBrZXkgZmllbGRzIHNob3VsZCBiZQorICogcXVpdGUgc21h bGwuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJY29uc3QgY2hhciAqYWxpYXNfbmFtZTsKKwlj b25zdCBjaGFyICpwYXJ0aXRpb25fbmFtZTsKKwljb25zdCBjaGFyICpwbGFuX25hbWU7Cit9IHBn cGFfdHJvdmVfZW50cnlfa2V5OworCit0eXBlZGVmIHN0cnVjdAoreworCXBncGFfdHJvdmVfZW50 cnlfa2V5IGtleTsKKwlpbnQJCQlzdGF0dXM7CisJQml0bWFwc2V0ICAqaW5kZXhlczsKK30gcGdw YV90cm92ZV9lbnRyeV9lbGVtZW50OworCitzdGF0aWMgdWludDMyIHBncGFfdHJvdmVfZW50cnlf aGFzaF9rZXkocGdwYV90cm92ZV9lbnRyeV9rZXkga2V5KTsKKworc3RhdGljIGlubGluZSBib29s CitwZ3BhX3Ryb3ZlX2VudHJ5X2NvbXBhcmVfa2V5KHBncGFfdHJvdmVfZW50cnlfa2V5IGEsIHBn cGFfdHJvdmVfZW50cnlfa2V5IGIpCit7CisJaWYgKHN0cmNtcChhLmFsaWFzX25hbWUsIGIuYWxp YXNfbmFtZSkgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFzdHJpbmdzX2VxdWFsX29y X2JvdGhfbnVsbChhLnBhcnRpdGlvbl9uYW1lLCBiLnBhcnRpdGlvbl9uYW1lKSkKKwkJcmV0dXJu IGZhbHNlOworCisJaWYgKCFzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChhLnBsYW5fbmFtZSwg Yi5wbGFuX25hbWUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworI2Rl ZmluZSBTSF9QUkVGSVgJCQlwZ3BhX3Ryb3ZlX2VudHJ5CisjZGVmaW5lIFNIX0VMRU1FTlRfVFlQ RQkJcGdwYV90cm92ZV9lbnRyeV9lbGVtZW50CisjZGVmaW5lIFNIX0tFWV9UWVBFCQkJcGdwYV90 cm92ZV9lbnRyeV9rZXkKKyNkZWZpbmUgU0hfS0VZCQkJCWtleQorI2RlZmluZSBTSF9IQVNIX0tF WSh0Yiwga2V5KQlwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2hfa2V5KGtleSkKKyNkZWZpbmUJU0hfRVFV QUwodGIsIGEsIGIpCXBncGFfdHJvdmVfZW50cnlfY29tcGFyZV9rZXkoYSwgYikKKyNkZWZpbmUg U0hfU0NPUEUJCQlzdGF0aWMgaW5saW5lCisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNkZWZpbmUgU0hf REVGSU5FCisjaW5jbHVkZSAibGliL3NpbXBsZWhhc2guaCIKKworc3RhdGljIHZvaWQgcGdwYV9p bml0X3Ryb3ZlX3NsaWNlKHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSk7CitzdGF0aWMgdm9pZCBw Z3BhX3Ryb3ZlX2FkZF90b19zbGljZShwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsCisJCQkJCQkJ CQlwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcsCisJCQkJCQkJCQlwZ3BhX2FkdmljZV90YXJnZXQg KnRhcmdldCk7CitzdGF0aWMgdm9pZCBwZ3BhX3Ryb3ZlX2FkZF90b19oYXNoKHBncGFfdHJvdmVf ZW50cnlfaGFzaCAqaGFzaCwKKwkJCQkJCQkJICAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQs CisJCQkJCQkJCSAgIGludCBpbmRleCk7CitzdGF0aWMgQml0bWFwc2V0ICpwZ3BhX3Ryb3ZlX3Ns aWNlX2xvb2t1cChwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsCisJCQkJCQkJCQkJICBwZ3BhX2lk ZW50aWZpZXIgKnJpZCk7CisKKy8qCisgKiBCdWlsZCBhIHRyb3ZlIG9mIGFkdmljZSBmcm9tIGEg bGlzdCBvZiBhZHZpY2UgaXRlbXMuCisgKgorICogQ2FsbGVyIGNhbiBvYnRhaW4gYSBsaXN0IG9m IGFkdmljZSBpdGVtcyB0byBwYXNzIHRvIHRoaXMgZnVuY3Rpb24gYnkKKyAqIGNhbGxpbmcgcGdw YV9wYXJzZSgpLgorICovCitwZ3BhX3Ryb3ZlICoKK3BncGFfYnVpbGRfdHJvdmUoTGlzdCAqYWR2 aWNlX2l0ZW1zKQoreworCXBncGFfdHJvdmUgKnRyb3ZlID0gcGFsbG9jX29iamVjdChwZ3BhX3Ry b3ZlKTsKKworCXBncGFfaW5pdF90cm92ZV9zbGljZSgmdHJvdmUtPmpvaW4pOworCXBncGFfaW5p dF90cm92ZV9zbGljZSgmdHJvdmUtPnJlbCk7CisJcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKCZ0cm92 ZS0+c2Nhbik7CisKKwlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV9pdGVtLCBpdGVtLCBhZHZpY2Vf aXRlbXMpCisJeworCQlzd2l0Y2ggKGl0ZW0tPnRhZykKKwkJeworCQkJY2FzZSBQR1BBX1RBR19K T0lOX09SREVSOgorCQkJCXsKKwkJCQkJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQ7CisKKwkJ CQkJLyoKKwkJCQkJICogRm9yIG1vc3QgYWR2aWNlIHR5cGVzLCBlYWNoIGVsZW1lbnQgaW4gdGhl IHRvcC1sZXZlbAorCQkJCQkgKiBsaXN0IGlzIGEgc2VwYXJhdGUgdGFyZ2V0LCBidXQgaXQncyBt b3N0IGNvbnZlbmllbnQgdG8KKwkJCQkJICogcmVnYXJkIHRoZSBlbnRpcmV0eSBvZiBhIEpPSU5f T1JERVIgc3BlY2lmaWNhdGlvbiBhcyBhCisJCQkJCSAqIHNpbmdsZSB0YXJnZXQuIFNpbmNlIGl0 IHdhc24ndCByZXByZXNlbnRlZCB0aGF0IHdheQorCQkJCQkgKiBkdXJpbmcgcGFyc2luZywgYnVp bGQgYSBzdXJyb2dhdGUgb2JqZWN0IG5vdy4KKwkJCQkJICovCisJCQkJCXRhcmdldCA9IHBhbGxv YzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJCQkJCXRhcmdldC0+dHR5cGUgPSBQR1BB X1RBUkdFVF9PUkRFUkVEX0xJU1Q7CisJCQkJCXRhcmdldC0+Y2hpbGRyZW4gPSBpdGVtLT50YXJn ZXRzOworCisJCQkJCXBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92ZS0+am9pbiwKKwkJCQkJ CQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBQ R1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOgorCQkJY2FzZSBQR1BBX1RBR19JTkRFWF9PTkxZX1ND QU46CisJCQljYXNlIFBHUEFfVEFHX0lOREVYX1NDQU46CisJCQljYXNlIFBHUEFfVEFHX1NFUV9T Q0FOOgorCQkJY2FzZSBQR1BBX1RBR19USURfU0NBTjoKKworCQkJCS8qCisJCQkJICogU2NhbiBh ZHZpY2UuCisJCQkJICovCisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJn ZXQsIGl0ZW0tPnRhcmdldHMpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3Igbm93LCBhbGwg b2Ygb3VyIHNjYW4gdHlwZXMgdGFyZ2V0IHNpbmdsZSByZWxhdGlvbnMsCisJCQkJCSAqIGJ1dCBp biB0aGUgZnV0dXJlIHRoaXMgbWlnaHQgbm90IGJlIHRydWUsIGUuZy4gYSBjdXN0b20KKwkJCQkJ ICogc2NhbiBjb3VsZCByZXBsYWNlIGEgam9pbi4KKwkJCQkJICovCisJCQkJCUFzc2VydCh0YXJn ZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpOworCQkJCQlwZ3BhX3Ryb3ZlX2Fk ZF90b19zbGljZSgmdHJvdmUtPnNjYW4sCisJCQkJCQkJCQkJCWl0ZW0tPnRhZywgdGFyZ2V0KTsK KwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUEdQQV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJ Y2FzZSBQR1BBX1RBR19IQVNIX0pPSU46CisJCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFU RVJJQUxJWkU6CisJCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU46CisJCQljYXNlIFBH UEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJY2FzZSBQR1BBX1RBR19ORVNURURf TE9PUF9NRU1PSVpFOgorCQkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjoKKwkJCWNh c2UgUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRToKKwkJCWNhc2UgUEdQQV9UQUdfU0VNSUpP SU5fVU5JUVVFOgorCisJCQkJLyoKKwkJCQkgKiBKb2luIHN0cmF0ZWd5IGFkdmljZS4KKwkJCQkg Ki8KKwkJCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRhcmdldCwgaXRlbS0+dGFy Z2V0cykKKwkJCQl7CisJCQkJCXBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92ZS0+am9pbiwK KwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJ Y2FzZSBQR1BBX1RBR19QQVJUSVRJT05XSVNFOgorCQkJY2FzZSBQR1BBX1RBR19HQVRIRVI6CisJ CQljYXNlIFBHUEFfVEFHX0dBVEhFUl9NRVJHRToKKwkJCWNhc2UgUEdQQV9UQUdfTk9fR0FUSEVS OgorCisJCQkJLyoKKwkJCQkgKiBBZHZpY2UgYWJvdXQgYSBSZWxPcHRJbmZvIHJlbGV2YW50IHRv IGJvdGggc2NhbnMgYW5kIGpvaW5zLgorCQkJCSAqLworCQkJCWZvcmVhY2hfcHRyKHBncGFfYWR2 aWNlX3RhcmdldCwgdGFyZ2V0LCBpdGVtLT50YXJnZXRzKQorCQkJCXsKKwkJCQkJcGdwYV90cm92 ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5yZWwsCisJCQkJCQkJCQkJCWl0ZW0tPnRhZywgdGFyZ2V0 KTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJvdmU7Cit9CisKKy8q CisgKiBTZWFyY2ggYSB0cm92ZSBvZiBhZHZpY2UgZm9yIHJlbGV2YW50IGVudHJpZXMuCisgKgor ICogQWxsIHBhcmFtZXRlcnMgYXJlIGlucHV0IHBhcmFtZXRlcnMgZXhjZXB0IGZvciAqcmVzdWx0 LCB3aGljaCBpcyBhbiBvdXRwdXQKKyAqIHBhcmFtZXRlciB1c2VkIHRvIHJldHVybiByZXN1bHRz IHRvIHRoZSBjYWxsZXIuCisgKi8KK3ZvaWQKK3BncGFfdHJvdmVfbG9va3VwKHBncGFfdHJvdmUg KnRyb3ZlLCBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUsCisJCQkJICBpbnQgbnJpZHMsIHBn cGFfaWRlbnRpZmllciAqcmlkcywgcGdwYV90cm92ZV9yZXN1bHQgKnJlc3VsdCkKK3sKKwlwZ3Bh X3Ryb3ZlX3NsaWNlICp0c2xpY2U7CisJQml0bWFwc2V0ICAqaW5kZXhlczsKKworCUFzc2VydChu cmlkcyA+IDApOworCisJaWYgKHR5cGUgPT0gUEdQQV9UUk9WRV9MT09LVVBfU0NBTikKKwkJdHNs aWNlID0gJnRyb3ZlLT5zY2FuOworCWVsc2UgaWYgKHR5cGUgPT0gUEdQQV9UUk9WRV9MT09LVVBf Sk9JTikKKwkJdHNsaWNlID0gJnRyb3ZlLT5qb2luOworCWVsc2UKKwkJdHNsaWNlID0gJnRyb3Zl LT5yZWw7CisKKwlpbmRleGVzID0gcGdwYV90cm92ZV9zbGljZV9sb29rdXAodHNsaWNlLCAmcmlk c1swXSk7CisJZm9yIChpbnQgaSA9IDE7IGkgPCBucmlkczsgKytpKQorCXsKKwkJQml0bWFwc2V0 ICAqb3RoZXJfaW5kZXhlczsKKworCQkvKgorCQkgKiBJZiB0aGUgY2FsbGVyIGlzIGFza2luZyBh Ym91dCB0d28gcmVsYXRpb25zIHRoYXQgYXJlbid0IHBhcnQgb2YgdGhlCisJCSAqIHNhbWUgc3Vi cXVlcnksIHRoZXkndmUgbWVzc2VkIHVwLgorCQkgKi8KKwkJQXNzZXJ0KHN0cmluZ3NfZXF1YWxf b3JfYm90aF9udWxsKHJpZHNbMF0ucGxhbl9uYW1lLAorCQkJCQkJCQkJCSAgcmlkc1tpXS5wbGFu X25hbWUpKTsKKworCQlvdGhlcl9pbmRleGVzID0gcGdwYV90cm92ZV9zbGljZV9sb29rdXAodHNs aWNlLCAmcmlkc1tpXSk7CisJCWluZGV4ZXMgPSBibXNfdW5pb24oaW5kZXhlcywgb3RoZXJfaW5k ZXhlcyk7CisJfQorCisJcmVzdWx0LT5lbnRyaWVzID0gdHNsaWNlLT5lbnRyaWVzOworCXJlc3Vs dC0+aW5kZXhlcyA9IGluZGV4ZXM7Cit9CisKKy8qCisgKiBSZXR1cm4gYWxsIGVudHJpZXMgaW4g YSB0cm92ZSBzbGljZSB0byB0aGUgY2FsbGVyLgorICoKKyAqIFRoZSBmaXJzdCB0d28gYXJndW1l bnRzIGFyZSBpbnB1dCBhcmd1bWVudHMsIGFuZCB0aGUgcmVtYWluZGVyIGFyZSBvdXRwdXQKKyAq IGFyZ3VtZW50cy4KKyAqLwordm9pZAorcGdwYV90cm92ZV9sb29rdXBfYWxsKHBncGFfdHJvdmUg KnRyb3ZlLCBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUsCisJCQkJCSAgcGdwYV90cm92ZV9l bnRyeSAqKmVudHJpZXMsIGludCAqbmVudHJpZXMpCit7CisJcGdwYV90cm92ZV9zbGljZSAqdHNs aWNlOworCisJaWYgKHR5cGUgPT0gUEdQQV9UUk9WRV9MT09LVVBfU0NBTikKKwkJdHNsaWNlID0g JnRyb3ZlLT5zY2FuOworCWVsc2UgaWYgKHR5cGUgPT0gUEdQQV9UUk9WRV9MT09LVVBfSk9JTikK KwkJdHNsaWNlID0gJnRyb3ZlLT5qb2luOworCWVsc2UKKwkJdHNsaWNlID0gJnRyb3ZlLT5yZWw7 CisKKwkqZW50cmllcyA9IHRzbGljZS0+ZW50cmllczsKKwkqbmVudHJpZXMgPSB0c2xpY2UtPm51 c2VkOworfQorCisvKgorICogQ29udmVydCBhIHRyb3ZlIGVudHJ5IHRvIGFuIGl0ZW0gb2YgcGxh biBhZHZpY2UgdGhhdCB3b3VsZCBwcm9kdWNlIGl0LgorICovCitjaGFyICoKK3BncGFfY3N0cmlu Z190cm92ZV9lbnRyeShwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSkKK3sKKwlTdHJpbmdJbmZvRGF0 YSBidWY7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZidWYs ICIlcyIsIHBncGFfY3N0cmluZ19hZHZpY2VfdGFnKGVudHJ5LT50YWcpKTsKKworCS8qIEpPSU5f T1JERVIgdGFncyBhcmUgdHJhbnNmb3JtZWQgYnkgcGdwYV9idWlsZF90cm92ZTsgdW5kbyB0aGF0 IGhlcmUgKi8KKwlpZiAoZW50cnktPnRhZyAhPSBQR1BBX1RBR19KT0lOX09SREVSKQorCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnKCcpOworCWVsc2UKKwkJQXNzZXJ0KGVudHJ5LT50YXJn ZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCk7CisKKwlwZ3BhX2Zvcm1hdF9h ZHZpY2VfdGFyZ2V0KCZidWYsIGVudHJ5LT50YXJnZXQpOworCisJaWYgKGVudHJ5LT50YXJnZXQt Pml0YXJnZXQgIT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICcgJyk7 CisJCXBncGFfZm9ybWF0X2luZGV4X3RhcmdldCgmYnVmLCBlbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0 KTsKKwl9CisKKwlpZiAoZW50cnktPnRhZyAhPSBQR1BBX1RBR19KT0lOX09SREVSKQorCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnKScpOworCisJcmV0dXJuIGJ1Zi5kYXRhOworfQorCisv KgorICogU2V0IFBHUEFfVEVfKiBmbGFncyBvbiBhIHNldCBvZiB0cm92ZSBlbnRyaWVzLgorICov Cit2b2lkCitwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzLCBC aXRtYXBzZXQgKmluZGV4ZXMsIGludCBmbGFncykKK3sKKwlpbnQJCQlpID0gLTE7CisKKwl3aGls ZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIoaW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ry b3ZlX2VudHJ5ICplbnRyeSA9ICZlbnRyaWVzW2ldOworCisJCWVudHJ5LT5mbGFncyB8PSBmbGFn czsKKwl9Cit9CisKKy8qCisgKiBBZGQgYSBuZXcgYWR2aWNlIHRhcmdldCB0byBhbiBleGlzdGlu ZyBwZ3BhX3Ryb3ZlX3NsaWNlIG9iamVjdC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfdHJvdmVf YWRkX3RvX3NsaWNlKHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSwKKwkJCQkJCXBncGFfYWR2aWNl X3RhZ190eXBlIHRhZywKKwkJCQkJCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQoreworCXBn cGFfdHJvdmVfZW50cnkgKmVudHJ5OworCisJaWYgKHRzbGljZS0+bnVzZWQgPj0gdHNsaWNlLT5u YWxsb2NhdGVkKQorCXsKKwkJaW50CQkJbmV3X2FsbG9jYXRlZDsKKworCQluZXdfYWxsb2NhdGVk ID0gdHNsaWNlLT5uYWxsb2NhdGVkICogMjsKKwkJdHNsaWNlLT5lbnRyaWVzID0gcmVwYWxsb2Nf YXJyYXkodHNsaWNlLT5lbnRyaWVzLCBwZ3BhX3Ryb3ZlX2VudHJ5LAorCQkJCQkJCQkJCSBuZXdf YWxsb2NhdGVkKTsKKwkJdHNsaWNlLT5uYWxsb2NhdGVkID0gbmV3X2FsbG9jYXRlZDsKKwl9CisK KwllbnRyeSA9ICZ0c2xpY2UtPmVudHJpZXNbdHNsaWNlLT5udXNlZF07CisJZW50cnktPnRhZyA9 IHRhZzsKKwllbnRyeS0+dGFyZ2V0ID0gdGFyZ2V0OworCWVudHJ5LT5mbGFncyA9IDA7CisKKwlw Z3BhX3Ryb3ZlX2FkZF90b19oYXNoKHRzbGljZS0+aGFzaCwgdGFyZ2V0LCB0c2xpY2UtPm51c2Vk KTsKKworCXRzbGljZS0+bnVzZWQrKzsKK30KKworLyoKKyAqIFVwZGF0ZSB0aGUgaGFzaCB0YWJs ZSBmb3IgYSBuZXdseS1hZGRlZCBhZHZpY2UgdGFyZ2V0LgorICovCitzdGF0aWMgdm9pZAorcGdw YV90cm92ZV9hZGRfdG9faGFzaChwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2ggKmhhc2gsIHBncGFfYWR2 aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJCQkgICBpbnQgaW5kZXgpCit7CisJcGdwYV90cm92ZV9l bnRyeV9rZXkga2V5OworCXBncGFfdHJvdmVfZW50cnlfZWxlbWVudCAqZWxlbWVudDsKKwlib29s CQlmb3VuZDsKKworCS8qIEZvciBub24taWRlbnRpZmllcnMsIGFkZCBlbnRyaWVzIGZvciBhbGwg ZGVzY2VuZGVudHMuICovCisJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRfSURFTlRJ RklFUikKKwl7CisJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0 LCB0YXJnZXQtPmNoaWxkcmVuKQorCQl7CisJCQlwZ3BhX3Ryb3ZlX2FkZF90b19oYXNoKGhhc2gs IGNoaWxkX3RhcmdldCwgaW5kZXgpOworCQl9CisJCXJldHVybjsKKwl9CisKKwkvKiBTYW5pdHkg Y2hlY2tzLiAqLworCUFzc2VydCh0YXJnZXQtPnJpZC5vY2N1cnJlbmNlID4gMCk7CisJQXNzZXJ0 KHRhcmdldC0+cmlkLmFsaWFzX25hbWUgIT0gTlVMTCk7CisKKwkvKiBBZGQgYW4gZW50cnkgZm9y IHRoaXMgcmVsYXRpb24gaWRlbnRpZmllci4gKi8KKwlrZXkuYWxpYXNfbmFtZSA9IHRhcmdldC0+ cmlkLmFsaWFzX25hbWU7CisJa2V5LnBhcnRpdGlvbl9uYW1lID0gdGFyZ2V0LT5yaWQucGFydHJl bDsKKwlrZXkucGxhbl9uYW1lID0gdGFyZ2V0LT5yaWQucGxhbl9uYW1lOworCWVsZW1lbnQgPSBw Z3BhX3Ryb3ZlX2VudHJ5X2luc2VydChoYXNoLCBrZXksICZmb3VuZCk7CisJZWxlbWVudC0+aW5k ZXhlcyA9IGJtc19hZGRfbWVtYmVyKGVsZW1lbnQtPmluZGV4ZXMsIGluZGV4KTsKK30KKworLyoK KyAqIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBwZ3BhX3Ryb3ZlX3NsaWNlIG9iamVjdC4K KyAqLworc3RhdGljIHZvaWQKK3BncGFfaW5pdF90cm92ZV9zbGljZShwZ3BhX3Ryb3ZlX3NsaWNl ICp0c2xpY2UpCit7CisJLyoKKwkgKiBJbiBhbiBpZGVhbCB3b3JsZCwgd2UnbGwgbWFrZSB0c2xp Y2UtPm5hbGxvY2F0ZWQgYmlnIGVub3VnaCB0aGF0IHRoZQorCSAqIGFycmF5IGFuZCBoYXNoIHRh YmxlIHdpbGwgYmUgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIG51bWJlciBvZgorCSAqIGFk dmljZSBpdGVtcyBpbiB0aGlzIHRyb3ZlIHNsaWNlLCBidXQgYSBnZW5lcm91cyBkZWZhdWx0IHZh bHVlIGlzIG5vdAorCSAqIGdvb2QgZm9yIHBlcmZvcm1hbmNlLCBiZWNhdXNlIHBncGFfaW5pdF90 cm92ZV9zbGljZSgpIGhhcyB0byB6ZXJvIGFuCisJICogYW1vdW50IG9mIG1lbW9yeSBwcm9wb3J0 aW9uYWwgdG8gdHNsaWNlLT5uYWxsb2NhdGVkLiBIZW5jZSwgd2Uga2VlcCB0aGUKKwkgKiBzdGFy dGluZyB2YWx1ZSBxdWl0ZSBzbWFsbCwgb24gdGhlIHRoZW9yeSB0aGF0IGFkdmljZSBzdHJpbmdz IHdpbGwKKwkgKiBvZnRlbiBiZSByZWxhdGl2ZWx5IHNob3J0LgorCSAqLworCXRzbGljZS0+bmFs bG9jYXRlZCA9IDE2OworCXRzbGljZS0+bnVzZWQgPSAwOworCXRzbGljZS0+ZW50cmllcyA9IHBh bGxvY19hcnJheShwZ3BhX3Ryb3ZlX2VudHJ5LCB0c2xpY2UtPm5hbGxvY2F0ZWQpOworCXRzbGlj ZS0+aGFzaCA9IHBncGFfdHJvdmVfZW50cnlfY3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAor CQkJCQkJCQkJCSAgIHRzbGljZS0+bmFsbG9jYXRlZCwgTlVMTCk7Cit9CisKKy8qCisgKiBGYXN0 IGhhc2ggZnVuY3Rpb24gZm9yIGEga2V5IGNvbnNpc3Rpbmcgb2YgYWxpYXNfbmFtZSwgcGFydGl0 aW9uX25hbWUsCisgKiBhbmQgcGxhbl9uYW1lLgorICovCitzdGF0aWMgdWludDMyCitwZ3BhX3Ry b3ZlX2VudHJ5X2hhc2hfa2V5KHBncGFfdHJvdmVfZW50cnlfa2V5IGtleSkKK3sKKwlmYXN0aGFz aF9zdGF0ZSBoczsKKwlpbnQJCQlzcF9sZW47CisKKwlmYXN0aGFzaF9pbml0KCZocywgMCk7CisK KwkvKiBhbGlhc19uYW1lIG1heSBub3QgYmUgTlVMTCAqLworCXNwX2xlbiA9IGZhc3RoYXNoX2Fj Y3VtX2NzdHJpbmcoJmhzLCBrZXkuYWxpYXNfbmFtZSk7CisKKwkvKiBwYXJ0aXRpb25fbmFtZSBh bmQgcGxhbl9uYW1lLCBob3dldmVyLCBjYW4gYmUgTlVMTCAqLworCWlmIChrZXkucGFydGl0aW9u X25hbWUgIT0gTlVMTCkKKwkJc3BfbGVuICs9IGZhc3RoYXNoX2FjY3VtX2NzdHJpbmcoJmhzLCBr ZXkucGFydGl0aW9uX25hbWUpOworCWlmIChrZXkucGxhbl9uYW1lICE9IE5VTEwpCisJCXNwX2xl biArPSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywga2V5LnBsYW5fbmFtZSk7CisKKwkvKgor CSAqIGhhc2hmbl91bnN0YWJsZS5oIHJlY29tbWVuZHMgdXNpbmcgc3RyaW5nIGxlbmd0aCBhcyB0 d2Vhay4gSXQncyBub3QKKwkgKiBjbGVhciB0byBtZSB3aGF0IHRvIGRvIGlmIHRoZXJlIGFyZSBt dWx0aXBsZSBzdHJpbmdzLCBzbyBmb3Igbm93IEknbQorCSAqIGp1c3QgdXNpbmcgdGhlIHRvdGFs IG9mIGFsbCBvZiB0aGUgbGVuZ3Rocy4KKwkgKi8KKwlyZXR1cm4gZmFzdGhhc2hfZmluYWwzMigm aHMsIHNwX2xlbik7Cit9CisKKy8qCisgKiBMb29rIGZvciBtYXRjaGluZyBlbnRyaWVzLgorICov CitzdGF0aWMgQml0bWFwc2V0ICoKK3BncGFfdHJvdmVfc2xpY2VfbG9va3VwKHBncGFfdHJvdmVf c2xpY2UgKnRzbGljZSwgcGdwYV9pZGVudGlmaWVyICpyaWQpCit7CisJcGdwYV90cm92ZV9lbnRy eV9rZXkga2V5OworCXBncGFfdHJvdmVfZW50cnlfZWxlbWVudCAqZWxlbWVudDsKKwlCaXRtYXBz ZXQgICpyZXN1bHQgPSBOVUxMOworCisJQXNzZXJ0KHJpZC0+b2NjdXJyZW5jZSA+PSAxKTsKKwor CWtleS5hbGlhc19uYW1lID0gcmlkLT5hbGlhc19uYW1lOworCWtleS5wYXJ0aXRpb25fbmFtZSA9 IHJpZC0+cGFydHJlbDsKKwlrZXkucGxhbl9uYW1lID0gcmlkLT5wbGFuX25hbWU7CisKKwllbGVt ZW50ID0gcGdwYV90cm92ZV9lbnRyeV9sb29rdXAodHNsaWNlLT5oYXNoLCBrZXkpOworCisJaWYg KGVsZW1lbnQgIT0gTlVMTCkKKwl7CisJCWludAkJCWkgPSAtMTsKKworCQl3aGlsZSAoKGkgPSBi bXNfbmV4dF9tZW1iZXIoZWxlbWVudC0+aW5kZXhlcywgaSkpID49IDApCisJCXsKKwkJCXBncGFf dHJvdmVfZW50cnkgKmVudHJ5ID0gJnRzbGljZS0+ZW50cmllc1tpXTsKKworCQkJLyoKKwkJCSAq IFdlIGtub3cgdGhhdCB0aGlzIHRhcmdldCBvciBvbmUgb2YgaXRzIGRlc2NlbmRlbnRzIG1hdGNo ZXMgdGhlCisJCQkgKiBpZGVudGlmaWVyIG9uIHRoZSB0aHJlZSBrZXkgZmllbGRzIGFib3ZlLCBi dXQgd2UgZG9uJ3Qga25vdworCQkJICogd2hpY2ggZGVzY2VuZGVudCBvciB3aGV0aGVyIHRoZSBv Y2N1cmVuY2UgYW5kIHNjaGVtYSBhbHNvCisJCQkgKiBtYXRjaC4KKwkJCSAqLworCQkJaWYgKHBn cGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChyaWQsIGVudHJ5LT50YXJnZXQpKQorCQkJCXJl c3VsdCA9IGJtc19hZGRfbWVtYmVyKHJlc3VsdCwgaSk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVz dWx0OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uNDc5YzNmNzU3NzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaApAQCAtMCwwICsxLDExMyBAQAorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgorICogcGdwYV90cm92ZS5oCisgKgkgIEFsbCBvZiB0aGUgYWR2aWNl IGdpdmVuIGZvciBhIHBhcnRpY3VsYXIgcXVlcnksIGFwcHJvcHJpYXRlbHkKKyAqICAgIG9yZ2Fu aXplZCBmb3IgY29udmVuaWVudCBhY2Nlc3MuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIw MjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisjaWZuZGVmIFBHUEFfVFJPVkVfSAorI2RlZmluZSBQR1BBX1RST1ZFX0gKKworI2luY2x1ZGUg InBncGFfYXN0LmgiCisKKyNpbmNsdWRlICJub2Rlcy9iaXRtYXBzZXQuaCIKKwordHlwZWRlZiBz dHJ1Y3QgcGdwYV90cm92ZSBwZ3BhX3Ryb3ZlOworCisvKgorICogRmxhZ3MgdGhhdCBjYW4gYmUg c2V0IG9uIGEgcGdwYV90cm92ZV9lbnRyeSB0byBpbmRpY2F0ZSB3aGF0IGhhcHBlbmVkIHdoZW4K KyAqIHRyeWluZyB0byBwbGFuIHVzaW5nIGFkdmljZS4KKyAqCisgKiBQR1BBX1RFX01BVENIX1BB UlRJQUwgbWVhbnMgdGhhdCB3ZSBmb3VuZCBzb21lIHBhcnQgb2YgdGhlIHF1ZXJ5IHRoYXQgYXQK KyAqIGxlYXN0IHBhcnRpYWxseSBtYXRjaGVkIHRoZSB0YXJnZXQ7IGUuZy4gZ2l2ZW4gSk9JTl9P UkRFUihhIGIpLCB0aGlzIHdvdWxkCisgKiBiZSBzZXQgaWYgd2UgZXZlciBzYXcgYW55IGpvaW5y ZWwgaW5jbHVkaW5nIGVpdGhlciAiYSIgb3IgImIiLgorICoKKyAqIFBHUEFfVEVfTUFUQ0hfRlVM TCBtZWFucyB0aGF0IHdlIGZvdW5kIGFuIGV4YWN0IG1hdGNoIGZvciB0aGUgdGFyZ2V0OyBlLmcu CisgKiBnaXZlbiBKT0lOX09SREVSKGEgYiksIHRoaXMgd291bGQgYmUgc2V0IGlmIHdlIHNhdyBh IGpvaW5yZWwgY29udGFpbmluZworICogZXhhY3RseSAiYSIgYW5kICJiIiBhbmQgbm90aGluZyBl bHNlLgorICoKKyAqIFBHUEFfVEVfSU5BUFBMSUNBQkxFIG1lYW5zIHRoYXQgdGhlIGFkdmljZSBk b2Vzbid0IHByb3Blcmx5IGFwcGx5IHRvIHRoZQorICogdGFyZ2V0OyBlLmcuIElOREVYX1NDQU4o Zm9vIGJhcl9pZHgpIHdvdWxkIGJlIHNvIG1hcmtlZCBpZiBiYXJfaWR4IGRvZXMgbm90CisgKiBl eGlzdCBvbiBmb28uIFRoZSBmYWN0IHRoYXQgdGhpcyBiaXQgaGFzIGJlZW4gc2V0IGRvZXMgbm90 IG1lYW4gdGhhdCB0aGUKKyAqIGFkdmljZSBoYWQgbm8gZWZmZWN0LgorICoKKyAqIFBHUEFfVEVf Q09ORkxJQ1RJTkcgbWVhbnMgdGhhdCBhIGNvbmZsaWN0IHdhcyBkZXRlY3RlZCBiZXR3ZWVuIHdo YXQgdGhpcworICogYWR2aWNlIHdhbnRzIGFuZCB3aGF0IHNvbWUgb3RoZXIgcGxhbiBhZHZpY2Ug d2FudHM7IGUuZy4gSk9JTl9PUkRFUihhIGIpCisgKiB3b3VsZCBjb25mbGljdCB3aXRoIEhBU0hf Sk9JTihhKSwgYmVjYXVzZSB0aGUgZm9ybWVyIHJlcXVpcmVzICJhIiB0byBiZSB0aGUKKyAqIG91 dGVyIHRhYmxlIHdoaWxlIHRoZSBsYXR0ZXIgcmVxdWlyZXMgaXQgdG8gYmUgdGhlIGlubmVyIHRh YmxlLgorICoKKyAqIFBHUEFfVEVfRkFJTEVEIG1lYW5zIHRoYXQgdGhlIHJlc3VsdGluZyBwbGFu IGRpZCBub3QgY29uZm9ybSB0byB0aGUgYWR2aWNlLgorICovCisjZGVmaW5lIFBHUEFfVEVfTUFU Q0hfUEFSVElBTAkJMHgwMDAxCisjZGVmaW5lIFBHUEFfVEVfTUFUQ0hfRlVMTAkJCTB4MDAwMgor I2RlZmluZSBQR1BBX1RFX0lOQVBQTElDQUJMRQkJMHgwMDA0CisjZGVmaW5lIFBHUEFfVEVfQ09O RkxJQ1RJTkcJCQkweDAwMDgKKyNkZWZpbmUgUEdQQV9URV9GQUlMRUQJCQkJMHgwMDEwCisKKy8q CisgKiBFYWNoIGVudHJ5IGluIGEgdHJvdmUgb2YgYWR2aWNlIHJlcHJlc2VudHMgdGhlIGFwcGxp Y2F0aW9uIG9mIGEgdGFnIHRvCisgKiBhIHNpbmdsZSB0YXJnZXQuCisgKi8KK3R5cGVkZWYgc3Ry dWN0IHBncGFfdHJvdmVfZW50cnkKK3sKKwlwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWc7CisJcGdw YV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQ7CisJaW50CQkJZmxhZ3M7Cit9IHBncGFfdHJvdmVfZW50 cnk7CisKKy8qCisgKiBXaGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gZG9lcyB0aGUgY2FsbGVyIHdh bnQgdG8gZmluZCBpbiBhIHRyb3ZlPworICoKKyAqIFBHUEFfVFJPVkVfTE9PS1VQX1NDQU4gbWVh bnMgd2UncmUgbG9va2luZyBmb3Igc2NhbiBhZHZpY2UuCisgKgorICogUEdQQV9UUk9WRV9MT09L VVBfSk9JTiBtZWFucyB3ZSdyZSBsb29raW5nIGZvciBqb2luLXJlbGF0ZWQgYWR2aWNlLgorICog VGhpcyBpbmNsdWRlcyBqb2luIG9yZGVyIGFkdmljZSwgam9pbiBtZXRob2QgYWR2aWNlLCBhbmQg c2VtaWpvaW4tdW5pcXVlbmVzcworICogYWR2aWNlLgorICoKKyAqIFBHUEFfVFJPVkVfTE9PS1VQ X1JFTCBtZWFucyB3ZSdyZSBsb29raW5nIGZvciBnZW5lcmFsIGFkdmljZSBhYm91dCB0aGlzCisg KiBhIFJlbE9wdEluZm8gdGhhdCBtYXkgY29ycmVzcG9uZCB0byBlaXRoZXIgYSBzY2FuIG9yIGEg am9pbi4gVGhpcyBpbmNsdWRlcworICogZ2F0aGVyLXJlbGF0ZWQgYWR2aWNlIGFuZCBwYXJ0aXRp b253aXNlIGFkdmljZS4gTm90ZSB0aGF0IHBhcnRpdGlvbndpc2UKKyAqIGFkdmljZSBtaWdodCBz ZWVtIGxpa2Ugam9pbiBhZHZpY2UsIGJ1dCB0aGF0J3Mgbm90IGEgaGVscGZ1bCB3YXkgb2Ygdmll d2luZworICogdGhlIG1hdHRlciBiZWNhdXNlICgxKSBwYXJ0aXRpb253aXNlIGFkdmljZSBpcyBh bHNvIHJlbGV2YW50IGF0IHRoZSBzY2FuCisgKiBsZXZlbCBhbmQgKDIpIG90aGVyIHR5cGVzIG9m IGpvaW4gYWR2aWNlIGFmZmVjdCBvbmx5IHdoYXQgdG8gZG8gZnJvbQorICogam9pbl9wYXRoX3Nl dHVwX2hvb2ssIGJ1dCBwYXJ0aXRpb253aXNlIGFkdmljZSBhZmZlY3RzIHdoYXQgdG8gZG8gaW4K KyAqIGpvaW5yZWxfc2V0dXBfaG9vay4KKyAqLwordHlwZWRlZiBlbnVtIHBncGFfdHJvdmVfbG9v a3VwX3R5cGUKK3sKKwlQR1BBX1RST1ZFX0xPT0tVUF9KT0lOLAorCVBHUEFfVFJPVkVfTE9PS1VQ X1JFTCwKKwlQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOCit9IHBncGFfdHJvdmVfbG9va3VwX3R5cGU7 CisKKy8qCisgKiBUaGlzIHN0cnVjdCBpcyB1c2VkIHRvIHN0b3JlIHRoZSByZXN1bHQgb2YgYSB0 cm92ZSBsb29rdXAuIEZvciBlYWNoIG1lbWJlcgorICogb2YgImluZGV4ZXMiLCB0aGUgZW50cnkg YXQgdGhlIGNvcnJlc3BvbmRpbmcgb2Zmc2V0IHdpdGhpbiAiZW50cmllcyIgaXMgb25lCisgKiBv ZiB0aGUgcmVzdWx0cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV90cm92ZV9yZXN1bHQKK3sK KwlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzOworCUJpdG1hcHNldCAgKmluZGV4ZXM7Cit9IHBn cGFfdHJvdmVfcmVzdWx0OworCitleHRlcm4gcGdwYV90cm92ZSAqcGdwYV9idWlsZF90cm92ZShM aXN0ICphZHZpY2VfaXRlbXMpOworZXh0ZXJuIHZvaWQgcGdwYV90cm92ZV9sb29rdXAocGdwYV90 cm92ZSAqdHJvdmUsCisJCQkJCQkJICBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUsCisJCQkJ CQkJICBpbnQgbnJpZHMsCisJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJ ICBwZ3BhX3Ryb3ZlX3Jlc3VsdCAqcmVzdWx0KTsKK2V4dGVybiB2b2lkIHBncGFfdHJvdmVfbG9v a3VwX2FsbChwZ3BhX3Ryb3ZlICp0cm92ZSwKKwkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2xvb2t1cF90 eXBlIHR5cGUsCisJCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqKmVudHJpZXMsCisJCQkJCQkJ CSAgaW50ICpuZW50cmllcyk7CitleHRlcm4gY2hhciAqcGdwYV9jc3RyaW5nX3Ryb3ZlX2VudHJ5 KHBncGFfdHJvdmVfZW50cnkgKmVudHJ5KTsKK2V4dGVybiB2b2lkIHBncGFfdHJvdmVfc2V0X2Zs YWdzKHBncGFfdHJvdmVfZW50cnkgKmVudHJpZXMsCisJCQkJCQkJCSBCaXRtYXBzZXQgKmluZGV4 ZXMsIGludCBmbGFncyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3dhbGtlci5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ZWQyMjI5MTA5NgotLS0g L2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwpAQCAt MCwwICsxLDg5MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV93YWxrZXIuYwor ICoJICBQbGFuIHRyZWUgaXRlcmF0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ3BhX2pvaW4uaCIKKyNpbmNsdWRl ICJwZ3BhX3NjYW4uaCIKKyNpbmNsdWRlICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAibm9k ZXMvcGxhbm5vZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorCitzdGF0aWMg dm9pZCBwZ3BhX3dhbGtfcmVjdXJzaXZlbHkocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxr ZXIsIFBsYW4gKnBsYW4sCisJCQkJCQkJCSAgYm9vbCB3aXRoaW5fam9pbl9wcm9ibGVtLAorCQkJ CQkJCQkgIHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlciwKKwkJCQkJCQkJICBMaXN0 ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsCisJCQkJCQkJCSAgYm9vbCBiZW5lYXRoX2FueV9nYXRo ZXIpOworc3RhdGljIEJpdG1hcHNldCAqcGdwYV9wcm9jZXNzX3Vucm9sbGVkX2pvaW4ocGdwYV9w bGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJCSBwZ3BhX3Vucm9sbGVkX2pv aW4gKnVqb2luKTsKKworc3RhdGljIHBncGFfcXVlcnlfZmVhdHVyZSAqcGdwYV9hZGRfZmVhdHVy ZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJcGdwYV9xZl90 eXBlIHR5cGUsCisJCQkJCQkJCQkJCVBsYW4gKnBsYW4pOworCitzdGF0aWMgdm9pZCBwZ3BhX3Fm X2FkZF9ydGkoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBJbmRleCBydGkpOworc3RhdGlj IHZvaWQgcGdwYV9xZl9hZGRfcnRpcyhMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIEJpdG1h cHNldCAqcmVsaWRzKTsKK3N0YXRpYyB2b2lkIHBncGFfcWZfYWRkX3BsYW5fcnRpcyhMaXN0ICph Y3RpdmVfcXVlcnlfZmVhdHVyZXMsIFBsYW4gKnBsYW4sCisJCQkJCQkJCSAgTGlzdCAqcnRhYmxl KTsKKworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKHBncGFfdW5y b2xsZWRfam9pbiAqdWpvaW4sCisJCQkJCQkJCQkJICAgSW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJ CQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCSAg IHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJCQkJCQkJCSAgIGJvb2wgdG9wbGV2ZWwp Oworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzX21lbWJlcihwZ3Bh X2pvaW5fbWVtYmVyICptZW1iZXIsCisJCQkJCQkJCQkJCQkgIEluZGV4IHJ0YWJsZV9sZW5ndGgs CisJCQkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJ CQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKK3N0YXRpYyBib29sIHBncGFfd2Fs a2VyX2NvbnRhaW5zX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJ CQkJCQkgIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCSAgQml0bWFwc2V0 ICpyZWxpZHMpOworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZShwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkgcGdwYV9xZl90eXBlIHR5 cGUsCisJCQkJCQkJCQkJIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyBib29sIHBncGFfd2Fs a2VyX2NvbnRhaW5zX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJ CQkJCQkgIHBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCSAgQml0bWFwc2V0 ICpyZWxpZHMpOworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVyKHBn cGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAq cmVsaWRzKTsKK3N0YXRpYyBJbmRleCBwZ3BhX3dhbGtlcl9nZXRfcnRpKEluZGV4IHJ0YWJsZV9s ZW5ndGgsCisJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJ CQkgcGdwYV9pZGVudGlmaWVyICpyaWQpOworCisvKgorICogVG9wLWxldmVsIGVudHJ5cG9pbnQg Zm9yIHRoZSBwbGFuIHRyZWUgd2Fsay4KKyAqCisgKiBQb3B1bGF0ZXMgd2Fsa2VyIGJhc2VkIG9u IGEgdHJhdmVyc2FsIG9mIHRoZSBQbGFuIHRyZWVzIGluIHBzdG10LgorICovCit2b2lkCitwZ3Bh X3BsYW5fd2Fsa2VyKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFubmVkU3Rt dCAqcHN0bXQpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwkvKiBJbml0aWFsaXphdGlvbi4gKi8K KwltZW1zZXQod2Fsa2VyLCAwLCBzaXplb2YocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0KSk7CisJ d2Fsa2VyLT5wc3RtdCA9IHBzdG10OworCisJLyogV2FsayB0aGUgbWFpbiBwbGFuIHRyZWUuICov CisJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgcHN0bXQtPnBsYW5UcmVlLCAwLCBOVUxM LCBOSUwsIGZhbHNlKTsKKworCS8qIE1haW4gcGxhbiB0cmVlIHdhbGsgd29uJ3QgcmVhY2ggc3Vi cGxhbnMsIHNvIHdhbGsgdGhvc2UuICovCisJZm9yZWFjaChsYywgcHN0bXQtPnN1YnBsYW5zKQor CXsKKwkJUGxhbgkgICAqcGxhbiA9IGxmaXJzdChsYyk7CisKKwkJaWYgKHBsYW4gIT0gTlVMTCkK KwkJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHBsYW4sIDAsIE5VTEwsIE5JTCwgZmFs c2UpOworCX0KK30KKworLyoKKyAqIE1haW4gd29ya2hvcnNlIGZvciB0aGUgcGxhbiB0cmVlIHdh bGsuCisgKgorICogSWYgd2l0aGluX2pvaW5fcHJvYmxlbSBpcyB0cnVlLCB3ZSBlbmNvdW50ZXJl ZCBhIGpvaW4gYXQgc29tZSBoaWdoZXIgbGV2ZWwKKyAqIG9mIHRoZSB0cmVlIHdhbGsgYW5kIGhh dmVuJ3QgeWV0IGRlc2NlbmRlZCBvdXQgb2YgdGhlIHBvcnRpb24gb2YgdGhlIHBsYW4KKyAqIHRy ZWUgdGhhdCBpcyBwYXJ0IG9mIHRoYXQgc2FtZSBqb2luIHByb2JsZW0uIFdlJ3JlIG5vIGxvbmdl ciBpbiB0aGUgc2FtZQorICogam9pbiBwcm9ibGVtIGlmICgxKSB3ZSBjcm9zcyBpbnRvIGEgZGlm ZmVyZW50IHN1YnF1ZXJ5IG9yICgyKSB3ZSBkZXNjZW5kCisgKiB0aHJvdWdoIGFuIEFwcGVuZCBv ciBNZXJnZUFwcGVuZCBub2RlLCBiZWxvdyB3aGljaCBhbnkgZnVydGhlciBqb2lucyB3b3VsZAor ICogYmUgcGFydGl0aW9ud2lzZSBqb2lucyBwbGFubmVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgb3V0 ZXIgam9pbiBwcm9ibGVtLgorICoKKyAqIElmIGpvaW5fdW5yb2xsZXIgIT0gTlVMTCwgdGhlIGpv aW4gdW5yb2xsZXIgY29kZSBleHBlY3RzIHVzIHRvIGZpbmQgYSBqb2luCisgKiB0aGF0IHNob3Vs ZCBiZSB1bnJvbGxlZCBpbnRvIHRoYXQgb2JqZWN0LiBUaGlzIGltcGxpZXMgdGhhdCB3ZSdyZSB3 aXRoaW4gYQorICogam9pbiBwcm9ibGVtLCBidXQgdGhlIHJldmVyc2UgaXMgbm90IHRydWU6IHdo ZW4gd2UndmUgdHJhdmVyc2VkIGFsbCB0aGUKKyAqIGpvaW5zIGJ1dCBhcmUgc3RpbGwgbG9va2lu ZyBmb3IgdGhlIHNjYW4gdGhhdCBpcyB0aGUgbGVhZiBvZiB0aGUgam9pbiB0cmVlLAorICogam9p bl91bnJvbGxlciB3aWxsIGJlIE5VTEwgYnV0IHdpdGhpbl9qb2luX3Byb2JsZW0gd2lsbCBiZSB0 cnVlLgorICoKKyAqIEVhY2ggZWxlbWVudCBvZiBhY3RpdmVfcXVlcnlfZmVhdHVyZXMgY29ycmVz cG9uZHMgdG8gc29tZSBpdGVtIG9mIGFkdmljZQorICogdGhhdCBuZWVkcyB0byBlbnVtZXJhdGUg YWxsIHRoZSByZWxhdGlvbnMgaXQgYWZmZWN0cy4gV2UgYWRkIFJUSXMgd2UgZmluZAorICogZHVy aW5nIHRyZWUgdHJhdmVyc2FsIHRvIGVhY2ggb2YgdGhlc2UgcXVlcnkgZmVhdHVyZXMuCisgKgor ICogSWYgYmVuZWF0aF9hbnlfZ2F0aGVyID09IHRydWUsIHNvbWUgaGlnaGVyIGxldmVsIG9mIHRo ZSB0cmVlIHRyYXZlcnNhbCBmb3VuZAorICogYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUu CisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3dhbGtfcmVjdXJzaXZlbHkocGdwYV9wbGFuX3dhbGtl cl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJCSAgYm9vbCB3aXRoaW5fam9pbl9w cm9ibGVtLAorCQkJCQkgIHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlciwKKwkJCQkJ ICBMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsCisJCQkJCSAgYm9vbCBiZW5lYXRoX2FueV9n YXRoZXIpCit7CisJcGdwYV9qb2luX3Vucm9sbGVyICpvdXRlcl9qb2luX3Vucm9sbGVyID0gTlVM TDsKKwlwZ3BhX2pvaW5fdW5yb2xsZXIgKmlubmVyX2pvaW5fdW5yb2xsZXIgPSBOVUxMOworCWJv b2wJCWpvaW5fdW5yb2xsZXJfdG9wbGV2ZWwgPSBmYWxzZTsKKwlMaXN0CSAgICpwdXNoZG93bl9x dWVyeV9mZWF0dXJlcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlMaXN0CSAgICpleHRyYXBs YW5zID0gTklMOworCUxpc3QJICAgKmVsaWRlZF9ub2RlcyA9IE5JTDsKKworCUFzc2VydCh3aXRo aW5fam9pbl9wcm9ibGVtIHx8IGpvaW5fdW5yb2xsZXIgPT0gTlVMTCk7CisKKwkvKgorCSAqIElm IHRoaXMgaXMgYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUsIGRpcmVjdGx5IGFkZCBpdCB0 byB0aGUgbGlzdAorCSAqIG9mIGN1cnJlbnRseS1hY3RpdmUgcXVlcnkgZmVhdHVyZXMuCisJICoK KwkgKiBPdGhlcndpc2UsIGNoZWNrIHRoZSBmdXR1cmVfcXVlcnlfZmVhdHVyZXMgbGlzdCB0byBz ZWUgd2hldGhlciB0aGlzIHdhcworCSAqIHByZXZpb3VzbHkgaWRlbnRpZmllZCBhcyBhIHBsYW4g bm9kZSB0aGF0IG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXMgYQorCSAqIHF1ZXJ5IGZlYXR1cmUuCisJ ICoKKwkgKiBOb3RlIHRoYXQgdGhlIGNhbGxlciBhbHNvIGhhcyBhIGNvcHkgdG8gYWN0aXZlX3F1 ZXJ5X2ZlYXR1cmVzLCBzbyB3ZQorCSAqIGNhbid0IGRlc3RydWN0aXZlbHkgbW9kaWZ5IGl0IHdp dGhvdXQgbWFraW5nIGEgY29weS4KKwkgKi8KKwlpZiAoSXNBKHBsYW4sIEdhdGhlcikpCisJewor CQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPQorCQkJbGFwcGVuZChsaXN0X2NvcHkoYWN0aXZlX3F1 ZXJ5X2ZlYXR1cmVzKSwKKwkJCQkJcGdwYV9hZGRfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9HQVRI RVIsIHBsYW4pKTsKKwkJYmVuZWF0aF9hbnlfZ2F0aGVyID0gdHJ1ZTsKKwl9CisJZWxzZSBpZiAo SXNBKHBsYW4sIEdhdGhlck1lcmdlKSkKKwl7CisJCWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9CisJ CQlsYXBwZW5kKGxpc3RfY29weShhY3RpdmVfcXVlcnlfZmVhdHVyZXMpLAorCQkJCQlwZ3BhX2Fk ZF9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX0dBVEhFUl9NRVJHRSwgcGxhbikpOworCQliZW5lYXRo X2FueV9nYXRoZXIgPSB0cnVlOworCX0KKwllbHNlCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX3F1 ZXJ5X2ZlYXR1cmUsIHFmLCB3YWxrZXItPmZ1dHVyZV9xdWVyeV9mZWF0dXJlcykKKwkJeworCQkJ aWYgKHFmLT5wbGFuID09IHBsYW4pCisJCQl7CisJCQkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0g bGlzdF9jb3B5KGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyk7CisJCQkJYWN0aXZlX3F1ZXJ5X2ZlYXR1 cmVzID0gbGFwcGVuZChhY3RpdmVfcXVlcnlfZmVhdHVyZXMsIHFmKTsKKwkJCQl3YWxrZXItPmZ1 dHVyZV9xdWVyeV9mZWF0dXJlcyA9CisJCQkJCWxpc3RfZGVsZXRlX3B0cih3YWxrZXItPmZ1dHVy ZV9xdWVyeV9mZWF0dXJlcywgcGxhbik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkv KgorCSAqIEZpbmQgYWxsIGVsaWRlZCBub2RlcyBmb3IgdGhpcyBQbGFuIG5vZGUuCisJICovCisJ Zm9yZWFjaF9ub2RlKEVsaWRlZE5vZGUsIG4sIHdhbGtlci0+cHN0bXQtPmVsaWRlZE5vZGVzKQor CXsKKwkJaWYgKG4tPnBsYW5fbm9kZV9pZCA9PSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQllbGlk ZWRfbm9kZXMgPSBsYXBwZW5kKGVsaWRlZF9ub2Rlcywgbik7CisJfQorCisJLyogSWYgd2UgZm91 bmQgYW55IGVsaWRlZF9ub2RlcywgaGFuZGxlIHRoZW0uICovCisJaWYgKGVsaWRlZF9ub2RlcyAh PSBOSUwpCisJeworCQlpbnQJCQludW1fZWxpZGVkX25vZGVzID0gbGlzdF9sZW5ndGgoZWxpZGVk X25vZGVzKTsKKwkJRWxpZGVkTm9kZSAqbGFzdF9lbGlkZWRfbm9kZTsKKworCQkvKgorCQkgKiBS VElzIGZvciB0aGUgZmluYWwgLS0gYW5kIHRodXMgbG9naWNhbGx5IHVwcGVybW9zdCAtLSBlbGlk ZWQgbm9kZQorCQkgKiBzaG91bGQgYmUgY29sbGVjdGVkIGZvciBxdWVyeSBmZWF0dXJlcyBwYXNz ZWQgZG93biBieSB0aGUgY2FsbGVyLgorCQkgKiBIb3dldmVyLCBlbGlkZWQgbm9kZXMgYWN0IGFz IGJhcnJpZXJzIHRvIHF1ZXJ5IGZlYXR1cmVzLCB3aGljaAorCQkgKiBtZWFucyB0aGF0ICgxKSB0 aGUgcmVtYWluaW5nIGVsaWRlZCBub2RlcywgaWYgYW55LCBzaG91bGQgYmUKKwkJICogaWdub3Jl ZCBmb3IgcHVycG9zZXMgb2YgcXVlcnkgZmVhdHVyZXMgYW5kICgyKSB0aGUgbGlzdCBvZiBhY3Rp dmUKKwkJICogcXVlcnkgZmVhdHVyZXMgc2hvdWxkIGJlIHJlc2V0IHRvIGVtcHR5IHNvIHRoYXQg d2UgZG8gbm90IGFkZCBSVElzCisJCSAqIGZyb20gdGhlIHBsYW4gbm9kZSB0aGF0IGlzIGxvZ2lj YWxseSBiZW5lYXRoIHRoZSBlbGlkZWQgbm9kZSB0byB0aGUKKwkJICogcXVlcnkgZmVhdHVyZXMg cGFzc2VkIGRvd24gZnJvbSB0aGUgY2FsbGVyLgorCQkgKi8KKwkJbGFzdF9lbGlkZWRfbm9kZSA9 IGxpc3RfbnRoKGVsaWRlZF9ub2RlcywgbnVtX2VsaWRlZF9ub2RlcyAtIDEpOworCQlwZ3BhX3Fm X2FkZF9ydGlzKGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCSBwZ3BhX2ZpbHRlcl9vdXRf am9pbl9yZWxpZHMobGFzdF9lbGlkZWRfbm9kZS0+cmVsaWRzLAorCQkJCQkJCQkJCQkJCSB3YWxr ZXItPnBzdG10LT5ydGFibGUpKTsKKwkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0gTklMOworCisJ CS8qCisJCSAqIElmIHdlJ3JlIHdpdGhpbiBhIGpvaW4gcHJvYmxlbSwgdGhlIGpvaW5fdW5yb2xs ZXIgaXMgcmVzcG9uc2libGUKKwkJICogZm9yIGJ1aWxkaW5nIHRoZSBzY2FuIGZvciB0aGUgZmlu YWwgZWxpZGVkIG5vZGUsIHNvIHRocm93IGl0IG91dC4KKwkJICovCisJCWlmICh3aXRoaW5fam9p bl9wcm9ibGVtKQorCQkJZWxpZGVkX25vZGVzID0gbGlzdF90cnVuY2F0ZShlbGlkZWRfbm9kZXMs IG51bV9lbGlkZWRfbm9kZXMgLSAxKTsKKworCQkvKiBCdWlsZCBzY2FucyBmb3IgYWxsIChvciB0 aGUgcmVtYWluaW5nKSBlbGlkZWQgbm9kZXMuICovCisJCWZvcmVhY2hfbm9kZShFbGlkZWROb2Rl LCBlbGlkZWRfbm9kZSwgZWxpZGVkX25vZGVzKQorCQl7CisJCQkodm9pZCkgcGdwYV9idWlsZF9z Y2FuKHdhbGtlciwgcGxhbiwgZWxpZGVkX25vZGUsCisJCQkJCQkJCSAgIGJlbmVhdGhfYW55X2dh dGhlciwgd2l0aGluX2pvaW5fcHJvYmxlbSk7CisJCX0KKworCQkvKgorCQkgKiBJZiB0aGVyZSB3 ZXJlIGFueSBlbGlkZWQgbm9kZXMsIHRoZW4gZXZlcnl0aGluZyBiZW5lYXRoIHRob3NlIG5vZGVz CisJCSAqIGlzIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIGpvaW4gcHJvYmxlbS4KKwkJICoKKwkJICog SW4gbW9yZSBkZXRhaWwsIGlmIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCB3YXMgZWxpZGVkLCB0 aGVuIGEKKwkJICogcGFydGl0aW9ud2lzZSBqb2luIHdhcyBjaG9zZW4gYW5kIG9ubHkgYSBzaW5n bGUgY2hpbGQgc3Vydml2ZWQ7IGlmCisJCSAqIGEgU3VicXVlcnlTY2FuIHdhcyBlbGlkZWQsIHRo ZSBzdWJxdWVyeSB3YXMgcGxhbm5lZCB3aXRob3V0CisJCSAqIGZsYXR0ZW5pbmcgaXQgaW50byB0 aGUgcGFyZW50LgorCQkgKi8KKwkJd2l0aGluX2pvaW5fcHJvYmxlbSA9IGZhbHNlOworCQlqb2lu X3Vucm9sbGVyID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIElmIHdlJ3JlIHdpdGhpbiBhIGpvaW4g cHJvYmxlbSwgdGhlIGpvaW4gdW5yb2xsZXIgaXMgcmVzcG9uc2libGUgZm9yCisJICogYnVpbGRp bmcgYW55IHJlcXVpcmVkIHNjYW4gZm9yIHRoaXMgbm9kZS4gSWYgbm90LCB3ZSBkbyBpdCBoZXJl LgorCSAqLworCWlmICghd2l0aGluX2pvaW5fcHJvYmxlbSkKKwkJKHZvaWQpIHBncGFfYnVpbGRf c2Nhbih3YWxrZXIsIHBsYW4sIE5VTEwsIGJlbmVhdGhfYW55X2dhdGhlciwgZmFsc2UpOworCisJ LyoKKwkgKiBJZiB0aGlzIGpvaW4gbmVlZHMgdG8gdW5yb2xsZWQgYnV0IHRoZXJlJ3Mgbm8gam9p biB1bnJvbGxlciBhbHJlYWR5CisJICogYXZhaWxhYmxlLCBjcmVhdGUgb25lLgorCSAqLworCWlm IChqb2luX3Vucm9sbGVyID09IE5VTEwgJiYgcGdwYV9pc19qb2luKHBsYW4pKQorCXsKKwkJam9p bl91bnJvbGxlciA9IHBncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIoKTsKKwkJam9pbl91bnJvbGxl cl90b3BsZXZlbCA9IHRydWU7CisJCXdpdGhpbl9qb2luX3Byb2JsZW0gPSB0cnVlOworCX0KKwor CS8qCisJICogSWYgdGhpcyBqb2luIGlzIHRvIGJlIHVucm9sbGVkLCBwZ3BhX3Vucm9sbF9qb2lu KCkgd2lsbCByZXR1cm4gdGhlIGpvaW4KKwkgKiB1bnJvbGxlciBvYmplY3QgdGhhdCBzaG91bGQg YmUgcGFzc2VkIGRvd24gd2hlbiB3ZSByZWN1cnNlIGludG8gdGhlCisJICogb3V0ZXIgYW5kIGlu bmVyIHNpZGVzIG9mIHRoZSBwbGFuLgorCSAqLworCWlmIChqb2luX3Vucm9sbGVyICE9IE5VTEwp CisJCXBncGFfdW5yb2xsX2pvaW4od2Fsa2VyLCBwbGFuLCBiZW5lYXRoX2FueV9nYXRoZXIsIGpv aW5fdW5yb2xsZXIsCisJCQkJCQkgJm91dGVyX2pvaW5fdW5yb2xsZXIsICZpbm5lcl9qb2luX3Vu cm9sbGVyKTsKKworCS8qIEFkZCBSVElzIGZyb20gdGhlIHBsYW4gbm9kZSB0byBhbGwgYWN0aXZl IHF1ZXJ5IGZlYXR1cmVzLiAqLworCXBncGFfcWZfYWRkX3BsYW5fcnRpcyhhY3RpdmVfcXVlcnlf ZmVhdHVyZXMsIHBsYW4sIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisKKwkvKgorCSAqIFJlY3Vy c2UgaW50byB0aGUgb3V0ZXIgYW5kIGlubmVyIHN1YnRyZWVzLgorCSAqCisJICogQXMgYW4gZXhj ZXB0aW9uLCBpZiB0aGlzIGlzIGEgRm9yZWlnblNjYW4sIGRvbid0IHJlY3Vyc2UuIHBvc3RncmVz X2ZkdworCSAqIHNvbWV0aW1lcyBzdG9yZXMgYW4gRVBRIHJlY2hlY2sgcGxhbiBpbiBwbGFuLT5s ZWZ0cmVlLCBidXQgdGhhdCdzIGdvaW5nCisJICogdG8gbWVudGlvbiB0aGUgc2FtZSBzZXQgb2Yg cmVsYXRpb25zIGFzIHRoZSBGb3JlaWduU2NhbiBpdHNlbGYsIGFuZCB3ZQorCSAqIGhhdmUgbm8g d2F5IHRvIGVtaXQgYWR2aWNlIHRhcmdldGluZyB0aGUgRVBRIGNhc2UgdnMuIHRoZSBub24tRVBR IGNhc2UuCisJICogTW9yZW92ZXIsIGl0J3Mgbm90IGVudGlyZWx5IGNsZWFyIHdoYXQgb3RoZXIg RkRXcyBtaWdodCBkbyB3aXRoIHRoZQorCSAqIGxlZnQgYW5kIHJpZ2h0IHN1YnRyZWVzLiBNYXli ZSBzb21lIGJldHRlciBoYW5kbGluZyBpcyBuZWVkZWQgaGVyZSwgYnV0CisJICogZm9yIG5vdywg d2UganVzdCBwdW50LgorCSAqLworCWlmICghSXNBKHBsYW4sIEZvcmVpZ25TY2FuKSkKKwl7CisJ CWlmIChwbGFuLT5sZWZ0dHJlZSAhPSBOVUxMKQorCQkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdh bGtlciwgcGxhbi0+bGVmdHRyZWUsIHdpdGhpbl9qb2luX3Byb2JsZW0sCisJCQkJCQkJCSAgb3V0 ZXJfam9pbl91bnJvbGxlciwgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJCQkgIGJlbmVh dGhfYW55X2dhdGhlcik7CisJCWlmIChwbGFuLT5yaWdodHRyZWUgIT0gTlVMTCkKKwkJCXBncGFf d2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHBsYW4tPnJpZ2h0dHJlZSwgd2l0aGluX2pvaW5fcHJv YmxlbSwKKwkJCQkJCQkJICBpbm5lcl9qb2luX3Vucm9sbGVyLCBhY3RpdmVfcXVlcnlfZmVhdHVy ZXMsCisJCQkJCQkJCSAgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKKwl9CisKKwkvKgorCSAqIElmIHdl IGNyZWF0ZWQgYSBqb2luIHVucm9sbGVyIHVwIGFib3ZlLCB0aGVuIGl0J3MgYWxzbyBvdXIgam9p biB0byB1c2UKKwkgKiBpdCB0byBidWlsZCB0aGUgZmluYWwgcGdwYV91bnJvbGxlZF9qb2luLCBh bmQgdG8gZGVzdHJveSB0aGUgb2JqZWN0LgorCSAqLworCWlmIChqb2luX3Vucm9sbGVyX3RvcGxl dmVsKQorCXsKKwkJcGdwYV91bnJvbGxlZF9qb2luICp1am9pbjsKKworCQl1am9pbiA9IHBncGFf YnVpbGRfdW5yb2xsZWRfam9pbih3YWxrZXIsIGpvaW5fdW5yb2xsZXIpOworCQl3YWxrZXItPnRv cGxldmVsX3Vucm9sbGVkX2pvaW5zID0KKwkJCWxhcHBlbmQod2Fsa2VyLT50b3BsZXZlbF91bnJv bGxlZF9qb2lucywgdWpvaW4pOworCQlwZ3BhX2Rlc3Ryb3lfam9pbl91bnJvbGxlcihqb2luX3Vu cm9sbGVyKTsKKwkJKHZvaWQpIHBncGFfcHJvY2Vzc191bnJvbGxlZF9qb2luKHdhbGtlciwgdWpv aW4pOworCX0KKworCS8qCisJICogU29tZSBwbGFuIHR5cGVzIGNhbiBoYXZlIGFkZGl0aW9uYWwg Y2hpbGRyZW4uIE5vZGVzIGxpa2UgQXBwZW5kIHRoYXQKKwkgKiBjYW4gaGF2ZSBhbnkgbnVtYmVy IG9mIGNoaWxkcmVuIHN0b3JlIHRoZW0gaW4gYSBMaXN0OyBhIFN1YnF1ZXJ5U2NhbgorCSAqIGp1 c3QgaGFzIGEgZmllbGQgZm9yIGEgc2luZ2xlIGFkZGl0aW9uYWwgUGxhbi4KKwkgKi8KKwlzd2l0 Y2ggKG5vZGVUYWcocGxhbikpCisJeworCQljYXNlIFRfQXBwZW5kOgorCQkJeworCQkJCUFwcGVu ZAkgICAqYXBsYW4gPSAoQXBwZW5kICopIHBsYW47CisKKwkJCQlleHRyYXBsYW5zID0gYXBsYW4t PmFwcGVuZHBsYW5zOworCQkJCWlmIChibXNfaXNfZW1wdHkoYXBsYW4tPmFwcHJlbGlkcykpCisJ CQkJCXB1c2hkb3duX3F1ZXJ5X2ZlYXR1cmVzID0gYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzOworCQkJ fQorCQkJYnJlYWs7CisJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCXsKKwkJCQlNZXJnZUFwcGVu ZCAqbWFwbGFuID0gKE1lcmdlQXBwZW5kICopIHBsYW47CisKKwkJCQlleHRyYXBsYW5zID0gbWFw bGFuLT5tZXJnZXBsYW5zOworCQkJCWlmIChibXNfaXNfZW1wdHkobWFwbGFuLT5hcHByZWxpZHMp KQorCQkJCQlwdXNoZG93bl9xdWVyeV9mZWF0dXJlcyA9IGFjdGl2ZV9xdWVyeV9mZWF0dXJlczsK KwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfQml0bWFwQW5kOgorCQkJZXh0cmFwbGFucyA9ICgo Qml0bWFwQW5kICopIHBsYW4pLT5iaXRtYXBwbGFuczsKKwkJCWJyZWFrOworCQljYXNlIFRfQml0 bWFwT3I6CisJCQlleHRyYXBsYW5zID0gKChCaXRtYXBPciAqKSBwbGFuKS0+Yml0bWFwcGxhbnM7 CisJCQlicmVhazsKKwkJY2FzZSBUX1N1YnF1ZXJ5U2NhbjoKKworCQkJLyoKKwkJCSAqIFdlIGRv bid0IHBhc3MgZG93biBhY3RpdmVfcXVlcnlfZmVhdHVyZXMgYWNyb3NzIGhlcmUsIGJlY2F1c2UK KwkJCSAqIHRob3NlIGFyZSBzcGVjaWZpYyB0byBhIHN1YnF1ZXJ5IGxldmVsLgorCQkJICovCisJ CQlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCAoKFN1YnF1ZXJ5U2NhbiAqKSBwbGFuKS0+ c3VicGxhbiwKKwkJCQkJCQkJICAwLCBOVUxMLCBOSUwsIGJlbmVhdGhfYW55X2dhdGhlcik7CisJ CQlicmVhazsKKwkJY2FzZSBUX0N1c3RvbVNjYW46CisJCQlleHRyYXBsYW5zID0gKChDdXN0b21T Y2FuICopIHBsYW4pLT5jdXN0b21fcGxhbnM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJy ZWFrOworCX0KKworCS8qIElmIHdlIGZvdW5kIGEgbGlzdCBvZiBleHRyYSBjaGlsZHJlbiwgaXRl cmF0ZSBvdmVyIGl0LiAqLworCWZvcmVhY2gobGMsIGV4dHJhcGxhbnMpCisJeworCQlQbGFuCSAg ICpzdWJwbGFuID0gbGZpcnN0KGxjKTsKKworCQlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2Vy LCBzdWJwbGFuLCAwLCBOVUxMLCBwdXNoZG93bl9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCQkgIGJl bmVhdGhfYW55X2dhdGhlcik7CisJfQorfQorCisvKgorICogUGVyZm9ybSBmaW5hbCBwcm9jZXNz aW5nIG9mIGEgbmV3bHktY29uc3RydWN0ZWQgcGdwYV91bnJvbGxlZF9qb2luLiBUaGlzCisgKiBv bmx5IG5lZWRzIHRvIGJlIGNhbGxlZCBmb3IgdG9wbGV2ZWwgcGdwYV91bnJvbGxlZF9qb2luIG9i amVjdHMsIHNpbmNlIGl0CisgKiByZWN1cnNlcyB0byBzdWItam9pbnMgYXMgbmVlZGVkLgorICoK KyAqIE91ciBnb2FsIGlzIHRvIGFkZCB0aGUgc2V0IG9mIGlubmVyIHJlbGlkcyB0byB0aGUgcmVs ZXZhbnQgam9pbl9zdHJhdGVnaWVzCisgKiBsaXN0LCBhbmQgdG8gZG8gdGhlIHNhbWUgZm9yIGFu eSBzdWItam9pbnMuIFRvIHRoYXQgZW5kLCB0aGUgcmV0dXJuIHZhbHVlCisgKiBpcyB0aGUgc2V0 IG9mIHJlbGlkcyBmb3VuZCBiZW5lYXRoIHRoZSBpbm5lciBzaWRlIG9mIHRoZSBqb2luLCBidXQg aXQgaXMKKyAqIGV4cGVjdGVkIHRoYXQgdGhlIHRvcGxldmVsIGNhbGxlciB3aWxsIGlnbm9yZSB0 aGlzLgorICovCitzdGF0aWMgQml0bWFwc2V0ICoKK3BncGFfcHJvY2Vzc191bnJvbGxlZF9qb2lu KHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJICAgcGdwYV91bnJvbGxl ZF9qb2luICp1am9pbikKK3sKKwlCaXRtYXBzZXQgICphbGxfcmVsaWRzID0gTlVMTDsKKworCWZv ciAoaW50IGsgPSAwOyBrIDwgdWpvaW4tPm5pbm5lcjsgKytrKQorCXsKKwkJcGdwYV9qb2luX21l bWJlciAqbWVtYmVyID0gJnVqb2luLT5pbm5lcltrXTsKKwkJQml0bWFwc2V0ICAqcmVsaWRzOwor CisJCWlmIChtZW1iZXItPnVucm9sbGVkX2pvaW4gIT0gTlVMTCkKKwkJCXJlbGlkcyA9IHBncGFf cHJvY2Vzc191bnJvbGxlZF9qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJCW1lbWJlci0+dW5yb2xs ZWRfam9pbik7CisJCWVsc2UKKwkJeworCQkJQXNzZXJ0KG1lbWJlci0+c2NhbiAhPSBOVUxMKTsK KwkJCXJlbGlkcyA9IG1lbWJlci0+c2Nhbi0+cmVsaWRzOworCQl9CisJCXdhbGtlci0+am9pbl9z dHJhdGVnaWVzW3Vqb2luLT5zdHJhdGVneVtrXV0gPQorCQkJbGFwcGVuZCh3YWxrZXItPmpvaW5f c3RyYXRlZ2llc1t1am9pbi0+c3RyYXRlZ3lba11dLCByZWxpZHMpOworCQlhbGxfcmVsaWRzID0g Ym1zX2FkZF9tZW1iZXJzKGFsbF9yZWxpZHMsIHJlbGlkcyk7CisJfQorCisJcmV0dXJuIGFsbF9y ZWxpZHM7Cit9CisKKy8qCisgKiBBcnJhbmdlIGZvciB0aGUgZ2l2ZW4gcGxhbiBub2RlIHRvIGJl IHRyZWF0ZWQgYXMgYSBxdWVyeSBmZWF0dXJlIHdoZW4gdGhlCisgKiB0cmVlIHdhbGsgcmVhY2hl cyBpdC4KKyAqCisgKiBNYWtlIHN1cmUgdG8gb25seSB1c2UgdGhpcyBmb3Igbm9kZXMgdGhhdCB0 aGUgdHJlZSB3YWxrIGNhbid0IGhhdmUgcmVhY2hlZAorICogeWV0IQorICovCit2b2lkCitwZ3Bh X2FkZF9mdXR1cmVfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJ CQkJCXBncGFfcWZfdHlwZSB0eXBlLCBQbGFuICpwbGFuKQoreworCXBncGFfcXVlcnlfZmVhdHVy ZSAqcWYgPSBwZ3BhX2FkZF9mZWF0dXJlKHdhbGtlciwgdHlwZSwgcGxhbik7CisKKwl3YWxrZXIt PmZ1dHVyZV9xdWVyeV9mZWF0dXJlcyA9CisJCWxhcHBlbmQod2Fsa2VyLT5mdXR1cmVfcXVlcnlf ZmVhdHVyZXMsIHFmKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbGFzdCBvZiBhbnkgZWxpZGVk IG5vZGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBsYW4gbm9kZSBJRC4KKyAqCisgKiBUaGUgbGFz dCBlbGlkZWQgbm9kZSBpcyB0aGUgb25lIHRoYXQgd291bGQgaGF2ZSBiZWVuIHVwcGVybW9zdCBp biB0aGUgcGxhbgorICogdHJlZSBoYWQgaXQgbm90IGJlZW4gcmVtb3ZlZCBkdXJpbmcgc2V0cmVm cyBwcm9jZXNzaWcuCisgKi8KK0VsaWRlZE5vZGUgKgorcGdwYV9sYXN0X2VsaWRlZF9ub2RlKFBs YW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqcGxhbikKK3sKKwlFbGlkZWROb2RlICplbGlkZWRfbm9k ZSA9IE5VTEw7CisKKwlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgcHN0bXQtPmVsaWRlZE5v ZGVzKQorCXsKKwkJaWYgKG4tPnBsYW5fbm9kZV9pZCA9PSBwbGFuLT5wbGFuX25vZGVfaWQpCisJ CQllbGlkZWRfbm9kZSA9IG47CisJfQorCisJcmV0dXJuIGVsaWRlZF9ub2RlOworfQorCisvKgor ICogQ2VydGFpbiBwbGFuIG5vZGVzIGNhbiByZWZlciB0byBhIHNldCBvZiBSVElzLiBFeHRyYWN0 IGFuZCByZXR1cm4gdGhlIHNldC4KKyAqLworQml0bWFwc2V0ICoKK3BncGFfcmVsaWRzKFBsYW4g KnBsYW4pCit7CisJaWYgKElzQShwbGFuLCBSZXN1bHQpKQorCQlyZXR1cm4gKChSZXN1bHQgKikg cGxhbiktPnJlbGlkczsKKwllbHNlIGlmIChJc0EocGxhbiwgRm9yZWlnblNjYW4pKQorCQlyZXR1 cm4gKChGb3JlaWduU2NhbiAqKSBwbGFuKS0+ZnNfcmVsaWRzOworCWVsc2UgaWYgKElzQShwbGFu LCBBcHBlbmQpKQorCQlyZXR1cm4gKChBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkczsKKwllbHNl IGlmIChJc0EocGxhbiwgTWVyZ2VBcHBlbmQpKQorCQlyZXR1cm4gKChNZXJnZUFwcGVuZCAqKSBw bGFuKS0+YXBwcmVsaWRzOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBFeHRyYWN0IHRo ZSBzY2FubmVkIFJUSSBmcm9tIGEgcGxhbiBub2RlLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGVy ZSBpc24ndCBvbmUuCisgKi8KK0luZGV4CitwZ3BhX3NjYW5yZWxpZChQbGFuICpwbGFuKQorewor CXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKKwl7CisJCWNhc2UgVF9TZXFTY2FuOgorCQljYXNlIFRf U2FtcGxlU2NhbjoKKwkJY2FzZSBUX0JpdG1hcEhlYXBTY2FuOgorCQljYXNlIFRfVGlkU2NhbjoK KwkJY2FzZSBUX1RpZFJhbmdlU2NhbjoKKwkJY2FzZSBUX1N1YnF1ZXJ5U2NhbjoKKwkJY2FzZSBU X0Z1bmN0aW9uU2NhbjoKKwkJY2FzZSBUX1RhYmxlRnVuY1NjYW46CisJCWNhc2UgVF9WYWx1ZXNT Y2FuOgorCQljYXNlIFRfQ3RlU2NhbjoKKwkJY2FzZSBUX05hbWVkVHVwbGVzdG9yZVNjYW46CisJ CWNhc2UgVF9Xb3JrVGFibGVTY2FuOgorCQljYXNlIFRfRm9yZWlnblNjYW46CisJCWNhc2UgVF9D dXN0b21TY2FuOgorCQljYXNlIFRfSW5kZXhTY2FuOgorCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoK KwkJCXJldHVybiAoKFNjYW4gKikgcGxhbiktPnNjYW5yZWxpZDsKKwkJZGVmYXVsdDoKKwkJCXJl dHVybiAwOworCX0KK30KKworLyoKKyAqIENvbnN0cnVjdCBhIG5ldyBCaXRtYXBzZXQgY29udGFp bmluZyBub24tUlRFX0pPSU4gbWVtYmVycyBvZiAncmVsaWRzJy4KKyAqLworQml0bWFwc2V0ICoK K3BncGFfZmlsdGVyX291dF9qb2luX3JlbGlkcyhCaXRtYXBzZXQgKnJlbGlkcywgTGlzdCAqcnRh YmxlKQoreworCWludAkJCXJ0aSA9IC0xOworCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7CisK Kwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aSkpID49IDApCisJewor CQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJsZSk7CisKKwkJaWYgKHJ0 ZS0+cnRla2luZCAhPSBSVEVfSk9JTikKKwkJCXJlc3VsdCA9IGJtc19hZGRfbWVtYmVyKHJlc3Vs dCwgcnRpKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ3JlYXRlIGEgcGdw YV9xdWVyeV9mZWF0dXJlIGFuZCBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgYWxsIHF1ZXJ5IGZlYXR1 cmVzCisgKiBmb3IgdGhpcyBwbGFuLgorICovCitzdGF0aWMgcGdwYV9xdWVyeV9mZWF0dXJlICoK K3BncGFfYWRkX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJ IHBncGFfcWZfdHlwZSB0eXBlLCBQbGFuICpwbGFuKQoreworCXBncGFfcXVlcnlfZmVhdHVyZSAq cWYgPSBwYWxsb2MwX29iamVjdChwZ3BhX3F1ZXJ5X2ZlYXR1cmUpOworCisJcWYtPnR5cGUgPSB0 eXBlOworCXFmLT5wbGFuID0gcGxhbjsKKworCXdhbGtlci0+cXVlcnlfZmVhdHVyZXNbcWYtPnR5 cGVdID0KKwkJbGFwcGVuZCh3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3FmLT50eXBlXSwgcWYpOwor CisJcmV0dXJuIHFmOworfQorCisvKgorICogQWRkIGEgc2luZ2xlIFJUSSB0byBlYWNoIGFjdGl2 ZSBxdWVyeSBmZWF0dXJlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9xZl9hZGRfcnRpKExpc3Qg KmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgSW5kZXggcnRpKQoreworCWZvcmVhY2hfcHRyKHBncGFf cXVlcnlfZmVhdHVyZSwgcWYsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcykKKwl7CisJCXFmLT5yZWxp ZHMgPSBibXNfYWRkX21lbWJlcihxZi0+cmVsaWRzLCBydGkpOworCX0KK30KKworLyoKKyAqIEFk ZCBhIHNldCBvZiBSVElzIHRvIGVhY2ggYWN0aXZlIHF1ZXJ5IGZlYXR1cmUuCisgKi8KK3N0YXRp YyB2b2lkCitwZ3BhX3FmX2FkZF9ydGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgQml0 bWFwc2V0ICpyZWxpZHMpCit7CisJZm9yZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwg YWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJcWYtPnJlbGlkcyA9IGJtc19hZGRfbWVtYmVy cyhxZi0+cmVsaWRzLCByZWxpZHMpOworCX0KK30KKworLyoKKyAqIEFkZCBSVElzIGRpcmVjdGx5 IGNvbnRhaW5lZCBpbiBhIHBsYW4gbm9kZSB0byBlYWNoIGFjdGl2ZSBxdWVyeSBmZWF0dXJlLAor ICogYnV0IGZpbHRlciBvdXQgYW55IGpvaW4gUlRJcywgc2luY2UgYWR2aWNlIGRvZXNuJ3QgbWVu dGlvbiB0aG9zZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcWZfYWRkX3BsYW5fcnRpcyhMaXN0 ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIFBsYW4gKnBsYW4sIExpc3QgKnJ0YWJsZSkKK3sKKwlC aXRtYXBzZXQgICpyZWxpZHM7CisJSW5kZXgJCXJ0aTsKKworCWlmICgocmVsaWRzID0gcGdwYV9y ZWxpZHMocGxhbikpICE9IE5VTEwpCisJeworCQlyZWxpZHMgPSBwZ3BhX2ZpbHRlcl9vdXRfam9p bl9yZWxpZHMocmVsaWRzLCBydGFibGUpOworCQlwZ3BhX3FmX2FkZF9ydGlzKGFjdGl2ZV9xdWVy eV9mZWF0dXJlcywgcmVsaWRzKTsKKwl9CisJZWxzZSBpZiAoKHJ0aSA9IHBncGFfc2NhbnJlbGlk KHBsYW4pKSAhPSAwKQorCQlwZ3BhX3FmX2FkZF9ydGkoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBy dGkpOworfQorCisvKgorICogSWYgd2UgZ2VuZXJhdGVkIHBsYW4gYWR2aWNlIHVzaW5nIHRoZSBw cm92aWRlZCB3YWxrZXIgb2JqZWN0IGFuZCBhcnJheQorICogb2YgaWRlbnRpZmllcnMsIHdvdWxk IHdlIGdlbmVyYXRlIHRoZSBzcGVjaWZpZWQgdGFnL3RhcmdldCBjb21iaW5hdGlvbj8KKyAqCisg KiBJZiB5ZXMsIHRoZSBwbGFuIGNvbmZvcm1zIHRvIHRoZSBhZHZpY2U7IGlmIG5vLCBpdCBkb2Vz IG5vdC4gTm90ZSB0aGF0CisgKiB3ZSBoYXZlIGtub3cgd2F5IG9mIGtub3dpbmcgd2hldGhlciB0 aGUgcGxhbm5lciB3YXMgZm9yY2VkIHRvIGVtaXQgYSBwbGFuCisgKiB0aGF0IGNvbmZvcm1lZCB0 byB0aGUgYWR2aWNlIG9yIGp1c3QgaGFwcGVuZWQgdG8gZG8gc28uCisgKi8KK2Jvb2wKK3BncGFf d2Fsa2VyX3dvdWxkX2FkdmlzZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJ CQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJIHBncGFfYWR2aWNl X3RhZ190eXBlIHRhZywKKwkJCQkJCSBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlJ bmRleAkJcnRhYmxlX2xlbmd0aCA9IGxpc3RfbGVuZ3RoKHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7 CisJQml0bWFwc2V0ICAqcmVsaWRzID0gTlVMTDsKKworCWlmICh0YWcgPT0gUEdQQV9UQUdfSk9J Tl9PUkRFUikKKwl7CisJCWZvcmVhY2hfcHRyKHBncGFfdW5yb2xsZWRfam9pbiwgdWpvaW4sIHdh bGtlci0+dG9wbGV2ZWxfdW5yb2xsZWRfam9pbnMpCisJCXsKKwkJCWlmIChwZ3BhX3dhbGtlcl9q b2luX29yZGVyX21hdGNoZXModWpvaW4sIHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgIHJ0 X2lkZW50aWZpZXJzLCB0YXJnZXQsIHRydWUpKQorCQkJCXJldHVybiB0cnVlOworCQl9CisKKwkJ cmV0dXJuIGZhbHNlOworCX0KKworCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lE RU5USUZJRVIpCisJeworCQlJbmRleAkJcnRpOworCisJCXJ0aSA9IHBncGFfd2Fsa2VyX2dldF9y dGkocnRhYmxlX2xlbmd0aCwgcnRfaWRlbnRpZmllcnMsICZ0YXJnZXQtPnJpZCk7CisJCXJlbGlk cyA9IGJtc19tYWtlX3NpbmdsZXRvbihydGkpOworCX0KKwllbHNlCisJeworCQlBc3NlcnQodGFy Z2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpOworCQlmb3JlYWNoX3B0cihw Z3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJewor CQkJSW5kZXgJCXJ0aTsKKworCQkJQXNzZXJ0KGNoaWxkX3RhcmdldC0+dHR5cGUgPT0gUEdQQV9U QVJHRVRfSURFTlRJRklFUik7CisJCQlydGkgPSBwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRp ZmllcihydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJ CQkJCQkJCQkgICAmY2hpbGRfdGFyZ2V0LT5yaWQpOworCQkJaWYgKHJ0aSA9PSAwKQorCQkJCWVs b2coRVJST1IsICJjYW5ub3QgZGV0ZXJtaW5lIFJUSSBmb3IgYWR2aWNlIHRhcmdldCIpOworCQkJ cmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocmVsaWRzLCBydGkpOworCQl9CisJfQorCisJc3dpdGNo ICh0YWcpCisJeworCQljYXNlIFBHUEFfVEFHX0pPSU5fT1JERVI6CisJCQkvKiBzaG91bGQgaGF2 ZSBiZWVuIGhhbmRsZWQgYWJvdmUgKi8KKwkJCXBnX3VucmVhY2hhYmxlKCk7CisJCQlicmVhazsK KwkJY2FzZSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2Vy X2NvbnRhaW5zX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX0JJVE1BUF9IRUFQ LAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CisJ CQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQ R1BBX1NDQU5fRk9SRUlHTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdf SU5ERVhfT05MWV9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX3NjYW4od2Fs a2VyLAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX0lOREVYX09OTFksCisJCQkJCQkJCQkJCSByZWxp ZHMpOworCQljYXNlIFBHUEFfVEFHX0lOREVYX1NDQU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJf Y29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQR1BBX1NDQU5fSU5ERVgsCisJCQkJ CQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX1BBUlRJVElPTldJU0U6CisJCQlyZXR1 cm4gcGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQR1BBX1ND QU5fUEFSVElUSU9OV0lTRSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdf U0VRX1NDQU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJ CQkJCQkJCQkJCSBQR1BBX1NDQU5fU0VRLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQ R1BBX1RBR19USURfU0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19zY2FuKHdh bGtlciwKKwkJCQkJCQkJCQkJIFBHUEFfU0NBTl9USUQsCisJCQkJCQkJCQkJCSByZWxpZHMpOwor CQljYXNlIFBHUEFfVEFHX0dBVEhFUjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19m ZWF0dXJlKHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9HQVRIRVIsCisJCQkJCQkJCQkJCQly ZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX0dBVEhFUl9NRVJHRToKKwkJCXJldHVybiBwZ3BhX3dh bGtlcl9jb250YWluc19mZWF0dXJlKHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9HQVRIRVJf TUVSR0UsCisJCQkJCQkJCQkJCQlyZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX05P Tl9VTklRVUU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZSh3YWxrZXIs CisJCQkJCQkJCQkJCQlQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwKKwkJCQkJCQkJCQkJCXJl bGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFOgorCQkJcmV0dXJuIHBncGFf d2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUod2Fsa2VyLAorCQkJCQkJCQkJCQkJUEdQQVFGX1NFTUlK T0lOX1VOSVFVRSwKKwkJCQkJCQkJCQkJCXJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfSEFTSF9K T0lOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJ CQkJCQkgSlNUUkFUX0hBU0hfSk9JTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQ QV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250 YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9NRVJHRV9KT0lOX01BVEVSSUFM SVpFLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BM QUlOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJ CQkJCQkgSlNUUkFUX01FUkdFX0pPSU5fUExBSU4sCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQlj YXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuIHBncGFfd2Fs a2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX05FU1RFRF9MT09Q X01BVEVSSUFMSVpFLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19ORVNU RURfTE9PUF9NRU1PSVpFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fs a2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX05FU1RFRF9MT09QX01FTU9JWkUsCisJCQkJCQkJCQkJ CSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJcmV0dXJu IHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX05F U1RFRF9MT09QX1BMQUlOLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19O T19HQVRIRVI6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVyKHdhbGtl ciwgcmVsaWRzKTsKKwl9CisKKwkvKiBzaG91bGQgbm90IGdldCBoZXJlICovCisJcmV0dXJuIGZh bHNlOworfQorCisvKgorICogRG9lcyBhbiB1bnJvbGxlZCBqb2luIG1hdGNoIHRoZSBqb2luIG9y ZGVyIHNwZWNpZmllZCBieSBhbiBhZHZpY2UgdGFyZ2V0PworICovCitzdGF0aWMgYm9vbAorcGdw YV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKHBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4sCisJ CQkJCQkJICAgSW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIg KnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAor CQkJCQkJCSAgIGJvb2wgdG9wbGV2ZWwpCit7CisJaW50CQluY2hpbGRyZW4gPSBsaXN0X2xlbmd0 aCh0YXJnZXQtPmNoaWxkcmVuKTsKKworCUFzc2VydCh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFS R0VUX09SREVSRURfTElTVCk7CisKKwkvKiBBdCB0b3BsZXZlbCwgd2UgYWxsb3cgYSBwcmVmaXgg bWF0Y2guICovCisJaWYgKHRvcGxldmVsKQorCXsKKwkJaWYgKG5jaGlsZHJlbiA+IHVqb2luLT5u aW5uZXIgKyAxKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCisJeworCQlpZiAobmNoaWxk cmVuICE9IHVqb2luLT5uaW5uZXIgKyAxKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIE91 dGVybW9zdCByZWwgbXVzdCBtYXRjaC4gKi8KKwlpZiAoIXBncGFfd2Fsa2VyX2pvaW5fb3JkZXJf bWF0Y2hlc19tZW1iZXIoJnVqb2luLT5vdXRlciwKKwkJCQkJCQkJCQkJICAgcnRhYmxlX2xlbmd0 aCwKKwkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCSAgIGxpbml0aWFs KHRhcmdldC0+Y2hpbGRyZW4pKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogRWFjaCBpbm5lciBy ZWwgbXVzdCBtYXRjaC4gKi8KKwlmb3IgKGludCBuID0gMDsgbiA8IG5jaGlsZHJlbiAtIDE7ICsr bikKKwl7CisJCXBncGFfYWR2aWNlX3RhcmdldCAqY2hpbGRfdGFyZ2V0ID0gbGlzdF9udGgodGFy Z2V0LT5jaGlsZHJlbiwgbiArIDEpOworCisJCWlmICghcGdwYV93YWxrZXJfam9pbl9vcmRlcl9t YXRjaGVzX21lbWJlcigmdWpvaW4tPmlubmVyW25dLAorCQkJCQkJCQkJCQkJICAgcnRhYmxlX2xl bmd0aCwKKwkJCQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkJICAgY2hp bGRfdGFyZ2V0KSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwor LyoKKyAqIERvZXMgb25lIG1lbWJlciBvZiBhbiB1bnJvbGxlZCBqb2luIG1hdGNoIGFuIGFkdmlj ZSB0YXJnZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNo ZXNfbWVtYmVyKHBncGFfam9pbl9tZW1iZXIgKm1lbWJlciwKKwkJCQkJCQkJCSAgSW5kZXggcnRh YmxlX2xlbmd0aCwKKwkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywK KwkJCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJQml0bWFwc2V0ICAq cmVsaWRzID0gTlVMTDsKKworCWlmIChtZW1iZXItPnVucm9sbGVkX2pvaW4gIT0gTlVMTCkKKwl7 CisJCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCkKKwkJCXJl dHVybiBmYWxzZTsKKwkJcmV0dXJuIHBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlcyhtZW1i ZXItPnVucm9sbGVkX2pvaW4sCisJCQkJCQkJCQkJCSAgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJ CQkJICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJICB0YXJnZXQsCisJCQkJCQkJCQkJCSAg ZmFsc2UpOworCX0KKworCUFzc2VydChtZW1iZXItPnNjYW4gIT0gTlVMTCk7CisJc3dpdGNoICh0 YXJnZXQtPnR0eXBlKQorCXsKKwkJY2FzZSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q6CisJCQkv KiBDb3VsZCBvbmx5IG1hdGNoIGFuIHVucm9sbGVkIGpvaW4gKi8KKwkJCXJldHVybiBmYWxzZTsK KworCQljYXNlIFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUOgorCQkJeworCQkJCWZvcmVhY2hf cHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQor CQkJCXsKKwkJCQkJSW5kZXgJCXJ0aTsKKworCQkJCQlydGkgPSBwZ3BhX3dhbGtlcl9nZXRfcnRp KHJ0YWJsZV9sZW5ndGgsIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgICZjaGlsZF90YXJn ZXQtPnJpZCk7CisJCQkJCXJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKHJlbGlkcywgcnRpKTsKKwkJ CQl9CisJCQkJYnJlYWs7CisJCQl9CisKKwkJY2FzZSBQR1BBX1RBUkdFVF9JREVOVElGSUVSOgor CQkJeworCQkJCUluZGV4CQlydGk7CisKKwkJCQlydGkgPSBwZ3BhX3dhbGtlcl9nZXRfcnRpKHJ0 YWJsZV9sZW5ndGgsIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCSAgJnRhcmdldC0+cmlkKTsK KwkJCQlyZWxpZHMgPSBibXNfbWFrZV9zaW5nbGV0b24ocnRpKTsKKwkJCQlicmVhazsKKwkJCX0K Kwl9CisKKwlyZXR1cm4gYm1zX2VxdWFsKG1lbWJlci0+c2Nhbi0+cmVsaWRzLCByZWxpZHMpOwor fQorCisvKgorICogRG9lcyB0aGlzIHdhbGtlciBzYXkgdGhhdCB0aGUgZ2l2ZW4gc2NhbiBzdHJh dGVneSBzaG91bGQgYmUgdXNlZCBmb3IgdGhlCisgKiBnaXZlbiByZWxpZCBzZXQ/CisgKi8KK3N0 YXRpYyBib29sCitwZ3BhX3dhbGtlcl9jb250YWluc19zY2FuKHBncGFfcGxhbl93YWxrZXJfY29u dGV4dCAqd2Fsa2VyLAorCQkJCQkJICBwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJ CQkgIEJpdG1hcHNldCAqcmVsaWRzKQoreworCUxpc3QJICAgKnNjYW5zID0gd2Fsa2VyLT5zY2Fu c1tzdHJhdGVneV07CisKKwlmb3JlYWNoX3B0cihwZ3BhX3NjYW4sIHNjYW4sIHNjYW5zKQorCXsK KwkJLyoKKwkJICogWFhYLiBJZiB0aGlzIGlzIGluZGV4LXJlbGF0ZWQgYWR2aWNlLCB3ZSBzaG91 bGQgYWxzbyB2YWxpZGF0ZSB0aGF0CisJCSAqIHRoZSBhZHZpY2UgdGFyZ2V0J3MgaW5kZXggdGFy Z2V0IG1hdGNoZXMgdGhlIFBsYW4gdHJlZS4KKwkJICovCisJCWlmIChibXNfZXF1YWwoc2Nhbi0+ cmVsaWRzLCByZWxpZHMpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOwor fQorCisvKgorICogRG9lcyB0aGlzIHdhbGtlciBzYXkgdGhhdCB0aGUgZ2l2ZW4gcXVlcnkgZmVh dHVyZSBhcHBsaWVzIHRvIHRoZSBnaXZlbgorICogcmVsaWQgc2V0PworICovCitzdGF0aWMgYm9v bAorcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQg KndhbGtlciwKKwkJCQkJCQkgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJIEJpdG1hcHNldCAq cmVsaWRzKQoreworCUxpc3QJICAgKnF1ZXJ5X2ZlYXR1cmVzID0gd2Fsa2VyLT5xdWVyeV9mZWF0 dXJlc1t0eXBlXTsKKworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIHF1ZXJ5 X2ZlYXR1cmVzKQorCXsKKwkJaWYgKGJtc19lcXVhbChxZi0+cmVsaWRzLCByZWxpZHMpKQorCQkJ cmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogRG9lcyB0aGUg d2Fsa2VyIHNheSB0aGF0IHRoZSBnaXZlbiBqb2luIHN0cmF0ZWd5IHNob3VsZCBiZSB1c2VkIGZv ciB0aGUKKyAqIGdpdmVuIHJlbGlkIHNldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2Vy X2NvbnRhaW5zX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkg IHBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMp Cit7CisJTGlzdAkgICAqam9pbl9zdHJhdGVnaWVzID0gd2Fsa2VyLT5qb2luX3N0cmF0ZWdpZXNb c3RyYXRlZ3ldOworCisJZm9yZWFjaF9wdHIoQml0bWFwc2V0LCBqc3JlbGlkcywgam9pbl9zdHJh dGVnaWVzKQorCXsKKwkJaWYgKGJtc19lcXVhbChqc3JlbGlkcywgcmVsaWRzKSkKKwkJCXJldHVy biB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMgdGhlIHdhbGtl ciBzYXkgdGhhdCB0aGUgZ2l2ZW4gcmVsaWRzIHNob3VsZCBiZSBtYXJrZWQgYXMgTk9fR0FUSEVS PworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVyKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSAgIEJpdG1hcHNldCAqcmVsaWRz KQoreworCXJldHVybiBibXNfaXNfc3Vic2V0KHJlbGlkcywgd2Fsa2VyLT5ub19nYXRoZXJfc2Nh bnMpOworfQorCisvKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gY29udmVydCBhIHJlbGF0 aW9uIGlkZW50aWZpZXIgdG8gYW4gUlRJLgorICoKKyAqIFdlIHRocm93IGFuIGVycm9yIGhlcmUg YmVjYXVzZSB3ZSBleHBlY3QgdGhpcyB0byBiZSB1c2VkIG9uIHN5c3RlbS1nZW5lcmF0ZWQKKyAq IGFkdmljZS4gSGVuY2UsIGZhaWx1cmUgaGVyZSBpbmRpY2F0ZXMgYW4gYWR2aWNlIGdlbmVyYXRp b24gYnVnLgorICovCitzdGF0aWMgSW5kZXgKK3BncGFfd2Fsa2VyX2dldF9ydGkoSW5kZXggcnRh YmxlX2xlbmd0aCwKKwkJCQkJcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJ cGdwYV9pZGVudGlmaWVyICpyaWQpCit7CisJSW5kZXgJCXJ0aTsKKworCXJ0aSA9IHBncGFfY29t cHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJICAgcnRf aWRlbnRpZmllcnMsCisJCQkJCQkJCQkJICAgcmlkKTsKKwlpZiAocnRpID09IDApCisJCWVsb2co RVJST1IsICJjYW5ub3QgZGV0ZXJtaW5lIFJUSSBmb3IgYWR2aWNlIHRhcmdldCIpOworCXJldHVy biBydGk7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2Vy LmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmYyNDRmNDQyOGE1Ci0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oCkBAIC0wLDAgKzEsMTIyIEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3dhbGtlci5oCisgKgkgIFBsYW4gdHJlZSBp dGVyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV93YWxrZXIuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfV0FM S0VSX0gKKyNkZWZpbmUgUEdQQV9XQUxLRVJfSAorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKyNp bmNsdWRlICJwZ3BhX2pvaW4uaCIKKyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKKworLyoKKyAqIFdl IHVzZSB0aGUgdGVybSAicXVlcnkgZmVhdHVyZSIgdG8gcmVmZXIgdG8gcGxhbiBub2RlcyB0aGF0 IGFyZSBpbnRlcmVzdGluZworICogaW4gdGhlIGZvbGxvd2luZyB3YXk6IHRvIGdlbmVyYXRlIGFk dmljZSwgd2UnbGwgbmVlZCB0byBrbm93IHRoZSBzZXQgb2YKKyAqIHNhbWUtc3VicXVlcnksIG5v bi1qb2luIFJUSXMgb2NjdXJpbmcgYXQgb3IgYmVsb3cgdGhhdCBwbGFuIG5vZGUsIHdpdGhvdXQK KyAqIGFkbWl4dHVyZSBvZiBwYXJlbnQgYW5kIGNoaWxkIFJUSXMuCisgKgorICogRm9yIGV4YW1w bGUsIEdhdGhlciBub2RlcywgZGVzaWdpbmF0ZWQgYnkgUEdQQVFGX0dBVEhFUiwgYW5kIEdhdGhl ciBNZXJnZQorICogbm9kZXMsIGRlc2lnbmF0ZWQgYnkgUEdQQVFGX0dBVEhFUl9NRVJHRSwgYXJl IHF1ZXJ5IGZlYXR1cmVzLCBiZWNhdXNlIHdlJ2xsCisgKiB3YW50IHRvIGFkbWl0IHNvbWUga2lu ZCBvZiBhZHZpY2UgdGhhdCBkZXNjcmliZXMgdGhlIHBvcnRpb24gb2YgdGhlIHBsYW4KKyAqIHRy ZWUgdGhhdCBhcHBlYXJzIGJlbmVhdGggdGhvc2Ugbm9kZXMuCisgKgorICogRWFjaCBzZW1pam9p biBjYW4gYmUgaW1wbGVtZW50ZWQgZWl0aGVyIGJ5IGRpcmVjdGx5IHBlcmZvcm1pbmcgYSBzZW1p am9pbiwKKyAqIG9yIGJ5IG1ha2luZyBvbmUgc2lkZSB1bmlxdWUgYW5kIHRoZW4gcGVyZm9ybWlu ZyBhIG5vcm1hbCBqb2luLiBFaXRoZXIgd2F5LAorICogd2UgdXNlIGEgcXVlcnkgZmVhdHVyZSB0 byBub3RpY2Ugd2hhdCBkZWNpc2lvbiB3YXMgbWFkZSwgc28gdGhhdCB3ZSBjYW4KKyAqIGRlc2Ny aWJlIGl0IGJ5IGVudW1lcmF0aW5nIHRoZSBSVElzIG9uIHRoYXQgc2lkZSBvZiB0aGUgam9pbi4K KyAqCisgKiBUbyBlbGFib3JhdGUgb24gdGhlICJubyBhZG1peHR1cmUgb2YgcGFyZW50IGFuZCBj aGlsZCBSVElzIiBydWxlLCBpbiBhbGwgb2YKKyAqIHRoZXNlIGNhc2VzLCBpZiB0aGUgZW50aXJl dHkgb2YgYW4gaW5oZXJpdGFuY2UgaGllcmFyY2h5IGFwcGVhcnMgYmVuZWF0aAorICogdGhlIHF1 ZXJ5IGZlYXR1cmUsIHdlIG9ubHkgd2FudCB0byBuYW1lIHRoZSBwYXJlbnQgdGFibGUuIEJ1dCBp dCdzIGFsc28KKyAqIHBvc3NpYmxlIHRvIGhhdmUgY2FzZXMgd2hlcmUgd2UgbXVzdCBuYW1lIGNo aWxkIHRhYmxlcy4gVGhpcyBpcyBwYXJ0aWN1bGFybHkKKyAqIGxpa2VseSB0byBoYXBwZW4gd2hl biBwYXJ0aXRpb253aXNlIGpvaW4gaXMgaW4gdXNlLCBidXQgY291bGQgaGFwcGVuIGZvcgorICog R2F0aGVyIG9yIEdhdGhlciBNZXJnZSBldmVuIHdpdGhvdXQgdGhhdCwgaWYgb25lIG9mIHRob3Nl IGFwcGVhcnMgYmVsb3cKKyAqIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBub2RlIGZvciBhIHNp bmdsZSB0YWJsZS4KKyAqLwordHlwZWRlZiBlbnVtIHBncGFfcWZfdHlwZQoreworCVBHUEFRRl9H QVRIRVIsCisJUEdQQVFGX0dBVEhFUl9NRVJHRSwKKwlQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFV RSwKKwlQR1BBUUZfU0VNSUpPSU5fVU5JUVVFCisJLyogdXBkYXRlIE5VTV9QR1BBX1FGX1RZUEVT IGlmIHlvdSBhZGQgYW55dGhpbmcgaGVyZSAqLworfSBwZ3BhX3FmX3R5cGU7CisKKyNkZWZpbmUg TlVNX1BHUEFfUUZfVFlQRVMgKChpbnQpIFBHUEFRRl9TRU1JSk9JTl9VTklRVUUgKyAxKQorCisv KgorICogRm9yIGVhY2ggcXVlcnkgZmVhdHVyZSwgd2Uga2VlcCB0cmFjayBvZiB0aGUgZmVhdHVy ZSB0eXBlIGFuZCB0aGUgc2V0IG9mCisgKiByZWxpZHMgdGhhdCB3ZSBmb3VuZCB1bmRlcm5lYXRo IHRoZSByZWxldmFudCBwbGFuIG5vZGUuIFNlZSB0aGUgY29tbWVudHMKKyAqIG9uIHBncGFfcWZf dHlwZSwgYWJvdmUsIGZvciBhZGRpdGlvbmFsIGRldGFpbHMuCisgKi8KK3R5cGVkZWYgc3RydWN0 IHBncGFfcXVlcnlfZmVhdHVyZQoreworCXBncGFfcWZfdHlwZSB0eXBlOworCVBsYW4JICAgKnBs YW47CisJQml0bWFwc2V0ICAqcmVsaWRzOworfSBwZ3BhX3F1ZXJ5X2ZlYXR1cmU7CisKKy8qCisg KiBDb250ZXh0IG9iamVjdCBmb3IgcGxhbiB0cmVlIHdhbGsuCisgKgorICogcHN0bXQgaXMgdGhl IFBsYW5uZWRTdG10IHdlJ3JlIHN0dWR5aW5nLgorICoKKyAqIHNjYW5zIGlzIGFuIGFycmF5IG9m IGxpc3RzIG9mIHBncGFfc2NhbiBvYmplY3RzLiBUaGUgYXJyYXkgaXMgaW5kZXhlZCBieQorICog dGhlIHNjYW4ncyBwZ3BhX3NjYW5fc3RyYXRlZ3kuCisgKgorICogbm9fZ2F0aGVyX3NjYW5zIGlz IHRoZSBzZXQgb2Ygc2NhbiBSVElzIHRoYXQgZG8gbm90IGFwcGVhciBiZW5lYXRoIGFueQorICog R2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLgorICoKKyAqIHRvcGxldmVsX3Vucm9sbGVkX2pv aW5zIGlzIGEgbGlzdCBvZiBhbGwgcGdwYV91bnJvbGxlZF9qb2luIG9iamVjdHMgdGhhdAorICog YXJlIG5vdCBhIGNoaWxkIG9mIHNvbWUgb3RoZXIgcGdwYV91bnJvbGxlZF9qb2luLgorICoKKyAq IGpvaW5fc3RyYXRlZ3kgaXMgYW4gYXJyYXkgb2YgbGlzdHMgb2YgQml0bWFwc2V0IG9iamVjdHMu IEVhY2ggQml0bWFwc2V0CisgKiBpcyB0aGUgc2V0IG9mIHJlbGlkcyB0aGF0IGFwcGVhcnMgb24g dGhlIGlubmVyIHNpZGUgb2Ygc29tZSBqb2luIChleGNsdWRpbmcKKyAqIFJUSXMgZnJvbSBwYXJ0 aXRpb24gY2hpbGRyZW4gYW5kIHN1YnF1ZXJpZXMpLiBUaGUgYXJyYXkgaXMgaW5kZXhlZCBieQor ICogcGdwYV9qb2luX3N0cmF0ZWd5LgorICoKKyAqIHF1ZXJ5X2ZlYXR1cmVzIGlzIGFuIGFycmF5 IGxpc3RzIG9mIHBncGFfcXVlcnlfZmVhdHVyZSBvYmplY3RzLCBpbmRleGVkCisgKiBieSBwZ3Bh X3FmX3R5cGUuCisgKgorICogZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzIGlzIG9ubHkgdXNlZCBkdXJp bmcgdGhlIHBsYW4gdHJlZSB3YWxrIGFuZCBzaG91bGQKKyAqIGJlIGVtcHR5IHdoZW4gdGhlIHRy ZWUgd2FsayBjb25jbHVkZXMuIEl0IGlzIGEgbGlzdCBvZiBwZ3BhX3F1ZXJ5X2ZlYXR1cmUKKyAq IG9iamVjdHMgZm9yIFBsYW4gbm9kZXMgdGhhdCB0aGUgcGxhbiB0cmVlIHdhbGsgaGFzIG5vdCB5 ZXQgZW5jb3VudGVyZWQ7CisgKiB3aGVuIGVuY291bnRlcmVkLCB0aGV5IHdpbGwgYmUgbW92ZWQg dG8gdGhlIGxpc3Qgb2YgYWN0aXZlIHF1ZXJ5IGZlYXR1cmVzCisgKiB0aGF0IGlzIHByb3BhZ2F0 ZWQgdmlhIHRoZSBjYWxsIHN0YWNrLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQKK3sKKwlQbGFubmVkU3RtdCAqcHN0bXQ7CisJTGlzdAkgICAqc2NhbnNbTlVN X1BHUEFfU0NBTl9TVFJBVEVHWV07CisJQml0bWFwc2V0ICAqbm9fZ2F0aGVyX3NjYW5zOworCUxp c3QJICAgKnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zOworCUxpc3QJICAgKmpvaW5fc3RyYXRlZ2ll c1tOVU1fUEdQQV9KT0lOX1NUUkFURUdZXTsKKwlMaXN0CSAgICpxdWVyeV9mZWF0dXJlc1tOVU1f UEdQQV9RRl9UWVBFU107CisJTGlzdAkgICAqZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzOworfSBwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQ7CisKK2V4dGVybiB2b2lkIHBncGFfcGxhbl93YWxrZXIocGdw YV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJIFBsYW5uZWRTdG10ICpwc3Rt dCk7CisKK2V4dGVybiB2b2lkIHBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHBncGFfcGxhbl93YWxr ZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJ CQlQbGFuICpwbGFuKTsKKworZXh0ZXJuIEVsaWRlZE5vZGUgKnBncGFfbGFzdF9lbGlkZWRfbm9k ZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKnBsYW4pOworZXh0ZXJuIEJpdG1hcHNldCAqcGdw YV9yZWxpZHMoUGxhbiAqcGxhbik7CitleHRlcm4gSW5kZXggcGdwYV9zY2FucmVsaWQoUGxhbiAq cGxhbik7CitleHRlcm4gQml0bWFwc2V0ICpwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMoQml0 bWFwc2V0ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSk7CisKK2V4dGVybiBib29sIHBncGFfd2Fsa2Vy X3dvdWxkX2FkdmlzZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJ CSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJIHBncGFfYWR2aWNl X3RhZ190eXBlIHRhZywKKwkJCQkJCQkJCSBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CisK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNx bCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU4MjgwMDQzOTEzCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNxbApAQCAtMCwwICsxLDc2IEBACitM T0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhl ciA9IDE7CitTRVQgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitTRVQgcGFyYWxsZWxfdHVwbGVf Y29zdCA9IDA7CitTRVQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitTRVQgZGVi dWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7CisKK0NSRUFURSBUQUJMRSBndF9kaW0gKGlkIHNlcmlh bCBwcmltYXJ5IGtleSwgZGltIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFs c2UpOworSU5TRVJUIElOVE8gZ3RfZGltIChkaW0pIFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2RpbTsKKworQ1JF QVRFIFRBQkxFIGd0X2ZhY3QgKAorCWlkIGludCBub3QgbnVsbCwKKwlkaW1faWQgaW50ZWdlciBu b3QgbnVsbCByZWZlcmVuY2VzIGd0X2RpbSAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGd0X2ZhY3QKKwlTRUxFQ1QgZywgKGclMykrMSBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2ZhY3Q7CisK Ky0tIEJ5IGRlZmF1bHQsIHdlIGV4cGVjdCBHYXRoZXIgTWVyZ2Ugd2l0aCBhIHBhcmFsbGVsIGhh c2ggam9pbi4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJP TSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5p ZDsKKworLS0gRm9yY2UgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvZiBib3RoIHJlbGF0aW9ucyB0 b2dldGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRo ZXJfbWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JE RVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChm IGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00g Z3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7 CitDT01NSVQ7CisKKy0tIEZvcmNlIGEgc2VwYXJhdGUgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBv cGVyYXRpb24gZm9yIGVhY2ggcmVsYXRpb24uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdnYXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlk IE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIGEgR2F0aGVyIG9yIEdhdGhlciBN ZXJnZSBvbiBvbmUgcmVsYXRpb24gYnV0IG5vIHBhcmFsbGVsaXNtIG9uIG90aGVyLgorQkVHSU47 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZShmKSBub19n YXRoZXIoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBG Uk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBk LmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZCkg bm9fZ2F0aGVyKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIg QlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKGYpIG5v X2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZ IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihkKSBub19n YXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBG Uk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBk LmlkOworQ09NTUlUOworCistLSBGb3JjZSBubyBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIHVzZSBh dCBhbGwuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnbm9fZ2F0 aGVyKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBG Uk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBk LmlkOworQ09NTUlUOworCistLSBDYW4ndCBmb3JjZSBHYXRoZXIgTWVyZ2Ugd2l0aG91dCB0aGUg T1JERVIgQlkgY2xhdXNlLCBidXQganVzdCBHYXRoZXIgaXMgT0suCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4g Z3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdnYXRoZXIoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQu aWQ7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2lu X29yZGVyLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41YWEyZmM2MmQzNAotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsCkBA IC0wLDAgKzEsOTYgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxf d29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKKworQ1JFQVRFIFRBQkxFIGpvX2RpbTEgKGlkIGludGVn ZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZGltMSAoaWQsIGRpbTEsIHZhbDEpCisJ U0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZGltMTsKK0NSRUFU RSBUQUJMRSBqb19kaW0yIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIg aW50KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpv X2RpbTIgKGlkLCBkaW0yLCB2YWwyKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8 IGcsIChnICUgNykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGc7CitWQUNV VU0gQU5BTFlaRSBqb19kaW0yOworCitDUkVBVEUgVEFCTEUgam9fZmFjdCAoCisJaWQgaW50IHBy aW1hcnkga2V5LAorCWRpbTFfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpvX2RpbTEg KGlkKSwKKwlkaW0yX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19kaW0yIChpZCkK KykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZmFj dAorCVNFTEVDVCBnLCAoZyUxMDApKzEsIChnJTEwMCkrMSBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2ZhY3Q7CisKKy0tIFdlIGV4cGVjdCB0byBq b2luIHRvIGQyIGZpcnN0IGFuZCB0aGVuIGQxLCBzaW5jZSB0aGUgY29uZGl0aW9uIG9uIGQyCist LSBpcyBtb3JlIHNlbGVjdGl2ZS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitT RUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9p ZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlX SEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisKKy0tIEZvcmNlIGEgZmV3IGRpZmZlcmVudCBq b2luIG9yZGVycy4gU29tZSBvZiB0aGVzZSBhcmUgdmVyeSBpbmVmZmljaWVudCwKKy0tIGJ1dCB0 aGUgcGxhbm5lciBjb25zaWRlcnMgdGhlbSBhbGwgdmlhYmxlLgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMSBkMiknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBK T0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBk MiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYK KwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBq b19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIg PSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQxIGYg ZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpv X2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVG VCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBB TkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3Jk ZXIoZiAoZDEgZDIpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBk MS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUg dmFsMSA9IDEgQU5EIHZhbDIgPSAxOworQ09NTUlUOworCistLSBUaGUgdW51c3VhbCBmb3JtdWxh dGlvbiBvZiB0aGlzIHF1ZXJ5IGlzIGludGVuZGVkIHRvIHByZXZlbnQgdGhlIHF1ZXJ5CistLSBw bGFubmVyIGZyb20gcmVkdWNpbmcgdGhlIEZVTEwgSk9JTiB0byBzb21lIG90aGVyIGpvaW4gdHlw ZSwgc28gdGhhdCB3ZQorLS0gY2FuIHRlc3Qgd2hhdCBoYXBwZW5zIHdpdGggYSBqb2luIHR5cGUg dGhhdCBjYW5ub3QgYmUgcmVvcmRlcmVkLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxM IEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlk ID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworCistLSBXZSBzaG91bGQgbm90IGJl IGFibGUgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gam9pbiBmIHRvIGQxIGZpcnN0LCBiZWNhdXNl CistLSB0aGF0IGlzIG5vdCBhIHZhbGlkIGpvaW4gb3JkZXIsIGJ1dCB3ZSBzaG91bGQgYmUgYWJs ZSB0byBmb3JjZSB0aGUgcGxhbm5lcgorLS0gdG8gbWFrZSBlaXRoZXIgZDIgb3IgZiB0aGUgZHJp dmluZyB0YWJsZS4KK0JFR0lOOworLS0gWFhYOiBUaGUgYWR2aWNlIGZlZWRiYWNrIHNheXMgJ3Bh cnRpYWxseSBtYXRjaGVkJyBoZXJlIHdoaWNoIGlzbid0IGV4YWN0bHkKKy0tIHdyb25nIGdpdmVu IHRoZSB3YXkgdGhhdCBmbGFnIGlzIGhhbmRsZWQgaW4gdGhlIGNvZGUsIGJ1dCBpdCdzIGF0IHRo ZSB2ZXJ5CistLSBsZWFzdCBjb25mdXNpbmcuIFNvbWV0aGluZyBzaG91bGQgcHJvYmFibHkgYmUg aW1wcm92ZWQgaGVyZS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9v cmRlcihmIGQxIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19k aW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFf aWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ2pvaW5fb3JkZXIoZiBkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxM IEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlk ID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQyIGYgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19m YWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkK KwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK0NPTU1JVDsKKwor LS0gWFhYOiBhZGQgdGVzdHMgZm9yIGpvaW4gb3JkZXIgcHJlZml4IG1hdGNoaW5nCistLSBYWFg6 IGpvaW5fb3JkZXIoanVzdG9uZXJlbCkgc2hvdWxkbid0IHJlcG9ydCBwYXJ0aWFsbHkgbWF0Y2hl ZApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9zdHJhdGVneS5z cWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGViODIzZjFjMGUKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbApAQCAt MCwwICsxLDc2IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dv cmtlcnNfcGVyX2dhdGhlciA9IDA7CisKK0NSRUFURSBUQUJMRSBqb2luX2RpbSAoaWQgc2VyaWFs IHByaW1hcnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitJTlNFUlQgSU5UTyBqb2luX2RpbSAoZGltKSBTRUxFQ1QgcmFuZG9tKCk6OnRleHQgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb2luX2RpbTsKKwor Q1JFQVRFIFRBQkxFIGpvaW5fZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5LAorCWRpbV9pZCBp bnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9pbl9kaW0gKGlkKQorKSBXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2ZhY3QKKwlTRUxFQ1QgZywg KGclMykrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK0NSRUFURSBJTkRFWCBq b2luX2ZhY3RfZGltX2lkIE9OIGpvaW5fZmFjdCAoZGltX2lkKTsKK1ZBQ1VVTSBBTkFMWVpFIGpv aW5fZmFjdDsKKworLS0gV2UgZXhwZWN0IGEgaGFzaCBqb2luIGJ5IGRlZmF1bHQuCitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9J TiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKworLS0gVHJ5IGZvcmNpbmcgZWFjaCBq b2luIG1ldGhvZCBpbiB0dXJuIHdpdGggam9pbl9kaW0gYXMgdGhlIGlubmVyIHRhYmxlLgorLS0g QWxsIG9mIHRoZXNlIHNob3VsZCB3b3JrIGV4Y2VwdCBmb3IgTUVSR0VfSk9JTl9NQVRFUklBTEla RTsgdGhhdCB3aWxsCistLSBmYWlsLCBiZWNhdXNlIHRoZSBwbGFubmVyIGtub3dzIHRoYXQgam9p bl9kaW0gKGlkKSBpcyB1bmlxdWUsIGFuZCB3aWxsCistLSByZWZ1c2UgdG8gYWRkIG1hcmsvcmVz dG9yZSBvdmVyaGVhZC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdIQVNIX0pPSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fTUFURVJJQUxJ WkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fUExBSU4oZCknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpP SU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5f ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdORVNURURfTE9PUF9NRU1PSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5k aW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURf TE9PUF9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsK K0NPTU1JVDsKKworLS0gTm93IHRyeSBmb3JjaW5nIGVhY2ggam9pbiBtZXRob2QgaW4gdHVybiB3 aXRoIGpvaW5fZmFjdCBhcyB0aGUgaW5uZXIKKy0tIHRhYmxlLiBBbGwgb2YgdGhlc2Ugc2hvdWxk IHdvcmsuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFTSF9K T0lOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJP TSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGYpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2Zh Y3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX1BMQUlOKGYpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5f ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdORVNURURfTE9PUF9NQVRFUklBTElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVT VEVEX0xPT1BfTUVNT0laRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExB SU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitDT01NSVQ7 CisKKy0tIFdlIGNhbid0IGZvcmNlIGEgZm9yZWlnbiBqb2luIGJldHdlZW4gdGhlc2UgdGFibGVz LCBiZWNhdXNlIHRoZXkKKy0tIGFyZW4ndCBmb3JlaWduIHRhYmxlcy4KK0JFR0lOOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGYgZCkpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBK T0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbCBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2Uvc3FsL2xvY2FsX2NvbGxlY3Rvci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA4NTAyNTczYzhmCi0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbApAQCAtMCwwICsxLDQx IEBACitDUkVBVEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlOworU0VUIGRlYnVnX3BhcmFsbGVs X3F1ZXJ5ID0gb2ZmOworCistLSBUcnkgY2xlYXJpbmcgYWR2aWNlIGJlZm9yZSB3ZSd2ZSBjb2xs ZWN0ZWQgYW55LgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKwor LS0gU2V0IGEgc21hbGwgYWR2aWNlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB3ZSdsbCBleGNl ZWQgaXQuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDI7CisK Ky0tIFNldCB1cCBhIGR1bW15IHRhYmxlLgorQ1JFQVRFIFRBQkxFIGR1bW15X3RhYmxlIChhIGlu dCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNl LCBwYXJhbGxlbF93b3JrZXJzID0gMCk7CisKKy0tIFRlc3QgcXVlcmllcy4KK1NFTEVDVCAqIEZS T00gZHVtbXlfdGFibGUgYSwgZHVtbXlfdGFibGUgYjsKK1NFTEVDVCAqIEZST00gZHVtbXlfdGFi bGU7CisKKy0tIFNob3VsZCByZXR1cm4gdGhlIGFkdmljZSBmcm9tIHRoZSBzZWNvbmQgdGVzdCBx dWVyeS4KK1NFTEVDVCBhZHZpY2UgRlJPTSBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgp IE9SREVSIEJZIGlkIExJTUlUIDE7CisKKy0tIE5vdyB0cnkgY2xlYXJpbmcgYWR2aWNlIGFnYWlu LgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0gUmFpc2Ug dGhlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB0aGUgY29sbGVjdG9yIHVzZXMgbXVsdGlwbGUg Y2h1bmtzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAyMDAw OworCistLSBQdXNoIGEgYnVuY2ggb2YgcXVlcmllcyB0aHJvdWdoIHRoZSBjb2xsZWN0b3IuCitE TyAkJAorQkVHSU4KKwlGT1IgeCBJTiAxLi4yMDAwIExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUICog RlJPTSBkdW1teV90YWJsZSc7CisJRU5EIExPT1A7CitFTkQKKyQkOworCistLSBDaGVjayB0aGF0 IHRoZSBjb2xsZWN0b3Igd29ya2VkLgorU0VMRUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxl Y3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0gQW5kIGNsZWFyIG9uZSBtb3JlIHRpbWUsIHRvIHZl cmlmeSB0aGF0IHRoaXMgZG9lc24ndCBjYXVzZSBhIHByb2JsZW0KKy0tIGV2ZW4gd2l0aCBhIGxh cmdlciBudW1iZXIgb2YgZW50cmllcy4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxf YWR2aWNlKCk7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRp b253aXNlLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNDJjMDYxMTc2MAotLS0g L2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uu c3FsCkBAIC0wLDAgKzEsNzggQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFy YWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9q b2luID0gdHJ1ZTsKKworQ1JFQVRFIFRBQkxFIHB0MSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwg ZGltMSB0ZXh0LCB2YWwxIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBU QUJMRSBwdDFhIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkK KwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQxYiBQ QVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MWMgUEFSVElUSU9O IE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0MSAoaWQsIGRpbTEsIHZhbDEpCisJ U0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0MTsKKworQ1JFQVRF IFRBQkxFIHB0MiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkK KwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDJhIFBBUlRJVElPTiBP RiBwdDIgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQyYiBQQVJUSVRJT04gT0YgcHQyIEZPUiBW QUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MmMgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZS T00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsK K0lOU0VSVCBJTlRPIHB0MiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIG90aGVy IHRleHQgJyB8fCBnLCAoZyAlIDUpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAw KSBnOworVkFDVVVNIEFOQUxZWkUgcHQyOworCitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2Vy IHByaW1hcnkga2V5LCBkaW0zIHRleHQsIHZhbDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAo aWQpOworQ1JFQVRFIFRBQkxFIHB0M2EgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00g KDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFU RSBUQUJMRSBwdDNiIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAo MjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUg cHQzYyBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJ V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwg ZGltMywgdmFsMykKKwlTRUxFQ1QgZywgJ2EgdGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAl IDcpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZ WkUgcHQzOworCitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaCAoaWQgaW50ZWdlciBwcmltYXJ5IGtl eSwgZGltbSB0ZXh0LCB2YWxtIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFU RSBUQUJMRSBwdG1pc21hdGNoYSBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBWQUxV RVMgRlJPTSAoMSkgdG8gKDE1MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hiIFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAg Rk9SIFZBTFVFUyBGUk9NICgxNTAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdG1pc21hdGNoIChpZCwgZGltbSwgdmFsbSkKKwlT RUxFQ1QgZywgJ3lldCBhbm90aGVyIHRleHQgJyB8fCBnLCAoZyAlIDIpICsgMQorCSAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHRtaXNtYXRjaDsKKwor RVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIs IHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZh bDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CisKKy0tIFN1cHByZXNzIHBhcnRpdGlv bndpc2Ugam9pbiwgb3IgZG8gaXQganVzdCBwYXJ0aWFsbHkuCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRShwdDEgcHQyIHB0MyknOworRVhQ TEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0 MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEg PSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdDIpIHB0MyknOworRVhQTEFJTiAoUExBTl9B RFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEu aWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwy ID0gMSBBTkQgdmFsMyA9IDE7CitDT01NSVQ7CisKKy0tIENhbid0IGZvcmNlIGEgcGFydGl0aW9u d2lzZSBqb2luIHdpdGggYSBtaXNtYXRjaGVkIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdG1pc21hdGNoKSknOwor RVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdG1p c21hdGNoIFdIRVJFIHB0MS5pZCA9IHB0bWlzbWF0Y2guaWQ7CitDT01NSVQ7CmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL3NjYW4uc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li4yNTQxNmE3NWY0NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL3NjYW4uc3FsCkBAIC0wLDAgKzEsMTk1IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitT RVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgc2VxX3BhZ2VfY29z dCA9IDAuMTsKK1NFVCByYW5kb21fcGFnZV9jb3N0ID0gMC4xOworU0VUIGNwdV90dXBsZV9jb3N0 ID0gMDsKK1NFVCBjcHVfaW5kZXhfdHVwbGVfY29zdCA9IDA7CisKK0NSRUFURSBUQUJMRSBzY2Fu X3RhYmxlIChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHNjYW5fdGFibGUKKwlTRUxFQ1QgZywgJ3NvbWUg dGV4dCAnIHx8IGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwKSBnOworQ1JFQVRFIElO REVYIHNjYW5fdGFibGVfYiBPTiBzY2FuX3RhYmxlIFVTSU5HIGJyaW4gKGIpOworVkFDVVVNIEFO QUxZWkUgc2Nhbl90YWJsZTsKKworLS0gU2VxdWVudGlhbCBzY2FuCitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisKKy0tIEluZGV4IHNj YW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKKworLS0gSW5kZXgtb25seSBzY2FuCitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisK Ky0tIEJpdG1hcCBoZWFwIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworCistLSBU SUQgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworCistLSBUSUQgcmFuZ2Ugc2NhbgorRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJ V0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworCistLSBUcnkgZm9yY2lu ZyBlYWNoIG9mIG91ciB0ZXN0IHF1ZXJpZXMgdG8gdXNlIHRoZSBzY2FuIHR5cGUgdGhleQorLS0g d2FudGVkIHRvIHVzZSBhbnl3YXkuIFRoaXMgc2hvdWxkIHN1Y2NlZWQuCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUg c2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRN QVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3Nv bWUgdGV4dCA4JzsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4o c2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICco MSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworQ09NTUlUOworCistLSBUcnkgdG8gZm9yY2UgYSBm dWxsIHNjYW4gb2YgdGhlIHRhYmxlIHRvIHVzZSBzb21lIG90aGVyIHNjYW4gdHlwZS4gQWxsCist LSBvZiB0aGVzZSB3aWxsIGZhaWwuIEFuIGluZGV4IHNjYW4gb3IgYml0bWFwIGhlYXAgc2NhbiBj b3VsZCBwb3RlbnRpYWxseQorLS0gZ2VuZXJhdGUgdGhlIGNvcnJlY3QgYW5zd2VyLCBidXQgdGhl IHBsYW5uZXIgZG9lcyBub3QgZXZlbiBjb25zaWRlciB0aGVzZQorLS0gcG9zc2liaWxpdGllcyBk dWUgdG8gdGhlIGxhY2sgb2YgYSBXSEVSRSBjbGF1c2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtl eSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1ND QU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtl eSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2Fu X3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGU7CitDT01NSVQ7CisKKy0tIFRyeSBhZ2FpbiB0byBmb3JjZSBpbmRleCB1c2Uu IFRoaXMgc2hvdWxkIG5vdyBzdWNjZWVkIGZvciB0aGUgSU5ERVhfU0NBTgorLS0gYW5kIEJJVE1B UF9IRUFQX1NDQU4sIGJ1dCB0aGUgSU5ERVhfT05MWV9TQ0FOIGNhbid0IGJlIGZvcmNlZCBiZWNh dXNlIHRoZQorLS0gcXVlcnkgZmV0Y2hlcyBjb2x1bW5zIG5vdCBpbmNsdWRlZCBpbiB0aGUgaW5k ZXguCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NB TihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2Fu X3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPiAwOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2UgYSBwcmltYXJ5IGtleSBs b29rdXAgdG8gdXNlIGEgc2VxdWVudGlhbCBzY2FuLCBidXQgd2UKKy0tIGNhbid0IGZvcmNlIGl0 IHRvIHVzZSBhbiBpbmRleC1vbmx5IHNjYW4gKGR1ZSB0byB0aGUgY29sdW1uIGxpc3QpCistLSBv ciBhIFRJRCBzY2FuIChkdWUgdG8gdGhlIGFic2VuY2Ugb2YgYSBUSUQgcXVhbCkuCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRF WF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2libHkgZG93bmdyYWRl IGFuIGluZGV4LW9ubHkgc2NhbiB0byBhbiBpbmRleCBzY2FuLCBidXQgd2UgY2FuJ3QKKy0tIGZv cmNlIHRoZSB1c2Ugb2YgYW4gaW5kZXggdGhhdCB0aGUgcGxhbm5lciB0aGlua3MgaXMgaW5hcHBs aWNhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPSAxOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2UgdGhlIHVzZSBvZiBhIHNlcXVl bnRpYWwgc2NhbiBpbiBwbGFjZSBvZiBhIGJpdG1hcCBoZWFwIHNjYW4sCistLSBidXQgYSBwbGFp biBpbmRleCBzY2FuIG9uIGEgQlJJTiBpbmRleCBpcyBub3QgcG9zc2libGUuCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl CisJV0hFUkUgYiA+ICdzb21lIHRleHQgOCc7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0g MTsKK0NPTU1JVDsKKworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNj YW4gcmF0aGVyIHRoYW4gYSBUSUQgc2NhbiBvcgorLS0gVElEIHJhbmdlIHNjYW4uCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0 aWQgPCAnKDIsMSknOworQ09NTUlUOworCistLSBUZXN0IG1vcmUgY29tcGxleCBzY2VuYXJpb3Mg d2l0aCBpbmRleCBzY2Fucy4KK0JFR0lOOworLS0gU2hvdWxkIHN0aWxsIHdvcmsgaWYgd2UgbWVu dGlvbiB0aGUgc2NoZW1hLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRF WF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworLS0gQnV0IG5vdCBpZiB3ZSBtZW50aW9uIHRoZSB3cm9uZyBzY2hlbWEuCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBjaWxidXAuc2Nh bl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CistLSBJdCdzIE9LIHRvIHJlcGVhdCB0aGUg c2FtZSBhZHZpY2UuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1ND QU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkgc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKKy0tIEJ1dCBpdCBkb2Vzbid0IHdvcmsgaWYgdGhlIGluZGV4IHRh cmdldCBpcyBldmVuIG5vdGlvbmFsbHkgZGlmZmVyZW50LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5IHNjYW5f dGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOwor CistLSBUZXN0IGFzc29ydGVkIGluY29ycmVjdCBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4obm90aGluZyknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKG5vdGhpbmcg d2hhdHNvZXZlciknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEg RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKG5vdGhpbmcg d2hhdHNvZXZlciknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEg RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworQ09NTUlUOworCistLSBUZXN0IG91ciBhYmlsaXR5IHRvIHJlZmVyIHRvIG11bHRpcGxlIGlu c3RhbmNlcyBvZiB0aGUgc2FtZSBhbGlhcy4KK0JFR0lOOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQg Sk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxl IHMgT04gZyA9IHMuYTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1ND QU4ocyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g KGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMu YSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyMyKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcg TEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5f dGFibGUgcyBPTiBnID0gcy5hOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdT RVFfU0NBTihzKSBTRVFfU0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nh bl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcg PSBzLmE7CitDT01NSVQ7CisKKy0tIFRlc3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8gc2NhbnMg d2l0aGluIGEgc3VicXVlcnkuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VU IDApIHg7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAo U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworQkVHSU47 CistLSBTaG91bGQgbm90IG1hdGNoLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTihzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDAp IHg7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworLS0gU2hvdWxk IG1hdGNoIGZpcnN0IHF1ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKHNAeCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNF VCAwKSB4OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g KFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKy0tIFNo b3VsZCBtYXRjaCBzZWNvbmQgcXVlcnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnU0VRX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5KSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9 IDEgT0ZGU0VUIDApOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvc3ludGF4LnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3N5bnRheC5zcWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhiYzFiNzFiZWJlCi0tLSAv ZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc3ludGF4LnNxbApAQCAt MCwwICsxLDQyIEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CisKKy0tIEFuIGVtcHR5IHN0cmlu ZyBpcyBhbGxvd2VkLCBhbmQgc28gaXMgYW4gZW1wdHkgdGFyZ2V0IGxpc3QuCitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJyc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9T Q0FOKCknOworCistLSBUZXN0IGFzc29ydGVkIHZhcmlhdGlvbnMgaW4gY2FwaXRhbGl6YXRpb24s IHdoaXRlc3BhY2UsIGFuZCB3aGljaCBwYXJ0cyBvZgorLS0gdGhlIHJlbGF0aW9uIGlkZW50aWZp ZXIgYXJlIGluY2x1ZGVkLiBUaGVzZSBzaG91bGQgYWxsIHdvcmsuCitTRVQgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHgpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn c2VxX3NjYW4oeEB5KSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9zY2FuKHgj MiknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTiAoeC95KSc7CitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJyAgU0VRX1NDQU4gKCB4IC8geSAuIHogKSAgJzsKK1NF VCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIngiIzIvInkiLiJ6IkAidCIpJzsK KworLS0gU3ludGF4IGVycm9ycy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRVUVO VElBTF9TQ0FOKHgpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4nOwor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTignOworU0VUIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdTRVFfU0NBTigiJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn U0VRX1NDQU4oIyc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJygpJzsKK1NFVCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnMTIzJzsKKworLS0gTGVnYWwgY29tbWVudHMuCitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qKi8nOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdIQVNIX0pPSU4oXykvKioqLyc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qIGNv bW1lbnQgKi8gSEFTSF9KT0lOKC8qeCoveSknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICcvKiBjb21tZW50ICovIEhBU0hfSk9JTih5Ly8qeCoveiknOworCistLSBVbnRlcm1pbmF0ZWQg Y29tbWVudHMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qJzsKK1NFVCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUigiZk9PIikgLyogb29wcyc7CisKKy0tIE5lc3Rl ZCBjb21tZW50cyBhcmUgbm90IHN1cHBvcnRlZCwgc28gdGhlIGZpcnN0IG9mIHRoZXNlIGlzIGxl Z2FsIGFuZAorLS0gdGhlIHNlY29uZCBpcyBub3QuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJy8qLyovJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKiBzdHVmZiAqLyov JzsKKworLS0gRm9yZWlnbiBqb2luIHJlcXVpcmVzIG11bHRpcGxlIHJlbGF0aW9uIGlkZW50aWZp ZXJzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oYSknOworU0VU IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGEpKSc7CmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjczNWY1NGQ1N2VjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS90LzAwMV9yZWdyZXNzLnBsCkBAIC0wLDAgKzEsMTQ3IEBACisjIENvcHlyaWdodCAo YykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFJ1 biB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIHBnX3BsYW5fYWR2aWNlIHRvIGNoZWNr IGZvciBwcm9ibGVtcy4KK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7 CisKK3VzZSBDd2QgICAgICAgICAgICBxdyhhYnNfcGF0aCk7Cit1c2UgRmlsZTo6QmFzZW5hbWUg cXcoZGlybmFtZSk7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3Rn cmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgSW5pdGlhbGl6ZSB0aGUg cHJpbWFyeSBub2RlCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygn bWFpbicpOworJG5vZGUtPmluaXQoKTsKKworIyBTZXQgdXAgb3VyIGRlc2lyZWQgY29uZmlndXJh dGlvbi4KKyMKKyMgV2UgcnVuIHdpdGggcGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25f bGltaXQgc2V0IHRvIGVuc3VyZSB0aGF0IHRoZQorIyBwbGFuIHRyZWUgd2Fsa2VyIGNvZGUgcnVu cyBhZ2FpbnN0IGV2ZXJ5IHF1ZXJ5IGluIHRoZSByZWdyZXNzaW9uIHRlc3RzLiBJZgorIyB3ZSdy ZSB1bmFibGUgdG8gcHJvcGVybHkgYW5hbHl6ZSBhbnkgb2YgdGhvc2UgcGxhbiB0cmVlcywgdGhp cyB0ZXN0IHNob3VsZCBmYWlsLgorIworIyBXZSBzZXQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlIHRv IGFuIGFkdmljZSBzdHJpbmcgdGhhdCB3aWxsIGNhdXNlIHRoZSBhZHZpY2UKKyMgdHJvdmUgdG8g YmUgcG9wdWxhdGVkIHdpdGggYSBmZXcgZW50cmllcyBvZiB2YXJpb3VzIHNvcnRzLCBidXQgd2hp Y2ggd2UgZG8KKyMgbm90IGV4cGVjdCB0byBtYXRjaCBhbnl0aGluZyBpbiB0aGUgcmVncmVzc2lv biB0ZXN0IHF1ZXJpZXMuIFRoaXMgd2F5LCB0aGUKKyMgcGxhbm5lciBob29rcyB3aWxsIGJlIGNh bGxlZCwgaW1wcm92aW5nIGNvZGUgY292ZXJhZ2UsIGJ1dCBubyBwbGFucyBzaG91bGQKKyMgYWN0 dWFsbHkgY2hhbmdlLgorIworIyBwZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBwbGll ZF9hZHZpY2U9ZmFsc2UgaXMgbmVlZGVkIHRvIGF2b2lkIGJyZWFraW5nCisjIHJlZ3Jlc3Npb24g dGVzdCBxdWVyaWVzIHRoYXQgdXNlIEVYUExBSU4uIEluIHRoZSByZWFsIHdvcmxkLCBpdCBzZWVt cyBsaWtlCisjIHVzZXJzIHdpbGwgd2FudCBFWFBMQUlOIG91dHB1dCB0byBzaG93IHN1cHBsaWVk IGFkdmljZSBzbyB0aGF0IGl0J3MgY2xlYXIKKyMgd2hldGhlciBub3JtYWwgcGxhbm5lciBiZWhh dmlvciBoYXMgYmVlbiBhbHRlcmVkLCBidXQgaGVyZSB0aGF0J3MgdW5kZXNpcmFibGUuCiskbm9k ZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsIDw8RU9NKTsKK3BnX3BsYW5fYWR2aWNl LnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PTEwMDAwMDAKK3NoYXJlZF9wcmVsb2FkX2xpYnJhcmll cz1wZ19wbGFuX2FkdmljZQorcGdfcGxhbl9hZHZpY2UuYWR2aWNlPSdTRVFfU0NBTihlbnRpcmVs eV9maWN0aXRpb3VzKSBIQVNIX0pPSU4odG90YWxfZmFicmljYXRpb24pIEdBVEhFUihjb21wbGV0 ZWx5X2ltYWdpbmFyeSknCitwZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9h ZHZpY2U9ZmFsc2UKK0VPTQorJG5vZGUtPnN0YXJ0OworCitteSAkc3JjZGlyID0gYWJzX3BhdGgo Ii4uLy4uIik7CisKKyMgLS1kbHBhdGggaXMgbmVlZGVkIHRvIGJlIGFibGUgdG8gZmluZCB0aGUg bG9jYXRpb24gb2YgcmVncmVzcy5zbworIyBhbmQgYW55IGxpYnJhcmllcyB0aGUgcmVncmVzc2lv biB0ZXN0cyByZXF1aXJlLgorbXkgJGRscGF0aCA9IGRpcm5hbWUoJEVOVntSRUdSRVNTX1NITElC fSk7CisKKyMgLS1vdXRwdXRkaXIgcG9pbnRzIHRvIHRoZSBwYXRoIHdoZXJlIHRvIHBsYWNlIHRo ZSBvdXRwdXQgZmlsZXMuCitteSAkb3V0cHV0ZGlyID0gJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxz Ojp0bXBfY2hlY2s7CisKKyMgLS1pbnB1dGRpciBwb2ludHMgdG8gdGhlIHBhdGggb2YgdGhlIGlu cHV0IGZpbGVzLgorbXkgJGlucHV0ZGlyID0gIiRzcmNkaXIvc3JjL3Rlc3QvcmVncmVzcyI7CisK KyMgUnVuIHRoZSB0ZXN0cy4KK215ICRyYyA9CisgIHN5c3RlbSgkRU5We1BHX1JFR1JFU1N9IC4g IiAiCisJICAuICItLWJpbmRpcj0gIgorCSAgLiAiLS1kbHBhdGg9XCIkZGxwYXRoXCIgIgorCSAg LiAiLS1ob3N0PSIgLiAkbm9kZS0+aG9zdCAuICIgIgorCSAgLiAiLS1wb3J0PSIgLiAkbm9kZS0+ cG9ydCAuICIgIgorCSAgLiAiLS1zY2hlZHVsZT0kc3JjZGlyL3NyYy90ZXN0L3JlZ3Jlc3MvcGFy YWxsZWxfc2NoZWR1bGUgIgorCSAgLiAiLS1tYXgtY29uY3VycmVudC10ZXN0cz0yMCAiCisJICAu ICItLWlucHV0ZGlyPVwiJGlucHV0ZGlyXCIgIgorCSAgLiAiLS1vdXRwdXRkaXI9XCIkb3V0cHV0 ZGlyXCIiKTsKKworIyBEdW1wIG91dCB0aGUgcmVncmVzc2lvbiBkaWZmcyBmaWxlLCBpZiB0aGVy ZSBpcyBvbmUKK2lmICgkcmMgIT0gMCkKK3sKKwlteSAkZGlmZnMgPSAiJG91dHB1dGRpci9yZWdy ZXNzaW9uLmRpZmZzIjsKKwlpZiAoLWUgJGRpZmZzKQorCXsKKwkJcHJpbnQgIj09PSBkdW1waW5n ICRkaWZmcyA9PT1cbiI7CisJCXByaW50IHNsdXJwX2ZpbGUoJGRpZmZzKTsKKwkJcHJpbnQgIj09 PSBFT0YgPT09XG4iOworCX0KK30KKworIyBSZXBvcnQgcmVzdWx0cworaXMoJHJjLCAwLCAncmVn cmVzc2lvbiB0ZXN0cyBwYXNzJyk7CisKKyMgQ3JlYXRlIHRoZSBleHRlbnNpb24gc28gd2UgY2Fu IGFjY2VzcyB0aGUgY29sbGVjdG9yCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVB VEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlJyk7CisKKyMgVmVyaWZ5IHRoYXQgYSBsYXJnZSBh bW91bnQgb2YgYWR2aWNlIHdhcyBjb2xsZWN0ZWQKK215ICRhbGxfcXVlcnlfY291bnQgPSAkbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8RU9NKTsKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBn X2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpOworRU9NCitjbXBfb2soJGFsbF9xdWVyeV9j b3VudCwgJz4nLCAzNTAwMCwgImNvcGlvdXMgYWR2aWNlIGNvbGxlY3RlZCIpOworCisjIFZlcmlm eSB0aGF0IGxvdHMgb2YgZGlmZmVyZW50IGFkdmljZSBzdHJpbmdzIHdlcmUgY29sbGVjdGVkCitt eSAkZGlzdGluY3RfcXVlcnlfY291bnQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8 RU9NKTsKK1NFTEVDVCBDT1VOVCgqKSBGUk9NCisJKFNFTEVDVCBESVNUSU5DVCBhZHZpY2UgRlJP TSBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKSk7CitFT00KK2NtcF9vaygkZGlzdGlu Y3RfcXVlcnlfY291bnQsICc+JywgMzAwMCwgImRpdmVyc2UgYWR2aWNlIGNvbGxlY3RlZCIpOwor CisjIFdlIHdhbnQgdG8gdGVzdCBmb3IgdGhlIHByZXNlbmNlIG9mIG91ciBrbm93biB0YWdzIGlu IHRoZSBjb2xsZWN0ZWQgYWR2aWNlLgorIyBQdXQgYWxsIHRhZ3MgaW50byB0aGUgaGFzaCB0aGF0 IGZvbGxvd3M7IG1hcCBhbnkgdGFncyB0aGF0IGFyZW4ndCB0ZXN0ZWQKKyMgYnkgdGhlIGNvcmUg cmVncmVzc2lvbiB0ZXN0cyB0byAwLCBhbmQgb3RoZXJzIHRvIDEuCitteSAldGFnX21hcCA9ICgK KwlCSVRNQVBfSEVBUF9TQ0FOID0+IDEsCisJRk9SRUlHTl9KT0lOID0+IDAsCisJR0FUSEVSID0+ IDEsCisJR0FUSEVSX01FUkdFID0+IDEsCisJSEFTSF9KT0lOID0+IDEsCisJSU5ERVhfT05MWV9T Q0FOID0+IDEsCisJSU5ERVhfU0NBTiA9PiAxLAorCUpPSU5fT1JERVIgPT4gMSwKKwlNRVJHRV9K T0lOX01BVEVSSUFMSVpFID0+IDEsCisJTUVSR0VfSk9JTl9QTEFJTiA9PiAxLAorCU5FU1RFRF9M T09QX01BVEVSSUFMSVpFID0+IDEsCisJTkVTVEVEX0xPT1BfTUVNT0laRSA9PiAxLAorCU5FU1RF RF9MT09QX1BMQUlOID0+IDEsCisJTk9fR0FUSEVSID0+IDEsCisJUEFSVElUSU9OV0lTRSA9PiAx LAorCVNFTUlKT0lOX05PTl9VTklRVUUgPT4gMSwKKwlTRU1JSk9JTl9VTklRVUUgPT4gMSwKKwlT RVFfU0NBTiA9PiAxLAorCVRJRF9TQ0FOID0+IDEsCispOworZm9yIG15ICR0YWcgKHNvcnQga2V5 cyAldGFnX21hcCkKK3sKKwlteSAkY2hlY2tpdCA9ICR0YWdfbWFweyR0YWd9OworCisJIyBTZWFy Y2ggZm9yIHRoZSBnaXZlbiB0YWcuIFRoaXMgaXMgbm90IGVudGlyZWx5IHJvYnVzdDogaXQgY291 bGQgZ2V0IHRocm93bgorCSMgb2ZmIGJ5IGEgdGFibGUgYWxpYXMgc3VjaCBhcyAiRk9SRUlHTl9K T0lOKCIsIGJ1dCB0aGF0IHByb2JhYmx5IHdvbid0CisJIyBoYXBwZW4gaW4gdGhlIGNvcmUgcmVn cmVzc2lvbiB0ZXN0cy4KKwlteSAkdGFnX2NvdW50ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCA8PEVPTSk7CitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19nZXRfY29sbGVjdGVkX3NoYXJl ZF9hZHZpY2UoKQorCVdIRVJFIGFkdmljZSBMSUtFICclJHRhZyglJworRU9NCisKKwkjIENoZWNr IHRoYXQgdGhlIHRhZyBnb3QgYSBub24tdHJpdmlhbCBhbW91bnQgb2YgdXNlLCB1bmxlc3MgdG9s ZCBvdGhlcndpc2UuCisJY21wX29rKCR0YWdfY291bnQsICc+JywgMTAsICJtdWx0aXBsZSB1c2Vz IG9mICR0YWciKSBpZiAkY2hlY2tpdDsKKworCSMgUmVnYXJkbGVzcywgbm90ZSB0aGUgZXhhY3Qg Y291bnQgaW4gdGhlIGxvZywgZm9yIGh1bWFuIGNvbnN1bXB0aW9uLgorCW5vdGUoImZvdW5kICR0 YWdfY291bnQgYWR2aWNlIHN0cmluZ3MgY29udGFpbmluZyAkdGFnIik7Cit9CisKKyMgVHJpZ2dl ciBhIHBhcnRpYWwgY2xlYW51cCBvZiB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IsIGFuZCB0 aGVuIGEgZnVsbAorIyBjbGVhbnVwLgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCA8PEVP TSk7CitTRVQgcGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ9NTAwOworU0VM RUNUICogRlJPTSBwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpOworRU9NCisKK2Rv bmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA2YzgyYWE5NTExZS4u YTRkY2YzNDRiZDMgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0zOTI5LDYgKzM5Mjks NDMgQEAgcGdfd2NfcHJvYmVmdW5jCiBwZ193Y2hhcgogcGdfd2NoYXJfdGJsCiBwZ3BfYXJtb3Jf aGVhZGVyc19zdGF0ZQorcGdwYV9jb2xsZWN0ZWRfYWR2aWNlCitwZ3BhX2FkdmljZV9pdGVtCitw Z3BhX2FkdmljZV90YWdfdHlwZQorcGdwYV9hZHZpY2VfdGFyZ2V0CitwZ3BhX2lkZW50aWZpZXIK K3BncGFfaW5kZXhfdGFyZ2V0CitwZ3BhX2luZGV4X3R5cGUKK3BncGFfaXRtX3R5cGUKK3BncGFf am9pbl9jbGFzcworcGdwYV9qb2luX21lbWJlcgorcGdwYV9qb2luX3N0YXRlCitwZ3BhX2pvaW5f c3RyYXRlZ3kKK3BncGFfam9pbl91bnJvbGxlcgorcGdwYV9sb2NhbF9hZHZpY2UKK3BncGFfbG9j YWxfYWR2aWNlX2NodW5rCitwZ3BhX291dHB1dF9jb250ZXh0CitwZ3BhX3BsYW5fd2Fsa2VyX2Nv bnRleHQKK3BncGFfcGxhbm5lcl9zdGF0ZQorcGdwYV9xZl90eXBlCitwZ3BhX3F1ZXJ5X2ZlYXR1 cmUKK3BncGFfcmlfY2hlY2tlcgorcGdwYV9yaV9jaGVja2VyX2tleQorcGdwYV9zY2FuCitwZ3Bh X3NjYW5fc3RyYXRlZ3kKK3BncGFfc2hhcmVkX2FkdmljZQorcGdwYV9zaGFyZWRfYWR2aWNlX2No dW5rCitwZ3BhX3NoYXJlZF9zdGF0ZQorcGdwYV90YXJnZXRfdHlwZQorcGdwYV90cm92ZQorcGdw YV90cm92ZV9lbnRyeQorcGdwYV90cm92ZV9lbnRyeV9lbGVtZW50CitwZ3BhX3Ryb3ZlX2VudHJ5 X2hhc2gKK3BncGFfdHJvdmVfZW50cnlfa2V5CitwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlCitwZ3Bh X3Ryb3ZlX3Jlc3VsdAorcGdwYV90cm92ZV9zbGljZQorcGdwYV91bnJvbGxlZF9qb2luCiBwZ3Nv Y2tldAogcGdzcWxfdGhpbmdfdAogcGdzc0VudHJ5Ci0tIAoyLjUxLjAKCg== --0000000000008fa27b0643e0d41b--