Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vRh5m-002g7l-04 for pgsql-hackers@arkaria.postgresql.org; Sat, 06 Dec 2025 01:28:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vRh5j-00AcFD-09 for pgsql-hackers@arkaria.postgresql.org; Sat, 06 Dec 2025 01:28: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.96) (envelope-from ) id 1vRh5i-00AcF5-1A for pgsql-hackers@lists.postgresql.org; Sat, 06 Dec 2025 01:28:07 +0000 Received: from mail-ed1-x52f.google.com ([2a00:1450:4864:20::52f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vRh5f-003MkT-2A for pgsql-hackers@lists.postgresql.org; Sat, 06 Dec 2025 01:28:05 +0000 Received: by mail-ed1-x52f.google.com with SMTP id 4fb4d7f45d1cf-6431b0a1948so4680671a12.3 for ; Fri, 05 Dec 2025 17:28:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764984483; x=1765589283; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=BhhgH7/39dTaQr7zKnqyBcY0mINDV6o6mFJFnr/TIB8=; b=R2X/9yAeuajlVD275swB9e+dLzQ25JZZjtf2oSwu2m4sbUu2ACJBrizEVVzVGM9j2R j/9n0JXHYIi3r9enSxZzhPxGST9GCuCUd1L7yujGqbrrOIc2SlUs6fZG4OkjbC669/BH rap547x9cvJlnWon+3yiYyiXhM60w2Wa7GvXyb0g/unBIclt79Ty1yI41LECl38gKi3Y TU8+ZMoHJPywA5UbGYKeBMIuFjDX5S6zoGhWQc7m9elDAP21+g6SC9UF57ZNVBPDyy5Z u/DgkKxLUJn5dyaXsxzdK3x7IAAaFhHzhU5UY5w4rIHpaJ8DxoLMswaOCz3dwmUqM2nM Nx+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764984483; x=1765589283; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=BhhgH7/39dTaQr7zKnqyBcY0mINDV6o6mFJFnr/TIB8=; b=qZ5zqSE5NfRN25xDs7S3xVDGz9j8T53YNCrpYtgZ9dftdUwuJOzAB4LNhxTCN+xhbW 0CNYM8+wSkoixeUcT8dUnn6ZVyi+oSKHh0PXYLRSU3vOheMGAmCcqYavv926Ukh7DBLy IyjubXDd9DWSWbpsF0nGGkTSOz+DEjJ0f1tlf6M20iKz5HHvblfGgd+Z3XeuwREmminq wsbaHHp1gpkrDwCRTYivVM7NwDJfaAwlMnHX7IYZyxuU4NHjLKnpSjQe64MiDECUoFlR XJ8w9MQM2TBCKDEcCrl+0O+7NLrlqA/icm9h0A6ZMHXAfd0KBLOpfbXglZIEiHJAMqUx JzJg== X-Forwarded-Encrypted: i=1; AJvYcCX+2Uwz9ruLJSUFKM9sKhwOts/0wNGVjZoVVVcGFR8bvi69Uf3j81wAeTQmnIoLW7KRhB3VRfag4DxhCuIu@lists.postgresql.org X-Gm-Message-State: AOJu0Yz7Uytwgb7K/iuqtlOwIXBkKovqHxwcA72kKEc2TBANOh+9IhQ4 T7R3pSQB8JJs8/cWXu8n2ZpRLbqazc+nuYLrjfqDUMvFSZ49SozpcQvAOSjmv2G2FPK6jwTdARx BKwzsXt7F/jlG4kaW4f+jfXD2O5Fotg8= X-Gm-Gg: ASbGncuxhe6D4BoyI8i4NF++lQiaiU3zKZsotSdGJ7NeZNih8GZWo1O/sGXGzc82pHt FsnAv9SMgB7+uZGRFovEPxX7uw4WOThrtY4qSQDfyaXT4UUK9wLXRttJAkIidgWIVLTWr2AF4HZ 2xntSAGDgYeVFDvHQbH5S2pr63bpQfS8pO8KqCatVZNuW/z1hAfPkYrEZLKyMT/AGJbRo0+Y4/d noqP0SFOsjlpBnnN8L7PWH5OZMGMrj0fbqor3xcY9wL61c4BdOfsbg2wmF5F3AzXbcGPq0= X-Google-Smtp-Source: AGHT+IHiEPIl3+rSGnJRKsDRqWEPHGO91KezAa2ZncLZe3XAoCqJctYk0AeG4h8NXiSntG2raqvAF26LSiC415CVL/8= X-Received: by 2002:a05:6402:4315:b0:640:b497:bf71 with SMTP id 4fb4d7f45d1cf-64919c0f673mr772876a12.8.1764984482691; Fri, 05 Dec 2025 17:28:02 -0800 (PST) MIME-Version: 1.0 References: <4FEEC2B8-D9CF-4BD0-AA7E-44CE3E27ADD8@gmail.com> <5EC13E39-B41E-464A-B382-0ACEB18A15BB@gmail.com> In-Reply-To: From: Sami Imseih Date: Fri, 5 Dec 2025 19:27:50 -0600 X-Gm-Features: AQt7F2olT8YW6J2hQvO21e09NANqoaHnSxbkMsvKG5aPSq0nDMK_Z22byEQBW7s Message-ID: Subject: Re: [Proposal] Adding callback support for custom statistics kinds To: Michael Paquier Cc: Chao Li , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000002036c406453e7995" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002036c406453e7995 Content-Type: text/plain; charset="UTF-8" > > However, as discussed off-list, I do think moving the custom kind tests from > > injection points to the new test module is a prerequisite. I rather > > not have us push a new test module that is doing duplicate work as the injection > > stats tests. > > I worked on this refactoring today and plan to have a patch ready for review > > by tomorrow. > > Cool, thanks! Attached is the new test module that replaces the custom statistics tests currently in the injection points tests. Under test_custom_stats, there are two separate modules: one for variable-amount stats and one for fixed-amount stats. With this, we can completely remove the stats-related tests and supporting code under src/test/modules/injection_points/. A few notes on the tests: 1. Variable stats: pgstat_drop_entry() and pgstat_fetch_entry() are exercised here, addressing an earlier point raised in the thread. 2. Fixed-amount stats: I added specific tests for reset behavior; both during crash recovery and during manual resets. 3. In test_custom_fixed_stats.c, you will see this comment: ``` /* see explanation above PgStatShared_Archiver for the reset protocol */ LWLockAcquire(&stats_shmem->lock, LW_EXCLUSIVE); ``` This is intentional, as the reset protocol is documented at the referenced location [0]. I wanted to call that out for the patch review. Once this gets pushed, it will simplify the remaining work needed for the remaining serialization callbacks work. [0] https://github.com/postgres/postgres/blob/master/src/include/utils/pgstat_internal.h#L362-L382 -- Sami Imseih Amazon Web Services (AWS) --0000000000002036c406453e7995 Content-Type: application/octet-stream; name="v3-0001-Move-custom-stats-tests-from-injection_points-to-.patch" Content-Disposition: attachment; filename="v3-0001-Move-custom-stats-tests-from-injection_points-to-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mitlwgwr0 RnJvbSAzMTZhYmY4N2ZmNjdiZmJiZTljNDMyOTFhODY0ZjU4NjBmNWIwMDQzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBVYnVudHUgPHVidW50dUBpcC0xNzItMzEtNDYtMjMwLmVjMi5p bnRlcm5hbD4KRGF0ZTogU2F0LCA2IERlYyAyMDI1IDAwOjU0OjA2ICswMDAwClN1YmplY3Q6IFtQ QVRDSCB2MyAxLzFdIE1vdmUgY3VzdG9tIHN0YXRzIHRlc3RzIGZyb20gaW5qZWN0aW9uX3BvaW50 cyB0bwogZGVkaWNhdGVkIG1vZHVsZQoKRXh0cmFjdCBjdXN0b20gc3RhdGlzdGljcyB0ZXN0aW5n IGNvZGUgZnJvbSBpbmplY3Rpb25fcG9pbnRzIG1vZHVsZQppbnRvIG5ldyB0ZXN0X2N1c3RvbV9z dGF0cyBtb2R1bGUgd2l0aCBzZXBhcmF0ZSB2YXJpYWJsZSBhbmQgZml4ZWQKc3RhdGlzdGljcyBj b21wb25lbnRzLiBUaGlzIGltcHJvdmVzIHRlc3Qgb3JnYW5pemF0aW9uIGFuZCByZW1vdmVzCnN0 YXRpc3RpY3MgZnVuY3Rpb25hbGl0eSB0aGF0IHdhcyBub3QgY29yZSB0byBpbmplY3Rpb24gcG9p bnRzLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9D QUE1Ulowc0pnTzZHQXdnRnhtemc5TVZQJTNEck03VXM4S0tjV3B1cXhlLWY1cXhtcEUwZyU0MG1h aWwuZ21haWwuY29tCi0tLQogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAg ICAgICAgIHwgICAxICsKIHNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9NYWtlZmls ZSAgICB8ICAgNCAtCiAuLi4vaW5qZWN0aW9uX3BvaW50cy0tMS4wLnNxbCAgICAgICAgICAgICAg ICAgfCAgNDMgLS0tCiAuLi4vaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fcG9pbnRzLmMgICAg ICAgfCAgNDggLS0tCiAuLi4vaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fc3RhdHMuYyAgICAg ICAgfCAyMjggLS0tLS0tLS0tLS0tLQogLi4uL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3N0 YXRzLmggICAgICAgIHwgIDM1IC0tCiAuLi4vaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fc3Rh dHNfZml4ZWQuYyAgfCAyMTQgLS0tLS0tLS0tLS0tLQogc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rp b25fcG9pbnRzL21lc29uLmJ1aWxkIHwgIDEyIC0KIC4uLi9tb2R1bGVzL2luamVjdGlvbl9wb2lu dHMvdC8wMDFfc3RhdHMucGwgICB8IDEwMyAtLS0tLS0KIHNyYy90ZXN0L21vZHVsZXMvbWVzb24u YnVpbGQgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3Vz dG9tX3N0YXRzLy5naXRpZ25vcmUgfCAgIDQgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3Rv bV9zdGF0cy9NYWtlZmlsZSAgIHwgIDI3ICsrCiAuLi4vbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0 cy9tZXNvbi5idWlsZCAgICAgfCAgNTUgKysrKwogLi4uL3Rlc3RfY3VzdG9tX3N0YXRzL3QvMDAx X2N1c3RvbV9zdGF0cy5wbCAgIHwgMTE1ICsrKysrKysKIC4uLi90ZXN0X2N1c3RvbV9maXhlZF9z dGF0cy0tMS4wLnNxbCAgICAgICAgICB8ICAyMCArKwogLi4uL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0 YXRzLmMgICAgICAgICAgICAgICAgIHwgMjI0ICsrKysrKysrKysrKysKIC4uLi90ZXN0X2N1c3Rv bV9maXhlZF9zdGF0cy5jb250cm9sICAgICAgICAgICB8ICAgNCArCiAuLi4vdGVzdF9jdXN0b21f dmFyX3N0YXRzLS0xLjAuc3FsICAgICAgICAgICAgfCAgMjUgKysKIC4uLi90ZXN0X2N1c3RvbV9z dGF0cy90ZXN0X2N1c3RvbV92YXJfc3RhdHMuYyB8IDMwMiArKysrKysrKysrKysrKysrKysKIC4u Li90ZXN0X2N1c3RvbV92YXJfc3RhdHMuY29udHJvbCAgICAgICAgICAgICB8ICAgNCArCiAyMCBm aWxlcyBjaGFuZ2VkLCA3ODIgaW5zZXJ0aW9ucygrKSwgNjg3IGRlbGV0aW9ucygtKQogZGVsZXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25f c3RhdHMuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3Bv aW50cy9pbmplY3Rpb25fc3RhdHMuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVs ZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fc3RhdHNfZml4ZWQuYwogZGVsZXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy90LzAwMV9zdGF0cy5wbAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvLmdp dGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21f c3RhdHMvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf Y3VzdG9tX3N0YXRzL21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90LzAwMV9jdXN0b21fc3RhdHMucGwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2Zp eGVkX3N0YXRzLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2N1c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV9maXhlZF9zdGF0cy5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV9maXhl ZF9zdGF0cy5jb250cm9sCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2N1c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV92YXJfc3RhdHMtLTEuMC5zcWwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX3Zh cl9zdGF0cy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3Rv bV9zdGF0cy90ZXN0X2N1c3RvbV92YXJfc3RhdHMuY29udHJvbAoKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCmluZGV4IGQw NzliOTFiMWEyLi40YTEwOWNjYmY2YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtl ZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCkBAIC0yMSw2ICsyMSw3IEBAIFNV QkRJUlMgPSBcCiAJCSAgdGVzdF9ibG9vbWZpbHRlciBcCiAJCSAgdGVzdF9jb3B5X2NhbGxiYWNr cyBcCiAJCSAgdGVzdF9jdXN0b21fcm1ncnMgXAorCQkgIHRlc3RfY3VzdG9tX3N0YXRzIFwKIAkJ ICB0ZXN0X2RkbF9kZXBhcnNlIFwKIAkJICB0ZXN0X2RzYSBcCiAJCSAgdGVzdF9kc21fcmVnaXN0 cnkgXApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL01ha2Vm aWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL01ha2VmaWxlCmluZGV4IGE2 MThlNmE5ODk5Li5jODUwMzRlYjhjYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmpl Y3Rpb25fcG9pbnRzL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3Bv aW50cy9NYWtlZmlsZQpAQCAtNCw4ICs0LDYgQEAgTU9EVUxFX2JpZyA9IGluamVjdGlvbl9wb2lu dHMKIE9CSlMgPSBcCiAJJChXSU4zMlJFUykgXAogCWluamVjdGlvbl9wb2ludHMubyBcCi0JaW5q ZWN0aW9uX3N0YXRzLm8gXAotCWluamVjdGlvbl9zdGF0c19maXhlZC5vIFwKIAlyZWdyZXNzX2lu amVjdGlvbi5vCiBFWFRFTlNJT04gPSBpbmplY3Rpb25fcG9pbnRzCiBEQVRBID0gaW5qZWN0aW9u X3BvaW50cy0tMS4wLnNxbApAQCAtMjMsOCArMjEsNiBAQCBJU09MQVRJT04gPSBiYXNpYyBcCiAJ ICAgIHJlaW5kZXgtY29uY3VycmVudGx5LXVwc2VydC1vbi1jb25zdHJhaW50IFwKIAkgICAgcmVp bmRleC1jb25jdXJyZW50bHktdXBzZXJ0LXBhcnRpdGlvbmVkCiAKLVRBUF9URVNUUyA9IDEKLQog IyBUaGUgaW5qZWN0aW9uIHBvaW50cyBhcmUgY2x1c3Rlci13aWRlLCBzbyBkaXNhYmxlIGluc3Rh bGxjaGVjawogTk9fSU5TVEFMTENIRUNLID0gMQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3BvaW50cy0tMS4wLnNxbCBiL3NyYy90ZXN0 L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fcG9pbnRzLS0xLjAuc3FsCmluZGV4 IGE1MWZmNTM4Njg0Li44NjFjNzM1NWQ0ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9p bmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9wb2ludHMtLTEuMC5zcWwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9wb2ludHMtLTEuMC5zcWwKQEAgLTEw MSw0OSArMTAxLDYgQEAgUkVUVVJOUyBTRVRPRiByZWNvcmQKIEFTICdNT0RVTEVfUEFUSE5BTUUn LCAnaW5qZWN0aW9uX3BvaW50c19saXN0JwogTEFOR1VBR0UgQyBTVFJJQ1QgVk9MQVRJTEUgUEFS QUxMRUwgUkVTVFJJQ1RFRDsKIAotLS0KLS0tIGluamVjdGlvbl9wb2ludHNfc3RhdHNfbnVtY2Fs bHMoKQotLS0KLS0tIFJlcG9ydHMgc3RhdGlzdGljcywgaWYgYW55LCByZWxhdGVkIHRvIHRoZSBn aXZlbiBpbmplY3Rpb24gcG9pbnQuCi0tLQotQ1JFQVRFIEZVTkNUSU9OIGluamVjdGlvbl9wb2lu dHNfc3RhdHNfbnVtY2FsbHMoSU4gcG9pbnRfbmFtZSBURVhUKQotUkVUVVJOUyBiaWdpbnQKLUFT ICdNT0RVTEVfUEFUSE5BTUUnLCAnaW5qZWN0aW9uX3BvaW50c19zdGF0c19udW1jYWxscycKLUxB TkdVQUdFIEMgU1RSSUNUOwotCi0tLQotLS0gaW5qZWN0aW9uX3BvaW50c19zdGF0c19jb3VudCgp Ci0tLQotLS0gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBzdG9yZWQgaW4gdGhlIHBnc3Rh dHMgaGFzaCB0YWJsZS4KLS0tCi1DUkVBVEUgRlVOQ1RJT04gaW5qZWN0aW9uX3BvaW50c19zdGF0 c19jb3VudCgpCi1SRVRVUk5TIGJpZ2ludAotQVMgJ01PRFVMRV9QQVRITkFNRScsICdpbmplY3Rp b25fcG9pbnRzX3N0YXRzX2NvdW50JwotTEFOR1VBR0UgQyBTVFJJQ1Q7Ci0KLS0tCi0tLSBpbmpl Y3Rpb25fcG9pbnRzX3N0YXRzX2Ryb3AoKQotLS0KLS0tIERyb3AgYWxsIHN0YXRpc3RpY3Mgb2Yg aW5qZWN0aW9uIHBvaW50cy4KLS0tCi1DUkVBVEUgRlVOQ1RJT04gaW5qZWN0aW9uX3BvaW50c19z dGF0c19kcm9wKCkKLVJFVFVSTlMgdm9pZAotQVMgJ01PRFVMRV9QQVRITkFNRScsICdpbmplY3Rp b25fcG9pbnRzX3N0YXRzX2Ryb3AnCi1MQU5HVUFHRSBDIFNUUklDVDsKLQotLS0KLS0tIGluamVj dGlvbl9wb2ludHNfc3RhdHNfZml4ZWQoKQotLS0KLS0tIFJlcG9ydHMgZml4ZWQtbnVtYmVyZWQg c3RhdGlzdGljcyBmb3IgaW5qZWN0aW9uIHBvaW50cy4KLUNSRUFURSBGVU5DVElPTiBpbmplY3Rp b25fcG9pbnRzX3N0YXRzX2ZpeGVkKE9VVCBudW1hdHRhY2ggaW50OCwKLSAgIE9VVCBudW1kZXRh Y2ggaW50OCwKLSAgIE9VVCBudW1ydW4gaW50OCwKLSAgIE9VVCBudW1jYWNoZWQgaW50OCwKLSAg IE9VVCBudW1sb2FkZWQgaW50OCkKLVJFVFVSTlMgcmVjb3JkCi1BUyAnTU9EVUxFX1BBVEhOQU1F JywgJ2luamVjdGlvbl9wb2ludHNfc3RhdHNfZml4ZWQnCi1MQU5HVUFHRSBDIFNUUklDVDsKLQog LS0KIC0tIHJlZ3Jlc3NfaW5qZWN0aW9uLmMgZnVuY3Rpb25zCiAtLQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9wb2ludHMuYyBiL3NyYy90 ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fcG9pbnRzLmMKaW5kZXggYjdj MWM1OGVhNTYuLjQxN2I2MWYzMWM1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2luamVj dGlvbl9wb2ludHMvaW5qZWN0aW9uX3BvaW50cy5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvaW5q ZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fcG9pbnRzLmMKQEAgLTE5LDcgKzE5LDYgQEAKIAogI2lu Y2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCi0jaW5jbHVkZSAiaW5qZWN0aW9u X3N0YXRzLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvcGdfbGlz dC5oIgogI2luY2x1ZGUgIm5vZGVzL3ZhbHVlLmgiCkBAIC0xMDcsMTUgKzEwNiw2IEBAIGV4dGVy biBQR0RMTEVYUE9SVCB2b2lkIGluamVjdGlvbl93YWl0KGNvbnN0IGNoYXIgKm5hbWUsCiAvKiB0 cmFjayBpZiBpbmplY3Rpb24gcG9pbnRzIGF0dGFjaGVkIGluIHRoaXMgcHJvY2VzcyBhcmUgbGlu a2VkIHRvIGl0ICovCiBzdGF0aWMgYm9vbCBpbmplY3Rpb25fcG9pbnRfbG9jYWwgPSBmYWxzZTsK IAotLyoKLSAqIEdVQyB2YXJpYWJsZQotICoKLSAqIFRoaXMgR1VDIGlzIHVzZWZ1bCB0byBjb250 cm9sIGlmIHN0YXRpc3RpY3Mgc2hvdWxkIGJlIGVuYWJsZWQgb3Igbm90Ci0gKiBkdXJpbmcgYSB0 ZXN0IHdpdGggaW5qZWN0aW9uIHBvaW50cywgbGlrZSBmb3IgZXhhbXBsZSBpZiBhIHRlc3QgcmVs aWVzCi0gKiBvbiBhIGNhbGxiYWNrIHJ1biBpbiBhIGNyaXRpY2FsIHNlY3Rpb24gd2hlcmUgbm8g YWxsb2NhdGlvbiBzaG91bGQgaGFwcGVuLgotICovCi1ib29sCQlpbmpfc3RhdHNfZW5hYmxlZCA9 IGZhbHNlOwotCiAvKiBTaGFyZWQgbWVtb3J5IGluaXQgY2FsbGJhY2tzICovCiBzdGF0aWMgc2ht ZW1fcmVxdWVzdF9ob29rX3R5cGUgcHJldl9zaG1lbV9yZXF1ZXN0X2hvb2sgPSBOVUxMOwogc3Rh dGljIHNobWVtX3N0YXJ0dXBfaG9va190eXBlIHByZXZfc2htZW1fc3RhcnR1cF9ob29rID0gTlVM TDsKQEAgLTIzNSw5ICsyMjUsNiBAQCBpbmplY3Rpb25fcG9pbnRzX2NsZWFudXAoaW50IGNvZGUs IERhdHVtIGFyZykKIAkJY2hhcgkgICAqbmFtZSA9IHN0clZhbChsZmlyc3QobGMpKTsKIAogCQko dm9pZCkgSW5qZWN0aW9uUG9pbnREZXRhY2gobmFtZSk7Ci0KLQkJLyogUmVtb3ZlIHN0YXRzIGVu dHJ5ICovCi0JCXBnc3RhdF9kcm9wX2luaihuYW1lKTsKIAl9CiB9CiAKQEAgLTI1MSw4ICsyMzgs NiBAQCBpbmplY3Rpb25fZXJyb3IoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqcHJpdmF0 ZV9kYXRhLCB2b2lkICphcmcpCiAJaWYgKCFpbmplY3Rpb25fcG9pbnRfYWxsb3dlZChjb25kaXRp b24pKQogCQlyZXR1cm47CiAKLQlwZ3N0YXRfcmVwb3J0X2luaihuYW1lKTsKLQogCWlmIChhcmdz dHIpCiAJCWVsb2coRVJST1IsICJlcnJvciB0cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBwb2ludCAl cyAoJXMpIiwKIAkJCSBuYW1lLCBhcmdzdHIpOwpAQCAtMjY5LDggKzI1NCw2IEBAIGluamVjdGlv bl9ub3RpY2UoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqcHJpdmF0ZV9kYXRhLCB2b2lk ICphcmcpCiAJaWYgKCFpbmplY3Rpb25fcG9pbnRfYWxsb3dlZChjb25kaXRpb24pKQogCQlyZXR1 cm47CiAKLQlwZ3N0YXRfcmVwb3J0X2luaihuYW1lKTsKLQogCWlmIChhcmdzdHIpCiAJCWVsb2co Tk9USUNFLCAibm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50ICVzICglcykiLAog CQkJIG5hbWUsIGFyZ3N0cik7CkBAIC0yOTMsOCArMjc2LDYgQEAgaW5qZWN0aW9uX3dhaXQoY29u c3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqcHJpdmF0ZV9kYXRhLCB2b2lkICphcmcpCiAJaWYg KCFpbmplY3Rpb25fcG9pbnRfYWxsb3dlZChjb25kaXRpb24pKQogCQlyZXR1cm47CiAKLQlwZ3N0 YXRfcmVwb3J0X2luaihuYW1lKTsKLQogCS8qCiAJICogVXNlIHRoZSBpbmplY3Rpb24gcG9pbnQg bmFtZSBmb3IgdGhpcyBjdXN0b20gd2FpdCBldmVudC4gIE5vdGUgdGhhdAogCSAqIHRoaXMgY3Vz dG9tIHdhaXQgZXZlbnQgbmFtZSBpcyBub3QgcmVsZWFzZWQsIGJ1dCB3ZSBkb24ndCBjYXJlIG11 Y2ggZm9yCkBAIC0zNzEsNyArMzUyLDYgQEAgaW5qZWN0aW9uX3BvaW50c19hdHRhY2goUEdfRlVO Q1RJT05fQVJHUykKIAkJY29uZGl0aW9uLnBpZCA9IE15UHJvY1BpZDsKIAl9CiAKLQlwZ3N0YXRf cmVwb3J0X2lual9maXhlZCgxLCAwLCAwLCAwLCAwKTsKIAlJbmplY3Rpb25Qb2ludEF0dGFjaChu YW1lLCAiaW5qZWN0aW9uX3BvaW50cyIsIGZ1bmN0aW9uLCAmY29uZGl0aW9uLAogCQkJCQkJIHNp emVvZihJbmplY3Rpb25Qb2ludENvbmRpdGlvbikpOwogCkBAIC0zODUsOSArMzY1LDYgQEAgaW5q ZWN0aW9uX3BvaW50c19hdHRhY2goUEdfRlVOQ1RJT05fQVJHUykKIAkJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGN0eCk7CiAJfQogCi0JLyogQWRkIGVudHJ5IGZvciBzdGF0cyAqLwotCXBnc3Rh dF9jcmVhdGVfaW5qKG5hbWUpOwotCiAJUEdfUkVUVVJOX1ZPSUQoKTsKIH0KIApAQCAtNDIyLDcg KzM5OSw2IEBAIGluamVjdGlvbl9wb2ludHNfYXR0YWNoX2Z1bmMoUEdfRlVOQ1RJT05fQVJHUykK IAkJcHJpdmF0ZV9kYXRhX3NpemUgPSBWQVJTSVpFX0FOWV9FWEhEUihwcml2YXRlX2RhdGEpOwog CX0KIAotCXBnc3RhdF9yZXBvcnRfaW5qX2ZpeGVkKDEsIDAsIDAsIDAsIDApOwogCWlmIChwcml2 YXRlX2RhdGEgIT0gTlVMTCkKIAkJSW5qZWN0aW9uUG9pbnRBdHRhY2gobmFtZSwgbGliX25hbWUs IGZ1bmN0aW9uLCBWQVJEQVRBX0FOWShwcml2YXRlX2RhdGEpLAogCQkJCQkJCSBwcml2YXRlX2Rh dGFfc2l6ZSk7CkBAIC00NDQsNyArNDIwLDYgQEAgaW5qZWN0aW9uX3BvaW50c19sb2FkKFBHX0ZV TkNUSU9OX0FSR1MpCiAJaWYgKGlual9zdGF0ZSA9PSBOVUxMKQogCQlpbmplY3Rpb25faW5pdF9z aG1lbSgpOwogCi0JcGdzdGF0X3JlcG9ydF9pbmpfZml4ZWQoMCwgMCwgMCwgMCwgMSk7CiAJSU5K RUNUSU9OX1BPSU5UX0xPQUQobmFtZSk7CiAKIAlQR19SRVRVUk5fVk9JRCgpOwpAQCAtNDY3LDcg KzQ0Miw2IEBAIGluamVjdGlvbl9wb2ludHNfcnVuKFBHX0ZVTkNUSU9OX0FSR1MpCiAJaWYgKCFQ R19BUkdJU05VTEwoMSkpCiAJCWFyZyA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdfVEVYVF9Q UCgxKSk7CiAKLQlwZ3N0YXRfcmVwb3J0X2lual9maXhlZCgwLCAwLCAxLCAwLCAwKTsKIAlJTkpF Q1RJT05fUE9JTlQobmFtZSwgYXJnKTsKIAogCVBHX1JFVFVSTl9WT0lEKCk7CkBAIC00OTAsNyAr NDY0LDYgQEAgaW5qZWN0aW9uX3BvaW50c19jYWNoZWQoUEdfRlVOQ1RJT05fQVJHUykKIAlpZiAo IVBHX0FSR0lTTlVMTCgxKSkKIAkJYXJnID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhU X1BQKDEpKTsKIAotCXBnc3RhdF9yZXBvcnRfaW5qX2ZpeGVkKDAsIDAsIDAsIDEsIDApOwogCUlO SkVDVElPTl9QT0lOVF9DQUNIRUQobmFtZSwgYXJnKTsKIAogCVBHX1JFVFVSTl9WT0lEKCk7CkBA IC01NjcsNyArNTQwLDYgQEAgaW5qZWN0aW9uX3BvaW50c19kZXRhY2goUEdfRlVOQ1RJT05fQVJH UykKIHsKIAljaGFyCSAgICpuYW1lID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQ KDApKTsKIAotCXBnc3RhdF9yZXBvcnRfaW5qX2ZpeGVkKDAsIDEsIDAsIDAsIDApOwogCWlmICgh SW5qZWN0aW9uUG9pbnREZXRhY2gobmFtZSkpCiAJCWVsb2coRVJST1IsICJjb3VsZCBub3QgZGV0 YWNoIGluamVjdGlvbiBwb2ludCBcIiVzXCIiLCBuYW1lKTsKIApAQCAtNTgxLDkgKzU1Myw2IEBA IGluamVjdGlvbl9wb2ludHNfZGV0YWNoKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjdHgpOwogCX0KIAotCS8qIFJlbW92ZSBzdGF0cyBlbnRyeSAqLwotCXBn c3RhdF9kcm9wX2luaihuYW1lKTsKLQogCVBHX1JFVFVSTl9WT0lEKCk7CiB9CiAKQEAgLTYyNSwz MiArNTk0LDE1IEBAIGluamVjdGlvbl9wb2ludHNfbGlzdChQR19GVU5DVElPTl9BUkdTKQogI3Vu ZGVmIE5VTV9JTkpFQ1RJT05fUE9JTlRTX0xJU1QKIH0KIAotCiB2b2lkCiBfUEdfaW5pdCh2b2lk KQogewogCWlmICghcHJvY2Vzc19zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXNfaW5fcHJvZ3Jlc3Mp CiAJCXJldHVybjsKIAotCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgiaW5qZWN0aW9uX3BvaW50 cy5zdGF0cyIsCi0JCQkJCQkJICJFbmFibGVzIHN0YXRpc3RpY3MgZm9yIGluamVjdGlvbiBwb2lu dHMuIiwKLQkJCQkJCQkgTlVMTCwKLQkJCQkJCQkgJmlual9zdGF0c19lbmFibGVkLAotCQkJCQkJ CSBmYWxzZSwKLQkJCQkJCQkgUEdDX1BPU1RNQVNURVIsCi0JCQkJCQkJIDAsCi0JCQkJCQkJIE5V TEwsCi0JCQkJCQkJIE5VTEwsCi0JCQkJCQkJIE5VTEwpOwotCi0JTWFya0dVQ1ByZWZpeFJlc2Vy dmVkKCJpbmplY3Rpb25fcG9pbnRzIik7Ci0KIAkvKiBTaGFyZWQgbWVtb3J5IGluaXRpYWxpemF0 aW9uICovCiAJcHJldl9zaG1lbV9yZXF1ZXN0X2hvb2sgPSBzaG1lbV9yZXF1ZXN0X2hvb2s7CiAJ c2htZW1fcmVxdWVzdF9ob29rID0gaW5qZWN0aW9uX3NobWVtX3JlcXVlc3Q7CiAJcHJldl9zaG1l bV9zdGFydHVwX2hvb2sgPSBzaG1lbV9zdGFydHVwX2hvb2s7CiAJc2htZW1fc3RhcnR1cF9ob29r ID0gaW5qZWN0aW9uX3NobWVtX3N0YXJ0dXA7Ci0KLQlwZ3N0YXRfcmVnaXN0ZXJfaW5qKCk7Ci0J cGdzdGF0X3JlZ2lzdGVyX2lual9maXhlZCgpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9zdGF0cy5jIGIvc3JjL3Rlc3QvbW9kdWxl cy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9zdGF0cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAxNThlMTYzMWFmOS4uMDAwMDAwMDAwMDAKLS0tIGEvc3JjL3Rlc3QvbW9kdWxl cy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9zdGF0cy5jCisrKyAvZGV2L251bGwKQEAgLTEs MjI4ICswLDAgQEAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBpbmplY3Rpb25fc3RhdHMu YwotICoJCUNvZGUgZm9yIHN0YXRpc3RpY3Mgb2YgaW5qZWN0aW9uIHBvaW50cy4KLSAqCi0gKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0 aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCi0gKgotICogSURFTlRJRklDQVRJT04KLSAqCQlz cmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3N0YXRzLmMKLSAqCi0g KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotI2luY2x1ZGUgInBvc3RncmVzLmgiCi0KLSNpbmNs dWRlICJmbWdyLmgiCi0KLSNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCi0jaW5jbHVkZSAiaW5q ZWN0aW9uX3N0YXRzLmgiCi0jaW5jbHVkZSAicGdzdGF0LmgiCi0jaW5jbHVkZSAidXRpbHMvYnVp bHRpbnMuaCIKLSNpbmNsdWRlICJ1dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCIKLQotLyogU3RydWN0 dXJlcyBmb3Igc3RhdGlzdGljcyBvZiBpbmplY3Rpb24gcG9pbnRzICovCi10eXBlZGVmIHN0cnVj dCBQZ1N0YXRfU3RhdEluakVudHJ5Ci17Ci0JUGdTdGF0X0NvdW50ZXIgbnVtY2FsbHM7CS8qIG51 bWJlciBvZiB0aW1lcyBwb2ludCBoYXMgYmVlbiBydW4gKi8KLX0gUGdTdGF0X1N0YXRJbmpFbnRy eTsKLQotdHlwZWRlZiBzdHJ1Y3QgUGdTdGF0U2hhcmVkX0luamVjdGlvblBvaW50Ci17Ci0JUGdT dGF0U2hhcmVkX0NvbW1vbiBoZWFkZXI7Ci0JUGdTdGF0X1N0YXRJbmpFbnRyeSBzdGF0czsKLX0g UGdTdGF0U2hhcmVkX0luamVjdGlvblBvaW50OwotCi1zdGF0aWMgYm9vbCBpbmplY3Rpb25fc3Rh dHNfZmx1c2hfY2IoUGdTdGF0X0VudHJ5UmVmICplbnRyeV9yZWYsIGJvb2wgbm93YWl0KTsKLQot c3RhdGljIGNvbnN0IFBnU3RhdF9LaW5kSW5mbyBpbmplY3Rpb25fc3RhdHMgPSB7Ci0JLm5hbWUg PSAiaW5qZWN0aW9uX3BvaW50cyIsCi0JLmZpeGVkX2Ftb3VudCA9IGZhbHNlLAkJLyogQm91bmRl ZCBieSB0aGUgbnVtYmVyIG9mIHBvaW50cyAqLwotCS53cml0ZV90b19maWxlID0gdHJ1ZSwKLQku dHJhY2tfZW50cnlfY291bnQgPSB0cnVlLAotCi0JLyogSW5qZWN0aW9uIHBvaW50cyBhcmUgc3lz dGVtLXdpZGUgKi8KLQkuYWNjZXNzZWRfYWNyb3NzX2RhdGFiYXNlcyA9IHRydWUsCi0KLQkuc2hh cmVkX3NpemUgPSBzaXplb2YoUGdTdGF0U2hhcmVkX0luamVjdGlvblBvaW50KSwKLQkuc2hhcmVk X2RhdGFfb2ZmID0gb2Zmc2V0b2YoUGdTdGF0U2hhcmVkX0luamVjdGlvblBvaW50LCBzdGF0cyks Ci0JLnNoYXJlZF9kYXRhX2xlbiA9IHNpemVvZigoKFBnU3RhdFNoYXJlZF9JbmplY3Rpb25Qb2lu dCAqKSAwKS0+c3RhdHMpLAotCS5wZW5kaW5nX3NpemUgPSBzaXplb2YoUGdTdGF0X1N0YXRJbmpF bnRyeSksCi0JLmZsdXNoX3BlbmRpbmdfY2IgPSBpbmplY3Rpb25fc3RhdHNfZmx1c2hfY2IsCi19 OwotCi0vKgotICogQ29tcHV0ZSBzdGF0cyBlbnRyeSBpZHggZnJvbSBwb2ludCBuYW1lIHdpdGgg YW4gOC1ieXRlIGhhc2guCi0gKi8KLSNkZWZpbmUgUEdTVEFUX0lOSl9JRFgobmFtZSkgaGFzaF9i eXRlc19leHRlbmRlZCgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBuYW1lLCBzdHJsZW4obmFtZSks IDApCi0KLS8qCi0gKiBLaW5kIElEIHJlc2VydmVkIGZvciBzdGF0aXN0aWNzIG9mIGluamVjdGlv biBwb2ludHMuCi0gKi8KLSNkZWZpbmUgUEdTVEFUX0tJTkRfSU5KRUNUSU9OCTI1Ci0KLS8qIFRy YWNrIGlmIHN0YXRzIGFyZSBsb2FkZWQgKi8KLXN0YXRpYyBib29sIGlual9zdGF0c19sb2FkZWQg PSBmYWxzZTsKLQotLyoKLSAqIENhbGxiYWNrIGZvciBzdGF0cyBoYW5kbGluZwotICovCi1zdGF0 aWMgYm9vbAotaW5qZWN0aW9uX3N0YXRzX2ZsdXNoX2NiKFBnU3RhdF9FbnRyeVJlZiAqZW50cnlf cmVmLCBib29sIG5vd2FpdCkKLXsKLQlQZ1N0YXRfU3RhdEluakVudHJ5ICpsb2NhbGVudDsKLQlQ Z1N0YXRTaGFyZWRfSW5qZWN0aW9uUG9pbnQgKnNoZnVuY2VudDsKLQotCWxvY2FsZW50ID0gKFBn U3RhdF9TdGF0SW5qRW50cnkgKikgZW50cnlfcmVmLT5wZW5kaW5nOwotCXNoZnVuY2VudCA9IChQ Z1N0YXRTaGFyZWRfSW5qZWN0aW9uUG9pbnQgKikgZW50cnlfcmVmLT5zaGFyZWRfc3RhdHM7Ci0K LQlpZiAoIXBnc3RhdF9sb2NrX2VudHJ5KGVudHJ5X3JlZiwgbm93YWl0KSkKLQkJcmV0dXJuIGZh bHNlOwotCi0Jc2hmdW5jZW50LT5zdGF0cy5udW1jYWxscyArPSBsb2NhbGVudC0+bnVtY2FsbHM7 Ci0KLQlwZ3N0YXRfdW5sb2NrX2VudHJ5KGVudHJ5X3JlZik7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0K LQotLyoKLSAqIFN1cHBvcnQgZnVuY3Rpb24gZm9yIHRoZSBTUUwtY2FsbGFibGUgcGdzdGF0KiBm dW5jdGlvbnMuICBSZXR1cm5zCi0gKiBhIHBvaW50ZXIgdG8gdGhlIGluamVjdGlvbiBwb2ludCBz dGF0aXN0aWNzIHN0cnVjdC4KLSAqLwotc3RhdGljIFBnU3RhdF9TdGF0SW5qRW50cnkgKgotcGdz dGF0X2ZldGNoX3N0YXRfaW5qZW50cnkoY29uc3QgY2hhciAqbmFtZSkKLXsKLQlQZ1N0YXRfU3Rh dEluakVudHJ5ICplbnRyeSA9IE5VTEw7Ci0KLQlpZiAoIWlual9zdGF0c19sb2FkZWQgfHwgIWlu al9zdGF0c19lbmFibGVkKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qIENvbXBpbGUgdGhlIGxvb2t1 cCBrZXkgYXMgYSBoYXNoIG9mIHRoZSBwb2ludCBuYW1lICovCi0JZW50cnkgPSAoUGdTdGF0X1N0 YXRJbmpFbnRyeSAqKSBwZ3N0YXRfZmV0Y2hfZW50cnkoUEdTVEFUX0tJTkRfSU5KRUNUSU9OLAot CQkJCQkJCQkJCQkJCSAgIEludmFsaWRPaWQsCi0JCQkJCQkJCQkJCQkJICAgUEdTVEFUX0lOSl9J RFgobmFtZSkpOwotCXJldHVybiBlbnRyeTsKLX0KLQotLyoKLSAqIFdvcmtob3JzZSB0byBkbyB0 aGUgcmVnaXN0cmF0aW9uIHdvcmssIGNhbGxlZCBpbiBfUEdfaW5pdCgpLgotICovCi12b2lkCi1w Z3N0YXRfcmVnaXN0ZXJfaW5qKHZvaWQpCi17Ci0JcGdzdGF0X3JlZ2lzdGVyX2tpbmQoUEdTVEFU X0tJTkRfSU5KRUNUSU9OLCAmaW5qZWN0aW9uX3N0YXRzKTsKLQotCS8qIG1hcmsgc3RhdHMgYXMg bG9hZGVkICovCi0JaW5qX3N0YXRzX2xvYWRlZCA9IHRydWU7Ci19Ci0KLS8qCi0gKiBSZXBvcnQg aW5qZWN0aW9uIHBvaW50IGNyZWF0aW9uLgotICovCi12b2lkCi1wZ3N0YXRfY3JlYXRlX2luaihj b25zdCBjaGFyICpuYW1lKQotewotCVBnU3RhdF9FbnRyeVJlZiAqZW50cnlfcmVmOwotCVBnU3Rh dFNoYXJlZF9JbmplY3Rpb25Qb2ludCAqc2hzdGF0ZW50OwotCi0JLyogbGVhdmUgaWYgZGlzYWJs ZWQgKi8KLQlpZiAoIWlual9zdGF0c19sb2FkZWQgfHwgIWlual9zdGF0c19lbmFibGVkKQotCQly ZXR1cm47Ci0KLQllbnRyeV9yZWYgPSBwZ3N0YXRfcHJlcF9wZW5kaW5nX2VudHJ5KFBHU1RBVF9L SU5EX0lOSkVDVElPTiwgSW52YWxpZE9pZCwKLQkJCQkJCQkJCQkgIFBHU1RBVF9JTkpfSURYKG5h bWUpLCBOVUxMKTsKLQotCXNoc3RhdGVudCA9IChQZ1N0YXRTaGFyZWRfSW5qZWN0aW9uUG9pbnQg KikgZW50cnlfcmVmLT5zaGFyZWRfc3RhdHM7Ci0KLQkvKiBpbml0aWFsaXplIHNoYXJlZCBtZW1v cnkgZGF0YSAqLwotCW1lbXNldCgmc2hzdGF0ZW50LT5zdGF0cywgMCwgc2l6ZW9mKHNoc3RhdGVu dC0+c3RhdHMpKTsKLX0KLQotLyoKLSAqIFJlcG9ydCBpbmplY3Rpb24gcG9pbnQgZHJvcC4KLSAq Lwotdm9pZAotcGdzdGF0X2Ryb3BfaW5qKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JLyogbGVhdmUg aWYgZGlzYWJsZWQgKi8KLQlpZiAoIWlual9zdGF0c19sb2FkZWQgfHwgIWlual9zdGF0c19lbmFi bGVkKQotCQlyZXR1cm47Ci0KLQlpZiAoIXBnc3RhdF9kcm9wX2VudHJ5KFBHU1RBVF9LSU5EX0lO SkVDVElPTiwgSW52YWxpZE9pZCwKLQkJCQkJCSAgIFBHU1RBVF9JTkpfSURYKG5hbWUpKSkKLQkJ cGdzdGF0X3JlcXVlc3RfZW50cnlfcmVmc19nYygpOwotfQotCi0vKgotICogUmVwb3J0IHN0YXRp c3RpY3MgZm9yIGluamVjdGlvbiBwb2ludC4KLSAqCi0gKiBUaGlzIGlzIHNpbXBsZSBiZWNhdXNl IHRoZSBzZXQgb2Ygc3RhdHMgdG8gcmVwb3J0IGN1cnJlbnRseSBpcyBzaW1wbGU6Ci0gKiB0cmFj ayB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgcG9pbnQgaGFzIGJlZW4gcnVuLgotICovCi12b2lkCi1w Z3N0YXRfcmVwb3J0X2luaihjb25zdCBjaGFyICpuYW1lKQotewotCVBnU3RhdF9FbnRyeVJlZiAq ZW50cnlfcmVmOwotCVBnU3RhdF9TdGF0SW5qRW50cnkgKnBlbmRpbmc7Ci0KLQkvKiBsZWF2ZSBp ZiBkaXNhYmxlZCAqLwotCWlmICghaW5qX3N0YXRzX2xvYWRlZCB8fCAhaW5qX3N0YXRzX2VuYWJs ZWQpCi0JCXJldHVybjsKLQotCWVudHJ5X3JlZiA9IHBnc3RhdF9wcmVwX3BlbmRpbmdfZW50cnko UEdTVEFUX0tJTkRfSU5KRUNUSU9OLCBJbnZhbGlkT2lkLAotCQkJCQkJCQkJCSAgUEdTVEFUX0lO Sl9JRFgobmFtZSksIE5VTEwpOwotCi0JcGVuZGluZyA9IChQZ1N0YXRfU3RhdEluakVudHJ5ICop IGVudHJ5X3JlZi0+cGVuZGluZzsKLQotCS8qIFVwZGF0ZSB0aGUgaW5qZWN0aW9uIHBvaW50IHBl bmRpbmcgc3RhdGlzdGljcyAqLwotCXBlbmRpbmctPm51bWNhbGxzKys7Ci19Ci0KLS8qCi0gKiBT UUwgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBudW1iZXIgb2YgdGltZXMgYW4gaW5qZWN0aW9uIHBv aW50Ci0gKiBoYXMgYmVlbiBjYWxsZWQuCi0gKi8KLVBHX0ZVTkNUSU9OX0lORk9fVjEoaW5qZWN0 aW9uX3BvaW50c19zdGF0c19udW1jYWxscyk7Ci1EYXR1bQotaW5qZWN0aW9uX3BvaW50c19zdGF0 c19udW1jYWxscyhQR19GVU5DVElPTl9BUkdTKQotewotCWNoYXIJICAgKm5hbWUgPSB0ZXh0X3Rv X2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOwotCVBnU3RhdF9TdGF0SW5qRW50cnkgKmVu dHJ5ID0gcGdzdGF0X2ZldGNoX3N0YXRfaW5qZW50cnkobmFtZSk7Ci0KLQlpZiAoZW50cnkgPT0g TlVMTCkKLQkJUEdfUkVUVVJOX05VTEwoKTsKLQotCVBHX1JFVFVSTl9JTlQ2NChlbnRyeS0+bnVt Y2FsbHMpOwotfQotCi0vKgotICogU1FMIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbnVtYmVyIG9m IGVudHJpZXMgYWxsb2NhdGVkIGZvciBpbmplY3Rpb24KLSAqIHBvaW50cyBpbiB0aGUgc2hhcmVk IGhhc2h0YWJsZSBvZiBwZ3N0YXRzLgotICovCi1QR19GVU5DVElPTl9JTkZPX1YxKGluamVjdGlv bl9wb2ludHNfc3RhdHNfY291bnQpOwotRGF0dW0KLWluamVjdGlvbl9wb2ludHNfc3RhdHNfY291 bnQoUEdfRlVOQ1RJT05fQVJHUykKLXsKLQlQR19SRVRVUk5fSU5UNjQocGdzdGF0X2dldF9lbnRy eV9jb3VudChQR1NUQVRfS0lORF9JTkpFQ1RJT04pKTsKLX0KLQotLyogT25seSB1c2VkIGJ5IGlu amVjdGlvbl9wb2ludHNfc3RhdHNfZHJvcCgpICovCi1zdGF0aWMgYm9vbAotbWF0Y2hfaW5qX2Vu dHJpZXMoUGdTdGF0U2hhcmVkX0hhc2hFbnRyeSAqZW50cnksIERhdHVtIG1hdGNoX2RhdGEpCi17 Ci0JcmV0dXJuIGVudHJ5LT5rZXkua2luZCA9PSBQR1NUQVRfS0lORF9JTkpFQ1RJT047Ci19Ci0K LS8qCi0gKiBTUUwgZnVuY3Rpb24gdGhhdCBkcm9wcyBhbGwgaW5qZWN0aW9uIHBvaW50IHN0YXRp c3RpY3MuCi0gKi8KLVBHX0ZVTkNUSU9OX0lORk9fVjEoaW5qZWN0aW9uX3BvaW50c19zdGF0c19k cm9wKTsKLURhdHVtCi1pbmplY3Rpb25fcG9pbnRzX3N0YXRzX2Ryb3AoUEdfRlVOQ1RJT05fQVJH UykKLXsKLQlwZ3N0YXRfZHJvcF9tYXRjaGluZ19lbnRyaWVzKG1hdGNoX2lual9lbnRyaWVzLCAw KTsKLQotCVBHX1JFVFVSTl9WT0lEKCk7Ci19CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3N0YXRzLmggYi9zcmMvdGVzdC9tb2R1bGVzL2lu amVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3N0YXRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGJhMzEwYzUyYzdmLi4wMDAwMDAwMDAwMAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2lu amVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3N0YXRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSAr MCwwIEBACi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogaW5qZWN0aW9uX3N0YXRzLmgKLSAq CQlEZWZpbml0aW9ucyBmb3Igc3RhdGlzdGljcyBvZiBpbmplY3Rpb24gcG9pbnRzLgotICoKLSAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9m IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKLSAqCi0gKiBJREVOVElGSUNBVElPTgotICoJ CXNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fc3RhdHMuaAotICoK LSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0jaWZuZGVmIElOSkVDVElPTl9TVEFUUwotI2Rl ZmluZSBJTkpFQ1RJT05fU1RBVFMKLQotLyogR1VDIHZhcmlhYmxlICovCi1leHRlcm4gYm9vbCBp bmpfc3RhdHNfZW5hYmxlZDsKLQotLyogaW5qZWN0aW9uX3N0YXRzLmMgKi8KLWV4dGVybiB2b2lk IHBnc3RhdF9yZWdpc3Rlcl9pbmoodm9pZCk7Ci1leHRlcm4gdm9pZCBwZ3N0YXRfY3JlYXRlX2lu aihjb25zdCBjaGFyICpuYW1lKTsKLWV4dGVybiB2b2lkIHBnc3RhdF9kcm9wX2luaihjb25zdCBj aGFyICpuYW1lKTsKLWV4dGVybiB2b2lkIHBnc3RhdF9yZXBvcnRfaW5qKGNvbnN0IGNoYXIgKm5h bWUpOwotCi0vKiBpbmplY3Rpb25fc3RhdHNfZml4ZWQuYyAqLwotZXh0ZXJuIHZvaWQgcGdzdGF0 X3JlZ2lzdGVyX2lual9maXhlZCh2b2lkKTsKLWV4dGVybiB2b2lkIHBnc3RhdF9yZXBvcnRfaW5q X2ZpeGVkKHVpbnQzMiBudW1hdHRhY2gsCi0JCQkJCQkJCQl1aW50MzIgbnVtZGV0YWNoLAotCQkJ CQkJCQkJdWludDMyIG51bXJ1biwKLQkJCQkJCQkJCXVpbnQzMiBudW1jYWNoZWQsCi0JCQkJCQkJ CQl1aW50MzIgbnVtbG9hZGVkKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3N0YXRzX2ZpeGVkLmMgYi9zcmMvdGVzdC9t b2R1bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3N0YXRzX2ZpeGVkLmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0OTNlOGY3N2EzLi4wMDAwMDAwMDAwMAotLS0gYS9zcmMv dGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3N0YXRzX2ZpeGVkLmMKKysr IC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAq IGluamVjdGlvbl9zdGF0c19maXhlZC5jCi0gKgkJQ29kZSBmb3IgZml4ZWQtbnVtYmVyZWQgc3Rh dGlzdGljcyBvZiBpbmplY3Rpb24gcG9pbnRzLgotICoKLSAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAotICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENh bGlmb3JuaWEKLSAqCi0gKiBJREVOVElGSUNBVElPTgotICoJCXNyYy90ZXN0L21vZHVsZXMvaW5q ZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fc3RhdHNfZml4ZWQuYwotICoKLSAqIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSAqLwotCi0jaW5jbHVkZSAicG9zdGdyZXMuaCIKLQotI2luY2x1ZGUgImZtZ3IuaCIK LQotI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKLSNpbmNsdWRlICJjb21tb24vaGFz aGZuLmgiCi0jaW5jbHVkZSAiZnVuY2FwaS5oIgotI2luY2x1ZGUgImluamVjdGlvbl9zdGF0cy5o IgotI2luY2x1ZGUgInBnc3RhdC5oIgotI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCi0jaW5j bHVkZSAidXRpbHMvcGdzdGF0X2ludGVybmFsLmgiCi0KLS8qIFN0cnVjdHVyZXMgZm9yIHN0YXRp c3RpY3Mgb2YgaW5qZWN0aW9uIHBvaW50cywgZml4ZWQtc2l6ZSAqLwotdHlwZWRlZiBzdHJ1Y3Qg UGdTdGF0X1N0YXRJbmpGaXhlZEVudHJ5Ci17Ci0JUGdTdGF0X0NvdW50ZXIgbnVtYXR0YWNoOwkv KiBudW1iZXIgb2YgcG9pbnRzIGF0dGFjaGVkICovCi0JUGdTdGF0X0NvdW50ZXIgbnVtZGV0YWNo OwkvKiBudW1iZXIgb2YgcG9pbnRzIGRldGFjaGVkICovCi0JUGdTdGF0X0NvdW50ZXIgbnVtcnVu OwkJLyogbnVtYmVyIG9mIHBvaW50cyBydW4gKi8KLQlQZ1N0YXRfQ291bnRlciBudW1jYWNoZWQ7 CS8qIG51bWJlciBvZiBwb2ludHMgY2FjaGVkICovCi0JUGdTdGF0X0NvdW50ZXIgbnVtbG9hZGVk OwkvKiBudW1iZXIgb2YgcG9pbnRzIGxvYWRlZCAqLwotCVRpbWVzdGFtcFR6IHN0YXRfcmVzZXRf dGltZXN0YW1wOwotfSBQZ1N0YXRfU3RhdEluakZpeGVkRW50cnk7Ci0KLXR5cGVkZWYgc3RydWN0 IFBnU3RhdFNoYXJlZF9JbmplY3Rpb25Qb2ludEZpeGVkCi17Ci0JTFdMb2NrCQlsb2NrOwkJCS8q IHByb3RlY3RzIGFsbCB0aGUgY291bnRlcnMgKi8KLQl1aW50MzIJCWNoYW5nZWNvdW50OwotCVBn U3RhdF9TdGF0SW5qRml4ZWRFbnRyeSBzdGF0czsKLQlQZ1N0YXRfU3RhdEluakZpeGVkRW50cnkg cmVzZXRfb2Zmc2V0OwotfSBQZ1N0YXRTaGFyZWRfSW5qZWN0aW9uUG9pbnRGaXhlZDsKLQotLyog Q2FsbGJhY2tzIGZvciBmaXhlZC1udW1iZXJlZCBzdGF0cyAqLwotc3RhdGljIHZvaWQgaW5qZWN0 aW9uX3N0YXRzX2ZpeGVkX2luaXRfc2htZW1fY2Iodm9pZCAqc3RhdHMpOwotc3RhdGljIHZvaWQg aW5qZWN0aW9uX3N0YXRzX2ZpeGVkX3Jlc2V0X2FsbF9jYihUaW1lc3RhbXBUeiB0cyk7Ci1zdGF0 aWMgdm9pZCBpbmplY3Rpb25fc3RhdHNfZml4ZWRfc25hcHNob3RfY2Iodm9pZCk7Ci0KLXN0YXRp YyBjb25zdCBQZ1N0YXRfS2luZEluZm8gaW5qZWN0aW9uX3N0YXRzX2ZpeGVkID0gewotCS5uYW1l ID0gImluamVjdGlvbl9wb2ludHNfZml4ZWQiLAotCS5maXhlZF9hbW91bnQgPSB0cnVlLAotCS53 cml0ZV90b19maWxlID0gdHJ1ZSwKLQotCS5zaGFyZWRfc2l6ZSA9IHNpemVvZihQZ1N0YXRfU3Rh dEluakZpeGVkRW50cnkpLAotCS5zaGFyZWRfZGF0YV9vZmYgPSBvZmZzZXRvZihQZ1N0YXRTaGFy ZWRfSW5qZWN0aW9uUG9pbnRGaXhlZCwgc3RhdHMpLAotCS5zaGFyZWRfZGF0YV9sZW4gPSBzaXpl b2YoKChQZ1N0YXRTaGFyZWRfSW5qZWN0aW9uUG9pbnRGaXhlZCAqKSAwKS0+c3RhdHMpLAotCi0J LmluaXRfc2htZW1fY2IgPSBpbmplY3Rpb25fc3RhdHNfZml4ZWRfaW5pdF9zaG1lbV9jYiwKLQku cmVzZXRfYWxsX2NiID0gaW5qZWN0aW9uX3N0YXRzX2ZpeGVkX3Jlc2V0X2FsbF9jYiwKLQkuc25h cHNob3RfY2IgPSBpbmplY3Rpb25fc3RhdHNfZml4ZWRfc25hcHNob3RfY2IsCi19OwotCi0vKgot ICogS2luZCBJRCByZXNlcnZlZCBmb3Igc3RhdGlzdGljcyBvZiBpbmplY3Rpb24gcG9pbnRzLgot ICovCi0jZGVmaW5lIFBHU1RBVF9LSU5EX0lOSkVDVElPTl9GSVhFRAkyNgotCi0vKiBUcmFjayBp ZiBmaXhlZC1udW1iZXJlZCBzdGF0cyBhcmUgbG9hZGVkICovCi1zdGF0aWMgYm9vbCBpbmpfZml4 ZWRfbG9hZGVkID0gZmFsc2U7Ci0KLXN0YXRpYyB2b2lkCi1pbmplY3Rpb25fc3RhdHNfZml4ZWRf aW5pdF9zaG1lbV9jYih2b2lkICpzdGF0cykKLXsKLQlQZ1N0YXRTaGFyZWRfSW5qZWN0aW9uUG9p bnRGaXhlZCAqc3RhdHNfc2htZW0gPQotCQkoUGdTdGF0U2hhcmVkX0luamVjdGlvblBvaW50Rml4 ZWQgKikgc3RhdHM7Ci0KLQlMV0xvY2tJbml0aWFsaXplKCZzdGF0c19zaG1lbS0+bG9jaywgTFdU UkFOQ0hFX1BHU1RBVFNfREFUQSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pbmplY3Rpb25fc3RhdHNf Zml4ZWRfcmVzZXRfYWxsX2NiKFRpbWVzdGFtcFR6IHRzKQotewotCVBnU3RhdFNoYXJlZF9Jbmpl Y3Rpb25Qb2ludEZpeGVkICpzdGF0c19zaG1lbSA9Ci0JCXBnc3RhdF9nZXRfY3VzdG9tX3NobWVt X2RhdGEoUEdTVEFUX0tJTkRfSU5KRUNUSU9OX0ZJWEVEKTsKLQotCUxXTG9ja0FjcXVpcmUoJnN0 YXRzX3NobWVtLT5sb2NrLCBMV19FWENMVVNJVkUpOwotCXBnc3RhdF9jb3B5X2NoYW5nZWNvdW50 ZWRfc3RhdHMoJnN0YXRzX3NobWVtLT5yZXNldF9vZmZzZXQsCi0JCQkJCQkJCQkmc3RhdHNfc2ht ZW0tPnN0YXRzLAotCQkJCQkJCQkJc2l6ZW9mKHN0YXRzX3NobWVtLT5zdGF0cyksCi0JCQkJCQkJ CQkmc3RhdHNfc2htZW0tPmNoYW5nZWNvdW50KTsKLQlzdGF0c19zaG1lbS0+c3RhdHMuc3RhdF9y ZXNldF90aW1lc3RhbXAgPSB0czsKLQlMV0xvY2tSZWxlYXNlKCZzdGF0c19zaG1lbS0+bG9jayk7 Ci19Ci0KLXN0YXRpYyB2b2lkCi1pbmplY3Rpb25fc3RhdHNfZml4ZWRfc25hcHNob3RfY2Iodm9p ZCkKLXsKLQlQZ1N0YXRTaGFyZWRfSW5qZWN0aW9uUG9pbnRGaXhlZCAqc3RhdHNfc2htZW0gPQot CQlwZ3N0YXRfZ2V0X2N1c3RvbV9zaG1lbV9kYXRhKFBHU1RBVF9LSU5EX0lOSkVDVElPTl9GSVhF RCk7Ci0JUGdTdGF0X1N0YXRJbmpGaXhlZEVudHJ5ICpzdGF0X3NuYXAgPQotCQlwZ3N0YXRfZ2V0 X2N1c3RvbV9zbmFwc2hvdF9kYXRhKFBHU1RBVF9LSU5EX0lOSkVDVElPTl9GSVhFRCk7Ci0JUGdT dGF0X1N0YXRJbmpGaXhlZEVudHJ5ICpyZXNldF9vZmZzZXQgPSAmc3RhdHNfc2htZW0tPnJlc2V0 X29mZnNldDsKLQlQZ1N0YXRfU3RhdEluakZpeGVkRW50cnkgcmVzZXQ7Ci0KLQlwZ3N0YXRfY29w eV9jaGFuZ2Vjb3VudGVkX3N0YXRzKHN0YXRfc25hcCwKLQkJCQkJCQkJCSZzdGF0c19zaG1lbS0+ c3RhdHMsCi0JCQkJCQkJCQlzaXplb2Yoc3RhdHNfc2htZW0tPnN0YXRzKSwKLQkJCQkJCQkJCSZz dGF0c19zaG1lbS0+Y2hhbmdlY291bnQpOwotCi0JTFdMb2NrQWNxdWlyZSgmc3RhdHNfc2htZW0t PmxvY2ssIExXX1NIQVJFRCk7Ci0JbWVtY3B5KCZyZXNldCwgcmVzZXRfb2Zmc2V0LCBzaXplb2Yo c3RhdHNfc2htZW0tPnN0YXRzKSk7Ci0JTFdMb2NrUmVsZWFzZSgmc3RhdHNfc2htZW0tPmxvY2sp OwotCi0JLyogY29tcGVuc2F0ZSBieSByZXNldCBvZmZzZXRzICovCi0jZGVmaW5lIEZJWEVEX0NP TVAoZmxkKSBzdGF0X3NuYXAtPmZsZCAtPSByZXNldC5mbGQ7Ci0JRklYRURfQ09NUChudW1hdHRh Y2gpOwotCUZJWEVEX0NPTVAobnVtZGV0YWNoKTsKLQlGSVhFRF9DT01QKG51bXJ1bik7Ci0JRklY RURfQ09NUChudW1jYWNoZWQpOwotCUZJWEVEX0NPTVAobnVtbG9hZGVkKTsKLSN1bmRlZiBGSVhF RF9DT01QCi19Ci0KLS8qCi0gKiBXb3JraG9yc2UgdG8gZG8gdGhlIHJlZ2lzdHJhdGlvbiB3b3Jr LCBjYWxsZWQgaW4gX1BHX2luaXQoKS4KLSAqLwotdm9pZAotcGdzdGF0X3JlZ2lzdGVyX2lual9m aXhlZCh2b2lkKQotewotCXBnc3RhdF9yZWdpc3Rlcl9raW5kKFBHU1RBVF9LSU5EX0lOSkVDVElP Tl9GSVhFRCwgJmluamVjdGlvbl9zdGF0c19maXhlZCk7Ci0KLQkvKiBtYXJrIHN0YXRzIGFzIGxv YWRlZCAqLwotCWlual9maXhlZF9sb2FkZWQgPSB0cnVlOwotfQotCi0vKgotICogUmVwb3J0IGZp eGVkIG51bWJlciBvZiBzdGF0aXN0aWNzIGZvciBhbiBpbmplY3Rpb24gcG9pbnQuCi0gKi8KLXZv aWQKLXBnc3RhdF9yZXBvcnRfaW5qX2ZpeGVkKHVpbnQzMiBudW1hdHRhY2gsCi0JCQkJCQl1aW50 MzIgbnVtZGV0YWNoLAotCQkJCQkJdWludDMyIG51bXJ1biwKLQkJCQkJCXVpbnQzMiBudW1jYWNo ZWQsCi0JCQkJCQl1aW50MzIgbnVtbG9hZGVkKQotewotCVBnU3RhdFNoYXJlZF9JbmplY3Rpb25Q b2ludEZpeGVkICpzdGF0c19zaG1lbTsKLQotCS8qIGxlYXZlIGlmIGRpc2FibGVkICovCi0JaWYg KCFpbmpfZml4ZWRfbG9hZGVkIHx8ICFpbmpfc3RhdHNfZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0J c3RhdHNfc2htZW0gPSBwZ3N0YXRfZ2V0X2N1c3RvbV9zaG1lbV9kYXRhKFBHU1RBVF9LSU5EX0lO SkVDVElPTl9GSVhFRCk7Ci0KLQlMV0xvY2tBY3F1aXJlKCZzdGF0c19zaG1lbS0+bG9jaywgTFdf RVhDTFVTSVZFKTsKLQotCXBnc3RhdF9iZWdpbl9jaGFuZ2Vjb3VudF93cml0ZSgmc3RhdHNfc2ht ZW0tPmNoYW5nZWNvdW50KTsKLQlzdGF0c19zaG1lbS0+c3RhdHMubnVtYXR0YWNoICs9IG51bWF0 dGFjaDsKLQlzdGF0c19zaG1lbS0+c3RhdHMubnVtZGV0YWNoICs9IG51bWRldGFjaDsKLQlzdGF0 c19zaG1lbS0+c3RhdHMubnVtcnVuICs9IG51bXJ1bjsKLQlzdGF0c19zaG1lbS0+c3RhdHMubnVt Y2FjaGVkICs9IG51bWNhY2hlZDsKLQlzdGF0c19zaG1lbS0+c3RhdHMubnVtbG9hZGVkICs9IG51 bWxvYWRlZDsKLQlwZ3N0YXRfZW5kX2NoYW5nZWNvdW50X3dyaXRlKCZzdGF0c19zaG1lbS0+Y2hh bmdlY291bnQpOwotCi0JTFdMb2NrUmVsZWFzZSgmc3RhdHNfc2htZW0tPmxvY2spOwotfQotCi0v KgotICogU1FMIGZ1bmN0aW9uIHJldHVybmluZyBmaXhlZC1udW1iZXJlZCBzdGF0aXN0aWNzIGZv ciBpbmplY3Rpb24gcG9pbnRzLgotICovCi1QR19GVU5DVElPTl9JTkZPX1YxKGluamVjdGlvbl9w b2ludHNfc3RhdHNfZml4ZWQpOwotRGF0dW0KLWluamVjdGlvbl9wb2ludHNfc3RhdHNfZml4ZWQo UEdfRlVOQ1RJT05fQVJHUykKLXsKLQlUdXBsZURlc2MJdHVwZGVzYzsKLQlEYXR1bQkJdmFsdWVz WzVdID0gezB9OwotCWJvb2wJCW51bGxzWzVdID0gezB9OwotCVBnU3RhdF9TdGF0SW5qRml4ZWRF bnRyeSAqc3RhdHM7Ci0KLQlpZiAoIWlual9maXhlZF9sb2FkZWQgfHwgIWlual9zdGF0c19lbmFi bGVkKQotCQlQR19SRVRVUk5fTlVMTCgpOwotCi0JcGdzdGF0X3NuYXBzaG90X2ZpeGVkKFBHU1RB VF9LSU5EX0lOSkVDVElPTl9GSVhFRCk7Ci0Jc3RhdHMgPSBwZ3N0YXRfZ2V0X2N1c3RvbV9zbmFw c2hvdF9kYXRhKFBHU1RBVF9LSU5EX0lOSkVDVElPTl9GSVhFRCk7Ci0KLQkvKiBJbml0aWFsaXNl IGF0dHJpYnV0ZXMgaW5mb3JtYXRpb24gaW4gdGhlIHR1cGxlIGRlc2NyaXB0b3IgKi8KLQl0dXBk ZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoNSk7Ci0JVHVwbGVEZXNjSW5pdEVudHJ5KHR1 cGRlc2MsIChBdHRyTnVtYmVyKSAxLCAibnVtYXR0YWNoIiwKLQkJCQkJICAgSU5UOE9JRCwgLTEs IDApOwotCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMiwgIm51bWRl dGFjaCIsCi0JCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKLQlUdXBsZURlc2NJbml0RW50cnkodHVw ZGVzYywgKEF0dHJOdW1iZXIpIDMsICJudW1ydW4iLAotCQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7 Ci0JVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA0LCAibnVtY2FjaGVk IiwKLQkJCQkJICAgSU5UOE9JRCwgLTEsIDApOwotCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNj LCAoQXR0ck51bWJlcikgNSwgIm51bWxvYWRlZCIsCi0JCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsK LQlCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsKLQotCXZhbHVlc1swXSA9IEludDY0R2V0RGF0dW0o c3RhdHMtPm51bWF0dGFjaCk7Ci0JdmFsdWVzWzFdID0gSW50NjRHZXREYXR1bShzdGF0cy0+bnVt ZGV0YWNoKTsKLQl2YWx1ZXNbMl0gPSBJbnQ2NEdldERhdHVtKHN0YXRzLT5udW1ydW4pOwotCXZh bHVlc1szXSA9IEludDY0R2V0RGF0dW0oc3RhdHMtPm51bWNhY2hlZCk7Ci0JdmFsdWVzWzRdID0g SW50NjRHZXREYXR1bShzdGF0cy0+bnVtbG9hZGVkKTsKLQludWxsc1swXSA9IGZhbHNlOwotCW51 bGxzWzFdID0gZmFsc2U7Ci0JbnVsbHNbMl0gPSBmYWxzZTsKLQludWxsc1szXSA9IGZhbHNlOwot CW51bGxzWzRdID0gZmFsc2U7Ci0KLQkvKiBSZXR1cm5zIHRoZSByZWNvcmQgYXMgRGF0dW0gKi8K LQlQR19SRVRVUk5fREFUVU0oSGVhcFR1cGxlR2V0RGF0dW0oaGVhcF9mb3JtX3R1cGxlKHR1cGRl c2MsIHZhbHVlcywgbnVsbHMpKSk7Ci19CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2lu amVjdGlvbl9wb2ludHMvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9w b2ludHMvbWVzb24uYnVpbGQKaW5kZXggMWEyYWY4YTI2YzQuLjhkNmY2NjIwNDBkIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvbWVzb24uYnVpbGQKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL21lc29uLmJ1aWxkCkBAIC02LDggKzYs NiBAQCBlbmRpZgogCiBpbmplY3Rpb25fcG9pbnRzX3NvdXJjZXMgPSBmaWxlcygKICAgJ2luamVj dGlvbl9wb2ludHMuYycsCi0gICdpbmplY3Rpb25fc3RhdHMuYycsCi0gICdpbmplY3Rpb25fc3Rh dHNfZml4ZWQuYycsCiAgICdyZWdyZXNzX2luamVjdGlvbi5jJywKICkKIApAQCAtNTgsMTQgKzU2 LDQgQEAgdGVzdHMgKz0gewogICAgICMgU29tZSB0ZXN0cyB3YWl0IGZvciBhbGwgc25hcHNob3Rz LCBzbyBhdm9pZCBwYXJhbGxlbCBleGVjdXRpb24KICAgICAncnVubmluZ2NoZWNrLXBhcmFsbGVs JzogZmFsc2UsCiAgIH0sCi0gICd0YXAnOiB7Ci0gICAgJ2Vudic6IHsKLSAgICAgICdlbmFibGVf aW5qZWN0aW9uX3BvaW50cyc6IGdldF9vcHRpb24oJ2luamVjdGlvbl9wb2ludHMnKSA/ICd5ZXMn IDogJ25vJywKLSAgICB9LAotICAgICd0ZXN0cyc6IFsKLSAgICAgICd0LzAwMV9zdGF0cy5wbCcs Ci0gICAgXSwKLSAgICAjIFRoZSBpbmplY3Rpb24gcG9pbnRzIGFyZSBjbHVzdGVyLXdpZGUsIHNv IGRpc2FibGUgaW5zdGFsbGNoZWNrCi0gICAgJ3J1bm5pbmdjaGVjayc6IGZhbHNlLAotICB9LAog fQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL3QvMDAxX3N0 YXRzLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL3QvMDAxX3N0YXRzLnBs CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2FiNThkMGU5Yi4uMDAwMDAwMDAwMDAK LS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL3QvMDAxX3N0YXRzLnBsCisr KyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLQotIyBDb3B5cmlnaHQgKGMpIDIwMjQtMjAy NSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKLQotIyBUZXN0cyBmb3IgQ3Vz dG9tIEN1bXVsYXRpdmUgU3RhdGlzdGljcy4KLQotdXNlIHN0cmljdDsKLXVzZSB3YXJuaW5ncyBG QVRBTCA9PiAnYWxsJzsKLXVzZSBsb2NhbGU7Ci0KLXVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyOwotdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwotdXNlIFRlc3Q6Ok1vcmU7Ci0KLSMg VGVzdCBwZXJzaXN0ZW5jeSBvZiBzdGF0aXN0aWNzIGdlbmVyYXRlZCBmb3IgaW5qZWN0aW9uIHBv aW50cy4KLWlmICgkRU5We2VuYWJsZV9pbmplY3Rpb25fcG9pbnRzfSBuZSAneWVzJykKLXsKLQlw bGFuIHNraXBfYWxsID0+ICdJbmplY3Rpb24gcG9pbnRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBi dWlsZCc7Ci19Ci0KLSMgTm9kZSBpbml0aWFsaXphdGlvbgotbXkgJG5vZGUgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ21hc3RlcicpOwotJG5vZGUtPmluaXQ7Ci0kbm9kZS0+YXBw ZW5kX2NvbmYoCi0JJ3Bvc3RncmVzcWwuY29uZicsIHFxKAotc2hhcmVkX3ByZWxvYWRfbGlicmFy aWVzID0gJ2luamVjdGlvbl9wb2ludHMnCi1pbmplY3Rpb25fcG9pbnRzLnN0YXRzID0gdHJ1ZQot KSk7Ci0kbm9kZS0+c3RhcnQ7Ci0kbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUg RVhURU5TSU9OIGluamVjdGlvbl9wb2ludHM7Jyk7Ci0KLSMgVGhpcyBzaG91bGQgY291bnQgZm9y IHR3byBjYWxscy4KLSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGluamVj dGlvbl9wb2ludHNfYXR0YWNoKCdzdGF0cy1ub3RpY2UnLCAnbm90aWNlJyk7Iik7Ci0kbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19ydW4oJ3N0YXRz LW5vdGljZScpOyIpOwotJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGluamVj dGlvbl9wb2ludHNfcnVuKCdzdGF0cy1ub3RpY2UnKTsiKTsKLW15ICRudW1jYWxscyA9ICRub2Rl LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfc3RhdHNf bnVtY2FsbHMoJ3N0YXRzLW5vdGljZScpOyIpOwotaXMoJG51bWNhbGxzLCAnMicsICdudW1iZXIg b2Ygc3RhdHMgY2FsbHMnKTsKLW15ICRlbnRyeWNvdW50ID0KLSAgJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfc3RhdHNfY291bnQoKTsiKTsKLWlz KCRlbnRyeWNvdW50LCAnMScsICdudW1iZXIgb2YgZW50cmllcycpOwotbXkgJGZpeGVkc3RhdHMg PSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCAqIEZST00gaW5qZWN0aW9u X3BvaW50c19zdGF0c19maXhlZCgpOyIpOwotaXMoJGZpeGVkc3RhdHMsICcxfDB8MnwwfDAnLCAn Zml4ZWQgc3RhdHMgYWZ0ZXIgc29tZSBjYWxscycpOwotCi0jIExvYWRpbmcgYW5kIGNhY2hpbmcu Ci0kbm9kZS0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsICIKLVNFTEVDVCBpbmplY3Rpb25fcG9p bnRzX2xvYWQoJ3N0YXRzLW5vdGljZScpOwotU0VMRUNUIGluamVjdGlvbl9wb2ludHNfY2FjaGVk KCdzdGF0cy1ub3RpY2UnKTsKLSIpOwotJGZpeGVkc3RhdHMgPSAkbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCi0JIlNFTEVDVCAqIEZST00gaW5qZWN0aW9uX3BvaW50c19zdGF0c19maXhlZCgp OyIpOwotaXMoJGZpeGVkc3RhdHMsICcxfDB8MnwxfDEnLCAnZml4ZWQgc3RhdHMgYWZ0ZXIgbG9h ZGluZyBhbmQgY2FjaGluZycpOwotCi0jIFJlc3RhcnQgdGhlIG5vZGUgY2xlYW5seSwgc3RhdHMg c2hvdWxkIHN0aWxsIGJlIGFyb3VuZC4KLSRub2RlLT5yZXN0YXJ0OwotJG51bWNhbGxzID0gJG5v ZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19zdGF0 c19udW1jYWxscygnc3RhdHMtbm90aWNlJyk7Iik7Ci1pcygkbnVtY2FsbHMsICczJywgJ251bWJl ciBvZiBzdGF0cyBhZnRlciBjbGVhbiByZXN0YXJ0Jyk7Ci0kZW50cnljb3VudCA9Ci0gICRub2Rl LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3N0YXRzX2Nv dW50KCk7Iik7Ci1pcygkZW50cnljb3VudCwgJzEnLCAnbnVtYmVyIG9mIGVudHJpZXMgYWZ0ZXIg Y2xlYW4gcmVzdGFydCcpOwotJGZpeGVkc3RhdHMgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCi0JIlNFTEVDVCAqIEZST00gaW5qZWN0aW9uX3BvaW50c19zdGF0c19maXhlZCgpOyIpOwot aXMoJGZpeGVkc3RhdHMsICcxfDB8MnwxfDEnLCAnZml4ZWQgc3RhdHMgYWZ0ZXIgY2xlYW4gcmVz dGFydCcpOwotCi0jIE9uIGNyYXNoIHRoZSBzdGF0cyBhcmUgZ29uZS4KLSRub2RlLT5zdG9wKCdp bW1lZGlhdGUnKTsKLSRub2RlLT5zdGFydDsKLSRudW1jYWxscyA9ICRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKLQkiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfc3RhdHNfbnVtY2FsbHMoJ3N0 YXRzLW5vdGljZScpOyIpOwotaXMoJG51bWNhbGxzLCAnJywgJ251bWJlciBvZiBzdGF0cyBhZnRl ciBjcmFzaCcpOwotJGVudHJ5Y291bnQgPQotICAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19zdGF0c19jb3VudCgpOyIpOwotaXMoJGVudHJ5Y291 bnQsICcwJywgJ251bWJlciBvZiBlbnRyaWVzIGFmdGVyIGNyYXNoJyk7Ci0kZml4ZWRzdGF0cyA9 ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUICogRlJPTSBpbmplY3Rpb25f cG9pbnRzX3N0YXRzX2ZpeGVkKCk7Iik7Ci1pcygkZml4ZWRzdGF0cywgJzB8MHwwfDB8MCcsICdm aXhlZCBzdGF0cyBhZnRlciBjcmFzaCcpOwotCi0jIE9uIGRyb3AgYWxsIHN0YXRzIGFyZSBnb25l Ci0kbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRz X2F0dGFjaCgnc3RhdHMtbm90aWNlJywgJ25vdGljZScpOyIpOwotJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfcnVuKCdzdGF0cy1ub3RpY2UnKTsi KTsKLSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRz X3J1bignc3RhdHMtbm90aWNlJyk7Iik7Ci0kbnVtY2FsbHMgPSAkbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCi0JIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3N0YXRzX251bWNhbGxzKCdzdGF0 cy1ub3RpY2UnKTsiKTsKLWlzKCRudW1jYWxscywgJzInLCAnbnVtYmVyIG9mIHN0YXRzIGNhbGxz Jyk7Ci0kbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50 c19zdGF0c19kcm9wKCk7Iik7Ci0kbnVtY2FsbHMgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCi0JIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3N0YXRzX251bWNhbGxzKCdzdGF0cy1ub3Rp Y2UnKTsiKTsKLWlzKCRudW1jYWxscywgJycsICdubyBzdGF0cyBhZnRlciBkcm9wIHZpYSBTUUwg ZnVuY3Rpb24nKTsKLSRlbnRyeWNvdW50ID0KLSAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfc3RhdHNfY291bnQoKTsiKTsKLWlzKCRlbnRyeWNv dW50LCAnMCcsICdudW1iZXIgb2YgZW50cmllcyBhZnRlciBkcm9wIHZpYSBTUUwgZnVuY3Rpb24n KTsKLQotIyBTdG9wIHRoZSBzZXJ2ZXIsIGRpc2FibGUgdGhlIG1vZHVsZSwgdGhlbiByZXN0YXJ0 LiAgVGhlIHNlcnZlcgotIyBzaG91bGQgYmUgYWJsZSB0byBjb21lIHVwLgotJG5vZGUtPnN0b3A7 Ci0kbm9kZS0+YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdzaGFyZWRfcHJlbG9hZF9s aWJyYXJpZXMnLCAiJyciKTsKLSRub2RlLT5zdGFydDsKLQotZG9uZV90ZXN0aW5nKCk7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9t ZXNvbi5idWlsZAppbmRleCBjYzU3NDYxZTU5YS4uMjgwNmRiNDg1ZDMgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5i dWlsZApAQCAtMjEsNiArMjEsNyBAQCBzdWJkaXIoJ3Rlc3RfYml0bWFwc2V0JykKIHN1YmRpcign dGVzdF9ibG9vbWZpbHRlcicpCiBzdWJkaXIoJ3Rlc3RfY29weV9jYWxsYmFja3MnKQogc3ViZGly KCd0ZXN0X2N1c3RvbV9ybWdycycpCitzdWJkaXIoJ3Rlc3RfY3VzdG9tX3N0YXRzJykKIHN1YmRp cigndGVzdF9kZGxfZGVwYXJzZScpCiBzdWJkaXIoJ3Rlc3RfZHNhJykKIHN1YmRpcigndGVzdF9k c21fcmVnaXN0cnknKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9z dGF0cy8uZ2l0aWdub3JlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy8uZ2l0 aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZGNiM2ZmOTcy MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMv LmdpdGlnbm9yZQpAQCAtMCwwICsxLDQgQEAKKyMgR2VuZXJhdGVkIHN1YmRpcmVjdG9yaWVzCisv bG9nLworL3Jlc3VsdHMvCisvdG1wX2NoZWNrLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2N1c3RvbV9zdGF0cy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0 b21fc3RhdHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjViMDY1YTFjZDQyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1 c3RvbV9zdGF0cy9NYWtlZmlsZQpAQCAtMCwwICsxLDI3IEBACisjIHNyYy90ZXN0L21vZHVsZXMv dGVzdF9jdXN0b21fc3RhdHMvTWFrZWZpbGUKKworTU9EVUxFUyA9IHRlc3RfY3VzdG9tX3Zhcl9z dGF0cyB0ZXN0X2N1c3RvbV9maXhlZF9zdGF0cworCitFWFRFTlNJT04gPSB0ZXN0X2N1c3RvbV92 YXJfc3RhdHMgdGVzdF9jdXN0b21fZml4ZWRfc3RhdHMKKworT0JKUyA9IFwKKwkkKFdJTjMyUkVT KSBcCisJdGVzdF9jdXN0b21fdmFyX3N0YXRzLm8gXAorCXRlc3RfY3VzdG9tX2ZpeGVkX3N0YXRz Lm8KK1BHRklMRURFU0MgPSAidGVzdF9jdXN0b21fc3RhdHMgLSB0ZXN0IGNvZGUgZm9yIGN1c3Rv bSBzdGF0IGtpbmRzIgorCitEQVRBID0gdGVzdF9jdXN0b21fdmFyX3N0YXRzLS0xLjAuc3FsIFwK KyAgICAgICB0ZXN0X2N1c3RvbV9maXhlZF9zdGF0cy0tMS4wLnNxbAorCitUQVBfVEVTVFMgPSAx CisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVs bCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8u Li8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVk ZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL21lc29uLmJ1aWxkIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTczNDQ2N2UxNjkKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL21lc29uLmJ1aWxkCkBAIC0wLDAg KzEsNTUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorCit0ZXN0X2N1c3RvbV92YXJfc3RhdHNfc291cmNlcyA9IGZpbGVzKAorICAn dGVzdF9jdXN0b21fdmFyX3N0YXRzLmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93 cycKKyAgdGVzdF9jdXN0b21fdmFyX3N0YXRzX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNz KHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICd0ZXN0X2N1c3RvbV92 YXJfc3RhdHMnLAorICAgICctLUZJTEVERVNDJywgJ3Rlc3RfY3VzdG9tX3Zhcl9zdGF0cyAtIHRl c3QgY29kZSBmb3IgdmFyaWFibGUgY3VzdG9tIHN0YXQga2luZHMnLF0pCitlbmRpZgorCit0ZXN0 X2N1c3RvbV92YXJfc3RhdHMgPSBzaGFyZWRfbW9kdWxlKCd0ZXN0X2N1c3RvbV92YXJfc3RhdHMn LAorICB0ZXN0X2N1c3RvbV92YXJfc3RhdHNfc291cmNlcywKKyAga3dhcmdzOiBwZ190ZXN0X21v ZF9hcmdzLAorKQordGVzdF9pbnN0YWxsX2xpYnMgKz0gdGVzdF9jdXN0b21fdmFyX3N0YXRzCisK K3Rlc3RfaW5zdGFsbF9kYXRhICs9IGZpbGVzKAorICAndGVzdF9jdXN0b21fdmFyX3N0YXRzLmNv bnRyb2wnLAorICAndGVzdF9jdXN0b21fdmFyX3N0YXRzLS0xLjAuc3FsJywKKykKKwordGVzdF9j dXN0b21fZml4ZWRfc3RhdHNfc291cmNlcyA9IGZpbGVzKAorICAndGVzdF9jdXN0b21fZml4ZWRf c3RhdHMuYycsCispCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICB0ZXN0X2N1c3Rv bV9maXhlZF9zdGF0c19zb3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywg ZXh0cmFfYXJnczogWworICAgICctLU5BTUUnLCAndGVzdF9jdXN0b21fZml4ZWRfc3RhdHMnLAor ICAgICctLUZJTEVERVNDJywgJ3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzIC0gdGVzdCBjb2RlIGZv ciBmaXhlZCBjdXN0b20gc3RhdCBraW5kcycsXSkKK2VuZGlmCisKK3Rlc3RfY3VzdG9tX2ZpeGVk X3N0YXRzID0gc2hhcmVkX21vZHVsZSgndGVzdF9jdXN0b21fZml4ZWRfc3RhdHMnLAorICB0ZXN0 X2N1c3RvbV9maXhlZF9zdGF0c19zb3VyY2VzLAorICBrd2FyZ3M6IHBnX3Rlc3RfbW9kX2FyZ3Ms CispCit0ZXN0X2luc3RhbGxfbGlicyArPSB0ZXN0X2N1c3RvbV9maXhlZF9zdGF0cworCit0ZXN0 X2luc3RhbGxfZGF0YSArPSBmaWxlcygKKyAgJ3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmNvbnRy b2wnLAorICAndGVzdF9jdXN0b21fZml4ZWRfc3RhdHMtLTEuMC5zcWwnLAorKQorCit0ZXN0cyAr PSB7CisgICduYW1lJzogJ3Rlc3RfY3VzdG9tX3N0YXRzJywKKyAgJ3NkJzogbWVzb24uY3VycmVu dF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICd0 YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX2N1c3RvbV9zdGF0cy5wbCcsCisg ICAgXSwKKyAgICAncnVubmluZ2NoZWNrJzogZmFsc2UsCisgIH0sCit9CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3QvMDAxX2N1c3RvbV9zdGF0cy5wbCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdC8wMDFfY3VzdG9tX3N0YXRzLnBs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNGZjZWI3ZDI2NwotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdC8wMDFf Y3VzdG9tX3N0YXRzLnBsCkBAIC0wLDAgKzEsMTE1IEBACisjIENvcHlyaWdodCAoYykgMjAyMS0y MDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFRlc3QgY3VzdG9t IHN0YXRpc3RpY3MgZnVuY3Rpb25hbGl0eQorIworIyBUZXN0cyBib3RoIHZhcmlhYmxlLWFtb3Vu dCBhbmQgZml4ZWQtYW1vdW50IGN1c3RvbSBzdGF0aXN0aWNzOgorIyAtIENyZWF0aW9uLCB1cGRh dGVzLCBhbmQgcmVwb3J0aW5nCisjIC0gUGVyc2lzdGVuY2UgYWNyb3NzIGNsZWFuIHJlc3RhcnRz CisjIC0gTG9zcyBhZnRlciBjcmFzaCByZWNvdmVyeQorIyAtIFJlc2V0IGZ1bmN0aW9uYWxpdHkg Zm9yIGZpeGVkIHN0YXRzCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2Fs bCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRl c3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgRmlsZTo6Q29weTsKKworbXkgJG5vZGUg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ21haW4nKTsKKyRub2RlLT5pbml0Owor JG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCSJzaGFyZWRfcHJlbG9hZF9s aWJyYXJpZXMgPSAndGVzdF9jdXN0b21fdmFyX3N0YXRzLCB0ZXN0X2N1c3RvbV9maXhlZF9zdGF0 cyciKTsKKyRub2RlLT5zdGFydDsKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKENS RUFURSBFWFRFTlNJT04gdGVzdF9jdXN0b21fdmFyX3N0YXRzKSk7Ciskbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHEoQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2N1c3RvbV9maXhlZF9zdGF0cykp OworCisjIENyZWF0ZSB2YXJpYWJsZSBzdGF0aXN0aWNzIGVudHJpZXMKKyRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X2NyZWF0ZV9jdXN0b21fdmFyX3N0YXRzKCdl bnRyeTEnKSkpOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCBwZ3N0YXRf Y3JlYXRlX2N1c3RvbV92YXJfc3RhdHMoJ2VudHJ5MicpKSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsIHEoc2VsZWN0IHBnc3RhdF9jcmVhdGVfY3VzdG9tX3Zhcl9zdGF0cygnZW50cnkz JykpKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X2NyZWF0 ZV9jdXN0b21fdmFyX3N0YXRzKCdlbnRyeTQnKSkpOworCisjIFVwZGF0ZSBjb3VudGVyczogZW50 cnkxPTIsIGVudHJ5Mj0zLCBlbnRyeTM9MiwgZW50cnk0PTMsIGZpeGVkPTMKKyRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X3VwZGF0ZV9jdXN0b21fdmFyX3N0YXRz KCdlbnRyeTEnKSkpOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCBwZ3N0 YXRfdXBkYXRlX2N1c3RvbV92YXJfc3RhdHMoJ2VudHJ5MScpKSk7Ciskbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHEoc2VsZWN0IHBnc3RhdF91cGRhdGVfY3VzdG9tX3Zhcl9zdGF0cygnZW50 cnkyJykpKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X3Vw ZGF0ZV9jdXN0b21fdmFyX3N0YXRzKCdlbnRyeTInKSkpOworJG5vZGUtPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxKHNlbGVjdCBwZ3N0YXRfdXBkYXRlX2N1c3RvbV92YXJfc3RhdHMoJ2VudHJ5Micp KSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoc2VsZWN0IHBnc3RhdF91cGRhdGVf Y3VzdG9tX3Zhcl9zdGF0cygnZW50cnkzJykpKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgcShzZWxlY3QgcGdzdGF0X3VwZGF0ZV9jdXN0b21fdmFyX3N0YXRzKCdlbnRyeTMnKSkpOwor JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCBwZ3N0YXRfdXBkYXRlX2N1c3Rv bV92YXJfc3RhdHMoJ2VudHJ5NCcpKSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEo c2VsZWN0IHBnc3RhdF91cGRhdGVfY3VzdG9tX3Zhcl9zdGF0cygnZW50cnk0JykpKTsKKyRub2Rl LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X3VwZGF0ZV9jdXN0b21fdmFy X3N0YXRzKCdlbnRyeTQnKSkpOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVj dCBwZ3N0YXRfdXBkYXRlX2N1c3RvbV9maXhlZF9zdGF0cygpKSk7Ciskbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHEoc2VsZWN0IHBnc3RhdF91cGRhdGVfY3VzdG9tX2ZpeGVkX3N0YXRzKCkp KTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X3VwZGF0ZV9j dXN0b21fZml4ZWRfc3RhdHMoKSkpOworCisjIFRlc3QgdmFyaWFibGUgc3RhdGlzdGljcyByZXBv cnRpbmcKK215ICRyZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoc2VsZWN0 ICogZnJvbSBwZ3N0YXRfcmVwb3J0X2N1c3RvbV92YXJfc3RhdHMoJ2VudHJ5MScpKSk7Citpcygk cmVzdWx0LCAiZW50cnkxfDIiLCAidmFyIHN0YXRzIGVudHJ5MSByZXBvcnRzIGNvcnJlY3QgY2Fs bHMiKTsKKworJHJlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3Qg KiBmcm9tIHBnc3RhdF9yZXBvcnRfY3VzdG9tX3Zhcl9zdGF0cygnZW50cnkyJykpKTsKK2lzKCRy ZXN1bHQsICJlbnRyeTJ8MyIsICJ2YXIgc3RhdHMgZW50cnkyIHJlcG9ydHMgY29ycmVjdCBjYWxs cyIpOworCiskcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCAq IGZyb20gcGdzdGF0X3JlcG9ydF9jdXN0b21fdmFyX3N0YXRzKCdlbnRyeTMnKSkpOworaXMoJHJl c3VsdCwgImVudHJ5M3wyIiwgInZhciBzdGF0cyBlbnRyeTMgcmVwb3J0cyBjb3JyZWN0IGNhbGxz Iik7CisKKyRyZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoc2VsZWN0ICog ZnJvbSBwZ3N0YXRfcmVwb3J0X2N1c3RvbV92YXJfc3RhdHMoJ2VudHJ5NCcpKSk7CitpcygkcmVz dWx0LCAiZW50cnk0fDMiLCAidmFyIHN0YXRzIGVudHJ5NCByZXBvcnRzIGNvcnJlY3QgY2FsbHMi KTsKKworJHJlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgKiBm cm9tIHBnc3RhdF9yZXBvcnRfY3VzdG9tX2ZpeGVkX3N0YXRzKCkpKTsKK2lzKCRyZXN1bHQsICIz fCIsICJmaXhlZCBzdGF0cyByZXBvcnRzIGNvcnJlY3QgY2FsbHMiKTsKKworIyBUZXN0IHZhcmlh YmxlIHN0YXRpc3RpY3MgZHJvcCBmdW5jdGlvbmFsaXR5CiskcmVzdWx0ID0gJG5vZGUtPnNhZmVf cHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCAqIGZyb20gcGdzdGF0X2Ryb3BfY3VzdG9tX3Zhcl9z dGF0cygnZW50cnkzJykpKTsKKyRyZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHEoc2VsZWN0ICogZnJvbSBwZ3N0YXRfcmVwb3J0X2N1c3RvbV92YXJfc3RhdHMoJ2VudHJ5Mycp KSk7CitpcygkcmVzdWx0LCAiIiwgImVudHJ5MyBub3QgZm91bmQgYWZ0ZXIgZHJvcCIpOworCisk cmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCAqIGZyb20gcGdz dGF0X2Ryb3BfY3VzdG9tX3Zhcl9zdGF0cygnZW50cnk0JykpKTsKKyRyZXN1bHQgPSAkbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoc2VsZWN0ICogZnJvbSBwZ3N0YXRfcmVwb3J0X2N1c3Rv bV92YXJfc3RhdHMoJ2VudHJ5NCcpKSk7CitpcygkcmVzdWx0LCAiIiwgImVudHJ5NCBub3QgZm91 bmQgYWZ0ZXIgZHJvcCIpOworCisjIFRlc3QgcGVyc2lzdGVuY2UgYWNyb3NzIGNsZWFuIHJlc3Rh cnQKKyRub2RlLT5zdG9wKCk7Ciskbm9kZS0+c3RhcnQoKTsKKworJHJlc3VsdCA9ICRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgKiBmcm9tIHBnc3RhdF9yZXBvcnRfY3VzdG9t X3Zhcl9zdGF0cygnZW50cnkxJykpKTsKK2lzKCRyZXN1bHQsICJlbnRyeTF8MiIsICJ2YXIgc3Rh dHMgZW50cnkxIHBlcnNpc3RzIGFmdGVyIGNsZWFuIHJlc3RhcnQiKTsKKworJHJlc3VsdCA9ICRu b2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgKiBmcm9tIHBnc3RhdF9yZXBvcnRf Y3VzdG9tX3Zhcl9zdGF0cygnZW50cnkyJykpKTsKK2lzKCRyZXN1bHQsICJlbnRyeTJ8MyIsICJ2 YXIgc3RhdHMgZW50cnkyIHBlcnNpc3RzIGFmdGVyIGNsZWFuIHJlc3RhcnQiKTsKKworJHJlc3Vs dCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgKiBmcm9tIHBnc3RhdF9y ZXBvcnRfY3VzdG9tX2ZpeGVkX3N0YXRzKCkpKTsKK2lzKCRyZXN1bHQsICIzfCIsICJmaXhlZCBz dGF0cyBwZXJzaXN0cyBhZnRlciBjbGVhbiByZXN0YXJ0Iik7CisKKyMgVGVzdCBjcmFzaCByZWNv dmVyeSBiZWhhdmlvcgorJG5vZGUtPnN0b3AoJ2ltbWVkaWF0ZScpOworJG5vZGUtPnN0YXJ0Owor CiskcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCAqIGZyb20g cGdzdGF0X3JlcG9ydF9jdXN0b21fdmFyX3N0YXRzKCdlbnRyeTEnKSkpOworaXMoJHJlc3VsdCwg IiIsICJ2YXIgc3RhdHMgZW50cnkxIGxvc3QgYWZ0ZXIgY3Jhc2ggcmVjb3ZlcnkiKTsKKworJHJl c3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgKiBmcm9tIHBnc3Rh dF9yZXBvcnRfY3VzdG9tX3Zhcl9zdGF0cygnZW50cnkyJykpKTsKK2lzKCRyZXN1bHQsICIiLCAi dmFyIHN0YXRzIGVudHJ5MiBsb3N0IGFmdGVyIGNyYXNoIHJlY292ZXJ5Iik7CisKKyMgY3Jhc2gg cmVjb3Zlcnkgc2V0cyB0aGUgcmVzZXQgdGltZXN0YW1wCiskcmVzdWx0ID0gJG5vZGUtPnNhZmVf cHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCBudW1jYWxscyBmcm9tIHBnc3RhdF9yZXBvcnRfY3Vz dG9tX2ZpeGVkX3N0YXRzKCkgd2hlcmUgc3RhdHNfcmVzZXQgaXMgbm90IG51bGwpKTsKK2lzKCRy ZXN1bHQsICIwIiwgImZpeGVkIHN0YXRzIHJlc2V0IGFmdGVyIGNyYXNoIHJlY292ZXJ5Iik7CisK KyMgVGVzdCBmaXhlZCBzdGF0aXN0aWNzIHJlc2V0IGZ1bmN0aW9uYWxpdHkKKyRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X3VwZGF0ZV9jdXN0b21fZml4ZWRfc3Rh dHMoKSkpOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCBwZ3N0YXRfdXBk YXRlX2N1c3RvbV9maXhlZF9zdGF0cygpKSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHEoc2VsZWN0IHBnc3RhdF91cGRhdGVfY3VzdG9tX2ZpeGVkX3N0YXRzKCkpKTsKKworJHJlc3Vs dCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgbnVtY2FsbHMgZnJvbSBw Z3N0YXRfcmVwb3J0X2N1c3RvbV9maXhlZF9zdGF0cygpKSk7CitpcygkcmVzdWx0LCAiMyIsICJm aXhlZCBzdGF0cyBzaG93cyBjYWxscyBiZWZvcmUgbWFudWFsIHJlc2V0Iik7CisKKyRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X3Jlc2V0X2N1c3RvbV9maXhlZF9z dGF0cygpKSk7CisKKyRyZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoc2Vs ZWN0IG51bWNhbGxzIGZyb20gcGdzdGF0X3JlcG9ydF9jdXN0b21fZml4ZWRfc3RhdHMoKSB3aGVy ZSBzdGF0c19yZXNldCBpcyBub3QgbnVsbCkpOworaXMoJHJlc3VsdCwgIjAiLCAiZml4ZWQgc3Rh dHMgcmVzZXQgYWZ0ZXIgbWFudWFsIHJlc2V0Iik7CisKKyMgVGVzdCBjb21wbGV0ZWQgc3VjY2Vz c2Z1bGx5Citkb25lX3Rlc3RpbmcoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2Zp eGVkX3N0YXRzLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90 ZXN0X2N1c3RvbV9maXhlZF9zdGF0cy0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uZTRjMzk3NDkzOTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLS0xLjAuc3Fs CkBAIC0wLDAgKzEsMjAgQEAKKy8qIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMv dGVzdF9jdXN0b21fZml4ZWRfc3RhdHMtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2Ny aXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04K K1xlY2hvIFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2N1c3RvbV9maXhlZF9zdGF0cyIgdG8g bG9hZCB0aGlzIGZpbGUuIFxxdWl0CisKK0NSRUFURSBGVU5DVElPTiBwZ3N0YXRfdXBkYXRlX2N1 c3RvbV9maXhlZF9zdGF0cygpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAn cGdzdGF0X3VwZGF0ZV9jdXN0b21fZml4ZWRfc3RhdHMnCitMQU5HVUFHRSBDIFNUUklDVCBQQVJB TExFTCBVTlNBRkU7CisKK0NSRUFURSBGVU5DVElPTiBwZ3N0YXRfcmVwb3J0X2N1c3RvbV9maXhl ZF9zdGF0cyhPVVQgbnVtY2FsbHMgYmlnaW50LAorICAgIE9VVCBzdGF0c19yZXNldCB0aW1lc3Rh bXB0eikKK1JFVFVSTlMgcmVjb3JkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3Bnc3RhdF9yZXBv cnRfY3VzdG9tX2ZpeGVkX3N0YXRzJworTEFOR1VBR0UgQyBTVFJJQ1QgUEFSQUxMRUwgVU5TQUZF OworCitDUkVBVEUgRlVOQ1RJT04gcGdzdGF0X3Jlc2V0X2N1c3RvbV9maXhlZF9zdGF0cygpCitS RVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdzdGF0X3Jlc2V0X2N1c3RvbV9m aXhlZF9zdGF0cycKK0xBTkdVQUdFIEMgU1RSSUNUIFBBUkFMTEVMIFVOU0FGRTsKXCBObyBuZXds aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3Vz dG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmYwODIxYjQ4NDhhCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV9maXhlZF9zdGF0 cy5jCkBAIC0wLDAgKzEsMjI0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdGVzdF9j dXN0b21fZml4ZWRfc3RhdHMuYworICoJCVRlc3QgbW9kdWxlIGZvciBmaXhlZC1hbW91bnQgY3Vz dG9tIHN0YXRpc3RpY3MKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNSwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJCXNy Yy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fZml4ZWRfc3RhdHMu YworICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIK KworI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgi CisjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNs dWRlICJ1dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCIKKworUEdfTU9EVUxFX01BR0lDX0VYVCgKKwkJ CQkJLm5hbWUgPSAidGVzdF9jdXN0b21fZml4ZWRfc3RhdHMiLAorCQkJCQkudmVyc2lvbiA9IFBH X1ZFUlNJT04KKyk7CisKKy8qIEZpeGVkLWFtb3VudCBjdXN0b20gc3RhdGlzdGljcyBlbnRyeSAq LwordHlwZWRlZiBzdHJ1Y3QgUGdTdGF0X1N0YXRDdXN0b21GaXhlZEVudHJ5Cit7CisJUGdTdGF0 X0NvdW50ZXIgbnVtY2FsbHM7CS8qICMgb2YgdGltZXMgdXBkYXRlIGZ1bmN0aW9uIGNhbGxlZCAq LworCVRpbWVzdGFtcFR6IHN0YXRfcmVzZXRfdGltZXN0YW1wOworfQkJCVBnU3RhdF9TdGF0Q3Vz dG9tRml4ZWRFbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3QgUGdTdGF0U2hhcmVkX0N1c3RvbUZpeGVk RW50cnkKK3sKKwlMV0xvY2sJCWxvY2s7CQkJLyogcHJvdGVjdHMgY291bnRlcnMgKi8KKwl1aW50 MzIJCWNoYW5nZWNvdW50OwkvKiBmb3IgYXRvbWljIHJlYWRzICovCisJUGdTdGF0X1N0YXRDdXN0 b21GaXhlZEVudHJ5IHN0YXRzOwkvKiBjdXJyZW50IGNvdW50ZXJzICovCisJUGdTdGF0X1N0YXRD dXN0b21GaXhlZEVudHJ5IHJlc2V0X29mZnNldDsJLyogcmVzZXQgYmFzZWxpbmUgKi8KK30JCQlQ Z1N0YXRTaGFyZWRfQ3VzdG9tRml4ZWRFbnRyeTsKKworLyogQ2FsbGJhY2tzIGZvciBmaXhlZC1h bW91bnQgc3RhdGlzdGljcyAqLworc3RhdGljIHZvaWQgcGdzdGF0X2N1c3RvbV9maXhlZF9pbml0 X3NobWVtX2NiKHZvaWQgKnN0YXRzKTsKK3N0YXRpYyB2b2lkIHBnc3RhdF9jdXN0b21fZml4ZWRf cmVzZXRfYWxsX2NiKFRpbWVzdGFtcFR6IHRzKTsKK3N0YXRpYyB2b2lkIHBnc3RhdF9jdXN0b21f Zml4ZWRfc25hcHNob3RfY2Iodm9pZCk7CisKK3N0YXRpYyBjb25zdCBQZ1N0YXRfS2luZEluZm8g Y3VzdG9tX3N0YXRzID0geworCS5uYW1lID0gInRlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzIiwKKwku Zml4ZWRfYW1vdW50ID0gdHJ1ZSwJCS8qIGV4YWN0bHkgb25lIGVudHJ5ICovCisJLndyaXRlX3Rv X2ZpbGUgPSB0cnVlLAkJLyogcGVyc2lzdCB0byBzdGF0cyBmaWxlICovCisKKwkuc2hhcmVkX3Np emUgPSBzaXplb2YoUGdTdGF0X1N0YXRDdXN0b21GaXhlZEVudHJ5KSwKKwkuc2hhcmVkX2RhdGFf b2ZmID0gb2Zmc2V0b2YoUGdTdGF0U2hhcmVkX0N1c3RvbUZpeGVkRW50cnksIHN0YXRzKSwKKwku c2hhcmVkX2RhdGFfbGVuID0gc2l6ZW9mKCgoUGdTdGF0U2hhcmVkX0N1c3RvbUZpeGVkRW50cnkg KikgMCktPnN0YXRzKSwKKworCS5pbml0X3NobWVtX2NiID0gcGdzdGF0X2N1c3RvbV9maXhlZF9p bml0X3NobWVtX2NiLAorCS5yZXNldF9hbGxfY2IgPSBwZ3N0YXRfY3VzdG9tX2ZpeGVkX3Jlc2V0 X2FsbF9jYiwKKwkuc25hcHNob3RfY2IgPSBwZ3N0YXRfY3VzdG9tX2ZpeGVkX3NuYXBzaG90X2Ni LAorfTsKKworLyoKKyAqIEtpbmQgSUQgZm9yIHRlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLgorICov CisjZGVmaW5lIFBHU1RBVF9LSU5EX1RFU1RfQ1VTVE9NX0ZJWEVEX1NUQVRTIDI2CisKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqIE1vZHVsZSBpbml0aWFsaXphdGlvbgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisKK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisJLyogTXVzdCBiZSBsb2FkZWQg dmlhIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyAqLworCWlmICghcHJvY2Vzc19zaGFyZWRfcHJl bG9hZF9saWJyYXJpZXNfaW5fcHJvZ3Jlc3MpCisJCXJldHVybjsKKworCS8qIFJlZ2lzdGVyIGN1 c3RvbSBzdGF0aXN0aWNzIGtpbmQgKi8KKwlwZ3N0YXRfcmVnaXN0ZXJfa2luZChQR1NUQVRfS0lO RF9URVNUX0NVU1RPTV9GSVhFRF9TVEFUUywgJmN1c3RvbV9zdGF0cyk7Cit9CisKKy8qCisgKiBw Z3N0YXRfY3VzdG9tX2ZpeGVkX2luaXRfc2htZW1fY2IKKyAqCQlJbml0aWFsaXplIHNoYXJlZCBt ZW1vcnkgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkCitwZ3N0YXRfY3VzdG9tX2ZpeGVkX2lu aXRfc2htZW1fY2Iodm9pZCAqc3RhdHMpCit7CisJUGdTdGF0U2hhcmVkX0N1c3RvbUZpeGVkRW50 cnkgKnN0YXRzX3NobWVtID0KKwkJKFBnU3RhdFNoYXJlZF9DdXN0b21GaXhlZEVudHJ5ICopIHN0 YXRzOworCisJTFdMb2NrSW5pdGlhbGl6ZSgmc3RhdHNfc2htZW0tPmxvY2ssIExXVFJBTkNIRV9Q R1NUQVRTX0RBVEEpOworfQorCisvKgorICogcGdzdGF0X2N1c3RvbV9maXhlZF9yZXNldF9hbGxf Y2IKKyAqCQlSZXNldCB0aGUgZml4ZWQgc3RhdHMKKyAqLworc3RhdGljIHZvaWQKK3Bnc3RhdF9j dXN0b21fZml4ZWRfcmVzZXRfYWxsX2NiKFRpbWVzdGFtcFR6IHRzKQoreworCVBnU3RhdFNoYXJl ZF9DdXN0b21GaXhlZEVudHJ5ICpzdGF0c19zaG1lbSA9CisJCXBnc3RhdF9nZXRfY3VzdG9tX3No bWVtX2RhdGEoUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01fRklYRURfU1RBVFMpOworCisJLyogc2Vl IGV4cGxhbmF0aW9uIGFib3ZlIFBnU3RhdFNoYXJlZF9BcmNoaXZlciBmb3IgdGhlIHJlc2V0IHBy b3RvY29sICovCisJTFdMb2NrQWNxdWlyZSgmc3RhdHNfc2htZW0tPmxvY2ssIExXX0VYQ0xVU0lW RSk7CisJcGdzdGF0X2NvcHlfY2hhbmdlY291bnRlZF9zdGF0cygmc3RhdHNfc2htZW0tPnJlc2V0 X29mZnNldCwKKwkJCQkJCQkJCSZzdGF0c19zaG1lbS0+c3RhdHMsCisJCQkJCQkJCQlzaXplb2Yo c3RhdHNfc2htZW0tPnN0YXRzKSwKKwkJCQkJCQkJCSZzdGF0c19zaG1lbS0+Y2hhbmdlY291bnQp OworCXN0YXRzX3NobWVtLT5zdGF0cy5zdGF0X3Jlc2V0X3RpbWVzdGFtcCA9IHRzOworCUxXTG9j a1JlbGVhc2UoJnN0YXRzX3NobWVtLT5sb2NrKTsKK30KKworLyoKKyAqIHBnc3RhdF9jdXN0b21f Zml4ZWRfc25hcHNob3RfY2IKKyAqCQlDb3B5IGN1cnJlbnQgc3RhdHMgdG8gc25hcHNob3QgYXJl YQorICovCitzdGF0aWMgdm9pZAorcGdzdGF0X2N1c3RvbV9maXhlZF9zbmFwc2hvdF9jYih2b2lk KQoreworCVBnU3RhdFNoYXJlZF9DdXN0b21GaXhlZEVudHJ5ICpzdGF0c19zaG1lbSA9CisJCXBn c3RhdF9nZXRfY3VzdG9tX3NobWVtX2RhdGEoUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01fRklYRURf U1RBVFMpOworCVBnU3RhdF9TdGF0Q3VzdG9tRml4ZWRFbnRyeSAqc3RhdF9zbmFwID0KKwkJcGdz dGF0X2dldF9jdXN0b21fc25hcHNob3RfZGF0YShQR1NUQVRfS0lORF9URVNUX0NVU1RPTV9GSVhF RF9TVEFUUyk7CisJUGdTdGF0X1N0YXRDdXN0b21GaXhlZEVudHJ5ICpyZXNldF9vZmZzZXQgPSAm c3RhdHNfc2htZW0tPnJlc2V0X29mZnNldDsKKwlQZ1N0YXRfU3RhdEN1c3RvbUZpeGVkRW50cnkg cmVzZXQ7CisKKwlwZ3N0YXRfY29weV9jaGFuZ2Vjb3VudGVkX3N0YXRzKHN0YXRfc25hcCwKKwkJ CQkJCQkJCSZzdGF0c19zaG1lbS0+c3RhdHMsCisJCQkJCQkJCQlzaXplb2Yoc3RhdHNfc2htZW0t PnN0YXRzKSwKKwkJCQkJCQkJCSZzdGF0c19zaG1lbS0+Y2hhbmdlY291bnQpOworCisJTFdMb2Nr QWNxdWlyZSgmc3RhdHNfc2htZW0tPmxvY2ssIExXX1NIQVJFRCk7CisJbWVtY3B5KCZyZXNldCwg cmVzZXRfb2Zmc2V0LCBzaXplb2Yoc3RhdHNfc2htZW0tPnN0YXRzKSk7CisJTFdMb2NrUmVsZWFz ZSgmc3RhdHNfc2htZW0tPmxvY2spOworCisJLyogQXBwbHkgcmVzZXQgb2Zmc2V0cyAqLworI2Rl ZmluZSBGSVhFRF9DT01QKGZsZCkgc3RhdF9zbmFwLT5mbGQgLT0gcmVzZXQuZmxkOworCUZJWEVE X0NPTVAobnVtY2FsbHMpOworI3VuZGVmIEZJWEVEX0NPTVAKK30KKworLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisKKy8qCisgKiBwZ3N0YXRfdXBkYXRlX2N1c3RvbV9maXhlZF9zdGF0cworICoJCUluY3JlbWVu dCBjYWxsIGNvdW50ZXIKKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMShwZ3N0YXRfdXBkYXRlX2N1 c3RvbV9maXhlZF9zdGF0cyk7CitEYXR1bQorcGdzdGF0X3VwZGF0ZV9jdXN0b21fZml4ZWRfc3Rh dHMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlQZ1N0YXRTaGFyZWRfQ3VzdG9tRml4ZWRFbnRyeSAq c3RhdHNfc2htZW07CisKKwlzdGF0c19zaG1lbSA9IHBnc3RhdF9nZXRfY3VzdG9tX3NobWVtX2Rh dGEoUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01fRklYRURfU1RBVFMpOworCisJTFdMb2NrQWNxdWly ZSgmc3RhdHNfc2htZW0tPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwlwZ3N0YXRfYmVnaW5fY2hh bmdlY291bnRfd3JpdGUoJnN0YXRzX3NobWVtLT5jaGFuZ2Vjb3VudCk7CisJc3RhdHNfc2htZW0t PnN0YXRzLm51bWNhbGxzKys7CisJcGdzdGF0X2VuZF9jaGFuZ2Vjb3VudF93cml0ZSgmc3RhdHNf c2htZW0tPmNoYW5nZWNvdW50KTsKKworCUxXTG9ja1JlbGVhc2UoJnN0YXRzX3NobWVtLT5sb2Nr KTsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisKKy8qCisgKiBwZ3N0YXRfcmVzZXRfY3VzdG9t X2ZpeGVkX3N0YXRzCisgKgkJUmVzZXQgc3RhdGlzdGljcyBieSBjYWxsaW5nIHBnc3RhdCBzeXN0 ZW0KKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMShwZ3N0YXRfcmVzZXRfY3VzdG9tX2ZpeGVkX3N0 YXRzKTsKK0RhdHVtCitwZ3N0YXRfcmVzZXRfY3VzdG9tX2ZpeGVkX3N0YXRzKFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJcGdzdGF0X3Jlc2V0X29mX2tpbmQoUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01f RklYRURfU1RBVFMpOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIHBnc3RhdF9y ZXBvcnRfY3VzdG9tX2ZpeGVkX3N0YXRzCisgKgkJUmV0dXJuIGN1cnJlbnQgY291bnRlciB2YWx1 ZXMKKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMShwZ3N0YXRfcmVwb3J0X2N1c3RvbV9maXhlZF9z dGF0cyk7CitEYXR1bQorcGdzdGF0X3JlcG9ydF9jdXN0b21fZml4ZWRfc3RhdHMoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlUdXBsZURlc2MJdHVwZGVzYzsKKwlEYXR1bQkJdmFsdWVzWzJdID0gezB9 OworCWJvb2wJCW51bGxzWzJdID0ge2ZhbHNlfTsKKwlQZ1N0YXRfU3RhdEN1c3RvbUZpeGVkRW50 cnkgKnN0YXRzOworCisJLyogVGFrZSBzbmFwc2hvdCAoYXBwbGllcyByZXNldCBvZmZzZXRzKSAq LworCXBnc3RhdF9zbmFwc2hvdF9maXhlZChQR1NUQVRfS0lORF9URVNUX0NVU1RPTV9GSVhFRF9T VEFUUyk7CisJc3RhdHMgPSBwZ3N0YXRfZ2V0X2N1c3RvbV9zbmFwc2hvdF9kYXRhKFBHU1RBVF9L SU5EX1RFU1RfQ1VTVE9NX0ZJWEVEX1NUQVRTKTsKKworCS8qIEJ1aWxkIHJldHVybiB0dXBsZSAq LworCXR1cGRlc2MgPSBDcmVhdGVUZW1wbGF0ZVR1cGxlRGVzYygyKTsKKwlUdXBsZURlc2NJbml0 RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsICJudW1jYWxscyIsCisJCQkJCSAgIElOVDhP SUQsIC0xLCAwKTsKKwlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDIs ICJzdGF0c19yZXNldCIsCisJCQkJCSAgIFRJTUVTVEFNUFRaT0lELCAtMSwgMCk7CisJQmxlc3NU dXBsZURlc2ModHVwZGVzYyk7CisKKwl2YWx1ZXNbMF0gPSBJbnQ2NEdldERhdHVtKHN0YXRzLT5u dW1jYWxscyk7CisKKwkvKiBIYW5kbGUgdW5pbml0aWFsaXplZCB0aW1lc3RhbXAgKG5vIHJlc2V0 IHlldCkgKi8KKwlpZiAoc3RhdHMtPnN0YXRfcmVzZXRfdGltZXN0YW1wID09IDApCisJeworCQlu dWxsc1sxXSA9IHRydWU7CisJfQorCWVsc2UKKwl7CisJCXZhbHVlc1sxXSA9IFRpbWVzdGFtcFR6 R2V0RGF0dW0oc3RhdHMtPnN0YXRfcmVzZXRfdGltZXN0YW1wKTsKKwl9CisKKwkvKiBSZXR1cm4g YXMgdHVwbGUgKi8KKwlQR19SRVRVUk5fREFUVU0oSGVhcFR1cGxlR2V0RGF0dW0oaGVhcF9mb3Jt X3R1cGxlKHR1cGRlc2MsIHZhbHVlcywgbnVsbHMpKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmNvbnRy b2wgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVk X3N0YXRzLmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI5 NmUyYWExOGZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3Rv bV9zdGF0cy90ZXN0X2N1c3RvbV9maXhlZF9zdGF0cy5jb250cm9sCkBAIC0wLDAgKzEsNCBAQAor Y29tbWVudCA9ICdUZXN0IGNvZGUgZm9yIGZpeGVkIGN1c3RvbSBzdGF0IGtpbmRzJworZGVmYXVs dF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3Rlc3RfY3VzdG9t X2ZpeGVkX3N0YXRzJworcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX3Zhcl9zdGF0cy0tMS4wLnNxbCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fdmFyX3N0YXRz LS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NGFlMmJm NTY2NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3Rh dHMvdGVzdF9jdXN0b21fdmFyX3N0YXRzLS0xLjAuc3FsCkBAIC0wLDAgKzEsMjUgQEAKKy8qIHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fdmFyX3N0YXRzL3Rlc3RfY3VzdG9tX3Zhcl9zdGF0 cy0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3Fs LCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVBVEUgRVhU RU5TSU9OIHRlc3RfY3VzdG9tX3Zhcl9zdGF0cyIgdG8gbG9hZCB0aGlzIGZpbGUuIFxxdWl0CisK K0NSRUFURSBGVU5DVElPTiBwZ3N0YXRfY3JlYXRlX2N1c3RvbV92YXJfc3RhdHMoSU4gbmFtZSBU RVhUKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3Bnc3RhdF9jcmVhdGVf Y3VzdG9tX3Zhcl9zdGF0cycKK0xBTkdVQUdFIEMgU1RSSUNUIFBBUkFMTEVMIFVOU0FGRTsKKwor Q1JFQVRFIEZVTkNUSU9OIHBnc3RhdF91cGRhdGVfY3VzdG9tX3Zhcl9zdGF0cyhJTiBuYW1lIFRF WFQpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdzdGF0X3VwZGF0ZV9j dXN0b21fdmFyX3N0YXRzJworTEFOR1VBR0UgQyBTVFJJQ1QgUEFSQUxMRUwgVU5TQUZFOworCitD UkVBVEUgRlVOQ1RJT04gcGdzdGF0X2Ryb3BfY3VzdG9tX3Zhcl9zdGF0cyhJTiBuYW1lIFRFWFQp CitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdzdGF0X2Ryb3BfY3VzdG9t X3Zhcl9zdGF0cycKK0xBTkdVQUdFIEMgU1RSSUNUIFBBUkFMTEVMIFVOU0FGRTsKKworCitDUkVB VEUgRlVOQ1RJT04gcGdzdGF0X3JlcG9ydF9jdXN0b21fdmFyX3N0YXRzKElOT1VUIG5hbWUgVEVY VCwgT1VUIGNhbGxzIEJJR0lOVCkKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitBUyAnTU9EVUxFX1BB VEhOQU1FJywgJ3Bnc3RhdF9yZXBvcnRfY3VzdG9tX3Zhcl9zdGF0cycKK0xBTkdVQUdFIEMgU1RS SUNUIFBBUkFMTEVMIFVOU0FGRTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9j dXN0b21fc3RhdHMvdGVzdF9jdXN0b21fdmFyX3N0YXRzLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX3Zhcl9zdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42MzIwZWFmMmNhZQotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fdmFyX3N0YXRzLmMK QEAgLTAsMCArMSwzMDIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog dGVzdF9jdXN0b21fdmFyX3N0YXRzLmMKKyAqCQlUZXN0IG1vZHVsZSBmb3IgY3VzdG9tIFBvc3Rn cmVTUUwgdmFyaWFibGUtbnVtYmVyZWQgY3VzdG9tIHN0YXRpc3RpYyBraW5kcworICoKKyAqIENv cHlyaWdodCAoYykgMjAyNC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkJc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3Rv bV92YXJfc3RhdHMvdGVzdF9jdXN0b21fdmFyX3N0YXRzLmMKKyAqCisgKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJj b21tb24vaGFzaGZuLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgInV0aWxzL2J1 aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvcGdzdGF0X2ludGVybmFsLmgiCisKK1BHX01PRFVM RV9NQUdJQ19FWFQoCisJCQkJCS5uYW1lID0gInRlc3RfY3VzdG9tX3Zhcl9zdGF0cyIsCisJCQkJ CS52ZXJzaW9uID0gUEdfVkVSU0lPTgorKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTWFj cm9zIGFuZCBjb25zdGFudHMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogS2lu ZCBJRCBmb3IgdGVzdF9jdXN0b21fdmFyX3N0YXRzIHN0YXRpc3RpY3MuCisgKiBSZXVzZXMgdGhl IHNhbWUgSUQgYXMgaW5qZWN0aW9uIHBvaW50cyB0byBhdm9pZCByZXNlcnZpbmcgYSBuZXcga2lu ZCBJRC4KKyAqLworI2RlZmluZSBQR1NUQVRfS0lORF9URVNUX0NVU1RPTV9WQVJfU1RBVFMgMjUK KworLyoKKyAqIEhhc2ggc3RhdGlzdGljIG5hbWUgdG8gZ2VuZXJhdGUgZW50cnkgaW5kZXggZm9y IHBnc3RhdCBsb29rdXAuCisgKi8KKyNkZWZpbmUgUEdTVEFUX0NVU1RPTV9WQVJfU1RBVFNfSURY KG5hbWUpIGhhc2hfYnl0ZXNfZXh0ZW5kZWQoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbmFtZSwg c3RybGVuKG5hbWUpLCAwKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUeXBlIGRlZmluaXRp b25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogQmFja2VuZC1sb2NhbCBwZW5kaW5n IHN0YXRpc3RpY3MgYmVmb3JlIGZsdXNoIHRvIHNoYXJlZCBtZW1vcnkgKi8KK3R5cGVkZWYgc3Ry dWN0IFBnU3RhdF9TdGF0Q3VzdG9tRW50cnkKK3sKKwlQZ1N0YXRfQ291bnRlciBudW1jYWxsczsJ LyogdGltZXMgc3RhdGlzdGljIHdhcyBpbmNyZW1lbnRlZCAqLworfQkJCVBnU3RhdF9TdGF0Q3Vz dG9tRW50cnk7CisKKy8qIFNoYXJlZCBtZW1vcnkgc3RhdGlzdGljcyBlbnRyeSB2aXNpYmxlIHRv IGFsbCBiYWNrZW5kcyAqLwordHlwZWRlZiBzdHJ1Y3QgUGdTdGF0U2hhcmVkX0N1c3RvbUVudHJ5 Cit7CisJUGdTdGF0U2hhcmVkX0NvbW1vbiBoZWFkZXI7IC8qIHN0YW5kYXJkIHBnc3RhdCBlbnRy eSBoZWFkZXIgKi8KKwlQZ1N0YXRfU3RhdEN1c3RvbUVudHJ5IHN0YXRzOwkvKiBjdXN0b20gc3Rh dGlzdGljcyBkYXRhICovCit9CQkJUGdTdGF0U2hhcmVkX0N1c3RvbUVudHJ5OworCisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKworLyogRmx1c2ggY2FsbGJhY2s6IG1lcmdlIHBlbmRpbmcgc3RhdHMgaW50byBzaGFy ZWQgbWVtb3J5ICovCitzdGF0aWMgYm9vbCBwZ3N0YXRfY3VzdG9tX2VudHJ5X2ZsdXNoX2NiKFBn U3RhdF9FbnRyeVJlZiAqZW50cnlfcmVmLCBib29sIG5vd2FpdCk7CisKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqIEN1c3RvbSBraW5kIGNvbmZpZ3VyYXRpb24KKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworCitzdGF0aWMgY29uc3QgUGdTdGF0X0tpbmRJbmZvIGN1c3RvbV9zdGF0cyA9IHsKKwku bmFtZSA9ICJ0ZXN0X2N1c3RvbV92YXJfc3RhdHMiLAorCS5maXhlZF9hbW91bnQgPSBmYWxzZSwJ CS8qIHZhcmlhYmxlIG51bWJlciBvZiBlbnRyaWVzICovCisJLndyaXRlX3RvX2ZpbGUgPSB0cnVl LAkJLyogcGVyc2lzdCBhY3Jvc3MgcmVzdGFydHMgKi8KKwkudHJhY2tfZW50cnlfY291bnQgPSB0 cnVlLAkvKiBjb3VudCBhY3RpdmUgZW50cmllcyAqLworCS5hY2Nlc3NlZF9hY3Jvc3NfZGF0YWJh c2VzID0gdHJ1ZSwJLyogZ2xvYmFsIHN0YXRpc3RpY3MgKi8KKwkuc2hhcmVkX3NpemUgPSBzaXpl b2YoUGdTdGF0U2hhcmVkX0N1c3RvbUVudHJ5KSwKKwkuc2hhcmVkX2RhdGFfb2ZmID0gb2Zmc2V0 b2YoUGdTdGF0U2hhcmVkX0N1c3RvbUVudHJ5LCBzdGF0cyksCisJLnNoYXJlZF9kYXRhX2xlbiA9 IHNpemVvZigoKFBnU3RhdFNoYXJlZF9DdXN0b21FbnRyeSAqKSAwKS0+c3RhdHMpLAorCS5wZW5k aW5nX3NpemUgPSBzaXplb2YoUGdTdGF0X1N0YXRDdXN0b21FbnRyeSksCisJLmZsdXNoX3BlbmRp bmdfY2IgPSBwZ3N0YXRfY3VzdG9tX2VudHJ5X2ZsdXNoX2NiLAorfTsKKworLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICogTW9kdWxlIGluaXRpYWxpemF0aW9uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKwordm9pZAorX1BHX2luaXQodm9pZCkKK3sKKwkvKiBNdXN0IGJlIGxvYWRlZCB2aWEgc2hh cmVkX3ByZWxvYWRfbGlicmFyaWVzICovCisJaWYgKCFwcm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xp YnJhcmllc19pbl9wcm9ncmVzcykKKwkJcmV0dXJuOworCisJLyogUmVnaXN0ZXIgY3VzdG9tIHN0 YXRpc3RpY3Mga2luZCAqLworCXBnc3RhdF9yZWdpc3Rlcl9raW5kKFBHU1RBVF9LSU5EX1RFU1Rf Q1VTVE9NX1ZBUl9TVEFUUywgJmN1c3RvbV9zdGF0cyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqIFN0YXRpc3RpY3MgY2FsbGJhY2sgZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKworLyoKKyAqIHBnc3RhdF9jdXN0b21fZW50cnlfZmx1c2hfY2IKKyAqCQlNZXJnZSBw ZW5kaW5nIGJhY2tlbmQgc3RhdGlzdGljcyBpbnRvIHNoYXJlZCBtZW1vcnkKKyAqCisgKiBDYWxs ZWQgYnkgcGdzdGF0IGNvbGxlY3RvciB0byBmbHVzaCBhY2N1bXVsYXRlZCBsb2NhbCBzdGF0aXN0 aWNzCisgKiB0byBzaGFyZWQgbWVtb3J5IHdoZXJlIG90aGVyIGJhY2tlbmRzIGNhbiByZWFkIHRo ZW0uCisgKgorICogUmV0dXJucyBmYWxzZSBvbmx5IGlmIG5vd2FpdD10cnVlIGFuZCBsb2NrIGFj cXVpc2l0aW9uIGZhaWxzLgorICovCitzdGF0aWMgYm9vbAorcGdzdGF0X2N1c3RvbV9lbnRyeV9m bHVzaF9jYihQZ1N0YXRfRW50cnlSZWYgKmVudHJ5X3JlZiwgYm9vbCBub3dhaXQpCit7CisJUGdT dGF0X1N0YXRDdXN0b21FbnRyeSAqcGVuZGluZ19lbnRyeTsKKwlQZ1N0YXRTaGFyZWRfQ3VzdG9t RW50cnkgKnNoYXJlZF9lbnRyeTsKKworCXBlbmRpbmdfZW50cnkgPSAoUGdTdGF0X1N0YXRDdXN0 b21FbnRyeSAqKSBlbnRyeV9yZWYtPnBlbmRpbmc7CisJc2hhcmVkX2VudHJ5ID0gKFBnU3RhdFNo YXJlZF9DdXN0b21FbnRyeSAqKSBlbnRyeV9yZWYtPnNoYXJlZF9zdGF0czsKKworCWlmICghcGdz dGF0X2xvY2tfZW50cnkoZW50cnlfcmVmLCBub3dhaXQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkv KiBBZGQgcGVuZGluZyBjb3VudHMgdG8gc2hhcmVkIHRvdGFscyAqLworCXNoYXJlZF9lbnRyeS0+ c3RhdHMubnVtY2FsbHMgKz0gcGVuZGluZ19lbnRyeS0+bnVtY2FsbHM7CisKKwlwZ3N0YXRfdW5s b2NrX2VudHJ5KGVudHJ5X3JlZik7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICogSGVscGVyIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisK Ky8qCisgKiBwZ3N0YXRfZmV0Y2hfY3VzdG9tX2VudHJ5CisgKgkJTG9vayB1cCBjdXN0b20gc3Rh dGlzdGljIGJ5IG5hbWUKKyAqCisgKiBSZXR1cm5zIHN0YXRpc3RpY3MgZW50cnkgZnJvbSBzaGFy ZWQgbWVtb3J5LCBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqLworc3RhdGljIFBnU3RhdF9TdGF0 Q3VzdG9tRW50cnkgKgorcGdzdGF0X2ZldGNoX2N1c3RvbV9lbnRyeShjb25zdCBjaGFyICpzdGF0 X25hbWUpCit7CisJLyogRmV0Y2ggZW50cnkgYnkgaGFzaGVkIG5hbWUgKi8KKwlyZXR1cm4gKFBn U3RhdF9TdGF0Q3VzdG9tRW50cnkgKikgcGdzdGF0X2ZldGNoX2VudHJ5KFBHU1RBVF9LSU5EX1RF U1RfQ1VTVE9NX1ZBUl9TVEFUUywKKwkJCQkJCQkJCQkJCQkJIEludmFsaWRPaWQsCisJCQkJCQkJ CQkJCQkJCSBQR1NUQVRfQ1VTVE9NX1ZBUl9TVEFUU19JRFgoc3RhdF9uYW1lKSk7Cit9CisKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNRTC1jYWxsYWJsZSBmdW5jdGlvbnMKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworCisvKgorICogcGdzdGF0X2NyZWF0ZV9jdXN0b21fdmFyX3N0YXRzCisg KgkJQ3JlYXRlIG5ldyBjdXN0b20gc3RhdGlzdGljIGVudHJ5CisgKgorICogSW5pdGlhbGl6ZXMg YSB6ZXJvLXZhbHVlZCBzdGF0aXN0aWNzIGVudHJ5IGluIHNoYXJlZCBtZW1vcnkuCisgKiBWYWxp ZGF0ZXMgbmFtZSBsZW5ndGggYWdhaW5zdCBOQU1FREFUQUxFTiBsaW1pdC4KKyAqLworUEdfRlVO Q1RJT05fSU5GT19WMShwZ3N0YXRfY3JlYXRlX2N1c3RvbV92YXJfc3RhdHMpOworRGF0dW0KK3Bn c3RhdF9jcmVhdGVfY3VzdG9tX3Zhcl9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQoreworCVBnU3Rh dF9FbnRyeVJlZiAqZW50cnlfcmVmOworCVBnU3RhdFNoYXJlZF9DdXN0b21FbnRyeSAqc2hhcmVk X2VudHJ5OworCWNoYXIJICAgKnN0YXRfbmFtZSA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdf VEVYVF9QUCgwKSk7CisKKwkvKiBWYWxpZGF0ZSBuYW1lIGxlbmd0aCBmaXJzdCAqLworCWlmIChz dHJsZW4oc3RhdF9uYW1lKSA+PSBOQU1FREFUQUxFTikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX05BTUVfVE9PX0xPTkcpLAorCQkJCSBlcnJtc2coImN1c3RvbSBzdGF0 aXN0aWMgbmFtZSBcIiVzXCIgaXMgdG9vIGxvbmciLCBzdGF0X25hbWUpLAorCQkJCSBlcnJkZXRh aWwoIk5hbWUgbXVzdCBiZSBsZXNzIHRoYW4gJWQgY2hhcmFjdGVycy4iLCBOQU1FREFUQUxFTikp KTsKKworCS8qIENyZWF0ZSBvciBnZXQgZXhpc3RpbmcgZW50cnkgKi8KKwllbnRyeV9yZWYgPSBw Z3N0YXRfZ2V0X2VudHJ5X3JlZl9sb2NrZWQoUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01fVkFSX1NU QVRTLCBJbnZhbGlkT2lkLAorCQkJCQkJCQkJCQlQR1NUQVRfQ1VTVE9NX1ZBUl9TVEFUU19JRFgo c3RhdF9uYW1lKSwgdHJ1ZSk7CisKKwlpZiAoIWVudHJ5X3JlZikKKwkJUEdfUkVUVVJOX1ZPSUQo KTsKKworCXNoYXJlZF9lbnRyeSA9IChQZ1N0YXRTaGFyZWRfQ3VzdG9tRW50cnkgKikgZW50cnlf cmVmLT5zaGFyZWRfc3RhdHM7CisKKwkvKiBaZXJvLWluaXRpYWxpemUgc3RhdGlzdGljcyAqLwor CW1lbXNldCgmc2hhcmVkX2VudHJ5LT5zdGF0cywgMCwgc2l6ZW9mKHNoYXJlZF9lbnRyeS0+c3Rh dHMpKTsKKworCXBnc3RhdF91bmxvY2tfZW50cnkoZW50cnlfcmVmKTsKKworCVBHX1JFVFVSTl9W T0lEKCk7Cit9CisKKy8qCisgKiBwZ3N0YXRfdXBkYXRlX2N1c3RvbV92YXJfc3RhdHMKKyAqCQlJ bmNyZW1lbnQgY3VzdG9tIHN0YXRpc3RpYyBjb3VudGVyCisgKgorICogSW5jcmVtZW50cyBjYWxs IGNvdW50IGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5LiBDaGFuZ2VzIGFyZSBmbHVzaGVkCisgKiB0 byBzaGFyZWQgbWVtb3J5IGJ5IHRoZSBzdGF0aXN0aWNzIGNvbGxlY3Rvci4KKyAqLworUEdfRlVO Q1RJT05fSU5GT19WMShwZ3N0YXRfdXBkYXRlX2N1c3RvbV92YXJfc3RhdHMpOworRGF0dW0KK3Bn c3RhdF91cGRhdGVfY3VzdG9tX3Zhcl9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJ ICAgKnN0YXRfbmFtZSA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgwKSk7CisJ UGdTdGF0X0VudHJ5UmVmICplbnRyeV9yZWY7CisJUGdTdGF0X1N0YXRDdXN0b21FbnRyeSAqcGVu ZGluZ19lbnRyeTsKKworCS8qIEdldCBwZW5kaW5nIGVudHJ5IGluIGxvY2FsIG1lbW9yeSAqLwor CWVudHJ5X3JlZiA9IHBnc3RhdF9wcmVwX3BlbmRpbmdfZW50cnkoUEdTVEFUX0tJTkRfVEVTVF9D VVNUT01fVkFSX1NUQVRTLCBJbnZhbGlkT2lkLAorCQkJCQkJCQkJCSAgUEdTVEFUX0NVU1RPTV9W QVJfU1RBVFNfSURYKHN0YXRfbmFtZSksIE5VTEwpOworCisJcGVuZGluZ19lbnRyeSA9IChQZ1N0 YXRfU3RhdEN1c3RvbUVudHJ5ICopIGVudHJ5X3JlZi0+cGVuZGluZzsKKwlwZW5kaW5nX2VudHJ5 LT5udW1jYWxscysrOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIHBnc3RhdF9k cm9wX2N1c3RvbV92YXJfc3RhdHMKKyAqCQlSZW1vdmUgY3VzdG9tIHN0YXRpc3RpYyBlbnRyeQor ICoKKyAqIERyb3BzIHRoZSBuYW1lZCBzdGF0aXN0aWMgZnJvbSBzaGFyZWQgbWVtb3J5IGFuZCBy ZXF1ZXN0cworICogZ2FyYmFnZSBjb2xsZWN0aW9uIGlmIG5lZWRlZC4KKyAqLworUEdfRlVOQ1RJ T05fSU5GT19WMShwZ3N0YXRfZHJvcF9jdXN0b21fdmFyX3N0YXRzKTsKK0RhdHVtCitwZ3N0YXRf ZHJvcF9jdXN0b21fdmFyX3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkgICAqc3Rh dF9uYW1lID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKworCS8qIERy b3AgZW50cnkgYW5kIHJlcXVlc3QgR0MgaWYgdGhlIGVudHJ5IGNvdWxkIG5vdCBiZSBmcmVlZCAq LworCWlmICghcGdzdGF0X2Ryb3BfZW50cnkoUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01fVkFSX1NU QVRTLCBJbnZhbGlkT2lkLAorCQkJCQkJICAgUEdTVEFUX0NVU1RPTV9WQVJfU1RBVFNfSURYKHN0 YXRfbmFtZSkpKQorCQlwZ3N0YXRfcmVxdWVzdF9lbnRyeV9yZWZzX2djKCk7CisKKwlQR19SRVRV Uk5fVk9JRCgpOworfQorCisvKgorICogcGdzdGF0X3JlcG9ydF9jdXN0b21fdmFyX3N0YXRzCisg KgkJUmV0cmlldmUgY3VzdG9tIHN0YXRpc3RpYyB2YWx1ZXMKKyAqCisgKiBSZXR1cm5zIHNpbmds ZSByb3cgd2l0aCBzdGF0aXN0aWMgbmFtZSBhbmQgY2FsbCBjb3VudCBpZiB0aGUKKyAqIHN0YXRp c3RpYyBleGlzdHMsIG90aGVyd2lzZSByZXR1cm5zIG5vIHJvd3MuCisgKi8KK1BHX0ZVTkNUSU9O X0lORk9fVjEocGdzdGF0X3JlcG9ydF9jdXN0b21fdmFyX3N0YXRzKTsKK0RhdHVtCitwZ3N0YXRf cmVwb3J0X2N1c3RvbV92YXJfc3RhdHMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlGdW5jQ2FsbENv bnRleHQgKmZ1bmNjdHg7CisJY2hhcgkgICAqc3RhdF9uYW1lOworCVBnU3RhdF9TdGF0Q3VzdG9t RW50cnkgKnN0YXRfZW50cnk7CisKKwlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQorCXsKKwkJVHVw bGVEZXNjCXR1cGRlc2M7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCQkvKiBJbml0 aWFsaXplIFNSRiBjb250ZXh0ICovCisJCWZ1bmNjdHggPSBTUkZfRklSU1RDQUxMX0lOSVQoKTsK KwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxs X21lbW9yeV9jdHgpOworCisJCS8qIEdldCBjb21wb3NpdGUgcmV0dXJuIHR5cGUgKi8KKwkJaWYg KGdldF9jYWxsX3Jlc3VsdF90eXBlKGZjaW5mbywgTlVMTCwgJnR1cGRlc2MpICE9IFRZUEVGVU5D X0NPTVBPU0lURSkKKwkJCWVsb2coRVJST1IsICJwZ3N0YXRfcmVwb3J0X2N1c3RvbV92YXJfc3Rh dHM6IHJldHVybiB0eXBlIGlzIG5vdCBjb21wb3NpdGUiKTsKKworCQlmdW5jY3R4LT50dXBsZV9k ZXNjID0gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CisJCWZ1bmNjdHgtPm1heF9jYWxscyA9IDE7 IC8qIHNpbmdsZSByb3cgcmVzdWx0ICovCisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNv bnRleHQpOworCX0KKworCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCisJaWYgKGZ1 bmNjdHgtPmNhbGxfY250ciA8IGZ1bmNjdHgtPm1heF9jYWxscykKKwl7CisJCURhdHVtCQl2YWx1 ZXNbMl07CisJCWJvb2wJCW51bGxzWzJdID0ge2ZhbHNlLCBmYWxzZX07CisJCUhlYXBUdXBsZQl0 dXBsZTsKKworCQlzdGF0X25hbWUgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAo MCkpOworCQlzdGF0X2VudHJ5ID0gcGdzdGF0X2ZldGNoX2N1c3RvbV9lbnRyeShzdGF0X25hbWUp OworCisJCS8qIFJldHVybiByb3cgb25seSBpZiBlbnRyeSBleGlzdHMgKi8KKwkJaWYgKHN0YXRf ZW50cnkpCisJCXsKKwkJCXZhbHVlc1swXSA9IFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3RvX3Rl eHQoc3RhdF9uYW1lKSk7CisJCQl2YWx1ZXNbMV0gPSBJbnQ2NEdldERhdHVtKHN0YXRfZW50cnkt Pm51bWNhbGxzKTsKKworCQkJdHVwbGUgPSBoZWFwX2Zvcm1fdHVwbGUoZnVuY2N0eC0+dHVwbGVf ZGVzYywgdmFsdWVzLCBudWxscyk7CisJCQlTUkZfUkVUVVJOX05FWFQoZnVuY2N0eCwgSGVhcFR1 cGxlR2V0RGF0dW0odHVwbGUpKTsKKwkJfQorCX0KKworCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4 KTsKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVz dF9jdXN0b21fdmFyX3N0YXRzLmNvbnRyb2wgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9t X3N0YXRzL3Rlc3RfY3VzdG9tX3Zhcl9zdGF0cy5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi40M2EyNzgzZjk2NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fdmFyX3N0YXRzLmNvbnRy b2wKQEAgLTAsMCArMSw0IEBACitjb21tZW50ID0gJ1Rlc3QgY29kZSBmb3IgdmFyaWFibGUgY3Vz dG9tIHN0YXQga2luZHMnCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1l ID0gJyRsaWJkaXIvdGVzdF9jdXN0b21fdmFyX3N0YXRzJworcmVsb2NhdGFibGUgPSB0cnVlCi0t IAoyLjQzLjAKCg== --0000000000002036c406453e7995--