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 1vwgZw-006K8O-1J for pgsql-hackers@arkaria.postgresql.org; Sun, 01 Mar 2026 13:11: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 1vwgZu-00DBCu-1m for pgsql-hackers@arkaria.postgresql.org; Sun, 01 Mar 2026 13:11:22 +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 1vwgZt-00DBCm-1j for pgsql-hackers@lists.postgresql.org; Sun, 01 Mar 2026 13:11:22 +0000 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vwgZi-00000001wAw-1pOW for pgsql-hackers@lists.postgresql.org; Sun, 01 Mar 2026 13:11:20 +0000 Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-439a7efc0c9so623043f8f.0 for ; Sun, 01 Mar 2026 05:11:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772370670; cv=none; d=google.com; s=arc-20240605; b=XrpoQZQmcSXKY9vYEPYq1Fw5s08MBbCygu8wrO09VHH+cckbxRuH1dh2+h9NWeQ79t W/NAlyCxm5zq9vKF9E8uMFIl2jaiBQHroKElSQ37TK+iQZDPrcw5c3C20pILio/8AzJO igmWCYLifge4zYY9KuV4uwI3Q7LnGQJUASSUcJFvHyZuD9FCsvoUX4uhvYYYeil6CIo0 qwldmPNgJMmadBTKlIaG2Zol+NHMD9TRccET+wFXXMCaAUmX7B23EBg1VsqY1bNZfGiF qulmLRpsFz9tQ8yj5cWmCuIazm0g19JHDd+PLyDOgLLzUZVw1TcNxUxFWKYMYHdq+JN/ AZgw== 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=88utgM6oS85Lf05ZbmBJFEaKESm5pKQA7HCnyLhwybY=; fh=3+TWkLeJZ8AY7GYAuMc+EgLGh527R7Fytt3ENihRZ98=; b=DZHy31zclOPdoE4BYhg5iRqNSxQHqxWKgbElwAQ4Y3TTIupojHWXFYQSA3uAmR7MQm jwXpSpcCepJ2NCfNI7qeyKw7siAp4NIltSF8FZnwC4AqvA6+2A8CHKAPf1aD7C6RzRw/ EiPQUEfuV/WfauwLOXkBCwiyNWtekmAcABp94D3/tT/imAncu9JXdKLdKRDrC9kCrqsh 8jaJJ+8HMdUuYAQ3fArWLV2aS90Mqa7W1I1hE3JNQ4INqiLb9ublm9Vffdm13oqLpQ5V KPZshOymZhXGMxpLagh7vr6b4OOTcbbXJtGam66hKbSVxdtpWvID2N/0nTMxKCDVu7ZF 6Vag==; 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=20230601; t=1772370670; x=1772975470; 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=88utgM6oS85Lf05ZbmBJFEaKESm5pKQA7HCnyLhwybY=; b=HZ4kvIPEjCC7CJv2iuLITYui6APZvkWb8YnCeqyNYxBQNqnBaZbAIPQYYQdHISlCzk g38SEHUuWApNo9GfkgFV0LcjKcSN5T6GyRpR0xbYzoM/bcHy8zFgT7GkTaS4kkJNzbzv ZhWpq6chqI0lcE+a3LIVmGO+CdeBAlGIydsCMv8s5rGGEAD+uK8L60fHpAc1dLi65AaV bikzpGB+NBtT701R/CLASHqyjyWzcvonl6SW4hTZre4pEYH5F4E/xb7q7FPJ1FsNi6jq +9ccNF3ntuS0c6BLLDAjHJDd8vE7Yco5BblfvGwgM5BFAXgpgQ9Vout3dpAtuE1zk2xX t8MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772370670; x=1772975470; 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=88utgM6oS85Lf05ZbmBJFEaKESm5pKQA7HCnyLhwybY=; b=T+m+kXQKwu6iTa5UYI9f8VRk1XJfMXW1GAD5nVzaFxfLyCRT6bP8/qnavaUQ3K42bv XyAiKCg2FAXbibKJD9mvOeANFnphsq8d0nPCHh7Gnx1Dzd/TDynaOYjogcw70y01Y0hc xUdskOxQjXsEsCI67DDardjXCkKFpH+bxjHz9e7muWRtxSFmout0XIUO7mVddIetGHrd 4Tr5Gu25qoH91KccRpnJyQcSgTc9ph/1CzQuCc6RZWILP5yppYPxrQXTDHR3svXiLkhB gWmurGMvFlG7vvyXXuYZn9px4op0wQe7Gv95BqIYpaNi2CYDYEGGUcLU1zhhsx8pphcj 0H5Q== X-Forwarded-Encrypted: i=1; AJvYcCUkOFNnC1xU1rDnpxswd1XwQnqAB/+9v1WXuVsaYMJjrl5eMnSSC70B06yrDhmzsS+S0JZnIYlHYZjo7hf/@lists.postgresql.org X-Gm-Message-State: AOJu0YylfOKDJV+DWT5RFNVIPl6ql/h4XWRtFmJFEHIygRlIZlt+oaMO EaJUiigU1mviB1td74hb8CU+3ANOLbjzlKUcikOA6fs2RG8HipFBJWJDgbaPfB7Vz1lsEPXhN/M j76GjWzHgw7e8ipM9H2KGbR5/iS94udlVcE8J X-Gm-Gg: ATEYQzx21Laf9ijLHkva8mW4Krq3nybBt2t48mMj0zZCeW4e0bTFuSTvWeDZ2eQt1BX IAMZE8tJ79q91/mvVkhUbENvSyP78sUqOlWy00aakQB4MWtsIXZed74sUtq1GXZhfZ6muykmD/1 o3ecRiOGYwNSGqsI/B9D8HhPvOZZgsShKg3cpZectEjAEkx/hIDz8kP+xV0W577dYGAkLjPHau7 lFSc0gRBL1bYE9wC0kXZXG/luVgxCmaSbJqwvDuDxc2iv1vTTPgsI1vXj6cAr1khlZYjS8IQWL2 YranTBUWJsa1ruAYSbq5Qv7ouWKgJhLbYcRIhy0xoSkL3BW8O4S1RrzkKwkv2hwwPPXE16G8lA= = X-Received: by 2002:a05:6000:400a:b0:439:ac16:bc6 with SMTP id ffacd0b85a97d-439ac160e0cmr6006634f8f.18.1772370669712; Sun, 01 Mar 2026 05:11:09 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: David Rowley Date: Mon, 2 Mar 2026 02:10:56 +1300 X-Gm-Features: AaiRm51-6zxFvcJqDrMGqm71lIJtPAMdz2KKgxeo5VdB_sxkWP-hVvga3vWTYnk Message-ID: Subject: Re: More speedups for tuple deformation To: Andres Freund Cc: John Naylor , Chao Li , PostgreSQL Developers Content-Type: multipart/mixed; boundary="0000000000002deb23064bf63451" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002deb23064bf63451 Content-Type: text/plain; charset="UTF-8" On Thu, 26 Feb 2026 at 09:29, Andres Freund wrote: > Huh. It, at least partially, seems to be related to using an integer for > attnum et al. Due to us using -fwrapv, the compiler can't actually assume that > an attnum++ won't overflow. An overflow would make the loop trip counts a lot > more complicated. Even with that I don't understand how it ends up > generating such crappy code, but since using size_t fixes it... Thanks. That seems to make the gcc compiled version quite a bit better. I am still seeing a bit of register overflow as the TupleDesc is written to the stack and reloaded back into a register a couple of times. I've attached the objdump in question. if (attnum < firstNonGuaranteedAttr) 1c3c: 48 39 e8 cmp rax,rbp 1c3f: 73 7f jae 1cc0 1c41: 48 89 54 24 f0 mov QWORD PTR [rsp-0x10],rdx 1c46: 48 8d 74 c2 20 lea rsi,[rdx+rax*8+0x20] the tupledesc is put back into the register in: off += cattr->attlen; 1f88: 48 8b 54 24 f0 mov rdx,QWORD PTR [rsp-0x10] I've not found a way to have gcc not do this. I've also resequenced the patches so 0002 contains the sibling call optimisation for slot_getmissingattrs() and I've applied that tail call optimisation that you mentioned for slot_getmissingattrs() in 0004. I've attached benchmark results in the attached spreadsheet. David --0000000000002deb23064bf63451 Content-Type: text/plain; charset="US-ASCII"; name="tts_heap_getsomeattrs_objdump_Mintel.txt" Content-Disposition: attachment; filename="tts_heap_getsomeattrs_objdump_Mintel.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm7rfrep0 MDAwMDAwMDAwMDAwMWJiMCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzPjoKewogICAgMWJiMDoJZjMg MGYgMWUgZmEgICAgICAgICAgCWVuZGJyNjQKICAgIDFiYjQ6CTQxIDU3ICAgICAgICAgICAgICAg IAlwdXNoICAgcjE1CiAgICAxYmI2Ogk0OSA4OSBmYiAgICAgICAgICAgICAJbW92ICAgIHIxMSxy ZGkKICAgIDFiYjk6CTQxIDU2ICAgICAgICAgICAgICAgIAlwdXNoICAgcjE0CiAgICAxYmJiOgk0 MSA1NSAgICAgICAgICAgICAgICAJcHVzaCAgIHIxMwogICAgMWJiZDoJNDEgNTQgICAgICAgICAg ICAgICAgCXB1c2ggICByMTIKICAgIDFiYmY6CTRjIDYzIGU2ICAgICAgICAgICAgIAltb3ZzeGQg cjEyLGVzaQogICAgMWJjMjoJNTUgICAgICAgICAgICAgICAgICAgCXB1c2ggICByYnAKICAgIDFi YzM6CTUzICAgICAgICAgICAgICAgICAgIAlwdXNoICAgcmJ4CglIZWFwVHVwbGVIZWFkZXIgdHVw ID0gdHVwbGUtPnRfZGF0YTsKICAgIDFiYzQ6CTQ4IDhiIDQ3IDQwICAgICAgICAgIAltb3YgICAg cmF4LFFXT1JEIFBUUiBbcmRpKzB4NDBdCglUdXBsZURlc2MJdHVwbGVEZXNjID0gc2xvdC0+dHRz X3R1cGxlRGVzY3JpcHRvcjsKICAgIDFiYzg6CTQ4IDhiIDU3IDEwICAgICAgICAgIAltb3YgICAg cmR4LFFXT1JEIFBUUiBbcmRpKzB4MTBdCglpc251bGwgPSBzbG90LT50dHNfaXNudWxsOwogICAg MWJjYzoJNDggOGIgNGYgMjAgICAgICAgICAgCW1vdiAgICByY3gsUVdPUkQgUFRSIFtyZGkrMHgy MF0KCUhlYXBUdXBsZUhlYWRlciB0dXAgPSB0dXBsZS0+dF9kYXRhOwogICAgMWJkMDoJNDggOGIg NTggMTAgICAgICAgICAgCW1vdiAgICByYngsUVdPUkQgUFRSIFtyYXgrMHgxMF0KCWlmIChUVFNf T0JFWVNfTk9UX05VTExfQ09OU1RSQUlOVFMoc2xvdCkpCiAgICAxYmQ0OglmNiA0NyAwNCAwOCAg ICAgICAgICAJdGVzdCAgIEJZVEUgUFRSIFtyZGkrMHg0XSwweDgKICAgIDFiZDg6CTBmIDg0IDAy IDA0IDAwIDAwICAgIAlqZSAgICAgMWZlMCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4NDMwPgoJ CWZpcnN0Tm9uR3VhcmFudGVlZEF0dHIgPSBNaW4ocmVxbmF0dHMsIHR1cGxlRGVzYy0+Zmlyc3RO b25HdWFyYW50ZWVkQXR0cik7CiAgICAxYmRlOgk4YiA0MiAxNCAgICAgICAgICAgICAJbW92ICAg IGVheCxEV09SRCBQVFIgW3JkeCsweDE0XQogICAgMWJlMToJNDEgMzkgYzQgICAgICAgICAgICAg CWNtcCAgICByMTJkLGVheAogICAgMWJlNDoJNDEgMGYgNGUgYzQgICAgICAgICAgCWNtb3ZsZSBl YXgscjEyZAoJaWYgKGF0dG51bSA8IGZpcnN0Tm9uR3VhcmFudGVlZEF0dHIpCiAgICAxYmU4Ogk0 OCA2MyBlOCAgICAgICAgICAgICAJbW92c3hkIHJicCxlYXgKCWZpcnN0Tm9uQ2FjaGVPZmZzZXRB dHRyID0gdHVwbGVEZXNjLT5maXJzdE5vbkNhY2hlZE9mZnNldEF0dHI7CiAgICAxYmViOgk0YyA2 MyA1MiAxMCAgICAgICAgICAJbW92c3hkIHIxMCxEV09SRCBQVFIgW3JkeCsweDEwXQoJaWYgKEhl YXBUdXBsZUhhc051bGxzKHR1cGxlKSkKICAgIDFiZWY6CWY2IDQzIDE0IDAxICAgICAgICAgIAl0 ZXN0ICAgQllURSBQVFIgW3JieCsweDE0XSwweDEKICAgIDFiZjM6CTBmIDg0IGI3IDAzIDAwIDAw ICAgIAlqZSAgICAgMWZiMCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4NDAwPgoJCW5hdHRzID0g SGVhcFR1cGxlSGVhZGVyR2V0TmF0dHModHVwKTsKICAgIDFiZjk6CTQ0IDBmIGI3IDRiIDEyICAg ICAgIAltb3Z6eCAgcjlkLFdPUkQgUFRSIFtyYngrMHgxMl0KICAgIDFiZmU6CTQxIDgxIGUxIGZm IDA3IDAwIDAwIAlhbmQgICAgcjlkLDB4N2ZmCiAqCQlDb21wdXRlcyBzaXplIG9mIG51bGwgYml0 bWFwIGdpdmVuIG51bWJlciBvZiBkYXRhIGNvbHVtbnMuCiAqLwpzdGF0aWMgaW5saW5lIGludApC SVRNQVBMRU4oaW50IE5BVFRTKQp7CglyZXR1cm4gKE5BVFRTICsgNykgLyA4OwogICAgMWMwNToJ NDUgOGQgNDEgMDcgICAgICAgICAgCWxlYSAgICByOGQsW3I5KzB4N10KICAgIDFjMDk6CTQxIGMx IGY4IDAzICAgICAgICAgIAlzYXIgICAgcjhkLDB4MwoJCXRwID0gKGNoYXIgKikgdHVwICsgTUFY QUxJR04ob2Zmc2V0b2YoSGVhcFR1cGxlSGVhZGVyRGF0YSwgdF9iaXRzKSArCiAgICAxYzBkOgk0 MSA4MyBjMCAxZSAgICAgICAgICAJYWRkICAgIHI4ZCwweDFlCiAgICAxYzExOgk0MSA4MSBlMCBm OCAwMyAwMCAwMCAJYW5kICAgIHI4ZCwweDNmOAogICAgMWMxODoJNDkgMDEgZDggICAgICAgICAg ICAgCWFkZCAgICByOCxyYngKCQluYXR0cyA9IE1pbihuYXR0cywgcmVxbmF0dHMpOwogICAgMWMx YjoJNDUgMzkgY2MgICAgICAgICAgICAgCWNtcCAgICByMTJkLHI5ZAogICAgMWMxZToJNGQgMGYg NGUgY2MgICAgICAgICAgCWNtb3ZsZSByOSxyMTIKCQkJZmlyc3ROdWxsQXR0ciA9IG5hdHRzOwog ICAgMWMyMjoJNDUgODkgY2UgICAgICAgICAgICAgCW1vdiAgICByMTRkLHI5ZAoJCWlmIChuYXR0 cyA+IGZpcnN0Tm9uR3VhcmFudGVlZEF0dHIpCiAgICAxYzI1Ogk0MSAzOSBjMSAgICAgICAgICAg ICAJY21wICAgIHI5ZCxlYXgKICAgIDFjMjg6CTBmIDhmIGVhIDA0IDAwIDAwICAgIAlqZyAgICAg MjExOCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4NTY4PgoJYXR0bnVtID0gc2xvdC0+dHRzX252 YWxpZDsKICAgIDFjMmU6CTQ5IDBmIGJmIDQzIDA2ICAgICAgIAltb3ZzeCAgcmF4LFdPUkQgUFRS IFtyMTErMHg2XQoJdmFsdWVzID0gc2xvdC0+dHRzX3ZhbHVlczsKICAgIDFjMzM6CTQ5IDhiIDdi IDE4ICAgICAgICAgIAltb3YgICAgcmRpLFFXT1JEIFBUUiBbcjExKzB4MThdCglzbG90LT50dHNf bnZhbGlkID0gcmVxbmF0dHM7CiAgICAxYzM3Ogk2NiA0NSA4OSA2MyAwNiAgICAgICAJbW92ICAg IFdPUkQgUFRSIFtyMTErMHg2XSxyMTJ3CglpZiAoYXR0bnVtIDwgZmlyc3ROb25HdWFyYW50ZWVk QXR0cikKICAgIDFjM2M6CTQ4IDM5IGU4ICAgICAgICAgICAgIAljbXAgICAgcmF4LHJicAogICAg MWMzZjoJNzMgN2YgICAgICAgICAgICAgICAgCWphZSAgICAxY2MwIDx0dHNfaGVhcF9nZXRzb21l YXR0cnMrMHgxMTA+CiAgICAxYzQxOgk0OCA4OSA1NCAyNCBmMCAgICAgICAJbW92ICAgIFFXT1JE IFBUUiBbcnNwLTB4MTBdLHJkeAogICAgMWM0NjoJNDggOGQgNzQgYzIgMjAgICAgICAgCWxlYSAg ICByc2ksW3JkeCtyYXgqOCsweDIwXQogICAgMWM0YjoJZWIgMjIgICAgICAgICAgICAgICAgCWpt cCAgICAxYzZmIDx0dHNfaGVhcF9nZXRzb21lYXR0cnMrMHhiZj4KICAgIDFjNGQ6CTBmIDFmIDAw ICAgICAgICAgICAgIAlub3AgICAgRFdPUkQgUFRSIFtyYXhdCnN0YXRpYyBpbmxpbmUgRGF0dW0K ZmV0Y2hfYXR0X25vZXJyKGNvbnN0IHZvaWQgKlQsIGJvb2wgYXR0Ynl2YWwsIGludCBhdHRsZW4p CnsKCWlmIChhdHRieXZhbCkKCXsKCQlzd2l0Y2ggKGF0dGxlbikKICAgIDFjNTA6CTY2IDQxIDgz IGZmIDAxICAgICAgIAljbXAgICAgcjE1dywweDEKICAgIDFjNTU6CTc0IDU5ICAgICAgICAgICAg ICAgIAlqZSAgICAgMWNiMCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4MTAwPgogKgkJUmV0dXJu cyBkYXR1bSByZXByZXNlbnRhdGlvbiBmb3IgYSA2NC1iaXQgaW50ZWdlci4KICovCnN0YXRpYyBp bmxpbmUgRGF0dW0KSW50NjRHZXREYXR1bShpbnQ2NCBYKQp7CglyZXR1cm4gKERhdHVtKSBYOwog ICAgMWM1NzoJNDggOGIgMTIgICAgICAgICAgICAgCW1vdiAgICByZHgsUVdPUkQgUFRSIFtyZHhd CgkJCXZhbHVlc1thdHRudW1dID0gZmV0Y2hfYXR0X25vZXJyKHRwICsgb2ZmLCB0cnVlLCBhdHRs ZW4pOwogICAgMWM1YToJNDggODkgMTQgYzcgICAgICAgICAgCW1vdiAgICBRV09SRCBQVFIgW3Jk aStyYXgqOF0scmR4CgkJCWF0dG51bSsrOwogICAgMWM1ZToJNDggODMgYzAgMDEgICAgICAgICAg CWFkZCAgICByYXgsMHgxCgkJfSB3aGlsZSAoYXR0bnVtIDwgZmlyc3ROb25HdWFyYW50ZWVkQXR0 cik7CiAgICAxYzYyOgk0OCA4MyBjNiAwOCAgICAgICAgICAJYWRkICAgIHJzaSwweDgKICAgIDFj NjY6CTQ4IDM5IGU4ICAgICAgICAgICAgIAljbXAgICAgcmF4LHJicAogICAgMWM2OToJMGYgODMg MTEgMDMgMDAgMDAgICAgCWphZSAgICAxZjgwIDx0dHNfaGVhcF9nZXRzb21lYXR0cnMrMHgzZDA+ CgkJCWlzbnVsbFthdHRudW1dID0gZmFsc2U7CiAgICAxYzZmOgljNiAwNCAwMSAwMCAgICAgICAg ICAJbW92ICAgIEJZVEUgUFRSIFtyY3grcmF4KjFdLDB4MAoJCQlvZmYgPSBjYXR0ci0+YXR0Y2Fj aGVvZmY7CiAgICAxYzczOgkwZiBiZiAxNiAgICAgICAgICAgICAJbW92c3ggIGVkeCxXT1JEIFBU UiBbcnNpXQoJCQljYXR0ciA9ICZjYXR0cnNbYXR0bnVtXTsKICAgIDFjNzY6CTQ5IDg5IGY1ICAg ICAgICAgICAgIAltb3YgICAgcjEzLHJzaQoJCQlhdHRsZW4gPSBjYXR0ci0+YXR0bGVuOwogICAg MWM3OToJNDQgMGYgYjcgN2UgMDIgICAgICAgCW1vdnp4ICByMTVkLFdPUkQgUFRSIFtyc2krMHgy XQoJCQlvZmYgPSBjYXR0ci0+YXR0Y2FjaGVvZmY7CiAgICAxYzdlOgk0OCA4OSBkMyAgICAgICAg ICAgICAJbW92ICAgIHJieCxyZHgKCQkJdmFsdWVzW2F0dG51bV0gPSBmZXRjaF9hdHRfbm9lcnIo dHAgKyBvZmYsIHRydWUsIGF0dGxlbik7CiAgICAxYzgxOgk0YyAwMSBjMiAgICAgICAgICAgICAJ YWRkICAgIHJkeCxyOAogICAgMWM4NDoJNjYgNDEgODMgZmYgMDIgICAgICAgCWNtcCAgICByMTV3 LDB4MgogICAgMWM4OToJNzQgMTUgICAgICAgICAgICAgICAgCWplICAgICAxY2EwIDx0dHNfaGVh cF9nZXRzb21lYXR0cnMrMHhmMD4KICAgIDFjOGI6CTY2IDQxIDgzIGZmIDA0ICAgICAgIAljbXAg ICAgcjE1dywweDQKICAgIDFjOTA6CTc1IGJlICAgICAgICAgICAgICAgIAlqbmUgICAgMWM1MCA8 dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4YTA+CglyZXR1cm4gKERhdHVtKSBYOwogICAgMWM5MjoJ NDggNjMgMTIgICAgICAgICAgICAgCW1vdnN4ZCByZHgsRFdPUkQgUFRSIFtyZHhdCgkJewoJCQlj YXNlIHNpemVvZihpbnQzMik6CgkJCQlyZXR1cm4gSW50MzJHZXREYXR1bSgqKChjb25zdCBpbnQz MiAqKSBUKSk7CiAgICAxYzk1OgllYiBjMyAgICAgICAgICAgICAgICAJam1wICAgIDFjNWEgPHR0 c19oZWFwX2dldHNvbWVhdHRycysweGFhPgogICAgMWM5NzoJNjYgMGYgMWYgODQgMDAgMDAgMDAg CW5vcCAgICBXT1JEIFBUUiBbcmF4K3JheCoxKzB4MF0KICAgIDFjOWU6CTAwIDAwIAoJcmV0dXJu IChEYXR1bSkgWDsKICAgIDFjYTA6CTQ4IDBmIGJmIDEyICAgICAgICAgIAltb3ZzeCAgcmR4LFdP UkQgUFRSIFtyZHhdCgkJCWNhc2Ugc2l6ZW9mKGludDE2KToKCQkJCXJldHVybiBJbnQxNkdldERh dHVtKCooKGNvbnN0IGludDE2ICopIFQpKTsKICAgIDFjYTQ6CWViIGI0ICAgICAgICAgICAgICAg IAlqbXAgICAgMWM1YSA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4YWE+CiAgICAxY2E2Ogk2NiAy ZSAwZiAxZiA4NCAwMCAwMCAJY3Mgbm9wIFdPUkQgUFRSIFtyYXgrcmF4KjErMHgwXQogICAgMWNh ZDoJMDAgMDAgMDAgCglyZXR1cm4gKERhdHVtKSBYOwogICAgMWNiMDoJNDggMGYgYmUgMTIgICAg ICAgICAgCW1vdnN4ICByZHgsQllURSBQVFIgW3JkeF0KCQkJY2FzZSBzaXplb2YoY2hhcik6CgkJ CQlyZXR1cm4gQ2hhckdldERhdHVtKCooKGNvbnN0IGNoYXIgKikgVCkpOwogICAgMWNiNDoJZWIg YTQgICAgICAgICAgICAgICAgCWptcCAgICAxYzVhIDx0dHNfaGVhcF9nZXRzb21lYXR0cnMrMHhh YT4KICAgIDFjYjY6CTY2IDJlIDBmIDFmIDg0IDAwIDAwIAljcyBub3AgV09SRCBQVFIgW3JheCty YXgqMSsweDBdCiAgICAxY2JkOgkwMCAwMCAwMCAKCQlvZmYgPSAqb2ZmcDsKICAgIDFjYzA6CTQx IDhiIDViIDQ4ICAgICAgICAgIAltb3YgICAgZWJ4LERXT1JEIFBUUiBbcjExKzB4NDhdCglpZiAo dW5saWtlbHkoYXR0bnVtIDwgcmVxbmF0dHMpKQogICAgMWNjNDoJNDkgNjMgZWMgICAgICAgICAg ICAgCW1vdnN4ZCByYnAscjEyZAoJZmlyc3ROb25DYWNoZU9mZnNldEF0dHIgPSBNaW4oZmlyc3RO b25DYWNoZU9mZnNldEF0dHIsIG5hdHRzKTsKICAgIDFjYzc6CTQ1IDM5IGNhICAgICAgICAgICAg IAljbXAgICAgcjEwZCxyOWQKICAgIDFjY2E6CTRkIDBmIDRmIGQxICAgICAgICAgIAljbW92ZyAg cjEwLHI5CglpZiAoYXR0bnVtIDwgZmlyc3ROb25DYWNoZU9mZnNldEF0dHIpCiAgICAxY2NlOgk0 YyAzOSBkMCAgICAgICAgICAgICAJY21wICAgIHJheCxyMTAKICAgIDFjZDE6CTBmIDgyIGI5IDAx IDAwIDAwICAgIAlqYiAgICAgMWU5MCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4MmUwPgoJZm9y ICg7IGF0dG51bSA8IGZpcnN0TnVsbEF0dHI7IGF0dG51bSsrKQogICAgMWNkNzoJNGQgNjMgZDYg ICAgICAgICAgICAgCW1vdnN4ZCByMTAscjE0ZAogICAgMWNkYToJNGMgMzkgZDAgICAgICAgICAg ICAgCWNtcCAgICByYXgscjEwCiAgICAxY2RkOgk3MiA1ZSAgICAgICAgICAgICAgICAJamIgICAg IDFkM2QgPHR0c19oZWFwX2dldHNvbWVhdHRycysweDE4ZD4KICAgIDFjZGY6CWU5IDI0IDA1IDAw IDAwICAgICAgIAlqbXAgICAgMjIwOCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4NjU4PgogICAg MWNlNDoJMGYgMWYgNDAgMDAgICAgICAgICAgCW5vcCAgICBEV09SRCBQVFIgW3JheCsweDBdCgoJ aWYgKGF0dGxlbiA+IDApCgl7CgkJY29uc3QgY2hhciAqb2Zmc2V0X3B0cjsKCgkJKm9mZiA9IFRZ UEVBTElHTihhdHRhbGlnbmJ5LCAqb2ZmKTsKICAgIDFjZTg6CThkIDVjIDFlIGZmICAgICAgICAg IAlsZWEgICAgZWJ4LFtyc2krcmJ4KjEtMHgxXQogICAgMWNlYzoJZjcgZGUgICAgICAgICAgICAg ICAgCW5lZyAgICBlc2kKICAgIDFjZWU6CTIxIGRlICAgICAgICAgICAgICAgIAlhbmQgICAgZXNp LGVieAoJCW9mZnNldF9wdHIgPSB0dXBwdHIgKyAqb2ZmOwoJCSpvZmYgKz0gYXR0bGVuOwogICAg MWNmMDoJNDEgMGYgYmYgZGQgICAgICAgICAgCW1vdnN4ICBlYngscjEzdwoJCW9mZnNldF9wdHIg PSB0dXBwdHIgKyAqb2ZmOwogICAgMWNmNDoJNDEgODkgZjYgICAgICAgICAgICAgCW1vdiAgICBy MTRkLGVzaQoJCSpvZmYgKz0gYXR0bGVuOwogICAgMWNmNzoJMDEgZjMgICAgICAgICAgICAgICAg CWFkZCAgICBlYngsZXNpCgkJb2Zmc2V0X3B0ciA9IHR1cHB0ciArICpvZmY7CiAgICAxY2Y5Ogk0 ZCAwMSBjNiAgICAgICAgICAgICAJYWRkICAgIHIxNCxyOAoJcmV0dXJuIChEYXR1bSkgKHVpbnRw dHJfdCkgWDsKICAgIDFjZmM6CTRjIDg5IGY2ICAgICAgICAgICAgIAltb3YgICAgcnNpLHIxNAoJ CWlmIChhdHRieXZhbCkKICAgIDFjZmY6CTgwIDdjIGMyIDI0IDAwICAgICAgIAljbXAgICAgQllU RSBQVFIgW3JkeCtyYXgqOCsweDI0XSwweDAKICAgIDFkMDQ6CTc0IDJhICAgICAgICAgICAgICAg IAlqZSAgICAgMWQzMCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4MTgwPgoJCXsKCQkJc3dpdGNo IChhdHRsZW4pCiAgICAxZDA2Ogk2NiA0MSA4MyBmZCAwMiAgICAgICAJY21wICAgIHIxM3csMHgy CiAgICAxZDBiOgkwZiA4NCBlZiAwMSAwMCAwMCAgICAJamUgICAgIDFmMDAgPHR0c19oZWFwX2dl dHNvbWVhdHRycysweDM1MD4KICAgIDFkMTE6CTY2IDQxIDgzIGZkIDA0ICAgICAgIAljbXAgICAg cjEzdywweDQKICAgIDFkMTY6CTBmIDg0IGQ0IDAxIDAwIDAwICAgIAlqZSAgICAgMWVmMCA8dHRz X2hlYXBfZ2V0c29tZWF0dHJzKzB4MzQwPgogICAgMWQxYzoJNjYgNDEgODMgZmQgMDEgICAgICAg CWNtcCAgICByMTN3LDB4MQogICAgMWQyMToJMGYgODUgYjkgMDEgMDAgMDAgICAgCWpuZSAgICAx ZWUwIDx0dHNfaGVhcF9nZXRzb21lYXR0cnMrMHgzMzA+CglyZXR1cm4gKERhdHVtKSBYOwogICAg MWQyNzoJNDkgMGYgYmUgMzYgICAgICAgICAgCW1vdnN4ICByc2ksQllURSBQVFIgW3IxNF0KICAg IDFkMmI6CTBmIDFmIDQ0IDAwIDAwICAgICAgIAlub3AgICAgRFdPUkQgUFRSIFtyYXgrcmF4KjEr MHgwXQoJCXZhbHVlc1thdHRudW1dID0gYWxpZ25fZmV0Y2hfdGhlbl9hZGQodHAsCiAgICAxZDMw Ogk0OCA4OSAzNCBjNyAgICAgICAgICAJbW92ICAgIFFXT1JEIFBUUiBbcmRpK3JheCo4XSxyc2kK CWZvciAoOyBhdHRudW0gPCBmaXJzdE51bGxBdHRyOyBhdHRudW0rKykKICAgIDFkMzQ6CTQ4IDgz IGMwIDAxICAgICAgICAgIAlhZGQgICAgcmF4LDB4MQogICAgMWQzODoJNGMgMzkgZDAgICAgICAg ICAgICAgCWNtcCAgICByYXgscjEwCiAgICAxZDNiOgk3NCA3MyAgICAgICAgICAgICAgICAJamUg ICAgIDFkYjAgPHR0c19oZWFwX2dldHNvbWVhdHRycysweDIwMD4KCQlpc251bGxbYXR0bnVtXSA9 IGZhbHNlOwogICAgMWQzZDoJYzYgMDQgMDEgMDAgICAgICAgICAgCW1vdiAgICBCWVRFIFBUUiBb cmN4K3JheCoxXSwweDAKCQlhdHRsZW4gPSBjYXR0ci0+YXR0bGVuOwogICAgMWQ0MToJNDQgMGYg YjcgNmMgYzIgMjIgICAgCW1vdnp4ICByMTNkLFdPUkQgUFRSIFtyZHgrcmF4KjgrMHgyMl0KCQkJ CQkJCQkJCQkgIGNhdHRyLT5hdHRhbGlnbmJ5KTsKICAgIDFkNDc6CTBmIGI2IDc0IGMyIDI1ICAg ICAgIAltb3Z6eCAgZXNpLEJZVEUgUFRSIFtyZHgrcmF4KjgrMHgyNV0KCWlmIChhdHRsZW4gPiAw KQogICAgMWQ0YzoJNjYgNDUgODUgZWQgICAgICAgICAgCXRlc3QgICByMTN3LHIxM3cKICAgIDFk NTA6CTdmIDk2ICAgICAgICAgICAgICAgIAlqZyAgICAgMWNlOCA8dHRzX2hlYXBfZ2V0c29tZWF0 dHJzKzB4MTM4PgoJCX0KCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKG9mZnNldF9wdHIpOwoJfQoJ ZWxzZSBpZiAoYXR0bGVuID09IC0xKQoJewoJCWlmICghVkFSQVRUX0lTX1NIT1JUKHR1cHB0ciAr ICpvZmYpKQogICAgMWQ1MjoJNDEgODkgZGQgICAgICAgICAgICAgCW1vdiAgICByMTNkLGVieAog ICAgMWQ1NToJNGQgMDEgYzUgICAgICAgICAgICAgCWFkZCAgICByMTMscjgKICAgIDFkNTg6CTQx IGY2IDQ1IDAwIDAxICAgICAgIAl0ZXN0ICAgQllURSBQVFIgW3IxMysweDBdLDB4MQogICAgMWQ1 ZDoJNzUgMGUgICAgICAgICAgICAgICAgCWpuZSAgICAxZDZkIDx0dHNfaGVhcF9nZXRzb21lYXR0 cnMrMHgxYmQ+CgkJCSpvZmYgPSBUWVBFQUxJR04oYXR0YWxpZ25ieSwgKm9mZik7CiAgICAxZDVm Ogk4ZCA1YyAxZSBmZiAgICAgICAgICAJbGVhICAgIGVieCxbcnNpK3JieCoxLTB4MV0KICAgIDFk NjM6CWY3IGRlICAgICAgICAgICAgICAgIAluZWcgICAgZXNpCiAgICAxZDY1OgkyMSBmMyAgICAg ICAgICAgICAgICAJYW5kICAgIGVieCxlc2kKCgkJcmVzID0gUG9pbnRlckdldERhdHVtKHR1cHB0 ciArICpvZmYpOwogICAgMWQ2NzoJNDEgODkgZGQgICAgICAgICAgICAgCW1vdiAgICByMTNkLGVi eAogICAgMWQ2YToJNGQgMDEgYzUgICAgICAgICAgICAgCWFkZCAgICByMTMscjgKCWlmIChWQVJB VFRfSVNfMUJfRShQVFIpKQogICAgMWQ2ZDoJNDUgMGYgYjYgNzUgMDAgICAgICAgCW1vdnp4ICBy MTRkLEJZVEUgUFRSIFtyMTMrMHgwXQoJcmV0dXJuIChEYXR1bSkgKHVpbnRwdHJfdCkgWDsKICAg IDFkNzI6CTRjIDg5IGVlICAgICAgICAgICAgIAltb3YgICAgcnNpLHIxMwogICAgMWQ3NToJNDEg ODAgZmUgMDEgICAgICAgICAgCWNtcCAgICByMTRiLDB4MQogICAgMWQ3OToJMGYgODQgNTkgMDMg MDAgMDAgICAgCWplICAgICAyMGQ4IDx0dHNfaGVhcF9nZXRzb21lYXR0cnMrMHg1Mjg+CgllbHNl IGlmIChWQVJBVFRfSVNfMUIoUFRSKSkKICAgIDFkN2Y6CTQxIGY2IGM2IDAxICAgICAgICAgIAl0 ZXN0ICAgcjE0YiwweDEKICAgIDFkODM6CTBmIDg1IDg3IDAyIDAwIDAwICAgIAlqbmUgICAgMjAx MCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4NDYwPgoJCXJldHVybiBWQVJTSVpFXzRCKFBUUik7 CiAgICAxZDg5Ogk0NSA4YiA3NSAwMCAgICAgICAgICAJbW92ICAgIHIxNGQsRFdPUkQgUFRSIFty MTMrMHgwXQogICAgMWQ4ZDoJNDEgYzEgZWUgMDIgICAgICAgICAgCXNociAgICByMTRkLDB4MgoJ CXZhbHVlc1thdHRudW1dID0gYWxpZ25fZmV0Y2hfdGhlbl9hZGQodHAsCiAgICAxZDkxOgk0OCA4 OSAzNCBjNyAgICAgICAgICAJbW92ICAgIFFXT1JEIFBUUiBbcmRpK3JheCo4XSxyc2kKCWZvciAo OyBhdHRudW0gPCBmaXJzdE51bGxBdHRyOyBhdHRudW0rKykKICAgIDFkOTU6CTQ4IDgzIGMwIDAx ICAgICAgICAgIAlhZGQgICAgcmF4LDB4MQoJCSpvZmYgKz0gVkFSU0laRV9BTlkoRGF0dW1HZXRQ b2ludGVyKHJlcykpOwogICAgMWQ5OToJNDQgMDEgZjMgICAgICAgICAgICAgCWFkZCAgICBlYngs cjE0ZAogICAgMWQ5YzoJNGMgMzkgZDAgICAgICAgICAgICAgCWNtcCAgICByYXgscjEwCiAgICAx ZDlmOgk3NSA5YyAgICAgICAgICAgICAgICAJam5lICAgIDFkM2QgPHR0c19oZWFwX2dldHNvbWVh dHRycysweDE4ZD4KICAgIDFkYTE6CTBmIDFmIDQwIDAwICAgICAgICAgIAlub3AgICAgRFdPUkQg UFRSIFtyYXgrMHgwXQogICAgMWRhNToJNjYgNjYgMmUgMGYgMWYgODQgMDAgCWRhdGExNiBjcyBu b3AgV09SRCBQVFIgW3JheCtyYXgqMSsweDBdCiAgICAxZGFjOgkwMCAwMCAwMCAwMCAKCWZvciAo OyBhdHRudW0gPCBuYXR0czsgYXR0bnVtKyspCiAgICAxZGIwOgk0ZCAzOSBjYSAgICAgICAgICAg ICAJY21wICAgIHIxMCxyOQogICAgMWRiMzoJMGYgODMgNTcgMDQgMDAgMDAgICAgCWphZSAgICAy MjEwIDx0dHNfaGVhcF9nZXRzb21lYXR0cnMrMHg2NjA+CiAgICAxZGI5OgkwZiAxZiA4MCAwMCAw MCAwMCAwMCAJbm9wICAgIERXT1JEIFBUUiBbcmF4KzB4MF0KCQlpZiAoaXNudWxsW2F0dG51bV0p CiAgICAxZGMwOgkzMSBjMCAgICAgICAgICAgICAgICAJeG9yICAgIGVheCxlYXgKICAgIDFkYzI6 CTQyIDgwIDNjIDExIDAwICAgICAgIAljbXAgICAgQllURSBQVFIgW3JjeCtyMTAqMV0sMHgwCiAg ICAxZGM3Ogk3NSA1NyAgICAgICAgICAgICAgICAJam5lICAgIDFlMjAgPHR0c19oZWFwX2dldHNv bWVhdHRycysweDI3MD4KCQlhdHRsZW4gPSBjYXR0ci0+YXR0bGVuOwogICAgMWRjOToJNDIgMGYg YjcgNzQgZDIgMjIgICAgCW1vdnp4ICBlc2ksV09SRCBQVFIgW3JkeCtyMTAqOCsweDIyXQoJCQkJ CQkJCQkJCSAgY2F0dHItPmF0dGFsaWduYnkpOwogICAgMWRjZjoJNDIgMGYgYjYgNDQgZDIgMjUg ICAgCW1vdnp4ICBlYXgsQllURSBQVFIgW3JkeCtyMTAqOCsweDI1XQoJaWYgKGF0dGxlbiA+IDAp CiAgICAxZGQ1Ogk2NiA4NSBmNiAgICAgICAgICAgICAJdGVzdCAgIHNpLHNpCiAgICAxZGQ4Ogkw ZiA4ZSAzMiAwMSAwMCAwMCAgICAJamxlICAgIDFmMTAgPHR0c19oZWFwX2dldHNvbWVhdHRycysw eDM2MD4KCQkqb2ZmID0gVFlQRUFMSUdOKGF0dGFsaWduYnksICpvZmYpOwogICAgMWRkZToJOGQg NWMgMTggZmYgICAgICAgICAgCWxlYSAgICBlYngsW3JheCtyYngqMS0weDFdCiAgICAxZGUyOglm NyBkOCAgICAgICAgICAgICAgICAJbmVnICAgIGVheAogICAgMWRlNDoJMjEgZDggICAgICAgICAg ICAgICAgCWFuZCAgICBlYXgsZWJ4CgkJKm9mZiArPSBhdHRsZW47CiAgICAxZGU2OgkwZiBiZiBk ZSAgICAgICAgICAgICAJbW92c3ggIGVieCxzaQoJCW9mZnNldF9wdHIgPSB0dXBwdHIgKyAqb2Zm OwogICAgMWRlOToJNDEgODkgYzUgICAgICAgICAgICAgCW1vdiAgICByMTNkLGVheAoJCSpvZmYg Kz0gYXR0bGVuOwogICAgMWRlYzoJMDEgYzMgICAgICAgICAgICAgICAgCWFkZCAgICBlYngsZWF4 CgkJb2Zmc2V0X3B0ciA9IHR1cHB0ciArICpvZmY7CiAgICAxZGVlOgk0ZCAwMSBjNSAgICAgICAg ICAgICAJYWRkICAgIHIxMyxyOAogICAgMWRmMToJNGMgODkgZTggICAgICAgICAgICAgCW1vdiAg ICByYXgscjEzCgkJaWYgKGF0dGJ5dmFsKQogICAgMWRmNDoJNDIgODAgN2MgZDIgMjQgMDAgICAg CWNtcCAgICBCWVRFIFBUUiBbcmR4K3IxMCo4KzB4MjRdLDB4MAogICAgMWRmYToJNzQgMjQgICAg ICAgICAgICAgICAgCWplICAgICAxZTIwIDx0dHNfaGVhcF9nZXRzb21lYXR0cnMrMHgyNzA+CgkJ CXN3aXRjaCAoYXR0bGVuKQogICAgMWRmYzoJNjYgODMgZmUgMDIgICAgICAgICAgCWNtcCAgICBz aSwweDIKICAgIDFlMDA6CTBmIDg0IGIyIDAyIDAwIDAwICAgIAlqZSAgICAgMjBiOCA8dHRzX2hl YXBfZ2V0c29tZWF0dHJzKzB4NTA4PgogICAgMWUwNjoJNjYgODMgZmUgMDQgICAgICAgICAgCWNt cCAgICBzaSwweDQKICAgIDFlMGE6CTBmIDg0IDg4IDAyIDAwIDAwICAgIAlqZSAgICAgMjA5OCA8 dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4NGU4PgogICAgMWUxMDoJNjYgODMgZmUgMDEgICAgICAg ICAgCWNtcCAgICBzaSwweDEKICAgIDFlMTQ6CTBmIDg0IGQ2IDAxIDAwIDAwICAgIAlqZSAgICAg MWZmMCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4NDQwPgoJcmV0dXJuIChEYXR1bSkgWDsKICAg IDFlMWE6CTQ5IDhiIDQ1IDAwICAgICAgICAgIAltb3YgICAgcmF4LFFXT1JEIFBUUiBbcjEzKzB4 MF0KICAgIDFlMWU6CTY2IDkwICAgICAgICAgICAgICAgIAl4Y2hnICAgYXgsYXgKCQkJdmFsdWVz W2F0dG51bV0gPSAoRGF0dW0pIDA7CiAgICAxZTIwOgk0YSA4OSAwNCBkNyAgICAgICAgICAJbW92 ICAgIFFXT1JEIFBUUiBbcmRpK3IxMCo4XSxyYXgKCWZvciAoOyBhdHRudW0gPCBuYXR0czsgYXR0 bnVtKyspCiAgICAxZTI0Ogk0OSA4MyBjMiAwMSAgICAgICAgICAJYWRkICAgIHIxMCwweDEKICAg IDFlMjg6CTRkIDM5IGNhICAgICAgICAgICAgIAljbXAgICAgcjEwLHI5CiAgICAxZTJiOgk3NSA5 MyAgICAgICAgICAgICAgICAJam5lICAgIDFkYzAgPHR0c19oZWFwX2dldHNvbWVhdHRycysweDIx MD4KCWlmICh1bmxpa2VseShhdHRudW0gPCByZXFuYXR0cykpCiAgICAxZTJkOgk0OSAzOSBlOSAg ICAgICAgICAgICAJY21wICAgIHI5LHJicAogICAgMWUzMDoJMGYgODIgZWEgMDMgMDAgMDAgICAg CWpiICAgICAyMjIwIDx0dHNfaGVhcF9nZXRzb21lYXR0cnMrMHg2NzA+Cgkqb2ZmcCA9IG9mZjsK ICAgIDFlMzY6CTQxIDg5IDViIDQ4ICAgICAgICAgIAltb3YgICAgRFdPUkQgUFRSIFtyMTErMHg0 OF0sZWJ4Cn0KICAgIDFlM2E6CTViICAgICAgICAgICAgICAgICAgIAlwb3AgICAgcmJ4CiAgICAx ZTNiOgk1ZCAgICAgICAgICAgICAgICAgICAJcG9wICAgIHJicAogICAgMWUzYzoJNDEgNWMgICAg ICAgICAgICAgICAgCXBvcCAgICByMTIKICAgIDFlM2U6CTQxIDVkICAgICAgICAgICAgICAgIAlw b3AgICAgcjEzCiAgICAxZTQwOgk0MSA1ZSAgICAgICAgICAgICAgICAJcG9wICAgIHIxNAogICAg MWU0MjoJNDEgNWYgICAgICAgICAgICAgICAgCXBvcCAgICByMTUKICAgIDFlNDQ6CWMzICAgICAg ICAgICAgICAgICAgIAlyZXQKICAgIDFlNDU6CTBmIDFmIDAwICAgICAgICAgICAgIAlub3AgICAg RFdPUkQgUFRSIFtyYXhdCgkJc3dpdGNoIChhdHRsZW4pCiAgICAxZTQ4Ogk2NiA4MyBmYiAwMSAg ICAgICAgICAJY21wICAgIGJ4LDB4MQogICAgMWU0YzoJMGYgODQgMGUgMDEgMDAgMDAgICAgCWpl ICAgICAxZjYwIDx0dHNfaGVhcF9nZXRzb21lYXR0cnMrMHgzYjA+CiAgICAxZTUyOgk0OCA4YiAx ZSAgICAgICAgICAgICAJbW92ICAgIHJieCxRV09SRCBQVFIgW3JzaV0KICAgIDFlNTU6CTY2IDJl IDBmIDFmIDg0IDAwIDAwIAljcyBub3AgV09SRCBQVFIgW3JheCtyYXgqMSsweDBdCiAgICAxZTVj OgkwMCAwMCAwMCAKICAgIDFlNWY6CTY2IDY2IDJlIDBmIDFmIDg0IDAwIAlkYXRhMTYgY3Mgbm9w IFdPUkQgUFRSIFtyYXgrcmF4KjErMHgwXQogICAgMWU2NjoJMDAgMDAgMDAgMDAgCiAgICAxZTZh Ogk2NiA2NiAyZSAwZiAxZiA4NCAwMCAJZGF0YTE2IGNzIG5vcCBXT1JEIFBUUiBbcmF4K3JheCox KzB4MF0KICAgIDFlNzE6CTAwIDAwIDAwIDAwIAogICAgMWU3NToJNjYgNjYgMmUgMGYgMWYgODQg MDAgCWRhdGExNiBjcyBub3AgV09SRCBQVFIgW3JheCtyYXgqMSsweDBdCiAgICAxZTdjOgkwMCAw MCAwMCAwMCAKCQl9IHdoaWxlICgrK2F0dG51bSA8IGZpcnN0Tm9uQ2FjaGVPZmZzZXRBdHRyKTsK ICAgIDFlODA6CTQ4IDhkIDcwIDAxICAgICAgICAgIAlsZWEgICAgcnNpLFtyYXgrMHgxXQoJCQl2 YWx1ZXNbYXR0bnVtXSA9IGZldGNoX2F0dF9ub2Vycih0cCArIG9mZiwKICAgIDFlODQ6CTQ4IDg5 IDFjIGM3ICAgICAgICAgIAltb3YgICAgUVdPUkQgUFRSIFtyZGkrcmF4KjhdLHJieAoJCX0gd2hp bGUgKCsrYXR0bnVtIDwgZmlyc3ROb25DYWNoZU9mZnNldEF0dHIpOwogICAgMWU4ODoJNDkgMzkg ZjIgICAgICAgICAgICAgCWNtcCAgICByMTAscnNpCiAgICAxZThiOgk3NCA0MyAgICAgICAgICAg ICAgICAJamUgICAgIDFlZDAgPHR0c19oZWFwX2dldHNvbWVhdHRycysweDMyMD4KICAgIDFlOGQ6 CTQ4IDg5IGYwICAgICAgICAgICAgIAltb3YgICAgcmF4LHJzaQoJCQlpc251bGxbYXR0bnVtXSA9 IGZhbHNlOwogICAgMWU5MDoJYzYgMDQgMDEgMDAgICAgICAgICAgCW1vdiAgICBCWVRFIFBUUiBb cmN4K3JheCoxXSwweDAKCQkJb2ZmID0gY2F0dHItPmF0dGNhY2hlb2ZmOwogICAgMWU5NDoJMGYg YmYgNzQgYzIgMjAgICAgICAgCW1vdnN4ICBlc2ksV09SRCBQVFIgW3JkeCtyYXgqOCsweDIwXQog ICAgMWU5OToJNDkgODkgZjUgICAgICAgICAgICAgCW1vdiAgICByMTMscnNpCgkJCXZhbHVlc1th dHRudW1dID0gZmV0Y2hfYXR0X25vZXJyKHRwICsgb2ZmLAogICAgMWU5YzoJNGMgMDEgYzYgICAg ICAgICAgICAgCWFkZCAgICByc2kscjgKCXJldHVybiAoRGF0dW0pICh1aW50cHRyX3QpIFg7CiAg ICAxZTlmOgk0OCA4OSBmMyAgICAgICAgICAgICAJbW92ICAgIHJieCxyc2kKCWlmIChhdHRieXZh bCkKICAgIDFlYTI6CTgwIDdjIGMyIDI0IDAwICAgICAgIAljbXAgICAgQllURSBQVFIgW3JkeCty YXgqOCsweDI0XSwweDAKICAgIDFlYTc6CTc0IGQ3ICAgICAgICAgICAgICAgIAlqZSAgICAgMWU4 MCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4MmQwPgoJCQkJCQkJCQkJCSBjYXR0ci0+YXR0bGVu KTsKICAgIDFlYTk6CTBmIGI3IDVjIGMyIDIyICAgICAgIAltb3Z6eCAgZWJ4LFdPUkQgUFRSIFty ZHgrcmF4KjgrMHgyMl0KCQlzd2l0Y2ggKGF0dGxlbikKICAgIDFlYWU6CTY2IDgzIGZiIDAyICAg ICAgICAgIAljbXAgICAgYngsMHgyCiAgICAxZWIyOgkwZiA4NCBiOCAwMCAwMCAwMCAgICAJamUg ICAgIDFmNzAgPHR0c19oZWFwX2dldHNvbWVhdHRycysweDNjMD4KICAgIDFlYjg6CTY2IDgzIGZi IDA0ICAgICAgICAgIAljbXAgICAgYngsMHg0CiAgICAxZWJjOgk3NSA4YSAgICAgICAgICAgICAg ICAJam5lICAgIDFlNDggPHR0c19oZWFwX2dldHNvbWVhdHRycysweDI5OD4KCXJldHVybiAoRGF0 dW0pIFg7CiAgICAxZWJlOgk0OCA2MyAxZSAgICAgICAgICAgICAJbW92c3hkIHJieCxEV09SRCBQ VFIgW3JzaV0KCQl9IHdoaWxlICgrK2F0dG51bSA8IGZpcnN0Tm9uQ2FjaGVPZmZzZXRBdHRyKTsK ICAgIDFlYzE6CTQ4IDhkIDcwIDAxICAgICAgICAgIAlsZWEgICAgcnNpLFtyYXgrMHgxXQoJCQl2 YWx1ZXNbYXR0bnVtXSA9IGZldGNoX2F0dF9ub2Vycih0cCArIG9mZiwKICAgIDFlYzU6CTQ4IDg5 IDFjIGM3ICAgICAgICAgIAltb3YgICAgUVdPUkQgUFRSIFtyZGkrcmF4KjhdLHJieAoJCX0gd2hp bGUgKCsrYXR0bnVtIDwgZmlyc3ROb25DYWNoZU9mZnNldEF0dHIpOwogICAgMWVjOToJNDkgMzkg ZjIgICAgICAgICAgICAgCWNtcCAgICByMTAscnNpCiAgICAxZWNjOgk3NSBiZiAgICAgICAgICAg ICAgICAJam5lICAgIDFlOGQgPHR0c19oZWFwX2dldHNvbWVhdHRycysweDJkZD4KICAgIDFlY2U6 CTY2IDkwICAgICAgICAgICAgICAgIAl4Y2hnICAgYXgsYXgKCQlvZmYgKz0gY2F0dHItPmF0dGxl bjsKICAgIDFlZDA6CTBmIGJmIDVjIGMyIDIyICAgICAgIAltb3ZzeCAgZWJ4LFdPUkQgUFRSIFty ZHgrcmF4KjgrMHgyMl0KCQl9IHdoaWxlICgrK2F0dG51bSA8IGZpcnN0Tm9uQ2FjaGVPZmZzZXRB dHRyKTsKICAgIDFlZDU6CTRjIDg5IGQwICAgICAgICAgICAgIAltb3YgICAgcmF4LHIxMAoJCW9m ZiArPSBjYXR0ci0+YXR0bGVuOwogICAgMWVkODoJNDQgMDEgZWIgICAgICAgICAgICAgCWFkZCAg ICBlYngscjEzZAogICAgMWVkYjoJZTkgZjcgZmQgZmYgZmYgICAgICAgCWptcCAgICAxY2Q3IDx0 dHNfaGVhcF9nZXRzb21lYXR0cnMrMHgxMjc+CglyZXR1cm4gKERhdHVtKSBYOwogICAgMWVlMDoJ NDkgOGIgMzYgICAgICAgICAgICAgCW1vdiAgICByc2ksUVdPUkQgUFRSIFtyMTRdCgkJCQkJcmV0 dXJuIEludDY0R2V0RGF0dW0oKigoY29uc3QgaW50NjQgKikgb2Zmc2V0X3B0cikpOwogICAgMWVl MzoJZTkgNDggZmUgZmYgZmYgICAgICAgCWptcCAgICAxZDMwIDx0dHNfaGVhcF9nZXRzb21lYXR0 cnMrMHgxODA+CiAgICAxZWU4OgkwZiAxZiA4NCAwMCAwMCAwMCAwMCAJbm9wICAgIERXT1JEIFBU UiBbcmF4K3JheCoxKzB4MF0KICAgIDFlZWY6CTAwIAoJcmV0dXJuIChEYXR1bSkgWDsKICAgIDFl ZjA6CTQ5IDYzIDM2ICAgICAgICAgICAgIAltb3ZzeGQgcnNpLERXT1JEIFBUUiBbcjE0XQoJCQkJ CXJldHVybiBJbnQzMkdldERhdHVtKCooKGNvbnN0IGludDMyICopIG9mZnNldF9wdHIpKTsKICAg IDFlZjM6CWU5IDM4IGZlIGZmIGZmICAgICAgIAlqbXAgICAgMWQzMCA8dHRzX2hlYXBfZ2V0c29t ZWF0dHJzKzB4MTgwPgogICAgMWVmODoJMGYgMWYgODQgMDAgMDAgMDAgMDAgCW5vcCAgICBEV09S RCBQVFIgW3JheCtyYXgqMSsweDBdCiAgICAxZWZmOgkwMCAKCXJldHVybiAoRGF0dW0pIFg7CiAg ICAxZjAwOgk0OSAwZiBiZiAzNiAgICAgICAgICAJbW92c3ggIHJzaSxXT1JEIFBUUiBbcjE0XQoJ CQkJCXJldHVybiBJbnQxNkdldERhdHVtKCooKGNvbnN0IGludDE2ICopIG9mZnNldF9wdHIpKTsK ICAgIDFmMDQ6CWU5IDI3IGZlIGZmIGZmICAgICAgIAlqbXAgICAgMWQzMCA8dHRzX2hlYXBfZ2V0 c29tZWF0dHJzKzB4MTgwPgogICAgMWYwOToJMGYgMWYgODAgMDAgMDAgMDAgMDAgCW5vcCAgICBE V09SRCBQVFIgW3JheCsweDBdCgkJaWYgKCFWQVJBVFRfSVNfU0hPUlQodHVwcHRyICsgKm9mZikp CiAgICAxZjEwOgk4OSBkZSAgICAgICAgICAgICAgICAJbW92ICAgIGVzaSxlYngKICAgIDFmMTI6 CTRjIDAxIGM2ICAgICAgICAgICAgIAlhZGQgICAgcnNpLHI4CiAgICAxZjE1OglmNiAwNiAwMSAg ICAgICAgICAgICAJdGVzdCAgIEJZVEUgUFRSIFtyc2ldLDB4MQogICAgMWYxODoJMGYgODQgMDIg MDEgMDAgMDAgICAgCWplICAgICAyMDIwIDx0dHNfaGVhcF9nZXRzb21lYXR0cnMrMHg0NzA+Cglp ZiAoVkFSQVRUX0lTXzFCX0UoUFRSKSkKICAgIDFmMWU6CTQ0IDBmIGI2IDJlICAgICAgICAgIAlt b3Z6eCAgcjEzZCxCWVRFIFBUUiBbcnNpXQoJcmV0dXJuIChEYXR1bSkgKHVpbnRwdHJfdCkgWDsK ICAgIDFmMjI6CTQ4IDg5IGYwICAgICAgICAgICAgIAltb3YgICAgcmF4LHJzaQogICAgMWYyNToJ NDEgODAgZmQgMDEgICAgICAgICAgCWNtcCAgICByMTNiLDB4MQogICAgMWYyOToJMGYgODQgMGYg MDEgMDAgMDAgICAgCWplICAgICAyMDNlIDx0dHNfaGVhcF9nZXRzb21lYXR0cnMrMHg0OGU+Cgll bHNlIGlmIChWQVJBVFRfSVNfMUIoUFRSKSkKICAgIDFmMmY6CTQxIGY2IGM1IDAxICAgICAgICAg IAl0ZXN0ICAgcjEzYiwweDEKICAgIDFmMzM6CTBmIDg0IDNmIDAxIDAwIDAwICAgIAlqZSAgICAg MjA3OCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4NGM4PgoJCXJldHVybiBWQVJTSVpFXzFCKFBU Uik7CiAgICAxZjM5Ogk0MSBkMCBlZCAgICAgICAgICAgICAJc2hyICAgIHIxM2IsMQoJCSpvZmYg Kz0gVkFSU0laRV9BTlkoRGF0dW1HZXRQb2ludGVyKHJlcykpOwogICAgMWYzYzoJNDUgMGYgYjYg ZWQgICAgICAgICAgCW1vdnp4ICByMTNkLHIxM2IKCQkJdmFsdWVzW2F0dG51bV0gPSAoRGF0dW0p IDA7CiAgICAxZjQwOgk0YSA4OSAwNCBkNyAgICAgICAgICAJbW92ICAgIFFXT1JEIFBUUiBbcmRp K3IxMCo4XSxyYXgKCWZvciAoOyBhdHRudW0gPCBuYXR0czsgYXR0bnVtKyspCiAgICAxZjQ0Ogk0 OSA4MyBjMiAwMSAgICAgICAgICAJYWRkICAgIHIxMCwweDEKICAgIDFmNDg6CTQ0IDAxIGViICAg ICAgICAgICAgIAlhZGQgICAgZWJ4LHIxM2QKICAgIDFmNGI6CTRkIDM5IGNhICAgICAgICAgICAg IAljbXAgICAgcjEwLHI5CiAgICAxZjRlOgkwZiA4NSA2YyBmZSBmZiBmZiAgICAJam5lICAgIDFk YzAgPHR0c19oZWFwX2dldHNvbWVhdHRycysweDIxMD4KICAgIDFmNTQ6CWU5IGQ0IGZlIGZmIGZm ICAgICAgIAlqbXAgICAgMWUyZCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4MjdkPgogICAgMWY1 OToJMGYgMWYgODAgMDAgMDAgMDAgMDAgCW5vcCAgICBEV09SRCBQVFIgW3JheCsweDBdCglyZXR1 cm4gKERhdHVtKSBYOwogICAgMWY2MDoJNDggMGYgYmUgMWUgICAgICAgICAgCW1vdnN4ICByYngs QllURSBQVFIgW3JzaV0KCQkJCXJldHVybiBDaGFyR2V0RGF0dW0oKigoY29uc3QgY2hhciAqKSBU KSk7CiAgICAxZjY0OgllOSAxNyBmZiBmZiBmZiAgICAgICAJam1wICAgIDFlODAgPHR0c19oZWFw X2dldHNvbWVhdHRycysweDJkMD4KICAgIDFmNjk6CTBmIDFmIDgwIDAwIDAwIDAwIDAwIAlub3Ag ICAgRFdPUkQgUFRSIFtyYXgrMHgwXQoJcmV0dXJuIChEYXR1bSkgWDsKICAgIDFmNzA6CTQ4IDBm IGJmIDFlICAgICAgICAgIAltb3ZzeCAgcmJ4LFdPUkQgUFRSIFtyc2ldCgkJCQlyZXR1cm4gSW50 MTZHZXREYXR1bSgqKChjb25zdCBpbnQxNiAqKSBUKSk7CiAgICAxZjc0OgllOSAwNyBmZiBmZiBm ZiAgICAgICAJam1wICAgIDFlODAgPHR0c19oZWFwX2dldHNvbWVhdHRycysweDJkMD4KICAgIDFm Nzk6CTBmIDFmIDgwIDAwIDAwIDAwIDAwIAlub3AgICAgRFdPUkQgUFRSIFtyYXgrMHgwXQoJCW9m ZiArPSBjYXR0ci0+YXR0bGVuOwogICAgMWY4MDoJNDEgMGYgYmYgNzUgMDIgICAgICAgCW1vdnN4 ICBlc2ksV09SRCBQVFIgW3IxMysweDJdCgkJaWYgKGF0dG51bSA9PSByZXFuYXR0cykKICAgIDFm ODU6CTQ5IDYzIGVjICAgICAgICAgICAgIAltb3ZzeGQgcmJwLHIxMmQKCQlvZmYgKz0gY2F0dHIt PmF0dGxlbjsKICAgIDFmODg6CTQ4IDhiIDU0IDI0IGYwICAgICAgIAltb3YgICAgcmR4LFFXT1JE IFBUUiBbcnNwLTB4MTBdCiAgICAxZjhkOgkwMSBmMyAgICAgICAgICAgICAgICAJYWRkICAgIGVi eCxlc2kKCQlpZiAoYXR0bnVtID09IHJlcW5hdHRzKQogICAgMWY4ZjoJNDggMzkgZTggICAgICAg ICAgICAgCWNtcCAgICByYXgscmJwCiAgICAxZjkyOgkwZiA4NSAyZiBmZCBmZiBmZiAgICAJam5l ICAgIDFjYzcgPHR0c19oZWFwX2dldHNvbWVhdHRycysweDExNz4KCSpvZmZwID0gb2ZmOwogICAg MWY5ODoJNDEgODkgNWIgNDggICAgICAgICAgCW1vdiAgICBEV09SRCBQVFIgW3IxMSsweDQ4XSxl YngKfQogICAgMWY5YzoJNWIgICAgICAgICAgICAgICAgICAgCXBvcCAgICByYngKICAgIDFmOWQ6 CTVkICAgICAgICAgICAgICAgICAgIAlwb3AgICAgcmJwCiAgICAxZjllOgk0MSA1YyAgICAgICAg ICAgICAgICAJcG9wICAgIHIxMgogICAgMWZhMDoJNDEgNWQgICAgICAgICAgICAgICAgCXBvcCAg ICByMTMKICAgIDFmYTI6CTQxIDVlICAgICAgICAgICAgICAgIAlwb3AgICAgcjE0CiAgICAxZmE0 Ogk0MSA1ZiAgICAgICAgICAgICAgICAJcG9wICAgIHIxNQogICAgMWZhNjoJYzMgICAgICAgICAg ICAgICAgICAgCXJldAogICAgMWZhNzoJNjYgMGYgMWYgODQgMDAgMDAgMDAgCW5vcCAgICBXT1JE IFBUUiBbcmF4K3JheCoxKzB4MF0KICAgIDFmYWU6CTAwIDAwIAoJCXRwID0gKGNoYXIgKikgdHVw ICsgTUFYQUxJR04ob2Zmc2V0b2YoSGVhcFR1cGxlSGVhZGVyRGF0YSwgdF9iaXRzKSk7CiAgICAx ZmIwOgk0YyA4ZCA0MyAxOCAgICAgICAgICAJbGVhICAgIHI4LFtyYngrMHgxOF0KCQlpZiAocmVx bmF0dHMgPiBmaXJzdE5vbkd1YXJhbnRlZWRBdHRyKQogICAgMWZiNDoJNDEgMzkgYzQgICAgICAg ICAgICAgCWNtcCAgICByMTJkLGVheAogICAgMWZiNzoJMGYgOGUgY2IgMDAgMDAgMDAgICAgCWps ZSAgICAyMDg4IDx0dHNfaGVhcF9nZXRzb21lYXR0cnMrMHg0ZDg+CgkJCW5hdHRzID0gTWluKEhl YXBUdXBsZUhlYWRlckdldE5hdHRzKHR1cCksIHJlcW5hdHRzKTsKICAgIDFmYmQ6CTBmIGI3IDQz IDEyICAgICAgICAgIAltb3Z6eCAgZWF4LFdPUkQgUFRSIFtyYngrMHgxMl0KICAgIDFmYzE6CTI1 IGZmIDA3IDAwIDAwICAgICAgIAlhbmQgICAgZWF4LDB4N2ZmCiAgICAxZmM2Ogk0NCAzOSBlMCAg ICAgICAgICAgICAJY21wICAgIGVheCxyMTJkCiAgICAxZmM5Ogk0MSAwZiA0ZiBjNCAgICAgICAg ICAJY21vdmcgIGVheCxyMTJkCiAgICAxZmNkOgk0MSA4OSBjNiAgICAgICAgICAgICAJbW92ICAg IHIxNGQsZWF4CiAgICAxZmQwOgk0YyA2MyBjOCAgICAgICAgICAgICAJbW92c3hkIHI5LGVheAog ICAgMWZkMzoJZTkgNTYgZmMgZmYgZmYgICAgICAgCWptcCAgICAxYzJlIDx0dHNfaGVhcF9nZXRz b21lYXR0cnMrMHg3ZT4KICAgIDFmZDg6CTBmIDFmIDg0IDAwIDAwIDAwIDAwIAlub3AgICAgRFdP UkQgUFRSIFtyYXgrcmF4KjErMHgwXQogICAgMWZkZjoJMDAgCiAgICAxZmUwOgkzMSBlZCAgICAg ICAgICAgICAgICAJeG9yICAgIGVicCxlYnAKCQlmaXJzdE5vbkd1YXJhbnRlZWRBdHRyID0gMDsK ICAgIDFmZTI6CTMxIGMwICAgICAgICAgICAgICAgIAl4b3IgICAgZWF4LGVheAogICAgMWZlNDoJ ZTkgMDIgZmMgZmYgZmYgICAgICAgCWptcCAgICAxYmViIDx0dHNfaGVhcF9nZXRzb21lYXR0cnMr MHgzYj4KICAgIDFmZTk6CTBmIDFmIDgwIDAwIDAwIDAwIDAwIAlub3AgICAgRFdPUkQgUFRSIFty YXgrMHgwXQoJcmV0dXJuIChEYXR1bSkgWDsKICAgIDFmZjA6CTQ5IDBmIGJlIDQ1IDAwICAgICAg IAltb3ZzeCAgcmF4LEJZVEUgUFRSIFtyMTMrMHgwXQoJCQl2YWx1ZXNbYXR0bnVtXSA9IChEYXR1 bSkgMDsKICAgIDFmZjU6CTRhIDg5IDA0IGQ3ICAgICAgICAgIAltb3YgICAgUVdPUkQgUFRSIFty ZGkrcjEwKjhdLHJheAoJZm9yICg7IGF0dG51bSA8IG5hdHRzOyBhdHRudW0rKykKICAgIDFmZjk6 CTQ5IDgzIGMyIDAxICAgICAgICAgIAlhZGQgICAgcjEwLDB4MQogICAgMWZmZDoJNGQgMzkgY2Eg ICAgICAgICAgICAgCWNtcCAgICByMTAscjkKICAgIDIwMDA6CTBmIDg1IGJhIGZkIGZmIGZmICAg IAlqbmUgICAgMWRjMCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4MjEwPgogICAgMjAwNjoJZTkg MjIgZmUgZmYgZmYgICAgICAgCWptcCAgICAxZTJkIDx0dHNfaGVhcF9nZXRzb21lYXR0cnMrMHgy N2Q+CiAgICAyMDBiOgkwZiAxZiA0NCAwMCAwMCAgICAgICAJbm9wICAgIERXT1JEIFBUUiBbcmF4 K3JheCoxKzB4MF0KICAgIDIwMTA6CTQxIGQwIGVlICAgICAgICAgICAgIAlzaHIgICAgcjE0Yiwx CgkJKm9mZiArPSBWQVJTSVpFX0FOWShEYXR1bUdldFBvaW50ZXIocmVzKSk7CiAgICAyMDEzOgk0 NSAwZiBiNiBmNiAgICAgICAgICAJbW92enggIHIxNGQscjE0YgogICAgMjAxNzoJZTkgNzUgZmQg ZmYgZmYgICAgICAgCWptcCAgICAxZDkxIDx0dHNfaGVhcF9nZXRzb21lYXR0cnMrMHgxZTE+CiAg ICAyMDFjOgkwZiAxZiA0MCAwMCAgICAgICAgICAJbm9wICAgIERXT1JEIFBUUiBbcmF4KzB4MF0K CQkJKm9mZiA9IFRZUEVBTElHTihhdHRhbGlnbmJ5LCAqb2ZmKTsKICAgIDIwMjA6CThkIDVjIDE4 IGZmICAgICAgICAgIAlsZWEgICAgZWJ4LFtyYXgrcmJ4KjEtMHgxXQogICAgMjAyNDoJZjcgZDgg ICAgICAgICAgICAgICAgCW5lZyAgICBlYXgKICAgIDIwMjY6CTIxIGMzICAgICAgICAgICAgICAg IAlhbmQgICAgZWJ4LGVheAoJCXJlcyA9IFBvaW50ZXJHZXREYXR1bSh0dXBwdHIgKyAqb2ZmKTsK ICAgIDIwMjg6CTg5IGRlICAgICAgICAgICAgICAgIAltb3YgICAgZXNpLGVieAogICAgMjAyYToJ NGMgMDEgYzYgICAgICAgICAgICAgCWFkZCAgICByc2kscjgKCWlmIChWQVJBVFRfSVNfMUJfRShQ VFIpKQogICAgMjAyZDoJNDQgMGYgYjYgMmUgICAgICAgICAgCW1vdnp4ICByMTNkLEJZVEUgUFRS IFtyc2ldCglyZXR1cm4gKERhdHVtKSAodWludHB0cl90KSBYOwogICAgMjAzMToJNDggODkgZjAg ICAgICAgICAgICAgCW1vdiAgICByYXgscnNpCiAgICAyMDM0Ogk0MSA4MCBmZCAwMSAgICAgICAg ICAJY21wICAgIHIxM2IsMHgxCiAgICAyMDM4OgkwZiA4NSBmMSBmZSBmZiBmZiAgICAJam5lICAg IDFmMmYgPHR0c19oZWFwX2dldHNvbWVhdHRycysweDM3Zj4KCXJldHVybiBWQVJUQUdfMUJfRShQ VFIpOwogICAgMjAzZToJMGYgYjYgNzYgMDEgICAgICAgICAgCW1vdnp4ICBlc2ksQllURSBQVFIg W3JzaSsweDFdCglpZiAodGFnID09IFZBUlRBR19JTkRJUkVDVCkKICAgIDIwNDI6CTgzIGZlIDAx ICAgICAgICAgICAgIAljbXAgICAgZXNpLDB4MQogICAgMjA0NToJMGYgODQgMTIgMDIgMDAgMDAg ICAgCWplICAgICAyMjVkIDx0dHNfaGVhcF9nZXRzb21lYXR0cnMrMHg2YWQ+CglyZXR1cm4gKCh0 YWcgJiB+MSkgPT0gVkFSVEFHX0VYUEFOREVEX1JPKTsKICAgIDIwNGI6CTQxIDg5IGY1ICAgICAg ICAgICAgIAltb3YgICAgcjEzZCxlc2kKICAgIDIwNGU6CTQxIDgzIGU1IGZlICAgICAgICAgIAlh bmQgICAgcjEzZCwweGZmZmZmZmZlCgllbHNlIGlmIChWQVJUQUdfSVNfRVhQQU5ERUQodGFnKSkK ICAgIDIwNTI6CTQxIDgzIGZkIDAyICAgICAgICAgIAljbXAgICAgcjEzZCwweDIKICAgIDIwNTY6 CTBmIDg0IDAxIDAyIDAwIDAwICAgIAlqZSAgICAgMjI1ZCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJz KzB4NmFkPgoJZWxzZSBpZiAodGFnID09IFZBUlRBR19PTkRJU0spCiAgICAyMDVjOgk4MyBmZSAx MiAgICAgICAgICAgICAJY21wICAgIGVzaSwweDEyCiAgICAyMDVmOgk0MCAwZiA5NCBjNiAgICAg ICAgICAJc2V0ZSAgIHNpbAogICAgMjA2MzoJNDAgMGYgYjYgZjYgICAgICAgICAgCW1vdnp4ICBl c2ksc2lsCiAgICAyMDY3Ogk0OCBjMSBlNiAwNCAgICAgICAgICAJc2hsICAgIHJzaSwweDQKCQkq b2ZmICs9IFZBUlNJWkVfQU5ZKERhdHVtR2V0UG9pbnRlcihyZXMpKTsKICAgIDIwNmI6CTQ0IDhk IDZlIDAyICAgICAgICAgIAlsZWEgICAgcjEzZCxbcnNpKzB4Ml0KICAgIDIwNmY6CWU5IGNjIGZl IGZmIGZmICAgICAgIAlqbXAgICAgMWY0MCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4MzkwPgog ICAgMjA3NDoJMGYgMWYgNDAgMDAgICAgICAgICAgCW5vcCAgICBEV09SRCBQVFIgW3JheCsweDBd CgkJcmV0dXJuIFZBUlNJWkVfNEIoUFRSKTsKICAgIDIwNzg6CTQ0IDhiIDJlICAgICAgICAgICAg IAltb3YgICAgcjEzZCxEV09SRCBQVFIgW3JzaV0KICAgIDIwN2I6CTQxIGMxIGVkIDAyICAgICAg ICAgIAlzaHIgICAgcjEzZCwweDIKICAgIDIwN2Y6CWU5IGJjIGZlIGZmIGZmICAgICAgIAlqbXAg ICAgMWY0MCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4MzkwPgogICAgMjA4NDoJMGYgMWYgNDAg MDAgICAgICAgICAgCW5vcCAgICBEV09SRCBQVFIgW3JheCsweDBdCgkJCW5hdHRzID0gcmVxbmF0 dHM7CiAgICAyMDg4Ogk0ZCA2MyBjYyAgICAgICAgICAgICAJbW92c3hkIHI5LHIxMmQKICAgIDIw OGI6CTQ1IDg5IGU2ICAgICAgICAgICAgIAltb3YgICAgcjE0ZCxyMTJkCiAgICAyMDhlOgllOSA5 YiBmYiBmZiBmZiAgICAgICAJam1wICAgIDFjMmUgPHR0c19oZWFwX2dldHNvbWVhdHRycysweDdl PgogICAgMjA5MzoJMGYgMWYgNDQgMDAgMDAgICAgICAgCW5vcCAgICBEV09SRCBQVFIgW3JheCty YXgqMSsweDBdCglyZXR1cm4gKERhdHVtKSBYOwogICAgMjA5ODoJNDkgNjMgNDUgMDAgICAgICAg ICAgCW1vdnN4ZCByYXgsRFdPUkQgUFRSIFtyMTMrMHgwXQoJCQl2YWx1ZXNbYXR0bnVtXSA9IChE YXR1bSkgMDsKICAgIDIwOWM6CTRhIDg5IDA0IGQ3ICAgICAgICAgIAltb3YgICAgUVdPUkQgUFRS IFtyZGkrcjEwKjhdLHJheAoJZm9yICg7IGF0dG51bSA8IG5hdHRzOyBhdHRudW0rKykKICAgIDIw YTA6CTQ5IDgzIGMyIDAxICAgICAgICAgIAlhZGQgICAgcjEwLDB4MQogICAgMjBhNDoJNGQgMzkg Y2EgICAgICAgICAgICAgCWNtcCAgICByMTAscjkKICAgIDIwYTc6CTBmIDg1IDEzIGZkIGZmIGZm ICAgIAlqbmUgICAgMWRjMCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4MjEwPgogICAgMjBhZDoJ ZTkgN2IgZmQgZmYgZmYgICAgICAgCWptcCAgICAxZTJkIDx0dHNfaGVhcF9nZXRzb21lYXR0cnMr MHgyN2Q+CiAgICAyMGIyOgk2NiAwZiAxZiA0NCAwMCAwMCAgICAJbm9wICAgIFdPUkQgUFRSIFty YXgrcmF4KjErMHgwXQoJcmV0dXJuIChEYXR1bSkgWDsKICAgIDIwYjg6CTQ5IDBmIGJmIDQ1IDAw ICAgICAgIAltb3ZzeCAgcmF4LFdPUkQgUFRSIFtyMTMrMHgwXQoJCQl2YWx1ZXNbYXR0bnVtXSA9 IChEYXR1bSkgMDsKICAgIDIwYmQ6CTRhIDg5IDA0IGQ3ICAgICAgICAgIAltb3YgICAgUVdPUkQg UFRSIFtyZGkrcjEwKjhdLHJheAoJZm9yICg7IGF0dG51bSA8IG5hdHRzOyBhdHRudW0rKykKICAg IDIwYzE6CTQ5IDgzIGMyIDAxICAgICAgICAgIAlhZGQgICAgcjEwLDB4MQogICAgMjBjNToJNGQg MzkgY2EgICAgICAgICAgICAgCWNtcCAgICByMTAscjkKICAgIDIwYzg6CTBmIDg1IGYyIGZjIGZm IGZmICAgIAlqbmUgICAgMWRjMCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4MjEwPgogICAgMjBj ZToJZTkgNWEgZmQgZmYgZmYgICAgICAgCWptcCAgICAxZTJkIDx0dHNfaGVhcF9nZXRzb21lYXR0 cnMrMHgyN2Q+CiAgICAyMGQzOgkwZiAxZiA0NCAwMCAwMCAgICAgICAJbm9wICAgIERXT1JEIFBU UiBbcmF4K3JheCoxKzB4MF0KCXJldHVybiBWQVJUQUdfMUJfRShQVFIpOwogICAgMjBkODoJNDUg MGYgYjYgNmQgMDEgICAgICAgCW1vdnp4ICByMTNkLEJZVEUgUFRSIFtyMTMrMHgxXQoJaWYgKHRh ZyA9PSBWQVJUQUdfSU5ESVJFQ1QpCiAgICAyMGRkOgk0MSA4MyBmZCAwMSAgICAgICAgICAJY21w ICAgIHIxM2QsMHgxCiAgICAyMGUxOgkwZiA4NCA2YiAwMSAwMCAwMCAgICAJamUgICAgIDIyNTIg PHR0c19oZWFwX2dldHNvbWVhdHRycysweDZhMj4KCXJldHVybiAoKHRhZyAmIH4xKSA9PSBWQVJU QUdfRVhQQU5ERURfUk8pOwogICAgMjBlNzoJNDUgODkgZWUgICAgICAgICAgICAgCW1vdiAgICBy MTRkLHIxM2QKICAgIDIwZWE6CTQxIDgzIGU2IGZlICAgICAgICAgIAlhbmQgICAgcjE0ZCwweGZm ZmZmZmZlCgllbHNlIGlmIChWQVJUQUdfSVNfRVhQQU5ERUQodGFnKSkKICAgIDIwZWU6CTQxIDgz IGZlIDAyICAgICAgICAgIAljbXAgICAgcjE0ZCwweDIKICAgIDIwZjI6CTBmIDg0IDVhIDAxIDAw IDAwICAgIAlqZSAgICAgMjI1MiA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4NmEyPgoJZWxzZSBp ZiAodGFnID09IFZBUlRBR19PTkRJU0spCiAgICAyMGY4Ogk0MSA4MyBmZCAxMiAgICAgICAgICAJ Y21wICAgIHIxM2QsMHgxMgogICAgMjBmYzoJNDEgMGYgOTQgYzUgICAgICAgICAgCXNldGUgICBy MTNiCiAgICAyMTAwOgk0NSAwZiBiNiBlZCAgICAgICAgICAJbW92enggIHIxM2QscjEzYgogICAg MjEwNDoJNDkgYzEgZTUgMDQgICAgICAgICAgCXNobCAgICByMTMsMHg0CiAgICAyMTA4Ogk0NSA4 ZCA3NSAwMiAgICAgICAgICAJbGVhICAgIHIxNGQsW3IxMysweDJdCiAgICAyMTBjOgllOSA4MCBm YyBmZiBmZiAgICAgICAJam1wICAgIDFkOTEgPHR0c19oZWFwX2dldHNvbWVhdHRycysweDFlMT4K ICAgIDIxMTE6CTBmIDFmIDgwIDAwIDAwIDAwIDAwIAlub3AgICAgRFdPUkQgUFRSIFtyYXgrMHgw XQogKiBjYXNlLgogKi8Kc3RhdGljIGlubGluZSBpbnQKZmlyc3RfbnVsbF9hdHRyKGNvbnN0IGJp dHM4ICpiaXRzLCBpbnQgbmF0dHMpCnsKCWludAkJCW5hdHRCeXRlID0gbmF0dHMgPj4gMzsKICAg IDIxMTg6CTQ1IDg5IGNkICAgICAgICAgICAgIAltb3YgICAgcjEzZCxyOWQKICAgIDIxMWI6CTQx IGMxIGZkIDAzICAgICAgICAgIAlzYXIgICAgcjEzZCwweDMKCQl9Cgl9CiNlbmRpZgoKCS8qIFBy b2Nlc3MgYWxsIGJ5dGVzIHVwIHRvIGp1c3QgYmVmb3JlIHRoZSBieXRlIGZvciB0aGUgbmF0dHMg YXR0cmlidXRlICovCglmb3IgKGJ5dGVudW0gPSAwOyBieXRlbnVtIDwgbmF0dEJ5dGU7IGJ5dGVu dW0rKykKICAgIDIxMWY6CTQ1IDg1IGVkICAgICAgICAgICAgIAl0ZXN0ICAgcjEzZCxyMTNkCiAg ICAyMTIyOgkwZiA4ZSA0MCAwMSAwMCAwMCAgICAJamxlICAgIDIyNjggPHR0c19oZWFwX2dldHNv bWVhdHRycysweDZiOD4KICAgIDIxMjg6CTQ4IDhkIDczIDE3ICAgICAgICAgIAlsZWEgICAgcnNp LFtyYngrMHgxN10KICAgIDIxMmM6CTMxIGZmICAgICAgICAgICAgICAgIAl4b3IgICAgZWRpLGVk aQogICAgMjEyZToJZWIgMjAgICAgICAgICAgICAgICAgCWptcCAgICAyMTUwIDx0dHNfaGVhcF9n ZXRzb21lYXR0cnMrMHg1YTA+CiAgICAyMTMwOgkwZiAxZiA0NCAwMCAwMCAgICAgICAJbm9wICAg IERXT1JEIFBUUiBbcmF4K3JheCoxKzB4MF0KICAgIDIxMzU6CTY2IDY2IDJlIDBmIDFmIDg0IDAw IAlkYXRhMTYgY3Mgbm9wIFdPUkQgUFRSIFtyYXgrcmF4KjErMHgwXQogICAgMjEzYzoJMDAgMDAg MDAgMDAgCiAgICAyMTQwOgk4MyBjNyAwMSAgICAgICAgICAgICAJYWRkICAgIGVkaSwweDEKICAg IDIxNDM6CTQ4IDgzIGM2IDAxICAgICAgICAgIAlhZGQgICAgcnNpLDB4MQogICAgMjE0NzoJNDEg MzkgZmQgICAgICAgICAgICAgCWNtcCAgICByMTNkLGVkaQogICAgMjE0YToJMGYgODQgZWMgMDAg MDAgMDAgICAgCWplICAgICAyMjNjIDx0dHNfaGVhcF9nZXRzb21lYXR0cnMrMHg2OGM+Cgl7CgkJ LyogYnJlYWsgaWYgdGhlcmUncyBhbnkgTlVMTCBhdHRycyAoYSAwIGJpdCkgKi8KCQlpZiAoYml0 c1tieXRlbnVtXSAhPSAweEZGKQogICAgMjE1MDoJMGYgYjYgMDYgICAgICAgICAgICAgCW1vdnp4 ICBlYXgsQllURSBQVFIgW3JzaV0KICAgIDIxNTM6CTNjIGZmICAgICAgICAgICAgICAgIAljbXAg ICAgYWwsMHhmZgogICAgMjE1NToJNzQgZTkgICAgICAgICAgICAgICAgCWplICAgICAyMTQwIDx0 dHNfaGVhcF9nZXRzb21lYXR0cnMrMHg1OTA+CgkgKiBsb29raW5nIGZvciB0aGUgZmlyc3QgMS1i aXQuICBUaGlzIHdvcmtzIGV2ZW4gd2hlbiB0aGUgYnl0ZSBpcyAweEZGLCBhcwoJICogdGhlIGJp dHdpc2UgTk9UIG9mIDB4RkYgaW4gMzIgYml0cyBpcyAweEZGRkZGRjAwLCBpbiB3aGljaCBjYXNl CgkgKiBwZ19yaWdodG1vc3Rfb25lX3BvczMyKCkgd2lsbCByZXR1cm4gOC4gIFdlIG1heSBlbmQg dXAgd2l0aCBhIHZhbHVlCgkgKiBoaWdoZXIgdGhhbiBuYXR0cyBoZXJlLCBidXQgd2UnbGwgZml4 IHRoYXQgd2l0aCB0aGUgTWluKCkgYmVsb3cuCgkgKi8KCXJlcyA9IGJ5dGVudW0gPDwgMzsKICAg IDIxNTc6CWMxIGU3IDAzICAgICAgICAgICAgIAlzaGwgICAgZWRpLDB4MwoJcmVzICs9IHBnX3Jp Z2h0bW9zdF9vbmVfcG9zMzIofigodWludDMyKSBiaXRzW2J5dGVudW1dKSk7CiAgICAyMTVhOglm NyBkMCAgICAgICAgICAgICAgICAJbm90ICAgIGVheAoJaW50CQkJbmJ5dGVzID0gKG5hdHRzICsg NykgPj4gMzsKICAgIDIxNWM6CTQ1IDhkIDY5IDA3ICAgICAgICAgIAlsZWEgICAgcjEzZCxbcjkr MHg3XQpwZ19yaWdodG1vc3Rfb25lX3BvczMyKHVpbnQzMiB3b3JkKQp7CiNpZmRlZiBIQVZFX19C VUlMVElOX0NUWgoJQXNzZXJ0KHdvcmQgIT0gMCk7CgoJcmV0dXJuIF9fYnVpbHRpbl9jdHood29y ZCk7CiAgICAyMTYwOglmMyAwZiBiYyBjMCAgICAgICAgICAJdHpjbnQgIGVheCxlYXgKCXJlcyAr PSBwZ19yaWdodG1vc3Rfb25lX3BvczMyKH4oKHVpbnQzMikgYml0c1tieXRlbnVtXSkpOwogICAg MjE2NDoJMDEgZjggICAgICAgICAgICAgICAgCWFkZCAgICBlYXgsZWRpCgoJLyoKCSAqIFNpbmNl IHdlIGRpZCBubyBtYXNraW5nIHRvIG1hc2sgb3V0IGJpdHMgYmV5b25kIHRoZSBuYXR0J3RoIGJp dCwgd2UgbWF5CgkgKiBoYXZlIGZvdW5kIGEgYml0IGhpZ2hlciB0aGFuIG5hdHRzLCBzbyB3ZSBt dXN0IGNhcCByZXMgdG8gbmF0dHMKCSAqLwoJcmVzID0gTWluKHJlcywgbmF0dHMpOwogICAgMjE2 NjoJNDEgMzkgYzEgICAgICAgICAgICAgCWNtcCAgICByOWQsZWF4CiAgICAyMTY5Ogk0MSAwZiA0 ZSBjMSAgICAgICAgICAJY21vdmxlIGVheCxyOWQKCWludAkJCW5ieXRlcyA9IChuYXR0cyArIDcp ID4+IDM7CiAgICAyMTZkOgk0MSBjMSBmZCAwMyAgICAgICAgICAJc2FyICAgIHIxM2QsMHgzCgly ZXMgPSBNaW4ocmVzLCBuYXR0cyk7CiAgICAyMTcxOgk0YyA2MyBmMCAgICAgICAgICAgICAJbW92 c3hkIHIxNCxlYXgKCQlpc251bGxfOCAmPSBVSU5UNjRDT05TVCgweDAxMDEwMTAxMDEwMTAxMDEp OwogICAgMjE3NDoJNDkgYmYgMDEgMDEgMDEgMDEgMDEgCW1vdmFicyByMTUsMHgxMDEwMTAxMDEw MTAxMDEKICAgIDIxN2I6CTAxIDAxIDAxIAogICAgMjE3ZToJNGQgNjMgZWQgICAgICAgICAgICAg CW1vdnN4ZCByMTMscjEzZAoJZm9yIChieXRlbnVtID0gMDsgYnl0ZW51bSA8IG5hdHRCeXRlOyBi eXRlbnVtKyspCiAgICAyMTgxOgkzMSBmZiAgICAgICAgICAgICAgICAJeG9yICAgIGVkaSxlZGkK ICAgIDIxODM6CTY2IDBmIDFmIDQ0IDAwIDAwICAgIAlub3AgICAgV09SRCBQVFIgW3JheCtyYXgq MSsweDBdCiAgICAyMTg5Ogk2NiA2NiAyZSAwZiAxZiA4NCAwMCAJZGF0YTE2IGNzIG5vcCBXT1JE IFBUUiBbcmF4K3JheCoxKzB4MF0KICAgIDIxOTA6CTAwIDAwIDAwIDAwIAogICAgMjE5NDoJNjYg NjYgMmUgMGYgMWYgODQgMDAgCWRhdGExNiBjcyBub3AgV09SRCBQVFIgW3JheCtyYXgqMSsweDBd CiAgICAyMTliOgkwMCAwMCAwMCAwMCAKICAgIDIxOWY6CTY2IDY2IDJlIDBmIDFmIDg0IDAwIAlk YXRhMTYgY3Mgbm9wIFdPUkQgUFRSIFtyYXgrcmF4KjErMHgwXQogICAgMjFhNjoJMDAgMDAgMDAg MDAgCiAgICAyMWFhOgk2NiA2NiAyZSAwZiAxZiA4NCAwMCAJZGF0YTE2IGNzIG5vcCBXT1JEIFBU UiBbcmF4K3JheCoxKzB4MF0KICAgIDIxYjE6CTAwIDAwIDAwIDAwIAogICAgMjFiNToJNjYgNjYg MmUgMGYgMWYgODQgMDAgCWRhdGExNiBjcyBub3AgV09SRCBQVFIgW3JheCtyYXgqMSsweDBdCiAg ICAyMWJjOgkwMCAwMCAwMCAwMCAKCQliaXRzOAkJbnVsbGJ5dGUgPSB+Yml0c1tpXTsKICAgIDIx YzA6CTBmIGI2IDc0IDNiIDE3ICAgICAgIAltb3Z6eCAgZXNpLEJZVEUgUFRSIFtyYngrcmRpKjEr MHgxN10KICAgIDIxYzU6CWY3IGQ2ICAgICAgICAgICAgICAgIAlub3QgICAgZXNpCgkJaXNudWxs XzggfD0gKCh1aW50NjQpICgobnVsbGJ5dGUgPj4gNCkgKiBTUFJFQURfQklUU19NVUxUSVBMSUVS XzMyKSkgPDwgMzI7CiAgICAyMWM3Ogk4OSBmMCAgICAgICAgICAgICAgICAJbW92ICAgIGVheCxl c2kKCQlpc251bGxfOCA9IChudWxsYnl0ZSAmIDB4ZikgKiBTUFJFQURfQklUU19NVUxUSVBMSUVS XzMyOwogICAgMjFjOToJODMgZTYgMGYgICAgICAgICAgICAgCWFuZCAgICBlc2ksMHhmCgkJaXNu dWxsXzggfD0gKCh1aW50NjQpICgobnVsbGJ5dGUgPj4gNCkgKiBTUFJFQURfQklUU19NVUxUSVBM SUVSXzMyKSkgPDwgMzI7CiAgICAyMWNjOgljMCBlOCAwNCAgICAgICAgICAgICAJc2hyICAgIGFs LDB4NAoJCWlzbnVsbF84ID0gKG51bGxieXRlICYgMHhmKSAqIFNQUkVBRF9CSVRTX01VTFRJUExJ RVJfMzI7CiAgICAyMWNmOgk0OCA2OSBmNiA4MSA0MCAyMCAwMCAJaW11bCAgIHJzaSxyc2ksMHgy MDQwODEKCQlpc251bGxfOCB8PSAoKHVpbnQ2NCkgKChudWxsYnl0ZSA+PiA0KSAqIFNQUkVBRF9C SVRTX01VTFRJUExJRVJfMzIpKSA8PCAzMjsKICAgIDIxZDY6CTgzIGUwIDBmICAgICAgICAgICAg IAlhbmQgICAgZWF4LDB4ZgogICAgMjFkOToJNDggNjkgYzAgODEgNDAgMjAgMDAgCWltdWwgICBy YXgscmF4LDB4MjA0MDgxCiAgICAyMWUwOgk0OCBjMSBlMCAyMCAgICAgICAgICAJc2hsICAgIHJh eCwweDIwCiAgICAyMWU0Ogk0OCAwOSBmMCAgICAgICAgICAgICAJb3IgICAgIHJheCxyc2kKCQlp c251bGxfOCAmPSBVSU5UNjRDT05TVCgweDAxMDEwMTAxMDEwMTAxMDEpOwogICAgMjFlNzoJNGMg MjEgZjggICAgICAgICAgICAgCWFuZCAgICByYXgscjE1CiAgICAyMWVhOgk0OCA4OSAwNCBmOSAg ICAgICAgICAJbW92ICAgIFFXT1JEIFBUUiBbcmN4K3JkaSo4XSxyYXgKCWZvciAoaW50IGkgPSAw OyBpIDwgbmJ5dGVzOyBpKyssIGlzbnVsbCArPSA4KQogICAgMjFlZToJNDggODMgYzcgMDEgICAg ICAgICAgCWFkZCAgICByZGksMHgxCiAgICAyMWYyOgk0YyAzOSBlZiAgICAgICAgICAgICAJY21w ICAgIHJkaSxyMTMKICAgIDIxZjU6CTc1IGM5ICAgICAgICAgICAgICAgIAlqbmUgICAgMjFjMCA8 dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4NjEwPgoJCQlmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciA9 IE1pbihmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciwgZmlyc3ROdWxsQXR0cik7CiAgICAyMWY3Ogk0 NSAzOSBmMiAgICAgICAgICAgICAJY21wICAgIHIxMGQscjE0ZAogICAgMjFmYToJNGQgMGYgNGYg ZDYgICAgICAgICAgCWNtb3ZnICByMTAscjE0CiAgICAyMWZlOgllOSAyYiBmYSBmZiBmZiAgICAg ICAJam1wICAgIDFjMmUgPHR0c19oZWFwX2dldHNvbWVhdHRycysweDdlPgogICAgMjIwMzoJMGYg MWYgNDQgMDAgMDAgICAgICAgCW5vcCAgICBEV09SRCBQVFIgW3JheCtyYXgqMSsweDBdCglmb3Ig KDsgYXR0bnVtIDwgZmlyc3ROdWxsQXR0cjsgYXR0bnVtKyspCiAgICAyMjA4Ogk0OSA4OSBjMiAg ICAgICAgICAgICAJbW92ICAgIHIxMCxyYXgKICAgIDIyMGI6CWU5IGEwIGZiIGZmIGZmICAgICAg IAlqbXAgICAgMWRiMCA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4MjAwPgoJZm9yICg7IGF0dG51 bSA8IG5hdHRzOyBhdHRudW0rKykKICAgIDIyMTA6CTRkIDg5IGQxICAgICAgICAgICAgIAltb3Yg ICAgcjkscjEwCiAgICAyMjEzOgllOSAxNSBmYyBmZiBmZiAgICAgICAJam1wICAgIDFlMmQgPHR0 c19oZWFwX2dldHNvbWVhdHRycysweDI3ZD4KICAgIDIyMTg6CTBmIDFmIDg0IDAwIDAwIDAwIDAw IAlub3AgICAgRFdPUkQgUFRSIFtyYXgrcmF4KjErMHgwXQogICAgMjIxZjoJMDAgCgkJKm9mZnAg PSBvZmY7CiAgICAyMjIwOgk0MSA4OSA1YiA0OCAgICAgICAgICAJbW92ICAgIERXT1JEIFBUUiBb cjExKzB4NDhdLGVieAoJCXNsb3RfZ2V0bWlzc2luZ2F0dHJzKHNsb3QsIGF0dG51bSwgcmVxbmF0 dHMpOwogICAgMjIyNDoJNDQgODkgZTIgICAgICAgICAgICAgCW1vdiAgICBlZHgscjEyZAp9CiAg ICAyMjI3Ogk1YiAgICAgICAgICAgICAgICAgICAJcG9wICAgIHJieAoJCXNsb3RfZ2V0bWlzc2lu Z2F0dHJzKHNsb3QsIGF0dG51bSwgcmVxbmF0dHMpOwogICAgMjIyODoJNDQgODkgY2UgICAgICAg ICAgICAgCW1vdiAgICBlc2kscjlkCn0KICAgIDIyMmI6CTVkICAgICAgICAgICAgICAgICAgIAlw b3AgICAgcmJwCgkJc2xvdF9nZXRtaXNzaW5nYXR0cnMoc2xvdCwgYXR0bnVtLCByZXFuYXR0cyk7 CiAgICAyMjJjOgk0YyA4OSBkZiAgICAgICAgICAgICAJbW92ICAgIHJkaSxyMTEKfQogICAgMjIy ZjoJNDEgNWMgICAgICAgICAgICAgICAgCXBvcCAgICByMTIKICAgIDIyMzE6CTQxIDVkICAgICAg ICAgICAgICAgIAlwb3AgICAgcjEzCiAgICAyMjMzOgk0MSA1ZSAgICAgICAgICAgICAgICAJcG9w ICAgIHIxNAogICAgMjIzNToJNDEgNWYgICAgICAgICAgICAgICAgCXBvcCAgICByMTUKCQlzbG90 X2dldG1pc3NpbmdhdHRycyhzbG90LCBhdHRudW0sIHJlcW5hdHRzKTsKICAgIDIyMzc6CWU5IGI0 IGY4IGZmIGZmICAgICAgIAlqbXAgICAgMWFmMCA8c2xvdF9nZXRtaXNzaW5nYXR0cnM+CglyZXMg PSBieXRlbnVtIDw8IDM7CiAgICAyMjNjOgk0MiA4ZCAzYyBlZCAwMCAwMCAwMCAJbGVhICAgIGVk aSxbcjEzKjgrMHgwXQogICAgMjI0MzoJMDAgCglyZXMgKz0gcGdfcmlnaHRtb3N0X29uZV9wb3Mz Mih+KCh1aW50MzIpIGJpdHNbYnl0ZW51bV0pKTsKICAgIDIyNDQ6CTRkIDYzIGVkICAgICAgICAg ICAgIAltb3ZzeGQgcjEzLHIxM2QKICAgIDIyNDc6CTQyIDBmIGI2IDQ0IDJiIDE3ICAgIAltb3Z6 eCAgZWF4LEJZVEUgUFRSIFtyYngrcjEzKjErMHgxN10KICAgIDIyNGQ6CWU5IDA4IGZmIGZmIGZm ICAgICAgIAlqbXAgICAgMjE1YSA8dHRzX2hlYXBfZ2V0c29tZWF0dHJzKzB4NWFhPgogICAgMjI1 MjoJNDEgYmUgMGEgMDAgMDAgMDAgICAgCW1vdiAgICByMTRkLDB4YQogICAgMjI1ODoJZTkgMzQg ZmIgZmYgZmYgICAgICAgCWptcCAgICAxZDkxIDx0dHNfaGVhcF9nZXRzb21lYXR0cnMrMHgxZTE+ CiAgICAyMjVkOgk0MSBiZCAwYSAwMCAwMCAwMCAgICAJbW92ICAgIHIxM2QsMHhhCiAgICAyMjYz OgllOSBkOCBmYyBmZiBmZiAgICAgICAJam1wICAgIDFmNDAgPHR0c19oZWFwX2dldHNvbWVhdHRy cysweDM5MD4KICAgIDIyNjg6CTBmIGI2IDQzIDE3ICAgICAgICAgIAltb3Z6eCAgZWF4LEJZVEUg UFRSIFtyYngrMHgxN10KCWludAkJCW5ieXRlcyA9IChuYXR0cyArIDcpID4+IDM7CiAgICAyMjZj Ogk0NSA4ZCA2OSAwNyAgICAgICAgICAJbGVhICAgIHIxM2QsW3I5KzB4N10KCXJlcyArPSBwZ19y aWdodG1vc3Rfb25lX3BvczMyKH4oKHVpbnQzMikgYml0c1tieXRlbnVtXSkpOwogICAgMjI3MDoJ ZjcgZDAgICAgICAgICAgICAgICAgCW5vdCAgICBlYXgKICAgIDIyNzI6CWYzIDBmIGJjIGMwICAg ICAgICAgIAl0emNudCAgZWF4LGVheAoJcmVzID0gTWluKHJlcywgbmF0dHMpOwogICAgMjI3NjoJ NDEgMzkgYzEgICAgICAgICAgICAgCWNtcCAgICByOWQsZWF4CiAgICAyMjc5Ogk0MSAwZiA0ZSBj MSAgICAgICAgICAJY21vdmxlIGVheCxyOWQKCWludAkJCW5ieXRlcyA9IChuYXR0cyArIDcpID4+ IDM7CiAgICAyMjdkOgk0MSBjMSBmZCAwMyAgICAgICAgICAJc2FyICAgIHIxM2QsMHgzCglyZXMg PSBNaW4ocmVzLCBuYXR0cyk7CiAgICAyMjgxOgk0YyA2MyBmMCAgICAgICAgICAgICAJbW92c3hk IHIxNCxlYXgKCWZvciAoaW50IGkgPSAwOyBpIDwgbmJ5dGVzOyBpKyssIGlzbnVsbCArPSA4KQog ICAgMjI4NDoJNDEgODMgZmQgMDEgICAgICAgICAgCWNtcCAgICByMTNkLDB4MQogICAgMjI4ODoJ MGYgODUgNjkgZmYgZmYgZmYgICAgCWpuZSAgICAyMWY3IDx0dHNfaGVhcF9nZXRzb21lYXR0cnMr MHg2NDc+CiAgICAyMjhlOgllOSBlMSBmZSBmZiBmZiAgICAgICAJam1wICAgIDIxNzQgPHR0c19o ZWFwX2dldHNvbWVhdHRycysweDVjND4KICAgIDIyOTM6CTY2IDkwICAgICAgICAgICAgICAgIAl4 Y2hnICAgYXgsYXgKICAgIDIyOTU6CTY2IDY2IDJlIDBmIDFmIDg0IDAwIAlkYXRhMTYgY3Mgbm9w IFdPUkQgUFRSIFtyYXgrcmF4KjErMHgwXQogICAgMjI5YzoJMDAgMDAgMDAgMDAgCgowMDAwMDAw MDAwMDAyMmEwIDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnM+Ogp7CiAgICAyMmEwOglmMyAwZiAx ZSBmYSAgICAgICAgICAJZW5kYnI2NAogICAgMjJhNDoJNDEgNTcgICAgICAgICAgICAgICAgCXB1 c2ggICByMTUKICAgIDIyYTY6CTQ5IDg5IGZiICAgICAgICAgICAgIAltb3YgICAgcjExLHJkaQog ICAgMjJhOToJNDEgNTYgICAgICAgICAgICAgICAgCXB1c2ggICByMTQKICAgIDIyYWI6CTQxIDU1 ICAgICAgICAgICAgICAgIAlwdXNoICAgcjEzCiAgICAyMmFkOgk0MSA1NCAgICAgICAgICAgICAg ICAJcHVzaCAgIHIxMgogICAgMjJhZjoJNGMgNjMgZTYgICAgICAgICAgICAgCW1vdnN4ZCByMTIs ZXNpCiAgICAyMmIyOgk1NSAgICAgICAgICAgICAgICAgICAJcHVzaCAgIHJicAogICAgMjJiMzoJ NTMgICAgICAgICAgICAgICAgICAgCXB1c2ggICByYngKCUhlYXBUdXBsZUhlYWRlciB0dXAgPSB0 dXBsZS0+dF9kYXRhOwogICAgMjJiNDoJNDggOGIgNDcgNDAgICAgICAgICAgCW1vdiAgICByYXgs UVdPUkQgUFRSIFtyZGkrMHg0MF0KCVR1cGxlRGVzYwl0dXBsZURlc2MgPSBzbG90LT50dHNfdHVw bGVEZXNjcmlwdG9yOwogICAgMjJiODoJNDggOGIgNTcgMTAgICAgICAgICAgCW1vdiAgICByZHgs UVdPUkQgUFRSIFtyZGkrMHgxMF0KCWlzbnVsbCA9IHNsb3QtPnR0c19pc251bGw7CiAgICAyMmJj Ogk0OCA4YiA0ZiAyMCAgICAgICAgICAJbW92ICAgIHJjeCxRV09SRCBQVFIgW3JkaSsweDIwXQoJ SGVhcFR1cGxlSGVhZGVyIHR1cCA9IHR1cGxlLT50X2RhdGE7CiAgICAyMmMwOgk0OCA4YiA1OCAx MCAgICAgICAgICAJbW92ICAgIHJieCxRV09SRCBQVFIgW3JheCsweDEwXQoJaWYgKFRUU19PQkVZ U19OT1RfTlVMTF9DT05TVFJBSU5UUyhzbG90KSkKICAgIDIyYzQ6CWY2IDQ3IDA0IDA4ICAgICAg ICAgIAl0ZXN0ICAgQllURSBQVFIgW3JkaSsweDRdLDB4OAogICAgMjJjODoJMGYgODQgMjIgMDQg MDAgMDAgICAgCWplICAgICAyNmYwIDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnMrMHg0NTA+CgkJ Zmlyc3ROb25HdWFyYW50ZWVkQXR0ciA9IE1pbihyZXFuYXR0cywgdHVwbGVEZXNjLT5maXJzdE5v bkd1YXJhbnRlZWRBdHRyKTsKICAgIDIyY2U6CThiIDQyIDE0ICAgICAgICAgICAgIAltb3YgICAg ZWF4LERXT1JEIFBUUiBbcmR4KzB4MTRdCiAgICAyMmQxOgk0MSAzOSBjNCAgICAgICAgICAgICAJ Y21wICAgIHIxMmQsZWF4CiAgICAyMmQ0Ogk0MSAwZiA0ZSBjNCAgICAgICAgICAJY21vdmxlIGVh eCxyMTJkCglpZiAoYXR0bnVtIDwgZmlyc3ROb25HdWFyYW50ZWVkQXR0cikKICAgIDIyZDg6CTQ4 IDYzIGU4ICAgICAgICAgICAgIAltb3ZzeGQgcmJwLGVheAoJZmlyc3ROb25DYWNoZU9mZnNldEF0 dHIgPSB0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2Zmc2V0QXR0cjsKICAgIDIyZGI6CTRjIDYz IDUyIDEwICAgICAgICAgIAltb3ZzeGQgcjEwLERXT1JEIFBUUiBbcmR4KzB4MTBdCglpZiAoSGVh cFR1cGxlSGFzTnVsbHModHVwbGUpKQogICAgMjJkZjoJZjYgNDMgMTQgMDEgICAgICAgICAgCXRl c3QgICBCWVRFIFBUUiBbcmJ4KzB4MTRdLDB4MQogICAgMjJlMzoJMGYgODQgZDcgMDMgMDAgMDAg ICAgCWplICAgICAyNmMwIDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnMrMHg0MjA+CgkJbmF0dHMg PSBIZWFwVHVwbGVIZWFkZXJHZXROYXR0cyh0dXApOwogICAgMjJlOToJNDQgMGYgYjcgNGIgMTIg ICAgICAgCW1vdnp4ICByOWQsV09SRCBQVFIgW3JieCsweDEyXQogICAgMjJlZToJNDEgODEgZTEg ZmYgMDcgMDAgMDAgCWFuZCAgICByOWQsMHg3ZmYKICAgIDIyZjU6CTQ1IDhkIDQxIDA3ICAgICAg ICAgIAlsZWEgICAgcjhkLFtyOSsweDddCiAgICAyMmY5Ogk0MSBjMSBmOCAwMyAgICAgICAgICAJ c2FyICAgIHI4ZCwweDMKCQl0cCA9IChjaGFyICopIHR1cCArIE1BWEFMSUdOKG9mZnNldG9mKEhl YXBUdXBsZUhlYWRlckRhdGEsIHRfYml0cykgKwogICAgMjJmZDoJNDEgODMgYzAgMWUgICAgICAg ICAgCWFkZCAgICByOGQsMHgxZQogICAgMjMwMToJNDEgODEgZTAgZjggMDMgMDAgMDAgCWFuZCAg ICByOGQsMHgzZjgKICAgIDIzMDg6CTQ5IDAxIGQ4ICAgICAgICAgICAgIAlhZGQgICAgcjgscmJ4 CgkJbmF0dHMgPSBNaW4obmF0dHMsIHJlcW5hdHRzKTsKICAgIDIzMGI6CTQ1IDM5IGNjICAgICAg ICAgICAgIAljbXAgICAgcjEyZCxyOWQKICAgIDIzMGU6CTRkIDBmIDRlIGNjICAgICAgICAgIAlj bW92bGUgcjkscjEyCgkJCWZpcnN0TnVsbEF0dHIgPSBuYXR0czsKICAgIDIzMTI6CTQ1IDg5IGNl ICAgICAgICAgICAgIAltb3YgICAgcjE0ZCxyOWQKCQlpZiAobmF0dHMgPiBmaXJzdE5vbkd1YXJh bnRlZWRBdHRyKQogICAgMjMxNToJNDEgMzkgYzEgICAgICAgICAgICAgCWNtcCAgICByOWQsZWF4 CiAgICAyMzE4OgkwZiA4ZiAwYSAwNSAwMCAwMCAgICAJamcgICAgIDI4MjggPHR0c19taW5pbWFs X2dldHNvbWVhdHRycysweDU4OD4KCWF0dG51bSA9IHNsb3QtPnR0c19udmFsaWQ7CiAgICAyMzFl Ogk0OSAwZiBiZiA0MyAwNiAgICAgICAJbW92c3ggIHJheCxXT1JEIFBUUiBbcjExKzB4Nl0KCXZh bHVlcyA9IHNsb3QtPnR0c192YWx1ZXM7CiAgICAyMzIzOgk0OSA4YiA3YiAxOCAgICAgICAgICAJ bW92ICAgIHJkaSxRV09SRCBQVFIgW3IxMSsweDE4XQoJc2xvdC0+dHRzX252YWxpZCA9IHJlcW5h dHRzOwogICAgMjMyNzoJNjYgNDUgODkgNjMgMDYgICAgICAgCW1vdiAgICBXT1JEIFBUUiBbcjEx KzB4Nl0scjEydwoJaWYgKGF0dG51bSA8IGZpcnN0Tm9uR3VhcmFudGVlZEF0dHIpCiAgICAyMzJj Ogk0OCAzOSBlOCAgICAgICAgICAgICAJY21wICAgIHJheCxyYnAKICAgIDIzMmY6CTczIDdmICAg ICAgICAgICAgICAgIAlqYWUgICAgMjNiMCA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4MTEw PgogICAgMjMzMToJNDggODkgNTQgMjQgZjAgICAgICAgCW1vdiAgICBRV09SRCBQVFIgW3JzcC0w eDEwXSxyZHgKICAgIDIzMzY6CTQ4IDhkIDc0IGMyIDIwICAgICAgIAlsZWEgICAgcnNpLFtyZHgr cmF4KjgrMHgyMF0KICAgIDIzM2I6CWViIDIyICAgICAgICAgICAgICAgIAlqbXAgICAgMjM1ZiA8 dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4YmY+CiAgICAyMzNkOgkwZiAxZiAwMCAgICAgICAg ICAgICAJbm9wICAgIERXT1JEIFBUUiBbcmF4XQoJCXN3aXRjaCAoYXR0bGVuKQogICAgMjM0MDoJ NjYgNDEgODMgZmYgMDEgICAgICAgCWNtcCAgICByMTV3LDB4MQogICAgMjM0NToJNzQgNTkgICAg ICAgICAgICAgICAgCWplICAgICAyM2EwIDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnMrMHgxMDA+ CglyZXR1cm4gKERhdHVtKSBYOwogICAgMjM0NzoJNDggOGIgMTIgICAgICAgICAgICAgCW1vdiAg ICByZHgsUVdPUkQgUFRSIFtyZHhdCgkJCXZhbHVlc1thdHRudW1dID0gZmV0Y2hfYXR0X25vZXJy KHRwICsgb2ZmLCB0cnVlLCBhdHRsZW4pOwogICAgMjM0YToJNDggODkgMTQgYzcgICAgICAgICAg CW1vdiAgICBRV09SRCBQVFIgW3JkaStyYXgqOF0scmR4CgkJCWF0dG51bSsrOwogICAgMjM0ZToJ NDggODMgYzAgMDEgICAgICAgICAgCWFkZCAgICByYXgsMHgxCgkJfSB3aGlsZSAoYXR0bnVtIDwg Zmlyc3ROb25HdWFyYW50ZWVkQXR0cik7CiAgICAyMzUyOgk0OCA4MyBjNiAwOCAgICAgICAgICAJ YWRkICAgIHJzaSwweDgKICAgIDIzNTY6CTQ4IDM5IGU4ICAgICAgICAgICAgIAljbXAgICAgcmF4 LHJicAogICAgMjM1OToJMGYgODMgMzEgMDMgMDAgMDAgICAgCWphZSAgICAyNjkwIDx0dHNfbWlu aW1hbF9nZXRzb21lYXR0cnMrMHgzZjA+CgkJCWlzbnVsbFthdHRudW1dID0gZmFsc2U7CiAgICAy MzVmOgljNiAwNCAwMSAwMCAgICAgICAgICAJbW92ICAgIEJZVEUgUFRSIFtyY3grcmF4KjFdLDB4 MAoJCQlvZmYgPSBjYXR0ci0+YXR0Y2FjaGVvZmY7CiAgICAyMzYzOgkwZiBiZiAxNiAgICAgICAg ICAgICAJbW92c3ggIGVkeCxXT1JEIFBUUiBbcnNpXQoJCQljYXR0ciA9ICZjYXR0cnNbYXR0bnVt XTsKICAgIDIzNjY6CTQ5IDg5IGY1ICAgICAgICAgICAgIAltb3YgICAgcjEzLHJzaQoJCQlhdHRs ZW4gPSBjYXR0ci0+YXR0bGVuOwogICAgMjM2OToJNDQgMGYgYjcgN2UgMDIgICAgICAgCW1vdnp4 ICByMTVkLFdPUkQgUFRSIFtyc2krMHgyXQoJCQlvZmYgPSBjYXR0ci0+YXR0Y2FjaGVvZmY7CiAg ICAyMzZlOgk0OCA4OSBkMyAgICAgICAgICAgICAJbW92ICAgIHJieCxyZHgKCQkJdmFsdWVzW2F0 dG51bV0gPSBmZXRjaF9hdHRfbm9lcnIodHAgKyBvZmYsIHRydWUsIGF0dGxlbik7CiAgICAyMzcx Ogk0YyAwMSBjMiAgICAgICAgICAgICAJYWRkICAgIHJkeCxyOAogICAgMjM3NDoJNjYgNDEgODMg ZmYgMDIgICAgICAgCWNtcCAgICByMTV3LDB4MgogICAgMjM3OToJNzQgMTUgICAgICAgICAgICAg ICAgCWplICAgICAyMzkwIDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnMrMHhmMD4KICAgIDIzN2I6 CTY2IDQxIDgzIGZmIDA0ICAgICAgIAljbXAgICAgcjE1dywweDQKICAgIDIzODA6CTc1IGJlICAg ICAgICAgICAgICAgIAlqbmUgICAgMjM0MCA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4YTA+ CglyZXR1cm4gKERhdHVtKSBYOwogICAgMjM4MjoJNDggNjMgMTIgICAgICAgICAgICAgCW1vdnN4 ZCByZHgsRFdPUkQgUFRSIFtyZHhdCgkJCQlyZXR1cm4gSW50MzJHZXREYXR1bSgqKChjb25zdCBp bnQzMiAqKSBUKSk7CiAgICAyMzg1OgllYiBjMyAgICAgICAgICAgICAgICAJam1wICAgIDIzNGEg PHR0c19taW5pbWFsX2dldHNvbWVhdHRycysweGFhPgogICAgMjM4NzoJNjYgMGYgMWYgODQgMDAg MDAgMDAgCW5vcCAgICBXT1JEIFBUUiBbcmF4K3JheCoxKzB4MF0KICAgIDIzOGU6CTAwIDAwIAoJ cmV0dXJuIChEYXR1bSkgWDsKICAgIDIzOTA6CTQ4IDBmIGJmIDEyICAgICAgICAgIAltb3ZzeCAg cmR4LFdPUkQgUFRSIFtyZHhdCgkJCQlyZXR1cm4gSW50MTZHZXREYXR1bSgqKChjb25zdCBpbnQx NiAqKSBUKSk7CiAgICAyMzk0OgllYiBiNCAgICAgICAgICAgICAgICAJam1wICAgIDIzNGEgPHR0 c19taW5pbWFsX2dldHNvbWVhdHRycysweGFhPgogICAgMjM5NjoJNjYgMmUgMGYgMWYgODQgMDAg MDAgCWNzIG5vcCBXT1JEIFBUUiBbcmF4K3JheCoxKzB4MF0KICAgIDIzOWQ6CTAwIDAwIDAwIAoJ cmV0dXJuIChEYXR1bSkgWDsKICAgIDIzYTA6CTQ4IDBmIGJlIDEyICAgICAgICAgIAltb3ZzeCAg cmR4LEJZVEUgUFRSIFtyZHhdCgkJCQlyZXR1cm4gQ2hhckdldERhdHVtKCooKGNvbnN0IGNoYXIg KikgVCkpOwogICAgMjNhNDoJZWIgYTQgICAgICAgICAgICAgICAgCWptcCAgICAyMzRhIDx0dHNf bWluaW1hbF9nZXRzb21lYXR0cnMrMHhhYT4KICAgIDIzYTY6CTY2IDJlIDBmIDFmIDg0IDAwIDAw IAljcyBub3AgV09SRCBQVFIgW3JheCtyYXgqMSsweDBdCiAgICAyM2FkOgkwMCAwMCAwMCAKCQlv ZmYgPSAqb2ZmcDsKICAgIDIzYjA6CTQxIDhiIDViIDY4ICAgICAgICAgIAltb3YgICAgZWJ4LERX T1JEIFBUUiBbcjExKzB4NjhdCglpZiAodW5saWtlbHkoYXR0bnVtIDwgcmVxbmF0dHMpKQogICAg MjNiNDoJNDkgNjMgZWMgICAgICAgICAgICAgCW1vdnN4ZCByYnAscjEyZAoJZmlyc3ROb25DYWNo ZU9mZnNldEF0dHIgPSBNaW4oZmlyc3ROb25DYWNoZU9mZnNldEF0dHIsIG5hdHRzKTsKICAgIDIz Yjc6CTQ1IDM5IGNhICAgICAgICAgICAgIAljbXAgICAgcjEwZCxyOWQKICAgIDIzYmE6CTRkIDBm IDRmIGQxICAgICAgICAgIAljbW92ZyAgcjEwLHI5CglpZiAoYXR0bnVtIDwgZmlyc3ROb25DYWNo ZU9mZnNldEF0dHIpCiAgICAyM2JlOgk0YyAzOSBkMCAgICAgICAgICAgICAJY21wICAgIHJheCxy MTAKICAgIDIzYzE6CTBmIDgyIGM5IDAxIDAwIDAwICAgIAlqYiAgICAgMjU5MCA8dHRzX21pbmlt YWxfZ2V0c29tZWF0dHJzKzB4MmYwPgoJZm9yICg7IGF0dG51bSA8IGZpcnN0TnVsbEF0dHI7IGF0 dG51bSsrKQogICAgMjNjNzoJNGQgNjMgZDYgICAgICAgICAgICAgCW1vdnN4ZCByMTAscjE0ZAog ICAgMjNjYToJNGMgMzkgZDAgICAgICAgICAgICAgCWNtcCAgICByYXgscjEwCiAgICAyM2NkOgk3 MiA1ZSAgICAgICAgICAgICAgICAJamIgICAgIDI0MmQgPHR0c19taW5pbWFsX2dldHNvbWVhdHRy cysweDE4ZD4KICAgIDIzY2Y6CWU5IDM0IDA1IDAwIDAwICAgICAgIAlqbXAgICAgMjkwOCA8dHRz X21pbmltYWxfZ2V0c29tZWF0dHJzKzB4NjY4PgogICAgMjNkNDoJMGYgMWYgNDAgMDAgICAgICAg ICAgCW5vcCAgICBEV09SRCBQVFIgW3JheCsweDBdCgkJKm9mZiA9IFRZUEVBTElHTihhdHRhbGln bmJ5LCAqb2ZmKTsKICAgIDIzZDg6CThkIDVjIDFlIGZmICAgICAgICAgIAlsZWEgICAgZWJ4LFty c2krcmJ4KjEtMHgxXQogICAgMjNkYzoJZjcgZGUgICAgICAgICAgICAgICAgCW5lZyAgICBlc2kK ICAgIDIzZGU6CTIxIGRlICAgICAgICAgICAgICAgIAlhbmQgICAgZXNpLGVieAoJCSpvZmYgKz0g YXR0bGVuOwogICAgMjNlMDoJNDEgMGYgYmYgZGQgICAgICAgICAgCW1vdnN4ICBlYngscjEzdwoJ CW9mZnNldF9wdHIgPSB0dXBwdHIgKyAqb2ZmOwogICAgMjNlNDoJNDEgODkgZjYgICAgICAgICAg ICAgCW1vdiAgICByMTRkLGVzaQoJCSpvZmYgKz0gYXR0bGVuOwogICAgMjNlNzoJMDEgZjMgICAg ICAgICAgICAgICAgCWFkZCAgICBlYngsZXNpCgkJb2Zmc2V0X3B0ciA9IHR1cHB0ciArICpvZmY7 CiAgICAyM2U5Ogk0ZCAwMSBjNiAgICAgICAgICAgICAJYWRkICAgIHIxNCxyOAoJcmV0dXJuIChE YXR1bSkgKHVpbnRwdHJfdCkgWDsKICAgIDIzZWM6CTRjIDg5IGY2ICAgICAgICAgICAgIAltb3Yg ICAgcnNpLHIxNAoJCWlmIChhdHRieXZhbCkKICAgIDIzZWY6CTgwIDdjIGMyIDI0IDAwICAgICAg IAljbXAgICAgQllURSBQVFIgW3JkeCtyYXgqOCsweDI0XSwweDAKICAgIDIzZjQ6CTc0IDJhICAg ICAgICAgICAgICAgIAlqZSAgICAgMjQyMCA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4MTgw PgoJCQlzd2l0Y2ggKGF0dGxlbikKICAgIDIzZjY6CTY2IDQxIDgzIGZkIDAyICAgICAgIAljbXAg ICAgcjEzdywweDIKICAgIDIzZmI6CTBmIDg0IDBmIDAyIDAwIDAwICAgIAlqZSAgICAgMjYxMCA8 dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4MzcwPgogICAgMjQwMToJNjYgNDEgODMgZmQgMDQg ICAgICAgCWNtcCAgICByMTN3LDB4NAogICAgMjQwNjoJMGYgODQgZjQgMDEgMDAgMDAgICAgCWpl ICAgICAyNjAwIDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnMrMHgzNjA+CiAgICAyNDBjOgk2NiA0 MSA4MyBmZCAwMSAgICAgICAJY21wICAgIHIxM3csMHgxCiAgICAyNDExOgkwZiA4NSBkOSAwMSAw MCAwMCAgICAJam5lICAgIDI1ZjAgPHR0c19taW5pbWFsX2dldHNvbWVhdHRycysweDM1MD4KCXJl dHVybiAoRGF0dW0pIFg7CiAgICAyNDE3Ogk0OSAwZiBiZSAzNiAgICAgICAgICAJbW92c3ggIHJz aSxCWVRFIFBUUiBbcjE0XQogICAgMjQxYjoJMGYgMWYgNDQgMDAgMDAgICAgICAgCW5vcCAgICBE V09SRCBQVFIgW3JheCtyYXgqMSsweDBdCgkJdmFsdWVzW2F0dG51bV0gPSBhbGlnbl9mZXRjaF90 aGVuX2FkZCh0cCwKICAgIDI0MjA6CTQ4IDg5IDM0IGM3ICAgICAgICAgIAltb3YgICAgUVdPUkQg UFRSIFtyZGkrcmF4KjhdLHJzaQoJZm9yICg7IGF0dG51bSA8IGZpcnN0TnVsbEF0dHI7IGF0dG51 bSsrKQogICAgMjQyNDoJNDggODMgYzAgMDEgICAgICAgICAgCWFkZCAgICByYXgsMHgxCiAgICAy NDI4Ogk0YyAzOSBkMCAgICAgICAgICAgICAJY21wICAgIHJheCxyMTAKICAgIDI0MmI6CTc0IDcz ICAgICAgICAgICAgICAgIAlqZSAgICAgMjRhMCA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4 MjAwPgoJCWlzbnVsbFthdHRudW1dID0gZmFsc2U7CiAgICAyNDJkOgljNiAwNCAwMSAwMCAgICAg ICAgICAJbW92ICAgIEJZVEUgUFRSIFtyY3grcmF4KjFdLDB4MAoJCWF0dGxlbiA9IGNhdHRyLT5h dHRsZW47CiAgICAyNDMxOgk0NCAwZiBiNyA2YyBjMiAyMiAgICAJbW92enggIHIxM2QsV09SRCBQ VFIgW3JkeCtyYXgqOCsweDIyXQoJCQkJCQkJCQkJCSAgY2F0dHItPmF0dGFsaWduYnkpOwogICAg MjQzNzoJMGYgYjYgNzQgYzIgMjUgICAgICAgCW1vdnp4ICBlc2ksQllURSBQVFIgW3JkeCtyYXgq OCsweDI1XQoJaWYgKGF0dGxlbiA+IDApCiAgICAyNDNjOgk2NiA0NSA4NSBlZCAgICAgICAgICAJ dGVzdCAgIHIxM3cscjEzdwogICAgMjQ0MDoJN2YgOTYgICAgICAgICAgICAgICAgCWpnICAgICAy M2Q4IDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnMrMHgxMzg+CgkJaWYgKCFWQVJBVFRfSVNfU0hP UlQodHVwcHRyICsgKm9mZikpCiAgICAyNDQyOgk0MSA4OSBkZCAgICAgICAgICAgICAJbW92ICAg IHIxM2QsZWJ4CiAgICAyNDQ1Ogk0ZCAwMSBjNSAgICAgICAgICAgICAJYWRkICAgIHIxMyxyOAog ICAgMjQ0ODoJNDEgZjYgNDUgMDAgMDEgICAgICAgCXRlc3QgICBCWVRFIFBUUiBbcjEzKzB4MF0s MHgxCiAgICAyNDRkOgk3NSAwZSAgICAgICAgICAgICAgICAJam5lICAgIDI0NWQgPHR0c19taW5p bWFsX2dldHNvbWVhdHRycysweDFiZD4KCQkJKm9mZiA9IFRZUEVBTElHTihhdHRhbGlnbmJ5LCAq b2ZmKTsKICAgIDI0NGY6CThkIDVjIDFlIGZmICAgICAgICAgIAlsZWEgICAgZWJ4LFtyc2krcmJ4 KjEtMHgxXQogICAgMjQ1MzoJZjcgZGUgICAgICAgICAgICAgICAgCW5lZyAgICBlc2kKICAgIDI0 NTU6CTIxIGYzICAgICAgICAgICAgICAgIAlhbmQgICAgZWJ4LGVzaQoJCXJlcyA9IFBvaW50ZXJH ZXREYXR1bSh0dXBwdHIgKyAqb2ZmKTsKICAgIDI0NTc6CTQxIDg5IGRkICAgICAgICAgICAgIAlt b3YgICAgcjEzZCxlYngKICAgIDI0NWE6CTRkIDAxIGM1ICAgICAgICAgICAgIAlhZGQgICAgcjEz LHI4CglpZiAoVkFSQVRUX0lTXzFCX0UoUFRSKSkKICAgIDI0NWQ6CTQ1IDBmIGI2IDc1IDAwICAg ICAgIAltb3Z6eCAgcjE0ZCxCWVRFIFBUUiBbcjEzKzB4MF0KCXJldHVybiAoRGF0dW0pICh1aW50 cHRyX3QpIFg7CiAgICAyNDYyOgk0YyA4OSBlZSAgICAgICAgICAgICAJbW92ICAgIHJzaSxyMTMK ICAgIDI0NjU6CTQxIDgwIGZlIDAxICAgICAgICAgIAljbXAgICAgcjE0YiwweDEKICAgIDI0Njk6 CTBmIDg0IDc5IDAzIDAwIDAwICAgIAlqZSAgICAgMjdlOCA8dHRzX21pbmltYWxfZ2V0c29tZWF0 dHJzKzB4NTQ4PgoJZWxzZSBpZiAoVkFSQVRUX0lTXzFCKFBUUikpCiAgICAyNDZmOgk0MSBmNiBj NiAwMSAgICAgICAgICAJdGVzdCAgIHIxNGIsMHgxCiAgICAyNDczOgkwZiA4NSBhNyAwMiAwMCAw MCAgICAJam5lICAgIDI3MjAgPHR0c19taW5pbWFsX2dldHNvbWVhdHRycysweDQ4MD4KCQlyZXR1 cm4gVkFSU0laRV80QihQVFIpOwogICAgMjQ3OToJNDUgOGIgNzUgMDAgICAgICAgICAgCW1vdiAg ICByMTRkLERXT1JEIFBUUiBbcjEzKzB4MF0KICAgIDI0N2Q6CTQxIGMxIGVlIDAyICAgICAgICAg IAlzaHIgICAgcjE0ZCwweDIKCQl2YWx1ZXNbYXR0bnVtXSA9IGFsaWduX2ZldGNoX3RoZW5fYWRk KHRwLAogICAgMjQ4MToJNDggODkgMzQgYzcgICAgICAgICAgCW1vdiAgICBRV09SRCBQVFIgW3Jk aStyYXgqOF0scnNpCglmb3IgKDsgYXR0bnVtIDwgZmlyc3ROdWxsQXR0cjsgYXR0bnVtKyspCiAg ICAyNDg1Ogk0OCA4MyBjMCAwMSAgICAgICAgICAJYWRkICAgIHJheCwweDEKCQkqb2ZmICs9IFZB UlNJWkVfQU5ZKERhdHVtR2V0UG9pbnRlcihyZXMpKTsKICAgIDI0ODk6CTQ0IDAxIGYzICAgICAg ICAgICAgIAlhZGQgICAgZWJ4LHIxNGQKICAgIDI0OGM6CTRjIDM5IGQwICAgICAgICAgICAgIAlj bXAgICAgcmF4LHIxMAogICAgMjQ4ZjoJNzUgOWMgICAgICAgICAgICAgICAgCWpuZSAgICAyNDJk IDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnMrMHgxOGQ+CiAgICAyNDkxOgkwZiAxZiA0MCAwMCAg ICAgICAgICAJbm9wICAgIERXT1JEIFBUUiBbcmF4KzB4MF0KICAgIDI0OTU6CTY2IDY2IDJlIDBm IDFmIDg0IDAwIAlkYXRhMTYgY3Mgbm9wIFdPUkQgUFRSIFtyYXgrcmF4KjErMHgwXQogICAgMjQ5 YzoJMDAgMDAgMDAgMDAgCglmb3IgKDsgYXR0bnVtIDwgbmF0dHM7IGF0dG51bSsrKQogICAgMjRh MDoJNGQgMzkgY2EgICAgICAgICAgICAgCWNtcCAgICByMTAscjkKICAgIDI0YTM6CTBmIDgzIDY3 IDA0IDAwIDAwICAgIAlqYWUgICAgMjkxMCA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4Njcw PgogICAgMjRhOToJMGYgMWYgODAgMDAgMDAgMDAgMDAgCW5vcCAgICBEV09SRCBQVFIgW3JheCsw eDBdCgkJaWYgKGlzbnVsbFthdHRudW1dKQogICAgMjRiMDoJMzEgYzAgICAgICAgICAgICAgICAg CXhvciAgICBlYXgsZWF4CiAgICAyNGIyOgk0MiA4MCAzYyAxMSAwMCAgICAgICAJY21wICAgIEJZ VEUgUFRSIFtyY3grcjEwKjFdLDB4MAogICAgMjRiNzoJNzUgNTcgICAgICAgICAgICAgICAgCWpu ZSAgICAyNTEwIDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnMrMHgyNzA+CgkJYXR0bGVuID0gY2F0 dHItPmF0dGxlbjsKICAgIDI0Yjk6CTQyIDBmIGI3IDc0IGQyIDIyICAgIAltb3Z6eCAgZXNpLFdP UkQgUFRSIFtyZHgrcjEwKjgrMHgyMl0KCQkJCQkJCQkJCQkgIGNhdHRyLT5hdHRhbGlnbmJ5KTsK ICAgIDI0YmY6CTQyIDBmIGI2IDQ0IGQyIDI1ICAgIAltb3Z6eCAgZWF4LEJZVEUgUFRSIFtyZHgr cjEwKjgrMHgyNV0KCWlmIChhdHRsZW4gPiAwKQogICAgMjRjNToJNjYgODUgZjYgICAgICAgICAg ICAgCXRlc3QgICBzaSxzaQogICAgMjRjODoJMGYgOGUgNTIgMDEgMDAgMDAgICAgCWpsZSAgICAy NjIwIDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnMrMHgzODA+CgkJKm9mZiA9IFRZUEVBTElHTihh dHRhbGlnbmJ5LCAqb2ZmKTsKICAgIDI0Y2U6CThkIDVjIDE4IGZmICAgICAgICAgIAlsZWEgICAg ZWJ4LFtyYXgrcmJ4KjEtMHgxXQogICAgMjRkMjoJZjcgZDggICAgICAgICAgICAgICAgCW5lZyAg ICBlYXgKICAgIDI0ZDQ6CTIxIGQ4ICAgICAgICAgICAgICAgIAlhbmQgICAgZWF4LGVieAoJCSpv ZmYgKz0gYXR0bGVuOwogICAgMjRkNjoJMGYgYmYgZGUgICAgICAgICAgICAgCW1vdnN4ICBlYngs c2kKCQlvZmZzZXRfcHRyID0gdHVwcHRyICsgKm9mZjsKICAgIDI0ZDk6CTQxIDg5IGM1ICAgICAg ICAgICAgIAltb3YgICAgcjEzZCxlYXgKCQkqb2ZmICs9IGF0dGxlbjsKICAgIDI0ZGM6CTAxIGMz ICAgICAgICAgICAgICAgIAlhZGQgICAgZWJ4LGVheAoJCW9mZnNldF9wdHIgPSB0dXBwdHIgKyAq b2ZmOwogICAgMjRkZToJNGQgMDEgYzUgICAgICAgICAgICAgCWFkZCAgICByMTMscjgKICAgIDI0 ZTE6CTRjIDg5IGU4ICAgICAgICAgICAgIAltb3YgICAgcmF4LHIxMwoJCWlmIChhdHRieXZhbCkK ICAgIDI0ZTQ6CTQyIDgwIDdjIGQyIDI0IDAwICAgIAljbXAgICAgQllURSBQVFIgW3JkeCtyMTAq OCsweDI0XSwweDAKICAgIDI0ZWE6CTc0IDI0ICAgICAgICAgICAgICAgIAlqZSAgICAgMjUxMCA8 dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4MjcwPgoJCQlzd2l0Y2ggKGF0dGxlbikKICAgIDI0 ZWM6CTY2IDgzIGZlIDAyICAgICAgICAgIAljbXAgICAgc2ksMHgyCiAgICAyNGYwOgkwZiA4NCBk MiAwMiAwMCAwMCAgICAJamUgICAgIDI3YzggPHR0c19taW5pbWFsX2dldHNvbWVhdHRycysweDUy OD4KICAgIDI0ZjY6CTY2IDgzIGZlIDA0ICAgICAgICAgIAljbXAgICAgc2ksMHg0CiAgICAyNGZh OgkwZiA4NCBhOCAwMiAwMCAwMCAgICAJamUgICAgIDI3YTggPHR0c19taW5pbWFsX2dldHNvbWVh dHRycysweDUwOD4KICAgIDI1MDA6CTY2IDgzIGZlIDAxICAgICAgICAgIAljbXAgICAgc2ksMHgx CiAgICAyNTA0OgkwZiA4NCBmNiAwMSAwMCAwMCAgICAJamUgICAgIDI3MDAgPHR0c19taW5pbWFs X2dldHNvbWVhdHRycysweDQ2MD4KCXJldHVybiAoRGF0dW0pIFg7CiAgICAyNTBhOgk0OSA4YiA0 NSAwMCAgICAgICAgICAJbW92ICAgIHJheCxRV09SRCBQVFIgW3IxMysweDBdCiAgICAyNTBlOgk2 NiA5MCAgICAgICAgICAgICAgICAJeGNoZyAgIGF4LGF4CgkJCXZhbHVlc1thdHRudW1dID0gKERh dHVtKSAwOwogICAgMjUxMDoJNGEgODkgMDQgZDcgICAgICAgICAgCW1vdiAgICBRV09SRCBQVFIg W3JkaStyMTAqOF0scmF4Cglmb3IgKDsgYXR0bnVtIDwgbmF0dHM7IGF0dG51bSsrKQogICAgMjUx NDoJNDkgODMgYzIgMDEgICAgICAgICAgCWFkZCAgICByMTAsMHgxCiAgICAyNTE4Ogk0ZCAzOSBj YSAgICAgICAgICAgICAJY21wICAgIHIxMCxyOQogICAgMjUxYjoJNzUgOTMgICAgICAgICAgICAg ICAgCWpuZSAgICAyNGIwIDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnMrMHgyMTA+CglpZiAodW5s aWtlbHkoYXR0bnVtIDwgcmVxbmF0dHMpKQogICAgMjUxZDoJNDkgMzkgZTkgICAgICAgICAgICAg CWNtcCAgICByOSxyYnAKICAgIDI1MjA6CTBmIDgyIGZhIDAzIDAwIDAwICAgIAlqYiAgICAgMjky MCA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4NjgwPgoJKm9mZnAgPSBvZmY7CiAgICAyNTI2 Ogk0MSA4OSA1YiA2OCAgICAgICAgICAJbW92ICAgIERXT1JEIFBUUiBbcjExKzB4NjhdLGVieAp9 CiAgICAyNTJhOgk1YiAgICAgICAgICAgICAgICAgICAJcG9wICAgIHJieAogICAgMjUyYjoJNWQg ICAgICAgICAgICAgICAgICAgCXBvcCAgICByYnAKICAgIDI1MmM6CTQxIDVjICAgICAgICAgICAg ICAgIAlwb3AgICAgcjEyCiAgICAyNTJlOgk0MSA1ZCAgICAgICAgICAgICAgICAJcG9wICAgIHIx MwogICAgMjUzMDoJNDEgNWUgICAgICAgICAgICAgICAgCXBvcCAgICByMTQKICAgIDI1MzI6CTQx IDVmICAgICAgICAgICAgICAgIAlwb3AgICAgcjE1CiAgICAyNTM0OgljMyAgICAgICAgICAgICAg ICAgICAJcmV0CiAgICAyNTM1OgkwZiAxZiAwMCAgICAgICAgICAgICAJbm9wICAgIERXT1JEIFBU UiBbcmF4XQoJCXN3aXRjaCAoYXR0bGVuKQogICAgMjUzODoJNjYgODMgZmIgMDEgICAgICAgICAg CWNtcCAgICBieCwweDEKICAgIDI1M2M6CTBmIDg0IDJlIDAxIDAwIDAwICAgIAlqZSAgICAgMjY3 MCA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4M2QwPgogICAgMjU0MjoJNDggOGIgMWUgICAg ICAgICAgICAgCW1vdiAgICByYngsUVdPUkQgUFRSIFtyc2ldCiAgICAyNTQ1OgkwZiAxZiA0MCAw MCAgICAgICAgICAJbm9wICAgIERXT1JEIFBUUiBbcmF4KzB4MF0KICAgIDI1NDk6CTY2IDY2IDJl IDBmIDFmIDg0IDAwIAlkYXRhMTYgY3Mgbm9wIFdPUkQgUFRSIFtyYXgrcmF4KjErMHgwXQogICAg MjU1MDoJMDAgMDAgMDAgMDAgCiAgICAyNTU0Ogk2NiA2NiAyZSAwZiAxZiA4NCAwMCAJZGF0YTE2 IGNzIG5vcCBXT1JEIFBUUiBbcmF4K3JheCoxKzB4MF0KICAgIDI1NWI6CTAwIDAwIDAwIDAwIAog ICAgMjU1ZjoJNjYgNjYgMmUgMGYgMWYgODQgMDAgCWRhdGExNiBjcyBub3AgV09SRCBQVFIgW3Jh eCtyYXgqMSsweDBdCiAgICAyNTY2OgkwMCAwMCAwMCAwMCAKICAgIDI1NmE6CTY2IDY2IDJlIDBm IDFmIDg0IDAwIAlkYXRhMTYgY3Mgbm9wIFdPUkQgUFRSIFtyYXgrcmF4KjErMHgwXQogICAgMjU3 MToJMDAgMDAgMDAgMDAgCiAgICAyNTc1Ogk2NiA2NiAyZSAwZiAxZiA4NCAwMCAJZGF0YTE2IGNz IG5vcCBXT1JEIFBUUiBbcmF4K3JheCoxKzB4MF0KICAgIDI1N2M6CTAwIDAwIDAwIDAwIAoJCX0g d2hpbGUgKCsrYXR0bnVtIDwgZmlyc3ROb25DYWNoZU9mZnNldEF0dHIpOwogICAgMjU4MDoJNDgg OGQgNzAgMDEgICAgICAgICAgCWxlYSAgICByc2ksW3JheCsweDFdCgkJCXZhbHVlc1thdHRudW1d ID0gZmV0Y2hfYXR0X25vZXJyKHRwICsgb2ZmLAogICAgMjU4NDoJNDggODkgMWMgYzcgICAgICAg ICAgCW1vdiAgICBRV09SRCBQVFIgW3JkaStyYXgqOF0scmJ4CgkJfSB3aGlsZSAoKythdHRudW0g PCBmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0cik7CiAgICAyNTg4Ogk0OSAzOSBmMiAgICAgICAgICAg ICAJY21wICAgIHIxMCxyc2kKICAgIDI1OGI6CTc0IDUzICAgICAgICAgICAgICAgIAlqZSAgICAg MjVlMCA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4MzQwPgogICAgMjU4ZDoJNDggODkgZjAg ICAgICAgICAgICAgCW1vdiAgICByYXgscnNpCgkJCWlzbnVsbFthdHRudW1dID0gZmFsc2U7CiAg ICAyNTkwOgljNiAwNCAwMSAwMCAgICAgICAgICAJbW92ICAgIEJZVEUgUFRSIFtyY3grcmF4KjFd LDB4MAoJCQlvZmYgPSBjYXR0ci0+YXR0Y2FjaGVvZmY7CiAgICAyNTk0OgkwZiBiZiA3NCBjMiAy MCAgICAgICAJbW92c3ggIGVzaSxXT1JEIFBUUiBbcmR4K3JheCo4KzB4MjBdCiAgICAyNTk5Ogk0 OSA4OSBmNSAgICAgICAgICAgICAJbW92ICAgIHIxMyxyc2kKCQkJdmFsdWVzW2F0dG51bV0gPSBm ZXRjaF9hdHRfbm9lcnIodHAgKyBvZmYsCiAgICAyNTljOgk0YyAwMSBjNiAgICAgICAgICAgICAJ YWRkICAgIHJzaSxyOAoJcmV0dXJuIChEYXR1bSkgKHVpbnRwdHJfdCkgWDsKICAgIDI1OWY6CTQ4 IDg5IGYzICAgICAgICAgICAgIAltb3YgICAgcmJ4LHJzaQoJaWYgKGF0dGJ5dmFsKQogICAgMjVh MjoJODAgN2MgYzIgMjQgMDAgICAgICAgCWNtcCAgICBCWVRFIFBUUiBbcmR4K3JheCo4KzB4MjRd LDB4MAogICAgMjVhNzoJNzQgZDcgICAgICAgICAgICAgICAgCWplICAgICAyNTgwIDx0dHNfbWlu aW1hbF9nZXRzb21lYXR0cnMrMHgyZTA+CgkJCQkJCQkJCQkJIGNhdHRyLT5hdHRsZW4pOwogICAg MjVhOToJMGYgYjcgNWMgYzIgMjIgICAgICAgCW1vdnp4ICBlYngsV09SRCBQVFIgW3JkeCtyYXgq OCsweDIyXQoJCXN3aXRjaCAoYXR0bGVuKQogICAgMjVhZToJNjYgODMgZmIgMDIgICAgICAgICAg CWNtcCAgICBieCwweDIKICAgIDI1YjI6CTBmIDg0IGM4IDAwIDAwIDAwICAgIAlqZSAgICAgMjY4 MCA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4M2UwPgogICAgMjViODoJNjYgODMgZmIgMDQg ICAgICAgICAgCWNtcCAgICBieCwweDQKICAgIDI1YmM6CTBmIDg1IDc2IGZmIGZmIGZmICAgIAlq bmUgICAgMjUzOCA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4Mjk4PgoJcmV0dXJuIChEYXR1 bSkgWDsKICAgIDI1YzI6CTQ4IDYzIDFlICAgICAgICAgICAgIAltb3ZzeGQgcmJ4LERXT1JEIFBU UiBbcnNpXQoJCX0gd2hpbGUgKCsrYXR0bnVtIDwgZmlyc3ROb25DYWNoZU9mZnNldEF0dHIpOwog ICAgMjVjNToJNDggOGQgNzAgMDEgICAgICAgICAgCWxlYSAgICByc2ksW3JheCsweDFdCgkJCXZh bHVlc1thdHRudW1dID0gZmV0Y2hfYXR0X25vZXJyKHRwICsgb2ZmLAogICAgMjVjOToJNDggODkg MWMgYzcgICAgICAgICAgCW1vdiAgICBRV09SRCBQVFIgW3JkaStyYXgqOF0scmJ4CgkJfSB3aGls ZSAoKythdHRudW0gPCBmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0cik7CiAgICAyNWNkOgk0OSAzOSBm MiAgICAgICAgICAgICAJY21wICAgIHIxMCxyc2kKICAgIDI1ZDA6CTc1IGJiICAgICAgICAgICAg ICAgIAlqbmUgICAgMjU4ZCA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4MmVkPgogICAgMjVk MjoJMGYgMWYgMDAgICAgICAgICAgICAgCW5vcCAgICBEV09SRCBQVFIgW3JheF0KICAgIDI1ZDU6 CTY2IDY2IDJlIDBmIDFmIDg0IDAwIAlkYXRhMTYgY3Mgbm9wIFdPUkQgUFRSIFtyYXgrcmF4KjEr MHgwXQogICAgMjVkYzoJMDAgMDAgMDAgMDAgCgkJb2ZmICs9IGNhdHRyLT5hdHRsZW47CiAgICAy NWUwOgkwZiBiZiA1YyBjMiAyMiAgICAgICAJbW92c3ggIGVieCxXT1JEIFBUUiBbcmR4K3JheCo4 KzB4MjJdCgkJfSB3aGlsZSAoKythdHRudW0gPCBmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0cik7CiAg ICAyNWU1Ogk0YyA4OSBkMCAgICAgICAgICAgICAJbW92ICAgIHJheCxyMTAKCQlvZmYgKz0gY2F0 dHItPmF0dGxlbjsKICAgIDI1ZTg6CTQ0IDAxIGViICAgICAgICAgICAgIAlhZGQgICAgZWJ4LHIx M2QKICAgIDI1ZWI6CWU5IGQ3IGZkIGZmIGZmICAgICAgIAlqbXAgICAgMjNjNyA8dHRzX21pbmlt YWxfZ2V0c29tZWF0dHJzKzB4MTI3PgoJcmV0dXJuIChEYXR1bSkgWDsKICAgIDI1ZjA6CTQ5IDhi IDM2ICAgICAgICAgICAgIAltb3YgICAgcnNpLFFXT1JEIFBUUiBbcjE0XQoJCQkJCXJldHVybiBJ bnQ2NEdldERhdHVtKCooKGNvbnN0IGludDY0ICopIG9mZnNldF9wdHIpKTsKICAgIDI1ZjM6CWU5 IDI4IGZlIGZmIGZmICAgICAgIAlqbXAgICAgMjQyMCA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJz KzB4MTgwPgogICAgMjVmODoJMGYgMWYgODQgMDAgMDAgMDAgMDAgCW5vcCAgICBEV09SRCBQVFIg W3JheCtyYXgqMSsweDBdCiAgICAyNWZmOgkwMCAKCXJldHVybiAoRGF0dW0pIFg7CiAgICAyNjAw Ogk0OSA2MyAzNiAgICAgICAgICAgICAJbW92c3hkIHJzaSxEV09SRCBQVFIgW3IxNF0KCQkJCQly ZXR1cm4gSW50MzJHZXREYXR1bSgqKChjb25zdCBpbnQzMiAqKSBvZmZzZXRfcHRyKSk7CiAgICAy NjAzOgllOSAxOCBmZSBmZiBmZiAgICAgICAJam1wICAgIDI0MjAgPHR0c19taW5pbWFsX2dldHNv bWVhdHRycysweDE4MD4KICAgIDI2MDg6CTBmIDFmIDg0IDAwIDAwIDAwIDAwIAlub3AgICAgRFdP UkQgUFRSIFtyYXgrcmF4KjErMHgwXQogICAgMjYwZjoJMDAgCglyZXR1cm4gKERhdHVtKSBYOwog ICAgMjYxMDoJNDkgMGYgYmYgMzYgICAgICAgICAgCW1vdnN4ICByc2ksV09SRCBQVFIgW3IxNF0K CQkJCQlyZXR1cm4gSW50MTZHZXREYXR1bSgqKChjb25zdCBpbnQxNiAqKSBvZmZzZXRfcHRyKSk7 CiAgICAyNjE0OgllOSAwNyBmZSBmZiBmZiAgICAgICAJam1wICAgIDI0MjAgPHR0c19taW5pbWFs X2dldHNvbWVhdHRycysweDE4MD4KICAgIDI2MTk6CTBmIDFmIDgwIDAwIDAwIDAwIDAwIAlub3Ag ICAgRFdPUkQgUFRSIFtyYXgrMHgwXQoJCWlmICghVkFSQVRUX0lTX1NIT1JUKHR1cHB0ciArICpv ZmYpKQogICAgMjYyMDoJODkgZGUgICAgICAgICAgICAgICAgCW1vdiAgICBlc2ksZWJ4CiAgICAy NjIyOgk0YyAwMSBjNiAgICAgICAgICAgICAJYWRkICAgIHJzaSxyOAogICAgMjYyNToJZjYgMDYg MDEgICAgICAgICAgICAgCXRlc3QgICBCWVRFIFBUUiBbcnNpXSwweDEKICAgIDI2Mjg6CTBmIDg0 IDAyIDAxIDAwIDAwICAgIAlqZSAgICAgMjczMCA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4 NDkwPgoJaWYgKFZBUkFUVF9JU18xQl9FKFBUUikpCiAgICAyNjJlOgk0NCAwZiBiNiAyZSAgICAg ICAgICAJbW92enggIHIxM2QsQllURSBQVFIgW3JzaV0KCXJldHVybiAoRGF0dW0pICh1aW50cHRy X3QpIFg7CiAgICAyNjMyOgk0OCA4OSBmMCAgICAgICAgICAgICAJbW92ICAgIHJheCxyc2kKICAg IDI2MzU6CTQxIDgwIGZkIDAxICAgICAgICAgIAljbXAgICAgcjEzYiwweDEKICAgIDI2Mzk6CTBm IDg0IDBmIDAxIDAwIDAwICAgIAlqZSAgICAgMjc0ZSA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJz KzB4NGFlPgoJZWxzZSBpZiAoVkFSQVRUX0lTXzFCKFBUUikpCiAgICAyNjNmOgk0MSBmNiBjNSAw MSAgICAgICAgICAJdGVzdCAgIHIxM2IsMHgxCiAgICAyNjQzOgkwZiA4NCAzZiAwMSAwMCAwMCAg ICAJamUgICAgIDI3ODggPHR0c19taW5pbWFsX2dldHNvbWVhdHRycysweDRlOD4KCQlyZXR1cm4g VkFSU0laRV8xQihQVFIpOwogICAgMjY0OToJNDEgZDAgZWQgICAgICAgICAgICAgCXNociAgICBy MTNiLDEKCQkqb2ZmICs9IFZBUlNJWkVfQU5ZKERhdHVtR2V0UG9pbnRlcihyZXMpKTsKICAgIDI2 NGM6CTQ1IDBmIGI2IGVkICAgICAgICAgIAltb3Z6eCAgcjEzZCxyMTNiCgkJCXZhbHVlc1thdHRu dW1dID0gKERhdHVtKSAwOwogICAgMjY1MDoJNGEgODkgMDQgZDcgICAgICAgICAgCW1vdiAgICBR V09SRCBQVFIgW3JkaStyMTAqOF0scmF4Cglmb3IgKDsgYXR0bnVtIDwgbmF0dHM7IGF0dG51bSsr KQogICAgMjY1NDoJNDkgODMgYzIgMDEgICAgICAgICAgCWFkZCAgICByMTAsMHgxCiAgICAyNjU4 Ogk0NCAwMSBlYiAgICAgICAgICAgICAJYWRkICAgIGVieCxyMTNkCiAgICAyNjViOgk0ZCAzOSBj YSAgICAgICAgICAgICAJY21wICAgIHIxMCxyOQogICAgMjY1ZToJMGYgODUgNGMgZmUgZmYgZmYg ICAgCWpuZSAgICAyNGIwIDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnMrMHgyMTA+CiAgICAyNjY0 OgllOSBiNCBmZSBmZiBmZiAgICAgICAJam1wICAgIDI1MWQgPHR0c19taW5pbWFsX2dldHNvbWVh dHRycysweDI3ZD4KICAgIDI2Njk6CTBmIDFmIDgwIDAwIDAwIDAwIDAwIAlub3AgICAgRFdPUkQg UFRSIFtyYXgrMHgwXQoJcmV0dXJuIChEYXR1bSkgWDsKICAgIDI2NzA6CTQ4IDBmIGJlIDFlICAg ICAgICAgIAltb3ZzeCAgcmJ4LEJZVEUgUFRSIFtyc2ldCgkJCQlyZXR1cm4gQ2hhckdldERhdHVt KCooKGNvbnN0IGNoYXIgKikgVCkpOwogICAgMjY3NDoJZTkgMDcgZmYgZmYgZmYgICAgICAgCWpt cCAgICAyNTgwIDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnMrMHgyZTA+CiAgICAyNjc5OgkwZiAx ZiA4MCAwMCAwMCAwMCAwMCAJbm9wICAgIERXT1JEIFBUUiBbcmF4KzB4MF0KCXJldHVybiAoRGF0 dW0pIFg7CiAgICAyNjgwOgk0OCAwZiBiZiAxZSAgICAgICAgICAJbW92c3ggIHJieCxXT1JEIFBU UiBbcnNpXQoJCQkJcmV0dXJuIEludDE2R2V0RGF0dW0oKigoY29uc3QgaW50MTYgKikgVCkpOwog ICAgMjY4NDoJZTkgZjcgZmUgZmYgZmYgICAgICAgCWptcCAgICAyNTgwIDx0dHNfbWluaW1hbF9n ZXRzb21lYXR0cnMrMHgyZTA+CiAgICAyNjg5OgkwZiAxZiA4MCAwMCAwMCAwMCAwMCAJbm9wICAg IERXT1JEIFBUUiBbcmF4KzB4MF0KCQlvZmYgKz0gY2F0dHItPmF0dGxlbjsKICAgIDI2OTA6CTQx IDBmIGJmIDc1IDAyICAgICAgIAltb3ZzeCAgZXNpLFdPUkQgUFRSIFtyMTMrMHgyXQoJCWlmIChh dHRudW0gPT0gcmVxbmF0dHMpCiAgICAyNjk1Ogk0OSA2MyBlYyAgICAgICAgICAgICAJbW92c3hk IHJicCxyMTJkCgkJb2ZmICs9IGNhdHRyLT5hdHRsZW47CiAgICAyNjk4Ogk0OCA4YiA1NCAyNCBm MCAgICAgICAJbW92ICAgIHJkeCxRV09SRCBQVFIgW3JzcC0weDEwXQogICAgMjY5ZDoJMDEgZjMg ICAgICAgICAgICAgICAgCWFkZCAgICBlYngsZXNpCgkJaWYgKGF0dG51bSA9PSByZXFuYXR0cykK ICAgIDI2OWY6CTQ4IDM5IGU4ICAgICAgICAgICAgIAljbXAgICAgcmF4LHJicAogICAgMjZhMjoJ MGYgODUgMGYgZmQgZmYgZmYgICAgCWpuZSAgICAyM2I3IDx0dHNfbWluaW1hbF9nZXRzb21lYXR0 cnMrMHgxMTc+Cgkqb2ZmcCA9IG9mZjsKICAgIDI2YTg6CTQxIDg5IDViIDY4ICAgICAgICAgIAlt b3YgICAgRFdPUkQgUFRSIFtyMTErMHg2OF0sZWJ4Cn0KICAgIDI2YWM6CTViICAgICAgICAgICAg ICAgICAgIAlwb3AgICAgcmJ4CiAgICAyNmFkOgk1ZCAgICAgICAgICAgICAgICAgICAJcG9wICAg IHJicAogICAgMjZhZToJNDEgNWMgICAgICAgICAgICAgICAgCXBvcCAgICByMTIKICAgIDI2YjA6 CTQxIDVkICAgICAgICAgICAgICAgIAlwb3AgICAgcjEzCiAgICAyNmIyOgk0MSA1ZSAgICAgICAg ICAgICAgICAJcG9wICAgIHIxNAogICAgMjZiNDoJNDEgNWYgICAgICAgICAgICAgICAgCXBvcCAg ICByMTUKICAgIDI2YjY6CWMzICAgICAgICAgICAgICAgICAgIAlyZXQKICAgIDI2Yjc6CTY2IDBm IDFmIDg0IDAwIDAwIDAwIAlub3AgICAgV09SRCBQVFIgW3JheCtyYXgqMSsweDBdCiAgICAyNmJl OgkwMCAwMCAKCQl0cCA9IChjaGFyICopIHR1cCArIE1BWEFMSUdOKG9mZnNldG9mKEhlYXBUdXBs ZUhlYWRlckRhdGEsIHRfYml0cykpOwogICAgMjZjMDoJNGMgOGQgNDMgMTggICAgICAgICAgCWxl YSAgICByOCxbcmJ4KzB4MThdCgkJaWYgKHJlcW5hdHRzID4gZmlyc3ROb25HdWFyYW50ZWVkQXR0 cikKICAgIDI2YzQ6CTQxIDM5IGM0ICAgICAgICAgICAgIAljbXAgICAgcjEyZCxlYXgKICAgIDI2 Yzc6CTBmIDhlIGNiIDAwIDAwIDAwICAgIAlqbGUgICAgMjc5OCA8dHRzX21pbmltYWxfZ2V0c29t ZWF0dHJzKzB4NGY4PgoJCQluYXR0cyA9IE1pbihIZWFwVHVwbGVIZWFkZXJHZXROYXR0cyh0dXAp LCByZXFuYXR0cyk7CiAgICAyNmNkOgkwZiBiNyA0MyAxMiAgICAgICAgICAJbW92enggIGVheCxX T1JEIFBUUiBbcmJ4KzB4MTJdCiAgICAyNmQxOgkyNSBmZiAwNyAwMCAwMCAgICAgICAJYW5kICAg IGVheCwweDdmZgogICAgMjZkNjoJNDQgMzkgZTAgICAgICAgICAgICAgCWNtcCAgICBlYXgscjEy ZAogICAgMjZkOToJNDEgMGYgNGYgYzQgICAgICAgICAgCWNtb3ZnICBlYXgscjEyZAogICAgMjZk ZDoJNDEgODkgYzYgICAgICAgICAgICAgCW1vdiAgICByMTRkLGVheAogICAgMjZlMDoJNGMgNjMg YzggICAgICAgICAgICAgCW1vdnN4ZCByOSxlYXgKICAgIDI2ZTM6CWU5IDM2IGZjIGZmIGZmICAg ICAgIAlqbXAgICAgMjMxZSA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4N2U+CiAgICAyNmU4 OgkwZiAxZiA4NCAwMCAwMCAwMCAwMCAJbm9wICAgIERXT1JEIFBUUiBbcmF4K3JheCoxKzB4MF0K ICAgIDI2ZWY6CTAwIAogICAgMjZmMDoJMzEgZWQgICAgICAgICAgICAgICAgCXhvciAgICBlYnAs ZWJwCgkJZmlyc3ROb25HdWFyYW50ZWVkQXR0ciA9IDA7CiAgICAyNmYyOgkzMSBjMCAgICAgICAg ICAgICAgICAJeG9yICAgIGVheCxlYXgKICAgIDI2ZjQ6CWU5IGUyIGZiIGZmIGZmICAgICAgIAlq bXAgICAgMjJkYiA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4M2I+CiAgICAyNmY5OgkwZiAx ZiA4MCAwMCAwMCAwMCAwMCAJbm9wICAgIERXT1JEIFBUUiBbcmF4KzB4MF0KCXJldHVybiAoRGF0 dW0pIFg7CiAgICAyNzAwOgk0OSAwZiBiZSA0NSAwMCAgICAgICAJbW92c3ggIHJheCxCWVRFIFBU UiBbcjEzKzB4MF0KCQkJdmFsdWVzW2F0dG51bV0gPSAoRGF0dW0pIDA7CiAgICAyNzA1Ogk0YSA4 OSAwNCBkNyAgICAgICAgICAJbW92ICAgIFFXT1JEIFBUUiBbcmRpK3IxMCo4XSxyYXgKCWZvciAo OyBhdHRudW0gPCBuYXR0czsgYXR0bnVtKyspCiAgICAyNzA5Ogk0OSA4MyBjMiAwMSAgICAgICAg ICAJYWRkICAgIHIxMCwweDEKICAgIDI3MGQ6CTRkIDM5IGNhICAgICAgICAgICAgIAljbXAgICAg cjEwLHI5CiAgICAyNzEwOgkwZiA4NSA5YSBmZCBmZiBmZiAgICAJam5lICAgIDI0YjAgPHR0c19t aW5pbWFsX2dldHNvbWVhdHRycysweDIxMD4KICAgIDI3MTY6CWU5IDAyIGZlIGZmIGZmICAgICAg IAlqbXAgICAgMjUxZCA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4MjdkPgogICAgMjcxYjoJ MGYgMWYgNDQgMDAgMDAgICAgICAgCW5vcCAgICBEV09SRCBQVFIgW3JheCtyYXgqMSsweDBdCiAg ICAyNzIwOgk0MSBkMCBlZSAgICAgICAgICAgICAJc2hyICAgIHIxNGIsMQoJCSpvZmYgKz0gVkFS U0laRV9BTlkoRGF0dW1HZXRQb2ludGVyKHJlcykpOwogICAgMjcyMzoJNDUgMGYgYjYgZjYgICAg ICAgICAgCW1vdnp4ICByMTRkLHIxNGIKICAgIDI3Mjc6CWU5IDU1IGZkIGZmIGZmICAgICAgIAlq bXAgICAgMjQ4MSA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4MWUxPgogICAgMjcyYzoJMGYg MWYgNDAgMDAgICAgICAgICAgCW5vcCAgICBEV09SRCBQVFIgW3JheCsweDBdCgkJCSpvZmYgPSBU WVBFQUxJR04oYXR0YWxpZ25ieSwgKm9mZik7CiAgICAyNzMwOgk4ZCA1YyAxOCBmZiAgICAgICAg ICAJbGVhICAgIGVieCxbcmF4K3JieCoxLTB4MV0KICAgIDI3MzQ6CWY3IGQ4ICAgICAgICAgICAg ICAgIAluZWcgICAgZWF4CiAgICAyNzM2OgkyMSBjMyAgICAgICAgICAgICAgICAJYW5kICAgIGVi eCxlYXgKCQlyZXMgPSBQb2ludGVyR2V0RGF0dW0odHVwcHRyICsgKm9mZik7CiAgICAyNzM4Ogk4 OSBkZSAgICAgICAgICAgICAgICAJbW92ICAgIGVzaSxlYngKICAgIDI3M2E6CTRjIDAxIGM2ICAg ICAgICAgICAgIAlhZGQgICAgcnNpLHI4CglpZiAoVkFSQVRUX0lTXzFCX0UoUFRSKSkKICAgIDI3 M2Q6CTQ0IDBmIGI2IDJlICAgICAgICAgIAltb3Z6eCAgcjEzZCxCWVRFIFBUUiBbcnNpXQoJcmV0 dXJuIChEYXR1bSkgKHVpbnRwdHJfdCkgWDsKICAgIDI3NDE6CTQ4IDg5IGYwICAgICAgICAgICAg IAltb3YgICAgcmF4LHJzaQogICAgMjc0NDoJNDEgODAgZmQgMDEgICAgICAgICAgCWNtcCAgICBy MTNiLDB4MQogICAgMjc0ODoJMGYgODUgZjEgZmUgZmYgZmYgICAgCWpuZSAgICAyNjNmIDx0dHNf bWluaW1hbF9nZXRzb21lYXR0cnMrMHgzOWY+CglyZXR1cm4gVkFSVEFHXzFCX0UoUFRSKTsKICAg IDI3NGU6CTBmIGI2IDc2IDAxICAgICAgICAgIAltb3Z6eCAgZXNpLEJZVEUgUFRSIFtyc2krMHgx XQoJaWYgKHRhZyA9PSBWQVJUQUdfSU5ESVJFQ1QpCiAgICAyNzUyOgk4MyBmZSAwMSAgICAgICAg ICAgICAJY21wICAgIGVzaSwweDEKICAgIDI3NTU6CTBmIDg0IDAyIDAyIDAwIDAwICAgIAlqZSAg ICAgMjk1ZCA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4NmJkPgoJcmV0dXJuICgodGFnICYg fjEpID09IFZBUlRBR19FWFBBTkRFRF9STyk7CiAgICAyNzViOgk0MSA4OSBmNSAgICAgICAgICAg ICAJbW92ICAgIHIxM2QsZXNpCiAgICAyNzVlOgk0MSA4MyBlNSBmZSAgICAgICAgICAJYW5kICAg IHIxM2QsMHhmZmZmZmZmZQoJZWxzZSBpZiAoVkFSVEFHX0lTX0VYUEFOREVEKHRhZykpCiAgICAy NzYyOgk0MSA4MyBmZCAwMiAgICAgICAgICAJY21wICAgIHIxM2QsMHgyCiAgICAyNzY2OgkwZiA4 NCBmMSAwMSAwMCAwMCAgICAJamUgICAgIDI5NWQgPHR0c19taW5pbWFsX2dldHNvbWVhdHRycysw eDZiZD4KCWVsc2UgaWYgKHRhZyA9PSBWQVJUQUdfT05ESVNLKQogICAgMjc2YzoJODMgZmUgMTIg ICAgICAgICAgICAgCWNtcCAgICBlc2ksMHgxMgogICAgMjc2ZjoJNDAgMGYgOTQgYzYgICAgICAg ICAgCXNldGUgICBzaWwKICAgIDI3NzM6CTQwIDBmIGI2IGY2ICAgICAgICAgIAltb3Z6eCAgZXNp LHNpbAogICAgMjc3NzoJNDggYzEgZTYgMDQgICAgICAgICAgCXNobCAgICByc2ksMHg0CgkJKm9m ZiArPSBWQVJTSVpFX0FOWShEYXR1bUdldFBvaW50ZXIocmVzKSk7CiAgICAyNzdiOgk0NCA4ZCA2 ZSAwMiAgICAgICAgICAJbGVhICAgIHIxM2QsW3JzaSsweDJdCiAgICAyNzdmOgllOSBjYyBmZSBm ZiBmZiAgICAgICAJam1wICAgIDI2NTAgPHR0c19taW5pbWFsX2dldHNvbWVhdHRycysweDNiMD4K ICAgIDI3ODQ6CTBmIDFmIDQwIDAwICAgICAgICAgIAlub3AgICAgRFdPUkQgUFRSIFtyYXgrMHgw XQoJCXJldHVybiBWQVJTSVpFXzRCKFBUUik7CiAgICAyNzg4Ogk0NCA4YiAyZSAgICAgICAgICAg ICAJbW92ICAgIHIxM2QsRFdPUkQgUFRSIFtyc2ldCiAgICAyNzhiOgk0MSBjMSBlZCAwMiAgICAg ICAgICAJc2hyICAgIHIxM2QsMHgyCiAgICAyNzhmOgllOSBiYyBmZSBmZiBmZiAgICAgICAJam1w ICAgIDI2NTAgPHR0c19taW5pbWFsX2dldHNvbWVhdHRycysweDNiMD4KICAgIDI3OTQ6CTBmIDFm IDQwIDAwICAgICAgICAgIAlub3AgICAgRFdPUkQgUFRSIFtyYXgrMHgwXQoJCQluYXR0cyA9IHJl cW5hdHRzOwogICAgMjc5ODoJNGQgNjMgY2MgICAgICAgICAgICAgCW1vdnN4ZCByOSxyMTJkCiAg ICAyNzliOgk0NSA4OSBlNiAgICAgICAgICAgICAJbW92ICAgIHIxNGQscjEyZAogICAgMjc5ZToJ ZTkgN2IgZmIgZmYgZmYgICAgICAgCWptcCAgICAyMzFlIDx0dHNfbWluaW1hbF9nZXRzb21lYXR0 cnMrMHg3ZT4KICAgIDI3YTM6CTBmIDFmIDQ0IDAwIDAwICAgICAgIAlub3AgICAgRFdPUkQgUFRS IFtyYXgrcmF4KjErMHgwXQoJcmV0dXJuIChEYXR1bSkgWDsKICAgIDI3YTg6CTQ5IDYzIDQ1IDAw ICAgICAgICAgIAltb3ZzeGQgcmF4LERXT1JEIFBUUiBbcjEzKzB4MF0KCQkJdmFsdWVzW2F0dG51 bV0gPSAoRGF0dW0pIDA7CiAgICAyN2FjOgk0YSA4OSAwNCBkNyAgICAgICAgICAJbW92ICAgIFFX T1JEIFBUUiBbcmRpK3IxMCo4XSxyYXgKCWZvciAoOyBhdHRudW0gPCBuYXR0czsgYXR0bnVtKysp CiAgICAyN2IwOgk0OSA4MyBjMiAwMSAgICAgICAgICAJYWRkICAgIHIxMCwweDEKICAgIDI3YjQ6 CTRkIDM5IGNhICAgICAgICAgICAgIAljbXAgICAgcjEwLHI5CiAgICAyN2I3OgkwZiA4NSBmMyBm YyBmZiBmZiAgICAJam5lICAgIDI0YjAgPHR0c19taW5pbWFsX2dldHNvbWVhdHRycysweDIxMD4K ICAgIDI3YmQ6CWU5IDViIGZkIGZmIGZmICAgICAgIAlqbXAgICAgMjUxZCA8dHRzX21pbmltYWxf Z2V0c29tZWF0dHJzKzB4MjdkPgogICAgMjdjMjoJNjYgMGYgMWYgNDQgMDAgMDAgICAgCW5vcCAg ICBXT1JEIFBUUiBbcmF4K3JheCoxKzB4MF0KCXJldHVybiAoRGF0dW0pIFg7CiAgICAyN2M4Ogk0 OSAwZiBiZiA0NSAwMCAgICAgICAJbW92c3ggIHJheCxXT1JEIFBUUiBbcjEzKzB4MF0KCQkJdmFs dWVzW2F0dG51bV0gPSAoRGF0dW0pIDA7CiAgICAyN2NkOgk0YSA4OSAwNCBkNyAgICAgICAgICAJ bW92ICAgIFFXT1JEIFBUUiBbcmRpK3IxMCo4XSxyYXgKCWZvciAoOyBhdHRudW0gPCBuYXR0czsg YXR0bnVtKyspCiAgICAyN2QxOgk0OSA4MyBjMiAwMSAgICAgICAgICAJYWRkICAgIHIxMCwweDEK ICAgIDI3ZDU6CTRkIDM5IGNhICAgICAgICAgICAgIAljbXAgICAgcjEwLHI5CiAgICAyN2Q4Ogkw ZiA4NSBkMiBmYyBmZiBmZiAgICAJam5lICAgIDI0YjAgPHR0c19taW5pbWFsX2dldHNvbWVhdHRy cysweDIxMD4KICAgIDI3ZGU6CWU5IDNhIGZkIGZmIGZmICAgICAgIAlqbXAgICAgMjUxZCA8dHRz X21pbmltYWxfZ2V0c29tZWF0dHJzKzB4MjdkPgogICAgMjdlMzoJMGYgMWYgNDQgMDAgMDAgICAg ICAgCW5vcCAgICBEV09SRCBQVFIgW3JheCtyYXgqMSsweDBdCglyZXR1cm4gVkFSVEFHXzFCX0Uo UFRSKTsKICAgIDI3ZTg6CTQ1IDBmIGI2IDZkIDAxICAgICAgIAltb3Z6eCAgcjEzZCxCWVRFIFBU UiBbcjEzKzB4MV0KCWlmICh0YWcgPT0gVkFSVEFHX0lORElSRUNUKQogICAgMjdlZDoJNDEgODMg ZmQgMDEgICAgICAgICAgCWNtcCAgICByMTNkLDB4MQogICAgMjdmMToJMGYgODQgNWIgMDEgMDAg MDAgICAgCWplICAgICAyOTUyIDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnMrMHg2YjI+CglyZXR1 cm4gKCh0YWcgJiB+MSkgPT0gVkFSVEFHX0VYUEFOREVEX1JPKTsKICAgIDI3Zjc6CTQ1IDg5IGVl ICAgICAgICAgICAgIAltb3YgICAgcjE0ZCxyMTNkCiAgICAyN2ZhOgk0MSA4MyBlNiBmZSAgICAg ICAgICAJYW5kICAgIHIxNGQsMHhmZmZmZmZmZQoJZWxzZSBpZiAoVkFSVEFHX0lTX0VYUEFOREVE KHRhZykpCiAgICAyN2ZlOgk0MSA4MyBmZSAwMiAgICAgICAgICAJY21wICAgIHIxNGQsMHgyCiAg ICAyODAyOgkwZiA4NCA0YSAwMSAwMCAwMCAgICAJamUgICAgIDI5NTIgPHR0c19taW5pbWFsX2dl dHNvbWVhdHRycysweDZiMj4KCWVsc2UgaWYgKHRhZyA9PSBWQVJUQUdfT05ESVNLKQogICAgMjgw ODoJNDEgODMgZmQgMTIgICAgICAgICAgCWNtcCAgICByMTNkLDB4MTIKICAgIDI4MGM6CTQxIDBm IDk0IGM1ICAgICAgICAgIAlzZXRlICAgcjEzYgogICAgMjgxMDoJNDUgMGYgYjYgZWQgICAgICAg ICAgCW1vdnp4ICByMTNkLHIxM2IKICAgIDI4MTQ6CTQ5IGMxIGU1IDA0ICAgICAgICAgIAlzaGwg ICAgcjEzLDB4NAogICAgMjgxODoJNDUgOGQgNzUgMDIgICAgICAgICAgCWxlYSAgICByMTRkLFty MTMrMHgyXQogICAgMjgxYzoJZTkgNjAgZmMgZmYgZmYgICAgICAgCWptcCAgICAyNDgxIDx0dHNf bWluaW1hbF9nZXRzb21lYXR0cnMrMHgxZTE+CiAgICAyODIxOgkwZiAxZiA4MCAwMCAwMCAwMCAw MCAJbm9wICAgIERXT1JEIFBUUiBbcmF4KzB4MF0KCWludAkJCW5hdHRCeXRlID0gbmF0dHMgPj4g MzsKICAgIDI4Mjg6CTQ1IDg5IGNkICAgICAgICAgICAgIAltb3YgICAgcjEzZCxyOWQKICAgIDI4 MmI6CTQxIGMxIGZkIDAzICAgICAgICAgIAlzYXIgICAgcjEzZCwweDMKCWZvciAoYnl0ZW51bSA9 IDA7IGJ5dGVudW0gPCBuYXR0Qnl0ZTsgYnl0ZW51bSsrKQogICAgMjgyZjoJNDUgODUgZWQgICAg ICAgICAgICAgCXRlc3QgICByMTNkLHIxM2QKICAgIDI4MzI6CTBmIDhlIDMwIDAxIDAwIDAwICAg IAlqbGUgICAgMjk2OCA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4NmM4PgogICAgMjgzODoJ NDggOGQgNzMgMTcgICAgICAgICAgCWxlYSAgICByc2ksW3JieCsweDE3XQogICAgMjgzYzoJMzEg ZmYgICAgICAgICAgICAgICAgCXhvciAgICBlZGksZWRpCiAgICAyODNlOgllYiAxMCAgICAgICAg ICAgICAgICAJam1wICAgIDI4NTAgPHR0c19taW5pbWFsX2dldHNvbWVhdHRycysweDViMD4KICAg IDI4NDA6CTgzIGM3IDAxICAgICAgICAgICAgIAlhZGQgICAgZWRpLDB4MQogICAgMjg0MzoJNDgg ODMgYzYgMDEgICAgICAgICAgCWFkZCAgICByc2ksMHgxCiAgICAyODQ3Ogk0MSAzOSBmZCAgICAg ICAgICAgICAJY21wICAgIHIxM2QsZWRpCiAgICAyODRhOgkwZiA4NCBlYyAwMCAwMCAwMCAgICAJ amUgICAgIDI5M2MgPHR0c19taW5pbWFsX2dldHNvbWVhdHRycysweDY5Yz4KCQlpZiAoYml0c1ti eXRlbnVtXSAhPSAweEZGKQogICAgMjg1MDoJMGYgYjYgMDYgICAgICAgICAgICAgCW1vdnp4ICBl YXgsQllURSBQVFIgW3JzaV0KICAgIDI4NTM6CTNjIGZmICAgICAgICAgICAgICAgIAljbXAgICAg YWwsMHhmZgogICAgMjg1NToJNzQgZTkgICAgICAgICAgICAgICAgCWplICAgICAyODQwIDx0dHNf bWluaW1hbF9nZXRzb21lYXR0cnMrMHg1YTA+CglyZXMgPSBieXRlbnVtIDw8IDM7CiAgICAyODU3 OgljMSBlNyAwMyAgICAgICAgICAgICAJc2hsICAgIGVkaSwweDMKCXJlcyArPSBwZ19yaWdodG1v c3Rfb25lX3BvczMyKH4oKHVpbnQzMikgYml0c1tieXRlbnVtXSkpOwogICAgMjg1YToJZjcgZDAg ICAgICAgICAgICAgICAgCW5vdCAgICBlYXgKCWludAkJCW5ieXRlcyA9IChuYXR0cyArIDcpID4+ IDM7CiAgICAyODVjOgk0NSA4ZCA2OSAwNyAgICAgICAgICAJbGVhICAgIHIxM2QsW3I5KzB4N10K ICAgIDI4NjA6CWYzIDBmIGJjIGMwICAgICAgICAgIAl0emNudCAgZWF4LGVheAoJcmVzICs9IHBn X3JpZ2h0bW9zdF9vbmVfcG9zMzIofigodWludDMyKSBiaXRzW2J5dGVudW1dKSk7CiAgICAyODY0 OgkwMSBmOCAgICAgICAgICAgICAgICAJYWRkICAgIGVheCxlZGkKCXJlcyA9IE1pbihyZXMsIG5h dHRzKTsKICAgIDI4NjY6CTQxIDM5IGMxICAgICAgICAgICAgIAljbXAgICAgcjlkLGVheAogICAg Mjg2OToJNDEgMGYgNGUgYzEgICAgICAgICAgCWNtb3ZsZSBlYXgscjlkCglpbnQJCQluYnl0ZXMg PSAobmF0dHMgKyA3KSA+PiAzOwogICAgMjg2ZDoJNDEgYzEgZmQgMDMgICAgICAgICAgCXNhciAg ICByMTNkLDB4MwoJcmVzID0gTWluKHJlcywgbmF0dHMpOwogICAgMjg3MToJNGMgNjMgZjAgICAg ICAgICAgICAgCW1vdnN4ZCByMTQsZWF4CgkJaXNudWxsXzggJj0gVUlOVDY0Q09OU1QoMHgwMTAx MDEwMTAxMDEwMTAxKTsKICAgIDI4NzQ6CTQ5IGJmIDAxIDAxIDAxIDAxIDAxIAltb3ZhYnMgcjE1 LDB4MTAxMDEwMTAxMDEwMTAxCiAgICAyODdiOgkwMSAwMSAwMSAKICAgIDI4N2U6CTRkIDYzIGVk ICAgICAgICAgICAgIAltb3ZzeGQgcjEzLHIxM2QKCWZvciAoYnl0ZW51bSA9IDA7IGJ5dGVudW0g PCBuYXR0Qnl0ZTsgYnl0ZW51bSsrKQogICAgMjg4MToJMzEgZmYgICAgICAgICAgICAgICAgCXhv ciAgICBlZGksZWRpCiAgICAyODgzOgk2NiAwZiAxZiA0NCAwMCAwMCAgICAJbm9wICAgIFdPUkQg UFRSIFtyYXgrcmF4KjErMHgwXQogICAgMjg4OToJNjYgNjYgMmUgMGYgMWYgODQgMDAgCWRhdGEx NiBjcyBub3AgV09SRCBQVFIgW3JheCtyYXgqMSsweDBdCiAgICAyODkwOgkwMCAwMCAwMCAwMCAK ICAgIDI4OTQ6CTY2IDY2IDJlIDBmIDFmIDg0IDAwIAlkYXRhMTYgY3Mgbm9wIFdPUkQgUFRSIFty YXgrcmF4KjErMHgwXQogICAgMjg5YjoJMDAgMDAgMDAgMDAgCiAgICAyODlmOgk2NiA2NiAyZSAw ZiAxZiA4NCAwMCAJZGF0YTE2IGNzIG5vcCBXT1JEIFBUUiBbcmF4K3JheCoxKzB4MF0KICAgIDI4 YTY6CTAwIDAwIDAwIDAwIAogICAgMjhhYToJNjYgNjYgMmUgMGYgMWYgODQgMDAgCWRhdGExNiBj cyBub3AgV09SRCBQVFIgW3JheCtyYXgqMSsweDBdCiAgICAyOGIxOgkwMCAwMCAwMCAwMCAKICAg IDI4YjU6CTY2IDY2IDJlIDBmIDFmIDg0IDAwIAlkYXRhMTYgY3Mgbm9wIFdPUkQgUFRSIFtyYXgr cmF4KjErMHgwXQogICAgMjhiYzoJMDAgMDAgMDAgMDAgCgkJYml0czgJCW51bGxieXRlID0gfmJp dHNbaV07CiAgICAyOGMwOgkwZiBiNiA3NCAzYiAxNyAgICAgICAJbW92enggIGVzaSxCWVRFIFBU UiBbcmJ4K3JkaSoxKzB4MTddCiAgICAyOGM1OglmNyBkNiAgICAgICAgICAgICAgICAJbm90ICAg IGVzaQoJCWlzbnVsbF84IHw9ICgodWludDY0KSAoKG51bGxieXRlID4+IDQpICogU1BSRUFEX0JJ VFNfTVVMVElQTElFUl8zMikpIDw8IDMyOwogICAgMjhjNzoJODkgZjAgICAgICAgICAgICAgICAg CW1vdiAgICBlYXgsZXNpCgkJaXNudWxsXzggPSAobnVsbGJ5dGUgJiAweGYpICogU1BSRUFEX0JJ VFNfTVVMVElQTElFUl8zMjsKICAgIDI4Yzk6CTgzIGU2IDBmICAgICAgICAgICAgIAlhbmQgICAg ZXNpLDB4ZgoJCWlzbnVsbF84IHw9ICgodWludDY0KSAoKG51bGxieXRlID4+IDQpICogU1BSRUFE X0JJVFNfTVVMVElQTElFUl8zMikpIDw8IDMyOwogICAgMjhjYzoJYzAgZTggMDQgICAgICAgICAg ICAgCXNociAgICBhbCwweDQKCQlpc251bGxfOCA9IChudWxsYnl0ZSAmIDB4ZikgKiBTUFJFQURf QklUU19NVUxUSVBMSUVSXzMyOwogICAgMjhjZjoJNDggNjkgZjYgODEgNDAgMjAgMDAgCWltdWwg ICByc2kscnNpLDB4MjA0MDgxCgkJaXNudWxsXzggfD0gKCh1aW50NjQpICgobnVsbGJ5dGUgPj4g NCkgKiBTUFJFQURfQklUU19NVUxUSVBMSUVSXzMyKSkgPDwgMzI7CiAgICAyOGQ2Ogk4MyBlMCAw ZiAgICAgICAgICAgICAJYW5kICAgIGVheCwweGYKICAgIDI4ZDk6CTQ4IDY5IGMwIDgxIDQwIDIw IDAwIAlpbXVsICAgcmF4LHJheCwweDIwNDA4MQogICAgMjhlMDoJNDggYzEgZTAgMjAgICAgICAg ICAgCXNobCAgICByYXgsMHgyMAogICAgMjhlNDoJNDggMDkgZjAgICAgICAgICAgICAgCW9yICAg ICByYXgscnNpCgkJaXNudWxsXzggJj0gVUlOVDY0Q09OU1QoMHgwMTAxMDEwMTAxMDEwMTAxKTsK ICAgIDI4ZTc6CTRjIDIxIGY4ICAgICAgICAgICAgIAlhbmQgICAgcmF4LHIxNQogICAgMjhlYToJ NDggODkgMDQgZjkgICAgICAgICAgCW1vdiAgICBRV09SRCBQVFIgW3JjeCtyZGkqOF0scmF4Cglm b3IgKGludCBpID0gMDsgaSA8IG5ieXRlczsgaSsrLCBpc251bGwgKz0gOCkKICAgIDI4ZWU6CTQ4 IDgzIGM3IDAxICAgICAgICAgIAlhZGQgICAgcmRpLDB4MQogICAgMjhmMjoJNGMgMzkgZWYgICAg ICAgICAgICAgCWNtcCAgICByZGkscjEzCiAgICAyOGY1Ogk3NSBjOSAgICAgICAgICAgICAgICAJ am5lICAgIDI4YzAgPHR0c19taW5pbWFsX2dldHNvbWVhdHRycysweDYyMD4KCQkJZmlyc3ROb25D YWNoZU9mZnNldEF0dHIgPSBNaW4oZmlyc3ROb25DYWNoZU9mZnNldEF0dHIsIGZpcnN0TnVsbEF0 dHIpOwogICAgMjhmNzoJNDUgMzkgZjIgICAgICAgICAgICAgCWNtcCAgICByMTBkLHIxNGQKICAg IDI4ZmE6CTRkIDBmIDRmIGQ2ICAgICAgICAgIAljbW92ZyAgcjEwLHIxNAogICAgMjhmZToJZTkg MWIgZmEgZmYgZmYgICAgICAgCWptcCAgICAyMzFlIDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnMr MHg3ZT4KICAgIDI5MDM6CTBmIDFmIDQ0IDAwIDAwICAgICAgIAlub3AgICAgRFdPUkQgUFRSIFty YXgrcmF4KjErMHgwXQoJZm9yICg7IGF0dG51bSA8IGZpcnN0TnVsbEF0dHI7IGF0dG51bSsrKQog ICAgMjkwODoJNDkgODkgYzIgICAgICAgICAgICAgCW1vdiAgICByMTAscmF4CiAgICAyOTBiOgll OSA5MCBmYiBmZiBmZiAgICAgICAJam1wICAgIDI0YTAgPHR0c19taW5pbWFsX2dldHNvbWVhdHRy cysweDIwMD4KCWZvciAoOyBhdHRudW0gPCBuYXR0czsgYXR0bnVtKyspCiAgICAyOTEwOgk0ZCA4 OSBkMSAgICAgICAgICAgICAJbW92ICAgIHI5LHIxMAogICAgMjkxMzoJZTkgMDUgZmMgZmYgZmYg ICAgICAgCWptcCAgICAyNTFkIDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnMrMHgyN2Q+CiAgICAy OTE4OgkwZiAxZiA4NCAwMCAwMCAwMCAwMCAJbm9wICAgIERXT1JEIFBUUiBbcmF4K3JheCoxKzB4 MF0KICAgIDI5MWY6CTAwIAoJCSpvZmZwID0gb2ZmOwogICAgMjkyMDoJNDEgODkgNWIgNjggICAg ICAgICAgCW1vdiAgICBEV09SRCBQVFIgW3IxMSsweDY4XSxlYngKCQlzbG90X2dldG1pc3Npbmdh dHRycyhzbG90LCBhdHRudW0sIHJlcW5hdHRzKTsKICAgIDI5MjQ6CTQ0IDg5IGUyICAgICAgICAg ICAgIAltb3YgICAgZWR4LHIxMmQKfQogICAgMjkyNzoJNWIgICAgICAgICAgICAgICAgICAgCXBv cCAgICByYngKCQlzbG90X2dldG1pc3NpbmdhdHRycyhzbG90LCBhdHRudW0sIHJlcW5hdHRzKTsK ICAgIDI5Mjg6CTQ0IDg5IGNlICAgICAgICAgICAgIAltb3YgICAgZXNpLHI5ZAp9CiAgICAyOTJi Ogk1ZCAgICAgICAgICAgICAgICAgICAJcG9wICAgIHJicAoJCXNsb3RfZ2V0bWlzc2luZ2F0dHJz KHNsb3QsIGF0dG51bSwgcmVxbmF0dHMpOwogICAgMjkyYzoJNGMgODkgZGYgICAgICAgICAgICAg CW1vdiAgICByZGkscjExCn0KICAgIDI5MmY6CTQxIDVjICAgICAgICAgICAgICAgIAlwb3AgICAg cjEyCiAgICAyOTMxOgk0MSA1ZCAgICAgICAgICAgICAgICAJcG9wICAgIHIxMwogICAgMjkzMzoJ NDEgNWUgICAgICAgICAgICAgICAgCXBvcCAgICByMTQKICAgIDI5MzU6CTQxIDVmICAgICAgICAg ICAgICAgIAlwb3AgICAgcjE1CgkJc2xvdF9nZXRtaXNzaW5nYXR0cnMoc2xvdCwgYXR0bnVtLCBy ZXFuYXR0cyk7CiAgICAyOTM3OgllOSBiNCBmMSBmZiBmZiAgICAgICAJam1wICAgIDFhZjAgPHNs b3RfZ2V0bWlzc2luZ2F0dHJzPgoJcmVzID0gYnl0ZW51bSA8PCAzOwogICAgMjkzYzoJNDIgOGQg M2MgZWQgMDAgMDAgMDAgCWxlYSAgICBlZGksW3IxMyo4KzB4MF0KICAgIDI5NDM6CTAwIAoJcmVz ICs9IHBnX3JpZ2h0bW9zdF9vbmVfcG9zMzIofigodWludDMyKSBiaXRzW2J5dGVudW1dKSk7CiAg ICAyOTQ0Ogk0ZCA2MyBlZCAgICAgICAgICAgICAJbW92c3hkIHIxMyxyMTNkCiAgICAyOTQ3Ogk0 MiAwZiBiNiA0NCAyYiAxNyAgICAJbW92enggIGVheCxCWVRFIFBUUiBbcmJ4K3IxMyoxKzB4MTdd CiAgICAyOTRkOgllOSAwOCBmZiBmZiBmZiAgICAgICAJam1wICAgIDI4NWEgPHR0c19taW5pbWFs X2dldHNvbWVhdHRycysweDViYT4KICAgIDI5NTI6CTQxIGJlIDBhIDAwIDAwIDAwICAgIAltb3Yg ICAgcjE0ZCwweGEKICAgIDI5NTg6CWU5IDI0IGZiIGZmIGZmICAgICAgIAlqbXAgICAgMjQ4MSA8 dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4MWUxPgogICAgMjk1ZDoJNDEgYmQgMGEgMDAgMDAg MDAgICAgCW1vdiAgICByMTNkLDB4YQogICAgMjk2MzoJZTkgZTggZmMgZmYgZmYgICAgICAgCWpt cCAgICAyNjUwIDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnMrMHgzYjA+CiAgICAyOTY4OgkwZiBi NiA0MyAxNyAgICAgICAgICAJbW92enggIGVheCxCWVRFIFBUUiBbcmJ4KzB4MTddCglpbnQJCQlu Ynl0ZXMgPSAobmF0dHMgKyA3KSA+PiAzOwogICAgMjk2YzoJNDUgOGQgNjkgMDcgICAgICAgICAg CWxlYSAgICByMTNkLFtyOSsweDddCglyZXMgKz0gcGdfcmlnaHRtb3N0X29uZV9wb3MzMih+KCh1 aW50MzIpIGJpdHNbYnl0ZW51bV0pKTsKICAgIDI5NzA6CWY3IGQwICAgICAgICAgICAgICAgIAlu b3QgICAgZWF4CiAgICAyOTcyOglmMyAwZiBiYyBjMCAgICAgICAgICAJdHpjbnQgIGVheCxlYXgK CXJlcyA9IE1pbihyZXMsIG5hdHRzKTsKICAgIDI5NzY6CTQxIDM5IGMxICAgICAgICAgICAgIAlj bXAgICAgcjlkLGVheAogICAgMjk3OToJNDEgMGYgNGUgYzEgICAgICAgICAgCWNtb3ZsZSBlYXgs cjlkCglpbnQJCQluYnl0ZXMgPSAobmF0dHMgKyA3KSA+PiAzOwogICAgMjk3ZDoJNDEgYzEgZmQg MDMgICAgICAgICAgCXNhciAgICByMTNkLDB4MwoJcmVzID0gTWluKHJlcywgbmF0dHMpOwogICAg Mjk4MToJNGMgNjMgZjAgICAgICAgICAgICAgCW1vdnN4ZCByMTQsZWF4Cglmb3IgKGludCBpID0g MDsgaSA8IG5ieXRlczsgaSsrLCBpc251bGwgKz0gOCkKICAgIDI5ODQ6CTQxIDgzIGZkIDAxICAg ICAgICAgIAljbXAgICAgcjEzZCwweDEKICAgIDI5ODg6CTBmIDg1IDY5IGZmIGZmIGZmICAgIAlq bmUgICAgMjhmNyA8dHRzX21pbmltYWxfZ2V0c29tZWF0dHJzKzB4NjU3PgogICAgMjk4ZToJZTkg ZTEgZmUgZmYgZmYgICAgICAgCWptcCAgICAyODc0IDx0dHNfbWluaW1hbF9nZXRzb21lYXR0cnMr MHg1ZDQ+CiAgICAyOTkzOgk2NiA5MCAgICAgICAgICAgICAgICAJeGNoZyAgIGF4LGF4CiAgICAy OTk1Ogk2NiA2NiAyZSAwZiAxZiA4NCAwMCAJZGF0YTE2IGNzIG5vcCBXT1JEIFBUUiBbcmF4K3Jh eCoxKzB4MF0KICAgIDI5OWM6CTAwIDAwIDAwIDAwIAo= --0000000000002deb23064bf63451 Content-Type: text/plain; charset="US-ASCII"; name="v11-0001-Introduce-deform_bench-test-module.patch" Content-Disposition: attachment; filename="v11-0001-Introduce-deform_bench-test-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm7rg38n1 RnJvbSA0NmM4MzI5MGE2ZWQxMjU2Y2JlZmQ5ZmE2MmRlODA4NDI0NjAxZDcwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCAyNyBKYW4gMjAyNiAxNTowODowOSArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjExIDEv NV0gSW50cm9kdWNlIGRlZm9ybV9iZW5jaCB0ZXN0IG1vZHVsZQoKRm9yIGJlbmNobWFya2luZyB0 dXBsZSBkZWZvcm1hdGlvbi4KLS0tCiBzcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC8uZ2l0 aWdub3JlICAgICAgfCAgIDQgKwogc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvTWFrZWZp bGUgICAgICAgIHwgIDIxICsrKysKIC4uLi9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLS0xLjAu c3FsICAgICAgICB8ICAgOCArKwogc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3Jt X2JlbmNoLmMgIHwgMTA3ICsrKysrKysrKysrKysrKysrKwogLi4uL21vZHVsZXMvZGVmb3JtX2Jl bmNoL2RlZm9ybV9iZW5jaC5jb250cm9sIHwgICA0ICsKIHNyYy90ZXN0L21vZHVsZXMvZGVmb3Jt X2JlbmNoL21lc29uLmJ1aWxkICAgICB8ICAyMiArKysrCiBzcmMvdGVzdC9tb2R1bGVzL21lc29u LmJ1aWxkICAgICAgICAgICAgICAgICAgfCAgIDEgKwogNyBmaWxlcyBjaGFuZ2VkLCAxNjcgaW5z ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2Jl bmNoLy5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2RlZm9y bV9iZW5jaC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvZGVm b3JtX2JlbmNoL2RlZm9ybV9iZW5jaC0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90 ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLmNvbnRyb2wKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9tZXNvbi5idWls ZAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoLy5naXRpZ25vcmUg Yi9zcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZGNiM2ZmOTcyMwotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoLy5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBA CisjIEdlbmVyYXRlZCBzdWJkaXJlY3RvcmllcworL2xvZy8KKy9yZXN1bHRzLworL3RtcF9jaGVj ay8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL01ha2VmaWxlIGIv c3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI1ZmMwZjdhNTgzCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvTWFrZWZpbGUKQEAgLTAsMCArMSwyMSBAQAorIyBz cmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9NYWtlZmlsZQorCitNT0RVTEVfYmlnID0gZGVm b3JtX2JlbmNoCitPQkpTID0gZGVmb3JtX2JlbmNoLm8KKworRVhURU5TSU9OID0gZGVmb3JtX2Jl bmNoCitEQVRBID0gZGVmb3JtX2JlbmNoLS0xLjAuc3FsCitQR0ZJTEVERVNDID0gImRlZm9ybV9i ZW5jaCAtIHR1cGxlIGRlZm9ybSBiZW5jaG1hcmtpbmciCisKK1JFR1JFU1MgPSBkZWZvcm1fYmVu Y2gKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNo ZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9 IHNyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoCit0b3BfYnVpbGRkaXIgPSAuLi8uLgoraW5j bHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9z cmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9kZWZvcm1fYmVuY2gtLTEuMC5zcWwgYi9zcmMvdGVz dC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9kZWZvcm1fYmVuY2gtLTEuMC5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ5MmI3MWRiYTNiCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLS0xLjAuc3FsCkBA IC0wLDAgKzEsOCBAQAorLyogZGVmb3JtX2JlbmNoLS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWlu IGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhU RU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gZGVmb3JtX2JlbmNoIiB0byBsb2Fk IHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIGRlZm9ybV9iZW5jaCh0YWJsZW9p ZCBPaWQsIGF0dG51bSBpbnRbXSkgUkVUVVJOUyBGTE9BVAorQVMgJ01PRFVMRV9QQVRITkFNRScs ICdkZWZvcm1fYmVuY2gnCitMQU5HVUFHRSBDIFZPTEFUSUxFIFNUUklDVDsKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC5jIGIvc3JjL3Rlc3Qv bW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjc4MzhmNjM5YmVmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLmMKQEAgLTAsMCArMSwxMDcgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRlZm9ybV9iZW5jaC5jCisgKgorICogZm9yIGJl bmNobWFya2luZyB0dXBsZSBkZWZvcm1hdGlvbiByb3V0aW5lcworICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1 ZGUgPHN5cy90aW1lLmg+CisKKyNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCisjaW5jbHVkZSAi YWNjZXNzL3JlbHNjYW4uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtX2QuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX3R5cGVfZC5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJt aXNjYWRtaW4uaCIKKyNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgorI2luY2x1ZGUgInV0aWxzL2Fy cmF5YWNjZXNzLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKworUEdfTU9EVUxFX01B R0lDOworCitQR19GVU5DVElPTl9JTkZPX1YxKGRlZm9ybV9iZW5jaCk7CisKK0RhdHVtCitkZWZv cm1fYmVuY2goUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlPaWQJCQl0YWJsZW9pZCA9IFBHX0dFVEFS R19PSUQoMCk7CisJQXJyYXlUeXBlICAqYXJyYXkgPSBQR19HRVRBUkdfQVJSQVlUWVBFX1AoMSk7 CisJVGFibGVTY2FuRGVzYyBzY2FuOworCVJlbGF0aW9uCXJlbDsKKwlUdXBsZURlc2MJdHVwZGVz YzsKKwlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKwlEYXR1bQkgICAqZWxlbV9kYXR1bXMgPSBOVUxM OworCWJvb2wJICAgKmVsZW1fbnVsbHMgPSBOVUxMOworCWludAkJCWVsZW1fY291bnQ7CisJaW50 CQkgICAqYXR0bnVtczsKKwljbG9ja190CQlzdGFydCwKKwkJCQllbmQ7CisKKwlyZWwgPSByZWxh dGlvbl9vcGVuKHRhYmxlb2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJaWYgKHJlbC0+cmRfcmVs LT5yZWxhbSAhPSBIRUFQX1RBQkxFX0FNX09JRCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygib25seSBo ZWFwIEFNIGlzIHN1cHBvcnRlZCIpKSk7CisKKwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihy ZWwpOworCXNsb3QgPSBNYWtlVHVwbGVUYWJsZVNsb3QodHVwZGVzYywgJlRUU09wc0J1ZmZlckhl YXBUdXBsZSk7CisJc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9zdHJhdChyZWwsIEdldEFjdGl2ZVNu YXBzaG90KCksIDAsIE5VTEwsIHRydWUsIGZhbHNlKTsKKworCS8qCisJICogVGhlIGFycmF5IGlz IHVzZWQgdG8gYWxsb3cgY2FsbGVycyB0byBkZWZpbmUgaG93IG1hbnkgYXR0cyB0byBkZWZvcm0u CisJICogZS5nOiAnezEsMTB9Jzo6aW50W10gd291bGQgZGVmb3JtIGF0dG51bT0xLCB0aGVuIGlu IGEgMm5kIHBhc3MgZGVmb3JtCisJICogdGhlIHJlbWFpbmRlciB1cCB0byBhdHRudW09MTAuICBQ YXNzaW5nIGFuIGVsZW1lbnQgYXMgTlVMTCBtZWFucyBhbGwKKwkgKiBhdHRudW1zLiAgVGhpcyBh bGxvd3Mgc2ltdWxhdGlvbiBvZiBpbmNyZW1lbnRhbCBkZWZvcm1hdGlvbi4gIEdlbmVyYWxseQor CSAqIGlmIHlvdSdyZSBwYXNzaW5nIGFuIGFycmF5IHdpdGggbW9yZSB0aGFuIDEgZWxlbWVudCwg dGhlbiB0aGUgYXJyYXkKKwkgKiBzaG91bGQgYmUgaW4gYXNjZW5kaW5nIG9yZGVyLiAgRG9pbmcg c29tZXRoaW5nIGxpa2UgJ3sxMCwxfScgd291bGQgbWVhbgorCSAqIHdlJ3ZlIGFscmVhZHkgZGVm b3JtZWQgMTAgYXR0cmlidXRlcyBhbmQgb24gdGhlIDJuZCBwYXNzIHRoZXJlJ3MKKwkgKiBub3Ro aW5nIHRvIGRvIHNpbmNlIGF0dG51bT0xIHdhcyBhbHJlYWR5IGRlZm9ybWVkIGluIHRoZSBmaXJz dCBwYXNzLgorCSAqCisJICogWW91J2xsIGdldCBhbiBFUlJPUiBpZiB5b3UgcGFzcyBhIG51bWJl ciBoaWdoZXIgdGhhbiB0aGUgbnVtYmVyIG9mCisJICogYXR0cmlidXRlcyBpbiB0aGUgdGFibGUu CisJICovCisJZGVjb25zdHJ1Y3RfYXJyYXkoYXJyYXksCisJCQkJCSAgSU5UNE9JRCwKKwkJCQkJ ICBzaXplb2YoaW50MzIpLAorCQkJCQkgIHRydWUsCisJCQkJCSAgJ2knLAorCQkJCQkgICZlbGVt X2RhdHVtcywKKwkJCQkJICAmZWxlbV9udWxscywKKwkJCQkJICAmZWxlbV9jb3VudCk7CisKKwlh dHRudW1zID0gcGFsbG9jX2FycmF5KGludCwgZWxlbV9jb3VudCk7CisKKwlmb3IgKGludCBpID0g MDsgaSA8IGVsZW1fY291bnQ7IGkrKykKKwl7CisJCS8qIE1ha2UgYSBOVUxMIGVsZW1lbnQgbWVh biBhbGwgYXR0cmlidXRlcyAqLworCQlpZiAoZWxlbV9udWxsc1tpXSkKKwkJCWF0dG51bXNbaV0g PSB0dXBkZXNjLT5uYXR0czsKKwkJZWxzZQorCQkJYXR0bnVtc1tpXSA9IERhdHVtR2V0SW50MzIo ZWxlbV9kYXR1bXNbaV0pOworCX0KKworCXN0YXJ0ID0gY2xvY2soKTsKKworCXdoaWxlIChoZWFw X2dldG5leHRzbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKKwl7CisJCUNI RUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogRGVmb3JtIGluIHN0YWdlcyBhY2NvcmRpbmcg dG8gdGhlIGF0dG51bXMgYXJyYXkgKi8KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtX2NvdW50 OyBpKyspCisJCQlzbG90X2dldHNvbWVhdHRycyhzbG90LCBhdHRudW1zW2ldKTsKKwl9CisKKwll bmQgPSBjbG9jaygpOworCisJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKKwl0 YWJsZV9lbmRzY2FuKHNjYW4pOworCXJlbGF0aW9uX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCisJLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBydW4gdGhl IHRlc3QgKi8KKwlQR19SRVRVUk5fRkxPQVQ4KChkb3VibGUpIChlbmQgLSBzdGFydCkgLyAoQ0xP Q0tTX1BFUl9TRUMgLyAxMDAwKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2Rl Zm9ybV9iZW5jaC9kZWZvcm1fYmVuY2guY29udHJvbCBiL3NyYy90ZXN0L21vZHVsZXMvZGVmb3Jt X2JlbmNoL2RlZm9ybV9iZW5jaC5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5hMjAyM2Y5ZDczOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVs ZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC5jb250cm9sCkBAIC0wLDAgKzEsNCBAQAorIyBk ZWZvcm1fYmVuY2ggZXh0ZW5zaW9uCitjb21tZW50ID0gJ2Z1bmN0aW9ucyBmb3IgYmVuY2htYXJr aW5nIHR1cGxlIGRlZm9ybWF0aW9uJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9w YXRobmFtZSA9ICckbGliZGlyL2RlZm9ybV9iZW5jaCcKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvZGVmb3JtX2JlbmNoL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1f YmVuY2gvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjgyMDQ5NTg1MjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1f YmVuY2gvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwyMiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjYs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK2RlZm9ybV9iZW5jaF9zb3Vy Y2VzID0gZmlsZXMoCisgICdkZWZvcm1fYmVuY2guYycsCispCisKK2lmIGhvc3Rfc3lzdGVtID09 ICd3aW5kb3dzJworICBkZWZvcm1fYmVuY2hfc291cmNlcyArPSByY19saWJfZ2VuLnByb2Nlc3Mo d2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ2RlZm9ybV9iZW5jaCcs CisgICAgJy0tRklMRURFU0MnLCAnZGVmb3JtX2JlbmNoIC0gYmVuY2htYXJraW5nIHR1cGxlIGRl Zm9ybWF0aW9uJyxdKQorZW5kaWYKKworZGVmb3JtX2JlbmNoID0gc2hhcmVkX21vZHVsZSgnZGVm b3JtX2JlbmNoJywKKyAgZGVmb3JtX2JlbmNoX3NvdXJjZXMsCisgIGt3YXJnczogcGdfdGVzdF9t b2RfYXJncywKKykKK3Rlc3RfaW5zdGFsbF9saWJzICs9IGRlZm9ybV9iZW5jaAorCit0ZXN0X2lu c3RhbGxfZGF0YSArPSBmaWxlcygKKyAgJ2RlZm9ybV9iZW5jaC0tMS4wLnNxbCcsCisgICdkZWZv cm1fYmVuY2guY29udHJvbCcsCispCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL21lc29u LmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAppbmRleCAyNjM0YTUxOTkzNS4u ZWYyYjBhZjQ1ODEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZApAQCAtMiw2ICsyLDcgQEAKIAogc3ViZGly KCdicmluJykKIHN1YmRpcignY29tbWl0X3RzJykKK3N1YmRpcignZGVmb3JtX2JlbmNoJykKIHN1 YmRpcignZGVsYXlfZXhlY3V0aW9uJykKIHN1YmRpcignZHVtbXlfaW5kZXhfYW0nKQogc3ViZGly KCdkdW1teV9zZWNsYWJlbCcpCi0tIAoyLjUxLjAKCg== --0000000000002deb23064bf63451 Content-Type: text/plain; charset="US-ASCII"; name="v11-0002-Allow-sibling-call-optimization-in-slot_getsomea.patch" Content-Disposition: attachment; filename="v11-0002-Allow-sibling-call-optimization-in-slot_getsomea.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm7rg38p2 RnJvbSA1ZDM3MmMzMTY1NTc0MDZlMzE5YjI2ZGNmMzgxZDg5NmFlY2VhMjI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogTW9uLCAxNiBGZWIgMjAyNiAxNDoyMDoxOSArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjExIDIv NV0gQWxsb3cgc2libGluZyBjYWxsIG9wdGltaXphdGlvbiBpbgogc2xvdF9nZXRzb21lYXR0cnNf aW50KCkKClRoaXMgY2hhbmdlcyB0aGUgVHVwbGVUYWJsZVNsb3RPcHMgY29udHJhY3QgdG8gbWFr ZSBpdCBzbyB0aGUKZ2V0c29tZWF0dHJzKCkgZnVuY3Rpb24gaXMgaW4gY2hhcmdlIG9mIGNhbGxp bmcKc2xvdF9nZXRtaXNzaW5nYXR0cnMoKS4KClNpbmNlIHRoaXMgcmVtb3ZlcyBhbGwgY29kZSBm cm9tIHNsb3RfZ2V0c29tZWF0dHJzX2ludCgpIGFzaWRlIGZyb20gdGhlCmdldHNvbWVhdHRycygp IGNhbGwgaXRzZWxmLCB3ZSBtYXkgYXMgd2VsbCBhZGp1c3Qgc2xvdF9nZXRzb21lYXR0cnMoKSBz bwp0aGF0IGl0IGNhbGxzIGdldHNvbWVhdHRycygpIGRpcmVjdGx5LiAgV2UgbGVhdmUgc2xvdF9n ZXRzb21lYXR0cnNfaW50KCkKaW50YWN0IGFzIHRoaXMgaXMgc3RpbGwgY2FsbGVkIGZyb20gdGhl IEpJVCBjb2RlLgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyB8IDU3ICsr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRh YmxlLmggICB8IDEzICsrKystLS0KIDIgZmlsZXMgY2hhbmdlZCwgMzcgaW5zZXJ0aW9ucygrKSwg MzMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1 cGxlcy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCmluZGV4IGI3NjhlYWU5 ZTUzLi41YjliYjIxZmE3YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1 cGxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYwpAQCAtNzMsNyAr NzMsNyBAQAogc3RhdGljIFR1cGxlRGVzYyBFeGVjVHlwZUZyb21UTEludGVybmFsKExpc3QgKnRh cmdldExpc3QsCiAJCQkJCQkJCQkJYm9vbCBza2lwanVuayk7CiBzdGF0aWMgcGdfYXR0cmlidXRl X2Fsd2F5c19pbmxpbmUgdm9pZCBzbG90X2RlZm9ybV9oZWFwX3R1cGxlKFR1cGxlVGFibGVTbG90 ICpzbG90LCBIZWFwVHVwbGUgdHVwbGUsIHVpbnQzMiAqb2ZmcCwKLQkJCQkJCQkJCQkJCQkJCSAg aW50IG5hdHRzKTsKKwkJCQkJCQkJCQkJCQkJCSAgaW50IHJlcW5hdHRzKTsKIHN0YXRpYyBpbmxp bmUgdm9pZCB0dHNfYnVmZmVyX2hlYXBfc3RvcmVfdHVwbGUoVHVwbGVUYWJsZVNsb3QgKnNsb3Qs CiAJCQkJCQkJCQkJCSAgIEhlYXBUdXBsZSB0dXBsZSwKIAkJCQkJCQkJCQkJICAgQnVmZmVyIGJ1 ZmZlciwKQEAgLTExMDgsNyArMTEwOCwxMCBAQCBzbG90X2RlZm9ybV9oZWFwX3R1cGxlX2ludGVy bmFsKFR1cGxlVGFibGVTbG90ICpzbG90LCBIZWFwVHVwbGUgdHVwbGUsCiAgKiBzbG90X2RlZm9y bV9oZWFwX3R1cGxlCiAgKgkJR2l2ZW4gYSBUdXBsZVRhYmxlU2xvdCwgZXh0cmFjdCBkYXRhIGZy b20gdGhlIHNsb3QncyBwaHlzaWNhbCB0dXBsZQogICoJCWludG8gaXRzIERhdHVtL2lzbnVsbCBh cnJheXMuICBEYXRhIGlzIGV4dHJhY3RlZCB1cCB0aHJvdWdoIHRoZQotICoJCW5hdHRzJ3RoIGNv bHVtbiAoY2FsbGVyIG11c3QgZW5zdXJlIHRoaXMgaXMgYSBsZWdhbCBjb2x1bW4gbnVtYmVyKS4K KyAqCQlyZXFuYXR0cyd0aCBjb2x1bW4uICBJZiB0aGVyZSBhcmUgaW5zdWZmaWNpZW50IGF0dHJp YnV0ZXMgaW4gdGhlIGdpdmVuCisgKgkJdHVwbGUsIHRoZW4gc2xvdF9nZXRtaXNzaW5nYXR0cnMo KSBpcyBjYWxsZWQgdG8gcG9wdWxhdGUgdGhlCisgKgkJcmVtYWluZGVyLiAgSWYgcmVxbmF0dHMg aXMgYWJvdmUgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIGluIHRoZQorICoJCXNsb3QncyBUdXBs ZURlc2MsIGFuIGVycm9yIGlzIHJhaXNlZC4KICAqCiAgKgkJVGhpcyBpcyBlc3NlbnRpYWxseSBh biBpbmNyZW1lbnRhbCB2ZXJzaW9uIG9mIGhlYXBfZGVmb3JtX3R1cGxlOgogICoJCW9uIGVhY2gg Y2FsbCB3ZSBleHRyYWN0IGF0dHJpYnV0ZXMgdXAgdG8gdGhlIG9uZSBuZWVkZWQsIHdpdGhvdXQK QEAgLTExMjAsNyArMTEyMyw3IEBAIHNsb3RfZGVmb3JtX2hlYXBfdHVwbGVfaW50ZXJuYWwoVHVw bGVUYWJsZVNsb3QgKnNsb3QsIEhlYXBUdXBsZSB0dXBsZSwKICAqLwogc3RhdGljIHBnX2F0dHJp YnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKIHNsb3RfZGVmb3JtX2hlYXBfdHVwbGUoVHVwbGVUYWJs ZVNsb3QgKnNsb3QsIEhlYXBUdXBsZSB0dXBsZSwgdWludDMyICpvZmZwLAotCQkJCQkgICBpbnQg bmF0dHMpCisJCQkJCSAgIGludCByZXFuYXR0cykKIHsKIAlib29sCQloYXNudWxscyA9IEhlYXBU dXBsZUhhc051bGxzKHR1cGxlKTsKIAlpbnQJCQlhdHRudW07CkBAIC0xMTI4LDEzICsxMTMxLDE0 IEBAIHNsb3RfZGVmb3JtX2hlYXBfdHVwbGUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIEhlYXBUdXBs ZSB0dXBsZSwgdWludDMyICpvZmZwLAogCWJvb2wJCXNsb3c7CQkJLyogY2FuIHdlIHVzZS9zZXQg YXR0Y2FjaGVvZmY/ICovCiAKIAkvKiBXZSBjYW4gb25seSBmZXRjaCBhcyBtYW55IGF0dHJpYnV0 ZXMgYXMgdGhlIHR1cGxlIGhhcy4gKi8KLQluYXR0cyA9IE1pbihIZWFwVHVwbGVIZWFkZXJHZXRO YXR0cyh0dXBsZS0+dF9kYXRhKSwgbmF0dHMpOworCW5hdHRzID0gTWluKEhlYXBUdXBsZUhlYWRl ckdldE5hdHRzKHR1cGxlLT50X2RhdGEpLCByZXFuYXR0cyk7CiAKIAkvKgogCSAqIENoZWNrIHdo ZXRoZXIgdGhlIGZpcnN0IGNhbGwgZm9yIHRoaXMgdHVwbGUsIGFuZCBpbml0aWFsaXplIG9yIHJl c3RvcmUKIAkgKiBsb29wIHN0YXRlLgogCSAqLwogCWF0dG51bSA9IHNsb3QtPnR0c19udmFsaWQ7 CisJc2xvdC0+dHRzX252YWxpZCA9IHJlcW5hdHRzOwogCWlmIChhdHRudW0gPT0gMCkKIAl7CiAJ CS8qIFN0YXJ0IGZyb20gdGhlIGZpcnN0IGF0dHJpYnV0ZSAqLwpAQCAtMTE5OSwxMiArMTIwMywx NSBAQCBzbG90X2RlZm9ybV9oZWFwX3R1cGxlKFR1cGxlVGFibGVTbG90ICpzbG90LCBIZWFwVHVw bGUgdHVwbGUsIHVpbnQzMiAqb2ZmcCwKIAkvKgogCSAqIFNhdmUgc3RhdGUgZm9yIG5leHQgZXhl Y3V0aW9uCiAJICovCi0Jc2xvdC0+dHRzX252YWxpZCA9IGF0dG51bTsKIAkqb2ZmcCA9IG9mZjsK IAlpZiAoc2xvdykKIAkJc2xvdC0+dHRzX2ZsYWdzIHw9IFRUU19GTEFHX1NMT1c7CiAJZWxzZQog CQlzbG90LT50dHNfZmxhZ3MgJj0gflRUU19GTEFHX1NMT1c7CisKKwkvKiBGZXRjaCBhbnkgbWlz c2luZyBhdHRycyBhbmQgcmFpc2UgYW4gZXJyb3IgaWYgcmVxbmF0dHMgaXMgaW52YWxpZC4gKi8K KwlpZiAodW5saWtlbHkoYXR0bnVtIDwgcmVxbmF0dHMpKQorCQlzbG90X2dldG1pc3NpbmdhdHRy cyhzbG90LCBhdHRudW0sIHJlcW5hdHRzKTsKIH0KIAogY29uc3QgVHVwbGVUYWJsZVNsb3RPcHMg VFRTT3BzVmlydHVhbCA9IHsKQEAgLTIwNTgsMzQgKzIwNjUsMzYgQEAgc2xvdF9nZXRtaXNzaW5n YXR0cnMoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGludCBzdGFydEF0dE51bSwgaW50IGxhc3RBdHRO dW0pCiB7CiAJQXR0ck1pc3NpbmcgKmF0dHJtaXNzID0gTlVMTDsKIAorCS8qIENoZWNrIGZvciBp bnZhbGlkIGF0dG51bXMgKi8KKwlpZiAodW5saWtlbHkobGFzdEF0dE51bSA+IHNsb3QtPnR0c190 dXBsZURlc2NyaXB0b3ItPm5hdHRzKSkKKwkJZWxvZyhFUlJPUiwgImludmFsaWQgYXR0cmlidXRl IG51bWJlciAlZCIsIGxhc3RBdHROdW0pOworCiAJaWYgKHNsb3QtPnR0c190dXBsZURlc2NyaXB0 b3ItPmNvbnN0cikKIAkJYXR0cm1pc3MgPSBzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLT5jb25z dHItPm1pc3Npbmc7CiAKIAlpZiAoIWF0dHJtaXNzKQogCXsKIAkJLyogbm8gbWlzc2luZyB2YWx1 ZXMgYXJyYXkgYXQgYWxsLCBzbyBqdXN0IGZpbGwgZXZlcnl0aGluZyBpbiBhcyBOVUxMICovCi0J CW1lbXNldChzbG90LT50dHNfdmFsdWVzICsgc3RhcnRBdHROdW0sIDAsCi0JCQkgICAobGFzdEF0 dE51bSAtIHN0YXJ0QXR0TnVtKSAqIHNpemVvZihEYXR1bSkpOwotCQltZW1zZXQoc2xvdC0+dHRz X2lzbnVsbCArIHN0YXJ0QXR0TnVtLCAxLAotCQkJICAgKGxhc3RBdHROdW0gLSBzdGFydEF0dE51 bSkgKiBzaXplb2YoYm9vbCkpOworCQlmb3IgKGludCBhdHRudW0gPSBzdGFydEF0dE51bTsgYXR0 bnVtIDwgbGFzdEF0dE51bTsgYXR0bnVtKyspCisJCXsKKwkJCXNsb3QtPnR0c192YWx1ZXNbYXR0 bnVtXSA9IChEYXR1bSkgMDsKKwkJCXNsb3QtPnR0c19pc251bGxbYXR0bnVtXSA9IHRydWU7CisJ CX0KIAl9CiAJZWxzZQogCXsKLQkJaW50CQkJbWlzc2F0dG51bTsKLQotCQkvKiBpZiB0aGVyZSBp cyBhIG1pc3NpbmcgdmFsdWVzIGFycmF5IHdlIG11c3QgcHJvY2VzcyB0aGVtIG9uZSBieSBvbmUg Ki8KLQkJZm9yIChtaXNzYXR0bnVtID0gc3RhcnRBdHROdW07Ci0JCQkgbWlzc2F0dG51bSA8IGxh c3RBdHROdW07Ci0JCQkgbWlzc2F0dG51bSsrKQorCQkvKiB1c2UgYXR0cm1pc3MgdG8gc2V0IHRo ZSBtaXNzaW5nIHZhbHVlcyAqLworCQlmb3IgKGludCBhdHRudW0gPSBzdGFydEF0dE51bTsgYXR0 bnVtIDwgbGFzdEF0dE51bTsgYXR0bnVtKyspCiAJCXsKLQkJCXNsb3QtPnR0c192YWx1ZXNbbWlz c2F0dG51bV0gPSBhdHRybWlzc1ttaXNzYXR0bnVtXS5hbV92YWx1ZTsKLQkJCXNsb3QtPnR0c19p c251bGxbbWlzc2F0dG51bV0gPSAhYXR0cm1pc3NbbWlzc2F0dG51bV0uYW1fcHJlc2VudDsKKwkJ CXNsb3QtPnR0c192YWx1ZXNbYXR0bnVtXSA9IGF0dHJtaXNzW2F0dG51bV0uYW1fdmFsdWU7CisJ CQlzbG90LT50dHNfaXNudWxsW2F0dG51bV0gPSAhYXR0cm1pc3NbYXR0bnVtXS5hbV9wcmVzZW50 OwogCQl9CiAJfQogfQogCiAvKgotICogc2xvdF9nZXRzb21lYXR0cnNfaW50IC0gd29ya2hvcnNl IGZvciBzbG90X2dldHNvbWVhdHRycygpCisgKiBzbG90X2dldHNvbWVhdHRyc19pbnQKKyAqCQll eHRlcm5hbCBmdW5jdGlvbiB0byBjYWxsIGdldHNvbWVhdHRycygpIGZvciB1c2UgaW4gSklUCiAg Ki8KIHZvaWQKIHNsb3RfZ2V0c29tZWF0dHJzX2ludChUdXBsZVRhYmxlU2xvdCAqc2xvdCwgaW50 IGF0dG51bSkKQEAgLTIwOTQsMjEgKzIxMDMsMTMgQEAgc2xvdF9nZXRzb21lYXR0cnNfaW50KFR1 cGxlVGFibGVTbG90ICpzbG90LCBpbnQgYXR0bnVtKQogCUFzc2VydChzbG90LT50dHNfbnZhbGlk IDwgYXR0bnVtKTsJLyogY2hlY2tlZCBpbiBzbG90X2dldHNvbWVhdHRycyAqLwogCUFzc2VydChh dHRudW0gPiAwKTsKIAotCWlmICh1bmxpa2VseShhdHRudW0gPiBzbG90LT50dHNfdHVwbGVEZXNj cmlwdG9yLT5uYXR0cykpCi0JCWVsb2coRVJST1IsICJpbnZhbGlkIGF0dHJpYnV0ZSBudW1iZXIg JWQiLCBhdHRudW0pOwotCiAJLyogRmV0Y2ggYXMgbWFueSBhdHRyaWJ1dGVzIGFzIHBvc3NpYmxl IGZyb20gdGhlIHVuZGVybHlpbmcgdHVwbGUuICovCiAJc2xvdC0+dHRzX29wcy0+Z2V0c29tZWF0 dHJzKHNsb3QsIGF0dG51bSk7CiAKIAkvKgotCSAqIElmIHRoZSB1bmRlcmx5aW5nIHR1cGxlIGRv ZXNuJ3QgaGF2ZSBlbm91Z2ggYXR0cmlidXRlcywgdHVwbGUKLQkgKiBkZXNjcmlwdG9yIG11c3Qg aGF2ZSB0aGUgbWlzc2luZyBhdHRyaWJ1dGVzLgorCSAqIEF2b2lkIHB1dHRpbmcgbmV3IGNvZGUg aGVyZSBhcyB0aGF0IHdvdWxkIHByZXZlbnQgdGhlIGNvbXBpbGVyIGZyb20KKwkgKiB1c2luZyB0 aGUgc2libGluZyBjYWxsIG9wdGltaXphdGlvbiBmb3IgdGhlIGFib3ZlIGZ1bmN0aW9uLgogCSAq LwotCWlmICh1bmxpa2VseShzbG90LT50dHNfbnZhbGlkIDwgYXR0bnVtKSkKLQl7Ci0JCXNsb3Rf Z2V0bWlzc2luZ2F0dHJzKHNsb3QsIHNsb3QtPnR0c19udmFsaWQsIGF0dG51bSk7Ci0JCXNsb3Qt PnR0c19udmFsaWQgPSBhdHRudW07Ci0JfQogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVw dGFibGUuaAppbmRleCBhMmRmZDcwN2U3OC4uM2IwOWFiYmY5OWYgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVw dGFibGUuaApAQCAtMTUxLDEwICsxNTEsMTIgQEAgc3RydWN0IFR1cGxlVGFibGVTbG90T3BzCiAK IAkvKgogCSAqIEZpbGwgdXAgZmlyc3QgbmF0dHMgZW50cmllcyBvZiB0dHNfdmFsdWVzIGFuZCB0 dHNfaXNudWxsIGFycmF5cyB3aXRoCi0JICogdmFsdWVzIGZyb20gdGhlIHR1cGxlIGNvbnRhaW5l ZCBpbiB0aGUgc2xvdC4gVGhlIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQKLQkgKiB3aXRoIG5hdHRz IG1vcmUgdGhhbiB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgYXZhaWxhYmxlIGluIHRoZSB0dXBs ZSwKLQkgKiBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBzZXQgdHRzX252YWxpZCB0byB0aGUgbnVt YmVyIG9mIHJldHVybmVkCi0JICogY29sdW1ucy4KKwkgKiB2YWx1ZXMgZnJvbSB0aGUgdHVwbGUg Y29udGFpbmVkIGluIHRoZSBzbG90IGFuZCBzZXQgdGhlIHNsb3QncworCSAqIHR0c19udmFsaWQg dG8gbmF0dHMuIFRoZSBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIHdpdGggYW4gbmF0dHMgdmFsdWUK KwkgKiBtb3JlIHRoYW4gdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIGF2YWlsYWJsZSBpbiB0aGUg dHVwbGUsIGluIHdoaWNoCisJICogY2FzZSB0aGUgZnVuY3Rpb24gbXVzdCBjYWxsIHNsb3RfZ2V0 bWlzc2luZ2F0dHJzKCkgdG8gcG9wdWxhdGUgdGhlCisJICogcmVtYWluaW5nIGF0dHJpYnV0ZXMu ICBUaGUgZnVuY3Rpb24gbXVzdCByYWlzZSBhbiBFUlJPUiBpZiAnbmF0dHMnIGlzCisJICogaGln aGVyIHRoYW4gdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIGluIHRoZSBzbG90J3MgVHVwbGVEZXNj LgogCSAqLwogCXZvaWQJCSgqZ2V0c29tZWF0dHJzKSAoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGlu dCBuYXR0cyk7CiAKQEAgLTM1Nyw4ICszNTksOSBAQCBleHRlcm4gdm9pZCBzbG90X2dldHNvbWVh dHRyc19pbnQoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGludCBhdHRudW0pOwogc3RhdGljIGlubGlu ZSB2b2lkCiBzbG90X2dldHNvbWVhdHRycyhUdXBsZVRhYmxlU2xvdCAqc2xvdCwgaW50IGF0dG51 bSkKIHsKKwkvKiBQb3B1bGF0ZSBzbG90IHdpdGggYXR0cmlidXRlcyB1cCB0byAnYXR0bnVtJywg aWYgaXQncyBub3QgYWxyZWFkeSAqLwogCWlmIChzbG90LT50dHNfbnZhbGlkIDwgYXR0bnVtKQot CQlzbG90X2dldHNvbWVhdHRyc19pbnQoc2xvdCwgYXR0bnVtKTsKKwkJc2xvdC0+dHRzX29wcy0+ Z2V0c29tZWF0dHJzKHNsb3QsIGF0dG51bSk7CiB9CiAKIC8qCi0tIAoyLjUxLjAKCg== --0000000000002deb23064bf63451 Content-Type: text/plain; charset="US-ASCII"; name="v11-0005-Reduce-size-of-CompactAttribute-struct-to-8-byte.patch" Content-Disposition: attachment; filename="v11-0005-Reduce-size-of-CompactAttribute-struct-to-8-byte.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm7rg38u5 RnJvbSAwOTlhNjE4NmUxODg2NDMyZWQyNDY1MzE3OGFiMWNlOTExMzkwMGM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogTW9uLCAyMyBGZWIgMjAyNiAwOTozOTozNyArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjExIDUv NV0gUmVkdWNlIHNpemUgb2YgQ29tcGFjdEF0dHJpYnV0ZSBzdHJ1Y3QgdG8gOCBieXRlcwoKUHJl dmlvdXNseSwgdGhpcyB3YXMgMTYgYnl0ZXMuICBXaXRoIHRoZSB1c2Ugb2Ygc29tZSBiaXRmbGFn cyBhbmQgYnkKcmVkdWNpbmcgdGhlIGF0dGNhY2hlb2ZmIGZpZWxkIHNpemUgdG8gYSAxNi1iaXQg dHlwZSwgd2UgY2FuIGhhbHZlIHRoZQpzaXplIG9mIHRoZSBzdHJ1Y3QuCgpJdCdzIHVubGlrZWx5 IHRoYXQgY2FjaGluZyB0aGUgb2Zmc2V0cyBmb3Igb2Zmc2V0cyBsYXJnZXIgdGhhbiB3aGF0IHdp bGwKZml0IGluIGEgMTYtYml0IGludCB3aWxsIGhlbHAgbXVjaCBhcyB0aGUgdHVwbGUgaXMgdmVy eSBsaWtlbHkgdG8gaGF2ZQpzb21lIG5vbi1maXhlZC13aWR0aCB0eXBlcyBhbnl3YXksIHRoZSBv ZmZzZXRzIG9mIHdoaWNoIHdlIGNhbm5vdCBjYWNoZS4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv Y29tbW9uL3R1cGRlc2MuYyB8IDEwICsrKysrKysrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNUdXBsZXMuYyAgIHwgMTYgKysrKysrKysrKysrLS0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL3R1 cGRlc2MuaCAgICAgICAgfCAxNiArKysrKysrKy0tLS0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDMw IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9jb21tb24vdHVwZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90dXBk ZXNjLmMKaW5kZXggYzY4NTYxMzM3ZDcuLjcxNDYxYmE2MDk2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvY29tbW9uL3R1cGRlc2MuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29t bW9uL3R1cGRlc2MuYwpAQCAtNTMwLDYgKzUzMCwxNiBAQCBUdXBsZURlc2NGaW5hbGl6ZShUdXBs ZURlc2MgdHVwZGVzYykKIAogCQlvZmYgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgY2F0dHIt PmF0dGFsaWduYnkpOwogCisJCS8qCisJCSAqIGF0dGNhY2hlb2ZmIGlzIGFuIGludDE2LCBzbyBk b24ndCB0cnkgdG8gY2FjaGUgYW55IG9mZnNldHMgbGFyZ2VyCisJCSAqIHRoYW4gd2lsbCBmaXQg aW4gdGhhdCB0eXBlLiAgQW55IGF0dHJpYnV0ZXMgd2hpY2ggYXJlIG9mZnNldCBtb3JlCisJCSAq IHRoYW4gMl4xNSBhcmUgbGlrZWx5IGR1ZSB0byB2YXJpYWJsZS1sZW5ndGggYXR0cmlidXRlcy4g IFNpbmNlIHdlCisJCSAqIGRvbid0IGNhY2hlIG9mZnNldHMgZm9yIG9yIGJleW9uZCB2YXJpYWJs ZS1sZW5ndGggYXR0cmlidXRlcywgdXNpbmcKKwkJICogYW4gaW50MTYgcmF0aGVyIHRoYW4gYW4g aW50MzIgaGVyZSBpcyB1bmxpa2VseSB0byBjb3N0IHVzIGFueXRoaW5nLgorCQkgKi8KKwkJaWYg KG9mZiA+IFBHX0lOVDE2X01BWCkKKwkJCWJyZWFrOworCiAJCWNhdHRyLT5hdHRjYWNoZW9mZiA9 IG9mZjsKIAogCQlvZmYgKz0gY2F0dHItPmF0dGxlbjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMu YwppbmRleCA4M2E4YzAyODk0ZC4uMzQ1YjIyY2E5MzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVw bGVzLmMKQEAgLTEwMTMsNiArMTAxMyw3IEBAIHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lu bGluZSB2b2lkCiBzbG90X2RlZm9ybV9oZWFwX3R1cGxlKFR1cGxlVGFibGVTbG90ICpzbG90LCBI ZWFwVHVwbGUgdHVwbGUsIHVpbnQzMiAqb2ZmcCwKIAkJCQkJICAgaW50IHJlcW5hdHRzKQogewor CUNvbXBhY3RBdHRyaWJ1dGUgKmNhdHRyczsKIAlDb21wYWN0QXR0cmlidXRlICpjYXR0cjsKIAlU dXBsZURlc2MJdHVwbGVEZXNjID0gc2xvdC0+dHRzX3R1cGxlRGVzY3JpcHRvcjsKIAlIZWFwVHVw bGVIZWFkZXIgdHVwID0gdHVwbGUtPnRfZGF0YTsKQEAgLTExMDEsNiArMTEwMiwxMyBAQCBzbG90 X2RlZm9ybV9oZWFwX3R1cGxlKFR1cGxlVGFibGVTbG90ICpzbG90LCBIZWFwVHVwbGUgdHVwbGUs IHVpbnQzMiAqb2ZmcCwKIAl2YWx1ZXMgPSBzbG90LT50dHNfdmFsdWVzOwogCXNsb3QtPnR0c19u dmFsaWQgPSByZXFuYXR0czsKIAorCS8qCisJICogV2Ugc3RvcmUgdGhlIHR1cGxlRGVzYydzIENv bXBhY3RBdHRyaWJ1dGUgYXJyYXkgaW4gJ2NhdHRycycgYXMgZ2NjCisJICogc2VlbXMgdG8gYmUg dW53aWxsaW5nIHRvIG9wdGltaXplIGFjY2Vzc2luZyB0aGUgQ29tcGFjdEF0dHJpYnV0ZQorCSAq IGVsZW1lbnQgZWZmaWNpZW50bHkgd2hlbiBhY2Nlc3NpbmcgaXQgdmlhIFR1cGxlRGVzY0NvbXBh Y3RBdHRyKCkuCisJICovCisJY2F0dHJzID0gdHVwbGVEZXNjLT5jb21wYWN0X2F0dHJzOworCiAJ LyogRW5zdXJlIHdlIGNhbGN1bGF0ZWQgdHAgY29ycmVjdGx5ICovCiAJQXNzZXJ0KHRwID09IChj aGFyICopIHR1cCArIHR1cC0+dF9ob2ZmKTsKIApAQCAtMTExMSw3ICsxMTE5LDcgQEAgc2xvdF9k ZWZvcm1faGVhcF90dXBsZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgSGVhcFR1cGxlIHR1cGxlLCB1 aW50MzIgKm9mZnAsCiAJCQlpbnQJCQlhdHRsZW47CiAKIAkJCWlzbnVsbFthdHRudW1dID0gZmFs c2U7Ci0JCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsK KwkJCWNhdHRyID0gJmNhdHRyc1thdHRudW1dOwogCQkJYXR0bGVuID0gY2F0dHItPmF0dGxlbjsK IAogCQkJLyogV2UgZG9uJ3QgZXhwZWN0IGFueSBub24tYnl2YWwgdHlwZXMgKi8KQEAgLTExNTYs NyArMTE2NCw3IEBAIHNsb3RfZGVmb3JtX2hlYXBfdHVwbGUoVHVwbGVUYWJsZVNsb3QgKnNsb3Qs IEhlYXBUdXBsZSB0dXBsZSwgdWludDMyICpvZmZwLAogCQlkbwogCQl7CiAJCQlpc251bGxbYXR0 bnVtXSA9IGZhbHNlOwotCQkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2Ms IGF0dG51bSk7CisJCQljYXR0ciA9ICZjYXR0cnNbYXR0bnVtXTsKIAogCQkJb2ZmID0gY2F0dHIt PmF0dGNhY2hlb2ZmOwogCQkJdmFsdWVzW2F0dG51bV0gPSBmZXRjaF9hdHRfbm9lcnIodHAgKyBv ZmYsCkBAIC0xMTgzLDcgKzExOTEsNyBAQCBzbG90X2RlZm9ybV9oZWFwX3R1cGxlKFR1cGxlVGFi bGVTbG90ICpzbG90LCBIZWFwVHVwbGUgdHVwbGUsIHVpbnQzMiAqb2ZmcCwKIAkJaW50CQkJYXR0 bGVuOwogCiAJCWlzbnVsbFthdHRudW1dID0gZmFsc2U7Ci0JCWNhdHRyID0gVHVwbGVEZXNjQ29t cGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pOworCQljYXR0ciA9ICZjYXR0cnNbYXR0bnVtXTsK IAkJYXR0bGVuID0gY2F0dHItPmF0dGxlbjsKIAogCQkvKgpAQCAtMTIxNiw3ICsxMjI0LDcgQEAg c2xvdF9kZWZvcm1faGVhcF90dXBsZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgSGVhcFR1cGxlIHR1 cGxlLCB1aW50MzIgKm9mZnAsCiAJCQljb250aW51ZTsKIAkJfQogCi0JCWNhdHRyID0gVHVwbGVE ZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pOworCQljYXR0ciA9ICZjYXR0cnNbYXR0 bnVtXTsKIAkJYXR0bGVuID0gY2F0dHItPmF0dGxlbjsKIAogCQkvKiBBcyBhYm92ZSwgd2UgZG9u J3QgZXhwZWN0IGNzdHJpbmdzICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHVw ZGVzYy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cGRlc2MuaAppbmRleCBhZDdiYzAxMzgxMi4u ZTk4MDM2YjU4YmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmgKKysr IGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cGRlc2MuaApAQCAtNTUsNyArNTUsNyBAQCB0eXBlZGVm IHN0cnVjdCBUdXBsZUNvbnN0cgogICoJCWRpcmVjdGx5IGFmdGVyIHRoZSBGb3JtRGF0YV9wZ19h dHRyaWJ1dGUgc3RydWN0IGlzIHBvcHVsYXRlZCBvcgogICoJCWFsdGVyZWQgaW4gYW55IHdheS4K ICAqCi0gKiBDdXJyZW50bHksIHRoaXMgc3RydWN0IGlzIDE2IGJ5dGVzLiAgQW55IGNvZGUgY2hh bmdlcyB3aGljaCBlbmxhcmdlIHRoaXMKKyAqIEN1cnJlbnRseSwgdGhpcyBzdHJ1Y3QgaXMgOCBi eXRlcy4gIEFueSBjb2RlIGNoYW5nZXMgd2hpY2ggZW5sYXJnZSB0aGlzCiAgKiBzdHJ1Y3Qgc2hv dWxkIGJlIGNvbnNpZGVyZWQgdmVyeSBjYXJlZnVsbHkuCiAgKgogICogQ29kZSB3aGljaCBtdXN0 IGFjY2VzcyBhIFR1cGxlRGVzYydzIGF0dHJpYnV0ZSBkYXRhIHNob3VsZCBhbHdheXMgbWFrZSB1 c2UKQEAgLTY3LDE3ICs2NywxNyBAQCB0eXBlZGVmIHN0cnVjdCBUdXBsZUNvbnN0cgogICovCiB0 eXBlZGVmIHN0cnVjdCBDb21wYWN0QXR0cmlidXRlCiB7Ci0JaW50MzIJCWF0dGNhY2hlb2ZmOwkv KiBmaXhlZCBvZmZzZXQgaW50byB0dXBsZSwgaWYga25vd24sIG9yIC0xICovCisJaW50MTYJCWF0 dGNhY2hlb2ZmOwkvKiBmaXhlZCBvZmZzZXQgaW50byB0dXBsZSwgaWYga25vd24sIG9yIC0xICov CiAJaW50MTYJCWF0dGxlbjsJCQkvKiBhdHRyIGxlbiBpbiBieXRlcyBvciAtMSA9IHZhcmxlbiwg LTIgPQogCQkJCQkJCQkgKiBjc3RyaW5nICovCiAJYm9vbAkJYXR0Ynl2YWw7CQkvKiBhcyBGb3Jt RGF0YV9wZ19hdHRyaWJ1dGUuYXR0Ynl2YWwgKi8KLQlib29sCQlhdHRpc3BhY2thYmxlOwkvKiBG b3JtRGF0YV9wZ19hdHRyaWJ1dGUuYXR0c3RvcmFnZSAhPQotCQkJCQkJCQkgKiBUWVBTVE9SQUdF X1BMQUlOICovCi0JYm9vbAkJYXR0aGFzbWlzc2luZzsJLyogYXMgRm9ybURhdGFfcGdfYXR0cmli dXRlLmF0dGhhc21pc3NpbmcgKi8KLQlib29sCQlhdHRpc2Ryb3BwZWQ7CS8qIGFzIEZvcm1EYXRh X3BnX2F0dHJpYnV0ZS5hdHRpc2Ryb3BwZWQgKi8KLQlib29sCQlhdHRnZW5lcmF0ZWQ7CS8qIEZv cm1EYXRhX3BnX2F0dHJpYnV0ZS5hdHRnZW5lcmF0ZWQgIT0gJ1wwJyAqLwotCWNoYXIJCWF0dG51 bGxhYmlsaXR5OyAvKiBzdGF0dXMgb2Ygbm90LW51bGwgY29uc3RyYWludCwgc2VlIGJlbG93ICov CiAJdWludDgJCWF0dGFsaWduYnk7CQkvKiBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgaW4gYnl0ZXMg Ki8KKwlib29sCQlhdHRpc3BhY2thYmxlOjE7CS8qIEZvcm1EYXRhX3BnX2F0dHJpYnV0ZS5hdHRz dG9yYWdlICE9CisJCQkJCQkJCQkgKiBUWVBTVE9SQUdFX1BMQUlOICovCisJYm9vbAkJYXR0aGFz bWlzc2luZzoxOwkvKiBhcyBGb3JtRGF0YV9wZ19hdHRyaWJ1dGUuYXR0aGFzbWlzc2luZyAqLwor CWJvb2wJCWF0dGlzZHJvcHBlZDoxOyAvKiBhcyBGb3JtRGF0YV9wZ19hdHRyaWJ1dGUuYXR0aXNk cm9wcGVkICovCisJYm9vbAkJYXR0Z2VuZXJhdGVkOjE7IC8qIEZvcm1EYXRhX3BnX2F0dHJpYnV0 ZS5hdHRnZW5lcmF0ZWQgIT0gJ1wwJyAqLworCWNoYXIJCWF0dG51bGxhYmlsaXR5OyAvKiBzdGF0 dXMgb2Ygbm90LW51bGwgY29uc3RyYWludCwgc2VlIGJlbG93ICovCiB9IENvbXBhY3RBdHRyaWJ1 dGU7CiAKIC8qIFZhbGlkIHZhbHVlcyBmb3IgQ29tcGFjdEF0dHJpYnV0ZS0+YXR0bnVsbGFiaWxp dHkgKi8KLS0gCjIuNTEuMAoK --0000000000002deb23064bf63451 Content-Type: text/plain; charset="US-ASCII"; name="v11-0003-Add-empty-TupleDescFinalize-function.patch" Content-Disposition: attachment; filename="v11-0003-Add-empty-TupleDescFinalize-function.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm7rg38q3 RnJvbSAzZmExNGYyNDExMzAzYjU0MzNkZDJlMzQzNGM4NDBhNzczOTVlMjEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMSBKYW4gMjAyNiAxNTo0MTozNyArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjExIDMv NV0gQWRkIGVtcHR5IFR1cGxlRGVzY0ZpbmFsaXplKCkgZnVuY3Rpb24KCkN1cnJlbnRseSBkb2Vz IG5vdGhpbmcsIGJ1dCB3aWxsIGluIGEgZnV0dXJlIGNvbW1pdC4KLS0tCiBjb250cmliL2RibGlu ay9kYmxpbmsuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArKysrCiBjb250cmli L3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMgICAgICAgfCAgMiArKwogY29u dHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYyAgICAgICAgICAgICAgIHwgIDIgKysK IHNyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYyAgICAgICAgICAgICAgICB8ICAx ICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdHVwZGVzYy5jICAgICAgICAgICAgICAgICB8 IDEzICsrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jICAgICAg ICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RzY2FuLmMg ICAgICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRp bHMuYyAgICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3 b3BoYXNlLmMgICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hsb2dmdW5jcy5jICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2JhY2t1cC9iYXNl YmFja3VwX2NvcHkuYyAgICAgICAgICAgICAgICB8ICAzICsrKwogc3JjL2JhY2tlbmQvY2F0YWxv Zy9pbmRleC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKysKIHNyYy9iYWNrZW5kL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uYyAgICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5k L2NhdGFsb2cvdG9hc3RpbmcuYyAgICAgICAgICAgICAgICAgICAgICB8ICA2ICsrKysrKwogc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwog c3JjL2JhY2tlbmQvY29tbWFuZHMvZnVuY3Rpb25jbWRzLmMgICAgICAgICAgICAgICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyAgICAgICAgICAgICAgICAgICAgIHwg IDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgICAgICAg IHwgIDQgKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NSRi5jICAgICAgICAgICAg ICAgICAgICAgIHwgIDIgKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyAgICAg ICAgICAgICAgICAgICB8ICA0ICsrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVGdW5jdGlv bnNjYW4uYyAgICAgICAgICAgICB8ICAyICsrCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVs YXRpb24uYyAgICAgICAgICAgICAgICAgfCAgNCArKystCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFy c2VfdGFyZ2V0LmMgICAgICAgICAgICAgICAgICAgfCAgMiArKwogLi4uL3JlcGxpY2F0aW9uL2xp YnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jIHwgIDEgKwogc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vd2Fsc2VuZGVyLmMgICAgICAgICAgICAgICAgIHwgIDUgKysrKysKIHNyYy9iYWNr ZW5kL3V0aWxzL2FkdC9hY2wuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxICsKIHNyYy9i YWNrZW5kL3V0aWxzL2FkdC9nZW5maWxlLmMgICAgICAgICAgICAgICAgICAgICB8ICAxICsKIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9sb2NrZnVuY3MuYyAgICAgICAgICAgICAgICAgICB8ICAxICsK IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9vcmRlcmVkc2V0YWdncy5jICAgICAgICAgICAgICB8ICAx ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jICAgICAgICAgICAgICAgICB8 ICA1ICsrKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3Jfb3AuYyAgICAgICAgICAg ICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAg ICAgICAgICAgfCAgOCArKysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvZm1nci9mdW5jYXBpLmMg ICAgICAgICAgICAgICAgICAgIHwgIDYgKysrKysrCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y19mdW5jcy5jICAgICAgICAgICAgICAgICAgfCAgNSArKysrKwogc3JjL2luY2x1ZGUvYWNjZXNz L3R1cGRlc2MuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwogc3JjL3BsL3BscGdzcWwv c3JjL3BsX2NvbXAuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKysKIC4uLi90ZXN0X2N1 c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV9maXhlZF9zdGF0cy5jICAgICB8ICAxICsKIHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9wcmVkdGVzdC90ZXN0X3ByZWR0ZXN0LmMgICAgICB8ICAxICsKIDM5IGZp bGVzIGNoYW5nZWQsIDEwMCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0 IGEvY29udHJpYi9kYmxpbmsvZGJsaW5rLmMgYi9jb250cmliL2RibGluay9kYmxpbmsuYwppbmRl eCAyNDk4ZDgwYzhlNy4uNDAzODk1MGE2ZWYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvZGJsaW5rL2Ri bGluay5jCisrKyBiL2NvbnRyaWIvZGJsaW5rL2RibGluay5jCkBAIC04ODEsNiArODgxLDcgQEAg bWF0ZXJpYWxpemVSZXN1bHQoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIFBHY29ubiAqY29ubiwg UEdyZXN1bHQgKnJlcykKIAkJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKDEpOwog CQlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsICJzdGF0dXMiLAog CQkJCQkJICAgVEVYVE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsK IAkJbnR1cGxlcyA9IDE7CiAJCW5maWVsZHMgPSAxOwogCX0KQEAgLTEwNDQsNiArMTA0NSw3IEBA IG1hdGVyaWFsaXplUXVlcnlSZXN1bHQoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQl0dXBk ZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoMSk7CiAJCQlUdXBsZURlc2NJbml0RW50cnko dHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsICJzdGF0dXMiLAogCQkJCQkJCSAgIFRFWFRPSUQsIC0x LCAwKTsKKwkJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCQkJYXR0aW5tZXRhID0gVHVw bGVEZXNjR2V0QXR0SW5NZXRhZGF0YSh0dXBkZXNjKTsKIAogCQkJb2xkY29udGV4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhyc2luZm8tPmVjb250ZXh0LT5lY3h0X3Blcl9xdWVyeV9tZW1vcnkp OwpAQCAtMTUyOSw2ICsxNTMxLDggQEAgZGJsaW5rX2dldF9wa2V5KFBHX0ZVTkNUSU9OX0FSR1Mp CiAJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMiwgImNvbG5hbWUi LAogCQkJCQkJICAgVEVYVE9JRCwgLTEsIDApOwogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRl c2MpOworCiAJCS8qCiAJCSAqIEdlbmVyYXRlIGF0dHJpYnV0ZSBtZXRhZGF0YSBuZWVkZWQgbGF0 ZXIgdG8gcHJvZHVjZSB0dXBsZXMgZnJvbSByYXcKIAkJICogQyBzdHJpbmdzCmRpZmYgLS1naXQg YS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMgYi9jb250cmli L3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKaW5kZXggODliODY4NTUyNDMu LmE2YjRmYjUyNTJiIDEwMDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZl cmNhY2hlX3BhZ2VzLmMKKysrIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNo ZV9wYWdlcy5jCkBAIC0xNzQsNiArMTc0LDcgQEAgcGdfYnVmZmVyY2FjaGVfcGFnZXMoUEdfRlVO Q1RJT05fQVJHUykKIAkJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVy KSA5LCAicGlubmluZ19iYWNrZW5kcyIsCiAJCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOwogCisJ CVR1cGxlRGVzY0ZpbmFsaXplKHR1cGxlZGVzYyk7CiAJCWZjdHgtPnR1cGRlc2MgPSBCbGVzc1R1 cGxlRGVzYyh0dXBsZWRlc2MpOwogCiAJCS8qIEFsbG9jYXRlIE5CdWZmZXJzIHdvcnRoIG9mIEJ1 ZmZlckNhY2hlUGFnZXNSZWMgcmVjb3Jkcy4gKi8KQEAgLTQ0Miw2ICs0NDMsNyBAQCBwZ19idWZm ZXJjYWNoZV9vc19wYWdlc19pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgYm9vbCBp bmNsdWRlX251bWEpCiAJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVy KSAzLCAibnVtYV9ub2RlIiwKIAkJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKIAorCQlUdXBsZURl c2NGaW5hbGl6ZSh0dXBsZWRlc2MpOwogCQlmY3R4LT50dXBkZXNjID0gQmxlc3NUdXBsZURlc2Mo dHVwbGVkZXNjKTsKIAkJZmN0eC0+aW5jbHVkZV9udW1hID0gaW5jbHVkZV9udW1hOwogCmRpZmYg LS1naXQgYS9jb250cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jIGIvY29udHJpYi9w Z192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYwppbmRleCA5YmMzYTc4NGJmNy4uZGZhYjBiNjRj ZjUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfdmlzaWJpbGl0eS9wZ192aXNpYmlsaXR5LmMKKysr IGIvY29udHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYwpAQCAtNDY5LDYgKzQ2OSw4 IEBAIHBnX3Zpc2liaWxpdHlfdHVwZGVzYyhib29sIGluY2x1ZGVfYmxrbm8sIGJvb2wgaW5jbHVk ZV9wZCkKIAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsICsrYSwgInBkX2FsbF92aXNpYmxl IiwgQk9PTE9JRCwgLTEsIDApOwogCUFzc2VydChhID09IG1heGF0dHIpOwogCisJVHVwbGVEZXNj RmluYWxpemUodHVwZGVzYyk7CisKIAlyZXR1cm4gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiB9 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYwppbmRleCA2OWMyMzNjNjJlYi4uNzQy YWMwODlhMjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX3R1cGxlLmMKQEAgLTg0LDYgKzg0 LDcgQEAgYnJ0dXBsZV9kaXNrX3R1cGRlc2MoQnJpbkRlc2MgKmJyZGVzYykKIAogCQlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKIAorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsK IAkJYnJkZXNjLT5iZF9kaXNrdGRlc2MgPSB0dXBkZXNjOwogCX0KIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90dXBkZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29t bW9uL3R1cGRlc2MuYwppbmRleCBiNjlkMTBmMGE0NS4uMjEzNzM4NWE4MzMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdHVwZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9jb21tb24vdHVwZGVzYy5jCkBAIC0yMjEsNiArMjIxLDkgQEAgQ3JlYXRlVHVwbGVEZXNj KGludCBuYXR0cywgRm9ybV9wZ19hdHRyaWJ1dGUgKmF0dHJzKQogCQltZW1jcHkoVHVwbGVEZXNj QXR0cihkZXNjLCBpKSwgYXR0cnNbaV0sIEFUVFJJQlVURV9GSVhFRF9QQVJUX1NJWkUpOwogCQlw b3B1bGF0ZV9jb21wYWN0X2F0dHJpYnV0ZShkZXNjLCBpKTsKIAl9CisKKwlUdXBsZURlc2NGaW5h bGl6ZShkZXNjKTsKKwogCXJldHVybiBkZXNjOwogfQogCkBAIC0yNjUsNiArMjY4LDggQEAgQ3Jl YXRlVHVwbGVEZXNjQ29weShUdXBsZURlc2MgdHVwZGVzYykKIAlkZXNjLT50ZHR5cGVpZCA9IHR1 cGRlc2MtPnRkdHlwZWlkOwogCWRlc2MtPnRkdHlwbW9kID0gdHVwZGVzYy0+dGR0eXBtb2Q7CiAK KwlUdXBsZURlc2NGaW5hbGl6ZShkZXNjKTsKKwogCXJldHVybiBkZXNjOwogfQogCkBAIC0zMTEs NiArMzE2LDggQEAgQ3JlYXRlVHVwbGVEZXNjVHJ1bmNhdGVkQ29weShUdXBsZURlc2MgdHVwZGVz YywgaW50IG5hdHRzKQogCWRlc2MtPnRkdHlwZWlkID0gdHVwZGVzYy0+dGR0eXBlaWQ7CiAJZGVz Yy0+dGR0eXBtb2QgPSB0dXBkZXNjLT50ZHR5cG1vZDsKIAorCVR1cGxlRGVzY0ZpbmFsaXplKGRl c2MpOworCiAJcmV0dXJuIGRlc2M7CiB9CiAKQEAgLTM5Niw2ICs0MDMsOCBAQCBDcmVhdGVUdXBs ZURlc2NDb3B5Q29uc3RyKFR1cGxlRGVzYyB0dXBkZXNjKQogCWRlc2MtPnRkdHlwZWlkID0gdHVw ZGVzYy0+dGR0eXBlaWQ7CiAJZGVzYy0+dGR0eXBtb2QgPSB0dXBkZXNjLT50ZHR5cG1vZDsKIAor CVR1cGxlRGVzY0ZpbmFsaXplKGRlc2MpOworCiAJcmV0dXJuIGRlc2M7CiB9CiAKQEAgLTQzOCw2 ICs0NDcsOCBAQCBUdXBsZURlc2NDb3B5KFR1cGxlRGVzYyBkc3QsIFR1cGxlRGVzYyBzcmMpCiAJ ICogc291cmNlJ3MgcmVmY291bnQgd291bGQgYmUgd3JvbmcgaW4gYW55IGNhc2UuKQogCSAqLwog CWRzdC0+dGRyZWZjb3VudCA9IC0xOworCisJVHVwbGVEZXNjRmluYWxpemUoZHN0KTsKIH0KIAog LyoKQEAgLTEwNjUsNiArMTA3Niw4IEBAIEJ1aWxkRGVzY0Zyb21MaXN0cyhjb25zdCBMaXN0ICpu YW1lcywgY29uc3QgTGlzdCAqdHlwZXMsIGNvbnN0IExpc3QgKnR5cG1vZHMsIGNvCiAJCVR1cGxl RGVzY0luaXRFbnRyeUNvbGxhdGlvbihkZXNjLCBhdHRudW0sIGF0dGNvbGxhdGlvbik7CiAJfQog CisJVHVwbGVEZXNjRmluYWxpemUoZGVzYyk7CisKIAlyZXR1cm4gZGVzYzsKIH0KIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvZ2luL2dpbnV0aWwuYwppbmRleCBmZjkyNzI3OWNjMy4uZmU3Yjk4NGZmMzIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9naW4vZ2ludXRpbC5jCkBAIC0xMjksNiArMTI5LDcgQEAgaW5pdEdpblN0YXRlKEdpblN0 YXRlICpzdGF0ZSwgUmVsYXRpb24gaW5kZXgpCiAJCQkJCQkJICAgYXR0ci0+YXR0bmRpbXMpOwog CQkJVHVwbGVEZXNjSW5pdEVudHJ5Q29sbGF0aW9uKHN0YXRlLT50dXBkZXNjW2ldLCAoQXR0ck51 bWJlcikgMiwKIAkJCQkJCQkJCQlhdHRyLT5hdHRjb2xsYXRpb24pOworCQkJVHVwbGVEZXNjRmlu YWxpemUoc3RhdGUtPnR1cGRlc2NbaV0pOwogCQl9CiAKIAkJLyoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9n aXN0c2Nhbi5jCmluZGV4IGYyM2JjNGE2NzU3Li5jNjVmOTNhYmRhZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2lzdC9naXN0c2Nhbi5jCkBAIC0yMDEsNiArMjAxLDcgQEAgZ2lzdHJlc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5LZXkga2V5LCBpbnQgbmtleXMsCiAJCQkJCQkJCQkJCSBhdHRubyAtIDEp LT5hdHR0eXBpZCwKIAkJCQkJCQkgICAtMSwgMCk7CiAJCX0KKwkJVHVwbGVEZXNjRmluYWxpemUo c28tPmdpc3RzdGF0ZS0+ZmV0Y2hUdXBkZXNjKTsKIAkJc2Nhbi0+eHNfaGl0dXBkZXNjID0gc28t Pmdpc3RzdGF0ZS0+ZmV0Y2hUdXBkZXNjOwogCiAJCS8qIEFsc28gY3JlYXRlIGEgbWVtb3J5IGNv bnRleHQgdGhhdCB3aWxsIGhvbGQgdGhlIHJldHVybmVkIHR1cGxlcyAqLwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3NwZ2lzdC9zcGd1dGlscy5jCmluZGV4IDlmNTM3OWI4N2FjLi5iMjQ2ZTgxMjdkYiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwpAQCAtMzQwLDYgKzM0MCw3IEBAIGdldFNwR2lz dFR1cGxlRGVzYyhSZWxhdGlvbiBpbmRleCwgU3BHaXN0VHlwZURlc2MgKmtleVR5cGUpCiAJCQlU dXBsZURlc2NDb21wYWN0QXR0cihvdXRUdXBEZXNjLCBpKS0+YXR0Y2FjaGVvZmYgPSAtMTsKIAog CQlwb3B1bGF0ZV9jb21wYWN0X2F0dHJpYnV0ZShvdXRUdXBEZXNjLCBzcGdLZXlDb2x1bW4pOwor CQlUdXBsZURlc2NGaW5hbGl6ZShvdXRUdXBEZXNjKTsKIAl9CiAJcmV0dXJuIG91dFR1cERlc2M7 CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwppbmRleCBlNDM0MGI1OTY0MC4u N2Y0ZWQwMmE2YjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3Bo YXNlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwpAQCAtNzQ0 LDYgKzc0NCw3IEBAIHBnX3ByZXBhcmVkX3hhY3QoUEdfRlVOQ1RJT05fQVJHUykKIAkJVHVwbGVE ZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA1LCAiZGJpZCIsCiAJCQkJCQkgICBP SURPSUQsIC0xLCAwKTsKIAorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJZnVuY2N0 eC0+dHVwbGVfZGVzYyA9IEJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCiAJCS8qCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2dmdW5jcy5jCmluZGV4IDJlZmU0MTA1ZWZiLi5iNmJjNjE2Yzc0 YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMKQEAgLTQwMCw2ICs0MDAs NyBAQCBwZ193YWxmaWxlX25hbWVfb2Zmc2V0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJVHVwbGVEZXNj SW5pdEVudHJ5KHJlc3VsdFR1cGxlRGVzYywgKEF0dHJOdW1iZXIpIDIsICJmaWxlX29mZnNldCIs CiAJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKIAorCVR1cGxlRGVzY0ZpbmFsaXplKHJlc3VsdFR1 cGxlRGVzYyk7CiAJcmVzdWx0VHVwbGVEZXNjID0gQmxlc3NUdXBsZURlc2MocmVzdWx0VHVwbGVE ZXNjKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cF9j b3B5LmMgYi9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cF9jb3B5LmMKaW5kZXggMDdmNThi MzlkOGMuLjZjMzQ1M2VmZDgwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJh Y2t1cF9jb3B5LmMKKysrIGIvc3JjL2JhY2tlbmQvYmFja3VwL2Jhc2ViYWNrdXBfY29weS5jCkBA IC0zNTcsNiArMzU3LDggQEAgU2VuZFhsb2dSZWNQdHJSZXN1bHQoWExvZ1JlY1B0ciBwdHIsIFRp bWVMaW5lSUQgdGxpKQogCSAqLwogCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywg KEF0dHJOdW1iZXIpIDIsICJ0bGkiLCBJTlQ4T0lELCAtMSwgMCk7CiAKKwlUdXBsZURlc2NGaW5h bGl6ZSh0dXBkZXNjKTsKKwogCS8qIHNlbmQgUm93RGVzY3JpcHRpb24gKi8KIAl0c3RhdGUgPSBi ZWdpbl90dXBfb3V0cHV0X3R1cGRlc2MoZGVzdCwgdHVwZGVzYywgJlRUU09wc1ZpcnR1YWwpOwog CkBAIC0zODgsNiArMzkwLDcgQEAgU2VuZFRhYmxlc3BhY2VMaXN0KExpc3QgKnRhYmxlc3BhY2Vz KQogCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsICJz cGNvaWQiLCBPSURPSUQsIC0xLCAwKTsKIAlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRl c2MsIChBdHRyTnVtYmVyKSAyLCAic3BjbG9jYXRpb24iLCBURVhUT0lELCAtMSwgMCk7CiAJVHVw bGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMywgInNpemUiLCBJ TlQ4T0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAKIAkvKiBzZW5k IFJvd0Rlc2NyaXB0aW9uICovCiAJdHN0YXRlID0gYmVnaW5fdHVwX291dHB1dF90dXBkZXNjKGRl c3QsIHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvaW5kZXguYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwppbmRleCA0M2RlNDJj ZTM5ZS4uNzVlOTdmYjM5NGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXgu YworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKQEAgLTQ4MSw2ICs0ODEsOCBAQCBD b25zdHJ1Y3RUdXBsZURlc2NyaXB0b3IoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQlwb3B1bGF0 ZV9jb21wYWN0X2F0dHJpYnV0ZShpbmRleFR1cERlc2MsIGkpOwogCX0KIAorCVR1cGxlRGVzY0Zp bmFsaXplKGluZGV4VHVwRGVzYyk7CisKIAlyZXR1cm4gaW5kZXhUdXBEZXNjOwogfQogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggOWE0NzkxYzU3M2UuLmZhMzUzYTBkZDM3 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0xMjMwLDYgKzEyMzAsNyBA QCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCVR1cGxlRGVz Y0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgNCwgInF1YWwiLAogCQkJCQkJICAgUEdf Tk9ERV9UUkVFT0lELCAtMSwgMCk7CiAKKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJ CWZ1bmNjdHgtPnR1cGxlX2Rlc2MgPSBCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsKIAkJZnVuY2N0 eC0+dXNlcl9mY3R4ID0gdGFibGVfaW5mb3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvdG9hc3RpbmcuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYwppbmRleCBj NzhkY2VhOThjMS4uMDc4YTFjZjUxMjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cv dG9hc3RpbmcuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMKQEAgLTIyOSw2 ICsyMjksMTIgQEAgY3JlYXRlX3RvYXN0X3RhYmxlKFJlbGF0aW9uIHJlbCwgT2lkIHRvYXN0T2lk LCBPaWQgdG9hc3RJbmRleE9pZCwKIAlUdXBsZURlc2NBdHRyKHR1cGRlc2MsIDEpLT5hdHRjb21w cmVzc2lvbiA9IEludmFsaWRDb21wcmVzc2lvbk1ldGhvZDsKIAlUdXBsZURlc2NBdHRyKHR1cGRl c2MsIDIpLT5hdHRjb21wcmVzc2lvbiA9IEludmFsaWRDb21wcmVzc2lvbk1ldGhvZDsKIAorCXBv cHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKHR1cGRlc2MsIDApOworCXBvcHVsYXRlX2NvbXBhY3Rf YXR0cmlidXRlKHR1cGRlc2MsIDEpOworCXBvcHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKHR1cGRl c2MsIDIpOworCisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CisKIAkvKgogCSAqIFRvYXN0 IHRhYmxlcyBmb3IgcmVndWxhciByZWxhdGlvbnMgZ28gaW4gcGdfdG9hc3Q7IHRob3NlIGZvciB0 ZW1wCiAJICogcmVsYXRpb25zIGdvIGludG8gdGhlIHBlci1iYWNrZW5kIHRlbXAtdG9hc3QtdGFi bGUgbmFtZXNwYWNlLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IDkzOTE4YTIyM2I4Li41Zjky MmMzZjVjMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMjgxLDYgKzI4MSw3IEBAIEV4cGxh aW5SZXN1bHREZXNjKEV4cGxhaW5TdG10ICpzdG10KQogCXR1cGRlc2MgPSBDcmVhdGVUZW1wbGF0 ZVR1cGxlRGVzYygxKTsKIAlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIp IDEsICJRVUVSWSBQTEFOIiwKIAkJCQkJICAgcmVzdWx0X3R5cGUsIC0xLCAwKTsKKwlUdXBsZURl c2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAlyZXR1cm4gdHVwZGVzYzsKIH0KIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvZnVuY3Rpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9mdW5jdGlvbmNtZHMuYwppbmRleCAyNDIzNzJiMWU2OC4uM2FmZDc2MmU5ZGMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Z1bmN0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2Z1bmN0aW9uY21kcy5jCkBAIC0yNDI0LDYgKzI0MjQsNyBAQCBDYWxsU3RtdFJl c3VsdERlc2MoQ2FsbFN0bXQgKnN0bXQpCiAJCQkJCQkJICAgLTEsCiAJCQkJCQkJICAgMCk7CiAJ CX0KKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJfQogCiAJcmV0dXJuIHR1cGRlc2M7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvc2VxdWVuY2UuYwppbmRleCBlMWI4MDhiYmI2MC4uNTUxNjY3NjUwYmEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvc2VxdWVuY2UuYwpAQCAtMTgwOCw2ICsxODA4LDcgQEAgcGdfZ2V0X3NlcXVl bmNlX2RhdGEoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJICAgQk9PTE9JRCwgLTEsIDApOwogCVR1 cGxlRGVzY0luaXRFbnRyeShyZXN1bHRUdXBsZURlc2MsIChBdHRyTnVtYmVyKSAzLCAicGFnZV9s c24iLAogCQkJCQkgICBMU05PSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZShyZXN1bHRU dXBsZURlc2MpOwogCXJlc3VsdFR1cGxlRGVzYyA9IEJsZXNzVHVwbGVEZXNjKHJlc3VsdFR1cGxl RGVzYyk7CiAKIAlzZXFyZWwgPSB0cnlfcmVsYXRpb25fb3BlbihyZWxpZCwgQWNjZXNzU2hhcmVM b2NrKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggYjA0YjBkYmQyYTAuLjg2NzhjZWNk NTNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMTAzMCw2ICsxMDMwLDggQEAgRGVm aW5lUmVsYXRpb24oQ3JlYXRlU3RtdCAqc3RtdCwgY2hhciByZWxraW5kLCBPaWQgb3duZXJJZCwK IAkJfQogCX0KIAorCVR1cGxlRGVzY0ZpbmFsaXplKGRlc2NyaXB0b3IpOworCiAJLyoKIAkgKiBG b3IgcmVsYXRpb25zIHdpdGggdGFibGUgQU0gYW5kIHBhcnRpdGlvbmVkIHRhYmxlcywgc2VsZWN0 IGFjY2VzcwogCSAqIG1ldGhvZCB0byB1c2U6IGFuIGV4cGxpY2l0bHkgaW5kaWNhdGVkIG9uZSwg b3IgKGluIHRoZSBjYXNlIG9mIGEKQEAgLTE0NTgsNiArMTQ2MCw4IEBAIEJ1aWxkRGVzY0ZvclJl bGF0aW9uKGNvbnN0IExpc3QgKmNvbHVtbnMpCiAJCXBvcHVsYXRlX2NvbXBhY3RfYXR0cmlidXRl KGRlc2MsIGF0dG51bSAtIDEpOwogCX0KIAorCVR1cGxlRGVzY0ZpbmFsaXplKGRlc2MpOworCiAJ cmV0dXJuIGRlc2M7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYwppbmRleCAxMjkwZGYxMGM2Zi4uOGU5MjBh NzIzNzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy93YWl0LmMKQEAgLTMzOCw1ICszMzgsNiBAQCBXYWl0U3RtdFJlc3Vs dERlc2MoV2FpdFN0bXQgKnN0bXQpCiAJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNj KDEpOwogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgInN0YXR1 cyIsCiAJCQkJCSAgIFRFWFRPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNj KTsKIAlyZXR1cm4gdHVwZGVzYzsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNTUkYuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNTUkYuYwppbmRleCBhMGIxMTFk YzBlNC4uYjQ4MWU1MGFjZmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNT UkYuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjU1JGLmMKQEAgLTI3Miw2ICsyNzIs NyBAQCBFeGVjTWFrZVRhYmxlRnVuY3Rpb25SZXN1bHQoU2V0RXhwclN0YXRlICpzZXRleHByLAog CQkJCQkJCQkJICAgZnVuY3JldHR5cGUsCiAJCQkJCQkJCQkgICAtMSwKIAkJCQkJCQkJCSAgIDAp OworCQkJCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJCQkJcnNpbmZvLnNldERlc2Mg PSB0dXBkZXNjOwogCQkJCX0KIAkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7 CkBAIC03NzYsNiArNzc3LDcgQEAgaW5pdF9zZXhwcihPaWQgZm9pZCwgT2lkIGlucHV0X2NvbGxh dGlvbiwgRXhwciAqbm9kZSwKIAkJCQkJCQkgICBmdW5jcmV0dHlwZSwKIAkJCQkJCQkgICAtMSwK IAkJCQkJCQkgICAwKTsKKwkJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCQkJc2V4cHIt PmZ1bmNSZXN1bHREZXNjID0gdHVwZGVzYzsKIAkJCXNleHByLT5mdW5jUmV0dXJuc1R1cGxlID0g ZmFsc2U7CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYwppbmRleCA1YjliYjIxZmE3Yi4u YmI5OTcxODI0ODEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMu YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMKQEAgLTIxNzQsNiArMjE3 NCw4IEBAIEV4ZWNUeXBlRnJvbVRMSW50ZXJuYWwoTGlzdCAqdGFyZ2V0TGlzdCwgYm9vbCBza2lw anVuaykKIAkJY3VyX3Jlc25vKys7CiAJfQogCisJVHVwbGVEZXNjRmluYWxpemUodHlwZUluZm8p OworCiAJcmV0dXJuIHR5cGVJbmZvOwogfQogCkBAIC0yMjA4LDYgKzIyMTAsOCBAQCBFeGVjVHlw ZUZyb21FeHByTGlzdChMaXN0ICpleHByTGlzdCkKIAkJY3VyX3Jlc25vKys7CiAJfQogCisJVHVw bGVEZXNjRmluYWxpemUodHlwZUluZm8pOworCiAJcmV0dXJuIHR5cGVJbmZvOwogfQogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlRnVuY3Rpb25zY2FuLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlRnVuY3Rpb25zY2FuLmMKaW5kZXggNjNlNjA1ZTFmODEuLmZlYjgy ZDY0OTY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlRnVuY3Rpb25zY2Fu LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUZ1bmN0aW9uc2Nhbi5jCkBAIC00MTQs NiArNDE0LDcgQEAgRXhlY0luaXRGdW5jdGlvblNjYW4oRnVuY3Rpb25TY2FuICpub2RlLCBFU3Rh dGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJCQlUdXBsZURlc2NJbml0RW50cnlDb2xsYXRpb24o dHVwZGVzYywKIAkJCQkJCQkJCQkJKEF0dHJOdW1iZXIpIDEsCiAJCQkJCQkJCQkJCWV4cHJDb2xs YXRpb24oZnVuY2V4cHIpKTsKKwkJCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJCX0K IAkJCWVsc2UKIAkJCXsKQEAgLTQ4NSw2ICs0ODYsNyBAQCBFeGVjSW5pdEZ1bmN0aW9uU2NhbihG dW5jdGlvblNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkJCQkJCSAg IDApOwogCQl9CiAKKwkJVHVwbGVEZXNjRmluYWxpemUoc2Nhbl90dXBkZXNjKTsKIAkJQXNzZXJ0 KGF0dG5vID09IG5hdHRzKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV9yZWxhdGlvbi5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3JlbGF0aW9uLmMKaW5k ZXggZTAwM2RiNTIwZGUuLjljNDE1ZTE2NmVlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJz ZXIvcGFyc2VfcmVsYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRp b24uYwpAQCAtMTg4Myw2ICsxODgzLDcgQEAgYWRkUmFuZ2VUYWJsZUVudHJ5Rm9yRnVuY3Rpb24o UGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJVHVwbGVEZXNjSW5pdEVudHJ5Q29sbGF0aW9uKHR1cGRl c2MsCiAJCQkJCQkJCQkJKEF0dHJOdW1iZXIpIDEsCiAJCQkJCQkJCQkJZXhwckNvbGxhdGlvbihm dW5jZXhwcikpOworCQkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJCX0KIAkJZWxzZSBp ZiAoZnVuY3R5cGNsYXNzID09IFRZUEVGVU5DX1JFQ09SRCkKIAkJewpAQCAtMTk0MCw2ICsxOTQx LDcgQEAgYWRkUmFuZ2VUYWJsZUVudHJ5Rm9yRnVuY3Rpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLAog CiAJCQkJaSsrOwogCQkJfQorCQkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAKIAkJCS8q CiAJCQkgKiBFbnN1cmUgdGhhdCB0aGUgY29sZGVmbGlzdCBkZWZpbmVzIGEgbGVnYWwgc2V0IG9m IG5hbWVzIChubwpAQCAtMjAwOCw3ICsyMDEwLDcgQEAgYWRkUmFuZ2VUYWJsZUVudHJ5Rm9yRnVu Y3Rpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCSAgIDApOwogCQkJLyogbm8gbmVlZCB0 byBzZXQgY29sbGF0aW9uICovCiAJCX0KLQorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsK IAkJQXNzZXJ0KG5hdHRzID09IHRvdGFsYXR0cyk7CiAJfQogCWVsc2UKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV90YXJnZXQuYwppbmRleCBkYmY1YjJiNWMwMS4uYTAzZDgyYzA1NDAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIv cGFyc2VfdGFyZ2V0LmMKQEAgLTE1NzIsNiArMTU3Miw4IEBAIGV4cGFuZFJlY29yZFZhcmlhYmxl KFBhcnNlU3RhdGUgKnBzdGF0ZSwgVmFyICp2YXIsIGludCBsZXZlbHN1cCkKIAkJfQogCQlBc3Nl cnQobG5hbWUgPT0gTlVMTCAmJiBsdmFyID09IE5VTEwpOwkvKiBsaXN0cyBzYW1lIGxlbmd0aD8g Ki8KIAorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBsZURlc2MpOworCiAJCXJldHVybiB0dXBsZURl c2M7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJl Y2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBx d2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jCmluZGV4IDdjODYzOWIzMmU5Li45ZjA0Yzll ZDI1ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxyZWNlaXZl ci9saWJwcXdhbHJlY2VpdmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3 YWxyZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMKQEAgLTEwNzMsNiArMTA3Myw3IEBAIGxpYnBx cmN2X3Byb2Nlc3NUdXBsZXMoUEdyZXN1bHQgKnBncmVzLCBXYWxSY3ZFeGVjUmVzdWx0ICp3YWxy ZXMsCiAJZm9yIChjb2xuID0gMDsgY29sbiA8IG5SZXRUeXBlczsgY29sbisrKQogCQlUdXBsZURl c2NJbml0RW50cnkod2FscmVzLT50dXBsZWRlc2MsIChBdHRyTnVtYmVyKSBjb2xuICsgMSwKIAkJ CQkJCSAgIFBRZm5hbWUocGdyZXMsIGNvbG4pLCByZXRUeXBlc1tjb2xuXSwgLTEsIDApOworCVR1 cGxlRGVzY0ZpbmFsaXplKHdhbHJlcy0+dHVwbGVkZXNjKTsKIAlhdHRpbm1ldGEgPSBUdXBsZURl c2NHZXRBdHRJbk1ldGFkYXRhKHdhbHJlcy0+dHVwbGVkZXNjKTsKIAogCS8qIE5vIHBvaW50IGlu IGRvaW5nIG1vcmUgaGVyZSBpZiB0aGVyZSB3ZXJlIG5vIHR1cGxlcyByZXR1cm5lZC4gKi8KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKaW5kZXggMmNkZThlYmM3MjkuLjMzYTllOGQ3ZjIx IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYwpAQCAtNDUxLDYgKzQ1MSw3IEBAIElk ZW50aWZ5U3lzdGVtKHZvaWQpCiAJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7CiAJVHVwbGVEZXNj SW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgNCwgImRibmFtZSIsCiAJCQkJ CQkJICBURVhUT0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAKIAkv KiBwcmVwYXJlIGZvciBwcm9qZWN0aW9uIG9mIHR1cGxlcyAqLwogCXRzdGF0ZSA9IGJlZ2luX3R1 cF9vdXRwdXRfdHVwZGVzYyhkZXN0LCB0dXBkZXNjLCAmVFRTT3BzVmlydHVhbCk7CkBAIC00OTYs NiArNDk3LDcgQEAgUmVhZFJlcGxpY2F0aW9uU2xvdChSZWFkUmVwbGljYXRpb25TbG90Q21kICpj bWQpCiAJLyogVGltZUxpbmVJRCBpcyB1bnNpZ25lZCwgc28gaW50NCBpcyBub3Qgd2lkZSBlbm91 Z2guICovCiAJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikg MywgInJlc3RhcnRfdGxpIiwKIAkJCQkJCQkgIElOVDhPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NG aW5hbGl6ZSh0dXBkZXNjKTsKIAogCW1lbXNldChudWxscywgdHJ1ZSwgUkVBRF9SRVBMSUNBVElP Tl9TTE9UX0NPTFMgKiBzaXplb2YoYm9vbCkpOwogCkBAIC01OTgsNiArNjAwLDcgQEAgU2VuZFRp bWVMaW5lSGlzdG9yeShUaW1lTGluZUhpc3RvcnlDbWQgKmNtZCkKIAl0dXBkZXNjID0gQ3JlYXRl VGVtcGxhdGVUdXBsZURlc2MoMik7CiAJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNj LCAoQXR0ck51bWJlcikgMSwgImZpbGVuYW1lIiwgVEVYVE9JRCwgLTEsIDApOwogCVR1cGxlRGVz Y0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDIsICJjb250ZW50IiwgVEVY VE9JRCwgLTEsIDApOworCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCiAJVExIaXN0b3J5 RmlsZU5hbWUoaGlzdGZuYW1lLCBjbWQtPnRpbWVsaW5lKTsKIAlUTEhpc3RvcnlGaWxlUGF0aChw YXRoLCBjbWQtPnRpbWVsaW5lKTsKQEAgLTEwMTUsNiArMTAxOCw3IEBAIFN0YXJ0UmVwbGljYXRp b24oU3RhcnRSZXBsaWNhdGlvbkNtZCAqY21kKQogCQkJCQkJCQkgIElOVDhPSUQsIC0xLCAwKTsK IAkJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMiwgIm5l eHRfdGxpX3N0YXJ0cG9zIiwKIAkJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7CisJCVR1cGxlRGVz Y0ZpbmFsaXplKHR1cGRlc2MpOwogCiAJCS8qIHByZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVw bGUgKi8KIAkJdHN0YXRlID0gYmVnaW5fdHVwX291dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2Ms ICZUVFNPcHNWaXJ0dWFsKTsKQEAgLTEzNjksNiArMTM3Myw3IEBAIENyZWF0ZVJlcGxpY2F0aW9u U2xvdChDcmVhdGVSZXBsaWNhdGlvblNsb3RDbWQgKmNtZCkKIAkJCQkJCQkgIFRFWFRPSUQsIC0x LCAwKTsKIAlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA0 LCAib3V0cHV0X3BsdWdpbiIsCiAJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7CisJVHVwbGVEZXNj RmluYWxpemUodHVwZGVzYyk7CiAKIAkvKiBwcmVwYXJlIGZvciBwcm9qZWN0aW9uIG9mIHR1cGxl cyAqLwogCXRzdGF0ZSA9IGJlZ2luX3R1cF9vdXRwdXRfdHVwZGVzYyhkZXN0LCB0dXBkZXNjLCAm VFRTT3BzVmlydHVhbCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYWNsLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvYWNsLmMKaW5kZXggNjQxNjczZjBiMGUuLmNlMDdmMmJj MDQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYWNsLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2FjbC5jCkBAIC0xODE5LDYgKzE4MTksNyBAQCBhY2xleHBsb2RlKFBH X0ZVTkNUSU9OX0FSR1MpCiAJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJl cikgNCwgImlzX2dyYW50YWJsZSIsCiAJCQkJCQkgICBCT09MT0lELCAtMSwgMCk7CiAKKwkJVHVw bGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJCWZ1bmNjdHgtPnR1cGxlX2Rlc2MgPSBCbGVzc1R1 cGxlRGVzYyh0dXBkZXNjKTsKIAogCQkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHVzZXIgY29udGV4 dCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2dlbmZpbGUuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9nZW5maWxlLmMKaW5kZXggYzA4MzYwOGIxZDUuLmJmYjk0OTQwMWQw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZ2VuZmlsZS5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9nZW5maWxlLmMKQEAgLTQ1NCw2ICs0NTQsNyBAQCBwZ19zdGF0X2Zp bGUoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJICAgImNyZWF0aW9uIiwgVElNRVNUQU1QVFpPSUQs IC0xLCAwKTsKIAlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDYsCiAJ CQkJCSAgICJpc2RpciIsIEJPT0xPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBk ZXNjKTsKIAlCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsKIAogCW1lbXNldChpc251bGwsIGZhbHNl LCBzaXplb2YoaXNudWxsKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9j a2Z1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMKaW5kZXggOWRhZGQ2 ZGE2NzIuLjQ0ODFjMzU0ZmQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9j a2Z1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xvY2tmdW5jcy5jCkBAIC0xNDYs NiArMTQ2LDcgQEAgcGdfbG9ja19zdGF0dXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJVHVwbGVEZXNj SW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAxNiwgIndhaXRzdGFydCIsCiAJCQkJCQkg ICBUSU1FU1RBTVBUWk9JRCwgLTEsIDApOwogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2Mp OwogCQlmdW5jY3R4LT50dXBsZV9kZXNjID0gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiAKIAkJ LyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9vcmRlcmVkc2V0YWdncy5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L29yZGVyZWRzZXRhZ2dzLmMKaW5kZXggM2I2ZGE4ZTM2YWMu LmZkOGI4Njc2NDcwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvb3JkZXJlZHNl dGFnZ3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvb3JkZXJlZHNldGFnZ3MuYwpAQCAt MjMzLDYgKzIzMyw3IEBAIG9yZGVyZWRfc2V0X3N0YXJ0dXAoRnVuY3Rpb25DYWxsSW5mbyBmY2lu Zm8sIGJvb2wgdXNlX3R1cGxlcykKIAkJCQkJCQkJICAgLTEsCiAJCQkJCQkJCSAgIDApOwogCisJ CQkJVHVwbGVEZXNjRmluYWxpemUobmV3ZGVzYyk7CiAJCQkJRnJlZVR1cGxlRGVzYyhxc3RhdGUt PnR1cGRlc2MpOwogCQkJCXFzdGF0ZS0+dHVwZGVzYyA9IG5ld2Rlc2M7CiAJCQl9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9wZ3N0YXRmdW5jcy5jCmluZGV4IGIxZGY5NmU3YjBiLi4wYjEwZGEzYjE4MCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKQEAgLTc2OSw2ICs3NjksNyBAQCBwZ19zdGF0 X2dldF9iYWNrZW5kX3N1YnhhY3QoUEdfRlVOQ1RJT05fQVJHUykKIAlUdXBsZURlc2NJbml0RW50 cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDIsICJzdWJ4YWN0X292ZXJmbG93IiwKIAkJCQkJICAg Qk9PTE9JRCwgLTEsIDApOwogCisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJQmxlc3NU dXBsZURlc2ModHVwZGVzYyk7CiAKIAlpZiAoKGxvY2FsX2JlZW50cnkgPSBwZ3N0YXRfZ2V0X2xv Y2FsX2JlZW50cnlfYnlfcHJvY19udW1iZXIocHJvY051bWJlcikpICE9IE5VTEwpCkBAIC0xNjcw LDYgKzE2NzEsNyBAQCBwZ19zdGF0X3dhbF9idWlsZF90dXBsZShQZ1N0YXRfV2FsQ291bnRlcnMg d2FsX2NvdW50ZXJzLAogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikg NiwgInN0YXRzX3Jlc2V0IiwKIAkJCQkJICAgVElNRVNUQU1QVFpPSUQsIC0xLCAwKTsKIAorCVR1 cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCUJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCiAJ LyogRmlsbCB2YWx1ZXMgYW5kIE5VTExzICovCkBAIC0yMDk3LDYgKzIwOTksNyBAQCBwZ19zdGF0 X2dldF9hcmNoaXZlcihQR19GVU5DVElPTl9BUkdTKQogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBk ZXNjLCAoQXR0ck51bWJlcikgNywgInN0YXRzX3Jlc2V0IiwKIAkJCQkJICAgVElNRVNUQU1QVFpP SUQsIC0xLCAwKTsKIAorCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCUJsZXNzVHVwbGVE ZXNjKHR1cGRlc2MpOwogCiAJLyogR2V0IHN0YXRpc3RpY3MgYWJvdXQgdGhlIGFyY2hpdmVyIHBy b2Nlc3MgKi8KQEAgLTIxNzgsNiArMjE4MSw3IEBAIHBnX3N0YXRfZ2V0X3JlcGxpY2F0aW9uX3Ns b3QoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJICAgVElNRVNUQU1QVFpPSUQsIC0xLCAwKTsKIAlU dXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEzLCAic3RhdHNfcmVzZXQi LAogCQkJCQkgICBUSU1FU1RBTVBUWk9JRCwgLTEsIDApOworCVR1cGxlRGVzY0ZpbmFsaXplKHR1 cGRlc2MpOwogCUJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCiAJbmFtZXN0cmNweSgmc2xvdG5h bWUsIHRleHRfdG9fY3N0cmluZyhzbG90bmFtZV90ZXh0KSk7CkBAIC0yMjY1LDYgKzIyNjksNyBA QCBwZ19zdGF0X2dldF9zdWJzY3JpcHRpb25fc3RhdHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJ ICAgSU5UOE9JRCwgLTEsIDApOwogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51 bWJlcikgMTMsICJzdGF0c19yZXNldCIsCiAJCQkJCSAgIFRJTUVTVEFNUFRaT0lELCAtMSwgMCk7 CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7 CiAKIAlpZiAoIXN1YmVudHJ5KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Rz dmVjdG9yX29wLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3Jfb3AuYwppbmRleCA3 MWM3YzdkM2IzYy4uZDhkZWNlNDJiOWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC90c3ZlY3Rvcl9vcC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvcl9vcC5j CkBAIC02NTEsNiArNjUxLDcgQEAgdHN2ZWN0b3JfdW5uZXN0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CQkJCQkgICBURVhUQVJSQVlPSUQsIC0xLCAwKTsKIAkJaWYgKGdldF9jYWxsX3Jlc3VsdF90eXBl KGZjaW5mbywgTlVMTCwgJnR1cGRlc2MpICE9IFRZUEVGVU5DX0NPTVBPU0lURSkKIAkJCWVsb2co RVJST1IsICJyZXR1cm4gdHlwZSBtdXN0IGJlIGEgcm93IHR5cGUiKTsKKwkJVHVwbGVEZXNjRmlu YWxpemUodHVwZGVzYyk7CiAJCWZ1bmNjdHgtPnR1cGxlX2Rlc2MgPSB0dXBkZXNjOwogCiAJCWZ1 bmNjdHgtPnVzZXJfZmN0eCA9IFBHX0dFVEFSR19UU1ZFQ1RPUl9DT1BZKDApOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggNmI2MzRjOWZmZjEuLjc3MGVkYjM0ZTA4IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTcyOSw2ICs3MjksOCBAQCBSZWxhdGlvbkJ1aWxk VHVwbGVEZXNjKFJlbGF0aW9uIHJlbGF0aW9uKQogCQlwZnJlZShjb25zdHIpOwogCQlyZWxhdGlv bi0+cmRfYXR0LT5jb25zdHIgPSBOVUxMOwogCX0KKworCVR1cGxlRGVzY0ZpbmFsaXplKHJlbGF0 aW9uLT5yZF9hdHQpOwogfQogCiAvKgpAQCAtMTk4NSw2ICsxOTg3LDcgQEAgZm9ybXJkZXNjKGNv bnN0IGNoYXIgKnJlbGF0aW9uTmFtZSwgT2lkIHJlbGF0aW9uUmVsdHlwZSwKIAogCS8qIGluaXRp YWxpemUgZmlyc3QgYXR0cmlidXRlJ3MgYXR0Y2FjaGVvZmYsIGNmIFJlbGF0aW9uQnVpbGRUdXBs ZURlc2MgKi8KIAlUdXBsZURlc2NDb21wYWN0QXR0cihyZWxhdGlvbi0+cmRfYXR0LCAwKS0+YXR0 Y2FjaGVvZmYgPSAwOworCVR1cGxlRGVzY0ZpbmFsaXplKHJlbGF0aW9uLT5yZF9hdHQpOwogCiAJ LyogbWFyayBub3QtbnVsbCBzdGF0dXMgKi8KIAlpZiAoaGFzX25vdF9udWxsKQpAQCAtMzY4OCw2 ICszNjkxLDggQEAgUmVsYXRpb25CdWlsZExvY2FsUmVsYXRpb24oY29uc3QgY2hhciAqcmVsbmFt ZSwKIAlmb3IgKGkgPSAwOyBpIDwgbmF0dHM7IGkrKykKIAkJVHVwbGVEZXNjQXR0cihyZWwtPnJk X2F0dCwgaSktPmF0dHJlbGlkID0gcmVsaWQ7CiAKKwlUdXBsZURlc2NGaW5hbGl6ZShyZWwtPnJk X2F0dCk7CisKIAlyZWwtPnJkX3JlbC0+cmVsdGFibGVzcGFjZSA9IHJlbHRhYmxlc3BhY2U7CiAK IAlpZiAobWFwcGVkX3JlbGF0aW9uKQpAQCAtNDQ0Myw2ICs0NDQ4LDcgQEAgQnVpbGRIYXJkY29k ZWREZXNjcmlwdG9yKGludCBuYXR0cywgY29uc3QgRm9ybURhdGFfcGdfYXR0cmlidXRlICphdHRy cykKIAogCS8qIGluaXRpYWxpemUgZmlyc3QgYXR0cmlidXRlJ3MgYXR0Y2FjaGVvZmYsIGNmIFJl bGF0aW9uQnVpbGRUdXBsZURlc2MgKi8KIAlUdXBsZURlc2NDb21wYWN0QXR0cihyZXN1bHQsIDAp LT5hdHRjYWNoZW9mZiA9IDA7CisJVHVwbGVEZXNjRmluYWxpemUocmVzdWx0KTsKIAogCS8qIE5v dGU6IHdlIGRvbid0IGJvdGhlciB0byBzZXQgdXAgYSBUdXBsZUNvbnN0ciBlbnRyeSAqLwogCkBA IC02MjY4LDYgKzYyNzQsOCBAQCBsb2FkX3JlbGNhY2hlX2luaXRfZmlsZShib29sIHNoYXJlZCkK IAkJCXBvcHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKHJlbC0+cmRfYXR0LCBpKTsKIAkJfQogCisJ CVR1cGxlRGVzY0ZpbmFsaXplKHJlbC0+cmRfYXR0KTsKKwogCQkvKiBuZXh0IHJlYWQgdGhlIGFj Y2VzcyBtZXRob2Qgc3BlY2lmaWMgZmllbGQgKi8KIAkJaWYgKGZyZWFkKCZsZW4sIDEsIHNpemVv ZihsZW4pLCBmcCkgIT0gc2l6ZW9mKGxlbikpCiAJCQlnb3RvIHJlYWRfZmFpbGVkOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvZm1nci9mdW5jYXBpLmMgYi9zcmMvYmFja2VuZC91dGls cy9mbWdyL2Z1bmNhcGkuYwppbmRleCA4YTkzNGVhOGRjYS4uNTE2ZDAyY2ZiODIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2ZtZ3IvZnVuY2FwaS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2ZtZ3IvZnVuY2FwaS5jCkBAIC0zNDAsNiArMzQwLDggQEAgZ2V0X2V4cHJfcmVzdWx0X3R5 cGUoTm9kZSAqZXhwciwKIAkJCQkJCQkJCQlleHByQ29sbGF0aW9uKGNvbCkpOwogCQkJaSsrOwog CQl9CisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOworCiAJCWlmIChyZXN1bHRUeXBlSWQp CiAJCQkqcmVzdWx0VHlwZUlkID0gcmV4cHItPnJvd190eXBlaWQ7CiAJCWlmIChyZXN1bHRUdXBs ZURlc2MpCkBAIC0xMDQ0LDYgKzEwNDYsNyBAQCByZXNvbHZlX3BvbHltb3JwaGljX3R1cGRlc2Mo VHVwbGVEZXNjIHR1cGRlc2MsIG9pZHZlY3RvciAqZGVjbGFyZWRfYXJncywKIAkJfQogCX0KIAor CVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCXJldHVybiB0cnVlOwogfQogCkBAIC0xODUz LDYgKzE4NTYsOCBAQCBidWlsZF9mdW5jdGlvbl9yZXN1bHRfdHVwZGVzY19kKGNoYXIgcHJva2lu ZCwKIAkJCQkJCSAgIDApOwogCX0KIAorCVR1cGxlRGVzY0ZpbmFsaXplKGRlc2MpOworCiAJcmV0 dXJuIGRlc2M7CiB9CiAKQEAgLTE5NzAsNiArMTk3NSw3IEBAIFR5cGVHZXRUdXBsZURlc2MoT2lk IHR5cGVvaWQsIExpc3QgKmNvbGFsaWFzZXMpCiAJCQkJCQkgICB0eXBlb2lkLAogCQkJCQkJICAg LTEsCiAJCQkJCQkgICAwKTsKKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJfQogCWVs c2UgaWYgKGZ1bmN0eXBjbGFzcyA9PSBUWVBFRlVOQ19SRUNPUkQpCiAJewpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX2Z1bmNzLmMKaW5kZXggODUyNGRkM2E5ODEuLjQ3MmNiNTM5M2NlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19mdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX2Z1bmNzLmMKQEAgLTQ0NCw2ICs0NDQsNyBAQCBHZXRQR1ZhcmlhYmxlUmVz dWx0RGVzYyhjb25zdCBjaGFyICpuYW1lKQogCQlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywg KEF0dHJOdW1iZXIpIDEsIHZhcm5hbWUsCiAJCQkJCQkgICBURVhUT0lELCAtMSwgMCk7CiAJfQor CVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCXJldHVybiB0dXBkZXNjOwogfQogCkBAIC00 NjUsNiArNDY2LDcgQEAgU2hvd0dVQ0NvbmZpZ09wdGlvbihjb25zdCBjaGFyICpuYW1lLCBEZXN0 UmVjZWl2ZXIgKmRlc3QpCiAJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKDEpOwog CVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsIHZhcm5h bWUsCiAJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVz Yyk7CiAKIAkvKiBwcmVwYXJlIGZvciBwcm9qZWN0aW9uIG9mIHR1cGxlcyAqLwogCXRzdGF0ZSA9 IGJlZ2luX3R1cF9vdXRwdXRfdHVwZGVzYyhkZXN0LCB0dXBkZXNjLCAmVFRTT3BzVmlydHVhbCk7 CkBAIC00OTksNiArNTAxLDcgQEAgU2hvd0FsbEdVQ0NvbmZpZyhEZXN0UmVjZWl2ZXIgKmRlc3Qp CiAJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7CiAJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0 dXBkZXNjLCAoQXR0ck51bWJlcikgMywgImRlc2NyaXB0aW9uIiwKIAkJCQkJCQkgIFRFWFRPSUQs IC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAogCS8qIHByZXBhcmUgZm9y IHByb2plY3Rpb24gb2YgdHVwbGVzICovCiAJdHN0YXRlID0gYmVnaW5fdHVwX291dHB1dF90dXBk ZXNjKGRlc3QsIHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsKTsKQEAgLTkzNCw2ICs5MzcsOCBAQCBz aG93X2FsbF9zZXR0aW5ncyhQR19GVU5DVElPTl9BUkdTKQogCQlUdXBsZURlc2NJbml0RW50cnko dHVwZGVzYywgKEF0dHJOdW1iZXIpIDE3LCAicGVuZGluZ19yZXN0YXJ0IiwKIAkJCQkJCSAgIEJP T0xPSUQsIC0xLCAwKTsKIAorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKKwogCQkvKgog CQkgKiBHZW5lcmF0ZSBhdHRyaWJ1dGUgbWV0YWRhdGEgbmVlZGVkIGxhdGVyIHRvIHByb2R1Y2Ug dHVwbGVzIGZyb20gcmF3CiAJCSAqIEMgc3RyaW5ncwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL3R1cGRlc2MuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmgKaW5kZXggZDQ2 Y2RiZjdhM2MuLjU5NTQxM2RiYmM1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHVw ZGVzYy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmgKQEAgLTE5NSw2ICsxOTUs NyBAQCBleHRlcm4gVHVwbGVEZXNjIENyZWF0ZVR1cGxlRGVzY1RydW5jYXRlZENvcHkoVHVwbGVE ZXNjIHR1cGRlc2MsIGludCBuYXR0cyk7CiAKIGV4dGVybiBUdXBsZURlc2MgQ3JlYXRlVHVwbGVE ZXNjQ29weUNvbnN0cihUdXBsZURlc2MgdHVwZGVzYyk7CiAKKyNkZWZpbmUgVHVwbGVEZXNjRmlu YWxpemUoZCkgKCh2b2lkKSAwKQogI2RlZmluZSBUdXBsZURlc2NTaXplKHNyYykgXAogCShvZmZz ZXRvZihzdHJ1Y3QgVHVwbGVEZXNjRGF0YSwgY29tcGFjdF9hdHRycykgKyBcCiAJIChzcmMpLT5u YXR0cyAqIHNpemVvZihDb21wYWN0QXR0cmlidXRlKSArIFwKZGlmZiAtLWdpdCBhL3NyYy9wbC9w bHBnc3FsL3NyYy9wbF9jb21wLmMgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfY29tcC5jCmluZGV4 IDVlY2M3NzY2NzU3Li5iNzJjOTYzYjNiZSAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3Jj L3BsX2NvbXAuYworKysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfY29tcC5jCkBAIC0xOTEyLDYg KzE5MTIsOCBAQCBidWlsZF9yb3dfZnJvbV92YXJzKFBMcGdTUUxfdmFyaWFibGUgKip2YXJzLCBp bnQgbnVtdmFycykKIAkJVHVwbGVEZXNjSW5pdEVudHJ5Q29sbGF0aW9uKHJvdy0+cm93dHVwZGVz YywgaSArIDEsIHR5cGNvbGwpOwogCX0KIAorCVR1cGxlRGVzY0ZpbmFsaXplKHJvdy0+cm93dHVw ZGVzYyk7CisKIAlyZXR1cm4gcm93OwogfQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmMgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmMKaW5kZXgg NDg1ZTA4ZTVjMTkuLmY5ZTdjNzE3MjgwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmMKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV9maXhlZF9zdGF0cy5jCkBAIC0y MDYsNiArMjA2LDcgQEAgdGVzdF9jdXN0b21fc3RhdHNfZml4ZWRfcmVwb3J0KFBHX0ZVTkNUSU9O X0FSR1MpCiAJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKIAlUdXBsZURlc2NJbml0RW50cnkodHVw ZGVzYywgKEF0dHJOdW1iZXIpIDIsICJzdGF0c19yZXNldCIsCiAJCQkJCSAgIFRJTUVTVEFNUFRa T0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJQmxlc3NUdXBsZURl c2ModHVwZGVzYyk7CiAKIAl2YWx1ZXNbMF0gPSBJbnQ2NEdldERhdHVtKHN0YXRzLT5udW1jYWxs cyk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcHJlZHRlc3QvdGVzdF9wcmVk dGVzdC5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3ByZWR0ZXN0L3Rlc3RfcHJlZHRlc3QuYwpp bmRleCA2NzlhNWRlNDU2ZC4uNDhjYTJhNGVhNzAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9wcmVkdGVzdC90ZXN0X3ByZWR0ZXN0LmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X3ByZWR0ZXN0L3Rlc3RfcHJlZHRlc3QuYwpAQCAtMjMwLDYgKzIzMCw3IEBAIHRlc3RfcHJl ZHRlc3QoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJICAgInNfcl9ob2xkcyIsIEJPT0xPSUQsIC0x LCAwKTsKIAlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDgsCiAJCQkJ CSAgICJ3X3JfaG9sZHMiLCBCT09MT0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVw ZGVzYyk7CiAJdHVwZGVzYyA9IEJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCiAJdmFsdWVzWzBd ID0gQm9vbEdldERhdHVtKHN0cm9uZ19pbXBsaWVkX2J5KTsKLS0gCjIuNTEuMAoK --0000000000002deb23064bf63451 Content-Type: text/plain; charset="US-ASCII"; name="v11-0004-Optimize-tuple-deformation.patch" Content-Disposition: attachment; filename="v11-0004-Optimize-tuple-deformation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm7rg38s4 RnJvbSAwYzRiYzM4M2YxZGVhZTcyMTAzMDYzYTdlOTEyZjI3NmRmZDRhMWM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCAzMSBEZWMgMjAyNCAwOToxOToyNCArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjExIDQv NV0gT3B0aW1pemUgdHVwbGUgZGVmb3JtYXRpb24KClRoaXMgY29tbWl0IGluY2x1ZGVzIHZhcmlv dXMgb3B0aW1pemF0aW9ucyB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZgp0dXBsZSBkZWZv cm1hdGlvbi4KCldlIG5vdyBwcmVjYWxjdWxhdGUgQ29tcGFjdEF0dHJpYnV0ZSdzIGF0dGNhY2hl b2ZmLCB3aGljaCBhbGxvd3MgdXMgdG8KcmVtb3ZlIHRoZSBjb2RlIGZyb20gdGhlIGRlZm9ybSBy b3V0aW5lcyB3aGljaCB3YXMgc2V0dGluZyB0aGUKYXR0Y2FjaGVvZmYuICBTZXR0aW5nIHRoZSBh dHRjYWNoZW9mZiBpcyBoYW5kbGVkIGJ5IFR1cGxlRGVzY0ZpbmFsaXplKCksCndoaWNoIG11c3Qg YmUgY2FsbGVkIGJlZm9yZSB0aGUgVHVwbGVEZXNjIGlzIHVzZWQgZm9yIGFueXRoaW5nLiAgSGF2 aW5nCnRoaXMgVHVwbGVEZXNjRmluYWxpemUoKSBmdW5jdGlvbiBtZWFucyB3ZSBjYW4gc3RvcmUg dGhlIGZpcnN0CmF0dHJpYnV0ZSBpbiB0aGUgVHVwbGVEZXNjIHdoaWNoIGRvZXMgbm90IGhhdmUg YW4gb2Zmc2V0IGNhY2hlZC4gIFRoYXQKYWxsb3dzIHVzIHRvIGFkZCBhIGRlZGljYXRlZCBkZWZv cm1pbmcgbG9vcCB0byBkZWZvcm0gYWxsIGF0dHJpYnV0ZXMgdXAKdG8gdGhlIGZpbmFsIG9uZSB3 aXRoIGFuIGF0dGNhY2hlb2ZmIHNldCwgb3IgdXAgdG8gdGhlIGZpcnN0IE5VTEwKYXR0cmlidXRl LCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCgpXZSBhbHNvIHJlY29yZCB0aGUgbWF4aW11bSBhdHRy aWJ1dGUgbnVtYmVyIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gZXhpc3QKaW4gdGhlIHR1cGxlLCB0 aGF0IGlzLCBoYXMgYSBOT1QgTlVMTCBjb25zdHJhaW50IGFuZCBpc24ndCBhbgphdHRoYXNtaXNz aW5nIGF0dHJpYnV0ZS4gIFdoZW4gZGVmb3JtaW5nIG9ubHkgYXR0cmlidXRlcyBwcmlvciB0byB0 aGUKZ3VhcmFudGVlZCBhdHRudW0sIHdlJ3ZlIG5vIG5lZWQgdG8gYWNjZXNzIHRoZSB0dXBsZSdz IG5hdHQgY291bnQuICBBcyBhbgphZGRpdGlvbmFsIG9wdGltaXphdGlvbiwgd2Ugb25seSBjb3Vu dCBmaXhlZC13aWR0aCBjb2x1bW5zIHdoZW4KY2FsY3VsYXRpbmcgdGhlIG1heGltdW0gZ3VhcmFu dGVlZCBjb2x1bW4gYXMgdGhpcyBlbGltaW5hdGVzIHRoZSBuZWVkIHRvCmVtaXQgY29kZSB0byBm ZXRjaCBieXJlZiB0eXBlcyBpbiB0aGUgZGVmb3JtYXRpb24gbG9vcCBmb3IgZ3VhcmFudGVlZAph dHRyaWJ1dGVzLgoKU29tZSBsb2NhdGlvbnMgaW4gdGhlIGNvZGUgZGVmb3JtIHR1cGxlcyB0aGF0 IGhhdmUgeWV0IHRvIGdvIHRocm91Z2ggTk9UCk5VTEwgY29uc3RyYWludCB2YWxpZGF0aW9uLiAg V2UncmUgdW5hYmxlIHRvIHBlcmZvcm0gdGhlIGd1YXJhbnRlZWQKYXR0cmlidXRlIG9wdGltaXph dGlvbiB3aGVuIHRoYXQncyB0aGUgY2FzZS4gIFRoZSBvcHRpbWl6YXRpb24gaXMgb3B0LWluCnZp YSB0aGUgVHVwbGVUYWJsZVNsb3QgdXNpbmcgdGhlIFRUU19GTEFHX09CRVlTX05PVF9OVUxMX0NP TlNUUkFJTlRTCmZsYWcuCgpUaGlzIGNvbW1pdCBhbHNvIGFkZHMgYSBtb3JlIGVmZmljaWVudCB3 YXkgb2YgcG9wdWxhdGluZyB0aGUgaXNudWxsCmFycmF5IGJ5IHVzaW5nIGEgYml0LXdpc2UgdHJp Y2sgd2hpY2ggcGVyZm9ybXMgbXVsdGlwbGljYXRpb24gb24gdGhlCmludmVyc2Ugb2YgdGhlIHR1 cGxlJ3MgYml0bWFwIGJ5dGUgYW5kIG1hc2tpbmcgb3V0IGFsbCBidXQgdGhlIGxvd2VyIGJpdApv ZiBlYWNoIG9mIHRoZSBib29sZWFuJ3MgYnl0ZS4gIFRoaXMgcmVzdWx0cyBpbiBtdWNoIG1vcmUg b3B0aW1hbCBjb2RlCndoZW4gY29tcGFyZWQgdG8gZGV0ZXJtaW5pbmcgdGhlIE5VTExuZXNzIHZp YSBhdHRfaXNudWxsKCkuICA4IGlzbnVsbAplbGVtZW50cyBhcmUgcHJvY2Vzc2VkIGF0IG9uY2Ug dXNpbmcgdGhpcyBtZXRob2QsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8Kcm91bmQgdGhlIHR0c19p c251bGwgYXJyYXkgc2l6ZSB1cCB0byB0aGUgbmV4dCA4IGJ5dGVzLiAgVGhlIHBhbGxvYyBjb2Rl CmRvZXMgdGhpcyBhbnl3YXksIGJ1dCB0aGUgcm91bmQtdXAgbmVlZGVkIHRvIGJlIGZvcm1hbGl6 ZWQgc28gYXMgbm90IHRvCm92ZXJ3cml0ZSB0aGUgc2VudGluZWwgYnl0ZSBpbiBkZWJ1ZyBidWls ZHMuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9oZWFwdHVwbGUuYyAgICAgICAgfCAz NjAgKysrKysrKystLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vaW5kZXh0dXBs ZS5jICAgICAgIHwgMzYzICsrKysrKystLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvY29t bW9uL3R1cGRlc2MuYyAgICAgICAgICB8ICA1MSArKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdp c3Qvc3BndXRpbHMuYyAgICAgICAgIHwgICAzIC0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNU dXBsZXMuYyAgICAgICAgICAgIHwgMzkyICsrKysrKysrKysrLS0tLS0tLS0KIHNyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVCaXRtYXBIZWFwc2Nhbi5jICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVJbmRleHNjYW4uYyAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVTYW1wbGVzY2FuLmMgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVTZXFzY2FuLmMgICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVU aWRyYW5nZXNjYW4uYyAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVUaWRz Y2FuLmMgICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZGVm b3JtLmMgICAgICAgIHwgICA2IC0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMg ICAgICAgICAgIHwgIDEyIC0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmggICAgICAgICAg ICAgICAgIHwgIDIwICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdHVwbWFjcy5oICAgICAgICAgICAg ICAgICB8IDIyNCArKysrKysrKysrLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaCAg ICAgICAgICAgICAgfCAgMTcgKy0KIHNyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL2RlZm9y bV9iZW5jaC5jIHwgICAxICsKIDE4IGZpbGVzIGNoYW5nZWQsIDg0NiBpbnNlcnRpb25zKCspLCA2 MjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9o ZWFwdHVwbGUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vaGVhcHR1cGxlLmMKaW5kZXgg MTFiZWMyMGU4MmUuLmIyYWM3ZmVmMzViIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv Y29tbW9uL2hlYXB0dXBsZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vaGVhcHR1 cGxlLmMKQEAgLTQ5OCwxOSArNDk4LDcgQEAgaGVhcF9hdHRpc251bGwoSGVhcFR1cGxlIHR1cCwg aW50IGF0dG51bSwgVHVwbGVEZXNjIHR1cGxlRGVzYykKICAqCQlub2NhY2hlZ2V0YXR0cgogICoK ICAqCQlUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgZnJvbSBmYXN0Z2V0YXR0cigpLCBpbiBjYXNlcyB3 aGVyZSB3ZQotICoJCWNhbid0IHVzZSBhIGNhY2hlb2Zmc2V0IGFuZCB0aGUgdmFsdWUgaXMgbm90 IG51bGwuCi0gKgotICoJCVRoaXMgY2FjaGVzIGF0dHJpYnV0ZSBvZmZzZXRzIGluIHRoZSBhdHRy aWJ1dGUgZGVzY3JpcHRvci4KLSAqCi0gKgkJQW4gYWx0ZXJuYXRpdmUgd2F5IHRvIHNwZWVkIHRo aW5ncyB1cCB3b3VsZCBiZSB0byBjYWNoZSBvZmZzZXRzCi0gKgkJd2l0aCB0aGUgdHVwbGUsIGJ1 dCB0aGF0IHNlZW1zIG1vcmUgZGlmZmljdWx0IHVubGVzcyB5b3UgdGFrZQotICoJCXRoZSBzdG9y YWdlIGhpdCBvZiBhY3R1YWxseSBwdXR0aW5nIHRob3NlIG9mZnNldHMgaW50byB0aGUKLSAqCQl0 dXBsZSB5b3Ugc2VuZCB0byBkaXNrLiAgWXVjay4KLSAqCi0gKgkJVGhpcyBzY2hlbWUgd2lsbCBi ZSBzbGlnaHRseSBzbG93ZXIgdGhhbiB0aGF0LCBidXQgc2hvdWxkCi0gKgkJcGVyZm9ybSB3ZWxs IGZvciBxdWVyaWVzIHdoaWNoIGhpdCBsYXJnZSAjJ3Mgb2YgdHVwbGVzLiAgQWZ0ZXIKLSAqCQl5 b3UgY2FjaGUgdGhlIG9mZnNldHMgb25jZSwgZXhhbWluaW5nIGFsbCB0aGUgb3RoZXIgdHVwbGVz IHVzaW5nCi0gKgkJdGhlIHNhbWUgYXR0cmlidXRlIGRlc2NyaXB0b3Igd2lsbCBnbyBtdWNoIHF1 aWNrZXIuIC1jaW0gNS80LzkxCisgKgkJY2FuJ3QgdXNlIHRoZSBhdHRjYWNoZW9mZiBhbmQgdGhl IHZhbHVlIGlzIG5vdCBudWxsLgogICoKICAqCQlOT1RFOiBpZiB5b3UgbmVlZCB0byBjaGFuZ2Ug dGhpcyBjb2RlLCBzZWUgYWxzbyBoZWFwX2RlZm9ybV90dXBsZS4KICAqCQlBbHNvIHNlZSBub2Nh Y2hlX2luZGV4X2dldGF0dHIsIHdoaWNoIGlzIHRoZSBzYW1lIGNvZGUgZm9yIGluZGV4CkBAIC01 MjIsMTk0ICs1MTAsMTI1IEBAIG5vY2FjaGVnZXRhdHRyKEhlYXBUdXBsZSB0dXAsCiAJCQkgICBp bnQgYXR0bnVtLAogCQkJICAgVHVwbGVEZXNjIHR1cGxlRGVzYykKIHsKKwlDb21wYWN0QXR0cmli dXRlICpjYXR0cjsKIAlIZWFwVHVwbGVIZWFkZXIgdGQgPSB0dXAtPnRfZGF0YTsKIAljaGFyCSAg ICp0cDsJCQkJLyogcHRyIHRvIGRhdGEgcGFydCBvZiB0dXBsZSAqLwogCWJpdHM4CSAgICpicCA9 IHRkLT50X2JpdHM7CS8qIHB0ciB0byBudWxsIGJpdG1hcCBpbiB0dXBsZSAqLwotCWJvb2wJCXNs b3cgPSBmYWxzZTsJLyogZG8gd2UgaGF2ZSB0byB3YWxrIGF0dHJzPyAqLwogCWludAkJCW9mZjsJ CQkvKiBjdXJyZW50IG9mZnNldCB3aXRoaW4gZGF0YSAqLworCWludAkJCXN0YXJ0QXR0cjsKKwlp bnQJCQlmaXJzdE51bGxBdHRyOworCWludAkJCWk7CisJYm9vbAkJaGFzbnVsbHMgPSBIZWFwVHVw bGVIYXNOdWxscyh0dXApOwogCi0JLyogLS0tLS0tLS0tLS0tLS0tLQotCSAqCSBUaHJlZSBjYXNl czoKLQkgKgotCSAqCSAxOiBObyBudWxscyBhbmQgbm8gdmFyaWFibGUtd2lkdGggYXR0cmlidXRl cy4KLQkgKgkgMjogSGFzIGEgbnVsbCBvciBhIHZhci13aWR0aCBBRlRFUiBhdHQuCi0JICoJIDM6 IEhhcyBudWxscyBvciB2YXItd2lkdGhzIEJFRk9SRSBhdHQuCi0JICogLS0tLS0tLS0tLS0tLS0t LQotCSAqLworCS8qIERpZCBzb21lb25lIGZvcmdldCB0byBjYWxsIFR1cGxlRGVzY0ZpbmFsaXpl KCk/ICovCisJQXNzZXJ0KHR1cGxlRGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZzZXRBdHRyID49IDAp OwogCiAJYXR0bnVtLS07CiAKLQlpZiAoIUhlYXBUdXBsZU5vTnVsbHModHVwKSkKKwkvKgorCSAq IFRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcyB3ZSBuZWVkIHRvIGxvb2sgYXQs IHN0YXJ0IHdhbGtpbmcKKwkgKiB0aGUgdHVwbGUgYXQgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBo aWdoZXN0IGF0dGNhY2hlb2ZmIHByaW9yIHRvIGF0dG51bQorCSAqIG9yIHRoZSBmaXJzdCBOVUxM IGF0dHJpYnV0ZSBwcmlvciB0byBhdHRudW0sIHdoaWNoZXZlciBjb21lcyBmaXJzdC4KKwkgKi8K KwlpZiAoaGFzbnVsbHMpCisJCWZpcnN0TnVsbEF0dHIgPSBmaXJzdF9udWxsX2F0dHIoYnAsIGF0 dG51bSk7CisJZWxzZQorCQlmaXJzdE51bGxBdHRyID0gYXR0bnVtOworCisJaWYgKHR1cGxlRGVz Yy0+Zmlyc3ROb25DYWNoZWRPZmZzZXRBdHRyID4gMCkKIAl7CiAJCS8qCi0JCSAqIHRoZXJlJ3Mg YSBudWxsIHNvbWV3aGVyZSBpbiB0aGUgdHVwbGUKLQkJICoKLQkJICogY2hlY2sgdG8gc2VlIGlm IGFueSBwcmVjZWRpbmcgYml0cyBhcmUgbnVsbC4uLgorCQkgKiBTdGFydCBhdCB0aGUgaGlnaGVz dCBhdHRjYWNoZW9mZiBhdHRyaWJ1dGUgd2l0aCBubyBOVUxMcyBpbiBwcmlvcgorCQkgKiBhdHRy aWJ1dGVzLgogCQkgKi8KLQkJaW50CQkJYnl0ZSA9IGF0dG51bSA+PiAzOwotCQlpbnQJCQlmaW5h bGJpdCA9IGF0dG51bSAmIDB4MDc7Ci0KLQkJLyogY2hlY2sgZm9yIG51bGxzICJiZWZvcmUiIGZp bmFsIGJpdCBvZiBsYXN0IGJ5dGUgKi8KLQkJaWYgKCh+YnBbYnl0ZV0pICYgKCgxIDw8IGZpbmFs Yml0KSAtIDEpKQotCQkJc2xvdyA9IHRydWU7Ci0JCWVsc2UKLQkJewotCQkJLyogY2hlY2sgZm9y IG51bGxzIGluIGFueSAiZWFybGllciIgYnl0ZXMgKi8KLQkJCWludAkJCWk7Ci0KLQkJCWZvciAo aSA9IDA7IGkgPCBieXRlOyBpKyspCi0JCQl7Ci0JCQkJaWYgKGJwW2ldICE9IDB4RkYpCi0JCQkJ ewotCQkJCQlzbG93ID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9CisJCXN0 YXJ0QXR0ciA9IE1pbih0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2Zmc2V0QXR0ciAtIDEsIGZp cnN0TnVsbEF0dHIpOworCQlvZmYgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIHN0 YXJ0QXR0ciktPmF0dGNhY2hlb2ZmOworCX0KKwllbHNlCisJeworCQkvKiBPdGhlcndpc2UsIHN0 YXJ0IGF0IHRoZSBiZWdpbm5pbmcuLi4gKi8KKwkJc3RhcnRBdHRyID0gMDsKKwkJb2ZmID0gMDsK IAl9CiAKIAl0cCA9IChjaGFyICopIHRkICsgdGQtPnRfaG9mZjsKIAotCWlmICghc2xvdykKKwkv KgorCSAqIENhbGN1bGF0ZSAnb2ZmJyB1cCB0byB0aGUgZmlyc3QgTlVMTCBhdHRyLiAgV2UgdXNl IHR3byBjaGVhcGVyIGxvb3BzCisJICogd2hlbiB0aGUgdHVwbGUgaGFzIG5vIHZhcmlhYmxlLXdp ZHRoIGNvbHVtbnMuICBXaGVuIHZhcmlhYmxlLXdpZHRoCisJICogY29sdW1ucyBleGlzdHMsIHdl IHVzZSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIoKSB0byBtb3ZlIHRoZSBvZmZzZXQKKwkgKiBiZXlv bmQgdGhlIGN1cnJlbnQgYXR0cmlidXRlLgorCSAqLworCWlmICghSGVhcFR1cGxlSGFzVmFyV2lk dGgodHVwKSkKIAl7Ci0JCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dDsKLQotCQkvKgotCQkgKiBJZiB3 ZSBnZXQgaGVyZSwgdGhlcmUgYXJlIG5vIG51bGxzIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIHRh cmdldAotCQkgKiBhdHRyaWJ1dGUuICBJZiB3ZSBoYXZlIGEgY2FjaGVkIG9mZnNldCwgd2UgY2Fu IHVzZSBpdC4KLQkJICovCi0JCWF0dCA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywg YXR0bnVtKTsKLQkJaWYgKGF0dC0+YXR0Y2FjaGVvZmYgPj0gMCkKLQkJCXJldHVybiBmZXRjaGF0 dChhdHQsIHRwICsgYXR0LT5hdHRjYWNoZW9mZik7Ci0KLQkJLyoKLQkJICogT3RoZXJ3aXNlLCBj aGVjayBmb3Igbm9uLWZpeGVkLWxlbmd0aCBhdHRycyB1cCB0byBhbmQgaW5jbHVkaW5nCi0JCSAq IHRhcmdldC4gIElmIHRoZXJlIGFyZW4ndCBhbnksIGl0J3Mgc2FmZSB0byBjaGVhcGx5IGluaXRp YWxpemUgdGhlCi0JCSAqIGNhY2hlZCBvZmZzZXRzIGZvciB0aGVzZSBhdHRycy4KLQkJICovCi0J CWlmIChIZWFwVHVwbGVIYXNWYXJXaWR0aCh0dXApKQorCQlmb3IgKGkgPSBzdGFydEF0dHI7IGkg PCBmaXJzdE51bGxBdHRyOyBpKyspCiAJCXsKLQkJCWludAkJCWo7CisJCQljYXR0ciA9IFR1cGxl RGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaSk7CiAKLQkJCWZvciAoaiA9IDA7IGogPD0gYXR0 bnVtOyBqKyspCi0JCQl7Ci0JCQkJaWYgKFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywg aiktPmF0dGxlbiA8PSAwKQotCQkJCXsKLQkJCQkJc2xvdyA9IHRydWU7Ci0JCQkJCWJyZWFrOwot CQkJCX0KLQkJCX0KKwkJCW9mZiA9IGF0dF9ub21pbmFsX2FsaWduYnkob2ZmLCBjYXR0ci0+YXR0 YWxpZ25ieSk7CisJCQlvZmYgKz0gY2F0dHItPmF0dGxlbjsKIAkJfQotCX0KLQotCWlmICghc2xv dykKLQl7Ci0JCWludAkJCW5hdHRzID0gdHVwbGVEZXNjLT5uYXR0czsKLQkJaW50CQkJaiA9IDE7 Ci0KLQkJLyoKLQkJICogSWYgd2UgZ2V0IGhlcmUsIHdlIGhhdmUgYSB0dXBsZSB3aXRoIG5vIG51 bGxzIG9yIHZhci13aWR0aHMgdXAgdG8KLQkJICogYW5kIGluY2x1ZGluZyB0aGUgdGFyZ2V0IGF0 dHJpYnV0ZSwgc28gd2UgY2FuIHVzZSB0aGUgY2FjaGVkIG9mZnNldAotCQkgKiAuLi4gb25seSB3 ZSBkb24ndCBoYXZlIGl0IHlldCwgb3Igd2UnZCBub3QgaGF2ZSBnb3QgaGVyZS4gIFNpbmNlCi0J CSAqIGl0J3MgY2hlYXAgdG8gY29tcHV0ZSBvZmZzZXRzIGZvciBmaXhlZC13aWR0aCBjb2x1bW5z LCB3ZSB0YWtlIHRoZQotCQkgKiBvcHBvcnR1bml0eSB0byBpbml0aWFsaXplIHRoZSBjYWNoZWQg b2Zmc2V0cyBmb3IgKmFsbCogdGhlIGxlYWRpbmcKLQkJICogZml4ZWQtd2lkdGggY29sdW1ucywg aW4gaG9wZSBvZiBhdm9pZGluZyBmdXR1cmUgdmlzaXRzIHRvIHRoaXMKLQkJICogcm91dGluZS4K LQkJICovCi0JCVR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgMCktPmF0dGNhY2hlb2Zm ID0gMDsKLQotCQkvKiB3ZSBtaWdodCBoYXZlIHNldCBzb21lIG9mZnNldHMgaW4gdGhlIHNsb3cg cGF0aCBwcmV2aW91c2x5ICovCi0JCXdoaWxlIChqIDwgbmF0dHMgJiYgVHVwbGVEZXNjQ29tcGFj dEF0dHIodHVwbGVEZXNjLCBqKS0+YXR0Y2FjaGVvZmYgPiAwKQotCQkJaisrOwotCi0JCW9mZiA9 IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaiAtIDEpLT5hdHRjYWNoZW9mZiArCi0J CQlUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGogLSAxKS0+YXR0bGVuOwogCi0JCWZv ciAoOyBqIDwgbmF0dHM7IGorKykKKwkJZm9yICg7IGkgPCBhdHRudW07IGkrKykKIAkJewotCQkJ Q29tcGFjdEF0dHJpYnV0ZSAqYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBq KTsKKwkJCWlmIChhdHRfaXNudWxsKGksIGJwKSkKKwkJCQljb250aW51ZTsKIAotCQkJaWYgKGF0 dC0+YXR0bGVuIDw9IDApCi0JCQkJYnJlYWs7Ci0KLQkJCW9mZiA9IGF0dF9ub21pbmFsX2FsaWdu Ynkob2ZmLCBhdHQtPmF0dGFsaWduYnkpOworCQkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0 cih0dXBsZURlc2MsIGkpOwogCi0JCQlhdHQtPmF0dGNhY2hlb2ZmID0gb2ZmOwotCi0JCQlvZmYg Kz0gYXR0LT5hdHRsZW47CisJCQlvZmYgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgY2F0dHIt PmF0dGFsaWduYnkpOworCQkJb2ZmICs9IGNhdHRyLT5hdHRsZW47CiAJCX0KLQotCQlBc3NlcnQo aiA+IGF0dG51bSk7Ci0KLQkJb2ZmID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBh dHRudW0pLT5hdHRjYWNoZW9mZjsKIAl9CiAJZWxzZQogCXsKLQkJYm9vbAkJdXNlY2FjaGUgPSB0 cnVlOwotCQlpbnQJCQlpOwotCi0JCS8qCi0JCSAqIE5vdyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSB0 byB3YWxrIHRoZSB0dXBsZSBDQVJFRlVMTFkuICBCdXQgd2Ugc3RpbGwKLQkJICogbWlnaHQgYmUg YWJsZSB0byBjYWNoZSBzb21lIG9mZnNldHMgZm9yIG5leHQgdGltZS4KLQkJICoKLQkJICogTm90 ZSAtIFRoaXMgbG9vcCBpcyBhIGxpdHRsZSB0cmlja3kuICBGb3IgZWFjaCBub24tbnVsbCBhdHRy aWJ1dGUsCi0JCSAqIHdlIGhhdmUgdG8gZmlyc3QgYWNjb3VudCBmb3IgYWxpZ25tZW50IHBhZGRp bmcgYmVmb3JlIHRoZSBhdHRyLAotCQkgKiB0aGVuIGFkdmFuY2Ugb3ZlciB0aGUgYXR0ciBiYXNl ZCBvbiBpdHMgbGVuZ3RoLiAgTnVsbHMgaGF2ZSBubwotCQkgKiBzdG9yYWdlIGFuZCBubyBhbGln bm1lbnQgcGFkZGluZyBlaXRoZXIuICBXZSBjYW4gdXNlL3NldAotCQkgKiBhdHRjYWNoZW9mZiB1 bnRpbCB3ZSByZWFjaCBlaXRoZXIgYSBudWxsIG9yIGEgdmFyLXdpZHRoIGF0dHJpYnV0ZS4KLQkJ ICovCi0JCW9mZiA9IDA7Ci0JCWZvciAoaSA9IDA7OyBpKyspCQkvKiBsb29wIGV4aXQgaXMgYXQg ImJyZWFrIiAqLworCQlmb3IgKGkgPSBzdGFydEF0dHI7IGkgPCBmaXJzdE51bGxBdHRyOyBpKysp CiAJCXsKLQkJCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dCA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1 cGxlRGVzYywgaSk7CisJCQlpbnQJCQlhdHRsZW47CiAKLQkJCWlmIChIZWFwVHVwbGVIYXNOdWxs cyh0dXApICYmIGF0dF9pc251bGwoaSwgYnApKQotCQkJewotCQkJCXVzZWNhY2hlID0gZmFsc2U7 Ci0JCQkJY29udGludWU7CQkvKiB0aGlzIGNhbm5vdCBiZSB0aGUgdGFyZ2V0IGF0dCAqLwotCQkJ fQorCQkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGkpOworCQkJYXR0 bGVuID0gY2F0dHItPmF0dGxlbjsKIAotCQkJLyogSWYgd2Uga25vdyB0aGUgbmV4dCBvZmZzZXQs IHdlIGNhbiBza2lwIHRoZSByZXN0ICovCi0JCQlpZiAodXNlY2FjaGUgJiYgYXR0LT5hdHRjYWNo ZW9mZiA+PSAwKQotCQkJCW9mZiA9IGF0dC0+YXR0Y2FjaGVvZmY7Ci0JCQllbHNlIGlmIChhdHQt PmF0dGxlbiA9PSAtMSkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFdlIGNhbiBvbmx5IGNhY2hlIHRo ZSBvZmZzZXQgZm9yIGEgdmFybGVuYSBhdHRyaWJ1dGUgaWYgdGhlCi0JCQkJICogb2Zmc2V0IGlz IGFscmVhZHkgc3VpdGFibHkgYWxpZ25lZCwgc28gdGhhdCB0aGVyZSB3b3VsZCBiZQotCQkJCSAq IG5vIHBhZCBieXRlcyBpbiBhbnkgY2FzZTogdGhlbiB0aGUgb2Zmc2V0IHdpbGwgYmUgdmFsaWQg Zm9yCi0JCQkJICogZWl0aGVyIGFuIGFsaWduZWQgb3IgdW5hbGlnbmVkIHZhbHVlLgotCQkJCSAq LwotCQkJCWlmICh1c2VjYWNoZSAmJgotCQkJCQlvZmYgPT0gYXR0X25vbWluYWxfYWxpZ25ieShv ZmYsIGF0dC0+YXR0YWxpZ25ieSkpCi0JCQkJCWF0dC0+YXR0Y2FjaGVvZmYgPSBvZmY7Ci0JCQkJ ZWxzZQotCQkJCXsKLQkJCQkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShvZmYsIGF0dC0+YXR0 YWxpZ25ieSwgLTEsCi0JCQkJCQkJCQkJCSAgdHAgKyBvZmYpOwotCQkJCQl1c2VjYWNoZSA9IGZh bHNlOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKiBub3QgdmFybGVuYSwgc28g c2FmZSB0byB1c2UgYXR0X25vbWluYWxfYWxpZ25ieSAqLwotCQkJCW9mZiA9IGF0dF9ub21pbmFs X2FsaWduYnkob2ZmLCBhdHQtPmF0dGFsaWduYnkpOworCQkJLyoKKwkJCSAqIGNzdHJpbmdzIGRv bid0IGV4aXN0IGluIGhlYXAgdHVwbGVzLiAgVXNlIHBnX2Fzc3VtZSB0byBpbnN0cnVjdAorCQkJ ICogdGhlIGNvbXBpbGVyIG5vdCB0byBlbWl0IHRoZSBjc3RyaW5nLXJlbGF0ZWQgY29kZSBpbgor CQkJICogYXR0X2FkZGxlbmd0aF9wb2ludGVyKCkuCisJCQkgKi8KKwkJCXBnX2Fzc3VtZShhdHRs ZW4gPiAwIHx8IGF0dGxlbiA9PSAtMSk7CiAKLQkJCQlpZiAodXNlY2FjaGUpCi0JCQkJCWF0dC0+ YXR0Y2FjaGVvZmYgPSBvZmY7Ci0JCQl9CisJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9m ZiwKKwkJCQkJCQkJCSAgY2F0dHItPmF0dGFsaWduYnksCisJCQkJCQkJCQkgIGF0dGxlbiwKKwkJ CQkJCQkJCSAgdHAgKyBvZmYpOworCQkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2ludGVyKG9mZiwg YXR0bGVuLCB0cCArIG9mZik7CisJCX0KIAotCQkJaWYgKGkgPT0gYXR0bnVtKQotCQkJCWJyZWFr OworCQlmb3IgKDsgaSA8IGF0dG51bTsgaSsrKQorCQl7CisJCQlpbnQJCQlhdHRsZW47CiAKLQkJ CW9mZiA9IGF0dF9hZGRsZW5ndGhfcG9pbnRlcihvZmYsIGF0dC0+YXR0bGVuLCB0cCArIG9mZik7 CisJCQlpZiAoYXR0X2lzbnVsbChpLCBicCkpCisJCQkJY29udGludWU7CiAKLQkJCWlmICh1c2Vj YWNoZSAmJiBhdHQtPmF0dGxlbiA8PSAwKQotCQkJCXVzZWNhY2hlID0gZmFsc2U7CisJCQljYXR0 ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaSk7CisJCQlhdHRsZW4gPSBjYXR0 ci0+YXR0bGVuOworCisJCQkvKiBBcyBhYm92ZSwgaGVhcHR1cGxlcyBoYXZlIG5vIGNzdHJpbmdz ICovCisJCQlwZ19hc3N1bWUoYXR0bGVuID4gMCB8fCBhdHRsZW4gPT0gLTEpOworCisJCQlvZmYg PSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwgY2F0dHItPmF0dGFsaWduYnksIGF0dGxlbiwKKwkJ CQkJCQkJCSAgdHAgKyBvZmYpOworCQkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2ludGVyKG9mZiwg YXR0bGVuLCB0cCArIG9mZik7CiAJCX0KIAl9CiAKLQlyZXR1cm4gZmV0Y2hhdHQoVHVwbGVEZXNj Q29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pLCB0cCArIG9mZik7CisJY2F0dHIgPSBUdXBs ZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSk7CisJb2ZmID0gYXR0X3BvaW50ZXJf YWxpZ25ieShvZmYsCisJCQkJCQkJICBjYXR0ci0+YXR0YWxpZ25ieSwKKwkJCQkJCQkgIGNhdHRy LT5hdHRsZW4sCisJCQkJCQkJICB0cCArIG9mZik7CisKKwlyZXR1cm4gZmV0Y2hhdHQoY2F0dHIs IHRwICsgb2ZmKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTM0Nyw2ICsxMjY2LDcg QEAgaGVhcF9kZWZvcm1fdHVwbGUoSGVhcFR1cGxlIHR1cGxlLCBUdXBsZURlc2MgdHVwbGVEZXNj LAogCQkJCSAgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsKQogewogCUhlYXBUdXBsZUhlYWRl ciB0dXAgPSB0dXBsZS0+dF9kYXRhOworCUNvbXBhY3RBdHRyaWJ1dGUgKmNhdHRyOwogCWJvb2wJ CWhhc251bGxzID0gSGVhcFR1cGxlSGFzTnVsbHModHVwbGUpOwogCWludAkJCXRkZXNjX25hdHRz ID0gdHVwbGVEZXNjLT5uYXR0czsKIAlpbnQJCQluYXR0czsJCQkvKiBudW1iZXIgb2YgYXR0cyB0 byBleHRyYWN0ICovCkBAIC0xMzU0LDcwICsxMjc0LDk4IEBAIGhlYXBfZGVmb3JtX3R1cGxlKEhl YXBUdXBsZSB0dXBsZSwgVHVwbGVEZXNjIHR1cGxlRGVzYywKIAljaGFyCSAgICp0cDsJCQkJLyog cHRyIHRvIHR1cGxlIGRhdGEgKi8KIAl1aW50MzIJCW9mZjsJCQkvKiBvZmZzZXQgaW4gdHVwbGUg ZGF0YSAqLwogCWJpdHM4CSAgICpicCA9IHR1cC0+dF9iaXRzOwkvKiBwdHIgdG8gbnVsbCBiaXRt YXAgaW4gdHVwbGUgKi8KLQlib29sCQlzbG93ID0gZmFsc2U7CS8qIGNhbiB3ZSB1c2Uvc2V0IGF0 dGNhY2hlb2ZmPyAqLworCWludAkJCWZpcnN0Tm9uQ2FjaGVPZmZzZXRBdHRyOworCWludAkJCWZp cnN0TnVsbEF0dHI7CiAKIAluYXR0cyA9IEhlYXBUdXBsZUhlYWRlckdldE5hdHRzKHR1cCk7CiAK KwkvKiBEaWQgc29tZW9uZSBmb3JnZXQgdG8gY2FsbCBUdXBsZURlc2NGaW5hbGl6ZSgpPyAqLwor CUFzc2VydCh0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2Zmc2V0QXR0ciA+PSAwKTsKKwogCS8q CiAJICogSW4gaW5oZXJpdGFuY2Ugc2l0dWF0aW9ucywgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUg Z2l2ZW4gdHVwbGUgYWN0dWFsbHkKIAkgKiBoYXMgbW9yZSBmaWVsZHMgdGhhbiB0aGUgY2FsbGVy IGlzIGV4cGVjdGluZy4gIERvbid0IHJ1biBvZmYgdGhlIGVuZCBvZgogCSAqIHRoZSBjYWxsZXIn cyBhcnJheXMuCiAJICovCiAJbmF0dHMgPSBNaW4obmF0dHMsIHRkZXNjX25hdHRzKTsKKwlmaXJz dE5vbkNhY2hlT2Zmc2V0QXR0ciA9IE1pbih0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2Zmc2V0 QXR0ciwgbmF0dHMpOworCisJaWYgKGhhc251bGxzKQorCXsKKwkJZmlyc3ROdWxsQXR0ciA9IGZp cnN0X251bGxfYXR0cihicCwgbmF0dHMpOworCisJCS8qCisJCSAqIFhYWDogaXQnZCBiZSBuaWNl IHRvIHVzZSBwb3B1bGF0ZV9pc251bGxfYXJyYXkoKSBoZXJlLCBidXQgdGhhdAorCQkgKiByZXF1 aXJlcyB0aGF0IHRoZSBpc251bGwgYXJyYXkncyBzaXplIGlzIHJvdW5kZWQgdXAgdG8gdGhlIG5l eHQKKwkJICogbXVsdGlwbGUgb2YgOC4gIERvaW5nIHRoYXQgd291bGQgcmVxdWlyZSBhZGp1c3Rp bmcgbWFueSBsb2NhdGlvbnMKKwkJICogdGhhdCBhbGxvY2F0ZSB0aGUgYXJyYXkuCisJCSAqLwor CQlmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciA9IE1pbihmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciwg Zmlyc3ROdWxsQXR0cik7CisJfQorCWVsc2UKKwkJZmlyc3ROdWxsQXR0ciA9IG5hdHRzOwogCiAJ dHAgPSAoY2hhciAqKSB0dXAgKyB0dXAtPnRfaG9mZjsKKwlhdHRudW0gPSAwOwogCi0Jb2ZmID0g MDsKKwlpZiAoZmlyc3ROb25DYWNoZU9mZnNldEF0dHIgPiAwKQorCXsKKyNpZmRlZiBVU0VfQVNT RVJUX0NIRUNLSU5HCisJCS8qIEluIEFzc2VydCBlbmFibGVkIGJ1aWxkcywgdmVyaWZ5IGF0dGNh Y2hlb2ZmIGlzIGNvcnJlY3QgKi8KKwkJaW50CQkJb2ZmY2hlY2sgPSAwOworI2VuZGlmCisJCWRv CisJCXsKKwkJCWlzbnVsbFthdHRudW1dID0gZmFsc2U7CisJCQljYXR0ciA9IFR1cGxlRGVzY0Nv bXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKwkJCW9mZiA9IGNhdHRyLT5hdHRjYWNoZW9m ZjsKIAotCWZvciAoYXR0bnVtID0gMDsgYXR0bnVtIDwgbmF0dHM7IGF0dG51bSsrKQorI2lmZGVm IFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkJCW9mZmNoZWNrID0gYXR0X25vbWluYWxfYWxpZ25ieShv ZmZjaGVjaywgY2F0dHItPmF0dGFsaWduYnkpOworCQkJQXNzZXJ0KG9mZmNoZWNrID09IGNhdHRy LT5hdHRjYWNoZW9mZik7CisJCQlvZmZjaGVjayArPSBjYXR0ci0+YXR0bGVuOworI2VuZGlmCisK KwkJCXZhbHVlc1thdHRudW1dID0gZmV0Y2hfYXR0X25vZXJyKHRwICsgb2ZmLAorCQkJCQkJCQkJ CQkgY2F0dHItPmF0dGJ5dmFsLAorCQkJCQkJCQkJCQkgY2F0dHItPmF0dGxlbik7CisJCX0gd2hp bGUgKCsrYXR0bnVtIDwgZmlyc3ROb25DYWNoZU9mZnNldEF0dHIpOworCQlvZmYgKz0gY2F0dHIt PmF0dGxlbjsKKwl9CisJZWxzZQorCQlvZmYgPSAwOworCisJZm9yICg7IGF0dG51bSA8IGZpcnN0 TnVsbEF0dHI7IGF0dG51bSsrKQogCXsKLQkJQ29tcGFjdEF0dHJpYnV0ZSAqdGhpc2F0dCA9IFR1 cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKwkJaXNudWxsW2F0dG51bV0g PSBmYWxzZTsKKwkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51 bSk7CisJCXZhbHVlc1thdHRudW1dID0gYWxpZ25fZmV0Y2hfdGhlbl9hZGQodHAsCisJCQkJCQkJ CQkJCSAgJm9mZiwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0Ynl2YWwsCisJCQkJCQkJCQkJCSAg Y2F0dHItPmF0dGxlbiwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0YWxpZ25ieSk7CisJfQorCisJ Zm9yICg7IGF0dG51bSA8IG5hdHRzOyBhdHRudW0rKykKKwl7CisJCUFzc2VydChoYXNudWxscyk7 CiAKLQkJaWYgKGhhc251bGxzICYmIGF0dF9pc251bGwoYXR0bnVtLCBicCkpCisJCWlmIChhdHRf aXNudWxsKGF0dG51bSwgYnApKQogCQl7CiAJCQl2YWx1ZXNbYXR0bnVtXSA9IChEYXR1bSkgMDsK IAkJCWlzbnVsbFthdHRudW1dID0gdHJ1ZTsKLQkJCXNsb3cgPSB0cnVlOwkJLyogY2FuJ3QgdXNl IGF0dGNhY2hlb2ZmIGFueW1vcmUgKi8KIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaXNudWxsW2F0 dG51bV0gPSBmYWxzZTsKLQotCQlpZiAoIXNsb3cgJiYgdGhpc2F0dC0+YXR0Y2FjaGVvZmYgPj0g MCkKLQkJCW9mZiA9IHRoaXNhdHQtPmF0dGNhY2hlb2ZmOwotCQllbHNlIGlmICh0aGlzYXR0LT5h dHRsZW4gPT0gLTEpCi0JCXsKLQkJCS8qCi0JCQkgKiBXZSBjYW4gb25seSBjYWNoZSB0aGUgb2Zm c2V0IGZvciBhIHZhcmxlbmEgYXR0cmlidXRlIGlmIHRoZQotCQkJICogb2Zmc2V0IGlzIGFscmVh ZHkgc3VpdGFibHkgYWxpZ25lZCwgc28gdGhhdCB0aGVyZSB3b3VsZCBiZSBubwotCQkJICogcGFk IGJ5dGVzIGluIGFueSBjYXNlOiB0aGVuIHRoZSBvZmZzZXQgd2lsbCBiZSB2YWxpZCBmb3IgZWl0 aGVyCi0JCQkgKiBhbiBhbGlnbmVkIG9yIHVuYWxpZ25lZCB2YWx1ZS4KLQkJCSAqLwotCQkJaWYg KCFzbG93ICYmCi0JCQkJb2ZmID09IGF0dF9ub21pbmFsX2FsaWduYnkob2ZmLCB0aGlzYXR0LT5h dHRhbGlnbmJ5KSkKLQkJCQl0aGlzYXR0LT5hdHRjYWNoZW9mZiA9IG9mZjsKLQkJCWVsc2UKLQkJ CXsKLQkJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwgdGhpc2F0dC0+YXR0YWxpZ25i eSwgLTEsCi0JCQkJCQkJCQkJICB0cCArIG9mZik7Ci0JCQkJc2xvdyA9IHRydWU7Ci0JCQl9Ci0J CX0KLQkJZWxzZQotCQl7Ci0JCQkvKiBub3QgdmFybGVuYSwgc28gc2FmZSB0byB1c2UgYXR0X25v bWluYWxfYWxpZ25ieSAqLwotCQkJb2ZmID0gYXR0X25vbWluYWxfYWxpZ25ieShvZmYsIHRoaXNh dHQtPmF0dGFsaWduYnkpOwotCi0JCQlpZiAoIXNsb3cpCi0JCQkJdGhpc2F0dC0+YXR0Y2FjaGVv ZmYgPSBvZmY7Ci0JCX0KLQotCQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoYXR0KHRoaXNhdHQsIHRw ICsgb2ZmKTsKLQotCQlvZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCB0aGlzYXR0LT5h dHRsZW4sIHRwICsgb2ZmKTsKLQotCQlpZiAodGhpc2F0dC0+YXR0bGVuIDw9IDApCi0JCQlzbG93 ID0gdHJ1ZTsJCS8qIGNhbid0IHVzZSBhdHRjYWNoZW9mZiBhbnltb3JlICovCisJCWNhdHRyID0g VHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pOworCisJCS8qIGFsaWduICdv ZmYnLCBmZXRjaCB0aGUgZGF0dW0sIGFuZCBpbmNyZW1lbnQgb2ZmIGJleW9uZCB0aGUgZGF0dW0g Ki8KKwkJdmFsdWVzW2F0dG51bV0gPSBhbGlnbl9mZXRjaF90aGVuX2FkZCh0cCwKKwkJCQkJCQkJ CQkJICAmb2ZmLAorCQkJCQkJCQkJCQkgIGNhdHRyLT5hdHRieXZhbCwKKwkJCQkJCQkJCQkJICBj YXR0ci0+YXR0bGVuLAorCQkJCQkJCQkJCQkgIGNhdHRyLT5hdHRhbGlnbmJ5KTsKIAl9CiAKIAkv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9pbmRleHR1cGxlLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2luZGV4dHVwbGUuYwppbmRleCBkNjM1MDIwMWUwMS4u OGM0MTA4NTMxOTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vaW5kZXh0 dXBsZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vaW5kZXh0dXBsZS5jCkBAIC0y MjMsMTggKzIyMyw2IEBAIGluZGV4X2Zvcm1fdHVwbGVfY29udGV4dChUdXBsZURlc2MgdHVwbGVE ZXNjcmlwdG9yLAogICoKICAqCQlUaGlzIGdldHMgY2FsbGVkIGZyb20gaW5kZXhfZ2V0YXR0cigp IG1hY3JvLCBhbmQgb25seSBpbiBjYXNlcwogICoJCXdoZXJlIHdlIGNhbid0IHVzZSBjYWNoZW9m ZnNldCBhbmQgdGhlIHZhbHVlIGlzIG5vdCBudWxsLgotICoKLSAqCQlUaGlzIGNhY2hlcyBhdHRy aWJ1dGUgb2Zmc2V0cyBpbiB0aGUgYXR0cmlidXRlIGRlc2NyaXB0b3IuCi0gKgotICoJCUFuIGFs dGVybmF0aXZlIHdheSB0byBzcGVlZCB0aGluZ3MgdXAgd291bGQgYmUgdG8gY2FjaGUgb2Zmc2V0 cwotICoJCXdpdGggdGhlIHR1cGxlLCBidXQgdGhhdCBzZWVtcyBtb3JlIGRpZmZpY3VsdCB1bmxl c3MgeW91IHRha2UKLSAqCQl0aGUgc3RvcmFnZSBoaXQgb2YgYWN0dWFsbHkgcHV0dGluZyB0aG9z ZSBvZmZzZXRzIGludG8gdGhlCi0gKgkJdHVwbGUgeW91IHNlbmQgdG8gZGlzay4gIFl1Y2suCi0g KgotICoJCVRoaXMgc2NoZW1lIHdpbGwgYmUgc2xpZ2h0bHkgc2xvd2VyIHRoYW4gdGhhdCwgYnV0 IHNob3VsZAotICoJCXBlcmZvcm0gd2VsbCBmb3IgcXVlcmllcyB3aGljaCBoaXQgbGFyZ2UgIydz IG9mIHR1cGxlcy4gIEFmdGVyCi0gKgkJeW91IGNhY2hlIHRoZSBvZmZzZXRzIG9uY2UsIGV4YW1p bmluZyBhbGwgdGhlIG90aGVyIHR1cGxlcyB1c2luZwotICoJCXRoZSBzYW1lIGF0dHJpYnV0ZSBk ZXNjcmlwdG9yIHdpbGwgZ28gbXVjaCBxdWlja2VyLiAtY2ltIDUvNC85MQogICogLS0tLS0tLS0t LS0tLS0tLQogICovCiBEYXR1bQpAQCAtMjQyLDIwNSArMjMwLDEyNCBAQCBub2NhY2hlX2luZGV4 X2dldGF0dHIoSW5kZXhUdXBsZSB0dXAsCiAJCQkJCSAgaW50IGF0dG51bSwKIAkJCQkJICBUdXBs ZURlc2MgdHVwbGVEZXNjKQogeworCUNvbXBhY3RBdHRyaWJ1dGUgKmNhdHRyOwogCWNoYXIJICAg KnRwOwkJCQkvKiBwdHIgdG8gZGF0YSBwYXJ0IG9mIHR1cGxlICovCiAJYml0czgJICAgKmJwID0g TlVMTDsJCS8qIHB0ciB0byBudWxsIGJpdG1hcCBpbiB0dXBsZSAqLwotCWJvb2wJCXNsb3cgPSBm YWxzZTsJLyogZG8gd2UgaGF2ZSB0byB3YWxrIGF0dHJzPyAqLwogCWludAkJCWRhdGFfb2ZmOwkJ LyogdHVwbGUgZGF0YSBvZmZzZXQgKi8KIAlpbnQJCQlvZmY7CQkJLyogY3VycmVudCBvZmZzZXQg d2l0aGluIGRhdGEgKi8KKwlpbnQJCQlzdGFydEF0dHI7CisJaW50CQkJZmlyc3ROdWxsQXR0cjsK Kwlib29sCQloYXNudWxscyA9IEluZGV4VHVwbGVIYXNOdWxscyh0dXApOworCWludAkJCWk7CiAK LQkvKiAtLS0tLS0tLS0tLS0tLS0tCi0JICoJIFRocmVlIGNhc2VzOgotCSAqCi0JICoJIDE6IE5v IG51bGxzIGFuZCBubyB2YXJpYWJsZS13aWR0aCBhdHRyaWJ1dGVzLgotCSAqCSAyOiBIYXMgYSBu dWxsIG9yIGEgdmFyLXdpZHRoIEFGVEVSIGF0dC4KLQkgKgkgMzogSGFzIG51bGxzIG9yIHZhci13 aWR0aHMgQkVGT1JFIGF0dC4KLQkgKiAtLS0tLS0tLS0tLS0tLS0tCi0JICovCi0KLQlkYXRhX29m ZiA9IEluZGV4SW5mb0ZpbmREYXRhT2Zmc2V0KHR1cC0+dF9pbmZvKTsKKwkvKiBEaWQgc29tZW9u ZSBmb3JnZXQgdG8gY2FsbCBUdXBsZURlc2NGaW5hbGl6ZSgpPyAqLworCUFzc2VydCh0dXBsZURl c2MtPmZpcnN0Tm9uQ2FjaGVkT2Zmc2V0QXR0ciA+PSAwKTsKIAogCWF0dG51bS0tOwogCi0JaWYg KEluZGV4VHVwbGVIYXNOdWxscyh0dXApKQotCXsKLQkJLyoKLQkJICogdGhlcmUncyBhIG51bGwg c29tZXdoZXJlIGluIHRoZSB0dXBsZQotCQkgKgotCQkgKiBjaGVjayB0byBzZWUgaWYgZGVzaXJl ZCBhdHQgaXMgbnVsbAotCQkgKi8KKwlkYXRhX29mZiA9IEluZGV4SW5mb0ZpbmREYXRhT2Zmc2V0 KHR1cC0+dF9pbmZvKTsKKwl0cCA9IChjaGFyICopIHR1cCArIGRhdGFfb2ZmOwogCi0JCS8qIFhY WCAia25vd3MiIHRfYml0cyBhcmUganVzdCBhZnRlciBmaXhlZCB0dXBsZSBoZWFkZXIhICovCisJ LyoKKwkgKiBUbyBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgd2UgbmVlZCB0byBs b29rIGF0LCBzdGFydCB3YWxraW5nCisJICogdGhlIHR1cGxlIGF0IHRoZSBhdHRyaWJ1dGUgd2l0 aCB0aGUgaGlnaGVzdCBhdHRjYWNoZW9mZiBwcmlvciB0byBhdHRudW0KKwkgKiBvciB0aGUgZmly c3QgTlVMTCBhdHRyaWJ1dGUgcHJpb3IgdG8gYXR0bnVtLCB3aGljaGV2ZXIgY29tZXMgZmlyc3Qu CisJICovCisJaWYgKGhhc251bGxzKQorCXsKIAkJYnAgPSAoYml0czggKikgKChjaGFyICopIHR1 cCArIHNpemVvZihJbmRleFR1cGxlRGF0YSkpOwotCi0JCS8qCi0JCSAqIE5vdyBjaGVjayB0byBz ZWUgaWYgYW55IHByZWNlZGluZyBiaXRzIGFyZSBudWxsLi4uCi0JCSAqLwotCQl7Ci0JCQlpbnQJ CQlieXRlID0gYXR0bnVtID4+IDM7Ci0JCQlpbnQJCQlmaW5hbGJpdCA9IGF0dG51bSAmIDB4MDc7 Ci0KLQkJCS8qIGNoZWNrIGZvciBudWxscyAiYmVmb3JlIiBmaW5hbCBiaXQgb2YgbGFzdCBieXRl ICovCi0JCQlpZiAoKH5icFtieXRlXSkgJiAoKDEgPDwgZmluYWxiaXQpIC0gMSkpCi0JCQkJc2xv dyA9IHRydWU7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogY2hlY2sgZm9yIG51bGxzIGluIGFueSAi ZWFybGllciIgYnl0ZXMgKi8KLQkJCQlpbnQJCQlpOwotCi0JCQkJZm9yIChpID0gMDsgaSA8IGJ5 dGU7IGkrKykKLQkJCQl7Ci0JCQkJCWlmIChicFtpXSAhPSAweEZGKQotCQkJCQl7Ci0JCQkJCQlz bG93ID0gdHJ1ZTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9CisJCWZp cnN0TnVsbEF0dHIgPSBmaXJzdF9udWxsX2F0dHIoYnAsIGF0dG51bSk7CiAJfQorCWVsc2UKKwkJ Zmlyc3ROdWxsQXR0ciA9IGF0dG51bTsKIAotCXRwID0gKGNoYXIgKikgdHVwICsgZGF0YV9vZmY7 Ci0KLQlpZiAoIXNsb3cpCisJaWYgKHR1cGxlRGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZzZXRBdHRy ID4gMCkKIAl7Ci0JCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dDsKLQotCQkvKgotCQkgKiBJZiB3ZSBn ZXQgaGVyZSwgdGhlcmUgYXJlIG5vIG51bGxzIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIHRhcmdl dAotCQkgKiBhdHRyaWJ1dGUuICBJZiB3ZSBoYXZlIGEgY2FjaGVkIG9mZnNldCwgd2UgY2FuIHVz ZSBpdC4KLQkJICovCi0JCWF0dCA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0 bnVtKTsKLQkJaWYgKGF0dC0+YXR0Y2FjaGVvZmYgPj0gMCkKLQkJCXJldHVybiBmZXRjaGF0dChh dHQsIHRwICsgYXR0LT5hdHRjYWNoZW9mZik7Ci0KIAkJLyoKLQkJICogT3RoZXJ3aXNlLCBjaGVj ayBmb3Igbm9uLWZpeGVkLWxlbmd0aCBhdHRycyB1cCB0byBhbmQgaW5jbHVkaW5nCi0JCSAqIHRh cmdldC4gIElmIHRoZXJlIGFyZW4ndCBhbnksIGl0J3Mgc2FmZSB0byBjaGVhcGx5IGluaXRpYWxp emUgdGhlCi0JCSAqIGNhY2hlZCBvZmZzZXRzIGZvciB0aGVzZSBhdHRycy4KKwkJICogU3RhcnQg YXQgdGhlIGhpZ2hlc3QgYXR0Y2FjaGVvZmYgYXR0cmlidXRlIHdpdGggbm8gTlVMTHMgaW4gcHJp b3IKKwkJICogYXR0cmlidXRlcy4KIAkJICovCi0JCWlmIChJbmRleFR1cGxlSGFzVmFyd2lkdGhz KHR1cCkpCi0JCXsKLQkJCWludAkJCWo7Ci0KLQkJCWZvciAoaiA9IDA7IGogPD0gYXR0bnVtOyBq KyspCi0JCQl7Ci0JCQkJaWYgKFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaiktPmF0 dGxlbiA8PSAwKQotCQkJCXsKLQkJCQkJc2xvdyA9IHRydWU7Ci0JCQkJCWJyZWFrOwotCQkJCX0K LQkJCX0KLQkJfQorCQlzdGFydEF0dHIgPSBNaW4odHVwbGVEZXNjLT5maXJzdE5vbkNhY2hlZE9m ZnNldEF0dHIgLSAxLCBmaXJzdE51bGxBdHRyKTsKKwkJb2ZmID0gVHVwbGVEZXNjQ29tcGFjdEF0 dHIodHVwbGVEZXNjLCBzdGFydEF0dHIpLT5hdHRjYWNoZW9mZjsKIAl9Ci0KLQlpZiAoIXNsb3cp CisJZWxzZQogCXsKLQkJaW50CQkJbmF0dHMgPSB0dXBsZURlc2MtPm5hdHRzOwotCQlpbnQJCQlq ID0gMTsKLQotCQkvKgotCQkgKiBJZiB3ZSBnZXQgaGVyZSwgd2UgaGF2ZSBhIHR1cGxlIHdpdGgg bm8gbnVsbHMgb3IgdmFyLXdpZHRocyB1cCB0bwotCQkgKiBhbmQgaW5jbHVkaW5nIHRoZSB0YXJn ZXQgYXR0cmlidXRlLCBzbyB3ZSBjYW4gdXNlIHRoZSBjYWNoZWQgb2Zmc2V0Ci0JCSAqIC4uLiBv bmx5IHdlIGRvbid0IGhhdmUgaXQgeWV0LCBvciB3ZSdkIG5vdCBoYXZlIGdvdCBoZXJlLiAgU2lu Y2UKLQkJICogaXQncyBjaGVhcCB0byBjb21wdXRlIG9mZnNldHMgZm9yIGZpeGVkLXdpZHRoIGNv bHVtbnMsIHdlIHRha2UgdGhlCi0JCSAqIG9wcG9ydHVuaXR5IHRvIGluaXRpYWxpemUgdGhlIGNh Y2hlZCBvZmZzZXRzIGZvciAqYWxsKiB0aGUgbGVhZGluZwotCQkgKiBmaXhlZC13aWR0aCBjb2x1 bW5zLCBpbiBob3BlIG9mIGF2b2lkaW5nIGZ1dHVyZSB2aXNpdHMgdG8gdGhpcwotCQkgKiByb3V0 aW5lLgotCQkgKi8KLQkJVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCAwKS0+YXR0Y2Fj aGVvZmYgPSAwOworCQkvKiBPdGhlcndpc2UsIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcuLi4gKi8K KwkJc3RhcnRBdHRyID0gMDsKKwkJb2ZmID0gMDsKKwl9CiAKLQkJLyogd2UgbWlnaHQgaGF2ZSBz ZXQgc29tZSBvZmZzZXRzIGluIHRoZSBzbG93IHBhdGggcHJldmlvdXNseSAqLwotCQl3aGlsZSAo aiA8IG5hdHRzICYmIFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaiktPmF0dGNhY2hl b2ZmID4gMCkKLQkJCWorKzsKKwkvKgorCSAqIENhbGN1bGF0ZSAnb2ZmJyB1cCB0byB0aGUgZmly c3QgTlVMTCBhdHRyLiAgV2UgdXNlIHR3byBjaGVhcGVyIGxvb3BzCisJICogd2hlbiB0aGUgdHVw bGUgaGFzIG5vIHZhcmlhYmxlLXdpZHRoIGNvbHVtbnMuICBXaGVuIHZhcmlhYmxlLXdpZHRoCisJ ICogY29sdW1ucyBleGlzdHMsIHdlIHVzZSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIoKSB0byBtb3Zl IHRoZSBvZmZzZXQKKwkgKiBiZXlvbmQgdGhlIGN1cnJlbnQgYXR0cmlidXRlLgorCSAqLworCWlm IChJbmRleFR1cGxlSGFzVmFyd2lkdGhzKHR1cCkpCisJeworCQkvKiBDYWxjdWxhdGUgdGhlIG9m ZnNldCB1cCB1bnRpbCB0aGUgZmlyc3QgTlVMTCAqLworCQlmb3IgKGkgPSBzdGFydEF0dHI7IGkg PCBmaXJzdE51bGxBdHRyOyBpKyspCisJCXsKKwkJCWNhdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0 dHIodHVwbGVEZXNjLCBpKTsKIAotCQlvZmYgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURl c2MsIGogLSAxKS0+YXR0Y2FjaGVvZmYgKwotCQkJVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVE ZXNjLCBqIC0gMSktPmF0dGxlbjsKKwkJCW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnkob2ZmLAor CQkJCQkJCQkJICBjYXR0ci0+YXR0YWxpZ25ieSwKKwkJCQkJCQkJCSAgY2F0dHItPmF0dGxlbiwK KwkJCQkJCQkJCSAgdHAgKyBvZmYpOworCQkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2ludGVyKG9m ZiwgY2F0dHItPmF0dGxlbiwgdHAgKyBvZmYpOworCQl9CiAKLQkJZm9yICg7IGogPCBuYXR0czsg aisrKQorCQkvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCBmb3IgYW55IHJlbWFpbmluZyBjb2x1bW5z LiAqLworCQlmb3IgKDsgaSA8IGF0dG51bTsgaSsrKQogCQl7Ci0JCQlDb21wYWN0QXR0cmlidXRl ICphdHQgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGopOworCQkJQXNzZXJ0KGhh c251bGxzKTsKIAotCQkJaWYgKGF0dC0+YXR0bGVuIDw9IDApCi0JCQkJYnJlYWs7CisJCQlpZiAo YXR0X2lzbnVsbChpLCBicCkpCisJCQkJY29udGludWU7CiAKLQkJCW9mZiA9IGF0dF9ub21pbmFs X2FsaWduYnkob2ZmLCBhdHQtPmF0dGFsaWduYnkpOworCQkJY2F0dHIgPSBUdXBsZURlc2NDb21w YWN0QXR0cih0dXBsZURlc2MsIGkpOwogCi0JCQlhdHQtPmF0dGNhY2hlb2ZmID0gb2ZmOwotCi0J CQlvZmYgKz0gYXR0LT5hdHRsZW47CisJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwK KwkJCQkJCQkJCSAgY2F0dHItPmF0dGFsaWduYnksCisJCQkJCQkJCQkgIGNhdHRyLT5hdHRsZW4s CisJCQkJCQkJCQkgIHRwICsgb2ZmKTsKKwkJCW9mZiA9IGF0dF9hZGRsZW5ndGhfcG9pbnRlcihv ZmYsIGNhdHRyLT5hdHRsZW4sIHRwICsgb2ZmKTsKIAkJfQotCi0JCUFzc2VydChqID4gYXR0bnVt KTsKLQotCQlvZmYgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSktPmF0 dGNhY2hlb2ZmOwogCX0KIAllbHNlCiAJewotCQlib29sCQl1c2VjYWNoZSA9IHRydWU7Ci0JCWlu dAkJCWk7CisJCS8qIEhhbmRsZSB0dXBsZXMgd2l0aCBvbmx5IGZpeGVkLXdpZHRoIGF0dHJpYnV0 ZXMgKi8KIAotCQkvKgotCQkgKiBOb3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgdG8gd2FsayB0aGUg dHVwbGUgQ0FSRUZVTExZLiAgQnV0IHdlIHN0aWxsCi0JCSAqIG1pZ2h0IGJlIGFibGUgdG8gY2Fj aGUgc29tZSBvZmZzZXRzIGZvciBuZXh0IHRpbWUuCi0JCSAqCi0JCSAqIE5vdGUgLSBUaGlzIGxv b3AgaXMgYSBsaXR0bGUgdHJpY2t5LiAgRm9yIGVhY2ggbm9uLW51bGwgYXR0cmlidXRlLAotCQkg KiB3ZSBoYXZlIHRvIGZpcnN0IGFjY291bnQgZm9yIGFsaWdubWVudCBwYWRkaW5nIGJlZm9yZSB0 aGUgYXR0ciwKLQkJICogdGhlbiBhZHZhbmNlIG92ZXIgdGhlIGF0dHIgYmFzZWQgb24gaXRzIGxl bmd0aC4gIE51bGxzIGhhdmUgbm8KLQkJICogc3RvcmFnZSBhbmQgbm8gYWxpZ25tZW50IHBhZGRp bmcgZWl0aGVyLiAgV2UgY2FuIHVzZS9zZXQKLQkJICogYXR0Y2FjaGVvZmYgdW50aWwgd2UgcmVh Y2ggZWl0aGVyIGEgbnVsbCBvciBhIHZhci13aWR0aCBhdHRyaWJ1dGUuCi0JCSAqLwotCQlvZmYg PSAwOwotCQlmb3IgKGkgPSAwOzsgaSsrKQkJLyogbG9vcCBleGl0IGlzIGF0ICJicmVhayIgKi8K KwkJLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgdXAgdW50aWwgdGhlIGZpcnN0IE5VTEwgKi8KKwkJ Zm9yIChpID0gc3RhcnRBdHRyOyBpIDwgZmlyc3ROdWxsQXR0cjsgaSsrKQogCQl7Ci0JCQlDb21w YWN0QXR0cmlidXRlICphdHQgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGkpOwor CQkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGkpOwogCi0JCQlpZiAo SW5kZXhUdXBsZUhhc051bGxzKHR1cCkgJiYgYXR0X2lzbnVsbChpLCBicCkpCi0JCQl7Ci0JCQkJ dXNlY2FjaGUgPSBmYWxzZTsKLQkJCQljb250aW51ZTsJCS8qIHRoaXMgY2Fubm90IGJlIHRoZSB0 YXJnZXQgYXR0ICovCi0JCQl9Ci0KLQkJCS8qIElmIHdlIGtub3cgdGhlIG5leHQgb2Zmc2V0LCB3 ZSBjYW4gc2tpcCB0aGUgcmVzdCAqLwotCQkJaWYgKHVzZWNhY2hlICYmIGF0dC0+YXR0Y2FjaGVv ZmYgPj0gMCkKLQkJCQlvZmYgPSBhdHQtPmF0dGNhY2hlb2ZmOwotCQkJZWxzZSBpZiAoYXR0LT5h dHRsZW4gPT0gLTEpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBXZSBjYW4gb25seSBjYWNoZSB0aGUg b2Zmc2V0IGZvciBhIHZhcmxlbmEgYXR0cmlidXRlIGlmIHRoZQotCQkJCSAqIG9mZnNldCBpcyBh bHJlYWR5IHN1aXRhYmx5IGFsaWduZWQsIHNvIHRoYXQgdGhlcmUgd291bGQgYmUKLQkJCQkgKiBu byBwYWQgYnl0ZXMgaW4gYW55IGNhc2U6IHRoZW4gdGhlIG9mZnNldCB3aWxsIGJlIHZhbGlkIGZv cgotCQkJCSAqIGVpdGhlciBhbiBhbGlnbmVkIG9yIHVuYWxpZ25lZCB2YWx1ZS4KLQkJCQkgKi8K LQkJCQlpZiAodXNlY2FjaGUgJiYKLQkJCQkJb2ZmID09IGF0dF9ub21pbmFsX2FsaWduYnkob2Zm LCBhdHQtPmF0dGFsaWduYnkpKQotCQkJCQlhdHQtPmF0dGNhY2hlb2ZmID0gb2ZmOwotCQkJCWVs c2UKLQkJCQl7Ci0JCQkJCW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnkob2ZmLCBhdHQtPmF0dGFs aWduYnksIC0xLAotCQkJCQkJCQkJCQkgIHRwICsgb2ZmKTsKLQkJCQkJdXNlY2FjaGUgPSBmYWxz ZTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogbm90IHZhcmxlbmEsIHNvIHNh ZmUgdG8gdXNlIGF0dF9ub21pbmFsX2FsaWduYnkgKi8KLQkJCQlvZmYgPSBhdHRfbm9taW5hbF9h bGlnbmJ5KG9mZiwgYXR0LT5hdHRhbGlnbmJ5KTsKKwkJCUFzc2VydChjYXR0ci0+YXR0bGVuID4g MCk7CisJCQlvZmYgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgY2F0dHItPmF0dGFsaWduYnkp OworCQkJb2ZmICs9IGNhdHRyLT5hdHRsZW47CisJCX0KIAotCQkJCWlmICh1c2VjYWNoZSkKLQkJ CQkJYXR0LT5hdHRjYWNoZW9mZiA9IG9mZjsKLQkJCX0KKwkJLyogQ2FsY3VsYXRlIHRoZSBvZmZz ZXQgZm9yIGFueSByZW1haW5pbmcgY29sdW1ucy4gKi8KKwkJZm9yICg7IGkgPCBhdHRudW07IGkr KykKKwkJeworCQkJQXNzZXJ0KGhhc251bGxzKTsKIAotCQkJaWYgKGkgPT0gYXR0bnVtKQotCQkJ CWJyZWFrOworCQkJaWYgKGF0dF9pc251bGwoaSwgYnApKQorCQkJCWNvbnRpbnVlOwogCi0JCQlv ZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCBhdHQtPmF0dGxlbiwgdHAgKyBvZmYpOwor CQkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGkpOwogCi0JCQlpZiAo dXNlY2FjaGUgJiYgYXR0LT5hdHRsZW4gPD0gMCkKLQkJCQl1c2VjYWNoZSA9IGZhbHNlOworCQkJ QXNzZXJ0KGNhdHRyLT5hdHRsZW4gPiAwKTsKKwkJCW9mZiA9IGF0dF9ub21pbmFsX2FsaWduYnko b2ZmLCBjYXR0ci0+YXR0YWxpZ25ieSk7CisJCQlvZmYgKz0gY2F0dHItPmF0dGxlbjsKIAkJfQog CX0KIAotCXJldHVybiBmZXRjaGF0dChUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0 dG51bSksIHRwICsgb2ZmKTsKKwljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVz YywgYXR0bnVtKTsKKwlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwgY2F0dHItPmF0dGFs aWduYnksCisJCQkJCQkJICBjYXR0ci0+YXR0bGVuLCB0cCArIG9mZik7CisJcmV0dXJuIGZldGNo YXR0KGNhdHRyLCB0cCArIG9mZik7CiB9CiAKIC8qCkBAIC00ODAsNjMgKzM4Nyw4NyBAQCBpbmRl eF9kZWZvcm1fdHVwbGVfaW50ZXJuYWwoVHVwbGVEZXNjIHR1cGxlRGVzY3JpcHRvciwKIAkJCQkJ CQlEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiAJCQkJCQkJY2hhciAqdHAsIGJpdHM4ICpi cCwgaW50IGhhc251bGxzKQogeworCUNvbXBhY3RBdHRyaWJ1dGUgKmNhdHRyOwogCWludAkJCW5h dHRzID0gdHVwbGVEZXNjcmlwdG9yLT5uYXR0czsgLyogbnVtYmVyIG9mIGF0dHMgdG8gZXh0cmFj dCAqLwotCWludAkJCWF0dG51bTsKLQlpbnQJCQlvZmYgPSAwOwkJLyogb2Zmc2V0IGluIHR1cGxl IGRhdGEgKi8KLQlib29sCQlzbG93ID0gZmFsc2U7CS8qIGNhbiB3ZSB1c2Uvc2V0IGF0dGNhY2hl b2ZmPyAqLworCWludAkJCWF0dG51bSA9IDA7CisJdWludDMyCQlvZmYgPSAwOwkJLyogb2Zmc2V0 IGluIHR1cGxlIGRhdGEgKi8KKwlpbnQJCQlmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0cjsKKwlpbnQJ CQlmaXJzdE51bGxBdHRyOwogCiAJLyogQXNzZXJ0IHRvIHByb3RlY3QgY2FsbGVycyB3aG8gYWxs b2NhdGUgZml4ZWQtc2l6ZSBhcnJheXMgKi8KIAlBc3NlcnQobmF0dHMgPD0gSU5ERVhfTUFYX0tF WVMpOwogCi0JZm9yIChhdHRudW0gPSAwOyBhdHRudW0gPCBuYXR0czsgYXR0bnVtKyspCisJLyog RGlkIHNvbWVvbmUgZm9yZ2V0IHRvIGNhbGwgVHVwbGVEZXNjRmluYWxpemUoKT8gKi8KKwlBc3Nl cnQodHVwbGVEZXNjcmlwdG9yLT5maXJzdE5vbkNhY2hlZE9mZnNldEF0dHIgPj0gMCk7CisKKwlm aXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciA9IE1pbih0dXBsZURlc2NyaXB0b3ItPmZpcnN0Tm9uQ2Fj aGVkT2Zmc2V0QXR0ciwgbmF0dHMpOworCisJaWYgKGhhc251bGxzKQorCXsKKwkJZmlyc3ROdWxs QXR0ciA9IGZpcnN0X251bGxfYXR0cihicCwgbmF0dHMpOworCQlmaXJzdE5vbkNhY2hlT2Zmc2V0 QXR0ciA9IE1pbihmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciwgZmlyc3ROdWxsQXR0cik7CisJfQor CWVsc2UKKwkJZmlyc3ROdWxsQXR0ciA9IG5hdHRzOworCisJaWYgKGZpcnN0Tm9uQ2FjaGVPZmZz ZXRBdHRyID4gMCkKIAl7Ci0JCUNvbXBhY3RBdHRyaWJ1dGUgKnRoaXNhdHQgPSBUdXBsZURlc2ND b21wYWN0QXR0cih0dXBsZURlc2NyaXB0b3IsIGF0dG51bSk7CisjaWZkZWYgVVNFX0FTU0VSVF9D SEVDS0lORworCQkvKiBJbiBBc3NlcnQgZW5hYmxlZCBidWlsZHMsIHZlcmlmeSBhdHRjYWNoZW9m ZiBpcyBjb3JyZWN0ICovCisJCW9mZiA9IDA7CisjZW5kaWYKIAotCQlpZiAoaGFzbnVsbHMgJiYg YXR0X2lzbnVsbChhdHRudW0sIGJwKSkKKwkJZG8KIAkJewotCQkJdmFsdWVzW2F0dG51bV0gPSAo RGF0dW0pIDA7Ci0JCQlpc251bGxbYXR0bnVtXSA9IHRydWU7Ci0JCQlzbG93ID0gdHJ1ZTsJCS8q IGNhbid0IHVzZSBhdHRjYWNoZW9mZiBhbnltb3JlICovCi0JCQljb250aW51ZTsKLQkJfQorCQkJ aXNudWxsW2F0dG51bV0gPSBmYWxzZTsKKwkJCWNhdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIo dHVwbGVEZXNjcmlwdG9yLCBhdHRudW0pOwogCi0JCWlzbnVsbFthdHRudW1dID0gZmFsc2U7Cisj aWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCQkJb2ZmID0gYXR0X25vbWluYWxfYWxpZ25ieShv ZmYsIGNhdHRyLT5hdHRhbGlnbmJ5KTsKKwkJCUFzc2VydChvZmYgPT0gY2F0dHItPmF0dGNhY2hl b2ZmKTsKKwkJCW9mZiArPSBjYXR0ci0+YXR0bGVuOworI2VuZGlmCiAKLQkJaWYgKCFzbG93ICYm IHRoaXNhdHQtPmF0dGNhY2hlb2ZmID49IDApCi0JCQlvZmYgPSB0aGlzYXR0LT5hdHRjYWNoZW9m ZjsKLQkJZWxzZSBpZiAodGhpc2F0dC0+YXR0bGVuID09IC0xKQotCQl7Ci0JCQkvKgotCQkJICog V2UgY2FuIG9ubHkgY2FjaGUgdGhlIG9mZnNldCBmb3IgYSB2YXJsZW5hIGF0dHJpYnV0ZSBpZiB0 aGUKLQkJCSAqIG9mZnNldCBpcyBhbHJlYWR5IHN1aXRhYmx5IGFsaWduZWQsIHNvIHRoYXQgdGhl cmUgd291bGQgYmUgbm8KLQkJCSAqIHBhZCBieXRlcyBpbiBhbnkgY2FzZTogdGhlbiB0aGUgb2Zm c2V0IHdpbGwgYmUgdmFsaWQgZm9yIGVpdGhlcgotCQkJICogYW4gYWxpZ25lZCBvciB1bmFsaWdu ZWQgdmFsdWUuCi0JCQkgKi8KLQkJCWlmICghc2xvdyAmJgotCQkJCW9mZiA9PSBhdHRfbm9taW5h bF9hbGlnbmJ5KG9mZiwgdGhpc2F0dC0+YXR0YWxpZ25ieSkpCi0JCQkJdGhpc2F0dC0+YXR0Y2Fj aGVvZmYgPSBvZmY7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25i eShvZmYsIHRoaXNhdHQtPmF0dGFsaWduYnksIC0xLAotCQkJCQkJCQkJCSAgdHAgKyBvZmYpOwot CQkJCXNsb3cgPSB0cnVlOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyogbm90IHZhcmxl bmEsIHNvIHNhZmUgdG8gdXNlIGF0dF9ub21pbmFsX2FsaWduYnkgKi8KLQkJCW9mZiA9IGF0dF9u b21pbmFsX2FsaWduYnkob2ZmLCB0aGlzYXR0LT5hdHRhbGlnbmJ5KTsKKwkJCXZhbHVlc1thdHRu dW1dID0gZmV0Y2hfYXR0X25vZXJyKHRwICsgY2F0dHItPmF0dGNhY2hlb2ZmLCBjYXR0ci0+YXR0 Ynl2YWwsCisJCQkJCQkJCQkJCSBjYXR0ci0+YXR0bGVuKTsKKwkJfSB3aGlsZSAoKythdHRudW0g PCBmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0cik7CiAKLQkJCWlmICghc2xvdykKLQkJCQl0aGlzYXR0 LT5hdHRjYWNoZW9mZiA9IG9mZjsKLQkJfQorCQlvZmYgPSBjYXR0ci0+YXR0Y2FjaGVvZmYgKyBj YXR0ci0+YXR0bGVuOworCX0KIAotCQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoYXR0KHRoaXNhdHQs IHRwICsgb2ZmKTsKKwlmb3IgKDsgYXR0bnVtIDwgZmlyc3ROdWxsQXR0cjsgYXR0bnVtKyspCisJ eworCQlpc251bGxbYXR0bnVtXSA9IGZhbHNlOworCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RB dHRyKHR1cGxlRGVzY3JpcHRvciwgYXR0bnVtKTsKKworCQkvKiBhbGlnbiAnb2ZmJywgZmV0Y2gg dGhlIGRhdHVtLCBhbmQgaW5jcmVtZW50IG9mZiBiZXlvbmQgdGhlIGRhdHVtICovCisJCXZhbHVl c1thdHRudW1dID0gYWxpZ25fZmV0Y2hfdGhlbl9hZGQodHAsCisJCQkJCQkJCQkJCSAgJm9mZiwK KwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0Ynl2YWwsCisJCQkJCQkJCQkJCSAgY2F0dHItPmF0dGxl biwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0YWxpZ25ieSk7CisJfQogCi0JCW9mZiA9IGF0dF9h ZGRsZW5ndGhfcG9pbnRlcihvZmYsIHRoaXNhdHQtPmF0dGxlbiwgdHAgKyBvZmYpOworCWZvciAo OyBhdHRudW0gPCBuYXR0czsgYXR0bnVtKyspCisJeworCQlBc3NlcnQoaGFzbnVsbHMpOwogCi0J CWlmICh0aGlzYXR0LT5hdHRsZW4gPD0gMCkKLQkJCXNsb3cgPSB0cnVlOwkJLyogY2FuJ3QgdXNl IGF0dGNhY2hlb2ZmIGFueW1vcmUgKi8KKwkJaWYgKGF0dF9pc251bGwoYXR0bnVtLCBicCkpCisJ CXsKKwkJCXZhbHVlc1thdHRudW1dID0gKERhdHVtKSAwOworCQkJaXNudWxsW2F0dG51bV0gPSB0 cnVlOworCQkJY29udGludWU7CisJCX0KKworCQlpc251bGxbYXR0bnVtXSA9IGZhbHNlOworCQlj YXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzY3JpcHRvciwgYXR0bnVtKTsKKwor CQkvKiBhbGlnbiAnb2ZmJywgZmV0Y2ggdGhlIGRhdHVtLCBhbmQgaW5jcmVtZW50IG9mZiBiZXlv bmQgdGhlIGRhdHVtICovCisJCXZhbHVlc1thdHRudW1dID0gYWxpZ25fZmV0Y2hfdGhlbl9hZGQo dHAsCisJCQkJCQkJCQkJCSAgJm9mZiwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0Ynl2YWwsCisJ CQkJCQkJCQkJCSAgY2F0dHItPmF0dGxlbiwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0YWxpZ25i eSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3R1cGRl c2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdHVwZGVzYy5jCmluZGV4IDIxMzczODVh ODMzLi5jNjg1NjEzMzdkNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90 dXBkZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90dXBkZXNjLmMKQEAgLTE5 Nyw2ICsxOTcsMTAgQEAgQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoaW50IG5hdHRzKQogCWRlc2Mt PnRkdHlwbW9kID0gLTE7CiAJZGVzYy0+dGRyZWZjb3VudCA9IC0xOwkJLyogYXNzdW1lIG5vdCBy ZWZlcmVuY2UtY291bnRlZCAqLwogCisJLyogVGhpcyB3aWxsIGJlIHNldCB0byB0aGUgY29ycmVj dCB2YWx1ZSBieSBUdXBsZURlc2NGaW5hbGl6ZSgpICovCisJZGVzYy0+Zmlyc3ROb25DYWNoZWRP ZmZzZXRBdHRyID0gLTE7CisJZGVzYy0+Zmlyc3ROb25HdWFyYW50ZWVkQXR0ciA9IC0xOworCiAJ cmV0dXJuIGRlc2M7CiB9CiAKQEAgLTQ1Nyw2ICs0NjEsOSBAQCBUdXBsZURlc2NDb3B5KFR1cGxl RGVzYyBkc3QsIFR1cGxlRGVzYyBzcmMpCiAgKgkJZGVzY3JpcHRvciB0byBhbm90aGVyLgogICoK ICAqICEhISBDb25zdHJhaW50cyBhbmQgZGVmYXVsdHMgYXJlIG5vdCBjb3BpZWQgISEhCisgKgor ICogVGhlIGNhbGxlciBtdXN0IHRha2UgY2FyZSBvZiBjYWxsaW5nIFR1cGxlRGVzY0ZpbmFsaXpl KCkgb24gJ2RzdCcgb25jZSBhbGwKKyAqIFR1cGxlRGVzYyBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRl LgogICovCiB2b2lkCiBUdXBsZURlc2NDb3B5RW50cnkoVHVwbGVEZXNjIGRzdCwgQXR0ck51bWJl ciBkc3RBdHRubywKQEAgLTQ4OSw2ICs0OTYsNTAgQEAgVHVwbGVEZXNjQ29weUVudHJ5KFR1cGxl RGVzYyBkc3QsIEF0dHJOdW1iZXIgZHN0QXR0bm8sCiAJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1 dGUoZHN0LCBkc3RBdHRubyAtIDEpOwogfQogCisvKgorICogVHVwbGVEZXNjRmluYWxpemUKKyAq CQlGaW5hbGl6ZSB0aGUgZ2l2ZW4gVHVwbGVEZXNjLiAgVGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRl ciB0aGUKKyAqCQlhdHRyaWJ1dGVzIGFycmF5cyBoYXZlIGJlZW4gcG9wdWxhdGVkIG9yIGFkanVz dGVkIGJ5IGFueSBjb2RlLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIHBvcHVsYXRlX2Nv bXBhY3RfYXR0cmlidXRlKCkgYW5kIGJlZm9yZQorICogQmxlc3NUdXBsZURlc2MoKS4KKyAqLwor dm9pZAorVHVwbGVEZXNjRmluYWxpemUoVHVwbGVEZXNjIHR1cGRlc2MpCit7CisJaW50CQkJZmly c3ROb25DYWNoZWRPZmZzZXRBdHRyID0gMDsKKwlpbnQJCQlmaXJzdE5vbkd1YXJhbnRlZWRBdHRy ID0gdHVwZGVzYy0+bmF0dHM7CisJaW50CQkJb2ZmID0gMDsKKworCWZvciAoaW50IGkgPSAwOyBp IDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwl7CisJCUNvbXBhY3RBdHRyaWJ1dGUgKmNhdHRyID0g VHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwZGVzYywgaSk7CisKKwkJLyoKKwkJICogRmluZCB0aGUg aGlnaGVzdCBhdHRudW0gd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBleGlzdCBpbiBhbGwgdHVwbGVz CisJCSAqIGluIHRoZSB0YWJsZS4gIFdlIGN1cnJlbnRseSBvbmx5IHBheSBhdHRlbnRpb24gdG8g Ynl2YWwgYXR0cmlidXRlcworCQkgKiB0byBhbGxvdyBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMg ZHVyaW5nIHR1cGxlIGRlZm9ybWF0aW9uLgorCQkgKi8KKwkJaWYgKGZpcnN0Tm9uR3VhcmFudGVl ZEF0dHIgPT0gdHVwZGVzYy0+bmF0dHMgJiYKKwkJCShjYXR0ci0+YXR0bnVsbGFiaWxpdHkgIT0g QVRUTlVMTEFCTEVfVkFMSUQgfHwgIWNhdHRyLT5hdHRieXZhbCB8fAorCQkJIGNhdHRyLT5hdHRo YXNtaXNzaW5nIHx8IGNhdHRyLT5hdHRpc2Ryb3BwZWQgfHwgY2F0dHItPmF0dGxlbiA8PSAwKSkK KwkJCWZpcnN0Tm9uR3VhcmFudGVlZEF0dHIgPSBpOworCisJCWlmIChjYXR0ci0+YXR0bGVuIDw9 IDApCisJCQlicmVhazsKKworCQlvZmYgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgY2F0dHIt PmF0dGFsaWduYnkpOworCisJCWNhdHRyLT5hdHRjYWNoZW9mZiA9IG9mZjsKKworCQlvZmYgKz0g Y2F0dHItPmF0dGxlbjsKKwkJZmlyc3ROb25DYWNoZWRPZmZzZXRBdHRyID0gaSArIDE7CisJfQor CisJdHVwZGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZzZXRBdHRyID0gZmlyc3ROb25DYWNoZWRPZmZz ZXRBdHRyOworCXR1cGRlc2MtPmZpcnN0Tm9uR3VhcmFudGVlZEF0dHIgPSBmaXJzdE5vbkd1YXJh bnRlZWRBdHRyOworfQorCiAvKgogICogRnJlZSBhIFR1cGxlRGVzYyBpbmNsdWRpbmcgYWxsIHN1 YnN0cnVjdHVyZQogICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3Nw Z3V0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKaW5kZXggYjI0 NmU4MTI3ZGIuLmE0Njk0YmQ4MDY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Bn aXN0L3NwZ3V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5j CkBAIC0zMzUsOSArMzM1LDYgQEAgZ2V0U3BHaXN0VHVwbGVEZXNjKFJlbGF0aW9uIGluZGV4LCBT cEdpc3RUeXBlRGVzYyAqa2V5VHlwZSkKIAkJLyogV2Ugc2hvdWxkbid0IG5lZWQgdG8gYm90aGVy IHdpdGggbWFraW5nIHRoZXNlIHZhbGlkOiAqLwogCQlhdHQtPmF0dGNvbXByZXNzaW9uID0gSW52 YWxpZENvbXByZXNzaW9uTWV0aG9kOwogCQlhdHQtPmF0dGNvbGxhdGlvbiA9IEludmFsaWRPaWQ7 Ci0JCS8qIEluIGNhc2Ugd2UgY2hhbmdlZCB0eXBsZW4sIHdlJ2QgYmV0dGVyIHJlc2V0IGZvbGxv d2luZyBvZmZzZXRzICovCi0JCWZvciAoaW50IGkgPSBzcGdGaXJzdEluY2x1ZGVDb2x1bW47IGkg PCBvdXRUdXBEZXNjLT5uYXR0czsgaSsrKQotCQkJVHVwbGVEZXNjQ29tcGFjdEF0dHIob3V0VHVw RGVzYywgaSktPmF0dGNhY2hlb2ZmID0gLTE7CiAKIAkJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1 dGUob3V0VHVwRGVzYywgc3BnS2V5Q29sdW1uKTsKIAkJVHVwbGVEZXNjRmluYWxpemUob3V0VHVw RGVzYyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMKaW5kZXggYmI5OTcxODI0ODEuLjgzYThj MDI4OTRkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCkBAIC05OTMsMjI1ICs5OTMsMjU0 IEBAIHR0c19idWZmZXJfaGVhcF9zdG9yZV90dXBsZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgSGVh cFR1cGxlIHR1cGxlLAogfQogCiAvKgotICogc2xvdF9kZWZvcm1faGVhcF90dXBsZV9pbnRlcm5h bAotICoJCUFuIGFsd2F5cyBpbmxpbmUgaGVscGVyIGZ1bmN0aW9uIGZvciB1c2UgaW4gc2xvdF9k ZWZvcm1faGVhcF90dXBsZSB0bwotICoJCWFsbG93IHRoZSBjb21waWxlciB0byBlbWl0IHNwZWNp YWxpemVkIHZlcnNpb25zIG9mIHRoaXMgZnVuY3Rpb24gZm9yCi0gKgkJdmFyaW91cyBjb21iaW5h dGlvbnMgb2YgInNsb3ciIGFuZCAiaGFzbnVsbHMiLiAgRm9yIGV4YW1wbGUsIGlmIGEKLSAqCQln aXZlbiB0dXBsZSBoYXMgbm8gbnVsbHMsIHRoZW4gd2UgbmVlZG4ndCBjaGVjayAiaGFzbnVsbHMi IGZvciBldmVyeQotICoJCWF0dHJpYnV0ZSB0aGF0IHdlJ3JlIGRlZm9ybWluZy4gIFRoZSBjYWxs ZXIgY2FuIGp1c3QgY2FsbCB0aGlzCi0gKgkJZnVuY3Rpb24gd2l0aCBoYXNudWxscyBzZXQgdG8g Y29uc3RhbnQtZmFsc2UgYW5kIGhhdmUgdGhlIGNvbXBpbGVyCi0gKgkJcmVtb3ZlIHRoZSBjb25z dGFudC1mYWxzZSBicmFuY2hlcyBhbmQgZW1pdCBtb3JlIG9wdGltYWwgY29kZS4KLSAqCi0gKiBS ZXR1cm5zIHRoZSBuZXh0IGF0dG51bSB0byBkZWZvcm0sIHdoaWNoIGNhbiBiZSBlcXVhbCB0byBu YXR0cyB3aGVuIHRoZQotICogZnVuY3Rpb24gbWFuYWdlcyB0byBkZWZvcm0gYWxsIHJlcXVlc3Rl ZCBhdHRyaWJ1dGVzLiAgKm9mZnAgaXMgYW4gaW5wdXQgYW5kCi0gKiBvdXRwdXQgcGFyYW1ldGVy IHdoaWNoIGlzIHRoZSBieXRlIG9mZnNldCB3aXRoaW4gdGhlIHR1cGxlIHRvIHN0YXJ0IGRlZm9y bWluZwotICogZnJvbSB3aGljaCwgb24gcmV0dXJuLCBnZXRzIHNldCB0byB0aGUgb2Zmc2V0IHdo ZXJlIHRoZSBuZXh0IGF0dHJpYnV0ZQotICogc2hvdWxkIGJlIGRlZm9ybWVkIGZyb20uICAqc2xv d3AgaXMgc2V0IHRvIHRydWUgd2hlbiBzdWJzZXF1ZW50IGRlZm9ybWluZwotICogb2YgdGhpcyB0 dXBsZSBtdXN0IHVzZSBhIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiB3aXRoICJzbG93IiBwYXNz ZWQgYXMKLSAqIHRydWUuCi0gKgotICogQ2FsbGVycyBjYW5ub3QgYXNzdW1lIHdoZW4gd2UgcmV0 dXJuICJhdHRudW0iIChpLmUuIGFsbCByZXF1ZXN0ZWQKLSAqIGF0dHJpYnV0ZXMgaGF2ZSBiZWVu IGRlZm9ybWVkKSB0aGF0IHNsb3cgbW9kZSBpc24ndCByZXF1aXJlZCBmb3IgYW55Ci0gKiBhZGRp dGlvbmFsIGRlZm9ybWluZyBhcyB0aGUgZmluYWwgYXR0cmlidXRlIG1heSBoYXZlIGNhdXNlZCBh IHN3aXRjaCB0bwotICogc2xvdyBtb2RlLgorICogc2xvdF9kZWZvcm1faGVhcF90dXBsZQorICoJ CUdpdmVuIGEgVHVwbGVUYWJsZVNsb3QsIGV4dHJhY3QgZGF0YSBmcm9tIHRoZSBzbG90J3MgcGh5 c2ljYWwgdHVwbGUKKyAqCQlpbnRvIGl0cyBEYXR1bS9pc251bGwgYXJyYXlzLiAgRGF0YSBpcyBl eHRyYWN0ZWQgdXAgdGhyb3VnaCB0aGUKKyAqCQlyZXFuYXR0cyd0aCBjb2x1bW4uICBJZiB0aGVy ZSBhcmUgaW5zdWZmaWNpZW50IGF0dHJpYnV0ZXMgaW4gdGhlIGdpdmVuCisgKgkJdHVwbGUsIHRo ZW4gc2xvdF9nZXRtaXNzaW5nYXR0cnMoKSBpcyBjYWxsZWQgdG8gcG9wdWxhdGUgdGhlCisgKgkJ cmVtYWluZGVyLiAgSWYgcmVxbmF0dHMgaXMgYWJvdmUgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVz IGluIHRoZQorICoJCXNsb3QncyBUdXBsZURlc2MsIGFuIGVycm9yIGlzIHJhaXNlZC4KKyAqCisg KgkJVGhpcyBpcyBlc3NlbnRpYWxseSBhbiBpbmNyZW1lbnRhbCB2ZXJzaW9uIG9mIGhlYXBfZGVm b3JtX3R1cGxlOgorICoJCW9uIGVhY2ggY2FsbCB3ZSBleHRyYWN0IGF0dHJpYnV0ZXMgdXAgdG8g dGhlIG9uZSBuZWVkZWQsIHdpdGhvdXQKKyAqCQlyZS1jb21wdXRpbmcgaW5mb3JtYXRpb24gYWJv dXQgcHJldmlvdXNseSBleHRyYWN0ZWQgYXR0cmlidXRlcy4KKyAqCQlzbG90LT50dHNfbnZhbGlk IGlzIHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcyBhbHJlYWR5IGV4dHJhY3RlZC4KKyAqCisgKiBU aGlzIGlzIG1hcmtlZCBhcyBhbHdheXMgaW5saW5lLCBzbyB0aGUgZGlmZmVyZW50IG9mZnAgZm9y IGRpZmZlcmVudCB0eXBlcworICogb2Ygc2xvdHMgZ2V0cyBvcHRpbWl6ZWQgYXdheS4KICAqLwot c3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIGludAotc2xvdF9kZWZvcm1faGVhcF90 dXBsZV9pbnRlcm5hbChUdXBsZVRhYmxlU2xvdCAqc2xvdCwgSGVhcFR1cGxlIHR1cGxlLAotCQkJ CQkJCQlpbnQgYXR0bnVtLCBpbnQgbmF0dHMsIGJvb2wgc2xvdywKLQkJCQkJCQkJYm9vbCBoYXNu dWxscywgdWludDMyICpvZmZwLCBib29sICpzbG93cCkKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3 YXlzX2lubGluZSB2b2lkCitzbG90X2RlZm9ybV9oZWFwX3R1cGxlKFR1cGxlVGFibGVTbG90ICpz bG90LCBIZWFwVHVwbGUgdHVwbGUsIHVpbnQzMiAqb2ZmcCwKKwkJCQkJICAgaW50IHJlcW5hdHRz KQogeworCUNvbXBhY3RBdHRyaWJ1dGUgKmNhdHRyOwogCVR1cGxlRGVzYwl0dXBsZURlc2MgPSBz bG90LT50dHNfdHVwbGVEZXNjcmlwdG9yOwotCURhdHVtCSAgICp2YWx1ZXMgPSBzbG90LT50dHNf dmFsdWVzOwotCWJvb2wJICAgKmlzbnVsbCA9IHNsb3QtPnR0c19pc251bGw7CiAJSGVhcFR1cGxl SGVhZGVyIHR1cCA9IHR1cGxlLT50X2RhdGE7CisJc2l6ZV90CQlhdHRudW07CisJaW50CQkJZmly c3ROb25DYWNoZU9mZnNldEF0dHI7CisJaW50CQkJZmlyc3ROb25HdWFyYW50ZWVkQXR0cjsKKwlp bnQJCQlmaXJzdE51bGxBdHRyOworCWludAkJCW5hdHRzOworCURhdHVtCSAgICp2YWx1ZXM7CisJ Ym9vbAkgICAqaXNudWxsOwogCWNoYXIJICAgKnRwOwkJCQkvKiBwdHIgdG8gdHVwbGUgZGF0YSAq LwotCWJpdHM4CSAgICpicCA9IHR1cC0+dF9iaXRzOwkvKiBwdHIgdG8gbnVsbCBiaXRtYXAgaW4g dHVwbGUgKi8KLQlib29sCQlzbG93bmV4dCA9IGZhbHNlOworCXVpbnQzMgkJb2ZmOwkJCS8qIG9m ZnNldCBpbiB0dXBsZSBkYXRhICovCiAKLQl0cCA9IChjaGFyICopIHR1cCArIHR1cC0+dF9ob2Zm OworCS8qIERpZCBzb21lb25lIGZvcmdldCB0byBjYWxsIFR1cGxlRGVzY0ZpbmFsaXplKCk/ICov CisJQXNzZXJ0KHR1cGxlRGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZzZXRBdHRyID49IDApOwogCi0J Zm9yICg7IGF0dG51bSA8IG5hdHRzOyBhdHRudW0rKykKKwlpc251bGwgPSBzbG90LT50dHNfaXNu dWxsOworCisJLyoKKwkgKiBTb21lIGNhbGxlcnMgbWF5IGZvcm0gYW5kIGRlZm9ybSB0dXBsZXMg cHJpb3IgdG8gTk9UIE5VTEwgY29uc3RyYWludHMKKwkgKiBiZWluZyBjaGVja2VkLiAgSGVyZSB3 ZSdkIGxpa2UgdG8gb3B0aW1pemUgdGhlIGNhc2Ugd2hlcmUgd2Ugb25seSBuZWVkCisJICogdG8g ZmV0Y2ggYXR0cmlidXRlcyBiZWZvcmUgb3IgdXAgdG8gdGhlIHBvaW50IHdoZXJlIHRoZSBhdHRy aWJ1dGUgaXMKKwkgKiBndWFyYW50ZWVkIHRvIGV4aXN0IGluIHRoZSB0dXBsZS4gIFdlIHJlbHkg b24gdGhlIHNsb3QgZmxhZyBiZWluZyBzZXQKKwkgKiBjb3JyZWN0bHkgdG8gb25seSBlbmFibGUg dGhpcyBvcHRpbWl6YXRpb24gd2hlbiBpdCdzIHZhbGlkIHRvIGRvIHNvLgorCSAqIFRoaXMgb3B0 aW1pemF0aW9uIGFsbG93cyB1cyB0byBzYXZlIGZldGNoaW5nIHRoZSBudW1iZXIgb2YgYXR0cmli dXRlcworCSAqIGZyb20gdGhlIHR1cGxlIGFuZCBzYXZlcyB0aGUgYWRkaXRpb25hbCBjb3N0IG9m IGhhbmRsaW5nIG5vbi1ieXZhbAorCSAqIGF0dHJzLgorCSAqLworCWlmIChUVFNfT0JFWVNfTk9U X05VTExfQ09OU1RSQUlOVFMoc2xvdCkpCisJCWZpcnN0Tm9uR3VhcmFudGVlZEF0dHIgPSBNaW4o cmVxbmF0dHMsIHR1cGxlRGVzYy0+Zmlyc3ROb25HdWFyYW50ZWVkQXR0cik7CisJZWxzZQorCQlm aXJzdE5vbkd1YXJhbnRlZWRBdHRyID0gMDsKKworCWZpcnN0Tm9uQ2FjaGVPZmZzZXRBdHRyID0g dHVwbGVEZXNjLT5maXJzdE5vbkNhY2hlZE9mZnNldEF0dHI7CisKKwlpZiAoSGVhcFR1cGxlSGFz TnVsbHModHVwbGUpKQogCXsKLQkJQ29tcGFjdEF0dHJpYnV0ZSAqdGhpc2F0dCA9IFR1cGxlRGVz Y0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKwkJbmF0dHMgPSBIZWFwVHVwbGVIZWFk ZXJHZXROYXR0cyh0dXApOworCQl0cCA9IChjaGFyICopIHR1cCArIE1BWEFMSUdOKG9mZnNldG9m KEhlYXBUdXBsZUhlYWRlckRhdGEsIHRfYml0cykgKworCQkJCQkJCQkJIEJJVE1BUExFTihuYXR0 cykpOwogCi0JCWlmIChoYXNudWxscyAmJiBhdHRfaXNudWxsKGF0dG51bSwgYnApKQorCQluYXR0 cyA9IE1pbihuYXR0cywgcmVxbmF0dHMpOworCQlpZiAobmF0dHMgPiBmaXJzdE5vbkd1YXJhbnRl ZWRBdHRyKQogCQl7Ci0JCQl2YWx1ZXNbYXR0bnVtXSA9IChEYXR1bSkgMDsKLQkJCWlzbnVsbFth dHRudW1dID0gdHJ1ZTsKLQkJCWlmICghc2xvdykKLQkJCXsKLQkJCQkqc2xvd3AgPSB0cnVlOwot CQkJCXJldHVybiBhdHRudW0gKyAxOwotCQkJfQotCQkJZWxzZQotCQkJCWNvbnRpbnVlOwotCQl9 CisJCQliaXRzOAkgICAqYnAgPSB0dXAtPnRfYml0czsKIAotCQlpc251bGxbYXR0bnVtXSA9IGZh bHNlOworCQkJLyogRmluZCB0aGUgZmlyc3QgTlVMTCBhdHRyICovCisJCQlmaXJzdE51bGxBdHRy ID0gZmlyc3RfbnVsbF9hdHRyKGJwLCBuYXR0cyk7CiAKLQkJLyogY2FsY3VsYXRlIHRoZSBvZmZz ZXQgb2YgdGhpcyBhdHRyaWJ1dGUgKi8KLQkJaWYgKCFzbG93ICYmIHRoaXNhdHQtPmF0dGNhY2hl b2ZmID49IDApCi0JCQkqb2ZmcCA9IHRoaXNhdHQtPmF0dGNhY2hlb2ZmOwotCQllbHNlIGlmICh0 aGlzYXR0LT5hdHRsZW4gPT0gLTEpCi0JCXsKIAkJCS8qCi0JCQkgKiBXZSBjYW4gb25seSBjYWNo ZSB0aGUgb2Zmc2V0IGZvciBhIHZhcmxlbmEgYXR0cmlidXRlIGlmIHRoZQotCQkJICogb2Zmc2V0 IGlzIGFscmVhZHkgc3VpdGFibHkgYWxpZ25lZCwgc28gdGhhdCB0aGVyZSB3b3VsZCBiZSBubwot CQkJICogcGFkIGJ5dGVzIGluIGFueSBjYXNlOiB0aGVuIHRoZSBvZmZzZXQgd2lsbCBiZSB2YWxp ZCBmb3IgZWl0aGVyCi0JCQkgKiBhbiBhbGlnbmVkIG9yIHVuYWxpZ25lZCB2YWx1ZS4KKwkJCSAq IEFuZCBwb3B1bGF0ZSB0aGUgaXNudWxsIGFycmF5IGZvciBhbGwgYXR0cmlidXRlcyBiZWluZyBm ZXRjaGVkCisJCQkgKiBmcm9tIHRoZSB0dXBsZS4KIAkJCSAqLwotCQkJaWYgKCFzbG93ICYmICpv ZmZwID09IGF0dF9ub21pbmFsX2FsaWduYnkoKm9mZnAsIHRoaXNhdHQtPmF0dGFsaWduYnkpKQot CQkJCXRoaXNhdHQtPmF0dGNhY2hlb2ZmID0gKm9mZnA7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJKm9m ZnAgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KCpvZmZwLAotCQkJCQkJCQkJCQl0aGlzYXR0LT5hdHRh bGlnbmJ5LAotCQkJCQkJCQkJCQktMSwKLQkJCQkJCQkJCQkJdHAgKyAqb2ZmcCk7CisJCQlwb3B1 bGF0ZV9pc251bGxfYXJyYXkoYnAsIG5hdHRzLCBpc251bGwpOwogCi0JCQkJaWYgKCFzbG93KQot CQkJCQlzbG93bmV4dCA9IHRydWU7Ci0JCQl9CisJCQkvKiBXZSBjYW4gb25seSB1c2UgYW55IGNh Y2hlZCBvZmZzZXRzIHVudGlsIHRoZSBmaXJzdCBOVUxMIGF0dHIgKi8KKwkJCWZpcnN0Tm9uQ2Fj aGVPZmZzZXRBdHRyID0gTWluKGZpcnN0Tm9uQ2FjaGVPZmZzZXRBdHRyLCBmaXJzdE51bGxBdHRy KTsKIAkJfQogCQllbHNlCiAJCXsKLQkJCS8qIG5vdCB2YXJsZW5hLCBzbyBzYWZlIHRvIHVzZSBh dHRfbm9taW5hbF9hbGlnbmJ5ICovCi0JCQkqb2ZmcCA9IGF0dF9ub21pbmFsX2FsaWduYnkoKm9m ZnAsIHRoaXNhdHQtPmF0dGFsaWduYnkpOworCQkJLyogT3RoZXJ3aXNlIGFsbCByZXF1aXJlZCBj b2x1bW5zIGFyZSBndWFyYW50ZWVkIHRvIGV4aXN0ICovCisJCQlmaXJzdE51bGxBdHRyID0gbmF0 dHM7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJdHAgPSAoY2hhciAqKSB0dXAgKyBNQVhBTElHTihv ZmZzZXRvZihIZWFwVHVwbGVIZWFkZXJEYXRhLCB0X2JpdHMpKTsKIAotCQkJaWYgKCFzbG93KQot CQkJCXRoaXNhdHQtPmF0dGNhY2hlb2ZmID0gKm9mZnA7CisJCS8qCisJCSAqIFdlIG9ubHkgbmVl ZCB0byBsb29rIGF0IHRoZSB0dXBsZSdzIG5hdHRzIGlmIHdlIG5lZWQgbW9yZSB0aGFuIHRoZQor CQkgKiBndWFyYW50ZWVkIG51bWJlciBvZiBjb2x1bW5zCisJCSAqLworCQlpZiAocmVxbmF0dHMg PiBmaXJzdE5vbkd1YXJhbnRlZWRBdHRyKQorCQkJbmF0dHMgPSBNaW4oSGVhcFR1cGxlSGVhZGVy R2V0TmF0dHModHVwKSwgcmVxbmF0dHMpOworCQllbHNlCisJCXsKKwkJCS8qIE5vIG5lZWQgdG8g YWNjZXNzIHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcyBpbiB0aGUgdHVwbGUgKi8KKwkJCW5hdHRz ID0gcmVxbmF0dHM7CiAJCX0KIAotCQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoYXR0KHRoaXNhdHQs IHRwICsgKm9mZnApOworCQkvKiBBbGwgYXR0cnMgY2FuIGJlIGZldGNoZWQgd2l0aG91dCBjaGVj a2luZyBmb3IgTlVMTHMgKi8KKwkJZmlyc3ROdWxsQXR0ciA9IG5hdHRzOworCX0KKworCWF0dG51 bSA9IHNsb3QtPnR0c19udmFsaWQ7CisJdmFsdWVzID0gc2xvdC0+dHRzX3ZhbHVlczsKKwlzbG90 LT50dHNfbnZhbGlkID0gcmVxbmF0dHM7CiAKLQkJKm9mZnAgPSBhdHRfYWRkbGVuZ3RoX3BvaW50 ZXIoKm9mZnAsIHRoaXNhdHQtPmF0dGxlbiwgdHAgKyAqb2ZmcCk7CisJLyogRW5zdXJlIHdlIGNh bGN1bGF0ZWQgdHAgY29ycmVjdGx5ICovCisJQXNzZXJ0KHRwID09IChjaGFyICopIHR1cCArIHR1 cC0+dF9ob2ZmKTsKIAotCQkvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIHN3aXRjaCB0byBzbG93IG1v ZGUgKi8KLQkJaWYgKCFzbG93KQorCWlmIChhdHRudW0gPCBmaXJzdE5vbkd1YXJhbnRlZWRBdHRy KQorCXsKKwkJZG8KIAkJeworCQkJaW50CQkJYXR0bGVuOworCisJCQlpc251bGxbYXR0bnVtXSA9 IGZhbHNlOworCQkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51 bSk7CisJCQlhdHRsZW4gPSBjYXR0ci0+YXR0bGVuOworCisJCQkvKiBXZSBkb24ndCBleHBlY3Qg YW55IG5vbi1ieXZhbCB0eXBlcyAqLworCQkJcGdfYXNzdW1lKGF0dGxlbiA+IDApOworCiAJCQkv KgotCQkJICogV2UncmUgdW5hYmxlIHRvIGRlZm9ybSBhbnkgZnVydGhlciBpZiB0aGUgYWJvdmUg Y29kZSBzZXQKLQkJCSAqICdzbG93bmV4dCcsIG9yIGlmIHRoaXMgaXNuJ3QgYSBmaXhlZC13aWR0 aCBhdHRyaWJ1dGUuCisJCQkgKiBUZWNobmljYWxseSB3ZSBjb3VsZCBzdXBwb3J0IG5vbi1ieXZh bCBmaXhlZC13aWR0aCB0eXBlcywgYnV0CisJCQkgKiBub3QgZG9pbmcgc28gYWxsb3dzIHVzIHRv IHBhc3MgdHJ1ZSB0byBmZXRjaF9hdHRfbm9lcnIoKSB3aGljaAorCQkJICogZWxpbWluYXRlcyB0 aGUgIWF0dGJ5dmFsIGJyYW5jaC4KIAkJCSAqLwotCQkJaWYgKHNsb3duZXh0IHx8IHRoaXNhdHQt PmF0dGxlbiA8PSAwKQotCQkJewotCQkJCSpzbG93cCA9IHRydWU7Ci0JCQkJcmV0dXJuIGF0dG51 bSArIDE7Ci0JCQl9Ci0JCX0KLQl9CisJCQlBc3NlcnQoY2F0dHItPmF0dGJ5dmFsID09IHRydWUp OwogCi0JcmV0dXJuIG5hdHRzOwotfQotCi0vKgotICogc2xvdF9kZWZvcm1faGVhcF90dXBsZQot ICoJCUdpdmVuIGEgVHVwbGVUYWJsZVNsb3QsIGV4dHJhY3QgZGF0YSBmcm9tIHRoZSBzbG90J3Mg cGh5c2ljYWwgdHVwbGUKLSAqCQlpbnRvIGl0cyBEYXR1bS9pc251bGwgYXJyYXlzLiAgRGF0YSBp cyBleHRyYWN0ZWQgdXAgdGhyb3VnaCB0aGUKLSAqCQlyZXFuYXR0cyd0aCBjb2x1bW4uICBJZiB0 aGVyZSBhcmUgaW5zdWZmaWNpZW50IGF0dHJpYnV0ZXMgaW4gdGhlIGdpdmVuCi0gKgkJdHVwbGUs IHRoZW4gc2xvdF9nZXRtaXNzaW5nYXR0cnMoKSBpcyBjYWxsZWQgdG8gcG9wdWxhdGUgdGhlCi0g KgkJcmVtYWluZGVyLiAgSWYgcmVxbmF0dHMgaXMgYWJvdmUgdGhlIG51bWJlciBvZiBhdHRyaWJ1 dGVzIGluIHRoZQotICoJCXNsb3QncyBUdXBsZURlc2MsIGFuIGVycm9yIGlzIHJhaXNlZC4KLSAq Ci0gKgkJVGhpcyBpcyBlc3NlbnRpYWxseSBhbiBpbmNyZW1lbnRhbCB2ZXJzaW9uIG9mIGhlYXBf ZGVmb3JtX3R1cGxlOgotICoJCW9uIGVhY2ggY2FsbCB3ZSBleHRyYWN0IGF0dHJpYnV0ZXMgdXAg dG8gdGhlIG9uZSBuZWVkZWQsIHdpdGhvdXQKLSAqCQlyZS1jb21wdXRpbmcgaW5mb3JtYXRpb24g YWJvdXQgcHJldmlvdXNseSBleHRyYWN0ZWQgYXR0cmlidXRlcy4KLSAqCQlzbG90LT50dHNfbnZh bGlkIGlzIHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcyBhbHJlYWR5IGV4dHJhY3RlZC4KLSAqCi0g KiBUaGlzIGlzIG1hcmtlZCBhcyBhbHdheXMgaW5saW5lLCBzbyB0aGUgZGlmZmVyZW50IG9mZnAg Zm9yIGRpZmZlcmVudCB0eXBlcwotICogb2Ygc2xvdHMgZ2V0cyBvcHRpbWl6ZWQgYXdheS4KLSAq Lwotc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKLXNsb3RfZGVmb3JtX2hl YXBfdHVwbGUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIEhlYXBUdXBsZSB0dXBsZSwgdWludDMyICpv ZmZwLAotCQkJCQkgICBpbnQgcmVxbmF0dHMpCi17Ci0JYm9vbAkJaGFzbnVsbHMgPSBIZWFwVHVw bGVIYXNOdWxscyh0dXBsZSk7Ci0JaW50CQkJYXR0bnVtOwotCXVpbnQzMgkJb2ZmOwkJCS8qIG9m ZnNldCBpbiB0dXBsZSBkYXRhICovCi0JYm9vbAkJc2xvdzsJCQkvKiBjYW4gd2UgdXNlL3NldCBh dHRjYWNoZW9mZj8gKi8KKwkJCW9mZiA9IGNhdHRyLT5hdHRjYWNoZW9mZjsKKwkJCXZhbHVlc1th dHRudW1dID0gZmV0Y2hfYXR0X25vZXJyKHRwICsgb2ZmLCB0cnVlLCBhdHRsZW4pOworCQkJYXR0 bnVtKys7CisJCX0gd2hpbGUgKGF0dG51bSA8IGZpcnN0Tm9uR3VhcmFudGVlZEF0dHIpOwogCi0J LyogV2UgY2FuIG9ubHkgZmV0Y2ggYXMgbWFueSBhdHRyaWJ1dGVzIGFzIHRoZSB0dXBsZSBoYXMu ICovCi0JbmF0dHMgPSBNaW4oSGVhcFR1cGxlSGVhZGVyR2V0TmF0dHModHVwbGUtPnRfZGF0YSks IHJlcW5hdHRzKTsKKwkJb2ZmICs9IGNhdHRyLT5hdHRsZW47CiAKLQkvKgotCSAqIENoZWNrIHdo ZXRoZXIgdGhlIGZpcnN0IGNhbGwgZm9yIHRoaXMgdHVwbGUsIGFuZCBpbml0aWFsaXplIG9yIHJl c3RvcmUKLQkgKiBsb29wIHN0YXRlLgotCSAqLwotCWF0dG51bSA9IHNsb3QtPnR0c19udmFsaWQ7 Ci0Jc2xvdC0+dHRzX252YWxpZCA9IHJlcW5hdHRzOwotCWlmIChhdHRudW0gPT0gMCkKLQl7Ci0J CS8qIFN0YXJ0IGZyb20gdGhlIGZpcnN0IGF0dHJpYnV0ZSAqLwotCQlvZmYgPSAwOwotCQlzbG93 ID0gZmFsc2U7CisJCWlmIChhdHRudW0gPT0gcmVxbmF0dHMpCisJCQlnb3RvIGRvbmU7CiAJfQog CWVsc2UKIAl7CiAJCS8qIFJlc3RvcmUgc3RhdGUgZnJvbSBwcmV2aW91cyBleGVjdXRpb24gKi8K IAkJb2ZmID0gKm9mZnA7Ci0JCXNsb3cgPSBUVFNfU0xPVyhzbG90KTsKKworCQkvKiBXZSBleHBl Y3QgKm9mZnAgdG8gYmUgc2V0IHRvIDAgd2hlbiBhdHRudW0gPT0gMCAqLworCQlBc3NlcnQob2Zm ID09IDAgfHwgYXR0bnVtID4gMCk7CiAJfQogCisJLyogV2UgY2FuIG9ubHkgZmV0Y2ggYXMgbWFu eSBhdHRyaWJ1dGVzIGFzIHRoZSB0dXBsZSBoYXMuICovCisJZmlyc3ROb25DYWNoZU9mZnNldEF0 dHIgPSBNaW4oZmlyc3ROb25DYWNoZU9mZnNldEF0dHIsIG5hdHRzKTsKKwogCS8qCi0JICogSWYg J3Nsb3cnIGlzbid0IHNldCwgdHJ5IGRlZm9ybWluZyB1c2luZyBkZWZvcm1pbmcgY29kZSB0aGF0 IGRvZXMgbm90Ci0JICogY29udGFpbiBhbnkgb2YgdGhlIGV4dHJhIGNoZWNrcyByZXF1aXJlZCBm b3Igbm9uLWZpeGVkIG9mZnNldAotCSAqIGRlZm9ybWluZy4gIER1cmluZyBkZWZvcm1pbmcsIGlm IG9yIHdoZW4gd2UgZmluZCBhIE5VTEwgb3IgYSB2YXJpYWJsZQotCSAqIGxlbmd0aCBhdHRyaWJ1 dGUsIHdlJ2xsIHN3aXRjaCB0byBhIGRlZm9ybWluZyBtZXRob2Qgd2hpY2ggaW5jbHVkZXMgdGhl Ci0JICogZXh0cmEgY29kZSByZXF1aXJlZCBmb3Igbm9uLWZpeGVkIG9mZnNldCBkZWZvcm1pbmcs IGEuay5hIHNsb3cgbW9kZS4KLQkgKiBCZWNhdXNlIHRoaXMgaXMgcGVyZm9ybWFuY2UgY3JpdGlj YWwsIHdlIGlubGluZQotCSAqIHNsb3RfZGVmb3JtX2hlYXBfdHVwbGVfaW50ZXJuYWwgcGFzc2lu ZyB0aGUgJ3Nsb3cnIGFuZCAnaGFzbnVsbCcKLQkgKiBwYXJhbWV0ZXJzIGFzIGNvbnN0YW50cyB0 byBhbGxvdyB0aGUgY29tcGlsZXIgdG8gZW1pdCBzcGVjaWFsaXplZCBjb2RlCi0JICogd2l0aCB0 aGUga25vd24tY29uc3QgZmFsc2UgY29tcGFyaXNvbnMgYW5kIHN1YnNlcXVlbnQgYnJhbmNoZXMg cmVtb3ZlZC4KKwkgKiBIYW5kbGUgdGhlIHBvcnRpb24gb2YgdGhlIHR1cGxlIHRoYXQgd2UgaGF2 ZSBjYWNoZWQgdGhlIG9mZnNldCBmb3IgdXAKKwkgKiB0byB0aGUgZmlyc3QgTlVMTCBhdHRyaWJ1 dGUuICBUaGUgb2Zmc2V0IGlzIGVmZmVjdGl2ZWx5IGZpeGVkIGZvcgorCSAqIHRoZXNlLCBzbyB3 ZSBjYW4gdXNlIHRoZSBDb21wYWN0QXR0cmlidXRlJ3MgYXR0Y2FjaGVvZmYuCiAJICovCi0JaWYg KCFzbG93KQorCWlmIChhdHRudW0gPCBmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0cikKIAl7Ci0JCS8q IFR1cGxlIHdpdGhvdXQgYW55IE5VTExzPyBXZSBjYW4gc2tpcCBkb2luZyBhbnkgTlVMTCBjaGVj a2luZyAqLwotCQlpZiAoIWhhc251bGxzKQotCQkJYXR0bnVtID0gc2xvdF9kZWZvcm1faGVhcF90 dXBsZV9pbnRlcm5hbChzbG90LAotCQkJCQkJCQkJCQkJCSB0dXBsZSwKLQkJCQkJCQkJCQkJCQkg YXR0bnVtLAotCQkJCQkJCQkJCQkJCSBuYXR0cywKLQkJCQkJCQkJCQkJCQkgZmFsc2UsIC8qIHNs b3cgKi8KLQkJCQkJCQkJCQkJCQkgZmFsc2UsIC8qIGhhc251bGxzICovCi0JCQkJCQkJCQkJCQkJ ICZvZmYsCi0JCQkJCQkJCQkJCQkJICZzbG93KTsKLQkJZWxzZQotCQkJYXR0bnVtID0gc2xvdF9k ZWZvcm1faGVhcF90dXBsZV9pbnRlcm5hbChzbG90LAotCQkJCQkJCQkJCQkJCSB0dXBsZSwKLQkJ CQkJCQkJCQkJCQkgYXR0bnVtLAotCQkJCQkJCQkJCQkJCSBuYXR0cywKLQkJCQkJCQkJCQkJCQkg ZmFsc2UsIC8qIHNsb3cgKi8KLQkJCQkJCQkJCQkJCQkgdHJ1ZSwJLyogaGFzbnVsbHMgKi8KLQkJ CQkJCQkJCQkJCQkgJm9mZiwKLQkJCQkJCQkJCQkJCQkgJnNsb3cpOworCQlkbworCQl7CisJCQlp c251bGxbYXR0bnVtXSA9IGZhbHNlOworCQkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0 dXBsZURlc2MsIGF0dG51bSk7CisKKwkJCW9mZiA9IGNhdHRyLT5hdHRjYWNoZW9mZjsKKwkJCXZh bHVlc1thdHRudW1dID0gZmV0Y2hfYXR0X25vZXJyKHRwICsgb2ZmLAorCQkJCQkJCQkJCQkgY2F0 dHItPmF0dGJ5dmFsLAorCQkJCQkJCQkJCQkgY2F0dHItPmF0dGxlbik7CisJCX0gd2hpbGUgKCsr YXR0bnVtIDwgZmlyc3ROb25DYWNoZU9mZnNldEF0dHIpOworCisJCS8qCisJCSAqIFBvaW50IHRo ZSBvZmZzZXQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgbGFzdCBhdHRyaWJ1dGUgd2l0aCBhIGNhY2hl ZAorCQkgKiBvZmZzZXQuICBXZSBleHBlY3QgdGhlIGZpbmFsIGNhY2hlZCBvZmZzZXQgYXR0cmli dXRlIHRvIGhhdmUgYQorCQkgKiBmaXhlZCB3aWR0aCwgc28ganVzdCBhZGQgdGhlIGF0dGxlbiB0 byB0aGUgYXR0Y2FjaGVvZmYKKwkJICovCisJCUFzc2VydChjYXR0ci0+YXR0bGVuID4gMCk7CisJ CW9mZiArPSBjYXR0ci0+YXR0bGVuOwogCX0KIAotCS8qIElmIHRoZXJlJ3Mgc3RpbGwgd29yayB0 byBkbyB0aGVuIHdlIG11c3QgYmUgaW4gc2xvdyBtb2RlICovCi0JaWYgKGF0dG51bSA8IG5hdHRz KQorCS8qCisJICogSGFuZGxlIGFueSBwb3J0aW9uIG9mIHRoZSB0dXBsZSB0aGF0IGRvZXNuJ3Qg aGF2ZSBhIGZpeGVkIG9mZnNldCB1cAorCSAqIHVudGlsIHRoZSBmaXJzdCBOVUxMIGF0dHJpYnV0 ZS4gIFRoaXMgbG9vcCBvbmx5IGRpZmZlcnMgZnJvbSB0aGUgb25lCisJICogYWZ0ZXIgaXQgYnkg dGhlIE5VTEwgY2hlY2tzLgorCSAqLworCWZvciAoOyBhdHRudW0gPCBmaXJzdE51bGxBdHRyOyBh dHRudW0rKykKIAl7Ci0JCS8qIFhYWCBpcyBpdCB3b3J0aCBhZGRpbmcgYSBzZXBhcmF0ZSBjYWxs IHdoZW4gaGFzbnVsbHMgaXMgZmFsc2U/ICovCi0JCWF0dG51bSA9IHNsb3RfZGVmb3JtX2hlYXBf dHVwbGVfaW50ZXJuYWwoc2xvdCwKLQkJCQkJCQkJCQkJCSB0dXBsZSwKLQkJCQkJCQkJCQkJCSBh dHRudW0sCi0JCQkJCQkJCQkJCQkgbmF0dHMsCi0JCQkJCQkJCQkJCQkgdHJ1ZSwJLyogc2xvdyAq LwotCQkJCQkJCQkJCQkJIGhhc251bGxzLAotCQkJCQkJCQkJCQkJICZvZmYsCi0JCQkJCQkJCQkJ CQkgJnNsb3cpOworCQlpbnQJCQlhdHRsZW47CisKKwkJaXNudWxsW2F0dG51bV0gPSBmYWxzZTsK KwkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSk7CisJCWF0 dGxlbiA9IGNhdHRyLT5hdHRsZW47CisKKwkJLyoKKwkJICogY3N0cmluZ3MgZG9uJ3QgZXhpc3Qg aW4gaGVhcCB0dXBsZXMuICBVc2UgcGdfYXNzdW1lIHRvIGluc3RydWN0IHRoZQorCQkgKiBjb21w aWxlciBub3QgdG8gZW1pdCB0aGUgY3N0cmluZy1yZWxhdGVkIGNvZGUgaW4KKwkJICogYWxpZ25f ZmV0Y2hfdGhlbl9hZGQoKS4KKwkJICovCisJCXBnX2Fzc3VtZShhdHRsZW4gPiAwIHx8IGF0dGxl biA9PSAtMSk7CisKKwkJLyogYWxpZ24gJ29mZicsIGZldGNoIHRoZSBkYXR1bSwgYW5kIGluY3Jl bWVudCBvZmYgYmV5b25kIHRoZSBkYXR1bSAqLworCQl2YWx1ZXNbYXR0bnVtXSA9IGFsaWduX2Zl dGNoX3RoZW5fYWRkKHRwLAorCQkJCQkJCQkJCQkgICZvZmYsCisJCQkJCQkJCQkJCSAgY2F0dHIt PmF0dGJ5dmFsLAorCQkJCQkJCQkJCQkgIGF0dGxlbiwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0 YWxpZ25ieSk7CiAJfQogCiAJLyoKLQkgKiBTYXZlIHN0YXRlIGZvciBuZXh0IGV4ZWN1dGlvbgor CSAqIE5vdyBoYW5kbGUgYW55IHJlbWFpbmluZyBhdHRyaWJ1dGVzIGluIHRoZSB0dXBsZSB1cCB0 byB0aGUgcmVxdWVzdGVkCisJICogYXR0bnVtLiAgVGhpcyB0aW1lLCBpbmNsdWRlIE5VTEwgY2hl Y2tzIGFzIHdlJ3JlIG5vdyBhdCB0aGUgZmlyc3QgTlVMTAorCSAqIGF0dHJpYnV0ZS4KIAkgKi8K LQkqb2ZmcCA9IG9mZjsKLQlpZiAoc2xvdykKLQkJc2xvdC0+dHRzX2ZsYWdzIHw9IFRUU19GTEFH X1NMT1c7Ci0JZWxzZQotCQlzbG90LT50dHNfZmxhZ3MgJj0gflRUU19GTEFHX1NMT1c7CisJZm9y ICg7IGF0dG51bSA8IG5hdHRzOyBhdHRudW0rKykKKwl7CisJCWludAkJCWF0dGxlbjsKKworCQlp ZiAoaXNudWxsW2F0dG51bV0pCisJCXsKKwkJCXZhbHVlc1thdHRudW1dID0gKERhdHVtKSAwOwor CQkJY29udGludWU7CisJCX0KKworCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxl RGVzYywgYXR0bnVtKTsKKwkJYXR0bGVuID0gY2F0dHItPmF0dGxlbjsKIAotCS8qIEZldGNoIGFu eSBtaXNzaW5nIGF0dHJzIGFuZCByYWlzZSBhbiBlcnJvciBpZiByZXFuYXR0cyBpcyBpbnZhbGlk LiAqLworCQkvKiBBcyBhYm92ZSwgd2UgZG9uJ3QgZXhwZWN0IGNzdHJpbmdzICovCisJCXBnX2Fz c3VtZShhdHRsZW4gPiAwIHx8IGF0dGxlbiA9PSAtMSk7CisKKwkJLyogYWxpZ24gJ29mZicsIGZl dGNoIHRoZSBkYXR1bSwgYW5kIGluY3JlbWVudCBvZmYgYmV5b25kIHRoZSBkYXR1bSAqLworCQl2 YWx1ZXNbYXR0bnVtXSA9IGFsaWduX2ZldGNoX3RoZW5fYWRkKHRwLAorCQkJCQkJCQkJCQkgICZv ZmYsCisJCQkJCQkJCQkJCSAgY2F0dHItPmF0dGJ5dmFsLAorCQkJCQkJCQkJCQkgIGF0dGxlbiwK KwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0YWxpZ25ieSk7CisJfQorCisJLyogRmV0Y2ggYW55IG1p c3NpbmcgYXR0cnMgYW5kIHJhaXNlIGFuIGVycm9yIGlmIHJlcW5hdHRzIGlzIGludmFsaWQgKi8K IAlpZiAodW5saWtlbHkoYXR0bnVtIDwgcmVxbmF0dHMpKQorCXsKKwkJKm9mZnAgPSBvZmY7CiAJ CXNsb3RfZ2V0bWlzc2luZ2F0dHJzKHNsb3QsIGF0dG51bSwgcmVxbmF0dHMpOworCQlyZXR1cm47 CisJfQorZG9uZToKKworCS8qIFNhdmUgY3VycmVudCBvZmZzZXQgZm9yIG5leHQgZXhlY3V0aW9u ICovCisJKm9mZnAgPSBvZmY7CiB9CiAKIGNvbnN0IFR1cGxlVGFibGVTbG90T3BzIFRUU09wc1Zp cnR1YWwgPSB7CkBAIC0xMzQxLDEwICsxMzcwLDE3IEBAIE1ha2VUdXBsZVRhYmxlU2xvdChUdXBs ZURlc2MgdHVwbGVEZXNjLAogCQlzbG90LT50dHNfdmFsdWVzID0gKERhdHVtICopCiAJCQkoKChj aGFyICopIHNsb3QpCiAJCQkgKyBNQVhBTElHTihiYXNlc3opKTsKKworCQkvKgorCQkgKiBXZSBy b3VuZCB0aGUgc2l6ZSBvZiB0dHNfaXNudWxsIHVwIHRvIHRoZSBuZXh0IGhpZ2hlc3QgbXVsdGlw bGUgb2YKKwkJICogOC4gIFRoaXMgaXMgbmVlZGVkIGFzIHBvcHVsYXRlX2lzbnVsbF9hcnJheSgp IG9wZXJhdGVzIG9uIDgKKwkJICogZWxlbWVudHMgYXQgYSB0aW1lIHdoZW4gY29udmVydGluZyBh IHR1cGxlJ3MgTlVMTCBiaXRtYXAgaW50byBhCisJCSAqIGJvb2xlYW4gYXJyYXkuCisJCSAqLwog CQlzbG90LT50dHNfaXNudWxsID0gKGJvb2wgKikKIAkJCSgoKGNoYXIgKikgc2xvdCkKIAkJCSAr IE1BWEFMSUdOKGJhc2VzeikKLQkJCSArIE1BWEFMSUdOKHR1cGxlRGVzYy0+bmF0dHMgKiBzaXpl b2YoRGF0dW0pKSk7CisJCQkgKyBUWVBFQUxJR04oOCwgdHVwbGVEZXNjLT5uYXR0cyAqIHNpemVv ZihEYXR1bSkpKTsKIAogCQlQaW5UdXBsZURlc2ModHVwbGVEZXNjKTsKIAl9CkBAIC0xNTE0LDgg KzE1NTAsMTQgQEAgRXhlY1NldFNsb3REZXNjcmlwdG9yKFR1cGxlVGFibGVTbG90ICpzbG90LCAv KiBzbG90IHRvIGNoYW5nZSAqLwogCSAqLwogCXNsb3QtPnR0c192YWx1ZXMgPSAoRGF0dW0gKikK IAkJTWVtb3J5Q29udGV4dEFsbG9jKHNsb3QtPnR0c19tY3h0LCB0dXBkZXNjLT5uYXR0cyAqIHNp emVvZihEYXR1bSkpOworCisJLyoKKwkgKiBXZSByb3VuZCB0aGUgc2l6ZSBvZiB0dHNfaXNudWxs IHVwIHRvIHRoZSBuZXh0IGhpZ2hlc3QgbXVsdGlwbGUgb2YgOC4KKwkgKiBUaGlzIGlzIG5lZWRl ZCBhcyBwb3B1bGF0ZV9pc251bGxfYXJyYXkoKSBvcGVyYXRlcyBvbiA4IGVsZW1lbnRzIGF0IGEK KwkgKiB0aW1lIHdoZW4gY29udmVydGluZyBhIHR1cGxlJ3MgTlVMTCBiaXRtYXAgaW50byBhIGJv b2xlYW4gYXJyYXkuCisJICovCiAJc2xvdC0+dHRzX2lzbnVsbCA9IChib29sICopCi0JCU1lbW9y eUNvbnRleHRBbGxvYyhzbG90LT50dHNfbWN4dCwgdHVwZGVzYy0+bmF0dHMgKiBzaXplb2YoYm9v bCkpOworCQlNZW1vcnlDb250ZXh0QWxsb2Moc2xvdC0+dHRzX21jeHQsIFRZUEVBTElHTig4LCB0 dXBkZXNjLT5uYXR0cyAqIHNpemVvZihib29sKSkpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpAQCAtMjI2MCwxMCArMjMwMiwxNiBAQCBFeGVjVHlwZVNldENvbE5h bWVzKFR1cGxlRGVzYyB0eXBlSW5mbywgTGlzdCAqbmFtZXNMaXN0KQogICogVGhpcyBoYXBwZW5z ICJmb3IgZnJlZSIgaWYgdGhlIHR1cGRlc2MgY2FtZSBmcm9tIGEgcmVsY2FjaGUgZW50cnksIGJ1 dAogICogbm90IGlmIHdlIGhhdmUgbWFudWZhY3R1cmVkIGEgdHVwZGVzYyBmb3IgYSB0cmFuc2ll bnQgUkVDT1JEIGRhdGF0eXBlLgogICogSW4gdGhhdCBjYXNlIHdlIGhhdmUgdG8gbm90aWZ5IHR5 cGNhY2hlLmMgb2YgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgdHlwZS4KKyAqCisgKiBUdXBsZURlc2NG aW5hbGl6ZSgpIG11c3QgYmUgY2FsbGVkIG9uIHRoZSBUdXBsZURlc2MgYmVmb3JlIGNhbGxpbmcg dGhpcworICogZnVuY3Rpb24uCiAgKi8KIFR1cGxlRGVzYwogQmxlc3NUdXBsZURlc2MoVHVwbGVE ZXNjIHR1cGRlc2MpCiB7CisJLyogRGlkIHNvbWVvbmUgZm9yZ2V0IHRvIGNhbGwgVHVwbGVEZXNj RmluYWxpemUoKT8gKi8KKwlBc3NlcnQodHVwZGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZzZXRBdHRy ID49IDApOworCiAJaWYgKHR1cGRlc2MtPnRkdHlwZWlkID09IFJFQ09SRE9JRCAmJgogCQl0dXBk ZXNjLT50ZHR5cG1vZCA8IDApCiAJCWFzc2lnbl9yZWNvcmRfdHlwZV90eXBtb2QodHVwZGVzYyk7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSGVhcHNjYW4uYyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBIZWFwc2Nhbi5jCmluZGV4IGM2OGMyNmNi ZjM4Li5iMTdjNGU3MjFiMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJp dG1hcEhlYXBzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEhlYXBz Y2FuLmMKQEAgLTM4Myw2ICszODMsOSBAQCBFeGVjSW5pdEJpdG1hcEhlYXBTY2FuKEJpdG1hcEhl YXBTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJCQkJCSAgUmVsYXRp b25HZXREZXNjcihjdXJyZW50UmVsYXRpb24pLAogCQkJCQkJICB0YWJsZV9zbG90X2NhbGxiYWNr cyhjdXJyZW50UmVsYXRpb24pKTsKIAorCXNjYW5zdGF0ZS0+c3Muc3NfU2NhblR1cGxlU2xvdC0+ dHRzX2ZsYWdzIHw9CisJCVRUU19GTEFHX09CRVlTX05PVF9OVUxMX0NPTlNUUkFJTlRTOworCiAJ LyoKIAkgKiBJbml0aWFsaXplIHJlc3VsdCB0eXBlIGFuZCBwcm9qZWN0aW9uLgogCSAqLwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKaW5kZXggYzJkMDkzNzQ1MTcuLjUw NmZkZjQ0NmQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5 c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKQEAg LTU2OSw2ICs1NjksOSBAQCBFeGVjSW5pdEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhbiAqbm9k ZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJRXhlY0luaXRTY2FuVHVwbGVTbG90KGVz dGF0ZSwgJmluZGV4c3RhdGUtPnNzLCB0dXBEZXNjLAogCQkJCQkJICAmVFRTT3BzVmlydHVhbCk7 CiAKKwlpbmRleHN0YXRlLT5zcy5zc19TY2FuVHVwbGVTbG90LT50dHNfZmxhZ3MgfD0KKwkJVFRT X0ZMQUdfT0JFWVNfTk9UX05VTExfQ09OU1RSQUlOVFM7CisKIAkvKgogCSAqIFdlIG5lZWQgYW5v dGhlciBzbG90LCBpbiBhIGZvcm1hdCB0aGF0J3Mgc3VpdGFibGUgZm9yIHRoZSB0YWJsZSBBTSwg Zm9yCiAJICogd2hlbiB3ZSBuZWVkIHRvIGZldGNoIGEgdHVwbGUgZnJvbSB0aGUgdGFibGUgZm9y IHJlY2hlY2tpbmcgdmlzaWJpbGl0eS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpp bmRleCBhNjE2YWJmZjA0Yy4uYzc3NzQ2YWI5ZjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5k ZXhzY2FuLmMKQEAgLTk0MCw2ICs5NDAsOSBAQCBFeGVjSW5pdEluZGV4U2NhbihJbmRleFNjYW4g Km5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkJCQkJICBSZWxhdGlvbkdldERl c2NyKGN1cnJlbnRSZWxhdGlvbiksCiAJCQkJCQkgIHRhYmxlX3Nsb3RfY2FsbGJhY2tzKGN1cnJl bnRSZWxhdGlvbikpOwogCisJaW5kZXhzdGF0ZS0+c3Muc3NfU2NhblR1cGxlU2xvdC0+dHRzX2Zs YWdzIHw9CisJCVRUU19GTEFHX09CRVlTX05PVF9OVUxMX0NPTlNUUkFJTlRTOworCiAJLyoKIAkg KiBJbml0aWFsaXplIHJlc3VsdCB0eXBlIGFuZCBwcm9qZWN0aW9uLgogCSAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNhbXBsZXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVTYW1wbGVzY2FuLmMKaW5kZXggMWIwYWY3MGZkN2EuLmQyOWVmMjg3MmY3IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2FtcGxlc2Nhbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTYW1wbGVzY2FuLmMKQEAgLTEzMCw2ICsxMzAsOSBAQCBF eGVjSW5pdFNhbXBsZVNjYW4oU2FtcGxlU2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBl ZmxhZ3MpCiAJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3Ioc2NhbnN0YXRlLT5zcy5zc19jdXJyZW50 UmVsYXRpb24pLAogCQkJCQkJICB0YWJsZV9zbG90X2NhbGxiYWNrcyhzY2Fuc3RhdGUtPnNzLnNz X2N1cnJlbnRSZWxhdGlvbikpOwogCisJc2NhbnN0YXRlLT5zcy5zc19TY2FuVHVwbGVTbG90LT50 dHNfZmxhZ3MgfD0KKwkJVFRTX0ZMQUdfT0JFWVNfTk9UX05VTExfQ09OU1RSQUlOVFM7CisKIAkv KgogCSAqIEluaXRpYWxpemUgcmVzdWx0IHR5cGUgYW5kIHByb2plY3Rpb24uCiAJICovCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYwppbmRleCBhZjNjNzg4Y2U4Yi4uM2ZmMmEyODQzZWIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMKKysrIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYwpAQCAtMjQ2LDYgKzI0Niw5IEBAIEV4ZWNJbml0 U2VxU2NhbihTZXFTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJCQkJ CSAgUmVsYXRpb25HZXREZXNjcihzY2Fuc3RhdGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiksCiAJ CQkJCQkgIHRhYmxlX3Nsb3RfY2FsbGJhY2tzKHNjYW5zdGF0ZS0+c3Muc3NfY3VycmVudFJlbGF0 aW9uKSk7CiAKKwlzY2Fuc3RhdGUtPnNzLnNzX1NjYW5UdXBsZVNsb3QtPnR0c19mbGFncyB8PQor CQlUVFNfRkxBR19PQkVZU19OT1RfTlVMTF9DT05TVFJBSU5UUzsKKwogCS8qCiAJICogSW5pdGlh bGl6ZSByZXN1bHQgdHlwZSBhbmQgcHJvamVjdGlvbi4KIAkgKi8KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVUaWRyYW5nZXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVUaWRyYW5nZXNjYW4uYwppbmRleCA1MDM4MTdkYTY1Yi4uMmVjZTAyNTVlN2QgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVUaWRyYW5nZXNjYW4uYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlVGlkcmFuZ2VzY2FuLmMKQEAgLTM5Niw2ICszOTYsOSBAQCBF eGVjSW5pdFRpZFJhbmdlU2NhbihUaWRSYW5nZVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBp bnQgZWZsYWdzKQogCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKGN1cnJlbnRSZWxhdGlvbiksCiAJ CQkJCQkgIHRhYmxlX3Nsb3RfY2FsbGJhY2tzKGN1cnJlbnRSZWxhdGlvbikpOwogCisJdGlkcmFu Z2VzdGF0ZS0+c3Muc3NfU2NhblR1cGxlU2xvdC0+dHRzX2ZsYWdzIHw9CisJCVRUU19GTEFHX09C RVlTX05PVF9OVUxMX0NPTlNUUkFJTlRTOworCiAJLyoKIAkgKiBJbml0aWFsaXplIHJlc3VsdCB0 eXBlIGFuZCBwcm9qZWN0aW9uLgogCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZVRpZHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVUaWRzY2FuLmMKaW5k ZXggNGVkZGIwODI4YjUuLjQ4NGUzMzA2ZTBiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlVGlkc2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVUaWRzY2Fu LmMKQEAgLTUzOCw2ICs1MzgsOSBAQCBFeGVjSW5pdFRpZFNjYW4oVGlkU2NhbiAqbm9kZSwgRVN0 YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IoY3VycmVu dFJlbGF0aW9uKSwKIAkJCQkJCSAgdGFibGVfc2xvdF9jYWxsYmFja3MoY3VycmVudFJlbGF0aW9u KSk7CiAKKwl0aWRzdGF0ZS0+c3Muc3NfU2NhblR1cGxlU2xvdC0+dHRzX2ZsYWdzIHw9CisJCVRU U19GTEFHX09CRVlTX05PVF9OVUxMX0NPTlNUUkFJTlRTOworCiAJLyoKIAkgKiBJbml0aWFsaXpl IHJlc3VsdCB0eXBlIGFuZCBwcm9qZWN0aW9uLgogCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvaml0L2xsdm0vbGx2bWppdF9kZWZvcm0uYyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1q aXRfZGVmb3JtLmMKaW5kZXggM2ViMDg3ZWI1NmIuLjEyNTIxZTNlNDZhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2RlZm9ybS5jCisrKyBiL3NyYy9iYWNrZW5kL2pp dC9sbHZtL2xsdm1qaXRfZGVmb3JtLmMKQEAgLTYyLDcgKzYyLDYgQEAgc2xvdF9jb21waWxlX2Rl Zm9ybShMTFZNSml0Q29udGV4dCAqY29udGV4dCwgVHVwbGVEZXNjIGRlc2MsCiAJTExWTVZhbHVl UmVmIHZfdHRzX3ZhbHVlczsKIAlMTFZNVmFsdWVSZWYgdl90dHNfbnVsbHM7CiAJTExWTVZhbHVl UmVmIHZfc2xvdG9mZnA7Ci0JTExWTVZhbHVlUmVmIHZfZmxhZ3NwOwogCUxMVk1WYWx1ZVJlZiB2 X252YWxpZHA7CiAJTExWTVZhbHVlUmVmIHZfbnZhbGlkOwogCUxMVk1WYWx1ZVJlZiB2X21heGF0 dDsKQEAgLTE3OCw3ICsxNzcsNiBAQCBzbG90X2NvbXBpbGVfZGVmb3JtKExMVk1KaXRDb250ZXh0 ICpjb250ZXh0LCBUdXBsZURlc2MgZGVzYywKIAl2X3R0c19udWxscyA9CiAJCWxfbG9hZF9zdHJ1 Y3RfZ2VwKGIsIFN0cnVjdFR1cGxlVGFibGVTbG90LCB2X3Nsb3QsIEZJRUxETk9fVFVQTEVUQUJM RVNMT1RfSVNOVUxMLAogCQkJCQkJICAidHRzX0lTTlVMTCIpOwotCXZfZmxhZ3NwID0gbF9zdHJ1 Y3RfZ2VwKGIsIFN0cnVjdFR1cGxlVGFibGVTbG90LCB2X3Nsb3QsIEZJRUxETk9fVFVQTEVUQUJM RVNMT1RfRkxBR1MsICIiKTsKIAl2X252YWxpZHAgPSBsX3N0cnVjdF9nZXAoYiwgU3RydWN0VHVw bGVUYWJsZVNsb3QsIHZfc2xvdCwgRklFTEROT19UVVBMRVRBQkxFU0xPVF9OVkFMSUQsICIiKTsK IAogCWlmIChvcHMgPT0gJlRUU09wc0hlYXBUdXBsZSB8fCBvcHMgPT0gJlRUU09wc0J1ZmZlckhl YXBUdXBsZSkKQEAgLTc0NywxNCArNzQ1LDEwIEBAIHNsb3RfY29tcGlsZV9kZWZvcm0oTExWTUpp dENvbnRleHQgKmNvbnRleHQsIFR1cGxlRGVzYyBkZXNjLAogCiAJewogCQlMTFZNVmFsdWVSZWYg dl9vZmYgPSBsX2xvYWQoYiwgVHlwZVNpemVULCB2X29mZnAsICIiKTsKLQkJTExWTVZhbHVlUmVm IHZfZmxhZ3M7CiAKIAkJTExWTUJ1aWxkU3RvcmUoYiwgbF9pbnQxNl9jb25zdChsYywgbmF0dHMp LCB2X252YWxpZHApOwogCQl2X29mZiA9IExMVk1CdWlsZFRydW5jKGIsIHZfb2ZmLCBMTFZNSW50 MzJUeXBlSW5Db250ZXh0KGxjKSwgIiIpOwogCQlMTFZNQnVpbGRTdG9yZShiLCB2X29mZiwgdl9z bG90b2ZmcCk7Ci0JCXZfZmxhZ3MgPSBsX2xvYWQoYiwgTExWTUludDE2VHlwZUluQ29udGV4dChs YyksIHZfZmxhZ3NwLCAidHRzX2ZsYWdzIik7Ci0JCXZfZmxhZ3MgPSBMTFZNQnVpbGRPcihiLCB2 X2ZsYWdzLCBsX2ludDE2X2NvbnN0KGxjLCBUVFNfRkxBR19TTE9XKSwgIiIpOwotCQlMTFZNQnVp bGRTdG9yZShiLCB2X2ZsYWdzLCB2X2ZsYWdzcCk7CiAJCUxMVk1CdWlsZFJldFZvaWQoYik7CiAJ fQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwppbmRleCA3NzBlZGIzNGUwOC4uOTk4YmUy NGFjNDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtNjY2LDE0ICs2NjYsNiBA QCBSZWxhdGlvbkJ1aWxkVHVwbGVEZXNjKFJlbGF0aW9uIHJlbGF0aW9uKQogCQllbG9nKEVSUk9S LCAicGdfYXR0cmlidXRlIGNhdGFsb2cgaXMgbWlzc2luZyAlZCBhdHRyaWJ1dGUocykgZm9yIHJl bGF0aW9uIE9JRCAldSIsCiAJCQkgbmVlZCwgUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbikpOwog Ci0JLyoKLQkgKiBXZSBjYW4gZWFzaWx5IHNldCB0aGUgYXR0Y2FjaGVvZmYgdmFsdWUgZm9yIHRo ZSBmaXJzdCBhdHRyaWJ1dGU6IGl0Ci0JICogbXVzdCBiZSB6ZXJvLiAgVGhpcyBlbGltaW5hdGVz IHRoZSBuZWVkIGZvciBzcGVjaWFsIGNhc2VzIGZvciBhdHRudW09MQotCSAqIHRoYXQgdXNlZCB0 byBleGlzdCBpbiBmYXN0Z2V0YXR0cigpIGFuZCBpbmRleF9nZXRhdHRyKCkuCi0JICovCi0JaWYg KFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHJlbGF0aW9uKSA+IDApCi0JCVR1cGxlRGVz Y0NvbXBhY3RBdHRyKHJlbGF0aW9uLT5yZF9hdHQsIDApLT5hdHRjYWNoZW9mZiA9IDA7Ci0KIAkv KgogCSAqIFNldCB1cCBjb25zdHJhaW50L2RlZmF1bHQgaW5mbwogCSAqLwpAQCAtMTk4NSw4ICsx OTc3LDYgQEAgZm9ybXJkZXNjKGNvbnN0IGNoYXIgKnJlbGF0aW9uTmFtZSwgT2lkIHJlbGF0aW9u UmVsdHlwZSwKIAkJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUocmVsYXRpb24tPnJkX2F0dCwg aSk7CiAJfQogCi0JLyogaW5pdGlhbGl6ZSBmaXJzdCBhdHRyaWJ1dGUncyBhdHRjYWNoZW9mZiwg Y2YgUmVsYXRpb25CdWlsZFR1cGxlRGVzYyAqLwotCVR1cGxlRGVzY0NvbXBhY3RBdHRyKHJlbGF0 aW9uLT5yZF9hdHQsIDApLT5hdHRjYWNoZW9mZiA9IDA7CiAJVHVwbGVEZXNjRmluYWxpemUocmVs YXRpb24tPnJkX2F0dCk7CiAKIAkvKiBtYXJrIG5vdC1udWxsIHN0YXR1cyAqLwpAQCAtNDQ0Niw4 ICs0NDM2LDYgQEAgQnVpbGRIYXJkY29kZWREZXNjcmlwdG9yKGludCBuYXR0cywgY29uc3QgRm9y bURhdGFfcGdfYXR0cmlidXRlICphdHRycykKIAkJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUo cmVzdWx0LCBpKTsKIAl9CiAKLQkvKiBpbml0aWFsaXplIGZpcnN0IGF0dHJpYnV0ZSdzIGF0dGNh Y2hlb2ZmLCBjZiBSZWxhdGlvbkJ1aWxkVHVwbGVEZXNjICovCi0JVHVwbGVEZXNjQ29tcGFjdEF0 dHIocmVzdWx0LCAwKS0+YXR0Y2FjaGVvZmYgPSAwOwogCVR1cGxlRGVzY0ZpbmFsaXplKHJlc3Vs dCk7CiAKIAkvKiBOb3RlOiB3ZSBkb24ndCBib3RoZXIgdG8gc2V0IHVwIGEgVHVwbGVDb25zdHIg ZW50cnkgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvdHVwZGVzYy5oCmluZGV4IDU5NTQxM2RiYmM1Li5hZDdiYzAxMzgxMiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cGRlc2MuaAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvdHVwZGVzYy5oCkBAIC0xMzEsNiArMTMxLDE5IEBAIHR5cGVkZWYgc3RydWN0IENv bXBhY3RBdHRyaWJ1dGUKICAqIEFueSBjb2RlIG1ha2luZyBjaGFuZ2VzIG1hbnVhbGx5IHRvIGFu ZCBmaWVsZHMgaW4gdGhlIEZvcm1EYXRhX3BnX2F0dHJpYnV0ZQogICogYXJyYXkgbXVzdCBzdWJz ZXF1ZW50bHkgY2FsbCBwb3B1bGF0ZV9jb21wYWN0X2F0dHJpYnV0ZSgpIHRvIGZsdXNoIHRoZQog ICogY2hhbmdlcyBvdXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgJ2NvbXBhY3RfYXR0cnMnIGVsZW1l bnQuCisgKgorICogZmlyc3ROb25DYWNoZWRPZmZzZXRBdHRyIHN0b3JlcyB0aGUgaW5kZXggaW50 byB0aGUgY29tcGFjdF9hdHRycyBhcnJheSBmb3IKKyAqIHRoZSBmaXJzdCBhdHRyaWJ1dGUgdGhh dCB3ZSBkb24ndCBoYXZlIGEga25vd24gYXR0Y2FjaGVvZmYgZm9yLgorICoKKyAqIGZpcnN0Tm9u R3VhcmFudGVlZEF0dHIgc3RvcmVzIHRoZSBpbmRleCB0byBpbnRvIHRoZSBjb21wYWN0X2F0dHJz IGFycmF5IGZvcgorICogdGhlIGZpcnN0IGF0dHJpYnV0ZSB0aGF0IGlzIGVpdGhlciBOVUxMYWJs ZSwgbWlzc2luZywgb3IgIWF0dGJ5dmFsLiAgVGhpcworICogY2FuIGJlIHVzZWQgaW4gbG9jYXRp b25zIGFzIGEgZ3VhcmFudGVlIHRoYXQgYXR0cmlidXRlcyBiZWZvcmUgdGhpcyB3aWxsCisgKiBh bHdheXMgZXhpc3QgaW4gdHVwbGVzLiAgVGhlICFhdHRieXZhbCBwYXJ0IGlzbid0IHJlcXVpcmVk IGZvciB0aGlzLCBidXQKKyAqIGluY2x1ZGluZyB0aGlzIGFsbG93cyB2YXJpb3VzIHR1cGxlIGRl Zm9ybWluZyByb3V0aW5lcyB0byBmb3JlZ28gYW55IGNoZWNrcworICogZm9yICFhdHRieXZhbC4K KyAqCisgKiBPbmNlIGEgVHVwbGVEZXNjIGhhcyBiZWVuIHBvcHVsYXRlZCwgYmVmb3JlIGl0IGlz IHVzZWQgZm9yIGFueSBwdXJwb3NlLAorICogVHVwbGVEZXNjRmluYWxpemUoKSBtdXN0IGJlIGNh bGxlZCBvbiBpdC4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgVHVwbGVEZXNjRGF0YQogewpAQCAtMTM4 LDYgKzE1MSwxMSBAQCB0eXBlZGVmIHN0cnVjdCBUdXBsZURlc2NEYXRhCiAJT2lkCQkJdGR0eXBl aWQ7CQkvKiBjb21wb3NpdGUgdHlwZSBJRCBmb3IgdHVwbGUgdHlwZSAqLwogCWludDMyCQl0ZHR5 cG1vZDsJCS8qIHR5cG1vZCBmb3IgdHVwbGUgdHlwZSAqLwogCWludAkJCXRkcmVmY291bnQ7CQkv KiByZWZlcmVuY2UgY291bnQsIG9yIC0xIGlmIG5vdCBjb3VudGluZyAqLworCWludAkJCWZpcnN0 Tm9uQ2FjaGVkT2Zmc2V0QXR0cjsJLyogaW5kZXggb2YgdGhlIGZpcnN0IGF0dCB3aXRob3V0CisJ CQkJCQkJCQkJCSAqIGFuIGF0dGNhY2hlb2ZmICovCisJaW50CQkJZmlyc3ROb25HdWFyYW50ZWVk QXR0cjsgLyogaW5kZXggb2YgdGhlIGZpcnN0IG51bGxhYmxlLAorCQkJCQkJCQkJCSAqIG1pc3Np bmcsIGRyb3BwZWQsIG9yICFhdHRieXZhbAorCQkJCQkJCQkJCSAqIGF0dHJpYnV0ZS4gKi8KIAlU dXBsZUNvbnN0ciAqY29uc3RyOwkJLyogY29uc3RyYWludHMsIG9yIE5VTEwgaWYgbm9uZSAqLwog CS8qIGNvbXBhY3RfYXR0cnNbTl0gaXMgdGhlIGNvbXBhY3QgbWV0YWRhdGEgb2YgQXR0cmlidXRl IE51bWJlciBOKzEgKi8KIAlDb21wYWN0QXR0cmlidXRlIGNvbXBhY3RfYXR0cnNbRkxFWElCTEVf QVJSQVlfTUVNQkVSXTsKQEAgLTE5NSw3ICsyMTMsNiBAQCBleHRlcm4gVHVwbGVEZXNjIENyZWF0 ZVR1cGxlRGVzY1RydW5jYXRlZENvcHkoVHVwbGVEZXNjIHR1cGRlc2MsIGludCBuYXR0cyk7CiAK IGV4dGVybiBUdXBsZURlc2MgQ3JlYXRlVHVwbGVEZXNjQ29weUNvbnN0cihUdXBsZURlc2MgdHVw ZGVzYyk7CiAKLSNkZWZpbmUgVHVwbGVEZXNjRmluYWxpemUoZCkgKCh2b2lkKSAwKQogI2RlZmlu ZSBUdXBsZURlc2NTaXplKHNyYykgXAogCShvZmZzZXRvZihzdHJ1Y3QgVHVwbGVEZXNjRGF0YSwg Y29tcGFjdF9hdHRycykgKyBcCiAJIChzcmMpLT5uYXR0cyAqIHNpemVvZihDb21wYWN0QXR0cmli dXRlKSArIFwKQEAgLTIwNiw2ICsyMjMsNyBAQCBleHRlcm4gdm9pZCBUdXBsZURlc2NDb3B5KFR1 cGxlRGVzYyBkc3QsIFR1cGxlRGVzYyBzcmMpOwogZXh0ZXJuIHZvaWQgVHVwbGVEZXNjQ29weUVu dHJ5KFR1cGxlRGVzYyBkc3QsIEF0dHJOdW1iZXIgZHN0QXR0bm8sCiAJCQkJCQkJICAgVHVwbGVE ZXNjIHNyYywgQXR0ck51bWJlciBzcmNBdHRubyk7CiAKK2V4dGVybiB2b2lkIFR1cGxlRGVzY0Zp bmFsaXplKFR1cGxlRGVzYyB0dXBkZXNjKTsKIGV4dGVybiB2b2lkIEZyZWVUdXBsZURlc2MoVHVw bGVEZXNjIHR1cGRlc2MpOwogCiBleHRlcm4gdm9pZCBJbmNyVHVwbGVEZXNjUmVmQ291bnQoVHVw bGVEZXNjIHR1cGRlc2MpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cG1hY3Mu aCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBtYWNzLmgKaW5kZXggZDY0YzE4Yjk1MGIuLjg3ZGJl Yjc2NjE4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHVwbWFjcy5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy90dXBtYWNzLmgKQEAgLTE1LDcgKzE1LDkgQEAKICNkZWZpbmUgVFVQ TUFDU19ICiAKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGVfZC5oIgkvKiBmb3IgVFlQQUxJR04g bWFjcm9zICovCi0KKyNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCisjaW5jbHVkZSAicG9y dC9wZ19ic3dhcC5oIgorI2luY2x1ZGUgInZhcmF0dC5oIgogCiAvKgogICogQ2hlY2sgYSB0dXBs ZSdzIG51bGwgYml0bWFwIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBhdHRyaWJ1dGUgaXMgbnVs bC4KQEAgLTI4LDYgKzMwLDYyIEBAIGF0dF9pc251bGwoaW50IEFUVCwgY29uc3QgYml0czggKkJJ VFMpCiAJcmV0dXJuICEoQklUU1tBVFQgPj4gM10gJiAoMSA8PCAoQVRUICYgMHgwNykpKTsKIH0K IAorLyoKKyAqIHBvcHVsYXRlX2lzbnVsbF9hcnJheQorICoJCVRyYW5zZm9ybSBhIHR1cGxlJ3Mg bnVsbCBiaXRtYXAgaW50byBhIGJvb2xlYW4gYXJyYXkuCisgKgorICogQ2FsbGVyIG11c3QgZW5z dXJlIHRoYXQgdGhlIGlzbnVsbCBhcnJheSBpcyBzaXplZCBzbyBpdCBjb250YWlucworICogYXQg bGVhc3QgYXMgbWFueSBlbGVtZW50cyBhcyB0aGVyZSBhcmUgYml0cyBpbiB0aGUgJ2JpdHMnIGFy cmF5LgorICogQ2FsbGVycyBzaG91bGQgYmUgYXdhcmUgdGhhdCBpc251bGwgaXMgcG9wdWxhdGVk IDggZWxlbWVudHMgYXQgYSB0aW1lLAorICogZWZmZWN0aXZlbHkgYXMgaWYgbmF0dHMgaXMgcm91 bmRlZCB1cCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiA4LgorICovCitzdGF0aWMgaW5saW5lIHZv aWQKK3BvcHVsYXRlX2lzbnVsbF9hcnJheShjb25zdCBiaXRzOCAqYml0cywgaW50IG5hdHRzLCBi b29sICppc251bGwpCit7CisJaW50CQkJbmJ5dGVzID0gKG5hdHRzICsgNykgPj4gMzsKKworCS8q CisJICogTXVsdGlwbHlpbmcgdGhlIGludmVydGVkIE5VTEwgYml0bWFwIGJ5dGUgYnkgdGhpcyB2 YWx1ZSByZXN1bHRzIGluIHRoZQorCSAqIGxvd2VzdCBiaXQgaW4gZWFjaCBieXRlIGJlaW5nIHNl dCB0aGUgc2FtZSBhcyBlYWNoIGJpdCBvZiB0aGUgaW52ZXJ0ZWQKKwkgKiBieXRlLiAgV2UgcGVy Zm9ybSB0aGlzIGFzIDIgMzItYml0IG9wZXJhdGlvbnMgcmF0aGVyIHRoYW4gYSBzaW5nbGUKKwkg KiA2NC1iaXQgb3BlcmF0aW9uIGFzIG11bHRpcGx5aW5nIGJ5IHRoZSByZXF1aXJlZCB2YWx1ZSB0 byBkbyB0aGlzIGluCisJICogNjQtYml0cyB3b3VsZCByZXN1bHQgaW4gb3ZlcmZsb3dpbmcgYSB1 aW50NjQgaW4gc29tZSBjYXNlcy4KKwkgKgorCSAqIFhYWCBpZiB3ZSBldmVyIHJlcXVpcmUgQk1J MiAoLW1hcmNoPXg4Ni02NC12MyksIHRoZW4gdGhpcyBjb3VsZCBiZSBkb25lCisJICogbW9yZSBl ZmZpY2llbnRseSBvbiBtb3N0IFg4Ni02NCBDUFVzIHdpdGggdGhlIFBERVAgaW5zdHJ1Y3Rpb24u ICBCZXdhcmUKKwkgKiB0aGF0IHNvbWUgY2hpcHMgKGUuZy4gQU1EJ3MgWmVuMikgYXJlIGhvcnJp Ymx5IGluZWZmaWNpZW50IGF0IFBERVAuCisJICovCisjZGVmaW5lIFNQUkVBRF9CSVRTX01VTFRJ UExJRVJfMzIgMHgyMDQwODFVCisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5ieXRlczsgaSsrLCBp c251bGwgKz0gOCkKKwl7CisJCXVpbnQ2NAkJaXNudWxsXzg7CisJCWJpdHM4CQludWxsYnl0ZSA9 IH5iaXRzW2ldOworCisJCS8qIENvbnZlcnQgdGhlIGxvd2VyIDQgYml0cyBvZiBOVUxMIGJpdG1h cCB3b3JkIGludG8gYSA2NCBiaXQgaW50ICovCisJCWlzbnVsbF84ID0gKG51bGxieXRlICYgMHhm KSAqIFNQUkVBRF9CSVRTX01VTFRJUExJRVJfMzI7CisKKwkJLyoKKwkJICogQ29udmVydCB0aGUg dXBwZXIgNCBiaXRzIG9mIG51bGwgYml0bWFwIHdvcmQgaW50byBhIDY0IGJpdCBpbnQsCisJCSAq IHNoaWZ0IGludG8gdGhlIHVwcGVyIDMyIGJpdCBhbmQgYml0d2lzZS1PUiB3aXRoIHRoZSByZXN1 bHQgb2YgdGhlCisJCSAqIGxvd2VyIDQgYml0cy4KKwkJICovCisJCWlzbnVsbF84IHw9ICgodWlu dDY0KSAoKG51bGxieXRlID4+IDQpICogU1BSRUFEX0JJVFNfTVVMVElQTElFUl8zMikpIDw8IDMy OworCisJCS8qIE1hc2sgb3V0IGFsbCBvdGhlciBiaXRzIGFwYXJ0IGZyb20gdGhlIGxvd2VzdCBi aXQgb2YgZWFjaCBieXRlLiAqLworCQlpc251bGxfOCAmPSBVSU5UNjRDT05TVCgweDAxMDEwMTAx MDEwMTAxMDEpOworCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisKKwkJLyoKKwkJICogRml4IGJ5 dGUgb3JkZXIgb24gYmlnLWVuZGlhbiBtYWNoaW5lcyBiZWZvcmUgY29weWluZyB0byB0aGUgYXJy YXkuCisJCSAqLworCQlpc251bGxfOCA9IHBnX2Jzd2FwNjQoaXNudWxsXzgpOworI2VuZGlmCisJ CW1lbWNweShpc251bGwsICZpc251bGxfOCwgc2l6ZW9mKHVpbnQ2NCkpOworCX0KK30KKwogI2lm bmRlZiBGUk9OVEVORAogLyoKICAqIEdpdmVuIGFuIGF0dGJ5dmFsIGFuZCBhbiBhdHRsZW4gZnJv bSBlaXRoZXIgYSBGb3JtX3BnX2F0dHJpYnV0ZSBvcgpAQCAtNjksNiArMTI3LDE3MCBAQCBmZXRj aF9hdHQoY29uc3Qgdm9pZCAqVCwgYm9vbCBhdHRieXZhbCwgaW50IGF0dGxlbikKIAllbHNlCiAJ CXJldHVybiBQb2ludGVyR2V0RGF0dW0oVCk7CiB9CisKKy8qCisgKiBTYW1lLCBidXQgbm8gZXJy b3IgY2hlY2tpbmcgZm9yIGludmFsaWQgYXR0bGVucyBmb3IgYnl2YWwgdHlwZXMuICBUaGlzCisg KiBpcyBzYWZlIHRvIHVzZSB3aGVuIGF0dGxlbiBjb21lcyBmcm9tIENvbXBhY3RBdHRyaWJ1dGUg YXMgd2UgdmFsaWRhdGUgdGhlCisgKiBsZW5ndGggd2hlbiBwb3B1bGF0aW5nIHRoYXQgc3RydWN0 LgorICovCitzdGF0aWMgaW5saW5lIERhdHVtCitmZXRjaF9hdHRfbm9lcnIoY29uc3Qgdm9pZCAq VCwgYm9vbCBhdHRieXZhbCwgaW50IGF0dGxlbikKK3sKKwlpZiAoYXR0Ynl2YWwpCisJeworCQlz d2l0Y2ggKGF0dGxlbikKKwkJeworCQkJY2FzZSBzaXplb2YoaW50MzIpOgorCQkJCXJldHVybiBJ bnQzMkdldERhdHVtKCooKGNvbnN0IGludDMyICopIFQpKTsKKwkJCWNhc2Ugc2l6ZW9mKGludDE2 KToKKwkJCQlyZXR1cm4gSW50MTZHZXREYXR1bSgqKChjb25zdCBpbnQxNiAqKSBUKSk7CisJCQlj YXNlIHNpemVvZihjaGFyKToKKwkJCQlyZXR1cm4gQ2hhckdldERhdHVtKCooKGNvbnN0IGNoYXIg KikgVCkpOworCQkJZGVmYXVsdDoKKwkJCQlBc3NlcnQoYXR0bGVuID09IHNpemVvZihpbnQ2NCkp OworCQkJCXJldHVybiBJbnQ2NEdldERhdHVtKCooKGNvbnN0IGludDY0ICopIFQpKTsKKwkJfQor CX0KKwllbHNlCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oVCk7Cit9CisKKworLyoKKyAqIGFs aWduX2ZldGNoX3RoZW5fYWRkCisgKgkJQXBwbGllcyBhbGwgdGhlIGZ1bmN0aW9uYWxpdHkgb2Yg YXR0X3BvaW50ZXJfYWxpZ25ieSgpLAorICoJCWZldGNoX2F0dF9ub2VycigpIGFuZCBhdHRfYWRk bGVuZ3RoX3BvaW50ZXIoKSwgcmVzdWx0aW5nIGluIHRoZSAqb2ZmCisgKgkJcG9pbnRlciB0byB0 aGUgcGVyaGFwcyB1bmFsaWduZWQgbnVtYmVyIG9mIGJ5dGVzIGludG8gJ3R1cHB0cicsIHJlYWR5 CisgKgkJdG8gZGVmb3JtIHRoZSBuZXh0IGF0dHJpYnV0ZS4KKyAqCisgKiB0dXBwdHI6IHBvaW50 ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdHVwbGUsIGFmdGVyIHRoZSBoZWFkZXIgYW5kIGFu eQorICogTlVMTCBiaXRtYXNrLgorICogb2ZmOiBvZmZzZXQgaW4gYnl0ZXMgZm9yIHJlYWRpbmcg dHVwbGUgZGF0YSwgcG9zc2libHkgdW5hbGlnbmVkLgorICogYXR0Ynl2YWwsIGF0dGxlbiBhbmQg YXR0YWxpZ25ieSBhcmUgdmFsdWVzIGZyb20gQ29tcGFjdEF0dHJpYnV0ZS4KKyAqLworc3RhdGlj IGlubGluZSBEYXR1bQorYWxpZ25fZmV0Y2hfdGhlbl9hZGQoY29uc3QgY2hhciAqdHVwcHRyLCB1 aW50MzIgKm9mZiwgYm9vbCBhdHRieXZhbCwgaW50IGF0dGxlbiwKKwkJCQkJIHVpbnQ4IGF0dGFs aWduYnkpCit7CisJRGF0dW0JCXJlczsKKworCWlmIChhdHRsZW4gPiAwKQorCXsKKwkJY29uc3Qg Y2hhciAqb2Zmc2V0X3B0cjsKKworCQkqb2ZmID0gVFlQRUFMSUdOKGF0dGFsaWduYnksICpvZmYp OworCQlvZmZzZXRfcHRyID0gdHVwcHRyICsgKm9mZjsKKwkJKm9mZiArPSBhdHRsZW47CisJCWlm IChhdHRieXZhbCkKKwkJeworCQkJc3dpdGNoIChhdHRsZW4pCisJCQl7CisJCQkJY2FzZSBzaXpl b2YoY2hhcik6CisJCQkJCXJldHVybiBDaGFyR2V0RGF0dW0oKigoY29uc3QgY2hhciAqKSBvZmZz ZXRfcHRyKSk7CisJCQkJY2FzZSBzaXplb2YoaW50MTYpOgorCQkJCQlyZXR1cm4gSW50MTZHZXRE YXR1bSgqKChjb25zdCBpbnQxNiAqKSBvZmZzZXRfcHRyKSk7CisJCQkJY2FzZSBzaXplb2YoaW50 MzIpOgorCQkJCQlyZXR1cm4gSW50MzJHZXREYXR1bSgqKChjb25zdCBpbnQzMiAqKSBvZmZzZXRf cHRyKSk7CisJCQkJZGVmYXVsdDoKKworCQkJCQkvKgorCQkJCQkgKiBwb3B1bGF0ZV9jb21wYWN0 X2F0dHJpYnV0ZV9pbnRlcm5hbCgpIHNob3VsZCBoYXZlCisJCQkJCSAqIGNoZWNrZWQKKwkJCQkJ ICovCisJCQkJCUFzc2VydChhdHRsZW4gPT0gc2l6ZW9mKGludDY0KSk7CisJCQkJCXJldHVybiBJ bnQ2NEdldERhdHVtKCooKGNvbnN0IGludDY0ICopIG9mZnNldF9wdHIpKTsKKwkJCX0KKwkJfQor CQlyZXR1cm4gUG9pbnRlckdldERhdHVtKG9mZnNldF9wdHIpOworCX0KKwllbHNlIGlmIChhdHRs ZW4gPT0gLTEpCisJeworCQlpZiAoIVZBUkFUVF9JU19TSE9SVCh0dXBwdHIgKyAqb2ZmKSkKKwkJ CSpvZmYgPSBUWVBFQUxJR04oYXR0YWxpZ25ieSwgKm9mZik7CisKKwkJcmVzID0gUG9pbnRlckdl dERhdHVtKHR1cHB0ciArICpvZmYpOworCQkqb2ZmICs9IFZBUlNJWkVfQU5ZKERhdHVtR2V0UG9p bnRlcihyZXMpKTsKKwkJcmV0dXJuIHJlczsKKwl9CisJZWxzZQorCXsKKwkJQXNzZXJ0KGF0dGxl biA9PSAtMik7CisJCSpvZmYgPSBUWVBFQUxJR04oYXR0YWxpZ25ieSwgKm9mZik7CisJCXJlcyA9 IFBvaW50ZXJHZXREYXR1bSh0dXBwdHIgKyAqb2ZmKTsKKwkJKm9mZiArPSBzdHJsZW4odHVwcHRy ICsgKm9mZikgKyAxOworCQlyZXR1cm4gcmVzOworCX0KK30KKworLyoKKyAqIGZpcnN0X251bGxf YXR0cgorICoJCUluc3BlY3QgYSBOVUxMIGJpdG1hcCBmcm9tIGEgdHVwbGUgYW5kIHJldHVybiB0 aGUgMC1iYXNlZCBhdHRudW0gb2YgdGhlCisgKgkJZmlyc3QgTlVMTCBhdHRyaWJ1dGUuICBSZXR1 cm5zIG5hdHRzIGlmIG5vIE5VTExzIHdlcmUgZm91bmQuCisgKgorICogVGhpcyBpcyBjb2RlZCB0 byBleHBlY3QgdGhhdCAnYml0cycgY29udGFpbnMgYXQgbGVhc3Qgb25lIDAgYml0IHNvbWV3aGVy ZQorICogaW4gdGhlIGFycmF5LCBidXQgbm90IG5lY2Vzc2FyaWx5IDwgbmF0dHMuICBOb3RlIHRo YXQgbmF0dHMgbWF5IGJlIHBhc3NlZAorICogYXMgYSB2YWx1ZSBsb3dlciB0aGFuIHRoZSBudW1i ZXIgb2YgYml0cyBwaHlzaWNhbGx5IHN0b3JlZCBpbiB0aGUgdHVwbGUncworICogTlVMTCBiaXRt YXAsIGluIHdoaWNoIGNhc2Ugd2UgbWF5IG5vdCBmaW5kIGEgTlVMTCBhbmQgcmV0dXJuIG5hdHRz LgorICoKKyAqIFRoZSByZWFzb24gd2UgcmVxdWlyZSBhdCBsZWFzdCBvbmUgMCBiaXQgc29tZXdo ZXJlIGluIHRoZSBOVUxMIGJpdG1hcCBpcworICogdGhhdCB0aGUgZm9yIGxvb3AgdGhhdCBjaGVj a3MgMHhGRiBieXRlcyB3b3VsZCBsb29wIHRvIHRoZSBsYXN0IGJ5dGUgaW4KKyAqIHRoZSBhcnJh eSBpZiBhbGwgYnl0ZXMgd2VyZSAweEZGLCBhbmQgdGhlIHN1YnNlcXVlbnQgY29kZSB0aGF0IGZp bmRzIHRoZQorICogcmlnaHQtbW9zdCAwIGJpdCB3b3VsZCBhY2Nlc3MgdGhlIGZpcnN0IGJ5dGUg YmV5b25kIHRoZSBiaXRtYXAuICBQcm92aWRlZAorICogd2UgZmluZCBhIDAgYml0IGJlZm9yZSB0 aGVuLCB0aGF0IHdvbid0IGhhcHBlbi4gIFNpbmNlIHR1cGxlcyB3aGljaCBoYXZlIG5vCisgKiBO VUxMcyBkb24ndCBoYXZlIGEgTlVMTCBiaXRtYXAsIHRoaXMgZnVuY3Rpb24gd29uJ3QgZ2V0IGNh bGxlZCBmb3IgdGhhdAorICogY2FzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2ZpcnN0X251 bGxfYXR0cihjb25zdCBiaXRzOCAqYml0cywgaW50IG5hdHRzKQoreworCWludAkJCW5hdHRCeXRl ID0gbmF0dHMgPj4gMzsKKwlpbnQJCQlieXRlbnVtOworCWludAkJCXJlczsKKworI2lmZGVmIFVT RV9BU1NFUlRfQ0hFQ0tJTkcKKwlpbnQJCQlmaXJzdG51bGxfY2hlY2sgPSBuYXR0czsKKworCS8q IERvIGl0IHRoZSBzbG93IHdheSBhbmQgY2hlY2sgd2UgZ2V0IHRoZSBzYW1lIGFuc3dlci4gKi8K Kwlmb3IgKGludCBpID0gMDsgaSA8IG5hdHRzOyBpKyspCisJeworCQlpZiAoYXR0X2lzbnVsbChp LCBiaXRzKSkKKwkJeworCQkJZmlyc3RudWxsX2NoZWNrID0gaTsKKwkJCWJyZWFrOworCQl9CisJ fQorI2VuZGlmCisKKwkvKiBQcm9jZXNzIGFsbCBieXRlcyB1cCB0byBqdXN0IGJlZm9yZSB0aGUg Ynl0ZSBmb3IgdGhlIG5hdHRzIGF0dHJpYnV0ZSAqLworCWZvciAoYnl0ZW51bSA9IDA7IGJ5dGVu dW0gPCBuYXR0Qnl0ZTsgYnl0ZW51bSsrKQorCXsKKwkJLyogYnJlYWsgaWYgdGhlcmUncyBhbnkg TlVMTCBhdHRycyAoYSAwIGJpdCkgKi8KKwkJaWYgKGJpdHNbYnl0ZW51bV0gIT0gMHhGRikKKwkJ CWJyZWFrOworCX0KKworCS8qCisJICogTG9vayBmb3IgdGhlIGhpZ2hlc3QgMC1iaXQgaW4gdGhl ICdieXRlbnVtJyBlbGVtZW50LiAgVG8gZG8gdGhpcywgd2UKKwkgKiBwcm9tb3RlIHRoZSB1aW50 OCB0byB1aW50MzIgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGJpdHdpc2UgTk9UIGFuZAorCSAqIGxv b2tpbmcgZm9yIHRoZSBmaXJzdCAxLWJpdC4gIFRoaXMgd29ya3MgZXZlbiB3aGVuIHRoZSBieXRl IGlzIDB4RkYsIGFzCisJICogdGhlIGJpdHdpc2UgTk9UIG9mIDB4RkYgaW4gMzIgYml0cyBpcyAw eEZGRkZGRjAwLCBpbiB3aGljaCBjYXNlCisJICogcGdfcmlnaHRtb3N0X29uZV9wb3MzMigpIHdp bGwgcmV0dXJuIDguICBXZSBtYXkgZW5kIHVwIHdpdGggYSB2YWx1ZQorCSAqIGhpZ2hlciB0aGFu IG5hdHRzIGhlcmUsIGJ1dCB3ZSdsbCBmaXggdGhhdCB3aXRoIHRoZSBNaW4oKSBiZWxvdy4KKwkg Ki8KKwlyZXMgPSBieXRlbnVtIDw8IDM7CisJcmVzICs9IHBnX3JpZ2h0bW9zdF9vbmVfcG9zMzIo figodWludDMyKSBiaXRzW2J5dGVudW1dKSk7CisKKwkvKgorCSAqIFNpbmNlIHdlIGRpZCBubyBt YXNraW5nIHRvIG1hc2sgb3V0IGJpdHMgYmV5b25kIHRoZSBuYXR0J3RoIGJpdCwgd2UgbWF5CisJ ICogaGF2ZSBmb3VuZCBhIGJpdCBoaWdoZXIgdGhhbiBuYXR0cywgc28gd2UgbXVzdCBjYXAgcmVz IHRvIG5hdHRzCisJICovCisJcmVzID0gTWluKHJlcywgbmF0dHMpOworCisJLyogRW5zdXJlIHdl IGdvdCB0aGUgc2FtZSBhbnN3ZXIgYXMgdGhlIGF0dF9pc251bGwoKSBsb29wIGdvdCAqLworCUFz c2VydChyZXMgPT0gZmlyc3RudWxsX2NoZWNrKTsKKworCXJldHVybiByZXM7Cit9CiAjZW5kaWYJ CQkJCQkJLyogRlJPTlRFTkQgKi8KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1 dG9yL3R1cHRhYmxlLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5oCmluZGV4IDNi MDlhYmJmOTlmLi5mZjQ1NzJhMjlhZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv dHVwdGFibGUuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5oCkBAIC04NCw5 ICs4NCw2IEBACiAgKiB0dHNfdmFsdWVzL3R0c19pc251bGwgYXJlIGFsbG9jYXRlZCBlaXRoZXIg d2hlbiB0aGUgc2xvdCBpcyBjcmVhdGVkICh3aGVuCiAgKiB0aGUgZGVzY3JpcHRvciBpcyBwcm92 aWRlZCksIG9yIHdoZW4gYSBkZXNjcmlwdG9yIGlzIGFzc2lnbmVkIHRvIHRoZSBzbG90OwogICog dGhleSBhcmUgb2YgbGVuZ3RoIGVxdWFsIHRvIHRoZSBkZXNjcmlwdG9yJ3MgbmF0dHMuCi0gKgot ICogVGhlIFRUU19GTEFHX1NMT1cgZmxhZyBpcyBzYXZlZCBzdGF0ZSBmb3IKLSAqIHNsb3RfZGVm b3JtX2hlYXBfdHVwbGUsIGFuZCBzaG91bGQgbm90IGJlIHRvdWNoZWQgYnkgYW55IG90aGVyIGNv ZGUuCiAgKi0tLS0tLS0tLS0KICAqLwogCkBAIC05OCw5ICs5NSwxMyBAQAogI2RlZmluZQkJCVRU U19GTEFHX1NIT1VMREZSRUUJCSgxIDw8IDIpCiAjZGVmaW5lIFRUU19TSE9VTERGUkVFKHNsb3Qp ICgoKHNsb3QpLT50dHNfZmxhZ3MgJiBUVFNfRkxBR19TSE9VTERGUkVFKSAhPSAwKQogCi0vKiBz YXZlZCBzdGF0ZSBmb3Igc2xvdF9kZWZvcm1faGVhcF90dXBsZSAqLwotI2RlZmluZQkJCVRUU19G TEFHX1NMT1cJCSgxIDw8IDMpCi0jZGVmaW5lIFRUU19TTE9XKHNsb3QpICgoKHNsb3QpLT50dHNf ZmxhZ3MgJiBUVFNfRkxBR19TTE9XKSAhPSAwKQorLyoKKyAqIHRydWUgPSBzbG90J3MgZm9ybWVk IHR1cGxlIGd1YXJhbnRlZWQgdG8gbm90IGhhdmUgTlVMTHMgaW4gTk9UIE5VTExhYmxlCisgKiBj b2x1bW5zLgorICovCisjZGVmaW5lCQkJVFRTX0ZMQUdfT0JFWVNfTk9UX05VTExfQ09OU1RSQUlO VFMJCSgxIDw8IDMpCisjZGVmaW5lIFRUU19PQkVZU19OT1RfTlVMTF9DT05TVFJBSU5UUyhzbG90 KSBcCisJKCgoc2xvdCktPnR0c19mbGFncyAmIFRUU19GTEFHX09CRVlTX05PVF9OVUxMX0NPTlNU UkFJTlRTKSAhPSAwKQogCiAvKiBmaXhlZCB0dXBsZSBkZXNjcmlwdG9yICovCiAjZGVmaW5lCQkJ VFRTX0ZMQUdfRklYRUQJCSgxIDw8IDQpCkBAIC0xMjMsNyArMTI0LDkgQEAgdHlwZWRlZiBzdHJ1 Y3QgVHVwbGVUYWJsZVNsb3QKICNkZWZpbmUgRklFTEROT19UVVBMRVRBQkxFU0xPVF9WQUxVRVMg NQogCURhdHVtCSAgICp0dHNfdmFsdWVzOwkJLyogY3VycmVudCBwZXItYXR0cmlidXRlIHZhbHVl cyAqLwogI2RlZmluZSBGSUVMRE5PX1RVUExFVEFCTEVTTE9UX0lTTlVMTCA2Ci0JYm9vbAkgICAq dHRzX2lzbnVsbDsJCS8qIGN1cnJlbnQgcGVyLWF0dHJpYnV0ZSBpc251bGwgZmxhZ3MgKi8KKwli b29sCSAgICp0dHNfaXNudWxsOwkJLyogY3VycmVudCBwZXItYXR0cmlidXRlIGlzbnVsbCBmbGFn cy4gIEFycmF5CisJCQkJCQkJCSAqIHNpemUgbXVzdCBhbHdheXMgYmUgcm91bmRlZCB1cCB0byB0 aGUgbmV4dAorCQkJCQkJCQkgKiBtdWx0aXBsZSBvZiA4IGVsZW1lbnRzLiAqLwogCU1lbW9yeUNv bnRleHQgdHRzX21jeHQ7CQkvKiBzbG90IGl0c2VsZiBpcyBpbiB0aGlzIGNvbnRleHQgKi8KIAlJ dGVtUG9pbnRlckRhdGEgdHRzX3RpZDsJLyogc3RvcmVkIHR1cGxlJ3MgdGlkICovCiAJT2lkCQkJ dHRzX3RhYmxlT2lkOwkvKiB0YWJsZSBvaWQgb2YgdHVwbGUgKi8KZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC5jIGIvc3JjL3Rlc3QvbW9kdWxl cy9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLmMKaW5kZXggNzgzOGY2MzliZWYuLmRlMzlmZWNm OGZkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9kZWZvcm1fYmVu Y2guYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9kZWZvcm1fYmVuY2guYwpA QCAtNDksNiArNDksNyBAQCBkZWZvcm1fYmVuY2goUEdfRlVOQ1RJT05fQVJHUykKIAogCXR1cGRl c2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CiAJc2xvdCA9IE1ha2VUdXBsZVRhYmxlU2xvdCh0 dXBkZXNjLCAmVFRTT3BzQnVmZmVySGVhcFR1cGxlKTsKKwlzbG90LT50dHNfZmxhZ3MgfD0gVFRT X0ZMQUdfT0JFWVNfTk9UX05VTExfQ09OU1RSQUlOVFM7CiAJc2NhbiA9IHRhYmxlX2JlZ2luc2Nh bl9zdHJhdChyZWwsIEdldEFjdGl2ZVNuYXBzaG90KCksIDAsIE5VTEwsIHRydWUsIGZhbHNlKTsK IAogCS8qCi0tIAoyLjUxLjAKCg== --0000000000002deb23064bf63451 Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; name="Deform_bench_test_module_results_v11.xlsx" Content-Disposition: attachment; filename="Deform_bench_test_module_results_v11.xlsx" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm7rh5bc6 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 W0NvbnRlbnRfVHlwZXNdLnhtbMWWyW6DMBCG730KxLUCJ+miqoLk0OXYRmp6rlw8gBuwLdvZ3r5j SCIUZVVQcjLY88/3z8g2RIN5WXhT0IZLEfvdsON7IBLJuMhi/3v0Hjz5g/5NNFooMB7GChP7ubXq mRCT5FBSE0oFAldSqUtq8VVnRNFkTDMgvU7nkSRSWBA2sC6H349eIaWTwnpvc5yuuSj3vZc6zqFi nypV8IRaXCZulWzVaSjMHuFUsA13wdJZiMoqxuRcmdvdBCWyDQAvXWVufrviT8F2SbWAmk9st+YM vCHV9oOWGEDmBZlJPf6Vchzub8aWmmSa8gSYTCYlSkKjNFBmcgBbFmE1hiXlYlXlDr6xiwJM2/Qq 6QGyq7wSGFIN3ZZNrPMf7+PH7ayGm7DlnbbDAdN0hifPrB7O78Qy0bHcuu4m/UKVJzm+mnporWp0 XyU8gd27Ivvuiuz7K7IfLsw2GAPsy2q35Vu/bhu5D/ioD1vz3r/EYUPjQy0V9l5qOL36Fc+pA4WJ QFu+/4pfEzH12e0G96VlwI5k1z1uua83Eal+iPr/UEsHCH2EgLyaAQAAPwkAAFBLAwQUAAgICAAg WmFcAAAAAAAAAAAAAAAAGAAAAHhsL3dvcmtzaGVldHMvc2hlZXQxLnhtbL19W3MdR3Lm+/4KBp/W D9Os+0UhacPDcwGBc5XsdcS+cUhohBiK4IKQZPvXb+YhGujOL4FqzCLadtBUMvs753RWZVXev/9f //nbp1d/XN58vbr+/MNr25nXry4/f7j+ePX57z+8/vd/W/2lvH719fb954/vP11/vvzh9X9dfn39 v378H9//eX3zj6+/Xl7eviKAz19/eP3r7e2X7968+frh18vf3n/trr9cfqZ/+eX65rf3t/SfN39/ 8/XLzeX7j6eHfvv0xhmT3vz2/urz628I391Mwbj+5ZerD5eL6w+//3b5+fYbyM3lp/e39PW//nr1 5WuP9p8fJ+F9vHn/J/3U/vsMvuLi27/c49kAeL9dfbi5/nr9y2334fq3u6+Gv7K+qaPf+Z837p9D spF+6h9XLCnXg/32Ycqv/O39zT9+//IXwv5Cb+pvV5+ubv/r9INf//j9Cf9w8+qXq0+3lzfb648k 5F/ef/p6Sf/25f3fL3++vP33L6d/v/236wMRfnh9e/P75es3P37/5u7ZH7//eEXi4C/26ubylx9e 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 sTOGzG2eqks3/GhkW+SlBl0TjLVf6dCct8c3qsyHMEiy5eaZXBglBDm/m8cqLhwQ5ISejRpTonsJ aFeLvhh62y57G3merse24xo0HVIwZ2ClYfNUtGxrTdF4a2G8XP/IC5SkCVHO7+axincGRDmhZ6PG lBKOue75xjqwerrb80xxet+QkK5Bc99xWeO20rBjF0uhl29MoLsxJEz2j7xEMaCQ5fyOHqsky4As FR6UJTLxjE0Z3Or5xrKMfB8suWROXQNPjwJtDVk5eFYiNgcqfSl0Mz5NLUdZtnw908swhSzn9/VY xUUDskQeRZYKkMGpuj3f8H1nej3WcqZdrjy4HGSp+HoKTiXToNmuJZMycNA5B1mQsO4feYn6VyHK +X09Fv0oYFUqPIooFSClgqvnG2+dxE32XTEcUoRMEA2at6Vy79GwYwqG/sWUyBPMQZYtZ8/kymMh yvl9PVZJmAFRTpjSoTEl2m7gtrPokCGJW3ajm0CidJDIrEHzaQkTknVsYxOnkPNISQ9zy/tHXqLm W8hyfmePVcZrgCwnzOnQmFKB1JtFzzdWg47I1Rda6d7J5uBLDfq0LWVaj46dEk8mc9VU7+XwwnX/ yEtU23+T5Zuvv15e3i7e377/8fsvN1efb/dfbq+uP3999evl+49Xn//+9V5Kf7+5+rghMRHl9ub3 IeHny9ue9uv1zdV/X3++ff/p7eXn28sbFuG3f/nj8ub26sOQ/g33DX3u+79fbt/f/P2KPvbT5S8E Rlfv169uvi2S099vr7+c/kbv6m/Xt7SE+v/ir3l5w/8V+dJP2tInR9uMnvnl+vpW/6e7z6Tv/fuX V1/ef7m8+fnqvy9/eM0eGPqKl9ygmJbhL1e3/3b9H1cfb389dTU+/We/dOmfGWJ/c/r0a/p1//br 5efF9Z+faT3fXNGPfM/v8YfXn95//kigX+gV/O3T+w//+NfPH//j16vby/v3+vHm/S8Pe+HD5adP b69/+40A6EV/vv48eqmLL1c/vPb83frX+UD5cP3lioVzaon87bWsTm/g1cerX36hV/75dnV18/Xh o+7J+48fl388bNIfv7/++PHsBEDrY/B3+us3xG/k+78PP+zH7+n3/EkL59XNd1ck5Jt3H09f6M2f 1zf/OK21H/8fUEsHCGM9uI49TAAAh+0BAFBLAQIUABQACAgIACBaYVx2xe8gDQIAAIsDAAAPAAAA AAAAAAAAAAAAAAAAAAB4bC93b3JrYm9vay54bWxQSwECFAAUAAgICAAgWmFcHLemUjYEAABnKwAA DQAAAAAAAAAAAAAAAABKAgAAeGwvc3R5bGVzLnhtbFBLAQIUABQACAgIACBaYVzC1TGXqAAAABoB AAAjAAAAAAAAAAAAAAAAALsGAAB4bC93b3Jrc2hlZXRzL19yZWxzL3NoZWV0MS54bWwucmVsc1BL AQIUABQACAgIACBaYVzkWdjybwIAAH4RAAAYAAAAAAAAAAAAAAAAALQHAAB4bC9kcmF3aW5ncy9k cmF3aW5nMS54bWxQSwECFAAUAAgICAAgWmFcgeX0ecUAAAA0AwAAIwAAAAAAAAAAAAAAAABpCgAA eGwvZHJhd2luZ3MvX3JlbHMvZHJhd2luZzEueG1sLnJlbHNQSwECFAAUAAgICAAgWmFcvndZHA4J AABKTAAAFAAAAAAAAAAAAAAAAAB/CwAAeGwvY2hhcnRzL2NoYXJ0MS54bWxQSwECFAAUAAgICAAg WmFcBhWtltQIAADySwAAFAAAAAAAAAAAAAAAAADPFAAAeGwvY2hhcnRzL2NoYXJ0Mi54bWxQSwEC FAAUAAgICAAgWmFciW7yvhEJAACETAAAFAAAAAAAAAAAAAAAAADlHQAAeGwvY2hhcnRzL2NoYXJ0 My54bWxQSwECFAAUAAgICAAgWmFcVWc9fskIAAAYTAAAFAAAAAAAAAAAAAAAAAA4JwAAeGwvY2hh cnRzL2NoYXJ0NC54bWxQSwECFAAUAAgICAAgWmFcfpZr09oIAAANTAAAFAAAAAAAAAAAAAAAAABD MAAAeGwvY2hhcnRzL2NoYXJ0NS54bWxQSwECFAAUAAgICAAgWmFcf7ArjE8BAACkBQAAFAAAAAAA AAAAAAAAAABfOQAAeGwvc2hhcmVkU3RyaW5ncy54bWxQSwECFAAUAAgICAAgWmFcT/D5etIAAAAl AgAAGgAAAAAAAAAAAAAAAADwOgAAeGwvX3JlbHMvd29ya2Jvb2sueG1sLnJlbHNQSwECFAAUAAgI CAAgWmFc1j+/8VEBAACKAgAAEQAAAAAAAAAAAAAAAAAKPAAAZG9jUHJvcHMvY29yZS54bWxQSwEC FAAUAAgICAAgWmFcb/FWFhEBAAC6AQAAEAAAAAAAAAAAAAAAAACaPQAAZG9jUHJvcHMvYXBwLnht bFBLAQIUABQACAgIACBaYVxmqoK34AAAADsCAAALAAAAAAAAAAAAAAAAAOk+AABfcmVscy8ucmVs c1BLAQIUABQACAgIACBaYVx9hIC8mgEAAD8JAAATAAAAAAAAAAAAAAAAAAJAAABbQ29udGVudF9U eXBlc10ueG1sUEsBAhQAFAAICAgAIFphXGM9uI49TAAAh+0BABgAAAAAAAAAAAAAAAAA3UEAAHhs L3dvcmtzaGVldHMvc2hlZXQxLnhtbFBLBQYAAAAAEQARAHEEAABgjgAAAAA= --0000000000002deb23064bf63451--