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.94.2) (envelope-from ) id 1rZqGL-006hVt-8W for pgsql-hackers@arkaria.postgresql.org; Tue, 13 Feb 2024 10:43:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rZqGJ-00Gnwb-Cj for pgsql-hackers@arkaria.postgresql.org; Tue, 13 Feb 2024 10:43:39 +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.94.2) (envelope-from ) id 1rZqGI-00GnwS-I2 for pgsql-hackers@lists.postgresql.org; Tue, 13 Feb 2024 10:43:39 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rZqGC-006We6-TB for pgsql-hackers@postgresql.org; Tue, 13 Feb 2024 10:43:37 +0000 Received: from [172.30.8.38] (unknown [172.30.8.38]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: a.lepikhov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 815DEE21071; Tue, 13 Feb 2024 13:43:25 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1707821009; bh=OSLEgYQp0XzLbICPwu4Pk6h3A1BZraMuB2XhXI+yuEE=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=pnP0wRT4CLeFTdRO0ReA4tCVwayQ+nNpizg9nO/E0qVLePErfhH0gAMQ6Ql4IJJUB bGRkvxAcNrcuGy4CanF+xchqizRRgriNVKnnmnNRQyaCa9iqVesvaV1OYnUA8g0Uij Vi6qjV3uIH75aeR2h1NhV+ZW14g828AnHQNUmzC0zjnHOomt3Tj8+jfUzdRuwOC+nm o45cOgd7+zuIIaN5Ldq5odnz85RFKyblncWnl/WwsfAbkXRgu4F3+wE0ST0ke7V7dh byLdFhAesNn5Eo7TyWK5e7D7o+NkeukyF+yvUf4joWnmfny8FB2GCeI0DI0VQF8GYS a3TSGaZJhiPGQ== Content-Type: multipart/mixed; boundary="------------06Ru00R1NuGmAfNQAzkrAlJv" Message-ID: Date: Tue, 13 Feb 2024 17:43:21 +0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC, WIP: OR-clause support for indexes Content-Language: en-US To: Alena Rybakina Cc: Alexander Korotkov , Robert Haas , pgsql-hackers@postgresql.org, Peter Geoghegan , "Finnerty, Jim" , Marcos Pegoraro , teodor@sigaev.ru, Ranier Vilela , Tomas Vondra , Peter Eisentraut , jian he References: <567ED6CA.2040504@sigaev.ru> <59e67a40-95a8-4d74-ae4e-027ea0f59084@postgrespro.ru> <59b77a8a-29d6-4727-bf26-4a30a6a9719a@postgrespro.ru> <32d23d97-d07f-4d44-9933-ba3295fb3ed8@postgrespro.ru> <7e11e27b-7ab9-4d59-af0a-a921861a9206@postgrespro.ru> <13ad923a-33df-4b44-9e00-c9323cd4c37d@postgrespro.ru> <19f7795b-a31c-491f-ad2a-746f0dd3c7c8@postgrespro.ru> <18584b1b-ca12-480c-9a82-4f43fd08dc62@postgrespro.ru> From: Andrei Lepikhov Organization: Postgres Professional In-Reply-To: <18584b1b-ca12-480c-9a82-4f43fd08dc62@postgrespro.ru> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------06Ru00R1NuGmAfNQAzkrAlJv Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 12/2/2024 17:51, Alena Rybakina wrote: > On 12.02.2024 12:01, Andrei Lepikhov wrote: >> On 12/2/2024 15:55, Alena Rybakina wrote: >>> As I understand it, match_clauses_to_index is necessary if you have a >>> RestrictInfo (rinfo1) variable, so maybe we should run it after the >>> make_restrictonfo procedure, otherwise calling it, I think, is useless. >> I think you must explain your note in more detail. Before this call, >> we already called make_restrictinfo() and built rinfo1, haven't we? >> > I got it, I think, I was confused by the “else“ block when we can > process the index, otherwise we move on to the next element. > > I think maybe “else“ block of creating restrictinfo with the indexpaths > list creation should be moved to a separate function or just remove "else"? IMO, it is a matter of taste. But if you are really confused, maybe it will make understanding for someone else simpler. So, changed. > I think we need to check that rinfo->clause is not empty, because if it > is we can miss calling build_paths_for_OR function. We should add it there: > > restriction_is_saop_clause(RestrictInfo *restrictinfo) > { >     if (IsA(restrictinfo->clause, ScalarArrayOpExpr)) I wonder if we should add here assertion, not NULL check. In what case we could get NULL clause here? But added for surety. > By the way, I think we need to add a check that the clauseset is not > empty (if (!clauseset.nonempty)) otherwise we could get an error. The > same check I noticed in build_paths_for_OR function. I don't. Feel free to provide counterexample. -- regards, Andrei Lepikhov Postgres Professional --------------06Ru00R1NuGmAfNQAzkrAlJv Content-Type: text/plain; charset=UTF-8; name="0002-Teach-generate_bitmap_or_paths-to-build-BitmapOr-pat-20240213.patch" Content-Disposition: attachment; filename*0="0002-Teach-generate_bitmap_or_paths-to-build-BitmapOr-pat-20"; filename*1="240213.patch" Content-Transfer-Encoding: base64 RnJvbSAyYjA4OGExYmQ2NjJjNjE0ZWU0OTFhNzk3ZDJmY2I2N2UyZmIyMzkxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmV5IFYuIExlcGlraG92IiA8YS5sZXBpa2hv dkBwb3N0Z3Jlc3Byby5ydT4KRGF0ZTogV2VkLCAyNCBKYW4gMjAyNCAxNDowNzoxNyArMDcw MApTdWJqZWN0OiBbUEFUQ0ggMi8yXSBUZWFjaCBnZW5lcmF0ZV9iaXRtYXBfb3JfcGF0aHMg dG8gYnVpbGQgQml0bWFwT3IgcGF0aHMKIG92ZXIgU0FPUCBjbGF1c2VzLgoKTGlrZXdpc2Ug T1IgY2xhdXNlcywgZGlzY292ZXIgU0FPUCBhcnJheSBhbmQgdHJ5IHRvIHNwbGl0IGl0cyBl bGVtZW50cwpiZXR3ZWVuIHNtYWxsZXIgc2l6ZWQgYXJyYXlzIHRvIGZpdCBhIHNldCBvZiBw YXJ0aWFsIGluZGV4ZXMuCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBh dGguYyAgICAgfCAzMDEgKysrKysrKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcHJlZHRlc3QuYyAgICAgfCAgNDYgKysrKwogc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcmVzdHJpY3RpbmZvLmMgfCAgMTMgKwogc3JjL2luY2x1ZGUvb3B0aW1p emVyL29wdGltaXplci5oICAgICAgICAgfCAgMTYgKysKIHNyYy9pbmNsdWRlL29wdGltaXpl ci9yZXN0cmljdGluZm8uaCAgICAgIHwgICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvc2VsZWN0Lm91dCAgICAgIHwgMjgyICsrKysrKysrKysrKysrKysrKysrCiBzcmMvdGVz dC9yZWdyZXNzL3NxbC9zZWxlY3Quc3FsICAgICAgICAgICB8ICA4MiArKysrKysKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgIHwgICAxICsKIDggZmlsZXMg Y2hhbmdlZCwgNjg5IGluc2VydGlvbnMoKyksIDUzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IDMyYzZhOGJiZGMuLjU2YjA0NTQx ZGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwpAQCAtMzIsNiAr MzIsNyBAQAogI2luY2x1ZGUgIm9wdGltaXplci9wYXRocy5oIgogI2luY2x1ZGUgIm9wdGlt aXplci9wcmVwLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3Jlc3RyaWN0aW5mby5oIgorI2lu Y2x1ZGUgInV0aWxzL2FycmF5LmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAj aW5jbHVkZSAidXRpbHMvc2VsZnVuY3MuaCIKIApAQCAtMTIyMCwxMSArMTIyMSwxNzQgQEAg YnVpbGRfcGF0aHNfZm9yX09SKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorLyoKKyAqIEJ1aWxkaW5nIGluZGV4IHBhdGhzIG92 ZXIgU0FPUCBjbGF1c2UgZGlmZmVycyBmcm9tIHRoZSBsb2dpYyBvZiBPUiBjbGF1c2VzLgor ICogSGVyZSB3ZSBpdGVyYXRlIGFjcm9zcyBhbGwgdGhlIGFycmF5IGVsZW1lbnRzIGFuZCBz cGxpdCB0aGVtIHRvIFNBT1BzLAorICogY29ycmVzcG9uZGluZyB0byBkaWZmZXJlbnQgaW5k ZXhlcy4gV2UgbXVzdCBtYXRjaCBlYWNoIGVsZW1lbnQgdG8gYW4gaW5kZXguCisgKi8KK3N0 YXRpYyBMaXN0ICoKK2J1aWxkX3BhdGhzX2Zvcl9TQU9QKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsIFJlc3RyaWN0SW5mbyAqcmluZm8sCisJCQkJCSBMaXN0ICpvdGhl cl9jbGF1c2VzKQoreworCUxpc3QJCQkgICAqcmVzdWx0ID0gTklMOworCUxpc3QJCQkgICAq cHJlZGljYXRlX2xpc3RzID0gTklMOworCUxpc3RDZWxsCQkgICAqbGM7CisJUHJlZGljYXRl c0RhdGEJICAgKnBkOworCVNjYWxhckFycmF5T3BFeHByICAqc2FvcCA9IChTY2FsYXJBcnJh eU9wRXhwciAqKSByaW5mby0+Y2xhdXNlOworCisJQXNzZXJ0KElzQShzYW9wLCBTY2FsYXJB cnJheU9wRXhwcikgJiYgc2FvcC0+dXNlT3IpOworCisJaWYgKCFJc0EobHNlY29uZChzYW9w LT5hcmdzKSwgQ29uc3QpKQorCQkvKgorCQkgKiBIYXMgaXQgcHJhY3RpY2FsIG91dGNvbWUg dG8gbWVyZ2UgYXJyYXlzIHdoaWNoIGNvdWxkbid0IGNvbnN0YW50aWZpZWQKKwkJICogYmVm b3JlIHRoYXQgc3RlcD8KKwkJICovCisJCXJldHVybiBOSUw7CisKKwkvKiBDb2xsZWN0IHBy ZWRpY2F0ZXMgKi8KKwlmb3JlYWNoKGxjLCByZWwtPmluZGV4bGlzdCkKKwl7CisJCUluZGV4 T3B0SW5mbyAqaW5kZXggPSAoSW5kZXhPcHRJbmZvICopIGxmaXJzdChsYyk7CisKKwkJLyog VGFrZSBpbnRvIGNvbnNpZGVyYXRpb24gcGFydGlhbCBpbmRleGVzIHN1cHBvcnRpbmcgYml0 bWFwIHNjYW5zICovCisJCWlmICghaW5kZXgtPmFtaGFzZ2V0Yml0bWFwIHx8IGluZGV4LT5p bmRwcmVkID09IE5JTCB8fCBpbmRleC0+cHJlZE9LKQorCQkJY29udGludWU7CisKKwkJcGQg PSBwYWxsb2MwKHNpemVvZihQcmVkaWNhdGVzRGF0YSkpOworCQlwZC0+aWQgPSBmb3JlYWNo X2N1cnJlbnRfaW5kZXgobGMpOworCQkvKiBUaGUgdHJpY2sgd2l0aCByZWR1Y2luZyByZWN1 cnNpb24gaXMgc3RvbGVuIGZyb20gcHJlZGljYXRlX2ltcGxpZWRfYnkgKi8KKwkJcGQtPnBy ZWRpY2F0ZSA9IGxpc3RfbGVuZ3RoKGluZGV4LT5pbmRwcmVkKSA9PSAxID8KKwkJCQkJCQkJ CQkoTm9kZSAqKSBsaW5pdGlhbChpbmRleC0+aW5kcHJlZCkgOgorCQkJCQkJCQkJCShOb2Rl ICopIGluZGV4LT5pbmRwcmVkOworCQlwcmVkaWNhdGVfbGlzdHMgPSBsYXBwZW5kKHByZWRp Y2F0ZV9saXN0cywgKHZvaWQgKikgcGQpOworCX0KKworCS8qIFNwbGl0IHRoZSBhcnJheSBk YXRhIGFjY29yZGluZyB0byBpbmRleCBwcmVkaWNhdGVzLiAqLworCWlmIChwcmVkaWNhdGVf bGlzdHMgPT0gTklMIHx8CisJCSFzYW9wX2NvdmVyZWRfYnlfcHJlZGljYXRlcyhzYW9wLCBw cmVkaWNhdGVfbGlzdHMpKQorCQlyZXR1cm4gTklMOworCisJb3RoZXJfY2xhdXNlcyA9IGxp c3RfZGVsZXRlX3B0cihvdGhlcl9jbGF1c2VzLCByaW5mbyk7CisKKwkvKgorCSAqIEhhdmlu ZyBpbmNvbWluZyBTQU9QIHNwbGl0IHRvIHNldCBvZiBzbWFsbGVyIFNBT1BzIHdoaWNoIGNh biBiZSBhcHBsaWVkCisJICogdG8gcGFydGlhbCBpbmRleGVzLCBnZW5lcmF0ZSBwYXRocyBm b3IgZWFjaCBvbmUuCisJICovCisJZm9yZWFjaChsYywgcHJlZGljYXRlX2xpc3RzKQorCXsK KwkJSW5kZXhPcHRJbmZvCSAgICppbmRleDsKKwkJSW5kZXhDbGF1c2VTZXQJCWNsYXVzZXNl dDsKKwkJTGlzdAkJCSAgICppbmRleHBhdGhzOworCQlSZXN0cmljdEluZm8JICAgKnJpbmZv MSA9IE5VTEw7CisJCUV4cHIJCQkgICAqY2xhdXNlOworCQlBcnJheVR5cGUJCSAgICphcnJh eXZhbCA9IE5VTEw7CisJCUFycmF5RXhwcgkJICAgKmFyciA9IE5VTEw7CisJCUNvbnN0CQkJ ICAgKmFycmF5Y29uc3QgPSBsc2Vjb25kX25vZGUoQ29uc3QsIHNhb3AtPmFyZ3MpOworCQlT Y2FsYXJBcnJheU9wRXhwciAgKmRlc3QgPSBtYWtlTm9kZShTY2FsYXJBcnJheU9wRXhwcik7 CisKKwkJcGQgPSAoUHJlZGljYXRlc0RhdGEgKikgbGZpcnN0KGxjKTsKKwkJaWYgKHBkLT5l bGVtcyA9PSBOSUwpCisJCQkvKiBUaGUgaW5kZXggZG9lc24ndCBwYXJ0aWNpcGF0ZSBpbiB0 aGlzIG9wZXJhdGlvbiAqLworCQkJY29udGludWU7CisKKwkJLyogTWFrZSB1cCBuZXcgYXJy YXkgKi8KKwkJYXJyYXl2YWwgPSBEYXR1bUdldEFycmF5VHlwZVAoYXJyYXljb25zdC0+Y29u c3R2YWx1ZSk7CisJCWFyciA9IG1ha2VOb2RlKEFycmF5RXhwcik7CisJCWFyci0+YXJyYXlf Y29sbGlkID0gYXJyYXljb25zdC0+Y29uc3Rjb2xsaWQ7CisJCWFyci0+YXJyYXlfdHlwZWlk ID0gYXJyYXljb25zdC0+Y29uc3R0eXBlOworCQlhcnItPmVsZW1lbnRfdHlwZWlkID0gYXJy YXl2YWwtPmVsZW10eXBlOworCQlhcnItPmVsZW1lbnRzID0gcGQtPmVsZW1zOworCQlhcnIt PmxvY2F0aW9uID0gLTE7CisJCWFyci0+bXVsdGlkaW1zID0gZmFsc2U7CisKKwkJLyogQ29t cG9zZSBuZXcgU0FPUCwgcGFydGlhbGx5IGNvdmVyaW5nIHRoZSBzb3VyY2Ugb25lICovCisJ CW1lbWNweShkZXN0LCBzYW9wLCBzaXplb2YoU2NhbGFyQXJyYXlPcEV4cHIpKTsKKwkJZGVz dC0+YXJncyA9IGxpc3RfbWFrZTIobGluaXRpYWwoc2FvcC0+YXJncyksIGFycik7CisKKwkJ Y2xhdXNlID0gKEV4cHIgKikgZXN0aW1hdGVfZXhwcmVzc2lvbl92YWx1ZShyb290LCAoTm9k ZSAqKSBkZXN0KTsKKworCQkvKgorCQkgKiBDcmVhdGUgbmV3IFJlc3RyaWN0SW5mby4gSXQg bWF5YmUgbW9yZSBoZWF2eSB0aGFuIGp1c3QgY29weSBub2RlLAorCQkgKiBidXQgcmVtZW1i ZXIgc29tZSBpbnRlcm5hbHM6IHRoZSBzZXJpYWwgbnVtYmVyLCBzZWxlY3Rpdml0eQorCQkg KiBjYWNoZSBldGMuCisJCSAqLworCQlyaW5mbzEgPSBtYWtlX3Jlc3RyaWN0aW5mbyhyb290 LCBjbGF1c2UsCisJCQkJCQkJCSAgIHJpbmZvLT5pc19wdXNoZWRfZG93biwKKwkJCQkJCQkJ ICAgcmluZm8tPmhhc19jbG9uZSwKKwkJCQkJCQkJICAgcmluZm8tPmlzX2Nsb25lLAorCQkJ CQkJCQkgICByaW5mby0+cHNldWRvY29uc3RhbnQsCisJCQkJCQkJCSAgIHJpbmZvLT5zZWN1 cml0eV9sZXZlbCwKKwkJCQkJCQkJICAgcmluZm8tPnJlcXVpcmVkX3JlbGlkcywKKwkJCQkJ CQkJICAgcmluZm8tPmluY29tcGF0aWJsZV9yZWxpZHMsCisJCQkJCQkJCSAgIHJpbmZvLT5v dXRlcl9yZWxpZHMpOworCisJCWluZGV4ID0gbGlzdF9udGgocmVsLT5pbmRleGxpc3QsIHBk LT5pZCk7CisJCUFzc2VydChwcmVkaWNhdGVfaW1wbGllZF9ieShpbmRleC0+aW5kcHJlZCwg bGlzdF9tYWtlMShyaW5mbzEpLCB0cnVlKSk7CisKKwkJLyogRXhjbHVkaW5nIHBhcnRpYWwg aW5kZXhlcyB3aXRoIHByZWRPSyB3ZSBtYWtlIHRoaXMgc3RhdGVtZW50IGZhbHNlICovCisJ CUFzc2VydCghcHJlZGljYXRlX2ltcGxpZWRfYnkoaW5kZXgtPmluZHByZWQsIG90aGVyX2Ns YXVzZXMsIGZhbHNlKSk7CisKKwkJLyogVGltZSB0byBnZW5lcmF0ZSBpbmRleCBwYXRocyAq LworCisJCU1lbVNldCgmY2xhdXNlc2V0LCAwLCBzaXplb2YoY2xhdXNlc2V0KSk7CisJCW1h dGNoX2NsYXVzZXNfdG9faW5kZXgocm9vdCwgbGlzdF9tYWtlMShyaW5mbzEpLCBpbmRleCwg JmNsYXVzZXNldCk7CisJCW1hdGNoX2NsYXVzZXNfdG9faW5kZXgocm9vdCwgb3RoZXJfY2xh dXNlcywgaW5kZXgsICZjbGF1c2VzZXQpOworCisJCS8qIFByZWRpY2F0ZSBoYXMgZm91bmQg YWxyZWFkeS4gU28sIGl0IGlzIG9rIGZvciB0aGUgZW1wdHkgbWF0Y2ggKi8KKworCQlpbmRl eHBhdGhzID0gYnVpbGRfaW5kZXhfcGF0aHMocm9vdCwgcmVsLAorCQkJCQkJCQkJICAgaW5k ZXgsICZjbGF1c2VzZXQsCisJCQkJCQkJCQkgICB0cnVlLAorCQkJCQkJCQkJICAgU1RfQklU TUFQU0NBTiwKKwkJCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJCQkgICBOVUxMKTsKKwkJQXNz ZXJ0KGluZGV4cGF0aHMgIT0gTklMKTsKKwkJcmVzdWx0ID0gbGFwcGVuZChyZXN1bHQsIGlu ZGV4cGF0aHMpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgTGlzdCAqCitn ZW5lcmF0ZV9zYW9wX3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCisJCQkJCSAgIFJlc3RyaWN0SW5mbyAqcmluZm8sIExpc3QgKmFsbF9jbGF1c2VzKQor eworCUxpc3QJICAgKnBhdGhsaXN0ID0gTklMOworCVBhdGgJICAgKmJpdG1hcHF1YWw7CisJ TGlzdAkgICAqaW5kbGlzdDsKKwlMaXN0Q2VsbCAgICpsYzsKKworCWlmICghZW5hYmxlX29y X3RyYW5zZm9ybWF0aW9uKQorCQlyZXR1cm4gTklMOworCisJLyoKKwkgKiBXZSBtdXN0IGJl IGFibGUgdG8gbWF0Y2ggYXQgbGVhc3Qgb25lIGluZGV4IHRvIGVhY2ggZWxlbWVudCBvZgor CSAqIHRoZSBhcnJheSwgZWxzZSB3ZSBjYW4ndCB1c2UgaXQuCisJICovCisJaW5kbGlzdCA9 IGJ1aWxkX3BhdGhzX2Zvcl9TQU9QKHJvb3QsIHJlbCwgcmluZm8sIGFsbF9jbGF1c2VzKTsK KwlpZiAoaW5kbGlzdCA9PSBOSUwpCisJCXJldHVybiBOSUw7CisKKwkvKgorCSAqIE9LLCBw aWNrIHRoZSBtb3N0IHByb21pc2luZyBBTkQgY29tYmluYXRpb24sIGFuZCBhZGQgaXQgdG8K KwkgKiBwYXRobGlzdC4KKwkgKi8KKwlmb3JlYWNoIChsYywgaW5kbGlzdCkKKwl7CisJCUxp c3QgKnBsaXN0ID0gbGZpcnN0X25vZGUoTGlzdCwgbGMpOworCisJCWJpdG1hcHF1YWwgPSBj aG9vc2VfYml0bWFwX2FuZChyb290LCByZWwsIHBsaXN0KTsKKwkJcGF0aGxpc3QgPSBsYXBw ZW5kKHBhdGhsaXN0LCBiaXRtYXBxdWFsKTsKKwl9CisKKwlyZXR1cm4gcGF0aGxpc3Q7Cit9 CisKIC8qCiAgKiBnZW5lcmF0ZV9iaXRtYXBfb3JfcGF0aHMKLSAqCQlMb29rIHRocm91Z2gg dGhlIGxpc3Qgb2YgY2xhdXNlcyB0byBmaW5kIE9SIGNsYXVzZXMsIGFuZCBnZW5lcmF0ZQot ICoJCWEgQml0bWFwT3JQYXRoIGZvciBlYWNoIG9uZSB3ZSBjYW4gaGFuZGxlIHRoYXQgd2F5 LiAgUmV0dXJuIGEgbGlzdAotICoJCW9mIHRoZSBnZW5lcmF0ZWQgQml0bWFwT3JQYXRocy4K KyAqCQlMb29rIHRocm91Z2ggdGhlIGxpc3Qgb2YgY2xhdXNlcyB0byBmaW5kIE9SIGFuZCBT QU9QIGNsYXVzZXMsIGFuZAorICoJCUVhY2ggc2FvcCBjbGF1c2UgYXJlIHNwbGl0dGVkIHRv IGJlIGNvdmVyZWQgYnkgcGFydGlhbCBpbmRleGVzLgorICoJCWdlbmVyYXRlIGEgQml0bWFw T3JQYXRoIGZvciBlYWNoIG9uZSB3ZSBjYW4gaGFuZGxlIHRoYXQgd2F5LgorICoJCVJldHVy biBhIGxpc3Qgb2YgdGhlIGdlbmVyYXRlZCBCaXRtYXBPclBhdGhzLgogICoKICAqIG90aGVy X2NsYXVzZXMgaXMgYSBsaXN0IG9mIGFkZGl0aW9uYWwgY2xhdXNlcyB0aGF0IGNhbiBiZSBh c3N1bWVkIHRydWUKICAqIGZvciB0aGUgcHVycG9zZSBvZiBnZW5lcmF0aW5nIGluZGV4cXVh bHMsIGJ1dCBhcmUgbm90IHRvIGJlIHNlYXJjaGVkIGZvcgpAQCAtMTI0Nyw2OCArMTQxMSw5 OSBAQCBnZW5lcmF0ZV9iaXRtYXBfb3JfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwKIAlmb3JlYWNoKGxjLCBjbGF1c2VzKQogCXsKIAkJUmVzdHJpY3RJbmZv ICpyaW5mbyA9IGxmaXJzdF9ub2RlKFJlc3RyaWN0SW5mbywgbGMpOwotCQlMaXN0CSAgICpw YXRobGlzdDsKKwkJTGlzdAkgICAqcGF0aGxpc3QgPSBOSUw7CiAJCVBhdGgJICAgKmJpdG1h cHF1YWw7CiAJCUxpc3RDZWxsICAgKmo7CiAKLQkJLyogSWdub3JlIFJlc3RyaWN0SW5mb3Mg dGhhdCBhcmVuJ3QgT1JzICovCi0JCWlmICghcmVzdHJpY3Rpb25faXNfb3JfY2xhdXNlKHJp bmZvKSkKKwkJaWYgKHJlc3RyaWN0aW9uX2lzX3Nhb3BfY2xhdXNlKHJpbmZvKSkKKwkJewor CQkJcGF0aGxpc3QgPSBnZW5lcmF0ZV9zYW9wX3BhdGhsaXN0KHJvb3QsIHJlbCwgcmluZm8s CisJCQkJCQkJCQkJCSAgYWxsX2NsYXVzZXMpOworCQl9CisJCWVsc2UgaWYgKCFyZXN0cmlj dGlvbl9pc19vcl9jbGF1c2UocmluZm8pKQorCQkJLyogSWdub3JlIFJlc3RyaWN0SW5mb3Mg dGhhdCBhcmVuJ3QgT1JzICovCiAJCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBXZSBtdXN0 IGJlIGFibGUgdG8gbWF0Y2ggYXQgbGVhc3Qgb25lIGluZGV4IHRvIGVhY2ggb2YgdGhlIGFy bXMgb2YKLQkJICogdGhlIE9SLCBlbHNlIHdlIGNhbid0IHVzZSBpdC4KLQkJICovCi0JCXBh dGhsaXN0ID0gTklMOwotCQlmb3JlYWNoKGosICgoQm9vbEV4cHIgKikgcmluZm8tPm9yY2xh dXNlKS0+YXJncykKKwkJZWxzZQogCQl7Ci0JCQlOb2RlCSAgICpvcmFyZyA9IChOb2RlICop IGxmaXJzdChqKTsKLQkJCUxpc3QJICAgKmluZGxpc3Q7Ci0KLQkJCS8qIE9SIGFyZ3VtZW50 cyBzaG91bGQgYmUgQU5EcyBvciBzdWItUmVzdHJpY3RJbmZvcyAqLwotCQkJaWYgKGlzX2Fu ZGNsYXVzZShvcmFyZykpCisJCQkvKgorCQkJICogV2UgbXVzdCBiZSBhYmxlIHRvIG1hdGNo IGF0IGxlYXN0IG9uZSBpbmRleCB0byBlYWNoIG9mIHRoZSBhcm1zIG9mCisJCQkgKiB0aGUg T1IsIGVsc2Ugd2UgY2FuJ3QgdXNlIGl0LgorCQkJICovCisJCQlmb3JlYWNoKGosICgoQm9v bEV4cHIgKikgcmluZm8tPm9yY2xhdXNlKS0+YXJncykKIAkJCXsKLQkJCQlMaXN0CSAgICph bmRhcmdzID0gKChCb29sRXhwciAqKSBvcmFyZyktPmFyZ3M7CisJCQkJTm9kZQkgICAqb3Jh cmcgPSAoTm9kZSAqKSBsZmlyc3Qoaik7CisJCQkJTGlzdAkgICAqaW5kbGlzdDsKIAotCQkJ CWluZGxpc3QgPSBidWlsZF9wYXRoc19mb3JfT1Iocm9vdCwgcmVsLAotCQkJCQkJCQkJCQkg YW5kYXJncywKLQkJCQkJCQkJCQkJIGFsbF9jbGF1c2VzKTsKKwkJCQkvKiBPUiBhcmd1bWVu dHMgc2hvdWxkIGJlIEFORHMgb3Igc3ViLVJlc3RyaWN0SW5mb3MgKi8KKwkJCQlpZiAoaXNf YW5kY2xhdXNlKG9yYXJnKSkKKwkJCQl7CisJCQkJCUxpc3QJICAgKmFuZGFyZ3MgPSAoKEJv b2xFeHByICopIG9yYXJnKS0+YXJnczsKIAotCQkJCS8qIFJlY3Vyc2UgaW4gY2FzZSB0aGVy ZSBhcmUgc3ViLU9ScyAqLwotCQkJCWluZGxpc3QgPSBsaXN0X2NvbmNhdChpbmRsaXN0LAot CQkJCQkJCQkJICBnZW5lcmF0ZV9iaXRtYXBfb3JfcGF0aHMocm9vdCwgcmVsLAotCQkJCQkJ CQkJCQkJCQkJICAgYW5kYXJncywKLQkJCQkJCQkJCQkJCQkJCSAgIGFsbF9jbGF1c2VzKSk7 Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJUmVzdHJpY3RJbmZvICpyaSA9IGNhc3ROb2Rl KFJlc3RyaWN0SW5mbywgb3JhcmcpOwotCQkJCUxpc3QJICAgKm9yYXJnczsKKwkJCQkJaW5k bGlzdCA9IGJ1aWxkX3BhdGhzX2Zvcl9PUihyb290LCByZWwsCisJCQkJCQkJCQkJCQkgYW5k YXJncywKKwkJCQkJCQkJCQkJCSBhbGxfY2xhdXNlcyk7CiAKLQkJCQlBc3NlcnQoIXJlc3Ry aWN0aW9uX2lzX29yX2NsYXVzZShyaSkpOwotCQkJCW9yYXJncyA9IGxpc3RfbWFrZTEocmkp OworCQkJCQkvKiBSZWN1cnNlIGluIGNhc2UgdGhlcmUgYXJlIHN1Yi1PUnMgKi8KKwkJCQkJ aW5kbGlzdCA9IGxpc3RfY29uY2F0KGluZGxpc3QsCisJCQkJCQkJCQkJICBnZW5lcmF0ZV9i aXRtYXBfb3JfcGF0aHMocm9vdCwgcmVsLAorCQkJCQkJCQkJCQkJCQkJCSAgIGFuZGFyZ3Ms CisJCQkJCQkJCQkJCQkJCQkJICAgYWxsX2NsYXVzZXMpKTsKKwkJCQl9CisJCQkJZWxzZQor CQkJCXsKKwkJCQkJUmVzdHJpY3RJbmZvICpyaSA9IGNhc3ROb2RlKFJlc3RyaWN0SW5mbywg b3JhcmcpOworCQkJCQlMaXN0CSAgICpvcmFyZ3M7CiAKLQkJCQlpbmRsaXN0ID0gYnVpbGRf cGF0aHNfZm9yX09SKHJvb3QsIHJlbCwKLQkJCQkJCQkJCQkJIG9yYXJncywKLQkJCQkJCQkJ CQkJIGFsbF9jbGF1c2VzKTsKLQkJCX0KKwkJCQkJQXNzZXJ0KCFyZXN0cmljdGlvbl9pc19v cl9jbGF1c2UocmkpKTsKIAotCQkJLyoKLQkJCSAqIElmIG5vdGhpbmcgbWF0Y2hlZCB0aGlz IGFybSwgd2UgY2FuJ3QgZG8gYW55dGhpbmcgd2l0aCB0aGlzIE9SCi0JCQkgKiBjbGF1c2Uu Ci0JCQkgKi8KLQkJCWlmIChpbmRsaXN0ID09IE5JTCkKLQkJCXsKLQkJCQlwYXRobGlzdCA9 IE5JTDsKLQkJCQlicmVhazsKLQkJCX0KKwkJCQkJb3JhcmdzID0gbGlzdF9tYWtlMShyaSk7 CiAKLQkJCS8qCi0JCQkgKiBPSywgcGljayB0aGUgbW9zdCBwcm9taXNpbmcgQU5EIGNvbWJp bmF0aW9uLCBhbmQgYWRkIGl0IHRvCi0JCQkgKiBwYXRobGlzdC4KLQkJCSAqLwotCQkJYml0 bWFwcXVhbCA9IGNob29zZV9iaXRtYXBfYW5kKHJvb3QsIHJlbCwgaW5kbGlzdCk7Ci0JCQlw YXRobGlzdCA9IGxhcHBlbmQocGF0aGxpc3QsIGJpdG1hcHF1YWwpOworCQkJCQlpZiAocmVz dHJpY3Rpb25faXNfc2FvcF9jbGF1c2UocmkpKQorCQkJCQl7CisJCQkJCQlMaXN0ICpwYXRo czsKKworCQkJCQkJcGF0aHMgPSBnZW5lcmF0ZV9zYW9wX3BhdGhsaXN0KHJvb3QsIHJlbCwg cmksCisJCQkJCQkJCQkJCQkJCSBhbGxfY2xhdXNlcyk7CisKKwkJCQkJCWlmIChwYXRocyAh PSBOSUwpCisJCQkJCQl7CisJCQkJCQkJLyoKKwkJCQkJCQkgKiBBZGQgcGF0aHMgdG8gcGF0 aGxpc3QgYW5kIGltbWVkaWF0ZWx5IGp1bXAgdG8gdGhlCisJCQkJCQkJICogbmV4dCBlbGVt ZW50IG9mIHRoZSBPUiBjbGF1c2UuCisJCQkJCQkJICovCisJCQkJCQkJcGF0aGxpc3QgPSBs aXN0X2NvbmNhdChwYXRobGlzdCwgcGF0aHMpOworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJ fQorCisJCQkJCQkvKgorCQkJCQkJICogUGFzcyBkb3duIG91dCBvZiB0aGlzIGlmIGNvbnN0 cnVjdGlvbjoKKwkJCQkJCSAqIElmIHNhb3AgaXNuJ3QgY292ZXJlZCBieSBwYXJ0aWFsIGlu ZGV4ZXMsIHRyeSB0bworCQkJCQkJICogYnVpbGQgc2NhbiBwYXRoIGZvciB0aGUgc2FvcCBh cyBhIHdob2xlLgorCQkJCQkJICovCisJCQkJCX0KKworCQkJCQlpbmRsaXN0ID0gYnVpbGRf cGF0aHNfZm9yX09SKHJvb3QsIHJlbCwKKwkJCQkJCQkJCQkJCSBvcmFyZ3MsCisJCQkJCQkJ CQkJCQkgYWxsX2NsYXVzZXMpOworCQkJCX0KKworCQkJCS8qCisJCQkJICogSWYgbm90aGlu ZyBtYXRjaGVkIHRoaXMgYXJtLCB3ZSBjYW4ndCBkbyBhbnl0aGluZyB3aXRoIHRoaXMgT1IK KwkJCQkgKiBjbGF1c2UuCisJCQkJICovCisJCQkJaWYgKGluZGxpc3QgPT0gTklMKQorCQkJ CXsKKwkJCQkJcGF0aGxpc3QgPSBOSUw7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCS8q CisJCQkJICogT0ssIHBpY2sgdGhlIG1vc3QgcHJvbWlzaW5nIEFORCBjb21iaW5hdGlvbiwg YW5kIGFkZCBpdCB0bworCQkJCSAqIHBhdGhsaXN0LgorCQkJCSAqLworCQkJCWJpdG1hcHF1 YWwgPSBjaG9vc2VfYml0bWFwX2FuZChyb290LCByZWwsIGluZGxpc3QpOworCQkJCXBhdGhs aXN0ID0gbGFwcGVuZChwYXRobGlzdCwgYml0bWFwcXVhbCk7CisJCQl9CiAJCX0KIAogCQkv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcHJlZHRlc3QuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3ByZWR0ZXN0LmMKaW5kZXggYzM3YjQxNmUy NC4uOGVkODBhNzhiNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cHJlZHRlc3QuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wcmVkdGVzdC5j CkBAIC0xMTIsNiArMTEyLDUyIEBAIHN0YXRpYyBPaWQJZ2V0X2J0cmVlX3Rlc3Rfb3AoT2lk IHByZWRfb3AsIE9pZCBjbGF1c2Vfb3AsIGJvb2wgcmVmdXRlX2l0KTsKIHN0YXRpYyB2b2lk IEludmFsaWRhdGVPcHJQcm9vZkNhY2hlQ2FsbEJhY2soRGF0dW0gYXJnLCBpbnQgY2FjaGVp ZCwgdWludDMyIGhhc2h2YWx1ZSk7CiAKIAorLyoKKyAqIENvdWxkIHRoaXMgQU5ZICgpIGV4 cHJlc3Npb24gY2FuIGJlIHNwbGl0IGludG8gYSBzZXQgb2YgQU5ZcyBvdmVyIHBhcnRpYWwK KyAqIGluZGV4ZXM/IElmIHllcywgcmV0dXJuIHRoZXNlIHNhb3BzIGluIHRoZSBQcmVkaWNh dGVzRGF0YSBzdHJ1Y3R1cmUuCisgKi8KK2Jvb2wKK3Nhb3BfY292ZXJlZF9ieV9wcmVkaWNh dGVzKFNjYWxhckFycmF5T3BFeHByICpzYW9wLCBMaXN0ICpwcmVkaWNhdGVfbGlzdHMpCit7 CisJTGlzdENlbGwJCSAgICpsYzsKKwlQcmVkSXRlckluZm9EYXRhCWNsYXVzZV9pbmZvOwor CWJvb2wJCQkJcmVzdWx0ID0gZmFsc2U7CisKKwlpZiAocHJlZGljYXRlX2NsYXNzaWZ5KChO b2RlICopIHNhb3AsICZjbGF1c2VfaW5mbykgIT0gQ0xBU1NfT1IpCisJCXJldHVybiBmYWxz ZTsKKworCWl0ZXJhdGVfYmVnaW4ocGl0ZW0sIChOb2RlICopIHNhb3AsIGNsYXVzZV9pbmZv KQorCXsKKwkJcmVzdWx0ID0gZmFsc2U7CisKKwkJZm9yZWFjaChsYywgcHJlZGljYXRlX2xp c3RzKQorCQl7CisJCQlQcmVkaWNhdGVzRGF0YSAqcGQgPSAoUHJlZGljYXRlc0RhdGEgKikg bGZpcnN0KGxjKTsKKworCQkJaWYgKCFwcmVkaWNhdGVfaW1wbGllZF9ieV9yZWN1cnNlKHBp dGVtLCBwZC0+cHJlZGljYXRlLCBmYWxzZSkpCisJCQkJY29udGludWU7CisKKwkJCS8qIFBy ZWRpY2F0ZSBpcyBmb3VuZC4gQWRkIHRoZSBlbGVtIHRvIHRoZSBzYW9wIGNsYXVzZSAqLwor CQkJQXNzZXJ0KElzQShwaXRlbSwgT3BFeHByKSk7CisKKwkJCS8qIEV4dHJhY3QgY29uc3Rh bnQgZnJvbSB0aGUgZXhwcmVzc2lvbiAqLworCQkJcGQtPmVsZW1zID0gbGFwcGVuZChwZC0+ ZWxlbXMsCisJCQkJCWNvcHlPYmplY3QobHNlY29uZF9ub2RlKENvbnN0LCAoKE9wRXhwciAq KSBwaXRlbSktPmFyZ3MpKSk7CisJCQlyZXN1bHQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0K KworCQlpZiAoIXJlc3VsdCkKKwkJCS8qCisJCQkgKiBUaGUgZWxlbWVudCBkb2Vzbid0IGZp dCBhbnkgaW5kZXguIEludGVycnVwdCB0aGUgcHJvY2VzcyBpbW1lZGlhdGVseQorCQkJICov CisJCQlicmVhazsKKwl9CisJaXRlcmF0ZV9lbmQoY2xhdXNlX2luZm8pOworCisJcmV0dXJu IHJlc3VsdDsKK30KKwogLyoKICAqIHByZWRpY2F0ZV9pbXBsaWVkX2J5CiAgKgkgIFJlY3Vy c2l2ZWx5IGNoZWNrcyB3aGV0aGVyIHRoZSBjbGF1c2VzIGluIGNsYXVzZV9saXN0IGltcGx5 IHRoYXQgdGhlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZXN0 cmljdGluZm8uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3Jlc3RyaWN0aW5mby5j CmluZGV4IDBiNDA2ZTkzMzQuLjFkYWQxZGM2NTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3Jlc3RyaWN0aW5mby5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3Jlc3RyaWN0aW5mby5jCkBAIC00MjEsNiArNDIxLDE5IEBAIHJlc3RyaWN0 aW9uX2lzX29yX2NsYXVzZShSZXN0cmljdEluZm8gKnJlc3RyaWN0aW5mbykKIAkJcmV0dXJu IGZhbHNlOwogfQogCitib29sCityZXN0cmljdGlvbl9pc19zYW9wX2NsYXVzZShSZXN0cmlj dEluZm8gKnJlc3RyaWN0aW5mbykKK3sKKwlpZiAocmVzdHJpY3RpbmZvLT5jbGF1c2UgJiYg SXNBKHJlc3RyaWN0aW5mby0+Y2xhdXNlLCBTY2FsYXJBcnJheU9wRXhwcikpCisJeworCQlT Y2FsYXJBcnJheU9wRXhwciAqc2FvcCA9IChTY2FsYXJBcnJheU9wRXhwciAqKSByZXN0cmlj dGluZm8tPmNsYXVzZTsKKworCQlpZiAoc2FvcC0+dXNlT3IpCisJCQlyZXR1cm4gdHJ1ZTsK Kwl9CisJcmV0dXJuIGZhbHNlOworfQorCiAvKgogICogcmVzdHJpY3Rpb25faXNfc2VjdXJl bHlfcHJvbW90YWJsZQogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9v cHRpbWl6ZXIuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaAppbmRleCAz NWFiNTc3NTAxLi4yMzJhZmNkMDBjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvb3B0aW1pemVyLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL29wdGltaXplci5o CkBAIC0xNjAsNiArMTYwLDIyIEBAIGV4dGVybiBMaXN0ICpleHBhbmRfZnVuY3Rpb25fYXJn dW1lbnRzKExpc3QgKmFyZ3MsIGJvb2wgaW5jbHVkZV9vdXRfYXJndW1lbnRzLAogCiAvKiBp biB1dGlsL3ByZWR0ZXN0LmM6ICovCiAKKy8qCisgKiBDb250YWlucyBpbmZvcm1hdGlvbiBu ZWVkZWQgdG8gZXh0cmFjdCBmcm9tIHNhb3AgYSBzZXQgb2YgZWxlbWVudHMgd2hpY2ggY2Fu CisgKiBiZSBjb3ZlcmVkIGJ5IHRoZSBwYXJ0aWFsIGluZGV4OgorICogaWQgLSBjYWxsZXIn cyBpZGVudGlmaWNhdGlvbiBvZiB0aGUgaW5kZXguCisgKiBwcmVkaWNhdGUgLSBwcmVkaWNh dGUgZXhwcmVzc2lvbiBvZiB0aGUgaW5kZXgKKyAqIGVsZW1zIC0gcmV0dXJuaW5nIGxpc3Qg b2YgYXJyYXkgZWxlbWVudHMgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhpcyBwcmVkaWNhdGUK KyAqLwordHlwZWRlZiBzdHJ1Y3QgUHJlZGljYXRlc0RhdGEKK3sKKwlpbnQJCWlkOworCU5v ZGUgICAqcHJlZGljYXRlOworCUxpc3QgICAqZWxlbXM7Cit9IFByZWRpY2F0ZXNEYXRhOwor CitleHRlcm4gYm9vbCBzYW9wX2NvdmVyZWRfYnlfcHJlZGljYXRlcyhTY2FsYXJBcnJheU9w RXhwciAqc2FvcCwKKwkJCQkJCQkJCSAgTGlzdCAqcHJlZGljYXRlX2xpc3RzKTsKIGV4dGVy biBib29sIHByZWRpY2F0ZV9pbXBsaWVkX2J5KExpc3QgKnByZWRpY2F0ZV9saXN0LCBMaXN0 ICpjbGF1c2VfbGlzdCwKIAkJCQkJCQkJIGJvb2wgd2Vhayk7CiBleHRlcm4gYm9vbCBwcmVk aWNhdGVfcmVmdXRlZF9ieShMaXN0ICpwcmVkaWNhdGVfbGlzdCwgTGlzdCAqY2xhdXNlX2xp c3QsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcmVzdHJpY3RpbmZvLmgg Yi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcmVzdHJpY3RpbmZvLmgKaW5kZXggMWI0MmM4MzJj NS4uMmNkNWZiZjk0MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Jlc3Ry aWN0aW5mby5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9yZXN0cmljdGluZm8uaApA QCAtMzQsNiArMzQsNyBAQCBleHRlcm4gUmVzdHJpY3RJbmZvICptYWtlX3Jlc3RyaWN0aW5m byhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCSAgIFJlbGlkcyBvdXRlcl9yZWxpZHMp OwogZXh0ZXJuIFJlc3RyaWN0SW5mbyAqY29tbXV0ZV9yZXN0cmljdGluZm8oUmVzdHJpY3RJ bmZvICpyaW5mbywgT2lkIGNvbW1fb3ApOwogZXh0ZXJuIGJvb2wgcmVzdHJpY3Rpb25faXNf b3JfY2xhdXNlKFJlc3RyaWN0SW5mbyAqcmVzdHJpY3RpbmZvKTsKK2V4dGVybiBib29sIHJl c3RyaWN0aW9uX2lzX3Nhb3BfY2xhdXNlKFJlc3RyaWN0SW5mbyAqcmVzdHJpY3RpbmZvKTsK IGV4dGVybiBib29sIHJlc3RyaWN0aW9uX2lzX3NlY3VyZWx5X3Byb21vdGFibGUoUmVzdHJp Y3RJbmZvICpyZXN0cmljdGluZm8sCiAJCQkJCQkJCQkJCSAgIFJlbE9wdEluZm8gKnJlbCk7 CiBleHRlcm4gTGlzdCAqZ2V0X2FjdHVhbF9jbGF1c2VzKExpc3QgKnJlc3RyaWN0aW5mb19s aXN0KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2VsZWN0Lm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2VsZWN0Lm91dAppbmRleCAzM2E2ZGNl YjBlLi4wNzAyMDJiMGYwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3NlbGVjdC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zZWxlY3Qub3V0 CkBAIC05MDcsNiArOTA3LDI4OCBAQCBzZWxlY3QgdW5pcXVlMSwgdW5pcXVlMiBmcm9tIG9u ZWsyCiAgICAgICAgMCB8ICAgICA5OTgKICgyIHJvd3MpCiAKK1NFVCBlbmFibGVfc2Vxc2Nh biBUTyBvZmY7CitTRVQgZW5hYmxlX2luZGV4c2NhbiBUTyBvZmY7IC0tIE9ubHkgQml0bWFw U2NhbiBpcyBhIHN1YmplY3QgbWF0dGVyIGhlcmUKK1NFVCBlbmFibGVfb3JfdHJhbnNmb3Jt YXRpb24gPSAnb2ZmJzsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK1NFTEVDVCBjb3VudCgqKSBG Uk9NIG9uZWsyIFdIRVJFIHN0cmluZ3UxID0gJ0EnIE9SIHN0cmluZ3UxID0gJ0onOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisg ICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiBvbmVrMgorICAgICAgICAgUmVjaGVjayBDb25k OiAoKHN0cmluZ3UxIDwgJ0InOjpuYW1lKSBPUiAoc3RyaW5ndTEgPSAnSic6Om5hbWUpKQor ICAgICAgICAgRmlsdGVyOiAoKHN0cmluZ3UxID0gJ0EnOjpuYW1lKSBPUiAoc3RyaW5ndTEg PSAnSic6Om5hbWUpKQorICAgICAgICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAgICAgICAt PiAgQml0bWFwIEluZGV4IFNjYW4gb24gb25lazJfdTJfcHJ0bAorICAgICAgICAgICAgICAg LT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIG9uZWsyX3N0dTFfcHJ0bAorICAgICAgICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKHN0cmluZ3UxID0gJ0onOjpuYW1lKQorKDggcm93cykK KworLS0gV2l0aG91dCB0aGUgdHJhbnNmb3JtYXRpb24gb25seSBzZXFzY2FuIHBvc3NpYmxl IGhlcmUKK2V4cGxhaW4gKGNvc3RzIG9mZikKK1NFTEVDVCB1bmlxdWUyLCBzdHJpbmd1MSBG Uk9NIG9uZWsyCitXSEVSRSB1bmlxdWUyIDwgMSBBTkQgc3RyaW5ndTEgSU4gKCdBJywnSicp IEFORCBzdHJpbmd1MSA8ICdaJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2Vx IFNjYW4gb24gb25lazIKKyAgIEZpbHRlcjogKCh1bmlxdWUyIDwgMSkgQU5EIChzdHJpbmd1 MSA9IEFOWSAoJ3tBLEp9Jzo6bmFtZVtdKSkgQU5EIChzdHJpbmd1MSA8ICdaJzo6bmFtZSkp CisoMiByb3dzKQorCistLSBVc2UgcGFydGlhbCBpbmRleGVzCitleHBsYWluIChjb3N0cyBv ZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBvbmVrMgorV0hFUkUgc3RyaW5ndTEgSU4gKCdC JywnSicpIEFORCAoc3RyaW5ndTEgPSAnQScgT1IgdW5pcXVlMSA9IDEpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEJp dG1hcCBIZWFwIFNjYW4gb24gb25lazIKKyAgICAgICAgIFJlY2hlY2sgQ29uZDogKChzdHJp bmd1MSA8ICdCJzo6bmFtZSkgT1IgKHVuaXF1ZTEgPSAxKSkKKyAgICAgICAgIEZpbHRlcjog KChzdHJpbmd1MSA9IEFOWSAoJ3tCLEp9Jzo6bmFtZVtdKSkgQU5EICgoc3RyaW5ndTEgPSAn QSc6Om5hbWUpIE9SICh1bmlxdWUxID0gMSkpKQorICAgICAgICAgLT4gIEJpdG1hcE9yCisg ICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gb25lazJfdTJfcHJ0bAor ICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIG9uZWsyX3UxX3BydGwK KyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxID0gMSkKKyg4IHJv d3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK1NFTEVDVCB1bmlxdWUyLCBzdHJpbmd1MSBG Uk9NIG9uZWsyCitXSEVSRSB1bmlxdWUxIDwgMSBPUiAoc3RyaW5ndTEgPSAnQScgT1Igc3Ry aW5ndTEgPSAnSicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24gb25lazIK KyAgIFJlY2hlY2sgQ29uZDogKCh1bmlxdWUxIDwgMSkgT1IgKHN0cmluZ3UxIDwgJ0InOjpu YW1lKSBPUiAoc3RyaW5ndTEgPSAnSic6Om5hbWUpKQorICAgRmlsdGVyOiAoKHVuaXF1ZTEg PCAxKSBPUiAoc3RyaW5ndTEgPSAnQSc6Om5hbWUpIE9SIChzdHJpbmd1MSA9ICdKJzo6bmFt ZSkpCisgICAtPiAgQml0bWFwT3IKKyAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBv biBvbmVrMl91MV9wcnRsCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMSA8 IDEpCisgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gb25lazJfdTJfcHJ0bAor ICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIG9uZWsyX3N0dTFfcHJ0bAorICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKHN0cmluZ3UxID0gJ0onOjpuYW1lKQorKDkgcm93 cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorU0VMRUNUIHVuaXF1ZTIsIHN0cmluZ3UxIEZS T00gb25lazIKK1dIRVJFIHVuaXF1ZTEgPSAxIE9SIHVuaXF1ZTIgPSBQSSgpOjppbnRlZ2Vy OworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24g b25lazIKKyAgIEZpbHRlcjogKCh1bmlxdWUxID0gMSkgT1IgKHVuaXF1ZTIgPSAzKSkKKygy IHJvd3MpCisKK1JFU0VUIGVuYWJsZV9vcl90cmFuc2Zvcm1hdGlvbjsKKy0tIE9SIDwtPiBB TlkgdHJhbnNmb3JtYXRpb24gbXVzdCBmaW5kIGEgcGF0aCB3aXRoIHBhcnRpYWwgaW5kZXhl cyBzY2FuCistLSByZWdhcmRsZXNzIHRoZSBjbGF1c2UgcmVwcmVzZW50YXRpb24uCitleHBs YWluIChjb3N0cyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBvbmVrMiBXSEVSRSBzdHJp bmd1MSA9ICdBJyBPUiBzdHJpbmd1MSA9ICdKJzsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisg ICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiBvbmVrMgorICAgICAgICAgUmVjaGVjayBDb25k OiAoKHN0cmluZ3UxID0gQU5ZICgne0p9Jzo6bmFtZVtdKSkgT1IgKHN0cmluZ3UxIDwgJ0In OjpuYW1lKSkKKyAgICAgICAgIEZpbHRlcjogKHN0cmluZ3UxID0gQU5ZICgne0EsSn0nOjpu YW1lW10pKQorICAgICAgICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAgICAgICAtPiAgQml0 bWFwIEluZGV4IFNjYW4gb24gb25lazJfc3R1MV9wcnRsCisgICAgICAgICAgICAgICAgICAg ICBJbmRleCBDb25kOiAoc3RyaW5ndTEgPSBBTlkgKCd7Sn0nOjpuYW1lW10pKQorICAgICAg ICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIG9uZWsyX3UyX3BydGwKKyg4IHJv d3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIG9uZWsy IFdIRVJFIHN0cmluZ3UxIElOICgnQScsJ0onKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisg ICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiBvbmVrMgorICAgICAgICAgUmVjaGVjayBDb25k OiAoKHN0cmluZ3UxID0gQU5ZICgne0p9Jzo6bmFtZVtdKSkgT1IgKHN0cmluZ3UxIDwgJ0In OjpuYW1lKSkKKyAgICAgICAgIEZpbHRlcjogKHN0cmluZ3UxID0gQU5ZICgne0EsSn0nOjpu YW1lW10pKQorICAgICAgICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAgICAgICAtPiAgQml0 bWFwIEluZGV4IFNjYW4gb24gb25lazJfc3R1MV9wcnRsCisgICAgICAgICAgICAgICAgICAg ICBJbmRleCBDb25kOiAoc3RyaW5ndTEgPSBBTlkgKCd7Sn0nOjpuYW1lW10pKQorICAgICAg ICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIG9uZWsyX3UyX3BydGwKKyg4IHJv d3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIG9uZWsy IFdIRVJFIHN0cmluZ3UxID0gQU5ZICgne0EsSn0nKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRl CisgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiBvbmVrMgorICAgICAgICAgUmVjaGVjayBD b25kOiAoKHN0cmluZ3UxID0gQU5ZICgne0p9Jzo6bmFtZVtdKSkgT1IgKHN0cmluZ3UxIDwg J0InOjpuYW1lKSkKKyAgICAgICAgIEZpbHRlcjogKHN0cmluZ3UxID0gQU5ZICgne0EsSn0n OjpuYW1lW10pKQorICAgICAgICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAgICAgICAtPiAg Qml0bWFwIEluZGV4IFNjYW4gb24gb25lazJfc3R1MV9wcnRsCisgICAgICAgICAgICAgICAg ICAgICBJbmRleCBDb25kOiAoc3RyaW5ndTEgPSBBTlkgKCd7Sn0nOjpuYW1lW10pKQorICAg ICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIG9uZWsyX3UyX3BydGwKKyg4 IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIG9u ZWsyIFdIRVJFIHN0cmluZ3UxIElOICgnQScpIE9SIHN0cmluZ3UxIElOICgnSicpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIG9uZWsyCisg ICAgICAgICBSZWNoZWNrIENvbmQ6ICgoc3RyaW5ndTEgPSBBTlkgKCd7Sn0nOjpuYW1lW10p KSBPUiAoc3RyaW5ndTEgPCAnQic6Om5hbWUpKQorICAgICAgICAgRmlsdGVyOiAoc3RyaW5n dTEgPSBBTlkgKCd7QSxKfSc6Om5hbWVbXSkpCisgICAgICAgICAtPiAgQml0bWFwT3IKKyAg ICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBvbmVrMl9zdHUxX3BydGwK KyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChzdHJpbmd1MSA9IEFOWSAoJ3tK fSc6Om5hbWVbXSkpCisgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24g b25lazJfdTJfcHJ0bAorKDggcm93cykKKworLS0gRG9uJ3Qgc2NhbiBwYXJ0aWFsIGluZGV4 ZXMgYmVjYXVzZSBvZiBleHRyYSB2YWx1ZS4KK2V4cGxhaW4gKGNvc3RzIG9mZikKK1NFTEVD VCBjb3VudCgqKSBGUk9NIG9uZWsyIFdIRVJFIHN0cmluZ3UxIElOICgnQScsICdKJywgJ0Mn KTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgU2VxIFNjYW4gb24gb25lazIKKyAgICAgICAg IEZpbHRlcjogKHN0cmluZ3UxID0gQU5ZICgne0EsSixDfSc6Om5hbWVbXSkpCisoMyByb3dz KQorCitleHBsYWluIChjb3N0cyBvZmYpCitTRUxFQ1QgdW5pcXVlMiBGUk9NIG9uZWsyCitX SEVSRSBzdHJpbmd1MSBJTiAoJ0EnLCAnQScpIEFORCAoc3RyaW5ndTEgPSAnQScgT1Igc3Ry aW5ndTEgPSAnQScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIG9u ZWsyCisgICBSZWNoZWNrIENvbmQ6IChzdHJpbmd1MSA8ICdCJzo6bmFtZSkKKyAgIEZpbHRl cjogKChzdHJpbmd1MSA9IEFOWSAoJ3tBLEF9Jzo6bmFtZVtdKSkgQU5EIChzdHJpbmd1MSA9 IEFOWSAoJ3tBLEF9Jzo6bmFtZVtdKSkpCisgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24g b25lazJfdTJfcHJ0bAorKDQgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorU0VMRUNU IHVuaXF1ZTIsIHN0cmluZ3UxIEZST00gb25lazIKK1dIRVJFIHVuaXF1ZTIgPCAxIEFORCBz dHJpbmd1MSBJTiAoJ0EnLCdKJykgQU5EIHN0cmluZ3UxIDwgJ1onOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24gb25l azIKKyAgIFJlY2hlY2sgQ29uZDogKCgoc3RyaW5ndTEgPSBBTlkgKCd7Sn0nOjpuYW1lW10p KSBBTkQgKHN0cmluZ3UxIDwgJ1onOjpuYW1lKSkgT1IgKCh1bmlxdWUyIDwgMSkgQU5EIChz dHJpbmd1MSA8ICdCJzo6bmFtZSkpKQorICAgRmlsdGVyOiAoKHVuaXF1ZTIgPCAxKSBBTkQg KHN0cmluZ3UxID0gQU5ZICgne0EsSn0nOjpuYW1lW10pKSkKKyAgIC0+ICBCaXRtYXBPcgor ICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIG9uZWsyX3N0dTFfcHJ0bAorICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKChzdHJpbmd1MSA9IEFOWSAoJ3tKfSc6Om5hbWVb XSkpIEFORCAoc3RyaW5ndTEgPCAnWic6Om5hbWUpKQorICAgICAgICAgLT4gIEJpdG1hcCBJ bmRleCBTY2FuIG9uIG9uZWsyX3UyX3BydGwKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6 ICh1bmlxdWUyIDwgMSkKKyg4IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK1NFTEVD VCB1bmlxdWUyLCBzdHJpbmd1MSBGUk9NIG9uZWsyCitXSEVSRSB1bmlxdWUxID0gMSBPUiB1 bmlxdWUxID0gUEkoKTo6aW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24gb25lazIKKyAgIFJl Y2hlY2sgQ29uZDogKCh1bmlxdWUxID0gMykgT1IgKHVuaXF1ZTEgPSAxKSkKKyAgIC0+ICBC aXRtYXBPcgorICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIG9uZWsyX3UxX3By dGwKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxID0gMykKKyAgICAgICAg IC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBvbmVrMl91MV9wcnRsCisgICAgICAgICAgICAg ICBJbmRleCBDb25kOiAodW5pcXVlMSA9IDEpCisoNyByb3dzKQorCitleHBsYWluIChjb3N0 cyBvZmYpCitTRUxFQ1QgdW5pcXVlMiwgc3RyaW5ndTEgRlJPTSBvbmVrMgorV0hFUkUgdW5p cXVlMSBJTiAoMSwgUEkoKTo6aW50ZWdlcik7IC0tIFRPRE86IHdoeSBpdCBpcyBkaWZmZXJz IGZyb20gcHJldmlvdXMgZXhhbXBsZT8KKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2Fu IG9uIG9uZWsyCisgICBSZWNoZWNrIENvbmQ6ICh1bmlxdWUxID0gQU5ZICgnezEsM30nOjpp bnRlZ2VyW10pKQorICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIG9uZWsyX3UxX3BydGwK KyAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxID0gQU5ZICgnezEsM30nOjppbnRlZ2Vy W10pKQorKDQgcm93cykKKworLS0gRG9uJ3QgYXBwbHkgdGhlIG9wdGltaXphdGlvbiB0byBj bGF1c2VzLCBjb250YWluaW5nIHZvbGF0aWxlIGZ1bmN0aW9ucworRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUIHVuaXF1ZTIsc3RyaW5ndTEgRlJPTSBvbmVrMgorV0hFUkUgdW5pcXVl MSA9IChyYW5kb20oKSoyKTo6aW50ZWdlciBPUiB1bmlxdWUxID0gKHJhbmRvbSgpKjMpOjpp bnRlZ2VyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBTZXEgU2NhbiBvbiBvbmVrMgorICAgRmlsdGVyOiAoKHVuaXF1ZTEgPSAoKHJh bmRvbSgpICogJzInOjpkb3VibGUgcHJlY2lzaW9uKSk6OmludGVnZXIpIE9SICh1bmlxdWUx ID0gKChyYW5kb20oKSAqICczJzo6ZG91YmxlIHByZWNpc2lvbikpOjppbnRlZ2VyKSkKKygy IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCB1bmlxdWUyLHN0cmluZ3Ux IEZST00gb25lazIKK1dIRVJFIHVuaXF1ZTEgSU4gKChyYW5kb20oKSoyKTo6aW50ZWdlciwg KHJhbmRvbSgpKjMpOjppbnRlZ2VyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gb25lazIKKyAgIEZpbHRlcjogKHVuaXF1 ZTEgPSBBTlkgKEFSUkFZWygocmFuZG9tKCkgKiAnMic6OmRvdWJsZSBwcmVjaXNpb24pKTo6 aW50ZWdlciwgKChyYW5kb20oKSAqICczJzo6ZG91YmxlIHByZWNpc2lvbikpOjppbnRlZ2Vy XSkpCisoMiByb3dzKQorCistLSBDb21iaW5lIGRpZmZlcmVudCBzYW9wcy4gU29lIG9mIHRo ZW0gZG9lc250JyBmaXQgYSBzZXQgb2YgcGFydGlhbCBpbmRleGVzLAorLS0gYnV0IG90aGVy IGZpdHMuCistLSBVbmZvcnR1bmF0ZWx5LCB3ZSBkb24ndCBjb21iaW5lIHNhb3AgYW5kIE9S IGNsYXVzZXMgc28gZmFyLgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIHVuaXF1ZTIs c3RyaW5ndTEgRlJPTSBvbmVrMgorV0hFUkUKKyAgdW5pcXVlMSBJTiAoMSwyLDIxKSBBTkQK KyAgKHN0cmluZ3UxIElOICgnQScsJ0onKSBPUiB1bmlxdWUxIElOICgzLDQpIE9SIHN0cmlu Z3UxID0gJ0onKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIG9uZWsyCisgICBSZWNo ZWNrIENvbmQ6ICgoc3RyaW5ndTEgPSBBTlkgKCd7Sn0nOjpuYW1lW10pKSBPUiAoc3RyaW5n dTEgPCAnQic6Om5hbWUpIE9SICgodW5pcXVlMSA9IEFOWSAoJ3szLDR9Jzo6aW50ZWdlcltd KSkgQU5EICh1bmlxdWUxID0gQU5ZICgnezEsMiwyMX0nOjppbnRlZ2VyW10pKSkgT1IgKHN0 cmluZ3UxID0gJ0onOjpuYW1lKSkKKyAgIEZpbHRlcjogKCh1bmlxdWUxID0gQU5ZICgnezEs MiwyMX0nOjppbnRlZ2VyW10pKSBBTkQgKChzdHJpbmd1MSA9IEFOWSAoJ3tBLEp9Jzo6bmFt ZVtdKSkgT1IgKHVuaXF1ZTEgPSBBTlkgKCd7Myw0fSc6OmludGVnZXJbXSkpIE9SIChzdHJp bmd1MSA9ICdKJzo6bmFtZSkpKQorICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAtPiAgQml0 bWFwIEluZGV4IFNjYW4gb24gb25lazJfc3R1MV9wcnRsCisgICAgICAgICAgICAgICBJbmRl eCBDb25kOiAoc3RyaW5ndTEgPSBBTlkgKCd7Sn0nOjpuYW1lW10pKQorICAgICAgICAgLT4g IEJpdG1hcCBJbmRleCBTY2FuIG9uIG9uZWsyX3UyX3BydGwKKyAgICAgICAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiBvbmVrMl91MV9wcnRsCisgICAgICAgICAgICAgICBJbmRleCBD b25kOiAoKHVuaXF1ZTEgPSBBTlkgKCd7Myw0fSc6OmludGVnZXJbXSkpIEFORCAodW5pcXVl MSA9IEFOWSAoJ3sxLDIsMjF9Jzo6aW50ZWdlcltdKSkpCisgICAgICAgICAtPiAgQml0bWFw IEluZGV4IFNjYW4gb24gb25lazJfc3R1MV9wcnRsCisgICAgICAgICAgICAgICBJbmRleCBD b25kOiAoc3RyaW5ndTEgPSAnSic6Om5hbWUpCisoMTEgcm93cykKKworLS0gQ2hlY2sgcmVj dXJzaXZlIGNvbWJpbmF0aW9uIG9mIE9SIGFuZCBTQU9QIGV4cHJlc3Npb25zCitleHBsYWlu IChjb3N0cyBvZmYpCitTRUxFQ1QgdW5pcXVlMiwgc3RyaW5ndTEgRlJPTSBvbmVrMgorV0hF UkUgdW5pcXVlMSA8IDEgT1IgKHN0cmluZ3UxID0gJ0EnIE9SIHN0cmluZ3UxID0gJ0onKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24g b25lazIKKyAgIFJlY2hlY2sgQ29uZDogKChzdHJpbmd1MSA9IEFOWSAoJ3tKfSc6Om5hbWVb XSkpIE9SIChzdHJpbmd1MSA8ICdCJzo6bmFtZSkgT1IgKHVuaXF1ZTEgPCAxKSkKKyAgIEZp bHRlcjogKChzdHJpbmd1MSA9IEFOWSAoJ3tBLEp9Jzo6bmFtZVtdKSkgT1IgKHVuaXF1ZTEg PCAxKSkKKyAgIC0+ICBCaXRtYXBPcgorICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2Fu IG9uIG9uZWsyX3N0dTFfcHJ0bAorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHN0cmlu Z3UxID0gQU5ZICgne0p9Jzo6bmFtZVtdKSkKKyAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXgg U2NhbiBvbiBvbmVrMl91Ml9wcnRsCisgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4g b24gb25lazJfdTFfcHJ0bAorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTEg PCAxKQorKDkgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorU0VMRUNUIHVuaXF1ZTIs IHN0cmluZ3UxIEZST00gb25lazIKK1dIRVJFICh1bmlxdWUxIDwgMSBPUiBzdHJpbmd1MSBJ TiAoJ0EnLCdKJykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFw IEhlYXAgU2NhbiBvbiBvbmVrMgorICAgUmVjaGVjayBDb25kOiAoKHN0cmluZ3UxID0gQU5Z ICgne0p9Jzo6bmFtZVtdKSkgT1IgKHN0cmluZ3UxIDwgJ0InOjpuYW1lKSBPUiAodW5pcXVl MSA8IDEpKQorICAgRmlsdGVyOiAoKHN0cmluZ3UxID0gQU5ZICgne0EsSn0nOjpuYW1lW10p KSBPUiAodW5pcXVlMSA8IDEpKQorICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAtPiAgQml0 bWFwIEluZGV4IFNjYW4gb24gb25lazJfc3R1MV9wcnRsCisgICAgICAgICAgICAgICBJbmRl eCBDb25kOiAoc3RyaW5ndTEgPSBBTlkgKCd7Sn0nOjpuYW1lW10pKQorICAgICAgICAgLT4g IEJpdG1hcCBJbmRleCBTY2FuIG9uIG9uZWsyX3UyX3BydGwKKyAgICAgICAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiBvbmVrMl91MV9wcnRsCisgICAgICAgICAgICAgICBJbmRleCBD b25kOiAodW5pcXVlMSA8IDEpCisoOSByb3dzKQorCistLSBBbHRob3VnaCBTQU9QIGRvZXNu J3QgZml0IHBhcnRpYWwgaW5kZXhlcyBmdWxseSwgd2UgY2FuIHVzZSBhbmRlZCBPUiBjbGF1 c2UKKy0tIHRvIHNjYW4gYW5vdGhlciBjb3VwbGUgb2YgcGFydGlhbCBpbmRleGVzLgorZXhw bGFpbiAoY29zdHMgb2ZmKQorU0VMRUNUIGNvdW50KCopIEZST00gb25lazIKK1dIRVJFIHN0 cmluZ3UxIElOICgnQicsJ0onKSBBTkQgKHN0cmluZ3UxID0gJ0EnIE9SIHVuaXF1ZTEgPSAx KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdh dGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIG9uZWsyCisgICAgICAgICBSZWNoZWNr IENvbmQ6ICgoc3RyaW5ndTEgPCAnQic6Om5hbWUpIE9SICh1bmlxdWUxID0gMSkpCisgICAg ICAgICBGaWx0ZXI6ICgoc3RyaW5ndTEgPSBBTlkgKCd7QixKfSc6Om5hbWVbXSkpIEFORCAo KHN0cmluZ3UxID0gJ0EnOjpuYW1lKSBPUiAodW5pcXVlMSA9IDEpKSkKKyAgICAgICAgIC0+ ICBCaXRtYXBPcgorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIG9u ZWsyX3UyX3BydGwKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBv bmVrMl91MV9wcnRsCisgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVl MSA9IDEpCisoOCByb3dzKQorCitSRVNFVCBlbmFibGVfaW5kZXhzY2FuOworUkVTRVQgZW5h YmxlX3NlcXNjYW47CiAtLQogLS0gVGVzdCBzb21lIGNvcm5lciBjYXNlcyB0aGF0IGhhdmUg YmVlbiBrbm93biB0byBjb25mdXNlIHRoZSBwbGFubmVyCiAtLQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvc2VsZWN0LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Nl bGVjdC5zcWwKaW5kZXggMDE5ZjFlNzY3My4uMGU2NTBhMjMwMSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvc2VsZWN0LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9zZWxlY3Quc3FsCkBAIC0yMzQsNiArMjM0LDg4IEBAIHNlbGVjdCB1bmlxdWUxLCB1bmlx dWUyIGZyb20gb25lazIKIHNlbGVjdCB1bmlxdWUxLCB1bmlxdWUyIGZyb20gb25lazIKICAg d2hlcmUgKHVuaXF1ZTIgPSAxMSBhbmQgc3RyaW5ndTEgPCAnQicpIG9yIHVuaXF1ZTEgPSAw OwogCitTRVQgZW5hYmxlX3NlcXNjYW4gVE8gb2ZmOworU0VUIGVuYWJsZV9pbmRleHNjYW4g VE8gb2ZmOyAtLSBPbmx5IEJpdG1hcFNjYW4gaXMgYSBzdWJqZWN0IG1hdHRlciBoZXJlCitT RVQgZW5hYmxlX29yX3RyYW5zZm9ybWF0aW9uID0gJ29mZic7CitleHBsYWluIChjb3N0cyBv ZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBvbmVrMiBXSEVSRSBzdHJpbmd1MSA9ICdBJyBP UiBzdHJpbmd1MSA9ICdKJzsKKy0tIFdpdGhvdXQgdGhlIHRyYW5zZm9ybWF0aW9uIG9ubHkg c2Vxc2NhbiBwb3NzaWJsZSBoZXJlCitleHBsYWluIChjb3N0cyBvZmYpCitTRUxFQ1QgdW5p cXVlMiwgc3RyaW5ndTEgRlJPTSBvbmVrMgorV0hFUkUgdW5pcXVlMiA8IDEgQU5EIHN0cmlu Z3UxIElOICgnQScsJ0onKSBBTkQgc3RyaW5ndTEgPCAnWic7CistLSBVc2UgcGFydGlhbCBp bmRleGVzCitleHBsYWluIChjb3N0cyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBvbmVr MgorV0hFUkUgc3RyaW5ndTEgSU4gKCdCJywnSicpIEFORCAoc3RyaW5ndTEgPSAnQScgT1Ig dW5pcXVlMSA9IDEpOworZXhwbGFpbiAoY29zdHMgb2ZmKQorU0VMRUNUIHVuaXF1ZTIsIHN0 cmluZ3UxIEZST00gb25lazIKK1dIRVJFIHVuaXF1ZTEgPCAxIE9SIChzdHJpbmd1MSA9ICdB JyBPUiBzdHJpbmd1MSA9ICdKJyk7CitleHBsYWluIChjb3N0cyBvZmYpCitTRUxFQ1QgdW5p cXVlMiwgc3RyaW5ndTEgRlJPTSBvbmVrMgorV0hFUkUgdW5pcXVlMSA9IDEgT1IgdW5pcXVl MiA9IFBJKCk6OmludGVnZXI7CitSRVNFVCBlbmFibGVfb3JfdHJhbnNmb3JtYXRpb247CisK Ky0tIE9SIDwtPiBBTlkgdHJhbnNmb3JtYXRpb24gbXVzdCBmaW5kIGEgcGF0aCB3aXRoIHBh cnRpYWwgaW5kZXhlcyBzY2FuCistLSByZWdhcmRsZXNzIHRoZSBjbGF1c2UgcmVwcmVzZW50 YXRpb24uCitleHBsYWluIChjb3N0cyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBvbmVr MiBXSEVSRSBzdHJpbmd1MSA9ICdBJyBPUiBzdHJpbmd1MSA9ICdKJzsKK2V4cGxhaW4gKGNv c3RzIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIG9uZWsyIFdIRVJFIHN0cmluZ3UxIElO ICgnQScsJ0onKTsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9N IG9uZWsyIFdIRVJFIHN0cmluZ3UxID0gQU5ZICgne0EsSn0nKTsKK2V4cGxhaW4gKGNvc3Rz IG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIG9uZWsyIFdIRVJFIHN0cmluZ3UxIElOICgn QScpIE9SIHN0cmluZ3UxIElOICgnSicpOworCistLSBEb24ndCBzY2FuIHBhcnRpYWwgaW5k ZXhlcyBiZWNhdXNlIG9mIGV4dHJhIHZhbHVlLgorZXhwbGFpbiAoY29zdHMgb2ZmKQorU0VM RUNUIGNvdW50KCopIEZST00gb25lazIgV0hFUkUgc3RyaW5ndTEgSU4gKCdBJywgJ0onLCAn QycpOworZXhwbGFpbiAoY29zdHMgb2ZmKQorU0VMRUNUIHVuaXF1ZTIgRlJPTSBvbmVrMgor V0hFUkUgc3RyaW5ndTEgSU4gKCdBJywgJ0EnKSBBTkQgKHN0cmluZ3UxID0gJ0EnIE9SIHN0 cmluZ3UxID0gJ0EnKTsKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorU0VMRUNUIHVuaXF1ZTIs IHN0cmluZ3UxIEZST00gb25lazIKK1dIRVJFIHVuaXF1ZTIgPCAxIEFORCBzdHJpbmd1MSBJ TiAoJ0EnLCdKJykgQU5EIHN0cmluZ3UxIDwgJ1onOworZXhwbGFpbiAoY29zdHMgb2ZmKQor U0VMRUNUIHVuaXF1ZTIsIHN0cmluZ3UxIEZST00gb25lazIKK1dIRVJFIHVuaXF1ZTEgPSAx IE9SIHVuaXF1ZTEgPSBQSSgpOjppbnRlZ2VyOworZXhwbGFpbiAoY29zdHMgb2ZmKQorU0VM RUNUIHVuaXF1ZTIsIHN0cmluZ3UxIEZST00gb25lazIKK1dIRVJFIHVuaXF1ZTEgSU4gKDEs IFBJKCk6OmludGVnZXIpOyAtLSBUT0RPOiB3aHkgaXQgaXMgZGlmZmVycyBmcm9tIHByZXZp b3VzIGV4YW1wbGU/CisKKy0tIERvbid0IGFwcGx5IHRoZSBvcHRpbWl6YXRpb24gdG8gY2xh dXNlcywgY29udGFpbmluZyB2b2xhdGlsZSBmdW5jdGlvbnMKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCB1bmlxdWUyLHN0cmluZ3UxIEZST00gb25lazIKK1dIRVJFIHVuaXF1ZTEg PSAocmFuZG9tKCkqMik6OmludGVnZXIgT1IgdW5pcXVlMSA9IChyYW5kb20oKSozKTo6aW50 ZWdlcjsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCB1bmlxdWUyLHN0cmluZ3UxIEZS T00gb25lazIKK1dIRVJFIHVuaXF1ZTEgSU4gKChyYW5kb20oKSoyKTo6aW50ZWdlciwgKHJh bmRvbSgpKjMpOjppbnRlZ2VyKTsKKworLS0gQ29tYmluZSBkaWZmZXJlbnQgc2FvcHMuIFNv ZSBvZiB0aGVtIGRvZXNudCcgZml0IGEgc2V0IG9mIHBhcnRpYWwgaW5kZXhlcywKKy0tIGJ1 dCBvdGhlciBmaXRzLgorLS0gVW5mb3J0dW5hdGVseSwgd2UgZG9uJ3QgY29tYmluZSBzYW9w IGFuZCBPUiBjbGF1c2VzIHNvIGZhci4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCB1 bmlxdWUyLHN0cmluZ3UxIEZST00gb25lazIKK1dIRVJFCisgIHVuaXF1ZTEgSU4gKDEsMiwy MSkgQU5ECisgIChzdHJpbmd1MSBJTiAoJ0EnLCdKJykgT1IgdW5pcXVlMSBJTiAoMyw0KSBP UiBzdHJpbmd1MSA9ICdKJyk7CisKKy0tIENoZWNrIHJlY3Vyc2l2ZSBjb21iaW5hdGlvbiBv ZiBPUiBhbmQgU0FPUCBleHByZXNzaW9ucworZXhwbGFpbiAoY29zdHMgb2ZmKQorU0VMRUNU IHVuaXF1ZTIsIHN0cmluZ3UxIEZST00gb25lazIKK1dIRVJFIHVuaXF1ZTEgPCAxIE9SIChz dHJpbmd1MSA9ICdBJyBPUiBzdHJpbmd1MSA9ICdKJyk7CitleHBsYWluIChjb3N0cyBvZmYp CitTRUxFQ1QgdW5pcXVlMiwgc3RyaW5ndTEgRlJPTSBvbmVrMgorV0hFUkUgKHVuaXF1ZTEg PCAxIE9SIHN0cmluZ3UxIElOICgnQScsJ0onKSk7CistLSBBbHRob3VnaCBTQU9QIGRvZXNu J3QgZml0IHBhcnRpYWwgaW5kZXhlcyBmdWxseSwgd2UgY2FuIHVzZSBhbmRlZCBPUiBjbGF1 c2UKKy0tIHRvIHNjYW4gYW5vdGhlciBjb3VwbGUgb2YgcGFydGlhbCBpbmRleGVzLgorZXhw bGFpbiAoY29zdHMgb2ZmKQorU0VMRUNUIGNvdW50KCopIEZST00gb25lazIKK1dIRVJFIHN0 cmluZ3UxIElOICgnQicsJ0onKSBBTkQgKHN0cmluZ3UxID0gJ0EnIE9SIHVuaXF1ZTEgPSAx KTsKKworUkVTRVQgZW5hYmxlX2luZGV4c2NhbjsKK1JFU0VUIGVuYWJsZV9zZXFzY2FuOwor CiAtLQogLS0gVGVzdCBzb21lIGNvcm5lciBjYXNlcyB0aGF0IGhhdmUgYmVlbiBrbm93biB0 byBjb25mdXNlIHRoZSBwbGFubmVyCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApp bmRleCBhZGFlNjY4YjM3Li5hMWQ0MzI4M2RiIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdApAQCAtMjEzOCw2ICsyMTM4LDcgQEAgUHJlZEl0ZXJJbmZvRGF0YQogUHJlZFhhY3RM aXN0CiBQcmVkaWNhdGVMb2NrRGF0YQogUHJlZGljYXRlTG9ja1RhcmdldFR5cGUKK1ByZWRp Y2F0ZXNEYXRhCiBQcmVmZXRjaEJ1ZmZlclJlc3VsdAogUHJlcFBhcmFsbGVsUmVzdG9yZVB0 clR5cGUKIFByZXBhcmVTdG10Ci0tIAoyLjQzLjAKCg== --------------06Ru00R1NuGmAfNQAzkrAlJv--