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 1tKxiq-00BmQs-OL for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Dec 2024 10:44:09 +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 1tKxin-002Kyu-Q6 for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Dec 2024 10:44:07 +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 1tKxin-002KxK-0X for pgsql-hackers@lists.postgresql.org; Tue, 10 Dec 2024 10:44:06 +0000 Received: from mail-yb1-xb32.google.com ([2607:f8b0:4864:20::b32]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1tKxil-0024H4-J1 for pgsql-hackers@postgresql.org; Tue, 10 Dec 2024 10:44:04 +0000 Received: by mail-yb1-xb32.google.com with SMTP id 3f1490d57ef6-e3985aabf43so4126605276.3 for ; Tue, 10 Dec 2024 02:44:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=datadoghq.com; s=google; t=1733827443; x=1734432243; 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=OYhy7ie1PfTyTB8g07D43ncKEJKUiwIl8JruWILbwd8=; b=Kwu3ANBQS8Ke6OdxGCOGOPgbzCDkBrZQbunHDVNjGHELKSUzusNifHw1vNFKEyD+TG a6trtfO5SYkIhyfbsDcgfj5amJtuASMt3YdiPvlOIA4piUENPlV7aeZ+Sq5WSGvGdGZH xCe/XE9d+XzlZjGasZOb2P1Bqn9aHpeWgDEIE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733827443; x=1734432243; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=OYhy7ie1PfTyTB8g07D43ncKEJKUiwIl8JruWILbwd8=; b=Wn0N8rmQx5ZEAUj4M8gQc4mlW1J0wHZD9yW3ucYXmj/V3zvCqsmbr+nenwcrEODW/S dscdN48jD/Rr7Xnpx0vg1MLWa/l+ScSgIB2AZgzivehoI+3gJOJKSGfPy+OiTW2/+4wS RbF4gy9KnesUKBwk7uIEIGaRPzuG3417ykYRWPEiDV69J6UL0CROs9OhwJ6O7Kr2GJ7v boEBN+cnjHiQrKr2aSLBUwZagW33crDKC3F7BlzMNNQUi0GEwjfLbcViLc762rqYzobF y0SoYe9QGW7Kg/x9xffKhJ6UMHvP5IWqqmP0hXTN2rDf8sQZrW5v5aYWG6z6gzPz+07c Hr3Q== X-Forwarded-Encrypted: i=1; AJvYcCXTOZHqqgUiXz0jZf5pILm5l8Tx5nLRHlNcmMRqnMpSgFC5AiEcCqloiSab7B3v+hxP68uIrraQ0iBDsrjU@postgresql.org X-Gm-Message-State: AOJu0YxuTYXgydhlgmbOzmR7jCWf2/g2dUSsiiW2CR1mGxtHGU/AQA3r vPMbJkdZIDB7HeHv1/CT2qn/sVY1XlumChShRiO6IgDJKMMaFyuMM/IiLSvHv5Ty7tzDB1inB5z RMNiTrzsI/zTsIv0Vg5pPwaBo/3lGOv/EJ+gGVg== X-Gm-Gg: ASbGncti0/LzJA0jF441r9M9ZM14nS7x29494ZmfLFOdYNRG/1L3qMUCg+qFANl6z2p H1yzFNpweo2uGff91PrarvajoCUxbV6rYPfA= X-Google-Smtp-Source: AGHT+IGIM0axRcFwUNnCzWRx9OjouQokzZrmkt62ND73WowM0xV+SLrsvbBAVYofplfXrJ/VfaXhox00M7C74CEH4Zw= X-Received: by 2002:a05:6902:218a:b0:e39:8826:7a9c with SMTP id 3f1490d57ef6-e3a59af96d4mr3424360276.15.1733827442446; Tue, 10 Dec 2024 02:44:02 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Anthonin Bonnefoy Date: Tue, 10 Dec 2024 11:43:50 +0100 Message-ID: Subject: Re: Add Pipelining support in psql To: Jelte Fennema-Nio Cc: Michael Paquier , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000d02eba0628e828c3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d02eba0628e828c3 Content-Type: text/plain; charset="UTF-8" An improved version with simplifications and refinements. num_queries (2nd element in the pipeline status prompt) is now used to track queued queries that were not flushed (with a flush request or sync) to the server. It used to count both unflushed queries and flushed queries. Code in ExecQueryAndProcessResults should be simpler now. - DiscardAbortedPipelineResults function handles both discarding of results until a synchronisation point is reached or discarding of results until there's no more pending results. - The logic to process the pipeline's results and getting the next results fit more with the existing flow. - Tests didn't cover chunk results so I've added additional tests to cover use of pipelining + FETCH_COUNT --000000000000d02eba0628e828c3 Content-Type: application/octet-stream; name="v04-0001-Add-pipelining-support-in-psql.patch" Content-Disposition: attachment; filename="v04-0001-Add-pipelining-support-in-psql.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m4i9twzv0 RnJvbSA2YzNiMGE4NDI1MDViODgxNGUwNGQxZGJhNTVlYjBhYmVlOGMzYjA5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRob25pbiBCb25uZWZveSA8YW50aG9uaW4uYm9ubmVmb3lA ZGF0YWRvZ2hxLmNvbT4KRGF0ZTogVHVlLCA1IE5vdiAyMDI0IDEwOjI2OjU0ICswMTAwClN1Ympl Y3Q6IEFkZCBwaXBlbGluaW5nIHN1cHBvcnQgaW4gcHNxbAoKV2l0aCBcYmluZCwgXHBhcnNlLCBc YmluZF9uYW1lZCBhbmQgXGNsb3NlLCBpdCBpcyBwb3NzaWJsZSB0byBpc3N1ZQpxdWVyaWVzIGZy b20gcHNxbCB1c2luZyB0aGUgZXh0ZW5kZWQgcHJvdG9jb2wuIEhvd2V2ZXIsIGl0IHdhc24ndApw b3NzaWJsZSB0byBzZW5kIHRob3NlIHF1ZXJpZXMgdXNpbmcgcGlwZWxpbmluZyBhbmQgdGhlIG9u bHkgd2F5IHRvIHRlc3QKcGlwZWxpbmVkIHF1ZXJpZXMgd2FzIHRocm91Z2ggcGdiZW5jaCdzIHRh cCB0ZXN0cy4KClRoaXMgcGF0Y2ggYWRkcyBhZGRpdGlvbmFsIHBzcWwgbWV0YS1jb21tYW5kcyB0 byBzdXBwb3J0IHBpcGVsaW5pbmc6ClxzdGFydHBpcGVsaW5lLCBcZW5kcGlwZWxpbmUgYW5kIFxz eW5jcGlwZWxpbmUsIG1pcnJvcmluZyB0aGUgZXhpc3RpbmcKbWV0YS1jb21tYW5kcyBpbiBwZ2Jl bmNoLiBBZGRpdGlvbmFsIG1ldGEtY29tbWFuZHMgYWxsb3cgdG8gZmx1c2ggYW5kCnJlYWQgcmVz dWx0cyBvZiBhbiBvbmdvaW5nIHBpcGVsaW5lOiBcZmx1c2hyZXF1ZXN0LCBcZmx1c2ggYW5kIFxn ZXRyZXN1bHRzCgpcc3RhcnRwaXBlbGluZSBzdGFydHMgYSBuZXcgcGlwZWxpbmUuIEFsbCBleHRl bmRlZCBxdWVyaWVzIHdpbGwgYmUKcXVldWVkIHVudGlsIHRoZSBlbmQgb2YgdGhlIHBpcGVsaW5l IGlzIHJlYWNoZWQuClxlbmRwaXBlbGluZSBlbmRzIGFuIG9uZ29pbmcgcGlwZWxpbmUuIEFsbCBx dWV1ZWQgY29tbWFuZHMgd2lsbCBiZSBzZW50CnRvIHRoZSBzZXJ2ZXIgYW5kIGFsbCByZXNwb25z ZXMgd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhlIHBzcWwuClxzeW5jcGlwZWxpbmUgcXVldWVzIGEg c3luY2hyb25pc2F0aW9uIHBvaW50IHdpdGhvdXQgZmx1c2hpbmcgdGhlCmNvbW1hbmRzIHRvIHRo ZSBzZXJ2ZXIKXGZsdXNoIENhbGwgUFFmbHVzaCBvbiBwc3FsJ3MgY29ubmVjdGlvbgpcZmx1c2hy ZXF1ZXN0IHF1ZXVlcyBhIGZsdXNocmVxdWVzdApcZ2V0cmVzdWx0cyByZWFkcyBzZXJ2ZXIncyBy ZXN1bHRzLiBVbnNlbnQgZGF0YSBhcmUgYXV0b21hdGljYWxseSBwdXNoZWQKd2hlbiBcZ2V0cmVz dWx0cyBpcyBjYWxsZWQKClRob3NlIG1ldGEtY29tbWFuZHMgd2lsbCBhbGxvdyB0byB0ZXN0IHBp cGVsaW5lIGJlaGF2aW91ciB1c2luZwpwc3FsIHJlZ3Jlc3Npb24gdGVzdHMuCi0tLQogZG9jL3Ny Yy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21sICAgICB8ICA3NyArKysrCiBzcmMvYmluL3BzcWwvY29t bWFuZC5jICAgICAgICAgICAgIHwgMTM1ICsrKysrKysKIHNyYy9iaW4vcHNxbC9jb21tb24uYyAg ICAgICAgICAgICAgfCAyMDUgKysrKysrKysrKy0KIHNyYy9iaW4vcHNxbC9oZWxwLmMgICAgICAg ICAgICAgICAgfCAgIDYgKwogc3JjL2Jpbi9wc3FsL3Byb21wdC5jICAgICAgICAgICAgICB8ICAx MiArCiBzcmMvYmluL3BzcWwvc2V0dGluZ3MuaCAgICAgICAgICAgIHwgIDEzICstCiBzcmMvYmlu L3BzcWwvdGFiLWNvbXBsZXRlLmluLmMgICAgIHwgICA4ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3BzcWwub3V0IHwgNTQ3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMv dGVzdC9yZWdyZXNzL3NxbC9wc3FsLnNxbCAgICAgIHwgMzM3ICsrKysrKysrKysrKysrKysrKwog OSBmaWxlcyBjaGFuZ2VkLCAxMzMwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbCBiL2RvYy9zcmMvc2dtbC9y ZWYvcHNxbC1yZWYuc2dtbAppbmRleCBlNDIwNzNlZDc0OC4uMzRjZDRlMmI3NjcgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVm L3BzcWwtcmVmLnNnbWwKQEAgLTM1NjIsNiArMzU2Miw2NyBAQCB0ZXN0ZGI9Jmd0OyA8dXNlcmlu cHV0PlxzZXRlbnYgTEVTUyAtaW14NEY8L3VzZXJpbnB1dD4KICAgICAgICAgPC9saXN0aXRlbT4K ICAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImFwcC1wc3Fs LW1ldGEtY29tbWFuZC1waXBlbGluZSI+CisgICAgICA8dGVybT48bGl0ZXJhbD5cc3RhcnRwaXBl bGluZTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICA8dGVybT48bGl0ZXJhbD5cc3luY3BpcGVsaW5l PC9saXRlcmFsPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxsaXRlcmFsPlxlbmRwaXBlbGluZTwvbGl0 ZXJhbD48L3Rlcm0+CisgICAgICA8dGVybT48bGl0ZXJhbD5cZmx1c2hyZXF1ZXN0PC9saXRlcmFs PjwvdGVybT4KKyAgICAgIDx0ZXJtPjxsaXRlcmFsPlxmbHVzaDwvbGl0ZXJhbD48L3Rlcm0+Cisg ICAgICA8dGVybT48bGl0ZXJhbD5cZ2V0cmVzdWx0czwvbGl0ZXJhbD48L3Rlcm0+CisKKyAgICAg IDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBncm91cCBvZiBjb21t YW5kcyBpbXBsZW1lbnRzIHBpcGVsaW5pbmcgb2YgU1FMIHN0YXRlbWVudHMuCisgICAgICAgICAg QSBwaXBlbGluZSBtdXN0IGJlZ2luIHdpdGggYSA8Y29tbWFuZD5cc3RhcnRwaXBlbGluZTwvY29t bWFuZD4KKyAgICAgICAgICBhbmQgZW5kIHdpdGggYW4gPGNvbW1hbmQ+XGVuZHBpcGVsaW5lPC9j b21tYW5kPi4gSW4gYmV0d2VlbiB0aGVyZQorICAgICAgICAgIG1heSBiZSBhbnkgbnVtYmVyIG9m IDxjb21tYW5kPlxzeW5jcGlwZWxpbmU8L2NvbW1hbmQ+IGNvbW1hbmRzLAorICAgICAgICAgIHdo aWNoIHNlbmRzIGEgPGxpbmsgbGlua2VuZD0icHJvdG9jb2wtZmxvdy1leHQtcXVlcnkiPnN5bmMg bWVzc2FnZTwvbGluaz4KKyAgICAgICAgICB3aXRob3V0IGVuZGluZyB0aGUgb25nb2luZyBwaXBl bGluZSBhbmQgZmx1c2hpbmcgdGhlIHNlbmQgYnVmZmVyLgorICAgICAgICAgIEluIHBpcGVsaW5l IG1vZGUsIHN0YXRlbWVudHMgYXJlIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRob3V0IHdhaXRpbmcK KyAgICAgICAgICBmb3IgdGhlIHJlc3VsdHMgb2YgcHJldmlvdXMgc3RhdGVtZW50cy4gIFNlZQor ICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLXBpcGVsaW5lLW1vZGUiLz4gZm9yIG1vcmUg ZGV0YWlscy4KKyAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgUGlw ZWxpbmUgbW9kZSByZXF1aXJlcyB0aGUgdXNlIG9mIGV4dGVuZGVkIHF1ZXJ5IHByb3RvY29sLiBB bGwgcXVlcmllcyBuZWVkCisgICAgICAgICAgdG8gYmUgc2VudCB1c2luZyB0aGUgbWV0YS1jb21t YW5kcyA8bGl0ZXJhbD5cYmluZDwvbGl0ZXJhbD4sCisgICAgICAgICAgPGxpdGVyYWw+XGJpbmRf bmFtZWQ8L2xpdGVyYWw+LCA8bGl0ZXJhbD5cY2xvc2U8L2xpdGVyYWw+IG9yCisgICAgICAgICAg PGxpdGVyYWw+XHBhcnNlPC9saXRlcmFsPi4gV2hpbGUgYSBwaXBlbGluZSBpcyBvbmdvaW5nLAor ICAgICAgICAgIDxsaXRlcmFsPlxnPC9saXRlcmFsPiB3aWxsIGFwcGVuZCB0aGUgY3VycmVudCBx dWVyeSBidWZmZXIgdG8gdGhlIHBpcGVsaW5lIGFuZAorICAgICAgICAgIG90aGVyIG1ldGEtY29t bWFuZHMgbGlrZSA8bGl0ZXJhbD5cZ3g8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPlxnZGVzYzwvbGl0 ZXJhbD4KKyAgICAgICAgICBhcmUgbm90IGFsbG93ZWQgaW4gcGlwZWxpbmUgbW9kZS4KKyAgICAg ICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGNvbW1hbmQ+XGZsdXNocmVx dWVzdDwvY29tbWFuZD4gYXBwZW5kcyBhIGZsdXNoIGNvbW1hbmQgdG8gdGhlIHBpcGVsaW5lLAor ICAgICAgICAgIGFsbG93aW5nIHRvIHJlYWQgcmVzdWx0cyB3aXRoIDxjb21tYW5kPlxnZXRyZXN1 bHRzPC9jb21tYW5kPiB3aXRob3V0IGlzc3VpbmcKKyAgICAgICAgICBhIHN5bmMgb3IgZW5kaW5n IHRoZSBwaXBlbGluZS4gPGNvbW1hbmQ+XGdldHJlc3VsdHM8L2NvbW1hbmQ+IHdpbGwgYXV0b21h dGljYWxseQorICAgICAgICAgIHB1c2ggdW5zZW50IGRhdGEgdG8gdGhlIHNlcnZlci4gPGNvbW1h bmQ+XGZsdXNoPC9jb21tYW5kPiBjYW4gYmUgdXNlZCB0byBtYW51YWxseQorICAgICAgICAgIHB1 c2ggdW5zZW50IGRhdGEuCisgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAg IDwvcGFyYT4KKworICAgICAgIDxwYXJhPgorICAgICAgICBFeGFtcGxlOgorPHByb2dyYW1saXN0 aW5nPgorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAxIFxiaW5kIFxnCitTRUxFQ1QgJDEgXHBhcnNl IHN0bXQxCitcYmluZF9uYW1lZCBzdG10MSAxIFxnCitTRUxFQ1QgcGdfY3VycmVudF94YWN0X2lk KCkgXGJpbmQgXGcKK1xmbHVzaHJlcXVlc3QKK1xnZXRyZXN1bHRzCitcc3luY3BpcGVsaW5lCitT RUxFQ1QgcGdfY3VycmVudF94YWN0X2lkKCkgXGJpbmQgXGcKK1xjbG9zZSBzdG10MQorXGVuZHBp cGVsaW5lCis8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KKworICAgICAgPC9saXN0aXRlbT4KKyAg ICAgPC92YXJsaXN0ZW50cnk+CisKIAogICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iYXBwLXBzcWwt bWV0YS1jb21tYW5kLXQtbGMiPgogICAgICAgICA8dGVybT48bGl0ZXJhbD5cdDwvbGl0ZXJhbD48 L3Rlcm0+CkBAIC00NzA1LDYgKzQ3NjYsMjIgQEAgdGVzdGRiPSZndDsgPHVzZXJpbnB1dD5JTlNF UlQgSU5UTyBteV90YWJsZSBWQUxVRVMgKDonY29udGVudCcpOzwvdXNlcmlucHV0PgogICAgICAg ICA8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgIDx2YXJsaXN0ZW50 cnkgaWQ9ImFwcC1wc3FsLXByb21wdGluZy1wLXVjIj4KKyAgICAgICAgPHRlcm0+PGxpdGVyYWw+ JVA8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgor ICAgICAgICBQaXBlbGluZSBzdGF0dXM6IGFuIGVtcHR5IHN0cmluZyB3aGVuIG5vdCBpbiBhIHBp cGVsaW5lLAorICAgICAgICBvciA8bGl0ZXJhbD58bnVtX3N5bmNzLG51bV9xdWVyaWVzLHBlbmRp bmdfcmVzdWx0c3w8L2xpdGVyYWw+CisgICAgICAgIHdoZW4gaW4gYW4gb25nb2luZyBwaXBlbGlu ZSwgb3IgPGxpdGVyYWw+K251bV9zeW5jcyxudW1fcXVlcmllcyxwZW5kaW5nX3Jlc3VsdHMrPC9s aXRlcmFsPgorICAgICAgICB3aGVuIGluIGFuIGFib3J0ZWQgcGlwZWxpbmUuIDxsaXRlcmFsPm51 bV9zeW5jczwvbGl0ZXJhbD4gaXMgdGhlIG51bWJlcgorICAgICAgICBvZiBzeW5jcyBxdWV1ZWQg aW4gdGhlIHBpcGVsaW5lLCA8bGl0ZXJhbD5udW1fcXVlcmllczwvbGl0ZXJhbD4KKyAgICAgICAg aXMgdGhlIG51bWJlciBvZiBxdWVyaWVzIHF1ZXVlZCBpbiB0aGUgcGlwZWxpbmUgYW5kIDxsaXRl cmFsPnBlbmRpbmdfcmVzdWx0czwvbGl0ZXJhbD4KKyAgICAgICAgaXMgdGhlIG51bWJlciBvZiBx dWVyaWVzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIGEgPGNvbW1hbmQ+XGZsdXNocmVxdWVzdDwv Y29tbWFuZD4KKyAgICAgICAgb3IgYSA8Y29tbWFuZD5cc3luY3BpcGVsaW5lPC9jb21tYW5kPiB0 aGF0IGNhbiBiZSByZXRyaWV2ZWQgd2l0aCA8Y29tbWFuZD5cZ2V0cmVzdWx0czwvY29tbWFuZD4u CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVu dHJ5PgorCiAgICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcHAtcHNxbC1wcm9tcHRpbmctciI+CiAg ICAgICAgIDx0ZXJtPjxsaXRlcmFsPiVSPC9saXRlcmFsPjwvdGVybT4KICAgICAgICAgPGxpc3Rp dGVtPgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYyBiL3NyYy9iaW4vcHNxbC9j b21tYW5kLmMKaW5kZXggMWYzY2JiMTFmN2MuLjQxMWY2YTZjZDcxIDEwMDY0NAotLS0gYS9zcmMv YmluL3BzcWwvY29tbWFuZC5jCisrKyBiL3NyYy9iaW4vcHNxbC9jb21tYW5kLmMKQEAgLTkwLDkg KzkwLDEyIEBAIHN0YXRpYyBiYWNrc2xhc2hSZXN1bHQgZXhlY19jb21tYW5kX2Vsc2UoUHNxbFNj YW5TdGF0ZSBzY2FuX3N0YXRlLCBDb25kaXRpb25hbFN0CiAJCQkJCQkJCQkJIFBRRXhwQnVmZmVy IHF1ZXJ5X2J1Zik7CiBzdGF0aWMgYmFja3NsYXNoUmVzdWx0IGV4ZWNfY29tbWFuZF9lbmRpZihQ c3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIENvbmRpdGlvbmFsU3RhY2sgY3N0YWNrLAogCQkJCQkJ CQkJCSAgUFFFeHBCdWZmZXIgcXVlcnlfYnVmKTsKK3N0YXRpYyBiYWNrc2xhc2hSZXN1bHQgZXhl Y19jb21tYW5kX2VuZHBpcGVsaW5lKFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3Rp dmVfYnJhbmNoKTsKIHN0YXRpYyBiYWNrc2xhc2hSZXN1bHQgZXhlY19jb21tYW5kX2VuY29kaW5n KFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKTsKIHN0YXRpYyBi YWNrc2xhc2hSZXN1bHQgZXhlY19jb21tYW5kX2VycnZlcmJvc2UoUHNxbFNjYW5TdGF0ZSBzY2Fu X3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gpOwogc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVj X2NvbW1hbmRfZihQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCk7 CitzdGF0aWMgYmFja3NsYXNoUmVzdWx0IGV4ZWNfY29tbWFuZF9mbHVzaChQc3FsU2NhblN0YXRl IHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCk7CitzdGF0aWMgYmFja3NsYXNoUmVzdWx0 IGV4ZWNfY29tbWFuZF9mbHVzaHJlcXVlc3QoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29s IGFjdGl2ZV9icmFuY2gpOwogc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfZyhQ c3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCwKIAkJCQkJCQkJCSAg Y29uc3QgY2hhciAqY21kKTsKIHN0YXRpYyBiYWNrc2xhc2hSZXN1bHQgcHJvY2Vzc19jb21tYW5k X2dfb3B0aW9ucyhjaGFyICpmaXJzdF9vcHRpb24sCkBAIC0xMDMsNiArMTA2LDcgQEAgc3RhdGlj IGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfZ2Rlc2MoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0 YXRlLCBib29sIGFjdGl2ZV8KIHN0YXRpYyBiYWNrc2xhc2hSZXN1bHQgZXhlY19jb21tYW5kX2dl dGVudihQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCwKIAkJCQkJ CQkJCQkgICBjb25zdCBjaGFyICpjbWQpOwogc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2Nv bW1hbmRfZ2V4ZWMoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gp Oworc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfZ2V0cmVzdWx0cyhQc3FsU2Nh blN0YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCk7CiBzdGF0aWMgYmFja3NsYXNo UmVzdWx0IGV4ZWNfY29tbWFuZF9nc2V0KFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBh Y3RpdmVfYnJhbmNoKTsKIHN0YXRpYyBiYWNrc2xhc2hSZXN1bHQgZXhlY19jb21tYW5kX2hlbHAo UHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gpOwogc3RhdGljIGJh Y2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfaHRtbChQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUs IGJvb2wgYWN0aXZlX2JyYW5jaCk7CkBAIC0xMzIsNiArMTM2LDggQEAgc3RhdGljIGJhY2tzbGFz aFJlc3VsdCBleGVjX2NvbW1hbmRfc2V0ZW52KFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9v bCBhY3RpdmUKIAkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpjbWQpOwogc3RhdGljIGJhY2tzbGFz aFJlc3VsdCBleGVjX2NvbW1hbmRfc2Zfc3YoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29s IGFjdGl2ZV9icmFuY2gsCiAJCQkJCQkJCQkJICBjb25zdCBjaGFyICpjbWQsIGJvb2wgaXNfZnVu Yyk7CitzdGF0aWMgYmFja3NsYXNoUmVzdWx0IGV4ZWNfY29tbWFuZF9zdGFydHBpcGVsaW5lKFBz cWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKTsKK3N0YXRpYyBiYWNr c2xhc2hSZXN1bHQgZXhlY19jb21tYW5kX3N5bmNwaXBlbGluZShQc3FsU2NhblN0YXRlIHNjYW5f c3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCk7CiBzdGF0aWMgYmFja3NsYXNoUmVzdWx0IGV4ZWNf Y29tbWFuZF90KFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKTsK IHN0YXRpYyBiYWNrc2xhc2hSZXN1bHQgZXhlY19jb21tYW5kX1QoUHNxbFNjYW5TdGF0ZSBzY2Fu X3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gpOwogc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVj X2NvbW1hbmRfdGltaW5nKFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJh bmNoKTsKQEAgLTM1MSwxOCArMzU3LDI2IEBAIGV4ZWNfY29tbWFuZChjb25zdCBjaGFyICpjbWQs CiAJCXN0YXR1cyA9IGV4ZWNfY29tbWFuZF9lbHNlKHNjYW5fc3RhdGUsIGNzdGFjaywgcXVlcnlf YnVmKTsKIAllbHNlIGlmIChzdHJjbXAoY21kLCAiZW5kaWYiKSA9PSAwKQogCQlzdGF0dXMgPSBl eGVjX2NvbW1hbmRfZW5kaWYoc2Nhbl9zdGF0ZSwgY3N0YWNrLCBxdWVyeV9idWYpOworCWVsc2Ug aWYgKHN0cmNtcChjbWQsICJlbmRwaXBlbGluZSIpID09IDApCisJCXN0YXR1cyA9IGV4ZWNfY29t bWFuZF9lbmRwaXBlbGluZShzY2FuX3N0YXRlLCBhY3RpdmVfYnJhbmNoKTsKIAllbHNlIGlmIChz dHJjbXAoY21kLCAiZW5jb2RpbmciKSA9PSAwKQogCQlzdGF0dXMgPSBleGVjX2NvbW1hbmRfZW5j b2Rpbmcoc2Nhbl9zdGF0ZSwgYWN0aXZlX2JyYW5jaCk7CiAJZWxzZSBpZiAoc3RyY21wKGNtZCwg ImVycnZlcmJvc2UiKSA9PSAwKQogCQlzdGF0dXMgPSBleGVjX2NvbW1hbmRfZXJydmVyYm9zZShz Y2FuX3N0YXRlLCBhY3RpdmVfYnJhbmNoKTsKIAllbHNlIGlmIChzdHJjbXAoY21kLCAiZiIpID09 IDApCiAJCXN0YXR1cyA9IGV4ZWNfY29tbWFuZF9mKHNjYW5fc3RhdGUsIGFjdGl2ZV9icmFuY2gp OworCWVsc2UgaWYgKHN0cmNtcChjbWQsICJmbHVzaCIpID09IDApCisJCXN0YXR1cyA9IGV4ZWNf Y29tbWFuZF9mbHVzaChzY2FuX3N0YXRlLCBhY3RpdmVfYnJhbmNoKTsKKwllbHNlIGlmIChzdHJj bXAoY21kLCAiZmx1c2hyZXF1ZXN0IikgPT0gMCkKKwkJc3RhdHVzID0gZXhlY19jb21tYW5kX2Zs dXNocmVxdWVzdChzY2FuX3N0YXRlLCBhY3RpdmVfYnJhbmNoKTsKIAllbHNlIGlmIChzdHJjbXAo Y21kLCAiZyIpID09IDAgfHwgc3RyY21wKGNtZCwgImd4IikgPT0gMCkKIAkJc3RhdHVzID0gZXhl Y19jb21tYW5kX2coc2Nhbl9zdGF0ZSwgYWN0aXZlX2JyYW5jaCwgY21kKTsKIAllbHNlIGlmIChz dHJjbXAoY21kLCAiZ2Rlc2MiKSA9PSAwKQogCQlzdGF0dXMgPSBleGVjX2NvbW1hbmRfZ2Rlc2Mo c2Nhbl9zdGF0ZSwgYWN0aXZlX2JyYW5jaCk7CiAJZWxzZSBpZiAoc3RyY21wKGNtZCwgImdldGVu diIpID09IDApCiAJCXN0YXR1cyA9IGV4ZWNfY29tbWFuZF9nZXRlbnYoc2Nhbl9zdGF0ZSwgYWN0 aXZlX2JyYW5jaCwgY21kKTsKKwllbHNlIGlmIChzdHJjbXAoY21kLCAiZ2V0cmVzdWx0cyIpID09 IDApCisJCXN0YXR1cyA9IGV4ZWNfY29tbWFuZF9nZXRyZXN1bHRzKHNjYW5fc3RhdGUsIGFjdGl2 ZV9icmFuY2gpOwogCWVsc2UgaWYgKHN0cmNtcChjbWQsICJnZXhlYyIpID09IDApCiAJCXN0YXR1 cyA9IGV4ZWNfY29tbWFuZF9nZXhlYyhzY2FuX3N0YXRlLCBhY3RpdmVfYnJhbmNoKTsKIAllbHNl IGlmIChzdHJjbXAoY21kLCAiZ3NldCIpID09IDApCkBAIC00MDgsNiArNDIyLDEwIEBAIGV4ZWNf Y29tbWFuZChjb25zdCBjaGFyICpjbWQsCiAJCXN0YXR1cyA9IGV4ZWNfY29tbWFuZF9zZl9zdihz Y2FuX3N0YXRlLCBhY3RpdmVfYnJhbmNoLCBjbWQsIHRydWUpOwogCWVsc2UgaWYgKHN0cmNtcChj bWQsICJzdiIpID09IDAgfHwgc3RyY21wKGNtZCwgInN2KyIpID09IDApCiAJCXN0YXR1cyA9IGV4 ZWNfY29tbWFuZF9zZl9zdihzY2FuX3N0YXRlLCBhY3RpdmVfYnJhbmNoLCBjbWQsIGZhbHNlKTsK KwllbHNlIGlmIChzdHJjbXAoY21kLCAic3RhcnRwaXBlbGluZSIpID09IDApCisJCXN0YXR1cyA9 IGV4ZWNfY29tbWFuZF9zdGFydHBpcGVsaW5lKHNjYW5fc3RhdGUsIGFjdGl2ZV9icmFuY2gpOwor CWVsc2UgaWYgKHN0cmNtcChjbWQsICJzeW5jcGlwZWxpbmUiKSA9PSAwKQorCQlzdGF0dXMgPSBl eGVjX2NvbW1hbmRfc3luY3BpcGVsaW5lKHNjYW5fc3RhdGUsIGFjdGl2ZV9icmFuY2gpOwogCWVs c2UgaWYgKHN0cmNtcChjbWQsICJ0IikgPT0gMCkKIAkJc3RhdHVzID0gZXhlY19jb21tYW5kX3Qo c2Nhbl9zdGF0ZSwgYWN0aXZlX2JyYW5jaCk7CiAJZWxzZSBpZiAoc3RyY21wKGNtZCwgIlQiKSA9 PSAwKQpAQCAtMTQ5MSw2ICsxNTA5LDM4IEBAIGV4ZWNfY29tbWFuZF9mKFBzcWxTY2FuU3RhdGUg c2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKQogCXJldHVybiBzdWNjZXNzID8gUFNRTF9D TURfU0tJUF9MSU5FIDogUFNRTF9DTURfRVJST1I7CiB9CiAKKy8qCisgKiBcZmx1c2ggLS0gY2Fs bCBQUWZsdXNoIG9uIHRoZSBjb25uZWN0aW9uCisgKi8KK3N0YXRpYyBiYWNrc2xhc2hSZXN1bHQK K2V4ZWNfY29tbWFuZF9mbHVzaChQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZl X2JyYW5jaCkKK3sKKwlpZiAoYWN0aXZlX2JyYW5jaCkKKwl7CisJCXBzZXQuc2VuZF9tb2RlID0g UFNRTF9GTFVTSDsKKwl9CisJZWxzZQorCQlpZ25vcmVfc2xhc2hfb3B0aW9ucyhzY2FuX3N0YXRl KTsKKworCXJldHVybiBQU1FMX0NNRF9TRU5EOworfQorCisvKgorICogXGZsdXNocmVxdWVzdCAt LSBzZW5kIGEgZmx1c2ggcmVxdWVzdCB0byB0aGUgc2VydmVyCisgKi8KK3N0YXRpYyBiYWNrc2xh c2hSZXN1bHQKK2V4ZWNfY29tbWFuZF9mbHVzaHJlcXVlc3QoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0 YXRlLCBib29sIGFjdGl2ZV9icmFuY2gpCit7CisJaWYgKGFjdGl2ZV9icmFuY2gpCisJeworCQlw c2V0LnNlbmRfbW9kZSA9IFBTUUxfU0VORF9GTFVTSF9SRVFVRVNUOworCX0KKwllbHNlCisJCWln bm9yZV9zbGFzaF9vcHRpb25zKHNjYW5fc3RhdGUpOworCisJcmV0dXJuIFBTUUxfQ01EX1NFTkQ7 Cit9CisKIC8qCiAgKiBcZyAgWyhwc2V0LW9wdGlvbls9cHNldC12YWx1ZV0gLi4uKV0gW2ZpbGVu YW1lL3NoZWxsLWNvbW1hbmRdCiAgKiBcZ3ggWyhwc2V0LW9wdGlvbls9cHNldC12YWx1ZV0gLi4u KV0gW2ZpbGVuYW1lL3NoZWxsLWNvbW1hbmRdCkBAIC0xNTI2LDYgKzE1NzYsMTMgQEAgZXhlY19j b21tYW5kX2coUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gsIGNv bnN0IGNoYXIgKmNtZCkKIAogCWlmIChzdGF0dXMgPT0gUFNRTF9DTURfU0tJUF9MSU5FICYmIGFj dGl2ZV9icmFuY2gpCiAJeworCQlpZiAoc3RyY21wKGNtZCwgImd4IikgPT0gMCAmJiBQUXBpcGVs aW5lU3RhdHVzKHBzZXQuZGIpICE9IFBRX1BJUEVMSU5FX09GRikKKwkJeworCQkJcGdfbG9nX2Vy cm9yKCJcXGd4IG5vdCBhbGxvd2VkIGluIHBpcGVsaW5lIG1vZGUiKTsKKwkJCWNsZWFuX2V4dGVu ZGVkX3N0YXRlKCk7CisJCQlyZXR1cm4gUFNRTF9DTURfRVJST1I7CisJCX0KKwogCQlpZiAoIWZu YW1lKQogCQkJcHNldC5nZm5hbWUgPSBOVUxMOwogCQllbHNlCkBAIC0xNjc5LDYgKzE3MzYsMjMg QEAgZXhlY19jb21tYW5kX2dldGVudihQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0 aXZlX2JyYW5jaCwKIAlyZXR1cm4gc3VjY2VzcyA/IFBTUUxfQ01EX1NLSVBfTElORSA6IFBTUUxf Q01EX0VSUk9SOwogfQogCisvKgorICogXGdldHJlc3VsdHMgLS0gcmVhZCByZXN1bHRzCisgKi8K K3N0YXRpYyBiYWNrc2xhc2hSZXN1bHQKK2V4ZWNfY29tbWFuZF9nZXRyZXN1bHRzKFBzcWxTY2Fu U3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKQoreworCWlmIChhY3RpdmVfYnJh bmNoKQorCXsKKwkJcHNldC5zZW5kX21vZGUgPSBQU1FMX0dFVF9SRVNVTFRTOworCX0KKwllbHNl CisJCWlnbm9yZV9zbGFzaF9vcHRpb25zKHNjYW5fc3RhdGUpOworCisJcmV0dXJuIFBTUUxfQ01E X1NFTkQ7Cit9CisKKwogLyoKICAqIFxnZXhlYyAtLSBzZW5kIHF1ZXJ5IGFuZCBleGVjdXRlIGVh Y2ggZmllbGQgb2YgcmVzdWx0CiAgKi8KQEAgLTE2ODksNiArMTc2MywxMiBAQCBleGVjX2NvbW1h bmRfZ2V4ZWMoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gpCiAK IAlpZiAoYWN0aXZlX2JyYW5jaCkKIAl7CisJCWlmIChQUXBpcGVsaW5lU3RhdHVzKHBzZXQuZGIp ICE9IFBRX1BJUEVMSU5FX09GRikKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJcXGdleGVjIG5vdCBh bGxvd2VkIGluIHBpcGVsaW5lIG1vZGUiKTsKKwkJCWNsZWFuX2V4dGVuZGVkX3N0YXRlKCk7CisJ CQlyZXR1cm4gUFNRTF9DTURfRVJST1I7CisJCX0KIAkJcHNldC5nZXhlY19mbGFnID0gdHJ1ZTsK IAkJc3RhdHVzID0gUFNRTF9DTURfU0VORDsKIAl9CkBAIC0xNzA5LDYgKzE3ODksMTMgQEAgZXhl Y19jb21tYW5kX2dzZXQoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFu Y2gpCiAJCWNoYXIJICAgKnByZWZpeCA9IHBzcWxfc2Nhbl9zbGFzaF9vcHRpb24oc2Nhbl9zdGF0 ZSwKIAkJCQkJCQkJCQkJCQlPVF9OT1JNQUwsIE5VTEwsIGZhbHNlKTsKIAorCQlpZiAoUFFwaXBl bGluZVN0YXR1cyhwc2V0LmRiKSAhPSBQUV9QSVBFTElORV9PRkYpCisJCXsKKwkJCXBnX2xvZ19l cnJvcigiXFxnc2V0IG5vdCBhbGxvd2VkIGluIHBpcGVsaW5lIG1vZGUiKTsKKwkJCWNsZWFuX2V4 dGVuZGVkX3N0YXRlKCk7CisJCQlyZXR1cm4gUFNRTF9DTURfRVJST1I7CisJCX0KKwogCQlpZiAo cHJlZml4KQogCQkJcHNldC5nc2V0X3ByZWZpeCA9IHByZWZpeDsKIAkJZWxzZQpAQCAtMjY3Miw2 ICsyNzU5LDU0IEBAIGV4ZWNfY29tbWFuZF9zZl9zdihQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUs IGJvb2wgYWN0aXZlX2JyYW5jaCwKIAlyZXR1cm4gc3RhdHVzOwogfQogCisvKgorICogXHN0YXJ0 cGlwZWxpbmUgLS0gZW50ZXIgcGlwZWxpbmUgbW9kZQorICovCitzdGF0aWMgYmFja3NsYXNoUmVz dWx0CitleGVjX2NvbW1hbmRfc3RhcnRwaXBlbGluZShQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUs IGJvb2wgYWN0aXZlX2JyYW5jaCkKK3sKKwlpZiAoYWN0aXZlX2JyYW5jaCkKKwl7CisJCXBzZXQu c2VuZF9tb2RlID0gUFNRTF9TVEFSVF9QSVBFTElORV9NT0RFOworCX0KKwllbHNlCisJCWlnbm9y ZV9zbGFzaF9vcHRpb25zKHNjYW5fc3RhdGUpOworCisJcmV0dXJuIFBTUUxfQ01EX1NFTkQ7Cit9 CisKKy8qCisgKiBcc3luY3BpcGVsaW5lIC0tIHNlbmQgYSBzeW5jIG1lc3NhZ2UgdG8gYW4gYWN0 aXZlIHBpcGVsaW5lCisgKi8KK3N0YXRpYyBiYWNrc2xhc2hSZXN1bHQKK2V4ZWNfY29tbWFuZF9z eW5jcGlwZWxpbmUoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gp Cit7CisJaWYgKGFjdGl2ZV9icmFuY2gpCisJeworCQlwc2V0LnNlbmRfbW9kZSA9IFBTUUxfU0VO RF9QSVBFTElORV9TWU5DOworCX0KKwllbHNlCisJCWlnbm9yZV9zbGFzaF9vcHRpb25zKHNjYW5f c3RhdGUpOworCisJcmV0dXJuIFBTUUxfQ01EX1NFTkQ7Cit9CisKKy8qCisgKiBcZW5kcGlwZWxp bmUgLS0gZW5kIHBpcGVsaW5lIG1vZGUKKyAqLworc3RhdGljIGJhY2tzbGFzaFJlc3VsdAorZXhl Y19jb21tYW5kX2VuZHBpcGVsaW5lKFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3Rp dmVfYnJhbmNoKQoreworCWlmIChhY3RpdmVfYnJhbmNoKQorCXsKKwkJcHNldC5zZW5kX21vZGUg PSBQU1FMX0VORF9QSVBFTElORV9NT0RFOworCX0KKwllbHNlCisJCWlnbm9yZV9zbGFzaF9vcHRp b25zKHNjYW5fc3RhdGUpOworCisJcmV0dXJuIFBTUUxfQ01EX1NFTkQ7Cit9CisKIC8qCiAgKiBc dCAtLSB0dXJuIG9mZiB0YWJsZSBoZWFkZXJzIGFuZCByb3cgY291bnQKICAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jIGIvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jCmluZGV4IDhh OTIxMWRiNDFhLi43YTIyNWE0ZmJhZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2NvbW1vbi5j CisrKyBiL3NyYy9iaW4vcHNxbC9jb21tb24uYwpAQCAtNDE1LDEwICs0MTUsMTIgQEAgQWNjZXB0 UmVzdWx0KGNvbnN0IFBHcmVzdWx0ICpyZXN1bHQsIGJvb2wgc2hvd19lcnJvcikKIAkJCWNhc2Ug UEdSRVNfRU1QVFlfUVVFUlk6CiAJCQljYXNlIFBHUkVTX0NPUFlfSU46CiAJCQljYXNlIFBHUkVT X0NPUFlfT1VUOgorCQkJY2FzZSBQR1JFU19QSVBFTElORV9TWU5DOgogCQkJCS8qIEZpbmUsIGRv IG5vdGhpbmcgKi8KIAkJCQlPSyA9IHRydWU7CiAJCQkJYnJlYWs7CiAKKwkJCWNhc2UgUEdSRVNf UElQRUxJTkVfQUJPUlRFRDoKIAkJCWNhc2UgUEdSRVNfQkFEX1JFU1BPTlNFOgogCQkJY2FzZSBQ R1JFU19OT05GQVRBTF9FUlJPUjoKIAkJCWNhc2UgUEdSRVNfRkFUQUxfRVJST1I6CkBAIC0xMDUw LDYgKzEwNTIsNyBAQCBQcmludFF1ZXJ5UmVzdWx0KFBHcmVzdWx0ICpyZXN1bHQsIGJvb2wgbGFz dCwKIAkJCXN1Y2Nlc3MgPSB0cnVlOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBQR1JFU19QSVBFTElO RV9BQk9SVEVEOgogCQljYXNlIFBHUkVTX0JBRF9SRVNQT05TRToKIAkJY2FzZSBQR1JFU19OT05G QVRBTF9FUlJPUjoKIAkJY2FzZSBQR1JFU19GQVRBTF9FUlJPUjoKQEAgLTE0MTgsNiArMTQyMSw0 OCBAQCBEZXNjcmliZVF1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNl YykKIAlyZXR1cm4gT0s7CiB9CiAKKy8qCisgKiBSZWFkIGFuZCBkaXNjYXJkIGFsbCByZXN1bHRz IGluIGFuIGFib3J0ZWQgcGlwZWxpbmUuCisgKgorICogSWYgYSBzeW5jaHJvbmlzYXRpb24gcG9p bnQgaXMgZm91bmQsIHdlIGNhbiBzdG9wIGRpc2NhcmRpbmcgcmVzdWx0cyBhcworICogcGlwZWxp bmUgd2lsbCBzd2l0Y2ggYmFjayB0byBhbiBPSyBzdGF0ZS4gSWYgbm8gc3luY2hyb25pc2F0aW9u IHBvaW50CisgKiBpcyBhdmFpbGFibGUsIHdlIG5lZWQgdG8gc3RvcCB3aGVuIHRoZXJlJ3Mgbm8g bW9yZSBwZW5kaW5nIHJlc3VsdHMsCisgKiBvdGhlcndpc2UsIGNhbGxpbmcgUFFnZXRSZXN1bHRz IHdpbGwgYmxvY2suCisgKi8KK3N0YXRpYyBQR3Jlc3VsdCAqCitkaXNjYXJkQWJvcnRlZFBpcGVs aW5lUmVzdWx0cyh2b2lkKQoreworCWZvciAoOzspCisJeworCQlQR3Jlc3VsdCAgICpyZXMgPSBQ UWdldFJlc3VsdChwc2V0LmRiKTsKKwkJRXhlY1N0YXR1c1R5cGUgcmVzdWx0X3N0YXR1cyA9IFBR cmVzdWx0U3RhdHVzKHJlcyk7CisKKwkJaWYgKHJlc3VsdF9zdGF0dXMgPT0gUEdSRVNfUElQRUxJ TkVfU1lOQykKKwkJCS8qIEZvdW5kIGEgc3luY2hyb25pc2F0aW9uIHBvaW50ICovCisJCQlyZXR1 cm4gcmVzOworCQllbHNlIGlmIChyZXMgPT0gTlVMTCkKKwkJCS8qIEEgcXVlcnkgd2FzIHByb2Nl c3NlZCwgZGVjcmVtZW50IHRoZSBjb3VudGVycyAqLworCQkJcHNldC5wZW5kaW5nX3Jlc3VsdHMt LTsKKwkJZWxzZSBpZiAocmVzICE9IE5VTEwgJiYgcmVzdWx0X3N0YXR1cyA9PSBQR1JFU19GQVRB TF9FUlJPUikKKwkJCXJldHVybiByZXM7CisKKwkJaWYgKHBzZXQucGVuZGluZ19yZXN1bHRzID09 IDAgJiYgcHNldC5udW1fc3luY3MgPT0gMCkKKworCQkJLyoKKwkJCSAqIFRoZXJlJ3Mgbm8gbW9y ZSByZXN1bHRzIHRvIGdldCBhbmQgdGhlcmUncyBubyBzeW5jaHJvbmlzYXRpb24KKwkJCSAqIHBv aW50IHRvIHN0b3AgYXQuIFRoaXMgd2lsbCBsZWF2ZSB0aGUgcGlwZWxpbmUgaW4gYW4gYWJvcnRl ZAorCQkJICogc3RhdGUuCisJCQkgKi8KKwkJCXJldHVybiByZXM7CisKKwkJLyoKKwkJICogQW4g YWJvcnRlZCBwaXBlbGluZSB3aWxsIGhhdmUgZWl0aGVyIE5VTEwgcmVzdWx0cyBvciByZXN1bHRz IGluIGFuCisJCSAqIFBHUkVTX1BJUEVMSU5FX0FCT1JURUQgc3RhdHVzCisJCSAqLworCQlBc3Nl cnQocmVzID09IE5VTEwgfHwgcmVzdWx0X3N0YXR1cyA9PSBQR1JFU19QSVBFTElORV9BQk9SVEVE KTsKKwkJUFFjbGVhcihyZXMpOworCX0KK30KIAogLyoKICAqIEV4ZWNRdWVyeUFuZFByb2Nlc3NS ZXN1bHRzOiB1dGlsaXR5IGZ1bmN0aW9uIGZvciB1c2UgYnkgU2VuZFF1ZXJ5KCkKQEAgLTE0NTEs NiArMTQ5Niw4IEBAIEV4ZWNRdWVyeUFuZFByb2Nlc3NSZXN1bHRzKGNvbnN0IGNoYXIgKnF1ZXJ5 LAogCWJvb2wJCXRpbWluZyA9IHBzZXQudGltaW5nOwogCWJvb2wJCXN1Y2Nlc3MgPSBmYWxzZTsK IAlib29sCQlyZXR1cm5fZWFybHkgPSBmYWxzZTsKKwlib29sCQlwcm9jZXNzX3BpcGVsaW5lID0g ZmFsc2U7CisJYm9vbAkJZ2V0X3BlbmRpbmdfcmVzdWx0cyA9IGZhbHNlOwogCWluc3RyX3RpbWUJ YmVmb3JlLAogCQkJCWFmdGVyOwogCVBHcmVzdWx0ICAgKnJlc3VsdDsKQEAgLTE0NjYsOSArMTUx MywxMyBAQCBFeGVjUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwKIAl7 CiAJCWNhc2UgUFNRTF9TRU5EX0VYVEVOREVEX0NMT1NFOgogCQkJc3VjY2VzcyA9IFBRc2VuZENs b3NlUHJlcGFyZWQocHNldC5kYiwgcHNldC5zdG10TmFtZSk7CisJCQlpZiAoc3VjY2VzcyAmJiBQ UXBpcGVsaW5lU3RhdHVzKHBzZXQuZGIpICE9IFBRX1BJUEVMSU5FX09GRikKKwkJCQlwc2V0Lm51 bV9xdWVyaWVzKys7CiAJCQlicmVhazsKIAkJY2FzZSBQU1FMX1NFTkRfRVhURU5ERURfUEFSU0U6 CiAJCQlzdWNjZXNzID0gUFFzZW5kUHJlcGFyZShwc2V0LmRiLCBwc2V0LnN0bXROYW1lLCBxdWVy eSwgMCwgTlVMTCk7CisJCQlpZiAoc3VjY2VzcyAmJiBQUXBpcGVsaW5lU3RhdHVzKHBzZXQuZGIp ICE9IFBRX1BJUEVMSU5FX09GRikKKwkJCQlwc2V0Lm51bV9xdWVyaWVzKys7CiAJCQlicmVhazsK IAkJY2FzZSBQU1FMX1NFTkRfRVhURU5ERURfUVVFUllfUEFSQU1TOgogCQkJQXNzZXJ0KHBzZXQu c3RtdE5hbWUgPT0gTlVMTCk7CkBAIC0xNDc2LDYgKzE1MjcsOCBAQCBFeGVjUXVlcnlBbmRQcm9j ZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwKIAkJCQkJCQkJCQlwc2V0LmJpbmRfbnBhcmFt cywgTlVMTCwKIAkJCQkJCQkJCQkoY29uc3QgY2hhciAqY29uc3QgKikgcHNldC5iaW5kX3BhcmFt cywKIAkJCQkJCQkJCQlOVUxMLCBOVUxMLCAwKTsKKwkJCWlmIChzdWNjZXNzICYmIFBRcGlwZWxp bmVTdGF0dXMocHNldC5kYikgIT0gUFFfUElQRUxJTkVfT0ZGKQorCQkJCXBzZXQubnVtX3F1ZXJp ZXMrKzsKIAkJCWJyZWFrOwogCQljYXNlIFBTUUxfU0VORF9FWFRFTkRFRF9RVUVSWV9QUkVQQVJF RDoKIAkJCUFzc2VydChwc2V0LnN0bXROYW1lICE9IE5VTEwpOwpAQCAtMTQ4Myw2ICsxNTM2LDYy IEBAIEV4ZWNRdWVyeUFuZFByb2Nlc3NSZXN1bHRzKGNvbnN0IGNoYXIgKnF1ZXJ5LAogCQkJCQkJ CQkJCSAgcHNldC5iaW5kX25wYXJhbXMsCiAJCQkJCQkJCQkJICAoY29uc3QgY2hhciAqY29uc3Qg KikgcHNldC5iaW5kX3BhcmFtcywKIAkJCQkJCQkJCQkgIE5VTEwsIE5VTEwsIDApOworCQkJaWYg KHN1Y2Nlc3MgJiYgUFFwaXBlbGluZVN0YXR1cyhwc2V0LmRiKSAhPSBQUV9QSVBFTElORV9PRkYp CisJCQkJcHNldC5udW1fcXVlcmllcysrOworCQkJYnJlYWs7CisJCWNhc2UgUFNRTF9TVEFSVF9Q SVBFTElORV9NT0RFOgorCQkJc3VjY2VzcyA9IFBRZW50ZXJQaXBlbGluZU1vZGUocHNldC5kYik7 CisJCQlicmVhazsKKwkJY2FzZSBQU1FMX0VORF9QSVBFTElORV9NT0RFOgorCQkJc3VjY2VzcyA9 IFBRcGlwZWxpbmVTeW5jKHBzZXQuZGIpOworCQkJaWYgKHN1Y2Nlc3MgJiYgUFFwaXBlbGluZVN0 YXR1cyhwc2V0LmRiKSAhPSBQUV9QSVBFTElORV9PRkYpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBF bmQgb2YgdGhlIHBpcGVsaW5lLCBhbGwgcXVldWVkIGNvbW1hbmRzIG5lZWQgdG8gYmUKKwkJCQkg KiBwcm9jZXNzZWQKKwkJCQkgKi8KKwkJCQlwcm9jZXNzX3BpcGVsaW5lID0gdHJ1ZTsKKwkJCQlw c2V0Lm51bV9zeW5jcysrOworCQkJCXBzZXQucGVuZGluZ19yZXN1bHRzICs9IHBzZXQubnVtX3F1 ZXJpZXM7CisJCQkJcHNldC5udW1fcXVlcmllcyA9IDA7CisJCQl9CisJCQlicmVhazsKKwkJY2Fz ZSBQU1FMX1NFTkRfUElQRUxJTkVfU1lOQzoKKwkJCXN1Y2Nlc3MgPSBQUXNlbmRQaXBlbGluZVN5 bmMocHNldC5kYik7CisJCQlpZiAoc3VjY2VzcyAmJiBQUXBpcGVsaW5lU3RhdHVzKHBzZXQuZGIp ICE9IFBRX1BJUEVMSU5FX09GRikKKwkJCXsKKwkJCQlwc2V0Lm51bV9zeW5jcysrOworCQkJCXBz ZXQucGVuZGluZ19yZXN1bHRzICs9IHBzZXQubnVtX3F1ZXJpZXM7CisJCQkJcHNldC5udW1fcXVl cmllcyA9IDA7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQU1FMX0ZMVVNIOgorCQkJc3VjY2Vz cyA9IFBRZmx1c2gocHNldC5kYik7CisJCQlicmVhazsKKwkJY2FzZSBQU1FMX1NFTkRfRkxVU0hf UkVRVUVTVDoKKwkJCXN1Y2Nlc3MgPSBQUXNlbmRGbHVzaFJlcXVlc3QocHNldC5kYik7CisJCQlp ZiAoc3VjY2VzcyAmJiBQUXBpcGVsaW5lU3RhdHVzKHBzZXQuZGIpICE9IFBRX1BJUEVMSU5FX09G RikKKwkJCXsKKwkJCQlwc2V0LnBlbmRpbmdfcmVzdWx0cyArPSBwc2V0Lm51bV9xdWVyaWVzOwor CQkJCXBzZXQubnVtX3F1ZXJpZXMgPSAwOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUFNRTF9H RVRfUkVTVUxUUzoKKwkJCWlmIChwc2V0LnBlbmRpbmdfcmVzdWx0cyA9PSAwKQorCQkJeworCQkJ CS8qCisJCQkJICogSWYgbm8gc3luYyBvciBmbHVzaCByZXF1ZXN0IHdlcmUgc2VudCwgUFFnZXRS ZXN1bHQgd2lsbAorCQkJCSAqIGJsb2NrLiBGb3JiaWQgdGhlIGNhbGwgdG8gXGdldHJlc3VsdHMg dG8gYXZvaWQgc3RheWluZworCQkJCSAqIHN0dWNrCisJCQkJICovCisJCQkJcGdfbG9nX2luZm8o Ik5vIHBlbmRpbmcgcmVzdWx0cyB0byBnZXQiKTsKKwkJCQlzdWNjZXNzID0gZmFsc2U7CisJCQl9 CisJCQllbHNlCisJCQl7CisJCQkJZ2V0X3BlbmRpbmdfcmVzdWx0cyA9IHRydWU7CisJCQkJc3Vj Y2VzcyA9IHRydWU7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBQU1FMX1NFTkRfUVVFUlk6CiAJ CQlzdWNjZXNzID0gUFFzZW5kUXVlcnkocHNldC5kYiwgcXVlcnkpOwpAQCAtMTUwMSw2ICsxNjEw LDE2IEBAIEV4ZWNRdWVyeUFuZFByb2Nlc3NSZXN1bHRzKGNvbnN0IGNoYXIgKnF1ZXJ5LAogCQly ZXR1cm4gLTE7CiAJfQogCisJaWYgKCFnZXRfcGVuZGluZ19yZXN1bHRzICYmICFwcm9jZXNzX3Bp cGVsaW5lICYmCisJCVBRcGlwZWxpbmVTdGF0dXMocHNldC5kYikgIT0gUFFfUElQRUxJTkVfT0ZG KQorCXsKKwkJLyoKKwkJICogV2UncmUgaW4gYSBwaXBlbGluZSBhbmQgaGF2ZW4ndCByZWFjaGVk IHRoZSBwaXBlbGluZSBlbmQgb3IgdGhlcmUKKwkJICogd2FzIG5vIHJlcXVlc3QgdG8gcmVhZCBw aXBlbGluZSByZXN1bHRzLCBleGl0LgorCQkgKi8KKwkJcmV0dXJuIDE7CisJfQorCiAJLyoKIAkg KiBGZXRjaCB0aGUgcmVzdWx0IGluIGNodW5rcyBpZiBGRVRDSF9DT1VOVCBpcyBzZXQsIGV4Y2Vw dCB3aGVuOgogCSAqCkBAIC0xNTQ4LDcgKzE2NjcsNyBAQCBFeGVjUXVlcnlBbmRQcm9jZXNzUmVz dWx0cyhjb25zdCBjaGFyICpxdWVyeSwKIAl7CiAJCUV4ZWNTdGF0dXNUeXBlIHJlc3VsdF9zdGF0 dXM7CiAJCWJvb2wJCWlzX2NodW5rZWRfcmVzdWx0ID0gZmFsc2U7Ci0JCVBHcmVzdWx0ICAgKm5l eHRfcmVzdWx0OworCQlQR3Jlc3VsdCAgICpuZXh0X3Jlc3VsdCA9IE5VTEw7CiAJCWJvb2wJCWxh c3Q7CiAKIAkJaWYgKCFBY2NlcHRSZXN1bHQocmVzdWx0LCBmYWxzZSkpCkBAIC0xNTcxLDYgKzE2 OTAsOSBAQCBFeGVjUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwKIAkJ CUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdCk7CiAJCQlzdWNjZXNzID0gZmFsc2U7CiAKKwkJCWlm IChyZXN1bHRfc3RhdHVzID09IFBHUkVTX1BJUEVMSU5FX0FCT1JURUQpCisJCQkJcGdfbG9nX2lu Zm8oIlBpcGVsaW5lIGFib3J0ZWQsIGNvbW1hbmQgZGlkbid0IHJ1biIpOworCiAJCQkvKgogCQkJ ICogc3dpdGNoIHRvIG5leHQgcmVzdWx0CiAJCQkgKi8KQEAgLTE1ODUsNiArMTcwNywxNSBAQCBF eGVjUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwKIAkJCQkgKiBpZ25v cmUgbWFudWFsbHkuCiAJCQkJICovCiAJCQkJcmVzdWx0ID0gTlVMTDsKKwkJCWVsc2UgaWYgKHBy b2Nlc3NfcGlwZWxpbmUgfHwgZ2V0X3BlbmRpbmdfcmVzdWx0cykKKworCQkJCS8qCisJCQkJICog V2UgaGF2ZSBhbiBlcnJvciB3aXRoaW4gYSBwaXBlbGluZS4gQWxsIGNvbW1hbmRzIGFyZQorCQkJ CSAqIGFib3J0ZWQgdW50aWwgdGhlIG5leHQgc3luY2hyb25pc2F0aW9uIHBvaW50LiBXZSBuZWVk IHRvCisJCQkJICogY29uc3VtZSBhbGwgcmVzdWx0cyB1bnRpbCB0aGlzIHN5bmNocm9uaXNhdGlv biBwb2ludCwgb3IKKwkJCQkgKiBzdG9wIHdoZW4gdGhlcmUncyBubyBtb3JlIHJlc3VsdCB0byBk aXNjYXJkCisJCQkJICovCisJCQkJcmVzdWx0ID0gZGlzY2FyZEFib3J0ZWRQaXBlbGluZVJlc3Vs dHMoKTsKIAkJCWVsc2UKIAkJCQlyZXN1bHQgPSBQUWdldFJlc3VsdChwc2V0LmRiKTsKIApAQCAt MTc3MSwxMiArMTkwMiw1OSBAQCBFeGVjUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFy ICpxdWVyeSwKIAkJCX0KIAkJfQogCisJCWlmIChyZXN1bHRfc3RhdHVzID09IFBHUkVTX1BJUEVM SU5FX1NZTkMpCisJCXsKKwkJCUFzc2VydChwc2V0Lm51bV9zeW5jcyA+IDApOworCQkJLyogV2Ug aGF2ZSBhIHN5bmMgcmVzcG9uc2UsIGRlY3JlYXNlIHRoZSBzeW5jIGNvdW50ZXIgKi8KKwkJCXBz ZXQubnVtX3N5bmNzLS07CisKKwkJCS8qCisJCQkgKiBBZnRlciBhIHN5bmNocm9uaXNhdGlvbiBw b2ludCwgcmVzZXQgc3VjY2VzcyBzdGF0ZSB0byBwcmludAorCQkJICogcG9zc2libGUgc3VjY2Vz c2Z1bCByZXN1bHRzIHRoYXQgd2lsbCBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhpcworCQkJICovCisJ CQlzdWNjZXNzID0gdHJ1ZTsKKworCQkJLyoKKwkJCSAqIElmIGFsbCBzeW5jcyB3ZXJlIHByb2Nl c3NlZCBhbmQgcGlwZWxpbmUgZW5kIHdhcyByZXF1ZXN0ZWQsCisJCQkgKiBleGl0IHBpcGVsaW5l IG1vZGUKKwkJCSAqLworCQkJaWYgKHByb2Nlc3NfcGlwZWxpbmUgJiYgcHNldC5udW1fc3luY3Mg PT0gMCkKKwkJCQlzdWNjZXNzICY9IFBRZXhpdFBpcGVsaW5lTW9kZShwc2V0LmRiKTsKKwkJfQor CQllbHNlIGlmIChQUXBpcGVsaW5lU3RhdHVzKHBzZXQuZGIpICE9IFBRX1BJUEVMSU5FX09GRiAm JgorCQkJCSByZXN1bHRfc3RhdHVzICE9IFBHUkVTX1BJUEVMSU5FX1NZTkMpCisKKwkJCS8qCisJ CQkgKiBXZSBhcmUgaW4gYSBwaXBlbGluZSBhbmQgaGF2ZSBhIG5vbiBzeW5jIHJlc3BvbnNlLCBk ZWNyZWFzZSB0aGUKKwkJCSAqIHBlbmRpbmcgcmVzdWx0cyBjb3VudGVyCisJCQkgKi8KKwkJCXBz ZXQucGVuZGluZ19yZXN1bHRzLS07CisKIAkJLyoKIAkJICogQ2hlY2sgUFFnZXRSZXN1bHQoKSBh Z2Fpbi4gIEluIHRoZSB0eXBpY2FsIGNhc2Ugb2YgYSBzaW5nbGUtY29tbWFuZAogCQkgKiBzdHJp bmcsIGl0IHdpbGwgcmV0dXJuIE5VTEwuICBPdGhlcndpc2UsIHdlJ2xsIGhhdmUgb3RoZXIgcmVz dWx0cwogCQkgKiB0byBwcm9jZXNzLiAgV2UgbmVlZCB0byBkbyB0aGF0IHRvIGNoZWNrIHdoZXRo ZXIgdGhpcyBpcyB0aGUgbGFzdC4KIAkJICovCi0JCW5leHRfcmVzdWx0ID0gUFFnZXRSZXN1bHQo cHNldC5kYik7CisJCWlmIChQUXBpcGVsaW5lU3RhdHVzKHBzZXQuZGIpID09IFBRX1BJUEVMSU5F X09GRikKKwkJCW5leHRfcmVzdWx0ID0gUFFnZXRSZXN1bHQocHNldC5kYik7CisJCWVsc2UKKwkJ eworCQkJLyoKKwkJCSAqIEluIHBpcGVsaW5lIG1vZGUsIGEgTlVMTCByZXN1bHQgaW5kaWNhdGVz IHRoZSBlbmQgb2YgdGhlCisJCQkgKiBjdXJyZW50IHF1ZXJ5IGJlaW5nIHByb2Nlc3NlZC4gQ2Fs bCBQUWdldFJlc3VsdCB0byBjb25zdW1lIHRoaXMKKwkJCSAqIE5VTEwKKwkJCSAqLworCQkJaWYg KHJlc3VsdF9zdGF0dXMgIT0gUEdSRVNfUElQRUxJTkVfU1lOQykKKwkJCXsKKwkJCQluZXh0X3Jl c3VsdCA9IFBRZ2V0UmVzdWx0KHBzZXQuZGIpOworCQkJCUFzc2VydChuZXh0X3Jlc3VsdCA9PSBO VUxMKTsKKwkJCX0KKworCQkJLyogV2UgY2FuIG5vdyBnZXQgdGhlIG5leHQgcmVzdWx0IGluIHRo ZSBwaXBlbGluZSAqLworCQkJaWYgKHBzZXQubnVtX3N5bmNzID4gMCB8fCBwc2V0LnBlbmRpbmdf cmVzdWx0cyA+IDApCisJCQkJbmV4dF9yZXN1bHQgPSBQUWdldFJlc3VsdChwc2V0LmRiKTsKKwkJ fQorCiAJCWxhc3QgPSAobmV4dF9yZXN1bHQgPT0gTlVMTCk7CiAKIAkJLyoKQEAgLTE3OTgsOCAr MTk3NiwxMiBAQCBFeGVjUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwK IAkJCSplbGFwc2VkX21zZWMgPSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhhZnRlcik7CiAJCX0K IAotCQkvKiB0aGlzIG1heSBvciBtYXkgbm90IHByaW50IHNvbWV0aGluZyBkZXBlbmRpbmcgb24g c2V0dGluZ3MgKi8KLQkJaWYgKHJlc3VsdCAhPSBOVUxMKQorCQkvKgorCQkgKiBUaGlzIG1heSBv ciBtYXkgbm90IHByaW50IHNvbWV0aGluZyBkZXBlbmRpbmcgb24gc2V0dGluZ3MuIEEKKwkJICog cGlwZWxpbmUgc3luYyB3aWxsIGhhdmUgYSBub24gbnVsbCByZXN1bHQgYnV0IGRvZXNuJ3QgaGF2 ZSBhbnl0aGluZworCQkgKiB0byBwcmludCwgdGh1cyBpZ25vcmUgdGhlbQorCQkgKi8KKwkJaWYg KHJlc3VsdCAhPSBOVUxMICYmIHJlc3VsdF9zdGF0dXMgIT0gUEdSRVNfUElQRUxJTkVfU1lOQykK IAkJewogCQkJLyoKIAkJCSAqIElmIHJlc3VsdHMgbmVlZCB0byBiZSBwcmludGVkIGludG8gdGhl IGZpbGUgc3BlY2lmaWVkIGJ5IFxnLApAQCAtMTgzNyw2ICsyMDE5LDE1IEBAIEV4ZWNRdWVyeUFu ZFByb2Nlc3NSZXN1bHRzKGNvbnN0IGNoYXIgKnF1ZXJ5LAogCS8qIGNsb3NlIFxnIGZpbGUgaWYg d2Ugb3BlbmVkIGl0ICovCiAJQ2xvc2VHT3V0cHV0KGdmaWxlX2ZvdXQsIGdmaWxlX2lzX3BpcGUp OwogCisJaWYgKHByb2Nlc3NfcGlwZWxpbmUpCisJeworCQkvKiBBZnRlciBhIHBpcGVsaW5lIGlz IHByb2Nlc3NlZCwgcGlwZWxpbmUgbnVtX3N5bmNzIHNob3VsZCBiZSAwICovCisJCUFzc2VydChw c2V0Lm51bV9zeW5jcyA9PSAwKTsKKwkJLyogYW5kIGFsbCBxdWVyaWVzIHdlcmUgcHJvY2Vzc2Vk ICovCisJCUFzc2VydChwc2V0Lm51bV9xdWVyaWVzID09IDApOworCX0KKwlBc3NlcnQocHNldC5w ZW5kaW5nX3Jlc3VsdHMgPT0gMCk7CisKIAkvKiBtYXkgbmVlZCB0aGlzIHRvIHJlY292ZXIgZnJv bSBjb25uIGxvc3MgZHVyaW5nIENPUFkgKi8KIAlpZiAoIUNoZWNrQ29ubmVjdGlvbigpKQogCQly ZXR1cm4gLTE7CkBAIC0yMjk2LDcgKzI0ODcsMTMgQEAgY2xlYW5fZXh0ZW5kZWRfc3RhdGUodm9p ZCkKIAkJCWZyZWUocHNldC5zdG10TmFtZSk7CiAJCQlwc2V0LmJpbmRfcGFyYW1zID0gTlVMTDsK IAkJCWJyZWFrOworCQljYXNlIFBTUUxfU1RBUlRfUElQRUxJTkVfTU9ERToJLyogXHN0YXJ0cGlw ZWxpbmUgKi8KKwkJY2FzZSBQU1FMX0VORF9QSVBFTElORV9NT0RFOgkvKiBcZW5kcGlwZWxpbmUg Ki8KKwkJY2FzZSBQU1FMX1NFTkRfUElQRUxJTkVfU1lOQzoJLyogXHN5bmNwaXBlbGluZSAqLwog CQljYXNlIFBTUUxfU0VORF9RVUVSWToKKwkJY2FzZSBQU1FMX0ZMVVNIOgkJLyogXGZsdXNoICov CisJCWNhc2UgUFNRTF9HRVRfUkVTVUxUUzoJLyogXGdldHJlc3VsdHMgKi8KKwkJY2FzZSBQU1FM X1NFTkRfRkxVU0hfUkVRVUVTVDoJLyogXGZsdXNocmVxdWVzdCAqLwogCQkJYnJlYWs7CiAJfQog CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvaGVscC5jIGIvc3JjL2Jpbi9wc3FsL2hlbHAuYwpp bmRleCAzZjRhZmMyZDE0MS4uZDE1ZmY2ZDQwYzMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9o ZWxwLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2hlbHAuYwpAQCAtMTY3LDE1ICsxNjcsMjEgQEAgc2xh c2hVc2FnZSh1bnNpZ25lZCBzaG9ydCBpbnQgcGFnZXIpCiAJSEVMUDAoIiAgXFxjbG9zZSBTVE1U X05BTUUgICAgICAgY2xvc2UgYW4gZXhpc3RpbmcgcHJlcGFyZWQgc3RhdGVtZW50XG4iKTsKIAlI RUxQMCgiICBcXGNvcHlyaWdodCAgICAgICAgICAgICBzaG93IFBvc3RncmVTUUwgdXNhZ2UgYW5k IGRpc3RyaWJ1dGlvbiB0ZXJtc1xuIik7CiAJSEVMUDAoIiAgXFxjcm9zc3RhYnZpZXcgW0NPTFVN TlNdIGV4ZWN1dGUgcXVlcnkgYW5kIGRpc3BsYXkgcmVzdWx0IGluIGNyb3NzdGFiXG4iKTsKKwlI RUxQMCgiICBcXGVuZHBpcGVsaW5lICAgICAgICAgICBleGl0IHBpcGVsaW5lIG1vZGVcbiIpOwog CUhFTFAwKCIgIFxcZXJydmVyYm9zZSAgICAgICAgICAgIHNob3cgbW9zdCByZWNlbnQgZXJyb3Ig bWVzc2FnZSBhdCBtYXhpbXVtIHZlcmJvc2l0eVxuIik7CisJSEVMUDAoIiAgXFxmbHVzaCAgICAg ICAgICAgICAgICAgcHVzaCB1bnNlbnQgZGF0YSB0byB0aGUgc2VydmVyXG4iKTsKKwlIRUxQMCgi ICBcXGZsdXNocmVxdWVzdCAgICAgICAgICBzZW5kIGEgZmx1c2hyZXF1ZXN0IGNvbW1hbmRcbiIp OwogCUhFTFAwKCIgIFxcZyBbKE9QVElPTlMpXSBbRklMRV0gIGV4ZWN1dGUgcXVlcnkgKGFuZCBz ZW5kIHJlc3VsdCB0byBmaWxlIG9yIHxwaXBlKTtcbiIKIAkJICAiICAgICAgICAgICAgICAgICAg ICAgICAgIFxcZyB3aXRoIG5vIGFyZ3VtZW50cyBpcyBlcXVpdmFsZW50IHRvIGEgc2VtaWNvbG9u XG4iKTsKIAlIRUxQMCgiICBcXGdkZXNjICAgICAgICAgICAgICAgICBkZXNjcmliZSByZXN1bHQg b2YgcXVlcnksIHdpdGhvdXQgZXhlY3V0aW5nIGl0XG4iKTsKKwlIRUxQMCgiICBcXGdldHJlc3Vs dHMgICAgICAgICAgICByZWFkIHBlbmRpbmcgcmVzdWx0c1xuIik7CiAJSEVMUDAoIiAgXFxnZXhl YyAgICAgICAgICAgICAgICAgZXhlY3V0ZSBxdWVyeSwgdGhlbiBleGVjdXRlIGVhY2ggdmFsdWUg aW4gaXRzIHJlc3VsdFxuIik7CiAJSEVMUDAoIiAgXFxnc2V0IFtQUkVGSVhdICAgICAgICAgZXhl Y3V0ZSBxdWVyeSBhbmQgc3RvcmUgcmVzdWx0IGluIHBzcWwgdmFyaWFibGVzXG4iKTsKIAlIRUxQ MCgiICBcXGd4IFsoT1BUSU9OUyldIFtGSUxFXSBhcyBcXGcsIGJ1dCBmb3JjZXMgZXhwYW5kZWQg b3V0cHV0IG1vZGVcbiIpOwogCUhFTFAwKCIgIFxccGFyc2UgU1RNVF9OQU1FICAgICAgIGNyZWF0 ZSBhIHByZXBhcmVkIHN0YXRlbWVudFxuIik7CiAJSEVMUDAoIiAgXFxxICAgICAgICAgICAgICAg ICAgICAgcXVpdCBwc3FsXG4iKTsKKwlIRUxQMCgiICBcXHN0YXJ0cGlwZWxpbmUgICAgICAgICBl bnRlciBwaXBlbGluZSBtb2RlXG4iKTsKKwlIRUxQMCgiICBcXHN5bmNwaXBlbGluZSAgICAgICAg ICBhZGQgYSBzeW5jaHJvbmlzYXRpb24gcG9pbnQgdG8gYW4gb25nb2luZyBwaXBlbGluZVxuIik7 CiAJSEVMUDAoIiAgXFx3YXRjaCBbW2k9XVNFQ10gW2M9Tl0gW209TUlOXVxuIgogCQkgICIgICAg ICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZSBxdWVyeSBldmVyeSBTRUMgc2Vjb25kcywgdXAg dG8gTiB0aW1lcyxcbiIKIAkJICAiICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3AgaWYgbGVz cyB0aGFuIE1JTiByb3dzIGFyZSByZXR1cm5lZFxuIik7CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bz cWwvcHJvbXB0LmMgYi9zcmMvYmluL3BzcWwvcHJvbXB0LmMKaW5kZXggMGQ5OWQwMGFjOTIuLjEy NmE2MjUyYzU2IDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvcHJvbXB0LmMKKysrIGIvc3JjL2Jp bi9wc3FsL3Byb21wdC5jCkBAIC0zMSw2ICszMSw5IEBACiAgKgkJc29ja2V0cywgIltsb2NhbDov ZGlyL25hbWVdIiBpZiBub3QgZGVmYXVsdAogICogJW0gLSBsaWtlICVNLCBidXQgaG9zdG5hbWUg b25seSAoYmVmb3JlIGZpcnN0IGRvdCksIG9yIGFsd2F5cyAiW2xvY2FsXSIKICAqICVwIC0gYmFj a2VuZCBwaWQKKyAqICVQIC0gcGlwZWxpbmUgc3RhdHVzOiBubyBwaXBlbGluZTogZW1wdHkKKyAq IAkJb25nb2luZyBwaXBlbGluZTogfG51bV9zeW5jcyxudW1fcXVlcmllcyxwZW5kaW5nX3Jlc3Vs dHN8CisgKiAJCWFib3J0ZWQgcGlwZWxpbmU6ICtudW1fc3luY3MsbnVtX3F1ZXJpZXMscGVuZGlu Z19yZXN1bHRzKwogICogJT4gLSBkYXRhYmFzZSBzZXJ2ZXIgcG9ydCBudW1iZXIKICAqICVuIC0g ZGF0YWJhc2UgdXNlciBuYW1lCiAgKiAlLyAtIGN1cnJlbnQgZGF0YWJhc2UKQEAgLTE3NSw3ICsx NzgsMTYgQEAgZ2V0X3Byb21wdChwcm9tcHRTdGF0dXNfdCBzdGF0dXMsIENvbmRpdGlvbmFsU3Rh Y2sgY3N0YWNrKQogCQkJCQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIHBpZCk7 CiAJCQkJCX0KIAkJCQkJYnJlYWs7CisJCQkJY2FzZSAnUCc6CisJCQkJCXsKKwkJCQkJCVBHcGlw ZWxpbmVTdGF0dXMgc3RhdHVzID0gUFFwaXBlbGluZVN0YXR1cyhwc2V0LmRiKTsKIAorCQkJCQkJ aWYgKHN0YXR1cyA9PSBQUV9QSVBFTElORV9PTikKKwkJCQkJCQlzbnByaW50ZihidWYsIHNpemVv ZihidWYpLCAifCVkLCVkLCVkfCIsIHBzZXQubnVtX3N5bmNzLCBwc2V0Lm51bV9xdWVyaWVzLCBw c2V0LnBlbmRpbmdfcmVzdWx0cyk7CisJCQkJCQllbHNlIGlmIChzdGF0dXMgPT0gUFFfUElQRUxJ TkVfQUJPUlRFRCkKKwkJCQkJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiKyVkLCVkLCVk KyIsIHBzZXQubnVtX3N5bmNzLCBwc2V0Lm51bV9xdWVyaWVzLCBwc2V0LnBlbmRpbmdfcmVzdWx0 cyk7CisJCQkJCQlicmVhazsKKwkJCQkJfQogCQkJCWNhc2UgJzAnOgogCQkJCWNhc2UgJzEnOgog CQkJCWNhc2UgJzInOgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3NldHRpbmdzLmggYi9zcmMv YmluL3BzcWwvc2V0dGluZ3MuaAppbmRleCBhMjJkZThlZjc4ZS4uNDAwYThhOWQ4NzggMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcHNxbC9zZXR0aW5ncy5oCisrKyBiL3NyYy9iaW4vcHNxbC9zZXR0aW5n cy5oCkBAIC0yMyw4ICsyMyw4IEBACiAjZGVmaW5lIERFRkFVTFRfRURJVE9SX0xJTkVOVU1CRVJf QVJHICIrIgogI2VuZGlmCiAKLSNkZWZpbmUgREVGQVVMVF9QUk9NUFQxICIlLyVSJXglIyAiCi0j ZGVmaW5lIERFRkFVTFRfUFJPTVBUMiAiJS8lUiV4JSMgIgorI2RlZmluZSBERUZBVUxUX1BST01Q VDEgIiUvJVIlUCV4JSMgIgorI2RlZmluZSBERUZBVUxUX1BST01QVDIgIiUvJVIlUCV4JSMgIgog I2RlZmluZSBERUZBVUxUX1BST01QVDMgIj4+ICIKIAogLyoKQEAgLTY5LDYgKzY5LDEyIEBAIHR5 cGVkZWYgZW51bQogCVBTUUxfU0VORF9FWFRFTkRFRF9QQVJTRSwKIAlQU1FMX1NFTkRfRVhURU5E RURfUVVFUllfUEFSQU1TLAogCVBTUUxfU0VORF9FWFRFTkRFRF9RVUVSWV9QUkVQQVJFRCwKKwlQ U1FMX1NFTkRfUElQRUxJTkVfU1lOQywKKwlQU1FMX1NUQVJUX1BJUEVMSU5FX01PREUsCisJUFNR TF9FTkRfUElQRUxJTkVfTU9ERSwKKwlQU1FMX0ZMVVNILAorCVBTUUxfU0VORF9GTFVTSF9SRVFV RVNULAorCVBTUUxfR0VUX1JFU1VMVFMsCiB9IFBTUUxfU0VORF9NT0RFOwogCiB0eXBlZGVmIGVu dW0KQEAgLTExMSw2ICsxMTcsOSBAQCB0eXBlZGVmIHN0cnVjdCBfcHNxbFNldHRpbmdzCiAJY2hh cgkgICoqYmluZF9wYXJhbXM7CS8qIHBhcmFtZXRlcnMgZm9yIGV4dGVuZGVkIHF1ZXJ5IHByb3Rv Y29sIGNhbGwgKi8KIAljaGFyCSAgICpzdG10TmFtZTsJCS8qIHByZXBhcmVkIHN0YXRlbWVudCBu YW1lIHVzZWQgZm9yIGV4dGVuZGVkCiAJCQkJCQkJCSAqIHF1ZXJ5IHByb3RvY29sIGNvbW1hbmRz ICovCisJaW50CQkJcGVuZGluZ19yZXN1bHRzOy8qIG51bWJlciBvZiByZXN1bHRzIGF2YWlsYWJs ZSB0byByZWFkICovCisJaW50CQkJbnVtX3F1ZXJpZXM7CS8qIG51bWJlciBvZiBwaXBlZCBxdWVy aWVzICovCisJaW50CQkJbnVtX3N5bmNzOwkJLyogbnVtYmVyIG9mIHBpcGVkIHN5bmNzICovCiAJ Ym9vbAkJY3Jvc3N0YWJfZmxhZzsJLyogb25lLXNob3QgcmVxdWVzdCB0byBjcm9zc3RhYiByZXN1 bHQgKi8KIAljaGFyCSAgICpjdHZfYXJnc1s0XTsJLyogXGNyb3NzdGFidmlldyBhcmd1bWVudHMg Ki8KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jIGIvc3JjL2Jp bi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCmluZGV4IGJiZDA4NzcwYzNkLi5kZTcyNDBkODY5MCAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCisrKyBiL3NyYy9iaW4v cHNxbC90YWItY29tcGxldGUuaW4uYwpAQCAtMTg2Nyw5ICsxODY3LDkgQEAgcHNxbF9jb21wbGV0 aW9uKGNvbnN0IGNoYXIgKnRleHQsIGludCBzdGFydCwgaW50IGVuZCkKIAkJIlxcZHJkcyIsICJc XGRyZyIsICJcXGRScyIsICJcXGRScCIsICJcXGRzIiwKIAkJIlxcZHQiLCAiXFxkVCIsICJcXGR2 IiwgIlxcZHUiLCAiXFxkeCIsICJcXGRYIiwgIlxcZHkiLAogCQkiXFxlY2hvIiwgIlxcZWRpdCIs ICJcXGVmIiwgIlxcZWxpZiIsICJcXGVsc2UiLCAiXFxlbmNvZGluZyIsCi0JCSJcXGVuZGlmIiwg IlxcZXJydmVyYm9zZSIsICJcXGV2IiwKLQkJIlxcZiIsCi0JCSJcXGciLCAiXFxnZGVzYyIsICJc XGdldGVudiIsICJcXGdleGVjIiwgIlxcZ3NldCIsICJcXGd4IiwKKwkJIlxcZW5kaWYiLCAiXFxl bmRwaXBlbGluZSIsICJcXGVycnZlcmJvc2UiLCAiXFxldiIsCisJCSJcXGYiLCAiXFxmbHVzaCIs ICJcXGZsdXNocmVxdWVzdCIsCisJCSJcXGciLCAiXFxnZGVzYyIsICJcXGdldGVudiIsICJcXGdl dHJlc3VsdHMiLCAiXFxnZXhlYyIsICJcXGdzZXQiLCAiXFxneCIsCiAJCSJcXGhlbHAiLCAiXFxo dG1sIiwKIAkJIlxcaWYiLCAiXFxpbmNsdWRlIiwgIlxcaW5jbHVkZV9yZWxhdGl2ZSIsICJcXGly IiwKIAkJIlxcbGlzdCIsICJcXGxvX2ltcG9ydCIsICJcXGxvX2V4cG9ydCIsICJcXGxvX2xpc3Qi LCAiXFxsb191bmxpbmsiLApAQCAtMTg3Nyw3ICsxODc3LDcgQEAgcHNxbF9jb21wbGV0aW9uKGNv bnN0IGNoYXIgKnRleHQsIGludCBzdGFydCwgaW50IGVuZCkKIAkJIlxccGFyc2UiLCAiXFxwYXNz d29yZCIsICJcXHByaW50IiwgIlxccHJvbXB0IiwgIlxccHNldCIsCiAJCSJcXHFlY2hvIiwgIlxc cXVpdCIsCiAJCSJcXHJlc2V0IiwKLQkJIlxccyIsICJcXHNldCIsICJcXHNldGVudiIsICJcXHNm IiwgIlxcc3YiLAorCQkiXFxzIiwgIlxcc2V0IiwgIlxcc2V0ZW52IiwgIlxcc2YiLCAiXFxzdGFy dHBpcGVsaW5lIiwgIlxcc3YiLCAiXFxzeW5jcGlwZWxpbmUiLAogCQkiXFx0IiwgIlxcVCIsICJc XHRpbWluZyIsCiAJCSJcXHVuc2V0IiwKIAkJIlxceCIsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3Fs Lm91dAppbmRleCAzNmRjMzFjMTZjNC4uODFhZTIxNzZlNDQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9wc3FsLm91dApAQCAtNjgyOCwzICs2ODI4LDU1MCBAQCBDUkVBVEUgVEFCTEUgZGVmcHJpdnMg KGEgaW50KTsKIAogXHBzZXQgbnVsbCAnJwogRFJPUCBUQUJMRSBkZWZwcml2czsKKy0tIHBpcGVs aW5pbmcKK0NSRUFURSBUQUJMRSBwc3FsX3BpcGVsaW5lKGEgSU5URUdFUiBQUklNQVJZIEtFWSwg cyBURVhUKTsKKy0tIHNpbmdsZSBxdWVyeQorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmlu ZCAndmFsMScgXGcKK1xlbmRwaXBlbGluZQorID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHZhbDEK KygxIHJvdykKKworLS0gbXVsdGlwbGUgcXVlcmllcworXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAk MSBcYmluZCAndmFsMScgXGcKK1NFTEVDVCAkMSwgJDIgXGJpbmQgJ3ZhbDInICd2YWwzJyBcZwor U0VMRUNUICQxLCAkMiBcYmluZCAndmFsMicgJ3ZhbDMnIFxnCitcZW5kcGlwZWxpbmUKKyA/Y29s dW1uPyAKKy0tLS0tLS0tLS0KKyB2YWwxCisoMSByb3cpCisKKyA/Y29sdW1uPyB8ID9jb2x1bW4/ IAorLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgdmFsMiAgICAgfCB2YWwzCisoMSByb3cpCisKKyA/ Y29sdW1uPyB8ID9jb2x1bW4/IAorLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgdmFsMiAgICAgfCB2 YWwzCisoMSByb3cpCisKKy0tIHNlbmQgbXVsdGlwbGUgc3luY3MKK1xzdGFydHBpcGVsaW5lCitT RUxFQ1QgJDEgXGJpbmQgJ3ZhbDEnIFxnCitcc3luY3BpcGVsaW5lCitcc3luY3BpcGVsaW5lCitT RUxFQ1QgJDEsICQyIFxiaW5kICd2YWwyJyAndmFsMycgXGcKK1xzeW5jcGlwZWxpbmUKK1NFTEVD VCAkMSwgJDIgXGJpbmQgJ3ZhbDQnICd2YWw1JyBcZworXGVuZHBpcGVsaW5lCisgP2NvbHVtbj8g CistLS0tLS0tLS0tCisgdmFsMQorKDEgcm93KQorCisgP2NvbHVtbj8gfCA/Y29sdW1uPyAKKy0t LS0tLS0tLS0rLS0tLS0tLS0tLQorIHZhbDIgICAgIHwgdmFsMworKDEgcm93KQorCisgP2NvbHVt bj8gfCA/Y29sdW1uPyAKKy0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHZhbDQgICAgIHwgdmFsNQor KDEgcm93KQorCistLSBzdGFydHBpcGVsaW5lIHNob3VsZG4ndCBoYXZlIGFueSBlZmZlY3QgaWYg YWxyZWFkeSBpbiBhIHBpcGVsaW5lCitcc3RhcnRwaXBlbGluZQorXHN0YXJ0cGlwZWxpbmUKK1NF TEVDVCAkMSBcYmluZCAndmFsMScgXGcKK1xlbmRwaXBlbGluZQorID9jb2x1bW4/IAorLS0tLS0t LS0tLQorIHZhbDEKKygxIHJvdykKKworLS0gQ29udmVydCBhbiBpbXBsaWNpdCB0eCBibG9jayB0 byBhbiBleHBsaWNpdCB0eCBibG9jaworXHN0YXJ0cGlwZWxpbmUKK0lOU0VSVCBJTlRPIHBzcWxf cGlwZWxpbmUgVkFMVUVTICgkMSkgXGJpbmQgMSBcZworQkVHSU4gXGJpbmQgXGcKK0lOU0VSVCBJ TlRPIHBzcWxfcGlwZWxpbmUgVkFMVUVTICgkMSkgXGJpbmQgMiBcZworUk9MTEJBQ0sgXGJpbmQg XGcKK1xlbmRwaXBlbGluZQorLS0gTXVsdGlwbGUgZXhwbGljaXQgdHJhbnNhY3Rpb25zCitcc3Rh cnRwaXBlbGluZQorQkVHSU4gXGJpbmQgXGcKK0lOU0VSVCBJTlRPIHBzcWxfcGlwZWxpbmUgVkFM VUVTICgkMSkgXGJpbmQgMSBcZworUk9MTEJBQ0sgXGJpbmQgXGcKK0JFR0lOIFxiaW5kIFxnCitJ TlNFUlQgSU5UTyBwc3FsX3BpcGVsaW5lIFZBTFVFUyAoJDEpIFxiaW5kIDEgXGcKK0NPTU1JVCBc YmluZCBcZworXGVuZHBpcGVsaW5lCistLSBDT1BZIEZST00gU1RESU4KK1xzdGFydHBpcGVsaW5l CitTRUxFQ1QgJDEgXGJpbmQgJ3ZhbDEnIFxnCitDT1BZIHBzcWxfcGlwZWxpbmUgRlJPTSBTVERJ TiBcYmluZCBcZworXGVuZHBpcGVsaW5lCisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgdmFsMQor KDEgcm93KQorCistLSBDT1BZIEZST00gU1RESU4gd2l0aCBcZmx1c2hyZXF1ZXN0ICsgXGdldHJl c3VsdHMKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgJ3ZhbDEnIFxnCitDT1BZIHBz cWxfcGlwZWxpbmUgRlJPTSBTVERJTiBcYmluZCBcZworXGZsdXNocmVxdWVzdAorXGdldHJlc3Vs dHMKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyB2YWwxCisoMSByb3cpCisKK21lc3NhZ2UgdHlw ZSAweDVhIGFycml2ZWQgZnJvbSBzZXJ2ZXIgd2hpbGUgaWRsZQorXGVuZHBpcGVsaW5lCistLSBD T1BZIEZST00gU1RESU4gd2l0aCBcc3luY3BpcGVsaW5lICsgXGdldHJlc3VsdHMKK1xzdGFydHBp cGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgJ3ZhbDEnIFxnCitDT1BZIHBzcWxfcGlwZWxpbmUgRlJP TSBTVERJTiBcYmluZCBcZworXHN5bmNwaXBlbGluZQorXGdldHJlc3VsdHMKKyA/Y29sdW1uPyAK Ky0tLS0tLS0tLS0KKyB2YWwxCisoMSByb3cpCisKK1xlbmRwaXBlbGluZQorLS0gQ09QWSBUTyBT VERPVVQKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgJ3ZhbDEnIFxnCitjb3B5IHBz cWxfcGlwZWxpbmUgVE8gU1RET1VUIFxiaW5kIFxnCitcZW5kcGlwZWxpbmUKKyA/Y29sdW1uPyAK Ky0tLS0tLS0tLS0KKyB2YWwxCisoMSByb3cpCisKKzEJXE4KKzIJdGVzdDIKKzMJdGVzdDMKKzQJ dGVzdDQKKy0tIENPUFkgVE8gU1RET1VUIHdpdGggXGZsdXNocmVxdWVzdCArIFxnZXRyZXN1bHRz Citcc3RhcnRwaXBlbGluZQorU0VMRUNUICQxIFxiaW5kICd2YWwxJyBcZworY29weSBwc3FsX3Bp cGVsaW5lIFRPIFNURE9VVCBcYmluZCBcZworXGZsdXNocmVxdWVzdAorXGdldHJlc3VsdHMKKyA/ Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyB2YWwxCisoMSByb3cpCisKKzEJXE4KKzIJdGVzdDIKKzMJ dGVzdDMKKzQJdGVzdDQKK1xlbmRwaXBlbGluZQorLS0gQ09QWSBUTyBTVERPVVQgd2l0aCBcc3lu Y3BpcGVsaW5lICsgXGdldHJlc3VsdHMKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQg J3ZhbDEnIFxnCitjb3B5IHBzcWxfcGlwZWxpbmUgVE8gU1RET1VUIFxiaW5kIFxnCitcc3luY3Bp cGVsaW5lCitcZ2V0cmVzdWx0cworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHZhbDEKKygxIHJv dykKKworMQlcTgorMgl0ZXN0MgorMwl0ZXN0MworNAl0ZXN0NAorXGVuZHBpcGVsaW5lCistLSBV c2UgXHBhcnNlIGFuZCBcYmluZF9uYW1lZAorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBccGFy c2UgJycKK1NFTEVDVCAkMSwgJDIgXHBhcnNlICcnCitTRUxFQ1QgJDIgXHBhcnNlIHBpcGVsaW5l XzEKK1xiaW5kX25hbWVkICcnIDEgMiBcZworXGJpbmRfbmFtZWQgcGlwZWxpbmVfMSAyIFxnCitc ZW5kcGlwZWxpbmUKK0VSUk9SOiAgY291bGQgbm90IGRldGVybWluZSBkYXRhIHR5cGUgb2YgcGFy YW1ldGVyICQxCistLSBcZ2V0cmVzdWx0cyBkaXNwbGF5cyBhbGwgcmVzdWx0cyBwcmVjZWRpbmcg YSBcZmx1c2hyZXF1ZXN0Citcc3RhcnRwaXBlbGluZQorU0VMRUNUICQxIFxiaW5kIDEgXGcKK1NF TEVDVCAkMSBcYmluZCAyIFxnCitcZmx1c2hyZXF1ZXN0CitcZ2V0cmVzdWx0cworID9jb2x1bW4/ IAorLS0tLS0tLS0tLQorIDEKKygxIHJvdykKKworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIDIK KygxIHJvdykKKworXGVuZHBpcGVsaW5lCistLSBcZ2V0cmVzdWx0cyBkaXNwbGF5cyBhbGwgcmVz dWx0cyBwcmVjZWRpbmcgYSBzeW5jCitcc3RhcnRwaXBlbGluZQorU0VMRUNUICQxIFxiaW5kIDEg XGcKK1NFTEVDVCAkMSBcYmluZCAyIFxnCitcc3luY3BpcGVsaW5lCitcZ2V0cmVzdWx0cworID9j b2x1bW4/IAorLS0tLS0tLS0tLQorIDEKKygxIHJvdykKKworID9jb2x1bW4/IAorLS0tLS0tLS0t LQorIDIKKygxIHJvdykKKworXGVuZHBpcGVsaW5lCistLSBcZ2V0cmVzdWx0cyBpbW1lZGlhdGVs eSByZXR1cm5zIGlmIHRoZXJlJ3Mgbm8gcmVzdWx0IHRvIGZldGNoCitcc3RhcnRwaXBlbGluZQor XGdldHJlc3VsdHMKK05vIHBlbmRpbmcgcmVzdWx0cyB0byBnZXQKK1NFTEVDVCAkMSBcYmluZCAy IFxnCitcZ2V0cmVzdWx0cworTm8gcGVuZGluZyByZXN1bHRzIHRvIGdldAorXGZsdXNocmVxdWVz dAorXGVuZHBpcGVsaW5lCisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgMgorKDEgcm93KQorCitc Z2V0cmVzdWx0cworTm8gcGVuZGluZyByZXN1bHRzIHRvIGdldAorLS0gXGdldHJlc3VsdHMgb25s eSBmZXRjaCByZXN1bHRzIHByZWNlZGluZyBhIGZsdXNocmVxdWVzdAorXHN0YXJ0cGlwZWxpbmUK K1NFTEVDVCAkMSBcYmluZCAyIFxnCitcZmx1c2hyZXF1ZXN0CitTRUxFQ1QgJDEgXGJpbmQgMiBc ZworXGdldHJlc3VsdHMKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAyCisoMSByb3cpCisKK1xl bmRwaXBlbGluZQorID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIDIKKygxIHJvdykKKworLS0gc2Ft ZSBmb3Igc3luYyByZXF1ZXN0Citcc3RhcnRwaXBlbGluZQorU0VMRUNUICQxIFxiaW5kIDIgXGcK K1xzeW5jcGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAyIFxnCitcZ2V0cmVzdWx0cworID9jb2x1 bW4/IAorLS0tLS0tLS0tLQorIDIKKygxIHJvdykKKworXGVuZHBpcGVsaW5lCisgP2NvbHVtbj8g CistLS0tLS0tLS0tCisgMgorKDEgcm93KQorCistLSB1c2UgcGlwZWxpbmUgd2l0aCBjaHVua2Vk IHJlc3VsdHMgd2l0aCBib3RoIFxnZXRyZXN1bHRzIGFuZCBcZW5kcGlwZWxpbmUKK1xzdGFydHBp cGVsaW5lCitcc2V0IEZFVENIX0NPVU5UIDEwCitTRUxFQ1QgJDEgXGJpbmQgMiBcZworXGZsdXNo cmVxdWVzdAorXGdldHJlc3VsdHMKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAyCisoMSByb3cp CisKK1NFTEVDVCAkMSBcYmluZCAyIFxnCitcZW5kcGlwZWxpbmUKKyA/Y29sdW1uPyAKKy0tLS0t LS0tLS0KKyAyCisoMSByb3cpCisKK1x1bnNldCBGRVRDSF9DT1VOVAorLS0gcGlwZWxpbmluZyBl cnJvcnMKKy0tIGVuZHBpcGVsaW5lIG91dHNpZGUgb2YgcGlwZWxpbmUgc2hvdWxkIGZhaWwKK1xl bmRwaXBlbGluZQorY2Fubm90IHNlbmQgcGlwZWxpbmUgd2hlbiBub3QgaW4gcGlwZWxpbmUgbW9k ZQorLS0gUXVlcnkgdXNpbmcgc2ltcGxlIHByb3RvY29sIHNob3VsZCBub3QgYmUgc2VudCBhbmQg c2hvdWxkIGxlYXZlIHRoZSBwaXBlbGluZSB1c2FibGUKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1Qg MTsKK1BRc2VuZFF1ZXJ5IG5vdCBhbGxvd2VkIGluIHBpcGVsaW5lIG1vZGUKK1NFTEVDVCAkMSBc YmluZCAndmFsMScgXGcKK1xlbmRwaXBlbGluZQorID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHZh bDEKKygxIHJvdykKKworLS0gQWZ0ZXIgYW4gYWJvcnRlZCBwaXBlbGluZSwgY29tbWFuZHMgYWZ0 ZXIgYSBzeW5jIHNob3VsZCBiZSBkaXNwbGF5ZWQKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEg XGJpbmQgXGcKK1xzeW5jcGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAxIFxnCitcZW5kcGlwZWxp bmUKK0VSUk9SOiAgYmluZCBtZXNzYWdlIHN1cHBsaWVzIDAgcGFyYW1ldGVycywgYnV0IHByZXBh cmVkIHN0YXRlbWVudCAiIiByZXF1aXJlcyAxCisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgMQor KDEgcm93KQorCistLSBJbmNvcnJlY3QgbnVtYmVyIG9mIHBhcmFtZXRlcnMsIHRoZSBwaXBlbGlu ZSB3aWxsIGJlIGFib3J0ZWQgYW5kIGZvbGxvd2luZyBxdWVyaWVzIHdvbid0IGJlIGV4ZWN1dGVk Citcc3RhcnRwaXBlbGluZQorU0VMRUNUIFxiaW5kICd2YWwxJyBcZworU0VMRUNUICQxIFxiaW5k ICd2YWwxJyBcZworXGVuZHBpcGVsaW5lCitFUlJPUjogIGJpbmQgbWVzc2FnZSBzdXBwbGllcyAx IHBhcmFtZXRlcnMsIGJ1dCBwcmVwYXJlZCBzdGF0ZW1lbnQgIiIgcmVxdWlyZXMgMAorLS0gQW4g ZXhwbGljaXQgdHJhbnNhY3Rpb24gd2l0aCBhbiBlcnJvciBuZWVkcyB0byBiZSByb2xsYmFja2Vk IGFmdGVyIHRoZSBwaXBlbGluZQorXHN0YXJ0cGlwZWxpbmUKK0JFR0lOIFxiaW5kIFxnCitJTlNF UlQgSU5UTyBwc3FsX3BpcGVsaW5lIFZBTFVFUyAoJDEpIFxiaW5kIDEgXGcKK1JPTExCQUNLIFxi aW5kIFxnCitcZW5kcGlwZWxpbmUKK0VSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRl cyB1bmlxdWUgY29uc3RyYWludCAicHNxbF9waXBlbGluZV9wa2V5IgorREVUQUlMOiAgS2V5IChh KT0oMSkgYWxyZWFkeSBleGlzdHMuCitST0xMQkFDSzsKKy0tIFx3YXRjaCBzZW5kcyBhIHNpbXBs ZSBxdWVyeSB3aGljaCB3b24ndCBiZSBhbGxvd2VkIHdpdGhpbiBhIHBpcGVsaW5lCitcc3RhcnRw aXBlbGluZQorU0VMRUNUIFxiaW5kIFxnCitcd2F0Y2ggMQorUFFzZW5kUXVlcnkgbm90IGFsbG93 ZWQgaW4gcGlwZWxpbmUgbW9kZQorCitcZW5kcGlwZWxpbmUKKy0tCisoMSByb3cpCisKKy0tIFxn ZGVzYyBzaG91bGQgZmFpbCBhcyBzeW5jaHJvbm91cyBjb21tYW5kcyBhcmUgbm90IGFsbG93ZWQg aW4gcGlwZWxpbmUsIHBpcGVsaW5lIHNob3VsZCBzdGlsbCBiZSB1c2FibGUKK1xzdGFydHBpcGVs aW5lCitTRUxFQ1QgJDEgXGJpbmQgMSBcZ2Rlc2MKK3N5bmNocm9ub3VzIGNvbW1hbmQgZXhlY3V0 aW9uIGZ1bmN0aW9ucyBhcmUgbm90IGFsbG93ZWQgaW4gcGlwZWxpbmUgbW9kZQorU0VMRUNUICQx IFxiaW5kIDEgXGcKK1xlbmRwaXBlbGluZQorID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIDEKKygx IHJvdykKKworLS0gXGdzZXQgaXMgbm90IGFsbG93ZWQsIHBpcGVsaW5lIHNob3VsZCBzdGlsbCBi ZSB1c2FibGUKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgYXMgaSwgJDIgYXMgaiBccGFyc2Ug JycKK1NFTEVDVCAkMSBhcyBrLCAkMiBhcyBsIFxwYXJzZSAnc2Vjb25kJworXGJpbmRfbmFtZWQg JycgMSAyIFxnc2V0CitcZ3NldCBub3QgYWxsb3dlZCBpbiBwaXBlbGluZSBtb2RlCitcYmluZF9u YW1lZCBzZWNvbmQgMSAyIFxnc2V0IHByZWYwMl8gXGVjaG8gOnByZWYwMl9pIDpwcmVmMDJfagor XGdzZXQgbm90IGFsbG93ZWQgaW4gcGlwZWxpbmUgbW9kZQorXGJpbmRfbmFtZWQgJycgMSAyIFxn CitcZW5kcGlwZWxpbmUKKyBpIHwgaiAKKy0tLSstLS0KKyAxIHwgMgorKDEgcm93KQorCistLSBc Z3ggaXMgbm90IGFsbG93ZWQsIHBpcGVsaW5lIHNob3VsZCBzdGlsbCBiZSB1c2FibGUKK1xzdGFy dHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgMSBcZ3gKK1xneCBub3QgYWxsb3dlZCBpbiBwaXBl bGluZSBtb2RlCitccmVzZXQKK1NFTEVDVCAkMSBcYmluZCAxIFxnCitcZW5kcGlwZWxpbmUKKyA/ Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAxCisoMSByb3cpCisKKy0tIFxneCB3YXJuaW5nIHNob3Vs ZCBiZSBlbWl0dGVkIGluIGFuIGFib3J0ZWQgcGlwZWxpbmUKK1xzdGFydHBpcGVsaW5lCitTRUxF Q1QgJDEgXGJpbmQgXGcKK1xmbHVzaHJlcXVlc3QKK1xnZXRyZXN1bHRzCitFUlJPUjogIGJpbmQg bWVzc2FnZSBzdXBwbGllcyAwIHBhcmFtZXRlcnMsIGJ1dCBwcmVwYXJlZCBzdGF0ZW1lbnQgIiIg cmVxdWlyZXMgMQorU0VMRUNUICQxIFxiaW5kIDEgXGd4CitcZ3ggbm90IGFsbG93ZWQgaW4gcGlw ZWxpbmUgbW9kZQorXGVuZHBpcGVsaW5lCistLSBcZ2V4ZWMgaXMgbm90IGFsbG93ZWQsIHBpcGVs aW5lIHNob3VsZCBzdGlsbCBiZSB1c2FibGUKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJ0lOU0VS VCBJTlRPIHBzcWxfcGlwZWxpbmUoYSkgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMCknIFxw YXJzZSAnaW5zZXJ0X3N0bXQnCitcYmluZF9uYW1lZCBpbnNlcnRfc3RtdCBcZ2V4ZWMKK1xnZXhl YyBub3QgYWxsb3dlZCBpbiBwaXBlbGluZSBtb2RlCitcYmluZF9uYW1lZCBpbnNlcnRfc3RtdCBc ZworU0VMRUNUIENPVU5UKCopIEZST00gcHNxbF9waXBlbGluZSBcYmluZCBcZworXGVuZHBpcGVs aW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgID9jb2x1bW4/ICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIElOU0VSVCBJTlRPIHBzcWxfcGlwZWxpbmUoYSkgU0VMRUNUIGdlbmVy YXRlX3NlcmllcygxLCAxMCkKKygxIHJvdykKKworIGNvdW50IAorLS0tLS0tLQorICAgICA0Ciso MSByb3cpCisKKy0tIEFmdGVyIGFuIGVycm9yLCBwaXBlbGluZSBpcyBhYm9ydGVkIGFuZCByZXF1 aXJlcyBhIHN5bmMgdG8gYmUgcmV1c2FibGUKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJp bmQgXGcKK1NFTEVDVCAkMSBcYmluZCAxIFxnCitTRUxFQ1QgJDEgXHBhcnNlIGEKK1xiaW5kX25h bWVkIGEgMSBcZworXGNsb3NlIGEKK1xmbHVzaHJlcXVlc3QKK1xnZXRyZXN1bHRzCitFUlJPUjog IGJpbmQgbWVzc2FnZSBzdXBwbGllcyAwIHBhcmFtZXRlcnMsIGJ1dCBwcmVwYXJlZCBzdGF0ZW1l bnQgIiIgcmVxdWlyZXMgMQorLS0gUGlwZWxpbmUgaXMgYWJvcnRlZAorU0VMRUNUICQxIFxiaW5k IDEgXGcKK1NFTEVDVCAkMSBccGFyc2UgYQorXGJpbmRfbmFtZWQgYSAxIFxnCitcY2xvc2UgYQor LS0gU3luYyBhbGxvd3MgcGlwZWxpbmUgdG8gcmVjb3ZlcgorXHN5bmNwaXBlbGluZQorXGdldHJl c3VsdHMKK1BpcGVsaW5lIGFib3J0ZWQsIGNvbW1hbmQgZGlkbid0IHJ1bgorU0VMRUNUICQxIFxi aW5kIDEgXGcKK1NFTEVDVCAkMSBccGFyc2UgYQorXGJpbmRfbmFtZWQgYSAxIFxnCitcY2xvc2Ug YQorXGZsdXNocmVxdWVzdAorXGdldHJlc3VsdHMKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAx CisoMSByb3cpCisKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAxCisoMSByb3cpCisKK1xlbmRw aXBlbGluZQorLS0gVGVzdCBjaHVua2VkIHJlc3VsdHMgd2l0aCBhbiBhYm9ydGVkIHBpcGVsaW5l Citcc3RhcnRwaXBlbGluZQorXHNldCBGRVRDSF9DT1VOVCAxMAorU0VMRUNUICQxIFxiaW5kIFxn CitcZmx1c2hyZXF1ZXN0CitcZ2V0cmVzdWx0cworRVJST1I6ICBiaW5kIG1lc3NhZ2Ugc3VwcGxp ZXMgMCBwYXJhbWV0ZXJzLCBidXQgcHJlcGFyZWQgc3RhdGVtZW50ICIiIHJlcXVpcmVzIDEKK1NF TEVDVCAkMSBcYmluZCBcZworXGVuZHBpcGVsaW5lCitmZXRjaGluZyByZXN1bHRzIGluIGNodW5r ZWQgbW9kZSBmYWlsZWQKK1BpcGVsaW5lIGFib3J0ZWQsIGNvbW1hbmQgZGlkbid0IHJ1bgorXHVu c2V0IEZFVENIX0NPVU5UCistLSBwaXBlbGluaW5nIGFuZCB0cmFuc2FjdGlvbiBibG9jayBiZWhh dmlvdXIKKy0tIHNldCBsb2NhbCB3aWxsIGlzc3VlIGEgd2FybmluZyB3aGVuIG1vZGlmeWluZyBh IEdVQyBvdXRzaWRlIG9mIGEgdHJhbnNhY3Rpb24gYmxvY2sKKy0tIFRoZSBjaGFuZ2Ugd2lsbCBz dGlsbCBiZSB2YWxpZCBhcyBhIHBpcGVsaW5lIHJ1bnMgd2l0aGluIGFuIGltcGxpY2l0IHRyYW5z YWN0aW9uIGJsb2NrCistLSBTZW5kaW5nIGEgc3luYyB3aWxsIGNvbW1pdCB0aGUgaW1wbGljaXQg dHJhbnNhY3Rpb24gYmxvY2suIFRoZSBmaXJzdCBjb21tYW5kIGFmdGVyIGEgc3luYworLS0gd29u J3QgYmUgc2VlbiBhcyBiZWxvbmdpbmcgdG8gYSBwaXBlbGluZS4KK1xzdGFydHBpcGVsaW5lCitT RVQgTE9DQUwgc3RhdGVtZW50X3RpbWVvdXQ9JzFoJyBcYmluZCBcZworU0hPVyBzdGF0ZW1lbnRf dGltZW91dCBcYmluZCBcZworXHN5bmNwaXBlbGluZQorU0hPVyBzdGF0ZW1lbnRfdGltZW91dCBc YmluZCBcZworU0VUIExPQ0FMIHN0YXRlbWVudF90aW1lb3V0PScyaCcgXGJpbmQgXGcKK1NIT1cg c3RhdGVtZW50X3RpbWVvdXQgXGJpbmQgXGcKK1xlbmRwaXBlbGluZQorV0FSTklORzogIFNFVCBM T0NBTCBjYW4gb25seSBiZSB1c2VkIGluIHRyYW5zYWN0aW9uIGJsb2NrcworIHN0YXRlbWVudF90 aW1lb3V0IAorLS0tLS0tLS0tLS0tLS0tLS0tLQorIDFoCisoMSByb3cpCisKKyBzdGF0ZW1lbnRf dGltZW91dCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAwCisoMSByb3cpCisKKyBzdGF0ZW1lbnRf dGltZW91dCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAyaAorKDEgcm93KQorCistLSBSZWluZGV4 IGNvbmN1cnJlbnRseSBpcyBmb3JiaWRkZW4gaW4gdGhlIG1pZGRsZSBvZiBhIHBpcGVsaW5lCitc c3RhcnRwaXBlbGluZQorU0VMRUNUICQxIFxiaW5kIDEgXGcKK1JFSU5ERVggVEFCTEUgQ09OQ1VS UkVOVExZIHBzcWxfcGlwZWxpbmUgXGJpbmQgXGcKK1NFTEVDVCAkMSBcYmluZCAyIFxnCitcZW5k cGlwZWxpbmUKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAxCisoMSByb3cpCisKK0VSUk9SOiAg UkVJTkRFWCBDT05DVVJSRU5UTFkgY2Fubm90IHJ1biBpbnNpZGUgYSB0cmFuc2FjdGlvbiBibG9j aworLS0gUmVpbmRleCBjb25jdXJyZW50bHkgd2lsbCB3b3JrIGlmIGl0J3MgdGhlIGZpcnN0IGNv bW1hbmQgb2YgYSBwaXBlbGluZQorXHN0YXJ0cGlwZWxpbmUKK1JFSU5ERVggVEFCTEUgQ09OQ1VS UkVOVExZIHBzcWxfcGlwZWxpbmUgXGJpbmQgXGcKK1NFTEVDVCAkMSBcYmluZCAyIFxnCitcZW5k cGlwZWxpbmUKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAyCisoMSByb3cpCisKKy0tIHN1YnRy YW5zYWN0aW9ucyBhcmUgbm90IGFsbG93ZWQgaW4gcGlwZWxpbmUgbW9kZQorXHN0YXJ0cGlwZWxp bmUKK1NBVkVQT0lOVCBhIFxiaW5kIFxnCitTRUxFQ1QgJDEgXGJpbmQgMSBcZworUk9MTEJBQ0sg VE8gU0FWRVBPSU5UIGEgXGJpbmQgXGcKK1NFTEVDVCAkMSBcYmluZCAyIFxnCitcZW5kcGlwZWxp bmUKK0VSUk9SOiAgU0FWRVBPSU5UIGNhbiBvbmx5IGJlIHVzZWQgaW4gdHJhbnNhY3Rpb24gYmxv Y2tzCistLSBMb2NrIGNvbW1hbmQgd2lsbCBmYWlsIGFzIGZpcnN0IHBpcGVsaW5lIGNvbW1hbmQg aXMgbm90IHNlZW4gYXMgYSB0cmFuc2FjdGlvbiBibG9jaworXHN0YXJ0cGlwZWxpbmUKK0xPQ0sg cHNxbF9waXBlbGluZSBcYmluZCBcZworU0VMRUNUICQxIFxiaW5kIDIgXGcKK1xlbmRwaXBlbGlu ZQorRVJST1I6ICBMT0NLIFRBQkxFIGNhbiBvbmx5IGJlIHVzZWQgaW4gdHJhbnNhY3Rpb24gYmxv Y2tzCistLSBMb2NrIGNvbW1hbmQgd2lsbCBzdWNjZWVkIGFmdGVyIHRoZSBmaXJzdCBjb21tYW5k IGFzIHBpcGVsaW5lIHdpbGwgYmUgc2VlbiBhcyBhbiBpbXBsaWNpdCB0cmFuc2FjdGlvbiBibG9j aworXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAxIFxnCitMT0NLIHBzcWxfcGlwZWxp bmUgXGJpbmQgXGcKK1NFTEVDVCAkMSBcYmluZCAyIFxnCitcZW5kcGlwZWxpbmUKKyA/Y29sdW1u PyAKKy0tLS0tLS0tLS0KKyAxCisoMSByb3cpCisKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAy CisoMSByb3cpCisKKy0tIFZhY3V1bSBjb21tYW5kIHdpbGwgd29yayBhcyB0aGUgZmlyc3QgY29t bWFuZAorXHN0YXJ0cGlwZWxpbmUKK1ZBQ1VVTSBwc3FsX3BpcGVsaW5lIFxiaW5kIFxnCitcZW5k cGlwZWxpbmUKKy0tIFZhY3V1bSBjb21tYW5kIHdpbGwgZmFpbCB3aXRoaW4gcGlwZWxpbmUgaW1w bGljaXQgdHJhbnNhY3Rpb24KK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgMSBcYmluZCBcZworVkFD VVVNIHBzcWxfcGlwZWxpbmUgXGJpbmQgXGcKK1xlbmRwaXBlbGluZQorID9jb2x1bW4/IAorLS0t LS0tLS0tLQorICAgICAgICAxCisoMSByb3cpCisKK0VSUk9SOiAgVkFDVVVNIGNhbm5vdCBydW4g aW5zaWRlIGEgdHJhbnNhY3Rpb24gYmxvY2sKKy0tIFZhY3V1bSBjb21tYW5kIHdpbGwgd29yayBh ZnRlciBhIHN5bmMKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgMSBcYmluZCBcZworXHN5bmNwaXBl bGluZQorVkFDVVVNIHBzcWxfcGlwZWxpbmUgXGJpbmQgXGcKK1xlbmRwaXBlbGluZQorID9jb2x1 bW4/IAorLS0tLS0tLS0tLQorICAgICAgICAxCisoMSByb3cpCisKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3BzcWwuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHNxbC5zcWwK aW5kZXggYzUwMjFmYzBiMTMuLjA3NWMwYTg3M2NhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9wc3FsLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wc3FsLnNxbApAQCAt MTkyOSwzICsxOTI5LDM0MCBAQCBDUkVBVEUgVEFCTEUgZGVmcHJpdnMgKGEgaW50KTsKIFx6IGRl ZnByaXZzCiBccHNldCBudWxsICcnCiBEUk9QIFRBQkxFIGRlZnByaXZzOworCistLSBwaXBlbGlu aW5nCitDUkVBVEUgVEFCTEUgcHNxbF9waXBlbGluZShhIElOVEVHRVIgUFJJTUFSWSBLRVksIHMg VEVYVCk7CisKKy0tIHNpbmdsZSBxdWVyeQorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmlu ZCAndmFsMScgXGcKK1xlbmRwaXBlbGluZQorCistLSBtdWx0aXBsZSBxdWVyaWVzCitcc3RhcnRw aXBlbGluZQorU0VMRUNUICQxIFxiaW5kICd2YWwxJyBcZworU0VMRUNUICQxLCAkMiBcYmluZCAn dmFsMicgJ3ZhbDMnIFxnCitTRUxFQ1QgJDEsICQyIFxiaW5kICd2YWwyJyAndmFsMycgXGcKK1xl bmRwaXBlbGluZQorCistLSBzZW5kIG11bHRpcGxlIHN5bmNzCitcc3RhcnRwaXBlbGluZQorU0VM RUNUICQxIFxiaW5kICd2YWwxJyBcZworXHN5bmNwaXBlbGluZQorXHN5bmNwaXBlbGluZQorU0VM RUNUICQxLCAkMiBcYmluZCAndmFsMicgJ3ZhbDMnIFxnCitcc3luY3BpcGVsaW5lCitTRUxFQ1Qg JDEsICQyIFxiaW5kICd2YWw0JyAndmFsNScgXGcKK1xlbmRwaXBlbGluZQorCistLSBzdGFydHBp cGVsaW5lIHNob3VsZG4ndCBoYXZlIGFueSBlZmZlY3QgaWYgYWxyZWFkeSBpbiBhIHBpcGVsaW5l Citcc3RhcnRwaXBlbGluZQorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAndmFsMScg XGcKK1xlbmRwaXBlbGluZQorCistLSBDb252ZXJ0IGFuIGltcGxpY2l0IHR4IGJsb2NrIHRvIGFu IGV4cGxpY2l0IHR4IGJsb2NrCitcc3RhcnRwaXBlbGluZQorSU5TRVJUIElOVE8gcHNxbF9waXBl bGluZSBWQUxVRVMgKCQxKSBcYmluZCAxIFxnCitCRUdJTiBcYmluZCBcZworSU5TRVJUIElOVE8g cHNxbF9waXBlbGluZSBWQUxVRVMgKCQxKSBcYmluZCAyIFxnCitST0xMQkFDSyBcYmluZCBcZwor XGVuZHBpcGVsaW5lCisKKy0tIE11bHRpcGxlIGV4cGxpY2l0IHRyYW5zYWN0aW9ucworXHN0YXJ0 cGlwZWxpbmUKK0JFR0lOIFxiaW5kIFxnCitJTlNFUlQgSU5UTyBwc3FsX3BpcGVsaW5lIFZBTFVF UyAoJDEpIFxiaW5kIDEgXGcKK1JPTExCQUNLIFxiaW5kIFxnCitCRUdJTiBcYmluZCBcZworSU5T RVJUIElOVE8gcHNxbF9waXBlbGluZSBWQUxVRVMgKCQxKSBcYmluZCAxIFxnCitDT01NSVQgXGJp bmQgXGcKK1xlbmRwaXBlbGluZQorCistLSBDT1BZIEZST00gU1RESU4KK1xzdGFydHBpcGVsaW5l CitTRUxFQ1QgJDEgXGJpbmQgJ3ZhbDEnIFxnCitDT1BZIHBzcWxfcGlwZWxpbmUgRlJPTSBTVERJ TiBcYmluZCBcZworXGVuZHBpcGVsaW5lCisyCXRlc3QyCitcLgorCistLSBDT1BZIEZST00gU1RE SU4gd2l0aCBcZmx1c2hyZXF1ZXN0ICsgXGdldHJlc3VsdHMKK1xzdGFydHBpcGVsaW5lCitTRUxF Q1QgJDEgXGJpbmQgJ3ZhbDEnIFxnCitDT1BZIHBzcWxfcGlwZWxpbmUgRlJPTSBTVERJTiBcYmlu ZCBcZworXGZsdXNocmVxdWVzdAorXGdldHJlc3VsdHMKKzMJdGVzdDMKK1wuCitcZW5kcGlwZWxp bmUKKworLS0gQ09QWSBGUk9NIFNURElOIHdpdGggXHN5bmNwaXBlbGluZSArIFxnZXRyZXN1bHRz Citcc3RhcnRwaXBlbGluZQorU0VMRUNUICQxIFxiaW5kICd2YWwxJyBcZworQ09QWSBwc3FsX3Bp cGVsaW5lIEZST00gU1RESU4gXGJpbmQgXGcKK1xzeW5jcGlwZWxpbmUKK1xnZXRyZXN1bHRzCis0 CXRlc3Q0CitcLgorXGVuZHBpcGVsaW5lCisKKy0tIENPUFkgVE8gU1RET1VUCitcc3RhcnRwaXBl bGluZQorU0VMRUNUICQxIFxiaW5kICd2YWwxJyBcZworY29weSBwc3FsX3BpcGVsaW5lIFRPIFNU RE9VVCBcYmluZCBcZworXGVuZHBpcGVsaW5lCisKKy0tIENPUFkgVE8gU1RET1VUIHdpdGggXGZs dXNocmVxdWVzdCArIFxnZXRyZXN1bHRzCitcc3RhcnRwaXBlbGluZQorU0VMRUNUICQxIFxiaW5k ICd2YWwxJyBcZworY29weSBwc3FsX3BpcGVsaW5lIFRPIFNURE9VVCBcYmluZCBcZworXGZsdXNo cmVxdWVzdAorXGdldHJlc3VsdHMKK1xlbmRwaXBlbGluZQorCistLSBDT1BZIFRPIFNURE9VVCB3 aXRoIFxzeW5jcGlwZWxpbmUgKyBcZ2V0cmVzdWx0cworXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAk MSBcYmluZCAndmFsMScgXGcKK2NvcHkgcHNxbF9waXBlbGluZSBUTyBTVERPVVQgXGJpbmQgXGcK K1xzeW5jcGlwZWxpbmUKK1xnZXRyZXN1bHRzCitcZW5kcGlwZWxpbmUKKworLS0gVXNlIFxwYXJz ZSBhbmQgXGJpbmRfbmFtZWQKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXHBhcnNlICcnCitT RUxFQ1QgJDEsICQyIFxwYXJzZSAnJworU0VMRUNUICQyIFxwYXJzZSBwaXBlbGluZV8xCitcYmlu ZF9uYW1lZCAnJyAxIDIgXGcKK1xiaW5kX25hbWVkIHBpcGVsaW5lXzEgMiBcZworXGVuZHBpcGVs aW5lCisKKy0tIFxnZXRyZXN1bHRzIGRpc3BsYXlzIGFsbCByZXN1bHRzIHByZWNlZGluZyBhIFxm bHVzaHJlcXVlc3QKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgMSBcZworU0VMRUNU ICQxIFxiaW5kIDIgXGcKK1xmbHVzaHJlcXVlc3QKK1xnZXRyZXN1bHRzCitcZW5kcGlwZWxpbmUK KworLS0gXGdldHJlc3VsdHMgZGlzcGxheXMgYWxsIHJlc3VsdHMgcHJlY2VkaW5nIGEgc3luYwor XHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAxIFxnCitTRUxFQ1QgJDEgXGJpbmQgMiBc ZworXHN5bmNwaXBlbGluZQorXGdldHJlc3VsdHMKK1xlbmRwaXBlbGluZQorCistLSBcZ2V0cmVz dWx0cyBpbW1lZGlhdGVseSByZXR1cm5zIGlmIHRoZXJlJ3Mgbm8gcmVzdWx0IHRvIGZldGNoCitc c3RhcnRwaXBlbGluZQorXGdldHJlc3VsdHMKK1NFTEVDVCAkMSBcYmluZCAyIFxnCitcZ2V0cmVz dWx0cworXGZsdXNocmVxdWVzdAorXGVuZHBpcGVsaW5lCitcZ2V0cmVzdWx0cworCistLSBcZ2V0 cmVzdWx0cyBvbmx5IGZldGNoIHJlc3VsdHMgcHJlY2VkaW5nIGEgZmx1c2hyZXF1ZXN0Citcc3Rh cnRwaXBlbGluZQorU0VMRUNUICQxIFxiaW5kIDIgXGcKK1xmbHVzaHJlcXVlc3QKK1NFTEVDVCAk MSBcYmluZCAyIFxnCitcZ2V0cmVzdWx0cworXGVuZHBpcGVsaW5lCisKKy0tIHNhbWUgZm9yIHN5 bmMgcmVxdWVzdAorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAyIFxnCitcc3luY3Bp cGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgMiBcZworXGdldHJlc3VsdHMKK1xlbmRwaXBlbGluZQor CistLSB1c2UgcGlwZWxpbmUgd2l0aCBjaHVua2VkIHJlc3VsdHMgd2l0aCBib3RoIFxnZXRyZXN1 bHRzIGFuZCBcZW5kcGlwZWxpbmUKK1xzdGFydHBpcGVsaW5lCitcc2V0IEZFVENIX0NPVU5UIDEw CitTRUxFQ1QgJDEgXGJpbmQgMiBcZworXGZsdXNocmVxdWVzdAorXGdldHJlc3VsdHMKK1NFTEVD VCAkMSBcYmluZCAyIFxnCitcZW5kcGlwZWxpbmUKK1x1bnNldCBGRVRDSF9DT1VOVAorCistLSBw aXBlbGluaW5nIGVycm9ycworCistLSBlbmRwaXBlbGluZSBvdXRzaWRlIG9mIHBpcGVsaW5lIHNo b3VsZCBmYWlsCitcZW5kcGlwZWxpbmUKKworLS0gUXVlcnkgdXNpbmcgc2ltcGxlIHByb3RvY29s IHNob3VsZCBub3QgYmUgc2VudCBhbmQgc2hvdWxkIGxlYXZlIHRoZSBwaXBlbGluZSB1c2FibGUK K1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgMTsKK1NFTEVDVCAkMSBcYmluZCAndmFsMScgXGcKK1xl bmRwaXBlbGluZQorCistLSBBZnRlciBhbiBhYm9ydGVkIHBpcGVsaW5lLCBjb21tYW5kcyBhZnRl ciBhIHN5bmMgc2hvdWxkIGJlIGRpc3BsYXllZAorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBc YmluZCBcZworXHN5bmNwaXBlbGluZQorU0VMRUNUICQxIFxiaW5kIDEgXGcKK1xlbmRwaXBlbGlu ZQorCistLSBJbmNvcnJlY3QgbnVtYmVyIG9mIHBhcmFtZXRlcnMsIHRoZSBwaXBlbGluZSB3aWxs IGJlIGFib3J0ZWQgYW5kIGZvbGxvd2luZyBxdWVyaWVzIHdvbid0IGJlIGV4ZWN1dGVkCitcc3Rh cnRwaXBlbGluZQorU0VMRUNUIFxiaW5kICd2YWwxJyBcZworU0VMRUNUICQxIFxiaW5kICd2YWwx JyBcZworXGVuZHBpcGVsaW5lCisKKy0tIEFuIGV4cGxpY2l0IHRyYW5zYWN0aW9uIHdpdGggYW4g ZXJyb3IgbmVlZHMgdG8gYmUgcm9sbGJhY2tlZCBhZnRlciB0aGUgcGlwZWxpbmUKK1xzdGFydHBp cGVsaW5lCitCRUdJTiBcYmluZCBcZworSU5TRVJUIElOVE8gcHNxbF9waXBlbGluZSBWQUxVRVMg KCQxKSBcYmluZCAxIFxnCitST0xMQkFDSyBcYmluZCBcZworXGVuZHBpcGVsaW5lCitST0xMQkFD SzsKKworLS0gXHdhdGNoIHNlbmRzIGEgc2ltcGxlIHF1ZXJ5IHdoaWNoIHdvbid0IGJlIGFsbG93 ZWQgd2l0aGluIGEgcGlwZWxpbmUKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgXGJpbmQgXGcKK1x3 YXRjaCAxCitcZW5kcGlwZWxpbmUKKworLS0gXGdkZXNjIHNob3VsZCBmYWlsIGFzIHN5bmNocm9u b3VzIGNvbW1hbmRzIGFyZSBub3QgYWxsb3dlZCBpbiBwaXBlbGluZSwgcGlwZWxpbmUgc2hvdWxk IHN0aWxsIGJlIHVzYWJsZQorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAxIFxnZGVz YworU0VMRUNUICQxIFxiaW5kIDEgXGcKK1xlbmRwaXBlbGluZQorCistLSBcZ3NldCBpcyBub3Qg YWxsb3dlZCwgcGlwZWxpbmUgc2hvdWxkIHN0aWxsIGJlIHVzYWJsZQorXHN0YXJ0cGlwZWxpbmUK K1NFTEVDVCAkMSBhcyBpLCAkMiBhcyBqIFxwYXJzZSAnJworU0VMRUNUICQxIGFzIGssICQyIGFz IGwgXHBhcnNlICdzZWNvbmQnCitcYmluZF9uYW1lZCAnJyAxIDIgXGdzZXQKK1xiaW5kX25hbWVk IHNlY29uZCAxIDIgXGdzZXQgcHJlZjAyXyBcZWNobyA6cHJlZjAyX2kgOnByZWYwMl9qCitcYmlu ZF9uYW1lZCAnJyAxIDIgXGcKK1xlbmRwaXBlbGluZQorCistLSBcZ3ggaXMgbm90IGFsbG93ZWQs IHBpcGVsaW5lIHNob3VsZCBzdGlsbCBiZSB1c2FibGUKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1Qg JDEgXGJpbmQgMSBcZ3gKK1xyZXNldAorU0VMRUNUICQxIFxiaW5kIDEgXGcKK1xlbmRwaXBlbGlu ZQorCistLSBcZ3ggd2FybmluZyBzaG91bGQgYmUgZW1pdHRlZCBpbiBhbiBhYm9ydGVkIHBpcGVs aW5lCitcc3RhcnRwaXBlbGluZQorU0VMRUNUICQxIFxiaW5kIFxnCitcZmx1c2hyZXF1ZXN0Citc Z2V0cmVzdWx0cworU0VMRUNUICQxIFxiaW5kIDEgXGd4CitcZW5kcGlwZWxpbmUKKworLS0gXGdl eGVjIGlzIG5vdCBhbGxvd2VkLCBwaXBlbGluZSBzaG91bGQgc3RpbGwgYmUgdXNhYmxlCitcc3Rh cnRwaXBlbGluZQorU0VMRUNUICdJTlNFUlQgSU5UTyBwc3FsX3BpcGVsaW5lKGEpIFNFTEVDVCBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTApJyBccGFyc2UgJ2luc2VydF9zdG10JworXGJpbmRfbmFtZWQg aW5zZXJ0X3N0bXQgXGdleGVjCitcYmluZF9uYW1lZCBpbnNlcnRfc3RtdCBcZworU0VMRUNUIENP VU5UKCopIEZST00gcHNxbF9waXBlbGluZSBcYmluZCBcZworXGVuZHBpcGVsaW5lCisKKy0tIEFm dGVyIGFuIGVycm9yLCBwaXBlbGluZSBpcyBhYm9ydGVkIGFuZCByZXF1aXJlcyBhIHN5bmMgdG8g YmUgcmV1c2FibGUKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgXGcKK1NFTEVDVCAk MSBcYmluZCAxIFxnCitTRUxFQ1QgJDEgXHBhcnNlIGEKK1xiaW5kX25hbWVkIGEgMSBcZworXGNs b3NlIGEKK1xmbHVzaHJlcXVlc3QKK1xnZXRyZXN1bHRzCistLSBQaXBlbGluZSBpcyBhYm9ydGVk CitTRUxFQ1QgJDEgXGJpbmQgMSBcZworU0VMRUNUICQxIFxwYXJzZSBhCitcYmluZF9uYW1lZCBh IDEgXGcKK1xjbG9zZSBhCistLSBTeW5jIGFsbG93cyBwaXBlbGluZSB0byByZWNvdmVyCitcc3lu Y3BpcGVsaW5lCitcZ2V0cmVzdWx0cworU0VMRUNUICQxIFxiaW5kIDEgXGcKK1NFTEVDVCAkMSBc cGFyc2UgYQorXGJpbmRfbmFtZWQgYSAxIFxnCitcY2xvc2UgYQorXGZsdXNocmVxdWVzdAorXGdl dHJlc3VsdHMKK1xlbmRwaXBlbGluZQorCistLSBUZXN0IGNodW5rZWQgcmVzdWx0cyB3aXRoIGFu IGFib3J0ZWQgcGlwZWxpbmUKK1xzdGFydHBpcGVsaW5lCitcc2V0IEZFVENIX0NPVU5UIDEwCitT RUxFQ1QgJDEgXGJpbmQgXGcKK1xmbHVzaHJlcXVlc3QKK1xnZXRyZXN1bHRzCitTRUxFQ1QgJDEg XGJpbmQgXGcKK1xlbmRwaXBlbGluZQorXHVuc2V0IEZFVENIX0NPVU5UCisKKy0tIHBpcGVsaW5p bmcgYW5kIHRyYW5zYWN0aW9uIGJsb2NrIGJlaGF2aW91cgorCistLSBzZXQgbG9jYWwgd2lsbCBp c3N1ZSBhIHdhcm5pbmcgd2hlbiBtb2RpZnlpbmcgYSBHVUMgb3V0c2lkZSBvZiBhIHRyYW5zYWN0 aW9uIGJsb2NrCistLSBUaGUgY2hhbmdlIHdpbGwgc3RpbGwgYmUgdmFsaWQgYXMgYSBwaXBlbGlu ZSBydW5zIHdpdGhpbiBhbiBpbXBsaWNpdCB0cmFuc2FjdGlvbiBibG9jaworLS0gU2VuZGluZyBh IHN5bmMgd2lsbCBjb21taXQgdGhlIGltcGxpY2l0IHRyYW5zYWN0aW9uIGJsb2NrLiBUaGUgZmly c3QgY29tbWFuZCBhZnRlciBhIHN5bmMKKy0tIHdvbid0IGJlIHNlZW4gYXMgYmVsb25naW5nIHRv IGEgcGlwZWxpbmUuCitcc3RhcnRwaXBlbGluZQorU0VUIExPQ0FMIHN0YXRlbWVudF90aW1lb3V0 PScxaCcgXGJpbmQgXGcKK1NIT1cgc3RhdGVtZW50X3RpbWVvdXQgXGJpbmQgXGcKK1xzeW5jcGlw ZWxpbmUKK1NIT1cgc3RhdGVtZW50X3RpbWVvdXQgXGJpbmQgXGcKK1NFVCBMT0NBTCBzdGF0ZW1l bnRfdGltZW91dD0nMmgnIFxiaW5kIFxnCitTSE9XIHN0YXRlbWVudF90aW1lb3V0IFxiaW5kIFxn CitcZW5kcGlwZWxpbmUKKworLS0gUmVpbmRleCBjb25jdXJyZW50bHkgaXMgZm9yYmlkZGVuIGlu IHRoZSBtaWRkbGUgb2YgYSBwaXBlbGluZQorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmlu ZCAxIFxnCitSRUlOREVYIFRBQkxFIENPTkNVUlJFTlRMWSBwc3FsX3BpcGVsaW5lIFxiaW5kIFxn CitTRUxFQ1QgJDEgXGJpbmQgMiBcZworXGVuZHBpcGVsaW5lCisKKy0tIFJlaW5kZXggY29uY3Vy cmVudGx5IHdpbGwgd29yayBpZiBpdCdzIHRoZSBmaXJzdCBjb21tYW5kIG9mIGEgcGlwZWxpbmUK K1xzdGFydHBpcGVsaW5lCitSRUlOREVYIFRBQkxFIENPTkNVUlJFTlRMWSBwc3FsX3BpcGVsaW5l IFxiaW5kIFxnCitTRUxFQ1QgJDEgXGJpbmQgMiBcZworXGVuZHBpcGVsaW5lCisKKy0tIHN1YnRy YW5zYWN0aW9ucyBhcmUgbm90IGFsbG93ZWQgaW4gcGlwZWxpbmUgbW9kZQorXHN0YXJ0cGlwZWxp bmUKK1NBVkVQT0lOVCBhIFxiaW5kIFxnCitTRUxFQ1QgJDEgXGJpbmQgMSBcZworUk9MTEJBQ0sg VE8gU0FWRVBPSU5UIGEgXGJpbmQgXGcKK1NFTEVDVCAkMSBcYmluZCAyIFxnCitcZW5kcGlwZWxp bmUKKworLS0gTG9jayBjb21tYW5kIHdpbGwgZmFpbCBhcyBmaXJzdCBwaXBlbGluZSBjb21tYW5k IGlzIG5vdCBzZWVuIGFzIGEgdHJhbnNhY3Rpb24gYmxvY2sKK1xzdGFydHBpcGVsaW5lCitMT0NL IHBzcWxfcGlwZWxpbmUgXGJpbmQgXGcKK1NFTEVDVCAkMSBcYmluZCAyIFxnCitcZW5kcGlwZWxp bmUKKworLS0gTG9jayBjb21tYW5kIHdpbGwgc3VjY2VlZCBhZnRlciB0aGUgZmlyc3QgY29tbWFu ZCBhcyBwaXBlbGluZSB3aWxsIGJlIHNlZW4gYXMgYW4gaW1wbGljaXQgdHJhbnNhY3Rpb24gYmxv Y2sKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgMSBcZworTE9DSyBwc3FsX3BpcGVs aW5lIFxiaW5kIFxnCitTRUxFQ1QgJDEgXGJpbmQgMiBcZworXGVuZHBpcGVsaW5lCisKKy0tIFZh Y3V1bSBjb21tYW5kIHdpbGwgd29yayBhcyB0aGUgZmlyc3QgY29tbWFuZAorXHN0YXJ0cGlwZWxp bmUKK1ZBQ1VVTSBwc3FsX3BpcGVsaW5lIFxiaW5kIFxnCitcZW5kcGlwZWxpbmUKKworLS0gVmFj dXVtIGNvbW1hbmQgd2lsbCBmYWlsIHdpdGhpbiBwaXBlbGluZSBpbXBsaWNpdCB0cmFuc2FjdGlv bgorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAxIFxiaW5kIFxnCitWQUNVVU0gcHNxbF9waXBlbGlu ZSBcYmluZCBcZworXGVuZHBpcGVsaW5lCisKKy0tIFZhY3V1bSBjb21tYW5kIHdpbGwgd29yayBh ZnRlciBhIHN5bmMKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgMSBcYmluZCBcZworXHN5bmNwaXBl bGluZQorVkFDVVVNIHBzcWxfcGlwZWxpbmUgXGJpbmQgXGcKK1xlbmRwaXBlbGluZQotLSAKMi4z OS41IChBcHBsZSBHaXQtMTU0KQoK --000000000000d02eba0628e828c3--