Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wGzcu-006lVJ-23 for pgsql-hackers@arkaria.postgresql.org; Sun, 26 Apr 2026 13:34:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wGzcr-00AJ7M-1V for pgsql-hackers@arkaria.postgresql.org; Sun, 26 Apr 2026 13:34:21 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wGzcq-00AJ7E-2G for pgsql-hackers@lists.postgresql.org; Sun, 26 Apr 2026 13:34:21 +0000 Received: from mail-lf1-x132.google.com ([2a00:1450:4864:20::132]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wGzco-00000002sOA-0PAP for pgsql-hackers@lists.postgresql.org; Sun, 26 Apr 2026 13:34:19 +0000 Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-59e4a04f059so11269444e87.2 for ; Sun, 26 Apr 2026 06:34:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1777210456; cv=none; d=google.com; s=arc-20240605; b=PqTIESDkD6PitWrFJbrhvTFxIpgIK6ZML3n+17oubD6+6fUyBSTGpHoDwIYpeGezwv 9P14TlOzqyLp9EuaRa3+7ZvRUn7vtCS4ESdHZndb/shPsUqAcSaUJweu9q69ravMPVFn GeWX4vrZtzlYFCDnN3bsPMqRVHs1TrqoZruN9MHU1zv9q97pNRrh3VPd1as8VsYqGjl9 xJYtHlP8WEVuOkpCmmJ/fRzeje6kJJZr7eC39KdBegBUO1thPTH1HiVGvEtWe4oMtKnV IcR7V/yMWHbkP6pwdk4wo6rI/tuJcdmqoP7W4L/kdhb5lVHSaBm65Z055IA01tE3/KMw vBIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=ue5P37gOrZ0jdTaUP1G8+Wmj7vbHj6pzwoNYWYwG9B8=; fh=6RoYm2W9FQ7HJXrUNQk/wdpIIFwyjf+rQeLWvTqNDRo=; b=Ki3fKApBF6TY62CJmfRSCOeZL2xRBl93yLAGz8bPl+fdTHr/7d0TeLVHM+83+Q4vkZ LasvbD+5GK4qPjGkOqHVG5FP9+4j1Zmk6lhPMm16NZurOr/32KYFIIOuSkS0k6iMVip4 sa6ve6xCrcWKfJP8OgryaMnrP63WXPa5aWwLxdSVArkiLp0ThRnM8sK2gFSdkbLixAr/ 34zUpTMibyFCvd5YeiJNMlm5nqn+4iWS4AZlHOVdIkDlGselIztbrVgzVjEbQyTQN/4g heNaCW7VuXQV/tP1NqtRm3MsF7ftwWip/1RFlmL9dy2lOXIwp88dypFpb+FoIlX6frYD mRsw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777210456; x=1777815256; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ue5P37gOrZ0jdTaUP1G8+Wmj7vbHj6pzwoNYWYwG9B8=; b=h4TvkgFvxFb4E4fB5uhNhnulJ7UofgDlEm269taRa0KEoo6dnEz23hV/F266K56rts HfbHsODcbjM2I1OlgDmnE30SV6kjt4s4BtNtytTdm0I4xW2O3eXSkEy3mB+VGf3RFPNk rv3mc/N8GnRWoL06cnfnwP0oeJmN8+FHCLDWgdFEat+lDxIEfoZmhEAhImlFRPpmp3BX b1PQR91esVFFBlCUlJpO6iz/dETqk1kwWSlfMlH/i6/jsvaGmyQ3FmQJIUPFtAWPyD3H 0NPennCEqY7ts1jEP8WosGjEupndyeps7bmm8dg53qug2joTaZxOqYGfwfDpydOq/m9V iAHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777210456; x=1777815256; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=ue5P37gOrZ0jdTaUP1G8+Wmj7vbHj6pzwoNYWYwG9B8=; b=RmJNZ+jXwt3z08Mrp22k7ldq5U5peoxdDiNN96xnX03xY2uYW8YE57dK9HaukuAwR1 i7GtKnMBwcfsOC4denUuXG6Ee6zWvIT7hR18361BG6tgSKek2MetTCl++mFBHXaDWmsG Ki8CkbeCsp9mReGvXIbAqkVj4u4cY1hAv82TDfwtA8bwAeQc8JGQQTwAE0zCyj0PeX6r ycooqKgCPBQAikQGHu+8UsBcb3/Kvr6cyrG8A695IjAHBcMxoBukPF55Ph3LX2NiTjhd ra5F951DeXcN3YAl4XjdHWPPKClK0QGyLJBPHTom21wbQi6/M1UvQ1xNVcWmr39b9E6y Lq1Q== X-Forwarded-Encrypted: i=1; AFNElJ8bdEtGycL7HZJXNdsiiinVIBl3q/G4TXZRQrwh52au5NvME/cQ+XfSRhKpktykf+4GNn4GFWenfDjj36Ty@lists.postgresql.org X-Gm-Message-State: AOJu0Yye5dvmIOz6Ex0GpYtjo0FpWu1rA/Cucxk2Vtvtb++qc9ivtdo2 FWQcd/WgjN+F0++CTAsaWaJjVpARFFG/Ujiq+yPjOcz92mE1q4cYtJ/g0KQiq2BDXa7NAnmHJdz gziFH8m+tpVEb64aik2x3L4tgGrhG+6c= X-Gm-Gg: AeBDiet3EZ6aS6RB4se1qtf6ffI/puy6dilFGEQnUzwFASw7Nna5+H89d4LmiWY3xk3 g4Dwl1KH/fVfPm2jSfz3O+kb1iQMkggJpY/etWeDNFoCFqEXng0Y/qZXSNa+vUTlxsWPaL7MQ9O pnuWT5wu2IPMCmVGYfJikWPLQyPfHwh4y6JRvLB6SozJPrgbTH2XmNCHkyJaq6w9G4r2pNrbGtH qPHQyQTq9igK2yd/cu58Lsi+1XXteAtw8KvFBp8nEyNkZCYx31pklelHHz3xANrwG8y1xKq9qfq 7DDM0+5Si7kE03t78hy9JtywVn/yKiYZbCvK+keTDHhWyeJ+PW10XjdzM3znGHwh1JDHB/+vWDM nQIVLz/FY7gV07g== X-Received: by 2002:a05:6512:a92:b0:5a2:a851:b00 with SMTP id 2adb3069b0e04-5a4172c0fb6mr11698609e87.3.1777210455376; Sun, 26 Apr 2026 06:34:15 -0700 (PDT) MIME-Version: 1.0 References: <9539.1775724194@localhost> <112208.1776173876@localhost> <25514.1776264611@localhost> <38385.1776277704@localhost> <44458.1776540188@localhost> <68264.1776707092@localhost> In-Reply-To: From: Mihail Nikalayeu Date: Sun, 26 Apr 2026 15:34:00 +0200 X-Gm-Features: AVHnY4K-h-yvZsa7zh7oSo4r1kKP6mWjbLokjhbUW0Dt9xe1AEpjFgmY6z4Ebsw Message-ID: Subject: Re: Adding REPACK [concurrently] To: Antonin Houska Cc: Andres Freund , Amit Kapila , Alvaro Herrera , Srinath Reddy Sadipiralla , Matthias van de Meent , Pg Hackers , Robert Treat Content-Type: multipart/mixed; boundary="000000000000e27b8e06505d0dce" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e27b8e06505d0dce Content-Type: text/plain; charset="UTF-8" Hello! I think I have a good enough approach now (at least balancing complexity and outcome). Patch (and commit message) is quite explanatory, but in a few words: - add 'upgradeIntent' to PROCLOCK (set by REPACK) - check that in the deadlock detector. If the backend finds the cycle and is part of it, but because it's upgrading an already announced lock, it cancels another backend instead of itself. - use that in the fast path of simple deadlock detection to avoid pointless waiting (for the easy case involving two backends) It doesn't cover all scenarios (explained in patch details) but for majority of realistic scenarios - yes. It may be extended to cover all of them, but I'm not sure it's worth the additional complexity. Best regards, Mikhail. --000000000000e27b8e06505d0dce Content-Type: application/octet-stream; name="nocfbot-v2-0001-Protect-concurrent-repack-lock-upgrades.patch" Content-Disposition: attachment; filename="nocfbot-v2-0001-Protect-concurrent-repack-lock-upgrades.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mofqlie20 RnJvbSAwNzE3ZGIwODBiMDc5ZDAyNDJmYzBjMzgyNmYxMjg0ZDc5MzkxMWZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU3VuLCAyNiBBcHIgMjAyNiAxMTo1MDozNCArMDIwMApTdWJqZWN0OiBb UEFUQ0ggdjJdIFByb3RlY3QgY29uY3VycmVudCByZXBhY2sgbG9jayB1cGdyYWRlcwoKUkVQQUNL IENPTkNVUlJFTlRMWSBsb3NlcyBzaWduaWZpY2FudCB3b3JrIHdoZW4gaXRzIGZpbmFsIFNoYXJl VXBkYXRlRXhjbHVzaXZlTG9jayB0byBBY2Nlc3NFeGNsdXNpdmVMb2NrIHVwZ3JhZGUgaXMgY2Fu Y2VsZWQgYnkgYSBkZWFkbG9jay4gVGhpcyBjb21taXQgaW50cm9kdWNlcyAicHJvdGVjdGVkIGxv Y2sgdXBncmFkZXMiLCBhbGxvd2luZyBhIGJhY2tlbmQgdG8gYXRvbWljYWxseSByZWNvcmQgYSBm dXR1cmUgdXBncmFkZSBpbnRlbnRpb24gKHVwZ3JhZGVJbnRlbnQpIG9uIGl0cyBQUk9DTE9DSyB2 aWEgTG9ja0FjcXVpcmVFeHRlbmRlZC4gV2hlbiBhIGRlYWRsb2NrIGN5Y2xlIGludm9sdmVzIGEg cHJvdGVjdGVkIGJhY2tlbmQncyBhbm5vdW5jZWQgdXBncmFkZSwgdGhlIGRldGVjdG9yIHByZWVt cHRzIGEgYmxvY2tpbmcgd2FpdGVyIHJhdGhlciB0aGFuIHRoZSBwcm90ZWN0ZWQgdXBncmFkZXIu CgpQcmVlbXB0aW9uIHRyaWdnZXJzIHZpYSB0d28gcGF0aHMuIEpvaW5XYWl0UXVldWUgZmFzdC1m YWlscyBpbmNvbWluZyByZXF1ZXN0cyBpZiBhIGhvbGRlcidzIHVwZ3JhZGVJbnRlbnQgYW5kIGN1 cnJlbnQgbW9kZXMgZ3VhcmFudGVlIGEgZnV0dXJlIGN5Y2xlLiBBbHRlcm5hdGl2ZWx5LCBpZiBE ZWFkTG9ja0NoZWNrIGV2YWx1YXRlcyBhIGN5Y2xlIHdoZXJlIHRoZSB3YWl0ZXIgaXMgYSBwcm90 ZWN0ZWQgdXBncmFkZXIsIGl0IHNlbGVjdHMgYSBibG9ja2luZyB3YWl0ZXIgYXMgdGhlIGNhbmNl bGxhdGlvbiB2aWN0aW0uCi0tLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9uYW1lc3BhY2UuYyAgICAg ICAgICAgICAgIHwgIDMyICsrKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3JlcGFjay5jICAgICAg ICAgICAgICAgICB8ICAyOSArKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9SRUFETUUgICAg ICAgICAgICAgICB8ICAyNiArKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9kZWFkbG9jay5j ICAgICAgICAgICB8ICA5MCArKysrKysrKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sbWdy LmMgICAgICAgICAgICAgICB8ICA0OSArKystLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xv Y2suYyAgICAgICAgICAgICAgIHwgMTU0ICsrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvc3Rv cmFnZS9sbWdyL3Byb2MuYyAgICAgICAgICAgICAgIHwgMTM0ICsrKysrKysrKystLS0KIHNyYy9p bmNsdWRlL2NhdGFsb2cvbmFtZXNwYWNlLmggICAgICAgICAgICAgICB8ICAgNyArCiBzcmMvaW5j bHVkZS9zdG9yYWdlL2xtZ3IuaCAgICAgICAgICAgICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1 ZGUvc3RvcmFnZS9sb2NrLmggICAgICAgICAgICAgICAgICAgIHwgIDE5ICstCiBzcmMvaW5jbHVk ZS9zdG9yYWdlL3Byb2MuaCAgICAgICAgICAgICAgICAgICAgfCAgIDcgLQogLi4uL2luamVjdGlv bl9wb2ludHMvZXhwZWN0ZWQvcmVwYWNrLm91dCAgICAgIHwgMTgxICsrKysrKysrKysrKysrKysr LQogLi4uL2luamVjdGlvbl9wb2ludHMvc3BlY3MvcmVwYWNrLnNwZWMgICAgICAgIHwgMTA4ICsr KysrKysrKysrCiAxMyBmaWxlcyBjaGFuZ2VkLCA3NTcgaW5zZXJ0aW9ucygrKSwgODIgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9uYW1lc3BhY2UuYyBiL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvbmFtZXNwYWNlLmMKaW5kZXggNTZiODdkODc4ZTguLjMxYTk1ODE5 OGUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL25hbWVzcGFjZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvbmFtZXNwYWNlLmMKQEAgLTQxNSw4ICs0MTUsMTggQEAgc3BjYWNo ZV9pbnNlcnQoY29uc3QgY2hhciAqc2VhcmNoUGF0aCwgT2lkIHJvbGVpZCkKIAl9CiB9CiAKKy8q IFdyYXBwZXIgcHJlc2VydmluZyB0aGUgaGlzdG9yaWNhbCBzaWduYXR1cmUgKG5vIHVwZ3JhZGUg aW50ZW50KS4gKi8KK09pZAorUmFuZ2VWYXJHZXRSZWxpZEV4dGVuZGVkKGNvbnN0IFJhbmdlVmFy ICpyZWxhdGlvbiwgTE9DS01PREUgbG9ja21vZGUsCisJCQkJCQkgdWludDMyIGZsYWdzLAorCQkJ CQkJIFJhbmdlVmFyR2V0UmVsaWRDYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tfYXJn KQoreworCXJldHVybiBSYW5nZVZhckdldFJlbGlkV2l0aFVwZ3JhZGVJbnRlbnQocmVsYXRpb24s IGxvY2ttb2RlLCBOb0xvY2ssCisJCQkJCQkJCQkJCSBmbGFncywgY2FsbGJhY2ssIGNhbGxiYWNr X2FyZyk7Cit9CisKIC8qCi0gKiBSYW5nZVZhckdldFJlbGlkRXh0ZW5kZWQKKyAqIFJhbmdlVmFy R2V0UmVsaWRXaXRoVXBncmFkZUludGVudAogICoJCUdpdmVuIGEgUmFuZ2VWYXIgZGVzY3JpYmlu ZyBhbiBleGlzdGluZyByZWxhdGlvbiwKICAqCQlzZWxlY3QgdGhlIHByb3BlciBuYW1lc3BhY2Ug YW5kIGxvb2sgdXAgdGhlIHJlbGF0aW9uIE9JRC4KICAqCkBAIC00MzUsMTMgKzQ0NSwxNyBAQCBz cGNhY2hlX2luc2VydChjb25zdCBjaGFyICpzZWFyY2hQYXRoLCBPaWQgcm9sZWlkKQogICogcmV0 dXJuIHZhbHVlIG9mIEludmFsaWRPaWQgY291bGQgZWl0aGVyIG1lYW4gdGhlIHJlbGF0aW9uIGlz IG1pc3Npbmcgb3IgaXQKICAqIGNvdWxkIG5vdCBiZSBsb2NrZWQuCiAgKgorICogSWYgdXBncmFk ZU1vZGUgaXMgbm90IE5vTG9jaywgYW4gdXBncmFkZS1pbnRlbnQgYW5ub3VuY2VtZW50IGlzIGlu c3RhbGxlZAorICogYXRvbWljYWxseSB3aXRoIHRoZSBncmFudDsgc2VlIExvY2tBY3F1aXJlRXh0 ZW5kZWQuCisgKgogICogQ2FsbGJhY2sgYWxsb3dzIGNhbGxlciB0byBjaGVjayBwZXJtaXNzaW9u cyBvciBhY3F1aXJlIGFkZGl0aW9uYWwgbG9ja3MKICAqIHByaW9yIHRvIGdyYWJiaW5nIHRoZSBy ZWxhdGlvbiBsb2NrLgogICovCiBPaWQKLVJhbmdlVmFyR2V0UmVsaWRFeHRlbmRlZChjb25zdCBS YW5nZVZhciAqcmVsYXRpb24sIExPQ0tNT0RFIGxvY2ttb2RlLAotCQkJCQkJIHVpbnQzMiBmbGFn cywKLQkJCQkJCSBSYW5nZVZhckdldFJlbGlkQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmNhbGxi YWNrX2FyZykKK1JhbmdlVmFyR2V0UmVsaWRXaXRoVXBncmFkZUludGVudChjb25zdCBSYW5nZVZh ciAqcmVsYXRpb24sIExPQ0tNT0RFIGxvY2ttb2RlLAorCQkJCQkJCQkgIExPQ0tNT0RFIHVwZ3Jh ZGVNb2RlLCB1aW50MzIgZmxhZ3MsCisJCQkJCQkJCSAgUmFuZ2VWYXJHZXRSZWxpZENhbGxiYWNr IGNhbGxiYWNrLAorCQkJCQkJCQkgIHZvaWQgKmNhbGxiYWNrX2FyZykKIHsKIAl1aW50NjQJCWlu dmFsX2NvdW50OwogCU9pZAkJCXJlbElkOwpAQCAtNDUxLDYgKzQ2NSw5IEBAIFJhbmdlVmFyR2V0 UmVsaWRFeHRlbmRlZChjb25zdCBSYW5nZVZhciAqcmVsYXRpb24sIExPQ0tNT0RFIGxvY2ttb2Rl LAogCiAJLyogdmVyaWZ5IHRoYXQgZmxhZ3MgZG8gbm8gY29uZmxpY3QgKi8KIAlBc3NlcnQoISgo ZmxhZ3MgJiBSVlJfTk9XQUlUKSAmJiAoZmxhZ3MgJiBSVlJfU0tJUF9MT0NLRUQpKSk7CisJLyog VXBncmFkZSBpbnRlbnQgcmVxdWlyZXMgdGhlIGJsb2NraW5nIGFjcXVpc2l0aW9uIHBhdGguICov CisJQXNzZXJ0KHVwZ3JhZGVNb2RlID09IE5vTG9jayB8fAorCQkgICAhKGZsYWdzICYgKFJWUl9O T1dBSVQgfCBSVlJfU0tJUF9MT0NLRUQpKSk7CiAKIAkvKgogCSAqIFdlIGNoZWNrIHRoZSBjYXRh bG9nIG5hbWUgYW5kIHRoZW4gaWdub3JlIGl0LgpAQCAtNTkwLDcgKzYwNywxMiBAQCBSYW5nZVZh ckdldFJlbGlkRXh0ZW5kZWQoY29uc3QgUmFuZ2VWYXIgKnJlbGF0aW9uLCBMT0NLTU9ERSBsb2Nr bW9kZSwKIAkJaWYgKCFPaWRJc1ZhbGlkKHJlbElkKSkKIAkJCUFjY2VwdEludmFsaWRhdGlvbk1l c3NhZ2VzKCk7CiAJCWVsc2UgaWYgKCEoZmxhZ3MgJiAoUlZSX05PV0FJVCB8IFJWUl9TS0lQX0xP Q0tFRCkpKQotCQkJTG9ja1JlbGF0aW9uT2lkKHJlbElkLCBsb2NrbW9kZSk7CisJCXsKKwkJCWlm ICh1cGdyYWRlTW9kZSAhPSBOb0xvY2spCisJCQkJTG9ja1JlbGF0aW9uT2lkV2l0aFVwZ3JhZGVJ bnRlbnQocmVsSWQsIGxvY2ttb2RlLCB1cGdyYWRlTW9kZSk7CisJCQllbHNlCisJCQkJTG9ja1Jl bGF0aW9uT2lkKHJlbElkLCBsb2NrbW9kZSk7CisJCX0KIAkJZWxzZSBpZiAoIUNvbmRpdGlvbmFs TG9ja1JlbGF0aW9uT2lkKHJlbElkLCBsb2NrbW9kZSkpCiAJCXsKIAkJCWludAkJCWVsZXZlbCA9 IChmbGFncyAmIFJWUl9TS0lQX0xPQ0tFRCkgPyBERUJVRzEgOiBFUlJPUjsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3JlcGFjay5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcmVw YWNrLmMKaW5kZXggYmFmZGNhODA4MTAuLmM2M2QyMTA3ZWYyIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9yZXBhY2suYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9yZXBhY2su YwpAQCAtMjMyMiwxMiArMjMyMiwyNSBAQCBwcm9jZXNzX3NpbmdsZV9yZWxhdGlvbihSZXBhY2tT dG10ICpzdG10LCBMT0NLTU9ERSBsb2NrbW9kZSwgYm9vbCBpc1RvcExldmVsLAogCQkJCWVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCWVycm1zZygiQU5BTFlaRSBv cHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBhIGNvbHVtbiBsaXN0IGlzIHByb3ZpZGVkIikp OwogCi0JLyogRmluZCwgbG9jaywgYW5kIGNoZWNrIHBlcm1pc3Npb25zIG9uIHRoZSB0YWJsZS4g Ki8KLQl0YWJsZU9pZCA9IFJhbmdlVmFyR2V0UmVsaWRFeHRlbmRlZChzdG10LT5yZWxhdGlvbi0+ cmVsYXRpb24sCi0JCQkJCQkJCQkJbG9ja21vZGUsCi0JCQkJCQkJCQkJMCwKLQkJCQkJCQkJCQlS YW5nZVZhckNhbGxiYWNrTWFpbnRhaW5zVGFibGUsCi0JCQkJCQkJCQkJTlVMTCk7CisJLyoKKwkg KiBGaW5kLCBsb2NrLCBhbmQgY2hlY2sgcGVybWlzc2lvbnMgb24gdGhlIHRhYmxlLgorCSAqCisJ ICogRm9yIENPTkNVUlJFTlRMWSwgYW5ub3VuY2UgdGhlIGZ1dHVyZSBBRUwgdXBncmFkZSBzbyBh IGNvbmZsaWN0aW5nCisJICogaG9sZGVyIGlzIHByZWVtcHRlZCBpbnN0ZWFkIG9mIHN0YWxsaW5n IHVzIHRocm91Z2ggdGhlIGNvcHkgcGhhc2UuCisJICovCisJaWYgKChwYXJhbXMtPm9wdGlvbnMg JiBDTFVPUFRfQ09OQ1VSUkVOVCkgIT0gMCkKKwkJdGFibGVPaWQgPSBSYW5nZVZhckdldFJlbGlk V2l0aFVwZ3JhZGVJbnRlbnQoc3RtdC0+cmVsYXRpb24tPnJlbGF0aW9uLAorCQkJCQkJCQkJCQkJ CSBsb2NrbW9kZSwKKwkJCQkJCQkJCQkJCQkgQWNjZXNzRXhjbHVzaXZlTG9jaywKKwkJCQkJCQkJ CQkJCQkgMCwKKwkJCQkJCQkJCQkJCQkgUmFuZ2VWYXJDYWxsYmFja01haW50YWluc1RhYmxlLAor CQkJCQkJCQkJCQkJCSBOVUxMKTsKKwllbHNlCisJCXRhYmxlT2lkID0gUmFuZ2VWYXJHZXRSZWxp ZEV4dGVuZGVkKHN0bXQtPnJlbGF0aW9uLT5yZWxhdGlvbiwKKwkJCQkJCQkJCQkJbG9ja21vZGUs CisJCQkJCQkJCQkJCTAsCisJCQkJCQkJCQkJCVJhbmdlVmFyQ2FsbGJhY2tNYWludGFpbnNUYWJs ZSwKKwkJCQkJCQkJCQkJTlVMTCk7CiAJcmVsID0gdGFibGVfb3Blbih0YWJsZU9pZCwgTm9Mb2Nr KTsKIAogCS8qCkBAIC0zMDU1LDYgKzMwNjgsMTAgQEAgcmVidWlsZF9yZWxhdGlvbl9maW5pc2hf Y29uY3VycmVudChSZWxhdGlvbiBOZXdIZWFwLCBSZWxhdGlvbiBPbGRIZWFwLAogCS8qCiAJICog QWNxdWlyZSBBY2Nlc3NFeGNsdXNpdmVMb2NrIG9uIHRoZSB0YWJsZSwgaXRzIFRPQVNUIHJlbGF0 aW9uIChpZiB0aGVyZQogCSAqIGlzIG9uZSksIGFsbCBpdHMgaW5kZXhlcywgc28gdGhhdCB3ZSBj YW4gc3dhcCB0aGUgZmlsZXMuCisJICoKKwkgKiBUaGUgdXBncmFkZSBpbnRlbnQgYW5ub3VuY2Vk IGF0IGluaXRpYWwgU1VFTCBhY3F1aXNpdGlvbiBtYWtlcyB0aGUKKwkgKiBkZXRlY3RvciBwcmVl bXB0IGEgYmxvY2tlciBvbiBhIGRlYWRsb2NrIGhlcmUsIHByZXNlcnZpbmcgdGhlIHdvcmsKKwkg KiBhbHJlYWR5IGRvbmUuCiAJICovCiAJTG9ja1JlbGF0aW9uT2lkKG9sZF90YWJsZV9vaWQsIEFj Y2Vzc0V4Y2x1c2l2ZUxvY2spOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvUkVBRE1FIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL1JFQURNRQppbmRleCA0NWRlMGZk MmJkNi4uY2VkN2QyODUyNzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9S RUFETUUKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL1JFQURNRQpAQCAtNTg2LDYgKzU4 NiwzMiBAQCBUaGUgY2FsbGVyIGNhbiB0aGVuIHNlbmQgYSBjYW5jZWxsYXRpb24gc2lnbmFsLiAg VGhpcyBpbXBsZW1lbnRzIHRoZQogcHJpbmNpcGxlIHRoYXQgYXV0b3ZhY3V1bSBoYXMgYSBsb3cg bG9ja2luZyBwcmlvcml0eSAoZWcgaXQgbXVzdCBub3QgYmxvY2sKIERETCBvbiB0aGUgdGFibGUp LgogCitQcm90ZWN0ZWQgTG9jayBVcGdyYWRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor QSBiYWNrZW5kIGNhbiBhbm5vdW5jZSBhdCBpbml0aWFsLWxvY2sgYWNxdWlzaXRpb24gdGhhdCBp dCBpbnRlbmRzIHRvIHVwZ3JhZGUKK3RvIGEgc3Ryb25nZXIgbW9kZSBsYXRlciAoUFJPQ0xPQ0st PnVwZ3JhZGVJbnRlbnQpLCBpbnN0YWxsZWQgYXRvbWljYWxseSB3aXRoCit0aGUgZ3JhbnQgdmlh IExvY2tBY3F1aXJlRXh0ZW5kZWQuICBSRVBBQ0sgQ09OQ1VSUkVOVExZIHVzZXMgdGhpcyBzbyB0 aGF0IGEKK2RlYWRsb2NrIG9uIGl0cyBmaW5hbCBTVUVMLT5BRUwgc3dhcCBjYW5jZWxzIGEgYmxv Y2tlciByYXRoZXIgdGhhbiB0aHJvd2luZworYXdheSB0aGUgY29weS9yZWJ1aWxkIHBoYXNlLgor CitXaGVuIGEgY3ljbGUgaW52b2x2aW5nIHRoZSBwcm90ZWN0ZWQgYmFja2VuZCBpcyBkZXRlY3Rl ZCwgYSBibG9ja2luZyB3YWl0ZXIgaXMKK2NhbmNlbGVkIGluc3RlYWQgb2YgdGhlIHByb3RlY3Rl ZCBiYWNrZW5kLiAgVGhpcyBjYW4gaGFwcGVuIGVpdGhlciBpbgorSm9pbldhaXRRdWV1ZSdzIGZh c3QtZmFpbCBjaGVjayBvciBpbiB0aGUgZnVsbCBEZWFkTG9ja0NoZWNrKCkgZHVyaW5nIHRoZQor YW5ub3VuY2VkIHVwZ3JhZGUgd2FpdC4gIFRoZSBmYXN0LWZhaWwgY2hlY2sgaXMgb25seSBhIGNo ZWFwIGVhcmx5IHRlc3QgZm9yCitjeWNsZXMgYWxyZWFkeSB2aXNpYmxlIGluIHRoZSBtYWluIGxv Y2sgdGFibGUuIEl0IGRvZXMgbm90IGZvcmNlIHRyYW5zZmVyIG9mCit1bnJlbGF0ZWQgZmFzdC1w YXRoIHJlbGF0aW9uIGxvY2tzLCBzbyBpdCBtYXkgbWlzcyBjeWNsZXMgd2hvc2UgZWRnZXMgYXJl IHN0aWxsCitoaWRkZW4gaW4gYmFja2VuZC1sb2NhbCBmYXN0LXBhdGggc3RhdGUuIFN1Y2ggY3lj bGVzIGJlY29tZSB2aXNpYmxlIGxhdGVyIHdoZW4gYQorY29uZmxpY3Rpbmcgc3Ryb25nIGxvY2sg cmVxdWVzdCB0cmFuc2ZlcnMgdGhlIHJlbGV2YW50IGZhc3QtcGF0aCBsb2Nrcy4KK1RoZSBmdWxs IGRlYWRsb2NrIGRldGVjdG9yIGhhbmRsZXMgdGhhdCBjYXNlLgorCitPdGhlciBwcm90ZWN0ZWQg dXBncmFkZXJzIGFuZCBhbnRpLXdyYXBhcm91bmQgYXV0b3ZhY3V1bXMgYXJlIHNraXBwZWQgYXMK K3ZpY3RpbXMuIElmIG5vIGFjY2VwdGFibGUgdmljdGltIGV4aXN0cywgdGhlIHByb3RlY3RlZCBi YWNrZW5kIGlzIGNhbmNlbGVkIGFzCit1c3VhbC4KKworVGhlIHZpY3RpbSBvYnNlcnZlcyBwcmVl bXB0aW9uIHZpYSBQUk9DX1dBSVRfU1RBVFVTX1BSRUVNUFRFRCBvbiBpdHMKK3dhaXRTdGF0dXMs IHdoaWNoIExvY2tBY3F1aXJlRXh0ZW5kZWQgdHVybnMgaW50byBhIGRlYWRsb2NrIGVyZXBvcnQu CisKIEdyb3VwIExvY2tpbmcKIC0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9sbWdyL2RlYWRsb2NrLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvZGVh ZGxvY2suYwppbmRleCBiODk2MmQ4NzViNi4uMzUxNDNmMGFiMWUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9kZWFkbG9jay5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9kZWFkbG9jay5jCkBAIC0xMjUsNiArMTI1LDEzIEBAIHN0YXRpYyBpbnQJbWF4UG9zc2li bGVDb25zdHJhaW50czsKIHN0YXRpYyBERUFETE9DS19JTkZPICpkZWFkbG9ja0RldGFpbHM7CiBz dGF0aWMgaW50CW5EZWFkbG9ja0RldGFpbHM7CiAKKy8qCisgKiBQYXJhbGxlbCB0byBkZWFkbG9j a0RldGFpbHNbXTogbGl2ZSBQR1BST0NzIGZvcm1pbmcgZWFjaCBlZGdlIG9mIHRoZQorICogZGV0 ZWN0ZWQgY3ljbGUuICBWYWxpZCBvbmx5IHdoaWxlIGFsbCBwYXJ0aXRpb24gbG9ja3MgYXJlIGhl bGQuICBVc2VkIGJ5CisgKiBEZWFkTG9ja0NoZWNrIHRvIHBpY2sgYSB2aWN0aW0gdW5kZXIgdGhl IHByb3RlY3RlZC11cGdyYWRlIHJ1bGUuCisgKi8KK3N0YXRpYyBQR1BST0MgKipkZWFkbG9ja1By b2NzOworCiAvKiBQR1BST0MgcG9pbnRlciBvZiBhbnkgYmxvY2tpbmcgYXV0b3ZhY3V1bSB3b3Jr ZXIgZm91bmQgKi8KIHN0YXRpYyBQR1BST0MgKmJsb2NraW5nX2F1dG92YWN1dW1fcHJvYyA9IE5V TEw7CiAKQEAgLTE0OCwxMSArMTU1LDEyIEBAIEluaXREZWFkTG9ja0NoZWNraW5nKHZvaWQpCiAJ b2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOwogCiAJLyoK LQkgKiBGaW5kTG9ja0N5Y2xlIG5lZWRzIGF0IG1vc3QgTWF4QmFja2VuZHMgZW50cmllcyBpbiB2 aXNpdGVkUHJvY3NbXSBhbmQKLQkgKiBkZWFkbG9ja0RldGFpbHNbXS4KKwkgKiBGaW5kTG9ja0N5 Y2xlIG5lZWRzIGF0IG1vc3QgTWF4QmFja2VuZHMgZW50cmllcyBpbiB2aXNpdGVkUHJvY3NbXSwK KwkgKiBkZWFkbG9ja0RldGFpbHNbXSwgYW5kIGRlYWRsb2NrUHJvY3NbXS4KIAkgKi8KIAl2aXNp dGVkUHJvY3MgPSAoUEdQUk9DICoqKSBwYWxsb2MoTWF4QmFja2VuZHMgKiBzaXplb2YoUEdQUk9D ICopKTsKIAlkZWFkbG9ja0RldGFpbHMgPSAoREVBRExPQ0tfSU5GTyAqKSBwYWxsb2MoTWF4QmFj a2VuZHMgKiBzaXplb2YoREVBRExPQ0tfSU5GTykpOworCWRlYWRsb2NrUHJvY3MgPSAoUEdQUk9D ICoqKSBwYWxsb2MoTWF4QmFja2VuZHMgKiBzaXplb2YoUEdQUk9DICopKTsKIAogCS8qCiAJICog VG9wb1NvcnQgbmVlZHMgdG8gY29uc2lkZXIgYXQgbW9zdCBNYXhCYWNrZW5kcyB3YWl0LXF1ZXVl IGVudHJpZXMsIGFuZApAQCAtMjE5LDEwICsyMjcsMTQgQEAgSW5pdERlYWRMb2NrQ2hlY2tpbmco dm9pZCkKIERlYWRMb2NrU3RhdGUKIERlYWRMb2NrQ2hlY2soUEdQUk9DICpwcm9jKQogeworCWJv b2wJCXZpY3RpbXNfY2FuY2VsZWQgPSBmYWxzZTsKKworcmV0cnk6CiAJLyogSW5pdGlhbGl6ZSB0 byAibm8gY29uc3RyYWludHMiICovCiAJbkN1ckNvbnN0cmFpbnRzID0gMDsKIAluUG9zc2libGVD b25zdHJhaW50cyA9IDA7CiAJbldhaXRPcmRlcnMgPSAwOworCW5EZWFkbG9ja0RldGFpbHMgPSAw OwogCiAJLyogSW5pdGlhbGl6ZSB0byBub3QgYmxvY2tlZCBieSBhbiBhdXRvdmFjdXVtIHdvcmtl ciAqLwogCWJsb2NraW5nX2F1dG92YWN1dW1fcHJvYyA9IE5VTEw7CkBAIC0yNDIsNiArMjU0LDcy IEBAIERlYWRMb2NrQ2hlY2soUEdQUk9DICpwcm9jKQogCQlpZiAoIUZpbmRMb2NrQ3ljbGUocHJv YywgcG9zc2libGVDb25zdHJhaW50cywgJm5Tb2Z0RWRnZXMpKQogCQkJZWxvZyhGQVRBTCwgImRl YWRsb2NrIHNlZW1zIHRvIGhhdmUgZGlzYXBwZWFyZWQiKTsKIAorCQkvKgorCQkgKiBQcm90ZWN0 ZWQtdXBncmFkZSByZXNvbHV0aW9uOiBpZiBvdXIgd2FpdCBpcyB0aGUgYW5ub3VuY2VkIHVwZ3Jh ZGUKKwkJICogZm9yIG91ciBwcm9jbG9jaywgY2FuY2VsIGEgYmxvY2tlciBpbnN0ZWFkIG9mIE15 UHJvYyBhbmQgcmUtcnVuIHRoZQorCQkgKiBmdWxsIGNoZWNrIChub3QganVzdCBGaW5kTG9ja0N5 Y2xlKSBzbyBzb2Z0IGN5Y2xlcyBzdGlsbCBnZXQgYQorCQkgKiBjaGFuY2UgYXQgcXVldWUgcmVh cnJhbmdlbWVudC4gIFBhcnRpdGlvbiBsb2NrcyBhcmUgaGVsZCB0aHJvdWdob3V0LAorCQkgKiBz byB0aGUgbG9vcCBpcyBib3VuZGVkIGJ5IE1heEJhY2tlbmRzLgorCQkgKgorCQkgKiBkZWFkbG9j a1Byb2NzWzBdIGlzIGFsd2F5cyBNeVByb2M7IHN0YXJ0IGF0IHRoZSBkaXJlY3QgYmxvY2tlci4K KwkJICogU2tpcCBvdGhlciBwcm90ZWN0ZWQgdXBncmFkZXJzIChkb24ndCBwcmVlbXB0IHRoZW0p IGFuZAorCQkgKiBhbnRpLXdyYXBhcm91bmQgYXV0b3ZhY3V1bXMgKGNhbmNlbGluZyB0aGVtIGlz IHdvcnNlIHRoYW4gbG9zaW5nCisJCSAqIG91ciB3b3JrKS4gIElmIG5vIGFjY2VwdGFibGUgdmlj dGltIGV4aXN0cywgZmFsbCB0aHJvdWdoIHRvCisJCSAqIERTX0hBUkRfREVBRExPQ0suCisJCSAq LworCQlpZiAoTXlQcm9jLT53YWl0UHJvY0xvY2sgIT0gTlVMTCAmJgorCQkJTXlQcm9jLT53YWl0 UHJvY0xvY2stPnVwZ3JhZGVJbnRlbnQgPT0gTXlQcm9jLT53YWl0TG9ja01vZGUpCisJCXsKKwkJ CVBHUFJPQwkgICAqdmljdGltID0gTlVMTDsKKworCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBuRGVh ZGxvY2tEZXRhaWxzOyBpKyspCisJCQl7CisJCQkJUEdQUk9DCSAgICp3ID0gZGVhZGxvY2tQcm9j c1tpXTsKKworCQkJCWlmICh3ID09IE5VTEwgfHwgdyA9PSBNeVByb2MpCisJCQkJCWNvbnRpbnVl OworCisJCQkJLyogRG9uJ3QgcHJlZW1wdCBhbm90aGVyIHByb3RlY3RlZCB1cGdyYWRlci4gKi8K KwkJCQlpZiAody0+d2FpdFByb2NMb2NrICE9IE5VTEwgJiYKKwkJCQkJdy0+d2FpdFByb2NMb2Nr LT51cGdyYWRlSW50ZW50ID09IHctPndhaXRMb2NrTW9kZSkKKwkJCQkJY29udGludWU7CisKKwkJ CQkvKgorCQkJCSAqIFBST0NfSVNfQVVUT1ZBQ1VVTSBpcyBzZXQgb25jZSBhdCBzdGFydHVwLCBz YWZlIGxvY2tsZXNzLgorCQkJCSAqIFJlYWQgUFJPQ19WQUNVVU1fRk9SX1dSQVBBUk9VTkQgb25s eSBpZiB3ZSBjYW4gZ3JhYgorCQkJCSAqIFByb2NBcnJheUxvY2sgY29uZGl0aW9uYWxseTsgb3Ro ZXJ3aXNlIHNraXAgdGhpcyBjYW5kaWRhdGUuCisJCQkJICovCisJCQkJaWYgKHctPnN0YXR1c0Zs YWdzICYgUFJPQ19JU19BVVRPVkFDVVVNKQorCQkJCXsKKwkJCQkJdWludDgJCXN0YXR1c0ZsYWdz OworCisJCQkJCWlmICghTFdMb2NrQ29uZGl0aW9uYWxBY3F1aXJlKFByb2NBcnJheUxvY2ssIExX X1NIQVJFRCkpCisJCQkJCQljb250aW51ZTsKKworCQkJCQlzdGF0dXNGbGFncyA9IFByb2NHbG9i YWwtPnN0YXR1c0ZsYWdzW3ctPnBneGFjdG9mZl07CisJCQkJCUxXTG9ja1JlbGVhc2UoUHJvY0Fy cmF5TG9jayk7CisKKwkJCQkJaWYgKHN0YXR1c0ZsYWdzICYgUFJPQ19WQUNVVU1fRk9SX1dSQVBB Uk9VTkQpCisJCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlBc3NlcnQody0+d2FpdExvY2sg IT0gTlVMTCk7CisJCQkJQXNzZXJ0KCFkbGlzdF9ub2RlX2lzX2RldGFjaGVkKCZ3LT53YWl0TGlu aykpOworCQkJCXZpY3RpbSA9IHc7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICh2aWN0aW0g IT0gTlVMTCkKKwkJCXsKKwkJCQlSZW1vdmVGcm9tV2FpdFF1ZXVlKHZpY3RpbSwKKwkJCQkJCQkJ CUxvY2tUYWdIYXNoQ29kZSgmKHZpY3RpbS0+d2FpdExvY2stPnRhZykpLAorCQkJCQkJCQkJUFJP Q19XQUlUX1NUQVRVU19QUkVFTVBURUQpOworCQkJCVNldExhdGNoKCZ2aWN0aW0tPnByb2NMYXRj aCk7CisJCQkJdmljdGltc19jYW5jZWxlZCA9IHRydWU7CisJCQkJZ290byByZXRyeTsKKwkJCX0K KwkJfQorCiAJCXJldHVybiBEU19IQVJEX0RFQURMT0NLOwkvKiBjYW5ub3QgZmluZCBhIG5vbi1k ZWFkbG9ja2VkIHN0YXRlICovCiAJfQogCkBAIC0yNzMsNyArMzUxLDkgQEAgRGVhZExvY2tDaGVj ayhQR1BST0MgKnByb2MpCiAJfQogCiAJLyogUmV0dXJuIGNvZGUgdGVsbHMgY2FsbGVyIGlmIHdl IGhhZCB0byBlc2NhcGUgYSBkZWFkbG9jayBvciBub3QgKi8KLQlpZiAobldhaXRPcmRlcnMgPiAw KQorCWlmICh2aWN0aW1zX2NhbmNlbGVkKQorCQlyZXR1cm4gRFNfUFJFRU1QVF9ERUFETE9DSzsK KwllbHNlIGlmIChuV2FpdE9yZGVycyA+IDApCiAJCXJldHVybiBEU19TT0ZUX0RFQURMT0NLOwog CWVsc2UgaWYgKGJsb2NraW5nX2F1dG92YWN1dW1fcHJvYyAhPSBOVUxMKQogCQlyZXR1cm4gRFNf QkxPQ0tFRF9CWV9BVVRPVkFDVVVNOwpAQCAtNTkwLDYgKzY3MCw3IEBAIEZpbmRMb2NrQ3ljbGVS ZWN1cnNlTWVtYmVyKFBHUFJPQyAqY2hlY2tQcm9jLAogCQkJCQkJaW5mby0+bG9ja3RhZyA9IGxv Y2stPnRhZzsKIAkJCQkJCWluZm8tPmxvY2ttb2RlID0gY2hlY2tQcm9jLT53YWl0TG9ja01vZGU7 CiAJCQkJCQlpbmZvLT5waWQgPSBjaGVja1Byb2MtPnBpZDsKKwkJCQkJCWRlYWRsb2NrUHJvY3Nb ZGVwdGhdID0gY2hlY2tQcm9jOwogCiAJCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCQkJfQpAQCAtNjc5 LDYgKzc2MCw3IEBAIEZpbmRMb2NrQ3ljbGVSZWN1cnNlTWVtYmVyKFBHUFJPQyAqY2hlY2tQcm9j LAogCQkJCQlpbmZvLT5sb2NrdGFnID0gbG9jay0+dGFnOwogCQkJCQlpbmZvLT5sb2NrbW9kZSA9 IGNoZWNrUHJvYy0+d2FpdExvY2tNb2RlOwogCQkJCQlpbmZvLT5waWQgPSBjaGVja1Byb2MtPnBp ZDsKKwkJCQkJZGVhZGxvY2tQcm9jc1tkZXB0aF0gPSBjaGVja1Byb2M7CiAKIAkJCQkJLyoKIAkJ CQkJICogQWRkIHRoaXMgZWRnZSB0byB0aGUgbGlzdCBvZiBzb2Z0IGVkZ2VzIGluIHRoZSBjeWNs ZQpAQCAtNzUzLDYgKzgzNSw3IEBAIEZpbmRMb2NrQ3ljbGVSZWN1cnNlTWVtYmVyKFBHUFJPQyAq Y2hlY2tQcm9jLAogCQkJCQlpbmZvLT5sb2NrdGFnID0gbG9jay0+dGFnOwogCQkJCQlpbmZvLT5s b2NrbW9kZSA9IGNoZWNrUHJvYy0+d2FpdExvY2tNb2RlOwogCQkJCQlpbmZvLT5waWQgPSBjaGVj a1Byb2MtPnBpZDsKKwkJCQkJZGVhZGxvY2tQcm9jc1tkZXB0aF0gPSBjaGVja1Byb2M7CiAKIAkJ CQkJLyoKIAkJCQkJICogQWRkIHRoaXMgZWRnZSB0byB0aGUgbGlzdCBvZiBzb2Z0IGVkZ2VzIGlu IHRoZSBjeWNsZQpAQCAtMTE1OSw0ICsxMjQyLDUgQEAgUmVtZW1iZXJTaW1wbGVEZWFkTG9jayhQ R1BST0MgKnByb2MxLAogCWluZm8tPmxvY2ttb2RlID0gcHJvYzItPndhaXRMb2NrTW9kZTsKIAlp bmZvLT5waWQgPSBwcm9jMi0+cGlkOwogCW5EZWFkbG9ja0RldGFpbHMgPSAyOworCWRlYWRsb2Nr UHJvY3NbMF0gPSBkZWFkbG9ja1Byb2NzWzFdID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9sbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG1n ci5jCmluZGV4IDJjY2Y3MjM3ZmVlLi4xMGIwZTBhNWI5YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9sbWdyL2xtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG1n ci5jCkBAIC0xMDUsNiArMTA1LDE5IEBAIFNldExvY2t0YWdSZWxhdGlvbk9pZChMT0NLVEFHICp0 YWcsIE9pZCByZWxpZCkKICAqLwogdm9pZAogTG9ja1JlbGF0aW9uT2lkKE9pZCByZWxpZCwgTE9D S01PREUgbG9ja21vZGUpCit7CisJTG9ja1JlbGF0aW9uT2lkV2l0aFVwZ3JhZGVJbnRlbnQocmVs aWQsIGxvY2ttb2RlLCBOb0xvY2spOworfQorCisvKgorICoJCUxvY2tSZWxhdGlvbk9pZFdpdGhV cGdyYWRlSW50ZW50CisgKgorICogTG9jayBhbmQgYXRvbWljYWxseSBhbm5vdW5jZSBhIGZ1dHVy ZSB1cGdyYWRlIHRvIGB1cGdyYWRlTW9kZWAuICBTZWUKKyAqIExvY2tBY3F1aXJlRXh0ZW5kZWQg Zm9yIHNlbWFudGljcy4KKyAqLwordm9pZAorTG9ja1JlbGF0aW9uT2lkV2l0aFVwZ3JhZGVJbnRl bnQoT2lkIHJlbGlkLCBMT0NLTU9ERSBsb2NrbW9kZSwKKwkJCQkJCQkJIExPQ0tNT0RFIHVwZ3Jh ZGVNb2RlKQogewogCUxPQ0tUQUcJCXRhZzsKIAlMT0NBTExPQ0sgICpsb2NhbGxvY2s7CkBAIC0x MTIsOCArMTI1LDggQEAgTG9ja1JlbGF0aW9uT2lkKE9pZCByZWxpZCwgTE9DS01PREUgbG9ja21v ZGUpCiAKIAlTZXRMb2NrdGFnUmVsYXRpb25PaWQoJnRhZywgcmVsaWQpOwogCi0JcmVzID0gTG9j a0FjcXVpcmVFeHRlbmRlZCgmdGFnLCBsb2NrbW9kZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCAmbG9j YWxsb2NrLAotCQkJCQkJCSAgZmFsc2UpOworCXJlcyA9IExvY2tBY3F1aXJlRXh0ZW5kZWQoJnRh ZywgbG9ja21vZGUsIHVwZ3JhZGVNb2RlLCBmYWxzZSwgZmFsc2UsIHRydWUsCisJCQkJCQkJICAm bG9jYWxsb2NrLCBmYWxzZSk7CiAKIAkvKgogCSAqIE5vdyB0aGF0IHdlIGhhdmUgdGhlIGxvY2ss IGNoZWNrIGZvciBpbnZhbGlkYXRpb24gbWVzc2FnZXMsIHNvIHRoYXQgd2UKQEAgLTE1Niw4ICsx NjksOCBAQCBDb25kaXRpb25hbExvY2tSZWxhdGlvbk9pZChPaWQgcmVsaWQsIExPQ0tNT0RFIGxv Y2ttb2RlKQogCiAJU2V0TG9ja3RhZ1JlbGF0aW9uT2lkKCZ0YWcsIHJlbGlkKTsKIAotCXJlcyA9 IExvY2tBY3F1aXJlRXh0ZW5kZWQoJnRhZywgbG9ja21vZGUsIGZhbHNlLCB0cnVlLCB0cnVlLCAm bG9jYWxsb2NrLAotCQkJCQkJCSAgZmFsc2UpOworCXJlcyA9IExvY2tBY3F1aXJlRXh0ZW5kZWQo JnRhZywgbG9ja21vZGUsIE5vTG9jaywgZmFsc2UsIHRydWUsIHRydWUsCisJCQkJCQkJICAmbG9j YWxsb2NrLCBmYWxzZSk7CiAKIAlpZiAocmVzID09IExPQ0tBQ1FVSVJFX05PVF9BVkFJTCkKIAkJ cmV0dXJuIGZhbHNlOwpAQCAtMTkwLDggKzIwMyw4IEBAIExvY2tSZWxhdGlvbklkKExvY2tSZWxJ ZCAqcmVsaWQsIExPQ0tNT0RFIGxvY2ttb2RlKQogCiAJU0VUX0xPQ0tUQUdfUkVMQVRJT04odGFn LCByZWxpZC0+ZGJJZCwgcmVsaWQtPnJlbElkKTsKIAotCXJlcyA9IExvY2tBY3F1aXJlRXh0ZW5k ZWQoJnRhZywgbG9ja21vZGUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgJmxvY2FsbG9jaywKLQkJCQkJ CQkgIGZhbHNlKTsKKwlyZXMgPSBMb2NrQWNxdWlyZUV4dGVuZGVkKCZ0YWcsIGxvY2ttb2RlLCBO b0xvY2ssIGZhbHNlLCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCQkgICZsb2NhbGxvY2ssIGZhbHNlKTsK IAogCS8qCiAJICogTm93IHRoYXQgd2UgaGF2ZSB0aGUgbG9jaywgY2hlY2sgZm9yIGludmFsaWRh dGlvbiBtZXNzYWdlczsgc2VlIG5vdGVzCkBAIC0yNTMsOCArMjY2LDggQEAgTG9ja1JlbGF0aW9u KFJlbGF0aW9uIHJlbGF0aW9uLCBMT0NLTU9ERSBsb2NrbW9kZSkKIAkJCQkJCSByZWxhdGlvbi0+ cmRfbG9ja0luZm8ubG9ja1JlbElkLmRiSWQsCiAJCQkJCQkgcmVsYXRpb24tPnJkX2xvY2tJbmZv LmxvY2tSZWxJZC5yZWxJZCk7CiAKLQlyZXMgPSBMb2NrQWNxdWlyZUV4dGVuZGVkKCZ0YWcsIGxv Y2ttb2RlLCBmYWxzZSwgZmFsc2UsIHRydWUsICZsb2NhbGxvY2ssCi0JCQkJCQkJICBmYWxzZSk7 CisJcmVzID0gTG9ja0FjcXVpcmVFeHRlbmRlZCgmdGFnLCBsb2NrbW9kZSwgTm9Mb2NrLCBmYWxz ZSwgZmFsc2UsIHRydWUsCisJCQkJCQkJICAmbG9jYWxsb2NrLCBmYWxzZSk7CiAKIAkvKgogCSAq IE5vdyB0aGF0IHdlIGhhdmUgdGhlIGxvY2ssIGNoZWNrIGZvciBpbnZhbGlkYXRpb24gbWVzc2Fn ZXM7IHNlZSBub3RlcwpAQCAtMjg1LDggKzI5OCw4IEBAIENvbmRpdGlvbmFsTG9ja1JlbGF0aW9u KFJlbGF0aW9uIHJlbGF0aW9uLCBMT0NLTU9ERSBsb2NrbW9kZSkKIAkJCQkJCSByZWxhdGlvbi0+ cmRfbG9ja0luZm8ubG9ja1JlbElkLmRiSWQsCiAJCQkJCQkgcmVsYXRpb24tPnJkX2xvY2tJbmZv LmxvY2tSZWxJZC5yZWxJZCk7CiAKLQlyZXMgPSBMb2NrQWNxdWlyZUV4dGVuZGVkKCZ0YWcsIGxv Y2ttb2RlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgJmxvY2FsbG9jaywKLQkJCQkJCQkgIGZhbHNlKTsK KwlyZXMgPSBMb2NrQWNxdWlyZUV4dGVuZGVkKCZ0YWcsIGxvY2ttb2RlLCBOb0xvY2ssIGZhbHNl LCB0cnVlLCB0cnVlLAorCQkJCQkJCSAgJmxvY2FsbG9jaywgZmFsc2UpOwogCiAJaWYgKHJlcyA9 PSBMT0NLQUNRVUlSRV9OT1RfQVZBSUwpCiAJCXJldHVybiBmYWxzZTsKQEAgLTU5MCw4ICs2MDMs OCBAQCBDb25kaXRpb25hbExvY2tUdXBsZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBv aW50ZXJEYXRhICp0aWQsIExPQ0tNT0RFIGxvYwogCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIodGlkKSwKIAkJCQkJICBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcih0aWQpKTsKIAot CXJldHVybiAoTG9ja0FjcXVpcmVFeHRlbmRlZCgmdGFnLCBsb2NrbW9kZSwgZmFsc2UsIHRydWUs IHRydWUsIE5VTEwsCi0JCQkJCQkJCWxvZ0xvY2tGYWlsdXJlKSAhPSBMT0NLQUNRVUlSRV9OT1Rf QVZBSUwpOworCXJldHVybiAoTG9ja0FjcXVpcmVFeHRlbmRlZCgmdGFnLCBsb2NrbW9kZSwgTm9M b2NrLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwKKwkJCQkJCQkJTlVMTCwgbG9nTG9ja0ZhaWx1cmUpICE9 IExPQ0tBQ1FVSVJFX05PVF9BVkFJTCk7CiB9CiAKIC8qCkBAIC03NDgsOCArNzYxLDggQEAgQ29u ZGl0aW9uYWxYYWN0TG9ja1RhYmxlV2FpdChUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBsb2dMb2Nr RmFpbHVyZSkKIAogCQlTRVRfTE9DS1RBR19UUkFOU0FDVElPTih0YWcsIHhpZCk7CiAKLQkJaWYg KExvY2tBY3F1aXJlRXh0ZW5kZWQoJnRhZywgU2hhcmVMb2NrLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwg TlVMTCwKLQkJCQkJCQkJbG9nTG9ja0ZhaWx1cmUpCisJCWlmIChMb2NrQWNxdWlyZUV4dGVuZGVk KCZ0YWcsIFNoYXJlTG9jaywgTm9Mb2NrLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwKKwkJCQkJCQkJTlVM TCwgbG9nTG9ja0ZhaWx1cmUpCiAJCQk9PSBMT0NLQUNRVUlSRV9OT1RfQVZBSUwpCiAJCQlyZXR1 cm4gZmFsc2U7CiAKQEAgLTEwNDIsOCArMTA1NSw4IEBAIENvbmRpdGlvbmFsTG9ja0RhdGFiYXNl T2JqZWN0KE9pZCBjbGFzc2lkLCBPaWQgb2JqaWQsIHVpbnQxNiBvYmpzdWJpZCwKIAkJCQkJICAg b2JqaWQsCiAJCQkJCSAgIG9ianN1YmlkKTsKIAotCXJlcyA9IExvY2tBY3F1aXJlRXh0ZW5kZWQo JnRhZywgbG9ja21vZGUsIGZhbHNlLCB0cnVlLCB0cnVlLCAmbG9jYWxsb2NrLAotCQkJCQkJCSAg ZmFsc2UpOworCXJlcyA9IExvY2tBY3F1aXJlRXh0ZW5kZWQoJnRhZywgbG9ja21vZGUsIE5vTG9j aywgZmFsc2UsIHRydWUsIHRydWUsCisJCQkJCQkJICAmbG9jYWxsb2NrLCBmYWxzZSk7CiAKIAlp ZiAocmVzID09IExPQ0tBQ1FVSVJFX05PVF9BVkFJTCkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTEy Miw4ICsxMTM1LDggQEAgQ29uZGl0aW9uYWxMb2NrU2hhcmVkT2JqZWN0KE9pZCBjbGFzc2lkLCBP aWQgb2JqaWQsIHVpbnQxNiBvYmpzdWJpZCwKIAkJCQkJICAgb2JqaWQsCiAJCQkJCSAgIG9ianN1 YmlkKTsKIAotCXJlcyA9IExvY2tBY3F1aXJlRXh0ZW5kZWQoJnRhZywgbG9ja21vZGUsIGZhbHNl LCB0cnVlLCB0cnVlLCAmbG9jYWxsb2NrLAotCQkJCQkJCSAgZmFsc2UpOworCXJlcyA9IExvY2tB Y3F1aXJlRXh0ZW5kZWQoJnRhZywgbG9ja21vZGUsIE5vTG9jaywgZmFsc2UsIHRydWUsIHRydWUs CisJCQkJCQkJICAmbG9jYWxsb2NrLCBmYWxzZSk7CiAKIAlpZiAocmVzID09IExPQ0tBQ1FVSVJF X05PVF9BVkFJTCkKIAkJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9sbWdyL2xvY2suYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMKaW5kZXgg OGQyNDZlZDVhNGUuLjBlNjY2YTAyNWVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdl L2xtZ3IvbG9jay5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMKQEAgLTU5 LDYgKzU5LDkgQEAgYm9vbAkJbG9nX2xvY2tfZmFpbHVyZXMgPSBmYWxzZTsKICNkZWZpbmUgTkxP Q0tFTlRTKCkgXAogCW11bF9zaXplKG1heF9sb2Nrc19wZXJfeGFjdCwgYWRkX3NpemUoTWF4QmFj a2VuZHMsIG1heF9wcmVwYXJlZF94YWN0cykpCiAKKyNkZWZpbmUgTE9DS01PREVfU0VMRl9DT05G TElDVFMoY29uZmxpY3RUYWIsIGxvY2ttb2RlKSBcCisJKCgoY29uZmxpY3RUYWIpWyhsb2NrbW9k ZSldICYgTE9DS0JJVF9PTihsb2NrbW9kZSkpICE9IDApCisKIAogLyoKICAqIERhdGEgc3RydWN0 dXJlcyBkZWZpbmluZyB0aGUgc2VtYW50aWNzIG9mIHRoZSBzdGFuZGFyZCBsb2NrIG1ldGhvZHMu CkBAIC0zODQsNyArMzg3LDcgQEAgTE9DS19QUklOVChjb25zdCBjaGFyICp3aGVyZSwgY29uc3Qg TE9DSyAqbG9jaywgTE9DS01PREUgdHlwZSkKIAkJZWxvZyhMT0csCiAJCQkgIiVzOiBsb2NrKCVw KSBpZCgldSwldSwldSwldSwldSwldSkgZ3JhbnRNYXNrKCV4KSAiCiAJCQkgInJlcSglZCwlZCwl ZCwlZCwlZCwlZCwlZCk9JWQgIgotCQkJICJncmFudCglZCwlZCwlZCwlZCwlZCwlZCwlZCk9JWQg d2FpdCglZCkgdHlwZSglcykiLAorCQkJICJncmFudCglZCwlZCwlZCwlZCwlZCwlZCwlZCk9JWQg d2FpdCglZCkgdXBncmFkZUludGVudCglZCkgdHlwZSglcykiLAogCQkJIHdoZXJlLCBsb2NrLAog CQkJIGxvY2stPnRhZy5sb2NrdGFnX2ZpZWxkMSwgbG9jay0+dGFnLmxvY2t0YWdfZmllbGQyLAog CQkJIGxvY2stPnRhZy5sb2NrdGFnX2ZpZWxkMywgbG9jay0+dGFnLmxvY2t0YWdfZmllbGQ0LApA QCAtMzk3LDYgKzQwMCw3IEBAIExPQ0tfUFJJTlQoY29uc3QgY2hhciAqd2hlcmUsIGNvbnN0IExP Q0sgKmxvY2ssIExPQ0tNT0RFIHR5cGUpCiAJCQkgbG9jay0+Z3JhbnRlZFs0XSwgbG9jay0+Z3Jh bnRlZFs1XSwgbG9jay0+Z3JhbnRlZFs2XSwKIAkJCSBsb2NrLT5ncmFudGVkWzddLCBsb2NrLT5u R3JhbnRlZCwKIAkJCSBkY2xpc3RfY291bnQoJmxvY2stPndhaXRQcm9jcyksCisJCQkgbG9jay0+ blVwZ3JhZGVJbnRlbnQsCiAJCQkgTG9ja01ldGhvZHNbTE9DS19MT0NLTUVUSE9EKCpsb2NrKV0t PmxvY2tNb2RlTmFtZXNbdHlwZV0pOwogfQogCkBAIC00MDYsMTAgKzQxMCwxMSBAQCBQUk9DTE9D S19QUklOVChjb25zdCBjaGFyICp3aGVyZSwgY29uc3QgUFJPQ0xPQ0sgKnByb2Nsb2NrUCkKIHsK IAlpZiAoTE9DS19ERUJVR19FTkFCTEVEKCZwcm9jbG9ja1AtPnRhZy5teUxvY2stPnRhZykpCiAJ CWVsb2coTE9HLAotCQkJICIlczogcHJvY2xvY2soJXApIGxvY2soJXApIG1ldGhvZCgldSkgcHJv YyglcCkgaG9sZCgleCkiLAorCQkJICIlczogcHJvY2xvY2soJXApIGxvY2soJXApIG1ldGhvZCgl dSkgcHJvYyglcCkgaG9sZCgleCkgdXBncmFkZUludGVudCglZCkiLAogCQkJIHdoZXJlLCBwcm9j bG9ja1AsIHByb2Nsb2NrUC0+dGFnLm15TG9jaywKIAkJCSBQUk9DTE9DS19MT0NLTUVUSE9EKCoo cHJvY2xvY2tQKSksCi0JCQkgcHJvY2xvY2tQLT50YWcubXlQcm9jLCAoaW50KSBwcm9jbG9ja1At PmhvbGRNYXNrKTsKKwkJCSBwcm9jbG9ja1AtPnRhZy5teVByb2MsIChpbnQpIHByb2Nsb2NrUC0+ aG9sZE1hc2ssCisJCQkgcHJvY2xvY2tQLT51cGdyYWRlSW50ZW50KTsKIH0KICNlbHNlCQkJCQkJ CS8qIG5vdCBMT0NLX0RFQlVHICovCiAKQEAgLTQyNyw2ICs0MzIsNyBAQCBzdGF0aWMgdm9pZCBC ZWdpblN0cm9uZ0xvY2tBY3F1aXJlKExPQ0FMTE9DSyAqbG9jYWxsb2NrLCB1aW50MzIgZmFzdGhh c2hjb2RlKTsKIHN0YXRpYyB2b2lkIEZpbmlzaFN0cm9uZ0xvY2tBY3F1aXJlKHZvaWQpOwogc3Rh dGljIFByb2NXYWl0U3RhdHVzIFdhaXRPbkxvY2soTE9DQUxMT0NLICpsb2NhbGxvY2ssIFJlc291 cmNlT3duZXIgb3duZXIpOwogc3RhdGljIHZvaWQgd2FpdG9ubG9ja19lcnJvcl9jYWxsYmFjayh2 b2lkICphcmcpOworcGdfbm9yZXR1cm4gc3RhdGljIHZvaWQgUmVwb3J0UHJlZW1wdERlYWRsb2Nr KExPQ0FMTE9DSyAqbG9jYWxsb2NrKTsKIHN0YXRpYyB2b2lkIFJlbGVhc2VMb2NrSWZIZWxkKExP Q0FMTE9DSyAqbG9jYWxsb2NrLCBib29sIHNlc3Npb25Mb2NrKTsKIHN0YXRpYyB2b2lkIExvY2tS ZWFzc2lnbk93bmVyKExPQ0FMTE9DSyAqbG9jYWxsb2NrLCBSZXNvdXJjZU93bmVyIHBhcmVudCk7 CiBzdGF0aWMgYm9vbCBVbkdyYW50TG9jayhMT0NLICpsb2NrLCBMT0NLTU9ERSBsb2NrbW9kZSwK QEAgLTgwOCwxMyArODE0LDE3IEBAIExvY2tBY3F1aXJlKGNvbnN0IExPQ0tUQUcgKmxvY2t0YWcs CiAJCQlib29sIHNlc3Npb25Mb2NrLAogCQkJYm9vbCBkb250V2FpdCkKIHsKLQlyZXR1cm4gTG9j a0FjcXVpcmVFeHRlbmRlZChsb2NrdGFnLCBsb2NrbW9kZSwgc2Vzc2lvbkxvY2ssIGRvbnRXYWl0 LAotCQkJCQkJCSAgIHRydWUsIE5VTEwsIGZhbHNlKTsKKwlyZXR1cm4gTG9ja0FjcXVpcmVFeHRl bmRlZChsb2NrdGFnLCBsb2NrbW9kZSwgTm9Mb2NrLCBzZXNzaW9uTG9jaywKKwkJCQkJCQkgICBk b250V2FpdCwgdHJ1ZSwgTlVMTCwgZmFsc2UpOwogfQogCiAvKgogICogTG9ja0FjcXVpcmVFeHRl bmRlZCAtIGFsbG93cyB1cyB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgb3B0aW9ucwogICoKKyAqIHVw Z3JhZGVJbnRlbnQgaXMgTm9Mb2NrIG9yIGEgc3Ryb25nZXIgbW9kZSB0aGUgY2FsbGVyIHdpbGwg dHJ5IHRvIGFjcXVpcmUKKyAqIGxhdGVyOyB3aGVuIHNldCwgaXQgaXMgaW5zdGFsbGVkIG9uIHRo ZSBQUk9DTE9DSyBhdG9taWNhbGx5IHdpdGggdGhlIGdyYW50LgorICogU2VlIFJFQURNRSAiUHJv dGVjdGVkIExvY2sgVXBncmFkZXMiLgorICoKICAqIHJlcG9ydE1lbW9yeUVycm9yIHNwZWNpZmll cyB3aGV0aGVyIGEgbG9jayByZXF1ZXN0IHRoYXQgZmlsbHMgdGhlIGxvY2sKICAqIHRhYmxlIHNo b3VsZCBnZW5lcmF0ZSBhbiBFUlJPUiBvciBub3QuICBQYXNzaW5nICJmYWxzZSIgYWxsb3dzIHRo ZSBjYWxsZXIKICAqIHRvIGF0dGVtcHQgdG8gcmVjb3ZlciBmcm9tIGxvY2stdGFibGUtZnVsbCBz aXR1YXRpb25zLCBwZXJoYXBzIGJ5IGZvcmNpYmx5CkBAIC04MzIsNiArODQyLDcgQEAgTG9ja0Fj cXVpcmUoY29uc3QgTE9DS1RBRyAqbG9ja3RhZywKIExvY2tBY3F1aXJlUmVzdWx0CiBMb2NrQWNx dWlyZUV4dGVuZGVkKGNvbnN0IExPQ0tUQUcgKmxvY2t0YWcsCiAJCQkJCUxPQ0tNT0RFIGxvY2tt b2RlLAorCQkJCQlMT0NLTU9ERSB1cGdyYWRlSW50ZW50LAogCQkJCQlib29sIHNlc3Npb25Mb2Nr LAogCQkJCQlib29sIGRvbnRXYWl0LAogCQkJCQlib29sIHJlcG9ydE1lbW9yeUVycm9yLApAQCAt ODUxLDYgKzg2Miw3IEBAIExvY2tBY3F1aXJlRXh0ZW5kZWQoY29uc3QgTE9DS1RBRyAqbG9ja3Rh ZywKIAlib29sCQlmb3VuZF9jb25mbGljdDsKIAlQcm9jV2FpdFN0YXR1cyB3YWl0UmVzdWx0Owog CWJvb2wJCWxvZ19sb2NrID0gZmFsc2U7CisJYm9vbAkJdXBncmFkZUludGVudFNldCA9IGZhbHNl OwogCiAJaWYgKGxvY2ttZXRob2RpZCA8PSAwIHx8IGxvY2ttZXRob2RpZCA+PSBsZW5ndGhvZihM b2NrTWV0aG9kcykpCiAJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbG9jayBtZXRob2Q6ICVk IiwgbG9ja21ldGhvZGlkKTsKQEAgLTg1OCw2ICs4NzAsMTYgQEAgTG9ja0FjcXVpcmVFeHRlbmRl ZChjb25zdCBMT0NLVEFHICpsb2NrdGFnLAogCWlmIChsb2NrbW9kZSA8PSAwIHx8IGxvY2ttb2Rl ID4gbG9ja01ldGhvZFRhYmxlLT5udW1Mb2NrTW9kZXMpCiAJCWVsb2coRVJST1IsICJ1bnJlY29n bml6ZWQgbG9jayBtb2RlOiAlZCIsIGxvY2ttb2RlKTsKIAorCS8qCisJICogQW5ub3VuY2VtZW50 IHJlcXVpcmVzIGEgc2VsZi1jb25mbGljdGluZyBub24tZmFzdC1wYXRoIGxvY2ttb2RlICh0aGUK KwkgKiBmYXN0IHBhdGggY2FuJ3QgY2Fycnkgb25lKSBhbmQgYSBzdHJpY3RseSBzdHJvbmdlciB0 YXJnZXQuCisJICovCisJQXNzZXJ0KHVwZ3JhZGVJbnRlbnQgPT0gTm9Mb2NrIHx8CisJCSAgICgh RWxpZ2libGVGb3JSZWxhdGlvbkZhc3RQYXRoKGxvY2t0YWcsIGxvY2ttb2RlKSAmJgorCQkJTE9D S01PREVfU0VMRl9DT05GTElDVFMobG9ja01ldGhvZFRhYmxlLT5jb25mbGljdFRhYiwgbG9ja21v ZGUpICYmCisJCQl1cGdyYWRlSW50ZW50ID4gbG9ja21vZGUgJiYKKwkJCXVwZ3JhZGVJbnRlbnQg PD0gbG9ja01ldGhvZFRhYmxlLT5udW1Mb2NrTW9kZXMpKTsKKwogCWlmIChSZWNvdmVyeUluUHJv Z3Jlc3MoKSAmJiAhSW5SZWNvdmVyeSAmJgogCQkobG9ja3RhZy0+bG9ja3RhZ190eXBlID09IExP Q0tUQUdfT0JKRUNUIHx8CiAJCSBsb2NrdGFnLT5sb2NrdGFnX3R5cGUgPT0gTE9DS1RBR19SRUxB VElPTikgJiYKQEAgLTkzMyw5ICs5NTUsMTMgQEAgTG9ja0FjcXVpcmVFeHRlbmRlZChjb25zdCBM T0NLVEFHICpsb2NrdGFnLAogCSAqCiAJICogSWYgbG9ja0NsZWFyZWQgaXMgYWxyZWFkeSBzZXQs IGNhbGxlciBuZWVkIG5vdCB3b3JyeSBhYm91dCBhYnNvcmJpbmcKIAkgKiBzaW52YWwgbWVzc2Fn ZXMgcmVsYXRlZCB0byB0aGUgbG9jaydzIG9iamVjdC4KKwkgKgorCSAqIFVwZ3JhZGUgaW50ZW50 IG11c3QgYmUgaW5zdGFsbGVkIGF0IHRoZSBmaXJzdCBncmFudCwgbm90IG9uIHJlLWVudHJ5Lgog CSAqLwogCWlmIChsb2NhbGxvY2stPm5Mb2NrcyA+IDApCiAJeworCQlBc3NlcnQodXBncmFkZUlu dGVudCA9PSBOb0xvY2spOworCiAJCUdyYW50TG9ja0xvY2FsKGxvY2FsbG9jaywgb3duZXIpOwog CQlpZiAobG9jYWxsb2NrLT5sb2NrQ2xlYXJlZCkKIAkJCXJldHVybiBMT0NLQUNRVUlSRV9BTFJF QURZX0NMRUFSOwpAQCAtMTA5NCw2ICsxMTIwLDE5IEBAIExvY2tBY3F1aXJlRXh0ZW5kZWQoY29u c3QgTE9DS1RBRyAqbG9ja3RhZywKIAlsb2NrID0gcHJvY2xvY2stPnRhZy5teUxvY2s7CiAJbG9j YWxsb2NrLT5sb2NrID0gbG9jazsKIAorCWlmICh1cGdyYWRlSW50ZW50ICE9IE5vTG9jaykKKwl7 CisJCS8qIEl0IGlzIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB1cGdyYWRlSW50ZW50IG1vZGUgKi8K KwkJQXNzZXJ0KHByb2Nsb2NrLT51cGdyYWRlSW50ZW50ID09IE5vTG9jayB8fAorCQkJICAgcHJv Y2xvY2stPnVwZ3JhZGVJbnRlbnQgPT0gdXBncmFkZUludGVudCk7CisJCXVwZ3JhZGVJbnRlbnRT ZXQgPSAocHJvY2xvY2stPnVwZ3JhZGVJbnRlbnQgPT0gTm9Mb2NrKTsKKwkJaWYgKHVwZ3JhZGVJ bnRlbnRTZXQpCisJCXsKKwkJCXByb2Nsb2NrLT51cGdyYWRlSW50ZW50ID0gdXBncmFkZUludGVu dDsKKwkJCWxvY2stPm5VcGdyYWRlSW50ZW50Kys7CisJCX0KKwl9CisKIAkvKgogCSAqIElmIGxv Y2sgcmVxdWVzdGVkIGNvbmZsaWN0cyB3aXRoIGxvY2tzIHJlcXVlc3RlZCBieSB3YWl0ZXJzLCBt dXN0IGpvaW4KIAkgKiB3YWl0IHF1ZXVlLiAgT3RoZXJ3aXNlLCBjaGVjayBmb3IgY29uZmxpY3Qg d2l0aCBhbHJlYWR5LWhlbGQgbG9ja3MuCkBAIC0xMTIxLDE4ICsxMTYwLDI2IEBAIExvY2tBY3F1 aXJlRXh0ZW5kZWQoY29uc3QgTE9DS1RBRyAqbG9ja3RhZywKIAkJd2FpdFJlc3VsdCA9IEpvaW5X YWl0UXVldWUobG9jYWxsb2NrLCBsb2NrTWV0aG9kVGFibGUsIGRvbnRXYWl0KTsKIAl9CiAKLQlp ZiAod2FpdFJlc3VsdCA9PSBQUk9DX1dBSVRfU1RBVFVTX0VSUk9SKQorCWlmICh3YWl0UmVzdWx0 ID09IFBST0NfV0FJVF9TVEFUVVNfRVJST1IgfHwKKwkJd2FpdFJlc3VsdCA9PSBQUk9DX1dBSVRf U1RBVFVTX1BSRUVNUFRFRCkKIAl7CiAJCS8qCi0JCSAqIFdlJ3JlIG5vdCBnZXR0aW5nIHRoZSBs b2NrIGJlY2F1c2UgYSBkZWFkbG9jayB3YXMgZGV0ZWN0ZWQgYWxyZWFkeQotCQkgKiB3aGlsZSB0 cnlpbmcgdG8gam9pbiB0aGUgd2FpdCBxdWV1ZSwgb3IgYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIHRv Ci0JCSAqIHdhaXQgYnV0IHRoZSBjYWxsZXIgcmVxdWVzdGVkIG5vIGJsb2NraW5nLgotCQkgKgor CQkgKiBOb3QgZ2V0dGluZyB0aGUgbG9jazogZGVhZGxvY2sgZGV0ZWN0ZWQgd2hpbGUgam9pbmlu ZyB0aGUgcXVldWUsCisJCSAqIHByZWVtcHRlZCBieSBhbm90aGVyIGJhY2tlbmQncyBwcm90ZWN0 ZWQgdXBncmFkZSwgb3IgZG9udFdhaXQuCiAJCSAqIFVuZG8gdGhlIGNoYW5nZXMgdG8gc2hhcmVk IGVudHJpZXMgYmVmb3JlIHJlbGVhc2luZyB0aGUgcGFydGl0aW9uCiAJCSAqIGxvY2suCiAJCSAq LwogCQlBYm9ydFN0cm9uZ0xvY2tBY3F1aXJlKCk7CiAKKwkJLyogSWYgd2UganVzdCBpbnN0YWxs ZWQgdXBncmFkZSBpbnRlbnQgYnV0IG5ldmVyIGdvdCB0aGUgbG9jaywgdW5kbyBpdC4gKi8KKwkJ aWYgKHVwZ3JhZGVJbnRlbnRTZXQgJiYKKwkJCShwcm9jbG9jay0+aG9sZE1hc2sgJiBMT0NLQklU X09OKGxvY2ttb2RlKSkgPT0gMCkKKwkJeworCQkJcHJvY2xvY2stPnVwZ3JhZGVJbnRlbnQgPSBO b0xvY2s7CisJCQlBc3NlcnQobG9jay0+blVwZ3JhZGVJbnRlbnQgPiAwKTsKKwkJCWxvY2stPm5V cGdyYWRlSW50ZW50LS07CisJCX0KKwogCQlpZiAocHJvY2xvY2stPmhvbGRNYXNrID09IDApCiAJ CXsKIAkJCXVpbnQzMgkJcHJvY2xvY2tfaGFzaGNvZGU7CkBAIC0xMjA4LDYgKzEyNTUsOCBAQCBM b2NrQWNxdWlyZUV4dGVuZGVkKGNvbnN0IExPQ0tUQUcgKmxvY2t0YWcsCiAJCQkJKmxvY2FsbG9j a3AgPSBOVUxMOwogCQkJcmV0dXJuIExPQ0tBQ1FVSVJFX05PVF9BVkFJTDsKIAkJfQorCQllbHNl IGlmICh3YWl0UmVzdWx0ID09IFBST0NfV0FJVF9TVEFUVVNfUFJFRU1QVEVEKQorCQkJUmVwb3J0 UHJlZW1wdERlYWRsb2NrKGxvY2FsbG9jayk7CiAJCWVsc2UKIAkJewogCQkJRGVhZExvY2tSZXBv cnQoKTsKQEAgLTEyMzYsMTQgKzEyODUsMTUgQEAgTG9ja0FjcXVpcmVFeHRlbmRlZChjb25zdCBM T0NLVEFHICpsb2NrdGFnLAogCiAJCWlmICh3YWl0UmVzdWx0ID09IFBST0NfV0FJVF9TVEFUVVNf RVJST1IpCiAJCXsKLQkJCS8qCi0JCQkgKiBXZSBmYWlsZWQgYXMgYSByZXN1bHQgb2YgYSBkZWFk bG9jaywgc2VlIENoZWNrRGVhZExvY2soKS4gUXVpdAotCQkJICogbm93LgotCQkJICovCiAJCQlB c3NlcnQoIWRvbnRXYWl0KTsKIAkJCURlYWRMb2NrUmVwb3J0KCk7CiAJCQkvKiBEZWFkTG9ja1Jl cG9ydCgpIHdpbGwgbm90IHJldHVybiAqLwogCQl9CisJCWVsc2UgaWYgKHdhaXRSZXN1bHQgPT0g UFJPQ19XQUlUX1NUQVRVU19QUkVFTVBURUQpCisJCXsKKwkJCUFzc2VydCghZG9udFdhaXQpOwor CQkJUmVwb3J0UHJlZW1wdERlYWRsb2NrKGxvY2FsbG9jayk7CisJCX0KIAl9CiAJZWxzZQogCQlM V0xvY2tSZWxlYXNlKHBhcnRpdGlvbkxvY2spOwpAQCAtMTMxOSw2ICsxMzY5LDcgQEAgU2V0dXBM b2NrSW5UYWJsZShMb2NrTWV0aG9kIGxvY2tNZXRob2RUYWJsZSwgUEdQUk9DICpwcm9jLAogCQlk Y2xpc3RfaW5pdCgmbG9jay0+d2FpdFByb2NzKTsKIAkJbG9jay0+blJlcXVlc3RlZCA9IDA7CiAJ CWxvY2stPm5HcmFudGVkID0gMDsKKwkJbG9jay0+blVwZ3JhZGVJbnRlbnQgPSAwOwogCQlNZW1T ZXQobG9jay0+cmVxdWVzdGVkLCAwLCBzaXplb2YoaW50KSAqIE1BWF9MT0NLTU9ERVMpOwogCQlN ZW1TZXQobG9jay0+Z3JhbnRlZCwgMCwgc2l6ZW9mKGludCkgKiBNQVhfTE9DS01PREVTKTsKIAkJ TE9DS19QUklOVCgiTG9ja0FjcXVpcmU6IG5ldyIsIGxvY2ssIGxvY2ttb2RlKTsKQEAgLTEzOTAs NiArMTQ0MSw3IEBAIFNldHVwTG9ja0luVGFibGUoTG9ja01ldGhvZCBsb2NrTWV0aG9kVGFibGUs IFBHUFJPQyAqcHJvYywKIAkJCXByb2MtPmxvY2tHcm91cExlYWRlciA6IHByb2M7CiAJCXByb2Ns b2NrLT5ob2xkTWFzayA9IDA7CiAJCXByb2Nsb2NrLT5yZWxlYXNlTWFzayA9IDA7CisJCXByb2Ns b2NrLT51cGdyYWRlSW50ZW50ID0gTm9Mb2NrOwogCQkvKiBBZGQgcHJvY2xvY2sgdG8gYXBwcm9w cmlhdGUgbGlzdHMgKi8KIAkJZGxpc3RfcHVzaF90YWlsKCZsb2NrLT5wcm9jTG9ja3MsICZwcm9j bG9jay0+bG9ja0xpbmspOwogCQlkbGlzdF9wdXNoX3RhaWwoJnByb2MtPm15UHJvY0xvY2tzW3Bh cnRpdGlvbl0sICZwcm9jbG9jay0+cHJvY0xpbmspOwpAQCAtMTQxMyw5ICsxNDY1LDEzIEBAIFNl dHVwTG9ja0luVGFibGUoTG9ja01ldGhvZCBsb2NrTWV0aG9kVGFibGUsIFBHUFJPQyAqcHJvYywK IAkJICogYWJvdXQgdXNlci1sZXZlbCBjb2RpbmcgcHJhY3RpY2VzIHRoYXQgYXJlIGluIGZhY3Qg c2FmZSBpbiBjb250ZXh0LgogCQkgKiBJdCBjYW4gYmUgZW5hYmxlZCB0byBoZWxwIGZpbmQgc3lz dGVtLWxldmVsIHByb2JsZW1zLgogCQkgKgorCQkgKiBTa2lwIGZvciBhbiBhbm5vdW5jZWQgdXBn cmFkZTogdGhlIGRldGVjdG9yIGhhbmRsZXMgdGhvc2UgY3ljbGVzCisJCSAqIGJ5IGNhbmNlbGlu ZyBhIGJsb2NrZXIuCisJCSAqCiAJCSAqIFhYWCBEb2luZyBudW1lcmljIGNvbXBhcmlzb24gb24g dGhlIGxvY2ttb2RlcyBpcyBhIGhhY2s7IGl0J2QgYmUKIAkJICogYmV0dGVyIHRvIHVzZSBhIHRh YmxlLiAgRm9yIG5vdywgdGhvdWdoLCB0aGlzIHdvcmtzLgogCQkgKi8KKwkJaWYgKHByb2Nsb2Nr LT51cGdyYWRlSW50ZW50ICE9IGxvY2ttb2RlKQogCQl7CiAJCQlpbnQJCQlpOwogCkBAIC0xNjcx LDYgKzE3MjcsMTkgQEAgR3JhbnRMb2NrKExPQ0sgKmxvY2ssIFBST0NMT0NLICpwcm9jbG9jaywg TE9DS01PREUgbG9ja21vZGUpCiAJaWYgKGxvY2stPmdyYW50ZWRbbG9ja21vZGVdID09IGxvY2st PnJlcXVlc3RlZFtsb2NrbW9kZV0pCiAJCWxvY2stPndhaXRNYXNrICY9IExPQ0tCSVRfT0ZGKGxv Y2ttb2RlKTsKIAlwcm9jbG9jay0+aG9sZE1hc2sgfD0gTE9DS0JJVF9PTihsb2NrbW9kZSk7CisK KwkvKiBUaGUgYW5ub3VuY2VkIHRhcmdldCB3YXMganVzdCBncmFudGVkOyBjbGVhciB0aGUgYW5u b3VuY2VtZW50LiAqLworCWlmIChwcm9jbG9jay0+dXBncmFkZUludGVudCAhPSBOb0xvY2spCisJ eworCQlBc3NlcnQocHJvY2xvY2stPnVwZ3JhZGVJbnRlbnQgPj0gbG9ja21vZGUpOworCQlpZiAo cHJvY2xvY2stPnVwZ3JhZGVJbnRlbnQgPT0gbG9ja21vZGUpCisJCXsKKwkJCXByb2Nsb2NrLT51 cGdyYWRlSW50ZW50ID0gTm9Mb2NrOworCQkJQXNzZXJ0KGxvY2stPm5VcGdyYWRlSW50ZW50ID4g MCk7CisJCQlsb2NrLT5uVXBncmFkZUludGVudC0tOworCQl9CisJfQorCiAJTE9DS19QUklOVCgi R3JhbnRMb2NrIiwgbG9jaywgbG9ja21vZGUpOwogCUFzc2VydCgobG9jay0+bkdyYW50ZWQgPiAw KSAmJiAobG9jay0+Z3JhbnRlZFtsb2NrbW9kZV0gPiAwKSk7CiAJQXNzZXJ0KGxvY2stPm5HcmFu dGVkIDw9IGxvY2stPm5SZXF1ZXN0ZWQpOwpAQCAtMTcyNyw2ICsxNzk2LDE2IEBAIFVuR3JhbnRM b2NrKExPQ0sgKmxvY2ssIExPQ0tNT0RFIGxvY2ttb2RlLAogCSAqIE5vdyBmaXggdGhlIHBlci1w cm9jbG9jayBzdGF0ZS4KIAkgKi8KIAlwcm9jbG9jay0+aG9sZE1hc2sgJj0gTE9DS0JJVF9PRkYo bG9ja21vZGUpOworCisJLyogUmVsZWFzaW5nIHRoZSBsYXN0IGhlbGQgbW9kZSBhbHNvIHJldGly ZXMgYW55IHBlbmRpbmcgYW5ub3VuY2VtZW50LiAqLworCWlmIChwcm9jbG9jay0+dXBncmFkZUlu dGVudCAhPSBOb0xvY2sgJiYKKwkJcHJvY2xvY2stPmhvbGRNYXNrID09IDApCisJeworCQlwcm9j bG9jay0+dXBncmFkZUludGVudCA9IE5vTG9jazsKKwkJQXNzZXJ0KGxvY2stPm5VcGdyYWRlSW50 ZW50ID4gMCk7CisJCWxvY2stPm5VcGdyYWRlSW50ZW50LS07CisJfQorCiAJUFJPQ0xPQ0tfUFJJ TlQoIlVuR3JhbnRMb2NrOiB1cGRhdGVkIiwgcHJvY2xvY2spOwogCiAJcmV0dXJuIHdha2V1cE5l ZWRlZDsKQEAgLTE4ODMsNiArMTk2MiwyOSBAQCBBYm9ydFN0cm9uZ0xvY2tBY3F1aXJlKHZvaWQp CiAJU3BpbkxvY2tSZWxlYXNlKCZGYXN0UGF0aFN0cm9uZ1JlbGF0aW9uTG9ja3MtPm11dGV4KTsK IH0KIAorLyoKKyAqIGVyZXBvcnQgYSBkZWFkbG9jayBmb3IgYSBwcm90ZWN0ZWQtdXBncmFkZSBw cmVlbXB0aW9uLiAgVXNlIGxvZ19sb2NrX3dhaXRzCisgKiBmb3IgdGhlIGN5Y2xlIGRldGFpbHMg ZnJvbSB0aGUgcHJvdGVjdGVkIGJhY2tlbmQncyBzaWRlLgorICovCitwZ19ub3JldHVybiBzdGF0 aWMgdm9pZAorUmVwb3J0UHJlZW1wdERlYWRsb2NrKExPQ0FMTE9DSyAqbG9jYWxsb2NrKQorewor CVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwljb25zdCBjaGFyICptb2RlbmFtZTsKKworCWluaXRTdHJp bmdJbmZvKCZidWYpOworCURlc2NyaWJlTG9ja1RhZygmYnVmLCAmbG9jYWxsb2NrLT50YWcubG9j ayk7CisJbW9kZW5hbWUgPSBHZXRMb2NrbW9kZU5hbWUobG9jYWxsb2NrLT50YWcubG9jay5sb2Nr dGFnX2xvY2ttZXRob2RpZCwKKwkJCQkJCQkgICBsb2NhbGxvY2stPnRhZy5tb2RlKTsKKworCXBn c3RhdF9yZXBvcnRfZGVhZGxvY2soKTsKKwllcmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJS Q09ERV9UX1JfREVBRExPQ0tfREVURUNURUQpLAorCQkJIGVycm1zZygiZGVhZGxvY2sgZGV0ZWN0 ZWQiKSwKKwkJCSBlcnJkZXRhaWwoIlByb2Nlc3MgJWQgY291bGQgbm90IGFjcXVpcmUgJXMgb24g JXMgYmVjYXVzZSBhbm90aGVyIGJhY2tlbmQgaG9sZHMgYSBjb25mbGljdGluZyBsb2NrIGFuZCBo YXMgYW5ub3VuY2VkIGEgZnV0dXJlIHVwZ3JhZGUgdGhhdCB3b3VsZCBmb3JtIGEgZGVhZGxvY2sg Y3ljbGUuIiwKKwkJCQkJICAgTXlQcm9jUGlkLCBtb2RlbmFtZSwgYnVmLmRhdGEpKSk7Cit9CisK IC8qCiAgKiBHcmFudEF3YWl0ZWRMb2NrIC0tIGNhbGwgR3JhbnRMb2NrTG9jYWwgZm9yIHRoZSBs b2NrIHdlIGFyZSBkb2luZwogICoJCVdhaXRPbkxvY2sgb24uCkBAIC0yMDQyLDggKzIxNDQsMTAg QEAgd2FpdG9ubG9ja19lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpCiAKIC8qCiAgKiBSZW1vdmUg YSBwcm9jIGZyb20gdGhlIHdhaXQtcXVldWUgaXQgaXMgb24gKGNhbGxlciBtdXN0IGtub3cgaXQg aXMgb24gb25lKS4KLSAqIFRoaXMgaXMgb25seSB1c2VkIHdoZW4gdGhlIHByb2MgaGFzIGZhaWxl ZCB0byBnZXQgdGhlIGxvY2ssIHNvIHdlIHNldCBpdHMKLSAqIHdhaXRTdGF0dXMgdG8gUFJPQ19X QUlUX1NUQVRVU19FUlJPUi4KKyAqIFVzZWQgd2hlbiB0aGUgcHJvYyBoYXMgZmFpbGVkIHRvIGdl dCB0aGUgbG9jazsgdGhlIGNhbGxlciBwYXNzZXMgdGhlCisgKiB3YWl0U3RhdHVzIHRvIHB1Ymxp c2ggKFBST0NfV0FJVF9TVEFUVVNfRVJST1IgZm9yIG9yZGluYXJ5IGZhaWx1cmUgb3IKKyAqIFBS T0NfV0FJVF9TVEFUVVNfUFJFRU1QVEVEIHdoZW4gdGhlIHdhaXQgd2FzIGNhbmNlbGVkIHRvIGJy ZWFrIGEgY3ljbGUKKyAqIHdpdGggYSBwcm90ZWN0ZWQgdXBncmFkZSkuCiAgKgogICogQXBwcm9w cmlhdGUgcGFydGl0aW9uIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IGNhbGxlci4gIEFsc28sIGNhbGxl ciBpcwogICogcmVzcG9uc2libGUgZm9yIHNpZ25hbGluZyB0aGUgcHJvYyBpZiBuZWVkZWQuCkBA IC0yMDUxLDcgKzIxNTUsNyBAQCB3YWl0b25sb2NrX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZykK ICAqIE5COiB0aGlzIGRvZXMgbm90IGNsZWFuIHVwIGFueSBsb2NhbGxvY2sgb2JqZWN0IHRoYXQg bWF5IGV4aXN0IGZvciB0aGUgbG9jay4KICAqLwogdm9pZAotUmVtb3ZlRnJvbVdhaXRRdWV1ZShQ R1BST0MgKnByb2MsIHVpbnQzMiBoYXNoY29kZSkKK1JlbW92ZUZyb21XYWl0UXVldWUoUEdQUk9D ICpwcm9jLCB1aW50MzIgaGFzaGNvZGUsIFByb2NXYWl0U3RhdHVzIG5ld1N0YXR1cykKIHsKIAlM T0NLCSAgICp3YWl0TG9jayA9IHByb2MtPndhaXRMb2NrOwogCVBST0NMT0NLICAgKnByb2Nsb2Nr ID0gcHJvYy0+d2FpdFByb2NMb2NrOwpAQCAtMjA2MCw2ICsyMTY0LDggQEAgUmVtb3ZlRnJvbVdh aXRRdWV1ZShQR1BST0MgKnByb2MsIHVpbnQzMiBoYXNoY29kZSkKIAogCS8qIE1ha2Ugc3VyZSBw cm9jIGlzIHdhaXRpbmcgKi8KIAlBc3NlcnQocHJvYy0+d2FpdFN0YXR1cyA9PSBQUk9DX1dBSVRf U1RBVFVTX1dBSVRJTkcpOworCUFzc2VydChuZXdTdGF0dXMgPT0gUFJPQ19XQUlUX1NUQVRVU19F UlJPUiB8fAorCQkgICBuZXdTdGF0dXMgPT0gUFJPQ19XQUlUX1NUQVRVU19QUkVFTVBURUQpOwog CUFzc2VydCghZGxpc3Rfbm9kZV9pc19kZXRhY2hlZCgmcHJvYy0+d2FpdExpbmspKTsKIAlBc3Nl cnQod2FpdExvY2spOwogCUFzc2VydCghZGNsaXN0X2lzX2VtcHR5KCZ3YWl0TG9jay0+d2FpdFBy b2NzKSk7CkBAIC0yMDc4LDEwICsyMTg0LDE4IEBAIFJlbW92ZUZyb21XYWl0UXVldWUoUEdQUk9D ICpwcm9jLCB1aW50MzIgaGFzaGNvZGUpCiAJaWYgKHdhaXRMb2NrLT5ncmFudGVkW2xvY2ttb2Rl XSA9PSB3YWl0TG9jay0+cmVxdWVzdGVkW2xvY2ttb2RlXSkKIAkJd2FpdExvY2stPndhaXRNYXNr ICY9IExPQ0tCSVRfT0ZGKGxvY2ttb2RlKTsKIAorCS8qIFdhaXQgY2FuY2VsZWQgPT4gdGhlIGFu bm91bmNlbWVudCAoaWYgYW55KSBubyBsb25nZXIgYXBwbGllcy4gKi8KKwlpZiAocHJvY2xvY2st PnVwZ3JhZGVJbnRlbnQgIT0gTm9Mb2NrKQorCXsKKwkJcHJvY2xvY2stPnVwZ3JhZGVJbnRlbnQg PSBOb0xvY2s7CisJCUFzc2VydCh3YWl0TG9jay0+blVwZ3JhZGVJbnRlbnQgPiAwKTsKKwkJd2Fp dExvY2stPm5VcGdyYWRlSW50ZW50LS07CisJfQorCiAJLyogQ2xlYW4gdXAgdGhlIHByb2MncyBv d24gc3RhdGUsIGFuZCBwYXNzIGl0IHRoZSBvay9mYWlsIHNpZ25hbCAqLwogCXByb2MtPndhaXRM b2NrID0gTlVMTDsKIAlwcm9jLT53YWl0UHJvY0xvY2sgPSBOVUxMOwotCXByb2MtPndhaXRTdGF0 dXMgPSBQUk9DX1dBSVRfU1RBVFVTX0VSUk9SOworCXByb2MtPndhaXRTdGF0dXMgPSBuZXdTdGF0 dXM7CiAKIAkvKgogCSAqIERlbGV0ZSB0aGUgcHJvY2xvY2sgaW1tZWRpYXRlbHkgaWYgaXQgcmVw cmVzZW50cyBubyBhbHJlYWR5LWhlbGQgbG9ja3MuCkBAIC0zNjk3LDYgKzM4MTEsOCBAQCBQb3N0 UHJlcGFyZV9Mb2NrcyhGdWxsVHJhbnNhY3Rpb25JZCBmeGlkKQogCQkJQXNzZXJ0KGxvY2stPm5H cmFudGVkID49IDApOwogCQkJQXNzZXJ0KGxvY2stPm5HcmFudGVkIDw9IGxvY2stPm5SZXF1ZXN0 ZWQpOwogCQkJQXNzZXJ0KChwcm9jbG9jay0+aG9sZE1hc2sgJiB+bG9jay0+Z3JhbnRNYXNrKSA9 PSAwKTsKKwkJCS8qIHVwZ3JhZGVJbnRlbnQgaXMgbm90IHN1cHBvcnRlZCBmb3IgUFJFUEFSRSBU UkFOU0FDVElPTi4gKi8KKwkJCUFzc2VydChwcm9jbG9jay0+dXBncmFkZUludGVudCA9PSBOb0xv Y2spOwogCiAJCQkvKiBJZ25vcmUgaXQgaWYgbm90aGluZyB0byByZWxlYXNlIChtdXN0IGJlIGEg c2Vzc2lvbiBsb2NrKSAqLwogCQkJaWYgKHByb2Nsb2NrLT5yZWxlYXNlTWFzayA9PSAwKQpAQCAt NDM5Nyw2ICs0NTEzLDcgQEAgbG9ja190d29waGFzZV9yZWNvdmVyKEZ1bGxUcmFuc2FjdGlvbklk IGZ4aWQsIHVpbnQxNiBpbmZvLAogCQlkY2xpc3RfaW5pdCgmbG9jay0+d2FpdFByb2NzKTsKIAkJ bG9jay0+blJlcXVlc3RlZCA9IDA7CiAJCWxvY2stPm5HcmFudGVkID0gMDsKKwkJbG9jay0+blVw Z3JhZGVJbnRlbnQgPSAwOwogCQlNZW1TZXQobG9jay0+cmVxdWVzdGVkLCAwLCBzaXplb2YoaW50 KSAqIE1BWF9MT0NLTU9ERVMpOwogCQlNZW1TZXQobG9jay0+Z3JhbnRlZCwgMCwgc2l6ZW9mKGlu dCkgKiBNQVhfTE9DS01PREVTKTsKIAkJTE9DS19QUklOVCgibG9ja190d29waGFzZV9yZWNvdmVy OiBuZXciLCBsb2NrLCBsb2NrbW9kZSk7CkBAIC00NDYwLDYgKzQ1NzcsNyBAQCBsb2NrX3R3b3Bo YXNlX3JlY292ZXIoRnVsbFRyYW5zYWN0aW9uSWQgZnhpZCwgdWludDE2IGluZm8sCiAJCXByb2Ns b2NrLT5ncm91cExlYWRlciA9IHByb2M7CiAJCXByb2Nsb2NrLT5ob2xkTWFzayA9IDA7CiAJCXBy b2Nsb2NrLT5yZWxlYXNlTWFzayA9IDA7CisJCXByb2Nsb2NrLT51cGdyYWRlSW50ZW50ID0gTm9M b2NrOwogCQkvKiBBZGQgcHJvY2xvY2sgdG8gYXBwcm9wcmlhdGUgbGlzdHMgKi8KIAkJZGxpc3Rf cHVzaF90YWlsKCZsb2NrLT5wcm9jTG9ja3MsICZwcm9jbG9jay0+bG9ja0xpbmspOwogCQlkbGlz dF9wdXNoX3RhaWwoJnByb2MtPm15UHJvY0xvY2tzW3BhcnRpdGlvbl0sCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L3Byb2MuYwppbmRleCAxYWMyNTA2OGQ2Mi4uMmNlNzA3M2Q5ZDIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L3Byb2MuYwpAQCAtODU0LDcgKzg1NCw4IEBAIExvY2tFcnJvckNsZWFudXAodm9pZCkKIAlpZiAo IWRsaXN0X25vZGVfaXNfZGV0YWNoZWQoJk15UHJvYy0+d2FpdExpbmspKQogCXsKIAkJLyogV2Ug Y291bGQgbm90IGhhdmUgYmVlbiBncmFudGVkIHRoZSBsb2NrIHlldCAqLwotCQlSZW1vdmVGcm9t V2FpdFF1ZXVlKE15UHJvYywgbG9ja0F3YWl0ZWQtPmhhc2hjb2RlKTsKKwkJUmVtb3ZlRnJvbVdh aXRRdWV1ZShNeVByb2MsIGxvY2tBd2FpdGVkLT5oYXNoY29kZSwKKwkJCQkJCQlQUk9DX1dBSVRf U1RBVFVTX0VSUk9SKTsKIAl9CiAJZWxzZQogCXsKQEAgLTExMzUsMTAgKzExMzYsMTEgQEAgQXV4 aWxpYXJ5UGlkR2V0UHJvYyhpbnQgcGlkKQogICoKICAqIFJlc3VsdCBpcyBvbmUgb2YgdGhlIGZv bGxvd2luZzoKICAqCi0gKiAgUFJPQ19XQUlUX1NUQVRVU19PSyAgICAgICAtIGxvY2sgd2FzIGlt bWVkaWF0ZWx5IGdyYW50ZWQKLSAqICBQUk9DX1dBSVRfU1RBVFVTX1dBSVRJTkcgIC0gam9pbmVk IHRoZSB3YWl0IHF1ZXVlOyBjYWxsIFByb2NTbGVlcCgpCi0gKiAgUFJPQ19XQUlUX1NUQVRVU19F UlJPUiAgICAtIGltbWVkaWF0ZSBkZWFkbG9jayB3YXMgZGV0ZWN0ZWQsIG9yIHdvdWxkCi0gKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gd2FpdCBhbmQgZG9udFdhaXQgPT0g dHJ1ZQorICogIFBST0NfV0FJVF9TVEFUVVNfT0sgICAgICAgICAtIGxvY2sgaW1tZWRpYXRlbHkg Z3JhbnRlZAorICogIFBST0NfV0FJVF9TVEFUVVNfV0FJVElORyAgICAtIGpvaW5lZCB0aGUgd2Fp dCBxdWV1ZTsgY2FsbCBQcm9jU2xlZXAoKQorICogIFBST0NfV0FJVF9TVEFUVVNfRVJST1IgICAg ICAtIGltbWVkaWF0ZSBkZWFkbG9jayBvciBkb250V2FpdCBmYWlsdXJlCisgKiAgUFJPQ19XQUlU X1NUQVRVU19QUkVFTVBURUQgIC0gY3ljbGUgcHJvdmVuIGFnYWluc3QgYW4gYW5ub3VuY2VkIHVw Z3JhZGU7CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVyIG11c3QgcmFp c2UgYSBkZWFkbG9jayBlcnJvcgogICoKICAqIE5PVEVTOiBUaGUgcHJvY2VzcyBxdWV1ZSBpcyBu b3cgYSBwcmlvcml0eSBxdWV1ZSBmb3IgbG9ja2luZy4KICAqLwpAQCAtMTIzOSw5ICsxMjQxLDE1 IEBAIEpvaW5XYWl0UXVldWUoTE9DQUxMT0NLICpsb2NhbGxvY2ssIExvY2tNZXRob2QgbG9ja01l dGhvZFRhYmxlLCBib29sIGRvbnRXYWl0KQogCQkJCQkgKiBjYW4ndCBkbyB0aGF0IHVudGlsIHdl IGFyZSAqb24qIHRoZSB3YWl0IHF1ZXVlLiBTbywgc2V0CiAJCQkJCSAqIGEgZmxhZyB0byBjaGVj ayBiZWxvdywgYW5kIGJyZWFrIG91dCBvZiBsb29wLiAgQWxzbywKIAkJCQkJICogcmVjb3JkIGRl YWRsb2NrIGluZm8gZm9yIGxhdGVyIG1lc3NhZ2UuCisJCQkJCSAqCisJCQkJCSAqIElmIHRoaXMg d2FpdCBpcyBvdXIgYW5ub3VuY2VkIHVwZ3JhZGUsIHNraXAgdGhlIGVhcmx5CisJCQkJCSAqIGV4 aXQgc28gdGhlIGZ1bGwgZGV0ZWN0b3IgY2FuIHByZWVtcHQgYSBibG9ja2VyLgogCQkJCQkgKi8K LQkJCQkJUmVtZW1iZXJTaW1wbGVEZWFkTG9jayhNeVByb2MsIGxvY2ttb2RlLCBsb2NrLCBwcm9j KTsKLQkJCQkJZWFybHlfZGVhZGxvY2sgPSB0cnVlOworCQkJCQlpZiAocHJvY2xvY2stPnVwZ3Jh ZGVJbnRlbnQgIT0gbG9ja21vZGUpCisJCQkJCXsKKwkJCQkJCVJlbWVtYmVyU2ltcGxlRGVhZExv Y2soTXlQcm9jLCBsb2NrbW9kZSwgbG9jaywgcHJvYyk7CisJCQkJCQllYXJseV9kZWFkbG9jayA9 IHRydWU7CisJCQkJCX0KIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCS8qIEkgbXVzdCBnbyBiZWZv cmUgdGhpcyB3YWl0ZXIuICBDaGVjayBzcGVjaWFsIGNhc2UuICovCkBAIC0xMjcwLDYgKzEyNzgs NzUgQEAgSm9pbldhaXRRdWV1ZShMT0NBTExPQ0sgKmxvY2FsbG9jaywgTG9ja01ldGhvZCBsb2Nr TWV0aG9kVGFibGUsIGJvb2wgZG9udFdhaXQpCiAJaWYgKGVhcmx5X2RlYWRsb2NrKQogCQlyZXR1 cm4gUFJPQ19XQUlUX1NUQVRVU19FUlJPUjsKIAorCS8qCisJICogRmFzdC1mYWlsOiBpZiBzb21l IGhvbGRlcidzIGFubm91bmNlZCB1cGdyYWRlIGNvbmZsaWN0cyB3aXRoIGEgbW9kZSB3ZQorCSAq IGFscmVhZHkgaG9sZCwgYW5kIGl0cyBjdXJyZW50IGhvbGRNYXNrIGNvbmZsaWN0cyB3aXRoIG91 ciByZXF1ZXN0LCBhCisJICogZnV0dXJlIGN5Y2xlIGlzIGluZXZpdGFibGUuICBEb24ndCB3YWl0 IGRlYWRsb2NrX3RpbWVvdXQgZm9yIHRoZSBzYW1lCisJICogY29uY2x1c2lvbi4gIFNraXBwZWQg d2hlbiB3ZSBhcmUgdGhlIGFubm91bmNlZCB1cGdyYWRlciwgd2hlbiB3ZSBob2xkCisJICogbm90 aGluZyBoZXJlLCBvciB3aGVuIG5vIGhvbGRlciBoYXMgYW55IGFubm91bmNlbWVudC4KKwkgKgor CSAqIFRoaXMgaXMgb25seSBhIGZhc3QtZmFpbCBjaGVjayBmb3IgY3ljbGVzIGFscmVhZHkgdmlz aWJsZSBpbiB0aGUgbWFpbgorCSAqIGxvY2sgdGFibGUuICBGYXN0LXBhdGggbG9ja3MgY2FuIGhp ZGUgZWRnZXMuICBGb3IgZXhhbXBsZSwgd2hpbGUgd2FpdGluZworCSAqIGZvciBTaGFyZVVwZGF0 ZUV4Y2x1c2l2ZUxvY2ssIHRoaXMgYmFja2VuZCBtYXkgc3RpbGwgaG9sZCB3ZWFrZXIgZmFzdC1w YXRoCisJICogbG9ja3Mgb24gdGhlIHNhbWUgcmVsYXRpb24sIHNpbmNlIFNoYXJlVXBkYXRlRXhj bHVzaXZlTG9jayBkb2VzIG5vdCBpdHNlbGYKKwkgKiBmb3JjZSBmYXN0LXBhdGggdHJhbnNmZXIu ICBTdWNoIGFuIGVkZ2UgYmVjb21lcyB2aXNpYmxlIG9ubHkgbGF0ZXIsIGUuZy4KKwkgKiB3aGVu IGFub3RoZXIgYmFja2VuZCdzIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sgdXBncmFkZSB0cmFuc2ZlcnMg ZmFzdC1wYXRoCisJICogbG9ja3MuICBUaGUgZnVsbCBkZWFkbG9jayBkZXRlY3RvciBoYW5kbGVz IHRoYXQgY2FzZS4KKwkgKgorCSAqIFdlIGNvdWxkIGNoZWFwbHkgaW5jbHVkZSBtb2RlcyB0aGlz IGJhY2tlbmQgaG9sZHMgbG9jYWxseSwgdmlhCisJICogTG9ja01ldGhvZExvY2FsSGFzaC4gIFRo YXQgY2F0Y2hlcyB0aGUgZGlyZWN0IGNhc2Ugd2hlcmUgdGhpcyBiYWNrZW5kIGhvbGRzCisJICog YSB3ZWFrIGZhc3QtcGF0aCBsb2NrIGFuZCB3YWl0cyBiZWhpbmQgYW4gYW5ub3VuY2VkIHN0cm9u Z2VyIHVwZ3JhZGUsIGJ1dAorCSAqIGl0IGNhbm5vdCBzZWUgaGlkZGVuIGZhc3QtcGF0aCBlZGdl cyBvd25lZCBieSB0aGlyZCBiYWNrZW5kcyBpbiBsb25nZXIKKwkgKiBjeWNsZXMuCisJICoKKwkg KiBNYWtpbmcgdXBncmFkZSBpbnRlbnQgdmlzaWJsZSB0byB0aGUgZmFzdC1wYXRoIG1lY2hhbmlz bSB3b3VsZCBjYXRjaCBtb3JlCisJICogY2FzZXMsIGUuZy4gYnkgdHJlYXRpbmcgdXBncmFkZUlu dGVudCBhcyBjb25mbGljdGluZyBmb3IKKwkgKiBDb25mbGljdHNXaXRoUmVsYXRpb25GYXN0UGF0 aCgpIGFuZCBrZWVwaW5nIEZhc3RQYXRoU3Ryb25nUmVsYXRpb25Mb2NrcworCSAqIGJ1bXBlZCB1 bnRpbCB0aGUgdXBncmFkZSBpcyBjb25zdW1lZC4gIEhvd2V2ZXIsIHRoYXQgd291bGQgcGVzc2lt aXplIHRoZQorCSAqIHdob2xlIGNvbmN1cnJlbnQgb3BlcmF0aW9uOiBvcmRpbmFyeSB3ZWFrIHJl bGF0aW9uIGxvY2tzIHdvdWxkIHN0b3AgdXNpbmcKKwkgKiB0aGUgZmFzdCBwYXRoIGFuZCBjb250 ZW5kIGluIHRoZSBtYWluIGxvY2sgdGFibGUuCisJICoKKwkgKiBUcmFuc2ZlcnJpbmcgZmFzdC1w YXRoIGxvY2tzIGZyb20gRGVhZExvY2tDaGVjaygpIG9ubHkgd2hlbiBuZWVkZWQgd291bGQKKwkg KiBhdm9pZCB0aGF0IHBlbmFsdHksIGJ1dCBpcyBsb2NrLW9yZGVyaW5nLXNlbnNpdGl2ZTogRGVh ZExvY2tDaGVjaygpIGFscmVhZHkKKwkgKiBob2xkcyBhbGwgbG9jayBwYXJ0aXRpb24gTFdMb2Nr cywgd2hpbGUgZmFzdC1wYXRoIHRyYW5zZmVyIG5lZWRzCisJICogZnBJbmZvTG9ja3MgYW5kIG1h eSBhY3F1aXJlIHBhcnRpdGlvbiBMV0xvY2tzIGluIHRoZSBub3JtYWwgb3JkZXIuICBBIHNhZmUK KwkgKiBkZXNpZ24gd291bGQgbmVlZCBwcm9iZS9yZXRyeSBsb2dpYywgbWFraW5nIGl0IHdvcnRo d2hpbGUgb25seSBpZiBoaWRkZW4KKwkgKiBsb25nZXIgZmFzdC1wYXRoIGN5Y2xlcyBtdXN0IGJl IHByZWVtcHRlZCBlYXJseS4KKwkgKi8KKwlpZiAocHJvY2xvY2stPnVwZ3JhZGVJbnRlbnQgIT0g bG9ja21vZGUgJiYgbXlIZWxkTG9ja3MgIT0gMCAmJgorCQlsb2NrLT5uVXBncmFkZUludGVudCA+ IDApCisJeworCQlkbGlzdF9pdGVyCWl0ZXI7CisKKwkJZGxpc3RfZm9yZWFjaChpdGVyLCAmbG9j ay0+cHJvY0xvY2tzKQorCQl7CisJCQlQUk9DTE9DSyAgICpob2xkZXIgPSBkbGlzdF9jb250YWlu ZXIoUFJPQ0xPQ0ssIGxvY2tMaW5rLCBpdGVyLmN1cik7CisKKwkJCWlmIChob2xkZXItPnVwZ3Jh ZGVJbnRlbnQgPT0gTm9Mb2NrKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBTa2lwIHNlbGYgKHdl J3JlIGluIGxvY2stPnByb2NMb2NrcyB0b28pLiAqLworCQkJaWYgKGhvbGRlciA9PSBwcm9jbG9j aykKKwkJCQljb250aW51ZTsKKworCQkJLyogU2FtZSBsb2NrIGdyb3VwOiBub3QgYSBjeWNsZS4g Ki8KKwkJCWlmIChsZWFkZXIgIT0gTlVMTCAmJiBob2xkZXItPmdyb3VwTGVhZGVyID09IGxlYWRl cikKKwkJCQljb250aW51ZTsKKworCQkJLyogTXVzdCB0aGUgaG9sZGVyIGxhdGVyIHdhaXQgZm9y IG1lPyAqLworCQkJaWYgKChsb2NrTWV0aG9kVGFibGUtPmNvbmZsaWN0VGFiW2hvbGRlci0+dXBn cmFkZUludGVudF0gJgorCQkJCSBteUhlbGRMb2NrcykgPT0gMCkKKwkJCQljb250aW51ZTsKKwor CQkJLyogTXVzdCBJIHdhaXQgZm9yIHRoZSBob2xkZXIgbm93PyAqLworCQkJaWYgKChsb2NrTWV0 aG9kVGFibGUtPmNvbmZsaWN0VGFiW2xvY2ttb2RlXSAmCisJCQkJIGhvbGRlci0+aG9sZE1hc2sp ID09IDApCisJCQkJY29udGludWU7CisKKwkJCXJldHVybiBQUk9DX1dBSVRfU1RBVFVTX1BSRUVN UFRFRDsKKwkJfQorCX0KKwogCS8qCiAJICogQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgd2Un ZCByZWFsbHkgbmVlZCB0byBzbGVlcC4gSWYgd2UndmUgYmVlbgogCSAqIGNvbW1hbmRlZCBub3Qg dG8gZG8gdGhhdCwgYmFpbCBvdXQuCkBAIC0xMzA4LDggKzEzODUsMTAgQEAgSm9pbldhaXRRdWV1 ZShMT0NBTExPQ0sgKmxvY2FsbG9jaywgTG9ja01ldGhvZCBsb2NrTWV0aG9kVGFibGUsIGJvb2wg ZG9udFdhaXQpCiAgKgogICogUmVzdWx0IGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogICoKLSAq ICBQUk9DX1dBSVRfU1RBVFVTX09LICAgICAgLSBsb2NrIHdhcyBncmFudGVkCi0gKiAgUFJPQ19X QUlUX1NUQVRVU19FUlJPUiAgIC0gYSBkZWFkbG9jayB3YXMgZGV0ZWN0ZWQKKyAqICBQUk9DX1dB SVRfU1RBVFVTX09LICAgICAgICAgLSBsb2NrIGdyYW50ZWQKKyAqICBQUk9DX1dBSVRfU1RBVFVT X0VSUk9SICAgICAgLSBkZWFkbG9jayBkZXRlY3RlZAorICogIFBST0NfV0FJVF9TVEFUVVNfUFJF RU1QVEVEICAtIGNhbmNlbGVkIGJ5IGFub3RoZXIgYmFja2VuZCdzIERlYWRMb2NrQ2hlY2sKKyAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBicmVhayBhIHByb3RlY3RlZC11cGdy YWRlIGN5Y2xlCiAgKi8KIFByb2NXYWl0U3RhdHVzCiBQcm9jU2xlZXAoTE9DQUxMT0NLICpsb2Nh bGxvY2spCkBAIC0xNTYyLDE2ICsxNjQxLDE5IEBAIFByb2NTbGVlcChMT0NBTExPQ0sgKmxvY2Fs bG9jaykKIAogCQkvKgogCQkgKiBJZiBhd29rZW4gYWZ0ZXIgdGhlIGRlYWRsb2NrIGNoZWNrIGlu dGVycnVwdCBoYXMgcnVuLCBpbmNyZW1lbnQgdGhlCi0JCSAqIGxvY2sgc3RhdGlzdGljcyBjb3Vu dGVycyBhbmQgaWYgbG9nX2xvY2tfd2FpdHMgaXMgb24sIHRoZW4gcmVwb3J0Ci0JCSAqIGFib3V0 IHRoZSB3YWl0LgorCQkgKiBsb2NrIHN0YXRpc3RpY3MgY291bnRlcnMgYW5kLCBpZiBsb2dfbG9j a193YWl0cyBpcyBvbiwgcmVwb3J0IGFib3V0CisJCSAqIHRoZSB3YWl0LiBBbHNvIHJlcG9ydCBh IHdhaXQgdGhhdCBhbm90aGVyIGJhY2tlbmQgcHJlZW1wdGVkIGJlZm9yZQorCQkgKiBvdXIgb3du IGRlYWRsb2NrIHRpbWVvdXQgZmlyZWQuCiAJCSAqLwotCQlpZiAoZGVhZGxvY2tfc3RhdGUgIT0g RFNfTk9UX1lFVF9DSEVDS0VEKQorCQlpZiAoZGVhZGxvY2tfc3RhdGUgIT0gRFNfTk9UX1lFVF9D SEVDS0VEIHx8CisJCQkobXlXYWl0U3RhdHVzID09IFBST0NfV0FJVF9TVEFUVVNfUFJFRU1QVEVE ICYmIGxvZ19sb2NrX3dhaXRzKSkKIAkJewogCQkJbG9uZwkJc2VjczsKIAkJCWludAkJCXVzZWNz OwogCQkJbG9uZwkJbXNlY3M7CiAKLQkJCUlOSkVDVElPTl9QT0lOVCgiZGVhZGxvY2stdGltZW91 dC1maXJlZCIsIE5VTEwpOworCQkJaWYgKGRlYWRsb2NrX3N0YXRlICE9IERTX05PVF9ZRVRfQ0hF Q0tFRCkKKwkJCQlJTkpFQ1RJT05fUE9JTlQoImRlYWRsb2NrLXRpbWVvdXQtZmlyZWQiLCBOVUxM KTsKIAkJCVRpbWVzdGFtcERpZmZlcmVuY2UoZ2V0X3RpbWVvdXRfc3RhcnRfdGltZShERUFETE9D S19USU1FT1VUKSwKIAkJCQkJCQkJR2V0Q3VycmVudFRpbWVzdGFtcCgpLAogCQkJCQkJCQkmc2Vj cywgJnVzZWNzKTsKQEAgLTE2MTEsNiArMTY5MywxMyBAQCBQcm9jU2xlZXAoTE9DQUxMT0NLICps b2NhbGxvY2spCiAJCQkJCQkJIChlcnJkZXRhaWxfbG9nX3BsdXJhbCgiUHJvY2VzcyBob2xkaW5n IHRoZSBsb2NrOiAlcy4gV2FpdCBxdWV1ZTogJXMuIiwKIAkJCQkJCQkJCQkJCSAgICJQcm9jZXNz ZXMgaG9sZGluZyB0aGUgbG9jazogJXMuIFdhaXQgcXVldWU6ICVzLiIsCiAJCQkJCQkJCQkJCQkg ICBsb2NrSG9sZGVyc051bSwgbG9ja19ob2xkZXJzX3NidWYuZGF0YSwgbG9ja193YWl0ZXJzX3Ni dWYuZGF0YSkpKSk7CisJCQkJZWxzZSBpZiAoZGVhZGxvY2tfc3RhdGUgPT0gRFNfUFJFRU1QVF9E RUFETE9DSykKKwkJCQkJZXJlcG9ydChMT0csCisJCQkJCQkJKGVycm1zZygicHJvY2VzcyAlZCBh dm9pZGVkIGRlYWRsb2NrIGZvciAlcyBvbiAlcyBieSBjYW5jZWxpbmcgYSBibG9ja2luZyBsb2Nr IHdhaXQgYWZ0ZXIgJWxkLiUwM2QgbXMiLAorCQkJCQkJCQkJTXlQcm9jUGlkLCBtb2RlbmFtZSwg YnVmLmRhdGEsIG1zZWNzLCB1c2VjcyksCisJCQkJCQkJIChlcnJkZXRhaWxfbG9nX3BsdXJhbCgi UHJvY2VzcyBob2xkaW5nIHRoZSBsb2NrOiAlcy4gV2FpdCBxdWV1ZTogJXMuIiwKKwkJCQkJCQkJ CQkJCSAgICJQcm9jZXNzZXMgaG9sZGluZyB0aGUgbG9jazogJXMuIFdhaXQgcXVldWU6ICVzLiIs CisJCQkJCQkJCQkJCQkgICBsb2NrSG9sZGVyc051bSwgbG9ja19ob2xkZXJzX3NidWYuZGF0YSwg bG9ja193YWl0ZXJzX3NidWYuZGF0YSkpKSk7CiAJCQkJZWxzZSBpZiAoZGVhZGxvY2tfc3RhdGUg PT0gRFNfSEFSRF9ERUFETE9DSykKIAkJCQl7CiAJCQkJCS8qCkBAIC0xNjU5LDE2ICsxNzQ4LDEz IEBAIFByb2NTbGVlcChMT0NBTExPQ0sgKmxvY2FsbG9jaykKIAkJCQkJCQkJCU15UHJvY1BpZCwg bW9kZW5hbWUsIGJ1Zi5kYXRhLCBtc2VjcywgdXNlY3MpKSk7CiAJCQkJZWxzZQogCQkJCXsKLQkJ CQkJQXNzZXJ0KG15V2FpdFN0YXR1cyA9PSBQUk9DX1dBSVRfU1RBVFVTX0VSUk9SKTsKKwkJCQkJ QXNzZXJ0KG15V2FpdFN0YXR1cyA9PSBQUk9DX1dBSVRfU1RBVFVTX0VSUk9SIHx8CisJCQkJCQkg ICBteVdhaXRTdGF0dXMgPT0gUFJPQ19XQUlUX1NUQVRVU19QUkVFTVBURUQpOwogCiAJCQkJCS8q Ci0JCQkJCSAqIEN1cnJlbnRseSwgdGhlIGRlYWRsb2NrIGNoZWNrZXIgYWx3YXlzIGtpY2tzIGl0 cyBvd24KLQkJCQkJICogcHJvY2Vzcywgd2hpY2ggbWVhbnMgdGhhdCB3ZSdsbCBvbmx5IHNlZQot CQkJCQkgKiBQUk9DX1dBSVRfU1RBVFVTX0VSUk9SIHdoZW4gZGVhZGxvY2tfc3RhdGUgPT0KLQkJ CQkJICogRFNfSEFSRF9ERUFETE9DSywgYW5kIHRoZXJlJ3Mgbm8gbmVlZCB0byBwcmludAotCQkJ CQkgKiByZWR1bmRhbnQgbWVzc2FnZXMuICBCdXQgZm9yIGNvbXBsZXRlbmVzcyBhbmQKLQkJCQkJ ICogZnV0dXJlLXByb29maW5nLCBwcmludCBhIG1lc3NhZ2UgaWYgaXQgbG9va3MgbGlrZQotCQkJ CQkgKiBzb21lb25lIGVsc2Uga2lja2VkIHVzIG9mZiB0aGUgbG9jay4KKwkJCQkJICogU2VsZi1k ZXRlY3RlZCBoYXJkIGRlYWRsb2NrcyBsb2cgdmlhIERlYWRMb2NrUmVwb3J0OworCQkJCQkgKiBz a2lwIHRoZSByZWR1bmRhbnQgTE9HLiAgT3RoZXJ3aXNlIChlLmcuIHByZWVtcHRlZCksCisJCQkJ CSAqIGVtaXQgaXQgaGVyZS4KIAkJCQkJICovCiAJCQkJCWlmIChkZWFkbG9ja19zdGF0ZSAhPSBE U19IQVJEX0RFQURMT0NLKQogCQkJCQkJZXJlcG9ydChMT0csCkBAIC0xODcwLDE0ICsxOTU2LDE2 IEBAIENoZWNrRGVhZExvY2sodm9pZCkKIAkJICogR2V0IHRoaXMgcHJvY2VzcyBvdXQgb2Ygd2Fp dCBzdGF0ZS4gKE5vdGU6IHdlIGNvdWxkIGRvIHRoaXMgbW9yZQogCQkgKiBlZmZpY2llbnRseSBi eSByZWx5aW5nIG9uIGxvY2tBd2FpdGVkLCBidXQgdXNlIHRoaXMgY29kaW5nIHRvCiAJCSAqIHBy ZXNlcnZlIHRoZSBmbGV4aWJpbGl0eSB0byBraWxsIHNvbWUgb3RoZXIgdHJhbnNhY3Rpb24gdGhh biB0aGUKLQkJICogb25lIGRldGVjdGluZyB0aGUgZGVhZGxvY2suKQorCQkgKiBvbmUgZGV0ZWN0 aW5nIHRoZSBkZWFkbG9jay4gIERTX1BSRUVNUFRfREVBRExPQ0sgZXhlcmNpc2VzIHRoYXQKKwkJ ICogYWxyZWFkeS4pCiAJCSAqCiAJCSAqIFJlbW92ZUZyb21XYWl0UXVldWUgc2V0cyBNeVByb2Mt PndhaXRTdGF0dXMgdG8KIAkJICogUFJPQ19XQUlUX1NUQVRVU19FUlJPUiwgc28gUHJvY1NsZWVw IHdpbGwgcmVwb3J0IGFuIGVycm9yIGFmdGVyIHdlCiAJCSAqIHJldHVybi4KIAkJICovCiAJCUFz c2VydChNeVByb2MtPndhaXRMb2NrICE9IE5VTEwpOwotCQlSZW1vdmVGcm9tV2FpdFF1ZXVlKE15 UHJvYywgTG9ja1RhZ0hhc2hDb2RlKCYoTXlQcm9jLT53YWl0TG9jay0+dGFnKSkpOworCQlSZW1v dmVGcm9tV2FpdFF1ZXVlKE15UHJvYywgTG9ja1RhZ0hhc2hDb2RlKCYoTXlQcm9jLT53YWl0TG9j ay0+dGFnKSksCisJCQkJCQkJUFJPQ19XQUlUX1NUQVRVU19FUlJPUik7CiAKIAkJLyoKIAkJICog V2UncmUgZG9uZSBoZXJlLiAgVHJhbnNhY3Rpb24gYWJvcnQgY2F1c2VkIGJ5IHRoZSBlcnJvciB0 aGF0CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL25hbWVzcGFjZS5oIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9uYW1lc3BhY2UuaAppbmRleCA5NDUzYTNlNDkzMi4uZjBhNzExODQ3NTcg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvbmFtZXNwYWNlLmgKKysrIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9uYW1lc3BhY2UuaApAQCAtOTksNiArOTksMTMgQEAgdHlwZWRlZiB2b2lk ICgqUmFuZ2VWYXJHZXRSZWxpZENhbGxiYWNrKSAoY29uc3QgUmFuZ2VWYXIgKnJlbGF0aW9uLCBP aWQgcmVsSWQsCiAJUmFuZ2VWYXJHZXRSZWxpZEV4dGVuZGVkKHJlbGF0aW9uLCBsb2NrbW9kZSwg XAogCQkJCQkJCSAobWlzc2luZ19vaykgPyBSVlJfTUlTU0lOR19PSyA6IDAsIE5VTEwsIE5VTEwp CiAKK2V4dGVybiBPaWQJUmFuZ2VWYXJHZXRSZWxpZFdpdGhVcGdyYWRlSW50ZW50KGNvbnN0IFJh bmdlVmFyICpyZWxhdGlvbiwKKwkJCQkJCQkJCQkJICBMT0NLTU9ERSBsb2NrbW9kZSwKKwkJCQkJ CQkJCQkJICBMT0NLTU9ERSB1cGdyYWRlTW9kZSwKKwkJCQkJCQkJCQkJICB1aW50MzIgZmxhZ3Ms CisJCQkJCQkJCQkJCSAgUmFuZ2VWYXJHZXRSZWxpZENhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJ CQkJCQkgIHZvaWQgKmNhbGxiYWNrX2FyZyk7CisKIGV4dGVybiBPaWQJUmFuZ2VWYXJHZXRSZWxp ZEV4dGVuZGVkKGNvbnN0IFJhbmdlVmFyICpyZWxhdGlvbiwKIAkJCQkJCQkJCSBMT0NLTU9ERSBs b2NrbW9kZSwgdWludDMyIGZsYWdzLAogCQkJCQkJCQkJIFJhbmdlVmFyR2V0UmVsaWRDYWxsYmFj ayBjYWxsYmFjaywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG1nci5oIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9sbWdyLmgKaW5kZXggMmE5ODVjZTVlMTUuLjU3NjY3NDMyZTAyIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9z dG9yYWdlL2xtZ3IuaApAQCAtNDIsNiArNDIsOSBAQCBleHRlcm4gdm9pZCBMb2NrUmVsYXRpb25J ZChMb2NrUmVsSWQgKnJlbGlkLCBMT0NLTU9ERSBsb2NrbW9kZSk7CiBleHRlcm4gYm9vbCBDb25k aXRpb25hbExvY2tSZWxhdGlvbk9pZChPaWQgcmVsaWQsIExPQ0tNT0RFIGxvY2ttb2RlKTsKIGV4 dGVybiB2b2lkIFVubG9ja1JlbGF0aW9uSWQoTG9ja1JlbElkICpyZWxpZCwgTE9DS01PREUgbG9j a21vZGUpOwogZXh0ZXJuIHZvaWQgVW5sb2NrUmVsYXRpb25PaWQoT2lkIHJlbGlkLCBMT0NLTU9E RSBsb2NrbW9kZSk7CitleHRlcm4gdm9pZCBMb2NrUmVsYXRpb25PaWRXaXRoVXBncmFkZUludGVu dChPaWQgcmVsaWQsCisJCQkJCQkJCQkJCSBMT0NLTU9ERSBsb2NrbW9kZSwKKwkJCQkJCQkJCQkJ IExPQ0tNT0RFIHVwZ3JhZGVNb2RlKTsKIAogZXh0ZXJuIHZvaWQgTG9ja1JlbGF0aW9uKFJlbGF0 aW9uIHJlbGF0aW9uLCBMT0NLTU9ERSBsb2NrbW9kZSk7CiBleHRlcm4gYm9vbCBDb25kaXRpb25h bExvY2tSZWxhdGlvbihSZWxhdGlvbiByZWxhdGlvbiwgTE9DS01PREUgbG9ja21vZGUpOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2NrLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdl L2xvY2suaAppbmRleCBlZTNjYjFkYzIwMy4uY2ZmNzZhN2FlZDggMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3N0b3JhZ2UvbG9jay5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oCkBA IC0xMzEsNiArMTMxLDcgQEAgdHlwZWRlZiBjb25zdCBMb2NrTWV0aG9kRGF0YSAqTG9ja01ldGhv ZDsKICAqIG5SZXF1ZXN0ZWQgLS0gdG90YWwgcmVxdWVzdGVkIGxvY2tzIG9mIGFsbCB0eXBlcy4K ICAqIGdyYW50ZWQgLS0gY291bnQgb2YgZWFjaCBsb2NrIHR5cGUgY3VycmVudGx5IGdyYW50ZWQg b24gdGhlIGxvY2suCiAgKiBuR3JhbnRlZCAtLSB0b3RhbCBncmFudGVkIGxvY2tzIG9mIGFsbCB0 eXBlcy4KKyAqIG5VcGdyYWRlSW50ZW50IC0tICMgb2YgcHJvY2xvY2tzIGhlcmUgd2l0aCB1cGdy YWRlSW50ZW50IHNldC4KICAqCiAgKiBOb3RlOiB0aGVzZSBjb3VudHMgY291bnQgMSBmb3IgZWFj aCBiYWNrZW5kLiAgSW50ZXJuYWxseSB0byBhIGJhY2tlbmQsCiAgKiB0aGVyZSBtYXkgYmUgbXVs dGlwbGUgZ3JhYnMgb24gYSBwYXJ0aWN1bGFyIGxvY2ssIGJ1dCB0aGlzIGlzIG5vdCByZWZsZWN0 ZWQKQEAgLTE1MCw2ICsxNTEsNyBAQCB0eXBlZGVmIHN0cnVjdCBMT0NLCiAJaW50CQkJblJlcXVl c3RlZDsJCS8qIHRvdGFsIG9mIHJlcXVlc3RlZFtdIGFycmF5ICovCiAJaW50CQkJZ3JhbnRlZFtN QVhfTE9DS01PREVTXTsgLyogY291bnRzIG9mIGdyYW50ZWQgbG9ja3MgKi8KIAlpbnQJCQluR3Jh bnRlZDsJCS8qIHRvdGFsIG9mIGdyYW50ZWRbXSBhcnJheSAqLworCWludAkJCW5VcGdyYWRlSW50 ZW50OyAvKiBzZWUgTE9DSyBjb21tZW50IGFib3ZlICovCiB9IExPQ0s7CiAKICNkZWZpbmUgTE9D S19MT0NLTUVUSE9EKGxvY2spICgoTE9DS01FVEhPRElEKSAobG9jaykudGFnLmxvY2t0YWdfbG9j a21ldGhvZGlkKQpAQCAtMjA2LDYgKzIwOCw3IEBAIHR5cGVkZWYgc3RydWN0IFBST0NMT0NLCiAJ UEdQUk9DCSAgICpncm91cExlYWRlcjsJLyogcHJvYydzIGxvY2sgZ3JvdXAgbGVhZGVyLCBvciBw cm9jIGl0c2VsZiAqLwogCUxPQ0tNQVNLCWhvbGRNYXNrOwkJLyogYml0bWFzayBmb3IgbG9jayB0 eXBlcyBjdXJyZW50bHkgaGVsZCAqLwogCUxPQ0tNQVNLCXJlbGVhc2VNYXNrOwkvKiBiaXRtYXNr IGZvciBsb2NrIHR5cGVzIHRvIGJlIHJlbGVhc2VkICovCisJTE9DS01PREUJdXBncmFkZUludGVu dDsJLyogYW5ub3VuY2VkIGZ1dHVyZSB1cGdyYWRlIHRhcmdldCwgb3IgTm9Mb2NrICovCiAJZGxp c3Rfbm9kZQlsb2NrTGluazsJCS8qIGxpc3QgbGluayBpbiBMT0NLJ3MgbGlzdCBvZiBwcm9jbG9j a3MgKi8KIAlkbGlzdF9ub2RlCXByb2NMaW5rOwkJLyogbGlzdCBsaW5rIGluIFBHUFJPQydzIGxp c3Qgb2YgcHJvY2xvY2tzICovCiB9IFBST0NMT0NLOwpAQCAtMzQyLDEwICszNDUsMjIgQEAgdHlw ZWRlZiBlbnVtCiAJRFNfTk9fREVBRExPQ0ssCQkJCS8qIG5vIGRlYWRsb2NrIGRldGVjdGVkICov CiAJRFNfU09GVF9ERUFETE9DSywJCQkvKiBkZWFkbG9jayBhdm9pZGVkIGJ5IHF1ZXVlIHJlYXJy YW5nZW1lbnQgKi8KIAlEU19IQVJEX0RFQURMT0NLLAkJCS8qIGRlYWRsb2NrLCBubyB3YXkgb3V0 IGJ1dCBFUlJPUiAqLworCURTX1BSRUVNUFRfREVBRExPQ0ssCQkvKiByZXNvbHZlZCBieSBjYW5j ZWxpbmcgYSBibG9ja2luZyB3YWl0ZXIgKi8KIAlEU19CTE9DS0VEX0JZX0FVVE9WQUNVVU0sCS8q IG5vIGRlYWRsb2NrOyBxdWV1ZSBibG9ja2VkIGJ5IGF1dG92YWN1dW0KIAkJCQkJCQkJICogd29y a2VyICovCiB9IERlYWRMb2NrU3RhdGU7CiAKKy8qCisgKiBMb2NrLXdhaXQgc3RhdHVzIHNldCBi eSBSZW1vdmVGcm9tV2FpdFF1ZXVlIGFuZCByZWFkIGJ5IHRoZSB3YWl0ZXIgb24gd2FrZXVwCisg Ki8KK3R5cGVkZWYgZW51bQoreworCVBST0NfV0FJVF9TVEFUVVNfT0ssCisJUFJPQ19XQUlUX1NU QVRVU19XQUlUSU5HLAorCVBST0NfV0FJVF9TVEFUVVNfRVJST1IsCisJUFJPQ19XQUlUX1NUQVRV U19QUkVFTVBURUQsCit9IFByb2NXYWl0U3RhdHVzOworCiAvKgogICogVGhlIGxvY2ttZ3IncyBz aGFyZWQgaGFzaCB0YWJsZXMgYXJlIHBhcnRpdGlvbmVkIHRvIHJlZHVjZSBjb250ZW50aW9uLgog ICogVG8gZGV0ZXJtaW5lIHdoaWNoIHBhcnRpdGlvbiBhIGdpdmVuIGxvY2t0YWcgYmVsb25ncyB0 bywgY29tcHV0ZSB0aGUgdGFnJ3MKQEAgLTM4Niw2ICs0MDEsNyBAQCBleHRlcm4gTG9ja0FjcXVp cmVSZXN1bHQgTG9ja0FjcXVpcmUoY29uc3QgTE9DS1RBRyAqbG9ja3RhZywKIAkJCQkJCQkJCSBi b29sIGRvbnRXYWl0KTsKIGV4dGVybiBMb2NrQWNxdWlyZVJlc3VsdCBMb2NrQWNxdWlyZUV4dGVu ZGVkKGNvbnN0IExPQ0tUQUcgKmxvY2t0YWcsCiAJCQkJCQkJCQkJCSBMT0NLTU9ERSBsb2NrbW9k ZSwKKwkJCQkJCQkJCQkJIExPQ0tNT0RFIHVwZ3JhZGVJbnRlbnQsCiAJCQkJCQkJCQkJCSBib29s IHNlc3Npb25Mb2NrLAogCQkJCQkJCQkJCQkgYm9vbCBkb250V2FpdCwKIAkJCQkJCQkJCQkJIGJv b2wgcmVwb3J0TWVtb3J5RXJyb3IsCkBAIC00MTgsNyArNDM0LDggQEAgZXh0ZXJuIHZvaWQgR3Jh bnRBd2FpdGVkTG9jayh2b2lkKTsKIGV4dGVybiBMT0NBTExPQ0sgKkdldEF3YWl0ZWRMb2NrKHZv aWQpOwogZXh0ZXJuIHZvaWQgUmVzZXRBd2FpdGVkTG9jayh2b2lkKTsKIAotZXh0ZXJuIHZvaWQg UmVtb3ZlRnJvbVdhaXRRdWV1ZShQR1BST0MgKnByb2MsIHVpbnQzMiBoYXNoY29kZSk7CitleHRl cm4gdm9pZCBSZW1vdmVGcm9tV2FpdFF1ZXVlKFBHUFJPQyAqcHJvYywgdWludDMyIGhhc2hjb2Rl LAorCQkJCQkJCQlQcm9jV2FpdFN0YXR1cyBuZXdTdGF0dXMpOwogZXh0ZXJuIExvY2tEYXRhICpH ZXRMb2NrU3RhdHVzRGF0YSh2b2lkKTsKIGV4dGVybiBCbG9ja2VkUHJvY3NEYXRhICpHZXRCbG9j a2VyU3RhdHVzRGF0YShpbnQgYmxvY2tlZF9waWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL3Byb2MuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCmluZGV4IDNlMWQx ZmFkNWY5Li45Zjg5ZTU4N2YzYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9j LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKQEAgLTE0NiwxMyArMTQ2LDYgQEAg ZXh0ZXJuIFBHRExMSU1QT1JUIGludCBGYXN0UGF0aExvY2tHcm91cHNQZXJCYWNrZW5kOwogI2Rl ZmluZSBERUxBWV9DSEtQVF9DT01QTEVURQkoMTw8MSkKICNkZWZpbmUgREVMQVlfQ0hLUFRfSU5f Q09NTUlUCShERUxBWV9DSEtQVF9TVEFSVCB8IDE8PDIpCiAKLXR5cGVkZWYgZW51bQotewotCVBS T0NfV0FJVF9TVEFUVVNfT0ssCi0JUFJPQ19XQUlUX1NUQVRVU19XQUlUSU5HLAotCVBST0NfV0FJ VF9TVEFUVVNfRVJST1IsCi19IFByb2NXYWl0U3RhdHVzOwotCiAvKgogICogRWFjaCBiYWNrZW5k IGhhcyBhIFBHUFJPQyBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeS4gIFRoZXJlIGlzIGFsc28gYSBs aXN0IG9mCiAgKiBjdXJyZW50bHktdW51c2VkIFBHUFJPQyBzdHJ1Y3RzIHRoYXQgd2lsbCBiZSBy ZWFsbG9jYXRlZCB0byBuZXcgYmFja2VuZHMuCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L2luamVjdGlvbl9wb2ludHMvZXhwZWN0ZWQvcmVwYWNrLm91dCBiL3NyYy90ZXN0L21vZHVsZXMv aW5qZWN0aW9uX3BvaW50cy9leHBlY3RlZC9yZXBhY2sub3V0CmluZGV4IGI1NzVlOTA1MmVlLi45 ZGZmYzYwM2Q5ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRz L2V4cGVjdGVkL3JlcGFjay5vdXQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9p bnRzL2V4cGVjdGVkL3JlcGFjay5vdXQKQEAgLTEsNCArMSw0IEBACi1QYXJzZWQgdGVzdCBzcGVj IHdpdGggMiBzZXNzaW9ucworUGFyc2VkIHRlc3Qgc3BlYyB3aXRoIDQgc2Vzc2lvbnMKIAogc3Rh cnRpbmcgcGVybXV0YXRpb246IHdhaXRfYmVmb3JlX2xvY2sgY2hhbmdlX2V4aXN0aW5nIGNoYW5n ZV9uZXcgY2hhbmdlX3N1YnhhY3QxIGNoYW5nZV9zdWJ4YWN0MiBjaGVjazIgd2FrZXVwX2JlZm9y ZV9sb2NrIGNoZWNrMQogaW5qZWN0aW9uX3BvaW50c19hdHRhY2gKQEAgLTExMSwzICsxMTEsMTgy IEBAIGluamVjdGlvbl9wb2ludHNfZGV0YWNoCiAgICAgICAgICAgICAgICAgICAgICAgIAogKDEg cm93KQogCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiB3YWl0X2JlZm9yZV9sb2NrIGJlZ2luX3R4 biBsb2NrX3RhYmxlX2FlIHMzX3dha2V1cCBlbmRfdHhuCitpbmplY3Rpb25fcG9pbnRzX2F0dGFj aAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgCisoMSBy b3cpCisKK3N0ZXAgd2FpdF9iZWZvcmVfbG9jazogCisJUkVQQUNLIChDT05DVVJSRU5UTFkpIHJl cGFja190ZXN0IFVTSU5HIElOREVYIHJlcGFja190ZXN0X3BrZXk7CisgPHdhaXRpbmcgLi4uPgor c3RlcCBiZWdpbl90eG46IAorCUJFR0lOOworCitzdGVwIGxvY2tfdGFibGVfYWU6IAorCUxPQ0sg VEFCTEUgcmVwYWNrX3Rlc3QgSU4gQUNDRVNTIEVYQ0xVU0lWRSBNT0RFOworIDx3YWl0aW5nIC4u Lj4KK3N0ZXAgczNfd2FrZXVwOiAKKwlTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c193YWtldXAoJ3Jl cGFjay1jb25jdXJyZW50bHktYmVmb3JlLWxvY2snKTsKKworaW5qZWN0aW9uX3BvaW50c193YWtl dXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIAorKDEg cm93KQorCitzdGVwIHdhaXRfYmVmb3JlX2xvY2s6IDwuLi4gY29tcGxldGVkPgorc3RlcCBsb2Nr X3RhYmxlX2FlOiA8Li4uIGNvbXBsZXRlZD4KK3N0ZXAgZW5kX3R4bjogCisJQ09NTUlUOworCitp bmplY3Rpb25fcG9pbnRzX2RldGFjaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg ICAgICAgICAgICAgICAgCisoMSByb3cpCisKKworc3RhcnRpbmcgcGVybXV0YXRpb246IHMyX3Rp bWVvdXRfZmFzdCB3YWl0X2JlZm9yZV9sb2NrIGJlZ2luX2FuZF9yZWFkIGxvY2tfdGFibGVfYWUg czNfd2FrZXVwIGVuZF90eG4KK2luamVjdGlvbl9wb2ludHNfYXR0YWNoCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKworc3RlcCBzMl90 aW1lb3V0X2Zhc3Q6IAorCVNFVCBkZWFkbG9ja190aW1lb3V0ID0gJzEwbXMnOworCitzdGVwIHdh aXRfYmVmb3JlX2xvY2s6IAorCVJFUEFDSyAoQ09OQ1VSUkVOVExZKSByZXBhY2tfdGVzdCBVU0lO RyBJTkRFWCByZXBhY2tfdGVzdF9wa2V5OworIDx3YWl0aW5nIC4uLj4KK3N0ZXAgYmVnaW5fYW5k X3JlYWQ6IAorCUJFR0lOOworCVNFTEVDVCAxIEZST00gcmVwYWNrX3Rlc3QgTElNSVQgMTsKKwor P2NvbHVtbj8KKy0tLS0tLS0tCisgICAgICAgMQorKDEgcm93KQorCitzdGVwIGxvY2tfdGFibGVf YWU6IAorCUxPQ0sgVEFCTEUgcmVwYWNrX3Rlc3QgSU4gQUNDRVNTIEVYQ0xVU0lWRSBNT0RFOwor IDx3YWl0aW5nIC4uLj4KK3N0ZXAgczNfd2FrZXVwOiAKKwlTRUxFQ1QgaW5qZWN0aW9uX3BvaW50 c193YWtldXAoJ3JlcGFjay1jb25jdXJyZW50bHktYmVmb3JlLWxvY2snKTsKKworaW5qZWN0aW9u X3BvaW50c193YWtldXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAg ICAgICAgIAorKDEgcm93KQorCitzdGVwIHdhaXRfYmVmb3JlX2xvY2s6IDwuLi4gY29tcGxldGVk Pgorc3RlcCBsb2NrX3RhYmxlX2FlOiA8Li4uIGNvbXBsZXRlZD4KK0VSUk9SOiAgZGVhZGxvY2sg ZGV0ZWN0ZWQKK3N0ZXAgZW5kX3R4bjogCisJQ09NTUlUOworCitpbmplY3Rpb25fcG9pbnRzX2Rl dGFjaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgCiso MSByb3cpCisKKworc3RhcnRpbmcgcGVybXV0YXRpb246IHMyX3RpbWVvdXRfZmFzdCB3YWl0X2Jl Zm9yZV9sb2NrIGJlZ2luX2FuZF9yZWFkIGxvY2tfdGFibGVfc3VlIHMzX3dha2V1cCBlbmRfdHhu CitpbmplY3Rpb25fcG9pbnRzX2F0dGFjaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAg ICAgICAgICAgICAgICAgICAgCisoMSByb3cpCisKK3N0ZXAgczJfdGltZW91dF9mYXN0OiAKKwlT RVQgZGVhZGxvY2tfdGltZW91dCA9ICcxMG1zJzsKKworc3RlcCB3YWl0X2JlZm9yZV9sb2NrOiAK KwlSRVBBQ0sgKENPTkNVUlJFTlRMWSkgcmVwYWNrX3Rlc3QgVVNJTkcgSU5ERVggcmVwYWNrX3Rl c3RfcGtleTsKKyA8d2FpdGluZyAuLi4+CitzdGVwIGJlZ2luX2FuZF9yZWFkOiAKKwlCRUdJTjsK KwlTRUxFQ1QgMSBGUk9NIHJlcGFja190ZXN0IExJTUlUIDE7CisKKz9jb2x1bW4/CistLS0tLS0t LQorICAgICAgIDEKKygxIHJvdykKKworc3RlcCBsb2NrX3RhYmxlX3N1ZTogCisJTE9DSyBUQUJM RSByZXBhY2tfdGVzdCBJTiBTSEFSRSBVUERBVEUgRVhDTFVTSVZFIE1PREU7CisgPHdhaXRpbmcg Li4uPgorc3RlcCBzM193YWtldXA6IAorCVNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3dha2V1cCgn cmVwYWNrLWNvbmN1cnJlbnRseS1iZWZvcmUtbG9jaycpOworCitpbmplY3Rpb25fcG9pbnRzX3dh a2V1cAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgCiso MSByb3cpCisKK3N0ZXAgbG9ja190YWJsZV9zdWU6IDwuLi4gY29tcGxldGVkPgorRVJST1I6ICBk ZWFkbG9jayBkZXRlY3RlZAorc3RlcCB3YWl0X2JlZm9yZV9sb2NrOiA8Li4uIGNvbXBsZXRlZD4K K3N0ZXAgZW5kX3R4bjogCisJQ09NTUlUOworCitpbmplY3Rpb25fcG9pbnRzX2RldGFjaAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgCisoMSByb3cpCisK Kworc3RhcnRpbmcgcGVybXV0YXRpb246IHMyX3RpbWVvdXRfZmFzdCB3YWl0X2JlZm9yZV9sb2Nr IGJlZ2luX2FuZF9yZWFkIHMzX2JlZ2luX3R4biBzM19sb2NrX3RhYmxlX3lfc3VlIHMzX2xvY2tf dGFibGVfc3VlIGxvY2tfdGFibGVfeV9zdWUgczRfd2FrZXVwIGVuZF90eG4gczNfZW5kX3R4bgor aW5qZWN0aW9uX3BvaW50c19hdHRhY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAg ICAgICAgICAgICAgICAgIAorKDEgcm93KQorCitzdGVwIHMyX3RpbWVvdXRfZmFzdDogCisJU0VU IGRlYWRsb2NrX3RpbWVvdXQgPSAnMTBtcyc7CisKK3N0ZXAgd2FpdF9iZWZvcmVfbG9jazogCisJ UkVQQUNLIChDT05DVVJSRU5UTFkpIHJlcGFja190ZXN0IFVTSU5HIElOREVYIHJlcGFja190ZXN0 X3BrZXk7CisgPHdhaXRpbmcgLi4uPgorc3RlcCBiZWdpbl9hbmRfcmVhZDogCisJQkVHSU47CisJ U0VMRUNUIDEgRlJPTSByZXBhY2tfdGVzdCBMSU1JVCAxOworCis/Y29sdW1uPworLS0tLS0tLS0K KyAgICAgICAxCisoMSByb3cpCisKK3N0ZXAgczNfYmVnaW5fdHhuOiAKKwlCRUdJTjsKKworc3Rl cCBzM19sb2NrX3RhYmxlX3lfc3VlOiAKKwlMT0NLIFRBQkxFIHJlcGFja190ZXN0X3kgSU4gU0hB UkUgVVBEQVRFIEVYQ0xVU0lWRSBNT0RFOworCitzdGVwIHMzX2xvY2tfdGFibGVfc3VlOiAKKwlM T0NLIFRBQkxFIHJlcGFja190ZXN0IElOIFNIQVJFIFVQREFURSBFWENMVVNJVkUgTU9ERTsKKyA8 d2FpdGluZyAuLi4+CitzdGVwIGxvY2tfdGFibGVfeV9zdWU6IAorCUxPQ0sgVEFCTEUgcmVwYWNr X3Rlc3RfeSBJTiBTSEFSRSBVUERBVEUgRVhDTFVTSVZFIE1PREU7CisgPHdhaXRpbmcgLi4uPgor c3RlcCBzNF93YWtldXA6IAorCVNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3dha2V1cCgncmVwYWNr LWNvbmN1cnJlbnRseS1iZWZvcmUtbG9jaycpOworCitpbmplY3Rpb25fcG9pbnRzX3dha2V1cAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgCisoMSByb3cp CisKK3N0ZXAgbG9ja190YWJsZV95X3N1ZTogPC4uLiBjb21wbGV0ZWQ+CitzdGVwIHMzX2xvY2tf dGFibGVfc3VlOiA8Li4uIGNvbXBsZXRlZD4KK0VSUk9SOiAgZGVhZGxvY2sgZGV0ZWN0ZWQKK3N0 ZXAgZW5kX3R4bjogCisJQ09NTUlUOworCitzdGVwIHdhaXRfYmVmb3JlX2xvY2s6IDwuLi4gY29t cGxldGVkPgorc3RlcCBzM19lbmRfdHhuOiAKKwlDT01NSVQ7CisKK2luamVjdGlvbl9wb2ludHNf ZGV0YWNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAK KygxIHJvdykKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRz L3NwZWNzL3JlcGFjay5zcGVjIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL3Nw ZWNzL3JlcGFjay5zcGVjCmluZGV4IGQ3MjdhOWIwNTZiLi4zNmQzMjk2NGY5NCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL3NwZWNzL3JlcGFjay5zcGVjCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9zcGVjcy9yZXBhY2suc3BlYwpA QCAtNSw2ICs1LDcgQEAgc2V0dXAKIAogCUNSRUFURSBUQUJMRSByZXBhY2tfdGVzdChpIGludCBQ UklNQVJZIEtFWSwgaiBpbnQpOwogCUlOU0VSVCBJTlRPIHJlcGFja190ZXN0KGksIGopIFZBTFVF UyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCk7CisJQ1JFQVRFIFRBQkxFIHJlcGFja190 ZXN0X3koaSBpbnQpOwogCiAJQ1JFQVRFIFRBQkxFIHJlbGZpbGVub2Rlcyhub2RlIG9pZCk7CiAK QEAgLTE1LDYgKzE2LDcgQEAgc2V0dXAKIHRlYXJkb3duCiB7CiAJRFJPUCBUQUJMRSByZXBhY2tf dGVzdDsKKwlEUk9QIFRBQkxFIHJlcGFja190ZXN0X3k7CiAJRFJPUCBFWFRFTlNJT04gaW5qZWN0 aW9uX3BvaW50czsKIAogCURST1AgVEFCTEUgcmVsZmlsZW5vZGVzOwpAQCAtNjEsNiArNjMsMTAg QEAgdGVhcmRvd24KIH0KIAogc2Vzc2lvbiBzMgorc3RlcCBzMl90aW1lb3V0X2Zhc3QKK3sKKwlT RVQgZGVhZGxvY2tfdGltZW91dCA9ICcxMG1zJzsKK30KICMgQ2hhbmdlIHRoZSBleGlzdGluZyBk YXRhLiBVUERBVEUgY2hhbmdlcyBib3RoIGtleSBhbmQgbm9uLWtleSBjb2x1bW5zLiBBbHNvCiAj IHVwZGF0ZSBvbmUgcm93IHR3aWNlIHRvIHRlc3Qgd2hldGhlciB0dXBsZSB2ZXJzaW9uIGdlbmVy YXRlZCBieSB0aGlzIHNlc3Npb24KICMgY2FuIGJlIGZvdW5kLgpAQCAtMTI4LDYgKzEzNCw2MCBA QCBzdGVwIHdha2V1cF9iZWZvcmVfbG9jawogewogCVNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3dh a2V1cCgncmVwYWNrLWNvbmN1cnJlbnRseS1iZWZvcmUtbG9jaycpOwogfQorIyBTdGVwcyB1c2Vk IGluIGxvY2sgY29udGVudGlvbiB0ZXN0cy4KK3N0ZXAgYmVnaW5fdHhuCit7CisJQkVHSU47Cit9 CitzdGVwIGJlZ2luX2FuZF9yZWFkCit7CisJQkVHSU47CisJU0VMRUNUIDEgRlJPTSByZXBhY2tf dGVzdCBMSU1JVCAxOworfQorc3RlcCBsb2NrX3RhYmxlX2FlCit7CisJTE9DSyBUQUJMRSByZXBh Y2tfdGVzdCBJTiBBQ0NFU1MgRVhDTFVTSVZFIE1PREU7Cit9CitzdGVwIGxvY2tfdGFibGVfc3Vl Cit7CisJTE9DSyBUQUJMRSByZXBhY2tfdGVzdCBJTiBTSEFSRSBVUERBVEUgRVhDTFVTSVZFIE1P REU7Cit9CitzdGVwIGxvY2tfdGFibGVfeV9zdWUKK3sKKwlMT0NLIFRBQkxFIHJlcGFja190ZXN0 X3kgSU4gU0hBUkUgVVBEQVRFIEVYQ0xVU0lWRSBNT0RFOworfQorc3RlcCBlbmRfdHhuCit7CisJ Q09NTUlUOworfQorCitzZXNzaW9uIHMzCitzdGVwIHMzX2JlZ2luX3R4bgoreworCUJFR0lOOwor fQorc3RlcCBzM19sb2NrX3RhYmxlX3lfc3VlCit7CisJTE9DSyBUQUJMRSByZXBhY2tfdGVzdF95 IElOIFNIQVJFIFVQREFURSBFWENMVVNJVkUgTU9ERTsKK30KK3N0ZXAgczNfbG9ja190YWJsZV9z dWUKK3sKKwlMT0NLIFRBQkxFIHJlcGFja190ZXN0IElOIFNIQVJFIFVQREFURSBFWENMVVNJVkUg TU9ERTsKK30KK3N0ZXAgczNfd2FrZXVwCit7CisJU0VMRUNUIGluamVjdGlvbl9wb2ludHNfd2Fr ZXVwKCdyZXBhY2stY29uY3VycmVudGx5LWJlZm9yZS1sb2NrJyk7Cit9CitzdGVwIHMzX2VuZF90 eG4KK3sKKwlDT01NSVQ7Cit9CisKK3Nlc3Npb24gczQKK3N0ZXAgczRfd2FrZXVwCit7CisJU0VM RUNUIGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCdyZXBhY2stY29uY3VycmVudGx5LWJlZm9yZS1s b2NrJyk7Cit9CiAKICMgVGVzdCBpZiBkYXRhIGNoYW5nZXMgaW50cm9kdWNlZCB3aGlsZSBvbmUg c2Vzc2lvbiBpcyBwZXJmb3JtaW5nIFJFUEFDSwogIyBDT05DVVJSRU5UTFkgZmluZCB0aGVpciB3 YXkgaW50byB0aGUgdGFibGUuCkBAIC0xNDAsMyArMjAwLDUxIEBAIHBlcm11dGF0aW9uCiAJY2hl Y2syCiAJd2FrZXVwX2JlZm9yZV9sb2NrCiAJY2hlY2sxCisKKyMgQSB3YWl0ZXIgdGhhdCBkb2Vz IG5vdCBhbHJlYWR5IGhvbGQgYSBjb25mbGljdGluZyBsb2NrIG9uIHRoZSB0YWJsZSBpcworIyB3 YWl0cyB1bnRpbCBSRVBBQ0sgZmluaXNoZXMgYW5kIHRoZW4gYWNxdWlyZXMgaXRzIGxvY2sgKHNv ZnQtZGVhZGxvY2spLgorcGVybXV0YXRpb24KKwl3YWl0X2JlZm9yZV9sb2NrCisJYmVnaW5fdHhu CisJbG9ja190YWJsZV9hZQorCXMzX3dha2V1cAorCWVuZF90eG4KKworIyBBIHdhaXRlciB0aGF0 IGFscmVhZHkgaG9sZHMgQWNjZXNzU2hhcmVMb2NrIHRoZW4gd2FpdHMgZm9yIEFjY2Vzc0V4Y2x1 c2l2ZUxvY2sKKyMgYmVoaW5kIFJFUEFDSydzIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jay4KK3Bl cm11dGF0aW9uCisJczJfdGltZW91dF9mYXN0CisJd2FpdF9iZWZvcmVfbG9jaworCWJlZ2luX2Fu ZF9yZWFkCisJbG9ja190YWJsZV9hZSgqKQorCXMzX3dha2V1cAorCWVuZF90eG4KKworIyBTYW1l IHNoYXBlIGFzIGFib3ZlLCBidXQgdGhlIHdhaXRlciByZXF1ZXN0cyBTaGFyZVVwZGF0ZUV4Y2x1 c2l2ZUxvY2suCitwZXJtdXRhdGlvbgorCXMyX3RpbWVvdXRfZmFzdAorCXdhaXRfYmVmb3JlX2xv Y2sKKwliZWdpbl9hbmRfcmVhZAorCWxvY2tfdGFibGVfc3VlKCopCisJczNfd2FrZXVwCisJZW5k X3R4bgorCisjIFRocmVlLWJhY2tlbmQgZnV0dXJlIGRlYWRsb2NrOgorIworIyAtIHMxIGhvbGRz IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayBvbiByZXBhY2tfdGVzdCBhbmQgaGFzIGRlY2xhcmVk IGEgZnV0dXJlCisjICAgQWNjZXNzRXhjbHVzaXZlTG9jayBvbiBpdC4KKyMgLSBzMiBob2xkcyBB Y2Nlc3NTaGFyZUxvY2sgb24gcmVwYWNrX3Rlc3QuCisjIC0gczMgaG9sZHMgU2hhcmVVcGRhdGVF eGNsdXNpdmVMb2NrIG9uIHJlcGFja190ZXN0X3ksIHRoZW4gd2FpdHMgZm9yCisjICAgU2hhcmVV cGRhdGVFeGNsdXNpdmVMb2NrIG9uIHJlcGFja190ZXN0IGJlaGluZCBzMS4KKyMgLSBzMiB3YWl0 cyBmb3IgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrIG9uIHJlcGFja190ZXN0X3kgYmVoaW5kIHMz LgorcGVybXV0YXRpb24KKwlzMl90aW1lb3V0X2Zhc3QKKwl3YWl0X2JlZm9yZV9sb2NrCisJYmVn aW5fYW5kX3JlYWQKKwlzM19iZWdpbl90eG4KKwlzM19sb2NrX3RhYmxlX3lfc3VlCisJczNfbG9j a190YWJsZV9zdWUKKwlsb2NrX3RhYmxlX3lfc3VlKCopCisJczRfd2FrZXVwCisJZW5kX3R4bgor CXMzX2VuZF90eG4KLS0gCjIuNDMuMAoK --000000000000e27b8e06505d0dce--