Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uWMGX-00CiVD-Ac for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Jun 2025 21:42:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uWMGV-002YEn-ES for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Jun 2025 21:42:16 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uWMGU-002YEe-S7 for pgsql-hackers@lists.postgresql.org; Mon, 30 Jun 2025 21:42:15 +0000 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uWMGS-004yhk-2J for pgsql-hackers@lists.postgresql.org; Mon, 30 Jun 2025 21:42:15 +0000 Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-7494999de5cso3912875b3a.3 for ; Mon, 30 Jun 2025 14:42:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=illuminatedcomputing-com.20230601.gappssmtp.com; s=20230601; t=1751319730; x=1751924530; darn=lists.postgresql.org; h=in-reply-to:content-language:from:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=mUVHv5DVVqu8WpAZxEQVpuvC8IIyqdaP7s7Dc7bguIU=; b=FfYmcmQkfFMbTzAG9z7xndTNj13oHcc8qECSlR7IcU6C8rfqgzNh9H1zPbb2LI9f7X id+dAiji6cLe/0I/jR/fwbwVYsxDReO8tH0C4OV7ASOrySwqRaZurDogtF9FnNru9eXB nlPHCnqOkB4wIDr6V7r8EGFPZOAV1KjYBPPbxDWYMRTFkwVb4G9KB8HnGYOjP740SzDe VM0AxBoVIU/Qtg5qIOAfDwuBflGsCO/vaznLkjP/UxSbx1XGJMLaubKQYzwW4IibiLdN ZLb98AZr/yJauAGfVq0fExK4ThywrUSqmx9yc3rkhYCO8GOqZiB/9g0NBc/fgvhTZfkt /RIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751319730; x=1751924530; h=in-reply-to:content-language:from:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=mUVHv5DVVqu8WpAZxEQVpuvC8IIyqdaP7s7Dc7bguIU=; b=dp3NfQEy4Uax+vynAY5pvzRjMd4esRBECa1ScQRFUndzAY/xhCgQfeFWBO3gCKvBDa MkUWBvDuN5E2B5eM8Pa0gsSbZ0FbVT2lPIeOCeObx+yScNorv32VrG5HbCpYyICS1PrB eIe2fYN2M3F2HfWje6LGfe15x884G6KqQF4yDjuxKRAQFNcqz37aLg6BvbuzoOuYRhtT CsLEKyabKgjsLLvZ+quvm84aIEu/xpcCdnkK9/r8jVlA8sT5k02VD6+3mKt+Zcsz4vbP qJ+1lKD7eikvyG+laD5ZZGb1ahntiNN7SP7WpqyJL277szPCWTgt89JGZCLXurjzrwK5 48Lg== X-Forwarded-Encrypted: i=1; AJvYcCU8Dta7eiqoy9cA9YHBThK1rrCM2hBxbYj5d3t0BBYfAA1Z8dYtoo42HiIcchiO8mQvxFK6nGXPUoQWHXdM@lists.postgresql.org X-Gm-Message-State: AOJu0Ywpw6Nza+OtQHx/6xPemDc7mRjx/hgLXrhLw9SJjVczt1fa7GuF Q+Mpyg6huCloijnb7tx1UkQYwb7gDQ6ErYylRuD2cLRIrBTyrzFX+CABBZkHq9vpjhp3sVcpqD6 q9fPY X-Gm-Gg: ASbGncvK0Ii9X9zq0KnNHywJCgvK4R1n2eAsIvgG5u5JbtmSHrsnkC4nPdth5IPV6De Mu6oIRuNoyu9ShFSkivRBJ/K0uxHEFHjo91np/CKLsXufHzy2n5wS092smr46hVl+vJwUsoCLg7 cBu1oTZ+x9KC86AYTfZeFwzqTTb7v1PBh3VOH1NNRkCdR1926xxQoGC8v68ZkeOeQwH8AEaDQYp FI0JDPwp9Gd/YCVaimzd2A0Gm9jbiaI9mkzjuM6N362jC8F+4fS2cVzENKGobwKBRmaOckqcJWj PS+RzGIqFWpbPJRoSAjHKrlG29a3HS7VhlHCR0PwC+0Jq6vpWI0qKknOEbf5mtLhxFUl8ReBVXc = X-Google-Smtp-Source: AGHT+IHgAeLXAQIKbDru0/SsUlcjjfLOvYjXUR3Zwu8P+UO4XvOvD4HKPOGYA4S7KOjm5/R1BqGPAQ== X-Received: by 2002:a05:6a00:c90:b0:736:4e67:d631 with SMTP id d2e1a72fcca58-74af6fde138mr24098281b3a.23.1751319729951; Mon, 30 Jun 2025 14:42:09 -0700 (PDT) Received: from [192.168.2.139] ([50.39.255.79]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74af541cdd1sm10010693b3a.44.2025.06.30.14.42.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 30 Jun 2025 14:42:09 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------fmpWOyABkUKksVqmRjmj9S7q" Message-ID: <33b10538-2c88-4278-a65f-0c1e6f265cb7@illuminatedcomputing.com> Date: Mon, 30 Jun 2025 14:42:08 -0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Inline non-SQL SRFs using SupportRequestSimplify To: Tom Lane Cc: Heikki Linnakangas , PostgreSQL Hackers References: <09de6afa-c33d-4d94-a5cb-afc6cea0d2bb@illuminatedcomputing.com> <1755478.1722020334@sss.pgh.pa.us> <956f8a6f-32a7-49ab-92a3-dca5c8afe112@illuminatedcomputing.com> <1466725.1725381721@sss.pgh.pa.us> From: Paul Jungwirth Content-Language: en-US In-Reply-To: <1466725.1725381721@sss.pgh.pa.us> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------fmpWOyABkUKksVqmRjmj9S7q Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 9/3/24 09:42, Tom Lane wrote: > Paul Jungwirth writes: >> Here are new patches using a new SupportRequestInlineSRF request type. They include patches and >> documentation. > > I took a look through this. I feel like we're still some way away > from having something committable. I've got two main complaint > areas: > > 1. It doesn't seem like integrating this into > inline_set_returning_function was the right thing after all, or > maybe just the way you did it isn't right. > ... > 2. The documentation needs to be a great deal more explicit > about what the function is supposed to return. Thanks for the review . . . and your patience waiting for an update! I tried a few refactoring approaches but the nicest seemed to be to keep the shared parts in inline_set_returning_function, but have it call out to either inline_sql_set_returning_function or inline_set_returning_function_with_support. The first patch just refactors but doesn't yet add inline_set_returning_function_with_support, then the second patch adds the new functionality. The refactor lets us share lots of pre-condition checks, as well as parameter substitution into the Query result. In some cases the refactor changes the order of things, but all of those changes looked safe to me. I didn't love passing a SysCache HeapTuple into another function, but it does make the cleanup a little easier, since now we can always release it in the same place. The first patch gave me a wacky diff, but I couldn't get git to make something less fragmented. The idea is simple though: move part of inline_set_returning_function into inline_sql_set_returning_function, and call that instead. Rebased to 0836683a89. Yours, -- Paul ~{:-) pj@illuminatedcomputing.com --------------fmpWOyABkUKksVqmRjmj9S7q Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-Move-some-things-outside-of-inline_set_returning_.patch" Content-Disposition: attachment; filename*0="v2-0001-Move-some-things-outside-of-inline_set_returning_.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyYTBkMmJiNmNjNmZlMjVjYWIxMDY1NDExZWQ0ZGIxN2NjMzk0YzUzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiUGF1bCBBLiBKdW5nd2lydGgiIDxwakBpbGx1bWlu YXRlZGNvbXB1dGluZy5jb20+CkRhdGU6IFR1ZSwgMjQgSnVuIDIwMjUgMTk6MTA6MTUgLTA3 MDAKU3ViamVjdDogW1BBVENIIHYyIDEvMl0gTW92ZSBzb21lIHRoaW5ncyBvdXRzaWRlIG9m CiBpbmxpbmVfc2V0X3JldHVybmluZ19mdW5jdGlvbi4KCkFkZGVkIGEgbmV3IGlubGluZV9z cWxfc2V0X3JldHVybmluZ19mdW5jdGlvbiBpbiBwcmVwYXJhdGlvbiBmb3IKaW5saW5lX3Nl dF9yZXR1cm5pbmdfZnVuY3Rpb25fd2l0aF9zdXBwb3J0LiBUaGVuCmlubGluZV9zZXRfcmV0 dXJuaW5nX2Z1bmN0aW9uIGNhbiBjYWxsIGJvdGgsIGhhbmRsaW5nIHRoZWlyIHNoYXJlZCBu ZWVkcwppdHNlbGYuCgpBdXRob3I6IFBhdWwgQS4gSnVuZ3dpcnRoIDxwakBpbGx1bWluYXRl ZGNvbXB1dGluZy5jb20+Ci0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNl cy5jIHwgMjEyICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs IDEyMiBpbnNlcnRpb25zKCspLCA5MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9jbGF1c2VzLmMKaW5kZXggMjZhM2UwNTAwODYuLmEwZGM1ZGZjZDYxIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCkBAIC01MDQ5LDI5ICs1MDQ5LDIx IEBAIGV2YWx1YXRlX2V4cHIoRXhwciAqZXhwciwgT2lkIHJlc3VsdF90eXBlLCBpbnQzMiBy ZXN1bHRfdHlwbW9kLAogCiAKIC8qCi0gKiBpbmxpbmVfc2V0X3JldHVybmluZ19mdW5jdGlv bgotICoJCUF0dGVtcHQgdG8gImlubGluZSIgYSBzZXQtcmV0dXJuaW5nIGZ1bmN0aW9uIGlu IHRoZSBGUk9NIGNsYXVzZS4KLSAqCi0gKiAicnRlIiBpcyBhbiBSVEVfRlVOQ1RJT04gcmFu Z2V0YWJsZSBlbnRyeS4gIElmIGl0IHJlcHJlc2VudHMgYSBjYWxsIG9mIGEKLSAqIHNldC1y ZXR1cm5pbmcgU1FMIGZ1bmN0aW9uIHRoYXQgY2FuIHNhZmVseSBiZSBpbmxpbmVkLCBleHBh bmQgdGhlIGZ1bmN0aW9uCi0gKiBhbmQgcmV0dXJuIHRoZSBzdWJzdGl0dXRlIFF1ZXJ5IHN0 cnVjdHVyZS4gIE90aGVyd2lzZSwgcmV0dXJuIE5VTEwuCisgKiBpbmxpbmVfc3FsX3NldF9y ZXR1cm5pbmdfZnVuY3Rpb24KICAqCi0gKiBXZSBhc3N1bWUgdGhhdCB0aGUgUlRFJ3MgZXhw cmVzc2lvbiBoYXMgYWxyZWFkeSBiZWVuIHB1dCB0aHJvdWdoCi0gKiBldmFsX2NvbnN0X2V4 cHJlc3Npb25zKCksIHdoaWNoIGFtb25nIG90aGVyIHRoaW5ncyB3aWxsIHRha2UgY2FyZSBv ZgotICogZGVmYXVsdCBhcmd1bWVudHMgYW5kIG5hbWVkLWFyZ3VtZW50IG5vdGF0aW9uLgor ICogVGhpcyBpbXBsZW1lbnRzIGlubGluZV9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9uIGZvciBz cWwtbGFuZ3VhZ2UgZnVuY3Rpb25zLgorICogSXQgcGFyc2VzIHRoZSBib2R5IChvciB1c2Vz IHRoZSBwcmUtcGFyc2VkIGJvZHkgaWYgYXZhaWxhYmxlKS4KKyAqIEl0IGFsbG9jYXRlcyBp dHMgb3duIHRlbXBvcmFyeSBNZW1vcnlDb250ZXh0IGZvciB0aGUgcGFyc2luZywgdGhlbiBj b3BpZXMKKyAqIHRoZSByZXN1bHQgaW50byB0aGUgY2FsbGVyJ3MgY29udGV4dC4KICAqCi0g KiBUaGlzIGhhcyBhIGdvb2QgZGVhbCBvZiBzaW1pbGFyaXR5IHRvIGlubGluZV9mdW5jdGlv bigpLCBidXQgdGhhdCdzCi0gKiBmb3IgdGhlIG5vbi1zZXQtcmV0dXJuaW5nIGNhc2UsIGFu ZCB0aGVyZSBhcmUgZW5vdWdoIGRpZmZlcmVuY2VzIHRvCi0gKiBqdXN0aWZ5IHNlcGFyYXRl IGZ1bmN0aW9ucy4KKyAqIFJldHVybnMgTlVMTCBpZiB0aGUgZnVuY3Rpb24gY291bGRuJ3Qg YmUgaW5saW5lZC4KICAqLwotUXVlcnkgKgotaW5saW5lX3NldF9yZXR1cm5pbmdfZnVuY3Rp b24oUGxhbm5lckluZm8gKnJvb3QsIFJhbmdlVGJsRW50cnkgKnJ0ZSkKK3N0YXRpYyBRdWVy eSAqCitpbmxpbmVfc3FsX3NldF9yZXR1cm5pbmdfZnVuY3Rpb24oUGxhbm5lckluZm8gKnJv b3QsIFJhbmdlVGJsRW50cnkgKnJ0ZSwKKwkJCQkJCQkJICBSYW5nZVRibEZ1bmN0aW9uICpy dGZ1bmMsCisJCQkJCQkJCSAgRnVuY0V4cHIgKmZleHByLCBPaWQgZnVuY19vaWQsIEhlYXBU dXBsZSBmdW5jX3R1cGxlLAorCQkJCQkJCQkgIEZvcm1fcGdfcHJvYyBmdW5jZm9ybSkKIHsK LQlSYW5nZVRibEZ1bmN0aW9uICpydGZ1bmM7Ci0JRnVuY0V4cHIgICAqZmV4cHI7Ci0JT2lk CQkJZnVuY19vaWQ7Ci0JSGVhcFR1cGxlCWZ1bmNfdHVwbGU7Ci0JRm9ybV9wZ19wcm9jIGZ1 bmNmb3JtOwogCWNoYXIJICAgKnNyYzsKIAlEYXR1bQkJdG1wOwogCWJvb2wJCWlzTnVsbDsK QEAgLTUwODgsMzcgKzUwODAsNiBAQCBpbmxpbmVfc2V0X3JldHVybmluZ19mdW5jdGlvbihQ bGFubmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAqcnRlKQogCiAJQXNzZXJ0KHJ0ZS0+ cnRla2luZCA9PSBSVEVfRlVOQ1RJT04pOwogCi0JLyoKLQkgKiBJdCBkb2Vzbid0IG1ha2Ug YSBsb3Qgb2Ygc2Vuc2UgZm9yIGEgU1FMIFNSRiB0byByZWZlciB0byBpdHNlbGYgaW4gaXRz Ci0JICogb3duIEZST00gY2xhdXNlLCBzaW5jZSB0aGF0IG11c3QgY2F1c2UgaW5maW5pdGUg cmVjdXJzaW9uIGF0IHJ1bnRpbWUuCi0JICogSXQgd2lsbCBjYXVzZSB0aGlzIGNvZGUgdG8g cmVjdXJzZSB0b28sIHNvIGNoZWNrIGZvciBzdGFjayBvdmVyZmxvdy4KLQkgKiAoVGhlcmUn cyBubyBuZWVkIHRvIGRvIG1vcmUuKQotCSAqLwotCWNoZWNrX3N0YWNrX2RlcHRoKCk7Ci0K LQkvKiBGYWlsIGlmIHRoZSBSVEUgaGFzIE9SRElOQUxJVFkgLSB3ZSBkb24ndCBpbXBsZW1l bnQgdGhhdCBoZXJlLiAqLwotCWlmIChydGUtPmZ1bmNvcmRpbmFsaXR5KQotCQlyZXR1cm4g TlVMTDsKLQotCS8qIEZhaWwgaWYgUlRFIGlzbid0IGEgc2luZ2xlLCBzaW1wbGUgRnVuY0V4 cHIgKi8KLQlpZiAobGlzdF9sZW5ndGgocnRlLT5mdW5jdGlvbnMpICE9IDEpCi0JCXJldHVy biBOVUxMOwotCXJ0ZnVuYyA9IChSYW5nZVRibEZ1bmN0aW9uICopIGxpbml0aWFsKHJ0ZS0+ ZnVuY3Rpb25zKTsKLQotCWlmICghSXNBKHJ0ZnVuYy0+ZnVuY2V4cHIsIEZ1bmNFeHByKSkK LQkJcmV0dXJuIE5VTEw7Ci0JZmV4cHIgPSAoRnVuY0V4cHIgKikgcnRmdW5jLT5mdW5jZXhw cjsKLQotCWZ1bmNfb2lkID0gZmV4cHItPmZ1bmNpZDsKLQotCS8qCi0JICogVGhlIGZ1bmN0 aW9uIG11c3QgYmUgZGVjbGFyZWQgdG8gcmV0dXJuIGEgc2V0LCBlbHNlIGlubGluaW5nIHdv dWxkCi0JICogY2hhbmdlIHRoZSByZXN1bHRzIGlmIHRoZSBjb250YWluZWQgU0VMRUNUIGRp ZG4ndCByZXR1cm4gZXhhY3RseSBvbmUKLQkgKiByb3cuCi0JICovCi0JaWYgKCFmZXhwci0+ ZnVuY3JldHNldCkKLQkJcmV0dXJuIE5VTEw7Ci0KIAkvKgogCSAqIFJlZnVzZSB0byBpbmxp bmUgaWYgdGhlIGFyZ3VtZW50cyBjb250YWluIGFueSB2b2xhdGlsZSBmdW5jdGlvbnMgb3IK IAkgKiBzdWItc2VsZWN0cy4gIFZvbGF0aWxlIGZ1bmN0aW9ucyBhcmUgcmVqZWN0ZWQgYmVj YXVzZSBpbmxpbmluZyBtYXkKQEAgLTUxMzIsMjIgKzUwOTMsNiBAQCBpbmxpbmVfc2V0X3Jl dHVybmluZ19mdW5jdGlvbihQbGFubmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAqcnRl KQogCQljb250YWluX3N1YnBsYW5zKChOb2RlICopIGZleHByLT5hcmdzKSkKIAkJcmV0dXJu IE5VTEw7CiAKLQkvKiBDaGVjayBwZXJtaXNzaW9uIHRvIGNhbGwgZnVuY3Rpb24gKGZhaWwg bGF0ZXIsIGlmIG5vdCkgKi8KLQlpZiAob2JqZWN0X2FjbGNoZWNrKFByb2NlZHVyZVJlbGF0 aW9uSWQsIGZ1bmNfb2lkLCBHZXRVc2VySWQoKSwgQUNMX0VYRUNVVEUpICE9IEFDTENIRUNL X09LKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qIENoZWNrIHdoZXRoZXIgYSBwbHVnaW4gd2Fu dHMgdG8gaG9vayBmdW5jdGlvbiBlbnRyeS9leGl0ICovCi0JaWYgKEZtZ3JIb29rSXNOZWVk ZWQoZnVuY19vaWQpKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qCi0JICogT0ssIGxldCdzIHRh a2UgYSBsb29rIGF0IHRoZSBmdW5jdGlvbidzIHBnX3Byb2MgZW50cnkuCi0JICovCi0JZnVu Y190dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKGZ1 bmNfb2lkKSk7Ci0JaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZ1bmNfdHVwbGUpKQotCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZnVuY3Rpb24gJXUiLCBmdW5jX29p ZCk7Ci0JZnVuY2Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QoZnVuY190dXBsZSk7 Ci0KIAkvKgogCSAqIEZvcmdldCBpdCBpZiB0aGUgZnVuY3Rpb24gaXMgbm90IFNRTC1sYW5n dWFnZSBvciBoYXMgb3RoZXIgc2hvd3N0b3BwZXIKIAkgKiBwcm9wZXJ0aWVzLiAgSW4gcGFy dGljdWxhciBpdCBtdXN0bid0IGJlIGRlY2xhcmVkIFNUUklDVCwgc2luY2Ugd2UKQEAgLTUx NjgsNyArNTExMyw2IEBAIGlubGluZV9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9uKFBsYW5uZXJJ bmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpydGUpCiAJCWxpc3RfbGVuZ3RoKGZleHByLT5h cmdzKSAhPSBmdW5jZm9ybS0+cHJvbmFyZ3MgfHwKIAkJIWhlYXBfYXR0aXNudWxsKGZ1bmNf dHVwbGUsIEFudW1fcGdfcHJvY19wcm9jb25maWcsIE5VTEwpKQogCXsKLQkJUmVsZWFzZVN5 c0NhY2hlKGZ1bmNfdHVwbGUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTUxNzcsNyAr NTEyMSw3IEBAIGlubGluZV9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9uKFBsYW5uZXJJbmZvICpy b290LCBSYW5nZVRibEVudHJ5ICpydGUpCiAJICogdGhhdCBwYXJzaW5nIG1pZ2h0IGNyZWF0 ZS4KIAkgKi8KIAlteWN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5 Q29udGV4dCwKLQkJCQkJCQkJICAiaW5saW5lX3NldF9yZXR1cm5pbmdfZnVuY3Rpb24iLAor CQkJCQkJCQkgICJpbmxpbmVfc3FsX3NldF9yZXR1cm5pbmdfZnVuY3Rpb24iLAogCQkJCQkJ CQkgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOwogCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhteWN4dCk7CiAKQEAgLTUyNjcsMTMgKzUyMTEsNiBAQCBpbmxpbmVfc2V0X3Jl dHVybmluZ19mdW5jdGlvbihQbGFubmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAqcnRl KQogCWVsc2UKIAkJZnVuY3R5cGNsYXNzID0gZ2V0X2V4cHJfcmVzdWx0X3R5cGUoKE5vZGUg KikgZmV4cHIsIE5VTEwsICZyZXR0dXBkZXNjKTsKIAotCS8qCi0JICogVGhlIHNpbmdsZSBj b21tYW5kIG11c3QgYmUgYSBwbGFpbiBTRUxFQ1QuCi0JICovCi0JaWYgKCFJc0EocXVlcnl0 cmVlLCBRdWVyeSkgfHwKLQkJcXVlcnl0cmVlLT5jb21tYW5kVHlwZSAhPSBDTURfU0VMRUNU KQotCQlnb3RvIGZhaWw7Ci0KIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24gKHN0 aWxsKSByZXR1cm5zIHdoYXQgaXQncyBkZWNsYXJlZCB0by4gIFRoaXMKIAkgKiB3aWxsIHJh aXNlIGFuIGVycm9yIGlmIHdyb25nLCBidXQgdGhhdCdzIG9rYXkgc2luY2UgdGhlIGZ1bmN0 aW9uIHdvdWxkCkBAIC01MzAyLDEzICs1MjM5LDYgQEAgaW5saW5lX3NldF9yZXR1cm5pbmdf ZnVuY3Rpb24oUGxhbm5lckluZm8gKnJvb3QsIFJhbmdlVGJsRW50cnkgKnJ0ZSkKIAkgKi8K IAlxdWVyeXRyZWUgPSBsaW5pdGlhbF9ub2RlKFF1ZXJ5LCBxdWVyeXRyZWVfbGlzdCk7CiAK LQkvKgotCSAqIExvb2tzIGdvb2QgLS0tIHN1YnN0aXR1dGUgcGFyYW1ldGVycyBpbnRvIHRo ZSBxdWVyeS4KLQkgKi8KLQlxdWVyeXRyZWUgPSBzdWJzdGl0dXRlX2FjdHVhbF9zcmZfcGFy YW1ldGVycyhxdWVyeXRyZWUsCi0JCQkJCQkJCQkJCQkgZnVuY2Zvcm0tPnByb25hcmdzLAot CQkJCQkJCQkJCQkJIGZleHByLT5hcmdzKTsKLQogCS8qCiAJICogQ29weSB0aGUgbW9kaWZp ZWQgcXVlcnkgb3V0IG9mIHRoZSB0ZW1wb3JhcnkgbWVtb3J5IGNvbnRleHQsIGFuZCBjbGVh bgogCSAqIHVwLgpAQCAtNTMxOSw3ICs1MjQ5LDExMiBAQCBpbmxpbmVfc2V0X3JldHVybmlu Z19mdW5jdGlvbihQbGFubmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAqcnRlKQogCiAJ TWVtb3J5Q29udGV4dERlbGV0ZShteWN4dCk7CiAJZXJyb3JfY29udGV4dF9zdGFjayA9IHNx bGVycmNvbnRleHQucHJldmlvdXM7Ci0JUmVsZWFzZVN5c0NhY2hlKGZ1bmNfdHVwbGUpOwor CisJcmV0dXJuIHF1ZXJ5dHJlZTsKKworCS8qIEhlcmUgaWYgZnVuYyBpcyBub3QgaW5saW5h YmxlOiByZWxlYXNlIHRlbXAgbWVtb3J5IGFuZCByZXR1cm4gTlVMTCAqLworZmFpbDoKKwlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKG15 Y3h0KTsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91czsK KworCXJldHVybiBOVUxMOworfQorCisvKgorICogaW5saW5lX3NldF9yZXR1cm5pbmdfZnVu Y3Rpb24KKyAqCQlBdHRlbXB0IHRvICJpbmxpbmUiIGFuIFNRTCBzZXQtcmV0dXJuaW5nIGZ1 bmN0aW9uIGluIHRoZSBGUk9NIGNsYXVzZS4KKyAqCisgKiAicnRlIiBpcyBhbiBSVEVfRlVO Q1RJT04gcmFuZ2V0YWJsZSBlbnRyeS4gIElmIGl0IHJlcHJlc2VudHMgYSBjYWxsIG9mIGEK KyAqIHNldC1yZXR1cm5pbmcgU1FMIGZ1bmN0aW9uIHRoYXQgY2FuIHNhZmVseSBiZSBpbmxp bmVkLCBleHBhbmQgdGhlIGZ1bmN0aW9uCisgKiBhbmQgcmV0dXJuIHRoZSBzdWJzdGl0dXRl IFF1ZXJ5IHN0cnVjdHVyZS4gIE90aGVyd2lzZSwgcmV0dXJuIE5VTEwuCisgKgorICogV2Ug YXNzdW1lIHRoYXQgdGhlIFJURSdzIGV4cHJlc3Npb24gaGFzIGFscmVhZHkgYmVlbiBwdXQg dGhyb3VnaAorICogZXZhbF9jb25zdF9leHByZXNzaW9ucygpLCB3aGljaCBhbW9uZyBvdGhl ciB0aGluZ3Mgd2lsbCB0YWtlIGNhcmUgb2YKKyAqIGRlZmF1bHQgYXJndW1lbnRzIGFuZCBu YW1lZC1hcmd1bWVudCBub3RhdGlvbi4KKyAqCisgKiBUaGlzIGhhcyBhIGdvb2QgZGVhbCBv ZiBzaW1pbGFyaXR5IHRvIGlubGluZV9mdW5jdGlvbigpLCBidXQgdGhhdCdzCisgKiBmb3Ig dGhlIG5vbi1zZXQtcmV0dXJuaW5nIGNhc2UsIGFuZCB0aGVyZSBhcmUgZW5vdWdoIGRpZmZl cmVuY2VzIHRvCisgKiBqdXN0aWZ5IHNlcGFyYXRlIGZ1bmN0aW9ucy4KKyAqLworUXVlcnkg KgoraW5saW5lX3NldF9yZXR1cm5pbmdfZnVuY3Rpb24oUGxhbm5lckluZm8gKnJvb3QsIFJh bmdlVGJsRW50cnkgKnJ0ZSkKK3sKKwlSYW5nZVRibEZ1bmN0aW9uICpydGZ1bmM7CisJRnVu Y0V4cHIgICAqZmV4cHI7CisJT2lkCQkJZnVuY19vaWQ7CisJSGVhcFR1cGxlCWZ1bmNfdHVw bGU7CisJRm9ybV9wZ19wcm9jIGZ1bmNmb3JtOworCVF1ZXJ5CSAgICpmdW5jcXVlcnk7CisK KwlBc3NlcnQocnRlLT5ydGVraW5kID09IFJURV9GVU5DVElPTik7CisKKwkvKgorCSAqIEl0 IGRvZXNuJ3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBmb3IgYSBTUkYgdG8gcmVmZXIgdG8gaXRz ZWxmIGluIGl0cyBvd24KKwkgKiBGUk9NIGNsYXVzZSwgc2luY2UgdGhhdCBtdXN0IGNhdXNl IGluZmluaXRlIHJlY3Vyc2lvbiBhdCBydW50aW1lLiBJdAorCSAqIHdpbGwgY2F1c2UgdGhp cyBjb2RlIHRvIHJlY3Vyc2UgdG9vLCBzbyBjaGVjayBmb3Igc3RhY2sgb3ZlcmZsb3cuCisJ ICogKFRoZXJlJ3Mgbm8gbmVlZCB0byBkbyBtb3JlLikKKwkgKi8KKwljaGVja19zdGFja19k ZXB0aCgpOworCisJLyogRmFpbCBpZiB0aGUgUlRFIGhhcyBPUkRJTkFMSVRZIC0gd2UgZG9u J3QgaW1wbGVtZW50IHRoYXQgaGVyZS4gKi8KKwlpZiAocnRlLT5mdW5jb3JkaW5hbGl0eSkK KwkJcmV0dXJuIE5VTEw7CisKKwkvKiBGYWlsIGlmIFJURSBpc24ndCBhIHNpbmdsZSwgc2lt cGxlIEZ1bmNFeHByICovCisJaWYgKGxpc3RfbGVuZ3RoKHJ0ZS0+ZnVuY3Rpb25zKSAhPSAx KQorCQlyZXR1cm4gTlVMTDsKKwlydGZ1bmMgPSAoUmFuZ2VUYmxGdW5jdGlvbiAqKSBsaW5p dGlhbChydGUtPmZ1bmN0aW9ucyk7CisKKwlpZiAoIUlzQShydGZ1bmMtPmZ1bmNleHByLCBG dW5jRXhwcikpCisJCXJldHVybiBOVUxMOworCWZleHByID0gKEZ1bmNFeHByICopIHJ0ZnVu Yy0+ZnVuY2V4cHI7CisKKwlmdW5jX29pZCA9IGZleHByLT5mdW5jaWQ7CisKKwkvKgorCSAq IFRoZSBmdW5jdGlvbiBtdXN0IGJlIGRlY2xhcmVkIHRvIHJldHVybiBhIHNldCwgZWxzZSBp bmxpbmluZyB3b3VsZAorCSAqIGNoYW5nZSB0aGUgcmVzdWx0cyBpZiB0aGUgY29udGFpbmVk IFNFTEVDVCBkaWRuJ3QgcmV0dXJuIGV4YWN0bHkgb25lCisJICogcm93LgorCSAqLworCWlm ICghZmV4cHItPmZ1bmNyZXRzZXQpCisJCXJldHVybiBOVUxMOworCisJLyogQ2hlY2sgcGVy bWlzc2lvbiB0byBjYWxsIGZ1bmN0aW9uIChmYWlsIGxhdGVyLCBpZiBub3QpICovCisJaWYg KG9iamVjdF9hY2xjaGVjayhQcm9jZWR1cmVSZWxhdGlvbklkLCBmdW5jX29pZCwgR2V0VXNl cklkKCksIEFDTF9FWEVDVVRFKSAhPSBBQ0xDSEVDS19PSykKKwkJcmV0dXJuIE5VTEw7CisK KwkvKiBDaGVjayB3aGV0aGVyIGEgcGx1Z2luIHdhbnRzIHRvIGhvb2sgZnVuY3Rpb24gZW50 cnkvZXhpdCAqLworCWlmIChGbWdySG9va0lzTmVlZGVkKGZ1bmNfb2lkKSkKKwkJcmV0dXJu IE5VTEw7CisKKwkvKgorCSAqIE9LLCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgZnVuY3Rp b24ncyBwZ19wcm9jIGVudHJ5LgorCSAqLworCWZ1bmNfdHVwbGUgPSBTZWFyY2hTeXNDYWNo ZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShmdW5jX29pZCkpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChmdW5jX3R1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIGZ1bmN0aW9uICV1IiwgZnVuY19vaWQpOworCWZ1bmNmb3JtID0gKEZvcm1f cGdfcHJvYykgR0VUU1RSVUNUKGZ1bmNfdHVwbGUpOworCisJZnVuY3F1ZXJ5ID0gaW5saW5l X3NxbF9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9uKHJvb3QsIHJ0ZSwgcnRmdW5jLCBmZXhwciwK KwkJCQkJCQkJCQkJCSAgZnVuY19vaWQsIGZ1bmNfdHVwbGUsIGZ1bmNmb3JtKTsKKworCWlm ICghZnVuY3F1ZXJ5KQorCQlnb3RvIGZhaWw7CisKKwkvKgorCSAqIFRoZSBzaW5nbGUgY29t bWFuZCBtdXN0IGJlIGEgcGxhaW4gU0VMRUNULgorCSAqLworCWlmICghSXNBKGZ1bmNxdWVy eSwgUXVlcnkpIHx8CisJCWZ1bmNxdWVyeS0+Y29tbWFuZFR5cGUgIT0gQ01EX1NFTEVDVCkK KwkJZ290byBmYWlsOworCisJLyoKKwkgKiBMb29rcyBnb29kIC0tLSBzdWJzdGl0dXRlIHBh cmFtZXRlcnMgaW50byB0aGUgcXVlcnkuCisJICovCisJZnVuY3F1ZXJ5ID0gc3Vic3RpdHV0 ZV9hY3R1YWxfc3JmX3BhcmFtZXRlcnMoZnVuY3F1ZXJ5LAorCQkJCQkJCQkJCQkJIGZ1bmNm b3JtLT5wcm9uYXJncywKKwkJCQkJCQkJCQkJCSBmZXhwci0+YXJncyk7CiAKIAkvKgogCSAq IFdlIGRvbid0IGhhdmUgdG8gZml4IGNvbGxhdGlvbnMgaGVyZSBiZWNhdXNlIHRoZSB1cHBl ciBxdWVyeSBpcyBhbHJlYWR5CkBAIC01MzM2LDE4ICs1MzcxLDE1IEBAIGlubGluZV9zZXRf cmV0dXJuaW5nX2Z1bmN0aW9uKFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpy dGUpCiAJICogV2UgbXVzdCBhbHNvIG5vdGljZSBpZiB0aGUgaW5zZXJ0ZWQgcXVlcnkgYWRk cyBhIGRlcGVuZGVuY3kgb24gdGhlCiAJICogY2FsbGluZyByb2xlIGR1ZSB0byBSTFMgcXVh bHMuCiAJICovCi0JaWYgKHF1ZXJ5dHJlZS0+aGFzUm93U2VjdXJpdHkpCisJaWYgKGZ1bmNx dWVyeS0+aGFzUm93U2VjdXJpdHkpCiAJCXJvb3QtPmdsb2ItPmRlcGVuZHNPblJvbGUgPSB0 cnVlOwogCi0JcmV0dXJuIHF1ZXJ5dHJlZTsKKwlSZWxlYXNlU3lzQ2FjaGUoZnVuY190dXBs ZSk7CisKKwlyZXR1cm4gZnVuY3F1ZXJ5OwogCi0JLyogSGVyZSBpZiBmdW5jIGlzIG5vdCBp bmxpbmFibGU6IHJlbGVhc2UgdGVtcCBtZW1vcnkgYW5kIHJldHVybiBOVUxMICovCiBmYWls OgotCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwotCU1lbW9yeUNvbnRleHREZWxl dGUobXljeHQpOwotCWVycm9yX2NvbnRleHRfc3RhY2sgPSBzcWxlcnJjb250ZXh0LnByZXZp b3VzOwogCVJlbGVhc2VTeXNDYWNoZShmdW5jX3R1cGxlKTsKLQogCXJldHVybiBOVUxMOwog fQogCi0tIAoyLjM5LjUKCg== --------------fmpWOyABkUKksVqmRjmj9S7q Content-Type: text/x-patch; charset=UTF-8; name="v2-0002-Add-SupportRequestInlineSRF.patch" Content-Disposition: attachment; filename="v2-0002-Add-SupportRequestInlineSRF.patch" Content-Transfer-Encoding: base64 RnJvbSBjNDg2NTU2NDBjNTYwNTVlZTVkMTBmZDZmZWI4MDRhODhkN2VlZTI5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiUGF1bCBBLiBKdW5nd2lydGgiIDxwakBpbGx1bWlu YXRlZGNvbXB1dGluZy5jb20+CkRhdGU6IFR1ZSwgMjQgSnVuIDIwMjUgMjE6MzA6MDIgLTA3 MDAKU3ViamVjdDogW1BBVENIIHYyIDIvMl0gQWRkIFN1cHBvcnRSZXF1ZXN0SW5saW5lU1JG CgpJZiBhIHNldC1yZXR1cm5pbmcgZnVuY3Rpb24gaGFzIGFuIGF0dGFjaGVkIHN1cHBvcnQg ZnVuY3Rpb24gdGhhdCBjYW4KaGFuZGxlIFN1cHBvcnRSZXF1ZXN0SW5saW5lU1JGLCB0aGVu IHdlIHJlcGxhY2UgdGhlIEZ1bmNFeHByIHdpdGggYQpRdWVyeSBub2RlIGJ1aWx0IGJ5IHRo ZSBzdXBwb3J0IGZ1bmN0aW9uLiBUaGVuIHRoZSBwbGFubmVyIGNhbiByZXdyaXRlCnRoZSBR dWVyeSBhcyBpZiBpdCB3ZXJlIGZyb20gYSBTUUwtbGFuZ3VhZ2UgZnVuY3Rpb24sIG1lcmdp bmcgaXQgd2l0aAp0aGUgb3V0ZXIgcXVlcnkuCgpBdXRob3I6IFBhdWwgQS4gSnVuZ3dpcnRo IDxwakBpbGx1bWluYXRlZGNvbXB1dGluZy5jb20+Ci0tLQogZG9jL3NyYy9zZ21sL3hmdW5j LnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAxMDEgKysrKysrKysrCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMgICAgICAgICB8ICA2NSArKysrKy0KIHNyYy9p bmNsdWRlL25vZGVzL3N1cHBvcnRub2Rlcy5oICAgICAgICAgICAgIHwgIDMzICsrKwogc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQgfCAyMTIgKysrKysr KysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9yZWdyZXNzLmMgICAgICAgICAgICAg ICAgICAgfCAxMjIgKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVu Y3Rpb25zLnNxbCAgICAgIHwgIDg2ICsrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDYxNCBp bnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC94ZnVuYy5zZ21sIGIvZG9jL3NyYy9zZ21sL3hmdW5jLnNnbWwKaW5kZXggMmQ4MWFmY2U4 Y2IuLmVmNDFjZTQ5ZTY1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwveGZ1bmMuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwveGZ1bmMuc2dtbApAQCAtNDE2Niw2ICs0MTY2LDEwNyBAQCBz dXBwb3J0Zm4oaW50ZXJuYWwpIHJldHVybnMgaW50ZXJuYWwKICAgICBleHByZXNzaW9uIGFu ZCBhbiBhY3R1YWwgZXhlY3V0aW9uIG9mIHRoZSB0YXJnZXQgZnVuY3Rpb24uCiAgICA8L3Bh cmE+CiAKKyAgIDxwYXJhPgorICAgIFNpbWlsYXJseSwgYSA8bGluayBsaW5rZW5kPSJxdWVy aWVzLXRhYmxlZnVuY3Rpb25zIj5zZXQtcmV0dXJuaW5nIGZ1bmN0aW9uPC9saW5rPgorICAg IGNhbiBpbXBsZW1lbnQgPGxpdGVyYWw+U3VwcG9ydFJlcXVlc3RJbmxpbmVTUkY8L2xpdGVy YWw+IHRvIHJldHVybiBhCisgICAgPGxpdGVyYWw+UXVlcnk8L2xpdGVyYWw+IG5vZGUsIHdo aWNoIHRoZSBwbGFubmVyIHdpbGwgdHJ5IHRvIGlubGluZSBpbnRvCisgICAgdGhlIG91dGVy IHF1ZXJ5LCBqdXN0IGFzIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4g aW5saW5lcworICAgIFNRTCBmdW5jdGlvbnMuICBOb3JtYWxsbHkgb25seSBTUUwgZnVuY3Rp b25zIGNhbiBiZSBpbmxpbmVkLCBidXQgdGhpcyBzdXBwb3J0CisgICAgcmVxdWVzdCBhbGxv d3MgYSBmdW5jdGlvbiBpbiA8bGluayBsaW5rZW5kPSJwbHBnc3FsIj5QTC9wZ1NRTDwvbGlu az4KKyAgICBvciBhbm90aGVyIGxhbmd1YWdlIHRvIGJ1aWxkIGEgZHluYW1pYyBTUUwgcXVl cnkgYW5kIGhhdmUgaXQgaW5saW5lZCB0b28uCisgICAgVGhlIDxsaXRlcmFsPlF1ZXJ5PC9s aXRlcmFsPiBub2RlIG11c3QgYmUgYSA8bGl0ZXJhbD5TRUxFQ1Q8L2xpdGVyYWw+IHF1ZXJ5 CisgICAgdGhhdCBoYXMgZ29uZSB0aHJvdWdoIHBhcnNlIGFuYWx5c2lzIGFuZCByZXdyaXRp bmcuCisgICAgWW91IG1heSBpbmNsdWRlIDxsaXRlcmFsPlBhcmFtPC9saXRlcmFsPiBub2Rl cyByZWZlcmVuY2luZyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24ncworICAgIHBhcmFtZXRlcnMs IGFuZCA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHdpbGwgbWFwIHRo b3NlIGFwcHJvcHJpYXRlbHkKKyAgICB0byB0aGUgYXJndW1lbnRzIHBhc3NlZCBieSB0aGUg Y2FsbGVyLgorICAgIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgc3VwcG9ydCBm dW5jdGlvbiB0byByZXR1cm4KKyAgICBhIG5vZGUgdGhhdCBtYXRjaGVzIHRoZSBwYXJlbnQg ZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbi4KKyAgICBXZSBtYWtlIG5vIGd1YXJhbnRlZSB0 aGF0IDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gd2lsbAorICAgIG5l dmVyIGNhbGwgdGhlIHRhcmdldCBmdW5jdGlvbiBpbiBjYXNlcyB0aGF0IHRoZSBzdXBwb3J0 IGZ1bmN0aW9uIGNvdWxkCisgICAgc2ltcGxpZnkuICBGdW5jdGlvbnMgY2FsbGVkIGluIDxs aXRlcmFsPlNFTEVDVDwvbGl0ZXJhbD4gYXJlIG5vdCBzaW1wbGlmaWVkLgorICAgIE9yIGlm IHRoZSA8bGl0ZXJhbD5SYW5nZVRibEVudHJ5PC9saXRlcmFsPiBoYXMgbW9yZSB0aGFuIG9u ZQorICAgIDxsaXRlcmFsPlJhbmdlVGJsRnVuY3Rpb248L2xpdGVyYWw+IChzdWNoIGFzIHdo ZW4gdXNpbmcKKyAgICA8bGl0ZXJhbD5ST1dTIEZST008L2xpdGVyYWw+KSwgdGhlIGZ1bmN0 aW9uIHdpbGwgbm90IGJlIHNpbXBsaWZpZWQuCisgICAgRW5zdXJlIHJpZ29yb3VzIGVxdWl2 YWxlbmNlIGJldHdlZW4gdGhlIHNpbXBsaWZpZWQgZXhwcmVzc2lvbiBhbmQgYW4gYWN0dWFs CisgICAgZXhlY3V0aW9uIG9mIHRoZSB0YXJnZXQgZnVuY3Rpb24uCisgICA8L3BhcmE+CisK KyAgIDxwYXJhPgorICAgIE9uZSB3YXkgdG8gaW1wbGVtZW50IGEgPGxpdGVyYWw+U3VwcG9y dFJlcXVlc3RJbmxpbmVTUkY8L2xpdGVyYWw+IHN1cHBvcnQgZnVuY3Rpb24KKyAgICBpcyB0 byBidWlsZCBhIFNRTCBzdHJpbmcgdGhlbiBwYXJzZSBpdCB3aXRoIDxsaXRlcmFsPnBnX3Bh cnNlX3F1ZXJ5PC9saXRlcmFsPi4KKyAgICBUaGUgb3V0bGluZSBvZiBzdWNoIGEgZnVuY3Rp b24gbWlnaHQgbG9vayBsaWtlIHRoaXM6Cis8cHJvZ3JhbWxpc3Rpbmc+CitQR19GVU5DVElP Tl9JTkZPX1YxKG15X3N1cHBvcnRfZnVuY3Rpb24pOworRGF0dW0KK215X3N1cHBvcnRfZnVu Y3Rpb24oUEdfRlVOQ1RJT05fQVJHUykKK3sKKyAgICBOb2RlICAgICAgICAgICAgICAgICAg ICAqcmF3cmVxID0gKE5vZGUgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisgICAgU3VwcG9y dFJlcXVlc3RJbmxpbmVTUkYgKnJlcQorICAgIFJhbmdlVGJsRnVuY3Rpb24gICAgICAgICpy dGZ1bmM7CisgICAgRnVuY0V4cHIgICAgICAgICAgICAgICAgKmV4cHI7CisgICAgUXVlcnkg ICAgICAgICAgICAgICAgICAgKnF1ZXJ5dHJlZTsKKyAgICBTdHJpbmdJbmZvRGF0YSAgICAg ICAgICAgc3FsOworICAgIEhlYXBUdXBsZSAgICAgICAgICAgICAgICBmdW5jX3R1cGxlOwor ICAgIFNRTEZ1bmN0aW9uUGFyc2VJbmZvUHRyICBwaW5mbzsKKyAgICBMaXN0ICAgICAgICAg ICAgICAgICAgICAqcmF3X3BhcnNldHJlZV9saXN0OworCisgICAgLyogUmV0dXJuIGlmIGl0 J3Mgbm90IGEgdHlwZSB3ZSBoYW5kbGUuICovCisgICAgaWYgKCFJc0EocmF3cmVxLCBTdXBw b3J0UmVxdWVzdElubGluZVNSRikpCisgICAgICAgIFBHX1JFVFVSTl9QT0lOVEVSKE5VTEwp OworCisgICAgLyogR2V0IHRoaW5ncyB3ZSBuZWVkIG9mZiB0aGUgc3VwcG9ydCByZXF1ZXN0 IG5vZGUuICovCisgICAgcmVxID0gKFN1cHBvcnRSZXF1ZXN0SW5saW5lU1JGICopIHJhd3Jl cTsKKyAgICBydGZ1bmMgPSByZXEtPnJ0ZnVuYzsKKyAgICBleHByID0gKEZ1bmNFeHByICop IHJ0ZnVuYy0+ZnVuY2V4cHI7CisKKyAgICAvKiBHZW5lcmF0ZSB0aGUgU1FMIHN0cmluZy4g Ki8KKyAgICBpbml0U3RyaW5nSW5mbygmYW1wO3NxbCk7CisgICAgYXBwZW5kU3RyaW5nSW5m bygmYW1wO3NxbCwgIlNFTEVDVCAuLi4iKTsKKworICAgIC8qIEJ1aWxkIGEgU1FMRnVuY3Rp b25QYXJzZUluZm8uICovCisgICAgZnVuY190dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShQUk9D T0lELCBPYmplY3RJZEdldERhdHVtKGV4cHItPmZ1bmNpZCkpOworICAgIGlmICghSGVhcFR1 cGxlSXNWYWxpZChmdW5jX3R1cGxlKSkKKyAgICB7CisgICAgICAgIGVyZXBvcnQoV0FSTklO RywgKGVycm1zZygiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZnVuY3Rpb24gJXUiLCBleHBy LT5mdW5jaWQpKSk7CisgICAgICAgIFBHX1JFVFVSTl9QT0lOVEVSKE5VTEwpOworICAgIH0K KyAgICBwaW5mbyA9IHByZXBhcmVfc3FsX2ZuX3BhcnNlX2luZm8oZnVuY190dXBsZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5vZGUgKikgZXhwciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwci0+aW5wdXRjb2xsaWQp OworICAgIFJlbGVhc2VTeXNDYWNoZShmdW5jX3R1cGxlKTsKKworICAgIC8qIFBhcnNlIHRo ZSBTUUwuICovCisgICAgcmF3X3BhcnNldHJlZV9saXN0ID0gcGdfcGFyc2VfcXVlcnkoc3Fs LmRhdGEpOworICAgIGlmIChsaXN0X2xlbmd0aChyYXdfcGFyc2V0cmVlX2xpc3QpICE9IDEp CisgICAgeworICAgICAgICBlcmVwb3J0KFdBUk5JTkcsIChlcnJtc2coIm15X3N1cHBvcnRf ZnVuYyBwYXJzZWQgdG8gbW9yZSB0aGFuIG9uZSBub2RlIikpKTsKKyAgICAgICAgUEdfUkVU VVJOX1BPSU5URVIoTlVMTCk7CisgICAgfQorCisgICAgLyogQW5hbHl6ZSB0aGUgcGFyc2Ug dHJlZSBhcyBpZiBpdCB3ZXJlIGEgU1FMLWxhbmd1YWdlIGJvZHkuICovCisgICAgcXVlcnl0 cmVlX2xpc3QgPSBwZ19hbmFseXplX2FuZF9yZXdyaXRlX3dpdGhjYihsaW5pdGlhbChyYXdf cGFyc2V0cmVlX2xpc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3FsLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoUGFyc2VyU2V0dXBIb29rKSBzcWxfZm5fcGFyc2Vy X3NldHVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGluZm8sIE5VTEwpOworICAgIGlmIChsaXN0X2xlbmd0aChxdWVyeXRyZWVfbGlz dCkgIT0gMSkKKyAgICB7CisgICAgICAgIGVyZXBvcnQoV0FSTklORywgKGVycm1zZygibXlf c3VwcG9ydF9mdW5jIHJld3JvdGUgdG8gbW9yZSB0aGFuIG9uZSBub2RlIikpKTsKKyAgICAg ICAgUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisgICAgfQorCisgICAgcXVlcnl0cmVlID0g bGluaXRpYWwocXVlcnl0cmVlX2xpc3QpOworICAgIGlmICghSXNBKHF1ZXJ5dHJlZSwgUXVl cnkpKQorICAgIHsKKyAgICAgICAgZXJlcG9ydChXQVJOSU5HLCAoZXJybXNnKCJteV9zdXBw b3J0X2Z1bmMgZGlkbid0IHBhcnNlIHRvIGEgUXVlcnkiKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgZXJyZGV0YWlsKCJHb3QgdGhpcyBpbnN0ZWFkOiAlcyIsIG5vZGVUb1N0cmlu ZyhxdWVyeXRyZWUpKSkpOworICAgICAgICBQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKKyAg ICB9CisKKyAgICBQR19SRVRVUk5fUE9JTlRFUihxdWVyeXRyZWUpOworfQorPC9wcm9ncmFt bGlzdGluZz4KKyAgIDwvcGFyYT4KKwogICAgPHBhcmE+CiAgICAgRm9yIHRhcmdldCBmdW5j dGlvbnMgdGhhdCByZXR1cm4gPHR5cGU+Ym9vbGVhbjwvdHlwZT4sIGl0IGlzIG9mdGVuIHVz ZWZ1bCB0byBlc3RpbWF0ZQogICAgIHRoZSBmcmFjdGlvbiBvZiByb3dzIHRoYXQgd2lsbCBi ZSBzZWxlY3RlZCBieSBhIDxsaXRlcmFsPldIRVJFPC9saXRlcmFsPiBjbGF1c2UgdXNpbmcg dGhhdApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCmluZGV4IGEwZGM1ZGZj ZDYxLi5jOTMwNGMyYjhmYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvY2xhdXNlcy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMu YwpAQCAtNTA0OCw2ICs1MDQ4LDUwIEBAIGV2YWx1YXRlX2V4cHIoRXhwciAqZXhwciwgT2lk IHJlc3VsdF90eXBlLCBpbnQzMiByZXN1bHRfdHlwbW9kLAogfQogCiAKKy8qCisgKiBpbmxp bmVfc2V0X3JldHVybmluZ19mdW5jdGlvbl93aXRoX3N1cHBvcnQKKyAqCisgKiBUaGlzIGlt cGxlbWVudHMgaW5saW5lX3NldF9yZXR1cm5pbmdfZnVuY3Rpb24gZm9yIGZ1bmN0aW9ucyB3 aXRoCisgKiBhIHN1cHBvcnQgZnVuY3Rpb24gdGhhdCBjYW4gaGFuZGxlIFN1cHBvcnRSZXF1 ZXN0SW5saW5lU1JGLgorICogV2UgbGV0IHRoZSBzdXBwb3J0IGZ1bmN0aW9uIG1ha2UgaXRz IG93biBkZWNpc2lvbnMgYWJvdXQgd2hhdCBpdCBjYW4KKyAqIGhhbmRsZS4gIEZvciBpbnN0 YW5jZSB3ZSBkb24ndCBmb3JiaWQgYSBWT0xBVElMRSBmdW5jdGlvbiBvciB2b2xhdGlsZQor ICogYXJndW1lbnRzLgorICovCitzdGF0aWMgUXVlcnkgKgoraW5saW5lX3NldF9yZXR1cm5p bmdfZnVuY3Rpb25fd2l0aF9zdXBwb3J0KFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVu dHJ5ICpydGUsCisJCQkJCQkJCQkJICAgUmFuZ2VUYmxGdW5jdGlvbiAqcnRmdW5jLAorCQkJ CQkJCQkJCSAgIEZ1bmNFeHByICpmZXhwciwgRm9ybV9wZ19wcm9jIGZ1bmNmb3JtKQorewor CVN1cHBvcnRSZXF1ZXN0SW5saW5lU1JGIHJlcTsKKwlOb2RlCSAgICpuZXdub2RlOworCisJ LyogSXQgbXVzdCBoYXZlIGEgc3VwcG9ydCBmdW5jdGlvbi4gKi8KKwlBc3NlcnQoZnVuY2Zv cm0tPnByb3N1cHBvcnQpOworCisJcmVxLnJvb3QgPSByb290OworCXJlcS50eXBlID0gVF9T dXBwb3J0UmVxdWVzdElubGluZVNSRjsKKwlyZXEucnRmdW5jID0gcnRmdW5jOworCXJlcS5w cm9jID0gZnVuY2Zvcm07CisKKwkvKgorCSAqIFhYWDogd3JhcCB0aGlzIGluIGl0cyBvd24g bWVtb3J5IGNvbnRleHQsIGFzCisJICogaW5saW5lX3NxbF9zZXRfcmV0dXJuaW5nX2Z1bmN0 aW9uIGRvZXMgYmVsb3c/CisJICovCisJbmV3bm9kZSA9IChOb2RlICopCisJCURhdHVtR2V0 UG9pbnRlcihPaWRGdW5jdGlvbkNhbGwxKGZ1bmNmb3JtLT5wcm9zdXBwb3J0LAorCQkJCQkJ CQkJCSBQb2ludGVyR2V0RGF0dW0oJnJlcSkpKTsKKworCWlmICghbmV3bm9kZSkKKwkJcmV0 dXJuIE5VTEw7CisKKwlpZiAoIUlzQShuZXdub2RlLCBRdWVyeSkpCisJCWVsb2coRVJST1Is CisJCQkgIkdvdCB1bmV4cGVjdGVkIG5vZGUgdHlwZSAlZCBmcm9tICVzIGZvciBmdW5jdGlv biAlcyIsCisJCQkgbmV3bm9kZS0+dHlwZSwgIlN1cHBvcnRSZXF1ZXN0SW5saW5lU1JGIiwg TmFtZVN0cihmdW5jZm9ybS0+cHJvbmFtZSkpOworCisJcmV0dXJuIChRdWVyeSAqKSBuZXdu b2RlOworfQorCiAvKgogICogaW5saW5lX3NxbF9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9uCiAg KgpAQCAtNTI2MywxMCArNTMwNywxMCBAQCBmYWlsOgogCiAvKgogICogaW5saW5lX3NldF9y ZXR1cm5pbmdfZnVuY3Rpb24KLSAqCQlBdHRlbXB0IHRvICJpbmxpbmUiIGFuIFNRTCBzZXQt cmV0dXJuaW5nIGZ1bmN0aW9uIGluIHRoZSBGUk9NIGNsYXVzZS4KKyAqCQlBdHRlbXB0IHRv ICJpbmxpbmUiIGEgc2V0LXJldHVybmluZyBmdW5jdGlvbiBpbiB0aGUgRlJPTSBjbGF1c2Uu CiAgKgogICogInJ0ZSIgaXMgYW4gUlRFX0ZVTkNUSU9OIHJhbmdldGFibGUgZW50cnkuICBJ ZiBpdCByZXByZXNlbnRzIGEgY2FsbCBvZiBhCi0gKiBzZXQtcmV0dXJuaW5nIFNRTCBmdW5j dGlvbiB0aGF0IGNhbiBzYWZlbHkgYmUgaW5saW5lZCwgZXhwYW5kIHRoZSBmdW5jdGlvbgor ICogc2V0LXJldHVybmluZyBmdW5jdGlvbiB0aGF0IGNhbiBzYWZlbHkgYmUgaW5saW5lZCwg ZXhwYW5kIHRoZSBmdW5jdGlvbgogICogYW5kIHJldHVybiB0aGUgc3Vic3RpdHV0ZSBRdWVy eSBzdHJ1Y3R1cmUuICBPdGhlcndpc2UsIHJldHVybiBOVUxMLgogICoKICAqIFdlIGFzc3Vt ZSB0aGF0IHRoZSBSVEUncyBleHByZXNzaW9uIGhhcyBhbHJlYWR5IGJlZW4gcHV0IHRocm91 Z2gKQEAgLTUyODUsNyArNTMyOSw3IEBAIGlubGluZV9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9u KFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpydGUpCiAJT2lkCQkJZnVuY19v aWQ7CiAJSGVhcFR1cGxlCWZ1bmNfdHVwbGU7CiAJRm9ybV9wZ19wcm9jIGZ1bmNmb3JtOwot CVF1ZXJ5CSAgICpmdW5jcXVlcnk7CisJUXVlcnkJICAgKmZ1bmNxdWVyeSA9IE5VTEw7CiAK IAlBc3NlcnQocnRlLT5ydGVraW5kID09IFJURV9GVU5DVElPTik7CiAKQEAgLTUzMzYsOCAr NTM4MCwxOSBAQCBpbmxpbmVfc2V0X3JldHVybmluZ19mdW5jdGlvbihQbGFubmVySW5mbyAq cm9vdCwgUmFuZ2VUYmxFbnRyeSAqcnRlKQogCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgZnVuY3Rpb24gJXUiLCBmdW5jX29pZCk7CiAJZnVuY2Zvcm0gPSAoRm9y bV9wZ19wcm9jKSBHRVRTVFJVQ1QoZnVuY190dXBsZSk7CiAKLQlmdW5jcXVlcnkgPSBpbmxp bmVfc3FsX3NldF9yZXR1cm5pbmdfZnVuY3Rpb24ocm9vdCwgcnRlLCBydGZ1bmMsIGZleHBy LAotCQkJCQkJCQkJCQkJICBmdW5jX29pZCwgZnVuY190dXBsZSwgZnVuY2Zvcm0pOworCS8q CisJICogSWYgdGhlIGZ1bmN0aW9uIGhhcyBhbiBhdHRhY2hlZCBzdXBwb3J0IGZ1bmN0aW9u IHRoYXQgY2FuIGhhbmRsZQorCSAqIFN1cHBvcnRSZXF1ZXN0SW5saW5lU1JGLCB0aGVuIGF0 dGVtcHQgdG8gaW5saW5lIHdpdGggdGhhdC4gUmV0dXJuIHRoZQorCSAqIHJlc3VsdCBpZiB3 ZSBnZXQgb25lLCBvdGhlcndpc2UgcHJvY2VlZC4KKwkgKi8KKwlpZiAoZnVuY2Zvcm0tPnBy b3N1cHBvcnQpCisJCWZ1bmNxdWVyeSA9IGlubGluZV9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9u X3dpdGhfc3VwcG9ydChyb290LCBydGUsIHJ0ZnVuYywgZmV4cHIsCisJCQkJCQkJCQkJCQkJ CQkgICBmdW5jZm9ybSk7CisKKwkvKiBUcnkgdG8gaW5saW5lIGF1dG9tYXRpY2FsbHkgKi8K KwlpZiAoIWZ1bmNxdWVyeSkKKwkJZnVuY3F1ZXJ5ID0gaW5saW5lX3NxbF9zZXRfcmV0dXJu aW5nX2Z1bmN0aW9uKHJvb3QsIHJ0ZSwgcnRmdW5jLCBmZXhwciwKKwkJCQkJCQkJCQkJCQkg IGZ1bmNfb2lkLCBmdW5jX3R1cGxlLCBmdW5jZm9ybSk7CiAKIAlpZiAoIWZ1bmNxdWVyeSkK IAkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvc3VwcG9ydG5v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9zdXBwb3J0bm9kZXMuaAppbmRleCA5YzA0N2Nj NDAxYi4uMjAxNmU4ZGVmNjUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3N1cHBv cnRub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3N1cHBvcnRub2Rlcy5oCkBAIC0z Myw2ICszMyw3IEBACiAjaWZuZGVmIFNVUFBPUlROT0RFU19ICiAjZGVmaW5lIFNVUFBPUlRO T0RFU19ICiAKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKICNpbmNsdWRlICJub2Rl cy9wbGFubm9kZXMuaCIKIAogc3RydWN0IFBsYW5uZXJJbmZvOwkJCQkvKiBhdm9pZCBpbmNs dWRpbmcgcGF0aG5vZGVzLmggaGVyZSAqLwpAQCAtNjksNiArNzAsMzggQEAgdHlwZWRlZiBz dHJ1Y3QgU3VwcG9ydFJlcXVlc3RTaW1wbGlmeQogCUZ1bmNFeHByICAgKmZjYWxsOwkJCS8q IEZ1bmN0aW9uIGNhbGwgdG8gYmUgc2ltcGxpZmllZCAqLwogfSBTdXBwb3J0UmVxdWVzdFNp bXBsaWZ5OwogCisvKgorICogVGhlIElubGluZVNSRiByZXF1ZXN0IGFsbG93cyB0aGUgc3Vw cG9ydCBmdW5jdGlvbiB0byBwZXJmb3JtIHBsYW4tdGltZQorICogc2ltcGxpZmljYXRpb24g b2YgYSBjYWxsIHRvIGl0cyB0YXJnZXQgc2V0LXJldHVybmluZyBmdW5jdGlvbi4gRm9yCisg KiBleGFtcGxlIGEgUEwvcGdTUUwgZnVuY3Rpb24gY291bGQgYnVpbGQgYSBkeW5hbWljIFNR TCBxdWVyeSBhbmQgZXhlY3V0ZSBpdC4KKyAqIE5vcm1hbGx5IG9ubHkgU1FMIGZ1bmN0aW9u cyBjYW4gYmUgaW5saW5lZCwgYnV0IHdpdGggdGhpcyBzdXBwb3J0IGZ1bmN0aW9uCisgKiB0 aGUgZHluYW1pYyBxdWVyeSBjYW4gYmUgaW5saW5lZCBhcyB3ZWxsLgorICoKKyAqIFRoZSBw bGFubmVyJ3MgUGxhbm5lckluZm8gInJvb3QiIGlzIHR5cGljYWxseSBub3QgbmVlZGVkLCBi dXQgY2FuIGJlCisgKiBjb25zdWx0ZWQgaWYgaXQncyBuZWNlc3NhcnkgdG8gb2J0YWluIGlu Zm8gYWJvdXQgVmFycyBwcmVzZW50IGluCisgKiB0aGUgZ2l2ZW4gbm9kZSB0cmVlLiAgQmV3 YXJlIHRoYXQgcm9vdCBjb3VsZCBiZSBOVUxMIGluIHNvbWUgdXNhZ2VzLgorICoKKyAqICJy dGZ1bmMiIHdpbGwgYmUgYSBSYW5nZVRibEZ1bmN0aW9uIG5vZGUgZm9yIHRoZSBmdW5jdGlv biBiZWluZyByZXBsYWNlZC4KKyAqIFRoZSBzdXBwb3J0IGZ1bmN0aW9uIGlzIG9ubHkgY2Fs bGVkIGlmIHJ0ZnVuYy0+ZnVuY3Rpb25zIGNvbnRhaW5zIGEKKyAqIHNpbmdsZSBGdW5jRXhw ciBub2RlLiAoUk9XUyBGUk9NIGlzIG9uZSB3YXkgdG8gZ2V0IG1vcmUgdGhhbiBvbmUuKQor ICoKKyAqICJwcm9jIiB3aWxsIGJlIHRoZSBGb3JtX3BnX3Byb2MgcmVjb3JkIGZvciB0aGUg ZnVuY3Rpb24gYmVpbmcgcmVwbGFjZWQuCisgKgorICogVGhlIHJlc3VsdCBzaG91bGQgYmUg YSBzZW1hbnRpY2FsbHktZXF1aXZhbGVudCB0cmFuc2Zvcm1lZCBub2RlIHRyZWUsCisgKiBv ciBOVUxMIGlmIG5vIHNpbXBsaWZpY2F0aW9uIGNvdWxkIGJlIHBlcmZvcm1lZC4gIEl0IHNo b3VsZCBiZSBhbGxvY2F0ZWQKKyAqIGluIHRoZSBDdXJyZW50TWVtb3J5Q29udGV4dC4gRG8g Km5vdCogcmV0dXJuIG9yIG1vZGlmeSB0aGUgRnVuY0V4cHIgbm9kZQorICogdHJlZSwgYXMg aXQgaXNuJ3QgcmVhbGx5IGEgc2VwYXJhdGVseSBhbGxvY2F0ZWQgTm9kZS4gIEJ1dCBpdCdz IG9rYXkgdG8KKyAqIHVzZSBpdHMgYXJncywgb3IgcGFydHMgb2YgaXQsIGluIHRoZSByZXN1 bHQgdHJlZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU3VwcG9ydFJlcXVlc3RJbmxpbmVTUkYK K3sKKwlOb2RlVGFnCQl0eXBlOworCisJc3RydWN0IFBsYW5uZXJJbmZvICpyb290OwkvKiBQ bGFubmVyJ3MgaW5mcmFzdHJ1Y3R1cmUgKi8KKwlSYW5nZVRibEZ1bmN0aW9uICpydGZ1bmM7 CS8qIEZ1bmN0aW9uIGNhbGwgdG8gYmUgc2ltcGxpZmllZCAqLworCUZvcm1fcGdfcHJvYyBw cm9jOwkJCS8qIEZ1bmN0aW9uIGRlZmluaXRpb24gKi8KK30JCQlTdXBwb3J0UmVxdWVzdElu bGluZVNSRjsKKwogLyoKICAqIFRoZSBTZWxlY3Rpdml0eSByZXF1ZXN0IGFsbG93cyB0aGUg c3VwcG9ydCBmdW5jdGlvbiB0byBwcm92aWRlIGEKICAqIHNlbGVjdGl2aXR5IGVzdGltYXRl IGZvciBhIGZ1bmN0aW9uIGFwcGVhcmluZyBhdCB0b3AgbGV2ZWwgb2YgYSBXSEVSRQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21pc2NfZnVuY3Rpb25zLm91dAppbmRleCBj M2IyYjlkODYwMy4uMTMzODhlYmM3MTUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0CkBAIC02MDEsNiArNjAxLDExIEBAIENSRUFURSBG VU5DVElPTiB0ZXN0X3N1cHBvcnRfZnVuYyhpbnRlcm5hbCkKICAgICBSRVRVUk5TIGludGVy bmFsCiAgICAgQVMgOidyZWdyZXNzbGliJywgJ3Rlc3Rfc3VwcG9ydF9mdW5jJwogICAgIExB TkdVQUdFIEMgU1RSSUNUOworLS0gV2l0aCBhIHN1cHBvcnQgZnVuY3Rpb24gdGhhdCBpbmxp bmVzIFNSRnMKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2lubGluZV9zcmZfc3VwcG9ydF9mdW5j KGludGVybmFsKQorICAgIFJFVFVSTlMgaW50ZXJuYWwKKyAgICBBUyA6J3JlZ3Jlc3NsaWIn LCAndGVzdF9pbmxpbmVfc3JmX3N1cHBvcnRfZnVuYycKKyAgICBMQU5HVUFHRSBDIFNUUklD VDsKIEFMVEVSIEZVTkNUSU9OIG15X2ludF9lcShpbnQsIGludCkgU1VQUE9SVCB0ZXN0X3N1 cHBvcnRfZnVuYzsKIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCAqIEZST00gdGVuazEg YSBKT0lOIHRlbmsxIGIgT04gYS51bmlxdWUxID0gYi51bmlxdWUxCkBAIC03NzcsNiArNzgy LDIxMyBAQCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUpOwogIEZ1bmN0aW9uIFNjYW4gb24g Z2VuZXJhdGVfc2VyaWVzIGcgIChjb3N0PU4uLk4gcm93cz0xMDAwIHdpZHRoPU4pCiAoMSBy b3cpCiAKKy0tCistLSBUZXN0IGlubGluaW5nIFBML3BnU1FMIGZ1bmN0aW9ucworLS0KKy0t IFJFVFVSTlMgU0VUT0YgVEVYVDoKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGZvb19m cm9tX2Jhcihjb2xuYW1lIFRFWFQsIHRhYmxlbmFtZSBURVhULCBmaWx0ZXIgVEVYVCkKK1JF VFVSTlMgU0VUT0YgVEVYVAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJGZ1bmN0aW9uJAorREVD TEFSRQorICBzcWwgVEVYVDsKK0JFR0lOCisgIHNxbCA6PSBmb3JtYXQoJ1NFTEVDVCAlSTo6 dGV4dCBGUk9NICVJJywgY29sbmFtZSwgdGFibGVuYW1lKTsKKyAgSUYgZmlsdGVyIElTIE5P VCBOVUxMIFRIRU4KKyAgICBzcWwgOj0gQ09OQ0FUKHNxbCwgZm9ybWF0KCcgV0hFUkUgJUk6 OnRleHQgPSAkMScsIGNvbG5hbWUpKTsKKyAgRU5EIElGOworICBSRVRVUk4gUVVFUlkgRVhF Q1VURSBzcWwgVVNJTkcgZmlsdGVyOworRU5EOworJGZ1bmN0aW9uJCBTVEFCTEUgTEVBS1BS T09GOworU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVM TCk7CisgICBmb29fZnJvbV9iYXIgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tCisgZG9oIQor IGhpIGRlIGhvIG5laWdoYm9yCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGZvb19mcm9t X2JhcignZjEnLCAndGV4dF90YmwnLCAnZG9oIScpOworIGZvb19mcm9tX2JhciAKKy0tLS0t LS0tLS0tLS0tCisgZG9oIQorKDEgcm93KQorCitFWFBMQUlOIFNFTEVDVCAqIEZST00gZm9v X2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsIE5VTEwpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEZ1bmN0aW9uIFNjYW4gb24gZm9vX2Zyb21fYmFyICAoY29z dD0wLjI1Li4xMC4yNSByb3dzPTEwMDAgd2lkdGg9MzIpCisoMSByb3cpCisKK0VYUExBSU4g U0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgJ2RvaCEnKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGdW5jdGlvbiBTY2FuIG9u IGZvb19mcm9tX2JhciAgKGNvc3Q9MC4yNS4uMTAuMjUgcm93cz0xMDAwIHdpZHRoPTMyKQor KDEgcm93KQorCitBTFRFUiBGVU5DVElPTiBmb29fZnJvbV9iYXIoVEVYVCwgVEVYVCwgVEVY VCkgU1VQUE9SVCB0ZXN0X2lubGluZV9zcmZfc3VwcG9ydF9mdW5jOworU0VMRUNUICogRlJP TSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVMTCk7CisgICBmb29fZnJvbV9i YXIgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tCisgZG9oIQorIGhpIGRlIGhvIG5laWdoYm9y CisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90 YmwnLCAnZG9oIScpOworIGZvb19mcm9tX2JhciAKKy0tLS0tLS0tLS0tLS0tCisgZG9oIQor KDEgcm93KQorCitFWFBMQUlOIFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0 ZXh0X3RibCcsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiB0ZXh0X3RibCAgKGNv c3Q9MC4wMC4uMS4wMiByb3dzPTIgd2lkdGg9MzIpCisoMSByb3cpCisKK0VYUExBSU4gU0VM RUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgJ2RvaCEnKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU2VxIFNjYW4gb24gdGV4dF90YmwgIChjb3N0PTAuMDAuLjEuMDIgcm93cz0x IHdpZHRoPTMyKQorICAgRmlsdGVyOiAoZjEgPSAnZG9oISc6OnRleHQpCisoMiByb3dzKQor CitEUk9QIEZVTkNUSU9OIGZvb19mcm9tX2JhcjsKKy0tIFJFVFVSTlMgU0VUT0YgUkVDT1JE OgorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZm9vX2Zyb21fYmFyKGNvbG5hbWUgVEVY VCwgdGFibGVuYW1lIFRFWFQsIGZpbHRlciBURVhUKQorUkVUVVJOUyBTRVRPRiBSRUNPUkQK K0xBTkdVQUdFIHBscGdzcWwKK0FTICRmdW5jdGlvbiQKK0RFQ0xBUkUKKyAgc3FsIFRFWFQ7 CitCRUdJTgorICBzcWwgOj0gZm9ybWF0KCdTRUxFQ1QgJUk6OnRleHQgRlJPTSAlSScsIGNv bG5hbWUsIHRhYmxlbmFtZSk7CisgIElGIGZpbHRlciBJUyBOT1QgTlVMTCBUSEVOCisgICAg c3FsIDo9IENPTkNBVChzcWwsIGZvcm1hdCgnIFdIRVJFICVJOjp0ZXh0ID0gJDEnLCBjb2xu YW1lKSk7CisgIEVORCBJRjsKKyAgUkVUVVJOIFFVRVJZIEVYRUNVVEUgc3FsIFVTSU5HIGZp bHRlcjsKK0VORDsKKyRmdW5jdGlvbiQgU1RBQkxFIExFQUtQUk9PRjsKK1NFTEVDVCAqIEZS T00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsIE5VTEwpIEFTIGJhcihmb28gVEVY VCk7CisgICAgICAgIGZvbyAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tCisgZG9oIQor IGhpIGRlIGhvIG5laWdoYm9yCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGZvb19mcm9t X2JhcignZjEnLCAndGV4dF90YmwnLCAnZG9oIScpIEFTIGJhcihmb28gVEVYVCk7CisgZm9v ICAKKy0tLS0tLQorIGRvaCEKKygxIHJvdykKKworRVhQTEFJTiBTRUxFQ1QgKiBGUk9NIGZv b19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCBOVUxMKSBBUyBiYXIoZm9vIFRFWFQpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRnVuY3Rpb24g U2NhbiBvbiBmb29fZnJvbV9iYXIgYmFyICAoY29zdD0wLjI1Li4xMC4yNSByb3dzPTEwMDAg d2lkdGg9MzIpCisoMSByb3cpCisKK0VYUExBSU4gU0VMRUNUICogRlJPTSBmb29fZnJvbV9i YXIoJ2YxJywgJ3RleHRfdGJsJywgJ2RvaCEnKSBBUyBiYXIoZm9vIFRFWFQpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRnVuY3Rpb24gU2NhbiBv biBmb29fZnJvbV9iYXIgYmFyICAoY29zdD0wLjI1Li4xMC4yNSByb3dzPTEwMDAgd2lkdGg9 MzIpCisoMSByb3cpCisKK0FMVEVSIEZVTkNUSU9OIGZvb19mcm9tX2JhcihURVhULCBURVhU LCBURVhUKSBTVVBQT1JUIHRlc3RfaW5saW5lX3NyZl9zdXBwb3J0X2Z1bmM7CitTRUxFQ1Qg KiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCBOVUxMKSBBUyBiYXIoZm9v IFRFWFQpOworICAgICAgICBmb28gICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRv aCEKKyBoaSBkZSBobyBuZWlnaGJvcgorKDIgcm93cykKKworU0VMRUNUICogRlJPTSBmb29f ZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgJ2RvaCEnKSBBUyBiYXIoZm9vIFRFWFQpOwor IGZvbyAgCistLS0tLS0KKyBkb2ghCisoMSByb3cpCisKK0VYUExBSU4gU0VMRUNUICogRlJP TSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVMTCkgQVMgYmFyKGZvbyBURVhU KTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gdGV4dF90YmwgIChjb3N0PTAuMDAuLjEuMDIg cm93cz0yIHdpZHRoPTMyKQorKDEgcm93KQorCitFWFBMQUlOIFNFTEVDVCAqIEZST00gZm9v X2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsICdkb2ghJykgQVMgYmFyKGZvbyBURVhUKTsK KyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU2VxIFNjYW4gb24gdGV4dF90YmwgIChjb3N0PTAuMDAuLjEuMDIgcm93 cz0xIHdpZHRoPTMyKQorICAgRmlsdGVyOiAoZjEgPSAnZG9oISc6OnRleHQpCisoMiByb3dz KQorCitEUk9QIEZVTkNUSU9OIGZvb19mcm9tX2JhcjsKKy0tIFJFVFVSTlMgVEFCTEU6CitD UkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmb29fZnJvbV9iYXIoY29sbmFtZSBURVhULCB0 YWJsZW5hbWUgVEVYVCwgZmlsdGVyIFRFWFQpCitSRVRVUk5TIFRBQkxFKGZvbyBURVhUKQor TEFOR1VBR0UgcGxwZ3NxbAorQVMgJGZ1bmN0aW9uJAorREVDTEFSRQorICBzcWwgVEVYVDsK K0JFR0lOCisgIHNxbCA6PSBmb3JtYXQoJ1NFTEVDVCAlSTo6dGV4dCBGUk9NICVJJywgY29s bmFtZSwgdGFibGVuYW1lKTsKKyAgSUYgZmlsdGVyIElTIE5PVCBOVUxMIFRIRU4KKyAgICBz cWwgOj0gQ09OQ0FUKHNxbCwgZm9ybWF0KCcgV0hFUkUgJUk6OnRleHQgPSAkMScsIGNvbG5h bWUpKTsKKyAgRU5EIElGOworICBSRVRVUk4gUVVFUlkgRVhFQ1VURSBzcWwgVVNJTkcgZmls dGVyOworRU5EOworJGZ1bmN0aW9uJCBTVEFCTEUgTEVBS1BST09GOworU0VMRUNUICogRlJP TSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVMTCk7CisgICAgICAgIGZvbyAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tCisgZG9oIQorIGhpIGRlIGhvIG5laWdoYm9y CisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90 YmwnLCAnZG9oIScpOworIGZvbyAgCistLS0tLS0KKyBkb2ghCisoMSByb3cpCisKK0VYUExB SU4gU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVMTCk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRnVuY3Rpb24gU2NhbiBv biBmb29fZnJvbV9iYXIgIChjb3N0PTAuMjUuLjEwLjI1IHJvd3M9MTAwMCB3aWR0aD0zMikK KygxIHJvdykKKworRVhQTEFJTiBTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAn dGV4dF90YmwnLCAnZG9oIScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEZ1bmN0aW9uIFNjYW4gb24gZm9vX2Zyb21fYmFyICAoY29zdD0wLjI1Li4xMC4yNSBy b3dzPTEwMDAgd2lkdGg9MzIpCisoMSByb3cpCisKK0FMVEVSIEZVTkNUSU9OIGZvb19mcm9t X2JhcihURVhULCBURVhULCBURVhUKSBTVVBQT1JUIHRlc3RfaW5saW5lX3NyZl9zdXBwb3J0 X2Z1bmM7CitTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCBO VUxMKTsKKyAgICAgICAgZm9vICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyBkb2gh CisgaGkgZGUgaG8gbmVpZ2hib3IKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gZm9vX2Zy b21fYmFyKCdmMScsICd0ZXh0X3RibCcsICdkb2ghJyk7CisgZm9vICAKKy0tLS0tLQorIGRv aCEKKygxIHJvdykKKworRVhQTEFJTiBTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEn LCAndGV4dF90YmwnLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gdGV4dF90Ymwg IChjb3N0PTAuMDAuLjEuMDIgcm93cz0yIHdpZHRoPTMyKQorKDEgcm93KQorCitFWFBMQUlO IFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsICdkb2ghJyk7 CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHRleHRfdGJsICAoY29zdD0wLjAwLi4xLjAyIHJv d3M9MSB3aWR0aD0zMikKKyAgIEZpbHRlcjogKGYxID0gJ2RvaCEnOjp0ZXh0KQorKDIgcm93 cykKKworRFJPUCBGVU5DVElPTiBmb29fZnJvbV9iYXI7CiAtLSBUZXN0IGZ1bmN0aW9ucyBm b3IgY29udHJvbCBkYXRhCiBTRUxFQ1QgY291bnQoKikgPiAwIEFTIG9rIEZST00gcGdfY29u dHJvbF9jaGVja3BvaW50KCk7CiAgb2sgCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L3JlZ3Jlc3MuYyBiL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcy5jCmluZGV4IDNkYmJhMDY5 MDI0Li42MjZlYzNhMWE3MSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9yZWdyZXNz LmMKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9yZWdyZXNzLmMKQEAgLTI4LDYgKzI4LDcgQEAK ICNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3Ry aWdnZXIuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgorI2luY2x1ZGUgImV4 ZWN1dG9yL2Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL3NwaS5oIgogI2luY2x1 ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgpAQCAtMzksMTEgKzQw LDEzIEBACiAjaW5jbHVkZSAicG9ydC9hdG9taWNzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rl ci9wb3N0bWFzdGVyLmgiCS8qIGZvciBNQVhfQkFDS0VORFMgKi8KICNpbmNsdWRlICJzdG9y YWdlL3NwaW4uaCIKKyNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAjaW5jbHVkZSAidXRp bHMvYXJyYXkuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0 aWxzL2dlb19kZWNscy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVk ZSAidXRpbHMvcmVsLmgiCisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKICNpbmNsdWRl ICJ1dGlscy90eXBjYWNoZS5oIgogCiAjZGVmaW5lIEVYUEVDVF9UUlVFKGV4cHIpCVwKQEAg LTgwMyw2ICs4MDYsMTI1IEBAIHRlc3Rfc3VwcG9ydF9mdW5jKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJUEdfUkVUVVJOX1BPSU5URVIocmV0KTsKIH0KIAorUEdfRlVOQ1RJT05fSU5GT19WMSh0 ZXN0X2lubGluZV9zcmZfc3VwcG9ydF9mdW5jKTsKK0RhdHVtCit0ZXN0X2lubGluZV9zcmZf c3VwcG9ydF9mdW5jKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTm9kZQkgICAqcmF3cmVxID0g KE5vZGUgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisJUXVlcnkJICAgKnF1ZXJ5dHJlZSA9 IE5VTEw7CisKKwlpZiAoSXNBKHJhd3JlcSwgU3VwcG9ydFJlcXVlc3RJbmxpbmVTUkYpKQor CXsKKwkJLyoKKwkJICogQXNzdW1lIHRoYXQgdGhlIHRhcmdldCBpcyBmb29fZnJvbV9iYXI7 IHRoYXQncyBzYWZlIGFzIGxvbmcgYXMgd2UKKwkJICogZG9uJ3QgYXR0YWNoIHRoaXMgdG8g YW55IG90aGVyIHNldC1yZXR1cm5pbmcgZnVuY3Rpb24uCisJCSAqLworCQlTdXBwb3J0UmVx dWVzdElubGluZVNSRiAqcmVxID0gKFN1cHBvcnRSZXF1ZXN0SW5saW5lU1JGICopIHJhd3Jl cTsKKwkJU3RyaW5nSW5mb0RhdGEgc3FsOworCQlSYW5nZVRibEZ1bmN0aW9uICpydGZ1bmMg PSByZXEtPnJ0ZnVuYzsKKwkJRnVuY0V4cHIgICAqZXhwciA9IChGdW5jRXhwciAqKSBydGZ1 bmMtPmZ1bmNleHByOworCQlOb2RlCSAgICpub2RlOworCQlDb25zdAkgICAqYzsKKwkJY2hh cgkgICAqY29sbmFtZTsKKwkJY2hhcgkgICAqdGFibGVuYW1lOworCQlIZWFwVHVwbGUJZnVu Y190dXBsZTsKKwkJU1FMRnVuY3Rpb25QYXJzZUluZm9QdHIgcGluZm87CisJCUxpc3QJICAg KnJhd19wYXJzZXRyZWVfbGlzdDsKKwkJTGlzdAkgICAqcXVlcnl0cmVlX2xpc3Q7CisKKwkJ aWYgKGxpc3RfbGVuZ3RoKGV4cHItPmFyZ3MpICE9IDMpCisJCXsKKwkJCWVyZXBvcnQoV0FS TklORywgKGVycm1zZygidGVzdF9pbmxpbmVfc3JmX3N1cHBvcnRfZnVuYyBjYWxsZWQgd2l0 aCAlZCBhcmdzIGJ1dCBleHBlY3RlZCAzIiwgbGlzdF9sZW5ndGgoZXhwci0+YXJncykpKSk7 CisJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKKwkJfQorCisJCS8qIEdldCBjb2xuYW1l ICovCisJCW5vZGUgPSBsaW5pdGlhbChleHByLT5hcmdzKTsKKwkJaWYgKCFJc0Eobm9kZSwg Q29uc3QpKQorCQl7CisJCQllcmVwb3J0KFdBUk5JTkcsIChlcnJtc2coInRlc3RfaW5saW5l X3NyZl9zdXBwb3J0X2Z1bmMgY2FsbGVkIHdpdGggbm9uLUNvbnN0IHBhcmFtZXRlcnMiKSkp OworCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisJCX0KKworCQljID0gKENvbnN0ICop IG5vZGU7CisJCWlmIChjLT5jb25zdHR5cGUgIT0gVEVYVE9JRCkKKwkJeworCQkJZXJlcG9y dChXQVJOSU5HLCAoZXJybXNnKCJ0ZXN0X2lubGluZV9zcmZfc3VwcG9ydF9mdW5jIGNhbGxl ZCB3aXRoIG5vbi1URVhUIHBhcmFtZXRlcnMiKSkpOworCQkJUEdfUkVUVVJOX1BPSU5URVIo TlVMTCk7CisJCX0KKwkJY29sbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoYy0+Y29uc3R2 YWx1ZSk7CisKKwkJLyogR2V0IHRhYmxlbmFtZSAqLworCQlub2RlID0gbHNlY29uZChleHBy LT5hcmdzKTsKKwkJaWYgKCFJc0Eobm9kZSwgQ29uc3QpKQorCQl7CisJCQllcmVwb3J0KFdB Uk5JTkcsIChlcnJtc2coInRlc3RfaW5saW5lX3NyZl9zdXBwb3J0X2Z1bmMgY2FsbGVkIHdp dGggbm9uLUNvbnN0IHBhcmFtZXRlcnMiKSkpOworCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVM TCk7CisJCX0KKworCQljID0gKENvbnN0ICopIG5vZGU7CisJCWlmIChjLT5jb25zdHR5cGUg IT0gVEVYVE9JRCkKKwkJeworCQkJZXJlcG9ydChXQVJOSU5HLCAoZXJybXNnKCJ0ZXN0X2lu bGluZV9zcmZfc3VwcG9ydF9mdW5jIGNhbGxlZCB3aXRoIG5vbi1URVhUIHBhcmFtZXRlcnMi KSkpOworCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisJCX0KKwkJdGFibGVuYW1lID0g VGV4dERhdHVtR2V0Q1N0cmluZyhjLT5jb25zdHZhbHVlKTsKKworCQlpbml0U3RyaW5nSW5m bygmc3FsKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmc3FsLCAiU0VMRUNUICVzOjp0ZXh0IEZS T00gJXMiLCBxdW90ZV9pZGVudGlmaWVyKGNvbG5hbWUpLCBxdW90ZV9pZGVudGlmaWVyKHRh YmxlbmFtZSkpOworCisJCS8qIEdldCBmaWx0ZXIgaWYgcHJlc2VudCAqLworCQlub2RlID0g bHRoaXJkKGV4cHItPmFyZ3MpOworCQlpZiAoIShJc0Eobm9kZSwgQ29uc3QpICYmICgoQ29u c3QgKikgbm9kZSktPmNvbnN0aXNudWxsKSkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mbygm c3FsLCAiIFdIRVJFICVzOjp0ZXh0ID0gJDMiLCBxdW90ZV9pZGVudGlmaWVyKGNvbG5hbWUp KTsKKwkJfQorCisJCS8qIEJ1aWxkIGEgU1FMRnVuY3Rpb25QYXJzZUluZm8uICovCisJCWZ1 bmNfdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShl eHByLT5mdW5jaWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZ1bmNfdHVwbGUpKQor CQl7CisJCQllcmVwb3J0KFdBUk5JTkcsIChlcnJtc2coImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIGZ1bmN0aW9uICV1IiwgZXhwci0+ZnVuY2lkKSkpOworCQkJUEdfUkVUVVJOX1BPSU5U RVIoTlVMTCk7CisJCX0KKworCQlwaW5mbyA9IHByZXBhcmVfc3FsX2ZuX3BhcnNlX2luZm8o ZnVuY190dXBsZSwKKwkJCQkJCQkJCQkgIChOb2RlICopIGV4cHIsCisJCQkJCQkJCQkJICBl eHByLT5pbnB1dGNvbGxpZCk7CisKKwkJUmVsZWFzZVN5c0NhY2hlKGZ1bmNfdHVwbGUpOwor CisJCS8qIFBhcnNlIHRoZSBTUUwuICovCisJCXJhd19wYXJzZXRyZWVfbGlzdCA9IHBnX3Bh cnNlX3F1ZXJ5KHNxbC5kYXRhKTsKKwkJaWYgKGxpc3RfbGVuZ3RoKHJhd19wYXJzZXRyZWVf bGlzdCkgIT0gMSkKKwkJeworCQkJZXJlcG9ydChXQVJOSU5HLCAoZXJybXNnKCJ0ZXN0X2lu bGluZV9zcmZfc3VwcG9ydF9mdW5jIHBhcnNlZCB0byBtb3JlIHRoYW4gb25lIG5vZGUiKSkp OworCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisJCX0KKworCQkvKiBBbmFseXplIHRo ZSBwYXJzZSB0cmVlIGFzIGlmIGl0IHdlcmUgYSBTUUwtbGFuZ3VhZ2UgYm9keS4gKi8KKwkJ cXVlcnl0cmVlX2xpc3QgPSBwZ19hbmFseXplX2FuZF9yZXdyaXRlX3dpdGhjYihsaW5pdGlh bChyYXdfcGFyc2V0cmVlX2xpc3QpLAorCQkJCQkJCQkJCQkJCSAgIHNxbC5kYXRhLAorCQkJ CQkJCQkJCQkJCSAgIChQYXJzZXJTZXR1cEhvb2spIHNxbF9mbl9wYXJzZXJfc2V0dXAsCisJ CQkJCQkJCQkJCQkJICAgcGluZm8sIE5VTEwpOworCQlpZiAobGlzdF9sZW5ndGgocXVlcnl0 cmVlX2xpc3QpICE9IDEpCisJCXsKKwkJCWVyZXBvcnQoV0FSTklORywgKGVycm1zZygidGVz dF9pbmxpbmVfc3JmX3N1cHBvcnRfZnVuYyByZXdyb3RlIHRvIG1vcmUgdGhhbiBvbmUgbm9k ZSIpKSk7CisJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKKwkJfQorCisJCXF1ZXJ5dHJl ZSA9IGxpbml0aWFsKHF1ZXJ5dHJlZV9saXN0KTsKKwkJaWYgKCFJc0EocXVlcnl0cmVlLCBR dWVyeSkpCisJCXsKKwkJCWVyZXBvcnQoV0FSTklORywgKGVycm1zZygidGVzdF9pbmxpbmVf c3JmX3N1cHBvcnRfZnVuYyBkaWRuJ3QgcGFyc2UgdG8gYSBRdWVyeSIpLAorCQkJCQkJCSAg ZXJyZGV0YWlsKCJHb3QgdGhpcyBpbnN0ZWFkOiAlcyIsIG5vZGVUb1N0cmluZyhxdWVyeXRy ZWUpKSkpOworCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisJCX0KKwl9CisKKwlQR19S RVRVUk5fUE9JTlRFUihxdWVyeXRyZWUpOworfQorCiBQR19GVU5DVElPTl9JTkZPX1YxKHRl c3Rfb3BjbGFzc19vcHRpb25zX2Z1bmMpOwogRGF0dW0KIHRlc3Rfb3BjbGFzc19vcHRpb25z X2Z1bmMoUEdfRlVOQ1RJT05fQVJHUykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL21pc2NfZnVuY3Rpb25zLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVu Y3Rpb25zLnNxbAppbmRleCAyMzc5MmM0MTMyYS4uNTZjNmU3YThhODggMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwKQEAgLTI0OCw2ICsyNDgsMTIgQEAg Q1JFQVRFIEZVTkNUSU9OIHRlc3Rfc3VwcG9ydF9mdW5jKGludGVybmFsKQogICAgIEFTIDon cmVncmVzc2xpYicsICd0ZXN0X3N1cHBvcnRfZnVuYycKICAgICBMQU5HVUFHRSBDIFNUUklD VDsKIAorLS0gV2l0aCBhIHN1cHBvcnQgZnVuY3Rpb24gdGhhdCBpbmxpbmVzIFNSRnMKK0NS RUFURSBGVU5DVElPTiB0ZXN0X2lubGluZV9zcmZfc3VwcG9ydF9mdW5jKGludGVybmFsKQor ICAgIFJFVFVSTlMgaW50ZXJuYWwKKyAgICBBUyA6J3JlZ3Jlc3NsaWInLCAndGVzdF9pbmxp bmVfc3JmX3N1cHBvcnRfZnVuYycKKyAgICBMQU5HVUFHRSBDIFNUUklDVDsKKwogQUxURVIg RlVOQ1RJT04gbXlfaW50X2VxKGludCwgaW50KSBTVVBQT1JUIHRlc3Rfc3VwcG9ydF9mdW5j OwogCiBFWFBMQUlOIChDT1NUUyBPRkYpCkBAIC0zNDksNiArMzU1LDg2IEBAIFNFTEVDVCBl eHBsYWluX21hc2tfY29zdHMoJCQKIFNFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDI1 LjAsIDIuMCwgMC4wKSBnKHMpOyQkLAogZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlKTsKIAor LS0KKy0tIFRlc3QgaW5saW5pbmcgUEwvcGdTUUwgZnVuY3Rpb25zCistLQorCistLSBSRVRV Uk5TIFNFVE9GIFRFWFQ6CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmb29fZnJvbV9i YXIoY29sbmFtZSBURVhULCB0YWJsZW5hbWUgVEVYVCwgZmlsdGVyIFRFWFQpCitSRVRVUk5T IFNFVE9GIFRFWFQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICRmdW5jdGlvbiQKK0RFQ0xBUkUK KyAgc3FsIFRFWFQ7CitCRUdJTgorICBzcWwgOj0gZm9ybWF0KCdTRUxFQ1QgJUk6OnRleHQg RlJPTSAlSScsIGNvbG5hbWUsIHRhYmxlbmFtZSk7CisgIElGIGZpbHRlciBJUyBOT1QgTlVM TCBUSEVOCisgICAgc3FsIDo9IENPTkNBVChzcWwsIGZvcm1hdCgnIFdIRVJFICVJOjp0ZXh0 ID0gJDEnLCBjb2xuYW1lKSk7CisgIEVORCBJRjsKKyAgUkVUVVJOIFFVRVJZIEVYRUNVVEUg c3FsIFVTSU5HIGZpbHRlcjsKK0VORDsKKyRmdW5jdGlvbiQgU1RBQkxFIExFQUtQUk9PRjsK K1NFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsIE5VTEwpOwor U0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgJ2RvaCEnKTsK K0VYUExBSU4gU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywg TlVMTCk7CitFWFBMQUlOIFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0 X3RibCcsICdkb2ghJyk7CitBTFRFUiBGVU5DVElPTiBmb29fZnJvbV9iYXIoVEVYVCwgVEVY VCwgVEVYVCkgU1VQUE9SVCB0ZXN0X2lubGluZV9zcmZfc3VwcG9ydF9mdW5jOworU0VMRUNU ICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVMTCk7CitTRUxFQ1Qg KiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCAnZG9oIScpOworRVhQTEFJ TiBTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCBOVUxMKTsK K0VYUExBSU4gU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywg J2RvaCEnKTsKK0RST1AgRlVOQ1RJT04gZm9vX2Zyb21fYmFyOworLS0gUkVUVVJOUyBTRVRP RiBSRUNPUkQ6CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmb29fZnJvbV9iYXIoY29s bmFtZSBURVhULCB0YWJsZW5hbWUgVEVYVCwgZmlsdGVyIFRFWFQpCitSRVRVUk5TIFNFVE9G IFJFQ09SRAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJGZ1bmN0aW9uJAorREVDTEFSRQorICBz cWwgVEVYVDsKK0JFR0lOCisgIHNxbCA6PSBmb3JtYXQoJ1NFTEVDVCAlSTo6dGV4dCBGUk9N ICVJJywgY29sbmFtZSwgdGFibGVuYW1lKTsKKyAgSUYgZmlsdGVyIElTIE5PVCBOVUxMIFRI RU4KKyAgICBzcWwgOj0gQ09OQ0FUKHNxbCwgZm9ybWF0KCcgV0hFUkUgJUk6OnRleHQgPSAk MScsIGNvbG5hbWUpKTsKKyAgRU5EIElGOworICBSRVRVUk4gUVVFUlkgRVhFQ1VURSBzcWwg VVNJTkcgZmlsdGVyOworRU5EOworJGZ1bmN0aW9uJCBTVEFCTEUgTEVBS1BST09GOworU0VM RUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVMTCkgQVMgYmFy KGZvbyBURVhUKTsKK1NFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3Ri bCcsICdkb2ghJykgQVMgYmFyKGZvbyBURVhUKTsKK0VYUExBSU4gU0VMRUNUICogRlJPTSBm b29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVMTCkgQVMgYmFyKGZvbyBURVhUKTsK K0VYUExBSU4gU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywg J2RvaCEnKSBBUyBiYXIoZm9vIFRFWFQpOworQUxURVIgRlVOQ1RJT04gZm9vX2Zyb21fYmFy KFRFWFQsIFRFWFQsIFRFWFQpIFNVUFBPUlQgdGVzdF9pbmxpbmVfc3JmX3N1cHBvcnRfZnVu YzsKK1NFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsIE5VTEwp IEFTIGJhcihmb28gVEVYVCk7CitTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAn dGV4dF90YmwnLCAnZG9oIScpIEFTIGJhcihmb28gVEVYVCk7CitFWFBMQUlOIFNFTEVDVCAq IEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsIE5VTEwpIEFTIGJhcihmb28g VEVYVCk7CitFWFBMQUlOIFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0 X3RibCcsICdkb2ghJykgQVMgYmFyKGZvbyBURVhUKTsKK0RST1AgRlVOQ1RJT04gZm9vX2Zy b21fYmFyOworLS0gUkVUVVJOUyBUQUJMRToKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9O IGZvb19mcm9tX2Jhcihjb2xuYW1lIFRFWFQsIHRhYmxlbmFtZSBURVhULCBmaWx0ZXIgVEVY VCkKK1JFVFVSTlMgVEFCTEUoZm9vIFRFWFQpCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkZnVu Y3Rpb24kCitERUNMQVJFCisgIHNxbCBURVhUOworQkVHSU4KKyAgc3FsIDo9IGZvcm1hdCgn U0VMRUNUICVJOjp0ZXh0IEZST00gJUknLCBjb2xuYW1lLCB0YWJsZW5hbWUpOworICBJRiBm aWx0ZXIgSVMgTk9UIE5VTEwgVEhFTgorICAgIHNxbCA6PSBDT05DQVQoc3FsLCBmb3JtYXQo JyBXSEVSRSAlSTo6dGV4dCA9ICQxJywgY29sbmFtZSkpOworICBFTkQgSUY7CisgIFJFVFVS TiBRVUVSWSBFWEVDVVRFIHNxbCBVU0lORyBmaWx0ZXI7CitFTkQ7CiskZnVuY3Rpb24kIFNU QUJMRSBMRUFLUFJPT0Y7CitTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4 dF90YmwnLCBOVUxMKTsKK1NFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0 X3RibCcsICdkb2ghJyk7CitFWFBMQUlOIFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdm MScsICd0ZXh0X3RibCcsIE5VTEwpOworRVhQTEFJTiBTRUxFQ1QgKiBGUk9NIGZvb19mcm9t X2JhcignZjEnLCAndGV4dF90YmwnLCAnZG9oIScpOworQUxURVIgRlVOQ1RJT04gZm9vX2Zy b21fYmFyKFRFWFQsIFRFWFQsIFRFWFQpIFNVUFBPUlQgdGVzdF9pbmxpbmVfc3JmX3N1cHBv cnRfZnVuYzsKK1NFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcs IE5VTEwpOworU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywg J2RvaCEnKTsKK0VYUExBSU4gU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3Rl eHRfdGJsJywgTlVMTCk7CitFWFBMQUlOIFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdm MScsICd0ZXh0X3RibCcsICdkb2ghJyk7CitEUk9QIEZVTkNUSU9OIGZvb19mcm9tX2JhcjsK KwogLS0gVGVzdCBmdW5jdGlvbnMgZm9yIGNvbnRyb2wgZGF0YQogU0VMRUNUIGNvdW50KCop ID4gMCBBUyBvayBGUk9NIHBnX2NvbnRyb2xfY2hlY2twb2ludCgpOwogU0VMRUNUIGNvdW50 KCopID4gMCBBUyBvayBGUk9NIHBnX2NvbnRyb2xfaW5pdCgpOwotLSAKMi4zOS41Cgo= --------------fmpWOyABkUKksVqmRjmj9S7q--