Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tOUYT-006enk-CS for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Dec 2024 04:24:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tOUYR-004pko-83 for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Dec 2024 04:23:58 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tOUYQ-004pkf-Ag for pgsql-hackers@lists.postgresql.org; Fri, 20 Dec 2024 04:23:58 +0000 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1tOUYM-000UWm-OS for pgsql-hackers@postgresql.org; Fri, 20 Dec 2024 04:23:56 +0000 Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-7273967f2f0so1826439b3a.1 for ; Thu, 19 Dec 2024 20:23:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734668633; x=1735273433; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=oaLcTuU++iAaPRsLlfoFx+o1zPNGM+h/1yD3gGZtHOs=; b=Ivz9LJpGeFlIpXQAATKcxPEu4eEXsLfwo4s9oTGt3GADmcgfSgyz/RIMRz3xhDBhTx IszrVu6/1Qoybxjckm4r9YMXLf167rhh/A/EV04OUlxFdMeYx2DOCdr3HyIkBbrc/Dt5 V7d7SCDYwPhuPKga+U4Dd6CeS2Kx7ptuRhwr0NR7l8isSbkueqTlNcLreXGXbplj6c72 vAayGXQT96Us/CG6X/NPOjLcD5tMxvqJXyG1q/gcRu9/2jHFLrQXYfVklOWR0R2YE/9W 1zfpcq44SeHEjgih/21ahrDb8IUugr3V5ssSO90fV3XI20S9jEyzzxcV68xSEwU3rOkI 1k8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734668633; x=1735273433; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=oaLcTuU++iAaPRsLlfoFx+o1zPNGM+h/1yD3gGZtHOs=; b=gU3faabMnCrBWC1Kd6Kp94jNt2pnVyOn1M5LFxQrKyiaStHAZGdJcN6IFHY9uppODs T7wn6Lwst0SeCl8UXKGvMtzSPOnq6Hy6dt5ghZ4ptnmEuhlVDjNKH8+Ad5O+sIX93KTJ yduTu2bWbo2eHVyJTz8WyM1kC6IJJmtanO8srH7qPM3lGiimBQdEaNc+9Wnw54evbU+2 WS42cYbN3aIGpxcLzySl3ZK/sSe52cwkuvuyB9fbgcabU3A/PDVnuYP1hgdmayErGFMo mw0hov942B/3p+v7Vbbi4FGzE/Q2ETK0wtHnTMRBGIf0n1nr+1hLzTWW52Pp/e+K/I2q UilA== X-Gm-Message-State: AOJu0YwK4xGLZmCTT3dzvlRJomkvwLYL2SuSqCl95a0Mi9s5mSlTA14/ FLsek45Bp2gIMjmytufTVrVQ95p1L8Ypmw3vDEyHiMGC6sb8YSQ708knzJv//v5tlmvSMA8U5CC R6UOfeiifYV8B4H3klGZrulG3vq+BTDKt X-Gm-Gg: ASbGncux6zx7KpCaLNaoylZYJ6OaxZtG38PNLMkMKXPH2ERizd0WZWJkzYexwyOgNJI 1GLu2vVTIXx7MeolfMy5i58gYDPEgRufpuCbhvj0YQc+JnFTD1QjfFLEJjWbBJgeqCS7N2Q== X-Google-Smtp-Source: AGHT+IHwW5QHnvflN0aodAPf/7EB4FnSMvQA0eI+/su4LlgJNz4nieaJakoMs6KXZ/MUTOf0Pu4o6BkOAORjjf9oRqc= X-Received: by 2002:a05:6a00:4486:b0:725:e015:908d with SMTP id d2e1a72fcca58-72abdd4f29cmr1825625b3a.1.1734668633068; Thu, 19 Dec 2024 20:23:53 -0800 (PST) MIME-Version: 1.0 From: Amit Langote Date: Fri, 20 Dec 2024 13:23:35 +0900 Message-ID: Subject: Eliminating SPI / SQL from some RI triggers - take 3 To: PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000ad76fd0629ac03b6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ad76fd0629ac03b6 Content-Type: text/plain; charset="UTF-8" Hi, We discussed $subject at [1] and [2] and I'd like to continue that work with the hope to commit some part of it for v18. In short, performing the RI checks for inserts and updates of a referencing table as direct scans of the PK index results in up to 40% improvement in their performance, especially when they are done in a bulk manner as shown in the following example: create unlogged table pk (a int primary key); insert into pk select generate_series(1, 10000000); insert into fk select generate_series(1, 10000000); On my machine, the last query took 20 seconds with master, whereas 12 seconds with the patches. With master, a significant portion of the time can be seen spent in ExecutorStart() and ExecutorEnd() on the plan for the RI query, which adds up as it's done for each row in a bulk load. Patch avoids that overhead because it calls the index AM directly. The patches haven't changed in the basic design since the last update at [2], though there are few changes: 1. I noticed a few additions to the RI trigger functions the patch touches, such as those to support temporal foreign keys. I decided to leave the SQL for temporal queries in place as the plan for those doesn't look, on a glance, as simple as a simple index scan. 2. As I mentioned in [3], the new way of doing the PK lookup didn't have a way to recheck the PK tuple after detecting concurrent updates of the PK, so would cause an error under READ COMMITTED isolation level. The old way of executing an SQL plan would deal with that using the EvalPlanQual() mechanism in the executor. In the updated patch, I've added an equivalent rechecking function that's called in the same situations as EvalPlanQual() would get called in the old method. 3. I reordered the patches as Robert suggested at [5]. Mainly because the patch set includes changes to address a bug where PK lookups could return incorrect results under the REPEATABLE READ isolation level. This issue arises because RI lookups on partitioned PK tables manipulate ActiveSnapshot to pass the snapshot that's used by find_inheritance_children() to determine the visibility of detach-pending partitions to these RI lookups. To address this, the patch set introduces refactoring of the PartitionDesc interface, included in patch 0001. This refactoring eliminates the need to manipulate ActiveSnapshot by explicitly passing the correct snapshot for detach-pending visibility handling. The main patch (0002+0003), which focuses on improving performance by avoiding SQL queries for RI checks, builds upon these refactoring changes to pass the snapshot directly instead of manipulating the ActiveSnapshot. Reordering the patches this way ensures a logical progression of changes, as Robert suggested, while avoiding any impression that the bug was introduced by the ri_triggers.c changes. However, I need to spend some time addressing Robert's feedback on the basic design, as outlined at [5]. Specifically, the new PK lookup function could benefit significantly from caching information rather than recomputing it for each row. This implies that the PlanCreate function should create a struct to store reusable information across PlanExecute calls for different rows being checked. Beyond implementing these changes, I also need to confirm that the new plan execution preserves all operations performed by the SQL plan for the same checks, particularly those affecting user-visible behavior. I've already verified that permission checks are preserved: revoking access to the PK table during the checks causes them to fail, as expected. This behavior is maintained because permission checks are performed during each execution. The planned changes to separate the "plan" and "execute" steps should continue to uphold this and other behaviors that might need to be preserved. -- Thanks, Amit Langote [1] Simplifying foreign key/RI checks: https://www.postgresql.org/message-id/flat/CA%2BHiwqG5e8pk8s7%2B7zhr1Nc_PGyhEdM5f%3DpHkMOdK1RYWXfJsg%40mail.gmail.com [2] Eliminating SPI from RI triggers - take 2 https://www.postgresql.org/message-id/flat/CA%2BHiwqG5e8pk8s7%2B7zhr1Nc_PGyhEdM5f%3DpHkMOdK1RYWXfJsg%40mail.gmail.com [3] https://www.postgresql.org/message-id/CA+TgmoaiTNj4DgQy42OT9JmTTP1NWcMV+ke0i=+a7=VgnzqGXw@mail.gmail.com [4] https://www.postgresql.org/message-id/CA%2BTgmoa1DCQ0MdojD9o6Ppbfj%3DabXxe4FUkwA4O_6qBHwOMVjw%40mail.gmail.com [5] https://www.postgresql.org/message-id/CA+TgmoaiTNj4DgQy42OT9JmTTP1NWcMV+ke0i=+a7=VgnzqGXw@mail.gmail.com --000000000000ad76fd0629ac03b6 Content-Type: application/x-patch; name="v1-0003-Avoid-using-an-SQL-query-for-some-RI-checks.patch" Content-Disposition: attachment; filename="v1-0003-Avoid-using-an-SQL-query-for-some-RI-checks.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m4vc3t4b2 RnJvbSA2YTJkNjA2YWJmM2ZhMTdjOTRmYTlmYWNiZjgyZjlmZGFiODEzNWU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTkgRGVjIDIwMjQgMjE6NTI6MzIgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx IDMvM10gQXZvaWQgdXNpbmcgYW4gU1FMIHF1ZXJ5IGZvciBzb21lIFJJIGNoZWNrcwoKRm9yIFJJ IHRyaWdnZXJzIHRoYXQgY2hlY2sgd2hldGhlciBhIHJlZmVyZW5jZWQgdmFsdWUgZXhpc3RzIGlu IHRoZQpyZWZlcmVuY2VkIHJlbGF0aW9uLCBpdCBpcyBzdWZmaWNpZW50IHRvIHNjYW4gdGhlIGZv cmVpZ24ga2V5CmNvbnN0cmFpbnQncyB1bmlxdWUgaW5kZXggZGlyZWN0bHksIGluc3RlYWQgb2Yg aXNzdWluZyBhbiBTUUwgcXVlcnkuClRoaXMgb3B0aW1pemF0aW9uIGltcHJvdmVzIHRoZSBwZXJm b3JtYW5jZSBvZiB0aGVzZSBjaGVja3MgYnkgbmVhcmx5CjQwJSwgZXNwZWNpYWxseSBmb3IgYnVs ayBpbnNlcnRzLgoKVGhpcyBjb21taXQgYnVpbGRzIG9uIHRoZSBSSVBsYW4gaW5mcmFzdHJ1Y3R1 cmUgaW50cm9kdWNlZCBpbiB0aGUKcHJldmlvdXMgY29tbWl0LiBJdCByZXBsYWNlcyByaV9TcWxT dHJpbmdQbGFuQ3JlYXRlKCkgaW4KUklfRktleV9jaGVjaygpIGFuZCByaV9DaGVja19Qa19NYXRj aCgpIHdpdGgKcmlfTG9va3VwS2V5SW5Qa1JlbFBsYW5DcmVhdGUoKSwgd2hpY2ggaW5zdGFsbHMK cmlfTG9va3VwS2V5SW5Qa1JlbCgpIGFzIHRoZSBwbGFuIHRvIGltcGxlbWVudCB0aGVzZSBjaGVj a3MuCnJpX0xvb2t1cEtleUluUGtSZWwoKSBjb250YWlucyBsb2dpYyB0byBkaXJlY3RseSBzY2Fu IHRoZSB1bmlxdWUga2V5CmluZGV4IGFzc29jaWF0ZWQgd2l0aCB0aGUgZm9yZWlnbiBrZXkgY29u c3RyYWludC4KCkFkZGl0aW9uYWxseSwgcmlfTG9va3VwS2V5SW5Qa1JlbCgpIGV4cGxpY2l0bHkg cGFzc2VzIExhdGVzdFNuYXBzaG90CmFzIG9taXRfZGV0YWNoZWRfc25hcHNob3QgdG8gQ3JlYXRl UGFydGl0aW9uRGlyZWN0b3J5KCksIGF2b2lkaW5nCnRoZSByZWxpYW5jZSBvbiBzZXR0aW5nIEFj dGl2ZVNuYXBzaG90LiBUaGUgcHJldmlvdXMgYXBwcm9hY2ggY2F1c2VkCnByaW1hcnkga2V5IGxv b2t1cHMgb24gcGFydGl0aW9uZWQgdGFibGVzIHRvIHJldHVybiBpbmNvcnJlY3QgcmVzdWx0cwp1 bmRlciBSRVBFQVRBQkxFIFJFQUQgaXNvbGF0aW9uIGxldmVsLCBhcyBkZW1vbnN0cmF0ZWQgYnkg YSB0ZXN0IGNhc2UKYWRkZWQgaW4gY29tbWl0IDAwY2I4NmU3NWQuIFRoaXMgaXNzdWUgaGFzIG5v dyBiZWVuIGZpeGVkLCBhbmQgdGhlCmJ1Z2d5IG91dHB1dCBpbiBzcmMvdGVzdC9pc29sYXRpb24v ZXhwZWN0ZWQvZmstc25hcHNob3Qub3V0IGhhcyBiZWVuCnVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUg Y29ycmVjdCBiZWhhdmlvci4KCkxhc3RseSwgdGhpcyBjb21taXQgaW50cm9kdWNlcyBhbiBpc29s YXRpb24gdGVzdCBzdWl0ZSB0byB2ZXJpZnkKZm9yZWlnbiBrZXkgaW5zZXJ0aW9ucyB1bmRlciBj b25jdXJyZW50IHVwZGF0ZXMgdG8gcmVmZXJlbmNlZCB2YWx1ZXMuCgpSZXZpZXdlZC1ieTogUm9i ZXJ0IEhhYXMKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQStIaXdxR2tmSmZZZGVx NXZIUGg2ZXFQS2pTYmZwRERZK2ota1hZRmVQUWVkdFNMZWdAbWFpbC5nbWFpbC5jb20KRGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQStIaXdxRzVlOHBrOHM3Kzd6aHIxTmNfUEd5aEVk TTVmPXBIa01PZEsxUllXWGZKc2dAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9leGVj dXRvci9leGVjUGFydGl0aW9uLmMgICAgICAgICAgfCAxNjcgKysrKy0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVMb2NrUm93cy5jICAgICAgICAgICB8IDE2MyArKystLQogc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMgICAgICAgICAgIHwgNjY4ICsrKysrKysrKysrKysrLS0t LQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oICAgICAgICAgIHwgICA3ICsK IHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggICAgICAgICAgICAgICB8ICAgOSArCiAu Li4vZXhwZWN0ZWQvZmstY29uY3VycmVudC1way11cGQub3V0ICAgICAgICAgfCAgNTggKysKIHNy Yy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9may1zbmFwc2hvdC5vdXQgICB8ICAgNCArLQogc3Jj L3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9zY2hlZHVsZSAgICAgICAgIHwgICAxICsKIC4uLi9p c29sYXRpb24vc3BlY3MvZmstY29uY3VycmVudC1way11cGQuc3BlYyB8ICA0MiArKwogc3JjL3Rl c3QvaXNvbGF0aW9uL3NwZWNzL2ZrLXNuYXBzaG90LnNwZWMgICAgIHwgICA1ICstCiAxMCBmaWxl cyBjaGFuZ2VkLCA5MTggaW5zZXJ0aW9ucygrKSwgMjA2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9may1jb25jdXJyZW50LXBrLXVw ZC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvZmstY29u Y3VycmVudC1way11cGQuc3BlYwoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNQYXJ0aXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYwppbmRl eCBkMjZjZjIwMDAzLi4zNDk0MDg5YjhlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjUGFydGl0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlv bi5jCkBAIC0xNzQsOCArMTc0LDkgQEAgc3RhdGljIHZvaWQgRm9ybVBhcnRpdGlvbktleURhdHVt KFBhcnRpdGlvbkRpc3BhdGNoIHBkLAogCQkJCQkJCQkgIEVTdGF0ZSAqZXN0YXRlLAogCQkJCQkJ CQkgIERhdHVtICp2YWx1ZXMsCiAJCQkJCQkJCSAgYm9vbCAqaXNudWxsKTsKLXN0YXRpYyBpbnQJ Z2V0X3BhcnRpdGlvbl9mb3JfdHVwbGUoUGFydGl0aW9uRGlzcGF0Y2ggcGQsIERhdHVtICp2YWx1 ZXMsCi0JCQkJCQkJCQlib29sICppc251bGwpOworc3RhdGljIGludCBnZXRfcGFydGl0aW9uX2Zv cl90dXBsZShQYXJ0aXRpb25LZXkga2V5LAorCQkJCQkJUGFydGl0aW9uRGVzYyBwYXJ0ZGVzYywK KwkJCQkJCURhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCk7CiBzdGF0aWMgY2hhciAqRXhlY0J1 aWxkU2xvdFBhcnRpdGlvbktleURlc2NyaXB0aW9uKFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJCQkJ CSAgRGF0dW0gKnZhbHVlcywKIAkJCQkJCQkJCQkJCSAgYm9vbCAqaXNudWxsLApAQCAtMzE2LDcg KzMxNyw5IEBAIEV4ZWNGaW5kUGFydGl0aW9uKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsCiAJ CSAqIHRoZXNlIHZhbHVlcywgZXJyb3Igb3V0LgogCQkgKi8KIAkJaWYgKHBhcnRkZXNjLT5ucGFy dHMgPT0gMCB8fAotCQkJKHBhcnRpZHggPSBnZXRfcGFydGl0aW9uX2Zvcl90dXBsZShkaXNwYXRj aCwgdmFsdWVzLCBpc251bGwpKSA8IDApCisJCQkocGFydGlkeCA9IGdldF9wYXJ0aXRpb25fZm9y X3R1cGxlKGRpc3BhdGNoLT5rZXksCisJCQkJCQkJCQkJCSAgIGRpc3BhdGNoLT5wYXJ0ZGVzYywK KwkJCQkJCQkJCQkJICAgdmFsdWVzLCBpc251bGwpKSA8IDApCiAJCXsKIAkJCWNoYXIJICAgKnZh bF9kZXNjOwogCkBAIC0xMzk0LDEyICsxMzk3LDEyIEBAIEZvcm1QYXJ0aXRpb25LZXlEYXR1bShQ YXJ0aXRpb25EaXNwYXRjaCBwZCwKICAqIGZvdW5kIG9yIC0xIGlmIG5vbmUgZm91bmQuCiAgKi8K IHN0YXRpYyBpbnQKLWdldF9wYXJ0aXRpb25fZm9yX3R1cGxlKFBhcnRpdGlvbkRpc3BhdGNoIHBk LCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwpCitnZXRfcGFydGl0aW9uX2Zvcl90dXBsZShQ YXJ0aXRpb25LZXkga2V5LAorCQkJCQkJUGFydGl0aW9uRGVzYyBwYXJ0ZGVzYywKKwkJCQkJCURh dHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCkKIHsKIAlpbnQJCQlib3VuZF9vZmZzZXQgPSAtMTsK IAlpbnQJCQlwYXJ0X2luZGV4ID0gLTE7Ci0JUGFydGl0aW9uS2V5IGtleSA9IHBkLT5rZXk7Ci0J UGFydGl0aW9uRGVzYyBwYXJ0ZGVzYyA9IHBkLT5wYXJ0ZGVzYzsKIAlQYXJ0aXRpb25Cb3VuZElu Zm8gYm91bmRpbmZvID0gcGFydGRlc2MtPmJvdW5kaW5mbzsKIAogCS8qCkBAIC0xNjA2LDYgKzE2 MDksMTU4IEBAIGdldF9wYXJ0aXRpb25fZm9yX3R1cGxlKFBhcnRpdGlvbkRpc3BhdGNoIHBkLCBE YXR1bSAqdmFsdWVzLCBib29sICppc251bGwpCiAJcmV0dXJuIHBhcnRfaW5kZXg7CiB9CiAKKy8q CisgKiBFeGVjR2V0TGVhZlBhcnRpdGlvbkZvcktleQorICoJCUZpbmRzIHRoZSBsZWFmIHBhcnRp dGlvbiBvZiBhIHBhcnRpdGlvbmVkIHRhYmxlICdyb290X3JlbCcgdGhhdCBtaWdodAorICoJCWNv bnRhaW4gdGhlIHNwZWNpZmllZCBwcmltYXJ5IGtleSB0dXBsZSBjb250YWluaW5nIGEgc3Vic2V0 IG9mIHRoZQorICoJCXRhYmxlJ3MgY29sdW1ucyAoaW5jbHVkaW5nIGFsbCBvZiB0aGUgcGFydGl0 aW9uIGtleSBjb2x1bW5zKQorICoKKyAqICdrZXlfbmF0dHMnIHNwZWNpZmllcyB0aGUgbnVtYmVy IGNvbHVtbnMgY29udGFpbmVkIGluIHRoZSBrZXksCisgKiAna2V5X2F0dG51bXMnIHRoZWlyIGF0 dHJpYnV0ZSBudW1iZXJzIGFzIGRlZmluZWQgaW4gJ3Jvb3RfcmVsJywgYW5kCisgKiAna2V5X3Zh bHMnIGFuZCAna2V5X251bGxzJyBzcGVjaWZ5IHRoZSBrZXkgdHVwbGUuCisgKgorICogUGFydGl0 aW9uIGRlc2NyaXB0b3JzIGZvciB0dXBsZSByb3V0aW5nIGFyZSBvYnRhaW5lZCBieSByZWZlcnJp bmcgdG8gdGhlCisgKiBjYWxsZXItc3BlY2lmaWVkIHBhcnRpdGlvbiBkaXJlY3RvcnkuCisgKgor ICogQW55IGludGVybWVkaWF0ZSBwYXJlbnQgdGFibGVzIGVuY291bnRlcmVkIG9uIHRoZSB3YXkg dG8gZmluZGluZyB0aGUgbGVhZgorICogcGFydGl0aW9uIGFyZSBsb2NrZWQgdXNpbmcgJ2xvY2tt b2RlJyB3aGVuIG9wZW5pbmcuCisgKgorICogUmV0dXJucyBOVUxMIGlmIG5vIGxlYWYgcGFydGl0 aW9uIGlzIGZvdW5kIGZvciB0aGUga2V5LgorICoKKyAqIFRoaXMgYWxzbyBmaW5kcyB0aGUgaW5k ZXggaW4gdGh1cyBmb3VuZCBsZWFmIHBhcnRpdGlvbiB0aGF0IGlzIHJlY29yZGVkIGFzCisgKiBk ZXNjZW5kaW5nIGZyb20gJ3Jvb3RfaWR4b2lkJyBhbmQgcmV0dXJucyBpdCBpbiAnKmxlYWZfaWR4 b2lkJy4KKyAqCisgKiBDYWxsZXIgbXVzdCBjbG9zZSB0aGUgcmV0dXJuZWQgcmVsYXRpb24sIGlm IGFueS4KKyAqCisgKiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIHVuaXF1ZSBrZXkgZGVmaW5lZCBv biB0aGUgcm9vdCByZWxhdGlvbiBpcyByZXF1aXJlZAorICogdG8gY29udGFpbiB0aGUgcGFydGl0 aW9uIGtleSBjb2x1bW5zIG9mIGFsbCBvZiB0aGUgYW5jZXN0b3JzIHRoYXQgbGVhZCB1cCB0bwor ICogYSBnaXZlbiBsZWFmIHBhcnRpdGlvbi4KKyAqLworUmVsYXRpb24KK0V4ZWNHZXRMZWFmUGFy dGl0aW9uRm9yS2V5KFBhcnRpdGlvbkRpcmVjdG9yeSBwYXJ0ZGlyLAorCQkJCQkJICAgUmVsYXRp b24gcm9vdF9yZWwsIGludCBrZXlfbmF0dHMsCisJCQkJCQkgICBjb25zdCBBdHRyTnVtYmVyICpr ZXlfYXR0bnVtcywKKwkJCQkJCSAgIERhdHVtICprZXlfdmFscywgYm9vbCAqa2V5X251bGxzLAor CQkJCQkJICAgT2lkIHJvb3RfaWR4b2lkLCBpbnQgbG9ja21vZGUsCisJCQkJCQkgICBPaWQgKmxl YWZfaWR4b2lkKQoreworCVJlbGF0aW9uCXJlbCA9IHJvb3RfcmVsOworCU9pZAkJCWNvbnN0cl9p ZHhvaWQgPSByb290X2lkeG9pZDsKKworCSpsZWFmX2lkeG9pZCA9IEludmFsaWRPaWQ7CisKKwkv KgorCSAqIERlc2NlbmQgdGhyb3VnaCBwYXJ0aXRpb25lZCBwYXJlbnRzIHRvIGZpbmQgdGhlIGxl YWYgcGFydGl0aW9uIHRoYXQKKwkgKiB3b3VsZCBhY2NlcHQgYSByb3cgd2l0aCB0aGUgcHJvdmlk ZWQga2V5IHZhbHVlcywgc3RhcnRpbmcgd2l0aCB0aGUgcm9vdAorCSAqIHBhcmVudC4KKwkgKi8K Kwl3aGlsZSAodHJ1ZSkKKwl7CisJCVBhcnRpdGlvbktleSBwYXJ0a2V5ID0gUmVsYXRpb25HZXRQ YXJ0aXRpb25LZXkocmVsKTsKKwkJUGFydGl0aW9uRGVzYyBwYXJ0ZGVzYzsKKwkJRGF0dW0JcGFy dGtleV92YWxzW1BBUlRJVElPTl9NQVhfS0VZU107CisJCWJvb2wJcGFydGtleV9pc251bGxbUEFS VElUSU9OX01BWF9LRVlTXTsKKwkJQXR0ck51bWJlciAqcm9vdF9wYXJ0YXR0cnMgPSBwYXJ0a2V5 LT5wYXJ0YXR0cnM7CisJCWludAkJaSwKKwkJCQlqOworCQlpbnQJCXBhcnRpZHg7CisJCU9pZAkJ cGFydG9pZDsKKwkJYm9vbAlpc19sZWFmOworCisJCS8qCisJCSAqIENvbGxlY3QgcGFydGl0aW9u IGtleSB2YWx1ZXMgZnJvbSB0aGUgdW5pcXVlIGtleS4KKwkJICoKKwkJICogQmVjYXVzZSB3ZSBv bmx5IGhhdmUgdGhlIHJvb3QgdGFibGUncyBjb3B5IG9mIHBrX2F0dG51bXMsIG11c3QgbWFwCisJ CSAqIGFueSBub24tcm9vdCB0YWJsZSdzIHBhcnRpdGlvbiBrZXkgYXR0cmlidXRlIG51bWJlcnMg dG8gdGhlIHJvb3QKKwkJICogdGFibGUncy4KKwkJICovCisJCWlmIChyZWwgIT0gcm9vdF9yZWwp CisJCXsKKwkJCS8qCisJCQkgKiBtYXAtPmF0dG51bXMgd2lsbCBjb250YWluIHJvb3QgdGFibGUg YXR0cmlidXRlIG51bWJlcnMgZm9yIGVhY2gKKwkJCSAqIGF0dHJpYnV0ZSBvZiB0aGUgY3VycmVu dCBwYXJ0aXRpb25lZCByZWxhdGlvbi4KKwkJCSAqLworCQkJQXR0ck1hcCAqbWFwID0gYnVpbGRf YXR0cm1hcF9ieV9uYW1lX2lmX3JlcShSZWxhdGlvbkdldERlc2NyKHJvb3RfcmVsKSwKKwkJCQkJ CQkJCQkJCQkJUmVsYXRpb25HZXREZXNjcihyZWwpLAorCQkJCQkJCQkJCQkJCQlmYWxzZSk7CisK KwkJCWlmIChtYXApCisJCQl7CisJCQkJcm9vdF9wYXJ0YXR0cnMgPSBwYWxsb2MocGFydGtleS0+ cGFydG5hdHRzICoKKwkJCQkJCQkJCQlzaXplb2YoQXR0ck51bWJlcikpOworCQkJCWZvciAoaSA9 IDA7IGkgPCBwYXJ0a2V5LT5wYXJ0bmF0dHM7IGkrKykKKwkJCQl7CisJCQkJCUF0dHJOdW1iZXIJ cGFydGF0dG5vID0gcGFydGtleS0+cGFydGF0dHJzW2ldOworCisJCQkJCXJvb3RfcGFydGF0dHJz W2ldID0gbWFwLT5hdHRudW1zW3BhcnRhdHRubyAtIDFdOworCQkJCX0KKworCQkJCWZyZWVfYXR0 cm1hcChtYXApOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogUmVmZXJlbmNlZCBrZXkgc3BlY2lm aWNhdGlvbiBkb2VzIG5vdCBhbGxvdyBleHByZXNzaW9ucywgc28gdGhlcmUKKwkJICogd291bGQg bm90IGJlIGV4cHJlc3Npb25zIGluIHRoZSBwYXJ0aXRpb24ga2V5cyBlaXRoZXIuCisJCSAqLwor CQlBc3NlcnQocGFydGtleS0+cGFydGV4cHJzID09IE5JTCk7CisJCWZvciAoaSA9IDAsIGogPSAw OyBpIDwgcGFydGtleS0+cGFydG5hdHRzOyBpKyspCisJCXsKKwkJCWludAkJazsKKworCQkJZm9y IChrID0gMDsgayA8IGtleV9uYXR0czsgaysrKQorCQkJeworCQkJCWlmIChyb290X3BhcnRhdHRy c1tpXSA9PSBrZXlfYXR0bnVtc1trXSkKKwkJCQl7CisJCQkJCXBhcnRrZXlfdmFsc1tqXSA9IGtl eV92YWxzW2tdOworCQkJCQlwYXJ0a2V5X2lzbnVsbFtqXSA9IGtleV9udWxsc1trXTsKKwkJCQkJ aisrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJLyogSGFkIGJldHRlciBoYXZl IGZvdW5kIHZhbHVlcyBmb3IgYWxsIG9mIHRoZSBwYXJ0aXRpb24ga2V5cy4gKi8KKwkJQXNzZXJ0 KGogPT0gcGFydGtleS0+cGFydG5hdHRzKTsKKworCQlpZiAocm9vdF9wYXJ0YXR0cnMgIT0gcGFy dGtleS0+cGFydGF0dHJzKQorCQkJcGZyZWUocm9vdF9wYXJ0YXR0cnMpOworCisJCS8qIEdldCB0 aGUgUGFydGl0aW9uRGVzYyB1c2luZyB0aGUgcGFydGl0aW9uIGRpcmVjdG9yeSBtYWNoaW5lcnku ICAqLworCQlwYXJ0ZGVzYyA9IFBhcnRpdGlvbkRpcmVjdG9yeUxvb2t1cChwYXJ0ZGlyLCByZWwp OworCisJCS8qIEZpbmQgdGhlIHBhcnRpdGlvbiBmb3IgdGhlIGtleS4gKi8KKwkJcGFydGlkeCA9 IGdldF9wYXJ0aXRpb25fZm9yX3R1cGxlKHBhcnRrZXksIHBhcnRkZXNjLCBwYXJ0a2V5X3ZhbHMs CisJCQkJCQkJCQkJICBwYXJ0a2V5X2lzbnVsbCk7CisJCUFzc2VydChwYXJ0aWR4IDwgMCB8fCBw YXJ0aWR4IDwgcGFydGRlc2MtPm5wYXJ0cyk7CisKKwkJLyogQ2xvc2UgYW55IGludGVybWVkaWF0 ZSBwYXJlbnRzIHdlIG9wZW5lZCwgYnV0IGtlZXAgdGhlIGxvY2suICovCisJCWlmIChyZWwgIT0g cm9vdF9yZWwpCisJCQl0YWJsZV9jbG9zZShyZWwsIE5vTG9jayk7CisKKwkJLyogTm8gcGFydGl0 aW9uIGZvdW5kLiAqLworCQlpZiAocGFydGlkeCA8IDApCisJCQlyZXR1cm4gTlVMTDsKKworCQlw YXJ0b2lkID0gcGFydGRlc2MtPm9pZHNbcGFydGlkeF07CisJCXJlbCA9IHRhYmxlX29wZW4ocGFy dG9pZCwgbG9ja21vZGUpOworCQljb25zdHJfaWR4b2lkID0gaW5kZXhfZ2V0X3BhcnRpdGlvbihy ZWwsIGNvbnN0cl9pZHhvaWQpOworCisJCS8qCisJCSAqIFJldHVybiBpZiB0aGUgcGFydGl0aW9u IGlzIGEgbGVhZiwgZWxzZSBmaW5kIGl0cyBwYXJ0aXRpb24gaW4gdGhlCisJCSAqIG5leHQgaXRl cmF0aW9uLgorCQkgKi8KKwkJaXNfbGVhZiA9IHBhcnRkZXNjLT5pc19sZWFmW3BhcnRpZHhdOwor CQlpZiAoaXNfbGVhZikKKwkJeworCQkJKmxlYWZfaWR4b2lkID0gY29uc3RyX2lkeG9pZDsKKwkJ CXJldHVybiByZWw7CisJCX0KKwl9CisKKwlBc3NlcnQoZmFsc2UpOworCXJldHVybiBOVUxMOwor fQorCiAvKgogICogRXhlY0J1aWxkU2xvdFBhcnRpdGlvbktleURlc2NyaXB0aW9uCiAgKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUxvY2tSb3dzLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlTG9ja1Jvd3MuYwppbmRleCA0MTc1NGRkZmVhLi5mYjNlYmNkMzA5IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTG9ja1Jvd3MuYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlTG9ja1Jvd3MuYwpAQCAtNzksMTAgKzc5LDcgQEAgbG5leHQ6 CiAJCURhdHVtCQlkYXR1bTsKIAkJYm9vbAkJaXNOdWxsOwogCQlJdGVtUG9pbnRlckRhdGEgdGlk OwotCQlUTV9GYWlsdXJlRGF0YSB0bWZkOwogCQlMb2NrVHVwbGVNb2RlIGxvY2ttb2RlOwotCQlp bnQJCQlsb2NrZmxhZ3MgPSAwOwotCQlUTV9SZXN1bHQJdGVzdDsKIAkJVHVwbGVUYWJsZVNsb3Qg Km1hcmtTbG90OwogCiAJCS8qIGNsZWFyIGFueSBsZWZ0b3ZlciB0ZXN0IHR1cGxlIGZvciB0aGlz IHJlbCAqLwpAQCAtMTc4LDc0ICsxNzUsMTEgQEAgbG5leHQ6CiAJCQkJYnJlYWs7CiAJCX0KIAot CQlsb2NrZmxhZ3MgPSBUVVBMRV9MT0NLX0ZMQUdfTE9DS19VUERBVEVfSU5fUFJPR1JFU1M7Ci0J CWlmICghSXNvbGF0aW9uVXNlc1hhY3RTbmFwc2hvdCgpKQotCQkJbG9ja2ZsYWdzIHw9IFRVUExF X0xPQ0tfRkxBR19GSU5EX0xBU1RfVkVSU0lPTjsKLQotCQl0ZXN0ID0gdGFibGVfdHVwbGVfbG9j ayhlcm0tPnJlbGF0aW9uLCAmdGlkLCBlc3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQltYXJr U2xvdCwgZXN0YXRlLT5lc19vdXRwdXRfY2lkLAotCQkJCQkJCQlsb2NrbW9kZSwgZXJtLT53YWl0 UG9saWN5LAotCQkJCQkJCQlsb2NrZmxhZ3MsCi0JCQkJCQkJCSZ0bWZkKTsKLQotCQlzd2l0Y2gg KHRlc3QpCi0JCXsKLQkJCWNhc2UgVE1fV291bGRCbG9jazoKLQkJCQkvKiBjb3VsZG4ndCBsb2Nr IHR1cGxlIGluIFNLSVAgTE9DS0VEIG1vZGUgKi8KLQkJCQlnb3RvIGxuZXh0OwotCi0JCQljYXNl IFRNX1NlbGZNb2RpZmllZDoKLQotCQkJCS8qCi0JCQkJICogVGhlIHRhcmdldCB0dXBsZSB3YXMg YWxyZWFkeSB1cGRhdGVkIG9yIGRlbGV0ZWQgYnkgdGhlCi0JCQkJICogY3VycmVudCBjb21tYW5k LCBvciBieSBhIGxhdGVyIGNvbW1hbmQgaW4gdGhlIGN1cnJlbnQKLQkJCQkgKiB0cmFuc2FjdGlv bi4gIFdlICptdXN0KiBpZ25vcmUgdGhlIHR1cGxlIGluIHRoZSBmb3JtZXIKLQkJCQkgKiBjYXNl LCBzbyBhcyB0byBhdm9pZCB0aGUgIkhhbGxvd2VlbiBwcm9ibGVtIiBvZiByZXBlYXRlZAotCQkJ CSAqIHVwZGF0ZSBhdHRlbXB0cy4gIEluIHRoZSBsYXR0ZXIgY2FzZSBpdCBtaWdodCBiZSBzZW5z aWJsZQotCQkJCSAqIHRvIGZldGNoIHRoZSB1cGRhdGVkIHR1cGxlIGluc3RlYWQsIGJ1dCBkb2lu ZyBzbyB3b3VsZAotCQkJCSAqIHJlcXVpcmUgY2hhbmdpbmcgaGVhcF91cGRhdGUgYW5kIGhlYXBf ZGVsZXRlIHRvIG5vdAotCQkJCSAqIGNvbXBsYWluIGFib3V0IHVwZGF0aW5nICJpbnZpc2libGUi IHR1cGxlcywgd2hpY2ggc2VlbXMKLQkJCQkgKiBwcmV0dHkgc2NhcnkgKHRhYmxlX3R1cGxlX2xv Y2sgd2lsbCBub3QgY29tcGxhaW4sIGJ1dCBmZXcKLQkJCQkgKiBjYWxsZXJzIGV4cGVjdCBUTV9J bnZpc2libGUsIGFuZCB3ZSdyZSBub3Qgb25lIG9mIHRoZW0pLiBTbwotCQkJCSAqIGZvciBub3cs IHRyZWF0IHRoZSB0dXBsZSBhcyBkZWxldGVkIGFuZCBkbyBub3QgcHJvY2Vzcy4KLQkJCQkgKi8K LQkJCQlnb3RvIGxuZXh0OwotCi0JCQljYXNlIFRNX09rOgotCi0JCQkJLyoKLQkJCQkgKiBHb3Qg dGhlIGxvY2sgc3VjY2Vzc2Z1bGx5LCB0aGUgbG9ja2VkIHR1cGxlIHNhdmVkIGluCi0JCQkJICog bWFya1Nsb3QgZm9yLCBpZiBuZWVkZWQsIEV2YWxQbGFuUXVhbCB0ZXN0aW5nIGJlbG93LgotCQkJ CSAqLwotCQkJCWlmICh0bWZkLnRyYXZlcnNlZCkKLQkJCQkJZXBxX25lZWRlZCA9IHRydWU7Ci0J CQkJYnJlYWs7Ci0KLQkJCWNhc2UgVE1fVXBkYXRlZDoKLQkJCQlpZiAoSXNvbGF0aW9uVXNlc1hh Y3RTbmFwc2hvdCgpKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCShlcnJjb2RlKEVSUkNP REVfVF9SX1NFUklBTElaQVRJT05fRkFJTFVSRSksCi0JCQkJCQkJIGVycm1zZygiY291bGQgbm90 IHNlcmlhbGl6ZSBhY2Nlc3MgZHVlIHRvIGNvbmN1cnJlbnQgdXBkYXRlIikpKTsKLQkJCQllbG9n KEVSUk9SLCAidW5leHBlY3RlZCB0YWJsZV90dXBsZV9sb2NrIHN0YXR1czogJXUiLAotCQkJCQkg dGVzdCk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgVE1fRGVsZXRlZDoKLQkJCQlpZiAoSXNvbGF0 aW9uVXNlc1hhY3RTbmFwc2hvdCgpKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCShlcnJj b2RlKEVSUkNPREVfVF9SX1NFUklBTElaQVRJT05fRkFJTFVSRSksCi0JCQkJCQkJIGVycm1zZygi Y291bGQgbm90IHNlcmlhbGl6ZSBhY2Nlc3MgZHVlIHRvIGNvbmN1cnJlbnQgdXBkYXRlIikpKTsK LQkJCQkvKiB0dXBsZSB3YXMgZGVsZXRlZCBzbyBkb24ndCByZXR1cm4gaXQgKi8KLQkJCQlnb3Rv IGxuZXh0OwotCi0JCQljYXNlIFRNX0ludmlzaWJsZToKLQkJCQllbG9nKEVSUk9SLCAiYXR0ZW1w dGVkIHRvIGxvY2sgaW52aXNpYmxlIHR1cGxlIik7Ci0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6 Ci0JCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCB0YWJsZV90dXBsZV9sb2NrIHN0YXR1czog JXUiLAotCQkJCQkgdGVzdCk7Ci0JCX0KKwkJLyogc2tpcCB0dXBsZSBpZiBpdCBjb3VsZG4ndCBi ZSBsb2NrZWQgKi8KKwkJaWYgKCFFeGVjTG9ja1RhYmxlVHVwbGUoZXJtLT5yZWxhdGlvbiwgJnRp ZCwgbWFya1Nsb3QsCisJCQkJCQkJCWVzdGF0ZS0+ZXNfc25hcHNob3QsIGVzdGF0ZS0+ZXNfb3V0 cHV0X2NpZCwKKwkJCQkJCQkJbG9ja21vZGUsIGVybS0+d2FpdFBvbGljeSwgJmVwcV9uZWVkZWQp KQorCQkJZ290byBsbmV4dDsKIAogCQkvKiBSZW1lbWJlciBsb2NrZWQgdHVwbGUncyBUSUQgZm9y IEVQUSB0ZXN0aW5nIGFuZCBXSEVSRSBDVVJSRU5UIE9GICovCiAJCWVybS0+Y3VyQ3RpZCA9IHRp ZDsKQEAgLTI4MCw2ICsyMTQsOTMgQEAgbG5leHQ6CiAJcmV0dXJuIHNsb3Q7CiB9CiAKKy8qCisg KiBFeGVjTG9ja1RhYmxlVHVwbGUKKyAqIAkJTG9ja3MgdHVwbGUgd2l0aCB0aGUgc3BlY2lmaWVk IFRJRCBpbiBsb2NrbW9kZSBmb2xsb3dpbmcgZ2l2ZW4gd2FpdAorICogCQlwb2xpY3kKKyAqCisg KiBSZXR1cm5zIHRydWUgaWYgdGhlIHR1cGxlIHdhcyBzdWNjZXNzZnVsbHkgbG9ja2VkLiAgTG9j a2VkIHR1cGxlIGlzIGxvYWRlZAorICogaW50byBwcm92aWRlZCBzbG90LgorICovCitib29sCitF eGVjTG9ja1RhYmxlVHVwbGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIHRpZCwgVHVw bGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJICAgU25hcHNob3Qgc25hcHNob3QsIENvbW1hbmRJZCBj aWQsCisJCQkJICAgTG9ja1R1cGxlTW9kZSBsb2NrbW9kZSwgTG9ja1dhaXRQb2xpY3kgd2FpdFBv bGljeSwKKwkJCQkgICBib29sICp0dXBsZV9jb25jdXJyZW50bHlfdXBkYXRlZCkKK3sKKwlUTV9G YWlsdXJlRGF0YSB0bWZkOworCWludAkJCWxvY2tmbGFncyA9IFRVUExFX0xPQ0tfRkxBR19MT0NL X1VQREFURV9JTl9QUk9HUkVTUzsKKwlUTV9SZXN1bHQJdGVzdDsKKworCWlmICh0dXBsZV9jb25j dXJyZW50bHlfdXBkYXRlZCkKKwkJKnR1cGxlX2NvbmN1cnJlbnRseV91cGRhdGVkID0gZmFsc2U7 CisKKwlpZiAoIUlzb2xhdGlvblVzZXNYYWN0U25hcHNob3QoKSkKKwkJbG9ja2ZsYWdzIHw9IFRV UExFX0xPQ0tfRkxBR19GSU5EX0xBU1RfVkVSU0lPTjsKKworCXRlc3QgPSB0YWJsZV90dXBsZV9s b2NrKHJlbGF0aW9uLCB0aWQsIHNuYXBzaG90LCBzbG90LCBjaWQsIGxvY2ttb2RlLAorCQkJCQkJ CXdhaXRQb2xpY3ksIGxvY2tmbGFncywgJnRtZmQpOworCisJc3dpdGNoICh0ZXN0KQorCXsKKwkJ Y2FzZSBUTV9Xb3VsZEJsb2NrOgorCQkJLyogY291bGRuJ3QgbG9jayB0dXBsZSBpbiBTS0lQIExP Q0tFRCBtb2RlICovCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJY2FzZSBUTV9TZWxmTW9kaWZpZWQ6 CisJCQkvKgorCQkJICogVGhlIHRhcmdldCB0dXBsZSB3YXMgYWxyZWFkeSB1cGRhdGVkIG9yIGRl bGV0ZWQgYnkgdGhlCisJCQkgKiBjdXJyZW50IGNvbW1hbmQsIG9yIGJ5IGEgbGF0ZXIgY29tbWFu ZCBpbiB0aGUgY3VycmVudAorCQkJICogdHJhbnNhY3Rpb24uICBXZSAqbXVzdCogaWdub3JlIHRo ZSB0dXBsZSBpbiB0aGUgZm9ybWVyCisJCQkgKiBjYXNlLCBzbyBhcyB0byBhdm9pZCB0aGUgIkhh bGxvd2VlbiBwcm9ibGVtIiBvZiByZXBlYXRlZAorCQkJICogdXBkYXRlIGF0dGVtcHRzLiAgSW4g dGhlIGxhdHRlciBjYXNlIGl0IG1pZ2h0IGJlIHNlbnNpYmxlCisJCQkgKiB0byBmZXRjaCB0aGUg dXBkYXRlZCB0dXBsZSBpbnN0ZWFkLCBidXQgZG9pbmcgc28gd291bGQKKwkJCSAqIHJlcXVpcmUg Y2hhbmdpbmcgaGVhcF91cGRhdGUgYW5kIGhlYXBfZGVsZXRlIHRvIG5vdAorCQkJICogY29tcGxh aW4gYWJvdXQgdXBkYXRpbmcgImludmlzaWJsZSIgdHVwbGVzLCB3aGljaCBzZWVtcworCQkJICog cHJldHR5IHNjYXJ5ICh0YWJsZV90dXBsZV9sb2NrIHdpbGwgbm90IGNvbXBsYWluLCBidXQgZmV3 CisJCQkgKiBjYWxsZXJzIGV4cGVjdCBUTV9JbnZpc2libGUsIGFuZCB3ZSdyZSBub3Qgb25lIG9m IHRoZW0pLiBTbworCQkJICogZm9yIG5vdywgdHJlYXQgdGhlIHR1cGxlIGFzIGRlbGV0ZWQgYW5k IGRvIG5vdCBwcm9jZXNzLgorCQkJICovCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJY2FzZSBUTV9P azoKKwkJCS8qCisJCQkgKiBHb3QgdGhlIGxvY2sgc3VjY2Vzc2Z1bGx5LCB0aGUgbG9ja2VkIHR1 cGxlIHNhdmVkIGluCisJCQkgKiBzbG90IGZvciBFdmFsUGxhblF1YWwsIGlmIGFza2VkIGJ5IHRo ZSBjYWxsZXIuCisJCQkgKi8KKwkJCWlmICh0bWZkLnRyYXZlcnNlZCAmJiB0dXBsZV9jb25jdXJy ZW50bHlfdXBkYXRlZCkKKwkJCQkqdHVwbGVfY29uY3VycmVudGx5X3VwZGF0ZWQgPSB0cnVlOwor CQkJYnJlYWs7CisKKwkJY2FzZSBUTV9VcGRhdGVkOgorCQkJaWYgKElzb2xhdGlvblVzZXNYYWN0 U25hcHNob3QoKSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9U X1JfU0VSSUFMSVpBVElPTl9GQUlMVVJFKSwKKwkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBzZXJp YWxpemUgYWNjZXNzIGR1ZSB0byBjb25jdXJyZW50IHVwZGF0ZSIpKSk7CisJCQllbG9nKEVSUk9S LCAidW5leHBlY3RlZCB0YWJsZV90dXBsZV9sb2NrIHN0YXR1czogJXUiLAorCQkJCSB0ZXN0KTsK KwkJCWJyZWFrOworCisJCWNhc2UgVE1fRGVsZXRlZDoKKwkJCWlmIChJc29sYXRpb25Vc2VzWGFj dFNuYXBzaG90KCkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVf VF9SX1NFUklBTElaQVRJT05fRkFJTFVSRSksCisJCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgc2Vy aWFsaXplIGFjY2VzcyBkdWUgdG8gY29uY3VycmVudCB1cGRhdGUiKSkpOworCQkJLyogdHVwbGUg d2FzIGRlbGV0ZWQgc28gZG9uJ3QgcmV0dXJuIGl0ICovCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJ Y2FzZSBUTV9JbnZpc2libGU6CisJCQllbG9nKEVSUk9SLCAiYXR0ZW1wdGVkIHRvIGxvY2sgaW52 aXNpYmxlIHR1cGxlIik7CisJCQlyZXR1cm4gZmFsc2U7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2co RVJST1IsICJ1bnJlY29nbml6ZWQgdGFibGVfdHVwbGVfbG9jayBzdGF0dXM6ICV1IiwgdGVzdCk7 CisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKIC8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ICAqCQlFeGVjSW5pdExvY2tSb3dzCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3JpX3RyaWdnZXJzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwpp bmRleCA4MDRhMmE2OWU0Li44MTU0NjY1NWZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvcmlfdHJpZ2dlcnMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dl cnMuYwpAQCAtMjMsMjEgKzIzLDMxIEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5j bHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgor I2luY2x1ZGUgImFjY2Vzcy9za2V5LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3N5c2F0dHIuaCIKICNp bmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2lu Y2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9pbmRleC5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGFydGl0aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19j b25zdHJhaW50LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdHJpZ2dlci5o IgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCIKICNpbmNsdWRlICJleGVjdXRv ci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL3NwaS5oIgogI2luY2x1ZGUgImxpYi9p bGlzdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9j b2VyY2UuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKKyNpbmNsdWRlICJw YXJ0aXRpb25pbmcvcGFydGRlc2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2lu Y2x1ZGUgInRjb3AvcHF1ZXJ5LmgiCiAjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCkBAIC01MCw2 ICs2MCw3IEBACiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMv bWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yYW5nZXR5cGVzLmgiCisjaW5jbHVkZSAidXRp bHMvcGFydGNhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMv cmxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcnVsZXV0aWxzLmgiCkBAIC0xNTcsNiArMTY4LDEyIEBA IHR5cGVkZWYgdm9pZCAoKlJJX1BsYW5GcmVlRnVuY190eXBlKSAoc3RydWN0IFJJX1BsYW4gKnBs YW4pOwogICovCiB0eXBlZGVmIHN0cnVjdCBSSV9QbGFuCiB7CisJLyogQ29uc3RyYWludCBmb3Ig dGhpcyBwbGFuLiAqLworCWNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm87CisKKwkvKiBS SSBxdWVyeSB0eXBlIGNvZGUuICovCisJaW50CQkJCWNvbnN0cl9xdWVyeW5vOworCiAJLyoKIAkg KiBDb250ZXh0IHVuZGVyIHdoaWNoIHRoaXMgc3RydWN0IGFuZCBpdHMgc3Vic2lkaWFyeSBkYXRh IGdldHMgYWxsb2NhdGVkLgogCSAqIEl0IGlzIG1hZGUgYSBjaGlsZCBvZiBDYWNoZU1lbW9yeUNv bnRleHQuCkBAIC0yNzAsNyArMjg3LDggQEAgc3RhdGljIGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZv ICpyaV9GZXRjaENvbnN0cmFpbnRJbmZvKFRyaWdnZXIgKnRyaWdnZXIsCiAJCQkJCQkJCQkJCQkJ ICAgUmVsYXRpb24gdHJpZ19yZWwsIGJvb2wgcmVsX2lzX3BrKTsKIHN0YXRpYyBjb25zdCBSSV9D b25zdHJhaW50SW5mbyAqcmlfTG9hZENvbnN0cmFpbnRJbmZvKE9pZCBjb25zdHJhaW50T2lkKTsK IHN0YXRpYyBPaWQJZ2V0X3JpX2NvbnN0cmFpbnRfcm9vdChPaWQgY29uc3RyT2lkKTsKLXN0YXRp YyBSSV9QbGFuICpyaV9QbGFuQ2hlY2soUklfUGxhbkNyZWF0ZUZ1bmNfdHlwZSBwbGFuX2NyZWF0 ZV9mdW5jLAorc3RhdGljIFJJX1BsYW4gKnJpX1BsYW5DaGVjayhjb25zdCBSSV9Db25zdHJhaW50 SW5mbyAqcmlpbmZvLAorCQkJCQkJCSBSSV9QbGFuQ3JlYXRlRnVuY190eXBlIHBsYW5fY3JlYXRl X2Z1bmMsCiAJCQkJCQkJIGNvbnN0IGNoYXIgKnF1ZXJ5c3RyLCBpbnQgbmFyZ3MsIE9pZCAqYXJn dHlwZXMsCiAJCQkJCQkJIFJJX1F1ZXJ5S2V5ICpxa2V5LCBSZWxhdGlvbiBma19yZWwsIFJlbGF0 aW9uIHBrX3JlbCk7CiBzdGF0aWMgYm9vbCByaV9QZXJmb3JtQ2hlY2soY29uc3QgUklfQ29uc3Ry YWludEluZm8gKnJpaW5mbywKQEAgLTI5NCw2ICszMTIsMTUgQEAgc3RhdGljIGludCByaV9TcWxT dHJpbmdQbGFuRXhlY3V0ZShSSV9QbGFuICpwbGFuLCBSZWxhdGlvbiBma19yZWwsIFJlbGF0aW9u IHBrX3IKIAkJCQkJCVNuYXBzaG90IGNyb3NzY2hlY2tfc25hcHNob3QsCiAJCQkJCQlpbnQgbGlt aXQsIENtZFR5cGUgKmxhc3Rfc3RtdF9jbWR0eXBlKTsKIHN0YXRpYyB2b2lkIHJpX1NxbFN0cmlu Z1BsYW5GcmVlKFJJX1BsYW4gKnBsYW4pOworc3RhdGljIHZvaWQgcmlfTG9va3VwS2V5SW5Qa1Jl bFBsYW5DcmVhdGUoUklfUGxhbiAqcGxhbiwKKwkJCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5c3Ry LCBpbnQgbmFyZ3MsIE9pZCAqcGFyYW10eXBlcyk7CitzdGF0aWMgaW50IHJpX0xvb2t1cEtleUlu UGtSZWwoc3RydWN0IFJJX1BsYW4gKnBsYW4sCisJCQkJCVJlbGF0aW9uIGZrX3JlbCwgUmVsYXRp b24gcGtfcmVsLAorCQkJCQlEYXR1bSAqcGtfdmFscywgY2hhciAqcGtfbnVsbHMsCisJCQkJCVNu YXBzaG90IGNyb3NzY2hlY2tfc25hcHNob3QsCisJCQkJCWludCBsaW1pdCwgQ21kVHlwZSAqbGFz dF9zdG10X2NtZHR5cGUpOworc3RhdGljIGJvb2wgcmlfTG9va3VwS2V5SW5Qa1JlbFBsYW5Jc1Zh bGlkKFJJX1BsYW4gKnBsYW4pOworc3RhdGljIHZvaWQgcmlfTG9va3VwS2V5SW5Qa1JlbFBsYW5G cmVlKFJJX1BsYW4gKnBsYW4pOwogCiAKIC8qCkBAIC0zODksOSArNDE2LDkgQEAgUklfRktleV9j aGVjayhUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEpCiAKIAkJCQkJLyoKIAkJCQkJICogTUFUQ0ggUEFS VElBTCAtIGFsbCBub24tbnVsbCBjb2x1bW5zIG11c3QgbWF0Y2guIChub3QKLQkJCQkJICogaW1w bGVtZW50ZWQsIGNhbiBiZSBkb25lIGJ5IG1vZGlmeWluZyB0aGUgcXVlcnkgYmVsb3cKLQkJCQkJ ICogdG8gb25seSBpbmNsdWRlIG5vbi1udWxsIGNvbHVtbnMsIG9yIGJ5IHdyaXRpbmcgYQotCQkJ CQkgKiBzcGVjaWFsIHZlcnNpb24gaGVyZSkKKwkJCQkJICogaW1wbGVtZW50ZWQsIGNhbiBiZSBk b25lIGJ5IG1vZGlmeWluZworCQkJCQkgKiBMb29rdXBLZXlJblBrUmVsUGxhbkV4ZWN1dGUoKSB0 byBvbmx5IGluY2x1ZGUgbm9uLW51bGwKKwkJCQkJICogY29sdW1ucy4KIAkJCQkJICovCiAJCQkJ CWJyZWFrOwogI2VuZGlmCkBAIC00MTEsMjQgKzQzOCwxNSBAQCBSSV9GS2V5X2NoZWNrKFRyaWdn ZXJEYXRhICp0cmlnZGF0YSkKIAogCWlmICgocXBsYW4gPSByaV9GZXRjaFByZXBhcmVkUGxhbigm cWtleSkpID09IE5VTEwpCiAJewotCQlTdHJpbmdJbmZvRGF0YSBxdWVyeWJ1ZjsKLQkJY2hhcgkJ cGtyZWxuYW1lW01BWF9RVU9URURfUkVMX05BTUVfTEVOXTsKLQkJY2hhcgkJYXR0bmFtZVtNQVhf UVVPVEVEX05BTUVfTEVOXTsKLQkJY2hhcgkJcGFyYW1uYW1lWzE2XTsKLQkJY29uc3QgY2hhciAq cXVlcnlzZXA7Ci0JCU9pZAkJCXF1ZXJ5b2lkc1tSSV9NQVhfTlVNS0VZU107Ci0JCWNvbnN0IGNo YXIgKnBrX29ubHk7Ci0KIAkJLyogLS0tLS0tLS0tLQotCQkgKiBUaGUgcXVlcnkgc3RyaW5nIGJ1 aWx0IGlzCisJCSAqIEZvciBzaW1wbGUgRktzLCB1c2UgcmlfTG9va3VwS2V5SW5Qa1JlbFBsYW5D cmVhdGUoKSB0byBjcmVhdGUKKwkJICogdGhlIHBsYW4gdG8gY2hlY2sgdGhlIHJvdywgd2hpY2gg aXMgZXF1aXZhbGVudCB0byBkb2luZwogCQkgKglTRUxFQ1QgMSBGUk9NIFtPTkxZXSA8cGt0YWJs ZT4geCBXSEVSRSBwa2F0dDEgPSAkMSBbQU5EIC4uLl0KIAkJICoJCSAgIEZPUiBLRVkgU0hBUkUg T0YgeAotCQkgKiBUaGUgdHlwZSBpZCdzIGZvciB0aGUgJCBwYXJhbWV0ZXJzIGFyZSB0aG9zZSBv ZiB0aGUKLQkJICogY29ycmVzcG9uZGluZyBGSyBhdHRyaWJ1dGVzLgogCQkgKgotCQkgKiBCdXQg Zm9yIHRlbXBvcmFsIEZLcyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZQotCQkgKiB0aGUgRksncyByYW5n ZSBpcyBjb21wbGV0ZWx5IGNvdmVyZWQuCi0JCSAqIFNvIHdlIHVzZSB0aGlzIHF1ZXJ5IGluc3Rl YWQ6CisJCSAqIEJ1dCBmb3IgdGVtcG9yYWwgRktzIHdlIHVzZSByaV9TcWxTdHJpbmdQbGFuQ3Jl YXRlKCkgYmVjYXVzZSB3ZSBuZWVkCisJCSAqIHRvIG1ha2Ugc3VyZSB0aGUgRksncyByYW5nZSBp cyBjb21wbGV0ZWx5IGNvdmVyZWQsIHdoaWNoIGlzIGRvbmUKKwkJICogd2l0aCB0aGlzIHF1ZXJ5 IGluc3RlYWQ6CiAJCSAqICBTRUxFQ1QgMQogCQkgKglGUk9NCSgKIAkJICoJCVNFTEVDVCBwa3Bl cmlvZGF0dCBBUyByCkBAIC00NDIsNDUgKzQ2MCw0NSBAQCBSSV9GS2V5X2NoZWNrKFRyaWdnZXJE YXRhICp0cmlnZGF0YSkKIAkJICogd2UgY2FuIG1ha2UgdGhpcyBhIGJpdCBzaW1wbGVyLgogCQkg KiAtLS0tLS0tLS0tCiAJCSAqLwotCQlpbml0U3RyaW5nSW5mbygmcXVlcnlidWYpOwotCQlwa19v bmx5ID0gcGtfcmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJM RSA/Ci0JCQkiIiA6ICJPTkxZICI7Ci0JCXF1b3RlUmVsYXRpb25OYW1lKHBrcmVsbmFtZSwgcGtf cmVsKTsKIAkJaWYgKHJpaW5mby0+aGFzcGVyaW9kKQogCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBx dWVyeWJ1ZjsKKwkJCWNoYXIJCXBrcmVsbmFtZVtNQVhfUVVPVEVEX1JFTF9OQU1FX0xFTl07CisJ CQljaGFyCQlhdHRuYW1lW01BWF9RVU9URURfTkFNRV9MRU5dOworCQkJY2hhcgkJcGFyYW1uYW1l WzE2XTsKKwkJCWNvbnN0IGNoYXIgKnF1ZXJ5c2VwOworCQkJT2lkCQkJcXVlcnlvaWRzW1JJX01B WF9OVU1LRVlTXTsKKwkJCWNvbnN0IGNoYXIgKnBrX29ubHk7CisJCQlPaWQJCQlma190eXBlOwor CisJCQlpbml0U3RyaW5nSW5mbygmcXVlcnlidWYpOworCQkJcGtfb25seSA9IHBrX3JlbC0+cmRf cmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUgPworCQkJCSIiIDogIk9O TFkgIjsKKwkJCXF1b3RlUmVsYXRpb25OYW1lKHBrcmVsbmFtZSwgcGtfcmVsKTsKIAkJCXF1b3Rl T25lTmFtZShhdHRuYW1lLAogCQkJCQkJIFJJQXR0TmFtZShwa19yZWwsIHJpaW5mby0+cGtfYXR0 bnVtc1tyaWluZm8tPm5rZXlzIC0gMV0pKTsKLQogCQkJYXBwZW5kU3RyaW5nSW5mbygmcXVlcnli dWYsCiAJCQkJCQkJICJTRUxFQ1QgMSBGUk9NIChTRUxFQ1QgJXMgQVMgciBGUk9NICVzJXMgeCIs CiAJCQkJCQkJIGF0dG5hbWUsIHBrX29ubHksIHBrcmVsbmFtZSk7Ci0JCX0KLQkJZWxzZQotCQl7 Ci0JCQlhcHBlbmRTdHJpbmdJbmZvKCZxdWVyeWJ1ZiwgIlNFTEVDVCAxIEZST00gJXMlcyB4IiwK LQkJCQkJCQkgcGtfb25seSwgcGtyZWxuYW1lKTsKLQkJfQotCQlxdWVyeXNlcCA9ICJXSEVSRSI7 Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcmlpbmZvLT5ua2V5czsgaSsrKQotCQl7Ci0JCQlPaWQJ CQlwa190eXBlID0gUklBdHRUeXBlKHBrX3JlbCwgcmlpbmZvLT5wa19hdHRudW1zW2ldKTsKLQkJ CU9pZAkJCWZrX3R5cGUgPSBSSUF0dFR5cGUoZmtfcmVsLCByaWluZm8tPmZrX2F0dG51bXNbaV0p OwotCi0JCQlxdW90ZU9uZU5hbWUoYXR0bmFtZSwKLQkJCQkJCSBSSUF0dE5hbWUocGtfcmVsLCBy aWluZm8tPnBrX2F0dG51bXNbaV0pKTsKLQkJCXNwcmludGYocGFyYW1uYW1lLCAiJCVkIiwgaSAr IDEpOwotCQkJcmlfR2VuZXJhdGVRdWFsKCZxdWVyeWJ1ZiwgcXVlcnlzZXAsCi0JCQkJCQkJYXR0 bmFtZSwgcGtfdHlwZSwKLQkJCQkJCQlyaWluZm8tPnBmX2VxX29wcnNbaV0sCi0JCQkJCQkJcGFy YW1uYW1lLCBma190eXBlKTsKLQkJCXF1ZXJ5c2VwID0gIkFORCI7Ci0JCQlxdWVyeW9pZHNbaV0g PSBma190eXBlOwotCQl9Ci0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnF1ZXJ5YnVmLCAiIEZP UiBLRVkgU0hBUkUgT0YgeCIpOwotCQlpZiAocmlpbmZvLT5oYXNwZXJpb2QpCi0JCXsKLQkJCU9p ZAkJCWZrX3R5cGUgPSBSSUF0dFR5cGUoZmtfcmVsLCByaWluZm8tPmZrX2F0dG51bXNbcmlpbmZv LT5ua2V5cyAtIDFdKTsKKwkJCXF1ZXJ5c2VwID0gIldIRVJFIjsKKwkJCWZvciAoaW50IGkgPSAw OyBpIDwgcmlpbmZvLT5ua2V5czsgaSsrKQorCQkJeworCQkJCU9pZAkJCXBrX3R5cGUgPSBSSUF0 dFR5cGUocGtfcmVsLCByaWluZm8tPnBrX2F0dG51bXNbaV0pOworCisJCQkJZmtfdHlwZSA9IFJJ QXR0VHlwZShma19yZWwsIHJpaW5mby0+ZmtfYXR0bnVtc1tpXSk7CisJCQkJcXVvdGVPbmVOYW1l KGF0dG5hbWUsCisJCQkJCQkJIFJJQXR0TmFtZShwa19yZWwsIHJpaW5mby0+cGtfYXR0bnVtc1tp XSkpOworCQkJCXNwcmludGYocGFyYW1uYW1lLCAiJCVkIiwgaSArIDEpOworCQkJCXJpX0dlbmVy YXRlUXVhbCgmcXVlcnlidWYsIHF1ZXJ5c2VwLAorCQkJCQkJCQlhdHRuYW1lLCBwa190eXBlLAor CQkJCQkJCQlyaWluZm8tPnBmX2VxX29wcnNbaV0sCisJCQkJCQkJCXBhcmFtbmFtZSwgZmtfdHlw ZSk7CisJCQkJcXVlcnlzZXAgPSAiQU5EIjsKKwkJCQlxdWVyeW9pZHNbaV0gPSBma190eXBlOwor CQkJfQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcXVlcnlidWYsICIgRk9SIEtFWSBTSEFS RSBPRiB4Iik7CiAKKwkJCWZrX3R5cGUgPSBSSUF0dFR5cGUoZmtfcmVsLCByaWluZm8tPmZrX2F0 dG51bXNbcmlpbmZvLT5ua2V5cyAtIDFdKTsKIAkJCWFwcGVuZFN0cmluZ0luZm8oJnF1ZXJ5YnVm LCAiKSB4MSBIQVZJTkcgIik7CiAJCQlzcHJpbnRmKHBhcmFtbmFtZSwgIiQlZCIsIHJpaW5mby0+ bmtleXMpOwogCQkJcmlfR2VuZXJhdGVRdWFsKCZxdWVyeWJ1ZiwgIiIsCkBAIC00ODgsMjYgKzUw NiwyNCBAQCBSSV9GS2V5X2NoZWNrKFRyaWdnZXJEYXRhICp0cmlnZGF0YSkKIAkJCQkJCQlyaWlu Zm8tPmFnZ2VkX3BlcmlvZF9jb250YWluZWRfYnlfb3BlciwKIAkJCQkJCQkicGdfY2F0YWxvZy5y YW5nZV9hZ2ciLCBBTllNVUxUSVJBTkdFT0lEKTsKIAkJCWFwcGVuZFN0cmluZ0luZm8oJnF1ZXJ5 YnVmLCAiKHgxLnIpIik7Ci0JCX0KIAotCQkvKiBQcmVwYXJlIGFuZCBzYXZlIHRoZSBwbGFuIHVz aW5nIHJpX1NxbFN0cmluZ1BsYW5DcmVhdGUoKS4gKi8KLQkJcXBsYW4gPSByaV9QbGFuQ2hlY2so cmlfU3FsU3RyaW5nUGxhbkNyZWF0ZSwKLQkJCQkJCQkgcXVlcnlidWYuZGF0YSwgcmlpbmZvLT5u a2V5cywgcXVlcnlvaWRzLAotCQkJCQkJCSAmcWtleSwgZmtfcmVsLCBwa19yZWwpOworCQkJLyog UHJlcGFyZSBhbmQgc2F2ZSB0aGUgcGxhbiB1c2luZyByaV9TcWxTdHJpbmdQbGFuQ3JlYXRlKCku ICovCisJCQlxcGxhbiA9IHJpX1BsYW5DaGVjayhyaWluZm8sIHJpX1NxbFN0cmluZ1BsYW5DcmVh dGUsCisJCQkJCQkJCSBxdWVyeWJ1Zi5kYXRhLCByaWluZm8tPm5rZXlzLCBxdWVyeW9pZHMsCisJ CQkJCQkJCSAmcWtleSwgZmtfcmVsLCBwa19yZWwpOworCQl9CisJCWVsc2UKKwkJCXFwbGFuID0g cmlfUGxhbkNoZWNrKHJpaW5mbywgcmlfTG9va3VwS2V5SW5Qa1JlbFBsYW5DcmVhdGUsCisJCQkJ CQkJCSBOVUxMLCAwIC8qIG5hcmdzICovLCBOVUxMIC8qIGFyZ3R5cGVzICovLAorCQkJCQkJCQkg JnFrZXksIGZrX3JlbCwgcGtfcmVsKTsKIAl9CiAKLQkvKgotCSAqIE5vdyBjaGVjayB0aGF0IGZv cmVpZ24ga2V5IGV4aXN0cyBpbiBQSyB0YWJsZQotCSAqCi0JICogWFhYIGRldGVjdE5ld1Jvd3Mg bXVzdCBiZSB0cnVlIHdoZW4gYSBwYXJ0aXRpb25lZCB0YWJsZSBpcyBvbiB0aGUKLQkgKiByZWZl cmVuY2VkIHNpZGUuICBUaGUgcmVhc29uIGlzIHRoYXQgb3VyIHNuYXBzaG90IG11c3QgYmUgZnJl c2ggaW4KLQkgKiBvcmRlciBmb3IgdGhlIGhhY2sgaW4gZmluZF9pbmhlcml0YW5jZV9jaGlsZHJl bigpIHRvIHdvcmsuCi0JICovCisJLyogTm93IGNoZWNrIHRoYXQgZm9yZWlnbiBrZXkgZXhpc3Rz IGluIFBLIHRhYmxlICovCiAJcmlfUGVyZm9ybUNoZWNrKHJpaW5mbywgJnFrZXksIHFwbGFuLAog CQkJCQlma19yZWwsIHBrX3JlbCwKIAkJCQkJTlVMTCwgbmV3c2xvdCwKIAkJCQkJZmFsc2UsCi0J CQkJCXBrX3JlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUs CisJCQkJCWZhbHNlLAogCQkJCQlDTURfU0VMRUNUKTsKIAogCXRhYmxlX2Nsb3NlKHBrX3JlbCwg Um93U2hhcmVMb2NrKTsKQEAgLTU3OCwyNCArNTk0LDE1IEBAIHJpX0NoZWNrX1BrX01hdGNoKFJl bGF0aW9uIHBrX3JlbCwgUmVsYXRpb24gZmtfcmVsLAogCiAJaWYgKChxcGxhbiA9IHJpX0ZldGNo UHJlcGFyZWRQbGFuKCZxa2V5KSkgPT0gTlVMTCkKIAl7Ci0JCVN0cmluZ0luZm9EYXRhIHF1ZXJ5 YnVmOwotCQljaGFyCQlwa3JlbG5hbWVbTUFYX1FVT1RFRF9SRUxfTkFNRV9MRU5dOwotCQljaGFy CQlhdHRuYW1lW01BWF9RVU9URURfTkFNRV9MRU5dOwotCQljaGFyCQlwYXJhbW5hbWVbMTZdOwot CQljb25zdCBjaGFyICpxdWVyeXNlcDsKLQkJY29uc3QgY2hhciAqcGtfb25seTsKLQkJT2lkCQkJ cXVlcnlvaWRzW1JJX01BWF9OVU1LRVlTXTsKLQogCQkvKiAtLS0tLS0tLS0tCi0JCSAqIFRoZSBx dWVyeSBzdHJpbmcgYnVpbHQgaXMKKwkJICogRm9yIHNpbXBsZSBGS3MsIHVzZSByaV9Mb29rdXBL ZXlJblBrUmVsUGxhbkNyZWF0ZSgpIHRvIGNyZWF0ZQorCQkgKiB0aGUgcGxhbiB0byBjaGVjayB0 aGUgcm93LCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIGRvaW5nCiAJCSAqCVNFTEVDVCAxIEZST00g W09OTFldIDxwa3RhYmxlPiB4IFdIRVJFIHBrYXR0MSA9ICQxIFtBTkQgLi4uXQogCQkgKgkJICAg Rk9SIEtFWSBTSEFSRSBPRiB4Ci0JCSAqIFRoZSB0eXBlIGlkJ3MgZm9yIHRoZSAkIHBhcmFtZXRl cnMgYXJlIHRob3NlIG9mIHRoZQotCQkgKiBQSyBhdHRyaWJ1dGVzIHRoZW1zZWx2ZXMuCiAJCSAq Ci0JCSAqIEJ1dCBmb3IgdGVtcG9yYWwgRktzIHdlIG5lZWQgdG8gbWFrZSBzdXJlCi0JCSAqIHRo ZSBvbGQgUEsncyByYW5nZSBpcyBjb21wbGV0ZWx5IGNvdmVyZWQuCi0JCSAqIFNvIHdlIHVzZSB0 aGlzIHF1ZXJ5IGluc3RlYWQ6CisJCSAqIEJ1dCBmb3IgdGVtcG9yYWwgRktzIHdlIHVzZSByaV9T cWxTdHJpbmdQbGFuQ3JlYXRlKCkgYmVjYXVzZSB3ZSBuZWVkCisJCSAqIHRvIG1ha2Ugc3VyZSB0 aGUgRksncyByYW5nZSBpcyBjb21wbGV0ZWx5IGNvdmVyZWQsIHdoaWNoIGlzIGRvbmUKKwkJICog d2l0aCB0aGlzIHF1ZXJ5IGluc3RlYWQ6CiAJCSAqICBTRUxFQ1QgMQogCQkgKiAgRlJPTSAgICAo CiAJCSAqCSAgU0VMRUNUIHBrcGVyaW9kYXR0IEFTIHIKQEAgLTYwOSw0MyArNjE2LDQ0IEBAIHJp X0NoZWNrX1BrX01hdGNoKFJlbGF0aW9uIHBrX3JlbCwgUmVsYXRpb24gZmtfcmVsLAogCQkgKiB3 ZSBjYW4gbWFrZSB0aGlzIGEgYml0IHNpbXBsZXIuCiAJCSAqIC0tLS0tLS0tLS0KIAkJICovCi0J CWluaXRTdHJpbmdJbmZvKCZxdWVyeWJ1Zik7Ci0JCXBrX29ubHkgPSBwa19yZWwtPnJkX3JlbC0+ cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFID8KLQkJCSIiIDogIk9OTFkgIjsK LQkJcXVvdGVSZWxhdGlvbk5hbWUocGtyZWxuYW1lLCBwa19yZWwpOwogCQlpZiAocmlpbmZvLT5o YXNwZXJpb2QpCiAJCXsKKwkJCVN0cmluZ0luZm9EYXRhIHF1ZXJ5YnVmOworCQkJY2hhcgkJcGty ZWxuYW1lW01BWF9RVU9URURfUkVMX05BTUVfTEVOXTsKKwkJCWNoYXIJCWF0dG5hbWVbTUFYX1FV T1RFRF9OQU1FX0xFTl07CisJCQljaGFyCQlwYXJhbW5hbWVbMTZdOworCQkJY29uc3QgY2hhciAq cXVlcnlzZXA7CisJCQljb25zdCBjaGFyICpwa19vbmx5OworCQkJT2lkCQkJcXVlcnlvaWRzW1JJ X01BWF9OVU1LRVlTXTsKKwkJCU9pZAkJCWZrX3R5cGU7CisKKwkJCWluaXRTdHJpbmdJbmZvKCZx dWVyeWJ1Zik7CisJCQlwa19vbmx5ID0gcGtfcmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lO RF9QQVJUSVRJT05FRF9UQUJMRSA/CisJCQkJIiIgOiAiT05MWSAiOworCQkJcXVvdGVSZWxhdGlv bk5hbWUocGtyZWxuYW1lLCBwa19yZWwpOwogCQkJcXVvdGVPbmVOYW1lKGF0dG5hbWUsIFJJQXR0 TmFtZShwa19yZWwsIHJpaW5mby0+cGtfYXR0bnVtc1tyaWluZm8tPm5rZXlzIC0gMV0pKTsKIAog CQkJYXBwZW5kU3RyaW5nSW5mbygmcXVlcnlidWYsCiAJCQkJCQkJICJTRUxFQ1QgMSBGUk9NIChT RUxFQ1QgJXMgQVMgciBGUk9NICVzJXMgeCIsCiAJCQkJCQkJIGF0dG5hbWUsIHBrX29ubHksIHBr cmVsbmFtZSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlhcHBlbmRTdHJpbmdJbmZvKCZxdWVyeWJ1 ZiwgIlNFTEVDVCAxIEZST00gJXMlcyB4IiwKLQkJCQkJCQkgcGtfb25seSwgcGtyZWxuYW1lKTsK LQkJfQotCQlxdWVyeXNlcCA9ICJXSEVSRSI7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcmlpbmZv LT5ua2V5czsgaSsrKQotCQl7Ci0JCQlPaWQJCQlwa190eXBlID0gUklBdHRUeXBlKHBrX3JlbCwg cmlpbmZvLT5wa19hdHRudW1zW2ldKTsKLQotCQkJcXVvdGVPbmVOYW1lKGF0dG5hbWUsCi0JCQkJ CQkgUklBdHROYW1lKHBrX3JlbCwgcmlpbmZvLT5wa19hdHRudW1zW2ldKSk7Ci0JCQlzcHJpbnRm KHBhcmFtbmFtZSwgIiQlZCIsIGkgKyAxKTsKLQkJCXJpX0dlbmVyYXRlUXVhbCgmcXVlcnlidWYs IHF1ZXJ5c2VwLAotCQkJCQkJCWF0dG5hbWUsIHBrX3R5cGUsCi0JCQkJCQkJcmlpbmZvLT5wcF9l cV9vcHJzW2ldLAotCQkJCQkJCXBhcmFtbmFtZSwgcGtfdHlwZSk7Ci0JCQlxdWVyeXNlcCA9ICJB TkQiOwotCQkJcXVlcnlvaWRzW2ldID0gcGtfdHlwZTsKLQkJfQotCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKCZxdWVyeWJ1ZiwgIiBGT1IgS0VZIFNIQVJFIE9GIHgiKTsKLQkJaWYgKHJpaW5mby0+ aGFzcGVyaW9kKQotCQl7Ci0JCQlPaWQJCQlma190eXBlID0gUklBdHRUeXBlKGZrX3JlbCwgcmlp bmZvLT5ma19hdHRudW1zW3JpaW5mby0+bmtleXMgLSAxXSk7CisJCQlxdWVyeXNlcCA9ICJXSEVS RSI7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IHJpaW5mby0+bmtleXM7IGkrKykKKwkJCXsKKwkJ CQlPaWQJCQlwa190eXBlID0gUklBdHRUeXBlKHBrX3JlbCwgcmlpbmZvLT5wa19hdHRudW1zW2ld KTsKKworCQkJCXF1b3RlT25lTmFtZShhdHRuYW1lLAorCQkJCQkJCSBSSUF0dE5hbWUocGtfcmVs LCByaWluZm8tPnBrX2F0dG51bXNbaV0pKTsKKwkJCQlzcHJpbnRmKHBhcmFtbmFtZSwgIiQlZCIs IGkgKyAxKTsKKwkJCQlyaV9HZW5lcmF0ZVF1YWwoJnF1ZXJ5YnVmLCBxdWVyeXNlcCwKKwkJCQkJ CQkJYXR0bmFtZSwgcGtfdHlwZSwKKwkJCQkJCQkJcmlpbmZvLT5wcF9lcV9vcHJzW2ldLAorCQkJ CQkJCQlwYXJhbW5hbWUsIHBrX3R5cGUpOworCQkJCXF1ZXJ5c2VwID0gIkFORCI7CisJCQkJcXVl cnlvaWRzW2ldID0gcGtfdHlwZTsKKwkJCX0KKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnF1 ZXJ5YnVmLCAiIEZPUiBLRVkgU0hBUkUgT0YgeCIpOwogCisJCQlma190eXBlID0gUklBdHRUeXBl KGZrX3JlbCwgcmlpbmZvLT5ma19hdHRudW1zW3JpaW5mby0+bmtleXMgLSAxXSk7CiAJCQlhcHBl bmRTdHJpbmdJbmZvKCZxdWVyeWJ1ZiwgIikgeDEgSEFWSU5HICIpOwogCQkJc3ByaW50ZihwYXJh bW5hbWUsICIkJWQiLCByaWluZm8tPm5rZXlzKTsKIAkJCXJpX0dlbmVyYXRlUXVhbCgmcXVlcnli dWYsICIiLApAQCAtNjUzLDEyICs2NjEsMTUgQEAgcmlfQ2hlY2tfUGtfTWF0Y2goUmVsYXRpb24g cGtfcmVsLCBSZWxhdGlvbiBma19yZWwsCiAJCQkJCQkJcmlpbmZvLT5hZ2dlZF9wZXJpb2RfY29u dGFpbmVkX2J5X29wZXIsCiAJCQkJCQkJInBnX2NhdGFsb2cucmFuZ2VfYWdnIiwgQU5ZTVVMVElS QU5HRU9JRCk7CiAJCQlhcHBlbmRTdHJpbmdJbmZvKCZxdWVyeWJ1ZiwgIih4MS5yKSIpOworCQkJ LyogUHJlcGFyZSBhbmQgc2F2ZSB0aGUgcGxhbiB1c2luZyByaV9TcWxTdHJpbmdQbGFuQ3JlYXRl KCkuICovCisJCQlxcGxhbiA9IHJpX1BsYW5DaGVjayhyaWluZm8sIHJpX1NxbFN0cmluZ1BsYW5D cmVhdGUsCisJCQkJCQkJCSBxdWVyeWJ1Zi5kYXRhLCByaWluZm8tPm5rZXlzLCBxdWVyeW9pZHMs CisJCQkJCQkJCSAmcWtleSwgZmtfcmVsLCBwa19yZWwpOwogCQl9Ci0KLQkJLyogUHJlcGFyZSBh bmQgc2F2ZSB0aGUgcGxhbiB1c2luZyByaV9TcWxTdHJpbmdQbGFuQ3JlYXRlKCkuICovCi0JCXFw bGFuID0gcmlfUGxhbkNoZWNrKHJpX1NxbFN0cmluZ1BsYW5DcmVhdGUsCi0JCQkJCQkJIHF1ZXJ5 YnVmLmRhdGEsIHJpaW5mby0+bmtleXMsIHF1ZXJ5b2lkcywKLQkJCQkJCQkgJnFrZXksIGZrX3Jl bCwgcGtfcmVsKTsKKwkJZWxzZQorCQkJcXBsYW4gPSByaV9QbGFuQ2hlY2socmlpbmZvLCByaV9M b29rdXBLZXlJblBrUmVsUGxhbkNyZWF0ZSwKKwkJCQkJCQkJIE5VTEwsIDAgLyogbmFyZ3MgKi8s IE5VTEwgLyogYXJndHlwZXMgKi8sCisJCQkJCQkJCSAmcWtleSwgZmtfcmVsLCBwa19yZWwpOwog CX0KIAogCS8qCkBAIC04NDAsNyArODUxLDcgQEAgcmlfcmVzdHJpY3QoVHJpZ2dlckRhdGEgKnRy aWdkYXRhLCBib29sIGlzX25vX2FjdGlvbikKIAkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcXVl cnlidWYsICIgRk9SIEtFWSBTSEFSRSBPRiB4Iik7CiAKIAkJLyogUHJlcGFyZSBhbmQgc2F2ZSB0 aGUgcGxhbiB1c2luZyByaV9TcWxTdHJpbmdQbGFuQ3JlYXRlKCkuICovCi0JCXFwbGFuID0gcmlf UGxhbkNoZWNrKHJpX1NxbFN0cmluZ1BsYW5DcmVhdGUsCisJCXFwbGFuID0gcmlfUGxhbkNoZWNr KHJpaW5mbywgcmlfU3FsU3RyaW5nUGxhbkNyZWF0ZSwKIAkJCQkJCQkgcXVlcnlidWYuZGF0YSwg cmlpbmZvLT5ua2V5cywgcXVlcnlvaWRzLAogCQkJCQkJCSAmcWtleSwgZmtfcmVsLCBwa19yZWwp OwogCX0KQEAgLTkzNyw3ICs5NDgsNyBAQCBSSV9GS2V5X2Nhc2NhZGVfZGVsKFBHX0ZVTkNUSU9O X0FSR1MpCiAJCX0KIAogCQkvKiBQcmVwYXJlIGFuZCBzYXZlIHRoZSBwbGFuIHVzaW5nIHJpX1Nx bFN0cmluZ1BsYW5DcmVhdGUoKS4gKi8KLQkJcXBsYW4gPSByaV9QbGFuQ2hlY2socmlfU3FsU3Ry aW5nUGxhbkNyZWF0ZSwKKwkJcXBsYW4gPSByaV9QbGFuQ2hlY2socmlpbmZvLCByaV9TcWxTdHJp bmdQbGFuQ3JlYXRlLAogCQkJCQkJCSBxdWVyeWJ1Zi5kYXRhLCByaWluZm8tPm5rZXlzLCBxdWVy eW9pZHMsCiAJCQkJCQkJICZxa2V5LCBma19yZWwsIHBrX3JlbCk7CiAJfQpAQCAtMTA1MSw3ICsx MDYyLDcgQEAgUklfRktleV9jYXNjYWRlX3VwZChQR19GVU5DVElPTl9BUkdTKQogCQlhcHBlbmRC aW5hcnlTdHJpbmdJbmZvKCZxdWVyeWJ1ZiwgcXVhbGJ1Zi5kYXRhLCBxdWFsYnVmLmxlbik7CiAK IAkJLyogUHJlcGFyZSBhbmQgc2F2ZSB0aGUgcGxhbiB1c2luZyByaV9TcWxTdHJpbmdQbGFuQ3Jl YXRlKCkuICovCi0JCXFwbGFuID0gcmlfUGxhbkNoZWNrKHJpX1NxbFN0cmluZ1BsYW5DcmVhdGUs CisJCXFwbGFuID0gcmlfUGxhbkNoZWNrKHJpaW5mbywgcmlfU3FsU3RyaW5nUGxhbkNyZWF0ZSwK IAkJCQkJCQkgcXVlcnlidWYuZGF0YSwgcmlpbmZvLT5ua2V5cyAqIDIsIHF1ZXJ5b2lkcywKIAkJ CQkJCQkgJnFrZXksIGZrX3JlbCwgcGtfcmVsKTsKIAl9CkBAIC0xMjc1LDcgKzEyODYsNyBAQCBy aV9zZXQoVHJpZ2dlckRhdGEgKnRyaWdkYXRhLCBib29sIGlzX3NldF9udWxsLCBpbnQgdGdraW5k KQogCQl9CiAKIAkJLyogUHJlcGFyZSBhbmQgc2F2ZSB0aGUgcGxhbiB1c2luZyByaV9TcWxTdHJp bmdQbGFuQ3JlYXRlKCkuICovCi0JCXFwbGFuID0gcmlfUGxhbkNoZWNrKHJpX1NxbFN0cmluZ1Bs YW5DcmVhdGUsCisJCXFwbGFuID0gcmlfUGxhbkNoZWNrKHJpaW5mbywgcmlfU3FsU3RyaW5nUGxh bkNyZWF0ZSwKIAkJCQkJCQkgcXVlcnlidWYuZGF0YSwgcmlpbmZvLT5ua2V5cywgcXVlcnlvaWRz LAogCQkJCQkJCSAmcWtleSwgZmtfcmVsLCBwa19yZWwpOwogCX0KQEAgLTIwOTAsNiArMjEwMSwx MSBAQCByaV9CdWlsZFF1ZXJ5S2V5KFJJX1F1ZXJ5S2V5ICprZXksIGNvbnN0IFJJX0NvbnN0cmFp bnRJbmZvICpyaWluZm8sCiAJICogc2F2aW5nIGxvdHMgb2Ygd29yayBhbmQgbWVtb3J5IHdoZW4g dGhlcmUgYXJlIG1hbnkgcGFydGl0aW9ucyB3aXRoCiAJICogc2ltaWxhciBGSyBjb25zdHJhaW50 cy4KIAkgKgorCSAqIFdlIG11c3Qgbm90IHNoYXJlIHRoZSBwbGFuIGZvciBSSV9QTEFOX0NIRUNL X0xPT0tVUFBLIHF1ZXJpZXMgZWl0aGVyLAorCSAqIGJlY2F1c2UgaXRzIGV4ZWN1dGlvbiBmdW5j dGlvbiAocmlfTG9va3VwS2V5SW5Qa1JlbCgpKSBleHBlY3RzIHRvIHNlZQorCSAqIHRoZSBSSV9D b25zdHJhaW50SW5mbyBvZiB0aGUgaW5kaXZpZHVhbCBsZWFmIHBhcnRpdGlvbnMgdGhhdCB0aGUK KwkgKiBxdWVyeSBmaXJlZCBvbi4KKwkgKgogCSAqIChOb3RlIHRoYXQgd2UgbXVzdCBzdGlsbCBo YXZlIGEgc2VwYXJhdGUgUklfQ29uc3RyYWludEluZm8gZm9yIGVhY2gKIAkgKiBjb25zdHJhaW50 LCBiZWNhdXNlIHBhcnRpdGlvbnMgY2FuIGhhdmUgZGlmZmVyZW50IGNvbHVtbiBvcmRlcnMsCiAJ ICogcmVzdWx0aW5nIGluIGRpZmZlcmVudCBwa19hdHRudW1zW10gb3IgZmtfYXR0bnVtc1tdIGFy cmF5IGNvbnRlbnRzLikKQEAgLTIwOTcsNyArMjExMyw4IEBAIHJpX0J1aWxkUXVlcnlLZXkoUklf UXVlcnlLZXkgKmtleSwgY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAkgKiBXZSBh c3N1bWUgc3RydWN0IFJJX1F1ZXJ5S2V5IGNvbnRhaW5zIG5vIHBhZGRpbmcgYnl0ZXMsIGVsc2Ug d2UnZCBuZWVkCiAJICogdG8gdXNlIG1lbXNldCB0byBjbGVhciB0aGVtLgogCSAqLwotCWlmIChj b25zdHJfcXVlcnlubyAhPSBSSV9QTEFOX0NIRUNLX0xPT0tVUFBLX0ZST01fUEspCisJaWYgKGNv bnN0cl9xdWVyeW5vICE9IFJJX1BMQU5fQ0hFQ0tfTE9PS1VQUEtfRlJPTV9QSyAmJgorCQljb25z dHJfcXVlcnlubyAhPSBSSV9QTEFOX0NIRUNLX0xPT0tVUFBLKQogCQlrZXktPmNvbnN0cl9pZCA9 IHJpaW5mby0+Y29uc3RyYWludF9yb290X2lkOwogCWVsc2UKIAkJa2V5LT5jb25zdHJfaWQgPSBy aWluZm8tPmNvbnN0cmFpbnRfaWQ7CkBAIC0yMzc1LDEwICsyMzkyLDE3IEBAIEludmFsaWRhdGVD b25zdHJhaW50Q2FjaGVDYWxsQmFjayhEYXR1bSBhcmcsIGludCBjYWNoZWlkLCB1aW50MzIgaGFz aHZhbHVlKQogCX0KIH0KIAordHlwZWRlZiBlbnVtIFJJX1BsYW50eXBlCit7CisJUklfUExBTl9T UUwgPSAwLAorCVJJX1BMQU5fQ0hFQ0tfRlVOQ1RJT04KK30gUklfUGxhbnR5cGU7CisKIC8qIFF1 ZXJ5IHN0cmluZyBvciBhbiBlcXVpdmFsZW50IG5hbWUgdG8gc2hvdyBpbiB0aGUgZXJyb3IgQ09O VEVYVC4gKi8KIHR5cGVkZWYgc3RydWN0IFJJRXJyb3JDYWxsYmFja0FyZwogewogCWNvbnN0IGNo YXIgKnF1ZXJ5OworCVJJX1BsYW50eXBlIHBsYW50eXBlOwogfSBSSUVycm9yQ2FsbGJhY2tBcmc7 CiAKIC8qCkBAIC0yNDA4LDcgKzI0MzIsMTcgQEAgX1JJX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFy ZykKIAkJaW50ZXJuYWxlcnJxdWVyeShxdWVyeSk7CiAJfQogCWVsc2UKLQkJZXJyY29udGV4dCgi U1FMIHN0YXRlbWVudCBcIiVzXCIiLCBxdWVyeSk7CisJeworCQlzd2l0Y2ggKGNhcmctPnBsYW50 eXBlKQorCQl7CisJCQljYXNlIFJJX1BMQU5fU1FMOgorCQkJCWVycmNvbnRleHQoIlNRTCBzdGF0 ZW1lbnQgXCIlc1wiIiwgcXVlcnkpOworCQkJCWJyZWFrOworCQkJY2FzZSBSSV9QTEFOX0NIRUNL X0ZVTkNUSU9OOgorCQkJCWVycmNvbnRleHQoIlJJIGNoZWNrIGZ1bmN0aW9uIFwiJXNcIiIsIHF1 ZXJ5KTsKKwkJCQlicmVhazsKKwkJfQorCX0KIH0KIAogLyoKQEAgLTI2NDQsMTQgKzI2NzgsMzg3 IEBAIHJpX1NxbFN0cmluZ1BsYW5GcmVlKFJJX1BsYW4gKnBsYW4pCiAJfQogfQogCisvKgorICog Q3JlYXRlcyBhbiBSSV9QbGFuIHRvIGxvb2sgYSBrZXkgdXAgaW4gdGhlIFBLIHRhYmxlLgorICoK KyAqIE5vdCBtdWNoIHRvIGRvIGJlc2lkZSBpbml0aWFsaXppbmcgdGhlIGV4cGVjdGVkIGNhbGxi YWNrIG1lbWJlcnMsIGJlY2F1c2UKKyAqIHRoZXJlIGlzIG5vIHF1ZXJ5IHN0cmluZyB0byBwYXJz ZSBhbmQgcGxhbi4KKyAqLworc3RhdGljIHZvaWQKK3JpX0xvb2t1cEtleUluUGtSZWxQbGFuQ3Jl YXRlKFJJX1BsYW4gKnBsYW4sCisJCQkJCQkJICBjb25zdCBjaGFyICpxdWVyeXN0ciwgaW50IG5h cmdzLCBPaWQgKnBhcmFtdHlwZXMpCit7CisJQXNzZXJ0KHF1ZXJ5c3RyID09IE5VTEwpOworCXBs YW4tPnBsYW5fZXhlY19mdW5jID0gcmlfTG9va3VwS2V5SW5Qa1JlbDsKKwlwbGFuLT5wbGFuX2V4 ZWNfYXJnID0gTlVMTDsKKwlwbGFuLT5wbGFuX2lzX3ZhbGlkX2Z1bmMgPSByaV9Mb29rdXBLZXlJ blBrUmVsUGxhbklzVmFsaWQ7CisJcGxhbi0+cGxhbl9mcmVlX2Z1bmMgPSByaV9Mb29rdXBLZXlJ blBrUmVsUGxhbkZyZWU7Cit9CisKKy8qCisgKiBnZXRfZmtleV91bmlxdWVfaW5kZXgKKyAqIAkJ UmV0dXJucyB0aGUgdW5pcXVlIGluZGV4IHVzZWQgYnkgYSBzdXBwb3NlZGx5IGZvcmVpZ24ga2V5 IGNvbnN0cmFpbnQKKyAqLworc3RhdGljIE9pZAorZ2V0X2ZrZXlfdW5pcXVlX2luZGV4KE9pZCBj b25vaWQpCit7CisJT2lkCQkJcmVzdWx0ID0gSW52YWxpZE9pZDsKKwlIZWFwVHVwbGUJdHA7CisK Kwl0cCA9IFNlYXJjaFN5c0NhY2hlMShDT05TVFJPSUQsIE9iamVjdElkR2V0RGF0dW0oY29ub2lk KSk7CisJaWYgKEhlYXBUdXBsZUlzVmFsaWQodHApKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50 IGNvbnR1cCA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVCh0cCk7CisKKwkJaWYgKGNv bnR1cC0+Y29udHlwZSA9PSBDT05TVFJBSU5UX0ZPUkVJR04pCisJCQlyZXN1bHQgPSBjb250dXAt PmNvbmluZGlkOworCQlSZWxlYXNlU3lzQ2FjaGUodHApOworCX0KKworCWlmICghT2lkSXNWYWxp ZChyZXN1bHQpKQorCQllbG9nKEVSUk9SLCAidW5pcXVlIGluZGV4IG5vdCBmb3VuZCBmb3IgZm9y ZWlnbiBrZXkgY29uc3RyYWludCAldSIsCisJCQkgY29ub2lkKTsKKworCXJldHVybiByZXN1bHQ7 Cit9CisKKy8qCisgKiByaV9DaGVja1Blcm1pc3Npb25zCisgKiAJCUNoZWNrIHRoYXQgdGhlIG5l dyB1c2VyIGhhcyBwZXJtaXNzaW9ucyB0byBsb29rIGludG8gdGhlIHNjaGVtYSBvZgorICogCQlh bmQgU0VMRUNUIGZyb20gJ3F1ZXJ5X3JlbCcKKyAqCisgKiBQcm92aWRlZCBmb3Igbm9uLVNRTCBp bXBsZW1lbnRvcnMgb2YgYW4gUklfUGxhbi4KKyAqLworc3RhdGljIHZvaWQKK3JpX0NoZWNrUGVy bWlzc2lvbnMoUmVsYXRpb24gcXVlcnlfcmVsKQoreworCUFjbFJlc3VsdAlhY2xyZXN1bHQ7CisK KwkvKiBVU0FHRSBvbiBzY2hlbWEuICovCisJYWNscmVzdWx0ID0gb2JqZWN0X2FjbGNoZWNrKE5h bWVzcGFjZVJlbGF0aW9uSWQsCisJCQkJCQkJCVJlbGF0aW9uR2V0TmFtZXNwYWNlKHF1ZXJ5X3Jl bCksCisJCQkJCQkJCUdldFVzZXJJZCgpLCBBQ0xfVVNBR0UpOworCWlmIChhY2xyZXN1bHQgIT0g QUNMQ0hFQ0tfT0spCisJCWFjbGNoZWNrX2Vycm9yKGFjbHJlc3VsdCwgT0JKRUNUX1NDSEVNQSwK KwkJCQkJICAgZ2V0X25hbWVzcGFjZV9uYW1lKFJlbGF0aW9uR2V0TmFtZXNwYWNlKHF1ZXJ5X3Jl bCkpKTsKKworCS8qIFNFTEVDVCBvbiByZWxhdGlvbi4gKi8KKwlhY2xyZXN1bHQgPSBwZ19jbGFz c19hY2xjaGVjayhSZWxhdGlvbkdldFJlbGlkKHF1ZXJ5X3JlbCksIEdldFVzZXJJZCgpLAorCQkJ CQkJCQkgIEFDTF9TRUxFQ1QpOworCWlmIChhY2xyZXN1bHQgIT0gQUNMQ0hFQ0tfT0spCisJCWFj bGNoZWNrX2Vycm9yKGFjbHJlc3VsdCwgT0JKRUNUX1RBQkxFLAorCQkJCQkgICBSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShxdWVyeV9yZWwpKTsKK30KKworLyoKKyAqIFRoaXMgY2hlY2tzIHRoYXQg dGhlIGluZGV4IGtleSBvZiB0aGUgdHVwbGUgc3BlY2lmaWVkIGluICduZXdfc2xvdCcgbWF0Y2hl cworICogdGhlIGtleSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZm91bmQgaW4gdGhlIFBLIGluZGV4 IHJlbGF0aW9uICdpZHhyZWwnLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgaW5kZXgga2V5 IG9mIHRoZSB0dXBsZSBtYXRjaGVzIHRoZSBleGlzdGluZyBpbmRleAorICoga2V5LCBmYWxzZSBv dGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sCityZWNoZWNrX21hdGNoZWRfcGtfdHVwbGUoUmVs YXRpb24gaWR4cmVsLCBTY2FuS2V5RGF0YSAqc2tleXMsCisJCQkJCQkgVHVwbGVUYWJsZVNsb3Qg Km5ld19zbG90KQoreworCUluZGV4SW5mbyAqaW5kZXhJbmZvID0gQnVpbGRJbmRleEluZm8oaWR4 cmVsKTsKKwlEYXR1bQkJdmFsdWVzW0lOREVYX01BWF9LRVlTXTsKKwlib29sCQlpc251bGxbSU5E RVhfTUFYX0tFWVNdOworCWJvb2wJCW1hdGNoZWQgPSB0cnVlOworCisJLyogUEsgaW5kZXhlcyBu ZXZlciBoYXZlIHRoZXNlLiAqLworCUFzc2VydChpbmRleEluZm8tPmlpX0V4cHJlc3Npb25zID09 IE5JTCAmJgorCQkgICBpbmRleEluZm8tPmlpX0V4Y2x1c2lvbk9wcyA9PSBOVUxMKTsKKworCS8q IEZvcm0gdGhlIGluZGV4IHZhbHVlcyBhbmQgaXNudWxsIGZsYWdzIGdpdmVuIHRoZSB0YWJsZSB0 dXBsZS4gKi8KKwlGb3JtSW5kZXhEYXR1bShpbmRleEluZm8sIG5ld19zbG90LCBOVUxMLCB2YWx1 ZXMsIGlzbnVsbCk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBpbmRleEluZm8tPmlpX051bUluZGV4 S2V5QXR0cnM7IGkrKykKKwl7CisJCVNjYW5LZXlEYXRhCQkqc2tleSA9ICZza2V5c1tpXTsKKwor CQkvKiBBIFBLIGNvbHVtbiBjYW4gbmV2ZXIgYmUgc2V0IHRvIE5VTEwuICovCisJCUFzc2VydCgh aXNudWxsW2ldKTsKKwkJaWYgKCFEYXR1bUdldEJvb2woRnVuY3Rpb25DYWxsMkNvbGwoJnNrZXkt PnNrX2Z1bmMsCisJCQkJCQkJCQkJCXNrZXktPnNrX2NvbGxhdGlvbiwKKwkJCQkJCQkJCQkJc2tl eS0+c2tfYXJndW1lbnQsCisJCQkJCQkJCQkJCXZhbHVlc1tpXSkpKQorCQl7CisJCQltYXRjaGVk ID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBtYXRjaGVkOworfQorCisv KgorICogQ2hlY2tzIHdoZXRoZXIgYSB0dXBsZSBjb250YWluaW5nIHRoZSBnaXZlbiB1bmlxdWUg a2V5IGdpdmVuIGJ5IHBrX3ZhbHMsCisgKiBwa19udWxscyBleGlzdHMgaW4gJ3BrX3JlbCcuICBU aGUga2V5IGlzIGxvb2tlZCB1cCB1c2luZyB0aGUgY29uc3RyYWludCdzCisgKiBpbmRleCBnaXZl biBpbiBwbGFuLT5yaWluZm8uCisgKgorICogSWYgJ3BrX3JlbCcgaXMgYSBwYXJ0aXRpb25lZCB0 YWJsZSwgdGhlIGNoZWNrIGlzIHBlcmZvcm1lZCBvbiBpdHMgbGVhZgorICogcGFydGl0aW9uIHRo YXQgd291bGQgY29udGFpbiB0aGUga2V5LgorICoKKyAqIFRoZSBwcm92aWRlZCB0dXBsZSBpcyBl aXRoZXIgdGhlIG9uZSBiZWluZyBpbnNlcnRlZCBpbnRvIHRoZSByZWZlcmVuY2luZworICogcmVs YXRpb24gKGZrX3JlbCkgb3IgdGhlIG9uZSBiZWluZyBkZWxldGVkIGZyb20gdGhlIHJlZmVyZW5j ZWQgcmVsYXRpb24KKyAqIChwa19yZWwpLgorICovCitzdGF0aWMgaW50CityaV9Mb29rdXBLZXlJ blBrUmVsKHN0cnVjdCBSSV9QbGFuICpwbGFuLAorCQkJCQlSZWxhdGlvbiBma19yZWwsIFJlbGF0 aW9uIHBrX3JlbCwKKwkJCQkJRGF0dW0gKnBrX3ZhbHMsIGNoYXIgKnBrX251bGxzLAorCQkJCQlT bmFwc2hvdCBjcm9zc2NoZWNrX3NuYXBzaG90LAorCQkJCQlpbnQgbGltaXQsIENtZFR5cGUgKmxh c3Rfc3RtdF9jbWR0eXBlKQoreworCWNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8gPSBw bGFuLT5yaWluZm87CisJT2lkCQkJY29uc3RyX2lkID0gcmlpbmZvLT5jb25zdHJhaW50X2lkOwor CU9pZAkJCWlkeG9pZDsKKwlSZWxhdGlvbglpZHhyZWw7CisJUmVsYXRpb24JbGVhZl9wa19yZWwg PSBOVUxMOworCWludAkJCW51bV9wazsKKwlpbnQJCQlpOworCWludAkJCXR1cGxlc19wcm9jZXNz ZWQgPSAwOworCWNvbnN0IE9pZCAgKmVxX29wcnM7CisJRGF0dW0JCXBrX3ZhbHVlc1tJTkRFWF9N QVhfS0VZU107CisJYm9vbAkJcGtfaXNudWxsc1tJTkRFWF9NQVhfS0VZU107CisJU2NhbktleURh dGEgc2tleVtJTkRFWF9NQVhfS0VZU107CisJSW5kZXhTY2FuRGVzYwlzY2FuOworCVR1cGxlVGFi bGVTbG90ICpvdXRzbG90OworCVJJRXJyb3JDYWxsYmFja0FyZyByaWNhbGxiYWNrYXJnOworCUVy cm9yQ29udGV4dENhbGxiYWNrIHJpZXJyY29udGV4dDsKKworCS8qIFdlJ3JlIGVmZmVjdGl2ZWx5 IGRvaW5nIGEgQ01EX1NFTEVDVCBiZWxvdy4gKi8KKwkqbGFzdF9zdG10X2NtZHR5cGUgPSBDTURf U0VMRUNUOworCisJLyoKKwkgKiBTZXR1cCBlcnJvciB0cmFjZWJhY2sgc3VwcG9ydCBmb3IgZXJl cG9ydCgpCisJICovCisJcmljYWxsYmFja2FyZy5xdWVyeSA9IHBzdHJkdXAoInJpX0xvb2t1cEtl eUluUGtSZWwiKTsKKwlyaWNhbGxiYWNrYXJnLnBsYW50eXBlID0gUklfUExBTl9DSEVDS19GVU5D VElPTjsKKwlyaWVycmNvbnRleHQuY2FsbGJhY2sgPSBfUklfZXJyb3JfY2FsbGJhY2s7CisJcmll cnJjb250ZXh0LmFyZyA9ICZyaWNhbGxiYWNrYXJnOworCXJpZXJyY29udGV4dC5wcmV2aW91cyA9 IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZyaWVycmNvbnRl eHQ7CisKKwkvKiBYWFggTWF5YmUgYWZ0ZXJUcmlnZ2VySW52b2tlRXZlbnRzKCkgLyBBZnRlclRy aWdnZXJFeGVjdXRlKCkgc2hvdWxkPyAqLworCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwly aV9DaGVja1Blcm1pc3Npb25zKHBrX3JlbCk7CisKKwkvKgorCSAqIENob29zZSB0aGUgZXF1YWxp dHkgb3BlcmF0b3JzIHRvIHVzZSB3aGVuIHNjYW5uaW5nIHRoZSBQSyBpbmRleCBiZWxvdy4KKwkg KgorCSAqIE1heSBuZWVkIHRvIGNhc3QgdGhlIGZvcmVpZ24ga2V5IHZhbHVlIChvZiB0aGUgRksg Y29sdW1uJ3MgdHlwZSkgdG8KKwkgKiB0aGUgY29ycmVzcG9uZGluZyBQSyBjb2x1bW4ncyB0eXBl IGlmIHRoZSBlcXVhbGl0eSBvcGVyYXRvcgorCSAqIGRlbWFuZHMgaXQuCisJICovCisJaWYgKHBs YW4tPmNvbnN0cl9xdWVyeW5vID09IFJJX1BMQU5fQ0hFQ0tfTE9PS1VQUEtfRlJPTV9QSykKKwl7 CisJCS8qIFVzZSBQSyA9IFBLIGVxdWFsaXR5IG9wZXJhdG9yLiAqLworCQllcV9vcHJzID0gcmlp bmZvLT5wcF9lcV9vcHJzOworCisJCWZvciAoaSA9IDA7IGkgPCByaWluZm8tPm5rZXlzOyBpKysp CisJCXsKKwkJCWlmIChwa19udWxsc1tpXSAhPSAnbicpCisJCQl7CisJCQkJcGtfaXNudWxsc1tp XSA9IGZhbHNlOworCQkJCXBrX3ZhbHVlc1tpXSA9IHBrX3ZhbHNbaV07CisJCQl9CisJCQllbHNl CisJCQl7CisJCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQlB c3NlcnQocGxhbi0+Y29uc3RyX3F1ZXJ5bm8gPT0gUklfUExBTl9DSEVDS19MT09LVVBQSyk7CisJ CS8qIFVzZSBQSyA9IEZLIGVxdWFsaXR5IG9wZXJhdG9yLiAqLworCQllcV9vcHJzID0gcmlpbmZv LT5wZl9lcV9vcHJzOworCisJCWZvciAoaSA9IDA7IGkgPCByaWluZm8tPm5rZXlzOyBpKyspCisJ CXsKKwkJCWlmIChwa19udWxsc1tpXSAhPSAnbicpCisJCQl7CisJCQkJT2lkCQllcV9vcHIgPSBl cV9vcHJzW2ldOworCQkJCU9pZAkJdHlwZWlkID0gUklBdHRUeXBlKGZrX3JlbCwgcmlpbmZvLT5m a19hdHRudW1zW2ldKTsKKwkJCQlSSV9Db21wYXJlSGFzaEVudHJ5ICplbnRyeSA9IHJpX0hhc2hD b21wYXJlT3AoZXFfb3ByLCB0eXBlaWQpOworCisJCQkJcGtfaXNudWxsc1tpXSA9IGZhbHNlOwor CQkJCXBrX3ZhbHVlc1tpXSA9IHBrX3ZhbHNbaV07CisJCQkJaWYgKE9pZElzVmFsaWQoZW50cnkt PmNhc3RfZnVuY19maW5mby5mbl9vaWQpKQorCQkJCXsKKwkJCQkJcGtfdmFsdWVzW2ldID0gRnVu Y3Rpb25DYWxsMygmZW50cnktPmNhc3RfZnVuY19maW5mbywKKwkJCQkJCQkJCQkJCSBwa192YWxz W2ldLAorCQkJCQkJCQkJCQkJIEludDMyR2V0RGF0dW0oLTEpLCAvKiB0eXBtb2QgKi8KKwkJCQkJ CQkJCQkJCSBCb29sR2V0RGF0dW0oZmFsc2UpKTsgLyogaW1wbGljaXQgY29lcmNpb24gKi8KKwkJ CQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCX0KKwkJfQor CX0KKworCS8qCisJICogT3BlbiB0aGUgY29uc3RyYWludCBpbmRleCB0byBiZSBzY2FubmVkLgor CSAqCisJICogSWYgdGhlIHRhcmdldCB0YWJsZSBpcyBwYXJ0aXRpb25lZCwgd2UgbXVzdCBsb29r IHVwIHRoZSBsZWFmIHBhcnRpdGlvbgorCSAqIGFuZCBpdHMgY29ycmVzcG9uZGluZyB1bmlxdWUg aW5kZXggdG8gc2VhcmNoIHRoZSBrZXlzIGluLgorCSAqLworCWlkeG9pZCA9IGdldF9ma2V5X3Vu aXF1ZV9pbmRleChjb25zdHJfaWQpOworCWlmIChwa19yZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBS RUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCXsKKwkJT2lkCQlsZWFmX2lkeG9pZDsKKwkJUGFy dGl0aW9uRGlyZWN0b3J5IHBhcnRkaXI7CisKKwkJLyoKKwkJICogUGFzcyB0aGUgbGF0ZXN0IHNu YXBzaG90IGZvciBvbWl0X2RldGFjaGVkX3NuYXBzaG90IHNvIHRoYXQgYW55CisJCSAqIGRldGFj aC1wZW5kaW5nIHBhcnRpdGlvbnMgYXJlIGNvcnJlY3RseSBvbWl0dGVkIG9yIGluY2x1ZGVkIGZy b20KKwkJICogdGhlIGNvbnNpZGVyYXRpb25zIG9mIHRoaXMgbG9va3VwLiAgVGhlIFBhcnRpdGlv bkRlc2MgbWFjaGluZXJ5CisJCSAqIHRoYXQgcnVucyBhcyBwYXJ0IG9mIHRoaXMgd2lsbCBuZWVk IHRvIHVzZSB0aGUgc25hcHNob3QgdG8gZGV0ZXJtaW5lCisJCSAqIHdoZXRoZXIgdG8gb21pdCBv ciBpbmNsdWRlIGFueSBkZXRhY2gtcGVuZGluZyBwYXJ0aXRpb24gYmFzZWQgb24gdGhlCisJCSAq IHdoZXRoZXIgdGhlIHBnX2luaGVyaXRzIHJvdyB0aGF0IG1hcmtzIGl0IGFzIGRldGFjaC1wZW5k aW5nIGlzCisJCSAqIGlzIHZpc2libGUgdG8gaXQgb3Igbm90LCByZXNwZWN0aXZlbHkuCisJCSAq LworCQlwYXJ0ZGlyID0gQ3JlYXRlUGFydGl0aW9uRGlyZWN0b3J5KEN1cnJlbnRNZW1vcnlDb250 ZXh0LAorCQkJCQkJCQkJCSAgIEdldExhdGVzdFNuYXBzaG90KCkpOworCQlsZWFmX3BrX3JlbCA9 IEV4ZWNHZXRMZWFmUGFydGl0aW9uRm9yS2V5KHBhcnRkaXIsCisJCQkJCQkJCQkJCQkgcGtfcmVs LCByaWluZm8tPm5rZXlzLAorCQkJCQkJCQkJCQkJIHJpaW5mby0+cGtfYXR0bnVtcywKKwkJCQkJ CQkJCQkJCSBwa192YWx1ZXMsIHBrX2lzbnVsbHMsCisJCQkJCQkJCQkJCQkgaWR4b2lkLCBSb3dT aGFyZUxvY2ssCisJCQkJCQkJCQkJCQkgJmxlYWZfaWR4b2lkKTsKKworCQkvKgorCQkgKiBYWFgg LSBXb3VsZCBiZSBuaWNlIGlmIHRoaXMgY291bGQgYmUgc2F2ZWQgYWNyb3NzIGNhbGxzLiBQcm9i bGVtCisJCSAqIHdpdGgganVzdCBwdXR0aW5nIGl0IGluIFJJX1BsYW4ucGxhbl9leGVjX2FyZyBp cyB0aGF0IHRoZSBSSV9QbGFuCisJCSAqIGlzIGNhY2hlZCBmb3IgdGhlIHNlc3Npb24gZHVyYXRp b24sIHdoZXJlYXMgdGhlIFBhcnRpdGlvbkRpcmVjdG9yeQorCQkgKiBjYW4ndCBsYXN0IHBhc3Qg dGhlIHRyYW5zYWN0aW9uLgorCQkgKi8KKwkJRGVzdHJveVBhcnRpdGlvbkRpcmVjdG9yeShwYXJ0 ZGlyKTsKKworCQkvKgorCQkgKiBJZiBubyBzdWl0YWJsZSBsZWFmIHBhcnRpdGlvbiBleGlzdHMs IG5laXRoZXIgY2FuIHRoZSBrZXkgd2UncmUKKwkJICogbG9va2luZyBmb3IuCisJCSAqLworCQlp ZiAobGVhZl9wa19yZWwgPT0gTlVMTCkKKwkJCWdvdG8gZG9uZTsKKworCQlwa19yZWwgPSBsZWFm X3BrX3JlbDsKKwkJaWR4b2lkID0gbGVhZl9pZHhvaWQ7CisJfQorCWlkeHJlbCA9IGluZGV4X29w ZW4oaWR4b2lkLCBSb3dTaGFyZUxvY2spOworCisJLyoKKwkgKiBTZXQgdXAgU2NhbktleXMgZm9y IHRoZSBpbmRleCBzY2FuLiAgVGhpcyBpcyBlc3NlbnRpYWxseSBob3cKKwkgKiBFeGVjSW5kZXhC dWlsZFNjYW5LZXlzKCkgc2V0cyB0aGVtIHVwLgorCSAqLworCW51bV9wayA9IEluZGV4UmVsYXRp b25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMoaWR4cmVsKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVt X3BrOyBpKyspCisJeworCQlpbnQJCQlwa2F0dG5vID0gaSArIDE7CisJCU9pZAkJCWxlZnR0eXBl LAorCQkJCQlyaWdodHR5cGU7CisJCU9pZAkJCW9wZXJhdG9yID0gZXFfb3Byc1tpXTsKKwkJT2lk CQkJb3BmYW1pbHkgPSBpZHhyZWwtPnJkX29wZmFtaWx5W2ldOworCQlpbnQJCQlzdHJhdDsKKwkJ UmVnUHJvY2VkdXJlIHJlZ29wID0gZ2V0X29wY29kZShvcGVyYXRvcik7CisKKwkJQXNzZXJ0KCFw a19pc251bGxzW2ldKTsKKwkJZ2V0X29wX29wZmFtaWx5X3Byb3BlcnRpZXMob3BlcmF0b3IsIG9w ZmFtaWx5LCBmYWxzZSwgJnN0cmF0LAorCQkJCQkJCQkgICAmbGVmdHR5cGUsICZyaWdodHR5cGUp OworCQlTY2FuS2V5RW50cnlJbml0aWFsaXplKCZza2V5W2ldLCAwLCBwa2F0dG5vLCBzdHJhdCwg cmlnaHR0eXBlLAorCQkJCQkJCSAgIGlkeHJlbC0+cmRfaW5kY29sbGF0aW9uW2ldLCByZWdvcCwK KwkJCQkJCQkgICBwa192YWx1ZXNbaV0pOworCX0KKworCUFzc2VydChBY3RpdmVTbmFwc2hvdFNl dCgpKTsKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHBrX3JlbCwgaWR4cmVsLCBHZXRBY3RpdmVT bmFwc2hvdCgpLCBudW1fcGssIDApOworCisJLyogSW5zdGFsbCB0aGUgU2NhbktleXMuICovCisJ aW5kZXhfcmVzY2FuKHNjYW4sIHNrZXksIG51bV9waywgTlVMTCwgMCk7CisKKwkvKiBMb29rIGZv ciB0aGUgdHVwbGUsIGFuZCBpZiBmb3VuZCwgdHJ5IHRvIGxvY2sgaXQgaW4ga2V5IHNoYXJlIG1v ZGUuICovCisJb3V0c2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHBrX3JlbCwgTlVMTCk7CisJd2hp bGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgb3V0c2xv dCkpCisJeworCQlib29sCXR1cGxlX2NvbmN1cnJlbnRseV91cGRhdGVkOworCisJCS8qCisJCSAq IElmIHdlIGZhaWwgdG8gbG9jayB0aGUgdHVwbGUgZm9yIHdoYXRldmVyIHJlYXNvbiwgYXNzdW1l IGl0IGRvZXNuJ3QKKwkJICogZXhpc3QuICBJZiB0aGUgbG9ja2VkIHR1cGxlIGlzIHRoZSBvbmUg dGhhdCB3YXMgZm91bmQgdG8gYmUgdXBkYXRlZAorCQkgKiBjb25jdXJyZW50bHksIHJldHJ5Lgor CQkgKi8KKwkJaWYgKEV4ZWNMb2NrVGFibGVUdXBsZShwa19yZWwsICYob3V0c2xvdC0+dHRzX3Rp ZCksIG91dHNsb3QsCisJCQkJCQkJICAgR2V0QWN0aXZlU25hcHNob3QoKSwKKwkJCQkJCQkgICBH ZXRDdXJyZW50Q29tbWFuZElkKGZhbHNlKSwKKwkJCQkJCQkgICBMb2NrVHVwbGVLZXlTaGFyZSwK KwkJCQkJCQkgICBMb2NrV2FpdEJsb2NrLAorCQkJCQkJCSAgICZ0dXBsZV9jb25jdXJyZW50bHlf dXBkYXRlZCkpCisJCXsKKwkJCWJvb2wJbWF0Y2hlZCA9IHRydWU7CisKKwkJCS8qCisJCQkgKiBJ ZiB0aGUgbWF0Y2hlZCB0YWJsZSB0dXBsZSBoYXMgYmVlbiB1cGRhdGVkLCBjaGVjayBpZiB0aGUg a2V5IGlzCisJCQkgKiBzdGlsbCB0aGUgc2FtZS4KKwkJCSAqCisJCQkgKiBUaGlzIGVtdWxhdGVz IEV2YWxQbGFuUXVhbCgpIGluIHRoZSBleGVjdXRvci4KKwkJCSAqLworCQkJaWYgKHR1cGxlX2Nv bmN1cnJlbnRseV91cGRhdGVkICYmCisJCQkJIXJlY2hlY2tfbWF0Y2hlZF9wa190dXBsZShpZHhy ZWwsIHNrZXksIG91dHNsb3QpKQorCQkJCW1hdGNoZWQgPSBmYWxzZTsKKworCQkJaWYgKG1hdGNo ZWQpCisJCQkJdHVwbGVzX3Byb2Nlc3NlZCA9IDE7CisJCX0KKworCQlicmVhazsKKwl9CisKKwlp bmRleF9lbmRzY2FuKHNjYW4pOworCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qob3V0c2xv dCk7CisKKwkvKiBEb24ndCByZWxlYXNlIGxvY2sgdW50aWwgY29tbWl0LiAqLworCWluZGV4X2Ns b3NlKGlkeHJlbCwgTm9Mb2NrKTsKKworCS8qIENsb3NlIGxlYWYgcGFydGl0aW9uIHJlbGF0aW9u IGlmIGFueS4gKi8KKwlpZiAobGVhZl9wa19yZWwpCisJCXRhYmxlX2Nsb3NlKGxlYWZfcGtfcmVs LCBOb0xvY2spOworCitkb25lOgorCS8qCisJICogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNr CisJICovCisJZXJyb3JfY29udGV4dF9zdGFjayA9IHJpZXJyY29udGV4dC5wcmV2aW91czsKKwor CXJldHVybiB0dXBsZXNfcHJvY2Vzc2VkOworfQorCitzdGF0aWMgYm9vbAorcmlfTG9va3VwS2V5 SW5Qa1JlbFBsYW5Jc1ZhbGlkKFJJX1BsYW4gKnBsYW4pCit7CisJLyogTmV2ZXIgc3RvcmUgYW55 dGhpbmcgdGhhdCBjYW4gYmUgaW52YWxpZGF0ZWQuICovCisJcmV0dXJuIHRydWU7Cit9CisKK3N0 YXRpYyB2b2lkCityaV9Mb29rdXBLZXlJblBrUmVsUGxhbkZyZWUoUklfUGxhbiAqcGxhbikKK3sK KwkvKiBOb3RoaW5nIHRvIGZyZWUuICovCit9CisKIC8qCiAgKiBDcmVhdGUgYW4gUklfUGxhbiBm b3IgYSBnaXZlbiBSSSBjaGVjayBxdWVyeSBhbmQgaW5pdGlhbGl6ZSB0aGUKICAqIHBsYW4gY2Fs bGJhY2tzIGFuZCBleGVjdXRpb24gYXJndW1lbnQgdXNpbmcgdGhlIGNhbGxlciBzcGVjaWZpZWQK ICAqIGZ1bmN0aW9uLgogICovCiBzdGF0aWMgUklfUGxhbiAqCi1yaV9QbGFuQ3JlYXRlKFJJX1Bs YW5DcmVhdGVGdW5jX3R5cGUgcGxhbl9jcmVhdGVfZnVuYywKLQkJCSAgY29uc3QgY2hhciAqcXVl cnlzdHIsIGludCBuYXJncywgT2lkICpwYXJhbXR5cGVzKQorcmlfUGxhbkNyZWF0ZShjb25zdCBS SV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAorCQkJICBSSV9QbGFuQ3JlYXRlRnVuY190eXBlIHBs YW5fY3JlYXRlX2Z1bmMsCisJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5c3RyLCBpbnQgbmFyZ3MsIE9p ZCAqcGFyYW10eXBlcywKKwkJCSAgaW50IGNvbnN0cl9xdWVyeW5vKQogewogCVJJX1BsYW4JICAg KnBsYW47CiAJTWVtb3J5Q29udGV4dCBwbGFuY3h0LApAQCAtMjY2Niw2ICszMDczLDggQEAgcmlf UGxhbkNyZWF0ZShSSV9QbGFuQ3JlYXRlRnVuY190eXBlIHBsYW5fY3JlYXRlX2Z1bmMsCiAJCQkJ CQkJCQlBTExPQ1NFVF9TTUFMTF9TSVpFUyk7CiAJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRj aFRvKHBsYW5jeHQpOwogCXBsYW4gPSAoUklfUGxhbiAqKSBwYWxsb2MwKHNpemVvZigqcGxhbikp OworCXBsYW4tPnJpaW5mbyA9IHJpaW5mbzsKKwlwbGFuLT5jb25zdHJfcXVlcnlubyA9IGNvbnN0 cl9xdWVyeW5vOwogCXBsYW4tPnBsYW5jeHQgPSBwbGFuY3h0OwogCXBsYW4tPm5hcmdzID0gbmFy Z3M7CiAJaWYgKHBsYW4tPm5hcmdzID4gMCkKQEAgLTI3MzAsNyArMzEzOSw4IEBAIHJpX0ZyZWVQ bGFuKFJJX1BsYW4gKnBsYW4pCiAgKiBQcmVwYXJlIGV4ZWN1dGlvbiBwbGFuIGZvciBhIHF1ZXJ5 IHRvIGVuZm9yY2UgYW4gUkkgcmVzdHJpY3Rpb24KICAqLwogc3RhdGljIFJJX1BsYW4gKgotcmlf UGxhbkNoZWNrKFJJX1BsYW5DcmVhdGVGdW5jX3R5cGUgcGxhbl9jcmVhdGVfZnVuYywKK3JpX1Bs YW5DaGVjayhjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAorCQkJIFJJX1BsYW5DcmVh dGVGdW5jX3R5cGUgcGxhbl9jcmVhdGVfZnVuYywKIAkJCSBjb25zdCBjaGFyICpxdWVyeXN0ciwg aW50IG5hcmdzLCBPaWQgKmFyZ3R5cGVzLAogCQkJIFJJX1F1ZXJ5S2V5ICpxa2V5LCBSZWxhdGlv biBma19yZWwsIFJlbGF0aW9uIHBrX3JlbCkKIHsKQEAgLTI3NTQsNyArMzE2NCw4IEBAIHJpX1Bs YW5DaGVjayhSSV9QbGFuQ3JlYXRlRnVuY190eXBlIHBsYW5fY3JlYXRlX2Z1bmMsCiAJCQkJCQkg ICBzYXZlX3NlY19jb250ZXh0IHwgU0VDVVJJVFlfTE9DQUxfVVNFUklEX0NIQU5HRSB8CiAJCQkJ CQkgICBTRUNVUklUWV9OT0ZPUkNFX1JMUyk7CiAJLyogQ3JlYXRlIHRoZSBwbGFuICovCi0JcXBs YW4gPSByaV9QbGFuQ3JlYXRlKHBsYW5fY3JlYXRlX2Z1bmMsIHF1ZXJ5c3RyLCBuYXJncywgYXJn dHlwZXMpOworCXFwbGFuID0gcmlfUGxhbkNyZWF0ZShyaWluZm8sIHBsYW5fY3JlYXRlX2Z1bmMs IHF1ZXJ5c3RyLCBuYXJncywKKwkJCQkJCSAgYXJndHlwZXMsIHFrZXktPmNvbnN0cl9xdWVyeW5v KTsKIAogCS8qIFJlc3RvcmUgVUlEIGFuZCBzZWN1cml0eSBjb250ZXh0ICovCiAJU2V0VXNlcklk QW5kU2VjQ29udGV4dChzYXZlX3VzZXJpZCwgc2F2ZV9zZWNfY29udGV4dCk7CkBAIC0zMzk5LDcg KzM4MTAsMTAgQEAgcmlfQ29tcGFyZVdpdGhDYXN0KE9pZCBlcV9vcHIsIE9pZCB0eXBlaWQsIE9p ZCBjb2xsaWQsCiAgKiByaV9IYXNoQ29tcGFyZU9wIC0KICAqCiAgKiBTZWUgaWYgd2Uga25vdyBo b3cgdG8gY29tcGFyZSB0d28gdmFsdWVzLCBhbmQgY3JlYXRlIGEgbmV3IGhhc2ggZW50cnkKLSAq IGlmIG5vdC4KKyAqIGlmIG5vdC4gIFRoZSBlbnRyeSBjb250YWlucyB0aGUgRm1nckluZm8gb2Yg dGhlIGVxdWFsaXR5IG9wZXJhdG9yIGZ1bmN0aW9uCisgKiBhbmQgdGhhdCBvZiB0aGUgY2FzdCBm dW5jdGlvbiwgaWYgb25lIGlzIG5lZWRlZCB0byBjb252ZXJ0IHRoZSByaWdodAorICogb3BlcmFu ZCAod2hvc2UgdHlwZSBPSUQgaGFzIGJlZW4gcGFzc2VkKSBiZWZvcmUgcGFzc2luZyBpdCB0byB0 aGUgZXF1YWxpdHkKKyAqIGZ1bmN0aW9uLgogICovCiBzdGF0aWMgUklfQ29tcGFyZUhhc2hFbnRy eSAqCiByaV9IYXNoQ29tcGFyZU9wKE9pZCBlcV9vcHIsIE9pZCB0eXBlaWQpCkBAIC0zNDU1LDgg KzM4NjksMTYgQEAgcmlfSGFzaENvbXBhcmVPcChPaWQgZXFfb3ByLCBPaWQgdHlwZWlkKQogCQkg KiBtb21lbnQgc2luY2UgdGhhdCB3aWxsIG5ldmVyIGJlIGdlbmVyYXRlZCBmb3IgaW1wbGljaXQg Y29lcmNpb25zLgogCQkgKi8KIAkJb3BfaW5wdXRfdHlwZXMoZXFfb3ByLCAmbGVmdHR5cGUsICZy aWdodHR5cGUpOwotCQlBc3NlcnQobGVmdHR5cGUgPT0gcmlnaHR0eXBlKTsKLQkJaWYgKHR5cGVp ZCA9PSBsZWZ0dHlwZSkKKworCQkvKgorCQkgKiBEb24ndCBuZWVkIHRvIGNhc3QgaWYgdGhlIHZh bHVlcyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZQorCQkgKiBvcGVyYXRvciB3aWxsIGJlIG9m IGV4cGVjdGVkIG9wZXJhbmQgdHlwZShzKS4gIFRoZSBvcGVyYXRvciBjYW4gYmUKKwkJICogY3Jv c3MtdHlwZSAoc3VjaCBhcyB3aGVuIGNhbGxlZCBieSByaV9Mb29rdXBLZXlJblBrUmVsKCkpLCBp biB3aGljaAorCQkgKiBjYXNlLCB3ZSBvbmx5IG5lZWQgdGhlIGNhc3QgaWYgdGhlIHJpZ2h0IG9w ZXJhbmQgdmFsdWUgZG9lc24ndCBtYXRjaAorCQkgKiB0aGUgdHlwZSBleHBlY3RlZCBieSB0aGUg b3BlcmF0b3IuCisJCSAqLworCQlpZiAoKGxlZnR0eXBlID09IHJpZ2h0dHlwZSAmJiB0eXBlaWQg PT0gbGVmdHR5cGUpIHx8CisJCQkobGVmdHR5cGUgIT0gcmlnaHR0eXBlICYmIHR5cGVpZCA9PSBy aWdodHR5cGUpKQogCQkJY2FzdGZ1bmMgPSBJbnZhbGlkT2lkOwkvKiBzaW1wbGVzdCBjYXNlICov CiAJCWVsc2UKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRp dGlvbi5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCmluZGV4IGMwOWJj ODNiMmEuLmUyODU0MjdiNDggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQ YXJ0aXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKQEAg LTMxLDYgKzMxLDEzIEBAIGV4dGVybiBSZXN1bHRSZWxJbmZvICpFeGVjRmluZFBhcnRpdGlvbihN b2RpZnlUYWJsZVN0YXRlICptdHN0YXRlLAogCQkJCQkJCQkJCUVTdGF0ZSAqZXN0YXRlKTsKIGV4 dGVybiB2b2lkIEV4ZWNDbGVhbnVwVHVwbGVSb3V0aW5nKE1vZGlmeVRhYmxlU3RhdGUgKm10c3Rh dGUsCiAJCQkJCQkJCQlQYXJ0aXRpb25UdXBsZVJvdXRpbmcgKnByb3V0ZSk7CitleHRlcm4gUmVs YXRpb24gRXhlY0dldExlYWZQYXJ0aXRpb25Gb3JLZXkoUGFydGl0aW9uRGlyZWN0b3J5IHBhcnRk aXIsCisJCQkJCQkJCQkJICAgUmVsYXRpb24gcm9vdF9yZWwsCisJCQkJCQkJCQkJICAgaW50IGtl eV9uYXR0cywKKwkJCQkJCQkJCQkgICBjb25zdCBBdHRyTnVtYmVyICprZXlfYXR0bnVtcywKKwkJ CQkJCQkJCQkgICBEYXR1bSAqa2V5X3ZhbHMsIGJvb2wgKmtleV9udWxscywKKwkJCQkJCQkJCQkg ICBPaWQgcm9vdF9pZHhvaWQsIGludCBsb2NrbW9kZSwKKwkJCQkJCQkJCQkgICBPaWQgKmxlYWZf aWR4b2lkKTsKIAogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0 b3IuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKaW5kZXggYzhlNmJlZmNhOC4u ZmJmNmI2YzJjNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAor KysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCkBAIC0yNjIsNiArMjYyLDE1IEBA IGV4dGVybiB2b2lkIEV4ZWNTaHV0ZG93bk5vZGUoUGxhblN0YXRlICpub2RlKTsKIGV4dGVybiB2 b2lkIEV4ZWNTZXRUdXBsZUJvdW5kKGludDY0IHR1cGxlc19uZWVkZWQsIFBsYW5TdGF0ZSAqY2hp bGRfbm9kZSk7CiAKIAorLyoKKyAqIGZ1bmN0aW9ucyBpbiBleGVjTG9ja1Jvd3MuYworICovCisK K2V4dGVybiBib29sIEV4ZWNMb2NrVGFibGVUdXBsZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBv aW50ZXIgdGlkLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkgICBTbmFwc2hvdCBzbmFwc2hv dCwgQ29tbWFuZElkIGNpZCwKKwkJCQkgICBMb2NrVHVwbGVNb2RlIGxvY2ttb2RlLCBMb2NrV2Fp dFBvbGljeSB3YWl0UG9saWN5LAorCQkJCSAgIGJvb2wgKnR1cGxlX2NvbmN1cnJlbnRseV91cGRh dGVkKTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCUV4ZWNQcm9jTm9kZQogICoKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9may1jb25jdXJyZW50LXBrLXVwZC5vdXQgYi9zcmMv dGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvZmstY29uY3VycmVudC1way11cGQub3V0Cm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjliYmVjNjM4YWMKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvZmstY29uY3VycmVudC1way11cGQub3V0 CkBAIC0wLDAgKzEsNTggQEAKK1BhcnNlZCB0ZXN0IHNwZWMgd2l0aCAyIHNlc3Npb25zCisKK3N0 YXJ0aW5nIHBlcm11dGF0aW9uOiBzMnVrZXkgczFpIHMyYyBzMWMgczJzIHMxcworc3RlcCBzMnVr ZXk6IFVQREFURSBwYXJlbnQgU0VUIHBhcmVudF9rZXkgPSAyIFdIRVJFIHBhcmVudF9rZXkgPSAx Oworc3RlcCBzMWk6IElOU0VSVCBJTlRPIGNoaWxkIFZBTFVFUyAoMSwgMSk7IDx3YWl0aW5nIC4u Lj4KK3N0ZXAgczJjOiBDT01NSVQ7CitzdGVwIHMxaTogPC4uLiBjb21wbGV0ZWQ+CitFUlJPUjog IGluc2VydCBvciB1cGRhdGUgb24gdGFibGUgImNoaWxkIiB2aW9sYXRlcyBmb3JlaWduIGtleSBj b25zdHJhaW50ICJjaGlsZF9wYXJlbnRfa2V5X2ZrZXkiCitzdGVwIHMxYzogQ09NTUlUOworc3Rl cCBzMnM6IFNFTEVDVCAqIEZST00gcGFyZW50OworcGFyZW50X2tleXxhdXgKKy0tLS0tLS0tLS0r LS0tCisgICAgICAgICAyfGZvbworKDEgcm93KQorCitzdGVwIHMxczogU0VMRUNUICogRlJPTSBj aGlsZDsKK2NoaWxkX2tleXxwYXJlbnRfa2V5CistLS0tLS0tLS0rLS0tLS0tLS0tLQorKDAgcm93 cykKKworCitzdGFydGluZyBwZXJtdXRhdGlvbjogczJ1YXV4IHMxaSBzMmMgczFjIHMycyBzMXMK K3N0ZXAgczJ1YXV4OiBVUERBVEUgcGFyZW50IFNFVCBhdXggPSAnYmFyJyBXSEVSRSBwYXJlbnRf a2V5ID0gMTsKK3N0ZXAgczFpOiBJTlNFUlQgSU5UTyBjaGlsZCBWQUxVRVMgKDEsIDEpOworc3Rl cCBzMmM6IENPTU1JVDsKK3N0ZXAgczFjOiBDT01NSVQ7CitzdGVwIHMyczogU0VMRUNUICogRlJP TSBwYXJlbnQ7CitwYXJlbnRfa2V5fGF1eAorLS0tLS0tLS0tLSstLS0KKyAgICAgICAgIDF8YmFy CisoMSByb3cpCisKK3N0ZXAgczFzOiBTRUxFQ1QgKiBGUk9NIGNoaWxkOworY2hpbGRfa2V5fHBh cmVudF9rZXkKKy0tLS0tLS0tLSstLS0tLS0tLS0tCisgICAgICAgIDF8ICAgICAgICAgMQorKDEg cm93KQorCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzMnVrZXkgczFpIHMydWtleTIgczJjIHMx YyBzMnMgczFzCitzdGVwIHMydWtleTogVVBEQVRFIHBhcmVudCBTRVQgcGFyZW50X2tleSA9IDIg V0hFUkUgcGFyZW50X2tleSA9IDE7CitzdGVwIHMxaTogSU5TRVJUIElOVE8gY2hpbGQgVkFMVUVT ICgxLCAxKTsgPHdhaXRpbmcgLi4uPgorc3RlcCBzMnVrZXkyOiBVUERBVEUgcGFyZW50IFNFVCBw YXJlbnRfa2V5ID0gMSBXSEVSRSBwYXJlbnRfa2V5ID0gMjsKK3N0ZXAgczJjOiBDT01NSVQ7Citz dGVwIHMxaTogPC4uLiBjb21wbGV0ZWQ+CitzdGVwIHMxYzogQ09NTUlUOworc3RlcCBzMnM6IFNF TEVDVCAqIEZST00gcGFyZW50OworcGFyZW50X2tleXxhdXgKKy0tLS0tLS0tLS0rLS0tCisgICAg ICAgICAxfGZvbworKDEgcm93KQorCitzdGVwIHMxczogU0VMRUNUICogRlJPTSBjaGlsZDsKK2No aWxkX2tleXxwYXJlbnRfa2V5CistLS0tLS0tLS0rLS0tLS0tLS0tLQorICAgICAgICAxfCAgICAg ICAgIDEKKygxIHJvdykKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVk L2ZrLXNuYXBzaG90Lm91dCBiL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9may1zbmFwc2hv dC5vdXQKaW5kZXggYmRkMjZiYWM2Yy4uYzRhMzViNjliYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv aXNvbGF0aW9uL2V4cGVjdGVkL2ZrLXNuYXBzaG90Lm91dAorKysgYi9zcmMvdGVzdC9pc29sYXRp b24vZXhwZWN0ZWQvZmstc25hcHNob3Qub3V0CkBAIC00NywxMiArNDcsMTIgQEAgYQogCiBzdGVw IHMyaWZuMjogSU5TRVJUIElOVE8gZmtfbm9wYXJ0ZWQgVkFMVUVTICgyKTsKIHN0ZXAgczJjOiBD T01NSVQ7CitFUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24gdGFibGUgImZrX25vcGFydGVkIiB2 aW9sYXRlcyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJma19ub3BhcnRlZF9hX2ZrZXkiCiBzdGVw IHMyc2ZuOiBTRUxFQ1QgKiBGUk9NIGZrX25vcGFydGVkOwogYQogLQogMQotMgotKDIgcm93cykK KygxIHJvdykKIAogCiBzdGFydGluZyBwZXJtdXRhdGlvbjogczFicmMgczJicmMgczJpcDIgczFz cCBzMmMgczFzcCBzMWlmcDIgczJicmMgczJzZnAgczFjIHMxc2ZwIHMyaWZuMiBzMmMgczJzZm4K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb25fc2NoZWR1bGUgYi9zcmMv dGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlCmluZGV4IDE0MzEwOWFhNGQuLjEwNmRl YjMwMzQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb25fc2NoZWR1bGUK KysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9zY2hlZHVsZQpAQCAtMzQsNiArMzQs NyBAQCB0ZXN0OiBmay1kZWFkbG9jazIKIHRlc3Q6IGZrLXBhcnRpdGlvbmVkLTEKIHRlc3Q6IGZr LXBhcnRpdGlvbmVkLTIKIHRlc3Q6IGZrLXNuYXBzaG90Cit0ZXN0OiBmay1jb25jdXJyZW50LXBr LXVwZAogdGVzdDogc3VieGlkLW92ZXJmbG93CiB0ZXN0OiBldmFsLXBsYW4tcXVhbAogdGVzdDog ZXZhbC1wbGFuLXF1YWwtdHJpZ2dlcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL3Nw ZWNzL2ZrLWNvbmN1cnJlbnQtcGstdXBkLnNwZWMgYi9zcmMvdGVzdC9pc29sYXRpb24vc3BlY3Mv ZmstY29uY3VycmVudC1way11cGQuc3BlYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi40YmRkOTJjZDJkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9u L3NwZWNzL2ZrLWNvbmN1cnJlbnQtcGstdXBkLnNwZWMKQEAgLTAsMCArMSw0MiBAQAorIyBUZXN0 cyB0aGF0IGFuIElOU0VSVCBvbiByZWZlcmVuY2luZyB0YWJsZSBjb3JyZWN0bHkgZmFpbHMgd2hl bgorIyB0aGUgcmVmZXJlbmNlZCB2YWx1ZSBkaXNhcHBlYXJzIGR1ZSB0byBhIGNvbmN1cnJlbnQg dXBkYXRlCitzZXR1cAoreworICBDUkVBVEUgVEFCTEUgcGFyZW50ICgKKwlwYXJlbnRfa2V5CWlu dAkJUFJJTUFSWSBLRVksCisJYXV4CQkJdGV4dAlOT1QgTlVMTAorICApOworCisgIENSRUFURSBU QUJMRSBjaGlsZCAoCisJY2hpbGRfa2V5CWludAkJUFJJTUFSWSBLRVksCisJcGFyZW50X2tleQlp bnQJCU5PVCBOVUxMIFJFRkVSRU5DRVMgcGFyZW50CisgICk7CisKKyAgSU5TRVJUIElOVE8gcGFy ZW50IFZBTFVFUyAoMSwgJ2ZvbycpOworfQorCit0ZWFyZG93bgoreworICBEUk9QIFRBQkxFIHBh cmVudCwgY2hpbGQ7Cit9CisKK3Nlc3Npb24gczEKK3NldHVwCQl7IEJFR0lOOyB9CitzdGVwIHMx aQl7IElOU0VSVCBJTlRPIGNoaWxkIFZBTFVFUyAoMSwgMSk7IH0KK3N0ZXAgczFjCXsgQ09NTUlU OyB9CitzdGVwIHMxcwl7IFNFTEVDVCAqIEZST00gY2hpbGQ7IH0KKworc2Vzc2lvbiBzMgorc2V0 dXAJCXsgQkVHSU47IH0KK3N0ZXAgczJ1a2V5CXsgVVBEQVRFIHBhcmVudCBTRVQgcGFyZW50X2tl eSA9IDIgV0hFUkUgcGFyZW50X2tleSA9IDE7IH0KK3N0ZXAgczJ1YXV4CXsgVVBEQVRFIHBhcmVu dCBTRVQgYXV4ID0gJ2JhcicgV0hFUkUgcGFyZW50X2tleSA9IDE7IH0KK3N0ZXAgczJ1a2V5Mgl7 IFVQREFURSBwYXJlbnQgU0VUIHBhcmVudF9rZXkgPSAxIFdIRVJFIHBhcmVudF9rZXkgPSAyOyB9 CitzdGVwIHMyYwl7IENPTU1JVDsgfQorc3RlcCBzMnMJeyBTRUxFQ1QgKiBGUk9NIHBhcmVudDsg fQorCisjIGZhaWwKK3Blcm11dGF0aW9uIHMydWtleSBzMWkgczJjIHMxYyBzMnMgczFzCisjIG9r CitwZXJtdXRhdGlvbiBzMnVhdXggczFpIHMyYyBzMWMgczJzIHMxcworIyBvaworcGVybXV0YXRp b24gczJ1a2V5IHMxaSBzMnVrZXkyIHMyYyBzMWMgczJzIHMxcwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvaXNvbGF0aW9uL3NwZWNzL2ZrLXNuYXBzaG90LnNwZWMgYi9zcmMvdGVzdC9pc29sYXRpb24v c3BlY3MvZmstc25hcHNob3Quc3BlYwppbmRleCA5ZmFkNTdlNzY4Li5lYzVmZTBjNTBjIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvZmstc25hcHNob3Quc3BlYworKysgYi9z cmMvdGVzdC9pc29sYXRpb24vc3BlY3MvZmstc25hcHNob3Quc3BlYwpAQCAtNTMsMTAgKzUzLDcg QEAgc3RlcCBzMnNmbgl7IFNFTEVDVCAqIEZST00gZmtfbm9wYXJ0ZWQ7IH0KICMgaW5zZXJ0aW5n IGludG8gcmVmZXJlbmNpbmcgdGFibGVzIGluIHRyYW5zYWN0aW9uLXNuYXBzaG90IG1vZGUKICMg UEsgdGFibGUgaXMgbm9uLXBhcnRpdGlvbmVkCiBwZXJtdXRhdGlvbiBzMWJyciBzMmJyYyBzMmlw MiBzMXNwIHMyYyBzMXNwIHMxaWZwMiBzMWMgczFzZnAKLSMgUEsgdGFibGUgaXMgcGFydGl0aW9u ZWQ6IGJ1Z2d5LCBiZWNhdXNlIHMyJ3Mgc2VyaWFsaXphdGlvbiB0cmFuc2FjdGlvbiBjYW4KLSMg c2VlIHRoZSB1bmNvbW1pdHRlZCByb3cgdGhhbmtzIHRvIHRoZSBsYXRlc3Qgc25hcHNob3QgdGFr ZW4gZm9yCi0jIHBhcnRpdGlvbiBsb29rdXAgdG8gd29yayBjb3JyZWN0bHkgYWxzbyBlbmRzIHVw IGdldHRpbmcgdXNlZCBieSB0aGUgUEsgaW5kZXgKLSMgc2NhbgorIyBQSyB0YWJsZSBpcyBwYXJ0 aXRpb25lZAogcGVybXV0YXRpb24gczJpcDIgczJicnIgczFicmMgczFpZnAyIHMyc2ZwIHMxYyBz MnNmcCBzMmlmbjIgczJjIHMyc2ZuCiAKICMgaW5zZXJ0aW5nIGludG8gcmVmZXJlbmNpbmcgdGFi bGVzIGluIHVwLXRvLWRhdGUgc25hcHNob3QgbW9kZQotLSAKMi40My4wCgo= --000000000000ad76fd0629ac03b6 Content-Type: application/x-patch; name="v1-0001-Explicitly-pass-snapshot-necessary-for-omit_detac.patch" Content-Disposition: attachment; filename="v1-0001-Explicitly-pass-snapshot-necessary-for-omit_detac.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m4vc3t460 RnJvbSBmNmZiMGY0YjliZjY4ZTU4ZDhkODU3NzIxYmIyMmRlZDUxMzAxNDlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTkgRGVjIDIwMjQgMjE6MjA6MTEgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx IDEvM10gRXhwbGljaXRseSBwYXNzIHNuYXBzaG90IG5lY2Vzc2FyeSBmb3Igb21pdF9kZXRhY2hl ZAogbG9naWMKClRoaXMgY29tbWl0IGNoYW5nZXMgZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbl9l eHRlbmRlZCgpIGFuZApSZWxhdGlvbkJ1aWxkUGFydGl0aW9uRGVzYygpIHRvIGFjY2VwdCB0aGUg c25hcHNob3QgbmVjZXNzYXJ5CnRvIGltcGxlbWVudCB0aGUgb21pdF9kZXRhY2ggbG9naWMgY29y cmVjdGx5LgoKUHJldmlvdXNseSwgdGhlc2UgZnVuY3Rpb25zIHVzZWQgQWN0aXZlU25hcHNob3Qg dG8gY2hlY2sgaWYgYQpkZXRhY2gtcGVuZGluZyBwYXJ0aXRpb24ncyBwZ19pbmhlcml0cyByb3cg d2FzIHZpc2libGUuIFRoaXMKbG9naWMgYWltZWQgdG8gbWFrZSBSSSBxdWVyaWVzIG92ZXIgcGFy dGl0aW9uZWQgUEsgdGFibGVzIHVuZGVyClJFUEVBVEFCTEUgUkVBRCBpc29sYXRpb24gaGFuZGxl IGRldGFjaC1wZW5kaW5nIHBhcnRpdGlvbnMKY29ycmVjdGx5LiBIb3dldmVyLCBmb3JjaW5nIGEg c25hcHNob3Qgb250byBBY3RpdmVTbmFwc2hvdCBsZWQKdG8gaXNvbGF0aW9uIHZpb2xhdGlvbnMg YnkgbWFraW5nIHNjYW5zIGluIHRoZSBxdWVyeSBzZWUgY2hhbmdlcwpub3QgY29uc2lzdGVudCB3 aXRoIHRoZSBwYXJlbnQgdHJhbnNhY3Rpb24ncyBzbmFwc2hvdC4gQSB0ZXN0CmFkZGVkIGluIGNv bW1pdCAwMGNiODZlNzVkIGRlbW9uc3RyYXRlcyB0aGlzIGlzc3VlLgoKVGhlIG5ldyBpbnRlcmZh Y2Ugb2YgUmVsYXRpb25CdWlsZFBhcnRpdGlvbkRlc2MoKSBhbmQgcmVsZXZhbnQKY2FsbGVycyBh bGxvd3MgcGFzc2luZyB0aGUgbmVjZXNzYXJ5IHNuYXBzaG90IGV4cGxjaXRseSwgdGh1cwphdm9p ZGluZyBtb2RpZmljYXRpb25zIHRvIEFjdGl2ZVNuYXBzaG90LiBEZWZhdWx0IGJlaGF2aW9yIHJl bWFpbnMKdW5jaGFuZ2VkIHdoZW4gbm8gc25hcHNob3QgaXMgcHJvdmlkZWQsIG1haW50YWluaW5n IGNvbXBhdGliaWxpdHkKd2l0aCBub24tUkkgcXVlcmllcyBhbmQgb3RoZXIgdXNlcyBvZgpmaW5k X2luaGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkKCkuCgpBIGZ1dHVyZSBjb21taXQgd2lsbCB1 cGRhdGUgUkkgUEsgbG9va3VwcyB0byB1c2UgdGhpcyBpbnRlcmZhY2UuCgpSb2JlcnQgSGFhcyBj b250cmlidXRlZCB0aGUgY2hhbmdlcyB0byBQYXJ0aXRpb25EZXNjIGludGVyZmFjZS4KCkNvLWF1 dGhvcjogUm9iZXJ0IEhhYXMKUmV2aWV3ZWQtYnk6IFJvYmVydCBIYWFzCkRpc2N1c3Npb246IGh0 dHBzOi8vcG9zdGdyLmVzL20vQ0ErSGl3cUdrZkpmWWRlcTV2SFBoNmVxUEtqU2JmcEREWStqLWtY WUZlUFFlZHRTTGVnQG1haWwuZ21haWwuY29tCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vQ0ErSGl3cUc1ZThwazhzNys3emhyMU5jX1BHeWhFZE01Zj1wSGtNT2RLMVJZV1hmSnNnQG1h aWwuZ21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jICAgIHwg MzMgKysrKystLS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIHwgMjMg KysrKystLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jIHwgIDYgKy0KIHNy Yy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5jICB8IDk0ICsrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaCAgICB8ICA3ICsr LQogc3JjL2luY2x1ZGUvcGFydGl0aW9uaW5nL3BhcnRkZXNjLmggIHwgIDYgKy0KIDYgZmlsZXMg Y2hhbmdlZCwgMTA5IGluc2VydGlvbnMoKyksIDYwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfaW5oZXJpdHMuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cv cGdfaW5oZXJpdHMuYwppbmRleCA4MzZiNGJmZDg5Li44OTE3YTY1NjkwIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9wZ19pbmhlcml0cy5jCkBAIC01MSwxNCArNTEsMTggQEAgdHlwZWRlZiBzdHJ1Y3QgU2VlblJl bHNFbnRyeQogICogdGhlbiBubyBsb2NrcyBhcmUgYWNxdWlyZWQsIGJ1dCBjYWxsZXIgbXVzdCBi ZXdhcmUgb2YgcmFjZSBjb25kaXRpb25zCiAgKiBhZ2FpbnN0IHBvc3NpYmxlIERST1BzIG9mIGNo aWxkIHJlbGF0aW9ucy4KICAqCi0gKiBQYXJ0aXRpb25zIG1hcmtlZCBhcyBiZWluZyBkZXRhY2hl ZCBhcmUgb21pdHRlZDsgc2VlCisgKiBBIHBhcnRpdGlvbiBtYXJrZWQgYXMgYmVpbmcgZGV0YWNo ZWQgaXMgb21pdHRlZCBmcm9tIHRoZSByZXN1bHQgaWYgdGhlCisgKiBwZ19pbmhlcml0cyByb3cg c2hvd2luZyB0aGUgcGFydGl0aW9uIGFzIGJlaW5nIGRldGFjaGVkIGlzIHZpc2libGUgdG8KKyAq IEFjdGl2ZVNuYXBzaG90LCBkb2luZyBzbyBvbmx5IHdoZW4gb25lIGhhcyBiZWVuIHB1c2hlZDsg c2VlCiAgKiBmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkIGZvciBkZXRhaWxzLgog ICovCiBMaXN0ICoKIGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4oT2lkIHBhcmVudHJlbElkLCBM T0NLTU9ERSBsb2NrbW9kZSkKIHsKLQlyZXR1cm4gZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbl9l eHRlbmRlZChwYXJlbnRyZWxJZCwgdHJ1ZSwgbG9ja21vZGUsCi0JCQkJCQkJCQkJCSAgTlVMTCwg TlVMTCk7CisJcmV0dXJuIGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW5fZXh0ZW5kZWQocGFyZW50 cmVsSWQsCisJCQkJCQkJCQkJCSAgQWN0aXZlU25hcHNob3RTZXQoKSA/CisJCQkJCQkJCQkJCSAg R2V0QWN0aXZlU25hcHNob3QoKSA6IE5VTEwsCisJCQkJCQkJCQkJCSAgbG9ja21vZGUsIE5VTEws IE5VTEwpOwogfQogCiAvKgpAQCAtNzAsMTYgKzc0LDE3IEBAIGZpbmRfaW5oZXJpdGFuY2VfY2hp bGRyZW4oT2lkIHBhcmVudHJlbElkLCBMT0NLTU9ERSBsb2NrbW9kZSkKICAqIElmIGEgcGFydGl0 aW9uJ3MgcGdfaW5oZXJpdHMgcm93IGlzIG1hcmtlZCAiZGV0YWNoIHBlbmRpbmciLAogICogKmRl dGFjaGVkX2V4aXN0IChpZiBub3QgbnVsbCkgaXMgc2V0IHRydWUuCiAgKgotICogSWYgb21pdF9k ZXRhY2hlZCBpcyB0cnVlIGFuZCB0aGVyZSBpcyBhbiBhY3RpdmUgc25hcHNob3QgKG5vdCB0aGUg c2FtZSBhcwotICogdGhlIGNhdGFsb2cgc25hcHNob3QgdXNlZCB0byBzY2FuIHBnX2luaGVyaXRz ISkgYW5kIGEgcGdfaW5oZXJpdHMgdHVwbGUKLSAqIG1hcmtlZCAiZGV0YWNoIHBlbmRpbmciIGlz IHZpc2libGUgdG8gdGhhdCBzbmFwc2hvdCwgdGhlbiB0aGF0IHBhcnRpdGlvbiBpcwotICogb21p dHRlZCBmcm9tIHRoZSBvdXRwdXQgbGlzdC4gIFRoaXMgbWFrZXMgcGFydGl0aW9ucyBpbnZpc2li bGUgZGVwZW5kaW5nIG9uCi0gKiB3aGV0aGVyIHRoZSB0cmFuc2FjdGlvbiB0aGF0IG1hcmtlZCB0 aG9zZSBwYXJ0aXRpb25zIGFzIGRldGFjaGVkIGFwcGVhcnMKLSAqIGNvbW1pdHRlZCB0byB0aGUg YWN0aXZlIHNuYXBzaG90LiAgSW4gYWRkaXRpb24sICpkZXRhY2hlZF94bWluIChpZiBub3QgbnVs bCkKLSAqIGlzIHNldCB0byB0aGUgeG1pbiBvZiB0aGUgcm93IG9mIHRoZSBkZXRhY2hlZCBwYXJ0 aXRpb24uCisgKiBJZiB0aGUgY2FsbGVyIHBhc3NlZCAnb21pdF9kZXRhY2hlZF9zbmFwc2hvdCcs IHRoZSBwYXJ0aXRpb24gd2hvc2UKKyAqIHBnX2luaGVyaXRzIHR1cGxlIG1hcmtzIGl0IGFzICJk ZXRhY2ggcGVuZGluZyIgaXMgb21pdHRlZCBmcm9tIHRoZSBvdXRwdXQKKyAqIGxpc3QgaWYgdGhl IHR1cGxlIGlzIHZpc2libGUgdG8gdGhhdCBzbmFwc2hvdC4gIFRoYXQgaXMsIHN1Y2ggYSBwYXJ0 aXRpb24KKyAqIGlzIG9taXR0ZWQgZnJvbSB0aGUgb3V0cHV0IGxpc3QgZGVwZW5kaW5nIG9uIHdo ZXRoZXIgdGhlIHRyYW5zYWN0aW9uIHRoYXQKKyAqIG1hcmtlZCB0aGF0IHBhcnRpdGlvbiBhcyBk ZXRhY2hlZCBhcHBlYXJzIGNvbW1pdHRlZCB0bworICogb21pdF9kZXRhY2hlZF9zbmFwc2hvdC4g IElmIG9taXR0ZWQsICpkZXRhY2hlZF94bWluIChpZiBub24gTlVMTCkgaXMgc2V0CisgKiB0byB0 aGUgeG1pbiBvZiB0aGF0IHBnX2luaGVyaXRzIHR1cGxlLgogICovCiBMaXN0ICoKLWZpbmRfaW5o ZXJpdGFuY2VfY2hpbGRyZW5fZXh0ZW5kZWQoT2lkIHBhcmVudHJlbElkLCBib29sIG9taXRfZGV0 YWNoZWQsCitmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkKE9pZCBwYXJlbnRyZWxJ ZCwKKwkJCQkJCQkJICAgU25hcHNob3Qgb21pdF9kZXRhY2hlZF9zbmFwc2hvdCwKIAkJCQkJCQkJ ICAgTE9DS01PREUgbG9ja21vZGUsIGJvb2wgKmRldGFjaGVkX2V4aXN0LAogCQkJCQkJCQkgICBU cmFuc2FjdGlvbklkICpkZXRhY2hlZF94bWluKQogewpAQCAtMTQwLDE1ICsxNDUsMTMgQEAgZmlu ZF9pbmhlcml0YW5jZV9jaGlsZHJlbl9leHRlbmRlZChPaWQgcGFyZW50cmVsSWQsIGJvb2wgb21p dF9kZXRhY2hlZCwKIAkJCWlmIChkZXRhY2hlZF9leGlzdCkKIAkJCQkqZGV0YWNoZWRfZXhpc3Qg PSB0cnVlOwogCi0JCQlpZiAob21pdF9kZXRhY2hlZCAmJiBBY3RpdmVTbmFwc2hvdFNldCgpKQor CQkJaWYgKG9taXRfZGV0YWNoZWRfc25hcHNob3QpCiAJCQl7CiAJCQkJVHJhbnNhY3Rpb25JZCB4 bWluOwotCQkJCVNuYXBzaG90CXNuYXA7CiAKIAkJCQl4bWluID0gSGVhcFR1cGxlSGVhZGVyR2V0 WG1pbihpbmhlcml0c1R1cGxlLT50X2RhdGEpOwotCQkJCXNuYXAgPSBHZXRBY3RpdmVTbmFwc2hv dCgpOwogCi0JCQkJaWYgKCFYaWRJbk1WQ0NTbmFwc2hvdCh4bWluLCBzbmFwKSkKKwkJCQlpZiAo IVhpZEluTVZDQ1NuYXBzaG90KHhtaW4sIG9taXRfZGV0YWNoZWRfc25hcHNob3QpKQogCQkJCXsK IAkJCQkJaWYgKGRldGFjaGVkX3htaW4pCiAJCQkJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0 aXRpb24uYwppbmRleCA3NjUxODg2MjI5Li5kMjZjZjIwMDAzIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1BhcnRpdGlvbi5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAidXRpbHMvcGFydGNh Y2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcnVsZXV0aWxz LmgiCisjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KQEAgLTExMDEsMTcgKzExMDIsMjQgQEAgRXhlY0luaXRQYXJ0aXRpb25EaXNwYXRjaElu Zm8oRVN0YXRlICplc3RhdGUsCiAJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAKIAkvKgotCSAqIEZv ciBkYXRhIG1vZGlmaWNhdGlvbiwgaXQgaXMgYmV0dGVyIHRoYXQgZXhlY3V0b3IgZG9lcyBub3Qg aW5jbHVkZQotCSAqIHBhcnRpdGlvbnMgYmVpbmcgZGV0YWNoZWQsIGV4Y2VwdCB3aGVuIHJ1bm5p bmcgaW4gc25hcHNob3QtaXNvbGF0aW9uCi0JICogbW9kZS4gIFRoaXMgbWVhbnMgdGhhdCBhIHJl YWQtY29tbWl0dGVkIHRyYW5zYWN0aW9uIGltbWVkaWF0ZWx5IGdldHMgYQorCSAqIEZvciBkYXRh IG1vZGlmaWNhdGlvbiwgaXQgaXMgYmV0dGVyIHRoYXQgZXhlY3V0b3Igb21pdHMgdGhlIHBhcnRp dGlvbnMKKwkgKiBiZWluZyBkZXRhY2hlZCwgZXhjZXB0IHdoZW4gcnVubmluZyBpbiBzbmFwc2hv dC1pc29sYXRpb24gbW9kZS4gIFRoaXMKKwkgKiBtZWFucyB0aGF0IGEgcmVhZC1jb21taXR0ZWQg dHJhbnNhY3Rpb24gaW1tZWRpYXRlbHkgZ2V0cyBhCiAJICogIm5vIHBhcnRpdGlvbiBmb3IgdHVw bGUiIGVycm9yIHdoZW4gYSB0dXBsZSBpcyBpbnNlcnRlZCBpbnRvIGEKIAkgKiBwYXJ0aXRpb24g dGhhdCdzIGJlaW5nIGRldGFjaGVkIGNvbmN1cnJlbnRseSwgYnV0IGEgdHJhbnNhY3Rpb24gaW4K IAkgKiByZXBlYXRhYmxlLXJlYWQgbW9kZSBjYW4gc3RpbGwgdXNlIHN1Y2ggYSBwYXJ0aXRpb24u CiAJICovCiAJaWYgKGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSA9PSBOVUxMKQorCXsK KwkJU25hcHNob3QJb21pdF9kZXRhY2hlZF9zbmFwc2hvdCA9IE5VTEw7CisKKwkJQXNzZXJ0KEFj dGl2ZVNuYXBzaG90U2V0KCkpOworCQlpZiAoIUlzb2xhdGlvblVzZXNYYWN0U25hcHNob3QoKSkK KwkJCW9taXRfZGV0YWNoZWRfc25hcHNob3QgPSBHZXRBY3RpdmVTbmFwc2hvdCgpOwogCQllc3Rh dGUtPmVzX3BhcnRpdGlvbl9kaXJlY3RvcnkgPQogCQkJQ3JlYXRlUGFydGl0aW9uRGlyZWN0b3J5 KGVzdGF0ZS0+ZXNfcXVlcnlfY3h0LAotCQkJCQkJCQkJICFJc29sYXRpb25Vc2VzWGFjdFNuYXBz aG90KCkpOworCQkJCQkJCQkJIG9taXRfZGV0YWNoZWRfc25hcHNob3QpOworCX0KIAogCW9sZGN4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwcm91dGUtPm1lbWN4dCk7CiAKQEAgLTE4NzEsMTAg KzE4NzksMTMgQEAgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0 ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pCiAJaW50CQkJaTsKIAlFeHByQ29udGV4 dCAqZWNvbnRleHQgPSBwbGFuc3RhdGUtPnBzX0V4cHJDb250ZXh0OwogCi0JLyogRm9yIGRhdGEg cmVhZGluZywgZXhlY3V0b3IgYWx3YXlzIGluY2x1ZGVzIGRldGFjaGVkIHBhcnRpdGlvbnMgKi8K KwkvKgorCSAqIEZvciBkYXRhIHJlYWRpbmcsIGV4ZWN1dG9yIGFsd2F5cyBpbmNsdWRlcyBkZXRh Y2hlZCBwYXJ0aXRpb25zLAorCSAqIHNvIHBhc3MgTlVMTCBmb3Igb21pdF9kZXRhY2hlZF9zbmFw c2hvdC4KKwkgKi8KIAlpZiAoZXN0YXRlLT5lc19wYXJ0aXRpb25fZGlyZWN0b3J5ID09IE5VTEwp CiAJCWVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSA9Ci0JCQlDcmVhdGVQYXJ0aXRpb25E aXJlY3RvcnkoZXN0YXRlLT5lc19xdWVyeV9jeHQsIGZhbHNlKTsKKwkJCUNyZWF0ZVBhcnRpdGlv bkRpcmVjdG9yeShlc3RhdGUtPmVzX3F1ZXJ5X2N4dCwgTlVMTCk7CiAKIAluX3BhcnRfaGllcmFy Y2hpZXMgPSBsaXN0X2xlbmd0aChwcnVuZWluZm8tPnBydW5lX2luZm9zKTsKIAlBc3NlcnQobl9w YXJ0X2hpZXJhcmNoaWVzID4gMCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9wbGFuY2F0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKaW5k ZXggMTUzMzkwZjJkYy4uZWUxNDZkYjA4MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvcGxhbmNhdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5j YXQuYwpAQCAtMjM3OCwxMSArMjM3OCwxNSBAQCBzZXRfcmVsYXRpb25fcGFydGl0aW9uX2luZm8o UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAogCS8qCiAJICogQ3JlYXRlIHRo ZSBQYXJ0aXRpb25EaXJlY3RvcnkgaW5mcmFzdHJ1Y3R1cmUgaWYgd2UgZGlkbid0IGFscmVhZHku CisJICogTm90ZSB0aGF0IHRoZSBwbGFubmVyIGFsd2F5cyBvbWl0cyB0aGUgcGFydGl0aW9ucyBi ZWluZyBkZXRhY2hlZAorCSAqIGNvbmN1cnJlbnRseS4KIAkgKi8KIAlpZiAocm9vdC0+Z2xvYi0+ cGFydGl0aW9uX2RpcmVjdG9yeSA9PSBOVUxMKQogCXsKKwkJQXNzZXJ0KEFjdGl2ZVNuYXBzaG90 U2V0KCkpOwogCQlyb290LT5nbG9iLT5wYXJ0aXRpb25fZGlyZWN0b3J5ID0KLQkJCUNyZWF0ZVBh cnRpdGlvbkRpcmVjdG9yeShDdXJyZW50TWVtb3J5Q29udGV4dCwgdHJ1ZSk7CisJCQlDcmVhdGVQ YXJ0aXRpb25EaXJlY3RvcnkoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkgR2V0QWN0 aXZlU25hcHNob3QoKSk7CiAJfQogCiAJcGFydGRlc2MgPSBQYXJ0aXRpb25EaXJlY3RvcnlMb29r dXAocm9vdC0+Z2xvYi0+cGFydGl0aW9uX2RpcmVjdG9yeSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5jIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3Bh cnRkZXNjLmMKaW5kZXggYjRlMGVkMGU3MS4uYTgwYmJlNzM3OCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcGFydGl0aW9uaW5nL3BhcnRkZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9u aW5nL3BhcnRkZXNjLmMKQEAgLTM2LDcgKzM2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9u RGlyZWN0b3J5RGF0YQogewogCU1lbW9yeUNvbnRleHQgcGRpcl9tY3h0OwogCUhUQUIJICAgKnBk aXJfaGFzaDsKLQlib29sCQlvbWl0X2RldGFjaGVkOworCVNuYXBzaG90CW9taXRfZGV0YWNoZWRf c25hcHNob3Q7CiB9CQkJUGFydGl0aW9uRGlyZWN0b3J5RGF0YTsKIAogdHlwZWRlZiBzdHJ1Y3Qg UGFydGl0aW9uRGlyZWN0b3J5RW50cnkKQEAgLTQ3LDE3ICs0NywyMyBAQCB0eXBlZGVmIHN0cnVj dCBQYXJ0aXRpb25EaXJlY3RvcnlFbnRyeQogfSBQYXJ0aXRpb25EaXJlY3RvcnlFbnRyeTsKIAog c3RhdGljIFBhcnRpdGlvbkRlc2MgUmVsYXRpb25CdWlsZFBhcnRpdGlvbkRlc2MoUmVsYXRpb24g cmVsLAotCQkJCQkJCQkJCQkJYm9vbCBvbWl0X2RldGFjaGVkKTsKKwkJCQkJCQkJCQkJCVNuYXBz aG90IG9taXRfZGV0YWNoZWRfc25hcHNob3QpOwogCiAKIC8qCi0gKiBSZWxhdGlvbkdldFBhcnRp dGlvbkRlc2MgLS0gZ2V0IHBhcnRpdGlvbiBkZXNjcmlwdG9yLCBpZiByZWxhdGlvbiBpcyBwYXJ0 aXRpb25lZAorICogUmVsYXRpb25HZXRQYXJ0aXRpb25EZXNjRXh0CisgKiAJCUdldCBwYXJ0aXRp b24gZGVzY3JpcHRvciBvZiBhIHBhcnRpdGlvbmVkIHRhYmxlLCBidWlsZGluZyBvbmUgYW5kCisg KiAJCWNhY2hpbmcgaXQgZm9yIGxhdGVyIHVzZSBpZiBub3QgYWxyZWFkeSBvciBpZiB0aGUgY2Fj aGVkIG9uZSB3b3VsZAorICogCQlub3QgYmUgc3VpdGFibGUgZm9yIGEgZ2l2ZW4gcmVxdWVzdAog ICoKICAqIFdlIGtlZXAgdHdvIHBhcnRkZXNjcyBpbiByZWxjYWNoZTogcmRfcGFydGRlc2MgaW5j bHVkZXMgYWxsIHBhcnRpdGlvbnMKLSAqIChldmVuIHRob3NlIGJlaW5nIGNvbmN1cnJlbnRseSBt YXJrZWQgZGV0YWNoZWQpLCB3aGlsZSByZF9wYXJ0ZGVzY19ub2RldGFjaGVkCi0gKiBvbWl0cyAo c29tZSBvZikgdGhvc2UuICBXZSBzdG9yZSB0aGUgcGdfaW5oZXJpdHMueG1pbiB2YWx1ZSBmb3Ig dGhlIGxhdHRlciwKLSAqIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGNhbiBiZSB2YWxpZGx5IHJl dXNlZCBpbiBlYWNoIGNhc2UsIHNpbmNlIHRoYXQKLSAqIGRlcGVuZHMgb24gdGhlIGFjdGl2ZSBz bmFwc2hvdC4KKyAqIChldmVuIHRoZSBvbmUgYmVpbmcgY29uY3VycmVudGx5IG1hcmtlZCBkZXRh Y2hlZCksIHdoaWxlCisgKiByZF9wYXJ0ZGVzY19ub2RldGFjaGVkIG9taXRzIHRoZSBkZXRhY2gt cGVuZGluZyBwYXJ0aXRpb24uICBJZiB0aGUgbGF0dGVyIG9uZQorICogaXMgcHJlc2VudCwgcmRf cGFydGRlc2Nfbm9kZXRhY2hfeG1pbiB3b3VsZCBoYXZlIGJlZW4gc2V0IHRvIHRoZSB4bWluIG9m CisgKiB0aGUgZGV0YWNoLXBlbmRpbmcgcGFydGl0aW9uJ3MgcGdfaW5oZXJpdHMgcm93LCB3aGlj aCBpcyB1c2VkIHRvIGRldGVybWluZQorICogd2hldGhlciByZF9wYXJ0ZGVzY19ub2RldGFjaCBj YW4gYmUgdmFsaWRseSByZXVzZWQgZm9yIGEgZ2l2ZW4gcmVxdWVzdCBieQorICogY2hlY2tpbmcg aWYgdGhlIHhtaW4gYXBwZWFycyB2aXNpYmxlIHRvICdvbWl0X2RldGFjaGVkX3NuYXBzaG90JyBw YXNzZWQgYnkKKyAqIHRoZSBjYWxsZXIuCiAgKgogICogTm90ZTogd2UgYXJyYW5nZSBmb3IgcGFy dGl0aW9uIGRlc2NyaXB0b3JzIHRvIG5vdCBnZXQgZnJlZWQgdW50aWwgdGhlCiAgKiByZWxjYWNo ZSBlbnRyeSdzIHJlZmNvdW50IGdvZXMgdG8gemVybyAoc2VlIGhhY2tzIGluIFJlbGF0aW9uQ2xv c2UsCkBAIC02OCw3ICs3NCw3IEBAIHN0YXRpYyBQYXJ0aXRpb25EZXNjIFJlbGF0aW9uQnVpbGRQ YXJ0aXRpb25EZXNjKFJlbGF0aW9uIHJlbCwKICAqIHRoYXQgdGhlIGRhdGEgZG9lc24ndCBiZWNv bWUgc3RhbGUuCiAgKi8KIFBhcnRpdGlvbkRlc2MKLVJlbGF0aW9uR2V0UGFydGl0aW9uRGVzYyhS ZWxhdGlvbiByZWwsIGJvb2wgb21pdF9kZXRhY2hlZCkKK1JlbGF0aW9uR2V0UGFydGl0aW9uRGVz Y0V4dChSZWxhdGlvbiByZWwsIFNuYXBzaG90IG9taXRfZGV0YWNoZWRfc25hcHNob3QpCiB7CiAJ QXNzZXJ0KHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUp OwogCkBAIC03NywzNiArODMsNTEgQEAgUmVsYXRpb25HZXRQYXJ0aXRpb25EZXNjKFJlbGF0aW9u IHJlbCwgYm9vbCBvbWl0X2RldGFjaGVkKQogCSAqIGRvIHNvIHdoZW4gd2UgYXJlIGFza2VkIHRv IGluY2x1ZGUgYWxsIHBhcnRpdGlvbnMgaW5jbHVkaW5nIGRldGFjaGVkOwogCSAqIGFuZCBhbHNv IHdoZW4gd2Uga25vdyB0aGF0IHRoZXJlIGFyZSBubyBkZXRhY2hlZCBwYXJ0aXRpb25zLgogCSAq Ci0JICogSWYgdGhlcmUgaXMgbm8gYWN0aXZlIHNuYXBzaG90LCBkZXRhY2hlZCBwYXJ0aXRpb25z IGFyZW4ndCBvbWl0dGVkCi0JICogZWl0aGVyLCBzbyB3ZSBjYW4gdXNlIHRoZSBjYWNoZWQgZGVz Y3JpcHRvciB0b28gaW4gdGhhdCBjYXNlLgorCSAqIG9taXRfZGV0YWNoZWRfc25hcHNob3QgYmVp bmcgTlVMTCBtZWFucyB0aGF0IHRoZSBjYWxsZXIgZG9lc24ndCBjYXJlCisJICogdGhhdCB0aGUg cmV0dXJuZWQgcGFydGl0aW9uIGRlc2NyaXB0b3IgbWF5IGNvbnRhaW4gZGV0YWNoZWQgcGFydGl0 aW9ucywKKwkgKiBzbyB3ZSB3ZSBjYW4gdXNlZCB0aGUgY2FjaGVkIGRlc2NyaXB0b3IgaW4gdGhh dCBjYXNlIHRvby4KIAkgKi8KIAlpZiAobGlrZWx5KHJlbC0+cmRfcGFydGRlc2MgJiYKLQkJCSAg ICghcmVsLT5yZF9wYXJ0ZGVzYy0+ZGV0YWNoZWRfZXhpc3QgfHwgIW9taXRfZGV0YWNoZWQgfHwK LQkJCQkhQWN0aXZlU25hcHNob3RTZXQoKSkpKQorCQkJICAgKCFyZWwtPnJkX3BhcnRkZXNjLT5k ZXRhY2hlZF9leGlzdCB8fAorCQkJCW9taXRfZGV0YWNoZWRfc25hcHNob3QgPT0gTlVMTCkpKQog CQlyZXR1cm4gcmVsLT5yZF9wYXJ0ZGVzYzsKIAogCS8qCi0JICogSWYgd2UncmUgYXNrZWQgdG8g b21pdCBkZXRhY2hlZCBwYXJ0aXRpb25zLCB3ZSBtYXkgYmUgYWJsZSB0byB1c2UgYQotCSAqIGNh Y2hlZCBkZXNjcmlwdG9yIHRvby4gIFdlIGRldGVybWluZSB0aGF0IGJhc2VkIG9uIHRoZSBwZ19p bmhlcml0cy54bWluCi0JICogdGhhdCB3YXMgc2F2ZWQgYWxvbmdzaWRlIHRoYXQgZGVzY3JpcHRv cjogaWYgdGhlIHhtaW4gdGhhdCB3YXMgbm90IGluCi0JICogcHJvZ3Jlc3MgZm9yIHRoYXQgYWN0 aXZlIHNuYXBzaG90IGlzIGFsc28gbm90IGluIHByb2dyZXNzIGZvciB0aGUKLQkgKiBjdXJyZW50 IGFjdGl2ZSBzbmFwc2hvdCwgdGhlbiB3ZSBjYW4gdXNlIGl0LiAgT3RoZXJ3aXNlIGJ1aWxkIG9u ZSBmcm9tCi0JICogc2NyYXRjaC4KKwkgKiBJZiB3ZSdyZSBhc2tlZCB0byBvbWl0IHRoZSBkZXRh Y2hlZCBwYXJ0aXRpb24sIHdlIG1heSBiZSBhYmxlIHRvIHVzZQorCSAqIHRoZSBvdGhlciBjYWNo ZWQgZGVzY3JpcHRvciwgd2hpY2ggaGFzIGJlZW4gbWFkZSB0byBvbWl0IHRoZSBkZXRhY2hlZAor CSAqIHBhcnRpdGlvbi4gIFdoZXRoZXIgdGhhdCBkZXNjcmlwdG9yIGNhbiBiZSByZXVzZWQgaW4g dGhpcyBjYXNlIGlzCisJICogZGV0ZXJtaW5lZCBiYXNlZCBvbiBjcm9zcy1jaGVja2luZyB0aGUg dmlzaWJpbGl0eSBvZgorCSAqIHJkX3BhcnRkZXNjX25vZGV0YWNoZWRfeG1pbiwgdGhhdCBpcywg dGhlIHBnX2luaGVyaXRzLnhtaW4gb2YgdGhlCisJICogcGdfaW5oZXJpdHMgcm93IG9mIHRoZSBk ZXRhY2hlZCBwYXJ0aXRpb246IGlmIHRoZSB4bWluIHNlZW1zIGluLXByb2dyZXNzCisJICogdG8g Ym90aCB0aGUgZ2l2ZW4gb21pdF9kZXRhY2hlZF9zbmFwc2hvdCBhbmQgdG8gdGhlIHNuYXBzaG90 IHRoYXQgd291bGQKKwkgKiBoYXZlIGJlZW4gcGFzc2VkIHdoZW4gcmRfcGFydGRlc2Nfbm9kZXRh Y2hlZCB3YXMgYnVpbHQsIHRoZW4gd2UgY2FuCisJICogcmV1c2UgaXQuICBPdGhlcndpc2Ugd2Ug bXVzdCBidWlsZCBvbmUgZnJvbSBzY3JhdGNoLgogCSAqLwotCWlmIChvbWl0X2RldGFjaGVkICYm Ci0JCXJlbC0+cmRfcGFydGRlc2Nfbm9kZXRhY2hlZCAmJgotCQlBY3RpdmVTbmFwc2hvdFNldCgp KQorCWlmIChyZWwtPnJkX3BhcnRkZXNjX25vZGV0YWNoZWQgJiYgb21pdF9kZXRhY2hlZF9zbmFw c2hvdCkKIAl7Ci0JCVNuYXBzaG90CWFjdGl2ZXNuYXA7Ci0KIAkJQXNzZXJ0KFRyYW5zYWN0aW9u SWRJc1ZhbGlkKHJlbC0+cmRfcGFydGRlc2Nfbm9kZXRhY2hlZF94bWluKSk7Ci0JCWFjdGl2ZXNu YXAgPSBHZXRBY3RpdmVTbmFwc2hvdCgpOwogCi0JCWlmICghWGlkSW5NVkNDU25hcHNob3QocmVs LT5yZF9wYXJ0ZGVzY19ub2RldGFjaGVkX3htaW4sIGFjdGl2ZXNuYXApKQorCQlpZiAoIVhpZElu TVZDQ1NuYXBzaG90KHJlbC0+cmRfcGFydGRlc2Nfbm9kZXRhY2hlZF94bWluLAorCQkJCQkJCSAg IG9taXRfZGV0YWNoZWRfc25hcHNob3QpKQogCQkJcmV0dXJuIHJlbC0+cmRfcGFydGRlc2Nfbm9k ZXRhY2hlZDsKIAl9CiAKLQlyZXR1cm4gUmVsYXRpb25CdWlsZFBhcnRpdGlvbkRlc2MocmVsLCBv bWl0X2RldGFjaGVkKTsKKwlyZXR1cm4gUmVsYXRpb25CdWlsZFBhcnRpdGlvbkRlc2MocmVsLCBv bWl0X2RldGFjaGVkX3NuYXBzaG90KTsKK30KKworLyoKKyAqIFJlbGF0aW9uR2V0UGFydGl0aW9u RGVzYworICoJCUxpa2UgUmVsYXRpb25HZXRQYXJ0aXRpb25EZXNjRXh0KCkgYnV0IGZvciBjYWxs ZXJzIHRoYXQgYXJlIGZpbmUgd2l0aAorICoJCUFjdGl2ZVNuYXBzaG90IGJlaW5nIHVzZWQgYXMg b21pdF9kZXRhY2hlZF9zbmFwc2hvdAorICovCitQYXJ0aXRpb25EZXNjCitSZWxhdGlvbkdldFBh cnRpdGlvbkRlc2MoUmVsYXRpb24gcmVsLCBib29sIG9taXRfZGV0YWNoZWQpCit7CisJU25hcHNo b3QJc25hcHNob3QgPSBOVUxMOworCisJaWYgKG9taXRfZGV0YWNoZWQgJiYgQWN0aXZlU25hcHNo b3RTZXQoKSkKKwkJc25hcHNob3QgPSBHZXRBY3RpdmVTbmFwc2hvdCgpOworCXJldHVybiBSZWxh dGlvbkdldFBhcnRpdGlvbkRlc2NFeHQocmVsLCBzbmFwc2hvdCk7CiB9CiAKIC8qCkBAIC0xMzEs NyArMTUyLDggQEAgUmVsYXRpb25HZXRQYXJ0aXRpb25EZXNjKFJlbGF0aW9uIHJlbCwgYm9vbCBv bWl0X2RldGFjaGVkKQogICogZm9yIHRoZW0uCiAgKi8KIHN0YXRpYyBQYXJ0aXRpb25EZXNjCi1S ZWxhdGlvbkJ1aWxkUGFydGl0aW9uRGVzYyhSZWxhdGlvbiByZWwsIGJvb2wgb21pdF9kZXRhY2hl ZCkKK1JlbGF0aW9uQnVpbGRQYXJ0aXRpb25EZXNjKFJlbGF0aW9uIHJlbCwKKwkJCQkJCSAgIFNu YXBzaG90IG9taXRfZGV0YWNoZWRfc25hcHNob3QpCiB7CiAJUGFydGl0aW9uRGVzYyBwYXJ0ZGVz YzsKIAlQYXJ0aXRpb25Cb3VuZEluZm8gYm91bmRpbmZvID0gTlVMTDsKQEAgLTE2Miw3ICsxODQs OCBAQCByZXRyeToKIAlkZXRhY2hlZF9leGlzdCA9IGZhbHNlOwogCWRldGFjaGVkX3htaW4gPSBJ bnZhbGlkVHJhbnNhY3Rpb25JZDsKIAlpbmhvaWRzID0gZmluZF9pbmhlcml0YW5jZV9jaGlsZHJl bl9leHRlbmRlZChSZWxhdGlvbkdldFJlbGlkKHJlbCksCi0JCQkJCQkJCQkJCQkgb21pdF9kZXRh Y2hlZCwgTm9Mb2NrLAorCQkJCQkJCQkJCQkJIG9taXRfZGV0YWNoZWRfc25hcHNob3QsCisJCQkJ CQkJCQkJCQkgTm9Mb2NrLAogCQkJCQkJCQkJCQkJICZkZXRhY2hlZF9leGlzdCwKIAkJCQkJCQkJ CQkJCSAmZGV0YWNoZWRfeG1pbik7CiAKQEAgLTM2MiwxMSArMzg1LDExIEBAIHJldHJ5OgogCSAq CiAJICogTm90ZSB0aGF0IGlmIGEgcGFydGl0aW9uIHdhcyBmb3VuZCBieSB0aGUgY2F0YWxvZydz IHNjYW4gdG8gaGF2ZSBiZWVuCiAJICogZGV0YWNoZWQsIGJ1dCB0aGUgcGdfaW5oZXJpdCB0dXBs ZSBzYXlpbmcgc28gd2FzIG5vdCB2aXNpYmxlIHRvIHRoZQotCSAqIGFjdGl2ZSBzbmFwc2hvdCAo ZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbl9leHRlbmRlZCB3aWxsIG5vdCBoYXZlIHNldAotCSAq IGRldGFjaGVkX3htaW4gaW4gdGhhdCBjYXNlKSwgd2UgY29uc2lkZXIgdGhlcmUgdG8gYmUgbm8g Im9taXR0YWJsZSIKLQkgKiBkZXRhY2hlZCBwYXJ0aXRpb25zLgorCSAqIG9taXRfZGV0YWNoZWRf c25hcHNob3QgKGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW5fZXh0ZW5kZWQoKSB3aWxsIG5vdAor CSAqIGhhdmUgc2V0IGRldGFjaGVkX3htaW4gaW4gdGhhdCBjYXNlKSwgd2UgY29uc2lkZXIgdGhl cmUgdG8gYmUgbm8KKwkgKiAib21pdHRhYmxlIiBkZXRhY2hlZCBwYXJ0aXRpb25zLgogCSAqLwot CWlzX29taXQgPSBvbWl0X2RldGFjaGVkICYmIGRldGFjaGVkX2V4aXN0ICYmIEFjdGl2ZVNuYXBz aG90U2V0KCkgJiYKKwlpc19vbWl0ID0gZGV0YWNoZWRfZXhpc3QgJiYgb21pdF9kZXRhY2hlZF9z bmFwc2hvdCAmJgogCQlUcmFuc2FjdGlvbklkSXNWYWxpZChkZXRhY2hlZF94bWluKTsKIAogCS8q CkBAIC00MjAsNyArNDQzLDcgQEAgcmV0cnk6CiAgKgkJQ3JlYXRlIGEgbmV3IHBhcnRpdGlvbiBk aXJlY3Rvcnkgb2JqZWN0LgogICovCiBQYXJ0aXRpb25EaXJlY3RvcnkKLUNyZWF0ZVBhcnRpdGlv bkRpcmVjdG9yeShNZW1vcnlDb250ZXh0IG1jeHQsIGJvb2wgb21pdF9kZXRhY2hlZCkKK0NyZWF0 ZVBhcnRpdGlvbkRpcmVjdG9yeShNZW1vcnlDb250ZXh0IG1jeHQsIFNuYXBzaG90IG9taXRfZGV0 YWNoZWRfc25hcHNob3QpCiB7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG1jeHQpOwogCVBhcnRpdGlvbkRpcmVjdG9yeSBwZGlyOwpAQCAtNDM1LDcg KzQ1OCw3IEBAIENyZWF0ZVBhcnRpdGlvbkRpcmVjdG9yeShNZW1vcnlDb250ZXh0IG1jeHQsIGJv b2wgb21pdF9kZXRhY2hlZCkKIAogCXBkaXItPnBkaXJfaGFzaCA9IGhhc2hfY3JlYXRlKCJwYXJ0 aXRpb24gZGlyZWN0b3J5IiwgMjU2LCAmY3RsLAogCQkJCQkJCQkgIEhBU0hfRUxFTSB8IEhBU0hf QkxPQlMgfCBIQVNIX0NPTlRFWFQpOwotCXBkaXItPm9taXRfZGV0YWNoZWQgPSBvbWl0X2RldGFj aGVkOworCXBkaXItPm9taXRfZGV0YWNoZWRfc25hcHNob3QgPSBvbWl0X2RldGFjaGVkX3NuYXBz aG90OwogCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwogCXJldHVybiBwZGly OwpAQCAtNDY4LDcgKzQ5MSw4IEBAIFBhcnRpdGlvbkRpcmVjdG9yeUxvb2t1cChQYXJ0aXRpb25E aXJlY3RvcnkgcGRpciwgUmVsYXRpb24gcmVsKQogCQkgKi8KIAkJUmVsYXRpb25JbmNyZW1lbnRS ZWZlcmVuY2VDb3VudChyZWwpOwogCQlwZGUtPnJlbCA9IHJlbDsKLQkJcGRlLT5wZCA9IFJlbGF0 aW9uR2V0UGFydGl0aW9uRGVzYyhyZWwsIHBkaXItPm9taXRfZGV0YWNoZWQpOworCQlwZGUtPnBk ID0gUmVsYXRpb25HZXRQYXJ0aXRpb25EZXNjRXh0KHJlbCwKKwkJCQkJCQkJCQkJICBwZGlyLT5v bWl0X2RldGFjaGVkX3NuYXBzaG90KTsKIAkJQXNzZXJ0KHBkZS0+cGQgIT0gTlVMTCk7CiAJfQog CXJldHVybiBwZGUtPnBkOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhl cml0cy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhlcml0cy5oCmluZGV4IGIzZGE3OGMy NGIuLjQ2NTk5OTc5NWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJp dHMuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVyaXRzLmgKQEAgLTIzLDYgKzIz LDcgQEAKIAogI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xv Y2suaCIKKyNpbmNsdWRlICJ1dGlscy9zbmFwc2hvdC5oIgogCiAvKiAtLS0tLS0tLS0tLS0tLS0t CiAgKgkJcGdfaW5oZXJpdHMgZGVmaW5pdGlvbi4gIGNwcCB0dXJucyB0aGlzIGludG8KQEAgLTQ5 LDggKzUwLDEwIEBAIERFQ0xBUkVfSU5ERVgocGdfaW5oZXJpdHNfcGFyZW50X2luZGV4LCAyMTg3 LCBJbmhlcml0c1BhcmVudEluZGV4SWQsIHBnX2luaGVyaXRzCiAKIAogZXh0ZXJuIExpc3QgKmZp bmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4oT2lkIHBhcmVudHJlbElkLCBMT0NLTU9ERSBsb2NrbW9k ZSk7Ci1leHRlcm4gTGlzdCAqZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbl9leHRlbmRlZChPaWQg cGFyZW50cmVsSWQsIGJvb2wgb21pdF9kZXRhY2hlZCwKLQkJCQkJCQkJCQkJCUxPQ0tNT0RFIGxv Y2ttb2RlLCBib29sICpkZXRhY2hlZF9leGlzdCwgVHJhbnNhY3Rpb25JZCAqZGV0YWNoZWRfeG1p bik7CitleHRlcm4gTGlzdCAqZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbl9leHRlbmRlZChPaWQg cGFyZW50cmVsSWQsCisJCQkJCQkJCQkJCQlTbmFwc2hvdCBvbWl0X2RldGFjaGVkX3NuYXBzaG90 LAorCQkJCQkJCQkJCQkJTE9DS01PREUgbG9ja21vZGUsIGJvb2wgKmRldGFjaGVkX2V4aXN0LAor CQkJCQkJCQkJCQkJVHJhbnNhY3Rpb25JZCAqZGV0YWNoZWRfeG1pbik7CiAKIGV4dGVybiBMaXN0 ICpmaW5kX2FsbF9pbmhlcml0b3JzKE9pZCBwYXJlbnRyZWxJZCwgTE9DS01PREUgbG9ja21vZGUs CiAJCQkJCQkJCSBMaXN0ICoqbnVtcGFyZW50cyk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9w YXJ0aXRpb25pbmcvcGFydGRlc2MuaCBiL3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0ZGVz Yy5oCmluZGV4IDg3YWJmZDc2ZDcuLmQ0YThhYjNmYjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9w YXJ0ZGVzYy5oCkBAIC0xNCw2ICsxNCw3IEBACiAKICNpbmNsdWRlICJwYXJ0aXRpb25pbmcvcGFy dGRlZnMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3Nu YXBzaG90LmgiCiAKIC8qCiAgKiBJbmZvcm1hdGlvbiBhYm91dCBwYXJ0aXRpb25zIG9mIGEgcGFy dGl0aW9uZWQgdGFibGUuCkBAIC02NSw4ICs2NiwxMSBAQCB0eXBlZGVmIHN0cnVjdCBQYXJ0aXRp b25EZXNjRGF0YQogCiAKIGV4dGVybiBQYXJ0aXRpb25EZXNjIFJlbGF0aW9uR2V0UGFydGl0aW9u RGVzYyhSZWxhdGlvbiByZWwsIGJvb2wgb21pdF9kZXRhY2hlZCk7CitleHRlcm4gUGFydGl0aW9u RGVzYyBSZWxhdGlvbkdldFBhcnRpdGlvbkRlc2NFeHQoUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJ CQkJIFNuYXBzaG90IG9taXRfZGV0YWNoZWRfc25hcHNob3QpOwogCi1leHRlcm4gUGFydGl0aW9u RGlyZWN0b3J5IENyZWF0ZVBhcnRpdGlvbkRpcmVjdG9yeShNZW1vcnlDb250ZXh0IG1jeHQsIGJv b2wgb21pdF9kZXRhY2hlZCk7CitleHRlcm4gUGFydGl0aW9uRGlyZWN0b3J5IENyZWF0ZVBhcnRp dGlvbkRpcmVjdG9yeShNZW1vcnlDb250ZXh0IG1jeHQsCisJCQkJCQkJCQkJCQkgICBTbmFwc2hv dCBvbWl0X2RldGFjaGVkX3NuYXBzaG90KTsKIGV4dGVybiBQYXJ0aXRpb25EZXNjIFBhcnRpdGlv bkRpcmVjdG9yeUxvb2t1cChQYXJ0aXRpb25EaXJlY3RvcnksIFJlbGF0aW9uKTsKIGV4dGVybiB2 b2lkIERlc3Ryb3lQYXJ0aXRpb25EaXJlY3RvcnkoUGFydGl0aW9uRGlyZWN0b3J5IHBkaXIpOwog Ci0tIAoyLjQzLjAKCg== --000000000000ad76fd0629ac03b6 Content-Type: application/x-patch; name="v1-0002-Avoid-using-SPI-in-RI-trigger-functions.patch" Content-Disposition: attachment; filename="v1-0002-Avoid-using-SPI-in-RI-trigger-functions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m4vc3t4a1 RnJvbSBkYzQ5ZTkzOGNiNmEzMTAzNGM5NzRmMzNlMjY4YzBhMTZjNzc4ZTlkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTkgRGVjIDIwMjQgMjE6MzU6MDQgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx IDIvM10gQXZvaWQgdXNpbmcgU1BJIGluIFJJIHRyaWdnZXIgZnVuY3Rpb25zCgpDdXJyZW50bHks IHJpX1BsYW5DaGVjaygpIHVzZXMgU1BJX3ByZXBhcmUoKSB0byBjcmVhdGUgYW4gU1BJIHBsYW4K Y29udGFpbmluZyBhIENhY2hlZFBsYW5Tb3VyY2UgZm9yIHRoZSBTUUwgcXVlcnkgdXNlZCBpbiBS SSBjaGVja3MuClNpbWlsYXJseSwgcmlfUGVyZm9ybUNoZWNrKCkgY2FsbHMgU1BJX2V4ZWN1dGVf c25hcHNob3QoKSB0bwpleGVjdXRlIHRoZSBxdWVyeSB3aXRoIGEgc3BlY2lmaWMgc25hcHNob3Qu CgpUaGlzIGNvbW1pdCBpbnRyb2R1Y2VzIHJpX1BsYW5DcmVhdGUoKSBhbmQgcmlfUGxhbkV4ZWN1 dGUoKSB0bwpyZXBsYWNlIFNQSV9wcmVwYXJlKCkgYW5kIFNQSV9leGVjdXRlX3NuYXBzaG90KCks IHJlc3BlY3RpdmVseS4KCiogcmlfUGxhbkNyZWF0ZSgpCgpDcmVhdGVzIGFuICJSSSBwbGFuIiBm b3IgYSBxdWVyeSB1c2luZyBhIGNhbGxlci1zcGVjaWZpZWQgY2FsbGJhY2sKZnVuY3Rpb24sIHN1 Y2ggYXMgcmlfU3FsU3RyaW5nUGxhbkNyZWF0ZSgpLCB3aGljaCBwcm9kdWNlcyBhCkNhY2hlZFBs YW5Tb3VyY2UgZm9yIHRoZSBpbnB1dCBTUUwgc3RyaW5nLiBUaGlzIG1pcnJvcnMgU1BJX3ByZXBh cmUoKQpmdW5jdGlvbmFsaXR5LgoKKiByaV9QbGFuRXhlY3V0ZSgpCgpFeGVjdXRlcyBhbiAiUkkg cGxhbiIgdXNpbmcgYSBjYWxsYmFjayBzYXZlZCB3aXRoaW4gdGhlICJSSSBwbGFuIgooc3RydWN0 IFJJUGxhbikuIEZvciBleGFtcGxlLCByaV9TcWxTdHJpbmdQbGFuRXhlY3V0ZSgpIGZldGNoZXMg YQpDYWNoZWRQbGFuIGZyb20gdGhlIENhY2hlZFBsYW5Tb3VyY2UgYW5kIGV4ZWN1dGVzIGl0cyBQ bGFubmVkU3RtdAp1c2luZyB0aGUgZXhlY3V0b3IuIFNuYXBzaG90IGhhbmRsaW5nIGlzIG5vdyBm dWxseSBtYW5hZ2VkIGJ5CnJpX1BlcmZvcm1DaGVjaygpLCBlbGltaW5hdGluZyBkZXBlbmRlbmNl IG9uIFNQSSdzIHNuYXBzaG90IGxvZ2ljLgoKVGhlc2UgY2hhbmdlcyBtYWtlIHJpX1BsYW5DcmVh dGUoKSBhbmQgcmlfUGxhbkV4ZWN1dGUoKSBwbHVnZ2FibGUsCmxheWluZyB0aGUgZ3JvdW5kd29y ayBmb3IgZnV0dXJlIGNvbW1pdHMgdG8gcmVwbGFjZSBTUUwtYmFzZWQgUkkKY2hlY2tzIHdpdGgg b3B0aW1pemVkIEMgZnVuY3Rpb25zIGZvciBkaXJlY3QgdGFibGUvaW5kZXggc2NhbnMuCgpOb3Rl OgoKVGhpcyBvbmx5IGFkZHJlc3NlcyBSSV8qIGZ1bmN0aW9ucyBhZGRyZXNzZWQgZnJvbSBSSSB0 cmlnZ2VycyBhbmQKbm90IHRob3NlIGNhbGxlZCBmcm9tIHRhYmxlY21kcy5jLCBzdWNoIGFzIFJJ X0luaXRpYWxfQ2hlY2soKSBhbmQKUklfUGFydGl0aW9uUmVtb3ZlX0NoZWNrKCksIHdoaWNoIHN0 aWxsIHVzZSBTUElfcHJlcGFyZSgpIGFuZApTUElfZXhlY3V0ZV9zbmFwc2hvdCgpLgoKUmV2aWV3 ZWQtYnk6IFJvYmVydCBIYWFzCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0ErSGl3 cUdrZkpmWWRlcTV2SFBoNmVxUEtqU2JmcEREWStqLWtYWUZlUFFlZHRTTGVnQG1haWwuZ21haWwu Y29tCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0ErSGl3cUc1ZThwazhzNys3emhy MU5jX1BHeWhFZE01Zj1wSGtNT2RLMVJZV1hmSnNnQG1haWwuZ21haWwuY29tCi0tLQogc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivc3BpLmMgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3V0aWxz L2FkdC9yaV90cmlnZ2Vycy5jIHwgNTk1ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KIDIg ZmlsZXMgY2hhbmdlZCwgNDg4IGluc2VydGlvbnMoKyksIDEwOSBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L3NwaS5jCmluZGV4IGMxZDhmZDA4YzYuLjFkNWU2NTMyYmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL3NwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCkBAIC03 NjQsNyArNzY0LDcgQEAgU1BJX2V4ZWN1dGVfcGxhbl93aXRoX3BhcmFtbGlzdChTUElQbGFuUHRy IHBsYW4sIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogICogZW5kIG9mIHRoZSBjb21tYW5kLgogICoK ICAqIFRoaXMgaXMgY3VycmVudGx5IG5vdCBkb2N1bWVudGVkIGluIHNwaS5zZ21sIGJlY2F1c2Ug aXQgaXMgb25seSBpbnRlbmRlZAotICogZm9yIHVzZSBieSBSSSB0cmlnZ2Vycy4KKyAqIGZvciB1 c2UgYnkgc29tZSBmdW5jdGlvbnMgaW4gcmlfdHJpZ2dlcnMuYy4KICAqCiAgKiBQYXNzaW5nIHNu YXBzaG90ID09IEludmFsaWRTbmFwc2hvdCB3aWxsIHNlbGVjdCB0aGUgbm9ybWFsIGJlaGF2aW9y IG9mCiAgKiBmZXRjaGluZyBhIG5ldyBzbmFwc2hvdCBmb3IgZWFjaCBxdWVyeS4KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3JpX3RyaWdnZXJzLmMKaW5kZXggMzE4NWY0OGFmYS4uODA0YTJhNjllNCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKQEAgLTksNyArOSw3IEBACiAgKglhY3Jvc3MgcXVl cnkgYW5kIHRyYW5zYWN0aW9uIGJvdW5kYXJpZXMsIGluIGZhY3QgdGhleSBsaXZlIGFzIGxvbmcg YXMKICAqCXRoZSBiYWNrZW5kIGRvZXMuICBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGhhc2h0YWJs ZSBzdHJ1Y3R1cmVzCiAgKgl0aGVtc2VsdmVzIGFyZSBhbGxvY2F0ZWQgYnkgZHluYWhhc2guYyBp biBpdHMgcGVybWFuZW50IER5bmFIYXNoQ3h0LAotICoJYW5kIHRoZSBTUEkgcGxhbnMgdGhleSBw b2ludCB0byBhcmUgc2F2ZWQgdXNpbmcgU1BJX2tlZXBwbGFuKCkuCisgKglhbmQgdGhlIENhY2hl ZFBsYW5Tb3VyY2VzIHRoZXkgcG9pbnQgdG8gYXJlIHNhdmVkIGluIENhY2hlZE1lbW9yeUNvbnRl eHQuCiAgKglUaGVyZSBpcyBub3QgY3VycmVudGx5IGFueSBwcm92aXNpb24gZm9yIHRocm93aW5n IGF3YXkgYSBuby1sb25nZXItbmVlZGVkCiAgKglwbGFuIC0tLSBjb25zaWRlciBpbXByb3Zpbmcg dGhpcyBzb21lZGF5LgogICoKQEAgLTM4LDYgKzM4LDkgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4u aCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY29lcmNlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3Bh cnNlX3JlbGF0aW9uLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNsdWRlICJ0 Y29wL3BxdWVyeS5oIgorI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgogI2luY2x1ZGUgInV0aWxz L2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0 dW0uaCIKQEAgLTEzMiwxMCArMTM1LDU1IEBAIHR5cGVkZWYgc3RydWN0IFJJX0NvbnN0cmFpbnRJ bmZvCiAJZGxpc3Rfbm9kZQl2YWxpZF9saW5rOwkJLyogTGluayBpbiBsaXN0IG9mIHZhbGlkIGVu dHJpZXMgKi8KIH0gUklfQ29uc3RyYWludEluZm87CiAKKy8qIFJJIHBsYW4gY2FsbGJhY2sgZnVu Y3Rpb25zICovCitzdHJ1Y3QgUklfUGxhbjsKK3R5cGVkZWYgdm9pZCAoKlJJX1BsYW5DcmVhdGVG dW5jX3R5cGUpIChzdHJ1Y3QgUklfUGxhbiAqcGxhbiwgY29uc3QgY2hhciAqcXVlcnlzdHIsIGlu dCBuYXJncywgT2lkICpwYXJhbXR5cGVzKTsKK3R5cGVkZWYgaW50ICgqUklfUGxhbkV4ZWNGdW5j X3R5cGUpIChzdHJ1Y3QgUklfUGxhbiAqcGxhbiwgUmVsYXRpb24gZmtfcmVsLCBSZWxhdGlvbiBw a19yZWwsCisJCQkJCQkJCQkgRGF0dW0gKnBhcmFtX3ZhbHMsIGNoYXIgKnBhcmFtc19pc251bGxz LAorCQkJCQkJCQkJIFNuYXBzaG90IGNyb3NzY2hlY2tfc25hcHNob3QsCisJCQkJCQkJCQkgaW50 IGxpbWl0LCBDbWRUeXBlICpsYXN0X3N0bXRfY21kdHlwZSk7Cit0eXBlZGVmIGJvb2wgKCpSSV9Q bGFuSXNWYWxpZEZ1bmNfdHlwZSkgKHN0cnVjdCBSSV9QbGFuICpwbGFuKTsKK3R5cGVkZWYgdm9p ZCAoKlJJX1BsYW5GcmVlRnVuY190eXBlKSAoc3RydWN0IFJJX1BsYW4gKnBsYW4pOworCisvKgor ICogUklfUGxhbgorICoKKyAqIEluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIGltcGxlbWVudGF0 aW9uIG9mIGEgcGxhbiBmb3IgYSBnaXZlbiBSSSBxdWVyeS4KKyAqIHJpX1BsYW5DaGVjaygpIG1h a2VzIGFuZCBzdG9yZXMgdGhlc2UgaW4gcmlfcXVlcnlfY2FjaGUuICBUaGUgY2FsbGVycyBvZgor ICogcmlfUGxhbkNoZWNrKCkgc3BlY2lmeSBhIFJJX1BsYW5DcmVhdGVGdW5jX3R5cGUgZnVuY3Rp b24gdG8gZmlsbCBpbiB0aGUKKyAqIGNhbGxlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRh aWxzIHN1Y2ggYXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucworICogdG8gY3JlYXRlLCB2YWxpZGF0 ZSwgZnJlZSBhIHBsYW4sIGFuZCBhbHNvIHRoZSBhcmd1bWVudHMgbmVjZXNzYXJ5IGZvcgorICog dGhlIGV4ZWN1dGlvbiBvZiB0aGUgcGxhbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgUklfUGxhbgor eworCS8qCisJICogQ29udGV4dCB1bmRlciB3aGljaCB0aGlzIHN0cnVjdCBhbmQgaXRzIHN1YnNp ZGlhcnkgZGF0YSBnZXRzIGFsbG9jYXRlZC4KKwkgKiBJdCBpcyBtYWRlIGEgY2hpbGQgb2YgQ2Fj aGVNZW1vcnlDb250ZXh0LgorCSAqLworCU1lbW9yeUNvbnRleHQJcGxhbmN4dDsKKworCS8qIFF1 ZXJ5IHBhcmFtZXRlciB0eXBlcy4gKi8KKwlpbnQJCQkJbmFyZ3M7CisJT2lkCQkJICAgKnBhcmFt dHlwZXM7CisKKwkvKgorCSAqIFNldCBvZiBmdW5jdGlvbnMgc3BlY2lmaWVkIGJ5IGEgUkkgdHJp Z2dlciBmdW5jdGlvbiB0byBpbXBsZW1lbnQKKwkgKiB0aGUgcGxhbiBmb3IgdGhlIHRyaWdnZXIn cyBSSSBxdWVyeS4KKwkgKi8KKwlSSV9QbGFuRXhlY0Z1bmNfdHlwZSBwbGFuX2V4ZWNfZnVuYzsJ LyogZXhlY3V0ZSB0aGUgcGxhbiAqLworCXZvaWQJCSAgICpwbGFuX2V4ZWNfYXJnOwkJCS8qIGV4 ZWN1dGlvbiBhcmd1bWVudCwgc3VjaCBhcworCQkJCQkJCQkJCQkgKiBhIExpc3Qgb2YgQ2FjaGVk UGxhblNvdXJjZSAqLworCVJJX1BsYW5Jc1ZhbGlkRnVuY190eXBlIHBsYW5faXNfdmFsaWRfZnVu YzsgLyogY2hlY2sgaWYgdGhlIHBsYW4gc3RpbGwKKwkJCQkJCQkJCQkJCSAqIHZhbGlkIGZvciBy aV9xdWVyeV9jYWNoZQorCQkJCQkJCQkJCQkJICogdG8gY29udGludWUgY2FjaGluZyBpdCAqLwor CVJJX1BsYW5GcmVlRnVuY190eXBlIHBsYW5fZnJlZV9mdW5jOwkvKiByZWxlYXNlIHBsYW4gcmVz b3VyY2VzICovCit9IFJJX1BsYW47CisKIC8qCiAgKiBSSV9RdWVyeUtleQogICoKLSAqIFRoZSBr ZXkgaWRlbnRpZnlpbmcgYSBwcmVwYXJlZCBTUEkgcGxhbiBpbiBvdXIgcXVlcnkgaGFzaHRhYmxl CisgKiBUaGUga2V5IGlkZW50aWZ5aW5nIGEgcGxhbiBpbiBvdXIgcXVlcnkgaGFzaHRhYmxlCiAg Ki8KIHR5cGVkZWYgc3RydWN0IFJJX1F1ZXJ5S2V5CiB7CkBAIC0xNDksNyArMTk3LDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgUklfUXVlcnlLZXkKIHR5cGVkZWYgc3RydWN0IFJJX1F1ZXJ5SGFzaEVudHJ5 CiB7CiAJUklfUXVlcnlLZXkga2V5OwotCVNQSVBsYW5QdHIJcGxhbjsKKwlSSV9QbGFuCSAgICpw bGFuOwogfSBSSV9RdWVyeUhhc2hFbnRyeTsKIAogLyoKQEAgLTIxMiw4ICsyNjAsOCBAQCBzdGF0 aWMgYm9vbCByaV9Db21wYXJlV2l0aENhc3QoT2lkIGVxX29wciwgT2lkIHR5cGVpZCwgT2lkIGNv bGxpZCwKIAogc3RhdGljIHZvaWQgcmlfSW5pdEhhc2hUYWJsZXModm9pZCk7CiBzdGF0aWMgdm9p ZCBJbnZhbGlkYXRlQ29uc3RyYWludENhY2hlQ2FsbEJhY2soRGF0dW0gYXJnLCBpbnQgY2FjaGVp ZCwgdWludDMyIGhhc2h2YWx1ZSk7Ci1zdGF0aWMgU1BJUGxhblB0ciByaV9GZXRjaFByZXBhcmVk UGxhbihSSV9RdWVyeUtleSAqa2V5KTsKLXN0YXRpYyB2b2lkIHJpX0hhc2hQcmVwYXJlZFBsYW4o UklfUXVlcnlLZXkgKmtleSwgU1BJUGxhblB0ciBwbGFuKTsKK3N0YXRpYyBSSV9QbGFuICpyaV9G ZXRjaFByZXBhcmVkUGxhbihSSV9RdWVyeUtleSAqa2V5KTsKK3N0YXRpYyB2b2lkIHJpX0hhc2hQ cmVwYXJlZFBsYW4oUklfUXVlcnlLZXkgKmtleSwgUklfUGxhbiAqcGxhbik7CiBzdGF0aWMgUklf Q29tcGFyZUhhc2hFbnRyeSAqcmlfSGFzaENvbXBhcmVPcChPaWQgZXFfb3ByLCBPaWQgdHlwZWlk KTsKIAogc3RhdGljIHZvaWQgcmlfQ2hlY2tUcmlnZ2VyKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZv LCBjb25zdCBjaGFyICpmdW5jbmFtZSwKQEAgLTIyMiwxNCArMjcwLDE1IEBAIHN0YXRpYyBjb25z dCBSSV9Db25zdHJhaW50SW5mbyAqcmlfRmV0Y2hDb25zdHJhaW50SW5mbyhUcmlnZ2VyICp0cmln Z2VyLAogCQkJCQkJCQkJCQkJCSAgIFJlbGF0aW9uIHRyaWdfcmVsLCBib29sIHJlbF9pc19wayk7 CiBzdGF0aWMgY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpX0xvYWRDb25zdHJhaW50SW5mbyhP aWQgY29uc3RyYWludE9pZCk7CiBzdGF0aWMgT2lkCWdldF9yaV9jb25zdHJhaW50X3Jvb3QoT2lk IGNvbnN0ck9pZCk7Ci1zdGF0aWMgU1BJUGxhblB0ciByaV9QbGFuQ2hlY2soY29uc3QgY2hhciAq cXVlcnlzdHIsIGludCBuYXJncywgT2lkICphcmd0eXBlcywKLQkJCQkJCQkgICBSSV9RdWVyeUtl eSAqcWtleSwgUmVsYXRpb24gZmtfcmVsLCBSZWxhdGlvbiBwa19yZWwpOworc3RhdGljIFJJX1Bs YW4gKnJpX1BsYW5DaGVjayhSSV9QbGFuQ3JlYXRlRnVuY190eXBlIHBsYW5fY3JlYXRlX2Z1bmMs CisJCQkJCQkJIGNvbnN0IGNoYXIgKnF1ZXJ5c3RyLCBpbnQgbmFyZ3MsIE9pZCAqYXJndHlwZXMs CisJCQkJCQkJIFJJX1F1ZXJ5S2V5ICpxa2V5LCBSZWxhdGlvbiBma19yZWwsIFJlbGF0aW9uIHBr X3JlbCk7CiBzdGF0aWMgYm9vbCByaV9QZXJmb3JtQ2hlY2soY29uc3QgUklfQ29uc3RyYWludElu Zm8gKnJpaW5mbywKLQkJCQkJCQlSSV9RdWVyeUtleSAqcWtleSwgU1BJUGxhblB0ciBxcGxhbiwK KwkJCQkJCQlSSV9RdWVyeUtleSAqcWtleSwgUklfUGxhbiAqcXBsYW4sCiAJCQkJCQkJUmVsYXRp b24gZmtfcmVsLCBSZWxhdGlvbiBwa19yZWwsCiAJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKm9sZHNs b3QsIFR1cGxlVGFibGVTbG90ICpuZXdzbG90LAogCQkJCQkJCWJvb2wgaXNfcmVzdHJpY3QsCi0J CQkJCQkJYm9vbCBkZXRlY3ROZXdSb3dzLCBpbnQgZXhwZWN0X09LKTsKKwkJCQkJCQlib29sIGRl dGVjdE5ld1Jvd3MsIGludCBleHBlY3RlZF9jbWR0eXBlKTsKIHN0YXRpYyB2b2lkIHJpX0V4dHJh Y3RWYWx1ZXMoUmVsYXRpb24gcmVsLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJCQkgY29u c3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywgYm9vbCByZWxfaXNfcGssCiAJCQkJCQkJIERh dHVtICp2YWxzLCBjaGFyICpudWxscyk7CkBAIC0yMzcsNiArMjg2LDE0IEBAIHN0YXRpYyB2b2lk IHJpX1JlcG9ydFZpb2xhdGlvbihjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAogCQkJ CQkJCSAgIFJlbGF0aW9uIHBrX3JlbCwgUmVsYXRpb24gZmtfcmVsLAogCQkJCQkJCSAgIFR1cGxl VGFibGVTbG90ICp2aW9sYXRvcnNsb3QsIFR1cGxlRGVzYyB0dXBkZXNjLAogCQkJCQkJCSAgIGlu dCBxdWVyeW5vLCBib29sIGlzX3Jlc3RyaWN0LCBib29sIHBhcnRnb25lKSBwZ19hdHRyaWJ1dGVf bm9yZXR1cm4oKTsKK3N0YXRpYyB2b2lkIHJpX1NxbFN0cmluZ1BsYW5DcmVhdGUoUklfUGxhbiAq cGxhbiwKKwkJCQkJICAgY29uc3QgY2hhciAqcXVlcnlzdHIsIGludCBuYXJncywgT2lkICpwYXJh bXR5cGVzKTsKK3N0YXRpYyBib29sIHJpX1NxbFN0cmluZ1BsYW5Jc1ZhbGlkKFJJX1BsYW4gKnBs YW4pOworc3RhdGljIGludCByaV9TcWxTdHJpbmdQbGFuRXhlY3V0ZShSSV9QbGFuICpwbGFuLCBS ZWxhdGlvbiBma19yZWwsIFJlbGF0aW9uIHBrX3JlbCwKKwkJCQkJCURhdHVtICp2YWxzLCBjaGFy ICpudWxscywKKwkJCQkJCVNuYXBzaG90IGNyb3NzY2hlY2tfc25hcHNob3QsCisJCQkJCQlpbnQg bGltaXQsIENtZFR5cGUgKmxhc3Rfc3RtdF9jbWR0eXBlKTsKK3N0YXRpYyB2b2lkIHJpX1NxbFN0 cmluZ1BsYW5GcmVlKFJJX1BsYW4gKnBsYW4pOwogCiAKIC8qCkBAIC0yNTIsNyArMzA5LDcgQEAg UklfRktleV9jaGVjayhUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEpCiAJUmVsYXRpb24JcGtfcmVsOwog CVR1cGxlVGFibGVTbG90ICpuZXdzbG90OwogCVJJX1F1ZXJ5S2V5IHFrZXk7Ci0JU1BJUGxhblB0 cglxcGxhbjsKKwlSSV9QbGFuCSAgICpxcGxhbjsKIAogCXJpaW5mbyA9IHJpX0ZldGNoQ29uc3Ry YWludEluZm8odHJpZ2RhdGEtPnRnX3RyaWdnZXIsCiAJCQkJCQkJCQl0cmlnZGF0YS0+dGdfcmVs YXRpb24sIGZhbHNlKTsKQEAgLTM0OSw4ICs0MDYsNiBAQCBSSV9GS2V5X2NoZWNrKFRyaWdnZXJE YXRhICp0cmlnZGF0YSkKIAkJCWJyZWFrOwogCX0KIAotCVNQSV9jb25uZWN0KCk7Ci0KIAkvKiBG ZXRjaCBvciBwcmVwYXJlIGEgc2F2ZWQgcGxhbiBmb3IgdGhlIHJlYWwgY2hlY2sgKi8KIAlyaV9C dWlsZFF1ZXJ5S2V5KCZxa2V5LCByaWluZm8sIFJJX1BMQU5fQ0hFQ0tfTE9PS1VQUEspOwogCkBA IC00MzUsOCArNDkwLDkgQEAgUklfRktleV9jaGVjayhUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEpCiAJ CQlhcHBlbmRTdHJpbmdJbmZvKCZxdWVyeWJ1ZiwgIih4MS5yKSIpOwogCQl9CiAKLQkJLyogUHJl cGFyZSBhbmQgc2F2ZSB0aGUgcGxhbiAqLwotCQlxcGxhbiA9IHJpX1BsYW5DaGVjayhxdWVyeWJ1 Zi5kYXRhLCByaWluZm8tPm5rZXlzLCBxdWVyeW9pZHMsCisJCS8qIFByZXBhcmUgYW5kIHNhdmUg dGhlIHBsYW4gdXNpbmcgcmlfU3FsU3RyaW5nUGxhbkNyZWF0ZSgpLiAqLworCQlxcGxhbiA9IHJp X1BsYW5DaGVjayhyaV9TcWxTdHJpbmdQbGFuQ3JlYXRlLAorCQkJCQkJCSBxdWVyeWJ1Zi5kYXRh LCByaWluZm8tPm5rZXlzLCBxdWVyeW9pZHMsCiAJCQkJCQkJICZxa2V5LCBma19yZWwsIHBrX3Jl bCk7CiAJfQogCkBAIC00NTIsMTAgKzUwOCw3IEBAIFJJX0ZLZXlfY2hlY2soVHJpZ2dlckRhdGEg KnRyaWdkYXRhKQogCQkJCQlOVUxMLCBuZXdzbG90LAogCQkJCQlmYWxzZSwKIAkJCQkJcGtfcmVs LT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSwKLQkJCQkJU1BJ X09LX1NFTEVDVCk7Ci0KLQlpZiAoU1BJX2ZpbmlzaCgpICE9IFNQSV9PS19GSU5JU0gpCi0JCWVs b2coRVJST1IsICJTUElfZmluaXNoIGZhaWxlZCIpOworCQkJCQlDTURfU0VMRUNUKTsKIAogCXRh YmxlX2Nsb3NlKHBrX3JlbCwgUm93U2hhcmVMb2NrKTsKIApAQCAtNTEwLDE1ICs1NjMsMTMgQEAg cmlfQ2hlY2tfUGtfTWF0Y2goUmVsYXRpb24gcGtfcmVsLCBSZWxhdGlvbiBma19yZWwsCiAJCQkJ ICBUdXBsZVRhYmxlU2xvdCAqb2xkc2xvdCwKIAkJCQkgIGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZv ICpyaWluZm8pCiB7Ci0JU1BJUGxhblB0cglxcGxhbjsKKwlSSV9QbGFuCSAgICpxcGxhbjsKIAlS SV9RdWVyeUtleSBxa2V5OwogCWJvb2wJCXJlc3VsdDsKIAogCS8qIE9ubHkgY2FsbGVkIGZvciBu b24tbnVsbCByb3dzICovCiAJQXNzZXJ0KHJpX051bGxDaGVjayhSZWxhdGlvbkdldERlc2NyKHBr X3JlbCksIG9sZHNsb3QsIHJpaW5mbywgdHJ1ZSkgPT0gUklfS0VZU19OT05FX05VTEwpOwogCi0J U1BJX2Nvbm5lY3QoKTsKLQogCS8qCiAJICogRmV0Y2ggb3IgcHJlcGFyZSBhIHNhdmVkIHBsYW4g Zm9yIGNoZWNraW5nIFBLIHRhYmxlIHdpdGggdmFsdWVzIGNvbWluZwogCSAqIGZyb20gYSBQSyBy b3cKQEAgLTYwNCw4ICs2NTUsOSBAQCByaV9DaGVja19Qa19NYXRjaChSZWxhdGlvbiBwa19yZWws IFJlbGF0aW9uIGZrX3JlbCwKIAkJCWFwcGVuZFN0cmluZ0luZm8oJnF1ZXJ5YnVmLCAiKHgxLnIp Iik7CiAJCX0KIAotCQkvKiBQcmVwYXJlIGFuZCBzYXZlIHRoZSBwbGFuICovCi0JCXFwbGFuID0g cmlfUGxhbkNoZWNrKHF1ZXJ5YnVmLmRhdGEsIHJpaW5mby0+bmtleXMsIHF1ZXJ5b2lkcywKKwkJ LyogUHJlcGFyZSBhbmQgc2F2ZSB0aGUgcGxhbiB1c2luZyByaV9TcWxTdHJpbmdQbGFuQ3JlYXRl KCkuICovCisJCXFwbGFuID0gcmlfUGxhbkNoZWNrKHJpX1NxbFN0cmluZ1BsYW5DcmVhdGUsCisJ CQkJCQkJIHF1ZXJ5YnVmLmRhdGEsIHJpaW5mby0+bmtleXMsIHF1ZXJ5b2lkcywKIAkJCQkJCQkg JnFrZXksIGZrX3JlbCwgcGtfcmVsKTsKIAl9CiAKQEAgLTYxNywxMCArNjY5LDcgQEAgcmlfQ2hl Y2tfUGtfTWF0Y2goUmVsYXRpb24gcGtfcmVsLCBSZWxhdGlvbiBma19yZWwsCiAJCQkJCQkJIG9s ZHNsb3QsIE5VTEwsCiAJCQkJCQkJIGZhbHNlLAogCQkJCQkJCSB0cnVlLAkvKiB0cmVhdCBsaWtl IHVwZGF0ZSAqLwotCQkJCQkJCSBTUElfT0tfU0VMRUNUKTsKLQotCWlmIChTUElfZmluaXNoKCkg IT0gU1BJX09LX0ZJTklTSCkKLQkJZWxvZyhFUlJPUiwgIlNQSV9maW5pc2ggZmFpbGVkIik7CisJ CQkJCQkJIENNRF9TRUxFQ1QpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTcxNCw3ICs3NjMs NyBAQCByaV9yZXN0cmljdChUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEsIGJvb2wgaXNfbm9fYWN0aW9u KQogCVJlbGF0aW9uCXBrX3JlbDsKIAlUdXBsZVRhYmxlU2xvdCAqb2xkc2xvdDsKIAlSSV9RdWVy eUtleSBxa2V5OwotCVNQSVBsYW5QdHIJcXBsYW47CisJUklfUGxhbgkgICAqcXBsYW47CiAKIAly aWluZm8gPSByaV9GZXRjaENvbnN0cmFpbnRJbmZvKHRyaWdkYXRhLT50Z190cmlnZ2VyLAogCQkJ CQkJCQkJdHJpZ2RhdGEtPnRnX3JlbGF0aW9uLCB0cnVlKTsKQEAgLTc0Miw4ICs3OTEsNiBAQCBy aV9yZXN0cmljdChUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEsIGJvb2wgaXNfbm9fYWN0aW9uKQogCQly ZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwogCX0KIAotCVNQSV9jb25uZWN0KCk7Ci0KIAkv KgogCSAqIEZldGNoIG9yIHByZXBhcmUgYSBzYXZlZCBwbGFuIGZvciB0aGUgcmVzdHJpY3QgbG9v a3VwIChpdCdzIHRoZSBzYW1lCiAJICogcXVlcnkgZm9yIGRlbGV0ZSBhbmQgdXBkYXRlIGNhc2Vz KQpAQCAtNzkyLDggKzgzOSw5IEBAIHJpX3Jlc3RyaWN0KFRyaWdnZXJEYXRhICp0cmlnZGF0YSwg Ym9vbCBpc19ub19hY3Rpb24pCiAJCX0KIAkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcXVlcnli dWYsICIgRk9SIEtFWSBTSEFSRSBPRiB4Iik7CiAKLQkJLyogUHJlcGFyZSBhbmQgc2F2ZSB0aGUg cGxhbiAqLwotCQlxcGxhbiA9IHJpX1BsYW5DaGVjayhxdWVyeWJ1Zi5kYXRhLCByaWluZm8tPm5r ZXlzLCBxdWVyeW9pZHMsCisJCS8qIFByZXBhcmUgYW5kIHNhdmUgdGhlIHBsYW4gdXNpbmcgcmlf U3FsU3RyaW5nUGxhbkNyZWF0ZSgpLiAqLworCQlxcGxhbiA9IHJpX1BsYW5DaGVjayhyaV9TcWxT dHJpbmdQbGFuQ3JlYXRlLAorCQkJCQkJCSBxdWVyeWJ1Zi5kYXRhLCByaWluZm8tPm5rZXlzLCBx dWVyeW9pZHMsCiAJCQkJCQkJICZxa2V5LCBma19yZWwsIHBrX3JlbCk7CiAJfQogCkBAIC04MDUs MTAgKzg1Myw3IEBAIHJpX3Jlc3RyaWN0KFRyaWdnZXJEYXRhICp0cmlnZGF0YSwgYm9vbCBpc19u b19hY3Rpb24pCiAJCQkJCW9sZHNsb3QsIE5VTEwsCiAJCQkJCSFpc19ub19hY3Rpb24sCiAJCQkJ CXRydWUsCQkvKiBtdXN0IGRldGVjdCBuZXcgcm93cyAqLwotCQkJCQlTUElfT0tfU0VMRUNUKTsK LQotCWlmIChTUElfZmluaXNoKCkgIT0gU1BJX09LX0ZJTklTSCkKLQkJZWxvZyhFUlJPUiwgIlNQ SV9maW5pc2ggZmFpbGVkIik7CisJCQkJCUNNRF9TRUxFQ1QpOwogCiAJdGFibGVfY2xvc2UoZmtf cmVsLCBSb3dTaGFyZUxvY2spOwogCkBAIC04MzAsNyArODc1LDcgQEAgUklfRktleV9jYXNjYWRl X2RlbChQR19GVU5DVElPTl9BUkdTKQogCVJlbGF0aW9uCXBrX3JlbDsKIAlUdXBsZVRhYmxlU2xv dCAqb2xkc2xvdDsKIAlSSV9RdWVyeUtleSBxa2V5OwotCVNQSVBsYW5QdHIJcXBsYW47CisJUklf UGxhbgkgICAqcXBsYW47CiAKIAkvKiBDaGVjayB0aGF0IHRoaXMgaXMgYSB2YWxpZCB0cmlnZ2Vy IGNhbGwgb24gdGhlIHJpZ2h0IHRpbWUgYW5kIGV2ZW50LiAqLwogCXJpX0NoZWNrVHJpZ2dlcihm Y2luZm8sICJSSV9GS2V5X2Nhc2NhZGVfZGVsIiwgUklfVFJJR1RZUEVfREVMRVRFKTsKQEAgLTg0 OCw4ICs4OTMsNiBAQCBSSV9GS2V5X2Nhc2NhZGVfZGVsKFBHX0ZVTkNUSU9OX0FSR1MpCiAJcGtf cmVsID0gdHJpZ2RhdGEtPnRnX3JlbGF0aW9uOwogCW9sZHNsb3QgPSB0cmlnZGF0YS0+dGdfdHJp Z3Nsb3Q7CiAKLQlTUElfY29ubmVjdCgpOwotCiAJLyogRmV0Y2ggb3IgcHJlcGFyZSBhIHNhdmVk IHBsYW4gZm9yIHRoZSBjYXNjYWRlZCBkZWxldGUgKi8KIAlyaV9CdWlsZFF1ZXJ5S2V5KCZxa2V5 LCByaWluZm8sIFJJX1BMQU5fQ0FTQ0FERV9PTkRFTEVURSk7CiAKQEAgLTg5Myw4ICs5MzYsOSBA QCBSSV9GS2V5X2Nhc2NhZGVfZGVsKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQlxdWVyeW9pZHNbaV0g PSBwa190eXBlOwogCQl9CiAKLQkJLyogUHJlcGFyZSBhbmQgc2F2ZSB0aGUgcGxhbiAqLwotCQlx cGxhbiA9IHJpX1BsYW5DaGVjayhxdWVyeWJ1Zi5kYXRhLCByaWluZm8tPm5rZXlzLCBxdWVyeW9p ZHMsCisJCS8qIFByZXBhcmUgYW5kIHNhdmUgdGhlIHBsYW4gdXNpbmcgcmlfU3FsU3RyaW5nUGxh bkNyZWF0ZSgpLiAqLworCQlxcGxhbiA9IHJpX1BsYW5DaGVjayhyaV9TcWxTdHJpbmdQbGFuQ3Jl YXRlLAorCQkJCQkJCSBxdWVyeWJ1Zi5kYXRhLCByaWluZm8tPm5rZXlzLCBxdWVyeW9pZHMsCiAJ CQkJCQkJICZxa2V5LCBma19yZWwsIHBrX3JlbCk7CiAJfQogCkBAIC05MDcsMTAgKzk1MSw3IEBA IFJJX0ZLZXlfY2FzY2FkZV9kZWwoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJb2xkc2xvdCwgTlVM TCwKIAkJCQkJZmFsc2UsCiAJCQkJCXRydWUsCQkvKiBtdXN0IGRldGVjdCBuZXcgcm93cyAqLwot CQkJCQlTUElfT0tfREVMRVRFKTsKLQotCWlmIChTUElfZmluaXNoKCkgIT0gU1BJX09LX0ZJTklT SCkKLQkJZWxvZyhFUlJPUiwgIlNQSV9maW5pc2ggZmFpbGVkIik7CisJCQkJCUNNRF9ERUxFVEUp OwogCiAJdGFibGVfY2xvc2UoZmtfcmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKIApAQCAtOTMzLDcg Kzk3NCw3IEBAIFJJX0ZLZXlfY2FzY2FkZV91cGQoUEdfRlVOQ1RJT05fQVJHUykKIAlUdXBsZVRh YmxlU2xvdCAqbmV3c2xvdDsKIAlUdXBsZVRhYmxlU2xvdCAqb2xkc2xvdDsKIAlSSV9RdWVyeUtl eSBxa2V5OwotCVNQSVBsYW5QdHIJcXBsYW47CisJUklfUGxhbgkgICAqcXBsYW47CiAKIAkvKiBD aGVjayB0aGF0IHRoaXMgaXMgYSB2YWxpZCB0cmlnZ2VyIGNhbGwgb24gdGhlIHJpZ2h0IHRpbWUg YW5kIGV2ZW50LiAqLwogCXJpX0NoZWNrVHJpZ2dlcihmY2luZm8sICJSSV9GS2V5X2Nhc2NhZGVf dXBkIiwgUklfVFJJR1RZUEVfVVBEQVRFKTsKQEAgLTk1Myw4ICs5OTQsNiBAQCBSSV9GS2V5X2Nh c2NhZGVfdXBkKFBHX0ZVTkNUSU9OX0FSR1MpCiAJbmV3c2xvdCA9IHRyaWdkYXRhLT50Z19uZXdz bG90OwogCW9sZHNsb3QgPSB0cmlnZGF0YS0+dGdfdHJpZ3Nsb3Q7CiAKLQlTUElfY29ubmVjdCgp OwotCiAJLyogRmV0Y2ggb3IgcHJlcGFyZSBhIHNhdmVkIHBsYW4gZm9yIHRoZSBjYXNjYWRlZCB1 cGRhdGUgKi8KIAlyaV9CdWlsZFF1ZXJ5S2V5KCZxa2V5LCByaWluZm8sIFJJX1BMQU5fQ0FTQ0FE RV9PTlVQREFURSk7CiAKQEAgLTEwMTEsOCArMTA1MCw5IEBAIFJJX0ZLZXlfY2FzY2FkZV91cGQo UEdfRlVOQ1RJT05fQVJHUykKIAkJfQogCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKCZxdWVyeWJ1 ZiwgcXVhbGJ1Zi5kYXRhLCBxdWFsYnVmLmxlbik7CiAKLQkJLyogUHJlcGFyZSBhbmQgc2F2ZSB0 aGUgcGxhbiAqLwotCQlxcGxhbiA9IHJpX1BsYW5DaGVjayhxdWVyeWJ1Zi5kYXRhLCByaWluZm8t Pm5rZXlzICogMiwgcXVlcnlvaWRzLAorCQkvKiBQcmVwYXJlIGFuZCBzYXZlIHRoZSBwbGFuIHVz aW5nIHJpX1NxbFN0cmluZ1BsYW5DcmVhdGUoKS4gKi8KKwkJcXBsYW4gPSByaV9QbGFuQ2hlY2so cmlfU3FsU3RyaW5nUGxhbkNyZWF0ZSwKKwkJCQkJCQkgcXVlcnlidWYuZGF0YSwgcmlpbmZvLT5u a2V5cyAqIDIsIHF1ZXJ5b2lkcywKIAkJCQkJCQkgJnFrZXksIGZrX3JlbCwgcGtfcmVsKTsKIAl9 CiAKQEAgLTEwMjQsMTAgKzEwNjQsNyBAQCBSSV9GS2V5X2Nhc2NhZGVfdXBkKFBHX0ZVTkNUSU9O X0FSR1MpCiAJCQkJCW9sZHNsb3QsIG5ld3Nsb3QsCiAJCQkJCWZhbHNlLAogCQkJCQl0cnVlLAkJ LyogbXVzdCBkZXRlY3QgbmV3IHJvd3MgKi8KLQkJCQkJU1BJX09LX1VQREFURSk7Ci0KLQlpZiAo U1BJX2ZpbmlzaCgpICE9IFNQSV9PS19GSU5JU0gpCi0JCWVsb2coRVJST1IsICJTUElfZmluaXNo IGZhaWxlZCIpOworCQkJCQlDTURfVVBEQVRFKTsKIAogCXRhYmxlX2Nsb3NlKGZrX3JlbCwgUm93 RXhjbHVzaXZlTG9jayk7CiAKQEAgLTExMDksNyArMTE0Niw3IEBAIHJpX3NldChUcmlnZ2VyRGF0 YSAqdHJpZ2RhdGEsIGJvb2wgaXNfc2V0X251bGwsIGludCB0Z2tpbmQpCiAJUmVsYXRpb24JcGtf cmVsOwogCVR1cGxlVGFibGVTbG90ICpvbGRzbG90OwogCVJJX1F1ZXJ5S2V5IHFrZXk7Ci0JU1BJ UGxhblB0cglxcGxhbjsKKwlSSV9QbGFuCSAgICpxcGxhbjsKIAlpbnQzMgkJcXVlcnlubzsKIAog CXJpaW5mbyA9IHJpX0ZldGNoQ29uc3RyYWludEluZm8odHJpZ2RhdGEtPnRnX3RyaWdnZXIsCkBA IC0xMTI1LDggKzExNjIsNiBAQCByaV9zZXQoVHJpZ2dlckRhdGEgKnRyaWdkYXRhLCBib29sIGlz X3NldF9udWxsLCBpbnQgdGdraW5kKQogCXBrX3JlbCA9IHRyaWdkYXRhLT50Z19yZWxhdGlvbjsK IAlvbGRzbG90ID0gdHJpZ2RhdGEtPnRnX3RyaWdzbG90OwogCi0JU1BJX2Nvbm5lY3QoKTsKLQog CS8qCiAJICogRmV0Y2ggb3IgcHJlcGFyZSBhIHNhdmVkIHBsYW4gZm9yIHRoZSB0cmlnZ2VyLgog CSAqLwpAQCAtMTIzOSw4ICsxMjc0LDkgQEAgcmlfc2V0KFRyaWdnZXJEYXRhICp0cmlnZGF0YSwg Ym9vbCBpc19zZXRfbnVsbCwgaW50IHRna2luZCkKIAkJCXF1ZXJ5b2lkc1tpXSA9IHBrX3R5cGU7 CiAJCX0KIAotCQkvKiBQcmVwYXJlIGFuZCBzYXZlIHRoZSBwbGFuICovCi0JCXFwbGFuID0gcmlf UGxhbkNoZWNrKHF1ZXJ5YnVmLmRhdGEsIHJpaW5mby0+bmtleXMsIHF1ZXJ5b2lkcywKKwkJLyog UHJlcGFyZSBhbmQgc2F2ZSB0aGUgcGxhbiB1c2luZyByaV9TcWxTdHJpbmdQbGFuQ3JlYXRlKCku ICovCisJCXFwbGFuID0gcmlfUGxhbkNoZWNrKHJpX1NxbFN0cmluZ1BsYW5DcmVhdGUsCisJCQkJ CQkJIHF1ZXJ5YnVmLmRhdGEsIHJpaW5mby0+bmtleXMsIHF1ZXJ5b2lkcywKIAkJCQkJCQkgJnFr ZXksIGZrX3JlbCwgcGtfcmVsKTsKIAl9CiAKQEAgLTEyNTIsMTAgKzEyODgsNyBAQCByaV9zZXQo VHJpZ2dlckRhdGEgKnRyaWdkYXRhLCBib29sIGlzX3NldF9udWxsLCBpbnQgdGdraW5kKQogCQkJ CQlvbGRzbG90LCBOVUxMLAogCQkJCQlmYWxzZSwKIAkJCQkJdHJ1ZSwJCS8qIG11c3QgZGV0ZWN0 IG5ldyByb3dzICovCi0JCQkJCVNQSV9PS19VUERBVEUpOwotCi0JaWYgKFNQSV9maW5pc2goKSAh PSBTUElfT0tfRklOSVNIKQotCQllbG9nKEVSUk9SLCAiU1BJX2ZpbmlzaCBmYWlsZWQiKTsKKwkJ CQkJQ01EX1VQREFURSk7CiAKIAl0YWJsZV9jbG9zZShma19yZWwsIFJvd0V4Y2x1c2l2ZUxvY2sp OwogCkBAIC0xNDQ1LDcgKzE0NzgsNyBAQCBSSV9Jbml0aWFsX0NoZWNrKFRyaWdnZXIgKnRyaWdn ZXIsIFJlbGF0aW9uIGZrX3JlbCwgUmVsYXRpb24gcGtfcmVsKQogCWludAkJCXNhdmVfbmVzdGxl dmVsOwogCWNoYXIJCXdvcmttZW1idWZbMzJdOwogCWludAkJCXNwaV9yZXN1bHQ7Ci0JU1BJUGxh blB0cglxcGxhbjsKKwlTUElQbGFuUHRyICBxcGxhbjsKIAogCXJpaW5mbyA9IHJpX0ZldGNoQ29u c3RyYWludEluZm8odHJpZ2dlciwgZmtfcmVsLCBmYWxzZSk7CiAKQEAgLTIwMzQsNyArMjA2Nyw3 IEBAIHJpX0dlbmVyYXRlUXVhbENvbGxhdGlvbihTdHJpbmdJbmZvIGJ1ZiwgT2lkIGNvbGxhdGlv bikKIC8qIC0tLS0tLS0tLS0KICAqIHJpX0J1aWxkUXVlcnlLZXkgLQogICoKLSAqCUNvbnN0cnVj dCBhIGhhc2h0YWJsZSBrZXkgZm9yIGEgcHJlcGFyZWQgU1BJIHBsYW4gb2YgYW4gRksgY29uc3Ry YWludC4KKyAqCUNvbnN0cnVjdCBhIGhhc2h0YWJsZSBrZXkgZm9yIGEgcGxhbiBvZiBhbiBGSyBj b25zdHJhaW50LgogICoKICAqCQlrZXk6IG91dHB1dCBhcmd1bWVudCwgKmtleSBpcyBmaWxsZWQg aW4gYmFzZWQgb24gdGhlIG90aGVyIGFyZ3VtZW50cwogICoJCXJpaW5mbzogaW5mbyBkZXJpdmVk IGZyb20gcGdfY29uc3RyYWludCBlbnRyeQpAQCAtMjA1Myw5ICsyMDg2LDkgQEAgcmlfQnVpbGRR dWVyeUtleShSSV9RdWVyeUtleSAqa2V5LCBjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZv LAogCSAqIHRoZSBGSyBjb25zdHJhaW50IChpLmUuLCBub3QgdGhlIHRhYmxlIG9uIHdoaWNoIHRo ZSB0cmlnZ2VyIGhhcyBiZWVuCiAJICogZmlyZWQpLCBhbmQgc28gaXQgd2lsbCBiZSB0aGUgc2Ft ZSBmb3IgYWxsIG1lbWJlcnMgb2YgdGhlIGluaGVyaXRhbmNlCiAJICogdHJlZS4gIFNvIHdlIG1h eSB1c2UgdGhlIHJvb3QgY29uc3RyYWludCdzIE9JRCBpbiB0aGUgaGFzaCBrZXksIHJhdGhlcgot CSAqIHRoYW4gdGhlIGNvbnN0cmFpbnQncyBvd24gT0lELiAgVGhpcyBhdm9pZHMgY3JlYXRpbmcg ZHVwbGljYXRlIFNQSQotCSAqIHBsYW5zLCBzYXZpbmcgbG90cyBvZiB3b3JrIGFuZCBtZW1vcnkg d2hlbiB0aGVyZSBhcmUgbWFueSBwYXJ0aXRpb25zCi0JICogd2l0aCBzaW1pbGFyIEZLIGNvbnN0 cmFpbnRzLgorCSAqIHRoYW4gdGhlIGNvbnN0cmFpbnQncyBvd24gT0lELiAgVGhpcyBhdm9pZHMg Y3JlYXRpbmcgZHVwbGljYXRlIHBsYW5zLAorCSAqIHNhdmluZyBsb3RzIG9mIHdvcmsgYW5kIG1l bW9yeSB3aGVuIHRoZXJlIGFyZSBtYW55IHBhcnRpdGlvbnMgd2l0aAorCSAqIHNpbWlsYXIgRksg Y29uc3RyYWludHMuCiAJICoKIAkgKiAoTm90ZSB0aGF0IHdlIG11c3Qgc3RpbGwgaGF2ZSBhIHNl cGFyYXRlIFJJX0NvbnN0cmFpbnRJbmZvIGZvciBlYWNoCiAJICogY29uc3RyYWludCwgYmVjYXVz ZSBwYXJ0aXRpb25zIGNhbiBoYXZlIGRpZmZlcmVudCBjb2x1bW4gb3JkZXJzLApAQCAtMjM0Miwx NSArMjM3NSwzNjYgQEAgSW52YWxpZGF0ZUNvbnN0cmFpbnRDYWNoZUNhbGxCYWNrKERhdHVtIGFy ZywgaW50IGNhY2hlaWQsIHVpbnQzMiBoYXNodmFsdWUpCiAJfQogfQogCisvKiBRdWVyeSBzdHJp bmcgb3IgYW4gZXF1aXZhbGVudCBuYW1lIHRvIHNob3cgaW4gdGhlIGVycm9yIENPTlRFWFQuICov Cit0eXBlZGVmIHN0cnVjdCBSSUVycm9yQ2FsbGJhY2tBcmcKK3sKKwljb25zdCBjaGFyICpxdWVy eTsKK30gUklFcnJvckNhbGxiYWNrQXJnOworCisvKgorICogX1JJX2Vycm9yX2NhbGxiYWNrCisg KgorICogQWRkIGNvbnRleHQgaW5mb3JtYXRpb24gd2hlbiBhIHF1ZXJ5IGJlaW5nIHByb2Nlc3Nl ZCB3aXRoIHJpX0NyZWF0ZVBsYW4oKQorICogb3IgcmlfUGxhbkV4ZWN1dGUoKSBmYWlscy4KKyAq Lworc3RhdGljIHZvaWQKK19SSV9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpCit7CisJUklFcnJv ckNhbGxiYWNrQXJnICpjYXJnID0gKFJJRXJyb3JDYWxsYmFja0FyZyAqKSBhcmc7CisJY29uc3Qg Y2hhciAqcXVlcnkgPSBjYXJnLT5xdWVyeTsKKwlpbnQJCQlzeW50YXhlcnJwb3NpdGlvbjsKKwor CUFzc2VydChxdWVyeSAhPSBOVUxMKTsKKworCS8qCisJICogSWYgdGhlcmUgaXMgYSBzeW50YXgg ZXJyb3IgcG9zaXRpb24sIGNvbnZlcnQgdG8gaW50ZXJuYWwgc3ludGF4IGVycm9yOworCSAqIG90 aGVyd2lzZSB0cmVhdCB0aGUgcXVlcnkgYXMgYW4gaXRlbSBvZiBjb250ZXh0IHN0YWNrCisJICov CisJc3ludGF4ZXJycG9zaXRpb24gPSBnZXRlcnJwb3NpdGlvbigpOworCWlmIChzeW50YXhlcnJw b3NpdGlvbiA+IDApCisJeworCQllcnJwb3NpdGlvbigwKTsKKwkJaW50ZXJuYWxlcnJwb3NpdGlv bihzeW50YXhlcnJwb3NpdGlvbik7CisJCWludGVybmFsZXJycXVlcnkocXVlcnkpOworCX0KKwll bHNlCisJCWVycmNvbnRleHQoIlNRTCBzdGF0ZW1lbnQgXCIlc1wiIiwgcXVlcnkpOworfQorCisv KgorICogVGhpcyBjcmVhdGVzIGEgcGxhbiBmb3IgYSBxdWVyeSB3cml0dGVuIGluIFNRTC4KKyAq CisgKiBUaGUgbWFpbiBwcm9kdWN0IGlzIGEgbGlzdCBvZiBDYWNoZWRQbGFuU291cmNlIGZvciBl YWNoIG9mIHRoZSBxdWVyaWVzCisgKiByZXN1bHRpbmcgZnJvbSB0aGUgcHJvdmlkZWQgcXVlcnkn cyByZXdyaXRlIHRoYXQgaXMgc2F2ZWQgdG8KKyAqIHBsYW4tPnBsYW5fZXhlY19hcmcuCisgKi8K K3N0YXRpYyB2b2lkCityaV9TcWxTdHJpbmdQbGFuQ3JlYXRlKFJJX1BsYW4gKnBsYW4sCisJCQkJ CSAgIGNvbnN0IGNoYXIgKnF1ZXJ5c3RyLCBpbnQgbmFyZ3MsIE9pZCAqcGFyYW10eXBlcykKK3sK KwlMaXN0CSAgICpyYXdfcGFyc2V0cmVlX2xpc3Q7CisJTGlzdAkgICAqcGxhbmNhY2hlX2xpc3Qg PSBOSUw7CisJTGlzdENlbGwgICAqbGlzdF9pdGVtOworCVJJRXJyb3JDYWxsYmFja0FyZyByaWNh bGxiYWNrYXJnOworCUVycm9yQ29udGV4dENhbGxiYWNrIHJpZXJyY29udGV4dDsKKworCUFzc2Vy dChxdWVyeXN0ciAhPSBOVUxMKTsKKworCS8qCisJICogU2V0dXAgZXJyb3IgdHJhY2ViYWNrIHN1 cHBvcnQgZm9yIGVyZXBvcnQoKQorCSAqLworCXJpY2FsbGJhY2thcmcucXVlcnkgPSBxdWVyeXN0 cjsKKwlyaWVycmNvbnRleHQuY2FsbGJhY2sgPSBfUklfZXJyb3JfY2FsbGJhY2s7CisJcmllcnJj b250ZXh0LmFyZyA9ICZyaWNhbGxiYWNrYXJnOworCXJpZXJyY29udGV4dC5wcmV2aW91cyA9IGVy cm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZyaWVycmNvbnRleHQ7 CisKKwkvKgorCSAqIFBhcnNlIHRoZSByZXF1ZXN0IHN0cmluZyBpbnRvIGEgbGlzdCBvZiByYXcg cGFyc2UgdHJlZXMuCisJICovCisJcmF3X3BhcnNldHJlZV9saXN0ID0gcmF3X3BhcnNlcihxdWVy eXN0ciwgUkFXX1BBUlNFX0RFRkFVTFQpOworCisJLyoKKwkgKiBEbyBwYXJzZSBhbmFseXNpcyBh bmQgcnVsZSByZXdyaXRlIGZvciBlYWNoIHJhdyBwYXJzZXRyZWUsIHN0b3JpbmcgdGhlCisJICog cmVzdWx0cyBpbnRvIHVuc2F2ZWQgcGxhbmNhY2hlIGVudHJpZXMuCisJICovCisJcGxhbmNhY2hl X2xpc3QgPSBOSUw7CisKKwlmb3JlYWNoKGxpc3RfaXRlbSwgcmF3X3BhcnNldHJlZV9saXN0KQor CXsKKwkJUmF3U3RtdCAgICAqcGFyc2V0cmVlID0gbGZpcnN0X25vZGUoUmF3U3RtdCwgbGlzdF9p dGVtKTsKKwkJTGlzdAkgICAqc3RtdF9saXN0OworCQlDYWNoZWRQbGFuU291cmNlICpwbGFuc291 cmNlOworCisJCS8qCisJCSAqIENyZWF0ZSB0aGUgQ2FjaGVkUGxhblNvdXJjZSBiZWZvcmUgd2Ug ZG8gcGFyc2UgYW5hbHlzaXMsIHNpbmNlIGl0CisJCSAqIG5lZWRzIHRvIHNlZSB0aGUgdW5tb2Rp ZmllZCByYXcgcGFyc2UgdHJlZS4KKwkJICovCisJCXBsYW5zb3VyY2UgPSBDcmVhdGVDYWNoZWRQ bGFuKHBhcnNldHJlZSwgcXVlcnlzdHIsCisJCQkJCQkJCQkgIENyZWF0ZUNvbW1hbmRUYWcocGFy c2V0cmVlLT5zdG10KSk7CisKKwkJc3RtdF9saXN0ID0gcGdfYW5hbHl6ZV9hbmRfcmV3cml0ZV9m aXhlZHBhcmFtcyhwYXJzZXRyZWUsIHF1ZXJ5c3RyLAorCQkJCQkJCQkJCQkJCSAgIHBhcmFtdHlw ZXMsIG5hcmdzLAorCQkJCQkJCQkJCQkJCSAgIE5VTEwpOworCisJCS8qIEZpbmlzaCBmaWxsaW5n IGluIHRoZSBDYWNoZWRQbGFuU291cmNlICovCisJCUNvbXBsZXRlQ2FjaGVkUGxhbihwbGFuc291 cmNlLAorCQkJCQkJICAgc3RtdF9saXN0LAorCQkJCQkJICAgTlVMTCwKKwkJCQkJCSAgIHBhcmFt dHlwZXMsIG5hcmdzLAorCQkJCQkJICAgTlVMTCwgTlVMTCwgMCwKKwkJCQkJCSAgIGZhbHNlKTsJ Lyogbm90IGZpeGVkIHJlc3VsdCAqLworCisJCVNhdmVDYWNoZWRQbGFuKHBsYW5zb3VyY2UpOwor CQlwbGFuY2FjaGVfbGlzdCA9IGxhcHBlbmQocGxhbmNhY2hlX2xpc3QsIHBsYW5zb3VyY2UpOwor CX0KKworCXBsYW4tPnBsYW5fZXhlY19mdW5jID0gcmlfU3FsU3RyaW5nUGxhbkV4ZWN1dGU7CisJ cGxhbi0+cGxhbl9leGVjX2FyZyA9ICh2b2lkICopIHBsYW5jYWNoZV9saXN0OworCXBsYW4tPnBs YW5faXNfdmFsaWRfZnVuYyA9IHJpX1NxbFN0cmluZ1BsYW5Jc1ZhbGlkOworCXBsYW4tPnBsYW5f ZnJlZV9mdW5jID0gcmlfU3FsU3RyaW5nUGxhbkZyZWU7CisKKwkvKgorCSAqIFBvcCB0aGUgZXJy b3IgY29udGV4dCBzdGFjaworCSAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSByaWVycmNvbnRl eHQucHJldmlvdXM7Cit9CisKKy8qCisgKiBUaGlzIGV4ZWN1dGVzIHRoZSBwbGFuIGFmdGVyIGNy ZWF0aW5nIGEgQ2FjaGVkUGxhbiBmb3IgZWFjaAorICogQ2FjaGVkUGxhblNvdXJjZSBmb3VuZCBz dG9yZWQgaW4gcGxhbi0+cGxhbl9leGVjX2FyZyB1c2luZyBnaXZlbgorICogcGFyYW1ldGVyIHZh bHVlcy4KKyAqCisgKiBSZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiB0dXBsZXMgcmV0dXJu ZWQgYnkgdGhlICJsYXN0IiBDYWNoZWRQbGFuLgorICovCitzdGF0aWMgaW50CityaV9TcWxTdHJp bmdQbGFuRXhlY3V0ZShSSV9QbGFuICpwbGFuLCBSZWxhdGlvbiBma19yZWwsIFJlbGF0aW9uIHBr X3JlbCwKKwkJCQkJCURhdHVtICpwYXJhbV92YWxzLCBjaGFyICpwYXJhbV9pc251bGxzLAorCQkJ CQkJU25hcHNob3QgY3Jvc3NjaGVja19zbmFwc2hvdCwKKwkJCQkJCWludCBsaW1pdCwgQ21kVHlw ZSAqbGFzdF9zdG10X2NtZHR5cGUpCit7CisJTGlzdCAgICpwbGFuY2FjaGVfbGlzdCA9IChMaXN0 ICopIHBsYW4tPnBsYW5fZXhlY19hcmc7CisJTGlzdENlbGwgICAqbGM7CisJQ2FjaGVkUGxhbiAq Y3BsYW47CisJUmVzb3VyY2VPd25lciBwbGFuX293bmVyOworCWludAkJCXR1cGxlc19wcm9jZXNz ZWQgPSAwOwkvKiBhcHBlYXNlIGNvbXBpbGVyICovCisJUGFyYW1MaXN0SW5mbyBwYXJhbUxJOwor CVJJRXJyb3JDYWxsYmFja0FyZyByaWNhbGxiYWNrYXJnOworCUVycm9yQ29udGV4dENhbGxiYWNr IHJpZXJyY29udGV4dDsKKworCUFzc2VydChsaXN0X2xlbmd0aChwbGFuY2FjaGVfbGlzdCkgPiAw KTsKKworCS8qCisJICogU2V0dXAgZXJyb3IgdHJhY2ViYWNrIHN1cHBvcnQgZm9yIGVyZXBvcnQo KQorCSAqLworCXJpY2FsbGJhY2thcmcucXVlcnkgPSBOVUxMOwkJLyogd2lsbCBiZSBmaWxsZWQg YmVsb3cgKi8KKwlyaWVycmNvbnRleHQuY2FsbGJhY2sgPSBfUklfZXJyb3JfY2FsbGJhY2s7CisJ cmllcnJjb250ZXh0LmFyZyA9ICZyaWNhbGxiYWNrYXJnOworCXJpZXJyY29udGV4dC5wcmV2aW91 cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZyaWVycmNv bnRleHQ7CisKKwkvKgorCSAqIENvbnZlcnQgdGhlIHBhcmFtZXRlcnMgaW50byBhIGZvcm1hdCB0 aGF0IHRoZSBwbGFubmVyIGFuZCB0aGUgZXhlY3V0b3IKKwkgKiBleHBlY3QgdGhlbSB0byBiZSBp bi4KKwkgKi8KKwlpZiAocGxhbi0+bmFyZ3MgPiAwKQorCXsKKwkJcGFyYW1MSSA9IG1ha2VQYXJh bUxpc3QocGxhbi0+bmFyZ3MpOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgcGxhbi0+bmFyZ3M7 IGkrKykKKwkJeworCQkJUGFyYW1FeHRlcm5EYXRhICpwcm0gPSAmcGFyYW1MSS0+cGFyYW1zW2ld OworCisJCQlwcm0tPnZhbHVlID0gcGFyYW1fdmFsc1tpXTsKKwkJCXBybS0+aXNudWxsID0gKHBh cmFtX2lzbnVsbHMgJiYgcGFyYW1faXNudWxsc1tpXSA9PSAnbicpOworCQkJcHJtLT5wZmxhZ3Mg PSBQQVJBTV9GTEFHX0NPTlNUOworCQkJcHJtLT5wdHlwZSA9IHBsYW4tPnBhcmFtdHlwZXNbaV07 CisJCX0KKwl9CisJZWxzZQorCQlwYXJhbUxJID0gTlVMTDsKKworCXBsYW5fb3duZXIgPSBDdXJy ZW50UmVzb3VyY2VPd25lcjsgLyogWFhYIC0gd2h5PyAqLworCWZvcmVhY2gobGMsIHBsYW5jYWNo ZV9saXN0KQorCXsKKwkJQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSA9IChDYWNoZWRQbGFu U291cmNlICopIGxmaXJzdChsYyk7CisJCUxpc3QJICAgKnN0bXRfbGlzdDsKKwkJTGlzdENlbGwg ICAqbGMyOworCisJCXJpY2FsbGJhY2thcmcucXVlcnkgPSBwbGFuc291cmNlLT5xdWVyeV9zdHJp bmc7CisKKwkJLyoKKwkJICogUmVwbGFuIGlmIG5lZWRlZCwgYW5kIGluY3JlbWVudCBwbGFuIHJl ZmNvdW50LiAgSWYgaXQncyBhIHNhdmVkCisJCSAqIHBsYW4sIHRoZSByZWZjb3VudCBtdXN0IGJl IGJhY2tlZCBieSB0aGUgcGxhbl9vd25lci4KKwkJICovCisJCWNwbGFuID0gR2V0Q2FjaGVkUGxh bihwbGFuc291cmNlLCBwYXJhbUxJLCBwbGFuX293bmVyLCBOVUxMKTsKKworCQlzdG10X2xpc3Qg PSBjcGxhbi0+c3RtdF9saXN0OworCisJCWZvcmVhY2gobGMyLCBzdG10X2xpc3QpCisJCXsKKwkJ CVBsYW5uZWRTdG10ICpzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIGxjMik7CisJCQlE ZXN0UmVjZWl2ZXIgKmRlc3Q7CisJCQlRdWVyeURlc2MgICpxZGVzYzsKKwkJCWludAkJCWVmbGFn czsKKworCQkJKmxhc3Rfc3RtdF9jbWR0eXBlID0gc3RtdC0+Y29tbWFuZFR5cGU7CisKKwkJCS8q CisJCQkgKiBBZHZhbmNlIHRoZSBjb21tYW5kIGNvdW50ZXIgYmVmb3JlIGVhY2ggY29tbWFuZCBh bmQgdXBkYXRlIHRoZQorCQkJICogc25hcHNob3QuCisJCQkgKi8KKwkJCUNvbW1hbmRDb3VudGVy SW5jcmVtZW50KCk7CisJCQlVcGRhdGVBY3RpdmVTbmFwc2hvdENvbW1hbmRJZCgpOworCisJCQlk ZXN0ID0gQ3JlYXRlRGVzdFJlY2VpdmVyKERlc3ROb25lKTsKKwkJCXFkZXNjID0gQ3JlYXRlUXVl cnlEZXNjKHN0bXQsIHBsYW5zb3VyY2UtPnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJCUdldEFjdGl2 ZVNuYXBzaG90KCksIGNyb3NzY2hlY2tfc25hcHNob3QsCisJCQkJCQkJCQlkZXN0LCBwYXJhbUxJ LCBOVUxMLCAwKTsKKworCQkJLyogU2VsZWN0IGV4ZWN1dGlvbiBvcHRpb25zICovCisJCQllZmxh Z3MgPSBFWEVDX0ZMQUdfU0tJUF9UUklHR0VSUzsKKwkJCUV4ZWN1dG9yU3RhcnQocWRlc2MsIGVm bGFncyk7CisJCQlFeGVjdXRvclJ1bihxZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGxpbWl0 KTsKKworCQkJLyogV2UgcmV0dXJuIHRoZSBsYXN0IGV4ZWN1dGVkIHN0YXRlbWVudCdzIHZhbHVl LiAqLworCQkJdHVwbGVzX3Byb2Nlc3NlZCA9IHFkZXNjLT5lc3RhdGUtPmVzX3Byb2Nlc3NlZDsK KworCQkJRXhlY3V0b3JGaW5pc2gocWRlc2MpOworCQkJRXhlY3V0b3JFbmQocWRlc2MpOworCQkJ RnJlZVF1ZXJ5RGVzYyhxZGVzYyk7CisJCX0KKworCQkvKiBEb25lIHdpdGggdGhpcyBwbGFuLCBz byByZWxlYXNlIHJlZmNvdW50ICovCisJCVJlbGVhc2VDYWNoZWRQbGFuKGNwbGFuLCBDdXJyZW50 UmVzb3VyY2VPd25lcik7CisJCWNwbGFuID0gTlVMTDsKKwl9CisKKwlBc3NlcnQoY3BsYW4gPT0g TlVMTCk7CisKKwkvKgorCSAqIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjaworCSAqLworCWVy cm9yX2NvbnRleHRfc3RhY2sgPSByaWVycmNvbnRleHQucHJldmlvdXM7CisKKwlyZXR1cm4gdHVw bGVzX3Byb2Nlc3NlZDsKK30KKworLyoKKyAqIEhhdmUgYW55IG9mIHRoZSBDYWNoZWRQbGFuU291 cmNlcyBiZWVuIGludmFsaWRhdGVkIHNpbmNlIGJlaW5nIGNyZWF0ZWQ/CisgKi8KK3N0YXRpYyBi b29sCityaV9TcWxTdHJpbmdQbGFuSXNWYWxpZChSSV9QbGFuICpwbGFuKQoreworCUxpc3QgICAq cGxhbmNhY2hlX2xpc3QgPSAoTGlzdCAqKSBwbGFuLT5wbGFuX2V4ZWNfYXJnOworCUxpc3RDZWxs ICpsYzsKKworCWZvcmVhY2gobGMsIHBsYW5jYWNoZV9saXN0KQorCXsKKwkJQ2FjaGVkUGxhblNv dXJjZSAqcGxhbnNvdXJjZSA9IChDYWNoZWRQbGFuU291cmNlICopIGxmaXJzdChsYyk7CisKKwkJ aWYgKCFDYWNoZWRQbGFuSXNWYWxpZChwbGFuc291cmNlKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9 CisJcmV0dXJuIHRydWU7Cit9CisKKy8qIFJlbGVhc2UgQ2FjaGVkUGxhblNvdXJjZXMgYW5kIGFz c29jaWF0ZWQgQ2FjaGVkUGxhbnMgaWYgYW55LiovCitzdGF0aWMgdm9pZAorcmlfU3FsU3RyaW5n UGxhbkZyZWUoUklfUGxhbiAqcGxhbikKK3sKKwlMaXN0ICAgKnBsYW5jYWNoZV9saXN0ID0gKExp c3QgKikgcGxhbi0+cGxhbl9leGVjX2FyZzsKKwlMaXN0Q2VsbCAqbGM7CisKKwlmb3JlYWNoKGxj LCBwbGFuY2FjaGVfbGlzdCkKKwl7CisJCUNhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UgPSAo Q2FjaGVkUGxhblNvdXJjZSAqKSBsZmlyc3QobGMpOworCisJCURyb3BDYWNoZWRQbGFuKHBsYW5z b3VyY2UpOworCX0KK30KKworLyoKKyAqIENyZWF0ZSBhbiBSSV9QbGFuIGZvciBhIGdpdmVuIFJJ IGNoZWNrIHF1ZXJ5IGFuZCBpbml0aWFsaXplIHRoZQorICogcGxhbiBjYWxsYmFja3MgYW5kIGV4 ZWN1dGlvbiBhcmd1bWVudCB1c2luZyB0aGUgY2FsbGVyIHNwZWNpZmllZAorICogZnVuY3Rpb24u CisgKi8KK3N0YXRpYyBSSV9QbGFuICoKK3JpX1BsYW5DcmVhdGUoUklfUGxhbkNyZWF0ZUZ1bmNf dHlwZSBwbGFuX2NyZWF0ZV9mdW5jLAorCQkJICBjb25zdCBjaGFyICpxdWVyeXN0ciwgaW50IG5h cmdzLCBPaWQgKnBhcmFtdHlwZXMpCit7CisJUklfUGxhbgkgICAqcGxhbjsKKwlNZW1vcnlDb250 ZXh0IHBsYW5jeHQsCisJCQkJb2xkY3h0OworCisJLyoKKwkgKiBDcmVhdGUgYSBtZW1vcnkgY29u dGV4dCBmb3IgdGhlIHBsYW4gdW5kZXJuZWF0aCBDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkgKiB3 aGljaCBpcyByZXBhcmVudGVkIGxhdGVyIHRvIGJlIHVuZGVybmVhdGggQ2FjaGVNZW1vcnlDb250 ZXh0OworCSAqLworCXBsYW5jeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9y eUNvbnRleHQsCisJCQkJCQkJCQkiUkkgUGxhbiIsCisJCQkJCQkJCQlBTExPQ1NFVF9TTUFMTF9T SVpFUyk7CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBsYW5jeHQpOworCXBsYW4g PSAoUklfUGxhbiAqKSBwYWxsb2MwKHNpemVvZigqcGxhbikpOworCXBsYW4tPnBsYW5jeHQgPSBw bGFuY3h0OworCXBsYW4tPm5hcmdzID0gbmFyZ3M7CisJaWYgKHBsYW4tPm5hcmdzID4gMCkKKwl7 CisJCXBsYW4tPnBhcmFtdHlwZXMgPSAoT2lkICopIHBhbGxvYyhwbGFuLT5uYXJncyAqIHNpemVv ZihPaWQpKTsKKwkJbWVtY3B5KHBsYW4tPnBhcmFtdHlwZXMsIHBhcmFtdHlwZXMsIHBsYW4tPm5h cmdzICogc2l6ZW9mKE9pZCkpOworCX0KKworCXBsYW5fY3JlYXRlX2Z1bmMocGxhbiwgcXVlcnlz dHIsIG5hcmdzLCBwYXJhbXR5cGVzKTsKKworCU1lbW9yeUNvbnRleHRTZXRQYXJlbnQocGxhbi0+ cGxhbmN4dCwgQ2FjaGVNZW1vcnlDb250ZXh0KTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y3h0KTsKKworCXJldHVybiBwbGFuOworfQorCisvKgorICogRXhlY3V0ZSB0aGUgcGxhbiBieSBj YWxsaW5nIHBsYW5fZXhlY19mdW5jKCkuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHR1 cGxlcyBvYnRhaW5lZCBieSBleGVjdXRpbmcgdGhlIHBsYW47IHRoZSBjYWxsZXIKKyAqIHR5cGlj YWxseSB3YW50cyB0byBjaGVja3MgaWYgYXQgbGVhc3QgMSByb3cgd2FzIHJldHVybmVkLgorICoK KyAqICpsYXN0X3N0bXRfY21kdHlwZSBpcyBzZXQgdG8gdGhlIENtZFR5cGUgb2YgdGhlIGxhc3Qg b3BlcmF0aW9uIHBlcmZvcm1lZAorICogYnkgZXhlY3V0aW5nIHRoZSBwbGFuLCB3aGljaCBtYXkg Y29uc2lzdCBvZiBtb3JlIHRoYW4gMSBleGVjdXRhYmxlCisgKiBzdGF0ZW1lbnRzIGlmLCBmb3Ig ZXhhbXBsZSwgYW55IHJ1bGVzIGJlbG9uZ2luZyB0byB0aGUgdGFibGVzIG1lbnRpb25lZCBpbgor ICogdGhlIG9yaWdpbmFsIHF1ZXJ5IGFkZGVkIGFkZGl0aW9uYWwgb3BlcmF0aW9ucy4KKyAqLwor c3RhdGljIGludAorcmlfUGxhbkV4ZWN1dGUoUklfUGxhbiAqcGxhbiwgUmVsYXRpb24gZmtfcmVs LCBSZWxhdGlvbiBwa19yZWwsCisJCQkgICBEYXR1bSAqcGFyYW1fdmFscywgY2hhciAqcGFyYW1f aXNudWxscywKKwkJCSAgIFNuYXBzaG90IGNyb3NzY2hlY2tfc25hcHNob3QsCisJCQkgICBpbnQg bGltaXQsIENtZFR5cGUgKmxhc3Rfc3RtdF9jbWR0eXBlKQoreworCUFzc2VydChBY3RpdmVTbmFw c2hvdFNldCgpKTsKKwlyZXR1cm4gcGxhbi0+cGxhbl9leGVjX2Z1bmMocGxhbiwgZmtfcmVsLCBw a19yZWwsCisJCQkJCQkJCXBhcmFtX3ZhbHMsIHBhcmFtX2lzbnVsbHMsCisJCQkJCQkJCWNyb3Nz Y2hlY2tfc25hcHNob3QsCisJCQkJCQkJCWxpbWl0LCBsYXN0X3N0bXRfY21kdHlwZSk7Cit9CisK Ky8qCisgKiBJcyB0aGUgcGxhbiBzdGlsbCB2YWxpZCB0byBjb250aW51ZSBjYWNoaW5nPworICov CitzdGF0aWMgYm9vbAorcmlfUGxhbklzVmFsaWQoUklfUGxhbiAqcGxhbikKK3sKKwlyZXR1cm4g cGxhbi0+cGxhbl9pc192YWxpZF9mdW5jKHBsYW4pOworfQorCisvKiBSZWxlYXNlIHBsYW4gcmVz b3VyY2VzLiAqLworc3RhdGljIHZvaWQKK3JpX0ZyZWVQbGFuKFJJX1BsYW4gKnBsYW4pCit7CisJ LyogRmlyc3QgY2FsbCB0aGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgcmVsZWFzZSBmdW5jdGlv bi4gKi8KKwlwbGFuLT5wbGFuX2ZyZWVfZnVuYyhwbGFuKTsKKworCS8qIE5vdyBnZXQgcmlkIG9m IHRoZSBSSV9wbGFuIGFuZCBzdWJzaWRpYXJ5IGRhdGEgaW4gaXRzIHBsYW5jeHQgKi8KKwlNZW1v cnlDb250ZXh0RGVsZXRlKHBsYW4tPnBsYW5jeHQpOworfQogCiAvKgogICogUHJlcGFyZSBleGVj dXRpb24gcGxhbiBmb3IgYSBxdWVyeSB0byBlbmZvcmNlIGFuIFJJIHJlc3RyaWN0aW9uCiAgKi8K LXN0YXRpYyBTUElQbGFuUHRyCi1yaV9QbGFuQ2hlY2soY29uc3QgY2hhciAqcXVlcnlzdHIsIGlu dCBuYXJncywgT2lkICphcmd0eXBlcywKK3N0YXRpYyBSSV9QbGFuICoKK3JpX1BsYW5DaGVjayhS SV9QbGFuQ3JlYXRlRnVuY190eXBlIHBsYW5fY3JlYXRlX2Z1bmMsCisJCQkgY29uc3QgY2hhciAq cXVlcnlzdHIsIGludCBuYXJncywgT2lkICphcmd0eXBlcywKIAkJCSBSSV9RdWVyeUtleSAqcWtl eSwgUmVsYXRpb24gZmtfcmVsLCBSZWxhdGlvbiBwa19yZWwpCiB7Ci0JU1BJUGxhblB0cglxcGxh bjsKKwlSSV9QbGFuCSAgICpxcGxhbjsKIAlSZWxhdGlvbglxdWVyeV9yZWw7CiAJT2lkCQkJc2F2 ZV91c2VyaWQ7CiAJaW50CQkJc2F2ZV9zZWNfY29udGV4dDsKQEAgLTIzNjksMTggKzI3NTMsMTIg QEAgcmlfUGxhbkNoZWNrKGNvbnN0IGNoYXIgKnF1ZXJ5c3RyLCBpbnQgbmFyZ3MsIE9pZCAqYXJn dHlwZXMsCiAJU2V0VXNlcklkQW5kU2VjQ29udGV4dChSZWxhdGlvbkdldEZvcm0ocXVlcnlfcmVs KS0+cmVsb3duZXIsCiAJCQkJCQkgICBzYXZlX3NlY19jb250ZXh0IHwgU0VDVVJJVFlfTE9DQUxf VVNFUklEX0NIQU5HRSB8CiAJCQkJCQkgICBTRUNVUklUWV9OT0ZPUkNFX1JMUyk7Ci0KIAkvKiBD cmVhdGUgdGhlIHBsYW4gKi8KLQlxcGxhbiA9IFNQSV9wcmVwYXJlKHF1ZXJ5c3RyLCBuYXJncywg YXJndHlwZXMpOwotCi0JaWYgKHFwbGFuID09IE5VTEwpCi0JCWVsb2coRVJST1IsICJTUElfcHJl cGFyZSByZXR1cm5lZCAlcyBmb3IgJXMiLCBTUElfcmVzdWx0X2NvZGVfc3RyaW5nKFNQSV9yZXN1 bHQpLCBxdWVyeXN0cik7CisJcXBsYW4gPSByaV9QbGFuQ3JlYXRlKHBsYW5fY3JlYXRlX2Z1bmMs IHF1ZXJ5c3RyLCBuYXJncywgYXJndHlwZXMpOwogCiAJLyogUmVzdG9yZSBVSUQgYW5kIHNlY3Vy aXR5IGNvbnRleHQgKi8KIAlTZXRVc2VySWRBbmRTZWNDb250ZXh0KHNhdmVfdXNlcmlkLCBzYXZl X3NlY19jb250ZXh0KTsKIAotCS8qIFNhdmUgdGhlIHBsYW4gKi8KLQlTUElfa2VlcHBsYW4ocXBs YW4pOwogCXJpX0hhc2hQcmVwYXJlZFBsYW4ocWtleSwgcXBsYW4pOwogCiAJcmV0dXJuIHFwbGFu OwpAQCAtMjM5MSwyMyArMjc2OSwyMyBAQCByaV9QbGFuQ2hlY2soY29uc3QgY2hhciAqcXVlcnlz dHIsIGludCBuYXJncywgT2lkICphcmd0eXBlcywKICAqLwogc3RhdGljIGJvb2wKIHJpX1BlcmZv cm1DaGVjayhjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAotCQkJCVJJX1F1ZXJ5S2V5 ICpxa2V5LCBTUElQbGFuUHRyIHFwbGFuLAorCQkJCVJJX1F1ZXJ5S2V5ICpxa2V5LCBSSV9QbGFu ICpxcGxhbiwKIAkJCQlSZWxhdGlvbiBma19yZWwsIFJlbGF0aW9uIHBrX3JlbCwKIAkJCQlUdXBs ZVRhYmxlU2xvdCAqb2xkc2xvdCwgVHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3QsCiAJCQkJYm9vbCBp c19yZXN0cmljdCwKLQkJCQlib29sIGRldGVjdE5ld1Jvd3MsIGludCBleHBlY3RfT0spCisJCQkJ Ym9vbCBkZXRlY3ROZXdSb3dzLCBpbnQgZXhwZWN0ZWRfY21kdHlwZSkKIHsKIAlSZWxhdGlvbglx dWVyeV9yZWwsCiAJCQkJc291cmNlX3JlbDsKIAlib29sCQlzb3VyY2VfaXNfcGs7Ci0JU25hcHNo b3QJdGVzdF9zbmFwc2hvdDsKIAlTbmFwc2hvdAljcm9zc2NoZWNrX3NuYXBzaG90OwogCWludAkJ CWxpbWl0OwotCWludAkJCXNwaV9yZXN1bHQ7CisJaW50CQkJdHVwbGVzX3Byb2Nlc3NlZDsKIAlP aWQJCQlzYXZlX3VzZXJpZDsKIAlpbnQJCQlzYXZlX3NlY19jb250ZXh0OwogCURhdHVtCQl2YWxz W1JJX01BWF9OVU1LRVlTICogMl07CiAJY2hhcgkJbnVsbHNbUklfTUFYX05VTUtFWVMgKiAyXTsK KwlDbWRUeXBlCQlsYXN0X3N0bXRfY21kdHlwZTsKIAogCS8qCiAJICogVXNlIHRoZSBxdWVyeSB0 eXBlIGNvZGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHF1ZXJ5IGlzIHJ1biBhZ2FpbnN0CkBA IC0yNDU4LDMwICsyODM2LDM0IEBAIHJpX1BlcmZvcm1DaGVjayhjb25zdCBSSV9Db25zdHJhaW50 SW5mbyAqcmlpbmZvLAogCSAqIHRoZSBjYWxsZXIgcGFzc2VzIGRldGVjdE5ld1Jvd3MgPT0gZmFs c2UgdGhlbiBpdCdzIG9rYXkgdG8gZG8gdGhlIHF1ZXJ5CiAJICogd2l0aCB0aGUgdHJhbnNhY3Rp b24gc25hcHNob3Q7IG90aGVyd2lzZSB3ZSB1c2UgYSBjdXJyZW50IHNuYXBzaG90LCBhbmQKIAkg KiB0ZWxsIHRoZSBleGVjdXRvciB0byBlcnJvciBvdXQgaWYgaXQgZmluZHMgYW55IHJvd3MgdW5k ZXIgdGhlIGN1cnJlbnQKLQkgKiBzbmFwc2hvdCB0aGF0IHdvdWxkbid0IGJlIHZpc2libGUgcGVy IHRoZSB0cmFuc2FjdGlvbiBzbmFwc2hvdC4gIE5vdGUKLQkgKiB0aGF0IFNQSV9leGVjdXRlX3Nu YXBzaG90IHdpbGwgcmVnaXN0ZXIgdGhlIHNuYXBzaG90cywgc28gd2UgZG9uJ3QgbmVlZAotCSAq IHRvIGJvdGhlciBoZXJlLgorCSAqIHNuYXBzaG90IHRoYXQgd291bGRuJ3QgYmUgdmlzaWJsZSBw ZXIgdGhlIHRyYW5zYWN0aW9uIHNuYXBzaG90LgorCSAqCisJICogQWxzbyBwdXNoIHRoZSBjaG9z ZW4gc25hcHNob3Qgc28gdGhhdCBhbnlwbGFjZSB0aGF0IHdhbnRzIHRvIHVzZSBpdAorCSAqIGNh biBnZXQgaXQgYnkgY2FsbGluZyBHZXRBY3RpdmVTbmFwc2hvdCgpLgogCSAqLwogCWlmIChJc29s YXRpb25Vc2VzWGFjdFNuYXBzaG90KCkgJiYgZGV0ZWN0TmV3Um93cykKIAl7Ci0JCUNvbW1hbmRD b3VudGVySW5jcmVtZW50KCk7CS8qIGJlIHN1cmUgYWxsIG15IG93biB3b3JrIGlzIHZpc2libGUg Ki8KLQkJdGVzdF9zbmFwc2hvdCA9IEdldExhdGVzdFNuYXBzaG90KCk7CiAJCWNyb3NzY2hlY2tf c25hcHNob3QgPSBHZXRUcmFuc2FjdGlvblNuYXBzaG90KCk7CisJCS8qIE1ha2Ugc3VyZSB3ZSBo YXZlIGEgcHJpdmF0ZSBjb3B5IG9mIHRoZSBzbmFwc2hvdCB0byBtb2RpZnkuICovCisJCVB1c2hD b3BpZWRTbmFwc2hvdChHZXRMYXRlc3RTbmFwc2hvdCgpKTsKIAl9CiAJZWxzZQogCXsKLQkJLyog dGhlIGRlZmF1bHQgU1BJIGJlaGF2aW9yIGlzIG9rYXkgKi8KLQkJdGVzdF9zbmFwc2hvdCA9IElu dmFsaWRTbmFwc2hvdDsKIAkJY3Jvc3NjaGVja19zbmFwc2hvdCA9IEludmFsaWRTbmFwc2hvdDsK KwkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CiAJfQogCisJ LyogQWxzbyBhZHZhbmNlIHRoZSBjb21tYW5kIGNvdW50ZXIgYW5kIHVwZGF0ZSB0aGUgc25hcHNo b3QuICovCisJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKwlVcGRhdGVBY3RpdmVTbmFwc2hv dENvbW1hbmRJZCgpOworCiAJLyoKIAkgKiBJZiB0aGlzIGlzIGEgc2VsZWN0IHF1ZXJ5IChlLmcu LCBmb3IgYSAnbm8gYWN0aW9uJyBvciAncmVzdHJpY3QnCiAJICogdHJpZ2dlciksIHdlIG9ubHkg bmVlZCB0byBzZWUgaWYgdGhlcmUgaXMgYSBzaW5nbGUgcm93IGluIHRoZSB0YWJsZSwKIAkgKiBt YXRjaGluZyB0aGUga2V5LiAgT3RoZXJ3aXNlLCBsaW1pdCA9IDAgLSBiZWNhdXNlIHdlIHdhbnQg dGhlIHF1ZXJ5IHRvCiAJICogYWZmZWN0IEFMTCB0aGUgbWF0Y2hpbmcgcm93cy4KIAkgKi8KLQls aW1pdCA9IChleHBlY3RfT0sgPT0gU1BJX09LX1NFTEVDVCkgPyAxIDogMDsKKwlsaW1pdCA9IChl eHBlY3RlZF9jbWR0eXBlID09IENNRF9TRUxFQ1QpID8gMSA6IDA7CiAKIAkvKiBTd2l0Y2ggdG8g cHJvcGVyIFVJRCB0byBwZXJmb3JtIGNoZWNrIGFzICovCiAJR2V0VXNlcklkQW5kU2VjQ29udGV4 dCgmc2F2ZV91c2VyaWQsICZzYXZlX3NlY19jb250ZXh0KTsKQEAgLTI0OTAsMTkgKzI4NzIsMTYg QEAgcmlfUGVyZm9ybUNoZWNrKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAJCQkJ CQkgICBTRUNVUklUWV9OT0ZPUkNFX1JMUyk7CiAKIAkvKiBGaW5hbGx5IHdlIGNhbiBydW4gdGhl IHF1ZXJ5LiAqLwotCXNwaV9yZXN1bHQgPSBTUElfZXhlY3V0ZV9zbmFwc2hvdChxcGxhbiwKLQkJ CQkJCQkJCSAgdmFscywgbnVsbHMsCi0JCQkJCQkJCQkgIHRlc3Rfc25hcHNob3QsIGNyb3NzY2hl Y2tfc25hcHNob3QsCi0JCQkJCQkJCQkgIGZhbHNlLCBmYWxzZSwgbGltaXQpOworCXR1cGxlc19w cm9jZXNzZWQgPSByaV9QbGFuRXhlY3V0ZShxcGxhbiwgZmtfcmVsLCBwa19yZWwsIHZhbHMsIG51 bGxzLAorCQkJCQkJCQkJICBjcm9zc2NoZWNrX3NuYXBzaG90LAorCQkJCQkJCQkJICBsaW1pdCwg Jmxhc3Rfc3RtdF9jbWR0eXBlKTsKIAogCS8qIFJlc3RvcmUgVUlEIGFuZCBzZWN1cml0eSBjb250 ZXh0ICovCiAJU2V0VXNlcklkQW5kU2VjQ29udGV4dChzYXZlX3VzZXJpZCwgc2F2ZV9zZWNfY29u dGV4dCk7CiAKLQkvKiBDaGVjayByZXN1bHQgKi8KLQlpZiAoc3BpX3Jlc3VsdCA8IDApCi0JCWVs b2coRVJST1IsICJTUElfZXhlY3V0ZV9zbmFwc2hvdCByZXR1cm5lZCAlcyIsIFNQSV9yZXN1bHRf Y29kZV9zdHJpbmcoc3BpX3Jlc3VsdCkpOworCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAKLQlpZiAo ZXhwZWN0X09LID49IDAgJiYgc3BpX3Jlc3VsdCAhPSBleHBlY3RfT0spCisJaWYgKGxhc3Rfc3Rt dF9jbWR0eXBlICE9IGV4cGVjdGVkX2NtZHR5cGUpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlRFUk5BTF9FUlJPUiksCiAJCQkJIGVycm1zZygicmVmZXJlbnRpYWwg aW50ZWdyaXR5IHF1ZXJ5IG9uIFwiJXNcIiBmcm9tIGNvbnN0cmFpbnQgXCIlc1wiIG9uIFwiJXNc IiBnYXZlIHVuZXhwZWN0ZWQgcmVzdWx0IiwKQEAgLTI1MTMsMTUgKzI4OTIsMTUgQEAgcmlfUGVy Zm9ybUNoZWNrKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAKIAkvKiBYWFggd291 bGRuJ3QgaXQgYmUgY2xlYXJlciB0byBkbyB0aGlzIHBhcnQgYXQgdGhlIGNhbGxlcj8gKi8KIAlp ZiAocWtleS0+Y29uc3RyX3F1ZXJ5bm8gIT0gUklfUExBTl9DSEVDS19MT09LVVBQS19GUk9NX1BL ICYmCi0JCWV4cGVjdF9PSyA9PSBTUElfT0tfU0VMRUNUICYmCi0JCShTUElfcHJvY2Vzc2VkID09 IDApID09IChxa2V5LT5jb25zdHJfcXVlcnlubyA9PSBSSV9QTEFOX0NIRUNLX0xPT0tVUFBLKSkK KwkJZXhwZWN0ZWRfY21kdHlwZSA9PSBDTURfU0VMRUNUICYmCisJCSh0dXBsZXNfcHJvY2Vzc2Vk ID09IDApID09IChxa2V5LT5jb25zdHJfcXVlcnlubyA9PSBSSV9QTEFOX0NIRUNLX0xPT0tVUFBL KSkKIAkJcmlfUmVwb3J0VmlvbGF0aW9uKHJpaW5mbywKIAkJCQkJCSAgIHBrX3JlbCwgZmtfcmVs LAogCQkJCQkJICAgbmV3c2xvdCA/IG5ld3Nsb3QgOiBvbGRzbG90LAogCQkJCQkJICAgTlVMTCwK IAkJCQkJCSAgIHFrZXktPmNvbnN0cl9xdWVyeW5vLCBpc19yZXN0cmljdCwgZmFsc2UpOwogCi0J cmV0dXJuIFNQSV9wcm9jZXNzZWQgIT0gMDsKKwlyZXR1cm4gdHVwbGVzX3Byb2Nlc3NlZCAhPSAw OwogfQogCiAvKgpAQCAtMjc5OCwxNCArMzE3NywxNCBAQCByaV9Jbml0SGFzaFRhYmxlcyh2b2lk KQogLyoKICAqIHJpX0ZldGNoUHJlcGFyZWRQbGFuIC0KICAqCi0gKiBMb29rdXAgZm9yIGEgcXVl cnkga2V5IGluIG91ciBwcml2YXRlIGhhc2ggdGFibGUgb2YgcHJlcGFyZWQKLSAqIGFuZCBzYXZl ZCBTUEkgZXhlY3V0aW9uIHBsYW5zLiBSZXR1cm4gdGhlIHBsYW4gaWYgZm91bmQgb3IgTlVMTC4K KyAqIExvb2t1cCBmb3IgYSBxdWVyeSBrZXkgaW4gb3VyIHByaXZhdGUgaGFzaCB0YWJsZSBvZiBz YXZlZCBSSSBwbGFucy4KKyAqIFJldHVybiB0aGUgcGxhbiBpZiBmb3VuZCBvciBOVUxMLgogICov Ci1zdGF0aWMgU1BJUGxhblB0cgorc3RhdGljIFJJX1BsYW4gKgogcmlfRmV0Y2hQcmVwYXJlZFBs YW4oUklfUXVlcnlLZXkgKmtleSkKIHsKIAlSSV9RdWVyeUhhc2hFbnRyeSAqZW50cnk7Ci0JU1BJ UGxhblB0cglwbGFuOworCVJJX1BsYW4gKnBsYW47CiAKIAkvKgogCSAqIE9uIHRoZSBmaXJzdCBj YWxsIGluaXRpYWxpemUgdGhlIGhhc2h0YWJsZQpAQCAtMjgzMyw3ICszMjEyLDcgQEAgcmlfRmV0 Y2hQcmVwYXJlZFBsYW4oUklfUXVlcnlLZXkgKmtleSkKIAkgKiBsb2NrZWQgYm90aCBGSyBhbmQg UEsgcmVscy4KIAkgKi8KIAlwbGFuID0gZW50cnktPnBsYW47Ci0JaWYgKHBsYW4gJiYgU1BJX3Bs YW5faXNfdmFsaWQocGxhbikpCisJaWYgKHBsYW4gJiYgcmlfUGxhbklzVmFsaWQocGxhbikpCiAJ CXJldHVybiBwbGFuOwogCiAJLyoKQEAgLTI4NDIsNyArMzIyMSw3IEBAIHJpX0ZldGNoUHJlcGFy ZWRQbGFuKFJJX1F1ZXJ5S2V5ICprZXkpCiAJICovCiAJZW50cnktPnBsYW4gPSBOVUxMOwogCWlm IChwbGFuKQotCQlTUElfZnJlZXBsYW4ocGxhbik7CisJCXJpX0ZyZWVQbGFuKHBsYW4pOwogCiAJ cmV0dXJuIE5VTEw7CiB9CkBAIC0yODU0LDcgKzMyMzMsNyBAQCByaV9GZXRjaFByZXBhcmVkUGxh bihSSV9RdWVyeUtleSAqa2V5KQogICogQWRkIGFub3RoZXIgcGxhbiB0byBvdXIgcHJpdmF0ZSBT UEkgcXVlcnkgcGxhbiBoYXNodGFibGUuCiAgKi8KIHN0YXRpYyB2b2lkCi1yaV9IYXNoUHJlcGFy ZWRQbGFuKFJJX1F1ZXJ5S2V5ICprZXksIFNQSVBsYW5QdHIgcGxhbikKK3JpX0hhc2hQcmVwYXJl ZFBsYW4oUklfUXVlcnlLZXkgKmtleSwgUklfUGxhbiAqcGxhbikKIHsKIAlSSV9RdWVyeUhhc2hF bnRyeSAqZW50cnk7CiAJYm9vbAkJZm91bmQ7Ci0tIAoyLjQzLjAKCg== --000000000000ad76fd0629ac03b6--