<?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>209445</bug_id>
          
          <creation_ts>2020-03-23 15:57:59 -0700</creation_ts>
          <short_desc>Function passed to addEventListener may get garbage collected before the event listener is even added</short_desc>
          <delta_ts>2020-03-25 14:59:58 -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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=209504</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>209552</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jsbell</cc>
    
    <cc>mark.lam</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1633091</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-23 15:57:59 -0700</bug_when>
    <thetext>Function passed to addEventListener may get garbage collected before the event listener is even added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633107</commentid>
    <comment_count>1</comment_count>
      <attachid>394319</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-23 16:19:44 -0700</bug_when>
    <thetext>Created attachment 394319
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633111</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-23 16:20:59 -0700</bug_when>
    <thetext>Implementation of addEventListener in the bindings:

static inline JSC::EncodedJSValue jsEventTargetPrototypeFunctionAddEventListenerBody(JSC::JSGlobalObject* lexicalGlobalObject, JSC::CallFrame* callFrame, typename IDLOperation&lt;JSEventTarget&gt;::ClassParameter castedThis, JSC::ThrowScope&amp; throwScope)
{
    UNUSED_PARAM(lexicalGlobalObject);
    UNUSED_PARAM(callFrame);
    UNUSED_PARAM(throwScope);
    auto&amp; impl = castedThis-&gt;wrapped();
    if (UNLIKELY(callFrame-&gt;argumentCount() &lt; 2))
        return throwVMError(lexicalGlobalObject, throwScope, createNotEnoughArgumentsError(lexicalGlobalObject));
    auto argument0 = callFrame-&gt;uncheckedArgument(0);
    auto type = convert&lt;IDLAtomStringAdaptor&lt;IDLDOMString&gt;&gt;(*lexicalGlobalObject, argument0);
    RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
    auto argument1 = callFrame-&gt;uncheckedArgument(1);
    auto callback = convert&lt;IDLNullable&lt;IDLEventListener&lt;JSEventListener&gt;&gt;&gt;(*lexicalGlobalObject, argument1, *castedThis);
    RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
    auto argument2 = callFrame-&gt;argument(2);
    auto options = argument2.isUndefined() ? false : convert&lt;IDLUnion&lt;IDLDictionary&lt;EventTarget::AddEventListenerOptions&gt;, IDLBoolean&gt;&gt;(*lexicalGlobalObject, argument2);
    RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
    impl.addEventListenerForBindings(WTFMove(type), WTFMove(callback), WTFMove(options));

    // Make sure arguments stay alive until this end of this method.
    ensureStillAliveHere(argument0);
    VM&amp; vm = JSC::getVM(lexicalGlobalObject);
    vm.heap.writeBarrier(&amp;static_cast&lt;JSObject&amp;&gt;(*castedThis), argument1);
    ensureStillAliveHere(argument1);
    ensureStillAliveHere(argument2);

    return JSValue::encode(jsUndefined());
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633113</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-23 16:21:34 -0700</bug_when>
    <thetext>Implementation of window.onmessage setter in the bindings:

static inline bool setJSDOMWindowOnmessageSetter(JSGlobalObject&amp; lexicalGlobalObject, JSDOMWindow&amp; thisObject, JSValue value, ThrowScope&amp; throwScope)
{
    UNUSED_PARAM(lexicalGlobalObject);
    UNUSED_PARAM(throwScope);
    if (!BindingSecurity::shouldAllowAccessToDOMWindow(&amp;lexicalGlobalObject, thisObject.wrapped(), ThrowSecurityError))
        return false;
    setWindowEventHandlerAttribute(lexicalGlobalObject, thisObject, thisObject.wrapped(), eventNames().messageEvent, value);

    VM&amp; vm = JSC::getVM(&amp;lexicalGlobalObject);
    vm.heap.writeBarrier(&amp;thisObject, value);
    ensureStillAliveHere(value);

    return true;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633145</commentid>
    <comment_count>4</comment_count>
      <attachid>394319</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-23 17:10:27 -0700</bug_when>
    <thetext>Comment on attachment 394319
Patch

Not a JSC / GC expert so please review carefully :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633159</commentid>
    <comment_count>5</comment_count>
      <attachid>394319</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-03-23 17:38:37 -0700</bug_when>
    <thetext>Comment on attachment 394319
Patch

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

Can you add write-barriers for setWindowEventHandlerAttribute etc.?

&gt; Source/WebCore/ChangeLog:22
&gt; +        2. At the end of the operation implementation, we call ensureStillAliveHere() on each JSValue argument
&gt; +           to make sure they stay alive until the end of the operation

Note that in binding code, arguments are in conservative stack so this is already kept alive.
For setWindowEventHandlerAttribute, I think ensureStillAliveHere is more important.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633161</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-23 17:40:17 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #5)
&gt; Comment on attachment 394319 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=394319&amp;action=review
&gt; 
&gt; Can you add write-barriers for setWindowEventHandlerAttribute etc.?

It already added them at call sites in generated bindings. See https://bugs.webkit.org/show_bug.cgi?id=209445#c3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633162</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-23 17:41:49 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #6)
&gt; (In reply to Yusuke Suzuki from comment #5)
&gt; &gt; Comment on attachment 394319 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=394319&amp;action=review
&gt; &gt; 
&gt; &gt; Can you add write-barriers for setWindowEventHandlerAttribute etc.?
&gt; 
&gt; It already added them at call sites in generated bindings. See
&gt; https://bugs.webkit.org/show_bug.cgi?id=209445#c3

Since this is GC / JSC magic, I like it better in generated bindings code than in our DOM implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633165</commentid>
    <comment_count>8</comment_count>
      <attachid>394319</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-23 17:44:05 -0700</bug_when>
    <thetext>Comment on attachment 394319
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:5139
&gt; +        push(@$outputArray, &quot;    ensureStillAliveHere(value);\n\n&quot;);

This is the bindings change that takes care of setWindowEventHandlerAttribute() and other event handlers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633658</commentid>
    <comment_count>9</comment_count>
      <attachid>394319</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-03-24 16:50:03 -0700</bug_when>
    <thetext>Comment on attachment 394319
Patch

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

r=me. It would be nice if we can have RAII class for ensureStillAliveHere, like EnsureStillAliveScope but it is OK for future patch.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:5139
&gt;&gt; +        push(@$outputArray, &quot;    ensureStillAliveHere(value);\n\n&quot;);
&gt; 
&gt; This is the bindings change that takes care of setWindowEventHandlerAttribute() and other event handlers.

Looks nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633666</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-03-24 17:01:33 -0700</bug_when>
    <thetext>Committed r258959: &lt;https://trac.webkit.org/changeset/258959&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 394319.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633667</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-24 17:02:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/60849075&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634064</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-25 14:59:58 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #9)
&gt; Comment on attachment 394319 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=394319&amp;action=review
&gt; 
&gt; r=me. It would be nice if we can have RAII class for ensureStillAliveHere,
&gt; like EnsureStillAliveScope but it is OK for future patch.

Agreed, doing so here:
https://bugs.webkit.org/show_bug.cgi?id=209552</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394319</attachid>
            <date>2020-03-23 16:19:44 -0700</date>
            <delta_ts>2020-03-24 17:01:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209445-20200323161943.patch</filename>
            <type>text/plain</type>
            <size>315263</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4ODQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjdmYWRjNGY2NmE0ODhj
ODQ0YjNjODM4YzNlNjI4ZjYxMDI2OTU2Ny4uZjUzM2QyMzE2MDNiMGNjOWQwYTZlNTA3NTBhNWZl
OWEzMjZlZWZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzOSBAQAorMjAyMC0wMy0yMyAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEZ1bmN0aW9uIHBhc3NlZCB0
byBhZGRFdmVudExpc3RlbmVyIG1heSBnZXQgZ2FyYmFnZSBjb2xsZWN0ZWQgYmVmb3JlIHRoZSBl
dmVudCBsaXN0ZW5lciBpcyBldmVuIGFkZGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk0NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBGdW5jdGlvbiBwYXNzZWQgdG8gYWRkRXZlbnRMaXN0ZW5lciBt
YXkgZ2V0IGdhcmJhZ2UgY29sbGVjdGVkIGJlZm9yZSB0aGUgZXZlbnQgbGlzdGVuZXIgaXMgZXZl
biBhZGRlZC4KKyAgICAgICAgVGhlIGlzc3VlIGlzIHRoYXQgdGhlIEpTIGJpbmRpbmdzIGZvciBh
ZGRFdmVudExpc3RlbmVyKCkgd291bGQgZmlyc3QgY3JlYXRlIGEgSlNFdmVudExpc3RlbmVyIHRv
IHN0b3JlCisgICAgICAgIHRoZSBKU0MgRnVuY3Rpb24gdGhhdCB3YXMgcGFzc2VkIGluIGFuZCB0
aGVuIGFkZCB0aGlzIEpTRXZlbnRMaXN0ZW5lciBhcyBhbiBldmVudCBsaXN0ZW5lciBvbiB0aGUK
KyAgICAgICAgRXZlbnRUYXJnZXQuIFRoZSBKU0MgZnVuY3Rpb24gaGVsZCBieSBKU0V2ZW50TGlz
dGVuZXIgaXMgc3VwcG9zZWQgdG8gZ2V0IHZpc2l0ZWQgYnkKKyAgICAgICAgSlNFdmVudExpc3Rl
bmVyOjp2aXNpdEpTRnVuY3Rpb24oKSB3aGljaCBnZXRzIGNhbGxlZCBieSBFdmVudFRhcmdldDo6
dmlzaXRKU0V2ZW50TGlzdGVuZXJzKCkgd2hpY2gKKyAgICAgICAgZ2V0cyBjYWxsZWQgZXZlcnkg
dGltZSBhbiBFdmVudFRhcmdldCB3cmFwcGVyIGdldHMgdmlzaXRlZC4gVGhlIGlzc3VlIGlzIHRo
YXQgd2hlbiB0aGUgSlNFdmVudExpc3RlbmVyCisgICAgICAgIGdldHMgY3JlYXRlZCwgdGhlIEpT
RXZlbnRMaXN0ZW5lciBpcyBub3QgeWV0IGNvbm5lY3RlZCB0byBpdHMgRXZlbnRUYXJnZXQgYW5k
IHRodXMKKyAgICAgICAgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycygpIHdvdWxk
IG5vdCB2aXNpdCBpdC4gSG93ZXZlciwgdGhlIGNvbnN0cnVjdG9yIG9mIEpTRXZlbnRMaXN0ZW5l
cgorICAgICAgICB3b3VsZCBpc3N1ZSBhIHdyaXRlIGJhcnJpZXIgb24gdGhhdCBKU0MgRnVuY3Rp
b24uCisKKyAgICAgICAgU2V2ZXJhbCBjaGFuZ2VzIHdlcmUgbWFkZSB0byBhZGRyZXNzIHRoaXMg
aXNzdWUgaW4gdGhlIGdlbmVyYXRlZCBiaW5kaW5nczoKKyAgICAgICAgMS4gV2Ugbm93IGNyZWF0
ZSBhIGxvY2FsIHZhcmlhYmxlIChuYW1lZCBhcmd1bWVudFgsIFggYmVpbmcgYXJndW1lbnQgaW5k
ZXgpIGZvciBlYWNoIGFyZ3VtZW50IHRoYXQgZ2V0cworICAgICAgICAgICBwYXNzZWQgaW4gdG8g
YW4gb3BlcmF0aW9uCisgICAgICAgIDIuIEF0IHRoZSBlbmQgb2YgdGhlIG9wZXJhdGlvbiBpbXBs
ZW1lbnRhdGlvbiwgd2UgY2FsbCBlbnN1cmVTdGlsbEFsaXZlSGVyZSgpIG9uIGVhY2ggSlNWYWx1
ZSBhcmd1bWVudAorICAgICAgICAgICB0byBtYWtlIHN1cmUgdGhleSBzdGF5IGFsaXZlIHVudGls
IHRoZSBlbmQgb2YgdGhlIG9wZXJhdGlvbgorICAgICAgICAzLiBGb3IgRXZlbnRMaXN0ZW5lcnMg
LyBFdmVudEhhbmRsZXJzLCB3ZSBhbHNvIGlzc3VlIGEgd3JpdGUgYmFycmllciBhdCB0aGUgZW5k
IG9mIHRoZSBvcGVyYXRpb24KKyAgICAgICAgICAgaW1wbGVtZW50YXRpb24sIHdoZW4gaXQgaXMg
c2FmZSB0byBkbyBzby4gTm93IHRoYXQgd2UgZG8gdGhpcyBoZXJlIGluIHRoZSBiaW5kaW5ncywg
SSBkcm9wcGVkIHRoZQorICAgICAgICAgICBjb2RlIGluIHRoZSBKU0V2ZW50TGlzdGVuZXIgY29u
c3RydWN0b3IgdG8gaXNzdWUgdGhlIHdyaXRlIGJhcnJpZXIgKGFzIHRoaXMgd2FzIHRvbyBlYXJs
eSkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXIpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2V0T3BlcmF0
aW9uUmV0dXJuZWRQYXJhbWV0ZXJOYW1lKToKKyAgICAgICAgKEdlbmVyYXRlQXR0cmlidXRlU2V0
dGVyQm9keURlZmluaXRpb24pOgorICAgICAgICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOgor
ICAgICAgICAoR2VuZXJhdGVFbnN1cmVTdGlsbEFsaXZlQ2FsbHNGb3JBcmd1bWVudHMpOgorICAg
ICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpq
c01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkdldEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNN
YXBMaWtlUHJvdG90eXBlRnVuY3Rpb25IYXNCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzTWFw
TGlrZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllc0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNN
YXBMaWtlUHJvdG90eXBlRnVuY3Rpb25LZXlzQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc01h
cExpa2VQcm90b3R5cGVGdW5jdGlvblZhbHVlc0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNN
YXBMaWtlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpq
c01hcExpa2VQcm90b3R5cGVGdW5jdGlvblNldEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNN
YXBMaWtlUHJvdG90eXBlRnVuY3Rpb25EZWxldGVCb2R5KToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
anNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbkdldEJvZHkpOgorICAgICAgICAoV2Vi
Q29yZTo6anNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbkhhc0JvZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6anNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNCb2R5
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25L
ZXlzQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1
bmN0aW9uVmFsdWVzQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1JlYWRPbmx5TWFwTGlrZVBy
b3RvdHlwZUZ1bmN0aW9uRm9yRWFjaEJvZHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1JlYWRPbmx5U2V0TGlrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1JlYWRP
bmx5U2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uSGFzQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1JlYWRPbmx5U2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllc0JvZHkpOgorICAgICAgICAo
V2ViQ29yZTo6anNSZWFkT25seVNldExpa2VQcm90b3R5cGVGdW5jdGlvbktleXNCb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzUmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNC
b2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzUmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlRnVuY3Rp
b25Gb3JFYWNoQm9keSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2V0
TGlrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvbkhh
c0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25FbnRy
aWVzQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvbktl
eXNCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzU2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uVmFs
dWVzQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvbkZv
ckVhY2hCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzU2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9u
QWRkQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvbkRl
bGV0ZUJvZHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3Rp
dmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0QWN0aXZlRE9NT2JqZWN0
UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1bmN0aW9uQm9keSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlQm9keSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2QxQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RBY3RpdmVE
T01PYmplY3RQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyQm9keSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclByb3Rv
dHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDYWxs
VHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uV2l0aEFyZ3VtZW50c0JvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9w
ZXJhdGlvbldpdGhOdWxsYWJsZUFyZ3VtZW50Qm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uV2l0aFZhcmlhbnRBcmd1
bWVudEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1
bmN0aW9uVGVzdE9wZXJhdGlvbldpdGhOdWxsYWJsZVZhcmlhbnRBcmd1bWVudEJvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJh
dGlvbldpdGhPcHRpb25hbFZhcmlhbnRBcmd1bWVudEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbldpdGhEZWZhdWx0
VmFyaWFudEFyZ3VtZW50Qm9keSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdERPTUpJVC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRQcm90b3R5
cGVGdW5jdGlvbkdldEF0dHJpYnV0ZUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9N
SklUUHJvdG90eXBlRnVuY3Rpb25JdGVtQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RE
T01KSVRQcm90b3R5cGVGdW5jdGlvbkhhc0F0dHJpYnV0ZUJvZHkpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZEJvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50c0J5
TmFtZUJvZHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFi
bGVkQnlTZXR0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEVuYWJsZWRCeVNldHRp
bmdQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRCeVNldHRpbmdPcGVyYXRpb25Cb2R5KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNv
bnN0cnVjdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBl
RnVuY3Rpb25JdGVtQm9keSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmpl
Y3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxhck9wZXJhdGlvbkJvZHkpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVy
YXRpb24xQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5j
ZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjJCb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9yRnVuY3Rpb25FbmFibGVkQXRSdW50aW1l
T3BlcmF0aW9uU3RhdGljQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmpl
Y3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZEJvZHkpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNp
ZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkQm9keSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3Js
ZFdoZW5SdW50aW1lRmVhdHVyZXNFbmFibGVkQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uR2V0U2VjcmV0Qm9vbGVhbkJvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblRlc3RGZWF0
dXJlR2V0U2VjcmV0Qm9vbGVhbkJvZHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25J
bmRleGVkU2V0dGVyQm9keSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVBy
b3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uVGFrZU5vZGVzQm9keSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1l
dGhvZDJCb2R5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NZXRob2RCb2R5KToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbk5hbWVkU2V0dGVyQm9keSk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclBy
b3RvdHlwZUZ1bmN0aW9uSW5kZXhlZFNldHRlckJvZHkpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRo
SWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROYW1lZERlbGV0ZXJXaXRo
SWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uTmFtZWREZWxldGVyQm9keSk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllclBy
b3RvdHlwZUZ1bmN0aW9uR2V0dGVyTmFtZUJvZHkpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlv
bk5hbWVkU2V0dGVyQm9keSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlclByb3RvdHlwZUZ1bmN0aW9uTmFtZWRT
ZXR0ZXJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0ZXJCb2R5KToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckFuZFNldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlckJvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNl
dHRlclByb3RvdHlwZUZ1bmN0aW9uSW5kZXhlZFNldHRlcjFCb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJQcm90b3R5cGVG
dW5jdGlvbkluZGV4ZWRTZXR0ZXIyQm9keSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Tm9kZVByb3Rv
dHlwZUZ1bmN0aW9uR2V0U2VjcmV0Qm9vbGVhbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuQm9keSk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNhbGxKU1Rlc3RPYmoxKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxKU1Rlc3RP
YmoyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak9uZm9vU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak9ud2Via2l0Zm9vU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlv
bjFCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5h
YmxlZEF0UnVudGltZU9wZXJhdGlvbjJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
akNvbnN0cnVjdG9yRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uU3RhdGljQm9keSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRJblNw
ZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkQm9keSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldvcmxkU3BlY2lmaWNNZXRob2RCb2R5KToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0U2VjcmV0Qm9v
bGVhbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdzQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RCb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZFdpdGhBcmdz
Qm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0
TWV0aG9kQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk9jdGV0TWV0aG9kV2l0aEFyZ3NCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0aEFyZ3NCb2R5KToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kQm9keSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzQm9k
eSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFi
bGVNZXRob2RCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aEFyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdCb2R5KToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFhQYXRoTlNSZXNv
bHZlclBhcmFtZXRlckJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25OdWxsYWJsZVN0cmluZ01ldGhvZEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3RhdGljTWV0aG9kQm9keSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3Ry
aW5nU3BlY2lhbE1ldGhvZEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU3RhbmRhbG9uZUVudW1BcmdCb2R5KToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsRW51bUFyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVlQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1
aXJlc0FsbEFyZ3NBbmRUaHJvd3NCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0FyZ0JvZHkpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVVU1ZTdHJp
bmdBcmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aFVTVlN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdCb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVT
dHJpbmdBcmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE51bGxhYmxlQnl0ZVN0cmluZ0FyZ0JvZHkpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0ZVN0cmluZ0FyZ1RyZWF0
aW5nTnVsbEFzRW1wdHlTdHJpbmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhSZWNvcmRCb2R5KToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvblJl
dHVybmluZ0xvbmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ09iamVjdEJvZHkpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Qcml2YXRlTWV0aG9kQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblB1YmxpY0FuZFByaXZh
dGVNZXRob2RCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQWRkRXZlbnRMaXN0ZW5lckJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyQm9keSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhFeGVjU3RhdGVPYmpCb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aEV4ZWNTdGF0ZU9iakV4
Y2VwdGlvbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZU9iakV4Y2VwdGlvbkJvZHkp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZVdpdGhTcGFjZXNCb2R5KToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnQm9k
eSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25h
bEFyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3NCb2R5KToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3Ry
aW5nQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nQW5kRGVmYXVs
dFZhbHVlQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVm
aW5lZEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nSXNOdWxsQm9keSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzRW1w
dHlTdHJpbmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZ0JvZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxB
dG9tU3RyaW5nSXNFbXB0eVN0cmluZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTkJvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxGbG9hdElzTmFOQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nQm9keSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nSXNa
ZXJvQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25n
TG9uZ0lzWmVyb0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1w
dHlCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsQm9vbGVhbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuSXNGYWxzZUJvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxBbnlCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsT2JqZWN0Qm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlckJv
ZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGxCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29s
dmVyQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbFJlY29yZEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxQcm9taXNlQm9keSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Fy
Z0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZ0JvZHkpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25h
bEFyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFj
a0Z1bmN0aW9uQXJnQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5kT3B0aW9uYWxBcmdCb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RX
aXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqQ29uc3RydWN0b3JGdW5jdGlvblN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0FyZ0JvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1l
dGhvZDFCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZDFCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDNCb2R5KToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDRCb2R5
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZDVCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZDZCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDhCb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDlC
b2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZDEwQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTJCb2R5KToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRp
b25hbFBhcmFtZXRlcjFCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjJCb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5p
b24yQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMUJvZHkpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aDJE
aXN0aW5ndWlzaGluZ1VuaW9uczJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9u
MUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24yQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5p
b24xQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24yQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24xQm9keSk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlv
bmFsVW5pb24yQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIxQm9keSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0
aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIyQm9keSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoT3B0aW9uYWxC
b2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kMTFCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVj
dG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXBCb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xh
bXBPbk9wdGlvbmFsQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZUJvZHkpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhFbmZvcmNlUmFuZ2VP
bk9wdGlvbmFsQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZUJvZHkpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkRvbVN0cmluZ0xpc3RG
dW5jdGlvbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PcGVyYXRpb25XaXRoT3B0aW9uYWxVbmlvblBhcmFtZXRlckJvZHkpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQW5kV2l0aG91dE51bGxh
YmxlU2VxdWVuY2VCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uR2V0RWxlbWVudEJ5SWRCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uR2V0U1ZHRG9jdW1lbnRCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDFCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDJCb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDNCb2R5KToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDRCb2R5KToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTXV0YWJsZVBvaW50RnVuY3Rpb25C
b2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFk
aWNTdHJpbmdNZXRob2RCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVmFyaWFkaWNEb3VibGVNZXRob2RCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNOb2RlTWV0aG9kQm9keSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljVW5pb25NZXRob2RC
b2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQW55Qm9k
eSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9t
aXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50
QXJndW1lbnRCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24xQm9keSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9u
MkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0
UmV0dXJuc093blByb21pc2VBbmRQcm9taXNlUHJveHlGdW5jdGlvbkJvZHkpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkMUJv
ZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRp
b25hbE92ZXJsb2FkMkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkMUJvZHkpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkMkJv
ZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hT
aGFkb3dSb290Qm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk9wZXJhdGlvbldpdGhFeHRlcm5hbERpY3Rpb25hcnlQYXJhbWV0ZXJCb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnVmZmVyU291cmNlUGFyYW1l
dGVyQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxl
Z2FjeUNhbGxlck5hbWVkQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRlc3RSZXR1cm5WYWx1ZU9wdGltaXphdGlvbkJvZHkpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UmV0dXJuVmFsdWVPcHRpbWl6YXRp
b25XaXRoRXhjZXB0aW9uQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRvU3RyaW5nQm9keSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczEpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczIpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczMpOgorICAgICAgICAo
V2ViQ29yZTo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczQpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UxKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0
cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UyKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlRnVuY3Rpb25O
YW1lZEl0ZW1Cb2R5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
UHJvbWlzZVJlamVjdGlvbkV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFByb21p
c2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlv
blJldHVybmluZ0JvZHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTdHJpbmdpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTdHJpbmdpZmllclBy
b3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Qcm90b3R5cGVG
dW5jdGlvblRvU3RyaW5nQm9keSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvblByb3RvdHlwZUZ1bmN0aW9uSWRlbnRpZmll
ckJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlv
blByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRB
c1Byb3RvdHlwZUZ1bmN0aW9uSWRlbnRpZmllckJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzUHJvdG90eXBlRnVuY3Rpb25Ub1N0
cmluZ0JvZHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nUHJvdG90eXBlRnVuY3Rpb25Ub1N0
cmluZ0JvZHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFN0
cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keSk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFN0cmluZ2lmaWVy
UmVhZFdyaXRlQXR0cmlidXRlUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZ0JvZHkpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNCb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3dC
b2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoU2VxdWVuY2VBcmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVk
ZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVNlcXVlbmNlQXJnQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2VxdWVuY2VPZk51bGxhYmxl
c0FyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5j
dGlvbk51bGxhYmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZ0JvZHkpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZlVuaW9u
c0FyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5j
dGlvblVuaW9uQXJnQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXBJblR5cGVkZWZCb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25Qb2ludEZ1bmN0
aW9uQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb24yQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uQ2FsbFdpdGhT
ZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGVCb2R5KToKKwogMjAyMC0wMy0yMyAgWmFsYW4gQnVq
dGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdIExheW91dDo6Qm94Ojppbml0
aWFsQ29udGFpbmluZ0Jsb2NrKCkgc2hvdWxkIHJldHVybiBjb25zdCBJbml0aWFsQ29udGFpbmlu
Z0Jsb2NrJgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExp
c3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHAKaW5kZXggYWZkNjU4NzFhOTVjODliM2I1ZGMyYzEzMzU1YzllZDFiNDVlM2U1OS4uYjdhNDg0
NjEwNjdlYzM1MTc4OTFkZDI4ODE1YmFjM2Y3YzRiNmZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCkBAIC01Myw5ICs1Myw3IEBAIEpTRXZl
bnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyKEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNPYmplY3Qq
IHdyYXBwZXIsIGJvb2wgaXNBCiB7CiAgICAgaWYgKGZ1bmN0aW9uKSB7CiAgICAgICAgIEFTU0VS
VCh3cmFwcGVyKTsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBtX2lzb2xhdGVkV29ybGQtPnZtKCk7
CiAgICAgICAgIG1fanNGdW5jdGlvbiA9IEpTQzo6V2VhazxKU0M6OkpTT2JqZWN0PihmdW5jdGlv
bik7Ci0gICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHdyYXBwZXIsIGZ1bmN0aW9uKTsKICAg
ICAgICAgbV9pc0luaXRpYWxpemVkID0gdHJ1ZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDA3ZDhlNzhl
YjdjNjc5NTM2NTE1NzU2M2NlNzQ4Zjc0NzA3NTdjNzcuLmRjNDFlNjhjMzQzYmNkY2RlYzhmNTYz
N2UzYzAzYTc5ZTc1ZTVkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0xNzQ2LDE0ICsxNzQ2LDE3IEBAIHN1YiBPcGVy
YXRpb25TaG91bGRCZU9uSW5zdGFuY2UKICAgICByZXR1cm4gMDsKIH0KIAotc3ViIE9wZXJhdGlv
bkhhc0ZvcmNlZFJldHVyblZhbHVlCitzdWIgR2V0T3BlcmF0aW9uUmV0dXJuZWRBcmd1bWVudE5h
bWUKIHsKICAgICBteSAoJG9wZXJhdGlvbikgPSBAXzsKIAorICAgIG15ICRhcmd1bWVudEluZGV4
ID0gMDsKICAgICBmb3JlYWNoIG15ICRhcmd1bWVudCAoQHskb3BlcmF0aW9uLT5hcmd1bWVudHN9
KSB7Ci0gICAgICAgIHJldHVybiAxIGlmICRhcmd1bWVudC0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
UmV0dXJuVmFsdWV9OworICAgICAgICByZXR1cm4gImFyZ3VtZW50JHthcmd1bWVudEluZGV4fSIg
aWYgJGFyZ3VtZW50LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntSZXR1cm5WYWx1ZX07CisgICAgICAg
ICRhcmd1bWVudEluZGV4Kys7CiAgICAgfQotICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHVu
ZGVmOwogfQogCiBzdWIgSXNBY2NlbGVyYXRlZERPTUF0dHJpYnV0ZQpAQCAtNTEzMSw2ICs1MTM0
LDkgQEAgc3ViIEdlbmVyYXRlQXR0cmlidXRlU2V0dGVyQm9keURlZmluaXRpb24KICAgICAgICAg
ICAgICAgICA6ICJzZXRFdmVudEhhbmRsZXJBdHRyaWJ1dGUiOwogICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICRzZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVj
dCwgdGhpc09iamVjdC53cmFwcGVkKCksICR7ZXZlbnROYW1lfSwgdmFsdWUpO1xuIik7CiAgICAg
ICAgIH0KKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiXG4gICAgVk0mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKCZ0aGlzT2JqZWN0LCB2YWx1ZSk7XG4iKTsK
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKHZh
bHVlKTtcblxuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gdHJ1
ZTtcbiIpOwogICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVjdG9yVHlwZSgk
YXR0cmlidXRlLT50eXBlKSkgewogICAgICAgICBteSAkY29uc3RydWN0b3JUeXBlID0gJGF0dHJp
YnV0ZS0+dHlwZS0+bmFtZTsKQEAgLTU4NTksNyArNTg2NSw3IEBAIHN1YiBOZWVkc0V4cGxpY2l0
UHJvcGFnYXRlRXhjZXB0aW9uQ2FsbAogCiAgICAgcmV0dXJuIDAgdW5sZXNzICRvcGVyYXRpb24t
PmV4dGVuZGVkQXR0cmlidXRlcy0+e01heVRocm93RXhjZXB0aW9ufTsKIAotICAgIHJldHVybiAk
b3BlcmF0aW9uLT50eXBlICYmICgkb3BlcmF0aW9uLT50eXBlLT5uYW1lIGVxICJ2b2lkIiB8fCAk
Y29kZUdlbmVyYXRvci0+SXNQcm9taXNlVHlwZSgkb3BlcmF0aW9uLT50eXBlKSB8fCBPcGVyYXRp
b25IYXNGb3JjZWRSZXR1cm5WYWx1ZSgkb3BlcmF0aW9uKSk7CisgICAgcmV0dXJuICRvcGVyYXRp
b24tPnR5cGUgJiYgKCRvcGVyYXRpb24tPnR5cGUtPm5hbWUgZXEgInZvaWQiIHx8ICRjb2RlR2Vu
ZXJhdG9yLT5Jc1Byb21pc2VUeXBlKCRvcGVyYXRpb24tPnR5cGUpIHx8IEdldE9wZXJhdGlvblJl
dHVybmVkQXJndW1lbnROYW1lKCRvcGVyYXRpb24pKTsKIH0KIAogc3ViIEdlbmVyYXRlUGFyYW1l
dGVyc0NoZWNrCkBAIC01OTM2LDEzICs1OTQyLDEyIEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnND
aGVjawogICAgICAgICAgICAgICAgIGFzc2VydCgiW1JldHVyblZhbHVlXSBpcyBub3Qgc3VwcG9y
dGVkIGZvciBvcHRpb25hbCBhcmd1bWVudHMiKSBpZiAkYXJndW1lbnQtPmV4dGVuZGVkQXR0cmli
dXRlcy0+e1JldHVyblZhbHVlfTsKIAogICAgICAgICAgICAgICAgIGlmIChkZWZpbmVkKCRhcmd1
bWVudC0+ZGVmYXVsdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFdpbGxDb252ZXJ0VW5k
ZWZpbmVkVG9EZWZhdWx0UGFyYW1ldGVyVmFsdWUoJHR5cGUsICRhcmd1bWVudC0+ZGVmYXVsdCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICRhcmd1bWVudExvb2t1cEZvckNvbnZlcnNpb24g
PSAiY2FsbEZyYW1lLT5hcmd1bWVudCgkYXJndW1lbnRJbmRleCkiOwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRp
bmRlbnQgLiAiYXV0byBhcmd1bWVudCR7YXJndW1lbnRJbmRleH0gPSBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KCRhcmd1bWVudEluZGV4KTtcbiIpOworICAgICAgICAgICAgICAgICAgICBpZiAoIVdpbGxD
b252ZXJ0VW5kZWZpbmVkVG9EZWZhdWx0UGFyYW1ldGVyVmFsdWUoJHR5cGUsICRhcmd1bWVudC0+
ZGVmYXVsdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRkZWZhdWx0VmFsdWUgPSBH
ZW5lcmF0ZURlZmF1bHRWYWx1ZSgkaW50ZXJmYWNlLCAkYXJndW1lbnQsICRhcmd1bWVudC0+dHlw
ZSwgJGFyZ3VtZW50LT5kZWZhdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICRvcHRpb25h
bENoZWNrID0gImNhbGxGcmFtZS0+YXJndW1lbnQoJGFyZ3VtZW50SW5kZXgpLmlzVW5kZWZpbmVk
KCkgPyAkZGVmYXVsdFZhbHVlIDogIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICRhcmd1bWVu
dExvb2t1cEZvckNvbnZlcnNpb24gPSAiY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgkYXJn
dW1lbnRJbmRleCkiCisgICAgICAgICAgICAgICAgICAgICAgICAkb3B0aW9uYWxDaGVjayA9ICJh
cmd1bWVudCR7YXJndW1lbnRJbmRleH0uaXNVbmRlZmluZWQoKSA/ICRkZWZhdWx0VmFsdWUgOiAi
OwogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICRhcmd1bWVudExv
b2t1cEZvckNvbnZlcnNpb24gPSAiYXJndW1lbnQke2FyZ3VtZW50SW5kZXh9IgogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG15ICRhcmd1bWVudElETFR5cGUg
PSBHZXRJRExUeXBlKCRpbnRlcmZhY2UsICRhcmd1bWVudC0+dHlwZSk7CiAKQEAgLTU5NTQsMTYg
KzU5NTksMTMgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICAgICAg
ICAgICAgICAkbmF0aXZlVmFsdWVDYXN0RnVuY3Rpb24gPSAiT3B0aW9uYWw8Q29udmVydGVyPCRh
cmd1bWVudElETFR5cGU+OjpSZXR1cm5UeXBlPiI7CiAgICAgICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgICAgICAkb3B0aW9uYWxDaGVjayA9ICJjYWxsRnJhbWUtPmFyZ3VtZW50
KCRhcmd1bWVudEluZGV4KS5pc1VuZGVmaW5lZCgpID8gJGRlZmF1bHRWYWx1ZSA6ICI7Ci0gICAg
ICAgICAgICAgICAgICAgICRhcmd1bWVudExvb2t1cEZvckNvbnZlcnNpb24gPSAiY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgkYXJndW1lbnRJbmRleCkiOworICAgICAgICAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiYXV0byBhcmd1bWVudCR7YXJndW1lbnRJ
bmRleH0gPSBjYWxsRnJhbWUtPmFyZ3VtZW50KCRhcmd1bWVudEluZGV4KTtcbiIpOworICAgICAg
ICAgICAgICAgICAgICAkb3B0aW9uYWxDaGVjayA9ICJhcmd1bWVudCR7YXJndW1lbnRJbmRleH0u
aXNVbmRlZmluZWQoKSA/ICRkZWZhdWx0VmFsdWUgOiAiOworICAgICAgICAgICAgICAgICAgICAk
YXJndW1lbnRMb29rdXBGb3JDb252ZXJzaW9uID0gImFyZ3VtZW50JHthcmd1bWVudEluZGV4fSI7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBpZiAoJGFyZ3VtZW50LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntSZXR1cm5WYWx1ZX0pIHsKLSAg
ICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gImF1dG8gcmV0
dXJuVmFsdWUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KCRhcmd1bWVudEluZGV4KTtc
biIpOwotICAgICAgICAgICAgICAgICAgICAkYXJndW1lbnRMb29rdXBGb3JDb252ZXJzaW9uID0g
InJldHVyblZhbHVlIjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAkYXJndW1lbnRMb29rdXBGb3JDb252ZXJzaW9uID0gImNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoJGFyZ3VtZW50SW5kZXgpIjsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gImF1dG8gYXJndW1lbnQke2FyZ3Vt
ZW50SW5kZXh9ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgkYXJndW1lbnRJbmRleCk7
XG4iKTsKKyAgICAgICAgICAgICAgICAkYXJndW1lbnRMb29rdXBGb3JDb252ZXJzaW9uID0gImFy
Z3VtZW50JHthcmd1bWVudEluZGV4fSI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG15
ICRnbG9iYWxPYmplY3RSZWZlcmVuY2UgPSAkb3BlcmF0aW9uLT5pc1N0YXRpYyA/ICIqanNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCkiIDogIipjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSI7CkBAIC02NDE2LDYgKzY0MTgsMzEgQEAgc3ViIEdlbmVyYXRlQ2Fs
bGJhY2tJbXBsZW1lbnRhdGlvbkNvbnRlbnQKICAgICBwdXNoKEAkY29udGVudFJlZiwgIn1cblxu
Iik7CiB9CiAKK3N1YiBHZW5lcmF0ZUVuc3VyZVN0aWxsQWxpdmVDYWxsc0ZvckFyZ3VtZW50cwor
eworICAgIG15ICgkb3V0cHV0QXJyYXksICRvcGVyYXRpb24sICRpbmRlbnQpID0gQF87CisKKyAg
ICBteSAkYWRkZWRTdGF0ZW1lbnRzID0gMDsKKyAgICBteSAkaGFzVk0gPSAwOworICAgIG15ICRh
cmd1bWVudEluZGV4ID0gMDsKKyAgICBmb3JlYWNoIG15ICRhcmd1bWVudCAoQHskb3BlcmF0aW9u
LT5hcmd1bWVudHN9KSB7CisgICAgICAgIGlmICghJGFyZ3VtZW50LT5pc1ZhcmlhZGljKSB7Cisg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJcbiR7aW5kZW50fS8vIE1ha2Ugc3VyZSBh
cmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC5cbiIpIGlm
ICRhcmd1bWVudEluZGV4ID09IDA7CisgICAgICAgICAgICBpZiAoJGFyZ3VtZW50LT50eXBlLT5u
YW1lIGVxICJFdmVudExpc3RlbmVyIikgeworICAgICAgICAgICAgICAgIGlmICghJGhhc1ZNKSB7
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJWTSYg
dm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpO1xuIik7CisgICAgICAgICAgICAg
ICAgICAgICRoYXNWTSA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJ2bS5oZWFwLndyaXRlQmFycmllcigmc3RhdGlj
X2Nhc3Q8SlNPYmplY3QmPigqY2FzdGVkVGhpcyksIGFyZ3VtZW50JHthcmd1bWVudEluZGV4fSk7
XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGlu
ZGVudCAuICJlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudCR7YXJndW1lbnRJbmRleH0pO1xu
Iik7CisgICAgICAgICAgICAkYWRkZWRTdGF0ZW1lbnRzID0gMTsKKyAgICAgICAgfQorICAgICAg
ICAkYXJndW1lbnRJbmRleCsrOworICAgIH0KKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJcbiIp
IGlmICRhZGRlZFN0YXRlbWVudHM7Cit9CisKIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uRnVu
Y3Rpb25DYWxsCiB7CiAgICAgbXkgKCRvdXRwdXRBcnJheSwgJG9wZXJhdGlvbiwgJGludGVyZmFj
ZSwgJGZ1bmN0aW9uU3RyaW5nLCAkaW5kZW50KSA9IEBfOwpAQCAtNjQyNiwxNSArNjQ1MywyMCBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbAogICAgICAgICBHZW5lcmF0
ZUNhbGxUcmFjZXIoJG91dHB1dEFycmF5LCAkY2FsbFRyYWNpbmdDYWxsYmFjaywgJG9wZXJhdGlv
bi0+bmFtZSwgXEBjYWxsVHJhY2VyQXJndW1lbnRzLCAkaW5kZW50KTsKICAgICB9CiAKLSAgICBp
ZiAoT3BlcmF0aW9uSGFzRm9yY2VkUmV0dXJuVmFsdWUoJG9wZXJhdGlvbikpIHsKKyAgICBteSAk
cmV0dXJuQXJndW1lbnROYW1lID0gR2V0T3BlcmF0aW9uUmV0dXJuZWRBcmd1bWVudE5hbWUoJG9w
ZXJhdGlvbik7CisgICAgaWYgKCRyZXR1cm5Bcmd1bWVudE5hbWUpIHsKICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAkaW5kZW50IC4gIiRmdW5jdGlvblN0cmluZztcbiIpOwotICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAicmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXR1
cm5WYWx1ZSk7XG4iKTsKKyAgICAgICAgR2VuZXJhdGVFbnN1cmVTdGlsbEFsaXZlQ2FsbHNGb3JB
cmd1bWVudHMoJG91dHB1dEFycmF5LCAkb3BlcmF0aW9uLCAkaW5kZW50KTsKKyAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gInJldHVybiBKU1ZhbHVlOjplbmNvZGUoJHJldHVy
bkFyZ3VtZW50TmFtZSk7XG4iKTsKICAgICB9IGVsc2lmICgkb3BlcmF0aW9uLT50eXBlLT5uYW1l
IGVxICJ2b2lkIiB8fCAoJGNvZGVHZW5lcmF0b3ItPklzUHJvbWlzZVR5cGUoJG9wZXJhdGlvbi0+
dHlwZSkgJiYgISRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1Byb21pc2VQcm94eX0p
KSB7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICIkZnVuY3Rpb25TdHJp
bmc7XG4iKTsKKyAgICAgICAgR2VuZXJhdGVFbnN1cmVTdGlsbEFsaXZlQ2FsbHNGb3JBcmd1bWVu
dHMoJG91dHB1dEFycmF5LCAkb3BlcmF0aW9uLCAkaW5kZW50KTsKICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAkaW5kZW50IC4gInJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7XG4iKTsKICAgICB9IGVsc2UgewogICAgICAgICBteSAkZ2xvYmFsT2JqZWN0UmVmZXJlbmNl
ID0gJG9wZXJhdGlvbi0+aXNTdGF0aWMgPyAiKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxl
eGljYWxHbG9iYWxPYmplY3QpIiA6ICIqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkiOwotICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAicmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSgiIC4gTmF0aXZlVG9KU1ZhbHVlVXNpbmdQb2ludGVycygkb3BlcmF0aW9uLCAkaW50ZXJmYWNl
LCAkZnVuY3Rpb25TdHJpbmcsICRnbG9iYWxPYmplY3RSZWZlcmVuY2UpIC4gIik7XG4iKTsKKyAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gImF1dG8gcmVzdWx0ID0gSlNWYWx1
ZTo6ZW5jb2RlKCIgLiBOYXRpdmVUb0pTVmFsdWVVc2luZ1BvaW50ZXJzKCRvcGVyYXRpb24sICRp
bnRlcmZhY2UsICRmdW5jdGlvblN0cmluZywgJGdsb2JhbE9iamVjdFJlZmVyZW5jZSkgLiAiKTtc
biIpOworICAgICAgICBHZW5lcmF0ZUVuc3VyZVN0aWxsQWxpdmVDYWxsc0ZvckFyZ3VtZW50cygk
b3V0cHV0QXJyYXksICRvcGVyYXRpb24sICRpbmRlbnQpOworICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICRpbmRlbnQgLiAicmV0dXJuIHJlc3VsdDtcbiIpOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNw
cAppbmRleCAwNThhM2M3YjYxZTUwMDQ5ZGIzMGM2MGYxZWM0NGY0ZjY5ZWExZWI0Li40ZGRmNWM3
ZDJlYTRjYjc2OTJjMGVjNDU1MzMwZmJkNmJhZmI1ZmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcApAQCAtMjMxLDkg
KzIzMSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJv
dG90eXBlRnVuY3Rpb25HZXRCb2R5KEpTQzo6SlNHbG9iYQogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7Ci0gICAgYXV0byBrZXkgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1l
bnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGtleSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRHZXRUb01hcExpa2Uo
KmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGtl
eSkpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZv
cndhcmRHZXRUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0
ZWRUaGlzLCBXVEZNb3ZlKGtleSkpKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0
YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQwKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25HZXQoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAt
MjQ4LDkgKzI1NCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBM
aWtlUHJvdG90eXBlRnVuY3Rpb25IYXNCb2R5KEpTQzo6SlNHbG9iYQogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7Ci0gICAgYXV0byBrZXkgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8g
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGtl
eSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRIYXNUb01h
cExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzLCBXVEZN
b3ZlKGtleSkpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExB
bnk+KGZvcndhcmRIYXNUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGtleSkpKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1l
bnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25IYXMo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQpAQCAtMjYzLDcgKzI3NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNCb2R5KEpTQzo6SlNHCiAgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRvSlM8SURMQW55Pihmb3J3YXJkRW50cmllc1RvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzTWFwTGlrZVByb3RvdHlw
ZUZ1bmN0aW9uRW50cmllcyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0yNzYsNyArMjg5LDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uS2V5c0JvZHkoSlNDOjpK
U0dsb2IKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRLZXlzVG9NYXBMaWtlKCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKTsKKyAgICBhdXRv
IHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEtleXNUb01hcExp
a2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNNYXBM
aWtlUHJvdG90eXBlRnVuY3Rpb25LZXlzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTI4OSw3ICszMDMsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNC
b2R5KEpTQzo6SlNHbAogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZFZhbHVlc1Rv
TWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpKSk7
CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRW
YWx1ZXNUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRU
aGlzKSkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMzA0LDkgKzMxOSwx
NSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90eXBl
RnVuY3Rpb25Gb3JFYWNoQm9keShKU0M6OkpTRwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0g
ICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQW55PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gY2FsbGJhY2sgPSBjb252
ZXJ0PElETEFueT4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkRm9yRWFjaFRvTWFwTGlrZSgqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMsIFdURk1vdmUoY2FsbGJh
Y2spKSkpOworICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihm
b3J3YXJkRm9yRWFjaFRvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
KmNhc3RlZFRoaXMsIFdURk1vdmUoY2FsbGJhY2spKSkpOworCisgICAgLy8gTWFrZSBzdXJlIGFy
Z3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9u
Rm9yRWFjaChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCkBAIC0zMjEsMTEgKzM0MiwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25TZXRCb2R5KEpTQzo6SlNHbG9iYQog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBrZXkgPSBjb252ZXJ0PElETERPTVN0
cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKKyAgICBhdXRvIGtleSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwor
ICAgIGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAg
ICBhdXRvIHZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDEpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9y
d2FyZFNldFRvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3Rl
ZFRoaXMsIFdURk1vdmUoa2V5KSwgV1RGTW92ZSh2YWx1ZSkpKSk7CisgICAgYXV0byByZXN1bHQg
PSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRTZXRUb01hcExpa2UoKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGtleSksIFdU
Rk1vdmUodmFsdWUpKSkpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZl
IHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJl
KGFyZ3VtZW50MCk7CisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsKKworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNNYXBM
aWtlUHJvdG90eXBlRnVuY3Rpb25TZXQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMzU0LDkgKzM4MywxNSBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25EZWxldGVC
b2R5KEpTQzo6SlNHbAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBpZiAoVU5M
SUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBrZXkgPSBj
b252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGtleSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodG9KUzxJRExBbnk+KGZvcndhcmREZWxldGVUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGtleSkpKSk7CisgICAgYXV0byBy
ZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmREZWxldGVUb01hcExp
a2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzLCBXVEZNb3Zl
KGtleSkpKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwg
dGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1l
bnQwKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25EZWxldGUoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlNYXBMaWtlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFw
TGlrZS5jcHAKaW5kZXggMzYxYjJhZDk1NzEwZmJmOGE5OWRiYWQxZGEwMGJiOGY1MDc4MzEzOS4u
YTAxODU3NzE5NjdhZmViN2FkYTE2NWE5MGMyZjA4MDlmZWYzODU4YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlNYXBMaWtlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25s
eU1hcExpa2UuY3BwCkBAIC0yMjUsOSArMjI1LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uR2V0Qm9keShKU0M6
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGtleSA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOworICAgIGF1dG8ga2V5ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFu
eT4oZm9yd2FyZEdldFRvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
KmNhc3RlZFRoaXMsIFdURk1vdmUoa2V5KSkpKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEdldFRvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMsIFdURk1vdmUoa2V5KSkpKTsKKworICAgIC8v
IE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1l
dGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1JlYWRPbmx5TWFw
TGlrZVByb3RvdHlwZUZ1bmN0aW9uR2V0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTI0Miw5ICsyNDgsMTUgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rp
b25IYXNCb2R5KEpTQzoKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8ga2V5ID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBrZXkgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRvSlM8SURMQW55Pihmb3J3YXJkSGFzVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcywgV1RGTW92ZShrZXkpKSkpOworICAgIGF1dG8gcmVz
dWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkSGFzVG9NYXBMaWtlKCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcywgV1RGTW92ZShrZXkp
KSkpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMg
ZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7
CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25IYXMoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMjU3LDcgKzI2OSw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5TWFwTGlrZVBy
b3RvdHlwZUZ1bmN0aW9uRW50cmllc0JvZHkoCiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihm
b3J3YXJkRW50cmllc1RvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
KmNhc3RlZFRoaXMpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExBbnk+KGZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2Fs
bEZyYW1lLCAqY2FzdGVkVGhpcykpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25F
bnRyaWVzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKQEAgLTI3MCw3ICsyODMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbktleXNCb2R5KEpTQwogICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEtleXNUb01hcExpa2UoKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpOworICAgIGF1dG8gcmVzdWx0ID0g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkS2V5c1RvTWFwTGlrZSgqbGV4aWNh
bEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1JlYWRPbmx5TWFwTGlr
ZVByb3RvdHlwZUZ1bmN0aW9uS2V5cyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0yODMsNyArMjk3LDggQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25W
YWx1ZXNCb2R5KEoKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRWYWx1ZXNUb01h
cExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpOwor
ICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkVmFs
dWVzVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhp
cykpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMjk4LDkg
KzMxMywxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNSZWFkT25seU1h
cExpa2VQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hCb2R5KAogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7Ci0gICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQW55PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVu
dDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gY2FsbGJhY2sg
PSBjb252ZXJ0PElETEFueT4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkRm9yRWFjaFRvTWFwTGlr
ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMsIFdURk1vdmUo
Y2FsbGJhY2spKSkpOworICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURM
QW55Pihmb3J3YXJkRm9yRWFjaFRvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxG
cmFtZSwgKmNhc3RlZFRoaXMsIFdURk1vdmUoY2FsbGJhY2spKSkpOworCisgICAgLy8gTWFrZSBz
dXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgor
ICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzUmVhZE9ubHlNYXBMaWtlUHJv
dG90eXBlRnVuY3Rpb25Gb3JFYWNoKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5U2V0TGlrZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seVNldExpa2UuY3BwCmluZGV4IDVk
MjEwMmM3MzM4ZjVjZWRjZDg1MGMyNWQ3ZDQ0NjVhYjY3MTlhMTAuLmRmN2M0NjFiZjY0Y2MzNTcy
YTE5YmI2MjcxZjk5NTcxMjU2NjM4YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5U2V0TGlrZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlTZXRMaWtlLmNwcApAQCAt
MjIzLDkgKzIyMywxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNSZWFk
T25seVNldExpa2VQcm90b3R5cGVGdW5jdGlvbkhhc0JvZHkoSlNDOgogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7Ci0gICAgYXV0byBrZXkgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8g
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGtl
eSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRIYXNUb1Nl
dExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzLCBXVEZN
b3ZlKGtleSkpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExB
bnk+KGZvcndhcmRIYXNUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGtleSkpKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1l
bnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNSZWFkT25seVNldExpa2VQcm90b3R5cGVGdW5j
dGlvbkhhcyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCkBAIC0yMzgsNyArMjQ0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzUmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQm9keSgKICAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRFbnRyaWVzVG9TZXRMaWtlKCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEVudHJpZXNUb1NldExpa2Uo
KmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNSZWFkT25s
eVNldExpa2VQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMjUxLDcgKzI1OCw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5U2V0TGlrZVByb3RvdHlw
ZUZ1bmN0aW9uS2V5c0JvZHkoSlNDCiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJk
S2V5c1RvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRo
aXMpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZv
cndhcmRLZXlzVG9TZXRMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2Fz
dGVkVGhpcykpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzUmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25LZXlzKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTI2
NCw3ICsyNzIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNSZWFkT25s
eVNldExpa2VQcm90b3R5cGVGdW5jdGlvblZhbHVlc0JvZHkoSgogICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pT
PElETEFueT4oZm9yd2FyZFZhbHVlc1RvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
bGxGcmFtZSwgKmNhc3RlZFRoaXMpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNv
ZGUodG9KUzxJRExBbnk+KGZvcndhcmRWYWx1ZXNUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNSZWFkT25seVNldExpa2VQcm90b3R5cGVG
dW5jdGlvblZhbHVlcyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCkBAIC0yNzksOSArMjg4LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5U2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaEJv
ZHkoCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGNhbGxiYWNrID0gY29udmVy
dDxJRExBbnk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCk7CisgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQW55PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExB
bnk+KGZvcndhcmRGb3JFYWNoVG9TZXRMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZy
YW1lLCAqY2FzdGVkVGhpcywgV1RGTW92ZShjYWxsYmFjaykpKSk7CisgICAgYXV0byByZXN1bHQg
PSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRGb3JFYWNoVG9TZXRMaWtlKCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcywgV1RGTW92ZShjYWxs
YmFjaykpKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwg
dGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1l
bnQwKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNSZWFkT25seVNldExpa2VQcm90b3R5cGVGdW5jdGlvbkZvckVhY2goSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2V0TGlrZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXRMaWtlLmNw
cAppbmRleCAwMDZmZjk1Nzc4YzI2MmJmODIyYzNjNDkyOTdlNWI3NGUzN2UzNGFjLi5jNDIzNDNl
NmQyY2M3Zjg5NjNmNjRiNTJiMTFmZGU5NWE2YmNjYWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXRMaWtlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXRMaWtlLmNwcApAQCAtMjI5LDkg
KzIyOSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNTZXRMaWtlUHJv
dG90eXBlRnVuY3Rpb25IYXNCb2R5KEpTQzo6SlNHbG9iYQogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7Ci0gICAgYXV0byBrZXkgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1l
bnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGtleSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRIYXNUb1NldExpa2Uo
KmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGtl
eSkpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZv
cndhcmRIYXNUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0
ZWRUaGlzLCBXVEZNb3ZlKGtleSkpKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0
YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQwKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25IYXMoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAt
MjQ0LDcgKzI1MCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1NldExp
a2VQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNCb2R5KEpTQzo6SlNHCiAgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRv
SlM8SURMQW55Pihmb3J3YXJkRW50cmllc1RvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwg
KmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRFbnRyaWVzVG9TZXRMaWtlKCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKTsKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzU2V0TGlrZVByb3RvdHlwZUZ1bmN0
aW9uRW50cmllcyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCkBAIC0yNTcsNyArMjY0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzU2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uS2V5c0JvZHkoSlNDOjpKU0dsb2IK
ICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRLZXlzVG9TZXRMaWtlKCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEtleXNUb1NldExpa2UoKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNTZXRMaWtlUHJv
dG90eXBlRnVuY3Rpb25LZXlzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTI3MCw3ICsyNzgsOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNCb2R5KEpT
Qzo6SlNHbAogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZFZhbHVlc1RvU2V0TGlr
ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpKSk7CisgICAg
YXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRWYWx1ZXNU
b1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMjg1LDkgKzI5NCwxNSBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNTZXRMaWtlUHJvdG90eXBlRnVuY3Rp
b25Gb3JFYWNoQm9keShKU0M6OkpTRwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0
byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQW55PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElE
TEFueT4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkRm9yRWFjaFRvU2V0TGlrZSgqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMsIFdURk1vdmUoY2FsbGJhY2spKSkp
OworICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJk
Rm9yRWFjaFRvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3Rl
ZFRoaXMsIFdURk1vdmUoY2FsbGJhY2spKSkpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50
cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0
aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzU2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFj
aChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCkBAIC0zMDIsOSArMzE3LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvbkFkZEJvZHkoSlNDOjpKU0dsb2JhCiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGtleSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Cisg
ICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAg
IGF1dG8ga2V5ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2Fy
ZEFkZFRvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRo
aXMsIFdURk1vdmUoa2V5KSkpKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0
b0pTPElETEFueT4oZm9yd2FyZEFkZFRvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
bGxGcmFtZSwgKmNhc3RlZFRoaXMsIFdURk1vdmUoa2V5KSkpKTsKKworICAgIC8vIE1ha2Ugc3Vy
ZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAg
ICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1NldExpa2VQcm90b3R5cGVGdW5j
dGlvbkFkZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCkBAIC0zMzMsOSArMzU0LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvbkRlbGV0ZUJvZHkoSlNDOjpKU0dsCiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGtleSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OworICAgIGF1dG8ga2V5ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4o
Zm9yd2FyZERlbGV0ZVRvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
KmNhc3RlZFRoaXMsIFdURk1vdmUoa2V5KSkpKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZERlbGV0ZVRvU2V0TGlrZSgqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMsIFdURk1vdmUoa2V5KSkpKTsKKworICAg
IC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlz
IG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1NldExpa2VQ
cm90b3R5cGVGdW5jdGlvbkRlbGV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3Bw
CmluZGV4IDRkZDJiMWEzYWM2OGYwN2Q5NDUwY2M1MTk5YTkzNGE0OGM4MjhjZmIuLjI4MmY3MGVh
ZGJlZjNlNDEzYjllMjc1MGMyYWZlYjdmM2Y2Mzk4YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVE
T01PYmplY3QuY3BwCkBAIC0yMzksOSArMjM5LDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5n
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtF
TFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBuZXh0Q2hpbGQg
PSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm5leHRDaGlsZCIsICJUZXN0
QWN0aXZlRE9NT2JqZWN0IiwgImV4Y2l0aW5nRnVuY3Rpb24iLCAiTm9kZSIpOyB9KTsKKyAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0
byBuZXh0Q2hpbGQgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MCwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAibmV4dENoaWxkIiwgIlRlc3RBY3RpdmVET01P
YmplY3QiLCAiZXhjaXRpbmdGdW5jdGlvbiIsICJOb2RlIik7IH0pOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5leGNpdGlu
Z0Z1bmN0aW9uKCpuZXh0Q2hpbGQpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5
IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxp
dmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogfQogCkBAIC0yNTgsOSArMjYzLDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNz
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtF
TFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBtZXNzYWdlID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBtZXNzYWdlID0gY29udmVydDxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5wb3N0TWVzc2Fn
ZShXVEZNb3ZlKG1lc3NhZ2UpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBh
bGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZl
SGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIApAQCAtMjc2LDkgKzI4NiwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZAog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25T
dGFjayBjdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjaygqbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIHBhcmFtID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBwYXJhbSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1l
dGhvZChXVEZNb3ZlKHBhcmFtKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkg
YWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKQEAgLTI4OCwxMSArMzAzLDE4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBw
YXJhbTEgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1
bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgInBhcmFtMSIsICJU
ZXN0QWN0aXZlRE9NT2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiTm9kZSIpOyB9KTsKKyAg
ICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAg
YXV0byBwYXJhbTEgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MCwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAicGFyYW0xIiwgIlRlc3RBY3RpdmVET01PYmpl
Y3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJOb2RlIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBwYXJhbTIgPSBj
b252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgInBhcmFtMiIsICJUZXN0QWN0aXZl
RE9NT2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiTm9kZSIpOyB9KTsKKyAgICBhdXRvIGFy
Z3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7CisgICAgYXV0byBwYXJh
bTIgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFy
Z3VtZW50MSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCAxLCAicGFyYW0yIiwgIlRlc3RBY3RpdmVET01PYmplY3QiLCAib3Zl
cmxvYWRlZE1ldGhvZCIsICJOb2RlIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKCpw
YXJhbTEsICpwYXJhbTIpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZl
IHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJl
KGFyZ3VtZW50MCk7CisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsKKwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAppbmRleCA0MjQ2ODM0NjA2MjRjNWE3
MWE0N2E4ODYyZjI1NGFjZmY5N2E3MjMwLi42NzMyYzQwMDQ0MmY1MTQ2NjNhYmQ5ZjE5NGVhMjJk
ZjIzNWE0NjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIu
Y3BwCkBAIC0yNjgsNyArMjY4LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblQKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC52YWx1
ZSgpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLnZhbHVlKCkpKTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2Vy
LmNwcAppbmRleCBlMTQwMmFlZDRjODY4MjBlMmI2NThmNTNlY2ZmZjU5OTQxMmE1YjRjLi41Y2Y0
NGMzZjAxMjllZjZiZDk5MDhhNjVlNTQ0OTZmMzc3MGFhNGEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFj
ZXIuY3BwCkBAIC0zOTgsMTUgKzM5OCwyNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURM
Qm9vbGVhbj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKTsKKyAgICBhdXRvIGEgPSBjb252ZXJ0PElETEJvb2xlYW4+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBiID0gY29udmVydDxJRExGbG9hdD4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGF1dG8g
YXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAgICBhdXRvIGIg
PSBjb252ZXJ0PElETEZsb2F0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAg
IGF1dG8gYyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7CisgICAgYXV0byBhcmd1bWVudDIgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpOworICAgIGF1dG8gYyA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQyKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGlmIChVTkxJS0VM
WShpbXBsLmNhbGxUcmFjaW5nQWN0aXZlKCkpKQogICAgICAgICBDYWxsVHJhY2VyOjp0ZXN0Q2Fs
bFRyYWNlckludGVyZmFjZShpbXBsLCAidGVzdE9wZXJhdGlvbldpdGhBcmd1bWVudHMiX3MsIHsg
YSwgYiwgYyB9KTsKICAgICBpbXBsLnRlc3RPcGVyYXRpb25XaXRoQXJndW1lbnRzKFdURk1vdmUo
YSksIFdURk1vdmUoYiksIFdURk1vdmUoYykpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50
cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0
aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1l
bnQxKTsKKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDIpOworCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNDIzLDExICs0MzIsMTYg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJQcm90
b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb24KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKLSAgICBhdXRvIG5vZGVOdWxsYWJsZUFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURM
SW50ZXJmYWNlPE5vZGU+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm5vZGVOdWxsYWJsZUFyZyIsICJUZXN0Q2FsbFRy
YWNlciIsICJ0ZXN0T3BlcmF0aW9uV2l0aE51bGxhYmxlQXJndW1lbnQiLCAiTm9kZSIpOyB9KTsK
KyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Cisg
ICAgYXV0byBub2RlTnVsbGFibGVBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFj
ZTxOb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6SlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsg
dGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm5v
ZGVOdWxsYWJsZUFyZyIsICJUZXN0Q2FsbFRyYWNlciIsICJ0ZXN0T3BlcmF0aW9uV2l0aE51bGxh
YmxlQXJndW1lbnQiLCAiTm9kZSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGlmIChVTkxJS0VMWShpbXBsLmNhbGxUcmFj
aW5nQWN0aXZlKCkpKQogICAgICAgICBDYWxsVHJhY2VyOjp0ZXN0Q2FsbFRyYWNlckludGVyZmFj
ZShpbXBsLCAidGVzdE9wZXJhdGlvbldpdGhOdWxsYWJsZUFyZ3VtZW50Il9zLCB7IG5vZGVOdWxs
YWJsZUFyZyB9KTsKICAgICBpbXBsLnRlc3RPcGVyYXRpb25XaXRoTnVsbGFibGVBcmd1bWVudChX
VEZNb3ZlKG5vZGVOdWxsYWJsZUFyZykpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBz
dGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxs
QWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQogCkBAIC00NDQsMTEgKzQ1OCwxNiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJh
dGlvbgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gdmFyaWFu
dEFyZyA9IGNvbnZlcnQ8SURMVW5pb248SURMQm9vbGVhbiwgSURMRmxvYXQsIElETERPTVN0cmlu
Zz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CisgICAgYXV0byB2YXJpYW50QXJnID0gY29udmVydDxJRExVbmlvbjxJRExCb29sZWFuLCBJRExG
bG9hdCwgSURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICBpZiAoVU5MSUtFTFkoaW1wbC5jYWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRy
YWNlcjo6dGVzdENhbGxUcmFjZXJJbnRlcmZhY2UoaW1wbCwgInRlc3RPcGVyYXRpb25XaXRoVmFy
aWFudEFyZ3VtZW50Il9zLCB7IHZhcmlhbnRBcmcgfSk7CiAgICAgaW1wbC50ZXN0T3BlcmF0aW9u
V2l0aFZhcmlhbnRBcmd1bWVudChXVEZNb3ZlKHZhcmlhbnRBcmcpKTsKKworICAgIC8vIE1ha2Ug
c3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4K
KyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNDY1LDExICs0ODQsMTYgQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJQcm90b3R5cGVG
dW5jdGlvblRlc3RPcGVyYXRpb24KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsK
LSAgICBhdXRvIHZhcmlhbnROdWxsYWJsZUFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMVW5p
b248SURMQm9vbGVhbiwgSURMRmxvYXQsIElETERPTVN0cmluZz4+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVu
dDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gdmFyaWFudE51
bGxhYmxlQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExVbmlvbjxJRExCb29sZWFuLCBJRExG
bG9hdCwgSURMRE9NU3RyaW5nPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgaWYgKFVOTElLRUxZKGltcGwuY2FsbFRyYWNpbmdBY3RpdmUoKSkpCiAgICAgICAgIENhbGxU
cmFjZXI6OnRlc3RDYWxsVHJhY2VySW50ZXJmYWNlKGltcGwsICJ0ZXN0T3BlcmF0aW9uV2l0aE51
bGxhYmxlVmFyaWFudEFyZ3VtZW50Il9zLCB7IHZhcmlhbnROdWxsYWJsZUFyZyB9KTsKICAgICBp
bXBsLnRlc3RPcGVyYXRpb25XaXRoTnVsbGFibGVWYXJpYW50QXJndW1lbnQoV1RGTW92ZSh2YXJp
YW50TnVsbGFibGVBcmcpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2
ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVy
ZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIApAQCAtNDg0LDExICs1MDgsMTYgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb24KICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIHZhcmlh
bnRPcHRpb25hbEFyZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9w
dGlvbmFsPENvbnZlcnRlcjxJRExVbmlvbjxJRExCb29sZWFuLCBJRExGbG9hdCwgSURMRE9NU3Ry
aW5nPj46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMVW5pb248SURMQm9v
bGVhbiwgSURMRmxvYXQsIElETERPTVN0cmluZz4+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETFVu
aW9uPElETEJvb2xlYW4sIElETEZsb2F0LCBJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOworICAgIGF1dG8gYXJndW1l
bnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBhdXRvIHZhcmlhbnRPcHRpb25hbEFy
ZyA9IGFyZ3VtZW50MC5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETFVuaW9u
PElETEJvb2xlYW4sIElETEZsb2F0LCBJRExET01TdHJpbmc+Pjo6UmV0dXJuVHlwZT4oKSA6IE9w
dGlvbmFsPENvbnZlcnRlcjxJRExVbmlvbjxJRExCb29sZWFuLCBJRExGbG9hdCwgSURMRE9NU3Ry
aW5nPj46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMVW5pb248SURMQm9vbGVhbiwgSURMRmxvYXQs
IElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGlm
IChVTkxJS0VMWShpbXBsLmNhbGxUcmFjaW5nQWN0aXZlKCkpKQogICAgICAgICBDYWxsVHJhY2Vy
Ojp0ZXN0Q2FsbFRyYWNlckludGVyZmFjZShpbXBsLCAidGVzdE9wZXJhdGlvbldpdGhPcHRpb25h
bFZhcmlhbnRBcmd1bWVudCJfcywgeyB2YXJpYW50T3B0aW9uYWxBcmcgfSk7CiAgICAgaW1wbC50
ZXN0T3BlcmF0aW9uV2l0aE9wdGlvbmFsVmFyaWFudEFyZ3VtZW50KFdURk1vdmUodmFyaWFudE9w
dGlvbmFsQXJnKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50
aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJn
dW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKQEAgLTUwMywxMSArNTMyLDE2IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uCiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byB2YXJpYW50RGVm
YXVsdEFyZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/ICIiIDogY29u
dmVydDxJRExVbmlvbjxJRExCb29sZWFuLCBJRExGbG9hdCwgSURMRE9NU3RyaW5nPj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1
dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBhdXRvIHZhcmlhbnRE
ZWZhdWx0QXJnID0gYXJndW1lbnQwLmlzVW5kZWZpbmVkKCkgPyAiIiA6IGNvbnZlcnQ8SURMVW5p
b248SURMQm9vbGVhbiwgSURMRmxvYXQsIElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgaWYgKFVOTElLRUxZKGltcGwuY2FsbFRyYWNpbmdBY3RpdmUo
KSkpCiAgICAgICAgIENhbGxUcmFjZXI6OnRlc3RDYWxsVHJhY2VySW50ZXJmYWNlKGltcGwsICJ0
ZXN0T3BlcmF0aW9uV2l0aERlZmF1bHRWYXJpYW50QXJndW1lbnQiX3MsIHsgdmFyaWFudERlZmF1
bHRBcmcgfSk7CiAgICAgaW1wbC50ZXN0T3BlcmF0aW9uV2l0aERlZmF1bHRWYXJpYW50QXJndW1l
bnQoV1RGTW92ZSh2YXJpYW50RGVmYXVsdEFyZykpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3Vt
ZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3Vy
ZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RE9NSklULmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCmluZGV4IDllOTMxYmMyN2FiYTMw
MWI2ZWI1OTEyMzIxZjg5MjFhZDk1ZTQwMmYuLjE0YTI5NTQ4ZWIzMWMzZmFhZjRlNGJhNmNkYTQw
MWQ2NGMzYzZkNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCkBAIC0xMTM1LDkgKzExMzUsMTUgQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0
aW9uR2V0QXR0cmlidXRlQm9keSgKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsK
LSAgICBhdXRvIG5hbWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIG5hbWUgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGltcGwuZ2V0QXR0cmlidXRlKFdURk1vdmUobmFtZSkpKSk7Cisg
ICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExOdWxsYWJsZTxJRExET01T
dHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC5nZXRBdHRyaWJ1dGUoV1RGTW92ZShu
YW1lKSkpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0
aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVu
dDApOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEF0dHJpYnV0ZShKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xMTY5
LDExICsxMTc1LDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RE
T01KSVRQcm90b3R5cGVGdW5jdGlvbkl0ZW1Cb2R5KEpTQzo6SlNHCiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byB4ID0gY29udmVydDxJRExVbnNpZ25lZFNob3J0
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwor
ICAgIGF1dG8geCA9IGNvbnZlcnQ8SURMVW5zaWduZWRTaG9ydD4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIHkgPSBjb252ZXJ0PElETFVuc2lnbmVkU2hvcnQ+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAg
ICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7CisgICAg
YXV0byB5ID0gY29udmVydDxJRExVbnNpZ25lZFNob3J0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQxKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLml0ZW0oV1RGTW92ZSh4KSwgV1RGTW92ZSh5KSkp
KTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuaXRlbShXVEZNb3ZlKHgpLCBXVEZNb3ZlKHkpKSkp
OworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5k
IG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Cisg
ICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsKKworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBl
RnVuY3Rpb25JdGVtKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKQEAgLTEyMDUsNyArMTIxOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkhhc0F0dHJpYnV0ZUJv
ZHkoCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwuaGFzQXR0cmlidXRlKCkp
KTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGlt
cGwuaGFzQXR0cmlidXRlKCkpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSGFzQXR0cmli
dXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKQEAgLTEyMzUsOSArMTI1MCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZEJvZAogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gZWxlbWVudElkID0gY29u
dmVydDxJRExSZXF1aXJlc0V4aXN0aW5nQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5nPj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwor
ICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAg
ICBhdXRvIGVsZW1lbnRJZCA9IGNvbnZlcnQ8SURMUmVxdWlyZXNFeGlzdGluZ0F0b21TdHJpbmdB
ZGFwdG9yPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxFbGVtZW50Pj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5nZXRF
bGVtZW50QnlJZChXVEZNb3ZlKGVsZW1lbnRJZCkpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8RWxlbWVudD4+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuZ2V0RWxlbWVudEJ5SWQoV1RG
TW92ZShlbGVtZW50SWQpKSkpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFs
aXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVI
ZXJlKGFyZ3VtZW50MCk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5
SWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQpAQCAtMTI2OSw5ICsxMjkwLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRzQnlOYW1lCiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBlbGVtZW50TmFtZSA9IGNv
bnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1l
bnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGVsZW1lbnRO
YW1lID0gY29udmVydDxJRExBdG9tU3RyaW5nQWRhcHRvcjxJRExET01TdHJpbmc+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9K
UzxJRExJbnRlcmZhY2U8Tm9kZUxpc3Q+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmdldEVsZW1lbnRzQnlOYW1lKFdURk1vdmUoZWxlbWVu
dE5hbWUpKSkpOworICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50
ZXJmYWNlPE5vZGVMaXN0Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgaW1wbC5nZXRFbGVtZW50c0J5TmFtZShXVEZNb3ZlKGVsZW1lbnROYW1lKSkp
KTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVu
ZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwor
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRzQnlOYW1lKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVk
QnlTZXR0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFbmFibGVkQnlTZXR0aW5nLmNwcAppbmRleCAwYWY2MzZjOGMyNmMyMTg3NGJkOTk4MzJm
ZWFhY2JkM2YzNTAxOThjLi4xNzc4YWQzZDlkMzUzNzE2ODY0YWE3YmY3ZTE5NzYxZTYyZDJkNTQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwCkBAIC0zMDcsOSArMzA3LDE0
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFbmFibGVkQnlTZXR0
aW5nUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7Ci0gICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1
dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRv
IHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgIGltcGwuZW5hYmxlZEJ5U2V0dGluZ09wZXJhdGlvbihXVEZNb3ZlKHRl
c3RQYXJhbSkpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGls
IHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3Vt
ZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNWMwNWFkOGQ0MmUzMGIz
NGRlNmNkNWNjNzVjZjViNjE4NmExNmVjNy4uNzVlMDA0M2JlNmM5ZDYxMDIwNmEzZTA2Mjg4M2Vj
NTc5YzdlZTg1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcApAQCAtMTcz
LDkgKzE3MywxMSBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpjb25zdAogICAgIEFTU0VSVChjYXN0ZWRU
aGlzKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
Ci0gICAgYXV0byB0eXBlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byB0eXBlID0gY29u
dmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAg
YXV0byBldmVudEluaXREaWN0ID0gY29udmVydDxJRExEaWN0aW9uYXJ5PFRlc3RFdmVudENvbnN0
cnVjdG9yOjpJbml0Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQo
MSkpOworICAgIGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKTsKKyAgICBh
dXRvIGV2ZW50SW5pdERpY3QgPSBjb252ZXJ0PElETERpY3Rpb25hcnk8VGVzdEV2ZW50Q29uc3Ry
dWN0b3I6OkluaXQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8g
b2JqZWN0ID0gVGVzdEV2ZW50Q29uc3RydWN0b3I6OmNyZWF0ZShXVEZNb3ZlKHR5cGUpLCBXVEZN
b3ZlKGV2ZW50SW5pdERpY3QpKTsKICAgICBhdXRvIGpzVmFsdWUgPSB0b0pTTmV3bHlDcmVhdGVk
PElETEludGVyZmFjZTxUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRU
YXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50VGFyZ2V0LmNwcAppbmRleCAxZTFiMjEwODk1MzQyZGMxMjRmMGM5MTNmMWJhNmU1YWY4
ZDA4MTAyLi40Nzg0ZDQzMjk5MjE3MTY2YjY3ZWM1NDYwZWM5NWVlZTliZmE1NjMyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRU
YXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFdmVudFRhcmdldC5jcHAKQEAgLTI1Niw5ICsyNTYsMTUgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25JdGVt
Qm9keShKU0MKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGlu
ZGV4ID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURM
VW5zaWduZWRMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuaXRlbShXVEZNb3ZlKGlu
ZGV4KSkpKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVy
ZmFjZTxOb2RlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgaW1wbC5pdGVtKFdURk1vdmUoaW5kZXgpKSkpOworCisgICAgLy8gTWFrZSBzdXJlIGFy
Z3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBl
RnVuY3Rpb25JdGVtKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKaW5kZXggYzY4ZmZkODhm
MDM5Njk2Y2M5NzkyNmMwYzYxOTE5YzY0NzNjNmM3NS4uZDA0MGE1MzA4YjQ0MDEyOTRkMDBiM2Yz
NzFhNmUyMzY2YTI4YzllYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKQEAgLTI1Njcs
OSArMjU2NywxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblJlZ3VsYXJPcGVyYQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CisgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLnJlZ3VsYXJPcGVyYXRpb24oV1RGTW92ZSh0
ZXN0UGFyYW0pKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRp
bCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1
bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IApAQCAtMjU4NSw5ICsyNTkwLDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVuCiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byB0ZXN0UGFyYW0g
PSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuZW5hYmxl
ZEF0UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOworCisgICAgLy8gTWFrZSBz
dXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgor
ICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0yNjAwLDkgKzI2MTAsMTQgQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNl
RnVuY3Rpb25FbmFibGVkQXRSdW4KICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8g
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHRl
c3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0p
KTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVu
ZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwor
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtMjY0
Niw5ICsyNjYxLDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RDb25zdHJ1Y3RvckZ1bmN0aW9uRW5hYmxlZEF0CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKLSAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8g
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHRl
c3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBUZXN0R2xvYmFsT2JqZWN0OjplbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uU3RhdGlj
KFdURk1vdmUodGVzdFBhcmFtKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkg
YWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKQEAgLTI2NjcsOSArMjY4NywxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNw
ZQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElL
RUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gdGVzdFBhcmFt
ID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuZW5hYmxlZEluU3BlY2lm
aWNXb3JsZChXVEZNb3ZlKHRlc3RQYXJhbSkpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50
cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0
aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCkBAIC0yNjg2LDkgKzI3MTEsMTQgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFi
bGVkSW5TcGUKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIHRl
c3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURM
TG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmVuYWJsZWRJ
blNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkKFdURk1vdmUodGVzdFBhcmFt
KSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBl
bmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsK
KwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTI3
MDUsOSArMjczNSwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwor
ICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuZW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1l
RmVhdHVyZXNFbmFibGVkKFdURk1vdmUodGVzdFBhcmFtKSk7CisKKyAgICAvLyBNYWtlIHN1cmUg
YXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTI3NTUsNyArMjc5MCw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0
aW9uR2V0U2VjcmV0Qm9vCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwuZ2V0
U2VjcmV0Qm9vbGVhbigpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9K
UzxJRExCb29sZWFuPihpbXBsLmdldFNlY3JldEJvb2xlYW4oKSkpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0
SW5zdGFuY2VGdW5jdGlvbkdldFNlY3JldEJvb2xlYW4oSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMjc3MCw3ICsyODA2LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3Rh
bmNlRnVuY3Rpb25UZXN0RmVhdHVyZUcKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQm9vbGVhbj4o
aW1wbC50ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4oKSkpOworICAgIGF1dG8gcmVzdWx0ID0g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQm9vbGVhbj4oaW1wbC50ZXN0RmVhdHVyZUdldFNlY3Jl
dEJvb2xlYW4oKSkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblRlc3RGZWF0dXJl
R2V0U2VjcmV0Qm9vbGVhbihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwCmluZGV4IGRkY2ZmNGVlNDRhYzE4MDk4ZGUwNmYzOGY3NDRkOTRk
MTFlOTBlOWIuLjJmMjU4OGMwYTM3ZWE3ZjY4Y2MyNzRmZTM2YzRkMWZiMmIxMTRkYzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCkBA
IC0yODMsMTEgKzI4MywxOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuYwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElETFVuc2ln
bmVkTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKTsKKyAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgxKSk7CisgICAgYXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpOworICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmluZGV4ZWRTZXR0ZXIoV1RGTW92ZShpbmRl
eCksIFdURk1vdmUodmFsdWUpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBh
bGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZl
SGVyZShhcmd1bWVudDApOworICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7CisK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJm
YWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bnRlcmZhY2UuY3BwCmluZGV4IDQ1ODcyZjJhZTliODAxNjQ5ZTMwYTRhNzdlZTBhYzVmZGU1OGI3
NGUuLjg4ZmQ5MWJiNGM4MDNkYWYyYmZkMWU2ZTYwOTVlMzA0ZWNkODg3ZjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bnRlcmZhY2UuY3BwCkBAIC0yNzUsOSArMjc1LDExIEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEpT
CiAgICAgYXV0byogY29udGV4dCA9IGNhc3RlZFRoaXMtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQpKQogICAgICAgICByZXR1cm4gdGhyb3dDb25z
dHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCAiVGVzdEludGVyZmFjZSIpOwotICAgIGF1dG8gc3RyMSA9
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gc3RyMSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gc3RyMiA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/ICJkZWZhdWx0U3RyaW5nIl9zIDogY29u
dmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpKTsKKyAgICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMSk7CisgICAgYXV0byBzdHIyID0gYXJndW1lbnQxLmlzVW5kZWZpbmVkKCkgPyAiZGVmYXVs
dFN0cmluZyJfcyA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQxKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdEludGVyZmFjZTo6Y3JlYXRlKCpjb250
ZXh0LCBXVEZNb3ZlKHN0cjEpLCBXVEZNb3ZlKHN0cjIpKTsKICAgICBhdXRvIGpzVmFsdWUgPSB0
b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0SW50ZXJmYWNlPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgV1RGTW92
ZShvYmplY3QpKTsKQEAgLTkyMywxMSArOTI1LDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRo
CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjb250ZXh0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLSAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gc3RyQXJn
ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0gICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIFtdKEpTQzo6
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
MSwgIm9iakFyZyIsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNNZXRob2QyIiwgIlRlc3RP
YmoiKTsgfSk7CisgICAgYXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpOworICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1
bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgIm9iakFyZyIsICJU
ZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNNZXRob2QyIiwgIlRlc3RPYmoiKTsgfSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBp
bXBsLmltcGxlbWVudHNNZXRob2QyKCpjb250ZXh0LCBXVEZNb3ZlKHN0ckFyZyksICpvYmpBcmcp
KSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8
VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIHRocm93U2NvcGUsIGltcGwuaW1wbGVtZW50c01ldGhvZDIoKmNvbnRleHQsIFdURk1vdmUo
c3RyQXJnKSwgKm9iakFyZykpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBh
bGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZl
SGVyZShhcmd1bWVudDApOworICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7CisK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDIoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtOTc4
LDcgKzk4OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRl
cmZhY2VQcm90b3R5cGVGdW5jdGlvblRha2VOb2Rlc0JvZHkoCiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBpbXBsUmVzdWx0ID0gaW1wbC50YWtlTm9kZXMoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRvSlM8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPE5vZGU+Pj4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShpbXBsUmVzdWx0
Lm5vZGVzKSkpOworICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMU2Vx
dWVuY2U8SURMSW50ZXJmYWNlPE5vZGU+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShpbXBsUmVzdWx0Lm5vZGVzKSkpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50
ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25UYWtlTm9kZXMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMTAxOCwxMSArMTAyOSwxOSBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90
eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZQogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOwogICAgIGlmIChVTkxJS0VMWSghY29udGV4dCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKKyAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJ
bnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDEsICJvYmpBcmciLCAiVGVzdEludGVyZmFjZSIsICJz
dXBwbGVtZW50YWxNZXRob2QyIiwgIlRlc3RPYmoiKTsgfSk7CisgICAgYXV0byBhcmd1bWVudDEg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOworICAgIGF1dG8gb2JqQXJnID0gY29u
dmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDEsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSwgMSwgIm9iakFyZyIsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbE1l
dGhvZDIiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1
cHBsZW1lbnRhbE1ldGhvZDIoaW1wbCwgKmNvbnRleHQsIFdURk1vdmUoc3RyQXJnKSwgKm9iakFy
ZykpKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFj
ZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFs
TWV0aG9kMihpbXBsLCAqY29udGV4dCwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSkpOworCisg
ICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRo
aXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisgICAgZW5z
dXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVu
Y3Rpb25TdXBwbGVtZW50YWxNZXRob2QyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLmNwcAppbmRleCBmMTVhZDU0ZWZhNDgzNjU3MWZjYmU0OWY5NDVjZWFmZGZi
ZWFkNDRlLi5mYTViNzE4MDA5MTQwYjhmZmMyMGRjNDJmM2IwYTg5ZjI1MWQzZGFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBAIC0xOTMsOSArMTkz
LDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7Ci0gICAgYXV0byBsaXN0ZW5lciA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tGdW5jdGlv
bjxKU01lZGlhUXVlcnlMaXN0TGlzdGVuZXI+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBb
XShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCAwLCAibGlzdGVuZXIiLCAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXIiLCAibWV0aG9kIik7IH0pOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGxpc3RlbmVyID0gY29udmVydDxJRExDYWxsYmFj
a0Z1bmN0aW9uPEpTTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDAsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0
aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29w
ZSwgMCwgImxpc3RlbmVyIiwgIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIiwgIm1ldGhvZCIp
OyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIGltcGwubWV0aG9kKGxpc3RlbmVyLnJlbGVhc2VOb25OdWxsKCkpOworCisgICAg
Ly8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMg
bWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcApp
bmRleCA3MWY0YmM0Y2NlNmZmMTlhOTViNzkzM2ZkMzFjMTE2OGMwNzc5MDM5Li5jMGI0YzViYTMz
ODEzMzEwZDYxNzliZmY4YTBjN2I5MzNmOTcyYzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKQEAgLTM1
MywxMSArMzUzLDE4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvCiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBuYW1lID0gY29udmVydDxJRExET01TdHJpbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
KyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Cisg
ICAgYXV0byBuYW1lID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7Ci0gICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAg
YXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOworICAgIGF1
dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFy
Z3VtZW50MSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICBpbXBsLm5hbWVkU2V0dGVyKFdURk1vdmUobmFtZSksIFdURk1vdmUodmFs
dWUpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlz
IGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDAp
OworICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7CisKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0zNzQsMTEgKzM4MSwxOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXJQcm90bwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwotICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGluZGV4
ID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7Ci0gICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgYXV0byBhcmd1
bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOworICAgIGF1dG8gdmFsdWUg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBpbXBsLmluZGV4ZWRTZXR0ZXIoV1RGTW92ZShpbmRleCksIFdURk1vdmUodmFsdWUpKTsK
KworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBv
ZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworICAg
IGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
ci5jcHAKaW5kZXggYTlhMzQwNGFmYzJmNmMzN2I1ZGEzYzM5Y2U1ZTg5NGY4YWI0MTBlMy4uNWUw
MmNkMjk1ODU0NGEwZjczOWI4OTI0MGFjZTI0ZjFhNWJiZWNlNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZENvbnN0cnVjdG9yLmNwcApAQCAtMTA4LDExICsxMDgsMTQgQEAgdGVtcGxhdGU8PiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0
cnVjdG9yOjoKICAgICBBU1NFUlQoY2FzdGVkVGhpcyk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gc3RyMSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOworICAgIGF1dG8gc3RyMSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gc3RyMiA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMSkuaXNVbmRlZmluZWQoKSA/ICJkZWZhdWx0U3RyaW5nIl9zIDogY29udmVydDxJRExET01T
dHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpKTsKKyAgICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSk7CisgICAg
YXV0byBzdHIyID0gYXJndW1lbnQxLmlzVW5kZWZpbmVkKCkgPyAiZGVmYXVsdFN0cmluZyJfcyA6
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwot
ICAgIGF1dG8gc3RyMyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMikuaXNVbmRlZmluZWQoKSA/IFN0
cmluZygpIDogY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKKyAgICBhdXRvIGFyZ3VtZW50MiA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMik7CisgICAgYXV0byBzdHIzID0gYXJndW1lbnQyLmlzVW5kZWZpbmVk
KCkgPyBTdHJpbmcoKSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgYXJndW1lbnQyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE5hbWVkQ29uc3RydWN0b3I6OmNy
ZWF0ZUZvckpTQ29uc3RydWN0b3IoV1RGTW92ZShzdHIxKSwgV1RGTW92ZShzdHIyKSwgV1RGTW92
ZShzdHIzKSk7CiAgICAgYXV0byBqc1ZhbHVlID0gdG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZh
Y2U8VGVzdE5hbWVkQ29uc3RydWN0b3I+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBXVEZNb3ZlKG9iamVjdCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
RGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAKaW5kZXggYmZk
Y2ZiNTgwN2RmM2U5YTFhZmRmMTM5ODk2YzVlMzQxOGYxNTk4My4uMDY0MGIwNzZiZWQ4ZTIzZWY3
OWUzYzJmODNmZWRmYTU4M2I1YjIxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRE
ZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCkBAIC0yNjYsOSArMjY2LDE0IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllclBy
b3RvdHlwZUZ1bmN0CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0
byBuYW1lID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBuYW1lID0gY29udmVydDxJRExE
T01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5uYW1l
ZERlbGV0ZXIoV1RGTW92ZShuYW1lKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0
YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVu
dGlmaWVyLmNwcAppbmRleCBhMzk4YjQ1NWY2YWZjZDk4NzMyMTRlN2YxYjBlNDViNWNmNTQ4MWEw
Li41NWRmYTYwNWFkMDk1MTU2MzU3MzZmYjBjMjMzZmMxZTVmNjY3NDVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCkBAIC0yNDIsOSArMjQy
LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEdldHRl
cldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3RpCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7Ci0gICAgYXV0byBuYW1lID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRv
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBu
YW1lID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGltcGwuZ2V0dGVyTmFtZShXVEZNb3ZlKG5hbWUpKSkpOworICAgIGF1
dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgaW1wbC5nZXR0ZXJOYW1lKFdURk1vdmUobmFtZSkpKSk7CisKKyAgICAvLyBN
YWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRo
b2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TmFtZWRHZXR0
ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uR2V0dGVyTmFtZShKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSWRlbnRpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKaW5kZXggYWZiOWFlNWRj
OGFmNzJlZGUzMTY2ZGQyMjBhZDVjODU3N2Q3ZTc0OC4uYTczNTFjMzJmNTE3MzNjZmYyYjIyMDM2
ZjMyMWVlMGQzMjQ3YjNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyLmNwcApAQCAtMzA1LDExICszMDUsMTggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVG
dW5jdGkKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChV
TkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIG5hbWUg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIG5hbWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIHZhbHVlID0gY29u
dmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpKTsKKyAgICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMSk7CisgICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubmFtZWRTZXR0ZXIoV1RG
TW92ZShuYW1lKSwgV1RGTW92ZSh2YWx1ZSkpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50
cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0
aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1l
bnQxKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNw
cAppbmRleCAzOTM5ZmFjODgyMDBmNGU5MmNhNjIwOTYzNWYyMzhiMWM4ZjEyYmZiLi5jMzRjYWIz
NDFlOGVmM2E2ZGVjY2ZkMjhiZTVjMDU0MWI4OWU2NDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCkBAIC0zMzAsMTEgKzMzMCwx
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlclByb3RvdHlwZUZ1bgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
IDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCkpOwotICAgIGF1dG8gbmFtZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gbmFt
ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwotICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGF1dG8gYXJndW1l
bnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAgICBhdXRvIHZhbHVlID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgaW1wbC5uYW1lZFNldHRlcihXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHZhbHVlKSk7CisKKyAg
ICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhp
cyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKyAgICBlbnN1
cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDEpOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtMzUxLDkgKzM1OCwxNSBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlclBy
b3RvdHlwZUZ1bgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8g
aW5kZXggPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGluZGV4ID0gY29udmVydDxJ
RExVbnNpZ25lZExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGltcGwuaW5kZXhlZFNldHRlcihXVEZNb3ZlKGluZGV4KSkpKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGltcGwuaW5kZXhlZFNldHRlcihXVEZNb3ZlKGluZGV4KSkpKTsKKworICAgIC8vIE1ha2Ug
c3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4K
KyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25JbmRleGVkU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyLmNwcAppbmRleCA0MjY0ZDE2MDZjZjY5N2YwYTVmNzE3YWIwZGU3YWRkMTE0YTdiYjIw
Li44YTIyMWZhZmRhYzY0NmM3MzcyNDFmMzgzNjNkZDZlOGZlOGM1ZTBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXIuY3BwCkBAIC0zNTMsMTEgKzM1MywxOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlclBybwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gbmFtZSA9IGNvbnZl
cnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOworICAgIGF1dG8gbmFtZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMSkpOworICAgIGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgxKTsKKyAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDEpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5uYW1lZFNldHRlcihXVEZNb3ZlKG5h
bWUpLCBXVEZNb3ZlKHZhbHVlKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkg
YWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYXJndW1lbnQwKTsKKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDEpOwor
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtMzcy
LDExICszNzksMTggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJQcm8KICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExV
bnNpZ25lZExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CisgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMSkpOworICAgIGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgxKTsKKyAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDEpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5pbmRleGVkU2V0dGVyKFdURk1vdmUo
aW5kZXgpLCBXVEZNb3ZlKHZhbHVlKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0
YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQwKTsKKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDEp
OworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAt
Mzg2LDkgKzQwMCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlclBybwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElE
TFVuc2lnbmVkTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKTsKKyAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuaW5kZXhlZFNl
dHRlcihXVEZNb3ZlKGluZGV4KSkpKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29k
ZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuaW5kZXhlZFNl
dHRlcihXVEZNb3ZlKGluZGV4KSkpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3Rh
eSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFs
aXZlSGVyZShhcmd1bWVudDApOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXJBbmRTZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0ZXJPdmVybG9hZERpc3BhdGNo
ZXIoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKaW5kZXggZmFiOTU0MDdjMTRlYTky
N2FmODhjNDg4ZTUyNzg2YjNhMWQ4YmMzNi4uM2RlZjhjNTQ3ODcyNWVhYjc3Y2Y3ZDlkMGRjMGJh
OGNkMmI0MGZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcApAQCAtMzUxLDcgKzM1MSw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25HZXRTZWNy
ZXRCb29sZWFuQm9kCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwuZ2V0U2Vj
cmV0Qm9vbGVhbigpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExCb29sZWFuPihpbXBsLmdldFNlY3JldEJvb2xlYW4oKSkpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1
bmN0aW9uR2V0U2VjcmV0Qm9vbGVhbihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0zNjYsNyArMzY3LDggQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RGZWF0
dXJlR2V0U2VjcmUKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQm9vbGVhbj4oaW1wbC50ZXN0RmVh
dHVyZUdldFNlY3JldEJvb2xlYW4oKSkpOworICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5j
b2RlKHRvSlM8SURMQm9vbGVhbj4oaW1wbC50ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4oKSkp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKaW5kZXggYzIyZTAzMjE4MGNjYTY1MWRkNTYzZGQ5ODQyNmVkOGQ2MDdiMTVmYi4u
MTg5M2NkNDQ1NGE0ZDI0OTk2N2ZiZDk0Y2VjOTE4OGRkZDRhMWNjOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAg
LTE5NjYsOSArMTk2NiwxMSBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmNvbnN0cnVjdChKU0dsb2JhbAogICAgICAgICByZXR1
cm4gdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9y
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIpOwogICAgIEFT
U0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkpOwogICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKLSAgICBhdXRvIHRlc3RDYWxsYmFjayA9IGNvbnZlcnQ8
SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlv
bkVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAidGVzdENhbGxiYWNrIiwgIlRl
c3RPYmplY3QiLCBudWxscHRyKTsgfSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gdGVzdENhbGxiYWNrID0gY29udmVydDxJ
RExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDAsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSwgMCwgInRlc3RDYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgbnVsbHB0cik7IH0p
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0gICAgYXV0byB0ZXN0Q2FsbGJhY2tGdW5jdGlvbiA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tGdW5j
dGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgMSwgInRlc3RDYWxsYmFja0Z1bmN0aW9uIiwgIlRlc3RPYmplY3Qi
LCBudWxscHRyKTsgfSk7CisgICAgYXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpOworICAgIGF1dG8gdGVzdENhbGxiYWNrRnVuY3Rpb24gPSBjb252ZXJ0PElE
TENhbGxiYWNrRnVuY3Rpb248SlNUZXN0Q2FsbGJhY2tGdW5jdGlvbj4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDEsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCBzY29wZSwgMSwgInRlc3RDYWxsYmFja0Z1bmN0aW9uIiwgIlRlc3RPYmplY3QiLCBudWxscHRy
KTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RPYmo6OmNyZWF0ZShkb2N1bWVudCwgdGVzdENh
bGxiYWNrLnJlbGVhc2VOb25OdWxsKCksIHRlc3RDYWxsYmFja0Z1bmN0aW9uLnJlbGVhc2VOb25O
dWxsKCkpOwogICAgIGF1dG8ganNWYWx1ZSA9IHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNl
PFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBXVEZNb3ZlKG9iamVjdCkpOwpAQCAtMjU1NSw5ICsyNTU3LDE0IEBAIHN0YXRpYyBpbmxp
bmUgRW5jb2RlZEpTVmFsdWUgY2FsbEpTVGVzdE9iajEoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsCiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihj
YWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gcGFyYW0gPSBjb252ZXJ0
PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCk7CisgICAgYXV0byBwYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmxlZ2FjeUNhbGxlck5hbWVkKFdURk1vdmUocGFy
YW0pKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlz
IGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDAp
OworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAt
MjU2OSw5ICsyNTc2LDE1IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY2FsbEpTVGVz
dE9iajIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsCiAgICAgYXV0byogY2Fz
dGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAg
IEFTU0VSVChjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwotICAgIGF1dG8gcGFyYW0gPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHBhcmFt
ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETExvbmc+KGltcGwubGVnYWN5Q2Fs
bGVyT3BlcmF0aW9uRnJvbUJpbmRpbmdzKFdURk1vdmUocGFyYW0pKSkpOworICAgIGF1dG8gcmVz
dWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMTG9uZz4oaW1wbC5sZWdhY3lDYWxsZXJPcGVy
YXRpb25Gcm9tQmluZGluZ3MoV1RGTW92ZShwYXJhbSkpKSk7CisKKyAgICAvLyBNYWtlIHN1cmUg
YXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY2FsbEpTVGVzdE9iajMoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNDI5
OCw2ICs0MzExLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPbmZvb1NldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwKICAgICBVTlVTRURfUEFSQU0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IHNldEV2ZW50SGFuZGxlckF0dHJpYnV0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0
LCB0aGlzT2JqZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50LCB2YWx1ZSk7CisK
KyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICB2bS5o
ZWFwLndyaXRlQmFycmllcigmdGhpc09iamVjdCwgdmFsdWUpOworICAgIGVuc3VyZVN0aWxsQWxp
dmVIZXJlKHZhbHVlKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC00MzIzLDYgKzQzNDEs
MTEgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9ud2Via2l0Zm9vU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2IKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIHNldEV2ZW50
SGFuZGxlckF0dHJpYnV0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCB0aGlzT2Jq
ZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50LCB2YWx1ZSk7CisKKyAgICBWTSYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICB2bS5oZWFwLndyaXRl
QmFycmllcigmdGhpc09iamVjdCwgdmFsdWUpOworICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKHZh
bHVlKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01NTc3LDkgKzU2MDAsMTQgQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
RW5hYmxlZEF0UnVudGltZU9wZXIKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAg
YXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1
dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5lbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKFdURk1vdmUo
dGVzdFBhcmFtKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50
aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJn
dW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKQEAgLTU1OTIsOSArNTYyMCwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcgogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gdGVzdFBhcmFt
ID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuZW5hYmxlZEF0UnVudGlt
ZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3Vt
ZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3Vy
ZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC01NjM4LDkgKzU2NzEsMTQgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25FbmFibGVk
QXRSdW50aW1lT3AKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgaWYgKFVOTElL
RUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gdGVzdFBhcmFt
ID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIFRlc3RPYmo6OmVuYWJsZWRBdFJ1
bnRpbWVPcGVyYXRpb25TdGF0aWMoV1RGTW92ZSh0ZXN0UGFyYW0pKTsKKworICAgIC8vIE1ha2Ug
c3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4K
KyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNTY1OSw5ICs1Njk3LDE0IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkVuYWJsZWRJblNwZWNpZmljV29yCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
Ci0gICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byB0ZXN0UGFyYW0g
PSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
aW1wbC5lbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZChXVEZN
b3ZlKHRlc3RQYXJhbSkpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZl
IHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJl
KGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQogCkBAIC01Njc4LDkgKzU3MjEsMTQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV29ybGRTcGVjaWZpY01ldGhvZEIKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIHRlc3RQYXJhbSA9IGNv
bnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKTsKKyAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLndvcmxkU3BlY2lmaWNNZXRob2Qo
V1RGTW92ZSh0ZXN0UGFyYW0pKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBh
bGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZl
SGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIApAQCAtNTcxMCw3ICs1NzU4LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0U2VjcmV0Qm9vbGVhbkJvZHkK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQm9vbGVhbj4oaW1wbC5nZXRTZWNyZXRCb29sZWFuKCkp
KTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGlt
cGwuZ2V0U2VjcmV0Qm9vbGVhbigpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNlY3Jl
dEJvb2xlYW4oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQpAQCAtNTcyNSw3ICs1Nzc0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdEZlYXR1cmVHZXRTZWNyZXQK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQm9vbGVhbj4oaW1wbC50ZXN0RmVhdHVyZUdldFNlY3Jl
dEJvb2xlYW4oKSkpOworICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURM
Qm9vbGVhbj4oaW1wbC50ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4oKSkpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25UZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4oSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNTc1OCwxMyAr
NTgwOCwyMiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3NCbwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOwotICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1
dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRv
IGxvbmdBcmcgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7Ci0gICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGF1dG8gYXJn
dW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAgICBhdXRvIHN0ckFy
ZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQx
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwotICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBbXShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUs
IDIsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJ2b2lkTWV0aG9kV2l0aEFyZ3MiLCAiVGVzdE9i
aiIpOyB9KTsKKyAgICBhdXRvIGFyZ3VtZW50MiA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMik7CisgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MiwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3Vt
ZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAyLCAib2JqQXJnIiwgIlRl
c3RPYmplY3QiLCAidm9pZE1ldGhvZFdpdGhBcmdzIiwgIlRlc3RPYmoiKTsgfSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBs
LnZvaWRNZXRob2RXaXRoQXJncyhXVEZNb3ZlKGxvbmdBcmcpLCBXVEZNb3ZlKHN0ckFyZyksICpv
YmpBcmcpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRo
aXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50
MCk7CisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsKKyAgICBlbnN1cmVTdGls
bEFsaXZlSGVyZShhcmd1bWVudDIpOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KIApAQCAtNTc3OSw3ICs1ODM4LDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZEJvZHko
SlNDOjoKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQnl0ZT4oaW1wbC5ieXRlTWV0aG9kKCkpKTsK
KyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJ5dGU+KGltcGwuYnl0
ZU1ldGhvZCgpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2QoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNTc5
NSwxMyArNTg1NSwyMyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3NCbwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYnl0ZUFyZyA9IGNvbnZlcnQ8SURMQnl0ZT4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwor
ICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAg
ICBhdXRvIGJ5dGVBcmcgPSBjb252ZXJ0PElETEJ5dGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7Ci0gICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGF1
dG8gYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAgICBhdXRv
IHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQxKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwotICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBb
XShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
c2NvcGUsIDIsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJieXRlTWV0aG9kV2l0aEFyZ3MiLCAi
VGVzdE9iaiIpOyB9KTsKKyAgICBhdXRvIGFyZ3VtZW50MiA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMik7CisgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0
T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MiwgW10oSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJv
d0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAyLCAib2JqQXJn
IiwgIlRlc3RPYmplY3QiLCAiYnl0ZU1ldGhvZFdpdGhBcmdzIiwgIlRlc3RPYmoiKTsgfSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQnl0ZT4oaW1wbC5ieXRlTWV0aG9kV2l0
aEFyZ3MoV1RGTW92ZShieXRlQXJnKSwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSkpOworICAg
IGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQnl0ZT4oaW1wbC5ieXRlTWV0
aG9kV2l0aEFyZ3MoV1RGTW92ZShieXRlQXJnKSwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSkp
OworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5k
IG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Cisg
ICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsKKyAgICBlbnN1cmVTdGlsbEFsaXZl
SGVyZShhcmd1bWVudDIpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRo
QXJncyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCkBAIC01ODE1LDcgKzU4ODUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZEJvZHkoSlNDOgogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExPY3RldD4oaW1wbC5vY3RldE1ldGhvZCgpKSk7CisgICAgYXV0
byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExPY3RldD4oaW1wbC5vY3RldE1ldGhv
ZCgpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTU4MzEsMTMg
KzU5MDIsMjMgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RXaXRoQXJnc0IKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxH
bG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIG9jdGV0QXJnID0gY29udmVydDxJRExPY3RldD4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAg
IGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBh
dXRvIG9jdGV0QXJnID0gY29udmVydDxJRExPY3RldD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFy
Z3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKLSAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgYXV0
byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOworICAgIGF1dG8g
c3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDEpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7Ci0gICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMiksIFtd
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgMiwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm9jdGV0TWV0aG9kV2l0aEFyZ3MiLCAi
VGVzdE9iaiIpOyB9KTsKKyAgICBhdXRvIGFyZ3VtZW50MiA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMik7CisgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0
T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MiwgW10oSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJv
d0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAyLCAib2JqQXJn
IiwgIlRlc3RPYmplY3QiLCAib2N0ZXRNZXRob2RXaXRoQXJncyIsICJUZXN0T2JqIik7IH0pOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE9jdGV0PihpbXBsLm9jdGV0TWV0aG9k
V2l0aEFyZ3MoV1RGTW92ZShvY3RldEFyZyksIFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykpKTsK
KyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE9jdGV0PihpbXBsLm9j
dGV0TWV0aG9kV2l0aEFyZ3MoV1RGTW92ZShvY3RldEFyZyksIFdURk1vdmUoc3RyQXJnKSwgKm9i
akFyZykpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0
aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVu
dDApOworICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7CisgICAgZW5zdXJlU3Rp
bGxBbGl2ZUhlcmUoYXJndW1lbnQyKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1l
dGhvZFdpdGhBcmdzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKQEAgLTU4NTEsNyArNTkzMiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RCb2R5KEpT
Qzo6CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETExvbmc+KGltcGwubG9uZ01ldGhvZCgpKSk7Cisg
ICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExMb25nPihpbXBsLmxvbmdN
ZXRob2QoKSkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTU4Njcs
MTMgKzU5NDksMjMgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZFdpdGhBcmdzQm8KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PElETExvbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAg
ICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAg
YXV0byBsb25nQXJnID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwotICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBhdXRv
IGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7CisgICAgYXV0byBz
dHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50MSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKLSAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgW10o
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNj
b3BlLCAyLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAibG9uZ01ldGhvZFdpdGhBcmdzIiwgIlRl
c3RPYmoiKTsgfSk7CisgICAgYXV0byBhcmd1bWVudDIgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDIpOworICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9i
aj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDIsIFtdKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dB
cmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMiwgIm9iakFyZyIs
ICJUZXN0T2JqZWN0IiwgImxvbmdNZXRob2RXaXRoQXJncyIsICJUZXN0T2JqIik7IH0pOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETExvbmc+KGltcGwubG9uZ01ldGhvZFdpdGhB
cmdzKFdURk1vdmUobG9uZ0FyZyksIFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykpKTsKKyAgICBh
dXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETExvbmc+KGltcGwubG9uZ01ldGhv
ZFdpdGhBcmdzKFdURk1vdmUobG9uZ0FyZyksIFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykpKTsK
KworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBv
ZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworICAg
IGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7CisgICAgZW5zdXJlU3RpbGxBbGl2ZUhl
cmUoYXJndW1lbnQyKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0aEFy
Z3MoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQpAQCAtNTg4Nyw3ICs1OTc5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kQm9keShKU0M6OkoKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm9iak1ldGhvZCgpKSk7CisgICAg
YXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
b2JqTWV0aG9kKCkpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTU5
MDMsMTMgKzU5OTYsMjMgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kV2l0aEFyZ3NCb2QKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PElETExvbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
KyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Cisg
ICAgYXV0byBsb25nQXJnID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwotICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBh
dXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7CisgICAgYXV0
byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFy
Z3VtZW50MSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKLSAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgyKSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCAyLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib2JqTWV0aG9kV2l0aEFyZ3MiLCAi
VGVzdE9iaiIpOyB9KTsKKyAgICBhdXRvIGFyZ3VtZW50MiA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMik7CisgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0
T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MiwgW10oSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJv
d0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAyLCAib2JqQXJn
IiwgIlRlc3RPYmplY3QiLCAib2JqTWV0aG9kV2l0aEFyZ3MiLCAiVGVzdE9iaiIpOyB9KTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwub2JqTWV0
aG9kV2l0aEFyZ3MoV1RGTW92ZShsb25nQXJnKSwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSkp
OworICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFRl
c3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBpbXBsLm9iak1ldGhvZFdpdGhBcmdzKFdURk1vdmUobG9uZ0FyZyksIFdURk1vdmUoc3RyQXJn
KSwgKm9iakFyZykpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1
bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShh
cmd1bWVudDApOworICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7CisgICAgZW5z
dXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQyKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
YmpNZXRob2RXaXRoQXJncyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCkBAIC01OTIzLDcgKzYwMjYsOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSW5zdGFuY2VGdW5jdGlvblVuZm9yZ2VhYmxlTWV0
aG9kQm9keQogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExMb25nPihpbXBsLnVuZm9yZ2VhYmxlTWV0
aG9kKCkpKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETExvbmc+
KGltcGwudW5mb3JnZWFibGVNZXRob2QoKSkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqSW5zdGFuY2VGdW5jdGlvblVuZm9y
Z2VhYmxlTWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKQEAgLTU5MzksOSArNjA0MywxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQXJnVHJl
YXRpbgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJnID0g
Y29udmVydDxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExET01TdHJpbmc+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0
byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8g
YXJnID0gY29udmVydDxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExET01TdHJpbmc+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aEFyZ1Ry
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoV1RGTW92ZShhcmcpKTsKKworICAgIC8vIE1ha2Ugc3Vy
ZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAg
ICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNTk1OCw5ICs2MDY3LDE0IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhYUGF0aE5TUmVzCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0g
ICAgYXV0byByZXNvbHZlciA9IGNvbnZlcnQ8SURMWFBhdGhOU1Jlc29sdmVyPFhQYXRoTlNSZXNv
bHZlcj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUsIDAsICJyZXNvbHZlciIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhYUGF0
aE5TUmVzb2x2ZXJQYXJhbWV0ZXIiLCAiWFBhdGhOU1Jlc29sdmVyIik7IH0pOworICAgIGF1dG8g
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHJl
c29sdmVyID0gY29udmVydDxJRExYUGF0aE5TUmVzb2x2ZXI8WFBhdGhOU1Jlc29sdmVyPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50
VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAicmVzb2x2ZXIiLCAiVGVz
dE9iamVjdCIsICJtZXRob2RXaXRoWFBhdGhOU1Jlc29sdmVyUGFyYW1ldGVyIiwgIlhQYXRoTlNS
ZXNvbHZlciIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRl
cigqcmVzb2x2ZXIpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVu
dGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFy
Z3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
fQogCkBAIC01OTc1LDcgKzYwODksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVN0cmluZ01ldGhvZAogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodG9KUzxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgaW1wbC5udWxsYWJsZVN0cmluZ01ldGhvZCgpKSk7CisgICAgYXV0byByZXN1bHQgPSBK
U1ZhbHVlOjplbmNvZGUodG9KUzxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgaW1wbC5udWxsYWJsZVN0cmluZ01ldGhvZCgpKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nTWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTU5ODgsNyArNjEwMyw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0
aW9uTnVsbGFibGVTdHJpbmdTdGF0CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMTnVsbGFibGU8SURM
RE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIFRlc3RPYmo6Om51bGxhYmxlU3RyaW5n
U3RhdGljTWV0aG9kKCkpKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pT
PElETE51bGxhYmxlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBUZXN0T2Jq
OjpudWxsYWJsZVN0cmluZ1N0YXRpY01ldGhvZCgpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0
aW9uTnVsbGFibGVTdHJpbmdTdGF0aWNNZXRob2QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNjAwNCw5ICs2MTIwLDE1IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk51bGxhYmxlU3RyaW5nU3BlY2lhCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
Ci0gICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gaW5kZXgg
PSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3Ry
aW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwubnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0
aG9kKFdURk1vdmUoaW5kZXgpKSkpOworICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGlt
cGwubnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kKFdURk1vdmUoaW5kZXgpKSkpOworCisgICAg
Ly8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMg
bWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTYwMjIsOSAr
NjE0NCwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZ0JvZAogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOwotICAgIGF1dG8gZW51bUFyZyA9IGNvbnZlcnQ8SURMRW51bWVyYXRpb248
VGVzdE9iajo6RW51bVR5cGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiZW51bUFyZyIsICJUZXN0T2JqZWN0
IiwgIm1ldGhvZFdpdGhFbnVtQXJnIiwgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2Jq
OjpFbnVtVHlwZT4oKSk7IH0pOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGVudW1BcmcgPSBjb252ZXJ0PElETEVudW1lcmF0
aW9uPFRlc3RPYmo6OkVudW1UeXBlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHNjb3BlLCAwLCAiZW51bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhFbnVt
QXJnIiwgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtVHlwZT4oKSk7IH0p
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgaW1wbC5tZXRob2RXaXRoRW51bUFyZyhXVEZNb3ZlKGVudW1BcmcpKTsKKworICAgIC8v
IE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1l
dGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNjA0MSw5ICs2MTY4LDE0
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhTdGFuZGFsb25lCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7Ci0gICAgYXV0byBlbnVtQXJnID0gY29udmVydDxJRExFbnVtZXJhdGlvbjxUZXN0U3Rh
bmRhbG9uZUVudW1lcmF0aW9uPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUVudW1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImVudW1BcmciLCAiVGVzdE9iamVj
dCIsICJtZXRob2RXaXRoU3RhbmRhbG9uZUVudW1BcmciLCBleHBlY3RlZEVudW1lcmF0aW9uVmFs
dWVzPFRlc3RTdGFuZGFsb25lRW51bWVyYXRpb24+KCkpOyB9KTsKKyAgICBhdXRvIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBlbnVtQXJnID0g
Y29udmVydDxJRExFbnVtZXJhdGlvbjxUZXN0U3RhbmRhbG9uZUVudW1lcmF0aW9uPj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVz
dEJlRW51bUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiZW51bUFyZyIsICJU
ZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhTdGFuZGFsb25lRW51bUFyZyIsIGV4cGVjdGVkRW51bWVy
YXRpb25WYWx1ZXM8VGVzdFN0YW5kYWxvbmVFbnVtZXJhdGlvbj4oKSk7IH0pOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5t
ZXRob2RXaXRoU3RhbmRhbG9uZUVudW1BcmcoV1RGTW92ZShlbnVtQXJnKSk7CisKKyAgICAvLyBN
YWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRo
b2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTYwNTgsOSArNjE5MCwxNCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbgogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwotICAgIGF1dG8gZW51bUFyZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCku
aXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUZXN0T2Jq
OjpFbnVtVHlwZT4+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETEVudW1l
cmF0aW9uPFRlc3RPYmo6OkVudW1UeXBlPj46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMRW51bWVy
YXRpb248VGVzdE9iajo6RW51bVR5cGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJl
RW51bUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiZW51bUFyZyIsICJUZXN0
T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmciLCBleHBlY3RlZEVudW1lcmF0aW9u
VmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpKTsgfSkpOworICAgIGF1dG8gYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBhdXRvIGVudW1BcmcgPSBhcmd1bWVudDAuaXNV
bmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpF
bnVtVHlwZT4+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETEVudW1lcmF0
aW9uPFRlc3RPYmo6OkVudW1UeXBlPj46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMRW51bWVyYXRp
b248VGVzdE9iajo6RW51bVR5cGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLCBb
XShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUsIDAsICJlbnVtQXJnIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlv
bmFsRW51bUFyZyIsIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+
KCkpOyB9KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmcoV1RGTW92ZShlbnVt
QXJnKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhp
cyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQw
KTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAg
LTYwNzUsOSArNjIxMiwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbgogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gZW51bUFyZyA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IFRlc3RPYmo6OkVudW1UeXBlOjpFbnVt
VmFsdWUxIDogY29udmVydDxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
c2NvcGUsIDAsICJlbnVtQXJnIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsRW51
bUFyZ0FuZERlZmF1bHRWYWx1ZSIsIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6
RW51bVR5cGU+KCkpOyB9KTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMCk7CisgICAgYXV0byBlbnVtQXJnID0gYXJndW1lbnQwLmlzVW5kZWZpbmVkKCkgPyBUZXN0
T2JqOjpFbnVtVHlwZTo6RW51bVZhbHVlMSA6IGNvbnZlcnQ8SURMRW51bWVyYXRpb248VGVzdE9i
ajo6RW51bVR5cGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLCBbXShKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KSB7IHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGUsIDAsICJlbnVtQXJnIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsRW51bUFy
Z0FuZERlZmF1bHRWYWx1ZSIsIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51
bVR5cGU+KCkpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1
bHRWYWx1ZShXVEZNb3ZlKGVudW1BcmcpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMg
c3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGls
bEFsaXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KIApAQCAtNjA5NCwxMSArNjIzNiwxOSBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVx
dWlyZXNBbAogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYg
KFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gc3Ry
QXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIG9iakFy
ZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3Vt
ZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAxLCAib2JqQXJnIiwgIlRl
c3RPYmplY3QiLCAibWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyIsICJUZXN0T2Jq
Iik7IH0pOworICAgIGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgxKTsKKyAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1l
bnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDEsICJvYmpBcmciLCAiVGVz
dE9iamVjdCIsICJtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzIiwgIlRlc3RPYmoi
KTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RP
Ymo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0
aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoV1RGTW92
ZShzdHJBcmcpLCAqb2JqQXJnKSkpOworICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFRoYXRSZXF1aXJl
c0FsbEFyZ3NBbmRUaHJvd3MoV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSkpOworCisgICAgLy8g
TWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0
aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisgICAgZW5zdXJlU3Rp
bGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RU
aGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTYxMTQsOSArNjI2NCwxNCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoVVNWU3RyaW5nQQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwot
ICAgIGF1dG8gc3RyID0gY29udmVydDxJRExVU1ZTdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBzdHIgPSBjb252ZXJ0
PElETFVTVlN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBs
Lm1ldGhvZFdpdGhVU1ZTdHJpbmdBcmcoV1RGTW92ZShzdHIpKTsKKworICAgIC8vIE1ha2Ugc3Vy
ZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAg
ICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNjEzMyw5ICs2Mjg4LDE0IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhOdWxsYWJsZVVTCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0g
ICAgYXV0byBzdHIgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFVTVlN0cmluZz4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRv
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBz
dHIgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFVTVlN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTnVsbGFibGVVU1ZTdHJpbmdBcmco
V1RGTW92ZShzdHIpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1
bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShh
cmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIApAQCAtNjE1Miw5ICs2MzEyLDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBCiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBzdHIgPSBjb252ZXJ0PElE
TFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETFVTVlN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBzdHIgPSBjb252
ZXJ0PElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETFVTVlN0cmluZz4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZyhXVEZNb3ZlKHN0cikpOworCisgICAgLy8gTWFrZSBzdXJl
IGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAg
IGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC02MTcxLDkgKzYzMzYsMTQgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aEJ5dGVTdHJpbmcKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAg
ICBhdXRvIHN0ciA9IGNvbnZlcnQ8SURMQnl0ZVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8
SURMQnl0ZVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBs
Lm1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnKFdURk1vdmUoc3RyKSk7CisKKyAgICAvLyBNYWtlIHN1
cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisg
ICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTYxOTAsOSArNjM2MCwxNCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoTnVsbGFibGVCeQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwot
ICAgIGF1dG8gc3RyID0gY29udmVydDxJRExOdWxsYWJsZTxJRExCeXRlU3RyaW5nPj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1
dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRv
IHN0ciA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMQnl0ZVN0cmluZz4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTnVsbGFibGVCeXRlU3RyaW5n
QXJnKFdURk1vdmUoc3RyKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxp
dmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhl
cmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKQEAgLTYyMDksOSArNjM4NCwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0ZVN0cmluZwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gc3RyID0gY29udmVy
dDxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExCeXRlU3RyaW5nPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHN0ciA9
IGNvbnZlcnQ8SURMVHJlYXROdWxsQXNFbXB0eUFkYXB0b3I8SURMQnl0ZVN0cmluZz4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQnl0ZVN0cmlu
Z0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoV1RGTW92ZShzdHIpKTsKKworICAgIC8vIE1h
a2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhv
ZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNjIyOCw5ICs2NDA4LDE0IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblNlcmlhbGl6ZWRWYWx1ZUJvZHkoCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7Ci0gICAgYXV0byBzZXJpYWxpemVkQXJnID0gY29udmVydDxJRExTZXJpYWxpemVkU2NyaXB0
VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHNlcmlhbGl6ZWRBcmcgPSBjb252
ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuc2VyaWFsaXplZFZhbHVlKFdU
Rk1vdmUoc2VyaWFsaXplZEFyZykpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5
IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxp
dmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogfQogCkBAIC02MjQ3LDkgKzY0MzIsMTQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFJlY29yZEJv
ZHkKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJ
S0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIHJlY29yZFBh
cmFtZXRlciA9IGNvbnZlcnQ8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMTG9uZz4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0
byByZWNvcmRQYXJhbWV0ZXIgPSBjb252ZXJ0PElETFJlY29yZDxJRExET01TdHJpbmcsIElETExv
bmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0
aFJlY29yZChXVEZNb3ZlKHJlY29yZFBhcmFtZXRlcikpOworCisgICAgLy8gTWFrZSBzdXJlIGFy
Z3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC02Mjc5LDcgKzY0NjksOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoRXhjZXB0aW9uUgogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5tZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nTG9u
ZygpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExMb25nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5tZXRob2RXaXRoRXhjZXB0aW9u
UmV0dXJuaW5nTG9uZygpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNl
cHRpb25SZXR1cm5pbmdMb25nKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTYyOTMsNyArNjQ4NCw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhF
eGNlcHRpb25SCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29w
ZSwgaW1wbC5tZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nT2JqZWN0KCkpKTsKKyAgICBhdXRv
IHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29w
ZSwgaW1wbC5tZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nT2JqZWN0KCkpKTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ09iamVjdChKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC02
MzM1LDkgKzY1MjcsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uUHJpdmF0ZU1ldGhvZEJvZHkoSlMKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50ID0gY29udmVydDxJRExET01T
dHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCk7CisgICAgYXV0byBhcmd1bWVudCA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLnByaXZhdGVNZXRob2QoV1RG
TW92ZShhcmd1bWVudCkpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9K
UzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLnByaXZhdGVNZXRob2Qo
V1RGTW92ZShhcmd1bWVudCkpKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkg
YWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYXJndW1lbnQwKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Qcml2YXRlTWV0aG9k
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKQEAgLTYzNTMsOSArNjU1MSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25QdWJsaWNBbmRQcml2YXRlTWV0aAogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQgPSBjb252ZXJ0
PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKTsKKyAgICBhdXRvIGFyZ3VtZW50ID0gY29udmVydDxJRExET01TdHJpbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwucHVibGljQW5k
UHJpdmF0ZU1ldGhvZChXVEZNb3ZlKGFyZ3VtZW50KSkpKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpT
VmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGlt
cGwucHVibGljQW5kUHJpdmF0ZU1ldGhvZChXVEZNb3ZlKGFyZ3VtZW50KSkpKTsKKworICAgIC8v
IE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1l
dGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblB1YmxpY0FuZFByaXZhdGVNZXRob2QoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNjM3MSwxMyArNjU3NSwy
NCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25BZGRFdmVudExpc3RlbmVyQm9keQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
IDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCkpOwotICAgIGF1dG8gdHlwZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gdHlw
ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwotICAgIGF1dG8gbGlzdGVuZXIgPSBjb252ZXJ0PElETEV2ZW50TGlzdGVuZXI8SlNFdmVudExp
c3RlbmVyPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMSksICpjYXN0ZWRUaGlzKTsKKyAgICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMSk7CisgICAgYXV0byBsaXN0ZW5lciA9IGNvbnZlcnQ8SURMRXZlbnRM
aXN0ZW5lcjxKU0V2ZW50TGlzdGVuZXI+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQx
LCAqY2FzdGVkVGhpcyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIHVzZUNhcHR1cmUgPSBjb252ZXJ0PElETEJvb2xlYW4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDIpKTsKKyAgICBhdXRv
IGFyZ3VtZW50MiA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMik7CisgICAgYXV0byB1c2VDYXB0dXJl
ID0gY29udmVydDxJRExCb29sZWFuPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQyKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgIGltcGwuYWRkRXZlbnRMaXN0ZW5lcihXVEZNb3ZlKHR5cGUpLCBXVEZNb3ZlKGxpc3RlbmVy
KSwgV1RGTW92ZSh1c2VDYXB0dXJlKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0
YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQwKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKCZzdGF0aWNfY2FzdDxKU09iamVj
dCY+KCpjYXN0ZWRUaGlzKSwgYXJndW1lbnQxKTsKKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShh
cmd1bWVudDEpOworICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50Mik7CisKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC02Mzk0LDEzICs2
NjA5LDI0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXJCCiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7Ci0gICAgYXV0byB0eXBlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0
byB0eXBlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7Ci0gICAgYXV0byBsaXN0ZW5lciA9IGNvbnZlcnQ8SURMRXZlbnRMaXN0ZW5lcjxKU0V2
ZW50TGlzdGVuZXI+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgxKSwgKmNhc3RlZFRoaXMpOworICAgIGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAgICBhdXRvIGxpc3RlbmVyID0gY29udmVydDxJRExF
dmVudExpc3RlbmVyPEpTRXZlbnRMaXN0ZW5lcj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDEsICpjYXN0ZWRUaGlzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gdXNlQ2FwdHVyZSA9IGNvbnZlcnQ8SURMQm9v
bGVhbj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMikpOworICAg
IGF1dG8gYXJndW1lbnQyID0gY2FsbEZyYW1lLT5hcmd1bWVudCgyKTsKKyAgICBhdXRvIHVzZUNh
cHR1cmUgPSBjb252ZXJ0PElETEJvb2xlYW4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgaW1wbC5yZW1vdmVFdmVudExpc3RlbmVyKFdURk1vdmUodHlwZSksIFdURk1vdmUo
bGlzdGVuZXIpLCBXVEZNb3ZlKHVzZUNhcHR1cmUpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1
bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1
cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoJnN0YXRpY19jYXN0
PEpTT2JqZWN0Jj4oKmNhc3RlZFRoaXMpLCBhcmd1bWVudDEpOworICAgIGVuc3VyZVN0aWxsQWxp
dmVIZXJlKGFyZ3VtZW50MSk7CisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQyKTsK
KwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTY0
MzAsNyArNjY1Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbldpdGhFeGVjU3RhdGVPYmpCb2R5CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoRXhlY1N0YXRlT2JqKCpqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KSkpKTsKKyAgICBhdXRvIHJlc3VsdCA9
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoRXhlY1N0YXRl
T2JqKCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KSkpKTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aEV4ZWNTdGF0ZU9iaihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC02NDU5LDcgKzY2
ODYsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25XaXRoRXhlY1N0YXRlT2JqRXhjZQogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJ
bnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwud2l0aEV4ZWNTdGF0ZU9iakV4Y2VwdGlvbigq
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCkpKSk7CisgICAg
YXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUsIGltcGwud2l0aEV4ZWNTdGF0ZU9iakV4Y2VwdGlvbigqanNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCkpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bldpdGhFeGVjU3RhdGVPYmpFeGNlcHRpb24oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNjUxMiw3ICs2NzQwLDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0
aFNjcmlwdEV4ZWN1dGlvbkMKICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJ
bnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRFeGVjU3RhdGVPYmpFeGNlcHRpb24oKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGlj
YWxHbG9iYWxPYmplY3QpLCAqY2FsbEZyYW1lLCAqY29udGV4dCkpKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1w
bC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZU9iakV4Y2VwdGlvbigqanND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCksICpjYWxsRnJhbWUs
ICpjb250ZXh0KSkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZEV4ZWNTdGF0ZU9iakV4Y2VwdGlvbihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC02NTI5LDcgKzY3NTgsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0RXhlY3V0aW9uQwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOwogICAgIGlmIChVTkxJS0VMWSghY29udGV4dCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pT
PElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNT
dGF0ZVdpdGhTcGFjZXMoKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxP
YmplY3QpLCAqY2FsbEZyYW1lLCAqY29udGV4dCkpKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTVmFs
dWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZEV4ZWNTdGF0ZVdpdGhTcGFjZXMoKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGxleGljYWxHbG9iYWxPYmplY3QpLCAqY2FsbEZyYW1lLCAqY29udGV4dCkpKTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRo
U3BhY2VzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKQEAgLTY1OTYsOSArNjgyNiwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcgog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gb3B0
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVy
dGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+
OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8gb3B0ID0gYXJndW1lbnQwLmlzVW5kZWZpbmVk
KCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KCkgOiBPcHRpb25h
bDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMTG9uZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxB
cmcoV1RGTW92ZShvcHQpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2
ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVy
ZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIApAQCAtNjYxMyw5ICs2ODQ4LDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyCiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBvcHQg
PSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyA2NjYgOiBjb252ZXJ0PElE
TExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAg
YXV0byBvcHQgPSBhcmd1bWVudDAuaXNVbmRlZmluZWQoKSA/IDY2NiA6IGNvbnZlcnQ8SURMTG9u
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhP
cHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZShXVEZNb3ZlKG9wdCkpOworCisgICAgLy8gTWFrZSBz
dXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgor
ICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC02NjMyLDExICs2ODcyLDE4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhOb25PcHRpb25hCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
Ci0gICAgYXV0byBub25PcHQgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBub25PcHQgPSBjb252
ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBv
cHQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252
ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9u
Zz46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpKTsKKyAgICBhdXRvIGFyZ3VtZW50MSA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMSk7CisgICAgYXV0byBvcHQgPSBhcmd1bWVudDEuaXNVbmRlZmlu
ZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlv
bmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOb25PcHRp
b25hbEFyZ0FuZE9wdGlvbmFsQXJnKFdURk1vdmUobm9uT3B0KSwgV1RGTW92ZShvcHQpKTsKKwor
ICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0
aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC02NjUzLDEzICs2OTAwLDIyIEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhOb25PcHRpb25hCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAg
YXV0byBub25PcHQgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBub25PcHQgPSBjb252ZXJ0PElE
TExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBvcHQxID0g
Y2FsbEZyYW1lLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVy
PElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpS
ZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSk7CisgICAgYXV0byBhcmd1bWVudDEgPSBjYWxsRnJh
bWUtPmFyZ3VtZW50KDEpOworICAgIGF1dG8gb3B0MSA9IGFyZ3VtZW50MS5pc1VuZGVmaW5lZCgp
ID8gT3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8
Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDEpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gb3B0MiA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMikuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0
dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29u
dmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgyKSkpOworICAgIGF1dG8gYXJndW1lbnQyID0gY2FsbEZyYW1lLT5hcmd1bWVudCgy
KTsKKyAgICBhdXRvIG9wdDIgPSBhcmd1bWVudDIuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENv
bnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExM
b25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQyKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlv
bmFsQXJncyhXVEZNb3ZlKG5vbk9wdCksIFdURk1vdmUob3B0MSksIFdURk1vdmUob3B0MikpOwor
CisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9m
IHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisgICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsKKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVy
ZShhcmd1bWVudDIpOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIApAQCAtNjY3NCw5ICs2OTMwLDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBzdHIg
PSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IGNvbnZl
cnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApOworICAgIGF1dG8gc3RyID0gYXJndW1lbnQwLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKFdURk1vdmUoc3RyKSk7CisKKyAgICAv
LyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBt
ZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTY2OTEsOSArNjk1Miwx
NCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVUwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gc3RyID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS5p
c1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBjb252ZXJ0PElETFVTVlN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8g
YXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBhdXRvIHN0ciA9IGFyZ3Vt
ZW50MC5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBjb252ZXJ0PElETFVTVlN0cmluZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25h
bFVTVlN0cmluZyhXVEZNb3ZlKHN0cikpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBz
dGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxs
QWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQogCkBAIC02NzA4LDkgKzY5NzQsMTQgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsQXQKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIHN0ciA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IG51bGxBdG9t
KCkgOiBjb252ZXJ0PElETEF0b21TdHJpbmdBZGFwdG9yPElETERPTVN0cmluZz4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRv
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgYXV0byBzdHIgPSBhcmd1
bWVudDAuaXNVbmRlZmluZWQoKSA/IG51bGxBdG9tKCkgOiBjb252ZXJ0PElETEF0b21TdHJpbmdB
ZGFwdG9yPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nKFdURk1vdmUoc3RyKSk7CisKKyAg
ICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhp
cyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTY3MjUsOSArNjk5
NiwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdAogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gc3RyID0gY2FsbEZyYW1lLT5hcmd1bWVudCgw
KS5pc1VuZGVmaW5lZCgpID8gImZvbyJfcyA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0
byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8gc3RyID0gYXJn
dW1lbnQwLmlzVW5kZWZpbmVkKCkgPyAiZm9vIl9zIDogY29udmVydDxJRExET01TdHJpbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9u
YWxTdHJpbmdBbmREZWZhdWx0VmFsdWUoV1RGTW92ZShzdHIpKTsKKworICAgIC8vIE1ha2Ugc3Vy
ZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAg
ICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNjc0Miw5ICs3MDE4LDE0IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbEF0CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgYXV0byBzdHIgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVk
KCkgPyBBdG9tU3RyaW5nKCJmb28iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkg
OiBjb252ZXJ0PElETEF0b21TdHJpbmdBZGFwdG9yPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgYXV0byBzdHIgPSBhcmd1bWVu
dDAuaXNVbmRlZmluZWQoKSA/IEF0b21TdHJpbmcoImZvbyIsIEF0b21TdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSA6IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5n
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhP
cHRpb25hbEF0b21TdHJpbmdBbmREZWZhdWx0VmFsdWUoV1RGTW92ZShzdHIpKTsKKworICAgIC8v
IE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1l
dGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNjc1OSw5ICs3MDQwLDE0
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBzdHIgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8gc3RyID0gYXJndW1l
bnQwLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFs
U3RyaW5nSXNOdWxsKFdURk1vdmUoc3RyKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRz
IHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3Rp
bGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CiAKQEAgLTY3NzYsOSArNzA2MiwxNCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxTdAogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IGF1dG8gc3RyID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
YXJndW1lbnQoMCk7CisgICAgYXV0byBzdHIgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0
cmluZ0lzVW5kZWZpbmVkKFdURk1vdmUoc3RyKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1l
bnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTY3OTMsOSArNzA4NCwxNCBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxBdAogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIGF1dG8gc3RyID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gbnVs
bEF0b20oKSA6IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAg
IGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBhdXRvIHN0ciA9
IGFyZ3VtZW50MC5pc1VuZGVmaW5lZCgpID8gbnVsbEF0b20oKSA6IGNvbnZlcnQ8SURMQXRvbVN0
cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEF0b21TdHJpbmdJc051bGwoV1RGTW92ZShz
dHIpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlz
IGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDAp
OworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAt
NjgxMCw5ICs3MTA2LDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBzdHIgPSBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogY29udmVydDxJRExE
T01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Cisg
ICAgYXV0byBzdHIgPSBhcmd1bWVudDAuaXNVbmRlZmluZWQoKSA/IGVtcHR5U3RyaW5nKCkgOiBj
b252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzRW1wdHlTdHJpbmcoV1RGTW92ZShzdHIp
KTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVu
ZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwor
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNjgy
Nyw5ICs3MTI4LDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVTCiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBzdHIgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogY29udmVydDxJRExVU1ZT
dHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAg
YXV0byBzdHIgPSBhcmd1bWVudDAuaXNVbmRlZmluZWQoKSA/IGVtcHR5U3RyaW5nKCkgOiBjb252
ZXJ0PElETFVTVlN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBp
bXBsLm1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0lzRW1wdHlTdHJpbmcoV1RGTW92ZShzdHIp
KTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVu
ZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwor
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNjg0
NCw5ICs3MTUwLDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBzdHIgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBlbXB0eUF0b20oKSA6IGNvbnZlcnQ8SURMQXRvbVN0
cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1l
LT5hcmd1bWVudCgwKTsKKyAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC5pc1VuZGVmaW5lZCgpID8g
ZW1wdHlBdG9tKCkgOiBjb252ZXJ0PElETEF0b21TdHJpbmdBZGFwdG9yPElETERPTVN0cmluZz4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0
aW9uYWxBdG9tU3RyaW5nSXNFbXB0eVN0cmluZyhXVEZNb3ZlKHN0cikpOworCisgICAgLy8gTWFr
ZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9k
LgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC02ODYxLDkgKzcxNzIsMTQgQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsRG8KICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRG91
YmxlPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CisgICAg
YXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8gbnVtYmVy
ID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWREb3VibGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTihXVEZNb3Zl
KG51bWJlcikpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGls
IHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3Vt
ZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQog
CkBAIC02ODc4LDkgKzcxOTQsMTQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRmwKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG51bWJlciA9IGNv
bnZlcnQ8SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMCk7CisgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZEZsb2F0Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlv
bmFsRmxvYXRJc05hTihXVEZNb3ZlKG51bWJlcikpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3Vt
ZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3Vy
ZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC02ODk1LDkgKzcyMTYsMTQgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE9wdGlvbmFsTG8KICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBhdXRvIG51bWJlciA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/
IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nTG9uZz46OlJldHVyblR5cGU+KCkgOiBPcHRpb25h
bDxDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmdMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSkp
OworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBhdXRv
IG51bWJlciA9IGFyZ3VtZW50MC5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElE
TExvbmdMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nTG9u
Zz46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMTG9uZ0xvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmcoV1RGTW92
ZShudW1iZXIpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRp
bCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1
bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IApAQCAtNjkxMiw5ICs3MjM4LDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvCiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBudW1iZXIgPSBj
b252ZXJ0PElETExvbmdMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1
bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwor
ICAgIGF1dG8gbnVtYmVyID0gY29udmVydDxJRExMb25nTG9uZz4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nSXNaZXJv
KFdURk1vdmUobnVtYmVyKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxp
dmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhl
cmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKQEAgLTY5MjksOSArNzI2MCwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbgog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbnVt
YmVyID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29u
dmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29u
dmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETFVuc2ln
bmVkTG9uZ0xvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
OworICAgIGF1dG8gbnVtYmVyID0gYXJndW1lbnQwLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxD
b252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxD
b252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMVW5z
aWduZWRMb25nTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCkpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1w
bC5tZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nKFdURk1vdmUobnVtYmVyKSk7CisK
KyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2Yg
dGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTY5NDYsOSAr
NzI4MiwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbgogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbnVtYmVyID0gY29udmVydDxJRExVbnNp
Z25lZExvbmdMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgw
KSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1
dG8gbnVtYmVyID0gY29udmVydDxJRExVbnNpZ25lZExvbmdMb25nPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25n
TG9uZ0lzWmVybyhXVEZNb3ZlKG51bWJlcikpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50
cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0
aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCkBAIC02OTYzLDkgKzczMDQsMTQgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsU2UKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBhdXRvIGFycmF5ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gQ29u
dmVydGVyPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+OjpSZXR1cm5UeXBleyB9IDogY29udmVy
dDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8gYXJyYXkgPSBhcmd1bWVudDAuaXNVbmRlZmluZWQo
KSA/IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pjo6UmV0dXJuVHlwZXsgfSA6
IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlKFdURk1vdmUo
YXJyYXkpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0
aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVu
dDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApA
QCAtNjk4MCw5ICs3MzI2LDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlCiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcnJheSA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxJ
RExET01TdHJpbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9N
U3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAg
ICBhdXRvIGFycmF5ID0gYXJndW1lbnQwLmlzVW5kZWZpbmVkKCkgPyBDb252ZXJ0ZXI8SURMU2Vx
dWVuY2U8SURMRE9NU3RyaW5nPj46OlJldHVyblR5cGV7IH0gOiBjb252ZXJ0PElETFNlcXVlbmNl
PElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1w
bC5tZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHkoV1RGTW92ZShhcnJheSkpOworCisg
ICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRo
aXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC02OTk3LDkgKzcz
NDgsMTQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm8KICAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIGIgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMQm9vbGVhbj46OlJldHVyblR5
cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMQm9vbGVhbj46OlJldHVyblR5cGU+KGNvbnZl
cnQ8SURMQm9vbGVhbj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQo
MCk7CisgICAgYXV0byBiID0gYXJndW1lbnQwLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252
ZXJ0ZXI8SURMQm9vbGVhbj46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURM
Qm9vbGVhbj46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMQm9vbGVhbj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuKFdU
Rk1vdmUoYikpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGls
IHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3Vt
ZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQog
CkBAIC03MDE0LDkgKzczNzAsMTQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm8KICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIGIgPSBjb252ZXJ0
PElETEJvb2xlYW4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
KTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgYXV0
byBiID0gY29udmVydDxJRExCb29sZWFuPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2UoV1RGTW92ZShiKSk7
CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQg
b2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTcwMzEs
OSArNzM5MiwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBbgogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMQW55Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CisgICAgYXV0byBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8gYSA9IGNvbnZlcnQ8
SURMQW55PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9k
V2l0aE9wdGlvbmFsQW55KFdURk1vdmUoYSkpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50
cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0
aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCkBAIC03MDQ4LDkgKzc0MTQsMTQgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsT2IKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBhdXRvIGEgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25h
bDxDb252ZXJ0ZXI8SURMT2JqZWN0Pjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRl
cjxJRExPYmplY3Q+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETE9iamVjdD4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKKyAgICBhdXRvIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgYXV0byBhID0gYXJndW1lbnQw
LmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMT2JqZWN0Pjo6UmV0dXJuVHlw
ZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExPYmplY3Q+OjpSZXR1cm5UeXBlPihjb252ZXJ0
PElETE9iamVjdD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5t
ZXRob2RXaXRoT3B0aW9uYWxPYmplY3QoV1RGTW92ZShhKSk7CisKKyAgICAvLyBNYWtlIHN1cmUg
YXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTcwNjUsOSArNzQzNiwxNCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxOdQogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwotICAgIGF1dG8gb2JqID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVz
dE9iaj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgW10o
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNj
b3BlLCAwLCAib2JqIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVX
cmFwcGVyIiwgIlRlc3RPYmoiKTsgfSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApOworICAgIGF1dG8gb2JqID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRl
cmZhY2U8VGVzdE9iaj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLCBbXShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUs
IDAsICJvYmoiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBw
ZXIiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVX
cmFwcGVyKFdURk1vdmUob2JqKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkg
YWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKQEAgLTcwODIsOSArNzQ1OCwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxO
dQogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8g
b2JqID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgW10oSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJv
d0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAib2JqIiwg
IlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVySXNOdWxsIiwg
IlRlc3RPYmoiKTsgfSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApOworICAgIGF1dG8gb2JqID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVz
dE9iaj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLCBbXShKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRo
cm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJvYmoi
LCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGwi
LCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFw
cGVySXNOdWxsKFdURk1vdmUob2JqKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0
YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKQEAgLTcwOTksOSArNzQ4MCwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxYUAogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1
dG8gcmVzb2x2ZXIgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFhQYXRoTlNSZXNvbHZlcjxYUGF0
aE5TUmVzb2x2ZXI+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQo
MCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSwgMCwgInJlc29sdmVyIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlv
bmFsWFBhdGhOU1Jlc29sdmVyIiwgIlhQYXRoTlNSZXNvbHZlciIpOyB9KTsKKyAgICBhdXRvIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgYXV0byByZXNvbHZlciA9IGNv
bnZlcnQ8SURMTnVsbGFibGU8SURMWFBhdGhOU1Jlc29sdmVyPFhQYXRoTlNSZXNvbHZlcj4+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1l
bnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJyZXNvbHZlciIsICJU
ZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlciIsICJYUGF0aE5T
UmVzb2x2ZXIiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNvbHZl
cihXVEZNb3ZlKHJlc29sdmVyKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkg
YWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKQEAgLTcxMTYsOSArNzUwMiwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxS
ZQogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8g
cmVjb3JkID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gV1RGOjpudWxs
b3B0IDogY29udmVydDxJRExOdWxsYWJsZTxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExMb25n
Pj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgYXV0
byByZWNvcmQgPSBhcmd1bWVudDAuaXNVbmRlZmluZWQoKSA/IFdURjo6bnVsbG9wdCA6IGNvbnZl
cnQ8SURMTnVsbGFibGU8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMTG9uZz4+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsUmVj
b3JkKFdURk1vdmUocmVjb3JkKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkg
YWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKQEAgLTcxMzMsOSArNzUyNCwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxQ
cgogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8g
cHJvbWlzZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IG51bGxwdHIg
OiBjb252ZXJ0PElETFByb21pc2U8SURMVm9pZD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCk7CisgICAgYXV0byBwcm9taXNlID0gYXJndW1lbnQwLmlzVW5kZWZp
bmVkKCkgPyBudWxscHRyIDogY29udmVydDxJRExQcm9taXNlPElETFZvaWQ+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsUHJvbWlz
ZShXVEZNb3ZlKHByb21pc2UpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBh
bGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZl
SGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIApAQCAtNzE1Miw5ICs3NTQ4LDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Fy
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtF
TFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBjYWxsYmFjayA9
IGNvbnZlcnQ8SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgKmNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0
QmVGdW5jdGlvbkVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJhY2si
LCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoQ2FsbGJhY2tBcmciKTsgfSk7CisgICAgYXV0byBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gY2Fs
bGJhY2sgPSBjb252ZXJ0PElETENhbGxiYWNrSW50ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJm
YWNlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCwgKmNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIs
ICJtZXRob2RXaXRoQ2FsbGJhY2tBcmciKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhDYWxsYmFj
a0FyZyhjYWxsYmFjay5yZWxlYXNlTm9uTnVsbCgpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1
bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1
cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNzE3MSwxMSArNzU3MiwxOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoTm9uQ2FsbGJhYwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1
dG8gbm9uQ2FsbGJhY2sgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBub25DYWxsYmFjayA9IGNv
bnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRv
IGNhbGxiYWNrID0gY29udmVydDxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0lu
dGVyZmFjZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dB
cmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDEs
ICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENh
bGxiYWNrQXJnIik7IH0pOworICAgIGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgxKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExDYWxsYmFja0lu
dGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDEsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJv
d0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
MSwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5k
Q2FsbGJhY2tBcmciKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENh
bGxiYWNrQXJnKFdURk1vdmUobm9uQ2FsbGJhY2spLCBjYWxsYmFjay5yZWxlYXNlTm9uTnVsbCgp
KTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVu
ZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwor
ICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7CisKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC03MTkwLDkgKzc1OTgsMTQgQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aENhbGxiYWNrQW4KICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExOdWxsYWJsZTxJRExDYWxs
YmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJtZXRob2RX
aXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyIpOyB9KTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMTnVs
bGFibGU8SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+Pj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJtZXRob2RX
aXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aENhbGxi
YWNrQW5kT3B0aW9uYWxBcmcoV1RGTW92ZShjYWxsYmFjaykpOworCisgICAgLy8gTWFrZSBzdXJl
IGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAg
IGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC03MjA5LDkgKzc2MjIsMTQgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aENhbGxiYWNrRnUKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAg
ICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExDYWxsYmFja0Z1bmN0aW9uPEpTVGVzdENhbGxi
YWNrRnVuY3Rpb24+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRo
cm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3Bl
LCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlv
bkFyZyIpOyB9KTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CisgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tGdW5jdGlv
bjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1l
bnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2Fs
bGJhY2siLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZyIpOyB9
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgIGltcGwubWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmcoY2FsbGJhY2sucmVsZWFz
ZU5vbk51bGwoKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50
aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJn
dW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKQEAgLTcyMjgsMTEgKzc2NDYsMTggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWMKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIG5vbkNhbGxiYWNrID0gY29u
dmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOworICAgIGF1dG8gbm9uQ2FsbGJhY2sgPSBjb252ZXJ0PElETExvbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8
SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSksICpjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgImNhbGxiYWNrIiwgIlRlc3RPYmpl
Y3QiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyIpOyB9
KTsKKyAgICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7
CisgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RD
YWxsYmFja0Z1bmN0aW9uPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MSwgKmNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVG
dW5jdGlvbkVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAxLCAiY2FsbGJhY2siLCAi
VGVzdE9iamVjdCIsICJtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9u
QXJnIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1
bmN0aW9uQXJnKFdURk1vdmUobm9uQ2FsbGJhY2spLCBjYWxsYmFjay5yZWxlYXNlTm9uTnVsbCgp
KTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVu
ZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwor
ICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7CisKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC03MjQ3LDkgKzc2NzIsMTQgQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aENhbGxiYWNrRnUKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExOdWxsYWJsZTxJRExDYWxs
YmFja0Z1bmN0aW9uPEpTVGVzdENhbGxiYWNrRnVuY3Rpb24+Pj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0
aENhbGxiYWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZyIpOyB9KTsKKyAgICBhdXRvIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8
SURMTnVsbGFibGU8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0
aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZyIpOyB9KTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0
aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZyhXVEZNb3ZlKGNhbGxiYWNrKSk7
CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQg
b2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTcyNjMs
OSArNzY5MywxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q29uc3RydWN0b3JGdW5jdGlvblN0YXRpY01ldGhvZFdpdGhDYQogICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURM
TnVsbGFibGU8SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+Pj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksICpqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KSwgW10oSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJv
d0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
MCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAic3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQW5k
T3B0aW9uYWxBcmciKTsgfSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApOworICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETE51bGxhYmxlPElETENhbGxi
YWNrSW50ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPj4+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAsICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFs
T2JqZWN0KSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAi
c3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmciKTsgfSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBUZXN0T2Jq
OjpzdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhXVEZNb3ZlKGNhbGxiYWNr
KSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBl
bmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsK
KwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTcy
ODEsOSArNzcxNiwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29uc3RydWN0b3JGdW5jdGlvblN0YXRpY01ldGhvZFdpdGhDYQogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7Ci0gICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tJbnRlcmZh
Y2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxl
eGljYWxHbG9iYWxPYmplY3QpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5j
dGlvbkVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVz
dE9iamVjdCIsICJzdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBcmciKTsgfSk7CisgICAgYXV0byBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gY2Fs
bGJhY2sgPSBjb252ZXJ0PElETENhbGxiYWNrSW50ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJm
YWNlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCwgKmpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1l
bnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2Fs
bGJhY2siLCAiVGVzdE9iamVjdCIsICJzdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBcmciKTsgfSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBUZXN0T2JqOjpzdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBcmcoY2FsbGJhY2sucmVsZWFz
ZU5vbk51bGwoKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50
aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJn
dW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKQEAgLTcyOTksNyArNzczOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMUJvCiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuY29u
ZGl0aW9uYWxNZXRob2QxKCkpKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0
b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuY29uZGl0aW9uYWxN
ZXRob2QxKCkpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QxKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
QEAgLTczNTEsMTEgKzc3OTIsMTggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDFCb2QKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG9iakFyZyA9IGNv
bnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhy
b3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm9iakFy
ZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiVGVzdE9iaiIpOyB9KTsKKyAg
ICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAg
YXV0byBvYmpBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1
bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm9iakFyZyIsICJU
ZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8g
c3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7CisgICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92
ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKHN0ckFyZykpOworCisgICAg
Ly8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMg
bWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisgICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTczNjUsMTEgKzc4MTMsMTggQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZDJCb2QKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RP
Ymo+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2Qi
LCAiVGVzdE9iaiIpOyB9KTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElE
TEludGVyZmFjZTxUZXN0T2JqPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAsIFtd
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiVGVz
dE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwotICAgIGF1dG8gbG9uZ0FyZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSkuaXNV
bmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6
IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSkp
OworICAgIGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKTsKKyAgICBhdXRv
IGxvbmdBcmcgPSBhcmd1bWVudDEuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJ
RExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0
dXJuVHlwZT4oY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQx
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKGxv
bmdBcmcpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0
aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVu
dDApOworICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7CisKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC03Mzc5LDkgKzc4MzQsMTQg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDNCb2QKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Cisg
ICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAg
IGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUoc3RyQXJnKSk7
CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQg
b2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTczOTEs
OSArNzg1MSwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNEJvZAogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8SURM
TG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKKyAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUobG9uZ0Fy
ZykpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMg
ZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7
CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC03
NDAzLDkgKzc4NjgsMTQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDVCb2QKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIGNhbGxiYWNrID0gY29udmVy
dDxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCAqY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0
aW9uRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJjYWxsYmFjayIsICJUZXN0
T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiKTsgfSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gY2FsbGJhY2sgPSBjb252
ZXJ0PElETENhbGxiYWNrSW50ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBb
XShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVk
TWV0aG9kIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKGNhbGxiYWNrLnJlbGVhc2VO
b25OdWxsKCkpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGls
IHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3Vt
ZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQog
CkBAIC03NDE1LDkgKzc4ODUsMTQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDZCb2QKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIGxpc3RBcmcgPSBj
b252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxET01TdHJpbmdMaXN0Pj4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAs
ICJsaXN0QXJnIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJET01TdHJpbmdM
aXN0Iik7IH0pOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKKyAgICBhdXRvIGxpc3RBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVy
ZmFjZTxET01TdHJpbmdMaXN0Pj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAsIFtd
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgMCwgImxpc3RBcmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIkRP
TVN0cmluZ0xpc3QiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShsaXN0
QXJnKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhp
cyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQw
KTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAg
LTc0MjcsOSArNzkwMiwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kN0JvZAogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJyYXlBcmcgPSBjb252
ZXJ0PElETE51bGxhYmxlPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gYXJyYXlB
cmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChX
VEZNb3ZlKGFycmF5QXJnKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxp
dmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhl
cmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKQEAgLTc0MzksOSArNzkxOSwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOEJvZAog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gb2Jq
QXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJn
dW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJvYmpBcmciLCAi
VGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIlRlc3RPYmoiKTsgfSk7CisgICAgYXV0
byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8g
b2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJs
b2FkZWRNZXRob2QiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZCgq
b2JqQXJnKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0
aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVu
dDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApA
QCAtNzQ1MSw5ICs3OTM2LDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q5Qm9kCiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byB3aW5kb3cgPSBjb252
ZXJ0PElETEludGVyZmFjZTxXaW5kb3dQcm94eT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRU
eXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJ3aW5kb3ciLCAiVGVzdE9i
amVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIldpbmRvd1Byb3h5Iik7IH0pOworICAgIGF1dG8g
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHdp
bmRvdyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFdpbmRvd1Byb3h5Pj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MCwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAid2luZG93IiwgIlRlc3RPYmplY3QiLCAib3Zl
cmxvYWRlZE1ldGhvZCIsICJXaW5kb3dQcm94eSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1l
dGhvZCgqd2luZG93KTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1
bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShh
cmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIApAQCAtNzQ2Myw5ICs3OTUzLDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMEJvCiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcnJheUFy
ZyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGFycmF5QXJnID0g
Y29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGFycmF5QXJnKSk7
CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQg
b2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTc0NzUs
OSArNzk3MCwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTFCbwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJyYXlBcmcgPSBjb252ZXJ0PElE
TFNlcXVlbmNlPElETFVuc2lnbmVkTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBhcnJheUFyZyA9IGNvbnZlcnQ8SURM
U2VxdWVuY2U8SURMVW5zaWduZWRMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShhcnJheUFyZykpOworCisgICAg
Ly8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMg
bWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC03NDg3LDkgKzc5ODcs
MTQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyQm8KICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwor
ICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUoc3RyQXJn
KSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBl
bmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsK
KwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTc1
NjQsMTEgKzgwNjksMTggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOworICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElE
TE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPmFyZ3VtZW50KDEpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDEsICJvYmpBcmciLCAiVGVzdE9iamVjdCIs
ICJvdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyIiwgIlRlc3RPYmoiKTsgfSk7
CisgICAgYXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpOworICAgIGF1dG8g
b2JqQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRU
eXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDEsICJvYmpBcmciLCAiVGVzdE9i
amVjdCIsICJvdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyIiwgIlRlc3RPYmoi
KTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIoV1RG
TW92ZShzdHJBcmcpLCBXVEZNb3ZlKG9iakFyZykpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3Vt
ZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3Vy
ZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJn
dW1lbnQxKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKQEAgLTc1NzgsMTEgKzgwOTAsMTggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG9iakFyZyA9
IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6SlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsg
dGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm9i
akFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0
ZXIiLCAiVGVzdE9iaiIpOyB9KTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETE51bGxhYmxl
PElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAs
IFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCBzY29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2RXaXRo
T3B0aW9uYWxQYXJhbWV0ZXIiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gbG9uZ0FyZyA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJ
RExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0
dXJuVHlwZT4oY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgxKSkpOworICAgIGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1l
LT5hcmd1bWVudCgxKTsKKyAgICBhdXRvIGxvbmdBcmcgPSBhcmd1bWVudDEuaXNVbmRlZmluZWQo
KSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFs
PENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQxKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRo
T3B0aW9uYWxQYXJhbWV0ZXIoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKGxvbmdBcmcpKTsKKwor
ICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0
aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC03NjI0LDkgKzgxNDMsMTQgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZFdpdGgKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBhdXRvIG9iamVjdE9yTm9kZSA9IGNvbnZlcnQ8SURMVW5pb248SURMSW50ZXJmYWNl
PFRlc3RPYmo+LCBJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIG9iamVjdE9yTm9kZSA9
IGNvbnZlcnQ8SURMVW5pb248SURMSW50ZXJmYWNlPFRlc3RPYmo+LCBJRExJbnRlcmZhY2U8VGVz
dE5vZGU+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJs
b2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbihXVEZNb3ZlKG9iamVjdE9yTm9kZSkp
OworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5k
IG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC03NjM2
LDkgKzgxNjAsMTQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExM
b25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OworICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5n
VW5pb24oV1RGTW92ZSh2YWx1ZSkpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5
IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxp
dmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogfQogCkBAIC03Njc0LDkgKzgyMDMsMTQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdp
dGgKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRv
IG9iamVjdE9yTm9kZSA9IGNvbnZlcnQ8SURMVW5pb248SURMSW50ZXJmYWNlPFRlc3RPYmo+LCBJ
RExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIG9iamVjdE9yTm9kZSA9IGNvbnZlcnQ8SURM
VW5pb248SURMSW50ZXJmYWNlPFRlc3RPYmo+LCBJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2RX
aXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zKFdURk1vdmUob2JqZWN0T3JOb2RlKSk7CisKKyAgICAv
LyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBt
ZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTc2ODYsOSArODIyMCwx
NCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aAogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETFVuaW9uPElETElu
dGVyZmFjZTxUZXN0SW50ZXJmYWNlPiwgSURMRE9NU3RyaW5nLCBJRExMb25nPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8g
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHZh
bHVlID0gY29udmVydDxJRExVbmlvbjxJRExJbnRlcmZhY2U8VGVzdEludGVyZmFjZT4sIElETERP
TVN0cmluZywgSURMTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
aW1wbC5vdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9ucyhXVEZNb3ZlKHZh
bHVlKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhp
cyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQw
KTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAg
LTc3MjYsMTEgKzgyNjUsMTggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG9iamVjdE9yTm9kZSA9
IGNvbnZlcnQ8SURMVW5pb248SURMSW50ZXJmYWNlPFRlc3RPYmo+LCBJRExJbnRlcmZhY2U8VGVz
dE5vZGU+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKTsKKyAgICBhdXRvIG9iamVjdE9yTm9kZSA9IGNvbnZlcnQ8SURMVW5pb248SURMSW50ZXJm
YWNlPFRlc3RPYmo+LCBJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIG9iamVjdCA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRl
c3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgxKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHNjb3BlLCAxLCAib2JqZWN0IiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhv
ZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uIiwgIlRlc3RPYmoiKTsgfSk7CisgICAgYXV0byBh
cmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOworICAgIGF1dG8gb2Jq
ZWN0ID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDEsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgIm9iamVjdCIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2Fk
ZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbiIsICJUZXN0T2JqIik7IH0pOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
aW1wbC5vdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24oV1RGTW92ZShv
YmplY3RPck5vZGUpLCAqb2JqZWN0KTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3Rh
eSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFs
aXZlSGVyZShhcmd1bWVudDApOworICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7
CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC03
NzQwLDExICs4Mjg2LDE4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBvYmplY3RPck5vZGUgPSBj
b252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwgSURMSW50ZXJmYWNlPFRlc3RO
b2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCk7CisgICAgYXV0byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFj
ZTxUZXN0T2JqPiwgSURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBub2RlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE5v
ZGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgx
KSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHNjb3BlLCAxLCAibm9kZSIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2RXaXRo
Tm9uRGlzdGluZ3Vpc2hpbmdVbmlvbiIsICJUZXN0Tm9kZSIpOyB9KTsKKyAgICBhdXRvIGFyZ3Vt
ZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7CisgICAgYXV0byBub2RlID0g
Y29udmVydDxJRExJbnRlcmZhY2U8VGVzdE5vZGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQxLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgc2NvcGUsIDEsICJub2RlIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhv
ZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uIiwgIlRlc3ROb2RlIik7IH0pOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5v
dmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24oV1RGTW92ZShvYmplY3RP
ck5vZGUpLCAqbm9kZSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUg
dW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUo
YXJndW1lbnQwKTsKKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDEpOworCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNzc3Nyw5ICs4
MzMwLDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElE
TE51bGxhYmxlPElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwgSURMSW50ZXJmYWNlPFRl
c3ROb2RlPj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOworICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExV
bmlvbjxJRExJbnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9kZT4+Pj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkV2l0aE51bGxh
YmxlVW5pb24oV1RGTW92ZShvYmplY3RPck5vZGUpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1
bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1
cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNzc4OSw5ICs4MzQ3LDE0IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
V2l0aE51bGxhYmxlCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGluZGV4ID0gY29udmVy
dDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3Zl
cmxvYWRXaXRoTnVsbGFibGVVbmlvbihXVEZNb3ZlKGluZGV4KSk7CisKKyAgICAvLyBNYWtlIHN1
cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisg
ICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTc4MjksOSArODM5MiwxNCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZFdpdGhPcHRpb25hbAogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS5p
c1VuZGVmaW5lZCgpID8gdHJ1ZSA6IGNvbnZlcnQ8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExC
b29sZWFuPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAg
ICBhdXRvIG9iamVjdE9yTm9kZSA9IGFyZ3VtZW50MC5pc1VuZGVmaW5lZCgpID8gdHJ1ZSA6IGNv
bnZlcnQ8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExCb29sZWFuPj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24oV1RG
TW92ZShvYmplY3RPck5vZGUpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBh
bGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZl
SGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIApAQCAtNzg0MSw5ICs4NDA5LDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFs
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBp
bmRleCA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExMb25nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRXaXRoT3B0
aW9uYWxVbmlvbihXVEZNb3ZlKGluZGV4KSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRz
IHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3Rp
bGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CiAKQEAgLTc4ODIsMTEgKzg0NTUsMTggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRo
TnVsbGFibGUKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBhdXRvIG9iaiA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtd
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgMCwgIm9iaiIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlz
dGluZ3Vpc2hpbmdQYXJhbWV0ZXIiLCAiVGVzdE9iaiIpOyB9KTsKKyAgICBhdXRvIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBvYmogPSBjb252
ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm9iaiIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2Fk
V2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIiLCAiVGVzdE9iaiIpOyB9KTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwot
ICAgIGF1dG8gbm9kZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIFtdKEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
IHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwg
Im5vZGUiLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNo
aW5nUGFyYW1ldGVyIiwgIlRlc3ROb2RlIik7IH0pOworICAgIGF1dG8gYXJndW1lbnQxID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAgICBhdXRvIG5vZGUgPSBjb252ZXJ0PElE
TEludGVyZmFjZTxUZXN0Tm9kZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEsIFtd
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgMSwgIm5vZGUiLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRp
c3Rpbmd1aXNoaW5nUGFyYW1ldGVyIiwgIlRlc3ROb2RlIik7IH0pOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9h
ZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyKFdURk1vdmUob2JqKSwgKm5v
ZGUpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMg
ZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7
CisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsKKwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTc4OTYsMTEgKzg0NzYsMTggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGUKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBhdXRvIG5vZGUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVy
ZmFjZTxUZXN0Tm9kZT4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAibm9kZSIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2Fk
V2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIiLCAiVGVzdE5vZGUiKTsgfSk7
CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwor
ICAgIGF1dG8gbm9kZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3ROb2Rl
Pj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dB
cmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm5vZGUiLCAi
VGVzdE9iamVjdCIsICJvdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1l
dGVyIiwgIlRlc3ROb2RlIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMTG9uZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwor
ICAgIGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAg
ICBhdXRvIGluZGV4ID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQxKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1Bh
cmFtZXRlcihXVEZNb3ZlKG5vZGUpLCBXVEZNb3ZlKGluZGV4KSk7CisKKyAgICAvLyBNYWtlIHN1
cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisg
ICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKyAgICBlbnN1cmVTdGlsbEFsaXZl
SGVyZShhcmd1bWVudDEpOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIApAQCAtNzk0Nyw5ICs4NTM0LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoT3B0
CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvIGFy
ZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZl
cnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25n
Pjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2Fs
bEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBhdXRvIGFyZyA9IGFyZ3VtZW50MC5pc1VuZGVmaW5l
ZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9u
YWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dG9KUzxJRExMb25nPihUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbChXVEZNb3ZlKGFy
ZykpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExMb25nPihU
ZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbChXVEZNb3ZlKGFyZykpKSk7CisKKyAgICAv
LyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBt
ZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29u
c3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTc5NzYsOSArODU2
OSwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3Ry
dWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMQogICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byBhcmcgPSBjb252ZXJ0PElETExvbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0
byBhcmcgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZDEoV1RGTW92ZShhcmcpKTsKKworICAgIC8v
IE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1l
dGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNzk5MCw5ICs4NTg4LDE0
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3Rv
ckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyCiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvIHR5cGUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAg
IGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBh
dXRvIHR5cGUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFy
Z3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICBUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kMShXVEZNb3ZlKHR5cGUpKTsK
KworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBv
ZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtODAzNiwx
MSArODYzOSwxOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcAogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gb2JqQXJnc1Nob3J0ID0gY29udmVydDxJRExDbGFt
cEFkYXB0b3I8SURMVW5zaWduZWRTaG9ydD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBvYmpBcmdzU2hvcnQgPSBjb252ZXJ0
PElETENsYW1wQWRhcHRvcjxJRExVbnNpZ25lZFNob3J0Pj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKLSAgICBhdXRvIG9iakFyZ3NMb25nID0gY29udmVydDxJRExDbGFtcEFkYXB0
b3I8SURMVW5zaWduZWRMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMSkpOworICAgIGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgxKTsKKyAgICBhdXRvIG9iakFyZ3NMb25nID0gY29udmVydDxJRExDbGFt
cEFkYXB0b3I8SURMVW5zaWduZWRMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBpbXBsLmNsYXNzTWV0aG9kV2l0aENsYW1wKFdURk1vdmUob2JqQXJnc1Nob3J0KSwg
V1RGTW92ZShvYmpBcmdzTG9uZykpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5
IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxp
dmVIZXJlKGFyZ3VtZW50MCk7CisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsK
KwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTgw
NTUsOSArODY2NSwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcAogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gb2JqQXJnc0xvbmcgPSBjb252
ZXJ0PElETENsYW1wQWRhcHRvcjxJRExMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+YXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgwKTsKKyAgICBhdXRvIG9iakFyZ3NMb25nID0gY29udmVydDxJRExDbGFtcEFkYXB0b3I8
SURMTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5jbGFz
c01ldGhvZFdpdGhDbGFtcE9uT3B0aW9uYWwoV1RGTW92ZShvYmpBcmdzTG9uZykpOworCisgICAg
Ly8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMg
bWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC04MDc0LDExICs4Njg5
LDE4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aEVuZm9yCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7Ci0gICAgYXV0byBvYmpBcmdzU2hvcnQgPSBjb252ZXJ0PElETEVuZm9yY2VSYW5n
ZUFkYXB0b3I8SURMVW5zaWduZWRTaG9ydD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBvYmpBcmdzU2hvcnQgPSBjb252ZXJ0
PElETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURMVW5zaWduZWRTaG9ydD4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBvYmpBcmdzTG9uZyA9IGNvbnZlcnQ8SURMRW5m
b3JjZVJhbmdlQWRhcHRvcjxJRExVbnNpZ25lZExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgYXV0byBhcmd1bWVudDEgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOworICAgIGF1dG8gb2JqQXJnc0xvbmcgPSBj
b252ZXJ0PElETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURMVW5zaWduZWRMb25nPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmNsYXNzTWV0aG9kV2l0aEVuZm9yY2VS
YW5nZShXVEZNb3ZlKG9iakFyZ3NTaG9ydCksIFdURk1vdmUob2JqQXJnc0xvbmcpKTsKKworICAg
IC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlz
IG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworICAgIGVuc3Vy
ZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC04MDkzLDkgKzg3MTUsMTQgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRo
b2RXaXRoRW5mb3IKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBhdXRvIG9iakFyZ3NMb25nID0gY29udmVydDxJRExFbmZvcmNlUmFuZ2VBZGFwdG9yPElE
TExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7Cisg
ICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8gb2Jq
QXJnc0xvbmcgPSBjb252ZXJ0PElETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURMTG9uZz4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5jbGFzc01ldGhvZFdpdGhFbmZv
cmNlUmFuZ2VPbk9wdGlvbmFsKFdURk1vdmUob2JqQXJnc0xvbmcpKTsKKworICAgIC8vIE1ha2Ug
c3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4K
KyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtODExMiw5ICs4NzM5LDE0IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhVbnNpZ25lZExvCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
Ci0gICAgYXV0byB1bnNpZ25lZExvbmdTZXF1ZW5jZSA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURM
VW5zaWduZWRMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKTsKKyAgICBhdXRvIHVuc2lnbmVkTG9uZ1NlcXVlbmNlID0gY29udmVydDxJRExT
ZXF1ZW5jZTxJRExVbnNpZ25lZExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgIGltcGwubWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlKFdURk1vdmUodW5zaWdu
ZWRMb25nU2VxdWVuY2UpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2
ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVy
ZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIApAQCAtODEzMSw5ICs4NzYzLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb25CCiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byB2YWx1ZXMgPSBjb252
ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byB2YWx1ZXMgPSBjb252ZXJ0PElE
TFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmlu
Zz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRo
cm93U2NvcGUsIGltcGwuc3RyaW5nQXJyYXlGdW5jdGlvbihXVEZNb3ZlKHZhbHVlcykpKSk7Cisg
ICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExTZXF1ZW5jZTxJRExET01T
dHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ0FycmF5RnVuY3Rpb24oV1RGTW92ZSh2YWx1ZXMpKSkp
OworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5k
IG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC04MTQ5LDkg
Kzg3ODcsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlzdEZ1bmN0aW8KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxH
bG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIHZhbHVlcyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPERP
TVN0cmluZ0xpc3Q+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCAwLCAidmFsdWVzIiwgIlRlc3RPYmplY3QiLCAiZG9tU3RyaW5n
TGlzdEZ1bmN0aW9uIiwgIkRPTVN0cmluZ0xpc3QiKTsgfSk7CisgICAgYXV0byBhcmd1bWVudDAg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gdmFsdWVzID0gY29u
dmVydDxJRExJbnRlcmZhY2U8RE9NU3RyaW5nTGlzdD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDAsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgMCwgInZhbHVlcyIsICJUZXN0T2JqZWN0IiwgImRvbVN0cmluZ0xp
c3RGdW5jdGlvbiIsICJET01TdHJpbmdMaXN0Iik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0b0pTPElETEludGVyZmFjZTxET01TdHJpbmdMaXN0Pj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5kb21TdHJp
bmdMaXN0RnVuY3Rpb24oKnZhbHVlcykpKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVu
Y29kZSh0b0pTPElETEludGVyZmFjZTxET01TdHJpbmdMaXN0Pj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5kb21TdHJp
bmdMaXN0RnVuY3Rpb24oKnZhbHVlcykpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMg
c3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGls
bEFsaXZlSGVyZShhcmd1bWVudDApOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkRvbVN0cmlu
Z0xpc3RGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCkBAIC04MTY1LDkgKzg4MDksMTQgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aE9w
dGlvbmEKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIG9wdGlvbmFsVW5pb24gPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkg
PyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExTZXF1ZW5jZTxJ
RExVbnJlc3RyaWN0ZWREb3VibGU+Pj46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0
ZXI8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExTZXF1ZW5jZTxJRExVbnJlc3RyaWN0ZWREb3Vi
bGU+Pj46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExTZXF1
ZW5jZTxJRExVbnJlc3RyaWN0ZWREb3VibGU+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCk7CisgICAgYXV0byBvcHRpb25hbFVuaW9uID0gYXJndW1lbnQwLmlz
VW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMVW5pb248SURMRE9NU3RyaW5nLCBJ
RExTZXF1ZW5jZTxJRExVbnJlc3RyaWN0ZWREb3VibGU+Pj46OlJldHVyblR5cGU+KCkgOiBPcHRp
b25hbDxDb252ZXJ0ZXI8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExTZXF1ZW5jZTxJRExVbnJl
c3RyaWN0ZWREb3VibGU+Pj46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMVW5pb248SURMRE9NU3Ry
aW5nLCBJRExTZXF1ZW5jZTxJRExVbnJlc3RyaWN0ZWREb3VibGU+Pj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vcGVyYXRpb25XaXRoT3B0aW9uYWxVbmlvblBh
cmFtZXRlcihXVEZNb3ZlKG9wdGlvbmFsVW5pb24pKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1
bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1
cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtODE4NCwxMSArODgzMywxOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoQW5kV2l0aG91dAogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1
dG8gYXJyYXlBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETFVuc2lnbmVkTG9uZz4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0
byBhcnJheUFyZyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMVW5zaWduZWRMb25nPj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIG51bGxhYmxlQXJyYXlBcmcgPSBj
b252ZXJ0PElETE51bGxhYmxlPElETFNlcXVlbmNlPElETFVuc2lnbmVkTG9uZz4+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgYXV0
byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOworICAgIGF1dG8g
bnVsbGFibGVBcnJheUFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMU2VxdWVuY2U8SURMVW5z
aWduZWRMb25nPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5t
ZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UoV1RGTW92ZShhcnJheUFyZyksIFdU
Rk1vdmUobnVsbGFibGVBcnJheUFyZykpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBz
dGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxs
QWxpdmVIZXJlKGFyZ3VtZW50MCk7CisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQx
KTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAg
LTgyMDUsOSArODg2MSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZEJvZHkoSgogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gZWxlbWVudElkID0gY29udmVydDxJRExS
ZXF1aXJlc0V4aXN0aW5nQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8g
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGVs
ZW1lbnRJZCA9IGNvbnZlcnQ8SURMUmVxdWlyZXNFeGlzdGluZ0F0b21TdHJpbmdBZGFwdG9yPElE
TERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxFbGVtZW50Pj4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
Z2V0RWxlbWVudEJ5SWQoV1RGTW92ZShlbGVtZW50SWQpKSkpOworICAgIGF1dG8gcmVzdWx0ID0g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPEVsZW1lbnQ+Pj4o
KmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5n
ZXRFbGVtZW50QnlJZChXVEZNb3ZlKGVsZW1lbnRJZCkpKSk7CisKKyAgICAvLyBNYWtlIHN1cmUg
YXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25HZXRFbGVtZW50QnlJZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCkBAIC04MjIxLDcgKzg4ODMsOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVu
dEJvZHkoSgogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8U1ZHRG9jdW1lbnQ+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Nj
b3BlLCBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBpbXBsLmdldFNWR0RvY3VtZW50KCkpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8U1ZHRG9jdW1lbnQ+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBCaW5kaW5n
U2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBs
LmdldFNWR0RvY3VtZW50KCkpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNWR0RvY3Vt
ZW50KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKQEAgLTgyMzcsOSArODkwMCwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MUJvZHkoSlNDOjpKUwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0
PElETEludGVyZmFjZTxUZXN0Tm9kZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJ2YWx1ZSIsICJUZXN0T2JqZWN0Iiwg
ImNvbnZlcnQxIiwgIlRlc3ROb2RlIik7IH0pOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExJ
bnRlcmZhY2U8VGVzdE5vZGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLCBbXShK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGUsIDAsICJ2YWx1ZSIsICJUZXN0T2JqZWN0IiwgImNvbnZlcnQxIiwgIlRlc3ROb2RlIik7IH0p
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgaW1wbC5jb252ZXJ0MSgqdmFsdWUpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50
cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0
aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCkBAIC04MjU2LDkgKzg5MjQsMTQgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDJCb2R5
KEpTQzo6SlMKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIHZh
bHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
MCwgInZhbHVlIiwgIlRlc3RPYmplY3QiLCAiY29udmVydDIiLCAiVGVzdE5vZGUiKTsgfSk7Cisg
ICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAg
IGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0Tm9kZT4+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJn
dW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJ2YWx1ZSIsICJU
ZXN0T2JqZWN0IiwgImNvbnZlcnQyIiwgIlRlc3ROb2RlIik7IH0pOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5jb252ZXJ0
MihXVEZNb3ZlKHZhbHVlKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxp
dmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhl
cmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKQEAgLTgyNzUsOSArODk0OCwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0M0JvZHkoSlNDOjpKUwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gdmFsdWUgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5jb252ZXJ0MyhXVEZNb3Zl
KHZhbHVlKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwg
dGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1l
bnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAK
QEAgLTgyOTQsOSArODk3MiwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0NEJvZHkoSlNDOjpKUwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETE51
bGxhYmxlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8
SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBs
LmNvbnZlcnQ0KFdURk1vdmUodmFsdWUpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMg
c3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGls
bEFsaXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KIApAQCAtODMxMSw3ICs4OTk0LDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTXV0YWJsZVBvaW50RnVu
Y3Rpb24KICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFNWR1BvaW50Pj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5tdXRhYmxl
UG9pbnRGdW5jdGlvbigpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9K
UzxJRExJbnRlcmZhY2U8U1ZHUG9pbnQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm11dGFibGVQb2ludEZ1bmN0aW9uKCkpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTXV0YWJsZVBvaW50RnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtODM0MiwxMSArOTAy
NiwxNiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25WYXJpYWRpY1N0cmluZ01ldGhvZAogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwotICAgIGF1dG8gaGVhZCA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0
byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8g
aGVhZCA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIGF1dG8gdGFpbCA9IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50czxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAxKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwudmFyaWFk
aWNTdHJpbmdNZXRob2QoV1RGTW92ZShoZWFkKSwgV1RGTW92ZSh0YWlsKSk7CisKKyAgICAvLyBN
YWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRo
b2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTgzNjMsMTEgKzkwNTIsMTYg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVmFyaWFkaWNEb3VibGVNZXRob2QKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKLSAgICBhdXRvIGhlYWQgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAg
IGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBh
dXRvIGhlYWQgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBhdXRvIHRhaWwgPSBjb252ZXJ0VmFyaWFkaWNBcmd1bWVu
dHM8SURMVW5yZXN0cmljdGVkRG91YmxlPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgMSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICBpbXBsLnZhcmlhZGljRG91YmxlTWV0aG9kKFdURk1vdmUoaGVhZCksIFdURk1v
dmUodGFpbCkpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGls
IHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3Vt
ZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQog
CkBAIC04Mzg0LDExICs5MDc4LDE2IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZEJvCiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBoZWFkID0gY29udmVydDxJRExJ
bnRlcmZhY2U8Tm9kZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJoZWFkIiwgIlRlc3RPYmplY3QiLCAidmFyaWFkaWNO
b2RlTWV0aG9kIiwgIk5vZGUiKTsgfSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gaGVhZCA9IGNvbnZlcnQ8SURMSW50ZXJm
YWNlPE5vZGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLCBbXShKU0M6OkpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7
IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJo
ZWFkIiwgIlRlc3RPYmplY3QiLCAidmFyaWFkaWNOb2RlTWV0aG9kIiwgIk5vZGUiKTsgfSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICBhdXRvIHRhaWwgPSBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHM8SURMSW50ZXJmYWNlPE5vZGU+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgMSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLnZhcmlhZGlj
Tm9kZU1ldGhvZCgqaGVhZCwgV1RGTW92ZSh0YWlsKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJn
dW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5z
dXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTg0MDUsMTEgKzkxMDQsMTYgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFk
aWNVbmlvbk1ldGhvZEIKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBh
dXRvIGhlYWQgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGhlYWQgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBhdXRvIHRh
aWwgPSBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHM8SURMVW5pb248SURMSW50ZXJmYWNlPE5vZGU+
LCBJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgMSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICBpbXBsLnZhcmlhZGljVW5pb25NZXRob2QoV1RGTW92ZShoZWFkKSwgV1RGTW92ZSh0YWlsKSk7
CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQg
b2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTg0MjYs
MTEgKzkxMzAsMTggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQW55Qm9keShKU0M6OkpTR2xvYmEKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGEgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZEZs
b2F0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OworICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBiID0gY29udmVydDxJRExMb25nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAg
YXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOworICAgIGF1
dG8gYiA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBpbXBsLmFueShXVEZNb3ZlKGEpLCBXVEZNb3ZlKGIpKTsKKworICAgIC8vIE1ha2Ugc3Vy
ZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAg
ICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworICAgIGVuc3VyZVN0aWxsQWxpdmVI
ZXJlKGFyZ3VtZW50MSk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQogCkBAIC04NDYyLDkgKzkxNzMsMTQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblcK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGEgPSBjb252ZXJ0
PElETEZsb2F0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOworICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMRmxvYXQ+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC50ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJn
dW1lbnQoV1RGTW92ZShhKSwgV1RGTW92ZShwcm9taXNlKSk7CisKKyAgICAvLyBNYWtlIHN1cmUg
YXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTg0OTQsOSArOTIxMCwxNCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0
UHJvbWlzZUZ1bmN0aW9uVwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwotICAgIGF1dG8gYSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/
IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENv
bnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOworICAgIGF1dG8g
YXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBhdXRvIGEgPSBhcmd1bWVu
dDAuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlw
ZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJ
RExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLnRlc3RQ
cm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudChXVEZNb3ZlKGEpLCBXVEZNb3Zl
KHByb21pc2UpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRp
bCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1
bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IApAQCAtODUxMSw5ICs5MjMyLDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlCiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhID0gY29udmVy
dDxJRExGbG9hdD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKKyAgICBhdXRvIGEgPSBjb252ZXJ0PElETEZsb2F0PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwudGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24o
V1RGTW92ZShhKSwgV1RGTW92ZShwcm9taXNlKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1l
bnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTg1MjMsOSArOTI0OSwxNCBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlz
ZU92ZXJsb2FkZQogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIGF1dG8gcmVxdWVzdCA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPEZldGNoUmVxdWVzdD4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGUsIDAsICJyZXF1ZXN0IiwgIlRlc3RPYmplY3QiLCAidGVzdFByb21pc2VPdmVybG9hZGVkRnVu
Y3Rpb24iLCAiRmV0Y2hSZXF1ZXN0Iik7IH0pOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHJlcXVlc3QgPSBjb252ZXJ0PElE
TEludGVyZmFjZTxGZXRjaFJlcXVlc3Q+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
LCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgc2NvcGUsIDAsICJyZXF1ZXN0IiwgIlRlc3RPYmplY3QiLCAidGVzdFByb21pc2VPdmVybG9h
ZGVkRnVuY3Rpb24iLCAiRmV0Y2hSZXF1ZXN0Iik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC50ZXN0UHJvbWlzZU92
ZXJsb2FkZWRGdW5jdGlvbigqcmVxdWVzdCwgV1RGTW92ZShwcm9taXNlKSk7CisKKyAgICAvLyBN
YWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRo
b2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTg2MjYsNyArOTM1Nyw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRlc3RSZXR1cm5zT3duUHJvbWlzCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETFByb21pc2U8
SURMVm9pZD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIGltcGwudGVzdFJldHVybnNPd25Qcm9taXNlQW5kUHJvbWlzZVByb3h5RnVuY3Rpb24oKSkp
OworICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMUHJvbWlzZTxJRExW
b2lkPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
aW1wbC50ZXN0UmV0dXJuc093blByb21pc2VBbmRQcm9taXNlUHJveHlGdW5jdGlvbigpKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5zT3duUHJvbWlzZUFuZFByb21pc2VQcm94
eUZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKQEAgLTg2NDEsOSArOTM3MywxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2Fk
MQogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8g
c3RyID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBzdHIgPSBjb252ZXJ0PElETERPTVN0
cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmNvbmRpdGlv
bmFsT3ZlcmxvYWQoV1RGTW92ZShzdHIpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMg
c3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGls
bEFsaXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KIApAQCAtODY1Niw5ICs5MzkzLDE0IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3Zl
cmxvYWQyCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
YXV0byBhID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmNvbmRpdGlvbmFsT3Zlcmxv
YWQoV1RGTW92ZShhKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUg
dW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUo
YXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiB9CiAKQEAgLTg3MDAsOSArOTQ0MiwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZQogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gc3RyID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBzdHIgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLnNpbmdsZUNvbmRpdGlv
bmFsT3ZlcmxvYWQoV1RGTW92ZShzdHIpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMg
c3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGls
bEFsaXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KIApAQCAtODcxMyw5ICs5NDYwLDE0IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlv
bmFsT3ZlCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
YXV0byBhID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLnNpbmdsZUNvbmRpdGlvbmFs
T3ZlcmxvYWQoV1RGTW92ZShhKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkg
YWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKQEAgLTg3NTMsOSArOTUwNSwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hTaGFkb3dSb290Qm9k
eQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElL
RUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gaW5pdCA9IGNv
bnZlcnQ8SURMRGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1l
bnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGluaXQgPSBj
b252ZXJ0PElETERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5hdHRhY2hTaGFkb3dSb290KFdURk1vdmUoaW5p
dCkpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMg
ZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7
CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC04
NzcyLDkgKzk1MjksMTQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aEV4dGVybmEKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGRpY3QgPSBjb252ZXJ0PElETERpY3Rpb25h
cnk8RGljdGlvbmFyeUltcGxOYW1lPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGRpY3QgPSBjb252ZXJ0PElETERpY3Rpb25h
cnk8RGljdGlvbmFyeUltcGxOYW1lPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBpbXBsLm9wZXJhdGlvbldpdGhFeHRlcm5hbERpY3Rpb25hcnlQYXJhbWV0ZXIoV1RGTW92
ZShkaWN0KSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwg
dGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1l
bnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAK
QEAgLTg3OTEsOSArOTU1MywxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CdWZmZXJTb3VyY2VQYXJhbWV0ZQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gZGF0YSA9IGNvbnZlcnQ8SURMVW5p
b248SURMQXJyYXlCdWZmZXJWaWV3LCBJRExBcnJheUJ1ZmZlcj4+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBkYXRhID0gY29u
dmVydDxJRExVbmlvbjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmJ1ZmZlclNvdXJjZVBhcmFtZXRl
cihXVEZNb3ZlKGRhdGEpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2
ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVy
ZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIApAQCAtODgxMCw5ICs5NTc3LDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxlZ2FjeUNhbGxlck5hbWVkQm9kCiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBwYXJhbSA9IGNvbnZl
cnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKKyAgICBhdXRvIHBhcmFtID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubGVnYWN5Q2FsbGVyTmFtZWQoV1RGTW92ZShw
YXJhbSkpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRo
aXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50
MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBA
IC04ODI5LDEzICs5NjAxLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5WYWx1ZU9wdGltCiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byByZXR1cm5WYWx1ZSA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBhID0gY29udmVydDxJRExJbnRlcmZh
Y2U8Tm9kZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCByZXR1cm5WYWx1ZSwgW10oSlNDOjpKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkg
eyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAi
YSIsICJUZXN0T2JqZWN0IiwgInRlc3RSZXR1cm5WYWx1ZU9wdGltaXphdGlvbiIsICJOb2RlIik7
IH0pOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKKyAgICBhdXRvIGEgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MCwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiYSIsICJUZXN0T2JqZWN0IiwgInRlc3RS
ZXR1cm5WYWx1ZU9wdGltaXphdGlvbiIsICJOb2RlIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBiID0gY29udmVy
dDxJRExJbnRlcmZhY2U8Tm9kZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDEsICJiIiwgIlRlc3RPYmplY3QiLCAidGVzdFJl
dHVyblZhbHVlT3B0aW1pemF0aW9uIiwgIk5vZGUiKTsgfSk7CisgICAgYXV0byBhcmd1bWVudDEg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOworICAgIGF1dG8gYiA9IGNvbnZlcnQ8
SURMSW50ZXJmYWNlPE5vZGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxLCBbXShK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGUsIDEsICJiIiwgIlRlc3RPYmplY3QiLCAidGVzdFJldHVyblZhbHVlT3B0aW1pemF0aW9uIiwg
Ik5vZGUiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICBpbXBsLnRlc3RSZXR1cm5WYWx1ZU9wdGltaXphdGlvbigqYSwgKmIp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmV0dXJuVmFsdWUpOworCisgICAgLy8gTWFr
ZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9k
LgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisgICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQxKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJndW1l
bnQwKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRlc3RSZXR1cm5WYWx1ZU9wdGltaXphdGlvbihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC04ODUxLDEzICs5NjI5
LDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRlc3RSZXR1cm5WYWx1ZU9wdGltCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7Ci0gICAgYXV0byByZXR1cm5WYWx1ZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7Ci0gICAgYXV0byBhID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCByZXR1cm5WYWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50
VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiYSIsICJUZXN0T2JqZWN0
IiwgInRlc3RSZXR1cm5WYWx1ZU9wdGltaXphdGlvbldpdGhFeGNlcHRpb24iLCAiTm9kZSIpOyB9
KTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CisgICAgYXV0byBhID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImEiLCAiVGVzdE9iamVjdCIsICJ0ZXN0UmV0
dXJuVmFsdWVPcHRpbWl6YXRpb25XaXRoRXhjZXB0aW9uIiwgIk5vZGUiKTsgfSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRv
IGIgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVu
dFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgImIiLCAiVGVzdE9iamVj
dCIsICJ0ZXN0UmV0dXJuVmFsdWVPcHRpbWl6YXRpb25XaXRoRXhjZXB0aW9uIiwgIk5vZGUiKTsg
fSk7CisgICAgYXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
OworICAgIGF1dG8gYiA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgYXJndW1lbnQxLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDEsICJiIiwgIlRlc3RPYmplY3QiLCAidGVzdFJl
dHVyblZhbHVlT3B0aW1pemF0aW9uV2l0aEV4Y2VwdGlvbiIsICJOb2RlIik7IH0pOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcHJv
cGFnYXRlRXhjZXB0aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnRl
c3RSZXR1cm5WYWx1ZU9wdGltaXphdGlvbldpdGhFeGNlcHRpb24oKmEsICpiKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXR1cm5WYWx1ZSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJn
dW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5z
dXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShh
cmd1bWVudDEpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcmd1bWVudDApOwogfQog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
VGVzdFJldHVyblZhbHVlT3B0aW1pemF0aW9uV2l0aEV4Y2VwdGlvbihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC04OTE2LDcgKzk3
MDAsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Ub1N0cmluZ0JvZHkoSlNDOjpKUwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExV
U1ZTdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLnN0cmluZ2lmaWVyQXR0cmlidXRl
KCkpKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETFVTVlN0cmlu
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuc3RyaW5naWZpZXJBdHRyaWJ1dGUoKSkpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKaW5kZXggMjRmZmZlYmI1NzZjOWE1N2Y3NDVlMjk5NTYw
ZmY1NjEyZmRkOWJiZC4uYzk5NmM2NDFmZTBmZTE3YjZkYTk5NWU2MDU5MjU3ZGYwOWQzZjg5OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcApAQCAtOTMs
NyArOTMsOCBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMxKEpTR2xvYmFsT2JqZQogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKj4oY2FsbEZyYW1lLT5qc0Nh
bGxlZSgpKTsKICAgICBBU1NFUlQoY2FzdGVkVGhpcyk7Ci0gICAgYXV0byBhcnJheUJ1ZmZlciA9
IGNvbnZlcnQ8SURMQXJyYXlCdWZmZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJhcnJheUJ1ZmZlciIsICJUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycyIsIG51bGxwdHIsICJBcnJheUJ1ZmZlciIpOyB9KTsKKyAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0
byBhcnJheUJ1ZmZlciA9IGNvbnZlcnQ8SURMQXJyYXlCdWZmZXI+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImFycmF5QnVmZmVyIiwgIlRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzIiwgbnVsbHB0ciwgIkFycmF5QnVmZmVyIik7IH0pOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byBvYmpl
Y3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKCphcnJheUJ1ZmZlcik7CiAg
ICAgYXV0byBqc1ZhbHVlID0gdG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnM+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpOwpAQCAtMTA4LDcgKzEwOSw4IEBAIHN0YXRp
YyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yczIoSlNHbG9iYWxPYmplCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEFT
U0VSVChjYXN0ZWRUaGlzKTsKLSAgICBhdXRvIGFycmF5QnVmZmVyVmlldyA9IGNvbnZlcnQ8SURM
QXJyYXlCdWZmZXJWaWV3PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiYXJyYXlCdWZmZXJWaWV3IiwgIlRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzIiwgbnVsbHB0ciwgIkFycmF5QnVmZmVyVmlldyIpOyB9KTsKKyAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0
byBhcnJheUJ1ZmZlclZpZXcgPSBjb252ZXJ0PElETEFycmF5QnVmZmVyVmlldz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MCwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiYXJyYXlCdWZmZXJWaWV3IiwgIlRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIiwgbnVsbHB0ciwgIkFycmF5QnVmZmVyVmlldyIpOyB9
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShh
cnJheUJ1ZmZlclZpZXcucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgYXV0byBqc1ZhbHVlID0gdG9K
U05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3Zl
KG9iamVjdCkpOwpAQCAtMTIzLDcgKzEyNSw4IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczMoSlNHbG9iYWxPYmplCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byog
Y2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0
b3IqPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKLSAg
ICBhdXRvIGJsb2IgPSBjb252ZXJ0PElETEludGVyZmFjZTxCbG9iPj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhy
b3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImJsb2Ii
LCAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiLCBudWxscHRyLCAiQmxvYiIpOyB9KTsKKyAg
ICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAg
YXV0byBibG9iID0gY29udmVydDxJRExJbnRlcmZhY2U8QmxvYj4+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImJsb2IiLCAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnMiLCBudWxscHRyLCAiQmxvYiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZSgqYmxvYik7CiAgICAgYXV0byBqc1ZhbHVlID0gdG9K
U05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3Zl
KG9iamVjdCkpOwpAQCAtMTM4LDcgKzE0MSw4IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczQoSlNHbG9iYWxPYmplCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byog
Y2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0
b3IqPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKLSAg
ICBhdXRvIHN0cmluZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gc3RyaW5nID0gY29u
dmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
YXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKFdURk1vdmUo
c3RyaW5nKSk7CiAgICAgYXV0byBqc1ZhbHVlID0gdG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZh
Y2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3Bw
CmluZGV4IDliYjljMWE0YzNmZDUyZjljNDYyZDI1NDQxNzhjOTEyMWU1ZTgyOGUuLjA4MmE4NDhh
NzkwMGE3MjQ3ZGFlMDRkNmVlMjcyNzNmMGNhYWQxZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAKQEAgLTky
LDcgKzkyLDggQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlMSgKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0
PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rvcio+KGNh
bGxGcmFtZS0+anNDYWxsZWUoKSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwotICAgIGF1dG8g
c2VxdWVuY2VPZlN0cmluZ3MgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkg
PyBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj46OlJldHVyblR5cGV7IH0gOiBj
b252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgYXV0byBzZXF1ZW5jZU9mU3RyaW5ncyA9IGFyZ3Vt
ZW50MC5pc1VuZGVmaW5lZCgpID8gQ29udmVydGVyPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+
OjpSZXR1cm5UeXBleyB9IDogY29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmNyZWF0ZShXVEZNb3ZlKHNlcXVlbmNlT2ZT
dHJpbmdzKSk7CiAgICAgYXV0byBqc1ZhbHVlID0gdG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZh
Y2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpOwpA
QCAtMTA3LDcgKzEwOCw4IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTIoCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogY2FzdGVkVGhpcyA9
IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0
b3IqPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKLSAg
ICBhdXRvIHN0cmluZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gc3RyaW5nID0gY29u
dmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
YXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6Y3Jl
YXRlKFdURk1vdmUoc3RyaW5nKSk7CiAgICAgYXV0byBqc1ZhbHVlID0gdG9KU05ld2x5Q3JlYXRl
ZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3Zl
KG9iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCmluZGV4IGYzZjJh
NjdhZGFlY2EzOTI0ZWQwM2IyMWQxNDRiNDc4NWI3N2Y2MWYuLjA0ZTc3NDg3M2M4ODdhNjUwYzJk
NWQyNzZiYTZlYWY0ZDMyZjNiNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5j
cHAKQEAgLTI0NSw5ICsyNDUsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXQKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIG5hbWUgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKTsKKyAgICBhdXRvIG5hbWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURM
SW50ZXJmYWNlPE5vZGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBpbXBsLm5hbWVkSXRlbShXVEZNb3ZlKG5hbWUpKSkpOworICAgIGF1dG8gcmVz
dWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm5hbWVkSXRlbShX
VEZNb3ZlKG5hbWUpKSkpOworCisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZl
IHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJl
KGFyZ3VtZW50MCk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVk
SXRlbShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwCmluZGV4
IDJmYzNiYTI2OWZlOTg5ZWJhMjU3YzBhMmY3ZDE0MTEzOTQ5MGY0MmUuLjRkOGRlNjk3ZDFhYzE5
ZGYyYTE3YmRjMzU0ZDAwOTMzMGRkN2E3MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNl
UmVqZWN0aW9uRXZlbnQuY3BwCkBAIC0xNzQsOSArMTc0LDExIEBAIHRlbXBsYXRlPD4gRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1
Y3Rvcjo6CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIHR5cGUgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKTsKKyAgICBhdXRvIHR5cGUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIGV2ZW50SW5pdERpY3QgPSBjb252ZXJ0PElE
TERpY3Rpb25hcnk8VGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6SW5pdD4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBhdXRvIGFy
Z3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7CisgICAgYXV0byBldmVu
dEluaXREaWN0ID0gY29udmVydDxJRExEaWN0aW9uYXJ5PFRlc3RQcm9taXNlUmVqZWN0aW9uRXZl
bnQ6OkluaXQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gb2Jq
ZWN0ID0gVGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6Y3JlYXRlKCpjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgV1RGTW92ZSh0eXBlKSwgV1RGTW92ZShldmVudEluaXREaWN0KSk7CiAgICAg
YXV0byBqc1ZhbHVlID0gdG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdFByb21pc2VS
ZWplY3Rpb25FdmVudD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IDIyMjY2ZGRkNGFkNmUwMWQ1
ZDVlZWM4ZDljMjQyMzVhN2Q4YTkxZjkuLjhjM2M1YTU2MjZjYTZiNDI4ZWZmNTA2MzQ4NDFmZWJm
MTIzOWZlZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC0zMzIsOSArMzMyLDE0IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90
b3R5cGVGCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byB2YWx1
ZSA9IGNvbnZlcnQ8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CisgICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
aW1wbC5mdW5jdGlvbihXVEZNb3ZlKHZhbHVlKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1l
bnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTM0OSw3ICszNTQsOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJv
dG90eXBlRgogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgaW1wbC5mdW5jdGlvblJldHVybmluZygpKSk7CisgICAgYXV0byByZXN1
bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgaW1wbC5mdW5jdGlvblJldHVybmluZygpKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uUmV0dXJuaW5nKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
dHJpbmdpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXIuY3BwCmluZGV4IDZjYTJkZTU2ZTc0MTkzMDQ4ZDJlY2UyYmUyMmIy
MTYwY2M1M2Y2ODUuLjNlZGEyZTY2Njc3NDE3ZDJlNjFjY2M0ZmM1YjZlOTg4YmMzOWE2M2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
dHJpbmdpZmllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcApAQCAtMTg5LDcgKzE4OSw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllclByb3RvdHlwZUZ1bmN0aW9u
VG9TdHJpbmdCb2R5CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGltcGwudG9TdHJpbmcoKSkpOworICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1
ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC50
b1N0cmluZygpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RTdHJpbmdpZmllclByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5j
cHAKaW5kZXggMjBmZDA2ZjBmZDA2NTc5YzEyZGM2NjQyMTFjOWE1OWZkNTA2ODA1Yy4uODBiY2Ni
ZWE4NTk3OTZiNTEyOTVjMjU5MzIyODIzOTY4M2I4OGZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3Vz
T3BlcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwCkBAIC0xODksNyArMTg5
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVy
QW5vbnltb3VzT3BlcmF0aW9uUHJvdG90eXBlRnUKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9N
U3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC50b1N0cmluZygpKSk7CisgICAgYXV0
byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBpbXBsLnRvU3RyaW5nKCkpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3Bl
cmF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJh
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5jcHAKaW5kZXggODk5ZjQ3MTYzMDYzMWUxOWE4ODM1
ODVlYWMzZGQwNTk4OWU0NmJkMi4uMzYxYWU0YjFjM2M3YmIwMWIxN2E3M2U1M2MwZTY3ZGZmMDkz
Mzc4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9u
LmNwcApAQCAtMTkxLDcgKzE5MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uUHJvdG90eXBlRnVuY3RpCiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuaWRl
bnRpZmllcigpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExE
T01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLmlkZW50aWZpZXIoKSkpOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvblByb3RvdHlwZUZ1bmN0aW9uSWRlbnRpZmllcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBA
IC0yMDUsNyArMjA2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Qcm90b3R5cGVGdW5jdGkKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC5pZGVudGlmaWVy
KCkpKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmlu
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuaWRlbnRpZmllcigpKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTdHJpbmdp
Zmllck5hbWVkT3BlcmF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuY3Bw
CmluZGV4IDk2NmJkZjJhZjlhOTM5ZGIxMGQ3NTFiNDViMzEzMWFiOWUyZTllZGYuLjVmYjY5MmVm
YjIzZTlhNTY3M2FiOTYzNDc4MzMzYWRiMjUyOTY1MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbklt
cGxlbWVudGVkQXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwCkBAIC0xOTEs
NyArMTkxLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc1Byb3RvdHkKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC5hbHRlcm5hdGVJZGVudGlm
aWVyKCkpKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0
cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuYWx0ZXJuYXRlSWRlbnRpZmllcigpKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNQcm90b3R5cGVGdW5jdGlvbklk
ZW50aWZpZXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQpAQCAtMjA1LDcgKzIwNiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNQcm90b3R5CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGlt
cGwuYWx0ZXJuYXRlSWRlbnRpZmllcigpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLmFsdGVy
bmF0ZUlkZW50aWZpZXIoKSkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFz
UHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRv
U3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCmluZGV4IGY2YjA0MDY4ZmNm
MjcxY2Q4ZjA1NjU0NjM1ZGNiMzA2YTkyMzZhNTkuLmM0NTJhMzdjNTgwMGE2NTNkMzQwMmMxYjFm
NTk3NWZmNGI2NzAwNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCkBAIC0xODksNyArMTg5LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFt
ZWRUb1N0cmluZ1Byb3RvdHkKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgaW1wbC50b1N0cmluZygpKSk7CisgICAgYXV0byByZXN1bHQgPSBK
U1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBp
bXBsLnRvU3RyaW5nKCkpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ1By
b3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmlu
Z2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwCmluZGV4IDQxMDczZTg4NzUyNGY3M2FkZDk5MzZh
MTdlOTM3MmU2ZDUwZDM5MmMuLjJkNDdiYTllMjljZjExNzQ0MWUxMTQ4YTkxOTQyZDA0MzBlYTFl
NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJp
YnV0ZS5jcHAKQEAgLTIxMSw3ICsyMTEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZVByb3RvdHlwZUZ1bgogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBs
LmlkZW50aWZpZXIoKSkpOworICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC5pZGVudGlmaWVyKCkpKTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5n
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1
dGUuY3BwCmluZGV4IGNjNGY1MGZjNmQ1OTUxZWQ0MTA4MmYwMTk3Y2UzZDIwOTAwMDQ4OTkuLjhh
ZWJkYzY4YTZmNzQ4YjMxMjEyYTY3MzQxMzI5NDA4NDEwNzdlYTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRX
cml0ZUF0dHJpYnV0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmNwcApAQCAtMjMwLDcg
KzIzMCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdp
ZmllclJlYWRXcml0ZUF0dHJpYnV0ZVByb3RvdHlwZUZ1CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuaWRlbnRpZmllcigpKSk7Cisg
ICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBpbXBsLmlkZW50aWZpZXIoKSkpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U3RyaW5naWZpZXJSZWFk
V3JpdGVBdHRyaWJ1dGVQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMu
Y3BwCmluZGV4IDFiYmE0NTliN2ZiNzAzMTZkNTg4MTU1YzU1ZTRmYzM3NTliM2UzNzIuLjkxMmJk
NjI2M2U2OTNmN2U4YzU5MzdjZGVhNGZlZGQ2ZDBkMDg1YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNw
cApAQCAtMTYyLDExICsxNjIsMTQgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmNvbnN0cnVjdChKU0cKICAgICBBU1NF
UlQoY2FzdGVkVGhpcyk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwotICAgIGF1dG8gaGVsbG8gPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1
dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRv
IGhlbGxvID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7Ci0gICAgYXV0byB0ZXN0Q2FsbGJhY2tGdW5jdGlvbiA9IGNvbnZlcnQ8SURMQ2FsbGJh
Y2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgInRlc3RDYWxsYmFja0Z1bmN0aW9uIiwgIlRlc3RU
eXBlZGVmcyIsIG51bGxwdHIpOyB9KTsKKyAgICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMSk7CisgICAgYXV0byB0ZXN0Q2FsbGJhY2tGdW5jdGlvbiA9IGNv
bnZlcnQ8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBb
XShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCAxLCAidGVzdENhbGxiYWNrRnVuY3Rpb24iLCAiVGVzdFR5cGVkZWZz
IiwgbnVsbHB0cik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byB0ZXN0Q2FsbGJhY2tJbnRlcmZhY2UgPSBjb252ZXJ0
PElETENhbGxiYWNrSW50ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMiksICpjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rp
b25FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMiwgInRlc3RDYWxsYmFja0ludGVy
ZmFjZSIsICJUZXN0VHlwZWRlZnMiLCBudWxscHRyKTsgfSk7CisgICAgYXV0byBhcmd1bWVudDIg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpOworICAgIGF1dG8gdGVzdENhbGxiYWNr
SW50ZXJmYWNlID0gY29udmVydDxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0lu
dGVyZmFjZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDIsICpjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMiwgInRlc3RDYWxsYmFja0ludGVyZmFj
ZSIsICJUZXN0VHlwZWRlZnMiLCBudWxscHRyKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RU
eXBlZGVmczo6Y3JlYXRlKFdURk1vdmUoaGVsbG8pLCB0ZXN0Q2FsbGJhY2tGdW5jdGlvbi5yZWxl
YXNlTm9uTnVsbCgpLCB0ZXN0Q2FsbGJhY2tJbnRlcmZhY2UucmVsZWFzZU5vbk51bGwoKSk7CiAg
ICAgYXV0byBqc1ZhbHVlID0gdG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdFR5cGVk
ZWZzPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
V1RGTW92ZShvYmplY3QpKTsKQEAgLTUwNyw5ICs1MTAsMTQgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jQm9keShK
U0M6OkoKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIHggPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBDb252ZXJ0ZXI8
SURMU2VxdWVuY2U8SURMTG9uZz4+OjpSZXR1cm5UeXBleyB9IDogY29udmVydDxJRExTZXF1ZW5j
ZTxJRExMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsK
KyAgICBhdXRvIHggPSBhcmd1bWVudDAuaXNVbmRlZmluZWQoKSA/IENvbnZlcnRlcjxJRExTZXF1
ZW5jZTxJRExMb25nPj46OlJldHVyblR5cGV7IH0gOiBjb252ZXJ0PElETFNlcXVlbmNlPElETExv
bmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuZnVuYyhXVEZN
b3ZlKHgpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0
aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVu
dDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApA
QCAtNTI2LDE3ICs1MzQsMzAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3dCb2R5KEoKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIHdpZHRoID0gY29udmVydDxJRExVbnJl
c3RyaWN0ZWRGbG9hdD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKTsKKyAgICBhdXRvIHdpZHRoID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWRGbG9h
dD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIGhlaWdodCA9IGNv
bnZlcnQ8SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7CisgICAgYXV0byBoZWlnaHQgPSBjb252ZXJ0PElETFVu
cmVzdHJpY3RlZEZsb2F0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1
dG8gYmx1ciA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKKyAgICBhdXRvIGFyZ3VtZW50
MiA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMik7CisgICAgYXV0byBibHVyID0gY29u
dmVydDxJRExVbnJlc3RyaWN0ZWRGbG9hdD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
Mik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKLSAgICBhdXRvIGNvbG9yID0gY2FsbEZyYW1lLT5hcmd1bWVudCgzKS5pc1VuZGVmaW5lZCgp
ID8gU3RyaW5nKCkgOiBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMykpOworICAgIGF1dG8gYXJndW1lbnQzID0g
Y2FsbEZyYW1lLT5hcmd1bWVudCgzKTsKKyAgICBhdXRvIGNvbG9yID0gYXJndW1lbnQzLmlzVW5k
ZWZpbmVkKCkgPyBTdHJpbmcoKSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgYXJndW1lbnQzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gYWxwaGEgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDQpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxv
YXQ+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZs
b2F0Pjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExVbnJlc3RyaWN0ZWRGbG9hdD4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoNCkpKTsKKyAgICBhdXRv
IGFyZ3VtZW50NCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoNCk7CisgICAgYXV0byBhbHBoYSA9IGFy
Z3VtZW50NC5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETFVucmVzdHJpY3Rl
ZEZsb2F0Pjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWRGbG9hdD46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDQpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuc2V0U2hhZG93KFdURk1vdmUo
d2lkdGgpLCBXVEZNb3ZlKGhlaWdodCksIFdURk1vdmUoYmx1ciksIFdURk1vdmUoY29sb3IpLCBX
VEZNb3ZlKGFscGhhKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUg
dW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUo
YXJndW1lbnQwKTsKKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDEpOworICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50Mik7CisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUo
YXJndW1lbnQzKTsKKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDQpOworCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNTUzLDkgKzU3
NCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwotICAgIGF1dG8gc2VxdWVuY2VBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElE
TFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+Pj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8g
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHNl
cXVlbmNlQXJnID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KGlt
cGwubWV0aG9kV2l0aFNlcXVlbmNlQXJnKFdURk1vdmUoc2VxdWVuY2VBcmcpKSkpOworICAgIGF1
dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMVW5zaWduZWRMb25nTG9uZz4oaW1w
bC5tZXRob2RXaXRoU2VxdWVuY2VBcmcoV1RGTW92ZShzZXF1ZW5jZUFyZykpKSk7CisKKyAgICAv
LyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBt
ZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKKworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRl
ZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC01NzEsOSArNTk4
LDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7Ci0gICAgYXV0byBzZXF1ZW5jZUFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURM
U2VxdWVuY2U8SURMRE9NU3RyaW5nPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBzZXF1ZW5jZUFyZyA9IGNvbnZlcnQ8SURM
TnVsbGFibGU8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5udWxsYWJsZVNlcXVlbmNlQXJnKFdURk1vdmUoc2VxdWVu
Y2VBcmcpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0
aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVu
dDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApA
QCAtNTkwLDkgKzYyMiwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNlcXVlbmNlT2ZOdWxsYQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gc2VxdWVuY2VBcmcgPSBjb252ZXJ0PElE
TFNlcXVlbmNlPElETE51bGxhYmxlPElETERPTVN0cmluZz4+PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVudDAg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gc2VxdWVuY2VBcmcg
PSBjb252ZXJ0PElETFNlcXVlbmNlPElETE51bGxhYmxlPElETERPTVN0cmluZz4+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuc2VxdWVuY2VPZk51bGxhYmxlc0Fy
ZyhXVEZNb3ZlKHNlcXVlbmNlQXJnKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0
YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQwKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKQEAgLTYwOSw5ICs2NDYsMTQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVNlcXVl
bmMKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJ
S0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIHNlcXVlbmNl
QXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExTZXF1ZW5jZTxJRExOdWxsYWJsZTxJRExET01T
dHJpbmc+Pj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCk7CisgICAgYXV0byBzZXF1ZW5jZUFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMU2Vx
dWVuY2U8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgIGltcGwubnVsbGFibGVTZXF1ZW5jZU9mTnVsbGFibGVzQXJnKFdURk1v
dmUoc2VxdWVuY2VBcmcpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2
ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVy
ZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIApAQCAtNjI4LDkgKzY3MCwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuYwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gc2VxdWVuY2VBcmcgPSBj
b252ZXJ0PElETE51bGxhYmxlPElETFNlcXVlbmNlPElETFVuaW9uPElETERPTVN0cmluZywgSURM
U2VxdWVuY2U8SURMRE9NU3RyaW5nPj4+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHNlcXVlbmNlQXJnID0gY29udmVydDxJ
RExOdWxsYWJsZTxJRExTZXF1ZW5jZTxJRExVbmlvbjxJRExET01TdHJpbmcsIElETFNlcXVlbmNl
PElETERPTVN0cmluZz4+Pj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
aW1wbC5udWxsYWJsZVNlcXVlbmNlT2ZVbmlvbnNBcmcoV1RGTW92ZShzZXF1ZW5jZUFyZykpOwor
CisgICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9m
IHRoaXMgbWV0aG9kLgorICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC02NDcsOSAr
Njk0LDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uVW5pb25BcmdCb2R5KEpTCiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7Ci0gICAgYXV0byB1bmlvbkFyZyA9IGNvbnZlcnQ8SURMVW5pb248SURMRE9N
U3RyaW5nLCBJRExMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHVuaW9uQXJnID0gY29udmVydDxJRExVbmlvbjxJRExE
T01TdHJpbmcsIElETExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAg
IGltcGwudW5pb25BcmcoV1RGTW92ZSh1bmlvbkFyZykpOworCisgICAgLy8gTWFrZSBzdXJlIGFy
Z3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgorICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC02NjYsMTEgKzcxOCwxOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1
bmNXaXRoQ2xhbXBCbwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1
dG8gYXJnMSA9IGNvbnZlcnQ8SURMQ2xhbXBBZGFwdG9yPElETFVuc2lnbmVkTG9uZ0xvbmc+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Cisg
ICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAg
IGF1dG8gYXJnMSA9IGNvbnZlcnQ8SURMQ2xhbXBBZGFwdG9yPElETFVuc2lnbmVkTG9uZ0xvbmc+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gYXJnMiA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExD
bGFtcEFkYXB0b3I8SURMVW5zaWduZWRMb25nTG9uZz4+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9u
YWw8Q29udmVydGVyPElETENsYW1wQWRhcHRvcjxJRExVbnNpZ25lZExvbmdMb25nPj46OlJldHVy
blR5cGU+KGNvbnZlcnQ8SURMQ2xhbXBBZGFwdG9yPElETFVuc2lnbmVkTG9uZ0xvbmc+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSkpOworICAg
IGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKTsKKyAgICBhdXRvIGFyZzIg
PSBhcmd1bWVudDEuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExDbGFtcEFk
YXB0b3I8SURMVW5zaWduZWRMb25nTG9uZz4+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29u
dmVydGVyPElETENsYW1wQWRhcHRvcjxJRExVbnNpZ25lZExvbmdMb25nPj46OlJldHVyblR5cGU+
KGNvbnZlcnQ8SURMQ2xhbXBBZGFwdG9yPElETFVuc2lnbmVkTG9uZ0xvbmc+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQxKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmZ1bmNXaXRoQ2xhbXAoV1RGTW92ZShh
cmcxKSwgV1RGTW92ZShhcmcyKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkg
YWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYXJndW1lbnQwKTsKKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDEpOwor
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNjg3
LDkgKzc0NiwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlw
ZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXBJbgogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJnID0gY29udmVydDxJRExDbGFtcEFkYXB0b3I8
SURMTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCk7CisgICAgYXV0byBhcmcgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExMb25nPj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmZ1bmNXaXRoQ2xhbXBJ
blR5cGVkZWYoV1RGTW92ZShhcmcpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3Rh
eSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFs
aXZlSGVyZShhcmd1bWVudDApOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIApAQCAtNzA0LDcgKzc2OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uUG9pbnRGdW5jdGlvbkJv
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxTVkdQb2ludD4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwucG9pbnRGdW5jdGlv
bigpKSk7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZh
Y2U8U1ZHUG9pbnQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBpbXBsLnBvaW50RnVuY3Rpb24oKSkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5j
dGlvblBvaW50RnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNzIwLDkgKzc4NSwxNSBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1Nl
cXVlbmNlRgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYg
KFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gdmFs
dWVzID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcmd1bWVu
dDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gdmFsdWVzID0g
Y29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExTZXF1ZW5jZTxJ
RExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ1NlcXVlbmNlRnVuY3Rpb24oV1RGTW92ZSh2
YWx1ZXMpKSkpOworICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMU2Vx
dWVuY2U8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uKFdU
Rk1vdmUodmFsdWVzKSkpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2
ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVy
ZShhcmd1bWVudDApOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVu
Y2VGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCkBAIC03MzgsOSArODA5LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VG
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtF
TFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byB2YWx1ZXMgPSBj
b252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byB2YWx1ZXMgPSBjb252ZXJ0
PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETFNlcXVlbmNlPElETERPTVN0
cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IHRocm93U2NvcGUsIGltcGwuc3RyaW5nU2VxdWVuY2VGdW5jdGlvbjIoV1RGTW92ZSh2YWx1ZXMp
KSkpOworICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMU2VxdWVuY2U8
SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMihXVEZNb3Zl
KHZhbHVlcykpKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50
aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJn
dW1lbnQwKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVu
Y3Rpb24yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKQEAgLTc1Niw5ICs4MzMsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25DYWxsV2l0aFNlcXVlbmMKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIHNlcXVlbmNlQXJnID0g
Y29udmVydDxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdEV2ZW50VGFyZ2V0Pj4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0
byBzZXF1ZW5jZUFyZyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFRlc3RFdmVu
dFRhcmdldD4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodG9KUzxJRExCb29sZWFuPihpbXBsLmNhbGxXaXRoU2VxdWVuY2VUaGF0
UmVxdWlyZXNJbmNsdWRlKFdURk1vdmUoc2VxdWVuY2VBcmcpKSkpOworICAgIGF1dG8gcmVzdWx0
ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQm9vbGVhbj4oaW1wbC5jYWxsV2l0aFNlcXVlbmNl
VGhhdFJlcXVpcmVzSW5jbHVkZShXVEZNb3ZlKHNlcXVlbmNlQXJnKSkpKTsKKworICAgIC8vIE1h
a2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhv
ZC4KKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOworCisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>