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 1vfl8T-004kiu-0q for pgsql-hackers@arkaria.postgresql.org; Tue, 13 Jan 2026 20:37:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vfl8S-006Qe2-0Q for pgsql-hackers@arkaria.postgresql.org; Tue, 13 Jan 2026 20:37:04 +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 1vfl8Q-006Qdp-32 for pgsql-hackers@lists.postgresql.org; Tue, 13 Jan 2026 20:37:03 +0000 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vfl8M-000GHR-2c for pgsql-hackers@lists.postgresql.org; Tue, 13 Jan 2026 20:37:02 +0000 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-477a2ab455fso73132085e9.3 for ; Tue, 13 Jan 2026 12:36:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1768336616; x=1768941416; 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=4up/5sH6HjzItzC5dHzh3Ekrd9HGb0b5aGlurP75aIY=; b=kRPFSJsN0n3z39Y9Qg1cmIAsZNpZKvFf85ifcJ5G8JrHec1pPApQkU5cxy43D5nvAB Biyz00BwPCmbiylPc6wNHeEU59cmo4wm+/PUQHMUSCs0wC1+0ws0DWZb822EVRxOWia3 WSXG3++AK2rQJ7Z7hArVxAnAzXqnGZbOpOgm3bqYUf0bVAFgYnAeBh86k9HdCZgoN/4Z UNzje4V3BduWJ2+Zh63vhwiMp+XjqComb5B1HKIt5TyJ2wE9FEk3mxmBzbVoIggd7jBm 3ixTBuGiYlyKM7aF6A5lN8Yy+UfF6WTVVRydGxj/EieqdQd1ehMtadxq65t5Jl4bTyBc aEEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768336616; x=1768941416; 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=4up/5sH6HjzItzC5dHzh3Ekrd9HGb0b5aGlurP75aIY=; b=T7yC38IrS4ek4alsi0TlqhX81PpMZQEFTP6Dy0tQmESPG8/x8FtjyJv7vIceoevpRP GXEZc0L9f4O2xZ4ieT9M1JM5+INfBJXaxcHDxKLwo1wDCJFDU3x8XTqCV7KvIOsYZSxM O7osiiDLNxm/0YPE2l/ZnVyK5+X3a6yqVlxPx+sdxosDeLvETi93KquW+vqJuuVYNjgF n4uynD4gSp3q9Q/iUj3IMwx8rntKYOqM9cPFOPDzdvuJ89hIplKK8V6NNKLF4U9C1yvP GbA23OHcYxwIEhN8eAQWxEBhnn5JkpJqh47Fwgwb56SXETXA26uWKUFgbAReWrB0T2IV u+IQ== X-Forwarded-Encrypted: i=1; AJvYcCUSg3b7lDD7XJGU9NSk27wbTelcFr94Vgg1R08QaxZUP6Dn9p8xlPhzMAFp9kZlIx+R5Qj/vh00OqgK0v7p@lists.postgresql.org X-Gm-Message-State: AOJu0YwSfNmaJFoClurLweBpsuhmqLuzzrMcG5b3ZRqRB1dpcse3P5ly uadbCLDVLB2fTXNFb7I30+auiVHnqcQvM6ljGHhZkZ3YRqq+oyO/jdY0j4wGzt9CNNwYFUx08lG Nik25gOxyl47NhmP1P4tQidcs/5hh3N6ZptaJ4plBTQ== X-Gm-Gg: AY/fxX79e0qtxhEQIIw6uYU01JHF0X9U7fyeD7apzDCCB2EquPH62NGDQubSN0wg5XD IdKLn537fk61kIsfEcbOKCxGDzTvMAqwGquuivgD8ui1xgCy8tn3DtQmdVsh6mlwI7XUfO+Kt2P keFWk1WoajmjbPJctN++msJPQEl9gdHVQmKVkPt51wCL7dO6iGt0JAFf1ncTyy18KFqfobvILcN NWovpvSf8tGYRswLO5TNenGD1z2DFzYy955IVxSMTD9Eisg4Nxtqs5cyPSoZBeYZqBXQec= X-Received: by 2002:a05:6000:2306:b0:42f:b707:56f0 with SMTP id ffacd0b85a97d-4342c548304mr178108f8f.37.1768336615525; Tue, 13 Jan 2026 12:36:55 -0800 (PST) MIME-Version: 1.0 References: <6d59c277-c440-4d1f-a46e-157958c06a5f@vondra.me> <5pltwb73d7cynsxo2yb54ygjk7haviatkrx43mnzihc6kkield@ahnstpgof46i> <931afce3-8c86-4c96-9861-0ffa17c6560f@vondra.me> <4zeu5yb73byiquvf3eefsunnrydyqfxy3eup66jrliutrtd4xl@5iifjey4n5m5> In-Reply-To: From: Peter Geoghegan Date: Tue, 13 Jan 2026 15:36:28 -0500 X-Gm-Features: AZwV_Qhv7LvVUKQixoVVNYcvgkBqvMDbKbQFvzEuClKN8SajoBhj6juXwGfvZ7w Message-ID: Subject: Re: index prefetching To: Tomas Vondra Cc: Andres Freund , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="000000000000d0029506484af358" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d0029506484af358 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Jan 7, 2026 at 1:50=E2=80=AFPM Peter Geoghegan wrote: > v6 focusses on simplifying the batch management code in > heapam_batch_getnext_tid. Importantly, heapam_batch_getnext_tid no > longer uses a loop to process items from the currently loaded batch/to > load the next batch. The control flow in heapam_batch_getnext_tid is a > lot simpler in general compared to v5. The batch stopped applying again. Attached is v7. Changes: * Much improved read stream callback code, with comments that explain exactly what's going on at each step. * We once again support prefetching with index-only scans (for any heap fetches that might be required). We must cache visibility information at the level of whole batches for this. Otherwise, the read stream have a different idea about which heap pages are considered all visible from other code. The corresponding code that actually reads heap tuples expects to be able to get buffers from the read stream that precisely match what it believes are required for any heap fetches. If they don't both agree about visibility info, chaos ensues. We avoid per-tuple visibility lookups in v7, preferring to do everything (every VM lookup for every TID) up front for each batch. This is simpler, and I suspect it's somewhat faster on average. * Fixed several bugs involving scrollable cursors + index prefetching. > I still haven't had time to produce an implementation of the "heap > buffer locking minimization" optimization that's clean enough to > present to the list. Still haven't done this. Our new thinking on this is that it'd be best to get prefetching in better shape before proceeding with the heap buffer locking optimization. --=20 Peter Geoghegan --000000000000d0029506484af358 Content-Type: application/octet-stream; name="v7-0004-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Disposition: attachment; filename="v7-0004-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkd1epep1 RnJvbSA3ZDY5MTYxZWI4MGRmOGNlYTFlZTc0MzU3YmY0M2UwNjIyZTI1MzRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHY3IDQvNF0gTWFr ZSBoYXNoIGluZGV4IEFNIHVzZSBhbWdldGJhdGNoIGludGVyZmFjZS4KClJlcGxhY2UgaGFzaGdl dHR1cGxlIHdpdGggaGFzaGdldGJhdGNoLCBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0aGUK bmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgUGxhaW4gaW5kZXggc2NhbnMgb2YgaGFzaCBpbmRl eGVzIG5vdyByZXR1cm4KbWF0Y2hpbmcgaXRlbXMgaW4gYmF0Y2hlcyBjb25zaXN0aW5nIG9mIGFs bCBvZiB0aGUgbWF0Y2hlcyBmcm9tIGEgZ2l2ZW4KYnVja2V0IG9yIG92ZXJmbG93IHBhZ2UuICBU aGlzIGdpdmVzIHRoZSBjb3JlIGV4ZWN1dG9yIHRoZSBhYmlsaXR5IHRvCnBlcmZvcm0gb3B0aW1p emF0aW9ucyBsaWtlIGluZGV4IHByZWZldGNoaW5nIGR1cmluZyBoYXNoIGluZGV4IHNjYW5zLgoK Tm90ZSB0aGF0IHRoaXMgbWFrZXMgaGFzaCBpbmRleCBzY2FucyB1c2UgdGhlIGRyb3BQaW4gb3B0 aW1pemF0aW9uLApzaW5jZSB0aGF0IGlzIHJlcXVpcmVkIHRvIHVzZSB0aGUgYW1nZXRiYXRjaCBp bnRlcmZhY2UuICBUaGlzIHdvbid0CmF2b2lkIG1ha2luZyBoYXNoIGluZGV4IHZhY3V1bWluZyB3 YWl0IGZvciBhIGNsZWFudXAgbG9jayB3aGVuIGFuIGluZGV4CnNjYW4gaG9sZHMgb250byBhIGNv bmZsaWN0aW5nIHBpbiwgc2luY2Ugc3VjaCBpbmRleCBzY2FucyBzdGlsbCBuZWVkIHRvCmhvbGQg b250byBhIGNvbmZsaWN0aW5nIGJ1Y2tldCBwYWdlIHBpbiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRo ZSBzY2FuLgpJbiBvdGhlciB3b3JkcywgdXNlIG9mIHRoZSBkcm9wUGluIG9wdGltaXphdGlvbiB3 b24ndCBiZW5lZml0IGhhc2ggaW5kZXgKc2NhbnMgaW4gdGhlIHNhbWUgd2F5IHRoYXQgaXQgYmVu ZWZpdHMgbmJ0cmVlIGluZGV4IHNjYW5zIGZvbGxvd2luZwpjb21taXQgMmVkNWI4N2YuICBIb3dl dmVyLCB0aGVyZSBpcyBzdGlsbCBzb21lIHZhbHVlIGluIGtlZXBpbmcgdGhlCm51bWJlciBvZiBi dWZmZXIgcGlucyBoZWxkIGF0IGFueSBvbmUgdGltZSB0byBhIG1pbmltdW0uCgpJbmRleCBwcmVm ZXRjaGluZyB0ZW5kcyB0byBob2xkIG9wZW4gYXMgbWFueSBhcyBzZXZlcmFsIGRvemVuIGJhdGNo ZXMKd2l0aCBjZXJ0YWluIHdvcmtsb2FkcyAod29ya2xvYWRzIHdoZXJlIHRoZSBzdHJlYW0gcG9z aXRpb24gaGFzIHRvIGdldApxdWl0ZSBmYXIgYWhlYWQgb2YgdGhlIHJlYWQgcG9zaXRpb24gaW4g b3JkZXIgdG8gbWFpbnRhaW4gdGhlCmFwcHJvcHJpYXRlIHByZWZldGNoIGRpc3RhbmNlIG9uIHRo ZSBoZWFwYW0gc2lkZSkuICBHdWFyYW50ZWVpbmcgdGhhdApvcGVuIGJhdGNoZXMgd29uJ3QgaG9s ZCBidWZmZXIgcGlucyBvbiBpbmRleCBwYWdlcyAoYXQgbGVhc3QgaW4gdGhlCmNvbW1vbiBjYXNl IHdoZXJlIHRoZSBkcm9wUGluIG9wdGltaXphdGlvbiBpcyBzYWZlIHRvIHVzZSkgdGhlcmVieQpz aW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHByZWZldGNoaW5nLgoK QWxzbyBhZGQgVmFsZ3JpbmQgYnVmZmVyIGxvY2sgaW5zdHJ1bWVudGF0aW9uIHRvIGhhc2gsIGJy aW5naW5nIGl0IGluCmxpbmUgd2l0aCBuYnRyZWUgZm9sbG93aW5nIGNvbW1pdCA0YTcwZjgyOS4g IFRoaXMgaXMgYW5vdGhlciByZXF1aXJlbWVudAp3aGVuIHVzaW5nIHRoZSBhbWdldGJhdGNoIGlu dGVyZmFjZS4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpEaXNjdXNzaW9u OiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3ptWXFoYWNCSDE2MXBlQVdiNWVGPUphN0NGQVEr MGpTRU1xPXFuZkxWVE9PZ0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9o YXNoLmggICAgICAgICAgICB8ICA3MyArLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2guYyAgICAgICB8IDEyMiArKysrLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo cGFnZS5jICAgfCAgMjYgKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMg fCAzMzEgKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNodXRpbC5jICAgfCAxMDAgKysrKy0tLS0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0ICAgICB8ICAgMiAtCiA2IGZpbGVzIGNoYW5nZWQsIDI1NiBpbnNlcnRpb25zKCspLCAz OTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKaW5kZXggYTg3MDJmMGU1Li4xYjgwZmQ3ZWQgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2hhc2guaApAQCAtMTAwLDU4ICsxMDAsNiBAQCB0eXBlZGVmIEhhc2hQYWdlT3BhcXVlRGF0 YSAqSGFzaFBhZ2VPcGFxdWU7CiAgKi8KICNkZWZpbmUgSEFTSE9fUEFHRV9JRAkJMHhGRjgwCiAK LXR5cGVkZWYgc3RydWN0IEhhc2hTY2FuUG9zSXRlbQkvKiB3aGF0IHdlIHJlbWVtYmVyIGFib3V0 IGVhY2ggbWF0Y2ggKi8KLXsKLQlJdGVtUG9pbnRlckRhdGEgaGVhcFRpZDsJLyogVElEIG9mIHJl ZmVyZW5jZWQgaGVhcCBpdGVtICovCi0JT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRl eCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KLX0gSGFzaFNjYW5Qb3NJdGVtOwotCi10 eXBlZGVmIHN0cnVjdCBIYXNoU2NhblBvc0RhdGEKLXsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBpZiB2 YWxpZCwgdGhlIGJ1ZmZlciBpcyBwaW5uZWQgKi8KLQlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8q IGN1cnJlbnQgaGFzaCBpbmRleCBwYWdlICovCi0JQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBu ZXh0IG92ZXJmbG93IHBhZ2UgKi8KLQlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIHByZXYgb3Zl cmZsb3cgb3IgYnVja2V0IHBhZ2UgKi8KLQotCS8qCi0JICogVGhlIGl0ZW1zIGFycmF5IGlzIGFs d2F5cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVhc2luZwotCSAqIGluZGV4b2Zm c2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8gZmlsbCB0 aGUKLQkgKiBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFzdCBzbG90 IGFuZCBmaWxsIGRvd253YXJkcy4KLQkgKiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJzdC12YWxp ZC1lbnRyeSBhbmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCi0JICogaXRlbUluZGV4IGlz IGEgY3Vyc29yIHNob3dpbmcgd2hpY2ggZW50cnkgd2FzIGxhc3QgcmV0dXJuZWQgdG8gY2FsbGVy LgotCSAqLwotCWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1z W10gKi8KLQlpbnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAq LwotCWludAkJCWl0ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXggaW4gaXRlbXNbXSAqLwotCi0J SGFzaFNjYW5Qb3NJdGVtIGl0ZW1zW01heEluZGV4VHVwbGVzUGVyUGFnZV07CS8qIE1VU1QgQkUg TEFTVCAqLwotfSBIYXNoU2NhblBvc0RhdGE7Ci0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJc1Bpbm5l ZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5w b3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBc Ci0JQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSBcCi0pCi0KLSNkZWZpbmUgSGFzaFNjYW5Q b3NJc1ZhbGlkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxp ZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcyku YnVmKSksIFwKLQlCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSBcCi0pCi0K LSNkZWZpbmUgSGFzaFNjYW5Qb3NJbnZhbGlkYXRlKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJKHNj YW5wb3MpLmJ1ZiA9IEludmFsaWRCdWZmZXI7IFwKLQkJKHNjYW5wb3MpLmN1cnJQYWdlID0gSW52 YWxpZEJsb2NrTnVtYmVyOyBcCi0JCShzY2FucG9zKS5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051 bWJlcjsgXAotCQkoc2NhbnBvcykucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQkJ KHNjYW5wb3MpLmZpcnN0SXRlbSA9IDA7IFwKLQkJKHNjYW5wb3MpLmxhc3RJdGVtID0gMDsgXAot CQkoc2NhbnBvcykuaXRlbUluZGV4ID0gMDsgXAotCX0gd2hpbGUgKDApCi0KIC8qCiAgKglIYXNo U2Nhbk9wYXF1ZURhdGEgaXMgcHJpdmF0ZSBzdGF0ZSBmb3IgYSBoYXNoIGluZGV4IHNjYW4uCiAg Ki8KQEAgLTE3OCwxNSArMTI2LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5PcGFxdWVEYXRh CiAJICogcmVmZXJyZWQgb25seSB3aGVuIGhhc2hzb19idWNfcG9wdWxhdGVkIGlzIHRydWUuCiAJ ICovCiAJYm9vbAkJaGFzaHNvX2J1Y19zcGxpdDsKLQkvKiBpbmZvIGFib3V0IGtpbGxlZCBpdGVt cyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8KLQlpbnQJCSAg ICpraWxsZWRJdGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAq LwotCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1z ICovCi0KLQkvKgotCSAqIElkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gYSBwYWdl IGFuZCBzYXZlIHRoZW0gaW4KLQkgKiBIYXNoU2NhblBvc0RhdGEKLQkgKi8KLQlIYXNoU2NhblBv c0RhdGEgY3VyclBvczsJLyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCiB9IEhhc2hTY2FuT3Bh cXVlRGF0YTsKIAogdHlwZWRlZiBIYXNoU2Nhbk9wYXF1ZURhdGEgKkhhc2hTY2FuT3BhcXVlOwpA QCAtMzY4LDExICszMDcsMTQgQEAgZXh0ZXJuIGJvb2wgaGFzaGluc2VydChSZWxhdGlvbiByZWws IERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAkJCQkJICAgSW5kZXhVbmlxdWVDaGVjayBj aGVja1VuaXF1ZSwKIAkJCQkJICAgYm9vbCBpbmRleFVuY2hhbmdlZCwKIAkJCQkJICAgc3RydWN0 IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKLWV4dGVybiBib29sIGhhc2hnZXR0dXBsZShJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBCYXRjaEluZGV4U2NhbiBo YXNoZ2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgICBCYXRjaEluZGV4U2Nh biBwcmlvcmJhdGNoLAorCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50 NjQgaGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4 dGVybiBJbmRleFNjYW5EZXNjIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMs IGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJICAgU2NhbktleSBvcmRl cmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBoYXNoZnJlZWJhdGNoKEluZGV4U2Nh bkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOwogZXh0ZXJuIHZvaWQgaGFzaGVuZHNj YW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmhh c2hidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJIEluZGV4QnVs a0RlbGV0ZVJlc3VsdCAqc3RhdHMsCkBAIC00NDUsOCArMzg3LDkgQEAgZXh0ZXJuIHZvaWQgX2hh c2hfZmluaXNoX3NwbGl0KFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZlciBvYnVm LAogCQkJCQkJCSAgIHVpbnQzMiBsb3dtYXNrKTsKIAogLyogaGFzaHNlYXJjaC5jICovCi1leHRl cm4gYm9vbCBfaGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp OwotZXh0ZXJuIGJvb2wgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcik7CitleHRlcm4gQmF0Y2hJbmRleFNjYW4gX2hhc2hfbmV4dChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgQmF0Y2hJbmRleFNjYW4gcHJpb3Ji YXRjaCk7CitleHRlcm4gQmF0Y2hJbmRleFNjYW4gX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5cGVkZWYgc3Ry dWN0IEhTcG9vbCBIU3Bvb2w7CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQuYyAqLwpAQCAt NDc2LDcgKzQxOSw3IEBAIGV4dGVybiBCbG9ja051bWJlciBfaGFzaF9nZXRfb2xkYmxvY2tfZnJv bV9uZXdidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgbmV3X2J1CiBleHRlcm4gQmxvY2tOdW1i ZXIgX2hhc2hfZ2V0X25ld2Jsb2NrX2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0 IG9sZF9idWNrZXQpOwogZXh0ZXJuIEJ1Y2tldCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xk YnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQsCiAJCQkJCQkJCQkJCQkgdWlu dDMyIGxvd21hc2ssIHVpbnQzMiBtYXhidWNrZXQpOwotZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9p dGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9pdGVtcyhJ bmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKIAogLyogaGFzaC5jICov CiBleHRlcm4gdm9pZCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlvbiByZWwsIEJ1Y2tldCBjdXJf YnVja2V0LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDZhMjBiNjdmNi4uMzYxMzU3NDI4IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC0xMDEsOSArMTAxLDkgQEAgaGFzaGhhbmRsZXIoUEdf RlVOQ1RJT05fQVJHUykKIAkJLmFtYWRqdXN0bWVtYmVycyA9IGhhc2hhZGp1c3RtZW1iZXJzLAog CQkuYW1iZWdpbnNjYW4gPSBoYXNoYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBoYXNocmVzY2Fu LAotCQkuYW1nZXR0dXBsZSA9IGhhc2hnZXR0dXBsZSwKLQkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAot CQkuYW1mcmVlYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJh dGNoID0gaGFzaGdldGJhdGNoLAorCQkuYW1mcmVlYmF0Y2ggPSBoYXNoZnJlZWJhdGNoLAogCQku YW1nZXRiaXRtYXAgPSBoYXNoZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gaGFzaGVuZHNjYW4s CiAJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKQEAgLTI4Niw1MyArMjg2LDI3IEBAIGhhc2hpbnNlcnQo UmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiAKIAogLyoKLSAqCWhh c2hnZXR0dXBsZSgpIC0tIEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2Nhbi4KKyAqCWhhc2hn ZXRiYXRjaCgpIC0tIEdldCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4gdGhl IHNjYW4KICAqLwotYm9vbAotaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpCitCYXRjaEluZGV4U2NhbgoraGFzaGdldGJhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgQmF0Y2hJbmRleFNjYW4gcHJpb3JiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJ SGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlib29s CQlyZXM7CisJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAogCS8qIEhhc2gg aW5kZXhlcyBhcmUgYWx3YXlzIGxvc3N5IHNpbmNlIHdlIHN0b3JlIG9ubHkgdGhlIGhhc2ggY29k ZSAqLwogCXNjYW4tPnhzX3JlY2hlY2sgPSB0cnVlOwogCi0JLyoKLQkgKiBJZiB3ZSd2ZSBhbHJl YWR5IGluaXRpYWxpemVkIHRoaXMgc2Nhbiwgd2UgY2FuIGp1c3QgYWR2YW5jZSBpdCBpbiB0aGUK LQkgKiBhcHByb3ByaWF0ZSBkaXJlY3Rpb24uICBJZiB3ZSBoYXZlbid0IGRvbmUgc28geWV0LCB3 ZSBjYWxsIGEgcm91dGluZSB0bwotCSAqIGdldCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2Nhbi4K LQkgKi8KLQlpZiAoIUhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JCXJlcyA9IF9o YXNoX2ZpcnN0KHNjYW4sIGRpcik7Ci0JZWxzZQorCWlmIChwcmlvcmJhdGNoID09IE5VTEwpCiAJ ewotCQkvKgotCQkgKiBDaGVjayB0byBzZWUgaWYgd2Ugc2hvdWxkIGtpbGwgdGhlIHByZXZpb3Vz bHktZmV0Y2hlZCB0dXBsZS4KLQkJICovCi0JCWlmIChzY2FuLT5raWxsX3ByaW9yX3R1cGxlKQot CQl7Ci0JCQkvKgotCQkJICogWWVzLCBzbyByZW1lbWJlciBpdCBmb3IgbGF0ZXIuIChXZSdsbCBk ZWFsIHdpdGggYWxsIHN1Y2ggdHVwbGVzCi0JCQkgKiBhdCBvbmNlIHJpZ2h0IGFmdGVyIGxlYXZp bmcgdGhlIGluZGV4IHBhZ2Ugb3IgYXQgZW5kIG9mIHNjYW4uKQotCQkJICogSW4gY2FzZSBpZiBj YWxsZXIgcmV2ZXJzZXMgdGhlIGluZGV4c2NhbiBkaXJlY3Rpb24gaXQgaXMgcXVpdGUKLQkJCSAq IHBvc3NpYmxlIHRoYXQgdGhlIHNhbWUgaXRlbSBtaWdodCBnZXQgZW50ZXJlZCBtdWx0aXBsZSB0 aW1lcy4KLQkJCSAqIEJ1dCwgd2UgZG9uJ3QgZGV0ZWN0IHRoYXQ7IGluc3RlYWQsIHdlIGp1c3Qg Zm9yZ2V0IGFueSBleGNlc3MKLQkJCSAqIGVudHJpZXMuCi0JCQkgKi8KLQkJCWlmIChzby0+a2ls bGVkSXRlbXMgPT0gTlVMTCkKLQkJCQlzby0+a2lsbGVkSXRlbXMgPSBwYWxsb2NfYXJyYXkoaW50 LCBNYXhJbmRleFR1cGxlc1BlclBhZ2UpOworCQlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsK IAotCQkJaWYgKHNvLT5udW1LaWxsZWQgPCBNYXhJbmRleFR1cGxlc1BlclBhZ2UpCi0JCQkJc28t PmtpbGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQrK10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0J CX0KLQotCQkvKgotCQkgKiBOb3cgY29udGludWUgdGhlIHNjYW4uCi0JCSAqLwotCQlyZXMgPSBf aGFzaF9uZXh0KHNjYW4sIGRpcik7CisJCS8qIEluaXRpYWxpemUgdGhlIHNjYW4sIGFuZCByZXR1 cm4gZmlyc3QgYmF0Y2ggb2YgbWF0Y2hpbmcgaXRlbXMgKi8KKwkJcmV0dXJuIF9oYXNoX2ZpcnN0 KHNjYW4sIGRpcik7CiAJfQogCi0JcmV0dXJuIHJlczsKKwkvKiBSZXR1cm4gYmF0Y2ggcG9zaXRp b25lZCBhZnRlciBjYWxsZXIncyBiYXRjaCAoaW4gZGlyZWN0aW9uICdkaXInKSAqLworCXJldHVy biBfaGFzaF9uZXh0KHNjYW4sIGRpciwgcHJpb3JiYXRjaCk7CiB9CiAKIApAQCAtMzQyLDI2ICsz MTYsMjMgQEAgaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiBpbnQ2NAogaGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAq dGJtKQogewotCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFx dWU7Ci0JYm9vbAkJcmVzOworCUJhdGNoSW5kZXhTY2FuIGJhdGNoOwogCWludDY0CQludGlkcyA9 IDA7Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbTsKKwlpbnQJCQlpdGVtSW5kZXg7CiAKLQly ZXMgPSBfaGFzaF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJYmF0Y2ggPSBf aGFzaF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CiAKLQl3aGlsZSAocmVzKQor CXdoaWxlIChiYXRjaCAhPSBOVUxMKQogCXsKLQkJY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRl bXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKKwkJZm9yIChpdGVtSW5kZXggPSBiYXRjaC0+Zmly c3RJdGVtOworCQkJIGl0ZW1JbmRleCA8PSBiYXRjaC0+bGFzdEl0ZW07CisJCQkgaXRlbUluZGV4 KyspCisJCXsKKwkJCXRibV9hZGRfdHVwbGVzKHRibSwgJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhd LmhlYXBUaWQsIDEsIHRydWUpOworCQkJbnRpZHMrKzsKKwkJfQogCi0JCS8qCi0JCSAqIF9oYXNo X2ZpcnN0IGFuZCBfaGFzaF9uZXh0IGhhbmRsZSBlbGltaW5hdGUgZGVhZCBpbmRleCBlbnRyaWVz Ci0JCSAqIHdoZW5ldmVyIHNjYW4tPmlnbm9yZV9raWxsZWRfdHVwbGVzIGlzIHRydWUuICBUaGVy ZWZvcmUsIHRoZXJlJ3MKLQkJICogbm90aGluZyB0byBkbyBoZXJlIGV4Y2VwdCBhZGQgdGhlIHJl c3VsdHMgdG8gdGhlIFRJREJpdG1hcC4KLQkJICovCi0JCXRibV9hZGRfdHVwbGVzKHRibSwgJihj dXJySXRlbS0+aGVhcFRpZCksIDEsIHRydWUpOwotCQludGlkcysrOwotCi0JCXJlcyA9IF9oYXNo X25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pOworCQliYXRjaCA9IF9oYXNoX25leHQo c2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGJhdGNoKTsKIAl9CiAKIAlyZXR1cm4gbnRpZHM7 CkBAIC0zODMsMTcgKzM1NCwxNCBAQCBoYXNoYmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5r ZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNjYW4gPSBSZWxhdGlvbkdldEluZGV4U2NhbihyZWwsIG5r ZXlzLCBub3JkZXJieXMpOwogCiAJc28gPSAoSGFzaFNjYW5PcGFxdWUpIHBhbGxvY19vYmplY3Qo SGFzaFNjYW5PcGFxdWVEYXRhKTsKLQlIYXNoU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3Mp OwogCXNvLT5oYXNoc29fYnVja2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAJc28tPmhhc2hzb19z cGxpdF9idWNrZXRfYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAogCXNvLT5oYXNoc29fYnVjX3BvcHVs YXRlZCA9IGZhbHNlOwogCXNvLT5oYXNoc29fYnVjX3NwbGl0ID0gZmFsc2U7CiAKLQlzby0+a2ls bGVkSXRlbXMgPSBOVUxMOwotCXNvLT5udW1LaWxsZWQgPSAwOwotCiAJc2Nhbi0+b3BhcXVlID0g c287CisJc2Nhbi0+bWF4aXRlbXNiYXRjaCA9IE1heEluZGV4VHVwbGVzUGVyUGFnZTsKIAogCXJl dHVybiBzY2FuOwogfQpAQCAtNDA4LDE4ICszNzYsOCBAQCBoYXNocmVzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCUhhc2hTY2FuT3BhcXVl IHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUmVsYXRpb24JcmVsID0gc2Nh bi0+aW5kZXhSZWxhdGlvbjsKIAotCWlmIChIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3Mp KQotCXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtp bGxlZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfaGFzaF9raWxsX2l0 ZW1zKHNjYW4pOwotCX0KLQogCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwogCi0JLyogc2V0 IHBvc2l0aW9uIGludmFsaWQgKHRoaXMgd2lsbCBjYXVzZSBfaGFzaF9maXJzdCBjYWxsKSAqLwot CUhhc2hTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0KIAkvKiBVcGRhdGUgc2NhbiBr ZXksIGlmIGEgbmV3IG9uZSBpcyBnaXZlbiAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4tPm51bWJl ck9mS2V5cyA+IDApCiAJCW1lbWNweShzY2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2FuLT5udW1i ZXJPZktleXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKQEAgLTQyOCw2ICszODYsMjUgQEAgaGFz aHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5 cywKIAlzby0+aGFzaHNvX2J1Y19zcGxpdCA9IGZhbHNlOwogfQogCisvKgorICoJaGFzaGZyZWVi YXRjaCgpIC0tIEZyZWUgYmF0Y2ggcmVzb3VyY2VzLCBpbmNsdWRpbmcgaXRzIGJ1ZmZlciBwaW4K KyAqLwordm9pZAoraGFzaGZyZWViYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhT Y2FuIGJhdGNoKQoreworCWlmIChiYXRjaC0+bnVtS2lsbGVkID4gMCkKKwkJX2hhc2hfa2lsbF9p dGVtcyhzY2FuLCBiYXRjaCk7CisKKwlpZiAoIXNjYW4tPmRyb3BQaW4pCisJeworCQkvKiBpbmRl eGFtX3V0aWxfYmF0Y2hfdW5sb2NrIGRpZG4ndCB1bnBpbiBwYWdlIGVhcmxpZXIsIGRvIGl0IG5v dyAqLworCQlSZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYpOworCQliYXRjaC0+YnVmID0gSW52YWxp ZEJ1ZmZlcjsKKwl9CisKKwlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBiYXRjaCk7 Cit9CisKIC8qCiAgKgloYXNoZW5kc2NhbigpIC0tIGNsb3NlIGRvd24gYSBzY2FuCiAgKi8KQEAg LTQzNywxNyArNDE0LDggQEAgaGFzaGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCUhhc2hT Y2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUmVsYXRpb24J cmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAotCWlmIChIYXNoU2NhblBvc0lzVmFsaWQoc28t PmN1cnJQb3MpKQotCXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdp dGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfaGFz aF9raWxsX2l0ZW1zKHNjYW4pOwotCX0KLQogCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwog Ci0JaWYgKHNvLT5raWxsZWRJdGVtcyAhPSBOVUxMKQotCQlwZnJlZShzby0+a2lsbGVkSXRlbXMp OwogCXBmcmVlKHNvKTsKIAlzY2FuLT5vcGFxdWUgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2hwYWdlLmMKaW5kZXggOGUyMjBhM2FlLi45YjY5MTE5MDUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hh c2gvaGFzaHBhZ2UuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRp bHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv c21nci5oIgorI2luY2x1ZGUgInV0aWxzL21lbWRlYnVnLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVs LmgiCiAKIHN0YXRpYyBib29sIF9oYXNoX2FsbG9jX2J1Y2tldHMoUmVsYXRpb24gcmVsLCBCbG9j a051bWJlciBmaXJzdGJsb2NrLApAQCAtNzksNiArODAsOSBAQCBfaGFzaF9nZXRidWYoUmVsYXRp b24gcmVsLCBCbG9ja051bWJlciBibGtubywgaW50IGFjY2VzcywgaW50IGZsYWdzKQogCWlmIChh Y2Nlc3MgIT0gSEFTSF9OT0xPQ0spCiAJCUxvY2tCdWZmZXIoYnVmLCBhY2Nlc3MpOwogCisJaWYg KCFSZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMocmVsKSkKKwkJVkFMR1JJTkRfTUFLRV9NRU1fREVG SU5FRChCdWZmZXJHZXRQYWdlKGJ1ZiksIEJMQ0tTWik7CisKIAkvKiByZWYgY291bnQgYW5kIGxv Y2sgdHlwZSBhcmUgY29ycmVjdCAqLwogCiAJX2hhc2hfY2hlY2twYWdlKHJlbCwgYnVmLCBmbGFn cyk7CkBAIC0xMDgsNiArMTEyLDkgQEAgX2hhc2hfZ2V0YnVmX3dpdGhfY29uZGxvY2tfY2xlYW51 cChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGJsa25vLCBpbnQgZmxhZ3MpCiAJCXJldHVybiBJ bnZhbGlkQnVmZmVyOwogCX0KIAorCWlmICghUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHJlbCkp CisJCVZBTEdSSU5EX01BS0VfTUVNX0RFRklORUQoQnVmZmVyR2V0UGFnZShidWYpLCBCTENLU1op OworCiAJLyogcmVmIGNvdW50IGFuZCBsb2NrIHR5cGUgYXJlIGNvcnJlY3QgKi8KIAogCV9oYXNo X2NoZWNrcGFnZShyZWwsIGJ1ZiwgZmxhZ3MpOwpAQCAtMjgwLDMxICsyODcsMjQgQEAgX2hhc2hf ZHJvcGJ1ZihSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYpCiB9CiAKIC8qCi0gKglfaGFzaF9kcm9w c2NhbmJ1ZigpIC0tIHJlbGVhc2UgYnVmZmVycyB1c2VkIGluIHNjYW4uCisgKglfaGFzaF9kcm9w c2NhbmJ1ZigpIC0tIHJlbGVhc2UgYnVmZmVycyBvd25lZCBieSBzY2FuLgogICoKLSAqIFRoaXMg cm91dGluZSB1bnBpbnMgdGhlIGJ1ZmZlcnMgdXNlZCBkdXJpbmcgc2NhbiBvbiB3aGljaCB3ZQot ICogaG9sZCBubyBsb2NrLgorICogVGhpcyByb3V0aW5lIHVucGlucyB0aGUgYnVmZmVycyBmb3Ig dGhlIHByaW1hcnkgYnVja2V0IHBhZ2UgYW5kIGZvciB0aGUKKyAqIGJ1Y2tldCBwYWdlIG9mIGEg YnVja2V0IGJlaW5nIHNwbGl0IGFzIG5lZWRlZC4KICAqLwogdm9pZAogX2hhc2hfZHJvcHNjYW5i dWYoUmVsYXRpb24gcmVsLCBIYXNoU2Nhbk9wYXF1ZSBzbykKIHsKIAkvKiByZWxlYXNlIHBpbiB3 ZSBob2xkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2UgKi8KLQlpZiAoQnVmZmVySXNWYWxpZChzby0+ aGFzaHNvX2J1Y2tldF9idWYpICYmCi0JCXNvLT5oYXNoc29fYnVja2V0X2J1ZiAhPSBzby0+Y3Vy clBvcy5idWYpCisJaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhhc2hzb19idWNrZXRfYnVmKSkKIAkJ X2hhc2hfZHJvcGJ1ZihyZWwsIHNvLT5oYXNoc29fYnVja2V0X2J1Zik7CiAJc28tPmhhc2hzb19i dWNrZXRfYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAotCS8qIHJlbGVhc2UgcGluIHdlIGhvbGQgb24g cHJpbWFyeSBidWNrZXQgcGFnZSAgb2YgYnVja2V0IGJlaW5nIHNwbGl0ICovCi0JaWYgKEJ1ZmZl cklzVmFsaWQoc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKSAmJgotCQlzby0+aGFzaHNvX3Nw bGl0X2J1Y2tldF9idWYgIT0gc28tPmN1cnJQb3MuYnVmKQorCS8qIHJlbGVhc2UgcGluIGhlbGQg b24gcHJpbWFyeSBidWNrZXQgcGFnZSBvZiBidWNrZXQgYmVpbmcgc3BsaXQgKi8KKwlpZiAoQnVm ZmVySXNWYWxpZChzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpKQogCQlfaGFzaF9kcm9wYnVm KHJlbCwgc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKTsKIAlzby0+aGFzaHNvX3NwbGl0X2J1 Y2tldF9idWYgPSBJbnZhbGlkQnVmZmVyOwogCi0JLyogcmVsZWFzZSBhbnkgcGluIHdlIHN0aWxs IGhvbGQgKi8KLQlpZiAoQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQotCQlfaGFzaF9k cm9wYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5idWYgPSBJbnZhbGlk QnVmZmVyOwotCiAJLyogcmVzZXQgc3BsaXQgc2NhbiAqLwogCXNvLT5oYXNoc29fYnVjX3BvcHVs YXRlZCA9IGZhbHNlOwogCXNvLT5oYXNoc29fYnVjX3NwbGl0ID0gZmFsc2U7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoc2VhcmNoLmMKaW5kZXggODlkMWM1YmM2Li5jNzI3MDVkYzMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMKQEAgLTIyLDEwNSArMjIsODMgQEAKICNpbmNsdWRl ICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCi1zdGF0aWMg Ym9vbCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVmUCwKLQkJ CQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyKTsKK3N0YXRpYyBib29sIF9oYXNoX3JlYWRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyIGJ1ZiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkg ICBCYXRjaEluZGV4U2NhbiBiYXRjaCk7CiBzdGF0aWMgaW50CV9oYXNoX2xvYWRfcXVhbGlmaWVk X2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgUGFnZSBwYWdlLAotCQkJCQkJCQkJICAgT2Zmc2V0 TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpOwotc3RhdGljIGlubGluZSB2b2lkIF9o YXNoX3NhdmVpdGVtKEhhc2hTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAorCQkJCQkJCQkJ ICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJCQkgICBC YXRjaEluZGV4U2NhbiBiYXRjaCk7CitzdGF0aWMgaW5saW5lIHZvaWQgX2hhc2hfc2F2ZWl0ZW0o QmF0Y2hJbmRleFNjYW4gYmF0Y2gsIGludCBpdGVtSW5kZXgsCiAJCQkJCQkJCSAgT2Zmc2V0TnVt YmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKTsKIHN0YXRpYyB2b2lkIF9oYXNoX3JlYWRuZXh0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZwLAogCQkJCQkJICAgUGFnZSAqcGFnZXAs IEhhc2hQYWdlT3BhcXVlICpvcGFxdWVwKTsKIAogLyoKLSAqCV9oYXNoX25leHQoKSAtLSBHZXQg dGhlIG5leHQgaXRlbSBpbiBhIHNjYW4uCisgKglfaGFzaF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0 IGJhdGNoIG9mIGl0ZW1zIGluIGEgc2Nhbi4KICAqCi0gKgkJT24gZW50cnksIHNvLT5jdXJyUG9z IGRlc2NyaWJlcyB0aGUgY3VycmVudCBwYWdlLCB3aGljaCBtYXkKLSAqCQliZSBwaW5uZWQgYnV0 IG5vdCBsb2NrZWQsIGFuZCBzby0+Y3VyclBvcy5pdGVtSW5kZXggaWRlbnRpZmllcwotICoJCXdo aWNoIGl0ZW0gd2FzIHByZXZpb3VzbHkgcmV0dXJuZWQuCisgKgkJT24gZW50cnksIHByaW9yYmF0 Y2ggZGVzY3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UgYmF0Y2ggd2l0aCBpdGVtcworICoJCWFscmVh ZHkgcmV0dXJuZWQuCiAgKgotICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgc2Nhbi0+eHNfaGVhcHRp ZCBpcyBzZXQgdG8gdGhlIFRJRCBvZiB0aGUgbmV4dAotICoJCWhlYXAgdHVwbGUuICBzby0+Y3Vy clBvcyBpcyB1cGRhdGVkIGFzIG5lZWRlZC4KKyAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIHJldHVy bnMgYSBiYXRjaCBjb250YWluaW5nIG1hdGNoaW5nIGl0ZW1zIGZyb20KKyAqCQluZXh0IHBhZ2Uu ICBPdGhlcndpc2UgcmV0dXJucyBOVUxMLCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIG5vCisg KgkJZnVydGhlciBtYXRjaGVzLiAgTm8gbG9ja3MgYXJlIGV2ZXIgaGVsZCB3aGVuIHdlIHJldHVy bi4KICAqCi0gKgkJT24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyksIHdlIHJldHVybiBm YWxzZSB3aXRoIHBpbgotICoJCWhlbGQgb24gYnVja2V0IHBhZ2UgYnV0IG5vIHBpbnMgb3IgbG9j a3MgaGVsZCBvbiBvdmVyZmxvdwotICoJCXBhZ2UuCisgKgkJUmV0YWlucyBwaW5zIGFjY29yZGlu ZyB0byB0aGUgc2FtZSBydWxlcyBhcyBfaGFzaF9maXJzdC4KICAqLwotYm9vbAotX2hhc2hfbmV4 dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorQmF0Y2hJbmRleFNjYW4K K19oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgQmF0Y2hJ bmRleFNjYW4gcHJpb3JiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0 aW9uOwogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7 Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbTsKIAlCbG9ja051bWJlciBibGtubzsKIAlCdWZm ZXIJCWJ1ZjsKLQlib29sCQllbmRfb2Zfc2NhbiA9IGZhbHNlOworCUJhdGNoSW5kZXhTY2FuIGJh dGNoOwogCiAJLyoKLQkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IHR1cGxlIG9uIHRoZSBjdXJyZW50 IHBhZ2U7IG9yIGlmIGRvbmUsIHRyeSB0byByZWFkCi0JICogZGF0YSBmcm9tIHRoZSBuZXh0IG9y IHByZXZpb3VzIHBhZ2UgYmFzZWQgb24gdGhlIHNjYW4gZGlyZWN0aW9uLiBCZWZvcmUKLQkgKiBt b3ZpbmcgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgcGFnZSBtYWtlIHN1cmUgdGhhdCB3ZSBkZWFs IHdpdGggYWxsIHRoZQotCSAqIGtpbGxlZCBpdGVtcy4KKwkgKiBEZXRlcm1pbmUgd2hpY2ggcGFn ZSB0byByZWFkIG5leHQgYmFzZWQgb24gc2NhbiBkaXJlY3Rpb24gYW5kIGRldGFpbHMKKwkgKiB0 YWtlbiBmcm9tIHRoZSBwcmlvciBiYXRjaAogCSAqLwogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKGRpcikpCiAJewotCQlpZiAoKytzby0+Y3VyclBvcy5pdGVtSW5kZXggPiBzby0+Y3VyclBv cy5sYXN0SXRlbSkKLQkJewotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tp bGxfaXRlbXMoc2Nhbik7Ci0KLQkJCWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7Ci0JCQlp ZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKLQkJCXsKLQkJCQlidWYgPSBfaGFzaF9nZXRi dWYocmVsLCBibGtubywgSEFTSF9SRUFELCBMSF9PVkVSRkxPV19QQUdFKTsKLQkJCQlpZiAoIV9o YXNoX3JlYWRwYWdlKHNjYW4sICZidWYsIGRpcikpCi0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsK LQkJCX0KLQkJCWVsc2UKLQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7Ci0JCX0KKwkJYmxrbm8gPSBw cmlvcmJhdGNoLT5uZXh0UGFnZTsKKwkJaWYgKCFCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pIHx8 ICFwcmlvcmJhdGNoLT5tb3JlUmlnaHQpCisJCQlyZXR1cm4gTlVMTDsKIAl9CiAJZWxzZQogCXsK LQkJaWYgKC0tc28tPmN1cnJQb3MuaXRlbUluZGV4IDwgc28tPmN1cnJQb3MuZmlyc3RJdGVtKQot CQl7Ci0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2Fu KTsKLQotCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5wcmV2UGFnZTsKLQkJCWlmIChCbG9ja051bWJl cklzVmFsaWQoYmxrbm8pKQotCQkJewotCQkJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25v LCBIQVNIX1JFQUQsCi0JCQkJCQkJCSAgIExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZFUkZMT1dfUEFH RSk7Ci0KLQkJCQkvKgotCQkJCSAqIFdlIGFsd2F5cyBtYWludGFpbiB0aGUgcGluIG9uIGJ1Y2tl dCBwYWdlIGZvciB3aG9sZSBzY2FuCi0JCQkJICogb3BlcmF0aW9uLCBzbyByZWxlYXNpbmcgdGhl IGFkZGl0aW9uYWwgcGluIHdlIGhhdmUgYWNxdWlyZWQKLQkJCQkgKiBoZXJlLgotCQkJCSAqLwot CQkJCWlmIChidWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCQkJCWJ1ZiA9PSBzby0+ aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCi0JCQkJCV9oYXNoX2Ryb3BidWYocmVsLCBidWYpOwot Ci0JCQkJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAmYnVmLCBkaXIpKQotCQkJCQllbmRfb2Zf c2NhbiA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQl9 CisJCWJsa25vID0gcHJpb3JiYXRjaC0+cHJldlBhZ2U7CisJCWlmICghQmxvY2tOdW1iZXJJc1Zh bGlkKGJsa25vKSB8fCAhcHJpb3JiYXRjaC0+bW9yZUxlZnQpCisJCQlyZXR1cm4gTlVMTDsKIAl9 CiAKLQlpZiAoZW5kX29mX3NjYW4pCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIG5leHQgYmF0Y2gg Ki8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuKTsKKworCS8qIEdldCB0 aGUgYnVmZmVyIGZvciBuZXh0IGJhdGNoICovCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyKSkKKwkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZF UkZMT1dfUEFHRSk7CisJZWxzZQogCXsKLQkJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7Ci0J CUhhc2hTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCXJldHVybiBmYWxzZTsKKwkJ YnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwKKwkJCQkJCSAgIExIX0JV Q0tFVF9QQUdFIHwgTEhfT1ZFUkZMT1dfUEFHRSk7CisKKwkJLyoKKwkJICogV2UgYWx3YXlzIG1h aW50YWluIHRoZSBwaW4gb24gYnVja2V0IHBhZ2UgZm9yIHdob2xlIHNjYW4gb3BlcmF0aW9uLAor CQkgKiBzbyByZWxlYXNpbmcgdGhlIGFkZGl0aW9uYWwgcGluIHdlIGhhdmUgYWNxdWlyZWQgaGVy ZS4KKwkJICovCisJCWlmIChidWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCQlidWYg PT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQorCQkJX2hhc2hfZHJvcGJ1ZihyZWwsIGJ1 Zik7CiAJfQogCi0JLyogT0ssIGl0ZW1JbmRleCBzYXlzIHdoYXQgdG8gcmV0dXJuICovCi0JY3Vy ckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKLQlzY2Fu LT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7CisJLyogUmVhZCB0aGUgbmV4dCBwYWdl IGFuZCBsb2FkIGl0ZW1zIGludG8gYWxsb2NhdGVkIGJhdGNoICovCisJaWYgKCFfaGFzaF9yZWFk cGFnZShzY2FuLCBidWYsIGRpciwgYmF0Y2gpKQorCXsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3Jl bGVhc2Uoc2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLQlyZXR1cm4gdHJ1ZTsK KwkvKiBSZXR1cm4gdGhlIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hlZCBpdGVtcyBmcm9tIG5leHQg cGFnZSAqLworCXJldHVybiBiYXRjaDsKIH0KIAogLyoKQEAgLTI3MCwyMiArMjQ4LDIxIEBAIF9o YXNoX3JlYWRwcmV2KEluZGV4U2NhbkRlc2Mgc2NhbiwKIH0KIAogLyoKLSAqCV9oYXNoX2ZpcnN0 KCkgLS0gRmluZCB0aGUgZmlyc3QgaXRlbSBpbiBhIHNjYW4uCisgKglfaGFzaF9maXJzdCgpIC0t IEZpbmQgdGhlIGZpcnN0IGJhdGNoIG9mIGl0ZW1zIGluIGEgc2Nhbi4KICAqCi0gKgkJV2UgZmlu ZCB0aGUgZmlyc3QgaXRlbSAob3IsIGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBsYXN0IGl0ZW0pIGlu IHRoZQotICoJCWluZGV4IHRoYXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9uIGFzc29jaWF0 ZWQgd2l0aCB0aGUgc2NhbgotICoJCWRlc2NyaXB0b3IuCisgKgkJV2UgZmluZCB0aGUgZmlyc3Qg YmF0Y2ggb2YgaXRlbXMgKG9yLCBpZiBiYWNrd2FyZCBzY2FuLCB0aGUgbGFzdAorICoJCWJhdGNo KSBpbiB0aGUgaW5kZXggdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24gYXNzb2NpYXRl ZCB3aXRoCisgKgkJdGhlIHNjYW4gZGVzY3JpcHRvci4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBl eGl0LCBpZiB0aGUgcGFnZSBjb250YWluaW5nIGN1cnJlbnQgaW5kZXggdHVwbGUgaXMgYW4KLSAq CQlvdmVyZmxvdyBwYWdlLCBib3RoIHBpbiBhbmQgbG9jayBhcmUgcmVsZWFzZWQgd2hlcmVhcyBp ZiBpdCBpcyBhIGJ1Y2tldAotICoJCXBhZ2UgdGhlbiBpdCBpcyBwaW5uZWQgYnV0IG5vdCBsb2Nr ZWQgYW5kIGRhdGEgYWJvdXQgdGhlIG1hdGNoaW5nCi0gKgkJdHVwbGUocykgb24gdGhlIHBhZ2Ug aGFzIGJlZW4gbG9hZGVkIGludG8gc28tPmN1cnJQb3MsCi0gKgkJc2Nhbi0+eHNfaGVhcHRpZCBp cyBzZXQgdG8gdGhlIGhlYXAgVElEIG9mIHRoZSBjdXJyZW50IHR1cGxlLgorICoJCU9uIHN1Y2Nl c3NmdWwgZXhpdCwgcmV0dXJucyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMuCisg KgkJT3RoZXJ3aXNlIHJldHVybnMgTlVMTCwgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBubyBm dXJ0aGVyIG1hdGNoZXMuCisgKgkJTm8gbG9ja3MgYXJlIGV2ZXIgaGVsZCB3aGVuIHdlIHJldHVy bi4KICAqCi0gKgkJT24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyksIHdlIHJldHVybiBm YWxzZSwgd2l0aCBwaW4gaGVsZCBvbgotICoJCWJ1Y2tldCBwYWdlIGJ1dCBubyBwaW5zIG9yIGxv Y2tzIGhlbGQgb24gb3ZlcmZsb3cgcGFnZS4KKyAqCQlXZSBhbHdheXMgcmV0YWluIG91ciBvd24g cGluIG9uIHRoZSBidWNrZXQgcGFnZS4gIFdoZW4gd2UgcmV0dXJuIGEKKyAqCQliYXRjaCB3aXRo IGEgYnVja2V0IHBhZ2UsIGl0IHdpbGwgcmV0YWluIGl0cyBvd24gcmVmZXJlbmNlIHBpbiBpZmYK KyAqCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZSBkZXRlcm1pbmVkIHRoYXQgdGFibGUgQU0g cmVxdWlyZXMgb25lLgogICovCi1ib29sCitCYXRjaEluZGV4U2NhbgogX2hhc2hfZmlyc3QoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBz Y2FuLT5pbmRleFJlbGF0aW9uOwpAQCAtMjk2LDcgKzI3Myw3IEBAIF9oYXNoX2ZpcnN0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJQnVmZmVyCQlidWY7CiAJUGFnZQkJ cGFnZTsKIAlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRl bTsKKwlCYXRjaEluZGV4U2NhbiBiYXRjaDsKIAogCXBnc3RhdF9jb3VudF9pbmRleF9zY2FuKHJl bCk7CiAJaWYgKHNjYW4tPmluc3RydW1lbnQpCkBAIC0zMjYsNyArMzAzLDcgQEAgX2hhc2hfZmly c3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBpdGVtcyBpbiB0 aGUgaW5kZXguCiAJICovCiAJaWYgKGN1ci0+c2tfZmxhZ3MgJiBTS19JU05VTEwpCi0JCXJldHVy biBmYWxzZTsKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIE9rYXkgdG8gY29tcHV0ZSB0aGUg aGFzaCBrZXkuICBXZSB3YW50IHRvIGRvIHRoaXMgYmVmb3JlIGFjcXVpcmluZyBhbnkKQEAgLTQx OSwxOTEgKzM5NiwxNTkgQEAgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKIAkJCV9oYXNoX3JlYWRuZXh0KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVl KTsKIAl9CiAKLQkvKiByZW1lbWJlciB3aGljaCBidWZmZXIgd2UgaGF2ZSBwaW5uZWQsIGlmIGFu eSAqLwotCUFzc2VydChCdWZmZXJJc0ludmFsaWQoc28tPmN1cnJQb3MuYnVmKSk7Ci0Jc28tPmN1 cnJQb3MuYnVmID0gYnVmOworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBmaXJzdCBiYXRjaCAqLwor CWJhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4pOwogCi0JLyogTm93IGZpbmQg YWxsIHRoZSB0dXBsZXMgc2F0aXNmeWluZyB0aGUgcXVhbGlmaWNhdGlvbiBmcm9tIGEgcGFnZSAq LwotCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKLQkJcmV0dXJuIGZhbHNl OworCS8qIFJlYWQgdGhlIGZpcnN0IHBhZ2UgYW5kIGxvYWQgaXRlbXMgaW50byBhbGxvY2F0ZWQg YmF0Y2ggKi8KKwlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sIGJ1ZiwgZGlyLCBiYXRjaCkpCisJ eworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBiYXRjaCk7CisJCXJldHVybiBO VUxMOworCX0KIAotCS8qIE9LLCBpdGVtSW5kZXggc2F5cyB3aGF0IHRvIHJldHVybiAqLwotCWN1 cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0Jc2Nh bi0+eHNfaGVhcHRpZCA9IGN1cnJJdGVtLT5oZWFwVGlkOwotCi0JLyogaWYgd2UncmUgaGVyZSwg X2hhc2hfcmVhZHBhZ2UgZm91bmQgYSB2YWxpZCB0dXBsZXMgKi8KLQlyZXR1cm4gdHJ1ZTsKKwkv KiBSZXR1cm4gdGhlIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hlZCBpdGVtcyAqLworCXJldHVybiBi YXRjaDsKIH0KIAogLyoKLSAqCV9oYXNoX3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3Vy cmVudCBpbmRleCBwYWdlIGludG8gc28tPmN1cnJQb3MKKyAqCV9oYXNoX3JlYWRwYWdlKCkgLS0g TG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gYmF0Y2gKICAqCiAgKglXZSBz Y2FuIGFsbCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgaW5kZXggcGFnZSBhbmQgc2F2ZSB0aGVt IGludG8KLSAqCXNvLT5jdXJyUG9zIGlmIGl0IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbi4g SWYgbm8gbWF0Y2hpbmcgaXRlbXMKKyAqCXRoZSBiYXRjaCBpZiB0aGV5IHNhdGlzZnkgdGhlIHF1 YWxpZmljYXRpb24uIElmIG5vIG1hdGNoaW5nIGl0ZW1zCiAgKglhcmUgZm91bmQgaW4gdGhlIGN1 cnJlbnQgcGFnZSwgd2UgbW92ZSB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlCiAgKglpbiBh IGJ1Y2tldCBjaGFpbiBhcyBpbmRpY2F0ZWQgYnkgdGhlIGRpcmVjdGlvbi4KICAqCiAgKglSZXR1 cm4gdHJ1ZSBpZiBhbnkgbWF0Y2hpbmcgaXRlbXMgYXJlIGZvdW5kIGVsc2UgcmV0dXJuIGZhbHNl LgogICovCiBzdGF0aWMgYm9vbAotX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBC dWZmZXIgKmJ1ZlAsIFNjYW5EaXJlY3Rpb24gZGlyKQorX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBCdWZmZXIgYnVmLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCSAgIEJhdGNoSW5k ZXhTY2FuIGJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJ SGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlCdWZm ZXIJCWJ1ZjsKIAlQYWdlCQlwYWdlOwogCUhhc2hQYWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZzZXRO dW1iZXIgb2ZmbnVtOwogCXVpbnQxNgkJaXRlbUluZGV4OwogCi0JYnVmID0gKmJ1ZlA7CiAJQXNz ZXJ0KEJ1ZmZlcklzVmFsaWQoYnVmKSk7CiAJX2hhc2hfY2hlY2twYWdlKHJlbCwgYnVmLCBMSF9C VUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwogCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1 Zik7CiAJb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAKLQlzby0+Y3VyclBvcy5i dWYgPSBidWY7Ci0Jc28tPmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihi dWYpOworCWJhdGNoLT5idWYgPSBidWY7CisJYmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0Qmxv Y2tOdW1iZXIoYnVmKTsKKwliYXRjaC0+ZGlyID0gZGlyOwogCiAJaWYgKFNjYW5EaXJlY3Rpb25J c0ZvcndhcmQoZGlyKSkKIAl7Ci0JCUJsb2NrTnVtYmVyIHByZXZfYmxrbm8gPSBJbnZhbGlkQmxv Y2tOdW1iZXI7Ci0KIAkJZm9yICg7OykKIAkJewogCQkJLyogbmV3IHBhZ2UsIGxvY2F0ZSBzdGFy dGluZyBwb3NpdGlvbiBieSBiaW5hcnkgc2VhcmNoICovCiAJCQlvZmZudW0gPSBfaGFzaF9iaW5z ZWFyY2gocGFnZSwgc28tPmhhc2hzb19za19oYXNoKTsKIAotCQkJaXRlbUluZGV4ID0gX2hhc2hf bG9hZF9xdWFsaWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIpOworCQkJaXRlbUlu ZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIs CisJCQkJCQkJCQkJCQkgICBiYXRjaCk7CiAKIAkJCWlmIChpdGVtSW5kZXggIT0gMCkKIAkJCQli cmVhazsKIAogCQkJLyoKLQkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMg aW4gdGhlIGN1cnJlbnQgcGFnZSwgbW92ZSB0bwotCQkJICogdGhlIG5leHQgcGFnZS4gQmVmb3Jl IGxlYXZpbmcgdGhlIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueQotCQkJICoga2lsbGVkIGl0 ZW1zLgorCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3Vy cmVudCBwYWdlLCB0cnkgdG8KKwkJCSAqIG1vdmUgdG8gdGhlIG5leHQgcGFnZQogCQkJICovCi0J CQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQot CQkJLyoKLQkJCSAqIElmIHRoaXMgaXMgYSBwcmltYXJ5IGJ1Y2tldCBwYWdlLCBoYXNob19wcmV2 Ymxrbm8gaXMgbm90IGEgcmVhbAotCQkJICogYmxvY2sgbnVtYmVyLgotCQkJICovCi0JCQlpZiAo c28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCXNvLT5jdXJy UG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCi0JCQkJcHJldl9ibGtubyA9 IEludmFsaWRCbG9ja051bWJlcjsKLQkJCWVsc2UKLQkJCQlwcmV2X2Jsa25vID0gb3BhcXVlLT5o YXNob19wcmV2Ymxrbm87Ci0KIAkJCV9oYXNoX3JlYWRuZXh0KHNjYW4sICZidWYsICZwYWdlLCAm b3BhcXVlKTsKLQkJCWlmIChCdWZmZXJJc1ZhbGlkKGJ1ZikpCisJCQlpZiAoIUJ1ZmZlcklzVmFs aWQoYnVmKSkKIAkJCXsKLQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7Ci0JCQkJc28tPmN1cnJQ b3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwotCQkJfQotCQkJZWxzZQot CQkJewotCQkJCS8qCi0JCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlvdXMgYmxvY2sgbnVt YmVycyBmb3Igc2Nyb2xsYWJsZQotCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0aGUgc3RhcnQgcG9z aXRpb24gYW5kIHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1h dGNoaW5nIHR1cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0IHJlc2V0IGN1cnJQ YWdlIG9yIGxzbiwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9raWxsX2l0ZW1zIHRv IGJlIGNhbGxlZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkgKiBmdW5jdGlvbiBy ZXR1cm5zLgotCQkJCSAqLwotCQkJCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gcHJldl9ibGtubzsK LQkJCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKLQkJCQlzby0+ Y3VyclBvcy5idWYgPSBidWY7CisJCQkJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJCQkJ cmV0dXJuIGZhbHNlOwogCQkJfQorCisJCQliYXRjaC0+YnVmID0gYnVmOworCQkJYmF0Y2gtPmN1 cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKIAkJfQogCi0JCXNvLT5jdXJyUG9z LmZpcnN0SXRlbSA9IDA7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsK LQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gMDsKKwkJYmF0Y2gtPmZpcnN0SXRlbSA9IDA7CisJ CWJhdGNoLT5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7CiAJfQogCWVsc2UKIAl7Ci0JCUJsb2Nr TnVtYmVyIG5leHRfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0KIAkJZm9yICg7OykKIAkJ ewogCQkJLyogbmV3IHBhZ2UsIGxvY2F0ZSBzdGFydGluZyBwb3NpdGlvbiBieSBiaW5hcnkgc2Vh cmNoICovCiAJCQlvZmZudW0gPSBfaGFzaF9iaW5zZWFyY2hfbGFzdChwYWdlLCBzby0+aGFzaHNv X3NrX2hhc2gpOwogCi0JCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhz Y2FuLCBwYWdlLCBvZmZudW0sIGRpcik7CisJCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxp ZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpciwKKwkJCQkJCQkJCQkJCSAgIGJhdGNo KTsKIAogCQkJaWYgKGl0ZW1JbmRleCAhPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UpCiAJCQkJYnJl YWs7CiAKIAkJCS8qCi0JCQkgKiBDb3VsZCBub3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGlu IHRoZSBjdXJyZW50IHBhZ2UsIG1vdmUgdG8KLQkJCSAqIHRoZSBwcmV2aW91cyBwYWdlLiBCZWZv cmUgbGVhdmluZyB0aGUgY3VycmVudCBwYWdlLCBkZWFsIHdpdGgKLQkJCSAqIGFueSBraWxsZWQg aXRlbXMuCisJCQkgKiBDb3VsZCBub3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBj dXJyZW50IHBhZ2UsIHRyeSB0bworCQkJICogbW92ZSB0byB0aGUgcHJldmlvdXMgcGFnZQogCQkJ ICovCi0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2Fu KTsKLQotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwK LQkJCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJ CW5leHRfYmxrbm8gPSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsKLQogCQkJX2hhc2hfcmVhZHBy ZXYoc2NhbiwgJmJ1ZiwgJnBhZ2UsICZvcGFxdWUpOwotCQkJaWYgKEJ1ZmZlcklzVmFsaWQoYnVm KSkKKwkJCWlmICghQnVmZmVySXNWYWxpZChidWYpKQogCQkJewotCQkJCXNvLT5jdXJyUG9zLmJ1 ZiA9IGJ1ZjsKLQkJCQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVy KGJ1Zik7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBSZW1lbWJlciBuZXh0 IGFuZCBwcmV2aW91cyBibG9jayBudW1iZXJzIGZvciBzY3JvbGxhYmxlCi0JCQkJICogY3Vyc29y cyB0byBrbm93IHRoZSBzdGFydCBwb3NpdGlvbiBhbmQgcmV0dXJuIGZhbHNlCi0JCQkJICogaW5k aWNhdGluZyB0aGF0IG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIHdlcmUgZm91bmQuIEFsc28sCi0J CQkJICogZG9uJ3QgcmVzZXQgY3VyclBhZ2Ugb3IgbHNuLCBiZWNhdXNlIHdlIGV4cGVjdAotCQkJ CSAqIF9oYXNoX2tpbGxfaXRlbXMgdG8gYmUgY2FsbGVkIGZvciB0aGUgb2xkIHBhZ2UgYWZ0ZXIg dGhpcwotCQkJCSAqIGZ1bmN0aW9uIHJldHVybnMuCi0JCQkJICovCi0JCQkJc28tPmN1cnJQb3Mu cHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2Ug PSBuZXh0X2Jsa25vOwotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+YnVm ID0gSW52YWxpZEJ1ZmZlcjsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CisKKwkJCWJhdGNoLT5i dWYgPSBidWY7CisJCQliYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYp OwogCQl9CiAKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVtID0gaXRlbUluZGV4OwotCQlzby0+Y3Vy clBvcy5sYXN0SXRlbSA9IE1heEluZGV4VHVwbGVzUGVyUGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9z Lml0ZW1JbmRleCA9IE1heEluZGV4VHVwbGVzUGVyUGFnZSAtIDE7CisJCWJhdGNoLT5maXJzdEl0 ZW0gPSBpdGVtSW5kZXg7CisJCWJhdGNoLT5sYXN0SXRlbSA9IE1heEluZGV4VHVwbGVzUGVyUGFn ZSAtIDE7CiAJfQogCi0JaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9i dWYgfHwKLQkJc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikK KwkvKgorCSAqIFNhdmVkIGF0IGxlYXN0IG9uZSBtYXRjaCBpbiBiYXRjaC5pdGVtc1tdLiAgUHJl cGFyZSBmb3IgaGFzaGdldGJhdGNoIHRvCisJICogcmV0dXJuIGl0IGJ5IGluaXRpYWxpemluZyBy ZW1haW5pbmcgdW5pbml0aWFsaXplZCBmaWVsZHMuCisJICovCisJaWYgKGJhdGNoLT5idWYgPT0g c28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCWJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19zcGxp dF9idWNrZXRfYnVmKQogCXsKLQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tO dW1iZXI7Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87 Ci0JCUxvY2tCdWZmZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkv KgorCQkgKiBCYXRjaCdzIGJ1ZmZlciBpcyBlaXRoZXIgdGhlIHByaW1hcnkgYnVja2V0LCBvciBh IGJ1Y2tldCBiZWluZworCQkgKiBwb3B1bGF0ZWQgZHVlIHRvIGEgc3BsaXQuCisJCSAqCisJCSAq IEluY3JlbWVudCBsb2NhbCByZWZlcmVuY2UgY291bnQgc28gdGhhdCBiYXRjaCBnZXRzIGFuIGlu ZGVwZW5kZW50CisJCSAqIGJ1ZmZlciByZWZlcmVuY2UgdGhhdCBjYW4gYmUgcmVsZWFzZWQgKGJ5 IGhhc2hmcmVlYmF0Y2gpIGJlZm9yZSB0aGUKKwkJICogaGFzaHNvX2J1Y2tldF9idWYvaGFzaHNv X3NwbGl0X2J1Y2tldF9idWYgcmVmZXJlbmNlcyBhcmUgcmVsZWFzZWQuCisJCSAqLworCQlJbmNy QnVmZmVyUmVmQ291bnQoYmF0Y2gtPmJ1Zik7CisKKwkJLyogQ2FuIG9ubHkgdXNlIG9wYXF1ZS0+ aGFzaG9fbmV4dGJsa25vICovCisJCWJhdGNoLT5wcmV2UGFnZSA9IEludmFsaWRCbG9ja051bWJl cjsKKwkJYmF0Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87CiAJfQogCWVs c2UKIAl7Ci0JCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVlLT5oYXNob19wcmV2Ymxrbm87 Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87Ci0JCV9o YXNoX3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXNvLT5jdXJyUG9zLmJ1ZiA9IElu dmFsaWRCdWZmZXI7CisJCS8qIENhbiB1c2Ugb3BhcXVlLT5oYXNob19wcmV2Ymxrbm8gYW5kIG9w YXF1ZS0+aGFzaG9fbmV4dGJsa25vICovCisJCWJhdGNoLT5wcmV2UGFnZSA9IG9wYXF1ZS0+aGFz aG9fcHJldmJsa25vOworCQliYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25leHRibGtu bzsKIAl9CiAKLQlBc3NlcnQoc28tPmN1cnJQb3MuZmlyc3RJdGVtIDw9IHNvLT5jdXJyUG9zLmxh c3RJdGVtKTsKKwliYXRjaC0+bW9yZUxlZnQgPSBCbG9ja051bWJlcklzVmFsaWQoYmF0Y2gtPnBy ZXZQYWdlKTsKKwliYXRjaC0+bW9yZVJpZ2h0ID0gQmxvY2tOdW1iZXJJc1ZhbGlkKGJhdGNoLT5u ZXh0UGFnZSk7CisKKwkvKiBVbmxvY2sgKGFuZCBsaWtlbHkgdW5waW4pIGJ1ZmZlciwgcGVyIGFt Z2V0YmF0Y2ggY29udHJhY3QgKi8KKwlpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKHNjYW4sIGJh dGNoKTsKKworCUFzc2VydChiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CiAJ cmV0dXJuIHRydWU7CiB9CiAKIC8qCiAgKiBMb2FkIGFsbCB0aGUgcXVhbGlmaWVkIGl0ZW1zIGZy b20gYSBjdXJyZW50IGluZGV4IHBhZ2UKLSAqIGludG8gc28tPmN1cnJQb3MuIEhlbHBlciBmdW5j dGlvbiBmb3IgX2hhc2hfcmVhZHBhZ2UuCisgKiBpbnRvIGJhdGNoLiBIZWxwZXIgZnVuY3Rpb24g Zm9yIF9oYXNoX3JlYWRwYWdlLgogICovCiBzdGF0aWMgaW50CiBfaGFzaF9sb2FkX3F1YWxpZmll ZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKLQkJCQkJCSAgIE9mZnNldE51 bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQorCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9m Zm51bSwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkgICBCYXRjaEluZGV4U2NhbiBiYXRjaCkK IHsKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwog CUluZGV4VHVwbGUJaXR1cDsKQEAgLTY0MCw3ICs1ODUsNyBAQCBfaGFzaF9sb2FkX3F1YWxpZmll ZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKIAkJCQlfaGFzaF9jaGVja3F1 YWwoc2NhbiwgaXR1cCkpCiAJCQl7CiAJCQkJLyogdHVwbGUgaXMgcXVhbGlmaWVkLCBzbyByZW1l bWJlciBpdCAqLwotCQkJCV9oYXNoX3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1 cCk7CisJCQkJX2hhc2hfc2F2ZWl0ZW0oYmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsK IAkJCQlpdGVtSW5kZXgrKzsKIAkJCX0KIAkJCWVsc2UKQEAgLTY4Nyw3ICs2MzIsNyBAQCBfaGFz aF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKIAkJ CXsKIAkJCQlpdGVtSW5kZXgtLTsKIAkJCQkvKiB0dXBsZSBpcyBxdWFsaWZpZWQsIHNvIHJlbWVt YmVyIGl0ICovCi0JCQkJX2hhc2hfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVw KTsKKwkJCQlfaGFzaF9zYXZlaXRlbShiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOwog CQkJfQogCQkJZWxzZQogCQkJewpAQCAtNzA2LDEzICs2NTEsMTUgQEAgX2hhc2hfbG9hZF9xdWFs aWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJfQogfQogCi0vKiBT YXZlIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdICovCisv KiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBiYXRjaC0+aXRlbXNbaXRlbUluZGV4XSAqLwogc3Rh dGljIGlubGluZSB2b2lkCi1faGFzaF9zYXZlaXRlbShIYXNoU2Nhbk9wYXF1ZSBzbywgaW50IGl0 ZW1JbmRleCwKK19oYXNoX3NhdmVpdGVtKEJhdGNoSW5kZXhTY2FuIGJhdGNoLCBpbnQgaXRlbUlu ZGV4LAogCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKQogewotCUhh c2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsK KwlCYXRjaE1hdGNoaW5nSXRlbSAqY3Vyckl0ZW0gPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07 CiAKIAljdXJySXRlbS0+aGVhcFRpZCA9IGl0dXAtPnRfdGlkOwogCWN1cnJJdGVtLT5pbmRleE9m ZnNldCA9IG9mZm51bTsKKwljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSAwOworCWN1cnJJdGVtLT5h bGxWaXNpYmxlID0gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNodXRpbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwppbmRleCBj ZjdmMGI5MDEuLmY5OTEwNWQzYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaHV0aWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jCkBAIC01 MTAsODEgKzUxMCw4NCBAQCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xkYnVja2V0KFJlbGF0 aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQsCiAgKiBfaGFzaF9raWxsX2l0ZW1zIC0gc2V0IExQ X0RFQUQgc3RhdGUgZm9yIGl0ZW1zIGFuIGluZGV4c2NhbiBjYWxsZXIgaGFzCiAgKiB0b2xkIHVz IHdlcmUga2lsbGVkLgogICoKLSAqIHNjYW4tPm9wYXF1ZSwgcmVmZXJlbmNlZCBsb2NhbGx5IHRo cm91Z2ggc28sIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICogY3VycmVudCBwYWdl IGFuZCBraWxsZWQgdHVwbGVzIHRoZXJlb24gKGdlbmVyYWxseSwgdGhpcyBzaG91bGQgb25seSBi ZQotICogY2FsbGVkIGlmIHNvLT5udW1LaWxsZWQgPiAwKS4KKyAqIFRoZSBiYXRjaCBwYXJhbWV0 ZXIgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVk CisgKiB0dXBsZXMgdGhlcmVvbiAodGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgYmF0Y2gt Pm51bUtpbGxlZCA+IDApLgogICoKLSAqIFRoZSBjYWxsZXIgZG9lcyBub3QgaGF2ZSBhIGxvY2sg b24gdGhlIHBhZ2UgYW5kIG1heSBvciBtYXkgbm90IGhhdmUgdGhlCi0gKiBwYWdlIHBpbm5lZCBp biBhIGJ1ZmZlci4gIE5vdGUgdGhhdCByZWFkLWxvY2sgaXMgc3VmZmljaWVudCBmb3Igc2V0dGlu ZwotICogTFBfREVBRCBzdGF0dXMgKHdoaWNoIGlzIG9ubHkgYSBoaW50KS4KKyAqIENhbGxlciBz aG91bGQgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBiYXRjaCBwb3NpdGlvbidzIHBhZ2UsIGJ1dCBt dXN0IGhvbGQgYQorICogYnVmZmVyIHBpbiB3aGVuICFkcm9wUGluLiAgV2hlbiB3ZSByZXR1cm4s IGl0IHN0aWxsIHdvbid0IGJlIGxvY2tlZC4gIEl0J2xsCisgKiBjb250aW51ZSB0byBob2xkIHdo YXRldmVyIHBpbnMgd2VyZSBoZWxkIGJlZm9yZSBjYWxsaW5nIGhlcmUuCiAgKgotICogVGhlIGNh bGxlciBtdXN0IGhhdmUgcGluIG9uIGJ1Y2tldCBidWZmZXIsIGJ1dCBtYXkgb3IgbWF5IG5vdCBo YXZlIHBpbgotICogb24gb3ZlcmZsb3cgYnVmZmVyLCBhcyBpbmRpY2F0ZWQgYnkgSGFzaFNjYW5Q b3NJc1Bpbm5lZChzby0+Y3VyclBvcykuCi0gKgotICogV2UgbWF0Y2ggaXRlbXMgYnkgaGVhcCBU SUQgYmVmb3JlIGFzc3VtaW5nIHRoZXkgYXJlIHRoZSByaWdodCBvbmVzIHRvCi0gKiBkZWxldGUu Ci0gKgotICogVGhlcmUgYXJlIG5ldmVyIGFueSBzY2FucyBhY3RpdmUgaW4gYSBidWNrZXQgYXQg dGhlIHRpbWUgVkFDVVVNIGJlZ2lucywKLSAqIGJlY2F1c2UgVkFDVVVNIHRha2VzIGEgY2xlYW51 cCBsb2NrIG9uIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlIGFuZCBzY2FucwotICogaG9sZCBhIHBp bi4gIEEgc2NhbiBjYW4gYmVnaW4gYWZ0ZXIgVkFDVVVNIGxlYXZlcyB0aGUgcHJpbWFyeSBidWNr ZXQgcGFnZQotICogYnV0IGJlZm9yZSBpdCBmaW5pc2hlcyB0aGUgZW50aXJlIGJ1Y2tldCwgYnV0 IGl0IGNhbiBuZXZlciBwYXNzIFZBQ1VVTSwKLSAqIGJlY2F1c2UgVkFDVVVNIGFsd2F5cyBsb2Nr cyB0aGUgbmV4dCBwYWdlIGJlZm9yZSByZWxlYXNpbmcgdGhlIGxvY2sgb24KLSAqIHRoZSBwcmV2 aW91cyBvbmUuICBUaGVyZWZvcmUsIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgYWNjaWRl bnRhbGx5Ci0gKiBraWxsaW5nIGEgVElEIHRoYXQgaGFzIGJlZW4gcmV1c2VkIGZvciBhbiB1bnJl bGF0ZWQgdHVwbGUuCisgKiBXZSBtYXRjaCBpdGVtcyBieSBoZWFwIFRJRCBiZWZvcmUgYXNzdW1p bmcgdGhleSBhcmUgdGhlIHJpZ2h0IG9uZXMgdG8gc2V0CisgKiBMUF9ERUFELiAgSWYgdGhlIHNj YW4gaXMgb25lIHRoYXQgaG9sZHMgYSBidWZmZXIgcGluIG9uIHRoZSB0YXJnZXQgcGFnZQorICog Y29udGludW91c2x5IGZyb20gaW5pdGlhbGx5IHJlYWRpbmcgdGhlIGl0ZW1zIHVudGlsIGFwcGx5 aW5nIHRoaXMgZnVuY3Rpb24KKyAqIChpZiBpdCBpcyBhICFkcm9wUGluIHNjYW4pLCBWQUNVVU0g Y2Fubm90IGhhdmUgZGVsZXRlZCBhbnkgaXRlbXMgb24gdGhlCisgKiBwYWdlLCBzbyB0aGUgcGFn ZSdzIFRJRHMgY2FuJ3QgaGF2ZSBiZWVuIHJlY3ljbGVkIGJ5IG5vdy4gIFRoZXJlJ3Mgbm8gcmlz aworICogdGhhdCB3ZSdsbCBjb25mdXNlIGEgbmV3IGluZGV4IHR1cGxlIHRoYXQgaGFwcGVucyB0 byB1c2UgYSByZWN5Y2xlZCBUSUQKKyAqIHdpdGggYSBub3ctcmVtb3ZlZCB0dXBsZSB3aXRoIHRo ZSBzYW1lIFRJRCAodGhhdCB1c2VkIHRvIGJlIG9uIHRoaXMgc2FtZQorICogcGFnZSkuICBXZSBj YW4ndCByZWx5IG9uIHRoYXQgZHVyaW5nIHNjYW5zIHRoYXQgZHJvcCBidWZmZXIgcGlucyBlYWdl cmx5CisgKiAoaS5lLiBkcm9wUGluIHNjYW5zKSwgdGhvdWdoLCBzbyB3ZSBtdXN0IGNvbmRpdGlv biBzZXR0aW5nIExQX0RFQUQgYml0cyBvbgorICogdGhlIHBhZ2UgTFNOIGhhdmluZyBub3QgY2hh bmdlZCBzaW5jZSBiYWNrIHdoZW4gX2hhc2hfcmVhZHBhZ2Ugc2F3IHRoZSBwYWdlLgorICogV2Ug dG90YWxseSBnaXZlIHVwIG9uIHNldHRpbmcgTFBfREVBRCBiaXRzIHdoZW4gdGhlIHBhZ2UgTFNO IGNoYW5nZWQuCiAgKi8KIHZvaWQKLV9oYXNoX2tpbGxfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2Fu KQorX2hhc2hfa2lsbF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJh dGNoKQogewotCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFx dWU7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCbG9ja051bWJlciBi bGtubzsKIAlCdWZmZXIJCWJ1ZjsKIAlQYWdlCQlwYWdlOwogCUhhc2hQYWdlT3BhcXVlIG9wYXF1 ZTsKIAlPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCW1heG9mZjsKLQlpbnQJCQludW1LaWxsZWQg PSBzby0+bnVtS2lsbGVkOwotCWludAkJCWk7CiAJYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFs c2U7Ci0JYm9vbAkJaGF2ZVBpbiA9IGZhbHNlOwogCi0JQXNzZXJ0KHNvLT5udW1LaWxsZWQgPiAw KTsKLQlBc3NlcnQoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpOwotCUFzc2VydChIYXNoU2NhblBv c0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKKwlBc3NlcnQoYmF0Y2gtPm51bUtpbGxlZCA+IDApOwor CUFzc2VydChiYXRjaC0+a2lsbGVkSXRlbXMgIT0gTlVMTCk7CisJQXNzZXJ0KEJsb2NrTnVtYmVy SXNWYWxpZChiYXRjaC0+Y3VyclBhZ2UpKTsKIAotCS8qCi0JICogQWx3YXlzIHJlc2V0IHRoZSBz Y2FuIHN0YXRlLCBzbyB3ZSBkb24ndCBsb29rIGZvciBzYW1lIGl0ZW1zIG9uIG90aGVyCi0JICog cGFnZXMuCi0JICovCi0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KLQlibGtubyA9IHNvLT5jdXJyUG9z LmN1cnJQYWdlOwotCWlmIChIYXNoU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSkKKwlpZiAo IXNjYW4tPmRyb3BQaW4pCiAJewogCQkvKgotCQkgKiBXZSBhbHJlYWR5IGhhdmUgcGluIG9uIHRo aXMgYnVmZmVyLCBzbywgYWxsIHdlIG5lZWQgdG8gZG8gaXMKLQkJICogYWNxdWlyZSBsb2NrIG9u IGl0LgorCQkgKiBXZSBoYXZlIGhlbGQgdGhlIHBpbiBvbiB0aGlzIHBhZ2Ugc2luY2Ugd2UgcmVh ZCB0aGUgaW5kZXggdHVwbGVzLAorCQkgKiBzbyBhbGwgd2UgbmVlZCB0byBkbyBpcyBsb2NrIGl0 LiAgVGhlIHBpbiB3aWxsIGhhdmUgcHJldmVudGVkCisJCSAqIGNvbmN1cnJlbnQgVkFDVVVNcyBm cm9tIHJlY3ljbGluZyBhbnkgb2YgdGhlIFRJRHMgb24gdGhlIHBhZ2UuCiAJCSAqLwotCQloYXZl UGluID0gdHJ1ZTsKLQkJYnVmID0gc28tPmN1cnJQb3MuYnVmOworCQlidWYgPSBiYXRjaC0+YnVm OwogCQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOwogCX0KIAllbHNlCi0JCWJ1 ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0Up OworCXsKKwkJWExvZ1JlY1B0cglsYXRlc3Rsc247CisKKwkJQXNzZXJ0KFJlbGF0aW9uTmVlZHNX QUwocmVsKSk7CisJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJhdGNoLT5jdXJyUGFnZSwgSEFT SF9SRUFELAorCQkJCQkJICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKKwor CQlsYXRlc3Rsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVmKTsKKwkJQXNzZXJ0KGJhdGNoLT5s c24gPD0gbGF0ZXN0bHNuKTsKKwkJaWYgKGJhdGNoLT5sc24gIT0gbGF0ZXN0bHNuKQorCQl7CisJ CQkvKiBNb2RpZmllZCwgZ2l2ZSB1cCBvbiBoaW50aW5nICovCisJCQlfaGFzaF9yZWxidWYocmVs LCBidWYpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyogVW5tb2RpZmllZCwgaGludGluZyBpcyBz YWZlICovCisJfQogCiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKIAlvcGFxdWUgPSBIYXNo UGFnZUdldE9wYXF1ZShwYWdlKTsKIAltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBh Z2UpOwogCi0JZm9yIChpID0gMDsgaSA8IG51bUtpbGxlZDsgaSsrKQorCS8qIEl0ZXJhdGUgdGhy b3VnaCBiYXRjaC0+a2lsbGVkSXRlbXNbXSBpbiBpbmRleCBwYWdlIG9yZGVyICovCisJZm9yIChp bnQgaSA9IDA7IGkgPCBiYXRjaC0+bnVtS2lsbGVkOyBpKyspCiAJewotCQlpbnQJCQlpdGVtSW5k ZXggPSBzby0+a2lsbGVkSXRlbXNbaV07Ci0JCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAm c28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwkJaW50CQkJaXRlbUluZGV4ID0gYmF0Y2gt PmtpbGxlZEl0ZW1zW2ldOworCQlCYXRjaE1hdGNoaW5nSXRlbSAqY3Vyckl0ZW0gPSAmYmF0Y2gt Pml0ZW1zW2l0ZW1JbmRleF07CiAKIAkJb2ZmbnVtID0gY3Vyckl0ZW0tPmluZGV4T2Zmc2V0Owog Ci0JCUFzc2VydChpdGVtSW5kZXggPj0gc28tPmN1cnJQb3MuZmlyc3RJdGVtICYmCi0JCQkgICBp dGVtSW5kZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCQlBc3NlcnQoaXRlbUluZGV4ID49 IGJhdGNoLT5maXJzdEl0ZW0gJiYKKwkJCSAgIGl0ZW1JbmRleCA8PSBiYXRjaC0+bGFzdEl0ZW0p OwogCiAJCXdoaWxlIChvZmZudW0gPD0gbWF4b2ZmKQogCQl7CkBAIC02MTMsOSArNjE2LDggQEAg X2hhc2hfa2lsbF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCU1hcmtCdWZmZXJEaXJ0eUhp bnQoYnVmLCB0cnVlKTsKIAl9CiAKLQlpZiAoc28tPmhhc2hzb19idWNrZXRfYnVmID09IHNvLT5j dXJyUG9zLmJ1ZiB8fAotCQloYXZlUGluKQotCQlMb2NrQnVmZmVyKHNvLT5jdXJyUG9zLmJ1Ziwg QlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwlpZiAoIXNjYW4tPmRyb3BQaW4pCisJCUxvY2tCdWZmZXIo YnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOwogCWVsc2UKIAkJX2hhc2hfcmVsYnVmKHJlbCwgYnVm KTsKIH0KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggZDI1YmEzNDEyLi4zMTczYjMzMzAg MTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMTk1LDggKzExOTUsNiBAQCBIYXNoUGFn ZVN0YXQKIEhhc2hQYXRoCiBIYXNoU2Nhbk9wYXF1ZQogSGFzaFNjYW5PcGFxdWVEYXRhCi1IYXNo U2NhblBvc0RhdGEKLUhhc2hTY2FuUG9zSXRlbQogSGFzaFNrZXdCdWNrZXQKIEhhc2hTdGF0ZQog SGFzaFZhbHVlRnVuYwotLSAKMi41MS4wCgo= --000000000000d0029506484af358 Content-Type: application/octet-stream; name="v7-0002-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Disposition: attachment; filename="v7-0002-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkd1epew3 RnJvbSAwMmFiNjA1M2Q5ZWE2NGI0NmE2OWE1NWZlMTk3NTI2ZDBjOTU5NTZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTUgTm92IDIwMjUgMTQ6MDM6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHY3IDIvNF0gQWRk IHByZWZldGNoaW5nIHRvIGluZGV4IHNjYW5zIHVzaW5nIGJhdGNoIGludGVyZmFjZXMuCgpUaGlz IGNvbW1pdCBpbXBsZW1lbnRzIEkvTyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMsIG1hZGUg cG9zc2libGUgYnkKdGhlIHJlY2VudCBhZGRpdGlvbiBvZiBiYXRjaGluZyBpbnRlcmZhY2VzIHRv IGJvdGggdGhlIHRhYmxlIEFNIGFuZAppbmRleCBBTSBBUElzLgoKVGhlIGFtZ2V0YmF0Y2ggaW5k ZXggQU0gaW50ZXJmYWNlIHByb3ZpZGVzIGJhdGNoZXMgb2YgVElEcyAocmF0aGVyIHRoYW4Kb25l IGF0IGEgdGltZSkgZnJvbSBhIHNpbmdsZSBpbmRleCBsZWFmIHBhZ2UsIGFuZCBhbGxvd3MgbXVs dGlwbGUKYmF0Y2hlcyB0byBiZSBoZWxkIGluIG1lbW9yeS9waW5uZWQgc2ltdWx0YW5lb3VzbHku ICBUaGlzIGdpdmVzIHRoZQp0YWJsZSBBTSB0aGUgZnJlZWRvbSB0byByZWFkYWhlYWQgd2l0aGlu IGFuIGluZGV4IHNjYW4sIHdoaWNoIGlzIGNydWNpYWwKZm9yIEkvTyBwcmVmZXRjaGluZyB3aXRo IGNlcnRhaW4gd29ya2xvYWRzICh3b3JrbG9hZHMgdGhhdCB3b3VsZApvdGhlcndpc2UgYmUgdW5h YmxlIHRvIGtlZXAgYSBzdWZmaWNpZW50bHkgaGlnaCBwcmVmZXRjaCBkaXN0YW5jZSBmb3IKaGVh cCBibG9jayBJL08pLiAgUHJlZmV0Y2hpbmcgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSByZWFkIHN0 cmVhbSB1bmRlcgp0aGUgY29udHJvbCBvZiB0aGUgdGFibGUgQU0uCgpYWFggV2hlbiB0aGUgYmF0 Y2ggcmluZyBidWZmZXIgcmVhY2hlcyBjYXBhY2l0eSwgdGhlIHN0cmVhbSBwYXVzZXMgdW50aWwK dGhlIHNjYW4gY2F0Y2hlcyB1cCBhbmQgZnJlZXMgc29tZSBiYXRjaGVzLiAgV2UgbmVlZCBhIG1v cmUgcHJpbmNpcGxlZAphcHByb2FjaCBoZXJlLiAgRXNzZW50aWFsbHksIHdlIG5lZWQgaW5mcmFz dHJ1Y3R1cmUgdGhhdCBhbGxvd3MgYSByZWFkCnN0cmVhbSBjYWxsIGJhY2sgdG8gdGVsbCB0aGUg cmVhZCBzdHJlYW0gdG8gdGVtcG9yYXJpbHkgeWllbGQgd2l0aG91dCBpdApmdWxseSBlbmRpbmcv cmVzZXR0aW5nIHRoZSByZWFkIHN0cmVhbS4KCkF1dGhvcjogVG9tYXMgVm9uZHJhIDx0b21hc0B2 b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1C eTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpSZXZpZXdlZC1CeTogVGhvbWFz IE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01MjQ4LTUwMDBiODk0ZWJhYkBlbnRlcnByaXNlZGIu Y29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICAgICAgICAgIHwg IDQxICsrLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCAgICAgICAgICAgICAgICAgIHwg ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgICB8IDMz MCArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMg ICAgICAgICAgICB8ICAxMCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2gu YyAgICAgICAgIHwgIDE3ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5j ICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyAg ICAgICAgIHwgIDE0ICstCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRh dCAgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2Ft cGxlIHwgICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0ICAgICAg ICB8ICAgMyArLQogMTAgZmlsZXMgY2hhbmdlZCwgNDE4IGluc2VydGlvbnMoKyksIDcgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggY2ExMjA3YmU2Li5hNTE3YWJlMDggMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3JlbHNjYW4uaApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1h cC5oIgogI2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmLmgi CisjaW5jbHVkZSAic3RvcmFnZS9yZWFkX3N0cmVhbS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVs ZmlsZWxvY2F0b3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKICNpbmNsdWRlICJ1dGls cy9yZWxjYWNoZS5oIgpAQCAtMTI0LDYgKzEyNSw3IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVs QmxvY2tUYWJsZVNjYW5Xb3JrZXJEYXRhICpQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyOwog dHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQogewogCVJlbGF0aW9uCXJlbDsKKwlS ZWFkU3RyZWFtICpyczsKIH0gSW5kZXhGZXRjaFRhYmxlRGF0YTsKIAogLyoKQEAgLTIyMSw4ICsy MjMsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgQmF0Y2hJbmRleFNjYW5EYXRhICpCYXRjaEluZGV4U2Nh bjsKICAqIE1heGltdW0gbnVtYmVyIG9mIGJhdGNoZXMgKGxlYWYgcGFnZXMpIHdlIGNhbiBrZWVw IGluIG1lbW9yeS4gIFdlIG5lZWQgYQogICogbWluaW11bSBvZiB0d28sIHNpbmNlIHdlJ2xsIG9u bHkgY29uc2lkZXIgcmVsZWFzaW5nIG9uZSBiYXRjaCB3aGVuIGFub3RoZXIKICAqIGlzIHJlYWQu CisgKgorICogVGhlIGNob2ljZSBvZiA2NCBiYXRjaGVzIGlzIGFyYml0cmFyeS4gIEl0J3MgYWJv dXQgMU1CIG9mIGRhdGEgd2l0aCA4S0IKKyAqIHBhZ2VzICg1MTJrQiBmb3IgcGFnZXMsIGFuZCB0 aGVuIGEgYml0IG9mIG92ZXJoZWFkKS4gV2Ugc2hvdWxkIG5vdCByZWFsbHkKKyAqIG5lZWQgdGhp cyBtYW55IGJhdGNoZXMgaW4gbW9zdCBjYXNlcywgdGhvdWdoLiBUaGUgcmVhZCBzdHJlYW0gbG9v a3MgYWhlYWQKKyAqIGp1c3QgZW5vdWdoIHRvIHF1ZXVlIGVub3VnaCBJT3MsIGFkanVzdGluZyB0 aGUgZGlzdGFuY2UgKFRJRHMsIGJ1dAorICogdWx0aW1hdGVseSB0aGUgbnVtYmVyIG9mIGZ1dHVy ZSBiYXRjaGVzKSB0byBtZWV0IHRoYXQuCiAgKi8KLSNkZWZpbmUgSU5ERVhfU0NBTl9NQVhfQkFU Q0hFUwkJMgorI2RlZmluZSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTCQk2NAogI2RlZmluZSBJTkRF WF9TQ0FOX0NBQ0hFX0JBVENIRVMJMgogI2RlZmluZSBJTkRFWF9TQ0FOX0JBVENIX0NPVU5UKHNj YW4pIFwKIAkoKHNjYW4pLT5yaW5nYnVmLT5uZXh0QmF0Y2ggLSAoc2NhbiktPnJpbmdidWYtPmhl YWRCYXRjaCkKQEAgLTI3MCwxNSArMjc4LDQ2IEBAIHR5cGVkZWYgc3RydWN0IEJhdGNoSW5kZXhT Y2FuRGF0YSAqQmF0Y2hJbmRleFNjYW47CiAgKiBtYXRjaGVzIGluLiAgSG93ZXZlciwgdGFibGUg QU1zIGFyZSBmcmVlIHRvIGZldGNoIHRhYmxlIHR1cGxlcyBpbiB3aGF0ZXZlcgogICogb3JkZXIg aXMgbW9zdCBjb252ZW5pZW50L2VmZmljaWVudCAtLSBwcm92aWRlZCB0aGF0IHN1Y2ggcmVvcmRl cmluZyBjYW5ub3QKICAqIGFmZmVjdCB0aGUgb3JkZXIgdGhhdCB0YWJsZV9pbmRleF9nZXRuZXh0 X3Nsb3QgbGF0ZXIgcmV0dXJucyB0dXBsZXMgaW4uCisgKgorICogVGhpcyBkYXRhIHN0cnVjdHVy ZSBhbHNvIHByb3ZpZGVzIHRhYmxlIEFNcyB3aXRoIGEgd2F5IHRvIHJlYWQgYWhlYWQgb2YgdGhl CisgKiBjdXJyZW50IHJlYWQgcG9zaXRpb24gYnkgX211bHRpcGxlXyBiYXRjaGVzL2luZGV4IHBh Z2VzLiAgVGhlIGZ1cnRoZXIgb3V0CisgKiB0aGUgdGFibGUgQU0gcmVhZHMgYWhlYWQgbGlrZSB0 aGlzLCB0aGUgZnVydGhlciBpdCBjYW4gc2VlIGludG8gdGhlIGZ1dHVyZS4KKyAqIFRoYXQgd2F5 IHRoZSB0YWJsZSBBTSBpcyBhYmxlIHRvIHJlb3JkZXIgd29yayBhcyBhZ2dyZXNzaXZlbHkgYXMg ZGVzaXJlZC4KKyAqIEZvciBleGFtcGxlLCBpbmRleCBzY2FucyBzb21ldGltZXMgbmVlZCB0byBy ZWFkYWhlYWQgYnkgYXMgbWFueSBhcyBhIGZldworICogZG96ZW4gYW1nZXRiYXRjaCBiYXRjaGVz IGluIG9yZGVyIHRvIG1haW50YWluIGFuIG9wdGltYWwgSS9PIHByZWZldGNoCisgKiBkaXN0YW5j ZSAoZGlzdGFuY2UgZm9yIHJlYWRpbmcgdGFibGUgYmxvY2tzL2ZldGNoaW5nIHRhYmxlIHR1cGxl cykuCiAgKi8KIHR5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0J1ZmZlcgogeworCWJvb2wJCXJlc2V0 OworCisJLyoKKwkgKiBEaWQgd2UgZGlzYWJsZSBwcmVmZXRjaGluZy91c2Ugb2YgYSByZWFkIHN0 cmVhbSBiZWNhdXNlIGl0IGRpZG4ndCBwYXkKKwkgKiBmb3IgaXRzZWxmPworCSAqLworCWJvb2wJ CXByZWZldGNoaW5nTG9ja2VkSW47CisJYm9vbAkJZGlzYWJsZWQ7CisKKwkvKgorCSAqIER1cmlu ZyBwcmVmZXRjaGluZywgY3VycmVudFByZWZldGNoQmxvY2sgaXMgdGhlIHRhYmxlIEFNIGJsb2Nr IG51bWJlcgorCSAqIHRoYXQgd2FzIHJldHVybmVkIGJ5IG91ciByZWFkIHN0cmVhbSBjYWxsYmFj ayBtb3N0IHJlY2VudGx5LiAgVXNlZCB0bworCSAqIHN1cHByZXNzIGR1cGxpY2F0ZSBzdWNjZXNz aXZlIHJlYWQgc3RyZWFtIGJsb2NrIHJlcXVlc3RzLgorCSAqCisJICogUHJlZmV0Y2hpbmcgY2Fu IHN0aWxsIHBlcmZvcm0gbm9uLXN1Y2Nlc3NpdmUgcmVxdWVzdHMgZm9yIHRoZSBzYW1lCisJICog YmxvY2sgbnVtYmVyIChpbiBnZW5lcmFsIHdlJ3JlIHByZWZldGNoaW5nIGluIGV4YWN0bHkgdGhl IHNhbWUgb3JkZXIKKwkgKiB0aGF0IHRoZSBzY2FuIHdpbGwgcmV0dXJuIHRhYmxlIEFNIFRJRHMg aW4pLiAgV2UgbmVlZCB0byBhdm9pZAorCSAqIGR1cGxpY2F0ZSBzdWNjZXNzaXZlIHJlcXVlc3Rz IGJlY2F1c2UgdGFibGUgQU1zIGV4cGVjdCB0byBiZSBhYmxlIHRvCisJICogaGFuZyBvbiB0byBi dWZmZXIgcGlucyBhY3Jvc3MgdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUgY2FsbHMuCisJICovCisJ QmxvY2tOdW1iZXIgY3VycmVudFByZWZldGNoQmxvY2s7CisKIAkvKiBDdXJyZW50IHNjYW4gZGly ZWN0aW9uLCBmb3IgdGhlIGN1cnJlbnRseSBsb2FkZWQgYmF0Y2hlcyAqLwogCVNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uOwogCiAJLyogY3VycmVudCBwb3NpdGlvbnMgaW4gYmF0Y2hlc1tdIGZvciBz Y2FuICovCiAJQmF0Y2hSaW5nSXRlbVBvcyBzY2FuUG9zOwkvKiBzY2FuJ3MgcmVhZCBwb3NpdGlv biAqLwogCUJhdGNoUmluZ0l0ZW1Qb3MgbWFya1BvczsJLyogbWFyay9yZXN0b3JlIHBvc2l0aW9u ICovCisJQmF0Y2hSaW5nSXRlbVBvcyBwcmVmZXRjaFBvczsJLyogcHJlZmV0Y2hpbmcgcG9zaXRp b24gKi8KIAogCUJhdGNoSW5kZXhTY2FuIG1hcmtCYXRjaDsKIApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5k ZXggMDdiOGJmYTYzLi4zMTIzNmNlYWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXpl ci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaApAQCAtNTEsNiArNTEs NyBAQCBleHRlcm4gUEdETExJTVBPUlQgQ29zdCBkaXNhYmxlX2Nvc3Q7CiBleHRlcm4gUEdETExJ TVBPUlQgaW50IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXI7CiBleHRlcm4gUEdETExJ TVBPUlQgYm9vbCBlbmFibGVfc2Vxc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJs ZV9pbmRleHNjYW47CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuX3By ZWZldGNoOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4b25seXNjYW47CiBl eHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfYml0bWFwc2NhbjsKIGV4dGVybiBQR0RMTElN UE9SVCBib29sIGVuYWJsZV90aWRzY2FuOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9o YW5kbGVyLmMKaW5kZXggMDNiNGZhZGE5Li5kZWVmNzMwNjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgImNvbW1h bmRzL3Byb2dyZXNzLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvY29zdC5oIgogI2luY2x1ZGUgInBn c3RhdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9i dWZwYWdlLmgiCkBAIC02MCw2ICs2MSw5IEBAIHN0YXRpYyBCbG9ja051bWJlciBoZWFwYW1fc2Nh bl9nZXRfYmxvY2tzX2RvbmUoSGVhcFNjYW5EZXNjIGhzY2FuKTsKIHN0YXRpYyBib29sIEJpdG1h cEhlYXBTY2FuTmV4dEJsb2NrKFRhYmxlU2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCWJvb2wgKnJl Y2hlY2ssCiAJCQkJCQkJCQl1aW50NjQgKmxvc3N5X3BhZ2VzLCB1aW50NjQgKmV4YWN0X3BhZ2Vz KTsKK3N0YXRpYyBCbG9ja051bWJlciBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0oUmVhZFN0cmVhbSAq c3RyZWFtLAorCQkJCQkJCQkJCSB2b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJ CQkJIHZvaWQgKnBlcl9idWZmZXJfZGF0YSk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04 NSw2ICs4OSw3IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwpCiAJSW5k ZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IHBhbGxvY19vYmplY3QoSW5kZXhGZXRjaEhlYXBEYXRh KTsKIAogCWhzY2FuLT54c19iYXNlLnJlbCA9IHJlbDsKKwloc2Nhbi0+eHNfYmFzZS5ycyA9IE5V TEw7CiAJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOwogCWhzY2FuLT54c19ibGsgPSBJ bnZhbGlkQmxvY2tOdW1iZXI7CiAJaHNjYW4tPnZtYnVmID0gSW52YWxpZEJ1ZmZlcjsKQEAgLTk3 LDYgKzEwMiw5IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRh ICpzY2FuKQogewogCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBE YXRhICopIHNjYW47CiAKKwlpZiAoc2Nhbi0+cnMpCisJCXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4t PnJzKTsKKwogCS8qIGRlbGliZXJhdGVseSBkb24ndCBkcm9wIFZNIGJ1ZmZlciBwaW4gaGVyZSAq LwogCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKIAl7CkBAIC0xMTMsNiArMTIx LDkgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQog CiAJaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwogCisJaWYgKHNjYW4tPnJzKQorCQly ZWFkX3N0cmVhbV9lbmQoc2Nhbi0+cnMpOworCiAJaWYgKGhzY2FuLT52bWJ1ZiAhPSBJbnZhbGlk QnVmZmVyKQogCXsKIAkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+dm1idWYpOwpAQCAtMTUwLDcgKzE2 MSwxMyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURh dGEgKnNjYW4sCiAJCSAqIFdoZW4gdXNpbmcgYSByZWFkIHN0cmVhbSwgdGhlIHN0cmVhbSB3aWxs IGFscmVhZHkga25vdyB3aGljaCBibG9jawogCQkgKiBudW1iZXIgY29tZXMgbmV4dCAodGhvdWdo IGFuIGFzc2VydGlvbiB3aWxsIHZlcmlmeSBhIG1hdGNoIGJlbG93KQogCQkgKi8KLQkJaHNjYW4t PnhzX2NidWYgPSBSZWFkQnVmZmVyKGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2Jsayk7 CisJCWlmIChzY2FuLT5ycykKKwkJCWhzY2FuLT54c19jYnVmID0gcmVhZF9zdHJlYW1fbmV4dF9i dWZmZXIoc2Nhbi0+cnMsIE5VTEwpOworCQllbHNlCisJCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRC dWZmZXIoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfYmxrKTsKKworCQlBc3NlcnQoQnVm ZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpOworCQlBc3NlcnQoQnVmZmVyR2V0QmxvY2tOdW1i ZXIoaHNjYW4tPnhzX2NidWYpID09IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CiAK IAkJLyoKIAkJICogUHJ1bmUgcGFnZSB3aGVuIGl0IGlzIHBpbm5lZCBmb3IgdGhlIGZpcnN0IHRp bWUKQEAgLTI0OCw2ICsyNjUsMTUgQEAgaGVhcGFtX2JhdGNoX3JldHVybl90aWQoSW5kZXhTY2Fu RGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBzY2FuQmF0Y2gsCiAvKgogICogaGVhcF9iYXRjaF9y ZXNvbHZlX3Zpc2liaWxpdHkKICAqCQlPYnRhaW4gdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBmb3Ig ZXZlcnkgVElEIGZyb20gY2FsbGVyJ3MgYmF0Y2guCisgKgorICogaGVhcGFtX2JhdGNoX2dldG5l eHRfdGlkIG11c3QgcmVsaWFibHkgYWdyZWUgd2l0aCBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0KKyAq IGFib3V0IHdoaWNoIGhlYXAgYmxvY2tzL1RJRHMgd2lsbCByZXF1aXJlIGEgaGVhcCBmZXRjaCAo YW5kIHdoaWNoIFRJRHMKKyAqIHdvbid0IGR1ZSB0byBwb2ludGluZyB0byBhbiBhbGwtdmlzaWJs ZSBoZWFwIHBhZ2UpLiAgT3RoZXJ3aXNlIHdlIHJpc2sKKyAqIGFsbG93aW5nIHRoZSByZWFkIHN0 cmVhbSB0byByZXR1cm4gdW5leHBlY3RlZCBoZWFwIGJ1ZmZlcnMvcGFnZXMuCisgKgorICogQ2Fj aGluZyB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIHVwIGZyb250IGF2b2lkcyB0aGF0IHByb2JsZW0u ICBJZiBhIFZNIGJpdAorICogaXMgY29uY3VycmVudGx5IHNldCAob3IgdW5zZXQpLCBpdCBjYW4n dCBtYXR0ZXIsIHNpbmNlIGV2ZXJ5Ym9keSB3aWxsIGhhdmUKKyAqIHdvcmtzIG9mZiBvZiB0aGlz IGltbXV0YWJsZSBsb2NhbCBjYWNoZS4KICAqLwogc3RhdGljIHZvaWQKIGhlYXBfYmF0Y2hfcmVz b2x2ZV92aXNpYmlsaXR5KEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gp CkBAIC0zNzcsNiArNDAzLDE5IEBAIGhlYXBfYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNj YW4sIEJhdGNoSW5kZXhTY2FuIHByaW9yYmF0Y2gsCiAKIAkJREVCVUdfTE9HKCJiYXRjaF9nZXRu ZXh0IGhlYWRCYXRjaCAlZCBuZXh0QmF0Y2ggJWQgYmF0Y2ggJXAiLAogCQkJCSAgcmluZ2J1Zi0+ aGVhZEJhdGNoLCByaW5nYnVmLT5uZXh0QmF0Y2gsIGJhdGNoKTsKKworCQkvKiBEZWxheSBpbml0 aWFsaXppbmcgc3RyZWFtIHVudGlsIHJlYWRpbmcgZnJvbSBzY2FuJ3Mgc2Vjb25kIGJhdGNoICov CisJCWlmICghc2Nhbi0+eHNfaGVhcGZldGNoLT5ycyAmJiAhcmluZ2J1Zi0+ZGlzYWJsZWQgJiYg cHJpb3JiYXRjaCAmJgorCQkJZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCkKKwkJeworCQkJQXNz ZXJ0KElOREVYX1NDQU5fUE9TX0lOVkFMSUQoJnJpbmdidWYtPnByZWZldGNoUG9zKSk7CisJCQlB c3NlcnQocmluZ2J1Zi0+Y3VycmVudFByZWZldGNoQmxvY2sgPT0gSW52YWxpZEJsb2NrTnVtYmVy KTsKKworCQkJc2Nhbi0+eHNfaGVhcGZldGNoLT5ycyA9CisJCQkJcmVhZF9zdHJlYW1fYmVnaW5f cmVsYXRpb24oUkVBRF9TVFJFQU1fREVGQVVMVCwgTlVMTCwKKwkJCQkJCQkJCQkgICBzY2FuLT5o ZWFwUmVsYXRpb24sIE1BSU5fRk9SS05VTSwKKwkJCQkJCQkJCQkgICBoZWFwYW1fZ2V0bmV4dF9z dHJlYW0sIHNjYW4sIDApOworCQl9CiAJfQogCiAJLyogeHNfaGl0dXAgaXMgbm90IHN1cHBvcnRl ZCBieSBhbWdldGJhdGNoIHNjYW5zICovCkBAIC00MTEsOSArNDUwLDUzIEBAIGhlYXBhbV9iYXRj aF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u KQogCS8qIEluaXRpYWxpemUgZGlyZWN0aW9uIG9uIGZpcnN0IGNhbGwgKi8KIAlpZiAocmluZ2J1 Zi0+ZGlyZWN0aW9uID09IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKQogCQlyaW5nYnVmLT5kaXJl Y3Rpb24gPSBkaXJlY3Rpb247CisJZWxzZSBpZiAodW5saWtlbHkocmluZ2J1Zi0+ZGlzYWJsZWQg JiYgc2Nhbi0+eHNfaGVhcGZldGNoLT5ycykpCisJeworCQkvKgorCQkgKiBIYW5kbGUgY2FuY2Vs bGluZyB0aGUgdXNlIG9mIHRoZSByZWFkIHN0cmVhbSBmb3IgcHJlZmV0Y2hpbmcKKwkJICovCisJ CWJhdGNoX3Jlc2V0X3BvcygmcmluZ2J1Zi0+cHJlZmV0Y2hQb3MpOworCQlyaW5nYnVmLT5jdXJy ZW50UHJlZmV0Y2hCbG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKIAorCQlyZWFkX3N0cmVhbV9y ZXNldChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKTsKKwkJc2Nhbi0+eHNfaGVhcGZldGNoLT5ycyA9 IE5VTEw7CisJfQorCWVsc2UgaWYgKHVubGlrZWx5KHJpbmdidWYtPnJlc2V0KSkKKwl7CisJCXJp bmdidWYtPnJlc2V0ID0gZmFsc2U7CisKKwkJLyoKKwkJICogTmVlZCB0byByZXNldCB0aGUgc3Ry ZWFtIHBvc2l0aW9uLCBpdCBtaWdodCBiZSB0b28gZmFyIGJlaGluZC4KKwkJICogVWx0aW1hdGVs eSB3ZSB3YW50IHRvIHNldCBpdCB0byBzY2FuUG9zLCBidXQgd2UgY2FuJ3QgZG8gdGhhdCB5ZXQg LQorCQkgKiBzY2FuUG9zIHN0aWxsIHBvaW50IHNhdCB0aGUgb2xkIGJhdGNoLCBzbyBqdXN0IHJl c2V0IGl0IGFuZCB3ZSdsbAorCQkgKiBpbml0IGl0IHRvIHNjYW5Qb3MgbGF0ZXIgaW4gdGhlIGNh bGxiYWNrLgorCQkgKi8KKwkJYmF0Y2hfcmVzZXRfcG9zKCZyaW5nYnVmLT5wcmVmZXRjaFBvcyk7 CisJCXJpbmdidWYtPmN1cnJlbnRQcmVmZXRjaEJsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOwor CisJCWlmIChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKQorCQkJcmVhZF9zdHJlYW1fcmVzZXQoc2Nh bi0+eHNfaGVhcGZldGNoLT5ycyk7CisJfQorCisJLyoKKwkgKiBYWFggU2hvdWxkbid0IHRoaXMg YWxzbyB1cGRhdGUgdGhlIHJpbmdidWYtPmRpcmVjdGlvbj8gSWYgd2UgZ2V0IHRvIHRoZQorCSAq IG5leHQgYmxvY2sgaGFuZ2xpbmcgZGlyZWN0aW9uIGNoYW5nZSwgdGhlbiB3ZSB3aWxsIHJlbWVt YmVyIGl0IChiZWNhdXNlCisJICogaGVhcGFtX2JhdGNoX3Jld2luZCB3aWxsIHN0b3JlIGl0KS4g QnV0IGlmIHdlIHJldHVybiBpbiB0aGUgbmV4dCBibG9jaywKKwkgKiB3b24ndCB3ZSBmb3JnZXQg YWJvdXQgaXQ/CisJICoKKwkgKiBYWFggSXQncyBhIGJpdCB3ZWlyZCB3ZSBoYW5kbGUgdGhlIGRp cmVjdGlvbiBjaGFuZ2UgaW4gdHdvIHBsYWNlcy4KKwkgKiBXb3VsZCBiZSBnb29kIHRvIGV4cGxh aW4gd2h5IHRoYXQncyBuZWNlc3NhcnkuCisJICoKKwkgKiBYWFggSG93IGNvbWUgdGhpcyBkb2Vz bid0IG5lZWQgdG8gZG8gaGVhcGFtX2JhdGNoX3Jld2luZCB0b28/IENvdWxkCisJICogdGhlcmUg YmUgc29tZSBmdXR1cmUgYmF0Y2hlcyBhbHJlYWR5IGxvYWRlZD8KKwkgKi8KIAlpZiAodW5saWtl bHkocmluZ2J1Zi0+ZGlyZWN0aW9uICE9IGRpcmVjdGlvbikpCiAJeworCQlpZiAoc2Nhbi0+eHNf aGVhcGZldGNoLT5ycykKKwkJCXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaC0+ cnMpOworCQliYXRjaF9yZXNldF9wb3MoJnJpbmdidWYtPnByZWZldGNoUG9zKTsKKwkJcmluZ2J1 Zi0+Y3VycmVudFByZWZldGNoQmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisKIAkJLyogV2Ug bWF5IGNoYW5nZSBkaXJlY3Rpb24gYWZ0ZXIgcmVhZGluZyB0aGUgbGFzdCBiYXRjaC4gKi8KIAkJ c2Nhbi0+ZmluaXNoZWQgPSBmYWxzZTsKIAl9CkBAIC00OTcsNiArNTgwLDI1MSBAQCBoZWFwYW1f YmF0Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbikKIAlyZXR1cm4gaGVhcGFtX2JhdGNoX3JldHVybl90aWQoc2Nhbiwgc2NhbkJhdGNoLCBz Y2FuUG9zKTsKIH0KIAorLyoKKyAqIENvbnRyb2xzIHdoZW4gd2UgY2FuY2VsIHVzZSBvZiBhIHJl YWQgc3RyZWFtIHRvIGRvIHByZWZldGNoaW5nCisgKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9NSU5f RElTVEFOQ0VfTkJBVENIRVMJMjAKKyNkZWZpbmUgSU5ERVhfU0NBTl9NSU5fVFVQTEVfRElTVEFO Q0UJCTcKKworLyoKKyAqIGhlYXBhbV9nZXRuZXh0X3N0cmVhbQorICoJCXJldHVybiB0aGUgbmV4 dCBibG9jayB0byBwYXNzIHRvIHRoZSByZWFkIHN0cmVhbQorICoKKyAqIFRoZSBpbml0aWFsIGJh dGNoIGlzIGFsd2F5cyBsb2FkZWQgYnkgaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkLiAgV2UgZG9u J3QKKyAqIGdldCBjYWxsZWQgdW50aWwgdGhlIGZpcnN0IHJlYWRfc3RyZWFtX25leHRfYnVmZmVy KCkgY2FsbCwgd2hlbiBhIGhlYXAKKyAqIGJsb2NrIGlzIHJlcXVlc3RlZCBmcm9tIHRoZSBzY2Fu J3Mgc3RyZWFtIGZvciB0aGUgZmlyc3QgdGltZS4KKyAqCisgKiBUaGUgcG9zaXRpb24gb2YgdGhl IHJlYWRfc3RyZWFtIGlzIHN0b3JlZCBpbiBwcmVmZXRjaFBvcy4gIEl0IGlzIHR5cGljYWwgZm9y CisgKiBwcmVmZXRjaFBvcyB0byBjb25zaXN0ZW50bHkgc3RheSBhaGVhZCBvZiB0aGUgc2NhblBv cyBwb3NpdGlvbiB0aGF0J3MgdXNlZCB0bworICogdHJhY2sgdGhlIG5leHQgVElEIHRvIGJlIHJl dHVybmVkIHRvIHRoZSBzY2FuIGJ5IGhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZAorICogYWZ0ZXIg dGhlIGZpcnN0IHRpbWUgd2UgZ2V0IGNhbGxlZC4gIEhvd2V2ZXIsIHRoYXQgaXNuJ3QgYSBwcmVj b25kaXRpb24uCisgKiBUaGVyZSBpcyBhIHN0cmljdCBwb3N0Y29uZGl0aW9uLCB0aG91Z2g6IHdo ZW4gd2UgcmV0dXJuIHdlJ2xsIGFsd2F5cyBsZWF2ZQorICogc2NhblBvcyA8PSBwcmVmZXRjaFBv cyAoZXhjZXB0IGluIGNhc2VzIHdoZXJlIHdlIHJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXIpLgor ICovCitzdGF0aWMgQmxvY2tOdW1iZXIKK2hlYXBhbV9nZXRuZXh0X3N0cmVhbShSZWFkU3RyZWFt ICpzdHJlYW0sIHZvaWQgKmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJICB2b2lkICpwZXJf YnVmZmVyX2RhdGEpCit7CisJSW5kZXhTY2FuRGVzYyBzY2FuID0gKEluZGV4U2NhbkRlc2MpIGNh bGxiYWNrX3ByaXZhdGVfZGF0YTsKKwlCYXRjaFJpbmdCdWZmZXIgKnJpbmdidWYgPSBzY2FuLT5y aW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmcmluZ2J1Zi0+c2NhblBvczsK KwlCYXRjaFJpbmdJdGVtUG9zICpwcmVmZXRjaFBvcyA9ICZyaW5nYnVmLT5wcmVmZXRjaFBvczsK KwlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiA9IHJpbmdidWYtPmRpcmVjdGlvbjsKKwlCYXRjaElu ZGV4U2NhbiBwcmVmZXRjaEJhdGNoOworCWJvb2wJCWZyb21SZWFkUG9zID0gZmFsc2U7CisKKwlB c3NlcnQoIXNjYW4tPmZpbmlzaGVkICYmICFyaW5nYnVmLT5kaXNhYmxlZCk7CisKKwkvKgorCSAq IHNjYW5Qb3MgbXVzdCBhbHdheXMgYmUgdmFsaWQgd2hlbiB3ZSdyZSBjYWxsZWQgLS0gdGhlcmUg aGFzIHRvIGJlIGF0CisJICogbGVhc3Qgb25lIGJhdGNoLCBsb2FkZWQsIGZvciBzY2FuQmF0Y2gu ICBwcmVmZXRjaFBvcyBtaWdodCBub3QgeWV0IGJlCisJICogdmFsaWQsIGluIHdoaWNoIGNhc2Ug aXQnbGwgYmUgaW5pdGlhbGl6ZWQgdXNpbmcgc2NhblBvcy4KKwkgKi8KKwlBc3NlcnQoSU5ERVhf U0NBTl9CQVRDSF9DT1VOVChzY2FuKSA+IDApOworCWJhdGNoX2Fzc2VydF9wb3NfdmFsaWQoc2Nh biwgc2NhblBvcyk7CisKKwkvKgorCSAqIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgc2NhbidzIGRp cmVjdGlvbiB0byBjaGFuZ2UsIGJ1dCB0aGF0J3MgaGFuZGxlZAorCSAqIGVsc2V3aGVyZS4gIFdl IGRvbid0IGtub3cgaG93IHRvIGRlYWwgd2l0aCBhbnkgdmFyaWF0aW9uIGluIHNjYW4KKwkgKiBk aXJlY3Rpb24gaGVyZS4gIFdlIGFzc3VtZSB0aGF0IGFsbCBsb2FkZWQgYW5kIG5ld2x5IHJlcXVl c3RlZCBiYXRjaGVzCisJICogbXVzdCB1c2UgdGhlIHNhbWUgc2NhbiBkaXJlY3Rpb24uCisJICov CisJQXNzZXJ0KGRpcmVjdGlvbiAhPSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbik7CisKKwkvKgor CSAqIElmIHRoZSBzdHJlYW0gcG9zaXRpb24gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldCwg aW5pdGlhbGl6ZSBpdAorCSAqIHVzaW5nIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24uCisJICoK KwkgKiBXZSBkbyB0aGlzIG5vdyAocmF0aGVyIHRoYW4gZG9pbmcgaXQgd2hlbiB0aGUgcmVhZCBz dHJlYW0gaXMgY3JlYXRlZCkKKwkgKiB0byBhdm9pZCBpbmNvcnJlY3RseSByZXR1cm5pbmcgdGhl IHNjYW4ncyBJbmRleEZldGNoSGVhcERhdGEueHNfYmxrIGFzCisJICogaXQgd2FzIGF0IHRoZSB0 aW1lIG9mIHJlYWQgc3RyZWFtIGNyZWF0aW9uLiAgTm90ZSB0aGF0IHRoZSBzY2FuIG1pZ2h0CisJ ICogaGF2ZSB0byBob2xkIG9udG8gaXRzIGV4aXN0aW5nIG5vdC1tYW5hZ2VkLWJ5LXJlYWQtc3Ry ZWFtIGJ1ZmZlciBwaW4KKwkgKiBhZnRlciB0aGUgcmVhZCBzdHJlYW0gaXMgY3JlYXRlZDsgdGhl cmUnbGwgb2Z0ZW4gYmUgYSBmZXcgbW9yZSBoZWFwCisJICogVElEcyB0aGF0IHBvaW50IHRvIHRo ZSBzYW1lIHBpbm5lZCBoZWFwIHBhZ2UgZnJvbSBiZWZvcmUuCisJICovCisJaWYgKElOREVYX1ND QU5fUE9TX0lOVkFMSUQocHJlZmV0Y2hQb3MpKQorCXsKKwkJQXNzZXJ0KHJpbmdidWYtPmN1cnJl bnRQcmVmZXRjaEJsb2NrID09IEludmFsaWRCbG9ja051bWJlcik7CisKKwkJKnByZWZldGNoUG9z ID0gKnNjYW5Qb3M7CisJCWZyb21SZWFkUG9zID0gdHJ1ZTsKKwl9CisKKwlwcmVmZXRjaEJhdGNo ID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBwcmVmZXRjaFBvcy0+YmF0Y2gpOworCWZvciAoOzsp CisJeworCQlCYXRjaE1hdGNoaW5nSXRlbSAqaXRlbTsKKwkJSXRlbVBvaW50ZXIgdGlkOworCisJ CWlmIChmcm9tUmVhZFBvcykKKwkJeworCQkJLyoKKwkJCSAqIERvbid0IGluY3JlbWVudCBpdGVt IHdoZW4gcHJlZmV0Y2hQb3Mgd2FzIGp1c3QgaW5pdGlhbGl6ZWQKKwkJCSAqIHVzaW5nIHNjYW5Q b3MuICBXZSByZXR1cm4gdGhlIHNjYW5Qb3MgaXRlbSdzIGhlYXAgYmxvY2sKKwkJCSAqIGRpcmVj dGx5IG9uIHRoZSBmaXJzdCBjYWxsIGhlcmUuCisJCQkgKi8KKwkJCWZyb21SZWFkUG9zID0gZmFs c2U7CisJCX0KKwkJZWxzZSBpZiAoIWhlYXBfYmF0Y2hwb3NfYWR2YW5jZShwcmVmZXRjaEJhdGNo LCBwcmVmZXRjaFBvcywgZGlyZWN0aW9uKSkKKwkJeworCQkJLyoKKwkJCSAqIFJhbiBvdXQgb2Yg aXRlbXMgZnJvbSBwcmVmZXRjaEJhdGNoLiAgVHJ5IHRvIGFkdmFuY2UgaXQgdG8gbmV4dAorCQkJ ICogYmF0Y2guCisJCQkgKi8KKwkJCWlmIChJTkRFWF9TQ0FOX0JBVENIX0xPQURFRChzY2FuLCBw cmVmZXRjaFBvcy0+YmF0Y2ggKyAxKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFRoZSBuZXh0IGJh dGNoIHdhcyBhbHJlYWR5IGxvYWRlZCBmb3IgdXMuCisJCQkJICoKKwkJCQkgKiBUeXBpY2FsbHks IHByZWZldGNoUG9zIGlzIGFoZWFkIG9mIHNjYW5Qb3MgZm9yIHRoZSBlbnRpcmUKKwkJCQkgKiBk dXJhdGlvbiBvZiB0aGUgc2NhbiAoYXQgbGVhc3QgYWZ0ZXIgd2UncmUgZmlyc3QgY2FsbGVkKS4K KwkJCQkgKiBIb3dldmVyLCBwcmVmZXRjaFBvcyBjYW4gc29tZXRpbWVzIGZhbGwgYmVoaW5kIHNj YW5Qb3MuCisJCQkJICogVGhhdCdzIHdoeSB3ZSBuZWVkIHRvIGhhbmRsZSBhbHJlYWR5LWxvYWRl ZCBiYXRjaGVzIGhlcmUuCisJCQkJICoKKwkJCQkgKiBUaGlzIGhhcHBlbnMgd2hlbiBzb21lIGJs b2NrcyBhcmUgc2tpcHBlZCBhbmQgbm90IHJldHVybmVkCisJCQkJICogdG8gdGhlIHJlYWRfc3Ry ZWFtLiAgQW4gZXhhbXBsZSBpcyBhbiBpbmRleCBzY2FuIG9uIGEKKwkJCQkgKiBjb3JyZWxhdGVk IGluZGV4LCB3aXRoIG1hbnkgZHVwbGljYXRlIGJsb2NrcyBhcmUgc2tpcHBlZCwKKwkJCQkgKiBv ciBhbiBJT1Mgd2hlcmUgYWxsLXZpc2libGUgYmxvY2tzIGFyZSBza2lwcGVkLgorCQkJCSAqLwor CQkJCXByZWZldGNoQmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIHByZWZldGNoUG9zLT5i YXRjaCArIDEpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJICogSWYgd2UgYWxy ZWFkeSB1c2VkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBiYXRjaCBzbG90cworCQkJCSAqIGF2YWls YWJsZSwgaXQncyBwb2ludGxlc3MgdG8gdHJ5IGxvYWRpbmcgYW5vdGhlciBvbmUuIFRoaXMKKwkJ CQkgKiBjYW4gaGFwcGVuIGZvciB2YXJpb3VzIHJlYXNvbnMsIGUuZy4gZm9yIGluZGV4LW9ubHkg c2NhbnMKKwkJCQkgKiBvbiBhbGwtdmlzaWJsZSB0YWJsZSwgb3Igc2tpcHBpbmcgZHVwbGljYXRl IGJsb2NrcyBvbgorCQkJCSAqIHBlcmZlY3RseSBjb3JyZWxhdGVkIGluZGV4ZXMsIGV0Yy4KKwkJ CQkgKgorCQkJCSAqIFdlIGNvdWxkIGVubGFyZ2UgdGhlIGFycmF5IHRvIGFsbG93IG1vcmUgYmF0 Y2hlcywgYnV0CisJCQkJICogdGhhdCdzIGZ1dGlsZSwgd2UgY2FuIGFsd2F5cyBjb25zdHJ1Y3Qg YSBjYXNlIHVzaW5nIG1vcmUKKwkJCQkgKiBtZW1vcnkuIE5vdCBvbmx5IGl0IHdvdWxkIHJpc2sg T09NLCBpdCdkIGFsc28gYmUKKwkJCQkgKiBpbmVmZmljaWVudCBiZWNhdXNlIHRoaXMgaGFwcGVu cyBlYXJseSBpbiB0aGUgc2NhbiAoc28gaXQnZAorCQkJCSAqIGludGVyZmVyZSB3aXRoIExJTUlU IHF1ZXJpZXMpLgorCQkJCSAqLworCQkJCWlmIChJTkRFWF9TQ0FOX0JBVENIX0ZVTEwoc2Nhbikp CisJCQkJeworCQkJCQlERUJVR19MT0coImJhdGNoX2dldG5leHQ6IHJhbiBvdXQgb2Ygc3BhY2Ug Zm9yIGJhdGNoZXMiKTsKKwkJCQkJc2Nhbi0+cmluZ2J1Zi0+cmVzZXQgPSB0cnVlOworCQkJCQli cmVhazsKKwkJCQl9CisKKwkJCQlwcmVmZXRjaEJhdGNoID0gaGVhcF9iYXRjaF9nZXRuZXh0KHNj YW4sIHByZWZldGNoQmF0Y2gsIGRpcmVjdGlvbik7CisJCQkJaWYgKCFwcmVmZXRjaEJhdGNoKQor CQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRmFpbGVkIHRvIGxvYWQgbmV4dCBiYXRjaCwgc28gYWxs IHRoZSBiYXRjaGVzIHRoYXQgdGhlCisJCQkJCSAqIHNjYW4gd2lsbCBldmVyIHJlcXVpcmUgKGJh cnJpbmcgYSBjaGFuZ2UgaW4gc2NhbgorCQkJCQkgKiBkaXJlY3Rpb24pIGFyZSBub3cgbG9hZGVk CisJCQkJCSAqLworCQkJCQlzY2FuLT5maW5pc2hlZCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJ CX0KKworCQkJCS8qCisJCQkJICogQ29uc2lkZXIgZGlzYWJsaW5nIHByZWZldGNoaW5nIHdoZW4g d2UgY2FuJ3Qga2VlcCBhCisJCQkJICogc3VmZmljaWVudGx5IGxhcmdlICJpbmRleCB0dXBsZSBk aXN0YW5jZSIgYmV0d2VlbiBzY2FuUG9zCisJCQkJICogYW5kIHByZWZldGNoUG9zLgorCQkJCSAq CisJCQkJICogT25seSBjb25zaWRlciBkb2luZyB0aGlzIHdoZW4gd2UncmUgbm90IG9uIHRoZSBz Y2FuJ3MKKwkJCQkgKiBpbml0aWFsIGJhdGNoLCB3aGVuIHNjYW5Qb3MgYW5kIHByZWZldGNoUG9z IHNoYXJlIHRoZSBzYW1lCisJCQkJICogYmF0Y2guCisJCQkJICovCisJCQkJaWYgKCFyaW5nYnVm LT5wcmVmZXRjaGluZ0xvY2tlZEluKQorCQkJCXsKKwkJCQkJaW50CQkJaXRlbWRpZmY7CisKKwkJ CQkJaWYgKHByZWZldGNoUG9zLT5iYXRjaCA8PSBJTkRFWF9TQ0FOX01JTl9ESVNUQU5DRV9OQkFU Q0hFUykKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAqIFRvbyBlYXJseSB0byBjaGVjayBpZiBw cmVmZXRjaGluZyBzaG91bGQgYmUKKwkJCQkJCSAqIGRpc2FibGVkCisJCQkJCQkgKi8KKwkJCQkJ fQorCQkJCQllbHNlIGlmIChzY2FuUG9zLT5iYXRjaCA9PSBwcmVmZXRjaFBvcy0+YmF0Y2gpCisJ CQkJCXsKKwkJCQkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCQkJ CQkJaXRlbWRpZmYgPSBwcmVmZXRjaFBvcy0+aXRlbSAtIHNjYW5Qb3MtPml0ZW07CisJCQkJCQll bHNlCisJCQkJCQl7CisJCQkJCQkJQmF0Y2hJbmRleFNjYW4gc2NhbkJhdGNoID0KKwkJCQkJCQkJ SU5ERVhfU0NBTl9CQVRDSChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisKKwkJCQkJCQlpdGVtZGlm ZiA9IChzY2FuUG9zLT5pdGVtIC0gc2NhbkJhdGNoLT5maXJzdEl0ZW0pIC0KKwkJCQkJCQkJKHBy ZWZldGNoUG9zLT5pdGVtIC0gc2NhbkJhdGNoLT5maXJzdEl0ZW0pOworCQkJCQkJfQorCisJCQkJ CQlpZiAoaXRlbWRpZmYgPCBJTkRFWF9TQ0FOX01JTl9UVVBMRV9ESVNUQU5DRSkKKwkJCQkJCXsK KwkJCQkJCQlyaW5nYnVmLT5kaXNhYmxlZCA9IHRydWU7CisJCQkJCQkJcmV0dXJuIEludmFsaWRC bG9ja051bWJlcjsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlyaW5nYnVm LT5wcmVmZXRjaGluZ0xvY2tlZEluID0gdHJ1ZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNl CisJCQkJCQlyaW5nYnVmLT5wcmVmZXRjaGluZ0xvY2tlZEluID0gdHJ1ZTsKKwkJCQl9CisJCQl9 CisKKwkJCS8qIFBvc2l0aW9uIHByZWZldGNoUG9zIHRvIHRoZSBzdGFydCBvZiBuZXcgcHJlZmV0 Y2hCYXRjaCAqLworCQkJaGVhcF9iYXRjaHBvc19uZXdiYXRjaChwcmVmZXRjaEJhdGNoLCBwcmVm ZXRjaFBvcywgZGlyZWN0aW9uKTsKKwkJCUFzc2VydChJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIHBy ZWZldGNoUG9zLT5iYXRjaCkgPT0gcHJlZmV0Y2hCYXRjaCk7CisJCX0KKworCQkvKgorCQkgKiBX ZSBhZHZhbmNlZCB0aGUgcG9zaXRpb24uICBFaXRoZXIgcmV0dXJuIHRoZSBibG9jayBmb3IgdGhl IFRJRCwgb3IKKwkJICogc2tpcCBpdCAoYW5kIHRoZW4gdHJ5IGFkdmFuY2luZyBhZ2FpbikuCisJ CSAqLworCQlBc3NlcnQocHJlZmV0Y2hCYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisJCUFzc2Vy dChzY2FuUG9zLT5iYXRjaCA8IHByZWZldGNoUG9zLT5iYXRjaCB8fAorCQkJICAgKHNjYW5Qb3Mt PmJhdGNoID09IHByZWZldGNoUG9zLT5iYXRjaCAmJgorCQkJCVNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyZWN0aW9uKSA/CisJCQkJc2NhblBvcy0+aXRlbSA8PSBwcmVmZXRjaFBvcy0+aXRlbSA6 CisJCQkJc2NhblBvcy0+aXRlbSA+PSBwcmVmZXRjaFBvcy0+aXRlbSkpOworCisJCS8qCisJCSAq IFRoZSBibG9jayBtYXkgYmUgInNraXBwZWQiIGZvciB0d28gcmVhc29ucy4gRmlyc3QsIHRoZSBj YWxsZXIgbWF5CisJCSAqIGRlZmluZSBhICJwcmVmZXRjaCIgY2FsbGJhY2sgdGhhdCB0ZWxscyB1 cyB0byBza2lwIGl0ZW1zIChJT1MgZG9lcworCQkgKiB0aGlzIHRvIHNraXAgYWxsLXZpc2libGUg cGFnZXMpLiBTZWNvbmQsIGN1cnJlbnRQcmVmZXRjaEJsb2NrIGlzCisJCSAqIHVzZWQgdG8gc2tp cCBkdXBsaWNhdGUgYmxvY2sgbnVtYmVycyAoYSBzZXF1ZW5jZSBvZiBUSURTIGZvciB0aGUKKwkJ ICogc2FtZSBibG9jaykuCisJCSAqLworCQliYXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4sIHBy ZWZldGNoUG9zKTsKKwkJaXRlbSA9ICZwcmVmZXRjaEJhdGNoLT5pdGVtc1twcmVmZXRjaFBvcy0+ aXRlbV07CisJCXRpZCA9ICZpdGVtLT5oZWFwVGlkOworCisJCURFQlVHX0xPRygiaGVhcGFtX2dl dG5leHRfc3RyZWFtOiBpdGVtICVkLCBUSUQgKCV1LCV1KSIsCisJCQkJICBwcmVmZXRjaFBvcy0+ aXRlbSwKKwkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkgIEl0ZW1Q b2ludGVyR2V0T2Zmc2V0TnVtYmVyKHRpZCkpOworCisJCS8qCisJCSAqIEZvciBpbmRleC1vbmx5 IHNjYW5zLCBkZXRlcm1pbmUgaWYgdGhlIHBhZ2UgaXMgYWxsLXZpc2libGUgbm93LiAgSWYKKwkJ ICogaXQgaXMsIHdlIHdvbid0IG5lZWQgdGhlIGJsb2NrIGFuZCBjYW4gc2tpcCBpdCB0b28uCisJ CSAqLworCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwICYmIGl0ZW0tPmFsbFZpc2libGUpCisJCQlj b250aW51ZTsKKworCQkvKiBzYW1lIGJsb2NrIGFzIGJlZm9yZSwgZG9uJ3QgbmVlZCB0byByZWFk IGl0ICovCisJCWlmIChyaW5nYnVmLT5jdXJyZW50UHJlZmV0Y2hCbG9jayA9PSBJdGVtUG9pbnRl ckdldEJsb2NrTnVtYmVyKHRpZCkpCisJCXsKKwkJCURFQlVHX0xPRygiaGVhcGFtX2dldG5leHRf c3RyZWFtOiBza2lwIGJsb2NrIChjdXJyZW50UHJlZmV0Y2hCbG9jaykiKTsKKwkJCWNvbnRpbnVl OworCQl9CisKKwkJcmluZ2J1Zi0+Y3VycmVudFByZWZldGNoQmxvY2sgPSBJdGVtUG9pbnRlckdl dEJsb2NrTnVtYmVyKHRpZCk7CisKKwkJcmV0dXJuIHJpbmdidWYtPmN1cnJlbnRQcmVmZXRjaEJs b2NrOworCX0KKworCS8qIG5vIG1vcmUgaXRlbXMgaW4gdGhpcyBzY2FuICovCisJcmV0dXJuIElu dmFsaWRCbG9ja051bWJlcjsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X2Zl dGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKICAqCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2luZGV4YW0uYwppbmRleCA5ZWFlY2Q5NDMuLmQxNWEyZWU4MSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvaW5kZXhhbS5jCkBAIC00NjcsNyArNDY3LDE1IEBAIGluZGV4X3Jlc3RycG9zKElu ZGV4U2NhbkRlc2Mgc2NhbikKIAlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWdldGJhdGNoKTsKIAlD SEVDS19TQ0FOX1BST0NFRFVSRShhbXBvc3Jlc2V0KTsKIAotCS8qIHJlbGVhc2UgcmVzb3VyY2Vz IChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCisJLyoKKwkgKiByZWxl YXNlIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcworCSAq CisJICogWFhYOiBDdXJyZW50bHksIHRoZSBkaXN0YW5jZSBpcyBhbHdheXMgcmVtZW1iZXJlZCBh Y3Jvc3MgYW55CisJICogcmVhZF9zdHJlYW1fcmVzZXQgY2FsbHMgKHRvIHdvcmsgYXJvdW5kIHRo ZSBzY2FuLT5yaW5nYnVmLT5yZXNldAorCSAqIGJlaGF2aW9yIG9mIHJlc2V0dGluZyB0aGUgc3Ry ZWFtIHRvIGRlYWwgd2l0aCBydW5uaW5nIG91dCBvZiBiYXRjaGVzKS4KKwkgKiBXZSBwcm9iYWJs eSBfc2hvdWxkXyBiZSBmb3JnZXR0aW5nIHRoZSBkaXN0YW5jZSB3aGVuIHdlIHJlc2V0IHRoZQor CSAqIHN0cmVhbSBoZXJlICh0aHJvdWdoIG91ciB0YWJsZV9pbmRleF9mZXRjaF9yZXNldCBjYWxs KSwgdGhvdWdoLgorCSAqLwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJCXRhYmxlX2luZGV4 X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv aW5kZXhiYXRjaC5jCmluZGV4IDg2YTFjNmY1Ni4uNGRmOTJlN2FmIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9pbmRleC9pbmRleGJhdGNoLmMKQEAgLTc0LDExICs3NCwxNiBAQCBpbmRleF9iYXRjaF9pbml0 KEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJKCFzY2FuLT54c193YW50X2l0dXAgJiYgSXNNVkNDU25h cHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpICYmCiAJCSBSZWxhdGlvbk5lZWRzV0FMKHNjYW4tPmlu ZGV4UmVsYXRpb24pKTsKIAlzY2FuLT5maW5pc2hlZCA9IGZhbHNlOworCXNjYW4tPnJpbmdidWYt PnJlc2V0ID0gZmFsc2U7CisJc2Nhbi0+cmluZ2J1Zi0+cHJlZmV0Y2hpbmdMb2NrZWRJbiA9IGZh bHNlOworCXNjYW4tPnJpbmdidWYtPmRpc2FibGVkID0gZmFsc2U7CisJc2Nhbi0+cmluZ2J1Zi0+ Y3VycmVudFByZWZldGNoQmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJc2Nhbi0+cmluZ2J1 Zi0+ZGlyZWN0aW9uID0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb247CiAKIAkvKiBwb3NpdGlvbnMg aW4gdGhlIHJpbmcgYnVmZmVyIG9mIGJhdGNoZXMgKi8KIAliYXRjaF9yZXNldF9wb3MoJnNjYW4t PnJpbmdidWYtPnNjYW5Qb3MpOwogCWJhdGNoX3Jlc2V0X3Bvcygmc2Nhbi0+cmluZ2J1Zi0+bWFy a1Bvcyk7CisJYmF0Y2hfcmVzZXRfcG9zKCZzY2FuLT5yaW5nYnVmLT5wcmVmZXRjaFBvcyk7CiAK IAlzY2FuLT5yaW5nYnVmLT5tYXJrQmF0Y2ggPSBOVUxMOwogCXNjYW4tPnJpbmdidWYtPmhlYWRC YXRjaCA9IDA7CS8qIGluaXRpYWwgaGVhZCBiYXRjaCAqLwpAQCAtMTA3LDkgKzExMiwxMiBAQCBp bmRleF9iYXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIGJvb2wgY29tcGxldGUpCiAJYmF0 Y2hfYXNzZXJ0X2JhdGNoZXNfdmFsaWQoc2Nhbik7CiAJYmF0Y2hfZGVidWdfcHJpbnRfYmF0Y2hl cygiaW5kZXhfYmF0Y2hfcmVzZXQiLCBzY2FuKTsKIAlBc3NlcnQoc2Nhbi0+eHNfaGVhcGZldGNo KTsKKwlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoLT5ycykKKwkJcmVhZF9zdHJlYW1fcmVzZXQoc2Nh bi0+eHNfaGVhcGZldGNoLT5ycyk7CiAKIAkvKiByZXNldCB0aGUgcG9zaXRpb25zICovCiAJYmF0 Y2hfcmVzZXRfcG9zKCZyaW5nYnVmLT5zY2FuUG9zKTsKKwliYXRjaF9yZXNldF9wb3MoJnJpbmdi dWYtPnByZWZldGNoUG9zKTsKIAogCS8qCiAJICogV2l0aCAiY29tcGxldGUiIHJlc2V0LCBtYWtl IHN1cmUgdG8gYWxzbyBmcmVlIHRoZSBtYXJrZWQgYmF0Y2gsIGVpdGhlcgpAQCAtMTUzLDYgKzE2 MSw4IEBAIGluZGV4X2JhdGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgYm9vbCBjb21wbGV0 ZSkKIAlyaW5nYnVmLT5uZXh0QmF0Y2ggPSAwOwkJLyogaW5pdGlhbCBiYXRjaCBpcyBlbXB0eSAq LwogCiAJc2Nhbi0+ZmluaXNoZWQgPSBmYWxzZTsKKwlyaW5nYnVmLT5yZXNldCA9IGZhbHNlOwor CXJpbmdidWYtPmN1cnJlbnRQcmVmZXRjaEJsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCiAJ YmF0Y2hfYXNzZXJ0X2JhdGNoZXNfdmFsaWQoc2Nhbik7CiB9CkBAIC0yMTMsOSArMjIzLDEzIEBA IGluZGV4X2JhdGNoX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKIAlCYXRjaFJp bmdCdWZmZXIgKnJpbmdidWYgPSBzY2FuLT5yaW5nYnVmOwogCUJhdGNoUmluZ0l0ZW1Qb3MgKm1h cmtQb3MgPSAmcmluZ2J1Zi0+bWFya1BvczsKLQlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0g JnJpbmdidWYtPnNjYW5Qb3MgOwogCUJhdGNoSW5kZXhTY2FuIG1hcmtCYXRjaCA9IHJpbmdidWYt Pm1hcmtCYXRjaDsKIAorCS8qCisJICogWFhYIERpc2FibGUgdGhpcyBvcHRpbWl6YXRpb24gd2hl biBJL08gcHJlZmV0Y2hpbmcgaXMgaW4gdXNlLCBhdCBsZWFzdAorCSAqIHVudGlsIHRoZSBwb3Nz aWJsZSBpbnRlcmFjdGlvbnMgd2l0aCBwcmVmZXRjaFBvcyBhcmUgZnVsbHkgdW5kZXJzdG9vZC4K KwkgKi8KKyNpZiAwCiAJaWYgKHNjYW5Qb3MtPmJhdGNoID09IG1hcmtQb3MtPmJhdGNoICYmCiAJ CXNjYW5Qb3MtPmJhdGNoID09IHJpbmdidWYtPmhlYWRCYXRjaCkKIAl7CkBAIC0yMjYsNiArMjQw LDcgQEAgaW5kZXhfYmF0Y2hfcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQlzY2Fu UG9zLT5pdGVtID0gbWFya1Bvcy0+aXRlbTsKIAkJcmV0dXJuOwogCX0KKyNlbmRpZgogCiAJLyoK IAkgKiBDYWxsIGFtcG9zcmVzZXQgdG8gbGV0IGluZGV4IEFNIGtub3cgdG8gaW52YWxpZGF0ZSBh bnkgcHJpdmF0ZSBzdGF0ZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv Y29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXgg MTZiZjFmNjFhLi4yM2U3YzBhMmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUu YwpAQCAtMTQ0LDYgKzE0NCw3IEBAIGludAkJCW1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRo ZXIgPSAyOwogCiBib29sCQllbmFibGVfc2Vxc2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfaW5k ZXhzY2FuID0gdHJ1ZTsKK2Jvb2wJCWVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2ggPSB0cnVlOwog Ym9vbAkJZW5hYmxlX2luZGV4b25seXNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX2JpdG1hcHNj YW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX3RpZHNjYW4gPSB0cnVlOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL3JlYWRfc3RyZWFtLmMKaW5kZXggODg3MTdjMmZmLi43NDYzNjUxZTAgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwpAQCAtOTksNiArOTksNyBAQCBzdHJ1Y3QgUmVhZFN0 cmVhbQogCWludDE2CQlmb3J3YXJkZWRfYnVmZmVyczsKIAlpbnQxNgkJcGlubmVkX2J1ZmZlcnM7 CiAJaW50MTYJCWRpc3RhbmNlOworCWludDE2CQlkaXN0YW5jZV9vbGQ7CiAJaW50MTYJCWluaXRp YWxpemVkX2J1ZmZlcnM7CiAJaW50CQkJcmVhZF9idWZmZXJzX2ZsYWdzOwogCWJvb2wJCXN5bmNf bW9kZTsJCS8qIHVzaW5nIGlvX21ldGhvZD1zeW5jICovCkBAIC00NjQsNiArNDY1LDcgQEAgcmVh ZF9zdHJlYW1fbG9va19haGVhZChSZWFkU3RyZWFtICpzdHJlYW0pCiAJCWlmIChibG9ja251bSA9 PSBJbnZhbGlkQmxvY2tOdW1iZXIpCiAJCXsKIAkJCS8qIEVuZCBvZiBzdHJlYW0uICovCisJCQlz dHJlYW0tPmRpc3RhbmNlX29sZCA9IHN0cmVhbS0+ZGlzdGFuY2U7CiAJCQlzdHJlYW0tPmRpc3Rh bmNlID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC04NjIsNiArODY0LDcgQEAgcmVhZF9zdHJlYW1f bmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQog CQllbHNlCiAJCXsKIAkJCS8qIE5vIG1vcmUgYmxvY2tzLCBlbmQgb2Ygc3RyZWFtLiAqLworCQkJ c3RyZWFtLT5kaXN0YW5jZV9vbGQgPSBzdHJlYW0tPmRpc3RhbmNlOwogCQkJc3RyZWFtLT5kaXN0 YW5jZSA9IDA7CiAJCQlzdHJlYW0tPm9sZGVzdF9idWZmZXJfaW5kZXggPSBzdHJlYW0tPm5leHRf YnVmZmVyX2luZGV4OwogCQkJc3RyZWFtLT5waW5uZWRfYnVmZmVycyA9IDA7CkBAIC0xMDQ2LDYg KzEwNDksOSBAQCByZWFkX3N0cmVhbV9yZXNldChSZWFkU3RyZWFtICpzdHJlYW0pCiAJaW50MTYJ CWluZGV4OwogCUJ1ZmZlcgkJYnVmZmVyOwogCisJLyogcmVtZW1iZXIgdGhlIG9sZCBkaXN0YW5j ZSAoaWYgd2UgcmVzZXQgYmVmb3JlIGVuZCBvZiB0aGUgc3RyZWFtKSAqLworCXN0cmVhbS0+ZGlz dGFuY2Vfb2xkID0gTWF4KHN0cmVhbS0+ZGlzdGFuY2UsIHN0cmVhbS0+ZGlzdGFuY2Vfb2xkKTsK KwogCS8qIFN0b3AgbG9va2luZyBhaGVhZC4gKi8KIAlzdHJlYW0tPmRpc3RhbmNlID0gMDsKIApA QCAtMTA3OCw4ICsxMDg0LDEyIEBAIHJlYWRfc3RyZWFtX3Jlc2V0KFJlYWRTdHJlYW0gKnN0cmVh bSkKIAlBc3NlcnQoc3RyZWFtLT5waW5uZWRfYnVmZmVycyA9PSAwKTsKIAlBc3NlcnQoc3RyZWFt LT5pb3NfaW5fcHJvZ3Jlc3MgPT0gMCk7CiAKLQkvKiBTdGFydCBvZmYgYXNzdW1pbmcgZGF0YSBp cyBjYWNoZWQuICovCi0Jc3RyZWFtLT5kaXN0YW5jZSA9IDE7CisJLyoKKwkgKiBSZXN0b3JlIHRo ZSBvbGQgZGlzdGFuY2UsIGlmIHdlIGhhdmUgb25lLiBPdGhlcndpc2Ugc3RhcnQgYXNzdW1pbmcg ZGF0YQorCSAqIGlzIGNhY2hlZC4KKwkgKi8KKwlzdHJlYW0tPmRpc3RhbmNlID0gTWF4KDEsIHN0 cmVhbS0+ZGlzdGFuY2Vfb2xkKTsKKwlzdHJlYW0tPmRpc3RhbmNlX29sZCA9IDA7CiB9CiAKIC8q CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCBi L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4IDdjNjBiMTI1 NS4uYTk5YWE0MWRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJh bWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRh dApAQCAtODkxLDYgKzg5MSwxMyBAQAogICBib290X3ZhbCA9PiAndHJ1ZScsCiB9LAogCit7IG5h bWUgPT4gJ2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gnLCB0eXBlID0+ICdib29sJywgY29udGV4 dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCisgIHNo b3J0X2Rlc2MgPT4gJ0VuYWJsZXMgcHJlZmV0Y2hpbmcgZm9yIGluZGV4IHNjYW5zIGFuZCBpbmRl eC1vbmx5LXNjYW5zLicsCisgIGZsYWdzID0+ICdHVUNfRVhQTEFJTicsCisgIHZhcmlhYmxlID0+ ICdlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoJywKKyAgYm9vdF92YWwgPT4gJ3RydWUnLAorfSwK KwogeyBuYW1lID0+ICdlbmFibGVfbWF0ZXJpYWwnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9 PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCiAgIHNob3J0 X2Rlc2MgPT4gJ0VuYWJsZXMgdGhlIHBsYW5uZXJcJ3MgdXNlIG9mIG1hdGVyaWFsaXphdGlvbi4n LAogICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IGRjOWUyMjU1Zi4uZGE1MGFlMTVmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC00MTIsNiAr NDEyLDcgQEAKICNlbmFibGVfaW5jcmVtZW50YWxfc29ydCA9IG9uCiAjZW5hYmxlX2luZGV4c2Nh biA9IG9uCiAjZW5hYmxlX2luZGV4b25seXNjYW4gPSBvbgorI2VuYWJsZV9pbmRleHNjYW5fcHJl ZmV0Y2ggPSBvbgogI2VuYWJsZV9tYXRlcmlhbCA9IG9uCiAjZW5hYmxlX21lbW9pemUgPSBvbgog I2VuYWJsZV9tZXJnZWpvaW4gPSBvbgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91 dAppbmRleCAzZGQ2M2ZkODguLmI1NjI4NzM2YiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z eXN2aWV3cy5vdXQKQEAgLTE1OSw2ICsxNTksNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9t IHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX2luY3JlbWVu dGFsX3NvcnQgICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhvbmx5c2NhbiAgICAgICAgICAgfCBv bgogIGVuYWJsZV9pbmRleHNjYW4gICAgICAgICAgICAgICB8IG9uCisgZW5hYmxlX2luZGV4c2Nh bl9wcmVmZXRjaCAgICAgIHwgb24KICBlbmFibGVfbWF0ZXJpYWwgICAgICAgICAgICAgICAgfCBv bgogIGVuYWJsZV9tZW1vaXplICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX21lcmdlam9p biAgICAgICAgICAgICAgIHwgb24KQEAgLTE3Myw3ICsxNzQsNyBAQCBzZWxlY3QgbmFtZSwgc2V0 dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxl X3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfc29ydCAgICAgICAgICAgICAg ICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAgICAgICB8IG9uCi0oMjUgcm93 cykKKygyNiByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZlbnQgZGVzY3JpcHRp b25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9pbnQKIC0tIG1heSBiZSBwcmVzZW50 IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2luY2UgbGFzdCBwb3N0bWFzdGVyIHN0 YXJ0LgotLSAKMi41MS4wCgo= --000000000000d0029506484af358 Content-Type: application/octet-stream; name="v7-0003-bufmgr-aio-Prototype-for-not-waiting-for-already-.patch" Content-Disposition: attachment; filename="v7-0003-bufmgr-aio-Prototype-for-not-waiting-for-already-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkd1epet2 RnJvbSBmZTE4NDkzMzM4MzE2M2Q4OWQ4NTlmZTdjZjc1OTcwNDYyNmMxMTU0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IEZyaSwgMTUgQXVnIDIwMjUgMTE6MDE6NTIgLTA0MDAKU3ViamVjdDogW1BBVENIIHY3IDMv NF0gYnVmbWdyOiBhaW86IFByb3RvdHlwZSBmb3Igbm90IHdhaXRpbmcgZm9yCiBhbHJlYWR5LWlu LXByb2dyZXNzIElPCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tL3psamVyZ3dlcXRpN3g2N2xnNWlqZTJyemp1c2llMzduc2xzbmtqa2tieTRsYXFx YmZ3QDNwM3p1NTIyeXlrdgpCYWNrcGF0Y2g6Ci0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZt Z3IuaCAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg fCAxNTAgKysrKysrKysrKysrKysrKysrKysrKysrKystLQogMiBmaWxlcyBjaGFuZ2VkLCAxNDIg aW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRleCA3MTVh ZTk2ZjAuLjBiNmZhODQ4YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0xNDcsNiArMTQ3LDcgQEAg c3RydWN0IFJlYWRCdWZmZXJzT3BlcmF0aW9uCiAJaW50CQkJZmxhZ3M7CiAJaW50MTYJCW5ibG9j a3M7CiAJaW50MTYJCW5ibG9ja3NfZG9uZTsKKwlib29sCQlmb3JlaWduX2lvOwogCVBnQWlvV2Fp dFJlZiBpb193cmVmOwogCVBnQWlvUmV0dXJuIGlvX3JldHVybjsKIH07CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCmluZGV4IGEwMzZjMmFhMi4uZDNkZDY0ODA4IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtMTYzMiw2ICsxNjMyLDQ2IEBAIFJlYWRCdWZmZXJzQ2Fu U3RhcnRJT09uY2UoQnVmZmVyIGJ1ZmZlciwgYm9vbCBub3dhaXQpCiAJCXJldHVybiBTdGFydEJ1 ZmZlcklPKEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSksIHRydWUsIG5vd2FpdCk7CiB9 CiAKKy8qCisgKiBDaGVjayBpZiB0aGUgYnVmZmVyIGlzIGFscmVhZHkgdW5kZXJnb2luZyByZWFk IEFJTy4gSWYgaXQgaXMsIGFzc2lnbiB0aGUKKyAqIElPJ3Mgd2FpdCByZWZlcmVuY2UgdG8gb3Bl cmF0aW9uLT5pb193cmVmLCB0aGVyZWJ5IGFsbG93aW5nIHRoZSBjYWxsZXIgdG8KKyAqIHdhaXQg Zm9yIHRoYXQgSU8uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorUmVhZEJ1ZmZlcnNJT0FscmVh ZHlJblByb2dyZXNzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIEJ1ZmZlciBidWZm ZXIpCit7CisJQnVmZmVyRGVzYyAqZGVzYzsKKwl1aW50MzIJCWJ1Zl9zdGF0ZTsKKwlQZ0Fpb1dh aXRSZWYgaW93OworCisJcGdhaW9fd3JlZl9jbGVhcigmaW93KTsKKworCWlmIChCdWZmZXJJc0xv Y2FsKGJ1ZmZlcikpCisJeworCQlkZXNjID0gR2V0TG9jYWxCdWZmZXJEZXNjcmlwdG9yKC1idWZm ZXIgLSAxKTsKKwkJYnVmX3N0YXRlID0gcGdfYXRvbWljX3JlYWRfdTMyKCZkZXNjLT5zdGF0ZSk7 CisJCWlmICgoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JFU1MpICYmICEoYnVmX3N0YXRlICYg Qk1fVkFMSUQpKQorCQkJaW93ID0gZGVzYy0+aW9fd3JlZjsKKwl9CisJZWxzZQorCXsKKwkJZGVz YyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSk7CisJCWJ1Zl9zdGF0ZSA9IExvY2tC dWZIZHIoZGVzYyk7CisKKwkJaWYgKChidWZfc3RhdGUgJiBCTV9JT19JTl9QUk9HUkVTUykgJiYg IShidWZfc3RhdGUgJiBCTV9WQUxJRCkpCisJCQlpb3cgPSBkZXNjLT5pb193cmVmOworCQlVbmxv Y2tCdWZIZHIoZGVzYyk7CisJfQorCisJaWYgKHBnYWlvX3dyZWZfdmFsaWQoJmlvdykpCisJewor CQlvcGVyYXRpb24tPmlvX3dyZWYgPSBpb3c7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVy biBmYWxzZTsKK30KKwogLyoKICAqIEhlbHBlciBmb3IgQXN5bmNSZWFkQnVmZmVycyB0aGF0IHRy aWVzIHRvIGdldCB0aGUgYnVmZmVyIHJlYWR5IGZvciBJTy4KICAqLwpAQCAtMTc2NCw3ICsxODA0 LDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJ CQkgKgogCQkJICogd2UgZmlyc3QgY2hlY2sgaWYgd2UgYWxyZWFkeSBrbm93IHRoZSBJTyBpcyBj b21wbGV0ZS4KIAkJCSAqLwotCQkJaWYgKGFpb19yZXQtPnJlc3VsdC5zdGF0dXMgPT0gUEdBSU9f UlNfVU5LTk9XTiAmJgorCQkJaWYgKChvcGVyYXRpb24tPmZvcmVpZ25faW8gfHwgYWlvX3JldC0+ cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19VTktOT1dOKSAmJgogCQkJCSFwZ2Fpb193cmVmX2No ZWNrX2RvbmUoJm9wZXJhdGlvbi0+aW9fd3JlZikpCiAJCQl7CiAJCQkJaW5zdHJfdGltZQlpb19z dGFydCA9IHBnc3RhdF9wcmVwYXJlX2lvX3RpbWUodHJhY2tfaW9fdGltaW5nKTsKQEAgLTE3ODMs MTEgKzE4MjMsNjYgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVy YXRpb24pCiAJCQkJQXNzZXJ0KHBnYWlvX3dyZWZfY2hlY2tfZG9uZSgmb3BlcmF0aW9uLT5pb193 cmVmKSk7CiAJCQl9CiAKLQkJCS8qCi0JCQkgKiBXZSBub3cgYXJlIHN1cmUgdGhlIElPIGNvbXBs ZXRlZC4gQ2hlY2sgdGhlIHJlc3VsdHMuIFRoaXMKLQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBv biBlcnJvcnMgaWYgdGhlcmUgd2VyZSBhbnkuCi0JCQkgKi8KLQkJCVByb2Nlc3NSZWFkQnVmZmVy c1Jlc3VsdChvcGVyYXRpb24pOworCQkJaWYgKHVubGlrZWx5KG9wZXJhdGlvbi0+Zm9yZWlnbl9p bykpCisJCQl7CisJCQkJQnVmZmVyCQlidWZmZXIgPSBvcGVyYXRpb24tPmJ1ZmZlcnNbb3BlcmF0 aW9uLT5uYmxvY2tzX2RvbmVdOworCQkJCUJ1ZmZlckRlc2MgKmRlc2M7CisJCQkJdWludDMyCQli dWZfc3RhdGU7CisKKwkJCQlpZiAoQnVmZmVySXNMb2NhbChidWZmZXIpKQorCQkJCXsKKwkJCQkJ ZGVzYyA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSk7CisJCQkJCWJ1Zl9z dGF0ZSA9IHBnX2F0b21pY19yZWFkX3UzMigmZGVzYy0+c3RhdGUpOworCQkJCX0KKwkJCQllbHNl CisJCQkJeworCQkJCQlkZXNjID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIgLSAxKTsKKwkJ CQkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNjKTsKKwkJCQkJVW5sb2NrQnVmSGRyKGRlc2Mp OworCQkJCX0KKworCQkJCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwkJCQl7CisJCQkJCW9w ZXJhdGlvbi0+bmJsb2Nrc19kb25lICs9IDE7CisJCQkJCUFzc2VydChvcGVyYXRpb24tPm5ibG9j a3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkJCS8qCisJCQkJCSAqIFJlcG9y dCBhbmQgdHJhY2sgdGhpcyBhcyBhICdoaXQnIGZvciB0aGlzIGJhY2tlbmQsIGV2ZW4KKwkJCQkJ ICogdGhvdWdoIGl0IG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3MgaW4KKwkJCQkJICog UGluQnVmZmVyRm9yQmxvY2soKS4gVGhlIG90aGVyIGJhY2tlbmQgKG9yIG91cnNlbHZlcywKKwkJ CQkJICogYXMgcGFydCBvZiBhIHJlYWQgc3RhcnRlZCBlYXJsaWVyKSB3aWxsIHRyYWNrIHRoaXMg YXMgYQorCQkJCQkgKiAncmVhZCcuCisJCQkJCSAqLworCQkJCQlUUkFDRV9QT1NUR1JFU1FMX0JV RkZFUl9SRUFEX0RPTkUob3BlcmF0aW9uLT5mb3JrbnVtLAorCQkJCQkJCQkJCQkJCSAgb3BlcmF0 aW9uLT5ibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lLAorCQkJCQkJCQkJCQkJCSAg b3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJ CQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJ CQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1i ZXIsCisJCQkJCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IuYmFja2Vu ZCwKKwkJCQkJCQkJCQkJCQkgIHRydWUpOworCisJCQkJCWlmIChCdWZmZXJJc0xvY2FsKGJ1ZmZl cikpCisJCQkJCQlwZ0J1ZmZlclVzYWdlLmxvY2FsX2Jsa3NfaGl0ICs9IDE7CisJCQkJCWVsc2UK KwkJCQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0ICs9IDE7CisKKwkJCQkJaWYgKG9w ZXJhdGlvbi0+cmVsKQorCQkJCQkJcGdzdGF0X2NvdW50X2J1ZmZlcl9oaXQob3BlcmF0aW9uLT5y ZWwpOworCisJCQkJCXBnc3RhdF9jb3VudF9pb19vcChpb19vYmplY3QsIGlvX2NvbnRleHQsIElP T1BfSElULCAxLCAwKTsKKworCQkJCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKKwkJCQkJCVZhY3V1 bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OworCQkJCX0KKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29tcGxldGVkLiBD aGVjayB0aGUgcmVzdWx0cy4gVGhpcworCQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBvbiBlcnJv cnMgaWYgdGhlcmUgd2VyZSBhbnkuCisJCQkJICovCisJCQkJUHJvY2Vzc1JlYWRCdWZmZXJzUmVz dWx0KG9wZXJhdGlvbik7CisJCQl9CiAJCX0KIAogCQkvKgpAQCAtMTg3Myw2ICsxOTY4LDQzIEBA IEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpu YmxvY2tzX3Byb2dyZXNzKQogCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKIAl9CiAK KwkvKgorCSAqIElmIEFJTyBpcyBpbiBwcm9ncmVzcywgYmUgaXQgaW4gdGhpcyBiYWNrZW5kIG9y IGFub3RoZXIgYmFja2VuZCwgd2UKKwkgKiBqdXN0IGFzc29jaWF0ZSB0aGUgd2FpdCByZWZlcmVu Y2Ugd2l0aCB0aGUgb3BlcmF0aW9uIGFuZCB3YWl0IGluCisJICogV2FpdFJlYWRCdWZmZXJzKCku IFRoaXMgdHVybnMgb3V0IHRvIGJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2UgaW4KKwkgKiB0 d28gd29ya2xvYWRzOgorCSAqCisJICogMSkgQSByZWFkIHN0cmVhbSB0aGF0IGhhcyB0byByZWFk IHRoZSBzYW1lIGJsb2NrIG11bHRpcGxlIHRpbWVzIHdpdGhpbgorCSAqIHRoZSByZWFkYWhlYWQg ZGlzdGFuY2UuIFRoaXMgY2FuIGhhcHBlbiBlLmcuIGZvciB0aGUgdGFibGUgYWNjZXNzZXMgb2YK KwkgKiBhbiBpbmRleCBzY2FuLgorCSAqCisJICogMikgQ29uY3VycmVudCBzY2FucyBieSBtdWx0 aXBsZSBiYWNrZW5kcyBvbiB0aGUgc2FtZSByZWxhdGlvbi4KKwkgKgorCSAqIElmIHdlIHdlcmUg dG8gc3luY2hyb25vdXNseSB3YWl0IGZvciB0aGUgaW4tcHJvZ3Jlc3MgSU8sIHdlJ2Qgbm90IGJl CisJICogYWJsZSB0byBrZWVwIGVub3VnaCBJL08gaW4gZmxpZ2h0LgorCSAqCisJICogSWYgd2Ug ZG8gZmluZCB0aGVyZSBpcyBvbmdvaW5nIEkvTyBmb3IgdGhlIGJ1ZmZlciwgd2Ugc2V0IHVwIGEg MS1ibG9jaworCSAqIFJlYWRCdWZmZXJzT3BlcmF0aW9uIHRoYXQgV2FpdFJlYWRCdWZmZXJzIHRo ZW4gY2FuIHdhaXQgb24uCisJICoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgYW5vdGhlciBiYWNr ZW5kIHN0YXJ0cyBJTyBvbiB0aGUgYnVmZmVyIGJldHdlZW4gdGhpcworCSAqIGNoZWNrIGFuZCB0 aGUgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKG5vd2FpdCA9IGZhbHNlKSBiZWxvdy4gSW4gdGhhdCBj YXNlCisJICogd2Ugd2lsbCBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRoZSBJTyBiZWxvdywgYnV0 IHRoZSB3aW5kb3cgZm9yIHRoYXQgaXMKKwkgKiBzbWFsbCBlbm91Z2ggdGhhdCBpdCB3b24ndCBo YXBwZW4gb2Z0ZW4gZW5vdWdoIHRvIGhhdmUgYSBzaWduaWZpY2FudAorCSAqIHBlcmZvcm1hbmNl IGltcGFjdC4KKwkgKi8KKwlpZiAoUmVhZEJ1ZmZlcnNJT0FscmVhZHlJblByb2dyZXNzKG9wZXJh dGlvbiwgYnVmZmVyc1tuYmxvY2tzX2RvbmVdKSkKKwl7CisJCSpuYmxvY2tzX3Byb2dyZXNzID0g MTsKKwkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKworCQlDaGVja1JlYWRCdWZmZXJz T3BlcmF0aW9uKG9wZXJhdGlvbiwgZmFsc2UpOworCisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJ b3BlcmF0aW9uLT5mb3JlaWduX2lvID0gZmFsc2U7CisKIAkvKgogCSAqIElmIHplcm9fZGFtYWdl ZF9wYWdlcyBpcyBlbmFibGVkLCBhZGQgdGhlIFJFQURfQlVGRkVSU19aRVJPX09OX0VSUk9SCiAJ ICogZmxhZy4gVGhlIHJlYXNvbiBmb3IgdGhhdCBpcyB0aGF0LCBob3BlZnVsbHksIHplcm9fZGFt YWdlZF9wYWdlcyBpc24ndApAQCAtMTkzMCw5ICsyMDYyLDkgQEAgQXN5bmNSZWFkQnVmZmVycyhS ZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJ LyoKIAkgKiBDaGVjayBpZiB3ZSBjYW4gc3RhcnQgSU8gb24gdGhlIGZpcnN0IHRvLWJlLXJlYWQg YnVmZmVyLgogCSAqCi0JICogSWYgYW4gSS9PIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MgaW4gYW5v dGhlciBiYWNrZW5kLCB3ZSB3YW50IHRvIHdhaXQKLQkgKiBmb3IgdGhlIG91dGNvbWU6IGVpdGhl ciBkb25lLCBvciBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugd2lsbAotCSAqIHJldHJ5Lgor CSAqIElmIGEgc3luY2hyb25vdXMgSS9PIGlzIGluIHByb2dyZXNzIGluIGFub3RoZXIgYmFja2Vu ZCAoaXQgY2FuJ3QgYmUKKwkgKiB0aGlzIGJhY2tlbmQpLCB3ZSB3YW50IHRvIHdhaXQgZm9yIHRo ZSBvdXRjb21lOiBlaXRoZXIgZG9uZSwgb3IKKwkgKiBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQg d2Ugd2lsbCByZXRyeS4KIAkgKi8KIAlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJz W25ibG9ja3NfZG9uZV0sIGZhbHNlKSkKIAl7Ci0tIAoyLjUxLjAKCg== --000000000000d0029506484af358 Content-Type: application/octet-stream; name="v7-0001-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Disposition: attachment; filename="v7-0001-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkd1epea0 RnJvbSBhNjI2MTdiZjhlZjAwYWViNzBkMTkzZDgyMDEyOGE4NmY3NjNmNjUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjcgMS80XSBBZGQg YmF0Y2hpbmcgaW50ZXJmYWNlcyB1c2VkIGJ5IGhlYXBhbSBhbmQgbmJ0cmVlLgoKQWRkIGEgbmV3 IGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGluZGV4IGFjY2VzcyBt ZXRob2RzCnRvIGltcGxlbWVudCBwbGFpbi9vcmRlcmVkIGluZGV4IHNjYW5zIHRoYXQgcmV0dXJu IGluZGV4IGVudHJpZXMgaW4KcGVyLWxlYWYtcGFnZSBiYXRjaGVzLCByYXRoZXIgdGhhbiBvbmUg YXQgYSB0aW1lLiAgVGhpcyBlbmFibGVzIGEKdmFyaWV0eSBvZiBvcHRpbWl6YXRpb25zIG9uIHRo ZSB0YWJsZSBBTSBzaWRlLCBtb3N0IG5vdGFibHkgSS9PCnByZWZldGNoaW5nIG9mIGhlYXAgdHVw bGVzIGR1cmluZyBvcmRlcmVkIGluZGV4IHNjYW5zLiAgSXQgd2lsbCBhbHNvCmVuYWJsZSBhbiBv cHRpbWl6YXRpb24gdGhhdCBoYXMgaGVhcGFtIGF2b2lkIHJlcGVhdGVkbHkgbG9ja2luZyBhbmQK dW5sb2NraW5nIHRoZSBzYW1lIGhlYXAgcGFnZSdzIGJ1ZmZlci4KCkluZGV4IGFjY2VzcyBtZXRo b2RzIHRoYXQgc3VwcG9ydCBwbGFpbiBpbmRleCBzY2FucyBtdXN0IG5vdyBpbXBsZW1lbnQKZWl0 aGVyIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZSBPUiB0aGUgYW1nZXR0dXBsZSBpbnRlcmZhY2Uu ICBUaGUKYW1nZXR0dXBsZSBpbnRlcmZhY2Ugd2lsbCBzdGlsbCBiZSB1c2VkIGJ5IGluZGV4IEFN cyB0aGF0IHJlcXVpcmUgZGlyZWN0CmNvbnRyb2wgb3ZlciB0aGUgcHJvZ3Jlc3Mgb2YgaW5kZXgg c2NhbnMgKGUuZy4sIEdpU1Qgd2l0aCBLTk4gb3JkZXJlZApzY2FucykuCgpUaGlzIGNvbW1pdCBh bHNvIGFkZHMgYSBuZXcgdGFibGUgQU0gaW50ZXJmYWNlIGNhbGxiYWNrLCBjYWxsZWQgYnkgdGhl CmNvcmUgZXhlY3V0b3IgdGhyb3VnaCB0aGUgbmV3IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBz aGltIGZ1bmN0aW9uLgpUaGlzIGFsbG93cyB0aGUgdGFibGUgQU0gdG8gZGlyZWN0bHkgbWFuYWdl IHRoZSBwcm9ncmVzcyBvZiBpbmRleCBzY2FucwpyYXRoZXIgdGhhbiBoYXZpbmcgaW5kaXZpZHVh bCBUSURzIHBhc3NlZCBpbiBieSB0aGUgY2FsbGVyLiBUaGUKYW1nZXRiYXRjaCBpbnRlcmZhY2Ug aXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIG5ldyBhcHByb2FjaCB0byBvcmRlcmVkCmluZGV4 IHNjYW5zIGFkZGVkIHRvIHRoZSB0YWJsZSBBTS4gIFRoZSB0YWJsZSBBTSBjYW4gYXBwbHkga25v d2xlZGdlIG9mCndoaWNoIFRJRHMgd2lsbCBiZSByZXR1cm5lZCB0byBzY2FuIGluIHRoZSBuZWFy IGZ1dHVyZSB0byBvcHRpbWl6ZSBhbmQKYmF0Y2ggdGFibGUgQU0gYmxvY2sgYWNjZXNzZXMsIGFu ZCB0byBwZXJmb3JtIEkvTyBwcmVmZXRjaGluZy4gIFRoZXNlCm9wdGltaXphdGlvbnMgYXJlIGxl ZnQgYXMgd29yayBmb3IgbGF0ZXIgY29tbWl0cy4KCkJhdGNoZXMgcmV0dXJuZWQgZnJvbSBhbWdl dGJhdGNoIGFyZSBndWFyYW50ZWVkIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhbgppbmRleCBwYWdl IGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIHR1cGxlLiAgVGhlIGFtZ2V0YmF0Y2gK aW50ZXJmYWNlIG1heSBob2xkIGJ1ZmZlciBwaW5zIGFzIGludGVybG9ja3MgYWdhaW5zdCBjb25j dXJyZW50IFRJRApyZWN5Y2xpbmcgYnkgVkFDVVVNLiAgVGhpcyBleHRlbmRzL2dlbmVyYWxpemVz IHRoZSBtZWNoYW5pc20gYWRkZWQgdG8KbmJ0cmVlIGJ5IGNvbW1pdCAyZWQ1Yjg3ZiB0byBhbGwg aW5kZXggQU1zIHRoYXQgYWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcKYW1nZXRiYXRjaCBpbnRlcmZh Y2UuCgpBdXRob3I6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpBdXRob3I6IFBldGVy IEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJl c0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtQnk6IFRob21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdt YWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZjg1ZjQ2Zi1iMDJmLTA1 YjItNTI0OC01MDAwYjg5NGViYWJAZW50ZXJwcmlzZWRiLmNvbQpEaXNjdXNzaW9uOiBodHRwczov L3Bvc3Rnci5lcy9tL2VmYWMzMjM4LTZmMzQtNDFlYS1hMzkzLTI2Y2MwNDQxYjUwNiU0MHZvbmRy YS5tZQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3prOSUzRHglM0RhMlRi Y3FZY1glMkJYWG1ESFFyNSUzRDF2OW00Wl92OGEtS3dGMVpvejBBJTQwbWFpbC5nbWFpbC5jb20K LS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAgICAgICAgICAgICAgICAgICAgfCAgMjIg Ky0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAgICAgICAgICAgICB8ICAyNCAr LQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgICAzICsK IHNyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCAgICAgICAgICAgICAgICAgICB8IDE3NiArKy0t LS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgICAgICB8IDI1MiAr KysrKysrLQogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAgICAgICAgIHwg IDQxICsrCiBzcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaCAgICAgICAgfCAg IDYgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwgICAy IC0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgMiAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwgICA1ICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jICAgICAgICAgICAgICAgfCAgIDYgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jICAgICAgICAgICAgICB8ICAgNSArLQog c3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAgICAgICAgICAgICAgIHwgICA1ICstCiBz cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgICB8IDU2MyArKysrKysr KysrKysrKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlICAgICAgICAgICAg IHwgICAzICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAgICAgICAgICAg fCAgMTUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgICAgICAgICAgICB8 IDEzNSArKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jICAgICAgICAg fCA1ODkgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24u YnVpbGQgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUg ICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2Uu YyAgICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFn ZS5jICAgICAgIHwgMTk1ICsrKy0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUu YyAgICAgICAgICAgIHwgMjk5ICsrKy0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRzZWFyY2guYyAgICAgICAgIHwgNTEwICsrKysrKy0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnR1dGlscy5jICAgICAgICAgIHwgIDkzICstLQogc3JjL2JhY2tlbmQvYWNj ZXNzL3NwZ2lzdC9zcGd1dGlscy5jICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFja2VuZC9jb21t YW5kcy9leHBsYWluLmMgICAgICAgICAgICAgICAgfCAgMjMgKy0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2luZGV4Y21kcy5jICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0FtaS5jICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRv ci9leGVjSW5kZXhpbmcuYyAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNSZXBsaWNhdGlvbi5jICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUJpdG1hcEluZGV4c2Nhbi5jICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVJbmRleG9ubHlzY2FuLmMgICAgICB8IDEwOCArLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9u b2RlSW5kZXhzY2FuLmMgICAgICAgICAgfCAgMTMgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2luZHhwYXRoLmMgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGxhbmNhdC5jICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3JlbGF0aW9uLmMgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0 aWxzLmMgICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1 bmNzLmMgICAgICAgICAgICAgIHwgIDY4ICstCiBjb250cmliL2Jsb29tL2JsdXRpbHMuYyAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgICAg ICAgICAgICAgICAgICAgICB8IDMxMSArKysrKysrLS0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRl X3RhYmxlLnNnbWwgICAgICAgICAgICB8ICAxMyArLQogLi4uL21vZHVsZXMvZHVtbXlfaW5kZXhf YW0vZHVtbXlfaW5kZXhfYW0uYyAgIHwgICA1ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgICAgICAgICAgfCAgIDQgLQogNDUgZmlsZXMgY2hhbmdlZCwgMjMxOSBpbnNl cnRpb25zKCspLCAxMjQwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvYW1hcGkuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCmluZGV4IGVjZmJkMDE3 ZC4uOTYyYzcwZjQzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAorKysg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaApAQCAtMTk4LDYgKzE5OCwxNSBAQCB0eXBlZGVm IHZvaWQgKCphbXJlc2Nhbl9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIHR5cGVkZWYg Ym9vbCAoKmFtZ2V0dHVwbGVfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJ CQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOwogCisvKiBuZXh0IGJhdGNoIG9mIHZhbGlkIHR1 cGxlcyAqLwordHlwZWRlZiBCYXRjaEluZGV4U2NhbiAoKmFtZ2V0YmF0Y2hfZnVuY3Rpb24pIChJ bmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCSAgIEJhdGNoSW5kZXhTY2FuIHByaW9yYmF0 Y2gsCisJCQkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKKworLyogcmVsZWFz ZSBiYXRjaCBvZiB2YWxpZCB0dXBsZXMgKi8KK3R5cGVkZWYgdm9pZCAoKmFtZnJlZWJhdGNoX2Z1 bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJICBCYXRjaEluZGV4U2NhbiBi YXRjaCk7CisKIC8qIGZldGNoIGFsbCB2YWxpZCB0dXBsZXMgKi8KIHR5cGVkZWYgaW50NjQgKCph bWdldGJpdG1hcF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSAgIFRJ REJpdG1hcCAqdGJtKTsKQEAgLTIwNSwxMSArMjE0LDkgQEAgdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0 Yml0bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogLyogZW5kIGluZGV4IHNjYW4g Ki8KIHR5cGVkZWYgdm9pZCAoKmFtZW5kc2Nhbl9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nh bik7CiAKLS8qIG1hcmsgY3VycmVudCBzY2FuIHBvc2l0aW9uICovCi10eXBlZGVmIHZvaWQgKCph bW1hcmtwb3NfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4pOwotCi0vKiByZXN0b3JlIG1h cmtlZCBzY2FuIHBvc2l0aW9uICovCi10eXBlZGVmIHZvaWQgKCphbXJlc3RycG9zX2Z1bmN0aW9u KSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKKy8qIGludmFsaWRhdGUgaW5kZXggQU0gc3RhdGUgdGhh dCBpbmRlcGVuZGVudGx5IHRyYWNrcyBzY2FuJ3MgcG9zaXRpb24gKi8KK3R5cGVkZWYgdm9pZCAo KmFtcG9zcmVzZXRfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgQmF0 Y2hJbmRleFNjYW4gYmF0Y2gpOwogCiAvKgogICogQ2FsbGJhY2sgZnVuY3Rpb24gc2lnbmF0dXJl cyAtIGZvciBwYXJhbGxlbCBpbmRleCBzY2Fucy4KQEAgLTMwOSwxMCArMzE2LDExIEBAIHR5cGVk ZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5lCiAJYW1iZWdpbnNjYW5fZnVuY3Rpb24gYW1iZWdpbnNj YW47CiAJYW1yZXNjYW5fZnVuY3Rpb24gYW1yZXNjYW47CiAJYW1nZXR0dXBsZV9mdW5jdGlvbiBh bWdldHR1cGxlOyAvKiBjYW4gYmUgTlVMTCAqLworCWFtZ2V0YmF0Y2hfZnVuY3Rpb24gYW1nZXRi YXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KKwlhbWZyZWViYXRjaF9mdW5jdGlvbiBhbWZyZWViYXRj aDsJLyogY2FuIGJlIE5VTEwgKi8KIAlhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsJ LyogY2FuIGJlIE5VTEwgKi8KIAlhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2FuOwotCWFtbWFy a3Bvc19mdW5jdGlvbiBhbW1hcmtwb3M7CS8qIGNhbiBiZSBOVUxMICovCi0JYW1yZXN0cnBvc19m dW5jdGlvbiBhbXJlc3RycG9zOyAvKiBjYW4gYmUgTlVMTCAqLworCWFtcG9zcmVzZXRfZnVuY3Rp b24gYW1wb3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KIAogCS8qIGludGVyZmFjZSBmdW5jdGlv bnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogCWFtZXN0aW1hdGVwYXJhbGxl bHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgLyogY2FuIGJlIE5VTEwgKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2dlbmFtLmgKaW5kZXggNGMwNDI5Y2M2Li4wMWYwNTlmYzQgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9nZW5hbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCkBA IC05NCw2ICs5NCw3IEBAIHR5cGVkZWYgYm9vbCAoKkluZGV4QnVsa0RlbGV0ZUNhbGxiYWNrKSAo SXRlbVBvaW50ZXIgaXRlbXB0ciwgdm9pZCAqc3RhdGUpOwogCiAvKiBzdHJ1Y3QgZGVmaW5pdGlv bnMgYXBwZWFyIGluIHJlbHNjYW4uaCAqLwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0Rh dGEgKkluZGV4U2NhbkRlc2M7Cit0eXBlZGVmIHN0cnVjdCBCYXRjaEluZGV4U2NhbkRhdGEgKkJh dGNoSW5kZXhTY2FuOwogdHlwZWRlZiBzdHJ1Y3QgU3lzU2NhbkRlc2NEYXRhICpTeXNTY2FuRGVz YzsKIAogdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YSAqUGFyYWxsZWxJ bmRleFNjYW5EZXNjOwpAQCAtMTU0LDYgKzE1NSw3IEBAIGV4dGVybiB2b2lkIGluZGV4X2luc2Vy dF9jbGVhbnVwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAKIGV4dGVybiBJbmRleFNjYW5EZXNj IGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQkJCQkgUmVsYXRp b24gaW5kZXhSZWxhdGlvbiwKKwkJCQkJCQkJCSBib29sIHhzX3dhbnRfaXR1cCwKIAkJCQkJCQkJ CSBTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCQkJCSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24g Kmluc3RydW1lbnQsCiAJCQkJCQkJCQkgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKQEAgLTE4 MCwxNCArMTgyLDEyIEBAIGV4dGVybiB2b2lkIGluZGV4X3BhcmFsbGVsc2Nhbl9pbml0aWFsaXpl KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIGV4dGVybiB2b2lkIGluZGV4X3BhcmFsbGVscmVzY2Fu KEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNj YW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwKIAkJCQkJCQkJCQkJICBSZWxhdGlvbiBpbmRl eHJlbCwKKwkJCQkJCQkJCQkJICBib29sIHhzX3dhbnRfaXR1cCwKIAkJCQkJCQkJCQkJICBJbmRl eFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJCQkJCQkJCQkJCSAgaW50IG5rZXlz LCBpbnQgbm9yZGVyYnlzLAogCQkJCQkJCQkJCQkgIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2Nh bik7CiBleHRlcm4gSXRlbVBvaW50ZXIgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBz Y2FuLAogCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKLWV4dGVybiBib29sIGlu ZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7 Ci1leHRlcm4gYm9vbCBpbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CiBl eHRlcm4gaW50NjQgaW5kZXhfZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFw ICpiaXRtYXApOwogCiBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICppbmRleF9idWxrX2Rl bGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCkBAIC0yNTEsNCArMjUxLDIyIEBAIGV4dGVybiB2 b2lkIHN5c3RhYmxlX2lucGxhY2VfdXBkYXRlX2JlZ2luKFJlbGF0aW9uIHJlbGF0aW9uLAogZXh0 ZXJuIHZvaWQgc3lzdGFibGVfaW5wbGFjZV91cGRhdGVfZmluaXNoKHZvaWQgKnN0YXRlLCBIZWFw VHVwbGUgdHVwbGUpOwogZXh0ZXJuIHZvaWQgc3lzdGFibGVfaW5wbGFjZV91cGRhdGVfY2FuY2Vs KHZvaWQgKnN0YXRlKTsKIAorLyoKKyAqIGFtZ2V0YmF0Y2ggdXRpbGl0aWVzIGNhbGxlZCBieSBp bmRleGFtLmMgKGluIGluZGV4YmF0Y2guYykKKyAqLworZXh0ZXJuIHZvaWQgaW5kZXhfYmF0Y2hf aW5pdChJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgYmF0Y2hfZnJlZShJbmRleFNj YW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKK2V4dGVybiB2b2lkIGluZGV4X2Jh dGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgYm9vbCBjb21wbGV0ZSk7CitleHRlcm4gdm9p ZCBpbmRleF9iYXRjaF9tYXJrX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQg aW5kZXhfYmF0Y2hfcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lk IGluZGV4X2JhdGNoX2tpbGxfaXRlbShJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQg aW5kZXhfYmF0Y2hfZW5kKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisKKy8qCisgKiBhbWdldGJhdGNo IHV0aWxpdGllcyBjYWxsZWQgYnkgaW5kZXggQU1zIChpbiBpbmRleGJhdGNoLmMpCisgKi8KK2V4 dGVybiB2b2lkIGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBC YXRjaEluZGV4U2NhbiBiYXRjaCk7CitleHRlcm4gQmF0Y2hJbmRleFNjYW4gaW5kZXhhbV91dGls X2JhdGNoX2FsbG9jKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBpbmRleGFtX3V0 aWxfYmF0Y2hfcmVsZWFzZShJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNo KTsKKwogI2VuZGlmCQkJCQkJCS8qIEdFTkFNX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCAzYzA5 NjFhYjMuLjQ5NGYzNmVjYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5o CisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTE3LDcgKzExNywxMCBAQCB0 eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoSGVhcERhdGEKIAlJbmRleEZldGNoVGFibGVEYXRhIHhz X2Jhc2U7CS8qIEFNIGluZGVwZW5kZW50IHBhcnQgb2YgdGhlIGRlc2NyaXB0b3IgKi8KIAogCUJ1 ZmZlcgkJeHNfY2J1ZjsJCS8qIGN1cnJlbnQgaGVhcCBidWZmZXIgaW4gc2NhbiwgaWYgYW55ICov CisJQmxvY2tOdW1iZXIgeHNfYmxrOwkJCS8qIHhzX2NidWYncyBibG9jayBudW1iZXIsIGlmIGFu eSAqLwogCS8qIE5COiBpZiB4c19jYnVmIGlzIG5vdCBJbnZhbGlkQnVmZmVyLCB3ZSBob2xkIGEg cGluIG9uIHRoYXQgYnVmZmVyICovCisKKwlCdWZmZXIJCXZtYnVmOwkJCS8qIHZpc2liaWxpdHkg bWFwIGJ1ZmZlciAqLwogfSBJbmRleEZldGNoSGVhcERhdGE7CiAKIC8qIFJlc3VsdCBjb2RlcyBm b3IgSGVhcFR1cGxlU2F0aXNmaWVzVmFjdXVtICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvbmJ0cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKaW5kZXggNzcyMjQ4 NTk2Li5lMmYyMTBmMDcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKQEAgLTkyNCwxMTIgKzkyNCw2IEBAIHR5 cGVkZWYgc3RydWN0IEJUVmFjdXVtUG9zdGluZ0RhdGEKIAogdHlwZWRlZiBCVFZhY3V1bVBvc3Rp bmdEYXRhICpCVFZhY3V1bVBvc3Rpbmc7CiAKLS8qCi0gKiBCVFNjYW5PcGFxdWVEYXRhIGlzIHRo ZSBidHJlZS1wcml2YXRlIHN0YXRlIG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgotICogVGhpcyBj b25zaXN0cyBvZiBwcmVwcm9jZXNzZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXByb2Nlc3Nfa2V5 cygpIGZvcgotICogZGV0YWlscyBvZiB0aGUgcHJlcHJvY2Vzc2luZyksIGluZm9ybWF0aW9uIGFi b3V0IHRoZSBjdXJyZW50IGxvY2F0aW9uCi0gKiBvZiB0aGUgc2NhbiwgYW5kIGluZm9ybWF0aW9u IGFib3V0IHRoZSBtYXJrZWQgbG9jYXRpb24sIGlmIGFueS4gIChXZSB1c2UKLSAqIEJUU2NhblBv c0RhdGEgdG8gcmVwcmVzZW50IHRoZSBkYXRhIG5lZWRlZCBmb3IgZWFjaCBvZiBjdXJyZW50IGFu ZCBtYXJrZWQKLSAqIGxvY2F0aW9ucy4pCUluIGFkZGl0aW9uIHdlIGNhbiByZW1lbWJlciBzb21l IGtub3duLWtpbGxlZCBpbmRleCBlbnRyaWVzCi0gKiB0aGF0IG11c3QgYmUgbWFya2VkIGJlZm9y ZSB3ZSBjYW4gbW92ZSBvZmYgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBJbmRleCBzY2FucyB3 b3JrIGEgcGFnZSBhdCBhIHRpbWU6IHdlIHBpbiBhbmQgcmVhZC1sb2NrIHRoZSBwYWdlLCBpZGVu dGlmeQotICogYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiB0aGUgcGFnZSBhbmQgc2F2ZSB0aGVt IGluIEJUU2NhblBvc0RhdGEsIHRoZW4KLSAqIHJlbGVhc2UgdGhlIHJlYWQtbG9jayB3aGlsZSBy ZXR1cm5pbmcgdGhlIGl0ZW1zIHRvIHRoZSBjYWxsZXIgZm9yCi0gKiBwcm9jZXNzaW5nLiAgVGhp cyBhcHByb2FjaCBtaW5pbWl6ZXMgbG9jay91bmxvY2sgdHJhZmZpYy4gIFdlIG11c3QgYWx3YXlz Ci0gKiBkcm9wIHRoZSBsb2NrIHRvIG1ha2UgaXQgb2theSBmb3IgY2FsbGVyIHRvIHByb2Nlc3Mg dGhlIHJldHVybmVkIGl0ZW1zLgotICogV2hldGhlciBvciBub3Qgd2UgY2FuIGFsc28gcmVsZWFz ZSB0aGUgcGluIGR1cmluZyB0aGlzIHdpbmRvdyB3aWxsIHZhcnkuCi0gKiBXZSBkcm9wIHRoZSBw aW4gKHdoZW4gc28tPmRyb3BQaW4pIHRvIGF2b2lkIGJsb2NraW5nIHByb2dyZXNzIGJ5IFZBQ1VV TQotICogKHNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gYWJvdXQgbWFraW5nIGNvbmN1cnJlbnQg VElEIHJlY3ljbGluZyBzYWZlKS4KLSAqIFdlJ2xsIGFsd2F5cyByZWxlYXNlIGJvdGggdGhlIGxv Y2sgYW5kIHRoZSBwaW4gb24gdGhlIGN1cnJlbnQgcGFnZSBiZWZvcmUKLSAqIG1vdmluZyBvbiB0 byBpdHMgc2libGluZyBwYWdlLgotICoKLSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5 IHNjYW4sIHdlIHNhdmUgdGhlIGVudGlyZSBJbmRleFR1cGxlIGZvciBlYWNoCi0gKiBtYXRjaGVk IGl0ZW0sIG90aGVyd2lzZSBvbmx5IGl0cyBoZWFwIFRJRCBhbmQgb2Zmc2V0LiAgVGhlIEluZGV4 VHVwbGVzIGdvCi0gKiBpbnRvIGEgc2VwYXJhdGUgd29ya3NwYWNlIGFycmF5OyBlYWNoIEJUU2Nh blBvc0l0ZW0gc3RvcmVzIGl0cyB0dXBsZSdzCi0gKiBvZmZzZXQgd2l0aGluIHRoYXQgYXJyYXku ICBQb3N0aW5nIGxpc3QgdHVwbGVzIHN0b3JlIGEgImJhc2UiIHR1cGxlIG9uY2UsCi0gKiBhbGxv d2luZyB0aGUgc2FtZSBrZXkgdG8gYmUgcmV0dXJuZWQgZm9yIGVhY2ggVElEIGluIHRoZSBwb3N0 aW5nIGxpc3QKLSAqIHR1cGxlLgotICovCi0KLXR5cGVkZWYgc3RydWN0IEJUU2NhblBvc0l0ZW0J Lyogd2hhdCB3ZSByZW1lbWJlciBhYm91dCBlYWNoIG1hdGNoICovCi17Ci0JSXRlbVBvaW50ZXJE YXRhIGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLwotCU9mZnNldE51 bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdlICov Ci0JTG9jYXRpb25JbmRleCB0dXBsZU9mZnNldDsJLyogSW5kZXhUdXBsZSdzIG9mZnNldCBpbiB3 b3Jrc3BhY2UsIGlmIGFueSAqLwotfSBCVFNjYW5Qb3NJdGVtOwotCi10eXBlZGVmIHN0cnVjdCBC VFNjYW5Qb3NEYXRhCi17Ci0JQnVmZmVyCQlidWY7CQkJLyogY3VyclBhZ2UgYnVmIChpbnZhbGlk IG1lYW5zIHVucGlubmVkKSAqLwotCi0JLyogcGFnZSBkZXRhaWxzIGFzIG9mIHRoZSBzYXZlZCBw b3NpdGlvbidzIGNhbGwgdG8gX2J0X3JlYWRwYWdlICovCi0JQmxvY2tOdW1iZXIgY3VyclBhZ2U7 CQkvKiBwYWdlIHJlZmVyZW5jZWQgYnkgaXRlbXMgYXJyYXkgKi8KLQlCbG9ja051bWJlciBwcmV2 UGFnZTsJCS8qIGN1cnJQYWdlJ3MgbGVmdCBsaW5rICovCi0JQmxvY2tOdW1iZXIgbmV4dFBhZ2U7 CQkvKiBjdXJyUGFnZSdzIHJpZ2h0IGxpbmsgKi8KLQlYTG9nUmVjUHRyCWxzbjsJCQkvKiBjdXJy UGFnZSdzIExTTiAod2hlbiBzby0+ZHJvcFBpbikgKi8KLQotCS8qIHNjYW4gZGlyZWN0aW9uIGZv ciB0aGUgc2F2ZWQgcG9zaXRpb24ncyBjYWxsIHRvIF9idF9yZWFkcGFnZSAqLwotCVNjYW5EaXJl Y3Rpb24gZGlyOwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2Fu LCBuZXh0VHVwbGVPZmZzZXQgaXMgdGhlIGZpcnN0IGZyZWUKLQkgKiBsb2NhdGlvbiBpbiB0aGUg YXNzb2NpYXRlZCB0dXBsZSBzdG9yYWdlIHdvcmtzcGFjZS4KLQkgKi8KLQlpbnQJCQluZXh0VHVw bGVPZmZzZXQ7Ci0KLQkvKgotCSAqIG1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgdHJhY2sgd2hldGhl ciB3ZSB0aGluayB0aGVyZSBtYXkgYmUgbWF0Y2hpbmcKLQkgKiBpbmRleCBlbnRyaWVzIHRvIHRo ZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgY3VycmVudCBwYWdlLCByZXNwZWN0aXZlbHkuCi0JICov Ci0JYm9vbAkJbW9yZUxlZnQ7Ci0JYm9vbAkJbW9yZVJpZ2h0OwotCi0JLyoKLQkgKiBUaGUgaXRl bXMgYXJyYXkgaXMgYWx3YXlzIG9yZGVyZWQgaW4gaW5kZXggb3JkZXIgKGllLCBpbmNyZWFzaW5n Ci0JICogaW5kZXhvZmZzZXQpLiAgV2hlbiBzY2FubmluZyBiYWNrd2FyZHMgaXQgaXMgY29udmVu aWVudCB0byBmaWxsIHRoZQotCSAqIGFycmF5IGJhY2stdG8tZnJvbnQsIHNvIHdlIHN0YXJ0IGF0 IHRoZSBsYXN0IHNsb3QgYW5kIGZpbGwgZG93bndhcmRzLgotCSAqIEhlbmNlIHdlIG5lZWQgYm90 aCBhIGZpcnN0LXZhbGlkLWVudHJ5IGFuZCBhIGxhc3QtdmFsaWQtZW50cnkgY291bnRlci4KLQkg KiBpdGVtSW5kZXggaXMgYSBjdXJzb3Igc2hvd2luZyB3aGljaCBlbnRyeSB3YXMgbGFzdCByZXR1 cm5lZCB0byBjYWxsZXIuCi0JICovCi0JaW50CQkJZmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQg aW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJCWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRl eCBpbiBpdGVtc1tdICovCi0JaW50CQkJaXRlbUluZGV4OwkJLyogY3VycmVudCBpbmRleCBpbiBp dGVtc1tdICovCi0KLQlCVFNjYW5Qb3NJdGVtIGl0ZW1zW01heFRJRHNQZXJCVHJlZVBhZ2VdOwkv KiBNVVNUIEJFIExBU1QgKi8KLX0gQlRTY2FuUG9zRGF0YTsKLQotdHlwZWRlZiBCVFNjYW5Qb3NE YXRhICpCVFNjYW5Qb3M7Ci0KLSNkZWZpbmUgQlRTY2FuUG9zSXNQaW5uZWQoc2NhbnBvcykgXAot KCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkg fHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJ1ZmZlcklzVmFs aWQoKHNjYW5wb3MpLmJ1ZikgXAotKQotI2RlZmluZSBCVFNjYW5Qb3NVbnBpbihzY2FucG9zKSBc Ci0JZG8geyBcCi0JCVJlbGVhc2VCdWZmZXIoKHNjYW5wb3MpLmJ1Zik7IFwKLQkJKHNjYW5wb3Mp LmJ1ZiA9IEludmFsaWRCdWZmZXI7IFwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBCVFNjYW5Qb3NV bnBpbklmUGlubmVkKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJaWYgKEJUU2NhblBvc0lzUGlubmVk KHNjYW5wb3MpKSBcCi0JCQlCVFNjYW5Qb3NVbnBpbihzY2FucG9zKTsgXAotCX0gd2hpbGUgKDAp Ci0KLSNkZWZpbmUgQlRTY2FuUG9zSXNWYWxpZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNy byhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZl cklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9z KS5jdXJyUGFnZSkgXAotKQotI2RlZmluZSBCVFNjYW5Qb3NJbnZhbGlkYXRlKHNjYW5wb3MpIFwK LQlkbyB7IFwKLQkJKHNjYW5wb3MpLmJ1ZiA9IEludmFsaWRCdWZmZXI7IFwKLQkJKHNjYW5wb3Mp LmN1cnJQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0JfSB3aGlsZSAoMCkKLQogLyogV2Ug bmVlZCBvbmUgb2YgdGhlc2UgZm9yIGVhY2ggZXF1YWxpdHktdHlwZSBTS19TRUFSQ0hBUlJBWSBz Y2FuIGtleSAqLwogdHlwZWRlZiBzdHJ1Y3QgQlRBcnJheUtleUluZm8KIHsKQEAgLTEwNTAsNiAr OTQ0LDMwIEBAIHR5cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZvCiAJU2NhbktleQkJaGlnaF9j b21wYXJlOwkvKiBhcnJheSdzIDwgb3IgPD0gdXBwZXIgYm91bmQgKi8KIH0gQlRBcnJheUtleUlu Zm87CiAKKy8qCisgKiBCVFNjYW5PcGFxdWVEYXRhIGlzIHRoZSBidHJlZS1wcml2YXRlIHN0YXRl IG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgorICogVGhpcyBjb25zaXN0cyBvZiBwcmVwcm9jZXNz ZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXByb2Nlc3Nfa2V5cygpIGZvcgorICogZGV0YWlscyBv ZiB0aGUgcHJlcHJvY2Vzc2luZyksIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBh cnJheQorICoga2V5cy4gIFRoZXJlIGFyZSBhc3N1bXB0aW9ucyBhYm91dCBob3cgdGhlIGN1cnJl bnQgYXJyYXkga2V5cyB0cmFjayB0aGUKKyAqIHByb2dyZXNzIG9mIHRoZSBpbmRleCBzY2FuIHRo cm91Z2ggdGhlIGluZGV4J3Mga2V5IHNwYWNlIChzZWUgX2J0X3JlYWRwYWdlCisgKiBhbmQgX2J0 X2FkdmFuY2VfYXJyYXlfa2V5cyksIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB0cmFjayBhbnl0aGlu ZyBhYm91dCB0aGUKKyAqIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiBpbiB0aGlzIG9wYXF1ZSBzdHJ1 Y3QuICBUaGF0IGlzIHRyYWNrZWQgZXh0ZXJuYWxseSwKKyAqIGJ5IGltcGxlbWVudGluZyBhIHJp bmcgYnVmZmVyIG9mICJiYXRjaGVzIiwgd2hlcmUgZWFjaCBiYXRjaCByZXByZXNlbnRzIHRoZQor ICogaXRlbXMgcmV0dXJuZWQgYnkgYnRnZXRiYXRjaCB3aXRoaW4gYSBzaW5nbGUgbGVhZiBwYWdl LgorICoKKyAqIEluZGV4IHNjYW5zIHdvcmsgYSBwYWdlIGF0IGEgdGltZSwgYXMgcmVxdWlyZWQg YnkgdGhlIGFtZ2V0YmF0Y2ggY29udHJhY3Q6CisgKiB3ZSBwaW4gYW5kIHJlYWQtbG9jayB0aGUg cGFnZSwgaWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiB0aGUgcGFnZQorICogYW5k IHJldHVybiB0aGVtIGluIGEgbmV3bHkgYWxsb2NhdGVkIGJhdGNoLiAgV2UgdGhlbiByZWxlYXNl IHRoZSByZWFkLWxvY2sKKyAqIHVzaW5nIGFtZ2V0YmF0Y2ggdXRpbGl0eSByb3V0aW5lcy4gIFRo aXMgYXBwcm9hY2ggbWluaW1pemVzIGxvY2svdW5sb2NrCisgKiB0cmFmZmljLiBfYnRfbmV4dCBp cyBwYXNzZWQgcHJpb3JiYXRjaCwgd2hpY2ggY29udGFpbnMgZGV0YWlscyBvZiB3aGljaAorICog cGFnZSBpcyBuZXh0IGluIGxpbmUgdG8gYmUgcmVhZCAocHJpb3JiYXRjaCBpcyBwcm92aWRlZCBh cyBhbiBhcmd1bWVudCB0bworICogYnRnZXRiYXRjaCBieSBjb3JlIGNvZGUpLgorICoKKyAqIElm IHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHdlIHNhdmUgdGhlIGVudGlyZSBJbmRl eFR1cGxlIGZvciBlYWNoCisgKiBtYXRjaGVkIGl0ZW0sIG90aGVyd2lzZSBvbmx5IGl0cyBoZWFw IFRJRCBhbmQgb2Zmc2V0LiAgVGhpcyBpcyBhbHNvIHBlciB0aGUKKyAqIGFtZ2V0YmF0Y2ggY29u dHJhY3QuICBQb3N0aW5nIGxpc3QgdHVwbGVzIHN0b3JlIGEgImJhc2UiIHR1cGxlIG9uY2UsCisg KiBhbGxvd2luZyB0aGUgc2FtZSBrZXkgdG8gYmUgcmV0dXJuZWQgZm9yIGVhY2ggVElEIGluIHRo ZSBwb3N0aW5nIGxpc3QuCisgKi8KIHR5cGVkZWYgc3RydWN0IEJUU2Nhbk9wYXF1ZURhdGEKIHsK IAkvKiB0aGVzZSBmaWVsZHMgYXJlIHNldCBieSBfYnRfcHJlcHJvY2Vzc19rZXlzKCk6ICovCkBA IC0xMDY2LDMyICs5ODQsNiBAQCB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRhCiAJQlRB cnJheUtleUluZm8gKmFycmF5S2V5czsJLyogaW5mbyBhYm91dCBlYWNoIGVxdWFsaXR5LXR5cGUg YXJyYXkga2V5ICovCiAJRm1nckluZm8gICAqb3JkZXJQcm9jczsJCS8qIE9SREVSIHByb2NzIGZv ciByZXF1aXJlZCBlcXVhbGl0eSBrZXlzICovCiAJTWVtb3J5Q29udGV4dCBhcnJheUNvbnRleHQ7 IC8qIHNjYW4tbGlmZXNwYW4gY29udGV4dCBmb3IgYXJyYXkgZGF0YSAqLwotCi0JLyogaW5mbyBh Ym91dCBraWxsZWQgaXRlbXMgaWYgYW55IChraWxsZWRJdGVtcyBpcyBOVUxMIGlmIG5ldmVyIHVz ZWQpICovCi0JaW50CQkgICAqa2lsbGVkSXRlbXM7CS8qIGN1cnJQb3MuaXRlbXMgaW5kZXhlcyBv ZiBraWxsZWQgaXRlbXMgKi8KLQlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1iZXIgb2YgY3VycmVu dGx5IHN0b3JlZCBpdGVtcyAqLwotCWJvb2wJCWRyb3BQaW47CQkvKiBkcm9wIGxlYWYgcGluIGJl Zm9yZSBidGdldHR1cGxlIHJldHVybnM/ICovCi0KLQkvKgotCSAqIElmIHdlIGFyZSBkb2luZyBh biBpbmRleC1vbmx5IHNjYW4sIHRoZXNlIGFyZSB0aGUgdHVwbGUgc3RvcmFnZQotCSAqIHdvcmtz cGFjZXMgZm9yIHRoZSBjdXJyUG9zIGFuZCBtYXJrUG9zIHJlc3BlY3RpdmVseS4gIEVhY2ggaXMg b2Ygc2l6ZQotCSAqIEJMQ0tTWiwgc28gaXQgY2FuIGhvbGQgYXMgbXVjaCBhcyBhIGZ1bGwgcGFn ZSdzIHdvcnRoIG9mIHR1cGxlcy4KLQkgKi8KLQljaGFyCSAgICpjdXJyVHVwbGVzOwkJLyogdHVw bGUgc3RvcmFnZSBmb3IgY3VyclBvcyAqLwotCWNoYXIJICAgKm1hcmtUdXBsZXM7CQkvKiB0dXBs ZSBzdG9yYWdlIGZvciBtYXJrUG9zICovCi0KLQkvKgotCSAqIElmIHRoZSBtYXJrZWQgcG9zaXRp b24gaXMgb24gdGhlIHNhbWUgcGFnZSBhcyBjdXJyZW50IHBvc2l0aW9uLCB3ZQotCSAqIGRvbid0 IHVzZSBtYXJrUG9zLCBidXQganVzdCBrZWVwIHRoZSBtYXJrZWQgaXRlbUluZGV4IGluIG1hcmtJ dGVtSW5kZXgKLQkgKiAoYWxsIHRoZSByZXN0IG9mIGN1cnJQb3MgaXMgdmFsaWQgZm9yIHRoZSBt YXJrIHBvc2l0aW9uKS4gSGVuY2UsIHRvCi0JICogZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgbWFy aywgZmlyc3QgbG9vayBhdCBtYXJrSXRlbUluZGV4LCB0aGVuIGF0Ci0JICogbWFya1Bvcy4KLQkg Ki8KLQlpbnQJCQltYXJrSXRlbUluZGV4OwkvKiBpdGVtSW5kZXgsIG9yIC0xIGlmIG5vdCB2YWxp ZCAqLwotCi0JLyoga2VlcCB0aGVzZSBsYXN0IGluIHN0cnVjdCBmb3IgZWZmaWNpZW5jeSAqLwot CUJUU2NhblBvc0RhdGEgY3VyclBvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gZGF0YSAqLwotCUJU U2NhblBvc0RhdGEgbWFya1BvczsJCS8qIG1hcmtlZCBwb3NpdGlvbiwgaWYgYW55ICovCiB9IEJU U2Nhbk9wYXF1ZURhdGE7CiAKIHR5cGVkZWYgQlRTY2FuT3BhcXVlRGF0YSAqQlRTY2FuT3BhcXVl OwpAQCAtMTE2MCwxNCArMTA1MiwxNiBAQCBleHRlcm4gYm9vbCBidGluc2VydChSZWxhdGlvbiBy ZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIGV4dGVybiBJbmRleFNjYW5EZXNjIGJ0 YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVy biBTaXplIGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgYnRpbml0cGFyYWxsZWxzY2FuKHZvaWQgKnRhcmdl dCk7Ci1leHRlcm4gYm9vbCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpOworZXh0ZXJuIEJhdGNoSW5kZXhTY2FuIGJ0Z2V0YmF0Y2goSW5kZXhTY2FuRGVz YyBzY2FuLAorCQkJCQkJCQkgQmF0Y2hJbmRleFNjYW4gcHJpb3JiYXRjaCwKKwkJCQkJCQkJIFNj YW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQ2NCBidGdldGJpdG1hcChJbmRleFNjYW5EZXNj IHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiB2b2lkIGJ0cmVzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCQkJCQkgU2NhbktleSBv cmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBidGZyZWViYXRjaChJbmRleFNj YW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKIGV4dGVybiB2b2lkIGJ0cGFyYWxs ZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiB2b2lkIGJ0ZW5kc2NhbihJbmRl eFNjYW5EZXNjIHNjYW4pOwotZXh0ZXJuIHZvaWQgYnRtYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2Nh bik7Ci1leHRlcm4gdm9pZCBidHJlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4g dm9pZCBidHBvc3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gbWFya2Jh dGNoKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmJ0YnVsa2RlbGV0ZShJbmRleFZh Y3V1bUluZm8gKmluZm8sCiAJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0 cywKIAkJCQkJCQkJCQkgICBJbmRleEJ1bGtEZWxldGVDYWxsYmFjayBjYWxsYmFjaywKQEAgLTEy NzEsOCArMTE2NSw5IEBAIGV4dGVybiB2b2lkIF9idF9wcmVwcm9jZXNzX2tleXMoSW5kZXhTY2Fu RGVzYyBzY2FuKTsKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbmJ0cmVhZHBh Z2UuYwogICovCi1leHRlcm4gYm9vbCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpciwKLQkJCQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBib29sIGZpcnN0 cGFnZSk7CitleHRlcm4gYm9vbCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRj aEluZGV4U2NhbiBuZXdiYXRjaCwKKwkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVt YmVyIG9mZm51bSwKKwkJCQkJCSBib29sIGZpcnN0cGFnZSk7CiBleHRlcm4gdm9pZCBfYnRfc3Rh cnRfYXJyYXlfa2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4 dGVybiBpbnQJX2J0X2JpbnNyY2hfYXJyYXlfc2tleShGbWdySW5mbyAqb3JkZXJwcm9jLAogCQkJ CQkJCQkgICBib29sIGN1cl9lbGVtX3RyaWcsIFNjYW5EaXJlY3Rpb24gZGlyLApAQCAtMTI4Nyw4 ICsxMTgyLDkgQEAgZXh0ZXJuIEJUU3RhY2sgX2J0X3NlYXJjaChSZWxhdGlvbiByZWwsIFJlbGF0 aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBrZXksCiAJCQkJCQkgIEJ1ZmZlciAqYnVmUCwgaW50 IGFjY2Vzcyk7CiBleHRlcm4gT2Zmc2V0TnVtYmVyIF9idF9iaW5zcmNoX2luc2VydChSZWxhdGlv biByZWwsIEJUSW5zZXJ0U3RhdGUgaW5zZXJ0c3RhdGUpOwogZXh0ZXJuIGludDMyIF9idF9jb21w YXJlKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgUGFnZSBwYWdlLCBPZmZzZXROdW1i ZXIgb2ZmbnVtKTsKLWV4dGVybiBib29sIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKTsKLWV4dGVybiBib29sIF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEJhdGNoSW5kZXhTY2FuIF9idF9maXJzdChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBCYXRjaEluZGV4 U2NhbiBfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJ CQkJCSAgIEJhdGNoSW5kZXhTY2FuIHByaW9yYmF0Y2gpOwogZXh0ZXJuIEJ1ZmZlciBfYnRfZ2V0 X2VuZHBvaW50KFJlbGF0aW9uIHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCk7CiAK IC8qCkBAIC0xMjk2LDcgKzExOTIsNyBAQCBleHRlcm4gQnVmZmVyIF9idF9nZXRfZW5kcG9pbnQo UmVsYXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KTsKICAqLwogZXh0ZXJu IEJUU2Nhbkluc2VydCBfYnRfbWtzY2Fua2V5KFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBpdHVw KTsKIGV4dGVybiB2b2lkIF9idF9mcmVlc3RhY2soQlRTdGFjayBzdGFjayk7Ci1leHRlcm4gdm9p ZCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBfYnRfa2ls bGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOwogZXh0ZXJu IEJUQ3ljbGVJZCBfYnRfdmFjdXVtX2N5Y2xlaWQoUmVsYXRpb24gcmVsKTsKIGV4dGVybiBCVEN5 Y2xlSWQgX2J0X3N0YXJ0X3ZhY3V1bShSZWxhdGlvbiByZWwpOwogZXh0ZXJuIHZvaWQgX2J0X2Vu ZF92YWN1dW0oUmVsYXRpb24gcmVsKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9y ZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IGNlMzQwYzA3Ni4u Y2ExMjA3YmU2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTE2LDggKzE2LDEwIEBACiAKICNpbmNs dWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKKyNp bmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgogI2lu Y2x1ZGUgInBvcnQvYXRvbWljcy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9yZWxmaWxlbG9jYXRvci5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgog I2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCkBAIC0xMjQsNiArMTI2LDE3OSBAQCB0eXBlZGVm IHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhCiAJUmVsYXRpb24JcmVsOwogfSBJbmRleEZldGNo VGFibGVEYXRhOwogCisvKgorICogTG9jYXRpb24gb2YgYSBCYXRjaE1hdGNoaW5nSXRlbSB0aGF0 IGFwcGVhcnMgaW4gYSBCYXRjaEluZGV4U2NhbiByZXR1cm5lZAorICogYnkgKGFuZCBzdWJzZXF1 ZW50bHkgcGFzc2VkIHRvKSBhbiBhbWdldGJhdGNoIHJvdXRpbmUKKyAqLwordHlwZWRlZiBzdHJ1 Y3QgQmF0Y2hSaW5nSXRlbVBvcworeworCS8qIEJhdGNoUmluZ0J1ZmZlci5iYXRjaGVzW10td2lz ZSBpbmRleCB0byByZWxldmFudCBCYXRjaEluZGV4U2NhbiAqLworCWludAkJCWJhdGNoOworCisJ LyogQmF0Y2hJbmRleFNjYW4uaXRlbXNbXS13aXNlIGluZGV4IHRvIHJlbGV2YW50IEJhdGNoTWF0 Y2hpbmdJdGVtICovCisJaW50CQkJaXRlbTsKK30gQmF0Y2hSaW5nSXRlbVBvczsKKworc3RhdGlj IGlubGluZSB2b2lkCitiYXRjaF9yZXNldF9wb3MoQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQorewor CXBvcy0+YmF0Y2ggPSAtMTsKKwlwb3MtPml0ZW0gPSAtMTsKK30KKworLyoKKyAqIE1hdGNoaW5n IGl0ZW0gcmV0dXJuZWQgYnkgYW1nZXRiYXRjaCAoaW4gcmV0dXJuZWQgQmF0Y2hJbmRleFNjYW4p IGR1cmluZyBhbgorICogaW5kZXggc2Nhbi4gIFVzZWQgYnkgdGFibGUgQU0gdG8gbG9jYXRlIHJl bGV2YW50IG1hdGNoaW5nIHRhYmxlIHR1cGxlLgorICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaE1h dGNoaW5nSXRlbQoreworCUl0ZW1Qb2ludGVyRGF0YSBoZWFwVGlkOwkvKiBUSUQgb2YgcmVmZXJl bmNlZCBoZWFwIGl0ZW0gKi8KKwlPZmZzZXROdW1iZXIgaW5kZXhPZmZzZXQ7CS8qIGluZGV4IGl0 ZW0ncyBsb2NhdGlvbiB3aXRoaW4gcGFnZSAqLworCUxvY2F0aW9uSW5kZXggdHVwbGVPZmZzZXQ7 CS8qIEluZGV4VHVwbGUncyBvZmZzZXQgaW4gd29ya3NwYWNlLCBpZiBhbnkgKi8KKwlib29sCQlh bGxWaXNpYmxlOwkJLyogVElEIHBvaW50cyB0byBhbGwtdmlzaWJsZSBwYWdlICovCit9IEJhdGNo TWF0Y2hpbmdJdGVtOworCisvKgorICogRGF0YSBhYm91dCBvbmUgYmF0Y2ggb2YgaXRlbXMgcmV0 dXJuZWQgYnkgKGFuZCBwYXNzZWQgdG8pIGFtZ2V0YmF0Y2ggZHVyaW5nCisgKiBpbmRleCBzY2Fu cworICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaEluZGV4U2NhbkRhdGEKK3sKKwkvKgorCSAqIElu Zm9ybWF0aW9uIG91dHB1dCBieSBhbWdldGJhdGNoIGluZGV4IEFNcyB1cG9uIHJldHVybmluZyBh IGJhdGNoIHdpdGgKKwkgKiBvbmUgb3IgbW9yZSBtYXRjaGluZyBpdGVtcywgZGVzY3JpYmluZyBk ZXRhaWxzIG9mIHRoZSBpbmRleCBwYWdlIHdoZXJlCisJICogbWF0Y2hlcyB3ZXJlIGxvY2F0ZWQu CisJICoKKwkgKiBVc2VkIGluIHRoZSBuZXh0IGFtZ2V0YmF0Y2ggY2FsbCB0byBkZXRlcm1pbmUg d2hpY2ggaW5kZXggcGFnZSB0byByZWFkCisJICogbmV4dCAob3IgdG8gZGV0ZXJtaW5lIGlmIHRo ZXJlJ3Mgbm8gZnVydGhlciBtYXRjaGVzIGluIGN1cnJlbnQgc2NhbgorCSAqIGRpcmVjdGlvbiku CisJICovCisJQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBJbmRleCBwYWdlIHdpdGggbWF0Y2hp bmcgaXRlbXMgKi8KKwlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIGN1cnJQYWdlJ3MgbGVmdCBs aW5rICovCisJQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBjdXJyUGFnZSdzIHJpZ2h0IGxpbmsg Ki8KKworCUJ1ZmZlcgkJYnVmOwkJCS8qIGN1cnJQYWdlIGJ1ZiAoaW52YWxpZCBtZWFucyB1bnBp bm5lZCkgKi8KKwlYTG9nUmVjUHRyCWxzbjsJCQkvKiBjdXJyUGFnZSdzIExTTiAod2hlbiBkcm9w UGluKSAqLworCisJLyogc2NhbiBkaXJlY3Rpb24gd2hlbiB0aGUgaW5kZXggcGFnZSB3YXMgcmVh ZCAqLworCVNjYW5EaXJlY3Rpb24gZGlyOworCisJLyoKKwkgKiBtb3JlTGVmdCBhbmQgbW9yZVJp Z2h0IHRyYWNrIHdoZXRoZXIgd2UgdGhpbmsgdGhlcmUgbWF5IGJlIG1hdGNoaW5nCisJICogaW5k ZXggZW50cmllcyB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgdGhlIGN1cnJlbnQgcGFnZSwgcmVz cGVjdGl2ZWx5CisJICovCisJYm9vbAkJbW9yZUxlZnQ7CisJYm9vbAkJbW9yZVJpZ2h0OworCisJ LyoKKwkgKiBUaGUgaXRlbXMgYXJyYXkgaXMgYWx3YXlzIG9yZGVyZWQgaW4gaW5kZXggb3JkZXIg KGllLCBpbmNyZWFzaW5nCisJICogaW5kZXhvZmZzZXQpLiAgV2hlbiBzY2FubmluZyBiYWNrd2Fy ZHMgaXQgaXMgY29udmVuaWVudCB0byBmaWxsIHRoZQorCSAqIGFycmF5IGJhY2stdG8tZnJvbnQs IHNvIHdlIHN0YXJ0IGF0IHRoZSBsYXN0IHNsb3QgYW5kIGZpbGwgZG93bndhcmRzLgorCSAqIEhl bmNlIHdlIG5lZWQgYm90aCBhIGZpcnN0LXZhbGlkLWVudHJ5IGFuZCBhIGxhc3QtdmFsaWQtZW50 cnkgY291bnRlci4KKwkgKi8KKwlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRl eCBpbiBpdGVtc1tdICovCisJaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGlu IGl0ZW1zW10gKi8KKworCS8qIGluZm8gYWJvdXQga2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVk SXRlbXMgaXMgTlVMTCBpZiBuZXZlciB1c2VkKSAqLworCWludAkJICAgKmtpbGxlZEl0ZW1zOwkv KiBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAqLworCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJl ciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCisKKwkvKgorCSAqIE1hdGNoaW5nIGl0ZW1z IHN0YXRlIGZvciB0aGlzIGJhdGNoLgorCSAqCisJICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4 LW9ubHkgc2NhbiwgdGhlc2UgYXJlIHRoZSB0dXBsZSBzdG9yYWdlCisJICogd29ya3NwYWNlcyBm b3IgdGhlIG1hdGNoaW5nIHR1cGxlcyAodHVwbGVzIHJlZmVyZW5jZWQgYnkgaXRlbXNbXSkuIEVh Y2gKKwkgKiBpcyBvZiBzaXplIEJMQ0tTWiwgc28gaXQgY2FuIGhvbGQgYXMgbXVjaCBhcyBhIGZ1 bGwgcGFnZSdzIHdvcnRoIG9mCisJICogdHVwbGVzLgorCSAqLworCWNoYXIJICAgKmN1cnJUdXBs ZXM7CQkvKiB0dXBsZSBzdG9yYWdlIGZvciBpdGVtc1tdICovCisJQmF0Y2hNYXRjaGluZ0l0ZW0g aXRlbXNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30gQmF0Y2hJbmRleFNjYW5EYXRhOworCit0 eXBlZGVmIHN0cnVjdCBCYXRjaEluZGV4U2NhbkRhdGEgKkJhdGNoSW5kZXhTY2FuOworCisvKgor ICogTWF4aW11bSBudW1iZXIgb2YgYmF0Y2hlcyAobGVhZiBwYWdlcykgd2UgY2FuIGtlZXAgaW4g bWVtb3J5LiAgV2UgbmVlZCBhCisgKiBtaW5pbXVtIG9mIHR3bywgc2luY2Ugd2UnbGwgb25seSBj b25zaWRlciByZWxlYXNpbmcgb25lIGJhdGNoIHdoZW4gYW5vdGhlcgorICogaXMgcmVhZC4KKyAq LworI2RlZmluZSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTCQkyCisjZGVmaW5lIElOREVYX1NDQU5f Q0FDSEVfQkFUQ0hFUwkyCisjZGVmaW5lIElOREVYX1NDQU5fQkFUQ0hfQ09VTlQoc2NhbikgXAor CSgoc2NhbiktPnJpbmdidWYtPm5leHRCYXRjaCAtIChzY2FuKS0+cmluZ2J1Zi0+aGVhZEJhdGNo KQorCisvKiBEaWQgd2UgYWxyZWFkeSBsb2FkIGJhdGNoIHdpdGggdGhlIHJlcXVlc3RlZCBpbmRl eD8gKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9CQVRDSF9MT0FERUQoc2NhbiwgaWR4KSBcCisJKChp ZHgpID49IChzY2FuKS0+cmluZ2J1Zi0+aGVhZEJhdGNoICYmIChpZHgpIDwgKHNjYW4pLT5yaW5n YnVmLT5uZXh0QmF0Y2gpCisKKy8qIEhhdmUgd2UgbG9hZGVkIHRoZSBtYXhpbXVtIG51bWJlciBv ZiBiYXRjaGVzPyAqLworI2RlZmluZSBJTkRFWF9TQ0FOX0JBVENIX0ZVTEwoc2NhbikgXAorCShJ TkRFWF9TQ0FOX0JBVENIX0NPVU5UKHNjYW4pID09IElOREVYX1NDQU5fTUFYX0JBVENIRVMpCisK Ky8qIFJldHVybiBiYXRjaCBmb3IgdGhlIHByb3ZpZGVkIGluZGV4ICovCisjZGVmaW5lIElOREVY X1NDQU5fQkFUQ0goc2NhbiwgaWR4KQlcCisoIFwKKwlBc3NlcnRNYWNybyhJTkRFWF9TQ0FOX0JB VENIX0xPQURFRChzY2FuLCBpZHgpKSwgXAorCSgoc2NhbiktPnJpbmdidWYtPmJhdGNoZXNbKGlk eCkgJSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTXSkgXAorKQorCisvKiBBcHBlbmQgZ2l2ZW4gYmF0 Y2ggdG8gc2NhbidzIGJhdGNoIHJpbmcgYnVmZmVyICovCisjZGVmaW5lIElOREVYX1NDQU5fQkFU Q0hfQVBQRU5EKHNjYW4sIGJhdGNoKSBcCisJZG8geyBcCisJCUJhdGNoUmluZ0J1ZmZlciAqbXJp bmdidWYgPSAoc2NhbiktPnJpbmdidWY7CVwKKwkJaW50CQkJCW5leHRCYXRjaCA9IG1yaW5nYnVm LT5uZXh0QmF0Y2g7IFwKKwkJbXJpbmdidWYtPmJhdGNoZXNbbmV4dEJhdGNoICUgSU5ERVhfU0NB Tl9NQVhfQkFUQ0hFU10gPSAoYmF0Y2gpOyBcCisJCW1yaW5nYnVmLT5uZXh0QmF0Y2grKzsgXAor CX0gd2hpbGUoMCkKKworLyogSXMgdGhlIHBvc2l0aW9uIGludmFsaWQvdW5kZWZpbmVkPyAqLwor I2RlZmluZSBJTkRFWF9TQ0FOX1BPU19JTlZBTElEKHBvcykgXAorCQkoKChwb3MpLT5iYXRjaCA9 PSAtMSkgJiYgKChwb3MpLT5pdGVtID09IC0xKSkKKworI2lmZGVmIElOREVYQU1fREVCVUcKKyNk ZWZpbmUgREVCVUdfTE9HKC4uLikgZWxvZyhBbVJlZ3VsYXJCYWNrZW5kUHJvY2VzcygpID8gTk9U SUNFIDogREVCVUcyLCBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIERFQlVHX0xPRyguLi4p CisjZW5kaWYKKworLyoKKyAqIFN0YXRlIHVzZWQgYnkgdGFibGUgQU1zIHRvIG1hbmFnZSBhbiBp bmRleCBzY2FuIHRoYXQgdXNlcyB0aGUgYW1nZXRiYXRjaAorICogaW50ZXJmYWNlLiAgU2NhbnMg dXNlIGEgcmluZyBidWZmZXIgb2YgYmF0Y2hlcyByZXR1cm5lZCBieSBhbWdldGJhdGNoLgorICoK KyAqIEJhdGNoZXMgYXJlIGtlcHQgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSB3ZXJlIHJldHVybmVk IGluIGJ5IGFtZ2V0YmF0Y2gsCisgKiBzaW5jZSB0aGF0IGlzIHRoZSBzYW1lIG9yZGVyIHRoYXQg dGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IHdpbGwgcmV0dXJuCisgKiBtYXRjaGVzIGluLiAgSG93 ZXZlciwgdGFibGUgQU1zIGFyZSBmcmVlIHRvIGZldGNoIHRhYmxlIHR1cGxlcyBpbiB3aGF0ZXZl cgorICogb3JkZXIgaXMgbW9zdCBjb252ZW5pZW50L2VmZmljaWVudCAtLSBwcm92aWRlZCB0aGF0 IHN1Y2ggcmVvcmRlcmluZyBjYW5ub3QKKyAqIGFmZmVjdCB0aGUgb3JkZXIgdGhhdCB0YWJsZV9p bmRleF9nZXRuZXh0X3Nsb3QgbGF0ZXIgcmV0dXJucyB0dXBsZXMgaW4uCisgKi8KK3R5cGVkZWYg c3RydWN0IEJhdGNoUmluZ0J1ZmZlcgoreworCS8qIEN1cnJlbnQgc2NhbiBkaXJlY3Rpb24sIGZv ciB0aGUgY3VycmVudGx5IGxvYWRlZCBiYXRjaGVzICovCisJU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b247CisKKwkvKiBjdXJyZW50IHBvc2l0aW9ucyBpbiBiYXRjaGVzW10gZm9yIHNjYW4gKi8KKwlC YXRjaFJpbmdJdGVtUG9zIHNjYW5Qb3M7CS8qIHNjYW4ncyByZWFkIHBvc2l0aW9uICovCisJQmF0 Y2hSaW5nSXRlbVBvcyBtYXJrUG9zOwkvKiBtYXJrL3Jlc3RvcmUgcG9zaXRpb24gKi8KKworCUJh dGNoSW5kZXhTY2FuIG1hcmtCYXRjaDsKKworCS8qCisJICogQXJyYXkgb2YgYmF0Y2hlcyByZXR1 cm5lZCBieSB0aGUgQU0uIFRoZSBhcnJheSBoYXMgYSBjYXBhY2l0eSAoYnV0IGNhbgorCSAqIGJl IHJlc2l6ZWQgaWYgbmVlZGVkKS4gVGhlIGhlYWRCYXRjaCBpcyBhbiBpbmRleCBvZiB0aGUgYmF0 Y2ggd2UncmUKKwkgKiBjdXJyZW50bHkgcmVhZGluZyBmcm9tICh0aGlzIG5lZWRzIHRvIGJlIHRy YW5zbGF0ZWQgYnkgbW9kdWxvCisJICogSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyBpbnRvIGluZGV4 IGluIHRoZSBiYXRjaGVzIGFycmF5KS4KKwkgKi8KKwlpbnQJCQloZWFkQmF0Y2g7CQkvKiBoZWFk IGJhdGNoIHNsb3QgKi8KKwlpbnQJCQluZXh0QmF0Y2g7CQkvKiBuZXh0IGVtcHR5IGJhdGNoIHNs b3QgKi8KKworCS8qIEFycmF5IG9mIHBvaW50ZXJzIHRvIGNhY2hlZCByZWN5Y2xhYmxlIGJhdGNo ZXMgKi8KKwlCYXRjaEluZGV4U2NhbiBjYWNoZVtJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVNdOwor CisJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8gcmluZyBidWZmZXIgYmF0Y2hlcyAqLworCUJhdGNo SW5kZXhTY2FuIGJhdGNoZXNbSU5ERVhfU0NBTl9NQVhfQkFUQ0hFU107CisKK30gQmF0Y2hSaW5n QnVmZmVyOworCiBzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uOwogCiAvKgpAQCAtMTQx LDYgKzMxNiwxMyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCWludAkJCW51 bWJlck9mT3JkZXJCeXM7CS8qIG51bWJlciBvZiBvcmRlcmluZyBvcGVyYXRvcnMgKi8KIAlzdHJ1 Y3QgU2NhbktleURhdGEgKmtleURhdGE7CS8qIGFycmF5IG9mIGluZGV4IHF1YWxpZmllciBkZXNj cmlwdG9ycyAqLwogCXN0cnVjdCBTY2FuS2V5RGF0YSAqb3JkZXJCeURhdGE7CS8qIGFycmF5IG9m IG9yZGVyaW5nIG9wIGRlc2NyaXB0b3JzICovCisKKwkvKiBpbmRleCBhY2Nlc3MgbWV0aG9kJ3Mg cHJpdmF0ZSBzdGF0ZSAqLworCXZvaWQJICAgKm9wYXF1ZTsJCQkvKiBhY2Nlc3MtbWV0aG9kLXNw ZWNpZmljIGluZm8gKi8KKworCS8qIHRhYmxlIGFjY2VzcyBtZXRob2QncyBwcml2YXRlIGFtZ2V0 YmF0Y2ggc3RhdGUgKi8KKwlCYXRjaFJpbmdCdWZmZXIgKnJpbmdidWY7CS8qIGFtZ2V0YmF0Y2gg cmVsYXRlZCBzdGF0ZSAqLworCiAJYm9vbAkJeHNfd2FudF9pdHVwOwkvKiBjYWxsZXIgcmVxdWVz dHMgaW5kZXggdHVwbGVzICovCiAJYm9vbAkJeHNfdGVtcF9zbmFwOwkvKiB1bnJlZ2lzdGVyIHNu YXBzaG90IGF0IHNjYW4gZW5kPyAqLwogCkBAIC0xNDksOSArMzMxLDEzIEBAIHR5cGVkZWYgc3Ry dWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJYm9vbAkJaWdub3JlX2tpbGxlZF90dXBsZXM7CS8qIGRv IG5vdCByZXR1cm4ga2lsbGVkIGVudHJpZXMgKi8KIAlib29sCQl4YWN0U3RhcnRlZEluUmVjb3Zl cnk7CS8qIHByZXZlbnRzIGtpbGxpbmcvc2VlaW5nIGtpbGxlZAogCQkJCQkJCQkJCSAqIHR1cGxl cyAqLworCS8qIGFtZ2V0YmF0Y2ggY2FuIHNhZmVseSBkcm9wIHBpbnMgb24gcmV0dXJuZWQgYmF0 Y2gncyBpbmRleCBwYWdlPyAqLworCWJvb2wJCWRyb3BQaW47CiAKLQkvKiBpbmRleCBhY2Nlc3Mg bWV0aG9kJ3MgcHJpdmF0ZSBzdGF0ZSAqLwotCXZvaWQJICAgKm9wYXF1ZTsJCQkvKiBhY2Nlc3Mt bWV0aG9kLXNwZWNpZmljIGluZm8gKi8KKwkvKgorCSAqIERpZCB3ZSByZWFkIHRoZSBmaW5hbCBi YXRjaCBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uPworCSAqLworCWJvb2wJCWZpbmlzaGVkOwogCiAJ LyoKIAkgKiBJbnN0cnVtZW50YXRpb24gY291bnRlcnMgbWFpbnRhaW5lZCBieSBhbGwgaW5kZXgg QU1zIGR1cmluZyBib3RoCkBAIC0xNzYsNiArMzYyLDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhT Y2FuRGVzY0RhdGEKIAlJbmRleEZldGNoVGFibGVEYXRhICp4c19oZWFwZmV0Y2g7CiAKIAlib29s CQl4c19yZWNoZWNrOwkJLyogVCBtZWFucyBzY2FuIGtleXMgbXVzdCBiZSByZWNoZWNrZWQgKi8K Kwlib29sCQl4c192aXNpYmxlOwkJLyogVCBtZWFucyB0aGUgaGVhcCBwYWdlIGlzIGFsbC12aXNp YmxlICovCisJdWludDE2CQltYXhpdGVtc2JhdGNoOwkvKiBzZXQgYnkgYW1iZWdpbnNjYW4gd2hl biBhbWdldGJhdGNoIHVzZWQgKi8KIAogCS8qCiAJICogV2hlbiBmZXRjaGluZyB3aXRoIGFuIG9y ZGVyaW5nIG9wZXJhdG9yLCB0aGUgdmFsdWVzIG9mIHRoZSBPUkRFUiBCWQpAQCAtMjE1LDQgKzQw Myw2NCBAQCB0eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgVHVwbGVUYWJs ZVNsb3QgKnNsb3Q7CiB9IFN5c1NjYW5EZXNjRGF0YTsKIAorLyoKKyAqIENoZWNrIHRoYXQgYSBw b3NpdGlvbiAoYmF0Y2gsaXRlbSkgaXMgdmFsaWQgd2l0aCByZXNwZWN0IHRvIHRoZSBiYXRjaGVz IHdlCisgKiBoYXZlIGN1cnJlbnRseSBsb2FkZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAor YmF0Y2hfYXNzZXJ0X3Bvc192YWxpZChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgQmF0Y2hSaW5n SXRlbVBvcyAqcG9zKQoreworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlCYXRjaFJpbmdC dWZmZXIgKnJpbmdidWYgPSBzY2FuLT5yaW5nYnVmOworCUJhdGNoSW5kZXhTY2FuIGJhdGNoID0g SU5ERVhfU0NBTl9CQVRDSChzY2FuLCBwb3MtPmJhdGNoKTsKKworCS8qIG1ha2Ugc3VyZSB0aGUg cG9zaXRpb24gaXMgdmFsaWQgZm9yIGN1cnJlbnRseSBsb2FkZWQgYmF0Y2hlcyAqLworCUFzc2Vy dChwb3MtPmJhdGNoID49IHJpbmdidWYtPmhlYWRCYXRjaCk7CisJQXNzZXJ0KHBvcy0+YmF0Y2gg PCByaW5nYnVmLT5uZXh0QmF0Y2gpOworCUFzc2VydChwb3MtPml0ZW0gPj0gYmF0Y2gtPmZpcnN0 SXRlbSk7CisJQXNzZXJ0KHBvcy0+aXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOworI2VuZGlmCit9 CisKKy8qCisgKiBDaGVjayBhIHNpbmdsZSBiYXRjaCBpcyB2YWxpZC4KKyAqLworc3RhdGljIGlu bGluZSB2b2lkCitiYXRjaF9hc3NlcnRfYmF0Y2hfdmFsaWQoSW5kZXhTY2FuRGVzY0RhdGEgKnNj YW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKQoreworCS8qIGJhdGNoIG11c3QgaGF2ZSBvbmUgb3Ig bW9yZSBtYXRjaGluZyBpdGVtcyByZXR1cm5lZCBieSBpbmRleCBBTSAqLworCUFzc2VydChiYXRj aC0+Zmlyc3RJdGVtID49IDAgJiYgYmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0p OworCUFzc2VydChiYXRjaC0+aXRlbXMgIT0gTlVMTCk7CisKKwkvKgorCSAqIFRoZSBudW1iZXIg b2Yga2lsbGVkIGl0ZW1zIG11c3QgYmUgdmFsaWQsIGFuZCB0aGVyZSBtdXN0IGJlIGFuIGFycmF5 IG9mCisJICogaW5kZXhlcyBpZiB0aGVyZSBhcmUgaXRlbXMuCisJICovCisJQXNzZXJ0KGJhdGNo LT5udW1LaWxsZWQgPj0gMCk7CisJQXNzZXJ0KCEoYmF0Y2gtPm51bUtpbGxlZCA+IDAgJiYgYmF0 Y2gtPmtpbGxlZEl0ZW1zID09IE5VTEwpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitiYXRj aF9hc3NlcnRfYmF0Y2hlc192YWxpZChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbikKK3sKKyNpZmRl ZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJQmF0Y2hSaW5nQnVmZmVyICpyaW5nYnVmID0gc2Nhbi0+ cmluZ2J1ZjsKKworCS8qIHdlIHNob3VsZCBoYXZlIGJhdGNoZXMgaW5pdGlhbGl6ZWQgKi8KKwlB c3NlcnQocmluZ2J1ZiAhPSBOVUxMKTsKKworCS8qIFRoZSBoZWFkL25leHQgaW5kZXhlcyBzaG91 bGQgZGVmaW5lIGEgdmFsaWQgcmFuZ2UgKi8KKwlBc3NlcnQocmluZ2J1Zi0+aGVhZEJhdGNoID49 IDAgJiYKKwkJICAgcmluZ2J1Zi0+aGVhZEJhdGNoIDw9IHJpbmdidWYtPm5leHRCYXRjaCk7CisK KwkvKiBDaGVjayBhbGwgY3VycmVudCBiYXRjaGVzICovCisJZm9yIChpbnQgaSA9IHJpbmdidWYt PmhlYWRCYXRjaDsgaSA8IHJpbmdidWYtPm5leHRCYXRjaDsgaSsrKQorCXsKKwkJQmF0Y2hJbmRl eFNjYW4gYmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIGkpOworCisJCWJhdGNoX2Fzc2Vy dF9iYXRjaF92YWxpZChzY2FuLCBiYXRjaCk7CisJfQorI2VuZGlmCit9CisKICNlbmRpZgkJCQkJ CQkvKiBSRUxTQ0FOX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFt LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IGUyZWM1Mjg5ZC4uOThlMzM3 OTcyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTQzMywxMSArNDMzLDI5IEBAIHR5cGVkZWYgc3Ry dWN0IFRhYmxlQW1Sb3V0aW5lCiAJICovCiAJdm9pZAkJKCppbmRleF9mZXRjaF9lbmQpIChzdHJ1 Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqZGF0YSk7CiAKKwkvKgorCSAqIEZldGNoIHRoZSBuZXh0 IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIHNsb3QsIHNjYW5uaW5nIGluIHRoZQorCSAq IHNwZWNpZmllZCBkaXJlY3Rpb24sIGFuZCByZXR1cm4gdHJ1ZSBpZiBhIHR1cGxlIHdhcyBmb3Vu ZCwgZmFsc2UKKwkgKiBvdGhlcndpc2UuCisJICoKKwkgKiBUaGlzIGNhbGxiYWNrIGFsbG93cyB0 aGUgdGFibGUgQU0gdG8gZGlyZWN0bHkgbWFuYWdlIHRoZSBzY2FuIHByb2Nlc3MsCisJICogaW5j bHVkaW5nIGludGVyZmFjaW5nIHdpdGggdGhlIGluZGV4IEFNLiBUaGUgY2FsbGVyIHNpbXBseSBz cGVjaWZpZXMKKwkgKiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzY2FuOyB0aGUgdGFibGUgQU0gdGFr ZXMgY2FyZSBvZiByZXRyaWV2aW5nIFRJRHMKKwkgKiBmcm9tIHRoZSBpbmRleCwgcGVyZm9ybWlu ZyB2aXNpYmlsaXR5IGNoZWNrcywgYW5kIHJldHVybmluZyB0dXBsZXMgaW4KKwkgKiB0aGUgc2xv dC4KKwkgKi8KKwlib29sCQkoKmluZGV4X2dldG5leHRfc2xvdCkgKEluZGV4U2NhbkRlc2Mgc2Nh biwKKwkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJICAgVHVw bGVUYWJsZVNsb3QgKnNsb3QpOworCiAJLyoKIAkgKiBGZXRjaCB0dXBsZSBhdCBgdGlkYCBpbnRv IGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QKIAkgKiBhY2NvcmRpbmcgdG8g YHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBhc3NlZCB0aGUgdmlzaWJpbGl0 eQogCSAqIHRlc3QsIHJldHVybiB0cnVlLCBmYWxzZSBvdGhlcndpc2UuCiAJICoKKwkgKiBUaGlz IGlzIGEgbG93ZXItbGV2ZWwgY2FsbGJhY2sgdGhhdCB0YWtlcyBhIFRJRCBmcm9tIHRoZSBjYWxs ZXIuCisJICogQ2FsbGVycyBzaG91bGQgZmF2b3IgdGhlIGluZGV4X2dldG5leHRfc2xvdCBjYWxs YmFjayB3aGVuZXZlciBwb3NzaWJsZS4KKwkgKgogCSAqIE5vdGUgdGhhdCBBTXMgdGhhdCBkbyBu b3QgbmVjZXNzYXJpbHkgdXBkYXRlIGluZGV4ZXMgd2hlbiBpbmRleGVkCiAJICogY29sdW1ucyBk byBub3QgY2hhbmdlLCBuZWVkIHRvIHJldHVybiB0aGUgY3VycmVudC9jb3JyZWN0IHZlcnNpb24g b2YKIAkgKiB0aGUgdHVwbGUgdGhhdCBpcyB2aXNpYmxlIHRvIHRoZSBzbmFwc2hvdCwgZXZlbiBp ZiB0aGUgdGlkIHBvaW50cyB0byBhbgpAQCAtMTE4OCw2ICsxMjA2LDI2IEBAIHRhYmxlX2luZGV4 X2ZldGNoX2VuZChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAlzY2FuLT5yZWwt PnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2VuZChzY2FuKTsKIH0KIAorLyoKKyAqIEZldGNoIHRo ZSBuZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIGBzbG90YCwgc2Nhbm5pbmcgaW4g dGhlCisgKiBzcGVjaWZpZWQgZGlyZWN0aW9uLiBSZXR1cm5zIHRydWUgaWYgYSB0dXBsZSB3YXMg Zm91bmQsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgaW5kZXggc2NhbiBzaG91bGQgaGF2 ZSBiZWVuIHN0YXJ0ZWQgdmlhIHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKCkuCisgKiBDYWxsZXJz IG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjayBhbmQgcmVjaGVjayBzY2FuIGtleXMgaWYgcmVx dWlyZWQuCisgKgorICogSW5kZXgtb25seSBzY2FuIGNhbGxlcnMgKHRoYXQgcGFzcyB4c193YW50 X2l0dXA9dHJ1ZSB0byBpbmRleF9iZWdpbnNjYW4pCisgKiBjYW4gY29uc3VtZSBpbmRleCB0dXBs ZSByZXN1bHRzIGJ5IGV4YW1pbmluZyBJbmRleFNjYW5EZXNjRGF0YSBmaWVsZHMgc3VjaAorICog YXMgeHNfaXR1cCBhbmQgeHNfaGl0dXAuICBUaGUgdGFibGUgQU0gd29uJ3QgdXN1YWxseSBmZXRj aCBhIGhlYXAgdHVwbGUKKyAqIGludG8gdGhlIHByb3ZpZGVkIHNsb3QgaW4gdGhlIGNhc2Ugb2Yg eHNfd2FudF9pdHVwPXRydWUgY2FsbGVycy4KKyAqLworc3RhdGljIGlubGluZSBib29sCit0YWJs ZV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBpc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24sCisJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJcmV0dXJuIGlzY2Fu LT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X2dldG5leHRfc2xvdChpc2NhbiwKKwkJ CQkJCQkJCQkJCQkJCSAgIGRpcmVjdGlvbiwgc2xvdCk7Cit9CisKIC8qCiAgKiBGZXRjaGVzLCBh cyBwYXJ0IG9mIGFuIGluZGV4IHNjYW4sIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRl ciBkb2luZwogICogYSB2aXNpYmlsaXR5IHRlc3QgYWNjb3JkaW5nIHRvIGBzbmFwc2hvdGAuIElm IGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBwYXNzZWQKQEAgLTEyMTEsNiArMTI0OSw5IEBAIHRhYmxl X2luZGV4X2ZldGNoX2VuZChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKICAqIGVu dHJ5IChsaWtlIGhlYXAncyBIT1QpLiBXaGVyZWFzIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJz aW9uKCkgb25seQogICogZXZhbHVhdGVzIHRoZSB0dXBsZSBleGFjdGx5IGF0IGB0aWRgLiBPdXRz aWRlIG9mIGluZGV4IGVudHJ5IC0+dGFibGUgdHVwbGUKICAqIGxvb2t1cHMsIHRhYmxlX3R1cGxl X2ZldGNoX3Jvd192ZXJzaW9uKCkgaXMgd2hhdCdzIHVzdWFsbHkgbmVlZGVkLgorICoKKyAqIFRo aXMgaXMgYSBsb3dlci1sZXZlbCBpbnRlcmZhY2UgdGhhdCB0YWtlcyBhIFRJRCBmcm9tIHRoZSBj YWxsZXIuICBDYWxsZXJzCisgKiBzaG91bGQgZmF2b3IgdGhlIHRhYmxlX2luZGV4X2dldG5leHRf c2xvdCBpbnRlcmZhY2Ugd2hlbmV2ZXIgcG9zc2libGUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9v bAogdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNj YW4sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaCBi L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oCmluZGV4IDg4NDdkN2Y5NC4u YjViOGY1MDlhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25v ZGUuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaApAQCAtNDgs NiArNDgsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uCiB7CiAJ LyogSW5kZXggc2VhcmNoIGNvdW50IChpbmNyZW1lbnRlZCB3aXRoIHBnc3RhdF9jb3VudF9pbmRl eF9zY2FuIGNhbGwpICovCiAJdWludDY0CQluc2VhcmNoZXM7CisKKwkvKgorCSAqIGhlYXAgYmxv Y2tzIGZldGNoZWQgY291bnRzIChpbmNyZW1lbnRlZCBieSBpbmRleF9nZXRuZXh0X3Nsb3QgY2Fs bHMKKwkgKiB3aXRoaW4gdGFibGUgQU1zLCB0aG91Z2ggb25seSBkdXJpbmcgaW5kZXgtb25seSBz Y2FucykKKwkgKi8KKwl1aW50NjQJCW5oZWFwZmV0Y2hlczsKIH0gSW5kZXhTY2FuSW5zdHJ1bWVu dGF0aW9uOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCBmODA1M2Q5ZTUuLjc5M2IxYTNj NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE3NTMsNyArMTc1Myw2IEBAIHR5cGVkZWYgc3Ry dWN0IEluZGV4U2NhblN0YXRlCiAgKgkJSW5zdHJ1bWVudAkJICAgbG9jYWwgaW5kZXggc2NhbiBp bnN0cnVtZW50YXRpb24KICAqCQlTaGFyZWRJbmZvCQkgICBwYXJhbGxlbCB3b3JrZXIgaW5zdHJ1 bWVudGF0aW9uIChubyBsZWFkZXIgZW50cnkpCiAgKgkJVGFibGVTbG90CQkgICBzbG90IGZvciBo b2xkaW5nIHR1cGxlcyBmZXRjaGVkIGZyb20gdGhlIHRhYmxlCi0gKgkJVk1CdWZmZXIJCSAgIGJ1 ZmZlciBpbiB1c2UgZm9yIHZpc2liaWxpdHkgbWFwIHRlc3RpbmcsIGlmIGFueQogICoJCVBzY2Fu TGVuCQkgICBzaXplIG9mIHBhcmFsbGVsIGluZGV4LW9ubHkgc2NhbiBkZXNjcmlwdG9yCiAgKgkJ TmFtZUNTdHJpbmdBdHROdW1zIGF0dG51bXMgb2YgbmFtZSB0eXBlZCBjb2x1bW5zIHRvIHBhZCB0 byBOQU1FREFUQUxFTgogICoJCU5hbWVDU3RyaW5nQ291bnQgICBudW1iZXIgb2YgZWxlbWVudHMg aW4gdGhlIE5hbWVDU3RyaW5nQXR0TnVtcyBhcnJheQpAQCAtMTc3Niw3ICsxNzc1LDYgQEAgdHlw ZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhblN0YXRlCiAJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9u IGlvc3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3Nf U2hhcmVkSW5mbzsKIAlUdXBsZVRhYmxlU2xvdCAqaW9zc19UYWJsZVNsb3Q7Ci0JQnVmZmVyCQlp b3NzX1ZNQnVmZmVyOwogCVNpemUJCWlvc3NfUHNjYW5MZW47CiAJQXR0ck51bWJlciAqaW9zc19O YW1lQ1N0cmluZ0F0dE51bXM7CiAJaW50CQkJaW9zc19OYW1lQ1N0cmluZ0NvdW50OwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9w YXRobm9kZXMuaAppbmRleCA0NDk4ODViOTMuLjNjODE2MDJiNCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmgKQEAgLTEzNDQsNyArMTM0NCw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4T3B0SW5mbwogCS8q IGRvZXMgQU0gaGF2ZSBhbWdldGJpdG1hcCBpbnRlcmZhY2U/ICovCiAJYm9vbAkJYW1oYXNnZXRi aXRtYXA7CiAJYm9vbAkJYW1jYW5wYXJhbGxlbDsKLQkvKiBkb2VzIEFNIGhhdmUgYW1tYXJrcG9z IGludGVyZmFjZT8gKi8KKwkvKiBpcyBBTSBwcmVwYXJlZCBmb3IgdXMgdG8gcmVzdG9yZSBhIG1h cms/ICovCiAJYm9vbAkJYW1jYW5tYXJrcG9zOwogCS8qIEFNJ3MgY29zdCBlc3RpbWF0b3IgKi8K IAkvKiBSYXRoZXIgdGhhbiBpbmNsdWRlIGFtYXBpLmggaGVyZSwgd2UgZGVjbGFyZSBhbWNvc3Rl c3RpbWF0ZSBsaWtlIHRoaXMgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmlu L2JyaW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwppbmRleCA2ODg3ZTQyMTQu LmQ1ZDAxYjg3NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwpAQCAtMjk0LDEwICsyOTQsMTEgQEAg YnJpbmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gYnJpbmJlZ2lu c2NhbiwKIAkJLmFtcmVzY2FuID0gYnJpbnJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAor CQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWZyZWViYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJp dG1hcCA9IGJyaW5nZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBicmluZW5kc2NhbiwKLQkJLmFt bWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBO VUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxl bHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9n aW5nZXQuYwppbmRleCA2YjE0OGU2OWEuLjhmNzAzM2Q2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW5nZXQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdl dC5jCkBAIC0xOTUzLDkgKzE5NTMsOSBAQCBnaW5nZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2Fu LCBUSURCaXRtYXAgKnRibSkKIAkgKiBpbnRvIHRoZSBtYWluIGluZGV4LCBhbmQgc28gd2UgbWln aHQgdmlzaXQgaXQgYSBzZWNvbmQgdGltZSBkdXJpbmcgdGhlCiAJICogbWFpbiBzY2FuLiAgVGhp cyBpcyBva2F5IGJlY2F1c2Ugd2UnbGwganVzdCByZS1zZXQgdGhlIHNhbWUgYml0IGluIHRoZQog CSAqIGJpdG1hcC4gIChUaGUgcG9zc2liaWxpdHkgb2YgZHVwbGljYXRlIHZpc2l0cyBpcyBhIG1h am9yIHJlYXNvbiB3aHkgR0lOCi0JICogY2FuJ3Qgc3VwcG9ydCB0aGUgYW1nZXR0dXBsZSBBUEks IGhvd2V2ZXIuKSBOb3RlIHRoYXQgaXQgd291bGQgbm90IGRvCi0JICogdG8gc2NhbiB0aGUgbWFp biBpbmRleCBiZWZvcmUgdGhlIHBlbmRpbmcgbGlzdCwgc2luY2UgY29uY3VycmVudAotCSAqIGNs ZWFudXAgY291bGQgdGhlbiBtYWtlIHVzIG1pc3MgZW50cmllcyBlbnRpcmVseS4KKwkgKiBjYW4n dCBzdXBwb3J0IGVpdGhlciB0aGUgYW1nZXR0dXBsZSBvciBhbWdldGJhdGNoIEFQSS4pIE5vdGUg dGhhdCBpdAorCSAqIHdvdWxkIG5vdCBkbyB0byBzY2FuIHRoZSBtYWluIGluZGV4IGJlZm9yZSB0 aGUgcGVuZGluZyBsaXN0LCBzaW5jZQorCSAqIGNvbmN1cnJlbnQgY2xlYW51cCBjb3VsZCB0aGVu IG1ha2UgdXMgbWlzcyBlbnRyaWVzIGVudGlyZWx5LgogCSAqLwogCXNjYW5QZW5kaW5nSW5zZXJ0 KHNjYW4sIHRibSwgJm50aWRzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dp bi9naW51dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwppbmRleCBkMjA1 MDkzZTIuLjEyNjNkYzE4MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51 dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKQEAgLTgyLDEwICs4 MiwxMSBAQCBnaW5oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGdp bmJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZ2lucmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5V TEwsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtZnJlZWJhdGNoID0gTlVMTCwKIAkJLmFt Z2V0Yml0bWFwID0gZ2luZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gZ2luZW5kc2NhbiwKLQkJ LmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQg PSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJh bGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lz dC9naXN0LmMKaW5kZXggZDU5NDQyMDVkLi45YzIxOWNhZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naXN0L2dpc3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0 LmMKQEAgLTEwMywxMCArMTAzLDExIEBAIGdpc3RoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CS5hbWJlZ2luc2NhbiA9IGdpc3RiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGdpc3RyZXNjYW4s CiAJCS5hbWdldHR1cGxlID0gZ2lzdGdldHR1cGxlLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJ CS5hbWZyZWViYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGdpc3RnZXRiaXRtYXAsCiAJ CS5hbWVuZHNjYW4gPSBnaXN0ZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJl c3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFs bGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJh bGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggZTg4ZGRiMzJhLi42 YTIwYjY3ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTEwMiwxMCArMTAyLDExIEBAIGhh c2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGhhc2hiZWdpbnNj YW4sCiAJCS5hbXJlc2NhbiA9IGhhc2hyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gaGFzaGdldHR1 cGxlLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWZyZWViYXRjaCA9IE5VTEwsCiAJCS5h bWdldGJpdG1hcCA9IGhhc2hnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBoYXNoZW5kc2NhbiwK LQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVz ZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRw YXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBjYmVmNzNlNWQuLjAzYjRmYWRh OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0xOSw2ICsx OSw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL2Ft YXBpLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hlYXBh bS5oIgogI2luY2x1ZGUgImFjY2Vzcy9oZWFwdG9hc3QuaCIKQEAgLTgxLDEwICs4MiwxMiBAQCBo ZWFwYW1fc2xvdF9jYWxsYmFja3MoUmVsYXRpb24gcmVsYXRpb24pCiBzdGF0aWMgSW5kZXhGZXRj aFRhYmxlRGF0YSAqCiBoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsKQogewot CUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2MwX29iamVjdChJbmRleEZldGNoSGVh cERhdGEpOworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2Nfb2JqZWN0KEluZGV4 RmV0Y2hIZWFwRGF0YSk7CiAKIAloc2Nhbi0+eHNfYmFzZS5yZWwgPSByZWw7CiAJaHNjYW4tPnhz X2NidWYgPSBJbnZhbGlkQnVmZmVyOworCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7CisJaHNjYW4tPnZtYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAogCXJldHVybiAmaHNjYW4tPnhz X2Jhc2U7CiB9CkBAIC05NCwxMCArOTcsMTIgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KElu ZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiB7CiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9 IChJbmRleEZldGNoSGVhcERhdGEgKikgc2NhbjsKIAorCS8qIGRlbGliZXJhdGVseSBkb24ndCBk cm9wIFZNIGJ1ZmZlciBwaW4gaGVyZSAqLwogCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19j YnVmKSkKIAl7CiAJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOwogCQloc2Nhbi0+eHNf Y2J1ZiA9IEludmFsaWRCdWZmZXI7CisJCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7CiAJfQogfQogCkBAIC0xMDgsNiArMTEzLDEyIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQo SW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAogCWhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChz Y2FuKTsKIAorCWlmIChoc2Nhbi0+dm1idWYgIT0gSW52YWxpZEJ1ZmZlcikKKwl7CisJCVJlbGVh c2VCdWZmZXIoaHNjYW4tPnZtYnVmKTsKKwkJaHNjYW4tPnZtYnVmID0gSW52YWxpZEJ1ZmZlcjsK Kwl9CisKIAlwZnJlZShoc2Nhbik7CiB9CiAKQEAgLTEyNSwyMiArMTM2LDMyIEBAIGhlYXBhbV9p bmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAlBc3Nl cnQoVFRTX0lTX0JVRkZFUlRVUExFKHNsb3QpKTsKIAogCS8qIFdlIGNhbiBza2lwIHRoZSBidWZm ZXItc3dpdGNoaW5nIGxvZ2ljIGlmIHdlJ3JlIGluIG1pZC1IT1QgY2hhaW4uICovCi0JaWYgKCEq Y2FsbF9hZ2FpbikKKwlpZiAoaHNjYW4tPnhzX2JsayAhPSBJdGVtUG9pbnRlckdldEJsb2NrTnVt YmVyKHRpZCkpCiAJewotCQkvKiBTd2l0Y2ggdG8gY29ycmVjdCBidWZmZXIgaWYgd2UgZG9uJ3Qg aGF2ZSBpdCBhbHJlYWR5ICovCi0JCUJ1ZmZlcgkJcHJldl9idWYgPSBoc2Nhbi0+eHNfY2J1ZjsK KwkJQXNzZXJ0KCEqY2FsbF9hZ2Fpbik7CiAKLQkJaHNjYW4tPnhzX2NidWYgPSBSZWxlYXNlQW5k UmVhZEJ1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNfYmFzZS5y ZWwsCi0JCQkJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKKwkJLyog UmVtZW1iZXIgdGhpcyBidWZmZXIncyBibG9jayBudW1iZXIgZm9yIG5leHQgdGltZSAqLworCQlo c2Nhbi0+eHNfYmxrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOworCisJCWlmIChC dWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKKwkJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhz X2NidWYpOwogCiAJCS8qCi0JCSAqIFBydW5lIHBhZ2UsIGJ1dCBvbmx5IGlmIHdlIHdlcmVuJ3Qg YWxyZWFkeSBvbiB0aGlzIHBhZ2UKKwkJICogV2hlbiB1c2luZyBhIHJlYWQgc3RyZWFtLCB0aGUg c3RyZWFtIHdpbGwgYWxyZWFkeSBrbm93IHdoaWNoIGJsb2NrCisJCSAqIG51bWJlciBjb21lcyBu ZXh0ICh0aG91Z2ggYW4gYXNzZXJ0aW9uIHdpbGwgdmVyaWZ5IGEgbWF0Y2ggYmVsb3cpCiAJCSAq LwotCQlpZiAocHJldl9idWYgIT0gaHNjYW4tPnhzX2NidWYpCi0JCQloZWFwX3BhZ2VfcHJ1bmVf b3B0KGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYpOworCQloc2Nhbi0+eHNfY2J1 ZiA9IFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfYmxrKTsKKworCQkv KgorCQkgKiBQcnVuZSBwYWdlIHdoZW4gaXQgaXMgcGlubmVkIGZvciB0aGUgZmlyc3QgdGltZQor CQkgKi8KKwkJaGVhcF9wYWdlX3BydW5lX29wdChoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54 c19jYnVmKTsKIAl9CiAKKwkvKiBBc3NlcnQgdGhhdCB0aGUgVElEJ3MgYmxvY2sgbnVtYmVyJ3Mg YnVmZmVyIGlzIG5vdyBwaW5uZWQgKi8KKwlBc3NlcnQoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNf Y2J1ZikpOworCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJlcihoc2Nhbi0+eHNfY2J1ZikgPT0g aHNjYW4tPnhzX2Jsayk7CisKIAkvKiBPYnRhaW4gc2hhcmUtbG9jayBvbiB0aGUgYnVmZmVyIHNv IHdlIGNhbiBleGFtaW5lIHZpc2liaWxpdHkgKi8KIAlMb2NrQnVmZmVyKGhzY2FuLT54c19jYnVm LCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJZ290X2hlYXBfdHVwbGUgPSBoZWFwX2hvdF9zZWFyY2hf YnVmZmVyKHRpZCwKQEAgLTE3Myw2ICsxOTQsNTIxIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBs ZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAlyZXR1cm4gZ290X2hlYXBfdHVw bGU7CiB9CiAKK3N0YXRpYyBwZ19ub2lubGluZSB2b2lkCitoZWFwYW1fYmF0Y2hfcmV3aW5kKElu ZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hSaW5nQnVmZmVyICpyaW5nYnVmLAorCQkJCQlTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbikKK3sKKwkvKgorCSAqIEhhbmRsZSBhIGNoYW5nZSBpbiB0aGUgc2Nh bidzIGRpcmVjdGlvbi4KKwkgKgorCSAqIFJlbGVhc2UgZnV0dXJlIGJhdGNoZXMgcHJvcGVybHks IHRvIG1ha2UgaXQgbG9vayBsaWtlIHRoZSBjdXJyZW50IGJhdGNoCisJICogaXMgdGhlIG9ubHkg b25lIHdlIGxvYWRlZC4KKwkgKi8KKwl3aGlsZSAocmluZ2J1Zi0+bmV4dEJhdGNoID4gcmluZ2J1 Zi0+aGVhZEJhdGNoICsgMSkKKwl7CisJCS8qIHJlbGVhc2UgImxhdGVyIiBiYXRjaGVzIGluIHJl dmVyc2Ugb3JkZXIgKi8KKwkJQmF0Y2hJbmRleFNjYW4gZmJhdGNoOworCisJCWZiYXRjaCA9IElO REVYX1NDQU5fQkFUQ0goc2NhbiwgcmluZ2J1Zi0+bmV4dEJhdGNoIC0gMSk7CisJCWJhdGNoX2Zy ZWUoc2NhbiwgZmJhdGNoKTsKKwkJcmluZ2J1Zi0+bmV4dEJhdGNoLS07CisJfQorCisJLyoKKwkg KiBSZW1lbWJlciB0aGUgbmV3IGRpcmVjdGlvbiwgYW5kIG1ha2Ugc3VyZSB0aGUgc2NhbiBpcyBu b3QgbWFya2VkIGFzCisJICogImZpbmlzaGVkIiAod2UgbWlnaHQgaGF2ZSBhbHJlYWR5IHJlYWQg dGhlIGxhc3QgYmF0Y2gsIGJ1dCBub3cgd2UgbmVlZAorCSAqIHRvIHN0YXJ0IG92ZXIpLgorCSAq LworCXJpbmdidWYtPmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKwlzY2FuLT5maW5pc2hlZCA9IGZh bHNlOworfQorCitzdGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVyCitoZWFwYW1fYmF0Y2hfcmV0dXJu X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIHNjYW5CYXRjaCwKKwkJCQkJ CUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MpCit7CisJYmF0Y2hfYXNzZXJ0X3Bvc192YWxpZChz Y2FuLCBzY2FuUG9zKTsKKworCXBnc3RhdF9jb3VudF9pbmRleF90dXBsZXMoc2Nhbi0+aW5kZXhS ZWxhdGlvbiwgMSk7CisKKwkvKiBzZXQgdGhlIFRJRCAvIGl0dXAgZm9yIHRoZSBzY2FuICovCisJ c2Nhbi0+eHNfaGVhcHRpZCA9IHNjYW5CYXRjaC0+aXRlbXNbc2NhblBvcy0+aXRlbV0uaGVhcFRp ZDsKKworCS8qIHBsYWluIGluZGV4IHNjYW5zIHdpbGwgaGF2ZSBmbGFncyBsZWZ0IHNldCB0byAw ICovCisJc2Nhbi0+eHNfdmlzaWJsZSA9IHNjYW5CYXRjaC0+aXRlbXNbc2NhblBvcy0+aXRlbV0u YWxsVmlzaWJsZTsKKworCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCXNjYW4tPnhzX2l0dXAg PQorCQkJKEluZGV4VHVwbGUpIChzY2FuQmF0Y2gtPmN1cnJUdXBsZXMgKworCQkJCQkJICBzY2Fu QmF0Y2gtPml0ZW1zW3NjYW5Qb3MtPml0ZW1dLnR1cGxlT2Zmc2V0KTsKKworCXJldHVybiAmc2Nh bi0+eHNfaGVhcHRpZDsKK30KKworLyoKKyAqIGhlYXBfYmF0Y2hfcmVzb2x2ZV92aXNpYmlsaXR5 CisgKgkJT2J0YWluIHZpc2liaWxpdHkgaW5mb3JtYXRpb24gZm9yIGV2ZXJ5IFRJRCBmcm9tIGNh bGxlcidzIGJhdGNoLgorICovCitzdGF0aWMgdm9pZAoraGVhcF9iYXRjaF9yZXNvbHZlX3Zpc2li aWxpdHkoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkKK3sKKwlJbmRl eEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19o ZWFwZmV0Y2g7CisKKwlmb3IgKGludCBpID0gYmF0Y2gtPmZpcnN0SXRlbTsgaSA8PSBiYXRjaC0+ bGFzdEl0ZW07IGkrKykKKwl7CisJCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVtID0gJmJhdGNoLT5p dGVtc1tpXTsKKwkJSXRlbVBvaW50ZXIgdGlkID0gJml0ZW0tPmhlYXBUaWQ7CisKKwkJaWYgKFZN X0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwKKwkJCQkJCSAgIEl0ZW1Qb2ludGVyR2V0 QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCSAgICZoc2Nhbi0+dm1idWYpKQorCQl7CisJCQlpdGVt LT5hbGxWaXNpYmxlID0gdHJ1ZTsKKwkJfQorCX0KK30KKworLyoKKyAqIGhlYXBfYmF0Y2hwb3Nf YWR2YW5jZQorICoJCUFkdmFuY2UgcG9zaXRpb24gdG8gaXRzIG5leHQgaXRlbSBpbiB0aGUgYmF0 Y2guCisgKgorICogQWR2YW5jZSB0byB0aGUgbmV4dCBpdGVtIHdpdGhpbiB0aGUgcHJvdmlkZWQg YmF0Y2ggKG9yIHRvIHRoZSBwcmV2aW91cyBpdGVtLAorICogd2hlbiBzY2FubmluZyBiYWNrd2Fy ZHMpLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9zaXRpb24gY291bGQgYmUgYWR2YW5j ZWQuICBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlcmUKKyAqIGFyZSBubyBtb3JlIGl0ZW1zIGluIHRo ZSBiYXRjaCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wK K2hlYXBfYmF0Y2hwb3NfYWR2YW5jZShCYXRjaEluZGV4U2NhbiBiYXRjaCwgQmF0Y2hSaW5nSXRl bVBvcyAqcG9zLAorCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUFzc2VydCgh SU5ERVhfU0NBTl9QT1NfSU5WQUxJRChwb3MpKTsKKworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKGRpcmVjdGlvbikpCisJeworCQlpZiAoKytwb3MtPml0ZW0gPiBiYXRjaC0+bGFzdEl0ZW0p CisJCQlyZXR1cm4gZmFsc2U7CisJfQorCWVsc2UJCQkJCQkvKiBTY2FuRGlyZWN0aW9uSXNCYWNr d2FyZCAqLworCXsKKwkJaWYgKC0tcG9zLT5pdGVtIDwgYmF0Y2gtPmZpcnN0SXRlbSkKKwkJCXJl dHVybiBmYWxzZTsKKwl9CisKKwkvKiBBZHZhbmNlZCB3aXRoaW4gYmF0Y2ggKi8KKwlyZXR1cm4g dHJ1ZTsKK30KKworLyoKKyAqIGhlYXBfYmF0Y2hwb3NfbmV3YmF0Y2gKKyAqCQlBZHZhbmNlIGJh dGNoIHBvc2l0aW9uIHN0YXJ0IG9mIGl0cyBuZXcgYmF0Y2guCisgKgorICogU2V0cyB0aGUgZ2l2 ZW4gcG9zaXRpb24gdG8gdGhlIGZpc3QgaXRlbSBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24g KG9yIHRvCisgKiB0aGUgbGFzdCBpdGVtLCB3aGVuIHNjYW5uaW5nIGJhY2t3YXJkcykuICAgQWxz byBhZHZhbmNlcy9pbmNyZW1lbnRzIGJhdGNoCisgKiBvZmZzZXQgZnJvbSBwb3NpdGlvbiBzdWNo IHRoYXQgaXQgcG9pbnRzIHRvIG5ld0JhdGNoRm9yUG9zLgorICovCitzdGF0aWMgaW5saW5lIHZv aWQKK2hlYXBfYmF0Y2hwb3NfbmV3YmF0Y2goQmF0Y2hJbmRleFNjYW4gbmV3QmF0Y2hGb3JQb3Ms IEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcywKKwkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24p Cit7CisJQXNzZXJ0KG5ld0JhdGNoRm9yUG9zLT5kaXIgPT0gZGlyZWN0aW9uKTsKKworCS8qIE5l eHQgYmF0Y2ggc3VjY2Vzc2Z1bGx5IGxvYWRlZCAqLworCXBvcy0+YmF0Y2grKzsKKwlpZiAoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQlwb3MtPml0ZW0gPSBuZXdCYXRjaEZv clBvcy0+Zmlyc3RJdGVtOworCWVsc2UKKwkJcG9zLT5pdGVtID0gbmV3QmF0Y2hGb3JQb3MtPmxh c3RJdGVtOworCisJQXNzZXJ0KCFJTkRFWF9TQ0FOX1BPU19JTlZBTElEKHBvcykpOworfQorCisv KiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaGVhcF9iYXRjaF9nZXRuZXh0IC0gZ2V0IHRoZSBuZXh0 IGJhdGNoIG9mIFRJRHMgZnJvbSBhIHNjYW4KKyAqCisgKiBDYWxsZWQgd2hlbiB3ZSBuZWVkIHRv IGxvYWQgdGhlIG5leHQgYmF0Y2ggb2YgaW5kZXggZW50cmllcyB0byBwcm9jZXNzIGluCisgKiB0 aGUgZ2l2ZW4gZGlyZWN0aW9uLgorICoKKyAqIFJldHVybnMgdGhlIG5leHQgYmF0Y2ggdG8gYmUg cHJvY2Vzc2VkIGJ5IHRoZSBpbmRleCBzY2FuLCBvciBOVUxMIHdoZW4KKyAqIHRoZXJlIGFyZSBu byBtb3JlIG1hdGNoZXMgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLiAgQWxzbyBhcHBlbmRz IHRoZQorICogcmV0dXJuZWQgYmF0Y2ggdG8gdGhlIGVuZCBvZiB0aGUgc2NhbidzIGJhdGNoIHJp bmcgYnVmZmVyLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgQmF0Y2hJbmRleFNj YW4KK2hlYXBfYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2Fu IHByaW9yYmF0Y2gsCisJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQmF0Y2hS aW5nQnVmZmVyICpyaW5nYnVmID0gc2Nhbi0+cmluZ2J1ZjsKKwlCYXRjaEluZGV4U2NhbiBiYXRj aCA9IE5VTEw7CisKKwkvKiBYWFg6IHdlIHNob3VsZCBhc3NlcnQgdGhhdCBhIHNuYXBzaG90IGlz IHB1c2hlZCBvciByZWdpc3RlcmVkICovCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJl Y2VudFhtaW4pKTsKKworCS8qCisJICogV2hlbiBjYWxsZXIgcHJvdmlkZXMgYSBwcmlvcmJhdGNo IGl0IGhhZCBiZXR0ZXIgYmUgZm9yIHRoZSBsYXN0IHZhbGlkCisJICogYmF0Y2ggY3VycmVudGx5 IGluIHRoZSBiYXRjaCByaW5nIGJ1ZmZlciAob3RoZXJ3aXNlIGFwcGVuZGluZyBhIG5ldworCSAq IGJhdGNoIHdvdWxkIHJlc3VsdCBiYXRjaGVzIHRoYXQgYXJlbid0IGluIHNjYW4gb3JkZXIsIHdo aWNoIGlzIHdyb25nKS4KKwkgKi8KKwlBc3NlcnQoIUlOREVYX1NDQU5fQkFUQ0hfRlVMTChzY2Fu KSk7CisJQXNzZXJ0KCFwcmlvcmJhdGNoIHx8CisJCSAgIChJTkRFWF9TQ0FOX0JBVENIX0NPVU5U KHNjYW4pID4gMCAmJgorCQkJSU5ERVhfU0NBTl9CQVRDSChzY2FuLCByaW5nYnVmLT5uZXh0QmF0 Y2ggLSAxKSA9PSBwcmlvcmJhdGNoKSk7CisKKwlpZiAoc2Nhbi0+ZmluaXNoZWQpCisJCXJldHVy biBOVUxMOworCisJYmF0Y2ggPSBzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRi YXRjaChzY2FuLCBwcmlvcmJhdGNoLAorCQkJCQkJCQkJCQkJCSAgZGlyZWN0aW9uKTsKKwlpZiAo YmF0Y2ggIT0gTlVMTCkKKwl7CisJCS8qIFdlIGdvdCB0aGUgYmF0Y2ggZnJvbSB0aGUgQU0gLS0g YXBwZW5kIGl0ICovCisJCUFzc2VydChiYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisKKwkJaWYg KHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJeworCQkJLyoKKwkJCSAqIEluZGV4LW9ubHkgc2Nhbi4g IEVhZ2VybHkgZmV0Y2ggdmlzaWJpbGl0eSBpbmZvIGZyb20gdmlzaWJpbGl0eQorCQkJICogbWFw IGZvciBhbGwgYmF0Y2ggaXRlbSBUSURzLgorCQkJICovCisJCQloZWFwX2JhdGNoX3Jlc29sdmVf dmlzaWJpbGl0eShzY2FuLCBiYXRjaCk7CisJCX0KKworCQlJTkRFWF9TQ0FOX0JBVENIX0FQUEVO RChzY2FuLCBiYXRjaCk7CisKKwkJREVCVUdfTE9HKCJiYXRjaF9nZXRuZXh0IGhlYWRCYXRjaCAl ZCBuZXh0QmF0Y2ggJWQgYmF0Y2ggJXAiLAorCQkJCSAgcmluZ2J1Zi0+aGVhZEJhdGNoLCByaW5n YnVmLT5uZXh0QmF0Y2gsIGJhdGNoKTsKKwl9CisKKwkvKiB4c19oaXR1cCBpcyBub3Qgc3VwcG9y dGVkIGJ5IGFtZ2V0YmF0Y2ggc2NhbnMgKi8KKwlBc3NlcnQoIXNjYW4tPnhzX2hpdHVwKTsKKwor CWJhdGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNjYW4pOworCisJcmV0dXJuIGJhdGNoOworfQor CisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkIC0gZ2V0 IG5leHQgVElEIGZyb20gYmF0Y2ggcmluZyBidWZmZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlt cGxlbWVudHMgaGVhcGFtJ3MgdmVyc2lvbiBvZiBnZXR0aW5nIHRoZSBuZXh0IFRJRCBmcm9tIGFu CisgKiBpbmRleCBzY2FuIHRoYXQgdXNlcyB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UuICBJdCBp cyBpbXBsZW1lbnRlZCB1c2luZworICogdmFyaW91cyBpbmRleGJhdGNoLmMgdXRpbGl0eSByb3V0 aW5lcy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIEl0ZW1Qb2ludGVyCitoZWFw YW1fYmF0Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKnJpbmdidWYgPSBzY2FuLT5yaW5nYnVmOwor CUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmcmluZ2J1Zi0+c2NhblBvczsKKwlCYXRjaElu ZGV4U2NhbiBzY2FuQmF0Y2ggPSBOVUxMOworCisJLyogc2hvdWxkbid0IGdldCBoZXJlIHdpdGhv dXQgYmF0Y2hpbmcgKi8KKwliYXRjaF9hc3NlcnRfYmF0Y2hlc192YWxpZChzY2FuKTsKKworCS8q IHhzX2hpdHVwIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW1nZXRiYXRjaCBzY2FucyAqLworCUFzc2Vy dCghc2Nhbi0+eHNfaGl0dXApOworCisJLyogSW5pdGlhbGl6ZSBkaXJlY3Rpb24gb24gZmlyc3Qg Y2FsbCAqLworCWlmIChyaW5nYnVmLT5kaXJlY3Rpb24gPT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rp b24pCisJCXJpbmdidWYtPmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKworCWlmICh1bmxpa2VseShy aW5nYnVmLT5kaXJlY3Rpb24gIT0gZGlyZWN0aW9uKSkKKwl7CisJCS8qIFdlIG1heSBjaGFuZ2Ug ZGlyZWN0aW9uIGFmdGVyIHJlYWRpbmcgdGhlIGxhc3QgYmF0Y2guICovCisJCXNjYW4tPmZpbmlz aGVkID0gZmFsc2U7CisJfQorCisJLyoKKwkgKiBUcnkgYWR2YW5jaW5nIHRoZSBwb3NpdGlvbiBp biB0aGUgY3VycmVudCBiYXRjaC4gSWYgdGhhdCBkb2Vzbid0CisJICogc3VjY2VlZCwgaXQgbWVh bnMgd2UgZG9uJ3QgaGF2ZSBtb3JlIGl0ZW1zIGluIGl0LCBhbmQgd2UgbmVlZCB0bworCSAqIGFk dmFuY2UgdG8gdGhlIG5leHQgb25lIChpbiB0aGUgbmV3IHNjYW4gZGlyZWN0aW9uKS4KKwkgKi8K KwlpZiAoSU5ERVhfU0NBTl9CQVRDSF9MT0FERUQoc2Nhbiwgc2NhblBvcy0+YmF0Y2gpKQorCXsK KwkJc2NhbkJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisK KwkJaWYgKGhlYXBfYmF0Y2hwb3NfYWR2YW5jZShzY2FuQmF0Y2gsIHNjYW5Qb3MsIGRpcmVjdGlv bikpCisJCQlyZXR1cm4gaGVhcGFtX2JhdGNoX3JldHVybl90aWQoc2Nhbiwgc2NhbkJhdGNoLCBz Y2FuUG9zKTsKKwl9CisKKwlpZiAodW5saWtlbHkocmluZ2J1Zi0+ZGlyZWN0aW9uICE9IGRpcmVj dGlvbikpCisJeworCQkvKiBYWFggc2hvdWxkbid0IGhlYXBhbV9iYXRjaF9yZXdpbmQgdXBkYXRl IHRoZSBzY2FuUG9zIHRvbz8gKi8KKwkJaGVhcGFtX2JhdGNoX3Jld2luZChzY2FuLCByaW5nYnVm LCBkaXJlY3Rpb24pOworCisJCS8qCisJCSAqIFhYWCBJdCBzZWVtcyBhIGJpdCB3ZWlyZCB0byB1 cGRhdGUganVzdCB0aGUgYmF0Y2ggcGFydCBvZiB0aGUKKwkJICogc2NhblBvcy4gRG9lc24ndCBp dCBtYWtlIGl0IHJhdGhlciB3cm9uZywgd2l0aCB0aGUgaXRlbSBzdGlsbCBzZXQKKwkJICogZnJv bSB0aGUgb3JpZ2luYWwgYmF0Y2g/IFRoZSBuZXh0IGNvZGUgYmxvY2sgc2V0cyBpdGVtIHRvby4g U28gaXQKKwkJICogc2VlbXMgd2UncmUgZG9pbmcgdGhpcyBvbmx5IHRvICJmYWtlIiB0aGUgYmF0 Y2gsIGFuZCB0aGVuIHRoZSBuZXh0CisJCSAqIGJsb2NrIHdpbGwgYWR2YW5jZSBiYXRjaCBhbmQg cmVzZXQgdGhlIGl0ZW0uIEl0J3MgY29uZnVzaW5nLCB3b3J0aAorCQkgKiBkb2N1bWVudGluZy4g TWF5YmUgd2Ugc2hvdWxkIHNldCBpdGVtPS0xPworCQkgKi8KKwkJc2NhblBvcy0+YmF0Y2ggPSBy aW5nYnVmLT5uZXh0QmF0Y2ggLSAxOworCX0KKworCS8qCisJICogUmFuIG91dCBvZiBpdGVtcyBm cm9tIHNjYW5CYXRjaC4gIFRyeSB0byBhZHZhbmNlIGl0IHRvIG5leHQgYmF0Y2guCisJICovCisJ aWYgKElOREVYX1NDQU5fQkFUQ0hfTE9BREVEKHNjYW4sIHNjYW5Qb3MtPmJhdGNoICsgMSkpCisJ eworCQkvKiBOZXh0IGJhdGNoIGFscmVhZHkgbG9hZGVkIGJ5IGhlYXBhbV9nZXRuZXh0X3N0cmVh bSAqLworCQlzY2FuQmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIHNjYW5Qb3MtPmJhdGNo ICsgMSk7CisJfQorCWVsc2UgaWYgKChzY2FuQmF0Y2ggPSBoZWFwX2JhdGNoX2dldG5leHQoc2Nh biwgc2NhbkJhdGNoLCBkaXJlY3Rpb24pKSAhPSBOVUxMKQorCXsKKwkJLyogQ2FsbGVkIGFtZ2V0 YmF0Y2ggYWdhaW4sIGxvYWRpbmcgbmV3IHNjYW5CYXRjaCBpbnRvIHJpbmcgYnVmZmVyICovCisJ fQorCWVsc2UKKwl7CisJCS8qCisJCSAqIFRoZXJlIGFyZSBubyBtb3JlIGJhdGNoZXMgdG8gYmUg bG9hZGVkIGluIHRoZSBjdXJyZW50IHNjYW4KKwkJICogZGlyZWN0aW9uLiAgRGVmZW5zaXZlbHkg cmVzZXQgdGhlIHJlYWQgcG9zaXRpb24uCisJCSAqLworCQliYXRjaF9yZXNldF9wb3Moc2NhblBv cyk7CisJCXNjYW4tPmZpbmlzaGVkID0gdHJ1ZTsKKworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkv KiBQb3NpdGlvbiBzY2FuUG9zIHRvIHRoZSBzdGFydCBvZiBuZXcgc2NhbkJhdGNoICovCisJaGVh cF9iYXRjaHBvc19uZXdiYXRjaChzY2FuQmF0Y2gsIHNjYW5Qb3MsIGRpcmVjdGlvbik7CisJQXNz ZXJ0KElOREVYX1NDQU5fQkFUQ0goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpID09IHNjYW5CYXRjaCk7 CisKKwkvKiBGcmVlIG5vdy11bm5lZWRlZCBvbGRlciBiYXRjaC9wcmlvciBzY2FuQmF0Y2ggKi8K KwlpZiAoc2NhblBvcy0+YmF0Y2ggIT0gcmluZ2J1Zi0+aGVhZEJhdGNoKQorCXsKKwkJQmF0Y2hJ bmRleFNjYW4gaGVhZEJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLAorCQkJCQkJCQkJCQkJ CXJpbmdidWYtPmhlYWRCYXRjaCk7CisKKwkJLyogRnJlZSB0aGUgaGVhZCBiYXRjaCAoZXhjZXB0 IHdoZW4gaXQncyBtYXJrQmF0Y2gpICovCisJCWJhdGNoX2ZyZWUoc2NhbiwgaGVhZEJhdGNoKTsK KworCQkvKgorCQkgKiBJbiBhbnkgY2FzZSwgcmVtb3ZlIHRoZSBiYXRjaCBmcm9tIHRoZSByaW5n IGJ1ZmZlciwgZXZlbiBpZiB3ZSBrZXB0CisJCSAqIGl0IGZvciBtYXJrL3Jlc3RvcmUKKwkJICov CisJCXJpbmdidWYtPmhlYWRCYXRjaCsrOworCisJCS8qIHdlIGNhbid0IHNraXAgYW55IGJhdGNo ZXMgKi8KKwkJQXNzZXJ0KHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CisJ fQorCisJcmV0dXJuIGhlYXBhbV9iYXRjaF9yZXR1cm5fdGlkKHNjYW4sIHNjYW5CYXRjaCwgc2Nh blBvcyk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9mZXRjaF9oZWFwIC0g Z2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxlCisgKgorICogVGhlIHJlc3VsdCBpcyBhIHZp c2libGUgaGVhcCB0dXBsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IFRJRCBtb3N0CisgKiBy ZWNlbnRseSBmZXRjaGVkIGJ5IG91ciBjYWxsZXIgaW4gc2Nhbi0+eHNfaGVhcHRpZCwgb3IgTlVM TCBpZiBubyBtb3JlCisgKiBtYXRjaGluZyB0dXBsZXMgZXhpc3QuICAoVGhlcmUgY2FuIGJlIG1v cmUgdGhhbiBvbmUgbWF0Y2hpbmcgdHVwbGUgYmVjYXVzZQorICogb2YgSE9UIGNoYWlucywgYWx0 aG91Z2ggd2hlbiB1c2luZyBhbiBNVkNDIHNuYXBzaG90IGl0IHNob3VsZCBiZSBpbXBvc3NpYmxl CisgKiBmb3IgbW9yZSB0aGFuIG9uZSBzdWNoIHR1cGxlIHRvIGV4aXN0LikKKyAqCisgKiBPbiBz dWNjZXNzLCB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGhlYXAgdHVwIGlzIHBpbm5lZC4gIFRo ZSBwaW4gbXVzdCBiZQorICogZHJvcHBlZCBlbHNld2hlcmUuCisgKiAtLS0tLS0tLS0tLS0tLS0t CisgKi8KK3N0YXRpYyBib29sCitpbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2Nhbiwg VHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJYm9vbAkJYWxsX2RlYWQgPSBmYWxzZTsKKwlib29s CQlmb3VuZDsKKworCWZvdW5kID0gaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHNjYW4tPnhzX2hl YXBmZXRjaCwgJnNjYW4tPnhzX2hlYXB0aWQsCisJCQkJCQkJCQkgc2Nhbi0+eHNfc25hcHNob3Qs IHNsb3QsCisJCQkJCQkJCQkgJnNjYW4tPnhzX2hlYXBfY29udGludWUsICZhbGxfZGVhZCk7CisK KwlpZiAoZm91bmQpCisJCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPmluZGV4UmVsYXRp b24pOworCisJLyoKKwkgKiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3Vu ZCBvbmx5IGRlYWQgdHVwbGVzLCByZW1lbWJlciBpdAorCSAqIGZvciBsYXRlci4gIFdlIGRvIG5v dCBkbyB0aGlzIHdoZW4gaW4gcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlvbGF0ZQorCSAqIE1W Q0MgdG8gZG8gc28uICBTZWUgY29tbWVudHMgaW4gUmVsYXRpb25HZXRJbmRleFNjYW4oKS4KKwkg Ki8KKwlpZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKKwl7CisJCWlmIChzY2FuLT5y aW5nYnVmKQorCQl7CisJCQlpZiAoYWxsX2RlYWQpCisJCQkJaW5kZXhfYmF0Y2hfa2lsbF9pdGVt KHNjYW4pOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFRlbGwgYW1nZXR0dXBsZS1i YXNlZCBpbmRleCBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQKKwkJCSAqICh0aGlz IHdpbGwgdGFrZSBlZmZlY3QgaW4gdGhlIG5leHQgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4dF90aWQp CisJCQkgKi8KKwkJCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKKwkJfQorCX0K KworCXJldHVybiBmb3VuZDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWhlYXBhbV9p bmRleF9nZXRuZXh0X3Nsb3QgLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNjYW4KKyAqCisg KiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMg YW5kIHRoZSBzbmFwc2hvdCB3YXMKKyAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBUaGUgdHVw bGUgaXMgc3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KKyAqCisgKiBPbiBzdWNjZXNzLCBy ZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUgaGVsZCwgYW5kIHdp bGwgYmUKKyAqIGRyb3BwZWQgYnkgYSBmdXR1cmUgY2FsbCBoZXJlIChvciBieSBhIGxhdGVyIGNh bGwgdG8gaW5kZXhfZW5kc2NhbikuCisgKgorICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nh bi0+eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKKyAqIHNjYW4ga2V5 cyBpZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBo YXZlCisgKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdl bmVyYWwgY2FzZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIGJvb2wKK2hlYXBh bV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbiwKKwkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJSW5kZXhGZXRjaEhl YXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNo OworCUl0ZW1Qb2ludGVyIHRpZCA9IE5VTEw7CisKKwlmb3IgKDs7KQorCXsKKwkJaWYgKCFzY2Fu LT54c19oZWFwX2NvbnRpbnVlKQorCQl7CisJCQkvKgorCQkJICogU2NhbnMgdGhhdCB1c2UgYW4g YW1nZXRiYXRjaCBpbmRleCBBTSBhcmUgbWFuYWdlZCBieSBoZWFwYW0ncworCQkJICogaW5kZXgg c2NhbiBtYW5hZ2VyLiAgVGhpcyBnaXZlcyBoZWFwYW0gdGhlIGFiaWxpdHkgdG8gcmVhZCBoZWFw CisJCQkgKiB0dXBsZXMgaW4gYSBmbGV4aWJsZSBvcmRlciB0aGF0IGlzIGF0dHVuZWQgdG8gYm90 aCBjb3N0cyBhbmQKKwkJCSAqIGJlbmVmaXRzIG9uIHRoZSBoZWFwYW0gYW5kIHRhYmxlIEFNIHNp ZGUuCisJCQkgKgorCQkJICogU2NhbnMgdGhhdCB1c2UgYW4gYW1nZXR0dXBsZSBpbmRleCBBTSBz aW1wbHkgY2FsbCB0aHJvdWdoIHRvCisJCQkgKiBpbmRleF9nZXRuZXh0X3RpZCB0byBnZXQgdGhl IG5leHQgVElEIHJldHVybmVkIGJ5IGluZGV4IEFNLiBUaGUKKwkJCSAqIHByb2dyZXNzIG9mIHRo ZSBzY2FuIHdpbGwgYmUgdW5kZXIgdGhlIGNvbnRyb2wgb2YgaW5kZXggQU0gKHdlCisJCQkgKiBq dXN0IHBhc3MgaXQgdGhyb3VnaCBhIGRpcmVjdGlvbiB0byBnZXQgdGhlIG5leHQgdHVwbGUgaW4p LCBzbworCQkJICogd2UgY2Fubm90IHJlb3JkZXIgYW55IHdvcmsuCisJCQkgKi8KKwkJCWlmIChz Y2FuLT5yaW5nYnVmICE9IE5VTEwpCisJCQkJdGlkID0gaGVhcGFtX2JhdGNoX2dldG5leHRfdGlk KHNjYW4sIGRpcmVjdGlvbik7CisJCQllbHNlCisJCQl7CisJCQkJdGlkID0gaW5kZXhfZ2V0bmV4 dF90aWQoc2NhbiwgZGlyZWN0aW9uKTsKKworCQkJCS8qCisJCQkJICogbWFrZSBzdXJlIHRvIHNl dCB0aGUgeHNfdmlzaWJsZSBmbGFnLCBqdXN0IGxpa2UgaXQncyBkb25lCisJCQkJICogaW4gaGVh cGFtX2JhdGNoX2dldG5leHRfdGlkCisJCQkJICovCisJCQkJaWYgKCh0aWQgIT0gTlVMTCkgJiYg KHNjYW4tPnhzX3dhbnRfaXR1cCkpCisJCQkJCXNjYW4tPnhzX3Zpc2libGUgPSBWTV9BTExfVklT SUJMRShzY2FuLT5oZWFwUmVsYXRpb24sCisJCQkJCQkJCQkJCQkJICBJdGVtUG9pbnRlckdldEJs b2NrTnVtYmVyKHRpZCksCisJCQkJCQkJCQkJCQkJICAmaHNjYW4tPnZtYnVmKTsKKwkJCX0KKwor CQkJLyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KKwkJCWlm ICh0aWQgPT0gTlVMTCkKKwkJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIEZldGNoIHRoZSBu ZXh0IChvciBvbmx5KSB2aXNpYmxlIGhlYXAgdHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnkuCisJ CSAqIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIGxvb3AgYXJvdW5kIGFuZCBncmFiIHRoZSBu ZXh0IFRJRCBmcm9tCisJCSAqIHRoZSBpbmRleC4KKwkJICovCisJCUFzc2VydChJdGVtUG9pbnRl cklzVmFsaWQoJnNjYW4tPnhzX2hlYXB0aWQpKTsKKwkJaWYgKCFzY2FuLT54c193YW50X2l0dXAp CisJCXsKKwkJCS8qIFBsYWluIGluZGV4IHNjYW4gKi8KKwkJCWlmIChpbmRleF9mZXRjaF9oZWFw KHNjYW4sIHNsb3QpKQorCQkJCXJldHVybiB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoK KwkJCSAqIEluZGV4LW9ubHkgc2Nhbi4KKwkJCSAqCisJCQkgKiBXZSBjYW4gc2tpcCB0aGUgaGVh cCBmZXRjaCBpZiB0aGUgVElEIHJlZmVyZW5jZXMgYSBoZWFwIHBhZ2Ugb24KKwkJCSAqIHdoaWNo IGFsbCB0dXBsZXMgYXJlIGtub3duIHZpc2libGUgdG8gZXZlcnlib2R5LiAgSW4gYW55IGNhc2Us CisJCQkgKiB3ZSdsbCB1c2UgdGhlIGluZGV4IHR1cGxlIG5vdCB0aGUgaGVhcCB0dXBsZSBhcyB0 aGUgZGF0YQorCQkJICogc291cmNlLgorCQkJICoKKwkJCSAqIE5vdGUgb24gTWVtb3J5IE9yZGVy aW5nIEVmZmVjdHM6IHZpc2liaWxpdHltYXBfZ2V0X3N0YXR1cyBkb2VzCisJCQkgKiBub3QgbG9j ayB0aGUgdmlzaWJpbGl0eSBtYXAgYnVmZmVyLCBhbmQgdGhlcmVmb3JlIHRoZSByZXN1bHQgd2UK KwkJCSAqIHJlYWQgaGVyZSBjb3VsZCBiZSBzbGlnaHRseSBzdGFsZS4gIEhvd2V2ZXIsIGl0IGNh bid0IGJlIHN0YWxlCisJCQkgKiBlbm91Z2ggdG8gbWF0dGVyLgorCQkJICoKKwkJCSAqIFdlIG5l ZWQgdG8gZGV0ZWN0IGNsZWFyaW5nIGEgVk0gYml0IGR1ZSB0byBhbiBpbnNlcnQgcmlnaHQKKwkJ CSAqIGF3YXksIGJlY2F1c2UgdGhlIHR1cGxlIGlzIHByZXNlbnQgaW4gdGhlIGluZGV4IHBhZ2Ug YnV0IG5vdAorCQkJICogdmlzaWJsZS4gVGhlIHJlYWRpbmcgb2YgdGhlIFRJRCBieSB0aGlzIHNj YW4gKHVzaW5nIGEgc2hhcmVkCisJCQkgKiBsb2NrIG9uIHRoZSBpbmRleCBidWZmZXIpIGlzIHNl cmlhbGl6ZWQgd2l0aCB0aGUgaW5zZXJ0IG9mIHRoZQorCQkJICogVElEIGludG8gdGhlIGluZGV4 ICh1c2luZyBhbiBleGNsdXNpdmUgbG9jayBvbiB0aGUgaW5kZXgKKwkJCSAqIGJ1ZmZlcikuIEJl Y2F1c2UgdGhlIFZNIGJpdCBpcyBjbGVhcmVkIGJlZm9yZSB1cGRhdGluZyB0aGUKKwkJCSAqIGlu ZGV4LCBhbmQgbG9ja2luZy91bmxvY2tpbmcgb2YgdGhlIGluZGV4IHBhZ2UgYWN0cyBhcyBhIGZ1 bGwKKwkJCSAqIG1lbW9yeSBiYXJyaWVyLCB3ZSBhcmUgc3VyZSB0byBzZWUgdGhlIGNsZWFyZWQg Yml0IGlmIHdlIHNlZSBhCisJCQkgKiByZWNlbnRseS1pbnNlcnRlZCBUSUQuCisJCQkgKgorCQkJ ICogRGVsZXRlcyBkbyBub3QgdXBkYXRlIHRoZSBpbmRleCBwYWdlIChvbmx5IFZBQ1VVTSB3aWxs IGNsZWFyCisJCQkgKiBvdXQgdGhlIFRJRCksIHNvIHRoZSBjbGVhcmluZyBvZiB0aGUgVk0gYml0 IGJ5IGEgZGVsZXRlIGlzIG5vdAorCQkJICogc2VyaWFsaXplZCB3aXRoIHRoaXMgdGVzdCBiZWxv dywgYW5kIHdlIG1heSBzZWUgYSB2YWx1ZSB0aGF0IGlzCisJCQkgKiBzaWduaWZpY2FudGx5IHN0 YWxlLiBIb3dldmVyLCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBkZWxldGUKKwkJCSAqIHJpZ2h0 IGF3YXksIGJlY2F1c2UgdGhlIHR1cGxlIGlzIHN0aWxsIHZpc2libGUgdW50aWwgdGhlCisJCQkg KiBkZWxldGluZyB0cmFuc2FjdGlvbiBjb21taXRzIG9yIHRoZSBzdGF0ZW1lbnQgZW5kcyAoaWYg aXQncyBvdXIKKwkJCSAqIHRyYW5zYWN0aW9uKS4gSW4gZWl0aGVyIGNhc2UsIHRoZSBsb2NrIG9u IHRoZSBWTSBidWZmZXIgd2lsbAorCQkJICogaGF2ZSBiZWVuIHJlbGVhc2VkIChhY3RpbmcgYXMg YSB3cml0ZSBiYXJyaWVyKSBhZnRlciBjbGVhcmluZworCQkJICogdGhlIGJpdC4gQW5kIGZvciB1 cyB0byBoYXZlIGEgc25hcHNob3QgdGhhdCBpbmNsdWRlcyB0aGUKKwkJCSAqIGRlbGV0aW5nIHRy YW5zYWN0aW9uIChtYWtpbmcgdGhlIHR1cGxlIGludmlzaWJsZSksIHdlIG11c3QgaGF2ZQorCQkJ ICogYWNxdWlyZWQgUHJvY0FycmF5TG9jayBhZnRlciB0aGF0IHRpbWUsIGFjdGluZyBhcyBhIHJl YWQKKwkJCSAqIGJhcnJpZXIuCisJCQkgKgorCQkJICogSXQncyB3b3J0aCBnb2luZyB0aHJvdWdo IHRoaXMgY29tcGxleGl0eSB0byBhdm9pZCBuZWVkaW5nIHRvCisJCQkgKiBsb2NrIHRoZSBWTSBi dWZmZXIsIHdoaWNoIGNvdWxkIGNhdXNlIHNpZ25pZmljYW50IGNvbnRlbnRpb24uCisJCQkgKi8K KwkJCWlmICghc2Nhbi0+eHNfdmlzaWJsZSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFJhdHMsIHdl IGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4KKwkJCQkgKi8KKwkJ CQlpZiAoc2Nhbi0+aW5zdHJ1bWVudCkKKwkJCQkJc2Nhbi0+aW5zdHJ1bWVudC0+bmhlYXBmZXRj aGVzKys7CisKKwkJCQlpZiAoIWluZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkpCisJCQkJCWNv bnRpbnVlOwkvKiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRleCBlbnRyeSAqLworCisJ CQkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisKKwkJCQkvKgorCQkJCSAqIE9ubHkgTVZDQyBzbmFw c2hvdHMgYXJlIHN1cHBvcnRlZCB3aXRoIHN0YW5kYXJkIGluZGV4LW9ubHkKKwkJCQkgKiBzY2Fu cywgc28gdGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVAor CQkJCSAqIGNoYWluIG9uY2UgYSB2aXNpYmxlIGVudHJ5IGhhcyBiZWVuIGZvdW5kLiAgT3RoZXIg Y2FsbGVycworCQkJCSAqIChjdXJyZW50bHkgb25seSBzZWxmdW5jcy5jKSB1c2UgU25hcHNob3RO b25WYWN1dW1hYmxlLCBhbmQKKwkJCQkgKiB3YW50IHVzIHRvIGFzc3VtZSB0aGF0IGp1c3QgaGF2 aW5nIG9uZSB2aXNpYmxlIHR1cGxlIGluIHRoZQorCQkJCSAqIGhvdCBjaGFpbiBpcyBhbHdheXMg Z29vZCBlbm91Z2guCisJCQkJICovCisJCQkJQXNzZXJ0KCEoc2Nhbi0+eHNfaGVhcF9jb250aW51 ZSAmJgorCQkJCQkJIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSkpOworCisJCQkJ LyoKKwkJCQkgKiBOb3RlOiBhdCB0aGlzIHBvaW50IHdlIGFyZSBob2xkaW5nIGEgcGluIG9uIHRo ZSBoZWFwIHBhZ2UsCisJCQkJICogYXMgcmVjb3JkZWQgaW4gSW5kZXhGZXRjaEhlYXBEYXRhLnhz X2NidWYuICBXZSBjb3VsZAorCQkJCSAqIHJlbGVhc2UgdGhhdCBwaW4gbm93LCBidXQgaXQncyBu b3QgY2xlYXIgd2hldGhlciBpdCdzIGEgd2luCisJCQkJICogdG8gZG8gc28uICBUaGUgbmV4dCBp bmRleCBlbnRyeSBtaWdodCByZXF1aXJlIGEgdmlzaXQgdG8KKwkJCQkgKiB0aGUgc2FtZSBoZWFw IHBhZ2UuCisJCQkJICovCisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyoKKwkJCQkgKiBXZSBk aWRuJ3QgYWNjZXNzIHRoZSBoZWFwLCBzbyB3ZSdsbCBuZWVkIHRvIHRha2UgYQorCQkJCSAqIHBy ZWRpY2F0ZSBsb2NrIGV4cGxpY2l0bHksIGFzIGlmIHdlIGhhZC4gIEZvciBub3cgd2UgZG8KKwkJ CQkgKiB0aGF0IGF0IHBhZ2UgbGV2ZWwuCisJCQkJICovCisJCQkJUHJlZGljYXRlTG9ja1BhZ2Uo aHNjYW4tPnhzX2Jhc2UucmVsLAorCQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIo dGlkKSwKKwkJCQkJCQkJICBzY2FuLT54c19zbmFwc2hvdCk7CisJCQl9CisKKwkJCXJldHVybiB0 cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ICAqIENhbGxiYWNrcyBmb3Igbm9uLW1vZGlmeWluZyBvcGVyYXRpb25zIG9uIGluZGl2aWR1YWwg dHVwbGVzIGZvciBoZWFwIEFNCkBAIC03NTMsNyArMTI4OSw4IEBAIGhlYXBhbV9yZWxhdGlvbl9j b3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAKIAkJ dGFibGVTY2FuID0gTlVMTDsKIAkJaGVhcFNjYW4gPSBOVUxMOwotCQlpbmRleFNjYW4gPSBpbmRl eF9iZWdpbnNjYW4oT2xkSGVhcCwgT2xkSW5kZXgsIFNuYXBzaG90QW55LCBOVUxMLCAwLCAwKTsK KwkJaW5kZXhTY2FuID0gaW5kZXhfYmVnaW5zY2FuKE9sZEhlYXAsIE9sZEluZGV4LCBmYWxzZSwg U25hcHNob3RBbnksCisJCQkJCQkJCQlOVUxMLCAwLCAwKTsKIAkJaW5kZXhfcmVzY2FuKGluZGV4 U2NhbiwgTlVMTCwgMCwgTlVMTCwgMCk7CiAJfQogCWVsc2UKQEAgLTc5MCw3ICsxMzI3LDggQEAg aGVhcGFtX3JlbGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRp b24gTmV3SGVhcCwKIAogCQlpZiAoaW5kZXhTY2FuICE9IE5VTEwpCiAJCXsKLQkJCWlmICghaW5k ZXhfZ2V0bmV4dF9zbG90KGluZGV4U2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQor CQkJaWYgKCFoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4U2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24sCisJCQkJCQkJCQkJICAgc2xvdCkpCiAJCQkJYnJlYWs7CiAKIAkJCS8qIFNpbmNl IHdlIHVzZWQgbm8gc2NhbiBrZXlzLCBzaG91bGQgbmV2ZXIgbmVlZCB0byByZWNoZWNrICovCkBA IC0yNjQ3LDYgKzMxODUsNyBAQCBzdGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21l dGhvZHMgPSB7CiAJLmluZGV4X2ZldGNoX2JlZ2luID0gaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2lu LAogCS5pbmRleF9mZXRjaF9yZXNldCA9IGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldCwKIAkuaW5k ZXhfZmV0Y2hfZW5kID0gaGVhcGFtX2luZGV4X2ZldGNoX2VuZCwKKwkuaW5kZXhfZ2V0bmV4dF9z bG90ID0gaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdCwKIAkuaW5kZXhfZmV0Y2hfdHVwbGUgPSBo ZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUsCiAKIAkudHVwbGVfaW5zZXJ0ID0gaGVhcGFtX3R1cGxl X2luc2VydCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZSBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZQppbmRleCA2ZjJlMzA2MWEuLmU2ZDY4 MWI0MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZQpAQCAtMTYsNiArMTYsNyBAQCBPQkpT ID0gXAogCWFtYXBpLm8gXAogCWFtdmFsaWRhdGUubyBcCiAJZ2VuYW0ubyBcCi0JaW5kZXhhbS5v CisJaW5kZXhhbS5vIFwKKwlpbmRleGJhdGNoLm8KIAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3Ny Yy9iYWNrZW5kL2NvbW1vbi5tawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCBhMjliZTZm NDYuLjA5NTc2MWE4ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFt LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTg5LDYgKzg5LDgg QEAgUmVsYXRpb25HZXRJbmRleFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlz LCBpbnQgbm9yZGVyYnlzKQogCXNjYW4tPnhzX3NuYXBzaG90ID0gSW52YWxpZFNuYXBzaG90Owkv KiBjYWxsZXIgbXVzdCBpbml0aWFsaXplIHRoaXMgKi8KIAlzY2FuLT5udW1iZXJPZktleXMgPSBu a2V5czsKIAlzY2FuLT5udW1iZXJPZk9yZGVyQnlzID0gbm9yZGVyYnlzOworCXNjYW4tPnJpbmdi dWYgPSBOVUxMOwkJLyogc2V0IGxhdGVyIGZvciBhbWdldGJhdGNoIGNhbGxlcnMgKi8KKwlzY2Fu LT54c193YW50X2l0dXAgPSBmYWxzZTsgLyogY2FsbGVyIG11c3QgaW5pdGlhbGl6ZSB0aGlzICov CiAKIAkvKgogCSAqIFdlIGFsbG9jYXRlIGtleSB3b3Jrc3BhY2UgaGVyZSwgYnV0IGl0IHdvbid0 IGdldCBmaWxsZWQgdW50aWwgYW1yZXNjYW4uCkBAIC0xMDIsOCArMTA0LDYgQEAgUmVsYXRpb25H ZXRJbmRleFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVy YnlzKQogCWVsc2UKIAkJc2Nhbi0+b3JkZXJCeURhdGEgPSBOVUxMOwogCi0Jc2Nhbi0+eHNfd2Fu dF9pdHVwID0gZmFsc2U7IC8qIG1heSBiZSBzZXQgbGF0ZXIgKi8KLQogCS8qCiAJICogRHVyaW5n IHJlY292ZXJ5IHdlIGlnbm9yZSBraWxsZWQgdHVwbGVzIGFuZCBkb24ndCBib3RoZXIgdG8ga2ls bCB0aGVtCiAJICogZWl0aGVyLiBXZSBkbyB0aGlzIGJlY2F1c2UgdGhlIHhtaW4gb24gdGhlIHBy aW1hcnkgbm9kZSBjb3VsZCBlYXNpbHkgYmUKQEAgLTExNSw2ICsxMTUsOCBAQCBSZWxhdGlvbkdl dEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJi eXMpCiAJICogc2hvdWxkIG5vdCBiZSBhbHRlcmVkIGJ5IGluZGV4IEFNcy4KIAkgKi8KIAlzY2Fu LT5raWxsX3ByaW9yX3R1cGxlID0gZmFsc2U7CisJc2Nhbi0+ZHJvcFBpbiA9IHRydWU7CQkvKiBm b3Igbm93ICovCisJc2Nhbi0+ZmluaXNoZWQgPSBmYWxzZTsKIAlzY2FuLT54YWN0U3RhcnRlZElu UmVjb3ZlcnkgPSBUcmFuc2FjdGlvblN0YXJ0ZWREdXJpbmdSZWNvdmVyeSgpOwogCXNjYW4tPmln bm9yZV9raWxsZWRfdHVwbGVzID0gIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeTsKIApAQCAt NDQ2LDcgKzQ0OCw3IEBAIHN5c3RhYmxlX2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24s CiAJCQkJZWxvZyhFUlJPUiwgImNvbHVtbiBpcyBub3QgaW4gaW5kZXgiKTsKIAkJfQogCi0JCXN5 c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaXJlbCwKKwkJc3lz c2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpcmVsLCBmYWxzZSwK IAkJCQkJCQkJCQkgc25hcHNob3QsIE5VTEwsIG5rZXlzLCAwKTsKIAkJaW5kZXhfcmVzY2FuKHN5 c3NjYW4tPmlzY2FuLCBpZHhrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAkJc3lzc2Nhbi0+c2NhbiA9 IE5VTEw7CkBAIC01MTcsNyArNTE5LDggQEAgc3lzdGFibGVfZ2V0bmV4dChTeXNTY2FuRGVzYyBz eXNzY2FuKQogCiAJaWYgKHN5c3NjYW4tPmlyZWwpCiAJewotCQlpZiAoaW5kZXhfZ2V0bmV4dF9z bG90KHN5c3NjYW4tPmlzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCkp CisJCWlmICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIEZvcndhcmRT Y2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJIHN5c3NjYW4tPnNsb3QpKQogCQl7CiAJCQlib29sCQlz aG91bGRGcmVlOwogCkBAIC03MDcsNyArNzEwLDcgQEAgc3lzdGFibGVfYmVnaW5zY2FuX29yZGVy ZWQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJZWxvZyhFUlJPUiwgImNvbHVtbiBpcyBub3Qg aW4gaW5kZXgiKTsKIAl9CiAKLQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFw UmVsYXRpb24sIGluZGV4UmVsYXRpb24sCisJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNj YW4oaGVhcFJlbGF0aW9uLCBpbmRleFJlbGF0aW9uLCBmYWxzZSwKIAkJCQkJCQkJCSBzbmFwc2hv dCwgTlVMTCwgbmtleXMsIDApOwogCWluZGV4X3Jlc2NhbihzeXNzY2FuLT5pc2NhbiwgaWR4a2V5 LCBua2V5cywgTlVMTCwgMCk7CiAJc3lzc2Nhbi0+c2NhbiA9IE5VTEw7CkBAIC03MzQsNyArNzM3 LDcgQEAgc3lzdGFibGVfZ2V0bmV4dF9vcmRlcmVkKFN5c1NjYW5EZXNjIHN5c3NjYW4sIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uKQogCUhlYXBUdXBsZQlodHVwID0gTlVMTDsKIAogCUFzc2VydChz eXNzY2FuLT5pcmVsKTsKLQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBk aXJlY3Rpb24sIHN5c3NjYW4tPnNsb3QpKQorCWlmICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qo c3lzc2Nhbi0+aXNjYW4sIGRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCkpCiAJCWh0dXAgPSBFeGVj RmV0Y2hTbG90SGVhcFR1cGxlKHN5c3NjYW4tPnNsb3QsIGZhbHNlLCBOVUxMKTsKIAogCS8qIFNl ZSBub3RlcyBpbiBzeXN0YWJsZV9nZXRuZXh0ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0u YwppbmRleCA0ZWQwNTA4YzYuLjllYWVjZDk0MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2luZGV4L2luZGV4YW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhh bS5jCkBAIC0yNCw5ICsyNCw3IEBACiAgKgkJaW5kZXhfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUg LSBpbml0aWFsaXplIHBhcmFsbGVsIHNjYW4KICAqCQlpbmRleF9wYXJhbGxlbHJlc2NhbiAgLSAo cmUpc3RhcnQgYSBwYXJhbGxlbCBzY2FuIG9mIGFuIGluZGV4CiAgKgkJaW5kZXhfYmVnaW5zY2Fu X3BhcmFsbGVsIC0gam9pbiBwYXJhbGxlbCBpbmRleCBzY2FuCi0gKgkJaW5kZXhfZ2V0bmV4dF90 aWQJLSBnZXQgdGhlIG5leHQgVElEIGZyb20gYSBzY2FuCi0gKgkJaW5kZXhfZmV0Y2hfaGVhcAkJ LSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKLSAqCQlpbmRleF9nZXRuZXh0X3Nsb3QJ LSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNjYW4KKyAqCQlpbmRleF9nZXRuZXh0X3RpZAkt IGFtZ2V0dHVwbGUgdGFibGUgQU0gaGVscGVyIHJvdXRpbmUKICAqCQlpbmRleF9nZXRiaXRtYXAg LSBnZXQgYWxsIHR1cGxlcyBmcm9tIGEgc2NhbgogICoJCWluZGV4X2J1bGtfZGVsZXRlCS0gYnVs ayBkZWxldGlvbiBvZiBpbmRleCB0dXBsZXMKICAqCQlpbmRleF92YWN1dW1fY2xlYW51cAktIHBv c3QtZGVsZXRpb24gY2xlYW51cCBvZiBhbiBpbmRleApAQCAtMjU1LDYgKzI1Myw3IEBAIGluZGV4 X2luc2VydF9jbGVhbnVwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiBJbmRleFNjYW5EZXNjCiBp bmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCVJlbGF0aW9uIGluZGV4 UmVsYXRpb24sCisJCQkJYm9vbCB4c193YW50X2l0dXAsCiAJCQkJU25hcHNob3Qgc25hcHNob3Qs CiAJCQkJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCWludCBua2V5 cywgaW50IG5vcmRlcmJ5cykKQEAgLTI4Miw2ICsyODEsMTAgQEAgaW5kZXhfYmVnaW5zY2FuKFJl bGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlzY2FuLT5oZWFwUmVsYXRpb24gPSBoZWFwUmVsYXRpb247 CiAJc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKIAlzY2FuLT5pbnN0cnVtZW50ID0gaW5z dHJ1bWVudDsKKwlzY2FuLT54c193YW50X2l0dXAgPSB4c193YW50X2l0dXA7CisKKwlpZiAoaW5k ZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkKKwkJaW5kZXhfYmF0Y2hf aW5pdChzY2FuKTsKIAogCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRh YmxlICovCiAJc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVh cFJlbGF0aW9uKTsKQEAgLTM4MCw2ICszODMsMTUgQEAgaW5kZXhfcmVzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbiwKIAlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gZmFsc2U7IC8qIGZvciBzYWZldHkg Ki8KIAlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7CiAKKwkvKgorCSAqIHJpbmdidWYg c2hvdWxkbid0IGJlIG1hcmtlZCBmaW5pc2hlZCAobXVzdCBtYWtlIHN1cmUgdGhhdAorCSAqIGlu ZGV4X2JhdGNoX3Jlc2V0IGRvZXNuJ3Qgc2VlIHRoaXMsIHNpbmNlIGluZGV4YW1fdXRpbF9iYXRj aF9yZWxlYXNlCisJICogd2lsbCBiZSBhZmZlY3RlZCkKKwkgKi8KKwlzY2FuLT5maW5pc2hlZCA9 IGZhbHNlOworCisJaW5kZXhfYmF0Y2hfcmVzZXQoc2NhbiwgdHJ1ZSk7CisKIAlzY2FuLT5pbmRl eFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1yZXNjYW4oc2Nhbiwga2V5cywgbmtleXMsCiAJCQkJCQkJ CQkJCW9yZGVyYnlzLCBub3JkZXJieXMpOwogfQpAQCAtMzk0LDYgKzQwNiw5IEBAIGluZGV4X2Vu ZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCVNDQU5fQ0hFQ0tTOwogCUNIRUNLX1NDQU5fUFJP Q0VEVVJFKGFtZW5kc2Nhbik7CiAKKwkvKiBDbGVhbnVwIGJhdGNoaW5nLCBzbyB0aGF0IHRoZSBB TSBjYW4gcmVsZWFzZSBwaW5zIGFuZCBzbyBvbi4gKi8KKwlpbmRleF9iYXRjaF9lbmQoc2Nhbik7 CisKIAkvKiBSZWxlYXNlIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBh Y2Nlc3NlcyAqLwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJewpAQCAtNDIyLDkgKzQzNywx MCBAQCB2b2lkCiBpbmRleF9tYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKIAlTQ0FOX0NI RUNLUzsKLQlDSEVDS19TQ0FOX1BST0NFRFVSRShhbW1hcmtwb3MpOworCUNIRUNLX1NDQU5fUFJP Q0VEVVJFKGFtcG9zcmVzZXQpOwogCi0Jc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFt bWFya3BvcyhzY2FuKTsKKwkvKiBPbmx5IGFtZ2V0YmF0Y2ggaW5kZXggQU1zIHN1cHBvcnQgbWFy ayBhbmQgcmVzdG9yZSAqLworCWluZGV4X2JhdGNoX21hcmtfcG9zKHNjYW4pOwogfQogCiAvKiAt LS0tLS0tLS0tLS0tLS0tCkBAIC00NDgsNyArNDY0LDggQEAgaW5kZXhfcmVzdHJwb3MoSW5kZXhT Y2FuRGVzYyBzY2FuKQogCUFzc2VydChJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkp OwogCiAJU0NBTl9DSEVDS1M7Ci0JQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1yZXN0cnBvcyk7CisJ Q0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRiYXRjaCk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUo YW1wb3NyZXNldCk7CiAKIAkvKiByZWxlYXNlIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykg ZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCkBAIC00NTcs NyArNDc0LDcgQEAgaW5kZXhfcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCXNjYW4tPmtp bGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwogCXNjYW4tPnhzX2hlYXBf Y29udGludWUgPSBmYWxzZTsKIAotCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJl c3RycG9zKHNjYW4pOworCWluZGV4X2JhdGNoX3Jlc3RvcmVfcG9zKHNjYW4pOwogfQogCiAvKgpA QCAtNTc5LDYgKzU5Niw4IEBAIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nh bikKIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQogCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChz Y2FuLT54c19oZWFwZmV0Y2gpOwogCisJaW5kZXhfYmF0Y2hfcmVzZXQoc2NhbiwgdHJ1ZSk7CisK IAkvKiBhbXBhcmFsbGVscmVzY2FuIGlzIG9wdGlvbmFsOyBhc3N1bWUgbm8tb3AgaWYgbm90IHBy b3ZpZGVkIGJ5IEFNICovCiAJaWYgKHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBh cmFsbGVscmVzY2FuICE9IE5VTEwpCiAJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5h bXBhcmFsbGVscmVzY2FuKHNjYW4pOwpAQCAtNTkxLDYgKzYxMCw3IEBAIGluZGV4X3BhcmFsbGVs cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKICAqLwogSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVn aW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAorCQkJ CQkJIGJvb2wgeHNfd2FudF9pdHVwLAogCQkJCQkJIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAq aW5zdHJ1bWVudCwKIAkJCQkJCSBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJCQkJCQkgUGFy YWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuKQpAQCAtNjEzLDYgKzYzMywxMCBAQCBpbmRleF9iZWdp bnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsCiAJc2Nh bi0+aGVhcFJlbGF0aW9uID0gaGVhcHJlbDsKIAlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90 OwogCXNjYW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50OworCXNjYW4tPnhzX3dhbnRfaXR1cCA9 IHhzX3dhbnRfaXR1cDsKKworCWlmIChpbmRleHJlbC0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0g TlVMTCkKKwkJaW5kZXhfYmF0Y2hfaW5pdChzY2FuKTsKIAogCS8qIHByZXBhcmUgdG8gZmV0Y2gg aW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCiAJc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVf aW5kZXhfZmV0Y2hfYmVnaW4oaGVhcHJlbCk7CkBAIC02MjEsMTAgKzY0NSwxNCBAQCBpbmRleF9i ZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsCiB9 CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqIGluZGV4X2dldG5leHRfdGlkIC0gZ2V0IHRoZSBu ZXh0IFRJRCBmcm9tIGEgc2NhbgorICogaW5kZXhfZ2V0bmV4dF90aWQgLSBhbWdldHR1cGxlIGlu dGVyZmFjZQogICoKICAqIFRoZSByZXN1bHQgaXMgdGhlIG5leHQgVElEIHNhdGlzZnlpbmcgdGhl IHNjYW4ga2V5cywKICAqIG9yIE5VTEwgaWYgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgZXhpc3Qu CisgKgorICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGFibGUgQU0ncyBpbmRleF9n ZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24sCisgKiBhbmQgb25seSBnaXZlbiBhbiBpbmRleCBB TSB0aGF0IHN1cHBvcnRzIHRoZSBzaW5nbGUtdHVwbGUgYW1nZXR0dXBsZQorICogaW50ZXJmYWNl LgogICogLS0tLS0tLS0tLS0tLS0tLQogICovCiBJdGVtUG9pbnRlcgpAQCAtNjY3LDk3ICs2OTUs NiBAQCBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uKQogCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKIH0KIAotLyogLS0tLS0tLS0t LS0tLS0tLQotICoJCWluZGV4X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAg dHVwbGUKLSAqCi0gKiBUaGUgcmVzdWx0IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxlIGFzc29jaWF0 ZWQgd2l0aCB0aGUgaW5kZXggVElEIG1vc3QKLSAqIHJlY2VudGx5IGZldGNoZWQgYnkgaW5kZXhf Z2V0bmV4dF90aWQsIG9yIE5VTEwgaWYgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMKLSAqIGV4aXN0 LiAgKFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIG1hdGNoaW5nIHR1cGxlIGJlY2F1c2Ugb2Yg SE9UIGNoYWlucywKLSAqIGFsdGhvdWdoIHdoZW4gdXNpbmcgYW4gTVZDQyBzbmFwc2hvdCBpdCBz aG91bGQgYmUgaW1wb3NzaWJsZSBmb3IgbW9yZSB0aGFuCi0gKiBvbmUgc3VjaCB0dXBsZSB0byBl eGlzdC4pCi0gKgotICogT24gc3VjY2VzcywgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBoZWFw IHR1cCBpcyBwaW5uZWQgKHRoZSBwaW4gd2lsbCBiZQotICogZHJvcHBlZCBpbiBhIGZ1dHVyZSBp bmRleF9nZXRuZXh0X3RpZCwgaW5kZXhfZmV0Y2hfaGVhcCBvciBpbmRleF9lbmRzY2FuCi0gKiBj YWxsKS4KLSAqCi0gKiBOb3RlOiBjYWxsZXIgbXVzdCBjaGVjayBzY2FuLT54c19yZWNoZWNrLCBh bmQgcGVyZm9ybSByZWNoZWNraW5nIG9mIHRoZQotICogc2NhbiBrZXlzIGlmIHJlcXVpcmVkLiAg V2UgZG8gbm90IGRvIHRoYXQgaGVyZSBiZWNhdXNlIHdlIGRvbid0IGhhdmUKLSAqIGVub3VnaCBp bmZvcm1hdGlvbiB0byBkbyBpdCBlZmZpY2llbnRseSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgotICog LS0tLS0tLS0tLS0tLS0tLQotICovCi1ib29sCi1pbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRl c2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCi17Ci0JYm9vbAkJYWxsX2RlYWQgPSBmYWxz ZTsKLQlib29sCQlmb3VuZDsKLQotCWZvdW5kID0gdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoc2Nh bi0+eHNfaGVhcGZldGNoLCAmc2Nhbi0+eHNfaGVhcHRpZCwKLQkJCQkJCQkJCXNjYW4tPnhzX3Nu YXBzaG90LCBzbG90LAotCQkJCQkJCQkJJnNjYW4tPnhzX2hlYXBfY29udGludWUsICZhbGxfZGVh ZCk7Ci0KLQlpZiAoZm91bmQpCi0JCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPmluZGV4 UmVsYXRpb24pOwotCi0JLyoKLQkgKiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFu ZCBmb3VuZCBvbmx5IGRlYWQgdHVwbGVzLCB0ZWxsIGluZGV4Ci0JICogQU0gdG8ga2lsbCBpdHMg ZW50cnkgZm9yIHRoYXQgVElEICh0aGlzIHdpbGwgdGFrZSBlZmZlY3QgaW4gdGhlIG5leHQKLQkg KiBhbWdldHR1cGxlIGNhbGwsIGluIGluZGV4X2dldG5leHRfdGlkKS4gIFdlIGRvIG5vdCBkbyB0 aGlzIHdoZW4gaW4KLQkgKiByZWNvdmVyeSBiZWNhdXNlIGl0IG1heSB2aW9sYXRlIE1WQ0MgdG8g ZG8gc28uICBTZWUgY29tbWVudHMgaW4KLQkgKiBSZWxhdGlvbkdldEluZGV4U2NhbigpLgotCSAq LwotCWlmICghc2Nhbi0+eGFjdFN0YXJ0ZWRJblJlY292ZXJ5KQotCQlzY2FuLT5raWxsX3ByaW9y X3R1cGxlID0gYWxsX2RlYWQ7Ci0KLQlyZXR1cm4gZm91bmQ7Ci19Ci0KLS8qIC0tLS0tLS0tLS0t LS0tLS0KLSAqCQlpbmRleF9nZXRuZXh0X3Nsb3QgLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBh IHNjYW4KLSAqCi0gKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRo ZSBzY2FuIGtleXMgYW5kIHRoZSBzbmFwc2hvdCB3YXMKLSAqIGZvdW5kLCBmYWxzZSBvdGhlcndp c2UuICBUaGUgdHVwbGUgaXMgc3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KLSAqCi0gKiBP biBzdWNjZXNzLCByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUg aGVsZCwgYW5kIHdpbGwgYmUKLSAqIGRyb3BwZWQgYnkgYSBmdXR1cmUgaW5kZXhfZ2V0bmV4dF90 aWQsIGluZGV4X2ZldGNoX2hlYXAgb3IgaW5kZXhfZW5kc2NhbgotICogY2FsbCkuCi0gKgotICog Tm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVj aGVja2luZyBvZiB0aGUKLSAqIHNjYW4ga2V5cyBpZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0 aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCi0gKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8g ZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdlbmVyYWwgY2FzZS4KLSAqIC0tLS0tLS0tLS0tLS0t LS0KLSAqLwotYm9vbAotaW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24sIFR1cGxlVGFibGVTbG90ICpzbG90KQotewotCWZvciAoOzsp Ci0JewotCQlpZiAoIXNjYW4tPnhzX2hlYXBfY29udGludWUpCi0JCXsKLQkJCUl0ZW1Qb2ludGVy IHRpZDsKLQotCQkJLyogVGltZSB0byBmZXRjaCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUgaW5kZXgg Ki8KLQkJCXRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7Ci0KLQkJCS8q IElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCi0JCQlpZiAodGlk ID09IE5VTEwpCi0JCQkJYnJlYWs7Ci0KLQkJCUFzc2VydChJdGVtUG9pbnRlckVxdWFscyh0aWQs ICZzY2FuLT54c19oZWFwdGlkKSk7Ci0JCX0KLQotCQkvKgotCQkgKiBGZXRjaCB0aGUgbmV4dCAo b3Igb25seSkgdmlzaWJsZSBoZWFwIHR1cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LgotCQkgKiBJ ZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0aGUgbmV4dCBU SUQgZnJvbQotCQkgKiB0aGUgaW5kZXguCi0JCSAqLwotCQlBc3NlcnQoSXRlbVBvaW50ZXJJc1Zh bGlkKCZzY2FuLT54c19oZWFwdGlkKSk7Ci0JCWlmIChpbmRleF9mZXRjaF9oZWFwKHNjYW4sIHNs b3QpKQotCQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCiAvKiAtLS0t LS0tLS0tLS0tLS0tCiAgKgkJaW5kZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgYXQgb25j ZSBmcm9tIGFuIGluZGV4IHNjYW4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvaW5kZXhiYXRjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2gu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjg2YTFjNmY1NgotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKQEAgLTAs MCArMSw1ODkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGluZGV4YmF0Y2guYworICoJ ICBhbWdldGJhdGNoIGltcGxlbWVudGF0aW9uIHJvdXRpbmVzCisgKgorICogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNp dHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCisgKgorICogSU5URVJGQUNFIFJPVVRJTkVT CisgKgkJaW5kZXhfYmF0Y2hfaW5pdCAtIEluaXRpYWxpemUgZmllbGRzIG5lZWRlZCBieSBiYXRj aGluZworICoJCWluZGV4X2JhdGNoX3Jlc2V0IC0gcmVzZXQgYSBiYXRjaAorICoJCWluZGV4X2Jh dGNoX21hcmtfcG9zIC0gc2V0IGEgbWFyayBmcm9tIGN1cnJlbnQgYmF0Y2ggcG9zaXRpb24KKyAq CQlpbmRleF9iYXRjaF9yZXN0b3JlX3BvcyAtIHJlc3RvcmUgbWFyayB0byBjdXJyZW50IGJhdGNo IHBvc2l0aW9uCisgKgkJaW5kZXhfYmF0Y2hfa2lsbF9pdGVtIC0gcmVjb3JkIGRlYWQgaW5kZXgg dHVwbGUKKyAqCQlpbmRleF9iYXRjaF9lbmQgLSBlbmQgYmF0Y2gKKyAqCisgKgkJaW5kZXhhbV91 dGlsX2JhdGNoX3VubG9jayAtIHVubG9jayBiYXRjaCdzIGJ1ZmZlciBsb2NrCisgKgkJaW5kZXhh bV91dGlsX2JhdGNoX2FsbG9jIC0gYWxsb2NhdGUgYW5vdGhlciBiYXRjaAorICoJCWluZGV4YW1f dXRpbF9iYXRjaF9yZWxlYXNlIC0gcmVsZWFzZSBhbGxvY2F0ZWQgYmF0Y2gKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFj Y2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAiY29t bW9uL2ludC5oIgorI2luY2x1ZGUgImxpYi9xdW5pcXVlLmgiCisjaW5jbHVkZSAicGdzdGF0Lmgi CisjaW5jbHVkZSAidXRpbHMvbWVtZGVidWcuaCIKKworc3RhdGljIGludAliYXRjaF9jb21wYXJl X2ludChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpOworc3RhdGljIHZvaWQgYmF0Y2hf ZGVidWdfcHJpbnRfYmF0Y2hlcyhjb25zdCBjaGFyICpsYWJlbCwgSW5kZXhTY2FuRGVzYyBzY2Fu KTsKKworLyoKKyAqIGluZGV4X2JhdGNoX2luaXQKKyAqCQlJbml0aWFsaXplIHZhcmlvdXMgZmll bGRzIGFuZCBhcnJheXMgbmVlZGVkIGJ5IGJhdGNoaW5nLgorICoKKyAqIFNldHMgdXAgdGhlIGJh dGNoIHJpbmcgYnVmZmVyIHN0cnVjdHVyZSBhbmQgaXRzIGluaXRpYWwgcmVhZCBwb3NpdGlvbi4K KyAqIEFsc28gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzY2FuIHdpbGwgZWFnZXJseSBkcm9wIGlu ZGV4IHBhZ2UgcGlucy4KKyAqCisgKiBPbmx5IGNhbGwgaGVyZSB3aGVuIGFsbCBvZiB0aGUgaW5k ZXggcmVsYXRlZCBmaWVsZHMgaW4gJ3NjYW4nIHdlcmUgYWxyZWFkeQorICogaW5pdGlhbGl6ZWQu CisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCS8q IEJvdGggYW1nZXRiYXRjaCBhbmQgYW1mcmVlYmF0Y2ggbXVzdCBiZSBwcmVzZW50IHRvZ2V0aGVy ICovCisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9 IE5VTEwpOworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1mcmVlYmF0 Y2ggIT0gTlVMTCk7CisKKwlzY2FuLT5yaW5nYnVmID0gcGFsbG9jX29iamVjdChCYXRjaFJpbmdC dWZmZXIpOworCisJLyoKKwkgKiBXZSBwcmVmZXIgdG8gZWFnZXJseSBkcm9wIGxlYWYgcGFnZSBw aW5zIGJlZm9yZSBhbWdldGJhdGNoIHJldHVybnMuCisJICogVGhpcyBhdm9pZHMgbWFraW5nIFZB Q1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gdGhlIHBhZ2UuCisJICoKKwkg KiBXZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgZHVyaW5nIGluZGV4LW9ubHkg c2NhbnMgZHVlIHRvIGEKKwkgKiByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgVkFDVVVNIHNldHRp bmcgcGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgorCSAqIEl0J3MgYWxzbyB1bnNhZmUgZm9y IHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QuCisJICoKKwkg KiBXaGVuIHdlIGRyb3AgcGlucyBlYWdlcmx5LCB0aGUgbWVjaGFuaXNtIHRoYXQgbWFya3MgaW5k ZXggdHVwbGVzIGFzCisJICogTFBfREVBRCBoYXMgdG8gZGVhbCB3aXRoIGNvbmN1cnJlbnQgVElE IHJlY3ljbGluZyByYWNlcy4gIFRoZSBzY2hlbWUKKwkgKiB1c2VkIHRvIGRldGVjdCB1bnNhZmUg VElEIHJlY3ljbGluZyB3b24ndCB3b3JrIHdoZW4gc2Nhbm5pbmcgdW5sb2dnZWQKKwkgKiByZWxh dGlvbnMgKHNpbmNlIGl0IGludm9sdmVzIHNhdmluZyBhbiBhZmZlY3RlZCBwYWdlJ3MgTFNOKS4g IE9wdCBvdXQKKwkgKiBvZiBlYWdlciBwaW4gZHJvcHBpbmcgZHVyaW5nIHVubG9nZ2VkIHJlbGF0 aW9uIHNjYW5zIGZvciBub3cuCisJICovCisJc2Nhbi0+ZHJvcFBpbiA9CisJCSghc2Nhbi0+eHNf d2FudF9pdHVwICYmIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSAmJgorCQkgUmVs YXRpb25OZWVkc1dBTChzY2FuLT5pbmRleFJlbGF0aW9uKSk7CisJc2Nhbi0+ZmluaXNoZWQgPSBm YWxzZTsKKwlzY2FuLT5yaW5nYnVmLT5kaXJlY3Rpb24gPSBOb01vdmVtZW50U2NhbkRpcmVjdGlv bjsKKworCS8qIHBvc2l0aW9ucyBpbiB0aGUgcmluZyBidWZmZXIgb2YgYmF0Y2hlcyAqLworCWJh dGNoX3Jlc2V0X3Bvcygmc2Nhbi0+cmluZ2J1Zi0+c2NhblBvcyk7CisJYmF0Y2hfcmVzZXRfcG9z KCZzY2FuLT5yaW5nYnVmLT5tYXJrUG9zKTsKKworCXNjYW4tPnJpbmdidWYtPm1hcmtCYXRjaCA9 IE5VTEw7CisJc2Nhbi0+cmluZ2J1Zi0+aGVhZEJhdGNoID0gMDsJLyogaW5pdGlhbCBoZWFkIGJh dGNoICovCisJc2Nhbi0+cmluZ2J1Zi0+bmV4dEJhdGNoID0gMDsJLyogaW5pdGlhbCBiYXRjaCBz dGFydHMgZW1wdHkgKi8KKwltZW1zZXQoJnNjYW4tPnJpbmdidWYtPmNhY2hlLCAwLCBzaXplb2Yo c2Nhbi0+cmluZ2J1Zi0+Y2FjaGUpKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWlu ZGV4X2JhdGNoX3Jlc2V0IC0gcmVzZXQgYmF0Y2ggcmluZyBidWZmZXIgYW5kIHJlYWQgcG9zaXRp b24KKyAqCisgKiBSZXNldHMgYWxsIGxvYWRlZCBiYXRjaGVzIGluIHRoZSByaW5nIGJ1ZmZlciwg YW5kIHJlc2V0cyB0aGUgcmVhZCBwb3NpdGlvbgorICogdG8gdGhlIGluaXRpYWwgc3RhdGUgKG9y IGp1c3QgaW5pdGlhbGl6ZSByaW5nIGJ1ZmZlciBzdGF0ZSkuICBXaGVuCisgKiAnY29tcGxldGUn IGlzIHRydWUsIGFsc28gZnJlZXMgdGhlIHNjYW4ncyBtYXJrZWQgYmF0Y2ggKGlmIGFueSksIHdo aWNoIGlzCisgKiB1c2VmdWwgd2hlbiBlbmRpbmcgYW4gYW1nZXRiYXRjaC1iYXNlZCBpbmRleCBz Y2FuLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCitpbmRleF9iYXRjaF9yZXNldChJ bmRleFNjYW5EZXNjIHNjYW4sIGJvb2wgY29tcGxldGUpCit7CisJQmF0Y2hSaW5nQnVmZmVyICpy aW5nYnVmID0gc2Nhbi0+cmluZ2J1ZjsKKworCS8qIGJhaWwgb3V0IGlmIGJhdGNoaW5nIG5vdCBl bmFibGVkICovCisJaWYgKCFyaW5nYnVmKQorCQlyZXR1cm47CisKKwliYXRjaF9hc3NlcnRfYmF0 Y2hlc192YWxpZChzY2FuKTsKKwliYXRjaF9kZWJ1Z19wcmludF9iYXRjaGVzKCJpbmRleF9iYXRj aF9yZXNldCIsIHNjYW4pOworCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOworCisJLyogcmVz ZXQgdGhlIHBvc2l0aW9ucyAqLworCWJhdGNoX3Jlc2V0X3BvcygmcmluZ2J1Zi0+c2NhblBvcyk7 CisKKwkvKgorCSAqIFdpdGggImNvbXBsZXRlIiByZXNldCwgbWFrZSBzdXJlIHRvIGFsc28gZnJl ZSB0aGUgbWFya2VkIGJhdGNoLCBlaXRoZXIKKwkgKiBieSBqdXN0IGZvcmdldHRpbmcgaXQgKGlm IGl0J3Mgc3RpbGwgaW4gdGhlIHJpbmcgYnVmZmVyKSwgb3IgYnkKKwkgKiBleHBsaWNpdGx5IGZy ZWVpbmcgaXQuCisJICovCisJaWYgKGNvbXBsZXRlICYmIHVubGlrZWx5KHJpbmdidWYtPm1hcmtC YXRjaCAhPSBOVUxMKSkKKwl7CisJCUJhdGNoUmluZ0l0ZW1Qb3MgKm1hcmtQb3MgPSAmcmluZ2J1 Zi0+bWFya1BvczsKKwkJQmF0Y2hJbmRleFNjYW4gbWFya0JhdGNoID0gcmluZ2J1Zi0+bWFya0Jh dGNoOworCisJCS8qIGFsd2F5cyByZXNldCB0aGUgcG9zaXRpb24sIGZvcmdldCB0aGUgbWFya2Vk IGJhdGNoICovCisJCXJpbmdidWYtPm1hcmtCYXRjaCA9IE5VTEw7CisKKwkJLyoKKwkJICogSWYg d2UndmUgYWxyZWFkeSBtb3ZlZCBwYXN0IHRoZSBtYXJrZWQgYmF0Y2ggKGl0J3Mgbm90IGxvYWRl ZCBpbnRvCisJCSAqIHRoZSByaW5nIGJ1ZmZlciksIGZyZWUgaXQgZXhwbGljaXRseSBub3cuICBP dGhlcndpc2UsIGl0J2xsIGJlCisJCSAqIGZyZWVkIGFsb25nIHdpdGggdGhlIG90aGVyIGxvYWRl ZCBiYXRjaGVzLgorCQkgKi8KKwkJaWYgKCFJTkRFWF9TQ0FOX0JBVENIX0xPQURFRChzY2FuLCBt YXJrUG9zLT5iYXRjaCkpCisJCQliYXRjaF9mcmVlKHNjYW4sIG1hcmtCYXRjaCk7CisKKwkJYmF0 Y2hfcmVzZXRfcG9zKCZyaW5nYnVmLT5tYXJrUG9zKTsKKwl9CisKKwkvKiBub3cgcmVsZWFzZSBh bGwgb3RoZXIgY3VycmVudGx5IGxvYWRlZCBiYXRjaGVzICovCisJd2hpbGUgKHJpbmdidWYtPmhl YWRCYXRjaCA8IHJpbmdidWYtPm5leHRCYXRjaCkKKwl7CisJCUJhdGNoSW5kZXhTY2FuIGJhdGNo ID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCByaW5nYnVmLT5oZWFkQmF0Y2gpOworCisJCURFQlVH X0xPRygiZnJlZWluZyBiYXRjaCAlZCAlcCIsIHJpbmdidWYtPmhlYWRCYXRjaCwgYmF0Y2gpOwor CisJCWJhdGNoX2ZyZWUoc2NhbiwgYmF0Y2gpOworCisJCS8qIHVwZGF0ZSB0aGUgdmFsaWQgcmFu Z2UsIHNvIHRoYXQgYXNzZXJ0cyAvIGRlYnVnZ2luZyB3b3JrcyAqLworCQlyaW5nYnVmLT5oZWFk QmF0Y2grKzsKKwl9CisKKwkvKiByZXNldCByZWxldmFudCBiYXRjaCBzdGF0ZSBmaWVsZHMgKi8K KwlyaW5nYnVmLT5oZWFkQmF0Y2ggPSAwOwkJLyogaW5pdGlhbCBiYXRjaCAqLworCXJpbmdidWYt Pm5leHRCYXRjaCA9IDA7CQkvKiBpbml0aWFsIGJhdGNoIGlzIGVtcHR5ICovCisKKwlzY2FuLT5m aW5pc2hlZCA9IGZhbHNlOworCisJYmF0Y2hfYXNzZXJ0X2JhdGNoZXNfdmFsaWQoc2Nhbik7Cit9 CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9iYXRjaF9tYXJrX3BvcyAtIG1hcmsg Y3VycmVudCBwb3NpdGlvbiBpbiBzY2FuIGZvciByZXN0b3JhdGlvbgorICoKKyAqIFNhdmVzIHRo ZSBjdXJyZW50IHJlYWQgcG9zaXRpb24gYW5kIGFzc29jaWF0ZWQgYmF0Y2ggc28gdGhhdCB0aGUg c2NhbiBjYW4KKyAqIGJlIHJlc3RvcmVkIHRvIHRoaXMgcG9pbnQgbGF0ZXIsIHZpYSBhIGNhbGwg dG8gaW5kZXhfYmF0Y2hfcmVzdG9yZV9wb3MuCisgKiBUaGUgbWFya2VkIGJhdGNoIGlzIHJldGFp bmVkIGFuZCBub3QgZnJlZWQgdW50aWwgYSBuZXcgbWFyayBpcyBzZXQgb3IgdGhlCisgKiBzY2Fu IGVuZHMgKG9yIHVudGlsIHRoZSBtYXJrIGlzIHJlc3RvcmVkKS4KKyAqIC0tLS0tLS0tLS0tLS0t LS0KKyAqLwordm9pZAoraW5kZXhfYmF0Y2hfbWFya19wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQor eworCUJhdGNoUmluZ0J1ZmZlciAqcmluZ2J1ZiA9IHNjYW4tPnJpbmdidWY7CisJQmF0Y2hSaW5n SXRlbVBvcyAqbWFya1BvcyA9ICZyaW5nYnVmLT5tYXJrUG9zOworCUJhdGNoSW5kZXhTY2FuIG1h cmtCYXRjaCA9IHJpbmdidWYtPm1hcmtCYXRjaDsKKworCS8qCisJICogRnJlZSB0aGUgcHJldmlv dXMgbWFyayBiYXRjaCAoaWYgYW55KSwgYnV0IG9ubHkgaWYgdGhlIGJhdGNoIGlzIG5vCisJICog bG9uZ2VyIGxvYWRlZCBpbnRvIHRoZSByaW5nIGJ1ZmZlcgorCSAqLworCWlmIChtYXJrQmF0Y2gg JiYgIUlOREVYX1NDQU5fQkFUQ0hfTE9BREVEKHNjYW4sIG1hcmtQb3MtPmJhdGNoKSkKKwl7CisJ CXJpbmdidWYtPm1hcmtCYXRjaCA9IE5VTEw7CisJCWJhdGNoX2ZyZWUoc2NhbiwgbWFya0JhdGNo KTsKKwl9CisKKwkvKiBjb3B5IHRoZSBzY2FuJ3MgcG9zaXRpb24gKi8KKwlyaW5nYnVmLT5tYXJr UG9zID0gcmluZ2J1Zi0+c2NhblBvczsKKwlyaW5nYnVmLT5tYXJrQmF0Y2ggPSBJTkRFWF9TQ0FO X0JBVENIKHNjYW4sIHJpbmdidWYtPm1hcmtQb3MuYmF0Y2gpOworCisJLyogc2NhblBvcy9tYXJr UG9zIG11c3QgYmUgdmFsaWQgKi8KKwliYXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4sICZyaW5n YnVmLT5tYXJrUG9zKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWluZGV4X2JhdGNo X3Jlc3RvcmVfcG9zIC0gcmVzdG9yZSBzY2FuIHRvIGEgcHJldmlvdXNseSBtYXJrZWQgcG9zaXRp b24KKyAqCisgKiBSZXN0b3JlcyB0aGUgc2NhbiB0byBhIHBvc2l0aW9uIHByZXZpb3VzbHkgc2F2 ZWQgYnkgaW5kZXhfYmF0Y2hfbWFya19wb3MuCisgKiBUaGUgbWFya2VkIGJhdGNoIGlzIHJlc3Rv cmVkIGFzIHRoZSBjdXJyZW50IGJhdGNoLCBhbGxvd2luZyB0aGUgc2NhbiB0bworICogcmVzdW1l IGZyb20gdGhlIG1hcmtlZCBwb3NpdGlvbi4gIEFsc28gbm90aWZpZXMgdGhlIGluZGV4IEFNIHZp YSBhIGNhbGwgdG8KKyAqIGl0cyBhbXBvc3Jlc2V0IHJvdXRpbmUsIHdoaWNoIGFsbG93cyBpdCB0 byBpbnZhbGlkYXRlIGFueSBwcml2YXRlIHN0YXRlCisgKiB0aGF0IGluZGVwZW5kZW50bHkgdHJh Y2tzIHNjYW4gcHJvZ3Jlc3MgKHN1Y2ggYXMgYXJyYXkga2V5IHN0YXRlKQorICoKKyAqIEZ1bmN0 aW9uIGN1cnJlbnRseSBqdXN0IGRpc2NhcmRzIG1vc3QgYmF0Y2ggcmluZyBidWZmZXIgc3RhdGUu ICBJdCBtaWdodAorICogbWFrZSBzZW5zZSB0byB0ZWFjaCBpdCB0byBob2xkIG9uIHRvIG90aGVy IG5lYXJieSBiYXRjaGVzIChzdGlsbC1oZWxkCisgKiBiYXRjaGVzIHRoYXQgYXJlIGxpa2VseSB0 byBiZSBuZWVkZWQgb25jZSB0aGUgc2NhbiBmaW5pc2hlcyByZXR1cm5pbmcKKyAqIG1hdGNoaW5n IGl0ZW1zIGZyb20gdGhlIHJlc3RvcmVkIGJhdGNoKSBhcyBhbiBvcHRpbWl6YXRpb24uICBTdWNo IGEgc2NoZW1lCisgKiB3b3VsZCBoYXZlIHRoZSBiZW5lZml0IG9mIGF2b2lkaW5nIHJlcGVhdCBj YWxscyB0byBhbWdldGJhdGNoL3JlcGVhdGVkbHkKKyAqIHJlYWRpbmcgdGhlIHNhbWUgaW5kZXgg cGFnZXMuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoX3Jlc3Rv cmVfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKnJpbmdidWYg PSBzY2FuLT5yaW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKm1hcmtQb3MgPSAmcmluZ2J1Zi0+ bWFya1BvczsKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJnJpbmdidWYtPnNjYW5Qb3Mg OworCUJhdGNoSW5kZXhTY2FuIG1hcmtCYXRjaCA9IHJpbmdidWYtPm1hcmtCYXRjaDsKKworCWlm IChzY2FuUG9zLT5iYXRjaCA9PSBtYXJrUG9zLT5iYXRjaCAmJgorCQlzY2FuUG9zLT5iYXRjaCA9 PSByaW5nYnVmLT5oZWFkQmF0Y2gpCisJeworCQkvKgorCQkgKiBXZSBkb24ndCBoYXZlIHRvIGRp c2NhcmQgdGhlIHNjYW4ncyBzdGF0ZSBhZnRlciBhbGwsIHNpbmNlIHRoZQorCQkgKiBjdXJyZW50 IGhlYWRCYXRjaCBpcyBhbHNvIHRoZSBiYXRjaCB0aGF0IHdlJ3JlIHJlc3RvcmluZyB0bworCQkg Ki8KKwkJc2NhblBvcy0+aXRlbSA9IG1hcmtQb3MtPml0ZW07CisJCXJldHVybjsKKwl9CisKKwkv KgorCSAqIENhbGwgYW1wb3NyZXNldCB0byBsZXQgaW5kZXggQU0ga25vdyB0byBpbnZhbGlkYXRl IGFueSBwcml2YXRlIHN0YXRlCisJICogdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyB0aGUgc2Nh bidzIHByb2dyZXNzCisJICovCisJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9z cmVzZXQoc2NhbiwgbWFya0JhdGNoKTsKKworCS8qCisJICogUmVzZXQgdGhlIGJhdGNoaW5nIHN0 YXRlLCBleGNlcHQgZm9yIHRoZSBtYXJrZWQgYmF0Y2gsIGFuZCBtYWtlIGl0IGxvb2sKKwkgKiBs aWtlIHdlIGhhdmUgYSBzaW5nbGUgYmF0Y2ggLS0gdGhlIG1hcmtlZCBvbmUuCisJICovCisJaW5k ZXhfYmF0Y2hfcmVzZXQoc2NhbiwgZmFsc2UpOworCisJcmluZ2J1Zi0+c2NhblBvcyA9ICptYXJr UG9zOworCXJpbmdidWYtPm5leHRCYXRjaCA9IHJpbmdidWYtPmhlYWRCYXRjaCA9IG1hcmtQb3Mt PmJhdGNoOworCisJSU5ERVhfU0NBTl9CQVRDSF9BUFBFTkQoc2NhbiwgbWFya0JhdGNoKTsKK30K KworLyoKKyAqIGJhdGNoX2ZyZWUKKyAqCQlSZWxlYXNlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdp dGggYSBiYXRjaCByZXR1cm5lZCBieSB0aGUgaW5kZXggQU0uCisgKgorICogQ2FsbGVkIGJ5IHRh YmxlIEFNJ3Mgb3JkZXJlZCBpbmRleCBzY2FuIGltcGxlbWVudGF0aW9uIHdoZW4gaXQgaXMgZmlu aXNoZWQKKyAqIHdpdGggYSBiYXRjaCBhbmQgd2lzaGVzIHRvIHJlbGVhc2UgaXRzIHJlc291cmNl cy4KKyAqCisgKiBUaGlzIGNhbGxzIHRoZSBpbmRleCBBTSdzIGFtZnJlZWJhdGNoIGNhbGxiYWNr IHRvIHJlbGVhc2UgQU0tc3BlY2lmaWMKKyAqIHJlc291cmNlcywgYW5kIHRvIHNldCBMUF9ERUFE IGJpdHMgb24gdGhlIGJhdGNoJ3MgaW5kZXggcGFnZS4gIEl0IGlzbid0CisgKiBzYWZlIGZvciB0 YWJsZSBBTXMgdG8gZmV0Y2ggdGFibGUgdHVwbGVzIHVzaW5nIFRJRHMgc2F2ZWQgZnJvbSBhIGJh dGNoIHRoYXQKKyAqIHdhcyBhbHJlYWR5IGZyZWVkOiAnZHJvcFBpbicgc2NhbnMgbmVlZCB0aGUg aW5kZXggQU0gdG8gcmV0YWluIGEgcGluIG9uIHRoZQorICogVElEJ3MgaW5kZXggcGFnZSwgYXMg YW4gaW50ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nLgorICovCit2b2lk CitiYXRjaF9mcmVlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpCit7 CisJYmF0Y2hfYXNzZXJ0X2JhdGNoX3ZhbGlkKHNjYW4sIGJhdGNoKTsKKworCS8qIGRvbid0IGZy ZWUgdGhlIGJhdGNoIHRoYXQgaXMgbWFya2VkICovCisJaWYgKGJhdGNoID09IHNjYW4tPnJpbmdi dWYtPm1hcmtCYXRjaCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBraWxsZWRJdGVtc1tdIGlzIG5v dyBpbiB3aGF0ZXZlciBvcmRlciB0aGUgc2NhbiByZXR1cm5lZCBpdGVtcyBpbi4KKwkgKiBTY3Jv bGxhYmxlIGN1cnNvciBzY2FucyBtaWdodCBoYXZlIGV2ZW4gc2F2ZWQgdGhlIHNhbWUgaXRlbS9U SUQgdHdpY2UuCisJICoKKwkgKiBTb3J0IGFuZCB1bmlxdWUtaWZ5IGtpbGxlZEl0ZW1zW10uICBU aGF0IHdheSB0aGUgaW5kZXggQU0gY2FuIHNhZmVseQorCSAqIGFzc3VtZSB0aGF0IGl0ZW1zIHdp bGwgYWx3YXlzIGJlIGluIHRoZWlyIG9yaWdpbmFsIGluZGV4IHBhZ2Ugb3JkZXIuCisJICovCisJ aWYgKGJhdGNoLT5udW1LaWxsZWQgPiAxKQorCXsKKwkJcXNvcnQoYmF0Y2gtPmtpbGxlZEl0ZW1z LCBiYXRjaC0+bnVtS2lsbGVkLCBzaXplb2YoaW50KSwKKwkJCSAgYmF0Y2hfY29tcGFyZV9pbnQp OworCQliYXRjaC0+bnVtS2lsbGVkID0gcXVuaXF1ZShiYXRjaC0+a2lsbGVkSXRlbXMsIGJhdGNo LT5udW1LaWxsZWQsCisJCQkJCQkJCSAgIHNpemVvZihpbnQpLCBiYXRjaF9jb21wYXJlX2ludCk7 CisJfQorCisJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZnJlZWJhdGNoKHNjYW4s IGJhdGNoKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWluZGV4X2JhdGNoX2tpbGxf aXRlbSAtIHJlY29yZCBpdGVtIGZvciBkZWZlcnJlZCBMUF9ERUFEIG1hcmtpbmcKKyAqCisgKiBS ZWNvcmRzIHRoZSBpdGVtIGluZGV4IG9mIHRoZSBjdXJyZW50bHktcmVhZCB0dXBsZSBpbiBzY2Fu QmF0Y2gncworICoga2lsbGVkSXRlbXMgYXJyYXkuIFRoZSBpdGVtcycgaW5kZXggdHVwbGVzIHdp bGwgbGF0ZXIgYmUgbWFya2VkIExQX0RFQUQKKyAqIHdoZW4gY3VycmVudCBzY2FuQmF0Y2ggaXMg ZnJlZWQgYnkgYW1mcmVlYmF0Y2ggcm91dGluZSAoc2VlIGJhdGNoX2ZyZWUpLgorICogLS0tLS0t LS0tLS0tLS0tLQorICovCit2b2lkCitpbmRleF9iYXRjaF9raWxsX2l0ZW0oSW5kZXhTY2FuRGVz YyBzY2FuKQoreworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmc2Nhbi0+cmluZ2J1Zi0+ c2NhblBvczsKKwlCYXRjaEluZGV4U2NhbiBzY2FuQmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNj YW4sIHNjYW5Qb3MtPmJhdGNoKTsKKworCWJhdGNoX2Fzc2VydF9wb3NfdmFsaWQoc2Nhbiwgc2Nh blBvcyk7CisKKwlpZiAoc2NhbkJhdGNoLT5raWxsZWRJdGVtcyA9PSBOVUxMKQorCQlzY2FuQmF0 Y2gtPmtpbGxlZEl0ZW1zID0gcGFsbG9jX2FycmF5KGludCwgc2Nhbi0+bWF4aXRlbXNiYXRjaCk7 CisJaWYgKHNjYW5CYXRjaC0+bnVtS2lsbGVkIDwgc2Nhbi0+bWF4aXRlbXNiYXRjaCkKKwkJc2Nh bkJhdGNoLT5raWxsZWRJdGVtc1tzY2FuQmF0Y2gtPm51bUtpbGxlZCsrXSA9IHNjYW5Qb3MtPml0 ZW07Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9iYXRjaF9lbmQgLSBlbmQg YSBiYXRjaCBzY2FuIGFuZCBmcmVlIGFsbCByZXNvdXJjZXMKKyAqCisgKiBDYWxsZWQgd2hlbiBh biBpbmRleCBzY2FuIGlzIGJlaW5nIGVuZGVkLCByaWdodCBiZWZvcmUgdGhlIG93bmluZyBzY2Fu CisgKiBkZXNjcmlwdG9yIGdvZXMgYXdheS4gIENsZWFucyB1cCBhbGwgYmF0Y2ggcmVsYXRlZCBy ZXNvdXJjZXMuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoX2Vu ZChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJaW5kZXhfYmF0Y2hfcmVzZXQoc2NhbiwgdHJ1ZSk7 CisKKwkvKiBiYWlsIG91dCB3aXRob3V0IGJhdGNoaW5nICovCisJaWYgKCFzY2FuLT5yaW5nYnVm KQorCQlyZXR1cm47CisKKwlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFU Q0hFUzsgaSsrKQorCXsKKwkJQmF0Y2hJbmRleFNjYW4gY2FjaGVkID0gc2Nhbi0+cmluZ2J1Zi0+ Y2FjaGVbaV07CisKKwkJaWYgKGNhY2hlZCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJaWYg KGNhY2hlZC0+a2lsbGVkSXRlbXMpCisJCQlwZnJlZShjYWNoZWQtPmtpbGxlZEl0ZW1zKTsKKwkJ aWYgKGNhY2hlZC0+Y3VyclR1cGxlcykKKwkJCXBmcmVlKGNhY2hlZC0+Y3VyclR1cGxlcyk7CisJ CXBmcmVlKGNhY2hlZCk7CisJfQorCisJcGZyZWUoc2Nhbi0+cmluZ2J1Zik7Cit9CisKKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCQkJdXRpbGl0eSBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFtZ2V0YmF0Y2ggaW5kZXgg QU1zCisgKgorICogVGhlc2UgZnVuY3Rpb25zIG1hbmFnZSBiYXRjaCBhbGxvY2F0aW9uLCB1bmxv Y2svcGluIG1hbmFnZW1lbnQsIGFuZCBiYXRjaAorICogcmVzb3VyY2UgcmVjeWNsaW5nLiAgSW5k ZXggQU1zIGltcGxlbWVudGluZyBhbWdldGJhdGNoIHNob3VsZCB1c2UgdGhlc2UKKyAqIHJhdGhl ciB0aGFuIG1hbmFnaW5nIGJ1ZmZlcnMgZGlyZWN0bHkuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoK KyAqIGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2sgLSBEcm9wIGxvY2sgYW5kIGNvbmRpdGlvbmFs bHkgZHJvcCBwaW4gb24gYmF0Y2ggcGFnZQorICoKKyAqIFVubG9ja3MgY2FsbGVyJ3MgYmF0Y2gt PmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYW1nZXRiYXRjaCByZXR1cm5pbmcgaXRlbXMKKyAqIHNh dmVkIGluIHRoYXQgYmF0Y2guICBNYW5hZ2VzIHRoZSBkZXRhaWxzIG9mIGRyb3BwaW5nIHRoZSBs b2NrIGFuZCBwb3NzaWJseQorICogdGhlIHBpbiBmb3IgaW5kZXggQU0gY2FsbGVyIChkcm9wcGlu ZyB0aGUgcGluIHByZXZlbnRzIFZBQ1VVTSBmcm9tIGJsb2NraW5nCisgKiBvbiBhY3F1aXJpbmcg YSBjbGVhbnVwIGxvY2ssIGJ1dCBpc24ndCBhbHdheXMgc2FmZSkuCisgKgorICogT25seSBjYWxs IGhlcmUgd2hlbiBhIGJhdGNoIGhhcyBvbmUgb3IgbW9yZSBtYXRjaGluZyBpdGVtcyB0byByZXR1 cm4gdXNpbmcKKyAqIGFtZ2V0YmF0Y2ggKG9yIGZvciBhbWdldGJpdG1hcCB0byBsb2FkIGludG8g aXRzIGJpdG1hcCBvZiBtYXRjaGluZyBUSURzKS4KKyAqIFdoZW4gYW4gaW5kZXggcGFnZSBoYXMg bm8gbWF0Y2hlcywgaXQncyBhbHdheXMgc2FmZSBmb3IgaW5kZXggQU1zIHRvIGRyb3AKKyAqIGJv dGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gZm9yIHRoZW1zZWx2ZXMuCisgKgorICogTm90ZTogSXQg aXMgY29udmVuaWVudCBmb3IgaW5kZXggQU1zIHRoYXQgaW1wbGVtZW50IGJvdGggYW1nZXRiaXRt YXAgYW5kCisgKiBhbWdldGJpdG1hcCB0byBjb25zaXN0ZW50bHkgdXNlIHRoZSBzYW1lIGJhdGNo IG1hbmFnZW1lbnQgYXBwcm9hY2gsIHNpbmNlCisgKiB0aGF0IGF2b2lkcyBpbnRyb2R1Y2luZyBz cGVjaWFsIGNhc2VzIHRvIGxvd2VyLWxldmVsIGNvZGUuICBXZSBhbHdheXMgZHJvcAorICogYm90 aCB0aGUgbG9jayBhbmQgdGhlIHBpbiBvbiBiYXRjaCdzIHBhZ2Ugb24gYmVoYWxmIG9mIGFtZ2V0 Yml0bWFwIGNhbGxlcnMuCisgKiBTdWNoIGFtZ2V0Yml0bWFwIGNhbGxlcnMgbXVzdCBiZSBjYXJl ZnVsIHRvIGZyZWUgYWxsIGJhdGNoZXMgd2l0aCBtYXRjaGluZworICogaXRlbXMgb25jZSB0aGV5 J3JlIGRvbmUgc2F2aW5nIHRoZSBtYXRjaGluZyBUSURzICh0aGVyZSB3aWxsIG5ldmVyIGJlIGFu eQorICogY2FsbHMgdG8gYW1mcmVlYmF0Y2gsIHNvIGFtZ2V0Yml0bWFwIG11c3QgY2FsbCBpbmRl eGFtX3V0aWxfYmF0Y2hfcmVsZWFzZQorICogZGlyZWN0bHksIGluIGxpZXUgb2YgYSBkZWZlcnJl ZCBjYWxsIHRvIGFtZnJlZWJhdGNoIGZyb20gY29yZSBjb2RlKS4KKyAqLwordm9pZAoraW5kZXhh bV91dGlsX2JhdGNoX3VubG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJh dGNoKQoreworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisJYm9vbAkJZHJv cFBpbiA9IHNjYW4tPmRyb3BQaW47CisKKwkvKiBiYXRjaCBtdXN0IGhhdmUgb25lIG9yIG1vcmUg bWF0Y2hpbmcgaXRlbXMgcmV0dXJuZWQgYnkgaW5kZXggQU0gKi8KKwlBc3NlcnQoYmF0Y2gtPmZp cnN0SXRlbSA+PSAwICYmIGJhdGNoLT5maXJzdEl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKwor CWlmICghZHJvcFBpbikKKwl7CisJCWlmICghUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHJlbCkp CisJCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhCdWZmZXJHZXRQYWdlKGJhdGNoLT5idWYp LCBCTENLU1opOworCisJCS8qIEp1c3QgZHJvcCB0aGUgbG9jayAobm90IHRoZSBwaW4pICovCisJ CUxvY2tCdWZmZXIoYmF0Y2gtPmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJcmV0dXJuOwor CX0KKworCWlmIChzY2FuLT5yaW5nYnVmKQorCXsKKwkJLyogYW1nZXRiYXRjaCAobm90IGFtZ2V0 Yml0bWFwKSBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsK KworCQkvKgorCQkgKiBIYXZlIHRvIHNldCBiYXRjaC0+bHNuIHNvIHRoYXQgYW1mcmVlYmF0Y2gg aGFzIGEgd2F5IHRvIGRldGVjdCB3aGVuCisJCSAqIGNvbmN1cnJlbnQgaGVhcCBUSUQgcmVjeWNs aW5nIGJ5IFZBQ1VVTSBtaWdodCBoYXZlIHRha2VuIHBsYWNlLgorCQkgKiBJdCdsbCBvbmx5IGJl IHNhZmUgdG8gc2V0IGFueSBpbmRleCB0dXBsZSBMUF9ERUFEIGJpdHMgd2hlbiB0aGUKKwkJICog cGFnZSBMU04gaGFzbid0IGFkdmFuY2VkLgorCQkgKi8KKwkJQXNzZXJ0KFJlbGF0aW9uTmVlZHNX QUwocmVsKSk7CisJCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwkJYmF0Y2gtPmxzbiA9 IEJ1ZmZlckdldExTTkF0b21pYyhiYXRjaC0+YnVmKTsKKwl9CisKKwkvKiBEcm9wIGJvdGggdGhl IGxvY2sgYW5kIHRoZSBwaW4gKi8KKwlMb2NrQnVmZmVyKGJhdGNoLT5idWYsIEJVRkZFUl9MT0NL X1VOTE9DSyk7CisJaWYgKCFSZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMocmVsKSkKKwkJVkFMR1JJ TkRfTUFLRV9NRU1fTk9BQ0NFU1MoQnVmZmVyR2V0UGFnZShiYXRjaC0+YnVmKSwgQkxDS1NaKTsK KwlSZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYpOworCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVy OworfQorCisvKgorICogaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jCisgKgkJQWxsb2NhdGUgYSBi YXRjaCBkdXJpbmcgYSBhbWdldGJhdGNoIChvciBhbWdldGJpdG1hcCkgaW5kZXggc2Nhbi4KKyAq CisgKiBSZXR1cm5zIEJhdGNoSW5kZXhTY2FuIHdpdGggc3BhY2UgdG8gZml0IHNjYW4tPm1heGl0 ZW1zYmF0Y2gtbWFueQorICogQmF0Y2hNYXRjaGluZ0l0ZW0gZW50cmllcy4gIFRoaXMgd2lsbCBl aXRoZXIgYmUgYSBuZXdseSBhbGxvY2F0ZWQgYmF0Y2gsIG9yCisgKiBhIGJhdGNoIHJlY3ljbGVk IGZyb20gdGhlIGNhY2hlIG1hbmFnZWQgYnkgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UuICBT ZWUKKyAqIGNvbW1lbnRzIGFib3ZlIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlLgorICoKKyAq IEluZGV4IEFNcyB0aGF0IHVzZSBiYXRjaGVzIHNob3VsZCBjYWxsIHRoaXMgZnJvbSBlaXRoZXIg dGhlaXIgYW1nZXRiYXRjaCBvcgorICogYW1nZXRiaXRtYXAgcm91dGluZXMgb25seS4gIE5vdGUg aW4gcGFydGljdWxhciB0aGF0IGl0IGNhbm5vdCBzYWZlbHkgYmUKKyAqIGNhbGxlZCBmcm9tIGEg YW1mcmVlYmF0Y2ggcm91dGluZS4KKyAqLworQmF0Y2hJbmRleFNjYW4KK2luZGV4YW1fdXRpbF9i YXRjaF9hbGxvYyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hJbmRleFNjYW4gYmF0Y2gg PSBOVUxMOworCisJLyogRmlyc3QgbG9vayBmb3IgYW4gZXhpc3RpbmcgYmF0Y2ggZnJvbSByaW5n IGJ1ZmZlciAqLworCWlmIChzY2FuLT5yaW5nYnVmICE9IE5VTEwpCisJeworCQlmb3IgKGludCBp ID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCQl7CisJCQlpZiAoc2Nh bi0+cmluZ2J1Zi0+Y2FjaGVbaV0gIT0gTlVMTCkKKwkJCXsKKwkJCQkvKiBSZXR1cm4gY2FjaGVk IHVucmVmZXJlbmNlZCBiYXRjaCAqLworCQkJCWJhdGNoID0gc2Nhbi0+cmluZ2J1Zi0+Y2FjaGVb aV07CisJCQkJc2Nhbi0+cmluZ2J1Zi0+Y2FjaGVbaV0gPSBOVUxMOworCQkJCWJyZWFrOworCQkJ fQorCQl9CisJfQorCisJaWYgKCFiYXRjaCkKKwl7CisJCWJhdGNoID0gcGFsbG9jKG9mZnNldG9m KEJhdGNoSW5kZXhTY2FuRGF0YSwgaXRlbXMpICsKKwkJCQkJICAgc2l6ZW9mKEJhdGNoTWF0Y2hp bmdJdGVtKSAqIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCisJCS8qCisJCSAqIElmIHdlIGFyZSBk b2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHdlIG5lZWQgYSB0dXBsZSBzdG9yYWdlCisJCSAqIHdv cmtzcGFjZS4gV2UgYWxsb2NhdGUgQkxDS1NaIGZvciB0aGlzLCB3aGljaCBzaG91bGQgYWx3YXlz IGdpdmUKKwkJICogdGhlIGluZGV4IEFNIGVub3VnaCBzcGFjZSB0byBmaXQgYSBmdWxsIHBhZ2Un cyB3b3J0aCBvZiB0dXBsZXMuCisJCSAqLworCQliYXRjaC0+Y3VyclR1cGxlcyA9IE5VTEw7CisJ CWlmIChzY2FuLT54c193YW50X2l0dXApCisJCQliYXRjaC0+Y3VyclR1cGxlcyA9IHBhbGxvYyhC TENLU1opOworCisJCS8qCisJCSAqIEJhdGNoZXMgYWxsb2NhdGUga2lsbGVkSXRlbXMgbGF6aWx5 ICh0aG91Z2ggbm90ZSB0aGF0IGNhY2hlZAorCQkgKiBiYXRjaGVzIGtlZXAgdGhlaXIga2lsbGVk SXRlbXMgYWxsb2NhdGlvbiB3aGVuIHJlY3ljbGVkKQorCQkgKi8KKwkJYmF0Y2gtPmtpbGxlZEl0 ZW1zID0gTlVMTDsKKwl9CisKKwkvKiB4c193YW50X2l0dXAgc2NhbnMgbXVzdCBnZXQgYSBjdXJy VHVwbGVzIHNwYWNlICovCisJQXNzZXJ0KCEoc2Nhbi0+eHNfd2FudF9pdHVwICYmIChiYXRjaC0+ Y3VyclR1cGxlcyA9PSBOVUxMKSkpOworCisJLyogc2hhcmVkIGluaXRpYWxpemF0aW9uICovCisJ YmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJYmF0Y2gtPmZpcnN0SXRlbSA9IC0xOworCWJh dGNoLT5sYXN0SXRlbSA9IC0xOworCWJhdGNoLT5udW1LaWxsZWQgPSAwOworCisJcmV0dXJuIGJh dGNoOworfQorCisvKgorICogaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UKKyAqCQlFaXRoZXIg c3Rhc2ggdGhlIGJhdGNoIGluIGEgc21hbGwgY2FjaGUgZm9yIHJldXNlLCBvciBmcmVlIGl0Lgor ICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGluZGV4IEFNcyB0byByZWxlYXNlIGEg YmF0Y2ggYWxsb2NhdGVkIGJ5CisgKiBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MuICBCYXRjaGVz IGFyZSBjYWNoZWQgaGVyZSBmb3IgcmV1c2UgKHdoZW4gc2NhbgorICogaGFzbid0IGFscmVhZHkg ZmluaXNoZWQpIHRvIHJlZHVjZSBwYWxsb2MvcGZyZWUgb3ZlcmhlYWQuCisgKgorICogSXQncyBz YWZlIHRvIHJlbGVhc2UgYSBiYXRjaCBpbW1lZGlhdGVseSB3aGVuIGl0IHdhcyB1c2VkIHRvIHJl YWQgYSBwYWdlCisgKiB0aGF0IHJldHVybmVkIG5vIG1hdGNoZXMgdG8gdGhlIHNjYW4uICBCYXRj aGVzIGFjdHVhbGx5IHJldHVybmVkIGJ5IGluZGV4CisgKiBBTSdzIGFtZ2V0YmF0Y2ggcm91dGlu ZSAoaS5lLiBiYXRjaGVzIGZvciBwYWdlcyB3aXRoIG9uZSBvciBtb3JlIG1hdGNoZXMpCisgKiBt dXN0IGJlIHJlbGVhc2VkIGJ5IGNhbGxpbmcgaGVyZSBhdCB0aGUgZW5kIG9mIHRoZWlyIGFtZnJl ZWJhdGNoIHJvdXRpbmUuCisgKiBJbmRleCBBTXMgdGhhdCB1c2VzIGJhdGNoZXMgc2hvdWxkIGNh bGwgaGVyZSB0byByZWxlYXNlIGEgYmF0Y2ggZnJvbSBhbnkgb2YKKyAqIHRoZWlyIGFtZ2V0YmF0 Y2gsIGFtZ2V0Yml0bWFwLCBhbmQgYW1mcmVlYmF0Y2ggcm91dGluZXMuCisgKi8KK3ZvaWQKK2lu ZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNj YW4gYmF0Y2gpCit7CisJQXNzZXJ0KGJhdGNoLT5idWYgPT0gSW52YWxpZEJ1ZmZlcik7CisKKwlp ZiAoc2Nhbi0+cmluZ2J1ZikKKwl7CisJCS8qIGFtZ2V0YmF0Y2ggc2NhbiBjYWxsZXIgKi8KKwkJ QXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKKworCQlpZiAoc2Nhbi0+ZmluaXNo ZWQpCisJCXsKKwkJCS8qIERvbid0IGJvdGhlciB1c2luZyBjYWNoZSB3aGVuIHNjYW4gaXMgZW5k aW5nICovCisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogVXNlIGNhY2hlLiAgVGhpcyBp cyBnZW5lcmFsbHkgb25seSBiZW5lZmljaWFsIHdoZW4gdGhlcmUgYXJlCisJCQkgKiBtYW55IHNt YWxsIHJlc2NhbnMgb2YgYW4gaW5kZXguCisJCQkgKi8KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwg SU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBpKyspCisJCQl7CisJCQkJaWYgKHNjYW4tPnJpbmdi dWYtPmNhY2hlW2ldID09IE5VTEwpCisJCQkJeworCQkJCQkvKiBmb3VuZCBlbXB0eSBzbG90LCB3 ZSdyZSBkb25lICovCisJCQkJCXNjYW4tPnJpbmdidWYtPmNhY2hlW2ldID0gYmF0Y2g7CisJCQkJ CXJldHVybjsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBGYWlsZWQgdG8gZmluZCBh IGZyZWUgc2xvdCBmb3IgdGhpcyBiYXRjaC4gIFdlJ2xsIGp1c3QgZnJlZSBpdAorCQkgKiBvdXJz ZWx2ZXMuICBUaGlzIGlzbid0IHJlYWxseSBleHBlY3RlZDsgaXQncyBqdXN0IGRlZmVuc2l2ZS4K KwkJICovCisJCWlmIChiYXRjaC0+a2lsbGVkSXRlbXMpCisJCQlwZnJlZShiYXRjaC0+a2lsbGVk SXRlbXMpOworCQlpZiAoYmF0Y2gtPmN1cnJUdXBsZXMpCisJCQlwZnJlZShiYXRjaC0+Y3VyclR1 cGxlcyk7CisJfQorCWVsc2UKKwl7CisJCS8qIGFtZ2V0Yml0bWFwIHNjYW4gY2FsbGVyICovCisJ CUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CisJCUFzc2VydChiYXRjaC0+a2ls bGVkSXRlbXMgPT0gTlVMTCk7CisJCUFzc2VydChiYXRjaC0+Y3VyclR1cGxlcyA9PSBOVUxMKTsK Kwl9CisKKwkvKiBubyBmcmVlIHNsb3QgdG8gc2F2ZSB0aGlzIGJhdGNoIChleHBlY3RlZCB3aXRo IGFtZ2V0Yml0bWFwIGNhbGxlcnMpICovCisJcGZyZWUoYmF0Y2gpOworfQorCisvKgorICogcXNv cnQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgaW50IGFycmF5cworICovCitzdGF0aWMgaW50Citi YXRjaF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpCit7CisJaW50 CQkJYSA9ICooKGNvbnN0IGludCAqKSB2YSk7CisJaW50CQkJYiA9ICooKGNvbnN0IGludCAqKSB2 Yik7CisKKwlyZXR1cm4gcGdfY21wX3MzMihhLCBiKTsKK30KKworc3RhdGljIHZvaWQKK2JhdGNo X2RlYnVnX3ByaW50X2JhdGNoZXMoY29uc3QgY2hhciAqbGFiZWwsIEluZGV4U2NhbkRlc2Mgc2Nh bikKK3sKKyNpZmRlZiBJTkRFWEFNX0RFQlVHCisJQmF0Y2hSaW5nQnVmZmVyICpyaW5nYnVmID0g c2Nhbi0+cmluZ2J1ZjsKKworCWlmICghcmluZ2J1ZikKKwkJcmV0dXJuOworCisJaWYgKCFBbVJl Z3VsYXJCYWNrZW5kUHJvY2VzcygpKQorCQlyZXR1cm47CisJaWYgKElzQ2F0YWxvZ1JlbGF0aW9u KHNjYW4tPmluZGV4UmVsYXRpb24pKQorCQlyZXR1cm47CisKKwlERUJVR19MT0coIiVzOiBiYXRj aGVzIGhlYWRCYXRjaCAlZCBuZXh0QmF0Y2ggJWQiLAorCQkJICBsYWJlbCwKKwkJCSAgcmluZ2J1 Zi0+aGVhZEJhdGNoLCByaW5nYnVmLT5uZXh0QmF0Y2gpOworCisJZm9yIChpbnQgaSA9IHJpbmdi dWYtPmhlYWRCYXRjaDsgaSA8IHJpbmdidWYtPm5leHRCYXRjaDsgaSsrKQorCXsKKwkJQmF0Y2hJ bmRleFNjYW4gYmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIGkpOworCisJCURFQlVHX0xP RygiICAgIGJhdGNoICVkIGN1cnJQYWdlICV1ICVwIGZpcnN0SXRlbSAlZCBsYXN0SXRlbSAlZCBr aWxsZWQgJWQiLAorCQkJCSAgaSwgYmF0Y2gtPmN1cnJQYWdlLCBiYXRjaCwgYmF0Y2gtPmZpcnN0 SXRlbSwKKwkJCQkgIGJhdGNoLT5sYXN0SXRlbSwgYmF0Y2gtPm51bUtpbGxlZCk7CisJfQorI2Vu ZGlmCit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKaW5kZXggZGE2NGNiNTk1Li44 M2RmYTNmMmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWls ZAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKQEAgLTUsNCArNSw1 IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2FtdmFsaWRhdGUuYycsCiAgICdnZW5h bS5jJywKICAgJ2luZGV4YW0uYycsCisgICdpbmRleGJhdGNoLmMnLAogKQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL1JFQURNRQppbmRleCA1M2Q0YTYxZGMuLjIzMWRhMjBlNCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9SRUFETUUKQEAgLTQ3MSw3ICs0NzEsNyBAQCBwcm9wZXIuICBBIHBsYWluIGluZGV4IHNjYW4g d2lsbCBldmVuIHJlY29nbml6ZSBMUF9VTlVTRUQgaXRlbXMgaW4gdGhlCiBoZWFwIChpdGVtcyB0 aGF0IGNvdWxkIGJlIHJlY3ljbGVkIGJ1dCBoYXZlbid0IGJlZW4ganVzdCB5ZXQpIGFzICJub3QK IHZpc2libGUiIC0tIGV2ZW4gd2hlbiB0aGUgaGVhcCBwYWdlIGlzIGdlbmVyYWxseSBjb25zaWRl cmVkIGFsbC12aXNpYmxlLgogCi1MUF9ERUFEIHNldHRpbmcgb2YgaW5kZXggdHVwbGVzIGJ5IHRo ZSBraWxsX3ByaW9yX3R1cGxlIG9wdGltaXphdGlvbgorT3Bwb3J0dW5pc3RpYyBMUF9ERUFEIHNl dHRpbmcgb2Yga25vd24tZGVhZCBpbmRleCB0dXBsZXMgZHVyaW5nIGluZGV4IHNjYW5zCiAoZGVz Y3JpYmVkIGluIGZ1bGwgaW4gc2ltcGxlIGRlbGV0aW9uLCBiZWxvdykgaXMgYWxzbyBtb3JlIGNv bXBsaWNhdGVkIGZvcgogaW5kZXggc2NhbnMgdGhhdCBkcm9wIHRoZWlyIGxlYWYgcGFnZSBwaW5z LiAgV2UgbXVzdCBiZSBjYXJlZnVsIHRvIGF2b2lkCiBMUF9ERUFELW1hcmtpbmcgYW55IG5ldyBp bmRleCB0dXBsZSB0aGF0IGxvb2tzIGxpa2UgYSBrbm93bi1kZWFkIGluZGV4CkBAIC00ODEsNyAr NDgxLDcgQEAgbmV3LCB1bnJlbGF0ZWQgaW5kZXggdHVwbGUsIG9uIHRoZSBzYW1lIGxlYWYgcGFn ZSwgd2hpY2ggaGFzIHRoZSBzYW1lCiBvcmlnaW5hbCBUSUQuICBJdCB3b3VsZCBiZSB0b3RhbGx5 IHdyb25nIHRvIExQX0RFQUQtc2V0IHRoaXMgbmV3LAogdW5yZWxhdGVkIGluZGV4IHR1cGxlLgog Ci1XZSBoYW5kbGUgdGhpcyBraWxsX3ByaW9yX3R1cGxlIHJhY2UgY29uZGl0aW9uIGJ5IGhhdmlu ZyBhZmZlY3RlZCBpbmRleAorV2UgaGFuZGxlIHRoaXMgTFBfREVBRCBzZXR0aW5nIHJhY2UgY29u ZGl0aW9uIGJ5IGhhdmluZyBhZmZlY3RlZCBpbmRleAogc2NhbnMgY29uc2VydmF0aXZlbHkgYXNz dW1lIHRoYXQgYW55IGNoYW5nZSB0byB0aGUgbGVhZiBwYWdlIGF0IGFsbAogaW1wbGllcyB0aGF0 IGl0IHdhcyByZWFjaGVkIGJ5IGJ0YnVsa2RlbGV0ZSBpbiB0aGUgaW50ZXJpbSBwZXJpb2Qgd2hl biBubwogYnVmZmVyIHBpbiB3YXMgaGVsZC4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgbm90IHNl dHRpbmcgYW55IExQX0RFQUQgYml0cwpAQCAtNzM1LDcgKzczNSw3IEBAIG9mIHJlYWRlcnMgY291 bGQgc3RpbGwgbW92ZSByaWdodCB0byByZWNvdmVyIGlmIHdlIGRpZG4ndCBjb3VwbGUKIHNhbWUt bGV2ZWwgbG9ja3MpLCBidXQgd2UgcHJlZmVyIHRvIGJlIGNvbnNlcnZhdGl2ZSBoZXJlLgogCiBE dXJpbmcgcmVjb3ZlcnkgYWxsIGluZGV4IHNjYW5zIHN0YXJ0IHdpdGggaWdub3JlX2tpbGxlZF90 dXBsZXMgPSBmYWxzZQotYW5kIHdlIG5ldmVyIHNldCBraWxsX3ByaW9yX3R1cGxlLiBXZSBkbyB0 aGlzIGJlY2F1c2UgdGhlIG9sZGVzdCB4bWluCithbmQgd2UgbmV2ZXIgTFBfREVBRC1tYXJrIHR1 cGxlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZSBvbGRlc3QgeG1pbgogb24gdGhlIHN0YW5kYnkg c2VydmVyIGNhbiBiZSBvbGRlciB0aGFuIHRoZSBvbGRlc3QgeG1pbiBvbiB0aGUgcHJpbWFyeQog c2VydmVyLCB3aGljaCBtZWFucyB0dXBsZXMgY2FuIGJlIG1hcmtlZCBMUF9ERUFEIGV2ZW4gd2hl biB0aGV5IGFyZQogc3RpbGwgdmlzaWJsZSBvbiB0aGUgc3RhbmRieS4gV2UgZG9uJ3QgV0FMIGxv ZyB0dXBsZSBMUF9ERUFEIGJpdHMsIGJ1dApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwpp bmRleCA0MTI1YzE4NWUuLjIxYmI4MDE2OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdl LmMKQEAgLTEwMzMsNiArMTAzMyw5IEBAIF9idF9yZWxidWYoUmVsYXRpb24gcmVsLCBCdWZmZXIg YnVmKQogICogTG9jayBpcyBhY3F1aXJlZCB3aXRob3V0IGFjcXVpcmluZyBhbm90aGVyIHBpbi4g IFRoaXMgaXMgbGlrZSBhIHJhdwogICogTG9ja0J1ZmZlcigpIGNhbGwsIGJ1dCBwZXJmb3JtcyBl eHRyYSBzdGVwcyBuZWVkZWQgYnkgVmFsZ3JpbmQuCiAgKgorICogTm90ZTogaW5kZXhhbV91dGls X2JhdGNoX3VubG9jayBoYXMgc2ltaWxhciBWYWxncmluZCBidWZmZXIgbG9jaworICogaW5zdHJ1 bWVudGF0aW9uLCB3aGljaCB3ZSByZWx5IG9uIGhlcmUuCisgKgogICogTm90ZTogQ2FsbGVyIG1h eSBuZWVkIHRvIGNhbGwgX2J0X2NoZWNrcGFnZSgpIHdpdGggYnVmIHdoZW4gcGluIG9uIGJ1Zgog ICogd2Fzbid0IG9yaWdpbmFsbHkgYWNxdWlyZWQgaW4gX2J0X2dldGJ1ZigpIG9yIF9idF9yZWxh bmRnZXRidWYoKS4KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRyZWFkcGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jCmlu ZGV4IDJiYTFjYTY2MC4uNjljYmU0Nzg0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHJlYWRwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRy ZWFkcGFnZS5jCkBAIC0zMiw2ICszMiw3IEBAIHR5cGVkZWYgc3RydWN0IEJUUmVhZFBhZ2VTdGF0 ZQogewogCS8qIElucHV0IHBhcmFtZXRlcnMsIHNldCBieSBfYnRfcmVhZHBhZ2UgZm9yIF9idF9j aGVja2tleXMgKi8KIAlTY2FuRGlyZWN0aW9uIGRpcjsJCQkvKiBjdXJyZW50IHNjYW4gZGlyZWN0 aW9uICovCisJQmxvY2tOdW1iZXIgY3VycnBhZ2U7CQkvKiBjdXJyZW50IHBhZ2UgYmVpbmcgcmVh ZCAqLwogCU9mZnNldE51bWJlciBtaW5vZmY7CQkvKiBMb3dlc3Qgbm9uLXBpdm90IHR1cGxlJ3Mg b2Zmc2V0ICovCiAJT2Zmc2V0TnVtYmVyIG1heG9mZjsJCS8qIEhpZ2hlc3Qgbm9uLXBpdm90IHR1 cGxlJ3Mgb2Zmc2V0ICovCiAJSW5kZXhUdXBsZQlmaW5hbHR1cDsJCS8qIE5lZWRlZCBieSBzY2Fu cyB3aXRoIGFycmF5IGtleXMgKi8KQEAgLTYzLDE0ICs2NCwxMyBAQCBzdGF0aWMgYm9vbCBfYnRf c2NhbmJlaGluZF9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp ciwKIAkJCQkJCQkJCSBJbmRleFR1cGxlIGZpbmFsdHVwKTsKIHN0YXRpYyBib29sIF9idF9vcHBv ZGlyX2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCQkJ CQkJCQkgIEluZGV4VHVwbGUgZmluYWx0dXApOwotc3RhdGljIHZvaWQgX2J0X3NhdmVpdGVtKEJU U2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVt LCBJbmRleFR1cGxlIGl0dXApOwotc3RhdGljIGludAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoQlRT Y2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAorc3RhdGljIHZvaWQgX2J0X3NhdmVpdGVtKEJh dGNoSW5kZXhTY2FuIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVt LAorCQkJCQkJIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCk7CitzdGF0aWMgaW50 CV9idF9zZXR1cHBvc3RpbmdpdGVtcyhCYXRjaEluZGV4U2NhbiBuZXdiYXRjaCwgaW50IGl0ZW1J bmRleCwKIAkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRh dGEgKmhlYXBUaWQsCi0JCQkJCQkJCSAgSW5kZXhUdXBsZSBpdHVwKTsKLXN0YXRpYyBpbmxpbmUg dm9pZCBfYnRfc2F2ZXBvc3RpbmdpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwK LQkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCQkJCQkgICBJdGVtUG9pbnRl ciBoZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpOworCQkJCQkJCQkgIEluZGV4VHVwbGUgaXR1cCwg aW50ICp0dXBsZU9mZnNldCk7CitzdGF0aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0aW5naXRl bShCYXRjaEluZGV4U2NhbiBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9m Zm51bSwKKwkJCQkJCQkJCSAgIEl0ZW1Qb2ludGVyIGhlYXBUaWQsIGludCBiYXNlT2Zmc2V0KTsK IHN0YXRpYyBib29sIF9idF9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdl U3RhdGUgKnBzdGF0ZSwgYm9vbCBhcnJheUtleXMsCiAJCQkJCQkgIEluZGV4VHVwbGUgdHVwbGUs IGludCB0dXBuYXR0cyk7CiBzdGF0aWMgYm9vbCBfYnRfY2hlY2tfY29tcGFyZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLApAQCAtMTExLDE1ICsxMTEsMTUgQEAgc3RhdGlj IGJvb2wgX2J0X3ZlcmlmeV9rZXlzX3dpdGhfYXJyYXlrZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7 CiAKIAogLyoKLSAqCV9idF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5k ZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9zCisgKglfYnRfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEg ZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBuZXdiYXRjaC4KICAqCi0gKiBDYWxsZXIgbXVz dCBoYXZlIHBpbm5lZCBhbmQgcmVhZC1sb2NrZWQgc28tPmN1cnJQb3MuYnVmOyB0aGUgYnVmZmVy J3Mgc3RhdGUKLSAqIGlzIG5vdCBjaGFuZ2VkIGhlcmUuICBBbHNvLCBjdXJyUG9zLm1vcmVMZWZ0 IGFuZCBtb3JlUmlnaHQgbXVzdCBiZSB2YWxpZDsKLSAqIHRoZXkgYXJlIHVwZGF0ZWQgYXMgYXBw cm9wcmlhdGUuICBBbGwgb3RoZXIgZmllbGRzIG9mIHNvLT5jdXJyUG9zIGFyZQorICogQ2FsbGVy IG11c3QgaGF2ZSBwaW5uZWQgYW5kIHJlYWQtbG9ja2VkIG5ld2JhdGNoLmJ1ZjsgdGhlIGJ1ZmZl cidzIHN0YXRlIGlzCisgKiBub3QgY2hhbmdlZCBoZXJlLiAgQWxzbywgbmV3YmF0Y2gncyBtb3Jl TGVmdCBhbmQgbW9yZVJpZ2h0IG11c3QgYmUgdmFsaWQ7CisgKiB0aGV5IGFyZSB1cGRhdGVkIGFz IGFwcHJvcHJpYXRlLiAgQWxsIG90aGVyIGZpZWxkcyBvZiBuZXdiYXRjaCBhcmUKICAqIGluaXRp YWxpemVkIGZyb20gc2NyYXRjaCBoZXJlLgogICoKICAqIFdlIHNjYW4gdGhlIGN1cnJlbnQgcGFn ZSBzdGFydGluZyBhdCBvZmZudW0gYW5kIG1vdmluZyBpbiB0aGUgaW5kaWNhdGVkCi0gKiBkaXJl Y3Rpb24uICBBbGwgaXRlbXMgbWF0Y2hpbmcgdGhlIHNjYW4ga2V5cyBhcmUgbG9hZGVkIGludG8g Y3VyclBvcy5pdGVtcy4KKyAqIGRpcmVjdGlvbi4gIEFsbCBpdGVtcyBtYXRjaGluZyB0aGUgc2Nh biBrZXlzIGFyZSBzYXZlZCBpbiBuZXdiYXRjaC5pdGVtcy4KICAqIG1vcmVMZWZ0IG9yIG1vcmVS aWdodCAoYXMgYXBwcm9wcmlhdGUpIGlzIGNsZWFyZWQgaWYgX2J0X2NoZWNra2V5cyByZXBvcnRz CiAgKiB0aGF0IHRoZXJlIGNhbiBiZSBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3Vy cmVudCBzY2FuIGRpcmVjdGlvbgogICogKGNvdWxkIGp1c3QgYmUgZm9yIHRoZSBjdXJyZW50IHBy aW1pdGl2ZSBpbmRleCBzY2FuIHdoZW4gc2NhbiBoYXMgYXJyYXlzKS4KQEAgLTEzMSw4ICsxMzEs OCBAQCBzdGF0aWMgYm9vbCBfYnRfdmVyaWZ5X2tleXNfd2l0aF9hcnJheWtleXMoSW5kZXhTY2Fu RGVzYyBzY2FuKTsKICAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgbWF0Y2hpbmcgaXRlbXMgZm91bmQg b24gdGhlIHBhZ2UsIGZhbHNlIGlmIG5vbmUuCiAgKi8KIGJvb2wKLV9idF9yZWFkcGFnZShJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAot CQkJIGJvb2wgZmlyc3RwYWdlKQorX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0 Y2hJbmRleFNjYW4gbmV3YmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJIE9mZnNldE51bWJl ciBvZmZudW0sIGJvb2wgZmlyc3RwYWdlKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4 UmVsYXRpb247CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVl OwpAQCAtMTQ0LDIzICsxNDQsMjAgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJYm9vbAkJYXJyYXlLZXlz LAogCQkJCWlnbm9yZV9raWxsZWRfdHVwbGVzID0gc2Nhbi0+aWdub3JlX2tpbGxlZF90dXBsZXM7 CiAJaW50CQkJaXRlbUluZGV4LAorCQkJCXR1cGxlT2Zmc2V0ID0gMCwKIAkJCQlpbmRuYXR0czsK IAogCS8qIHNhdmUgdGhlIHBhZ2UvYnVmZmVyIGJsb2NrIG51bWJlciwgYWxvbmcgd2l0aCBpdHMg c2libGluZyBsaW5rcyAqLwotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7 CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UobmV3YmF0Y2gtPmJ1Zik7CiAJb3BhcXVlID0gQlRQYWdl R2V0T3BhcXVlKHBhZ2UpOwotCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tO dW1iZXIoc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IG9wYXF1ZS0+ YnRwb19wcmV2OwotCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5idHBvX25leHQ7Ci0J LyogZGVsYXkgc2V0dGluZyBzby0+Y3VyclBvcy5sc24gdW50aWwgX2J0X2Ryb3BfbG9ja19hbmRf bWF5YmVfcGluICovCi0JcHN0YXRlLmRpciA9IHNvLT5jdXJyUG9zLmRpciA9IGRpcjsKLQlzby0+ Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgPSAwOworCXBzdGF0ZS5jdXJycGFnZSA9IG5ld2JhdGNo LT5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKG5ld2JhdGNoLT5idWYpOworCW5ld2Jh dGNoLT5wcmV2UGFnZSA9IG9wYXF1ZS0+YnRwb19wcmV2OworCW5ld2JhdGNoLT5uZXh0UGFnZSA9 IG9wYXF1ZS0+YnRwb19uZXh0OworCXBzdGF0ZS5kaXIgPSBuZXdiYXRjaC0+ZGlyID0gZGlyOwog CiAJLyogZWl0aGVyIG1vcmVSaWdodCBvciBtb3JlTGVmdCBzaG91bGQgYmUgc2V0IG5vdyAobWF5 IGJlIHVuc2V0IGxhdGVyKSAqLwotCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikg PyBzby0+Y3VyclBvcy5tb3JlUmlnaHQgOgotCQkgICBzby0+Y3VyclBvcy5tb3JlTGVmdCk7CisJ QXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/IG5ld2JhdGNoLT5tb3JlUmlnaHQg OiBuZXdiYXRjaC0+bW9yZUxlZnQpOwogCUFzc2VydCghUF9JR05PUkUob3BhcXVlKSk7Ci0JQXNz ZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7CiAJQXNzZXJ0KCFzby0+bmVlZFBy aW1TY2FuKTsKIAogCS8qIGluaXRpYWxpemUgbG9jYWwgdmFyaWFibGVzICovCkBAIC0xODgsMTQg KzE4NSwxMiBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAl7CiAJCS8qIGFsbG93IG5leHQvcHJldiBwYWdl IHRvIGJlIHJlYWQgYnkgb3RoZXIgd29ya2VyIHdpdGhvdXQgZGVsYXkgKi8KIAkJaWYgKFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNv LT5jdXJyUG9zLm5leHRQYWdlLAotCQkJCQkJCQkgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJ X2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gtPm5leHRQYWdlLCBuZXdiYXRjaC0+ Y3VyclBhZ2UpOwogCQllbHNlCi0JCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBzby0+Y3Vy clBvcy5wcmV2UGFnZSwKLQkJCQkJCQkJIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCV9idF9w YXJhbGxlbF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoLT5wcmV2UGFnZSwgbmV3YmF0Y2gtPmN1cnJQ YWdlKTsKIAl9CiAKLQlQcmVkaWNhdGVMb2NrUGFnZShyZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdl LCBzY2FuLT54c19zbmFwc2hvdCk7CisJUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBwc3RhdGUuY3Vy cnBhZ2UsIHNjYW4tPnhzX3NuYXBzaG90KTsKIAogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGRpcikpCiAJewpAQCAtMjEyLDExICsyMDcsMTAgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJCSFf YnRfc2NhbmJlaGluZF9jaGVja2tleXMoc2NhbiwgZGlyLCBwc3RhdGUuZmluYWx0dXApKQogCQkJ CXsKIAkJCQkJLyogU2NoZWR1bGUgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiBhZnRlciBh bGwgKi8KLQkJCQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gZmFsc2U7CisJCQkJCW5ld2JhdGNo LT5tb3JlUmlnaHQgPSBmYWxzZTsKIAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7CiAJCQkJ CWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQotCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3Nj aGVkdWxlKHNjYW4sCi0JCQkJCQkJCQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJ CQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIG5ld2JhdGNoLT5jdXJyUGFn ZSk7CiAJCQkJCXJldHVybiBmYWxzZTsKIAkJCQl9CiAJCQl9CkBAIC0yODAsMjYgKzI3NCwyNiBA QCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zm c2V0TnVtYmVyIG9mZm51bSwKIAkJCQlpZiAoIUJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpCiAJ CQkJewogCQkJCQkvKiBSZW1lbWJlciBpdCAqLwotCQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1J bmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQkJX2J0X3NhdmVpdGVtKG5ld2JhdGNoLCBpdGVtSW5k ZXgsIG9mZm51bSwgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQkJaXRlbUluZGV4Kys7CiAJCQkJ fQogCQkJCWVsc2UKIAkJCQl7Ci0JCQkJCWludAkJCXR1cGxlT2Zmc2V0OworCQkJCQlpbnQJCQli YXNlT2Zmc2V0OwogCiAJCQkJCS8qIFNldCB1cCBwb3N0aW5nIGxpc3Qgc3RhdGUgKGFuZCByZW1l bWJlciBmaXJzdCBUSUQpICovCi0JCQkJCXR1cGxlT2Zmc2V0ID0KLQkJCQkJCV9idF9zZXR1cHBv c3RpbmdpdGVtcyhzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCWJhc2VPZmZzZXQgPQorCQkJ CQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJ CQkJCQkJCQkJICBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgMCksCi0JCQkJCQkJCQkJCSAg aXR1cCk7CisJCQkJCQkJCQkJCSAgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQkJaXRlbUluZGV4 Kys7CiAKIAkJCQkJLyogUmVtZW1iZXIgYWxsIGxhdGVyIFRJRHMgKG11c3QgYmUgYXQgbGVhc3Qg b25lKSAqLwogCQkJCQlmb3IgKGludCBpID0gMTsgaSA8IEJUcmVlVHVwbGVHZXROUG9zdGluZyhp dHVwKTsgaSsrKQogCQkJCQl7Ci0JCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKHNvLCBpdGVtSW5k ZXgsIG9mZm51bSwKKwkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRl eCwgb2ZmbnVtLAogCQkJCQkJCQkJCQlCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgaSksCi0J CQkJCQkJCQkJCXR1cGxlT2Zmc2V0KTsKKwkJCQkJCQkJCQkJYmFzZU9mZnNldCk7CiAJCQkJCQlp dGVtSW5kZXgrKzsKIAkJCQkJfQogCQkJCX0KQEAgLTMzOSwxMiArMzMzLDExIEBAIF9idF9yZWFk cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIg b2ZmbnVtLAogCQl9CiAKIAkJaWYgKCFwc3RhdGUuY29udGludWVzY2FuKQotCQkJc28tPmN1cnJQ b3MubW9yZVJpZ2h0ID0gZmFsc2U7CisJCQluZXdiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7CiAK IAkJQXNzZXJ0KGl0ZW1JbmRleCA8PSBNYXhUSURzUGVyQlRyZWVQYWdlKTsKLQkJc28tPmN1cnJQ b3MuZmlyc3RJdGVtID0gMDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAx OwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAwOworCQluZXdiYXRjaC0+Zmlyc3RJdGVtID0g MDsKKwkJbmV3YmF0Y2gtPmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKIAl9CiAJZWxzZQogCXsK QEAgLTM2MSwxMSArMzU0LDEwIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCQkhX2J0X3NjYW5iZWhp bmRfY2hlY2trZXlzKHNjYW4sIGRpciwgcHN0YXRlLmZpbmFsdHVwKSkKIAkJCQl7CiAJCQkJCS8q IFNjaGVkdWxlIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gYWZ0ZXIgYWxsICovCi0JCQkJ CXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7CisJCQkJCW5ld2JhdGNoLT5tb3JlTGVmdCA9 IGZhbHNlOwogCQkJCQlzby0+bmVlZFByaW1TY2FuID0gdHJ1ZTsKIAkJCQkJaWYgKHNjYW4tPnBh cmFsbGVsX3NjYW4pCi0JCQkJCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwK LQkJCQkJCQkJCQkJCQkgICBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQkJCQlfYnRfcGFyYWxs ZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwgbmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJCQkJcmV0 dXJuIGZhbHNlOwogCQkJCX0KIAkJCX0KQEAgLTQ2NiwyNyArNDU4LDI3IEBAIF9idF9yZWFkcGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2Zm bnVtLAogCQkJCXsKIAkJCQkJLyogUmVtZW1iZXIgaXQgKi8KIAkJCQkJaXRlbUluZGV4LS07Ci0J CQkJCV9idF9zYXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCQlfYnRf c2F2ZWl0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwLCAmdHVwbGVPZmZzZXQp OwogCQkJCX0KIAkJCQllbHNlCiAJCQkJewogCQkJCQl1aW50MTYJCW5pdGVtcyA9IEJUcmVlVHVw bGVHZXROUG9zdGluZyhpdHVwKTsKLQkJCQkJaW50CQkJdHVwbGVPZmZzZXQ7CisJCQkJCWludAkJ CWJhc2VPZmZzZXQ7CiAKIAkJCQkJLyogU2V0IHVwIHBvc3RpbmcgbGlzdCBzdGF0ZSAoYW5kIHJl bWVtYmVyIGxhc3QgVElEKSAqLwogCQkJCQlpdGVtSW5kZXgtLTsKLQkJCQkJdHVwbGVPZmZzZXQg PQotCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJ CQkJYmFzZU9mZnNldCA9CisJCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMobmV3YmF0Y2gsIGl0 ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQkgIEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVw LCBuaXRlbXMgLSAxKSwKLQkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJCQkJCQkJICBpdHVwLCAm dHVwbGVPZmZzZXQpOwogCiAJCQkJCS8qIFJlbWVtYmVyIGFsbCBwcmlvciBUSURzIChtdXN0IGJl IGF0IGxlYXN0IG9uZSkgKi8KIAkJCQkJZm9yIChpbnQgaSA9IG5pdGVtcyAtIDI7IGkgPj0gMDsg aS0tKQogCQkJCQl7CiAJCQkJCQlpdGVtSW5kZXgtLTsKLQkJCQkJCV9idF9zYXZlcG9zdGluZ2l0 ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShuZXdi YXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCUJUcmVlVHVwbGVHZXRQb3N0aW5n TihpdHVwLCBpKSwKLQkJCQkJCQkJCQkJdHVwbGVPZmZzZXQpOworCQkJCQkJCQkJCQliYXNlT2Zm c2V0KTsKIAkJCQkJfQogCQkJCX0KIAkJCX0KQEAgLTUwMiwxMiArNDk0LDExIEBAIF9idF9yZWFk cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIg b2ZmbnVtLAogCQkgKiBiZSBmb3VuZCB0aGVyZQogCQkgKi8KIAkJaWYgKCFwc3RhdGUuY29udGlu dWVzY2FuKQotCQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSBmYWxzZTsKKwkJCW5ld2JhdGNoLT5t b3JlTGVmdCA9IGZhbHNlOwogCiAJCUFzc2VydChpdGVtSW5kZXggPj0gMCk7Ci0JCXNvLT5jdXJy UG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBNYXhU SURzUGVyQlRyZWVQYWdlIC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4VElEc1Bl ckJUcmVlUGFnZSAtIDE7CisJCW5ld2JhdGNoLT5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7CisJCW5l d2JhdGNoLT5sYXN0SXRlbSA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAxOwogCX0KIAogCS8qCkBA IC01MjQsNyArNTE1LDcgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJICovCiAJQXNzZXJ0KCFwc3RhdGUu Zm9yY2Vub25yZXF1aXJlZCk7CiAKLQlyZXR1cm4gKHNvLT5jdXJyUG9zLmZpcnN0SXRlbSA8PSBz by0+Y3VyclBvcy5sYXN0SXRlbSk7CisJcmV0dXJuIChuZXdiYXRjaC0+Zmlyc3RJdGVtIDw9IG5l d2JhdGNoLT5sYXN0SXRlbSk7CiB9CiAKIC8qCkBAIC0xMDI3LDkwICsxMDE4LDk2IEBAIF9idF9v cHBvZGlyX2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAog CXJldHVybiB0cnVlOwogfQogCi0vKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBv cy5pdGVtc1tpdGVtSW5kZXhdICovCisvKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRj aC5pdGVtc1tpdGVtSW5kZXhdICovCiBzdGF0aWMgdm9pZAotX2J0X3NhdmVpdGVtKEJUU2Nhbk9w YXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1 cGxlIGl0dXApCitfYnRfc2F2ZWl0ZW0oQmF0Y2hJbmRleFNjYW4gbmV3YmF0Y2gsIGludCBpdGVt SW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1 cGxlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0 ZW1zW2l0ZW1JbmRleF07Ci0KIAlBc3NlcnQoIUJUcmVlVHVwbGVJc1Bpdm90KGl0dXApICYmICFC VHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKTsKIAotCWN1cnJJdGVtLT5oZWFwVGlkID0gaXR1cC0+ dF90aWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOwotCWlmIChzby0+Y3VyclR1 cGxlcykKKwkvKiBjb3B5IHRoZSBwb3B1bGF0ZWQgcGFydCBvZiB0aGUgaXRlbXMgYXJyYXkgKi8K KwluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5oZWFwVGlkID0gaXR1cC0+dF90aWQ7CisJbmV3 YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaW5kZXhPZmZzZXQgPSBvZmZudW07CisJbmV3YmF0Y2gt Pml0ZW1zW2l0ZW1JbmRleF0uYWxsVmlzaWJsZSA9IGZhbHNlOworCisJaWYgKG5ld2JhdGNoLT5j dXJyVHVwbGVzKQogCXsKIAkJU2l6ZQkJaXR1cHN6ID0gSW5kZXhUdXBsZVNpemUoaXR1cCk7CiAK LQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0Owot CQltZW1jcHkoc28tPmN1cnJUdXBsZXMgKyBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQsIGl0 dXAsIGl0dXBzeik7Ci0JCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCArPSBNQVhBTElHTihp dHVwc3opOworCQluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50dXBsZU9mZnNldCA9ICp0dXBs ZU9mZnNldDsKKwkJbWVtY3B5KG5ld2JhdGNoLT5jdXJyVHVwbGVzICsgKnR1cGxlT2Zmc2V0LCBp dHVwLCBpdHVwc3opOworCQkqdHVwbGVPZmZzZXQgKz0gTUFYQUxJR04oaXR1cHN6KTsKIAl9CiB9 CiAKIC8qCiAgKiBTZXR1cCBzdGF0ZSB0byBzYXZlIFRJRHMvaXRlbXMgZnJvbSBhIHNpbmdsZSBw b3N0aW5nIGxpc3QgdHVwbGUuCiAgKgotICogU2F2ZXMgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5j dXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0IGlzCi0gKiByZXR1cm5lZCB0byBz Y2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQgVElEcyBmb3IgcG9zdGluZyBsaXN0IHNo b3VsZAotICogYmUgc2F2ZWQgYnkgY2FsbGluZyBfYnRfc2F2ZXBvc3RpbmdpdGVtKCkuCisgKiBT YXZlcyBhbiBpbmRleCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSBmb3IgVElE IHRoYXQgaXMgcmV0dXJuZWQKKyAqIHRvIHNjYW4gZmlyc3QuICBTZWNvbmQgb3Igc3Vic2VxdWVu dCBUSURzIGZvciBwb3N0aW5nIGxpc3Qgc2hvdWxkIGJlIHNhdmVkCisgKiBieSBjYWxsaW5nIF9i dF9zYXZlcG9zdGluZ2l0ZW0oKS4KICAqCi0gKiBSZXR1cm5zIGFuIG9mZnNldCBpbnRvIHR1cGxl IHN0b3JhZ2Ugc3BhY2UgdGhhdCBtYWluIHR1cGxlIGlzIHN0b3JlZCBhdCBpZgotICogbmVlZGVk LgorICogUmV0dXJucyBiYXNlT2Zmc2V0LCBhbiBvZmZzZXQgaW50byB0dXBsZSBzdG9yYWdlIHNw YWNlIHRoYXQgbWFpbiB0dXBsZSBpcworICogc3RvcmVkIGF0IGlmIG5lZWRlZC4KICAqLwogc3Rh dGljIGludAotX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1J bmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJICBjb25zdCBJdGVtUG9pbnRlckRhdGEg KmhlYXBUaWQsIEluZGV4VHVwbGUgaXR1cCkKK19idF9zZXR1cHBvc3RpbmdpdGVtcyhCYXRjaElu ZGV4U2NhbiBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwKKwkJCQkJICBPZmZzZXROdW1iZXIgb2Zm bnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsCisJCQkJCSAgSW5kZXhUdXBsZSBp dHVwLCBpbnQgKnR1cGxlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNv LT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKml0ZW0gPSAm bmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKIAlBc3NlcnQoQlRyZWVUdXBsZUlzUG9zdGlu ZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOwotCWN1cnJJdGVtLT5p bmRleE9mZnNldCA9IG9mZm51bTsKLQlpZiAoc28tPmN1cnJUdXBsZXMpCisJLyogY29weSB0aGUg cG9wdWxhdGVkIHBhcnQgb2YgdGhlIGl0ZW1zIGFycmF5ICovCisJaXRlbS0+aGVhcFRpZCA9ICpo ZWFwVGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCWl0ZW0tPmFsbFZpc2libGUg PSBmYWxzZTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKIAl7CiAJCS8qIFNhdmUgYmFz ZSBJbmRleFR1cGxlICh0cnVuY2F0ZSBwb3N0aW5nIGxpc3QpICovCiAJCUluZGV4VHVwbGUJYmFz ZTsKIAkJU2l6ZQkJaXR1cHN6ID0gQlRyZWVUdXBsZUdldFBvc3RpbmdPZmZzZXQoaXR1cCk7CiAK IAkJaXR1cHN6ID0gTUFYQUxJR04oaXR1cHN6KTsKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0g c28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0OwotCQliYXNlID0gKEluZGV4VHVwbGUpIChzby0+ Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCk7CisJCWl0ZW0tPnR1cGxl T2Zmc2V0ID0gKnR1cGxlT2Zmc2V0OworCQliYXNlID0gKEluZGV4VHVwbGUpIChuZXdiYXRjaC0+ Y3VyclR1cGxlcyArICp0dXBsZU9mZnNldCk7CiAJCW1lbWNweShiYXNlLCBpdHVwLCBpdHVwc3op OwogCQkvKiBEZWZlbnNpdmVseSByZWR1Y2Ugd29yayBhcmVhIGluZGV4IHR1cGxlIGhlYWRlciBz aXplICovCiAJCWJhc2UtPnRfaW5mbyAmPSB+SU5ERVhfU0laRV9NQVNLOwogCQliYXNlLT50X2lu Zm8gfD0gaXR1cHN6OwotCQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgKz0gaXR1cHN6Owor CQkqdHVwbGVPZmZzZXQgKz0gaXR1cHN6OwogCi0JCXJldHVybiBjdXJySXRlbS0+dHVwbGVPZmZz ZXQ7CisJCXJldHVybiBpdGVtLT50dXBsZU9mZnNldDsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAog LyoKLSAqIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRl eF0gZm9yIGN1cnJlbnQgcG9zdGluZworICogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gbmV3YmF0 Y2guaXRlbXNbaXRlbUluZGV4XSBmb3IgY3VycmVudCBwb3N0aW5nCiAgKiB0dXBsZS4KICAqCiAg KiBBc3N1bWVzIHRoYXQgX2J0X3NldHVwcG9zdGluZ2l0ZW1zKCkgaGFzIGFscmVhZHkgYmVlbiBj YWxsZWQgZm9yIGN1cnJlbnQKLSAqIHBvc3RpbmcgbGlzdCB0dXBsZS4gIENhbGxlciBwYXNzZXMg aXRzIHJldHVybiB2YWx1ZSBhcyB0dXBsZU9mZnNldC4KKyAqIHBvc3RpbmcgbGlzdCB0dXBsZS4g IENhbGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyBiYXNlT2Zmc2V0LgogICovCiBzdGF0 aWMgaW5saW5lIHZvaWQKLV9idF9zYXZlcG9zdGluZ2l0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQg aXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQlJdGVtUG9pbnRlciBoZWFwVGlk LCBpbnQgdHVwbGVPZmZzZXQpCitfYnRfc2F2ZXBvc3RpbmdpdGVtKEJhdGNoSW5kZXhTY2FuIG5l d2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQlJdGVtUG9p bnRlciBoZWFwVGlkLCBpbnQgYmFzZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRl bSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICpp dGVtID0gJm5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQg PSAqaGVhcFRpZDsKLQljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CisJaXRlbS0+aGVh cFRpZCA9ICpoZWFwVGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCWl0ZW0tPmFs bFZpc2libGUgPSBmYWxzZTsKIAogCS8qCiAJICogSGF2ZSBpbmRleC1vbmx5IHNjYW5zIHJldHVy biB0aGUgc2FtZSBiYXNlIEluZGV4VHVwbGUgZm9yIGV2ZXJ5IFRJRAogCSAqIHRoYXQgb3JpZ2lu YXRlcyBmcm9tIHRoZSBzYW1lIHBvc3RpbmcgbGlzdAogCSAqLwotCWlmIChzby0+Y3VyclR1cGxl cykKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gdHVwbGVPZmZzZXQ7CisJaWYgKG5ld2JhdGNo LT5jdXJyVHVwbGVzKQorCQlpdGVtLT50dXBsZU9mZnNldCA9IGJhc2VPZmZzZXQ7CiB9CiAKICNk ZWZpbmUgTE9PS19BSEVBRF9SRVFVSVJFRF9SRUNIRUNLUyAJMwpAQCAtMjgyMiwxMyArMjgxOSwx MyBAQCBuZXdfcHJpbV9zY2FuOgogCSAqIE5vdGU6IFdlIG1ha2UgYSBzb2Z0IGFzc3VtcHRpb24g dGhhdCB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiB3aWxsCiAJICogYWxzbyBiZSB1c2VkIHdp dGhpbiBfYnRfbmV4dCwgd2hlbiBpdCBpcyBhc2tlZCB0byBzdGVwIG9mZiB0aGlzIHBhZ2UuCiAJ ICogSXQgaXMgdXAgdG8gX2J0X25leHQgdG8gY2FuY2VsIHRoaXMgc2NoZWR1bGVkIHByaW1pdGl2 ZSBpbmRleCBzY2FuCi0JICogd2hlbmV2ZXIgaXQgc3RlcHMgdG8gYSBwYWdlIGluIHRoZSBkaXJl Y3Rpb24gb3Bwb3NpdGUgY3VyclBvcy5kaXIuCisJICogd2hlbmV2ZXIgaXQgc3RlcHMgdG8gYSBw YWdlIGluIHRoZSBkaXJlY3Rpb24gb3Bwb3NpdGUgcHN0YXRlLT5kaXIuCiAJICovCiAJcHN0YXRl LT5jb250aW51ZXNjYW4gPSBmYWxzZTsJLyogVGVsbCBfYnRfcmVhZHBhZ2Ugd2UncmUgZG9uZS4u LiAqLwogCXNvLT5uZWVkUHJpbVNjYW4gPSB0cnVlOwkvKiAuLi5idXQgY2FsbCBfYnRfZmlyc3Qg YWdhaW4gKi8KIAogCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQotCQlfYnRfcGFyYWxsZWxfcHJp bXNjYW5fc2NoZWR1bGUoc2Nhbiwgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQlfYnRfcGFyYWxs ZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwgcHN0YXRlLT5jdXJycGFnZSk7CiAKIAkvKiBDYWxs ZXIncyB0dXBsZSBkb2Vzbid0IG1hdGNoIHRoZSBuZXcgcXVhbCAqLwogCXJldHVybiBmYWxzZTsK QEAgLTI5MTMsMTQgKzI5MTAsNiBAQCBfYnRfYWR2YW5jZV9hcnJheV9rZXlzX2luY3JlbWVudChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCSAqIFJlc3RvcmUgdGhlIGFy cmF5IGtleXMgdG8gdGhlIHN0YXRlIHRoZXkgd2VyZSBpbiBpbW1lZGlhdGVseSBiZWZvcmUgd2UK IAkgKiB3ZXJlIGNhbGxlZC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcnJheXMgb25seSBldmVy IHJhdGNoZXQgaW4gdGhlCiAJICogY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KLQkgKgotCSAqIFdp dGhvdXQgdGhpcywgc2NhbnMgY291bGQgb3Zlcmxvb2sgbWF0Y2hpbmcgdHVwbGVzIHdoZW4gdGhl IHNjYW4KLQkgKiBkaXJlY3Rpb24gZ2V0cyByZXZlcnNlZCBqdXN0IGJlZm9yZSBidGdldHR1cGxl IHJ1bnMgb3V0IG9mIGl0ZW1zIHRvCi0JICogcmV0dXJuLCBidXQganVzdCBhZnRlciBfYnRfcmVh ZHBhZ2UgcHJlcGFyZXMgYWxsIHRoZSBpdGVtcyBmcm9tIHRoZQotCSAqIHNjYW4ncyBmaW5hbCBw YWdlIGluIHNvLT5jdXJyUG9zLiAgV2hlbiB3ZSdyZSBvbiB0aGUgZmluYWwgcGFnZSBpdCBpcwot CSAqIHR5cGljYWwgZm9yIHNvLT5jdXJyUG9zIHRvIGdldCBpbnZhbGlkYXRlZCBvbmNlIGJ0Z2V0 dHVwbGUgZmluYWxseQotCSAqIHJldHVybnMgZmFsc2UsIHdoaWNoJ2xsIGVmZmVjdGl2ZWx5IGlu dmFsaWRhdGUgdGhlIHNjYW4ncyBhcnJheSBrZXlzLgotCSAqIFRoYXQgaGFzbid0IGhhcHBlbmVk IHlldCwgdGhvdWdoIC0tIGFuZCBpbiBnZW5lcmFsIGl0IG1heSBuZXZlciBoYXBwZW4uCiAJICov CiAJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2NhbiwgLWRpcik7CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHJlZS5jCmluZGV4IDNkZWMxZWU2NS4uNDg3N2NjYjQ4IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0cmVlLmMKQEAgLTE1OSwxMSArMTU5LDEyIEBAIGJ0aGFuZGxlcihQR19GVU5DVElPTl9B UkdTKQogCQkuYW1hZGp1c3RtZW1iZXJzID0gYnRhZGp1c3RtZW1iZXJzLAogCQkuYW1iZWdpbnNj YW4gPSBidGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gYnRyZXNjYW4sCi0JCS5hbWdldHR1cGxl ID0gYnRnZXR0dXBsZSwKKwkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IGJ0 Z2V0YmF0Y2gsCisJCS5hbWZyZWViYXRjaCA9IGJ0ZnJlZWJhdGNoLAogCQkuYW1nZXRiaXRtYXAg PSBidGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJ0ZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9 IGJ0bWFya3BvcywKLQkJLmFtcmVzdHJwb3MgPSBidHJlc3RycG9zLAorCQkuYW1wb3NyZXNldCA9 IGJ0cG9zcmVzZXQsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gYnRlc3RpbWF0ZXBhcmFs bGVsc2NhbiwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IGJ0aW5pdHBhcmFsbGVsc2NhbiwKIAkJ LmFtcGFyYWxsZWxyZXNjYW4gPSBidHBhcmFsbGVscmVzY2FuLApAQCAtMjIyLDEzICsyMjMsMTMg QEAgYnRpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiB9 CiAKIC8qCi0gKglidGdldHR1cGxlKCkgLS0gR2V0IHRoZSBuZXh0IHR1cGxlIGluIHRoZSBzY2Fu LgorICoJYnRnZXRiYXRjaCgpIC0tIEdldCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBvZiB0dXBs ZXMgaW4gdGhlIHNjYW4KICAqLwotYm9vbAotYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKQorQmF0Y2hJbmRleFNjYW4KK2J0Z2V0YmF0Y2goSW5kZXhTY2Fu RGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBwcmlvcmJhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcikK IHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9v bAkJcmVzOworCUJhdGNoSW5kZXhTY2FuIGJhdGNoID0gcHJpb3JiYXRjaDsKIAogCUFzc2VydChz Y2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7CiAKQEAgLTI0MSw0NSArMjQyLDIwIEBAIGJ0Z2V0 dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJLyoKIAkJICog SWYgd2UndmUgYWxyZWFkeSBpbml0aWFsaXplZCB0aGlzIHNjYW4sIHdlIGNhbiBqdXN0IGFkdmFu Y2UgaXQgaW4KIAkJICogdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdlIGhhdmVuJ3Qg ZG9uZSBzbyB5ZXQsIHdlIGNhbGwKLQkJICogX2J0X2ZpcnN0KCkgdG8gZ2V0IHRoZSBmaXJzdCBp dGVtIGluIHRoZSBzY2FuLgorCQkgKiBfYnRfZmlyc3QoKSB0byBnZXQgdGhlIGZpcnN0IGJhdGNo IGluIHRoZSBzY2FuLgogCQkgKi8KLQkJaWYgKCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9z KSkKLQkJCXJlcyA9IF9idF9maXJzdChzY2FuLCBkaXIpOworCQlpZiAoYmF0Y2ggPT0gTlVMTCkK KwkJCWJhdGNoID0gX2J0X2ZpcnN0KHNjYW4sIGRpcik7CiAJCWVsc2UKLQkJewotCQkJLyoKLQkJ CSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2lsbCB0aGUgcHJldmlvdXNseS1mZXRjaGVk IHR1cGxlLgotCQkJICovCi0JCQlpZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSkKLQkJCXsKLQkJ CQkvKgotCQkJCSAqIFllcywgcmVtZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2UnbGwgZGVhbCB3aXRo IGFsbCBzdWNoCi0JCQkJICogdHVwbGVzIGF0IG9uY2UgcmlnaHQgYmVmb3JlIGxlYXZpbmcgdGhl IGluZGV4IHBhZ2UuKSAgVGhlCi0JCQkJICogdGVzdCBmb3IgbnVtS2lsbGVkIG92ZXJydW4gaXMg bm90IGp1c3QgcGFyYW5vaWE6IGlmIHRoZQotCQkJCSAqIGNhbGxlciByZXZlcnNlcyBkaXJlY3Rp b24gaW4gdGhlIGluZGV4c2NhbiB0aGVuIHRoZSBzYW1lCi0JCQkJICogaXRlbSBtaWdodCBnZXQg ZW50ZXJlZCBtdWx0aXBsZSB0aW1lcy4gSXQncyBub3Qgd29ydGgKLQkJCQkgKiB0cnlpbmcgdG8g b3B0aW1pemUgdGhhdCwgc28gd2UgZG9uJ3QgZGV0ZWN0IGl0LCBidXQgaW5zdGVhZAotCQkJCSAq IGp1c3QgZm9yZ2V0IGFueSBleGNlc3MgZW50cmllcy4KLQkJCQkgKi8KLQkJCQlpZiAoc28tPmtp bGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJCXNvLT5raWxsZWRJdGVtcyA9IHBhbGxvY19hcnJheShp bnQsIE1heFRJRHNQZXJCVHJlZVBhZ2UpOwotCQkJCWlmIChzby0+bnVtS2lsbGVkIDwgTWF4VElE c1BlckJUcmVlUGFnZSkKLQkJCQkJc28tPmtpbGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQrK10gPSBz by0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCQl9CisJCQliYXRjaCA9IF9idF9uZXh0KHNjYW4sIGRp ciwgYmF0Y2gpOwogCi0JCQkvKgotCQkJICogTm93IGNvbnRpbnVlIHRoZSBzY2FuLgotCQkJICov Ci0JCQlyZXMgPSBfYnRfbmV4dChzY2FuLCBkaXIpOwotCQl9Ci0KLQkJLyogSWYgd2UgaGF2ZSBh IHR1cGxlLCByZXR1cm4gaXQgLi4uICovCi0JCWlmIChyZXMpCisJCS8qIElmIHdlIGhhdmUgYSBi YXRjaCwgcmV0dXJuIGl0IC4uLiAqLworCQlpZiAoYmF0Y2gpCiAJCQlicmVhazsKIAkJLyogLi4u IG90aGVyd2lzZSBzZWUgaWYgd2UgbmVlZCBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuICov CiAJfSB3aGlsZSAoc28tPm51bUFycmF5S2V5cyAmJiBfYnRfc3RhcnRfcHJpbV9zY2FuKHNjYW4p KTsKIAotCXJldHVybiByZXM7CisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgpAQCAtMjg5LDYgKzI2 NSw3IEBAIGludDY0CiBidGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAq dGJtKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK KwlCYXRjaEluZGV4U2NhbiBiYXRjaDsKIAlpbnQ2NAkJbnRpZHMgPSAwOwogCUl0ZW1Qb2ludGVy IGhlYXBUaWQ7CiAKQEAgLTI5NywyOSArMjc0LDI5IEBAIGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRl c2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiAJLyogRWFjaCBsb29wIGl0ZXJhdGlvbiBwZXJmb3Jt cyBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuICovCiAJZG8KIAl7Ci0JCS8qIEZldGNoIHRo ZSBmaXJzdCBwYWdlICYgdHVwbGUgKi8KLQkJaWYgKF9idF9maXJzdChzY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbikpCisJCS8qIEZldGNoIHRoZSBmaXJzdCBiYXRjaCAqLworCQlpZiAoKGJhdGNo ID0gX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkpCiAJCXsKLQkJCS8qIFNh dmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBzY2FubmluZyAqLwotCQkJaGVhcFRpZCA9ICZzY2Fu LT54c19oZWFwdGlkOworCQkJaW50CQkJaXRlbUluZGV4ID0gMDsKKworCQkJLyogU2F2ZSBmaXJz dCB0dXBsZSdzIFRJRCAqLworCQkJaGVhcFRpZCA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5o ZWFwVGlkOwogCQkJdGJtX2FkZF90dXBsZXModGJtLCBoZWFwVGlkLCAxLCBmYWxzZSk7CiAJCQlu dGlkcysrOwogCiAJCQlmb3IgKDs7KQogCQkJewotCQkJCS8qCi0JCQkJICogQWR2YW5jZSB0byBu ZXh0IHR1cGxlIHdpdGhpbiBwYWdlLiAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUKLQkJCQkgKiBl YXN5IGNhc2UgaW4gX2J0X25leHQoKS4KLQkJCQkgKi8KLQkJCQlpZiAoKytzby0+Y3VyclBvcy5p dGVtSW5kZXggPiBzby0+Y3VyclBvcy5sYXN0SXRlbSkKKwkJCQkvKiBBZHZhbmNlIHRvIG5leHQg VElEIHdpdGhpbiBwYWdlLXNpemVkIGJhdGNoICovCisJCQkJaWYgKCsraXRlbUluZGV4ID4gYmF0 Y2gtPmxhc3RJdGVtKQogCQkJCXsKIAkJCQkJLyogbGV0IF9idF9uZXh0IGRvIHRoZSBoZWF2eSBs aWZ0aW5nICovCi0JCQkJCWlmICghX2J0X25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24p KQorCQkJCQlpdGVtSW5kZXggPSAwOworCQkJCQliYXRjaCA9IF9idF9uZXh0KHNjYW4sIEZvcndh cmRTY2FuRGlyZWN0aW9uLCBiYXRjaCk7CisJCQkJCWlmICghYmF0Y2gpCiAJCQkJCQlicmVhazsK IAkJCQl9CiAKLQkJCQkvKiBTYXZlIHR1cGxlIElELCBhbmQgY29udGludWUgc2Nhbm5pbmcgKi8K LQkJCQloZWFwVGlkID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF0u aGVhcFRpZDsKKwkJCQloZWFwVGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmhlYXBUaWQ7 CiAJCQkJdGJtX2FkZF90dXBsZXModGJtLCBoZWFwVGlkLCAxLCBmYWxzZSk7CiAJCQkJbnRpZHMr KzsKIAkJCX0KQEAgLTM0Nyw4ICszMjQsNiBAQCBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGlu dCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAogCS8qIGFsbG9jYXRlIHByaXZhdGUgd29ya3NwYWNl ICovCiAJc28gPSBwYWxsb2Nfb2JqZWN0KEJUU2Nhbk9wYXF1ZURhdGEpOwotCUJUU2NhblBvc0lu dmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPm1hcmtQb3Mp OwogCWlmIChzY2FuLT5udW1iZXJPZktleXMgPiAwKQogCQlzby0+a2V5RGF0YSA9IChTY2FuS2V5 KSBwYWxsb2Moc2Nhbi0+bnVtYmVyT2ZLZXlzICogc2l6ZW9mKFNjYW5LZXlEYXRhKSk7CiAJZWxz ZQpAQCAtMzYyLDE5ICszMzcsOSBAQCBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5 cywgaW50IG5vcmRlcmJ5cykKIAlzby0+b3JkZXJQcm9jcyA9IE5VTEw7CiAJc28tPmFycmF5Q29u dGV4dCA9IE5VTEw7CiAKLQlzby0+a2lsbGVkSXRlbXMgPSBOVUxMOwkJLyogdW50aWwgbmVlZGVk ICovCi0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KLQkvKgotCSAqIFdlIGRvbid0IGtub3cgeWV0IHdo ZXRoZXIgdGhlIHNjYW4gd2lsbCBiZSBpbmRleC1vbmx5LCBzbyB3ZSBkbyBub3QKLQkgKiBhbGxv Y2F0ZSB0aGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cyB1bnRpbCBidHJlc2Nhbi4gIEhvd2V2ZXIs IHdlIHNldCB1cAotCSAqIHNjYW4tPnhzX2l0dXBkZXNjIHdoZXRoZXIgd2UnbGwgbmVlZCBpdCBv ciBub3QsIHNpbmNlIHRoYXQncyBzbyBjaGVhcC4KLQkgKi8KLQlzby0+Y3VyclR1cGxlcyA9IHNv LT5tYXJrVHVwbGVzID0gTlVMTDsKLQotCXNjYW4tPnhzX2l0dXBkZXNjID0gUmVsYXRpb25HZXRE ZXNjcihyZWwpOwotCiAJc2Nhbi0+b3BhcXVlID0gc287CisJc2Nhbi0+eHNfaXR1cGRlc2MgPSBS ZWxhdGlvbkdldERlc2NyKHJlbCk7CisJc2Nhbi0+bWF4aXRlbXNiYXRjaCA9IE1heFRJRHNQZXJC VHJlZVBhZ2U7CiAKIAlyZXR1cm4gc2NhbjsKIH0KQEAgLTM4OCw3MiArMzUzLDM3IEBAIGJ0cmVz Y2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAog ewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAotCS8q IHdlIGFyZW4ndCBob2xkaW5nIGFueSByZWFkIGxvY2tzLCBidXQgZ290dGEgZHJvcCB0aGUgcGlu cyAqLwotCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9y ZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJ aWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJQlRTY2Fu UG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0JCUJUU2NhblBvc0ludmFsaWRhdGUoc28t PmN1cnJQb3MpOwotCX0KLQotCS8qCi0JICogV2UgcHJlZmVyIHRvIGVhZ2VybHkgZHJvcCBsZWFm IHBhZ2UgcGlucyBiZWZvcmUgYnRnZXR0dXBsZSByZXR1cm5zLgotCSAqIFRoaXMgYXZvaWRzIG1h a2luZyBWQUNVVU0gd2FpdCB0byBhY3F1aXJlIGEgY2xlYW51cCBsb2NrIG9uIHRoZSBwYWdlLgot CSAqCi0JICogV2UgY2Fubm90IHNhZmVseSBkcm9wIGxlYWYgcGFnZSBwaW5zIGR1cmluZyBpbmRl eC1vbmx5IHNjYW5zIGR1ZSB0byBhCi0JICogcmFjZSBjb25kaXRpb24gaW52b2x2aW5nIFZBQ1VV TSBzZXR0aW5nIHBhZ2VzIGFsbC12aXNpYmxlIGluIHRoZSBWTS4KLQkgKiBJdCdzIGFsc28gdW5z YWZlIGZvciBwbGFpbiBpbmRleCBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDIHNuYXBzaG90Lgot CSAqCi0JICogV2hlbiB3ZSBkcm9wIHBpbnMgZWFnZXJseSwgdGhlIG1lY2hhbmlzbSB0aGF0IG1h cmtzIHNvLT5raWxsZWRJdGVtc1tdCi0JICogaW5kZXggdHVwbGVzIExQX0RFQUQgaGFzIHRvIGRl YWwgd2l0aCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgcmFjZXMuCi0JICogVGhlIHNjaGVtZSB1 c2VkIHRvIGRldGVjdCB1bnNhZmUgVElEIHJlY3ljbGluZyB3b24ndCB3b3JrIHdoZW4gc2Nhbm5p bmcKLQkgKiB1bmxvZ2dlZCByZWxhdGlvbnMgKHNpbmNlIGl0IGludm9sdmVzIHNhdmluZyBhbiBh ZmZlY3RlZCBwYWdlJ3MgTFNOKS4KLQkgKiBPcHQgb3V0IG9mIGVhZ2VyIHBpbiBkcm9wcGluZyBk dXJpbmcgdW5sb2dnZWQgcmVsYXRpb24gc2NhbnMgZm9yIG5vdwotCSAqICh0aGlzIGlzIHByZWZl cmFibGUgdG8gb3B0aW5nIG91dCBvZiBraWxsX3ByaW9yX3R1cGxlIExQX0RFQUQgc2V0dGluZyku Ci0JICoKLQkgKiBBbHNvIG9wdCBvdXQgb2YgZHJvcHBpbmcgbGVhZiBwYWdlIHBpbnMgZWFnZXJs eSBkdXJpbmcgYml0bWFwIHNjYW5zLgotCSAqIFBpbnMgY2Fubm90IGJlIGhlbGQgZm9yIG1vcmUg dGhhbiBhbiBpbnN0YW50IGR1cmluZyBiaXRtYXAgc2NhbnMgZWl0aGVyCi0JICogd2F5LCBzbyB3 ZSBtaWdodCBhcyB3ZWxsIGF2b2lkIHdhc3RpbmcgY3ljbGVzIG9uIGFjcXVpcmluZyBwYWdlIExT TnMuCi0JICoKLQkgKiBTZWUgbmJ0cmVlL1JFQURNRSBzZWN0aW9uIG9uIG1ha2luZyBjb25jdXJy ZW50IFRJRCByZWN5Y2xpbmcgc2FmZS4KLQkgKgotCSAqIE5vdGU6IHNvLT5kcm9wUGluIHNob3Vs ZCBuZXZlciBjaGFuZ2UgYWNyb3NzIHJlc2NhbnMuCi0JICovCi0Jc28tPmRyb3BQaW4gPSAoIXNj YW4tPnhzX3dhbnRfaXR1cCAmJgotCQkJCSAgIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBz aG90KSAmJgotCQkJCSAgIFJlbGF0aW9uTmVlZHNXQUwoc2Nhbi0+aW5kZXhSZWxhdGlvbikgJiYK LQkJCQkgICBzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7Ci0KLQlzby0+bWFya0l0ZW1JbmRl eCA9IC0xOwotCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKLQlzby0+c2NhbkJlaGluZCA9IGZh bHNlOwotCXNvLT5vcHBvc2l0ZURpckNoZWNrID0gZmFsc2U7Ci0JQlRTY2FuUG9zVW5waW5JZlBp bm5lZChzby0+bWFya1Bvcyk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7Ci0K LQkvKgotCSAqIEFsbG9jYXRlIHR1cGxlIHdvcmtzcGFjZSBhcnJheXMsIGlmIG5lZWRlZCBmb3Ig YW4gaW5kZXgtb25seSBzY2FuIGFuZAotCSAqIG5vdCBhbHJlYWR5IGRvbmUgaW4gYSBwcmV2aW91 cyByZXNjYW4gY2FsbC4gIFRvIHNhdmUgb24gcGFsbG9jCi0JICogb3ZlcmhlYWQsIGJvdGggd29y a3NwYWNlcyBhcmUgYWxsb2NhdGVkIGFzIG9uZSBwYWxsb2MgYmxvY2s7IG9ubHkgdGhpcwotCSAq IGZ1bmN0aW9uIGFuZCBidGVuZHNjYW4ga25vdyB0aGF0LgotCSAqLwotCWlmIChzY2FuLT54c193 YW50X2l0dXAgJiYgc28tPmN1cnJUdXBsZXMgPT0gTlVMTCkKLQl7Ci0JCXNvLT5jdXJyVHVwbGVz ID0gKGNoYXIgKikgcGFsbG9jKEJMQ0tTWiAqIDIpOwotCQlzby0+bWFya1R1cGxlcyA9IHNvLT5j dXJyVHVwbGVzICsgQkxDS1NaOwotCX0KLQogCS8qCiAJICogUmVzZXQgdGhlIHNjYW4ga2V5cwog CSAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJCW1lbWNweShz Y2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2FuLT5udW1iZXJPZktleXMgKiBzaXplb2YoU2Nhbktl eURhdGEpKTsKKwlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CisJc28tPnNjYW5CZWhpbmQgPSBm YWxzZTsKKwlzby0+b3Bwb3NpdGVEaXJDaGVjayA9IGZhbHNlOwogCXNvLT5udW1iZXJPZktleXMg PSAwOwkJLyogdW50aWwgX2J0X3ByZXByb2Nlc3Nfa2V5cyBzZXRzIGl0ICovCiAJc28tPm51bUFy cmF5S2V5cyA9IDA7CQkvKiBkaXR0byAqLwogfQogCisvKgorICoJYnRmcmVlYmF0Y2goKSAtLSBG cmVlIGJhdGNoIHJlc291cmNlcywgaW5jbHVkaW5nIGl0cyBidWZmZXIgcGluCisgKi8KK3ZvaWQK K2J0ZnJlZWJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpCit7 CisJaWYgKGJhdGNoLT5udW1LaWxsZWQgPiAwKQorCQlfYnRfa2lsbGl0ZW1zKHNjYW4sIGJhdGNo KTsKKworCWlmICghc2Nhbi0+ZHJvcFBpbikKKwl7CisJCS8qIGluZGV4YW1fdXRpbF9iYXRjaF91 bmxvY2sgZGlkbid0IHVucGluIHBhZ2UgZWFybGllciwgZG8gaXQgbm93ICovCisJCVJlbGVhc2VC dWZmZXIoYmF0Y2gtPmJ1Zik7CisJCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCX0KKwor CWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGJhdGNoKTsKK30KKwogLyoKICAqCWJ0 ZW5kc2NhbigpIC0tIGNsb3NlIGRvd24gYSBzY2FuCiAgKi8KQEAgLTQ2MiwxMTYgKzM5Miw0OCBA QCBidGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChC VFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAotCS8qIHdlIGFyZW4ndCBob2xkaW5nIGFueSBy ZWFkIGxvY2tzLCBidXQgZ290dGEgZHJvcCB0aGUgcGlucyAqLwotCWlmIChCVFNjYW5Qb3NJc1Zh bGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwg ZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQot CQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3Vy clBvcyk7Ci0JfQotCi0Jc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQlCVFNjYW5Qb3NVbnBpbklm UGlubmVkKHNvLT5tYXJrUG9zKTsKLQotCS8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSBwb3NpdGlv bnMsIHRoZSBSQU0gaXMgYWJvdXQgdG8gYmUgZnJlZWQuICovCi0KIAkvKiBSZWxlYXNlIHN0b3Jh Z2UgKi8KIAlpZiAoc28tPmtleURhdGEgIT0gTlVMTCkKIAkJcGZyZWUoc28tPmtleURhdGEpOwog CS8qIHNvLT5hcnJheUtleXMgYW5kIHNvLT5vcmRlclByb2NzIGFyZSBpbiBhcnJheUNvbnRleHQg Ki8KIAlpZiAoc28tPmFycmF5Q29udGV4dCAhPSBOVUxMKQogCQlNZW1vcnlDb250ZXh0RGVsZXRl KHNvLT5hcnJheUNvbnRleHQpOwotCWlmIChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCkKLQkJcGZy ZWUoc28tPmtpbGxlZEl0ZW1zKTsKLQlpZiAoc28tPmN1cnJUdXBsZXMgIT0gTlVMTCkKLQkJcGZy ZWUoc28tPmN1cnJUdXBsZXMpOwotCS8qIHNvLT5tYXJrVHVwbGVzIHNob3VsZCBub3QgYmUgcGZy ZWUnZCwgc2VlIGJ0cmVzY2FuICovCiAJcGZyZWUoc28pOwogfQogCiAvKgotICoJYnRtYXJrcG9z KCkgLS0gc2F2ZSBjdXJyZW50IHNjYW4gcG9zaXRpb24KKyAqCWJ0cG9zcmVzZXQoKSAtLSBpbnZh bGlkYXRlIHNjYW4ncyBhcnJheSBrZXlzCiAgKi8KIHZvaWQKLWJ0bWFya3BvcyhJbmRleFNjYW5E ZXNjIHNjYW4pCitidHBvc3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4g bWFya2JhdGNoKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKIAotCS8qIFRoZXJlIG1heSBiZSBhbiBvbGQgbWFyayB3aXRoIGEgcGluIChidXQgbm8g bG9jaykuICovCi0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+bWFya1Bvcyk7CisJaWYgKCFz by0+bnVtQXJyYXlLZXlzKQorCQlyZXR1cm47CiAKIAkvKgotCSAqIEp1c3QgcmVjb3JkIHRoZSBj dXJyZW50IGl0ZW1JbmRleC4gIElmIHdlIGxhdGVyIHN0ZXAgdG8gbmV4dCBwYWdlCi0JICogYmVm b3JlIHJlbGVhc2luZyB0aGUgbWFya2VkIHBvc2l0aW9uLCBfYnRfc3RlcHBhZ2UgbWFrZXMgYSBm dWxsIGNvcHkgb2YKLQkgKiB0aGUgY3VyclBvcyBzdHJ1Y3QgaW4gbWFya1Bvcy4gIElmIChhcyBv ZnRlbiBoYXBwZW5zKSB0aGUgbWFyayBpcyBtb3ZlZAotCSAqIGJlZm9yZSB3ZSBsZWF2ZSB0aGUg cGFnZSwgd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGF0IHdvcmsuCisJICogQ29yZSBzeXN0ZW0gaXMg YWJvdXQgdG8gcmVzdG9yZSBhIG1hcmsgYXNzb2NpYXRlZCB3aXRoIGEgcHJldmlvdXNseQorCSAq IHJldHVybmVkIGJhdGNoLiAgUmVzZXQgdGhlIHNjYW4ncyBhcnJheXMgdG8gbWFrZSBhbGwgdGhp cyBzYWZlLgogCSAqLwotCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJc28t Pm1hcmtJdGVtSW5kZXggPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7CisJX2J0X3N0YXJ0X2FycmF5 X2tleXMoc2NhbiwgbWFya2JhdGNoLT5kaXIpOworCisJLyoKKwkgKiBDb3JlIHN5c3RlbSB3aWxs IGludmFsaWRhdGUgYWxsIG90aGVyIGJhdGNoZXMuCisJICoKKwkgKiBEZWFsIHdpdGggdGhpcyBi eSB1bnNldHRpbmcgbmVlZFByaW1TY2FuIGFzIHdlbGwgYXMgbW9yZVJpZ2h0IChvciBhcworCSAq IHdlbGwgYXMgbW9yZUxlZnQsIHdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzKS4gIFRoYXQgd2F5LCB0 aGUgbmV4dCB0aW1lCisJICogX2J0X25leHQgaXMgY2FsbGVkIGl0IHdpbGwgc3RlcCB0byB0aGUg cmlnaHQgKG9yIHRvIHRoZSBsZWZ0KS4gIEF0IHRoYXQKKwkgKiBwb2ludCBfYnRfcmVhZHBhZ2Ug d2lsbCByZXN0b3JlIHRoZSBzY2FuJ3MgYXJyYXlzIHRvIGVsZW1lbnRzIHRoYXQKKwkgKiBjb3Jy ZWN0bHkgdHJhY2sgdGhlIG5leHQgcGFnZSdzIHBvc2l0aW9uIGluIHRoZSBpbmRleCdzIGtleSBz cGFjZS4KKwkgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChtYXJrYmF0Y2gtPmRpcikp CisJCW1hcmtiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAllbHNlCi0JewotCQlCVFNjYW5Qb3NJ bnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKLQkJc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQl9Ci19 Ci0KLS8qCi0gKglidHJlc3RycG9zKCkgLS0gcmVzdG9yZSBzY2FuIHRvIGxhc3Qgc2F2ZWQgcG9z aXRpb24KLSAqLwotdm9pZAotYnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCi17Ci0JQlRT Y2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCi0JaWYgKHNvLT5t YXJrSXRlbUluZGV4ID49IDApCi0JewotCQkvKgotCQkgKiBUaGUgc2NhbiBoYXMgbmV2ZXIgbW92 ZWQgdG8gYSBuZXcgcGFnZSBzaW5jZSB0aGUgbGFzdCBtYXJrLiAgSnVzdAotCQkgKiByZXN0b3Jl IHRoZSBpdGVtSW5kZXguCi0JCSAqCi0JCSAqIE5COiBJbiB0aGlzIGNhc2Ugd2UgY2FuJ3QgY291 bnQgb24gYW55dGhpbmcgaW4gc28tPm1hcmtQb3MgdG8gYmUKLQkJICogYWNjdXJhdGUuCi0JCSAq LwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBzby0+bWFya0l0ZW1JbmRleDsKLQl9Ci0JZWxz ZQotCXsKLQkJLyoKLQkJICogVGhlIHNjYW4gbW92ZWQgdG8gYSBuZXcgcGFnZSBhZnRlciBsYXN0 IG1hcmsgb3IgcmVzdG9yZSwgYW5kIHdlIGFyZQotCQkgKiBub3cgcmVzdG9yaW5nIHRvIHRoZSBt YXJrZWQgcGFnZS4gIFdlIGFyZW4ndCBob2xkaW5nIGFueSByZWFkCi0JCSAqIGxvY2tzLCBidXQg aWYgd2UncmUgc3RpbGwgaG9sZGluZyB0aGUgcGluIGZvciB0aGUgY3VycmVudCBwb3NpdGlvbiwK LQkJICogd2UgbXVzdCBkcm9wIGl0LgotCQkgKi8KLQkJaWYgKEJUU2NhblBvc0lzVmFsaWQoc28t PmN1cnJQb3MpKQotCQl7Ci0JCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwg d2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJ X2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQ b3MpOwotCQl9Ci0KLQkJaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPm1hcmtQb3MpKQotCQl7Ci0J CQkvKiBidW1wIHBpbiBvbiBtYXJrIGJ1ZmZlciBmb3IgYXNzaWdubWVudCB0byBjdXJyZW50IGJ1 ZmZlciAqLwotCQkJaWYgKEJUU2NhblBvc0lzUGlubmVkKHNvLT5tYXJrUG9zKSkKLQkJCQlJbmNy QnVmZmVyUmVmQ291bnQoc28tPm1hcmtQb3MuYnVmKTsKLQkJCW1lbWNweSgmc28tPmN1cnJQb3Ms ICZzby0+bWFya1BvcywKLQkJCQkgICBvZmZzZXRvZihCVFNjYW5Qb3NEYXRhLCBpdGVtc1sxXSkg KwotCQkJCSAgIHNvLT5tYXJrUG9zLmxhc3RJdGVtICogc2l6ZW9mKEJUU2NhblBvc0l0ZW0pKTsK LQkJCWlmIChzby0+Y3VyclR1cGxlcykKLQkJCQltZW1jcHkoc28tPmN1cnJUdXBsZXMsIHNvLT5t YXJrVHVwbGVzLAotCQkJCQkgICBzby0+bWFya1Bvcy5uZXh0VHVwbGVPZmZzZXQpOwotCQkJLyog UmVzZXQgdGhlIHNjYW4ncyBhcnJheSBrZXlzIChzZWUgX2J0X3N0ZXBwYWdlIGZvciB3aHkpICov Ci0JCQlpZiAoc28tPm51bUFycmF5S2V5cykKLQkJCXsKLQkJCQlfYnRfc3RhcnRfYXJyYXlfa2V5 cyhzY2FuLCBzby0+Y3VyclBvcy5kaXIpOwotCQkJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsK LQkJCX0KLQkJfQotCQllbHNlCi0JCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsK LQl9CisJCW1hcmtiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCXNvLT5uZWVkUHJpbVNjYW4gPSBm YWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5vcHBvc2l0ZURpckNoZWNrID0g ZmFsc2U7CiB9CiAKIC8qCkBAIC04ODcsMTUgKzc0OSw2IEBAIF9idF9wYXJhbGxlbF9zZWl6ZShJ bmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyICpuZXh0X3NjYW5fcGFnZSwKIAkqbmV4dF9z Y2FuX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJKmxhc3RfY3Vycl9wYWdlID0gSW52YWxp ZEJsb2NrTnVtYmVyOwogCi0JLyoKLQkgKiBSZXNldCBzby0+Y3VyclBvcywgYW5kIGluaXRpYWxp emUgbW9yZUxlZnQvbW9yZVJpZ2h0IHN1Y2ggdGhhdCB0aGUgbmV4dAotCSAqIGNhbGwgdG8gX2J0 X3JlYWRuZXh0cGFnZSB0cmVhdHMgdGhpcyBiYWNrZW5kIHNpbWlsYXJseSB0byBhIHNlcmlhbAot CSAqIGJhY2tlbmQgdGhhdCBzdGVwcyBmcm9tICpsYXN0X2N1cnJfcGFnZSB0byAqbmV4dF9zY2Fu X3BhZ2UgKHVubGVzcyB0aGlzCi0JICogYmFja2VuZCdzIHNvLT5jdXJyUG9zIGlzIGluaXRpYWxp emVkIGJ5IF9idF9yZWFkZmlyc3RwYWdlIGJlZm9yZSB0aGVuKS4KLQkgKi8KLQlCVFNjYW5Qb3NJ bnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHNvLT5jdXJy UG9zLm1vcmVSaWdodCA9IHRydWU7Ci0KIAlpZiAoZmlyc3QpCiAJewogCQkvKgpAQCAtMTA0NSw4 ICs4OTgsNiBAQCBfYnRfcGFyYWxsZWxfZG9uZShJbmRleFNjYW5EZXNjIHNjYW4pCiAJQlRQYXJh bGxlbFNjYW5EZXNjIGJ0c2NhbjsKIAlib29sCQlzdGF0dXNfY2hhbmdlZCA9IGZhbHNlOwogCi0J QXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KIAkvKiBEbyBub3RoaW5n LCBmb3Igbm9uLXBhcmFsbGVsIHNjYW5zICovCiAJaWYgKHBhcmFsbGVsX3NjYW4gPT0gTlVMTCkK IAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFy Y2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKaW5kZXggMzJhZTBi ZGE4Li5lZTFjOTY4NjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 c2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwpAQCAt MjYsNTMgKzI2LDIzIEBACiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIAotc3RhdGljIGlubGlu ZSB2b2lkIF9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9w YXF1ZSBzbyk7CiBzdGF0aWMgQnVmZmVyIF9idF9tb3ZlcmlnaHQoUmVsYXRpb24gcmVsLCBSZWxh dGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQga2V5LAogCQkJCQkJCUJ1ZmZlciBidWYsIGJvb2wg Zm9ydXBkYXRlLCBCVFN0YWNrIHN0YWNrLAogCQkJCQkJCWludCBhY2Nlc3MpOwogc3RhdGljIE9m ZnNldE51bWJlciBfYnRfYmluc3JjaChSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXksIEJ1 ZmZlciBidWYpOwogc3RhdGljIGludAlfYnRfYmluc3JjaF9wb3N0aW5nKEJUU2Nhbkluc2VydCBr ZXksIFBhZ2UgcGFnZSwKIAkJCQkJCQkJT2Zmc2V0TnVtYmVyIG9mZm51bSk7Ci1zdGF0aWMgaW5s aW5lIHZvaWQgX2J0X3JldHVybml0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFNjYW5PcGFxdWUg c28pOwotc3RhdGljIGJvb2wgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpOwotc3RhdGljIGJvb2wgX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVz YyBzY2FuLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXIp Owotc3RhdGljIGJvb2wgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2Nr TnVtYmVyIGJsa25vLAotCQkJCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGly ZWN0aW9uIGRpciwKLQkJCQkJCQkgYm9vbCBzZWl6ZWQpOworc3RhdGljIEJhdGNoSW5kZXhTY2Fu IF9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gZmly c3RiYXRjaCwKKwkJCQkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRp cik7CitzdGF0aWMgQmF0Y2hJbmRleFNjYW4gX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAorCQkJCQkJCQkJICAgQmxvY2tOdW1iZXIgbGFzdGN1 cnJibGtubywKKwkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIGZpcnN0cGFnZSk7 CiBzdGF0aWMgQnVmZmVyIF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KFJlbGF0aW9uIHJlbCwg QmxvY2tOdW1iZXIgKmJsa25vLAogCQkJCQkJCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25v KTsKLXN0YXRpYyBib29sIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKTsKK3N0YXRpYyBCYXRjaEluZGV4U2NhbiBfYnRfZW5kcG9pbnQoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJICAgQmF0Y2hJbmRleFNjYW4g Zmlyc3RiYXRjaCk7CiAKIAotLyoKLSAqCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbigpCi0g KgotICogVW5sb2NrIHNvLT5jdXJyUG9zLmJ1Zi4gIElmIHNjYW4gaXMgc28tPmRyb3BQaW4sIGRy b3AgdGhlIHBpbiwgdG9vLgotICogRHJvcHBpbmcgdGhlIHBpbiBwcmV2ZW50cyBWQUNVVU0gZnJv bSBibG9ja2luZyBvbiBhY3F1aXJpbmcgYSBjbGVhbnVwIGxvY2suCi0gKi8KLXN0YXRpYyBpbmxp bmUgdm9pZAotX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9uIHJlbCwgQlRTY2Fu T3BhcXVlIHNvKQotewotCWlmICghc28tPmRyb3BQaW4pCi0JewotCQkvKiBKdXN0IGRyb3AgdGhl IGxvY2sgKG5vdCB0aGUgcGluKSAqLwotCQlfYnRfdW5sb2NrYnVmKHJlbCwgc28tPmN1cnJQb3Mu YnVmKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogRHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0 aGUgcGluLgotCSAqCi0JICogSGF2ZSB0byBzZXQgc28tPmN1cnJQb3MubHNuIHNvIHRoYXQgX2J0 X2tpbGxpdGVtcyBoYXMgYSB3YXkgdG8gZGV0ZWN0Ci0JICogd2hlbiBjb25jdXJyZW50IGhlYXAg VElEIHJlY3ljbGluZyBieSBWQUNVVU0gbWlnaHQgaGF2ZSB0YWtlbiBwbGFjZS4KLQkgKi8KLQlB c3NlcnQoUmVsYXRpb25OZWVkc1dBTChyZWwpKTsKLQlzby0+Y3VyclBvcy5sc24gPSBCdWZmZXJH ZXRMU05BdG9taWMoc28tPmN1cnJQb3MuYnVmKTsKLQlfYnRfcmVsYnVmKHJlbCwgc28tPmN1cnJQ b3MuYnVmKTsKLQlzby0+Y3VyclBvcy5idWYgPSBJbnZhbGlkQnVmZmVyOwotfQotCiAvKgogICoJ X2J0X3NlYXJjaCgpIC0tIFNlYXJjaCB0aGUgdHJlZSBmb3IgYSBwYXJ0aWN1bGFyIHNjYW5rZXks CiAgKgkJb3IgbW9yZSBwcmVjaXNlbHkgZm9yIHRoZSBmaXJzdCBsZWFmIHBhZ2UgaXQgY291bGQg YmUgb24uCkBAIC04NjEsMjAgKzgzMSwxNiBAQCBfYnRfY29tcGFyZShSZWxhdGlvbiByZWwsCiAg KgkJY29uZGl0aW9ucywgYW5kIHRoZSB0cmVlIG9yZGVyaW5nLiAgV2UgZmluZCB0aGUgZmlyc3Qg aXRlbSAob3IsCiAgKgkJaWYgYmFja3dhcmRzIHNjYW4sIHRoZSBsYXN0IGl0ZW0pIGluIHRoZSB0 cmVlIHRoYXQgc2F0aXNmaWVzIHRoZQogICoJCXF1YWxpZmljYXRpb25zIGluIHRoZSBzY2FuIGtl eS4gIE9uIHN1Y2Nlc3MgZXhpdCwgZGF0YSBhYm91dCB0aGUKLSAqCQltYXRjaGluZyB0dXBsZShz KSBvbiB0aGUgcGFnZSBoYXMgYmVlbiBsb2FkZWQgaW50byBzby0+Y3VyclBvcy4gIFdlJ2xsCi0g KgkJZHJvcCBhbGwgbG9ja3MgYW5kIGhvbGQgb250byBhIHBpbiBvbiBwYWdlJ3MgYnVmZmVyLCBl eGNlcHQgZHVyaW5nCi0gKgkJc28tPmRyb3BQaW4gc2NhbnMsIHdoZW4gd2UgZHJvcCBib3RoIHRo ZSBsb2NrIGFuZCB0aGUgcGluLgotICoJCV9idF9yZXR1cm5pdGVtIHNldHMgdGhlIG5leHQgaXRl bSB0byByZXR1cm4gdG8gc2NhbiBvbiBzdWNjZXNzIGV4aXQuCisgKgkJbWF0Y2hpbmcgdHVwbGUo cykgb24gdGhlIHBhZ2UgaGFzIGJlZW4gbG9hZGVkIGludG8gdGhlIHJldHVybmVkIGJhdGNoLgog ICoKLSAqIElmIHRoZXJlIGFyZSBubyBtYXRjaGluZyBpdGVtcyBpbiB0aGUgaW5kZXgsIHdlIHJl dHVybiBmYWxzZSwgd2l0aCBubwotICogcGlucyBvciBsb2NrcyBoZWxkLiAgc28tPmN1cnJQb3Mg d2lsbCByZW1haW4gaW52YWxpZC4KKyAqIElmIHRoZXJlIGFyZSBubyBtYXRjaGluZyBpdGVtcyBp biB0aGUgaW5kZXgsIHdlIGp1c3QgcmV0dXJuIE5VTEwuCiAgKgogICogTm90ZSB0aGF0IHNjYW4t PmtleURhdGFbXSwgYW5kIHRoZSBzby0+a2V5RGF0YVtdIHNjYW5rZXkgYnVpbHQgZnJvbSBpdCwK ICAqIGFyZSBib3RoIHNlYXJjaC10eXBlIHNjYW5rZXlzIChzZWUgbmJ0cmVlL1JFQURNRSBmb3Ig bW9yZSBhYm91dCB0aGlzKS4KICAqIFdpdGhpbiB0aGlzIHJvdXRpbmUsIHdlIGJ1aWxkIGEgdGVt cG9yYXJ5IGluc2VydGlvbi10eXBlIHNjYW5rZXkgdG8gdXNlCiAgKiBpbiBsb2NhdGluZyB0aGUg c2NhbiBzdGFydCBwb3NpdGlvbi4KICAqLwotYm9vbAorQmF0Y2hJbmRleFNjYW4KIF9idF9maXJz dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCVJlbGF0aW9uCXJl bCA9IHNjYW4tPmluZGV4UmVsYXRpb247CkBAIC04ODgsOCArODU0LDEwIEBAIF9idF9maXJzdChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCVN0cmF0ZWd5TnVtYmVyIHN0 cmF0X3RvdGFsID0gSW52YWxpZFN0cmF0ZWd5OwogCUJsb2NrTnVtYmVyIGJsa25vID0gSW52YWxp ZEJsb2NrTnVtYmVyLAogCQkJCWxhc3RjdXJyYmxrbm87CisJQmF0Y2hJbmRleFNjYW4gZmlyc3Ri YXRjaDsKIAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOworCS8qIEFs bG9jYXRlIHNwYWNlIGZvciBmaXJzdCBiYXRjaCAqLworCWZpcnN0YmF0Y2ggPSBpbmRleGFtX3V0 aWxfYmF0Y2hfYWxsb2Moc2Nhbik7CiAKIAkvKgogCSAqIEV4YW1pbmUgdGhlIHNjYW4ga2V5cyBh bmQgZWxpbWluYXRlIGFueSByZWR1bmRhbnQga2V5czsgYWxzbyBtYXJrIHRoZQpAQCAtOTA1LDYg Kzg3Myw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogCXsKIAkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIAkJX2J0X3BhcmFsbGVsX2RvbmUo c2Nhbik7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOwog CQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC05MTQsNyArODgzLDEwIEBAIF9idF9maXJzdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqLwogCWlmIChzY2FuLT5wYXJh bGxlbF9zY2FuICE9IE5VTEwgJiYKIAkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8s ICZsYXN0Y3VycmJsa25vLCB0cnVlKSkKLQkJcmV0dXJuIGZhbHNlOworCXsKKwkJaW5kZXhhbV91 dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7CisJCXJldHVybiBmYWxzZTsJCQkv KiBkZWZpbml0ZWx5IGRvbmUgKHNvLT5uZWVkUHJpbVNjYW4gaXMgdW5zZXQpICovCisJfQogCiAJ LyoKIAkgKiBJbml0aWFsaXplIHRoZSBzY2FuJ3MgYXJyYXlzIChpZiBhbnkpIGZvciB0aGUgY3Vy cmVudCBzY2FuIGRpcmVjdGlvbgpAQCAtOTMxLDE0ICs5MDMsMTAgQEAgX2J0X2ZpcnN0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCSAqIF9idF9yZWFkbmV4dHBhZ2Ug cmVsZWFzZXMgdGhlIHNjYW4gZm9yIHVzIChub3QgX2J0X3JlYWRmaXJzdHBhZ2UpLgogCQkgKi8K IAkJQXNzZXJ0KHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCk7Ci0JCUFzc2VydCghc28tPm5l ZWRQcmltU2Nhbik7Ci0JCUFzc2VydChibGtubyAhPSBQX05PTkUpOwogCi0JCWlmICghX2J0X3Jl YWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCB0cnVlKSkKLQkJCXJl dHVybiBmYWxzZTsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRj aCk7CiAKLQkJX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0 dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgdHJ1 ZSk7CiAJfQogCiAJLyoKQEAgLTEyMzgsNyArMTIwNiw3IEBAIF9idF9maXJzdChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIE5vdGU6IGNhbGxzIF9idF9yZWFkZmly c3RwYWdlIGZvciB1cywgd2hpY2ggcmVsZWFzZXMgdGhlIHBhcmFsbGVsIHNjYW4uCiAJICovCiAJ aWYgKGtleXN6ID09IDApCi0JCXJldHVybiBfYnRfZW5kcG9pbnQoc2NhbiwgZGlyKTsKKwkJcmV0 dXJuIF9idF9lbmRwb2ludChzY2FuLCBkaXIsIGZpcnN0YmF0Y2gpOwogCiAJLyoKIAkgKiBXZSB3 YW50IHRvIHN0YXJ0IHRoZSBzY2FuIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGluZGV4LiAgU2V0IHVw IGFuCkBAIC0xNTA2LDEyICsxNDc0LDEyIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIHBvc2l0aW9uIG91cnNlbHZlcyBvbiB0aGUgdGFyZ2V0 IGxlYWYgcGFnZS4KIAkgKi8KIAlBc3NlcnQoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSA9 PSBpbnNrZXkuYmFja3dhcmQpOwotCXN0YWNrID0gX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNr ZXksICZzby0+Y3VyclBvcy5idWYsIEJUX1JFQUQpOworCXN0YWNrID0gX2J0X3NlYXJjaChyZWws IE5VTEwsICZpbnNrZXksICZmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQpOwogCiAJLyogZG9uJ3Qg bmVlZCB0byBrZWVwIHRoZSBzdGFjayBhcm91bmQuLi4gKi8KIAlfYnRfZnJlZXN0YWNrKHN0YWNr KTsKIAotCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCWlmICh1bmxpa2Vs eSghQnVmZmVySXNWYWxpZChmaXJzdGJhdGNoLT5idWYpKSkKIAl7CiAJCUFzc2VydCghc28tPm5l ZWRQcmltU2Nhbik7CiAKQEAgLTE1MjcsMjMgKzE0OTUsMjQgQEAgX2J0X2ZpcnN0KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCWlmIChJc29sYXRpb25Jc1NlcmlhbGl6 YWJsZSgpKQogCQl7CiAJCQlQcmVkaWNhdGVMb2NrUmVsYXRpb24ocmVsLCBzY2FuLT54c19zbmFw c2hvdCk7Ci0JCQlzdGFjayA9IF9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmc28tPmN1 cnJQb3MuYnVmLCBCVF9SRUFEKTsKKwkJCXN0YWNrID0gX2J0X3NlYXJjaChyZWwsIE5VTEwsICZp bnNrZXksICZmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQpOwogCQkJX2J0X2ZyZWVzdGFjayhzdGFj ayk7CiAJCX0KIAotCQlpZiAoIUJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKKwkJaWYg KCFCdWZmZXJJc1ZhbGlkKGZpcnN0YmF0Y2gtPmJ1ZikpCiAJCXsKIAkJCV9idF9wYXJhbGxlbF9k b25lKHNjYW4pOworCQkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRj aCk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAl9CiAKIAkvKiBwb3NpdGlvbiB0byB0aGUgcHJl Y2lzZSBpdGVtIG9uIHRoZSBwYWdlICovCi0Jb2ZmbnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5z a2V5LCBzby0+Y3VyclBvcy5idWYpOworCW9mZm51bSA9IF9idF9iaW5zcmNoKHJlbCwgJmluc2tl eSwgZmlyc3RiYXRjaC0+YnVmKTsKIAogCS8qCiAJICogTm93IGxvYWQgZGF0YSBmcm9tIHRoZSBm aXJzdCBwYWdlIG9mIHRoZSBzY2FuICh1c3VhbGx5IHRoZSBwYWdlCi0JICogY3VycmVudGx5IGlu IHNvLT5jdXJyUG9zLmJ1ZikuCisJICogY3VycmVudGx5IGluIGZpcnN0YmF0Y2guYnVmKS4KIAkg KgogCSAqIElmIGluc2tleS5uZXh0a2V5ID0gZmFsc2UgYW5kIGluc2tleS5iYWNrd2FyZCA9IGZh bHNlLCBvZmZudW0gaXMKIAkgKiBwb3NpdGlvbmVkIGF0IHRoZSBmaXJzdCBub24tcGl2b3QgdHVw bGUgPj0gaW5za2V5LnNjYW5rZXlzLgpAQCAtMTU2MSwxNjggKzE1MzAsNjkgQEAgX2J0X2ZpcnN0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJICogZm9yIHRoZSBwYWdl LiAgRm9yIGV4YW1wbGUsIHdoZW4gaW5za2V5IGlzIGJvdGggPCB0aGUgbGVhZiBwYWdlJ3MgaGln aAogCSAqIGtleSBhbmQgPiBhbGwgb2YgaXRzIG5vbi1waXZvdCB0dXBsZXMsIG9mZm51bSB3aWxs IGJlICJtYXhvZmYgKyAxIi4KIAkgKi8KLQlpZiAoIV9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIG9m Zm51bSwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28p OwotCXJldHVybiB0cnVlOworCXJldHVybiBfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBmaXJzdGJh dGNoLCBvZmZudW0sIGRpcik7CiB9CiAKIC8qCiAgKglfYnRfbmV4dCgpIC0tIEdldCB0aGUgbmV4 dCBpdGVtIGluIGEgc2Nhbi4KICAqCi0gKgkJT24gZW50cnksIHNvLT5jdXJyUG9zIGRlc2NyaWJl cyB0aGUgY3VycmVudCBwYWdlLCB3aGljaCBtYXkgYmUgcGlubmVkCi0gKgkJYnV0IGlzIG5vdCBs b2NrZWQsIGFuZCBzby0+Y3VyclBvcy5pdGVtSW5kZXggaWRlbnRpZmllcyB3aGljaCBpdGVtIHdh cwotICoJCXByZXZpb3VzbHkgcmV0dXJuZWQuCisgKgkJT24gZW50cnksIHByaW9yYmF0Y2ggZGVz Y3JpYmVzIHRoZSBiYXRjaCB0aGF0IHdhcyBsYXN0IHJldHVybmVkIGJ5CisgKgkJYnRnZXRiYXRj aC4gIFdlJ2xsIHVzZSB0aGUgcHJpb3IgYmF0Y2gncyBwb3NpdGlvbmluZyBpbmZvcm1hdGlvbiB0 bworICoJCWRlY2lkZSB3aGljaCBwYWdlIHRvIHJlYWQgbmV4dC4KICAqCi0gKgkJT24gc3VjY2Vz cyBleGl0LCBzby0+Y3VyclBvcyBpcyB1cGRhdGVkIGFzIG5lZWRlZCwgYW5kIF9idF9yZXR1cm5p dGVtCi0gKgkJc2V0cyB0aGUgbmV4dCBpdGVtIHRvIHJldHVybiB0byB0aGUgc2Nhbi4gIHNvLT5j dXJyUG9zIHJlbWFpbnMgdmFsaWQuCisgKgkJT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHRoZSBu ZXh0IGJhdGNoLiAgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUKKyAqCQltYXRjaGluZyB0dXBs ZSBvbiBhbnkgcmV0dXJuZWQgYmF0Y2ggKGVsc2Ugd2UnZCBqdXN0IHJldHVybiBOVUxMKS4KICAq Ci0gKgkJT24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyksIHdlIGludmFsaWRhdGUgc28t PmN1cnJQb3MuICBJdCdsbAotICoJCXN0aWxsIGJlIHBvc3NpYmxlIGZvciB0aGUgc2NhbiB0byBy ZXR1cm4gdHVwbGVzIGJ5IGNoYW5naW5nIGRpcmVjdGlvbiwKLSAqCQl0aG91Z2ggd2UnbGwgbmVl ZCB0byBjYWxsIF9idF9maXJzdCBhbmV3IGluIHRoYXQgb3RoZXIgZGlyZWN0aW9uLgorICoJCU9u IGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSByZXR1cm4gTlVMTC4gIEl0J2xsIHN0 aWxsIGJlCisgKgkJcG9zc2libGUgZm9yIHRoZSBzY2FuIHRvIHJldHVybiB0dXBsZXMgYnkgY2hh bmdpbmcgZGlyZWN0aW9uLCB0aG91Z2gKKyAqCQl3ZSdsbCBuZWVkIHRvIGNhbGwgX2J0X2ZpcnN0 IGFuZXcgaW4gdGhhdCBvdGhlciBkaXJlY3Rpb24uCiAgKi8KLWJvb2wKLV9idF9uZXh0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCi17Ci0JQlRTY2FuT3BhcXVlIHNvID0g KEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCi0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQo c28tPmN1cnJQb3MpKTsKLQotCS8qCi0JICogQWR2YW5jZSB0byBuZXh0IHR1cGxlIG9uIGN1cnJl bnQgcGFnZTsgb3IgaWYgdGhlcmUncyBubyBtb3JlLCB0cnkgdG8KLQkgKiBzdGVwIHRvIHRoZSBu ZXh0IHBhZ2Ugd2l0aCBkYXRhLgotCSAqLwotCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRp cikpCi0JewotCQlpZiAoKytzby0+Y3VyclBvcy5pdGVtSW5kZXggPiBzby0+Y3VyclBvcy5sYXN0 SXRlbSkKLQkJewotCQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKLQkJCQlyZXR1cm4g ZmFsc2U7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJaWYgKC0tc28tPmN1cnJQb3MuaXRlbUluZGV4 IDwgc28tPmN1cnJQb3MuZmlyc3RJdGVtKQotCQl7Ci0JCQlpZiAoIV9idF9zdGVwcGFnZShzY2Fu LCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQotCV9idF9yZXR1cm5pdGVtKHNj YW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFJldHVybiB0aGUgaW5kZXggaXRl bSBmcm9tIHNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF0gdG8gdGhlCi0g KiBpbmRleCBzY2FuIGJ5IHNldHRpbmcgdGhlIHJlbGV2YW50IGZpZWxkcyBpbiBjYWxsZXIncyBp bmRleCBzY2FuIGRlc2NyaXB0b3IKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1fYnRfcmV0dXJu aXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nhbk9wYXF1ZSBzbykKLXsKLQlCVFNjYW5Qb3NJ dGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhd OwotCi0JLyogTW9zdCByZWNlbnQgX2J0X3JlYWRwYWdlIG11c3QgaGF2ZSBzdWNjZWVkZWQgKi8K LQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCUFzc2VydChzby0+Y3Vy clBvcy5pdGVtSW5kZXggPj0gc28tPmN1cnJQb3MuZmlyc3RJdGVtKTsKLQlBc3NlcnQoc28tPmN1 cnJQb3MuaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKLQotCS8qIFJldHVybiBu ZXh0IGl0ZW0sIHBlciBhbWdldHR1cGxlIGNvbnRyYWN0ICovCi0Jc2Nhbi0+eHNfaGVhcHRpZCA9 IGN1cnJJdGVtLT5oZWFwVGlkOwotCWlmIChzby0+Y3VyclR1cGxlcykKLQkJc2Nhbi0+eHNfaXR1 cCA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBjdXJySXRlbS0+dHVwbGVPZmZzZXQp OwotfQotCi0vKgotICoJX2J0X3N0ZXBwYWdlKCkgLS0gU3RlcCB0byBuZXh0IHBhZ2UgY29udGFp bmluZyB2YWxpZCBkYXRhIGZvciBzY2FuCi0gKgotICogV3JhcHBlciBvbiBfYnRfcmVhZG5leHRw YWdlIHRoYXQgcGVyZm9ybXMgZmluYWwgc3RlcHMgZm9yIHRoZSBjdXJyZW50IHBhZ2UuCi0gKgot ICogT24gZW50cnksIHNvLT5jdXJyUG9zIG11c3QgYmUgdmFsaWQuICBJdHMgYnVmZmVyIHdpbGwg YmUgcGlubmVkLCB0aG91Z2gKLSAqIG5ldmVyIGxvY2tlZC4gKEFjdHVhbGx5LCB3aGVuIHNvLT5k cm9wUGluIHRoZXJlIHdvbid0IGV2ZW4gYmUgYSBwaW4gaGVsZCwKLSAqIHRob3VnaCBzby0+Y3Vy clBvcy5jdXJyUGFnZSBtdXN0IHN0aWxsIGJlIHNldCB0byBhIHZhbGlkIGJsb2NrIG51bWJlci4p Ci0gKi8KLXN0YXRpYyBib29sCi1fYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKK0JhdGNoSW5kZXhTY2FuCitfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBCYXRjaEluZGV4U2NhbiBwcmlvcmJhdGNoKQogewogCUJU U2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlCbG9ja051bWJl ciBibGtubywKIAkJCQlsYXN0Y3VycmJsa25vOwogCi0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQo c28tPmN1cnJQb3MpKTsKLQotCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3 aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCV9idF9r aWxsaXRlbXMoc2Nhbik7Ci0KLQkvKgotCSAqIEJlZm9yZSB3ZSBtb2RpZnkgY3VyclBvcywgbWFr ZSBhIGNvcHkgb2YgdGhlIHBhZ2UgZGF0YSBpZiB0aGVyZSB3YXMgYQotCSAqIG1hcmsgcG9zaXRp b24gdGhhdCBuZWVkcyBpdC4KLQkgKi8KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7 Ci0JCS8qIGJ1bXAgcGluIG9uIGN1cnJlbnQgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIG1hcmsg YnVmZmVyICovCi0JCWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCi0JCQlJbmNy QnVmZmVyUmVmQ291bnQoc28tPmN1cnJQb3MuYnVmKTsKLQkJbWVtY3B5KCZzby0+bWFya1Bvcywg JnNvLT5jdXJyUG9zLAotCQkJICAgb2Zmc2V0b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsK LQkJCSAgIHNvLT5jdXJyUG9zLmxhc3RJdGVtICogc2l6ZW9mKEJUU2NhblBvc0l0ZW0pKTsKLQkJ aWYgKHNvLT5tYXJrVHVwbGVzKQotCQkJbWVtY3B5KHNvLT5tYXJrVHVwbGVzLCBzby0+Y3VyclR1 cGxlcywKLQkJCQkgICBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQpOwotCQlzby0+bWFya1Bv cy5pdGVtSW5kZXggPSBzby0+bWFya0l0ZW1JbmRleDsKLQkJc28tPm1hcmtJdGVtSW5kZXggPSAt MTsKLQotCQkvKgotCQkgKiBJZiB3ZSdyZSBqdXN0IGFib3V0IHRvIHN0YXJ0IHRoZSBuZXh0IHBy aW1pdGl2ZSBpbmRleCBzY2FuCi0JCSAqIChwb3NzaWJsZSB3aXRoIGEgc2NhbiB0aGF0IGhhcyBh cnJheXMga2V5cywgYW5kIG5lZWRzIHRvIHNraXAgdG8KLQkJICogY29udGludWUgaW4gdGhlIGN1 cnJlbnQgc2NhbiBkaXJlY3Rpb24pLCBtb3JlTGVmdC9tb3JlUmlnaHQgb25seQotCQkgKiBpbmRp Y2F0ZSB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuLiAgVGhleSBt dXN0Ci0JCSAqIG5ldmVyIGJlIHRha2VuIHRvIGluZGljYXRlIHRoYXQgdGhlIHRvcC1sZXZlbCBp bmRleCBzY2FuIGhhcyBlbmRlZAotCQkgKiAodGhhdCB3b3VsZCBiZSB3cm9uZykuCi0JCSAqCi0J CSAqIFdlIGNvdWxkIGhhbmRsZSB0aGlzIGNhc2UgYnkgdHJlYXRpbmcgdGhlIGN1cnJlbnQgYXJy YXkga2V5cyBhcwotCQkgKiBtYXJrUG9zIHN0YXRlLiAgQnV0IGRlcGVuZGluZyBvbiB0aGUgY3Vy cmVudCBhcnJheSBzdGF0ZSBsaWtlIHRoaXMKLQkJICogd291bGQgYWRkIGNvbXBsZXhpdHkuICBJ bnN0ZWFkLCB3ZSBqdXN0IHVuc2V0IG1hcmtQb3MncyBjb3B5IG9mCi0JCSAqIG1vcmVSaWdodCBv ciBtb3JlTGVmdCAod2hpY2hldmVyIG1pZ2h0IGJlIGFmZmVjdGVkKSwgd2hpbGUgbWFraW5nCi0J CSAqIGJ0cmVzdHJwb3MgcmVzZXQgdGhlIHNjYW4ncyBhcnJheXMgdG8gdGhlaXIgaW5pdGlhbCBz Y2FuIHBvc2l0aW9ucy4KLQkJICogSW4gZWZmZWN0LCBidHJlc3RycG9zIGxlYXZlcyBhZHZhbmNp bmcgdGhlIGFycmF5cyB1cCB0byB0aGUgZmlyc3QKLQkJICogX2J0X3JlYWRwYWdlIGNhbGwgKHRo YXQgdGFrZXMgcGxhY2UgYWZ0ZXIgaXQgaGFzIHJlc3RvcmVkIG1hcmtQb3MpLgotCQkgKi8KLQkJ aWYgKHNvLT5uZWVkUHJpbVNjYW4pCi0JCXsKLQkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KHNvLT5jdXJyUG9zLmRpcikpCi0JCQkJc28tPm1hcmtQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKLQkJ CWVsc2UKLQkJCQlzby0+bWFya1Bvcy5tb3JlTGVmdCA9IHRydWU7Ci0JCX0KLQotCQkvKiBtYXJr L3Jlc3RvcmUgbm90IHN1cHBvcnRlZCBieSBwYXJhbGxlbCBzY2FucyAqLwotCQlBc3NlcnQoIXNj YW4tPnBhcmFsbGVsX3NjYW4pOwotCX0KLQotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1 cnJQb3MpOworCUFzc2VydChCbG9ja051bWJlcklzVmFsaWQocHJpb3JiYXRjaC0+Y3VyclBhZ2Up KTsKIAogCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEgKi8KIAlpZiAoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQlibGtubyA9IHNvLT5jdXJyUG9zLm5leHRQYWdlOwor CQlibGtubyA9IHByaW9yYmF0Y2gtPm5leHRQYWdlOwogCWVsc2UKLQkJYmxrbm8gPSBzby0+Y3Vy clBvcy5wcmV2UGFnZTsKLQlsYXN0Y3VycmJsa25vID0gc28tPmN1cnJQb3MuY3VyclBhZ2U7CisJ CWJsa25vID0gcHJpb3JiYXRjaC0+cHJldlBhZ2U7CisJbGFzdGN1cnJibGtubyA9IHByaW9yYmF0 Y2gtPmN1cnJQYWdlOwogCiAJLyoKLQkgKiBDYW5jZWwgcHJpbWl0aXZlIGluZGV4IHNjYW5zIHRo YXQgd2VyZSBzY2hlZHVsZWQgd2hlbiB0aGUgY2FsbCB0bwotCSAqIF9idF9yZWFkcGFnZSBmb3Ig Y3VyclBvcyBoYXBwZW5lZCB0byB1c2UgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUKLQkg KiBvbmUgdGhhdCB3ZSdyZSBzdGVwcGluZyBpbiBub3cuICAoSXQncyBva2F5IHRvIGxlYXZlIHRo ZSBzY2FuJ3MgYXJyYXkKLQkgKiBrZXlzIGFzLWlzLCBzaW5jZSB0aGUgbmV4dCBfYnRfcmVhZHBh Z2Ugd2lsbCBhZHZhbmNlIHRoZW0uKQorCSAqIENhbmNlbCBwcmltaXRpdmUgaW5kZXggc2NhbnMg dGhhdCB3ZXJlIHNjaGVkdWxlZCB3aGVuIHByaW9yYmF0Y2gncyBjYWxsCisJICogdG8gX2J0X3Jl YWRwYWdlIGhhcHBlbmVkIHRvIHVzZSB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRvIHRoZSBvbmUg dGhhdAorCSAqIHdlJ3JlIHN0ZXBwaW5nIGluIG5vdy4gIChJdCdzIG9rYXkgdG8gbGVhdmUgdGhl IHNjYW4ncyBhcnJheSBrZXlzCisJICogYXMtaXMsIHNpbmNlIHRoZSBuZXh0IF9idF9yZWFkcGFn ZSB3aWxsIGFkdmFuY2UgdGhlbS4pCiAJICovCi0JaWYgKHNvLT5jdXJyUG9zLmRpciAhPSBkaXIp CisJaWYgKHByaW9yYmF0Y2gtPmRpciAhPSBkaXIpCiAJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxz ZTsKIAorCWlmIChibGtubyA9PSBQX05PTkUgfHwKKwkJKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyKSA/CisJCSAhcHJpb3JiYXRjaC0+bW9yZVJpZ2h0IDogIXByaW9yYmF0Y2gtPm1vcmVMZWZ0 KSkKKwl7CisJCS8qCisJCSAqIHByaW9yYmF0Y2ggX2J0X3JlYWRwYWdlIGNhbGwgZW5kZWQgc2Nh biBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoCisJCSAqIGlmIHNvLT5uZWVkUHJpbVNjYW4gd2Fz IHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkKKwkJICovCisJCV9idF9w YXJhbGxlbF9kb25lKHNjYW4pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBwYXJhbGxlbCBz Y2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8gKi8KKwlpZiAoc2Nhbi0+ cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJs a25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQlyZXR1cm4gTlVMTDsJCQkvKiBkb25lIGlm ZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KKwogCXJldHVybiBfYnRfcmVhZG5leHRw YWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIGZhbHNlKTsKIH0KIAorCiAvKgog ICoJX2J0X3JlYWRmaXJzdHBhZ2UoKSAtLSBSZWFkIGZpcnN0IHBhZ2UgY29udGFpbmluZyB2YWxp ZCBkYXRhIGZvciBfYnRfZmlyc3QKICAqCkBAIC0xNzMyLDczICsxNjAyLDkwIEBAIF9idF9zdGVw cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogICogdG8gc3RvcCB0 aGUgc2NhbiBvbiB0aGlzIHBhZ2UgYnkgY2FsbGluZyBfYnRfY2hlY2trZXlzIGFnYWluc3QgdGhl IGhpZ2gKICAqIGtleS4gIFNlZSBfYnRfcmVhZHBhZ2UgZm9yIGZ1bGwgZGV0YWlscy4KICAqCi0g KiBPbiBlbnRyeSwgc28tPmN1cnJQb3MgbXVzdCBiZSBwaW5uZWQgYW5kIGxvY2tlZCAoc28gb2Zm bnVtIHN0YXlzIHZhbGlkKS4KKyAqIE9uIGVudHJ5LCBmaXJzdGJhdGNoIG11c3QgYmUgcGlubmVk IGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxpZCkuCiAgKiBQYXJhbGxlbCBzY2FuIGNh bGxlcnMgbXVzdCBoYXZlIHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLgogICoK LSAqIE9uIGV4aXQsIHdlJ2xsIGhhdmUgdXBkYXRlZCBzby0+Y3VyclBvcyBhbmQgcmV0YWluZWQg bG9ja3MgYW5kIHBpbnMKKyAqIE9uIGV4aXQsIHdlJ2xsIGhhdmUgdXBkYXRlZCBmaXJzdGJhdGNo IGFuZCByZXRhaW5lZCBsb2NrcyBhbmQgcGlucwogICogYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1 bGVzIGFzIHRob3NlIGxhaWQgb3V0IGZvciBfYnRfcmVhZG5leHRwYWdlIGV4aXQuCi0gKiBMaWtl IF9idF9yZWFkbmV4dHBhZ2UsIG91ciByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIGlmIHRoZXJlIGFy ZSBhbnkgbWF0Y2hpbmcKLSAqIHJlY29yZHMgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi4KICAqCiAg KiBXZSBhbHdheXMgcmVsZWFzZSB0aGUgc2NhbiBmb3IgYSBwYXJhbGxlbCBzY2FuIGNhbGxlciwg cmVnYXJkbGVzcyBvZgogICogc3VjY2VzcyBvciBmYWlsdXJlOyB3ZSdsbCBjYWxsIF9idF9wYXJh bGxlbF9yZWxlYXNlIGFzIHNvb24gYXMgcG9zc2libGUuCiAgKi8KLXN0YXRpYyBib29sCi1fYnRf cmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9mZnNldE51bWJlciBvZmZudW0sIFNj YW5EaXJlY3Rpb24gZGlyKQorc3RhdGljIEJhdGNoSW5kZXhTY2FuCitfYnRfcmVhZGZpcnN0cGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGZpcnN0YmF0Y2gsCisJCQkJICBP ZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlCVFNjYW5PcGFxdWUg c28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQmxvY2tOdW1iZXIgYmxrbm8sCisJ CQkJbGFzdGN1cnJibGtubzsKIAotCXNvLT5udW1LaWxsZWQgPSAwOwkJCS8qIGp1c3QgcGFyYW5v aWEgKi8KLQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwkJLyogZGl0dG8gKi8KLQotCS8qIEluaXRp YWxpemUgc28tPmN1cnJQb3MgZm9yIHRoZSBmaXJzdCBwYWdlIChwYWdlIGluIHNvLT5jdXJyUG9z LmJ1ZikgKi8KKwkvKiBJbml0aWFsaXplIGZpcnN0YmF0Y2gncyBwb3NpdGlvbiBmb3IgdGhlIGZp cnN0IHBhZ2UgKi8KIAlpZiAoc28tPm5lZWRQcmltU2NhbikKIAl7CiAJCUFzc2VydChzby0+bnVt QXJyYXlLZXlzKTsKIAotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7Ci0JCXNvLT5jdXJy UG9zLm1vcmVSaWdodCA9IHRydWU7CisJCWZpcnN0YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwkJ Zmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNl OwogCX0KIAllbHNlIGlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewotCQlzby0+ Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNlOwotCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVl OworCQlmaXJzdGJhdGNoLT5tb3JlTGVmdCA9IGZhbHNlOworCQlmaXJzdGJhdGNoLT5tb3JlUmln aHQgPSB0cnVlOwogCX0KIAllbHNlCiAJewotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7 Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQlmaXJzdGJhdGNoLT5tb3JlTGVm dCA9IHRydWU7CisJCWZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCX0KIAogCS8qCiAJ ICogQXR0ZW1wdCB0byBsb2FkIG1hdGNoaW5nIHR1cGxlcyBmcm9tIHRoZSBmaXJzdCBwYWdlLgog CSAqCi0JICogTm90ZSB0aGF0IF9idF9yZWFkcGFnZSB3aWxsIGZpbmlzaCBpbml0aWFsaXppbmcg dGhlIHNvLT5jdXJyUG9zIGZpZWxkcy4KKwkgKiBOb3RlIHRoYXQgX2J0X3JlYWRwYWdlIHdpbGwg ZmluaXNoIGluaXRpYWxpemluZyB0aGUgZmlyc3RiYXRjaCBmaWVsZHMuCiAJICogX2J0X3JlYWRw YWdlIGFsc28gcmVsZWFzZXMgcGFyYWxsZWwgc2NhbiAoZXZlbiB3aGVuIGl0IHJldHVybnMgZmFs c2UpLgogCSAqLwotCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZGlyLCBvZmZudW0sIHRydWUpKQor CWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgZGlyLCBvZmZudW0sIHRydWUpKQog CXsKLQkJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQotCQkvKgotCQkgKiBf YnRfcmVhZHBhZ2Ugc3VjY2VlZGVkLiAgRHJvcCB0aGUgbG9jayAoYW5kIG1heWJlIHRoZSBwaW4p IG9uCi0JCSAqIHNvLT5jdXJyUG9zLmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYnRnZXR0dXBsZSBy ZXR1cm5pbmcgdHVwbGVzLgotCQkgKi8KLQkJQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5j dXJyUG9zKSk7Ci0JCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKLQkJcmV0 dXJuIHRydWU7CisJCS8qIF9idF9yZWFkcGFnZSBzYXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVzIGlu IGZpcnN0YmF0Y2guaXRlbXNbXSAqLworCQlpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKHNjYW4s IGZpcnN0YmF0Y2gpOworCQlyZXR1cm4gZmlyc3RiYXRjaDsKIAl9CiAKLQkvKiBUaGVyZSdzIG5v IGFjdHVhbGx5LW1hdGNoaW5nIGRhdGEgb24gdGhlIHBhZ2UgaW4gc28tPmN1cnJQb3MuYnVmICov Ci0JX2J0X3VubG9ja2J1ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBzby0+Y3VyclBvcy5idWYpOwor CS8qIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0aGUgcGFnZSAqLworCV9i dF9yZWxidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgZmlyc3RiYXRjaC0+YnVmKTsKKwlmaXJzdGJh dGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOwogCi0JLyogQ2FsbCBfYnRfcmVhZG5leHRwYWdlIHVz aW5nIGl0cyBfYnRfc3RlcHBhZ2Ugd3JhcHBlciBmdW5jdGlvbiAqLwotCWlmICghX2J0X3N0ZXBw YWdlKHNjYW4sIGRpcikpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBXYWxrIHRvIHRoZSBuZXh0IHBh Z2Ugd2l0aCBkYXRhICovCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJYmxr bm8gPSBmaXJzdGJhdGNoLT5uZXh0UGFnZTsKKwllbHNlCisJCWJsa25vID0gZmlyc3RiYXRjaC0+ cHJldlBhZ2U7CisJbGFzdGN1cnJibGtubyA9IGZpcnN0YmF0Y2gtPmN1cnJQYWdlOwogCi0JLyog X2J0X3JlYWRwYWdlIGZvciBhIGxhdGVyIHBhZ2UgKG5vdyBpbiBzby0+Y3VyclBvcykgc3VjY2Vl ZGVkICovCi0JcmV0dXJuIHRydWU7CisJQXNzZXJ0KGZpcnN0YmF0Y2gtPmRpciA9PSBkaXIpOwor CisJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIp ID8KKwkJICFmaXJzdGJhdGNoLT5tb3JlUmlnaHQgOiAhZmlyc3RiYXRjaC0+bW9yZUxlZnQpKQor CXsKKwkJLyoKKwkJICogZmlyc3RiYXRjaCBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGlu IHRoaXMgZGlyZWN0aW9uICh0aG91Z2gKKwkJICogaWYgc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0 IHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkgKi8KKwkJaW5kZXhhbV91 dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7CisJCV9idF9wYXJhbGxlbF9kb25l KHNjYW4pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFz ZShzY2FuLCBmaXJzdGJhdGNoKTsKKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUg c2NhbiB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5V TEwgJiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25v LCBmYWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4g d2Fzbid0IHNldCAqLworCisJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxh c3RjdXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQogCiAvKgpAQCAtMTgwOCwxMDIgKzE2OTUsNjUg QEAgX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZzZXROdW1iZXIgb2Zm bnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKICAqIHByZXZpb3VzbHktc2F2ZWQgcmlnaHQgbGluayBv ciBsZWZ0IGxpbmsuICBsYXN0Y3VycmJsa25vIGlzIHRoZSBwYWdlIHRoYXQKICAqIHdhcyBjdXJy ZW50IGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgYmxrbm8gbGluayB3YXMgc2F2ZWQsIHdoaWNoIHdl IHVzZSB0bwogICogcmVhc29uIGFib3V0IGNvbmN1cnJlbnQgcGFnZSBzcGxpdHMvcGFnZSBkZWxl dGlvbnMgZHVyaW5nIGJhY2t3YXJkcyBzY2Fucy4KLSAqIEluIHRoZSBjb21tb24gY2FzZSB3aGVy ZSBzZWl6ZWQ9ZmFsc2UsIGJsa25vIGlzIGVpdGhlciBzby0+Y3VyclBvcy5uZXh0UGFnZQotICog b3Igc28tPmN1cnJQb3MucHJldlBhZ2UsIGFuZCBsYXN0Y3VycmJsa25vIGlzIHNvLT5jdXJyUG9z LmN1cnJQYWdlLgorICogYmxrbm8gaXMgdGhlIHByaW9yIGJhdGNoJ3MgbmV4dFBhZ2Ugb3IgcHJl dlBhZ2UgKGRlcGVuZGluZyBvbiB0aGUgY3VycmVudAorICogc2NhbiBkaXJlY3Rpb24pLCBhbmQg bGFzdGN1cnJibGtubyBpcyB0aGUgcHJpb3IgYmF0Y2gncyBjdXJyUGFnZS4KICAqCi0gKiBPbiBl bnRyeSwgc28tPmN1cnJQb3Mgc2hvdWxkbid0IGJlIGxvY2tlZCBieSBjYWxsZXIuICBzby0+Y3Vy clBvcy5idWYgbXVzdAotICogYmUgSW52YWxpZEJ1ZmZlci91bnBpbm5lZCBhcyBuZWVkZWQgYnkg Y2FsbGVyIChub3RlIHRoYXQgbGFzdGN1cnJibGtubwotICogd29uJ3QgbmVlZCB0byBiZSByZWFk IGFnYWluIGluIGFsbW9zdCBhbGwgY2FzZXMpLiAgUGFyYWxsZWwgc2NhbiBjYWxsZXJzCi0gKiB0 aGF0IHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlIHNob3VsZCBwYXNzIHNlaXpl ZD10cnVlOyBzdWNoIGEKLSAqIGNhbGxlcidzIGJsa25vIGFuZCBsYXN0Y3VycmJsa25vIGFyZ3Vt ZW50cyBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLgotICogc2VpemVkPWZhbHNlIGNhbGxlcnMg anVzdCBwYXNzIHVzIHRoZSBibGtuby9sYXN0Y3VycmJsa25vIHRha2VuIGZyb20gdGhlaXIKLSAq IHNvLT5jdXJyUG9zLCB3aGljaCAoYWxvbmcgd2l0aCBzby0+Y3VyclBvcyBpdHNlbGYpIGNhbiBi ZSB1c2VkIHRvIGVuZCB0aGUKLSAqIHNjYW4uICBBIHNlaXplZD1mYWxzZSBjYWxsZXIncyBibGtu byBjYW4gbmV2ZXIgYmUgYXNzdW1lZCB0byBiZSB0aGUgcGFnZQotICogdGhhdCBtdXN0IGJlIHJl YWQgbmV4dCBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLCB0aG91Z2guICBXZSBtdXN0IGZpZ3VyZSB0 aGF0Ci0gKiBwYXJ0IG91dCBmb3Igb3Vyc2VsdmVzIGJ5IHNlaXppbmcgdGhlIHNjYW4gKHRoZSBj b3JyZWN0IHBhZ2UgdG8gcmVhZCBtaWdodAotICogYWxyZWFkeSBiZSBiZXlvbmQgdGhlIHNlaXpl ZD1mYWxzZSBjYWxsZXIncyBibGtubyBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLAotICogdW5sZXNz IGJsa25vL3NvLT5jdXJyUG9zLm5leHRQYWdlL3NvLT5jdXJyUG9zLnByZXZQYWdlIGlzIGFscmVh ZHkgUF9OT05FLAotICogb3IgdW5sZXNzIHNvLT5jdXJyUG9zLm1vcmVSaWdodC9zby0+Y3VyclBv cy5tb3JlTGVmdCBpcyBhbHJlYWR5IHVuc2V0KS4KKyAqIE9uIGVudHJ5LCBubyBwYWdlIHNob3Vs ZCBiZSBsb2NrZWQgYnkgY2FsbGVyLgogICoKLSAqIE9uIHN1Y2Nlc3MgZXhpdCwgc28tPmN1cnJQ b3MgaXMgdXBkYXRlZCB0byBjb250YWluIGRhdGEgZnJvbSB0aGUgbmV4dAotICogaW50ZXJlc3Rp bmcgcGFnZSwgYW5kIHdlIHJldHVybiB0cnVlLiAgV2UgaG9sZCBhIHBpbiBvbiB0aGUgYnVmZmVy IG9uCi0gKiBzdWNjZXNzIGV4aXQgKGV4Y2VwdCBkdXJpbmcgc28tPmRyb3BQaW4gaW5kZXggc2Nh bnMsIHdoZW4gd2UgZHJvcCB0aGUgcGluCi0gKiBlYWdlcmx5IHRvIGF2b2lkIGJsb2NraW5nIFZB Q1VVTSkuCisgKiBPbiBzdWNjZXNzIGV4aXQsIHJldHVybnMgYmF0Y2ggY29udGFpbmluZyBkYXRh IGZyb20gdGhlIG5leHQgcGFnZSB0aGF0IGhhcworICogYXQgbGVhc3Qgb25lIG1hdGNoaW5nIGl0 ZW0uICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcyBpbiB0aGUKKyAqIGdpdmVu IHNjYW4gZGlyZWN0aW9uLCB3ZSBqdXN0IHJldHVybiBOVUxMLgogICoKLSAqIElmIHRoZXJlIGFy ZSBubyBtb3JlIG1hdGNoaW5nIHJlY29yZHMgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiwgd2UgaW52 YWxpZGF0ZQotICogc28tPmN1cnJQb3MgKHdoaWxlIGVuc3VyaW5nIGl0IHJldGFpbnMgbm8gbG9j a3Mgb3IgcGlucyksIGFuZCByZXR1cm4gZmFsc2UuCi0gKgotICogV2UgYWx3YXlzIHJlbGVhc2Ug dGhlIHNjYW4gZm9yIGEgcGFyYWxsZWwgc2NhbiBjYWxsZXIsIHJlZ2FyZGxlc3Mgb2YKLSAqIHN1 Y2Nlc3Mgb3IgZmFpbHVyZTsgd2UnbGwgY2FsbCBfYnRfcGFyYWxsZWxfcmVsZWFzZSBhcyBzb29u IGFzIHBvc3NpYmxlLgorICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3Qgc2VpemUgdGhlIHNj YW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4gIGJsa25vIGFuZAorICogbGFzdGN1cnJibGtubyBzaG91 bGQgY29tZSBmcm9tIHRoZSBzZWl6ZWQgc2Nhbi4gIFdlJ2xsIHJlbGVhc2UgdGhlIHNjYW4gYXMK KyAqIHNvb24gYXMgcG9zc2libGUuCiAgKi8KLXN0YXRpYyBib29sCitzdGF0aWMgQmF0Y2hJbmRl eFNjYW4KIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBi bGtubywKLQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIs IGJvb2wgc2VpemVkKQorCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0 aW9uIGRpciwgYm9vbCBmaXJzdHBhZ2UpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhS ZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7 CisJQmF0Y2hJbmRleFNjYW4gbmV3YmF0Y2g7CiAKLQlBc3NlcnQoc28tPmN1cnJQb3MuY3VyclBh Z2UgPT0gbGFzdGN1cnJibGtubyB8fCBzZWl6ZWQpOwotCUFzc2VydCghKGJsa25vID09IFBfTk9O RSAmJiBzZWl6ZWQpKTsKLQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7 CisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIG5leHQgYmF0Y2ggKi8KKwluZXdiYXRjaCA9IGluZGV4 YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuKTsKIAogCS8qCi0JICogUmVtZW1iZXIgdGhhdCB0aGUg c2NhbiBhbHJlYWR5IHJlYWQgbGFzdGN1cnJibGtubywgYSBwYWdlIHRvIHRoZSBsZWZ0Ci0JICog b2YgYmxrbm8gKG9yIHJlbWVtYmVyIHJlYWRpbmcgYSBwYWdlIHRvIHRoZSByaWdodCwgZm9yIGJh Y2t3YXJkcyBzY2FucykKKwkgKiBuZXdiYXRjaCB3aWxsIGJlIHRoZSBiYXRjaCBmb3IgbGFzdGN1 cnJibGtubywgYSBwYWdlIHRvIHRoZSBsZWZ0IG9mCisJICogYmxrbm8gKG9yIHRvIHRoZSByaWdo dCwgd2hlbiB0aGUgc2NhbiBpcyBtb3ZpbmcgYmFja3dhcmRzKQogCSAqLwotCWlmIChTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQll bHNlCi0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJbmV3YmF0Y2gtPm1vcmVMZWZ0 ID0gdHJ1ZTsKKwluZXdiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAogCWZvciAoOzspCiAJewog CQlQYWdlCQlwYWdlOwogCQlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCi0JCWlmIChibGtubyA9PSBQ X05PTkUgfHwKLQkJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPwotCQkJICFzby0+Y3Vy clBvcy5tb3JlUmlnaHQgOiAhc28tPmN1cnJQb3MubW9yZUxlZnQpKQotCQl7Ci0JCQkvKiBtb3N0 IHJlY2VudCBfYnRfcmVhZHBhZ2UgY2FsbCAoZm9yIGxhc3RjdXJyYmxrbm8pIGVuZGVkIHNjYW4g Ki8KLQkJCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0Y3VycmJsa25vICYmICFz ZWl6ZWQpOwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQlfYnRfcGFy YWxsZWxfZG9uZShzY2FuKTsJLyogaWZmICFzby0+bmVlZFByaW1TY2FuICovCi0JCQlyZXR1cm4g ZmFsc2U7Ci0JCX0KLQotCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwotCi0JCS8qIHBhcmFs bGVsIHNjYW4gbXVzdCBuZXZlciBhY3R1YWxseSB2aXNpdCBzby0+Y3VyclBvcyBibGtubyAqLwot CQlpZiAoIXNlaXplZCAmJiBzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKLQkJCSFfYnRf cGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQotCQl7 Ci0JCQkvKiB3aG9sZSBzY2FuIGlzIG5vdyBkb25lIChvciBhbm90aGVyIHByaW1pdGl2ZSBzY2Fu IHJlcXVpcmVkKSAqLwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQly ZXR1cm4gZmFsc2U7Ci0JCX0KKwkJQXNzZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVl KS0+bmVlZFByaW1TY2FuKTsKKwkJQXNzZXJ0KGJsa25vICE9IFBfTk9ORSAmJiBsYXN0Y3VycmJs a25vICE9IFBfTk9ORSk7CiAKIAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJ ewogCQkJLyogcmVhZCBibGtubywgYnV0IGNoZWNrIGZvciBpbnRlcnJ1cHRzIGZpcnN0ICovCiAJ CQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQkJc28tPmN1cnJQb3MuYnVmID0gX2J0X2dldGJ1 ZihyZWwsIGJsa25vLCBCVF9SRUFEKTsKKwkJCW5ld2JhdGNoLT5idWYgPSBfYnRfZ2V0YnVmKHJl bCwgYmxrbm8sIEJUX1JFQUQpOwogCQl9CiAJCWVsc2UKIAkJewogCQkJLyogcmVhZCBibGtubywg YXZvaWRpbmcgcmFjZSAoYWxzbyBjaGVja3MgZm9yIGludGVycnVwdHMpICovCi0JCQlzby0+Y3Vy clBvcy5idWYgPSBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChyZWwsICZibGtubywKLQkJCQkJ CQkJCQkJCQkJIGxhc3RjdXJyYmxrbm8pOwotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBJbnZh bGlkQnVmZmVyKQorCQkJbmV3YmF0Y2gtPmJ1ZiA9IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0 KHJlbCwgJmJsa25vLAorCQkJCQkJCQkJCQkJCSAgIGxhc3RjdXJyYmxrbm8pOworCQkJaWYgKG5l d2JhdGNoLT5idWYgPT0gSW52YWxpZEJ1ZmZlcikKIAkJCXsKIAkJCQkvKiBtdXN0IGhhdmUgYmVl biBhIGNvbmN1cnJlbnQgZGVsZXRpb24gb2YgbGVmdG1vc3QgcGFnZSAqLwotCQkJCUJUU2NhblBv c0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCQkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwot CQkJCXJldHVybiBmYWxzZTsKKwkJCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBu ZXdiYXRjaCk7CisJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAJCX0KIAotCQlwYWdlID0gQnVmZmVy R2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCQlwYWdlID0gQnVmZmVyR2V0UGFnZShuZXdiYXRj aC0+YnVmKTsKIAkJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwogCQlsYXN0Y3VycmJs a25vID0gYmxrbm87CiAJCWlmIChsaWtlbHkoIVBfSUdOT1JFKG9wYXF1ZSkpKQpAQCAtMTkxMSwx NyArMTc2MSwxNyBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tO dW1iZXIgYmxrbm8sCiAJCQkvKiBzZWUgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGVzIG9uIHRoaXMg cGFnZSAqLwogCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJCXsKLQkJCQkv KiBub3RlIHRoYXQgdGhpcyB3aWxsIGNsZWFyIG1vcmVSaWdodCBpZiB3ZSBjYW4gc3RvcCAqLwot CQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZGlyLCBQX0ZJUlNUREFUQUtFWShvcGFxdWUpLCBz ZWl6ZWQpKQorCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgbmV3YmF0Y2gsIGRpciwKKwkJCQkJ CQkJIFBfRklSU1REQVRBS0VZKG9wYXF1ZSksIGZpcnN0cGFnZSkpCiAJCQkJCWJyZWFrOwotCQkJ CWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7CisJCQkJYmxrbm8gPSBuZXdiYXRjaC0+bmV4 dFBhZ2U7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJLyogbm90ZSB0aGF0IHRoaXMgd2lsbCBj bGVhciBtb3JlTGVmdCBpZiB3ZSBjYW4gc3RvcCAqLwotCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2Nh biwgZGlyLCBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpLCBzZWl6ZWQpKQorCQkJCWlmIChf YnRfcmVhZHBhZ2Uoc2NhbiwgbmV3YmF0Y2gsIGRpciwKKwkJCQkJCQkJIFBhZ2VHZXRNYXhPZmZz ZXROdW1iZXIocGFnZSksIGZpcnN0cGFnZSkpCiAJCQkJCWJyZWFrOwotCQkJCWJsa25vID0gc28t PmN1cnJQb3MucHJldlBhZ2U7CisJCQkJYmxrbm8gPSBuZXdiYXRjaC0+cHJldlBhZ2U7CiAJCQl9 CiAJCX0KIAkJZWxzZQpAQCAtMTkzNiwxOSArMTc4NiwzOSBAQCBfYnRfcmVhZG5leHRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCX0KIAogCQkvKiBubyBtYXRj aGluZyB0dXBsZXMgb24gdGhpcyBwYWdlICovCi0JCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBv cy5idWYpOwotCQlzZWl6ZWQgPSBmYWxzZTsJCQkvKiByZWxlYXNlZCBieSBfYnRfcmVhZHBhZ2Ug KG9yIGJ5IHVzKSAqLworCQlfYnRfcmVsYnVmKHJlbCwgbmV3YmF0Y2gtPmJ1Zik7CisJCW5ld2Jh dGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCisJCS8qIENvbnRpbnVlIHRoZSBzY2FuIGluIHRo aXMgZGlyZWN0aW9uPyAqLworCQlpZiAoYmxrbm8gPT0gUF9OT05FIHx8CisJCQkoU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXIpID8KKwkJCSAhbmV3YmF0Y2gtPm1vcmVSaWdodCA6ICFuZXdiYXRj aC0+bW9yZUxlZnQpKQorCQl7CisJCQkvKgorCQkJICogYmxrbm8gX2J0X3JlYWRwYWdlIGNhbGwg ZW5kZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoIGlmCisJCQkgKiBzby0+bmVlZFBy aW1TY2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCQkg Ki8KKwkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQkJaW5kZXhhbV91dGlsX2JhdGNoX3Jl bGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQkvKiBwYXJh bGxlbCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8gKi8KKwkJaWYg KHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgorCQkJIV9idF9wYXJhbGxlbF9zZWl6ZShz Y2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJCXsKKwkJCWluZGV4YW1fdXRp bF9iYXRjaF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoKTsKKwkJCXJldHVybiBOVUxMOwkJLyogZG9u ZSBpZmYgc28tPm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisJCX0KKworCQlmaXJzdHBhZ2Ug PSBmYWxzZTsJCS8qIG5leHQgcGFnZSBjYW5ub3QgYmUgZmlyc3QgKi8KIAl9CiAKLQkvKgotCSAq IF9idF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBsb2NrIChhbmQgbWF5YmUgdGhlIHBp bikgb24KLQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRpb24gZm9yIGJ0Z2V0dHVwbGUg cmV0dXJuaW5nIHR1cGxlcy4KLQkgKi8KLQlBc3NlcnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0g Ymxrbm8pOwotCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwotCV9idF9k cm9wX2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKKwkvKiBfYnRfcmVhZHBhZ2Ugc2F2ZWQg b25lIG9yIG1vcmUgbWF0Y2hlcyBpbiBuZXdiYXRjaC5pdGVtc1tdICovCisJQXNzZXJ0KG5ld2Jh dGNoLT5jdXJyUGFnZSA9PSBibGtubyk7CisJaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhzY2Fu LCBuZXdiYXRjaCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbmV3YmF0Y2g7CiB9CiAKIC8q CkBAIC0yMTc0LDI1ICsyMDQ0LDIzIEBAIF9idF9nZXRfZW5kcG9pbnQoUmVsYXRpb24gcmVsLCB1 aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KQogICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11 c3QgaGF2ZSBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqIEV4aXQgY29u ZGl0aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIF9idF9maXJzdCgpLgogICovCi1zdGF0aWMgYm9v bAotX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitz dGF0aWMgQmF0Y2hJbmRleFNjYW4KK19idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLCBCYXRjaEluZGV4U2NhbiBmaXJzdGJhdGNoKQogewogCVJlbGF0aW9u CXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9w YXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVBhZ2UJCXBhZ2U7CiAJQlRQYWdlT3BhcXVlIG9wYXF1ZTsK IAlPZmZzZXROdW1iZXIgc3RhcnQ7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1 cnJQb3MpKTsKLQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOworCUFzc2VydCghKChCVFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZSktPm5lZWRQcmltU2Nhbik7CiAKIAkvKgogCSAqIFNjYW4gZG93 biB0byB0aGUgbGVmdG1vc3Qgb3IgcmlnaHRtb3N0IGxlYWYgcGFnZS4gIFRoaXMgaXMgYSBzaW1w bGlmaWVkCiAJICogdmVyc2lvbiBvZiBfYnRfc2VhcmNoKCkuCiAJICovCi0Jc28tPmN1cnJQb3Mu YnVmID0gX2J0X2dldF9lbmRwb2ludChyZWwsIDAsIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRp cikpOworCWZpcnN0YmF0Y2gtPmJ1ZiA9IF9idF9nZXRfZW5kcG9pbnQocmVsLCAwLCBTY2FuRGly ZWN0aW9uSXNCYWNrd2FyZChkaXIpKTsKIAotCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBv cy5idWYpKQorCWlmICghQnVmZmVySXNWYWxpZChmaXJzdGJhdGNoLT5idWYpKQogCXsKIAkJLyoK IAkJICogRW1wdHkgaW5kZXguIExvY2sgdGhlIHdob2xlIHJlbGF0aW9uLCBhcyBub3RoaW5nIGZp bmVyIHRvIGxvY2sKQEAgLTIyMDMsNyArMjA3MSw3IEBAIF9idF9lbmRwb2ludChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JcGFn ZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFn ZShmaXJzdGJhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKIAlB c3NlcnQoUF9JU0xFQUYob3BhcXVlKSk7CiAKQEAgLTIyMjksOSArMjA5Nyw1IEBAIF9idF9lbmRw b2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCS8qCiAJICogTm93 IGxvYWQgZGF0YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzY2FuLgogCSAqLwotCWlmICgh X2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgc3RhcnQsIGRpcikpCi0JCXJldHVybiBmYWxzZTsKLQot CV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gX2J0X3Jl YWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgc3RhcnQsIGRpcik7CiB9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHV0aWxzLmMKaW5kZXggNWM1MGYwZGQxLi5iNTA1ZDc4NzYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKQEAgLTIxLDE1ICsyMSwxMiBAQAogI2luY2x1ZGUg ImFjY2Vzcy9yZWxvcHRpb25zLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNs dWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgotI2luY2x1ZGUgImNvbW1vbi9pbnQuaCIKLSNpbmNs dWRlICJsaWIvcXVuaXF1ZS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInV0 aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRp bHMvcmVsLmgiCiAKIAotc3RhdGljIGludAlfYnRfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEs IGNvbnN0IHZvaWQgKnZiKTsKIHN0YXRpYyBpbnQJX2J0X2tlZXBfbmF0dHMoUmVsYXRpb24gcmVs LCBJbmRleFR1cGxlIGxhc3RsZWZ0LAogCQkJCQkJICAgSW5kZXhUdXBsZSBmaXJzdHJpZ2h0LCBC VFNjYW5JbnNlcnQgaXR1cF9rZXkpOwogCkBAIC0xNjAsMTA0ICsxNTcsNjkgQEAgX2J0X2ZyZWVz dGFjayhCVFN0YWNrIHN0YWNrKQogCX0KIH0KIAotLyoKLSAqIHFzb3J0IGNvbXBhcmlzb24gZnVu Y3Rpb24gZm9yIGludCBhcnJheXMKLSAqLwotc3RhdGljIGludAotX2J0X2NvbXBhcmVfaW50KGNv bnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YikKLXsKLQlpbnQJCQlhID0gKigoY29uc3QgaW50 ICopIHZhKTsKLQlpbnQJCQliID0gKigoY29uc3QgaW50ICopIHZiKTsKLQotCXJldHVybiBwZ19j bXBfczMyKGEsIGIpOwotfQotCiAvKgogICogX2J0X2tpbGxpdGVtcyAtIHNldCBMUF9ERUFEIHN0 YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwogICogdG9sZCB1cyB3ZXJlIGtp bGxlZAogICoKLSAqIHNjYW4tPm9wYXF1ZSwgcmVmZXJlbmNlZCBsb2NhbGx5IHRocm91Z2ggc28s IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICogY3VycmVudCBwYWdlIGFuZCBraWxs ZWQgdHVwbGVzIHRoZXJlb24gKGdlbmVyYWxseSwgdGhpcyBzaG91bGQgb25seSBiZQotICogY2Fs bGVkIGlmIHNvLT5udW1LaWxsZWQgPiAwKS4KKyAqIFRoZSBiYXRjaCBwYXJhbWV0ZXIgY29udGFp bnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkCisgKiB0dXBs ZXMgdGhlcmVvbiAodGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgYmF0Y2gtPm51bUtpbGxl ZCA+IDApLgogICoKLSAqIENhbGxlciBzaG91bGQgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBzby0+ Y3VyclBvcyBwYWdlLCBidXQgbXVzdCBob2xkIGEKLSAqIGJ1ZmZlciBwaW4gd2hlbiAhc28tPmRy b3BQaW4uICBXaGVuIHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9ja2VkLgotICogSXQn bGwgY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBiZWZvcmUgY2FsbGlu ZyBoZXJlLgorICogQ2FsbGVyIHNob3VsZCBub3QgaGF2ZSBhIGxvY2sgb24gdGhlIGJhdGNoIHBv c2l0aW9uJ3MgcGFnZSwgYnV0IG11c3QgaG9sZCBhCisgKiBidWZmZXIgcGluIHdoZW4gIWRyb3BQ aW4uICBXaGVuIHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9ja2VkLiAgSXQnbGwKKyAq IGNvbnRpbnVlIHRvIGhvbGQgd2hhdGV2ZXIgcGlucyB3ZXJlIGhlbGQgYmVmb3JlIGNhbGxpbmcg aGVyZS4KICAqCiAgKiBXZSBtYXRjaCBpdGVtcyBieSBoZWFwIFRJRCBiZWZvcmUgYXNzdW1pbmcg dGhleSBhcmUgdGhlIHJpZ2h0IG9uZXMgdG8gc2V0CiAgKiBMUF9ERUFELiAgSWYgdGhlIHNjYW4g aXMgb25lIHRoYXQgaG9sZHMgYSBidWZmZXIgcGluIG9uIHRoZSB0YXJnZXQgcGFnZQogICogY29u dGludW91c2x5IGZyb20gaW5pdGlhbGx5IHJlYWRpbmcgdGhlIGl0ZW1zIHVudGlsIGFwcGx5aW5n IHRoaXMgZnVuY3Rpb24KLSAqIChpZiBpdCBpcyBhICFzby0+ZHJvcFBpbiBzY2FuKSwgVkFDVVVN IGNhbm5vdCBoYXZlIGRlbGV0ZWQgYW55IGl0ZW1zIG9uIHRoZQorICogKGlmIGl0IGlzIGEgIWRy b3BQaW4gc2NhbiksIFZBQ1VVTSBjYW5ub3QgaGF2ZSBkZWxldGVkIGFueSBpdGVtcyBvbiB0aGUK ICAqIHBhZ2UsIHNvIHRoZSBwYWdlJ3MgVElEcyBjYW4ndCBoYXZlIGJlZW4gcmVjeWNsZWQgYnkg bm93LiAgVGhlcmUncyBubyByaXNrCiAgKiB0aGF0IHdlJ2xsIGNvbmZ1c2UgYSBuZXcgaW5kZXgg dHVwbGUgdGhhdCBoYXBwZW5zIHRvIHVzZSBhIHJlY3ljbGVkIFRJRAogICogd2l0aCBhIG5vdy1y ZW1vdmVkIHR1cGxlIHdpdGggdGhlIHNhbWUgVElEICh0aGF0IHVzZWQgdG8gYmUgb24gdGhpcyBz YW1lCiAgKiBwYWdlKS4gIFdlIGNhbid0IHJlbHkgb24gdGhhdCBkdXJpbmcgc2NhbnMgdGhhdCBk cm9wIGJ1ZmZlciBwaW5zIGVhZ2VybHkKLSAqIChzby0+ZHJvcFBpbiBzY2FucyksIHRob3VnaCwg c28gd2UgbXVzdCBjb25kaXRpb24gc2V0dGluZyBMUF9ERUFEIGJpdHMgb24KKyAqIChpLmUuIGRy b3BQaW4gc2NhbnMpLCB0aG91Z2gsIHNvIHdlIG11c3QgY29uZGl0aW9uIHNldHRpbmcgTFBfREVB RCBiaXRzIG9uCiAgKiB0aGUgcGFnZSBMU04gaGF2aW5nIG5vdCBjaGFuZ2VkIHNpbmNlIGJhY2sg d2hlbiBfYnRfcmVhZHBhZ2Ugc2F3IHRoZSBwYWdlLgogICogV2UgdG90YWxseSBnaXZlIHVwIG9u IHNldHRpbmcgTFBfREVBRCBiaXRzIHdoZW4gdGhlIHBhZ2UgTFNOIGNoYW5nZWQuCiAgKgotICog V2UgZ2l2ZSB1cCBtdWNoIGxlc3Mgb2Z0ZW4gZHVyaW5nICFzby0+ZHJvcFBpbiBzY2FucywgYnV0 IGl0IHN0aWxsIGhhcHBlbnMuCisgKiBXZSB0ZW5kIHRvIGdpdmUgdXAgbGVzcyBvZnRlbiBkdXJp bmcgIWRyb3BQaW4gc2NhbnMsIGJ1dCBpdCBzdGlsbCBoYXBwZW5zLgogICogV2UgY29wZSB3aXRo IGNhc2VzIHdoZXJlIGl0ZW1zIGhhdmUgbW92ZWQgcmlnaHQgZHVlIHRvIGluc2VydGlvbnMuICBJ ZiBhbgogICogaXRlbSBoYXMgbW92ZWQgb2ZmIHRoZSBjdXJyZW50IHBhZ2UgZHVlIHRvIGEgc3Bs aXQsIHdlJ2xsIGZhaWwgdG8gZmluZCBpdAogICogYW5kIGp1c3QgZ2l2ZSB1cCBvbiBpdC4KICAq Lwogdm9pZAotX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCitfYnRfa2lsbGl0ZW1z KEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpCiB7CiAJUmVsYXRpb24J cmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3Bh cXVlKSBzY2FuLT5vcGFxdWU7CiAJUGFnZQkJcGFnZTsKIAlCVFBhZ2VPcGFxdWUgb3BhcXVlOwog CU9mZnNldE51bWJlciBtaW5vZmY7CiAJT2Zmc2V0TnVtYmVyIG1heG9mZjsKLQlpbnQJCQludW1L aWxsZWQgPSBzby0+bnVtS2lsbGVkOwogCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZhbHNlOwog CUJ1ZmZlcgkJYnVmOwogCi0JQXNzZXJ0KG51bUtpbGxlZCA+IDApOwotCUFzc2VydChCVFNjYW5Q b3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7CisJQXNzZXJ0KGJhdGNoLT5udW1LaWxsZWQgPiAwKTsK KwlBc3NlcnQoQmxvY2tOdW1iZXJJc1ZhbGlkKGJhdGNoLT5jdXJyUGFnZSkpOwogCUFzc2VydChz Y2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7IC8qIGNhbid0IGJlIGEgYml0bWFwIGluZGV4IHNj YW4gKi8KIAotCS8qIEFsd2F5cyBpbnZhbGlkYXRlIHNvLT5raWxsZWRJdGVtc1tdIGJlZm9yZSBs ZWF2aW5nIHNvLT5jdXJyUG9zICovCi0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KLQkvKgotCSAqIFdl IG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHNvLT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFnZSBv cmRlcjsgdGhlCi0JICogbG9vcCBiZWxvdyBleHBlY3RzIHRoaXMgKHdoZW4gbWFya2luZyBwb3N0 aW5nIGxpc3QgdHVwbGVzLCBhdCBsZWFzdCkuCi0JICogc28tPmtpbGxlZEl0ZW1zW10gaXMgbm93 IGluIHdoYXRldmVyIG9yZGVyIHRoZSBzY2FuIHJldHVybmVkIGl0ZW1zIGluLgotCSAqIFNjcm9s bGFibGUgY3Vyc29yIHNjYW5zIG1pZ2h0IGhhdmUgZXZlbiBzYXZlZCB0aGUgc2FtZSBpdGVtL1RJ RCB0d2ljZS4KLQkgKgotCSAqIFNvcnQgYW5kIHVuaXF1ZS1pZnkgc28tPmtpbGxlZEl0ZW1zW10g dG8gZGVhbCB3aXRoIGFsbCB0aGlzLgotCSAqLwotCWlmIChudW1LaWxsZWQgPiAxKQotCXsKLQkJ cXNvcnQoc28tPmtpbGxlZEl0ZW1zLCBudW1LaWxsZWQsIHNpemVvZihpbnQpLCBfYnRfY29tcGFy ZV9pbnQpOwotCQludW1LaWxsZWQgPSBxdW5pcXVlKHNvLT5raWxsZWRJdGVtcywgbnVtS2lsbGVk LCBzaXplb2YoaW50KSwKLQkJCQkJCQlfYnRfY29tcGFyZV9pbnQpOwotCX0KLQotCWlmICghc28t PmRyb3BQaW4pCisJaWYgKCFzY2FuLT5kcm9wUGluKQogCXsKIAkJLyoKIAkJICogV2UgaGF2ZSBo ZWxkIHRoZSBwaW4gb24gdGhpcyBwYWdlIHNpbmNlIHdlIHJlYWQgdGhlIGluZGV4IHR1cGxlcywK IAkJICogc28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbG9jayBpdC4gIFRoZSBwaW4gd2lsbCBoYXZl IHByZXZlbnRlZAogCQkgKiBjb25jdXJyZW50IFZBQ1VVTXMgZnJvbSByZWN5Y2xpbmcgYW55IG9m IHRoZSBUSURzIG9uIHRoZSBwYWdlLgogCQkgKi8KLQkJQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVk KHNvLT5jdXJyUG9zKSk7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKKwkJYnVmID0gYmF0Y2gt PmJ1ZjsKIAkJX2J0X2xvY2tidWYocmVsLCBidWYsIEJUX1JFQUQpOwogCX0KIAllbHNlCiAJewog CQlYTG9nUmVjUHRyCWxhdGVzdGxzbjsKIAotCQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNv LT5jdXJyUG9zKSk7CiAJCUFzc2VydChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpOwotCQlidWYgPSBf YnRfZ2V0YnVmKHJlbCwgc28tPmN1cnJQb3MuY3VyclBhZ2UsIEJUX1JFQUQpOworCQlidWYgPSBf YnRfZ2V0YnVmKHJlbCwgYmF0Y2gtPmN1cnJQYWdlLCBCVF9SRUFEKTsKIAogCQlsYXRlc3Rsc24g PSBCdWZmZXJHZXRMU05BdG9taWMoYnVmKTsKLQkJQXNzZXJ0KHNvLT5jdXJyUG9zLmxzbiA8PSBs YXRlc3Rsc24pOwotCQlpZiAoc28tPmN1cnJQb3MubHNuICE9IGxhdGVzdGxzbikKKwkJQXNzZXJ0 KGJhdGNoLT5sc24gPD0gbGF0ZXN0bHNuKTsKKwkJaWYgKGJhdGNoLT5sc24gIT0gbGF0ZXN0bHNu KQogCQl7CiAJCQkvKiBNb2RpZmllZCwgZ2l2ZSB1cCBvbiBoaW50aW5nICovCiAJCQlfYnRfcmVs YnVmKHJlbCwgYnVmKTsKQEAgLTI3MiwxNyArMjM0LDE2IEBAIF9idF9raWxsaXRlbXMoSW5kZXhT Y2FuRGVzYyBzY2FuKQogCW1pbm9mZiA9IFBfRklSU1REQVRBS0VZKG9wYXF1ZSk7CiAJbWF4b2Zm ID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKIAotCS8qIEl0ZXJhdGUgdGhyb3VnaCBz by0+a2lsbGVkSXRlbXNbXSBpbiBsZWFmIHBhZ2Ugb3JkZXIgKi8KLQlmb3IgKGludCBpID0gMDsg aSA8IG51bUtpbGxlZDsgaSsrKQorCS8qIEl0ZXJhdGUgdGhyb3VnaCBiYXRjaC0+a2lsbGVkSXRl bXNbXSBpbiBsZWFmIHBhZ2Ugb3JkZXIgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IGJhdGNoLT5u dW1LaWxsZWQ7IGkrKykKIAl7Ci0JCWludAkJCWl0ZW1JbmRleCA9IHNvLT5raWxsZWRJdGVtc1tp XTsKLQkJQlRTY2FuUG9zSXRlbSAqa2l0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4 XTsKKwkJaW50CQkJaXRlbUluZGV4ID0gYmF0Y2gtPmtpbGxlZEl0ZW1zW2ldOworCQlCYXRjaE1h dGNoaW5nSXRlbSAqa2l0ZW0gPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAJCU9mZnNldE51 bWJlciBvZmZudW0gPSBraXRlbS0+aW5kZXhPZmZzZXQ7CiAKLQkJQXNzZXJ0KGl0ZW1JbmRleCA+ PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0gJiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+Y3VyclBv cy5sYXN0SXRlbSk7CisJCUFzc2VydChpdGVtSW5kZXggPj0gYmF0Y2gtPmZpcnN0SXRlbSAmJiBp dGVtSW5kZXggPD0gYmF0Y2gtPmxhc3RJdGVtKTsKIAkJQXNzZXJ0KGkgPT0gMCB8fAotCQkJICAg b2ZmbnVtID49IHNvLT5jdXJyUG9zLml0ZW1zW3NvLT5raWxsZWRJdGVtc1tpIC0gMV1dLmluZGV4 T2Zmc2V0KTsKKwkJCSAgIG9mZm51bSA+PSBiYXRjaC0+aXRlbXNbYmF0Y2gtPmtpbGxlZEl0ZW1z W2kgLSAxXV0uaW5kZXhPZmZzZXQpOwogCiAJCWlmIChvZmZudW0gPCBtaW5vZmYpCiAJCQljb250 aW51ZTsJCQkvKiBwdXJlIHBhcmFub2lhICovCkBAIC0zMDAsNyArMjYxLDcgQEAgX2J0X2tpbGxp dGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAKIAkJCQkvKgogCQkJCSAqIE5vdGUgdGhhdCB0aGUg cGFnZSBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIGluIGFsbW9zdCBhbnkgd2F5Ci0JCQkJICogc2lu Y2Ugd2UgZmlyc3QgcmVhZCBpdCAoaW4gdGhlICFzby0+ZHJvcFBpbiBjYXNlKSwgc28gaXQncwor CQkJCSAqIHNpbmNlIHdlIGZpcnN0IHJlYWQgaXQgKGluIHRoZSAhZHJvcFBpbiBjYXNlKSwgc28g aXQncwogCQkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBwb3N0aW5nIGxpc3QgdHVwbGUgd2Fzbid0 IGEgcG9zdGluZyBsaXN0CiAJCQkJICogdHVwbGUgd2hlbiB3ZSBmaXJzdCBlbmNvdW50ZXJlZCBp dHMgaGVhcCBUSURzLgogCQkJCSAqLwpAQCAtMzE2LDcgKzI3Nyw3IEBAIF9idF9raWxsaXRlbXMo SW5kZXhTY2FuRGVzYyBzY2FuKQogCQkJCQkgKiB0aG91Z2ggb25seSBpbiB0aGUgY29tbW9uIGNh c2Ugd2hlcmUgdGhlIHBhZ2UgY2FuJ3QKIAkJCQkJICogaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBt b2RpZmllZAogCQkJCQkgKi8KLQkJCQkJQXNzZXJ0KGtpdGVtLT5pbmRleE9mZnNldCA9PSBvZmZu dW0gfHwgIXNvLT5kcm9wUGluKTsKKwkJCQkJQXNzZXJ0KGtpdGVtLT5pbmRleE9mZnNldCA9PSBv ZmZudW0gfHwgIXNjYW4tPmRyb3BQaW4pOwogCiAJCQkJCS8qCiAJCQkJCSAqIFJlYWQtYWhlYWQg dG8gbGF0ZXIga2l0ZW1zIGhlcmUuCkBAIC0zMzIsOCArMjkzLDggQEAgX2J0X2tpbGxpdGVtcyhJ bmRleFNjYW5EZXNjIHNjYW4pCiAJCQkJCSAqIGtpdGVtIGlzIGFsc28gdGhlIGxhc3QgaGVhcCBU SUQgaW4gdGhlIGxhc3QgaW5kZXggdHVwbGUKIAkJCQkJICogY29ycmVjdGx5IC0tIHBvc3Rpbmcg dHVwbGUgc3RpbGwgZ2V0cyBraWxsZWQpLgogCQkJCQkgKi8KLQkJCQkJaWYgKHBpIDwgbnVtS2ls bGVkKQotCQkJCQkJa2l0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmtpbGxlZEl0ZW1zW3Bp KytdXTsKKwkJCQkJaWYgKHBpIDwgYmF0Y2gtPm51bUtpbGxlZCkKKwkJCQkJCWtpdGVtID0gJmJh dGNoLT5pdGVtc1tiYXRjaC0+a2lsbGVkSXRlbXNbcGkrK11dOwogCQkJCX0KIAogCQkJCS8qCkBA IC0zODMsNyArMzQ0LDcgQEAgX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCU1h cmtCdWZmZXJEaXJ0eUhpbnQoYnVmLCB0cnVlKTsKIAl9CiAKLQlpZiAoIXNvLT5kcm9wUGluKQor CWlmICghc2Nhbi0+ZHJvcFBpbikKIAkJX2J0X3VubG9ja2J1ZihyZWwsIGJ1Zik7CiAJZWxzZQog CQlfYnRfcmVsYnVmKHJlbCwgYnVmKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9z cGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwpp bmRleCA5ZjUzNzliODcuLmExOGEyZmE5ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L3NwZ2lzdC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRp bHMuYwpAQCAtODgsMTAgKzg4LDExIEBAIHNwZ2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJ LmFtYmVnaW5zY2FuID0gc3BnYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBzcGdyZXNjYW4sCiAJ CS5hbWdldHR1cGxlID0gc3BnZ2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFt ZnJlZWJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gc3BnZ2V0Yml0bWFwLAogCQkuYW1l bmRzY2FuID0gc3BnZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9z ID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2Nh biA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJl c2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggYjdiYjExMTY4Li5lYTBhZGQx YzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTEzNSw3ICsxMzUsNyBAQCBzdGF0aWMgdm9p ZCBzaG93X3JlY3Vyc2l2ZV91bmlvbl9pbmZvKFJlY3Vyc2l2ZVVuaW9uU3RhdGUgKnJzdGF0ZSwK IHN0YXRpYyB2b2lkIHNob3dfbWVtb2l6ZV9pbmZvKE1lbW9pemVTdGF0ZSAqbXN0YXRlLCBMaXN0 ICphbmNlc3RvcnMsCiAJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIHNo b3dfaGFzaGFnZ19pbmZvKEFnZ1N0YXRlICphZ2dzdGF0ZSwgRXhwbGFpblN0YXRlICplcyk7Ci1z dGF0aWMgdm9pZCBzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwg RXhwbGFpblN0YXRlICplcyk7CitzdGF0aWMgdm9pZCBzaG93X2luZGV4c2Nhbl9pbmZvKFBsYW5T dGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIHNob3dfdGlk Yml0bWFwX2luZm8oQml0bWFwSGVhcFNjYW5TdGF0ZSAqcGxhbnN0YXRlLAogCQkJCQkJCQlFeHBs YWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIHNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50KGNv bnN0IGNoYXIgKnFsYWJlbCwgaW50IHdoaWNoLApAQCAtMTk3Miw3ICsxOTcyLDcgQEAgRXhwbGFp bk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCWlmIChwbGFu LT5xdWFsKQogCQkJCXNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50KCJSb3dzIFJlbW92ZWQgYnkg RmlsdGVyIiwgMSwKIAkJCQkJCQkJCQkgICBwbGFuc3RhdGUsIGVzKTsKLQkJCXNob3dfaW5kZXhz ZWFyY2hlc19pbmZvKHBsYW5zdGF0ZSwgZXMpOworCQkJc2hvd19pbmRleHNjYW5faW5mbyhwbGFu c3RhdGUsIGVzKTsKIAkJCWJyZWFrOwogCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKIAkJCXNob3df c2Nhbl9xdWFsKCgoSW5kZXhPbmx5U2NhbiAqKSBwbGFuKS0+aW5kZXhxdWFsLApAQCAtMTk4Niwx NSArMTk4NiwxMiBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5j ZXN0b3JzLAogCQkJaWYgKHBsYW4tPnF1YWwpCiAJCQkJc2hvd19pbnN0cnVtZW50YXRpb25fY291 bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAogCQkJCQkJCQkJCSAgIHBsYW5zdGF0ZSwg ZXMpOwotCQkJaWYgKGVzLT5hbmFseXplKQotCQkJCUV4cGxhaW5Qcm9wZXJ0eUZsb2F0KCJIZWFw IEZldGNoZXMiLCBOVUxMLAotCQkJCQkJCQkJIHBsYW5zdGF0ZS0+aW5zdHJ1bWVudC0+bnR1cGxl czIsIDAsIGVzKTsKLQkJCXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0ZSwgZXMpOwor CQkJc2hvd19pbmRleHNjYW5faW5mbyhwbGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFrOwogCQljYXNl IFRfQml0bWFwSW5kZXhTY2FuOgogCQkJc2hvd19zY2FuX3F1YWwoKChCaXRtYXBJbmRleFNjYW4g KikgcGxhbiktPmluZGV4cXVhbG9yaWcsCiAJCQkJCQkgICAiSW5kZXggQ29uZCIsIHBsYW5zdGF0 ZSwgYW5jZXN0b3JzLCBlcyk7Ci0JCQlzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhwbGFuc3RhdGUs IGVzKTsKKwkJCXNob3dfaW5kZXhzY2FuX2luZm8ocGxhbnN0YXRlLCBlcyk7CiAJCQlicmVhazsK IAkJY2FzZSBUX0JpdG1hcEhlYXBTY2FuOgogCQkJc2hvd19zY2FuX3F1YWwoKChCaXRtYXBIZWFw U2NhbiAqKSBwbGFuKS0+Yml0bWFwcXVhbG9yaWcsCkBAIC0zODU4LDE1ICszODU1LDE2IEBAIHNo b3dfaGFzaGFnZ19pbmZvKEFnZ1N0YXRlICphZ2dzdGF0ZSwgRXhwbGFpblN0YXRlICplcykKIH0K IAogLyoKLSAqIFNob3cgdGhlIHRvdGFsIG51bWJlciBvZiBpbmRleCBzZWFyY2hlcyBmb3IgYQor ICogU2hvdyBpbmRleCBzY2FuIHJlbGF0ZWQgZXhlY3V0b3IgaW5zdHJ1bWVudGF0aW9uIGZvciBh CiAgKiBJbmRleFNjYW4vSW5kZXhPbmx5U2Nhbi9CaXRtYXBJbmRleFNjYW4gbm9kZQogICovCiBz dGF0aWMgdm9pZAotc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUs IEV4cGxhaW5TdGF0ZSAqZXMpCitzaG93X2luZGV4c2Nhbl9pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0 YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogewogCVBsYW4JICAgKnBsYW4gPSBwbGFuc3RhdGUtPnBs YW47CiAJU2hhcmVkSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICpTaGFyZWRJbmZvID0gTlVMTDsK LQl1aW50NjQJCW5zZWFyY2hlcyA9IDA7CisJdWludDY0CQluc2VhcmNoZXMgPSAwLAorCQkJCW5o ZWFwZmV0Y2hlcyA9IDA7CiAKIAlpZiAoIWVzLT5hbmFseXplKQogCQlyZXR1cm47CkBAIC0zODg3 LDYgKzM4ODUsNyBAQCBzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0 ZSwgRXhwbGFpblN0YXRlICplcykKIAkJCQlJbmRleE9ubHlTY2FuU3RhdGUgKmluZGV4c3RhdGUg PSAoKEluZGV4T25seVNjYW5TdGF0ZSAqKSBwbGFuc3RhdGUpOwogCiAJCQkJbnNlYXJjaGVzID0g aW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50Lm5zZWFyY2hlczsKKwkJCQluaGVhcGZldGNoZXMg PSBpbmRleHN0YXRlLT5pb3NzX0luc3RydW1lbnQubmhlYXBmZXRjaGVzOwogCQkJCVNoYXJlZElu Zm8gPSBpbmRleHN0YXRlLT5pb3NzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0z OTEwLDkgKzM5MDksMTMgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFu c3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKndp bnN0cnVtZW50ID0gJlNoYXJlZEluZm8tPndpbnN0cnVtZW50W2ldOwogCiAJCQluc2VhcmNoZXMg Kz0gd2luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJCW5oZWFwZmV0Y2hlcyArPSB3aW5zdHJ1bWVu dC0+bmhlYXBmZXRjaGVzOwogCQl9CiAJfQogCisJaWYgKG5vZGVUYWcocGxhbikgPT0gVF9JbmRl eE9ubHlTY2FuKQorCQlFeHBsYWluUHJvcGVydHlVSW50ZWdlcigiSGVhcCBGZXRjaGVzIiwgTlVM TCwgbmhlYXBmZXRjaGVzLCBlcyk7CisKIAlFeHBsYWluUHJvcGVydHlVSW50ZWdlcigiSW5kZXgg U2VhcmNoZXMiLCBOVUxMLCBuc2VhcmNoZXMsIGVzKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNt ZHMuYwppbmRleCA2MzU2NzljYzEuLjU0YzI0MDNkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvaW5kZXhjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRz LmMKQEAgLTg4NCw3ICs4ODQsNyBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJ CQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2co ImFjY2VzcyBtZXRob2QgXCIlc1wiIGRvZXMgbm90IHN1cHBvcnQgbXVsdGljb2x1bW4gaW5kZXhl cyIsCiAJCQkJCQlhY2Nlc3NNZXRob2ROYW1lKSkpOwotCWlmIChleGNsdXNpb24gJiYgYW1Sb3V0 aW5lLT5hbWdldHR1cGxlID09IE5VTEwpCisJaWYgKGV4Y2x1c2lvbiAmJiBhbVJvdXRpbmUtPmFt Z2V0dHVwbGUgPT0gTlVMTCAmJiBhbVJvdXRpbmUtPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJZXJl cG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCks CiAJCQkJIGVycm1zZygiYWNjZXNzIG1ldGhvZCBcIiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBleGNs dXNpb24gY29uc3RyYWludHMiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0FtaS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCmluZGV4IDkwYTY4YzBkMS4u MGRmYjAxMzM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCkBAIC00MjgsNyArNDI4LDcgQEAgRXhl Y1N1cHBvcnRzTWFya1Jlc3RvcmUoUGF0aCAqcGF0aG5vZGUpCiAJCWNhc2UgVF9JbmRleE9ubHlT Y2FuOgogCiAJCQkvKgotCQkJICogTm90IGFsbCBpbmRleCB0eXBlcyBzdXBwb3J0IG1hcmsvcmVz dG9yZS4KKwkJCSAqIE5vdCBhbGwgaW5kZXggdHlwZXMgc3VwcG9ydCByZXN0b3JpbmcgYSBtYXJr CiAJCQkgKi8KIAkJCXJldHVybiBjYXN0Tm9kZShJbmRleFBhdGgsIHBhdGhub2RlKS0+aW5kZXhp bmZvLT5hbWNhbm1hcmtwb3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNJbmRleGluZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKaW5kZXgg NmFlMGY5NTk1Li4zMDQxZDVjNzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNJbmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBA IC04MTYsMTAgKzgxNiwxMiBAQCBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnQo UmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsCiByZXRyeToKIAljb25mbGljdCA9IGZhbHNl OwogCWZvdW5kX3NlbGYgPSBmYWxzZTsKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhl YXAsIGluZGV4LCAmRGlydHlTbmFwc2hvdCwgTlVMTCwgaW5kbmtleWF0dHMsIDApOworCWluZGV4 X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsIGZhbHNlLCAmRGlydHlTbmFwc2hv dCwgTlVMTCwKKwkJCQkJCQkJIGluZG5rZXlhdHRzLCAwKTsKIAlpbmRleF9yZXNjYW4oaW5kZXhf c2Nhbiwgc2NhbmtleXMsIGluZG5rZXlhdHRzLCBOVUxMLCAwKTsKIAotCXdoaWxlIChpbmRleF9n ZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGV4aXN0aW5nX3Ns b3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2Fy ZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQlleGlzdGluZ19zbG90KSkKIAl7CiAJCVRyYW5zYWN0 aW9uSWQgeHdhaXQ7CiAJCVhMVFdfT3BlcglyZWFzb25fd2FpdDsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1JlcGxpY2F0aW9uLmMKaW5kZXggNzJmMmJmZjc3Li5hYjQ4N2I5ZTYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCkBAIC0yMDUsNyArMjA1LDcgQEAgUmVsYXRpb25G aW5kUmVwbFR1cGxlQnlJbmRleChSZWxhdGlvbiByZWwsIE9pZCBpZHhvaWQsCiAJc2tleV9hdHRv ZmYgPSBidWlsZF9yZXBsaW5kZXhfc2Nhbl9rZXkoc2tleSwgcmVsLCBpZHhyZWwsIHNlYXJjaHNs b3QpOwogCiAJLyogU3RhcnQgYW4gaW5kZXggc2Nhbi4gKi8KLQlzY2FuID0gaW5kZXhfYmVnaW5z Y2FuKHJlbCwgaWR4cmVsLCAmc25hcCwgTlVMTCwgc2tleV9hdHRvZmYsIDApOworCXNjYW4gPSBp bmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIGZhbHNlLCAmc25hcCwgTlVMTCwgc2tleV9hdHRv ZmYsIDApOwogCiByZXRyeToKIAlmb3VuZCA9IGZhbHNlOwpAQCAtMjEzLDcgKzIxMyw3IEBAIHJl dHJ5OgogCWluZGV4X3Jlc2NhbihzY2FuLCBza2V5LCBza2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAK IAkvKiBUcnkgdG8gZmluZCB0aGUgdHVwbGUgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90 KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKKwl3aGlsZSAodGFibGVfaW5k ZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKIAl7 CiAJCS8qCiAJCSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXgg aXMgcHJpbWFyeSBrZXkgb3IKQEAgLTY2NiwxMiArNjY2LDEyIEBAIFJlbGF0aW9uRmluZERlbGV0 ZWRUdXBsZUluZm9CeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAkgKiBub3QgeWV0 IGNvbW1pdHRlZCBvciB0aG9zZSBqdXN0IGNvbW1pdHRlZCBwcmlvciB0byB0aGUgc2NhbiBhcmUK IAkgKiBleGNsdWRlZCBpbiB1cGRhdGVfbW9zdF9yZWNlbnRfZGVsZXRpb25faW5mbygpLgogCSAq LwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIFNuYXBzaG90QW55LCBOVUxM LCBza2V5X2F0dG9mZiwgMCk7CisJc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwg ZmFsc2UsIFNuYXBzaG90QW55LCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CiAKIAlpbmRleF9yZXNj YW4oc2Nhbiwgc2tleSwgc2tleV9hdHRvZmYsIE5VTEwsIDApOwogCiAJLyogVHJ5IHRvIGZpbmQg dGhlIHR1cGxlICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbiwgc2NhbnNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qo c2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNjYW5zbG90KSkKIAl7CiAJCS8qCiAJCSAqIEF2 b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXggaXMgcHJpbWFyeSBrZXkg b3IKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4u YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYwppbmRleCAwNThh NTllZjUuLjI1ODBhMDEzOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJp dG1hcEluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRl eHNjYW4uYwpAQCAtMjAyLDYgKzIwMiw3IEBAIEV4ZWNFbmRCaXRtYXBJbmRleFNjYW4oQml0bWFw SW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHdoaWNoIHdpbGwgaGF2ZSBhIG5ldyBCaXRtYXBJ bmRleFNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KIAkJd2luc3RydW1lbnQtPm5z ZWFyY2hlcyArPSBub2RlLT5iaXNzX0luc3RydW1lbnQubnNlYXJjaGVzOworCQlBc3NlcnQobm9k ZS0+Ymlzc19JbnN0cnVtZW50Lm5oZWFwZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKaW5kZXggYzJkMDkzNzQ1Li5mZjNlOGYz MDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtMzQsMTQg KzM0LDEyIEBACiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJhY2Nlc3Mv dGFibGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90dXBkZXNjLmgiCi0jaW5jbHVkZSAiYWNjZXNz L3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRl ICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVJbmRleG9ubHlz Y2FuLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5oIgogI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCi0jaW5jbHVkZSAic3RvcmFn ZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0 aWxzL3JlbC5oIgogCkBAIC02NSw3ICs2Myw2IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2Nh blN0YXRlICpub2RlKQogCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uOwogCUluZGV4U2NhbkRlc2Mg c2NhbmRlc2M7CiAJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7Ci0JSXRlbVBvaW50ZXIgdGlkOwogCiAJ LyoKIAkgKiBleHRyYWN0IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9k ZQpAQCAtOTAsMTggKzg3LDE0IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpu b2RlKQogCQkgKiBwYXJhbGxlbC4KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2Fu KG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+aW9zc19SZWxh dGlvbkRlc2MsCisJCQkJCQkJCSAgIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLCB0cnVlLAogCQkJ CQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICAmbm9kZS0+aW9zc19JbnN0 cnVtZW50LAogCQkJCQkJCQkgICBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgICBu b2RlLT5pb3NzX051bU9yZGVyQnlLZXlzKTsKIAogCQlub2RlLT5pb3NzX1NjYW5EZXNjID0gc2Nh bmRlc2M7Ci0KLQotCQkvKiBTZXQgaXQgdXAgZm9yIGluZGV4LW9ubHkgc2NhbiAqLwotCQlub2Rl LT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVlOwotCQlub2RlLT5pb3NzX1ZNQnVm ZmVyID0gSW52YWxpZEJ1ZmZlcjsKKwkJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dh bnRfaXR1cCk7CiAKIAkJLyoKIAkJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUg b3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZApAQCAtMTE4LDc4ICsxMTEsMTAgQEAgSW5k ZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJLyoKIAkgKiBPSywgbm93IHRo YXQgd2UgaGF2ZSB3aGF0IHdlIG5lZWQsIGZldGNoIHRoZSBuZXh0IHR1cGxlLgogCSAqLwotCXdo aWxlICgodGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbmRlc2MsIGRpcmVjdGlvbikpICE9IE5V TEwpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0aW9u LCBub2RlLT5pb3NzX1RhYmxlU2xvdCkpCiAJewotCQlib29sCQl0dXBsZV9mcm9tX2hlYXAgPSBm YWxzZTsKLQogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JCS8qCi0JCSAqIFdlIGNhbiBz a2lwIHRoZSBoZWFwIGZldGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhlYXAgcGFnZSBvbgot CQkgKiB3aGljaCBhbGwgdHVwbGVzIGFyZSBrbm93biB2aXNpYmxlIHRvIGV2ZXJ5Ym9keS4gIElu IGFueSBjYXNlLAotCQkgKiB3ZSdsbCB1c2UgdGhlIGluZGV4IHR1cGxlIG5vdCB0aGUgaGVhcCB0 dXBsZSBhcyB0aGUgZGF0YSBzb3VyY2UuCi0JCSAqCi0JCSAqIE5vdGUgb24gTWVtb3J5IE9yZGVy aW5nIEVmZmVjdHM6IHZpc2liaWxpdHltYXBfZ2V0X3N0YXR1cyBkb2VzIG5vdAotCQkgKiBsb2Nr IHRoZSB2aXNpYmlsaXR5IG1hcCBidWZmZXIsIGFuZCB0aGVyZWZvcmUgdGhlIHJlc3VsdCB3ZSBy ZWFkCi0JCSAqIGhlcmUgY291bGQgYmUgc2xpZ2h0bHkgc3RhbGUuICBIb3dldmVyLCBpdCBjYW4n dCBiZSBzdGFsZSBlbm91Z2ggdG8KLQkJICogbWF0dGVyLgotCQkgKgotCQkgKiBXZSBuZWVkIHRv IGRldGVjdCBjbGVhcmluZyBhIFZNIGJpdCBkdWUgdG8gYW4gaW5zZXJ0IHJpZ2h0IGF3YXksCi0J CSAqIGJlY2F1c2UgdGhlIHR1cGxlIGlzIHByZXNlbnQgaW4gdGhlIGluZGV4IHBhZ2UgYnV0IG5v dCB2aXNpYmxlLiBUaGUKLQkJICogcmVhZGluZyBvZiB0aGUgVElEIGJ5IHRoaXMgc2NhbiAodXNp bmcgYSBzaGFyZWQgbG9jayBvbiB0aGUgaW5kZXgKLQkJICogYnVmZmVyKSBpcyBzZXJpYWxpemVk IHdpdGggdGhlIGluc2VydCBvZiB0aGUgVElEIGludG8gdGhlIGluZGV4Ci0JCSAqICh1c2luZyBh biBleGNsdXNpdmUgbG9jayBvbiB0aGUgaW5kZXggYnVmZmVyKS4gQmVjYXVzZSB0aGUgVk0gYml0 Ci0JCSAqIGlzIGNsZWFyZWQgYmVmb3JlIHVwZGF0aW5nIHRoZSBpbmRleCwgYW5kIGxvY2tpbmcv dW5sb2NraW5nIG9mIHRoZQotCQkgKiBpbmRleCBwYWdlIGFjdHMgYXMgYSBmdWxsIG1lbW9yeSBi YXJyaWVyLCB3ZSBhcmUgc3VyZSB0byBzZWUgdGhlCi0JCSAqIGNsZWFyZWQgYml0IGlmIHdlIHNl ZSBhIHJlY2VudGx5LWluc2VydGVkIFRJRC4KLQkJICoKLQkJICogRGVsZXRlcyBkbyBub3QgdXBk YXRlIHRoZSBpbmRleCBwYWdlIChvbmx5IFZBQ1VVTSB3aWxsIGNsZWFyIG91dAotCQkgKiB0aGUg VElEKSwgc28gdGhlIGNsZWFyaW5nIG9mIHRoZSBWTSBiaXQgYnkgYSBkZWxldGUgaXMgbm90Ci0J CSAqIHNlcmlhbGl6ZWQgd2l0aCB0aGlzIHRlc3QgYmVsb3csIGFuZCB3ZSBtYXkgc2VlIGEgdmFs dWUgdGhhdCBpcwotCQkgKiBzaWduaWZpY2FudGx5IHN0YWxlLiBIb3dldmVyLCB3ZSBkb24ndCBj YXJlIGFib3V0IHRoZSBkZWxldGUgcmlnaHQKLQkJICogYXdheSwgYmVjYXVzZSB0aGUgdHVwbGUg aXMgc3RpbGwgdmlzaWJsZSB1bnRpbCB0aGUgZGVsZXRpbmcKLQkJICogdHJhbnNhY3Rpb24gY29t bWl0cyBvciB0aGUgc3RhdGVtZW50IGVuZHMgKGlmIGl0J3Mgb3VyCi0JCSAqIHRyYW5zYWN0aW9u KS4gSW4gZWl0aGVyIGNhc2UsIHRoZSBsb2NrIG9uIHRoZSBWTSBidWZmZXIgd2lsbCBoYXZlCi0J CSAqIGJlZW4gcmVsZWFzZWQgKGFjdGluZyBhcyBhIHdyaXRlIGJhcnJpZXIpIGFmdGVyIGNsZWFy aW5nIHRoZSBiaXQuCi0JCSAqIEFuZCBmb3IgdXMgdG8gaGF2ZSBhIHNuYXBzaG90IHRoYXQgaW5j bHVkZXMgdGhlIGRlbGV0aW5nCi0JCSAqIHRyYW5zYWN0aW9uIChtYWtpbmcgdGhlIHR1cGxlIGlu dmlzaWJsZSksIHdlIG11c3QgaGF2ZSBhY3F1aXJlZAotCQkgKiBQcm9jQXJyYXlMb2NrIGFmdGVy IHRoYXQgdGltZSwgYWN0aW5nIGFzIGEgcmVhZCBiYXJyaWVyLgotCQkgKgotCQkgKiBJdCdzIHdv cnRoIGdvaW5nIHRocm91Z2ggdGhpcyBjb21wbGV4aXR5IHRvIGF2b2lkIG5lZWRpbmcgdG8gbG9j awotCQkgKiB0aGUgVk0gYnVmZmVyLCB3aGljaCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBjb250 ZW50aW9uLgotCQkgKi8KLQkJaWYgKCFWTV9BTExfVklTSUJMRShzY2FuZGVzYy0+aGVhcFJlbGF0 aW9uLAotCQkJCQkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKLQkJCQkJCQkmbm9k ZS0+aW9zc19WTUJ1ZmZlcikpCi0JCXsKLQkJCS8qCi0JCQkgKiBSYXRzLCB3ZSBoYXZlIHRvIHZp c2l0IHRoZSBoZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkuCi0JCQkgKi8KLQkJCUluc3RyQ291bnRU dXBsZXMyKG5vZGUsIDEpOwotCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKHNjYW5kZXNjLCBub2Rl LT5pb3NzX1RhYmxlU2xvdCkpCi0JCQkJY29udGludWU7CQkvKiBubyB2aXNpYmxlIHR1cGxlLCB0 cnkgbmV4dCBpbmRleCBlbnRyeSAqLwotCi0JCQlFeGVjQ2xlYXJUdXBsZShub2RlLT5pb3NzX1Rh YmxlU2xvdCk7Ci0KLQkJCS8qCi0JCQkgKiBPbmx5IE1WQ0Mgc25hcHNob3RzIGFyZSBzdXBwb3J0 ZWQgaGVyZSwgc28gdGhlcmUgc2hvdWxkIGJlIG5vCi0JCQkgKiBuZWVkIHRvIGtlZXAgZm9sbG93 aW5nIHRoZSBIT1QgY2hhaW4gb25jZSBhIHZpc2libGUgZW50cnkgaGFzCi0JCQkgKiBiZWVuIGZv dW5kLiAgSWYgd2UgZGlkIHdhbnQgdG8gYWxsb3cgdGhhdCwgd2UnZCBuZWVkIHRvIGtlZXAKLQkJ CSAqIG1vcmUgc3RhdGUgdG8gcmVtZW1iZXIgbm90IHRvIGNhbGwgaW5kZXhfZ2V0bmV4dF90aWQg bmV4dCB0aW1lLgotCQkJICovCi0JCQlpZiAoc2NhbmRlc2MtPnhzX2hlYXBfY29udGludWUpCi0J CQkJZWxvZyhFUlJPUiwgIm5vbi1NVkNDIHNuYXBzaG90cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBp bmRleC1vbmx5IHNjYW5zIik7Ci0KLQkJCS8qCi0JCQkgKiBOb3RlOiBhdCB0aGlzIHBvaW50IHdl IGFyZSBob2xkaW5nIGEgcGluIG9uIHRoZSBoZWFwIHBhZ2UsIGFzCi0JCQkgKiByZWNvcmRlZCBp biBzY2FuZGVzYy0+eHNfY2J1Zi4gIFdlIGNvdWxkIHJlbGVhc2UgdGhhdCBwaW4gbm93LAotCQkJ ICogYnV0IGl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgaXQncyBhIHdpbiB0byBkbyBzby4gIFRoZSBu ZXh0IGluZGV4Ci0JCQkgKiBlbnRyeSBtaWdodCByZXF1aXJlIGEgdmlzaXQgdG8gdGhlIHNhbWUg aGVhcCBwYWdlLgotCQkJICovCi0KLQkJCXR1cGxlX2Zyb21faGVhcCA9IHRydWU7Ci0JCX0KLQog CQkvKgogCQkgKiBGaWxsIHRoZSBzY2FuIHR1cGxlIHNsb3Qgd2l0aCBkYXRhIGZyb20gdGhlIGlu ZGV4LiAgVGhpcyBtaWdodCBiZQogCQkgKiBwcm92aWRlZCBpbiBlaXRoZXIgSGVhcFR1cGxlIG9y IEluZGV4VHVwbGUgZm9ybWF0LiAgQ29uY2VpdmFibHkgYW4KQEAgLTIzOCwxNiArMTYzLDYgQEAg SW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCQllcmVwb3J0KEVSUk9S LAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJCSBl cnJtc2coImxvc3N5IGRpc3RhbmNlIGZ1bmN0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBpbiBpbmRl eC1vbmx5IHNjYW5zIikpKTsKLQotCQkvKgotCQkgKiBJZiB3ZSBkaWRuJ3QgYWNjZXNzIHRoZSBo ZWFwLCB0aGVuIHdlJ2xsIG5lZWQgdG8gdGFrZSBhIHByZWRpY2F0ZQotCQkgKiBsb2NrIGV4cGxp Y2l0bHksIGFzIGlmIHdlIGhhZC4gIEZvciBub3cgd2UgZG8gdGhhdCBhdCBwYWdlIGxldmVsLgot CQkgKi8KLQkJaWYgKCF0dXBsZV9mcm9tX2hlYXApCi0JCQlQcmVkaWNhdGVMb2NrUGFnZShzY2Fu ZGVzYy0+aGVhcFJlbGF0aW9uLAotCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0 aWQpLAotCQkJCQkJCSAgZXN0YXRlLT5lc19zbmFwc2hvdCk7Ci0KIAkJcmV0dXJuIHNsb3Q7CiAJ fQogCkBAIC00MDcsMTMgKzMyMiw2IEBAIEV4ZWNFbmRJbmRleE9ubHlTY2FuKEluZGV4T25seVNj YW5TdGF0ZSAqbm9kZSkKIAlpbmRleFJlbGF0aW9uRGVzYyA9IG5vZGUtPmlvc3NfUmVsYXRpb25E ZXNjOwogCWluZGV4U2NhbkRlc2MgPSBub2RlLT5pb3NzX1NjYW5EZXNjOwogCi0JLyogUmVsZWFz ZSBWTSBidWZmZXIgcGluLCBpZiBhbnkuICovCi0JaWYgKG5vZGUtPmlvc3NfVk1CdWZmZXIgIT0g SW52YWxpZEJ1ZmZlcikKLQl7Ci0JCVJlbGVhc2VCdWZmZXIobm9kZS0+aW9zc19WTUJ1ZmZlcik7 Ci0JCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCX0KLQogCS8qCiAJICog V2hlbiBlbmRpbmcgYSBwYXJhbGxlbCB3b3JrZXIsIGNvcHkgdGhlIHN0YXRpc3RpY3MgZ2F0aGVy ZWQgYnkgdGhlCiAJICogd29ya2VyIGJhY2sgaW50byBzaGFyZWQgbWVtb3J5IHNvIHRoYXQgaXQg Y2FuIGJlIHBpY2tlZCB1cCBieSB0aGUgbWFpbgpAQCAtNDMzLDYgKzM0MSw3IEBAIEV4ZWNFbmRJ bmRleE9ubHlTY2FuKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJICogd2hpY2ggd2lsbCBo YXZlIGEgbmV3IEluZGV4T25seVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KIAkJ d2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2RlLT5pb3NzX0luc3RydW1lbnQubnNlYXJjaGVz OworCQl3aW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzICs9IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC5u aGVhcGZldGNoZXM7CiAJfQogCiAJLyoKQEAgLTc4NCwxMyArNjkzLDEyIEBAIEV4ZWNJbmRleE9u bHlTY2FuSW5pdGlhbGl6ZURTTShJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAKIAlub2RlLT5p b3NzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1 cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJ CQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsIHRydWUsCiAJCQkJCQkJCSAmbm9kZS0+aW9zc19J bnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5v ZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJCQkJCSBwaXNjYW4pOwotCW5vZGUtPmlvc3Nf U2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7Ci0Jbm9kZS0+aW9zc19WTUJ1ZmZlciA9IElu dmFsaWRCdWZmZXI7CisJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7 CiAKIAkvKgogCSAqIElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJl IHJlYWR5LCBnbyBhaGVhZCBhbmQgcGFzcwpAQCAtODUwLDEyICs3NTgsMTIgQEAgRXhlY0luZGV4 T25seVNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAogCW5v ZGUtPmlvc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Mu c3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJ CQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywgdHJ1ZSwKIAkJCQkJCQkJICZub2RlLT5p b3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJ CQkgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7Ci0Jbm9kZS0+ aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKKwlBc3NlcnQobm9kZS0+aW9zc19T Y2FuRGVzYy0+eHNfd2FudF9pdHVwKTsKIAogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0 byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKaW5kZXggODQ4MjNmMGI2Li5jMzRhMTNhODcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYworKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKQEAgLTEwNyw3ICsxMDcsNyBAQCBJbmRleE5l eHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHNlcmlhbGx5IGV4ZWN1dGluZyBhbiBpbmRl eCBzY2FuIHRoYXQgd2FzIHBsYW5uZWQgdG8gYmUgcGFyYWxsZWwuCiAJCSAqLwogCQlzY2FuZGVz YyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJ CSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlv bkRlc2MsIGZhbHNlLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkg ICAmbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1TY2FuS2V5 cywKQEAgLTEyOCw3ICsxMjgsNyBAQCBJbmRleE5leHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJ LyoKIAkgKiBvaywgbm93IHRoYXQgd2UgaGF2ZSB3aGF0IHdlIG5lZWQsIGZldGNoIHRoZSBuZXh0 IHR1cGxlLgogCSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVj dGlvbiwgc2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywg ZGlyZWN0aW9uLCBzbG90KSkKIAl7CiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKQEAgLTIw Myw3ICsyMDMsNyBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkK IAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4IHNjYW4gdGhhdCB3YXMgcGxhbm5lZCB0 byBiZSBwYXJhbGxlbC4KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUt PnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVz YywKKwkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgZmFsc2UsCiAJCQkJCQkJCSAg IGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgICZub2RlLT5pc3NfSW5zdHJ1bWVudCwK IAkJCQkJCQkJICAgbm9kZS0+aXNzX051bVNjYW5LZXlzLApAQCAtMjYwLDcgKzI2MCw3IEBAIElu ZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiBGZXRjaCBuZXh0 IHR1cGxlIGZyb20gdGhlIGluZGV4LgogCQkgKi8KIG5leHRfaW5kZXh0dXBsZToKLQkJaWYgKCFp bmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkK KwkJaWYgKCF0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGly ZWN0aW9uLCBzbG90KSkKIAkJewogCQkJLyoKIAkJCSAqIE5vIG1vcmUgdHVwbGVzIGZyb20gdGhl IGluZGV4LiAgQnV0IHdlIHN0aWxsIG5lZWQgdG8gZHJhaW4gYW55CkBAIC04MTIsNiArODEyLDcg QEAgRXhlY0VuZEluZGV4U2NhbihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogd2hpY2ggd2ls bCBoYXZlIGEgbmV3IEluZGV4T25seVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8K IAkJd2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2RlLT5pc3NfSW5zdHJ1bWVudC5uc2VhcmNo ZXM7CisJCUFzc2VydChub2RlLT5pc3NfSW5zdHJ1bWVudC5uaGVhcGZldGNoZXMgPT0gMCk7CiAJ fQogCiAJLyoKQEAgLTE3MTksNyArMTcyMCw3IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplRFNN KEluZGV4U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aXNzX1NjYW5EZXNjID0KIAkJaW5kZXhf YmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJ IG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNj LCBmYWxzZSwKIAkJCQkJCQkJICZub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUt Pmlzc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKQEAg LTE3ODMsNyArMTc4NCw3IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4U2Nh blN0YXRlICpub2RlLAogCiAJbm9kZS0+aXNzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2Fu X3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlz c19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLCBmYWxzZSwK IAkJCQkJCQkJICZub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1T Y2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IDUxYjlkNjY3Ny4uMDM1OThiNTBkIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIC8qIFdoZXRo ZXIgd2UgYXJlIGxvb2tpbmcgZm9yIHBsYWluIGluZGV4c2NhbiwgYml0bWFwIHNjYW4sIG9yIGVp dGhlciAqLwogdHlwZWRlZiBlbnVtCiB7Ci0JU1RfSU5ERVhTQ0FOLAkJCQkvKiBtdXN0IHN1cHBv cnQgYW1nZXR0dXBsZSAqLworCVNUX0lOREVYU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0 dHVwbGUgb3IgYW1nZXRiYXRjaCAqLwogCVNUX0JJVE1BUFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9y dCBhbWdldGJpdG1hcCAqLwogCVNUX0FOWVNDQU4sCQkJCQkvKiBlaXRoZXIgaXMgb2theSAqLwog fSBTY2FuVHlwZUNvbnRyb2w7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9wbGFuY2F0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKaW5kZXgg YTkwZTFjOWVlLi4zOWE1ZWEyOTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3BsYW5jYXQuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMK QEAgLTMxMywxMSArMzEzLDExIEBAIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290 LCBPaWQgcmVsYXRpb25PYmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAJCQkJaW5mby0+YW1zZWFy Y2hhcnJheSA9IGFtcm91dGluZS0+YW1zZWFyY2hhcnJheTsKIAkJCQlpbmZvLT5hbXNlYXJjaG51 bGxzID0gYW1yb3V0aW5lLT5hbXNlYXJjaG51bGxzOwogCQkJCWluZm8tPmFtY2FucGFyYWxsZWwg PSBhbXJvdXRpbmUtPmFtY2FucGFyYWxsZWw7Ci0JCQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IChh bXJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CisJCQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9 IChhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCB8fAorCQkJCQkJCQkJICAgYW1yb3V0aW5l LT5hbWdldGJhdGNoICE9IE5VTEwpOwogCQkJCWluZm8tPmFtaGFzZ2V0Yml0bWFwID0gYW1yb3V0 aW5lLT5hbWdldGJpdG1hcCAhPSBOVUxMICYmCiAJCQkJCXJlbGF0aW9uLT5yZF90YWJsZWFtLT5z Y2FuX2JpdG1hcF9uZXh0X3R1cGxlICE9IE5VTEw7Ci0JCQkJaW5mby0+YW1jYW5tYXJrcG9zID0g KGFtcm91dGluZS0+YW1tYXJrcG9zICE9IE5VTEwgJiYKLQkJCQkJCQkJCSAgYW1yb3V0aW5lLT5h bXJlc3RycG9zICE9IE5VTEwpOworCQkJCWluZm8tPmFtY2FubWFya3BvcyA9IGFtcm91dGluZS0+ YW1wb3NyZXNldCAhPSBOVUxMOwogCQkJCWluZm8tPmFtY29zdGVzdGltYXRlID0gYW1yb3V0aW5l LT5hbWNvc3Rlc3RpbWF0ZTsKIAkJCQlBc3NlcnQoaW5mby0+YW1jb3N0ZXN0aW1hdGUgIT0gTlVM TCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRp b24uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYwppbmRleCAw YjFkODBiNWIuLjc2YjBkMDM1ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9yZWxhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cmVsYXRpb24uYwpAQCAtODkwLDcgKzg5MCw4IEBAIElzSW5kZXhVc2FibGVGb3JSZXBsaWNhSWRl bnRpdHlGdWxsKFJlbGF0aW9uIGlkeHJlbCwgQXR0ck1hcCAqYXR0cm1hcCkKIAkgKiBUaGUgZ2l2 ZW4gaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0IGltcGxlbWVudCAiYW1nZXR0dXBsZSIsIHdoaWNo IHdpbGwKIAkgKiBiZSB1c2VkIGxhdGVyIHRvIGZldGNoIHRoZSB0dXBsZXMuICBTZWUgUmVsYXRp b25GaW5kUmVwbFR1cGxlQnlJbmRleCgpLgogCSAqLwotCWlmIChHZXRJbmRleEFtUm91dGluZUJ5 QW1JZChpZHhyZWwtPnJkX3JlbC0+cmVsYW0sIGZhbHNlKS0+YW1nZXR0dXBsZSA9PSBOVUxMKQor CWlmIChHZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+cmVsYW0sIGZhbHNl KS0+YW1nZXR0dXBsZSA9PSBOVUxMICYmCisJCUdldEluZGV4QW1Sb3V0aW5lQnlBbUlkKGlkeHJl bC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpLT5hbWdldGJhdGNoID09IE5VTEwpCiAJCXJldHVybiBm YWxzZTsKIAogCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2FtdXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMKaW5kZXggYzgxZmI2 MWEwLi5kZGZkMWI1NWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxz LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYwpAQCAtMzYzLDEwICszNjMs MTEgQEAgaW5kZXhhbV9wcm9wZXJ0eShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCQlQR19S RVRVUk5fQk9PTChyb3V0aW5lLT5hbWNsdXN0ZXJhYmxlKTsKIAogCQkJY2FzZSBBTVBST1BfSU5E RVhfU0NBTjoKLQkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlID8gdHJ1ZSA6 IGZhbHNlKTsKKwkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwg fHwKKwkJCQkJCQkgICByb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOwogCiAJCQljYXNlIEFN UFJPUF9CSVRNQVBfU0NBTjoKLQkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldGJpdG1h cCA/IHRydWUgOiBmYWxzZSk7CisJCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXRiaXRt YXAgIT0gTlVMTCk7CiAKIAkJCWNhc2UgQU1QUk9QX0JBQ0tXQVJEX1NDQU46CiAJCQkJUEdfUkVU VVJOX0JPT0wocm91dGluZS0+YW1jYW5iYWNrd2FyZCk7CkBAIC0zOTIsNyArMzkzLDggQEAgaW5k ZXhhbV9wcm9wZXJ0eShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCVBHX1JFVFVSTl9CT09M KHJvdXRpbmUtPmFtY2FubXVsdGljb2wpOwogCiAJCWNhc2UgQU1QUk9QX0NBTl9FWENMVURFOgot CQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSA/IHRydWUgOiBmYWxzZSk7CisJ CQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwgfHwKKwkJCQkJCSAg IHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CiAKIAkJY2FzZSBBTVBST1BfQ0FOX0lOQ0xV REU6CiAJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNhbmluY2x1ZGUpOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvc2VsZnVuY3MuYwppbmRleCAyOWZlYzY1NTUuLmE3MjEzNjU0YSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3NlbGZ1bmNzLmMKQEAgLTEwMiw3ICsxMDIsNiBAQAogI2luY2x1ZGUgImFjY2Vzcy9naW4uaCIK ICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgot I2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19j b2xsYXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19zdGF0aXN0aWMuaCIKQEAgLTcxMjQsMTMgKzcxMjMsMTAgQEAgZ2V0X2FjdHVh bF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCWJvb2wJCWhhdmVfZGF0YSA9 IGZhbHNlOwogCVNuYXBzaG90RGF0YSBTbmFwc2hvdE5vblZhY3V1bWFibGU7CiAJSW5kZXhTY2Fu RGVzYyBpbmRleF9zY2FuOwotCUJ1ZmZlcgkJdm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCUJs b2NrTnVtYmVyIGxhc3RfaGVhcF9ibG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKLQlpbnQJCQlu X3Zpc2l0ZWRfaGVhcF9wYWdlcyA9IDA7Ci0JSXRlbVBvaW50ZXIgdGlkOwogCURhdHVtCQl2YWx1 ZXNbSU5ERVhfTUFYX0tFWVNdOwogCWJvb2wJCWlzbnVsbFtJTkRFWF9NQVhfS0VZU107CiAJTWVt b3J5Q29udGV4dCBvbGRjb250ZXh0OworCUluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiBpbnN0cnVt ZW50OwogCiAJLyoKIAkgKiBXZSB1c2UgdGhlIGluZGV4LW9ubHktc2NhbiBtYWNoaW5lcnkgZm9y IHRoaXMuICBXaXRoIG1vc3RseS1zdGF0aWMKQEAgLTcxNzksNTYgKzcxNzUsMzIgQEAgZ2V0X2Fj dHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCUluaXROb25WYWN1dW1h YmxlU25hcHNob3QoU25hcHNob3ROb25WYWN1dW1hYmxlLAogCQkJCQkJCSAgR2xvYmFsVmlzVGVz dEZvcihoZWFwUmVsKSk7CiAKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWws IGluZGV4UmVsLAotCQkJCQkJCQkgJlNuYXBzaG90Tm9uVmFjdXVtYWJsZSwgTlVMTCwKKwkvKgor CSAqIFNldCBpdCB1cCBmb3IgaW5zdHJ1bWVudGVkIGluZGV4LW9ubHkgc2Nhbi4gIFdlIG5lZWQg dGhlCisJICogaW5zdHJ1bWVudGF0aW9uIHRvIG1vbml0b3IgdGhlIG51bWJlciBvZiBoZWFwIGZl dGNoZXMuCisJICovCisJbWVtc2V0KCZpbnN0cnVtZW50LCAwLCBzaXplb2YoaW5zdHJ1bWVudCkp OworCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsIHRydWUs CisJCQkJCQkJCSAmU25hcHNob3ROb25WYWN1dW1hYmxlLCAmaW5zdHJ1bWVudCwKIAkJCQkJCQkJ IDEsIDApOwotCS8qIFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICovCi0JaW5kZXhfc2Nh bi0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKKwlBc3NlcnQoaW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVw KTsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMsIDEsIE5VTEwsIDApOwogCiAJ LyogRmV0Y2ggZmlyc3QvbmV4dCB0dXBsZSBpbiBzcGVjaWZpZWQgZGlyZWN0aW9uICovCi0Jd2hp bGUgKCh0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChpbmRleF9zY2FuLCBpbmRleHNjYW5kaXIpKSAh PSBOVUxMKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgaW5k ZXhzY2FuZGlyLCB0YWJsZXNsb3QpKQogCXsKLQkJQmxvY2tOdW1iZXIgYmxvY2sgPSBJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CisJCS8qIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhl IGhlYXAgdHVwbGUgZm9yIGFueXRoaW5nICovCisJCUV4ZWNDbGVhclR1cGxlKHRhYmxlc2xvdCk7 CiAKLQkJaWYgKCFWTV9BTExfVklTSUJMRShoZWFwUmVsLAotCQkJCQkJCWJsb2NrLAotCQkJCQkJ CSZ2bWJ1ZmZlcikpCi0JCXsKLQkJCS8qIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAg dG8gY2hlY2sgdmlzaWJpbGl0eSAqLwotCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKGluZGV4X3Nj YW4sIHRhYmxlc2xvdCkpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBObyB2aXNpYmxlIHR1cGxlIGZv ciB0aGlzIGluZGV4IGVudHJ5LCBzbyB3ZSBuZWVkIHRvCi0JCQkJICogYWR2YW5jZSB0byB0aGUg bmV4dCBlbnRyeS4gIEJlZm9yZSBkb2luZyBzbywgY291bnQgaGVhcAotCQkJCSAqIHBhZ2UgZmV0 Y2hlcyBhbmQgZ2l2ZSB1cCBpZiB3ZSd2ZSBkb25lIHRvbyBtYW55LgotCQkJCSAqCi0JCQkJICog V2UgZG9uJ3QgY2hhcmdlIGEgcGFnZSBmZXRjaCBpZiB0aGlzIGlzIHRoZSBzYW1lIGhlYXAgcGFn ZQotCQkJCSAqIGFzIHRoZSBwcmV2aW91cyB0dXBsZS4gIFRoaXMgaXMgb24gdGhlIGNvbnNlcnZh dGl2ZSBzaWRlLAotCQkJCSAqIHNpbmNlIG90aGVyIHJlY2VudGx5LWFjY2Vzc2VkIHBhZ2VzIGFy ZSBwcm9iYWJseSBzdGlsbCBpbgotCQkJCSAqIGJ1ZmZlcnMgdG9vOyBidXQgaXQncyBnb29kIGVu b3VnaCBmb3IgdGhpcyBoZXVyaXN0aWMuCi0JCQkJICovCisJCS8qCisJCSAqIE5vIHZpc2libGUg dHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnksIHNvIHdlIG5lZWQgdG8gYWR2YW5jZSB0byB0aGUK KwkJICogbmV4dCBlbnRyeS4gIEJlZm9yZSBkb2luZyBzbywgY291bnQgaGVhcCBwYWdlIGZldGNo ZXMgYW5kIGdpdmUgdXAKKwkJICogaWYgd2UndmUgZG9uZSB0b28gbWFueS4KKwkJICovCiAjZGVm aW5lIFZJU0lURURfUEFHRVNfTElNSVQgMTAwCiAKLQkJCQlpZiAoYmxvY2sgIT0gbGFzdF9oZWFw X2Jsb2NrKQotCQkJCXsKLQkJCQkJbGFzdF9oZWFwX2Jsb2NrID0gYmxvY2s7Ci0JCQkJCW5fdmlz aXRlZF9oZWFwX3BhZ2VzKys7Ci0JCQkJCWlmIChuX3Zpc2l0ZWRfaGVhcF9wYWdlcyA+IFZJU0lU RURfUEFHRVNfTElNSVQpCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQljb250aW51ZTsJCS8q IG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCi0JCQl9Ci0KLQkJCS8q IFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIGhlYXAgdHVwbGUgZm9yIGFueXRoaW5nICovCi0J CQlFeGVjQ2xlYXJUdXBsZSh0YWJsZXNsb3QpOwotCi0JCQkvKgotCQkJICogV2UgZG9uJ3QgY2Fy ZSB3aGV0aGVyIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSB2aXNpYmxlIHR1cGxlIGluCi0JCQkgKiB0 aGUgSE9UIGNoYWluOyBpZiBhbnkgYXJlIHZpc2libGUsIHRoYXQncyBnb29kIGVub3VnaC4KLQkJ CSAqLwotCQl9CisJCWlmIChpbnN0cnVtZW50Lm5oZWFwZmV0Y2hlcyA+IFZJU0lURURfUEFHRVNf TElNSVQpCisJCQlicmVhazsKIAogCQkvKgogCQkgKiBXZSBleHBlY3QgdGhhdCB0aGUgaW5kZXgg d2lsbCByZXR1cm4gZGF0YSBpbiBJbmRleFR1cGxlIG5vdApAQCAtNzI2MSw4ICs3MjMzLDYgQEAg Z2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCQlicmVhazsK IAl9CiAKLQlpZiAodm1idWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKLQkJUmVsZWFzZUJ1ZmZlcih2 bWJ1ZmZlcik7CiAJaW5kZXhfZW5kc2NhbihpbmRleF9zY2FuKTsKIAogCXJldHVybiBoYXZlX2Rh dGE7CmRpZmYgLS1naXQgYS9jb250cmliL2Jsb29tL2JsdXRpbHMuYyBiL2NvbnRyaWIvYmxvb20v Ymx1dGlscy5jCmluZGV4IDUxMTFjZGM2ZC4uN2ZkOThkYmE2IDEwMDY0NAotLS0gYS9jb250cmli L2Jsb29tL2JsdXRpbHMuYworKysgYi9jb250cmliL2Jsb29tL2JsdXRpbHMuYwpAQCAtMTQ2LDEw ICsxNDYsMTEgQEAgYmxoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9 IGJsYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBibHJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBO VUxMLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWZyZWViYXRjaCA9IE5VTEwsCiAJCS5h bWdldGJpdG1hcCA9IGJsZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gYmxlbmRzY2FuLAotCQku YW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9 IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFs bGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCmlu ZGV4IGY0OGRhMzE4NS4uOGRmOTFiYzM4IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaW5kZXhh bS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKQEAgLTE2NywxMCArMTY3LDEx IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5lCiAgICAgYW1iZWdpbnNjYW5fZnVuY3Rp b24gYW1iZWdpbnNjYW47CiAgICAgYW1yZXNjYW5fZnVuY3Rpb24gYW1yZXNjYW47CiAgICAgYW1n ZXR0dXBsZV9mdW5jdGlvbiBhbWdldHR1cGxlOyAgICAgLyogY2FuIGJlIE5VTEwgKi8KKyAgICBh bWdldGJhdGNoX2Z1bmN0aW9uIGFtZ2V0YmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCisgICAgYW1m cmVlYmF0Y2hfZnVuY3Rpb24gYW1mcmVlYmF0Y2g7CS8qIGNhbiBiZSBOVUxMICovCiAgICAgYW1n ZXRiaXRtYXBfZnVuY3Rpb24gYW1nZXRiaXRtYXA7ICAgLyogY2FuIGJlIE5VTEwgKi8KICAgICBh bWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2FuOwotICAgIGFtbWFya3Bvc19mdW5jdGlvbiBhbW1h cmtwb3M7ICAgICAgIC8qIGNhbiBiZSBOVUxMICovCi0gICAgYW1yZXN0cnBvc19mdW5jdGlvbiBh bXJlc3RycG9zOyAgICAgLyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbXBvc3Jlc2V0X2Z1bmN0aW9u IGFtcG9zcmVzZXQ7IC8qIGNhbiBiZSBOVUxMICovCiAKICAgICAvKiBpbnRlcmZhY2UgZnVuY3Rp b25zIHRvIHN1cHBvcnQgcGFyYWxsZWwgaW5kZXggc2NhbnMgKi8KICAgICBhbWVzdGltYXRlcGFy YWxsZWxzY2FuX2Z1bmN0aW9uIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW47ICAgIC8qIGNhbiBiZSBO VUxMICovCkBAIC03NDksNiArNzUwLDEzOCBAQCBhbWdldHR1cGxlIChJbmRleFNjYW5EZXNjIHNj YW4sCiAgICA8c3RydWN0ZmllbGQ+YW1nZXR0dXBsZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0 cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KICAgIHN0cnVjdCBtdXN0 IGJlIHNldCB0byBOVUxMLgogICA8L3BhcmE+CisgIDxub3RlPgorICAgPHBhcmE+CisgICAgQXMg b2YgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiB2ZXJzaW9uIDE5LCBwb3Np dGlvbiBtYXJraW5nCisgICAgYW5kIHJlc3RvcmF0aW9uIG9mIHNjYW5zIGlzIG5vIGxvbmdlciBz dXBwb3J0ZWQgZm9yIHRoZQorICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gaW50 ZXJmYWNlOyBvbmx5IHRoZQorICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50 ZXJmYWNlIHN1cHBvcnRzIHRoaXMgZmVhdHVyZSB0aHJvdWdoCisgICAgdGhlIDxmdW5jdGlvbj5h bXBvc3Jlc2V0PC9mdW5jdGlvbj4gY2FsbGJhY2suCisgICA8L3BhcmE+CisgIDwvbm90ZT4KKwor ICA8cGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KK0JhdGNoSW5kZXhTY2FuCithbWdldGJhdGNoIChJ bmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgICAgICBCYXRjaEluZGV4U2NhbiBwcmlvcmJhdGNo LAorICAgICAgICAgICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworPC9wcm9ncmFtbGlzdGlu Zz4KKyAgIFJldHVybiB0aGUgbmV4dCBiYXRjaCBvZiBpbmRleCB0dXBsZXMgaW4gdGhlIGdpdmVu IHNjYW4sIG1vdmluZyBpbiB0aGUKKyAgIGdpdmVuIGRpcmVjdGlvbiAoZm9yd2FyZCBvciBiYWNr d2FyZCBpbiB0aGUgaW5kZXgpLiAgUmV0dXJucyBhbiBpbnN0YW5jZSBvZgorICAgPHR5cGU+QmF0 Y2hJbmRleFNjYW48L3R5cGU+IHdpdGggaW5kZXggdHVwbGVzIGxvYWRlZCwgb3IKKyAgIDxsaXRl cmFsPk5VTEw8L2xpdGVyYWw+IGlmIHRoZXJlIGFyZSBubyBtb3JlIGluZGV4IHR1cGxlcy4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+ IHBhcmFtZXRlciBwYXNzZXMgdGhlIGJhdGNoIHByZXZpb3VzbHkKKyAgIHJldHVybmVkIGJ5IGFu IGVhcmxpZXIgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxsIChvcgorICAgPGxp dGVyYWw+TlVMTDwvbGl0ZXJhbD4gb24gdGhlIGZpcnN0IGNhbGwpLiAgVGhlIGluZGV4IEFNIHVz ZXMKKyAgIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IHRvIGRldGVybWluZSB3aGljaCBp bmRleCBwYWdlIHRvIHJlYWQgbmV4dCwKKyAgIHR5cGljYWxseSBieSBmb2xsb3dpbmcgcGFnZSBs aW5rcyBmb3VuZCBpbiA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPi4KKyAgIFRoZSByZXR1 cm5lZCBiYXRjaCBjb250YWlucyBtYXRjaGluZyBpdGVtcyBpbW1lZGlhdGVseSBhZGphY2VudCB0 byB0aG9zZQorICAgZnJvbSA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPiBpbiB0aGUgY29t bW9uIGNhc2Ugd2hlcmUKKyAgIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IGlzIHRoZSBi YXRjaCB0aGF0IHdhcyByZXR1cm5lZCBieSB0aGUgbW9zdAorICAgcmVjZW50IGNhbGwgdG8gPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxsICh0aG91Z2ggbm90IHdoZW4gdGhlCisg ICBtb3N0IHJlY2VudCBjYWxsIHVzZWQgdGhlIG9wcG9zaXRlIHNjYW4gZGlyZWN0aW9uIHRvIHRo aXMgY2FsbCwgYW5kIG5vdAorICAgd2hlbiBhIG1hcmsgaGFzIGJlZW4gcmVzdG9yZWQpLgorICA8 L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIGJhdGNoIHJldHVybmVkIGJ5IDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4gaXMgZ3VhcmFudGVlZCB0byBiZQorICAgYXNzb2NpYXRlZCB3aXRo IGFuIGluZGV4IHBhZ2UgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgdHVwbGUuCisg ICBUaGUgaW5kZXggcGFnZSBhc3NvY2lhdGVkIHdpdGggdGhlIGJhdGNoIG1heSBiZSByZXRhaW5l ZCBpbiBhIGJ1ZmZlciB3aXRoCisgICBpdHMgcGluIGhlbGQgYXMgYW4gaW50ZXJsb2NrIGFnYWlu c3QgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5CisgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1h bmQ+LiAgU2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4gZm9yIGRldGFpbHMKKyAg IG9uIGJ1ZmZlciBwaW4gbWFuYWdlbWVudCBkdXJpbmcgPHF1b3RlPnBsYWluPC9xdW90ZT4gaW5k ZXggc2NhbnMuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBkb2VzIG5vdCBzdXBwb3J0IGluZGV4LW9ubHkKKyAg IHNjYW5zIHRoYXQgcmV0dXJuIGRhdGEgdmlhIHRoZSA8bGl0ZXJhbD54c19oaXR1cDwvbGl0ZXJh bD4gbWVjaGFuaXNtLgorICAgSW5kZXgtb25seSBzY2FucyBhcmUgc3VwcG9ydGVkIHRocm91Z2gg dGhlIDxsaXRlcmFsPnhzX2l0dXA8L2xpdGVyYWw+CisgICBtZWNoYW5pc20gb25seS4KKyAgPC9w YXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g ZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZQorICAgYWNjZXNzIG1ldGhvZCBz dXBwb3J0cyA8cXVvdGU+cGxhaW48L3F1b3RlPiBpbmRleCBzY2Fucy4gIElmIGl0IGRvZXNuJ3Qs CisgICB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmaWVsZCBpbiBpdHMKKyAg IDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3QgbXVzdCBiZSBz ZXQgdG8gTlVMTC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQSA8dHlwZT5CYXRjaEluZGV4 U2NhbjwvdHlwZT4gdGhhdCBpcyByZXR1cm5lZCBieQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiBpcyBubyBsb25nZXIgbWFuYWdlZCBieSB0aGUgYWNjZXNzIG1ldGhvZC4KKyAg IEl0IGlzIHVwIHRvIHRoZSB0YWJsZSBBTSBjYWxsZXIgdG8gZGVjaWRlIHdoZW4gaXQgc2hvdWxk IGJlIGZyZWVkIGJ5CisgICBwYXNzaW5nIGl0IHRvIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVu Y3Rpb24+LiAgTm90ZSBhbHNvIHRoYXQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gZnVuY3Rpb25zIG11c3QgbmV2ZXIgbW9kaWZ5IHRoZQorICAgPHN0cnVjdGZpZWxkPnByaW9y YmF0Y2g8L3N0cnVjdGZpZWxkPiBwYXJhbWV0ZXIuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAg IFRoZSBhY2Nlc3MgbWV0aG9kIG1heSBwcm92aWRlIG9ubHkgb25lIG9mIDxmdW5jdGlvbj5hbWdl dHR1cGxlPC9mdW5jdGlvbj4KKyAgIGFuZCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ IGNhbGxiYWNrcywgbm90IGJvdGggKFhYWCB1bmNlcnRhaW4pLgorICAgV2hlbiB0aGUgYWNjZXNz IG1ldGhvZCBwcm92aWRlcyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBpdCBtdXN0 CisgICBhbHNvIHByb3ZpZGUgPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4uCisgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBzYW1lIGNhdmVhdHMgZGVzY3JpYmVkIGZvciA8ZnVu Y3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGFwcGx5IGhlcmUKKyAgIHRvbzogYW4gZW50cnkg aW4gdGhlIHJldHVybmVkIGJhdGNoIG1lYW5zIG9ubHkgdGhhdCB0aGUgaW5kZXggY29udGFpbnMK KyAgIGFuIGVudHJ5IHRoYXQgbWF0Y2hlcyB0aGUgc2NhbiBrZXlzLCBub3QgdGhhdCB0aGUgdHVw bGUgbmVjZXNzYXJpbHkgc3RpbGwKKyAgIGV4aXN0cyBpbiB0aGUgaGVhcCBvciB3aWxsIHBhc3Mg dGhlIGNhbGxlcidzIHNuYXBzaG90IHRlc3QuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKzxwcm9n cmFtbGlzdGluZz4KK3ZvaWQKK2FtZnJlZWJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAg ICAgICAgICAgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIFJl bGVhc2VzIGEgYmF0Y2ggcmV0dXJuZWQgYnkgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gY2FsbGJhY2suCisgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBleGNsdXNpdmVseSBi eSB0YWJsZSBhY2Nlc3MgbWV0aG9kcyB0byBpbmRpY2F0ZQorICAgdGhhdCBwcm9jZXNzaW5nIG9m IHRoZSBiYXRjaCBpcyBjb21wbGV0ZTsgaXQgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aXRoaW4K KyAgIHRoZSBpbmRleCBhY2Nlc3MgbWV0aG9kIGl0c2VsZi4KKyAgPC9wYXJhPgorCisgIDxwYXJh PgorICAgPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4gZnJlZXMgYnVmZmVyIHBpbnMg aGVsZCBvbiB0aGUgYmF0Y2gncworICAgYXNzb2NpYXRlZCBpbmRleCBwYWdlIGFuZCByZWxlYXNl cyByZWxhdGVkIG1lbW9yeSBhbmQgcmVzb3VyY2VzLiAgVGhlc2UKKyAgIGJ1ZmZlciBwaW5zIHNl cnZlIGFzIGFuIGludGVybG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieQor ICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiwgcHJvdGVjdGluZyB0aGUgdGFibGUgYWNjZXNz IG1ldGhvZCBmcm9tIGNvbmZ1c2lvbgorICAgYWJvdXQgd2hpY2ggVElEIGNvcnJlc3BvbmRzIHRv IHdoaWNoIGxvZ2ljYWwgcm93LiAgU2VlIDx4cmVmCisgICBsaW5rZW5kPSJpbmRleC1sb2NraW5n Ii8+IGZvciBkZXRhaWxlZCBkaXNjdXNzaW9uIG9mIGJ1ZmZlciBwaW4gbWFuYWdlbWVudC4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIGluZGV4IEFNIG1heSBjaG9vc2UgdG8gcmV0YWlu IGl0cyBvd24gYnVmZmVyIHBpbnMgYWNyb3NzIG11bHRpcGxlCisgICA8ZnVuY3Rpb24+YW1mcmVl YmF0Y2g8L2Z1bmN0aW9uPiBjYWxscyB3aGVuIHRoaXMgc2VydmVzIGFuIGludGVybmFsIHB1cnBv c2UKKyAgIChmb3IgZXhhbXBsZSwgbWFpbnRhaW5pbmcgYSBkZXNjZW50IHN0YWNrIG9mIHBpbm5l ZCBpbmRleCBwYWdlcyBmb3IgcmV1c2UKKyAgIGFjcm9zcyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IGNhbGxzKS4gIEhvd2V2ZXIsIGFueSBzY2hlbWUgdGhhdAorICAgcmV0YWlucyBi dWZmZXIgcGlucyBtdXN0IGtlZXAgdGhlIG51bWJlciBvZiByZXRhaW5lZCBwaW5zIGZpeGVkIGFu ZCBzbWFsbCwKKyAgIHRvIGF2b2lkIGV4aGF1c3RpbmcgdGhlIGJhY2tlbmQncyBidWZmZXIgcGlu IGxpbWl0LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgaW5kZXggQU0gaGFzIHRoZSBv cHRpb24gb2Ygc2V0dGluZyA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBiaXRzIGluCisgICB0 aGUgaW5kZXggcGFnZSB0byBtYXJrIGRlYWQgdHVwbGVzIGJlZm9yZSByZWxlYXNpbmcgdGhlIGJ1 ZmZlciBwaW4uICBXaGVuCisgICA8bGl0ZXJhbD5JbmRleFNjYW5EZXNjRGF0YS5kcm9wUGluPC9s aXRlcmFsPiBpcyB0cnVlIGFuZCB0aGUgYnVmZmVyIHBpbiBpcyBiZWluZworICAgZHJvcHBlZCBl YWdlcmx5LCB0aGUgaW5kZXggQU0gbXVzdCBjaGVjayA8bGl0ZXJhbD5CYXRjaEluZGV4U2Nhbi5s c248L2xpdGVyYWw+CisgICB0byB2ZXJpZnkgdGhhdCB0aGUgcGFnZSBMU04gaGFzIG5vdCBhZHZh bmNlZCBzaW5jZSB0aGUgYmF0Y2ggd2FzIG9yaWdpbmFsbHkKKyAgIHJlYWQgYmVmb3JlIHNldHRp bmcgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gYml0cywgdG8gYXZvaWQgY29uY3VycmVudAor ICAgVElEIHJlY3ljbGluZyBoYXphcmRzLiAgV2hlbiA8bGl0ZXJhbD5JbmRleFNjYW5EZXNjRGF0 YS5kcm9wUGluPC9saXRlcmFsPgorICAgaXMgZmFsc2UgKHJlcXVpcmluZyB0aGF0IGEgYnVmZmVy IHBpbiBiZSBoZWxkIHRocm91Z2hvdXQgZmlyc3QgcmVhZGluZyB0aGUKKyAgIGluZGV4IGxlYWYg cGFnZSBhbmQgY2FsbGluZyA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiksCisgICA8 bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBiaXRzIGNhbiBhbHdheXMgYmUgc2V0IHNhZmVseSB3 aXRob3V0IGFuIExTTgorICAgY2hlY2suCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8 ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJv dmlkZWQgaWYgdGhlCisgICBhY2Nlc3MgbWV0aG9kIHByb3ZpZGVzIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4uIE90aGVyd2lzZSBpdCBoYXMgdG8KKyAgIHJlbWFpbiBzZXQgdG8gPGxp dGVyYWw+TlVMTDwvbGl0ZXJhbD4uCisgIDwvcGFyYT4KIAogICA8cGFyYT4KIDxwcm9ncmFtbGlz dGluZz4KQEAgLTc2OCw4ICs5MDEsOCBAQCBhbWdldGJpdG1hcCAoSW5kZXhTY2FuRGVzYyBzY2Fu LAogICAgaXRzZWxmLCBhbmQgdGhlcmVmb3JlIGNhbGxlcnMgcmVjaGVjayBib3RoIHRoZSBzY2Fu IGNvbmRpdGlvbnMgYW5kIHRoZQogICAgcGFydGlhbCBpbmRleCBwcmVkaWNhdGUgKGlmIGFueSkg Zm9yIHJlY2hlY2thYmxlIHR1cGxlcy4gIFRoYXQgbWlnaHQgbm90CiAgICBhbHdheXMgYmUgdHJ1 ZSwgaG93ZXZlci4KLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZAotICAg PGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBjYW5ub3QgYmUgdXNlZCBpbiB0aGUgc2Ft ZSBpbmRleCBzY2FuOyB0aGVyZQorICAgT25seSBvbmUgb2YgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFw PC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sCisgICBvciA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGNhbiBiZSB1c2VkIGluIGFueSBnaXZlbiBpbmRl eCBzY2FuOyB0aGVyZQogICAgYXJlIG90aGVyIHJlc3RyaWN0aW9ucyB0b28gd2hlbiB1c2luZyA8 ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiwgYXMgZXhwbGFpbmVkCiAgICBpbiA8eHJl ZiBsaW5rZW5kPSJpbmRleC1zY2FubmluZyIvPi4KICAgPC9wYXJhPgpAQCAtNzk1LDMyICs5Mjgs MjUgQEAgYW1lbmRzY2FuIChJbmRleFNjYW5EZXNjIHNjYW4pOwogICA8cGFyYT4KIDxwcm9ncmFt bGlzdGluZz4KIHZvaWQKLWFtbWFya3BvcyAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2FtcG9zcmVz ZXQgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiA8L3Byb2dyYW1saXN0aW5nPgotICAgTWFyayBjdXJy ZW50IHNjYW4gcG9zaXRpb24uICBUaGUgYWNjZXNzIG1ldGhvZCBuZWVkIG9ubHkgc3VwcG9ydCBv bmUKLSAgIHJlbWVtYmVyZWQgc2NhbiBwb3NpdGlvbiBwZXIgc2Nhbi4KKyAgIE5vdGlmeSBpbmRl eCBBTSB0aGF0IGNvcmUgY29kZSB3aWxsIGNoYW5nZSB0aGUgc2NhbidzIHBvc2l0aW9uIHRvIGFu IGl0ZW0KKyAgIHJldHVybmVkIGFzIHBhcnQgb2YgYW4gZWFybGllciBiYXRjaC4gIFRoZSBpbmRl eCBBTSBtdXN0IHRoZXJlZm9yZQorICAgaW52YWxpZGF0ZSBhbnkgc3RhdGUgdGhhdCBpbmRlcGVu ZGVudGx5IHRyYWNrcyB0aGUgc2NhbidzIHByb2dyZXNzCisgICAoZS5nLiwgYXJyYXkga2V5cyB1 c2VkIHdpdGggYSBTY2FsYXJBcnJheU9wRXhwciBxdWFsKS4gIENhbGxlZCBieSB0aGUgY29yZQor ICAgc3lzdGVtIHdoZW4gaXQgaXMgYWJvdXQgdG8gcmVzdG9yZSBhIG1hcmsuCiAgIDwvcGFyYT4K IAogICA8cGFyYT4KLSAgIFRoZSA8ZnVuY3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gZnVuY3Rp b24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBhY2Nlc3MKLSAgIG1ldGhvZCBzdXBwb3J0 cyBvcmRlcmVkIHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKLSAgIHRoZSA8c3RydWN0ZmllbGQ+YW1t YXJrcG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0 aW5lPC9zdHJ1Y3RuYW1lPgotICAgc3RydWN0IG1heSBiZSBzZXQgdG8gTlVMTC4KLSAgPC9wYXJh PgotCi0gIDxwYXJhPgotPHByb2dyYW1saXN0aW5nPgotdm9pZAotYW1yZXN0cnBvcyAoSW5kZXhT Y2FuRGVzYyBzY2FuKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICBSZXN0b3JlIHRoZSBzY2FuIHRv IHRoZSBtb3N0IHJlY2VudGx5IG1hcmtlZCBwb3NpdGlvbi4KLSAgPC9wYXJhPgotCi0gIDxwYXJh PgotICAgVGhlIDxmdW5jdGlvbj5hbXJlc3RycG9zPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBv bmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBhY2Nlc3MKLSAgIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVk IHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKLSAgIHRoZSA8c3RydWN0ZmllbGQ+YW1yZXN0cnBvczwv c3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3Ry dWN0bmFtZT4KLSAgIHN0cnVjdCBtYXkgYmUgc2V0IHRvIE5VTEwuCisgICBUaGUgPGZ1bmN0aW9u PmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbiBjYW4gb25seSBiZSBwcm92aWRlZCBpZiB0 aGUKKyAgIGFjY2VzcyBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2FucyB0aHJvdWdoIHRoZSA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+CisgICBpbnRlcmZhY2UuICBJZiBpdCBkb2Vz bid0LCB0aGUgPHN0cnVjdGZpZWxkPmFtcG9zcmVzZXQ8L3N0cnVjdGZpZWxkPiBmaWVsZAorICAg aW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3Qgc2hv dWxkIGJlIHNldCB0bworICAgTlVMTC4gIEluZGV4IEFNcyB0aGF0IGRvbid0IGhhdmUgYW55IHBy aXZhdGUgc3RhdGUgdGhhdCBtaWdodCBuZWVkIHRvIGJlCisgICBpbnZhbGlkYXRlZCBtaWdodCBz dGlsbCBmaW5kIGl0IHVzZWZ1bCB0byBwcm92aWRlIGFuIGVtcHR5CisgICA8c3RydWN0ZmllbGQ+ YW1wb3NyZXNldDwvc3RydWN0ZmllbGQ+IGZ1bmN0aW9uOyBpZiA8ZnVuY3Rpb24+YW1wb3NyZXNl dDwvZnVuY3Rpb24+CisgICBpcyBzZXQgdG8gTlVMTCwgdGhlIGNvcmUgc3lzdGVtIHdpbGwgYXNz dW1lIHRoYXQgaXQgaXMgdW5zYWZlIHRvIHJlc3RvcmUgYQorICAgbWFya2VkIHBvc2l0aW9uLgog ICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC05OTQsMzAgKzExMjAsNDcgQEAgYW10cmFuc2xhdGVj bXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUp OwogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1 bmN0aW9uPiBmdW5jdGlvbiBoYXMgYSA8bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3Vt ZW50LAorICAgVGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgIGZ1bmN0aW9ucyBoYXZlIGEgPGxpdGVyYWw+ZGly ZWN0aW9uPC9saXRlcmFsPiBhcmd1bWVudCwKICAgIHdoaWNoIGNhbiBiZSBlaXRoZXIgPGxpdGVy YWw+Rm9yd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+ICh0aGUgbm9ybWFsIGNhc2UpCiAgICBv ciAgPGxpdGVyYWw+QmFja3dhcmRTY2FuRGlyZWN0aW9uPC9saXRlcmFsPi4gIElmIHRoZSBmaXJz dCBjYWxsIGFmdGVyCiAgICA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPiBzcGVjaWZpZXMg PGxpdGVyYWw+QmFja3dhcmRTY2FuRGlyZWN0aW9uPC9saXRlcmFsPiwgdGhlbiB0aGUKICAgIHNl dCBvZiBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGlzIHRvIGJlIHNjYW5uZWQgYmFjay10by1mcm9u dCByYXRoZXIgdGhhbiBpbgotICAgdGhlIG5vcm1hbCBmcm9udC10by1iYWNrIGRpcmVjdGlvbiwg c28gPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IHJldHVybgotICAgdGhlIGxh c3QgbWF0Y2hpbmcgdHVwbGUgaW4gdGhlIGluZGV4LCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgb25l IGFzIGl0Ci0gICBub3JtYWxseSB3b3VsZC4gIChUaGlzIHdpbGwgb25seSBvY2N1ciBmb3IgYWNj ZXNzCi0gICBtZXRob2RzIHRoYXQgc2V0IDxzdHJ1Y3RmaWVsZD5hbWNhbm9yZGVyPC9zdHJ1Y3Rm aWVsZD4gdG8gdHJ1ZS4pICBBZnRlciB0aGUKLSAgIGZpcnN0IGNhbGwsIDxmdW5jdGlvbj5hbWdl dHR1cGxlPC9mdW5jdGlvbj4gbXVzdCBiZSBwcmVwYXJlZCB0byBhZHZhbmNlIHRoZSBzY2FuIGlu CisgICB0aGUgbm9ybWFsIGZyb250LXRvLWJhY2sgZGlyZWN0aW9uLiAgSW4gdGhpcyBjYXNlLAor ICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IHJldHVybiB0aGUgbGFzdCBt YXRjaGluZyB0dXBsZSBpbiB0aGUKKyAgIGluZGV4LCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgb25l IGFzIGl0IG5vcm1hbGx5IHdvdWxkLiAgU2ltaWxhcmx5LAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPiBtdXN0IHJldHVybiB0aGUgbGFzdCBtYXRjaGluZyBiYXRjaCBvZiBpdGVt cworICAgd2hlbiBlaXRoZXIgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIgPGZ1bmN0aW9uPmFtcmVzY2Fu PC9mdW5jdGlvbj4gc3BlY2lmaWVzCisgICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248 L2xpdGVyYWw+LCBvciBhIHN1YnNlcXVlbnQgY2FsbCBoYXMKKyAgIDxsaXRlcmFsPk5VTEw8L2xp dGVyYWw+IGFzIGl0cyA8c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3RydWN0ZmllbGQ+IGFyZ3Vt ZW50CisgICAoaW5kaWNhdGluZyBhIGJhY2t3YXJkIHNjYW4gcmVzdGFydCkuICAoVGhpcyBiYWNr d2FyZC1zY2FuIGJlaGF2aW9yIHdpbGwKKyAgIG9ubHkgb2NjdXIgZm9yIGFjY2VzcyBtZXRob2Rz IHRoYXQgc2V0IDxzdHJ1Y3RmaWVsZD5hbWNhbm9yZGVyPC9zdHJ1Y3RmaWVsZD4KKyAgIHRvIHRy dWUuKSAgQWZ0ZXIgdGhlIGZpcnN0IGNhbGwsIGJvdGggPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1 bmN0aW9uPiBhbmQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gbXVzdCBiZSBw cmVwYXJlZCB0byBhZHZhbmNlIHRoZSBzY2FuIGluCiAgICBlaXRoZXIgZGlyZWN0aW9uIGZyb20g dGhlIG1vc3QgcmVjZW50bHkgcmV0dXJuZWQgZW50cnkuICAoQnV0IGlmCiAgICA8c3RydWN0Zmll bGQ+YW1jYW5iYWNrd2FyZDwvc3RydWN0ZmllbGQ+IGlzIGZhbHNlLCBhbGwgc3Vic2VxdWVudAog ICAgY2FsbHMgd2lsbCBoYXZlIHRoZSBzYW1lIGRpcmVjdGlvbiBhcyB0aGUgZmlyc3Qgb25lLikK ICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgQWNjZXNzIG1ldGhvZHMgdGhhdCBzdXBwb3J0IG9y ZGVyZWQgc2NhbnMgbXVzdCBzdXBwb3J0IDxxdW90ZT5tYXJraW5nPC9xdW90ZT4gYQotICAgcG9z aXRpb24gaW4gYSBzY2FuIGFuZCBsYXRlciByZXR1cm5pbmcgdG8gdGhlIG1hcmtlZCBwb3NpdGlv bi4gIFRoZSBzYW1lCi0gICBwb3NpdGlvbiBtaWdodCBiZSByZXN0b3JlZCBtdWx0aXBsZSB0aW1l cy4gIEhvd2V2ZXIsIG9ubHkgb25lIHBvc2l0aW9uIG5lZWQKLSAgIGJlIHJlbWVtYmVyZWQgcGVy IHNjYW47IGEgbmV3IDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBjYWxsIG92ZXJyaWRl cyB0aGUKLSAgIHByZXZpb3VzbHkgbWFya2VkIHBvc2l0aW9uLiAgQW4gYWNjZXNzIG1ldGhvZCB0 aGF0IGRvZXMgbm90IHN1cHBvcnQgb3JkZXJlZAotICAgc2NhbnMgbmVlZCBub3QgcHJvdmlkZSA8 ZnVuY3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5hbXJlc3RycG9zPC9m dW5jdGlvbj4KLSAgIGZ1bmN0aW9ucyBpbiA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3Ry dWN0bmFtZT47IHNldCB0aG9zZSBwb2ludGVycyB0byBOVUxMCi0gICBpbnN0ZWFkLgorICAgQWNj ZXNzIG1ldGhvZHMgdXNpbmcgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50 ZXJmYWNlIG1heQorICAgc3VwcG9ydCA8cXVvdGU+bWFya2luZzwvcXVvdGU+IGEgcG9zaXRpb24g aW4gYSBzY2FuIGFuZCBsYXRlciByZXR1cm5pbmcgdG8KKyAgIHRoZSBtYXJrZWQgcG9zaXRpb24s IHRob3VnaCB0aGlzIGlzIG9wdGlvbmFsLiAgSWYgdGhlIHNhbWUgbWFya2VkIHBvc2l0aW9uCisg ICBtaWdodCBiZSByZXN0b3JlZCBtdWx0aXBsZSB0aW1lcywgdGhlIGNvcmUgc3lzdGVtIG1hbmFn ZXMgbWFya2luZyBhbmQKKyAgIHJlc3RvcmF0aW9uIHRocm91Z2ggdGhlIDxmdW5jdGlvbj5pbmRl eF9iYXRjaF9tYXJrX3BvczwvZnVuY3Rpb24+IGFuZAorICAgPGZ1bmN0aW9uPmluZGV4X2JhdGNo X3Jlc3RvcmVfcG9zPC9mdW5jdGlvbj4gaW50ZXJuYWwgZnVuY3Rpb25zLiAgV2hlbiBhCisgICBt YXJrZWQgcG9zaXRpb24gaXMgcmVzdG9yZWQsIHRoZSBpbmRleCBBTSBpcyBub3RpZmllZCB2aWEg dGhlCisgICA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGNhbGxiYWNrIHNvIGl0IGNh biBpbnZhbGlkYXRlIGFueSBwcml2YXRlCisgICBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJh Y2tzIHRoZSBzY2FuJ3MgcHJvZ3Jlc3MgKHN1Y2ggYXMgYXJyYXkga2V5CisgICBzdGF0ZSkuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rp b24+IGZ1bmN0aW9uIGluIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgor ICAgc2hvdWxkIGJlIHNldCB0byBOVUxMIGZvciBhY2Nlc3MgbWV0aG9kcyB0aGF0IGRvIG5vdCBz dXBwb3J0IG1hcmsvcmVzdG9yZS4KKyAgIEZvciBhY2Nlc3MgbWV0aG9kcyB0aGF0IGRvIHN1cHBv cnQgdGhpcyBmZWF0dXJlLCA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+CisgICBtdXN0 IGJlIHByb3ZpZGVkICh0aG91Z2ggaXQgY2FuIGJlIGEgbm8tb3AgZnVuY3Rpb24gaWYgdGhlIEFN IGhhcyBubyBwcml2YXRlCisgICBzdGF0ZSB0byBpbnZhbGlkYXRlKS4KICAgPC9wYXJhPgogCiAg IDxwYXJhPgpAQCAtMTE4Niw2ICsxMzI5LDk0IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFy ZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgIHJlZHVjZSB0 aGUgZnJlcXVlbmN5IG9mIHN1Y2ggdHJhbnNhY3Rpb24gY2FuY2VsbGF0aW9ucy4KICAgPC9wYXJh PgogCisgIDxzZWN0MiBpZD0iaW5kZXgtbG9ja2luZy1iYXRjaGVzIj4KKyAgIDx0aXRsZT5CYXRj aCBTY2FubmluZyBhbmQgQnVmZmVyIFBpbiBNYW5hZ2VtZW50PC90aXRsZT4KKworICAgPHBhcmE+ CisgICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCBpbXBsZW1lbnQgdGhlIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgICBpbnRlcmZhY2UgbXVzdCBjb29wZXJhdGUgd2l0aCB0 aGUgY29yZSBzeXN0ZW0gdG8gbWFuYWdlIGJ1ZmZlciBwaW5zIGluIGEKKyAgICB3YXkgdGhhdCBw cmV2ZW50cyBjb25jdXJyZW50IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gZnJvbSBjcmVhdGlu ZworICAgIFRJRCByZWN5Y2xpbmcgaGF6YXJkcy4gIFVubGlrZSA8ZnVuY3Rpb24+YW1nZXR0dXBs ZTwvZnVuY3Rpb24+IHNjYW5zLAorICAgIHdoaWNoIGtlZXAgdGhlIGluZGV4IGFjY2VzcyBtZXRo b2QgaW4gY29udHJvbCBvZiBzY2FuIHByb2dyZXNzaW9uLAorICAgIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4gc2NhbnMgZ2l2ZSBjb250cm9sIHRvIHRoZSB0YWJsZSBhY2Nlc3MKKyAg ICBtZXRob2QsIHdoaWNoIG1heSBmZXRjaCB0YWJsZSB0dXBsZXMgaW4gYSBkaWZmZXJlbnQgb3Jk ZXIgdGhhbiB0aGUgaW5kZXgKKyAgICBlbnRyaWVzIHdlcmUgcmV0dXJuZWQuICBUaGlzIGNyZWF0 ZXMgdGhlIG5lZWQgZm9yIGV4cGxpY2l0IGJ1ZmZlciBwaW4KKyAgICBtYW5hZ2VtZW50IHRvIGVu c3VyZSB0aGUgdGFibGUgYWNjZXNzIG1ldGhvZCBkb2VzIG5vdCBjb25mdXNlIGEgcmVjeWNsZWQK KyAgICBUSUQgd2l0aCB0aGUgb3JpZ2luYWwgcm93IGl0IG1lYW50IHRvIHJlZmVyZW5jZS4KKyAg IDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgV2hlbiA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+IHJldHVybnMgYSBiYXRjaCwgdGhlIGJhdGNoJ3MKKyAgICBhc3NvY2lhdGVkIGluZGV4 IHBhZ2UgbWF5IGJlIHJldGFpbmVkIGluIGEgYnVmZmVyIHdpdGggYSBwaW4gaGVsZCBvbiBpdC4K KyAgICBUaGlzIHBpbiBzZXJ2ZXMgYXMgYW4gaW50ZXJsb2NrOiA8Y29tbWFuZD5WQUNVVU08L2Nv bW1hbmQ+IGNhbm5vdCByZWN5Y2xlCisgICAgVElEcyBvbiBhIHBpbm5lZCBwYWdlLiAgVGhlIGJ1 ZmZlciBwaW4gcHJvdGVjdHMgb25seSB0aGUgdGFibGUgYWNjZXNzCisgICAgbWV0aG9kJ3MgYWJp bGl0eSB0byBtYXAgVElEcyB0byByb3dzIGNvcnJlY3RseTsgaXQgZG9lcyBub3QgcHJvdGVjdCB0 aGUKKyAgICBpbmRleCBzdHJ1Y3R1cmUgaXRzZWxmLiAgSW5kZXggYWNjZXNzIG1ldGhvZHMgbWF5 IHVzZSBwaW5zIGZvciBvdGhlcgorICAgIHB1cnBvc2VzIChmb3IgZXhhbXBsZSwgbWFpbnRhaW5p bmcgYSBkZXNjZW50IHN0YWNrIG9mIHBpbm5lZCBwYWdlcyksIGJ1dAorICAgIHRob3NlIHVzZXMg YXJlIGludGVybmFsIHRvIHRoZSBhY2Nlc3MgbWV0aG9kIGFuZCBpbmRlcGVuZGVudCBvZiB0aGUK KyAgICB0YWJsZS1BTSBzeW5jaHJvbml6YXRpb24gZGVzY3JpYmVkIGhlcmUuCisgICA8L3BhcmE+ CisKKyAgIDxwYXJhPgorICAgIFdoZXRoZXIgYSBwaW4gc2hvdWxkIGJlIGhlbGQgd2hlbiByZXR1 cm5pbmcgYSBiYXRjaCBpcyBjb250cm9sbGVkIGJ5IHRoZQorICAgIDxzdHJ1Y3RmaWVsZD5kcm9w UGluPC9zdHJ1Y3RmaWVsZD4gZmxhZyBpbiB0aGUgPHR5cGU+QmF0Y2hSaW5nQnVmZmVyPC90eXBl PgorICAgIHN0cnVjdHVyZS4gV2hlbiA8bGl0ZXJhbD5kcm9wUGluPC9saXRlcmFsPiBpcyB0cnVl LCB0aGUgaW5kZXggYWNjZXNzIG1ldGhvZAorICAgIGRyb3BzIHRoZSBwaW4gYmVmb3JlIHJldHVy bmluZyB0aGUgYmF0Y2gsIHdoaWNoIGF2b2lkcyBibG9ja2luZworICAgIDxjb21tYW5kPlZBQ1VV TTwvY29tbWFuZD4uIFdoZW4gPGxpdGVyYWw+ZHJvcFBpbjwvbGl0ZXJhbD4gaXMgZmFsc2UsIHRo ZQorICAgIGluZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBob2xkIHRoZSBwaW4gdW50aWwgdGhlIGJh dGNoIGlzIGZyZWVkIHZpYQorICAgIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rpb24+LiAg VGhlIGNvcmUgc3lzdGVtIHNldHMgdGhlCisgICAgPGxpdGVyYWw+ZHJvcFBpbjwvbGl0ZXJhbD4g ZmxhZyBiYXNlZCBvbiBzY2FuIHR5cGU6IGl0IGlzIHRydWUgZm9yCisgICAgTVZDQy1jb21wbGlh bnQgc25hcHNob3RzIG9uIGxvZ2dlZCByZWxhdGlvbnMgKHVubGVzcyBpbmRleC1vbmx5IHNjYW5z IGFyZQorICAgIGluIHVzZSksIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgICA8L3BhcmE+CisKKyAg IDxwYXJhPgorICAgIFdoZW4gPGxpdGVyYWw+ZHJvcFBpbjwvbGl0ZXJhbD4gaXMgdHJ1ZSBhbmQg dGhlIGluZGV4IGFjY2VzcyBtZXRob2QgaXMKKyAgICBlYWdlciBhYm91dCBkcm9wcGluZyBwaW5z LCBpdCBtdXN0IHNhdmUgdGhlIHBhZ2UncyBMU04gaW4gdGhlIGJhdGNoIGJlZm9yZQorICAgIHJl dHVybmluZy4gTGF0ZXIsIHdoZW4gPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4gaXMg Y2FsbGVkIGFuZCB0aGUKKyAgICBhY2Nlc3MgbWV0aG9kIHdpc2hlcyB0byBzZXQgPGxpdGVyYWw+ TFBfREVBRDwvbGl0ZXJhbD4gYml0cyB0byBtYXJrIGRlYWQKKyAgICB0dXBsZXMsIGl0IG11c3Qg dmVyaWZ5IHRoYXQgdGhlIHBhZ2UncyBMU04gaGFzIG5vdCBjaGFuZ2VkIHNpbmNlIHRoZSBiYXRj aAorICAgIHdhcyByZWFkLiBJZiB0aGUgTFNOIGhhcyBjaGFuZ2VkLCB0aGUgcGFnZSBtYXkgaGF2 ZSBiZWVuIG1vZGlmaWVkIGJ5CisgICAgY29uY3VycmVudCBhY3Rpdml0eSBhbmQgaXQgaXMgdW5z YWZlIHRvIHNldCA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBiaXRzLgorICAgIFRoaXMgTFNO LWJhc2VkIHZhbGlkYXRpb24gc2NoZW1lIHByb3RlY3RzIGFnYWluc3QgVElEIHJlY3ljbGluZyBy YWNlcyB3aGVuCisgICAgcGlucyBoYXZlIGJlZW4gZHJvcHBlZC4gIFdoZW4gPGxpdGVyYWw+ZHJv cFBpbjwvbGl0ZXJhbD4gaXMgZmFsc2UsIHRoZSBwaW4KKyAgICBwcmV2ZW50cyB1bnNhZmUgY29u Y3VycmVudCByZW1vdmFsIG9mIHRhYmxlIFRJRCByZWZlcmVuY2VzIGJ5CisgICAgPGNvbW1hbmQ+ VkFDVVVNPC9jb21tYW5kPiwgc28gbm8gTFNOIGNoZWNrIGlzIG5lY2Vzc2FyeS4KKyAgIDwvcGFy YT4KKworICAgPHBhcmE+CisgICAgVGhlIGNvcmUgc3lzdGVtIHByb3ZpZGVzIHRocmVlIHV0aWxp dHkgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBiYXRjaAorICAgIHJlc291cmNlczoKKyAgICA8ZnVu Y3Rpb24+aW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jPC9mdW5jdGlvbj4gYWxsb2NhdGVzIGEgbmV3 IGJhdGNoIG9yCisgICAgcmV1c2VzIGEgY2FjaGVkIG9uZSwKKyAgICA8ZnVuY3Rpb24+aW5kZXhh bV91dGlsX2JhdGNoX3VubG9jazwvZnVuY3Rpb24+IGRyb3BzIHRoZSBsb2NrIGFuZAorICAgIGNv bmRpdGlvbmFsbHkgZHJvcHMgdGhlIHBpbiBvbiBhIGJhdGNoJ3MgaW5kZXggcGFnZSAoYmFzZWQg b24gdGhlCisgICAgPGxpdGVyYWw+ZHJvcFBpbjwvbGl0ZXJhbD4gc2V0dGluZyksIGFuZAorICAg IDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZTwvZnVuY3Rpb24+IGZyZWVzIG9y IGNhY2hlcyBhIGJhdGNoLgorICAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHNob3VsZCB1c2UgdGhl c2UgdXRpbGl0aWVzIHJhdGhlciB0aGFuIG1hbmFnaW5nCisgICAgYnVmZmVycyBkaXJlY3RseS4g IFRoZSA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS88L2ZpbGVuYW1lPgorICAg IGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGEgcmVmZXJlbmNlIGV4YW1wbGUgb2YgY29ycmVjdCB1 c2FnZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgTm90ZSB0aGF0IDxmdW5jdGlvbj5h bWZyZWViYXRjaDwvZnVuY3Rpb24+IGlzIGNhbGxlZCBvbmx5IGJ5IHRoZSBjb3JlIGNvZGUKKyAg ICBhbmQgdGFibGUgYWNjZXNzIG1ldGhvZCwgbmV2ZXIgYnkgdGhlIGluZGV4IGFjY2VzcyBtZXRo b2QgaXRzZWxmLiBUaGUKKyAgICBpbmRleCBBTSBtdXN0IG5vdCBhc3N1bWUgdGhhdCBhIGNhbGwg dG8gPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4KKyAgICB3aWxsIHRha2UgcGxhY2Ug YmVmb3JlIGFub3RoZXIgY2FsbCB0byA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+Cisg ICAgKGZvciB0aGUgc2FtZSBpbmRleCBzY2FuKSB0YWtlcyBwbGFjZS4KKyAgIDwvcGFyYT4KKwor ICAgPHBhcmE+CisgICAgVGhlIGluZGV4IEFNIG11c3QgYWxzbyBhdm9pZCByZWx5aW5nIG9uIHRo ZSBjb3JlIGNvZGUgY2FsbGluZworICAgIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rpb24+ IHdpdGggYmF0Y2hlcyB0aGF0IGFyZSBpbiBhbnkgcGFydGljdWxhcgorICAgIG9yZGVyLiAgRm9y IGV4YW1wbGUsIGl0IGlzIG5vdCBva2F5IGZvciBhbiBpbmRleCBBTSB0byBhc3N1bWUgdGhhdCBj YWxscworICAgIHRvIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rpb24+IHdpbGwgdGFrZSBw bGFjZSBpbiB0aGUgc2FtZSBvcmRlciBhcworICAgIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IGNhbGxzIHRoYXQgaW5pdGlhbGx5CisgICAgYWxsb2NhdGVkL3BvcHVsYXRlZC9y ZXR1cm5lZCBlYWNoIGJhdGNoLgorICAgPC9wYXJhPgorCisgIDwvc2VjdDI+CisKICA8L3NlY3Qx PgogCiAgPHNlY3QxIGlkPSJpbmRleC11bmlxdWUtY2hlY2tzIj4KZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90 YWJsZS5zZ21sCmluZGV4IDc3YzVhNzYzZC4uNTViNzIyMmU5IDEwMDY0NAotLS0gYS9kb2Mvc3Jj L3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRl X3RhYmxlLnNnbWwKQEAgLTExNTIsMTIgKzExNTIsMTMgQEAgV0lUSCAoIE1PRFVMVVMgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bWVyaWNfbGl0ZXJhbDwvcmVwbGFjZWFibGU+LCBS RU0KICAgICAgPC9wYXJhPgogCiAgICAgIDxwYXJhPgotICAgICAgVGhlIGFjY2VzcyBtZXRob2Qg bXVzdCBzdXBwb3J0IDxsaXRlcmFsPmFtZ2V0dHVwbGU8L2xpdGVyYWw+IChzZWUgPHhyZWYKLSAg ICAgIGxpbmtlbmQ9ImluZGV4YW0iLz4pOyBhdCBwcmVzZW50IHRoaXMgbWVhbnMgPGFjcm9ueW0+ R0lOPC9hY3JvbnltPgotICAgICAgY2Fubm90IGJlIHVzZWQuICBBbHRob3VnaCBpdCdzIGFsbG93 ZWQsIHRoZXJlIGlzIGxpdHRsZSBwb2ludCBpbiB1c2luZwotICAgICAgQi10cmVlIG9yIGhhc2gg aW5kZXhlcyB3aXRoIGFuIGV4Y2x1c2lvbiBjb25zdHJhaW50LCBiZWNhdXNlIHRoaXMKLSAgICAg IGRvZXMgbm90aGluZyB0aGF0IGFuIG9yZGluYXJ5IHVuaXF1ZSBjb25zdHJhaW50IGRvZXNuJ3Qg ZG8gYmV0dGVyLgotICAgICAgU28gaW4gcHJhY3RpY2UgdGhlIGFjY2VzcyBtZXRob2Qgd2lsbCBh bHdheXMgYmUgPGFjcm9ueW0+R2lTVDwvYWNyb255bT4gb3IKKyAgICAgIFRoZSBhY2Nlc3MgbWV0 aG9kIG11c3Qgc3VwcG9ydCBlaXRoZXIgPGxpdGVyYWw+YW1nZXR0dXBsZTwvbGl0ZXJhbD4KKyAg ICAgIG9yIDxsaXRlcmFsPmFtZ2V0YmF0Y2g8L2xpdGVyYWw+IChzZWUgPHhyZWYgbGlua2VuZD0i aW5kZXhhbSIvPik7IGF0CisgICAgICBwcmVzZW50IHRoaXMgbWVhbnMgPGFjcm9ueW0+R0lOPC9h Y3JvbnltPiBjYW5ub3QgYmUgdXNlZC4gIEFsdGhvdWdoCisgICAgICBpdCdzIGFsbG93ZWQsIHRo ZXJlIGlzIGxpdHRsZSBwb2ludCBpbiB1c2luZyBCLXRyZWUgb3IgaGFzaCBpbmRleGVzCisgICAg ICB3aXRoIGFuIGV4Y2x1c2lvbiBjb25zdHJhaW50LCBiZWNhdXNlIHRoaXMgZG9lcyBub3RoaW5n IHRoYXQgYW4KKyAgICAgIG9yZGluYXJ5IHVuaXF1ZSBjb25zdHJhaW50IGRvZXNuJ3QgZG8gYmV0 dGVyLiAgU28gaW4gcHJhY3RpY2UgdGhlCisgICAgICBhY2Nlc3MgbWV0aG9kIHdpbGwgYWx3YXlz IGJlIDxhY3JvbnltPkdpU1Q8L2Fjcm9ueW0+IG9yCiAgICAgICA8YWNyb255bT5TUC1HaVNUPC9h Y3JvbnltPi4KICAgICAgPC9wYXJhPgogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2R1 bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMgYi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2lu ZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKaW5kZXggOWViOGYwYTZjLi45ZDRmZGRlYzQgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwor KysgYi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKQEAg LTMxNywxMCArMzE3LDExIEBAIGRpaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdp bnNjYW4gPSBkaWJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZGlyZXNjYW4sCiAJCS5hbWdldHR1 cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1mcmVlYmF0Y2ggPSBOVUxM LAogCQkuYW1nZXRiaXRtYXAgPSBOVUxMLAogCQkuYW1lbmRzY2FuID0gZGllbmRzY2FuLAotCQku YW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9 IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFs bGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKaW5kZXggMTRkZWMyZDQ5Li5kMjViYTM0MTIgMTAwNjQ0Ci0tLSBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CkBAIC0yMjYsOCArMjI2LDYgQEAgQlRTY2FuSW5zZXJ0RGF0YQogQlRTY2FuS2V5 UHJlcHJvYwogQlRTY2FuT3BhcXVlCiBCVFNjYW5PcGFxdWVEYXRhCi1CVFNjYW5Qb3NEYXRhCi1C VFNjYW5Qb3NJdGVtCiBCVFNoYXJlZAogQlRTb3J0QXJyYXlDb250ZXh0CiBCVFNwb29sCkBAIC0z NDcxLDEyICszNDY5LDEwIEBAIGFtZ2V0dHVwbGVfZnVuY3Rpb24KIGFtaW5pdHBhcmFsbGVsc2Nh bl9mdW5jdGlvbgogYW1pbnNlcnRfZnVuY3Rpb24KIGFtaW5zZXJ0Y2xlYW51cF9mdW5jdGlvbgot YW1tYXJrcG9zX2Z1bmN0aW9uCiBhbW9wdGlvbnNfZnVuY3Rpb24KIGFtcGFyYWxsZWxyZXNjYW5f ZnVuY3Rpb24KIGFtcHJvcGVydHlfZnVuY3Rpb24KIGFtcmVzY2FuX2Z1bmN0aW9uCi1hbXJlc3Ry cG9zX2Z1bmN0aW9uCiBhbXRyYW5zbGF0ZV9jbXB0eXBlX2Z1bmN0aW9uCiBhbXRyYW5zbGF0ZV9z dHJhdGVneV9mdW5jdGlvbgogYW12YWN1dW1jbGVhbnVwX2Z1bmN0aW9uCi0tIAoyLjUxLjAKCg== --000000000000d0029506484af358--