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 1whF7F-0006Ki-37 for pgsql-bugs@arkaria.postgresql.org; Tue, 07 Jul 2026 23:22:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1whF6E-003LYA-1C for pgsql-bugs@arkaria.postgresql.org; Tue, 07 Jul 2026 23:21:11 +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 1whF6D-003LXy-2J for pgsql-bugs@lists.postgresql.org; Tue, 07 Jul 2026 23:21:10 +0000 Received: from mail-ot1-x32b.google.com ([2607:f8b0:4864:20::32b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1whF6C-000000003lF-0vS4 for pgsql-bugs@lists.postgresql.org; Tue, 07 Jul 2026 23:21:09 +0000 Received: by mail-ot1-x32b.google.com with SMTP id 46e09a7af769-7e9d7464b71so45511a34.0 for ; Tue, 07 Jul 2026 16:21:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783466468; cv=none; d=google.com; s=arc-20260327; b=OhyqSQzVVqXgyoYOispcMZy3Ta+TecdrOzKxWRqYr5wcojESBvLQ6ePHXHc8YoXGhR W5NANoWzrwV1W50W5QqWI1xCm9h76BNguOU2+IpVqA1g7lM5DEyVfknpgSOqJtJ+cxe5 +JzR1JJF069gP+hzl9kKYg+jl9QEdgFLMLsEJsd3Vb6w2zIvkRN4CCLKwqtJvTLGrXYv 8qL5wyDm38zhVNw1P9LV4tGW0wxD2kTUrEMIiBvVmL7x2Q0jNnm7bHsbV8Rt6pNf2BvR +WjNA0v0fOfOAm2xFX8xlZKYo+4CDLU99Hjped/HnesBegavaVbkQp2800QL6b3STiQq SEhA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=32U2RBPe+I/PsCKqXaD0bx5uZL/G3NUL35sj4X/ec1o=; fh=qENiIKx9ic0Tcun5tnG5AwZiuNlf30goJa6Cx//miuo=; b=g49LrxXNdB/KoTHpfPBPIdY0iwONKKINHdXiKyFuWA8b8SLfdhNA2MpCUK7jIydZJG 2Qd9tFaSYI9dIF3YYkBH28H7SYn059VeouCX5Vex5WburgUXH4lfcx2LptEUn7xhZy7O nsA5i0DHImnXrrvOXTWFcYav9MCSu6wZgqsr3GNJ3lNMJKkNBAM6Jj6YJmiiUF3/3793 jn9iQyrWeyHLkWH68fQJk6K+V1Mhlkjmy4upuq41NSR0Jp0+mWbvIF84KjiRtEDFUgsj PSoZ0qG158PwWZMNhU/m90tQpAyBqfEM6oorsEXkKPgYr6rq6r6jlyIdm7T0LOI+w1DM QMHA==; 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=1783466468; x=1784071268; 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=32U2RBPe+I/PsCKqXaD0bx5uZL/G3NUL35sj4X/ec1o=; b=UtHCItgYutRl9gC4sNmbSAdC3pEt2GnffNIufwxOzKUHCBBriCl9b8zN1a5LGyzfU1 Qi2SPnVZH2uiaqjYcQYF8W7HS7JSayRdC3VOrVcmJJtNyya0hgJ8lBiTmNv1za4EFcXd GLt9SYdV4JVjERPHAXyM6aa38AHYf9C+W48VS0beNyvu0wNL9sfs+ptTuij4GMGaVIFp VNGzwvITI39eQ3nbNbx1+wqxvg1Z7Q49f5qhBX1/fA2InIMiRw4GWjM2b0lR8F6iJ4Zd znbsUJwl7Zu4iJeXPkFRbsPEEN+I029VZvRKnrAcTP4K9XggmCHry6VrEKTgcNKpY6Pz IOkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783466468; x=1784071268; 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=32U2RBPe+I/PsCKqXaD0bx5uZL/G3NUL35sj4X/ec1o=; b=T3Yo0+kpxotFuw/X25lNny5ymww54FzwDmvJIbXJmN0giJxZByc03YD+9BImcZEJuV 75MNDv9Y4eW4thHTdF0aL1gR5zPEQn5N6Rhta/I41zM/Z8lSisScYRdfw//8MZTBMJ2K S1PvUULmWugIQ0C0ep9/nbRGbipmtFmVGFBGhna+2BBZ1DtsomRbCypguOpd0SDrGm8w DDmu83d73hNPVKlJUg7CVLN57AhqyW9ZN2UF3R6SMSimiBgAuc+A5Oe8AACJ0WzvzqzK WE+icGFqZqaS4hQjulrmbeaiR0t6t8EMOvve96wqqPFN4Mmo0fYpAPxn9y96ZF7vsk/d a6Jw== X-Forwarded-Encrypted: i=1; AFNElJ9AtP4b2wI/CVAyj9PQrPnmxuJJAlhHnYJhvKhRWbe91bFuHJd4FLC+lxq8TjGcsZlLOn1fSAc0MDaq@lists.postgresql.org X-Gm-Message-State: AOJu0YwWzF1glwqEq+Io0JRUrZW4CGNDjg4Ckohr7661k+3NV8gP3shS Mn4AzzlSiYWrU0Yrq4R0WR8ntCh4SCUua3XiOVwUtx8S9XsOdL4a4SxX0SxzO6fsPwq7P5pv+Rh zL2MGqf+CJK6C+q8z3SnKBaxS2SFX+S4= X-Gm-Gg: AfdE7cnFMOkEM1BnG47oh/MPXjmim1Vs/Qp82ybE6QFc3Xwre1sbsb+9cCm719cNPJ9 Ff4Xd5/LH63oQ0syy5oTFSmmKSrtBgGBs6lmEVGR88QUFgBtPfcAWnipFoMgbn1sesJRjrQMo/K UjZVnbUZuocN7a3wEe44CbM2xnhT37KInnRkGOereM8l57tB9SePQGnFRksGHO+WPFbANw5j6H0 edcgJKo4o89goGbJYPphoYDtLC/j3t9TAfmarNxT6OAj3f1Knw7SNKMqLJrvDQaPEMVkL3D3dQo iOvhddb2 X-Received: by 2002:a05:6820:f015:b0:6a1:7ade:766f with SMTP id 006d021491bc7-6a36dab7cd3mr49863eaf.68.1783466467745; Tue, 07 Jul 2026 16:21:07 -0700 (PDT) MIME-Version: 1.0 References: <19382-4c2060ffee72759b@postgresql.org> <674982B4-2824-433D-AFC4-CCBF410D9424@yandex-team.ru> In-Reply-To: From: surya poondla Date: Tue, 7 Jul 2026 16:20:55 -0700 X-Gm-Features: AVVi8CcAVchpFff1UqfB_Bh6FaAqE2q3jEr6ZRovosU-5jzBV0IX7GsJoKlhAx8 Message-ID: Subject: Re: BUG #19382: Server crash at __nss_database_lookup To: Zsolt Parragi Cc: songjinzhou , dllggyx , pgsql-bugs , Andrey Borodin Content-Type: multipart/mixed; boundary="000000000000477c1806560da5f8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000477c1806560da5f8 Content-Type: multipart/alternative; boundary="000000000000477c1706560da5f6" --000000000000477c1706560da5f6 Content-Type: text/plain; charset="UTF-8" Hi Zsolt, Thanks for the testing, both issues you reported were real; v10 (attached) fixes them. Case 1 (plain "record" still crashed): the snapshot keyed off the variable's declared type, which is just RECORDOID for a RECORD variable, so nothing was tracked. v10 uses the actual composite type adopted from the assigned value (er_typeid), so "r record := ROW(...)::foo" is now covered. Case 2 (reassignment wrongly rejected): a fast path only re-checked the outermost type, so a stale nested entry survived a reassignment and caused a false positive. v10 refreshes the snapshot on every whole-record assignment, so reassigning with fresh data after an ALTER now succeeds (matching master), while the same sequence without the reassignment still errors. While testing, I also found a related crash the earlier versions missed: a composite reached through a container (e.g. a field of type "t_comp[]") wasn't tracked, because the recursion stopped at the array. An ALTER TYPE on the element type then crashed in record_out() and caused a connection timeout. v10 iterates domain/array/range/multirange layers to reach the composite element. v10 adds regression coverage for all of the above cases. --000000000000477c1706560da5f6 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Zsolt,

Thanks for the testing, both issues you r= eported were real; v10 (attached) fixes them.

Case 1 (plain "re= cord" still crashed): the snapshot keyed off the variable's declar= ed type, which is just RECORDOID for a RECORD variable, so nothing was trac= ked.=C2=A0
v10 uses the actual composite type adopted from the assigned= value (er_typeid), so "r record :=3D ROW(...)::foo" is now cover= ed.

Case 2 (reassignment wrongly rejected): a fast= path only re-checked the outermost type, so a stale nested entry survived = a reassignment and caused a false positive.=C2=A0
v10 refreshes t= he snapshot on every whole-record assignment, so reassigning with fresh dat= a after an ALTER now succeeds (matching master), while the same sequence wi= thout the reassignment still errors.

While testing, I also found a r= elated crash the earlier versions missed: a composite reached through a con= tainer (e.g. a field of type "t_comp[]") wasn't tracked, beca= use the recursion stopped at the array. An ALTER TYPE on the element type t= hen crashed in record_out() and caused a connection timeout.=C2=A0
v10 iterates domain/array/range/multirange layers to reach the composite = element.

v10 adds regression coverage for all of the above cases.
--000000000000477c1706560da5f6-- --000000000000477c1806560da5f8 Content-Type: application/octet-stream; name="v10-Fix-bug-19382-server-crash-when-ALTER-TYPE-is-used-m.patch" Content-Disposition: attachment; filename="v10-Fix-bug-19382-server-crash-when-ALTER-TYPE-is-used-m.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrb9f7br0 RnJvbSA4ODcyYjQ0ZjM1ZGM0ZjdiNmVjYjBmNzdlMDM0NTAwZmVjNWYwZmEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBzcG9vbmRsYSA8c19wb29uZGxhQGFwcGxlLmNvbT4KRGF0ZTog RnJpLCAyMyBKYW4gMjAyNiAxNzoyODo1NCAtMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEwXSBGaXgg KGJ1ZyAjMTkzODIpIHNlcnZlciBjcmFzaCB3aGVuIEFMVEVSIFRZUEUgaXMgdXNlZAogbWlkLXRy YW5zYWN0aW9uIGluIFBML3BnU1FMCgpXaGVuIEFMVEVSIFRZUEUgY2hhbmdlcyBhIGNvbXBvc2l0 ZSB0eXBlJ3MgY29sdW1uIHR5cGVzIHdpdGhpbiBhCnRyYW5zYWN0aW9uLCBQTC9wZ1NRTCByZWNv cmQgdmFyaWFibGVzIHRoYXQgd2VyZSBwb3B1bGF0ZWQgYmVmb3JlIHRoZQpBTFRFUiBzdGlsbCBo b2xkIGRhdGEgaW4gdGhlIG9sZCBmb3JtYXQuICBSZWFkaW5nIHN1Y2ggYSByZWNvcmQgbGF0ZXIK KFJFVFVSTiwgUkVUVVJOIE5FWFQsIFJBSVNFLCBldGMuKSBjcmFzaGVzIGJlY2F1c2UgdGhlIG91 dHB1dCBmdW5jdGlvbnMKaW50ZXJwcmV0IHRoZSBzdG9yZWQgYnl0ZXMgdXNpbmcgdGhlIG5ldyB0 eXBlIGRlZmluaXRpb24uICBUaGUgY3Jhc2gKbWFuaWZlc3RlZCBhcyBhIHNlZ21lbnRhdGlvbiBm YXVsdCBpbiByZWNvcmRfb3V0KCkgd2hlbiBpdCBhdHRlbXB0ZWQgdG8KaW50ZXJwcmV0IGludGVn ZXIgZGF0YSBhcyBhIHRleHQgcG9pbnRlci4KClRoZSBmaXggc25hcHNob3RzIHR1cERlc2NfaWRl bnRpZmllciB2YWx1ZXMgZm9yIGFsbCBjb21wb3NpdGUgdHlwZXMKcmVhY2hhYmxlIGZyb20gYSBy ZWNvcmQgdmFyaWFibGUncyB0eXBlIGF0IGFzc2lnbm1lbnQgdGltZSwgYW5kIGNvbXBhcmVzCnRo ZW0gYWdhaW5zdCB0aGUgY3VycmVudCB0eXBlIGNhY2hlIHZhbHVlcyBiZWZvcmUgdGhlIHJlY29y ZCBpcyByZWFkLiAgSWYKYW55IGlkZW50aWZpZXIgaGFzIGNoYW5nZWQsIGFuIGVycm9yIGlzIHJh aXNlZCBpbnN0ZWFkIG9mIHJpc2tpbmcgYSBjcmFzaC4KCkRldGFpbHM6CjEuIFRoZSB0eXBlIHRy ZWUgaXMgd2Fsa2VkIGZyb20gYW4gZWZmZWN0aXZlIHJvb3QgdHlwZS4gIEZvciBhIHZhcmlhYmxl CmRlY2xhcmVkIGFzIGEgbmFtZWQgY29tcG9zaXRlIHRoZSBkZWNsYXJlZCB0eXBlIGlzIHVzZWQ7 IGZvciBhIHZhcmlhYmxlCmRlY2xhcmVkIGFzIGdlbmVyaWMgUkVDT1JEIHRoZSBhY3R1YWwgdHlw ZSBhZG9wdGVkIGZyb20gdGhlIGFzc2lnbmVkCnZhbHVlIChlcl90eXBlaWQpIGlzIHVzZWQsIHNv ICJyIHJlY29yZCA6PSBST1coLi4uKTo6Zm9vIiBpcyBjb3ZlcmVkLgpUcnVseSBhbm9ueW1vdXMg cm93dHlwZXMgYXJlIG5vdCB2ZXJzaW9uZWQgYW5kIGFyZSBsZWZ0IHVuY2hlY2tlZC4KCjIuIFRo ZSB3YWxrIGRlc2NlbmRzIHRocm91Z2ggZG9tYWlucyBhbmQgdGhyb3VnaCBjb250YWluZXIgdHlw ZXMgKGFycmF5cywKcmFuZ2VzLCBhbmQgbXVsdGlyYW5nZXMpIHRvIHJlYWNoIGNvbXBvc2l0ZSBl bGVtZW50IHR5cGVzLCBzbyBhIGZpZWxkCnN1Y2ggYXMgInRfY29tcFtdIiBpcyB0cmFja2VkIGFu ZCBhbiBBTFRFUiBUWVBFIG9uIHRfY29tcCBpcyBkZXRlY3RlZC4KCjMuIFRoZSBzbmFwc2hvdCBp cyByZWZyZXNoZWQgb24gZXZlcnkgd2hvbGUtcmVjb3JkIGFzc2lnbm1lbnQsIGluY2x1ZGluZwp0 aGUgaW4tcGxhY2UgZXhwYW5kZWRfcmVjb3JkX3NldF90dXBsZSBwYXRocywgc28gdGhhdCByZWFz c2lnbmluZyBhCnJlY29yZCB3aXRoIGZyZXNoIGRhdGEgYWZ0ZXIgYW4gQUxURVIgVFlQRSBpcyBj b3JyZWN0bHkgYWxsb3dlZCByYXRoZXIKdGhhbiByZWplY3RlZC4KClRoZSBvdXRlcm1vc3QgdHlw ZSBpcyBhZGRpdGlvbmFsbHkgY2hlY2tlZCB2aWEgdGhlIEV4cGFuZGVkUmVjb3JkJ3MKZXJfdHVw ZGVzY19pZCwgd2hpY2ggY292ZXJzIGZpZWxkLWJ5LWZpZWxkIGFzc2lnbm1lbnQgYW5kIFNFTEVD VCBJTlRPCnBhdGhzIHRoYXQgZG8gbm90IHJlYnVpbGQgdGhlIHJlY29yZCB3aG9sZXNhbGUuCi0t LQogLi4uL3BscGdzcWwvc3JjL2V4cGVjdGVkL3BscGdzcWxfcmVjb3JkLm91dCAgIHwgMjYyICsr KysrKysrKysrKysrCiBzcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhlYy5jICAgICAgICAgICAgICAg ICAgfCAzMjQgKysrKysrKysrKysrKysrKystCiBzcmMvcGwvcGxwZ3NxbC9zcmMvcGxwZ3NxbC5o ICAgICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL3BsL3BscGdzcWwvc3JjL3NxbC9wbHBnc3Fs X3JlY29yZC5zcWwgICAgIHwgMjM2ICsrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgODMw IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmMvcGwvcGxwZ3Nx bC9zcmMvZXhwZWN0ZWQvcGxwZ3NxbF9yZWNvcmQub3V0IGIvc3JjL3BsL3BscGdzcWwvc3JjL2V4 cGVjdGVkL3BscGdzcWxfcmVjb3JkLm91dAppbmRleCA1MTFmOWUwM2M4NS4uMzhhYTE2MmJkZWEg MTAwNjQ0Ci0tLSBhL3NyYy9wbC9wbHBnc3FsL3NyYy9leHBlY3RlZC9wbHBnc3FsX3JlY29yZC5v dXQKKysrIGIvc3JjL3BsL3BscGdzcWwvc3JjL2V4cGVjdGVkL3BscGdzcWxfcmVjb3JkLm91dApA QCAtODg1LDMgKzg4NSwyNjUgQEAgdGFibGUgdHdvX2ludDhzX3RhYjsKICAoNDIsNDIpCiAoMSBy b3cpCiAKKy0tIFRlc3RzIGZvciBidWcgIzE5MzgyOiBzZXJ2ZXIgY3Jhc2ggd2hlbiBBTFRFUiBU WVBFIGlzIHVzZWQgbWlkLXRyYW5zYWN0aW9uCistLSBpbiBQTC9wZ1NRTC4gUmVjb3JkIHZhcmlh YmxlcyBwb3B1bGF0ZWQgYmVmb3JlIEFMVEVSIFRZUEUgbXVzdCBub3QgYmUKKy0tIHJldHVybmVk LCBhcyB0aGUgc3RvcmVkIGRhdGEgbm8gbG9uZ2VyIG1hdGNoZXMgdGhlIGN1cnJlbnQgdHlwZSBk ZWZpbml0aW9uLgorLS0gQ2FzZSAxOiBEaXJlY3QgY29tcG9zaXRlIHR5cGUgY2hhbmdlIChJTlQg LT4gVEVYVCkKK2NyZWF0ZSB0eXBlIGJ1ZzE5MzgyX2ZvbyBhcyAoYSBpbnQsIGIgaW50KTsKK2Ny ZWF0ZSBmdW5jdGlvbiBidWcxOTM4Ml90ZXN0X2RpcmVjdCgpIHJldHVybnMgcmVjb3JkIGFzICQk CitkZWNsYXJlIHIgYnVnMTkzODJfZm9vIDo9IHJvdygxMjMsIHBvd2VyKDIsIDMwKSk7CitiZWdp bgorICAgIGFsdGVyIHR5cGUgYnVnMTkzODJfZm9vIGFsdGVyIGF0dHJpYnV0ZSBiIHR5cGUgdGV4 dDsKKyAgICByZXR1cm4gcjsKK2VuZDsKKyQkIGxhbmd1YWdlIHBscGdzcWw7CitzZWxlY3QgYnVn MTkzODJfdGVzdF9kaXJlY3QoKTsKK0VSUk9SOiAgY2Fubm90IHJldHVybiByZWNvcmQgdmFyaWFi bGUgInIiIGFmdGVyIGNvbXBvc2l0ZSB0eXBlICJidWcxOTM4Ml9mb28iIHdhcyBhbHRlcmVkCitD T05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9kaXJlY3QoKSBsaW5lIDUg YXQgUkVUVVJOCitkcm9wIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfZGlyZWN0KCk7Citkcm9wIHR5 cGUgYnVnMTkzODJfZm9vIGNhc2NhZGU7CistLSBDYXNlIDI6IE5lc3RlZCBjb21wb3NpdGUgdHlw ZSBjaGFuZ2UKK2NyZWF0ZSB0eXBlIGJ1ZzE5MzgyX2lubmVyIGFzICh4IGludCwgeSBpbnQpOwor Y3JlYXRlIHR5cGUgYnVnMTkzODJfb3V0ZXIgYXMgKGEgaW50LCBiIGJ1ZzE5MzgyX2lubmVyKTsK K2NyZWF0ZSBmdW5jdGlvbiBidWcxOTM4Ml90ZXN0X25lc3RlZCgpIHJldHVybnMgcmVjb3JkIGFz ICQkCitkZWNsYXJlIHIgYnVnMTkzODJfb3V0ZXI7CitiZWdpbgorICAgIHIgOj0gcm93KDEsIHJv dygxMCwgcG93ZXIoMiwgMzApOjppbnQ0KTo6YnVnMTkzODJfaW5uZXIpOjpidWcxOTM4Ml9vdXRl cjsKKyAgICBhbHRlciB0eXBlIGJ1ZzE5MzgyX2lubmVyIGFsdGVyIGF0dHJpYnV0ZSB5IHR5cGUg dGV4dDsKKyAgICByZXR1cm4gcjsKK2VuZDsKKyQkIGxhbmd1YWdlIHBscGdzcWw7CitzZWxlY3Qg YnVnMTkzODJfdGVzdF9uZXN0ZWQoKTsKK0VSUk9SOiAgY2Fubm90IHJldHVybiByZWNvcmQgdmFy aWFibGUgInIiIGFmdGVyIGNvbXBvc2l0ZSB0eXBlICJidWcxOTM4Ml9pbm5lciIgd2FzIGFsdGVy ZWQKK0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiBidWcxOTM4Ml90ZXN0X25lc3RlZCgpIGxp bmUgNiBhdCBSRVRVUk4KK2Ryb3AgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9uZXN0ZWQoKTsKK2Ry b3AgdHlwZSBidWcxOTM4Ml9vdXRlciBjYXNjYWRlOworZHJvcCB0eXBlIGJ1ZzE5MzgyX2lubmVy IGNhc2NhZGU7CistLSBDYXNlIDM6IE9VVCBwYXJhbWV0ZXIKK2NyZWF0ZSB0eXBlIGJ1ZzE5Mzgy X2ZvbzEgYXMgKGEgaW50LCBiIGludCk7CitjcmVhdGUgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9v dXQob3V0IHIxIGJ1ZzE5MzgyX2ZvbzEpIGFzICQkCitiZWdpbgorICAgIHIxIDo9IHJvdygxLCAy KTsKKyAgICBhbHRlciB0eXBlIGJ1ZzE5MzgyX2ZvbzEgYWx0ZXIgYXR0cmlidXRlIGIgdHlwZSB0 ZXh0OworICAgIHJldHVybjsKK2VuZDsKKyQkIGxhbmd1YWdlIHBscGdzcWw7CitzZWxlY3QgYnVn MTkzODJfdGVzdF9vdXQoKTsKK0VSUk9SOiAgY2Fubm90IHJldHVybiByZWNvcmQgdmFyaWFibGUg InIxIiBhZnRlciBjb21wb3NpdGUgdHlwZSAiYnVnMTkzODJfZm9vMSIgd2FzIGFsdGVyZWQKK0NP TlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiBidWcxOTM4Ml90ZXN0X291dCgpIGxpbmUgNSBhdCBS RVRVUk4KK2Ryb3AgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9vdXQoKTsKK2Ryb3AgdHlwZSBidWcx OTM4Ml9mb28xIGNhc2NhZGU7CistLSBDYXNlIDQ6IE5vIEFMVEVSIFRZUEUgKGJhc2VsaW5lIOKA lCBtdXN0IG5vdCBlcnJvcikKK2NyZWF0ZSB0eXBlIGJ1ZzE5MzgyX2ZvbzIgYXMgKGEgaW50LCBi IGludCk7CitjcmVhdGUgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9iYXNlbGluZSgpIHJldHVybnMg YnVnMTkzODJfZm9vMiBhcyAkJAorZGVjbGFyZSByIGJ1ZzE5MzgyX2ZvbzIgOj0gcm93KDEsIDIp OworYmVnaW4KKyAgICByZXR1cm4gcjsKK2VuZDsKKyQkIGxhbmd1YWdlIHBscGdzcWw7CitzZWxl Y3QgYnVnMTkzODJfdGVzdF9iYXNlbGluZSgpOworIGJ1ZzE5MzgyX3Rlc3RfYmFzZWxpbmUgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAoMSwyKQorKDEgcm93KQorCitkcm9wIGZ1bmN0aW9u IGJ1ZzE5MzgyX3Rlc3RfYmFzZWxpbmUoKTsKK2Ryb3AgdHlwZSBidWcxOTM4Ml9mb28yOworLS0g Q2FzZSA1OiBGaWVsZC1ieS1maWVsZCBhc3NpZ25tZW50IChkb3Qgbm90YXRpb24pCitjcmVhdGUg dHlwZSBidWcxOTM4Ml9mb28zIGFzIChhIGludCwgYiBpbnQpOworY3JlYXRlIGZ1bmN0aW9uIGJ1 ZzE5MzgyX3Rlc3RfZmllbGRfYXNzaWduKCkgcmV0dXJucyByZWNvcmQgYXMgJCQKK2RlY2xhcmUg ciBidWcxOTM4Ml9mb28zOworYmVnaW4KKyAgICByLmEgOj0gMTIzOworICAgIHIuYiA6PSBwb3dl cigyLCAzMCk6OmludDQ7CisgICAgYWx0ZXIgdHlwZSBidWcxOTM4Ml9mb28zIGFsdGVyIGF0dHJp YnV0ZSBiIHR5cGUgdGV4dDsKKyAgICByZXR1cm4gcjsKK2VuZDsKKyQkIGxhbmd1YWdlIHBscGdz cWw7CitzZWxlY3QgYnVnMTkzODJfdGVzdF9maWVsZF9hc3NpZ24oKTsKK0VSUk9SOiAgY2Fubm90 IHJldHVybiByZWNvcmQgdmFyaWFibGUgInIiIGFmdGVyIGNvbXBvc2l0ZSB0eXBlICJidWcxOTM4 Ml9mb28zIiB3YXMgYWx0ZXJlZAorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGJ1ZzE5Mzgy X3Rlc3RfZmllbGRfYXNzaWduKCkgbGluZSA3IGF0IFJFVFVSTgorZHJvcCBmdW5jdGlvbiBidWcx OTM4Ml90ZXN0X2ZpZWxkX2Fzc2lnbigpOworZHJvcCB0eXBlIGJ1ZzE5MzgyX2ZvbzMgY2FzY2Fk ZTsKKy0tIENhc2UgNjogU0VMRUNUIElOVE8gaW5kaXZpZHVhbCBmaWVsZHMKK2NyZWF0ZSB0eXBl IGJ1ZzE5MzgyX2ZvbzQgYXMgKGEgaW50LCBiIGludCk7CitjcmVhdGUgdGFibGUgYnVnMTkzODJf dGJsIChhIGludCwgYiBpbnQpOworaW5zZXJ0IGludG8gYnVnMTkzODJfdGJsIHZhbHVlcyAoMTIz LCBwb3dlcigyLCAzMCk6OmludDQpOworY3JlYXRlIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3Rfc2Vs ZWN0X2ludG9fZmllbGQoKSByZXR1cm5zIHJlY29yZCBhcyAkJAorZGVjbGFyZSByIGJ1ZzE5Mzgy X2ZvbzQ7CitiZWdpbgorICAgIHNlbGVjdCBhLCBiIGludG8gci5hLCByLmIgZnJvbSBidWcxOTM4 Ml90Ymw7CisgICAgYWx0ZXIgdHlwZSBidWcxOTM4Ml9mb280IGFsdGVyIGF0dHJpYnV0ZSBiIHR5 cGUgdGV4dDsKKyAgICByZXR1cm4gcjsKK2VuZDsKKyQkIGxhbmd1YWdlIHBscGdzcWw7CitzZWxl Y3QgYnVnMTkzODJfdGVzdF9zZWxlY3RfaW50b19maWVsZCgpOworRVJST1I6ICBjYW5ub3QgcmV0 dXJuIHJlY29yZCB2YXJpYWJsZSAiciIgYWZ0ZXIgY29tcG9zaXRlIHR5cGUgImJ1ZzE5MzgyX2Zv bzQiIHdhcyBhbHRlcmVkCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gYnVnMTkzODJfdGVz dF9zZWxlY3RfaW50b19maWVsZCgpIGxpbmUgNiBhdCBSRVRVUk4KK2Ryb3AgZnVuY3Rpb24gYnVn MTkzODJfdGVzdF9zZWxlY3RfaW50b19maWVsZCgpOworZHJvcCB0YWJsZSBidWcxOTM4Ml90Ymw7 Citkcm9wIHR5cGUgYnVnMTkzODJfZm9vNCBjYXNjYWRlOworLS0gQ2FzZSA3OiBSQUlTRSBOT1RJ Q0Ugd2l0aCByZWNvcmQgdmFyaWFibGUgKGV4ZWNfZXZhbF9kYXR1bSBwYXRoKQorY3JlYXRlIHR5 cGUgYnVnMTkzODJfZm9vNSBhcyAoYSBpbnQsIGIgaW50KTsKK2NyZWF0ZSBmdW5jdGlvbiBidWcx OTM4Ml90ZXN0X2V2YWxfZGF0dW0oKSByZXR1cm5zIHZvaWQgYXMgJCQKK2RlY2xhcmUgciBidWcx OTM4Ml9mb281OworYmVnaW4KKyAgICByLmIgOj0gcG93ZXIoMiwgMzApOjppbnQ0OworICAgIGFs dGVyIHR5cGUgYnVnMTkzODJfZm9vNSBhbHRlciBhdHRyaWJ1dGUgYiB0eXBlIHRleHQ7CisgICAg cmFpc2Ugbm90aWNlICdyID0gJScsIHI7CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBnc3FsOworc2Vs ZWN0IGJ1ZzE5MzgyX3Rlc3RfZXZhbF9kYXR1bSgpOworRVJST1I6ICBjYW5ub3QgcmV0dXJuIHJl Y29yZCB2YXJpYWJsZSAiciIgYWZ0ZXIgY29tcG9zaXRlIHR5cGUgImJ1ZzE5MzgyX2ZvbzUiIHdh cyBhbHRlcmVkCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9ldmFs X2RhdHVtKCkgbGluZSA2IGF0IFJBSVNFCitkcm9wIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfZXZh bF9kYXR1bSgpOworZHJvcCB0eXBlIGJ1ZzE5MzgyX2ZvbzUgY2FzY2FkZTsKKy0tIENhc2UgODog R2VuZXJpYyBSRUNPUkQgdmFyaWFibGUgYXNzaWduZWQgdmlhIFJPVzo6Zm9vIGNhc3QKKy0tIFRo ZSBkZWNsYXJlZCB0eXBlIGlzIFJFQ09SRE9JRDsgZWZmZWN0aXZlIHR5cGUgaXMgZGlzY292ZXJl ZCBmcm9tIHRoZQorLS0gYXNzaWduZWQgdmFsdWUncyBlcl90eXBlaWQuICBNdXN0IGVycm9yLCBu b3QgY3Jhc2guCitjcmVhdGUgdHlwZSBidWcxOTM4Ml9mb282IGFzIChhIGludCwgYiBpbnQpOwor Y3JlYXRlIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfZ2VuZXJpY19yZWNvcmQoKSByZXR1cm5zIHJl Y29yZCBhcyAkJAorZGVjbGFyZSByIHJlY29yZDsKK2JlZ2luCisgICAgciA6PSByb3coMTIzLCBw b3dlcigyLCAzMCk6OmludDQpOjpidWcxOTM4Ml9mb282OworICAgIGFsdGVyIHR5cGUgYnVnMTkz ODJfZm9vNiBhbHRlciBhdHRyaWJ1dGUgYiB0eXBlIHRleHQ7CisgICAgcmV0dXJuIHI7CitlbmQ7 CiskJCBsYW5ndWFnZSBwbHBnc3FsOworc2VsZWN0IGJ1ZzE5MzgyX3Rlc3RfZ2VuZXJpY19yZWNv cmQoKTsKK0VSUk9SOiAgY2Fubm90IHJldHVybiByZWNvcmQgdmFyaWFibGUgInIiIGFmdGVyIGNv bXBvc2l0ZSB0eXBlICJidWcxOTM4Ml9mb282IiB3YXMgYWx0ZXJlZAorQ09OVEVYVDogIFBML3Bn U1FMIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfZ2VuZXJpY19yZWNvcmQoKSBsaW5lIDYgYXQgUkVU VVJOCitkcm9wIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfZ2VuZXJpY19yZWNvcmQoKTsKK2Ryb3Ag dHlwZSBidWcxOTM4Ml9mb282IGNhc2NhZGU7CistLSBDYXNlIDk6IEdlbmVyaWMgUkVDT1JEIHdp dGggbmVzdGVkIGNvbXBvc2l0ZSBhbHRlcgorY3JlYXRlIHR5cGUgYnVnMTkzODJfaW5uZXIyIGFz ICh4IGludCwgeSBpbnQpOworY3JlYXRlIHR5cGUgYnVnMTkzODJfb3V0ZXIyIGFzIChhIGludCwg YiBidWcxOTM4Ml9pbm5lcjIpOworY3JlYXRlIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfZ2VuZXJp Y19uZXN0ZWQoKSByZXR1cm5zIHJlY29yZCBhcyAkJAorZGVjbGFyZSByIHJlY29yZDsKK2JlZ2lu CisgICAgciA6PSByb3coMSwgcm93KDEwLCBwb3dlcigyLCAzMCk6OmludDQpOjpidWcxOTM4Ml9p bm5lcjIpOjpidWcxOTM4Ml9vdXRlcjI7CisgICAgYWx0ZXIgdHlwZSBidWcxOTM4Ml9pbm5lcjIg YWx0ZXIgYXR0cmlidXRlIHkgdHlwZSB0ZXh0OworICAgIHJldHVybiByOworZW5kOworJCQgbGFu Z3VhZ2UgcGxwZ3NxbDsKK3NlbGVjdCBidWcxOTM4Ml90ZXN0X2dlbmVyaWNfbmVzdGVkKCk7CitF UlJPUjogIGNhbm5vdCByZXR1cm4gcmVjb3JkIHZhcmlhYmxlICJyIiBhZnRlciBjb21wb3NpdGUg dHlwZSAiYnVnMTkzODJfaW5uZXIyIiB3YXMgYWx0ZXJlZAorQ09OVEVYVDogIFBML3BnU1FMIGZ1 bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfZ2VuZXJpY19uZXN0ZWQoKSBsaW5lIDYgYXQgUkVUVVJOCitk cm9wIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfZ2VuZXJpY19uZXN0ZWQoKTsKK2Ryb3AgdHlwZSBi dWcxOTM4Ml9vdXRlcjIgY2FzY2FkZTsKK2Ryb3AgdHlwZSBidWcxOTM4Ml9pbm5lcjIgY2FzY2Fk ZTsKKy0tIENhc2UgMTA6IFdob2xlLXJlY29yZCByZWFzc2lnbm1lbnQgYWZ0ZXIgaW5uZXItdHlw ZSBhbHRlci4KKy0tIFRoZSBzZWNvbmQgYXNzaWdubWVudCBidWlsZHMgZnJlc2ggZGF0YSBtYXRj aGluZyB0aGUgcG9zdC1BTFRFUiB0eXBlOworLS0gdGhlIHNuYXBzaG90IG11c3QgcmVmcmVzaCBz byB0aGUgcmVhc3NpZ25tZW50IHN1Y2NlZWRzLgorY3JlYXRlIHR5cGUgYnVnMTkzODJfaW5uZXIz IGFzICh4IGludCwgeSBpbnQpOworY3JlYXRlIHR5cGUgYnVnMTkzODJfb3V0ZXIzIGFzIChhIGlu dCwgYiBidWcxOTM4Ml9pbm5lcjMpOworY3JlYXRlIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfcmVh c3NpZ24oKSByZXR1cm5zIGJ1ZzE5MzgyX291dGVyMyBhcyAkJAorZGVjbGFyZSByIGJ1ZzE5Mzgy X291dGVyMzsKK2JlZ2luCisgICAgciA6PSByb3coMSwgcm93KDEwLCAyMCk6OmJ1ZzE5MzgyX2lu bmVyMyk6OmJ1ZzE5MzgyX291dGVyMzsKKyAgICBhbHRlciB0eXBlIGJ1ZzE5MzgyX2lubmVyMyBh bHRlciBhdHRyaWJ1dGUgeSB0eXBlIHRleHQ7CisgICAgciA6PSByb3coMSwgcm93KDEwLCAnaGVs bG8nKTo6YnVnMTkzODJfaW5uZXIzKTo6YnVnMTkzODJfb3V0ZXIzOworICAgIHJldHVybiByOwor ZW5kOworJCQgbGFuZ3VhZ2UgcGxwZ3NxbDsKK3NlbGVjdCBidWcxOTM4Ml90ZXN0X3JlYXNzaWdu KCk7CisgYnVnMTkzODJfdGVzdF9yZWFzc2lnbiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICgxLCIoMTAsaGVsbG8pIikKKygxIHJvdykKKworZHJvcCBmdW5jdGlvbiBidWcxOTM4Ml90ZXN0 X3JlYXNzaWduKCk7Citkcm9wIHR5cGUgYnVnMTkzODJfb3V0ZXIzIGNhc2NhZGU7Citkcm9wIHR5 cGUgYnVnMTkzODJfaW5uZXIzIGNhc2NhZGU7CistLSBDYXNlIDExOiBBbm9ueW1vdXMgcm93dHlw ZSBiYXNlbGluZSAoUkVDT1JET0lEIHdpdGggbm8gOjpmb28gY2FzdCkuCistLSBOb24tdmVyc2lv bmFibGUgcm93dHlwZXMgbXVzdCBub3QgdHJpZ2dlciBhIGZhbHNlIHBvc2l0aXZlLgorY3JlYXRl IGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfYW5vbl9iYXNlbGluZSgpIHJldHVybnMgcmVjb3JkIGFz ICQkCitkZWNsYXJlIHIgcmVjb3JkOworYmVnaW4KKyAgICBzZWxlY3QgMSBhcyBhLCAyIGFzIGIg aW50byByOworICAgIHJldHVybiByOworZW5kOworJCQgbGFuZ3VhZ2UgcGxwZ3NxbDsKK3NlbGVj dCBidWcxOTM4Ml90ZXN0X2Fub25fYmFzZWxpbmUoKTsKKyBidWcxOTM4Ml90ZXN0X2Fub25fYmFz ZWxpbmUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICgxLDIpCisoMSByb3cpCisK K2Ryb3AgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9hbm9uX2Jhc2VsaW5lKCk7CistLSBDYXNlIDEy OiBWYXJpYWJsZS10by12YXJpYWJsZSBjb3B5IGFmdGVyIGlubmVyLXR5cGUgYWx0ZXIuCistLSBS ZWFkaW5nIHIxIGFzIGFuIHJ2YWx1ZSBtdXN0IGRldGVjdCB0aGUgc3RhbGUgbmVzdGVkIHR5cGUu CitjcmVhdGUgdHlwZSBidWcxOTM4Ml9pbm5lcjQgYXMgKHggaW50LCB5IGludCk7CitjcmVhdGUg dHlwZSBidWcxOTM4Ml9vdXRlcjQgYXMgKGEgaW50LCBiIGJ1ZzE5MzgyX2lubmVyNCk7CitjcmVh dGUgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF92YXJfY29weSgpIHJldHVybnMgYnVnMTkzODJfb3V0 ZXI0IGFzICQkCitkZWNsYXJlIHIxIGJ1ZzE5MzgyX291dGVyNDsgcjIgYnVnMTkzODJfb3V0ZXI0 OworYmVnaW4KKyAgICByMSA6PSByb3coMSwgcm93KDEwLCBwb3dlcigyLCAzMCk6OmludDQpOjpi dWcxOTM4Ml9pbm5lcjQpOjpidWcxOTM4Ml9vdXRlcjQ7CisgICAgYWx0ZXIgdHlwZSBidWcxOTM4 Ml9pbm5lcjQgYWx0ZXIgYXR0cmlidXRlIHkgdHlwZSB0ZXh0OworICAgIHIyIDo9IHIxOworICAg IHJldHVybiByMjsKK2VuZDsKKyQkIGxhbmd1YWdlIHBscGdzcWw7CitzZWxlY3QgYnVnMTkzODJf dGVzdF92YXJfY29weSgpOworRVJST1I6ICBjYW5ub3QgcmV0dXJuIHJlY29yZCB2YXJpYWJsZSAi cjEiIGFmdGVyIGNvbXBvc2l0ZSB0eXBlICJidWcxOTM4Ml9pbm5lcjQiIHdhcyBhbHRlcmVkCitD T05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF92YXJfY29weSgpIGxpbmUg NiBhdCBhc3NpZ25tZW50Citkcm9wIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfdmFyX2NvcHkoKTsK K2Ryb3AgdHlwZSBidWcxOTM4Ml9vdXRlcjQgY2FzY2FkZTsKK2Ryb3AgdHlwZSBidWcxOTM4Ml9p bm5lcjQgY2FzY2FkZTsKKy0tIENhc2UgMTM6IFJBSVNFIE5PVElDRSB3aXRoIGdlbmVyaWMgUkVD T1JEIChSRUNPUkRPSUQgKyByZWFkZXIgcGF0aCkuCitjcmVhdGUgdHlwZSBidWcxOTM4Ml9mb283 IGFzIChhIGludCwgYiBpbnQpOworY3JlYXRlIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfZ2VuZXJp Y19yYWlzZSgpIHJldHVybnMgdm9pZCBhcyAkJAorZGVjbGFyZSByIHJlY29yZDsKK2JlZ2luCisg ICAgciA6PSByb3coMSwgcG93ZXIoMiwgMzApOjppbnQ0KTo6YnVnMTkzODJfZm9vNzsKKyAgICBh bHRlciB0eXBlIGJ1ZzE5MzgyX2ZvbzcgYWx0ZXIgYXR0cmlidXRlIGIgdHlwZSB0ZXh0OworICAg IHJhaXNlIG5vdGljZSAnciA9ICUnLCByOworZW5kOworJCQgbGFuZ3VhZ2UgcGxwZ3NxbDsKK3Nl bGVjdCBidWcxOTM4Ml90ZXN0X2dlbmVyaWNfcmFpc2UoKTsKK0VSUk9SOiAgY2Fubm90IHJldHVy biByZWNvcmQgdmFyaWFibGUgInIiIGFmdGVyIGNvbXBvc2l0ZSB0eXBlICJidWcxOTM4Ml9mb283 IiB3YXMgYWx0ZXJlZAorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3Rf Z2VuZXJpY19yYWlzZSgpIGxpbmUgNiBhdCBSQUlTRQorZHJvcCBmdW5jdGlvbiBidWcxOTM4Ml90 ZXN0X2dlbmVyaWNfcmFpc2UoKTsKK2Ryb3AgdHlwZSBidWcxOTM4Ml9mb283IGNhc2NhZGU7Cist LSBDYXNlIDE0OiBjb21wb3NpdGUgdHlwZSByZWFjaGFibGUgdGhyb3VnaCBhbiBhcnJheSBhdHRy aWJ1dGUuCistLSBUaGUgZWxlbWVudCBjb21wb3NpdGUgdHlwZSBtdXN0IGJlIHRyYWNrZWQgZXZl biB0aG91Z2ggdGhlIGF0dHJpYnV0ZSdzCistLSBvd24gdHlwZSBpcyBhbiBhcnJheTsgb3RoZXJ3 aXNlIEFMVEVSIFRZUEUgb24gdGhlIGVsZW1lbnQgZ29lcyB1bmRldGVjdGVkCistLSBhbmQgcmVj b3JkX291dCgpIGNyYXNoZXMgcmVpbnRlcnByZXRpbmcgdGhlIHN0b3JlZCBieXRlcy4KK2NyZWF0 ZSB0eXBlIGJ1ZzE5MzgyX2VsZW0gYXMgKGYxIGludCk7CitjcmVhdGUgdHlwZSBidWcxOTM4Ml9h cnJwYXJlbnQgYXMgKGFyciBidWcxOTM4Ml9lbGVtW10pOworY3JlYXRlIGZ1bmN0aW9uIGJ1ZzE5 MzgyX3Rlc3RfYXJyYXlfZWxlbSgpIHJldHVybnMgYnVnMTkzODJfYXJycGFyZW50IGFzICQkCitk ZWNsYXJlIHIgYnVnMTkzODJfYXJycGFyZW50OworYmVnaW4KKyAgICByIDo9IHJvdyhhcnJheVty b3cocG93ZXIoMiwgMzApOjppbnQ0KTo6YnVnMTkzODJfZWxlbV06OmJ1ZzE5MzgyX2VsZW1bXSk6 OmJ1ZzE5MzgyX2FycnBhcmVudDsKKyAgICBhbHRlciB0eXBlIGJ1ZzE5MzgyX2VsZW0gYWx0ZXIg YXR0cmlidXRlIGYxIHR5cGUgdGV4dDsKKyAgICByZXR1cm4gcjsKK2VuZDsKKyQkIGxhbmd1YWdl IHBscGdzcWw7CitzZWxlY3QgYnVnMTkzODJfdGVzdF9hcnJheV9lbGVtKCk7CitFUlJPUjogIGNh bm5vdCByZXR1cm4gcmVjb3JkIHZhcmlhYmxlICJyIiBhZnRlciBjb21wb3NpdGUgdHlwZSAiYnVn MTkzODJfZWxlbSIgd2FzIGFsdGVyZWQKK0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiBidWcx OTM4Ml90ZXN0X2FycmF5X2VsZW0oKSBsaW5lIDYgYXQgUkVUVVJOCitkcm9wIGZ1bmN0aW9uIGJ1 ZzE5MzgyX3Rlc3RfYXJyYXlfZWxlbSgpOworZHJvcCB0eXBlIGJ1ZzE5MzgyX2FycnBhcmVudCBj YXNjYWRlOworZHJvcCB0eXBlIGJ1ZzE5MzgyX2VsZW0gY2FzY2FkZTsKKy0tIENhc2UgMTU6IGFy cmF5IGVsZW1lbnQgY29tcG9zaXRlLCB3aG9sZS1yZWNvcmQgcmVhc3NpZ25tZW50IGFmdGVyIEFM VEVSCistLSB3aXRoIGZyZXNoIG1hdGNoaW5nIGRhdGEgbXVzdCBzdWNjZWVkIChubyBmYWxzZSBw b3NpdGl2ZSBvbiBhcnJheXMpLgorY3JlYXRlIHR5cGUgYnVnMTkzODJfZWxlbTIgYXMgKGYxIGlu dCk7CitjcmVhdGUgdHlwZSBidWcxOTM4Ml9hcnJwYXJlbnQyIGFzIChhcnIgYnVnMTkzODJfZWxl bTJbXSk7CitjcmVhdGUgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9hcnJheV9yZWFzc2lnbigpIHJl dHVybnMgYnVnMTkzODJfYXJycGFyZW50MiBhcyAkJAorZGVjbGFyZSByIGJ1ZzE5MzgyX2FycnBh cmVudDI7CitiZWdpbgorICAgIHIgOj0gcm93KGFycmF5W3JvdygxKTo6YnVnMTkzODJfZWxlbTJd OjpidWcxOTM4Ml9lbGVtMltdKTo6YnVnMTkzODJfYXJycGFyZW50MjsKKyAgICBhbHRlciB0eXBl IGJ1ZzE5MzgyX2VsZW0yIGFkZCBhdHRyaWJ1dGUgZjIgdGV4dDsKKyAgICByIDo9IHJvdyhhcnJh eVtyb3coMSwgJ2hpJyk6OmJ1ZzE5MzgyX2VsZW0yXTo6YnVnMTkzODJfZWxlbTJbXSk6OmJ1ZzE5 MzgyX2FycnBhcmVudDI7CisgICAgcmV0dXJuIHI7CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBnc3Fs Oworc2VsZWN0IGJ1ZzE5MzgyX3Rlc3RfYXJyYXlfcmVhc3NpZ24oKTsKKyBidWcxOTM4Ml90ZXN0 X2FycmF5X3JlYXNzaWduIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKCJ7IiIo MSxoaSkiIn0iKQorKDEgcm93KQorCitkcm9wIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfYXJyYXlf cmVhc3NpZ24oKTsKK2Ryb3AgdHlwZSBidWcxOTM4Ml9hcnJwYXJlbnQyIGNhc2NhZGU7Citkcm9w IHR5cGUgYnVnMTkzODJfZWxlbTIgY2FzY2FkZTsKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3Fs L3NyYy9wbF9leGVjLmMgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhlYy5jCmluZGV4IDY1YjBm ZDA3OTBmLi45YzBiZTVhYzc1NiAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2V4 ZWMuYworKysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhlYy5jCkBAIC00NzAsNiArNDcwLDEy IEBAIHN0YXRpYyBjaGFyICpmb3JtYXRfcHJlcGFyZWRwYXJhbXNkYXRhKFBMcGdTUUxfZXhlY3N0 YXRlICplc3RhdGUsCiBzdGF0aWMgUExwZ1NRTF92YXJpYWJsZSAqbWFrZV9jYWxsc3RtdF90YXJn ZXQoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwKIAkJCQkJCQkJCQkJICBQTHBnU1FMX2V4cHIg KmV4cHIpOwogCitzdGF0aWMgdm9pZCBjaGVja19yZWNvcmRfdHlwZV9ub3RfYWx0ZXJlZChQTHBn U1FMX3JlYyAqcmVjKTsKK3N0YXRpYyB2b2lkIGNvbGxlY3RfY29tcG9zaXRlX3R5cGVfdmVyc2lv bnMoT2lkIHR5cGlkLAorCQkJCQkJCQkJCQlPaWQgKipvaWRzLCB1aW50NjQgKip2ZXJzaW9ucywK KwkJCQkJCQkJCQkJaW50ICpuLCBpbnQgKmFsbG9jKTsKK3N0YXRpYyB2b2lkIHNuYXBzaG90X3Jl Y29yZF9jb21wb3NpdGVfdHlwZXMoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwKKwkJCQkJCQkJ CQkJUExwZ1NRTF9yZWMgKnJlYyk7CiAKIC8qIC0tLS0tLS0tLS0KICAqIHBscGdzcWxfZXhlY19m dW5jdGlvbglDYWxsZWQgYnkgdGhlIGNhbGwgaGFuZGxlciBmb3IKQEAgLTMyODcsOCArMzI5Mywz MCBAQCBleGVjX3N0bXRfcmV0dXJuKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsIFBMcGdTUUxf c3RtdF9yZXR1cm4gKnN0bXQpCiAJCQkJfQogCQkJCWJyZWFrOwogCi0JCQljYXNlIFBMUEdTUUxf RFRZUEVfUk9XOgogCQkJY2FzZSBQTFBHU1FMX0RUWVBFX1JFQzoKKwkJCQl7CisJCQkJCVBMcGdT UUxfcmVjICpyZWMgPSAoUExwZ1NRTF9yZWMgKikgcmV0dmFyOworCQkJCQlpbnQzMgkJcmV0dHlw bW9kOworCisJCQkJCS8qCisJCQkJCSAqIENoZWNrIGlmIHRoZSByZWNvcmQncyBjb21wb3NpdGUg dHlwZSB3YXMgYWx0ZXJlZCBzaW5jZQorCQkJCQkgKiB0aGUgcmVjb3JkIHdhcyBwb3B1bGF0ZWQu IElmIHNvLCByYWlzZSBhbiBlcnJvciB0bworCQkJCQkgKiBwcmV2ZW50IGNyYXNoZXMgd2hlbiBv dXRwdXR0aW5nIHRoZSByZWNvcmQuCisJCQkJCSAqLworCQkJCQlpZiAocmVjLT5lcmggIT0gTlVM TCAmJgorCQkJCQkJIUV4cGFuZGVkUmVjb3JkSXNFbXB0eShyZWMtPmVyaCkpCisJCQkJCQljaGVj a19yZWNvcmRfdHlwZV9ub3RfYWx0ZXJlZChyZWMpOworCisJCQkJCWV4ZWNfZXZhbF9kYXR1bShl c3RhdGUsCisJCQkJCQkJCQlyZXR2YXIsCisJCQkJCQkJCQkmZXN0YXRlLT5yZXR0eXBlLAorCQkJ CQkJCQkJJnJldHR5cG1vZCwKKwkJCQkJCQkJCSZlc3RhdGUtPnJldHZhbCwKKwkJCQkJCQkJCSZl c3RhdGUtPnJldGlzbnVsbCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFBMUEdTUUxf RFRZUEVfUk9XOgogCQkJCXsKIAkJCQkJLyogZXhlY19ldmFsX2RhdHVtIGNhbiBoYW5kbGUgdGhl c2UgY2FzZXMgKi8KIAkJCQkJaW50MzIJCXJldHR5cG1vZDsKQEAgLTM0MzQsNiArMzQ2MiwxNCBA QCBleGVjX3N0bXRfcmV0dXJuX25leHQoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwKIAkJCQkJ VHVwbGVEZXNjCXJlY190dXBkZXNjOwogCQkJCQlUdXBsZUNvbnZlcnNpb25NYXAgKnR1cG1hcDsK IAorCQkJCQkvKgorCQkJCQkgKiBDaGVjayBpZiB0aGUgcmVjb3JkJ3MgY29tcG9zaXRlIHR5cGUg d2FzIGFsdGVyZWQgc2luY2UKKwkJCQkJICogdGhlIHJlY29yZCB3YXMgcG9wdWxhdGVkLiBJZiBz bywgcmFpc2UgYW4gZXJyb3IgdG8KKwkJCQkJICogcHJldmVudCBjcmFzaGVzIHdoZW4gc3Rvcmlu ZyB0byB0aGUgdHVwbGVzdG9yZS4KKwkJCQkJICovCisJCQkJCWlmIChyZWMtPmVyaCAhPSBOVUxM ICYmICFFeHBhbmRlZFJlY29yZElzRW1wdHkocmVjLT5lcmgpKQorCQkJCQkJY2hlY2tfcmVjb3Jk X3R5cGVfbm90X2FsdGVyZWQocmVjKTsKKwogCQkJCQkvKiBJZiByZWMgaXMgbnVsbCwgdHJ5IHRv IGNvbnZlcnQgaXQgdG8gYSByb3cgb2YgbnVsbHMgKi8KIAkJCQkJaWYgKHJlYy0+ZXJoID09IE5V TEwpCiAJCQkJCQlpbnN0YW50aWF0ZV9lbXB0eV9yZWNvcmRfdmFyaWFibGUoZXN0YXRlLCByZWMp OwpAQCAtNTQ1MSw2ICs1NDg3LDE0IEBAIGV4ZWNfZXZhbF9kYXR1bShQTHBnU1FMX2V4ZWNzdGF0 ZSAqZXN0YXRlLAogCQkJCX0KIAkJCQllbHNlCiAJCQkJeworCQkJCQkvKgorCQkJCQkgKiBDaGVj ayBpZiB0aGUgcmVjb3JkJ3MgY29tcG9zaXRlIHR5cGUgd2FzIGFsdGVyZWQKKwkJCQkJICogc2lu Y2UgdGhlIHJlY29yZCB3YXMgcG9wdWxhdGVkLiAgVGhpcyBjYXRjaGVzIGFsbAorCQkJCQkgKiBv dXRwdXQgcGF0aHM6IFJFVFVSTiwgUkFJU0UsIEVYRUNVVEUgVVNJTkcsIGV0Yy4KKwkJCQkJICov CisJCQkJCWlmICghRXhwYW5kZWRSZWNvcmRJc0VtcHR5KHJlYy0+ZXJoKSkKKwkJCQkJCWNoZWNr X3JlY29yZF90eXBlX25vdF9hbHRlcmVkKHJlYyk7CisKIAkJCQkJaWYgKEV4cGFuZGVkUmVjb3Jk SXNFbXB0eShyZWMtPmVyaCkpCiAJCQkJCXsKIAkJCQkJCS8qIEVtcHR5IHJlY29yZCBpcyBhbHNv IGEgTlVMTCAqLwpAQCAtNzA0Miw2ICs3MDg2LDE0IEBAIGV4ZWNfbW92ZV9yb3coUExwZ1NRTF9l eGVjc3RhdGUgKmVzdGF0ZSwKIAkJCQlpZiAocmVjLT5lcmgpCiAJCQkJCURlbGV0ZUV4cGFuZGVk T2JqZWN0KEV4cGFuZGVkUmVjb3JkR2V0RGF0dW0ocmVjLT5lcmgpKTsKIAkJCQlyZWMtPmVyaCA9 IE5VTEw7CisJCQkJLyogQ2xlYXIgY29tcG9zaXRlIHR5cGUgc25hcHNob3QgKi8KKwkJCQlpZiAo cmVjLT5jb21wVHlwZU9pZHMpCisJCQkJCXBmcmVlKHJlYy0+Y29tcFR5cGVPaWRzKTsKKwkJCQlp ZiAocmVjLT5jb21wVHlwZVZlcnNpb25zKQorCQkJCQlwZnJlZShyZWMtPmNvbXBUeXBlVmVyc2lv bnMpOworCQkJCXJlYy0+bkNvbXBUeXBlcyA9IDA7CisJCQkJcmVjLT5jb21wVHlwZU9pZHMgPSBO VUxMOworCQkJCXJlYy0+Y29tcFR5cGVWZXJzaW9ucyA9IE5VTEw7CiAJCQl9CiAJCQlyZXR1cm47 CiAJCX0KQEAgLTc3NDUsNiArNzc5NywxMyBAQCBleGVjX21vdmVfcm93X2Zyb21fZGF0dW0oUExw Z1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwKIAkJCXsKIAkJCQlleHBhbmRlZF9yZWNvcmRfc2V0X3R1 cGxlKHJlYy0+ZXJoLCBlcmgtPmZ2YWx1ZSwKIAkJCQkJCQkJCQkgIHRydWUsICFlc3RhdGUtPmF0 b21pYyk7CisJCQkJLyoKKwkJCQkgKiBUaGUgdHVwbGUgYnl0ZXMgd2VyZSByZXBsYWNlZCBpbiBw bGFjZS4gIFJlZnJlc2ggdGhlCisJCQkJICogY29tcG9zaXRlLXR5cGUgc25hcHNob3Qgc28gYSBs YXRlciBBTFRFUiBUWVBFIG9uIGFueQorCQkJCSAqIHJlYWNoYWJsZSB0eXBlIGlzIGRldGVjdGVk LCBhbmQgc3RhbGUgc25hcHNob3QgZW50cmllcworCQkJCSAqIGZyb20gYSBwcmlvciBhc3NpZ25t ZW50IGFyZSBub3QgY2FycmllZCBmb3J3YXJkLgorCQkJCSAqLworCQkJCXNuYXBzaG90X3JlY29y ZF9jb21wb3NpdGVfdHlwZXMoZXN0YXRlLCByZWMpOwogCQkJCXJldHVybjsKIAkJCX0KIApAQCAt Nzg1OSw2ICs3OTE4LDggQEAgZXhlY19tb3ZlX3Jvd19mcm9tX2RhdHVtKFBMcGdTUUxfZXhlY3N0 YXRlICplc3RhdGUsCiAJCQl7CiAJCQkJZXhwYW5kZWRfcmVjb3JkX3NldF90dXBsZShyZWMtPmVy aCwgJnRtcHR1cCwKIAkJCQkJCQkJCQkgIHRydWUsICFlc3RhdGUtPmF0b21pYyk7CisJCQkJLyog U2VlIGNvbW1lbnQgaW4gdGhlIGFuYWxvZ291cyBicmFuY2ggYWJvdmUuICovCisJCQkJc25hcHNo b3RfcmVjb3JkX2NvbXBvc2l0ZV90eXBlcyhlc3RhdGUsIHJlYyk7CiAJCQkJcmV0dXJuOwogCQkJ fQogCkBAIC03OTI1LDYgKzc5ODYsOSBAQCBpbnN0YW50aWF0ZV9lbXB0eV9yZWNvcmRfdmFyaWFi bGUoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwgUExwZ1NRTF9yZWMgKnJlYykKIAkvKiBPSywg ZG8gaXQgKi8KIAlyZWMtPmVyaCA9IG1ha2VfZXhwYW5kZWRfcmVjb3JkX2Zyb21fdHlwZWlkKHJl Yy0+cmVjdHlwZWlkLCAtMSwKIAkJCQkJCQkJCQkJCWVzdGF0ZS0+ZGF0dW1fY29udGV4dCk7CisK KwkvKiBTbmFwc2hvdCBjb21wb3NpdGUgdHlwZSB2ZXJzaW9ucyBmb3IgQUxURVIgVFlQRSBkZXRl Y3Rpb24gKi8KKwlzbmFwc2hvdF9yZWNvcmRfY29tcG9zaXRlX3R5cGVzKGVzdGF0ZSwgcmVjKTsK IH0KIAogLyogLS0tLS0tLS0tLQpAQCAtODk2Nyw2ICs5MDMxLDkgQEAgYXNzaWduX3JlY29yZF92 YXIoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwgUExwZ1NRTF9yZWMgKnJlYywKIAogCS8qIC4u LiBhbmQgaW5zdGFsbCB0aGUgbmV3ICovCiAJcmVjLT5lcmggPSBlcmg7CisKKwkvKiBTbmFwc2hv dCBjb21wb3NpdGUgdHlwZSB2ZXJzaW9ucyBmb3IgQUxURVIgVFlQRSBkZXRlY3Rpb24gKi8KKwlz bmFwc2hvdF9yZWNvcmRfY29tcG9zaXRlX3R5cGVzKGVzdGF0ZSwgcmVjKTsKIH0KIAogLyoKQEAg LTkyMTYsMyArOTI4MywyNTggQEAgZm9ybWF0X3ByZXBhcmVkcGFyYW1zZGF0YShQTHBnU1FMX2V4 ZWNzdGF0ZSAqZXN0YXRlLAogCiAJcmV0dXJuIHBhcmFtc3RyLmRhdGE7CiB9CisKKy8qCisgKiBj aGVja19yZWNvcmRfdHlwZV9ub3RfYWx0ZXJlZAorICoKKyAqIENoZWNrIGlmIGFueSBjb21wb3Np dGUgdHlwZSByZWFjaGFibGUgZnJvbSB0aGlzIHJlY29yZCdzIHR5cGUgaGFzIGJlZW4KKyAqIGFs dGVyZWQgc2luY2UgdGhlIHJlY29yZCB3YXMgcG9wdWxhdGVkLiAgSWYgc28sIHJhaXNlIGFuIGVy cm9yIHRvIHByZXZlbnQKKyAqIGNyYXNoZXMgdGhhdCB3b3VsZCBvY2N1ciB3aGVuIG91dHB1dHRp bmcgZGF0YSB0aGF0IG5vIGxvbmdlciBtYXRjaGVzIHRoZQorICogY3VycmVudCB0eXBlIGRlZmlu aXRpb24uCisgKgorICogVGhlIG91dGVybW9zdCB0eXBlIGlzIGFsd2F5cyBjaGVja2VkIHVzaW5n IGVyX3R1cGRlc2NfaWQgKHdoaWNoIGlzIHNldAorICogd2hlbiB0aGUgRXhwYW5kZWRSZWNvcmQg aXMgY3JlYXRlZCBhbmQgd29ya3MgcmVnYXJkbGVzcyBvZiBob3cgdGhlIHJlY29yZAorICogd2Fz IHBvcHVsYXRlZCwgd2hldGhlciBieSB3aG9sZSBhc3NpZ25tZW50LCBmaWVsZCBhc3NpZ25tZW50 LCBldGMuKS4KKyAqCisgKiBOZXN0ZWQgY29tcG9zaXRlIHR5cGVzIGFyZSBjaGVja2VkIGFnYWlu c3QgdGhlIHNuYXBzaG90IHRha2VuIGF0IHJlY29yZAorICogYXNzaWdubWVudCB0aW1lLCBpZiBh dmFpbGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19yZWNvcmRfdHlwZV9ub3RfYWx0ZXJl ZChQTHBnU1FMX3JlYyAqcmVjKQoreworCVR5cGVDYWNoZUVudHJ5ICp0eXBlbnRyeTsKKwlPaWQJ CQljaGVja190eXBpZDsKKwlpbnQJCQlpOworCisJLyoKKwkgKiBEZXRlcm1pbmUgdGhlIGVmZmVj dGl2ZSB0eXBlIHRvIGNoZWNrLiAgRm9yIGEgdmFyaWFibGUgZGVjbGFyZWQgYXMKKwkgKiBnZW5l cmljIFJFQ09SRCwgdXNlIHRoZSBFeHBhbmRlZFJlY29yZCdzIGFjdHVhbCB0eXBlIG9uY2UgaXQn cyBiZWVuCisJICogYXNzaWduZWQuICBJZiB0aGF0IHRvbyBpcyBSRUNPUkRPSUQgKHRydWx5IGFu b255bW91cyByb3d0eXBlKSwgdGhlcmUKKwkgKiBpcyBub3RoaW5nIHRvIGNoZWNrIGJlY2F1c2Ug c3VjaCByb3d0eXBlcyBhcmUgbm90IHZlcnNpb25lZC4KKwkgKi8KKwlpZiAocmVjLT5yZWN0eXBl aWQgIT0gUkVDT1JET0lEKQorCQljaGVja190eXBpZCA9IHJlYy0+cmVjdHlwZWlkOworCWVsc2Ug aWYgKHJlYy0+ZXJoICE9IE5VTEwgJiYgcmVjLT5lcmgtPmVyX3R5cGVpZCAhPSBSRUNPUkRPSUQp CisJCWNoZWNrX3R5cGlkID0gcmVjLT5lcmgtPmVyX3R5cGVpZDsKKwllbHNlCisJCXJldHVybjsK KworCS8qCisJICogQWx3YXlzIGNoZWNrIG91dGVybW9zdCB0eXBlIHVzaW5nIGVyX3R1cGRlc2Nf aWQuICBUaGlzIHdvcmtzIGZvciBhbGwKKwkgKiBjb2RlIHBhdGhzICh3aG9sZSBhc3NpZ25tZW50 LCBmaWVsZCBhc3NpZ25tZW50LCBTRUxFQ1QgSU5UTywgZXRjLikKKwkgKiBiZWNhdXNlIGVyX3R1 cGRlc2NfaWQgaXMgc2V0IHdoZW4gdGhlIEV4cGFuZGVkUmVjb3JkIGlzIGNyZWF0ZWQuCisJICog UmVzb2x2ZSBkb21haW4gdHlwZXMgdG8gdGhlaXIgYmFzZSBjb21wb3NpdGUgdHlwZSBmaXJzdC4K KwkgKi8KKwlpZiAoZ2V0X3R5cHR5cGUoY2hlY2tfdHlwaWQpID09IFRZUFRZUEVfRE9NQUlOKQor CQljaGVja190eXBpZCA9IGdldEJhc2VUeXBlKGNoZWNrX3R5cGlkKTsKKworCXR5cGVudHJ5ID0g bG9va3VwX3R5cGVfY2FjaGUoY2hlY2tfdHlwaWQsIFRZUEVDQUNIRV9UVVBERVNDKTsKKworCWlm IChyZWMtPmVyaC0+ZXJfdHVwZGVzY19pZCAhPSB0eXBlbnRyeS0+dHVwRGVzY19pZGVudGlmaWVy KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFU Q0gpLAorCQkJCSBlcnJtc2coImNhbm5vdCByZXR1cm4gcmVjb3JkIHZhcmlhYmxlIFwiJXNcIiBh ZnRlciBjb21wb3NpdGUgdHlwZSBcIiVzXCIgd2FzIGFsdGVyZWQiLAorCQkJCQkJcmVjLT5yZWZu YW1lLAorCQkJCQkJZm9ybWF0X3R5cGVfYmUoY2hlY2tfdHlwaWQpKSkpOworCisJLyoKKwkgKiBJ ZiB3ZSBoYXZlIGEgc25hcHNob3Qgb2YgbmVzdGVkIGNvbXBvc2l0ZSB0eXBlcyAodGFrZW4gYXQg d2hvbGUtcmVjb3JkCisJICogYXNzaWdubWVudCB0aW1lKSwgY2hlY2sgdGhvc2UgdG9vLiAgU2tp cCBpbmRleCAwIHNpbmNlIHRoYXQncyB0aGUKKwkgKiBvdXRlcm1vc3QgdHlwZSB3ZSBhbHJlYWR5 IGNoZWNrZWQgYWJvdmUuCisJICovCisJZm9yIChpID0gMTsgaSA8IHJlYy0+bkNvbXBUeXBlczsg aSsrKQorCXsKKwkJdHlwZW50cnkgPSBsb29rdXBfdHlwZV9jYWNoZShyZWMtPmNvbXBUeXBlT2lk c1tpXSwgVFlQRUNBQ0hFX1RVUERFU0MpOworCisJCWlmICh0eXBlbnRyeS0+dHVwRGVzY19pZGVu dGlmaWVyICE9IHJlYy0+Y29tcFR5cGVWZXJzaW9uc1tpXSkKKwkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLAorCQkJCQkgZXJybXNnKCJj YW5ub3QgcmV0dXJuIHJlY29yZCB2YXJpYWJsZSBcIiVzXCIgYWZ0ZXIgY29tcG9zaXRlIHR5cGUg XCIlc1wiIHdhcyBhbHRlcmVkIiwKKwkJCQkJCQlyZWMtPnJlZm5hbWUsCisJCQkJCQkJZm9ybWF0 X3R5cGVfYmUocmVjLT5jb21wVHlwZU9pZHNbaV0pKSkpOworCX0KK30KKworLyoKKyAqIGNvbGxl Y3RfY29tcG9zaXRlX3R5cGVfdmVyc2lvbnMKKyAqCisgKiBSZWN1cnNpdmVseSBjb2xsZWN0IHR1 cERlc2NfaWRlbnRpZmllciB2YWx1ZXMgZm9yIGEgY29tcG9zaXRlIHR5cGUgYW5kCisgKiBhbGwg Y29tcG9zaXRlIHR5cGVzIHJlYWNoYWJsZSBmcm9tIGl0cyBhdHRyaWJ1dGVzLiAgU2tpcHMgYW5v bnltb3VzCisgKiBSRUNPUkQgdHlwZXMgYW5kIHR5cGVzIGFscmVhZHkgcmVjb3JkZWQgKHRvIHBy ZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uKS4KKyAqCisgKiBvaWRzL3ZlcnNpb25zIGFycmF5cyBh cmUgcmVwYWxsb2MnZCBhcyBuZWVkZWQ7IG4vYWxsb2MgdXBkYXRlZCBpbiBwbGFjZS4KKyAqLwor c3RhdGljIHZvaWQKK2NvbGxlY3RfY29tcG9zaXRlX3R5cGVfdmVyc2lvbnMoT2lkIHR5cGlkLAor CQkJCQkJCQlPaWQgKipvaWRzLCB1aW50NjQgKip2ZXJzaW9ucywKKwkJCQkJCQkJaW50ICpuLCBp bnQgKmFsbG9jKQoreworCVR5cGVDYWNoZUVudHJ5ICp0eXBlbnRyeTsKKwlUdXBsZURlc2MJdHVw ZGVzYzsKKwlpbnQJCQlpOworCisJLyogUmVzb2x2ZSBkb21haW4gdHlwZXMgdG8gdGhlaXIgYmFz ZSBjb21wb3NpdGUgdHlwZSAqLworCWlmIChnZXRfdHlwdHlwZSh0eXBpZCkgPT0gVFlQVFlQRV9E T01BSU4pCisJCXR5cGlkID0gZ2V0QmFzZVR5cGUodHlwaWQpOworCisJLyogU2tpcCBpZiBhbHJl YWR5IHJlY29yZGVkICovCisJZm9yIChpID0gMDsgaSA8ICpuOyBpKyspCisJeworCQlpZiAoKCpv aWRzKVtpXSA9PSB0eXBpZCkKKwkJCXJldHVybjsKKwl9CisKKwl0eXBlbnRyeSA9IGxvb2t1cF90 eXBlX2NhY2hlKHR5cGlkLCBUWVBFQ0FDSEVfVFVQREVTQyk7CisKKwkvKiBHcm93IGFycmF5cyBp ZiBuZWVkZWQgKi8KKwlpZiAoKm4gPj0gKmFsbG9jKQorCXsKKwkJKmFsbG9jICo9IDI7CisJCSpv aWRzID0gcmVwYWxsb2MoKm9pZHMsICphbGxvYyAqIHNpemVvZihPaWQpKTsKKwkJKnZlcnNpb25z ID0gcmVwYWxsb2MoKnZlcnNpb25zLCAqYWxsb2MgKiBzaXplb2YodWludDY0KSk7CisJfQorCisJ KCpvaWRzKVsqbl0gPSB0eXBpZDsKKwkoKnZlcnNpb25zKVsqbl0gPSB0eXBlbnRyeS0+dHVwRGVz Y19pZGVudGlmaWVyOworCSgqbikrKzsKKworCXR1cGRlc2MgPSB0eXBlbnRyeS0+dHVwRGVzYzsK KwlpZiAodHVwZGVzYyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBSZWN1cnNlIGludG8gY29t cG9zaXRlLXR5cGUgYXR0cmlidXRlcyAqLworCWZvciAoaSA9IDA7IGkgPCB0dXBkZXNjLT5uYXR0 czsgaSsrKQorCXsKKwkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVzY0F0dHIodHVw ZGVzYywgaSk7CisJCU9pZAkJCWF0dHJ0eXBpZDsKKworCQlpZiAoYXR0ci0+YXR0aXNkcm9wcGVk KQorCQkJY29udGludWU7CisKKwkJYXR0cnR5cGlkID0gYXR0ci0+YXR0dHlwaWQ7CisKKwkJLyoK KwkJICogQSByZWNvcmQgZmllbGQgY2FuIHJlZmVyZW5jZSBhIGNvbXBvc2l0ZSB0eXBlIGRpcmVj dGx5LCBvciB3cmFwCisJCSAqIG9uZSBpbnNpZGUgYSBkb21haW4gb3IgYSBjb250YWluZXIgdHlw ZSAoYXJyYXksIHJhbmdlLCBvcgorCQkgKiBtdWx0aXJhbmdlKS4gIEFMVEVSIFRZUEUgb24gc3Vj aCBhbiBpbmRpcmVjdGx5LXJlZmVyZW5jZWQKKwkJICogY29tcG9zaXRlIG11c3Qgc3RpbGwgYmUg ZGV0ZWN0ZWQsIHNvIHBlZWwgb2ZmIGRvbWFpbiBhbmQKKwkJICogY29udGFpbmVyIGxheWVycyB1 bnRpbCB3ZSByZWFjaCBhIGNvbXBvc2l0ZSB0eXBlICh3aGljaCB3ZQorCQkgKiBzbmFwc2hvdCkg b3Igc29tZXRoaW5nIHRoYXQgY2Fubm90IGNvbnRhaW4gb25lICh3aGljaCB3ZSBza2lwKS4KKwkJ ICogVGhpcyB0ZXJtaW5hdGVzIGJlY2F1c2UgZWFjaCBwZWVsIHN0ZXAgeWllbGRzIGEgc3RyaWN0 bHkKKwkJICogInNtYWxsZXIiIHR5cGUuICBDb250YWluZXIgZWxlbWVudCB0eXBlcyBjYW5ub3Qg YmUgc2VsZi1yZWZlcmVudGlhbC4KKwkJICovCisJCWZvciAoOzspCisJCXsKKwkJCWNoYXIJCXR5 cHR5cGUgPSBnZXRfdHlwdHlwZShhdHRydHlwaWQpOworCQkJT2lkCQkJZWxlbXR5cGlkOworCisJ CQlpZiAoYXR0cnR5cGlkID09IFJFQ09SRE9JRCkKKwkJCQlicmVhazsJCQkvKiBhbm9ueW1vdXMg cm93dHlwZTogbm90IHZlcnNpb25hYmxlICovCisKKwkJCWlmICh0eXB0eXBlID09IFRZUFRZUEVf RE9NQUlOKQorCQkJeworCQkJCWF0dHJ0eXBpZCA9IGdldEJhc2VUeXBlKGF0dHJ0eXBpZCk7CisJ CQkJY29udGludWU7CisJCQl9CisKKwkJCWlmICh0eXB0eXBlID09IFRZUFRZUEVfQ09NUE9TSVRF KQorCQkJeworCQkJCWNvbGxlY3RfY29tcG9zaXRlX3R5cGVfdmVyc2lvbnMoYXR0cnR5cGlkLAor CQkJCQkJCQkJCQkJb2lkcywgdmVyc2lvbnMsIG4sIGFsbG9jKTsKKwkJCQlicmVhazsKKwkJCX0K KworCQkJLyogQXJyYXkgZWxlbWVudCB0eXBlPyAqLworCQkJZWxlbXR5cGlkID0gZ2V0X2VsZW1l bnRfdHlwZShhdHRydHlwaWQpOworCisJCQkvKiBPdGhlcndpc2UgYSByYW5nZSdzIHN1YnR5cGU/ ICovCisJCQlpZiAoIU9pZElzVmFsaWQoZWxlbXR5cGlkKSkKKwkJCQllbGVtdHlwaWQgPSBnZXRf cmFuZ2Vfc3VidHlwZShhdHRydHlwaWQpOworCisJCQkvKiBPdGhlcndpc2UgYSBtdWx0aXJhbmdl J3MgcmFuZ2UncyBzdWJ0eXBlPyAqLworCQkJaWYgKCFPaWRJc1ZhbGlkKGVsZW10eXBpZCkgJiYg dHlwdHlwZSA9PSBUWVBUWVBFX01VTFRJUkFOR0UpCisJCQl7CisJCQkJT2lkCQkJcmFuZ2V0eXBp ZCA9IGdldF9tdWx0aXJhbmdlX3JhbmdlKGF0dHJ0eXBpZCk7CisKKwkJCQlpZiAoT2lkSXNWYWxp ZChyYW5nZXR5cGlkKSkKKwkJCQkJZWxlbXR5cGlkID0gZ2V0X3JhbmdlX3N1YnR5cGUocmFuZ2V0 eXBpZCk7CisJCQl9CisKKwkJCWlmICghT2lkSXNWYWxpZChlbGVtdHlwaWQpKQorCQkJCWJyZWFr OwkJCS8qIG5vdCBhIGNvbXBvc2l0ZS1iZWFyaW5nIHR5cGUgKi8KKworCQkJYXR0cnR5cGlkID0g ZWxlbXR5cGlkOworCQl9CisJfQorfQorCisvKgorICogc25hcHNob3RfcmVjb3JkX2NvbXBvc2l0 ZV90eXBlcworICoKKyAqIFRha2UgYSBzbmFwc2hvdCBvZiB0dXBEZXNjX2lkZW50aWZpZXIgdmFs dWVzIGZvciBhbGwgY29tcG9zaXRlIHR5cGVzCisgKiByZWFjaGFibGUgZnJvbSB0aGUgcmVjb3Jk J3MgZGVjbGFyZWQgdHlwZS4gIENhbGxlZCB3aGVuIGEgcmVjb3JkIHZhcmlhYmxlCisgKiBpcyBh c3NpZ25lZCBhIG5ldyB2YWx1ZSwgc28gdGhhdCBjaGVja19yZWNvcmRfdHlwZV9ub3RfYWx0ZXJl ZCgpIGNhbgorICogZGV0ZWN0IG1pZC10cmFuc2FjdGlvbiBBTFRFUiBUWVBFIGF0IFJFVFVSTiB0 aW1lLgorICoKKyAqIEZvciBhIHZhcmlhYmxlIGRlY2xhcmVkIGFzIGdlbmVyaWMgUkVDT1JEIChy ZWN0eXBlaWQgPT0gUkVDT1JET0lEKSwgdGhlCisgKiBlZmZlY3RpdmUgcm9vdCB0eXBlIGlzIHRh a2VuIGZyb20gdGhlIEV4cGFuZGVkUmVjb3JkJ3MgZXJfdHlwZWlkLCB3aGljaAorICogcmVmbGVj dHMgdGhlIGFjdHVhbCBjb21wb3NpdGUgdHlwZSBhZG9wdGVkIGZyb20gdGhlIGFzc2lnbmVkIHZh bHVlLiAgSWYKKyAqIHRoYXQgdG9vIGlzIFJFQ09SRE9JRCAodHJ1bHkgYW5vbnltb3VzIHJvd3R5 cGUpLCBubyBzbmFwc2hvdCBpcyB0YWtlbgorICogYmVjYXVzZSBzdWNoIHJvd3R5cGVzIGFyZSBu b3QgdmVyc2lvbmVkIGJ5IHRoZSB0eXBlIGNhY2hlLgorICovCitzdGF0aWMgdm9pZAorc25hcHNo b3RfcmVjb3JkX2NvbXBvc2l0ZV90eXBlcyhQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLAorCQkJ CQkJCQlQTHBnU1FMX3JlYyAqcmVjKQoreworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCU9pZAkJ CXJvb3RfdHlwaWQ7CisJaW50CQkJYWxsb2MgPSA4OworCWludAkJCW4gPSAwOworCU9pZAkJICAg Km9pZHM7CisJdWludDY0CSAgICp2ZXJzaW9uczsKKworCS8qCisJICogRGV0ZXJtaW5lIHRoZSBl ZmZlY3RpdmUgcm9vdCB0eXBlLiAgRm9yIGEgdmFyaWFibGUgZGVjbGFyZWQgYXMgZ2VuZXJpYwor CSAqIFJFQ09SRCwgdXNlIHRoZSBFeHBhbmRlZFJlY29yZCdzIGFjdHVhbCB0eXBlIG9uY2UgaXQn cyBiZWVuIGFzc2lnbmVkLgorCSAqIFRydWx5IGFub255bW91cyByb3d0eXBlcyAoZXJfdHlwZWlk IHN0aWxsIFJFQ09SRE9JRCkgY2Fubm90IGJlIHRyYWNrZWQuCisJICovCisJaWYgKHJlYy0+cmVj dHlwZWlkICE9IFJFQ09SRE9JRCkKKwkJcm9vdF90eXBpZCA9IHJlYy0+cmVjdHlwZWlkOworCWVs c2UgaWYgKHJlYy0+ZXJoICE9IE5VTEwgJiYgcmVjLT5lcmgtPmVyX3R5cGVpZCAhPSBSRUNPUkRP SUQpCisJCXJvb3RfdHlwaWQgPSByZWMtPmVyaC0+ZXJfdHlwZWlkOworCWVsc2UKKwl7CisJCXJl Yy0+bkNvbXBUeXBlcyA9IDA7CisJCXJldHVybjsKKwl9CisKKwlvbGRjeHQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8oZXN0YXRlLT5kYXR1bV9jb250ZXh0KTsKKwlvaWRzID0gcGFsbG9jKGFsbG9j ICogc2l6ZW9mKE9pZCkpOworCXZlcnNpb25zID0gcGFsbG9jKGFsbG9jICogc2l6ZW9mKHVpbnQ2 NCkpOworCisJY29sbGVjdF9jb21wb3NpdGVfdHlwZV92ZXJzaW9ucyhyb290X3R5cGlkLAorCQkJ CQkJCQkJJm9pZHMsICZ2ZXJzaW9ucywgJm4sICZhbGxvYyk7CisKKwlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY3h0KTsKKworCWlmIChuID4gMCkKKwl7CisJCS8qIEZyZWUgcHJldmlvdXMgc25h cHNob3QgaWYgYW55ICovCisJCWlmIChyZWMtPmNvbXBUeXBlT2lkcykKKwkJCXBmcmVlKHJlYy0+ Y29tcFR5cGVPaWRzKTsKKwkJaWYgKHJlYy0+Y29tcFR5cGVWZXJzaW9ucykKKwkJCXBmcmVlKHJl Yy0+Y29tcFR5cGVWZXJzaW9ucyk7CisKKwkJcmVjLT5uQ29tcFR5cGVzID0gbjsKKwkJcmVjLT5j b21wVHlwZU9pZHMgPSBvaWRzOworCQlyZWMtPmNvbXBUeXBlVmVyc2lvbnMgPSB2ZXJzaW9uczsK Kwl9CisJZWxzZQorCXsKKwkJcGZyZWUob2lkcyk7CisJCXBmcmVlKHZlcnNpb25zKTsKKwkJcmVj LT5uQ29tcFR5cGVzID0gMDsKKwkJcmVjLT5jb21wVHlwZU9pZHMgPSBOVUxMOworCQlyZWMtPmNv bXBUeXBlVmVyc2lvbnMgPSBOVUxMOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3Fs L3NyYy9wbHBnc3FsLmggYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxwZ3NxbC5oCmluZGV4IGFkZGIx NGE5OTU5Li5jZjlhNjU3NjEzZCAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3JjL3BscGdz cWwuaAorKysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxwZ3NxbC5oCkBAIC00MzUsNiArNDM1LDE1 IEBAIHR5cGVkZWYgc3RydWN0IFBMcGdTUUxfcmVjCiAKIAkvKiBXZSBhbHdheXMgc3RvcmUgcmVj b3JkIHZhcmlhYmxlcyBhcyAiZXhwYW5kZWQiIHJlY29yZHMgKi8KIAlFeHBhbmRlZFJlY29yZEhl YWRlciAqZXJoOworCisJLyoKKwkgKiBDb21wb3NpdGUgdHlwZSB2ZXJzaW9uIHNuYXBzaG90IGZv ciBBTFRFUiBUWVBFIGRldGVjdGlvbi4KKwkgKiBQb3B1bGF0ZWQgd2hlbiB0aGUgcmVjb3JkIGlz IGFzc2lnbmVkOyBjaGVja2VkIGF0IFJFVFVSTiB0aW1lLgorCSAqIEluY2x1ZGVzIHRoZSBvdXRl cm1vc3QgdHlwZSBhbmQgYWxsIG5lc3RlZCBjb21wb3NpdGUgdHlwZXMuCisJICovCisJaW50CQkJ bkNvbXBUeXBlczsKKwlPaWQJCSAgICpjb21wVHlwZU9pZHM7CisJdWludDY0CSAgICpjb21wVHlw ZVZlcnNpb25zOwogfSBQTHBnU1FMX3JlYzsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBn c3FsL3NyYy9zcWwvcGxwZ3NxbF9yZWNvcmQuc3FsIGIvc3JjL3BsL3BscGdzcWwvc3JjL3NxbC9w bHBnc3FsX3JlY29yZC5zcWwKaW5kZXggNGZiZWQzOGI4YmIuLmNjMTQwNmE2NjNkIDEwMDY0NAot LS0gYS9zcmMvcGwvcGxwZ3NxbC9zcmMvc3FsL3BscGdzcWxfcmVjb3JkLnNxbAorKysgYi9zcmMv cGwvcGxwZ3NxbC9zcmMvc3FsL3BscGdzcWxfcmVjb3JkLnNxbApAQCAtNTc3LDMgKzU3NywyMzkg QEAgaW5zZXJ0IGludG8gdHdvX2ludDhzX3RhYiB2YWx1ZXMgKGNvbXByZXN1bHQoNDIpKTsKIC0t IHJlY29ubmVjdCBzbyB3ZSBsb3NlIGFueSBsb2NhbCBrbm93bGVkZ2Ugb2YgYW5vbnltb3VzIHJl Y29yZCB0eXBlcwogXGMgLQogdGFibGUgdHdvX2ludDhzX3RhYjsKKworLS0gVGVzdHMgZm9yIGJ1 ZyAjMTkzODI6IHNlcnZlciBjcmFzaCB3aGVuIEFMVEVSIFRZUEUgaXMgdXNlZCBtaWQtdHJhbnNh Y3Rpb24KKy0tIGluIFBML3BnU1FMLiBSZWNvcmQgdmFyaWFibGVzIHBvcHVsYXRlZCBiZWZvcmUg QUxURVIgVFlQRSBtdXN0IG5vdCBiZQorLS0gcmV0dXJuZWQsIGFzIHRoZSBzdG9yZWQgZGF0YSBu byBsb25nZXIgbWF0Y2hlcyB0aGUgY3VycmVudCB0eXBlIGRlZmluaXRpb24uCisKKy0tIENhc2Ug MTogRGlyZWN0IGNvbXBvc2l0ZSB0eXBlIGNoYW5nZSAoSU5UIC0+IFRFWFQpCitjcmVhdGUgdHlw ZSBidWcxOTM4Ml9mb28gYXMgKGEgaW50LCBiIGludCk7CitjcmVhdGUgZnVuY3Rpb24gYnVnMTkz ODJfdGVzdF9kaXJlY3QoKSByZXR1cm5zIHJlY29yZCBhcyAkJAorZGVjbGFyZSByIGJ1ZzE5Mzgy X2ZvbyA6PSByb3coMTIzLCBwb3dlcigyLCAzMCkpOworYmVnaW4KKyAgICBhbHRlciB0eXBlIGJ1 ZzE5MzgyX2ZvbyBhbHRlciBhdHRyaWJ1dGUgYiB0eXBlIHRleHQ7CisgICAgcmV0dXJuIHI7Citl bmQ7CiskJCBsYW5ndWFnZSBwbHBnc3FsOworc2VsZWN0IGJ1ZzE5MzgyX3Rlc3RfZGlyZWN0KCk7 Citkcm9wIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfZGlyZWN0KCk7Citkcm9wIHR5cGUgYnVnMTkz ODJfZm9vIGNhc2NhZGU7CisKKy0tIENhc2UgMjogTmVzdGVkIGNvbXBvc2l0ZSB0eXBlIGNoYW5n ZQorY3JlYXRlIHR5cGUgYnVnMTkzODJfaW5uZXIgYXMgKHggaW50LCB5IGludCk7CitjcmVhdGUg dHlwZSBidWcxOTM4Ml9vdXRlciBhcyAoYSBpbnQsIGIgYnVnMTkzODJfaW5uZXIpOworY3JlYXRl IGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfbmVzdGVkKCkgcmV0dXJucyByZWNvcmQgYXMgJCQKK2Rl Y2xhcmUgciBidWcxOTM4Ml9vdXRlcjsKK2JlZ2luCisgICAgciA6PSByb3coMSwgcm93KDEwLCBw b3dlcigyLCAzMCk6OmludDQpOjpidWcxOTM4Ml9pbm5lcik6OmJ1ZzE5MzgyX291dGVyOworICAg IGFsdGVyIHR5cGUgYnVnMTkzODJfaW5uZXIgYWx0ZXIgYXR0cmlidXRlIHkgdHlwZSB0ZXh0Owor ICAgIHJldHVybiByOworZW5kOworJCQgbGFuZ3VhZ2UgcGxwZ3NxbDsKK3NlbGVjdCBidWcxOTM4 Ml90ZXN0X25lc3RlZCgpOworZHJvcCBmdW5jdGlvbiBidWcxOTM4Ml90ZXN0X25lc3RlZCgpOwor ZHJvcCB0eXBlIGJ1ZzE5MzgyX291dGVyIGNhc2NhZGU7Citkcm9wIHR5cGUgYnVnMTkzODJfaW5u ZXIgY2FzY2FkZTsKKworLS0gQ2FzZSAzOiBPVVQgcGFyYW1ldGVyCitjcmVhdGUgdHlwZSBidWcx OTM4Ml9mb28xIGFzIChhIGludCwgYiBpbnQpOworY3JlYXRlIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rl c3Rfb3V0KG91dCByMSBidWcxOTM4Ml9mb28xKSBhcyAkJAorYmVnaW4KKyAgICByMSA6PSByb3co MSwgMik7CisgICAgYWx0ZXIgdHlwZSBidWcxOTM4Ml9mb28xIGFsdGVyIGF0dHJpYnV0ZSBiIHR5 cGUgdGV4dDsKKyAgICByZXR1cm47CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBnc3FsOworc2VsZWN0 IGJ1ZzE5MzgyX3Rlc3Rfb3V0KCk7Citkcm9wIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3Rfb3V0KCk7 Citkcm9wIHR5cGUgYnVnMTkzODJfZm9vMSBjYXNjYWRlOworCistLSBDYXNlIDQ6IE5vIEFMVEVS IFRZUEUgKGJhc2VsaW5lIOKAlCBtdXN0IG5vdCBlcnJvcikKK2NyZWF0ZSB0eXBlIGJ1ZzE5Mzgy X2ZvbzIgYXMgKGEgaW50LCBiIGludCk7CitjcmVhdGUgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9i YXNlbGluZSgpIHJldHVybnMgYnVnMTkzODJfZm9vMiBhcyAkJAorZGVjbGFyZSByIGJ1ZzE5Mzgy X2ZvbzIgOj0gcm93KDEsIDIpOworYmVnaW4KKyAgICByZXR1cm4gcjsKK2VuZDsKKyQkIGxhbmd1 YWdlIHBscGdzcWw7CitzZWxlY3QgYnVnMTkzODJfdGVzdF9iYXNlbGluZSgpOworZHJvcCBmdW5j dGlvbiBidWcxOTM4Ml90ZXN0X2Jhc2VsaW5lKCk7Citkcm9wIHR5cGUgYnVnMTkzODJfZm9vMjsK KworLS0gQ2FzZSA1OiBGaWVsZC1ieS1maWVsZCBhc3NpZ25tZW50IChkb3Qgbm90YXRpb24pCitj cmVhdGUgdHlwZSBidWcxOTM4Ml9mb28zIGFzIChhIGludCwgYiBpbnQpOworY3JlYXRlIGZ1bmN0 aW9uIGJ1ZzE5MzgyX3Rlc3RfZmllbGRfYXNzaWduKCkgcmV0dXJucyByZWNvcmQgYXMgJCQKK2Rl Y2xhcmUgciBidWcxOTM4Ml9mb28zOworYmVnaW4KKyAgICByLmEgOj0gMTIzOworICAgIHIuYiA6 PSBwb3dlcigyLCAzMCk6OmludDQ7CisgICAgYWx0ZXIgdHlwZSBidWcxOTM4Ml9mb28zIGFsdGVy IGF0dHJpYnV0ZSBiIHR5cGUgdGV4dDsKKyAgICByZXR1cm4gcjsKK2VuZDsKKyQkIGxhbmd1YWdl IHBscGdzcWw7CitzZWxlY3QgYnVnMTkzODJfdGVzdF9maWVsZF9hc3NpZ24oKTsKK2Ryb3AgZnVu Y3Rpb24gYnVnMTkzODJfdGVzdF9maWVsZF9hc3NpZ24oKTsKK2Ryb3AgdHlwZSBidWcxOTM4Ml9m b28zIGNhc2NhZGU7CisKKy0tIENhc2UgNjogU0VMRUNUIElOVE8gaW5kaXZpZHVhbCBmaWVsZHMK K2NyZWF0ZSB0eXBlIGJ1ZzE5MzgyX2ZvbzQgYXMgKGEgaW50LCBiIGludCk7CitjcmVhdGUgdGFi bGUgYnVnMTkzODJfdGJsIChhIGludCwgYiBpbnQpOworaW5zZXJ0IGludG8gYnVnMTkzODJfdGJs IHZhbHVlcyAoMTIzLCBwb3dlcigyLCAzMCk6OmludDQpOworY3JlYXRlIGZ1bmN0aW9uIGJ1ZzE5 MzgyX3Rlc3Rfc2VsZWN0X2ludG9fZmllbGQoKSByZXR1cm5zIHJlY29yZCBhcyAkJAorZGVjbGFy ZSByIGJ1ZzE5MzgyX2ZvbzQ7CitiZWdpbgorICAgIHNlbGVjdCBhLCBiIGludG8gci5hLCByLmIg ZnJvbSBidWcxOTM4Ml90Ymw7CisgICAgYWx0ZXIgdHlwZSBidWcxOTM4Ml9mb280IGFsdGVyIGF0 dHJpYnV0ZSBiIHR5cGUgdGV4dDsKKyAgICByZXR1cm4gcjsKK2VuZDsKKyQkIGxhbmd1YWdlIHBs cGdzcWw7CitzZWxlY3QgYnVnMTkzODJfdGVzdF9zZWxlY3RfaW50b19maWVsZCgpOworZHJvcCBm dW5jdGlvbiBidWcxOTM4Ml90ZXN0X3NlbGVjdF9pbnRvX2ZpZWxkKCk7Citkcm9wIHRhYmxlIGJ1 ZzE5MzgyX3RibDsKK2Ryb3AgdHlwZSBidWcxOTM4Ml9mb280IGNhc2NhZGU7CisKKy0tIENhc2Ug NzogUkFJU0UgTk9USUNFIHdpdGggcmVjb3JkIHZhcmlhYmxlIChleGVjX2V2YWxfZGF0dW0gcGF0 aCkKK2NyZWF0ZSB0eXBlIGJ1ZzE5MzgyX2ZvbzUgYXMgKGEgaW50LCBiIGludCk7CitjcmVhdGUg ZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9ldmFsX2RhdHVtKCkgcmV0dXJucyB2b2lkIGFzICQkCitk ZWNsYXJlIHIgYnVnMTkzODJfZm9vNTsKK2JlZ2luCisgICAgci5iIDo9IHBvd2VyKDIsIDMwKTo6 aW50NDsKKyAgICBhbHRlciB0eXBlIGJ1ZzE5MzgyX2ZvbzUgYWx0ZXIgYXR0cmlidXRlIGIgdHlw ZSB0ZXh0OworICAgIHJhaXNlIG5vdGljZSAnciA9ICUnLCByOworZW5kOworJCQgbGFuZ3VhZ2Ug cGxwZ3NxbDsKK3NlbGVjdCBidWcxOTM4Ml90ZXN0X2V2YWxfZGF0dW0oKTsKK2Ryb3AgZnVuY3Rp b24gYnVnMTkzODJfdGVzdF9ldmFsX2RhdHVtKCk7Citkcm9wIHR5cGUgYnVnMTkzODJfZm9vNSBj YXNjYWRlOworCistLSBDYXNlIDg6IEdlbmVyaWMgUkVDT1JEIHZhcmlhYmxlIGFzc2lnbmVkIHZp YSBST1c6OmZvbyBjYXN0CistLSBUaGUgZGVjbGFyZWQgdHlwZSBpcyBSRUNPUkRPSUQ7IGVmZmVj dGl2ZSB0eXBlIGlzIGRpc2NvdmVyZWQgZnJvbSB0aGUKKy0tIGFzc2lnbmVkIHZhbHVlJ3MgZXJf dHlwZWlkLiAgTXVzdCBlcnJvciwgbm90IGNyYXNoLgorY3JlYXRlIHR5cGUgYnVnMTkzODJfZm9v NiBhcyAoYSBpbnQsIGIgaW50KTsKK2NyZWF0ZSBmdW5jdGlvbiBidWcxOTM4Ml90ZXN0X2dlbmVy aWNfcmVjb3JkKCkgcmV0dXJucyByZWNvcmQgYXMgJCQKK2RlY2xhcmUgciByZWNvcmQ7CitiZWdp bgorICAgIHIgOj0gcm93KDEyMywgcG93ZXIoMiwgMzApOjppbnQ0KTo6YnVnMTkzODJfZm9vNjsK KyAgICBhbHRlciB0eXBlIGJ1ZzE5MzgyX2ZvbzYgYWx0ZXIgYXR0cmlidXRlIGIgdHlwZSB0ZXh0 OworICAgIHJldHVybiByOworZW5kOworJCQgbGFuZ3VhZ2UgcGxwZ3NxbDsKK3NlbGVjdCBidWcx OTM4Ml90ZXN0X2dlbmVyaWNfcmVjb3JkKCk7Citkcm9wIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3Rf Z2VuZXJpY19yZWNvcmQoKTsKK2Ryb3AgdHlwZSBidWcxOTM4Ml9mb282IGNhc2NhZGU7CisKKy0t IENhc2UgOTogR2VuZXJpYyBSRUNPUkQgd2l0aCBuZXN0ZWQgY29tcG9zaXRlIGFsdGVyCitjcmVh dGUgdHlwZSBidWcxOTM4Ml9pbm5lcjIgYXMgKHggaW50LCB5IGludCk7CitjcmVhdGUgdHlwZSBi dWcxOTM4Ml9vdXRlcjIgYXMgKGEgaW50LCBiIGJ1ZzE5MzgyX2lubmVyMik7CitjcmVhdGUgZnVu Y3Rpb24gYnVnMTkzODJfdGVzdF9nZW5lcmljX25lc3RlZCgpIHJldHVybnMgcmVjb3JkIGFzICQk CitkZWNsYXJlIHIgcmVjb3JkOworYmVnaW4KKyAgICByIDo9IHJvdygxLCByb3coMTAsIHBvd2Vy KDIsIDMwKTo6aW50NCk6OmJ1ZzE5MzgyX2lubmVyMik6OmJ1ZzE5MzgyX291dGVyMjsKKyAgICBh bHRlciB0eXBlIGJ1ZzE5MzgyX2lubmVyMiBhbHRlciBhdHRyaWJ1dGUgeSB0eXBlIHRleHQ7Cisg ICAgcmV0dXJuIHI7CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBnc3FsOworc2VsZWN0IGJ1ZzE5Mzgy X3Rlc3RfZ2VuZXJpY19uZXN0ZWQoKTsKK2Ryb3AgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9nZW5l cmljX25lc3RlZCgpOworZHJvcCB0eXBlIGJ1ZzE5MzgyX291dGVyMiBjYXNjYWRlOworZHJvcCB0 eXBlIGJ1ZzE5MzgyX2lubmVyMiBjYXNjYWRlOworCistLSBDYXNlIDEwOiBXaG9sZS1yZWNvcmQg cmVhc3NpZ25tZW50IGFmdGVyIGlubmVyLXR5cGUgYWx0ZXIuCistLSBUaGUgc2Vjb25kIGFzc2ln bm1lbnQgYnVpbGRzIGZyZXNoIGRhdGEgbWF0Y2hpbmcgdGhlIHBvc3QtQUxURVIgdHlwZTsKKy0t IHRoZSBzbmFwc2hvdCBtdXN0IHJlZnJlc2ggc28gdGhlIHJlYXNzaWdubWVudCBzdWNjZWVkcy4K K2NyZWF0ZSB0eXBlIGJ1ZzE5MzgyX2lubmVyMyBhcyAoeCBpbnQsIHkgaW50KTsKK2NyZWF0ZSB0 eXBlIGJ1ZzE5MzgyX291dGVyMyBhcyAoYSBpbnQsIGIgYnVnMTkzODJfaW5uZXIzKTsKK2NyZWF0 ZSBmdW5jdGlvbiBidWcxOTM4Ml90ZXN0X3JlYXNzaWduKCkgcmV0dXJucyBidWcxOTM4Ml9vdXRl cjMgYXMgJCQKK2RlY2xhcmUgciBidWcxOTM4Ml9vdXRlcjM7CitiZWdpbgorICAgIHIgOj0gcm93 KDEsIHJvdygxMCwgMjApOjpidWcxOTM4Ml9pbm5lcjMpOjpidWcxOTM4Ml9vdXRlcjM7CisgICAg YWx0ZXIgdHlwZSBidWcxOTM4Ml9pbm5lcjMgYWx0ZXIgYXR0cmlidXRlIHkgdHlwZSB0ZXh0Owor ICAgIHIgOj0gcm93KDEsIHJvdygxMCwgJ2hlbGxvJyk6OmJ1ZzE5MzgyX2lubmVyMyk6OmJ1ZzE5 MzgyX291dGVyMzsKKyAgICByZXR1cm4gcjsKK2VuZDsKKyQkIGxhbmd1YWdlIHBscGdzcWw7Citz ZWxlY3QgYnVnMTkzODJfdGVzdF9yZWFzc2lnbigpOworZHJvcCBmdW5jdGlvbiBidWcxOTM4Ml90 ZXN0X3JlYXNzaWduKCk7Citkcm9wIHR5cGUgYnVnMTkzODJfb3V0ZXIzIGNhc2NhZGU7Citkcm9w IHR5cGUgYnVnMTkzODJfaW5uZXIzIGNhc2NhZGU7CisKKy0tIENhc2UgMTE6IEFub255bW91cyBy b3d0eXBlIGJhc2VsaW5lIChSRUNPUkRPSUQgd2l0aCBubyA6OmZvbyBjYXN0KS4KKy0tIE5vbi12 ZXJzaW9uYWJsZSByb3d0eXBlcyBtdXN0IG5vdCB0cmlnZ2VyIGEgZmFsc2UgcG9zaXRpdmUuCitj cmVhdGUgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9hbm9uX2Jhc2VsaW5lKCkgcmV0dXJucyByZWNv cmQgYXMgJCQKK2RlY2xhcmUgciByZWNvcmQ7CitiZWdpbgorICAgIHNlbGVjdCAxIGFzIGEsIDIg YXMgYiBpbnRvIHI7CisgICAgcmV0dXJuIHI7CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBnc3FsOwor c2VsZWN0IGJ1ZzE5MzgyX3Rlc3RfYW5vbl9iYXNlbGluZSgpOworZHJvcCBmdW5jdGlvbiBidWcx OTM4Ml90ZXN0X2Fub25fYmFzZWxpbmUoKTsKKworLS0gQ2FzZSAxMjogVmFyaWFibGUtdG8tdmFy aWFibGUgY29weSBhZnRlciBpbm5lci10eXBlIGFsdGVyLgorLS0gUmVhZGluZyByMSBhcyBhbiBy dmFsdWUgbXVzdCBkZXRlY3QgdGhlIHN0YWxlIG5lc3RlZCB0eXBlLgorY3JlYXRlIHR5cGUgYnVn MTkzODJfaW5uZXI0IGFzICh4IGludCwgeSBpbnQpOworY3JlYXRlIHR5cGUgYnVnMTkzODJfb3V0 ZXI0IGFzIChhIGludCwgYiBidWcxOTM4Ml9pbm5lcjQpOworY3JlYXRlIGZ1bmN0aW9uIGJ1ZzE5 MzgyX3Rlc3RfdmFyX2NvcHkoKSByZXR1cm5zIGJ1ZzE5MzgyX291dGVyNCBhcyAkJAorZGVjbGFy ZSByMSBidWcxOTM4Ml9vdXRlcjQ7IHIyIGJ1ZzE5MzgyX291dGVyNDsKK2JlZ2luCisgICAgcjEg Oj0gcm93KDEsIHJvdygxMCwgcG93ZXIoMiwgMzApOjppbnQ0KTo6YnVnMTkzODJfaW5uZXI0KTo6 YnVnMTkzODJfb3V0ZXI0OworICAgIGFsdGVyIHR5cGUgYnVnMTkzODJfaW5uZXI0IGFsdGVyIGF0 dHJpYnV0ZSB5IHR5cGUgdGV4dDsKKyAgICByMiA6PSByMTsKKyAgICByZXR1cm4gcjI7CitlbmQ7 CiskJCBsYW5ndWFnZSBwbHBnc3FsOworc2VsZWN0IGJ1ZzE5MzgyX3Rlc3RfdmFyX2NvcHkoKTsK K2Ryb3AgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF92YXJfY29weSgpOworZHJvcCB0eXBlIGJ1ZzE5 MzgyX291dGVyNCBjYXNjYWRlOworZHJvcCB0eXBlIGJ1ZzE5MzgyX2lubmVyNCBjYXNjYWRlOwor CistLSBDYXNlIDEzOiBSQUlTRSBOT1RJQ0Ugd2l0aCBnZW5lcmljIFJFQ09SRCAoUkVDT1JET0lE ICsgcmVhZGVyIHBhdGgpLgorY3JlYXRlIHR5cGUgYnVnMTkzODJfZm9vNyBhcyAoYSBpbnQsIGIg aW50KTsKK2NyZWF0ZSBmdW5jdGlvbiBidWcxOTM4Ml90ZXN0X2dlbmVyaWNfcmFpc2UoKSByZXR1 cm5zIHZvaWQgYXMgJCQKK2RlY2xhcmUgciByZWNvcmQ7CitiZWdpbgorICAgIHIgOj0gcm93KDEs IHBvd2VyKDIsIDMwKTo6aW50NCk6OmJ1ZzE5MzgyX2Zvbzc7CisgICAgYWx0ZXIgdHlwZSBidWcx OTM4Ml9mb283IGFsdGVyIGF0dHJpYnV0ZSBiIHR5cGUgdGV4dDsKKyAgICByYWlzZSBub3RpY2Ug J3IgPSAlJywgcjsKK2VuZDsKKyQkIGxhbmd1YWdlIHBscGdzcWw7CitzZWxlY3QgYnVnMTkzODJf dGVzdF9nZW5lcmljX3JhaXNlKCk7Citkcm9wIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfZ2VuZXJp Y19yYWlzZSgpOworZHJvcCB0eXBlIGJ1ZzE5MzgyX2ZvbzcgY2FzY2FkZTsKKworLS0gQ2FzZSAx NDogY29tcG9zaXRlIHR5cGUgcmVhY2hhYmxlIHRocm91Z2ggYW4gYXJyYXkgYXR0cmlidXRlLgor LS0gVGhlIGVsZW1lbnQgY29tcG9zaXRlIHR5cGUgbXVzdCBiZSB0cmFja2VkIGV2ZW4gdGhvdWdo IHRoZSBhdHRyaWJ1dGUncworLS0gb3duIHR5cGUgaXMgYW4gYXJyYXk7IG90aGVyd2lzZSBBTFRF UiBUWVBFIG9uIHRoZSBlbGVtZW50IGdvZXMgdW5kZXRlY3RlZAorLS0gYW5kIHJlY29yZF9vdXQo KSBjcmFzaGVzIHJlaW50ZXJwcmV0aW5nIHRoZSBzdG9yZWQgYnl0ZXMuCitjcmVhdGUgdHlwZSBi dWcxOTM4Ml9lbGVtIGFzIChmMSBpbnQpOworY3JlYXRlIHR5cGUgYnVnMTkzODJfYXJycGFyZW50 IGFzIChhcnIgYnVnMTkzODJfZWxlbVtdKTsKK2NyZWF0ZSBmdW5jdGlvbiBidWcxOTM4Ml90ZXN0 X2FycmF5X2VsZW0oKSByZXR1cm5zIGJ1ZzE5MzgyX2FycnBhcmVudCBhcyAkJAorZGVjbGFyZSBy IGJ1ZzE5MzgyX2FycnBhcmVudDsKK2JlZ2luCisgICAgciA6PSByb3coYXJyYXlbcm93KHBvd2Vy KDIsIDMwKTo6aW50NCk6OmJ1ZzE5MzgyX2VsZW1dOjpidWcxOTM4Ml9lbGVtW10pOjpidWcxOTM4 Ml9hcnJwYXJlbnQ7CisgICAgYWx0ZXIgdHlwZSBidWcxOTM4Ml9lbGVtIGFsdGVyIGF0dHJpYnV0 ZSBmMSB0eXBlIHRleHQ7CisgICAgcmV0dXJuIHI7CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBnc3Fs Oworc2VsZWN0IGJ1ZzE5MzgyX3Rlc3RfYXJyYXlfZWxlbSgpOworZHJvcCBmdW5jdGlvbiBidWcx OTM4Ml90ZXN0X2FycmF5X2VsZW0oKTsKK2Ryb3AgdHlwZSBidWcxOTM4Ml9hcnJwYXJlbnQgY2Fz Y2FkZTsKK2Ryb3AgdHlwZSBidWcxOTM4Ml9lbGVtIGNhc2NhZGU7CisKKy0tIENhc2UgMTU6IGFy cmF5IGVsZW1lbnQgY29tcG9zaXRlLCB3aG9sZS1yZWNvcmQgcmVhc3NpZ25tZW50IGFmdGVyIEFM VEVSCistLSB3aXRoIGZyZXNoIG1hdGNoaW5nIGRhdGEgbXVzdCBzdWNjZWVkIChubyBmYWxzZSBw b3NpdGl2ZSBvbiBhcnJheXMpLgorY3JlYXRlIHR5cGUgYnVnMTkzODJfZWxlbTIgYXMgKGYxIGlu dCk7CitjcmVhdGUgdHlwZSBidWcxOTM4Ml9hcnJwYXJlbnQyIGFzIChhcnIgYnVnMTkzODJfZWxl bTJbXSk7CitjcmVhdGUgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9hcnJheV9yZWFzc2lnbigpIHJl dHVybnMgYnVnMTkzODJfYXJycGFyZW50MiBhcyAkJAorZGVjbGFyZSByIGJ1ZzE5MzgyX2FycnBh cmVudDI7CitiZWdpbgorICAgIHIgOj0gcm93KGFycmF5W3JvdygxKTo6YnVnMTkzODJfZWxlbTJd OjpidWcxOTM4Ml9lbGVtMltdKTo6YnVnMTkzODJfYXJycGFyZW50MjsKKyAgICBhbHRlciB0eXBl IGJ1ZzE5MzgyX2VsZW0yIGFkZCBhdHRyaWJ1dGUgZjIgdGV4dDsKKyAgICByIDo9IHJvdyhhcnJh eVtyb3coMSwgJ2hpJyk6OmJ1ZzE5MzgyX2VsZW0yXTo6YnVnMTkzODJfZWxlbTJbXSk6OmJ1ZzE5 MzgyX2FycnBhcmVudDI7CisgICAgcmV0dXJuIHI7CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBnc3Fs Oworc2VsZWN0IGJ1ZzE5MzgyX3Rlc3RfYXJyYXlfcmVhc3NpZ24oKTsKK2Ryb3AgZnVuY3Rpb24g YnVnMTkzODJfdGVzdF9hcnJheV9yZWFzc2lnbigpOworZHJvcCB0eXBlIGJ1ZzE5MzgyX2FycnBh cmVudDIgY2FzY2FkZTsKK2Ryb3AgdHlwZSBidWcxOTM4Ml9lbGVtMiBjYXNjYWRlOwotLSAKMi4z OS41IChBcHBsZSBHaXQtMTU0KQoK --000000000000477c1806560da5f8--