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 1wPptE-0014I6-2h for pgsql-hackers@arkaria.postgresql.org; Wed, 20 May 2026 22:59:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wPptB-008fa7-18 for pgsql-hackers@arkaria.postgresql.org; Wed, 20 May 2026 22:59:46 +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 1wPptA-008fZz-1X for pgsql-hackers@lists.postgresql.org; Wed, 20 May 2026 22:59:45 +0000 Received: from mail-ej1-x633.google.com ([2a00:1450:4864:20::633]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wPpt7-000000000jZ-3Qwu for pgsql-hackers@postgresql.org; Wed, 20 May 2026 22:59:44 +0000 Received: by mail-ej1-x633.google.com with SMTP id a640c23a62f3a-bd9a71b565aso473750866b.0 for ; Wed, 20 May 2026 15:59:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779317975; cv=none; d=google.com; s=arc-20240605; b=TVZbx7efWpjEKi4VICETxGD8nowaRzk6lC7zVB6C8PSwn+cAXGoLIPYmmeeE4am4KW q9oRy9gxY7KWFo8LGnM1ETfFenjGafTn/YdaQcMi5vEfB4Ev4lFvzVGgLUR5lzTZrjvc fQRvjXDikD4fgDl69J18iV6cRuiibFl0d3AiFlzsAE+a93rfXywqxLOJ1Wvv6/fHYGjR Jw2Auj8T96MoFcoFFep+ycs7jfxoURmwMufL48Bj432uNBiNf9AvNgHqi4j+WTil7UZ7 T7lC1RYgyLIuvTPfB7gi03b4g9LZDiu+O5Jkh57+C+Y36Jz4M1VTdVnTg8ODq/pgzFA3 uZow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=3a5dHyP+PfyaALVbdChltiNQEfJ2oxz5RUWJPLWkRhE=; fh=RfrkJab44jNT7RraF/sJO97r9/nkUL0AAgzmC7PBS2w=; b=Oa9X4OcJRUMiLdToDDfRY61RGhpmtfIcEFnsgdFJ0Q8NmwxauL2YDNa/zKbDxHqncK iX9C84Cna1LlbAWOAo/Q4WKcfXVQXHPWgSA+n/+V325nOI1i8rOYPsycvpyvn6fRlEJU irGTSsMqvN7FgYtuiyEPGxu1pEzkf9JA56hVhol8ohoy6UldWkU8dyx+ut21unvAuOGA hcW1m8Ux9+5B0l1ekUjQ3lRinqJgnQy8cfe44z14ve/e667myX8f1P7+URv19cgiK4DQ NwKIoipRXnj4xqGvu1CuT8Gxbw5kmwwIDanYM+ksFSqaCODYlyYPG1NN7r7TSu0BpmJB 0y0w==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779317975; x=1779922775; darn=postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=3a5dHyP+PfyaALVbdChltiNQEfJ2oxz5RUWJPLWkRhE=; b=Kxt80SmgpFc8OgKGWLhouCU10BZFwdpOfbQsPcff+Rg6q2Hb0lVFjvbSIKmje2eMvO Z6kfeA7tbeCsWnqwpGHkM8dibuM1cLVX4FI01wixQlek5IXHW2n0DWwh56ZxnzbtrLU0 ii+e/BZcnG8q8JvLgArR3frHcq/LFMB9UHl1qU+nWgEfzkE4CyiXnpsps0DNW2pXvXQj Qh/JAHIi8yGyxtDg482RgWJ5ktD0keCsK1LBfPRLHlTV1onPq/a+PH0URDv+NHkcWK/T 71dBV0i0nvlDL/afoYnB+tUz+x4Z6wKci0ARjcMk37u13pfhazIwWZlJ27i5AVfpszAT A4uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779317975; x=1779922775; h=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=3a5dHyP+PfyaALVbdChltiNQEfJ2oxz5RUWJPLWkRhE=; b=L04JvDYbH6pvFStimRzb59KaMZI1UGSoykKyOR//I7GS+hsHyvyMHo9Q5UQOSAMCvA H+/lxiVjh+nmhB+t74FZVvdyVpVWW+GvenICqnJ2KFYeGJr9PKYF0Qk4+cuANmRDghEw jzWgj+d5RSfRUktiukokuPKKvmOVF01TRtmJ/RDPXOFI157tERL65YHJQORL5G1C2m9w HXCJ2ByEiUMJE7isGjtnw/c4viPkUQSpvUmYlTKr98u+J0Jlkt26dMYtvyn8XlmAo0TZ sep2kwFpMKO5tYPpgeOUMsDIz+6CS8sLAthbth31ZiueMzTpSvdaLnJbwI+u0w8JR8OG wCDg== X-Gm-Message-State: AOJu0YxBSCxTMJWzsxBE5vEuME42gtgLaPtwuKhEd/11uJIg6nHIor9L pG7ZmfurPGFrnOU2Zq26G1qMcsA0Mqjk/Z/VSQzkFTzeX9lg51B2iB2vd/z5CAyCVBfpLS9Tqx6 MyiyydZD2neEfuAY+q8gxvzbVDtos/2YBDzTEKd8= X-Gm-Gg: Acq92OFO/UbaiVVoNmdkX49Sni+IbTMMdDgL//wbx7C/eW3vS57HH+7tydLKnlbVZxR sZ4LdfK9xyJa4P/zeGBgd4AmyM0aCmeHNJWDIQo5oLCKs9gIm6JYQ3qHG/3Y0VSTJ67uatRD9Jw 91G734AYrv3Y1qRiEuOFRQx+jTSrfbZfalMhrAAsHw5KptKQmmVQKa/66NTptAfouyExzrPoozU n8SVUX4MqOXLTb0/fnEAnmnP3UVwfiLPxF3S7zqyncUEZ1f0bf95plKt7713JHeiIZUV4e/aFGT Xmpn1UwmBgUxwGZKd875fjdJoHQnp+8UEn9V3AE= X-Received: by 2002:a17:907:28c5:b0:bd4:f82c:7a44 with SMTP id a640c23a62f3a-bdc16a38430mr5838966b.37.1779317974992; Wed, 20 May 2026 15:59:34 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Sami Imseih Date: Wed, 20 May 2026 17:59:23 -0500 X-Gm-Features: AVHnY4LCC7mkqAeYKpoig8__PercV1R4LzcDqfX4pd27sYkjJgQB4izccUtsgLQ Message-ID: Subject: Re: Improve pg_stat_statements scalability To: pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000d7d16a065247bff4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d7d16a065247bff4 Content-Type: text/plain; charset="UTF-8" There was a failure on FreeBSD [1]. The test uses debug_parallel_query=regress which forces parallel plans. What happens is the parallel worker calls pg_stat_statements() (marked PARALLEL SAFE), tries to flush pending stats, but the leader is the one that actually accumulated those stats. I fixed this by: 1. Setting max_parallel_workers_per_gather = 0 in pg_stat_statements.conf, and only enabling it during parallel.sql when we actually want to track a parallel query. 2. Bumping pg_s_s to version 1.14 and marking pg_stat_statements() and pg_stat_statements_reset() as PARALLEL RESTRICTED to ensure these functions only execute in the leader, which is the process that accumulates the pending stats. These could also be marked UNSAFE, but RESTRICTED seems better since it doesn't completely prevent parallel plans if these functions are used with other tables; although it's hard to imagine a real-world case where this would matter. This also means old versions would have this issue with debug_parallel_query, but I don't think we should change function definitions for older versions, in case a user downgrades pg_s_s versions. Maybe others have a different opinion? [1] https://cirrus-ci.com/task/5948422076760064 -- Sami --000000000000d7d16a065247bff4 Content-Type: application/octet-stream; name="v2-0004-pg_stat_statements-extend-pg_stat_statements_info.patch" Content-Disposition: attachment; filename="v2-0004-pg_stat_statements-extend-pg_stat_statements_info.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpenry1a0 RnJvbSAzMmU2OWUwN2FkNmVmM2YwZmM5YjFjODIwODE2MWRhMzE1NTI4MmIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEltc2VpaCA8c2FtaW1zZWloQGdtYWlsLmNvbT4KRGF0 ZTogVGh1LCAxNCBNYXkgMjAyNiAxMjozOToyMyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjIgNC80 XSBwZ19zdGF0X3N0YXRlbWVudHM6IGV4dGVuZCBwZ19zdGF0X3N0YXRlbWVudHNfaW5mbwogdmll dwoKQWRkIG5ldyBjb2x1bW5zIHRvIHRoZSBwZ19zdGF0X3N0YXRlbWVudHNfaW5mbyB2aWV3OgoK ICAtIHF1ZXJ5X3RleHRfbWVtb3J5X2J5dGVzOiB0b3RhbCBEU0EgbWVtb3J5IHVzZWQgZm9yIHF1 ZXJ5IHRleHRzCiAgLSBxdWVyeV90ZXh0X2ZpbGVfYnl0ZXM6IHNpemUgb2YgdGhlIGV4dGVybmFs IHF1ZXJ5IHRleHQgb3ZlcmZsb3cgZmlsZQogIC0gbnVtX2VudHJpZXM6IGN1cnJlbnQgbnVtYmVy IG9mIHRyYWNrZWQgc3RhdGVtZW50IGVudHJpZXMKICAtIGxhc3RfZXZpY3Rpb25fdGltZTogdGlt ZXN0YW1wIG9mIHRoZSBtb3N0IHJlY2VudCBldmljdGlvbiBjeWNsZQotLS0KIC4uLi9wZ19zdGF0 X3N0YXRlbWVudHMtLTEuMTItLTEuMTMuc3FsICAgICAgICB8IDIzICsrKysrKysrKysrKwogLi4u L3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYyAgIHwgMTcgKysrKysrKyst CiBkb2Mvc3JjL3NnbWwvcGdzdGF0c3RhdGVtZW50cy5zZ21sICAgICAgICAgICAgfCAzNiArKysr KysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDc1IGluc2VydGlvbnMoKyksIDEgZGVs ZXRpb24oLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0 X3N0YXRlbWVudHMtLTEuMTItLTEuMTMuc3FsIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMv cGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjEyLS0xLjEzLnNxbAppbmRleCAyZjBlYWYxNGVjMy4uN2Qx Y2JmY2M3MDEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRf c3RhdGVtZW50cy0tMS4xMi0tMS4xMy5zcWwKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVu dHMvcGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjEyLS0xLjEzLnNxbApAQCAtNzYsMyArNzYsMjYgQEAg Q1JFQVRFIFZJRVcgcGdfc3RhdF9zdGF0ZW1lbnRzIEFTCiAgIFNFTEVDVCAqIEZST00gcGdfc3Rh dF9zdGF0ZW1lbnRzKHRydWUpOwogCiBHUkFOVCBTRUxFQ1QgT04gcGdfc3RhdF9zdGF0ZW1lbnRz IFRPIFBVQkxJQzsKKworQUxURVIgRVhURU5TSU9OIHBnX3N0YXRfc3RhdGVtZW50cyBEUk9QIFZJ RVcgcGdfc3RhdF9zdGF0ZW1lbnRzX2luZm87CitBTFRFUiBFWFRFTlNJT04gcGdfc3RhdF9zdGF0 ZW1lbnRzIERST1AgRlVOQ1RJT04gcGdfc3RhdF9zdGF0ZW1lbnRzX2luZm8oKTsKKworRFJPUCBW SUVXIHBnX3N0YXRfc3RhdGVtZW50c19pbmZvOworRFJPUCBGVU5DVElPTiBwZ19zdGF0X3N0YXRl bWVudHNfaW5mbygpOworCitDUkVBVEUgRlVOQ1RJT04gcGdfc3RhdF9zdGF0ZW1lbnRzX2luZm8o CisgICAgT1VUIGRlYWxsb2MgYmlnaW50LAorICAgIE9VVCBzdGF0c19yZXNldCB0aW1lc3RhbXAg d2l0aCB0aW1lIHpvbmUsCisgICAgT1VUIHF1ZXJ5X3RleHRfbWVtb3J5X2J5dGVzIGJpZ2ludCwK KyAgICBPVVQgcXVlcnlfdGV4dF9maWxlX2J5dGVzIGJpZ2ludCwKKyAgICBPVVQgbnVtX2VudHJp ZXMgYmlnaW50LAorICAgIE9VVCBsYXN0X2V2aWN0aW9uX3RpbWUgdGltZXN0YW1wIHdpdGggdGlt ZSB6b25lCispCitSRVRVUk5TIHJlY29yZAorQVMgJ01PRFVMRV9QQVRITkFNRScKK0xBTkdVQUdF IEMgU1RSSUNUIFZPTEFUSUxFIFBBUkFMTEVMIFNBRkU7CisKK0NSRUFURSBWSUVXIHBnX3N0YXRf c3RhdGVtZW50c19pbmZvIEFTCisgIFNFTEVDVCAqIEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzX2lu Zm8oKTsKKworR1JBTlQgU0VMRUNUIE9OIHBnX3N0YXRfc3RhdGVtZW50c19pbmZvIFRPIFBVQkxJ QzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVt ZW50cy5jIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMK aW5kZXggYWY3NjM3YjI1YjkuLjZjOGRkNjk1ZWQ2IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3N0 YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYworKysgYi9jb250cmliL3BnX3N0YXRf c3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYwpAQCAtMTk3Niw3ICsxOTc2LDcgQEAgcGdf c3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogfQogCiAv KiBOdW1iZXIgb2Ygb3V0cHV0IGFyZ3VtZW50cyAoY29sdW1ucykgZm9yIHBnX3N0YXRfc3RhdGVt ZW50c19pbmZvICovCi0jZGVmaW5lIFBHX1NUQVRfU1RBVEVNRU5UU19JTkZPX0NPTFMJMgorI2Rl ZmluZSBQR19TVEFUX1NUQVRFTUVOVFNfSU5GT19DT0xTCTYKIAogLyoKICAqIFJldHVybiBzdGF0 aXN0aWNzIG9mIHBnX3N0YXRfc3RhdGVtZW50cy4KQEAgLTIwMDYsNiArMjAwNiwyMSBAQCBwZ19z dGF0X3N0YXRlbWVudHNfaW5mbyhQR19GVU5DVElPTl9BUkdTKQogCiAJdmFsdWVzW2krK10gPSBJ bnQ2NEdldERhdHVtKHN0YXRzLmRlYWxsb2MpOwogCXZhbHVlc1tpKytdID0gVGltZXN0YW1wVHpH ZXREYXR1bShzdGF0cy5zdGF0c19yZXNldCk7CisJLyogcXVlcnlfdGV4dF9tZW1vcnlfYnl0ZXM6 IERTQSBtZW1vcnkgdXNlZCBmb3IgcXVlcnkgdGV4dHMgKi8KKwlwZ3NzX3F0ZXh0X2RzYV9hdHRh Y2goKTsKKwlpZiAocGdzc19xdGV4dF9kc2EpCisJCXZhbHVlc1tpKytdID0gSW50NjRHZXREYXR1 bShkc2FfZ2V0X3RvdGFsX3NpemUocGdzc19xdGV4dF9kc2EpKTsKKwllbHNlCisJCW51bGxzW2kr K10gPSB0cnVlOworCS8qIHF1ZXJ5X3RleHRfZmlsZV9ieXRlczogb3ZlcmZsb3cgZmlsZSBzaXpl ICovCisJdmFsdWVzW2krK10gPSBJbnQ2NEdldERhdHVtKHBnc3MtPmV4dGVudCk7CisJLyogbnVt X2VudHJpZXM6IGN1cnJlbnQgZW50cnkgY291bnQgKi8KKwl2YWx1ZXNbaSsrXSA9IEludDY0R2V0 RGF0dW0ocGdzdGF0X2dldF9lbnRyeV9jb3VudChQR1NUQVRfS0lORF9QR1NTKSk7CisJLyogbGFz dCBldmljdGlvbiB0aW1lICovCisJaWYgKHBnc3MtPmxhc3RfZXZpY3Rpb25fdGltZSAhPSAwKQor CQl2YWx1ZXNbaSsrXSA9IFRpbWVzdGFtcFR6R2V0RGF0dW0ocGdzcy0+bGFzdF9ldmljdGlvbl90 aW1lKTsKKwllbHNlCisJCW51bGxzW2krK10gPSB0cnVlOwogCiAJUEdfUkVUVVJOX0RBVFVNKEhl YXBUdXBsZUdldERhdHVtKGhlYXBfZm9ybV90dXBsZSh0dXBkZXNjLCB2YWx1ZXMsIG51bGxzKSkp OwogfQpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3Bnc3RhdHN0YXRlbWVudHMuc2dtbCBiL2Rv Yy9zcmMvc2dtbC9wZ3N0YXRzdGF0ZW1lbnRzLnNnbWwKaW5kZXggMGY0YWIzNDk2NWIuLjIyMjEy MTI1NzRkIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcGdzdGF0c3RhdGVtZW50cy5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9wZ3N0YXRzdGF0ZW1lbnRzLnNnbWwKQEAgLTgwOSw2ICs4MDksNDIg QEAgY2FsbHMgfCAyCiAgICAgICAgPHN0cnVjdG5hbWU+cGdfc3RhdF9zdGF0ZW1lbnRzPC9zdHJ1 Y3RuYW1lPiB2aWV3IHdlcmUgbGFzdCByZXNldC4KICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAg ICA8L3Jvdz4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2Vu dHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVjdGZpZWxk PnF1ZXJ5X3RleHRfbWVtb3J5X2J5dGVzPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+YmlnaW50PC90eXBl PgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVG90YWwgYnl0ZXMgb2YgZHlu YW1pYyBzaGFyZWQgbWVtb3J5IHVzZWQgZm9yIHF1ZXJ5IHRleHQgc3RvcmFnZS4KKyAgICAgIDwv cGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xl PSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+Cisg ICAgICAgPHN0cnVjdGZpZWxkPnF1ZXJ5X3RleHRfZmlsZV9ieXRlczwvc3RydWN0ZmllbGQ+IDx0 eXBlPmJpZ2ludDwvdHlwZT4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIFNp emUgaW4gYnl0ZXMgb2YgdGhlIGV4dGVybmFsIHF1ZXJ5IHRleHQgZmlsZSB1c2VkIGZvciBvdmVy ZmxvdworICAgICAgIHN0b3JhZ2UuCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+ CisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBh cmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5udW1fZW50 cmllczwvc3RydWN0ZmllbGQ+IDx0eXBlPmJpZ2ludDwvdHlwZT4KKyAgICAgIDwvcGFyYT4KKyAg ICAgIDxwYXJhPgorICAgICAgIEN1cnJlbnQgbnVtYmVyIG9mIGVudHJpZXMgdHJhY2tlZCBieQor ICAgICAgIDxzdHJ1Y3RuYW1lPnBnX3N0YXRfc3RhdGVtZW50czwvc3RydWN0bmFtZT4uCisgICAg ICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnkg cm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24i PgorICAgICAgIDxzdHJ1Y3RmaWVsZD5sYXN0X2V2aWN0aW9uX3RpbWU8L3N0cnVjdGZpZWxkPiA8 dHlwZT50aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmU8L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAg ICA8cGFyYT4KKyAgICAgICBUaW1lIG9mIHRoZSBtb3N0IHJlY2VudCBlbnRyeSBldmljdGlvbiBj eWNsZSwgb3IgbnVsbCBpZiBubyBldmljdGlvbgorICAgICAgIGhhcyBvY2N1cnJlZCBzaW5jZSBz ZXJ2ZXIgc3RhcnQuCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKICAgICA8 L3Rib2R5PgogICAgPC90Z3JvdXA+CiAgIDwvdGFibGU+Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0x NTUpCgo= --000000000000d7d16a065247bff4 Content-Type: application/octet-stream; name="v2-0001-pgstat-Introduce-pg_stat_report_anytime-for-mid-t.patch" Content-Disposition: attachment; filename="v2-0001-pgstat-Introduce-pg_stat_report_anytime-for-mid-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpenry203 RnJvbSBkZTA0ZTE1MWFiZmYwN2RhYjM3OGQ1YTNkMDA2ZTc2ZWE1NjM1OWY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEltc2VpaCA8c2FtaW1zZWloQGdtYWlsLmNvbT4KRGF0 ZTogU3VuLCAxMCBNYXkgMjAyNiAwNzowNjowNCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjIgMS80 XSBwZ3N0YXQ6IEludHJvZHVjZSBwZ19zdGF0X3JlcG9ydF9hbnl0aW1lKCkgZm9yCiBtaWQtdHJh bnNhY3Rpb24gc3RhdHMgZmx1c2gKCkFkZCBhbiBBUEkgdG8gZmx1c2ggcGVuZGluZyBzdGF0cyB0 aGF0IGFyZSBzYWZlIHRvIHJlcG9ydCBpbnNpZGUgYQp0cmFuc2FjdGlvbiB3aXRob3V0IHdhaXRp bmcgZm9yIHRyYW5zYWN0aW9uIGVuZC4gUmVsYXRpb24gd3JpdGUKY291bnRlcnMgKHR1cGxlcyBp bnNlcnRlZCwgdXBkYXRlZCwgZGVsZXRlZCkgZm9yIHRhYmxlcyBtb2RpZmllZCBpbgp0aGUgY3Vy cmVudCB0cmFuc2FjdGlvbiBhcmUgZXhjbHVkZWQsIHNpbmNlIHRoZWlyIGZpbmFsIHZhbHVlcyBk ZXBlbmQKb24gY29tbWl0L2Fib3J0IG91dGNvbWUuCgpUaGUgU1FMIGZ1bmN0aW9uIHBnX3N0YXRf cmVwb3J0X2FueXRpbWUocGlkKSBmbHVzaGVzIHRoZSB0YXJnZXQKYmFja2VuZCdzIHBlbmRpbmcg c3RhdHM6IGlmIHRoZSBQSUQgbWF0Y2hlcyB0aGUgY2FsbGVyJ3Mgb3duIGJhY2tlbmQKaXQgZmx1 c2hlcyBpbW1lZGlhdGVseSwgb3RoZXJ3aXNlIGl0IHNpZ25hbHMgdGhlIHRhcmdldCB0byBmbHVz aCBhdAppdHMgbmV4dCBDSEVDS19GT1JfSU5URVJSVVBUUyAoZm9yIHJlZ3VsYXIgYmFja2VuZHMp IG9yIG1haW4tbG9vcAppdGVyYXRpb24gKGZvciBhdXhpbGlhcnkgcHJvY2Vzc2VzKS4gVGhlIEMg ZnVuY3Rpb24KcGdzdGF0X3JlcG9ydF9hbnl0aW1lX3N0YXQoKSBmbHVzaGVzIHBlbmRpbmcgc3Rh dHMgaW4gdGhlIGNhbGxpbmcKYmFja2VuZCBvbmx5LgotLS0KIGRvYy9zcmMvc2dtbC9tb25pdG9y aW5nLnNnbWwgICAgICAgICAgICAgICAgIHwgIDI2ICsrKysKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvYXV0b3ZhY3V1bS5jICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv Y2hlY2twb2ludGVyLmMgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvaW50 ZXJydXB0LmMgICAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNo LmMgICAgICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5j ICAgICAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXpl ci5jICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyAg ICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgICAgICAgICAg ICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jICAgICAgICAg IHwgIDYxICsrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9yZWxh dGlvbi5jIHwgIDk3ICsrKysrKysrKy0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3Rh dGZ1bmNzLmMgICAgICAgICAgfCAgNDAgKysrKysrCiBzcmMvYmFja2VuZC91dGlscy9pbml0L2ds b2JhbHMuYyAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0ICAgICAgICAgICAgICB8ICAgNiArCiBzcmMvaW5jbHVkZS9taXNjYWRtaW4uaCAgICAgICAg ICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9wZ3N0YXQuaCAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCAgICAg ICAgICAgICB8ICAgMiArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzLm91dCAgICAg ICAgICB8IDEyMiArKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0 cy5zcWwgICAgICAgICAgICAgICB8ICA4MSArKysrKysrKysrKysKIDE5IGZpbGVzIGNoYW5nZWQs IDQzMSBpbnNlcnRpb25zKCspLCAzNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3Jj L3NnbWwvbW9uaXRvcmluZy5zZ21sIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbAppbmRl eCAwOGQ1YjgyNDU1Mi4uYmI2YzkyOGUzZTcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9tb25p dG9yaW5nLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbApAQCAtNTYwNyw2 ICs1NjA3LDMyIEBAIGRlc2NyaXB0aW9uIHwgV2FpdGluZyBmb3IgYSBuZXdseSBpbml0aWFsaXpl ZCBXQUwgZmlsZSB0byByZWFjaCBkdXJhYmxlIHN0b3JhZ2UKICAgICAgICA8L3BhcmE+PC9lbnRy eT4KICAgICAgIDwvcm93PgogCisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5j X3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRl eHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5wZ19zdGF0X3JlcG9ydF9hbnl0aW1lPC9wcmltYXJ5 PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX3N0YXRfcmVwb3J0 X2FueXRpbWU8L2Z1bmN0aW9uPiAoIDx0eXBlPmludGVnZXI8L3R5cGU+ICkKKyAgICAgICAgPHJl dHVybnZhbHVlPmJvb2xlYW48L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8 cGFyYT4KKyAgICAgICAgRm9yY2UgZmx1c2ggb2YgcGVuZGluZyBzdGF0aXN0aWNzIHRvIHNoYXJl ZCBtZW1vcnkgZm9yIHRoZSBiYWNrZW5kCisgICAgICAgIHdpdGggdGhlIHNwZWNpZmllZCBwcm9j ZXNzIElELiBVbmxpa2Ugbm9ybWFsIHN0YXRpc3RpY3MgcmVwb3J0aW5nLAorICAgICAgICB0aGlz IGNhbiBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSB0cmFuc2FjdGlvbi4gRm9yIHJlbGF0aW9ucyBt b2RpZmllZAorICAgICAgICBieSA8Y29tbWFuZD5JTlNFUlQ8L2NvbW1hbmQ+LCA8Y29tbWFuZD5V UERBVEU8L2NvbW1hbmQ+LCBvcgorICAgICAgICA8Y29tbWFuZD5ERUxFVEU8L2NvbW1hbmQ+IGlu IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLCBvbmx5IHJlYWQKKyAgICAgICAgY291bnRlcnMgKHNj YW5zLCB0dXBsZXMgZmV0Y2hlZCwgYmxvY2tzIGhpdCkgYXJlIGZsdXNoZWQKKyAgICAgICAgaW1t ZWRpYXRlbHk7IHdyaXRlIGNvdW50ZXJzICh0dXBsZXMgaW5zZXJ0ZWQsIHVwZGF0ZWQsIGRlbGV0 ZWQpCisgICAgICAgIGFyZSBkZWZlcnJlZCB1bnRpbCB0aGUgdHJhbnNhY3Rpb24gZW5kcy4KKyAg ICAgICAgUmV0dXJucyA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPiBpZiB0aGUgZmx1c2ggd2FzIHN1 Y2Nlc3NmdWxseQorICAgICAgICB0cmlnZ2VyZWQsIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPiBv dGhlcndpc2UuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGZ1 bmN0aW9uIGlzIHJlc3RyaWN0ZWQgdG8gc3VwZXJ1c2VycyBieSBkZWZhdWx0LCBidXQgb3RoZXIg dXNlcnMKKyAgICAgICAgY2FuIGJlIGdyYW50ZWQgRVhFQ1VURSB0byBydW4gdGhlIGZ1bmN0aW9u LgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgPC9yb3c+CisKICAgICAgIDxyb3c+CiAg ICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2ln bmF0dXJlIj4KICAgICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvYXV0b3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVt LmMKaW5kZXggYTVhOGRiMmZmODguLmM1ZmRkZjc1ZGFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1 dG92YWN1dW0uYwpAQCAtODI1LDYgKzgyNSw5IEBAIFByb2Nlc3NBdXRvVmFjTGF1bmNoZXJJbnRl cnJ1cHRzKHZvaWQpCiAJaWYgKExvZ01lbW9yeUNvbnRleHRQZW5kaW5nKQogCQlQcm9jZXNzTG9n TWVtb3J5Q29udGV4dEludGVycnVwdCgpOwogCisJaWYgKFJlcG9ydEFueXRpbWVTdGF0c1BlbmRp bmcpCisJCVByb2Nlc3NSZXBvcnRBbnl0aW1lU3RhdHNJbnRlcnJ1cHQoKTsKKwogCS8qIFByb2Nl c3Mgc2ludmFsIGNhdGNodXAgaW50ZXJydXB0cyB0aGF0IGhhcHBlbmVkIHdoaWxlIHNsZWVwaW5n ICovCiAJUHJvY2Vzc0NhdGNodXBJbnRlcnJ1cHQoKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2No ZWNrcG9pbnRlci5jCmluZGV4IDA4NzEyMGRiMDkwLi44NzRjY2ViMzk3MCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYworKysgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jCkBAIC02OTQsNiArNjk0LDkgQEAgUHJvY2Vzc0NoZWNr cG9pbnRlckludGVycnVwdHModm9pZCkKIAkvKiBQZXJmb3JtIGxvZ2dpbmcgb2YgbWVtb3J5IGNv bnRleHRzIG9mIHRoaXMgcHJvY2VzcyAqLwogCWlmIChMb2dNZW1vcnlDb250ZXh0UGVuZGluZykK IAkJUHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKKworCWlmIChSZXBvcnRBbnl0 aW1lU3RhdHNQZW5kaW5nKQorCQlQcm9jZXNzUmVwb3J0QW55dGltZVN0YXRzSW50ZXJydXB0KCk7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2ludGVycnVwdC5j IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9pbnRlcnJ1cHQuYwppbmRleCBhMmMwZmYwMTJjNS4u NGUwOWU5M2Y4ZGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvaW50ZXJydXB0 LmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9pbnRlcnJ1cHQuYwpAQCAtMTcsNiArMTcs NyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5j bHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNs dWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKQEAgLTQ4LDYg KzQ5LDkgQEAgUHJvY2Vzc01haW5Mb29wSW50ZXJydXB0cyh2b2lkKQogCS8qIFBlcmZvcm0gbG9n Z2luZyBvZiBtZW1vcnkgY29udGV4dHMgb2YgdGhpcyBwcm9jZXNzICovCiAJaWYgKExvZ01lbW9y eUNvbnRleHRQZW5kaW5nKQogCQlQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgpOwor CisJaWYgKFJlcG9ydEFueXRpbWVTdGF0c1BlbmRpbmcpCisJCVByb2Nlc3NSZXBvcnRBbnl0aW1l U3RhdHNJbnRlcnJ1cHQoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvcGdhcmNoLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCmluZGV4IDBm MjA3YWMwMzU2Li5kODNhNWZkYTg2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9wZ2FyY2guYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCkBAIC04NzAs NiArODcwLDkgQEAgUHJvY2Vzc1BnQXJjaEludGVycnVwdHModm9pZCkKIAlpZiAoTG9nTWVtb3J5 Q29udGV4dFBlbmRpbmcpCiAJCVByb2Nlc3NMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CiAK KwlpZiAoUmVwb3J0QW55dGltZVN0YXRzUGVuZGluZykKKwkJUHJvY2Vzc1JlcG9ydEFueXRpbWVT dGF0c0ludGVycnVwdCgpOworCiAJaWYgKENvbmZpZ1JlbG9hZFBlbmRpbmcpCiAJewogCQljaGFy CSAgICphcmNoaXZlTGliID0gcHN0cmR1cChYTG9nQXJjaGl2ZUxpYnJhcnkpOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zdGFydHVwLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL3N0YXJ0dXAuYwppbmRleCBiNDZiYWM2ODFmZS4uNGE1NTM0YThmOWIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvc3RhcnR1cC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1 dGlscy5oIgogI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCisjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXhwcm9jZXNz LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9zdGFydHVwLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9p cGMuaCIKQEAgLTE5Miw2ICsxOTMsOSBAQCBQcm9jZXNzU3RhcnR1cFByb2NJbnRlcnJ1cHRzKHZv aWQpCiAJLyogUGVyZm9ybSBsb2dnaW5nIG9mIG1lbW9yeSBjb250ZXh0cyBvZiB0aGlzIHByb2Nl c3MgKi8KIAlpZiAoTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcpCiAJCVByb2Nlc3NMb2dNZW1vcnlD b250ZXh0SW50ZXJydXB0KCk7CisKKwlpZiAoUmVwb3J0QW55dGltZVN0YXRzUGVuZGluZykKKwkJ UHJvY2Vzc1JlcG9ydEFueXRpbWVTdGF0c0ludGVycnVwdCgpOwogfQogCiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jIGIvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci93YWxzdW1tYXJpemVyLmMKaW5kZXggNGYxMmVhZjJjODUuLmIxMjM5Y2JiMDdmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYworKysgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwpAQCAtODc2LDYgKzg3Niw5IEBA IFByb2Nlc3NXYWxTdW1tYXJpemVySW50ZXJydXB0cyh2b2lkKQogCS8qIFBlcmZvcm0gbG9nZ2lu ZyBvZiBtZW1vcnkgY29udGV4dHMgb2YgdGhpcyBwcm9jZXNzICovCiAJaWYgKExvZ01lbW9yeUNv bnRleHRQZW5kaW5nKQogCQlQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgpOworCisJ aWYgKFJlcG9ydEFueXRpbWVTdGF0c1BlbmRpbmcpCisJCVByb2Nlc3NSZXBvcnRBbnl0aW1lU3Rh dHNJbnRlcnJ1cHQoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3Byb2NzaWduYWwuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpp bmRleCAyNjRlNGMyMmNhNi4uNDAwMjNhYzk4ODggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3Byb2NzaWduYWwuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9j c2lnbmFsLmMKQEAgLTcxMSw2ICs3MTEsOSBAQCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcihT SUdOQUxfQVJHUykKIAlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUkVQQUNLX01FU1NBR0Up KQogCQlIYW5kbGVSZXBhY2tNZXNzYWdlSW50ZXJydXB0KCk7CiAKKwlpZiAoQ2hlY2tQcm9jU2ln bmFsKFBST0NTSUdfUkVQT1JUX0FOWVRJTUVfU1RBVFMpKQorCQlIYW5kbGVSZXBvcnRBbnl0aW1l U3RhdHNJbnRlcnJ1cHQoKTsKKwogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19TTE9UU1lO Q19NRVNTQUdFKSkKIAkJSGFuZGxlU2xvdFN5bmNNZXNzYWdlSW50ZXJydXB0KCk7CiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9z dGdyZXMuYwppbmRleCBkYmVmNzM0YTkzZi4uZGJjYTM3MmEzZjEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMK QEAgLTM2MDksNiArMzYwOSw5IEBAIFByb2Nlc3NJbnRlcnJ1cHRzKHZvaWQpCiAJaWYgKExvZ01l bW9yeUNvbnRleHRQZW5kaW5nKQogCQlQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgp OwogCisJaWYgKFJlcG9ydEFueXRpbWVTdGF0c1BlbmRpbmcpCisJCVByb2Nlc3NSZXBvcnRBbnl0 aW1lU3RhdHNJbnRlcnJ1cHQoKTsKKwogCWlmIChQYXJhbGxlbEFwcGx5TWVzc2FnZVBlbmRpbmcp CiAJCVByb2Nlc3NQYXJhbGxlbEFwcGx5TWVzc2FnZXMoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0LmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0 eS9wZ3N0YXQuYwppbmRleCBiNjdkYTg4YzdkYy4uOWI1ZDliZjA5Y2IgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3Bnc3RhdC5jCkBAIC0xMDYsNiArMTA2LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vz cy94YWN0LmgiCiAjaW5jbHVkZSAibGliL2RzaGFzaC5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRl ICJzdG9yYWdlL2lwYy5oIgpAQCAtODQ1LDYgKzg0Niw1NyBAQCBwZ3N0YXRfZm9yY2VfbmV4dF9m bHVzaCh2b2lkKQogCXBnU3RhdEZvcmNlTmV4dEZsdXNoID0gdHJ1ZTsKIH0KIAorLyoKKyAqIElt bWVkaWF0ZWx5IGZsdXNoIGFsbCBwZW5kaW5nIHN0YXRpc3RpY3MgZW50cmllcyB0byBzaGFyZWQg bWVtb3J5LgorICoKKyAqIFVubGlrZSBwZ3N0YXRfcmVwb3J0X3N0YXQoKSwgdGhpcyBjYW4gYmUg Y2FsbGVkIGFueXRpbWUsIGluY2x1ZGluZworICogd2l0aGluIGEgdHJhbnNhY3Rpb24uCisgKi8K K3ZvaWQKK3Bnc3RhdF9yZXBvcnRfYW55dGltZV9zdGF0KHZvaWQpCit7CisJcGdzdGF0X2ZsdXNo X3BlbmRpbmdfZW50cmllcyhmYWxzZSk7CisKKwlmb3IgKFBnU3RhdF9LaW5kIGtpbmQgPSBQR1NU QVRfS0lORF9NSU47IGtpbmQgPD0gUEdTVEFUX0tJTkRfTUFYOyBraW5kKyspCisJeworCQljb25z dCBQZ1N0YXRfS2luZEluZm8gKmtpbmRfaW5mbyA9IHBnc3RhdF9nZXRfa2luZF9pbmZvKGtpbmQp OworCisJCWlmICgha2luZF9pbmZvIHx8ICFraW5kX2luZm8tPmZsdXNoX3N0YXRpY19jYikKKwkJ CWNvbnRpbnVlOworCisJCWtpbmRfaW5mby0+Zmx1c2hfc3RhdGljX2NiKGZhbHNlKTsKKwl9Cit9 CisKKy8qCisgKiBIYW5kbGVSZXBvcnRBbnl0aW1lU3RhdHNJbnRlcnJ1cHQKKyAqCQlIYW5kbGUg cmVjZWlwdCBvZiBhbiBpbnRlcnJ1cHQgcmVxdWVzdGluZyBhbiBhbnl0aW1lIHN0YXRzIHJlcG9y dC4KKyAqCisgKiBBbGwgdGhlIGFjdHVhbCB3b3JrIGlzIGRlZmVycmVkIHRvIFByb2Nlc3NSZXBv cnRBbnl0aW1lU3RhdHNJbnRlcnJ1cHQoKSwKKyAqIGJlY2F1c2Ugd2UgY2Fubm90IHNhZmVseSBh Y3F1aXJlIGxvY2tzIGluc2lkZSB0aGUgc2lnbmFsIGhhbmRsZXIuCisgKi8KK3ZvaWQKK0hhbmRs ZVJlcG9ydEFueXRpbWVTdGF0c0ludGVycnVwdCh2b2lkKQoreworCUludGVycnVwdFBlbmRpbmcg PSB0cnVlOworCVJlcG9ydEFueXRpbWVTdGF0c1BlbmRpbmcgPSB0cnVlOworCS8qIGxhdGNoIHdp bGwgYmUgc2V0IGJ5IHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyICovCit9CisKKy8qCisgKiBQ cm9jZXNzUmVwb3J0QW55dGltZVN0YXRzSW50ZXJydXB0CisgKgkJUmVwb3J0IGFsbCBwZW5kaW5n IHN0YXRpc3RpY3MgdG8gc2hhcmVkIG1lbW9yeS4KKyAqCisgKiBDYWxsZWQgZnJvbSBQcm9jZXNz SW50ZXJydXB0cygpIHdoZW4gUmVwb3J0QW55dGltZVN0YXRzUGVuZGluZyBpcyBzZXQuCisgKi8K K3ZvaWQKK1Byb2Nlc3NSZXBvcnRBbnl0aW1lU3RhdHNJbnRlcnJ1cHQodm9pZCkKK3sKKwlSZXBv cnRBbnl0aW1lU3RhdHNQZW5kaW5nID0gZmFsc2U7CisKKwlwZ3N0YXRfcmVwb3J0X2FueXRpbWVf c3RhdCgpOworfQorCiAvKgogICogT25seSBmb3IgdXNlIGJ5IHBnc3RhdF9yZXNldF9jb3VudGVy cygpCiAgKi8KQEAgLTE0MTQsNyArMTQ2NiwxNCBAQCBwZ3N0YXRfZmx1c2hfcGVuZGluZ19lbnRy aWVzKGJvb2wgbm93YWl0KQogCQkvKiBmbHVzaCB0aGUgc3RhdHMsIGlmIHBvc3NpYmxlICovCiAJ CWRpZF9mbHVzaCA9IGtpbmRfaW5mby0+Zmx1c2hfcGVuZGluZ19jYihlbnRyeV9yZWYsIG5vd2Fp dCk7CiAKLQkJQXNzZXJ0KGRpZF9mbHVzaCB8fCBub3dhaXQpOworCQkvKgorCQkgKiBXaGVuIG5v d2FpdCBpcyBmYWxzZSB3ZSBibG9jayBmb3IgdGhlIGxvY2ssIHNvIHRoZSBvbmx5IHJlYXNvbiBh CisJCSAqIGZsdXNoX3BlbmRpbmdfY2IgY2FuIGxlZ2l0aW1hdGVseSByZXR1cm4gZmFsc2UgaXMg dGhhdCB0aGUgZW50cnkKKwkJICogaGFzIGFjdGl2ZSB0cmFuc2FjdGlvbiBzdGF0ZSB0aGF0IG11 c3Qgbm90IGJlIGZyZWVkIHlldCAoZS5nLgorCQkgKiByZWxhdGlvbiBzdGF0cyB3aXRoIHRyYW5z ICE9IE5VTEwpLiAgVGhhdCBzaXR1YXRpb24gb25seSBhcmlzZXMKKwkJICogbWlkLXRyYW5zYWN0 aW9uLCBoZW5jZSB0aGUgSXNUcmFuc2FjdGlvbk9yVHJhbnNhY3Rpb25CbG9jaygpIGNoZWNrLgor CQkgKi8KKwkJQXNzZXJ0KGRpZF9mbHVzaCB8fCBub3dhaXQgfHwgSXNUcmFuc2FjdGlvbk9yVHJh bnNhY3Rpb25CbG9jaygpKTsKIAogCQkvKiBkZXRlcm1pbmUgbmV4dCBlbnRyeSwgYmVmb3JlIGRl bGV0aW5nIHRoZSBwZW5kaW5nIGVudHJ5ICovCiAJCWlmIChkbGlzdF9oYXNfbmV4dCgmcGdTdGF0 UGVuZGluZywgY3VyKSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bn c3RhdF9yZWxhdGlvbi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3JlbGF0 aW9uLmMKaW5kZXggYjJjYTI4ZjgzYmEuLjg0ODY4N2E5ZjdlIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfcmVsYXRpb24uYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hY3Rpdml0eS9wZ3N0YXRfcmVsYXRpb24uYwpAQCAtODI4LDY0ICs4MjgsNzYgQEAgcGdz dGF0X3JlbGF0aW9uX2ZsdXNoX2NiKFBnU3RhdF9FbnRyeVJlZiAqZW50cnlfcmVmLCBib29sIG5v d2FpdCkKIAogCS8qCiAJICogSWdub3JlIGVudHJpZXMgdGhhdCBkaWRuJ3QgYWNjdW11bGF0ZSBh bnkgYWN0dWFsIGNvdW50cywgc3VjaCBhcwotCSAqIGluZGV4ZXMgdGhhdCB3ZXJlIG9wZW5lZCBi eSB0aGUgcGxhbm5lciBidXQgbm90IHVzZWQuCisJICogaW5kZXhlcyB0aGF0IHdlcmUgb3BlbmVk IGJ5IHRoZSBwbGFubmVyIGJ1dCBub3QgdXNlZC4gIFRoZSBlbnRyeSBjYW5ub3QKKwkgKiBiZSBm cmVlZCBpZiB0aGVyZSBpcyBhY3RpdmUgdHJhbnNhY3Rpb24gc3RhdGUsIHNpbmNlCisJICogQXRF T1hhY3RfUGdTdGF0X1JlbGF0aW9ucyB3aWxsIHN0aWxsIG1lcmdlIGNvdW50ZXJzIGludG8gaXQu CiAJICovCiAJaWYgKHBnX21lbW9yeV9pc19hbGxfemVyb3MoJmxzdGF0cy0+Y291bnRzLAogCQkJ CQkJCSAgIHNpemVvZihzdHJ1Y3QgUGdTdGF0X1RhYmxlQ291bnRzKSkpCi0JCXJldHVybiB0cnVl OworCQlyZXR1cm4gKGxzdGF0cy0+dHJhbnMgPT0gTlVMTCk7CiAKIAlpZiAoIXBnc3RhdF9sb2Nr X2VudHJ5KGVudHJ5X3JlZiwgbm93YWl0KSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JLyogYWRkIHRo ZSB2YWx1ZXMgdG8gdGhlIHNoYXJlZCBlbnRyeS4gKi8KKwkvKiBVcGRhdGUgY291bnRlcnMgdGhh dCBhcmUgYWx3YXlzIHNhZmUgdG8gZmx1c2guICovCiAJdGFiZW50cnkgPSAmc2h0YWJzdGF0cy0+ c3RhdHM7CiAKIAl0YWJlbnRyeS0+bnVtc2NhbnMgKz0gbHN0YXRzLT5jb3VudHMubnVtc2NhbnM7 CiAJaWYgKGxzdGF0cy0+Y291bnRzLm51bXNjYW5zKQogCXsKLQkJVGltZXN0YW1wVHogdCA9IEdl dEN1cnJlbnRUcmFuc2FjdGlvblN0b3BUaW1lc3RhbXAoKTsKKwkJVGltZXN0YW1wVHogdCA9IElz VHJhbnNhY3Rpb25PclRyYW5zYWN0aW9uQmxvY2soKSA/CisJCQlHZXRDdXJyZW50U3RhdGVtZW50 U3RhcnRUaW1lc3RhbXAoKSA6CisJCQlHZXRDdXJyZW50VHJhbnNhY3Rpb25TdG9wVGltZXN0YW1w KCk7CiAKIAkJaWYgKHQgPiB0YWJlbnRyeS0+bGFzdHNjYW4pCiAJCQl0YWJlbnRyeS0+bGFzdHNj YW4gPSB0OwogCX0KIAl0YWJlbnRyeS0+dHVwbGVzX3JldHVybmVkICs9IGxzdGF0cy0+Y291bnRz LnR1cGxlc19yZXR1cm5lZDsKIAl0YWJlbnRyeS0+dHVwbGVzX2ZldGNoZWQgKz0gbHN0YXRzLT5j b3VudHMudHVwbGVzX2ZldGNoZWQ7Ci0JdGFiZW50cnktPnR1cGxlc19pbnNlcnRlZCArPSBsc3Rh dHMtPmNvdW50cy50dXBsZXNfaW5zZXJ0ZWQ7Ci0JdGFiZW50cnktPnR1cGxlc191cGRhdGVkICs9 IGxzdGF0cy0+Y291bnRzLnR1cGxlc191cGRhdGVkOwotCXRhYmVudHJ5LT50dXBsZXNfZGVsZXRl ZCArPSBsc3RhdHMtPmNvdW50cy50dXBsZXNfZGVsZXRlZDsKIAl0YWJlbnRyeS0+dHVwbGVzX2hv dF91cGRhdGVkICs9IGxzdGF0cy0+Y291bnRzLnR1cGxlc19ob3RfdXBkYXRlZDsKIAl0YWJlbnRy eS0+dHVwbGVzX25ld3BhZ2VfdXBkYXRlZCArPSBsc3RhdHMtPmNvdW50cy50dXBsZXNfbmV3cGFn ZV91cGRhdGVkOworCXRhYmVudHJ5LT5ibG9ja3NfZmV0Y2hlZCArPSBsc3RhdHMtPmNvdW50cy5i bG9ja3NfZmV0Y2hlZDsKKwl0YWJlbnRyeS0+YmxvY2tzX2hpdCArPSBsc3RhdHMtPmNvdW50cy5i bG9ja3NfaGl0OwogCiAJLyoKLQkgKiBJZiB0YWJsZSB3YXMgdHJ1bmNhdGVkL2Ryb3BwZWQsIGZp cnN0IHJlc2V0IHRoZSBsaXZlL2RlYWQgY291bnRlcnMuCisJICogVXBkYXRlIGNvdW50ZXJzIHRo YXQgYXJlIG9ubHkgc2FmZSB0byBmbHVzaCBvdXRzaWRlIG9mIGEgdHJhbnNhY3Rpb24KKwkgKiB0 aGF0IGhhcyBtb2RpZmllZCB0aGlzIHJlbGF0aW9uLgogCSAqLwotCWlmIChsc3RhdHMtPmNvdW50 cy50cnVuY2Ryb3BwZWQpCisJaWYgKGxzdGF0cy0+dHJhbnMgPT0gTlVMTCkKIAl7Ci0JCXRhYmVu dHJ5LT5saXZlX3R1cGxlcyA9IDA7Ci0JCXRhYmVudHJ5LT5kZWFkX3R1cGxlcyA9IDA7Ci0JCXRh YmVudHJ5LT5pbnNfc2luY2VfdmFjdXVtID0gMDsKLQl9CisJCXRhYmVudHJ5LT50dXBsZXNfaW5z ZXJ0ZWQgKz0gbHN0YXRzLT5jb3VudHMudHVwbGVzX2luc2VydGVkOworCQl0YWJlbnRyeS0+dHVw bGVzX3VwZGF0ZWQgKz0gbHN0YXRzLT5jb3VudHMudHVwbGVzX3VwZGF0ZWQ7CisJCXRhYmVudHJ5 LT50dXBsZXNfZGVsZXRlZCArPSBsc3RhdHMtPmNvdW50cy50dXBsZXNfZGVsZXRlZDsKIAotCXRh YmVudHJ5LT5saXZlX3R1cGxlcyArPSBsc3RhdHMtPmNvdW50cy5kZWx0YV9saXZlX3R1cGxlczsK LQl0YWJlbnRyeS0+ZGVhZF90dXBsZXMgKz0gbHN0YXRzLT5jb3VudHMuZGVsdGFfZGVhZF90dXBs ZXM7Ci0JdGFiZW50cnktPm1vZF9zaW5jZV9hbmFseXplICs9IGxzdGF0cy0+Y291bnRzLmNoYW5n ZWRfdHVwbGVzOworCQkvKgorCQkgKiBJZiB0YWJsZSB3YXMgdHJ1bmNhdGVkL2Ryb3BwZWQsIGZp cnN0IHJlc2V0IHRoZSBsaXZlL2RlYWQgY291bnRlcnMuCisJCSAqLworCQlpZiAobHN0YXRzLT5j b3VudHMudHJ1bmNkcm9wcGVkKQorCQl7CisJCQl0YWJlbnRyeS0+bGl2ZV90dXBsZXMgPSAwOwor CQkJdGFiZW50cnktPmRlYWRfdHVwbGVzID0gMDsKKwkJCXRhYmVudHJ5LT5pbnNfc2luY2VfdmFj dXVtID0gMDsKKwkJfQogCi0JLyoKLQkgKiBVc2luZyB0dXBsZXNfaW5zZXJ0ZWQgdG8gdXBkYXRl IGluc19zaW5jZV92YWN1dW0gZG9lcyBtZWFuIHRoYXQgd2UnbGwKLQkgKiB0cmFjayBhYm9ydGVk IGluc2VydHMgdG9vLiAgVGhpcyBpc24ndCBpZGVhbCwgYnV0IG90aGVyd2lzZSBwcm9iYWJseQot CSAqIG5vdCB3b3J0aCBhZGRpbmcgYW4gZXh0cmEgZmllbGQgZm9yLiAgSXQgbWF5IGp1c3QgYW1v dW50IHRvIGF1dG92YWN1dW1zCi0JICogdHJpZ2dlcmluZyBmb3IgaW5zZXJ0cyBtb3JlIG9mdGVu IHRoYW4gdGhleSBtYXliZSBzaG91bGQsIHdoaWNoIGlzCi0JICogcHJvYmFibHkgbm90IGdvaW5n IHRvIGJlIGNvbW1vbiBlbm91Z2ggdG8gYmUgdG9vIGNvbmNlcm5lZCBhYm91dCBoZXJlLgotCSAq LwotCXRhYmVudHJ5LT5pbnNfc2luY2VfdmFjdXVtICs9IGxzdGF0cy0+Y291bnRzLnR1cGxlc19p bnNlcnRlZDsKKwkJdGFiZW50cnktPmxpdmVfdHVwbGVzICs9IGxzdGF0cy0+Y291bnRzLmRlbHRh X2xpdmVfdHVwbGVzOworCQl0YWJlbnRyeS0+ZGVhZF90dXBsZXMgKz0gbHN0YXRzLT5jb3VudHMu ZGVsdGFfZGVhZF90dXBsZXM7CisJCXRhYmVudHJ5LT5tb2Rfc2luY2VfYW5hbHl6ZSArPSBsc3Rh dHMtPmNvdW50cy5jaGFuZ2VkX3R1cGxlczsKIAotCXRhYmVudHJ5LT5ibG9ja3NfZmV0Y2hlZCAr PSBsc3RhdHMtPmNvdW50cy5ibG9ja3NfZmV0Y2hlZDsKLQl0YWJlbnRyeS0+YmxvY2tzX2hpdCAr PSBsc3RhdHMtPmNvdW50cy5ibG9ja3NfaGl0OworCQkvKgorCQkgKiBVc2luZyB0dXBsZXNfaW5z ZXJ0ZWQgdG8gdXBkYXRlIGluc19zaW5jZV92YWN1dW0gZG9lcyBtZWFuIHRoYXQKKwkJICogd2Un bGwgdHJhY2sgYWJvcnRlZCBpbnNlcnRzIHRvby4gIFRoaXMgaXNuJ3QgaWRlYWwsIGJ1dCBvdGhl cndpc2UKKwkJICogcHJvYmFibHkgbm90IHdvcnRoIGFkZGluZyBhbiBleHRyYSBmaWVsZCBmb3Iu ICBJdCBtYXkganVzdCBhbW91bnQKKwkJICogdG8gYXV0b3ZhY3V1bXMgdHJpZ2dlcmluZyBmb3Ig aW5zZXJ0cyBtb3JlIG9mdGVuIHRoYW4gdGhleSBtYXliZQorCQkgKiBzaG91bGQsIHdoaWNoIGlz IHByb2JhYmx5IG5vdCBnb2luZyB0byBiZSBjb21tb24gZW5vdWdoIHRvIGJlIHRvbworCQkgKiBj b25jZXJuZWQgYWJvdXQgaGVyZS4KKwkJICovCisJCXRhYmVudHJ5LT5pbnNfc2luY2VfdmFjdXVt ICs9IGxzdGF0cy0+Y291bnRzLnR1cGxlc19pbnNlcnRlZDsKIAotCS8qIENsYW1wIGxpdmVfdHVw bGVzIGluIGNhc2Ugb2YgbmVnYXRpdmUgZGVsdGFfbGl2ZV90dXBsZXMgKi8KLQl0YWJlbnRyeS0+ bGl2ZV90dXBsZXMgPSBNYXgodGFiZW50cnktPmxpdmVfdHVwbGVzLCAwKTsKLQkvKiBMaWtld2lz ZSBmb3IgZGVhZF90dXBsZXMgKi8KLQl0YWJlbnRyeS0+ZGVhZF90dXBsZXMgPSBNYXgodGFiZW50 cnktPmRlYWRfdHVwbGVzLCAwKTsKKwkJLyogQ2xhbXAgbGl2ZV90dXBsZXMgaW4gY2FzZSBvZiBu ZWdhdGl2ZSBkZWx0YV9saXZlX3R1cGxlcyAqLworCQl0YWJlbnRyeS0+bGl2ZV90dXBsZXMgPSBN YXgodGFiZW50cnktPmxpdmVfdHVwbGVzLCAwKTsKKwkJLyogTGlrZXdpc2UgZm9yIGRlYWRfdHVw bGVzICovCisJCXRhYmVudHJ5LT5kZWFkX3R1cGxlcyA9IE1heCh0YWJlbnRyeS0+ZGVhZF90dXBs ZXMsIDApOworCX0KIAogCXBnc3RhdF91bmxvY2tfZW50cnkoZW50cnlfcmVmKTsKIApAQCAtODkz LDEzICs5MDUsMzAgQEAgcGdzdGF0X3JlbGF0aW9uX2ZsdXNoX2NiKFBnU3RhdF9FbnRyeVJlZiAq ZW50cnlfcmVmLCBib29sIG5vd2FpdCkKIAlkYmVudHJ5ID0gcGdzdGF0X3ByZXBfZGF0YWJhc2Vf cGVuZGluZyhkYm9pZCk7CiAJZGJlbnRyeS0+dHVwbGVzX3JldHVybmVkICs9IGxzdGF0cy0+Y291 bnRzLnR1cGxlc19yZXR1cm5lZDsKIAlkYmVudHJ5LT50dXBsZXNfZmV0Y2hlZCArPSBsc3RhdHMt PmNvdW50cy50dXBsZXNfZmV0Y2hlZDsKLQlkYmVudHJ5LT50dXBsZXNfaW5zZXJ0ZWQgKz0gbHN0 YXRzLT5jb3VudHMudHVwbGVzX2luc2VydGVkOwotCWRiZW50cnktPnR1cGxlc191cGRhdGVkICs9 IGxzdGF0cy0+Y291bnRzLnR1cGxlc191cGRhdGVkOwotCWRiZW50cnktPnR1cGxlc19kZWxldGVk ICs9IGxzdGF0cy0+Y291bnRzLnR1cGxlc19kZWxldGVkOwogCWRiZW50cnktPmJsb2Nrc19mZXRj aGVkICs9IGxzdGF0cy0+Y291bnRzLmJsb2Nrc19mZXRjaGVkOwogCWRiZW50cnktPmJsb2Nrc19o aXQgKz0gbHN0YXRzLT5jb3VudHMuYmxvY2tzX2hpdDsKIAotCXJldHVybiB0cnVlOworCWlmIChs c3RhdHMtPnRyYW5zID09IE5VTEwpCisJeworCQlkYmVudHJ5LT50dXBsZXNfaW5zZXJ0ZWQgKz0g bHN0YXRzLT5jb3VudHMudHVwbGVzX2luc2VydGVkOworCQlkYmVudHJ5LT50dXBsZXNfdXBkYXRl ZCArPSBsc3RhdHMtPmNvdW50cy50dXBsZXNfdXBkYXRlZDsKKwkJZGJlbnRyeS0+dHVwbGVzX2Rl bGV0ZWQgKz0gbHN0YXRzLT5jb3VudHMudHVwbGVzX2RlbGV0ZWQ7CisJCXJldHVybiB0cnVlOwor CX0KKworCS8qCisJICogVGhpcyBpcyBhIHBhcnRpYWwsIGluLXRyYW5zYWN0aW9uIGZsdXNoLiAg WmVybyBvdXQgdGhlIGNvdW50ZXJzIHdlCisJICogYWxyZWFkeSBmbHVzaGVkIHNvIHRoZXkgYXJl bid0IGRvdWJsZS1jb3VudGVkIG9uIHRoZSBuZXh0IGZsdXNoLgorCSAqLworCWxzdGF0cy0+Y291 bnRzLm51bXNjYW5zID0gMDsKKwlsc3RhdHMtPmNvdW50cy50dXBsZXNfcmV0dXJuZWQgPSAwOwor CWxzdGF0cy0+Y291bnRzLnR1cGxlc19mZXRjaGVkID0gMDsKKwlsc3RhdHMtPmNvdW50cy50dXBs ZXNfaG90X3VwZGF0ZWQgPSAwOworCWxzdGF0cy0+Y291bnRzLnR1cGxlc19uZXdwYWdlX3VwZGF0 ZWQgPSAwOworCWxzdGF0cy0+Y291bnRzLmJsb2Nrc19mZXRjaGVkID0gMDsKKwlsc3RhdHMtPmNv dW50cy5ibG9ja3NfaGl0ID0gMDsKKworCXJldHVybiBmYWxzZTsKIH0KIAogdm9pZApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvcGdzdGF0ZnVuY3MuYwppbmRleCA2ZjljOWM3MmRlNS4uZWIyMjQ5MGRjMmMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVk ZSAicmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9j LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3By b2NzaWduYWwuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgpAQCAtMTkyOSw2ICsxOTMwLDQ1 IEBAIHBnX3N0YXRfZm9yY2VfbmV4dF9mbHVzaChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVS Tl9WT0lEKCk7CiB9CiAKKy8qCisgKiBTaWduYWwgYSBiYWNrZW5kIHRvIHJlcG9ydCBhbGwgaXRz IHBlbmRpbmcgc3RhdGlzdGljcyB0byBzaGFyZWQgbWVtb3J5LgorICogSWYgdGhlIHRhcmdldCBp cyB0aGUgY3VycmVudCBiYWNrZW5kLCB0aGUgcmVwb3J0IGhhcHBlbnMgaW1tZWRpYXRlbHkuCisg Ki8KK0RhdHVtCitwZ19zdGF0X3JlcG9ydF9hbnl0aW1lKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ aW50CQkJcGlkID0gUEdfR0VUQVJHX0lOVDMyKDApOworCVBHUFJPQwkgICAqcHJvYzsKKwlQcm9j TnVtYmVyCXByb2NOdW1iZXIgPSBJTlZBTElEX1BST0NfTlVNQkVSOworCisJaWYgKHBpZCA9PSBN eVByb2NQaWQpCisJeworCQlwZ3N0YXRfcmVwb3J0X2FueXRpbWVfc3RhdCgpOworCQlQR19SRVRV Uk5fQk9PTCh0cnVlKTsKKwl9CisKKwlwcm9jID0gQmFja2VuZFBpZEdldFByb2MocGlkKTsKKwlp ZiAocHJvYyA9PSBOVUxMKQorCQlwcm9jID0gQXV4aWxpYXJ5UGlkR2V0UHJvYyhwaWQpOworCisJ aWYgKHByb2MgPT0gTlVMTCkKKwl7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJybXNnKCJQ SUQgJWQgaXMgbm90IGEgUG9zdGdyZVNRTCBzZXJ2ZXIgcHJvY2VzcyIsIHBpZCkpKTsKKwkJUEdf UkVUVVJOX0JPT0woZmFsc2UpOworCX0KKworCXByb2NOdW1iZXIgPSBHZXROdW1iZXJGcm9tUEdQ cm9jKHByb2MpOworCWlmIChTZW5kUHJvY1NpZ25hbChwaWQsIFBST0NTSUdfUkVQT1JUX0FOWVRJ TUVfU1RBVFMsIHByb2NOdW1iZXIpIDwgMCkKKwl7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQko ZXJybXNnKCJjb3VsZCBub3Qgc2VuZCBzaWduYWwgdG8gcHJvY2VzcyAlZDogJW0iLCBwaWQpKSk7 CisJCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsKKwl9CisKKwlQR19SRVRVUk5fQk9PTCh0cnVlKTsK K30KKwogCiAvKiBSZXNldCBhbGwgY291bnRlcnMgZm9yIHRoZSBjdXJyZW50IGRhdGFiYXNlICov CiBEYXR1bQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgYi9z cmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwppbmRleCBiYmQyOGQxNGQ5OS4uMWI1YjNk NTljM2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCkBAIC0zOSw2ICszOSw3IEBAIHZvbGF0 aWxlIHNpZ19hdG9taWNfdCBUcmFuc2FjdGlvblRpbWVvdXRQZW5kaW5nID0gZmFsc2U7CiB2b2xh dGlsZSBzaWdfYXRvbWljX3QgSWRsZVNlc3Npb25UaW1lb3V0UGVuZGluZyA9IGZhbHNlOwogdm9s YXRpbGUgc2lnX2F0b21pY190IFByb2NTaWduYWxCYXJyaWVyUGVuZGluZyA9IGZhbHNlOwogdm9s YXRpbGUgc2lnX2F0b21pY190IExvZ01lbW9yeUNvbnRleHRQZW5kaW5nID0gZmFsc2U7Cit2b2xh dGlsZSBzaWdfYXRvbWljX3QgUmVwb3J0QW55dGltZVN0YXRzUGVuZGluZyA9IGZhbHNlOwogdm9s YXRpbGUgc2lnX2F0b21pY190IElkbGVTdGF0c1VwZGF0ZVRpbWVvdXRQZW5kaW5nID0gZmFsc2U7 CiB2b2xhdGlsZSB1aW50MzIgSW50ZXJydXB0SG9sZG9mZkNvdW50ID0gMDsKIHZvbGF0aWxlIHVp bnQzMiBRdWVyeUNhbmNlbEhvbGRvZmZDb3VudCA9IDA7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApp bmRleCBiZTE1N2E1ZmJlOS4uNDA2NjI4MDI1YjEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApA QCAtNjIwOSw2ICs2MjA5LDEyIEBACiAgIHByb25hbWUgPT4gJ3BnX3N0YXRfZm9yY2VfbmV4dF9m bHVzaCcsIHByb2lzc3RyaWN0ID0+ICdmJywgcHJvdm9sYXRpbGUgPT4gJ3YnLAogICBwcm9wYXJh bGxlbCA9PiAncicsIHByb3JldHR5cGUgPT4gJ3ZvaWQnLCBwcm9hcmd0eXBlcyA9PiAnJywKICAg cHJvc3JjID0+ICdwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2gnIH0sCit7IG9pZCA9PiAnOTk1Mycs CisgIGRlc2NyID0+ICdzdGF0aXN0aWNzOiBmb3JjZSBmbHVzaCBvZiBwZW5kaW5nIHN0YXRzIHRv IHNoYXJlZCBtZW1vcnksIGluY2x1ZGluZyBmcm9tIHdpdGhpbiBhIHRyYW5zYWN0aW9uJywKKyAg cHJvbmFtZSA9PiAncGdfc3RhdF9yZXBvcnRfYW55dGltZScsIHByb3ZvbGF0aWxlID0+ICd2JywK KyAgcHJvcmV0dHlwZSA9PiAnYm9vbCcsIHByb2FyZ3R5cGVzID0+ICdpbnQ0JywKKyAgcHJvc3Jj ID0+ICdwZ19zdGF0X3JlcG9ydF9hbnl0aW1lJywKKyAgcHJvYWNsID0+ICd7UE9TVEdSRVM9WH0n IH0sCiB7IG9pZCA9PiAnMjI3NCcsCiAgIGRlc2NyID0+ICdzdGF0aXN0aWNzOiByZXNldCBjb2xs ZWN0ZWQgc3RhdGlzdGljcyBmb3IgY3VycmVudCBkYXRhYmFzZScsCiAgIHByb25hbWUgPT4gJ3Bn X3N0YXRfcmVzZXQnLCBwcm9pc3N0cmljdCA9PiAnZicsIHByb3ZvbGF0aWxlID0+ICd2JywKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWlu LmgKaW5kZXggOGNjZGY2MTI0NmIuLjdmOGIzOGNiOWQ3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9taXNjYWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApAQCAtOTcsNiArOTcs NyBAQCBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFRyYW5zYWN0aW9u VGltZW91dFBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190 IElkbGVTZXNzaW9uVGltZW91dFBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUg c2lnX2F0b21pY190IFByb2NTaWduYWxCYXJyaWVyUGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9S VCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgTG9nTWVtb3J5Q29udGV4dFBlbmRpbmc7CitleHRlcm4g UEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFJlcG9ydEFueXRpbWVTdGF0c1BlbmRp bmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVTdGF0c1Vw ZGF0ZVRpbWVvdXRQZW5kaW5nOwogCiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0 b21pY190IENoZWNrQ2xpZW50Q29ubmVjdGlvblBlbmRpbmc7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9wZ3N0YXQuaCBiL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCmluZGV4IGRmYTJlODM3NjM4Li44 N2RlZjNiMDhlMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGdzdGF0LmgKKysrIGIvc3JjL2lu Y2x1ZGUvcGdzdGF0LmgKQEAgLTU1Miw2ICs1NTIsOSBAQCBleHRlcm4gdm9pZCBwZ3N0YXRfaW5p dGlhbGl6ZSh2b2lkKTsKIC8qIEZ1bmN0aW9ucyBjYWxsZWQgZnJvbSBiYWNrZW5kcyAqLwogZXh0 ZXJuIGxvbmcgcGdzdGF0X3JlcG9ydF9zdGF0KGJvb2wgZm9yY2UpOwogZXh0ZXJuIHZvaWQgcGdz dGF0X2ZvcmNlX25leHRfZmx1c2godm9pZCk7CitleHRlcm4gdm9pZCBwZ3N0YXRfcmVwb3J0X2Fu eXRpbWVfc3RhdCh2b2lkKTsKK2V4dGVybiB2b2lkIEhhbmRsZVJlcG9ydEFueXRpbWVTdGF0c0lu dGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lkIFByb2Nlc3NSZXBvcnRBbnl0aW1lU3RhdHNJbnRl cnJ1cHQodm9pZCk7CiAKIGV4dGVybiB2b2lkIHBnc3RhdF9yZXNldF9jb3VudGVycyh2b2lkKTsK IGV4dGVybiB2b2lkIHBnc3RhdF9yZXNldChQZ1N0YXRfS2luZCBraW5kLCBPaWQgZGJvaWQsIHVp bnQ2NCBvYmppZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCmluZGV4IGFhYTE1OGJmZDY2Li5h MTg0ZDQ0OWViYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgK KysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgKQEAgLTM4LDYgKzM4LDggQEAg dHlwZWRlZiBlbnVtCiAJUFJPQ1NJR19QQVJBTExFTF9BUFBMWV9NRVNTQUdFLCAvKiBNZXNzYWdl IGZyb20gcGFyYWxsZWwgYXBwbHkgd29ya2VycyAqLwogCVBST0NTSUdfU0xPVFNZTkNfTUVTU0FH RSwJLyogYXNrIHNsb3Qgc3luY2hyb25pemF0aW9uIHRvIHN0b3AgKi8KIAlQUk9DU0lHX1JFUEFD S19NRVNTQUdFLAkJLyogTWVzc2FnZSBmcm9tIHJlcGFjayB3b3JrZXIgKi8KKwlQUk9DU0lHX1JF UE9SVF9BTllUSU1FX1NUQVRTLAkvKiBhc2sgYmFja2VuZCB0byByZXBvcnQgYW55dGltZQorCQkJ CQkJCQkJICogc3RhdGlzdGljcyAqLwogCVBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1QsCS8qIGJh Y2tlbmQgaXMgYmxvY2tpbmcgcmVjb3ZlcnksIGNoZWNrCiAJCQkJCQkJCSAqIFBHUFJPQy0+cGVu ZGluZ1JlY292ZXJ5Q29uZmxpY3RzIGZvciB0aGUKIAkJCQkJCQkJICogcmVhc29uICovCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3RhdHMub3V0CmluZGV4IGM1NTFhYmIxMTc4Li42NmI2ODM5NjVhNiAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0cy5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0cy5vdXQKQEAgLTIwNDAsNCArMjA0MCwxMjYgQEAg U0VMRUNUIGZhc3RwYXRoX2V4Y2VlZGVkID4gOmZhc3RwYXRoX2V4Y2VlZGVkX2JlZm9yZSBGUk9N IHBnX3N0YXRfbG9jayBXSEVSRSBsb2MKICgxIHJvdykKIAogRFJPUCBUQUJMRSBwYXJ0X3Rlc3Q7 CistLQorLS0gVGVzdCBwZ19zdGF0X3JlcG9ydF9hbnl0aW1lCistLQorQ1JFQVRFIFRBQkxFIHBh cnRpYWxfZmx1c2goaWQgaW50KTsKK0lOU0VSVCBJTlRPIHBhcnRpYWxfZmx1c2ggVkFMVUVTICgx KSwgKDIpLCAoMyk7CitTRUxFQ1QgcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoKCk7CisgcGdfc3Rh dF9mb3JjZV9uZXh0X2ZsdXNoIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJv dykKKworLS0gUmVjb3JkIGNvdW50ZXJzIGJlZm9yZSB0aGUgZXhwbGljaXQgdHJhbnNhY3Rpb24K K1NFTEVDVCBzZXFfc2NhbiBBUyBzZXFfc2Nhbl9iZWZvcmUsCisgICAgICAgc2VxX3R1cF9yZWFk IEFTIHNlcV90dXBfcmVhZF9iZWZvcmUsCisgICAgICAgbl90dXBfaW5zIEFTIG5fdHVwX2luc19i ZWZvcmUsCisgICAgICAgbl90dXBfdXBkIEFTIG5fdHVwX3VwZF9iZWZvcmUKKyAgRlJPTSBwZ19z dGF0X3VzZXJfdGFibGVzIFdIRVJFIHJlbG5hbWUgPSAncGFydGlhbF9mbHVzaCcgXGdzZXQKK0JF R0lOOworU0VUIExPQ0FMIHN0YXRzX2ZldGNoX2NvbnNpc3RlbmN5ID0gbm9uZTsKKy0tIEdlbmVy YXRlIGJvdGggdHJhbnNhY3Rpb24tc2FmZSBhbmQgdHJhbnNhY3Rpb24tdW5zYWZlIGNvdW50ZXJz LgorU0VMRUNUIGNvdW50KCopIEZST00gcGFydGlhbF9mbHVzaDsKKyBjb3VudCAKKy0tLS0tLS0K KyAgICAgMworKDEgcm93KQorCitJTlNFUlQgSU5UTyBwYXJ0aWFsX2ZsdXNoIFZBTFVFUyAoNCks ICg1KTsKK1VQREFURSBwYXJ0aWFsX2ZsdXNoIFNFVCBpZCA9IGlkIFdIRVJFIGlkID0gMTsKKy0t IEZsdXNoIG1pZC10cmFuc2FjdGlvbgorU0VMRUNUIHBnX3N0YXRfcmVwb3J0X2FueXRpbWUocGdf YmFja2VuZF9waWQoKSk7CisgcGdfc3RhdF9yZXBvcnRfYW55dGltZSAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gVHJhbnNhY3Rpb24tc2FmZSBjb3VudGVycyBz aG91bGQgYmUgdmlzaWJsZSBtaWQtdHJhbnNhY3Rpb24uCistLSBUcmFuc2FjdGlvbi11bnNhZmUg Y291bnRlcnMgKGlucywgdXBkKSBzaG91bGQgTk9UIGJlIGZsdXNoZWQgeWV0LAorLS0gc2luY2Ug dGhlaXIgZmluYWwgdmFsdWVzIGRlcGVuZCBvbiB3aGV0aGVyIHRoZSB0cmFuc2FjdGlvbiBjb21t aXRzLgorU0VMRUNUIHNlcV9zY2FuIC0gOnNlcV9zY2FuX2JlZm9yZSBBUyBzZXFfc2Nhbl9kZWx0 YSwKKyAgICAgICBzZXFfdHVwX3JlYWQgLSA6c2VxX3R1cF9yZWFkX2JlZm9yZSBBUyBzZXFfdHVw X3JlYWRfZGVsdGEsCisgICAgICAgbl90dXBfaW5zIC0gOm5fdHVwX2luc19iZWZvcmUgQVMgbl90 dXBfaW5zX2RlbHRhLAorICAgICAgIG5fdHVwX3VwZCAtIDpuX3R1cF91cGRfYmVmb3JlIEFTIG5f dHVwX3VwZF9kZWx0YQorICBGUk9NIHBnX3N0YXRfdXNlcl90YWJsZXMgV0hFUkUgcmVsbmFtZSA9 ICdwYXJ0aWFsX2ZsdXNoJzsKKyBzZXFfc2Nhbl9kZWx0YSB8IHNlcV90dXBfcmVhZF9kZWx0YSB8 IG5fdHVwX2luc19kZWx0YSB8IG5fdHVwX3VwZF9kZWx0YSAKKy0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0KKyAg ICAgICAgICAgICAgMiB8ICAgICAgICAgICAgICAgICAgOCB8ICAgICAgICAgICAgICAgMCB8ICAg ICAgICAgICAgICAgMAorKDEgcm93KQorCistLSBHZW5lcmF0ZSBtb3JlIHRyYW5zYWN0aW9uLXNh ZmUgYWN0aXZpdHkgdG8gdmVyaWZ5IG5vIGRvdWJsZSBjb3VudGluZy4KK1NFTEVDVCBjb3VudCgq KSBGUk9NIHBhcnRpYWxfZmx1c2g7CisgY291bnQgCistLS0tLS0tCisgICAgIDUKKygxIHJvdykK KworLS0gRmx1c2ggYWdhaW4gbWlkLXRyYW5zYWN0aW9uCitTRUxFQ1QgcGdfc3RhdF9yZXBvcnRf YW55dGltZShwZ19iYWNrZW5kX3BpZCgpKTsKKyBwZ19zdGF0X3JlcG9ydF9hbnl0aW1lIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBTaG91bGQgc2hvdyBjdW11 bGF0aXZlIHRvdGFscywgbm90IGRvdWJsZS1jb3VudGVkLgorU0VMRUNUIHNlcV9zY2FuIC0gOnNl cV9zY2FuX2JlZm9yZSBBUyBzZXFfc2Nhbl9kZWx0YSwKKyAgICAgICBzZXFfdHVwX3JlYWQgLSA6 c2VxX3R1cF9yZWFkX2JlZm9yZSBBUyBzZXFfdHVwX3JlYWRfZGVsdGEsCisgICAgICAgbl90dXBf aW5zIC0gOm5fdHVwX2luc19iZWZvcmUgQVMgbl90dXBfaW5zX2RlbHRhLAorICAgICAgIG5fdHVw X3VwZCAtIDpuX3R1cF91cGRfYmVmb3JlIEFTIG5fdHVwX3VwZF9kZWx0YQorICBGUk9NIHBnX3N0 YXRfdXNlcl90YWJsZXMgV0hFUkUgcmVsbmFtZSA9ICdwYXJ0aWFsX2ZsdXNoJzsKKyBzZXFfc2Nh bl9kZWx0YSB8IHNlcV90dXBfcmVhZF9kZWx0YSB8IG5fdHVwX2luc19kZWx0YSB8IG5fdHVwX3Vw ZF9kZWx0YSAKKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgMyB8ICAgICAgICAgICAg ICAgICAxMyB8ICAgICAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAgMAorKDEgcm93KQorCitD T01NSVQ7CistLSBBZnRlciBjb21taXQsIGFsbCBjb3VudGVycyBzaG91bGQgYmUgZmx1c2hlZC4K K1NFTEVDVCBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsKKyBwZ19zdGF0X2ZvcmNlX25leHRf Zmx1c2ggCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1Qg c2VxX3NjYW4gLSA6c2VxX3NjYW5fYmVmb3JlIEFTIHNlcV9zY2FuX2RlbHRhLAorICAgICAgIHNl cV90dXBfcmVhZCAtIDpzZXFfdHVwX3JlYWRfYmVmb3JlIEFTIHNlcV90dXBfcmVhZF9kZWx0YSwK KyAgICAgICBuX3R1cF9pbnMgLSA6bl90dXBfaW5zX2JlZm9yZSBBUyBuX3R1cF9pbnNfZGVsdGEs CisgICAgICAgbl90dXBfdXBkIC0gOm5fdHVwX3VwZF9iZWZvcmUgQVMgbl90dXBfdXBkX2RlbHRh CisgIEZST00gcGdfc3RhdF91c2VyX3RhYmxlcyBXSEVSRSByZWxuYW1lID0gJ3BhcnRpYWxfZmx1 c2gnOworIHNlcV9zY2FuX2RlbHRhIHwgc2VxX3R1cF9yZWFkX2RlbHRhIHwgbl90dXBfaW5zX2Rl bHRhIHwgbl90dXBfdXBkX2RlbHRhIAorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAz IHwgICAgICAgICAgICAgICAgIDEzIHwgICAgICAgICAgICAgICAyIHwgICAgICAgICAgICAgICAx CisoMSByb3cpCisKK0RST1AgVEFCTEUgcGFydGlhbF9mbHVzaDsKKy0tIFRlc3QgdGhhdCBwZ19z dGF0X3JlcG9ydF9hbnl0aW1lIGFsc28gZmx1c2hlcyBub24tcmVsYXRpb24gc3RhdHMuCitDUkVB VEUgVEFCTEUgd2FsX2ZsdXNoX3Rlc3QoaWQgaW50KTsKK1NFTEVDVCBwZ19zdGF0X2ZvcmNlX25l eHRfZmx1c2goKTsKKyBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2ggCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1Qgd2FsX3JlY29yZHMgQVMgd2FsX3JlY29y ZHNfYmVmb3JlCisgIEZST00gcGdfc3RhdF9nZXRfYmFja2VuZF93YWwocGdfYmFja2VuZF9waWQo KSkgXGdzZXQKK0JFR0lOOworU0VUIExPQ0FMIHN0YXRzX2ZldGNoX2NvbnNpc3RlbmN5ID0gbm9u ZTsKKy0tIEdlbmVyYXRlIFdBTCBpbnNpZGUgdGhlIHRyYW5zYWN0aW9uLgorSU5TRVJUIElOVE8g d2FsX2ZsdXNoX3Rlc3QgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMCk7CistLSBGbHVzaCBt aWQtdHJhbnNhY3Rpb247IFdBTCBzdGF0cyBzaG91bGQgYmVjb21lIHZpc2libGUgaW1tZWRpYXRl bHkuCitTRUxFQ1QgcGdfc3RhdF9yZXBvcnRfYW55dGltZShwZ19iYWNrZW5kX3BpZCgpKTsKKyBw Z19zdGF0X3JlcG9ydF9hbnl0aW1lIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEg cm93KQorCitTRUxFQ1Qgd2FsX3JlY29yZHMgPiA6d2FsX3JlY29yZHNfYmVmb3JlIEFTIHdhbF9m bHVzaGVkCisgIEZST00gcGdfc3RhdF9nZXRfYmFja2VuZF93YWwocGdfYmFja2VuZF9waWQoKSk7 Cisgd2FsX2ZsdXNoZWQgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitDT01NSVQ7CitE Uk9QIFRBQkxFIHdhbF9mbHVzaF90ZXN0OwogLS0gRW5kIG9mIFN0YXRzIFRlc3QKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3N0YXRzLnNxbAppbmRleCA2MTBmZDIxZmFlNC4uYzhiYzBmMjJmMjcgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9z dGF0cy5zcWwKQEAgLTEwMDgsNCArMTAwOCw4NSBAQCBTRUxFQ1QgZmFzdHBhdGhfZXhjZWVkZWQg PiA6ZmFzdHBhdGhfZXhjZWVkZWRfYmVmb3JlIEZST00gcGdfc3RhdF9sb2NrIFdIRVJFIGxvYwog CiBEUk9QIFRBQkxFIHBhcnRfdGVzdDsKIAorLS0KKy0tIFRlc3QgcGdfc3RhdF9yZXBvcnRfYW55 dGltZQorLS0KK0NSRUFURSBUQUJMRSBwYXJ0aWFsX2ZsdXNoKGlkIGludCk7CitJTlNFUlQgSU5U TyBwYXJ0aWFsX2ZsdXNoIFZBTFVFUyAoMSksICgyKSwgKDMpOworU0VMRUNUIHBnX3N0YXRfZm9y Y2VfbmV4dF9mbHVzaCgpOworCistLSBSZWNvcmQgY291bnRlcnMgYmVmb3JlIHRoZSBleHBsaWNp dCB0cmFuc2FjdGlvbgorU0VMRUNUIHNlcV9zY2FuIEFTIHNlcV9zY2FuX2JlZm9yZSwKKyAgICAg ICBzZXFfdHVwX3JlYWQgQVMgc2VxX3R1cF9yZWFkX2JlZm9yZSwKKyAgICAgICBuX3R1cF9pbnMg QVMgbl90dXBfaW5zX2JlZm9yZSwKKyAgICAgICBuX3R1cF91cGQgQVMgbl90dXBfdXBkX2JlZm9y ZQorICBGUk9NIHBnX3N0YXRfdXNlcl90YWJsZXMgV0hFUkUgcmVsbmFtZSA9ICdwYXJ0aWFsX2Zs dXNoJyBcZ3NldAorCitCRUdJTjsKK1NFVCBMT0NBTCBzdGF0c19mZXRjaF9jb25zaXN0ZW5jeSA9 IG5vbmU7CisKKy0tIEdlbmVyYXRlIGJvdGggdHJhbnNhY3Rpb24tc2FmZSBhbmQgdHJhbnNhY3Rp b24tdW5zYWZlIGNvdW50ZXJzLgorU0VMRUNUIGNvdW50KCopIEZST00gcGFydGlhbF9mbHVzaDsK K0lOU0VSVCBJTlRPIHBhcnRpYWxfZmx1c2ggVkFMVUVTICg0KSwgKDUpOworVVBEQVRFIHBhcnRp YWxfZmx1c2ggU0VUIGlkID0gaWQgV0hFUkUgaWQgPSAxOworCistLSBGbHVzaCBtaWQtdHJhbnNh Y3Rpb24KK1NFTEVDVCBwZ19zdGF0X3JlcG9ydF9hbnl0aW1lKHBnX2JhY2tlbmRfcGlkKCkpOwor CistLSBUcmFuc2FjdGlvbi1zYWZlIGNvdW50ZXJzIHNob3VsZCBiZSB2aXNpYmxlIG1pZC10cmFu c2FjdGlvbi4KKy0tIFRyYW5zYWN0aW9uLXVuc2FmZSBjb3VudGVycyAoaW5zLCB1cGQpIHNob3Vs ZCBOT1QgYmUgZmx1c2hlZCB5ZXQsCistLSBzaW5jZSB0aGVpciBmaW5hbCB2YWx1ZXMgZGVwZW5k IG9uIHdoZXRoZXIgdGhlIHRyYW5zYWN0aW9uIGNvbW1pdHMuCitTRUxFQ1Qgc2VxX3NjYW4gLSA6 c2VxX3NjYW5fYmVmb3JlIEFTIHNlcV9zY2FuX2RlbHRhLAorICAgICAgIHNlcV90dXBfcmVhZCAt IDpzZXFfdHVwX3JlYWRfYmVmb3JlIEFTIHNlcV90dXBfcmVhZF9kZWx0YSwKKyAgICAgICBuX3R1 cF9pbnMgLSA6bl90dXBfaW5zX2JlZm9yZSBBUyBuX3R1cF9pbnNfZGVsdGEsCisgICAgICAgbl90 dXBfdXBkIC0gOm5fdHVwX3VwZF9iZWZvcmUgQVMgbl90dXBfdXBkX2RlbHRhCisgIEZST00gcGdf c3RhdF91c2VyX3RhYmxlcyBXSEVSRSByZWxuYW1lID0gJ3BhcnRpYWxfZmx1c2gnOworCistLSBH ZW5lcmF0ZSBtb3JlIHRyYW5zYWN0aW9uLXNhZmUgYWN0aXZpdHkgdG8gdmVyaWZ5IG5vIGRvdWJs ZSBjb3VudGluZy4KK1NFTEVDVCBjb3VudCgqKSBGUk9NIHBhcnRpYWxfZmx1c2g7CisKKy0tIEZs dXNoIGFnYWluIG1pZC10cmFuc2FjdGlvbgorU0VMRUNUIHBnX3N0YXRfcmVwb3J0X2FueXRpbWUo cGdfYmFja2VuZF9waWQoKSk7CisKKy0tIFNob3VsZCBzaG93IGN1bXVsYXRpdmUgdG90YWxzLCBu b3QgZG91YmxlLWNvdW50ZWQuCitTRUxFQ1Qgc2VxX3NjYW4gLSA6c2VxX3NjYW5fYmVmb3JlIEFT IHNlcV9zY2FuX2RlbHRhLAorICAgICAgIHNlcV90dXBfcmVhZCAtIDpzZXFfdHVwX3JlYWRfYmVm b3JlIEFTIHNlcV90dXBfcmVhZF9kZWx0YSwKKyAgICAgICBuX3R1cF9pbnMgLSA6bl90dXBfaW5z X2JlZm9yZSBBUyBuX3R1cF9pbnNfZGVsdGEsCisgICAgICAgbl90dXBfdXBkIC0gOm5fdHVwX3Vw ZF9iZWZvcmUgQVMgbl90dXBfdXBkX2RlbHRhCisgIEZST00gcGdfc3RhdF91c2VyX3RhYmxlcyBX SEVSRSByZWxuYW1lID0gJ3BhcnRpYWxfZmx1c2gnOworCitDT01NSVQ7CisKKy0tIEFmdGVyIGNv bW1pdCwgYWxsIGNvdW50ZXJzIHNob3VsZCBiZSBmbHVzaGVkLgorU0VMRUNUIHBnX3N0YXRfZm9y Y2VfbmV4dF9mbHVzaCgpOworCitTRUxFQ1Qgc2VxX3NjYW4gLSA6c2VxX3NjYW5fYmVmb3JlIEFT IHNlcV9zY2FuX2RlbHRhLAorICAgICAgIHNlcV90dXBfcmVhZCAtIDpzZXFfdHVwX3JlYWRfYmVm b3JlIEFTIHNlcV90dXBfcmVhZF9kZWx0YSwKKyAgICAgICBuX3R1cF9pbnMgLSA6bl90dXBfaW5z X2JlZm9yZSBBUyBuX3R1cF9pbnNfZGVsdGEsCisgICAgICAgbl90dXBfdXBkIC0gOm5fdHVwX3Vw ZF9iZWZvcmUgQVMgbl90dXBfdXBkX2RlbHRhCisgIEZST00gcGdfc3RhdF91c2VyX3RhYmxlcyBX SEVSRSByZWxuYW1lID0gJ3BhcnRpYWxfZmx1c2gnOworCitEUk9QIFRBQkxFIHBhcnRpYWxfZmx1 c2g7CisKKy0tIFRlc3QgdGhhdCBwZ19zdGF0X3JlcG9ydF9hbnl0aW1lIGFsc28gZmx1c2hlcyBu b24tcmVsYXRpb24gc3RhdHMuCitDUkVBVEUgVEFCTEUgd2FsX2ZsdXNoX3Rlc3QoaWQgaW50KTsK K1NFTEVDVCBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsKK1NFTEVDVCB3YWxfcmVjb3JkcyBB UyB3YWxfcmVjb3Jkc19iZWZvcmUKKyAgRlJPTSBwZ19zdGF0X2dldF9iYWNrZW5kX3dhbChwZ19i YWNrZW5kX3BpZCgpKSBcZ3NldAorCitCRUdJTjsKK1NFVCBMT0NBTCBzdGF0c19mZXRjaF9jb25z aXN0ZW5jeSA9IG5vbmU7CisKKy0tIEdlbmVyYXRlIFdBTCBpbnNpZGUgdGhlIHRyYW5zYWN0aW9u LgorSU5TRVJUIElOVE8gd2FsX2ZsdXNoX3Rlc3QgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAx MCk7CisKKy0tIEZsdXNoIG1pZC10cmFuc2FjdGlvbjsgV0FMIHN0YXRzIHNob3VsZCBiZWNvbWUg dmlzaWJsZSBpbW1lZGlhdGVseS4KK1NFTEVDVCBwZ19zdGF0X3JlcG9ydF9hbnl0aW1lKHBnX2Jh Y2tlbmRfcGlkKCkpOworCitTRUxFQ1Qgd2FsX3JlY29yZHMgPiA6d2FsX3JlY29yZHNfYmVmb3Jl IEFTIHdhbF9mbHVzaGVkCisgIEZST00gcGdfc3RhdF9nZXRfYmFja2VuZF93YWwocGdfYmFja2Vu ZF9waWQoKSk7CisKK0NPTU1JVDsKK0RST1AgVEFCTEUgd2FsX2ZsdXNoX3Rlc3Q7CisKIC0tIEVu ZCBvZiBTdGF0cyBUZXN0Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --000000000000d7d16a065247bff4 Content-Type: application/octet-stream; name="v2-0003-pg_stat_statements-add-DSA-based-query-text-stora.patch" Content-Disposition: attachment; filename="v2-0003-pg_stat_statements-add-DSA-based-query-text-stora.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpenry1r1 RnJvbSA1MmUxOGRlNTY2NTk2ODE1ZGFiYTczZWVhNWI4MjI0ZGQ2ODY3NjliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEltc2VpaCA8c2FtaW1zZWloQGdtYWlsLmNvbT4KRGF0 ZTogVGh1LCAxNCBNYXkgMjAyNiAxMjozODoyOSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjIgMy80 XSBwZ19zdGF0X3N0YXRlbWVudHM6IGFkZCBEU0EtYmFzZWQgcXVlcnkgdGV4dCBzdG9yYWdlCgpB ZGQgb3B0aW9uYWwgRFNBIChkeW5hbWljIHNoYXJlZCBhcmVhKSBzdG9yYWdlIGZvciBxdWVyeSB0 ZXh0cy4KV2hlbiBlbmFibGVkIHZpYSBwZ19zdGF0X3N0YXRlbWVudHMucXVlcnlfdGV4dF9tZW1v cnkgKGRlZmF1bHQgNjRNQiksCnF1ZXJ5IHRleHRzIGFyZSBhbGxvY2F0ZWQgZnJvbSBhIHNoYXJl ZCBEU0EgYXJlYSwgYXZvaWRpbmcgdGhlIG92ZXJoZWFkCm9mIGZpbGUgSS9PIGZvciB0ZXh0IHN0 b3JhZ2UuICBXaGVuIHRoZSBEU0EgbGltaXQgaXMgcmVhY2hlZCwgbmV3IHRleHRzCmZhbGwgYmFj ayB0byB0aGUgZXhpc3RpbmcgZXh0ZXJuYWwgZmlsZSAoUEdTU19URVhUX0ZJTEUpLgoKU2V0dGlu ZyBxdWVyeV90ZXh0X21lbW9yeSB0byAwIGRpc2FibGVzIERTQSBzdG9yYWdlIGVudGlyZWx5LApy ZXZlcnRpbmcgdG8gdGhlIGZpbGUtb25seSBiZWhhdmlvci4KLS0tCiAuLi4vcGdfc3RhdF9zdGF0 ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jICAgfCAyODUgKysrKysrKysrKysrKysrLS0tCiBk b2Mvc3JjL3NnbWwvcGdzdGF0c3RhdGVtZW50cy5zZ21sICAgICAgICAgICAgfCAgMzMgKy0KIDIg ZmlsZXMgY2hhbmdlZCwgMjc4IGluc2VydGlvbnMoKyksIDQwIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jIGIv Y29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKaW5kZXggMGU2 ZTY1ZTNlNTEuLmFmNzYzN2IyNWI5IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3N0YXRfc3RhdGVt ZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYworKysgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50 cy9wZ19zdGF0X3N0YXRlbWVudHMuYwpAQCAtMTgsOCArMTgsOSBAQAogICogc3RyaW5ncyBpbiB3 aGljaCBjb25zdGFudHMgYXJlIHJlcGxhY2VkIHdpdGggcGFyYW1ldGVyIHN5bWJvbHMgKCRuKSwg dG8KICAqIG1ha2UgaXQgY2xlYXJlciB3aGF0IGEgbm9ybWFsaXplZCBlbnRyeSBjYW4gcmVwcmVz ZW50LgogICoKLSAqIEVhY2ggc2hhcmVkIHBnc3RhdCBlbnRyeSBjYXJyaWVzIGl0cyBvd24gcXVl cnkgdGV4dCwgc3RvcmVkIGluIGFuCi0gKiBleHRlcm5hbCBmaWxlIChQR1NTX1RFWFRfRklMRSku CisgKiBFYWNoIHNoYXJlZCBwZ3N0YXQgZW50cnkgY2FycmllcyBpdHMgb3duIHF1ZXJ5IHRleHQu ICBXaGVuIERTQSBzdG9yYWdlIGlzCisgKiBlbmFibGVkLCB0ZXh0IGlzIGFsbG9jYXRlZCBmcm9t IGEgc2hhcmVkIERTQSBhcmVhLiAgSWYgRFNBIGlzIGRpc2FibGVkIG9yCisgKiBleGhhdXN0ZWQs IHRleHRzIGZhbGwgYmFjayB0byBhbiBleHRlcm5hbCBmaWxlIChQR1NTX1RFWFRfRklMRSkuCiAg KgogICogRXZpY3Rpb24gb2YgbGVhc3QtdXNlZCBlbnRyaWVzIGlzIHRocm90dGxlZCB0byBydW4g YXQgbW9zdCBvbmNlIGV2ZXJ5CiAgKiBFVklDVElPTl9JTlRFUlZBTF9NUyBtaWxsaXNlY29uZHMu ICBXaGVuIGV2aWN0aW9uIGlzIG5lZWRlZCwgYSBzaW5nbGUKQEAgLTYwLDYgKzYxLDggQEAKICNp bmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKICNp bmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3RyeS5o IgorI2luY2x1ZGUgInV0aWxzL2RzYS5oIgogI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgogI2lu Y2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCkBAIC0yMzQs NiArMjM3LDcgQEAgc3RydWN0IHBnc3NTaGFyZWRTdGF0ZQogCVNpemUJCWV4dGVudDsJCQkvKiBj dXJyZW50IGV4dGVudCBvZiBxdWVyeSBmaWxlICovCiAJaW50CQkJbl93cml0ZXJzOwkJLyogbnVt YmVyIG9mIGFjdGl2ZSB3cml0ZXJzIHRvIHF1ZXJ5IGZpbGUgKi8KIAlpbnQJCQlnY19jb3VudDsJ CS8qIHF1ZXJ5IGZpbGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGN5Y2xlIGNvdW50ICovCisJYm9vbAkJ ZHNhX2NyZWF0ZWQ7CS8qIHRydWUgb25jZSBxdWVyeSB0ZXh0IERTQSBoYXMgYmVlbiBjcmVhdGVk ICovCiAJVGltZXN0YW1wVHogbGFzdF9ldmljdGlvbl90aW1lOyAvKiB0aHJvdHRsZTogbGFzdCB0 aW1lIGVudHJ5X2RlYWxsb2MgcmFuICovCiAJcGdzc0dsb2JhbFN0YXRzIHN0YXRzOwkJLyogZ2xv YmFsIHN0YXRpc3RpY3MgZm9yIHBnc3MgKi8KIH07CkBAIC0yNTIsNyArMjU2LDEyIEBAIHN0cnVj dCBQZ1N0YXRTaGFyZWRfUGdzcwogCWludAkJCXF1ZXJ5X2xlbjsJCS8qIGxlbmd0aCBvZiBxdWVy eSB0ZXh0LCBvciAtMSBpZiBpbnZhbGlkICovCiAJaW50CQkJZW5jb2Rpbmc7CQkvKiBlbmNvZGlu ZyBvZiBxdWVyeSB0ZXh0ICovCiAKLQlTaXplCQlxdWVyeV9vZmZzZXQ7CS8qIG9mZnNldCBpbiBl eHRlcm5hbCBxdWVyeSB0ZXh0IGZpbGUgKi8KKwkvKgorCSAqIFF1ZXJ5IHRleHQgaXMgc3RvcmVk IGluIGV4YWN0bHkgb25lIGxvY2F0aW9uOiBEU0EgbWVtb3J5IGlmCisJICogcXVlcnlfdGV4dF9k cCBpcyB2YWxpZCwgb3RoZXJ3aXNlIHRoZSBvdmVyZmxvdyBmaWxlIGF0IHF1ZXJ5X29mZnNldC4K KwkgKi8KKwlkc2FfcG9pbnRlciBxdWVyeV90ZXh0X2RwOwkvKiBEU0EgcG9pbnRlciB0byB0ZXh0 LCBvciBJbnZhbGlkRHNhUG9pbnRlciAqLworCVNpemUJCXF1ZXJ5X29mZnNldDsJLyogb2Zmc2V0 IGluIG92ZXJmbG93IGZpbGUgKHdoZW4gZHAgaW52YWxpZCkgKi8KIH07CiAKIC8qCkBAIC0yNzQs NiArMjgzLDggQEAgc3RydWN0IFBlbmRpbmdEcm9wCiAKIC8qIExpbmtzIHRvIHNoYXJlZCBtZW1v cnkgc3RhdGUgKi8KIHN0YXRpYyBwZ3NzU2hhcmVkU3RhdGUgKnBnc3M7CitzdGF0aWMgZHNhX2Fy ZWEgKnBnc3NfcXRleHRfZHNhID0gTlVMTDsgLyogYmFja2VuZC1sb2NhbCBoYW5kbGUgdG8gcXVl cnkgdGV4dAorCQkJCQkJCQkJCSAqIERTQSAqLwogCiAvKiBCdWZmZXIgdXNlZCBkdXJpbmcgc2Vy aWFsaXphdGlvbiB0byBhdm9pZCByZWxvYWRpbmcgdGV4dCBmaWxlIHBlciBlbnRyeSAqLwogc3Rh dGljIGNoYXIgKnBnc3NfcXRleHRfd3JpdGVfYnVmZmVyID0gTlVMTDsKQEAgLTM1NCw2ICszNjUs NyBAQCBzdGF0aWMgYm9vbCBwZ3NzX3RyYWNrX3V0aWxpdHkgPSB0cnVlOwkvKiB3aGV0aGVyIHRv IHRyYWNrIHV0aWxpdHkgY29tbWFuZHMgKi8KIHN0YXRpYyBib29sIHBnc3NfdHJhY2tfcGxhbm5p bmcgPSBmYWxzZTsJLyogd2hldGhlciB0byB0cmFjayBwbGFubmluZwogCQkJCQkJCQkJCQkgKiBk dXJhdGlvbiAqLwogc3RhdGljIGJvb2wgcGdzc19zYXZlID0gdHJ1ZTsJLyogd2hldGhlciB0byBz YXZlIHN0YXRzIGFjcm9zcyBzaHV0ZG93biAqLworc3RhdGljIGludAlwZ3NzX3F1ZXJ5X3RleHRf bWVtb3J5ID0gNjQ7CS8qIE1CIG9mIERTQSBmb3IgcXVlcnkgdGV4dHMgKi8KICNkZWZpbmUgcGdz c19lbmFibGVkKGxldmVsKSBcCiAJKCFJc1BhcmFsbGVsV29ya2VyKCkgJiYgXAogCShwZ3NzX3Ry YWNrID09IFBHU1NfVFJBQ0tfQUxMIHx8IFwKQEAgLTQxNiw3ICs0MjgsOCBAQCBzdGF0aWMgdm9p ZCBwZ19zdGF0X3N0YXRlbWVudHNfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJ CQkJCQkJCQkJYm9vbCBzaG93dGV4dCk7CiBzdGF0aWMgdm9pZCBlbnRyeV9kZWFsbG9jKHZvaWQp Owogc3RhdGljIGJvb2wgcXRleHRfc3RvcmUoY29uc3QgY2hhciAqcXVlcnksIGludCBxdWVyeV9s ZW4sCi0JCQkJCQlTaXplICpxdWVyeV9vZmZzZXQsIGludCAqZ2NfY291bnQpOworCQkJCQkJU2l6 ZSAqcXVlcnlfb2Zmc2V0LCBkc2FfcG9pbnRlciAqcXVlcnlfZHAsCisJCQkJCQlpbnQgKmdjX2Nv dW50KTsKIHN0YXRpYyBjaGFyICpxdGV4dF9sb2FkX2ZpbGUoU2l6ZSAqYnVmZmVyX3NpemUpOwog c3RhdGljIGNoYXIgKnF0ZXh0X2ZldGNoKFNpemUgcXVlcnlfb2Zmc2V0LCBpbnQgcXVlcnlfbGVu LAogCQkJCQkJIGNoYXIgKmJ1ZmZlciwgU2l6ZSBidWZmZXJfc2l6ZSk7CkBAIC00MjYsNiArNDM5 LDggQEAgc3RhdGljIFRpbWVzdGFtcFR6IGVudHJ5X3Jlc2V0KE9pZCB1c2VyaWQsIE9pZCBkYmlk LCBpbnQ2NCBxdWVyeWlkLCBib29sIG1pbm1heF8KIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9ub3Jt YWxpemVkX3F1ZXJ5KGNvbnN0IEp1bWJsZVN0YXRlICpqc3RhdGUsCiAJCQkJCQkJCQkgICBjb25z dCBjaGFyICpxdWVyeSwKIAkJCQkJCQkJCSAgIGludCBxdWVyeV9sb2MsIGludCAqcXVlcnlfbGVu X3ApOworc3RhdGljIHZvaWQgcGdzc19xdGV4dF9kc2FfYXR0YWNoKHZvaWQpOworc3RhdGljIHZv aWQgcGdzc19xdWVyeV90ZXh0X21lbW9yeV9hc3NpZ24oaW50IG5ld3ZhbCwgdm9pZCAqZXh0cmEp Owogc3RhdGljIHZvaWQgcGdzc19lbnRyeV9pbml0KFBnU3RhdFNoYXJlZF9QZ3NzICpzaGFyZWRf ZW50cnksCiAJCQkJCQkJY29uc3QgcGdzc0hhc2hLZXkgKmtleSwgaW50IGVuY29kaW5nKTsKIHN0 YXRpYyB2b2lkIHBnc3Nfc3RvcmVfcXVlcnlfdGV4dChQZ1N0YXRTaGFyZWRfUGdzcyAqc2hhcmVk X2VudHJ5LApAQCAtNTQwLDYgKzU1NSwxOSBAQCBfUEdfaW5pdCh2b2lkKQogCQkJCQkJCSBOVUxM LAogCQkJCQkJCSBOVUxMKTsKIAorCURlZmluZUN1c3RvbUludFZhcmlhYmxlKCJwZ19zdGF0X3N0 YXRlbWVudHMucXVlcnlfdGV4dF9tZW1vcnkiLAorCQkJCQkJCSJBbW91bnQgb2Ygc2hhcmVkIG1l bW9yeSAoTUIpIGZvciBzdG9yaW5nIHF1ZXJ5IHRleHRzLiIsCisJCQkJCQkJTlVMTCwKKwkJCQkJ CQkmcGdzc19xdWVyeV90ZXh0X21lbW9yeSwKKwkJCQkJCQk2NCwKKwkJCQkJCQkwLAorCQkJCQkJ CU1heEFsbG9jU2l6ZSAvICgxMDI0ICogMTAyNCksCisJCQkJCQkJUEdDX1NJR0hVUCwKKwkJCQkJ CQlHVUNfVU5JVF9NQiwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCXBnc3NfcXVlcnlfdGV4dF9tZW1v cnlfYXNzaWduLAorCQkJCQkJCU5VTEwpOworCiAJTWFya0dVQ1ByZWZpeFJlc2VydmVkKCJwZ19z dGF0X3N0YXRlbWVudHMiKTsKIAogCS8qCkBAIC02MzksNiArNjY3LDQ0IEBAIHBnc3Nfc2htZW1f aW5pdCh2b2lkICphcmcpCiAJRnJlZUZpbGUocWZpbGUpOwogfQogCisvKgorICogRW5zdXJlIHRo ZSBiYWNrZW5kLWxvY2FsIERTQSBwb2ludGVyIGZvciBxdWVyeSB0ZXh0cyBpcyBzZXQgdXAuCisg KiBDcmVhdGVzIHRoZSBEU0Egb24gZmlyc3QgdXNlICh1bmRlciBleGNsdXNpdmUgbG9jaykgb3Ig YXR0YWNoZXMgdG8gaXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3NzX3F0ZXh0X2RzYV9hdHRhY2go dm9pZCkKK3sKKwlib29sCQlmb3VuZDsKKworCWlmIChwZ3NzX3F0ZXh0X2RzYSAhPSBOVUxMKQor CQlyZXR1cm47CisKKwkvKiBEU0EgbmV2ZXIgY3JlYXRlZCBhbmQgbWVtb3J5IGRpc2FibGVkLCBu b3RoaW5nIHRvIGRvICovCisJaWYgKCFwZ3NzLT5kc2FfY3JlYXRlZCAmJiBwZ3NzX3F1ZXJ5X3Rl eHRfbWVtb3J5ID09IDApCisJCXJldHVybjsKKworCXBnc3NfcXRleHRfZHNhID0gR2V0TmFtZWRE U0EoInBnX3N0YXRfc3RhdGVtZW50c19xdGV4dCIsICZmb3VuZCk7CisJaWYgKCFmb3VuZCkKKwl7 CisJCWRzYV9zZXRfc2l6ZV9saW1pdChwZ3NzX3F0ZXh0X2RzYSwKKwkJCQkJCSAgIChzaXplX3Qp IHBnc3NfcXVlcnlfdGV4dF9tZW1vcnkgKiAxMDI0ICogMTAyNCk7CisJCXBnc3MtPmRzYV9jcmVh dGVkID0gdHJ1ZTsKKwl9Cit9CisKKy8qCisgKiBHVUMgYXNzaWduX2hvb2sgZm9yIHBnX3N0YXRf c3RhdGVtZW50cy5xdWVyeV90ZXh0X21lbW9yeS4KKyAqIFVwZGF0ZSB0aGUgRFNBIHNpemUgbGlt aXQgd2hlbiB0aGUgc2V0dGluZyBjaGFuZ2VzIGF0IHJ1bnRpbWUuCisgKi8KK3N0YXRpYyB2b2lk CitwZ3NzX3F1ZXJ5X3RleHRfbWVtb3J5X2Fzc2lnbihpbnQgbmV3dmFsLCB2b2lkICpleHRyYSkK K3sKKwlpZiAocGdzc19xdGV4dF9kc2EpCisJCWRzYV9zZXRfc2l6ZV9saW1pdChwZ3NzX3F0ZXh0 X2RzYSwKKwkJCQkJCSAgIChzaXplX3QpIG5ld3ZhbCAqIDEwMjQgKiAxMDI0KTsKK30KKworCiAv KgogICogUG9zdC1wYXJzZS1hbmFseXNpcyBob29rOiBtYXJrIHF1ZXJ5IHdpdGggYSBxdWVyeUlk CiAgKi8KQEAgLTEwODYsMTEgKzExNTIsMTMgQEAgcGdzc19lbnRyeV9pbml0KFBnU3RhdFNoYXJl ZF9QZ3NzICpzaGFyZWRfZW50cnksCiAJc2hhcmVkX2VudHJ5LT5taW5tYXhfc3RhdHNfc2luY2Ug PSBzaGFyZWRfZW50cnktPnN0YXRzX3NpbmNlOwogCXNoYXJlZF9lbnRyeS0+cXVlcnlfbGVuID0g LTE7CiAJc2hhcmVkX2VudHJ5LT5lbmNvZGluZyA9IGVuY29kaW5nOworCXNoYXJlZF9lbnRyeS0+ cXVlcnlfdGV4dF9kcCA9IEludmFsaWREc2FQb2ludGVyOwogCXNoYXJlZF9lbnRyeS0+cXVlcnlf b2Zmc2V0ID0gMDsKIH0KIAogLyoKLSAqIFN0b3JlIHF1ZXJ5IHRleHQgaW50byBhIHNoYXJlZCBl bnRyeSB2aWEgdGhlIGV4dGVybmFsIHRleHQgZmlsZS4KKyAqIFN0b3JlIHF1ZXJ5IHRleHQgaW50 byBhIHNoYXJlZCBlbnRyeSwgdHJ5aW5nIERTQSBmaXJzdCBhbmQgZmFsbGluZyBiYWNrCisgKiB0 byB0aGUgZXh0ZXJuYWwgdGV4dCBmaWxlLgogICoKICAqIENhbGxlciBtdXN0IGhvbGQgdGhlIGVu dHJ5IGxvY2suICBEb2VzIG5vdGhpbmcgaWYgdGV4dCBpcyBhbHJlYWR5IHByZXNlbnQuCiAgKi8K QEAgLTEwOTgsMjAgKzExNjYsNDMgQEAgc3RhdGljIHZvaWQKIHBnc3Nfc3RvcmVfcXVlcnlfdGV4 dChQZ1N0YXRTaGFyZWRfUGdzcyAqc2hhcmVkX2VudHJ5LAogCQkJCQkgIGNvbnN0IGNoYXIgKnF1 ZXJ5LCBpbnQgcXVlcnlfbGVuLCBpbnQgZW5jb2RpbmcpCiB7Ci0JU2l6ZQkJcXVlcnlfb2Zmc2V0 OwotCWludAkJCWdjX2NvdW50OworCWRzYV9wb2ludGVyIGRwOwogCiAJaWYgKHNoYXJlZF9lbnRy eS0+cXVlcnlfbGVuID49IDApCiAJCXJldHVybjsKIAotCUxXTG9ja0FjcXVpcmUoJnBnc3MtPmxv Y2subG9jaywgTFdfU0hBUkVEKTsKLQlpZiAocXRleHRfc3RvcmUocXVlcnksIHF1ZXJ5X2xlbiwg JnF1ZXJ5X29mZnNldCwgJmdjX2NvdW50KSkKKwlwZ3NzX3F0ZXh0X2RzYV9hdHRhY2goKTsKKwlk cCA9IEludmFsaWREc2FQb2ludGVyOworCWlmIChwZ3NzX3F0ZXh0X2RzYSAmJiBwZ3NzX3F1ZXJ5 X3RleHRfbWVtb3J5ID4gMCkKKwkJZHAgPSBkc2FfYWxsb2NhdGVfZXh0ZW5kZWQocGdzc19xdGV4 dF9kc2EsIHF1ZXJ5X2xlbiArIDEsCisJCQkJCQkJCSAgIERTQV9BTExPQ19OT19PT00pOworCisJ aWYgKERzYVBvaW50ZXJJc1ZhbGlkKGRwKSkKIAl7Ci0JCXNoYXJlZF9lbnRyeS0+cXVlcnlfb2Zm c2V0ID0gcXVlcnlfb2Zmc2V0OworCQljaGFyCSAgICpkc3QgPSBkc2FfZ2V0X2FkZHJlc3MocGdz c19xdGV4dF9kc2EsIGRwKTsKKworCQltZW1jcHkoZHN0LCBxdWVyeSwgcXVlcnlfbGVuKTsKKwkJ ZHN0W3F1ZXJ5X2xlbl0gPSAnXDAnOworCQlzaGFyZWRfZW50cnktPnF1ZXJ5X3RleHRfZHAgPSBk cDsKIAkJc2hhcmVkX2VudHJ5LT5xdWVyeV9sZW4gPSBxdWVyeV9sZW47CiAJCXNoYXJlZF9lbnRy eS0+ZW5jb2RpbmcgPSBlbmNvZGluZzsKIAl9Ci0JTFdMb2NrUmVsZWFzZSgmcGdzcy0+bG9jay5s b2NrKTsKKwllbHNlCisJeworCQlTaXplCQlxdWVyeV9vZmZzZXQ7CisJCWRzYV9wb2ludGVyIHF1 ZXJ5X2RwOworCQlpbnQJCQlnY19jb3VudDsKKworCQlMV0xvY2tBY3F1aXJlKCZwZ3NzLT5sb2Nr LmxvY2ssIExXX1NIQVJFRCk7CisJCWlmIChxdGV4dF9zdG9yZShxdWVyeSwgcXVlcnlfbGVuLCAm cXVlcnlfb2Zmc2V0LAorCQkJCQkJJnF1ZXJ5X2RwLCAmZ2NfY291bnQpKQorCQl7CisJCQlzaGFy ZWRfZW50cnktPnF1ZXJ5X29mZnNldCA9IHF1ZXJ5X29mZnNldDsKKwkJCXNoYXJlZF9lbnRyeS0+ cXVlcnlfbGVuID0gcXVlcnlfbGVuOworCQkJc2hhcmVkX2VudHJ5LT5lbmNvZGluZyA9IGVuY29k aW5nOworCQl9CisJCUxXTG9ja1JlbGVhc2UoJnBnc3MtPmxvY2subG9jayk7CisJfQogfQogCiAv KgpAQCAtMTY5MiwxMCArMTc4MywyMyBAQCBwZ19zdGF0X3N0YXRlbWVudHNfaW50ZXJuYWwoRnVu Y3Rpb25DYWxsSW5mbyBmY2luZm8sCiAKIAkJCQlpZiAoc2hhcmVkX2VudHJ5LT5xdWVyeV9sZW4g Pj0gMCkKIAkJCQl7Ci0JCQkJCXFzdHIgPSBxdGV4dF9mZXRjaChzaGFyZWRfZW50cnktPnF1ZXJ5 X29mZnNldCwKLQkJCQkJCQkJCSAgIHNoYXJlZF9lbnRyeS0+cXVlcnlfbGVuLAotCQkJCQkJCQkJ ICAgcWJ1ZmZlciwKLQkJCQkJCQkJCSAgIHFidWZmZXJfc2l6ZSk7CisJCQkJCWlmIChEc2FQb2lu dGVySXNWYWxpZChzaGFyZWRfZW50cnktPnF1ZXJ5X3RleHRfZHApKQorCQkJCQl7CisJCQkJCQlw Z3NzX3F0ZXh0X2RzYV9hdHRhY2goKTsKKwkJCQkJCS8qCisJCQkJCQkgKiBYWFg6IHNob3VsZCB3 ZSBhZGQgYSB3YXJuaW5nIGlmIHdlIGhhdmUgYSB2YWxpZCBEU0EKKwkJCQkJCSAqIHBvaW50ZXIg YnV0IGNhbid0IGF0dGFjaCB0byB0aGUgRFNBPyBJdCBzaG91bGQgYmUKKwkJCQkJCSAqIHJhcmUs IGlmIGV2ZXIuCisJCQkJCQkgKi8KKwkJCQkJCWlmIChwZ3NzX3F0ZXh0X2RzYSkKKwkJCQkJCQlx c3RyID0gKGNoYXIgKikgZHNhX2dldF9hZGRyZXNzKHBnc3NfcXRleHRfZHNhLAorCQkJCQkJCQkJ CQkJCQkJc2hhcmVkX2VudHJ5LT5xdWVyeV90ZXh0X2RwKTsKKwkJCQkJfQorCQkJCQllbHNlCisJ CQkJCQlxc3RyID0gcXRleHRfZmV0Y2goc2hhcmVkX2VudHJ5LT5xdWVyeV9vZmZzZXQsCisJCQkJ CQkJCQkJICAgc2hhcmVkX2VudHJ5LT5xdWVyeV9sZW4sCisJCQkJCQkJCQkJICAgcWJ1ZmZlciwK KwkJCQkJCQkJCQkgICBxYnVmZmVyX3NpemUpOwogCQkJCX0KIAogCQkJCWlmIChxc3RyKQpAQCAt MTkyNCwxNCArMjAyOCw0MyBAQCBwZ19zdGF0X3N0YXRlbWVudHNfaW5mbyhQR19GVU5DVElPTl9B UkdTKQogICovCiBzdGF0aWMgYm9vbAogcXRleHRfc3RvcmUoY29uc3QgY2hhciAqcXVlcnksIGlu dCBxdWVyeV9sZW4sCi0JCQlTaXplICpxdWVyeV9vZmZzZXQsIGludCAqZ2NfY291bnQpCisJCQlT aXplICpxdWVyeV9vZmZzZXQsIGRzYV9wb2ludGVyICpxdWVyeV9kcCwKKwkJCWludCAqZ2NfY291 bnQpCiB7CiAJU2l6ZQkJb2ZmOwogCWludAkJCWZkOwogCiAJKnF1ZXJ5X29mZnNldCA9IDA7CisJ KnF1ZXJ5X2RwID0gSW52YWxpZERzYVBvaW50ZXI7CiAKIAkvKgorCSAqIFRyeSB0byBzdG9yZSB0 aGUgcXVlcnkgdGV4dCBpbiBEU0EgbWVtb3J5IGZpcnN0LCBvdGhlcndpc2Ugd3JpdGUgdG8KKwkg KiBkaXNrLgorCSAqCisJICogQ2FsbGVyIG11c3QgaGF2ZSBjYWxsZWQgcGdzc19xdGV4dF9kc2Ff YXR0YWNoKCkgYmVmb3JlIGFjcXVpcmluZworCSAqIHBnc3MtPmxvY2sgdG8gYXZvaWQgZGVhZGxv Y2sgb24gZmlyc3QtdGltZSBEU0EgY3JlYXRpb24uCisJICovCisJaWYgKHBnc3NfcXRleHRfZHNh ICYmIHBnc3NfcXVlcnlfdGV4dF9tZW1vcnkgPiAwKQorCXsKKwkJZHNhX3BvaW50ZXIgZHA7CisK KwkJZHAgPSBkc2FfYWxsb2NhdGVfZXh0ZW5kZWQocGdzc19xdGV4dF9kc2EsIHF1ZXJ5X2xlbiAr IDEsCisJCQkJCQkJCSAgIERTQV9BTExPQ19OT19PT00pOworCQlpZiAoRHNhUG9pbnRlcklzVmFs aWQoZHApKQorCQl7CisJCQljaGFyCSAgICpkc3QgPSBkc2FfZ2V0X2FkZHJlc3MocGdzc19xdGV4 dF9kc2EsIGRwKTsKKworCQkJbWVtY3B5KGRzdCwgcXVlcnksIHF1ZXJ5X2xlbik7CisJCQlkc3Rb cXVlcnlfbGVuXSA9ICdcMCc7CisJCQkqcXVlcnlfZHAgPSBkcDsKKwkJCXJldHVybiB0cnVlOwor CQl9CisJfQorCisJLyoKKwkgKiBEU0EgYWxsb2NhdGlvbiBmYWlsZWQgKG1lbW9yeSBsaW1pdCBy ZWFjaGVkKS4gIEZhbGwgYmFjayB0byB0aGUKKwkgKiBleHRlcm5hbCBxdWVyeSB0ZXh0IGZpbGUu CisJICoKIAkgKiBXZSB1c2UgYSBzcGlubG9jayB0byBwcm90ZWN0IGV4dGVudC9uX3dyaXRlcnMv Z2NfY291bnQsIHNvIHRoYXQKIAkgKiBtdWx0aXBsZSBwcm9jZXNzZXMgbWF5IGV4ZWN1dGUgdGhp cyBmdW5jdGlvbiBjb25jdXJyZW50bHkuCiAJICovCkBAIC0yMjIxLDYgKzIzNTQsMTAgQEAgZ2Nf cXRleHRzKHZvaWQpCiAKIAkJc2hhcmVkX2VudHJ5ID0gKFBnU3RhdFNoYXJlZF9QZ3NzICopIGRz YV9nZXRfYWRkcmVzcyhwZ1N0YXRMb2NhbC5kc2EsIHAtPmJvZHkpOwogCisJCS8qIFNraXAgZW50 cmllcyB3aG9zZSB0ZXh0IGxpdmVzIGluIERTQSwgbm90IGluIHRoZSBmaWxlICovCisJCWlmIChE c2FQb2ludGVySXNWYWxpZChzaGFyZWRfZW50cnktPnF1ZXJ5X3RleHRfZHApKQorCQkJY29udGlu dWU7CisKIAkJcXVlcnlfbGVuID0gc2hhcmVkX2VudHJ5LT5xdWVyeV9sZW47CiAJCWlmIChxdWVy eV9sZW4gPCAwKQogCQkJY29udGludWU7CkBAIC0yMjkyLDcgKzI0MjksOCBAQCBnY19mYWlsOgog CiAJLyoKIAkgKiBTaW5jZSB0aGUgY29udGVudHMgb2YgdGhlIGV4dGVybmFsIGZpbGUgYXJlIG5v dyB1bmNlcnRhaW4sIG1hcmsgYWxsCi0JICogZW50cmllcyBhcyBoYXZpbmcgaW52YWxpZCB0ZXh0 cy4KKwkgKiBmaWxlLWJhc2VkIHRleHQgZW50cmllcyBhcyBoYXZpbmcgaW52YWxpZCB0ZXh0cy4g IERTQSBlbnRyaWVzIGFyZQorCSAqIHVuYWZmZWN0ZWQuCiAJICovCiAJZHNoYXNoX3NlcV9pbml0 KCZoc3RhdCwgcGdTdGF0TG9jYWwuc2hhcmVkX2hhc2gsIGZhbHNlKTsKIAl3aGlsZSAoKHAgPSBk c2hhc2hfc2VxX25leHQoJmhzdGF0KSkgIT0gTlVMTCkKQEAgLTIzMDUsNiArMjQ0Myw4IEBAIGdj X2ZhaWw6CiAJCQljb250aW51ZTsKIAogCQlzaGFyZWRfZW50cnkgPSAoUGdTdGF0U2hhcmVkX1Bn c3MgKikgZHNhX2dldF9hZGRyZXNzKHBnU3RhdExvY2FsLmRzYSwgcC0+Ym9keSk7CisJCWlmIChE c2FQb2ludGVySXNWYWxpZChzaGFyZWRfZW50cnktPnF1ZXJ5X3RleHRfZHApKQorCQkJY29udGlu dWU7CiAJCXNoYXJlZF9lbnRyeS0+cXVlcnlfb2Zmc2V0ID0gMDsKIAkJc2hhcmVkX2VudHJ5LT5x dWVyeV9sZW4gPSAtMTsKIAl9CkBAIC0yMzM4LDYgKzI0NzgsMTMgQEAgaWYgKHNoYXJlZCkgeyBc CiAJfSBcCiAJZWxzZSBcCiAJeyBcCisJCWlmIChEc2FQb2ludGVySXNWYWxpZCgoc2hhcmVkKS0+ cXVlcnlfdGV4dF9kcCkpIFwKKwkJeyBcCisJCQlwZ3NzX3F0ZXh0X2RzYV9hdHRhY2goKTsgXAor CQkJaWYgKHBnc3NfcXRleHRfZHNhKSBcCisJCQkJZHNhX2ZyZWUocGdzc19xdGV4dF9kc2EsIChz aGFyZWQpLT5xdWVyeV90ZXh0X2RwKTsgXAorCQkJKHNoYXJlZCktPnF1ZXJ5X3RleHRfZHAgPSBJ bnZhbGlkRHNhUG9pbnRlcjsgXAorCQl9IFwKIAkJKHNoYXJlZCktPnF1ZXJ5X2xlbiA9IC0xOyBc CiAJCXBnc3RhdF9kcm9wX2VudHJ5KFBHU1RBVF9LSU5EX1BHU1MsIChrZXlfcHRyKS0+ZGJpZCwg XAogCQkJCQkJICBwZ3NzX29iamlkKGtleV9wdHIpKTsgXApAQCAtMjQzOCw2ICsyNTg1LDEzIEBA IGVudHJ5X3Jlc2V0KE9pZCB1c2VyaWQsIE9pZCBkYmlkLCBpbnQ2NCBxdWVyeWlkLCBib29sIG1p bm1heF9vbmx5KQogCQkJCX0KIAkJCQllbHNlCiAJCQkJeworCQkJCQlpZiAoRHNhUG9pbnRlcklz VmFsaWQoc2hhcmVkX2VudHJ5LT5xdWVyeV90ZXh0X2RwKSkKKwkJCQkJeworCQkJCQkJcGdzc19x dGV4dF9kc2FfYXR0YWNoKCk7CisJCQkJCQlpZiAocGdzc19xdGV4dF9kc2EpCisJCQkJCQkJZHNh X2ZyZWUocGdzc19xdGV4dF9kc2EsIHNoYXJlZF9lbnRyeS0+cXVlcnlfdGV4dF9kcCk7CisJCQkJ CQlzaGFyZWRfZW50cnktPnF1ZXJ5X3RleHRfZHAgPSBJbnZhbGlkRHNhUG9pbnRlcjsKKwkJCQkJ fQogCQkJCQlzaGFyZWRfZW50cnktPnF1ZXJ5X2xlbiA9IC0xOwogCiAJCQkJCS8qIENvbGxlY3Qg Zm9yIGRlZmVycmVkIGRyb3AgKi8KQEAgLTI2NjgsMTMgKzI4MjIsMjMgQEAgcGdzc190b19zZXJp YWxpemVkX2RhdGEoY29uc3QgUGdTdGF0X0hhc2hLZXkgKmtleSwKIAl7CiAJCWNoYXIJICAgKnFz dHIgPSBOVUxMOwogCi0JCWlmICghcGdzc19xdGV4dF93cml0ZV9idWZmZXIgJiYgcGdzcykKLQkJ CXBnc3NfcXRleHRfd3JpdGVfYnVmZmVyID0gcXRleHRfbG9hZF9maWxlKCZwZ3NzX3F0ZXh0X3dy aXRlX2J1ZmZlcl9zaXplKTsKKwkJaWYgKERzYVBvaW50ZXJJc1ZhbGlkKGVudHJ5LT5xdWVyeV90 ZXh0X2RwKSkKKwkJeworCQkJcGdzc19xdGV4dF9kc2FfYXR0YWNoKCk7CisJCQlpZiAocGdzc19x dGV4dF9kc2EpCisJCQkJcXN0ciA9IChjaGFyICopIGRzYV9nZXRfYWRkcmVzcyhwZ3NzX3F0ZXh0 X2RzYSwKKwkJCQkJCQkJCQkJCWVudHJ5LT5xdWVyeV90ZXh0X2RwKTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCWlmICghcGdzc19xdGV4dF93cml0ZV9idWZmZXIgJiYgcGdzcykKKwkJCQlwZ3NzX3F0 ZXh0X3dyaXRlX2J1ZmZlciA9IHF0ZXh0X2xvYWRfZmlsZSgmcGdzc19xdGV4dF93cml0ZV9idWZm ZXJfc2l6ZSk7CiAKLQkJaWYgKHBnc3NfcXRleHRfd3JpdGVfYnVmZmVyKQotCQkJcXN0ciA9IHF0 ZXh0X2ZldGNoKGVudHJ5LT5xdWVyeV9vZmZzZXQsIHF1ZXJ5X2xlbiwKLQkJCQkJCQkgICBwZ3Nz X3F0ZXh0X3dyaXRlX2J1ZmZlciwKLQkJCQkJCQkgICBwZ3NzX3F0ZXh0X3dyaXRlX2J1ZmZlcl9z aXplKTsKKwkJCWlmIChwZ3NzX3F0ZXh0X3dyaXRlX2J1ZmZlcikKKwkJCQlxc3RyID0gcXRleHRf ZmV0Y2goZW50cnktPnF1ZXJ5X29mZnNldCwgcXVlcnlfbGVuLAorCQkJCQkJCQkgICBwZ3NzX3F0 ZXh0X3dyaXRlX2J1ZmZlciwKKwkJCQkJCQkJICAgcGdzc19xdGV4dF93cml0ZV9idWZmZXJfc2l6 ZSk7CisJCX0KIAogCQlpZiAocXN0cikKIAkJCXBnc3RhdF93cml0ZV9jaHVuayhzdGF0ZmlsZSwg cXN0ciwgcXVlcnlfbGVuICsgMSk7CkBAIC0yNzIzLDE0ICsyODg3LDE2IEBAIHBnc3NfZnJvbV9z ZXJpYWxpemVkX2RhdGEoY29uc3QgUGdTdGF0X0hhc2hLZXkgKmtleSwKIAkvKiBJbml0aWFsaXpl IHRleHQgZmllbGRzICovCiAJZW50cnktPnF1ZXJ5X2xlbiA9IC0xOwogCWVudHJ5LT5lbmNvZGlu ZyA9IGVuY29kaW5nOworCWVudHJ5LT5xdWVyeV90ZXh0X2RwID0gSW52YWxpZERzYVBvaW50ZXI7 CiAJZW50cnktPnF1ZXJ5X29mZnNldCA9IDA7CiAKIAkvKgotCSAqIFJlYWQgdGhlIHF1ZXJ5IHRl eHQgYW5kIHN0b3JlIGl0IGluIHRoZSBleHRlcm5hbCBmaWxlLgorCSAqIFJlYWQgdGhlIHF1ZXJ5 IHRleHQgYW5kIHN0b3JlIGl0IGRpcmVjdGx5IGluIHRoZSBlbnRyeS4KIAkgKi8KIAlpZiAocXVl cnlfbGVuID49IDApCiAJewogCQljaGFyCSAgICpidWYgPSBwYWxsb2MocXVlcnlfbGVuICsgMSk7 CisJCWRzYV9wb2ludGVyIGRwID0gSW52YWxpZERzYVBvaW50ZXI7CiAKIAkJaWYgKCFwZ3N0YXRf cmVhZF9jaHVuayhzdGF0ZmlsZSwgYnVmLCBxdWVyeV9sZW4gKyAxKSkKIAkJewpAQCAtMjczOCwy NSArMjkwNCw0OSBAQCBwZ3NzX2Zyb21fc2VyaWFsaXplZF9kYXRhKGNvbnN0IFBnU3RhdF9IYXNo S2V5ICprZXksCiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAotCQlpZiAoIXBnc3NfcXRleHRfcmVi dWlsZF9maWxlKQorCQkvKiBUcnkgRFNBIGFsbG9jYXRpb24gZmlyc3QgKi8KKwkJcGdzc19xdGV4 dF9kc2FfYXR0YWNoKCk7CisJCWlmIChwZ3NzX3F0ZXh0X2RzYSAmJiBwZ3NzX3F1ZXJ5X3RleHRf bWVtb3J5ID4gMCkKIAkJewotCQkJcGdzc19xdGV4dF9yZWJ1aWxkX2ZpbGUgPSBBbGxvY2F0ZUZp bGUoUEdTU19URVhUX0ZJTEUsIFBHX0JJTkFSWV9XKTsKLQkJCWlmICghcGdzc19xdGV4dF9yZWJ1 aWxkX2ZpbGUpCisJCQlkcCA9IGRzYV9hbGxvY2F0ZV9leHRlbmRlZChwZ3NzX3F0ZXh0X2RzYSwg cXVlcnlfbGVuICsgMSwKKwkJCQkJCQkJCSAgIERTQV9BTExPQ19OT19PT00pOworCQkJaWYgKERz YVBvaW50ZXJJc1ZhbGlkKGRwKSkKIAkJCXsKLQkJCQlwZnJlZShidWYpOwotCQkJCXJldHVybiBm YWxzZTsKKwkJCQljaGFyCSAgICpkc3QgPSBkc2FfZ2V0X2FkZHJlc3MocGdzc19xdGV4dF9kc2Es IGRwKTsKKworCQkJCW1lbWNweShkc3QsIGJ1ZiwgcXVlcnlfbGVuICsgMSk7CiAJCQl9Ci0JCQlw Z3NzX3F0ZXh0X3JlYnVpbGRfZXh0ZW50ID0gMDsKIAkJfQogCi0JCWVudHJ5LT5xdWVyeV9vZmZz ZXQgPSBwZ3NzX3F0ZXh0X3JlYnVpbGRfZXh0ZW50OwotCi0JCWlmIChmd3JpdGUoYnVmLCAxLCBx dWVyeV9sZW4gKyAxLCBwZ3NzX3F0ZXh0X3JlYnVpbGRfZmlsZSkgIT0gKHNpemVfdCkgKHF1ZXJ5 X2xlbiArIDEpKQorCQlpZiAoRHNhUG9pbnRlcklzVmFsaWQoZHApKQogCQl7Ci0JCQlwZnJlZShi dWYpOwotCQkJcmV0dXJuIGZhbHNlOworCQkJZW50cnktPnF1ZXJ5X3RleHRfZHAgPSBkcDsKKwkJ CWVudHJ5LT5xdWVyeV9vZmZzZXQgPSAwOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogRFNBIHVu YXZhaWxhYmxlIG9yIGZ1bGw7IGZhbGwgYmFjayB0byBmaWxlICovCisJCQlpZiAoIXBnc3NfcXRl eHRfcmVidWlsZF9maWxlKQorCQkJeworCQkJCXBnc3NfcXRleHRfcmVidWlsZF9maWxlID0gQWxs b2NhdGVGaWxlKFBHU1NfVEVYVF9GSUxFLCBQR19CSU5BUllfVyk7CisJCQkJaWYgKCFwZ3NzX3F0 ZXh0X3JlYnVpbGRfZmlsZSkKKwkJCQl7CisJCQkJCXBmcmVlKGJ1Zik7CisJCQkJCXJldHVybiBm YWxzZTsKKwkJCQl9CisJCQkJcGdzc19xdGV4dF9yZWJ1aWxkX2V4dGVudCA9IDA7CisJCQl9CisK KwkJCWVudHJ5LT5xdWVyeV90ZXh0X2RwID0gSW52YWxpZERzYVBvaW50ZXI7CisJCQllbnRyeS0+ cXVlcnlfb2Zmc2V0ID0gcGdzc19xdGV4dF9yZWJ1aWxkX2V4dGVudDsKKworCQkJaWYgKGZ3cml0 ZShidWYsIDEsIHF1ZXJ5X2xlbiArIDEsIHBnc3NfcXRleHRfcmVidWlsZF9maWxlKSAhPSAoc2l6 ZV90KSAocXVlcnlfbGVuICsgMSkpCisJCQl7CisJCQkJcGZyZWUoYnVmKTsKKwkJCQlyZXR1cm4g ZmFsc2U7CisJCQl9CisJCQlwZ3NzX3F0ZXh0X3JlYnVpbGRfZXh0ZW50ICs9IHF1ZXJ5X2xlbiAr IDE7CiAJCX0KLQkJcGdzc19xdGV4dF9yZWJ1aWxkX2V4dGVudCArPSBxdWVyeV9sZW4gKyAxOwog CiAJCWVudHJ5LT5xdWVyeV9sZW4gPSBxdWVyeV9sZW47CiAJCWVudHJ5LT5lbmNvZGluZyA9IGVu Y29kaW5nOwpAQCAtMjg4NSwxMiArMzA3NSwzMyBAQCBlbnRyeV9kZWFsbG9jKHZvaWQpCiAJZWxz ZQogCQlwZ3NzLT5tZWFuX3F1ZXJ5X2xlbiA9IEFTU1VNRURfTEVOR1RIX0lOSVQ7CiAKLQkvKiBE cm9wIHRoZSBib3R0b20gZnJhY3Rpb24gKi8KKwkvKiBEcm9wIHRoZSBib3R0b20gZnJhY3Rpb24s IGZyZWVpbmcgRFNBIHRleHQgaWYgYXBwbGljYWJsZSAqLwogCW52aWN0aW1zID0gTWF4KDEwLCBu ZW50cmllcyAqIFVTQUdFX0RFQUxMT0NfUEVSQ0VOVCAvIDEwMCk7CiAJbnZpY3RpbXMgPSBNaW4o bnZpY3RpbXMsIG5lbnRyaWVzKTsKIAorCXBnc3NfcXRleHRfZHNhX2F0dGFjaCgpOwogCWZvciAo aSA9IDA7IGkgPCBudmljdGltczsgaSsrKQogCXsKKwkJUGdTdGF0X0VudHJ5UmVmICp2aWN0aW1f cmVmOworCisJCS8qIEZyZWUgRFNBIHRleHQgZnJvbSB0aGUgZW50cnkgYmVmb3JlIGRyb3BwaW5n IGl0ICovCisJCXZpY3RpbV9yZWYgPSBwZ3N0YXRfZ2V0X2VudHJ5X3JlZihQR1NUQVRfS0lORF9Q R1NTLAorCQkJCQkJCQkJCSAgZW50cmllc1tpXS5rZXkuZGJpZCwKKwkJCQkJCQkJCQkgIHBnc3Nf b2JqaWQoJmVudHJpZXNbaV0ua2V5KSwKKwkJCQkJCQkJCQkgIGZhbHNlLCBOVUxMKTsKKwkJaWYg KHZpY3RpbV9yZWYpCisJCXsKKwkJCVBnU3RhdFNoYXJlZF9QZ3NzICp2aWN0aW0gPSAoUGdTdGF0 U2hhcmVkX1Bnc3MgKikgdmljdGltX3JlZi0+c2hhcmVkX3N0YXRzOworCisJCQlpZiAoRHNhUG9p bnRlcklzVmFsaWQodmljdGltLT5xdWVyeV90ZXh0X2RwKSkKKwkJCXsKKwkJCQlpZiAocGdzc19x dGV4dF9kc2EpCisJCQkJCWRzYV9mcmVlKHBnc3NfcXRleHRfZHNhLCB2aWN0aW0tPnF1ZXJ5X3Rl eHRfZHApOworCQkJCXZpY3RpbS0+cXVlcnlfdGV4dF9kcCA9IEludmFsaWREc2FQb2ludGVyOwor CQkJfQorCQkJdmljdGltLT5xdWVyeV9sZW4gPSAtMTsKKwkJfQorCiAJCXBnc3RhdF9kcm9wX2Vu dHJ5KFBHU1RBVF9LSU5EX1BHU1MsCiAJCQkJCQkgIGVudHJpZXNbaV0ua2V5LmRiaWQsCiAJCQkJ CQkgIHBnc3Nfb2JqaWQoJmVudHJpZXNbaV0ua2V5KSk7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3Nn bWwvcGdzdGF0c3RhdGVtZW50cy5zZ21sIGIvZG9jL3NyYy9zZ21sL3Bnc3RhdHN0YXRlbWVudHMu c2dtbAppbmRleCAxOWIxZGFiNzRjNy4uMGY0YWIzNDk2NWIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9wZ3N0YXRzdGF0ZW1lbnRzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Bnc3RhdHN0YXRl bWVudHMuc2dtbApAQCAtOTI0LDYgKzkyNCwzMCBAQCBjYWxscyB8IDIKICAgICA8L2xpc3RpdGVt PgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+Cisg ICAgIDx2YXJuYW1lPnBnX3N0YXRfc3RhdGVtZW50cy5xdWVyeV90ZXh0X21lbW9yeTwvdmFybmFt ZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1h cnk+PHZhcm5hbWU+cGdfc3RhdF9zdGF0ZW1lbnRzLnF1ZXJ5X3RleHRfbWVtb3J5PC92YXJuYW1l PiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+Cisg ICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDx2YXJuYW1l PnBnX3N0YXRfc3RhdGVtZW50cy5xdWVyeV90ZXh0X21lbW9yeTwvdmFybmFtZT4gc3BlY2lmaWVz IHRoZQorICAgICAgYW1vdW50IG9mIHNoYXJlZCBtZW1vcnkgdXNlZCBmb3Igc3RvcmluZyBxdWVy eSB0ZXh0cyBpbgorICAgICAgRFNBIG1lbW9yeS4gIFdoZW4gdGhpcyBsaW1pdCBpcyByZWFjaGVk LCBuZXcgcXVlcnkgdGV4dHMgb3ZlcmZsb3cgdG8gYW4KKyAgICAgIG9uLWRpc2sgZmlsZS4gIFNl dHRpbmcgdGhpcyB0byA8bGl0ZXJhbD4wPC9saXRlcmFsPiBkaXNhYmxlcyBEU0Egc3RvcmFnZQor ICAgICAgZW50aXJlbHksIGNhdXNpbmcgYWxsIHF1ZXJ5IHRleHRzIHRvIGJlIHdyaXR0ZW4gdG8g ZGlzay4KKyAgICAgIElmIHRoaXMgdmFsdWUgaXMgc3BlY2lmaWVkIHdpdGhvdXQgdW5pdHMsIGl0 IGlzIHRha2VuIGFzIG1lZ2FieXRlcy4KKyAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxsaXRl cmFsPjY0TUI8L2xpdGVyYWw+LgorICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGNoYW5nZWQg YXQgYW55IHRpbWUgYnkgcmVsb2FkaW5nIHRoZSBzZXJ2ZXIKKyAgICAgIGNvbmZpZ3VyYXRpb24u ICBMb3dlcmluZyB0aGUgdmFsdWUgZG9lcyBub3QgaW1tZWRpYXRlbHkgZnJlZSBleGlzdGluZwor ICAgICAgRFNBIGFsbG9jYXRpb25zOyB0aGV5IGFyZSByZWxlYXNlZCBncmFkdWFsbHkgYXMgZW50 cmllcyBhcmUgZXZpY3RlZC4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zh cmxpc3RlbnRyeT4KKwogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT4KICAgICAgPHZhcm5h bWU+cGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrPC92YXJuYW1lPiAoPHR5cGU+ZW51bTwvdHlwZT4p CkBAIC0xMDEyLDE0ICsxMDM2LDE2IEBAIGNhbGxzIHwgMgogCiAgIDxwYXJhPgogICAgVGhlIG1v ZHVsZSByZXF1aXJlcyBhZGRpdGlvbmFsIHNoYXJlZCBtZW1vcnkgcHJvcG9ydGlvbmFsIHRvCi0g ICA8dmFybmFtZT5wZ19zdGF0X3N0YXRlbWVudHMubWF4PC92YXJuYW1lPi4gIE5vdGUgdGhhdCB0 aGlzIG1lbW9yeSBpcwotICAgY29uc3VtZWQgd2hlbmV2ZXIgdGhlIG1vZHVsZSBpcyBsb2FkZWQs IGV2ZW4gaWYKKyAgIDx2YXJuYW1lPnBnX3N0YXRfc3RhdGVtZW50cy5tYXg8L3Zhcm5hbWU+IGFu ZAorICAgPHZhcm5hbWU+cGdfc3RhdF9zdGF0ZW1lbnRzLnF1ZXJ5X3RleHRfbWVtb3J5PC92YXJu YW1lPi4gIE5vdGUgdGhhdCB0aGlzCisgICBtZW1vcnkgaXMgY29uc3VtZWQgd2hlbmV2ZXIgdGhl IG1vZHVsZSBpcyBsb2FkZWQsIGV2ZW4gaWYKICAgIDx2YXJuYW1lPnBnX3N0YXRfc3RhdGVtZW50 cy50cmFjazwvdmFybmFtZT4gaXMgc2V0IHRvIDxsaXRlcmFsPm5vbmU8L2xpdGVyYWw+LgogICA8 L3BhcmE+CiAKICAgPHBhcmE+CiAgICBUaGVzZSBwYXJhbWV0ZXJzIGFyZSB0eXBpY2FsbHkgc2V0 IGluIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPi4KLSAgIE5vdGUgdGhhdCA8 dmFybmFtZT5wZ19zdGF0X3N0YXRlbWVudHMubWF4PC92YXJuYW1lPiBjYW4gYmUgY2hhbmdlZAor ICAgTm90ZSB0aGF0IDx2YXJuYW1lPnBnX3N0YXRfc3RhdGVtZW50cy5tYXg8L3Zhcm5hbWU+IGFu ZAorICAgPHZhcm5hbWU+cGdfc3RhdF9zdGF0ZW1lbnRzLnF1ZXJ5X3RleHRfbWVtb3J5PC92YXJu YW1lPiBjYW4gYmUgY2hhbmdlZAogICAgd2l0aG91dCBhIHNlcnZlciByZXN0YXJ0IGJ5IHJlbG9h ZGluZyB0aGUgY29uZmlndXJhdGlvbi4KICAgIFR5cGljYWwgdXNhZ2UgbWlnaHQgYmU6CiAKQEAg LTEwMzAsNiArMTA1Niw3IEBAIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyA9ICdwZ19zdGF0X3N0 YXRlbWVudHMnCiBjb21wdXRlX3F1ZXJ5X2lkID0gb24KIHBnX3N0YXRfc3RhdGVtZW50cy5tYXgg PSAxMDAwMAogcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrID0gYWxsCitwZ19zdGF0X3N0YXRlbWVu dHMucXVlcnlfdGV4dF9tZW1vcnkgPSA2NAogPC9wcm9ncmFtbGlzdGluZz4KICAgPC9wYXJhPgog IDwvc2VjdDI+Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --000000000000d7d16a065247bff4 Content-Type: application/octet-stream; name="v2-0002-pg_stat_statements-modernize-entry-storage-with-p.patch" Content-Disposition: attachment; filename="v2-0002-pg_stat_statements-modernize-entry-storage-with-p.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpenry1x2 RnJvbSAyYzczY2JlMjA5MTU5NDU2MWE1MjkwM2VjYmY3ZmYyOTgwNWEwYjJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEltc2VpaCA8c2FtaW1zZWloQGdtYWlsLmNvbT4KRGF0 ZTogVGh1LCAxNCBNYXkgMjAyNiAxMjoyNzo0MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjIgMi80 XSBwZ19zdGF0X3N0YXRlbWVudHM6IG1vZGVybml6ZSBlbnRyeSBzdG9yYWdlIHdpdGgKIHBnc3Rh dCBraW5kCgpSZXBsYWNlIHRoZSBwcml2YXRlIHNoYXJlZC1tZW1vcnkgaGFzaCB0YWJsZSB3aXRo IHRoZSBwZ3N0YXQgc3Vic3lzdGVtJ3MKZHNoYXNoLCBtb3ZlIGNvdW50ZXIgdXBkYXRlcyB0byBi YWNrZW5kLWxvY2FsIHBlbmRpbmcgZW50cmllcyB0aGF0IGZsdXNoCnBlcmlvZGljYWxseSwgYW5k IGludHJvZHVjZSBhZG1pc3Npb24gY29udHJvbCB3aXRoIHRpbWVzdGFtcC10aHJvdHRsZWQKaW5s aW5lIGV2aWN0aW9uOiB3aGVuIGVudHJ5IGNvdW50IHJlYWNoZXMgcGdzc19tYXgsIGEgYmFja2Vu ZCBhdHRlbXB0cwpldmljdGlvbiB1c2luZyBhIGNvbmRpdGlvbmFsIGxvY2sgYW5kIGEgc2hhcmVk IHRpbWVzdGFtcCB0aGF0IGVuc3VyZXMgYXQKbW9zdCBvbmUgZXZpY3Rpb24gY3ljbGUgcGVyIDEw IHNlY29uZHMuICBPdGhlciBiYWNrZW5kcyBza2lwIGVudHJ5CmNyZWF0aW9uIHdpdGhvdXQgYmxv Y2tpbmcuCgpWYXJpYW5jZS9zdGRkZXYgY29tcHV0YXRpb24gdXNlcyBXZWxmb3JkJ3Mgb25saW5l IGFsZ29yaXRobSBpbiBwZXItYmFja2VuZApwZW5kaW5nIGFjY3VtdWxhdGlvbiwgbWVyZ2VkIGlu dG8gc2hhcmVkIG1lbW9yeSB2aWEgQ2hhbidzIHBhcmFsbGVsIHZhcmlhbmNlCmFsZ29yaXRobSBk dXJpbmcgZmx1c2guClNlZSA8aHR0cDovL3d3dy5qb2huZGNvb2suY29tL2Jsb2cvc3RhbmRhcmRf ZGV2aWF0aW9uLz4KCnBnX3N0YXRfc3RhdGVtZW50cy5tYXggaXMgbm93IFBHQ19TSUdIVVAgKGNo YW5nZWFibGUgd2l0aG91dCByZXN0YXJ0KS4KLS0tCiBjb250cmliL3BnX3N0YXRfc3RhdGVtZW50 cy9NYWtlZmlsZSAgICAgICAgICAgfCAgICAxICsKIC4uLi9wZ19zdGF0X3N0YXRlbWVudHMvZXhw ZWN0ZWQvcGFyYWxsZWwub3V0ICB8ICAgIDEgKwogY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMv bWVzb24uYnVpbGQgICAgICAgIHwgICAgMSArCiAuLi4vcGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjEz LS0xLjE0LnNxbCAgICAgICAgfCAgICA3ICsKIC4uLi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3Rh dF9zdGF0ZW1lbnRzLmMgICB8IDE3OTQgKysrKysrKysrLS0tLS0tLS0KIC4uLi9wZ19zdGF0X3N0 YXRlbWVudHMuY29uZiAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogLi4uL3BnX3N0YXRfc3Rh dGVtZW50cy5jb250cm9sICAgICAgICAgICAgICAgIHwgICAgMiArLQogY29udHJpYi9wZ19zdGF0 X3N0YXRlbWVudHMvc3FsL3BhcmFsbGVsLnNxbCAgIHwgICAgMSArCiBkb2Mvc3JjL3NnbWwvcGdz dGF0c3RhdGVtZW50cy5zZ21sICAgICAgICAgICAgfCAgIDE4ICstCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgICAxICsKIDEwIGZpbGVzIGNoYW5nZWQs IDEwMTEgaW5zZXJ0aW9ucygrKSwgODE2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy0tMS4xMy0tMS4x NC5zcWwKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9NYWtlZmlsZSBi L2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL01ha2VmaWxlCmluZGV4IGMyN2U5NTI5YmI2Li5k NzE0MmY3MWNmNyAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvTWFrZWZp bGUKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvTWFrZWZpbGUKQEAgLTcsNiArNyw3 IEBAIE9CSlMgPSBcCiAKIEVYVEVOU0lPTiA9IHBnX3N0YXRfc3RhdGVtZW50cwogREFUQSA9IHBn X3N0YXRfc3RhdGVtZW50cy0tMS40LnNxbCBcCisJcGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjEzLS0x LjE0LnNxbCBcCiAJcGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjEyLS0xLjEzLnNxbCBcCiAJcGdfc3Rh dF9zdGF0ZW1lbnRzLS0xLjExLS0xLjEyLnNxbCBwZ19zdGF0X3N0YXRlbWVudHMtLTEuMTAtLTEu MTEuc3FsIFwKIAlwZ19zdGF0X3N0YXRlbWVudHMtLTEuOS0tMS4xMC5zcWwgcGdfc3RhdF9zdGF0 ZW1lbnRzLS0xLjgtLTEuOS5zcWwgXApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRl bWVudHMvZXhwZWN0ZWQvcGFyYWxsZWwub3V0IGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMv ZXhwZWN0ZWQvcGFyYWxsZWwub3V0CmluZGV4IDhhZjNiZDJjOTE1Li5iZmYwZGE3NjM0YiAxMDA2 NDQKLS0tIGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvZXhwZWN0ZWQvcGFyYWxsZWwub3V0 CisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL2V4cGVjdGVkL3BhcmFsbGVsLm91dApA QCAtMjAsNiArMjAsNyBAQCBTRUxFQ1QgY291bnQoKikgRlJPTSBwZ3NzX3BhcmFsbGVsX3RhYjsK ICAgICAgMAogKDEgcm93KQogCitSRVNFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVy OwogU0VMRUNUIHF1ZXJ5LAogICBwYXJhbGxlbF93b3JrZXJzX3RvX2xhdW5jaCA+IDAgQVMgaGFz X3dvcmtlcnNfdG9fbGF1bmNoLAogICBwYXJhbGxlbF93b3JrZXJzX2xhdW5jaGVkID4gMCBBUyBo YXNfd29ya2Vyc19sYXVuY2hlZApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVu dHMvbWVzb24uYnVpbGQgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9tZXNvbi5idWlsZApp bmRleCA5ZDc4Y2I4OGI3ZC4uNzcxNDg5NDljMGQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3Rh dF9zdGF0ZW1lbnRzL21lc29uLmJ1aWxkCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRz L21lc29uLmJ1aWxkCkBAIC0yMSw2ICsyMSw3IEBAIGNvbnRyaWJfdGFyZ2V0cyArPSBwZ19zdGF0 X3N0YXRlbWVudHMKIGluc3RhbGxfZGF0YSgKICAgJ3BnX3N0YXRfc3RhdGVtZW50cy5jb250cm9s JywKICAgJ3BnX3N0YXRfc3RhdGVtZW50cy0tMS40LnNxbCcsCisgICdwZ19zdGF0X3N0YXRlbWVu dHMtLTEuMTMtLTEuMTQuc3FsJywKICAgJ3BnX3N0YXRfc3RhdGVtZW50cy0tMS4xMi0tMS4xMy5z cWwnLAogICAncGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjExLS0xLjEyLnNxbCcsCiAgICdwZ19zdGF0 X3N0YXRlbWVudHMtLTEuMTAtLTEuMTEuc3FsJywKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rh dF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy0tMS4xMy0tMS4xNC5zcWwgYi9jb250cmli L3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMtLTEuMTMtLTEuMTQuc3FsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lYjUyOGEwZDljYQotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50 cy0tMS4xMy0tMS4xNC5zcWwKQEAgLTAsMCArMSw3IEBACisvKiBjb250cmliL3BnX3N0YXRfc3Rh dGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMtLTEuMTMtLTEuMTQuc3FsICovCisKKy0tIGNvbXBs YWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBBTFRFUiBF WFRFTlNJT04KK1xlY2hvIFVzZSAiQUxURVIgRVhURU5TSU9OIHBnX3N0YXRfc3RhdGVtZW50cyBV UERBVEUgVE8gJzEuMTQnIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQUxURVIgRlVOQ1RJ T04gcGdfc3RhdF9zdGF0ZW1lbnRzKGJvb2xlYW4pIFBBUkFMTEVMIFJFU1RSSUNURUQ7CitBTFRF UiBGVU5DVElPTiBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoT2lkLCBPaWQsIGJpZ2ludCwgYm9v bGVhbikgUEFSQUxMRUwgUkVTVFJJQ1RFRDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9z dGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVu dHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKaW5kZXggOTIzMTU2Mjc5MTYuLjBlNmU2NWUzZTUxIDEw MDY0NAotLS0gYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMu YworKysgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYwpA QCAtNSw4ICs1LDEwIEBACiAgKgkJdXNhZ2UgYWNyb3NzIGEgd2hvbGUgZGF0YWJhc2UgY2x1c3Rl ci4KICAqCiAgKiBFeGVjdXRpb24gY29zdHMgYXJlIHRvdGFsZWQgZm9yIGVhY2ggZGlzdGluY3Qg c291cmNlIHF1ZXJ5LCBhbmQga2VwdCBpbgotICogYSBzaGFyZWQgaGFzaHRhYmxlLiAgKFdlIHRy YWNrIG9ubHkgYXMgbWFueSBkaXN0aW5jdCBxdWVyaWVzIGFzIHdpbGwgZml0Ci0gKiBpbiB0aGUg ZGVzaWduYXRlZCBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeS4pCisgKiBhIGRzaGFzaCB0YWJsZSBt YW5hZ2VkIGJ5IHRoZSBwZ3N0YXQgc3Vic3lzdGVtIChjdXN0b20gc3RhdHMga2luZAorICogUEdT VEFUX0tJTkRfUEdTUykuICBDb3VudGVyIHVwZGF0ZXMgYWNjdW11bGF0ZSBpbiBiYWNrZW5kLWxv Y2FsIHBlbmRpbmcKKyAqIGVudHJpZXMgYW5kIGFyZSBmbHVzaGVkIHRvIHNoYXJlZCBtZW1vcnkg cGVyaW9kaWNhbGx5IG9yIG9uIGRlbWFuZCB2aWEKKyAqIHBnc3RhdF9yZXBvcnRfYW55dGltZV9z dGF0KCkuCiAgKgogICogU3RhcnRpbmcgaW4gUG9zdGdyZXMgOS4yLCB0aGlzIG1vZHVsZSBub3Jt YWxpemVkIHF1ZXJ5IGVudHJpZXMuICBBcyBvZgogICogUG9zdGdyZXMgMTQsIHRoZSBub3JtYWxp emF0aW9uIGlzIGRvbmUgYnkgdGhlIGNvcmUgaWYgY29tcHV0ZV9xdWVyeV9pZCBpcwpAQCAtMTQs MjQgKzE2LDE1IEBACiAgKgogICogVG8gZmFjaWxpdGF0ZSBwcmVzZW50aW5nIGVudHJpZXMgdG8g dXNlcnMsIHdlIGNyZWF0ZSAicmVwcmVzZW50YXRpdmUiIHF1ZXJ5CiAgKiBzdHJpbmdzIGluIHdo aWNoIGNvbnN0YW50cyBhcmUgcmVwbGFjZWQgd2l0aCBwYXJhbWV0ZXIgc3ltYm9scyAoJG4pLCB0 bwotICogbWFrZSBpdCBjbGVhcmVyIHdoYXQgYSBub3JtYWxpemVkIGVudHJ5IGNhbiByZXByZXNl bnQuICBUbyBzYXZlIG9uIHNoYXJlZAotICogbWVtb3J5LCBhbmQgdG8gYXZvaWQgaGF2aW5nIHRv IHRydW5jYXRlIG92ZXJzaXplZCBxdWVyeSBzdHJpbmdzLCB3ZSBzdG9yZQotICogdGhlc2Ugc3Ry aW5ncyBpbiBhIHRlbXBvcmFyeSBleHRlcm5hbCBxdWVyeS10ZXh0cyBmaWxlLiAgT2Zmc2V0cyBp bnRvIHRoaXMKLSAqIGZpbGUgYXJlIGtlcHQgaW4gc2hhcmVkIG1lbW9yeS4KKyAqIG1ha2UgaXQg Y2xlYXJlciB3aGF0IGEgbm9ybWFsaXplZCBlbnRyeSBjYW4gcmVwcmVzZW50LgogICoKLSAqIE5v dGUgYWJvdXQgbG9ja2luZyBpc3N1ZXM6IHRvIGNyZWF0ZSBvciBkZWxldGUgYW4gZW50cnkgaW4g dGhlIHNoYXJlZAotICogaGFzaHRhYmxlLCBvbmUgbXVzdCBob2xkIHBnc3MtPmxvY2sgZXhjbHVz aXZlbHkuICBNb2RpZnlpbmcgYW55IGZpZWxkCi0gKiBpbiBhbiBlbnRyeSBleGNlcHQgdGhlIGNv dW50ZXJzIHJlcXVpcmVzIHRoZSBzYW1lLiAgVG8gbG9vayB1cCBhbiBlbnRyeSwKLSAqIG9uZSBt dXN0IGhvbGQgdGhlIGxvY2sgc2hhcmVkLiAgVG8gcmVhZCBvciB1cGRhdGUgdGhlIGNvdW50ZXJz IHdpdGhpbgotICogYW4gZW50cnksIG9uZSBtdXN0IGhvbGQgdGhlIGxvY2sgc2hhcmVkIG9yIGV4 Y2x1c2l2ZSAoc28gdGhlIGVudHJ5IGRvZXNuJ3QKLSAqIGRpc2FwcGVhciEpIGFuZCBhbHNvIHRh a2UgdGhlIGVudHJ5J3MgbXV0ZXggc3BpbmxvY2suCi0gKiBUaGUgc2hhcmVkIHN0YXRlIHZhcmlh YmxlIHBnc3MtPmV4dGVudCAodGhlIG5leHQgZnJlZSBzcG90IGluIHRoZSBleHRlcm5hbAotICog cXVlcnktdGV4dCBmaWxlKSBzaG91bGQgYmUgYWNjZXNzZWQgb25seSB3aGlsZSBob2xkaW5nIGVp dGhlciB0aGUKLSAqIHBnc3MtPm11dGV4IHNwaW5sb2NrLCBvciBleGNsdXNpdmUgbG9jayBvbiBw Z3NzLT5sb2NrLiAgV2UgdXNlIHRoZSBtdXRleCB0bwotICogYWxsb3cgcmVzZXJ2aW5nIGZpbGUg c3BhY2Ugd2hpbGUgaG9sZGluZyBvbmx5IHNoYXJlZCBsb2NrIG9uIHBnc3MtPmxvY2suCi0gKiBS ZXdyaXRpbmcgdGhlIGVudGlyZSBleHRlcm5hbCBxdWVyeS10ZXh0IGZpbGUsIGVnIGZvciBnYXJi YWdlIGNvbGxlY3Rpb24sCi0gKiByZXF1aXJlcyBob2xkaW5nIHBnc3MtPmxvY2sgZXhjbHVzaXZl bHk7IHRoaXMgYWxsb3dzIGluZGl2aWR1YWwgZW50cmllcwotICogaW4gdGhlIGZpbGUgdG8gYmUg cmVhZCBvciB3cml0dGVuIHdoaWxlIGhvbGRpbmcgb25seSBzaGFyZWQgbG9jay4KKyAqIEVhY2gg c2hhcmVkIHBnc3RhdCBlbnRyeSBjYXJyaWVzIGl0cyBvd24gcXVlcnkgdGV4dCwgc3RvcmVkIGlu IGFuCisgKiBleHRlcm5hbCBmaWxlIChQR1NTX1RFWFRfRklMRSkuCisgKgorICogRXZpY3Rpb24g b2YgbGVhc3QtdXNlZCBlbnRyaWVzIGlzIHRocm90dGxlZCB0byBydW4gYXQgbW9zdCBvbmNlIGV2 ZXJ5CisgKiBFVklDVElPTl9JTlRFUlZBTF9NUyBtaWxsaXNlY29uZHMuICBXaGVuIGV2aWN0aW9u IGlzIG5lZWRlZCwgYSBzaW5nbGUKKyAqIGJhY2tlbmQgcGVyZm9ybXMgaXQgaW5saW5lIHVzaW5n IGEgY29uZGl0aW9uYWwgbG9jazsgb3RoZXIgYmFja2VuZHMgc2ltcGx5CisgKiBza2lwIGVudHJ5 IGNyZWF0aW9uIHVudGlsIHNwYWNlIGlzIGZyZWVkLgogICoKICAqCiAgKiBDb3B5cmlnaHQgKGMp IDIwMDgtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKQEAgLTQ5LDYg KzQyLDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJh Y2Nlc3MvcGFyYWxsZWwuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfYXV0aGlkLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgogI2lu Y2x1ZGUgImZ1bmNhcGkuaCIKQEAgLTU4LDcgKzUyLDkgQEAKICNpbmNsdWRlICJub2Rlcy9xdWVy eWp1bWJsZS5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCiAjaW5jbHVkZSAicGFy c2VyL2FuYWx5emUuaCIKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCiAjaW5jbHVkZSAicGdz dGF0LmgiCisjaW5jbHVkZSAidXRpbHMvcGdzdGF0X2ludGVybmFsLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9mZC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9s d2xvY2suaCIKQEAgLTc2LDkgKzcyLDYgQEAgUEdfTU9EVUxFX01BR0lDX0VYVCgKIAkJCQkJLnZl cnNpb24gPSBQR19WRVJTSU9OCiApOwogCi0vKiBMb2NhdGlvbiBvZiBwZXJtYW5lbnQgc3RhdHMg ZmlsZSAodmFsaWQgd2hlbiBkYXRhYmFzZSBpcyBzaHV0IGRvd24pICovCi0jZGVmaW5lIFBHU1Nf RFVNUF9GSUxFCVBHU1RBVF9TVEFUX1BFUk1BTkVOVF9ESVJFQ1RPUlkgIi9wZ19zdGF0X3N0YXRl bWVudHMuc3RhdCIKLQogLyoKICAqIExvY2F0aW9uIG9mIGV4dGVybmFsIHF1ZXJ5IHRleHQgZmls ZS4KICAqLwpAQCAtODcsMTggKzgwLDE2IEBAIFBHX01PRFVMRV9NQUdJQ19FWFQoCiAvKiBNYWdp YyBudW1iZXIgaWRlbnRpZnlpbmcgdGhlIHN0YXRzIGZpbGUgZm9ybWF0ICovCiBzdGF0aWMgY29u c3QgdWludDMyIFBHU1NfRklMRV9IRUFERVIgPSAweDIwMjUwNzMxOwogCi0vKiBQb3N0Z3JlU1FM IG1ham9yIHZlcnNpb24gbnVtYmVyLCBjaGFuZ2VzIGluIHdoaWNoIGludmFsaWRhdGUgYWxsIGVu dHJpZXMgKi8KLXN0YXRpYyBjb25zdCB1aW50MzIgUEdTU19QR19NQUpPUl9WRVJTSU9OID0gUEdf VkVSU0lPTl9OVU0gLyAxMDA7CisvKiBDdXN0b20gcGdzdGF0IGtpbmQgSUQgZm9yIHBnX3N0YXRf c3RhdGVtZW50cyBlbnRyaWVzICovCisjZGVmaW5lIFBHU1RBVF9LSU5EX1BHU1MJUEdTVEFUX0tJ TkRfRVhQRVJJTUVOVEFMCiAKIC8qIFhYWDogU2hvdWxkIFVTQUdFX0VYRUMgcmVmbGVjdCBleGVj dXRpb24gdGltZSBhbmQvb3IgYnVmZmVyIHVzYWdlPyAqLwogI2RlZmluZSBVU0FHRV9FWEVDKGR1 cmF0aW9uKQkoMS4wKQogI2RlZmluZSBVU0FHRV9JTklUCQkJCSgxLjApCS8qIGluY2x1ZGluZyBp bml0aWFsIHBsYW5uaW5nICovCi0jZGVmaW5lIEFTU1VNRURfTUVESUFOX0lOSVQJCSgxMC4wKQkv KiBpbml0aWFsIGFzc3VtZWQgbWVkaWFuIHVzYWdlICovCiAjZGVmaW5lIEFTU1VNRURfTEVOR1RI X0lOSVQJCTEwMjQJLyogaW5pdGlhbCBhc3N1bWVkIG1lYW4gcXVlcnkgbGVuZ3RoICovCiAjZGVm aW5lIFVTQUdFX0RFQ1JFQVNFX0ZBQ1RPUgkoMC45OSkJLyogZGVjcmVhc2VkIGV2ZXJ5IGVudHJ5 X2RlYWxsb2MgKi8KLSNkZWZpbmUgU1RJQ0tZX0RFQ1JFQVNFX0ZBQ1RPUgkoMC41MCkJLyogZmFj dG9yIGZvciBzdGlja3kgZW50cmllcyAqLwogI2RlZmluZSBVU0FHRV9ERUFMTE9DX1BFUkNFTlQJ NQkvKiBmcmVlIHRoaXMgJSBvZiBlbnRyaWVzIGF0IG9uY2UgKi8KLSNkZWZpbmUgSVNfU1RJQ0tZ KGMpCSgoYy5jYWxsc1tQR1NTX1BMQU5dICsgYy5jYWxsc1tQR1NTX0VYRUNdKSA9PSAwKQorI2Rl ZmluZSBFVklDVElPTl9JTlRFUlZBTF9NUwkxMDAwMAkvKiBtaW4gbXMgYmV0d2VlbiBldmljdGlv biBjeWNsZXMgKi8KIAogLyoKICAqIEV4dGVuc2lvbiB2ZXJzaW9uIG51bWJlciwgZm9yIHN1cHBv cnRpbmcgb2xkZXIgZXh0ZW5zaW9uIHZlcnNpb25zJyBvYmplY3RzCkBAIC0xNDAsMTggKzEzMSwy NyBAQCB0eXBlZGVmIGVudW0gcGdzc1N0b3JlS2luZAogICogemVybyB0aGUgcGFkZGluZyBieXRl cy4gIE90aGVyd2lzZSwgdGhpbmdzIHdpbGwgYnJlYWssIGJlY2F1c2UgcGdzc19oYXNoIGlzCiAg KiBjcmVhdGVkIHVzaW5nIEhBU0hfQkxPQlMsIGFuZCB0aHVzIHRhZ19oYXNoIGlzIHVzZWQgdG8g aGFzaCB0aGlzLgogICovCi10eXBlZGVmIHN0cnVjdCBwZ3NzSGFzaEtleQordHlwZWRlZiBzdHJ1 Y3QgcGdzc0hhc2hLZXkgcGdzc0hhc2hLZXk7Cit0eXBlZGVmIHN0cnVjdCBDb3VudGVycyBDb3Vu dGVyczsKK3R5cGVkZWYgc3RydWN0IHBnc3NHbG9iYWxTdGF0cyBwZ3NzR2xvYmFsU3RhdHM7Cit0 eXBlZGVmIHN0cnVjdCBwZ3NzU2hhcmVkU3RhdGUgcGdzc1NoYXJlZFN0YXRlOwordHlwZWRlZiBz dHJ1Y3QgUGdTdGF0U2hhcmVkX1Bnc3MgUGdTdGF0U2hhcmVkX1Bnc3M7Cit0eXBlZGVmIHN0cnVj dCBQZ1N0YXRfUGVuZGluZ1Bnc3MgUGdTdGF0X1BlbmRpbmdQZ3NzOwordHlwZWRlZiBzdHJ1Y3Qg VXNhZ2VFbnRyeSBVc2FnZUVudHJ5OwordHlwZWRlZiBzdHJ1Y3QgUGVuZGluZ0Ryb3AgUGVuZGlu Z0Ryb3A7CisKK3N0cnVjdCBwZ3NzSGFzaEtleQogewogCU9pZAkJCXVzZXJpZDsJCQkvKiB1c2Vy IE9JRCAqLwogCU9pZAkJCWRiaWQ7CQkJLyogZGF0YWJhc2UgT0lEICovCiAJaW50NjQJCXF1ZXJ5 aWQ7CQkvKiBxdWVyeSBpZGVudGlmaWVyICovCiAJYm9vbAkJdG9wbGV2ZWw7CQkvKiBxdWVyeSBl eGVjdXRlZCBhdCB0b3AgbGV2ZWwgKi8KLX0gcGdzc0hhc2hLZXk7Cit9OwogCiAvKgogICogVGhl IGFjdHVhbCBzdGF0cyBjb3VudGVycyBrZXB0IHdpdGhpbiBwZ3NzRW50cnkuCiAgKi8KLXR5cGVk ZWYgc3RydWN0IENvdW50ZXJzCitzdHJ1Y3QgQ291bnRlcnMKIHsKIAlpbnQ2NAkJY2FsbHNbUEdT U19OVU1LSU5EXTsJLyogIyBvZiB0aW1lcyBwbGFubmVkL2V4ZWN1dGVkICovCiAJZG91YmxlCQl0 b3RhbF90aW1lW1BHU1NfTlVNS0lORF07CS8qIHRvdGFsIHBsYW5uaW5nL2V4ZWN1dGlvbiB0aW1l LApAQCAtMjEyLDU0ICsyMTIsNzYgQEAgdHlwZWRlZiBzdHJ1Y3QgQ291bnRlcnMKIAkJCQkJCQkJ CQkJICogbGF1bmNoZWQgKi8KIAlpbnQ2NAkJZ2VuZXJpY19wbGFuX2NhbGxzOyAvKiBudW1iZXIg b2YgY2FsbHMgdXNpbmcgYSBnZW5lcmljIHBsYW4gKi8KIAlpbnQ2NAkJY3VzdG9tX3BsYW5fY2Fs bHM7CS8qIG51bWJlciBvZiBjYWxscyB1c2luZyBhIGN1c3RvbSBwbGFuICovCi19IENvdW50ZXJz OworfTsKIAogLyoKICAqIEdsb2JhbCBzdGF0aXN0aWNzIGZvciBwZ19zdGF0X3N0YXRlbWVudHMK ICAqLwotdHlwZWRlZiBzdHJ1Y3QgcGdzc0dsb2JhbFN0YXRzCitzdHJ1Y3QgcGdzc0dsb2JhbFN0 YXRzCiB7CiAJaW50NjQJCWRlYWxsb2M7CQkvKiAjIG9mIHRpbWVzIGVudHJpZXMgd2VyZSBkZWFs bG9jYXRlZCAqLwogCVRpbWVzdGFtcFR6IHN0YXRzX3Jlc2V0OwkvKiB0aW1lc3RhbXAgd2l0aCBh bGwgc3RhdHMgcmVzZXQgKi8KLX0gcGdzc0dsb2JhbFN0YXRzOwotCi0vKgotICogU3RhdGlzdGlj cyBwZXIgc3RhdGVtZW50Ci0gKgotICogTm90ZTogaW4gZXZlbnQgb2YgYSBmYWlsdXJlIGluIGdh cmJhZ2UgY29sbGVjdGlvbiBvZiB0aGUgcXVlcnkgdGV4dCBmaWxlLAotICogd2UgcmVzZXQgcXVl cnlfb2Zmc2V0IHRvIHplcm8gYW5kIHF1ZXJ5X2xlbiB0byAtMS4gIFRoaXMgd2lsbCBiZSBzZWVu IGFzCi0gKiBhbiBpbnZhbGlkIHN0YXRlIGJ5IHF0ZXh0X2ZldGNoKCkuCi0gKi8KLXR5cGVkZWYg c3RydWN0IHBnc3NFbnRyeQotewotCXBnc3NIYXNoS2V5IGtleTsJCQkvKiBoYXNoIGtleSBvZiBl bnRyeSAtIE1VU1QgQkUgRklSU1QgKi8KLQlDb3VudGVycwljb3VudGVyczsJCS8qIHRoZSBzdGF0 aXN0aWNzIGZvciB0aGlzIHF1ZXJ5ICovCi0JU2l6ZQkJcXVlcnlfb2Zmc2V0OwkvKiBxdWVyeSB0 ZXh0IG9mZnNldCBpbiBleHRlcm5hbCBmaWxlICovCi0JaW50CQkJcXVlcnlfbGVuOwkJLyogIyBv ZiB2YWxpZCBieXRlcyBpbiBxdWVyeSBzdHJpbmcsIG9yIC0xICovCi0JaW50CQkJZW5jb2Rpbmc7 CQkvKiBxdWVyeSB0ZXh0IGVuY29kaW5nICovCi0JVGltZXN0YW1wVHogc3RhdHNfc2luY2U7CS8q IHRpbWVzdGFtcCBvZiBlbnRyeSBhbGxvY2F0aW9uICovCi0JVGltZXN0YW1wVHogbWlubWF4X3N0 YXRzX3NpbmNlOyAvKiB0aW1lc3RhbXAgb2YgbGFzdCBtaW4vbWF4IHZhbHVlcyByZXNldCAqLwot CXNsb2NrX3QJCW11dGV4OwkJCS8qIHByb3RlY3RzIHRoZSBjb3VudGVycyBvbmx5ICovCi19IHBn c3NFbnRyeTsKK307CiAKIC8qCiAgKiBHbG9iYWwgc2hhcmVkIHN0YXRlCiAgKi8KLXR5cGVkZWYg c3RydWN0IHBnc3NTaGFyZWRTdGF0ZQorc3RydWN0IHBnc3NTaGFyZWRTdGF0ZQogewotCUxXTG9j a1BhZGRlZCBsb2NrOwkJCS8qIHByb3RlY3RzIGhhc2h0YWJsZSBzZWFyY2gvbW9kaWZpY2F0aW9u ICovCi0JZG91YmxlCQljdXJfbWVkaWFuX3VzYWdlOwkvKiBjdXJyZW50IG1lZGlhbiB1c2FnZSBp biBoYXNodGFibGUgKi8KKwlMV0xvY2tQYWRkZWQgbG9jazsJCQkvKiBwcm90ZWN0cyBxdWVyeSB0 ZXh0IGZpbGUgb3BlcmF0aW9ucyAqLwogCVNpemUJCW1lYW5fcXVlcnlfbGVuOyAvKiBjdXJyZW50 IG1lYW4gZW50cnkgdGV4dCBsZW5ndGggKi8KIAlzbG9ja190CQltdXRleDsJCQkvKiBwcm90ZWN0 cyBmb2xsb3dpbmcgZmllbGRzIG9ubHk6ICovCiAJU2l6ZQkJZXh0ZW50OwkJCS8qIGN1cnJlbnQg ZXh0ZW50IG9mIHF1ZXJ5IGZpbGUgKi8KIAlpbnQJCQluX3dyaXRlcnM7CQkvKiBudW1iZXIgb2Yg YWN0aXZlIHdyaXRlcnMgdG8gcXVlcnkgZmlsZSAqLwogCWludAkJCWdjX2NvdW50OwkJLyogcXVl cnkgZmlsZSBnYXJiYWdlIGNvbGxlY3Rpb24gY3ljbGUgY291bnQgKi8KKwlUaW1lc3RhbXBUeiBs YXN0X2V2aWN0aW9uX3RpbWU7IC8qIHRocm90dGxlOiBsYXN0IHRpbWUgZW50cnlfZGVhbGxvYyBy YW4gKi8KIAlwZ3NzR2xvYmFsU3RhdHMgc3RhdHM7CQkvKiBnbG9iYWwgc3RhdGlzdGljcyBmb3Ig cGdzcyAqLwotfSBwZ3NzU2hhcmVkU3RhdGU7Cit9OworCisvKgorICogU2hhcmVkIG1lbW9yeSBl bnRyeSBmb3IgcGdzdGF0IGN1c3RvbSBraW5kLgorICogVGhpcyBpcyB3aGF0IGxpdmVzIGluIHRo ZSBwZ3N0YXQgc2hhcmVkIGhhc2ggdGFibGUuCisgKi8KK3N0cnVjdCBQZ1N0YXRTaGFyZWRfUGdz cworeworCVBnU3RhdFNoYXJlZF9Db21tb24gaGVhZGVyOworCXBnc3NIYXNoS2V5IGtleTsJCQkv KiBmdWxsIG9yaWdpbmFsIGtleSBmb3IgcmVjb25zdHJ1Y3Rpb24gKi8KKwlDb3VudGVycwljb3Vu dGVyczsJCS8qIHRoZSBzdGF0aXN0aWNzICovCisJVGltZXN0YW1wVHogc3RhdHNfc2luY2U7CS8q IHRpbWVzdGFtcCBvZiBlbnRyeSBhbGxvY2F0aW9uICovCisJVGltZXN0YW1wVHogbWlubWF4X3N0 YXRzX3NpbmNlOyAvKiB0aW1lc3RhbXAgb2YgbGFzdCBtaW4vbWF4IHJlc2V0ICovCisJaW50CQkJ cXVlcnlfbGVuOwkJLyogbGVuZ3RoIG9mIHF1ZXJ5IHRleHQsIG9yIC0xIGlmIGludmFsaWQgKi8K KwlpbnQJCQllbmNvZGluZzsJCS8qIGVuY29kaW5nIG9mIHF1ZXJ5IHRleHQgKi8KKworCVNpemUJ CXF1ZXJ5X29mZnNldDsJLyogb2Zmc2V0IGluIGV4dGVybmFsIHF1ZXJ5IHRleHQgZmlsZSAqLwor fTsKKworLyoKKyAqIFBlbmRpbmcgKGJhY2tlbmQtbG9jYWwpIHN0YXRzIGVudHJ5LCBhY2N1bXVs YXRlZCBiZWZvcmUgZmx1c2guCisgKi8KK3N0cnVjdCBQZ1N0YXRfUGVuZGluZ1Bnc3MKK3sKKwlD b3VudGVycwljb3VudGVyczsKK307CisKKy8qCisgKiBVc2VkIGR1cmluZyBlbnRyeSByZXNldCB0 byBjb2xsZWN0IGtleXMgZm9yIGRlZmVycmVkIGRyb3AuCisgKi8KK3N0cnVjdCBQZW5kaW5nRHJv cAoreworCU9pZAkJCWRiaWQ7CisJdWludDY0CQlvYmppZDsKK307CiAKIC8qIExpbmtzIHRvIHNo YXJlZCBtZW1vcnkgc3RhdGUgKi8KIHN0YXRpYyBwZ3NzU2hhcmVkU3RhdGUgKnBnc3M7Ci1zdGF0 aWMgSFRBQiAqcGdzc19oYXNoOworCisvKiBCdWZmZXIgdXNlZCBkdXJpbmcgc2VyaWFsaXphdGlv biB0byBhdm9pZCByZWxvYWRpbmcgdGV4dCBmaWxlIHBlciBlbnRyeSAqLworc3RhdGljIGNoYXIg KnBnc3NfcXRleHRfd3JpdGVfYnVmZmVyID0gTlVMTDsKK3N0YXRpYyBTaXplIHBnc3NfcXRleHRf d3JpdGVfYnVmZmVyX3NpemUgPSAwOworCisvKiBGaWxlIGhhbmRsZSB1c2VkIGR1cmluZyBkZXNl cmlhbGl6YXRpb24gdG8gcmVidWlsZCBxdWVyeSB0ZXh0IGZpbGUgKi8KK3N0YXRpYyBGSUxFICpw Z3NzX3F0ZXh0X3JlYnVpbGRfZmlsZSA9IE5VTEw7CitzdGF0aWMgU2l6ZSBwZ3NzX3F0ZXh0X3Jl YnVpbGRfZXh0ZW50ID0gMDsKIAogc3RhdGljIHZvaWQgcGdzc19zaG1lbV9yZXF1ZXN0KHZvaWQg KmFyZyk7CiBzdGF0aWMgdm9pZCBwZ3NzX3NobWVtX2luaXQodm9pZCAqYXJnKTsKQEAgLTI2OSw2 ICsyOTEsMzIgQEAgc3RhdGljIGNvbnN0IFNobWVtQ2FsbGJhY2tzIHBnc3Nfc2htZW1fY2FsbGJh Y2tzID0gewogCS5pbml0X2ZuID0gcGdzc19zaG1lbV9pbml0LAogfTsKIAorLyogcGdzdGF0IGN1 c3RvbSBraW5kIGNhbGxiYWNrcyAqLworc3RhdGljIGJvb2wgcGdzc19mbHVzaF9wZW5kaW5nX2Ni KFBnU3RhdF9FbnRyeVJlZiAqZW50cnlfcmVmLCBib29sIG5vd2FpdCk7CitzdGF0aWMgdm9pZCBw Z3NzX3RvX3NlcmlhbGl6ZWRfZGF0YShjb25zdCBQZ1N0YXRfSGFzaEtleSAqa2V5LAorCQkJCQkJ CQkJY29uc3QgUGdTdGF0U2hhcmVkX0NvbW1vbiAqaGVhZGVyLAorCQkJCQkJCQkJRklMRSAqc3Rh dGZpbGUpOworc3RhdGljIGJvb2wgcGdzc19mcm9tX3NlcmlhbGl6ZWRfZGF0YShjb25zdCBQZ1N0 YXRfSGFzaEtleSAqa2V5LAorCQkJCQkJCQkJICBQZ1N0YXRTaGFyZWRfQ29tbW9uICpoZWFkZXIs CisJCQkJCQkJCQkgIEZJTEUgKnN0YXRmaWxlKTsKK3N0YXRpYyB2b2lkIHBnc3NfZmluaXNoKFBn U3RhdF9TdGF0c0ZpbGVPcCBzdGF0dXMpOworCitzdGF0aWMgY29uc3QgUGdTdGF0X0tpbmRJbmZv IHBnc3Nfa2luZF9pbmZvID0geworCS5uYW1lID0gInBnX3N0YXRfc3RhdGVtZW50cyIsCisJLmZp eGVkX2Ftb3VudCA9IGZhbHNlLAorCS53cml0ZV90b19maWxlID0gdHJ1ZSwKKwkudHJhY2tfZW50 cnlfY291bnQgPSB0cnVlLAorCS5hY2Nlc3NlZF9hY3Jvc3NfZGF0YWJhc2VzID0gdHJ1ZSwKKwku c2hhcmVkX3NpemUgPSBzaXplb2YoUGdTdGF0U2hhcmVkX1Bnc3MpLAorCS5zaGFyZWRfZGF0YV9v ZmYgPSBvZmZzZXRvZihQZ1N0YXRTaGFyZWRfUGdzcywga2V5KSwKKwkuc2hhcmVkX2RhdGFfbGVu ID0gc2l6ZW9mKFBnU3RhdFNoYXJlZF9QZ3NzKSAtIG9mZnNldG9mKFBnU3RhdFNoYXJlZF9QZ3Nz LCBrZXkpLAorCS5wZW5kaW5nX3NpemUgPSBzaXplb2YoUGdTdGF0X1BlbmRpbmdQZ3NzKSwKKwku Zmx1c2hfcGVuZGluZ19jYiA9IHBnc3NfZmx1c2hfcGVuZGluZ19jYiwKKwkudG9fc2VyaWFsaXpl ZF9kYXRhID0gcGdzc190b19zZXJpYWxpemVkX2RhdGEsCisJLmZyb21fc2VyaWFsaXplZF9kYXRh ID0gcGdzc19mcm9tX3NlcmlhbGl6ZWRfZGF0YSwKKwkuZmluaXNoID0gcGdzc19maW5pc2gsCit9 OworCiAvKi0tLS0gTG9jYWwgdmFyaWFibGVzIC0tLS0qLwogCiAvKiBDdXJyZW50IG5lc3Rpbmcg ZGVwdGggb2YgcGxhbm5lci9FeGVjdXRvclJ1bi9Qcm9jZXNzVXRpbGl0eSBjYWxscyAqLwpAQCAt MzA2LDcgKzM1NCw2IEBAIHN0YXRpYyBib29sIHBnc3NfdHJhY2tfdXRpbGl0eSA9IHRydWU7CS8q IHdoZXRoZXIgdG8gdHJhY2sgdXRpbGl0eSBjb21tYW5kcyAqLwogc3RhdGljIGJvb2wgcGdzc190 cmFja19wbGFubmluZyA9IGZhbHNlOwkvKiB3aGV0aGVyIHRvIHRyYWNrIHBsYW5uaW5nCiAJCQkJ CQkJCQkJCSAqIGR1cmF0aW9uICovCiBzdGF0aWMgYm9vbCBwZ3NzX3NhdmUgPSB0cnVlOwkvKiB3 aGV0aGVyIHRvIHNhdmUgc3RhdHMgYWNyb3NzIHNodXRkb3duICovCi0KICNkZWZpbmUgcGdzc19l bmFibGVkKGxldmVsKSBcCiAJKCFJc1BhcmFsbGVsV29ya2VyKCkgJiYgXAogCShwZ3NzX3RyYWNr ID09IFBHU1NfVFJBQ0tfQUxMIHx8IFwKQEAgLTMzNSw3ICszODIsNiBAQCBQR19GVU5DVElPTl9J TkZPX1YxKHBnX3N0YXRfc3RhdGVtZW50c18xXzEzKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdf c3RhdF9zdGF0ZW1lbnRzKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfc3RhdF9zdGF0ZW1lbnRz X2luZm8pOwogCi1zdGF0aWMgdm9pZCBwZ3NzX3NobWVtX3NodXRkb3duKGludCBjb2RlLCBEYXR1 bSBhcmcpOwogc3RhdGljIHZvaWQgcGdzc19wb3N0X3BhcnNlX2FuYWx5emUoUGFyc2VTdGF0ZSAq cHN0YXRlLCBRdWVyeSAqcXVlcnksCiAJCQkJCQkJCQljb25zdCBKdW1ibGVTdGF0ZSAqanN0YXRl KTsKIHN0YXRpYyBQbGFubmVkU3RtdCAqcGdzc19wbGFubmVyKFF1ZXJ5ICpwYXJzZSwKQEAgLTM2 OCw4ICs0MTQsNiBAQCBzdGF0aWMgdm9pZCBwZ3NzX3N0b3JlKGNvbnN0IGNoYXIgKnF1ZXJ5LCBp bnQ2NCBxdWVyeUlkLAogc3RhdGljIHZvaWQgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1 bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJCQkJCQkJCXBnc3NWZXJzaW9uIGFwaV92ZXJzaW9u LAogCQkJCQkJCQkJCWJvb2wgc2hvd3RleHQpOwotc3RhdGljIHBnc3NFbnRyeSAqZW50cnlfYWxs b2MocGdzc0hhc2hLZXkgKmtleSwgU2l6ZSBxdWVyeV9vZmZzZXQsIGludCBxdWVyeV9sZW4sCi0J CQkJCQkJICBpbnQgZW5jb2RpbmcsIGJvb2wgc3RpY2t5KTsKIHN0YXRpYyB2b2lkIGVudHJ5X2Rl YWxsb2Modm9pZCk7CiBzdGF0aWMgYm9vbCBxdGV4dF9zdG9yZShjb25zdCBjaGFyICpxdWVyeSwg aW50IHF1ZXJ5X2xlbiwKIAkJCQkJCVNpemUgKnF1ZXJ5X29mZnNldCwgaW50ICpnY19jb3VudCk7 CkBAIC0zODIsNiArNDI2LDM1IEBAIHN0YXRpYyBUaW1lc3RhbXBUeiBlbnRyeV9yZXNldChPaWQg dXNlcmlkLCBPaWQgZGJpZCwgaW50NjQgcXVlcnlpZCwgYm9vbCBtaW5tYXhfCiBzdGF0aWMgY2hh ciAqZ2VuZXJhdGVfbm9ybWFsaXplZF9xdWVyeShjb25zdCBKdW1ibGVTdGF0ZSAqanN0YXRlLAog CQkJCQkJCQkJICAgY29uc3QgY2hhciAqcXVlcnksCiAJCQkJCQkJCQkgICBpbnQgcXVlcnlfbG9j LCBpbnQgKnF1ZXJ5X2xlbl9wKTsKK3N0YXRpYyB2b2lkIHBnc3NfZW50cnlfaW5pdChQZ1N0YXRT aGFyZWRfUGdzcyAqc2hhcmVkX2VudHJ5LAorCQkJCQkJCWNvbnN0IHBnc3NIYXNoS2V5ICprZXks IGludCBlbmNvZGluZyk7CitzdGF0aWMgdm9pZCBwZ3NzX3N0b3JlX3F1ZXJ5X3RleHQoUGdTdGF0 U2hhcmVkX1Bnc3MgKnNoYXJlZF9lbnRyeSwKKwkJCQkJCQkJICBjb25zdCBjaGFyICpxdWVyeSwg aW50IHF1ZXJ5X2xlbiwKKwkJCQkJCQkJICBpbnQgZW5jb2RpbmcpOworCitzdHJ1Y3QgVXNhZ2VF bnRyeQoreworCXBnc3NIYXNoS2V5IGtleTsKKwlkb3VibGUJCXVzYWdlOworfTsKKworc3RhdGlj IGludAllbnRyeV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7CitzdGF0aWMgdm9p ZCBwZ3NzX21heWJlX2V2aWN0KHZvaWQpOworCisvKgorICogQ29tcHV0ZSBhIHVpbnQ2NCBvYmpp ZCBmcm9tIGEgcGdzc0hhc2hLZXkgZm9yIHVzZSBpbiBQZ1N0YXRfSGFzaEtleS4KKyAqIFdlIGhh c2ggKHVzZXJpZCwgcXVlcnlpZCwgdG9wbGV2ZWwpIHRvZ2V0aGVyIHNpbmNlIGRiaWQgZ29lcyBp bnRvIGRib2lkLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ2NAorcGdzc19vYmppZChjb25zdCBw Z3NzSGFzaEtleSAqa2V5KQoreworCXVpbnQ2NAkJaGFzaHZhbDsKKworCWhhc2h2YWwgPSBtdXJt dXJoYXNoNjQoKHVpbnQ2NCkga2V5LT51c2VyaWQpOworCWhhc2h2YWwgPSBoYXNoX2NvbWJpbmU2 NChoYXNodmFsLCBtdXJtdXJoYXNoNjQoKHVpbnQ2NCkga2V5LT5xdWVyeWlkKSk7CisJaGFzaHZh bCA9IGhhc2hfY29tYmluZTY0KGhhc2h2YWwsIG11cm11cmhhc2g2NCgodWludDY0KSBrZXktPnRv cGxldmVsKSk7CisJcmV0dXJuIGhhc2h2YWw7Cit9CiAKIC8qCiAgKiBNb2R1bGUgbG9hZCBjYWxs YmFjawpAQCAtNDE2LDcgKzQ4OSw3IEBAIF9QR19pbml0KHZvaWQpCiAJCQkJCQkJNTAwMCwKIAkJ CQkJCQkxMDAsCiAJCQkJCQkJSU5UX01BWCAvIDIsCi0JCQkJCQkJUEdDX1BPU1RNQVNURVIsCisJ CQkJCQkJUEdDX1NJR0hVUCwKIAkJCQkJCQkwLAogCQkJCQkJCU5VTEwsCiAJCQkJCQkJTlVMTCwK QEAgLTQ3NCw2ICs1NDcsMTEgQEAgX1BHX2luaXQodm9pZCkKIAkgKi8KIAlSZWdpc3RlclNobWVt Q2FsbGJhY2tzKCZwZ3NzX3NobWVtX2NhbGxiYWNrcyk7CiAKKwkvKgorCSAqIFJlZ2lzdGVyIGN1 c3RvbSBzdGF0aXN0aWNzIGtpbmQgZm9yIHBnX3N0YXRfc3RhdGVtZW50cyBlbnRyaWVzLgorCSAq LworCXBnc3RhdF9yZWdpc3Rlcl9raW5kKFBHU1RBVF9LSU5EX1BHU1MsICZwZ3NzX2tpbmRfaW5m byk7CisKIAkvKgogCSAqIEluc3RhbGwgaG9va3MuCiAJICovCkBAIC01MDUsMTMgKzU4Myw2IEBA IF9QR19pbml0KHZvaWQpCiBzdGF0aWMgdm9pZAogcGdzc19zaG1lbV9yZXF1ZXN0KHZvaWQgKmFy ZykKIHsKLQlTaG1lbVJlcXVlc3RIYXNoKC5uYW1lID0gInBnX3N0YXRfc3RhdGVtZW50cyBoYXNo IiwKLQkJCQkJIC5uZWxlbXMgPSBwZ3NzX21heCwKLQkJCQkJIC5oYXNoX2luZm8ua2V5c2l6ZSA9 IHNpemVvZihwZ3NzSGFzaEtleSksCi0JCQkJCSAuaGFzaF9pbmZvLmVudHJ5c2l6ZSA9IHNpemVv ZihwZ3NzRW50cnkpLAotCQkJCQkgLmhhc2hfZmxhZ3MgPSBIQVNIX0VMRU0gfCBIQVNIX0JMT0JT LAotCQkJCQkgLnB0ciA9ICZwZ3NzX2hhc2gsCi0JCSk7CiAJU2htZW1SZXF1ZXN0U3RydWN0KC5u YW1lID0gInBnX3N0YXRfc3RhdGVtZW50cyIsCiAJCQkJCSAgIC5zaXplID0gc2l6ZW9mKHBnc3NT aGFyZWRTdGF0ZSksCiAJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJnBnc3MsCkBAIC01MzAsMTQg KzYwMSw3IEBAIHN0YXRpYyB2b2lkCiBwZ3NzX3NobWVtX2luaXQodm9pZCAqYXJnKQogewogCWlu dAkJCXRyYW5jaGVfaWQ7Ci0JRklMRQkgICAqZmlsZSA9IE5VTEw7CiAJRklMRQkgICAqcWZpbGUg PSBOVUxMOwotCXVpbnQzMgkJaGVhZGVyOwotCWludDMyCQludW07Ci0JaW50MzIJCXBndmVyOwot CWludDMyCQlpOwotCWludAkJCWJ1ZmZlcl9zaXplOwotCWNoYXIJICAgKmJ1ZmZlciA9IE5VTEw7 CiAKIAkvKgogCSAqIFdlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHdlJ3JlIGxvYWRlZCBmcm9tIHNo YXJlZF9wcmVsb2FkX2xpYnJhcmllcyBpbgpAQCAtNTQ2LDI4NSArNjEwLDMzIEBAIHBnc3Nfc2ht ZW1faW5pdCh2b2lkICphcmcpCiAJQXNzZXJ0KCFJc1VuZGVyUG9zdG1hc3Rlcik7CiAKIAkvKgot CSAqIEluaXRpYWxpemUgdGhlIHNobWVtIGFyZWEgd2l0aCBubyBzdGF0aXN0aWNzLgorCSAqIElu aXRpYWxpemUgdGhlIHNobWVtIGFyZWEuCiAJICovCiAJdHJhbmNoZV9pZCA9IExXTG9ja05ld1Ry YW5jaGVJZCgicGdfc3RhdF9zdGF0ZW1lbnRzIik7CiAJTFdMb2NrSW5pdGlhbGl6ZSgmcGdzcy0+ bG9jay5sb2NrLCB0cmFuY2hlX2lkKTsKLQlwZ3NzLT5jdXJfbWVkaWFuX3VzYWdlID0gQVNTVU1F RF9NRURJQU5fSU5JVDsKIAlwZ3NzLT5tZWFuX3F1ZXJ5X2xlbiA9IEFTU1VNRURfTEVOR1RIX0lO SVQ7CiAJU3BpbkxvY2tJbml0KCZwZ3NzLT5tdXRleCk7CiAJcGdzcy0+ZXh0ZW50ID0gMDsKIAlw Z3NzLT5uX3dyaXRlcnMgPSAwOwogCXBnc3MtPmdjX2NvdW50ID0gMDsKKwlwZ3NzLT5sYXN0X2V2 aWN0aW9uX3RpbWUgPSAwOwogCXBnc3MtPnN0YXRzLmRlYWxsb2MgPSAwOwogCXBnc3MtPnN0YXRz LnN0YXRzX3Jlc2V0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwogCi0JLyogVGhlIGhhc2ggdGFi bGUgbXVzdCd2ZSBhbHNvIGJlZW4gaW5pdGlhbGl6ZWQgYnkgbm93ICovCi0JQXNzZXJ0KHBnc3Nf aGFzaCAhPSBOVUxMKTsKLQotCS8qCi0JICogU2V0IHVwIGEgc2htZW0gZXhpdCBob29rIHRvIGR1 bXAgdGhlIHN0YXRpc3RpY3MgdG8gZGlzayBvbiBwb3N0bWFzdGVyCi0JICogKG9yIHN0YW5kYWxv bmUgYmFja2VuZCkgZXhpdC4KLQkgKi8KLQlvbl9zaG1lbV9leGl0KHBnc3Nfc2htZW1fc2h1dGRv d24sIChEYXR1bSkgMCk7Ci0KLQkvKgotCSAqIExvYWQgYW55IHByZS1leGlzdGluZyBzdGF0aXN0 aWNzIGZyb20gZmlsZS4KLQkgKgotCSAqIE5vdGU6IHdlIGRvbid0IGJvdGhlciB3aXRoIGxvY2tz IGhlcmUsIGJlY2F1c2UgdGhlcmUgc2hvdWxkIGJlIG5vIG90aGVyCi0JICogcHJvY2Vzc2VzIHJ1 bm5pbmcgd2hlbiB0aGlzIGNvZGUgaXMgcmVhY2hlZC4KLQkgKi8KLQogCS8qIFVubGluayBxdWVy eSB0ZXh0IGZpbGUgcG9zc2libHkgbGVmdCBvdmVyIGZyb20gY3Jhc2ggKi8KIAl1bmxpbmsoUEdT U19URVhUX0ZJTEUpOwogCiAJLyogQWxsb2NhdGUgbmV3IHF1ZXJ5IHRleHQgdGVtcCBmaWxlICov CiAJcWZpbGUgPSBBbGxvY2F0ZUZpbGUoUEdTU19URVhUX0ZJTEUsIFBHX0JJTkFSWV9XKTsKIAlp ZiAocWZpbGUgPT0gTlVMTCkKLQkJZ290byB3cml0ZV9lcnJvcjsKLQotCS8qCi0JICogSWYgd2Ug d2VyZSB0b2xkIG5vdCB0byBsb2FkIG9sZCBzdGF0aXN0aWNzLCB3ZSdyZSBkb25lLiAgKE5vdGUg d2UgZG8KLQkgKiBub3QgdHJ5IHRvIHVubGluayBhbnkgb2xkIGR1bXAgZmlsZSBpbiB0aGlzIGNh c2UuICBUaGlzIHNlZW1zIGEgYml0Ci0JICogcXVlc3Rpb25hYmxlIGJ1dCBpdCdzIHRoZSBoaXN0 b3JpY2FsIGJlaGF2aW9yLikKLQkgKi8KLQlpZiAoIXBnc3Nfc2F2ZSkKLQl7Ci0JCUZyZWVGaWxl KHFmaWxlKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogQXR0ZW1wdCB0byBsb2FkIG9sZCBz dGF0aXN0aWNzIGZyb20gdGhlIGR1bXAgZmlsZS4KLQkgKi8KLQlmaWxlID0gQWxsb2NhdGVGaWxl KFBHU1NfRFVNUF9GSUxFLCBQR19CSU5BUllfUik7Ci0JaWYgKGZpbGUgPT0gTlVMTCkKIAl7Ci0J CWlmIChlcnJubyAhPSBFTk9FTlQpCi0JCQlnb3RvIHJlYWRfZXJyb3I7Ci0JCS8qIE5vIGV4aXN0 aW5nIHBlcnNpc3RlZCBzdGF0cyBmaWxlLCBzbyB3ZSdyZSBkb25lICovCi0JCUZyZWVGaWxlKHFm aWxlKTsKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJ CQkJIGVycm1zZygiY291bGQgbm90IHdyaXRlIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCQlQR1NT X1RFWFRfRklMRSkpKTsKIAkJcmV0dXJuOwogCX0KLQotCWJ1ZmZlcl9zaXplID0gMjA0ODsKLQli dWZmZXIgPSAoY2hhciAqKSBwYWxsb2MoYnVmZmVyX3NpemUpOwotCi0JaWYgKGZyZWFkKCZoZWFk ZXIsIHNpemVvZih1aW50MzIpLCAxLCBmaWxlKSAhPSAxIHx8Ci0JCWZyZWFkKCZwZ3Zlciwgc2l6 ZW9mKHVpbnQzMiksIDEsIGZpbGUpICE9IDEgfHwKLQkJZnJlYWQoJm51bSwgc2l6ZW9mKGludDMy KSwgMSwgZmlsZSkgIT0gMSkKLQkJZ290byByZWFkX2Vycm9yOwotCi0JaWYgKGhlYWRlciAhPSBQ R1NTX0ZJTEVfSEVBREVSIHx8Ci0JCXBndmVyICE9IFBHU1NfUEdfTUFKT1JfVkVSU0lPTikKLQkJ Z290byBkYXRhX2Vycm9yOwotCi0JZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQotCXsKLQkJcGdz c0VudHJ5CXRlbXA7Ci0JCXBnc3NFbnRyeSAgKmVudHJ5OwotCQlTaXplCQlxdWVyeV9vZmZzZXQ7 Ci0KLQkJaWYgKGZyZWFkKCZ0ZW1wLCBzaXplb2YocGdzc0VudHJ5KSwgMSwgZmlsZSkgIT0gMSkK LQkJCWdvdG8gcmVhZF9lcnJvcjsKLQotCQkvKiBFbmNvZGluZyBpcyB0aGUgb25seSBmaWVsZCB3 ZSBjYW4gZWFzaWx5IHNhbml0eS1jaGVjayAqLwotCQlpZiAoIVBHX1ZBTElEX0JFX0VOQ09ESU5H KHRlbXAuZW5jb2RpbmcpKQotCQkJZ290byBkYXRhX2Vycm9yOwotCi0JCS8qIFJlc2l6ZSBidWZm ZXIgYXMgbmVlZGVkICovCi0JCWlmICh0ZW1wLnF1ZXJ5X2xlbiA+PSBidWZmZXJfc2l6ZSkKLQkJ ewotCQkJYnVmZmVyX3NpemUgPSBNYXgoYnVmZmVyX3NpemUgKiAyLCB0ZW1wLnF1ZXJ5X2xlbiAr IDEpOwotCQkJYnVmZmVyID0gcmVwYWxsb2MoYnVmZmVyLCBidWZmZXJfc2l6ZSk7Ci0JCX0KLQot CQlpZiAoZnJlYWQoYnVmZmVyLCAxLCB0ZW1wLnF1ZXJ5X2xlbiArIDEsIGZpbGUpICE9IHRlbXAu cXVlcnlfbGVuICsgMSkKLQkJCWdvdG8gcmVhZF9lcnJvcjsKLQotCQkvKiBTaG91bGQgaGF2ZSBh IHRyYWlsaW5nIG51bGwsIGJ1dCBsZXQncyBtYWtlIHN1cmUgKi8KLQkJYnVmZmVyW3RlbXAucXVl cnlfbGVuXSA9ICdcMCc7Ci0KLQkJLyogU2tpcCBsb2FkaW5nICJzdGlja3kiIGVudHJpZXMgKi8K LQkJaWYgKElTX1NUSUNLWSh0ZW1wLmNvdW50ZXJzKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIFN0 b3JlIHRoZSBxdWVyeSB0ZXh0ICovCi0JCXF1ZXJ5X29mZnNldCA9IHBnc3MtPmV4dGVudDsKLQkJ aWYgKGZ3cml0ZShidWZmZXIsIDEsIHRlbXAucXVlcnlfbGVuICsgMSwgcWZpbGUpICE9IHRlbXAu cXVlcnlfbGVuICsgMSkKLQkJCWdvdG8gd3JpdGVfZXJyb3I7Ci0JCXBnc3MtPmV4dGVudCArPSB0 ZW1wLnF1ZXJ5X2xlbiArIDE7Ci0KLQkJLyogbWFrZSB0aGUgaGFzaHRhYmxlIGVudHJ5IChkaXNj YXJkcyBvbGQgZW50cmllcyBpZiB0b28gbWFueSkgKi8KLQkJZW50cnkgPSBlbnRyeV9hbGxvYygm dGVtcC5rZXksIHF1ZXJ5X29mZnNldCwgdGVtcC5xdWVyeV9sZW4sCi0JCQkJCQkJdGVtcC5lbmNv ZGluZywKLQkJCQkJCQlmYWxzZSk7Ci0KLQkJLyogY29weSBpbiB0aGUgYWN0dWFsIHN0YXRzICov Ci0JCWVudHJ5LT5jb3VudGVycyA9IHRlbXAuY291bnRlcnM7Ci0JCWVudHJ5LT5zdGF0c19zaW5j ZSA9IHRlbXAuc3RhdHNfc2luY2U7Ci0JCWVudHJ5LT5taW5tYXhfc3RhdHNfc2luY2UgPSB0ZW1w Lm1pbm1heF9zdGF0c19zaW5jZTsKLQl9Ci0KLQkvKiBSZWFkIGdsb2JhbCBzdGF0aXN0aWNzIGZv ciBwZ19zdGF0X3N0YXRlbWVudHMgKi8KLQlpZiAoZnJlYWQoJnBnc3MtPnN0YXRzLCBzaXplb2Yo cGdzc0dsb2JhbFN0YXRzKSwgMSwgZmlsZSkgIT0gMSkKLQkJZ290byByZWFkX2Vycm9yOwotCi0J cGZyZWUoYnVmZmVyKTsKLQlGcmVlRmlsZShmaWxlKTsKIAlGcmVlRmlsZShxZmlsZSk7Ci0KLQkv KgotCSAqIFJlbW92ZSB0aGUgcGVyc2lzdGVkIHN0YXRzIGZpbGUgc28gaXQncyBub3QgaW5jbHVk ZWQgaW4KLQkgKiBiYWNrdXBzL3JlcGxpY2F0aW9uIHN0YW5kYnlzLCBldGMuICBBIG5ldyBmaWxl IHdpbGwgYmUgd3JpdHRlbiBvbiBuZXh0Ci0JICogc2h1dGRvd24uCi0JICoKLQkgKiBOb3RlOiBp dCdzIG9rYXkgaWYgdGhlIFBHU1NfVEVYVF9GSUxFIGlzIGluY2x1ZGVkIGluIGEgYmFzZWJhY2t1 cCwKLQkgKiBiZWNhdXNlIHdlIHJlbW92ZSB0aGF0IGZpbGUgb24gc3RhcnR1cDsgaXQgYWN0cyBp bnZlcnNlbHkgdG8KLQkgKiBQR1NTX0RVTVBfRklMRSwgaW4gdGhhdCBpdCBpcyBvbmx5IHN1cHBv c2VkIHRvIGJlIGFyb3VuZCB3aGVuIHRoZQotCSAqIHNlcnZlciBpcyBydW5uaW5nLCB3aGVyZWFz IFBHU1NfRFVNUF9GSUxFIGlzIG9ubHkgc3VwcG9zZWQgdG8gYmUgYXJvdW5kCi0JICogd2hlbiB0 aGUgc2VydmVyIGlzIG5vdCBydW5uaW5nLiAgTGVhdmluZyB0aGUgZmlsZSBjcmVhdGVzIG5vIGRh bmdlciBvZgotCSAqIGEgbmV3bHkgcmVzdG9yZWQgZGF0YWJhc2UgaGF2aW5nIGEgc3B1cmlvdXMg cmVjb3JkIG9mIGV4ZWN1dGlvbiBjb3N0cywKLQkgKiB3aGljaCBpcyB3aGF0IHdlJ3JlIHJlYWxs eSBjb25jZXJuZWQgYWJvdXQgaGVyZS4KLQkgKi8KLQl1bmxpbmsoUEdTU19EVU1QX0ZJTEUpOwot Ci0JcmV0dXJuOwotCi1yZWFkX2Vycm9yOgotCWVyZXBvcnQoTE9HLAotCQkJKGVycmNvZGVfZm9y X2ZpbGVfYWNjZXNzKCksCi0JCQkgZXJybXNnKCJjb3VsZCBub3QgcmVhZCBmaWxlIFwiJXNcIjog JW0iLAotCQkJCQlQR1NTX0RVTVBfRklMRSkpKTsKLQlnb3RvIGZhaWw7Ci1kYXRhX2Vycm9yOgot CWVyZXBvcnQoTE9HLAotCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCi0JCQkgZXJybXNnKCJpZ25vcmluZyBpbnZhbGlkIGRhdGEgaW4gZmlsZSBcIiVzXCIiLAot CQkJCQlQR1NTX0RVTVBfRklMRSkpKTsKLQlnb3RvIGZhaWw7Ci13cml0ZV9lcnJvcjoKLQllcmVw b3J0KExPRywKLQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJIGVycm1zZygiY291 bGQgbm90IHdyaXRlIGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCVBHU1NfVEVYVF9GSUxFKSkpOwot ZmFpbDoKLQlpZiAoYnVmZmVyKQotCQlwZnJlZShidWZmZXIpOwotCWlmIChmaWxlKQotCQlGcmVl RmlsZShmaWxlKTsKLQlpZiAocWZpbGUpCi0JCUZyZWVGaWxlKHFmaWxlKTsKLQkvKiBJZiBwb3Nz aWJsZSwgdGhyb3cgYXdheSB0aGUgYm9ndXMgZmlsZTsgaWdub3JlIGFueSBlcnJvciAqLwotCXVu bGluayhQR1NTX0RVTVBfRklMRSk7Ci0KLQkvKgotCSAqIERvbid0IHVubGluayBQR1NTX1RFWFRf RklMRSBoZXJlOyBpdCBzaG91bGQgYWx3YXlzIGJlIGFyb3VuZCB3aGlsZSB0aGUKLQkgKiBzZXJ2 ZXIgaXMgcnVubmluZyB3aXRoIHBnX3N0YXRfc3RhdGVtZW50cyBlbmFibGVkCi0JICovCi19Ci0K LS8qCi0gKiBzaG1lbV9zaHV0ZG93biBob29rOiBEdW1wIHN0YXRpc3RpY3MgaW50byBmaWxlLgot ICoKLSAqIE5vdGU6IHdlIGRvbid0IGJvdGhlciB3aXRoIGFjcXVpcmluZyBsb2NrLCBiZWNhdXNl IHRoZXJlIHNob3VsZCBiZSBubwotICogb3RoZXIgcHJvY2Vzc2VzIHJ1bm5pbmcgd2hlbiB0aGlz IGlzIGNhbGxlZC4KLSAqLwotc3RhdGljIHZvaWQKLXBnc3Nfc2htZW1fc2h1dGRvd24oaW50IGNv ZGUsIERhdHVtIGFyZykKLXsKLQlGSUxFCSAgICpmaWxlOwotCWNoYXIJICAgKnFidWZmZXIgPSBO VUxMOwotCVNpemUJCXFidWZmZXJfc2l6ZSA9IDA7Ci0JSEFTSF9TRVFfU1RBVFVTIGhhc2hfc2Vx OwotCWludDMyCQludW1fZW50cmllczsKLQlwZ3NzRW50cnkgICplbnRyeTsKLQotCS8qIERvbid0 IHRyeSB0byBkdW1wIGR1cmluZyBhIGNyYXNoLiAqLwotCWlmIChjb2RlKQotCQlyZXR1cm47Ci0K LQkvKiBTYWZldHkgY2hlY2sgLi4uIHNob3VsZG4ndCBnZXQgaGVyZSB1bmxlc3Mgc2htZW0gaXMg c2V0IHVwLiAqLwotCWlmICghcGdzcyB8fCAhcGdzc19oYXNoKQotCQlyZXR1cm47Ci0KLQkvKiBE b24ndCBkdW1wIGlmIHRvbGQgbm90IHRvLiAqLwotCWlmICghcGdzc19zYXZlKQotCQlyZXR1cm47 Ci0KLQlmaWxlID0gQWxsb2NhdGVGaWxlKFBHU1NfRFVNUF9GSUxFICIudG1wIiwgUEdfQklOQVJZ X1cpOwotCWlmIChmaWxlID09IE5VTEwpCi0JCWdvdG8gZXJyb3I7Ci0KLQlpZiAoZndyaXRlKCZQ R1NTX0ZJTEVfSEVBREVSLCBzaXplb2YodWludDMyKSwgMSwgZmlsZSkgIT0gMSkKLQkJZ290byBl cnJvcjsKLQlpZiAoZndyaXRlKCZQR1NTX1BHX01BSk9SX1ZFUlNJT04sIHNpemVvZih1aW50MzIp LCAxLCBmaWxlKSAhPSAxKQotCQlnb3RvIGVycm9yOwotCW51bV9lbnRyaWVzID0gaGFzaF9nZXRf bnVtX2VudHJpZXMocGdzc19oYXNoKTsKLQlpZiAoZndyaXRlKCZudW1fZW50cmllcywgc2l6ZW9m KGludDMyKSwgMSwgZmlsZSkgIT0gMSkKLQkJZ290byBlcnJvcjsKLQotCXFidWZmZXIgPSBxdGV4 dF9sb2FkX2ZpbGUoJnFidWZmZXJfc2l6ZSk7Ci0JaWYgKHFidWZmZXIgPT0gTlVMTCkKLQkJZ290 byBlcnJvcjsKLQotCS8qCi0JICogV2hlbiBzZXJpYWxpemluZyB0byBkaXNrLCB3ZSBzdG9yZSBx dWVyeSB0ZXh0cyBpbW1lZGlhdGVseSBhZnRlciB0aGVpcgotCSAqIGVudHJ5IGRhdGEuICBBbnkg b3JwaGFuZWQgcXVlcnkgdGV4dHMgYXJlIHRoZXJlYnkgZXhjbHVkZWQuCi0JICovCi0JaGFzaF9z ZXFfaW5pdCgmaGFzaF9zZXEsIHBnc3NfaGFzaCk7Ci0Jd2hpbGUgKChlbnRyeSA9IGhhc2hfc2Vx X3NlYXJjaCgmaGFzaF9zZXEpKSAhPSBOVUxMKQotCXsKLQkJaW50CQkJbGVuID0gZW50cnktPnF1 ZXJ5X2xlbjsKLQkJY2hhcgkgICAqcXN0ciA9IHF0ZXh0X2ZldGNoKGVudHJ5LT5xdWVyeV9vZmZz ZXQsIGxlbiwKLQkJCQkJCQkJCSAgIHFidWZmZXIsIHFidWZmZXJfc2l6ZSk7Ci0KLQkJaWYgKHFz dHIgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwkJCS8qIElnbm9yZSBhbnkgZW50cmllcyB3aXRoIGJv Z3VzIHRleHRzICovCi0KLQkJaWYgKGZ3cml0ZShlbnRyeSwgc2l6ZW9mKHBnc3NFbnRyeSksIDEs IGZpbGUpICE9IDEgfHwKLQkJCWZ3cml0ZShxc3RyLCAxLCBsZW4gKyAxLCBmaWxlKSAhPSBsZW4g KyAxKQotCQl7Ci0JCQkvKiBub3RlOiB3ZSBhc3N1bWUgaGFzaF9zZXFfdGVybSB3b24ndCBjaGFu Z2UgZXJybm8gKi8KLQkJCWhhc2hfc2VxX3Rlcm0oJmhhc2hfc2VxKTsKLQkJCWdvdG8gZXJyb3I7 Ci0JCX0KLQl9Ci0KLQkvKiBEdW1wIGdsb2JhbCBzdGF0aXN0aWNzIGZvciBwZ19zdGF0X3N0YXRl bWVudHMgKi8KLQlpZiAoZndyaXRlKCZwZ3NzLT5zdGF0cywgc2l6ZW9mKHBnc3NHbG9iYWxTdGF0 cyksIDEsIGZpbGUpICE9IDEpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwZnJlZShxYnVmZmVyKTsKLQlx YnVmZmVyID0gTlVMTDsKLQotCWlmIChGcmVlRmlsZShmaWxlKSkKLQl7Ci0JCWZpbGUgPSBOVUxM OwotCQlnb3RvIGVycm9yOwotCX0KLQotCS8qCi0JICogUmVuYW1lIGZpbGUgaW50byBwbGFjZSwg c28gd2UgYXRvbWljYWxseSByZXBsYWNlIGFueSBvbGQgb25lLgotCSAqLwotCSh2b2lkKSBkdXJh YmxlX3JlbmFtZShQR1NTX0RVTVBfRklMRSAiLnRtcCIsIFBHU1NfRFVNUF9GSUxFLCBMT0cpOwot Ci0JLyogVW5saW5rIHF1ZXJ5LXRleHRzIGZpbGU7IGl0J3Mgbm90IG5lZWRlZCB3aGlsZSBzaHV0 ZG93biAqLwotCXVubGluayhQR1NTX1RFWFRfRklMRSk7Ci0KLQlyZXR1cm47Ci0KLWVycm9yOgot CWVyZXBvcnQoTE9HLAotCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkgZXJybXNn KCJjb3VsZCBub3Qgd3JpdGUgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJUEdTU19EVU1QX0ZJTEUg Ii50bXAiKSkpOwotCWlmIChxYnVmZmVyKQotCQlwZnJlZShxYnVmZmVyKTsKLQlpZiAoZmlsZSkK LQkJRnJlZUZpbGUoZmlsZSk7Ci0JdW5saW5rKFBHU1NfRFVNUF9GSUxFICIudG1wIik7Ci0JdW5s aW5rKFBHU1NfVEVYVF9GSUxFKTsKIH0KIAogLyoKQEAgLTgzNyw3ICs2NDksNyBAQCBwZ3NzX3Bv c3RfcGFyc2VfYW5hbHl6ZShQYXJzZVN0YXRlICpwc3RhdGUsIFF1ZXJ5ICpxdWVyeSwgY29uc3Qg SnVtYmxlU3RhdGUgKmpzdAogCQlwcmV2X3Bvc3RfcGFyc2VfYW5hbHl6ZV9ob29rKHBzdGF0ZSwg cXVlcnksIGpzdGF0ZSk7CiAKIAkvKiBTYWZldHkgY2hlY2suLi4gKi8KLQlpZiAoIXBnc3MgfHwg IXBnc3NfaGFzaCB8fCAhcGdzc19lbmFibGVkKG5lc3RpbmdfbGV2ZWwpKQorCWlmICghcGdzcyB8 fCAhcGdzc19lbmFibGVkKG5lc3RpbmdfbGV2ZWwpKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtMTI1 NCw5ICsxMDY2LDYyIEBAIHBnc3NfUHJvY2Vzc1V0aWxpdHkoUGxhbm5lZFN0bXQgKnBzdG10LCBj b25zdCBjaGFyICpxdWVyeVN0cmluZywKIAl9CiB9CiAKKy8qCisgKiBJbml0aWFsaXplIGEgZnJl c2hseS1jcmVhdGVkIHNoYXJlZCBlbnRyeS4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBl bnRyeSBsb2NrLiAgVGhlIGVudHJ5IGlzIGNvbnNpZGVyZWQgIm5ldyIgd2hlbgorICoga2V5LnF1 ZXJ5aWQgaXMgc3RpbGwgemVybyAoYXMgbGVmdCBieSBwZ3N0YXQgZW50cnkgY3JlYXRpb24pLgor ICovCitzdGF0aWMgdm9pZAorcGdzc19lbnRyeV9pbml0KFBnU3RhdFNoYXJlZF9QZ3NzICpzaGFy ZWRfZW50cnksCisJCQkJY29uc3QgcGdzc0hhc2hLZXkgKmtleSwgaW50IGVuY29kaW5nKQorewor CWlmIChzaGFyZWRfZW50cnktPmtleS5xdWVyeWlkICE9IElOVDY0Q09OU1QoMCkpCisJCXJldHVy bjsKKworCXNoYXJlZF9lbnRyeS0+a2V5ID0gKmtleTsKKwltZW1zZXQoJnNoYXJlZF9lbnRyeS0+ Y291bnRlcnMsIDAsIHNpemVvZihDb3VudGVycykpOworCXNoYXJlZF9lbnRyeS0+Y291bnRlcnMu dXNhZ2UgPSBVU0FHRV9JTklUOworCXNoYXJlZF9lbnRyeS0+c3RhdHNfc2luY2UgPSBHZXRDdXJy ZW50VGltZXN0YW1wKCk7CisJc2hhcmVkX2VudHJ5LT5taW5tYXhfc3RhdHNfc2luY2UgPSBzaGFy ZWRfZW50cnktPnN0YXRzX3NpbmNlOworCXNoYXJlZF9lbnRyeS0+cXVlcnlfbGVuID0gLTE7CisJ c2hhcmVkX2VudHJ5LT5lbmNvZGluZyA9IGVuY29kaW5nOworCXNoYXJlZF9lbnRyeS0+cXVlcnlf b2Zmc2V0ID0gMDsKK30KKworLyoKKyAqIFN0b3JlIHF1ZXJ5IHRleHQgaW50byBhIHNoYXJlZCBl bnRyeSB2aWEgdGhlIGV4dGVybmFsIHRleHQgZmlsZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xk IHRoZSBlbnRyeSBsb2NrLiAgRG9lcyBub3RoaW5nIGlmIHRleHQgaXMgYWxyZWFkeSBwcmVzZW50 LgorICovCitzdGF0aWMgdm9pZAorcGdzc19zdG9yZV9xdWVyeV90ZXh0KFBnU3RhdFNoYXJlZF9Q Z3NzICpzaGFyZWRfZW50cnksCisJCQkJCSAgY29uc3QgY2hhciAqcXVlcnksIGludCBxdWVyeV9s ZW4sIGludCBlbmNvZGluZykKK3sKKwlTaXplCQlxdWVyeV9vZmZzZXQ7CisJaW50CQkJZ2NfY291 bnQ7CisKKwlpZiAoc2hhcmVkX2VudHJ5LT5xdWVyeV9sZW4gPj0gMCkKKwkJcmV0dXJuOworCisJ TFdMb2NrQWNxdWlyZSgmcGdzcy0+bG9jay5sb2NrLCBMV19TSEFSRUQpOworCWlmIChxdGV4dF9z dG9yZShxdWVyeSwgcXVlcnlfbGVuLCAmcXVlcnlfb2Zmc2V0LCAmZ2NfY291bnQpKQorCXsKKwkJ c2hhcmVkX2VudHJ5LT5xdWVyeV9vZmZzZXQgPSBxdWVyeV9vZmZzZXQ7CisJCXNoYXJlZF9lbnRy eS0+cXVlcnlfbGVuID0gcXVlcnlfbGVuOworCQlzaGFyZWRfZW50cnktPmVuY29kaW5nID0gZW5j b2Rpbmc7CisJfQorCUxXTG9ja1JlbGVhc2UoJnBnc3MtPmxvY2subG9jayk7Cit9CisKIC8qCiAg KiBTdG9yZSBzb21lIHN0YXRpc3RpY3MgZm9yIGEgc3RhdGVtZW50LgogICoKKyAqIFNoYXJlZCBl bnRyeSBjcmVhdGlvbiBhbmQgcXVlcnkgdGV4dCBzdG9yYWdlIGFyZSB3cml0dGVuIGRpcmVjdGx5 IHRvCisgKiBzaGFyZWQgbWVtb3J5LCBtYWtpbmcgZW50cmllcyBpbW1lZGlhdGVseSB2aXNpYmxl IHRvIG90aGVyIGJhY2tlbmRzLgorICogQ291bnRlciBhY2N1bXVsYXRpb24gaXMgZG9uZSBpbiBi YWNrZW5kLWxvY2FsIHBlbmRpbmcgZW50cmllcywgZmx1c2hlZAorICogcGVyaW9kaWNhbGx5IGJ5 IHBnc3NfZmx1c2hfcGVuZGluZ19jYi4KKyAqCiAgKiBJZiBqc3RhdGUgaXMgbm90IE5VTEwgdGhl biB3ZSdyZSB0cnlpbmcgdG8gY3JlYXRlIGFuIGVudHJ5IGZvciB3aGljaAogICogd2UgaGF2ZSBu byBzdGF0aXN0aWNzIGFzIHlldDsgd2UganVzdCB3YW50IHRvIHJlY29yZCB0aGUgbm9ybWFsaXpl ZAogICogcXVlcnkgc3RyaW5nLiAgdG90YWxfdGltZSwgcm93cywgYnVmdXNhZ2UgYW5kIHdhbHVz YWdlIGFyZSBpZ25vcmVkIGluIHRoaXMKQEAgLTEyNzksMTQgKzExNDQsMTYgQEAgcGdzc19zdG9y ZShjb25zdCBjaGFyICpxdWVyeSwgaW50NjQgcXVlcnlJZCwKIAkJICAgUGxhbm5lZFN0bXRPcmln aW4gcGxhbk9yaWdpbikKIHsKIAlwZ3NzSGFzaEtleSBrZXk7Ci0JcGdzc0VudHJ5ICAqZW50cnk7 CisJUGdTdGF0X0VudHJ5UmVmICplbnRyeV9yZWY7CisJUGdTdGF0U2hhcmVkX1Bnc3MgKnNoYXJl ZF9lbnRyeTsKKwlQZ1N0YXRfUGVuZGluZ1Bnc3MgKnBlbmRpbmc7CiAJY2hhcgkgICAqbm9ybV9x dWVyeSA9IE5VTEw7CiAJaW50CQkJZW5jb2RpbmcgPSBHZXREYXRhYmFzZUVuY29kaW5nKCk7CiAK IAlBc3NlcnQocXVlcnkgIT0gTlVMTCk7CiAKIAkvKiBTYWZldHkgY2hlY2suLi4gKi8KLQlpZiAo IXBnc3MgfHwgIXBnc3NfaGFzaCkKKwlpZiAoIXBnc3MpCiAJCXJldHVybjsKIAogCS8qCkBAIC0x MzEzLDE5MiArMTE4MCwxNzEgQEAgcGdzc19zdG9yZShjb25zdCBjaGFyICpxdWVyeSwgaW50NjQg cXVlcnlJZCwKIAlrZXkucXVlcnlpZCA9IHF1ZXJ5SWQ7CiAJa2V5LnRvcGxldmVsID0gKG5lc3Rp bmdfbGV2ZWwgPT0gMCk7CiAKLQkvKiBMb29rdXAgdGhlIGhhc2ggdGFibGUgZW50cnkgd2l0aCBz aGFyZWQgbG9jay4gKi8KLQlMV0xvY2tBY3F1aXJlKCZwZ3NzLT5sb2NrLmxvY2ssIExXX1NIQVJF RCk7Ci0KLQllbnRyeSA9IChwZ3NzRW50cnkgKikgaGFzaF9zZWFyY2gocGdzc19oYXNoLCAma2V5 LCBIQVNIX0ZJTkQsIE5VTEwpOwotCi0JLyogQ3JlYXRlIG5ldyBlbnRyeSwgaWYgbm90IHByZXNl bnQgKi8KLQlpZiAoIWVudHJ5KQorCS8qCisJICogSWYganN0YXRlIGlzIHNldCwgY3JlYXRlIHRo ZSBzaGFyZWQgZW50cnkgYW5kIHN0b3JlIG5vcm1hbGl6ZWQgcXVlcnkKKwkgKiB0ZXh0LiAgRG9u J3QgaW5jcmVtZW50IGNvdW50ZXJzOyBlbnRyaWVzIHdpdGggemVybyBjYWxscyBhcmUgbm90CisJ ICogcmV0dXJuZWQgYnkgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKCkuCisJICovCisJaWYg KGpzdGF0ZSkKIAl7Ci0JCVNpemUJCXF1ZXJ5X29mZnNldDsKLQkJaW50CQkJZ2NfY291bnQ7Ci0J CWJvb2wJCXN0b3JlZDsKLQkJYm9vbAkJZG9fZ2M7CisJCWNvbnN0IGNoYXIgKnN0b3JlX3F1ZXJ5 OwogCi0JCS8qCi0JCSAqIENyZWF0ZSBhIG5ldywgbm9ybWFsaXplZCBxdWVyeSBzdHJpbmcgaWYg Y2FsbGVyIGFza2VkLiAgV2UgZG9uJ3QKLQkJICogbmVlZCB0byBob2xkIHRoZSBsb2NrIHdoaWxl IGRvaW5nIHRoaXMgd29yay4gIChOb3RlOiBpbiBhbnkgY2FzZSwKLQkJICogaXQncyBwb3NzaWJs ZSB0aGF0IHNvbWVvbmUgZWxzZSBjcmVhdGVzIGEgZHVwbGljYXRlIGhhc2h0YWJsZSBlbnRyeQot CQkgKiBpbiB0aGUgaW50ZXJ2YWwgd2hlcmUgd2UgZG9uJ3QgaG9sZCB0aGUgbG9jayBiZWxvdy4g IFRoYXQgY2FzZSBpcwotCQkgKiBoYW5kbGVkIGJ5IGVudHJ5X2FsbG9jLikKLQkJICovCi0JCWlm IChqc3RhdGUpCisJCWlmIChwZ3N0YXRfZ2V0X2VudHJ5X2NvdW50KFBHU1RBVF9LSU5EX1BHU1Mp ID49IHBnc3NfbWF4KQogCQl7Ci0JCQlMV0xvY2tSZWxlYXNlKCZwZ3NzLT5sb2NrLmxvY2spOwot CQkJbm9ybV9xdWVyeSA9IGdlbmVyYXRlX25vcm1hbGl6ZWRfcXVlcnkoanN0YXRlLCBxdWVyeSwK LQkJCQkJCQkJCQkJCSAgIHF1ZXJ5X2xvY2F0aW9uLAotCQkJCQkJCQkJCQkJICAgJnF1ZXJ5X2xl bik7Ci0JCQlMV0xvY2tBY3F1aXJlKCZwZ3NzLT5sb2NrLmxvY2ssIExXX1NIQVJFRCk7CisJCQlw Z3NzX21heWJlX2V2aWN0KCk7CisJCQlyZXR1cm47CiAJCX0KIAotCQkvKiBBcHBlbmQgbmV3IHF1 ZXJ5IHRleHQgdG8gZmlsZSB3aXRoIG9ubHkgc2hhcmVkIGxvY2sgaGVsZCAqLwotCQlzdG9yZWQg PSBxdGV4dF9zdG9yZShub3JtX3F1ZXJ5ID8gbm9ybV9xdWVyeSA6IHF1ZXJ5LCBxdWVyeV9sZW4s Ci0JCQkJCQkJICZxdWVyeV9vZmZzZXQsICZnY19jb3VudCk7Ci0KLQkJLyoKLQkJICogRGV0ZXJt aW5lIHdoZXRoZXIgd2UgbmVlZCB0byBnYXJiYWdlIGNvbGxlY3QgZXh0ZXJuYWwgcXVlcnkgdGV4 dHMKLQkJICogd2hpbGUgdGhlIHNoYXJlZCBsb2NrIGlzIHN0aWxsIGhlbGQuICBUaGlzIG1pY3Jv LW9wdGltaXphdGlvbgotCQkgKiBhdm9pZHMgdGFraW5nIHRoZSB0aW1lIHRvIGRlY2lkZSB0aGlz IHdoaWxlIGhvbGRpbmcgZXhjbHVzaXZlIGxvY2suCi0JCSAqLwotCQlkb19nYyA9IG5lZWRfZ2Nf cXRleHRzKCk7Ci0KLQkJLyogTmVlZCBleGNsdXNpdmUgbG9jayB0byBtYWtlIGEgbmV3IGhhc2h0 YWJsZSBlbnRyeSAtIHByb21vdGUgKi8KLQkJTFdMb2NrUmVsZWFzZSgmcGdzcy0+bG9jay5sb2Nr KTsKLQkJTFdMb2NrQWNxdWlyZSgmcGdzcy0+bG9jay5sb2NrLCBMV19FWENMVVNJVkUpOworCQlu b3JtX3F1ZXJ5ID0gZ2VuZXJhdGVfbm9ybWFsaXplZF9xdWVyeShqc3RhdGUsIHF1ZXJ5LAorCQkJ CQkJCQkJCQkgICBxdWVyeV9sb2NhdGlvbiwKKwkJCQkJCQkJCQkJICAgJnF1ZXJ5X2xlbik7CisJ CXN0b3JlX3F1ZXJ5ID0gbm9ybV9xdWVyeSA/IG5vcm1fcXVlcnkgOiBxdWVyeTsKIAotCQkvKgot CQkgKiBBIGdhcmJhZ2UgY29sbGVjdGlvbiBtYXkgaGF2ZSBvY2N1cnJlZCB3aGlsZSB3ZSB3ZXJl bid0IGhvbGRpbmcgdGhlCi0JCSAqIGxvY2suICBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCB0 aGlzIGhhcHBlbnMsIHRoZSBxdWVyeSB0ZXh0IHdlCi0JCSAqIHN0b3JlZCBhYm92ZSB3aWxsIGhh dmUgYmVlbiBnYXJiYWdlIGNvbGxlY3RlZCwgc28gd3JpdGUgaXQgYWdhaW4uCi0JCSAqIFRoaXMg c2hvdWxkIGJlIGluZnJlcXVlbnQgZW5vdWdoIHRoYXQgZG9pbmcgaXQgd2hpbGUgaG9sZGluZwot CQkgKiBleGNsdXNpdmUgbG9jayBpc24ndCBhIHBlcmZvcm1hbmNlIHByb2JsZW0uCi0JCSAqLwot CQlpZiAoIXN0b3JlZCB8fCBwZ3NzLT5nY19jb3VudCAhPSBnY19jb3VudCkKLQkJCXN0b3JlZCA9 IHF0ZXh0X3N0b3JlKG5vcm1fcXVlcnkgPyBub3JtX3F1ZXJ5IDogcXVlcnksIHF1ZXJ5X2xlbiwK LQkJCQkJCQkJICZxdWVyeV9vZmZzZXQsIE5VTEwpOworCQllbnRyeV9yZWYgPSBwZ3N0YXRfZ2V0 X2VudHJ5X3JlZl9sb2NrZWQoUEdTVEFUX0tJTkRfUEdTUywKKwkJCQkJCQkJCQkJCWtleS5kYmlk LAorCQkJCQkJCQkJCQkJcGdzc19vYmppZCgma2V5KSwKKwkJCQkJCQkJCQkJCXRydWUpOworCQlp ZiAoIWVudHJ5X3JlZikKKwkJeworCQkJaWYgKG5vcm1fcXVlcnkpCisJCQkJcGZyZWUobm9ybV9x dWVyeSk7CisJCQlyZXR1cm47CisJCX0KIAotCQkvKiBJZiB3ZSBmYWlsZWQgdG8gd3JpdGUgdG8g dGhlIHRleHQgZmlsZSwgZ2l2ZSB1cCAqLwotCQlpZiAoIXN0b3JlZCkKLQkJCWdvdG8gZG9uZTsK KwkJc2hhcmVkX2VudHJ5ID0gKFBnU3RhdFNoYXJlZF9QZ3NzICopIGVudHJ5X3JlZi0+c2hhcmVk X3N0YXRzOworCQlwZ3NzX2VudHJ5X2luaXQoc2hhcmVkX2VudHJ5LCAma2V5LCBlbmNvZGluZyk7 CisJCXBnc3Nfc3RvcmVfcXVlcnlfdGV4dChzaGFyZWRfZW50cnksIHN0b3JlX3F1ZXJ5LCBxdWVy eV9sZW4sIGVuY29kaW5nKTsKIAotCQkvKiBPSyB0byBjcmVhdGUgYSBuZXcgaGFzaHRhYmxlIGVu dHJ5ICovCi0JCWVudHJ5ID0gZW50cnlfYWxsb2MoJmtleSwgcXVlcnlfb2Zmc2V0LCBxdWVyeV9s ZW4sIGVuY29kaW5nLAotCQkJCQkJCWpzdGF0ZSAhPSBOVUxMKTsKKwkJcGdzdGF0X3VubG9ja19l bnRyeShlbnRyeV9yZWYpOwogCi0JCS8qIElmIG5lZWRlZCwgcGVyZm9ybSBnYXJiYWdlIGNvbGxl Y3Rpb24gd2hpbGUgZXhjbHVzaXZlIGxvY2sgaGVsZCAqLwotCQlpZiAoZG9fZ2MpCi0JCQlnY19x dGV4dHMoKTsKKwkJaWYgKG5vcm1fcXVlcnkpCisJCQlwZnJlZShub3JtX3F1ZXJ5KTsKKwkJcmV0 dXJuOwogCX0KIAotCS8qIEluY3JlbWVudCB0aGUgY291bnRzLCBleGNlcHQgd2hlbiBqc3RhdGUg aXMgbm90IE5VTEwgKi8KLQlpZiAoIWpzdGF0ZSkKKwkvKgorCSAqIE5vcm1hbCBjYXNlOiBhY2N1 bXVsYXRlIHN0YXRzIGluIGEgcGVuZGluZyBlbnRyeS4gIFRoZSBwZW5kaW5nIGVudHJ5CisJICog d2lsbCBiZSBmbHVzaGVkIHRvIHNoYXJlZCBtZW1vcnkgYnkgcGdzc19mbHVzaF9wZW5kaW5nX2Ni LgorCSAqCisJICogQnV0IGZpcnN0LCBlbnN1cmUgdGhlIHNoYXJlZCBlbnRyeSBleGlzdHMgd2l0 aCBxdWVyeSB0ZXh0LgorCSAqLworCWVudHJ5X3JlZiA9IHBnc3RhdF9nZXRfZW50cnlfcmVmKFBH U1RBVF9LSU5EX1BHU1MsIGtleS5kYmlkLAorCQkJCQkJCQkJIHBnc3Nfb2JqaWQoJmtleSksIGZh bHNlLCBOVUxMKTsKKwlpZiAoIWVudHJ5X3JlZikKIAl7Ci0JCUFzc2VydChraW5kID09IFBHU1Nf UExBTiB8fCBraW5kID09IFBHU1NfRVhFQyk7Ci0KIAkJLyoKLQkJICogR3JhYiB0aGUgc3Bpbmxv Y2sgd2hpbGUgdXBkYXRpbmcgdGhlIGNvdW50ZXJzIChzZWUgY29tbWVudCBhYm91dAotCQkgKiBs b2NraW5nIHJ1bGVzIGF0IHRoZSBoZWFkIG9mIHRoZSBmaWxlKQorCQkgKiBFbnRyeSBkb2Vzbid0 IGV4aXN0IHlldC4gIERvbid0IGNyZWF0ZSBhIG5ldyBvbmUgaWYgd2UndmUgYWxyZWFkeQorCQkg KiBoaXQgdGhlIGNvbmZpZ3VyZWQgbWF4aW11bTsgZXZpY3Rpb24gd2lsbCBmcmVlIHNwYWNlIGV2 ZW50dWFsbHkuCiAJCSAqLwotCQlTcGluTG9ja0FjcXVpcmUoJmVudHJ5LT5tdXRleCk7CisJCWlm IChwZ3N0YXRfZ2V0X2VudHJ5X2NvdW50KFBHU1RBVF9LSU5EX1BHU1MpID49IHBnc3NfbWF4KQor CQl7CisJCQlwZ3NzX21heWJlX2V2aWN0KCk7CisJCQlyZXR1cm47CisJCX0KIAotCQkvKiAiVW5z dGljayIgZW50cnkgaWYgaXQgd2FzIHByZXZpb3VzbHkgc3RpY2t5ICovCi0JCWlmIChJU19TVElD S1koZW50cnktPmNvdW50ZXJzKSkKLQkJCWVudHJ5LT5jb3VudGVycy51c2FnZSA9IFVTQUdFX0lO SVQ7CisJCWVudHJ5X3JlZiA9IHBnc3RhdF9nZXRfZW50cnlfcmVmX2xvY2tlZChQR1NUQVRfS0lO RF9QR1NTLAorCQkJCQkJCQkJCQkJa2V5LmRiaWQsCisJCQkJCQkJCQkJCQlwZ3NzX29iamlkKCZr ZXkpLAorCQkJCQkJCQkJCQkJdHJ1ZSk7CisJCWlmICghZW50cnlfcmVmKQorCQkJcmV0dXJuOwog Ci0JCWVudHJ5LT5jb3VudGVycy5jYWxsc1traW5kXSArPSAxOwotCQllbnRyeS0+Y291bnRlcnMu dG90YWxfdGltZVtraW5kXSArPSB0b3RhbF90aW1lOworCQlzaGFyZWRfZW50cnkgPSAoUGdTdGF0 U2hhcmVkX1Bnc3MgKikgZW50cnlfcmVmLT5zaGFyZWRfc3RhdHM7CisJCXBnc3NfZW50cnlfaW5p dChzaGFyZWRfZW50cnksICZrZXksIGVuY29kaW5nKTsKKwkJcGdzc19zdG9yZV9xdWVyeV90ZXh0 KHNoYXJlZF9lbnRyeSwgcXVlcnksIHF1ZXJ5X2xlbiwgZW5jb2RpbmcpOwogCi0JCWlmIChlbnRy eS0+Y291bnRlcnMuY2FsbHNba2luZF0gPT0gMSkKLQkJewotCQkJZW50cnktPmNvdW50ZXJzLm1p bl90aW1lW2tpbmRdID0gdG90YWxfdGltZTsKLQkJCWVudHJ5LT5jb3VudGVycy5tYXhfdGltZVtr aW5kXSA9IHRvdGFsX3RpbWU7Ci0JCQllbnRyeS0+Y291bnRlcnMubWVhbl90aW1lW2tpbmRdID0g dG90YWxfdGltZTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBXZWxmb3JkJ3MgbWV0 aG9kIGZvciBhY2N1cmF0ZWx5IGNvbXB1dGluZyB2YXJpYW5jZS4gU2VlCi0JCQkgKiA8aHR0cDov L3d3dy5qb2huZGNvb2suY29tL2Jsb2cvc3RhbmRhcmRfZGV2aWF0aW9uLz4KLQkJCSAqLwotCQkJ ZG91YmxlCQlvbGRfbWVhbiA9IGVudHJ5LT5jb3VudGVycy5tZWFuX3RpbWVba2luZF07CisJCXBn c3RhdF91bmxvY2tfZW50cnkoZW50cnlfcmVmKTsKKwl9CiAKLQkJCWVudHJ5LT5jb3VudGVycy5t ZWFuX3RpbWVba2luZF0gKz0KLQkJCQkodG90YWxfdGltZSAtIG9sZF9tZWFuKSAvIGVudHJ5LT5j b3VudGVycy5jYWxsc1traW5kXTsKLQkJCWVudHJ5LT5jb3VudGVycy5zdW1fdmFyX3RpbWVba2lu ZF0gKz0KLQkJCQkodG90YWxfdGltZSAtIG9sZF9tZWFuKSAqICh0b3RhbF90aW1lIC0gZW50cnkt PmNvdW50ZXJzLm1lYW5fdGltZVtraW5kXSk7CisJLyoKKwkgKiBOb3cgYWNjdW11bGF0ZSBzdGF0 cyBpbiB0aGUgcGVuZGluZyBlbnRyeS4KKwkgKi8KKwlBc3NlcnQoa2luZCA9PSBQR1NTX1BMQU4g fHwga2luZCA9PSBQR1NTX0VYRUMpOwogCi0JCQkvKgotCQkJICogQ2FsY3VsYXRlIG1pbiBhbmQg bWF4IHRpbWUuIG1pbiA9IDAgYW5kIG1heCA9IDAgbWVhbnMgdGhhdCB0aGUKLQkJCSAqIG1pbi9t YXggc3RhdGlzdGljcyB3ZXJlIHJlc2V0Ci0JCQkgKi8KLQkJCWlmIChlbnRyeS0+Y291bnRlcnMu bWluX3RpbWVba2luZF0gPT0gMAotCQkJCSYmIGVudHJ5LT5jb3VudGVycy5tYXhfdGltZVtraW5k XSA9PSAwKQotCQkJewotCQkJCWVudHJ5LT5jb3VudGVycy5taW5fdGltZVtraW5kXSA9IHRvdGFs X3RpbWU7Ci0JCQkJZW50cnktPmNvdW50ZXJzLm1heF90aW1lW2tpbmRdID0gdG90YWxfdGltZTsK LQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlpZiAoZW50cnktPmNvdW50ZXJzLm1pbl90aW1lW2tp bmRdID4gdG90YWxfdGltZSkKLQkJCQkJZW50cnktPmNvdW50ZXJzLm1pbl90aW1lW2tpbmRdID0g dG90YWxfdGltZTsKLQkJCQlpZiAoZW50cnktPmNvdW50ZXJzLm1heF90aW1lW2tpbmRdIDwgdG90 YWxfdGltZSkKLQkJCQkJZW50cnktPmNvdW50ZXJzLm1heF90aW1lW2tpbmRdID0gdG90YWxfdGlt ZTsKLQkJCX0KLQkJfQotCQllbnRyeS0+Y291bnRlcnMucm93cyArPSByb3dzOwotCQllbnRyeS0+ Y291bnRlcnMuc2hhcmVkX2Jsa3NfaGl0ICs9IGJ1ZnVzYWdlLT5zaGFyZWRfYmxrc19oaXQ7Ci0J CWVudHJ5LT5jb3VudGVycy5zaGFyZWRfYmxrc19yZWFkICs9IGJ1ZnVzYWdlLT5zaGFyZWRfYmxr c19yZWFkOwotCQllbnRyeS0+Y291bnRlcnMuc2hhcmVkX2Jsa3NfZGlydGllZCArPSBidWZ1c2Fn ZS0+c2hhcmVkX2Jsa3NfZGlydGllZDsKLQkJZW50cnktPmNvdW50ZXJzLnNoYXJlZF9ibGtzX3dy aXR0ZW4gKz0gYnVmdXNhZ2UtPnNoYXJlZF9ibGtzX3dyaXR0ZW47Ci0JCWVudHJ5LT5jb3VudGVy cy5sb2NhbF9ibGtzX2hpdCArPSBidWZ1c2FnZS0+bG9jYWxfYmxrc19oaXQ7Ci0JCWVudHJ5LT5j b3VudGVycy5sb2NhbF9ibGtzX3JlYWQgKz0gYnVmdXNhZ2UtPmxvY2FsX2Jsa3NfcmVhZDsKLQkJ ZW50cnktPmNvdW50ZXJzLmxvY2FsX2Jsa3NfZGlydGllZCArPSBidWZ1c2FnZS0+bG9jYWxfYmxr c19kaXJ0aWVkOwotCQllbnRyeS0+Y291bnRlcnMubG9jYWxfYmxrc193cml0dGVuICs9IGJ1ZnVz YWdlLT5sb2NhbF9ibGtzX3dyaXR0ZW47Ci0JCWVudHJ5LT5jb3VudGVycy50ZW1wX2Jsa3NfcmVh ZCArPSBidWZ1c2FnZS0+dGVtcF9ibGtzX3JlYWQ7Ci0JCWVudHJ5LT5jb3VudGVycy50ZW1wX2Js a3Nfd3JpdHRlbiArPSBidWZ1c2FnZS0+dGVtcF9ibGtzX3dyaXR0ZW47Ci0JCWVudHJ5LT5jb3Vu dGVycy5zaGFyZWRfYmxrX3JlYWRfdGltZSArPSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhidWZ1 c2FnZS0+c2hhcmVkX2Jsa19yZWFkX3RpbWUpOwotCQllbnRyeS0+Y291bnRlcnMuc2hhcmVkX2Js a193cml0ZV90aW1lICs9IElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGJ1ZnVzYWdlLT5zaGFyZWRf YmxrX3dyaXRlX3RpbWUpOwotCQllbnRyeS0+Y291bnRlcnMubG9jYWxfYmxrX3JlYWRfdGltZSAr PSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhidWZ1c2FnZS0+bG9jYWxfYmxrX3JlYWRfdGltZSk7 Ci0JCWVudHJ5LT5jb3VudGVycy5sb2NhbF9ibGtfd3JpdGVfdGltZSArPSBJTlNUUl9USU1FX0dF VF9NSUxMSVNFQyhidWZ1c2FnZS0+bG9jYWxfYmxrX3dyaXRlX3RpbWUpOwotCQllbnRyeS0+Y291 bnRlcnMudGVtcF9ibGtfcmVhZF90aW1lICs9IElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGJ1ZnVz YWdlLT50ZW1wX2Jsa19yZWFkX3RpbWUpOwotCQllbnRyeS0+Y291bnRlcnMudGVtcF9ibGtfd3Jp dGVfdGltZSArPSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhidWZ1c2FnZS0+dGVtcF9ibGtfd3Jp dGVfdGltZSk7Ci0JCWVudHJ5LT5jb3VudGVycy51c2FnZSArPSBVU0FHRV9FWEVDKHRvdGFsX3Rp bWUpOwotCQllbnRyeS0+Y291bnRlcnMud2FsX3JlY29yZHMgKz0gd2FsdXNhZ2UtPndhbF9yZWNv cmRzOwotCQllbnRyeS0+Y291bnRlcnMud2FsX2ZwaSArPSB3YWx1c2FnZS0+d2FsX2ZwaTsKLQkJ ZW50cnktPmNvdW50ZXJzLndhbF9ieXRlcyArPSB3YWx1c2FnZS0+d2FsX2J5dGVzOwotCQllbnRy eS0+Y291bnRlcnMud2FsX2J1ZmZlcnNfZnVsbCArPSB3YWx1c2FnZS0+d2FsX2J1ZmZlcnNfZnVs bDsKLQkJaWYgKGppdHVzYWdlKQotCQl7Ci0JCQllbnRyeS0+Y291bnRlcnMuaml0X2Z1bmN0aW9u cyArPSBqaXR1c2FnZS0+Y3JlYXRlZF9mdW5jdGlvbnM7Ci0JCQllbnRyeS0+Y291bnRlcnMuaml0 X2dlbmVyYXRpb25fdGltZSArPSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhqaXR1c2FnZS0+Z2Vu ZXJhdGlvbl9jb3VudGVyKTsKKwllbnRyeV9yZWYgPSBwZ3N0YXRfcHJlcF9wZW5kaW5nX2VudHJ5 KFBHU1RBVF9LSU5EX1BHU1MsIGtleS5kYmlkLAorCQkJCQkJCQkJCSAgcGdzc19vYmppZCgma2V5 KSwgTlVMTCk7CisJcGVuZGluZyA9IChQZ1N0YXRfUGVuZGluZ1Bnc3MgKikgZW50cnlfcmVmLT5w ZW5kaW5nOwogCi0JCQlpZiAoSU5TVFJfVElNRV9HRVRfTUlMTElTRUMoaml0dXNhZ2UtPmRlZm9y bV9jb3VudGVyKSkKLQkJCQllbnRyeS0+Y291bnRlcnMuaml0X2RlZm9ybV9jb3VudCsrOwotCQkJ ZW50cnktPmNvdW50ZXJzLmppdF9kZWZvcm1fdGltZSArPSBJTlNUUl9USU1FX0dFVF9NSUxMSVNF QyhqaXR1c2FnZS0+ZGVmb3JtX2NvdW50ZXIpOworCXBlbmRpbmctPmNvdW50ZXJzLmNhbGxzW2tp bmRdICs9IDE7CisJcGVuZGluZy0+Y291bnRlcnMudG90YWxfdGltZVtraW5kXSArPSB0b3RhbF90 aW1lOwogCi0JCQlpZiAoSU5TVFJfVElNRV9HRVRfTUlMTElTRUMoaml0dXNhZ2UtPmlubGluaW5n X2NvdW50ZXIpKQotCQkJCWVudHJ5LT5jb3VudGVycy5qaXRfaW5saW5pbmdfY291bnQrKzsKLQkJ CWVudHJ5LT5jb3VudGVycy5qaXRfaW5saW5pbmdfdGltZSArPSBJTlNUUl9USU1FX0dFVF9NSUxM SVNFQyhqaXR1c2FnZS0+aW5saW5pbmdfY291bnRlcik7CisJLyoKKwkgKiBDb21wdXRlIG1lYW4g YW5kIHN1bSBvZiBzcXVhcmVkIGRldmlhdGlvbnMgdXNpbmcgV2VsZm9yZCdzIG9ubGluZQorCSAq IGFsZ29yaXRobS4gIFRoZXNlIHBlci1iYWNrZW5kIHZhbHVlcyBhcmUgbGF0ZXIgbWVyZ2VkIGlu dG8gc2hhcmVkCisJICogbWVtb3J5IHVzaW5nIENoYW4ncyBwYXJhbGxlbCB2YXJpYW5jZSBhbGdv cml0aG0gaW4gdGhlIGZsdXNoIGNhbGxiYWNrLgorCSAqIFNlZSA8aHR0cDovL3d3dy5qb2huZGNv b2suY29tL2Jsb2cvc3RhbmRhcmRfZGV2aWF0aW9uLz4KKwkgKi8KKwlpZiAocGVuZGluZy0+Y291 bnRlcnMuY2FsbHNba2luZF0gPT0gMSkKKwl7CisJCXBlbmRpbmctPmNvdW50ZXJzLm1pbl90aW1l W2tpbmRdID0gdG90YWxfdGltZTsKKwkJcGVuZGluZy0+Y291bnRlcnMubWF4X3RpbWVba2luZF0g PSB0b3RhbF90aW1lOworCQlwZW5kaW5nLT5jb3VudGVycy5tZWFuX3RpbWVba2luZF0gPSB0b3Rh bF90aW1lOworCX0KKwllbHNlCisJeworCQlkb3VibGUJCW9sZF9tZWFuID0gcGVuZGluZy0+Y291 bnRlcnMubWVhbl90aW1lW2tpbmRdOworCisJCWlmIChwZW5kaW5nLT5jb3VudGVycy5taW5fdGlt ZVtraW5kXSA+IHRvdGFsX3RpbWUpCisJCQlwZW5kaW5nLT5jb3VudGVycy5taW5fdGltZVtraW5k XSA9IHRvdGFsX3RpbWU7CisJCWlmIChwZW5kaW5nLT5jb3VudGVycy5tYXhfdGltZVtraW5kXSA8 IHRvdGFsX3RpbWUpCisJCQlwZW5kaW5nLT5jb3VudGVycy5tYXhfdGltZVtraW5kXSA9IHRvdGFs X3RpbWU7CisJCXBlbmRpbmctPmNvdW50ZXJzLm1lYW5fdGltZVtraW5kXSArPQorCQkJKHRvdGFs X3RpbWUgLSBvbGRfbWVhbikgLyBwZW5kaW5nLT5jb3VudGVycy5jYWxsc1traW5kXTsKKwkJcGVu ZGluZy0+Y291bnRlcnMuc3VtX3Zhcl90aW1lW2tpbmRdICs9CisJCQkodG90YWxfdGltZSAtIG9s ZF9tZWFuKSAqICh0b3RhbF90aW1lIC0gcGVuZGluZy0+Y291bnRlcnMubWVhbl90aW1lW2tpbmRd KTsKKwl9CiAKLQkJCWlmIChJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhqaXR1c2FnZS0+b3B0aW1p emF0aW9uX2NvdW50ZXIpKQotCQkJCWVudHJ5LT5jb3VudGVycy5qaXRfb3B0aW1pemF0aW9uX2Nv dW50Kys7Ci0JCQllbnRyeS0+Y291bnRlcnMuaml0X29wdGltaXphdGlvbl90aW1lICs9IElOU1RS X1RJTUVfR0VUX01JTExJU0VDKGppdHVzYWdlLT5vcHRpbWl6YXRpb25fY291bnRlcik7CisJcGVu ZGluZy0+Y291bnRlcnMucm93cyArPSByb3dzOworCXBlbmRpbmctPmNvdW50ZXJzLnNoYXJlZF9i bGtzX2hpdCArPSBidWZ1c2FnZS0+c2hhcmVkX2Jsa3NfaGl0OworCXBlbmRpbmctPmNvdW50ZXJz LnNoYXJlZF9ibGtzX3JlYWQgKz0gYnVmdXNhZ2UtPnNoYXJlZF9ibGtzX3JlYWQ7CisJcGVuZGlu Zy0+Y291bnRlcnMuc2hhcmVkX2Jsa3NfZGlydGllZCArPSBidWZ1c2FnZS0+c2hhcmVkX2Jsa3Nf ZGlydGllZDsKKwlwZW5kaW5nLT5jb3VudGVycy5zaGFyZWRfYmxrc193cml0dGVuICs9IGJ1ZnVz YWdlLT5zaGFyZWRfYmxrc193cml0dGVuOworCXBlbmRpbmctPmNvdW50ZXJzLmxvY2FsX2Jsa3Nf aGl0ICs9IGJ1ZnVzYWdlLT5sb2NhbF9ibGtzX2hpdDsKKwlwZW5kaW5nLT5jb3VudGVycy5sb2Nh bF9ibGtzX3JlYWQgKz0gYnVmdXNhZ2UtPmxvY2FsX2Jsa3NfcmVhZDsKKwlwZW5kaW5nLT5jb3Vu dGVycy5sb2NhbF9ibGtzX2RpcnRpZWQgKz0gYnVmdXNhZ2UtPmxvY2FsX2Jsa3NfZGlydGllZDsK KwlwZW5kaW5nLT5jb3VudGVycy5sb2NhbF9ibGtzX3dyaXR0ZW4gKz0gYnVmdXNhZ2UtPmxvY2Fs X2Jsa3Nfd3JpdHRlbjsKKwlwZW5kaW5nLT5jb3VudGVycy50ZW1wX2Jsa3NfcmVhZCArPSBidWZ1 c2FnZS0+dGVtcF9ibGtzX3JlYWQ7CisJcGVuZGluZy0+Y291bnRlcnMudGVtcF9ibGtzX3dyaXR0 ZW4gKz0gYnVmdXNhZ2UtPnRlbXBfYmxrc193cml0dGVuOworCXBlbmRpbmctPmNvdW50ZXJzLnNo YXJlZF9ibGtfcmVhZF90aW1lICs9IElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGJ1ZnVzYWdlLT5z aGFyZWRfYmxrX3JlYWRfdGltZSk7CisJcGVuZGluZy0+Y291bnRlcnMuc2hhcmVkX2Jsa193cml0 ZV90aW1lICs9IElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGJ1ZnVzYWdlLT5zaGFyZWRfYmxrX3dy aXRlX3RpbWUpOworCXBlbmRpbmctPmNvdW50ZXJzLmxvY2FsX2Jsa19yZWFkX3RpbWUgKz0gSU5T VFJfVElNRV9HRVRfTUlMTElTRUMoYnVmdXNhZ2UtPmxvY2FsX2Jsa19yZWFkX3RpbWUpOworCXBl bmRpbmctPmNvdW50ZXJzLmxvY2FsX2Jsa193cml0ZV90aW1lICs9IElOU1RSX1RJTUVfR0VUX01J TExJU0VDKGJ1ZnVzYWdlLT5sb2NhbF9ibGtfd3JpdGVfdGltZSk7CisJcGVuZGluZy0+Y291bnRl cnMudGVtcF9ibGtfcmVhZF90aW1lICs9IElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGJ1ZnVzYWdl LT50ZW1wX2Jsa19yZWFkX3RpbWUpOworCXBlbmRpbmctPmNvdW50ZXJzLnRlbXBfYmxrX3dyaXRl X3RpbWUgKz0gSU5TVFJfVElNRV9HRVRfTUlMTElTRUMoYnVmdXNhZ2UtPnRlbXBfYmxrX3dyaXRl X3RpbWUpOworCXBlbmRpbmctPmNvdW50ZXJzLnVzYWdlICs9IFVTQUdFX0VYRUModG90YWxfdGlt ZSk7CisJcGVuZGluZy0+Y291bnRlcnMud2FsX3JlY29yZHMgKz0gd2FsdXNhZ2UtPndhbF9yZWNv cmRzOworCXBlbmRpbmctPmNvdW50ZXJzLndhbF9mcGkgKz0gd2FsdXNhZ2UtPndhbF9mcGk7CisJ cGVuZGluZy0+Y291bnRlcnMud2FsX2J5dGVzICs9IHdhbHVzYWdlLT53YWxfYnl0ZXM7CisJcGVu ZGluZy0+Y291bnRlcnMud2FsX2J1ZmZlcnNfZnVsbCArPSB3YWx1c2FnZS0+d2FsX2J1ZmZlcnNf ZnVsbDsKKwlpZiAoaml0dXNhZ2UpCisJeworCQlwZW5kaW5nLT5jb3VudGVycy5qaXRfZnVuY3Rp b25zICs9IGppdHVzYWdlLT5jcmVhdGVkX2Z1bmN0aW9uczsKKwkJcGVuZGluZy0+Y291bnRlcnMu aml0X2dlbmVyYXRpb25fdGltZSArPSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhqaXR1c2FnZS0+ Z2VuZXJhdGlvbl9jb3VudGVyKTsKIAotCQkJaWYgKElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGpp dHVzYWdlLT5lbWlzc2lvbl9jb3VudGVyKSkKLQkJCQllbnRyeS0+Y291bnRlcnMuaml0X2VtaXNz aW9uX2NvdW50Kys7Ci0JCQllbnRyeS0+Y291bnRlcnMuaml0X2VtaXNzaW9uX3RpbWUgKz0gSU5T VFJfVElNRV9HRVRfTUlMTElTRUMoaml0dXNhZ2UtPmVtaXNzaW9uX2NvdW50ZXIpOwotCQl9CisJ CWlmIChJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhqaXR1c2FnZS0+ZGVmb3JtX2NvdW50ZXIpKQor CQkJcGVuZGluZy0+Y291bnRlcnMuaml0X2RlZm9ybV9jb3VudCsrOworCQlwZW5kaW5nLT5jb3Vu dGVycy5qaXRfZGVmb3JtX3RpbWUgKz0gSU5TVFJfVElNRV9HRVRfTUlMTElTRUMoaml0dXNhZ2Ut PmRlZm9ybV9jb3VudGVyKTsKIAotCQkvKiBwYXJhbGxlbCB3b3JrZXIgY291bnRlcnMgKi8KLQkJ ZW50cnktPmNvdW50ZXJzLnBhcmFsbGVsX3dvcmtlcnNfdG9fbGF1bmNoICs9IHBhcmFsbGVsX3dv cmtlcnNfdG9fbGF1bmNoOwotCQllbnRyeS0+Y291bnRlcnMucGFyYWxsZWxfd29ya2Vyc19sYXVu Y2hlZCArPSBwYXJhbGxlbF93b3JrZXJzX2xhdW5jaGVkOworCQlpZiAoSU5TVFJfVElNRV9HRVRf TUlMTElTRUMoaml0dXNhZ2UtPmlubGluaW5nX2NvdW50ZXIpKQorCQkJcGVuZGluZy0+Y291bnRl cnMuaml0X2lubGluaW5nX2NvdW50Kys7CisJCXBlbmRpbmctPmNvdW50ZXJzLmppdF9pbmxpbmlu Z190aW1lICs9IElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGppdHVzYWdlLT5pbmxpbmluZ19jb3Vu dGVyKTsKIAotCQkvKiBwbGFuIGNhY2hlIGNvdW50ZXJzICovCi0JCWlmIChwbGFuT3JpZ2luID09 IFBMQU5fU1RNVF9DQUNIRV9HRU5FUklDKQotCQkJZW50cnktPmNvdW50ZXJzLmdlbmVyaWNfcGxh bl9jYWxscysrOwotCQllbHNlIGlmIChwbGFuT3JpZ2luID09IFBMQU5fU1RNVF9DQUNIRV9DVVNU T00pCi0JCQllbnRyeS0+Y291bnRlcnMuY3VzdG9tX3BsYW5fY2FsbHMrKzsKKwkJaWYgKElOU1RS X1RJTUVfR0VUX01JTExJU0VDKGppdHVzYWdlLT5vcHRpbWl6YXRpb25fY291bnRlcikpCisJCQlw ZW5kaW5nLT5jb3VudGVycy5qaXRfb3B0aW1pemF0aW9uX2NvdW50Kys7CisJCXBlbmRpbmctPmNv dW50ZXJzLmppdF9vcHRpbWl6YXRpb25fdGltZSArPSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhq aXR1c2FnZS0+b3B0aW1pemF0aW9uX2NvdW50ZXIpOwogCi0JCVNwaW5Mb2NrUmVsZWFzZSgmZW50 cnktPm11dGV4KTsKKwkJaWYgKElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGppdHVzYWdlLT5lbWlz c2lvbl9jb3VudGVyKSkKKwkJCXBlbmRpbmctPmNvdW50ZXJzLmppdF9lbWlzc2lvbl9jb3VudCsr OworCQlwZW5kaW5nLT5jb3VudGVycy5qaXRfZW1pc3Npb25fdGltZSArPSBJTlNUUl9USU1FX0dF VF9NSUxMSVNFQyhqaXR1c2FnZS0+ZW1pc3Npb25fY291bnRlcik7CiAJfQogCi1kb25lOgotCUxX TG9ja1JlbGVhc2UoJnBnc3MtPmxvY2subG9jayk7CisJcGVuZGluZy0+Y291bnRlcnMucGFyYWxs ZWxfd29ya2Vyc190b19sYXVuY2ggKz0gcGFyYWxsZWxfd29ya2Vyc190b19sYXVuY2g7CisJcGVu ZGluZy0+Y291bnRlcnMucGFyYWxsZWxfd29ya2Vyc19sYXVuY2hlZCArPSBwYXJhbGxlbF93b3Jr ZXJzX2xhdW5jaGVkOwogCi0JLyogV2UgcG9zdHBvbmUgdGhpcyBjbGVhbi11cCB1bnRpbCB3ZSdy ZSBvdXQgb2YgdGhlIGxvY2sgKi8KLQlpZiAobm9ybV9xdWVyeSkKLQkJcGZyZWUobm9ybV9xdWVy eSk7CisJaWYgKHBsYW5PcmlnaW4gPT0gUExBTl9TVE1UX0NBQ0hFX0dFTkVSSUMpCisJCXBlbmRp bmctPmNvdW50ZXJzLmdlbmVyaWNfcGxhbl9jYWxscysrOworCWVsc2UgaWYgKHBsYW5PcmlnaW4g PT0gUExBTl9TVE1UX0NBQ0hFX0NVU1RPTSkKKwkJcGVuZGluZy0+Y291bnRlcnMuY3VzdG9tX3Bs YW5fY2FsbHMrKzsKIH0KIAogLyoKQEAgLTE2NzYsOCArMTUyMiw4IEBAIHBnX3N0YXRfc3RhdGVt ZW50c19pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAlTaXplCQlxYnVmZmVyX3Np emUgPSAwOwogCVNpemUJCWV4dGVudCA9IDA7CiAJaW50CQkJZ2NfY291bnQgPSAwOwotCUhBU0hf U0VRX1NUQVRVUyBoYXNoX3NlcTsKLQlwZ3NzRW50cnkgICplbnRyeTsKKwlkc2hhc2hfc2VxX3N0 YXR1cyBoc3RhdDsKKwlQZ1N0YXRTaGFyZWRfSGFzaEVudHJ5ICpwOwogCiAJLyoKIAkgKiBTdXBl cnVzZXJzIG9yIHJvbGVzIHdpdGggdGhlIHByaXZpbGVnZXMgb2YgcGdfcmVhZF9hbGxfc3RhdHMg bWVtYmVycwpAQCAtMTY4NSw4ICsxNTMxLDggQEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFs KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCSAqLwogCWlzX2FsbG93ZWRfcm9sZSA9IGhhc19w cml2c19vZl9yb2xlKHVzZXJpZCwgUk9MRV9QR19SRUFEX0FMTF9TVEFUUyk7CiAKLQkvKiBoYXNo IHRhYmxlIG11c3QgZXhpc3QgYWxyZWFkeSAqLwotCWlmICghcGdzcyB8fCAhcGdzc19oYXNoKQor CS8qIHNoYXJlZCBzdGF0ZSBtdXN0IGV4aXN0IGFscmVhZHkgKi8KKwlpZiAoIXBnc3MpCiAJCWVy ZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJ U0lURV9TVEFURSksCiAJCQkJIGVycm1zZygicGdfc3RhdF9zdGF0ZW1lbnRzIG11c3QgYmUgbG9h ZGVkIHZpYSBcInNoYXJlZF9wcmVsb2FkX2xpYnJhcmllc1wiIikpKTsKQEAgLTE3NzMsMzAgKzE2 MTksMTMgQEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNp bmZvLAogCX0KIAogCS8qCi0JICogR2V0IHNoYXJlZCBsb2NrLCBsb2FkIG9yIHJlbG9hZCB0aGUg cXVlcnkgdGV4dCBmaWxlIGlmIHdlIG11c3QsIGFuZAotCSAqIGl0ZXJhdGUgb3ZlciB0aGUgaGFz aHRhYmxlIGVudHJpZXMuCi0JICoKLQkgKiBXaXRoIGEgbGFyZ2UgaGFzaCB0YWJsZSwgd2UgbWln aHQgYmUgaG9sZGluZyB0aGUgbG9jayByYXRoZXIgbG9uZ2VyCi0JICogdGhhbiBvbmUgY291bGQg d2lzaC4gIEhvd2V2ZXIsIHRoaXMgb25seSBibG9ja3MgY3JlYXRpb24gb2YgbmV3IGhhc2gKLQkg KiB0YWJsZSBlbnRyaWVzLCBhbmQgdGhlIGxhcmdlciB0aGUgaGFzaCB0YWJsZSB0aGUgbGVzcyBs aWtlbHkgdGhhdCBpcyB0bwotCSAqIGJlIG5lZWRlZC4gIFNvIHdlIGNhbiBob3BlIHRoaXMgaXMg b2theS4gIFBlcmhhcHMgc29tZWRheSB3ZSdsbCBkZWNpZGUKLQkgKiB3ZSBuZWVkIHRvIHBhcnRp dGlvbiB0aGUgaGFzaCB0YWJsZSB0byBsaW1pdCB0aGUgdGltZSBzcGVudCBob2xkaW5nIGFueQot CSAqIG9uZSBsb2NrLgorCSAqIEdldCBzaGFyZWQgbG9jayBvbiB0aGUgcXVlcnkgdGV4dCBmaWxl LCBsb2FkIG9yIHJlbG9hZCBpZiBuZWVkZWQsIGFuZAorCSAqIGl0ZXJhdGUgb3ZlciB0aGUgcGdz dGF0IHNoYXJlZCBoYXNoIGVudHJpZXMuCiAJICovCiAJTFdMb2NrQWNxdWlyZSgmcGdzcy0+bG9j ay5sb2NrLCBMV19TSEFSRUQpOwogCiAJaWYgKHNob3d0ZXh0KQogCXsKLQkJLyoKLQkJICogSGVy ZSBpdCBpcyBzYWZlIHRvIGV4YW1pbmUgZXh0ZW50IGFuZCBnY19jb3VudCB3aXRob3V0IHRha2lu ZyB0aGUKLQkJICogbXV0ZXguICBOb3RlIHRoYXQgYWx0aG91Z2ggb3RoZXIgcHJvY2Vzc2VzIG1p Z2h0IGNoYW5nZQotCQkgKiBwZ3NzLT5leHRlbnQganVzdCBhZnRlciB3ZSBsb29rIGF0IGl0LCB0 aGUgc3RyaW5ncyB0aGV5IHRoZW4gd3JpdGUKLQkJICogaW50byB0aGUgZmlsZSBjYW5ub3QgeWV0 IGJlIHJlZmVyZW5jZWQgaW4gdGhlIGhhc2h0YWJsZSwgc28gd2UKLQkJICogZG9uJ3QgY2FyZSB3 aGV0aGVyIHdlIHNlZSB0aGVtIG9yIG5vdC4KLQkJICoKLQkJICogSWYgcXRleHRfbG9hZF9maWxl IGZhaWxzLCB3ZSBqdXN0IHByZXNzIG9uOyB3ZSdsbCByZXR1cm4gTlVMTCBmb3IKLQkJICogZXZl cnkgcXVlcnkgdGV4dC4KLQkJICovCiAJCWlmIChxYnVmZmVyID09IE5VTEwgfHwKIAkJCXBnc3Mt PmV4dGVudCAhPSBleHRlbnQgfHwKIAkJCXBnc3MtPmdjX2NvdW50ICE9IGdjX2NvdW50KQpAQCAt MTgwNyw0NSArMTYzNiw3NSBAQCBwZ19zdGF0X3N0YXRlbWVudHNfaW50ZXJuYWwoRnVuY3Rpb25D YWxsSW5mbyBmY2luZm8sCiAJCX0KIAl9CiAKLQloYXNoX3NlcV9pbml0KCZoYXNoX3NlcSwgcGdz c19oYXNoKTsKLQl3aGlsZSAoKGVudHJ5ID0gaGFzaF9zZXFfc2VhcmNoKCZoYXNoX3NlcSkpICE9 IE5VTEwpCisJLyogRmx1c2ggYW55IHBlbmRpbmcgc3RhdHMgZm9yIHRoaXMgYmFja2VuZCBzbyB0 aGV5J3JlIHZpc2libGUgKi8KKwlwZ3N0YXRfcmVwb3J0X2FueXRpbWVfc3RhdCgpOworCisJZHNo YXNoX3NlcV9pbml0KCZoc3RhdCwgcGdTdGF0TG9jYWwuc2hhcmVkX2hhc2gsIGZhbHNlKTsKKwl3 aGlsZSAoKHAgPSBkc2hhc2hfc2VxX25leHQoJmhzdGF0KSkgIT0gTlVMTCkKIAl7CiAJCURhdHVt CQl2YWx1ZXNbUEdfU1RBVF9TVEFURU1FTlRTX0NPTFNdOwogCQlib29sCQludWxsc1tQR19TVEFU X1NUQVRFTUVOVFNfQ09MU107CiAJCWludAkJCWkgPSAwOwogCQlDb3VudGVycwl0bXA7CiAJCWRv dWJsZQkJc3RkZGV2OwotCQlpbnQ2NAkJcXVlcnlpZCA9IGVudHJ5LT5rZXkucXVlcnlpZDsKKwkJ UGdTdGF0U2hhcmVkX1Bnc3MgKnNoYXJlZF9lbnRyeTsKKwkJaW50NjQJCXF1ZXJ5aWQ7CiAJCVRp bWVzdGFtcFR6IHN0YXRzX3NpbmNlOwogCQlUaW1lc3RhbXBUeiBtaW5tYXhfc3RhdHNfc2luY2U7 CiAKLQkJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVlcykpOwotCQltZW1zZXQobnVsbHMs IDAsIHNpemVvZihudWxscykpOworCQkvKiBPbmx5IHByb2Nlc3Mgb3VyIGtpbmQgKi8KKwkJaWYg KHAtPmtleS5raW5kICE9IFBHU1RBVF9LSU5EX1BHU1MpCisJCQljb250aW51ZTsKKwkJaWYgKHAt PmRyb3BwZWQpCisJCQljb250aW51ZTsKKworCQlzaGFyZWRfZW50cnkgPSAoUGdTdGF0U2hhcmVk X1Bnc3MgKikgZHNhX2dldF9hZGRyZXNzKHBnU3RhdExvY2FsLmRzYSwgcC0+Ym9keSk7CisJCUFz c2VydChzaGFyZWRfZW50cnkpOworCisJCS8qIFJlYWQgZW50cnkgZGF0YSB1bmRlciB0aGUgZW50 cnkncyBMV0xvY2sgKi8KKwkJTFdMb2NrQWNxdWlyZSgmc2hhcmVkX2VudHJ5LT5oZWFkZXIubG9j aywgTFdfU0hBUkVEKTsKKwkJdG1wID0gc2hhcmVkX2VudHJ5LT5jb3VudGVyczsKKwkJcXVlcnlp ZCA9IHNoYXJlZF9lbnRyeS0+a2V5LnF1ZXJ5aWQ7CisJCXN0YXRzX3NpbmNlID0gc2hhcmVkX2Vu dHJ5LT5zdGF0c19zaW5jZTsKKwkJbWlubWF4X3N0YXRzX3NpbmNlID0gc2hhcmVkX2VudHJ5LT5t aW5tYXhfc3RhdHNfc2luY2U7CisJCUxXTG9ja1JlbGVhc2UoJnNoYXJlZF9lbnRyeS0+aGVhZGVy LmxvY2spOworCisJCS8qIFNraXAgZW50cmllcyBjcmVhdGVkIGF0IHBhcnNlIHRpbWUgYnV0IG5l dmVyIGV4ZWN1dGVkICovCisJCWlmICh0bXAuY2FsbHNbUEdTU19QTEFOXSArIHRtcC5jYWxsc1tQ R1NTX0VYRUNdID09IDApCisJCQljb250aW51ZTsKIAotCQl2YWx1ZXNbaSsrXSA9IE9iamVjdElk R2V0RGF0dW0oZW50cnktPmtleS51c2VyaWQpOwotCQl2YWx1ZXNbaSsrXSA9IE9iamVjdElkR2V0 RGF0dW0oZW50cnktPmtleS5kYmlkKTsKKwkJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVl cykpOworCQltZW1zZXQobnVsbHMsIDAsIHNpemVvZihudWxscykpOworCisJCXZhbHVlc1tpKytd ID0gT2JqZWN0SWRHZXREYXR1bShzaGFyZWRfZW50cnktPmtleS51c2VyaWQpOworCQl2YWx1ZXNb aSsrXSA9IE9iamVjdElkR2V0RGF0dW0oc2hhcmVkX2VudHJ5LT5rZXkuZGJpZCk7CiAJCWlmIChh cGlfdmVyc2lvbiA+PSBQR1NTX1YxXzkpCi0JCQl2YWx1ZXNbaSsrXSA9IEJvb2xHZXREYXR1bShl bnRyeS0+a2V5LnRvcGxldmVsKTsKKwkJCXZhbHVlc1tpKytdID0gQm9vbEdldERhdHVtKHNoYXJl ZF9lbnRyeS0+a2V5LnRvcGxldmVsKTsKIAotCQlpZiAoaXNfYWxsb3dlZF9yb2xlIHx8IGVudHJ5 LT5rZXkudXNlcmlkID09IHVzZXJpZCkKKwkJaWYgKGlzX2FsbG93ZWRfcm9sZSB8fCBzaGFyZWRf ZW50cnktPmtleS51c2VyaWQgPT0gdXNlcmlkKQogCQl7CiAJCQlpZiAoYXBpX3ZlcnNpb24gPj0g UEdTU19WMV8yKQogCQkJCXZhbHVlc1tpKytdID0gSW50NjRHZXREYXR1bUZhc3QocXVlcnlpZCk7 CiAKIAkJCWlmIChzaG93dGV4dCkKIAkJCXsKLQkJCQljaGFyCSAgICpxc3RyID0gcXRleHRfZmV0 Y2goZW50cnktPnF1ZXJ5X29mZnNldCwKLQkJCQkJCQkJCQkJICAgZW50cnktPnF1ZXJ5X2xlbiwK LQkJCQkJCQkJCQkJICAgcWJ1ZmZlciwKLQkJCQkJCQkJCQkJICAgcWJ1ZmZlcl9zaXplKTsKKwkJ CQljaGFyCSAgICpxc3RyID0gTlVMTDsKKworCQkJCWlmIChzaGFyZWRfZW50cnktPnF1ZXJ5X2xl biA+PSAwKQorCQkJCXsKKwkJCQkJcXN0ciA9IHF0ZXh0X2ZldGNoKHNoYXJlZF9lbnRyeS0+cXVl cnlfb2Zmc2V0LAorCQkJCQkJCQkJICAgc2hhcmVkX2VudHJ5LT5xdWVyeV9sZW4sCisJCQkJCQkJ CQkgICBxYnVmZmVyLAorCQkJCQkJCQkJICAgcWJ1ZmZlcl9zaXplKTsKKwkJCQl9CiAKIAkJCQlp ZiAocXN0cikKIAkJCQl7CiAJCQkJCWNoYXIJICAgKmVuYzsKIAogCQkJCQllbmMgPSBwZ19hbnlf dG9fc2VydmVyKHFzdHIsCi0JCQkJCQkJCQkJICAgZW50cnktPnF1ZXJ5X2xlbiwKLQkJCQkJCQkJ CQkgICBlbnRyeS0+ZW5jb2RpbmcpOworCQkJCQkJCQkJCSAgIHNoYXJlZF9lbnRyeS0+cXVlcnlf bGVuLAorCQkJCQkJCQkJCSAgIHNoYXJlZF9lbnRyeS0+ZW5jb2RpbmcpOwogCiAJCQkJCXZhbHVl c1tpKytdID0gQ1N0cmluZ0dldFRleHREYXR1bShlbmMpOwogCkBAIC0xODgwLDIyICsxNzM5LDYg QEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAog CQkJCW51bGxzW2krK10gPSB0cnVlOwogCQl9CiAKLQkJLyogY29weSBjb3VudGVycyB0byBhIGxv Y2FsIHZhcmlhYmxlIHRvIGtlZXAgbG9ja2luZyB0aW1lIHNob3J0ICovCi0JCVNwaW5Mb2NrQWNx dWlyZSgmZW50cnktPm11dGV4KTsKLQkJdG1wID0gZW50cnktPmNvdW50ZXJzOwotCQlTcGluTG9j a1JlbGVhc2UoJmVudHJ5LT5tdXRleCk7Ci0KLQkJLyoKLQkJICogVGhlIHNwaW5sb2NrIGlzIG5v dCByZXF1aXJlZCB3aGVuIHJlYWRpbmcgdGhlc2UgdHdvIGFzIHRoZXkgYXJlCi0JCSAqIGFsd2F5 cyB1cGRhdGVkIHdoZW4gaG9sZGluZyBwZ3NzLT5sb2NrIGV4Y2x1c2l2ZWx5LgotCQkgKi8KLQkJ c3RhdHNfc2luY2UgPSBlbnRyeS0+c3RhdHNfc2luY2U7Ci0JCW1pbm1heF9zdGF0c19zaW5jZSA9 IGVudHJ5LT5taW5tYXhfc3RhdHNfc2luY2U7Ci0KLQkJLyogU2tpcCBlbnRyeSBpZiB1bmV4ZWN1 dGVkIChpZSwgaXQncyBhIHBlbmRpbmcgInN0aWNreSIgZW50cnkpICovCi0JCWlmIChJU19TVElD S1kodG1wKSkKLQkJCWNvbnRpbnVlOwotCiAJCS8qIE5vdGUgdGhhdCB3ZSByZWx5IG9uIFBHU1Nf UExBTiBiZWluZyAwIGFuZCBQR1NTX0VYRUMgYmVpbmcgMS4gKi8KIAkJZm9yIChpbnQga2luZCA9 IDA7IGtpbmQgPCBQR1NTX05VTUtJTkQ7IGtpbmQrKykKIAkJewpAQCAtMjAyMCw2ICsxODYzLDcg QEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAog CiAJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERl c2MsIHZhbHVlcywgbnVsbHMpOwogCX0KKwlkc2hhc2hfc2VxX3Rlcm0oJmhzdGF0KTsKIAogCUxX TG9ja1JlbGVhc2UoJnBnc3MtPmxvY2subG9jayk7CiAKQEAgLTIwNDAsOCArMTg4NCw5IEBAIHBn X3N0YXRfc3RhdGVtZW50c19pbmZvKFBHX0ZVTkNUSU9OX0FSR1MpCiAJVHVwbGVEZXNjCXR1cGRl c2M7CiAJRGF0dW0JCXZhbHVlc1tQR19TVEFUX1NUQVRFTUVOVFNfSU5GT19DT0xTXSA9IHswfTsK IAlib29sCQludWxsc1tQR19TVEFUX1NUQVRFTUVOVFNfSU5GT19DT0xTXSA9IHswfTsKKwlpbnQJ CQlpID0gMDsKIAotCWlmICghcGdzcyB8fCAhcGdzc19oYXNoKQorCWlmICghcGdzcykKIAkJZXJl cG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlT SVRFX1NUQVRFKSwKIAkJCQkgZXJybXNnKCJwZ19zdGF0X3N0YXRlbWVudHMgbXVzdCBiZSBsb2Fk ZWQgdmlhIFwic2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzXCIiKSkpOwpAQCAtMjA1NSwxNjIgKzE5 MDAsMTIgQEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2luZm8oUEdfRlVOQ1RJT05fQVJHUykKIAlzdGF0 cyA9IHBnc3MtPnN0YXRzOwogCVNwaW5Mb2NrUmVsZWFzZSgmcGdzcy0+bXV0ZXgpOwogCi0JdmFs dWVzWzBdID0gSW50NjRHZXREYXR1bShzdGF0cy5kZWFsbG9jKTsKLQl2YWx1ZXNbMV0gPSBUaW1l c3RhbXBUekdldERhdHVtKHN0YXRzLnN0YXRzX3Jlc2V0KTsKKwl2YWx1ZXNbaSsrXSA9IEludDY0 R2V0RGF0dW0oc3RhdHMuZGVhbGxvYyk7CisJdmFsdWVzW2krK10gPSBUaW1lc3RhbXBUekdldERh dHVtKHN0YXRzLnN0YXRzX3Jlc2V0KTsKIAogCVBHX1JFVFVSTl9EQVRVTShIZWFwVHVwbGVHZXRE YXR1bShoZWFwX2Zvcm1fdHVwbGUodHVwZGVzYywgdmFsdWVzLCBudWxscykpKTsKIH0KIAotLyoK LSAqIEFsbG9jYXRlIGEgbmV3IGhhc2h0YWJsZSBlbnRyeS4KLSAqIGNhbGxlciBtdXN0IGhvbGQg YW4gZXhjbHVzaXZlIGxvY2sgb24gcGdzcy0+bG9jawotICoKLSAqICJxdWVyeSIgbmVlZCBub3Qg YmUgbnVsbC10ZXJtaW5hdGVkOyB3ZSByZWx5IG9uIHF1ZXJ5X2xlbiBpbnN0ZWFkCi0gKgotICog SWYgInN0aWNreSIgaXMgdHJ1ZSwgbWFrZSB0aGUgbmV3IGVudHJ5IGFydGlmaWNpYWxseSBzdGlj a3kgc28gdGhhdCBpdCB3aWxsCi0gKiBwcm9iYWJseSBzdGlsbCBiZSB0aGVyZSB3aGVuIHRoZSBx dWVyeSBmaW5pc2hlcyBleGVjdXRpb24uICBXZSBkbyB0aGlzIGJ5Ci0gKiBnaXZpbmcgaXQgYSBt ZWRpYW4gdXNhZ2UgdmFsdWUgcmF0aGVyIHRoYW4gdGhlIG5vcm1hbCB2YWx1ZS4gIChTdHJpY3Rs eQotICogc3BlYWtpbmcsIHF1ZXJ5IHN0cmluZ3MgYXJlIG5vcm1hbGl6ZWQgb24gYSBiZXN0IGVm Zm9ydCBiYXNpcywgdGhvdWdoIGl0Ci0gKiB3b3VsZCBiZSBkaWZmaWN1bHQgdG8gZGVtb25zdHJh dGUgdGhpcyBldmVuIHVuZGVyIGFydGlmaWNpYWwgY29uZGl0aW9ucy4pCi0gKgotICogTm90ZTog ZGVzcGl0ZSBuZWVkaW5nIGV4Y2x1c2l2ZSBsb2NrLCBpdCdzIG5vdCBhbiBlcnJvciBmb3IgdGhl IHRhcmdldAotICogZW50cnkgdG8gYWxyZWFkeSBleGlzdC4gIFRoaXMgaXMgYmVjYXVzZSBwZ3Nz X3N0b3JlIHJlbGVhc2VzIGFuZAotICogcmVhY3F1aXJlcyBsb2NrIGFmdGVyIGZhaWxpbmcgdG8g ZmluZCBhIG1hdGNoOyBzbyBzb21lb25lIGVsc2UgY291bGQKLSAqIGhhdmUgbWFkZSB0aGUgZW50 cnkgd2hpbGUgd2Ugd2FpdGVkIHRvIGdldCBleGNsdXNpdmUgbG9jay4KLSAqLwotc3RhdGljIHBn c3NFbnRyeSAqCi1lbnRyeV9hbGxvYyhwZ3NzSGFzaEtleSAqa2V5LCBTaXplIHF1ZXJ5X29mZnNl dCwgaW50IHF1ZXJ5X2xlbiwgaW50IGVuY29kaW5nLAotCQkJYm9vbCBzdGlja3kpCi17Ci0JcGdz c0VudHJ5ICAqZW50cnk7Ci0JYm9vbAkJZm91bmQ7Ci0KLQkvKiBNYWtlIHNwYWNlIGlmIG5lZWRl ZCAqLwotCXdoaWxlIChoYXNoX2dldF9udW1fZW50cmllcyhwZ3NzX2hhc2gpID49IHBnc3NfbWF4 KQotCQllbnRyeV9kZWFsbG9jKCk7Ci0KLQkvKiBGaW5kIG9yIGNyZWF0ZSBhbiBlbnRyeSB3aXRo IGRlc2lyZWQgaGFzaCBjb2RlICovCi0JZW50cnkgPSAocGdzc0VudHJ5ICopIGhhc2hfc2VhcmNo KHBnc3NfaGFzaCwga2V5LCBIQVNIX0VOVEVSLCAmZm91bmQpOwotCi0JaWYgKCFmb3VuZCkKLQl7 Ci0JCS8qIE5ldyBlbnRyeSwgaW5pdGlhbGl6ZSBpdCAqLwotCi0JCS8qIHJlc2V0IHRoZSBzdGF0 aXN0aWNzICovCi0JCW1lbXNldCgmZW50cnktPmNvdW50ZXJzLCAwLCBzaXplb2YoQ291bnRlcnMp KTsKLQkJLyogc2V0IHRoZSBhcHByb3ByaWF0ZSBpbml0aWFsIHVzYWdlIGNvdW50ICovCi0JCWVu dHJ5LT5jb3VudGVycy51c2FnZSA9IHN0aWNreSA/IHBnc3MtPmN1cl9tZWRpYW5fdXNhZ2UgOiBV U0FHRV9JTklUOwotCQkvKiByZS1pbml0aWFsaXplIHRoZSBtdXRleCBlYWNoIHRpbWUgLi4uIHdl IGFzc3VtZSBubyBvbmUgdXNpbmcgaXQgKi8KLQkJU3BpbkxvY2tJbml0KCZlbnRyeS0+bXV0ZXgp OwotCQkvKiAuLi4gYW5kIGRvbid0IGZvcmdldCB0aGUgcXVlcnkgdGV4dCBtZXRhZGF0YSAqLwot CQlBc3NlcnQocXVlcnlfbGVuID49IDApOwotCQllbnRyeS0+cXVlcnlfb2Zmc2V0ID0gcXVlcnlf b2Zmc2V0OwotCQllbnRyeS0+cXVlcnlfbGVuID0gcXVlcnlfbGVuOwotCQllbnRyeS0+ZW5jb2Rp bmcgPSBlbmNvZGluZzsKLQkJZW50cnktPnN0YXRzX3NpbmNlID0gR2V0Q3VycmVudFRpbWVzdGFt cCgpOwotCQllbnRyeS0+bWlubWF4X3N0YXRzX3NpbmNlID0gZW50cnktPnN0YXRzX3NpbmNlOwot CX0KLQotCXJldHVybiBlbnRyeTsKLX0KLQotLyoKLSAqIHFzb3J0IGNvbXBhcmF0b3IgZm9yIHNv cnRpbmcgaW50byBpbmNyZWFzaW5nIHVzYWdlIG9yZGVyCi0gKi8KLXN0YXRpYyBpbnQKLWVudHJ5 X2NtcChjb25zdCB2b2lkICpsaHMsIGNvbnN0IHZvaWQgKnJocykKLXsKLQlkb3VibGUJCWxfdXNh Z2UgPSAoKihwZ3NzRW50cnkgKmNvbnN0ICopIGxocyktPmNvdW50ZXJzLnVzYWdlOwotCWRvdWJs ZQkJcl91c2FnZSA9ICgqKHBnc3NFbnRyeSAqY29uc3QgKikgcmhzKS0+Y291bnRlcnMudXNhZ2U7 Ci0KLQlpZiAobF91c2FnZSA8IHJfdXNhZ2UpCi0JCXJldHVybiAtMTsKLQllbHNlIGlmIChsX3Vz YWdlID4gcl91c2FnZSkKLQkJcmV0dXJuICsxOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLS8q Ci0gKiBEZWFsbG9jYXRlIGxlYXN0LXVzZWQgZW50cmllcy4KLSAqCi0gKiBDYWxsZXIgbXVzdCBo b2xkIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHBnc3MtPmxvY2suCi0gKi8KLXN0YXRpYyB2b2lkCi1l bnRyeV9kZWFsbG9jKHZvaWQpCi17Ci0JSEFTSF9TRVFfU1RBVFVTIGhhc2hfc2VxOwotCXBnc3NF bnRyeSAqKmVudHJpZXM7Ci0JcGdzc0VudHJ5ICAqZW50cnk7Ci0JaW50CQkJbnZpY3RpbXM7Ci0J aW50CQkJaTsKLQlTaXplCQl0b3R0ZXh0bGVuOwotCWludAkJCW52YWxpZHRleHRzOwotCi0JLyoK LQkgKiBTb3J0IGVudHJpZXMgYnkgdXNhZ2UgYW5kIGRlYWxsb2NhdGUgVVNBR0VfREVBTExPQ19Q RVJDRU5UIG9mIHRoZW0uCi0JICogV2hpbGUgd2UncmUgc2Nhbm5pbmcgdGhlIHRhYmxlLCBhcHBs eSB0aGUgZGVjYXkgZmFjdG9yIHRvIHRoZSB1c2FnZQotCSAqIHZhbHVlcywgYW5kIHVwZGF0ZSB0 aGUgbWVhbiBxdWVyeSBsZW5ndGguCi0JICoKLQkgKiBOb3RlIHRoYXQgdGhlIG1lYW4gcXVlcnkg bGVuZ3RoIGlzIGFsbW9zdCBpbW1lZGlhdGVseSBvYnNvbGV0ZSwgc2luY2UKLQkgKiB3ZSBjb21w dXRlIGl0IGJlZm9yZSBub3QgYWZ0ZXIgZGlzY2FyZGluZyB0aGUgbGVhc3QtdXNlZCBlbnRyaWVz LgotCSAqIEhvcGVmdWxseSwgdGhhdCBkb2Vzbid0IGFmZmVjdCB0aGUgbWVhbiB0b28gbXVjaDsg aXQgZG9lc24ndCBzZWVtIHdvcnRoCi0JICogbWFraW5nIHR3byBwYXNzZXMgdG8gZ2V0IGEgbW9y ZSBjdXJyZW50IHJlc3VsdC4gIExpa2V3aXNlLCB0aGUgbmV3Ci0JICogY3VyX21lZGlhbl91c2Fn ZSBpbmNsdWRlcyB0aGUgZW50cmllcyB3ZSdyZSBhYm91dCB0byB6YXAuCi0JICovCi0KLQllbnRy aWVzID0gcGFsbG9jKGhhc2hfZ2V0X251bV9lbnRyaWVzKHBnc3NfaGFzaCkgKiBzaXplb2YocGdz c0VudHJ5ICopKTsKLQotCWkgPSAwOwotCXRvdHRleHRsZW4gPSAwOwotCW52YWxpZHRleHRzID0g MDsKLQotCWhhc2hfc2VxX2luaXQoJmhhc2hfc2VxLCBwZ3NzX2hhc2gpOwotCXdoaWxlICgoZW50 cnkgPSBoYXNoX3NlcV9zZWFyY2goJmhhc2hfc2VxKSkgIT0gTlVMTCkKLQl7Ci0JCWVudHJpZXNb aSsrXSA9IGVudHJ5OwotCQkvKiAiU3RpY2t5IiBlbnRyaWVzIGdldCBhIGRpZmZlcmVudCB1c2Fn ZSBkZWNheSByYXRlLiAqLwotCQlpZiAoSVNfU1RJQ0tZKGVudHJ5LT5jb3VudGVycykpCi0JCQll bnRyeS0+Y291bnRlcnMudXNhZ2UgKj0gU1RJQ0tZX0RFQ1JFQVNFX0ZBQ1RPUjsKLQkJZWxzZQot CQkJZW50cnktPmNvdW50ZXJzLnVzYWdlICo9IFVTQUdFX0RFQ1JFQVNFX0ZBQ1RPUjsKLQkJLyog SW4gdGhlIG1lYW4gbGVuZ3RoIGNvbXB1dGF0aW9uLCBpZ25vcmUgZHJvcHBlZCB0ZXh0cy4gKi8K LQkJaWYgKGVudHJ5LT5xdWVyeV9sZW4gPj0gMCkKLQkJewotCQkJdG90dGV4dGxlbiArPSBlbnRy eS0+cXVlcnlfbGVuICsgMTsKLQkJCW52YWxpZHRleHRzKys7Ci0JCX0KLQl9Ci0KLQkvKiBTb3J0 IGludG8gaW5jcmVhc2luZyBvcmRlciBieSB1c2FnZSAqLwotCXFzb3J0KGVudHJpZXMsIGksIHNp emVvZihwZ3NzRW50cnkgKiksIGVudHJ5X2NtcCk7Ci0KLQkvKiBSZWNvcmQgdGhlIChhcHByb3hp bWF0ZSkgbWVkaWFuIHVzYWdlICovCi0JaWYgKGkgPiAwKQotCQlwZ3NzLT5jdXJfbWVkaWFuX3Vz YWdlID0gZW50cmllc1tpIC8gMl0tPmNvdW50ZXJzLnVzYWdlOwotCS8qIFJlY29yZCB0aGUgbWVh biBxdWVyeSBsZW5ndGggKi8KLQlpZiAobnZhbGlkdGV4dHMgPiAwKQotCQlwZ3NzLT5tZWFuX3F1 ZXJ5X2xlbiA9IHRvdHRleHRsZW4gLyBudmFsaWR0ZXh0czsKLQllbHNlCi0JCXBnc3MtPm1lYW5f cXVlcnlfbGVuID0gQVNTVU1FRF9MRU5HVEhfSU5JVDsKLQotCS8qIE5vdyB6YXAgYW4gYXBwcm9w cmlhdGUgZnJhY3Rpb24gb2YgbG93ZXN0LXVzYWdlIGVudHJpZXMgKi8KLQludmljdGltcyA9IE1h eCgxMCwgaSAqIFVTQUdFX0RFQUxMT0NfUEVSQ0VOVCAvIDEwMCk7Ci0JbnZpY3RpbXMgPSBNaW4o bnZpY3RpbXMsIGkpOwotCi0JZm9yIChpID0gMDsgaSA8IG52aWN0aW1zOyBpKyspCi0JewotCQlo YXNoX3NlYXJjaChwZ3NzX2hhc2gsICZlbnRyaWVzW2ldLT5rZXksIEhBU0hfUkVNT1ZFLCBOVUxM KTsKLQl9Ci0KLQlwZnJlZShlbnRyaWVzKTsKLQotCS8qIEluY3JlbWVudCB0aGUgbnVtYmVyIG9m IHRpbWVzIGVudHJpZXMgYXJlIGRlYWxsb2NhdGVkICovCi0JU3BpbkxvY2tBY3F1aXJlKCZwZ3Nz LT5tdXRleCk7Ci0JcGdzcy0+c3RhdHMuZGVhbGxvYyArPSAxOwotCVNwaW5Mb2NrUmVsZWFzZSgm cGdzcy0+bXV0ZXgpOwotfQotCiAvKgogICogR2l2ZW4gYSBxdWVyeSBzdHJpbmcgKG5vdCBuZWNl c3NhcmlseSBudWxsLXRlcm1pbmF0ZWQpLCBhbGxvY2F0ZSBhIG5ldwogICogZW50cnkgaW4gdGhl IGV4dGVybmFsIHF1ZXJ5IHRleHQgZmlsZSBhbmQgc3RvcmUgdGhlIHN0cmluZyB0aGVyZS4KQEAg LTIyMzQsNiArMTkyOSw4IEBAIHF0ZXh0X3N0b3JlKGNvbnN0IGNoYXIgKnF1ZXJ5LCBpbnQgcXVl cnlfbGVuLAogCVNpemUJCW9mZjsKIAlpbnQJCQlmZDsKIAorCSpxdWVyeV9vZmZzZXQgPSAwOwor CiAJLyoKIAkgKiBXZSB1c2UgYSBzcGlubG9jayB0byBwcm90ZWN0IGV4dGVudC9uX3dyaXRlcnMv Z2NfY291bnQsIHNvIHRoYXQKIAkgKiBtdWx0aXBsZSBwcm9jZXNzZXMgbWF5IGV4ZWN1dGUgdGhp cyBmdW5jdGlvbiBjb25jdXJyZW50bHkuCkBAIC0yMzY2LDggKzIwNjMsOCBAQCBxdGV4dF9sb2Fk X2ZpbGUoU2l6ZSAqYnVmZmVyX3NpemUpCiAJCS8qCiAJCSAqIElmIHdlIGdldCBhIHNob3J0IHJl YWQgYW5kIGVycm5vIGRvZXNuJ3QgZ2V0IHNldCwgdGhlIHJlYXNvbiBpcwogCQkgKiBwcm9iYWJs eSB0aGF0IGdhcmJhZ2UgY29sbGVjdGlvbiB0cnVuY2F0ZWQgdGhlIGZpbGUgc2luY2Ugd2UgZGlk Ci0JCSAqIHRoZSBmc3RhdCgpLCBzbyB3ZSBkb24ndCBsb2cgYSBjb21wbGFpbnQgLS0tIGJ1dCB3 ZSBkb24ndCByZXR1cm4KLQkJICogdGhlIGRhdGEsIGVpdGhlciwgc2luY2UgaXQncyBtb3N0IGxp a2VseSBjb3JydXB0IGR1ZSB0byBjb25jdXJyZW50CisJCSAqIHRoZSBmc3RhdCgpLCBzbyB3ZSBk b24ndCBsb2cgYSBjb21wbGFpbnQ7IGJ1dCB3ZSBkb24ndCByZXR1cm4gdGhlCisJCSAqIGRhdGEs IGVpdGhlciwgc2luY2UgaXQncyBtb3N0IGxpa2VseSBjb3JydXB0IGR1ZSB0byBjb25jdXJyZW50 CiAJCSAqIHdyaXRlcyBmcm9tIGdhcmJhZ2UgY29sbGVjdGlvbi4KIAkJICovCiAJCWVycm5vID0g MDsKQEAgLTI0MjAsOCArMjExNyw2IEBAIHF0ZXh0X2ZldGNoKFNpemUgcXVlcnlfb2Zmc2V0LCBp bnQgcXVlcnlfbGVuLAogCiAvKgogICogRG8gd2UgbmVlZCB0byBnYXJiYWdlLWNvbGxlY3QgdGhl IGV4dGVybmFsIHF1ZXJ5IHRleHQgZmlsZT8KLSAqCi0gKiBDYWxsZXIgc2hvdWxkIGhvbGQgYXQg bGVhc3QgYSBzaGFyZWQgbG9jayBvbiBwZ3NzLT5sb2NrLgogICovCiBzdGF0aWMgYm9vbAogbmVl ZF9nY19xdGV4dHModm9pZCkKQEAgLTI0NzgsMTMgKzIxNzMsMTMgQEAgZ2NfcXRleHRzKHZvaWQp CiAJY2hhcgkgICAqcWJ1ZmZlcjsKIAlTaXplCQlxYnVmZmVyX3NpemU7CiAJRklMRQkgICAqcWZp bGUgPSBOVUxMOwotCUhBU0hfU0VRX1NUQVRVUyBoYXNoX3NlcTsKLQlwZ3NzRW50cnkgICplbnRy eTsKKwlkc2hhc2hfc2VxX3N0YXR1cyBoc3RhdDsKKwlQZ1N0YXRTaGFyZWRfSGFzaEVudHJ5ICpw OwogCVNpemUJCWV4dGVudDsKIAlpbnQJCQluZW50cmllczsKIAogCS8qCi0JICogV2hlbiBjYWxs ZWQgZnJvbSBwZ3NzX3N0b3JlLCBzb21lIG90aGVyIHNlc3Npb24gbWlnaHQgaGF2ZSBwcm9jZWVk ZWQKKwkgKiBXaGVuIGNhbGxlZCBmcm9tIHRoZSBiZyB3b3JrZXIsIHNvbWUgb3RoZXIgc2Vzc2lv biBtaWdodCBoYXZlIHByb2NlZWRlZAogCSAqIHdpdGggZ2FyYmFnZSBjb2xsZWN0aW9uIGluIHRo ZSBuby1sb2NrLWhlbGQgaW50ZXJpbSBvZiBsb2NrIHN0cmVuZ3RoCiAJICogZXNjYWxhdGlvbi4g IENoZWNrIG9uY2UgbW9yZSB0aGF0IHRoaXMgaXMgYWN0dWFsbHkgbmVjZXNzYXJ5LgogCSAqLwpA QCAtMjQ5MywyMSArMjE4OCwxMiBAQCBnY19xdGV4dHModm9pZCkKIAogCS8qCiAJICogTG9hZCB0 aGUgb2xkIHRleHRzIGZpbGUuICBJZiB3ZSBmYWlsIChvdXQgb2YgbWVtb3J5LCBmb3IgaW5zdGFu Y2UpLAotCSAqIGludmFsaWRhdGUgcXVlcnkgdGV4dHMuICBIb3BlZnVsbHkgdGhpcyBpcyByYXJl LiAgSXQgbWlnaHQgc2VlbSBiZXR0ZXIKLQkgKiB0byBsZWF2ZSB0aGluZ3MgYWxvbmUgb24gYW4g T09NIGZhaWx1cmUsIGJ1dCB0aGUgcHJvYmxlbSBpcyB0aGF0IHRoZQotCSAqIGZpbGUgaXMgb25s eSBnb2luZyB0byBnZXQgYmlnZ2VyOyBob3BpbmcgZm9yIGEgZnV0dXJlIG5vbi1PT00gcmVzdWx0 IGlzCi0JICogcmlza3kgYW5kIGNhbiBlYXNpbHkgbGVhZCB0byBjb21wbGV0ZSBkZW5pYWwgb2Yg c2VydmljZS4KKwkgKiBpbnZhbGlkYXRlIHF1ZXJ5IHRleHRzLiAgSG9wZWZ1bGx5IHRoaXMgaXMg cmFyZS4KIAkgKi8KIAlxYnVmZmVyID0gcXRleHRfbG9hZF9maWxlKCZxYnVmZmVyX3NpemUpOwog CWlmIChxYnVmZmVyID09IE5VTEwpCiAJCWdvdG8gZ2NfZmFpbDsKIAotCS8qCi0JICogV2Ugb3Zl cndyaXRlIHRoZSBxdWVyeSB0ZXh0cyBmaWxlIGluIHBsYWNlLCBzbyBhcyB0byByZWR1Y2UgdGhl IHJpc2sgb2YKLQkgKiBhbiBvdXQtb2YtZGlzay1zcGFjZSBmYWlsdXJlLiAgU2luY2UgdGhlIGZp bGUgaXMgZ3VhcmFudGVlZCBub3QgdG8gZ2V0Ci0JICogbGFyZ2VyLCB0aGlzIHNob3VsZCBhbHdh eXMgd29yayBvbiB0cmFkaXRpb25hbCBmaWxlc3lzdGVtczsgdGhvdWdoIHdlCi0JICogY291bGQg c3RpbGwgbG9zZSBvbiBjb3B5LW9uLXdyaXRlIGZpbGVzeXN0ZW1zLgotCSAqLwogCXFmaWxlID0g QWxsb2NhdGVGaWxlKFBHU1NfVEVYVF9GSUxFLCBQR19CSU5BUllfVyk7CiAJaWYgKHFmaWxlID09 IE5VTEwpCiAJewpAQCAtMjUyMSwyMSArMjIwNywzMiBAQCBnY19xdGV4dHModm9pZCkKIAlleHRl bnQgPSAwOwogCW5lbnRyaWVzID0gMDsKIAotCWhhc2hfc2VxX2luaXQoJmhhc2hfc2VxLCBwZ3Nz X2hhc2gpOwotCXdoaWxlICgoZW50cnkgPSBoYXNoX3NlcV9zZWFyY2goJmhhc2hfc2VxKSkgIT0g TlVMTCkKKwlkc2hhc2hfc2VxX2luaXQoJmhzdGF0LCBwZ1N0YXRMb2NhbC5zaGFyZWRfaGFzaCwg ZmFsc2UpOworCXdoaWxlICgocCA9IGRzaGFzaF9zZXFfbmV4dCgmaHN0YXQpKSAhPSBOVUxMKQog CXsKLQkJaW50CQkJcXVlcnlfbGVuID0gZW50cnktPnF1ZXJ5X2xlbjsKLQkJY2hhcgkgICAqcXJ5 ID0gcXRleHRfZmV0Y2goZW50cnktPnF1ZXJ5X29mZnNldCwKLQkJCQkJCQkJCSAgcXVlcnlfbGVu LAotCQkJCQkJCQkJICBxYnVmZmVyLAotCQkJCQkJCQkJICBxYnVmZmVyX3NpemUpOworCQlQZ1N0 YXRTaGFyZWRfUGdzcyAqc2hhcmVkX2VudHJ5OworCQlpbnQJCQlxdWVyeV9sZW47CisJCWNoYXIJ ICAgKnFyeTsKKworCQlpZiAocC0+a2V5LmtpbmQgIT0gUEdTVEFUX0tJTkRfUEdTUykKKwkJCWNv bnRpbnVlOworCQlpZiAocC0+ZHJvcHBlZCkKKwkJCWNvbnRpbnVlOworCisJCXNoYXJlZF9lbnRy eSA9IChQZ1N0YXRTaGFyZWRfUGdzcyAqKSBkc2FfZ2V0X2FkZHJlc3MocGdTdGF0TG9jYWwuZHNh LCBwLT5ib2R5KTsKKworCQlxdWVyeV9sZW4gPSBzaGFyZWRfZW50cnktPnF1ZXJ5X2xlbjsKKwkJ aWYgKHF1ZXJ5X2xlbiA8IDApCisJCQljb250aW51ZTsKKworCQlxcnkgPSBxdGV4dF9mZXRjaChz aGFyZWRfZW50cnktPnF1ZXJ5X29mZnNldCwgcXVlcnlfbGVuLAorCQkJCQkJICBxYnVmZmVyLCBx YnVmZmVyX3NpemUpOwogCiAJCWlmIChxcnkgPT0gTlVMTCkKIAkJewotCQkJLyogVHJvdWJsZSAu Li4gZHJvcCB0aGUgdGV4dCAqLwotCQkJZW50cnktPnF1ZXJ5X29mZnNldCA9IDA7Ci0JCQllbnRy eS0+cXVlcnlfbGVuID0gLTE7Ci0JCQkvKiBlbnRyeSB3aWxsIG5vdCBiZSBjb3VudGVkIGluIG1l YW4gcXVlcnkgbGVuZ3RoIGNvbXB1dGF0aW9uICovCisJCQkvKiBUcm91YmxlIC4uLiBtYXJrIHRl eHQgaW52YWxpZCAqLworCQkJc2hhcmVkX2VudHJ5LT5xdWVyeV9vZmZzZXQgPSAwOworCQkJc2hh cmVkX2VudHJ5LT5xdWVyeV9sZW4gPSAtMTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTI1NDUs MTkgKzIyNDIsMTYgQEAgZ2NfcXRleHRzKHZvaWQpCiAJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2Fj Y2VzcygpLAogCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgd3JpdGUgZmlsZSBcIiVzXCI6ICVtIiwK IAkJCQkJCQlQR1NTX1RFWFRfRklMRSkpKTsKLQkJCWhhc2hfc2VxX3Rlcm0oJmhhc2hfc2VxKTsK KwkJCWRzaGFzaF9zZXFfdGVybSgmaHN0YXQpOwogCQkJZ290byBnY19mYWlsOwogCQl9CiAKLQkJ ZW50cnktPnF1ZXJ5X29mZnNldCA9IGV4dGVudDsKKwkJc2hhcmVkX2VudHJ5LT5xdWVyeV9vZmZz ZXQgPSBleHRlbnQ7CiAJCWV4dGVudCArPSBxdWVyeV9sZW4gKyAxOwogCQluZW50cmllcysrOwog CX0KKwlkc2hhc2hfc2VxX3Rlcm0oJmhzdGF0KTsKIAotCS8qCi0JICogVHJ1bmNhdGUgYXdheSBh bnkgbm93LXVudXNlZCBzcGFjZS4gIElmIHRoaXMgZmFpbHMgZm9yIHNvbWUgb2RkIHJlYXNvbiwK LQkgKiB3ZSBsb2cgaXQsIGJ1dCB0aGVyZSdzIG5vIG5lZWQgdG8gZmFpbC4KLQkgKi8KIAlpZiAo ZnRydW5jYXRlKGZpbGVubyhxZmlsZSksIGV4dGVudCkgIT0gMCkKIAkJZXJlcG9ydChMT0csCiAJ CQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCkBAIC0yNTc3LDEzICsyMjcxLDggQEAgZ2Nf cXRleHRzKHZvaWQpCiAJZWxvZyhERUJVRzEsICJwZ3NzIGdjIG9mIHF1ZXJpZXMgZmlsZSBzaHJ1 bmsgc2l6ZSBmcm9tICV6dSB0byAlenUiLAogCQkgcGdzcy0+ZXh0ZW50LCBleHRlbnQpOwogCi0J LyogUmVzZXQgdGhlIHNoYXJlZCBleHRlbnQgcG9pbnRlciAqLwogCXBnc3MtPmV4dGVudCA9IGV4 dGVudDsKIAotCS8qCi0JICogQWxzbyB1cGRhdGUgdGhlIG1lYW4gcXVlcnkgbGVuZ3RoLCB0byBi ZSBzdXJlIHRoYXQgbmVlZF9nY19xdGV4dHMoKQotCSAqIHdvbid0IHN0aWxsIHRoaW5rIHdlIGhh dmUgYSBwcm9ibGVtLgotCSAqLwogCWlmIChuZW50cmllcyA+IDApCiAJCXBnc3MtPm1lYW5fcXVl cnlfbGVuID0gZXh0ZW50IC8gbmVudHJpZXM7CiAJZWxzZQpAQCAtMjU5MSwxOSArMjI4MCwxMSBA QCBnY19xdGV4dHModm9pZCkKIAogCXBmcmVlKHFidWZmZXIpOwogCi0JLyoKLQkgKiBPSywgY291 bnQgYSBnYXJiYWdlIGNvbGxlY3Rpb24gY3ljbGUuICAoTm90ZTogZXZlbiB0aG91Z2ggd2UgaGF2 ZQotCSAqIGV4Y2x1c2l2ZSBsb2NrIG9uIHBnc3MtPmxvY2ssIHdlIG11c3QgdGFrZSBwZ3NzLT5t dXRleCBmb3IgdGhpcywgc2luY2UKLQkgKiBvdGhlciBwcm9jZXNzZXMgbWF5IGV4YW1pbmUgZ2Nf Y291bnQgd2hpbGUgaG9sZGluZyBvbmx5IHRoZSBtdXRleC4KLQkgKiBBbHNvLCB3ZSBoYXZlIHRv IGFkdmFuY2UgdGhlIGNvdW50ICphZnRlciogd2UndmUgcmV3cml0dGVuIHRoZSBmaWxlLAotCSAq IGVsc2Ugb3RoZXIgcHJvY2Vzc2VzIG1pZ2h0IG5vdCByZWFsaXplIHRoZXkgcmVhZCBhIHN0YWxl IGZpbGUuKQotCSAqLwogCXJlY29yZF9nY19xdGV4dHMoKTsKIAogCXJldHVybjsKIAogZ2NfZmFp bDoKLQkvKiBjbGVhbiB1cCByZXNvdXJjZXMgKi8KIAlpZiAocWZpbGUpCiAJCUZyZWVGaWxlKHFm aWxlKTsKIAlpZiAocWJ1ZmZlcikKQEAgLTI2MTEsMTggKzIyOTIsMjQgQEAgZ2NfZmFpbDoKIAog CS8qCiAJICogU2luY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBleHRlcm5hbCBmaWxlIGFyZSBub3cg dW5jZXJ0YWluLCBtYXJrIGFsbAotCSAqIGhhc2h0YWJsZSBlbnRyaWVzIGFzIGhhdmluZyBpbnZh bGlkIHRleHRzLgorCSAqIGVudHJpZXMgYXMgaGF2aW5nIGludmFsaWQgdGV4dHMuCiAJICovCi0J aGFzaF9zZXFfaW5pdCgmaGFzaF9zZXEsIHBnc3NfaGFzaCk7Ci0Jd2hpbGUgKChlbnRyeSA9IGhh c2hfc2VxX3NlYXJjaCgmaGFzaF9zZXEpKSAhPSBOVUxMKQorCWRzaGFzaF9zZXFfaW5pdCgmaHN0 YXQsIHBnU3RhdExvY2FsLnNoYXJlZF9oYXNoLCBmYWxzZSk7CisJd2hpbGUgKChwID0gZHNoYXNo X3NlcV9uZXh0KCZoc3RhdCkpICE9IE5VTEwpCiAJewotCQllbnRyeS0+cXVlcnlfb2Zmc2V0ID0g MDsKLQkJZW50cnktPnF1ZXJ5X2xlbiA9IC0xOworCQlQZ1N0YXRTaGFyZWRfUGdzcyAqc2hhcmVk X2VudHJ5OworCisJCWlmIChwLT5rZXkua2luZCAhPSBQR1NUQVRfS0lORF9QR1NTKQorCQkJY29u dGludWU7CisJCWlmIChwLT5kcm9wcGVkKQorCQkJY29udGludWU7CisKKwkJc2hhcmVkX2VudHJ5 ID0gKFBnU3RhdFNoYXJlZF9QZ3NzICopIGRzYV9nZXRfYWRkcmVzcyhwZ1N0YXRMb2NhbC5kc2Es IHAtPmJvZHkpOworCQlzaGFyZWRfZW50cnktPnF1ZXJ5X29mZnNldCA9IDA7CisJCXNoYXJlZF9l bnRyeS0+cXVlcnlfbGVuID0gLTE7CiAJfQorCWRzaGFzaF9zZXFfdGVybSgmaHN0YXQpOwogCi0J LyoKLQkgKiBEZXN0cm95IHRoZSBxdWVyeSB0ZXh0IGZpbGUgYW5kIGNyZWF0ZSBhIG5ldywgZW1w dHkgb25lCi0JICovCiAJKHZvaWQpIHVubGluayhQR1NTX1RFWFRfRklMRSk7CiAJcWZpbGUgPSBB bGxvY2F0ZUZpbGUoUEdTU19URVhUX0ZJTEUsIFBHX0JJTkFSWV9XKTsKIAlpZiAocWZpbGUgPT0g TlVMTCkKQEAgLTI2MzMsNDEgKzIzMjAsMjcgQEAgZ2NfZmFpbDoKIAllbHNlCiAJCUZyZWVGaWxl KHFmaWxlKTsKIAotCS8qIFJlc2V0IHRoZSBzaGFyZWQgZXh0ZW50IHBvaW50ZXIgKi8KIAlwZ3Nz LT5leHRlbnQgPSAwOwotCi0JLyogUmVzZXQgbWVhbl9xdWVyeV9sZW4gdG8gbWF0Y2ggdGhlIG5l dyBzdGF0ZSAqLwogCXBnc3MtPm1lYW5fcXVlcnlfbGVuID0gQVNTVU1FRF9MRU5HVEhfSU5JVDsK IAotCS8qCi0JICogQnVtcCB0aGUgR0MgY291bnQgZXZlbiB0aG91Z2ggd2UgZmFpbGVkLgotCSAq Ci0JICogVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBjb25jdXJyZW50IHJlYWRlcnMgb2YgZmlsZSB3 aXRob3V0IGFueSBsb2NrIG9uCi0JICogcGdzcy0+bG9jayBub3RpY2UgZXhpc3RlbmNlIG9mIG5l dyB2ZXJzaW9uIG9mIGZpbGUuICBPbmNlIHJlYWRlcnMKLQkgKiBzdWJzZXF1ZW50bHkgb2JzZXJ2 ZSBhIGNoYW5nZSBpbiBHQyBjb3VudCB3aXRoIHBnc3MtPmxvY2sgaGVsZCwgdGhhdAotCSAqIGZv cmNlcyBhIHNhZmUgcmVvcGVuIG9mIGZpbGUuICBXcml0ZXJzIGFsc28gcmVxdWlyZSB0aGF0IHdl IGJ1bXAgaGVyZSwKLQkgKiBvZiBjb3Vyc2UuICAoQXMgcmVxdWlyZWQgYnkgbG9ja2luZyBwcm90 b2NvbCwgcmVhZGVycyBhbmQgd3JpdGVycyBkb24ndAotCSAqIHRydXN0IGVhcmxpZXIgZmlsZSBj b250ZW50cyB1bnRpbCBnY19jb3VudCBpcyBmb3VuZCB1bmNoYW5nZWQgYWZ0ZXIKLQkgKiBwZ3Nz LT5sb2NrIGFjcXVpcmVkIGluIHNoYXJlZCBvciBleGNsdXNpdmUgbW9kZSByZXNwZWN0aXZlbHku KQotCSAqLwogCXJlY29yZF9nY19xdGV4dHMoKTsKIH0KIAotI2RlZmluZSBTSU5HTEVfRU5UUllf UkVTRVQoZSkgXAotaWYgKGUpIHsgXAorI2RlZmluZSBTSU5HTEVfRU5UUllfUkVTRVQoc2hhcmVk LCBrZXlfcHRyLCBtaW5tYXhfb25seSwgc3RhdHNfcmVzZXQsIG51bV9yZW1vdmUpIFwKK2lmIChz aGFyZWQpIHsgXAogCWlmIChtaW5tYXhfb25seSkgeyBcCi0JCS8qIFdoZW4gcmVxdWVzdGVkIHJl c2V0IG9ubHkgbWluL21heCBzdGF0aXN0aWNzIG9mIGFuIGVudHJ5ICovIFwKIAkJZm9yIChpbnQg a2luZCA9IDA7IGtpbmQgPCBQR1NTX05VTUtJTkQ7IGtpbmQrKykgXAogCQl7IFwKLQkJCWUtPmNv dW50ZXJzLm1heF90aW1lW2tpbmRdID0gMDsgXAotCQkJZS0+Y291bnRlcnMubWluX3RpbWVba2lu ZF0gPSAwOyBcCisJCQkoc2hhcmVkKS0+Y291bnRlcnMubWF4X3RpbWVba2luZF0gPSAwOyBcCisJ CQkoc2hhcmVkKS0+Y291bnRlcnMubWluX3RpbWVba2luZF0gPSAwOyBcCiAJCX0gXAotCQllLT5t aW5tYXhfc3RhdHNfc2luY2UgPSBzdGF0c19yZXNldDsgXAorCQkoc2hhcmVkKS0+bWlubWF4X3N0 YXRzX3NpbmNlID0gc3RhdHNfcmVzZXQ7IFwKIAl9IFwKIAllbHNlIFwKIAl7IFwKLQkJLyogUmVt b3ZlIHRoZSBrZXkgb3RoZXJ3aXNlICAqLyBcCi0JCWhhc2hfc2VhcmNoKHBnc3NfaGFzaCwgJmUt PmtleSwgSEFTSF9SRU1PVkUsIE5VTEwpOyBcCisJCShzaGFyZWQpLT5xdWVyeV9sZW4gPSAtMTsg XAorCQlwZ3N0YXRfZHJvcF9lbnRyeShQR1NUQVRfS0lORF9QR1NTLCAoa2V5X3B0ciktPmRiaWQs IFwKKwkJCQkJCSAgcGdzc19vYmppZChrZXlfcHRyKSk7IFwKIAkJbnVtX3JlbW92ZSsrOyBcCiAJ fSBcCiB9CkBAIC0yNjc4LDY5ICsyMzUxLDEyMiBAQCBpZiAoZSkgeyBcCiBzdGF0aWMgVGltZXN0 YW1wVHoKIGVudHJ5X3Jlc2V0KE9pZCB1c2VyaWQsIE9pZCBkYmlkLCBpbnQ2NCBxdWVyeWlkLCBi b29sIG1pbm1heF9vbmx5KQogewotCUhBU0hfU0VRX1NUQVRVUyBoYXNoX3NlcTsKLQlwZ3NzRW50 cnkgICplbnRyeTsKKwlkc2hhc2hfc2VxX3N0YXR1cyBoc3RhdDsKKwlQZ1N0YXRTaGFyZWRfSGFz aEVudHJ5ICpwOwogCUZJTEUJICAgKnFmaWxlOwogCWludDY0CQludW1fZW50cmllczsKIAlpbnQ2 NAkJbnVtX3JlbW92ZSA9IDA7Ci0JcGdzc0hhc2hLZXkga2V5OwogCVRpbWVzdGFtcFR6IHN0YXRz X3Jlc2V0OwogCi0JaWYgKCFwZ3NzIHx8ICFwZ3NzX2hhc2gpCisJaWYgKCFwZ3NzKQogCQllcmVw b3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJ VEVfU1RBVEUpLAogCQkJCSBlcnJtc2coInBnX3N0YXRfc3RhdGVtZW50cyBtdXN0IGJlIGxvYWRl ZCB2aWEgXCJzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXNcIiIpKSk7CiAKIAlMV0xvY2tBY3F1aXJl KCZwZ3NzLT5sb2NrLmxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JbnVtX2VudHJpZXMgPSBoYXNoX2dl dF9udW1fZW50cmllcyhwZ3NzX2hhc2gpOworCW51bV9lbnRyaWVzID0gcGdzdGF0X2dldF9lbnRy eV9jb3VudChQR1NUQVRfS0lORF9QR1NTKTsKIAogCXN0YXRzX3Jlc2V0ID0gR2V0Q3VycmVudFRp bWVzdGFtcCgpOwogCiAJaWYgKHVzZXJpZCAhPSAwICYmIGRiaWQgIT0gMCAmJiBxdWVyeWlkICE9 IElOVDY0Q09OU1QoMCkpCiAJewogCQkvKiBJZiBhbGwgdGhlIHBhcmFtZXRlcnMgYXJlIGF2YWls YWJsZSwgdXNlIHRoZSBmYXN0IHBhdGguICovCisJCXBnc3NIYXNoS2V5IGtleTsKKwkJUGdTdGF0 X0VudHJ5UmVmICplbnRyeV9yZWY7CisJCVBnU3RhdFNoYXJlZF9QZ3NzICpzaGFyZWRfZW50cnk7 CisKIAkJbWVtc2V0KCZrZXksIDAsIHNpemVvZihwZ3NzSGFzaEtleSkpOwogCQlrZXkudXNlcmlk ID0gdXNlcmlkOwogCQlrZXkuZGJpZCA9IGRiaWQ7CiAJCWtleS5xdWVyeWlkID0gcXVlcnlpZDsK IAotCQkvKgotCQkgKiBSZXNldCB0aGUgZW50cnkgaWYgaXQgZXhpc3RzLCBzdGFydGluZyB3aXRo IHRoZSBub24tdG9wLWxldmVsCi0JCSAqIGVudHJ5LgotCQkgKi8KKwkJLyogUmVzZXQgbm9uLXRv cC1sZXZlbCBlbnRyeSAqLwogCQlrZXkudG9wbGV2ZWwgPSBmYWxzZTsKLQkJZW50cnkgPSAocGdz c0VudHJ5ICopIGhhc2hfc2VhcmNoKHBnc3NfaGFzaCwgJmtleSwgSEFTSF9GSU5ELCBOVUxMKTsK LQotCQlTSU5HTEVfRU5UUllfUkVTRVQoZW50cnkpOworCQllbnRyeV9yZWYgPSBwZ3N0YXRfZ2V0 X2VudHJ5X3JlZihQR1NUQVRfS0lORF9QR1NTLCBrZXkuZGJpZCwKKwkJCQkJCQkJCQkgcGdzc19v YmppZCgma2V5KSwgZmFsc2UsIE5VTEwpOworCQlpZiAoZW50cnlfcmVmKQorCQl7CisJCQlzaGFy ZWRfZW50cnkgPSAoUGdTdGF0U2hhcmVkX1Bnc3MgKikgZW50cnlfcmVmLT5zaGFyZWRfc3RhdHM7 CisJCQlTSU5HTEVfRU5UUllfUkVTRVQoc2hhcmVkX2VudHJ5LCAma2V5LCBtaW5tYXhfb25seSwg c3RhdHNfcmVzZXQsIG51bV9yZW1vdmUpOworCQl9CiAKLQkJLyogQWxzbyByZXNldCB0aGUgdG9w LWxldmVsIGVudHJ5IGlmIGl0IGV4aXN0cy4gKi8KKwkJLyogUmVzZXQgdG9wLWxldmVsIGVudHJ5 ICovCiAJCWtleS50b3BsZXZlbCA9IHRydWU7Ci0JCWVudHJ5ID0gKHBnc3NFbnRyeSAqKSBoYXNo X3NlYXJjaChwZ3NzX2hhc2gsICZrZXksIEhBU0hfRklORCwgTlVMTCk7Ci0KLQkJU0lOR0xFX0VO VFJZX1JFU0VUKGVudHJ5KTsKKwkJZW50cnlfcmVmID0gcGdzdGF0X2dldF9lbnRyeV9yZWYoUEdT VEFUX0tJTkRfUEdTUywga2V5LmRiaWQsCisJCQkJCQkJCQkJIHBnc3Nfb2JqaWQoJmtleSksIGZh bHNlLCBOVUxMKTsKKwkJaWYgKGVudHJ5X3JlZikKKwkJeworCQkJc2hhcmVkX2VudHJ5ID0gKFBn U3RhdFNoYXJlZF9QZ3NzICopIGVudHJ5X3JlZi0+c2hhcmVkX3N0YXRzOworCQkJU0lOR0xFX0VO VFJZX1JFU0VUKHNoYXJlZF9lbnRyeSwgJmtleSwgbWlubWF4X29ubHksIHN0YXRzX3Jlc2V0LCBu dW1fcmVtb3ZlKTsKKwkJfQogCX0KLQllbHNlIGlmICh1c2VyaWQgIT0gMCB8fCBkYmlkICE9IDAg fHwgcXVlcnlpZCAhPSBJTlQ2NENPTlNUKDApKQorCWVsc2UKIAl7Ci0JCS8qIFJlc2V0IGVudHJp ZXMgY29ycmVzcG9uZGluZyB0byB2YWxpZCBwYXJhbWV0ZXJzLiAqLwotCQloYXNoX3NlcV9pbml0 KCZoYXNoX3NlcSwgcGdzc19oYXNoKTsKLQkJd2hpbGUgKChlbnRyeSA9IGhhc2hfc2VxX3NlYXJj aCgmaGFzaF9zZXEpKSAhPSBOVUxMKQorCQkvKgorCQkgKiBJdGVyYXRlIGFsbCBlbnRyaWVzIGFu ZCByZXNldCBtYXRjaGluZyBvbmVzLiAgV2UgY2Fubm90IGNhbGwKKwkJICogcGdzdGF0X2Ryb3Bf ZW50cnkoKSB3aGlsZSBpdGVyYXRpbmcgdGhlIGRzaGFzaCAoaXQgaW50ZXJuYWxseQorCQkgKiBh Y3F1aXJlcyBwYXJ0aXRpb24gbG9ja3MpLCBzbyBjb2xsZWN0IGtleXMgdG8gZHJvcCBhbmQgZG8g aXQgYWZ0ZXIuCisJCSAqLworCQlQZW5kaW5nRHJvcCAqdG9fZHJvcCA9IE5VTEw7CisJCWludAkJ CW51bV90b19kcm9wID0gMDsKKwkJaW50CQkJbWF4X3RvX2Ryb3AgPSAwOworCisJCWRzaGFzaF9z ZXFfaW5pdCgmaHN0YXQsIHBnU3RhdExvY2FsLnNoYXJlZF9oYXNoLCBmYWxzZSk7CisJCXdoaWxl ICgocCA9IGRzaGFzaF9zZXFfbmV4dCgmaHN0YXQpKSAhPSBOVUxMKQogCQl7Ci0JCQlpZiAoKCF1 c2VyaWQgfHwgZW50cnktPmtleS51c2VyaWQgPT0gdXNlcmlkKSAmJgotCQkJCSghZGJpZCB8fCBl bnRyeS0+a2V5LmRiaWQgPT0gZGJpZCkgJiYKLQkJCQkoIXF1ZXJ5aWQgfHwgZW50cnktPmtleS5x dWVyeWlkID09IHF1ZXJ5aWQpKQorCQkJUGdTdGF0U2hhcmVkX1Bnc3MgKnNoYXJlZF9lbnRyeTsK KworCQkJaWYgKHAtPmtleS5raW5kICE9IFBHU1RBVF9LSU5EX1BHU1MpCisJCQkJY29udGludWU7 CisJCQlpZiAocC0+ZHJvcHBlZCkKKwkJCQljb250aW51ZTsKKworCQkJc2hhcmVkX2VudHJ5ID0g KFBnU3RhdFNoYXJlZF9QZ3NzICopIGRzYV9nZXRfYWRkcmVzcyhwZ1N0YXRMb2NhbC5kc2EsIHAt PmJvZHkpOworCisJCQlpZiAoKCF1c2VyaWQgfHwgc2hhcmVkX2VudHJ5LT5rZXkudXNlcmlkID09 IHVzZXJpZCkgJiYKKwkJCQkoIWRiaWQgfHwgc2hhcmVkX2VudHJ5LT5rZXkuZGJpZCA9PSBkYmlk KSAmJgorCQkJCSghcXVlcnlpZCB8fCBzaGFyZWRfZW50cnktPmtleS5xdWVyeWlkID09IHF1ZXJ5 aWQpKQogCQkJewotCQkJCVNJTkdMRV9FTlRSWV9SRVNFVChlbnRyeSk7CisJCQkJaWYgKG1pbm1h eF9vbmx5KQorCQkJCXsKKwkJCQkJZm9yIChpbnQga2luZCA9IDA7IGtpbmQgPCBQR1NTX05VTUtJ TkQ7IGtpbmQrKykKKwkJCQkJeworCQkJCQkJc2hhcmVkX2VudHJ5LT5jb3VudGVycy5tYXhfdGlt ZVtraW5kXSA9IDA7CisJCQkJCQlzaGFyZWRfZW50cnktPmNvdW50ZXJzLm1pbl90aW1lW2tpbmRd ID0gMDsKKwkJCQkJfQorCQkJCQlzaGFyZWRfZW50cnktPm1pbm1heF9zdGF0c19zaW5jZSA9IHN0 YXRzX3Jlc2V0OworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlzaGFyZWRfZW50cnktPnF1 ZXJ5X2xlbiA9IC0xOworCisJCQkJCS8qIENvbGxlY3QgZm9yIGRlZmVycmVkIGRyb3AgKi8KKwkJ CQkJaWYgKG51bV90b19kcm9wID49IG1heF90b19kcm9wKQorCQkJCQl7CisJCQkJCQltYXhfdG9f ZHJvcCA9IE1heChtYXhfdG9fZHJvcCAqIDIsIDEyOCk7CisJCQkJCQlpZiAodG9fZHJvcCA9PSBO VUxMKQorCQkJCQkJCXRvX2Ryb3AgPSBwYWxsb2NfYXJyYXkoUGVuZGluZ0Ryb3AsIG1heF90b19k cm9wKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQl0b19kcm9wID0gcmVwYWxsb2NfYXJyYXkodG9fZHJv cCwgUGVuZGluZ0Ryb3AsIG1heF90b19kcm9wKTsKKwkJCQkJfQorCQkJCQl0b19kcm9wW251bV90 b19kcm9wXS5kYmlkID0gc2hhcmVkX2VudHJ5LT5rZXkuZGJpZDsKKwkJCQkJdG9fZHJvcFtudW1f dG9fZHJvcF0ub2JqaWQgPSBwZ3NzX29iamlkKCZzaGFyZWRfZW50cnktPmtleSk7CisJCQkJCW51 bV90b19kcm9wKys7CisJCQkJfQogCQkJfQogCQl9Ci0JfQotCWVsc2UKLQl7Ci0JCS8qIFJlc2V0 IGFsbCBlbnRyaWVzLiAqLwotCQloYXNoX3NlcV9pbml0KCZoYXNoX3NlcSwgcGdzc19oYXNoKTsK LQkJd2hpbGUgKChlbnRyeSA9IGhhc2hfc2VxX3NlYXJjaCgmaGFzaF9zZXEpKSAhPSBOVUxMKQor CQlkc2hhc2hfc2VxX3Rlcm0oJmhzdGF0KTsKKworCQkvKiBOb3cgZHJvcCBlbnRyaWVzIG91dHNp ZGUgdGhlIGl0ZXJhdGlvbiAqLworCQlmb3IgKGludCBpID0gMDsgaSA8IG51bV90b19kcm9wOyBp KyspCiAJCXsKLQkJCVNJTkdMRV9FTlRSWV9SRVNFVChlbnRyeSk7CisJCQlwZ3N0YXRfZHJvcF9l bnRyeShQR1NUQVRfS0lORF9QR1NTLAorCQkJCQkJCSAgdG9fZHJvcFtpXS5kYmlkLCB0b19kcm9w W2ldLm9iamlkKTsKIAkJfQorCQludW1fcmVtb3ZlID0gbnVtX3RvX2Ryb3A7CisKKwkJaWYgKHRv X2Ryb3ApCisJCQlwZnJlZSh0b19kcm9wKTsKIAl9CiAKIAkvKiBBbGwgZW50cmllcyBhcmUgcmVt b3ZlZD8gKi8KQEAgLTI3OTAsNiArMjUxNiw0NTYgQEAgcmVsZWFzZV9sb2NrOgogCXJldHVybiBz dGF0c19yZXNldDsKIH0KIAorLyoKKyAqIHBnc3RhdCBmbHVzaCBjYWxsYmFjazogbWVyZ2UgcGVu ZGluZyBzdGF0cyBpbnRvIHNoYXJlZCBtZW1vcnkuCisgKgorICogVGhpcyBpcyBjYWxsZWQgYnkg dGhlIHBnc3RhdCBpbmZyYXN0cnVjdHVyZSB0byBmbHVzaCBhY2N1bXVsYXRlZAorICogYmFja2Vu ZC1sb2NhbCBzdGF0aXN0aWNzIGludG8gdGhlIHNoYXJlZCBlbnRyeS4KKyAqLworc3RhdGljIGJv b2wKK3Bnc3NfZmx1c2hfcGVuZGluZ19jYihQZ1N0YXRfRW50cnlSZWYgKmVudHJ5X3JlZiwgYm9v bCBub3dhaXQpCit7CisJUGdTdGF0X1BlbmRpbmdQZ3NzICpwZW5kaW5nOworCVBnU3RhdFNoYXJl ZF9QZ3NzICpzaGFyZWRfZW50cnk7CisJQ291bnRlcnMgICAqc2hhcmVkOworCUNvdW50ZXJzICAg KnA7CisKKwlwZW5kaW5nID0gKFBnU3RhdF9QZW5kaW5nUGdzcyAqKSBlbnRyeV9yZWYtPnBlbmRp bmc7CisJc2hhcmVkX2VudHJ5ID0gKFBnU3RhdFNoYXJlZF9QZ3NzICopIGVudHJ5X3JlZi0+c2hh cmVkX3N0YXRzOworCisJaWYgKCFwZ3N0YXRfbG9ja19lbnRyeShlbnRyeV9yZWYsIG5vd2FpdCkp CisJCXJldHVybiBmYWxzZTsKKworCXNoYXJlZCA9ICZzaGFyZWRfZW50cnktPmNvdW50ZXJzOwor CXAgPSAmcGVuZGluZy0+Y291bnRlcnM7CisKKwlmb3IgKGludCBraW5kID0gMDsga2luZCA8IFBH U1NfTlVNS0lORDsga2luZCsrKQorCXsKKwkJaWYgKHAtPmNhbGxzW2tpbmRdID09IDApCisJCQlj b250aW51ZTsKKworCQkvKgorCQkgKiBNZXJnZSB2YXJpYW5jZSB1c2luZyBDaGFuJ3MgcGFyYWxs ZWwgdmFyaWFuY2UgYWxnb3JpdGhtIHRvIGNvbWJpbmUKKwkJICogcGVyLWJhY2tlbmQgc3VtX3Zh cl90aW1lIChjb21wdXRlZCB2aWEgV2VsZm9yZCdzIG1ldGhvZCkgd2l0aCB0aGUKKwkJICogc2hh cmVkIGFnZ3JlZ2F0ZS4gIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSB1cGRhdGluZyBjYWxscy90 b3RhbHMuCisJCSAqIFNlZQorCQkgKiA8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWxn b3JpdGhtc19mb3JfY2FsY3VsYXRpbmdfdmFyaWFuY2UjUGFyYWxsZWxfYWxnb3JpdGhtPgorCQkg Ki8KKwkJaWYgKHNoYXJlZC0+Y2FsbHNba2luZF0gPiAwKQorCQl7CisJCQlkb3VibGUJCW9sZF9t ZWFuX2EgPSBzaGFyZWQtPm1lYW5fdGltZVtraW5kXTsKKwkJCWRvdWJsZQkJb2xkX21lYW5fYiA9 IHAtPm1lYW5fdGltZVtraW5kXTsKKwkJCWRvdWJsZQkJZGVsdGEgPSBvbGRfbWVhbl9hIC0gb2xk X21lYW5fYjsKKwkJCWRvdWJsZQkJbl9hID0gc2hhcmVkLT5jYWxsc1traW5kXTsKKwkJCWRvdWJs ZQkJbl9iID0gcC0+Y2FsbHNba2luZF07CisKKwkJCXNoYXJlZC0+c3VtX3Zhcl90aW1lW2tpbmRd ICs9IHAtPnN1bV92YXJfdGltZVtraW5kXSArCisJCQkJZGVsdGEgKiBkZWx0YSAqIG5fYSAqIG5f YiAvIChuX2EgKyBuX2IpOworCQl9CisJCWVsc2UKKwkJeworCQkJc2hhcmVkLT5zdW1fdmFyX3Rp bWVba2luZF0gPSBwLT5zdW1fdmFyX3RpbWVba2luZF07CisJCX0KKworCQlzaGFyZWQtPmNhbGxz W2tpbmRdICs9IHAtPmNhbGxzW2tpbmRdOworCQlzaGFyZWQtPnRvdGFsX3RpbWVba2luZF0gKz0g cC0+dG90YWxfdGltZVtraW5kXTsKKworCQkvKgorCQkgKiBVcGRhdGUgbWluL21heC4gIElmIGJv dGggYXJlIDAgaW4gc2hhcmVkLCBpdCBtZWFucyBhIHJlc2V0CisJCSAqIGhhcHBlbmVkLCBzbyB0 cmVhdCB0aGUgcGVuZGluZyB2YWx1ZXMgYXMgdGhlIG5ldyBiYXNlbGluZS4KKwkJICovCisJCWlm IChzaGFyZWQtPm1pbl90aW1lW2tpbmRdID09IDAgJiYgc2hhcmVkLT5tYXhfdGltZVtraW5kXSA9 PSAwKQorCQl7CisJCQlzaGFyZWQtPm1pbl90aW1lW2tpbmRdID0gcC0+bWluX3RpbWVba2luZF07 CisJCQlzaGFyZWQtPm1heF90aW1lW2tpbmRdID0gcC0+bWF4X3RpbWVba2luZF07CisJCX0KKwkJ ZWxzZQorCQl7CisJCQlpZiAoc2hhcmVkLT5taW5fdGltZVtraW5kXSA+IHAtPm1pbl90aW1lW2tp bmRdKQorCQkJCXNoYXJlZC0+bWluX3RpbWVba2luZF0gPSBwLT5taW5fdGltZVtraW5kXTsKKwkJ CWlmIChzaGFyZWQtPm1heF90aW1lW2tpbmRdIDwgcC0+bWF4X3RpbWVba2luZF0pCisJCQkJc2hh cmVkLT5tYXhfdGltZVtraW5kXSA9IHAtPm1heF90aW1lW2tpbmRdOworCQl9CisKKwkJLyogUmVj b21wdXRlIG1lYW4gZnJvbSB0b3RhbHMgKi8KKwkJc2hhcmVkLT5tZWFuX3RpbWVba2luZF0gPQor CQkJc2hhcmVkLT50b3RhbF90aW1lW2tpbmRdIC8gc2hhcmVkLT5jYWxsc1traW5kXTsKKwl9CisK KwlzaGFyZWQtPnJvd3MgKz0gcC0+cm93czsKKwlzaGFyZWQtPnNoYXJlZF9ibGtzX2hpdCArPSBw LT5zaGFyZWRfYmxrc19oaXQ7CisJc2hhcmVkLT5zaGFyZWRfYmxrc19yZWFkICs9IHAtPnNoYXJl ZF9ibGtzX3JlYWQ7CisJc2hhcmVkLT5zaGFyZWRfYmxrc19kaXJ0aWVkICs9IHAtPnNoYXJlZF9i bGtzX2RpcnRpZWQ7CisJc2hhcmVkLT5zaGFyZWRfYmxrc193cml0dGVuICs9IHAtPnNoYXJlZF9i bGtzX3dyaXR0ZW47CisJc2hhcmVkLT5sb2NhbF9ibGtzX2hpdCArPSBwLT5sb2NhbF9ibGtzX2hp dDsKKwlzaGFyZWQtPmxvY2FsX2Jsa3NfcmVhZCArPSBwLT5sb2NhbF9ibGtzX3JlYWQ7CisJc2hh cmVkLT5sb2NhbF9ibGtzX2RpcnRpZWQgKz0gcC0+bG9jYWxfYmxrc19kaXJ0aWVkOworCXNoYXJl ZC0+bG9jYWxfYmxrc193cml0dGVuICs9IHAtPmxvY2FsX2Jsa3Nfd3JpdHRlbjsKKwlzaGFyZWQt PnRlbXBfYmxrc19yZWFkICs9IHAtPnRlbXBfYmxrc19yZWFkOworCXNoYXJlZC0+dGVtcF9ibGtz X3dyaXR0ZW4gKz0gcC0+dGVtcF9ibGtzX3dyaXR0ZW47CisJc2hhcmVkLT5zaGFyZWRfYmxrX3Jl YWRfdGltZSArPSBwLT5zaGFyZWRfYmxrX3JlYWRfdGltZTsKKwlzaGFyZWQtPnNoYXJlZF9ibGtf d3JpdGVfdGltZSArPSBwLT5zaGFyZWRfYmxrX3dyaXRlX3RpbWU7CisJc2hhcmVkLT5sb2NhbF9i bGtfcmVhZF90aW1lICs9IHAtPmxvY2FsX2Jsa19yZWFkX3RpbWU7CisJc2hhcmVkLT5sb2NhbF9i bGtfd3JpdGVfdGltZSArPSBwLT5sb2NhbF9ibGtfd3JpdGVfdGltZTsKKwlzaGFyZWQtPnRlbXBf YmxrX3JlYWRfdGltZSArPSBwLT50ZW1wX2Jsa19yZWFkX3RpbWU7CisJc2hhcmVkLT50ZW1wX2Js a193cml0ZV90aW1lICs9IHAtPnRlbXBfYmxrX3dyaXRlX3RpbWU7CisJc2hhcmVkLT51c2FnZSAr PSBwLT51c2FnZTsKKwlzaGFyZWQtPndhbF9yZWNvcmRzICs9IHAtPndhbF9yZWNvcmRzOworCXNo YXJlZC0+d2FsX2ZwaSArPSBwLT53YWxfZnBpOworCXNoYXJlZC0+d2FsX2J5dGVzICs9IHAtPndh bF9ieXRlczsKKwlzaGFyZWQtPndhbF9idWZmZXJzX2Z1bGwgKz0gcC0+d2FsX2J1ZmZlcnNfZnVs bDsKKwlzaGFyZWQtPmppdF9mdW5jdGlvbnMgKz0gcC0+aml0X2Z1bmN0aW9uczsKKwlzaGFyZWQt PmppdF9nZW5lcmF0aW9uX3RpbWUgKz0gcC0+aml0X2dlbmVyYXRpb25fdGltZTsKKwlzaGFyZWQt PmppdF9kZWZvcm1fY291bnQgKz0gcC0+aml0X2RlZm9ybV9jb3VudDsKKwlzaGFyZWQtPmppdF9k ZWZvcm1fdGltZSArPSBwLT5qaXRfZGVmb3JtX3RpbWU7CisJc2hhcmVkLT5qaXRfaW5saW5pbmdf Y291bnQgKz0gcC0+aml0X2lubGluaW5nX2NvdW50OworCXNoYXJlZC0+aml0X2lubGluaW5nX3Rp bWUgKz0gcC0+aml0X2lubGluaW5nX3RpbWU7CisJc2hhcmVkLT5qaXRfb3B0aW1pemF0aW9uX2Nv dW50ICs9IHAtPmppdF9vcHRpbWl6YXRpb25fY291bnQ7CisJc2hhcmVkLT5qaXRfb3B0aW1pemF0 aW9uX3RpbWUgKz0gcC0+aml0X29wdGltaXphdGlvbl90aW1lOworCXNoYXJlZC0+aml0X2VtaXNz aW9uX2NvdW50ICs9IHAtPmppdF9lbWlzc2lvbl9jb3VudDsKKwlzaGFyZWQtPmppdF9lbWlzc2lv bl90aW1lICs9IHAtPmppdF9lbWlzc2lvbl90aW1lOworCXNoYXJlZC0+cGFyYWxsZWxfd29ya2Vy c190b19sYXVuY2ggKz0gcC0+cGFyYWxsZWxfd29ya2Vyc190b19sYXVuY2g7CisJc2hhcmVkLT5w YXJhbGxlbF93b3JrZXJzX2xhdW5jaGVkICs9IHAtPnBhcmFsbGVsX3dvcmtlcnNfbGF1bmNoZWQ7 CisJc2hhcmVkLT5nZW5lcmljX3BsYW5fY2FsbHMgKz0gcC0+Z2VuZXJpY19wbGFuX2NhbGxzOwor CXNoYXJlZC0+Y3VzdG9tX3BsYW5fY2FsbHMgKz0gcC0+Y3VzdG9tX3BsYW5fY2FsbHM7CisKKwlw Z3N0YXRfdW5sb2NrX2VudHJ5KGVudHJ5X3JlZik7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoK KyAqIHBnc3RhdCBzZXJpYWxpemF0aW9uIGNhbGxiYWNrOiB3cml0ZSBxdWVyeSB0ZXh0IGluZm8g Zm9yIGFuIGVudHJ5LgorICoKKyAqIFdlIHdyaXRlIHRoZSBxdWVyeSB0ZXh0IG9mZnNldCwgbGVu Z3RoLCBlbmNvZGluZywgYW5kIHRoZSBmdWxsIHBnc3NIYXNoS2V5CisgKiB0byB0aGUgc3RhdHMg ZmlsZSBzbyB3ZSBjYW4gcmVjb25zdHJ1Y3QgdGhlIGVudHJ5IG9uIHJlbG9hZC4KKyAqLworc3Rh dGljIHZvaWQKK3Bnc3NfdG9fc2VyaWFsaXplZF9kYXRhKGNvbnN0IFBnU3RhdF9IYXNoS2V5ICpr ZXksCisJCQkJCQljb25zdCBQZ1N0YXRTaGFyZWRfQ29tbW9uICpoZWFkZXIsCisJCQkJCQlGSUxF ICpzdGF0ZmlsZSkKK3sKKwljb25zdCBQZ1N0YXRTaGFyZWRfUGdzcyAqZW50cnkgPSAoY29uc3Qg UGdTdGF0U2hhcmVkX1Bnc3MgKikgaGVhZGVyOworCXVpbnQzMgkJbWFnaWMgPSBQR1NTX0ZJTEVf SEVBREVSOworCXBnc3NIYXNoS2V5IGhrZXkgPSBlbnRyeS0+a2V5OworCVRpbWVzdGFtcFR6IHN0 YXRzX3NpbmNlID0gZW50cnktPnN0YXRzX3NpbmNlOworCVRpbWVzdGFtcFR6IG1pbm1heF9zdGF0 c19zaW5jZSA9IGVudHJ5LT5taW5tYXhfc3RhdHNfc2luY2U7CisJaW50CQkJcXVlcnlfbGVuID0g ZW50cnktPnF1ZXJ5X2xlbjsKKwlpbnQJCQllbmNvZGluZyA9IGVudHJ5LT5lbmNvZGluZzsKKwor CXBnc3RhdF93cml0ZV9jaHVua19zKHN0YXRmaWxlLCAmbWFnaWMpOworCXBnc3RhdF93cml0ZV9j aHVua19zKHN0YXRmaWxlLCAmaGtleSk7CisJcGdzdGF0X3dyaXRlX2NodW5rX3Moc3RhdGZpbGUs ICZxdWVyeV9sZW4pOworCXBnc3RhdF93cml0ZV9jaHVua19zKHN0YXRmaWxlLCAmZW5jb2Rpbmcp OworCXBnc3RhdF93cml0ZV9jaHVua19zKHN0YXRmaWxlLCAmc3RhdHNfc2luY2UpOworCXBnc3Rh dF93cml0ZV9jaHVua19zKHN0YXRmaWxlLCAmbWlubWF4X3N0YXRzX3NpbmNlKTsKKworCS8qCisJ ICogV3JpdGUgdGhlIHF1ZXJ5IHRleHQgaXRzZWxmIGludG8gdGhlIHN0YXRzIGZpbGUgc28gaXQg c3Vydml2ZXMgcmVzdGFydHMKKwkgKiAoUEdTU19URVhUX0ZJTEUgbGl2ZXMgaW4gYSB0bXBmcyB0 aGF0IGdldHMgd2lwZWQpLgorCSAqLworCWlmIChxdWVyeV9sZW4gPj0gMCkKKwl7CisJCWNoYXIJ ICAgKnFzdHIgPSBOVUxMOworCisJCWlmICghcGdzc19xdGV4dF93cml0ZV9idWZmZXIgJiYgcGdz cykKKwkJCXBnc3NfcXRleHRfd3JpdGVfYnVmZmVyID0gcXRleHRfbG9hZF9maWxlKCZwZ3NzX3F0 ZXh0X3dyaXRlX2J1ZmZlcl9zaXplKTsKKworCQlpZiAocGdzc19xdGV4dF93cml0ZV9idWZmZXIp CisJCQlxc3RyID0gcXRleHRfZmV0Y2goZW50cnktPnF1ZXJ5X29mZnNldCwgcXVlcnlfbGVuLAor CQkJCQkJCSAgIHBnc3NfcXRleHRfd3JpdGVfYnVmZmVyLAorCQkJCQkJCSAgIHBnc3NfcXRleHRf d3JpdGVfYnVmZmVyX3NpemUpOworCisJCWlmIChxc3RyKQorCQkJcGdzdGF0X3dyaXRlX2NodW5r KHN0YXRmaWxlLCBxc3RyLCBxdWVyeV9sZW4gKyAxKTsKKwkJZWxzZQorCQl7CisJCQljaGFyCQlu dWwgPSAnXDAnOworCisJCQlwZ3N0YXRfd3JpdGVfY2h1bmsoc3RhdGZpbGUsICZudWwsIDEpOwor CQl9CisJfQorfQorCisvKgorICogcGdzdGF0IGRlc2VyaWFsaXphdGlvbiBjYWxsYmFjazogcmVh ZCBxdWVyeSB0ZXh0IGluZm8gZm9yIGFuIGVudHJ5LgorICovCitzdGF0aWMgYm9vbAorcGdzc19m cm9tX3NlcmlhbGl6ZWRfZGF0YShjb25zdCBQZ1N0YXRfSGFzaEtleSAqa2V5LAorCQkJCQkJICBQ Z1N0YXRTaGFyZWRfQ29tbW9uICpoZWFkZXIsCisJCQkJCQkgIEZJTEUgKnN0YXRmaWxlKQorewor CVBnU3RhdFNoYXJlZF9QZ3NzICplbnRyeSA9IChQZ1N0YXRTaGFyZWRfUGdzcyAqKSBoZWFkZXI7 CisJaW50CQkJcXVlcnlfbGVuOworCWludAkJCWVuY29kaW5nOworCXVpbnQzMgkJbWFnaWM7CisK KwlpZiAoIXBnc3RhdF9yZWFkX2NodW5rX3Moc3RhdGZpbGUsICZtYWdpYykpCisJCXJldHVybiBm YWxzZTsKKwlpZiAobWFnaWMgIT0gUEdTU19GSUxFX0hFQURFUikKKwl7CisJCWVsb2coV0FSTklO RywgInBnX3N0YXRfc3RhdGVtZW50czogZGlzY2FyZGluZyBzdGF0cyB3aXRoIG1pc21hdGNoZWQg Zm9ybWF0IChnb3QgMHglMDhYLCBleHBlY3RlZCAweCUwOFgpIiwKKwkJCSBtYWdpYywgUEdTU19G SUxFX0hFQURFUik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoIXBnc3RhdF9yZWFkX2No dW5rX3Moc3RhdGZpbGUsICZlbnRyeS0+a2V5KSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICghcGdz dGF0X3JlYWRfY2h1bmtfcyhzdGF0ZmlsZSwgJnF1ZXJ5X2xlbikpCisJCXJldHVybiBmYWxzZTsK KwlpZiAoIXBnc3RhdF9yZWFkX2NodW5rX3Moc3RhdGZpbGUsICZlbmNvZGluZykpCisJCXJldHVy biBmYWxzZTsKKwlpZiAoIXBnc3RhdF9yZWFkX2NodW5rX3Moc3RhdGZpbGUsICZlbnRyeS0+c3Rh dHNfc2luY2UpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFwZ3N0YXRfcmVhZF9jaHVua19zKHN0 YXRmaWxlLCAmZW50cnktPm1pbm1heF9zdGF0c19zaW5jZSkpCisJCXJldHVybiBmYWxzZTsKKwor CS8qIEluaXRpYWxpemUgdGV4dCBmaWVsZHMgKi8KKwllbnRyeS0+cXVlcnlfbGVuID0gLTE7CisJ ZW50cnktPmVuY29kaW5nID0gZW5jb2Rpbmc7CisJZW50cnktPnF1ZXJ5X29mZnNldCA9IDA7CisK KwkvKgorCSAqIFJlYWQgdGhlIHF1ZXJ5IHRleHQgYW5kIHN0b3JlIGl0IGluIHRoZSBleHRlcm5h bCBmaWxlLgorCSAqLworCWlmIChxdWVyeV9sZW4gPj0gMCkKKwl7CisJCWNoYXIJICAgKmJ1ZiA9 IHBhbGxvYyhxdWVyeV9sZW4gKyAxKTsKKworCQlpZiAoIXBnc3RhdF9yZWFkX2NodW5rKHN0YXRm aWxlLCBidWYsIHF1ZXJ5X2xlbiArIDEpKQorCQl7CisJCQlwZnJlZShidWYpOworCQkJcmV0dXJu IGZhbHNlOworCQl9CisKKwkJaWYgKCFwZ3NzX3F0ZXh0X3JlYnVpbGRfZmlsZSkKKwkJeworCQkJ cGdzc19xdGV4dF9yZWJ1aWxkX2ZpbGUgPSBBbGxvY2F0ZUZpbGUoUEdTU19URVhUX0ZJTEUsIFBH X0JJTkFSWV9XKTsKKwkJCWlmICghcGdzc19xdGV4dF9yZWJ1aWxkX2ZpbGUpCisJCQl7CisJCQkJ cGZyZWUoYnVmKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQlwZ3NzX3F0ZXh0X3JlYnVp bGRfZXh0ZW50ID0gMDsKKwkJfQorCisJCWVudHJ5LT5xdWVyeV9vZmZzZXQgPSBwZ3NzX3F0ZXh0 X3JlYnVpbGRfZXh0ZW50OworCisJCWlmIChmd3JpdGUoYnVmLCAxLCBxdWVyeV9sZW4gKyAxLCBw Z3NzX3F0ZXh0X3JlYnVpbGRfZmlsZSkgIT0gKHNpemVfdCkgKHF1ZXJ5X2xlbiArIDEpKQorCQl7 CisJCQlwZnJlZShidWYpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCXBnc3NfcXRleHRfcmVi dWlsZF9leHRlbnQgKz0gcXVlcnlfbGVuICsgMTsKKworCQllbnRyeS0+cXVlcnlfbGVuID0gcXVl cnlfbGVuOworCQllbnRyeS0+ZW5jb2RpbmcgPSBlbmNvZGluZzsKKwkJcGZyZWUoYnVmKTsKKwl9 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIHBnc3RhdCBmaW5pc2ggY2FsbGJhY2s6IGhh bmRsZSBlbmQgb2Ygc3RhdHMgZmlsZSBvcGVyYXRpb25zLgorICoKKyAqIEZvciBwZ19zdGF0X3N0 YXRlbWVudHMsIHdlIG1hbmFnZSB0aGUgcXVlcnkgdGV4dCBmaWxlIGxpZmVjeWNsZSBoZXJlLgor ICovCitzdGF0aWMgdm9pZAorcGdzc19maW5pc2goUGdTdGF0X1N0YXRzRmlsZU9wIHN0YXR1cykK K3sKKwlzd2l0Y2ggKHN0YXR1cykKKwl7CisJCWNhc2UgU1RBVFNfV1JJVEU6CisJCQkvKiBGcmVl IHRoZSBjYWNoZWQgcXVlcnkgdGV4dCBidWZmZXIgdXNlZCBkdXJpbmcgc2VyaWFsaXphdGlvbiAq LworCQkJaWYgKHBnc3NfcXRleHRfd3JpdGVfYnVmZmVyKQorCQkJeworCQkJCXBmcmVlKHBnc3Nf cXRleHRfd3JpdGVfYnVmZmVyKTsKKwkJCQlwZ3NzX3F0ZXh0X3dyaXRlX2J1ZmZlciA9IE5VTEw7 CisJCQkJcGdzc19xdGV4dF93cml0ZV9idWZmZXJfc2l6ZSA9IDA7CisJCQl9CisJCQlicmVhazsK KworCQljYXNlIFNUQVRTX1JFQUQ6CisJCQkvKiBDbG9zZSB0aGUgcmVidWlsZCBmaWxlIGFuZCB1 cGRhdGUgc2hhcmVkIGV4dGVudCAqLworCQkJaWYgKHBnc3NfcXRleHRfcmVidWlsZF9maWxlKQor CQkJeworCQkJCUZyZWVGaWxlKHBnc3NfcXRleHRfcmVidWlsZF9maWxlKTsKKwkJCQlwZ3NzX3F0 ZXh0X3JlYnVpbGRfZmlsZSA9IE5VTEw7CisJCQkJaWYgKHBnc3MpCisJCQkJeworCQkJCQlwZ3Nz LT5leHRlbnQgPSBwZ3NzX3F0ZXh0X3JlYnVpbGRfZXh0ZW50OworCQkJCX0KKwkJCQlwZ3NzX3F0 ZXh0X3JlYnVpbGRfZXh0ZW50ID0gMDsKKwkJCX0KKworCQkJLyoKKwkJCSAqIElmIHBnX3N0YXRf c3RhdGVtZW50cy5zYXZlIGlzIGRpc2FibGVkLCBkaXNjYXJkIGFsbCBlbnRyaWVzCisJCQkgKiB0 aGF0IHdlcmUganVzdCBsb2FkZWQgZnJvbSB0aGUgc3RhdHMgZmlsZS4KKwkJCSAqLworCQkJaWYg KCFwZ3NzX3NhdmUpCisJCQl7CisJCQkJZW50cnlfcmVzZXQoMCwgMCwgMCwgZmFsc2UpOworCQkJ fQorCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFUU19ESVNDQVJEOgorCQkJdW5saW5rKFBHU1NfVEVY VF9GSUxFKTsKKwkJCWJyZWFrOworCX0KK30KKworLyoKKyAqIEV2aWN0IGxlYXN0LXVzZWQgZW50 cmllcyB3aGVuIHRoZSBlbnRyeSBjb3VudCBleGNlZWRzIHBnc3NfbWF4LgorICoKKyAqIFNvcnRz IGFsbCBlbnRyaWVzIGJ5IHVzYWdlLCBhcHBsaWVzIGEgZGVjYXkgZmFjdG9yLCB0aGVuIGRyb3Bz IHRoZQorICogYm90dG9tIFVTQUdFX0RFQUxMT0NfUEVSQ0VOVCBvZiBlbnRyaWVzLgorICovCitz dGF0aWMgdm9pZAorZW50cnlfZGVhbGxvYyh2b2lkKQoreworCWRzaGFzaF9zZXFfc3RhdHVzIGhz dGF0OworCVBnU3RhdFNoYXJlZF9IYXNoRW50cnkgKnA7CisJVXNhZ2VFbnRyeSAqZW50cmllczsK KwlpbnQJCQluZW50cmllcyA9IDA7CisJaW50CQkJYWxsb2NhdGVkID0gMTAyNDsKKwlpbnQJCQlu dmljdGltczsKKwlpbnQJCQlpOworCVNpemUJCXRvdHRleHRsZW4gPSAwOworCWludAkJCW52YWxp ZHRleHRzID0gMDsKKworCWVudHJpZXMgPSBwYWxsb2MoYWxsb2NhdGVkICogc2l6ZW9mKFVzYWdl RW50cnkpKTsKKworCS8qIFNjYW4gYWxsIGVudHJpZXMsIGNvbGxlY3QgdXNhZ2UgaW5mbyBhbmQg YXBwbHkgZGVjYXkgKi8KKwlkc2hhc2hfc2VxX2luaXQoJmhzdGF0LCBwZ1N0YXRMb2NhbC5zaGFy ZWRfaGFzaCwgZmFsc2UpOworCXdoaWxlICgocCA9IGRzaGFzaF9zZXFfbmV4dCgmaHN0YXQpKSAh PSBOVUxMKQorCXsKKwkJUGdTdGF0U2hhcmVkX1Bnc3MgKnNoYXJlZF9lbnRyeTsKKworCQlpZiAo cC0+a2V5LmtpbmQgIT0gUEdTVEFUX0tJTkRfUEdTUykKKwkJCWNvbnRpbnVlOworCQlpZiAocC0+ ZHJvcHBlZCkKKwkJCWNvbnRpbnVlOworCisJCXNoYXJlZF9lbnRyeSA9IChQZ1N0YXRTaGFyZWRf UGdzcyAqKSBkc2FfZ2V0X2FkZHJlc3MocGdTdGF0TG9jYWwuZHNhLCBwLT5ib2R5KTsKKworCQkv KiBTa2lwIGVudHJpZXMgbm90IHlldCBleGVjdXRlZDsgcHJvdGVjdCBwYXJzZS10aW1lIGVudHJp ZXMuICovCisJCWlmIChzaGFyZWRfZW50cnktPmNvdW50ZXJzLmNhbGxzW1BHU1NfUExBTl0gKwor CQkJc2hhcmVkX2VudHJ5LT5jb3VudGVycy5jYWxsc1tQR1NTX0VYRUNdID09IDApCisJCQljb250 aW51ZTsKKworCQlpZiAobmVudHJpZXMgPj0gYWxsb2NhdGVkKQorCQl7CisJCQlhbGxvY2F0ZWQg Kj0gMjsKKwkJCWVudHJpZXMgPSByZXBhbGxvYyhlbnRyaWVzLCBhbGxvY2F0ZWQgKiBzaXplb2Yo VXNhZ2VFbnRyeSkpOworCQl9CisKKwkJZW50cmllc1tuZW50cmllc10ua2V5ID0gc2hhcmVkX2Vu dHJ5LT5rZXk7CisJCWVudHJpZXNbbmVudHJpZXNdLnVzYWdlID0gc2hhcmVkX2VudHJ5LT5jb3Vu dGVycy51c2FnZTsKKwkJbmVudHJpZXMrKzsKKworCQkvKiBBcHBseSBkZWNheSAqLworCQlzaGFy ZWRfZW50cnktPmNvdW50ZXJzLnVzYWdlICo9IFVTQUdFX0RFQ1JFQVNFX0ZBQ1RPUjsKKworCQlp ZiAoc2hhcmVkX2VudHJ5LT5xdWVyeV9sZW4gPj0gMCkKKwkJeworCQkJdG90dGV4dGxlbiArPSBz aGFyZWRfZW50cnktPnF1ZXJ5X2xlbiArIDE7CisJCQludmFsaWR0ZXh0cysrOworCQl9CisJfQor CWRzaGFzaF9zZXFfdGVybSgmaHN0YXQpOworCisJLyogU29ydCBieSB1c2FnZSBhc2NlbmRpbmcg Ki8KKwlxc29ydChlbnRyaWVzLCBuZW50cmllcywgc2l6ZW9mKFVzYWdlRW50cnkpLAorCQkgIGVu dHJ5X2NtcCk7CisKKwkvKiBVcGRhdGUgbWVhbiBxdWVyeSBsZW5ndGggKi8KKwlpZiAobnZhbGlk dGV4dHMgPiAwKQorCQlwZ3NzLT5tZWFuX3F1ZXJ5X2xlbiA9IHRvdHRleHRsZW4gLyBudmFsaWR0 ZXh0czsKKwllbHNlCisJCXBnc3MtPm1lYW5fcXVlcnlfbGVuID0gQVNTVU1FRF9MRU5HVEhfSU5J VDsKKworCS8qIERyb3AgdGhlIGJvdHRvbSBmcmFjdGlvbiAqLworCW52aWN0aW1zID0gTWF4KDEw LCBuZW50cmllcyAqIFVTQUdFX0RFQUxMT0NfUEVSQ0VOVCAvIDEwMCk7CisJbnZpY3RpbXMgPSBN aW4obnZpY3RpbXMsIG5lbnRyaWVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBudmljdGltczsgaSsr KQorCXsKKwkJcGdzdGF0X2Ryb3BfZW50cnkoUEdTVEFUX0tJTkRfUEdTUywKKwkJCQkJCSAgZW50 cmllc1tpXS5rZXkuZGJpZCwKKwkJCQkJCSAgcGdzc19vYmppZCgmZW50cmllc1tpXS5rZXkpKTsK Kwl9CisKKwlwZnJlZShlbnRyaWVzKTsKKworCS8qCisJICogU2lnbmFsIG90aGVyIGJhY2tlbmRz IHRvIGludmFsaWRhdGUgdGhlaXIgY2FjaGVkIHJlZmVyZW5jZXMgdG8gdGhlCisJICogZHJvcHBl ZCBlbnRyaWVzLiAgV2l0aG91dCB0aGlzLCBiYWNrZW5kcyBrZWVwIHN0YWxlIHJlZnMgYW5kIG5l dmVyCisJICogcmUtY3JlYXRlIGV2aWN0ZWQgZW50cmllcy4KKwkgKi8KKwlwZ3N0YXRfcmVxdWVz dF9lbnRyeV9yZWZzX2djKCk7CisKKwkvKiBJbmNyZW1lbnQgZGVhbGxvYyBjb3VudGVyICovCisJ U3BpbkxvY2tBY3F1aXJlKCZwZ3NzLT5tdXRleCk7CisJcGdzcy0+c3RhdHMuZGVhbGxvYyArPSAx OworCVNwaW5Mb2NrUmVsZWFzZSgmcGdzcy0+bXV0ZXgpOworfQorCisvKgorICogcXNvcnQgY29t cGFyYXRvciBmb3IgZXZpY3Rpb246IHNvcnQgYnkgdXNhZ2UgYXNjZW5kaW5nLgorICovCitzdGF0 aWMgaW50CitlbnRyeV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwlkb3Vi bGUJCWwgPSAoKGNvbnN0IFVzYWdlRW50cnkgKikgYSktPnVzYWdlOworCWRvdWJsZQkJciA9ICgo Y29uc3QgVXNhZ2VFbnRyeSAqKSBiKS0+dXNhZ2U7CisKKwlpZiAobCA8IHIpCisJCXJldHVybiAt MTsKKwllbHNlIGlmIChsID4gcikKKwkJcmV0dXJuICsxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9 CisKKy8qCisgKiBBdHRlbXB0IGV2aWN0aW9uIGlmIGVub3VnaCB0aW1lIGhhcyBwYXNzZWQgc2lu Y2UgdGhlIGxhc3QgY3ljbGUuCisgKgorICogVXNlcyBhIGNvbmRpdGlvbmFsIGxvY2sgc28gdGhh dCBhdCBtb3N0IG9uZSBiYWNrZW5kIHBlcmZvcm1zIGV2aWN0aW9uIGF0IGEKKyAqIHRpbWU7IG90 aGVycyBzaW1wbHkgcmV0dXJuIHdpdGhvdXQgYmxvY2tpbmcuICBUaGUgdGltZSBjaGVjayBlbnN1 cmVzIHdlCisgKiBkb24ndCBldmljdCBtb3JlIG9mdGVuIHRoYW4gRVZJQ1RJT05fSU5URVJWQUxf TVMgbWlsbGlzZWNvbmRzLgorICovCitzdGF0aWMgdm9pZAorcGdzc19tYXliZV9ldmljdCh2b2lk KQoreworCS8qCisJICogVXNlIHRoZSBzdGF0ZW1lbnQgc3RhcnQgdGltZXN0YW1wIHNpbmNlIHRo aXMgaXMgYWx3YXlzIGNhbGxlZCBmcm9tCisJICogcGdzc19zdG9yZSgpIGF0IHRoZSBzdGFydCBv ZiBxdWVyeSBleGVjdXRpb24uCisJICovCisJVGltZXN0YW1wVHogbm93ID0gR2V0Q3VycmVudFN0 YXRlbWVudFN0YXJ0VGltZXN0YW1wKCk7CisKKwlpZiAoIVRpbWVzdGFtcERpZmZlcmVuY2VFeGNl ZWRzKHBnc3MtPmxhc3RfZXZpY3Rpb25fdGltZSwgbm93LAorCQkJCQkJCQkJRVZJQ1RJT05fSU5U RVJWQUxfTVMpKQorCQlyZXR1cm47CisKKwlpZiAoIUxXTG9ja0NvbmRpdGlvbmFsQWNxdWlyZSgm cGdzcy0+bG9jay5sb2NrLCBMV19FWENMVVNJVkUpKQorCQlyZXR1cm47CisKKwkvKiBSZS1jaGVj ayBhZnRlciBhY3F1aXJpbmcgbG9jayAqLworCWlmIChUaW1lc3RhbXBEaWZmZXJlbmNlRXhjZWVk cyhwZ3NzLT5sYXN0X2V2aWN0aW9uX3RpbWUsIG5vdywKKwkJCQkJCQkJICAgRVZJQ1RJT05fSU5U RVJWQUxfTVMpKQorCXsKKwkJZW50cnlfZGVhbGxvYygpOworCQlwZ3NzLT5sYXN0X2V2aWN0aW9u X3RpbWUgPSBub3c7CisKKwkJLyogQWxzbyBoYW5kbGUgcXVlcnkgdGV4dCBHQyB3aGlsZSB3ZSBo b2xkIHRoZSBsb2NrICovCisJCWlmIChuZWVkX2djX3F0ZXh0cygpKQorCQkJZ2NfcXRleHRzKCk7 CisJfQorCisJTFdMb2NrUmVsZWFzZSgmcGdzcy0+bG9jay5sb2NrKTsKK30KKwogLyoKICAqIEdl bmVyYXRlIGEgbm9ybWFsaXplZCB2ZXJzaW9uIG9mIHRoZSBxdWVyeSBzdHJpbmcgdGhhdCB3aWxs IGJlIHVzZWQgdG8KICAqIHJlcHJlc2VudCBhbGwgc2ltaWxhciBxdWVyaWVzLgpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmNvbmYgYi9j b250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuY29uZgppbmRleCAw ZTkwMGQ3MTE5Yi4uMjFhMTBjNDFkMDkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0 ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jb25mCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0 ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jb25mCkBAIC0xLDIgKzEsMyBAQAogc2hhcmVkX3By ZWxvYWRfbGlicmFyaWVzID0gJ3BnX3N0YXRfc3RhdGVtZW50cycKIG1heF9wcmVwYXJlZF90cmFu c2FjdGlvbnMgPSA1CittYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMApkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmNvbnRy b2wgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuY29udHJv bAppbmRleCAyZWVlMGNlZmZhOC4uNjFhZTQxZWZjMTQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdf c3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jb250cm9sCisrKyBiL2NvbnRyaWIv cGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jb250cm9sCkBAIC0xLDUgKzEs NSBAQAogIyBwZ19zdGF0X3N0YXRlbWVudHMgZXh0ZW5zaW9uCiBjb21tZW50ID0gJ3RyYWNrIHBs YW5uaW5nIGFuZCBleGVjdXRpb24gc3RhdGlzdGljcyBvZiBhbGwgU1FMIHN0YXRlbWVudHMgZXhl Y3V0ZWQnCi1kZWZhdWx0X3ZlcnNpb24gPSAnMS4xMycKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjE0 JwogbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvcGdfc3RhdF9zdGF0ZW1lbnRzJwogcmVsb2Nh dGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9zcWwv cGFyYWxsZWwuc3FsIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvc3FsL3BhcmFsbGVsLnNx bAppbmRleCA0Y2UxNTczZDEzMi4uMDVhM2UyNTI0ZDUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdf c3RhdF9zdGF0ZW1lbnRzL3NxbC9wYXJhbGxlbC5zcWwKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0 YXRlbWVudHMvc3FsL3BhcmFsbGVsLnNxbApAQCAtMTYsNiArMTYsNyBAQCBTRUxFQ1QgcGdfc3Rh dF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdDsKIAogU0VMRUNUIGNvdW50KCop IEZST00gcGdzc19wYXJhbGxlbF90YWI7CiAKK1JFU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Bl cl9nYXRoZXI7CiBTRUxFQ1QgcXVlcnksCiAgIHBhcmFsbGVsX3dvcmtlcnNfdG9fbGF1bmNoID4g MCBBUyBoYXNfd29ya2Vyc190b19sYXVuY2gsCiAgIHBhcmFsbGVsX3dvcmtlcnNfbGF1bmNoZWQg PiAwIEFTIGhhc193b3JrZXJzX2xhdW5jaGVkCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcGdz dGF0c3RhdGVtZW50cy5zZ21sIGIvZG9jL3NyYy9zZ21sL3Bnc3RhdHN0YXRlbWVudHMuc2dtbApp bmRleCBkNzUzZGU1ODM2ZS4uMTliMWRhYjc0YzcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9w Z3N0YXRzdGF0ZW1lbnRzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Bnc3RhdHN0YXRlbWVudHMu c2dtbApAQCAtODA5LDcgKzgwOSw2IEBAIGNhbGxzIHwgMgogICAgICAgIDxzdHJ1Y3RuYW1lPnBn X3N0YXRfc3RhdGVtZW50czwvc3RydWN0bmFtZT4gdmlldyB3ZXJlIGxhc3QgcmVzZXQuCiAgICAg ICA8L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+Ci0KICAgICA8L3Rib2R5PgogICAgPC90Z3Jv dXA+CiAgIDwvdGFibGU+CkBAIC05MTEsMTEgKzkxMCwxNiBAQCBjYWxscyB8IDIKICAgICAgIHN0 YXRlbWVudHMgdHJhY2tlZCBieSB0aGUgbW9kdWxlIChpLmUuLCB0aGUgbWF4aW11bSBudW1iZXIg b2Ygcm93cwogICAgICAgaW4gdGhlIDxzdHJ1Y3RuYW1lPnBnX3N0YXRfc3RhdGVtZW50czwvc3Ry dWN0bmFtZT4gdmlldykuICBJZiBtb3JlIGRpc3RpbmN0CiAgICAgICBzdGF0ZW1lbnRzIHRoYW4g dGhhdCBhcmUgb2JzZXJ2ZWQsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsZWFzdC1leGVjdXRlZAot ICAgICAgc3RhdGVtZW50cyBpcyBkaXNjYXJkZWQuICBUaGUgbnVtYmVyIG9mIHRpbWVzIHN1Y2gg aW5mb3JtYXRpb24gd2FzCisgICAgICBzdGF0ZW1lbnRzIGlzIGRpc2NhcmRlZC4gIEV2aWN0aW9u IGlzIHRocm90dGxlZCB0byBvY2N1ciBhdCBtb3N0IG9uY2UKKyAgICAgIGV2ZXJ5IDEwIHNlY29u ZHM7IHVudGlsIHRoZW4sIG5ldyBlbnRyaWVzIGFyZSBzaW1wbHkgbm90IGNyZWF0ZWQgb25jZQor ICAgICAgdGhlIGxpbWl0IGlzIHJlYWNoZWQgd2hpbGUgZXhpc3RpbmcgZW50cmllcyBjb250aW51 ZSB0byBhY2N1bXVsYXRlCisgICAgICBzdGF0aXN0aWNzIG5vcm1hbGx5LgorICAgICAgVGhlIG51 bWJlciBvZiB0aW1lcyBzdWNoIGluZm9ybWF0aW9uIHdhcwogICAgICAgZGlzY2FyZGVkIGNhbiBi ZSBzZWVuIGluIHRoZQogICAgICAgPHN0cnVjdG5hbWU+cGdfc3RhdF9zdGF0ZW1lbnRzX2luZm88 L3N0cnVjdG5hbWU+IHZpZXcuCiAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1MDAwLgotICAg ICAgVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUgc2V0IGF0IHNlcnZlciBzdGFydC4KKyAgICAg IFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGJ5IHJlbG9hZGluZyB0 aGUgc2VydmVyCisgICAgICBjb25maWd1cmF0aW9uLgogICAgICA8L3BhcmE+CiAgICAgPC9saXN0 aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgpAQCAtMTAwOCwxMyArMTAxMiwxNSBAQCBjYWxscyB8 IDIKIAogICA8cGFyYT4KICAgIFRoZSBtb2R1bGUgcmVxdWlyZXMgYWRkaXRpb25hbCBzaGFyZWQg bWVtb3J5IHByb3BvcnRpb25hbCB0bwotICAgPHZhcm5hbWU+cGdfc3RhdF9zdGF0ZW1lbnRzLm1h eDwvdmFybmFtZT4uICBOb3RlIHRoYXQgdGhpcwotICAgbWVtb3J5IGlzIGNvbnN1bWVkIHdoZW5l dmVyIHRoZSBtb2R1bGUgaXMgbG9hZGVkLCBldmVuIGlmCisgICA8dmFybmFtZT5wZ19zdGF0X3N0 YXRlbWVudHMubWF4PC92YXJuYW1lPi4gIE5vdGUgdGhhdCB0aGlzIG1lbW9yeSBpcworICAgY29u c3VtZWQgd2hlbmV2ZXIgdGhlIG1vZHVsZSBpcyBsb2FkZWQsIGV2ZW4gaWYKICAgIDx2YXJuYW1l PnBnX3N0YXRfc3RhdGVtZW50cy50cmFjazwvdmFybmFtZT4gaXMgc2V0IHRvIDxsaXRlcmFsPm5v bmU8L2xpdGVyYWw+LgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGVzZSBwYXJhbWV0ZXJz IG11c3QgYmUgc2V0IGluIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPi4KKyAg IFRoZXNlIHBhcmFtZXRlcnMgYXJlIHR5cGljYWxseSBzZXQgaW4gPGZpbGVuYW1lPnBvc3RncmVz cWwuY29uZjwvZmlsZW5hbWU+LgorICAgTm90ZSB0aGF0IDx2YXJuYW1lPnBnX3N0YXRfc3RhdGVt ZW50cy5tYXg8L3Zhcm5hbWU+IGNhbiBiZSBjaGFuZ2VkCisgICB3aXRob3V0IGEgc2VydmVyIHJl c3RhcnQgYnkgcmVsb2FkaW5nIHRoZSBjb25maWd1cmF0aW9uLgogICAgVHlwaWNhbCB1c2FnZSBt aWdodCBiZToKIAogPHByb2dyYW1saXN0aW5nPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRl eCA4Y2Y0MGM4NzA0My4uNjIzNTFhYjA5Y2QgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBA IC0yMzIyLDYgKzIzMjIsNyBAQCBQZ1N0YXRTaGFyZWRfRnVuY3Rpb24KIFBnU3RhdFNoYXJlZF9I YXNoRW50cnkKIFBnU3RhdFNoYXJlZF9JTwogUGdTdGF0U2hhcmVkX0xvY2sKK1BnU3RhdFNoYXJl ZF9QZ3NzCiBQZ1N0YXRTaGFyZWRfUmVsYXRpb24KIFBnU3RhdFNoYXJlZF9SZXBsU2xvdAogUGdT dGF0U2hhcmVkX1NMUlUKLS0gCjIuNTAuMSAoQXBwbGUgR2l0LTE1NSkKCg== --000000000000d7d16a065247bff4--