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 1w7hJx-005bcl-2n for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Mar 2026 22:12:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w7hJw-00DUAU-0b for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Mar 2026 22:12:24 +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 1w7hJv-00DUAM-0X for pgsql-hackers@lists.postgresql.org; Tue, 31 Mar 2026 22:12:24 +0000 Received: from mail-lf1-x12b.google.com ([2a00:1450:4864:20::12b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w7hJs-000000022Pe-2Kcy for pgsql-hackers@postgresql.org; Tue, 31 Mar 2026 22:12:22 +0000 Received: by mail-lf1-x12b.google.com with SMTP id 2adb3069b0e04-5a2a70bb69eso6753208e87.2 for ; Tue, 31 Mar 2026 15:12:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774995139; cv=none; d=google.com; s=arc-20240605; b=YSKabN5Tht8DPDXcDs/V9KYrKCShMB6MTisv/mfB+wXFSQsVQi+5nyMlChQaSEwsj2 JPbnlf2f7UW8d7Yc2pgp00SIViJVH+mdq/UPczXHm67e2Eos/4Lg4EKZvJ5wynTI1gFY VdtwDyKXFNk+MIkHP37BcLT6/YmNuKT8QD2WNLQCKakfVLNqLYLcng/n6Dv1xwgWAXY3 zvwncJRXw2iyXmovhK/lX9qYbO9g9aO7dnR+tlD3x+NhsPJYv3NMGPWz/oqa927BjIgN G47RtUDBZAoc0utPHnzwDyTtb4FK+VQr6z5SAUD2LwZpJF5vG8WWodTe1qMUiPuKJQxa MZ/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=miMwHqlqNEbffdZpCG26umwY6kQt/4BUg3I4rQbElpg=; fh=WI8cJt2Z7oeACG2Tr7J7ooWiF1SVKjUei9UYmzD7ep4=; b=B6BKshRG2w15Kl7WM7+oTvxKgyrD6BXJLI0NnoBz/Q3+sNMSQM0Bo7pB7tuuj9BLSy gsqZ9lgXlqYD/TClQiKu/L8kc5lFQDcFir9nxlItsLaVGg16kyJC1FXOpd1LsiJd4/bB QqyIvXQqgn/ZLLjgMtrWoUBEOTurs/ABzuC9tpxAkJmtgVDlgNUUwg4DOo7cqcnCtFjX D1mBlDGj3Wd7VWKBORa2FMOICwShkBfJHyUx6RxiK3pWK1VZIcHRNPczcUiA0rQaZVq6 wTxbnH2vgXpQrQX7sJW6grDA6XINR6mzUB6vEOg/yfX8OqcAFxXpYdBvietSFjdxeocW AZsg==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774995139; x=1775599939; darn=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=miMwHqlqNEbffdZpCG26umwY6kQt/4BUg3I4rQbElpg=; b=N9lleBVe05HyGiQYSxMYIsz5YzuODSJSu3bn7d6JBg/pnfGcaWenWQXf5ulo1vRa8+ lvxzNnTMtC80vh47L2bwLMq6hZNxRu07Nft8El5N6s4vMwJ6Ug2YRdeK2Pb5v3WzCxsu Ez6EjjXDBgB/+bULS2joYmUtGtnWa3JQ+6xKKh7rykNfgTfalBJD3OaUfGW9JfFnkiT/ XWGFKxxvGjeI3nR2XlaK5/kF/VAlNbdU5tLlNpx5zTce2B4h053UdrophhBmtBDzr09+ oBzEj2TxrsK8MLsPbHJpZcbM/8qgtn9lCLC9ZdOWQHKjzNJNVx5aiwI/IgGzGB9V+p7O eivw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774995139; x=1775599939; 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=miMwHqlqNEbffdZpCG26umwY6kQt/4BUg3I4rQbElpg=; b=UfXWp59rRQu7c2NcKYDHo917l3CZugwIWzDPoEVr9E1uwWN+qMQDB9WnDH/LUJzAGC R54+auxrY+aBTGGoFlohiLRPkzQXBCsmulTaEu/+uYw3Vq48676/TKuGsf+TSEHO7SFo ezcBt9vi+m4kjrGvUdxslz5Tdjc8lgiTw3AD81m9vqYkwjxRGqw/49wgYFRCVoSmyyAF HwVHZnL0+1x+nV5fK1NNT66lBUhCuDy6yE9wA0AiEwXp/mrdBAmUrCS1sGPfsrVjrfs5 BeDml7SE0VdmqgxL8e3Q0ZpLaGhdYkEP6yWhXFedLZ6eK2hqIefGD2tOOsijEQdkYGv7 X34w== X-Forwarded-Encrypted: i=1; AJvYcCUM32CiAYRxz6YAmzWDp/CGceMo5zsdeASugANh/oKVp9ZweJdIypO13iUH2fwrwlTzaeSqkl6IdOdK1u+r@postgresql.org X-Gm-Message-State: AOJu0Yz+8tnDlPl7jp9NuKUR6MpR+rH01owQtMViFCdwiattjA8hn1Vf UlnwltSfFEFuUCWYDfdJarrbWAIBkOWG/7WJHf5Lj3q4CEZjjBlXcEy3byMtitWMviZTA714PWH SRiddtolYm+az/DJxrleKSDTJbd1mmI8= X-Gm-Gg: ATEYQzykQVbcLZx9sWOGvL566Fxzx50DYy9o00qnk93GrNwm+JSJNBy5YH2732xpSGn gSaOGpSqfJi8BXOGJoY/2zy+HLJW6Q8Fz5lQ/78bM3p1c9pvus4tD0lhSJGxPgTnpGXWyAnKQAc D1G/gQ3X0zdvdrD5kIrEVfHMiS/vRQf4758nJioZgLo/ci6FiJ20/CkuJJo1JZt39HJdAEIQ0Ua PKj7kzqUufMFeXgP2Ou/lzAzO+nIRrH6EYliODFO1vc33EG5Sqdt/69JECUHQsafVUp2IEhqbDD r3BnsSQeMPkcy8Ztvh11x9gj7jO0sjky8KpKq5GEqnUBC0qY5N2mK7+vD76OXljPrWcUGw== X-Received: by 2002:a05:6512:118f:b0:5a2:b553:f8cb with SMTP id 2adb3069b0e04-5a2c1f3d47bmr408306e87.45.1774995138701; Tue, 31 Mar 2026 15:12:18 -0700 (PDT) MIME-Version: 1.0 References: <202505181556.3n6oiowvntyr@alvherre.pgsql> <8010.1764584989@localhost> <5778.1764660480@localhost> In-Reply-To: From: Mihail Nikalayeu Date: Wed, 1 Apr 2026 00:11:40 +0200 X-Gm-Features: AQROBzBcGfUM6_wgR_qnGstlDBfLYL42T3ez-CuoKzmarrRmNgorSDsdTA0UjAo Message-ID: Subject: Re: Revisiting {CREATE INDEX, REINDEX} CONCURRENTLY improvements To: Matthias van de Meent Cc: Antonin Houska , Hannu Krosing , Sergey Sargsyan , =?UTF-8?Q?=C3=81lvaro_Herrera?= , Andres Freund , Michael Paquier , PostgreSQL Hackers , Andrey Borodin , Melanie Plageman Content-Type: multipart/mixed; boundary="000000000000b895ca064e594206" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b895ca064e594206 Content-Type: text/plain; charset="UTF-8" Hello! Just rebased. --000000000000b895ca064e594206 Content-Type: application/x-patch; name="v33-0001-Add-stress-tests-for-concurrent-index-builds.patch" Content-Disposition: attachment; filename="v33-0001-Add-stress-tests-for-concurrent-index-builds.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnf26cq20 RnJvbSAxMzc3Mjk3NjAzNTI5ZmFkZWMwNzI3ZWUzZmE3ZGM1MTg1M2I0NDBkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU2F0LCAzMCBOb3YgMjAyNCAxNjoyNDoyMCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjMzIDEvN10gQWRkIHN0cmVzcyB0ZXN0cyBmb3IgY29uY3VycmVudCBpbmRleCBidWls ZHMKCkludHJvZHVjZSBzdHJlc3MgdGVzdHMgZm9yIGNvbmN1cnJlbnQgaW5kZXggb3BlcmF0aW9u czoKLSB0ZXN0IGNvbmN1cnJlbnQgaW5zZXJ0cy91cGRhdGVzIGR1cmluZyBDUkVBVEUvUkVJTkRF WCBJTkRFWCBDT05DVVJSRU5UTFkKLSBjb3ZlciB2YXJpb3VzIGluZGV4IHR5cGVzIChidHJlZSwg Z2luLCBnaXN0LCBicmluLCBoYXNoLCBzcGdpc3QpCi0gdGVzdCB1bmlxdWUgYW5kIG5vbi11bmlx dWUgaW5kZXhlcwotIHRlc3Qgd2l0aCBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcwotIHRlc3Qg Ym90aCBwYXJhbGxlbCBhbmQgbm9uLXBhcmFsbGVsIG9wZXJhdGlvbnMKClRoZXNlIHRlc3RzIHZl cmlmeSB0aGUgYmVoYXZpb3Igb2YgdGhlIGZvbGxvd2luZyBjb21taXRzLgotLS0KIHNyYy9iaW4v cGdfYW1jaGVjay9tZXNvbi5idWlsZCAgfCAgIDEgKwogc3JjL2Jpbi9wZ19hbWNoZWNrL3QvMDA2 X2NpYy5wbCB8IDI3MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBj aGFuZ2VkLCAyNzQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdf YW1jaGVjay90LzAwNl9jaWMucGwKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2FtY2hlY2svbWVz b24uYnVpbGQgYi9zcmMvYmluL3BnX2FtY2hlY2svbWVzb24uYnVpbGQKaW5kZXggNTkyY2VmNzRl Y2IuLjUxYTYyZGNjYjdiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2FtY2hlY2svbWVzb24uYnVp bGQKKysrIGIvc3JjL2Jpbi9wZ19hbWNoZWNrL21lc29uLmJ1aWxkCkBAIC0yOCw2ICsyOCw3IEBA IHRlc3RzICs9IHsKICAgICAgICd0LzAwM19jaGVjay5wbCcsCiAgICAgICAndC8wMDRfdmVyaWZ5 X2hlYXBhbS5wbCcsCiAgICAgICAndC8wMDVfb3BjbGFzc19kYW1hZ2UucGwnLAorICAgICAgJ3Qv MDA2X2NpYy5wbCcsCiAgICAgXSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYW1j aGVjay90LzAwNl9jaWMucGwgYi9zcmMvYmluL3BnX2FtY2hlY2svdC8wMDZfY2ljLnBsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40N2ZjNjViOWRhYgotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iaW4vcGdfYW1jaGVjay90LzAwNl9jaWMucGwKQEAgLTAsMCArMSwyNzMg QEAKKyMgQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorCisjIFRlc3QgUkVJTkRFWCBDT05DVVJSRU5UTFkgd2l0aCBjb25jdXJyZW50IG1vZGlm aWNhdGlvbnMgYW5kIEhPVCB1cGRhdGVzCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFM ID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCit1c2UgY29uc3RhbnQgU1RSRVNT X1BHQkVOQ0hfQ0xJRU5UUyA9PiAzMDsKK3VzZSBjb25zdGFudCBTVFJFU1NfUEdCRU5DSF9KT0JT ID0+IDg7Cit1c2UgY29uc3RhbnQgU1RSRVNTX1BHQkVOQ0hfVFJBTlNBQ1RJT05TID0+IDEwMDAw OwordXNlIGNvbnN0YW50IFNUUkVTU19NQVhfU0xFRVBfTVMgPT4gMTA7CisKK3VzZSBjb25zdGFu dCBERUZBVUxUX1BHQkVOQ0hfQ0xJRU5UUyA9PiAxNTsKK3VzZSBjb25zdGFudCBERUZBVUxUX1BH QkVOQ0hfSk9CUyA9PiA0OwordXNlIGNvbnN0YW50IERFRkFVTFRfUEdCRU5DSF9UUkFOU0FDVElP TlMgPT4gNTAwOwordXNlIGNvbnN0YW50IERFRkFVTFRfTUFYX1NMRUVQX01TID0+IDE7CisKK1Rl c3Q6Ok1vcmUtPmJ1aWxkZXItPnRvZG9fc3RhcnQoJ2ZpbGVzeXN0ZW0gYnVnJykKKyAgaWYgUG9z dGdyZVNRTDo6VGVzdDo6VXRpbHM6Omhhc193YWxfcmVhZF9idWc7CisKK215ICRub2RlOworbXkg JHBnX3Rlc3RfZXh0cmEgPSAkRU5We1BHX1RFU1RfRVhUUkF9IC8vICcnOworbXkgJGlzX3N0cmVz cyA9ICRwZ190ZXN0X2V4dHJhID1+IC9cYnN0cmVzc1xiLyA/IDEgOiAwOworbXkgJHBnYmVuY2hf Y2xpZW50cyA9CisgICRpc19zdHJlc3MgPyBTVFJFU1NfUEdCRU5DSF9DTElFTlRTIDogREVGQVVM VF9QR0JFTkNIX0NMSUVOVFM7CitteSAkcGdiZW5jaF9qb2JzID0gJGlzX3N0cmVzcyA/IFNUUkVT U19QR0JFTkNIX0pPQlMgOiBERUZBVUxUX1BHQkVOQ0hfSk9CUzsKK215ICRwZ2JlbmNoX3RyYW5z YWN0aW9ucyA9CisgICRpc19zdHJlc3MgPyBTVFJFU1NfUEdCRU5DSF9UUkFOU0FDVElPTlMgOiBE RUZBVUxUX1BHQkVOQ0hfVFJBTlNBQ1RJT05TOworbXkgJG1heF9zbGVlcF9tcyA9ICRpc19zdHJl c3MgPyBTVFJFU1NfTUFYX1NMRUVQX01TIDogREVGQVVMVF9NQVhfU0xFRVBfTVM7CitteSAkcGdi ZW5jaF9vcHRpb25zID0gc3ByaW50ZigKKwknLS1uby12YWN1dW0gLS1jbGllbnQ9JWQgLS1qb2Jz PSVkIC0tZXhpdC1vbi1hYm9ydCAtLXRyYW5zYWN0aW9ucz0lZCcsCisJJHBnYmVuY2hfY2xpZW50 cywKKwkkcGdiZW5jaF9qb2JzLAorCSRwZ2JlbmNoX3RyYW5zYWN0aW9ucyk7CitteSAkbm9faG90 ID0gJGlzX3N0cmVzcyA/IGludChyYW5kKDIpKSA6IDA7CisKK3ByaW50KAorCQlzcHJpbnRmKAor CQknc2V0dGluZ3M6IFBHX1RFU1RfRVhUUkE9JXMgc3RyZXNzPSVkIGNsaWVudHM9JWQgam9icz0l ZCB0cmFuc2FjdGlvbnM9JWQgbWF4X3NsZWVwX21zPSVkIG5vX2hvdD0lZCcsCisJCWRlZmluZWQo JEVOVntQR19URVNUX0VYVFJBfSkKKwkJPyAoJHBnX3Rlc3RfZXh0cmEgZXEgJycgPyAnKGVtcHR5 KScgOiAkcGdfdGVzdF9leHRyYSkKKwkJOiAnKHVuZGVmKScsCisJCSRpc19zdHJlc3MsCisJCSRw Z2JlbmNoX2NsaWVudHMsCisJCSRwZ2JlbmNoX2pvYnMsCisJCSRwZ2JlbmNoX3RyYW5zYWN0aW9u cywKKwkJJG1heF9zbGVlcF9tcywKKwkJJG5vX2hvdCkpOworcHJpbnQgIlxuIjsKKworIworIyBU ZXN0IHNldC11cAorIworJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ1JD X3Rlc3QnKTsKKyRub2RlLT5pbml0OworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNv bmYnLAorCSdsb2NrX3RpbWVvdXQgPSAnIC4gKDEwMDAgKiAkUG9zdGdyZVNRTDo6VGVzdDo6VXRp bHM6OnRpbWVvdXRfZGVmYXVsdCkpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNv bmYnLCAnZnN5bmMgPSBvZmYnKTsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25m JywgJ21haW50ZW5hbmNlX3dvcmtfbWVtID0gMzJNQicpOyAjIHRvIGF2b2lkIE9PTQorJG5vZGUt PmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnc2hhcmVkX2J1ZmZlcnMgPSAzMk1CJyk7 ICMgdG8gYXZvaWQgT09NCiskbm9kZS0+c3RhcnQ7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHEoQ1JFQVRFIEVYVEVOU0lPTiBhbWNoZWNrKSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHEoQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHRibChpIGludCBwcmltYXJ5IGtleSwKKwkJ CQkJCQkJYzEgbW9uZXkgZGVmYXVsdCAwLCBjMiBtb25leSBkZWZhdWx0IDAsCisJCQkJCQkJCWMz IG1vbmV5IGRlZmF1bHQgMCwgdXBkYXRlZF9hdCB0aW1lc3RhbXAsCisJCQkJCQkJCWlhIGludDRb XSwgcCBwb2ludCkpKTsKKworaWYgKCRub19ob3QpIHsgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxKENSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgaWR4IE9OIHRibChpLCB1cGRhdGVkX2F0 KTspKTsgfQorCisjIGNyZWF0ZSBzZXF1ZW5jZQorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCBxKENSRUFURSBVTkxPR0dFRCBTRVFVRU5DRSBpbl9yb3dfcmVidWlsZCBTVEFSVCAxIElOQ1JF TUVOVCAxOykpOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKFNFTEVDVCBuZXh0dmFs KCdpbl9yb3dfcmVidWlsZCcpOykpOworCisjIENyZWF0ZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBw cmVkaWNhdGUgdGVzdHMKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcSgKKwlDUkVBVEUg RlVOQ1RJT04gcHJlZGljYXRlX3N0YWJsZSgpIFJFVFVSTlMgYm9vbCBJTU1VVEFCTEUKKwlMQU5H VUFHRSBwbHBnc3FsIEFTICQkCisJQkVHSU4KKwkJRVhFQ1VURSAnU0VMRUNUIHR4aWRfY3VycmVu dCgpJzsKKwkJUkVUVVJOIHRydWU7CisJRU5EOyAkJDsKKykpOworCiskbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHEoCisJQ1JFQVRFIEZVTkNUSU9OIHByZWRpY2F0ZV9jb25zdChpbnRlZ2Vy KSBSRVRVUk5TIGJvb2wgSU1NVVRBQkxFCisJTEFOR1VBR0UgcGxwZ3NxbCBBUyAkJAorCUJFR0lO CisJCVJFVFVSTiBNT0QoJDEsIDIpID0gMDsKKwlFTkQ7ICQkOworKSk7CisKKyMgUnVuIENJQy9S SUMgaW4gZGlmZmVyZW50IG9wdGlvbnMgY29uY3VycmVudGx5IHdpdGggdXBzZXJ0cworJG5vZGUt PnBnYmVuY2goCisJJHBnYmVuY2hfb3B0aW9ucywKKwkwLAorCVtxcnthY3R1YWxseSBwcm9jZXNz ZWR9XSwKKwlbcXJ7XiR9XSwKKwknY29uY3VycmVudCBvcGVyYXRpb25zIHdpdGggUkVJTkRFWC9D UkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZJywKKwl7CisJCSdjb25jdXJyZW50X29wcycgPT4gc3By aW50ZihxKAorCQkJU0VUIGRlYnVnX3BhcmFsbGVsX3F1ZXJ5ID0gb2ZmOyAtLSB0aGlzIGlzIGJl Y2F1c2UgcHJlZGljYXRlX3N0YWJsZSBpbXBsZW1lbnRhdGlvbgorCQkJU0VMRUNUIHBnX3RyeV9h ZHZpc29yeV9sb2NrKDQyKTo6aW50ZWdlciBBUyBnb3Rsb2NrIFxnc2V0CisJCQlcaWYgOmdvdGxv Y2sKKwkJCQlTRUxFQ1QgbmV4dHZhbCgnaW5fcm93X3JlYnVpbGQnKSBBUyBsYXN0X3ZhbHVlIFxn c2V0CisJCQkJXHNldCB2YXJpYW50IHJhbmRvbSgwLCA1KQorCQkJCVxzZXQgcGFyYWxsZWxzIHJh bmRvbSgwLCA0KQorCQkJCVxpZiA6bGFzdF92YWx1ZSA8IDMKKwkJCQkJQUxURVIgVEFCTEUgdGJs IFNFVCAocGFyYWxsZWxfd29ya2Vycz06cGFyYWxsZWxzKTsKKwkJCQkJXGlmIDp2YXJpYW50ID0g MAorCQkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4IE9OIHRibChpLCB1cGRh dGVkX2F0KTsKKwkJCQkJXGVsaWYgOnZhcmlhbnQgPSAxCisJCQkJCQlDUkVBVEUgSU5ERVggQ09O Q1VSUkVOVExZIG5ld19pZHggT04gdGJsKGksIHVwZGF0ZWRfYXQpIFdIRVJFIHByZWRpY2F0ZV9z dGFibGUoKTsKKwkJCQkJXGVsaWYgOnZhcmlhbnQgPSAyCisJCQkJCQlDUkVBVEUgSU5ERVggQ09O Q1VSUkVOVExZIG5ld19pZHggT04gdGJsKGksIHVwZGF0ZWRfYXQpIFdIRVJFIE1PRChpLCAyKSA9 IDA7CisJCQkJCVxlbGlmIDp2YXJpYW50ID0gMworCQkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJF TlRMWSBuZXdfaWR4IE9OIHRibChpLCB1cGRhdGVkX2F0KSBXSEVSRSBwcmVkaWNhdGVfY29uc3Qo aSk7CisJCQkJCVxlbGlmIDp2YXJpYW50ID0gNAorCQkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJF TlRMWSBuZXdfaWR4IE9OIHRibChwcmVkaWNhdGVfY29uc3QoaSkpOworCQkJCQlcZWxpZiA6dmFy aWFudCA9IDUKKwkJCQkJCUNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeCBPTiB0Ymwo aSwgcHJlZGljYXRlX2NvbnN0KGkpLCB1cGRhdGVkX2F0KSBXSEVSRSBwcmVkaWNhdGVfY29uc3Qo aSk7CisJCQkJCVxlbmRpZgorCQkJCQlcc2V0IHNsZWVwX21zIHJhbmRvbSgwLCAlZCkKKwkJCQkJ XHNsZWVwIDpzbGVlcF9tcyBtcworCQkJCQlTRUxFQ1QgYnRfaW5kZXhfY2hlY2soJ25ld19pZHgn LCBoZWFwYWxsaW5kZXhlZCA9PiB0cnVlLCBjaGVja3VuaXF1ZSA9PiB0cnVlKTsKKwkJCQkJUkVJ TkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeDsKKwkJCQkJXHNldCBzbGVlcF9tcyByYW5k b20oMCwgJWQpCisJCQkJCVxzbGVlcCA6c2xlZXBfbXMgbXMKKwkJCQkJU0VMRUNUIGJ0X2luZGV4 X2NoZWNrKCduZXdfaWR4JywgaGVhcGFsbGluZGV4ZWQgPT4gdHJ1ZSwgY2hlY2t1bmlxdWUgPT4g dHJ1ZSk7CisJCQkJCURST1AgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHg7CisJCQkJXGVuZGlm CisJCQkJU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9jayg0Mik7CisJCQlcZWxzZQorCQkJCVxzZXQg bnVtIHJhbmRvbSgxMDAwLCAxMDAwMDApCisJCQkJQkVHSU47CisJCQkJSU5TRVJUIElOVE8gdGJs IFZBTFVFUyhmbG9vcihyYW5kb20oKSo6bnVtKSwwLDAsMCxub3coKSxBUlJBWVtmbG9vcihyYW5k b20oKSoxMDApOjppbnRdLHBvaW50KHJhbmRvbSgpLHJhbmRvbSgpKSkKKwkJCQkJT04gQ09ORkxJ Q1QoaSkgRE8gVVBEQVRFIFNFVCB1cGRhdGVkX2F0ID0gbm93KCksIGlhID0gQVJSQVlbZmxvb3Io cmFuZG9tKCkqMTAwKTo6aW50XSwgcCA9IHBvaW50KHJhbmRvbSgpLHJhbmRvbSgpKTsKKwkJCQlJ TlNFUlQgSU5UTyB0YmwgVkFMVUVTKGZsb29yKHJhbmRvbSgpKjpudW0pLDAsMCwwLG5vdygpLEFS UkFZW2Zsb29yKHJhbmRvbSgpKjEwMCk6OmludF0scG9pbnQocmFuZG9tKCkscmFuZG9tKCkpKQor CQkJCQlPTiBDT05GTElDVChpKSBETyBVUERBVEUgU0VUIHVwZGF0ZWRfYXQgPSBub3coKSwgaWEg PSBBUlJBWVtmbG9vcihyYW5kb20oKSoxMDApOjppbnRdLCBwID0gcG9pbnQocmFuZG9tKCkscmFu ZG9tKCkpOworCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkqOm51bSks MCwwLDAsbm93KCksQVJSQVlbZmxvb3IocmFuZG9tKCkqMTAwKTo6aW50XSxwb2ludChyYW5kb20o KSxyYW5kb20oKSkpCisJCQkJCU9OIENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBkYXRlZF9h dCA9IG5vdygpLCBpYSA9IEFSUkFZW2Zsb29yKHJhbmRvbSgpKjEwMCk6OmludF0sIHAgPSBwb2lu dChyYW5kb20oKSxyYW5kb20oKSk7CisJCQkJSU5TRVJUIElOVE8gdGJsIFZBTFVFUyhmbG9vcihy YW5kb20oKSo6bnVtKSwwLDAsMCxub3coKSxBUlJBWVtmbG9vcihyYW5kb20oKSoxMDApOjppbnRd LHBvaW50KHJhbmRvbSgpLHJhbmRvbSgpKSkKKwkJCQkJT04gQ09ORkxJQ1QoaSkgRE8gVVBEQVRF IFNFVCB1cGRhdGVkX2F0ID0gbm93KCksIGlhID0gQVJSQVlbZmxvb3IocmFuZG9tKCkqMTAwKTo6 aW50XSwgcCA9IHBvaW50KHJhbmRvbSgpLHJhbmRvbSgpKTsKKwkJCQlJTlNFUlQgSU5UTyB0Ymwg VkFMVUVTKGZsb29yKHJhbmRvbSgpKjpudW0pLDAsMCwwLG5vdygpLEFSUkFZW2Zsb29yKHJhbmRv bSgpKjEwMCk6OmludF0scG9pbnQocmFuZG9tKCkscmFuZG9tKCkpKQorCQkJCQlPTiBDT05GTElD VChpKSBETyBVUERBVEUgU0VUIHVwZGF0ZWRfYXQgPSBub3coKSwgaWEgPSBBUlJBWVtmbG9vcihy YW5kb20oKSoxMDApOjppbnRdLCBwID0gcG9pbnQocmFuZG9tKCkscmFuZG9tKCkpOworCQkJCVNF TEVDVCBzZXR2YWwoJ2luX3Jvd19yZWJ1aWxkJywgMSk7CisJCQkJQ09NTUlUOworCQkJXGVuZGlm CisJCQkpLCAkbWF4X3NsZWVwX21zLCAkbWF4X3NsZWVwX21zKQorCX0pOworCiskbm9kZS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHEoVFJVTkNBVEUgVEFCTEUgdGJsOykpOworCisjIFJ1biBDSUMv UklDIGZvciB1bmlxdWUgaW5kZXggY29uY3VycmVudGx5IHdpdGggdXBzZXJ0cworJG5vZGUtPnBn YmVuY2goCisJJHBnYmVuY2hfb3B0aW9ucywKKwkwLAorCVtxcnthY3R1YWxseSBwcm9jZXNzZWR9 XSwKKwlbcXJ7XiR9XSwKKwknY29uY3VycmVudCBvcGVyYXRpb25zIHdpdGggUkVJTkRFWC9DUkVB VEUgSU5ERVggQ09OQ1VSUkVOVExZIGZvciB1bmlxdWUgQlRSRUUnLAorCXsKKwkJJ2NvbmN1cnJl bnRfb3BzX3VuaXF1ZV9pZHgnID0+IHNwcmludGYocSgKKwkJCVNFTEVDVCBwZ190cnlfYWR2aXNv cnlfbG9jayg0Mik6OmludGVnZXIgQVMgZ290bG9jayBcZ3NldAorCQkJXGlmIDpnb3Rsb2NrCisJ CQkJU0VMRUNUIG5leHR2YWwoJ2luX3Jvd19yZWJ1aWxkJykgQVMgbGFzdF92YWx1ZSBcZ3NldAor CQkJCVxzZXQgcGFyYWxsZWxzIHJhbmRvbSgwLCA0KQorCQkJCVxpZiA6bGFzdF92YWx1ZSA8IDMK KwkJCQkJQUxURVIgVEFCTEUgdGJsIFNFVCAocGFyYWxsZWxfd29ya2Vycz06cGFyYWxsZWxzKTsK KwkJCQkJQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeCBPTiB0YmwoaSk7 CisJCQkJCVxzZXQgc2xlZXBfbXMgcmFuZG9tKDAsICVkKQorCQkJCQlcc2xlZXAgOnNsZWVwX21z IG1zCisJCQkJCVNFTEVDVCBidF9pbmRleF9jaGVjaygnbmV3X2lkeCcsIGhlYXBhbGxpbmRleGVk ID0+IHRydWUsIGNoZWNrdW5pcXVlID0+IHRydWUpOworCQkJCQlSRUlOREVYIElOREVYIENPTkNV UlJFTlRMWSBuZXdfaWR4OworCQkJCQlcc2V0IHNsZWVwX21zIHJhbmRvbSgwLCAlZCkKKwkJCQkJ XHNsZWVwIDpzbGVlcF9tcyBtcworCQkJCQlTRUxFQ1QgYnRfaW5kZXhfY2hlY2soJ25ld19pZHgn LCBoZWFwYWxsaW5kZXhlZCA9PiB0cnVlLCBjaGVja3VuaXF1ZSA9PiB0cnVlKTsKKwkJCQkJRFJP UCBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeDsKKwkJCQlcZW5kaWYKKwkJCQlTRUxFQ1QgcGdf YWR2aXNvcnlfdW5sb2NrKDQyKTsKKwkJCVxlbHNlCisJCQkJXHNldCBudW0gcmFuZG9tKDEsIHBv d2VyKDEwLCByYW5kb20oMSwgNSkpKQorCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMoZmxvb3Io cmFuZG9tKCkqOm51bSksMCwwLDAsbm93KCksQVJSQVlbZmxvb3IocmFuZG9tKCkqMTAwKTo6aW50 XSxwb2ludChyYW5kb20oKSxyYW5kb20oKSkpCisJCQkJCU9OIENPTkZMSUNUKGkpIERPIFVQREFU RSBTRVQgdXBkYXRlZF9hdCA9IG5vdygpLCBpYSA9IEFSUkFZW2Zsb29yKHJhbmRvbSgpKjEwMCk6 OmludF0sIHAgPSBwb2ludChyYW5kb20oKSxyYW5kb20oKSk7CisJCQkJU0VMRUNUIHNldHZhbCgn aW5fcm93X3JlYnVpbGQnLCAxKTsKKwkJCVxlbmRpZgorCQkJKSwgJG1heF9zbGVlcF9tcywgJG1h eF9zbGVlcF9tcykKKwl9KTsKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKFRSVU5D QVRFIFRBQkxFIHRibDspKTsKKworIyBSdW4gQ0lDL1JJQyBmb3IgR0lOIHdpdGggdXBzZXJ0cwor JG5vZGUtPnBnYmVuY2goCisJJHBnYmVuY2hfb3B0aW9ucywKKwkwLAorCVtxcnthY3R1YWxseSBw cm9jZXNzZWR9XSwKKwlbcXJ7XiR9XSwKKwknY29uY3VycmVudCBvcGVyYXRpb25zIHdpdGggUkVJ TkRFWC9DUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGZvciBHSU4nLAorCXsKKwkJJ2NvbmN1cnJl bnRfb3BzX2dpbl9pZHgnID0+IHNwcmludGYocSgKKwkJCVNFTEVDVCBwZ190cnlfYWR2aXNvcnlf bG9jayg0Mik6OmludGVnZXIgQVMgZ290bG9jayBcZ3NldAorCQkJXGlmIDpnb3Rsb2NrCisJCQkJ U0VMRUNUIG5leHR2YWwoJ2luX3Jvd19yZWJ1aWxkJykgQVMgbGFzdF92YWx1ZSBcZ3NldAorCQkJ CVxzZXQgcGFyYWxsZWxzIHJhbmRvbSgwLCA0KQorCQkJCVxpZiA6bGFzdF92YWx1ZSA8IDMKKwkJ CQkJQUxURVIgVEFCTEUgdGJsIFNFVCAocGFyYWxsZWxfd29ya2Vycz06cGFyYWxsZWxzKTsKKwkJ CQkJQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4IE9OIHRibCBVU0lORyBHSU4gKGlh KTsKKwkJCQkJXHNldCBzbGVlcF9tcyByYW5kb20oMCwgJWQpCisJCQkJCVxzbGVlcCA6c2xlZXBf bXMgbXMKKwkJCQkJU0VMRUNUIGdpbl9pbmRleF9jaGVjaygnbmV3X2lkeCcpOworCQkJCQlSRUlO REVYIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4OworCQkJCQlcc2V0IHNsZWVwX21zIHJhbmRv bSgwLCAlZCkKKwkJCQkJXHNsZWVwIDpzbGVlcF9tcyBtcworCQkJCQlTRUxFQ1QgZ2luX2luZGV4 X2NoZWNrKCduZXdfaWR4Jyk7CisJCQkJCURST1AgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHg7 CisJCQkJXGVuZGlmCisJCQkJU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9jayg0Mik7CisJCQlcZWxz ZQorCQkJCVxzZXQgbnVtIHJhbmRvbSgxLCBwb3dlcigxMCwgcmFuZG9tKDEsIDUpKSkKKwkJCQlJ TlNFUlQgSU5UTyB0YmwgVkFMVUVTKGZsb29yKHJhbmRvbSgpKjpudW0pLDAsMCwwLG5vdygpLEFS UkFZW2Zsb29yKHJhbmRvbSgpKjEwMCk6OmludF0scG9pbnQocmFuZG9tKCkscmFuZG9tKCkpKQor CQkJCQlPTiBDT05GTElDVChpKSBETyBVUERBVEUgU0VUIHVwZGF0ZWRfYXQgPSBub3coKSwgaWEg PSBBUlJBWVtmbG9vcihyYW5kb20oKSoxMDApOjppbnRdLCBwID0gcG9pbnQocmFuZG9tKCkscmFu ZG9tKCkpOworCQkJCVNFTEVDVCBzZXR2YWwoJ2luX3Jvd19yZWJ1aWxkJywgMSk7CisJCQlcZW5k aWYKKwkJCSksICRtYXhfc2xlZXBfbXMsICRtYXhfc2xlZXBfbXMpCisJfSk7CisKKyRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcShUUlVOQ0FURSBUQUJMRSB0Ymw7KSk7CisKKyMgUnVuIENJ Qy9SSUMgZm9yIEdJU1QvQlJJTi9IQVNIL1NQR0lTVCBpbmRleCBjb25jdXJyZW50bHkgd2l0aCB1 cHNlcnRzCiskbm9kZS0+cGdiZW5jaCgKKwkkcGdiZW5jaF9vcHRpb25zLAorCTAsCisJW3Fye2Fj dHVhbGx5IHByb2Nlc3NlZH1dLAorCVtxcnteJH1dLAorCSdjb25jdXJyZW50IG9wZXJhdGlvbnMg d2l0aCBSRUlOREVYL0NSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgZm9yIEdJU1QvQlJJTi9IQVNI L1NQR0lTVCcsCisJeworCQknY29uY3VycmVudF9vcHNfb3RoZXJfaWR4JyA9PiBzcHJpbnRmKHEo CisJCQlTRUxFQ1QgcGdfdHJ5X2Fkdmlzb3J5X2xvY2soNDIpOjppbnRlZ2VyIEFTIGdvdGxvY2sg XGdzZXQKKwkJCVxpZiA6Z290bG9jaworCQkJCVNFTEVDVCBuZXh0dmFsKCdpbl9yb3dfcmVidWls ZCcpIEFTIGxhc3RfdmFsdWUgXGdzZXQKKwkJCQlcc2V0IHBhcmFsbGVscyByYW5kb20oMCwgNCkK KwkJCQlcaWYgOmxhc3RfdmFsdWUgPCAzCisJCQkJCUFMVEVSIFRBQkxFIHRibCBTRVQgKHBhcmFs bGVsX3dvcmtlcnM9OnBhcmFsbGVscyk7CisJCQkJCVxzZXQgdmFyaWFudCByYW5kb20oMCwgMykK KwkJCQkJXGlmIDp2YXJpYW50ID0gMAorCQkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBu ZXdfaWR4IE9OIHRibCBVU0lORyBHSVNUIChwKTsKKwkJCQkJXGVsaWYgOnZhcmlhbnQgPSAxCisJ CQkJCQlDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsIFVTSU5HIEJSSU4g KHVwZGF0ZWRfYXQpOworCQkJCQlcZWxpZiA6dmFyaWFudCA9IDIKKwkJCQkJCUNSRUFURSBJTkRF WCBDT05DVVJSRU5UTFkgbmV3X2lkeCBPTiB0YmwgVVNJTkcgSEFTSCAodXBkYXRlZF9hdCk7CisJ CQkJCVxlbGlmIDp2YXJpYW50ID0gMworCQkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBu ZXdfaWR4IE9OIHRibCBVU0lORyBTUEdJU1QgKHApOworCQkJCQlcZW5kaWYKKwkJCQkJXHNldCBz bGVlcF9tcyByYW5kb20oMCwgJWQpCisJCQkJCVxzbGVlcCA6c2xlZXBfbXMgbXMKKwkJCQkJUkVJ TkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeDsKKwkJCQkJXHNldCBzbGVlcF9tcyByYW5k b20oMCwgJWQpCisJCQkJCVxzbGVlcCA6c2xlZXBfbXMgbXMKKwkJCQkJRFJPUCBJTkRFWCBDT05D VVJSRU5UTFkgbmV3X2lkeDsKKwkJCQlcZW5kaWYKKwkJCQlTRUxFQ1QgcGdfYWR2aXNvcnlfdW5s b2NrKDQyKTsKKwkJCVxlbHNlCisJCQkJXHNldCBudW0gcmFuZG9tKDEsIHBvd2VyKDEwLCByYW5k b20oMSwgNSkpKQorCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkqOm51 bSksMCwwLDAsbm93KCksQVJSQVlbZmxvb3IocmFuZG9tKCkqMTAwKTo6aW50XSxwb2ludChyYW5k b20oKSxyYW5kb20oKSkpCisJCQkJCU9OIENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBkYXRl ZF9hdCA9IG5vdygpLCBpYSA9IEFSUkFZW2Zsb29yKHJhbmRvbSgpKjEwMCk6OmludF0sIHAgPSBw b2ludChyYW5kb20oKSxyYW5kb20oKSk7CisJCQkJU0VMRUNUIHNldHZhbCgnaW5fcm93X3JlYnVp bGQnLCAxKTsKKwkJCVxlbmRpZgorCQkJKSwgJG1heF9zbGVlcF9tcywgJG1heF9zbGVlcF9tcykK KwkJfSk7CisKKyRub2RlLT5zdG9wOworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjUzLjAKCg== --000000000000b895ca064e594206 Content-Type: application/x-patch; name="v33-0003-Add-Datum-storage-support-to-tuplestore-Extend-t.patch" Content-Disposition: attachment; filename="v33-0003-Add-Datum-storage-support-to-tuplestore-Extend-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnf26cqj2 RnJvbSAyZDY0MDgzN2FmMjVkNGNkZDBhYjU0ZDYxYzY0MWVlMmRkNWE3YzhkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAxMiBKYW4gMjAyNiAwMDo1Nzo1NiArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjMzIDMvN10gQWRkIERhdHVtIHN0b3JhZ2Ugc3VwcG9ydCB0byB0dXBsZXN0b3JlIEV4 dGVuZAogdHVwbGVzdG9yZSB0byBzdG9yZSBpbmRpdmlkdWFsIERhdHVtIHZhbHVlcwoKVGhpcyBz dXBwb3J0IGVuYWJsZXMgdXNhZ2VzIG9mIHR1cGxlc3RvcmUgZm9yIG5vbi10dXBsZSBkYXRhIChU SURzKSBpbiB0aGUgbmV4dCBjb21taXQuCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBs ZXN0b3JlLmMgfCAzNjcgKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogc3JjL2luY2x1ZGUv dXRpbHMvdHVwbGVzdG9yZS5oICAgICAgfCAgMzMgKy0tCiAyIGZpbGVzIGNoYW5nZWQsIDMyNyBp bnNlcnRpb25zKCspLCA3MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9zb3J0L3R1cGxlc3RvcmUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzdG9y ZS5jCmluZGV4IGY5ZTJkOTUxODZhLi4yYTliMjViZDIzOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvc29ydC90dXBsZXN0b3JlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90 dXBsZXN0b3JlLmMKQEAgLTEsMTYgKzEsMTkgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAq IHR1cGxlc3RvcmUuYwotICoJICBHZW5lcmFsaXplZCByb3V0aW5lcyBmb3IgdGVtcG9yYXJ5IHR1 cGxlIHN0b3JhZ2UuCisgKgkgIEdlbmVyYWxpemVkIHJvdXRpbmVzIGZvciB0ZW1wb3Jhcnkgc3Rv cmFnZSBvZiB0dXBsZXMgYW5kIERhdHVtcy4KKyAqCisgKiBUaGlzIG1vZHVsZSBoYW5kbGVzIHRl bXBvcmFyeSBzdG9yYWdlIG9mIGVpdGhlciB0dXBsZXMgb3Igc2luZ2xlCisgKiBEYXR1bSB2YWx1 ZXMgZm9yIHB1cnBvc2VzIHN1Y2ggYXMgTWF0ZXJpYWxpemUgbm9kZXMsIGhhc2hqb2luIGJhdGNo CisgKiBmaWxlcywgZXRjLiBJdCBpcyBlc3NlbnRpYWxseSBhIGR1bWJlZC1kb3duIHZlcnNpb24g b2YgdHVwbGVzb3J0LmM7CisgKiBpdCBkb2VzIG5vIHNvcnRpbmcgb2YgdHVwbGVzIGJ1dCBjYW4g b25seSBzdG9yZSBhbmQgcmVndXJnaXRhdGUgYSBzZXF1ZW5jZQorICogb2YgdHVwbGVzLiAgSG93 ZXZlciwgYmVjYXVzZSBubyBzb3J0IGlzIHJlcXVpcmVkLCBpdCBpcyBhbGxvd2VkIHRvIHN0YXJ0 CisgKiByZWFkaW5nIHRoZSBzZXF1ZW5jZSBiZWZvcmUgaXQgaGFzIGFsbCBiZWVuIHdyaXR0ZW4u CisgKgorICogVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBjdXJzb3JzLCBiZWNhdXNl IGl0IGFsbG93cyByYW5kb20gYWNjZXNzCisgKiB3aXRoaW4gdGhlIGFscmVhZHktc2Nhbm5lZCBw b3J0aW9uIG9mIGEgcXVlcnkgd2l0aG91dCBoYXZpbmcgdG8gcHJvY2VzcworICogdGhlIHVuZGVy bHlpbmcgc2NhbiB0byBjb21wbGV0aW9uLgogICoKLSAqIFRoaXMgbW9kdWxlIGhhbmRsZXMgdGVt cG9yYXJ5IHN0b3JhZ2Ugb2YgdHVwbGVzIGZvciBwdXJwb3NlcyBzdWNoCi0gKiBhcyBNYXRlcmlh bGl6ZSBub2RlcywgaGFzaGpvaW4gYmF0Y2ggZmlsZXMsIGV0Yy4gIEl0IGlzIGVzc2VudGlhbGx5 Ci0gKiBhIGR1bWJlZC1kb3duIHZlcnNpb24gb2YgdHVwbGVzb3J0LmM7IGl0IGRvZXMgbm8gc29y dGluZyBvZiB0dXBsZXMKLSAqIGJ1dCBjYW4gb25seSBzdG9yZSBhbmQgcmVndXJnaXRhdGUgYSBz ZXF1ZW5jZSBvZiB0dXBsZXMuICBIb3dldmVyLAotICogYmVjYXVzZSBubyBzb3J0IGlzIHJlcXVp cmVkLCBpdCBpcyBhbGxvd2VkIHRvIHN0YXJ0IHJlYWRpbmcgdGhlIHNlcXVlbmNlCi0gKiBiZWZv cmUgaXQgaGFzIGFsbCBiZWVuIHdyaXR0ZW4uICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwg Zm9yIGN1cnNvcnMsCi0gKiBiZWNhdXNlIGl0IGFsbG93cyByYW5kb20gYWNjZXNzIHdpdGhpbiB0 aGUgYWxyZWFkeS1zY2FubmVkIHBvcnRpb24gb2YKLSAqIGEgcXVlcnkgd2l0aG91dCBoYXZpbmcg dG8gcHJvY2VzcyB0aGUgdW5kZXJseWluZyBzY2FuIHRvIGNvbXBsZXRpb24uCiAgKiBBbHNvLCBp dCBpcyBwb3NzaWJsZSB0byBzdXBwb3J0IG11bHRpcGxlIGluZGVwZW5kZW50IHJlYWQgcG9pbnRl cnMuCiAgKgogICogQSB0ZW1wb3JhcnkgZmlsZSBpcyB1c2VkIHRvIGhhbmRsZSB0aGUgZGF0YSBp ZiBpdCBleGNlZWRzIHRoZQpAQCAtNjEsNiArNjQsOCBAQAogI2luY2x1ZGUgImV4ZWN1dG9yL2V4 ZWN1dG9yLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZm aWxlLmgiCisjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3Jlc293 bmVyLmgiCiAjaW5jbHVkZSAidXRpbHMvdHVwbGVzdG9yZS5oIgpAQCAtMTE2LDE2ICsxMjEsMTUg QEAgc3RydWN0IFR1cGxlc3RvcmVzdGF0ZQogCUJ1ZkZpbGUgICAgKm15ZmlsZTsJCQkvKiB1bmRl cmx5aW5nIGZpbGUsIG9yIE5VTEwgaWYgbm9uZSAqLwogCU1lbW9yeUNvbnRleHQgY29udGV4dDsJ CS8qIG1lbW9yeSBjb250ZXh0IGZvciBob2xkaW5nIHR1cGxlcyAqLwogCVJlc291cmNlT3duZXIg cmVzb3duZXI7CQkvKiByZXNvd25lciBmb3IgaG9sZGluZyB0ZW1wIGZpbGVzICovCisJT2lkCQkJ ZGF0dW1UeXBlOwkJLyogSW52YWxpZE9pZCBvciBvaWQgb2YgRGF0dW0ncyB0byBiZSBzdG9yZWQg Ki8KKwlpbnQxNgkJZGF0dW1UeXBlTGVuOwkvKiB0eXBlbGVuIG9mIHRoYXQgRGF0dW0gKi8KKwli b29sCQlkYXR1bVR5cGVCeVZhbDsgLyogYnktdmFsdWUgb2YgdGhhdCBEYXR1bSAqLwogCiAJLyoK IAkgKiBUaGVzZSBmdW5jdGlvbiBwb2ludGVycyBkZWNvdXBsZSB0aGUgcm91dGluZXMgdGhhdCBt dXN0IGtub3cgd2hhdCBraW5kCiAJICogb2YgdHVwbGUgd2UgYXJlIGhhbmRsaW5nIGZyb20gdGhl IHJvdXRpbmVzIHRoYXQgZG9uJ3QgbmVlZCB0byBrbm93IGl0LgogCSAqIFRoZXkgYXJlIHNldCB1 cCBieSB0aGUgdHVwbGVzdG9yZV9iZWdpbl94eHggcm91dGluZXMuCiAJICoKLQkgKiAoQWx0aG91 Z2ggdHVwbGVzdG9yZS5jIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGhlYXAgdHVwbGVzLCBJJ3Zl IGNvcGllZAotCSAqIHRoaXMgcGFydCBvZiB0dXBsZXNvcnQuYyBzbyB0aGF0IGV4dGVuc2lvbiB0 byBvdGhlciBraW5kcyBvZiBvYmplY3RzCi0JICogd2lsbCBiZSBlYXN5IGlmIGl0J3MgZXZlciBu ZWVkZWQuKQotCSAqCiAJICogRnVuY3Rpb24gdG8gY29weSBhIHN1cHBsaWVkIGlucHV0IHR1cGxl IGludG8gcGFsbG9jJ2Qgc3BhY2UuIChOQjogd2UKIAkgKiBhc3N1bWUgdGhhdCBhIHNpbmdsZSBw ZnJlZSgpIGlzIGVub3VnaCB0byByZWxlYXNlIHRoZSB0dXBsZSBsYXRlciwgc28KIAkgKiB0aGUg cmVwcmVzZW50YXRpb24gbXVzdCBiZSAiZmxhdCIgaW4gb25lIHBhbGxvYyBjaHVuay4pIHN0YXRl LT5hdmFpbE1lbQpAQCAtMTUwLDYgKzE1NCwxMiBAQCBzdHJ1Y3QgVHVwbGVzdG9yZXN0YXRlCiAJ ICovCiAJdm9pZAkgICAqKCpyZWFkdHVwKSAoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdW5zaWdu ZWQgaW50IGxlbik7CiAKKwkvKgorCSAqIEZ1bmN0aW9uIHRvIGdldCBsZW5ndGggb2YgdHVwbGUg ZnJvbSB0YXBlLiBVc2VkIHRvIHByb3ZpZGUgJ2xlbicgYXJndW1lbnQKKwkgKiBmb3IgcmVhZHR1 cCAoc2VlIGFib3ZlKS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQoKmxlbnR1cCkgKFR1cGxlc3RvcmVz dGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spOworCiAJLyoKIAkgKiBUaGlzIGFycmF5IGhvbGRzIHBv aW50ZXJzIHRvIHR1cGxlcyBpbiBtZW1vcnkgaWYgd2UgYXJlIGluIHN0YXRlIElOTUVNLgogCSAq IEluIHN0YXRlcyBXUklURUZJTEUgYW5kIFJFQURGSUxFIGl0J3Mgbm90IHVzZWQuCkBAIC0xODYs NiArMTk2LDcgQEAgc3RydWN0IFR1cGxlc3RvcmVzdGF0ZQogI2RlZmluZSBDT1BZVFVQKHN0YXRl LHR1cCkJKCgqKHN0YXRlKS0+Y29weXR1cCkgKHN0YXRlLCB0dXApKQogI2RlZmluZSBXUklURVRV UChzdGF0ZSx0dXApICgoKihzdGF0ZSktPndyaXRldHVwKSAoc3RhdGUsIHR1cCkpCiAjZGVmaW5l IFJFQURUVVAoc3RhdGUsbGVuKQkoKCooc3RhdGUpLT5yZWFkdHVwKSAoc3RhdGUsIGxlbikpCisj ZGVmaW5lIExFTlRVUChzdGF0ZSxlb2ZPSykJKCgqKHN0YXRlKS0+bGVudHVwKSAoc3RhdGUsIGVv Zk9LKSkKICNkZWZpbmUgTEFDS01FTShzdGF0ZSkJCSgoc3RhdGUpLT5hdmFpbE1lbSA8IDApCiAj ZGVmaW5lIFVTRU1FTShzdGF0ZSxhbXQpCSgoc3RhdGUpLT5hdmFpbE1lbSAtPSAoYW10KSkKICNk ZWZpbmUgRlJFRU1FTShzdGF0ZSxhbXQpCSgoc3RhdGUpLT5hdmFpbE1lbSArPSAoYW10KSkKQEAg LTE5NCw5ICsyMDUsOSBAQCBzdHJ1Y3QgVHVwbGVzdG9yZXN0YXRlCiAgKgogICogTk9URVMgYWJv dXQgb24tdGFwZSByZXByZXNlbnRhdGlvbiBvZiB0dXBsZXM6CiAgKgotICogV2UgcmVxdWlyZSB0 aGUgZmlyc3QgInVuc2lnbmVkIGludCIgb2YgYSBzdG9yZWQgdHVwbGUgdG8gYmUgdGhlIHRvdGFs IHNpemUKLSAqIG9uLXRhcGUgb2YgdGhlIHR1cGxlLCBpbmNsdWRpbmcgaXRzZWxmIChzbyBpdCBp cyBuZXZlciB6ZXJvKS4KLSAqIFRoZSByZW1haW5kZXIgb2YgdGhlIHN0b3JlZCB0dXBsZQorICog SW4gY2FzZSBvZiB0dXBsZXMgd2UgdXNlIGZpcnN0ICJ1bnNpZ25lZCBpbnQiIG9mIGEgc3RvcmVk IHR1cGxlCisgKiB0byBiZSB0aGUgdG90YWwgc2l6ZSBvbi10YXBlIG9mIHRoZSB0dXBsZSwgaW5j bHVkaW5nIGl0c2VsZgorICogKHNvIGl0IGlzIG5ldmVyIHplcm8pLiBUaGUgcmVtYWluZGVyIG9m IHRoZSBzdG9yZWQgdHVwbGUKICAqIG1heSBvciBtYXkgbm90IG1hdGNoIHRoZSBpbi1tZW1vcnkg cmVwcmVzZW50YXRpb24gb2YgdGhlIHR1cGxlIC0tLQogICogYW55IGNvbnZlcnNpb24gbmVlZGVk IGlzIHRoZSBqb2Igb2YgdGhlIHdyaXRldHVwIGFuZCByZWFkdHVwIHJvdXRpbmVzLgogICoKQEAg LTIwNywxMCArMjE4LDEzIEBAIHN0cnVjdCBUdXBsZXN0b3Jlc3RhdGUKICAqIHN0YXRlLT5iYWNr d2FyZCBpcyBub3Qgc2V0LCB0aGUgd3JpdGUvcmVhZCByb3V0aW5lcyBtYXkgb21pdCB0aGUgZXh0 cmEKICAqIGxlbmd0aCB3b3JkLgogICoKLSAqIHdyaXRldHVwIGlzIGV4cGVjdGVkIHRvIHdyaXRl IGJvdGggbGVuZ3RoIHdvcmRzIGFzIHdlbGwgYXMgdGhlIHR1cGxlCisgKiBJbiB0aGUgY2FzZSBv ZiBEYXR1bSB3aXRoIGNvbnN0YW50IGxlbmd0aCwgYm90aCAidW5zaWduZWQgaW50IiBhcmUgb21p dHRlZC4KKyAqCisgKiB3cml0ZXR1cCBpcyBleHBlY3RlZCB0byB3cml0ZSBib3RoIGxlbmd0aCB3 b3JkcyBhbmQgdGhlIHR1cGxlCiAgKiBkYXRhLiAgV2hlbiByZWFkdHVwIGlzIGNhbGxlZCwgdGhl IHRhcGUgaXMgcG9zaXRpb25lZCBqdXN0IGFmdGVyIHRoZQotICogZnJvbnQgbGVuZ3RoIHdvcmQ7 IHJlYWR0dXAgbXVzdCByZWFkIHRoZSB0dXBsZSBkYXRhIGFuZCBhZHZhbmNlIHBhc3QKLSAqIHRo ZSBiYWNrIGxlbmd0aCB3b3JkIChpZiBwcmVzZW50KS4KKyAqIGZyb250IGxlbmd0aCB3b3JkIChp ZiBpdCBpcyBub3Qgb21pdHRlZCBsaWtlIGluIGNhc2Ugb2YgY29udGVudC1zaXplIERhdHVtKTsK KyAqIHJlYWR0dXAgbXVzdCByZWFkIHRoZSB0dXBsZSBkYXRhIGFuZCBhZHZhbmNlIHBhc3QgdGhl IGJhY2sgbGVuZ3RoIHdvcmQKKyAqIChpZiBwcmVzZW50KS4KICAqCiAgKiBUaGUgd3JpdGUvcmVh ZCByb3V0aW5lcyBjYW4gbWFrZSB1c2Ugb2YgdGhlIHR1cGxlIGRlc2NyaXB0aW9uIGRhdGEKICAq IHN0b3JlZCBpbiB0aGUgVHVwbGVzdG9yZXN0YXRlIHJlY29yZCwgaWYgbmVlZGVkLiBUaGV5IGFy ZSBhbHNvIGV4cGVjdGVkCkBAIC0yNDIsMTEgKzI1NiwxNiBAQCBzdGF0aWMgVHVwbGVzdG9yZXN0 YXRlICp0dXBsZXN0b3JlX2JlZ2luX2NvbW1vbihpbnQgZWZsYWdzLAogc3RhdGljIHZvaWQgdHVw bGVzdG9yZV9wdXR0dXBsZV9jb21tb24oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdm9pZCAqdHVw bGUpOwogc3RhdGljIHZvaWQgZHVtcHR1cGxlcyhUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlKTsKIHN0 YXRpYyB2b2lkIHR1cGxlc3RvcmVfdXBkYXRlbWF4KFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUpOwot c3RhdGljIHVuc2lnbmVkIGludCBnZXRsZW4oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBl b2ZPSyk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGVudHVwX2hlYXAoVHVwbGVzdG9yZXN0YXRl ICpzdGF0ZSwgYm9vbCBlb2ZPSyk7CiBzdGF0aWMgdm9pZCAqY29weXR1cF9oZWFwKFR1cGxlc3Rv cmVzdGF0ZSAqc3RhdGUsIHZvaWQgKnR1cCk7CiBzdGF0aWMgdm9pZCB3cml0ZXR1cF9oZWFwKFR1 cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQgKnR1cCk7CiBzdGF0aWMgdm9pZCAqcmVhZHR1cF9o ZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGludCBsZW4pOwogCitzdGF0aWMg dW5zaWduZWQgaW50IGxlbnR1cF9kYXR1bShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGVv Zk9LKTsKK3N0YXRpYyB2b2lkICpjb3B5dHVwX2RhdHVtKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUs IHZvaWQgKmRhdHVtKTsKK3N0YXRpYyB2b2lkIHdyaXRldHVwX2RhdHVtKFR1cGxlc3RvcmVzdGF0 ZSAqc3RhdGUsIHZvaWQgKmRhdHVtKTsKK3N0YXRpYyB2b2lkICpyZWFkdHVwX2RhdHVtKFR1cGxl c3RvcmVzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGludCBsZW4pOwogCiAvKgogICoJCXR1cGxlc3Rv cmVfYmVnaW5feHh4CkBAIC0yNjksNiArMjg4LDEyIEBAIHR1cGxlc3RvcmVfYmVnaW5fY29tbW9u KGludCBlZmxhZ3MsIGJvb2wgaW50ZXJYYWN0LCBpbnQgbWF4S0J5dGVzKQogCXN0YXRlLT5hbGxv d2VkTWVtID0gbWF4S0J5dGVzICogKGludDY0KSAxMDI0OwogCXN0YXRlLT5hdmFpbE1lbSA9IHN0 YXRlLT5hbGxvd2VkTWVtOwogCXN0YXRlLT5teWZpbGUgPSBOVUxMOworCS8qCisJICogU2V0IERh dHVtIHJlbGF0ZWQgZGF0YSB0byBpbnZhbGlkIGJ5IGRlZmF1bHQuCisJICovCisJc3RhdGUtPmRh dHVtVHlwZSA9IEludmFsaWRPaWQ7CisJc3RhdGUtPmRhdHVtVHlwZUxlbiA9IDA7CisJc3RhdGUt PmRhdHVtVHlwZUJ5VmFsID0gZmFsc2U7CiAKIAkvKgogCSAqIFRoZSBwYWxsb2MvcGZyZWUgcGF0 dGVybiBmb3IgdHVwbGUgbWVtb3J5IGlzIGluIGEgRklGTyBwYXR0ZXJuLiAgQQpAQCAtMzQ2LDYg KzM3MSwzNyBAQCB0dXBsZXN0b3JlX2JlZ2luX2hlYXAoYm9vbCByYW5kb21BY2Nlc3MsIGJvb2wg aW50ZXJYYWN0LCBpbnQgbWF4S0J5dGVzKQogCXN0YXRlLT5jb3B5dHVwID0gY29weXR1cF9oZWFw OwogCXN0YXRlLT53cml0ZXR1cCA9IHdyaXRldHVwX2hlYXA7CiAJc3RhdGUtPnJlYWR0dXAgPSBy ZWFkdHVwX2hlYXA7CisJc3RhdGUtPmxlbnR1cCA9IGxlbnR1cF9oZWFwOworCisJcmV0dXJuIHN0 YXRlOworfQorCisvKgorICogVGhlIHNhbWUgYXMgdHVwbGVzdG9yZV9iZWdpbl9oZWFwIGJ1dCBj cmVhdGUgc3RvcmUgZm9yIERhdHVtIHZhbHVlcy4KKyAqLworVHVwbGVzdG9yZXN0YXRlICoKK3R1 cGxlc3RvcmVfYmVnaW5fZGF0dW0oT2lkIGRhdHVtVHlwZSwgYm9vbCByYW5kb21BY2Nlc3MsIGJv b2wgaW50ZXJYYWN0LCBpbnQgbWF4S0J5dGVzKQoreworCVR1cGxlc3RvcmVzdGF0ZSAqc3RhdGU7 CisJaW50CQkJZWZsYWdzOworCisJLyoKKwkgKiBUaGlzIGludGVycHJldGF0aW9uIG9mIHRoZSBt ZWFuaW5nIG9mIHJhbmRvbUFjY2VzcyBpcyBjb21wYXRpYmxlIHdpdGgKKwkgKiB0aGUgcHJlLTgu MyBiZWhhdmlvciBvZiB0dXBsZXN0b3Jlcy4KKwkgKi8KKwllZmxhZ3MgPSByYW5kb21BY2Nlc3Mg PworCQkoRVhFQ19GTEFHX0JBQ0tXQVJEIHwgRVhFQ19GTEFHX1JFV0lORCkgOgorCQkoRVhFQ19G TEFHX1JFV0lORCk7CisKKwlzdGF0ZSA9IHR1cGxlc3RvcmVfYmVnaW5fY29tbW9uKGVmbGFncywg aW50ZXJYYWN0LCBtYXhLQnl0ZXMpOworCXN0YXRlLT5kYXR1bVR5cGUgPSBkYXR1bVR5cGU7CisJ Z2V0X3R5cGxlbmJ5dmFsKHN0YXRlLT5kYXR1bVR5cGUsICZzdGF0ZS0+ZGF0dW1UeXBlTGVuLCAm c3RhdGUtPmRhdHVtVHlwZUJ5VmFsKTsKKwlBc3NlcnQoIShzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwg JiYgcmFuZG9tQWNjZXNzKSk7CisKKwlzdGF0ZS0+Y29weXR1cCA9IGNvcHl0dXBfZGF0dW07CisJ c3RhdGUtPndyaXRldHVwID0gd3JpdGV0dXBfZGF0dW07CisJc3RhdGUtPnJlYWR0dXAgPSByZWFk dHVwX2RhdHVtOworCXN0YXRlLT5sZW50dXAgPSBsZW50dXBfZGF0dW07CiAKIAlyZXR1cm4gc3Rh dGU7CiB9CkBAIC00NDQsMTYgKzUwMCwxOSBAQCB0dXBsZXN0b3JlX2NsZWFyKFR1cGxlc3RvcmVz dGF0ZSAqc3RhdGUpCiAJewogCQlpbnQ2NAkJYXZhaWxNZW0gPSBzdGF0ZS0+YXZhaWxNZW07CiAK LQkJLyoKLQkJICogQmVsb3csIHdlIHJlc2V0IHRoZSBtZW1vcnkgY29udGV4dCBmb3Igc3Rvcmlu ZyB0dXBsZXMuICBUbyBzYXZlCi0JCSAqIGZyb20gaGF2aW5nIHRvIGFsd2F5cyBjYWxsIEdldE1l bW9yeUNodW5rU3BhY2UoKSBvbiBhbGwgc3RvcmVkCi0JCSAqIHR1cGxlcywgd2UgYWRqdXN0IHRo ZSBhdmFpbE1lbSB0byBmb3JnZXQgYWxsIHRoZSB0dXBsZXMgYW5kIGp1c3QKLQkJICogcmVjYWxs IFVTRU1FTSBmb3IgdGhlIHNwYWNlIHVzZWQgYnkgdGhlIG1lbXR1cGxlcyBhcnJheS4gIEhlcmUg d2UKLQkJICoganVzdCBBc3NlcnQgdGhhdCdzIGNvcnJlY3QgYW5kIHRoZSBtZW1vcnkgdHJhY2tp bmcgaGFzbid0IGdvbmUKLQkJICogd3JvbmcgYW55d2hlcmUuCi0JCSAqLwotCQlmb3IgKGkgPSBz dGF0ZS0+bWVtdHVwZGVsZXRlZDsgaSA8IHN0YXRlLT5tZW10dXBjb3VudDsgaSsrKQotCQkJYXZh aWxNZW0gKz0gR2V0TWVtb3J5Q2h1bmtTcGFjZShzdGF0ZS0+bWVtdHVwbGVzW2ldKTsKKwkJaWYg KCFzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJCXsKKwkJCS8qCisJCQkgKiBCZWxvdywgd2UgcmVz ZXQgdGhlIG1lbW9yeSBjb250ZXh0IGZvciBzdG9yaW5nIHR1cGxlcy4gIFRvIHNhdmUKKwkJCSAq IGZyb20gaGF2aW5nIHRvIGFsd2F5cyBjYWxsIEdldE1lbW9yeUNodW5rU3BhY2UoKSBvbiBhbGwg c3RvcmVkCisJCQkgKiB0dXBsZXMsIHdlIGFkanVzdCB0aGUgYXZhaWxNZW0gdG8gZm9yZ2V0IGFs bCB0aGUgdHVwbGVzIGFuZCBqdXN0CisJCQkgKiByZWNhbGwgVVNFTUVNIGZvciB0aGUgc3BhY2Ug dXNlZCBieSB0aGUgbWVtdHVwbGVzIGFycmF5LiAgSGVyZSB3ZQorCQkJICoganVzdCBBc3NlcnQg dGhhdCdzIGNvcnJlY3QgYW5kIHRoZSBtZW1vcnkgdHJhY2tpbmcgaGFzbid0IGdvbmUKKwkJCSAq IHdyb25nIGFueXdoZXJlLgorCQkJICovCisJCQlmb3IgKGkgPSBzdGF0ZS0+bWVtdHVwZGVsZXRl ZDsgaSA8IHN0YXRlLT5tZW10dXBjb3VudDsgaSsrKQorCQkJCWF2YWlsTWVtICs9IEdldE1lbW9y eUNodW5rU3BhY2Uoc3RhdGUtPm1lbXR1cGxlc1tpXSk7CisJCX0KIAogCQlhdmFpbE1lbSArPSBH ZXRNZW1vcnlDaHVua1NwYWNlKHN0YXRlLT5tZW10dXBsZXMpOwogCkBAIC03NzcsNiArODM2LDI1 IEBAIHR1cGxlc3RvcmVfcHV0dHVwbGUoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgSGVhcFR1cGxl IHR1cGxlKQogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwogfQogCisvKgorICogTGlr ZSB0dXBsZXN0b3JlX3B1dHR1cGxlc2xvdCBidXQgZm9yIHNpbmdsZSBEYXR1bS4KKyAqLwordm9p ZAordHVwbGVzdG9yZV9wdXRkYXR1bShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBEYXR1bSBkYXR1 bSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzdGF0 ZS0+Y29udGV4dCk7CisKKwkvKgorCSAqIENvcHkgdGhlIERhdHVtLiAgKE11c3QgZG8gdGhpcyBl dmVuIGluIFdSSVRFRklMRSBjYXNlLiAgTm90ZSB0aGF0CisJICogQ09QWVRVUCBpbmNsdWRlcyBV U0VNRU0sIHNvIHdlIG5lZWRuJ3QgZG8gdGhhdCBoZXJlLikKKwkgKi8KKwlkYXR1bSA9IFBvaW50 ZXJHZXREYXR1bShDT1BZVFVQKHN0YXRlLCBEYXR1bUdldFBvaW50ZXIoZGF0dW0pKSk7CisKKwl0 dXBsZXN0b3JlX3B1dHR1cGxlX2NvbW1vbihzdGF0ZSwgRGF0dW1HZXRQb2ludGVyKGRhdHVtKSk7 CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKwogLyoKICAqIFNpbWlsYXIg dG8gdHVwbGVzdG9yZV9wdXR0dXBsZSgpLCBidXQgd29yayBmcm9tIHZhbHVlcyArIG51bGxzIGFy cmF5cy4KICAqIFRoaXMgYXZvaWRzIGFuIGV4dHJhIHR1cGxlLWNvbnN0cnVjdGlvbiBvcGVyYXRp b24uCkBAIC0xMDI4LDEwICsxMTA2LDEwIEBAIHR1cGxlc3RvcmVfZ2V0dHVwbGUoVHVwbGVzdG9y ZXN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAogCQkJcGdfZmFsbHRocm91Z2g7CiAKIAkJY2Fz ZSBUU1NfUkVBREZJTEU6Ci0JCQkqc2hvdWxkX2ZyZWUgPSB0cnVlOworCQkJKnNob3VsZF9mcmVl ID0gIXN0YXRlLT5kYXR1bVR5cGVCeVZhbDsKIAkJCWlmIChmb3J3YXJkKQogCQkJewotCQkJCWlm ICgodHVwbGVuID0gZ2V0bGVuKHN0YXRlLCB0cnVlKSkgIT0gMCkKKwkJCQlpZiAoKHR1cGxlbiA9 IExFTlRVUChzdGF0ZSwgdHJ1ZSkpICE9IDApCiAJCQkJewogCQkJCQl0dXAgPSBSRUFEVFVQKHN0 YXRlLCB0dXBsZW4pOwogCQkJCQlyZXR1cm4gdHVwOwpAQCAtMTA0Myw2ICsxMTIxLDcgQEAgdHVw bGVzdG9yZV9nZXR0dXBsZShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGZvcndhcmQsCiAJ CQkJfQogCQkJfQogCisJCQlBc3NlcnQoIXN0YXRlLT5kYXR1bVR5cGVCeVZhbCk7CiAJCQkvKgog CQkJICogQmFja3dhcmQuCiAJCQkgKgpAQCAtMTA2MCw3ICsxMTM5LDcgQEAgdHVwbGVzdG9yZV9n ZXR0dXBsZShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGZvcndhcmQsCiAJCQkJQXNzZXJ0 KCFzdGF0ZS0+dHJ1bmNhdGVkKTsKIAkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KLQkJCXR1cGxlbiA9 IGdldGxlbihzdGF0ZSwgZmFsc2UpOworCQkJdHVwbGVuID0gTEVOVFVQKHN0YXRlLCBmYWxzZSk7 CiAKIAkJCWlmIChyZWFkcHRyLT5lb2ZfcmVhY2hlZCkKIAkJCXsKQEAgLTEwOTEsNyArMTE3MCw3 IEBAIHR1cGxlc3RvcmVfZ2V0dHVwbGUoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3 YXJkLAogCQkJCQlBc3NlcnQoIXN0YXRlLT50cnVuY2F0ZWQpOwogCQkJCQlyZXR1cm4gTlVMTDsK IAkJCQl9Ci0JCQkJdHVwbGVuID0gZ2V0bGVuKHN0YXRlLCBmYWxzZSk7CisJCQkJdHVwbGVuID0g TEVOVFVQKHN0YXRlLCBmYWxzZSk7CiAJCQl9CiAKIAkJCS8qCkBAIC0xMTUzLDYgKzEyMzIsNDEg QEAgdHVwbGVzdG9yZV9nZXR0dXBsZXNsb3QoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBm b3J3YXJkLAogCX0KIH0KIAorYm9vbAordHVwbGVzdG9yZV9nZXRkYXR1bShUdXBsZXN0b3Jlc3Rh dGUgKnN0YXRlLCBib29sIGZvcndhcmQsCisJCQkJCWJvb2wgKnNob3VsZF9mcmVlLCBEYXR1bSAq cmVzdWx0KQoreworCURhdHVtIGRhdHVtOworCSpzaG91bGRfZnJlZSA9IGZhbHNlOworCisJZGF0 dW0gPSAoRGF0dW0pIHR1cGxlc3RvcmVfZ2V0dHVwbGUoc3RhdGUsIGZvcndhcmQsIHNob3VsZF9m cmVlKTsKKworCS8qIEZvciBieS12YWx1ZSBkYXR1bSB3ZSBtYXkgcmVjZWl2ZSB6ZXJvIGFzIHZh bGlkIHZhbHVlLiAqLworCWlmIChzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJeworCQkvKiBSZXR1 cm4gZmFsc2Ugb25seSBvbiBFT0YgKi8KKwkJaWYgKHN0YXRlLT5yZWFkcHRyc1tzdGF0ZS0+YWN0 aXZlcHRyXS5lb2ZfcmVhY2hlZCkKKwkJeworCQkJKnJlc3VsdCA9IFBvaW50ZXJHZXREYXR1bShO VUxMKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCSpyZXN1bHQgPSBkYXR1bTsKKwkJcmV0 dXJuIHRydWU7CisJfQorCisJaWYgKGRhdHVtKQorCXsKKwkJKnJlc3VsdCA9IGRhdHVtOworCQly ZXR1cm4gdHJ1ZTsKKwl9CisJZWxzZQorCXsKKwkJKnJlc3VsdCA9IFBvaW50ZXJHZXREYXR1bShO VUxMKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKwogLyoKICAqIHR1cGxlc3RvcmVfZ2V0dHVw bGVzbG90X2ZvcmNlIC0gZXhwb3J0ZWQgZnVuY3Rpb24gdG8gZmV0Y2ggYSB0dXBsZQogICoKQEAg LTEyMDUsMTAgKzEzMTksMjAgQEAgdHVwbGVzdG9yZV9hZHZhbmNlKFR1cGxlc3RvcmVzdGF0ZSAq c3RhdGUsIGJvb2wgZm9yd2FyZCkKIAkJCXBmcmVlKHR1cGxlKTsKIAkJcmV0dXJuIHRydWU7CiAJ fQotCWVsc2UKKworCS8qCisJICogQSBOVUxMIHJldHVybiBub3JtYWxseSBtZWFucyBlbmQtb2Yt ZGF0YSwgYnV0IGZvciBieS12YWx1ZSBkYXR1bQorCSAqIHN0b3JlcyBhIHZhbGlkIHplcm8tdmFs dWVkIGRhdHVtIChlLmcuLCBmYWxzZSwgMCkgaXMgaW5kaXN0aW5ndWlzaGFibGUKKwkgKiBmcm9t IE5VTEwgdmlhIHBvaW50ZXIgY2hlY2suICBVc2UgZW9mX3JlYWNoZWQgdG8gZGlzdGluZ3Vpc2gu CisJICovCisJaWYgKHN0YXRlLT5kYXR1bVR5cGVCeVZhbCkKIAl7Ci0JCXJldHVybiBmYWxzZTsK KwkJVFNSZWFkUG9pbnRlciAqcmVhZHB0ciA9ICZzdGF0ZS0+cmVhZHB0cnNbc3RhdGUtPmFjdGl2 ZXB0cl07CisKKwkJcmV0dXJuICFyZWFkcHRyLT5lb2ZfcmVhY2hlZDsKIAl9CisKKwlyZXR1cm4g ZmFsc2U7CiB9CiAKIC8qCkBAIC0xMjcxLDcgKzEzOTUsMTMgQEAgdHVwbGVzdG9yZV9za2lwdHVw bGVzKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGludDY0IG50dXBsZXMsIGJvb2wgZm9yd2FyZCkK IAkJCQl0dXBsZSA9IHR1cGxlc3RvcmVfZ2V0dHVwbGUoc3RhdGUsIGZvcndhcmQsICZzaG91bGRf ZnJlZSk7CiAKIAkJCQlpZiAodHVwbGUgPT0gTlVMTCkKLQkJCQkJcmV0dXJuIGZhbHNlOworCQkJ CXsKKwkJCQkJLyogU2VlIHR1cGxlc3RvcmVfYWR2YW5jZSBmb3Igd2h5IHBvaW50ZXIgY2hlY2sg aXMgaW5zdWZmaWNpZW50ICovCisJCQkJCWlmICghc3RhdGUtPmRhdHVtVHlwZUJ5VmFsIHx8CisJ CQkJCQlzdGF0ZS0+cmVhZHB0cnNbc3RhdGUtPmFjdGl2ZXB0cl0uZW9mX3JlYWNoZWQpCisJCQkJ CQlyZXR1cm4gZmFsc2U7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KIAkJCQlpZiAoc2hvdWxkX2Zy ZWUpCiAJCQkJCXBmcmVlKHR1cGxlKTsKIAkJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwpAQCAt MTUwNSw4ICsxNjM1LDExIEBAIHR1cGxlc3RvcmVfdHJpbShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRl KQogCS8qIFJlbGVhc2Ugbm8tbG9uZ2VyLW5lZWRlZCB0dXBsZXMgKi8KIAlmb3IgKGkgPSBzdGF0 ZS0+bWVtdHVwZGVsZXRlZDsgaSA8IG5yZW1vdmU7IGkrKykKIAl7Ci0JCUZSRUVNRU0oc3RhdGUs IEdldE1lbW9yeUNodW5rU3BhY2Uoc3RhdGUtPm1lbXR1cGxlc1tpXSkpOwotCQlwZnJlZShzdGF0 ZS0+bWVtdHVwbGVzW2ldKTsKKwkJaWYgKCFzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJCXsKKwkJ CUZSRUVNRU0oc3RhdGUsIEdldE1lbW9yeUNodW5rU3BhY2Uoc3RhdGUtPm1lbXR1cGxlc1tpXSkp OworCQkJcGZyZWUoc3RhdGUtPm1lbXR1cGxlc1tpXSk7CisJCX0KIAkJc3RhdGUtPm1lbXR1cGxl c1tpXSA9IE5VTEw7CiAJCS8qIEFzIGluIGR1bXB0dXBsZXMoKSwgaW5jcmVtZW50IG1lbXR1cGRl bGV0ZWQgc3luY2hyb25vdXNseSAqLwogCQlzdGF0ZS0+bWVtdHVwZGVsZXRlZCsrOwpAQCAtMTYw MywyNSArMTczNiw2IEBAIHR1cGxlc3RvcmVfaW5fbWVtb3J5KFR1cGxlc3RvcmVzdGF0ZSAqc3Rh dGUpCiAJcmV0dXJuIChzdGF0ZS0+c3RhdHVzID09IFRTU19JTk1FTSk7CiB9CiAKLQotLyoKLSAq IFRhcGUgaW50ZXJmYWNlIHJvdXRpbmVzCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludAotZ2V0 bGVuKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spCi17Ci0JdW5zaWduZWQgaW50 IGxlbjsKLQlzaXplX3QJCW5ieXRlczsKLQotCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkTWF5YmVFT0Yo c3RhdGUtPm15ZmlsZSwgJmxlbiwgc2l6ZW9mKGxlbiksIGVvZk9LKTsKLQlpZiAobmJ5dGVzID09 IDApCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIGxlbjsKLX0KLQotCiAvKgogICogUm91 dGluZXMgc3BlY2lhbGl6ZWQgZm9yIEhlYXBUdXBsZSBjYXNlCiAgKgpAQCAtMTYzMiw2ICsxNzQ2 LDE5IEBAIGdldGxlbihUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGVvZk9LKQogICogdG8g d3JpdGUgdGhhdCBzZXBhcmF0ZWx5LgogICovCiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2xlbnR1 cF9oZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spCit7CisJdW5zaWduZWQg aW50IGxlbjsKKwlzaXplX3QJCW5ieXRlczsKKworCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkTWF5YmVF T0Yoc3RhdGUtPm15ZmlsZSwgJmxlbiwgc2l6ZW9mKGxlbiksIGVvZk9LKTsKKwlpZiAobmJ5dGVz ID09IDApCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIGxlbjsKK30KKwogc3RhdGljIHZv aWQgKgogY29weXR1cF9oZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQgKnR1cCkKIHsK QEAgLTE2NzgsMyArMTgwNSwxMjcgQEAgcmVhZHR1cF9oZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3Rh dGUsIHVuc2lnbmVkIGludCBsZW4pCiAJCUJ1ZkZpbGVSZWFkRXhhY3Qoc3RhdGUtPm15ZmlsZSwg JnR1cGxlbiwgc2l6ZW9mKHR1cGxlbikpOwogCXJldHVybiB0dXBsZTsKIH0KKworLyoKKyAqIFJv dXRpbmVzIHNwZWNpYWxpemVkIGZvciBEYXR1bSBjYXNlLgorICoKKyAqIEhhbmRsZXMgYm90aCBm aXhlZCBhbmQgdmFyaWFibGUtbGVuZ3RoIERhdHVtcyBlZmZpY2llbnRseToKKyAqIC0gRml4ZWQt bGVuZ3RoIGFuZCBWYXJpYWJsZS1sZW5ndGggaW5jbHVkZXMgbGVuZ3RoIHByZWZpeCAoYW5kIHN1 ZmZpeCBpZiBiYWNrd2FyZCBzY2FuKQorICogLSBCeS12YWx1ZSB0eXBlcyBoYW5kbGVkIGlubGlu ZSB3aXRob3V0IGV4dHJhIGNvcHlpbmcsIHN0b3Jpbmcgc2luZ2xlIGV4dHJhIGJ5dGUKKyAqICAg WFhYOiBjb25zaWRlciByZWZhY3RvcmluZyB0byBhdm9pZCBpdCwgY3VycmVudGx5IG5lZWQgaXQg Zm9yIGNvcnJlY3QgcmV3aW5kIGxvZ2ljCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludAorbGVu dHVwX2RhdHVtKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spCit7CisJdW5zaWdu ZWQgaW50IGxlbjsKKwlzaXplX3QJCW5ieXRlczsKKworCUFzc2VydChzdGF0ZS0+ZGF0dW1UeXBl ICE9IEludmFsaWRPaWQpOworCisJaWYgKHN0YXRlLT5kYXR1bVR5cGVCeVZhbCkKKwl7CisJCXVp bnQ4CWp1bms7CisJCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkTWF5YmVFT0Yoc3RhdGUtPm15ZmlsZSwg Jmp1bmssIHNpemVvZih1aW50OCksIGVvZk9LKTsKKwkJaWYgKG5ieXRlcyA9PSAwKQorCQkJcmV0 dXJuIDA7CisJCUFzc2VydChqdW5rID09ICh1aW50OCkgc3RhdGUtPmRhdHVtVHlwZUxlbik7CisJ CXJldHVybiBzdGF0ZS0+ZGF0dW1UeXBlTGVuOworCX0KKworCW5ieXRlcyA9IEJ1ZkZpbGVSZWFk TWF5YmVFT0Yoc3RhdGUtPm15ZmlsZSwgJmxlbiwgc2l6ZW9mKGxlbiksIGVvZk9LKTsKKwlpZiAo bmJ5dGVzID09IDApCisJCXJldHVybiAwOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyB2b2lk ICoKK2NvcHl0dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdm9pZCAqZGF0dW0pCit7 CisJRGF0dW0gZDsKKwlBc3NlcnQoc3RhdGUtPmRhdHVtVHlwZSAhPSBJbnZhbGlkT2lkKTsKKwlp ZiAoc3RhdGUtPmRhdHVtVHlwZUJ5VmFsKQorCQlyZXR1cm4gRGF0dW1HZXRQb2ludGVyKFBvaW50 ZXJHZXREYXR1bShkYXR1bSkpOworCisJaWYgKGRhdHVtID09IE5VTEwpCisJCXJldHVybiBOVUxM OworCisJZCA9IGRhdHVtQ29weShQb2ludGVyR2V0RGF0dW0oZGF0dW0pLCBzdGF0ZS0+ZGF0dW1U eXBlQnlWYWwsIHN0YXRlLT5kYXR1bVR5cGVMZW4pOworCVVTRU1FTShzdGF0ZSwgR2V0TWVtb3J5 Q2h1bmtTcGFjZShEYXR1bUdldFBvaW50ZXIoZCkpKTsKKwlyZXR1cm4gRGF0dW1HZXRQb2ludGVy KGQpOworfQorCitzdGF0aWMgdm9pZAord3JpdGV0dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpz dGF0ZSwgdm9pZCAqZGF0dW0pCit7CisJQXNzZXJ0KHN0YXRlLT5kYXR1bVR5cGUgIT0gSW52YWxp ZE9pZCk7CisJaWYgKHN0YXRlLT5kYXR1bVR5cGVCeVZhbCkKKwl7CisJCXVpbnQ4IGp1bmsgPSBz dGF0ZS0+ZGF0dW1UeXBlTGVuOyAvKiBvdmVyZmxvdyBpcyBvayAqLworCQlEYXR1bSB2OworCQlB c3NlcnQoc3RhdGUtPmRhdHVtVHlwZUxlbiA+IDApOworCisJCS8qIGp1c3QgbWFya2VyIGJ5dGUg dXNlZCB0byB0cmFjayB0aGUgZW5kIG9mIGRhdGEgZm9yIHJld2luZCBsb2dpYyAqLworCQlCdWZG aWxlV3JpdGUoc3RhdGUtPm15ZmlsZSwgJmp1bmssIHNpemVvZihqdW5rKSk7CisJCXN0b3JlX2F0 dF9ieXZhbCgmdiwgUG9pbnRlckdldERhdHVtKGRhdHVtKSwgc3RhdGUtPmRhdHVtVHlwZUxlbik7 CisJCUJ1ZkZpbGVXcml0ZShzdGF0ZS0+bXlmaWxlLCAmdiwgc3RhdGUtPmRhdHVtVHlwZUxlbik7 CisJCUFzc2VydCghc3RhdGUtPmJhY2t3YXJkKTsKKwl9CisJZWxzZQorCXsKKwkJdW5zaWduZWQg aW50IHNpemU7CisJCXVuc2lnbmVkIGludCB0dXBsZW47CisKKwkJaWYgKHN0YXRlLT5kYXR1bVR5 cGVMZW4gPCAwKQorCQkJc2l6ZSA9IGRhdHVtR2V0U2l6ZShQb2ludGVyR2V0RGF0dW0oZGF0dW0p LCBzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwsIHN0YXRlLT5kYXR1bVR5cGVMZW4pOworCQllbHNlCisJ CQlzaXplID0gc3RhdGUtPmRhdHVtVHlwZUxlbjsKKworCQkvKgorCQkgKiBJbmNsdWRlIHNpemVv Zih1bnNpZ25lZCBpbnQpIGluIHRoZSBzdG9yZWQgbGVuZ3RoLCBtYXRjaGluZyB0aGUKKwkJICog Y29udmVudGlvbiB1c2VkIGJ5IHdyaXRldHVwX2hlYXAuICBUaGUgYmFja3dhcmQtc2NhbiBzZWVr CisJCSAqIGFyaXRobWV0aWMgaW4gdHVwbGVzdG9yZV9nZXR0dXBsZSBhc3N1bWVzIHRoaXMuCisJ CSAqLworCQl0dXBsZW4gPSBzaXplICsgc2l6ZW9mKHVuc2lnbmVkIGludCk7CisJCUJ1ZkZpbGVX cml0ZShzdGF0ZS0+bXlmaWxlLCAmdHVwbGVuLCBzaXplb2YodHVwbGVuKSk7CisKKwkJQnVmRmls ZVdyaXRlKHN0YXRlLT5teWZpbGUsIGRhdHVtLCBzaXplKTsKKworCQkvKiBuZWVkIHRyYWlsaW5n IGxlbmd0aCB3b3JkPyAqLworCQlpZiAoc3RhdGUtPmJhY2t3YXJkKQorCQkJQnVmRmlsZVdyaXRl KHN0YXRlLT5teWZpbGUsICZ0dXBsZW4sIHNpemVvZih0dXBsZW4pKTsKKworCQlGUkVFTUVNKHN0 YXRlLCBHZXRNZW1vcnlDaHVua1NwYWNlKGRhdHVtKSk7CisJCXBmcmVlKGRhdHVtKTsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkICoKK3JlYWR0dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwg dW5zaWduZWQgaW50IGxlbikKK3sKKwlBc3NlcnQoc3RhdGUtPmRhdHVtVHlwZSAhPSBJbnZhbGlk T2lkKTsKKwlpZiAoc3RhdGUtPmRhdHVtVHlwZUJ5VmFsKQorCXsKKwkJRGF0dW0gZGF0dW0gPSAw OworCisJCUFzc2VydChzdGF0ZS0+ZGF0dW1UeXBlTGVuID4gMCk7CisJCUFzc2VydChsZW4gPT0g c3RhdGUtPmRhdHVtVHlwZUxlbik7CisJCUJ1ZkZpbGVSZWFkRXhhY3Qoc3RhdGUtPm15ZmlsZSwg JmRhdHVtLCBzdGF0ZS0+ZGF0dW1UeXBlTGVuKTsKKworCQlBc3NlcnQoIXN0YXRlLT5iYWNrd2Fy ZCk7CisJCXJldHVybiBEYXR1bUdldFBvaW50ZXIoZmV0Y2hfYXR0KCZkYXR1bSwgdHJ1ZSwgc3Rh dGUtPmRhdHVtVHlwZUxlbikpOworCX0KKwllbHNlCisJeworCQl1bnNpZ25lZCBpbnQgZGF0YWxl biA9IGxlbiAtIHNpemVvZih1bnNpZ25lZCBpbnQpOworCQl2b2lkICpkYXRhID0gcGFsbG9jKGRh dGFsZW4pOworCisJCUJ1ZkZpbGVSZWFkRXhhY3Qoc3RhdGUtPm15ZmlsZSwgZGF0YSwgZGF0YWxl bik7CisKKwkJLyogbmVlZCB0cmFpbGluZyBsZW5ndGggd29yZD8gKi8KKwkJaWYgKHN0YXRlLT5i YWNrd2FyZCkKKwkJCUJ1ZkZpbGVSZWFkRXhhY3Qoc3RhdGUtPm15ZmlsZSwgJmxlbiwgc2l6ZW9m KGxlbikpOworCisJCXJldHVybiBkYXRhOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL3R1cGxlc3RvcmUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3R1cGxlc3RvcmUuaAppbmRl eCBmNjM4Yjk2ZTE1Ni4uZTE2ZDlhM2QzNTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxz L3R1cGxlc3RvcmUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy90dXBsZXN0b3JlLmgKQEAgLTEs MTcgKzEsMTggQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIHR1cGxlc3RvcmUuaAotICoJ ICBHZW5lcmFsaXplZCByb3V0aW5lcyBmb3IgdGVtcG9yYXJ5IHR1cGxlIHN0b3JhZ2UuCisgKgkg IEdlbmVyYWxpemVkIHJvdXRpbmVzIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZSBvZiB0dXBsZXMgYW5k IERhdHVtcy4KICAqCi0gKiBUaGlzIG1vZHVsZSBoYW5kbGVzIHRlbXBvcmFyeSBzdG9yYWdlIG9m IHR1cGxlcyBmb3IgcHVycG9zZXMgc3VjaAotICogYXMgTWF0ZXJpYWxpemUgbm9kZXMsIGhhc2hq b2luIGJhdGNoIGZpbGVzLCBldGMuICBJdCBpcyBlc3NlbnRpYWxseQotICogYSBkdW1iZWQtZG93 biB2ZXJzaW9uIG9mIHR1cGxlc29ydC5jOyBpdCBkb2VzIG5vIHNvcnRpbmcgb2YgdHVwbGVzCi0g KiBidXQgY2FuIG9ubHkgc3RvcmUgYW5kIHJlZ3VyZ2l0YXRlIGEgc2VxdWVuY2Ugb2YgdHVwbGVz LiAgSG93ZXZlciwKLSAqIGJlY2F1c2Ugbm8gc29ydCBpcyByZXF1aXJlZCwgaXQgaXMgYWxsb3dl ZCB0byBzdGFydCByZWFkaW5nIHRoZSBzZXF1ZW5jZQotICogYmVmb3JlIGl0IGhhcyBhbGwgYmVl biB3cml0dGVuLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBjdXJzb3JzLAotICog YmVjYXVzZSBpdCBhbGxvd3MgcmFuZG9tIGFjY2VzcyB3aXRoaW4gdGhlIGFscmVhZHktc2Nhbm5l ZCBwb3J0aW9uIG9mCi0gKiBhIHF1ZXJ5IHdpdGhvdXQgaGF2aW5nIHRvIHByb2Nlc3MgdGhlIHVu ZGVybHlpbmcgc2NhbiB0byBjb21wbGV0aW9uLgotICogQWxzbywgaXQgaXMgcG9zc2libGUgdG8g c3VwcG9ydCBtdWx0aXBsZSBpbmRlcGVuZGVudCByZWFkIHBvaW50ZXJzLgorICogVGhpcyBtb2R1 bGUgaGFuZGxlcyB0ZW1wb3Jhcnkgc3RvcmFnZSBvZiBlaXRoZXIgdHVwbGVzIG9yIHNpbmdsZQor ICogRGF0dW0gdmFsdWVzIGZvciBwdXJwb3NlcyBzdWNoIGFzIE1hdGVyaWFsaXplIG5vZGVzLCBo YXNoam9pbiBiYXRjaAorICogZmlsZXMsIGV0Yy4gSXQgaXMgZXNzZW50aWFsbHkgYSBkdW1iZWQt ZG93biB2ZXJzaW9uIG9mIHR1cGxlc29ydC5jOworICogaXQgZG9lcyBubyBzb3J0aW5nIG9mIHR1 cGxlcyBidXQgY2FuIG9ubHkgc3RvcmUgYW5kIHJlZ3VyZ2l0YXRlIGEgc2VxdWVuY2UKKyAqIG9m IHR1cGxlcy4gIEhvd2V2ZXIsIGJlY2F1c2Ugbm8gc29ydCBpcyByZXF1aXJlZCwgaXQgaXMgYWxs b3dlZCB0byBzdGFydAorICogcmVhZGluZyB0aGUgc2VxdWVuY2UgYmVmb3JlIGl0IGhhcyBhbGwg YmVlbiB3cml0dGVuLgorICoKKyAqIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgY3Vy c29ycywgYmVjYXVzZSBpdCBhbGxvd3MgcmFuZG9tIGFjY2VzcworICogd2l0aGluIHRoZSBhbHJl YWR5LXNjYW5uZWQgcG9ydGlvbiBvZiBhIHF1ZXJ5IHdpdGhvdXQgaGF2aW5nIHRvIHByb2Nlc3MK KyAqIHRoZSB1bmRlcmx5aW5nIHNjYW4gdG8gY29tcGxldGlvbi4KICAqCiAgKiBBIHRlbXBvcmFy eSBmaWxlIGlzIHVzZWQgdG8gaGFuZGxlIHRoZSBkYXRhIGlmIGl0IGV4Y2VlZHMgdGhlCiAgKiBz cGFjZSBsaW1pdCBzcGVjaWZpZWQgYnkgdGhlIGNhbGxlci4KQEAgLTM5LDE0ICs0MCwxMyBAQAog ICovCiB0eXBlZGVmIHN0cnVjdCBUdXBsZXN0b3Jlc3RhdGUgVHVwbGVzdG9yZXN0YXRlOwogCi0v KgotICogQ3VycmVudGx5IHdlIG9ubHkgbmVlZCB0byBzdG9yZSBNaW5pbWFsVHVwbGVzLCBidXQg aXQgd291bGQgYmUgZWFzeQotICogdG8gc3VwcG9ydCB0aGUgc2FtZSBiZWhhdmlvciBmb3IgSW5k ZXhUdXBsZXMgYW5kL29yIGJhcmUgRGF0dW1zLgotICovCi0KIGV4dGVybiBUdXBsZXN0b3Jlc3Rh dGUgKnR1cGxlc3RvcmVfYmVnaW5faGVhcChib29sIHJhbmRvbUFjY2VzcywKIAkJCQkJCQkJCQkJ ICBib29sIGludGVyWGFjdCwKIAkJCQkJCQkJCQkJICBpbnQgbWF4S0J5dGVzKTsKK2V4dGVybiBU dXBsZXN0b3Jlc3RhdGUgKnR1cGxlc3RvcmVfYmVnaW5fZGF0dW0oT2lkIGRhdHVtVHlwZSwKKwkJ CQkJCQkJCQkJICAgYm9vbCByYW5kb21BY2Nlc3MsCisJCQkJCQkJCQkJCSAgIGJvb2wgaW50ZXJY YWN0LAorCQkJCQkJCQkJCQkgICBpbnQgbWF4S0J5dGVzKTsKIAogZXh0ZXJuIHZvaWQgdHVwbGVz dG9yZV9zZXRfZWZsYWdzKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGludCBlZmxhZ3MpOwogCkBA IC01NSw2ICs1NSw3IEBAIGV4dGVybiB2b2lkIHR1cGxlc3RvcmVfcHV0dHVwbGVzbG90KFR1cGxl c3RvcmVzdGF0ZSAqc3RhdGUsCiBleHRlcm4gdm9pZCB0dXBsZXN0b3JlX3B1dHR1cGxlKFR1cGxl c3RvcmVzdGF0ZSAqc3RhdGUsIEhlYXBUdXBsZSB0dXBsZSk7CiBleHRlcm4gdm9pZCB0dXBsZXN0 b3JlX3B1dHZhbHVlcyhUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBUdXBsZURlc2MgdGRlc2MsCiAJ CQkJCQkJCSBjb25zdCBEYXR1bSAqdmFsdWVzLCBjb25zdCBib29sICppc251bGwpOworZXh0ZXJu IHZvaWQgdHVwbGVzdG9yZV9wdXRkYXR1bShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBEYXR1bSBk YXR1bSk7CiAKIGV4dGVybiBpbnQJdHVwbGVzdG9yZV9hbGxvY19yZWFkX3BvaW50ZXIoVHVwbGVz dG9yZXN0YXRlICpzdGF0ZSwgaW50IGVmbGFncyk7CiAKQEAgLTcyLDYgKzczLDggQEAgZXh0ZXJu IGJvb2wgdHVwbGVzdG9yZV9pbl9tZW1vcnkoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSk7CiAKIGV4 dGVybiBib29sIHR1cGxlc3RvcmVfZ2V0dHVwbGVzbG90KFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUs IGJvb2wgZm9yd2FyZCwKIAkJCQkJCQkJCWJvb2wgY29weSwgVHVwbGVUYWJsZVNsb3QgKnNsb3Qp OworZXh0ZXJuIGJvb2wgdHVwbGVzdG9yZV9nZXRkYXR1bShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRl LCBib29sIGZvcndhcmQsCisJCQkJCQkJCWJvb2wgKnNob3VsZF9mcmVlLCBEYXR1bSAqcmVzdWx0 KTsKIAogZXh0ZXJuIGJvb2wgdHVwbGVzdG9yZV9nZXR0dXBsZXNsb3RfZm9yY2UoVHVwbGVzdG9y ZXN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAogCQkJCQkJCQkJCSAgYm9vbCBjb3B5LCBUdXBs ZVRhYmxlU2xvdCAqc2xvdCk7Ci0tIAoyLjUzLjAKCg== --000000000000b895ca064e594206 Content-Type: application/x-patch; name="v33-0004-Use-auxiliary-indexes-for-concurrent-index-opera.patch" Content-Disposition: attachment; filename="v33-0004-Use-auxiliary-indexes-for-concurrent-index-opera.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnf26cqo3 RnJvbSA4YWUzMDg3YjhkMWQwNGI2MmI2MjMxNDUwMzZkZmI0YTgzMTk3YTgwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNTowMzoxMCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjMzIDQvN10gVXNlIGF1eGlsaWFyeSBpbmRleGVzIGZvciBjb25jdXJyZW50IGluZGV4 IG9wZXJhdGlvbnMKClJlcGxhY2UgdGhlIHNlY29uZCB0YWJsZSBmdWxsIHNjYW4gaW4gY29uY3Vy cmVudCBpbmRleCBidWlsZHMgd2l0aCBhbiBhdXhpbGlhcnkgaW5kZXggYXBwcm9hY2g6Ci0gY3Jl YXRlIGEgU1RJUiBhdXhpbGlhcnkgaW5kZXggd2l0aCB0aGUgc2FtZSBwcmVkaWNhdGUgKGlmIGV4 aXN0cykgYXMgaW4gbWFpbiBpbmRleAotIHVzZSBpdCB0byB0cmFjayB0dXBsZXMgaW5zZXJ0ZWQg ZHVyaW5nIHRoZSBmaXJzdCBwaGFzZQotIG1lcmdlIGF1eGlsaWFyeSBpbmRleCB3aXRoIG1haW4g aW5kZXggZHVyaW5nIHZhbGlkYXRpb24gdG8gY2F0Y2ggdXAgbmV3IGluZGV4IHdpdGggYW55IHR1 cGxlcyBtaXNzZWQgZHVyaW5nIHRoZSBmaXJzdCBwaGFzZQotIGF1dG9tYXRpY2FsbHkgZHJvcCBh dXhpbGlhcnkgd2hlbiBtYWluIGluZGV4IGlzIHJlYWR5CgpUbyBtZXJnZSBtYWluIGFuZCBhdXhp bGlhcnkgaW5kZXhlczoKLSBpbmRleF9idWxrX2RlbGV0ZSBjYWxsZWQgZm9yIGJvdGgsIFRJRHMg cHV0IGludG8gdHVwbGVzb3J0Ci0gYm90aCB0dXBsZXNvcnQgYXJlIGJlaW5nIHNvcnRlZAotIGJv dGggdHVwbGVzb3J0IHNjYW5uZWQgd2l0aCB0d28gcG9pbnRlcnMgbG9va2luZyBmb3IgdGhlIFRJ RHMgcHJlc2VudCBpbiBhdXhpbGlhcnkgaW5kZXgsIGJ1dCBhYnNlbnQgaW4gbWFpbiBvbmUKLSBh bGwgc3VjaCBUSURzIGFyZSBwdXQgaW50byB0dXBsZXN0b3JlCi0gYWxsIFRJRHMgaW4gdHVwbGVz dG9yZSBhcmUgZmV0Y2hlZCB1c2luZyB0aGUgc3RyZWFtLCB0dXBsZXN0b3JlIHVzZWQgaW4gaGVh cGFtX2luZGV4X3ZhbGlkYXRlX3NjYW5fcmVhZF9zdHJlYW1fbmV4dCB0byBwcm92aWRlIHRoZSBu ZXh0IHBhZ2UgdG8gcHJlZmV0Y2gKLSBpZiBmZXRjaGVkIHR1cGxlIGlzIGFsaXZlIC0gaXQgaXMg aW5zZXJ0ZWQgaW50byB0aGUgbWFpbiBpbmRleAoKVGhpcyBlbGltaW5hdGVzIHRoZSBuZWVkIGZv ciBhIHNlY29uZCBmdWxsIHRhYmxlIHNjYW4gZHVyaW5nIHZhbGlkYXRpb24sIGltcHJvdmluZyBw ZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBmb3IgbGFyZ2UgdGFibGVzLiBBZmZlY3RzIGJvdGggQ1JF QVRFIElOREVYIENPTkNVUlJFTlRMWSBhbmQgUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgb3Bl cmF0aW9ucy4KLS0tCiBkb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sICAgICAgICAgICAgICAg fCAgMjYgKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwgICAgICAgICB8ICAz NCArLQogZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwgICAgICAgICAgICAgIHwgIDQwICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UICAgICAgICAgfCAgMTMgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICB8IDU2MSArKysrKysrKysr KysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgICB8 IDMyMiArKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCAg ICAgICB8ICAxNyArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAg IHwgMzQ0ICsrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jICAgICAg ICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5k YXQgIHwgICA5ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICB8 ICAxMiArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oICAgICAgICAgICAgICAgIHwgICA5 ICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9wcm9ncmVzcy5oICAgICAgICAgICAgfCAgMTMgKy0K IHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMv aW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaCAgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCB8ICA0MiArKwogc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9pbmRleGluZy5vdXQgICAgIHwgICAzICstCiBzcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3J1bGVzLm91dCAgICAgICAgfCAgMTcgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2NyZWF0ZV9pbmRleC5zcWwgICAgICB8ICAyMSArCiAxOSBmaWxlcyBjaGFuZ2VkLCAxMTU1IGlu c2VydGlvbnMoKyksIDMzNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv bW9uaXRvcmluZy5zZ21sIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbAppbmRleCBiYjc1 ZWQxMDY5Yi4uODM1YjRhZWVkNzcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5n LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbApAQCAtNjc4Nyw2ICs2Nzg3 LDE4IEBAIEZST00gcGdfc3RhdF9nZXRfYmFja2VuZF9pZHNldCgpIEFTIGJhY2tlbmRpZDsKICAg ICAgICBpbmZvcm1hdGlvbiBmb3IgdGhpcyBwaGFzZS4KICAgICAgIDwvZW50cnk+CiAgICAgIDwv cm93PgorICAgICA8cm93PgorICAgICAgPGVudHJ5PjxsaXRlcmFsPndhaXRpbmcgZm9yIHdyaXRl cnMgdG8gdXNlIGF1eGlsaWFyeSBpbmRleDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgPGVudHJ5 PgorICAgICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IG9y IDxjb21tYW5kPlJFSU5ERVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPiBpcyB3YWl0aW5nIGZvciB0 cmFuc2FjdGlvbnMKKyAgICAgICB3aXRoIHdyaXRlIGxvY2tzIHRoYXQgY2FuIHBvdGVudGlhbGx5 IHNlZSB0aGUgdGFibGUgdG8gZmluaXNoLCB0byBlbnN1cmUgdXNlIG9mIGF1eGlsaWFyeSBpbmRl eCBmb3IgbmV3IHR1cGxlcyBpbgorICAgICAgIGZ1dHVyZSB0cmFuc2FjdGlvbnMuCisgICAgICAg VGhpcyBwaGFzZSBpcyBza2lwcGVkIHdoZW4gbm90IGluIGNvbmN1cnJlbnQgbW9kZS4KKyAgICAg ICBDb2x1bW5zIDxzdHJ1Y3RuYW1lPmxvY2tlcnNfdG90YWw8L3N0cnVjdG5hbWU+LCA8c3RydWN0 bmFtZT5sb2NrZXJzX2RvbmU8L3N0cnVjdG5hbWU+CisgICAgICAgYW5kIDxzdHJ1Y3RuYW1lPmN1 cnJlbnRfbG9ja2VyX3BpZDwvc3RydWN0bmFtZT4gY29udGFpbiB0aGUgcHJvZ3Jlc3MKKyAgICAg ICBpbmZvcm1hdGlvbiBmb3IgdGhpcyBwaGFzZS4KKyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93 PgogICAgICA8cm93PgogICAgICAgPGVudHJ5PjxsaXRlcmFsPmJ1aWxkaW5nIGluZGV4PC9saXRl cmFsPjwvZW50cnk+CiAgICAgICA8ZW50cnk+CkBAIC02ODI3LDEzICs2ODM5LDEyIEBAIEZST00g cGdfc3RhdF9nZXRfYmFja2VuZF9pZHNldCgpIEFTIGJhY2tlbmRpZDsKICAgICAgIDwvZW50cnk+ CiAgICAgIDwvcm93PgogICAgICA8cm93PgotICAgICAgPGVudHJ5PjxsaXRlcmFsPmluZGV4IHZh bGlkYXRpb246IHNjYW5uaW5nIHRhYmxlPC9saXRlcmFsPjwvZW50cnk+CisgICAgICA8ZW50cnk+ PGxpdGVyYWw+aW5kZXggdmFsaWRhdGlvbjogbWVyZ2luZyBpbmRleGVzPC9saXRlcmFsPjwvZW50 cnk+CiAgICAgICA8ZW50cnk+Ci0gICAgICAgPGNvbW1hbmQ+Q1JFQVRFIElOREVYIENPTkNVUlJF TlRMWTwvY29tbWFuZD4gaXMgc2Nhbm5pbmcgdGhlIHRhYmxlCi0gICAgICAgdG8gdmFsaWRhdGUg dGhlIGluZGV4IHR1cGxlcyBjb2xsZWN0ZWQgaW4gdGhlIHByZXZpb3VzIHR3byBwaGFzZXMuCisg ICAgICAgPGNvbW1hbmQ+Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4gaXMgbWVy Z2luZyBjb250ZW50IG9mIGF1eGlsaWFyeSBpbmRleCB3aXRoIHRoZSB0YXJnZXQgaW5kZXguCiAg ICAgICAgVGhpcyBwaGFzZSBpcyBza2lwcGVkIHdoZW4gbm90IGluIGNvbmN1cnJlbnQgbW9kZS4K LSAgICAgICBDb2x1bW5zIDxzdHJ1Y3RuYW1lPmJsb2Nrc190b3RhbDwvc3RydWN0bmFtZT4gKHNl dCB0byB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgdGFibGUpCi0gICAgICAgYW5kIDxzdHJ1Y3RuYW1l PmJsb2Nrc19kb25lPC9zdHJ1Y3RuYW1lPiBjb250YWluIHRoZSBwcm9ncmVzcyBpbmZvcm1hdGlv biBmb3IgdGhpcyBwaGFzZS4KKyAgICAgICBDb2x1bW5zIDxzdHJ1Y3RuYW1lPnR1cGxlc190b3Rh bDwvc3RydWN0bmFtZT4gKHNldCB0byB0aGUgbnVtYmVyIG9mIHR1cGxlcyB0byBiZSBtZXJnZWQp CisgICAgICAgYW5kIDxzdHJ1Y3RuYW1lPnR1cGxlc19kb25lPC9zdHJ1Y3RuYW1lPiBjb250YWlu IHRoZSBwcm9ncmVzcyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBwaGFzZS4KICAgICAgIDwvZW50cnk+ CiAgICAgIDwvcm93PgogICAgICA8cm93PgpAQCAtNjg1MCw4ICs2ODYxLDkgQEAgRlJPTSBwZ19z dGF0X2dldF9iYWNrZW5kX2lkc2V0KCkgQVMgYmFja2VuZGlkOwogICAgICA8cm93PgogICAgICAg PGVudHJ5PjxsaXRlcmFsPndhaXRpbmcgZm9yIHJlYWRlcnMgYmVmb3JlIG1hcmtpbmcgZGVhZDwv bGl0ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5PgotICAgICAgIDxjb21tYW5kPlJFSU5ERVgg Q09OQ1VSUkVOVExZPC9jb21tYW5kPiBpcyB3YWl0aW5nIGZvciB0cmFuc2FjdGlvbnMKLSAgICAg ICB3aXRoIHJlYWQgbG9ja3Mgb24gdGhlIHRhYmxlIHRvIGZpbmlzaCwgYmVmb3JlIG1hcmtpbmcg dGhlIG9sZCBpbmRleCBkZWFkLgorICAgICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJS RU5UTFk8L2NvbW1hbmQ+IGlzIHdhaXRpbmcgZm9yIHRyYW5zYWN0aW9ucworICAgICAgICB3aXRo IHJlYWQgbG9ja3Mgb24gdGhlIHRhYmxlIHRvIGZpbmlzaCwgYmVmb3JlIG1hcmtpbmcgdGhlIGF1 eGlsaWFyeSBpbmRleCBhcyBkZWFkLgorICAgICAgIDxjb21tYW5kPlJFSU5ERVggQ09OQ1VSUkVO VExZPC9jb21tYW5kPiBpcyBhbHNvIHdhaXRpbmcgYmVmb3JlIG1hcmtpbmcgdGhlIG9sZCBpbmRl eCBhcyBkZWFkLgogICAgICAgIFRoaXMgcGhhc2UgaXMgc2tpcHBlZCB3aGVuIG5vdCBpbiBjb25j dXJyZW50IG1vZGUuCiAgICAgICAgQ29sdW1ucyA8c3RydWN0bmFtZT5sb2NrZXJzX3RvdGFsPC9z dHJ1Y3RuYW1lPiwgPHN0cnVjdG5hbWU+bG9ja2Vyc19kb25lPC9zdHJ1Y3RuYW1lPgogICAgICAg IGFuZCA8c3RydWN0bmFtZT5jdXJyZW50X2xvY2tlcl9waWQ8L3N0cnVjdG5hbWU+IGNvbnRhaW4g dGhlIHByb2dyZXNzCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5z Z21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbAppbmRleCBiYjc1MDVkMTcx Yi4uMTJjODg1ODdhNzkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4 LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbApAQCAtNjIwLDEw ICs2MjAsMTAgQEAgQ1JFQVRFIFsgVU5JUVVFIF0gSU5ERVggWyBDT05DVVJSRU5UTFkgXSBbIFsg SUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0KICAgICBvdXQgd3JpdGVzLiAgVGhp cyBtZXRob2QgaXMgaW52b2tlZCBieSBzcGVjaWZ5aW5nIHRoZQogICAgIDxsaXRlcmFsPkNPTkNV UlJFTlRMWTwvbGl0ZXJhbD4gb3B0aW9uIG9mIDxjb21tYW5kPkNSRUFURSBJTkRFWDwvY29tbWFu ZD4uCiAgICAgV2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLAotICAgIDxwcm9kdWN0bmFtZT5Qb3N0 Z3JlU1FMPC9wcm9kdWN0bmFtZT4gbXVzdCBwZXJmb3JtIHR3byBzY2FucyBvZiB0aGUgdGFibGUs IGFuZCBpbgotICAgIGFkZGl0aW9uIGl0IG11c3Qgd2FpdCBmb3IgYWxsIGV4aXN0aW5nIHRyYW5z YWN0aW9ucyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5Ci0gICAgbW9kaWZ5IG9yIHVzZSB0aGUgaW5k ZXggdG8gdGVybWluYXRlLiAgVGh1cwotICAgIHRoaXMgbWV0aG9kIHJlcXVpcmVzIG1vcmUgdG90 YWwgd29yayB0aGFuIGEgc3RhbmRhcmQgaW5kZXggYnVpbGQgYW5kIHRha2VzCisgICAgPHByb2R1 Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBtdXN0IHBlcmZvcm0gdGFibGUgc2NhbiBm b2xsb3dlZCBieQorICAgIHZhbGlkYXRpb24gcGhhc2UsIGFuZCBpbiBhZGRpdGlvbiBpdCBtdXN0 IHdhaXQgZm9yIGFsbCBleGlzdGluZyB0cmFuc2FjdGlvbnMKKyAgICB0aGF0IGNvdWxkIHBvdGVu dGlhbGx5IG1vZGlmeSBvciB1c2UgdGhlIGluZGV4IHRvIHRlcm1pbmF0ZS4gIFRodXMKKyAgICB0 aGlzIG1ldGhvZCByZXF1aXJlcyBtb3JlIHRvdGFsIHdvcmsgdGhhbiBhIHN0YW5kYXJkIGluZGV4 IGJ1aWxkIGFuZCBtYXkgdGFrZQogICAgIHNpZ25pZmljYW50bHkgbG9uZ2VyIHRvIGNvbXBsZXRl LiAgSG93ZXZlciwgc2luY2UgaXQgYWxsb3dzIG5vcm1hbAogICAgIG9wZXJhdGlvbnMgdG8gY29u dGludWUgd2hpbGUgdGhlIGluZGV4IGlzIGJ1aWx0LCB0aGlzIG1ldGhvZCBpcyB1c2VmdWwgZm9y CiAgICAgYWRkaW5nIG5ldyBpbmRleGVzIGluIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudC4gIE9m IGNvdXJzZSwgdGhlIGV4dHJhIENQVQpAQCAtNjMxLDE0ICs2MzEsMTQgQEAgQ1JFQVRFIFsgVU5J UVVFIF0gSU5ERVggWyBDT05DVVJSRU5UTFkgXSBbIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNl YWJsZSBjbGFzcz0KICAgIDwvcGFyYT4KIAogICAgPHBhcmE+Ci0gICAgSW4gYSBjb25jdXJyZW50 IGluZGV4IGJ1aWxkLCB0aGUgaW5kZXggaXMgYWN0dWFsbHkgZW50ZXJlZCBhcyBhbgotICAgIDxx dW90ZT5pbnZhbGlkPC9xdW90ZT4gaW5kZXggaW50bwotICAgIHRoZSBzeXN0ZW0gY2F0YWxvZ3Mg aW4gb25lIHRyYW5zYWN0aW9uLCB0aGVuIHR3byB0YWJsZSBzY2FucyBvY2N1ciBpbgotICAgIHR3 byBtb3JlIHRyYW5zYWN0aW9ucy4gIEJlZm9yZSBlYWNoIHRhYmxlIHNjYW4sIHRoZSBpbmRleCBi dWlsZCBtdXN0CisgICAgSW4gYSBjb25jdXJyZW50IGluZGV4IGJ1aWxkLCB0aGUgbWFpbiBhbmQg YXV4aWxpYXJ5IGluZGV4ZXMgYXJlIGFjdHVhbGx5CisgICAgZW50ZXJlZCBhcyBhbiA8cXVvdGU+ aW52YWxpZDwvcXVvdGU+IGluZGV4IGludG8KKyAgICB0aGUgc3lzdGVtIGNhdGFsb2dzIGluIG9u ZSB0cmFuc2FjdGlvbiwgdGhlbiB0d28gcGhhc2VzIG9jY3VyIGluCisgICAgbXVsdGlwbGUgdHJh bnNhY3Rpb25zLiAgQmVmb3JlIGVhY2ggcGhhc2UsIHRoZSBpbmRleCBidWlsZCBtdXN0CiAgICAg d2FpdCBmb3IgZXhpc3RpbmcgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSBtb2RpZmllZCB0aGUgdGFi bGUgdG8gdGVybWluYXRlLgotICAgIEFmdGVyIHRoZSBzZWNvbmQgc2NhbiwgdGhlIGluZGV4IGJ1 aWxkIG11c3Qgd2FpdCBmb3IgYW55IHRyYW5zYWN0aW9ucworICAgIEFmdGVyIHRoZSBzZWNvbmQg cGhhc2UsIHRoZSBpbmRleCBidWlsZCBtdXN0IHdhaXQgZm9yIGFueSB0cmFuc2FjdGlvbnMKICAg ICB0aGF0IGhhdmUgYSBzbmFwc2hvdCAoc2VlIDx4cmVmIGxpbmtlbmQ9Im12Y2MiLz4pIHByZWRh dGluZyB0aGUgc2Vjb25kCi0gICAgc2NhbiB0byB0ZXJtaW5hdGUsIGluY2x1ZGluZyB0cmFuc2Fj dGlvbnMgdXNlZCBieSBhbnkgcGhhc2Ugb2YgY29uY3VycmVudAorICAgIHBoYXNlIHRvIHRlcm1p bmF0ZSwgaW5jbHVkaW5nIHRyYW5zYWN0aW9ucyB1c2VkIGJ5IGFueSBwaGFzZSBvZiBjb25jdXJy ZW50CiAgICAgaW5kZXggYnVpbGRzIG9uIG90aGVyIHRhYmxlcywgaWYgdGhlIGluZGV4ZXMgaW52 b2x2ZWQgYXJlIHBhcnRpYWwgb3IgaGF2ZQogICAgIGNvbHVtbnMgdGhhdCBhcmUgbm90IHNpbXBs ZSBjb2x1bW4gcmVmZXJlbmNlcy4KICAgICBUaGVuIGZpbmFsbHkgdGhlIGluZGV4IGNhbiBiZSBt YXJrZWQgPHF1b3RlPnZhbGlkPC9xdW90ZT4gYW5kIHJlYWR5IGZvciB1c2UsCkBAIC02NTEsMTAg KzY1MSwxMSBAQCBDUkVBVEUgWyBVTklRVUUgXSBJTkRFWCBbIENPTkNVUlJFTlRMWSBdIFsgWyBJ RiBOT1QgRVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPQogICAgPHBhcmE+CiAgICAgSWYgYSBw cm9ibGVtIGFyaXNlcyB3aGlsZSBzY2FubmluZyB0aGUgdGFibGUsIHN1Y2ggYXMgYSBkZWFkbG9j ayBvciBhCiAgICAgdW5pcXVlbmVzcyB2aW9sYXRpb24gaW4gYSB1bmlxdWUgaW5kZXgsIHRoZSA8 Y29tbWFuZD5DUkVBVEUgSU5ERVg8L2NvbW1hbmQ+Ci0gICAgY29tbWFuZCB3aWxsIGZhaWwgYnV0 IGxlYXZlIGJlaGluZCBhbiA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IGluZGV4LiBUaGlzIGluZGV4 Ci0gICAgd2lsbCBiZSBpZ25vcmVkIGZvciBxdWVyeWluZyBwdXJwb3NlcyBiZWNhdXNlIGl0IG1p Z2h0IGJlIGluY29tcGxldGU7Ci0gICAgaG93ZXZlciBpdCB3aWxsIHN0aWxsIGNvbnN1bWUgdXBk YXRlIG92ZXJoZWFkLiBUaGUgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPgotICAgIDxj b21tYW5kPlxkPC9jb21tYW5kPiBjb21tYW5kIHdpbGwgcmVwb3J0IHN1Y2ggYW4gaW5kZXggYXMg PGxpdGVyYWw+SU5WQUxJRDwvbGl0ZXJhbD46CisgICAgY29tbWFuZCB3aWxsIGZhaWwgYnV0IGxl YXZlIGJlaGluZCBhbiA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IGluZGV4IGFuZCBpdHMKKyAgICBh c3NvY2lhdGVkIGF1eGlsaWFyeSBpbmRleC4gVGhlc2UgaW5kZXhlcworICAgIHdpbGwgYmUgaWdu b3JlZCBmb3IgcXVlcnlpbmcgcHVycG9zZXMgYmVjYXVzZSB0aGV5IG1pZ2h0IGJlIGluY29tcGxl dGU7CisgICAgaG93ZXZlciB0aGV5IHdpbGwgc3RpbGwgY29uc3VtZSB1cGRhdGUgb3ZlcmhlYWQu IFRoZSA8YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+CisgICAgPGNvbW1hbmQ+XGQ8L2Nv bW1hbmQ+IGNvbW1hbmQgd2lsbCByZXBvcnQgc3VjaCBpbmRleGVzIGFzIDxsaXRlcmFsPklOVkFM SUQ8L2xpdGVyYWw+OgogCiA8cHJvZ3JhbWxpc3Rpbmc+CiBwb3N0Z3Jlcz0jIFxkIHRhYgpAQCAt NjY0LDExICs2NjUsMTIgQEAgcG9zdGdyZXM9IyBcZCB0YWIKICBjb2wgICAgfCBpbnRlZ2VyIHwg ICAgICAgICAgIHwgICAgICAgICAgfAogSW5kZXhlczoKICAgICAiaWR4IiBidHJlZSAoY29sKSBJ TlZBTElECisgICAgImlkeF9jY2F1eCIgc3RpciAoY29sKSBJTlZBTElECiA8L3Byb2dyYW1saXN0 aW5nPgogCiAgICAgVGhlIHJlY29tbWVuZGVkIHJlY292ZXJ5Ci0gICAgbWV0aG9kIGluIHN1Y2gg Y2FzZXMgaXMgdG8gZHJvcCB0aGUgaW5kZXggYW5kIHRyeSBhZ2FpbiB0byBwZXJmb3JtCi0gICAg PGNvbW1hbmQ+Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4uICAoQW5vdGhlciBw b3NzaWJpbGl0eSBpcworICAgIG1ldGhvZCBpbiBzdWNoIGNhc2VzIGlzIHRvIGRyb3AgdGhlc2Ug aW5kZXhlcyBhbmQgdHJ5IGFnYWluIHRvIHBlcmZvcm0KKyAgICA8Y29tbWFuZD5DUkVBVEUgSU5E RVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPi4gKEFub3RoZXIgcG9zc2liaWxpdHkgaXMKICAgICB0 byByZWJ1aWxkIHRoZSBpbmRleCB3aXRoIDxjb21tYW5kPlJFSU5ERVggSU5ERVggQ09OQ1VSUkVO VExZPC9jb21tYW5kPikuCiAgICA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9y ZWYvcmVpbmRleC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKaW5kZXggMTg1 Y2Q3NWNhMzAuLjllMDI0ODI2MWFlIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3JlaW5k ZXguc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3JlaW5kZXguc2dtbApAQCAtMzY4LDkgKzM2 OCw4IEBAIFJFSU5ERVggWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248 L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSB7IERBCiAgICAgPHByb2R1Y3RuYW1lPlBvc3RncmVT UUw8L3Byb2R1Y3RuYW1lPiBzdXBwb3J0cyByZWJ1aWxkaW5nIGluZGV4ZXMgd2l0aCBtaW5pbXVt IGxvY2tpbmcKICAgICBvZiB3cml0ZXMuICBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIGJ5IHNwZWNp ZnlpbmcgdGhlCiAgICAgPGxpdGVyYWw+Q09OQ1VSUkVOVExZPC9saXRlcmFsPiBvcHRpb24gb2Yg PGNvbW1hbmQ+UkVJTkRFWDwvY29tbWFuZD4uIFdoZW4gdGhpcyBvcHRpb24KLSAgICBpcyB1c2Vk LCA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IG11c3QgcGVyZm9ybSB0d28g c2NhbnMgb2YgdGhlIHRhYmxlCi0gICAgZm9yIGVhY2ggaW5kZXggdGhhdCBuZWVkcyB0byBiZSBy ZWJ1aWx0IGFuZCB3YWl0IGZvciB0ZXJtaW5hdGlvbiBvZgotICAgIGFsbCBleGlzdGluZyB0cmFu c2FjdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSB1c2UgdGhlIGluZGV4LgorICAgIGlzIHVz ZWQsIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gbXVzdCBwZXJmb3JtIHNl dmVyYWwgc3RlcHMgdG8gZW5zdXJlIGRhdGEKKyAgICBjb25zaXN0ZW5jeSB3aGlsZSBhbGxvd2lu ZyBub3JtYWwgb3BlcmF0aW9ucyB0byBjb250aW51ZS4KICAgICBUaGlzIG1ldGhvZCByZXF1aXJl cyBtb3JlIHRvdGFsIHdvcmsgdGhhbiBhIHN0YW5kYXJkIGluZGV4CiAgICAgcmVidWlsZCBhbmQg dGFrZXMgc2lnbmlmaWNhbnRseSBsb25nZXIgdG8gY29tcGxldGUgYXMgaXQgbmVlZHMgdG8gd2Fp dAogICAgIGZvciB1bmZpbmlzaGVkIHRyYW5zYWN0aW9ucyB0aGF0IG1pZ2h0IG1vZGlmeSB0aGUg aW5kZXguIEhvd2V2ZXIsIHNpbmNlCkBAIC0zODgsNyArMzg3LDcgQEAgUkVJTkRFWCBbICggPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0g KSBdIHsgREEKICAgICA8b3JkZXJlZGxpc3Q+CiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJh PgotICAgICAgIEEgbmV3IHRyYW5zaWVudCBpbmRleCBkZWZpbml0aW9uIGlzIGFkZGVkIHRvIHRo ZSBjYXRhbG9nCisgICAgICAgQSBuZXcgdHJhbnNpZW50IGluZGV4IGRlZmluaXRpb24gYW5kIGFu IGF1eGlsaWFyeSBpbmRleCBhcmUgYWRkZWQgdG8gdGhlIGNhdGFsb2cKICAgICAgICA8bGl0ZXJh bD5wZ19pbmRleDwvbGl0ZXJhbD4uICBUaGlzIGRlZmluaXRpb24gd2lsbCBiZSB1c2VkIHRvIHJl cGxhY2UKICAgICAgICB0aGUgb2xkIGluZGV4LiAgQSA8bGl0ZXJhbD5TSEFSRSBVUERBVEUgRVhD TFVTSVZFPC9saXRlcmFsPiBsb2NrIGF0CiAgICAgICAgc2Vzc2lvbiBsZXZlbCBpcyB0YWtlbiBv biB0aGUgaW5kZXhlcyBiZWluZyByZWluZGV4ZWQgYXMgd2VsbCBhcyB0aGVpcgpAQCAtMzk4LDcg KzM5NywxNSBAQCBSRUlOREVYIFsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+b3B0 aW9uPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIF0geyBEQQogCiAgICAgIDxsaXN0aXRlbT4KICAg ICAgIDxwYXJhPgotICAgICAgIEEgZmlyc3QgcGFzcyB0byBidWlsZCB0aGUgaW5kZXggaXMgZG9u ZSBmb3IgZWFjaCBuZXcgaW5kZXguICBPbmNlIHRoZQorICAgICAgIFRoZSBhdXhpbGlhcnkgaW5k ZXggaXMgbWFya2VkIGFzICJyZWFkeSBmb3IgaW5zZXJ0cyIsIG1ha2luZworICAgICAgIGl0IHZp c2libGUgdG8gb3RoZXIgc2Vzc2lvbnMuIFRoaXMgaW5kZXggZWZmaWNpZW50bHkgdHJhY2tzIGFs bCBuZXcKKyAgICAgICB0dXBsZXMgZHVyaW5nIHRoZSByZWluZGV4IHByb2Nlc3MuCisgICAgICA8 L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+ CisgICAgICAgVGhlIG5ldyBtYWluIGluZGV4IGlzIGJ1aWx0IGJ5IHNjYW5uaW5nIHRoZSB0YWJs ZS4gIE9uY2UgdGhlCiAgICAgICAgaW5kZXggaXMgYnVpbHQsIGl0cyBmbGFnIDxsaXRlcmFsPnBn X2luZGV4LmluZGlzcmVhZHk8L2xpdGVyYWw+IGlzCiAgICAgICAgc3dpdGNoZWQgdG8gPHF1b3Rl PnRydWU8L3F1b3RlPiB0byBtYWtlIGl0IHJlYWR5IGZvciBpbnNlcnRzLCBtYWtpbmcgaXQKICAg ICAgICB2aXNpYmxlIHRvIG90aGVyIHNlc3Npb25zIG9uY2UgdGhlIHRyYW5zYWN0aW9uIHRoYXQg cGVyZm9ybWVkIHRoZSBidWlsZApAQCAtNDA5LDkgKzQxNiw5IEBAIFJFSU5ERVggWyAoIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkg XSB7IERBCiAKICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+Ci0gICAgICAgVGhlbiBhIHNl Y29uZCBwYXNzIGlzIHBlcmZvcm1lZCB0byBhZGQgdHVwbGVzIHRoYXQgd2VyZSBhZGRlZCB3aGls ZSB0aGUKLSAgICAgICBmaXJzdCBwYXNzIHdhcyBydW5uaW5nLiAgVGhpcyBzdGVwIGlzIGFsc28g ZG9uZSBpbiBhIHNlcGFyYXRlCi0gICAgICAgdHJhbnNhY3Rpb24gZm9yIGVhY2ggaW5kZXguCisg ICAgICAgQSB2YWxpZGF0aW9uIHBoYXNlIG1lcmdlcyBhbnkgbWlzc2luZyBlbnRyaWVzIGZyb20g dGhlIGF1eGlsaWFyeSBpbmRleAorICAgICAgIGludG8gdGhlIG1haW4gaW5kZXgsIGVuc3VyaW5n IGFsbCBjb25jdXJyZW50IGNoYW5nZXMgYXJlIGNhcHR1cmVkLgorICAgICAgIFRoaXMgc3RlcCBp cyBhbHNvIGRvbmUgaW4gYSBzZXBhcmF0ZSB0cmFuc2FjdGlvbiBmb3IgZWFjaCBpbmRleC4KICAg ICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KIApAQCAtNDI4LDcgKzQzNSw3IEBAIFJFSU5E RVggWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxl PiBbLCAuLi5dICkgXSB7IERBCiAKICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+Ci0gICAg ICAgVGhlIG9sZCBpbmRleGVzIGhhdmUgPGxpdGVyYWw+cGdfaW5kZXguaW5kaXNyZWFkeTwvbGl0 ZXJhbD4gc3dpdGNoZWQgdG8KKyAgICAgICBUaGUgb2xkIGFuZCBhdXhpbGlhcnkgaW5kZXhlcyBo YXZlIDxsaXRlcmFsPnBnX2luZGV4LmluZGlzcmVhZHk8L2xpdGVyYWw+IHN3aXRjaGVkIHRvCiAg ICAgICAgPHF1b3RlPmZhbHNlPC9xdW90ZT4gdG8gcHJldmVudCBhbnkgbmV3IHR1cGxlIGluc2Vy dGlvbnMsIGFmdGVyIHdhaXRpbmcKICAgICAgICBmb3IgcnVubmluZyBxdWVyaWVzIHRoYXQgbWln aHQgcmVmZXJlbmNlIHRoZSBvbGQgaW5kZXggdG8gY29tcGxldGUuCiAgICAgICA8L3BhcmE+CkBA IC00MzYsNyArNDQzLDcgQEAgUkVJTkRFWCBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIHsgREEKIAogICAgICA8bGlzdGl0 ZW0+CiAgICAgICA8cGFyYT4KLSAgICAgICBUaGUgb2xkIGluZGV4ZXMgYXJlIGRyb3BwZWQuICBU aGUgPGxpdGVyYWw+U0hBUkUgVVBEQVRFCisgICAgICAgVGhlIG9sZCBhbmQgYXV4aWxpYXJ5IGlu ZGV4ZXMgYXJlIGRyb3BwZWQuICBUaGUgPGxpdGVyYWw+U0hBUkUgVVBEQVRFCiAgICAgICAgRVhD TFVTSVZFPC9saXRlcmFsPiBzZXNzaW9uIGxvY2tzIGZvciB0aGUgaW5kZXhlcyBhbmQgdGhlIHRh YmxlIGFyZQogICAgICAgIHJlbGVhc2VkLgogICAgICAgPC9wYXJhPgpAQCAtNDQ3LDExICs0NTQs MTEgQEAgUkVJTkRFWCBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbjwv cmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIHsgREEKICAgIDxwYXJhPgogICAgIElmIGEgcHJvYmxl bSBhcmlzZXMgd2hpbGUgcmVidWlsZGluZyB0aGUgaW5kZXhlcywgc3VjaCBhcyBhCiAgICAgdW5p cXVlbmVzcyB2aW9sYXRpb24gaW4gYSB1bmlxdWUgaW5kZXgsIHRoZSA8Y29tbWFuZD5SRUlOREVY PC9jb21tYW5kPgotICAgIGNvbW1hbmQgd2lsbCBmYWlsIGJ1dCBsZWF2ZSBiZWhpbmQgYW4gPHF1 b3RlPmludmFsaWQ8L3F1b3RlPiBuZXcgaW5kZXggaW4gYWRkaXRpb24gdG8KLSAgICB0aGUgcHJl LWV4aXN0aW5nIG9uZS4gVGhpcyBpbmRleCB3aWxsIGJlIGlnbm9yZWQgZm9yIHF1ZXJ5aW5nIHB1 cnBvc2VzCi0gICAgYmVjYXVzZSBpdCBtaWdodCBiZSBpbmNvbXBsZXRlOyBob3dldmVyIGl0IHdp bGwgc3RpbGwgY29uc3VtZSB1cGRhdGUKKyAgICBjb21tYW5kIHdpbGwgZmFpbCBidXQgbGVhdmUg YmVoaW5kIGFuIDxxdW90ZT5pbnZhbGlkPC9xdW90ZT4gbmV3IGluZGV4IGFuZCBpdHMgYXV4aWxp YXJ5IGluZGV4IGluIGFkZGl0aW9uIHRvCisgICAgdGhlIHByZS1leGlzdGluZyBvbmUuIFRoZXNl IGluZGV4ZXMgd2lsbCBiZSBpZ25vcmVkIGZvciBxdWVyeWluZyBwdXJwb3NlcworICAgIGJlY2F1 c2UgdGhleSBtaWdodCBiZSBpbmNvbXBsZXRlOyBob3dldmVyIHRoZXkgd2lsbCBzdGlsbCBjb25z dW1lIHVwZGF0ZQogICAgIG92ZXJoZWFkLiBUaGUgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0 aW9uPiA8Y29tbWFuZD5cZDwvY29tbWFuZD4gY29tbWFuZCB3aWxsIHJlcG9ydAotICAgIHN1Y2gg YW4gaW5kZXggYXMgPGxpdGVyYWw+SU5WQUxJRDwvbGl0ZXJhbD46CisgICAgc3VjaCBpbmRleGVz IGFzIDxsaXRlcmFsPklOVkFMSUQ8L2xpdGVyYWw+OgogCiA8cHJvZ3JhbWxpc3Rpbmc+CiBwb3N0 Z3Jlcz0jIFxkIHRhYgpAQCAtNDYyLDEyICs0NjksMTMgQEAgcG9zdGdyZXM9IyBcZCB0YWIKIElu ZGV4ZXM6CiAgICAgImlkeCIgYnRyZWUgKGNvbCkKICAgICAiaWR4X2NjbmV3IiBidHJlZSAoY29s KSBJTlZBTElECisgICAgImlkeF9jY2F1eCIgc3RpciAoY29sKSBJTlZBTElECiA8L3Byb2dyYW1s aXN0aW5nPgogCiAgICAgSWYgdGhlIGluZGV4IG1hcmtlZCA8bGl0ZXJhbD5JTlZBTElEPC9saXRl cmFsPiBpcyBzdWZmaXhlZAotICAgIDxsaXRlcmFsPl9jY25ldzwvbGl0ZXJhbD4sIHRoZW4gaXQg Y29ycmVzcG9uZHMgdG8gdGhlIHRyYW5zaWVudAorICAgIDxsaXRlcmFsPl9jY25ldzwvbGl0ZXJh bD4gb3IgPGxpdGVyYWw+X2NjYXV4PC9saXRlcmFsPiwgdGhlbiBpdCBjb3JyZXNwb25kcyB0byB0 aGUgdHJhbnNpZW50IG9yIGF1eGlsaWFyeQogICAgIGluZGV4IGNyZWF0ZWQgZHVyaW5nIHRoZSBj b25jdXJyZW50IG9wZXJhdGlvbiwgYW5kIHRoZSByZWNvbW1lbmRlZAotICAgIHJlY292ZXJ5IG1l dGhvZCBpcyB0byBkcm9wIGl0IHVzaW5nIDxsaXRlcmFsPkRST1AgSU5ERVg8L2xpdGVyYWw+LAor ICAgIHJlY292ZXJ5IG1ldGhvZCBpcyB0byBkcm9wIHRoZXNlIGluZGV4ZXMgdXNpbmcgPGxpdGVy YWw+RFJPUCBJTkRFWDwvbGl0ZXJhbD4sCiAgICAgdGhlbiBhdHRlbXB0IDxjb21tYW5kPlJFSU5E RVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPiBhZ2Fpbi4KICAgICBJZiB0aGUgaW52YWxpZCBpbmRl eCBpcyBpbnN0ZWFkIHN1ZmZpeGVkIDxsaXRlcmFsPl9jY29sZDwvbGl0ZXJhbD4sCiAgICAgaXQg Y29ycmVzcG9uZHMgdG8gdGhlIG9yaWdpbmFsIGluZGV4IHdoaWNoIGNvdWxkIG5vdCBiZSBkcm9w cGVkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVBRE1FLkhPVCBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL1JFQURNRS5IT1QKaW5kZXggNzRlNDA3ZjM3NWEuLmIxYzc5 NzUxN2VlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL1JFQURNRS5IT1QKQEAgLTM3NSw2ICszNzUsMTEg QEAgY29uc3RyYWludCBvbiB3aGljaCB1cGRhdGVzIGNhbiBiZSBIT1QuICBPdGhlciB0cmFuc2Fj dGlvbnMgbXVzdCBpbmNsdWRlCiBzdWNoIGFuIGluZGV4IHdoZW4gZGV0ZXJtaW5pbmcgSE9ULXNh ZmV0eSBvZiB1cGRhdGVzLCBldmVuIHRob3VnaCB0aGV5CiBtdXN0IGlnbm9yZSBpdCBmb3IgYm90 aCBpbnNlcnRpb24gYW5kIHNlYXJjaGluZyBwdXJwb3Nlcy4KIAorQWxzbywgc3BlY2lhbCBhdXhp bGlhcnkgaW5kZXggaXMgY3JlYXRlZCB0aGUgc2FtZSB3YXkuIEl0IGlzIG1hcmtlZCBhcworInJl YWR5IGZvciBpbnNlcnRzIiB3aXRob3V0IGFueSBhY3R1YWwgdGFibGUgc2Nhbi4gSXRzIHB1cnBv c2UgaXMgdG8gY29sbGVjdAorbmV3IHR1cGxlcyBpbnNlcnRlZCBpbnRvIHRhYmxlIHdoaWxlIG91 ciB0YXJnZXQgaW5kZXggaXMgc3RpbGwgIm5vdCByZWFkeQorZm9yIGluc2VydHMiLgorCiBXZSBt dXN0IGRvIHRoaXMgdG8gYXZvaWQgbWFraW5nIGluY29ycmVjdCBpbmRleCBlbnRyaWVzLiAgRm9y IGV4YW1wbGUsCiBzdXBwb3NlIHdlIGFyZSBidWlsZGluZyBhbiBpbmRleCBvbiBjb2x1bW4gWCBh bmQgd2UgbWFrZSBhbiBpbmRleCBlbnRyeSBmb3IKIGEgbm9uLUhPVCB0dXBsZSB3aXRoIFg9MS4g IFRoZW4gc29tZSBvdGhlciBiYWNrZW5kLCB1bmF3YXJlIHRoYXQgWCBpcyBhbgpAQCAtMzk0LDEw ICszOTksMTAgQEAgZW50cnkgYXQgdGhlIHJvb3Qgb2YgdGhlIEhPVC11cGRhdGUgY2hhaW4gYnV0 IHdlIHVzZSB0aGUga2V5IHZhbHVlIGZyb20gdGhlCiBsaXZlIHR1cGxlLgogCiBXZSBtYXJrIHRo ZSBpbmRleCBvcGVuIGZvciBpbnNlcnRzIChidXQgc3RpbGwgbm90IHJlYWR5IGZvciByZWFkcykg dGhlbgotd2UgYWdhaW4gd2FpdCBmb3IgdHJhbnNhY3Rpb25zIHdoaWNoIGhhdmUgdGhlIHRhYmxl IG9wZW4uICBUaGVuIHdlIHRha2UKLWEgc2Vjb25kIHJlZmVyZW5jZSBzbmFwc2hvdCBhbmQgdmFs aWRhdGUgdGhlIGluZGV4LiAgVGhpcyBzZWFyY2hlcyBmb3IKLXR1cGxlcyBtaXNzaW5nIGZyb20g dGhlIGluZGV4LCBhbmQgaW5zZXJ0cyBhbnkgbWlzc2luZyBvbmVzLiAgQWdhaW4sCi10aGUgaW5k ZXggZW50cmllcyBoYXZlIHRvIGhhdmUgVElEcyBlcXVhbCB0byBIT1QtY2hhaW4gcm9vdCBUSURz LCBidXQKK3dlIGFnYWluIHdhaXQgZm9yIHRyYW5zYWN0aW9ucyB3aGljaCBoYXZlIHRoZSB0YWJs ZSBvcGVuLiAgVGhlbiB2YWxpZGF0ZQordGhlIGluZGV4LiAgVGhpcyBzZWFyY2hlcyBmb3IgdHVw bGVzIG1pc3NpbmcgZnJvbSB0aGUgaW5kZXggaW4gYXV4aWxpYXJ5CitpbmRleCwgYW5kIGluc2Vy dHMgYW55IG1pc3Npbmcgb25lcyBpZiB0aGV5IGFyZSB2aXNpYmxlIHRvIHJlZmVyZW5jZSBzbmFw c2hvdC4KK0FnYWluLCB0aGUgaW5kZXggZW50cmllcyBoYXZlIHRvIGhhdmUgVElEcyBlcXVhbCB0 byBIT1QtY2hhaW4gcm9vdCBUSURzLCBidXQKIHRoZSB2YWx1ZSB0byBiZSBpbnNlcnRlZCBpcyB0 aGUgb25lIGZyb20gdGhlIGxpdmUgdHVwbGUuCiAKIFRoZW4gd2Ugd2FpdCB1bnRpbCBldmVyeSB0 cmFuc2FjdGlvbiB0aGF0IGNvdWxkIGhhdmUgYSBzbmFwc2hvdCBvbGRlciB0aGFuCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBjZGQxNTNjNmI2ZC4uM2EwNDQ1 M2ZmNWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVy LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtNDIs MTUgKzQyLDIwIEBACiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9sb2NrLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJzdG9y YWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgogI2luY2x1ZGUgInN0 b3JhZ2Uvc21nci5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRp bHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvdHVwbGVzb3J0LmgiCisjaW5jbHVkZSAidXRpbHMv dHVwbGVzdG9yZS5oIgorCisvKiBHVUM6IHBlcmNlbnRhZ2Ugb2YgbWFpbnRlbmFuY2Vfd29ya19t ZW0gZm9yIENJQyB2YWxpZGF0aW9uIHR1cGxlc3RvcmUgKi8KK2ludAkJCWRlYnVnX2NpY192YWxp ZGF0ZV9zdG9yZV9tZW1fcGN0ID0gMTA7CiAKIHN0YXRpYyB2b2lkIHJlZm9ybV9hbmRfcmV3cml0 ZV90dXBsZShIZWFwVHVwbGUgdHVwbGUsCi0JCQkJCQkJCQkgUmVsYXRpb24gT2xkSGVhcCwgUmVs YXRpb24gTmV3SGVhcCwKLQkJCQkJCQkJCSBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsIFJl d3JpdGVTdGF0ZSByd3N0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwgUmV3cml0ZVN0 YXRlIHJ3c3RhdGUpOwogCiBzdGF0aWMgYm9vbCBTYW1wbGVIZWFwVHVwbGVWaXNpYmxlKFRhYmxl U2NhbkRlc2Mgc2NhbiwgQnVmZmVyIGJ1ZmZlciwKIAkJCQkJCQkJICAgSGVhcFR1cGxlIHR1cGxl LApAQCAtMTc3MywyNDIgKzE3NzgsNDIyIEBAIGhlYXBhbV9pbmRleF9idWlsZF9yYW5nZV9zY2Fu KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlyZXR1cm4gcmVsdHVwbGVzOwogfQogCisvKgorICog Q2FsY3VsYXRlIHNldCBkaWZmZXJlbmNlIChyZWxhdGl2ZSBjb21wbGVtZW50KSBvZiBtYWluIGFu ZCBhdXgKKyAqIHNldHMuCisgKgorICogQWxsIHJlY29yZHMgd2hpY2ggYXJlIHByZXNlbnQgaW4g YXV4aWxpYXJ5IHR1cGxlc29ydCBidXQgbm90IGluCisgKiBtYWluIGFyZSBhZGRlZCB0byB0aGUg c3RvcmUuCisgKgorICogSW4gc2V0IHRoZW9yeSBub3RhdGlvbiBzdG9yZSA9IGF1eCAtIG1haW4g b3Igc3RvcmUgPSBhdXggLyBtYWluLgorICoKKyAqIHJldHVybnMgbnVtYmVyIG9mIGl0ZW1zIGFk ZGVkIHRvIHN0b3JlCisgKi8KK3N0YXRpYyBpbnQ2NAoraGVhcGFtX2luZGV4X3ZhbGlkYXRlX3R1 cGxlc29ydF9kaWZmZXJlbmNlKFR1cGxlc29ydHN0YXRlICptYWluLAorCQkJCQkJCQkJCSAgIFR1 cGxlc29ydHN0YXRlICphdXgsCisJCQkJCQkJCQkJICAgVHVwbGVzdG9yZXN0YXRlICpzdG9yZSkK K3sKKwlpbnQ2NAkJbnVtID0gMDsKKwkvKiBzdGF0ZSB2YXJpYWJsZXMgZm9yIHRoZSBtZXJnZSAq LworCUl0ZW1Qb2ludGVyCWluZGV4Y3Vyc29yID0gTlVMTCwKKwkJCQkJYXV4aW5kZXhjdXJzb3Ig PSBOVUxMOworCUl0ZW1Qb2ludGVyRGF0YSBkZWNvZGVkLAorCQkJCQlhdXhkZWNvZGVkOworCWJv b2wJCQl0dXBsZXNvcnRfZW1wdHkgPSBmYWxzZSwKKwkJCQkJYXV4dHVwbGVzb3J0X2VtcHR5ID0g ZmFsc2U7CisKKwkvKiBJbml0aWFsaXplIHBvaW50ZXJzLiAqLworCUl0ZW1Qb2ludGVyU2V0SW52 YWxpZCgmZGVjb2RlZCk7CisJSXRlbVBvaW50ZXJTZXRJbnZhbGlkKCZhdXhkZWNvZGVkKTsKKwor CS8qCisJICogTWFpbiBsb29wOiB3ZSBzdGVwIHRocm91Z2ggdGhlIGF1eGlsaWFyeSBzb3J0IChh dXhTdGF0ZS0+dHVwbGVzb3J0KSwKKwkgKiB3aGljaCBob2xkcyBUSURzIHRoYXQgbXVzdCBjb21w YXJlZCB0byB0aG9zZSBmcm9tIHRoZSAibWFpbiIgc29ydAorCSAqIChzdGF0ZS0+dHVwbGVzb3J0 KS4KKwkgKi8KKwl3aGlsZSAoIWF1eHR1cGxlc29ydF9lbXB0eSkKKwl7CisJCURhdHVtCQl0c192 YWw7CisJCWJvb2wJCXRzX2lzbnVsbDsKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkv KgorCQkgKiBBdHRlbXB0IHRvIGZldGNoIHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBhdXhpbGlhcnkg c29ydC4gSWYgaXQncworCQkgKiBlbXB0eSwgd2Ugc2V0IGF1eGluZGV4Y3Vyc29yIHRvIE5VTEwu CisJCSAqLworCQlhdXh0dXBsZXNvcnRfZW1wdHkgPSAhdHVwbGVzb3J0X2dldGRhdHVtKGF1eCwg dHJ1ZSwKKwkJCQkJCQkJCQkJCSBmYWxzZSwgJnRzX3ZhbCwgJnRzX2lzbnVsbCwKKwkJCQkJCQkJ CQkJCSBOVUxMKTsKKwkJQXNzZXJ0KGF1eHR1cGxlc29ydF9lbXB0eSB8fCAhdHNfaXNudWxsKTsK KwkJaWYgKCFhdXh0dXBsZXNvcnRfZW1wdHkpCisJCXsKKwkJCWl0ZW1wdHJfZGVjb2RlKCZhdXhk ZWNvZGVkLCBEYXR1bUdldEludDY0KHRzX3ZhbCkpOworCQkJYXV4aW5kZXhjdXJzb3IgPSAmYXV4 ZGVjb2RlZDsKKwkJfQorCQllbHNlCisJCXsKKwkJCWF1eGluZGV4Y3Vyc29yID0gTlVMTDsKKwkJ fQorCisJCS8qCisJCSAqIElmIHRoZSBhdXhpbGlhcnkgc29ydCBpcyBub3QgeWV0IGVtcHR5LCB3 ZSBub3cgdHJ5IHRvIHN5bmNocm9uaXplCisJCSAqIHRoZSAibWFpbiIgc29ydCBjdXJzb3IgKGlu ZGV4Y3Vyc29yKSB3aXRoIGF1eGluZGV4Y3Vyc29yLiBXZSBhZHZhbmNlCisJCSAqIHRoZSBtYWlu IHNvcnQgY3Vyc29yIHVudGlsIHdlJ3ZlIHJlYWNoZWQgb3IgcGFzc2VkIHRoZSBhdXhpbGlhcnkg VElELgorCQkgKi8KKwkJaWYgKCFhdXh0dXBsZXNvcnRfZW1wdHkpCisJCXsKKwkJCS8qCisJCQkg KiBNb3ZlIHRoZSBtYWluIHNvcnQgZm9yd2FyZCB3aGlsZToKKwkJCSAqICAgKDEpIEl0J3Mgbm90 IGV4aGF1c3RlZCAodHVwbGVzb3J0X2VtcHR5ID09IGZhbHNlKSwgYW5kCisJCQkgKiAgICgyKSBF aXRoZXIgaW5kZXhjdXJzb3IgaXMgTlVMTCAoZmlyc3QgaXRlcmF0aW9uKSBvcgorCQkJICogICAg ICAgaW5kZXhjdXJzb3IgPCBhdXhpbmRleGN1cnNvciBpbiBUSUQgb3JkZXIuCisJCQkgKi8KKwkJ CXdoaWxlICghdHVwbGVzb3J0X2VtcHR5ICYmIChpbmRleGN1cnNvciA9PSBOVUxMIHx8IC8qIG51 bGwgb24gZmlyc3QgdGltZSBoZXJlICovCisJCQkJCQlJdGVtUG9pbnRlckNvbXBhcmUoaW5kZXhj dXJzb3IsIGF1eGluZGV4Y3Vyc29yKSA8IDApKQorCQkJeworCQkJCS8qCisJCQkJICogR2V0IHRo ZSBuZXh0IFRJRCBmcm9tIHRoZSBtYWluIHNvcnQuIElmIGl0J3MgZW1wdHksCisJCQkJICogd2Ug c2V0IGluZGV4Y3Vyc29yIHRvIE5VTEwuCisJCQkJICovCisJCQkJdHVwbGVzb3J0X2VtcHR5ID0g IXR1cGxlc29ydF9nZXRkYXR1bShtYWluLCB0cnVlLAorCQkJCQkJCQkJCQkJCSAgZmFsc2UsICZ0 c192YWwsICZ0c19pc251bGwsCisJCQkJCQkJCQkJCQkJICBOVUxMKTsKKwkJCQlBc3NlcnQodHVw bGVzb3J0X2VtcHR5IHx8ICF0c19pc251bGwpOworCisJCQkJaWYgKCF0dXBsZXNvcnRfZW1wdHkp CisJCQkJeworCQkJCQlpdGVtcHRyX2RlY29kZSgmZGVjb2RlZCwgRGF0dW1HZXRJbnQ2NCh0c192 YWwpKTsKKwkJCQkJaW5kZXhjdXJzb3IgPSAmZGVjb2RlZDsKKwkJCQl9CisJCQkJZWxzZQorCQkJ CXsKKwkJCQkJaW5kZXhjdXJzb3IgPSBOVUxMOworCQkJCX0KKworCQkJCUNIRUNLX0ZPUl9JTlRF UlJVUFRTKCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBOb3csIGlmIGVpdGhlcjoKKwkJCSAqICAt IHRoZSBtYWluIHNvcnQgaXMgZW1wdHksIG9yCisJCQkgKiAgLSBpbmRleGN1cnNvciA+IGF1eGlu ZGV4Y3Vyc29yLAorCQkJICoKKwkJCSAqIHRoZW4gYXV4aW5kZXhjdXJzb3IgaWRlbnRpZmllcyBh IFRJRCB0aGF0IGRvZXNuJ3QgYXBwZWFyIGluCisJCQkgKiB0aGUgbWFpbiBzb3J0LiBXZSBsaWtl bHkgbmVlZCB0byBpbnNlcnQgaXQKKwkJCSAqIGludG8gdGhlIHRhcmdldCBpbmRleCBpZiBpdOKA mXMgdmlzaWJsZSBpbiB0aGUgaGVhcC4KKwkJCSAqLworCQkJaWYgKHR1cGxlc29ydF9lbXB0eSB8 fCBJdGVtUG9pbnRlckNvbXBhcmUoaW5kZXhjdXJzb3IsIGF1eGluZGV4Y3Vyc29yKSA+IDApCisJ CQl7CisJCQkJdHVwbGVzdG9yZV9wdXRkYXR1bShzdG9yZSwgSW50NjRHZXREYXR1bShpdGVtcHRy X2VuY29kZShhdXhpbmRleGN1cnNvcikpKTsKKwkJCQludW0rKzsKKwkJCX0KKwkJfQorCX0KKwor CXJldHVybiBudW07Cit9CisKK3R5cGVkZWYgc3RydWN0IFZhbGlkYXRlSW5kZXhTY2FuU3RhdGUK K3sKKwlUdXBsZXN0b3Jlc3RhdGUJCSpzdG9yZTsKKwlCbG9ja051bWJlcgkJCXByZXZfYmxvY2tf bnVtYmVyOworCU9mZnNldE51bWJlcgkJcHJldl9vZmZzZXRfbnVtYmVyOworfSBWYWxpZGF0ZUlu ZGV4U2NhblN0YXRlOworCisvKgorICogVGhpcyBpcyBSZWFkU3RyZWFtQmxvY2tOdW1iZXJDQiBp bXBsZW1lbnRhdGlvbiB3aGljaCB3b3JrcyBhcyBmb2xsb3dzOgorICoKKyAqIDEpIEl0IGl0ZXJh dGVzIG92ZXIgYSBzb3J0ZWQgdHVwbGVzdG9yZSwgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGFuIGVu Y29kZWQKKyAqICAgIEl0ZW1Qb2ludGVyCisgKgorICogMikgSXQgcmV0dXJucyB0aGUgY3VycmVu dCBCbG9ja051bWJlciBhbmQgY29sbGVjdHMgYWxsIE9mZnNldE51bWJlcnMKKyAqICAgIGZvciB0 aGF0IGJsb2NrIGluIHBlcl9idWZmZXJfZGF0YS4KKyAqCisgKiAzKSBPbmNlIHRoZSBjb2RlIGVu Y291bnRlcnMgYSBuZXcgQmxvY2tOdW1iZXIsIGl0IHN0b3BzIHJlYWRpbmcgbW9yZQorICogICAg b2Zmc2V0cyBhbmQgc2F2ZXMgdGhlIE9mZnNldE51bWJlciBvZiB0aGUgbmV3IGJsb2NrIGZvciB0 aGUgbmV4dCBjYWxsLgorICoKKyAqIDQpIFRoZSBsaXN0IG9mIG9mZnNldHMgZm9yIGEgYmxvY2sg aXMgYWx3YXlzIHRlcm1pbmF0ZWQgd2l0aCBJbnZhbGlkT2Zmc2V0TnVtYmVyLgorICoKKyAqIFRo aXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgcmVwZWF0ZWRseSBjYWxsZWQsIGVhY2ggdGlt ZSByZXR1cm5pbmcKKyAqIHRoZSBuZXh0IGJsb2NrIGFuZCBpdHMgY29ycmVzcG9uZGluZyBzZXQg b2Ygb2Zmc2V0cy4KKyAqLworc3RhdGljIEJsb2NrTnVtYmVyCitoZWFwYW1faW5kZXhfdmFsaWRh dGVfc2Nhbl9yZWFkX3N0cmVhbV9uZXh0KAorCQkJCQkJCQkgIFJlYWRTdHJlYW0gKnN0cmVhbSwK KwkJCQkJCQkJICB2b2lkICp2b2lkX2NhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJCQkJICB2 b2lkICp2b2lkX3Blcl9idWZmZXJfZGF0YQorCQkJCQkJCQkgICkKK3sKKwlib29sIHNob3VsZF9m cmVlOworCURhdHVtIGRhdHVtOworCUJsb2NrTnVtYmVyIHJlc3VsdCA9IEludmFsaWRCbG9ja051 bWJlcjsKKwlpbnQgaSA9IDA7CisKKwkvKgorCSAqIFJldHJpZXZlIHRoZSBzcGVjaWFsaXplZCBj YWxsYmFjayBzdGF0ZSBhbmQgdGhlIG91dHB1dCBidWZmZXIuCisJICogY2FsbGJhY2tfcHJpdmF0 ZV9kYXRhIGtlZXBzIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBibG9jayBhbmQgb2Zmc2V0CisJICog ZnJvbSBhIHByaW9yIGludm9jYXRpb24sIGlmIGFueS4KKwkgKi8KKwlWYWxpZGF0ZUluZGV4U2Nh blN0YXRlICpjYWxsYmFja19wcml2YXRlX2RhdGEgPSB2b2lkX2NhbGxiYWNrX3ByaXZhdGVfZGF0 YTsKKwlPZmZzZXROdW1iZXIgKnBlcl9idWZmZXJfZGF0YSA9IHZvaWRfcGVyX2J1ZmZlcl9kYXRh OworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhICJsZWZ0b3ZlciIgb2Zmc2V0IG51bWJlciBmcm9t IHRoZSBwcmV2aW91cyBpbnZvY2F0aW9uLAorCSAqIGl0IG1lYW5zIHdlIGhhZCBzd2l0Y2hlZCB0 byBhIG5ldyBibG9jayBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsYXN0IGNhbGwuCisJICogV2UgcGxh Y2UgdGhhdCBsZWZ0b3ZlciBvZmZzZXQgbnVtYmVyIGludG8gdGhlIGJ1ZmZlciBmaXJzdC4KKwkg Ki8KKwlpZiAoY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X29mZnNldF9udW1iZXIgIT0gSW52 YWxpZE9mZnNldE51bWJlcikKKwl7CisJCUFzc2VydChjYWxsYmFja19wcml2YXRlX2RhdGEtPnBy ZXZfYmxvY2tfbnVtYmVyICE9IEludmFsaWRCbG9ja051bWJlcik7CisJCS8qCisJCSAqICdyZXN1 bHQnIGlzIHRoZSBibG9jayBudW1iZXIgdG8gcmV0dXJuLiBXZSBzZXQgaXQgdG8gdGhlIGJsb2Nr CisJCSAqIGZyb20gdGhlIHByZXZpb3VzIGxlZnRvdmVyIG9mZnNldC4KKwkJICovCisJCXJlc3Vs dCA9IGNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+cHJldl9ibG9ja19udW1iZXI7CisJCS8qIFBsYWNl IGxlZnRvdmVyIG9mZnNldCBudW1iZXIgaW4gdGhlIG91dHB1dCBidWZmZXIuICovCisJCXBlcl9i dWZmZXJfZGF0YVtpKytdID0gY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X29mZnNldF9udW1i ZXI7CisJCS8qCisJCSAqIENsZWFyIHRoZSBsZWZ0b3ZlciBvZmZzZXQgbnVtYmVyIHNvIGl0IHdv bid0IGJlIHJldXNlZCB1bmxlc3MKKwkJICogd2UgZW5jb3VudGVyIGFub3RoZXIgYmxvY2sgY2hh bmdlLgorCQkgKi8KKwkJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X29mZnNldF9udW1iZXIg PSBJbnZhbGlkT2Zmc2V0TnVtYmVyOworCX0KKworCS8qCisJICogUmVhZCBmcm9tIHRoZSB0dXBs ZXN0b3JlIHVudGlsIHdlIGVpdGhlciBydW4gb3V0IG9mIHR1cGxlcyBvciB3ZQorCSAqIGVuY291 bnRlciBhIGJsb2NrIGNoYW5nZS4gRm9yIGVhY2ggdHVwbGU6CisJICoKKwkgKiAgIDEpIERlY29k ZSBpdHMgYmxvY2svb2Zmc2V0IGZyb20gdGhlIERhdHVtLgorCSAqICAgMikgSWYgaXQncyB0aGUg Zmlyc3QgdGltZSBpbiB0aGlzIGNhbGwgKHByZXZfYmxvY2tfbnVtYmVyID09IEludmFsaWRCbG9j a051bWJlciksCisJICogICAgICBpbml0aWFsaXplIHByZXZfYmxvY2tfbnVtYmVyLgorCSAqICAg MykgSWYgdGhlIGJsb2NrIG51bWJlciBtYXRjaGVzIHRoZSBjdXJyZW50IGJsb2NrLCBjb2xsZWN0 IHRoZSBvZmZzZXQuCisJICogICA0KSBJZiB0aGUgYmxvY2sgbnVtYmVyIGRpZmZlcnMsIHNhdmUg dGhhdCBvZmZzZXQgYXMgbGVmdG92ZXIgYW5kIGJyZWFrCisJICogICAgICBzbyB0aGF0IHRoZSBu ZXh0IGNhbGwgY2FuIGhhbmRsZSB0aGUgbmV3IGJsb2NrLgorCSAqLworCXdoaWxlICh0dXBsZXN0 b3JlX2dldGRhdHVtKGNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+c3RvcmUsIHRydWUsICZzaG91bGRf ZnJlZSwgJmRhdHVtKSkKKwl7CisJCUJsb2NrTnVtYmVyIG5leHRfYmxvY2tfbnVtYmVyOworCQlJ dGVtUG9pbnRlckRhdGEgbmV4dF9kYXRhOworCisJCS8qIERlY29kZSB0aGUgZGF0dW0gaW50byBh biBJdGVtUG9pbnRlciAoYmxvY2sgKyBvZmZzZXQpLiAqLworCQlpdGVtcHRyX2RlY29kZSgmbmV4 dF9kYXRhLCBEYXR1bUdldEludDY0KGRhdHVtKSk7CisJCW5leHRfYmxvY2tfbnVtYmVyID0gSXRl bVBvaW50ZXJHZXRCbG9ja051bWJlcigmbmV4dF9kYXRhKTsKKworCQkvKgorCQkgKiBJZiB3ZSBo YXZlbid0IHNldCBhIGJsb2NrIG51bWJlciB5ZXQgdGhpcyByb3VuZCwgaW5pdGlhbGl6ZSBpdAor CQkgKiB1c2luZyB0aGUgZmlyc3QgdHVwbGUgd2UgcmVhZC4KKwkJICovCisJCWlmIChjYWxsYmFj a19wcml2YXRlX2RhdGEtPnByZXZfYmxvY2tfbnVtYmVyID09IEludmFsaWRCbG9ja051bWJlcikK KwkJCWNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+cHJldl9ibG9ja19udW1iZXIgPSBuZXh0X2Jsb2Nr X251bWJlcjsKKworCQkvKgorCQkgKiBBbHdheXMgc2V0IHRoZSByZXN1bHQgdG8gYmUgdGhlICJj dXJyZW50IiBibG9jayBudW1iZXIKKwkJICogd2UgYXJlIGZpbGxpbmcgb2Zmc2V0cyBmb3IuCisJ CSAqLworCQlyZXN1bHQgPSBjYWxsYmFja19wcml2YXRlX2RhdGEtPnByZXZfYmxvY2tfbnVtYmVy OworCisJCS8qCisJCSAqIElmIHRoaXMgdHVwbGUgaXMgZnJvbSB0aGUgc2FtZSBibG9jaywganVz dCBzdG9yZSBpdHMgb2Zmc2V0CisJCSAqIGluIG91ciBwZXJfYnVmZmVyX2RhdGEgYXJyYXkuCisJ CSAqLworCQlpZiAobmV4dF9ibG9ja19udW1iZXIgPT0gY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5w cmV2X2Jsb2NrX251bWJlcikKKwkJeworCQkJcGVyX2J1ZmZlcl9kYXRhW2krK10gPSBJdGVtUG9p bnRlckdldE9mZnNldE51bWJlcigmbmV4dF9kYXRhKTsKKworCQkJLyogRnJlZSB0aGUgZGF0dW0g aWYgbmVlZGVkLiAqLworCQkJaWYgKHNob3VsZF9mcmVlKQorCQkJCXBmcmVlKERhdHVtR2V0UG9p bnRlcihkYXR1bSkpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIElmIHRoZSBibG9j ayBqdXN0IGNoYW5nZWQsIHN0b3JlIHRoZSBvZmZzZXQgb2YgdGhlIG5ldyBibG9jaworCQkJICog YXMgbGVmdG92ZXIgZm9yIHRoZSBuZXh0IGludm9jYXRpb24gYW5kIGJyZWFrIG91dC4KKwkJCSAq LworCQkJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X2Jsb2NrX251bWJlciA9IG5leHRfYmxv Y2tfbnVtYmVyOworCQkJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X29mZnNldF9udW1iZXIg PSBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcigmbmV4dF9kYXRhKTsKKworCQkJLyogRnJlZSB0 aGUgZGF0dW0gaWYgbmVlZGVkLiAqLworCQkJaWYgKHNob3VsZF9mcmVlKQorCQkJCXBmcmVlKERh dHVtR2V0UG9pbnRlcihkYXR1bSkpOworCisJCQkvKiBCcmVhayB0byBsZXQgdGhlIG5leHQgY2Fs bCBoYW5kbGUgdGhlIG5ldyBibG9jay4gKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkg KiBUZXJtaW5hdGUgdGhlIGxpc3Qgb2Ygb2Zmc2V0cyBmb3IgdGhpcyBibG9jayB3aXRoIGFuIElu dmFsaWRPZmZzZXROdW1iZXIuCisJICovCisJcGVyX2J1ZmZlcl9kYXRhW2ldID0gSW52YWxpZE9m ZnNldE51bWJlcjsKKwlyZXR1cm4gcmVzdWx0OworfQorCiBzdGF0aWMgdm9pZAogaGVhcGFtX2lu ZGV4X3ZhbGlkYXRlX3NjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJICAgUmVsYXRp b24gaW5kZXhSZWxhdGlvbiwKIAkJCQkJCSAgIEluZGV4SW5mbyAqaW5kZXhJbmZvLAogCQkJCQkJ ICAgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkgICBWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRl KQorCQkJCQkJICAgVmFsaWRhdGVJbmRleFN0YXRlICpzdGF0ZSwKKwkJCQkJCSAgIFZhbGlkYXRl SW5kZXhTdGF0ZSAqYXV4U3RhdGUpCiB7Ci0JVGFibGVTY2FuRGVzYyBzY2FuOwotCUhlYXBTY2Fu RGVzYyBoc2NhbjsKLQlIZWFwVHVwbGUJaGVhcFR1cGxlOwogCURhdHVtCQl2YWx1ZXNbSU5ERVhf TUFYX0tFWVNdOwogCWJvb2wJCWlzbnVsbFtJTkRFWF9NQVhfS0VZU107Ci0JRXhwclN0YXRlICAq cHJlZGljYXRlOwotCVR1cGxlVGFibGVTbG90ICpzbG90OwotCUVTdGF0ZQkgICAqZXN0YXRlOwot CUV4cHJDb250ZXh0ICplY29udGV4dDsKLQlCbG9ja051bWJlciByb290X2Jsa25vID0gSW52YWxp ZEJsb2NrTnVtYmVyOwotCU9mZnNldE51bWJlciByb290X29mZnNldHNbTWF4SGVhcFR1cGxlc1Bl clBhZ2VdOwotCWJvb2wJCWluX2luZGV4W01heEhlYXBUdXBsZXNQZXJQYWdlXTsKLQlCbG9ja051 bWJlciBwcmV2aW91c19ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKLQotCS8qIHN0YXRlIHZh cmlhYmxlcyBmb3IgdGhlIG1lcmdlICovCi0JSXRlbVBvaW50ZXIgaW5kZXhjdXJzb3IgPSBOVUxM OwotCUl0ZW1Qb2ludGVyRGF0YSBkZWNvZGVkOwotCWJvb2wJCXR1cGxlc29ydF9lbXB0eSA9IGZh bHNlOworCisJVHVwbGVUYWJsZVNsb3QgICpzbG90OworCUVTdGF0ZQkJCSplc3RhdGU7CisJRXhw ckNvbnRleHQJCSplY29udGV4dDsKKwlCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kgPSBH ZXRBY2Nlc3NTdHJhdGVneShCQVNfQlVMS1JFQUQpOworCisJaW50NjQJCQludW1fdG9fY2hlY2s7 CisJVHVwbGVzdG9yZXN0YXRlICp0dXBsZXNfZm9yX2NoZWNrOworCVZhbGlkYXRlSW5kZXhTY2Fu U3RhdGUgY2FsbGJhY2tfcHJpdmF0ZV9kYXRhOworCisJQnVmZmVyIGJ1ZjsKKwlPZmZzZXROdW1i ZXIgKnR1cGxlczsKKwlSZWFkU3RyZWFtICpyZWFkX3N0cmVhbTsKKworCS8qIFVzZSBhIHBlcmNl bnRhZ2Ugb2YgbWFpbnRlbmFuY2Vfd29ya19tZW0gZm9yIHR1cGxlIHN0b3JlLiAqLworCWludAkJ c3RvcmVfd29ya19tZW1fcGFydCA9IG1haW50ZW5hbmNlX3dvcmtfbWVtICogZGVidWdfY2ljX3Zh bGlkYXRlX3N0b3JlX21lbV9wY3QgLyAxMDA7CisKKwkvKgorCSAqIEVuY29kZSBUSURzIGFzIGlu dDggdmFsdWVzIGZvciB0aGUgc29ydCwgcmF0aGVyIHRoYW4gZGlyZWN0bHkgc29ydGluZworCSAq IGl0ZW0gcG9pbnRlcnMuICBUaGlzIGNhbiBiZSBzaWduaWZpY2FudGx5IGZhc3RlciwgcHJpbWFy aWx5IGJlY2F1c2UgVElECisJICogaXMgYSBwYXNzLWJ5LXJlZmVyZW5jZSB0eXBlIG9uIGFsbCBw bGF0Zm9ybXMsIHdoZXJlYXMgaW50OCBpcworCSAqIHBhc3MtYnktdmFsdWUgb24gbW9zdCBwbGF0 Zm9ybXMuCisJICovCisJdHVwbGVzX2Zvcl9jaGVjayA9IHR1cGxlc3RvcmVfYmVnaW5fZGF0dW0o SU5UOE9JRCwgZmFsc2UsIGZhbHNlLCBzdG9yZV93b3JrX21lbV9wYXJ0KTsKIAogCS8qCiAJICog c2FuaXR5IGNoZWNrcwogCSAqLwogCUFzc2VydChPaWRJc1ZhbGlkKGluZGV4UmVsYXRpb24tPnJk X3JlbC0+cmVsYW0pKTsKIAotCS8qCi0JICogTmVlZCBhbiBFU3RhdGUgZm9yIGV2YWx1YXRpb24g b2YgaW5kZXggZXhwcmVzc2lvbnMgYW5kIHBhcnRpYWwtaW5kZXgKLQkgKiBwcmVkaWNhdGVzLiAg QWxzbyBhIHNsb3QgdG8gaG9sZCB0aGUgY3VycmVudCB0dXBsZS4KLQkgKi8KKwludW1fdG9fY2hl Y2sgPSBoZWFwYW1faW5kZXhfdmFsaWRhdGVfdHVwbGVzb3J0X2RpZmZlcmVuY2Uoc3RhdGUtPnR1 cGxlc29ydCwKKwkJCQkJCQkJCQkJCQkJIGF1eFN0YXRlLT50dXBsZXNvcnQsCisJCQkJCQkJCQkJ CQkJCSB0dXBsZXNfZm9yX2NoZWNrKTsKKworCS8qIEl0IGlzIG91ciByZXNwb25zaWJpbGl0eSB0 byBjbG9zZSB0dXBsZSBzb3J0IGFzIGZhc3QgYXMgd2UgY2FuICovCisJdHVwbGVzb3J0X2VuZChz dGF0ZS0+dHVwbGVzb3J0KTsKKwl0dXBsZXNvcnRfZW5kKGF1eFN0YXRlLT50dXBsZXNvcnQpOwor CisJc3RhdGUtPnR1cGxlc29ydCA9IGF1eFN0YXRlLT50dXBsZXNvcnQgPSBOVUxMOworCiAJZXN0 YXRlID0gQ3JlYXRlRXhlY3V0b3JTdGF0ZSgpOwogCWVjb250ZXh0ID0gR2V0UGVyVHVwbGVFeHBy Q29udGV4dChlc3RhdGUpOwogCXNsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QoUmVsYXRp b25HZXREZXNjcihoZWFwUmVsYXRpb24pLAotCQkJCQkJCQkJJlRUU09wc0hlYXBUdXBsZSk7CisJ CQkJCQkJCQkmVFRTT3BzQnVmZmVySGVhcFR1cGxlKTsKIAogCS8qIEFycmFuZ2UgZm9yIGVjb250 ZXh0J3Mgc2NhbiB0dXBsZSB0byBiZSB0aGUgdHVwbGUgdW5kZXIgdGVzdCAqLwogCWVjb250ZXh0 LT5lY3h0X3NjYW50dXBsZSA9IHNsb3Q7CiAKLQkvKiBTZXQgdXAgZXhlY3V0aW9uIHN0YXRlIGZv ciBwcmVkaWNhdGUsIGlmIGFueS4gKi8KLQlwcmVkaWNhdGUgPSBFeGVjUHJlcGFyZVF1YWwoaW5k ZXhJbmZvLT5paV9QcmVkaWNhdGUsIGVzdGF0ZSk7CisJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLnBy ZXZfYmxvY2tfbnVtYmVyID0gSW52YWxpZEJsb2NrTnVtYmVyOworCWNhbGxiYWNrX3ByaXZhdGVf ZGF0YS5zdG9yZSA9IHR1cGxlc19mb3JfY2hlY2s7CisJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLnBy ZXZfb2Zmc2V0X251bWJlciA9IEludmFsaWRPZmZzZXROdW1iZXI7CiAKLQkvKgotCSAqIFByZXBh cmUgZm9yIHNjYW4gb2YgdGhlIGJhc2UgcmVsYXRpb24uICBXZSBuZWVkIGp1c3QgdGhvc2UgdHVw bGVzCi0JICogc2F0aXNmeWluZyB0aGUgcGFzc2VkLWluIHJlZmVyZW5jZSBzbmFwc2hvdC4gIFdl IG11c3QgZGlzYWJsZSBzeW5jc2NhbgotCSAqIGhlcmUsIGJlY2F1c2UgaXQncyBjcml0aWNhbCB0 aGF0IHdlIHJlYWQgZnJvbSBibG9jayB6ZXJvIGZvcndhcmQgdG8KLQkgKiBtYXRjaCB0aGUgc29y dGVkIFRJRHMuCi0JICovCi0Jc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9zdHJhdChoZWFwUmVsYXRp b24sCS8qIHJlbGF0aW9uICovCi0JCQkJCQkJCSBzbmFwc2hvdCwJLyogc25hcHNob3QgKi8KLQkJ CQkJCQkJIDAsIC8qIG51bWJlciBvZiBrZXlzICovCi0JCQkJCQkJCSBOVUxMLAkvKiBzY2FuIGtl eSAqLwotCQkJCQkJCQkgdHJ1ZSwJLyogYnVmZmVyIGFjY2VzcyBzdHJhdGVneSBPSyAqLwotCQkJ CQkJCQkgZmFsc2UpOwkvKiBzeW5jc2NhbiBub3QgT0sgKi8KLQloc2NhbiA9IChIZWFwU2NhbkRl c2MpIHNjYW47CisJcmVhZF9zdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFE X1NUUkVBTV9NQUlOVEVOQU5DRSB8IFJFQURfU1RSRUFNX1VTRV9CQVRDSElORywKKwkJCQkJCQkJ CQkJCQkJIGJzdHJhdGVneSwKKwkJCQkJCQkJCQkJCQkJIGhlYXBSZWxhdGlvbiwgTUFJTl9GT1JL TlVNLAorCQkJCQkJCQkJCQkJCQkgaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW5fcmVhZF9zdHJl YW1fbmV4dCwKKwkJCQkJCQkJCQkJCQkJICZjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJ CQkJCQkJCSAoTWF4SGVhcFR1cGxlc1BlclBhZ2UgKyAxKSAqIHNpemVvZihPZmZzZXROdW1iZXIp KTsKIAotCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfU0NBTl9CTE9DS1Nf VE9UQUwsCi0JCQkJCQkJCSBoc2Nhbi0+cnNfbmJsb2Nrcyk7CisJcGdzdGF0X3Byb2dyZXNzX3Vw ZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfVFVQTEVTX1RPVEFMLCBudW1fdG9fY2hlY2sp OworCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1RVUExF U19ET05FLCAwKTsKIAotCS8qCi0JICogU2NhbiBhbGwgdHVwbGVzIG1hdGNoaW5nIHRoZSBzbmFw c2hvdC4KLQkgKi8KLQl3aGlsZSAoKGhlYXBUdXBsZSA9IGhlYXBfZ2V0bmV4dChzY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbikpICE9IE5VTEwpCisJd2hpbGUgKChidWYgPSByZWFkX3N0cmVhbV9u ZXh0X2J1ZmZlcihyZWFkX3N0cmVhbSwgKHZvaWQgKiopICZ0dXBsZXMpKSAhPSBJbnZhbGlkQnVm ZmVyKQogCXsKLQkJSXRlbVBvaW50ZXIgaGVhcGN1cnNvciA9ICZoZWFwVHVwbGUtPnRfc2VsZjsK LQkJSXRlbVBvaW50ZXJEYXRhIHJvb3RUdXBsZTsKLQkJT2Zmc2V0TnVtYmVyIHJvb3Rfb2ZmbnVt OworCQlIZWFwVHVwbGVEYXRhCWhlYXBfdHVwbGVfZGF0YVtNYXhIZWFwVHVwbGVzUGVyUGFnZV07 CisJCWludCBpOworCQlPZmZzZXROdW1iZXIgb2ZmOworCQlCbG9ja051bWJlciBibG9ja19udW1i ZXI7CiAKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQlzdGF0ZS0+aHR1cHMgKz0gMTsK KwkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwkJYmxvY2tfbnVtYmVyID0g QnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKIAotCQlpZiAoKHByZXZpb3VzX2Jsa25vID09IElu dmFsaWRCbG9ja051bWJlcikgfHwKLQkJCShoc2Nhbi0+cnNfY2Jsb2NrICE9IHByZXZpb3VzX2Js a25vKSkKKwkJaSA9IDA7CisJCXdoaWxlICgob2ZmID0gdHVwbGVzW2ldKSAhPSBJbnZhbGlkT2Zm c2V0TnVtYmVyKQogCQl7Ci0JCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNT X1NDQU5fQkxPQ0tTX0RPTkUsCi0JCQkJCQkJCQkJIGhzY2FuLT5yc19jYmxvY2spOwotCQkJcHJl dmlvdXNfYmxrbm8gPSBoc2Nhbi0+cnNfY2Jsb2NrOworCQkJSXRlbVBvaW50ZXJEYXRhIHRpZDsK KwkJCWJvb2wJCWFsbF9kZWFkLCBmb3VuZDsKKwkJCUl0ZW1Qb2ludGVyU2V0KCZ0aWQsIGJsb2Nr X251bWJlciwgb2ZmKTsKKworCQkJZm91bmQgPSBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKCZ0aWQs IGhlYXBSZWxhdGlvbiwgYnVmLCBzbmFwc2hvdCwKKwkJCQkJCQkJCQkgICAmaGVhcF90dXBsZV9k YXRhW2ldLCAmYWxsX2RlYWQsIHRydWUpOworCQkJaWYgKCFmb3VuZCkKKwkJCQlJdGVtUG9pbnRl clNldEludmFsaWQoJmhlYXBfdHVwbGVfZGF0YVtpXS50X3NlbGYpOworCQkJaSsrOworCQkJc3Rh dGUtPmh0dXBzICs9IDE7CiAJCX0KKwkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1VOTE9D Syk7CiAKIAkJLyoKLQkJICogQXMgY29tbWVudGVkIGluIHRhYmxlX2luZGV4X2J1aWxkX3NjYW4s IHdlIHNob3VsZCBpbmRleCBoZWFwLW9ubHkKLQkJICogdHVwbGVzIHVuZGVyIHRoZSBUSURzIG9m IHRoZWlyIHJvb3QgdHVwbGVzOyBzbyB3aGVuIHdlIGFkdmFuY2Ugb250bwotCQkgKiBhIG5ldyBo ZWFwIHBhZ2UsIGJ1aWxkIGEgbWFwIG9mIHJvb3QgaXRlbSBvZmZzZXRzIG9uIHRoZSBwYWdlLgot CQkgKgotCQkgKiBUaGlzIGNvbXBsaWNhdGVzIG1lcmdpbmcgYWdhaW5zdCB0aGUgdHVwbGVzb3J0 IG91dHB1dDogd2Ugd2lsbAotCQkgKiB2aXNpdCB0aGUgbGl2ZSB0dXBsZXMgaW4gb3JkZXIgYnkg dGhlaXIgb2Zmc2V0cywgYnV0IHRoZSByb290Ci0JCSAqIG9mZnNldHMgdGhhdCB3ZSBuZWVkIHRv IGNvbXBhcmUgYWdhaW5zdCB0aGUgaW5kZXggY29udGVudHMgbWlnaHQgYmUKLQkJICogb3JkZXJl ZCBkaWZmZXJlbnRseS4gIFNvIHdlIG1pZ2h0IGhhdmUgdG8gImxvb2sgYmFjayIgd2l0aGluIHRo ZQotCQkgKiB0dXBsZXNvcnQgb3V0cHV0LCBidXQgb25seSB3aXRoaW4gdGhlIGN1cnJlbnQgcGFn ZS4gIFdlIGhhbmRsZSB0aGF0Ci0JCSAqIGJ5IGtlZXBpbmcgYSBib29sIGFycmF5IGluX2luZGV4 W10gc2hvd2luZyBhbGwgdGhlCi0JCSAqIGFscmVhZHktcGFzc2VkLW92ZXIgdHVwbGVzb3J0IG91 dHB1dCBUSURzIG9mIHRoZSBjdXJyZW50IHBhZ2UuIFdlCi0JCSAqIGNsZWFyIHRoYXQgYXJyYXkg aGVyZSwgd2hlbiBhZHZhbmNpbmcgb250byBhIG5ldyBoZWFwIHBhZ2UuCisJCSAqIEl0IGlzIHNh ZmUgdG8gYWNjZXNzIHR1cGxlIGRhdGEgYWZ0ZXIgcmVsZWFzaW5nIHRoZSBidWZmZXIgbG9jawor CQkgKiBiZWNhdXNlIHRoZSBidWZmZXIgcGluIGlzIHN0aWxsIGhlbGQsIGFuZCB0aGUgb25seSBv cGVyYXRpb24gdGhhdAorCQkgKiBjb3VsZCBwaHlzaWNhbGx5IG1vdmUgdHVwbGUgZGF0YSBvbiB0 aGUgcGFnZSBpcworCQkgKiBQYWdlUmVwYWlyRnJhZ21lbnRhdGlvbiB2aWEgaGVhcF9wYWdlX3By dW5lLiAgVkFDVVVNIGNvbmZsaWN0cyB3aXRoCisJCSAqIENJQyAoYm90aCB0YWtlIFNoYXJlVXBk YXRlRXhjbHVzaXZlTG9jayksIGFuZCBvcHBvcnR1bmlzdGljIHBydW5pbmcKKwkJICogZnJvbSBj b25jdXJyZW50IERNTCBjYW5ub3QgYWZmZWN0IHJvb3QgdHVwbGVzIHdlIGFyZSByZWZlcmVuY2lu Zy4KIAkJICovCi0JCWlmIChoc2Nhbi0+cnNfY2Jsb2NrICE9IHJvb3RfYmxrbm8pCi0JCXsKLQkJ CVBhZ2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGhzY2FuLT5yc19jYnVmKTsKLQotCQkJTG9ja0J1 ZmZlcihoc2Nhbi0+cnNfY2J1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOwotCQkJaGVhcF9nZXRfcm9v dF90dXBsZXMocGFnZSwgcm9vdF9vZmZzZXRzKTsKLQkJCUxvY2tCdWZmZXIoaHNjYW4tPnJzX2Ni dWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7Ci0KLQkJCW1lbXNldChpbl9pbmRleCwgMCwgc2l6ZW9m KGluX2luZGV4KSk7Ci0KLQkJCXJvb3RfYmxrbm8gPSBoc2Nhbi0+cnNfY2Jsb2NrOwotCQl9Ci0K LQkJLyogQ29udmVydCBhY3R1YWwgdHVwbGUgVElEIHRvIHJvb3QgVElEICovCi0JCXJvb3RUdXBs ZSA9ICpoZWFwY3Vyc29yOwotCQlyb290X29mZm51bSA9IEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVt YmVyKGhlYXBjdXJzb3IpOwotCi0JCWlmIChIZWFwVHVwbGVJc0hlYXBPbmx5KGhlYXBUdXBsZSkp Ci0JCXsKLQkJCXJvb3Rfb2ZmbnVtID0gcm9vdF9vZmZzZXRzW3Jvb3Rfb2ZmbnVtIC0gMV07Ci0J CQlpZiAoIU9mZnNldE51bWJlcklzVmFsaWQocm9vdF9vZmZudW0pKQotCQkJCWVyZXBvcnQoRVJS T1IsCi0JCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwKLQkJCQkJCSBlcnJt c2dfaW50ZXJuYWwoImZhaWxlZCB0byBmaW5kIHBhcmVudCB0dXBsZSBmb3IgaGVhcC1vbmx5IHR1 cGxlIGF0ICgldSwldSkgaW4gdGFibGUgXCIlc1wiIiwKLQkJCQkJCQkJCQkgSXRlbVBvaW50ZXJH ZXRCbG9ja051bWJlcihoZWFwY3Vyc29yKSwKLQkJCQkJCQkJCQkgSXRlbVBvaW50ZXJHZXRPZmZz ZXROdW1iZXIoaGVhcGN1cnNvciksCi0JCQkJCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KGhlYXBSZWxhdGlvbikpKSk7Ci0JCQlJdGVtUG9pbnRlclNldE9mZnNldE51bWJlcigmcm9vdFR1 cGxlLCByb290X29mZm51bSk7Ci0JCX0KLQogCQkvKgotCQkgKiAibWVyZ2UiIGJ5IHNraXBwaW5n IHRocm91Z2ggdGhlIGluZGV4IHR1cGxlcyB1bnRpbCB3ZSBmaW5kIG9yIHBhc3MKLQkJICogdGhl IGN1cnJlbnQgcm9vdCB0dXBsZS4KKwkJICogTm8gcHJlZGljYXRlIGV2YWx1YXRpb24gaXMgbmVl ZGVkIGhlcmU6IHRoZSBhdXhpbGlhcnkgU1RJUiBpbmRleAorCQkgKiBvbmx5IGNvbnRhaW5zIFRJ RHMgZm9yIHR1cGxlcyB0aGF0IGFscmVhZHkgc2F0aXNmaWVkIHRoZSBwYXJ0aWFsCisJCSAqIGlu ZGV4IHByZWRpY2F0ZSBhdCBETUwgdGltZSAoY2hlY2tlZCBpbiBFeGVjSW5zZXJ0SW5kZXhUdXBs ZXMpLgogCQkgKi8KLQkJd2hpbGUgKCF0dXBsZXNvcnRfZW1wdHkgJiYKLQkJCSAgICghaW5kZXhj dXJzb3IgfHwKLQkJCQlJdGVtUG9pbnRlckNvbXBhcmUoaW5kZXhjdXJzb3IsICZyb290VHVwbGUp IDwgMCkpCisJCWkgPSAwOworCQl3aGlsZSAoKG9mZiA9IHR1cGxlc1tpXSkgIT0gSW52YWxpZE9m ZnNldE51bWJlcikKIAkJewotCQkJRGF0dW0JCXRzX3ZhbDsKLQkJCWJvb2wJCXRzX2lzbnVsbDsK LQotCQkJaWYgKGluZGV4Y3Vyc29yKQorCQkJaWYgKEl0ZW1Qb2ludGVySXNWYWxpZCgmaGVhcF90 dXBsZV9kYXRhW2ldLnRfc2VsZikpCiAJCQl7CisJCQkJSXRlbVBvaW50ZXJEYXRhIHJvb3RfdGlk OworCQkJCUl0ZW1Qb2ludGVyU2V0KCZyb290X3RpZCwgYmxvY2tfbnVtYmVyLCBvZmYpOworCisJ CQkJLyogUmVzZXQgdGhlIHBlci10dXBsZSBtZW1vcnkgY29udGV4dCBmb3IgdGhlIG5leHQgZmV0 Y2guICovCisJCQkJTWVtb3J5Q29udGV4dFJlc2V0KGVjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9t ZW1vcnkpOworCQkJCUV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSgmaGVhcF90dXBsZV9kYXRhW2ld LCBzbG90LCBidWYpOworCisJCQkJLyogQ29tcHV0ZSB0aGUga2V5IHZhbHVlcyBhbmQgbnVsbCBm bGFncyBmb3IgdGhpcyB0dXBsZS4gKi8KKwkJCQlGb3JtSW5kZXhEYXR1bShpbmRleEluZm8sCisJ CQkJCQkJICAgc2xvdCwKKwkJCQkJCQkgICBlc3RhdGUsCisJCQkJCQkJICAgdmFsdWVzLAorCQkJ CQkJCSAgIGlzbnVsbCk7CisKIAkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIGluZGV4IGl0ZW1zIHNl ZW4gZWFybGllciBvbiB0aGUgY3VycmVudCBoZWFwIHBhZ2UKKwkJCQkgKiBJbnNlcnQgdGhlIHR1 cGxlIGludG8gdGhlIHRhcmdldCBpbmRleC4KIAkJCQkgKi8KLQkJCQlpZiAoSXRlbVBvaW50ZXJH ZXRCbG9ja051bWJlcihpbmRleGN1cnNvcikgPT0gcm9vdF9ibGtubykKLQkJCQkJaW5faW5kZXhb SXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIoaW5kZXhjdXJzb3IpIC0gMV0gPSB0cnVlOworCQkJ CWluZGV4X2luc2VydChpbmRleFJlbGF0aW9uLAorCQkJCQkJCSB2YWx1ZXMsCisJCQkJCQkJIGlz bnVsbCwKKwkJCQkJCQkgJnJvb3RfdGlkLCAvKiBpbnNlcnQgcm9vdCB0dXBsZSAqLworCQkJCQkJ CSBoZWFwUmVsYXRpb24sCisJCQkJCQkJIGluZGV4SW5mby0+aWlfVW5pcXVlID8KKwkJCQkJCQkg VU5JUVVFX0NIRUNLX1lFUyA6IFVOSVFVRV9DSEVDS19OTywKKwkJCQkJCQkgZmFsc2UsCisJCQkJ CQkJIGluZGV4SW5mbyk7CisKKwkJCQlzdGF0ZS0+dHVwc19pbnNlcnRlZCArPSAxOwogCQkJfQog Ci0JCQl0dXBsZXNvcnRfZW1wdHkgPSAhdHVwbGVzb3J0X2dldGRhdHVtKHN0YXRlLT50dXBsZXNv cnQsIHRydWUsCi0JCQkJCQkJCQkJCQkgIGZhbHNlLCAmdHNfdmFsLCAmdHNfaXNudWxsLAotCQkJ CQkJCQkJCQkJICBOVUxMKTsKLQkJCUFzc2VydCh0dXBsZXNvcnRfZW1wdHkgfHwgIXRzX2lzbnVs bCk7Ci0JCQlpZiAoIXR1cGxlc29ydF9lbXB0eSkKLQkJCXsKLQkJCQlpdGVtcHRyX2RlY29kZSgm ZGVjb2RlZCwgRGF0dW1HZXRJbnQ2NCh0c192YWwpKTsKLQkJCQlpbmRleGN1cnNvciA9ICZkZWNv ZGVkOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qIEJlIHRpZHkgKi8KLQkJCQlpbmRleGN1 cnNvciA9IE5VTEw7Ci0JCQl9CisJCQlwZ3N0YXRfcHJvZ3Jlc3NfaW5jcl9wYXJhbShQUk9HUkVT U19DUkVBVEVJRFhfVFVQTEVTX0RPTkUsIDEpOworCQkJaSsrOwogCQl9CiAKLQkJLyoKLQkJICog SWYgdGhlIHR1cGxlc29ydCBoYXMgb3ZlcnNob3QgKmFuZCogd2UgZGlkbid0IHNlZSBhIG1hdGNo IGVhcmxpZXIsCi0JCSAqIHRoZW4gdGhpcyB0dXBsZSBpcyBtaXNzaW5nIGZyb20gdGhlIGluZGV4 LCBzbyBpbnNlcnQgaXQuCi0JCSAqLwotCQlpZiAoKHR1cGxlc29ydF9lbXB0eSB8fAotCQkJIEl0 ZW1Qb2ludGVyQ29tcGFyZShpbmRleGN1cnNvciwgJnJvb3RUdXBsZSkgPiAwKSAmJgotCQkJIWlu X2luZGV4W3Jvb3Rfb2ZmbnVtIC0gMV0pCi0JCXsKLQkJCU1lbW9yeUNvbnRleHRSZXNldChlY29u dGV4dC0+ZWN4dF9wZXJfdHVwbGVfbWVtb3J5KTsKLQotCQkJLyogU2V0IHVwIGZvciBwcmVkaWNh dGUgb3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uICovCi0JCQlFeGVjU3RvcmVIZWFwVHVwbGUoaGVh cFR1cGxlLCBzbG90LCBmYWxzZSk7Ci0KLQkJCS8qCi0JCQkgKiBJbiBhIHBhcnRpYWwgaW5kZXgs IGRpc2NhcmQgdHVwbGVzIHRoYXQgZG9uJ3Qgc2F0aXNmeSB0aGUKLQkJCSAqIHByZWRpY2F0ZS4K LQkJCSAqLwotCQkJaWYgKHByZWRpY2F0ZSAhPSBOVUxMKQotCQkJewotCQkJCWlmICghRXhlY1F1 YWwocHJlZGljYXRlLCBlY29udGV4dCkpCi0JCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQkvKgot CQkJICogRm9yIHRoZSBjdXJyZW50IGhlYXAgdHVwbGUsIGV4dHJhY3QgYWxsIHRoZSBhdHRyaWJ1 dGVzIHdlIHVzZQotCQkJICogaW4gdGhpcyBpbmRleCwgYW5kIG5vdGUgd2hpY2ggYXJlIG51bGwu ICBUaGlzIGFsc28gcGVyZm9ybXMKLQkJCSAqIGV2YWx1YXRpb24gb2YgYW55IGV4cHJlc3Npb25z IG5lZWRlZC4KLQkJCSAqLwotCQkJRm9ybUluZGV4RGF0dW0oaW5kZXhJbmZvLAotCQkJCQkJICAg c2xvdCwKLQkJCQkJCSAgIGVzdGF0ZSwKLQkJCQkJCSAgIHZhbHVlcywKLQkJCQkJCSAgIGlzbnVs bCk7Ci0KLQkJCS8qCi0JCQkgKiBZb3UnZCB0aGluayB3ZSBzaG91bGQgZ28gYWhlYWQgYW5kIGJ1 aWxkIHRoZSBpbmRleCB0dXBsZSBoZXJlLAotCQkJICogYnV0IHNvbWUgaW5kZXggQU1zIHdhbnQg dG8gZG8gZnVydGhlciBwcm9jZXNzaW5nIG9uIHRoZSBkYXRhCi0JCQkgKiBmaXJzdC4gU28gcGFz cyB0aGUgdmFsdWVzW10gYW5kIGlzbnVsbFtdIGFycmF5cywgaW5zdGVhZC4KLQkJCSAqLwotCi0J CQkvKgotCQkJICogSWYgdGhlIHR1cGxlIGlzIGFscmVhZHkgY29tbWl0dGVkIGRlYWQsIHlvdSBt aWdodCB0aGluayB3ZQotCQkJICogY291bGQgc3VwcHJlc3MgdW5pcXVlbmVzcyBjaGVja2luZywg YnV0IHRoaXMgaXMgbm8gbG9uZ2VyIHRydWUKLQkJCSAqIGluIHRoZSBwcmVzZW5jZSBvZiBIT1Qs IGJlY2F1c2UgdGhlIGluc2VydCBpcyBhY3R1YWxseSBhIHByb3h5Ci0JCQkgKiBmb3IgYSB1bmlx dWVuZXNzIGNoZWNrIG9uIHRoZSB3aG9sZSBIT1QtY2hhaW4uICBUaGF0IGlzLCB0aGUKLQkJCSAq IHR1cGxlIHdlIGhhdmUgaGVyZSBjb3VsZCBiZSBkZWFkIGJlY2F1c2UgaXQgd2FzIGFscmVhZHkK LQkJCSAqIEhPVC11cGRhdGVkLCBhbmQgaWYgc28gdGhlIHVwZGF0aW5nIHRyYW5zYWN0aW9uIHdp bGwgbm90IGhhdmUKLQkJCSAqIHRob3VnaHQgaXQgc2hvdWxkIGluc2VydCBpbmRleCBlbnRyaWVz LiAgVGhlIGluZGV4IEFNIHdpbGwKLQkJCSAqIGNoZWNrIHRoZSB3aG9sZSBIT1QtY2hhaW4gYW5k IGNvcnJlY3RseSBkZXRlY3QgYSBjb25mbGljdCBpZgotCQkJICogdGhlcmUgaXMgb25lLgotCQkJ ICovCi0KLQkJCWluZGV4X2luc2VydChpbmRleFJlbGF0aW9uLAotCQkJCQkJIHZhbHVlcywKLQkJ CQkJCSBpc251bGwsCi0JCQkJCQkgJnJvb3RUdXBsZSwKLQkJCQkJCSBoZWFwUmVsYXRpb24sCi0J CQkJCQkgaW5kZXhJbmZvLT5paV9VbmlxdWUgPwotCQkJCQkJIFVOSVFVRV9DSEVDS19ZRVMgOiBV TklRVUVfQ0hFQ0tfTk8sCi0JCQkJCQkgZmFsc2UsCi0JCQkJCQkgaW5kZXhJbmZvKTsKLQotCQkJ c3RhdGUtPnR1cHNfaW5zZXJ0ZWQgKz0gMTsKLQkJfQorCQlSZWxlYXNlQnVmZmVyKGJ1Zik7CiAJ fQogCi0JdGFibGVfZW5kc2NhbihzY2FuKTsKLQogCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNs b3Qoc2xvdCk7CiAKIAlGcmVlRXhlY3V0b3JTdGF0ZShlc3RhdGUpOwogCisJcmVhZF9zdHJlYW1f ZW5kKHJlYWRfc3RyZWFtKTsKKwl0dXBsZXN0b3JlX2VuZCh0dXBsZXNfZm9yX2NoZWNrKTsKKwor CUZyZWVBY2Nlc3NTdHJhdGVneShic3RyYXRlZ3kpOworCiAJLyogVGhlc2UgbWF5IGhhdmUgYmVl biBwb2ludGluZyB0byB0aGUgbm93LWdvbmUgZXN0YXRlICovCiAJaW5kZXhJbmZvLT5paV9FeHBy ZXNzaW9uc1N0YXRlID0gTklMOwogCWluZGV4SW5mby0+aWlfUHJlZGljYXRlU3RhdGUgPSBOVUxM OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9pbmRleC5jCmluZGV4IDBjZWVkYTFmZGQ5Li5mNmQwYWMzZjc4NCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cv aW5kZXguYwpAQCAtNzE1LDExICs3MTUsMTYgQEAgVXBkYXRlSW5kZXhSZWxhdGlvbihPaWQgaW5k ZXhvaWQsCiAgKgkJCWFscmVhZHkgZXhpc3RzLgogICoJCUlOREVYX0NSRUFURV9QQVJUSVRJT05F RDoKICAqCQkJY3JlYXRlIGEgcGFydGl0aW9uZWQgaW5kZXggKHRhYmxlIG11c3QgYmUgcGFydGl0 aW9uZWQpCisgKgkJSU5ERVhfQ1JFQVRFX0FVWElMSUFSWToKKyAqCQkJbWFyayBpbmRleCBhcyBh dXhpbGlhcnkgaW5kZXgKICAqIGNvbnN0cl9mbGFnczogZmxhZ3MgcGFzc2VkIHRvIGluZGV4X2Nv bnN0cmFpbnRfY3JlYXRlCiAgKgkJKG9ubHkgaWYgSU5ERVhfQ1JFQVRFX0FERF9DT05TVFJBSU5U IGlzIHNldCkKICAqIGFsbG93X3N5c3RlbV90YWJsZV9tb2RzOiBhbGxvdyB0YWJsZSB0byBiZSBh IHN5c3RlbSBjYXRhbG9nCiAgKiBpc19pbnRlcm5hbDogaWYgdHJ1ZSwgcG9zdCBjcmVhdGlvbiBo b29rIGZvciBuZXcgaW5kZXgKICAqIGNvbnN0cmFpbnRJZDogaWYgbm90IE5VTEwsIHJlY2VpdmVz IE9JRCBvZiBjcmVhdGVkIGNvbnN0cmFpbnQKKyAqIHJlbHBlcnNpc3RlbmNlOiBwZXJzaXN0ZW5j ZSBsZXZlbCB0byB1c2UgZm9yIGluZGV4LiBJbiBtb3N0IG9mIHRoZQorICoJCWNhc2VzIGl0IHNo b3VsZCBiZSBlcXVhbCB0byB0aGUgcGVyc2lzdGVuY2UgbGV2ZWwgb2YgdGhlIHRhYmxlLAorICoJ CWF1eGlsaWFyeSBpbmRleGVzIGFyZSBvbmx5IGV4Y2VwdGlvbiBoZXJlLgogICoKICAqIFJldHVy bnMgdGhlIE9JRCBvZiB0aGUgY3JlYXRlZCBpbmRleC4KICAqLwpAQCAtNzYwLDYgKzc2NSw3IEBA IGluZGV4X2NyZWF0ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJYm9vbAkJaW52YWxpZCA9IChm bGFncyAmIElOREVYX0NSRUFURV9JTlZBTElEKSAhPSAwOwogCWJvb2wJCWNvbmN1cnJlbnQgPSAo ZmxhZ3MgJiBJTkRFWF9DUkVBVEVfQ09OQ1VSUkVOVCkgIT0gMDsKIAlib29sCQlwYXJ0aXRpb25l ZCA9IChmbGFncyAmIElOREVYX0NSRUFURV9QQVJUSVRJT05FRCkgIT0gMDsKKwlib29sCQlhdXhp bGlhcnkgPSAoZmxhZ3MgJiBJTkRFWF9DUkVBVEVfQVVYSUxJQVJZKSAhPSAwOwogCWNoYXIJCXJl bGtpbmQ7CiAJVHJhbnNhY3Rpb25JZCByZWxmcm96ZW54aWQ7CiAJTXVsdGlYYWN0SWQgcmVsbWlu bXhpZDsKQEAgLTc4NSw3ICs3OTEsMTAgQEAgaW5kZXhfY3JlYXRlKFJlbGF0aW9uIGhlYXBSZWxh dGlvbiwKIAluYW1lc3BhY2VJZCA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKGhlYXBSZWxhdGlvbik7 CiAJc2hhcmVkX3JlbGF0aW9uID0gaGVhcFJlbGF0aW9uLT5yZF9yZWwtPnJlbGlzc2hhcmVkOwog CW1hcHBlZF9yZWxhdGlvbiA9IFJlbGF0aW9uSXNNYXBwZWQoaGVhcFJlbGF0aW9uKTsKLQlyZWxw ZXJzaXN0ZW5jZSA9IGhlYXBSZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZTsKKwlpZiAo YXV4aWxpYXJ5KQorCQlyZWxwZXJzaXN0ZW5jZSA9IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEOyAv KiBhdXggaW5kZXhlcyBhcmUgYWx3YXlzIHVubG9nZ2VkICovCisJZWxzZQorCQlyZWxwZXJzaXN0 ZW5jZSA9IGhlYXBSZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZTsKIAogCS8qCiAJICog Y2hlY2sgcGFyYW1ldGVycwpAQCAtNzkzLDYgKzgwMiwxMSBAQCBpbmRleF9jcmVhdGUoUmVsYXRp b24gaGVhcFJlbGF0aW9uLAogCWlmIChpbmRleEluZm8tPmlpX051bUluZGV4QXR0cnMgPCAxKQog CQllbG9nKEVSUk9SLCAibXVzdCBpbmRleCBhdCBsZWFzdCBvbmUgY29sdW1uIik7CiAKKwlpZiAo aW5kZXhJbmZvLT5paV9BbSA9PSBTVElSX0FNX09JRCAmJiAhYXV4aWxpYXJ5KQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJ CQkgZXJybXNnKCJ1c2VyLWRlZmluZWQgaW5kZXhlcyB3aXRoIFNUSVIgYWNjZXNzIG1ldGhvZCBh cmUgbm90IHN1cHBvcnRlZCIpKSk7CisKIAlpZiAoIWFsbG93X3N5c3RlbV90YWJsZV9tb2RzICYm CiAJCUlzU3lzdGVtUmVsYXRpb24oaGVhcFJlbGF0aW9uKSAmJgogCQlJc05vcm1hbFByb2Nlc3Np bmdNb2RlKCkpCkBAIC0xMzk4LDIwICsxNDEyLDI0IEBAIGluZGV4X2NvbmN1cnJlbnRseV9jcmVh dGVfY29weShSZWxhdGlvbiBoZWFwUmVsYXRpb24sIE9pZCBvbGRJbmRleElkLAogCQkJCQkJCWZh bHNlLAkvKiBub3QgcmVhZHkgZm9yIGluc2VydHMgKi8KIAkJCQkJCQl0cnVlLAogCQkJCQkJCWlu ZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXN1bW1hcml6aW5nLAotCQkJCQkJCW9sZEluZm8tPmlp X1dpdGhvdXRPdmVybGFwcyk7CisJCQkJCQkJb2xkSW5mby0+aWlfV2l0aG91dE92ZXJsYXBzLAor CQkJCQkJCWZhbHNlKTsKIAogCS8qCiAJICogRXh0cmFjdCB0aGUgbGlzdCBvZiBjb2x1bW4gbmFt ZXMgYW5kIHRoZSBjb2x1bW4gbnVtYmVycyBmb3IgdGhlIG5ldwogCSAqIGluZGV4IGluZm9ybWF0 aW9uLiAgQWxsIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGZvciB0aGUgaW5kZXgKIAkg KiBjcmVhdGlvbi4KIAkgKi8KLQlmb3IgKGludCBpID0gMDsgaSA8IG9sZEluZm8tPmlpX051bUlu ZGV4QXR0cnM7IGkrKykKIAl7CiAJCVR1cGxlRGVzYwlpbmRleFR1cERlc2MgPSBSZWxhdGlvbkdl dERlc2NyKGluZGV4UmVsYXRpb24pOwotCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURl c2NBdHRyKGluZGV4VHVwRGVzYywgaSk7CiAKLQkJaW5kZXhDb2xOYW1lcyA9IGxhcHBlbmQoaW5k ZXhDb2xOYW1lcywgTmFtZVN0cihhdHQtPmF0dG5hbWUpKTsKLQkJbmV3SW5mby0+aWlfSW5kZXhB dHRyTnVtYmVyc1tpXSA9IG9sZEluZm8tPmlpX0luZGV4QXR0ck51bWJlcnNbaV07CisJCWZvciAo aW50IGkgPSAwOyBpIDwgb2xkSW5mby0+aWlfTnVtSW5kZXhBdHRyczsgaSsrKQorCQl7CisJCQlG b3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKGluZGV4VHVwRGVzYywgaSk7CisK KwkJCWluZGV4Q29sTmFtZXMgPSBsYXBwZW5kKGluZGV4Q29sTmFtZXMsIE5hbWVTdHIoYXR0LT5h dHRuYW1lKSk7CisJCQluZXdJbmZvLT5paV9JbmRleEF0dHJOdW1iZXJzW2ldID0gb2xkSW5mby0+ aWlfSW5kZXhBdHRyTnVtYmVyc1tpXTsKKwkJfQogCX0KIAogCS8qIEV4dHJhY3Qgb3BjbGFzcyBv cHRpb25zIGZvciBlYWNoIGF0dHJpYnV0ZSAqLwpAQCAtMTQ3Myw2ICsxNDkxLDE1NyBAQCBpbmRl eF9jb25jdXJyZW50bHlfY3JlYXRlX2NvcHkoUmVsYXRpb24gaGVhcFJlbGF0aW9uLCBPaWQgb2xk SW5kZXhJZCwKIAlyZXR1cm4gbmV3SW5kZXhJZDsKIH0KIAorLyoKKyAqIGluZGV4X2NvbmN1cnJl bnRseV9jcmVhdGVfYXV4CisgKgorICogQ3JlYXRlIGNvbmN1cnJlbnRseSBhbiBhdXhpbGlhcnkg aW5kZXggYmFzZWQgb24gdGhlIGRlZmluaXRpb24gb2YgdGhlIG9uZQorICogcHJvdmlkZWQgYnkg Y2FsbGVyLiAgVGhlIGluZGV4IGlzIGluc2VydGVkIGludG8gY2F0YWxvZ3MgYW5kIG5lZWRzIHRv IGJlCisgKiBidWlsdCBsYXRlciBvbi4gVGhpcyBpcyBjYWxsZWQgZHVyaW5nIGNvbmN1cnJlbnQg cmVpbmRleCBwcm9jZXNzaW5nLgorICoKKyAqICJ0YWJsZXNwYWNlT2lkIiBpcyB0aGUgdGFibGVz cGFjZSB0byB1c2UgZm9yIHRoaXMgaW5kZXguCisgKi8KK09pZAoraW5kZXhfY29uY3VycmVudGx5 X2NyZWF0ZV9hdXgoUmVsYXRpb24gaGVhcFJlbGF0aW9uLCBPaWQgbWFpbkluZGV4SWQsCisJCQkJ CQkJICAgT2lkIHRhYmxlc3BhY2VPaWQsIGNvbnN0IGNoYXIgKm5ld05hbWUpCit7CisJUmVsYXRp b24JaW5kZXhSZWxhdGlvbjsKKwlJbmRleEluZm8gICpvbGRJbmZvLAorCQkJKm5ld0luZm87CisJ T2lkCQkJbmV3SW5kZXhJZCA9IEludmFsaWRPaWQ7CisJSGVhcFR1cGxlCWluZGV4VHVwbGU7CisK KwlMaXN0CSAgICppbmRleENvbE5hbWVzID0gTklMOworCUxpc3QJICAgKmluZGV4RXhwcnMgPSBO SUw7CisJTGlzdAkgICAqaW5kZXhQcmVkcyA9IE5JTDsKKworCU9pZCAqYXV4T3BjbGFzc0lkczsK KwlpbnQxNiAqYXV4Q29sb3B0aW9uczsKKworCWluZGV4UmVsYXRpb24gPSBpbmRleF9vcGVuKG1h aW5JbmRleElkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCS8qIFRoZSBuZXcgaW5kZXggbmVlZHMg c29tZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvbGQgaW5kZXggKi8KKwlvbGRJbmZvID0gQnVpbGRJ bmRleEluZm8oaW5kZXhSZWxhdGlvbik7CisKKwkvKgorCSAqIEJ1aWxkIG9mIGFuIGF1eGlsaWFy eSBpbmRleCB3aXRoIGV4Y2x1c2lvbiBjb25zdHJhaW50cyBpcyBub3QKKwkgKiBzdXBwb3J0ZWQu CisJICovCisJaWYgKG9sZEluZm8tPmlpX0V4Y2x1c2lvbk9wcyAhPSBOVUxMKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJ CQkJCWVycm1zZygiYXV4aWxpYXJ5IGluZGV4IGNyZWF0aW9uIGZvciBleGNsdXNpb24gY29uc3Ry YWludHMgaXMgbm90IHN1cHBvcnRlZCIpKSk7CisKKwkvKiBHZXQgdGhlIGFycmF5IG9mIGNsYXNz IGFuZCBjb2x1bW4gb3B0aW9ucyBJRHMgZnJvbSBpbmRleCBpbmZvICovCisJaW5kZXhUdXBsZSA9 IFNlYXJjaFN5c0NhY2hlMShJTkRFWFJFTElELCBPYmplY3RJZEdldERhdHVtKG1haW5JbmRleElk KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGluZGV4VHVwbGUpKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgaW5kZXggJXUiLCBtYWluSW5kZXhJZCk7CisKKworCS8q CisJICogRmV0Y2ggdGhlIGxpc3Qgb2YgZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZXMgZGlyZWN0 bHkgZnJvbSB0aGUKKwkgKiBjYXRhbG9ncy4gIFRoaXMgY2Fubm90IHJlbHkgb24gdGhlIGluZm9y bWF0aW9uIGZyb20gSW5kZXhJbmZvIG9mIHRoZQorCSAqIG9sZCBpbmRleCBhcyB0aGVzZSBoYXZl IGJlZW4gZmxhdHRlbmVkIGZvciB0aGUgcGxhbm5lci4KKwkgKi8KKwlpZiAob2xkSW5mby0+aWlf RXhwcmVzc2lvbnMgIT0gTklMKQorCXsKKwkJRGF0dW0JCWV4cHJEYXR1bTsKKwkJY2hhcgkgICAq ZXhwclN0cmluZzsKKworCQlleHByRGF0dW0gPSBTeXNDYWNoZUdldEF0dHJOb3ROdWxsKElOREVY UkVMSUQsIGluZGV4VHVwbGUsCisJCQkJCQkJCQkJICAgQW51bV9wZ19pbmRleF9pbmRleHBycyk7 CisJCWV4cHJTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHJEYXR1bSk7CisJCWluZGV4 RXhwcnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoZXhwclN0cmluZyk7CisJCXBmcmVlKGV4cHJT dHJpbmcpOworCX0KKwlpZiAob2xkSW5mby0+aWlfUHJlZGljYXRlICE9IE5JTCkKKwl7CisJCURh dHVtCQlwcmVkRGF0dW07CisJCWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJcHJlZERhdHVtID0g U3lzQ2FjaGVHZXRBdHRyTm90TnVsbChJTkRFWFJFTElELCBpbmRleFR1cGxlLAorCQkJCQkJCQkJ CSAgIEFudW1fcGdfaW5kZXhfaW5kcHJlZCk7CisJCXByZWRTdHJpbmcgPSBUZXh0RGF0dW1HZXRD U3RyaW5nKHByZWREYXR1bSk7CisJCWluZGV4UHJlZHMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUo cHJlZFN0cmluZyk7CisKKwkJLyogQWxzbyBjb252ZXJ0IHRvIGltcGxpY2l0LUFORCBmb3JtYXQg Ki8KKwkJaW5kZXhQcmVkcyA9IG1ha2VfYW5kc19pbXBsaWNpdCgoRXhwciAqKSBpbmRleFByZWRz KTsKKwkJcGZyZWUocHJlZFN0cmluZyk7CisJfQorCisJLyoKKwkgKiBCdWlsZCB0aGUgaW5kZXgg aW5mb3JtYXRpb24gZm9yIHRoZSBuZXcgaW5kZXguICBOb3RlIHRoYXQgcmVidWlsZCBvZgorCSAq IGluZGV4ZXMgd2l0aCBleGNsdXNpb24gY29uc3RyYWludHMgaXMgbm90IHN1cHBvcnRlZCwgaGVu Y2UgdGhlcmUgaXMgbm8KKwkgKiBuZWVkIHRvIGZpbGwgYWxsIHRoZSBpaV9FeGNsdXNpb24qIGZp ZWxkcy4KKwkgKi8KKwluZXdJbmZvID0gbWFrZUluZGV4SW5mbyhvbGRJbmZvLT5paV9OdW1JbmRl eEF0dHJzLAorCQkJCQkJCW9sZEluZm8tPmlpX051bUluZGV4S2V5QXR0cnMsCisJCQkJCQkJU1RJ Ul9BTV9PSUQsIC8qIHNwZWNpYWwgQU0gZm9yIGF1eCBpbmRleGVzICovCisJCQkJCQkJaW5kZXhF eHBycywKKwkJCQkJCQlpbmRleFByZWRzLAorCQkJCQkJCWZhbHNlLAkvKiBhdXggaW5kZXggYXJl IG5vdCB1bmlxdWUgKi8KKwkJCQkJCQlvbGRJbmZvLT5paV9OdWxsc05vdERpc3RpbmN0LAorCQkJ CQkJCWZhbHNlLAkvKiBub3QgcmVhZHkgZm9yIGluc2VydHMgKi8KKwkJCQkJCQl0cnVlLAorCQkJ CQkJCWZhbHNlLAkvKiBhdXggYXJlIG5vdCBzdW1tYXJpemluZyAqLworCQkJCQkJCWZhbHNlLAkv KiBhdXggYXJlIG5vdCB3aXRob3V0IG92ZXJsYXBzICovCisJCQkJCQkJdHJ1ZQkvKiBhdXhpbGlh cnkgKi8pOworCisJLyoKKwkgKiBFeHRyYWN0IHRoZSBsaXN0IG9mIGNvbHVtbiBuYW1lcyBhbmQg dGhlIGNvbHVtbiBudW1iZXJzIGZvciB0aGUgbmV3CisJICogaW5kZXggaW5mb3JtYXRpb24uICBB bGwgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgZm9yIHRoZSBpbmRleAorCSAqIGNyZWF0 aW9uLgorCSAqLworCXsKKwkJVHVwbGVEZXNjCWluZGV4VHVwRGVzYyA9IFJlbGF0aW9uR2V0RGVz Y3IoaW5kZXhSZWxhdGlvbik7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBvbGRJbmZvLT5paV9O dW1JbmRleEF0dHJzOyBpKyspCisJCXsKKwkJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxl RGVzY0F0dHIoaW5kZXhUdXBEZXNjLCBpKTsKKworCQkJaW5kZXhDb2xOYW1lcyA9IGxhcHBlbmQo aW5kZXhDb2xOYW1lcywgTmFtZVN0cihhdHQtPmF0dG5hbWUpKTsKKwkJCW5ld0luZm8tPmlpX0lu ZGV4QXR0ck51bWJlcnNbaV0gPSBvbGRJbmZvLT5paV9JbmRleEF0dHJOdW1iZXJzW2ldOworCQl9 CisJfQorCisJYXV4T3BjbGFzc0lkcyA9IHBhbGxvYzAoc2l6ZW9mKE9pZCkgKiBuZXdJbmZvLT5p aV9OdW1JbmRleEF0dHJzKTsKKwlhdXhDb2xvcHRpb25zID0gcGFsbG9jMChzaXplb2YoaW50MTYp ICogbmV3SW5mby0+aWlfTnVtSW5kZXhBdHRycyk7CisKKwkvKiBGaWxsIHdpdGggImFueSBvcHMi ICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBuZXdJbmZvLT5paV9OdW1JbmRleEF0dHJzOyBpKysp CisJeworCQlhdXhPcGNsYXNzSWRzW2ldID0gQU5ZX1NUSVJfT1BTX09JRDsKKwkJYXV4Q29sb3B0 aW9uc1tpXSA9IDA7CisJfQorCisJbmV3SW5kZXhJZCA9IGluZGV4X2NyZWF0ZShoZWFwUmVsYXRp b24sCisJCQkJCQkJICBuZXdOYW1lLAorCQkJCQkJCSAgSW52YWxpZE9pZCwgICAgLyogaW5kZXhS ZWxhdGlvbklkICovCisJCQkJCQkJICBJbnZhbGlkT2lkLCAgICAvKiBwYXJlbnRJbmRleFJlbGlk ICovCisJCQkJCQkJICBJbnZhbGlkT2lkLCAgICAvKiBwYXJlbnRDb25zdHJhaW50SWQgKi8KKwkJ CQkJCQkgIEludmFsaWRSZWxGaWxlTnVtYmVyLCAvKiByZWxGaWxlTnVtYmVyICovCisJCQkJCQkJ ICBuZXdJbmZvLAorCQkJCQkJCSAgaW5kZXhDb2xOYW1lcywKKwkJCQkJCQkgIFNUSVJfQU1fT0lE LAorCQkJCQkJCSAgdGFibGVzcGFjZU9pZCwKKwkJCQkJCQkgIGluZGV4UmVsYXRpb24tPnJkX2lu ZGNvbGxhdGlvbiwKKwkJCQkJCQkgIGF1eE9wY2xhc3NJZHMsCisJCQkJCQkJICBOVUxMLAorCQkJ CQkJCSAgYXV4Q29sb3B0aW9ucywKKwkJCQkJCQkgIE5VTEwsCisJCQkJCQkJICAoRGF0dW0pIDAs CisJCQkJCQkJICBJTkRFWF9DUkVBVEVfU0tJUF9CVUlMRCB8IElOREVYX0NSRUFURV9DT05DVVJS RU5UIHwgSU5ERVhfQ1JFQVRFX0FVWElMSUFSWSwKKwkJCQkJCQkgIDAsCisJCQkJCQkJICB0cnVl LCAvKiBhbGxvdyB0YWJsZSB0byBiZSBhIHN5c3RlbSBjYXRhbG9nPyAqLworCQkJCQkJCSAgZmFs c2UsICAgIC8qIGlzX2ludGVybmFsPyAqLworCQkJCQkJCSAgTlVMTCk7CisKKwkvKiBDbG9zZSB0 aGUgcmVsYXRpb25zIHVzZWQgYW5kIGNsZWFuIHVwICovCisJaW5kZXhfY2xvc2UoaW5kZXhSZWxh dGlvbiwgTm9Mb2NrKTsKKwlSZWxlYXNlU3lzQ2FjaGUoaW5kZXhUdXBsZSk7CisKKwlyZXR1cm4g bmV3SW5kZXhJZDsKK30KKwogLyoKICAqIGluZGV4X2NvbmN1cnJlbnRseV9idWlsZAogICoKQEAg LTI0NTMsNyArMjYyMiw4IEBAIEJ1aWxkSW5kZXhJbmZvKFJlbGF0aW9uIGluZGV4KQogCQkJCQkg ICBpbmRleFN0cnVjdC0+aW5kaXNyZWFkeSwKIAkJCQkJICAgZmFsc2UsCiAJCQkJCSAgIGluZGV4 LT5yZF9pbmRhbS0+YW1zdW1tYXJpemluZywKLQkJCQkJICAgaW5kZXhTdHJ1Y3QtPmluZGlzZXhj bHVzaW9uICYmIGluZGV4U3RydWN0LT5pbmRpc3VuaXF1ZSk7CisJCQkJCSAgIGluZGV4U3RydWN0 LT5pbmRpc2V4Y2x1c2lvbiAmJiBpbmRleFN0cnVjdC0+aW5kaXN1bmlxdWUsCisJCQkJCSAgIGlu ZGV4LT5yZF9yZWwtPnJlbGFtID09IFNUSVJfQU1fT0lEIC8qIGF1eGlsaWFyeSBpZmYgU1RJUiAq Lyk7CiAKIAkvKiBmaWxsIGluIGF0dHJpYnV0ZSBudW1iZXJzICovCiAJZm9yIChpID0gMDsgaSA8 IG51bUF0dHM7IGkrKykKQEAgLTI1MTMsNyArMjY4Myw4IEBAIEJ1aWxkRHVtbXlJbmRleEluZm8o UmVsYXRpb24gaW5kZXgpCiAJCQkJCSAgIGluZGV4U3RydWN0LT5pbmRpc3JlYWR5LAogCQkJCQkg ICBmYWxzZSwKIAkJCQkJICAgaW5kZXgtPnJkX2luZGFtLT5hbXN1bW1hcml6aW5nLAotCQkJCQkg ICBpbmRleFN0cnVjdC0+aW5kaXNleGNsdXNpb24gJiYgaW5kZXhTdHJ1Y3QtPmluZGlzdW5pcXVl KTsKKwkJCQkJICAgaW5kZXhTdHJ1Y3QtPmluZGlzZXhjbHVzaW9uICYmIGluZGV4U3RydWN0LT5p bmRpc3VuaXF1ZSwKKwkJCQkJICAgaW5kZXgtPnJkX3JlbC0+cmVsYW0gPT0gU1RJUl9BTV9PSUQg LyogYXV4aWxpYXJ5IGlmZiBTVElSICovKTsKIAogCS8qIGZpbGwgaW4gYXR0cmlidXRlIG51bWJl cnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtQXR0czsgaSsrKQpAQCAtMzI4OSwxMiArMzQ2MCwy MSBAQCBJbmRleENoZWNrRXhjbHVzaW9uKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKICAqCiAgKiBX ZSBkbyBhIGNvbmN1cnJlbnQgaW5kZXggYnVpbGQgYnkgZmlyc3QgaW5zZXJ0aW5nIHRoZSBjYXRh bG9nIGVudHJ5IGZvciB0aGUKICAqIGluZGV4IHZpYSBpbmRleF9jcmVhdGUoKSwgbWFya2luZyBp dCBub3QgaW5kaXNyZWFkeSBhbmQgbm90IGluZGlzdmFsaWQuCisgKiBUaGVuIHdlIGNyZWF0ZSBz cGVjaWFsIGF1eGlsaWFyeSBpbmRleCB0aGUgc2FtZSB3YXkuIEl0IGJhc2VkIG9uIFNUSVIgQU0u CiAgKiBUaGVuIHdlIGNvbW1pdCBvdXIgdHJhbnNhY3Rpb24gYW5kIHN0YXJ0IGEgbmV3IG9uZSwg dGhlbiB3ZSB3YWl0IGZvciBhbGwKICAqIHRyYW5zYWN0aW9ucyB0aGF0IGNvdWxkIGhhdmUgYmVl biBtb2RpZnlpbmcgdGhlIHRhYmxlIHRvIHRlcm1pbmF0ZS4gIE5vdwotICogd2Uga25vdyB0aGF0 IGFueSBzdWJzZXF1ZW50bHktc3RhcnRlZCB0cmFuc2FjdGlvbnMgd2lsbCBzZWUgdGhlIGluZGV4 IGFuZAorICogd2Uga25vdyB0aGF0IGFueSBzdWJzZXF1ZW50bHktc3RhcnRlZCB0cmFuc2FjdGlv bnMgd2lsbCBzZWUgaW5kZXhlcyBhbmQKICAqIGhvbm9yIGl0cyBjb25zdHJhaW50cyBvbiBIT1Qg dXBkYXRlczsgc28gd2hpbGUgZXhpc3RpbmcgSE9ULWNoYWlucyBtaWdodAogICogYmUgYnJva2Vu IHdpdGggcmVzcGVjdCB0byB0aGUgaW5kZXgsIG5vIGN1cnJlbnRseSBsaXZlIHR1cGxlIHdpbGwg aGF2ZSBhbgotICogaW5jb21wYXRpYmxlIEhPVCB1cGRhdGUgZG9uZSB0byBpdC4gIFdlIG5vdyBi dWlsZCB0aGUgaW5kZXggbm9ybWFsbHkgdmlhCisgKiBpbmNvbXBhdGlibGUgSE9UIHVwZGF0ZSBk b25lIHRvIGl0LgorICoKKyAqIEFmdGVyIHRoYXQsIHdlIGJ1aWxkIHRoZSBhdXhpbGlhcnkgaW5k ZXguIEl0IGlzIGZhc3Qgb3BlcmF0aW9uIHdpdGhvdXQgYW55IGFjdHVhbAorICogdGFibGUgc2Nh bi4gQXMgcmVzdWx0LCB3ZSBoYXZlIGVtcHR5IFNUSVIgaW5kZXguIFdlIGNvbW1pdCB0cmFuc2Fj dGlvbiBhbmQKKyAqIGFnYWluIHdhaXQgZm9yIGFsbCB0cmFuc2FjdGlvbnMgdGhhdCBjb3VsZCBo YXZlIGJlZW4gbW9kaWZ5aW5nIHRoZSB0YWJsZQorICogdG8gdGVybWluYXRlLiBBdCB0aGF0IG1v bWVudCBhbGwgbmV3IHR1cGxlcyBhcmUgZ29pbmcgdG8gYmUgaW5zZXJ0ZWQgaW50bworICogYXV4 aWxpYXJ5IGluZGV4LgorICoKKyAqIFdlIG5vdyBidWlsZCB0aGUgaW5kZXggbm9ybWFsbHkgdmlh CiAgKiBpbmRleF9idWlsZCgpLCB3aGlsZSBob2xkaW5nIGEgd2VhayBsb2NrIHRoYXQgYWxsb3dz IGNvbmN1cnJlbnQKICAqIGluc2VydC91cGRhdGUvZGVsZXRlLiAgQWxzbywgd2UgaW5kZXggb25s eSB0dXBsZXMgdGhhdCBhcmUgdmFsaWQKICAqIGFzIG9mIHRoZSBzdGFydCBvZiB0aGUgc2NhbiAo c2VlIHRhYmxlX2luZGV4X2J1aWxkX3NjYW4pLCB3aGVyZWFzIGEgbm9ybWFsCkBAIC0zMzA0LDE0 ICszNDg0LDE3IEBAIEluZGV4Q2hlY2tFeGNsdXNpb24oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAog ICogYm9ndXMgdW5pcXVlLWluZGV4IGZhaWx1cmVzIGR1ZSB0byBjb25jdXJyZW50IFVQREFURXMg KHdlIG1pZ2h0IHNlZQogICogZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBzYW1lIHJvdyBhcyBi ZWluZyB2YWxpZCB3aGVuIHdlIHBhc3Mgb3ZlciB0aGVtLAogICogaWYgd2UgdXNlZCBIZWFwVHVw bGVTYXRpc2ZpZXNWYWN1dW0pLiAgVGhpcyBsZWF2ZXMgdXMgd2l0aCBhbiBpbmRleCB0aGF0Ci0g KiBkb2VzIG5vdCBjb250YWluIGFueSB0dXBsZXMgYWRkZWQgdG8gdGhlIHRhYmxlIHdoaWxlIHdl IGJ1aWx0IHRoZSBpbmRleC4KKyAqIGRvZXMgbm90IGNvbnRhaW4gYW55IHR1cGxlcyBhZGRlZCB0 byB0aGUgdGFibGUgd2hpbGUgd2UgYnVpbHQgdGhlIGluZGV4CisgKiAoYnV0IHRoZXNlIHR1cGxl cyBjb250YWluZWQgaW4gYXV4aWxpYXJ5IGluZGV4KS4KICAqCiAgKiBOZXh0LCB3ZSBtYXJrIHRo ZSBpbmRleCAiaW5kaXNyZWFkeSIgKGJ1dCBzdGlsbCBub3QgImluZGlzdmFsaWQiKSBhbmQKLSAq IGNvbW1pdCB0aGUgc2Vjb25kIHRyYW5zYWN0aW9uIGFuZCBzdGFydCBhIHRoaXJkLiAgQWdhaW4g d2Ugd2FpdCBmb3IgYWxsCisgKiBjb21taXQgdGhlIHRoaXJkIHRyYW5zYWN0aW9uIGFuZCBzdGFy dCBhIGZvdXJ0aC4gIEFnYWluIHdlIHdhaXQgZm9yIGFsbAogICogdHJhbnNhY3Rpb25zIHRoYXQg Y291bGQgaGF2ZSBiZWVuIG1vZGlmeWluZyB0aGUgdGFibGUgdG8gdGVybWluYXRlLiAgTm93CiAg KiB3ZSBrbm93IHRoYXQgYW55IHN1YnNlcXVlbnRseS1zdGFydGVkIHRyYW5zYWN0aW9ucyB3aWxs IHNlZSB0aGUgaW5kZXggYW5kCi0gKiBpbnNlcnQgdGhlaXIgbmV3IHR1cGxlcyBpbnRvIGl0LiAg V2UgdGhlbiB0YWtlIGEgbmV3IHJlZmVyZW5jZSBzbmFwc2hvdAotICogd2hpY2ggaXMgcGFzc2Vk IHRvIHZhbGlkYXRlX2luZGV4KCkuICBBbnkgdHVwbGVzIHRoYXQgYXJlIHZhbGlkIGFjY29yZGlu ZworICogaW5zZXJ0IHRoZWlyIG5ldyB0dXBsZXMgaW50byBpdC4gQXQgdGhlIHNhbWUgbW9tZW50 IHdlIGNsZWFyICJpbmRpc3JlYWR5IiBmb3IKKyAqIGF1eGlsaWFyeSBpbmRleCwgc2luY2UgaXQg aXMgbm8gbW9yZSByZXF1aXJlZCB0byBiZSB1cGRhdGVkLgorICoKKyAqIFdlIHRoZW4gdGFrZSBh IG5ldyByZWZlcmVuY2Ugc25hcHNob3QsIGFueSB0dXBsZXMgdGhhdCBhcmUgdmFsaWQgYWNjb3Jk aW5nCiAgKiB0byB0aGlzIHNuYXAsIGJ1dCBhcmUgbm90IGluIHRoZSBpbmRleCwgbXVzdCBiZSBh ZGRlZCB0byB0aGUgaW5kZXguCiAgKiAoQW55IHR1cGxlcyBjb21taXR0ZWQgbGl2ZSBhZnRlciB0 aGUgc25hcCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlCiAgKiBpbmRleCBieSB0aGVpciBvcmln aW5hdGluZyB0cmFuc2FjdGlvbi4gIEFueSB0dXBsZXMgY29tbWl0dGVkIGRlYWQgYmVmb3JlCkBA IC0zMzE5LDEyICszNTAyLDE0IEBAIEluZGV4Q2hlY2tFeGNsdXNpb24oUmVsYXRpb24gaGVhcFJl bGF0aW9uLAogICogdGhhdCBtaWdodCBjYXJlIGFib3V0IHRoZW0gYmVmb3JlIHdlIG1hcmsgdGhl IGluZGV4IHZhbGlkLikKICAqCiAgKiB2YWxpZGF0ZV9pbmRleCgpIHdvcmtzIGJ5IGZpcnN0IGdh dGhlcmluZyBhbGwgdGhlIFRJRHMgY3VycmVudGx5IGluIHRoZQotICogaW5kZXgsIHVzaW5nIGEg YnVsa2RlbGV0ZSBjYWxsYmFjayB0aGF0IGp1c3Qgc3RvcmVzIHRoZSBUSURzIGFuZCBkb2Vzbid0 CisgKiBpbmRleGVzLCB1c2luZyBhIGJ1bGtkZWxldGUgY2FsbGJhY2sgdGhhdCBqdXN0IHN0b3Jl cyB0aGUgVElEcyBhbmQgZG9lc24ndAogICogZXZlciBzYXkgImRlbGV0ZSBpdCIuICAoVGhpcyBz aG91bGQgYmUgZmFzdGVyIHRoYW4gYSBwbGFpbiBpbmRleHNjYW47CiAgKiBhbHNvLCBub3QgYWxs IGluZGV4IEFNcyBzdXBwb3J0IGZ1bGwtaW5kZXggaW5kZXhzY2FuLikgIFRoZW4gd2Ugc29ydCB0 aGUKLSAqIFRJRHMsIGFuZCBmaW5hbGx5IHNjYW4gdGhlIHRhYmxlIGRvaW5nIGEgIm1lcmdlIGpv aW4iIGFnYWluc3QgdGhlIFRJRCBsaXN0Ci0gKiB0byBzZWUgd2hpY2ggdHVwbGVzIGFyZSBtaXNz aW5nIGZyb20gdGhlIGluZGV4LiAgVGh1cyB3ZSB3aWxsIGVuc3VyZSB0aGF0Ci0gKiBhbGwgdHVw bGVzIHZhbGlkIGFjY29yZGluZyB0byB0aGUgcmVmZXJlbmNlIHNuYXBzaG90IGFyZSBpbiB0aGUg aW5kZXguCisgKiBUSURzIG9mIGJvdGggYXV4aWxpYXJ5IGFuZCB0YXJnZXQgaW5kZXhlcywgYW5k IGRvaW5nIGEgIm1lcmdlIGpvaW4iIGFnYWluc3QKKyAqIHRoZSBUSUQgbGlzdHMgdG8gc2VlIHdo aWNoIHR1cGxlcyBmcm9tIGF1eGlsaWFyeSBpbmRleCBhcmUgbWlzc2luZyBmcm9tIHRoZQorICog dGFyZ2V0IGluZGV4LiAgVGh1cyB3ZSB3aWxsIGVuc3VyZSB0aGF0IGFsbCB0dXBsZXMgdmFsaWQg YWNjb3JkaW5nIHRvIHRoZQorICogcmVmZXJlbmNlIHNuYXBzaG90IGFyZSBpbiB0aGUgaW5kZXgu IE5vdGljZSB3ZSBuZWVkIHRvIGRvIGJ1bGtkZWxldGUgaW4gdGhlCisgKiBwYXJ0aWN1bGFyIG9y ZGVyOiBhdXhpbGlhcnkgZmlyc3QsIHRhcmdldCBsYXN0LgogICoKICAqIEJ1aWxkaW5nIGEgdW5p cXVlIGluZGV4IHRoaXMgd2F5IGlzIHRyaWNreTogd2UgbWlnaHQgdHJ5IHRvIGluc2VydCBhCiAg KiB0dXBsZSB0aGF0IGlzIGFscmVhZHkgZGVhZCBvciBpcyBpbiBwcm9jZXNzIG9mIGJlaW5nIGRl bGV0ZWQsIGFuZCB3ZQpAQCAtMzM0MiwyMiArMzUyNywyNiBAQCBJbmRleENoZWNrRXhjbHVzaW9u KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKICAqIG5vdCBpbmRleCkuICBUaGVuIHdlIG1hcmsgdGhl IGluZGV4ICJpbmRpc3ZhbGlkIiBhbmQgY29tbWl0LiAgU3Vic2VxdWVudAogICogdHJhbnNhY3Rp b25zIHdpbGwgYmUgYWJsZSB0byB1c2UgaXQgZm9yIHF1ZXJpZXMuCiAgKgotICogRG9pbmcgdHdv IGZ1bGwgdGFibGUgc2NhbnMgaXMgYSBicnV0ZS1mb3JjZSBzdHJhdGVneS4gIFdlIGNvdWxkIHRy eSB0byBiZQotICogY2xldmVyZXIsIGVnIHN0b3JpbmcgbmV3IHR1cGxlcyBpbiBhIHNwZWNpYWwg YXJlYSBvZiB0aGUgdGFibGUgKHBlcmhhcHMKLSAqIG1ha2luZyB0aGUgdGFibGUgYXBwZW5kLW9u bHkgYnkgc2V0dGluZyB1c2VfZnNtKS4gIEhvd2V2ZXIgdGhhdCB3b3VsZAotICogYWRkIHlldCBt b3JlIGxvY2tpbmcgaXNzdWVzLgorICogQWxzbywgc29tZSBhY3Rpb25zIHRvIGNvbmN1cnJlbnQg ZHJvcCB0aGUgYXV4aWxpYXJ5IGluZGV4IGFyZSBwZXJmb3JtZWQuCiAgKi8KIHZvaWQKLXZhbGlk YXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCkKK3Zh bGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25h cHNob3Qgc25hcHNob3QpCiB7CiAJUmVsYXRpb24JaGVhcFJlbGF0aW9uLAotCQkJCWluZGV4UmVs YXRpb247CisJCQkJaW5kZXhSZWxhdGlvbiwKKwkJCQlhdXhJbmRleFJlbGF0aW9uOwogCUluZGV4 SW5mbyAgKmluZGV4SW5mbzsKLQlJbmRleFZhY3V1bUluZm8gaXZpbmZvOwotCVZhbGlkYXRlSW5k ZXhTdGF0ZSBzdGF0ZTsKKwlJbmRleFZhY3V1bUluZm8gaXZpbmZvLCBhdXhpdmluZm87CisJVmFs aWRhdGVJbmRleFN0YXRlIHN0YXRlLCBhdXhTdGF0ZTsKIAlPaWQJCQlzYXZlX3VzZXJpZDsKIAlp bnQJCQlzYXZlX3NlY19jb250ZXh0OwogCWludAkJCXNhdmVfbmVzdGxldmVsOworCS8qIFVzZSA4 MCUgb2YgbWFpbnRlbmFuY2Vfd29ya19tZW0gdG8gdGFyZ2V0IGluZGV4IHNvcnRpbmcgYW5kCisJ ICogMTAlIHJlc3QgZm9yIGF1eGlsaWFyeS4KKwkgKgorCSAqIFJlc3QgMTAlIHdpbGwgYmUgdXNl ZCBmb3IgdHVwbGVzdG9yZSBsYXRlci4gKi8KKwlpbnQJCQltYWluX3dvcmtfbWVtX3BhcnQgPSAo aW50KSgoaW50NjQpIG1haW50ZW5hbmNlX3dvcmtfbWVtICogOCAvIDEwKTsKKwlpbnQJCQlhdXhf d29ya19tZW1fcGFydCA9IG1haW50ZW5hbmNlX3dvcmtfbWVtIC8gMTA7CiAKIAl7CiAJCWNvbnN0 IGludAlwcm9ncmVzc19pbmRleFtdID0gewpAQCAtMzM5MCw2ICszNTc5LDcgQEAgdmFsaWRhdGVf aW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQogCVJlc3Ry aWN0U2VhcmNoUGF0aCgpOwogCiAJaW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4oaW5kZXhJZCwg Um93RXhjbHVzaXZlTG9jayk7CisJYXV4SW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4oYXV4SW5k ZXhJZCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAkvKgogCSAqIEZldGNoIGluZm8gbmVlZGVkIGZv ciBpbmRleF9pbnNlcnQuICAoWW91IG1pZ2h0IHRoaW5rIHRoaXMgc2hvdWxkIGJlCkBAIC0zNDE0 LDE1ICszNjA0LDQ5IEBAIHZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBT bmFwc2hvdCBzbmFwc2hvdCkKIAlpdmluZm8uc3RyYXRlZ3kgPSBOVUxMOwogCWl2aW5mby52YWxp ZGF0ZV9pbmRleCA9IHRydWU7CiAKKwkvKgorCSAqIENvcHkgYWxsIGluZm8gdG8gYXV4aWxpYXJ5 IGluZm8sIGNoYW5naW5nIG9ubHkgcmVsYXRpb24uCisJICovCisJYXV4aXZpbmZvID0gaXZpbmZv OworCWF1eGl2aW5mby5pbmRleCA9IGF1eEluZGV4UmVsYXRpb247CisKIAkvKgogCSAqIEVuY29k ZSBUSURzIGFzIGludDggdmFsdWVzIGZvciB0aGUgc29ydCwgcmF0aGVyIHRoYW4gZGlyZWN0bHkg c29ydGluZwogCSAqIGl0ZW0gcG9pbnRlcnMuICBUaGlzIGNhbiBiZSBzaWduaWZpY2FudGx5IGZh c3RlciwgcHJpbWFyaWx5IGJlY2F1c2UgVElECiAJICogaXMgYSBwYXNzLWJ5LXJlZmVyZW5jZSB0 eXBlIG9uIGFsbCBwbGF0Zm9ybXMsIHdoZXJlYXMgaW50OCBpcwogCSAqIHBhc3MtYnktdmFsdWUg b24gbW9zdCBwbGF0Zm9ybXMuCiAJICovCisJYXV4U3RhdGUudHVwbGVzb3J0ID0gdHVwbGVzb3J0 X2JlZ2luX2RhdHVtKElOVDhPSUQsIEludDhMZXNzT3BlcmF0b3IsCisJCQkJCQkJCQkJICAgSW52 YWxpZE9pZCwgZmFsc2UsCisJCQkJCQkJCQkJICAgYXV4X3dvcmtfbWVtX3BhcnQsCisJCQkJCQkJ CQkJICAgTlVMTCwgVFVQTEVTT1JUX05PTkUpOworCWF1eFN0YXRlLmh0dXBzID0gYXV4U3RhdGUu aXR1cHMgPSBhdXhTdGF0ZS50dXBzX2luc2VydGVkID0gMDsKKworCSh2b2lkKSBpbmRleF9idWxr X2RlbGV0ZSgmYXV4aXZpbmZvLCBOVUxMLAorCQkJCQkJCSB2YWxpZGF0ZV9pbmRleF9jYWxsYmFj aywgJmF1eFN0YXRlKTsKKwkvKiBJZiBhdXggaW5kZXggaXMgZW1wdHksIG1lcmdlIG1heSBiZSBz a2lwcGVkICovCisJaWYgKGF1eFN0YXRlLml0dXBzID09IDApCisJeworCQl0dXBsZXNvcnRfZW5k KGF1eFN0YXRlLnR1cGxlc29ydCk7CisJCWF1eFN0YXRlLnR1cGxlc29ydCA9IE5VTEw7CisKKwkJ LyogUm9sbCBiYWNrIGFueSBHVUMgY2hhbmdlcyBleGVjdXRlZCBieSBpbmRleCBmdW5jdGlvbnMg Ki8KKwkJQXRFT1hhY3RfR1VDKGZhbHNlLCBzYXZlX25lc3RsZXZlbCk7CisKKwkJLyogUmVzdG9y ZSB1c2VyaWQgYW5kIHNlY3VyaXR5IGNvbnRleHQgKi8KKwkJU2V0VXNlcklkQW5kU2VjQ29udGV4 dChzYXZlX3VzZXJpZCwgc2F2ZV9zZWNfY29udGV4dCk7CisKKwkJLyogQ2xvc2UgcmVscywgYnV0 IGtlZXAgbG9ja3MgKi8KKwkJaW5kZXhfY2xvc2UoYXV4SW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsK KwkJaW5kZXhfY2xvc2UoaW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKKwkJdGFibGVfY2xvc2UoaGVh cFJlbGF0aW9uLCBOb0xvY2spOworCisJCXJldHVybjsKKwl9CisKIAlzdGF0ZS50dXBsZXNvcnQg PSB0dXBsZXNvcnRfYmVnaW5fZGF0dW0oSU5UOE9JRCwgSW50OExlc3NPcGVyYXRvciwKIAkJCQkJ CQkJCQkJSW52YWxpZE9pZCwgZmFsc2UsCi0JCQkJCQkJCQkJCW1haW50ZW5hbmNlX3dvcmtfbWVt LAorCQkJCQkJCQkJCQkoaW50KSBtYWluX3dvcmtfbWVtX3BhcnQsCiAJCQkJCQkJCQkJCU5VTEws IFRVUExFU09SVF9OT05FKTsKIAlzdGF0ZS5odHVwcyA9IHN0YXRlLml0dXBzID0gc3RhdGUudHVw c19pbnNlcnRlZCA9IDA7CiAKQEAgLTM0NDUsMjcgKzM2NjksMzAgQEAgdmFsaWRhdGVfaW5kZXgo T2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQogCQlwZ3N0YXRfcHJv Z3Jlc3NfdXBkYXRlX211bHRpX3BhcmFtKDMsIHByb2dyZXNzX2luZGV4LCBwcm9ncmVzc192YWxz KTsKIAl9CiAJdHVwbGVzb3J0X3BlcmZvcm1zb3J0KHN0YXRlLnR1cGxlc29ydCk7CisJdHVwbGVz b3J0X3BlcmZvcm1zb3J0KGF1eFN0YXRlLnR1cGxlc29ydCk7CiAKIAkvKgotCSAqIE5vdyBzY2Fu IHRoZSBoZWFwIGFuZCAibWVyZ2UiIGl0IHdpdGggdGhlIGluZGV4CisJICogTm93IG1lcmdlIGJv dGggaW5kZXhlcwogCSAqLwogCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1Nf Q1JFQVRFSURYX1BIQVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElE QVRFX1RBQkxFU0NBTik7CisJCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfVkFMSURB VEVfSURYTUVSR0UpOwogCXRhYmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4oaGVhcFJlbGF0aW9uLAog CQkJCQkJCSAgaW5kZXhSZWxhdGlvbiwKIAkJCQkJCQkgIGluZGV4SW5mbywKIAkJCQkJCQkgIHNu YXBzaG90LAotCQkJCQkJCSAgJnN0YXRlKTsKKwkJCQkJCQkgICZzdGF0ZSwKKwkJCQkJCQkgICZh dXhTdGF0ZSk7CiAKLQkvKiBEb25lIHdpdGggdHVwbGVzb3J0IG9iamVjdCAqLwotCXR1cGxlc29y dF9lbmQoc3RhdGUudHVwbGVzb3J0KTsKKwkvKiBUdXBsZSBzb3J0IGNsb3NlZCBieSB0YWJsZV9p bmRleF92YWxpZGF0ZV9zY2FuICovCisJQXNzZXJ0KHN0YXRlLnR1cGxlc29ydCA9PSBOVUxMICYm IGF1eFN0YXRlLnR1cGxlc29ydCA9PSBOVUxMKTsKIAogCS8qIE1ha2Ugc3VyZSB0byByZWxlYXNl IHJlc291cmNlcyBjYWNoZWQgaW4gaW5kZXhJbmZvIChpZiBuZWVkZWQpLiAqLwogCWluZGV4X2lu c2VydF9jbGVhbnVwKGluZGV4UmVsYXRpb24sIGluZGV4SW5mbyk7CiAKIAllbG9nKERFQlVHMiwK LQkJICJ2YWxpZGF0ZV9pbmRleCBmb3VuZCAlLjBmIGhlYXAgdHVwbGVzLCAlLjBmIGluZGV4IHR1 cGxlczsgaW5zZXJ0ZWQgJS4wZiBtaXNzaW5nIHR1cGxlcyIsCi0JCSBzdGF0ZS5odHVwcywgc3Rh dGUuaXR1cHMsIHN0YXRlLnR1cHNfaW5zZXJ0ZWQpOworCQkgInZhbGlkYXRlX2luZGV4IGZldGNo ZWQgJS4wZiBoZWFwIHR1cGxlcywgJS4wZiBpbmRleCB0dXBsZXM7IgorCQkJCQkJIiAlLjBmIGF1 eCBpbmRleCB0dXBsZXM7IGluc2VydGVkICUuMGYgbWlzc2luZyB0dXBsZXMiLAorCQkgc3RhdGUu aHR1cHMsIHN0YXRlLml0dXBzLCBhdXhTdGF0ZS5pdHVwcywgc3RhdGUudHVwc19pbnNlcnRlZCk7 CiAKIAkvKiBSb2xsIGJhY2sgYW55IEdVQyBjaGFuZ2VzIGV4ZWN1dGVkIGJ5IGluZGV4IGZ1bmN0 aW9ucyAqLwogCUF0RU9YYWN0X0dVQyhmYWxzZSwgc2F2ZV9uZXN0bGV2ZWwpOwpAQCAtMzQ3NCw2 ICszNzAxLDcgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIFNuYXBz aG90IHNuYXBzaG90KQogCVNldFVzZXJJZEFuZFNlY0NvbnRleHQoc2F2ZV91c2VyaWQsIHNhdmVf c2VjX2NvbnRleHQpOwogCiAJLyogQ2xvc2UgcmVscywgYnV0IGtlZXAgbG9ja3MgKi8KKwlpbmRl eF9jbG9zZShhdXhJbmRleFJlbGF0aW9uLCBOb0xvY2spOwogCWluZGV4X2Nsb3NlKGluZGV4UmVs YXRpb24sIE5vTG9jayk7CiAJdGFibGVfY2xvc2UoaGVhcFJlbGF0aW9uLCBOb0xvY2spOwogfQpA QCAtMzUzNCw2ICszNzYyLDEyIEBAIGluZGV4X3NldF9zdGF0ZV9mbGFncyhPaWQgaW5kZXhJZCwg SW5kZXhTdGF0ZUZsYWdzQWN0aW9uIGFjdGlvbikKIAkJCUFzc2VydCghaW5kZXhGb3JtLT5pbmRp c3ZhbGlkKTsKIAkJCWluZGV4Rm9ybS0+aW5kaXN2YWxpZCA9IHRydWU7CiAJCQlicmVhazsKKwkJ Y2FzZSBJTkRFWF9EUk9QX0NMRUFSX1JFQURZOgorCQkJLyogQ2xlYXIgaW5kaXNyZWFkeSBkdXJp bmcgYSBDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIHNlcXVlbmNlICovCisJCQlBc3NlcnQoaW5k ZXhGb3JtLT5pbmRpc3JlYWR5KTsKKwkJCUFzc2VydCghaW5kZXhGb3JtLT5pbmRpc3ZhbGlkKTsK KwkJCWluZGV4Rm9ybS0+aW5kaXNyZWFkeSA9IGZhbHNlOworCQkJYnJlYWs7CiAJCWNhc2UgSU5E RVhfRFJPUF9DTEVBUl9WQUxJRDoKIAogCQkJLyoKQEAgLTM4MDUsNiArNDAzOSwxMyBAQCByZWlu ZGV4X2luZGV4KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgaW5kZXhJZCwKIAkJaW5kZXhJ bmZvLT5paV9FeGNsdXNpb25TdHJhdHMgPSBOVUxMOwogCX0KIAorCS8qIEF1eGlsaWFyeSBpbmRl eGVzIGFyZSBub3QgYWxsb3dlZCB0byBiZSByZWJ1aWx0ICovCisJaWYgKGluZGV4SW5mby0+aWlf QXV4aWxpYXJ5KQorCQllcmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJF X05PVF9TVVBQT1JURUQpLAorCQkJIGVycm1zZygicmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXgg XCIlc1wiIG5vdCBzdXBwb3J0ZWQiLAorCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpUmVs KSkpKTsKKwogCS8qIFN1cHByZXNzIHVzZSBvZiB0aGUgdGFyZ2V0IGluZGV4IHdoaWxlIHJlYnVp bGRpbmcgaXQgKi8KIAlTZXRSZWluZGV4UHJvY2Vzc2luZyhoZWFwSWQsIGluZGV4SWQpOwogCkBA IC00MDQ3LDYgKzQyODgsNyBAQCByZWluZGV4X3JlbGF0aW9uKGNvbnN0IFJlaW5kZXhTdG10ICpz dG10LCBPaWQgcmVsaWQsIGludCBmbGFncywKIAl7CiAJCU9pZAkJCWluZGV4T2lkID0gbGZpcnN0 X29pZChpbmRleElkKTsKIAkJT2lkCQkJaW5kZXhOYW1lc3BhY2VJZCA9IGdldF9yZWxfbmFtZXNw YWNlKGluZGV4T2lkKTsKKwkJT2lkCQkJaW5kZXhBbSA9IGdldF9yZWxfcmVsYW0oaW5kZXhPaWQp OwogCiAJCS8qCiAJCSAqIFNraXAgYW55IGludmFsaWQgaW5kZXhlcyBvbiBhIFRPQVNUIHRhYmxl LiAgVGhlc2UgY2FuIG9ubHkgYmUKQEAgLTQwNzIsNiArNDMxNCwxOCBAQCByZWluZGV4X3JlbGF0 aW9uKGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsaWQsIGludCBmbGFncywKIAkJCWNv bnRpbnVlOwogCQl9CiAKKwkJaWYgKGluZGV4QW0gPT0gU1RJUl9BTV9PSUQpCisJCXsKKwkJCWVy ZXBvcnQoV0FSTklORywKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JU RUQpLAorCQkJCQkgZXJybXNnKCJza2lwcGluZyByZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRleCBc IiVzLiVzXCIiLAorCQkJCQkJCWdldF9uYW1lc3BhY2VfbmFtZShpbmRleE5hbWVzcGFjZUlkKSwK KwkJCQkJCQlnZXRfcmVsX25hbWUoaW5kZXhPaWQpKSkpOworCQkJaWYgKGZsYWdzICYgUkVJTkRF WF9SRUxfU1VQUFJFU1NfSU5ERVhfVVNFKQorCQkJCVJlbW92ZVJlaW5kZXhQZW5kaW5nKGluZGV4 T2lkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJcmVpbmRleF9pbmRleChzdG10LCBpbmRleE9p ZCwgIShmbGFncyAmIFJFSU5ERVhfUkVMX0NIRUNLX0NPTlNUUkFJTlRTKSwKIAkJCQkJICBwZXJz aXN0ZW5jZSwgcGFyYW1zKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0 ZW1fdmlld3Muc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4 IGU1NDAxODAwNGRiLi4wODYzNGM0M2VhNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9zeXN0ZW1fdmlld3Muc3FsCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdz LnNxbApAQCAtMTM4OCwxNiArMTM4OCwxNyBAQCBDUkVBVEUgVklFVyBwZ19zdGF0X3Byb2dyZXNz X2NyZWF0ZV9pbmRleCBBUwogICAgICAgICAgICAgICAgICAgICAgIEVORCBBUyBjb21tYW5kLAog ICAgICAgICBDQVNFIFMucGFyYW0xMCBXSEVOIDAgVEhFTiAnaW5pdGlhbGl6aW5nJwogICAgICAg ICAgICAgICAgICAgICAgICBXSEVOIDEgVEhFTiAnd2FpdGluZyBmb3Igd3JpdGVycyBiZWZvcmUg YnVpbGQnCi0gICAgICAgICAgICAgICAgICAgICAgIFdIRU4gMiBUSEVOICdidWlsZGluZyBpbmRl eCcgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ3dhaXRpbmcgZm9yIHdy aXRlcnMgdG8gdXNlIGF1eGlsaWFyeSBpbmRleCcKKyAgICAgICAgICAgICAgICAgICAgICAgV0hF TiAzIFRIRU4gJ2J1aWxkaW5nIGluZGV4JyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAg Q09BTEVTQ0UoKCc6ICcgfHwgcGdfaW5kZXhhbV9wcm9ncmVzc19waGFzZW5hbWUoUy5wYXJhbTk6 Om9pZCwgUy5wYXJhbTExKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn JykKLSAgICAgICAgICAgICAgICAgICAgICAgV0hFTiAzIFRIRU4gJ3dhaXRpbmcgZm9yIHdyaXRl cnMgYmVmb3JlIHZhbGlkYXRpb24nCi0gICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNCBUSEVO ICdpbmRleCB2YWxpZGF0aW9uOiBzY2FubmluZyBpbmRleCcKLSAgICAgICAgICAgICAgICAgICAg ICAgV0hFTiA1IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IHNvcnRpbmcgdHVwbGVzJwotICAgICAg ICAgICAgICAgICAgICAgICBXSEVOIDYgVEhFTiAnaW5kZXggdmFsaWRhdGlvbjogc2Nhbm5pbmcg dGFibGUnCi0gICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNyBUSEVOICd3YWl0aW5nIGZvciBv bGQgc25hcHNob3RzJwotICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDggVEhFTiAnd2FpdGlu ZyBmb3IgcmVhZGVycyBiZWZvcmUgbWFya2luZyBkZWFkJwotICAgICAgICAgICAgICAgICAgICAg ICBXSEVOIDkgVEhFTiAnd2FpdGluZyBmb3IgcmVhZGVycyBiZWZvcmUgZHJvcHBpbmcnCisgICAg ICAgICAgICAgICAgICAgICAgIFdIRU4gNCBUSEVOICd3YWl0aW5nIGZvciB3cml0ZXJzIGJlZm9y ZSB2YWxpZGF0aW9uJworICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDUgVEhFTiAnaW5kZXgg dmFsaWRhdGlvbjogc2Nhbm5pbmcgaW5kZXgnCisgICAgICAgICAgICAgICAgICAgICAgIFdIRU4g NiBUSEVOICdpbmRleCB2YWxpZGF0aW9uOiBzb3J0aW5nIHR1cGxlcycKKyAgICAgICAgICAgICAg ICAgICAgICAgV0hFTiA3IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IG1lcmdpbmcgaW5kZXhlcycK KyAgICAgICAgICAgICAgICAgICAgICAgV0hFTiA4IFRIRU4gJ3dhaXRpbmcgZm9yIG9sZCBzbmFw c2hvdHMnCisgICAgICAgICAgICAgICAgICAgICAgIFdIRU4gOSBUSEVOICd3YWl0aW5nIGZvciBy ZWFkZXJzIGJlZm9yZSBtYXJraW5nIGRlYWQnCisgICAgICAgICAgICAgICAgICAgICAgIFdIRU4g MTAgVEhFTiAnd2FpdGluZyBmb3IgcmVhZGVycyBiZWZvcmUgZHJvcHBpbmcnCiAgICAgICAgICAg ICAgICAgICAgICAgIEVORCBhcyBwaGFzZSwKICAgICAgICAgUy5wYXJhbTQgQVMgbG9ja2Vyc190 b3RhbCwKICAgICAgICAgUy5wYXJhbTUgQVMgbG9ja2Vyc19kb25lLApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRl eGNtZHMuYwppbmRleCAzNzNlODIzNDc5NC4uZTA2MzUzZjNmZGUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2lu ZGV4Y21kcy5jCkBAIC0xODMsNiArMTgzLDcgQEAgQ2hlY2tJbmRleENvbXBhdGlibGUoT2lkIG9s ZElkLAogCQkJCQkgYm9vbCBpc1dpdGhvdXRPdmVybGFwcykKIHsKIAlib29sCQlpc2NvbnN0cmFp bnQ7CisJYm9vbAkJaXNhdXhpbGlhcnk7CiAJT2lkCQkgICAqdHlwZUlkczsKIAlPaWQJCSAgICpj b2xsYXRpb25JZHM7CiAJT2lkCQkgICAqb3BjbGFzc0lkczsKQEAgLTIzMyw2ICsyMzQsNyBAQCBD aGVja0luZGV4Q29tcGF0aWJsZShPaWQgb2xkSWQsCiAKIAlhbWNhbm9yZGVyID0gYW1Sb3V0aW5l LT5hbWNhbm9yZGVyOwogCWFtc3VtbWFyaXppbmcgPSBhbVJvdXRpbmUtPmFtc3VtbWFyaXppbmc7 CisJaXNhdXhpbGlhcnkgPSBhY2Nlc3NNZXRob2RJZCA9PSBTVElSX0FNX09JRDsKIAogCS8qCiAJ ICogQ29tcHV0ZSB0aGUgb3BlcmF0b3IgY2xhc3NlcywgY29sbGF0aW9ucywgYW5kIGV4Y2x1c2lv biBvcGVyYXRvcnMgZm9yCkBAIC0yNDQsNyArMjQ2LDggQEAgQ2hlY2tJbmRleENvbXBhdGlibGUo T2lkIG9sZElkLAogCSAqLwogCWluZGV4SW5mbyA9IG1ha2VJbmRleEluZm8obnVtYmVyT2ZBdHRy aWJ1dGVzLCBudW1iZXJPZkF0dHJpYnV0ZXMsCiAJCQkJCQkJICBhY2Nlc3NNZXRob2RJZCwgTklM LCBOSUwsIGZhbHNlLCBmYWxzZSwKLQkJCQkJCQkgIGZhbHNlLCBmYWxzZSwgYW1zdW1tYXJpemlu ZywgaXNXaXRob3V0T3ZlcmxhcHMpOworCQkJCQkJCSAgZmFsc2UsIGZhbHNlLCBhbXN1bW1hcml6 aW5nLAorCQkJCQkJCSAgaXNXaXRob3V0T3ZlcmxhcHMsIGlzYXV4aWxpYXJ5KTsKIAl0eXBlSWRz ID0gcGFsbG9jX2FycmF5KE9pZCwgbnVtYmVyT2ZBdHRyaWJ1dGVzKTsKIAljb2xsYXRpb25JZHMg PSBwYWxsb2NfYXJyYXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwogCW9wY2xhc3NJZHMgPSBw YWxsb2NfYXJyYXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwpAQCAtNTU3LDYgKzU2MCw3IEBA IERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIHsKIAlib29sCQljb25jdXJyZW50Owog CWNoYXIJICAgKmluZGV4UmVsYXRpb25OYW1lOworCWNoYXIJICAgKmF1eEluZGV4UmVsYXRpb25O YW1lID0gTlVMTDsKIAljaGFyCSAgICphY2Nlc3NNZXRob2ROYW1lOwogCU9pZAkJICAgKnR5cGVJ ZHM7CiAJT2lkCQkgICAqY29sbGF0aW9uSWRzOwpAQCAtNTY2LDYgKzU3MCw3IEBAIERlZmluZUlu ZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlPaWQJCQluYW1lc3BhY2VJZDsKIAlPaWQJCQl0YWJs ZXNwYWNlSWQ7CiAJT2lkCQkJY3JlYXRlZENvbnN0cmFpbnRJZCA9IEludmFsaWRPaWQ7CisJT2lk CQkJYXV4SW5kZXhSZWxhdGlvbklkID0gSW52YWxpZE9pZDsKIAlMaXN0CSAgICppbmRleENvbE5h bWVzOwogCUxpc3QJICAgKmFsbEluZGV4UGFyYW1zOwogCVJlbGF0aW9uCXJlbDsKQEAgLTU4Nyw2 ICs1OTIsNyBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJaW50CQkJbnVtYmVy T2ZLZXlBdHRyaWJ1dGVzOwogCVRyYW5zYWN0aW9uSWQgbGltaXRYbWluOwogCU9iamVjdEFkZHJl c3MgYWRkcmVzczsKKwlPYmplY3RBZGRyZXNzIGF1eEFkZHJlc3M7CiAJTG9ja1JlbElkCWhlYXBy ZWxpZDsKIAlMT0NLVEFHCQloZWFwbG9ja3RhZzsKIAlMT0NLTU9ERQlsb2NrbW9kZTsKQEAgLTgz Nyw2ICs4NDMsMTUgQEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQkJ CQlzdG10LT5leGNsdWRlT3BOYW1lcywKIAkJCQkJCQkJCQkJc3RtdC0+cHJpbWFyeSwKIAkJCQkJ CQkJCQkJc3RtdC0+aXNjb25zdHJhaW50KTsKKwkvKgorCSAqIFNlbGVjdCBuYW1lIGZvciBhdXhp bGlhcnkgaW5kZXgKKwkgKi8KKwlpZiAoY29uY3VycmVudCkKKwkJYXV4SW5kZXhSZWxhdGlvbk5h bWUgPSBDaG9vc2VSZWxhdGlvbk5hbWUoaW5kZXhSZWxhdGlvbk5hbWUsCisJCQkJCQkJCQkJCQkg IE5VTEwsCisJCQkJCQkJCQkJCQkgICJjY2F1eCIsCisJCQkJCQkJCQkJCQkgIG5hbWVzcGFjZUlk LAorCQkJCQkJCQkJCQkJICBmYWxzZSk7CiAKIAkvKgogCSAqIGxvb2sgdXAgdGhlIGFjY2VzcyBt ZXRob2QsIHZlcmlmeSBpdCBjYW4gaGFuZGxlIHRoZSByZXF1ZXN0ZWQgZmVhdHVyZXMKQEAgLTkz MSw3ICs5NDYsOCBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJICAh Y29uY3VycmVudCwKIAkJCQkJCQkgIGNvbmN1cnJlbnQsCiAJCQkJCQkJICBhbWlzc3VtbWFyaXpp bmcsCi0JCQkJCQkJICBzdG10LT5pc3dpdGhvdXRvdmVybGFwcyk7CisJCQkJCQkJICBzdG10LT5p c3dpdGhvdXRvdmVybGFwcywKKwkJCQkJCQkgIGZhbHNlKTsKIAogCXR5cGVJZHMgPSBwYWxsb2Nf YXJyYXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwogCWNvbGxhdGlvbklkcyA9IHBhbGxvY19h cnJheShPaWQsIG51bWJlck9mQXR0cmlidXRlcyk7CkBAIC0xNjAzLDYgKzE2MTksMTYgQEAgRGVm aW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQlyZXR1cm4gYWRkcmVzczsKIAl9CiAKKwkv KgorCSAqIEluIGNhc2Ugb2YgY29uY3VycmVudCBidWlsZCAtIGNyZWF0ZSBhdXhpbGlhcnkgaW5k ZXggcmVjb3JkLgorCSAqLworCWlmIChjb25jdXJyZW50KQorCXsKKwkJYXV4SW5kZXhSZWxhdGlv bklkID0gaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9hdXgocmVsLCBpbmRleFJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCXRhYmxlc3BhY2VJZCwgYXV4SW5kZXhSZWxhdGlvbk5hbWUpOworCQlPYmpl Y3RBZGRyZXNzU2V0KGF1eEFkZHJlc3MsIFJlbGF0aW9uUmVsYXRpb25JZCwgYXV4SW5kZXhSZWxh dGlvbklkKTsKKwl9CisKIAlBdEVPWGFjdF9HVUMoZmFsc2UsIHJvb3Rfc2F2ZV9uZXN0bGV2ZWwp OwogCVNldFVzZXJJZEFuZFNlY0NvbnRleHQocm9vdF9zYXZlX3VzZXJpZCwgcm9vdF9zYXZlX3Nl Y19jb250ZXh0KTsKIApAQCAtMTYzMSwxMSArMTY1NywxMSBAQCBEZWZpbmVJbmRleChQYXJzZVN0 YXRlICpwc3RhdGUsCiAJLyoKIAkgKiBGb3IgYSBjb25jdXJyZW50IGJ1aWxkLCBpdCdzIGltcG9y dGFudCB0byBtYWtlIHRoZSBjYXRhbG9nIGVudHJpZXMKIAkgKiB2aXNpYmxlIHRvIG90aGVyIHRy YW5zYWN0aW9ucyBiZWZvcmUgd2Ugc3RhcnQgdG8gYnVpbGQgdGhlIGluZGV4LiBUaGF0Ci0JICog d2lsbCBwcmV2ZW50IHRoZW0gZnJvbSBtYWtpbmcgaW5jb21wYXRpYmxlIEhPVCB1cGRhdGVzLiAg VGhlIG5ldyBpbmRleAotCSAqIHdpbGwgYmUgbWFya2VkIG5vdCBpbmRpc3JlYWR5IGFuZCBub3Qg aW5kaXN2YWxpZCwgc28gdGhhdCBubyBvbmUgZWxzZQotCSAqIHRyaWVzIHRvIGVpdGhlciBpbnNl cnQgaW50byBpdCBvciB1c2UgaXQgZm9yIHF1ZXJpZXMuCisJICogd2lsbCBwcmV2ZW50IHRoZW0g ZnJvbSBtYWtpbmcgaW5jb21wYXRpYmxlIEhPVCB1cGRhdGVzLiBOZXcgaW5kZXhlcworCSAqICht YWluIGFuZCBhdXhpbGlhcnkpIHdpbGwgYmUgbWFya2VkIG5vdCBpbmRpc3JlYWR5IGFuZCBub3Qg aW5kaXN2YWxpZCwKKwkgKiBzbyB0aGF0IG5vIG9uZSBlbHNlIHRyaWVzIHRvIGVpdGhlciBpbnNl cnQgaW50byBpdCBvciB1c2UgaXQgZm9yIHF1ZXJpZXMuCiAJICoKLQkgKiBXZSBtdXN0IGNvbW1p dCBvdXIgY3VycmVudCB0cmFuc2FjdGlvbiBzbyB0aGF0IHRoZSBpbmRleCBiZWNvbWVzCisJICog V2UgbXVzdCBjb21taXQgb3VyIGN1cnJlbnQgdHJhbnNhY3Rpb24gc28gdGhhdCB0aGUgaW5kZXhl cyBiZWNvbWVzCiAJICogdmlzaWJsZTsgdGhlbiBzdGFydCBhbm90aGVyLiAgTm90ZSB0aGF0IGFs bCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHdlIGp1c3QKIAkgKiBidWlsdCBhcmUgbG9zdCBpbiB0aGUg Y29tbWl0LiAgVGhlIG9ubHkgZGF0YSB3ZSBrZWVwIHBhc3QgaGVyZSBhcmUgdGhlCiAJICogcmVs YXRpb24gSURzLgpAQCAtMTY0NSw3ICsxNjcxLDcgQEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAq cHN0YXRlLAogCSAqIGNhbm5vdCBibG9jaywgZXZlbiBpZiBzb21lb25lIGVsc2UgaXMgd2FpdGlu ZyBmb3IgYWNjZXNzLCBiZWNhdXNlIHdlCiAJICogYWxyZWFkeSBoYXZlIHRoZSBzYW1lIGxvY2sg d2l0aGluIG91ciB0cmFuc2FjdGlvbi4KIAkgKgotCSAqIE5vdGU6IHdlIGRvbid0IGN1cnJlbnRs eSBib3RoZXIgd2l0aCBhIHNlc3Npb24gbG9jayBvbiB0aGUgaW5kZXgsCisJICogTm90ZTogd2Ug ZG9uJ3QgY3VycmVudGx5IGJvdGhlciB3aXRoIGEgc2Vzc2lvbiBsb2NrIG9uIHRoZSBpbmRleGVz LAogCSAqIGJlY2F1c2UgdGhlcmUgYXJlIG5vIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCBjaGFuZ2Ug aXRzIHN0YXRlIHdoaWxlIHdlCiAJICogaG9sZCBsb2NrIG9uIHRoZSBwYXJlbnQgdGFibGUuICBU aGlzIG1pZ2h0IG5lZWQgdG8gY2hhbmdlIGxhdGVyLgogCSAqLwpAQCAtMTY4NCw3ICsxNzEwLDcg QEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCSAqIHdpdGggdGhlIG9sZCBsaXN0 IG9mIGluZGV4ZXMuICBVc2UgU2hhcmVMb2NrIHRvIGNvbnNpZGVyIHJ1bm5pbmcKIAkgKiB0cmFu c2FjdGlvbnMgdGhhdCBob2xkIGxvY2tzIHRoYXQgcGVybWl0IHdyaXRpbmcgdG8gdGhlIHRhYmxl LiAgTm90ZSB3ZQogCSAqIGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IHhhY3RzIHRoYXQgb3Bl biB0aGUgdGFibGUgZm9yIHdyaXRpbmcgYWZ0ZXIKLQkgKiB0aGlzIHBvaW50OyB0aGV5IHdpbGwg c2VlIHRoZSBuZXcgaW5kZXggd2hlbiB0aGV5IG9wZW4gaXQuCisJICogdGhpcyBwb2ludDsgdGhl eSB3aWxsIHNlZSB0aGUgbmV3IGluZGV4ZXMgd2hlbiB0aGV5IG9wZW4gaXQuCiAJICoKIAkgKiBO b3RlOiB0aGUgcmVhc29uIHdlIHVzZSBhY3R1YWwgbG9jayBhY3F1aXNpdGlvbiBoZXJlLCByYXRo ZXIgdGhhbiBqdXN0CiAJICogY2hlY2tpbmcgdGhlIFByb2NBcnJheSBhbmQgc2xlZXBpbmcsIGlz IHRoYXQgZGVhZGxvY2sgaXMgcG9zc2libGUgaWYKQEAgLTE2OTYsMTQgKzE3MjIsNDQgQEAgRGVm aW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCiAJLyoKIAkgKiBBdCB0aGlzIG1vbWVudCB3 ZSBhcmUgc3VyZSB0aGF0IHRoZXJlIGFyZSBubyB0cmFuc2FjdGlvbnMgd2l0aCB0aGUKLQkgKiB0 YWJsZSBvcGVuIGZvciB3cml0ZSB0aGF0IGRvbid0IGhhdmUgdGhpcyBuZXcgaW5kZXggaW4gdGhl aXIgbGlzdCBvZgorCSAqIHRhYmxlIG9wZW4gZm9yIHdyaXRlIHRoYXQgZG9uJ3QgaGF2ZSB0aGlz IG5ldyBpbmRleGVzIGluIHRoZWlyIGxpc3Qgb2YKIAkgKiBpbmRleGVzLiAgV2UgaGF2ZSB3YWl0 ZWQgb3V0IGFsbCB0aGUgZXhpc3RpbmcgdHJhbnNhY3Rpb25zIGFuZCBhbnkgbmV3Ci0JICogdHJh bnNhY3Rpb24gd2lsbCBoYXZlIHRoZSBuZXcgaW5kZXggaW4gaXRzIGxpc3QsIGJ1dCB0aGUgaW5k ZXggaXMgc3RpbGwKLQkgKiBtYXJrZWQgYXMgIm5vdC1yZWFkeS1mb3ItaW5zZXJ0cyIuICBUaGUg aW5kZXggaXMgY29uc3VsdGVkIHdoaWxlCisJICogdHJhbnNhY3Rpb24gd2lsbCBoYXZlIGJvdGgg bmV3IGluZGV4ZXMgaW4gaXRzIGxpc3QsIGJ1dCBpbmRleGVzIGFyZSBzdGlsbAorCSAqIG1hcmtl ZCBhcyAibm90LXJlYWR5LWZvci1pbnNlcnRzIi4gVGhlIGluZGV4ZXMgYXJlIGNvbnN1bHRlZCB3 aGlsZQogCSAqIGRlY2lkaW5nIEhPVC1zYWZldHkgdGhvdWdoLiAgVGhpcyBhcnJhbmdlbWVudCBl bnN1cmVzIHRoYXQgbm8gbmV3IEhPVAogCSAqIGNoYWlucyBjYW4gYmUgY3JlYXRlZCB3aGVyZSB0 aGUgbmV3IHR1cGxlIGFuZCB0aGUgb2xkIHR1cGxlIGluIHRoZQogCSAqIGNoYWluIGhhdmUgZGlm ZmVyZW50IGluZGV4IGtleXMuCiAJICoKKwkgKiBOb3cgY2FsbCBidWlsZCBvbiBhdXhpbGlhcnkg aW5kZXguIEluZGV4IHdpbGwgYmUgY3JlYXRlZCBlbXB0eSB3aXRob3V0CisJICogYW55IGFjdHVh bCBoZWFwIHNjYW4sIGJ1dCBtYXJrZWQgYXMgInJlYWR5LWZvci1pbnNlcnRzIi4gVGhlIGdvYWwg b2YKKwkgKiB0aGF0IGluZGV4IGlzIGFjY3VtdWxhdGUgbmV3IHR1cGxlcyB3aGlsZSBtYWluIGlu ZGV4IGlzIGFjdHVhbGx5IGJ1aWx0LgorCSAqLworCisJLyogU2V0IEFjdGl2ZVNuYXBzaG90IHNp bmNlIGZ1bmN0aW9ucyBpbiB0aGUgaW5kZXhlcyBtYXkgbmVlZCBpdCAqLworCVB1c2hBY3RpdmVT bmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCisJaW5kZXhfY29uY3VycmVudGx5 X2J1aWxkKHRhYmxlSWQsIGF1eEluZGV4UmVsYXRpb25JZCk7CisJLyogd2UgY2FuIGRvIGF3YXkg d2l0aCBvdXIgc25hcHNob3QgKi8KKwlQb3BBY3RpdmVTbmFwc2hvdCgpOworCisJQ29tbWl0VHJh bnNhY3Rpb25Db21tYW5kKCk7CisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8qIFRl bGwgY29uY3VycmVudCBpbmRleCBidWlsZHMgdG8gaWdub3JlIHVzLCBpZiBpbmRleCBxdWFsaWZp ZXMgKi8KKwlpZiAoc2FmZV9pbmRleCkKKwkJc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MoKTsKKwlw Z3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKKwkJ CQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMik7CisJLyoKKwkgKiBOb3cgd2Ug bmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHRyYW5zYWN0aW9ucyB3aXRoIHRoZSBhdXhpbGlh cnkgaW5kZXgKKwkgKiBtYXJrZWQgYXMgIm5vdC1yZWFkeS1mb3ItaW5zZXJ0cyIuCisJICovCisJ V2FpdEZvckxvY2tlcnMoaGVhcGxvY2t0YWcsIFNoYXJlTG9jaywgdHJ1ZSk7CisKKwkvKgorCSAq IEF0IHRoaXMgbW9tZW50IHdlIGFyZSBzdXJlIHRoYXQgYWxsIG5ldyB0dXBsZXMgaW4gdGFibGUg YXJlIGluc2VydGVkIGludG8KKwkgKiB0aGUgYXV4aWxpYXJ5IGluZGV4LiBOb3cgaXQgaXMgdGlt ZSB0byBidWlsZCB0aGUgdGFyZ2V0IGluZGV4IGl0c2VsZi4KKwkgKgogCSAqIFdlIG5vdyB0YWtl IGEgbmV3IHNuYXBzaG90LCBhbmQgYnVpbGQgdGhlIGluZGV4IHVzaW5nIGFsbCB0dXBsZXMgdGhh dAogCSAqIGFyZSB2aXNpYmxlIGluIHRoaXMgc25hcHNob3QuICBXZSBjYW4gYmUgc3VyZSB0aGF0 IGFueSBIT1QgdXBkYXRlcyB0bwogCSAqIHRoZXNlIHR1cGxlcyB3aWxsIGJlIGNvbXBhdGlibGUg d2l0aCB0aGUgaW5kZXgsIHNpbmNlIGFueSB1cGRhdGVzIG1hZGUKQEAgLTE3MzgsOSArMTc5NCwy OCBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJICogdGhlIGluZGV4IG1hcmtl ZCBhcyByZWFkLW9ubHkgZm9yIHVwZGF0ZXMuCiAJICovCiAJcGdzdGF0X3Byb2dyZXNzX3VwZGF0 ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0UsCi0JCQkJCQkJCSBQUk9HUkVTU19DUkVB VEVJRFhfUEhBU0VfV0FJVF8yKTsKKwkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9X QUlUXzMpOwogCVdhaXRGb3JMb2NrZXJzKGhlYXBsb2NrdGFnLCBTaGFyZUxvY2ssIHRydWUpOwog CisJLyoKKwkgKiBVcGRhdGluZyBwZ19pbmRleCBtaWdodCBpbnZvbHZlIFRPQVNUIHRhYmxlIGFj Y2Vzcywgc28gZW5zdXJlIHdlCisJICogaGF2ZSBhIHZhbGlkIHNuYXBzaG90LgorCSAqLworCVB1 c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCS8qCisJICogTm93 IHRhcmdldCBpbmRleCBpcyBtYXJrZWQgYXMgInJlYWR5IiBmb3IgYWxsIHRyYW5zYWN0aW9ucy4g U28sIGF1eGlsaWFyeQorCSAqIGluZGV4IGlzIG5vIGxvbmdlciBuZWVkZWQuIFNvLCBzdGFydCBy ZW1vdmluZyBwcm9jZXNzIGJ5IHJldmVydGluZyAicmVhZHkiCisJICogZmxhZy4KKwkgKi8KKwlp bmRleF9zZXRfc3RhdGVfZmxhZ3MoYXV4SW5kZXhSZWxhdGlvbklkLCBJTkRFWF9EUk9QX0NMRUFS X1JFQURZKTsKKwlQb3BBY3RpdmVTbmFwc2hvdCgpOworCisJQ29tbWl0VHJhbnNhY3Rpb25Db21t YW5kKCk7CisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkvKiBUZWxsIGNvbmN1cnJlbnQg aW5kZXggYnVpbGRzIHRvIGlnbm9yZSB1cywgaWYgaW5kZXggcXVhbGlmaWVzICovCisJaWYgKHNh ZmVfaW5kZXgpCisJCXNldF9pbmRleHNhZmVfcHJvY2ZsYWdzKCk7CisKIAkvKgogCSAqIE5vdyB0 YWtlIHRoZSAicmVmZXJlbmNlIHNuYXBzaG90IiB0aGF0IHdpbGwgYmUgdXNlZCBieSB2YWxpZGF0 ZV9pbmRleCgpCiAJICogdG8gZmlsdGVyIGNhbmRpZGF0ZSB0dXBsZXMuICBCZXdhcmUhICBUaGVy ZSBtaWdodCBzdGlsbCBiZSBzbmFwc2hvdHMgaW4KQEAgLTE3NTgsMjQgKzE4MzMsMTQgQEAgRGVm aW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCSAqLwogCXNuYXBzaG90ID0gUmVnaXN0ZXJT bmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogCVB1c2hBY3RpdmVTbmFwc2hvdChz bmFwc2hvdCk7Ci0KIAkvKgotCSAqIFNjYW4gdGhlIGluZGV4IGFuZCB0aGUgaGVhcCwgaW5zZXJ0 IGFueSBtaXNzaW5nIGluZGV4IGVudHJpZXMuCi0JICovCi0JdmFsaWRhdGVfaW5kZXgodGFibGVJ ZCwgaW5kZXhSZWxhdGlvbklkLCBzbmFwc2hvdCk7Ci0KLQkvKgotCSAqIERyb3AgdGhlIHJlZmVy ZW5jZSBzbmFwc2hvdC4gIFdlIG11c3QgZG8gdGhpcyBiZWZvcmUgd2FpdGluZyBvdXQgb3RoZXIK LQkgKiBzbmFwc2hvdCBob2xkZXJzLCBlbHNlIHdlIHdpbGwgZGVhZGxvY2sgYWdhaW5zdCBvdGhl ciBwcm9jZXNzZXMgYWxzbwotCSAqIGRvaW5nIENSRUFURSBJTkRFWCBDT05DVVJSRU5UTFksIHdo aWNoIHdvdWxkIHNlZSBvdXIgc25hcHNob3QgYXMgb25lCi0JICogdGhleSBtdXN0IHdhaXQgZm9y LiAgQnV0IGZpcnN0LCBzYXZlIHRoZSBzbmFwc2hvdCdzIHhtaW4gdG8gdXNlIGFzCi0JICogbGlt aXRYbWluIGZvciBHZXRDdXJyZW50VmlydHVhbFhJRHMoKS4KKwkgKiBNZXJnZSBjb250ZW50IG9m IGF1eGlsaWFyeSBhbmQgdGFyZ2V0IGluZGV4ZXMgLSBpbnNlcnQgYW55IG1pc3NpbmcgaW5kZXgg ZW50cmllcy4KIAkgKi8KKwl2YWxpZGF0ZV9pbmRleCh0YWJsZUlkLCBpbmRleFJlbGF0aW9uSWQs IGF1eEluZGV4UmVsYXRpb25JZCwgc25hcHNob3QpOwogCWxpbWl0WG1pbiA9IHNuYXBzaG90LT54 bWluOwogCiAJUG9wQWN0aXZlU25hcHNob3QoKTsKIAlVbnJlZ2lzdGVyU25hcHNob3Qoc25hcHNo b3QpOwotCiAJLyoKIAkgKiBUaGUgc25hcHNob3Qgc3Vic3lzdGVtIGNvdWxkIHN0aWxsIGNvbnRh aW4gcmVnaXN0ZXJlZCBzbmFwc2hvdHMgdGhhdAogCSAqIGFyZSBob2xkaW5nIGJhY2sgb3VyIHBy b2Nlc3MncyBhZHZlcnRpc2VkIHhtaW47IGluIHBhcnRpY3VsYXIsIGlmCkBAIC0xODAyLDcgKzE4 NjcsNyBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJICovCiAJSU5KRUNUSU9O X1BPSU5UKCJkZWZpbmUtaW5kZXgtYmVmb3JlLXNldC12YWxpZCIsIE5VTEwpOwogCXBnc3RhdF9w cm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAotCQkJCQkJCQkg UFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMyk7CisJCQkJCQkJCSBQUk9HUkVTU19DUkVB VEVJRFhfUEhBU0VfV0FJVF80KTsKIAlXYWl0Rm9yT2xkZXJTbmFwc2hvdHMobGltaXRYbWluLCB0 cnVlKTsKIAogCS8qCkBAIC0xODI3LDYgKzE4OTIsNTMgQEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0 ZSAqcHN0YXRlLAogCSAqIHRvIHJlcGxhbjsgc28gcmVsY2FjaGUgZmx1c2ggb24gdGhlIGluZGV4 IGl0c2VsZiB3YXMgc3VmZmljaWVudC4pCiAJICovCiAJQ2FjaGVJbnZhbGlkYXRlUmVsY2FjaGVC eVJlbGlkKGhlYXByZWxpZC5yZWxJZCk7CisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJ U3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8qIFRlbGwgY29uY3VycmVudCBpbmRleCBi dWlsZHMgdG8gaWdub3JlIHVzLCBpZiBpbmRleCBxdWFsaWZpZXMgKi8KKwlpZiAoc2FmZV9pbmRl eCkKKwkJc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MoKTsKKworCXBnc3RhdF9wcm9ncmVzc191cGRh dGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAorCQkJCQkJCSBQUk9HUkVTU19DUkVB VEVJRFhfUEhBU0VfV0FJVF81KTsKKwkvKiBOb3cgd2FpdCBmb3IgYWxsIHRyYW5zYWN0aW9uIHRv IHNlZSBhdXhpbGlhcnkgYXMgIm5vbi1yZWFkeSBmb3IgaW5zZXJ0cyIgKi8KKwlXYWl0Rm9yTG9j a2VycyhoZWFwbG9ja3RhZywgQWNjZXNzRXhjbHVzaXZlTG9jaywgdHJ1ZSk7CisKKwlDb21taXRU cmFuc2FjdGlvbkNvbW1hbmQoKTsKKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJLyoK KwkgKiBVcGRhdGluZyBwZ19pbmRleCBtaWdodCBpbnZvbHZlIFRPQVNUIHRhYmxlIGFjY2Vzcywg c28gZW5zdXJlIHdlCisJICogaGF2ZSBhIHZhbGlkIHNuYXBzaG90LgorCSAqLworCVB1c2hBY3Rp dmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCS8qIE5vdyBpdCBpcyB0aW1l IHRvIG1hcmsgYXV4aWxpYXJ5IGluZGV4IGFzIGRlYWQgKi8KKwlpbmRleF9jb25jdXJyZW50bHlf c2V0X2RlYWQodGFibGVJZCwgYXV4SW5kZXhSZWxhdGlvbklkKTsKKwlQb3BBY3RpdmVTbmFwc2hv dCgpOworCisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJU3RhcnRUcmFuc2FjdGlvbkNv bW1hbmQoKTsKKworCS8qIFRlbGwgY29uY3VycmVudCBpbmRleCBidWlsZHMgdG8gaWdub3JlIHVz LCBpZiBpbmRleCBxdWFsaWZpZXMgKi8KKwlpZiAoc2FmZV9pbmRleCkKKwkJc2V0X2luZGV4c2Fm ZV9wcm9jZmxhZ3MoKTsKKworCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1Nf Q1JFQVRFSURYX1BIQVNFLAorCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF82 KTsKKwkvKiBOb3cgd2FpdCBmb3IgYWxsIHRyYW5zYWN0aW9uIHRvIGlnbm9yZSBhdXhpbGlhcnkg YmVjYXVzZSBpdCBpcyBkZWFkICovCisJV2FpdEZvckxvY2tlcnMoaGVhcGxvY2t0YWcsIEFjY2Vz c0V4Y2x1c2l2ZUxvY2ssIHRydWUpOworCisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJ U3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8qCisJICogRHJvcCBhdXhpbGlhcnkgaW5k ZXguCisJICoKKwkgKiBVc2UgUEVSRk9STV9ERUxFVElPTl9DT05DVVJSRU5UX0xPQ0sgc28gdGhh dCBpbmRleF9kcm9wKCkgdXNlcyB0aGUKKwkgKiByaWdodCBsb2NrIGxldmVsLgorCSAqLworCXBl cmZvcm1EZWxldGlvbigmYXV4QWRkcmVzcywgRFJPUF9SRVNUUklDVCwKKwkJCQkJCQkgUEVSRk9S TV9ERUxFVElPTl9DT05DVVJSRU5UX0xPQ0sgfCBQRVJGT1JNX0RFTEVUSU9OX0lOVEVSTkFMKTsK IAogCS8qCiAJICogTGFzdCB0aGluZyB0byBkbyBpcyByZWxlYXNlIHRoZSBzZXNzaW9uLWxldmVs IGxvY2sgb24gdGhlIHBhcmVudCB0YWJsZS4KQEAgLTM1OTgsNiArMzcxMCw3IEBAIFJlaW5kZXhS ZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9u T2lkLCBjb25zdCBSZWluCiAJdHlwZWRlZiBzdHJ1Y3QgUmVpbmRleEluZGV4SW5mbwogCXsKIAkJ T2lkCQkJaW5kZXhJZDsKKwkJT2lkCQkJYXV4SW5kZXhJZDsKIAkJT2lkCQkJdGFibGVJZDsKIAkJ T2lkCQkJYW1JZDsKIAkJYm9vbAkJc2FmZTsJCS8qIGZvciBzZXRfaW5kZXhzYWZlX3Byb2NmbGFn cyAqLwpAQCAtMzcwMyw4ICszODE2LDE1IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShj b25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCQkJ CU9pZAkJCWNlbGxPaWQgPSBsZmlyc3Rfb2lkKGxjKTsKIAkJCQkJUmVsYXRpb24JaW5kZXhSZWxh dGlvbiA9IGluZGV4X29wZW4oY2VsbE9pZCwKIAkJCQkJCQkJCQkJCQkJICAgU2hhcmVVcGRhdGVF eGNsdXNpdmVMb2NrKTsKKwkJCQkJSW5kZXhJbmZvKglpbmRleEluZm8gPSBCdWlsZER1bW15SW5k ZXhJbmZvKGluZGV4UmVsYXRpb24pOwogCi0JCQkJCWlmICghaW5kZXhSZWxhdGlvbi0+cmRfaW5k ZXgtPmluZGlzdmFsaWQpCisKKwkJCQkJaWYgKGluZGV4SW5mby0+aWlfQXV4aWxpYXJ5KQorCQkJ CQkJZXJlcG9ydChXQVJOSU5HLChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVE KSwKKwkJCQkJCQkgZXJybXNnKCJza2lwcGluZyByZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRleCBc IiVzLiVzXCIiLAorCQkJCQkJCQkJZ2V0X25hbWVzcGFjZV9uYW1lKGdldF9yZWxfbmFtZXNwYWNl KGNlbGxPaWQpKSwKKwkJCQkJCQkJCWdldF9yZWxfbmFtZShjZWxsT2lkKSkpKTsKKwkJCQkJZWxz ZSBpZiAoIWluZGV4UmVsYXRpb24tPnJkX2luZGV4LT5pbmRpc3ZhbGlkKQogCQkJCQkJZXJlcG9y dChXQVJOSU5HLAogCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVR VUlTSVRFX1NUQVRFKSwKIAkJCQkJCQkJIGVycm1zZygic2tpcHBpbmcgcmVpbmRleCBvZiBpbnZh bGlkIGluZGV4IFwiJXMuJXNcIiIsCkBAIC0zNzU2LDggKzM4NzYsMTUgQEAgUmVpbmRleFJlbGF0 aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQs IGNvbnN0IFJlaW4KIAkJCQkJCU9pZAkJCWNlbGxPaWQgPSBsZmlyc3Rfb2lkKGxjMik7CiAJCQkJ CQlSZWxhdGlvbglpbmRleFJlbGF0aW9uID0gaW5kZXhfb3BlbihjZWxsT2lkLAogCQkJCQkJCQkJ CQkJCQkJICAgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKKwkJCQkJCUluZGV4SW5mbyoJaW5k ZXhJbmZvID0gQnVpbGREdW1teUluZGV4SW5mbyhpbmRleFJlbGF0aW9uKTsKIAotCQkJCQkJaWYg KCFpbmRleFJlbGF0aW9uLT5yZF9pbmRleC0+aW5kaXN2YWxpZCkKKwkJCQkJCWlmIChpbmRleElu Zm8tPmlpX0F1eGlsaWFyeSkKKwkJCQkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCQkJCQkoZXJy Y29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCQkJCQkgZXJybXNnKCJz a2lwcGluZyByZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRleCBcIiVzLiVzXCIiLAorCQkJCQkJCQkJ CQlnZXRfbmFtZXNwYWNlX25hbWUoZ2V0X3JlbF9uYW1lc3BhY2UoY2VsbE9pZCkpLAorCQkJCQkJ CQkJCQlnZXRfcmVsX25hbWUoY2VsbE9pZCkpKSk7CisJCQkJCQllbHNlIGlmICghaW5kZXhSZWxh dGlvbi0+cmRfaW5kZXgtPmluZGlzdmFsaWQpCiAJCQkJCQkJZXJlcG9ydChXQVJOSU5HLAogCQkJ CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSks CiAJCQkJCQkJCQkgZXJybXNnKCJza2lwcGluZyByZWluZGV4IG9mIGludmFsaWQgaW5kZXggXCIl cy4lc1wiIiwKQEAgLTM4MTgsNiArMzk0NSwxMyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50 bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgog CQkJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkJCQkg ZXJybXNnKCJjYW5ub3QgcmVpbmRleCBpbnZhbGlkIGluZGV4IG9uIFRPQVNUIHRhYmxlIikpKTsK IAorCQkJCS8qIEF1eGlsaWFyeSBpbmRleGVzIGFyZSBub3QgYWxsb3dlZCB0byBiZSByZWJ1aWx0 ICovCisJCQkJaWYgKGdldF9yZWxfcmVsYW0ocmVsYXRpb25PaWQpID09IFNUSVJfQU1fT0lEKQor CQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9T VVBQT1JURUQpLAorCQkJCQkJIGVycm1zZygicmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggXCIl c1wiIG5vdCBzdXBwb3J0ZWQiLAorCQkJCQkJCQlnZXRfcmVsX25hbWUocmVsYXRpb25PaWQpKSkp OworCiAJCQkJLyoKIAkJCQkgKiBDaGVjayBpZiBwYXJlbnQgcmVsYXRpb24gY2FuIGJlIGxvY2tl ZCBhbmQgaWYgaXQgZXhpc3RzLAogCQkJCSAqIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhdCB0aGlz IHN0YWdlIGFzIHRoZSBsaXN0IG9mIGluZGV4ZXMKQEAgLTM5MjEsMTUgKzQwNTUsMTggQEAgUmVp bmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVs YXRpb25PaWQsIGNvbnN0IFJlaW4KIAlmb3JlYWNoKGxjLCBpbmRleElkcykKIAl7CiAJCWNoYXIJ ICAgKmNvbmN1cnJlbnROYW1lOworCQljaGFyCSAgICphdXhDb25jdXJyZW50TmFtZTsKIAkJUmVp bmRleEluZGV4SW5mbyAqaWR4ID0gbGZpcnN0KGxjKTsKIAkJUmVpbmRleEluZGV4SW5mbyAqbmV3 aWR4OwogCQlPaWQJCQluZXdJbmRleElkOworCQlPaWQJCQlhdXhJbmRleElkOwogCQlSZWxhdGlv bglpbmRleFJlbDsKIAkJUmVsYXRpb24JaGVhcFJlbDsKIAkJT2lkCQkJc2F2ZV91c2VyaWQ7CiAJ CWludAkJCXNhdmVfc2VjX2NvbnRleHQ7CiAJCWludAkJCXNhdmVfbmVzdGxldmVsOwogCQlSZWxh dGlvbgluZXdJbmRleFJlbDsKKwkJUmVsYXRpb24JYXV4SW5kZXhSZWw7CiAJCUxvY2tSZWxJZCAg KmxvY2tyZWxpZDsKIAkJT2lkCQkJdGFibGVzcGFjZWlkOwogCkBAIC0zOTgwLDYgKzQxMTcsMTEg QEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBP aWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJCQkJCQkJCQkJImNjbmV3IiwKIAkJCQkJCQkJ CQkJZ2V0X3JlbF9uYW1lc3BhY2UoaW5kZXhSZWwtPnJkX2luZGV4LT5pbmRyZWxpZCksCiAJCQkJ CQkJCQkJCWZhbHNlKTsKKwkJYXV4Q29uY3VycmVudE5hbWUgPSBDaG9vc2VSZWxhdGlvbk5hbWUo Z2V0X3JlbF9uYW1lKGlkeC0+aW5kZXhJZCksCisJCQkJCQkJCQkJCU5VTEwsCisJCQkJCQkJCQkJ CSJjY2F1eCIsCisJCQkJCQkJCQkJCWdldF9yZWxfbmFtZXNwYWNlKGluZGV4UmVsLT5yZF9pbmRl eC0+aW5kcmVsaWQpLAorCQkJCQkJCQkJCQlmYWxzZSk7CiAKIAkJLyogQ2hvb3NlIHRoZSBuZXcg dGFibGVzcGFjZSwgaW5kZXhlcyBvZiB0b2FzdCB0YWJsZXMgYXJlIG5vdCBtb3ZlZCAqLwogCQlp ZiAoT2lkSXNWYWxpZChwYXJhbXMtPnRhYmxlc3BhY2VPaWQpICYmCkBAIC0zOTkzLDEyICs0MTM1 LDE3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3Rt dCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCQkJCQkJCQkJCQkJaWR4LT5pbmRleElk LAogCQkJCQkJCQkJCQkJCXRhYmxlc3BhY2VpZCwKIAkJCQkJCQkJCQkJCQljb25jdXJyZW50TmFt ZSk7CisJCWF1eEluZGV4SWQgPSBpbmRleF9jb25jdXJyZW50bHlfY3JlYXRlX2F1eChoZWFwUmVs LAorCQkJCQkJCQkJCQkJICAgbmV3SW5kZXhJZCwKKwkJCQkJCQkJCQkJCSAgIHRhYmxlc3BhY2Vp ZCwKKwkJCQkJCQkJCQkJCSAgIGF1eENvbmN1cnJlbnROYW1lKTsKIAogCQkvKgogCQkgKiBOb3cg b3BlbiB0aGUgcmVsYXRpb24gb2YgdGhlIG5ldyBpbmRleCwgYSBzZXNzaW9uLWxldmVsIGxvY2sg aXMKIAkJICogYWxzbyBuZWVkZWQgb24gaXQuCiAJCSAqLwogCQluZXdJbmRleFJlbCA9IGluZGV4 X29wZW4obmV3SW5kZXhJZCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKKwkJYXV4SW5kZXhS ZWwgPSBpbmRleF9vcGVuKGF1eEluZGV4SWQsIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CiAK IAkJLyoKIAkJICogU2F2ZSB0aGUgbGlzdCBvZiBPSURzIGFuZCBsb2NrcyBpbiBwcml2YXRlIGNv bnRleHQKQEAgLTQwMDcsNiArNDE1NCw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShj b25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAKIAkJ bmV3aWR4ID0gcGFsbG9jX29iamVjdChSZWluZGV4SW5kZXhJbmZvKTsKIAkJbmV3aWR4LT5pbmRl eElkID0gbmV3SW5kZXhJZDsKKwkJbmV3aWR4LT5hdXhJbmRleElkID0gYXV4SW5kZXhJZDsKIAkJ bmV3aWR4LT5zYWZlID0gaWR4LT5zYWZlOwogCQluZXdpZHgtPnRhYmxlSWQgPSBpZHgtPnRhYmxl SWQ7CiAJCW5ld2lkeC0+YW1JZCA9IGlkeC0+YW1JZDsKQEAgLTQwMjUsMTAgKzQxNzMsMTQgQEAg UmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQg cmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJbG9ja3JlbGlkID0gcGFsbG9jX29iamVjdChMb2Nr UmVsSWQpOwogCQkqbG9ja3JlbGlkID0gbmV3SW5kZXhSZWwtPnJkX2xvY2tJbmZvLmxvY2tSZWxJ ZDsKIAkJcmVsYXRpb25Mb2NrcyA9IGxhcHBlbmQocmVsYXRpb25Mb2NrcywgbG9ja3JlbGlkKTsK KwkJbG9ja3JlbGlkID0gcGFsbG9jX29iamVjdChMb2NrUmVsSWQpOworCQkqbG9ja3JlbGlkID0g YXV4SW5kZXhSZWwtPnJkX2xvY2tJbmZvLmxvY2tSZWxJZDsKKwkJcmVsYXRpb25Mb2NrcyA9IGxh cHBlbmQocmVsYXRpb25Mb2NrcywgbG9ja3JlbGlkKTsKIAogCQlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CiAKIAkJaW5kZXhfY2xvc2UoaW5kZXhSZWwsIE5vTG9jayk7CisJCWlu ZGV4X2Nsb3NlKGF1eEluZGV4UmVsLCBOb0xvY2spOwogCQlpbmRleF9jbG9zZShuZXdJbmRleFJl bCwgTm9Mb2NrKTsKIAogCQkvKiBSb2xsIGJhY2sgYW55IEdVQyBjaGFuZ2VzIGV4ZWN1dGVkIGJ5 IGluZGV4IGZ1bmN0aW9ucyAqLwpAQCAtNDEwOSwxMyArNDI2MSw2MCBAQCBSZWluZGV4UmVsYXRp b25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwg Y29uc3QgUmVpbgogCSAqIGRvaW5nIHRoYXQsIHdhaXQgdW50aWwgbm8gcnVubmluZyB0cmFuc2Fj dGlvbnMgY291bGQgaGF2ZSB0aGUgdGFibGUgb2YKIAkgKiB0aGUgaW5kZXggb3BlbiB3aXRoIHRo ZSBvbGQgbGlzdCBvZiBpbmRleGVzLiAgU2VlICJwaGFzZSAyIiBpbgogCSAqIERlZmluZUluZGV4 KCkgZm9yIG1vcmUgZGV0YWlscy4KKwkqLworCisJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJh bShQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0UsCisJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9Q SEFTRV9XQUlUXzEpOworCVdhaXRGb3JMb2NrZXJzTXVsdGlwbGUobG9ja1RhZ3MsIFNoYXJlTG9j aywgdHJ1ZSk7CisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKgorCSAqIE5vdyBi dWlsZCBhbGwgYXV4aWxpYXJ5IGluZGV4ZXMgYW5kIG1hcmsgdGhlbSBhcyAicmVhZHktZm9yLWlu c2VydHMiLgorCSAqLworCWZvcmVhY2gobGMsIG5ld0luZGV4SWRzKQorCXsKKwkJUmVpbmRleElu ZGV4SW5mbyAqbmV3aWR4ID0gbGZpcnN0KGxjKTsKKworCQlTdGFydFRyYW5zYWN0aW9uQ29tbWFu ZCgpOworCisJCS8qCisJCSAqIENoZWNrIGZvciB1c2VyLXJlcXVlc3RlZCBhYm9ydC4gIFRoaXMg aXMgaW5zaWRlIGEgdHJhbnNhY3Rpb24gc28gYXMKKwkJICogeGFjdC5jIGRvZXMgbm90IGlzc3Vl IGEgdXNlbGVzcyBXQVJOSU5HLCBhbmQgZW5zdXJlcyB0aGF0CisJCSAqIHNlc3Npb24tbGV2ZWwg bG9ja3MgYXJlIGNsZWFuZWQgdXAgb24gYWJvcnQuCisJCSAqLworCQlDSEVDS19GT1JfSU5URVJS VVBUUygpOworCisJCS8qIFRlbGwgY29uY3VycmVudCBpbmRleGluZyB0byBpZ25vcmUgdXMsIGlm IGluZGV4IHF1YWxpZmllcyAqLworCQlpZiAobmV3aWR4LT5zYWZlKQorCQkJc2V0X2luZGV4c2Fm ZV9wcm9jZmxhZ3MoKTsKKworCQkvKiBTZXQgQWN0aXZlU25hcHNob3Qgc2luY2UgZnVuY3Rpb25z IGluIHRoZSBpbmRleGVzIG1heSBuZWVkIGl0ICovCisJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRU cmFuc2FjdGlvblNuYXBzaG90KCkpOworCisJCS8qIEJ1aWxkIGF1eGlsaWFyeSBpbmRleCwgaXQg aXMgZmFzdCAtIHdpdGhvdXQgYW55IGFjdHVhbCBoZWFwIHNjYW4sIGp1c3QgYW4gZW1wdHkgaW5k ZXguICovCisJCWluZGV4X2NvbmN1cnJlbnRseV9idWlsZChuZXdpZHgtPnRhYmxlSWQsIG5ld2lk eC0+YXV4SW5kZXhJZCk7CisKKwkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwkJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CisJfQorCisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8q CisJICogQmVjYXVzZSB3ZSBkb24ndCB0YWtlIGEgc25hcHNob3QgaW4gdGhpcyB0cmFuc2FjdGlv biwgdGhlcmUncyBubyBuZWVkCisJICogdG8gc2V0IHRoZSBQUk9DX0lOX1NBRkVfSUMgZmxhZyBo ZXJlLgogCSAqLwogCiAJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVB VEVJRFhfUEhBU0UsCi0JCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8xKTsK KwkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzIpOworCS8qCisJICogV2Fp dCB1bnRpbCBhbGwgYXV4aWxpYXJ5IGluZGV4ZXMgYXJlIHRha2VuIGludG8gYWNjb3VudCBieSBh bGwKKwkgKiB0cmFuc2FjdGlvbnMuCisJICovCiAJV2FpdEZvckxvY2tlcnNNdWx0aXBsZShsb2Nr VGFncywgU2hhcmVMb2NrLCB0cnVlKTsKIAlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAor CS8qIE5vdyBpdCBpcyB0aW1lIHRvIHBlcmZvcm0gdGFyZ2V0IGluZGV4IGJ1aWxkLiAqLwogCWZv cmVhY2gobGMsIG5ld0luZGV4SWRzKQogCXsKIAkJUmVpbmRleEluZGV4SW5mbyAqbmV3aWR4ID0g bGZpcnN0KGxjKTsKQEAgLTQxNjIsNiArNDM2MSw0MSBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJy ZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVp bgogCSAqIG5lZWQgdG8gc2V0IHRoZSBQUk9DX0lOX1NBRkVfSUMgZmxhZyBoZXJlLgogCSAqLwog CisJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0Us CisJCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8zKTsKKwlXYWl0Rm9yTG9j a2Vyc011bHRpcGxlKGxvY2tUYWdzLCBTaGFyZUxvY2ssIHRydWUpOworCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOworCisJLyoKKwkgKiBBdCB0aGlzIG1vbWVudCBhbGwgdGFyZ2V0IGluZGV4 ZXMgYXJlIG1hcmtlZCBhcyAicmVhZHktdG8taW5zZXJ0Ii4gU28sCisJICogd2UgYXJlIGZyZWUg dG8gc3RhcnQgcHJvY2VzcyBvZiBkcm9wcGluZyBhdXhpbGlhcnkgaW5kZXhlcy4KKwkgKi8KKwlm b3JlYWNoKGxjLCBuZXdJbmRleElkcykKKwl7CisJCVJlaW5kZXhJbmRleEluZm8gKm5ld2lkeCA9 IGxmaXJzdChsYyk7CisJCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCS8qCisJCSAqIENo ZWNrIGZvciB1c2VyLXJlcXVlc3RlZCBhYm9ydC4gIFRoaXMgaXMgaW5zaWRlIGEgdHJhbnNhY3Rp b24gc28gYXMKKwkJICogeGFjdC5jIGRvZXMgbm90IGlzc3VlIGEgdXNlbGVzcyBXQVJOSU5HLCBh bmQgZW5zdXJlcyB0aGF0CisJCSAqIHNlc3Npb24tbGV2ZWwgbG9ja3MgYXJlIGNsZWFuZWQgdXAg b24gYWJvcnQuCisJCSAqLworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIFRlbGwg Y29uY3VycmVudCBpbmRleGluZyB0byBpZ25vcmUgdXMsIGlmIGluZGV4IHF1YWxpZmllcyAqLwor CQlpZiAobmV3aWR4LT5zYWZlKQorCQkJc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MoKTsKKworCQkv KgorCQkgKiBVcGRhdGluZyBwZ19pbmRleCBtaWdodCBpbnZvbHZlIFRPQVNUIHRhYmxlIGFjY2Vz cywgc28gZW5zdXJlIHdlCisJCSAqIGhhdmUgYSB2YWxpZCBzbmFwc2hvdC4KKwkJICovCisJCVB1 c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCQlpbmRleF9zZXRf c3RhdGVfZmxhZ3MobmV3aWR4LT5hdXhJbmRleElkLCBJTkRFWF9EUk9QX0NMRUFSX1JFQURZKTsK KwkJUG9wQWN0aXZlU25hcHNob3QoKTsKKworCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsK Kwl9CisKIAkvKgogCSAqIFBoYXNlIDMgb2YgUkVJTkRFWCBDT05DVVJSRU5UTFkKIAkgKgpAQCAt NDE2OSwxMiArNDQwMyw2IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWlu ZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJICogd2VyZSBjcmVh dGVkIGR1cmluZyB0aGUgcHJldmlvdXMgcGhhc2UuICBTZWUgInBoYXNlIDMiIGluIERlZmluZUlu ZGV4KCkKIAkgKiBmb3IgbW9yZSBkZXRhaWxzLgogCSAqLwotCi0JcGdzdGF0X3Byb2dyZXNzX3Vw ZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0UsCi0JCQkJCQkJCSBQUk9HUkVTU19D UkVBVEVJRFhfUEhBU0VfV0FJVF8yKTsKLQlXYWl0Rm9yTG9ja2Vyc011bHRpcGxlKGxvY2tUYWdz LCBTaGFyZUxvY2ssIHRydWUpOwotCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwotCiAJZm9y ZWFjaChsYywgbmV3SW5kZXhJZHMpCiAJewogCQlSZWluZGV4SW5kZXhJbmZvICpuZXdpZHggPSBs Zmlyc3QobGMpOwpAQCAtNDIxMiw3ICs0NDQwLDcgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVu dGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4K IAkJcHJvZ3Jlc3NfdmFsc1szXSA9IG5ld2lkeC0+YW1JZDsKIAkJcGdzdGF0X3Byb2dyZXNzX3Vw ZGF0ZV9tdWx0aV9wYXJhbSg0LCBwcm9ncmVzc19pbmRleCwgcHJvZ3Jlc3NfdmFscyk7CiAKLQkJ dmFsaWRhdGVfaW5kZXgobmV3aWR4LT50YWJsZUlkLCBuZXdpZHgtPmluZGV4SWQsIHNuYXBzaG90 KTsKKwkJdmFsaWRhdGVfaW5kZXgobmV3aWR4LT50YWJsZUlkLCBuZXdpZHgtPmluZGV4SWQsIG5l d2lkeC0+YXV4SW5kZXhJZCwgc25hcHNob3QpOwogCiAJCS8qCiAJCSAqIFdlIGNhbiBub3cgZG8g YXdheSB3aXRoIG91ciBhY3RpdmUgc25hcHNob3QsIHdlIHN0aWxsIG5lZWQgdG8gc2F2ZQpAQCAt NDI0MSw3ICs0NDY5LDcgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5k ZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJICogdGhlcmUncyBu byBuZWVkIHRvIHNldCB0aGUgUFJPQ19JTl9TQUZFX0lDIGZsYWcgaGVyZS4KIAkJICovCiAJCXBn c3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAotCQkJ CQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzMpOworCQkJCQkJCQkJIFBST0dS RVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzQpOwogCQlXYWl0Rm9yT2xkZXJTbmFwc2hvdHMobGlt aXRYbWluLCB0cnVlKTsKIAogCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKQEAgLTQzMzIs MTQgKzQ1NjAsMTQgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhT dG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkvKgogCSAqIFBoYXNlIDUg b2YgUkVJTkRFWCBDT05DVVJSRU5UTFkKIAkgKgotCSAqIE1hcmsgdGhlIG9sZCBpbmRleGVzIGFz IGRlYWQuICBGaXJzdCB3ZSBtdXN0IHdhaXQgdW50aWwgbm8gcnVubmluZwotCSAqIHRyYW5zYWN0 aW9uIGNvdWxkIGJlIHVzaW5nIHRoZSBpbmRleCBmb3IgYSBxdWVyeS4gIFNlZSBhbHNvCisJICog TWFyayB0aGUgb2xkIGFuZCBhdXhpbGlhcnkgaW5kZXhlcyBhcyBkZWFkLiBGaXJzdCB3ZSBtdXN0 IHdhaXQgdW50aWwgbm8KKwkgKiBydW5uaW5nIHRyYW5zYWN0aW9uIGNvdWxkIGJlIHVzaW5nIHRo ZSBpbmRleCBmb3IgYSBxdWVyeS4gIFNlZSBhbHNvCiAJICogaW5kZXhfZHJvcCgpIGZvciBtb3Jl IGRldGFpbHMuCiAJICovCiAKIAlJTkpFQ1RJT05fUE9JTlQoInJlaW5kZXgtcmVsYXRpb24tY29u Y3VycmVudGx5LWJlZm9yZS1zZXQtZGVhZCIsIE5VTEwpOwogCXBnc3RhdF9wcm9ncmVzc191cGRh dGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfQ1JF QVRFSURYX1BIQVNFX1dBSVRfNCk7CisJCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0Vf V0FJVF81KTsKIAlXYWl0Rm9yTG9ja2Vyc011bHRpcGxlKGxvY2tUYWdzLCBBY2Nlc3NFeGNsdXNp dmVMb2NrLCB0cnVlKTsKIAogCWZvcmVhY2gobGMsIGluZGV4SWRzKQpAQCAtNDM2NCw2ICs0NTky LDI4IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3Rt dCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAJ fQogCisJZm9yZWFjaChsYywgbmV3SW5kZXhJZHMpCisJeworCQlSZWluZGV4SW5kZXhJbmZvICpu ZXdpZHggPSBsZmlyc3QobGMpOworCisJCS8qCisJCSAqIENoZWNrIGZvciB1c2VyLXJlcXVlc3Rl ZCBhYm9ydC4gIFRoaXMgaXMgaW5zaWRlIGEgdHJhbnNhY3Rpb24gc28gYXMKKwkJICogeGFjdC5j IGRvZXMgbm90IGlzc3VlIGEgdXNlbGVzcyBXQVJOSU5HLCBhbmQgZW5zdXJlcyB0aGF0CisJCSAq IHNlc3Npb24tbGV2ZWwgbG9ja3MgYXJlIGNsZWFuZWQgdXAgb24gYWJvcnQuCisJCSAqLworCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qCisJCSAqIFVwZGF0aW5nIHBnX2luZGV4IG1p Z2h0IGludm9sdmUgVE9BU1QgdGFibGUgYWNjZXNzLCBzbyBlbnN1cmUgd2UKKwkJICogaGF2ZSBh IHZhbGlkIHNuYXBzaG90LgorCQkgKi8KKwkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0 aW9uU25hcHNob3QoKSk7CisKKwkJaW5kZXhfY29uY3VycmVudGx5X3NldF9kZWFkKG5ld2lkeC0+ dGFibGVJZCwgbmV3aWR4LT5hdXhJbmRleElkKTsKKworCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwor CX0KKwogCS8qIENvbW1pdCB0aGlzIHRyYW5zYWN0aW9uIHRvIG1ha2UgdGhlIHVwZGF0ZXMgdmlz aWJsZS4gKi8KIAlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAlTdGFydFRyYW5zYWN0aW9u Q29tbWFuZCgpOwpAQCAtNDM3NywxMSArNDYyNywxMSBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJy ZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVp bgogCS8qCiAJICogUGhhc2UgNiBvZiBSRUlOREVYIENPTkNVUlJFTlRMWQogCSAqCi0JICogRHJv cCB0aGUgb2xkIGluZGV4ZXMuCisJICogRHJvcCB0aGUgb2xkIGFuZCBhdXhpbGlhcnkgaW5kZXhl cy4KIAkgKi8KIAogCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRF SURYX1BIQVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfNSk7CisJ CQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF82KTsKIAlXYWl0Rm9yTG9ja2Vy c011bHRpcGxlKGxvY2tUYWdzLCBBY2Nlc3NFeGNsdXNpdmVMb2NrLCB0cnVlKTsKIAogCVB1c2hB Y3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwpAQCAtNDQwMSw2ICs0NjUx LDE4IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3Rt dCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCQlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJl c3MoJm9iamVjdCwgb2JqZWN0cyk7CiAJCX0KIAorCQlmb3JlYWNoKGxjLCBuZXdJbmRleElkcykK KwkJeworCQkJUmVpbmRleEluZGV4SW5mbyAqaWR4ID0gbGZpcnN0KGxjKTsKKwkJCU9iamVjdEFk ZHJlc3Mgb2JqZWN0OworCisJCQlvYmplY3QuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsK KwkJCW9iamVjdC5vYmplY3RJZCA9IGlkeC0+YXV4SW5kZXhJZDsKKwkJCW9iamVjdC5vYmplY3RT dWJJZCA9IDA7CisKKwkJCWFkZF9leGFjdF9vYmplY3RfYWRkcmVzcygmb2JqZWN0LCBvYmplY3Rz KTsKKwkJfQorCiAJCS8qCiAJCSAqIFVzZSBQRVJGT1JNX0RFTEVUSU9OX0NPTkNVUlJFTlRfTE9D SyBzbyB0aGF0IGluZGV4X2Ryb3AoKSB1c2VzIHRoZQogCQkgKiByaWdodCBsb2NrIGxldmVsLgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9u b2Rlcy9tYWtlZnVuY3MuYwppbmRleCA1MzU5ZGFiMTE3Ni4uODRmN2NmOTgyNGUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVz L21ha2VmdW5jcy5jCkBAIC04MzQsNyArODM0LDcgQEAgSW5kZXhJbmZvICoKIG1ha2VJbmRleElu Zm8oaW50IG51bWF0dHJzLCBpbnQgbnVta2V5YXR0cnMsIE9pZCBhbW9pZCwgTGlzdCAqZXhwcmVz c2lvbnMsCiAJCQkgIExpc3QgKnByZWRpY2F0ZXMsIGJvb2wgdW5pcXVlLCBib29sIG51bGxzX25v dF9kaXN0aW5jdCwKIAkJCSAgYm9vbCBpc3JlYWR5LCBib29sIGNvbmN1cnJlbnQsIGJvb2wgc3Vt bWFyaXppbmcsCi0JCQkgIGJvb2wgd2l0aG91dG92ZXJsYXBzKQorCQkJICBib29sIHdpdGhvdXRv dmVybGFwcywgYm9vbCBhdXhpbGlhcnkpCiB7CiAJSW5kZXhJbmZvICAqbiA9IG1ha2VOb2RlKElu ZGV4SW5mbyk7CiAKQEAgLTg1MCw2ICs4NTAsNyBAQCBtYWtlSW5kZXhJbmZvKGludCBudW1hdHRy cywgaW50IG51bWtleWF0dHJzLCBPaWQgYW1vaWQsIExpc3QgKmV4cHJlc3Npb25zLAogCW4tPmlp X0NvbmN1cnJlbnQgPSBjb25jdXJyZW50OwogCW4tPmlpX1N1bW1hcml6aW5nID0gc3VtbWFyaXpp bmc7CiAJbi0+aWlfV2l0aG91dE92ZXJsYXBzID0gd2l0aG91dG92ZXJsYXBzOworCW4tPmlpX0F1 eGlsaWFyeSA9IGF1eGlsaWFyeTsKIAogCS8qIHN1bW1hcml6aW5nIGluZGV4ZXMgY2Fubm90IGNv bnRhaW4gbm9uLWtleSBhdHRyaWJ1dGVzICovCiAJQXNzZXJ0KCFzdW1tYXJpemluZyB8fCAobnVt a2V5YXR0cnMgPT0gbnVtYXR0cnMpKTsKQEAgLTg3NSw3ICs4NzYsNiBAQCBtYWtlSW5kZXhJbmZv KGludCBudW1hdHRycywgaW50IG51bWtleWF0dHJzLCBPaWQgYW1vaWQsIExpc3QgKmV4cHJlc3Np b25zLAogCS8qIGluaXRpYWxpemUgaW5kZXgtYnVpbGQgc3RhdGUgdG8gZGVmYXVsdCAqLwogCW4t PmlpX0Jyb2tlbkhvdENoYWluID0gZmFsc2U7CiAJbi0+aWlfUGFyYWxsZWxXb3JrZXJzID0gMDsK LQluLT5paV9BdXhpbGlhcnkgPSBmYWxzZTsKIAogCS8qIHNldCB1cCBmb3IgcG9zc2libGUgdXNl IGJ5IGluZGV4IEFNICovCiAJbi0+aWlfQW0gPSBhbW9pZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXggMGE4NjI2OTNmY2QuLmE4MGVlNGZiMDNmIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtNjMxLDYgKzYzMSwx NSBAQAogICBib290X3ZhbCA9PiAnREVGQVVMVF9BU1NFUlRfRU5BQkxFRCcsCiB9LAogCit7IG5h bWUgPT4gJ2RlYnVnX2NpY192YWxpZGF0ZV9zdG9yZV9tZW1fcGN0JywgdHlwZSA9PiAnaW50Jywg Y29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnREVWRUxPUEVSX09QVElPTlMnLAor ICBzaG9ydF9kZXNjID0+ICdQZXJjZW50YWdlIG9mIG1haW50ZW5hbmNlX3dvcmtfbWVtIHVzZWQg Zm9yIENJQyB2YWxpZGF0aW9uIHR1cGxlc3RvcmUuJywKKyAgZmxhZ3MgPT4gJ0dVQ19OT1RfSU5f U0FNUExFJywKKyAgdmFyaWFibGUgPT4gJ2RlYnVnX2NpY192YWxpZGF0ZV9zdG9yZV9tZW1fcGN0 JywKKyAgYm9vdF92YWwgPT4gJzEwJywKKyAgbWluID0+ICcxJywKKyAgbWF4ID0+ICc5MCcsCit9 LAorCiB7IG5hbWUgPT4gJ2RlYnVnX2NvcHlfcGFyc2VfcGxhbl90cmVlcycsIHR5cGUgPT4gJ2Jv b2wnLCBjb250ZXh0ID0+ICdQR0NfU1VTRVQnLCBncm91cCA9PiAnREVWRUxPUEVSX09QVElPTlMn LAogICBzaG9ydF9kZXNjID0+ICdTZXQgdGhpcyB0byBmb3JjZSBhbGwgcGFyc2UgYW5kIHBsYW4g dHJlZXMgdG8gYmUgcGFzc2VkIHRocm91Z2ggY29weU9iamVjdCgpLCB0byBmYWNpbGl0YXRlIGNh dGNoaW5nIGVycm9ycyBhbmQgb21pc3Npb25zIGluIGNvcHlPYmplY3QoKS4nLAogICBmbGFncyA9 PiAnR1VDX05PVF9JTl9TQU1QTEUnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3Rh YmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggNTc4OTIxNTI5NTcu LjM3MDVlMjFiNTg4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTczMSw3ICs3MzEsOCBAQCB0eXBl ZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCQkJCQkJCQkJCVJlbGF0aW9uIGluZGV4X3JlbCwK IAkJCQkJCQkJCQlJbmRleEluZm8gKmluZGV4X2luZm8sCiAJCQkJCQkJCQkJU25hcHNob3Qgc25h cHNob3QsCi0JCQkJCQkJCQkJVmFsaWRhdGVJbmRleFN0YXRlICpzdGF0ZSk7CisJCQkJCQkJCQkJ VmFsaWRhdGVJbmRleFN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJCQlWYWxpZGF0ZUluZGV4U3RhdGUg KmF1eF9zdGF0ZSk7CiAKIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTg4MiwxOSArMTg4Mywy NCBAQCB0YWJsZV9pbmRleF9idWlsZF9yYW5nZV9zY2FuKFJlbGF0aW9uIHRhYmxlX3JlbCwKICAq IHRhYmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4gLSBzZWNvbmQgdGFibGUgc2NhbiBmb3IgY29uY3Vy cmVudCBpbmRleCBidWlsZAogICoKICAqIFNlZSB2YWxpZGF0ZV9pbmRleCgpIGZvciBhbiBleHBs YW5hdGlvbi4KKyAqCisgKiBOb3RlOiBpdCBpcyByZXNwb25zaWJpbGl0eSBvZiB0aGF0IGZ1bmN0 aW9uIHRvIGNsb3NlIHNvcnRzdGF0ZXMgaW4KKyAqIGJvdGggYHN0YXRlYCBhbmQgYGF1eHN0YXRl YC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCiB0YWJsZV9pbmRleF92YWxpZGF0ZV9zY2FuKFJl bGF0aW9uIHRhYmxlX3JlbCwKIAkJCQkJCSAgUmVsYXRpb24gaW5kZXhfcmVsLAogCQkJCQkJICBJ bmRleEluZm8gKmluZGV4X2luZm8sCiAJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJ ICBWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlKQorCQkJCQkJICBWYWxpZGF0ZUluZGV4U3RhdGUg KnN0YXRlLAorCQkJCQkJICBWYWxpZGF0ZUluZGV4U3RhdGUgKmF1eHN0YXRlKQogewogCXRhYmxl X3JlbC0+cmRfdGFibGVhbS0+aW5kZXhfdmFsaWRhdGVfc2Nhbih0YWJsZV9yZWwsCiAJCQkJCQkJ CQkJCSAgIGluZGV4X3JlbCwKIAkJCQkJCQkJCQkJICAgaW5kZXhfaW5mbywKIAkJCQkJCQkJCQkJ ICAgc25hcHNob3QsCi0JCQkJCQkJCQkJCSAgIHN0YXRlKTsKKwkJCQkJCQkJCQkJICAgc3RhdGUs CisJCQkJCQkJCQkJCSAgIGF1eHN0YXRlKTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL2luZGV4LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKaW5kZXggYTM4 ZTk1YmMwZWIuLjM3ODcwMWIxOWYxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2lu ZGV4LmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oCkBAIC0zMSw2ICszMSw3IEBA IHR5cGVkZWYgZW51bQogewogCUlOREVYX0NSRUFURV9TRVRfUkVBRFksCiAJSU5ERVhfQ1JFQVRF X1NFVF9WQUxJRCwKKwlJTkRFWF9EUk9QX0NMRUFSX1JFQURZLAogCUlOREVYX0RST1BfQ0xFQVJf VkFMSUQsCiAJSU5ERVhfRFJPUF9TRVRfREVBRCwKIH0gSW5kZXhTdGF0ZUZsYWdzQWN0aW9uOwpA QCAtNzEsNiArNzIsNyBAQCBleHRlcm4gdm9pZCBpbmRleF9jaGVja19wcmltYXJ5X2tleShSZWxh dGlvbiBoZWFwUmVsLAogI2RlZmluZQlJTkRFWF9DUkVBVEVfSUZfTk9UX0VYSVNUUwkJCSgxIDw8 IDQpCiAjZGVmaW5lCUlOREVYX0NSRUFURV9QQVJUSVRJT05FRAkJCSgxIDw8IDUpCiAjZGVmaW5l IElOREVYX0NSRUFURV9JTlZBTElECQkJCSgxIDw8IDYpCisjZGVmaW5lIElOREVYX0NSRUFURV9B VVhJTElBUlkJCQkJKDEgPDwgNykKIAogZXh0ZXJuIE9pZAlpbmRleF9jcmVhdGUoUmVsYXRpb24g aGVhcFJlbGF0aW9uLAogCQkJCQkJIGNvbnN0IGNoYXIgKmluZGV4UmVsYXRpb25OYW1lLApAQCAt MTA2LDYgKzEwOCwxMSBAQCBleHRlcm4gT2lkCWluZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVfY29w eShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQkJCQkJICAgT2lkIHRhYmxlc3BhY2VPaWQs CiAJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbmV3TmFtZSk7CiAKK2V4dGVybiBPaWQJaW5kZXhf Y29uY3VycmVudGx5X2NyZWF0ZV9hdXgoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJ CSAgT2lkIG1haW5JbmRleElkLAorCQkJCQkJCQkJCSAgT2lkIHRhYmxlc3BhY2VPaWQsCisJCQkJ CQkJCQkJICBjb25zdCBjaGFyICpuZXdOYW1lKTsKKwogZXh0ZXJuIHZvaWQgaW5kZXhfY29uY3Vy cmVudGx5X2J1aWxkKE9pZCBoZWFwUmVsYXRpb25JZCwKIAkJCQkJCQkJCSBPaWQgaW5kZXhSZWxh dGlvbklkKTsKIApAQCAtMTUxLDcgKzE1OCw3IEBAIGV4dGVybiB2b2lkIGluZGV4X2J1aWxkKFJl bGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCWJvb2wgaXNyZWluZGV4LAogCQkJCQkJYm9vbCBw YXJhbGxlbCk7CiAKLWV4dGVybiB2b2lkIHZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBp bmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCk7CitleHRlcm4gdm9pZCB2YWxpZGF0ZV9pbmRleChP aWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1eEluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90 KTsKIAogZXh0ZXJuIHZvaWQgaW5kZXhfc2V0X3N0YXRlX2ZsYWdzKE9pZCBpbmRleElkLCBJbmRl eFN0YXRlRmxhZ3NBY3Rpb24gYWN0aW9uKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29t bWFuZHMvcHJvZ3Jlc3MuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmgKaW5kZXgg OWM0MDc3MjcwNmMuLjhlNWY5OGM2ZmFkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5k cy9wcm9ncmVzcy5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmgKQEAgLTEx NywxNCArMTE3LDE1IEBACiAKIC8qIFBoYXNlcyBvZiBDUkVBVEUgSU5ERVggKGFzIGFkdmVydGlz ZWQgdmlhIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSkgKi8KICNkZWZpbmUgUFJPR1JFU1NfQ1JF QVRFSURYX1BIQVNFX1dBSVRfMQkJCTEKLSNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNF X0JVSUxECQkJMgotI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8yCQkJMwot I2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfVkFMSURBVEVfSURYU0NBTgk0Ci0jZGVm aW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9TT1JUCQk1Ci0jZGVmaW5lIFBS T0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9UQUJMRVNDQU4JNgotI2RlZmluZSBQUk9H UkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8zCQkJNworI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJ RFhfUEhBU0VfV0FJVF8yCQkJMgorI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfQlVJ TEQJCQkzCisjZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzMJCQk0CisjZGVm aW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9JRFhTQ0FOCTUKKyNkZWZpbmUg UFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX1NPUlQJCTYKKyNkZWZpbmUgUFJPR1JF U1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX0lEWE1FUkdFCTcKICNkZWZpbmUgUFJPR1JFU1Nf Q1JFQVRFSURYX1BIQVNFX1dBSVRfNAkJCTgKICNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BI QVNFX1dBSVRfNQkJCTkKKyNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfNgkJ CTEwCiAKIC8qCiAgKiBTdWJwaGFzZXMgb2YgQ1JFQVRFIElOREVYLCBmb3IgaW5kZXhfYnVpbGQu CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNsdWRlL21pc2Nh ZG1pbi5oCmluZGV4IDA0ZjI5NzQ4YmU3Li5lZWEzZjgxOGE4NiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbWlzY2FkbWluLmgKKysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKQEAgLTI2OCw2 ICsyNjgsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBhbGxvd1N5c3RlbVRhYmxlTW9kczsK IGV4dGVybiBQR0RMTElNUE9SVCBpbnQgd29ya19tZW07CiBleHRlcm4gUEdETExJTVBPUlQgZG91 YmxlIGhhc2hfbWVtX211bHRpcGxpZXI7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1haW50ZW5h bmNlX3dvcmtfbWVtOworZXh0ZXJuIFBHRExMSU1QT1JUIGludCBkZWJ1Z19jaWNfdmFsaWRhdGVf c3RvcmVfbWVtX3BjdDsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3BhcmFsbGVsX21haW50 ZW5hbmNlX3dvcmtlcnM7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtl ZnVuY3MuaCBiL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oCmluZGV4IGJmNTRkMzlmZWIw Li5jZDdmMWViMDU5MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKQEAgLTk5LDcgKzk5LDggQEAgZXh0 ZXJuIEluZGV4SW5mbyAqbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRy cywgT2lkIGFtb2lkLAogCQkJCQkJCQlMaXN0ICpleHByZXNzaW9ucywgTGlzdCAqcHJlZGljYXRl cywKIAkJCQkJCQkJYm9vbCB1bmlxdWUsIGJvb2wgbnVsbHNfbm90X2Rpc3RpbmN0LAogCQkJCQkJ CQlib29sIGlzcmVhZHksIGJvb2wgY29uY3VycmVudCwKLQkJCQkJCQkJYm9vbCBzdW1tYXJpemlu ZywgYm9vbCB3aXRob3V0b3ZlcmxhcHMpOworCQkJCQkJCQlib29sIHN1bW1hcml6aW5nLCBib29s IHdpdGhvdXRvdmVybGFwcywKKwkJCQkJCQkJYm9vbCBhdXhpbGlhcnkpOwogCiBleHRlcm4gTm9k ZSAqbWFrZVN0cmluZ0NvbnN0KGNoYXIgKnN0ciwgaW50IGxvY2F0aW9uKTsKIGV4dGVybiBEZWZF bGVtICptYWtlRGVmRWxlbShjaGFyICpuYW1lLCBOb2RlICphcmcsIGludCBsb2NhdGlvbik7CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKaW5kZXggNTU1MzhjNGM0 MWUuLmQxNzIzZjQ3ZTg5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Ny ZWF0ZV9pbmRleC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5k ZXgub3V0CkBAIC0xNDM3LDYgKzE0MzcsNyBAQCBERVRBSUw6ICBLZXkgKGYxKT0oYikgYWxyZWFk eSBleGlzdHMuCiBDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfaW5kZXgz IE9OIGNvbmN1cl9oZWFwKGYyKTsKIEVSUk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5k ZXggImNvbmN1cl9pbmRleDMiCiBERVRBSUw6ICBLZXkgKGYyKT0oYikgaXMgZHVwbGljYXRlZC4K K0RST1AgSU5ERVggY29uY3VyX2luZGV4M19jY2F1eDsKIC0tIHRlc3QgdGhhdCBleHByZXNzaW9u IGluZGV4ZXMgYW5kIHBhcnRpYWwgaW5kZXhlcyB3b3JrIGNvbmN1cnJlbnRseQogQ1JFQVRFIElO REVYIENPTkNVUlJFTlRMWSBjb25jdXJfaW5kZXg0IG9uIGNvbmN1cl9oZWFwKGYyKSBXSEVSRSBm MT0nYSc7CiBDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGNvbmN1cl9pbmRleDUgb24gY29uY3Vy X2hlYXAoZjIpIFdIRVJFIGYxPSd4JzsKQEAgLTMyMTEsNiArMzIxMiw3IEBAIElOU0VSVCBJTlRP IGNvbmN1cl9yZWluZGV4X3RhYjQgVkFMVUVTICgxKSwgKDEpLCAoMik7CiBDUkVBVEUgVU5JUVVF IElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfcmVpbmRleF9pbmQ1IE9OIGNvbmN1cl9yZWluZGV4 X3RhYjQgKGMxKTsKIEVSUk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImNvbmN1 cl9yZWluZGV4X2luZDUiCiBERVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KK0RS T1AgSU5ERVggY29uY3VyX3JlaW5kZXhfaW5kNV9jY2F1eDsKIC0tIFJlaW5kZXhpbmcgY29uY3Vy cmVudGx5IHRoaXMgaW5kZXggZmFpbHMgd2l0aCB0aGUgc2FtZSBmYWlsdXJlLgogLS0gVGhlIGV4 dHJhIGluZGV4IGNyZWF0ZWQgaXMgaXRzZWxmIGludmFsaWQsIGFuZCBjYW4gYmUgZHJvcHBlZC4K IFJFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIGNvbmN1cl9yZWluZGV4X2luZDU7CkBAIC0zMjIz LDggKzMyMjUsMTAgQEAgREVUQUlMOiAgS2V5IChjMSk9KDEpIGlzIGR1cGxpY2F0ZWQuCiAgYzEg ICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCiBJbmRleGVzOgogICAgICJj b25jdXJfcmVpbmRleF9pbmQ1IiBVTklRVUUsIGJ0cmVlIChjMSkgSU5WQUxJRAorICAgICJjb25j dXJfcmVpbmRleF9pbmQ1X2NjYXV4IiBzdGlyIChjMSkgSU5WQUxJRAogICAgICJjb25jdXJfcmVp bmRleF9pbmQ1X2NjbmV3IiBVTklRVUUsIGJ0cmVlIChjMSkgSU5WQUxJRAogCitEUk9QIElOREVY IGNvbmN1cl9yZWluZGV4X2luZDVfY2NhdXg7CiBEUk9QIElOREVYIGNvbmN1cl9yZWluZGV4X2lu ZDVfY2NuZXc7CiAtLSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNv IHRoZSBpbmRleCBjYW4gYmVjb21lIHZhbGlkLgogREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhf dGFiNCBXSEVSRSBjMSA9IDE7CkBAIC0zMjUyLDYgKzMyNTYsNDQgQEAgSW5kZXhlczoKICAgICAi Y29uY3VyX3JlaW5kZXhfaW5kNSIgVU5JUVVFLCBidHJlZSAoYzEpCiAKIERST1AgVEFCTEUgY29u Y3VyX3JlaW5kZXhfdGFiNDsKKy0tIENoZWNrIGhhbmRsaW5nIG9mIGF1eGlsaWFyeSBpbmRleGVz CitDUkVBVEUgVEFCTEUgYXV4X2luZGV4X3RhYjUgKGMxIGludCk7CitJTlNFUlQgSU5UTyBhdXhf aW5kZXhfdGFiNSBWQUxVRVMgKDEpLCAoMSksICgyKTsKKy0tIFRoaXMgdHJpY2sgY3JlYXRlcyBh biBpbnZhbGlkIGluZGV4IGFuZCBhdXhpbGlhcnkgaW5kZXggZm9yIGl0CitDUkVBVEUgVU5JUVVF IElOREVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAoYzEp OworRVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRleCAiYXV4X2luZGV4X2luZDYi CitERVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KK1xkIGF1eF9pbmRleF90YWI1 CisgICAgICAgICAgIFRhYmxlICJwdWJsaWMuYXV4X2luZGV4X3RhYjUiCisgQ29sdW1uIHwgIFR5 cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLQorIGMxICAgICB8IGludGVnZXIgfCAg ICAgICAgICAgfCAgICAgICAgICB8IAorSW5kZXhlczoKKyAgICAiYXV4X2luZGV4X2luZDYiIFVO SVFVRSwgYnRyZWUgKGMxKSBJTlZBTElECisgICAgImF1eF9pbmRleF9pbmQ2X2NjYXV4IiBzdGly IChjMSkgSU5WQUxJRAorCistLSBOb3QgYWxsb3dlZCB0byByZWluZGV4IGF1eGlsaWFyeSBpbmRl eAorUkVJTkRFWCBJTkRFWCBhdXhfaW5kZXhfaW5kNl9jY2F1eDsKK0VSUk9SOiAgcmVpbmRleCBv ZiBhdXhpbGlhcnkgaW5kZXggImF1eF9pbmRleF9pbmQ2X2NjYXV4IiBub3Qgc3VwcG9ydGVkCist LSBDb25jdXJyZW50bHkgYWxzbworUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4 X2luZDZfY2NhdXg7CitFUlJPUjogIHJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4ICJhdXhfaW5k ZXhfaW5kNl9jY2F1eCIgbm90IHN1cHBvcnRlZAorLS0gVGhpcyBtYWtlcyB0aGUgcHJldmlvdXMg ZmFpbHVyZSBnbyBhd2F5LCBzbyB0aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4KK0RFTEVURSBG Uk9NIGNvbmN1cl9yZWluZGV4X3RhYjQgV0hFUkUgYzEgPSAxOworRVJST1I6ICByZWxhdGlvbiAi Y29uY3VyX3JlaW5kZXhfdGFiNCIgZG9lcyBub3QgZXhpc3QKK0xJTkUgMTogREVMRVRFIEZST00g Y29uY3VyX3JlaW5kZXhfdGFiNCBXSEVSRSBjMSA9IDE7CisgICAgICAgICAgICAgICAgICAgIF4K Ky0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyByZWluZGV4CitSRUlOREVYIFRBQkxFIGF1eF9p bmRleF90YWI1OworRVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRleCAiYXV4X2lu ZGV4X2luZDYiCitERVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KKy0tIFNob3Vs ZCBiZSBza2lwcGVkIGR1cmluZyBjb25jdXJyZW50IHJlaW5kZXgKK1JFSU5ERVggVEFCTEUgQ09O Q1VSUkVOVExZIGF1eF9pbmRleF90YWI1OworV0FSTklORzogIHNraXBwaW5nIHJlaW5kZXggb2Yg aW52YWxpZCBpbmRleCAicHVibGljLmF1eF9pbmRleF9pbmQ2IgorSElOVDogIFVzZSBEUk9QIElO REVYIG9yIFJFSU5ERVggSU5ERVguCitXQVJOSU5HOiAgc2tpcHBpbmcgcmVpbmRleCBvZiBhdXhp bGlhcnkgaW5kZXggInB1YmxpYy5hdXhfaW5kZXhfaW5kNl9jY2F1eCIKK05PVElDRTogIHRhYmxl ICJhdXhfaW5kZXhfdGFiNSIgaGFzIG5vIGluZGV4ZXMgdGhhdCBjYW4gYmUgcmVpbmRleGVkIGNv bmN1cnJlbnRseQorRFJPUCBUQUJMRSBhdXhfaW5kZXhfdGFiNTsKIC0tIENoZWNrIGhhbmRsaW5n IG9mIGluZGV4ZXMgd2l0aCBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcy4gIFRoZQogLS0gZGVm aW5pdGlvbnMgb2YgdGhlIHJlYnVpbHQgaW5kZXhlcyBzaG91bGQgbWF0Y2ggdGhlIG9yaWdpbmFs CiAtLSBkZWZpbml0aW9ucy4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv aW5kZXhpbmcub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbmRleGluZy5vdXQKaW5k ZXggZjUwODY4Y2E2YTYuLmIzNDAwOWY4NjhjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2luZGV4aW5nLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2lu ZGV4aW5nLm91dApAQCAtMTU4NSwxMCArMTU4NSwxMSBAQCBzZWxlY3QgaW5kZXhyZWxpZDo6cmVn Y2xhc3MsIGluZGlzdmFsaWQsCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogIHBhcnRlZF9pc3ZhbGlkX2lkeCAgICAgICAgICAgICB8IGYgICAgICAgICAgfCBw YXJ0ZWRfaXN2YWxpZF90YWIgICAgfCAKICBwYXJ0ZWRfaXN2YWxpZF9pZHhfMTEgICAgICAgICAg fCBmICAgICAgICAgIHwgcGFydGVkX2lzdmFsaWRfdGFiXzExIHwgcGFydGVkX2lzdmFsaWRfdGFi XzFfZXhwcl9pZHgKKyBwYXJ0ZWRfaXN2YWxpZF9pZHhfMTFfY2NhdXggICAgfCBmICAgICAgICAg IHwgcGFydGVkX2lzdmFsaWRfdGFiXzExIHwgCiAgcGFydGVkX2lzdmFsaWRfdGFiXzEyX2V4cHJf aWR4IHwgdCAgICAgICAgICB8IHBhcnRlZF9pc3ZhbGlkX3RhYl8xMiB8IHBhcnRlZF9pc3ZhbGlk X3RhYl8xX2V4cHJfaWR4CiAgcGFydGVkX2lzdmFsaWRfdGFiXzFfZXhwcl9pZHggIHwgZiAgICAg ICAgICB8IHBhcnRlZF9pc3ZhbGlkX3RhYl8xICB8IHBhcnRlZF9pc3ZhbGlkX2lkeAogIHBhcnRl ZF9pc3ZhbGlkX3RhYl8yX2V4cHJfaWR4ICB8IHQgICAgICAgICAgfCBwYXJ0ZWRfaXN2YWxpZF90 YWJfMiAgfCBwYXJ0ZWRfaXN2YWxpZF9pZHgKLSg1IHJvd3MpCisoNiByb3dzKQogCiBkcm9wIHRh YmxlIHBhcnRlZF9pc3ZhbGlkX3RhYjsKIC0tIENoZWNrIHN0YXRlIG9mIHJlcGxpY2EgaW5kZXhl cyB3aGVuIGF0dGFjaGluZyBhIHBhcnRpdGlvbi4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5v dXQKaW5kZXggMmIzY2Y2ZDg1NjkuLmIwMWZhMWU2MWUzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3J1bGVzLm91dApAQCAtMjA2NCwxNCArMjA2NCwxNSBAQCBwZ19zdGF0X3Byb2dyZXNzX2NyZWF0 ZV9pbmRleHwgU0VMRUNUIHMucGlkLAogICAgICAgICBDQVNFIHMucGFyYW0xMAogICAgICAgICAg ICAgV0hFTiAwIFRIRU4gJ2luaXRpYWxpemluZyc6OnRleHQKICAgICAgICAgICAgIFdIRU4gMSBU SEVOICd3YWl0aW5nIGZvciB3cml0ZXJzIGJlZm9yZSBidWlsZCc6OnRleHQKLSAgICAgICAgICAg IFdIRU4gMiBUSEVOICgnYnVpbGRpbmcgaW5kZXgnOjp0ZXh0IHx8IENPQUxFU0NFKCgnOiAnOjp0 ZXh0IHx8IHBnX2luZGV4YW1fcHJvZ3Jlc3NfcGhhc2VuYW1lKChzLnBhcmFtOSk6Om9pZCwgcy5w YXJhbTExKSksICcnOjp0ZXh0KSkKLSAgICAgICAgICAgIFdIRU4gMyBUSEVOICd3YWl0aW5nIGZv ciB3cml0ZXJzIGJlZm9yZSB2YWxpZGF0aW9uJzo6dGV4dAotICAgICAgICAgICAgV0hFTiA0IFRI RU4gJ2luZGV4IHZhbGlkYXRpb246IHNjYW5uaW5nIGluZGV4Jzo6dGV4dAotICAgICAgICAgICAg V0hFTiA1IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IHNvcnRpbmcgdHVwbGVzJzo6dGV4dAotICAg ICAgICAgICAgV0hFTiA2IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IHNjYW5uaW5nIHRhYmxlJzo6 dGV4dAotICAgICAgICAgICAgV0hFTiA3IFRIRU4gJ3dhaXRpbmcgZm9yIG9sZCBzbmFwc2hvdHMn Ojp0ZXh0Ci0gICAgICAgICAgICBXSEVOIDggVEhFTiAnd2FpdGluZyBmb3IgcmVhZGVycyBiZWZv cmUgbWFya2luZyBkZWFkJzo6dGV4dAotICAgICAgICAgICAgV0hFTiA5IFRIRU4gJ3dhaXRpbmcg Zm9yIHJlYWRlcnMgYmVmb3JlIGRyb3BwaW5nJzo6dGV4dAorICAgICAgICAgICAgV0hFTiAyIFRI RU4gJ3dhaXRpbmcgZm9yIHdyaXRlcnMgdG8gdXNlIGF1eGlsaWFyeSBpbmRleCc6OnRleHQKKyAg ICAgICAgICAgIFdIRU4gMyBUSEVOICgnYnVpbGRpbmcgaW5kZXgnOjp0ZXh0IHx8IENPQUxFU0NF KCgnOiAnOjp0ZXh0IHx8IHBnX2luZGV4YW1fcHJvZ3Jlc3NfcGhhc2VuYW1lKChzLnBhcmFtOSk6 Om9pZCwgcy5wYXJhbTExKSksICcnOjp0ZXh0KSkKKyAgICAgICAgICAgIFdIRU4gNCBUSEVOICd3 YWl0aW5nIGZvciB3cml0ZXJzIGJlZm9yZSB2YWxpZGF0aW9uJzo6dGV4dAorICAgICAgICAgICAg V0hFTiA1IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IHNjYW5uaW5nIGluZGV4Jzo6dGV4dAorICAg ICAgICAgICAgV0hFTiA2IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IHNvcnRpbmcgdHVwbGVzJzo6 dGV4dAorICAgICAgICAgICAgV0hFTiA3IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IG1lcmdpbmcg aW5kZXhlcyc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gOCBUSEVOICd3YWl0aW5nIGZvciBvbGQg c25hcHNob3RzJzo6dGV4dAorICAgICAgICAgICAgV0hFTiA5IFRIRU4gJ3dhaXRpbmcgZm9yIHJl YWRlcnMgYmVmb3JlIG1hcmtpbmcgZGVhZCc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gMTAgVEhF TiAnd2FpdGluZyBmb3IgcmVhZGVycyBiZWZvcmUgZHJvcHBpbmcnOjp0ZXh0CiAgICAgICAgICAg ICBFTFNFIE5VTEw6OnRleHQKICAgICAgICAgRU5EIEFTIHBoYXNlLAogICAgIHMucGFyYW00IEFT IGxvY2tlcnNfdG90YWwsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVf aW5kZXguc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAppbmRleCA4 MmU0MDYyYTIxNS4uYzJjMWIwMzE1MjcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2NyZWF0ZV9pbmRleC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4 LnNxbApAQCAtNTAzLDYgKzUwMyw3IEBAIENSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZ IElGIE5PVCBFWElTVFMgY29uY3VyX2luZGV4MiBPTiBjb25jdXJfaGVhcChmMSk7CiBJTlNFUlQg SU5UTyBjb25jdXJfaGVhcCBWQUxVRVMgKCdiJywneCcpOwogLS0gY2hlY2sgaWYgY29uc3RyYWlu dCBpcyBlbmZvcmNlZCBwcm9wZXJseSBhdCBidWlsZCB0aW1lCiBDUkVBVEUgVU5JUVVFIElOREVY IENPTkNVUlJFTlRMWSBjb25jdXJfaW5kZXgzIE9OIGNvbmN1cl9oZWFwKGYyKTsKK0RST1AgSU5E RVggY29uY3VyX2luZGV4M19jY2F1eDsKIC0tIHRlc3QgdGhhdCBleHByZXNzaW9uIGluZGV4ZXMg YW5kIHBhcnRpYWwgaW5kZXhlcyB3b3JrIGNvbmN1cnJlbnRseQogQ1JFQVRFIElOREVYIENPTkNV UlJFTlRMWSBjb25jdXJfaW5kZXg0IG9uIGNvbmN1cl9oZWFwKGYyKSBXSEVSRSBmMT0nYSc7CiBD UkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGNvbmN1cl9pbmRleDUgb24gY29uY3VyX2hlYXAoZjIp IFdIRVJFIGYxPSd4JzsKQEAgLTEzMTUsMTAgKzEzMTYsMTIgQEAgQ1JFQVRFIFRBQkxFIGNvbmN1 cl9yZWluZGV4X3RhYjQgKGMxIGludCk7CiBJTlNFUlQgSU5UTyBjb25jdXJfcmVpbmRleF90YWI0 IFZBTFVFUyAoMSksICgxKSwgKDIpOwogLS0gVGhpcyB0cmljayBjcmVhdGVzIGFuIGludmFsaWQg aW5kZXguCiBDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfcmVpbmRleF9p bmQ1IE9OIGNvbmN1cl9yZWluZGV4X3RhYjQgKGMxKTsKK0RST1AgSU5ERVggY29uY3VyX3JlaW5k ZXhfaW5kNV9jY2F1eDsKIC0tIFJlaW5kZXhpbmcgY29uY3VycmVudGx5IHRoaXMgaW5kZXggZmFp bHMgd2l0aCB0aGUgc2FtZSBmYWlsdXJlLgogLS0gVGhlIGV4dHJhIGluZGV4IGNyZWF0ZWQgaXMg aXRzZWxmIGludmFsaWQsIGFuZCBjYW4gYmUgZHJvcHBlZC4KIFJFSU5ERVggSU5ERVggQ09OQ1VS UkVOVExZIGNvbmN1cl9yZWluZGV4X2luZDU7CiBcZCBjb25jdXJfcmVpbmRleF90YWI0CitEUk9Q IElOREVYIGNvbmN1cl9yZWluZGV4X2luZDVfY2NhdXg7CiBEUk9QIElOREVYIGNvbmN1cl9yZWlu ZGV4X2luZDVfY2NuZXc7CiAtLSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3 YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21lIHZhbGlkLgogREVMRVRFIEZST00gY29uY3VyX3Jl aW5kZXhfdGFiNCBXSEVSRSBjMSA9IDE7CkBAIC0xMzMwLDYgKzEzMzMsMjQgQEAgUkVJTkRFWCBJ TkRFWCBDT05DVVJSRU5UTFkgY29uY3VyX3JlaW5kZXhfaW5kNTsKIFxkIGNvbmN1cl9yZWluZGV4 X3RhYjQKIERST1AgVEFCTEUgY29uY3VyX3JlaW5kZXhfdGFiNDsKIAorLS0gQ2hlY2sgaGFuZGxp bmcgb2YgYXV4aWxpYXJ5IGluZGV4ZXMKK0NSRUFURSBUQUJMRSBhdXhfaW5kZXhfdGFiNSAoYzEg aW50KTsKK0lOU0VSVCBJTlRPIGF1eF9pbmRleF90YWI1IFZBTFVFUyAoMSksICgxKSwgKDIpOwor LS0gVGhpcyB0cmljayBjcmVhdGVzIGFuIGludmFsaWQgaW5kZXggYW5kIGF1eGlsaWFyeSBpbmRl eCBmb3IgaXQKK0NSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2 IE9OIGF1eF9pbmRleF90YWI1IChjMSk7CitcZCBhdXhfaW5kZXhfdGFiNQorLS0gTm90IGFsbG93 ZWQgdG8gcmVpbmRleCBhdXhpbGlhcnkgaW5kZXgKK1JFSU5ERVggSU5ERVggYXV4X2luZGV4X2lu ZDZfY2NhdXg7CistLSBDb25jdXJyZW50bHkgYWxzbworUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5U TFkgYXV4X2luZGV4X2luZDZfY2NhdXg7CistLSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWls dXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21lIHZhbGlkLgorREVMRVRFIEZST00g Y29uY3VyX3JlaW5kZXhfdGFiNCBXSEVSRSBjMSA9IDE7CistLSBTaG91bGQgYmUgc2tpcHBlZCBk dXJpbmcgcmVpbmRleAorUkVJTkRFWCBUQUJMRSBhdXhfaW5kZXhfdGFiNTsKKy0tIFNob3VsZCBi ZSBza2lwcGVkIGR1cmluZyBjb25jdXJyZW50IHJlaW5kZXgKK1JFSU5ERVggVEFCTEUgQ09OQ1VS UkVOVExZIGF1eF9pbmRleF90YWI1OworRFJPUCBUQUJMRSBhdXhfaW5kZXhfdGFiNTsKKwogLS0g Q2hlY2sgaGFuZGxpbmcgb2YgaW5kZXhlcyB3aXRoIGV4cHJlc3Npb25zIGFuZCBwcmVkaWNhdGVz LiAgVGhlCiAtLSBkZWZpbml0aW9ucyBvZiB0aGUgcmVidWlsdCBpbmRleGVzIHNob3VsZCBtYXRj aCB0aGUgb3JpZ2luYWwKIC0tIGRlZmluaXRpb25zLgotLSAKMi41My4wCgo= --000000000000b895ca064e594206 Content-Type: application/x-patch; name="v33-0005-Track-and-drop-auxiliary-indexes-in-DROP-REINDEX.patch" Content-Disposition: attachment; filename="v33-0005-Track-and-drop-auxiliary-indexes-in-DROP-REINDEX.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnf26cqs4 RnJvbSBmMDYzYzBlMTgxMzUxOTc1N2EyMDFhMzYxZDFiNDgzNzE5Y2E1YThlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNDozNjozMSArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjMzIDUvN10gVHJhY2sgYW5kIGRyb3AgYXV4aWxpYXJ5IGluZGV4ZXMgaW4gRFJPUC9S RUlOREVYCgpEdXJpbmcgY29uY3VycmVudCBpbmRleCBvcGVyYXRpb25zLCBhdXhpbGlhcnkgaW5k ZXhlcyBtYXkgYmUgbGVmdCBhcyBvcnBoYW5lZCBvYmplY3RzIHdoZW4gZXJyb3JzIG9jY3VyIChq dW5rIGF1eGlsaWFyeSBpbmRleGVzKS4KClRoaXMgcGF0Y2ggaW1wcm92ZXMgdGhlIGhhbmRsaW5n IG9mIHN1Y2ggYXV4aWxpYXJ5IGluZGV4ZXM6Ci0gYWRkIGF1eGlsaWFyeUZvckluZGV4SWQgcGFy YW1ldGVyIHRvIGluZGV4X2NyZWF0ZSgpIHRvIHRyYWNrIGRlcGVuZGVuY2llcyBiZXR3ZWVuIG1h aW4gYW5kIGF1eGlsaWFyeSBpbmRleGVzCi0gYXV0b21hdGljYWxseSBkcm9wIGF1eGlsaWFyeSBp bmRleGVzIHdoZW4gdGhlIG1haW4gaW5kZXggaXMgZHJvcHBlZAotIGRlbGV0ZSBqdW5rIGF1eGls aWFyeSBpbmRleGVzIHByb3Blcmx5IGR1cmluZyBSRUlOREVYIG9wZXJhdGlvbnMKLS0tCiBkb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sICAgICAgICAgfCAgMTQgKystCiBkb2Mvc3Jj L3NnbWwvcmVmL3JlaW5kZXguc2dtbCAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5k L2NhdGFsb2cvZGVwZW5kZW5jeS5jICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY2F0 YWxvZy9pbmRleC5jICAgICAgICAgICAgICAgIHwgIDc4ICsrKysrKysrKysrLS0tLQogc3JjL2Jh Y2tlbmQvY2F0YWxvZy9wZ19kZXBlbmQuYyAgICAgICAgICAgIHwgIDYyICsrKysrKysrKysrKwog c3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jICAgICAgICAgICAgIHwgICAxICsKIHNyYy9i YWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jICAgICAgICAgICB8ICAzNyArKysrKysrLQogc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgIHwgIDUyICsrKysrKysrKy0K IHNyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jICAgICAgICAgICAgICB8ICAgMyArLQogc3Jj L2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmggICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNs dWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9u b2Rlcy9tYWtlZnVuY3MuaCAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCB8IDEwNSArKysrKysrKysrKysrKysrKysrLS0KIHNy Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgICAgICB8ICA1NyArKysrKysrKysr LQogMTQgZmlsZXMgY2hhbmdlZCwgMzgwIGluc2VydGlvbnMoKyksIDQ0IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwgYi9kb2Mvc3Jj L3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sCmluZGV4IDEyYzg4NTg3YTc5Li40MDZjMDJlODY2 ZSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbAorKysgYi9k b2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sCkBAIC02NjgsMTAgKzY2OCwxNiBAQCBJ bmRleGVzOgogICAgICJpZHhfY2NhdXgiIHN0aXIgKGNvbCkgSU5WQUxJRAogPC9wcm9ncmFtbGlz dGluZz4KIAotICAgIFRoZSByZWNvbW1lbmRlZCByZWNvdmVyeQotICAgIG1ldGhvZCBpbiBzdWNo IGNhc2VzIGlzIHRvIGRyb3AgdGhlc2UgaW5kZXhlcyBhbmQgdHJ5IGFnYWluIHRvIHBlcmZvcm0K LSAgICA8Y29tbWFuZD5DUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPi4gKEFub3Ro ZXIgcG9zc2liaWxpdHkgaXMKLSAgICB0byByZWJ1aWxkIHRoZSBpbmRleCB3aXRoIDxjb21tYW5k PlJFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPikuCisgICAgVGhlIHJlY29tbWVu ZGVkIHJlY292ZXJ5IG1ldGhvZCBpbiBzdWNoIGNhc2VzIGlzIHRvIGRyb3AgdGhlIGluZGV4IHdp dGgKKyAgICA8Y29tbWFuZD5EUk9QIElOREVYPC9jb21tYW5kPi4gVGhlIGF1eGlsaWFyeSBpbmRl eCAoc3VmZml4ZWQgd2l0aAorICAgIDxsaXRlcmFsPl9jY2F1eDwvbGl0ZXJhbD4pIHdpbGwgYmUg YXV0b21hdGljYWxseSBkcm9wcGVkIHdoZW4gdGhlIG1haW4KKyAgICBpbmRleCBpcyBkcm9wcGVk LiBBZnRlciBkcm9wcGluZyB0aGUgaW5kZXhlcywgeW91IGNhbiB0cnkgYWdhaW4gdG8gcGVyZm9y bQorICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+LiAoQW5v dGhlciBwb3NzaWJpbGl0eSBpcyB0bworICAgIHJlYnVpbGQgdGhlIGluZGV4IHdpdGggPGNvbW1h bmQ+UkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+LAorICAgIHdoaWNoIHdpbGwg YWxzbyBoYW5kbGUgY2xlYW51cCBvZiBhbnkgaW52YWxpZCBhdXhpbGlhcnkgaW5kZXhlcy4pCisg ICAgSWYgdGhlIG9ubHkgaW52YWxpZCBpbmRleCBpcyBvbmUgc3VmZml4ZWQgPGxpdGVyYWw+X2Nj YXV4PC9saXRlcmFsPiwKKyAgICB0aGUgcmVjb21tZW5kZWQgcmVjb3ZlcnkgbWV0aG9kIGlzIGp1 c3QgPGxpdGVyYWw+RFJPUCBJTkRFWDwvbGl0ZXJhbD4KKyAgICBmb3IgdGhhdCBpbmRleC4KICAg IDwvcGFyYT4KIAogICAgPHBhcmE+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3JlaW5k ZXguc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcmVpbmRleC5zZ21sCmluZGV4IDllMDI0ODI2MWFl Li5hYzljZmVjNWM1NSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKQEAgLTQ3NiwxMSArNDc2LDE1IEBA IEluZGV4ZXM6CiAgICAgPGxpdGVyYWw+X2NjbmV3PC9saXRlcmFsPiBvciA8bGl0ZXJhbD5fY2Nh dXg8L2xpdGVyYWw+LCB0aGVuIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSB0cmFuc2llbnQgb3IgYXV4 aWxpYXJ5CiAgICAgaW5kZXggY3JlYXRlZCBkdXJpbmcgdGhlIGNvbmN1cnJlbnQgb3BlcmF0aW9u LCBhbmQgdGhlIHJlY29tbWVuZGVkCiAgICAgcmVjb3ZlcnkgbWV0aG9kIGlzIHRvIGRyb3AgdGhl c2UgaW5kZXhlcyB1c2luZyA8bGl0ZXJhbD5EUk9QIElOREVYPC9saXRlcmFsPiwKLSAgICB0aGVu IGF0dGVtcHQgPGNvbW1hbmQ+UkVJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IGFnYWluLgor ICAgIHRoZW4gYXR0ZW1wdCA8Y29tbWFuZD5SRUlOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4g YWdhaW4uIFRoZSBhdXhpbGlhcnkgaW5kZXgKKyAgICAoc3VmZml4ZWQgd2l0aCA8bGl0ZXJhbD5f Y2NhdXg8L2xpdGVyYWw+KSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZHJvcHBlZAorICAgIGFsb25n IHdpdGggaXRzIG1haW4gaW5kZXguCiAgICAgSWYgdGhlIGludmFsaWQgaW5kZXggaXMgaW5zdGVh ZCBzdWZmaXhlZCA8bGl0ZXJhbD5fY2NvbGQ8L2xpdGVyYWw+LAogICAgIGl0IGNvcnJlc3BvbmRz IHRvIHRoZSBvcmlnaW5hbCBpbmRleCB3aGljaCBjb3VsZCBub3QgYmUgZHJvcHBlZDsKICAgICB0 aGUgcmVjb21tZW5kZWQgcmVjb3ZlcnkgbWV0aG9kIGlzIHRvIGp1c3QgZHJvcCBzYWlkIGluZGV4 LCBzaW5jZSB0aGUKLSAgICByZWJ1aWxkIHByb3BlciBoYXMgYmVlbiBzdWNjZXNzZnVsLgorICAg IHJlYnVpbGQgcHJvcGVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWwuIElmIHRoZSBvbmx5CisgICAgaW52 YWxpZCBpbmRleCBpcyBvbmUgc3VmZml4ZWQgPGxpdGVyYWw+X2NjYXV4PC9saXRlcmFsPiwgdGhl IHJlY29tbWVuZGVkCisgICAgcmVjb3ZlcnkgbWV0aG9kIGlzIGp1c3QgPGxpdGVyYWw+RFJPUCBJ TkRFWDwvbGl0ZXJhbD4gZm9yIHRoYXQgaW5kZXguCiAgICAgQSBub256ZXJvIG51bWJlciBtYXkg YmUgYXBwZW5kZWQgdG8gdGhlIHN1ZmZpeCBvZiB0aGUgaW52YWxpZCBpbmRleAogICAgIG5hbWVz IHRvIGtlZXAgdGhlbSB1bmlxdWUsIGxpa2UgPGxpdGVyYWw+X2NjbmV3MTwvbGl0ZXJhbD4sCiAg ICAgPGxpdGVyYWw+X2Njb2xkMjwvbGl0ZXJhbD4sIGV0Yy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NhdGFsb2cvZGVwZW5kZW5jeS5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9kZXBlbmRlbmN5 LmMKaW5kZXggZmRiOGU2N2UxZjUuLmM2OTQxZmIxOWQxIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL2RlcGVuZGVuY3kuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2RlcGVuZGVu Y3kuYwpAQCAtMjkyLDcgKzI5Miw3IEBAIHBlcmZvcm1EZWxldGlvbihjb25zdCBPYmplY3RBZGRy ZXNzICpvYmplY3QsCiAJICogQWNxdWlyZSBkZWxldGlvbiBsb2NrIG9uIHRoZSB0YXJnZXQgb2Jq ZWN0LiAgKElkZWFsbHkgdGhlIGNhbGxlciBoYXMKIAkgKiBkb25lIHRoaXMgYWxyZWFkeSwgYnV0 IG1hbnkgcGxhY2VzIGFyZSBzbG9wcHkgYWJvdXQgaXQuKQogCSAqLwotCUFjcXVpcmVEZWxldGlv bkxvY2sob2JqZWN0LCAwKTsKKwlBY3F1aXJlRGVsZXRpb25Mb2NrKG9iamVjdCwgZmxhZ3MpOwog CiAJLyoKIAkgKiBDb25zdHJ1Y3QgYSBsaXN0IG9mIG9iamVjdHMgdG8gZGVsZXRlIChpZSwgdGhl IGdpdmVuIG9iamVjdCBwbHVzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4 LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggZjZkMGFjM2Y3ODQuLmFhZjBi MzBmZjlkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3Jj L2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC03NzYsNiArNzc2LDggQEAgaW5kZXhfY3JlYXRl KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJICAgKChmbGFncyAmIElOREVYX0NSRUFURV9BRERf Q09OU1RSQUlOVCkgIT0gMCkpOwogCS8qIHBhcnRpdGlvbmVkIGluZGV4ZXMgbXVzdCBuZXZlciBi ZSAiYnVpbHQiIGJ5IHRoZW1zZWx2ZXMgKi8KIAlBc3NlcnQoIXBhcnRpdGlvbmVkIHx8IChmbGFn cyAmIElOREVYX0NSRUFURV9TS0lQX0JVSUxEKSk7CisJLyogaWlfQXV4aWxpYXJ5Rm9ySW5kZXhJ ZCBhbmQgSU5ERVhfQ1JFQVRFX0FVWElMSUFSWSBhcmUgcmVxdWlyZWQgYm90aCBvciBuZWl0aGVy ICovCisJQXNzZXJ0KE9pZElzVmFsaWQoaW5kZXhJbmZvLT5paV9BdXhpbGlhcnlGb3JJbmRleElk KSA9PSBhdXhpbGlhcnkpOwogCiAJcmVsa2luZCA9IHBhcnRpdGlvbmVkID8gUkVMS0lORF9QQVJU SVRJT05FRF9JTkRFWCA6IFJFTEtJTkRfSU5ERVg7CiAJaXNfZXhjbHVzaW9uID0gKGluZGV4SW5m by0+aWlfRXhjbHVzaW9uT3BzICE9IE5VTEwpOwpAQCAtMTE4MSw2ICsxMTgzLDE1IEBAIGluZGV4 X2NyZWF0ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQlyZWNvcmREZXBlbmRlbmN5T24oJm15 c2VsZiwgJnJlZmVyZW5jZWQsIERFUEVOREVOQ1lfUEFSVElUSU9OX1NFQyk7CiAJCX0KIAorCQkv KgorCQkgKiBSZWNvcmQgZGVwZW5kZW5jeSBvbiB0aGUgbWFpbiBpbmRleCBpbiBjYXNlIG9mIGF1 eGlsaWFyeSBpbmRleC4KKwkJICovCisJCWlmIChPaWRJc1ZhbGlkKGluZGV4SW5mby0+aWlfQXV4 aWxpYXJ5Rm9ySW5kZXhJZCkpCisJCXsKKwkJCU9iamVjdEFkZHJlc3NTZXQocmVmZXJlbmNlZCwg UmVsYXRpb25SZWxhdGlvbklkLCBpbmRleEluZm8tPmlpX0F1eGlsaWFyeUZvckluZGV4SWQpOwor CQkJcmVjb3JkRGVwZW5kZW5jeU9uKCZteXNlbGYsICZyZWZlcmVuY2VkLCBERVBFTkRFTkNZX0FV VE8pOworCQl9CisKIAkJLyogcGxhY2Vob2xkZXIgZm9yIG5vcm1hbCBkZXBlbmRlbmNpZXMgKi8K IAkJYWRkcnMgPSBuZXdfb2JqZWN0X2FkZHJlc3NlcygpOwogCkBAIC0xNDEzLDcgKzE0MjQsOCBA QCBpbmRleF9jb25jdXJyZW50bHlfY3JlYXRlX2NvcHkoUmVsYXRpb24gaGVhcFJlbGF0aW9uLCBP aWQgb2xkSW5kZXhJZCwKIAkJCQkJCQl0cnVlLAogCQkJCQkJCWluZGV4UmVsYXRpb24tPnJkX2lu ZGFtLT5hbXN1bW1hcml6aW5nLAogCQkJCQkJCW9sZEluZm8tPmlpX1dpdGhvdXRPdmVybGFwcywK LQkJCQkJCQlmYWxzZSk7CisJCQkJCQkJZmFsc2UsCisJCQkJCQkJSW52YWxpZE9pZCk7CiAKIAkv KgogCSAqIEV4dHJhY3QgdGhlIGxpc3Qgb2YgY29sdW1uIG5hbWVzIGFuZCB0aGUgY29sdW1uIG51 bWJlcnMgZm9yIHRoZSBuZXcKQEAgLTE1ODQsNyArMTU5Niw4IEBAIGluZGV4X2NvbmN1cnJlbnRs eV9jcmVhdGVfYXV4KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwgT2lkIG1haW5JbmRleElkLAogCQkJ CQkJCXRydWUsCiAJCQkJCQkJZmFsc2UsCS8qIGF1eCBhcmUgbm90IHN1bW1hcml6aW5nICovCiAJ CQkJCQkJZmFsc2UsCS8qIGF1eCBhcmUgbm90IHdpdGhvdXQgb3ZlcmxhcHMgKi8KLQkJCQkJCQl0 cnVlCS8qIGF1eGlsaWFyeSAqLyk7CisJCQkJCQkJdHJ1ZQkvKiBhdXhpbGlhcnkgKi8sCisJCQkJ CQkJbWFpbkluZGV4SWQgLyogYXV4aWxpYXJ5Rm9ySW5kZXhJZCAqLyk7CiAKIAkvKgogCSAqIEV4 dHJhY3QgdGhlIGxpc3Qgb2YgY29sdW1uIG5hbWVzIGFuZCB0aGUgY29sdW1uIG51bWJlcnMgZm9y IHRoZSBuZXcKQEAgLTI2MjMsNyArMjYzNiw4IEBAIEJ1aWxkSW5kZXhJbmZvKFJlbGF0aW9uIGlu ZGV4KQogCQkJCQkgICBmYWxzZSwKIAkJCQkJICAgaW5kZXgtPnJkX2luZGFtLT5hbXN1bW1hcml6 aW5nLAogCQkJCQkgICBpbmRleFN0cnVjdC0+aW5kaXNleGNsdXNpb24gJiYgaW5kZXhTdHJ1Y3Qt PmluZGlzdW5pcXVlLAotCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9PSBTVElSX0FNX09J RCAvKiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8pOworCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxh bSA9PSBTVElSX0FNX09JRCAvKiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8sCisJCQkJCSAgIEludmFs aWRPaWQgLyogYXV4aWxpYXJ5X2Zvcl9pbmRleF9pZCBpcyBzZXQgb25seSBkdXJpbmcgYnVpbGQg Ki8pOwogCiAJLyogZmlsbCBpbiBhdHRyaWJ1dGUgbnVtYmVycyAqLwogCWZvciAoaSA9IDA7IGkg PCBudW1BdHRzOyBpKyspCkBAIC0yNjg0LDcgKzI2OTgsOCBAQCBCdWlsZER1bW15SW5kZXhJbmZv KFJlbGF0aW9uIGluZGV4KQogCQkJCQkgICBmYWxzZSwKIAkJCQkJICAgaW5kZXgtPnJkX2luZGFt LT5hbXN1bW1hcml6aW5nLAogCQkJCQkgICBpbmRleFN0cnVjdC0+aW5kaXNleGNsdXNpb24gJiYg aW5kZXhTdHJ1Y3QtPmluZGlzdW5pcXVlLAotCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9 PSBTVElSX0FNX09JRCAvKiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8pOworCQkJCQkgICBpbmRleC0+ cmRfcmVsLT5yZWxhbSA9PSBTVElSX0FNX09JRCAvKiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8sCisJ CQkJCSAgIEludmFsaWRPaWQpOwogCiAJLyogZmlsbCBpbiBhdHRyaWJ1dGUgbnVtYmVycyAqLwog CWZvciAoaSA9IDA7IGkgPCBudW1BdHRzOyBpKyspCkBAIC0zNzYzLDggKzM3NzgsMTEgQEAgaW5k ZXhfc2V0X3N0YXRlX2ZsYWdzKE9pZCBpbmRleElkLCBJbmRleFN0YXRlRmxhZ3NBY3Rpb24gYWN0 aW9uKQogCQkJaW5kZXhGb3JtLT5pbmRpc3ZhbGlkID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQljYXNl IElOREVYX0RST1BfQ0xFQVJfUkVBRFk6Ci0JCQkvKiBDbGVhciBpbmRpc3JlYWR5IGR1cmluZyBh IENSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgc2VxdWVuY2UgKi8KLQkJCUFzc2VydChpbmRleEZv cm0tPmluZGlzcmVhZHkpOworCQkJLyoKKwkJCSAqIENsZWFyIGluZGlzcmVhZHkgZHVyaW5nIGEg Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBzZXF1ZW5jZS4KKwkJCSAqIGluZGlzcmVhZHkgbWF5 IGFscmVhZHkgYmUgZmFsc2UgaWYgdGhlIENJQyBmYWlsZWQgYmVmb3JlCisJCQkgKiBpbmRleF9j b25jdXJyZW50bHlfYnVpbGQgaGFkIGEgY2hhbmNlIHRvIHNldCBpdC4KKwkJCSAqLwogCQkJQXNz ZXJ0KCFpbmRleEZvcm0tPmluZGlzdmFsaWQpOwogCQkJaW5kZXhGb3JtLT5pbmRpc3JlYWR5ID0g ZmFsc2U7CiAJCQlicmVhazsKQEAgLTM4NDksNiArMzg2Nyw3IEBAIHJlaW5kZXhfaW5kZXgoY29u c3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCBpbmRleElkLAogCQkJCWhlYXBSZWxhdGlvbjsKIAlP aWQJCQloZWFwSWQ7CiAJT2lkCQkJc2F2ZV91c2VyaWQ7CisJT2lkCQkJanVua0F1eEluZGV4SWQ7 CiAJaW50CQkJc2F2ZV9zZWNfY29udGV4dDsKIAlpbnQJCQlzYXZlX25lc3RsZXZlbDsKIAlJbmRl eEluZm8gICppbmRleEluZm87CkBAIC0zOTA1LDYgKzM5MjQsMTkgQEAgcmVpbmRleF9pbmRleChj b25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIGluZGV4SWQsCiAJCXBnc3RhdF9wcm9ncmVzc191 cGRhdGVfbXVsdGlfcGFyYW0oMiwgcHJvZ3Jlc3NfY29scywgcHJvZ3Jlc3NfdmFscyk7CiAJfQog CisJLyogQ2hlY2sgZm9yIHRoZSBhdXhpbGlhcnkgaW5kZXggZm9yIHRoYXQgaW5kZXgsIGl0IG5l ZWRzIHRvIGJlIGRyb3BwZWQgKi8KKwlqdW5rQXV4SW5kZXhJZCA9IGdldF9hdXhpbGlhcnlfaW5k ZXgoaW5kZXhJZCk7CisJaWYgKE9pZElzVmFsaWQoanVua0F1eEluZGV4SWQpKQorCXsKKwkJT2Jq ZWN0QWRkcmVzcyBvYmplY3Q7CisJCW9iamVjdC5jbGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklk OworCQlvYmplY3Qub2JqZWN0SWQgPSBqdW5rQXV4SW5kZXhJZDsKKwkJb2JqZWN0Lm9iamVjdFN1 YklkID0gMDsKKwkJcGVyZm9ybURlbGV0aW9uKCZvYmplY3QsIERST1BfUkVTVFJJQ1QsCisJCQkJ CQkJCSBQRVJGT1JNX0RFTEVUSU9OX0lOVEVSTkFMIHwKKwkJCQkJCQkJIFBFUkZPUk1fREVMRVRJ T05fUVVJRVRMWSk7CisJfQorCiAJLyoKIAkgKiBPcGVuIHRoZSB0YXJnZXQgaW5kZXggcmVsYXRp b24gYW5kIGdldCBhbiBleGNsdXNpdmUgbG9jayBvbiBpdCwgdG8KIAkgKiBlbnN1cmUgdGhhdCBu byBvbmUgZWxzZSBpcyB0b3VjaGluZyB0aGlzIHBhcnRpY3VsYXIgaW5kZXguCkBAIC00MTkzLDcg KzQyMjUsOCBAQCByZWluZGV4X3JlbGF0aW9uKGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQg cmVsaWQsIGludCBmbGFncywKIHsKIAlSZWxhdGlvbglyZWw7CiAJT2lkCQkJdG9hc3RfcmVsaWQ7 Ci0JTGlzdAkgICAqaW5kZXhJZHM7CisJTGlzdAkgICAqaW5kZXhJZHMsCisJCQkgICAqYXV4SW5k ZXhJZHMgPSBOSUw7CiAJY2hhcgkJcGVyc2lzdGVuY2U7CiAJYm9vbAkJcmVzdWx0ID0gZmFsc2U7 CiAJTGlzdENlbGwgICAqaW5kZXhJZDsKQEAgLTQyODIsMTMgKzQzMTUsMzAgQEAgcmVpbmRleF9y ZWxhdGlvbihjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGlkLCBpbnQgZmxhZ3MsCiAJ ZWxzZQogCQlwZXJzaXN0ZW5jZSA9IHJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZTsKIAorCWZv cmVhY2goaW5kZXhJZCwgaW5kZXhJZHMpCisJeworCQlPaWQJCQlpbmRleE9pZCA9IGxmaXJzdF9v aWQoaW5kZXhJZCk7CisJCU9pZAkJCWluZGV4QW0gPSBnZXRfcmVsX3JlbGFtKGluZGV4T2lkKTsK KworCQkvKiBBbGwgU1RJUiBpbmRleGVzIGFyZSBhdXhpbGlhcnkgaW5kZXhlcyAqLworCQlpZiAo aW5kZXhBbSA9PSBTVElSX0FNX09JRCkKKwkJeworCQkJaWYgKGZsYWdzICYgUkVJTkRFWF9SRUxf U1VQUFJFU1NfSU5ERVhfVVNFKQorCQkJCVJlbW92ZVJlaW5kZXhQZW5kaW5nKGluZGV4T2lkKTsK KwkJCWF1eEluZGV4SWRzID0gbGFwcGVuZF9vaWQoYXV4SW5kZXhJZHMsIGluZGV4T2lkKTsKKwkJ fQorCX0KKwogCS8qIFJlaW5kZXggYWxsIHRoZSBpbmRleGVzLiAqLwogCWkgPSAxOwogCWZvcmVh Y2goaW5kZXhJZCwgaW5kZXhJZHMpCiAJewogCQlPaWQJCQlpbmRleE9pZCA9IGxmaXJzdF9vaWQo aW5kZXhJZCk7CiAJCU9pZAkJCWluZGV4TmFtZXNwYWNlSWQgPSBnZXRfcmVsX25hbWVzcGFjZShp bmRleE9pZCk7Ci0JCU9pZAkJCWluZGV4QW0gPSBnZXRfcmVsX3JlbGFtKGluZGV4T2lkKTsKKwor CQkvKiBBdXhpbGlhcnkgaW5kZXhlcyBhcmUgZ29pbmcgdG8gYmUgZHJvcHBlZCBkdXJpbmcgbWFp biBpbmRleCByZWJ1aWxkICovCisJCWlmIChsaXN0X21lbWJlcl9vaWQoYXV4SW5kZXhJZHMsIGlu ZGV4T2lkKSkKKwkJCWNvbnRpbnVlOwogCiAJCS8qCiAJCSAqIFNraXAgYW55IGludmFsaWQgaW5k ZXhlcyBvbiBhIFRPQVNUIHRhYmxlLiAgVGhlc2UgY2FuIG9ubHkgYmUKQEAgLTQzMTQsMTggKzQz NjQsNiBAQCByZWluZGV4X3JlbGF0aW9uKGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVs aWQsIGludCBmbGFncywKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKGluZGV4QW0gPT0gU1RJ Ul9BTV9PSUQpCi0JCXsKLQkJCWVyZXBvcnQoV0FSTklORywKLQkJCQkJKGVycmNvZGUoRVJSQ09E RV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJCQkgZXJybXNnKCJza2lwcGluZyByZWluZGV4 IG9mIGF1eGlsaWFyeSBpbmRleCBcIiVzLiVzXCIiLAotCQkJCQkJCWdldF9uYW1lc3BhY2VfbmFt ZShpbmRleE5hbWVzcGFjZUlkKSwKLQkJCQkJCQlnZXRfcmVsX25hbWUoaW5kZXhPaWQpKSkpOwot CQkJaWYgKGZsYWdzICYgUkVJTkRFWF9SRUxfU1VQUFJFU1NfSU5ERVhfVVNFKQotCQkJCVJlbW92 ZVJlaW5kZXhQZW5kaW5nKGluZGV4T2lkKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KIAkJcmVpbmRl eF9pbmRleChzdG10LCBpbmRleE9pZCwgIShmbGFncyAmIFJFSU5ERVhfUkVMX0NIRUNLX0NPTlNU UkFJTlRTKSwKIAkJCQkJICBwZXJzaXN0ZW5jZSwgcGFyYW1zKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY2F0YWxvZy9wZ19kZXBlbmQuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfZGVw ZW5kLmMKaW5kZXggMDdjMmQ0MWMxODkuLmRlYWNkMmY3Yzk1IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jYXRhbG9nL3BnX2RlcGVuZC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfZGVw ZW5kLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL2NhdGFsb2cuaCIKICNp bmNsdWRlICJjYXRhbG9nL2RlcGVuZGVuY3kuaCIKICNpbmNsdWRlICJjYXRhbG9nL2luZGV4aW5n LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbV9kLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19j b25zdHJhaW50LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kZXBlbmQuaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX2V4dGVuc2lvbi5oIgpAQCAtMTEwOCw2ICsxMTA5LDY3IEBAIGdldF9pbmRleF9j b25zdHJhaW50KE9pZCBpbmRleElkKQogCXJldHVybiBjb25zdHJhaW50SWQ7CiB9CiAKKy8qCisg KiBnZXRfYXV4aWxpYXJ5X2luZGV4CisgKgkJR2l2ZW4gdGhlIE9JRCBvZiBhbiBpbmRleCwgcmV0 dXJuIHRoZSBPSUQgb2YgaXRzIGF1eGlsaWFyeQorICoJCWluZGV4LCBvciBJbnZhbGlkT2lkIGlm IHRoZXJlIGlzIG5vIGF1eGlsaWFyeSBpbmRleC4KKyAqLworT2lkCitnZXRfYXV4aWxpYXJ5X2lu ZGV4KE9pZCBpbmRleElkKQoreworCU9pZAkJCWF1eGlsaWFyeUluZGV4T2lkID0gSW52YWxpZE9p ZDsKKwlSZWxhdGlvbglkZXBSZWw7CisJU2NhbktleURhdGEga2V5WzNdOworCVN5c1NjYW5EZXNj IHNjYW47CisJSGVhcFR1cGxlCXR1cDsKKworCS8qIFNlYXJjaCB0aGUgZGVwZW5kZW5jeSB0YWJs ZSBmb3IgdGhlIGluZGV4ICovCisJZGVwUmVsID0gdGFibGVfb3BlbihEZXBlbmRSZWxhdGlvbklk LCBBY2Nlc3NTaGFyZUxvY2spOworCisJU2NhbktleUluaXQoJmtleVswXSwKKwkJCQlBbnVtX3Bn X2RlcGVuZF9yZWZjbGFzc2lkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwK KwkJCQlPYmplY3RJZEdldERhdHVtKFJlbGF0aW9uUmVsYXRpb25JZCkpOworCVNjYW5LZXlJbml0 KCZrZXlbMV0sCisJCQkJQW51bV9wZ19kZXBlbmRfcmVmb2JqaWQsCisJCQkJQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oaW5kZXhJZCkpOworCVNj YW5LZXlJbml0KCZrZXlbMl0sCisJCQkJQW51bV9wZ19kZXBlbmRfcmVmb2Jqc3ViaWQsCisJCQkJ QlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX0lOVDRFUSwKKwkJCQlJbnQzMkdldERhdHVtKDApKTsK KworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oZGVwUmVsLCBEZXBlbmRSZWZlcmVuY2VJbmRl eElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMywga2V5KTsKKworCXdoaWxlIChIZWFwVHVwbGVJ c1ZhbGlkKHR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJRm9ybV9wZ19kZXBl bmQgZGVwcmVjID0gKEZvcm1fcGdfZGVwZW5kKSBHRVRTVFJVQ1QodHVwKTsKKworCQkvKgorCQkg KiBMb29rIGZvciBhbiBBVVRPIGRlcGVuZGVuY3kgb24gYSBTVElSIGluZGV4LiAgVGhlcmUgY2Fu IGJlIGF0IG1vc3QKKwkJICogb25lIFNUSVIgYXV4aWxpYXJ5IHBlciBpbmRleCwgc28gd2Ugc3Rv cCBhdCB0aGUgZmlyc3QgbWF0Y2guCisJCSAqIFRyYW5zaXRpdmUgYXV4aWxpYXJpZXMgKGUuZy4g Y2NuZXdfY2NhdXggZnJvbSBhIGZhaWxlZCBSRUlOREVYCisJCSAqIENPTkNVUlJFTlRMWSkgYXJl IGZvdW5kIGJ5IGNhbGxpbmcgdGhpcyB3aXRoIHRoZSBjY25ldyBPSUQsIGFuZAorCQkgKiBhcmUg YWxzbyBjbGVhbmVkIHVwIGF1dG9tYXRpY2FsbHkgdmlhIGNhc2NhZGluZyBBVVRPIGRlcGVuZGVu Y3kKKwkJICogd2hlbiB0aGUgaW50ZXJtZWRpYXRlIGluZGV4IGlzIGRyb3BwZWQuCisJCSAqLwor CQlpZiAoZGVwcmVjLT5jbGFzc2lkID09IFJlbGF0aW9uUmVsYXRpb25JZCAmJgorCQkJKGRlcHJl Yy0+ZGVwdHlwZSA9PSBERVBFTkRFTkNZX0FVVE8pICYmCisJCQlnZXRfcmVsX3JlbGtpbmQoZGVw cmVjLT5vYmppZCkgPT0gUkVMS0lORF9JTkRFWCAmJgorCQkJZ2V0X3JlbF9yZWxhbShkZXByZWMt Pm9iamlkKSA9PSBTVElSX0FNX09JRCkKKwkJeworCQkJYXV4aWxpYXJ5SW5kZXhPaWQgPSBkZXBy ZWMtPm9iamlkOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4p OworCXRhYmxlX2Nsb3NlKGRlcFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBhdXhp bGlhcnlJbmRleE9pZDsKK30KKwogLyoKICAqIGdldF9pbmRleF9yZWZfY29uc3RyYWludHMKICAq CQlHaXZlbiB0aGUgT0lEIG9mIGFuIGluZGV4LCByZXR1cm4gdGhlIE9JRCBvZiBhbGwgZm9yZWln biBrZXkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYyBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYwppbmRleCBkN2VhODZiMjgwNS4uZjQyOGRjZGYxMGYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYworKysgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMKQEAgLTMxNSw2ICszMTUsNyBAQCBjcmVhdGVfdG9hc3Rf dGFibGUoUmVsYXRpb24gcmVsLCBPaWQgdG9hc3RPaWQsIE9pZCB0b2FzdEluZGV4T2lkLAogCWlu ZGV4SW5mby0+aWlfQW0gPSBCVFJFRV9BTV9PSUQ7CiAJaW5kZXhJbmZvLT5paV9BbUNhY2hlID0g TlVMTDsKIAlpbmRleEluZm8tPmlpX0F1eGlsaWFyeSA9IGZhbHNlOworCWluZGV4SW5mby0+aWlf QXV4aWxpYXJ5Rm9ySW5kZXhJZCA9IEludmFsaWRPaWQ7CiAJaW5kZXhJbmZvLT5paV9Db250ZXh0 ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7CiAKIAljb2xsYXRpb25JZHNbMF0gPSBJbnZhbGlkT2lk OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwppbmRleCBlMDYzNTNmM2ZkZS4uMDcwOWU0Zjk4NmIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC0yNDcsNyArMjQ3LDcgQEAgQ2hlY2tJbmRl eENvbXBhdGlibGUoT2lkIG9sZElkLAogCWluZGV4SW5mbyA9IG1ha2VJbmRleEluZm8obnVtYmVy T2ZBdHRyaWJ1dGVzLCBudW1iZXJPZkF0dHJpYnV0ZXMsCiAJCQkJCQkJICBhY2Nlc3NNZXRob2RJ ZCwgTklMLCBOSUwsIGZhbHNlLCBmYWxzZSwKIAkJCQkJCQkgIGZhbHNlLCBmYWxzZSwgYW1zdW1t YXJpemluZywKLQkJCQkJCQkgIGlzV2l0aG91dE92ZXJsYXBzLCBpc2F1eGlsaWFyeSk7CisJCQkJ CQkJICBpc1dpdGhvdXRPdmVybGFwcywgaXNhdXhpbGlhcnksIEludmFsaWRPaWQpOwogCXR5cGVJ ZHMgPSBwYWxsb2NfYXJyYXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwogCWNvbGxhdGlvbklk cyA9IHBhbGxvY19hcnJheShPaWQsIG51bWJlck9mQXR0cmlidXRlcyk7CiAJb3BjbGFzc0lkcyA9 IHBhbGxvY19hcnJheShPaWQsIG51bWJlck9mQXR0cmlidXRlcyk7CkBAIC05NDcsNyArOTQ3LDgg QEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCSAgY29uY3VycmVudCwK IAkJCQkJCQkgIGFtaXNzdW1tYXJpemluZywKIAkJCQkJCQkgIHN0bXQtPmlzd2l0aG91dG92ZXJs YXBzLAotCQkJCQkJCSAgZmFsc2UpOworCQkJCQkJCSAgZmFsc2UsCisJCQkJCQkJICBJbnZhbGlk T2lkKTsKIAogCXR5cGVJZHMgPSBwYWxsb2NfYXJyYXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMp OwogCWNvbGxhdGlvbklkcyA9IHBhbGxvY19hcnJheShPaWQsIG51bWJlck9mQXR0cmlidXRlcyk7 CkBAIC0zNzExLDYgKzM3MTIsNyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3Qg UmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCXsKIAkJT2lk CQkJaW5kZXhJZDsKIAkJT2lkCQkJYXV4SW5kZXhJZDsKKwkJT2lkCQkJanVua0F1eEluZGV4SWQ7 CiAJCU9pZAkJCXRhYmxlSWQ7CiAJCU9pZAkJCWFtSWQ7CiAJCWJvb2wJCXNhZmU7CQkvKiBmb3Ig c2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MgKi8KQEAgLTQwNjAsNiArNDA2Miw3IEBAIFJlaW5kZXhS ZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9u T2lkLCBjb25zdCBSZWluCiAJCVJlaW5kZXhJbmRleEluZm8gKm5ld2lkeDsKIAkJT2lkCQkJbmV3 SW5kZXhJZDsKIAkJT2lkCQkJYXV4SW5kZXhJZDsKKwkJT2lkCQkJanVua0F1eEluZGV4SWQ7CiAJ CVJlbGF0aW9uCWluZGV4UmVsOwogCQlSZWxhdGlvbgloZWFwUmVsOwogCQlPaWQJCQlzYXZlX3Vz ZXJpZDsKQEAgLTQwNjcsNiArNDA3MCw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShj b25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCWlu dAkJCXNhdmVfbmVzdGxldmVsOwogCQlSZWxhdGlvbgluZXdJbmRleFJlbDsKIAkJUmVsYXRpb24J YXV4SW5kZXhSZWw7CisJCVJlbGF0aW9uCWp1bmtBdXhJbmRleFJlbDsKIAkJTG9ja1JlbElkICAq bG9ja3JlbGlkOwogCQlPaWQJCQl0YWJsZXNwYWNlaWQ7CiAKQEAgLTQxNDAsMTIgKzQxNDQsMTcg QEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBP aWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJCQkJCQkJCQkJCSAgIHRhYmxlc3BhY2VpZCwK IAkJCQkJCQkJCQkJCSAgIGF1eENvbmN1cnJlbnROYW1lKTsKIAorCQkvKiBTZWFyY2ggZm9yIGF1 eGlsaWFyeSBpbmRleCBmb3IgcmVpbmRleGVkIGluZGV4LCB0byBkcm9wIGl0ICovCisJCWp1bmtB dXhJbmRleElkID0gZ2V0X2F1eGlsaWFyeV9pbmRleChpZHgtPmluZGV4SWQpOworCiAJCS8qCiAJ CSAqIE5vdyBvcGVuIHRoZSByZWxhdGlvbiBvZiB0aGUgbmV3IGluZGV4LCBhIHNlc3Npb24tbGV2 ZWwgbG9jayBpcwogCQkgKiBhbHNvIG5lZWRlZCBvbiBpdC4KIAkJICovCiAJCW5ld0luZGV4UmVs ID0gaW5kZXhfb3BlbihuZXdJbmRleElkLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOwogCQlh dXhJbmRleFJlbCA9IGluZGV4X29wZW4oYXV4SW5kZXhJZCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVM b2NrKTsKKwkJaWYgKE9pZElzVmFsaWQoanVua0F1eEluZGV4SWQpKQorCQkJanVua0F1eEluZGV4 UmVsID0gaW5kZXhfb3BlbihqdW5rQXV4SW5kZXhJZCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2Nr KTsKIAogCQkvKgogCQkgKiBTYXZlIHRoZSBsaXN0IG9mIE9JRHMgYW5kIGxvY2tzIGluIHByaXZh dGUgY29udGV4dApAQCAtNDE1NSw2ICs0MTY0LDcgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVu dGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4K IAkJbmV3aWR4ID0gcGFsbG9jX29iamVjdChSZWluZGV4SW5kZXhJbmZvKTsKIAkJbmV3aWR4LT5p bmRleElkID0gbmV3SW5kZXhJZDsKIAkJbmV3aWR4LT5hdXhJbmRleElkID0gYXV4SW5kZXhJZDsK KwkJbmV3aWR4LT5qdW5rQXV4SW5kZXhJZCA9IGp1bmtBdXhJbmRleElkOwogCQluZXdpZHgtPnNh ZmUgPSBpZHgtPnNhZmU7CiAJCW5ld2lkeC0+dGFibGVJZCA9IGlkeC0+dGFibGVJZDsKIAkJbmV3 aWR4LT5hbUlkID0gaWR4LT5hbUlkOwpAQCAtNDE3NiwxMCArNDE4NiwxOCBAQCBSZWluZGV4UmVs YXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9p ZCwgY29uc3QgUmVpbgogCQlsb2NrcmVsaWQgPSBwYWxsb2Nfb2JqZWN0KExvY2tSZWxJZCk7CiAJ CSpsb2NrcmVsaWQgPSBhdXhJbmRleFJlbC0+cmRfbG9ja0luZm8ubG9ja1JlbElkOwogCQlyZWxh dGlvbkxvY2tzID0gbGFwcGVuZChyZWxhdGlvbkxvY2tzLCBsb2NrcmVsaWQpOworCQlpZiAoT2lk SXNWYWxpZChqdW5rQXV4SW5kZXhJZCkpCisJCXsKKwkJCWxvY2tyZWxpZCA9IHBhbGxvY19vYmpl Y3QoTG9ja1JlbElkKTsKKwkJCSpsb2NrcmVsaWQgPSBqdW5rQXV4SW5kZXhSZWwtPnJkX2xvY2tJ bmZvLmxvY2tSZWxJZDsKKwkJCXJlbGF0aW9uTG9ja3MgPSBsYXBwZW5kKHJlbGF0aW9uTG9ja3Ms IGxvY2tyZWxpZCk7CisJCX0KIAogCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7 CiAKIAkJaW5kZXhfY2xvc2UoaW5kZXhSZWwsIE5vTG9jayk7CisJCWlmIChPaWRJc1ZhbGlkKGp1 bmtBdXhJbmRleElkKSkKKwkJCWluZGV4X2Nsb3NlKGp1bmtBdXhJbmRleFJlbCwgTm9Mb2NrKTsK IAkJaW5kZXhfY2xvc2UoYXV4SW5kZXhSZWwsIE5vTG9jayk7CiAJCWluZGV4X2Nsb3NlKG5ld0lu ZGV4UmVsLCBOb0xvY2spOwogCkBAIC00MzY4LDcgKzQzODYsOCBAQCBSZWluZGV4UmVsYXRpb25D b25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29u c3QgUmVpbgogCiAJLyoKIAkgKiBBdCB0aGlzIG1vbWVudCBhbGwgdGFyZ2V0IGluZGV4ZXMgYXJl IG1hcmtlZCBhcyAicmVhZHktdG8taW5zZXJ0Ii4gU28sCi0JICogd2UgYXJlIGZyZWUgdG8gc3Rh cnQgcHJvY2VzcyBvZiBkcm9wcGluZyBhdXhpbGlhcnkgaW5kZXhlcy4KKwkgKiB3ZSBhcmUgZnJl ZSB0byBzdGFydCBwcm9jZXNzIG9mIGRyb3BwaW5nIGF1eGlsaWFyeSBpbmRleGVzIC0gaW5jbHVk aW5nCisJICoganVuayBpbmRleGVzIGRldGVjdGVkIGVhcmxpZXIuCiAJICovCiAJZm9yZWFjaChs YywgbmV3SW5kZXhJZHMpCiAJewpAQCAtNDM5MSw2ICs0NDEwLDkgQEAgUmVpbmRleFJlbGF0aW9u Q29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNv bnN0IFJlaW4KIAkJICovCiAJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBz aG90KCkpOwogCQlpbmRleF9zZXRfc3RhdGVfZmxhZ3MobmV3aWR4LT5hdXhJbmRleElkLCBJTkRF WF9EUk9QX0NMRUFSX1JFQURZKTsKKwkJLyogRW5zdXJlIHRoZSBqdW5rIGluZGV4IGlzIG1hcmtl ZCBhcyBub24tcmVhZHkgKi8KKwkJaWYgKE9pZElzVmFsaWQobmV3aWR4LT5qdW5rQXV4SW5kZXhJ ZCkpCisJCQlpbmRleF9zZXRfc3RhdGVfZmxhZ3MobmV3aWR4LT5qdW5rQXV4SW5kZXhJZCwgSU5E RVhfRFJPUF9DTEVBUl9SRUFEWSk7CiAJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAKIAkJQ29tbWl0 VHJhbnNhY3Rpb25Db21tYW5kKCk7CkBAIC00NjEwLDYgKzQ2MzIsOCBAQCBSZWluZGV4UmVsYXRp b25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwg Y29uc3QgUmVpbgogCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgp KTsKIAogCQlpbmRleF9jb25jdXJyZW50bHlfc2V0X2RlYWQobmV3aWR4LT50YWJsZUlkLCBuZXdp ZHgtPmF1eEluZGV4SWQpOworCQlpZiAoT2lkSXNWYWxpZChuZXdpZHgtPmp1bmtBdXhJbmRleElk KSkKKwkJCWluZGV4X2NvbmN1cnJlbnRseV9zZXRfZGVhZChuZXdpZHgtPnRhYmxlSWQsIG5ld2lk eC0+anVua0F1eEluZGV4SWQpOwogCiAJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAJfQpAQCAtNDY2 MSw2ICs0Njg1LDEzIEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4 U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCQlvYmplY3Qub2JqZWN0 U3ViSWQgPSAwOwogCiAJCQlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJlc3MoJm9iamVjdCwgb2JqZWN0 cyk7CisKKwkJCWlmIChPaWRJc1ZhbGlkKGlkeC0+anVua0F1eEluZGV4SWQpKQorCQkJeworCQkJ CW9iamVjdC5vYmplY3RJZCA9IGlkeC0+anVua0F1eEluZGV4SWQ7CisJCQkJb2JqZWN0Lm9iamVj dFN1YklkID0gMDsKKwkJCQlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJlc3MoJm9iamVjdCwgb2JqZWN0 cyk7CisJCQl9CiAJCX0KIAogCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv dGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCA4YjRl YmM2ZjIyNi4uMjQxNzFhMWYxNjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Rh YmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC0xNTY3 LDYgKzE1NjcsOCBAQCBSZW1vdmVSZWxhdGlvbnMoRHJvcFN0bXQgKmRyb3ApCiAJTGlzdENlbGwg ICAqY2VsbDsKIAlpbnQJCQlmbGFncyA9IDA7CiAJTE9DS01PREUJbG9ja21vZGUgPSBBY2Nlc3NF eGNsdXNpdmVMb2NrOworCU1lbW9yeUNvbnRleHQgcHJpdmF0ZV9jb250ZXh0LAorCQkJCSAgb2xk Y29udGV4dDsKIAogCS8qIERST1AgQ09OQ1VSUkVOVExZIHVzZXMgYSB3ZWFrZXIgbG9jaywgYW5k IGhhcyBzb21lIHJlc3RyaWN0aW9ucyAqLwogCWlmIChkcm9wLT5jb25jdXJyZW50KQpAQCAtMTYz MSw5ICsxNjMzLDIwIEBAIFJlbW92ZVJlbGF0aW9ucyhEcm9wU3RtdCAqZHJvcCkKIAkJCXJlbGtp bmQgPSAwOwkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwogCQkJYnJlYWs7CiAJfQorCS8qCisJ ICogQ3JlYXRlIGEgbWVtb3J5IGNvbnRleHQgdGhhdCB3aWxsIHN1cnZpdmUgZm9yY2VkIHRyYW5z YWN0aW9uIGNvbW1pdHMgd2UKKwkgKiBtYXkgbmVlZCB0byBkbyBiZWxvdyAoaW4gY2FzZSBvZiBj b25jdXJyZW50IGluZGV4IGRyb3ApLgorCSAqIFNpbmNlIGl0IGlzIGEgY2hpbGQgb2YgUG9ydGFs Q29udGV4dCwgaXQgd2lsbCBnbyBhd2F5IGV2ZW50dWFsbHkgZXZlbiBpZgorCSAqIHdlIHN1ZmZl ciBhbiBlcnJvcjsgdGhlcmUncyBubyBuZWVkIGZvciBzcGVjaWFsIGFib3J0IGNsZWFudXAgbG9n aWMuCisJICovCisJcHJpdmF0ZV9jb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFBvcnRh bENvbnRleHQsCisJCQkJCQkJCQkJCSJSZW1vdmVSZWxhdGlvbnMiLAorCQkJCQkJCQkJCQlBTExP Q1NFVF9TTUFMTF9TSVpFUyk7CiAKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRv KHByaXZhdGVfY29udGV4dCk7CiAJLyogTG9jayBhbmQgdmFsaWRhdGUgZWFjaCByZWxhdGlvbjsg YnVpbGQgYSBsaXN0IG9mIG9iamVjdCBhZGRyZXNzZXMgKi8KIAlvYmplY3RzID0gbmV3X29iamVj dF9hZGRyZXNzZXMoKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAKIAlm b3JlYWNoKGNlbGwsIGRyb3AtPm9iamVjdHMpCiAJewpAQCAtMTY4NSw2ICsxNjk4LDM4IEBAIFJl bW92ZVJlbGF0aW9ucyhEcm9wU3RtdCAqZHJvcCkKIAkJCWZsYWdzIHw9IFBFUkZPUk1fREVMRVRJ T05fQ09OQ1VSUkVOVExZOwogCQl9CiAKKwkJLyoKKwkJICogQ29uY3VycmVudCBpbmRleCBkcm9w IHJlcXVpcmVzIGl0IHRvIGJlIHRoZSBmaXJzdCB0cmFuc2FjdGlvbi4gQnV0IGluCisJCSAqIGNh c2Ugd2UgaGF2ZSBqdW5rIGF1eGlsaWFyeSBpbmRleCAtIHdlIHdhbnQgdG8gZHJvcCBpdCB0b28g KGFuZCBhbHNvCisJCSAqIGluIGEgY29uY3VycmVudCB3YXkpLiBJbiB0aGlzIGNhc2UgcGVyZm9y bSBzaWxlbnQgaW50ZXJuYWwgZGVsZXRpb24KKwkJICogb2YgYXV4aWxpYXJ5IGluZGV4LCBhbmQg cmVzdG9yZSB0cmFuc2FjdGlvbiBzdGF0ZS4gSXQgaXMgZmluZSB0byBkbyBpdAorCQkgKiBpbiB0 aGUgbG9vcCBiZWNhdXNlIHRoZXJlIGlzIG9ubHkgc2luZ2xlIGVsZW1lbnQgaW4gZHJvcC0+b2Jq ZWN0cy4KKwkJICovCisJCWlmICgoZmxhZ3MgJiBQRVJGT1JNX0RFTEVUSU9OX0NPTkNVUlJFTlRM WSkgIT0gMCAmJgorCQkJc3RhdGUuYWN0dWFsX3JlbGtpbmQgPT0gUkVMS0lORF9JTkRFWCkKKwkJ eworCQkJT2lkIGp1bmtBdXhJbmRleE9pZCA9IGdldF9hdXhpbGlhcnlfaW5kZXgocmVsT2lkKTsK KwkJCWlmIChPaWRJc1ZhbGlkKGp1bmtBdXhJbmRleE9pZCkpCisJCQl7CisJCQkJT2JqZWN0QWRk cmVzcyBvYmplY3Q7CisJCQkJb2JqZWN0LmNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CisJ CQkJb2JqZWN0Lm9iamVjdElkID0ganVua0F1eEluZGV4T2lkOworCQkJCW9iamVjdC5vYmplY3RT dWJJZCA9IDA7CisJCQkJcGVyZm9ybURlbGV0aW9uKCZvYmplY3QsIERST1BfUkVTVFJJQ1QsCisJ CQkJCQkJCQkJIFBFUkZPUk1fREVMRVRJT05fQ09OQ1VSUkVOVExZIHwKKwkJCQkJCQkJCQkgUEVS Rk9STV9ERUxFVElPTl9JTlRFUk5BTCB8CisJCQkJCQkJCQkJIFBFUkZPUk1fREVMRVRJT05fUVVJ RVRMWSk7CisJCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCQkJTWVtb3J5Q29udGV4 dERlbGV0ZShwcml2YXRlX2NvbnRleHQpOworCisJCQkJLyogQW5kIHN0YXJ0IGFnYWluIC0gbm93 IHdpdGhvdXQgYXV4aWxpYXJ5IGluZGV4LiAqLworCQkJCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5k KCk7CisJCQkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJ CQkJUmVtb3ZlUmVsYXRpb25zKGRyb3ApOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCiAJCS8q CiAJCSAqIENvbmN1cnJlbnQgaW5kZXggZHJvcCBjYW5ub3QgYmUgdXNlZCB3aXRoIHBhcnRpdGlv bmVkIGluZGV4ZXMsCiAJCSAqIGVpdGhlci4KQEAgLTE3MTMsMTIgKzE3NTgsMTcgQEAgUmVtb3Zl UmVsYXRpb25zKERyb3BTdG10ICpkcm9wKQogCQlvYmoub2JqZWN0SWQgPSByZWxPaWQ7CiAJCW9i ai5vYmplY3RTdWJJZCA9IDA7CiAKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhwcml2YXRlX2NvbnRleHQpOwogCQlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJlc3MoJm9iaiwgb2Jq ZWN0cyk7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIAl9CiAKKwkvKiBE ZWxldGlvbiBtYXkgaW52b2x2ZSBtdWx0aXBsZSBjb21taXRzLCBzbywgc3dpdGNoIHRvIG1lbW9y eSBjb250ZXh0ICovCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwcml2YXRl X2NvbnRleHQpOwogCXBlcmZvcm1NdWx0aXBsZURlbGV0aW9ucyhvYmplY3RzLCBkcm9wLT5iZWhh dmlvciwgZmxhZ3MpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIAotCWZy ZWVfb2JqZWN0X2FkZHJlc3NlcyhvYmplY3RzKTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHByaXZh dGVfY29udGV4dCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9tYWtl ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCmluZGV4IDg0ZjdjZjk4MjRl Li5jNTQ3NDhmZjY0NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMK KysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKQEAgLTgzNCw3ICs4MzQsNyBAQCBJ bmRleEluZm8gKgogbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywg T2lkIGFtb2lkLCBMaXN0ICpleHByZXNzaW9ucywKIAkJCSAgTGlzdCAqcHJlZGljYXRlcywgYm9v bCB1bmlxdWUsIGJvb2wgbnVsbHNfbm90X2Rpc3RpbmN0LAogCQkJICBib29sIGlzcmVhZHksIGJv b2wgY29uY3VycmVudCwgYm9vbCBzdW1tYXJpemluZywKLQkJCSAgYm9vbCB3aXRob3V0b3Zlcmxh cHMsIGJvb2wgYXV4aWxpYXJ5KQorCQkJICBib29sIHdpdGhvdXRvdmVybGFwcywgYm9vbCBhdXhp bGlhcnksIE9pZCBhdXhpbGlhcnlfZm9yX2luZGV4X2lkKQogewogCUluZGV4SW5mbyAgKm4gPSBt YWtlTm9kZShJbmRleEluZm8pOwogCkBAIC04NTEsNiArODUxLDcgQEAgbWFrZUluZGV4SW5mbyhp bnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lkLCBMaXN0ICpleHByZXNzaW9u cywKIAluLT5paV9TdW1tYXJpemluZyA9IHN1bW1hcml6aW5nOwogCW4tPmlpX1dpdGhvdXRPdmVy bGFwcyA9IHdpdGhvdXRvdmVybGFwczsKIAluLT5paV9BdXhpbGlhcnkgPSBhdXhpbGlhcnk7CisJ bi0+aWlfQXV4aWxpYXJ5Rm9ySW5kZXhJZCA9IGF1eGlsaWFyeV9mb3JfaW5kZXhfaWQ7CiAKIAkv KiBzdW1tYXJpemluZyBpbmRleGVzIGNhbm5vdCBjb250YWluIG5vbi1rZXkgYXR0cmlidXRlcyAq LwogCUFzc2VydCghc3VtbWFyaXppbmcgfHwgKG51bWtleWF0dHJzID09IG51bWF0dHJzKSk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3kuaCBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvZGVwZW5kZW5jeS5oCmluZGV4IDJmM2MxZWFlM2M3Li42YWUyMTBjNTg0ZSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmgKKysrIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmgKQEAgLTE5Myw2ICsxOTMsNyBAQCBleHRlcm4gTGlzdCAq Z2V0T3duZWRTZXF1ZW5jZXMoT2lkIHJlbGlkKTsKIGV4dGVybiBPaWQJZ2V0SWRlbnRpdHlTZXF1 ZW5jZShSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bnVtLCBib29sIG1pc3Npbmdfb2spOwog CiBleHRlcm4gT2lkCWdldF9pbmRleF9jb25zdHJhaW50KE9pZCBpbmRleElkKTsKK2V4dGVybiBP aWQJZ2V0X2F1eGlsaWFyeV9pbmRleChPaWQgaW5kZXhJZCk7CiAKIGV4dGVybiBMaXN0ICpnZXRf aW5kZXhfcmVmX2NvbnN0cmFpbnRzKE9pZCBpbmRleElkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApp bmRleCA3NGVmYTIzNzIxMi4uMTM2ZGRkYmJmMTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0y MjksNiArMjI5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhJbmZvCiAJaW50CQkJaWlfUGFyYWxs ZWxXb3JrZXJzOwogCS8qIGlzIGF1eGlsaWFyeSBmb3IgY29uY3VycmVudCBpbmRleCBidWlsZD8g Ki8KIAlib29sCQlpaV9BdXhpbGlhcnk7CisJLyogaWYgY3JlYXRpbmcgYW4gYXV4aWxpYXJ5IGlu ZGV4LCB0aGUgT0lEIG9mIHRoZSBtYWluIGluZGV4OyBvdGhlcndpc2UgSW52YWxpZE9pZC4gKi8K KwlPaWQJCQlpaV9BdXhpbGlhcnlGb3JJbmRleElkOwogCS8qIE9pZCBvZiBpbmRleCBBTSAqLwog CU9pZAkJCWlpX0FtOwogCS8qIHByaXZhdGUgY2FjaGUgYXJlYSBmb3IgaW5kZXggQU0gKi8KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oIGIvc3JjL2luY2x1ZGUvbm9k ZXMvbWFrZWZ1bmNzLmgKaW5kZXggY2Q3ZjFlYjA1OTIuLjNhNzA0NzgxYzhiIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9t YWtlZnVuY3MuaApAQCAtMTAwLDcgKzEwMCw3IEBAIGV4dGVybiBJbmRleEluZm8gKm1ha2VJbmRl eEluZm8oaW50IG51bWF0dHJzLCBpbnQgbnVta2V5YXR0cnMsIE9pZCBhbW9pZCwKIAkJCQkJCQkJ Ym9vbCB1bmlxdWUsIGJvb2wgbnVsbHNfbm90X2Rpc3RpbmN0LAogCQkJCQkJCQlib29sIGlzcmVh ZHksIGJvb2wgY29uY3VycmVudCwKIAkJCQkJCQkJYm9vbCBzdW1tYXJpemluZywgYm9vbCB3aXRo b3V0b3ZlcmxhcHMsCi0JCQkJCQkJCWJvb2wgYXV4aWxpYXJ5KTsKKwkJCQkJCQkJYm9vbCBhdXhp bGlhcnksIE9pZCBhdXhpbGlhcnlfZm9yX2luZGV4X2lkKTsKIAogZXh0ZXJuIE5vZGUgKm1ha2VT dHJpbmdDb25zdChjaGFyICpzdHIsIGludCBsb2NhdGlvbik7CiBleHRlcm4gRGVmRWxlbSAqbWFr ZURlZkVsZW0oY2hhciAqbmFtZSwgTm9kZSAqYXJnLCBpbnQgbG9jYXRpb24pOwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0IGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CmluZGV4IGQxNzIzZjQ3ZTg5Li4yZDZh YmIxNWE4OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5k ZXgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dApA QCAtMzI3OSwyMCArMzI3OSwxMDkgQEAgRVJST1I6ICByZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRl eCAiYXV4X2luZGV4X2luZDZfY2NhdXgiIG5vdCBzdXBwb3J0ZWQKIFJFSU5ERVggSU5ERVggQ09O Q1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2X2NjYXV4OwogRVJST1I6ICByZWluZGV4IG9mIGF1eGls aWFyeSBpbmRleCAiYXV4X2luZGV4X2luZDZfY2NhdXgiIG5vdCBzdXBwb3J0ZWQKIC0tIFRoaXMg bWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4IGNhbiBiZWNv bWUgdmFsaWQuCi1ERUxFVEUgRlJPTSBjb25jdXJfcmVpbmRleF90YWI0IFdIRVJFIGMxID0gMTsK LUVSUk9SOiAgcmVsYXRpb24gImNvbmN1cl9yZWluZGV4X3RhYjQiIGRvZXMgbm90IGV4aXN0Ci1M SU5FIDE6IERFTEVURSBGUk9NIGNvbmN1cl9yZWluZGV4X3RhYjQgV0hFUkUgYzEgPSAxOwotICAg ICAgICAgICAgICAgICAgICBeCitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9 IDE7CistLSBTaG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleCBhbmQgZHJvcHBlZAorUkVJ TkRFWCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXggaW5kZXggaXMgZHJv cHBlZAorXGQgYXV4X2luZGV4X3RhYjUKKyAgICAgICAgICAgVGFibGUgInB1YmxpYy5hdXhfaW5k ZXhfdGFiNSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZh dWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t CisgYzEgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitJbmRleGVzOgor ICAgICJhdXhfaW5kZXhfaW5kNiIgVU5JUVVFLCBidHJlZSAoYzEpCisKK0RST1AgSU5ERVggYXV4 X2luZGV4X2luZDY7CistLSBJbnNlcnQgZHVwbGljYXRlcyBhZ2FpbgorSU5TRVJUIElOVE8gYXV4 X2luZGV4X3RhYjUgVkFMVUVTICgxKSwgKDEpOworLS0gQ3JlYXRlIGludmFsaWQgaW5kZXggYWdh aW4KK0NSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2IE9OIGF1 eF9pbmRleF90YWI1IChjMSk7CitFUlJPUjogIGNvdWxkIG5vdCBjcmVhdGUgdW5pcXVlIGluZGV4 ICJhdXhfaW5kZXhfaW5kNiIKK0RFVEFJTDogIEtleSAoYzEpPSgxKSBpcyBkdXBsaWNhdGVkLgor LS0gVGhpcyBtYWtlcyB0aGUgcHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0aGUgaW5kZXgg Y2FuIGJlY29tZSB2YWxpZC4KK0RFTEVURSBGUk9NIGF1eF9pbmRleF90YWI1IFdIRVJFIGMxID0g MTsKIC0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyByZWluZGV4Ci1SRUlOREVYIFRBQkxFIGF1 eF9pbmRleF90YWI1OwotRVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRleCAiYXV4 X2luZGV4X2luZDYiCi1ERVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KLS0tIFNo b3VsZCBiZSBza2lwcGVkIGR1cmluZyBjb25jdXJyZW50IHJlaW5kZXgKIFJFSU5ERVggVEFCTEUg Q09OQ1VSUkVOVExZIGF1eF9pbmRleF90YWI1OwogV0FSTklORzogIHNraXBwaW5nIHJlaW5kZXgg b2YgaW52YWxpZCBpbmRleCAicHVibGljLmF1eF9pbmRleF9pbmQ2IgogSElOVDogIFVzZSBEUk9Q IElOREVYIG9yIFJFSU5ERVggSU5ERVguCiBXQVJOSU5HOiAgc2tpcHBpbmcgcmVpbmRleCBvZiBh dXhpbGlhcnkgaW5kZXggInB1YmxpYy5hdXhfaW5kZXhfaW5kNl9jY2F1eCIKIE5PVElDRTogIHRh YmxlICJhdXhfaW5kZXhfdGFiNSIgaGFzIG5vIGluZGV4ZXMgdGhhdCBjYW4gYmUgcmVpbmRleGVk IGNvbmN1cnJlbnRseQorLS0gTWFrZSBzdXJlIGl0IGlzIHN0aWxsIGV4aXN0cworXGQgYXV4X2lu ZGV4X3RhYjUKKyAgICAgICAgICAgVGFibGUgInB1YmxpYy5hdXhfaW5kZXhfdGFiNSIKKyBDb2x1 bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IAorLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgYzEgICAgIHwgaW50 ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitJbmRleGVzOgorICAgICJhdXhfaW5kZXhf aW5kNiIgVU5JUVVFLCBidHJlZSAoYzEpIElOVkFMSUQKKyAgICAiYXV4X2luZGV4X2luZDZfY2Nh dXgiIHN0aXIgKGMxKSBJTlZBTElECisKKy0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyByZWlu ZGV4IGFuZCBkcm9wcGVkCitSRUlOREVYIFRBQkxFIGF1eF9pbmRleF90YWI1OworLS0gTWFrZSBz dXJlIGF1eCBpbmRleCBpcyBkcm9wcGVkCitcZCBhdXhfaW5kZXhfdGFiNQorICAgICAgICAgICBU YWJsZSAicHVibGljLmF1eF9pbmRleF90YWI1IgorIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRp b24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAg ICAgICAgfCAKK0luZGV4ZXM6CisgICAgImF1eF9pbmRleF9pbmQ2IiBVTklRVUUsIGJ0cmVlIChj MSkKKworRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0tIEluc2VydCBkdXBsaWNhdGVzIGFn YWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEpLCAoMSk7CistLSBDcmVh dGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05DVVJSRU5UTFkg YXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKK0VSUk9SOiAgY291bGQgbm90 IGNyZWF0ZSB1bmlxdWUgaW5kZXggImF1eF9pbmRleF9pbmQ2IgorREVUQUlMOiAgS2V5IChjMSk9 KDEpIGlzIGR1cGxpY2F0ZWQuCistLSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdv IGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21lIHZhbGlkLgorREVMRVRFIEZST00gYXV4X2lu ZGV4X3RhYjUgV0hFUkUgYzEgPSAxOworLS0gU2hvdWxkIGJlIHNraXBwZWQgZHVyaW5nIHJlaW5k ZXggYW5kIGRyb3BwZWQKK1JFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2 OworLS0gTWFrZSBzdXJlIGF1eCBpbmRleCBpcyBkcm9wcGVkCitcZCBhdXhfaW5kZXhfdGFiNQor ICAgICAgICAgICBUYWJsZSAicHVibGljLmF1eF9pbmRleF90YWI1IgorIENvbHVtbiB8ICBUeXBl ICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAgfCBpbnRlZ2VyIHwgICAg ICAgICAgIHwgICAgICAgICAgfCAKK0luZGV4ZXM6CisgICAgImF1eF9pbmRleF9pbmQ2IiBVTklR VUUsIGJ0cmVlIChjMSkKKworRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0tIEluc2VydCBk dXBsaWNhdGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEpLCAo MSk7CistLSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRFWCBD T05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKK0VSUk9S OiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImF1eF9pbmRleF9pbmQ2IgorREVUQUlM OiAgS2V5IChjMSk9KDEpIGlzIGR1cGxpY2F0ZWQuCistLSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91 cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21lIHZhbGlkLgorREVMRVRF IEZST00gYXV4X2luZGV4X3RhYjUgV0hFUkUgYzEgPSAxOworLS0gRHJvcCBtYWluIGluZGV4IENP TkNVUlJFTlRMWQorRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDY7CistLSBN YWtlIHN1cmUgYXV4aWxpYXJ5IGluZGV4IGRyb3BwZWQgdG9vCitcZCBhdXhfaW5kZXhfdGFiNQor ICAgICAgICAgICBUYWJsZSAicHVibGljLmF1eF9pbmRleF90YWI1IgorIENvbHVtbiB8ICBUeXBl ICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAgfCBpbnRlZ2VyIHwgICAg ICAgICAgIHwgICAgICAgICAgfCAKKworRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKK0VSUk9S OiAgaW5kZXggImF1eF9pbmRleF9pbmQ2IiBkb2VzIG5vdCBleGlzdAorLS0gSW5zZXJ0IGR1cGxp Y2F0ZXMgYWdhaW4KK0lOU0VSVCBJTlRPIGF1eF9pbmRleF90YWI1IFZBTFVFUyAoMSksICgxKTsK Ky0tIENyZWF0ZSBpbnZhbGlkIGluZGV4IGFnYWluCitDUkVBVEUgVU5JUVVFIElOREVYIENPTkNV UlJFTlRMWSBhdXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAoYzEpOworRVJST1I6ICBj b3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRleCAiYXV4X2luZGV4X2luZDYiCitERVRBSUw6ICBL ZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KKy0tIERyb3AgbWFpbiBpbmRleAorRFJPUCBJTkRF WCBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXhpbGlhcnkgaW5kZXggZHJvcHBlZCB0 b28KK1xkIGF1eF9pbmRleF90YWI1CisgICAgICAgICAgIFRhYmxlICJwdWJsaWMuYXV4X2luZGV4 X3RhYjUiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVs dCAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLQor IGMxICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorCiBEUk9QIFRBQkxF IGF1eF9pbmRleF90YWI1OwogLS0gQ2hlY2sgaGFuZGxpbmcgb2YgaW5kZXhlcyB3aXRoIGV4cHJl c3Npb25zIGFuZCBwcmVkaWNhdGVzLiAgVGhlCiAtLSBkZWZpbml0aW9ucyBvZiB0aGUgcmVidWls dCBpbmRleGVzIHNob3VsZCBtYXRjaCB0aGUgb3JpZ2luYWwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVh dGVfaW5kZXguc3FsCmluZGV4IGMyYzFiMDMxNTI3Li5mZDk2ZDgwYWJiYyAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCkBAIC0xMzQ0LDExICsxMzQ0LDYyIEBAIFJFSU5ERVgg SU5ERVggYXV4X2luZGV4X2luZDZfY2NhdXg7CiAtLSBDb25jdXJyZW50bHkgYWxzbwogUkVJTkRF WCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDZfY2NhdXg7CiAtLSBUaGlzIG1ha2Vz IHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21lIHZh bGlkLgotREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhfdGFiNCBXSEVSRSBjMSA9IDE7CitERUxF VEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7CistLSBTaG91bGQgYmUgc2tpcHBl ZCBkdXJpbmcgcmVpbmRleCBhbmQgZHJvcHBlZAorUkVJTkRFWCBJTkRFWCBhdXhfaW5kZXhfaW5k NjsKKy0tIE1ha2Ugc3VyZSBhdXggaW5kZXggaXMgZHJvcHBlZAorXGQgYXV4X2luZGV4X3RhYjUK K0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CisKKy0tIEluc2VydCBkdXBsaWNhdGVzIGFnYWlu CitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEpLCAoMSk7CistLSBDcmVhdGUg aW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05DVVJSRU5UTFkgYXV4 X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKKy0tIFRoaXMgbWFrZXMgdGhlIHBy ZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4IGNhbiBiZWNvbWUgdmFsaWQuCitE RUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7CiAtLSBTaG91bGQgYmUgc2tp cHBlZCBkdXJpbmcgcmVpbmRleAotUkVJTkRFWCBUQUJMRSBhdXhfaW5kZXhfdGFiNTsKLS0tIFNo b3VsZCBiZSBza2lwcGVkIGR1cmluZyBjb25jdXJyZW50IHJlaW5kZXgKIFJFSU5ERVggVEFCTEUg Q09OQ1VSUkVOVExZIGF1eF9pbmRleF90YWI1OworLS0gTWFrZSBzdXJlIGl0IGlzIHN0aWxsIGV4 aXN0cworXGQgYXV4X2luZGV4X3RhYjUKKy0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyByZWlu ZGV4IGFuZCBkcm9wcGVkCitSRUlOREVYIFRBQkxFIGF1eF9pbmRleF90YWI1OworLS0gTWFrZSBz dXJlIGF1eCBpbmRleCBpcyBkcm9wcGVkCitcZCBhdXhfaW5kZXhfdGFiNQorRFJPUCBJTkRFWCBh dXhfaW5kZXhfaW5kNjsKKworLS0gSW5zZXJ0IGR1cGxpY2F0ZXMgYWdhaW4KK0lOU0VSVCBJTlRP IGF1eF9pbmRleF90YWI1IFZBTFVFUyAoMSksICgxKTsKKy0tIENyZWF0ZSBpbnZhbGlkIGluZGV4 IGFnYWluCitDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfaW5kNiBP TiBhdXhfaW5kZXhfdGFiNSAoYzEpOworLS0gVGhpcyBtYWtlcyB0aGUgcHJldmlvdXMgZmFpbHVy ZSBnbyBhd2F5LCBzbyB0aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4KK0RFTEVURSBGUk9NIGF1 eF9pbmRleF90YWI1IFdIRVJFIGMxID0gMTsKKy0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyBy ZWluZGV4IGFuZCBkcm9wcGVkCitSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhf aW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXggaW5kZXggaXMgZHJvcHBlZAorXGQgYXV4X2luZGV4X3Rh YjUKK0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CisKKy0tIEluc2VydCBkdXBsaWNhdGVzIGFn YWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEpLCAoMSk7CistLSBDcmVh dGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05DVVJSRU5UTFkg YXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKKy0tIFRoaXMgbWFrZXMgdGhl IHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4IGNhbiBiZWNvbWUgdmFsaWQu CitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7CistLSBEcm9wIG1haW4g aW5kZXggQ09OQ1VSUkVOVExZCitEUk9QIElOREVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfaW5k NjsKKy0tIE1ha2Ugc3VyZSBhdXhpbGlhcnkgaW5kZXggZHJvcHBlZCB0b28KK1xkIGF1eF9pbmRl eF90YWI1CitEUk9QIElOREVYIGF1eF9pbmRleF9pbmQ2OworCistLSBJbnNlcnQgZHVwbGljYXRl cyBhZ2FpbgorSU5TRVJUIElOVE8gYXV4X2luZGV4X3RhYjUgVkFMVUVTICgxKSwgKDEpOworLS0g Q3JlYXRlIGludmFsaWQgaW5kZXggYWdhaW4KK0NSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVO VExZIGF1eF9pbmRleF9pbmQ2IE9OIGF1eF9pbmRleF90YWI1IChjMSk7CistLSBEcm9wIG1haW4g aW5kZXgKK0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CistLSBNYWtlIHN1cmUgYXV4aWxpYXJ5 IGluZGV4IGRyb3BwZWQgdG9vCitcZCBhdXhfaW5kZXhfdGFiNQorCiBEUk9QIFRBQkxFIGF1eF9p bmRleF90YWI1OwogCiAtLSBDaGVjayBoYW5kbGluZyBvZiBpbmRleGVzIHdpdGggZXhwcmVzc2lv bnMgYW5kIHByZWRpY2F0ZXMuICBUaGUKLS0gCjIuNTMuMAoK --000000000000b895ca064e594206 Content-Type: application/x-patch; name="v33-0002-Add-STIR-access-method-and-flags-related-to-auxi.patch" Content-Disposition: attachment; filename="v33-0002-Add-STIR-access-method-and-flags-related-to-auxi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnf26cqc1 RnJvbSA1ZmRkYmMwN2U4NGQwMmE3M2VkNDNkMGM5NThlZTMyZDY1YjBlZDMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU3VuLCAxMSBKYW4gMjAyNiAxOToyNzo1MiArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjMzIDIvN10gQWRkIFNUSVIgYWNjZXNzIG1ldGhvZCBhbmQgZmxhZ3MgcmVsYXRlZCB0 byBhdXhpbGlhcnkKIGluZGV4ZXMKClRoaXMgcGF0Y2ggcHJvdmlkZXMgaW5mcmFzdHJ1Y3R1cmUg Zm9yIGZvbGxvd2luZyBlbmhhbmNlbWVudHMgdG8gY29uY3VycmVudCBpbmRleCBidWlsZHMgYnk6 Ci0gaWlfQXV4aWxpYXJ5IGluIEluZGV4SW5mbzogaW5kaWNhdGVzIHRoYXQgYW4gaW5kZXggaXMg YW4gYXV4aWxpYXJ5IGluZGV4IHVzZWQgZHVyaW5nIGNvbmN1cnJlbnQgaW5kZXggYnVpbGQKLSB2 YWxpZGF0ZV9pbmRleCBpbiBJbmRleFZhY3V1bUluZm86IHNldCBpZiBpbmRleF9idWxrX2RlbGV0 ZSBjYWxsZWQgZHVyaW5nIHRoZSB2YWxpZGF0aW9uIHBoYXNlIG9mIGNvbmN1cnJlbnQgaW5kZXgg YnVpbGQKLSBTVElSIChTaG9ydC1UZXJtIEluZGV4IFJlcGxhY2VtZW50KSBhY2Nlc3MgbWV0aG9k IGlzIGludHJvZHVjZWQsIGludGVuZGVkIHNvbGVseSBmb3Igc2hvcnQtbGl2ZWQsIGF1eGlsaWFy eSB1c2FnZQoKU1RJUiBmdW5jdGlvbnMgYXJlIGRlc2lnbmVkIGFzIGFuIGVwaGVtZXJhbCBoZWxw ZXIgZHVyaW5nIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRzLCB0ZW1wb3JhcmlseSBzdG9yaW5nIFRJ RHMgd2l0aG91dCBwcm92aWRpbmcgdGhlIGZ1bGwgZmVhdHVyZXMgb2YgYSB0eXBpY2FsIGFjY2Vz cyBtZXRob2QuIEFzIHN1Y2gsIGl0IHJhaXNlcyB3YXJuaW5ncyBvciBlcnJvcnMgd2hlbiBhY2Nl c3NlZCBvdXRzaWRlIGl0cyBzcGVjaWFsaXplZCB1c2FnZSBwYXRoLgoKUGxhbm5lZCB0byBiZSB1 c2VkIGluIGZvbGxvd2luZyBjb21taXRzLgotLS0KIGNvbnRyaWIvcGdzdGF0dHVwbGUvcGdzdGF0 dHVwbGUuYyAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgICAg IHwgICAyICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9tZXNvbi5idWlsZCAgICAgICAgICAgfCAgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvTWFrZWZpbGUgICAgICAgICB8ICAxOCArCiBzcmMv YmFja2VuZC9hY2Nlc3Mvc3Rpci9tZXNvbi5idWlsZCAgICAgIHwgICA1ICsKIHNyYy9iYWNrZW5k L2FjY2Vzcy9zdGlyL3N0aXIuYyAgICAgICAgICAgfCA1NjcgKysrKysrKysrKysrKysrKysrKysr KysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9hbmFseXplLmMgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL3ZhY3V1bXBhcmFsbGVsLmMgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1 bmNzLmMgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxvcHRpb25zLmggICAgICAg ICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9zdGlyLmggICAgICAgICAgICAgICAgfCAx MTAgKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW0uZGF0ICAgICAgICAgICAgfCAgIDMg Kwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdCAgICAgICB8ICAgNCArCiBzcmMv aW5jbHVkZS9jYXRhbG9nL3BnX29wZmFtaWx5LmRhdCAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmggICAgICAgICAgICB8ICAgNyArLQogc3JjL2luY2x1ZGUvdXRpbHMvaW5kZXhf c2VsZnVuY3MuaCAgICAgICB8ICAgOCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRp bHMub3V0ICAgIHwgICA4ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHku b3V0IHwgICA3ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0ICAgICAgIHwg IDI0ICstCiAyNCBmaWxlcyBjaGFuZ2VkLCA3NjUgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvTWFrZWZpbGUK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9tZXNvbi5idWlsZAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2FjY2Vzcy9zdGlyL3N0aXIuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2FjY2Vzcy9zdGlyLmgKCmRpZmYgLS1naXQgYS9jb250 cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdHR1cGxlLmMgYi9jb250cmliL3Bnc3RhdHR1cGxlL3Bnc3Rh dHR1cGxlLmMKaW5kZXggNmE3ZjhjYjRhN2MuLjViNTk4NGUzYWEyIDEwMDY0NAotLS0gYS9jb250 cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdHR1cGxlLmMKKysrIGIvY29udHJpYi9wZ3N0YXR0dXBsZS9w Z3N0YXR0dXBsZS5jCkBAIC0yODUsNiArMjg1LDkgQEAgcGdzdGF0X3JlbGF0aW9uKFJlbGF0aW9u IHJlbCwgRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJCQljYXNlIFNQR0lTVF9BTV9PSUQ6CiAJ CQkJZXJyID0gInNwZ2lzdCBpbmRleCI7CiAJCQkJYnJlYWs7CisJCQljYXNlIFNUSVJfQU1fT0lE OgorCQkJCWVyciA9ICJzdGlyIGluZGV4IjsKKwkJCQlicmVhazsKIAkJCWNhc2UgQlJJTl9BTV9P SUQ6CiAJCQkJZXJyID0gImJyaW4gaW5kZXgiOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlCmlu ZGV4IGU4OGQ3MmVhMDM5Li5lYmJjZmE5MDcxNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9NYWtlZmlsZQpAQCAtMTksNiAr MTksNyBAQCBTVUJESVJTCSAgICA9IFwKIAluYnRyZWUgXAogCXJtZ3JkZXNjIFwKIAlzcGdpc3Qg XAorCXN0aXIgXAogCXNlcXVlbmNlIFwKIAl0YWJsZSBcCiAJdGFibGVzYW1wbGUgXApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCmluZGV4IDg4YzcxY2Q4NWI2Li4xOWNmZGZkMjY0MCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwpAQCAtMzAxMiw2ICszMDEyLDcgQEAg bGF6eV92YWN1dW1fb25lX2luZGV4KFJlbGF0aW9uIGluZHJlbCwgSW5kZXhCdWxrRGVsZXRlUmVz dWx0ICppc3RhdCwKIAlpdmluZm8ubWVzc2FnZV9sZXZlbCA9IERFQlVHMjsKIAlpdmluZm8ubnVt X2hlYXBfdHVwbGVzID0gcmVsdHVwbGVzOwogCWl2aW5mby5zdHJhdGVneSA9IHZhY3JlbC0+YnN0 cmF0ZWd5OworCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9IGZhbHNlOwogCiAJLyoKIAkgKiBVcGRh dGUgZXJyb3IgdHJhY2ViYWNrIGluZm9ybWF0aW9uLgpAQCAtMzA2Myw2ICszMDY0LDcgQEAgbGF6 eV9jbGVhbnVwX29uZV9pbmRleChSZWxhdGlvbiBpbmRyZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3Vs dCAqaXN0YXQsCiAKIAlpdmluZm8ubnVtX2hlYXBfdHVwbGVzID0gcmVsdHVwbGVzOwogCWl2aW5m by5zdHJhdGVneSA9IHZhY3JlbC0+YnN0cmF0ZWd5OworCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9 IGZhbHNlOwogCiAJLyoKIAkgKiBVcGRhdGUgZXJyb3IgdHJhY2ViYWNrIGluZm9ybWF0aW9uLgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQv YWNjZXNzL21lc29uLmJ1aWxkCmluZGV4IDVmZDE4ZGU3NGY5Li43MjE5YzY1ZjM2NSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9tZXNvbi5idWlsZApAQCAtMTEsNiArMTEsNyBAQCBzdWJkaXIoJ25idHJlZScpCiBzdWJk aXIoJ3JtZ3JkZXNjJykKIHN1YmRpcignc2VxdWVuY2UnKQogc3ViZGlyKCdzcGdpc3QnKQorc3Vi ZGlyKCdzdGlyJykKIHN1YmRpcigndGFibGUnKQogc3ViZGlyKCd0YWJsZXNhbXBsZScpCiBzdWJk aXIoJ3RyYW5zYW0nKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvTWFrZWZp bGUgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uODc4NWRhYjM3YmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmlsZQpAQCAtMCwwICsxLDE4IEBACisjLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIworIyBNYWtlZmlsZS0tCisjICAgIE1ha2VmaWxlIGZvciBhY2Nlc3Mvc3Rpcgor IworIyBJREVOVElGSUNBVElPTgorIyAgICBzcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmls ZQorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3ViZGlyID0gc3JjL2JhY2tlbmQvYWNjZXNzL3N0 aXIKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9z cmMvTWFrZWZpbGUuZ2xvYmFsCisKK09CSlMgPSBcCisJc3Rpci5vCisKK2luY2x1ZGUgJCh0b3Bf c3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9zdGlyL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvbWVzb24uYnVp bGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRiN2FkMTUzNDZjCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvbWVzb24uYnVpbGQKQEAg LTAsMCArMSw1IEBACisjIENvcHlyaWdodCAoYykgMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKworYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAorCSdzdGlyLmMnLAor KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvc3Rpci5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3N0aXIvc3Rpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi45MzI1OTBkOWNjYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9z dGlyL3N0aXIuYwpAQCAtMCwwICsxLDU2NyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog c3Rpci5jCisgKgkgIEltcGxlbWVudGF0aW9uIG9mIFNob3J0LVRlcm0gSW5kZXggUmVwbGFjZW1l bnQuCisgKgorICogU1RJUiBpcyBhIHNwZWNpYWxpemVkIGFjY2VzcyBtZXRob2QgdHlwZSBkZXNp Z25lZCBmb3IgdGVtcG9yYXJ5IHN0b3JhZ2UKKyAqIG9mIFRJRCB2YWx1ZXMgZHVyaW5nIGNvbmN1 cnJlbnQgaW5kZXggYnVpbGQgb3BlcmF0aW9ucy4KKyAqCisgKiBUaGUgdHlwaWNhbCBsaWZlY3lj bGUgb2YgYSBTVElSIGluZGV4IGlzOgorICogMS4gY3JlYXRlZCBhcyBhbiBhdXhpbGlhcnkgaW5k ZXggZm9yIENJQy9SSUMKKyAqIDIuIGFjY2VwdHMgaW5zZXJ0cyBmb3IgYSBwZXJpb2QKKyAqIDMu IHN0aXJidWxrZGVsZXRlIGNhbGxlZCBkdXJpbmcgaW5kZXggdmFsaWRhdGlvbiBwaGFzZQorICog NC4gZ2V0cyBkcm9wcGVkCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisg KgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9zdGlyL3N0aXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9hbXZhbGlk YXRlLmgiCisjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2luY2x1ZGUgImFjY2Vz cy9zdGlyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJjYXRhbG9n L2luZGV4LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbW9wLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19vcGNsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGZhbWlseS5oIgorI2luY2x1 ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUg InN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAidXRpbHMvY2F0Y2FjaGUuaCIKKyNpbmNsdWRl ICJ1dGlscy9mbWdycHJvdG9zLmgiCisjaW5jbHVkZSAidXRpbHMvaW5kZXhfc2VsZnVuY3MuaCIK KyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3JlZ3Byb2MuaCIK KyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorCisvKgorICogU3RpciBoYW5kbGVyIGZ1bmN0 aW9uOiByZXR1cm4gSW5kZXhBbVJvdXRpbmUgd2l0aCBhY2Nlc3MgbWV0aG9kIHBhcmFtZXRlcnMK KyAqIGFuZCBjYWxsYmFja3MuCisgKi8KK0RhdHVtCitzdGlyaGFuZGxlcihQR19GVU5DVElPTl9B UkdTKQoreworCUluZGV4QW1Sb3V0aW5lICphbXJvdXRpbmUgPSBtYWtlTm9kZShJbmRleEFtUm91 dGluZSk7CisKKwkvKiBTZXQgU1RJUi1zcGVjaWZpYyBzdHJhdGVneSBhbmQgcHJvY2VkdXJlIG51 bWJlcnMgKi8KKwlhbXJvdXRpbmUtPmFtc3RyYXRlZ2llcyA9IFNUSVJfTlNUUkFURUdJRVM7CisJ YW1yb3V0aW5lLT5hbXN1cHBvcnQgPSBTVElSX05QUk9DOworCWFtcm91dGluZS0+YW1vcHRzcHJv Y251bSA9IFNUSVJfT1BUSU9OU19QUk9DOworCisJLyogU1RJUiBkb2Vzbid0IHN1cHBvcnQgbW9z dCBpbmRleCBvcGVyYXRpb25zICovCisJYW1yb3V0aW5lLT5hbWNhbm9yZGVyID0gZmFsc2U7CisJ YW1yb3V0aW5lLT5hbWNhbm9yZGVyYnlvcCA9IGZhbHNlOworCWFtcm91dGluZS0+YW1jYW5iYWNr d2FyZCA9IGZhbHNlOworCWFtcm91dGluZS0+YW1jYW51bmlxdWUgPSBmYWxzZTsKKwlhbXJvdXRp bmUtPmFtY2FubXVsdGljb2wgPSB0cnVlOworCWFtcm91dGluZS0+YW1vcHRpb25hbGtleSA9IHRy dWU7CisJYW1yb3V0aW5lLT5hbXNlYXJjaGFycmF5ID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbXNl YXJjaG51bGxzID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbXN0b3JhZ2UgPSBmYWxzZTsKKwlhbXJv dXRpbmUtPmFtY2x1c3RlcmFibGUgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtcHJlZGxvY2tzID0g ZmFsc2U7CisJYW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsID0gZmFsc2U7CisJYW1yb3V0aW5lLT5h bWNhbmJ1aWxkcGFyYWxsZWwgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtY2FuaW5jbHVkZSA9IHRy dWU7CisJYW1yb3V0aW5lLT5hbXVzZW1haW50ZW5hbmNld29ya21lbSA9IGZhbHNlOworCWFtcm91 dGluZS0+YW1wYXJhbGxlbHZhY3V1bW9wdGlvbnMgPSBWQUNVVU1fT1BUSU9OX05PX1BBUkFMTEVM OworCWFtcm91dGluZS0+YW1rZXl0eXBlID0gSW52YWxpZE9pZDsKKworCS8qIFNldCB1cCBmdW5j dGlvbiBjYWxsYmFja3MgKi8KKwlhbXJvdXRpbmUtPmFtYnVpbGQgPSBzdGlyYnVpbGQ7CisJYW1y b3V0aW5lLT5hbWJ1aWxkZW1wdHkgPSBzdGlyYnVpbGRlbXB0eTsKKwlhbXJvdXRpbmUtPmFtaW5z ZXJ0ID0gc3Rpcmluc2VydDsKKwlhbXJvdXRpbmUtPmFtaW5zZXJ0Y2xlYW51cCA9IE5VTEw7CisJ YW1yb3V0aW5lLT5hbWJ1bGtkZWxldGUgPSBzdGlyYnVsa2RlbGV0ZTsKKwlhbXJvdXRpbmUtPmFt dmFjdXVtY2xlYW51cCA9IHN0aXJ2YWN1dW1jbGVhbnVwOworCWFtcm91dGluZS0+YW1jYW5yZXR1 cm4gPSBOVUxMOworCWFtcm91dGluZS0+YW1jb3N0ZXN0aW1hdGUgPSBzdGlyY29zdGVzdGltYXRl OworCWFtcm91dGluZS0+YW1vcHRpb25zID0gc3Rpcm9wdGlvbnM7CisJYW1yb3V0aW5lLT5hbXBy b3BlcnR5ID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtYnVpbGRwaGFzZW5hbWUgPSBOVUxMOworCWFt cm91dGluZS0+YW12YWxpZGF0ZSA9IHN0aXJ2YWxpZGF0ZTsKKwlhbXJvdXRpbmUtPmFtYWRqdXN0 bWVtYmVycyA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IHN0aXJiZWdpbnNjYW47 CisJYW1yb3V0aW5lLT5hbXJlc2NhbiA9IHN0aXJyZXNjYW47CisJYW1yb3V0aW5lLT5hbWdldHR1 cGxlID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gTlVMTDsKKwlhbXJvdXRpbmUt PmFtZW5kc2NhbiA9IHN0aXJlbmRzY2FuOworCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsK KwlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBh cmFsbGVsc2NhbiA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxM OworCWFtcm91dGluZS0+YW1wYXJhbGxlbHJlc2NhbiA9IE5VTEw7CisKKwlQR19SRVRVUk5fUE9J TlRFUihhbXJvdXRpbmUpOworfQorCisvKgorICogVmFsaWRhdGVzIG9wZXJhdG9yIGNsYXNzIGZv ciBTVElSIGluZGV4LgorICoKKyAqIFNUSVIgaXMgbm90IGEgcmVhbCBpbmRleCwgc28gdmFsaWRh dGUgbWF5IGJlIHNraXBwZWQuCisgKiBCdXQgd2UgZG8gaXQganVzdCBmb3IgY29uc2lzdGVuY3ku CisgKi8KK2Jvb2wKK3N0aXJ2YWxpZGF0ZShPaWQgb3BjbGFzc29pZCkKK3sKKwlib29sIHJlc3Vs dCA9IHRydWU7CisJSGVhcFR1cGxlIGNsYXNzdHVwOworCUZvcm1fcGdfb3BjbGFzcyBjbGFzc2Zv cm07CisJT2lkIG9wZmFtaWx5b2lkOworCUhlYXBUdXBsZSBmYW1pbHl0dXA7CisJRm9ybV9wZ19v cGZhbWlseSBmYW1pbHlmb3JtOworCWNoYXIgKm9wZmFtaWx5bmFtZTsKKwlDYXRDTGlzdCAqb3By bGlzdDsKKwlpbnQgaTsKKworCS8qIEZldGNoIG9wY2xhc3MgaW5mb3JtYXRpb24gKi8KKwljbGFz c3R1cCA9IFNlYXJjaFN5c0NhY2hlMShDTEFPSUQsIE9iamVjdElkR2V0RGF0dW0ob3BjbGFzc29p ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjbGFzc3R1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBjbGFzcyAldSIsIG9wY2xhc3NvaWQpOwor CWNsYXNzZm9ybSA9IChGb3JtX3BnX29wY2xhc3MpIEdFVFNUUlVDVChjbGFzc3R1cCk7CisKKwlv cGZhbWlseW9pZCA9IGNsYXNzZm9ybS0+b3BjZmFtaWx5OworCisJLyogRmV0Y2ggb3BmYW1pbHkg aW5mb3JtYXRpb24gKi8KKwlmYW1pbHl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQs IE9iamVjdElkR2V0RGF0dW0ob3BmYW1pbHlvaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo ZmFtaWx5dHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJh dG9yIGZhbWlseSAldSIsIG9wZmFtaWx5b2lkKTsKKwlmYW1pbHlmb3JtID0gKEZvcm1fcGdfb3Bm YW1pbHkpIEdFVFNUUlVDVChmYW1pbHl0dXApOworCisJb3BmYW1pbHluYW1lID0gTmFtZVN0cihm YW1pbHlmb3JtLT5vcGZuYW1lKTsKKworCS8qIEZldGNoIGFsbCBvcGVyYXRvcnMgYW5kIHN1cHBv cnQgZnVuY3Rpb25zIG9mIHRoZSBvcGZhbWlseSAqLworCW9wcmxpc3QgPSBTZWFyY2hTeXNDYWNo ZUxpc3QxKEFNT1BTVFJBVEVHWSwgT2JqZWN0SWRHZXREYXR1bShvcGZhbWlseW9pZCkpOworCisJ LyogQ2hlY2sgaW5kaXZpZHVhbCBvcGVyYXRvcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgb3BybGlz dC0+bl9tZW1iZXJzOyBpKyspCisJeworCQlIZWFwVHVwbGUgb3BydHVwID0gJm9wcmxpc3QtPm1l bWJlcnNbaV0tPnR1cGxlOworCQlGb3JtX3BnX2Ftb3Agb3ByZm9ybSA9IChGb3JtX3BnX2Ftb3Ap IEdFVFNUUlVDVChvcHJ0dXApOworCisJCS8qIENoZWNrIGl0J3MgYWxsb3dlZCBzdHJhdGVneSBm b3Igc3RpciAqLworCQlpZiAob3ByZm9ybS0+YW1vcHN0cmF0ZWd5IDwgMSB8fAorCQkJb3ByZm9y bS0+YW1vcHN0cmF0ZWd5ID4gU1RJUl9OU1RSQVRFR0lFUykKKwkJeworCQkJZXJlcG9ydChJTkZP LAorCQkJICAgICAgICAoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklOSVRJT04p LAorCQkJCSAgICAgICAgZXJybXNnKCJzdGlyIG9wZmFtaWx5ICVzIGNvbnRhaW5zIG9wZXJhdG9y ICVzIHdpdGggaW52YWxpZCBzdHJhdGVneSBudW1iZXIgJWQiLAorCQkJCQkgICAgICAgIG9wZmFt aWx5bmFtZSwKKwkJCQkJICAgICAgICBmb3JtYXRfb3BlcmF0b3Iob3ByZm9ybS0+YW1vcG9wciks CisJCQkJCSAgICAgICAgb3ByZm9ybS0+YW1vcHN0cmF0ZWd5KSkpOworCQkJcmVzdWx0ID0gZmFs c2U7CisJCX0KKworCQkvKiBzdGlyIGRvZXNuJ3Qgc3VwcG9ydCBPUkRFUiBCWSBvcGVyYXRvcnMg Ki8KKwkJaWYgKG9wcmZvcm0tPmFtb3BwdXJwb3NlICE9IEFNT1BfU0VBUkNIIHx8CisJCQlPaWRJ c1ZhbGlkKG9wcmZvcm0tPmFtb3Bzb3J0ZmFtaWx5KSkKKwkJeworCQkJZXJlcG9ydChJTkZPLAor CQkJICAgICAgICAoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklOSVRJT04pLAor CQkJCSAgICAgICAgZXJybXNnKCJzdGlyIG9wZmFtaWx5ICVzIGNvbnRhaW5zIGludmFsaWQgT1JE RVIgQlkgc3BlY2lmaWNhdGlvbiBmb3Igb3BlcmF0b3IgJXMiLAorCQkJCQkgICAgICAgIG9wZmFt aWx5bmFtZSwKKwkJCQkJICAgICAgICBmb3JtYXRfb3BlcmF0b3Iob3ByZm9ybS0+YW1vcG9wcikp KSk7CisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJfQorCisJCS8qIENoZWNrIG9wZXJhdG9yIHNpZ25h dHVyZSAtLS0gc2FtZSBmb3IgYWxsIHN0aXIgc3RyYXRlZ2llcyAqLworCQlpZiAoIWNoZWNrX2Ft b3Bfc2lnbmF0dXJlKG9wcmZvcm0tPmFtb3BvcHIsIEJPT0xPSUQsCisJCSAgICAgICAgICAgICAg ICAgICAgICAgICAgb3ByZm9ybS0+YW1vcGxlZnR0eXBlLAorCQkgICAgICAgICAgICAgICAgICAg ICAgICAgIG9wcmZvcm0tPmFtb3ByaWdodHR5cGUpKQorCQl7CisJCQllcmVwb3J0KElORk8sCisJ CQkgICAgICAgIChlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElPTiksCisJ CQkJICAgICAgICBlcnJtc2coInN0aXIgb3BmYW1pbHkgJXMgY29udGFpbnMgb3BlcmF0b3IgJXMg d2l0aCB3cm9uZyBzaWduYXR1cmUiLAorCQkJCQkgICAgICAgIG9wZmFtaWx5bmFtZSwKKwkJCQkJ ICAgICAgICBmb3JtYXRfb3BlcmF0b3Iob3ByZm9ybS0+YW1vcG9wcikpKSk7CisJCQlyZXN1bHQg PSBmYWxzZTsKKwkJfQorCX0KKworCVJlbGVhc2VDYXRDYWNoZUxpc3Qob3BybGlzdCk7CisJUmVs ZWFzZVN5c0NhY2hlKGZhbWlseXR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKGNsYXNzdHVwKTsKKwor CXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIG1ldGEtcGFnZSBvZiBhIFNU SVIgaW5kZXguCisgKiBUaGUgc2tpcEluc2VydHMgZmxhZyBkZXRlcm1pbmVzIGlmIG5ldyBpbnNl cnRzIHdpbGwgYmUgYWNjZXB0ZWQgb3Igc2tpcHBlZC4KKyAqLwordm9pZAorU3RpckZpbGxNZXRh cGFnZShSZWxhdGlvbiBpbmRleCwgUGFnZSBtZXRhUGFnZSwgYm9vbCBza2lwSW5zZXJ0cykKK3sK KwlTdGlyTWV0YVBhZ2VEYXRhICptZXRhZGF0YTsKKworCVN0aXJJbml0UGFnZShtZXRhUGFnZSwg U1RJUl9NRVRBKTsKKwltZXRhZGF0YSA9IFN0aXJQYWdlR2V0TWV0YShtZXRhUGFnZSk7CisJbWVt c2V0KG1ldGFkYXRhLCAwLCBzaXplb2YoU3Rpck1ldGFQYWdlRGF0YSkpOworCW1ldGFkYXRhLT5t YWdpY051bWJlciA9IFNUSVJfTUFHSUNfTlVNQkVSOworCW1ldGFkYXRhLT5za2lwSW5zZXJ0cyA9 IHNraXBJbnNlcnRzOworCSgoUGFnZUhlYWRlcikgbWV0YVBhZ2UpLT5wZF9sb3dlciA9ICgoY2hh ciAqKSBtZXRhZGF0YSArIHNpemVvZihTdGlyTWV0YVBhZ2VEYXRhKSkgLSAoY2hhciAqKSBtZXRh UGFnZTsKK30KKworLyoKKyAqIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgbWV0YXBhZ2UgZm9y IGEgU1RJUiBpbmRleC4KKyAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBpbmRleCBjcmVhdGlvbi4K KyAqLwordm9pZAorU3RpckluaXRNZXRhcGFnZShSZWxhdGlvbiBpbmRleCwgRm9ya051bWJlciBm b3JrbnVtKQoreworCUJ1ZmZlciBtZXRhQnVmZmVyOworCVBhZ2UgbWV0YVBhZ2U7CisKKwlBc3Nl cnQoIVJlbGF0aW9uTmVlZHNXQUwoaW5kZXgpKTsKKwkvKgorCSAqIE1ha2UgYSBuZXcgcGFnZTsg c2luY2UgaXQgaXMgdGhlIGZpcnN0IHBhZ2UgaXQgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aAor CSAqIGJsb2NrIG51bWJlciAwIChTVElSX01FVEFQQUdFX0JMS05PKS4gIE5vIG5lZWQgdG8gaG9s ZCB0aGUgZXh0ZW5zaW9uCisJICogbG9jayBiZWNhdXNlIHRoZXJlIGNhbm5vdCBiZSBjb25jdXJy ZW50IGluc2VydGVycyB5ZXQuCisJICovCisJbWV0YUJ1ZmZlciA9IFJlYWRCdWZmZXJFeHRlbmRl ZChpbmRleCwgZm9ya251bSwgUF9ORVcsIFJCTV9OT1JNQUwsIE5VTEwpOworCUxvY2tCdWZmZXIo bWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwlBc3NlcnQoQnVmZmVyR2V0Qmxv Y2tOdW1iZXIobWV0YUJ1ZmZlcikgPT0gU1RJUl9NRVRBUEFHRV9CTEtOTyk7CisKKwltZXRhUGFn ZSA9IEJ1ZmZlckdldFBhZ2UobWV0YUJ1ZmZlcik7CisJU3RpckZpbGxNZXRhcGFnZShpbmRleCwg bWV0YVBhZ2UsIGZvcmtudW0gPT0gSU5JVF9GT1JLTlVNKTsKKworCU1hcmtCdWZmZXJEaXJ0eSht ZXRhQnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKG1ldGFCdWZmZXIpOworfQorCisvKgor ICogSW5pdGlhbGl6ZSBhbnkgcGFnZSBvZiBhIHN0aXIgaW5kZXguCisgKi8KK3ZvaWQKK1N0aXJJ bml0UGFnZShQYWdlIHBhZ2UsIHVpbnQxNiBmbGFncykKK3sKKwlTdGlyUGFnZU9wYXF1ZSBvcGFx dWU7CisKKwlQYWdlSW5pdChwYWdlLCBCTENLU1osIHNpemVvZihTdGlyUGFnZU9wYXF1ZURhdGEp KTsKKworCW9wYXF1ZSA9IFN0aXJQYWdlR2V0T3BhcXVlKHBhZ2UpOworCW9wYXF1ZS0+ZmxhZ3Mg PSBmbGFnczsKKwlvcGFxdWUtPnN0aXJfcGFnZV9pZCA9IFNUSVJfUEFHRV9JRDsKK30KKworLyoK KyAqIEFkZCBhIHR1cGxlIHRvIGEgU1RJUiBwYWdlLiBSZXR1cm5zIGZhbHNlIGlmIHRoZSB0dXBs ZSBkb2Vzbid0IGZpdC4KKyAqIFRoZSB0dXBsZSBpcyBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBw YWdlLgorICovCitzdGF0aWMgYm9vbAorU3RpclBhZ2VBZGRJdGVtKFBhZ2UgcGFnZSwgU3RpclR1 cGxlICp0dXBsZSkKK3sKKwlTdGlyVHVwbGUgKml0dXA7CisJU3RpclBhZ2VPcGFxdWUgb3BhcXVl OworCWNoYXIgKnB0cjsKKworCS8qIFdlIHNob3VsZG4ndCBiZSBwb2ludGVkIHRvIGFuIGludmFs aWQgcGFnZSAqLworCUFzc2VydCghUGFnZUlzTmV3KHBhZ2UpKTsKKworCS8qIERvZXMgdGhlIG5l dyB0dXBsZSBmaXQgb24gdGhlIHBhZ2U/ICovCisJaWYgKFN0aXJQYWdlR2V0RnJlZVNwYWNlKHBh Z2UpIDwgc2l6ZW9mKFN0aXJUdXBsZSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIENvcHkgYSBu ZXcgdHVwbGUgdG8gdGhlIGVuZCBvZiB0aGUgcGFnZSAqLworCW9wYXF1ZSA9IFN0aXJQYWdlR2V0 T3BhcXVlKHBhZ2UpOworCWl0dXAgPSBTdGlyUGFnZUdldFR1cGxlKHBhZ2UsIG9wYXF1ZS0+bWF4 b2ZmICsgMSk7CisJbWVtY3B5KGl0dXAsIHR1cGxlLCBzaXplb2YoU3RpclR1cGxlKSk7CisKKwkv KiBBZGp1c3QgbWF4b2ZmIGFuZCBwZF9sb3dlciAqLworCW9wYXF1ZS0+bWF4b2ZmKys7CisJcHRy ID0gKGNoYXIgKikgU3RpclBhZ2VHZXRUdXBsZShwYWdlLCBvcGFxdWUtPm1heG9mZiArIDEpOwor CSgoUGFnZUhlYWRlcikgcGFnZSktPnBkX2xvd2VyID0gcHRyIC0gcGFnZTsKKworCS8qIEFzc2Vy dCB3ZSBkaWRuJ3Qgb3ZlcnJ1biBhdmFpbGFibGUgc3BhY2UgKi8KKwlBc3NlcnQoKChQYWdlSGVh ZGVyKSBwYWdlKS0+cGRfbG93ZXIgPD0gKChQYWdlSGVhZGVyKSBwYWdlKS0+cGRfdXBwZXIpOwor CXJldHVybiB0cnVlOworfQorCisvKgorICogSW5zZXJ0IGEgbmV3IHR1cGxlIGludG8gYSBTVElS IGluZGV4LgorICovCitib29sCitzdGlyaW5zZXJ0KFJlbGF0aW9uIGluZGV4LCBEYXR1bSAqdmFs dWVzLCBib29sICppc251bGwsCisJCSAgSXRlbVBvaW50ZXIgaHRfY3RpZCwgUmVsYXRpb24gaGVh cFJlbCwKKwkJICBJbmRleFVuaXF1ZUNoZWNrIGNoZWNrVW5pcXVlLAorCQkgIGJvb2wgaW5kZXhV bmNoYW5nZWQsCisJCSAgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKQoreworCVN0aXJUdXBs ZSBpdHVwOworCVN0aXJNZXRhUGFnZURhdGEgKm1ldGFEYXRhOworCUJ1ZmZlciBidWZmZXIsCisJ CQltZXRhQnVmZmVyOworCVBhZ2UgcGFnZTsKKwlCbG9ja051bWJlciBibGtObzsKKworCWl0dXAu aGVhcFB0ciA9ICpodF9jdGlkOworCisJQXNzZXJ0KCFSZWxhdGlvbk5lZWRzV0FMKGluZGV4KSk7 CisJbWV0YUJ1ZmZlciA9IFJlYWRCdWZmZXIoaW5kZXgsIFNUSVJfTUVUQVBBR0VfQkxLTk8pOwor CisJZm9yICg7OykKKwl7CisJCUxvY2tCdWZmZXIobWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hB UkUpOworCQltZXRhRGF0YSA9IFN0aXJQYWdlR2V0TWV0YShCdWZmZXJHZXRQYWdlKG1ldGFCdWZm ZXIpKTsKKwkJLyogQ2hlY2sgaWYgaW5zZXJ0cyBhcmUgYWxsb3dlZCAqLworCQlpZiAobWV0YURh dGEtPnNraXBJbnNlcnRzKQorCQl7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKG1ldGFCdWZmZXIp OworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCWJsa05vID0gbWV0YURhdGEtPmxhc3RCbGtObzsK KwkJLyogRG9uJ3QgaG9sZCBtZXRhYnVmZmVyIGxvY2sgd2hpbGUgZG9pbmcgaW5zZXJ0ICovCisJ CUxvY2tCdWZmZXIobWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKworCQlpZiAoYmxr Tm8gPiAwKQorCQl7CisJCQlidWZmZXIgPSBSZWFkQnVmZmVyKGluZGV4LCBibGtObyk7CisJCQlM b2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKworCQkJcGFnZSA9IEJ1 ZmZlckdldFBhZ2UoYnVmZmVyKTsKKworCQkJQXNzZXJ0KCFQYWdlSXNOZXcocGFnZSkpOworCisJ CQkvKiBUcnkgdG8gYWRkIHR1cGxlIHRvIHRoZSBleGlzdGluZyBwYWdlICovCisJCQlpZiAoU3Rp clBhZ2VBZGRJdGVtKHBhZ2UsICZpdHVwKSkKKwkJCXsKKwkJCQkvKiBTdWNjZXNzISAgQXBwbHkg dGhlIGNoYW5nZSwgY2xlYW4gdXAsIGFuZCBleGl0ICovCisJCQkJTWFya0J1ZmZlckRpcnR5KGJ1 ZmZlcik7CisKKwkJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJCQkJUmVsZWFzZUJ1 ZmZlcihtZXRhQnVmZmVyKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCVVubG9ja1Jl bGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJfQorCisJCS8qIE5lZWQgdG8gYWRkIGEgbmV3IHBhZ2Ug LSBnZXQgZXhjbHVzaXZlIGxvY2sgb24gbWV0YS1wYWdlICovCisJCUxvY2tCdWZmZXIobWV0YUJ1 ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKworCQltZXRhRGF0YSA9IFN0aXJQYWdlR2V0 TWV0YShCdWZmZXJHZXRQYWdlKG1ldGFCdWZmZXIpKTsKKworCQkvKiBSZS1jaGVjayBhZnRlciBh Y3F1aXJpbmcgZXhjbHVzaXZlIGxvY2sgKi8KKwkJaWYgKG1ldGFEYXRhLT5za2lwSW5zZXJ0cykK KwkJeworCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihtZXRhQnVmZmVyKTsKKwkJCXJldHVybiBmYWxz ZTsKKwkJfQorCisJCS8qIENoZWNrIGlmIGFub3RoZXIgYmFja2VuZCBhbHJlYWR5IGV4dGVuZGVk IHRoZSBpbmRleCAqLworCQlpZiAoYmxrTm8gIT0gbWV0YURhdGEtPmxhc3RCbGtObykKKwkJewor CQkJQXNzZXJ0KGJsa05vIDwgbWV0YURhdGEtPmxhc3RCbGtObyk7CisJCQkvKiBTb21lb25lIGVs c2UgaW5zZXJ0ZWQgdGhlIG5ldyBwYWdlIGludG8gdGhlIGluZGV4LCBsZXQncyB0cnkgYWdhaW4g Ki8KKwkJCUxvY2tCdWZmZXIobWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJCWNv bnRpbnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogTXVzdCBleHRlbmQgdGhlIGZpbGUgKi8K KwkJCWJ1ZmZlciA9IEV4dGVuZEJ1ZmZlcmVkUmVsKEJNUl9SRUwoaW5kZXgpLCBNQUlOX0ZPUktO VU0sIE5VTEwsCisJCQkJCQkJCQkgICBFQl9MT0NLX0ZJUlNUKTsKKwkJCXBhZ2UgPSBCdWZmZXJH ZXRQYWdlKGJ1ZmZlcik7CisKKwkJCVN0aXJJbml0UGFnZShwYWdlLCAwKTsKKworCQkJaWYgKCFT dGlyUGFnZUFkZEl0ZW0ocGFnZSwgJml0dXApKQorCQkJeworCQkJCS8qIFdlIHNob3VsZG4ndCBi ZSBoZXJlIHNpbmNlIHdlJ3JlIGluc2VydGluZyB0byBhbiBlbXB0eSBwYWdlICovCisJCQkJZWxv ZyhFUlJPUiwgImNvdWxkIG5vdCBhZGQgbmV3IHN0aXIgdHVwbGUgdG8gZW1wdHkgcGFnZSIpOwor CQkJfQorCisJCQkvKiBVcGRhdGUgbWV0YS1wYWdlIHdpdGggbmV3IGxhc3QgYmxvY2sgbnVtYmVy ICovCisJCQltZXRhRGF0YS0+bGFzdEJsa05vID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmZmVy KTsKKworCQkJTWFya0J1ZmZlckRpcnR5KG1ldGFCdWZmZXIpOworCQkJTWFya0J1ZmZlckRpcnR5 KGJ1ZmZlcik7CisKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJCVVubG9ja1Jl bGVhc2VCdWZmZXIobWV0YUJ1ZmZlcik7CisKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KK30K KworLyoKKyAqIFNUSVIgZG9lc24ndCBzdXBwb3J0IHNjYW5zIC0gdGhlc2UgZnVuY3Rpb25zIGFs bCBlcnJvciBvdXQKKyAqLworSW5kZXhTY2FuRGVzYworc3RpcmJlZ2luc2NhbihSZWxhdGlvbiBy LCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCit7CisJZXJlcG9ydChFUlJPUiwgKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLCBlcnJtc2coIlwiJXNcIiBpcyBub3QgaW1w bGVtZW50ZWQiLCBfX2Z1bmNfXykpKTsKK30KKwordm9pZAorc3RpcnJlc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKKwkJICBTY2FuS2V5IG9y ZGVyYnlzLCBpbnQgbm9yZGVyYnlzKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwgZXJybXNnKCJcIiVzXCIgaXMgbm90IGltcGxlbWVu dGVkIiwgX19mdW5jX18pKSk7Cit9CisKK3ZvaWQgc3RpcmVuZHNjYW4oSW5kZXhTY2FuRGVzYyBz Y2FuKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQ UE9SVEVEKSwgZXJybXNnKCJcIiVzXCIgaXMgbm90IGltcGxlbWVudGVkIiwgX19mdW5jX18pKSk7 Cit9CisKKy8qCisgKiBCdWlsZCBhIFNUSVIgaW5kZXggLSBvbmx5IGFsbG93ZWQgZm9yIGF1eGls aWFyeSBpbmRleGVzLgorICogSnVzdCBpbml0aWFsaXplcyB0aGUgbWV0YS1wYWdlIHdpdGhvdXQg YW55IGhlYXAgc2NhbnMuCisgKi8KK0luZGV4QnVpbGRSZXN1bHQgKgorc3RpcmJ1aWxkKFJlbGF0 aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAorCQkJCQkJICAgc3RydWN0IEluZGV4SW5mbyAqaW5k ZXhJbmZvKQoreworCUluZGV4QnVpbGRSZXN1bHQgKnJlc3VsdDsKKworCWlmICghaW5kZXhJbmZv LT5paV9BdXhpbGlhcnkpCisJCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwgZXJybXNnKCJCdWlsZGluZyBTVElSIGluZGV4ZXMgaXMgbm90IHN1 cHBvcnRlZCIpKSk7CisKKwlTdGlySW5pdE1ldGFwYWdlKGluZGV4LCBNQUlOX0ZPUktOVU0pOwor CisJcmVzdWx0ID0gKEluZGV4QnVpbGRSZXN1bHQgKikgcGFsbG9jKHNpemVvZihJbmRleEJ1aWxk UmVzdWx0KSk7CisJcmVzdWx0LT5oZWFwX3R1cGxlcyA9IDA7CisJcmVzdWx0LT5pbmRleF90dXBs ZXMgPSAwOworCXJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgc3RpcmJ1aWxkZW1wdHkoUmVsYXRp b24gaW5kZXgpCit7CisJU3RpckluaXRNZXRhcGFnZShpbmRleCwgSU5JVF9GT1JLTlVNKTsKK30K KworSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoKK3N0aXJidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5m byAqaW5mbywKKwkJCQkJCQkJCSBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLAorCQkJCQkJ CQkJIEluZGV4QnVsa0RlbGV0ZUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJCQkJIHZvaWQgKmNh bGxiYWNrX3N0YXRlKQoreworCVJlbGF0aW9uIGluZGV4ID0gaW5mby0+aW5kZXg7CisJQmxvY2tO dW1iZXIgYmxrbm8sIG5wYWdlczsKKwlCdWZmZXIgYnVmZmVyOworCVBhZ2UgcGFnZTsKKworCS8q CisJICogRm9yIG5vcm1hbCBWQUNVVU0sIG1hcmsgdG8gc2tpcCBpbnNlcnRzIGFuZCB3YXJuIGFi b3V0IGFuIGluZGV4IGRyb3AKKwkgKiBuZWVkZWQuICBJbiBwcmFjdGljZSB0aGlzIHBhdGggaXMg bm90IHJlYWNoYWJsZSBkdXJpbmcgQ1JFQVRFIElOREVYCisJICogQ09OQ1VSUkVOVExZIGJlY2F1 c2UgdGhlIHRhYmxlLWxldmVsIGxvY2tzIGhlbGQgYnkgQ0lDIHByZXZlbnQgY29uY3VycmVudAor CSAqIFZBQ1VVTSBmcm9tIG9wZW5pbmcgdGhlIGF1eGlsaWFyeSBpbmRleC4gIEl0IGNhbiBvbmx5 IGJlIHJlYWNoZWQgaWYgYQorCSAqIGxlZnRvdmVyIFNUSVIgaW5kZXggc29tZWhvdyBzdXJ2aXZl cyBhZnRlciBhIGZhaWxlZCBDSUMgYW5kIGEgbGF0ZXIKKwkgKiBWQUNVVU0gZW5jb3VudGVycyBp dC4KKwkgKi8KKwlpZiAoIWluZm8tPnZhbGlkYXRlX2luZGV4KQorCXsKKwkJU3Rpck1hcmtBc1Nr aXBJbnNlcnRzKGluZGV4KTsKKworCQllcmVwb3J0KFdBUk5JTkcsIChlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQllcnJtc2coIlwiJXNcIiBpcyBub3QgaW1wbGVt ZW50ZWQsIHNlZW1zIGxpa2UgdGhpcyBpbmRleCBuZWVkcyB0byBiZSBkcm9wcGVkIiwgX19mdW5j X18pKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChzdGF0cyA9PSBOVUxMKQorCQlzdGF0 cyA9IChJbmRleEJ1bGtEZWxldGVSZXN1bHQgKikgcGFsbG9jMChzaXplb2YoSW5kZXhCdWxrRGVs ZXRlUmVzdWx0KSk7CisKKwkvKgorCSAqIEl0ZXJhdGUgb3ZlciB0aGUgcGFnZXMuIFdlIGRvbid0 IGNhcmUgYWJvdXQgY29uY3VycmVudGx5IGFkZGVkIHBhZ2VzLAorCSAqIGJlY2F1c2UgdGhlIGlu ZGV4IGlzIG1hcmtlZCBhcyBub3QtcmVhZHkgZm9yIHRoYXQgbW9tZW50IGFuZCB0aGUgaW5kZXgg aXMgbm90CisJICogdXNlZCBmb3IgaW5zZXJ0LgorCSAqLworCW5wYWdlcyA9IFJlbGF0aW9uR2V0 TnVtYmVyT2ZCbG9ja3MoaW5kZXgpOworCWZvciAoYmxrbm8gPSBTVElSX0hFQURfQkxLTk87IGJs a25vIDwgbnBhZ2VzOyBibGtubysrKQorCXsKKwkJU3RpclR1cGxlICppdHVwLCAqaXR1cEVuZDsK KworCQl2YWN1dW1fZGVsYXlfcG9pbnQoZmFsc2UpOworCisJCWJ1ZmZlciA9IFJlYWRCdWZmZXJF eHRlbmRlZChpbmRleCwgTUFJTl9GT1JLTlVNLCBibGtubywKKwkJCQkJCQkJCVJCTV9OT1JNQUws IGluZm8tPnN0cmF0ZWd5KTsKKworCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hB UkUpOworCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOworCisJCWlmIChQYWdlSXNOZXco cGFnZSkpCisJCXsKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJCWNvbnRpbnVl OworCQl9CisKKwkJaXR1cCA9IFN0aXJQYWdlR2V0VHVwbGUocGFnZSwgRmlyc3RPZmZzZXROdW1i ZXIpOworCQlpdHVwRW5kID0gU3RpclBhZ2VHZXRUdXBsZShwYWdlLCBPZmZzZXROdW1iZXJOZXh0 KFN0aXJQYWdlR2V0TWF4T2Zmc2V0KHBhZ2UpKSk7CisJCXdoaWxlIChpdHVwIDwgaXR1cEVuZCkK KwkJeworCQkJLyogRG8gd2UgaGF2ZSB0byBkZWxldGUgdGhpcyB0dXBsZT8gKi8KKwkJCWlmIChj YWxsYmFjaygmaXR1cC0+aGVhcFB0ciwgY2FsbGJhY2tfc3RhdGUpKQorCQkJeworCQkJCWVyZXBv cnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwgZXJybXNn KCJ3ZSBuZXZlciBkZWxldGUgaW4gc3RpciIpKSk7CisJCQl9CisKKwkJCWl0dXAgPSBTdGlyUGFn ZUdldE5leHRUdXBsZShpdHVwKTsKKwkJfQorCisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVy KTsKKwl9CisKKwlyZXR1cm4gc3RhdHM7Cit9CisKKy8qCisgKiBNYXJrIGEgU1RJUiBpbmRleCB0 byBza2lwIGZ1dHVyZSBpbnNlcnRzCisgKi8KK3ZvaWQKK1N0aXJNYXJrQXNTa2lwSW5zZXJ0cyhS ZWxhdGlvbiBpbmRleCkKK3sKKwlTdGlyTWV0YVBhZ2VEYXRhICptZXRhRGF0YTsKKwlCdWZmZXIg bWV0YUJ1ZmZlcjsKKwlQYWdlIG1ldGFQYWdlOworCisJQXNzZXJ0KCFSZWxhdGlvbk5lZWRzV0FM KGluZGV4KSk7CisJbWV0YUJ1ZmZlciA9IFJlYWRCdWZmZXIoaW5kZXgsIFNUSVJfTUVUQVBBR0Vf QkxLTk8pOworCUxvY2tCdWZmZXIobWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsK KworCW1ldGFQYWdlID0gQnVmZmVyR2V0UGFnZShtZXRhQnVmZmVyKTsKKwltZXRhRGF0YSA9IFN0 aXJQYWdlR2V0TWV0YShtZXRhUGFnZSk7CisKKwlpZiAoIW1ldGFEYXRhLT5za2lwSW5zZXJ0cykK Kwl7CisJCW1ldGFEYXRhLT5za2lwSW5zZXJ0cyA9IHRydWU7CisJCU1hcmtCdWZmZXJEaXJ0eSht ZXRhQnVmZmVyKTsKKwl9CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihtZXRhQnVmZmVyKTsKK30KKwor LyoKKyAqIEFzIHdpdGggc3RpcmJ1bGtkZWxldGUsIHRoaXMgaXMgbm90IHJlYWNoYWJsZSBkdXJp bmcgYSBub3JtYWwgQ0lDIGR1ZSB0bworICogdGFibGUtbGV2ZWwgbG9ja2luZy4gIEl0IHNlcnZl cyBhcyBhIHNhZmV0eSBuZXQgZm9yIGxlZnRvdmVyIFNUSVIgaW5kZXhlcworICogZnJvbSBmYWls ZWQgY29uY3VycmVudCBpbmRleCBidWlsZHMuCisgKi8KK0luZGV4QnVsa0RlbGV0ZVJlc3VsdCAq CitzdGlydmFjdXVtY2xlYW51cChJbmRleFZhY3V1bUluZm8gKmluZm8sCisJCQkJICBJbmRleEJ1 bGtEZWxldGVSZXN1bHQgKnN0YXRzKQoreworCVN0aXJNYXJrQXNTa2lwSW5zZXJ0cyhpbmZvLT5p bmRleCk7CisJZXJlcG9ydChXQVJOSU5HLCAoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NV UFBPUlRFRCksCisJCQllcnJtc2coIlwiJXNcIiBpcyBub3QgaW1wbGVtZW50ZWQsIHNlZW1zIGxp a2UgdGhpcyBpbmRleCBuZWVkcyB0byBiZSBkcm9wcGVkIiwgX19mdW5jX18pKSk7CisJcmV0dXJu IE5VTEw7Cit9CisKK2J5dGVhICoKK3N0aXJvcHRpb25zKERhdHVtIHJlbG9wdGlvbnMsIGJvb2wg dmFsaWRhdGUpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK3N0aXJjb3N0ZXN0aW1hdGUo UGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwKKwkJCQkJIGRvdWJsZSBsb29wX2Nv dW50LCBDb3N0ICppbmRleFN0YXJ0dXBDb3N0LAorCQkJCQkgQ29zdCAqaW5kZXhUb3RhbENvc3Qs IFNlbGVjdGl2aXR5ICppbmRleFNlbGVjdGl2aXR5LAorCQkJCQkgZG91YmxlICppbmRleENvcnJl bGF0aW9uLCBkb3VibGUgKmluZGV4UGFnZXMpCit7CisJZXJlcG9ydChFUlJPUiwgKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLCBlcnJtc2coIlwiJXNcIiBpcyBub3QgaW1w bGVtZW50ZWQiLCBfX2Z1bmNfXykpKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvaW5kZXguYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwppbmRleCAxY2NmYTY4N2Yw NS4uMGNlZWRhMWZkZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwor KysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKQEAgLTM0MTIsNiArMzQxMiw3IEBAIHZh bGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCkK IAlpdmluZm8ubWVzc2FnZV9sZXZlbCA9IERFQlVHMjsKIAlpdmluZm8ubnVtX2hlYXBfdHVwbGVz ID0gaGVhcFJlbGF0aW9uLT5yZF9yZWwtPnJlbHR1cGxlczsKIAlpdmluZm8uc3RyYXRlZ3kgPSBO VUxMOworCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9IHRydWU7CiAKIAkvKgogCSAqIEVuY29kZSBU SURzIGFzIGludDggdmFsdWVzIGZvciB0aGUgc29ydCwgcmF0aGVyIHRoYW4gZGlyZWN0bHkgc29y dGluZwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy90b2FzdGluZy5jCmluZGV4IDRhYTUyYTRiZDI1Li5kN2VhODZiMjgwNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jCisrKyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvdG9hc3RpbmcuYwpAQCAtMzE0LDYgKzMxNCw3IEBAIGNyZWF0ZV90b2FzdF90 YWJsZShSZWxhdGlvbiByZWwsIE9pZCB0b2FzdE9pZCwgT2lkIHRvYXN0SW5kZXhPaWQsCiAJaW5k ZXhJbmZvLT5paV9QYXJhbGxlbFdvcmtlcnMgPSAwOwogCWluZGV4SW5mby0+aWlfQW0gPSBCVFJF RV9BTV9PSUQ7CiAJaW5kZXhJbmZvLT5paV9BbUNhY2hlID0gTlVMTDsKKwlpbmRleEluZm8tPmlp X0F1eGlsaWFyeSA9IGZhbHNlOwogCWluZGV4SW5mby0+aWlfQ29udGV4dCA9IEN1cnJlbnRNZW1v cnlDb250ZXh0OwogCiAJY29sbGF0aW9uSWRzWzBdID0gSW52YWxpZE9pZDsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Fu YWx5emUuYwppbmRleCA0OWE1Y2RmNTc5Yy4uY2JlYjQ5MDUwY2QgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFs eXplLmMKQEAgLTcyNiw2ICs3MjYsNyBAQCBkb19hbmFseXplX3JlbChSZWxhdGlvbiBvbmVyZWws IGNvbnN0IFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCQkJaXZpbmZvLm1lc3NhZ2VfbGV2ZWwgPSBl bGV2ZWw7CiAJCQlpdmluZm8ubnVtX2hlYXBfdHVwbGVzID0gb25lcmVsLT5yZF9yZWwtPnJlbHR1 cGxlczsKIAkJCWl2aW5mby5zdHJhdGVneSA9IHZhY19zdHJhdGVneTsKKwkJCWl2aW5mby52YWxp ZGF0ZV9pbmRleCA9IGZhbHNlOwogCiAJCQlzdGF0cyA9IGluZGV4X3ZhY3V1bV9jbGVhbnVwKCZp dmluZm8sIE5VTEwpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1w YXJhbGxlbC5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYwppbmRleCA3 NzgzNGI5NmEyMS4uMTY3MWMzYzIxOTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3ZhY3V1bXBhcmFsbGVsLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxs ZWwuYwpAQCAtODk2LDYgKzg5Niw3IEBAIHBhcmFsbGVsX3ZhY3V1bV9wcm9jZXNzX29uZV9pbmRl eChQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnMsIFJlbGF0aW9uIGluZHJlbCwKIAlpdmluZm8uZXN0 aW1hdGVkX2NvdW50ID0gcHZzLT5zaGFyZWQtPmVzdGltYXRlZF9jb3VudDsKIAlpdmluZm8ubnVt X2hlYXBfdHVwbGVzID0gcHZzLT5zaGFyZWQtPnJlbHR1cGxlczsKIAlpdmluZm8uc3RyYXRlZ3kg PSBwdnMtPmJzdHJhdGVneTsKKwlpdmluZm8udmFsaWRhdGVfaW5kZXggPSBmYWxzZTsKIAogCS8q IFVwZGF0ZSBlcnJvciB0cmFjZWJhY2sgaW5mb3JtYXRpb24gKi8KIAlwdnMtPmluZG5hbWUgPSBw c3RyZHVwKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGluZHJlbCkpOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3Mu YwppbmRleCAzY2QzNWM1YzQ1Ny4uNTM1OWRhYjExNzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L25vZGVzL21ha2VmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCkBA IC04NzUsNiArODc1LDcgQEAgbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlh dHRycywgT2lkIGFtb2lkLCBMaXN0ICpleHByZXNzaW9ucywKIAkvKiBpbml0aWFsaXplIGluZGV4 LWJ1aWxkIHN0YXRlIHRvIGRlZmF1bHQgKi8KIAluLT5paV9Ccm9rZW5Ib3RDaGFpbiA9IGZhbHNl OwogCW4tPmlpX1BhcmFsbGVsV29ya2VycyA9IDA7CisJbi0+aWlfQXV4aWxpYXJ5ID0gZmFsc2U7 CiAKIAkvKiBzZXQgdXAgZm9yIHBvc3NpYmxlIHVzZSBieSBpbmRleCBBTSAqLwogCW4tPmlpX0Ft ID0gYW1vaWQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9nZW5hbS5oCmluZGV4IGI2OTMyMGE3ZmM4Li4xYTVkZTRiNjkxYSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2dlbmFtLmgKQEAgLTU4LDYgKzU4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhWYWN1dW1J bmZvCiAJYm9vbAkJZXN0aW1hdGVkX2NvdW50OwkvKiBudW1faGVhcF90dXBsZXMgaXMgYW4gZXN0 aW1hdGUgKi8KIAlpbnQJCQltZXNzYWdlX2xldmVsOwkvKiBlcmVwb3J0IGxldmVsIGZvciBwcm9n cmVzcyBtZXNzYWdlcyAqLwogCWRvdWJsZQkJbnVtX2hlYXBfdHVwbGVzOwkvKiB0dXBsZXMgcmVt YWluaW5nIGluIGhlYXAgKi8KKwlib29sCQl2YWxpZGF0ZV9pbmRleDsgLyogdmFsaWRhdGluZyBj b25jdXJyZW50bHkgYnVpbHQgaW5kZXg/ICovCiAJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRl Z3k7CS8qIGFjY2VzcyBzdHJhdGVneSBmb3IgcmVhZHMgKi8KIH0gSW5kZXhWYWN1dW1JbmZvOwog CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsb3B0aW9ucy5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3JlbG9wdGlvbnMuaAppbmRleCBlOGNiN2Y3YTYyNy4uN2YzZjA4YTcwYWMgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxvcHRpb25zLmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3JlbG9wdGlvbnMuaApAQCAtNTEsOCArNTEsOSBAQCB0eXBlZGVmIGVudW0gcmVs b3B0X2tpbmQKIAlSRUxPUFRfS0lORF9WSUVXID0gKDEgPDwgOSksCiAJUkVMT1BUX0tJTkRfQlJJ TiA9ICgxIDw8IDEwKSwKIAlSRUxPUFRfS0lORF9QQVJUSVRJT05FRCA9ICgxIDw8IDExKSwKKwlS RUxPUFRfS0lORF9TVElSID0gKDEgPDwgMTIpLAogCS8qIGlmIHlvdSBhZGQgYSBuZXcga2luZCwg bWFrZSBzdXJlIHlvdSB1cGRhdGUgImxhc3RfZGVmYXVsdCIgdG9vICovCi0JUkVMT1BUX0tJTkRf TEFTVF9ERUZBVUxUID0gUkVMT1BUX0tJTkRfUEFSVElUSU9ORUQsCisJUkVMT1BUX0tJTkRfTEFT VF9ERUZBVUxUID0gUkVMT1BUX0tJTkRfU1RJUiwKIAkvKiBzb21lIGNvbXBpbGVycyB0cmVhdCBl bnVtcyBhcyBzaWduZWQgaW50cywgc28gd2UgY2FuJ3QgdXNlIDEgPDwgMzEgKi8KIAlSRUxPUFRf S0lORF9NQVggPSAoMSA8PCAzMCkKIH0gcmVsb3B0X2tpbmQ7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3Mvc3Rpci5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3N0aXIuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjA4Y2Y0ZDRlZjAKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3Rpci5oCkBAIC0wLDAgKzEsMTEwIEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBzdGlyLmgKKyAqCSAgaGVhZGVyIGZpbGUgZm9yIHBvc3RncmVz IHN0aXIgYWNjZXNzIG1ldGhvZCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKgorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICoKKyAqIHNyYy9pbmNsdWRlL2FjY2Vzcy9zdGlyLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2lmbmRlZiBTVElSX0gKKyNkZWZpbmUgU1RJUl9ICisKKyNpbmNsdWRlICJhY2Nlc3Mv YW1hcGkuaCIKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKyNpbmNsdWRlICJzdG9yYWdl L2J1ZnBhZ2UuaCIKKworLyogU3VwcG9ydCBwcm9jZWR1cmVzIG51bWJlcnMgKi8KKyNkZWZpbmUg U1RJUl9OUFJPQwkJCQkwCisKKy8qIFNjYW4gc3RyYXRlZ2llcyAqLworI2RlZmluZSBTVElSX05T VFJBVEVHSUVTCQkxCisKKyNkZWZpbmUgU1RJUl9PUFRJT05TX1BST0MJCQkJMAorCisvKiBNYWNy b3MgZm9yIGFjY2Vzc2luZyBzdGlyIHBhZ2Ugc3RydWN0dXJlcyAqLworI2RlZmluZSBTdGlyUGFn ZUdldE9wYXF1ZShwYWdlKSAoKFN0aXJQYWdlT3BhcXVlKSBQYWdlR2V0U3BlY2lhbFBvaW50ZXIo cGFnZSkpCisjZGVmaW5lIFN0aXJQYWdlR2V0TWF4T2Zmc2V0KHBhZ2UpIChTdGlyUGFnZUdldE9w YXF1ZShwYWdlKS0+bWF4b2ZmKQorI2RlZmluZSBTdGlyUGFnZUlzTWV0YShwYWdlKSBcCisJKChT dGlyUGFnZUdldE9wYXF1ZShwYWdlKS0+ZmxhZ3MgJiBTVElSX01FVEEpICE9IDApCisjZGVmaW5l IFN0aXJQYWdlR2V0VHVwbGUocGFnZSwgb2Zmc2V0KSBcCisJKChTdGlyVHVwbGUgKikoUGFnZUdl dENvbnRlbnRzKHBhZ2UpIFwKKwkJKyBzaXplb2YoU3RpclR1cGxlKSAqICgob2Zmc2V0KSAtIDEp KSkKKyNkZWZpbmUgU3RpclBhZ2VHZXROZXh0VHVwbGUodHVwbGUpIFwKKwkoKFN0aXJUdXBsZSAq KSgoY2hhciAqKSh0dXBsZSkgKyBzaXplb2YoU3RpclR1cGxlKSkpCisKKworCisvKiBQcmVzZXJ2 ZWQgcGFnZSBudW1iZXJzICovCisjZGVmaW5lIFNUSVJfTUVUQVBBR0VfQkxLTk8JKDApCisjZGVm aW5lIFNUSVJfSEVBRF9CTEtOTwkJKDEpIC8qIGZpcnN0IGRhdGEgcGFnZSAqLworCisKKy8qIE9w YXF1ZSBmb3Igc3RpciBwYWdlcyAqLwordHlwZWRlZiBzdHJ1Y3QgU3RpclBhZ2VPcGFxdWVEYXRh Cit7CisJT2Zmc2V0TnVtYmVyIG1heG9mZjsJCS8qIG51bWJlciBvZiBpbmRleCB0dXBsZXMgb24g dGhlIHBhZ2UgKi8KKwl1aW50MTYJCWZsYWdzOwkJCS8qIHNlZSBiaXQgZGVmaW5pdGlvbnMgYmVs b3cgKi8KKwl1aW50MTYJCXN0aXJfcGFnZV9pZDsJLyogZm9yIGlkZW50aWZpY2F0aW9uIG9mIFNU SVIgaW5kZXhlcyAqLworfSBTdGlyUGFnZU9wYXF1ZURhdGE7CisKKy8qIFN0aXIgcGFnZSBmbGFn cyAqLworI2RlZmluZSBTVElSX01FVEEJCSgxPDwwKQorCit0eXBlZGVmIFN0aXJQYWdlT3BhcXVl RGF0YSAqU3RpclBhZ2VPcGFxdWU7CisKKyNkZWZpbmUgU1RJUl9QQUdFX0lECQkweEZGODQKKwor LyogTWV0YWRhdGEgb2Ygc3RpciBpbmRleCAqLwordHlwZWRlZiBzdHJ1Y3QgU3Rpck1ldGFQYWdl RGF0YQoreworCXVpbnQzMgkJbWFnaWNOdW1iZXI7CisJQmxvY2tOdW1iZXIJbGFzdEJsa05vOwor CWJvb2wJCXNraXBJbnNlcnRzOwkvKiBzaG91bGQgd2UganVzdCBleGl0IHdpdGhvdXQgYW55IGlu c2VydHM/ICovCit9IFN0aXJNZXRhUGFnZURhdGE7CisKKy8qIE1hZ2ljIG51bWJlciB0byBkaXN0 aW5ndWlzaCBzdGlyIHBhZ2VzIGZyb20gb3RoZXJzICovCisjZGVmaW5lIFNUSVJfTUFHSUNfTlVN QkVSICgweERCQUMwREVGKQorCisjZGVmaW5lIFN0aXJQYWdlR2V0TWV0YShwYWdlKQkoKFN0aXJN ZXRhUGFnZURhdGEgKikgUGFnZUdldENvbnRlbnRzKHBhZ2UpKQorCit0eXBlZGVmIHN0cnVjdCBT dGlyVHVwbGUKK3sKKwlJdGVtUG9pbnRlckRhdGEgaGVhcFB0cjsKK30gU3RpclR1cGxlOworCisj ZGVmaW5lIFN0aXJQYWdlR2V0RnJlZVNwYWNlKHBhZ2UpIFwKKwkoQkxDS1NaIC0gTUFYQUxJR04o U2l6ZU9mUGFnZUhlYWRlckRhdGEpIFwKKwkJLSBTdGlyUGFnZUdldE1heE9mZnNldChwYWdlKSAq IChzaXplb2YoU3RpclR1cGxlKSkgXAorCQktIE1BWEFMSUdOKHNpemVvZihTdGlyUGFnZU9wYXF1 ZURhdGEpKSkKKworZXh0ZXJuIHZvaWQgU3RpckZpbGxNZXRhcGFnZShSZWxhdGlvbiBpbmRleCwg UGFnZSBtZXRhUGFnZSwgYm9vbCBza2lwSW5zZXJ0cyk7CitleHRlcm4gdm9pZCBTdGlySW5pdE1l dGFwYWdlKFJlbGF0aW9uIGluZGV4LCBGb3JrTnVtYmVyIGZvcmtudW0pOworZXh0ZXJuIHZvaWQg U3RpckluaXRQYWdlKFBhZ2UgcGFnZSwgdWludDE2IGZsYWdzKTsKK2V4dGVybiB2b2lkIFN0aXJN YXJrQXNTa2lwSW5zZXJ0cyhSZWxhdGlvbiBpbmRleCk7CisKKy8qIGluZGV4IGFjY2VzcyBtZXRo b2QgaW50ZXJmYWNlIGZ1bmN0aW9ucyAqLworZXh0ZXJuIGJvb2wgc3RpcnZhbGlkYXRlKE9pZCBv cGNsYXNzb2lkKTsKK2V4dGVybiBib29sIHN0aXJpbnNlcnQoUmVsYXRpb24gaW5kZXgsIERhdHVt ICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKKwkJCQkJIEl0ZW1Qb2ludGVyIGh0X2N0aWQsIFJlbGF0 aW9uIGhlYXBSZWwsCisJCQkJCSBJbmRleFVuaXF1ZUNoZWNrIGNoZWNrVW5pcXVlLAorCQkJCQkg Ym9vbCBpbmRleFVuY2hhbmdlZCwKKwkJCQkJIHN0cnVjdCBJbmRleEluZm8gKmluZGV4SW5mbyk7 CitleHRlcm4gSW5kZXhTY2FuRGVzYyBzdGlyYmVnaW5zY2FuKFJlbGF0aW9uIHIsIGludCBua2V5 cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBzdGlycmVzY2FuKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAorCQkJCQkgU2NhbktleSBvcmRl cmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBzdGlyZW5kc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4pOworZXh0ZXJuIEluZGV4QnVpbGRSZXN1bHQgKnN0aXJidWlsZChSZWxhdGlvbiBo ZWFwLCBSZWxhdGlvbiBpbmRleCwKKwkJCQkJCQkJIHN0cnVjdCBJbmRleEluZm8gKmluZGV4SW5m byk7CitleHRlcm4gdm9pZCBzdGlyYnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCk7CitleHRlcm4g SW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGlyYnVsa2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmlu Zm8sCisJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywgSW5kZXhCdWxr RGVsZXRlQ2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCQkJCQkJICAgdm9pZCAqY2FsbGJhY2tfc3Rh dGUpOworZXh0ZXJuIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RpcnZhY3V1bWNsZWFudXAoSW5k ZXhWYWN1dW1JbmZvICppbmZvLAorCQkJCQkJCQkJCQkgIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAq c3RhdHMpOworZXh0ZXJuIGJ5dGVhICpzdGlyb3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29s IHZhbGlkYXRlKTsKKworI2VuZGlmCQkJLyogU1RJUl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX2FtLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW0uZGF0Cmlu ZGV4IDQ2ZDM2MTA0N2ZlLi44YmQyYzJiNDZiYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19hbS5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbS5kYXQKQEAgLTMz LDUgKzMzLDggQEAKIHsgb2lkID0+ICczNTgwJywgb2lkX3N5bWJvbCA9PiAnQlJJTl9BTV9PSUQn LAogICBkZXNjciA9PiAnYmxvY2sgcmFuZ2UgaW5kZXggKEJSSU4pIGFjY2VzcyBtZXRob2QnLAog ICBhbW5hbWUgPT4gJ2JyaW4nLCBhbWhhbmRsZXIgPT4gJ2JyaW5oYW5kbGVyJywgYW10eXBlID0+ ICdpJyB9LAoreyBvaWQgPT4gJzU1NTUnLCBvaWRfc3ltYm9sID0+ICdTVElSX0FNX09JRCcsCisg IGRlc2NyID0+ICdzaG9ydCB0ZXJtIGluZGV4IHJlcGxhY2VtZW50IGFjY2VzcyBtZXRob2QnLAor ICBhbW5hbWUgPT4gJ3N0aXInLCBhbWhhbmRsZXIgPT4gJ3N0aXJoYW5kbGVyJywgYW10eXBlID0+ ICdpJyB9LAogCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wY2xhc3Mu ZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdAppbmRleCBkZjE3MGI4MDg0 MC4uYTM0NTdlNzQ5ZGIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BjbGFz cy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdApAQCAtNDkyLDQg KzQ5Miw4IEBACiAKICMgbm8gYnJpbiBvcGNsYXNzIGZvciB0aGUgZ2VvbWV0cmljIHR5cGVzIGV4 Y2VwdCBib3gKIAorIyBhbGxvdyBhbnkgdHlwZXMgZm9yIFNUSVIKK3sgb3BjbWV0aG9kID0+ICdz dGlyJywgb2lkX3N5bWJvbCA9PiAnQU5ZX1NUSVJfT1BTX09JRCcsIG9wY25hbWUgPT4gJ3N0aXJf b3BzJywKKyAgb3BjZmFtaWx5ID0+ICdzdGlyL2FueV9vcHMnLCBvcGNpbnR5cGUgPT4gJ2FueSd9 LAorCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZmFtaWx5LmRhdCBi L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BmYW1pbHkuZGF0CmluZGV4IDdhMDI3YzQ4MTBlLi42 ZmZjMjBhMDYxYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGZhbWlseS5k YXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGZhbWlseS5kYXQKQEAgLTMwOCw1ICsz MDgsNyBAQAogICBvcGZtZXRob2QgPT4gJ2hhc2gnLCBvcGZuYW1lID0+ICdtdWx0aXJhbmdlX29w cycgfSwKIHsgb2lkID0+ICc2MTU4JywKICAgb3BmbWV0aG9kID0+ICdnaXN0Jywgb3BmbmFtZSA9 PiAnbXVsdGlyYW5nZV9vcHMnIH0sCit7IG9pZCA9PiAnNTU1OCcsCisgIG9wZm1ldGhvZCA9PiAn c3RpcicsIG9wZm5hbWUgPT4gJ2FueV9vcHMnIH0sCiAKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CmluZGV4IDM1NzljZWM1NzQ0Li4yNDI4MDhkMDQwMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CkBAIC05MzUsNiArOTM1LDEwIEBACiAgIHByb25hbWUgPT4gJ2JyaW5oYW5kbGVyJywgcHJvdm9s YXRpbGUgPT4gJ3YnLAogICBwcm9yZXR0eXBlID0+ICdpbmRleF9hbV9oYW5kbGVyJywgcHJvYXJn dHlwZXMgPT4gJ2ludGVybmFsJywKICAgcHJvc3JjID0+ICdicmluaGFuZGxlcicgfSwKK3sgb2lk ID0+ICc1NTU2JywgZGVzY3IgPT4gJ3Nob3J0IHRlcm0gaW5kZXggcmVwbGFjZW1lbnQgYWNjZXNz IG1ldGhvZCBoYW5kbGVyJywKKyAgcHJvbmFtZSA9PiAnc3RpcmhhbmRsZXInLCBwcm92b2xhdGls ZSA9PiAndicsCisgIHByb3JldHR5cGUgPT4gJ2luZGV4X2FtX2hhbmRsZXInLCBwcm9hcmd0eXBl cyA9PiAnaW50ZXJuYWwnLAorICBwcm9zcmMgPT4gJ3N0aXJoYW5kbGVyJyB9LAogeyBvaWQgPT4g JzM5NTInLCBkZXNjciA9PiAnYnJpbjogc3RhbmRhbG9uZSBzY2FuIG5ldyB0YWJsZSBwYWdlcycs CiAgIHByb25hbWUgPT4gJ2JyaW5fc3VtbWFyaXplX25ld192YWx1ZXMnLCBwcm92b2xhdGlsZSA9 PiAndicsCiAgIHByb3BhcmFsbGVsID0+ICd1JywgcHJvcmV0dHlwZSA9PiAnaW50NCcsIHByb2Fy Z3R5cGVzID0+ICdyZWdjbGFzcycsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVj bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDY4NGUzOThmODI0 Li43NGVmYTIzNzIxMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE2Niw4ICsxNjYsOCBAQCB0 eXBlZGVmIHN0cnVjdCBFeHByU3RhdGUKICAqCQllbnRyaWVzIGZvciBhIHBhcnRpY3VsYXIgaW5k ZXguICBVc2VkIGZvciBib3RoIGluZGV4X2J1aWxkIGFuZAogICoJCXJldGFpbCBjcmVhdGlvbiBv ZiBpbmRleCBlbnRyaWVzLgogICoKLSAqIGlpX0NvbmN1cnJlbnQsIGlpX0Jyb2tlbkhvdENoYWlu LCBhbmQgaWlfUGFyYWxsZWxXb3JrZXJzIGFyZSB1c2VkIG9ubHkKLSAqIGR1cmluZyBpbmRleCBi dWlsZDsgdGhleSdyZSBjb252ZW50aW9uYWxseSB6ZXJvZWQgb3RoZXJ3aXNlLgorICogaWlfQ29u Y3VycmVudCwgaWlfQnJva2VuSG90Q2hhaW4sIGlpX0F1eGlsaWFyeSBhbmQgaWlfUGFyYWxsZWxX b3JrZXJzCisgKiBhcmUgdXNlZCBvbmx5IGR1cmluZyBpbmRleCBidWlsZDsgdGhleSdyZSBjb252 ZW50aW9uYWxseSB6ZXJvZWQgb3RoZXJ3aXNlLgogICogLS0tLS0tLS0tLS0tLS0tLQogICovCiB0 eXBlZGVmIHN0cnVjdCBJbmRleEluZm8KQEAgLTIyNyw3ICsyMjcsOCBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleEluZm8KIAlib29sCQlpaV9XaXRob3V0T3ZlcmxhcHM7CiAJLyogIyBvZiB3b3JrZXJz IHJlcXVlc3RlZCAoZXhjbHVkZXMgbGVhZGVyKSAqLwogCWludAkJCWlpX1BhcmFsbGVsV29ya2Vy czsKLQorCS8qIGlzIGF1eGlsaWFyeSBmb3IgY29uY3VycmVudCBpbmRleCBidWlsZD8gKi8KKwli b29sCQlpaV9BdXhpbGlhcnk7CiAJLyogT2lkIG9mIGluZGV4IEFNICovCiAJT2lkCQkJaWlfQW07 CiAJLyogcHJpdmF0ZSBjYWNoZSBhcmVhIGZvciBpbmRleCBBTSAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvdXRpbHMvaW5kZXhfc2VsZnVuY3MuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2luZGV4 X3NlbGZ1bmNzLmgKaW5kZXggNzQ3OTNhMWExOWQuLmJmMGUzMGRhYmU5IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS91dGlscy9pbmRleF9zZWxmdW5jcy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L2luZGV4X3NlbGZ1bmNzLmgKQEAgLTYyLDYgKzYyLDE0IEBAIGV4dGVybiB2b2lkIHNwZ2Nvc3Rl c3RpbWF0ZShzdHJ1Y3QgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJU2VsZWN0aXZpdHkgKmlu ZGV4U2VsZWN0aXZpdHksCiAJCQkJCQkJZG91YmxlICppbmRleENvcnJlbGF0aW9uLAogCQkJCQkJ CWRvdWJsZSAqaW5kZXhQYWdlcyk7CitleHRlcm4gdm9pZCBzdGlyY29zdGVzdGltYXRlKHN0cnVj dCBQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQlzdHJ1Y3QgSW5kZXhQYXRoICpwYXRoLAorCQkJ CQkJCWRvdWJsZSBsb29wX2NvdW50LAorCQkJCQkJCUNvc3QgKmluZGV4U3RhcnR1cENvc3QsCisJ CQkJCQkJQ29zdCAqaW5kZXhUb3RhbENvc3QsCisJCQkJCQkJU2VsZWN0aXZpdHkgKmluZGV4U2Vs ZWN0aXZpdHksCisJCQkJCQkJZG91YmxlICppbmRleENvcnJlbGF0aW9uLAorCQkJCQkJCWRvdWJs ZSAqaW5kZXhQYWdlcyk7CiBleHRlcm4gdm9pZCBnaW5jb3N0ZXN0aW1hdGUoc3RydWN0IFBsYW5u ZXJJbmZvICpyb290LAogCQkJCQkJCXN0cnVjdCBJbmRleFBhdGggKnBhdGgsCiAJCQkJCQkJZG91 YmxlIGxvb3BfY291bnQsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Ft dXRpbHMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hbXV0aWxzLm91dAppbmRleCA3 YWI2MTEzYzYxOS4uOTJjMDMzYTIwMTAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvYW11dGlscy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hbXV0aWxz Lm91dApAQCAtMTczLDcgKzE3MywxMyBAQCBzZWxlY3QgYW1uYW1lLCBwcm9wLCBwZ19pbmRleGFt X2hhc19wcm9wZXJ0eShhLm9pZCwgcHJvcCkgYXMgcAogIHNwZ2lzdCB8IGNhbl9leGNsdWRlICAg fCB0CiAgc3BnaXN0IHwgY2FuX2luY2x1ZGUgICB8IHQKICBzcGdpc3QgfCBib2d1cyAgICAgICAg IHwgCi0oMzYgcm93cykKKyBzdGlyICAgfCBjYW5fb3JkZXIgICAgIHwgZgorIHN0aXIgICB8IGNh bl91bmlxdWUgICAgfCBmCisgc3RpciAgIHwgY2FuX211bHRpX2NvbCB8IHQKKyBzdGlyICAgfCBj YW5fZXhjbHVkZSAgIHwgZgorIHN0aXIgICB8IGNhbl9pbmNsdWRlICAgfCB0Cisgc3RpciAgIHwg Ym9ndXMgICAgICAgICB8IAorKDQyIHJvd3MpCiAKIC0tCiAtLSBhZGRpdGlvbmFsIGNoZWNrcyBm b3IgcGdfaW5kZXhfY29sdW1uX2hhc19wcm9wZXJ0eQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9vcHJfc2FuaXR5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv b3ByX3Nhbml0eS5vdXQKaW5kZXggNmZmNGQ3ZWU5MDEuLjkyNTk2NzllZWEyIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHkub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvb3ByX3Nhbml0eS5vdXQKQEAgLTIxMjksOSArMjEyOSwxMCBAQCBG Uk9NIHBnX29wY2xhc3MgQVMgYzEKIFdIRVJFIE5PVCBFWElTVFMoU0VMRUNUIDEgRlJPTSBwZ19h bW9wIEFTIGExCiAgICAgICAgICAgICAgICAgIFdIRVJFIGExLmFtb3BmYW1pbHkgPSBjMS5vcGNm YW1pbHkKICAgICAgICAgICAgICAgICAgICBBTkQgYmluYXJ5X2NvZXJjaWJsZShjMS5vcGNpbnR5 cGUsIGExLmFtb3BsZWZ0dHlwZSkpOwotIG9wY25hbWUgfCBvcGNmYW1pbHkgCi0tLS0tLS0tLS0r LS0tLS0tLS0tLS0KLSgwIHJvd3MpCisgb3BjbmFtZSAgfCBvcGNmYW1pbHkgCistLS0tLS0tLS0t Ky0tLS0tLS0tLS0tCisgc3Rpcl9vcHMgfCAgICAgIDU1NTgKKygxIHJvdykKIAogLS0gQ2hlY2sg dGhhdCBlYWNoIG9wZXJhdG9yIGxpc3RlZCBpbiBwZ19hbW9wIGhhcyBhbiBhc3NvY2lhdGVkIG9w Y2xhc3MsCiAtLSB0aGF0IGlzIG9uZSB3aG9zZSBvcGNpbnR5cGUgbWF0Y2hlcyBvcHJsZWZ0IChw b3NzaWJseSBieSBjb2VyY2lvbikuCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3BzcWwub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dAppbmRleCBj OGYzOTMyZWRmMC4uZWNjMmMyYTYwNDkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHNxbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dApA QCAtNTE3MSw3ICs1MTcxLDggQEAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwogIGhlYXAgICB8IFRh YmxlCiAgaGVhcDIgIHwgVGFibGUKICBzcGdpc3QgfCBJbmRleAotKDggcm93cykKKyBzdGlyICAg fCBJbmRleAorKDkgcm93cykKIAogXGRBICoKIExpc3Qgb2YgYWNjZXNzIG1ldGhvZHMKQEAgLTUx ODUsNyArNTE4Niw4IEBAIExpc3Qgb2YgYWNjZXNzIG1ldGhvZHMKICBoZWFwICAgfCBUYWJsZQog IGhlYXAyICB8IFRhYmxlCiAgc3BnaXN0IHwgSW5kZXgKLSg4IHJvd3MpCisgc3RpciAgIHwgSW5k ZXgKKyg5IHJvd3MpCiAKIFxkQSBoKgogTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwpAQCAtNTIxMCw5 ICs1MjEyLDkgQEAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwogCiBcZEE6IGV4dHJhIGFyZ3VtZW50 ICJiYXIiIGlnbm9yZWQKIFxkQSsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBv ZiBhY2Nlc3MgbWV0aG9kcwotICBOYW1lICB8IFR5cGUgIHwgICAgICAgSGFuZGxlciAgICAgICAg fCAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAKLS0tLS0tLS0tKy0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBhY2Nlc3Mg bWV0aG9kcworICBOYW1lICB8IFR5cGUgIHwgICAgICAgSGFuZGxlciAgICAgICAgfCAgICAgICAg ICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgCistLS0tLS0tLSstLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KICBicmluICAgfCBJbmRleCB8IGJyaW5oYW5kbGVyICAgICAgICAgIHwgYmxvY2sg cmFuZ2UgaW5kZXggKEJSSU4pIGFjY2VzcyBtZXRob2QKICBidHJlZSAgfCBJbmRleCB8IGJ0aGFu ZGxlciAgICAgICAgICAgIHwgYi10cmVlIGluZGV4IGFjY2VzcyBtZXRob2QKICBnaW4gICAgfCBJ bmRleCB8IGdpbmhhbmRsZXIgICAgICAgICAgIHwgR0lOIGluZGV4IGFjY2VzcyBtZXRob2QKQEAg LTUyMjEsMTIgKzUyMjMsMTMgQEAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwogIGhlYXAgICB8IFRh YmxlIHwgaGVhcF90YWJsZWFtX2hhbmRsZXIgfCBoZWFwIHRhYmxlIGFjY2VzcyBtZXRob2QKICBo ZWFwMiAgfCBUYWJsZSB8IGhlYXBfdGFibGVhbV9oYW5kbGVyIHwgCiAgc3BnaXN0IHwgSW5kZXgg fCBzcGdoYW5kbGVyICAgICAgICAgICB8IFNQLUdpU1QgaW5kZXggYWNjZXNzIG1ldGhvZAotKDgg cm93cykKKyBzdGlyICAgfCBJbmRleCB8IHN0aXJoYW5kbGVyICAgICAgICAgIHwgc2hvcnQgdGVy bSBpbmRleCByZXBsYWNlbWVudCBhY2Nlc3MgbWV0aG9kCisoOSByb3dzKQogCiBcZEErICoKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwotICBOYW1l ICB8IFR5cGUgIHwgICAgICAgSGFuZGxlciAgICAgICAgfCAgICAgICAgICAgICAgRGVzY3JpcHRp b24gICAgICAgICAgICAgICAKLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcworICBOYW1lICB8IFR5cGUg IHwgICAgICAgSGFuZGxlciAgICAgICAgfCAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgICAg ICAgICAgICAgICAgCistLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBicmluICAgfCBJbmRl eCB8IGJyaW5oYW5kbGVyICAgICAgICAgIHwgYmxvY2sgcmFuZ2UgaW5kZXggKEJSSU4pIGFjY2Vz cyBtZXRob2QKICBidHJlZSAgfCBJbmRleCB8IGJ0aGFuZGxlciAgICAgICAgICAgIHwgYi10cmVl IGluZGV4IGFjY2VzcyBtZXRob2QKICBnaW4gICAgfCBJbmRleCB8IGdpbmhhbmRsZXIgICAgICAg ICAgIHwgR0lOIGluZGV4IGFjY2VzcyBtZXRob2QKQEAgLTUyMzUsNyArNTIzOCw4IEBAIExpc3Qg b2YgYWNjZXNzIG1ldGhvZHMKICBoZWFwICAgfCBUYWJsZSB8IGhlYXBfdGFibGVhbV9oYW5kbGVy IHwgaGVhcCB0YWJsZSBhY2Nlc3MgbWV0aG9kCiAgaGVhcDIgIHwgVGFibGUgfCBoZWFwX3RhYmxl YW1faGFuZGxlciB8IAogIHNwZ2lzdCB8IEluZGV4IHwgc3BnaGFuZGxlciAgICAgICAgICAgfCBT UC1HaVNUIGluZGV4IGFjY2VzcyBtZXRob2QKLSg4IHJvd3MpCisgc3RpciAgIHwgSW5kZXggfCBz dGlyaGFuZGxlciAgICAgICAgICB8IHNob3J0IHRlcm0gaW5kZXggcmVwbGFjZW1lbnQgYWNjZXNz IG1ldGhvZAorKDkgcm93cykKIAogXGRBKyBoKgogICAgICAgICAgICAgICAgICAgICAgTGlzdCBv ZiBhY2Nlc3MgbWV0aG9kcwotLSAKMi41My4wCgo= --000000000000b895ca064e594206 Content-Type: application/x-patch; name="v33-0007-Refresh-snapshot-periodically-during-index-valid.patch" Content-Disposition: attachment; filename="v33-0007-Refresh-snapshot-periodically-during-index-valid.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnf26cr26 RnJvbSBlMzZiZThkMTM5MjNhZWU4NzFhOGJjOTcwZDg4YWU5MDNlNTY5NTZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAyMSBBcHIgMjAyNSAxNDoxMTo1MyArMDIwMApTdWJqZWN0OiBb UEFUQ0ggdjMzIDcvN10gUmVmcmVzaCBzbmFwc2hvdCBwZXJpb2RpY2FsbHkgZHVyaW5nIGluZGV4 IHZhbGlkYXRpb24KCkVuaGFuY2VzIHZhbGlkYXRpb24gcGhhc2Ugb2YgY29uY3VycmVudGx5IGJ1 aWx0IGluZGV4ZXMgYnkgcGVyaW9kaWNhbGx5IHJlZnJlc2hpbmcgc25hcHNob3RzIHJhdGhlciB0 aGFuIHVzaW5nIGEgc2luZ2xlIHJlZmVyZW5jZSBzbmFwc2hvdC4gVGhpcyBhZGRyZXNzZXMgaXNz dWVzIHdpdGggeG1pbiBwcm9wYWdhdGlvbiBkdXJpbmcgbG9uZy1ydW5uaW5nIHZhbGlkYXRpb25z LgoKVGhlIHZhbGlkYXRpb24gbm93IHRha2VzIGEgZnJlc2ggc25hcHNob3QgZXZlcnkgZmV3IHBh Z2VzLCBhbGxvd2luZyB0aGUgeG1pbiBob3Jpem9uIHRvIGFkdmFuY2UuIFRoaXMgcmVzdG9yZXMg ZmVhdHVyZSBvZiBjb21taXQgZDlkMDc2MjIyZjViLCB3aGljaCB3YXMgcmV2ZXJ0ZWQgaW4gY29t bWl0IGUyOGJiODg1MTk2OS4gTmV3IFNUSVItYmFzZWQgYXBwcm9hY2ggZG9lcyBub3QgZGVwZW5k IG9uIHNpbmdsZSByZWZlcmVuY2Ugc25hcHNob3QgYW55bW9yZS4KLS0tCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9SRUFETUUuSE9UICAgICAgICAgfCAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgIHwgNzcgKysrKysrKysrKysrKysrKysrKysrLQogc3Jj L2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYyAgICAgIHwgMTIgKysrLQogc3JjL2Jh Y2tlbmQvY2F0YWxvZy9pbmRleC5jICAgICAgICAgICAgICAgIHwgNzMgKysrKysrKysrKysrKysr LS0tLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jICAgICAgICAgICB8IDUwICsr LS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCAg fCAgOSArKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICB8IDI1 ICsrKystLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmggICAgICAgICAgICAgICB8IDE1 ICsrKysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmggICAgICAgICAgICAgICAgfCAgMiAr LQogc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggICAgICAgICAgICAgICAgICAgIHwgIDEgKwogc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0IHwgIDMgKwogc3JjL3Rlc3Qv cmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbCAgICAgIHwgIDQgKysKIDEyIGZpbGVzIGNoYW5n ZWQsIDE5MiBpbnNlcnRpb25zKCspLCA4MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv UkVBRE1FLkhPVAppbmRleCBiMWM3OTc1MTdlZS4uMzgyZmUxNzIzYTUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL1JFQURNRS5IT1QKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvUkVBRE1FLkhPVApAQCAtNDAxLDEyICs0MDEsMTIgQEAgbGl2ZSB0dXBsZS4KIFdlIG1h cmsgdGhlIGluZGV4IG9wZW4gZm9yIGluc2VydHMgKGJ1dCBzdGlsbCBub3QgcmVhZHkgZm9yIHJl YWRzKSB0aGVuCiB3ZSBhZ2FpbiB3YWl0IGZvciB0cmFuc2FjdGlvbnMgd2hpY2ggaGF2ZSB0aGUg dGFibGUgb3Blbi4gIFRoZW4gdmFsaWRhdGUKIHRoZSBpbmRleC4gIFRoaXMgc2VhcmNoZXMgZm9y IHR1cGxlcyBtaXNzaW5nIGZyb20gdGhlIGluZGV4IGluIGF1eGlsaWFyeQotaW5kZXgsIGFuZCBp bnNlcnRzIGFueSBtaXNzaW5nIG9uZXMgaWYgdGhleSBhcmUgdmlzaWJsZSB0byByZWZlcmVuY2Ug c25hcHNob3QuCitpbmRleCwgYW5kIGluc2VydHMgYW55IG1pc3Npbmcgb25lcyBpZiB0aGV5IGFy ZSB2aXNpYmxlIHRvIGEgZnJlc2ggc25hcHNob3QuCiBBZ2FpbiwgdGhlIGluZGV4IGVudHJpZXMg aGF2ZSB0byBoYXZlIFRJRHMgZXF1YWwgdG8gSE9ULWNoYWluIHJvb3QgVElEcywgYnV0CiB0aGUg dmFsdWUgdG8gYmUgaW5zZXJ0ZWQgaXMgdGhlIG9uZSBmcm9tIHRoZSBsaXZlIHR1cGxlLgogCiBU aGVuIHdlIHdhaXQgdW50aWwgZXZlcnkgdHJhbnNhY3Rpb24gdGhhdCBjb3VsZCBoYXZlIGEgc25h cHNob3Qgb2xkZXIgdGhhbgotdGhlIHNlY29uZCByZWZlcmVuY2Ugc25hcHNob3QgaXMgZmluaXNo ZWQuICBUaGlzIGVuc3VyZXMgdGhhdCBub2JvZHkgaXMKK3RoZSBsYXRlc3QgdXNlZCBzbmFwc2hv dCBpcyBmaW5pc2hlZC4gIFRoaXMgZW5zdXJlcyB0aGF0IG5vYm9keSBpcwogYWxpdmUgYW55IGxv bmdlciB3aG8gY291bGQgbmVlZCB0byBzZWUgYW55IHR1cGxlcyB0aGF0IG1pZ2h0IGJlIG1pc3Np bmcKIGZyb20gdGhlIGluZGV4LCBhcyB3ZWxsIGFzIGVuc3VyaW5nIHRoYXQgbm8gb25lIGNhbiBz ZWUgYW55IGluY29uc2lzdGVudAogcm93cyBpbiBhIGJyb2tlbiBIT1QgY2hhaW4gKHRoZSBmaXJz dCBjb25kaXRpb24gaXMgc3Ryb25nZXIgdGhhbiB0aGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jCmluZGV4IDNhMDQ0NTNmZjVkLi44MzZmZDgzYzRhMiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC01Myw2ICs1Myw5IEBACiAvKiBH VUM6IHBlcmNlbnRhZ2Ugb2YgbWFpbnRlbmFuY2Vfd29ya19tZW0gZm9yIENJQyB2YWxpZGF0aW9u IHR1cGxlc3RvcmUgKi8KIGludAkJCWRlYnVnX2NpY192YWxpZGF0ZV9zdG9yZV9tZW1fcGN0ID0g MTA7CiAKKy8qIEdVQzogcmVmcmVzaCBzbmFwc2hvdCBldmVyeSBOIHBhZ2VzIGR1cmluZyBDSUMg dmFsaWRhdGlvbiAoMCA9IGRpc2FibGUpICovCitpbnQJCQlkZWJ1Z19jaWNfdmFsaWRhdGVfc25h cHNob3RfcGFnZXMgPSA0MDk2OworCiBzdGF0aWMgdm9pZCByZWZvcm1fYW5kX3Jld3JpdGVfdHVw bGUoSGVhcFR1cGxlIHR1cGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLCBSZXdyaXRlU3Rh dGUgcndzdGF0ZSk7CkBAIC0yMDMwLDI0ICsyMDMzLDM1IEBAIGhlYXBhbV9pbmRleF92YWxpZGF0 ZV9zY2FuX3JlYWRfc3RyZWFtX25leHQoCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHZv aWQKK3N0YXRpYyBUcmFuc2FjdGlvbklkCiBoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2NhbihSZWxh dGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQkgICBSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCQkJ CQkJICAgSW5kZXhJbmZvICppbmRleEluZm8sCi0JCQkJCQkgICBTbmFwc2hvdCBzbmFwc2hvdCwK IAkJCQkJCSAgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUsCiAJCQkJCQkgICBWYWxpZGF0ZUlu ZGV4U3RhdGUgKmF1eFN0YXRlKQogeworCVRyYW5zYWN0aW9uSWQgbGltaXRYbWluOworCiAJRGF0 dW0JCXZhbHVlc1tJTkRFWF9NQVhfS0VZU107CiAJYm9vbAkJaXNudWxsW0lOREVYX01BWF9LRVlT XTsKIAorCVNuYXBzaG90CQlzbmFwc2hvdDsKIAlUdXBsZVRhYmxlU2xvdCAgKnNsb3Q7CiAJRVN0 YXRlCQkJKmVzdGF0ZTsKIAlFeHByQ29udGV4dAkJKmVjb250ZXh0OwogCUJ1ZmZlckFjY2Vzc1N0 cmF0ZWd5IGJzdHJhdGVneSA9IEdldEFjY2Vzc1N0cmF0ZWd5KEJBU19CVUxLUkVBRCk7CiAKIAlp bnQ2NAkJCW51bV90b19jaGVjazsKKwlpbnQ2NAkJCXBhZ2VfcmVhZF9jb3VudGVyID0gMTsgLyog c2V0IHRvIDEgdG8gc2tpcCBzbmFwc2hvdCByZXNldCBhdCBzdGFydCAqLwogCVR1cGxlc3RvcmVz dGF0ZSAqdHVwbGVzX2Zvcl9jaGVjazsKKworCS8qCisJICogVW5kZXIgUkVQRUFUQUJMRSBSRUFE IG9yIFNFUklBTElaQUJMRSAocG9zc2libGUgdmlhCisJICogZGVmYXVsdF90cmFuc2FjdGlvbl9p c29sYXRpb24pLCBHZXRMYXRlc3RTbmFwc2hvdCgpIHJldHVybnMgdGhlCisJICogdHJhbnNhY3Rp b24tbGV2ZWwgc25hcHNob3QgYW5kIHhtaW4gc3RheXMgcGlubmVkLiAgUGVyaW9kaWMgc25hcHNo b3QKKwkgKiByZWZyZXNoIGlzIHBvaW50bGVzcyBpbiB0aGF0IGNhc2UsIHNvIHNraXAgaXQuCisJ ICovCisJYm9vbAkJcmVzZXRfc25hcHNob3QgPSBYYWN0SXNvTGV2ZWwgPD0gWEFDVF9SRUFEX0NP TU1JVFRFRDsKIAlWYWxpZGF0ZUluZGV4U2NhblN0YXRlIGNhbGxiYWNrX3ByaXZhdGVfZGF0YTsK IAogCUJ1ZmZlciBidWY7CkBAIC0yMDU3LDYgKzIwNzEsOCBAQCBoZWFwYW1faW5kZXhfdmFsaWRh dGVfc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJLyogVXNlIGEgcGVyY2VudGFnZSBvZiBt YWludGVuYW5jZV93b3JrX21lbSBmb3IgdHVwbGUgc3RvcmUuICovCiAJaW50CQlzdG9yZV93b3Jr X21lbV9wYXJ0ID0gbWFpbnRlbmFuY2Vfd29ya19tZW0gKiBkZWJ1Z19jaWNfdmFsaWRhdGVfc3Rv cmVfbWVtX3BjdCAvIDEwMDsKIAorCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNu YXBzaG90KCkpOworCiAJLyoKIAkgKiBFbmNvZGUgVElEcyBhcyBpbnQ4IHZhbHVlcyBmb3IgdGhl IHNvcnQsIHJhdGhlciB0aGFuIGRpcmVjdGx5IHNvcnRpbmcKIAkgKiBpdGVtIHBvaW50ZXJzLiAg VGhpcyBjYW4gYmUgc2lnbmlmaWNhbnRseSBmYXN0ZXIsIHByaW1hcmlseSBiZWNhdXNlIFRJRApA QCAtMjA2NSw2ICsyMDgxLDEyIEBAIGhlYXBhbV9pbmRleF92YWxpZGF0ZV9zY2FuKFJlbGF0aW9u IGhlYXBSZWxhdGlvbiwKIAkgKi8KIAl0dXBsZXNfZm9yX2NoZWNrID0gdHVwbGVzdG9yZV9iZWdp bl9kYXR1bShJTlQ4T0lELCBmYWxzZSwgZmFsc2UsIHN0b3JlX3dvcmtfbWVtX3BhcnQpOwogCisJ UG9wQWN0aXZlU25hcHNob3QoKTsKKwlJbnZhbGlkYXRlQ2F0YWxvZ1NuYXBzaG90KCk7CisKKwlB c3NlcnQoIXJlc2V0X3NuYXBzaG90IHx8ICFIYXZlUmVnaXN0ZXJlZE9yQWN0aXZlU25hcHNob3Qo KSk7CisJQXNzZXJ0KCFyZXNldF9zbmFwc2hvdCB8fCAhVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQ cm9jLT54bWluKSk7CisKIAkvKgogCSAqIHNhbml0eSBjaGVja3MKIAkgKi8KQEAgLTIwODAsNiAr MjEwMiwyOSBAQCBoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRp b24sCiAKIAlzdGF0ZS0+dHVwbGVzb3J0ID0gYXV4U3RhdGUtPnR1cGxlc29ydCA9IE5VTEw7CiAK KwkvKgorCSAqIE5vdyB0YWtlIHRoZSBmaXJzdCBzbmFwc2hvdCB0aGF0IHdpbGwgYmUgdXNlZCB0 byBmaWx0ZXIgY2FuZGlkYXRlCisJICogdHVwbGVzLiBXZSBhcmUgZ29pbmcgdG8gcmVwbGFjZSBp dCBieSBuZXdlciBzbmFwc2hvdCBldmVyeSBzbyBvZnRlbgorCSAqIHRvIHByb3BhZ2F0ZSBob3Jp em9uLgorCSAqCisJICogQmV3YXJlISAgVGhlcmUgbWlnaHQgc3RpbGwgYmUgc25hcHNob3RzIGlu IHVzZSB0aGF0IHRyZWF0IHNvbWUgdHJhbnNhY3Rpb24KKwkgKiBhcyBpbi1wcm9ncmVzcyB0aGF0 IG91ciB0ZW1wb3Jhcnkgc25hcHNob3QgdHJlYXRzIGFzIGNvbW1pdHRlZC4KKwkgKgorCSAqIElm IHN1Y2ggYSByZWNlbnRseS1jb21taXR0ZWQgdHJhbnNhY3Rpb24gZGVsZXRlZCB0dXBsZXMgaW4g dGhlIHRhYmxlLAorCSAqIHdlIHdpbGwgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgaW5kZXg7IHll dCB0aG9zZSB0cmFuc2FjdGlvbnMgd2hpY2gKKwkgKiBzZWUgdGhlIGRlbGV0aW5nIG9uZSBhcyBz dGlsbC1pbi1wcm9ncmVzcyB3aWxsIGV4cGVjdCBzdWNoIHR1cGxlcyB0bworCSAqIGJlIHRoZXJl IG9uY2Ugd2UgbWFyayB0aGUgaW5kZXggYXMgdmFsaWQuCisJICoKKwkgKiBXZSBzb2x2ZSB0aGlz IGJ5IHdhaXRpbmcgZm9yIGFsbCBlbmRhbmdlcmVkIHRyYW5zYWN0aW9ucyB0byBleGl0IGJlZm9y ZQorCSAqIHdlIG1hcmsgdGhlIGluZGV4IGFzIHZhbGlkLCBmb3IgdGhhdCByZWFzb24gbGltaXRY bWluIGlzIHN1cHBvcnRlZC4KKwkgKgorCSAqIFdlIGFsc28gc2V0IEFjdGl2ZVNuYXBzaG90IHRv IHRoaXMgc25hcCwgc2luY2UgZnVuY3Rpb25zIGluIGluZGV4ZXMgbWF5CisJICogbmVlZCBhIHNu YXBzaG90LgorCSAqLworCXNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRMYXRlc3RTbmFw c2hvdCgpKTsKKwlQdXNoQWN0aXZlU25hcHNob3Qoc25hcHNob3QpOworCWxpbWl0WG1pbiA9IHNu YXBzaG90LT54bWluOworCiAJZXN0YXRlID0gQ3JlYXRlRXhlY3V0b3JTdGF0ZSgpOwogCWVjb250 ZXh0ID0gR2V0UGVyVHVwbGVFeHByQ29udGV4dChlc3RhdGUpOwogCXNsb3QgPSBNYWtlU2luZ2xl VHVwbGVUYWJsZVNsb3QoUmVsYXRpb25HZXREZXNjcihoZWFwUmVsYXRpb24pLApAQCAtMjExMyw2 ICsyMTU4LDcgQEAgaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW4oUmVsYXRpb24gaGVhcFJlbGF0 aW9uLAogCiAJCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJCWJsb2NrX251 bWJlciA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CisJCXBhZ2VfcmVhZF9jb3VudGVyKys7 CiAKIAkJaSA9IDA7CiAJCXdoaWxlICgob2ZmID0gdHVwbGVzW2ldKSAhPSBJbnZhbGlkT2Zmc2V0 TnVtYmVyKQpAQCAtMjE4Myw2ICsyMjI5LDIxIEBAIGhlYXBhbV9pbmRleF92YWxpZGF0ZV9zY2Fu KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJfQogCiAJCVJlbGVhc2VCdWZmZXIoYnVmKTsKKwkJ aWYgKHJlc2V0X3NuYXBzaG90ICYmCisJCQlkZWJ1Z19jaWNfdmFsaWRhdGVfc25hcHNob3RfcGFn ZXMgPiAwICYmCisJCQlwYWdlX3JlYWRfY291bnRlciAlIGRlYnVnX2NpY192YWxpZGF0ZV9zbmFw c2hvdF9wYWdlcyA9PSAwKQorCQl7CisJCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCQkJVW5yZWdp c3RlclNuYXBzaG90KHNuYXBzaG90KTsKKwkJCS8qIHRvIG1ha2Ugc3VyZSB3ZSBwcm9wYWdhdGUg eG1pbiAqLworCQkJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOworCQkJQXNzZXJ0KCFUcmFu c2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4pKTsKKworCQkJc25hcHNob3QgPSBSZWdpc3Rl clNuYXBzaG90KEdldExhdGVzdFNuYXBzaG90KCkpOworCQkJUHVzaEFjdGl2ZVNuYXBzaG90KHNu YXBzaG90KTsKKwkJCS8qIEFkdmFuY2UgbGltaXRYbWluIHNvIHdlIHdhaXQgZm9yIGFsbCBzbmFw c2hvdHMgc2VlbiBzbyBmYXIgKi8KKwkJCWxpbWl0WG1pbiA9IFRyYW5zYWN0aW9uSWROZXdlcihs aW1pdFhtaW4sIHNuYXBzaG90LT54bWluKTsKKwkJfQogCX0KIAogCUV4ZWNEcm9wU2luZ2xlVHVw bGVUYWJsZVNsb3Qoc2xvdCk7CkBAIC0yMTkyLDExICsyMjUzLDIzIEBAIGhlYXBhbV9pbmRleF92 YWxpZGF0ZV9zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlyZWFkX3N0cmVhbV9lbmQocmVh ZF9zdHJlYW0pOwogCXR1cGxlc3RvcmVfZW5kKHR1cGxlc19mb3JfY2hlY2spOwogCisJLyoKKwkg KiBEcm9wIHRoZSBsYXRlc3Qgc25hcHNob3QuICBXZSBtdXN0IGRvIHRoaXMgYmVmb3JlIHdhaXRp bmcgb3V0IG90aGVyCisJICogc25hcHNob3QgaG9sZGVycywgZWxzZSB3ZSB3aWxsIGRlYWRsb2Nr IGFnYWluc3Qgb3RoZXIgcHJvY2Vzc2VzIGFsc28KKwkgKiBkb2luZyBDUkVBVEUgSU5ERVggQ09O Q1VSUkVOVExZLCB3aGljaCB3b3VsZCBzZWUgb3VyIHNuYXBzaG90IGFzIG9uZQorCSAqIHRoZXkg bXVzdCB3YWl0IGZvci4KKwkgKi8KKwlQb3BBY3RpdmVTbmFwc2hvdCgpOworCVVucmVnaXN0ZXJT bmFwc2hvdChzbmFwc2hvdCk7CisJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOworCUFzc2Vy dCghcmVzZXRfc25hcHNob3QgfHwgTXlQcm9jLT54bWluID09IEludmFsaWRUcmFuc2FjdGlvbklk KTsKIAlGcmVlQWNjZXNzU3RyYXRlZ3koYnN0cmF0ZWd5KTsKIAogCS8qIFRoZXNlIG1heSBoYXZl IGJlZW4gcG9pbnRpbmcgdG8gdGhlIG5vdy1nb25lIGVzdGF0ZSAqLwogCWluZGV4SW5mby0+aWlf RXhwcmVzc2lvbnNTdGF0ZSA9IE5JTDsKIAlpbmRleEluZm8tPmlpX1ByZWRpY2F0ZVN0YXRlID0g TlVMTDsKKworCXJldHVybiBsaW1pdFhtaW47CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lz dC9zcGd2YWN1dW0uYwppbmRleCBjNDYxZjhkYzAyZC4uZWYxOTJmYjk5YzIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYwpAQCAtMTkxLDE0ICsxOTEsMTYgQEAgdmFjdXVtTGVh ZlBhZ2Uoc3BnQnVsa0RlbGV0ZVN0YXRlICpiZHMsIFJlbGF0aW9uIGluZGV4LCBCdWZmZXIgYnVm ZmVyLAogCQkJICogQWRkIHRhcmdldCBUSUQgdG8gcGVuZGluZyBsaXN0IGlmIHRoZSByZWRpcmVj dGlvbiBjb3VsZCBoYXZlCiAJCQkgKiBoYXBwZW5lZCBzaW5jZSBWQUNVVU0gc3RhcnRlZC4gIChJ ZiB4aWQgaXMgaW52YWxpZCwgYXNzdW1lIGl0CiAJCQkgKiBtdXN0IGhhdmUgaGFwcGVuZWQgYmVm b3JlIFZBQ1VVTSBzdGFydGVkLCBzaW5jZSBSRUlOREVYCi0JCQkgKiBDT05DVVJSRU5UTFkgbG9j a3Mgb3V0IFZBQ1VVTS4pCisJCQkgKiBDT05DVVJSRU5UTFkgbG9ja3Mgb3V0IFZBQ1VVTSwgaWYg bXlYbWluIGlzIGludmFsaWQgaXQgaXMKKwkJCSAqIHZhbGlkYXRpb24gc2Nhbi4pCiAJCQkgKgog CQkJICogTm90ZTogd2UgY291bGQgbWFrZSBhIHRpZ2h0ZXIgdGVzdCBieSBzZWVpbmcgaWYgdGhl IHhpZCBpcwogCQkJICogInJ1bm5pbmciIGFjY29yZGluZyB0byB0aGUgYWN0aXZlIHNuYXBzaG90 OyBidXQgc25hcG1nci5jCiAJCQkgKiBkb2Vzbid0IGN1cnJlbnRseSBleHBvcnQgYSBzdWl0YWJs ZSBBUEksIGFuZCBpdCdzIG5vdCBlbnRpcmVseQogCQkJICogY2xlYXIgdGhhdCBhIHRpZ2h0ZXIg dGVzdCBpcyB3b3J0aCB0aGUgY3ljbGVzIGFueXdheS4KIAkJCSAqLwotCQkJaWYgKFRyYW5zYWN0 aW9uSWRGb2xsb3dzT3JFcXVhbHMoZHQtPnhpZCwgYmRzLT5teVhtaW4pKQorCQkJaWYgKCFUcmFu c2FjdGlvbklkSXNWYWxpZChiZHMtPm15WG1pbikgfHwKKwkJCQkJVHJhbnNhY3Rpb25JZEZvbGxv d3NPckVxdWFscyhkdC0+eGlkLCBiZHMtPm15WG1pbikpCiAJCQkJc3BnQWRkUGVuZGluZ1RJRChi ZHMsICZkdC0+cG9pbnRlcik7CiAJCX0KIAkJZWxzZQpAQCAtODA4LDcgKzgxMCw2IEBAIHNwZ3Zh Y3V1bXNjYW4oc3BnQnVsa0RlbGV0ZVN0YXRlICpiZHMpCiAJLyogRmluaXNoIHNldHRpbmcgdXAg c3BnQnVsa0RlbGV0ZVN0YXRlICovCiAJaW5pdFNwR2lzdFN0YXRlKCZiZHMtPnNwZ3N0YXRlLCBp bmRleCk7CiAJYmRzLT5wZW5kaW5nTGlzdCA9IE5VTEw7Ci0JYmRzLT5teVhtaW4gPSBHZXRBY3Rp dmVTbmFwc2hvdCgpLT54bWluOwogCWJkcy0+bGFzdEZpbGxlZEJsb2NrID0gU1BHSVNUX0xBU1Rf RklYRURfQkxLTk87CiAKIAkvKgpAQCAtOTU5LDYgKzk2MCwxMCBAQCBzcGdidWxrZGVsZXRlKElu ZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKIAliZHMu c3RhdHMgPSBzdGF0czsKIAliZHMuY2FsbGJhY2sgPSBjYWxsYmFjazsKIAliZHMuY2FsbGJhY2tf c3RhdGUgPSBjYWxsYmFja19zdGF0ZTsKKwlpZiAoaW5mby0+dmFsaWRhdGVfaW5kZXgpCisJCWJk cy5teVhtaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwllbHNlCisJCWJkcy5teVhtaW4gPSBH ZXRBY3RpdmVTbmFwc2hvdCgpLT54bWluOwogCiAJc3BndmFjdXVtc2NhbigmYmRzKTsKIApAQCAt OTk5LDYgKzEwMDQsNyBAQCBzcGd2YWN1dW1jbGVhbnVwKEluZGV4VmFjdXVtSW5mbyAqaW5mbywg SW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cykKIAkJYmRzLnN0YXRzID0gc3RhdHM7CiAJCWJk cy5jYWxsYmFjayA9IGR1bW15X2NhbGxiYWNrOwogCQliZHMuY2FsbGJhY2tfc3RhdGUgPSBOVUxM OworCQliZHMubXlYbWluID0gR2V0QWN0aXZlU25hcHNob3QoKS0+eG1pbjsKIAogCQlzcGd2YWN1 dW1zY2FuKCZiZHMpOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXgu YyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwppbmRleCBkNzkwNDdmYjI4NC4uOWY5NmM5 MDIxNTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYworKysgYi9zcmMv YmFja2VuZC9jYXRhbG9nL2luZGV4LmMKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJzdG9y YWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvcHJlZGljYXRlLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9zbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGls cy9mbWdyb2lkcy5oIgpAQCAtMzUxOCw4ICszNTE5LDkgQEAgSW5kZXhDaGVja0V4Y2x1c2lvbihS ZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAgKiBpbnNlcnQgdGhlaXIgbmV3IHR1cGxlcyBpbnRvIGl0 LiBBdCB0aGUgc2FtZSBtb21lbnQgd2UgY2xlYXIgImluZGlzcmVhZHkiIGZvcgogICogYXV4aWxp YXJ5IGluZGV4LCBzaW5jZSBpdCBpcyBubyBtb3JlIHJlcXVpcmVkIHRvIGJlIHVwZGF0ZWQuCiAg KgotICogV2UgdGhlbiB0YWtlIGEgbmV3IHJlZmVyZW5jZSBzbmFwc2hvdCwgYW55IHR1cGxlcyB0 aGF0IGFyZSB2YWxpZCBhY2NvcmRpbmcKLSAqIHRvIHRoaXMgc25hcCwgYnV0IGFyZSBub3QgaW4g dGhlIGluZGV4LCBtdXN0IGJlIGFkZGVkIHRvIHRoZSBpbmRleC4KKyAqIFdlIHRoZW4gdGFrZSBh IG5ldyBzbmFwc2hvdCwgYW55IHR1cGxlcyB0aGF0IGFyZSB2YWxpZCBhY2NvcmRpbmcKKyAqIHRv IHRoaXMgc25hcCwgYnV0IGFyZSBub3QgaW4gdGhlIGluZGV4LCBtdXN0IGJlIGFkZGVkIHRvIHRo ZSBpbmRleC4gSW4KKyAqIG9yZGVyIHRvIHByb3BhZ2F0ZSB4bWluIHdlIHJlc2V0IHRoYXQgc25h cHNob3QgZXZlcnkgc28gb2Z0ZW4uCiAgKiAoQW55IHR1cGxlcyBjb21taXR0ZWQgbGl2ZSBhZnRl ciB0aGUgc25hcCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlCiAgKiBpbmRleCBieSB0aGVpciBv cmlnaW5hdGluZyB0cmFuc2FjdGlvbi4gIEFueSB0dXBsZXMgY29tbWl0dGVkIGRlYWQgYmVmb3Jl CiAgKiB0aGUgc25hcCBuZWVkIG5vdCBiZSBpbmRleGVkLCBiZWNhdXNlIHdlIHdpbGwgd2FpdCBv dXQgYWxsIHRyYW5zYWN0aW9ucwpAQCAtMzUzMiw3ICszNTM0LDcgQEAgSW5kZXhDaGVja0V4Y2x1 c2lvbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAgKiBUSURzIG9mIGJvdGggYXV4aWxpYXJ5IGFu ZCB0YXJnZXQgaW5kZXhlcywgYW5kIGRvaW5nIGEgIm1lcmdlIGpvaW4iIGFnYWluc3QKICAqIHRo ZSBUSUQgbGlzdHMgdG8gc2VlIHdoaWNoIHR1cGxlcyBmcm9tIGF1eGlsaWFyeSBpbmRleCBhcmUg bWlzc2luZyBmcm9tIHRoZQogICogdGFyZ2V0IGluZGV4LiAgVGh1cyB3ZSB3aWxsIGVuc3VyZSB0 aGF0IGFsbCB0dXBsZXMgdmFsaWQgYWNjb3JkaW5nIHRvIHRoZQotICogcmVmZXJlbmNlIHNuYXBz aG90IGFyZSBpbiB0aGUgaW5kZXguIE5vdGljZSB3ZSBuZWVkIHRvIGRvIGJ1bGtkZWxldGUgaW4g dGhlCisgKiBsYXRlc3Qgc25hcHNob3QgYXJlIGluIHRoZSBpbmRleC4gTm90aWNlIHdlIG5lZWQg dG8gZG8gYnVsa2RlbGV0ZSBpbiB0aGUKICAqIHBhcnRpY3VsYXIgb3JkZXI6IGF1eGlsaWFyeSBm aXJzdCwgdGFyZ2V0IGxhc3QuCiAgKgogICogQnVpbGRpbmcgYSB1bmlxdWUgaW5kZXggdGhpcyB3 YXkgaXMgdHJpY2t5OiB3ZSBtaWdodCB0cnkgdG8gaW5zZXJ0IGEKQEAgLTM1NDUsMjEgKzM1NDcs MjQgQEAgSW5kZXhDaGVja0V4Y2x1c2lvbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAgKiBiZWZv cmUgaXQgZGVjbGFyZXMgYSB1bmlxdWVuZXNzIGVycm9yLgogICoKICAqIEFmdGVyIGNvbXBsZXRp bmcgdmFsaWRhdGVfaW5kZXgoKSwgd2Ugd2FpdCB1bnRpbCBhbGwgdHJhbnNhY3Rpb25zIHRoYXQK LSAqIHdlcmUgYWxpdmUgYXQgdGhlIHRpbWUgb2YgdGhlIHJlZmVyZW5jZSBzbmFwc2hvdCBhcmUg Z29uZTsgdGhpcyBpcwotICogbmVjZXNzYXJ5IHRvIGJlIHN1cmUgdGhlcmUgYXJlIG5vbmUgbGVm dCB3aXRoIGEgdHJhbnNhY3Rpb24gc25hcHNob3QKLSAqIG9sZGVyIHRoYW4gdGhlIHJlZmVyZW5j ZSAoYW5kIGhlbmNlIHBvc3NpYmx5IGFibGUgdG8gc2VlIHR1cGxlcyB3ZSBkaWQKLSAqIG5vdCBp bmRleCkuICBUaGVuIHdlIG1hcmsgdGhlIGluZGV4ICJpbmRpc3ZhbGlkIiBhbmQgY29tbWl0LiAg U3Vic2VxdWVudAotICogdHJhbnNhY3Rpb25zIHdpbGwgYmUgYWJsZSB0byB1c2UgaXQgZm9yIHF1 ZXJpZXMuCisgKiB3ZXJlIGFsaXZlIGF0IHRoZSB0aW1lIG9mIHRoZSBsYXRlc3Qgc25hcHNob3Qg dXNlZCBkdXJpbmcgdmFsaWRhdGlvbiBhcmUKKyAqIGdvbmU7IHRoaXMgaXMgbmVjZXNzYXJ5IHRv IGJlIHN1cmUgdGhlcmUgYXJlIG5vbmUgbGVmdCB3aXRoIGEgdHJhbnNhY3Rpb24KKyAqIHNuYXBz aG90IG9sZGVyIHRoYW4gdGhhdCAoYW5kIGhlbmNlIHBvc3NpYmx5IGFibGUgdG8gc2VlIHR1cGxl cyB3ZSBkaWQKKyAqIG5vdCBpbmRleCkuICBUaGUgc25hcHNob3QgaXMgcGVyaW9kaWNhbGx5IHJl ZnJlc2hlZCBkdXJpbmcgdGhlIGhlYXAgc2NhbgorICogdG8gcHJvcGFnYXRlIHRoZSB4bWluIGhv cml6b24sIHNvIGxpbWl0WG1pbiB0cmFja3MgdGhlIG1vc3QgcmVjZW50IG9uZS4KKyAqIFRoZW4g d2UgbWFyayB0aGUgaW5kZXggImluZGlzdmFsaWQiIGFuZCBjb21taXQuICBTdWJzZXF1ZW50IHRy YW5zYWN0aW9ucworICogd2lsbCBiZSBhYmxlIHRvIHVzZSBpdCBmb3IgcXVlcmllcy4KICAqCiAg KiBBbHNvLCBzb21lIGFjdGlvbnMgdG8gY29uY3VycmVudCBkcm9wIHRoZSBhdXhpbGlhcnkgaW5k ZXggYXJlIHBlcmZvcm1lZC4KICAqLwotdm9pZAotdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwg T2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCkKK1RyYW5zYWN0 aW9uSWQKK3ZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5k ZXhJZCkKIHsKIAlSZWxhdGlvbgloZWFwUmVsYXRpb24sCiAJCQkJaW5kZXhSZWxhdGlvbiwKIAkJ CQlhdXhJbmRleFJlbGF0aW9uOwogCUluZGV4SW5mbyAgKmluZGV4SW5mbzsKKwlUcmFuc2FjdGlv bklkIGxpbWl0WG1pbjsKIAlJbmRleFZhY3V1bUluZm8gaXZpbmZvLCBhdXhpdmluZm87CiAJVmFs aWRhdGVJbmRleFN0YXRlIHN0YXRlLCBhdXhTdGF0ZTsKIAlPaWQJCQlzYXZlX3VzZXJpZDsKQEAg LTM1NzIsNiArMzU3NywxNiBAQCB2YWxpZGF0ZV9pbmRleChPaWQgaGVhcElkLCBPaWQgaW5kZXhJ ZCwgT2lkIGF1eEluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQogCWludAkJCW1haW5fd29ya19t ZW1fcGFydCA9IChpbnQpKChpbnQ2NCkgbWFpbnRlbmFuY2Vfd29ya19tZW0gKiA4IC8gMTApOwog CWludAkJCWF1eF93b3JrX21lbV9wYXJ0ID0gbWFpbnRlbmFuY2Vfd29ya19tZW0gLyAxMDsKIAor CS8qCisJICogVW5kZXIgUkVQRUFUQUJMRSBSRUFEIG9yIFNFUklBTElaQUJMRSAocG9zc2libGUg dmlhCisJICogZGVmYXVsdF90cmFuc2FjdGlvbl9pc29sYXRpb24pLCBHZXRMYXRlc3RTbmFwc2hv dCgpIHJldHVybnMgdGhlCisJICogdHJhbnNhY3Rpb24tbGV2ZWwgc25hcHNob3QgYW5kIHhtaW4g c3RheXMgcGlubmVkLiAgUGVyaW9kaWMgc25hcHNob3QKKwkgKiByZWZyZXNoIGlzIHBvaW50bGVz cyBpbiB0aGF0IGNhc2UsIHNvIHNraXAgaXQuCisJICovCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVD S0lORworCWJvb2wJCXJlc2V0X3NuYXBzaG90ID0gWGFjdElzb0xldmVsIDw9IFhBQ1RfUkVBRF9D T01NSVRURUQ7CisjZW5kaWYKKwogCXsKIAkJY29uc3QgaW50CXByb2dyZXNzX2luZGV4W10gPSB7 CiAJCQlQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0UsCkBAIC0zNjA5LDggKzM2MjQsMTIgQEAgdmFs aWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFw c2hvdCBzbmFwc2hvdCkKIAkgKiBGZXRjaCBpbmZvIG5lZWRlZCBmb3IgaW5kZXhfaW5zZXJ0LiAg KFlvdSBtaWdodCB0aGluayB0aGlzIHNob3VsZCBiZQogCSAqIHBhc3NlZCBpbiBmcm9tIERlZmlu ZUluZGV4LCBidXQgaXRzIGNvcHkgaXMgbG9uZyBnb25lIGR1ZSB0byBoYXZpbmcKIAkgKiBiZWVu IGJ1aWx0IGluIGEgcHJldmlvdXMgdHJhbnNhY3Rpb24uKQorCSAqCisJICogV2UgbWlnaHQgbmVl ZCBzbmFwc2hvdCBmb3IgaW5kZXggZXhwcmVzc2lvbnMgb3IgcHJlZGljYXRlcy4KIAkgKi8KKwlQ dXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKIAlpbmRleEluZm8g PSBCdWlsZEluZGV4SW5mbyhpbmRleFJlbGF0aW9uKTsKKwlQb3BBY3RpdmVTbmFwc2hvdCgpOwog CiAJLyogbWFyayBidWlsZCBpcyBjb25jdXJyZW50IGp1c3QgZm9yIGNvbnNpc3RlbmN5ICovCiAJ aW5kZXhJbmZvLT5paV9Db25jdXJyZW50ID0gdHJ1ZTsKQEAgLTM2NDYsNiArMzY2NSw5IEBAIHZh bGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25h cHNob3Qgc25hcHNob3QpCiAJCQkJCQkJCQkJICAgTlVMTCwgVFVQTEVTT1JUX05PTkUpOwogCWF1 eFN0YXRlLmh0dXBzID0gYXV4U3RhdGUuaXR1cHMgPSBhdXhTdGF0ZS50dXBzX2luc2VydGVkID0g MDsKIAorCS8qIHR1cGxlc29ydF9iZWdpbl9kYXR1bSBtYXkgcmVxdWlyZSBjYXRhbG9nIHNuYXBz aG90ICovCisJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOworCiAJKHZvaWQpIGluZGV4X2J1 bGtfZGVsZXRlKCZhdXhpdmluZm8sIE5VTEwsCiAJCQkJCQkJIHZhbGlkYXRlX2luZGV4X2NhbGxi YWNrLCAmYXV4U3RhdGUpOwogCS8qIElmIGF1eCBpbmRleCBpcyBlbXB0eSwgbWVyZ2UgbWF5IGJl IHNraXBwZWQgKi8KQEAgLTM2NjUsNyArMzY4NywxMyBAQCB2YWxpZGF0ZV9pbmRleChPaWQgaGVh cElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1eEluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQogCQlp bmRleF9jbG9zZShpbmRleFJlbGF0aW9uLCBOb0xvY2spOwogCQl0YWJsZV9jbG9zZShoZWFwUmVs YXRpb24sIE5vTG9jayk7CiAKLQkJcmV0dXJuOworCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJh bnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJbGltaXRYbWluID0gR2V0QWN0aXZlU25hcHNob3QoKS0+ eG1pbjsKKwkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwkJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hv dCgpOworCisJCUFzc2VydCghcmVzZXRfc25hcHNob3QgfHwgIVRyYW5zYWN0aW9uSWRJc1ZhbGlk KE15UHJvYy0+eG1pbikpOworCQlyZXR1cm4gbGltaXRYbWluOwogCX0KIAogCXN0YXRlLnR1cGxl c29ydCA9IHR1cGxlc29ydF9iZWdpbl9kYXR1bShJTlQ4T0lELCBJbnQ4TGVzc09wZXJhdG9yLApA QCAtMzY3NCw2ICszNzAyLDkgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4 SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCkKIAkJCQkJCQkJCQkJTlVMTCwg VFVQTEVTT1JUX05PTkUpOwogCXN0YXRlLmh0dXBzID0gc3RhdGUuaXR1cHMgPSBzdGF0ZS50dXBz X2luc2VydGVkID0gMDsKIAorCS8qIHR1cGxlc29ydF9iZWdpbl9kYXR1bSBtYXkgcmVxdWlyZSBj YXRhbG9nIHNuYXBzaG90ICovCisJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOworCiAJLyog YW1idWxrZGVsZXRlIHVwZGF0ZXMgcHJvZ3Jlc3MgbWV0cmljcyAqLwogCSh2b2lkKSBpbmRleF9i dWxrX2RlbGV0ZSgmaXZpbmZvLCBOVUxMLAogCQkJCQkJCSB2YWxpZGF0ZV9pbmRleF9jYWxsYmFj aywgJnN0YXRlKTsKQEAgLTM2OTMsMTkgKzM3MjQsMjQgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhl YXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCkKIAkJ cGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9tdWx0aV9wYXJhbSgzLCBwcm9ncmVzc19pbmRleCwgcHJv Z3Jlc3NfdmFscyk7CiAJfQogCXR1cGxlc29ydF9wZXJmb3Jtc29ydChzdGF0ZS50dXBsZXNvcnQp OworCS8qIHR1cGxlc29ydF9wZXJmb3Jtc29ydCBtYXkgcmVxdWlyZSBjYXRhbG9nIHNuYXBzaG90 ICovCisJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOworCiAJdHVwbGVzb3J0X3BlcmZvcm1z b3J0KGF1eFN0YXRlLnR1cGxlc29ydCk7CisJLyogdHVwbGVzb3J0X3BlcmZvcm1zb3J0IG1heSBy ZXF1aXJlIGNhdGFsb2cgc25hcHNob3QgKi8KKwlJbnZhbGlkYXRlQ2F0YWxvZ1NuYXBzaG90KCk7 CisJQXNzZXJ0KCFyZXNldF9zbmFwc2hvdCB8fCAhVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9j LT54bWluKSk7CiAKIAkvKgogCSAqIE5vdyBtZXJnZSBib3RoIGluZGV4ZXMKIAkgKi8KIAlwZ3N0 YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKIAkJCQkJ CQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9JRFhNRVJHRSk7Ci0JdGFibGVf aW5kZXhfdmFsaWRhdGVfc2NhbihoZWFwUmVsYXRpb24sCi0JCQkJCQkJICBpbmRleFJlbGF0aW9u LAotCQkJCQkJCSAgaW5kZXhJbmZvLAotCQkJCQkJCSAgc25hcHNob3QsCi0JCQkJCQkJICAmc3Rh dGUsCi0JCQkJCQkJICAmYXV4U3RhdGUpOworCWxpbWl0WG1pbiA9IHRhYmxlX2luZGV4X3ZhbGlk YXRlX3NjYW4oaGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJCSAgaW5kZXhSZWxhdGlvbiwKKwkJCQkJ CQkJCQkgIGluZGV4SW5mbywKKwkJCQkJCQkJCQkgICZzdGF0ZSwKKwkJCQkJCQkJCQkgICZhdXhT dGF0ZSk7CiAKIAkvKiBUdXBsZSBzb3J0IGNsb3NlZCBieSB0YWJsZV9pbmRleF92YWxpZGF0ZV9z Y2FuICovCiAJQXNzZXJ0KHN0YXRlLnR1cGxlc29ydCA9PSBOVUxMICYmIGF1eFN0YXRlLnR1cGxl c29ydCA9PSBOVUxMKTsKQEAgLTM3MjgsNiArMzc2NCw5IEBAIHZhbGlkYXRlX2luZGV4KE9pZCBo ZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCiAJ aW5kZXhfY2xvc2UoYXV4SW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKIAlpbmRleF9jbG9zZShpbmRl eFJlbGF0aW9uLCBOb0xvY2spOwogCXRhYmxlX2Nsb3NlKGhlYXBSZWxhdGlvbiwgTm9Mb2NrKTsK KworCUFzc2VydCghcmVzZXRfc25hcHNob3QgfHwgIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKE15UHJv Yy0+eG1pbikpOworCXJldHVybiBsaW1pdFhtaW47CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4 Y21kcy5jCmluZGV4IDA3MDllNGY5ODZiLi5hMmViNDM0ZTIwYyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5k ZXhjbWRzLmMKQEAgLTU5Niw3ICs1OTYsNiBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3Rh dGUsCiAJTG9ja1JlbElkCWhlYXByZWxpZDsKIAlMT0NLVEFHCQloZWFwbG9ja3RhZzsKIAlMT0NL TU9ERQlsb2NrbW9kZTsKLQlTbmFwc2hvdAlzbmFwc2hvdDsKIAlPaWQJCQlyb290X3NhdmVfdXNl cmlkOwogCWludAkJCXJvb3Rfc2F2ZV9zZWNfY29udGV4dDsKIAlpbnQJCQlyb290X3NhdmVfbmVz dGxldmVsOwpAQCAtMTgxNiwzMiArMTgxNSwxMSBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpw c3RhdGUsCiAJLyogVGVsbCBjb25jdXJyZW50IGluZGV4IGJ1aWxkcyB0byBpZ25vcmUgdXMsIGlm IGluZGV4IHF1YWxpZmllcyAqLwogCWlmIChzYWZlX2luZGV4KQogCQlzZXRfaW5kZXhzYWZlX3By b2NmbGFncygpOwotCi0JLyoKLQkgKiBOb3cgdGFrZSB0aGUgInJlZmVyZW5jZSBzbmFwc2hvdCIg dGhhdCB3aWxsIGJlIHVzZWQgYnkgdmFsaWRhdGVfaW5kZXgoKQotCSAqIHRvIGZpbHRlciBjYW5k aWRhdGUgdHVwbGVzLiAgQmV3YXJlISAgVGhlcmUgbWlnaHQgc3RpbGwgYmUgc25hcHNob3RzIGlu Ci0JICogdXNlIHRoYXQgdHJlYXQgc29tZSB0cmFuc2FjdGlvbiBhcyBpbi1wcm9ncmVzcyB0aGF0 IG91ciByZWZlcmVuY2UKLQkgKiBzbmFwc2hvdCB0cmVhdHMgYXMgY29tbWl0dGVkLiAgSWYgc3Vj aCBhIHJlY2VudGx5LWNvbW1pdHRlZCB0cmFuc2FjdGlvbgotCSAqIGRlbGV0ZWQgdHVwbGVzIGlu IHRoZSB0YWJsZSwgd2Ugd2lsbCBub3QgaW5jbHVkZSB0aGVtIGluIHRoZSBpbmRleDsgeWV0Ci0J ICogdGhvc2UgdHJhbnNhY3Rpb25zIHdoaWNoIHNlZSB0aGUgZGVsZXRpbmcgb25lIGFzIHN0aWxs LWluLXByb2dyZXNzIHdpbGwKLQkgKiBleHBlY3Qgc3VjaCB0dXBsZXMgdG8gYmUgdGhlcmUgb25j ZSB3ZSBtYXJrIHRoZSBpbmRleCBhcyB2YWxpZC4KLQkgKgotCSAqIFdlIHNvbHZlIHRoaXMgYnkg d2FpdGluZyBmb3IgYWxsIGVuZGFuZ2VyZWQgdHJhbnNhY3Rpb25zIHRvIGV4aXQgYmVmb3JlCi0J ICogd2UgbWFyayB0aGUgaW5kZXggYXMgdmFsaWQuCi0JICoKLQkgKiBXZSBhbHNvIHNldCBBY3Rp dmVTbmFwc2hvdCB0byB0aGlzIHNuYXAsIHNpbmNlIGZ1bmN0aW9ucyBpbiBpbmRleGVzIG1heQot CSAqIG5lZWQgYSBzbmFwc2hvdC4KLQkgKi8KLQlzbmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNob3Qo R2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKLQlQdXNoQWN0aXZlU25hcHNob3Qoc25hcHNob3Qp OwogCS8qCiAJICogTWVyZ2UgY29udGVudCBvZiBhdXhpbGlhcnkgYW5kIHRhcmdldCBpbmRleGVz IC0gaW5zZXJ0IGFueSBtaXNzaW5nIGluZGV4IGVudHJpZXMuCiAJICovCi0JdmFsaWRhdGVfaW5k ZXgodGFibGVJZCwgaW5kZXhSZWxhdGlvbklkLCBhdXhJbmRleFJlbGF0aW9uSWQsIHNuYXBzaG90 KTsKLQlsaW1pdFhtaW4gPSBzbmFwc2hvdC0+eG1pbjsKKwlsaW1pdFhtaW4gPSB2YWxpZGF0ZV9p bmRleCh0YWJsZUlkLCBpbmRleFJlbGF0aW9uSWQsIGF1eEluZGV4UmVsYXRpb25JZCk7CiAKLQlQ b3BBY3RpdmVTbmFwc2hvdCgpOwotCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CiAJLyoK IAkgKiBUaGUgc25hcHNob3Qgc3Vic3lzdGVtIGNvdWxkIHN0aWxsIGNvbnRhaW4gcmVnaXN0ZXJl ZCBzbmFwc2hvdHMgdGhhdAogCSAqIGFyZSBob2xkaW5nIGJhY2sgb3VyIHByb2Nlc3MncyBhZHZl cnRpc2VkIHhtaW47IGluIHBhcnRpY3VsYXIsIGlmCkBAIC0xODYzLDggKzE4NDEsOCBAQCBEZWZp bmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJLyoKIAkgKiBUaGUgaW5kZXggaXMgbm93IHZh bGlkIGluIHRoZSBzZW5zZSB0aGF0IGl0IGNvbnRhaW5zIGFsbCBjdXJyZW50bHkKIAkgKiBpbnRl cmVzdGluZyB0dXBsZXMuICBCdXQgc2luY2UgaXQgbWlnaHQgbm90IGNvbnRhaW4gdHVwbGVzIGRl bGV0ZWQganVzdAotCSAqIGJlZm9yZSB0aGUgcmVmZXJlbmNlIHNuYXAgd2FzIHRha2VuLCB3ZSBo YXZlIHRvIHdhaXQgb3V0IGFueQotCSAqIHRyYW5zYWN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgb2xk ZXIgc25hcHNob3RzLgorCSAqIGJlZm9yZSB0aGUgbGFzdCBzbmFwc2hvdCBkdXJpbmcgdmFsaWRh dGluZyB3YXMgdGFrZW4sIHdlIGhhdmUgdG8gd2FpdAorCSAqIG91dCBhbnkgdHJhbnNhY3Rpb25z IHRoYXQgbWlnaHQgaGF2ZSBvbGRlciBzbmFwc2hvdHMuCiAJICovCiAJSU5KRUNUSU9OX1BPSU5U KCJkZWZpbmUtaW5kZXgtYmVmb3JlLXNldC12YWxpZCIsIE5VTEwpOwogCXBnc3RhdF9wcm9ncmVz c191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLApAQCAtNDQyOSw3ICs0NDA3 LDYgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10 LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAl7CiAJCVJlaW5kZXhJbmRleEluZm8gKm5l d2lkeCA9IGxmaXJzdChsYyk7CiAJCVRyYW5zYWN0aW9uSWQgbGltaXRYbWluOwotCQlTbmFwc2hv dAlzbmFwc2hvdDsKIAogCQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCkBAIC00NDQ0LDEz ICs0NDIxLDYgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10 ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJaWYgKG5ld2lkeC0+c2FmZSkK IAkJCXNldF9pbmRleHNhZmVfcHJvY2ZsYWdzKCk7CiAKLQkJLyoKLQkJICogVGFrZSB0aGUgInJl ZmVyZW5jZSBzbmFwc2hvdCIgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdmFsaWRhdGVfaW5kZXgoKQot CQkgKiB0byBmaWx0ZXIgY2FuZGlkYXRlIHR1cGxlcy4KLQkJICovCi0JCXNuYXBzaG90ID0gUmVn aXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwotCQlQdXNoQWN0aXZlU25h cHNob3Qoc25hcHNob3QpOwotCiAJCS8qCiAJCSAqIFVwZGF0ZSBwcm9ncmVzcyBmb3IgdGhlIGlu ZGV4IHRvIGJ1aWxkLCB3aXRoIHRoZSBjb3JyZWN0IHBhcmVudAogCQkgKiB0YWJsZSBpbnZvbHZl ZC4KQEAgLTQ0NjIsMTYgKzQ0MzIsOCBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29u c3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQlwcm9n cmVzc192YWxzWzNdID0gbmV3aWR4LT5hbUlkOwogCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX211 bHRpX3BhcmFtKDQsIHByb2dyZXNzX2luZGV4LCBwcm9ncmVzc192YWxzKTsKIAotCQl2YWxpZGF0 ZV9pbmRleChuZXdpZHgtPnRhYmxlSWQsIG5ld2lkeC0+aW5kZXhJZCwgbmV3aWR4LT5hdXhJbmRl eElkLCBzbmFwc2hvdCk7Ci0KLQkJLyoKLQkJICogV2UgY2FuIG5vdyBkbyBhd2F5IHdpdGggb3Vy IGFjdGl2ZSBzbmFwc2hvdCwgd2Ugc3RpbGwgbmVlZCB0byBzYXZlCi0JCSAqIHRoZSB4bWluIGxp bWl0IHRvIHdhaXQgZm9yIG9sZGVyIHNuYXBzaG90cy4KLQkJICovCi0JCWxpbWl0WG1pbiA9IHNu YXBzaG90LT54bWluOwotCi0JCVBvcEFjdGl2ZVNuYXBzaG90KCk7Ci0JCVVucmVnaXN0ZXJTbmFw c2hvdChzbmFwc2hvdCk7CisJCWxpbWl0WG1pbiA9IHZhbGlkYXRlX2luZGV4KG5ld2lkeC0+dGFi bGVJZCwgbmV3aWR4LT5pbmRleElkLCBuZXdpZHgtPmF1eEluZGV4SWQpOworCQlBc3NlcnQoIVRy YW5zYWN0aW9uSWRJc1ZhbGlkKE15UHJvYy0+eG1pbikpOwogCiAJCS8qCiAJCSAqIFRvIGVuc3Vy ZSBubyBkZWFkbG9ja3MsIHdlIG11c3QgY29tbWl0IGFuZCBzdGFydCB5ZXQgYW5vdGhlcgpAQCAt NDQ4NCw3ICs0NDQ2LDcgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5k ZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJLyoKIAkJICogVGhl IGluZGV4IGlzIG5vdyB2YWxpZCBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBjb250YWlucyBhbGwgY3Vy cmVudGx5CiAJCSAqIGludGVyZXN0aW5nIHR1cGxlcy4gIEJ1dCBzaW5jZSBpdCBtaWdodCBub3Qg Y29udGFpbiB0dXBsZXMgZGVsZXRlZAotCQkgKiBqdXN0IGJlZm9yZSB0aGUgcmVmZXJlbmNlIHNu YXAgd2FzIHRha2VuLCB3ZSBoYXZlIHRvIHdhaXQgb3V0IGFueQorCQkgKiBqdXN0IGJlZm9yZSB0 aGUgbGF0ZXN0IHNuYXAgd2FzIHRha2VuLCB3ZSBoYXZlIHRvIHdhaXQgb3V0IGFueQogCQkgKiB0 cmFuc2FjdGlvbnMgdGhhdCBtaWdodCBoYXZlIG9sZGVyIHNuYXBzaG90cy4KIAkJICoKIAkJICog QmVjYXVzZSB3ZSBkb24ndCB0YWtlIGEgc25hcHNob3Qgb3IgWGlkIGluIHRoaXMgdHJhbnNhY3Rp b24sCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRh dCBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4IGE4MGVl NGZiMDNmLi5iZTI5Y2YzYmE1YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1l dGVycy5kYXQKQEAgLTYzMSw2ICs2MzEsMTUgQEAKICAgYm9vdF92YWwgPT4gJ0RFRkFVTFRfQVNT RVJUX0VOQUJMRUQnLAogfSwKIAoreyBuYW1lID0+ICdkZWJ1Z19jaWNfdmFsaWRhdGVfc25hcHNo b3RfcGFnZXMnLCB0eXBlID0+ICdpbnQnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3Vw ID0+ICdERVZFTE9QRVJfT1BUSU9OUycsCisgIHNob3J0X2Rlc2MgPT4gJ1JlZnJlc2ggc25hcHNo b3QgZXZlcnkgTiBwYWdlcyBkdXJpbmcgQ0lDIHZhbGlkYXRpb24gKDAgdG8gZGlzYWJsZSkuJywK KyAgZmxhZ3MgPT4gJ0dVQ19OT1RfSU5fU0FNUExFJywKKyAgdmFyaWFibGUgPT4gJ2RlYnVnX2Np Y192YWxpZGF0ZV9zbmFwc2hvdF9wYWdlcycsCisgIGJvb3RfdmFsID0+ICc0MDk2JywKKyAgbWlu ID0+ICcwJywKKyAgbWF4ID0+ICcxMDAwMDAwJywKK30sCisKIHsgbmFtZSA9PiAnZGVidWdfY2lj X3ZhbGlkYXRlX3N0b3JlX21lbV9wY3QnLCB0eXBlID0+ICdpbnQnLCBjb250ZXh0ID0+ICdQR0Nf VVNFUlNFVCcsIGdyb3VwID0+ICdERVZFTE9QRVJfT1BUSU9OUycsCiAgIHNob3J0X2Rlc2MgPT4g J1BlcmNlbnRhZ2Ugb2YgbWFpbnRlbmFuY2Vfd29ya19tZW0gdXNlZCBmb3IgQ0lDIHZhbGlkYXRp b24gdHVwbGVzdG9yZS4nLAogICBmbGFncyA9PiAnR1VDX05PVF9JTl9TQU1QTEUnLApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90 YWJsZWFtLmgKaW5kZXggMzcwNWUyMWI1ODguLjQ5Y2VhN2NlZWY3IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFt LmgKQEAgLTcyNywxMiArNzI3LDExIEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJ CQkJCQkJCQkJICAgVGFibGVTY2FuRGVzYyBzY2FuKTsKIAogCS8qIHNlZSB0YWJsZV9pbmRleF92 YWxpZGF0ZV9zY2FuIGZvciByZWZlcmVuY2UgYWJvdXQgcGFyYW1ldGVycyAqLwotCXZvaWQJCSgq aW5kZXhfdmFsaWRhdGVfc2NhbikgKFJlbGF0aW9uIHRhYmxlX3JlbCwKLQkJCQkJCQkJCQlSZWxh dGlvbiBpbmRleF9yZWwsCi0JCQkJCQkJCQkJSW5kZXhJbmZvICppbmRleF9pbmZvLAotCQkJCQkJ CQkJCVNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJCVZhbGlkYXRlSW5kZXhTdGF0ZSAqc3Rh dGUsCi0JCQkJCQkJCQkJVmFsaWRhdGVJbmRleFN0YXRlICphdXhfc3RhdGUpOworCVRyYW5zYWN0 aW9uSWQJCSgqaW5kZXhfdmFsaWRhdGVfc2NhbikgKFJlbGF0aW9uIHRhYmxlX3JlbCwKKwkJCQkJ CQkJCQkJCVJlbGF0aW9uIGluZGV4X3JlbCwKKwkJCQkJCQkJCQkJCUluZGV4SW5mbyAqaW5kZXhf aW5mbywKKwkJCQkJCQkJCQkJCVZhbGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUsCisJCQkJCQkJCQkJ CQlWYWxpZGF0ZUluZGV4U3RhdGUgKmF1eF9zdGF0ZSk7CiAKIAogCS8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQpAQCAtMTg4NywyMCArMTg4NiwxOCBAQCB0YWJsZV9pbmRleF9idWlsZF9yYW5nZV9zY2FuKFJl bGF0aW9uIHRhYmxlX3JlbCwKICAqIE5vdGU6IGl0IGlzIHJlc3BvbnNpYmlsaXR5IG9mIHRoYXQg ZnVuY3Rpb24gdG8gY2xvc2Ugc29ydHN0YXRlcyBpbgogICogYm90aCBgc3RhdGVgIGFuZCBgYXV4 c3RhdGVgLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgVHJhbnNhY3Rp b25JZAogdGFibGVfaW5kZXhfdmFsaWRhdGVfc2NhbihSZWxhdGlvbiB0YWJsZV9yZWwsCiAJCQkJ CQkgIFJlbGF0aW9uIGluZGV4X3JlbCwKIAkJCQkJCSAgSW5kZXhJbmZvICppbmRleF9pbmZvLAot CQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCSAgVmFsaWRhdGVJbmRleFN0YXRlICpz dGF0ZSwKIAkJCQkJCSAgVmFsaWRhdGVJbmRleFN0YXRlICphdXhzdGF0ZSkKIHsKLQl0YWJsZV9y ZWwtPnJkX3RhYmxlYW0tPmluZGV4X3ZhbGlkYXRlX3NjYW4odGFibGVfcmVsLAotCQkJCQkJCQkJ CQkgICBpbmRleF9yZWwsCi0JCQkJCQkJCQkJCSAgIGluZGV4X2luZm8sCi0JCQkJCQkJCQkJCSAg IHNuYXBzaG90LAotCQkJCQkJCQkJCQkgICBzdGF0ZSwKLQkJCQkJCQkJCQkJICAgYXV4c3RhdGUp OworCXJldHVybiB0YWJsZV9yZWwtPnJkX3RhYmxlYW0tPmluZGV4X3ZhbGlkYXRlX3NjYW4odGFi bGVfcmVsLAorCQkJCQkJCQkJCQkJCSAgaW5kZXhfcmVsLAorCQkJCQkJCQkJCQkJCSAgaW5kZXhf aW5mbywKKwkJCQkJCQkJCQkJCQkgIHN0YXRlLAorCQkJCQkJCQkJCQkJCSAgYXV4c3RhdGUpOwog fQogCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvdHJhbnNhbS5oCmluZGV4IDZmYTkxYmZjZGMwLi5iMzMwODRjYjkxYSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvdHJhbnNhbS5oCkBAIC00MTcsNiArNDE3LDIxIEBAIE5vcm1hbFRyYW5zYWN0aW9uSWRP bGRlcihUcmFuc2FjdGlvbklkIGEsIFRyYW5zYWN0aW9uSWQgYikKIAlyZXR1cm4gYjsKIH0KIAor LyogcmV0dXJuIHRoZSBuZXdlciBvZiB0aGUgdHdvIElEcyAqLworc3RhdGljIGlubGluZSBUcmFu c2FjdGlvbklkCitUcmFuc2FjdGlvbklkTmV3ZXIoVHJhbnNhY3Rpb25JZCBhLCBUcmFuc2FjdGlv bklkIGIpCit7CisJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChhKSkKKwkJcmV0dXJuIGI7CisK KwlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKGIpKQorCQlyZXR1cm4gYTsKKworCWlmIChUcmFu c2FjdGlvbklkRm9sbG93cyhhLCBiKSkKKwkJcmV0dXJuIGE7CisJcmV0dXJuIGI7Cit9CisKIC8q IHJldHVybiB0aGUgbmV3ZXIgb2YgdGhlIHR3byBJRHMgKi8KIHN0YXRpYyBpbmxpbmUgRnVsbFRy YW5zYWN0aW9uSWQKIEZ1bGxUcmFuc2FjdGlvbklkTmV3ZXIoRnVsbFRyYW5zYWN0aW9uSWQgYSwg RnVsbFRyYW5zYWN0aW9uSWQgYikKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5k ZXguaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaAppbmRleCAzNzg3MDFiMTlmMS4uZTky ODg3NmM0NTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaAorKysgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKQEAgLTE1OCw3ICsxNTgsNyBAQCBleHRlcm4gdm9p ZCBpbmRleF9idWlsZChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQlib29sIGlzcmVpbmRl eCwKIAkJCQkJCWJvb2wgcGFyYWxsZWwpOwogCi1leHRlcm4gdm9pZCB2YWxpZGF0ZV9pbmRleChP aWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1eEluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90 KTsKK2V4dGVybiBUcmFuc2FjdGlvbklkIHZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBp bmRleElkLCBPaWQgYXV4SW5kZXhJZCk7CiAKIGV4dGVybiB2b2lkIGluZGV4X3NldF9zdGF0ZV9m bGFncyhPaWQgaW5kZXhJZCwgSW5kZXhTdGF0ZUZsYWdzQWN0aW9uIGFjdGlvbik7CiAKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgK aW5kZXggZWVhM2Y4MThhODYuLmY4YzI3ZTBkYzYzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9t aXNjYWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApAQCAtMjY5LDYgKzI2OSw3 IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgd29ya19tZW07CiBleHRlcm4gUEdETExJTVBPUlQg ZG91YmxlIGhhc2hfbWVtX211bHRpcGxpZXI7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1haW50 ZW5hbmNlX3dvcmtfbWVtOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBkZWJ1Z19jaWNfdmFsaWRh dGVfc3RvcmVfbWVtX3BjdDsKK2V4dGVybiBQR0RMTElNUE9SVCBpbnQgZGVidWdfY2ljX3ZhbGlk YXRlX3NuYXBzaG90X3BhZ2VzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfcGFyYWxsZWxf bWFpbnRlbmFuY2Vfd29ya2VyczsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3Jl YXRlX2luZGV4Lm91dAppbmRleCAyZDZhYmIxNWE4OS4uNzU4YzU4ODRmZjUgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKQEAgLTMzODIsNiArMzM4Miw5IEBA IERST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CiAtLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KICBjMSAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwg ICAgICAgICAgfCAKIAorU0VUIGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0aW9uID0gJ3JlcGVh dGFibGUgcmVhZCc7CitDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2IE9O IGF1eF9pbmRleF90YWI1IChjMSk7CitTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9pc29sYXRpb24g PSAncmVhZCBjb21taXR0ZWQnOwogRFJPUCBUQUJMRSBhdXhfaW5kZXhfdGFiNTsKIC0tIENoZWNr IGhhbmRsaW5nIG9mIGluZGV4ZXMgd2l0aCBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcy4gIFRo ZQogLS0gZGVmaW5pdGlvbnMgb2YgdGhlIHJlYnVpbHQgaW5kZXhlcyBzaG91bGQgbWF0Y2ggdGhl IG9yaWdpbmFsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXgu c3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAppbmRleCBmZDk2ZDgw YWJiYy4uNjVkZDU4Yjk0N2QgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0 ZV9pbmRleC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbApA QCAtMTQwMCw2ICsxNDAwLDEwIEBAIERST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CiAtLSBNYWtl IHN1cmUgYXV4aWxpYXJ5IGluZGV4IGRyb3BwZWQgdG9vCiBcZCBhdXhfaW5kZXhfdGFiNQogCitT RVQgZGVmYXVsdF90cmFuc2FjdGlvbl9pc29sYXRpb24gPSAncmVwZWF0YWJsZSByZWFkJzsKK0NS RUFURSBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUg KGMxKTsKK1NFVCBkZWZhdWx0X3RyYW5zYWN0aW9uX2lzb2xhdGlvbiA9ICdyZWFkIGNvbW1pdHRl ZCc7CisKIERST1AgVEFCTEUgYXV4X2luZGV4X3RhYjU7CiAKIC0tIENoZWNrIGhhbmRsaW5nIG9m IGluZGV4ZXMgd2l0aCBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcy4gIFRoZQotLSAKMi41My4w Cgo= --000000000000b895ca064e594206 Content-Type: application/x-patch; name="v33-0006-Optimize-auxiliary-index-handling.patch" Content-Disposition: attachment; filename="v33-0006-Optimize-auxiliary-index-handling.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnf26cqx5 RnJvbSAzOWZmZmMyZDJmYTVkOThlZGFjOWUyOTBhMjRhODM5NTg0MjEyNGM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAzMCBEZWMgMjAyNCAxNjozNzoxMiArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjMzIDYvN10gT3B0aW1pemUgYXV4aWxpYXJ5IGluZGV4IGhhbmRsaW5nCgpTa2lwIHVu bmVjZXNzYXJ5IGNvbXB1dGF0aW9ucyBmb3IgYXV4aWxpYXJ5IGluZGljZXMgYnk6Ci0gaW4gdGhl IGluZGV4LWluc2VydCBwYXRoLCBkZXRlY3QgYXV4aWxpYXJ5IGluZGV4ZXMgYW5kIGJ5cGFzcyBE YXR1bSB2YWx1ZSBjb21wdXRhdGlvbgotIHNldCBpbmRleFVuY2hhbmdlZD1mYWxzZSBmb3IgYXV4 aWxpYXJ5IGluZGljZXMgdG8gYXZvaWQgcmVkdW5kYW50IGNoZWNrcwoKVGhlc2Ugb3B0aW1pemF0 aW9ucyByZWR1Y2Ugb3ZlcmhlYWQgZHVyaW5nIGNvbmN1cnJlbnQgaW5kZXggb3BlcmF0aW9ucy4K LS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgICAgICAgICB8IDkgKysrKysrKysrCiBz cmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyB8IDUgKysrKy0KIHNyYy9pbmNsdWRl L25vZGVzL2V4ZWNub2Rlcy5oICAgICAgIHwgNiArKysrLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTcg aW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j YXRhbG9nL2luZGV4LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggYWFmMGIz MGZmOWQuLmQ3OTA0N2ZiMjg0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4 LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0yOTIzLDYgKzI5MjMsMTUg QEAgRm9ybUluZGV4RGF0dW0oSW5kZXhJbmZvICppbmRleEluZm8sCiAJTGlzdENlbGwgICAqaW5k ZXhwcl9pdGVtOwogCWludAkJCWk7CiAKKwkvKiBBdXhpbGlhcnkgaW5kZXggZG9lcyBub3QgbmVl ZCBhbnkgdmFsdWVzIHRvIGJlIGNvbXB1dGVkICovCisJaWYgKHVubGlrZWx5KGluZGV4SW5mby0+ aWlfQXV4aWxpYXJ5KSkKKwl7CisJCUFzc2VydChpbmRleEluZm8tPmlpX0FtID09IFNUSVJfQU1f T0lEKTsKKwkJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKERhdHVtKSAqIGluZGV4SW5mby0+aWlf TnVtSW5kZXhBdHRycyk7CisJCW1lbXNldChpc251bGwsIHRydWUsIHNpemVvZihib29sKSAqIGlu ZGV4SW5mby0+aWlfTnVtSW5kZXhBdHRycyk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoaW5kZXhJ bmZvLT5paV9FeHByZXNzaW9ucyAhPSBOSUwgJiYKIAkJaW5kZXhJbmZvLT5paV9FeHByZXNzaW9u c1N0YXRlID09IE5JTCkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj SW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IDQz NjNlMTU0YzBmLi44NGU5OWQ2NTNlYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0luZGV4aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMK QEAgLTQzOCw4ICs0MzgsMTEgQEAgRXhlY0luc2VydEluZGV4VHVwbGVzKFJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8sCiAJCSAqIFRoZXJlJ3MgZGVmaW5pdGVseSBnb2luZyB0byBiZSBhbiBp bmRleF9pbnNlcnQoKSBjYWxsIGZvciB0aGlzCiAJCSAqIGluZGV4LiAgSWYgd2UncmUgYmVpbmcg Y2FsbGVkIGFzIHBhcnQgb2YgYW4gVVBEQVRFIHN0YXRlbWVudCwKIAkJICogY29uc2lkZXIgaWYg dGhlICdpbmRleFVuY2hhbmdlZCcgPSB0cnVlIGhpbnQgc2hvdWxkIGJlIHBhc3NlZC4KKwkJICoK KwkJICogRm9yIGF1eGlsaWFyeSBpbmRleGVzLCBhbHdheXMgcGFzcyBmYWxzZSB0byBza2lwIHZh bHVlIGNvbXBhcmlzb24gY2hlY2tzLAorCQkgKiBzaW5jZSBhdXhpbGlhcnkgaW5kZXhlcyBvbmx5 IHN0b3JlIFRJRHMgYW5kIGRvbid0IHRyYWNrIHZhbHVlIGNoYW5nZXMuCiAJCSAqLwotCQlpbmRl eFVuY2hhbmdlZCA9ICgoZmxhZ3MgJiBFSUlUX0lTX1VQREFURSkgJiYKKwkJaW5kZXhVbmNoYW5n ZWQgPSAoKGZsYWdzICYgRUlJVF9JU19VUERBVEUpICYmICFpbmRleEluZm8tPmlpX0F1eGlsaWFy eSAmJgogCQkJCQkJICBpbmRleF91bmNoYW5nZWRfYnlfdXBkYXRlKHJlc3VsdFJlbEluZm8sCiAJ CQkJCQkJCQkJCQkJZXN0YXRlLAogCQkJCQkJCQkJCQkJCWluZGV4SW5mbywKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25v ZGVzLmgKaW5kZXggMTM2ZGRkYmJmMTEuLjY5NDQxNjg1ZGRiIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aApAQCAtMTY2LDggKzE2NiwxMCBAQCB0eXBlZGVmIHN0cnVjdCBFeHByU3RhdGUKICAqCQllbnRy aWVzIGZvciBhIHBhcnRpY3VsYXIgaW5kZXguICBVc2VkIGZvciBib3RoIGluZGV4X2J1aWxkIGFu ZAogICoJCXJldGFpbCBjcmVhdGlvbiBvZiBpbmRleCBlbnRyaWVzLgogICoKLSAqIGlpX0NvbmN1 cnJlbnQsIGlpX0Jyb2tlbkhvdENoYWluLCBpaV9BdXhpbGlhcnkgYW5kIGlpX1BhcmFsbGVsV29y a2VycwotICogYXJlIHVzZWQgb25seSBkdXJpbmcgaW5kZXggYnVpbGQ7IHRoZXkncmUgY29udmVu dGlvbmFsbHkgemVyb2VkIG90aGVyd2lzZS4KKyAqIGlpX0NvbmN1cnJlbnQsIGlpX0Jyb2tlbkhv dENoYWluLCBhbmQgaWlfUGFyYWxsZWxXb3JrZXJzIGFyZSB1c2VkIG9ubHkKKyAqIGR1cmluZyBp bmRleCBidWlsZDsgdGhleSdyZSBjb252ZW50aW9uYWxseSB6ZXJvZWQgb3RoZXJ3aXNlLiAgaWlf QXV4aWxpYXJ5CisgKiBpcyBhbHNvIHVzZWQgZHVyaW5nIHJldGFpbCBpbnNlcnRzIHRvIHNraXAg ZGF0dW0gZm9ybWF0aW9uIGZvciBhdXhpbGlhcnkKKyAqIGluZGV4ZXMuCiAgKiAtLS0tLS0tLS0t LS0tLS0tCiAgKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4SW5mbwotLSAKMi41My4wCgo= --000000000000b895ca064e594206--