<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>162502</bug_id>
          
          <creation_ts>2016-09-23 12:26:53 -0700</creation_ts>
          <short_desc>[Binding] Use uncheckedArgument if argumentCount is already checked</short_desc>
          <delta_ts>2016-09-24 15:27:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>cdumez</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1232941</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-09-23 12:26:53 -0700</bug_when>
    <thetext>Looking the current binding code, we can find that argument(n) is used even after we checked the argument count and throw an error.

3794 EncodedJSValue JSC_HOST_CALL jsWebGLRenderingContextBasePrototypeFunctionUniform1f(ExecState* state)
3795 {
3796     VM&amp; vm = state-&gt;vm();
3797     auto throwScope = DECLARE_THROW_SCOPE(vm);
3798     UNUSED_PARAM(throwScope);
3799     JSValue thisValue = state-&gt;thisValue();
3800     auto castedThis = jsDynamicCast&lt;JSWebGLRenderingContextBase*&gt;(thisValue);
3801     if (UNLIKELY(!castedThis))
3802         return throwThisTypeError(*state, throwScope, &quot;WebGLRenderingContextBase&quot;, &quot;uniform1f&quot;);
3803     ASSERT_GC_OBJECT_INHERITS(castedThis, JSWebGLRenderingContextBase::info());
3804     auto&amp; impl = castedThis-&gt;wrapped();
3805     if (UNLIKELY(state-&gt;argumentCount() &lt; 2))
3806         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
3807     ExceptionCode ec = 0;
3808     WebGLUniformLocation* location = nullptr;
3809     if (!state-&gt;argument(0).isUndefinedOrNull()) {
3810         location = JSWebGLUniformLocation::toWrapped(state-&gt;uncheckedArgument(0));
3811         if (UNLIKELY(!location))
3812             return throwArgumentTypeError(*state, throwScope, 0, &quot;location&quot;, &quot;WebGLRenderingContextBase&quot;, &quot;uniform1f&quot;, &quot;WebGLUniformLocation&quot;);
3813     }
3814     auto x = convert&lt;float&gt;(*state, state-&gt;argument(1), ShouldAllowNonFinite::Yes);
3815     if (UNLIKELY(throwScope.exception()))
3816         return JSValue::encode(jsUndefined());
3817     impl.uniform1f(WTFMove(location), WTFMove(x), ec);
3818     setDOMException(state, ec);
3819     return JSValue::encode(jsUndefined());
3820 }

In L3805, we emit the guard against less arguments case.
So after this check, we should access to arguments by using `uncheckedArgument` instead of `argument`. However, L3809 and L3814 use argument().
It introduces unnecessary extra branches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233019</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-09-23 15:42:35 -0700</bug_when>
    <thetext>This and https://bugs.webkit.org/show_bug.cgi?id=162503 patches offers roughly 5% perf win in dromaeo dom-attr&apos;s getAttribute / setAttribute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233030</commentid>
    <comment_count>2</comment_count>
      <attachid>289716</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-09-23 16:26:24 -0700</bug_when>
    <thetext>Created attachment 289716
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233041</commentid>
    <comment_count>3</comment_count>
      <attachid>289716</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-09-23 16:39:20 -0700</bug_when>
    <thetext>Comment on attachment 289716
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233046</commentid>
    <comment_count>4</comment_count>
      <attachid>289716</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-23 16:46:37 -0700</bug_when>
    <thetext>Comment on attachment 289716
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=289716&amp;action=review

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4031
&gt; +            my $argumentLookupMethod = &quot;argument&quot;;

Would be nice as a ternary:
my $argumentLookupMethod = $parameter-&gt;isOptional ? &quot;argument&quot; : &quot;uncheckedArgument&quot;;

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4072
&gt; +            my $argumentLookupMethod = &quot;argument&quot;;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233051</commentid>
    <comment_count>5</comment_count>
      <attachid>289716</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-09-23 16:52:50 -0700</bug_when>
    <thetext>Comment on attachment 289716
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=289716&amp;action=review

Thanks for your reviews!

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4031
&gt;&gt; +            my $argumentLookupMethod = &quot;argument&quot;;
&gt; 
&gt; Would be nice as a ternary:
&gt; my $argumentLookupMethod = $parameter-&gt;isOptional ? &quot;argument&quot; : &quot;uncheckedArgument&quot;;

Nice, fixed.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4072
&gt;&gt; +            my $argumentLookupMethod = &quot;argument&quot;;
&gt; 
&gt; Ditto.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233055</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-09-23 16:59:44 -0700</bug_when>
    <thetext>Committed r206338: &lt;http://trac.webkit.org/changeset/206338&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233161</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-24 15:27:48 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; This and https://bugs.webkit.org/show_bug.cgi?id=162503 patches offers
&gt; roughly 5% perf win in dromaeo dom-attr&apos;s getAttribute / setAttribute.

Awesome!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289716</attachid>
            <date>2016-09-23 16:26:24 -0700</date>
            <delta_ts>2016-09-23 16:39:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162502-20160923162332.patch</filename>
            <type>text/plain</type>
            <size>82043</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2MjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGEzZGE0N2JiMjNkYTc5
Y2RjYmExNDY2NTBjMTBlNmVmZjliNmU5MS4uY2I3MWVjOGJiNWMwMmViY2RjYWNjNGE1OGM2OTE1
MmE4OTMxMzUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOSBAQAorMjAxNi0wOS0yMyAgWXVz
dWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBbQmluZGluZ10g
VXNlIHVuY2hla2NlZEFyZ3VtZW50IGlmIGFyZ3VtZW50Q291bnQgaXMgYWxyZWFkeSBjaGVja2Vk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI1MDIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBpcyBu
b3QgbmVjZXNzYXJ5IHRvIHVzZSBgZXhlYy0+YXJndW1lbnQobilgIGFmdGVyIGNoZWNraW5nIHRo
ZSBhcmd1bWVudCBleGlzdHMuCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyBgYXJndW1lbnQo
bilgIHRvIGB1bmNoZWNrZWRBcmd1bWVudChuKWAgaWYgd2UgYWxyZWFkeSBwcm92ZWQgdGhhdAor
ICAgICAgICB0aGUgYXJndW1lbnQgZXhpc3RzLiBUaGlzIGNoYW5nZSBkcm9wcyBicmFuY2hlcyBn
ZW5lcmF0ZWQgYnkgYGV4ZWMtPmFyZ3VtZW50KG4pYC4KKyAgICAgICAgQW5kIGl0IGlzIGdvb2Qg
Zm9yIHNtYWxsIERPTSBvcGVyYXRpb25zIGluIHdoaWNoIERPTSBiaW5kaW5nIGNvZGUgb2NjdXBp
ZXMgbGFyZ2UKKyAgICAgICAgcGFydCBvZiBlbnRpcmUgcHJvY2Vzc2luZy4gVGhpcyBwYXRjaCBh
bmQgYW5vdGhlciBzbWFsbCBwYXRjaFsxXSBvZmZlciByb3VnaGx5IDUlCisgICAgICAgIGltcHJv
dmVtZW50IGluIERyb21hZW8gZG9tLWF0dHIncyBnZXRBdHRyaWJ1dGUgYW5kIHNldEF0dHJpYnV0
ZSB0ZXN0cy4KKworICAgICAgICBbMV06IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjI1MDMKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOiBHZW5lcmF0ZVBhcmFt
ZXRlckNoZWNrIHJlcXVpcmVzIEdlbmVyYXRlQXJndW1lbnRzQ291bnRDaGVjay4KKyAgICAgICAg
QXMgYSByZXN1bHQsIGV4aXN0ZW5jZSBvZiBtYW5kYXRvcnkgYXJndW1lbnRzIGFyZSBhbHJlYWR5
IGNoZWNrZWQuIFdlIGNhbiB1c2UgYHVuY2hlY2tlZEFyZ3VtZW50KG4pYAorICAgICAgICBmb3Ig
bWFuZGF0b3J5IGFyZ3VtZW50cy4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEFjdGl2
ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uRXhjaXRpbmdGdW5jdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90
b3R5cGVGdW5jdGlvbkFub3RoZXJGdW5jdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25JdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25SZWd1bGFyT3BlcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVk
QXRSdW50aW1lT3BlcmF0aW9uMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmpl
Y3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjIpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRo
b2QyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9u
U3VwcGxlbWVudGFsTWV0aG9kMik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rv
cjo6Y29uc3RydWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9iakNvbnN0cnVjdG9yOjpjb25zdHJ1
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVk
QXRSdW50aW1lT3BlcmF0aW9uMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24yKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdzKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZFdpdGhBcmdzKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RX
aXRoQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxv
bmdNZXRob2RXaXRoQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoWFBh
dGhOU1Jlc29sdmVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEVudW1BcmcpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNB
bGxBcmdzQW5kVGhyb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZVVTVlN0cmluZ0FyZyk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJp
bmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3B0aW9uc09iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblByaXZhdGVNZXRob2QpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25QdWJsaWNBbmRQcml2YXRlTWV0aG9k
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRM
aXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblJl
bW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25h
bEFyZ0FuZFR3b09wdGlvbmFsQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxi
YWNrQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0
aW9uQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25T
dGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDMpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
NCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2Q1KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZDYpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q4KToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDkpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTApOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
MTEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0
ZXIyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kMTEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVu
c2lnbmVkTG9uZ1NlcXVlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkRvbVN0cmluZ0xpc3RGdW5jdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFi
bGVTZXF1ZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkdldEVsZW1lbnRCeUlkKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ29udmVydDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db252ZXJ0Mik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkNvbnZlcnQzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29udmVydDQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25WYXJpYWRpY1N0cmluZ01ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblZhcmlhZGljRG91YmxlTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNOb2RlTWV0aG9kKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQW55KToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFy
Z3VtZW50UHJvbWlzZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMVByb21pc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5j
dGlvbjJQcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29uZGl0aW9uYWxPdmVybG9hZDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkMik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQxKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9u
YWxPdmVybG9hZDIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25BdHRhY2hTaGFkb3dSb290KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25z
dHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMSk6CisgICAgICAgIChXZWJDb3JlOjpj
b25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMik6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMyk6CisgICAgICAgIChXZWJD
b3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzNCk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXRlbSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2V0U2hhZG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
U2VxdWVuY2VBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvbk51bGxhYmxlU2VxdWVuY2VBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlw
ZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXApOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1Nl
cXVlbmNlRnVuY3Rpb24yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90
eXBlRnVuY3Rpb25DYWxsV2l0aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZSk6CisKIDIwMTYt
MDktMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggc2Vy
aWFsaXphdGlvbiBvZiBIVE1MIHZvaWQgZWxlbWVudHMgd2hlbiB0aGV5IGhhdmUgY2hpbGRyZW4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0KaW5kZXggYWZiOTAzMDI1MmJhNzZkYWFjYWJiMGJlNzY0MGVhM2I3NjVkZjlmMC4uZTZkYTQ4
OWFjNDZlYWVmOTQ0NjBmMzIzZjcwMTEwZWI4Y2JmZWZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTM5ODcsMTAgKzM5
ODcsMTEgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGllICJDYWxsYmFja0ludGVyZmFjZSBkb2Vz
IG5vdCBzdXBwb3J0IFZhcmlhZGljIHBhcmFtZXRlciIgaWYgJHBhcmFtZXRlci0+aXNWYXJpYWRp
YzsKICAgICAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzRnVuY3Rpb25Pbmx5Q2Fs
bGJhY2tJbnRlcmZhY2UoJHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVudCgkYXJndW1lbnRJbmRl
eCkuaXNGdW5jdGlvbigpKSlcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoJGFyZ3Vt
ZW50SW5kZXgpLmlzRnVuY3Rpb24oKSkpXG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZ
KCFzdGF0ZS0+YXJndW1lbnQoJGFyZ3VtZW50SW5kZXgpLmlzT2JqZWN0KCkpKVxuIik7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkoIXN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgkYXJndW1lbnRJbmRleCkuaXNPYmplY3QoKSkpXG4iKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCB0
aHJvd1Njb3BlLCAkYXJndW1lbnRJbmRleCwgXCIkbmFtZVwiLCBcIiR2aXNpYmxlSW50ZXJmYWNl
TmFtZVwiLCAkcXVvdGVkRnVuY3Rpb25OYW1lKTtcbiIpOwogICAgICAgICAgICAgICAgIGlmICgk
ZnVuY3Rpb24tPmlzU3RhdGljKSB7CkBAIC00MDI2LDEzICs0MDI3LDE5IEBAIHN1YiBHZW5lcmF0
ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgbXkgJGRlZmluZU9wdGlvbmFsVmFsdWUgPSAi
YXV0byBvcHRpb25hbFZhbHVlIjsKICAgICAgICAgICAgIG15ICRpbmRlbnQgPSAiIjsKIAorICAg
ICAgICAgICAgZGllICJWYXJpYWRpYyBwYXJhbWV0ZXIgaXMgYWxyZWFkeSBoYW5kbGVkIGhlcmUi
IGlmICRwYXJhbWV0ZXItPmlzVmFyaWFkaWM7CisgICAgICAgICAgICBteSAkYXJndW1lbnRMb29r
dXBNZXRob2QgPSAiYXJndW1lbnQiOworICAgICAgICAgICAgaWYgKCEkcGFyYW1ldGVyLT5pc09w
dGlvbmFsKSB7CisgICAgICAgICAgICAgICAgJGFyZ3VtZW50TG9va3VwTWV0aG9kID0gInVuY2hl
Y2tlZEFyZ3VtZW50IjsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKCRwYXJhbWV0
ZXItPmlzT3B0aW9uYWwgJiYgIWRlZmluZWQoJHBhcmFtZXRlci0+ZGVmYXVsdCkpIHsKICAgICAg
ICAgICAgICAgICAkbmF0aXZlVHlwZSA9ICJPcHRpb25hbDwkY2xhc3NOYW1lPiI7CiAgICAgICAg
ICAgICAgICAgJG9wdGlvbmFsVmFsdWUgPSAkbmFtZTsKICAgICAgICAgICAgICAgICAkZGVmaW5l
T3B0aW9uYWxWYWx1ZSA9ICRuYW1lOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgYXV0byAke25hbWV9VmFsdWUgPSBzdGF0ZS0+YXJndW1lbnQo
JGFyZ3VtZW50SW5kZXgpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgYXV0byAke25hbWV9VmFsdWUgPSBzdGF0ZS0+JGFyZ3VtZW50TG9va3VwTWV0aG9kKCRhcmd1
bWVudEluZGV4KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICRu
YXRpdmVUeXBlICRuYW1lO1xuIik7CiAKICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLT5pc09w
dGlvbmFsKSB7CkBAIC00MDYxLDkgKzQwNjgsMTUgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0No
ZWNrCiAgICAgICAgICAgICBteSAkaXNUZWFyT2ZmID0gJGNvZGVHZW5lcmF0b3ItPklzU1ZHVHlw
ZU5lZWRpbmdUZWFyT2ZmKCR0eXBlKSAmJiAkaW50ZXJmYWNlTmFtZSAhfiAvTGlzdCQvOwogICAg
ICAgICAgICAgbXkgJHNob3VsZFBhc3NCeVJlZmVyZW5jZSA9ICRpc1RlYXJPZmYgfHwgU2hvdWxk
UGFzc1dyYXBwZXJCeVJlZmVyZW5jZSgkcGFyYW1ldGVyLCAkaW50ZXJmYWNlKTsKIAorICAgICAg
ICAgICAgZGllICJWYXJpYWRpYyBwYXJhbWV0ZXIgaXMgYWxyZWFkeSBoYW5kbGVkIGhlcmUiIGlm
ICRwYXJhbWV0ZXItPmlzVmFyaWFkaWM7CisgICAgICAgICAgICBteSAkYXJndW1lbnRMb29rdXBN
ZXRob2QgPSAiYXJndW1lbnQiOworICAgICAgICAgICAgaWYgKCEkcGFyYW1ldGVyLT5pc09wdGlv
bmFsKSB7CisgICAgICAgICAgICAgICAgJGFyZ3VtZW50TG9va3VwTWV0aG9kID0gInVuY2hlY2tl
ZEFyZ3VtZW50IjsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKCEkc2hvdWxkUGFz
c0J5UmVmZXJlbmNlICYmICRjb2RlR2VuZXJhdG9yLT5Jc1dyYXBwZXJUeXBlKCR0eXBlKSkgewog
ICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IjxydW50aW1lL0Vycm9yLmg+In0gPSAxOwot
ICAgICAgICAgICAgICAgIG15ICRjaGVja2VkQXJndW1lbnQgPSAic3RhdGUtPmFyZ3VtZW50KCRh
cmd1bWVudEluZGV4KSI7CisgICAgICAgICAgICAgICAgbXkgJGNoZWNrZWRBcmd1bWVudCA9ICJz
dGF0ZS0+JGFyZ3VtZW50TG9va3VwTWV0aG9kKCRhcmd1bWVudEluZGV4KSI7CiAgICAgICAgICAg
ICAgICAgbXkgJHVuY2hlY2tlZEFyZ3VtZW50ID0gInN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgk
YXJndW1lbnRJbmRleCkiOwogICAgICAgICAgICAgICAgIG15ICgkbmF0aXZlVmFsdWUsICRtYXlU
aHJvd0V4Y2VwdGlvbikgPSBKU1ZhbHVlVG9OYXRpdmUoJGludGVyZmFjZSwgJHBhcmFtZXRlciwg
JHVuY2hlY2tlZEFyZ3VtZW50LCAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNvbmRpdGlvbmFsIn0pOwogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICAkbmF0aXZlVHlwZSAkbmFtZSA9IG51bGxwdHI7XG4iKTsKQEAgLTQwOTgsMTUgKzQx
MTEsMTUgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICAgICAgICAg
ICAgICAkZGVmYXVsdFZhbHVlID0gIkpTVmFsdWU6OkpTVW5kZWZpbmVkIiBpZiAkZGVmYXVsdFZh
bHVlIGVxICJ1bmRlZmluZWQiOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICAgICAgJG91dGVyID0gInN0YXRlLT5hcmd1bWVudCgkYXJndW1lbnRJbmRleCkuaXNVbmRl
ZmluZWQoKSA/ICRkZWZhdWx0VmFsdWUgOiAiOworICAgICAgICAgICAgICAgICAgICAkb3V0ZXIg
PSAic3RhdGUtPiRhcmd1bWVudExvb2t1cE1ldGhvZCgkYXJndW1lbnRJbmRleCkuaXNVbmRlZmlu
ZWQoKSA/ICRkZWZhdWx0VmFsdWUgOiAiOwogICAgICAgICAgICAgICAgICAgICAkaW5uZXIgPSAi
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KCRhcmd1bWVudEluZGV4KSI7CiAgICAgICAgICAgICAg
ICAgfSBlbHNpZiAoJHBhcmFtZXRlci0+aXNPcHRpb25hbCAmJiAhZGVmaW5lZCgkcGFyYW1ldGVy
LT5kZWZhdWx0KSkgewogICAgICAgICAgICAgICAgICAgICAjIFVzZSBXVEY6Ok9wdGlvbmFsPD4o
KSBmb3Igb3B0aW9uYWwgcGFyYW1ldGVycyB0aGF0IGFyZSBtaXNzaW5nIG9yIHVuZGVmaW5lZCBh
bmQgdGhhdCBkbyBub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgaW4gdGhlIElETC4KLSAgICAgICAg
ICAgICAgICAgICAgJG91dGVyID0gInN0YXRlLT5hcmd1bWVudCgkYXJndW1lbnRJbmRleCkuaXNV
bmRlZmluZWQoKSA/IE9wdGlvbmFsPCRuYXRpdmVUeXBlPigpIDogIjsKKyAgICAgICAgICAgICAg
ICAgICAgJG91dGVyID0gInN0YXRlLT4kYXJndW1lbnRMb29rdXBNZXRob2QoJGFyZ3VtZW50SW5k
ZXgpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDwkbmF0aXZlVHlwZT4oKSA6ICI7CiAgICAgICAg
ICAgICAgICAgICAgICRpbm5lciA9ICJzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoJGFyZ3VtZW50
SW5kZXgpIjsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAk
b3V0ZXIgPSAiIjsKLSAgICAgICAgICAgICAgICAgICAgJGlubmVyID0gInN0YXRlLT5hcmd1bWVu
dCgkYXJndW1lbnRJbmRleCkiOworICAgICAgICAgICAgICAgICAgICAkaW5uZXIgPSAic3RhdGUt
PiRhcmd1bWVudExvb2t1cE1ldGhvZCgkYXJndW1lbnRJbmRleCkiOwogICAgICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgICAgIG15ICgkbmF0aXZlVmFsdWUsICRtYXlUaHJvd0V4Y2VwdGlv
bikgPSBKU1ZhbHVlVG9OYXRpdmUoJGludGVyZmFjZSwgJHBhcmFtZXRlciwgJGlubmVyLCAkZnVu
Y3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRpdGlvbmFsIn0pOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEFjdGl2ZURPTU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAppbmRleCAzODQzYmY5ZTZjZDQwODJlNGQ3
YTNiYzE0Y2Q4ZDkzODhmNWI4Y2MwLi41NTVmYmE1YjhmYzgzMGEwOGRlYTgzYjdkYmE4YTJlZDY1
M2I1MjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtMjAzLDcgKzIw
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9NT2JqZWN0
UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1bmN0CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gbmV4dENoaWxkID0g
SlNOb2RlOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIG5leHRDaGls
ZCA9IEpTTm9kZTo6dG9XcmFwcGVkKHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFuZXh0Q2hpbGQpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5
cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJuZXh0Q2hpbGQiLCAiVGVzdEFjdGl2ZURP
TU9iamVjdCIsICJleGNpdGluZ0Z1bmN0aW9uIiwgIk5vZGUiKTsKICAgICBpbXBsLmV4Y2l0aW5n
RnVuY3Rpb24oKm5leHRDaGlsZCk7CkBAIC0yMjMsNyArMjIzLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvblBvc3RN
ZXNzYWdlKEUKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7Ci0gICAgYXV0byBtZXNzYWdlID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvIG1lc3NhZ2UgPSBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLnBvc3RNZXNzYWdlKFdURk1vdmUobWVzc2FnZSkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDdXN0b21OYW1lZEdldHRlci5jcHAKaW5kZXggOTYzOGEyNjY3MTY1YzY5NTgyMjU3ZmMwMjNi
Nzc4YTZiZmQ3MTI0Yy4uM2Y3NWFiZTg3YjA2ZWI2NmNmNDAxY2IyZmMxNDBkNGEzNTE4NDE2NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCkBAIC0yMDAsNyArMjAwLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDdXN0b21OYW1lZEdldHRlclBy
b3RvdHlwZUZ1bmN0aW9uQW5vdGhlckZ1bmMKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJn
dW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gc3RyID0gc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5hbm90aGVyRnVuY3Rpb24oV1RGTW92ZShzdHIpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RF
dmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IGJlMzFmNDg4MjJlNzc3YTM3ZWQwMzI5NmMxNzBi
N2U5YjJlZTYxNDYuLjEwMGIzY2Y5MWUwMGFmMDUzZWUwY2YwYTA3ZDA0NWM3MjdmMTZiN2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RF
dmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAtMjEzLDcgKzIxMyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkl0ZW0o
RXhlY1N0YXRlKiBzCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PHVpbnQzMl90Pigqc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBpbmRl
eCA9IGNvbnZlcnQ8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgaW1wbC5pdGVtKFdURk1vdmUoaW5kZXgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3Bw
CmluZGV4IGQzOTM0YTNjYWVmZDQzYjczYmQzNTI5YmQyMWFkMmYzNzRhOTIwYWEuLjJiMTZkMTEy
NDFiZDliODU4NGFhYTMyMmE5NmRhNzRiM2MyZWJiNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmpl
Y3QuY3BwCkBAIC0zNzUsNyArMzc1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxhck9wZXJhdGlvbigKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0g
ICAgYXV0byB0ZXN0UGFyYW0gPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUp
OworICAgIGF1dG8gdGVzdFBhcmFtID0gc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5yZWd1bGFyT3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7CkBAIC0zOTYsNyArMzk2LDcg
QEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5j
ZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU8KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byB0ZXN0UGFyYW0gPSBzdGF0
ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gdGVzdFBhcmFtID0g
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5lbmFibGVkQXRSdW50aW1lT3BlcmF0
aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7CkBAIC00MTksNyArNDE5LDcgQEAgc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxl
ZEF0UnVudGltZU8KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PGludDMyX3Q+KCpz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIHRl
c3RQYXJhbSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0p
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKaW5kZXggNTUwNDc4MDFkZDlkYjRmMGI5ZjU5ZjdlMDkx
YTE3YmQ3YzU2NDE2NS4uNzQ0MDM0NDk0NTg5NThhMDNhMjQ1ODZmMzY1MjA0MDQxMmVmNjBkNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKQEAgLTIzMCw3ICsyMzAsNyBAQCB0ZW1wbGF0ZTw+IEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmNv
bnN0cnVjdChFeAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgYXV0byBzdHIxID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsK
KyAgICBhdXRvIHN0cjEgPSBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmco
c3RhdGUpOwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0cjIg
PSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZGVmYXVs
dFN0cmluZyIpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRl
KTsKQEAgLTg1OSwxMCArODU5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMihFCiAgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1
dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBh
dXRvIHN0ckFyZyA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0
ZSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8gb2JqQXJnID0g
SlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDEpKTsKKyAgICBhdXRvIG9iakFy
ZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5
cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDEsICJvYmpBcmciLCAiVGVzdEludGVyZmFjZSIs
ICJpbXBsZW1lbnRzTWV0aG9kMiIsICJUZXN0T2JqIik7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5pbXBsZW1lbnRzTWV0
aG9kMigqY29udGV4dCwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnLCBlYykpOwpAQCAtOTM3LDEw
ICs5MzcsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQ
cm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDIKICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byBzdHJBcmcgPSBz
dGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gc3RyQXJnID0g
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRv
V3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMSkpOworICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2Jq
Ojp0b1dyYXBwZWQoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBpZiAoVU5MSUtF
TFkoIW9iakFyZykpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0
ZSwgdGhyb3dTY29wZSwgMSwgIm9iakFyZyIsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRh
bE1ldGhvZDIiLCAiVGVzdE9iaiIpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1
cHBsZW1lbnRhbE1ldGhvZDIoaW1wbCwgKmNvbnRleHQsIFdURk1vdmUoc3RyQXJnKSwgKm9iakFy
ZywgZWMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApp
bmRleCBiYjNkYjZjZGUwMTE1MWJiYTQ4ZGYyNDg1YmY2NGYzYWE3Mzg0NzdmLi43N2FmMTUzZjU1
ZTE0MjkwZDJiNTExMDgwYWUzYmI1ODE5YWMwOTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBAIC0xNjUsNyArMTY1LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2QKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNG
dW5jdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KS5pc0Z1bmN0aW9uKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0
aW9uRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAibGlzdGVuZXIiLCAiVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIiLCAibWV0aG9kIik7CiAgICAgYXV0byBsaXN0ZW5lciA9IEpTTWVkaWFR
dWVyeUxpc3RMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBpbXBsLm1ldGhvZChXVEZN
b3ZlKGxpc3RlbmVyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKaW5kZXgg
MDFmMDQyMjg2OGYwOTM0YjhmYzQxMTc1ZDg5OWQxNjcyNjE1MjI3ZC4uODY1NWI0ZTE0ZTJhMDhl
MWUwNzg3MGI3ZjM4NzQwNmE2NzY5ZGZhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVj
dG9yLmNwcApAQCAtOTAsNyArOTAsNyBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OgogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byBzdHIxID0g
c3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvIHN0cjEgPSBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0cjIgPSBzdGF0ZS0+YXJndW1lbnQo
MSkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZGVmYXVsdFN0cmluZyIpIDogc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXgg
MzBkYjg3YzBmOTAxNzU1YTU5YzMwZTJiNDNhOGJmNzczYmEwYmRlZC4uNTVkYTJhMTg0YmI5MzU2
NDU2YjEwODEwOWNiN2M2NWY2YWFhMmMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTExMzcsMTAgKzExMzcs
MTAgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE9iakNv
bnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXQKICAgICBBU1NFUlQoY2FzdGVkVGhpcyk7CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVudCgwKS5p
c09iamVjdCgpKSkKKyAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KS5pc09iamVjdCgpKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlv
bkVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgInRlc3RDYWxsYmFjayIsICJUZXN0T2JqZWN0
IiwgbnVsbHB0cik7CiAgICAgYXV0byB0ZXN0Q2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3Jl
YXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpKTsKLSAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVudCgxKS5pc0Z1
bmN0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LmlzRnVuY3Rpb24oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rp
b25FcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDEsICJ0ZXN0Q2FsbGJhY2tGdW5jdGlvbiIsICJU
ZXN0T2JqZWN0IiwgbnVsbHB0cik7CiAgICAgYXV0byB0ZXN0Q2FsbGJhY2tGdW5jdGlvbiA9IEpT
VGVzdENhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMSkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCA9IGNhc3RlZFRoaXMtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKQEAgLTQ2MjEsNyArNDYyMSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uCiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAg
IGF1dG8gdGVzdFBhcmFtID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsK
KyAgICBhdXRvIHRlc3RQYXJhbSA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0
cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
ZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOwpAQCAtNDY0NCw3
ICs0NjQ0LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byB0ZXN0UGFy
YW0gPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxD
b252ZXJzaW9uKTsKKyAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVy
YXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsKQEAgLTQ3MDIsMTMgKzQ3MDIsMTMgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRo
b2RXaXRoQXJncyhFeGVjU3QKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBsb25nQXJnID0gY29udmVydDxpbnQzMl90
Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0
byBsb25nQXJnID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0
YXRlKTsKKyAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b1dU
RlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1
dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsKKyAg
ICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQogICAgICAgICByZXR1cm4gdGhy
b3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDIsICJvYmpBcmciLCAiVGVz
dE9iamVjdCIsICJ2b2lkTWV0aG9kV2l0aEFyZ3MiLCAiVGVzdE9iaiIpOwogICAgIGltcGwudm9p
ZE1ldGhvZFdpdGhBcmdzKFdURk1vdmUobG9uZ0FyZyksIFdURk1vdmUoc3RyQXJnKSwgKm9iakFy
Zyk7CkBAIC00NzQzLDEzICs0NzQzLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3MoRXhlY1N0CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwot
ICAgIGF1dG8gYnl0ZUFyZyA9IGNvbnZlcnQ8aW50OF90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVu
dCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBieXRlQXJnID0gY29udmVydDxpbnQ4
X3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9u
KTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byBzdHJBcmcgPSBz
dGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gc3RyQXJnID0g
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRv
V3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMikpOworICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2Jq
Ojp0b1dyYXBwZWQoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKICAgICBpZiAoVU5MSUtF
TFkoIW9iakFyZykpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0
ZSwgdGhyb3dTY29wZSwgMiwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgImJ5dGVNZXRob2RXaXRo
QXJncyIsICJUZXN0T2JqIik7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmJ5
dGVNZXRob2RXaXRoQXJncyhXVEZNb3ZlKGJ5dGVBcmcpLCBXVEZNb3ZlKHN0ckFyZyksICpvYmpB
cmcpKTsKQEAgLTQ3ODQsMTMgKzQ3ODQsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3MoRXhlY1MKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
Ci0gICAgYXV0byBvY3RldEFyZyA9IGNvbnZlcnQ8dWludDhfdD4oKnN0YXRlLCBzdGF0ZS0+YXJn
dW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gb2N0ZXRBcmcgPSBjb252ZXJ0
PHVpbnQ4X3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBOb3JtYWxDb252
ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byBzdHJB
cmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gc3Ry
QXJnID0gc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byBvYmpBcmcgPSBKU1Rlc3RP
Ymo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMikpOworICAgIGF1dG8gb2JqQXJnID0gSlNU
ZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKICAgICBpZiAo
VU5MSUtFTFkoIW9iakFyZykpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9y
KCpzdGF0ZSwgdGhyb3dTY29wZSwgMiwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm9jdGV0TWV0
aG9kV2l0aEFyZ3MiLCAiVGVzdE9iaiIpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIo
aW1wbC5vY3RldE1ldGhvZFdpdGhBcmdzKFdURk1vdmUob2N0ZXRBcmcpLCBXVEZNb3ZlKHN0ckFy
ZyksICpvYmpBcmcpKTsKQEAgLTQ4MjUsMTMgKzQ4MjUsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJncyhF
eGVjU3QKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7Ci0gICAgYXV0byBsb25nQXJnID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBsb25nQXJnID0g
Y29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9y
bWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1
dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBh
dXRvIHN0ckFyZyA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0
ZSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8gb2JqQXJnID0g
SlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsKKyAgICBhdXRvIG9iakFy
ZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5
cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDIsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJs
b25nTWV0aG9kV2l0aEFyZ3MiLCAiVGVzdE9iaiIpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNO
dW1iZXIoaW1wbC5sb25nTWV0aG9kV2l0aEFyZ3MoV1RGTW92ZShsb25nQXJnKSwgV1RGTW92ZShz
dHJBcmcpLCAqb2JqQXJnKSk7CkBAIC00ODY2LDEzICs0ODY2LDEzIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJn
cyhFeGVjU3RhCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwotICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRl
LCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gbG9uZ0Fy
ZyA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCks
IE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAg
ICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7Cisg
ICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9XVEZTdHJpbmco
c3RhdGUpOwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBhdXRvIG9iakFy
ZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CisgICAgYXV0byBv
YmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMikp
OwogICAgIGlmIChVTkxJS0VMWSghb2JqQXJnKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1l
bnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAyLCAib2JqQXJnIiwgIlRlc3RPYmplY3Qi
LCAib2JqTWV0aG9kV2l0aEFyZ3MiLCAiVGVzdE9iaiIpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwub2JqTWV0aG9kV2l0
aEFyZ3MoV1RGTW92ZShsb25nQXJnKSwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSk7CkBAIC00
OTA3LDcgKzQ5MDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFyZ1RyZWF0aW5nTnVsbAogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGFy
ZyA9IHZhbHVlVG9TdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKHN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJnID0gdmFsdWVUb1N0cmluZ1RyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmcoc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aEFyZ1RyZWF0aW5n
TnVsbEFzRW1wdHlTdHJpbmcoV1RGTW92ZShhcmcpKTsKQEAgLTQ5MjcsNyArNDkyNyw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoWFBhdGhOU1Jlc29sdmVyCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gcmVzb2x2ZXIgPSBKU1hQYXRoTlNS
ZXNvbHZlcjo6dG9XcmFwcGVkKCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRv
IHJlc29sdmVyID0gSlNYUGF0aE5TUmVzb2x2ZXI6OnRvV3JhcHBlZCgqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGlmIChVTkxJS0VMWSghcmVzb2x2ZXIpKQpAQCAtNDk3Myw3ICs0OTczLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxl
U3RyaW5nU3BlY2lhbE1ldGgKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8dWludDMyX3Q+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRv
IGluZGV4ID0gY29udmVydDx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nT3JOdWxsKHN0YXRlLCBpbXBsLm51bGxh
YmxlU3RyaW5nU3BlY2lhbE1ldGhvZChXVEZNb3ZlKGluZGV4KSkpOwpAQCAtNDk5Myw3ICs0OTkz
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhFbnVtQXJnKEV4ZWNTdGEKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBlbnVtQXJnVmFsdWUg
PSBzdGF0ZS0+YXJndW1lbnQoMCk7CisgICAgYXV0byBlbnVtQXJnVmFsdWUgPSBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CiAgICAgVGVzdE9iajo6RW51bVR5cGUgZW51bUFyZzsKICAgICBh
dXRvIG9wdGlvbmFsVmFsdWUgPSBwYXJzZTxUZXN0T2JqOjpFbnVtVHlwZT4oKnN0YXRlLCBlbnVt
QXJnVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKQEAg
LTUwNzAsMTAgKzUwNzAsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8gc3RyQXJnID0gc3Rh
dGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvIHN0ckFyZyA9IHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dy
YXBwZWQoc3RhdGUtPmFyZ3VtZW50KDEpKTsKKyAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6
dG9XcmFwcGVkKHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFvYmpBcmcpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUs
IHRocm93U2NvcGUsIDEsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJtZXRob2RUaGF0UmVxdWly
ZXNBbGxBcmdzQW5kVGhyb3dzIiwgIlRlc3RPYmoiKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm1ldGhvZFRoYXRSZXF1
aXJlc0FsbEFyZ3NBbmRUaHJvd3MoV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnLCBlYykpOwpAQCAt
NTA5NSw3ICs1MDk1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmcoRXgKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBz
dHIgPSB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGF1
dG8gc3RyID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RX
aXRoVVNWU3RyaW5nQXJnKFdURk1vdmUoc3RyKSk7CkBAIC01MTE1LDcgKzUxMTUsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE51bGxhYmxlVVNWU3RyaQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHN0ciA9IHZhbHVlVG9VU1ZTdHJpbmdX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAg
YXV0byBzdHIgPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKHN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOdWxsYWJsZVVTVlN0cmluZ0FyZyhXVEZNb3Zl
KHN0cikpOwpAQCAtNTEzNSw3ICs1MTM1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdUcmUKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
Ci0gICAgYXV0byBzdHIgPSB2YWx1ZVRvVVNWU3RyaW5nVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmlu
ZyhzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIHN0ciA9IHZhbHVlVG9VU1ZT
dHJpbmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1l
dGhvZFdpdGhVU1ZTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKFdURk1vdmUoc3Ry
KSk7CkBAIC01MTU1LDcgKzUxNTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlKEV4ZWNTdGF0ZQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAg
ICBhdXRvIHNlcmlhbGl6ZWRBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0
ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCAwLCAwKTsKKyAgICBhdXRvIHNlcmlhbGl6ZWRBcmcgPSBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLCAwLCAwKTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5zZXJpYWxpemVkVmFsdWUoV1RGTW92ZShzZXJpYWxpemVkQXJnKSk7CkBAIC01MTc1LDcgKzUx
NzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3B0aW9uc09iamVjdChFeGVjU3RhdGUqCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gb28gPSBEaWN0aW9u
YXJ5KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGF1dG8gb28gPSBEaWN0aW9uYXJ5
KHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGF1dG8gb29vID0gRGlj
dGlvbmFyeShzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpKTsKICAgICBpbXBsLm9wdGlvbnNPYmpl
Y3QoV1RGTW92ZShvbyksIFdURk1vdmUob29vKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUyNTQsNyArNTI1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Qcml2YXRlTWV0aG9kKEV4ZWNT
dGF0ZSoKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7Ci0gICAgYXV0byBhcmd1bWVudCA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0
cmluZyhzdGF0ZSk7CisgICAgYXV0byBhcmd1bWVudCA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwucHJp
dmF0ZU1ldGhvZChXVEZNb3ZlKGFyZ3VtZW50KSkpOwpAQCAtNTI3NCw3ICs1Mjc0LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblB1Ymxp
Y0FuZFByaXZhdGVNZXRob2QoRXgKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBhcmd1bWVudCA9IHN0YXRlLT5hcmd1
bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byBhcmd1bWVudCA9IHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
c3RhdGUsIGltcGwucHVibGljQW5kUHJpdmF0ZU1ldGhvZChXVEZNb3ZlKGFyZ3VtZW50KSkpOwpA
QCAtNTI5NCwxMCArNTI5NCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdAogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBh
dXRvIHR5cGUgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1
dG8gdHlwZSA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7
CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8gbGlzdGVuZXIgPSBK
U0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShzdGF0ZS0+YXJndW1lbnQoMSksICpjYXN0ZWRUaGlzLCBm
YWxzZSwgY3VycmVudFdvcmxkKHN0YXRlKSk7CisgICAgYXV0byBsaXN0ZW5lciA9IEpTRXZlbnRM
aXN0ZW5lcjo6Y3JlYXRlKHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgKmNhc3RlZFRoaXMs
IGZhbHNlLCBjdXJyZW50V29ybGQoc3RhdGUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWxpc3RlbmVy
KSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Nj
b3BlLCAxLCAibGlzdGVuZXIiLCAiVGVzdE9iamVjdCIsICJhZGRFdmVudExpc3RlbmVyIiwgIkV2
ZW50TGlzdGVuZXIiKTsKICAgICBhdXRvIHVzZUNhcHR1cmUgPSBzdGF0ZS0+YXJndW1lbnQoMiku
dG9Cb29sZWFuKHN0YXRlKTsKQEAgLTUzMjAsMTAgKzUzMjAsMTAgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVu
ZXIoRXhlY1MKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7Ci0gICAgYXV0byB0eXBlID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3Ry
aW5nKHN0YXRlKTsKKyAgICBhdXRvIHR5cGUgPSBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCku
dG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAg
ICBhdXRvIGxpc3RlbmVyID0gSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoc3RhdGUtPmFyZ3VtZW50
KDEpLCAqY2FzdGVkVGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChzdGF0ZSkpOworICAgIGF1dG8g
bGlzdGVuZXIgPSBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMSksICpjYXN0ZWRUaGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKHN0YXRlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFsaXN0ZW5lcikpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVy
cm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMSwgImxpc3RlbmVyIiwgIlRlc3RPYmplY3QiLCAicmVt
b3ZlRXZlbnRMaXN0ZW5lciIsICJFdmVudExpc3RlbmVyIik7CiAgICAgYXV0byB1c2VDYXB0dXJl
ID0gc3RhdGUtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihzdGF0ZSk7CkBAIC01NTk5LDcgKzU1OTks
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIG5vbk9wdCA9IGNvbnZl
cnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24p
OworICAgIGF1dG8gbm9uT3B0ID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb3B0ID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZp
bmVkKCkgPyBPcHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7CkBAIC01NjIyLDcg
KzU2MjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIG5vbk9wdCA9
IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZl
cnNpb24pOworICAgIGF1dG8gbm9uT3B0ID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb3B0MSA9IHN0YXRlLT5hcmd1bWVudCgxKS5p
c1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pOwpAQCAt
NjEwNyw3ICs2MTA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyhFeGUKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgaWYgKFVO
TElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkpCisgICAgaWYgKFVOTElLRUxZ
KCFzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNPYmplY3QoKSkpCiAgICAgICAgIHJldHVy
biB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAs
ICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhDYWxsYmFja0FyZyIpOwogICAg
IGF1dG8gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBp
bXBsLm1ldGhvZFdpdGhDYWxsYmFja0FyZyhXVEZNb3ZlKGNhbGxiYWNrKSk7CkBAIC02MTI3LDEw
ICs2MTI3LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBCiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gbm9uQ2Fs
bGJhY2sgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3Jt
YWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5vbkNhbGxiYWNrID0gY29udmVydDxpbnQzMl90Pigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGlmIChVTkxJS0VMWSghc3RhdGUt
PmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkpKQorICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLmlzT2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVu
dE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAxLCAiY2FsbGJhY2siLCAi
VGVzdE9iamVjdCIsICJtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyIpOwog
ICAgIGF1dG8gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgxKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAg
ICBpbXBsLm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKFdURk1vdmUobm9u
Q2FsbGJhY2spLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CkBAIC02MTcxLDcgKzYxNzEsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aENhbGxiYWNrRnVuY3RpbwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVu
dCgwKS5pc0Z1bmN0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApLmlzRnVuY3Rpb24oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVz
dEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJjYWxsYmFjayIsICJUZXN0
T2JqZWN0IiwgIm1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnIik7CiAgICAgYXV0byBjYWxs
YmFjayA9IEpTVGVzdENhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgaW1w
bC5tZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZyhXVEZNb3ZlKGNhbGxiYWNrKSk7CkBAIC02
MTkxLDEwICs2MTkxLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBCiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8g
bm9uQ2FsbGJhY2sgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
LCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5vbkNhbGxiYWNrID0gY29udmVydDxpbnQz
Ml90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lv
bik7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGlmIChVTkxJS0VMWSgh
c3RhdGUtPmFyZ3VtZW50KDEpLmlzRnVuY3Rpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKCFzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkuaXNGdW5jdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHRo
cm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMSwgImNh
bGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJh
Y2tGdW5jdGlvbkFyZyIpOwogICAgIGF1dG8gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFja0Z1bmN0
aW9uOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIGltcGwubWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJn
QW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyhXVEZNb3ZlKG5vbkNhbGxiYWNrKSwgV1RGTW92ZShjYWxs
YmFjaykpOwpAQCAtNjI0NCw3ICs2MjQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uU3RhdGljTWV0aG9kV2l0aENhbGxiYWMKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBpZiAo
VU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKSkKKyAgICBpZiAoVU5MSUtF
TFkoIXN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc09iamVjdCgpKSkKICAgICAgICAgcmV0
dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwg
MCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAic3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQXJn
Iik7CiAgICAgYXV0byBjYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTVGVz
dENhbGxiYWNrPihzdGF0ZSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSksIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgVGVz
dE9iajo6c3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQXJnKFdURk1vdmUoY2FsbGJhY2spKTsKQEAg
LTYzMTksMTIgKzYzMTksMTIgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKEV4ZWNTdGEKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIFRlc3RPYmoqIG9iakFyZyA9IG51bGxwdHI7Ci0gICAgaWYgKCFzdGF0ZS0+
YXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgIGlmICghc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgb2JqQXJnID0g
SlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICAg
ICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1l
bnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmplY3Qi
LCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7CiAgICAgfQotICAgIGF1dG8gc3RyQXJn
ID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvIHN0ckFy
ZyA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChX
VEZNb3ZlKG9iakFyZyksIFdURk1vdmUoc3RyQXJnKSk7CkBAIC02MzQ1LDcgKzYzNDUsNyBAQCBz
dGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZDIoRXhlY1N0YQogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgVGVzdE9iaiog
b2JqQXJnID0gbnVsbHB0cjsKLSAgICBpZiAoIXN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKSB7CisgICAgaWYgKCFzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRl
ZmluZWRPck51bGwoKSkgewogICAgICAgICBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIW9iakFy
ZykpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRo
cm93U2NvcGUsIDAsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwg
IlRlc3RPYmoiKTsKQEAgLTYzNzAsNyArNjM3MCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMyhFeGVjU3Rh
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwotICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0
YXRlKTsKKyAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dU
RlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKHN0ckFyZykpOwpAQCAtNjM5MCw3ICs2MzkwLDcg
QEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2Q0KEV4ZWNTdGEKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBsb25nQXJnID0gY29udmVy
dDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7
CisgICAgYXV0byBsb25nQXJnID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGxvbmdBcmcp
KTsKQEAgLTY0MTAsNyArNjQxMCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNShFeGVjU3RhCiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAg
IGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpKQorICAgIGlmIChV
TkxJS0VMWSghc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzT2JqZWN0KCkpKQogICAgICAg
ICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCB0aHJvd1Nj
b3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIik7CiAg
ICAgYXV0byBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOwogICAg
IGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGNhbGxiYWNrKSk7CkBAIC02NDMxLDcgKzY0
MzEsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDYoRXhlY1N0YQogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAg
RE9NU3RyaW5nTGlzdCogbGlzdEFyZyA9IG51bGxwdHI7Ci0gICAgaWYgKCFzdGF0ZS0+YXJndW1l
bnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgIGlmICghc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgbGlzdEFyZyA9IEpTRE9N
U3RyaW5nTGlzdDo6dG9XcmFwcGVkKHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAg
ICAgIGlmIChVTkxJS0VMWSghbGlzdEFyZykpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1
bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJsaXN0QXJnIiwgIlRlc3RPYmpl
Y3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJET01TdHJpbmdMaXN0Iik7CkBAIC02NDUzLDcgKzY0
NTMsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDcoRXhlY1N0YQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGFycmF5QXJnID0g
dG9OYXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBh
dXRvIGFycmF5QXJnID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
aW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUoYXJyYXlBcmcpKTsKQEAgLTY0NzMsNyArNjQ3
Myw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kOChFeGVjU3RhCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gb2JqQXJnID0gSlNU
ZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIG9iakFyZyA9
IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFvYmpBcmcpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVF
cnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJvdmVy
bG9hZGVkTWV0aG9kIiwgIlRlc3RPYmoiKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoKm9i
akFyZyk7CkBAIC02NDkzLDcgKzY0OTMsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDkoRXhlY1N0YQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
LSAgICBhdXRvIGFycmF5QXJnID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUt
PmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFycmF5QXJnID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUoYXJyYXlB
cmcpKTsKQEAgLTY1MTMsNyArNjUxMyw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTAoRXhlY1N0CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwot
ICAgIGF1dG8gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PHVpbnQzMl90Pigqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSk7CisgICAgYXV0byBhcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8dWludDMy
X3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUoYXJy
YXlBcmcpKTsKQEAgLTY1MzMsNyArNjUzMyw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEoRXhlY1N0CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwotICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRl
KTsKKyAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0
cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
b3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKHN0ckFyZykpOwpAQCAtNjYxNSw3ICs2NjE1LDcgQEAg
c3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW8KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJn
dW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgVGVzdE9iaiogb2JqQXJnID0gbnVsbHB0cjsKQEAgLTY2NDIs
NyArNjY0Miw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvCiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBUZXN0T2JqKiBvYmpBcmcgPSBudWxscHRyOwotICAgIGlmICghc3RhdGUtPmFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICBpZiAoIXN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgIG9iakFyZyA9IEpTVGVzdE9i
ajo6dG9XcmFwcGVkKHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgICAgIGlmIChV
TkxJS0VMWSghb2JqQXJnKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVy
cm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJs
b2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIiLCAiVGVzdE9iaiIpOwpAQCAtNjcxOCw3
ICs2NzE4LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1
Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDExKEV4ZWMKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGFyZyA9IGNvbnZlcnQ8aW50
MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAg
IGF1dG8gYXJnID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKFdURk1vdmUoYXJnKSk7CkBAIC02
NzM1LDcgKzY3MzUsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNv
bnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTIoRXhlYwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gdHlwZSA9IHN0YXRl
LT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byB0eXBlID0gc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZDEoV1RGTW92
ZSh0eXBlKSk7CkBAIC02Nzc4LDEwICs2Nzc4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcChFeGVj
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwotICAgIGF1dG8gb2JqQXJnc1Nob3J0ID0gY29udmVydDx1aW50MTZfdD4oKnN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCksIENsYW1wKTsKKyAgICBhdXRvIG9iakFyZ3NTaG9ydCA9IGNvbnZl
cnQ8dWludDE2X3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBDbGFtcCk7
CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8gb2JqQXJnc0xvbmcg
PSBjb252ZXJ0PHVpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwgQ2xhbXApOwor
ICAgIGF1dG8gb2JqQXJnc0xvbmcgPSBjb252ZXJ0PHVpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgxKSwgQ2xhbXApOwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpbXBsLmNsYXNzTWV0aG9kV2l0aENsYW1wKFdURk1vdmUob2JqQXJnc1Nob3J0
KSwgV1RGTW92ZShvYmpBcmdzTG9uZykpOwpAQCAtNjgwMSwxMCArNjgwMSwxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRo
b2RXaXRoRW5mb3JjZVJhbgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIG9iakFyZ3NTaG9ydCA9IGNvbnZlcnQ8dWlu
dDE2X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBFbmZvcmNlUmFuZ2UpOworICAgIGF1
dG8gb2JqQXJnc1Nob3J0ID0gY29udmVydDx1aW50MTZfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCksIEVuZm9yY2VSYW5nZSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIGF1dG8gb2JqQXJnc0xvbmcgPSBjb252ZXJ0PHVpbnQzMl90Pigqc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgxKSwgRW5mb3JjZVJhbmdlKTsKKyAgICBhdXRvIG9iakFyZ3NMb25n
ID0gY29udmVydDx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSks
IEVuZm9yY2VSYW5nZSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwuY2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlKFdURk1vdmUob2JqQXJnc1Nob3J0KSwgV1RG
TW92ZShvYmpBcmdzTG9uZykpOwpAQCAtNjgyNCw3ICs2ODI0LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVbnNpZ25l
ZExvbmdTZXEKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7Ci0gICAgYXV0byB1bnNpZ25lZExvbmdTZXF1ZW5jZSA9IHRvTmF0aXZlQXJy
YXk8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIHVuc2ln
bmVkTG9uZ1NlcXVlbmNlID0gdG9OYXRpdmVBcnJheTx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbXBsLm1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZShXVEZNb3ZlKHVuc2lnbmVk
TG9uZ1NlcXVlbmNlKSk7CkBAIC02ODQ1LDcgKzY4NDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbihF
eGVjUwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
YXV0byB2YWx1ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCkpOworICAgIGF1dG8gdmFsdWVzID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdBcnJheUZ1bmN0aW9uKFdURk1vdmUodmFsdWVzKSwg
ZWMpKTsKQEAgLTY4NjgsNyArNjg2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0RnVuY3Rpb24oRXhlCiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRvIHZhbHVl
cyA9IEpTRE9NU3RyaW5nTGlzdDo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAg
YXV0byB2YWx1ZXMgPSBKU0RPTVN0cmluZ0xpc3Q6OnRvV3JhcHBlZChzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWSghdmFsdWVzKSkKICAgICAgICAgcmV0dXJu
IHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAidmFsdWVzIiwg
IlRlc3RPYmplY3QiLCAiZG9tU3RyaW5nTGlzdEZ1bmN0aW9uIiwgIkRPTVN0cmluZ0xpc3QiKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBpbXBsLmRvbVN0cmluZ0xpc3RGdW5jdGlvbigqdmFsdWVzLCBlYykpOwpAQCAtNjg5MCwx
MCArNjg5MCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGFycmF5
QXJnID0gdG9OYXRpdmVBcnJheTx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkp
OworICAgIGF1dG8gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PHVpbnQzMl90Pigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIGF1dG8gbnVsbGFibGVBcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8dWludDMyX3Q+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpKTsKKyAgICBhdXRvIG51bGxhYmxlQXJyYXlBcmcg
PSB0b05hdGl2ZUFycmF5PHVpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgxKSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9k
V2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVlbmNlKFdURk1vdmUoYXJyYXlBcmcpLCBXVEZNb3Zl
KG51bGxhYmxlQXJyYXlBcmcpKTsKQEAgLTY5MTMsNyArNjkxMyw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZChF
eGVjU3RhdGUqCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwotICAgIGF1dG8gZWxlbWVudElkID0gQXRvbWljU3RyaW5nKHN0YXRlLT5h
cmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvRXhpc3RpbmdBdG9taWNTdHJpbmcoc3RhdGUp
KTsKKyAgICBhdXRvIGVsZW1lbnRJZCA9IEF0b21pY1N0cmluZyhzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0V4aXN0aW5nQXRvbWljU3RyaW5nKHN0YXRlKSk7
CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuZ2V0RWxlbWVudEJ5
SWQoV1RGTW92ZShlbGVtZW50SWQpKSk7CkBAIC02OTUzLDcgKzY5NTMsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDEoRXhl
Y1N0YXRlKiBzdGF0ZQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHZhbHVlID0gSlNUZXN0Tm9kZTo6dG9XcmFwcGVk
KHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgYXV0byB2YWx1ZSA9IEpTVGVzdE5vZGU6OnRvV3Jh
cHBlZChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWSghdmFs
dWUpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93
U2NvcGUsIDAsICJ2YWx1ZSIsICJUZXN0T2JqZWN0IiwgImNvbnZlcnQxIiwgIlRlc3ROb2RlIik7
CiAgICAgaW1wbC5jb252ZXJ0MSgqdmFsdWUpOwpAQCAtNjk3NCw3ICs2OTc0LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQy
KEV4ZWNTdGF0ZSogc3RhdGUKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIFRlc3ROb2RlKiB2YWx1
ZSA9IG51bGxwdHI7Ci0gICAgaWYgKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51
bGwoKSkgeworICAgIGlmICghc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVk
T3JOdWxsKCkpIHsKICAgICAgICAgdmFsdWUgPSBKU1Rlc3ROb2RlOjp0b1dyYXBwZWQoc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCF2YWx1ZSkpCiAg
ICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2Nv
cGUsIDAsICJ2YWx1ZSIsICJUZXN0T2JqZWN0IiwgImNvbnZlcnQyIiwgIlRlc3ROb2RlIik7CkBA
IC02OTk2LDcgKzY5OTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDMoRXhlY1N0YXRlKiBzdGF0ZQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRv
IHZhbHVlID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRv
IHZhbHVlID0gc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsK
ICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5jb252ZXJ0MyhXVEZN
b3ZlKHZhbHVlKSk7CkBAIC03MDE2LDcgKzcwMTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDQoRXhlY1N0YXRlKiBzdGF0
ZQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKLSAgICBhdXRvIHZhbHVlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxD
aGVjayhzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIHZhbHVlID0gdmFsdWVU
b1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5j
b252ZXJ0NChXVEZNb3ZlKHZhbHVlKSk7CkBAIC03MDgxLDcgKzcwODEsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNTdHJp
bmdNZXRob2QoRXhlYwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGhlYWQgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9X
VEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gaGVhZCA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGF1dG8gdGFpbCA9IHRvQXJndW1lbnRzPFZhcmlhZGljSGVscGVyPEpTQzo6SlNWYWx1
ZSwgU3RyaW5nPj4oKnN0YXRlLCAxKTsKQEAgLTcxMDQsNyArNzEwNCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJs
ZU1ldGhvZChFeGVjCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gaGVhZCA9IGNvbnZlcnQ8ZG91YmxlPigqc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7CisgICAgYXV0
byBoZWFkID0gY29udmVydDxkb3VibGU+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgYXV0byB0YWlsID0gdG9Bcmd1bWVudHM8VmFyaWFkaWNIZWxwZXI8SlND
OjpKU1ZhbHVlLCBkb3VibGU+Pigqc3RhdGUsIDEpOwpAQCAtNzEyNyw3ICs3MTI3LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlh
ZGljTm9kZU1ldGhvZChFeGVjU3QKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBoZWFkID0gSlNOb2RlOjp0b1dyYXBw
ZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGhlYWQgPSBKU05vZGU6OnRvV3JhcHBl
ZChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWSghaGVhZCkp
CiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgMCwgImhlYWQiLCAiVGVzdE9iamVjdCIsICJ2YXJpYWRpY05vZGVNZXRob2QiLCAiTm9kZSIp
OwogICAgIGF1dG8gdGFpbCA9IHRvQXJndW1lbnRzPFZhcmlhZGljSGVscGVyPEpTTm9kZSwgTm9k
ZT4+KCpzdGF0ZSwgMSk7CkBAIC03MTUwLDEwICs3MTUwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnkoRXhlY1N0YXRlKiBzdGF0
ZSkKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7Ci0gICAgYXV0byBhID0gY29udmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOworICAgIGF1dG8gYSA9IGNvbnZlcnQ8
ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTaG91bGRBbGxvd05v
bkZpbml0ZTo6WWVzKTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0
byBiID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwgTm9ybWFs
Q29udmVyc2lvbik7CisgICAgYXV0byBiID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuYW55KFdURk1vdmUoYSksIFdURk1vdmUoYikp
OwpAQCAtNzIwNCw3ICs3MjA0LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmwKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAg
YXV0byBhID0gY29udmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIFNob3Vs
ZEFsbG93Tm9uRmluaXRlOjpObyk7CisgICAgYXV0byBhID0gY29udmVydDxmbG9hdD4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObyk7
CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwudGVzdFByb21pc2VG
dW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50KFdURk1vdmUoYSksIFdURk1vdmUocHJvbWlzZSkpOwpA
QCAtNzI4Myw3ICs3MjgzLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmMKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0
byBhID0gY29udmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIFNob3VsZEFs
bG93Tm9uRmluaXRlOjpObyk7CisgICAgYXV0byBhID0gY29udmVydDxmbG9hdD4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObyk7CiAg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwudGVzdFByb21pc2VPdmVy
bG9hZGVkRnVuY3Rpb24oV1RGTW92ZShhKSwgV1RGTW92ZShwcm9taXNlKSk7CkBAIC03MzExLDcg
KzczMTEsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuYwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHJlcXVlc3Qg
PSBKU0ZldGNoUmVxdWVzdDo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgYXV0
byByZXF1ZXN0ID0gSlNGZXRjaFJlcXVlc3Q6OnRvV3JhcHBlZChzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWSghcmVxdWVzdCkpCiAgICAgICAgIHJldHVybiB0
aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgInJlcXVlc3QiLCAi
VGVzdE9iamVjdCIsICJ0ZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbiIsICJGZXRjaFJlcXVl
c3QiKTsKICAgICBpbXBsLnRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uKCpyZXF1ZXN0LCBX
VEZNb3ZlKHByb21pc2UpKTsKQEAgLTc0MTYsNyArNzQxNiw3IEBAIHN0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2Fk
MShFeGVjCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwotICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5n
KHN0YXRlKTsKKyAgICBhdXRvIHN0ciA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dU
RlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwuY29uZGl0aW9uYWxPdmVybG9hZChXVEZNb3ZlKHN0cikpOwpAQCAtNzQzOSw3ICs3NDM5LDcg
QEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNvbmRpdGlvbmFsT3ZlcmxvYWQyKEV4ZWMKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBhID0gY29udmVydDxpbnQz
Ml90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAg
YXV0byBhID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwuY29uZGl0aW9uYWxPdmVybG9hZChXVEZNb3ZlKGEpKTsKQEAgLTc0ODIsNyAr
NzQ4Miw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkCiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gc3RyID0gc3Rh
dGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvIHN0ciA9IHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuc2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZChX
VEZNb3ZlKHN0cikpOwpAQCAtNzUwMyw3ICs3NTAzLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3Zlcmxv
YWQKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7Ci0gICAgYXV0byBhID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBhID0gY29udmVydDxpbnQzMl90
Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7
CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuc2luZ2xlQ29uZGl0
aW9uYWxPdmVybG9hZChXVEZNb3ZlKGEpKTsKQEAgLTc1NDIsNyArNzU0Miw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hTaGFk
b3dSb290KEV4ZWNTdGF0CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gaW5pdCA9IGNvbnZlcnREaWN0aW9uYXJ5PFRl
c3RPYmo6OkRpY3Rpb25hcnk+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRv
IGluaXQgPSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGltcGwuYXR0YWNoU2hhZG93Um9vdChpbml0LnZhbHVlKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCmluZGV4IDJmODJmZDUxYjcyM2Ey
NTdiMzFlYjdhNDAwNGRkMDUyMmJkM2NiM2QuLjUyM2ZkZTRkMDQxZmQ4ZGFhMzMzNDkzNDI0Y2M4
Njg3YmE4NjRhODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cy5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25z
dHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMShFeGVjU3RhdGUqIHMKICAgICBBU1NF
UlQoY2FzdGVkVGhpcyk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGFycmF5QnVmZmVy
ID0gdG9BcnJheUJ1ZmZlcihzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJyYXlCdWZm
ZXIgPSB0b0FycmF5QnVmZmVyKHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghYXJyYXlCdWZmZXIp
KQpAQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVj
dEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMyKEV4ZWNTdGF0ZSogcwogICAgIEFTU0VSVChj
YXN0ZWRUaGlzKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gYXJyYXlCdWZmZXJWaWV3
ID0gdG9BcnJheUJ1ZmZlclZpZXcoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFycmF5
QnVmZmVyVmlldyA9IHRvQXJyYXlCdWZmZXJWaWV3KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSgh
YXJyYXlCdWZmZXJWaWV3KSkKQEAgLTExMCw3ICsxMTAsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29k
ZWRKU1ZhbHVlIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMzKEV4ZWNTdGF0
ZSogcwogICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1
dG8gYmxvYiA9IEpTQmxvYjo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgYXV0
byBibG9iID0gSlNCbG9iOjp0b1dyYXBwZWQoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWJsb2IpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5
cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJibG9iIiwgIlRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzIiwgbnVsbHB0ciwgIkJsb2IiKTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoKmJsb2IpOwpAQCAtMTI2LDcgKzEyNiw3IEBAIHN0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yczQoRXhlY1N0YXRlKiBzCiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7Ci0gICAgYXV0byBzdHJpbmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJp
bmcoc3RhdGUpOworICAgIGF1dG8gc3RyaW5nID0gc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgYXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKFdURk1v
dmUoc3RyaW5nKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAKaW5kZXggMmQwYTkwZmI0NTM5MmJlYjBjNWM4MTAw
NzRmYzViNzBkMWI4Njg3Yi4uZGRjYmNmZTVhMDQxYzBjYWM4MDU4MWEyNWY1NDY2Y2FiOGNlMTJm
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzV2l0aFNlcXVlbmNlLmNwcApAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29k
ZWRKU1ZhbHVlIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2UyKAogICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1
dG8gc3RyaW5nID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBh
dXRvIHN0cmluZyA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0
ZSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqZWN0ID0g
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmNyZWF0ZShXVEZNb3ZlKHN0
cmluZykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCmluZGV4IGViMTA0ODI2
ZTZlNGQ1NWM2NjhhNjdiY2U1YThiY2MxZTg0NGI1NGIuLjYzMjQ2NjA1NzEyMjBhYTYwYjkxNTNj
MzA2MTFhMzcxNmMyNjRjNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAK
QEAgLTIwOSw3ICsyMDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE92
ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXRlbShFeAogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRv
IG5hbWUgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8g
bmFtZSA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CiAg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwubmFtZWRJdGVtKFdURk1v
dmUobmFtZSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCmluZGV4IDNiMjE4ODA5ZGEzYzdkZGFiOWU3
ZDk1YjA3NGU3MDhlZTUzMjdlNjEuLjk3N2QxZjllNDg0OWNhMzFmMWE4MWJhMGRjMDE2ZGJhYTZk
Y2MzODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RUeXBlZGVmcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcApAQCAtMTMxLDEwICsxMzEsMTAgQEAgdGVtcGxh
dGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0
b3I6OmNvbnN0cnVjdChFeGUKICAgICBBU1NFUlQoY2FzdGVkVGhpcyk7CiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKLSAgICBhdXRvIGhlbGxvID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0
YXRlKTsKKyAgICBhdXRvIGhlbGxvID0gc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaWYg
KFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNPYmplY3QoKSkpCisgICAgaWYgKFVOTElL
RUxZKCFzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkuaXNPYmplY3QoKSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIHRocm93U2NvcGUs
IDEsICJ0ZXN0Q2FsbGJhY2siLCAiVGVzdFR5cGVkZWZzIiwgbnVsbHB0cik7CiAgICAgYXV0byB0
ZXN0Q2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgxKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBhdXRv
IG9iamVjdCA9IFRlc3RUeXBlZGVmczo6Y3JlYXRlKFdURk1vdmUoaGVsbG8pLCAqdGVzdENhbGxi
YWNrKTsKQEAgLTUxNiwxMyArNTE2LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNldFNoYWRvdyhFeGVjU3RhdGUqCiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwot
ICAgIGF1dG8gd2lkdGggPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7CisgICAgYXV0byB3aWR0aCA9IGNvbnZlcnQ8
ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTaG91bGRBbGxvd05v
bkZpbml0ZTo6WWVzKTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0
byBoZWlnaHQgPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwgU2hv
dWxkQWxsb3dOb25GaW5pdGU6Olllcyk7CisgICAgYXV0byBoZWlnaHQgPSBjb252ZXJ0PGZsb2F0
Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgU2hvdWxkQWxsb3dOb25GaW5p
dGU6Olllcyk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8gYmx1
ciA9IGNvbnZlcnQ8ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDIpLCBTaG91bGRBbGxv
d05vbkZpbml0ZTo6WWVzKTsKKyAgICBhdXRvIGJsdXIgPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7
CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gY29sb3IgPSBzdGF0
ZS0+YXJndW1lbnQoMykuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDMpLnRvV1RGU3RyaW5nKHN0YXRlKTsKQEAgLTU0OCw3ICs1NDgsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoU2VxdWVuY2VBcgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHNlcXVlbmNlQXJnID0gdG9SZWZQdHJO
YXRpdmVBcnJheTxTZXJpYWxpemVkU2NyaXB0VmFsdWUsIEpTU2VyaWFsaXplZFNjcmlwdFZhbHVl
Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgYXV0byBzZXF1ZW5jZUFyZyA9IHRv
UmVmUHRyTmF0aXZlQXJyYXk8U2VyaWFsaXplZFNjcmlwdFZhbHVlLCBKU1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGlt
cGwubWV0aG9kV2l0aFNlcXVlbmNlQXJnKFdURk1vdmUoc2VxdWVuY2VBcmcpKSk7CkBAIC01Njgs
NyArNTY4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZUFyZygKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBzZXF1ZW5j
ZUFyZyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7
CisgICAgYXV0byBzZXF1ZW5jZUFyZyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGltcGwubnVsbGFibGVTZXF1ZW5jZUFyZyhXVEZNb3ZlKHNlcXVlbmNlQXJnKSk7
CkBAIC01ODgsNyArNTg4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RU
eXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcChFeGVjU3QKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0
byBhcmcxID0gY29udmVydDx1aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIENs
YW1wKTsKKyAgICBhdXRvIGFyZzEgPSBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSwgQ2xhbXApOwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBhdXRvIGFyZzIgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/
IE9wdGlvbmFsPHVpbnQ2NF90PigpIDogY29udmVydDx1aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMSksIENsYW1wKTsKQEAgLTYyNyw3ICs2MjcsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJp
bmdTZXF1ZW5jZUZ1bmN0aQogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgYXV0byB2YWx1ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGF1dG8gdmFsdWVzID0gdG9OYXRpdmVBcnJheTxTdHJp
bmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uKFdU
Rk1vdmUodmFsdWVzKSwgZWMpKTsKQEAgLTY1MCw3ICs2NTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5j
ZUZ1bmN0aQogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgYXV0byB2YWx1ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+YXJn
dW1lbnQoMCkpOworICAgIGF1dG8gdmFsdWVzID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMihXVEZNb3ZlKHZh
bHVlcyksIGVjKSk7CkBAIC02NzIsNyArNjcyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXQK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7Ci0gICAgYXV0byBzZXF1ZW5jZUFyZyA9IHRvUmVmUHRyTmF0aXZlQXJyYXk8VGVzdEV2ZW50
VGFyZ2V0LCBKU1Rlc3RFdmVudFRhcmdldD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwor
ICAgIGF1dG8gc2VxdWVuY2VBcmcgPSB0b1JlZlB0ck5hdGl2ZUFycmF5PFRlc3RFdmVudFRhcmdl
dCwgSlNUZXN0RXZlbnRUYXJnZXQ+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc0Jvb2xlYW4oaW1wbC5jYWxsV2l0aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZShXVEZN
b3ZlKHNlcXVlbmNlQXJnKSkpOwo=
</data>
<flag name="review"
          id="312920"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>