<?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>162521</bug_id>
          
          <creation_ts>2016-09-23 16:55:24 -0700</creation_ts>
          <short_desc>Added RETURN_IF_EXCEPTION() macro and use it for exception checks</short_desc>
          <delta_ts>2017-06-01 18:58:29 -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>JavaScriptCore</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>172846</dependson>
          <blocked>162351</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1233053</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-23 16:55:24 -0700</bug_when>
    <thetext>And use it in all places that currently explicitly check for exceptions and return early.

Also, as much as is possible, if the return type is JSValue, change the returned value (on exception) to the empty JSValue (instead of sometimes jsUndefined() and jsNull()).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233056</commentid>
    <comment_count>1</comment_count>
      <attachid>289721</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-23 17:02:11 -0700</bug_when>
    <thetext>Created attachment 289721
work in progress for EWS testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233093</commentid>
    <comment_count>2</comment_count>
      <attachid>289735</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-23 19:55:00 -0700</bug_when>
    <thetext>Created attachment 289735
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233170</commentid>
    <comment_count>3</comment_count>
      <attachid>289735</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-24 16:45:45 -0700</bug_when>
    <thetext>Comment on attachment 289735
proposed patch.

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

r=me

&gt; Source/JavaScriptCore/profiler/ProfilerBytecodeSequence.cpp:90
&gt; +    RETURN_IF_EXCEPTION(scope, void());

Why not just a variant like:
RETURN_IF_EXCEPTION(scope);

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:202
&gt; +#define EXCEPTION_RESULT std::make_pair(SpeciesConstructResult::Exception, nullptr)

Why not just make a lambda that returns this pair? I wonder what llvm would do if you just allocate the pair locally, too. Maybe it&apos;d sink that allocation to the return points. Not 100% sure though.

&gt; Source/JavaScriptCore/runtime/ExceptionScope.h:74
&gt; +#define RETURN_IF_EXCEPTION(scope__, value__) do { \

I wish we also had a macro for this pattern:
scope.release();
return someOtherFunction(...);
so we could write:
SOME_MACRO_NAME(scope, someOtherFunction(...));

&gt; Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h:105
&gt; +    if (!result)
&gt; +        RETURN_IF_EXCEPTION(scope, nullptr);

I think a better translation here would be:
RETURN_IF_EXCEPTION(scope, nullptr);
ASSERT(!scope.exception());

&gt; Source/JavaScriptCore/runtime/ProxyConstructor.cpp:73
&gt; +result-&gt;putDirect(vm, makeIdentifier(vm, &quot;proxy&quot;), proxy, None);

indentation is off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233231</commentid>
    <comment_count>4</comment_count>
      <attachid>289735</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-09-25 09:15:34 -0700</bug_when>
    <thetext>Comment on attachment 289735
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:202
&gt;&gt; +#define EXCEPTION_RESULT std::make_pair(SpeciesConstructResult::Exception, nullptr)
&gt; 
&gt; Why not just make a lambda that returns this pair? I wonder what llvm would do if you just allocate the pair locally, too. Maybe it&apos;d sink that allocation to the return points. Not 100% sure though.

This should just be a static inline function. Functions are strictly better than macros.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233504</commentid>
    <comment_count>5</comment_count>
      <attachid>289735</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-26 12:08:33 -0700</bug_when>
    <thetext>Comment on attachment 289735
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/profiler/ProfilerBytecodeSequence.cpp:90
&gt;&gt; +    RETURN_IF_EXCEPTION(scope, void());
&gt; 
&gt; Why not just a variant like:
&gt; RETURN_IF_EXCEPTION(scope);

AFAIK, we can&apos;t overload preprocessor macros.  Hence, this is the compromise for not having to need 2 forms of the macro.

&gt;&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:202
&gt;&gt;&gt; +#define EXCEPTION_RESULT std::make_pair(SpeciesConstructResult::Exception, nullptr)
&gt;&gt; 
&gt;&gt; Why not just make a lambda that returns this pair? I wonder what llvm would do if you just allocate the pair locally, too. Maybe it&apos;d sink that allocation to the return points. Not 100% sure though.
&gt; 
&gt; This should just be a static inline function. Functions are strictly better than macros.

I will go with Saam&apos;s suggestion and use a lambda since this lambda function is only called in speciesConstructArray() and no other functions.  Making it static seems like more boilerplate at this time.  From what I can find online, lambdas are inlineable: see http://stackoverflow.com/questions/13722426/why-can-lambdas-be-better-optimized-by-the-compiler-than-plain-functions.

&gt;&gt; Source/JavaScriptCore/runtime/ExceptionScope.h:74
&gt;&gt; +#define RETURN_IF_EXCEPTION(scope__, value__) do { \
&gt; 
&gt; I wish we also had a macro for this pattern:
&gt; scope.release();
&gt; return someOtherFunction(...);
&gt; so we could write:
&gt; SOME_MACRO_NAME(scope, someOtherFunction(...));

I&apos;ll leave this for future consideration if we think of a good way to express this idea.  FYI, before we arrived on the scope.release() idiom, we had already rejected an idiom like this:

     return scope.checked(someOtherFunction(...));

... because scope.checked() here seems to be pretty long (in characters) and it slightly obscures the real action the reader probably wants to focus on i.e. the call to someOtherFunction().  I bring this up because this is similar in length of chars to read to the macro you proposed (or might even be more compact).  I&apos;m happy to reconsider that decision if the JSC folks feel differently now that we have more code that need to do scope.release() (with a lot more to come soon).

&gt;&gt; Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h:105
&gt;&gt; +        RETURN_IF_EXCEPTION(scope, nullptr);
&gt; 
&gt; I think a better translation here would be:
&gt; RETURN_IF_EXCEPTION(scope, nullptr);
&gt; ASSERT(!scope.exception());

I&apos;ll leave this for a future patch when I make fixes for exception checks (which includes re-arranging code like this).  Right now for this patch, I&apos;m (mostly) only doing a straightforward text replacement of the old if statements with the new RETURN_IF_EXCEPTION() macro.

&gt;&gt; Source/JavaScriptCore/runtime/ProxyConstructor.cpp:73
&gt;&gt; +result-&gt;putDirect(vm, makeIdentifier(vm, &quot;proxy&quot;), proxy, None);
&gt; 
&gt; indentation is off.

Thanks.  Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233510</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-26 12:14:37 -0700</bug_when>
    <thetext>Thanks for the reviews.  Landed in r206386: &lt;http://trac.webkit.org/r206386&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289721</attachid>
            <date>2016-09-23 17:02:11 -0700</date>
            <delta_ts>2016-09-23 19:55:00 -0700</delta_ts>
            <desc>work in progress for EWS testing.</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>385450</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExLDggKzMxMSw3IEBAIHB1
YmxpYzoKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPm1fZGVsZWdhdGUpIHsKICAgICAgICAgICAg
IGlmICh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbmFtZSwg
c2xvdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAg
fQogCiAgICAgICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVj
LCBuYW1lLCBzbG90KTsKQEAgLTE0NjAsOCArMTQ1OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25SdW4KICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0
cmluZyhleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIFZlY3RvcjxjaGFyPiBzY3Jp
cHQ7CiAgICAgaWYgKCFmZXRjaFNjcmlwdEZyb21Mb2NhbEZpbGVTeXN0ZW0oZmlsZU5hbWUsIHNj
cmlwdCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4g
ZmlsZS4iKSkpKTsKQEAgLTE0OTQsOCArMTQ5Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25SdW4KICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBTdHJpbmcgc291cmNlID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmco
ZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIEdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCBqc051bGwoKSksIFZlY3RvcjxTdHJpbmc+KCkpOwogCkBAIC0xNTIyLDggKzE1
MTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hCiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1l
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmV0Y2hTY3JpcHRGcm9t
TG9jYWxGaWxlU3lzdGVtKGZpbGVOYW1lLCBzY3JpcHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBB
U0NJSUxpdGVyYWwoIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKSk7CkBAIC0xNTQzLDggKzE1Mzks
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hCiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIHNvdXJjZUNvZGUg
PSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCk7CiAKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV2YWx1YXRpb25FeGNlcHRp
b247CkBAIC0xNTYwLDE0ICsxNTU1LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25SZWEKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgYm9vbCBpc0JpbmFyeSA9IGZhbHNlOwog
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSB7CiAgICAgICAgIFN0cmluZyB0eXBl
ID0gZXhlYy0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gRW5jb2RlZEpTVmFs
dWUoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgICAgIGlmICh0eXBlICE9ICJiaW5hcnkiKQogICAgICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBzY29wZSwgIkV4cGVjdGVkICdiaW5hcnknIGFzIHNlY29uZCBhcmd1
bWVudC4iKTsKICAgICAgICAgaXNCaW5hcnkgPSB0cnVlOwpAQCAtMTU4Myw4ICsxNTc2LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYQogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT50eXBlZEFycmF5U3RydWN0
dXJlKFR5cGVVaW50OCk7CiAgICAgYXV0byBsZW5ndGggPSBjb250ZW50LnNpemUoKTsKICAgICBK
U09iamVjdCogcmVzdWx0ID0gY3JlYXRlVWludDhUeXBlZEFycmF5KGV4ZWMsIHN0cnVjdHVyZSwg
QXJyYXlCdWZmZXI6OmNyZWF0ZUZyb21CeXRlcyhjb250ZW50LnJlbGVhc2VCdWZmZXIoKS5sZWFr
UHRyKCksIGxlbmd0aCwgW10gKHZvaWQqIHApIHsgZmFzdEZyZWUocCk7IH0pLCAwLCBsZW5ndGgp
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBF
bmNvZGVkSlNWYWx1ZSgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQpAQCAt
MTU5NSw4ICsxNTg3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNo
ZQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmlu
ZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZldGNo
U2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSkpOwpAQCAtMTY1
OSw4ICsxNjUwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldAog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHVuc2lnbmVk
IHNlZWQgPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+d2Vha1JhbmRvbSgpLnNl
dFNlZWQoc2VlZCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KQEAgLTE5MzEsMTUgKzE5MjEsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkxvYQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMp
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBp
ZiAoIWZldGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwg
Y3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSkp
OwogCiAgICAgSlNJbnRlcm5hbFByb21pc2UqIHByb21pc2UgPSBsb2FkQW5kRXZhbHVhdGVNb2R1
bGUoZXhlYywgZmlsZU5hbWUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBKU1ZhbHVl
IGVycm9yOwogICAgIEpTRnVuY3Rpb24qIGVycm9ySGFuZGxlciA9IEpTTmF0aXZlU3RkRnVuY3Rp
b246OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAxLCBTdHJpbmcoKSwg
WyZdKEV4ZWNTdGF0ZSogZXhlYykgewpAQCAtMTk2Myw4ICsxOTUxLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU3RyaW5nIGZ1bmN0aW9uVGV4dCA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSA9IG1ha2VTb3VyY2UoZnVuY3Rpb25UZXh0KTsKICAgICBK
U0Z1bmN0aW9uKiBmdW5jID0gSlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1bmN0aW9uKHZtLCBj
cmVhdGVCdWlsdGluRXhlY3V0YWJsZSh2bSwgc291cmNlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgImZvbyIpLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIENvbnN0cnVjdEFiaWxpdHk6OkNh
bm5vdENvbnN0cnVjdCktPmxpbmsodm0sIHNvdXJjZSksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSk7CkBAIC0xOTg0LDggKzE5NzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uQ2hlCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgU3RyaW5nIHNvdXJjZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMp
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwogICAg
IHN0b3BXYXRjaC5zdGFydCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsOCArMTIzLDcg
QEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBKSVRfT1BFUkFUSU9OIAogCiAgICAgLy8gRG9u
J3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJvd3MgYW4gZXhjZXB0aW9uLgogICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gcHJvcGVydHkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KGJhc2VWYWx1ZSwgc3RyaWN0KTsKICAgICBpZiAoZGlyZWN0KSB7CkBAIC0xOTIsOCArMTkx
LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaQogICAgICAgICBy
ZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb25z
dHJ1Y3RvciktPnJhcmVEYXRhKGV4ZWMsIGlubGluZUNhcGFjaXR5KS0+b2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUoKS0+c3RydWN0dXJlKCkpOwogCiAgICAgSlNWYWx1ZSBwcm90byA9IGNvbnN0cnVj
dG9yLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgaWYgKHByb3RvLmlz
T2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBhc09i
amVjdChwcm90bykpOwogICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKQEAg
LTIyMiw4ICsyMjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZh
CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBp
bnQzMl90IGEgPSBvcDEudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW50
MzJfdCBiID0gb3AyLnRvSW50MzIoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihhICYgYikpOwogfQpAQCAtMjM4LDggKzIzNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AyKTsKIAogICAgIGludDMyX3QgYSA9IG9wMS50b0ludDMyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBpbnQzMl90IGIgPSBvcDIudG9JbnQzMihleGVjKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgfCBiKSk7CiB9CkBAIC0yNTQsOCArMjUw
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogICAgIEpTVmFs
dWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgaW50MzJfdCBhID0g
b3AxLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGludDMyX3QgYiA9IG9w
Mi50b0ludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSBe
IGIpKTsKIH0KQEAgLTI3MCw4ICsyNjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblZhCiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
Mik7CiAKICAgICBpbnQzMl90IGEgPSBvcDEudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgdWludDMyX3QgYiA9IG9wMi50b1VJbnQzMihleGVjKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgPDwgKGIgJiAweDFmKSkpOwogfQpAQCAtMjg2LDggKzI4
MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKICAgICBKU1Zh
bHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAogICAgIGludDMyX3QgYSA9
IG9wMS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB1aW50MzJfdCBiID0g
b3AyLnRvVUludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
YSA+PiAoYiAmIDB4MWYpKSk7CiB9CkBAIC0zMDIsOCArMjk1LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDIpOwogCiAgICAgdWludDMyX3QgYSA9IG9wMS50b1VJbnQzMihleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3QgYiA9IG9wMi50b1VJbnQzMihleGVjKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+
KGEgPj4gKGIgJiAweDFmKSkpKTsKIH0KQEAgLTMzNCw4ICszMjYsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhlYyk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhIC8gYikpOwogfQpAQCAtMzQ4LDgg
KzMzOSw3IEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoQWJzKEUKIAogICAg
IEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIGRvdWJsZSBh
ID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiBQTmFOOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IFBOYU4pOwogICAgIHJldHVybiBmYWJzKGEpOwogfQogCkBAIC0zNjEsOCArMzUxLDcgQEAgaW50
MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoQ2x6MwogCiAgICAgSlNWYWx1ZSBvcDEg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgdWludDMyX3QgdmFsdWUgPSBvcDEu
dG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CiAgICAg
cmV0dXJuIGNsejMyKHZhbHVlKTsKIH0KIApAQCAtMzc0LDggKzM2Myw3IEBAIGRvdWJsZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoQ29zKEUKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMp
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gY29zKGEpOwogfQogCkBAIC0zODcsOCAr
Mzc1LDcgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhGUm91bgogCiAgICAg
SlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEg
PSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIFBOYU47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
UE5hTik7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihhKTsKIH0KIApAQCAtNDAwLDgg
KzM4Nyw3IEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoTG9nKEUKIAogICAg
IEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIGRvdWJsZSBh
ID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiBQTmFOOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IFBOYU4pOwogICAgIHJldHVybiBsb2coYSk7CiB9CiAKQEAgLTQxMyw4ICszOTksNyBAQCBkb3Vi
bGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aFNpbihFCiAKICAgICBKU1ZhbHVlIG9wMSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJl
cihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4gUE5hTjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBQTmFOKTsKICAgICBy
ZXR1cm4gc2luKGEpOwogfQogCkBAIC00MjYsOCArNDExLDcgQEAgZG91YmxlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQXJpdGhTcXJ0KAogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIFBOYU47Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUE5hTik7CiAgICAgcmV0dXJuIHNxcnQoYSk7
CiB9CiAKQEAgLTQzOSw4ICs0MjMsNyBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25B
cml0aFRhbihFCiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3Ax
KTsKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgcmV0dXJuIHRhbihhKTsKIH0KIApAQCAtNDUyLDggKzQzNSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKIAogICAgIEpTVmFsdWUgYXJndW1lbnQgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50KTsKICAgICBkb3VibGUgdmFsdWVPZkFyZ3Vt
ZW50ID0gYXJndW1lbnQudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoanNSb3VuZCh2YWx1ZU9mQXJndW1lbnQpKSk7
CiB9CiAKQEAgLTQ2NSw4ICs0NDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFyCiAKICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRBcmd1bWVudCk7CiAgICAgZG91YmxlIHZhbHVlT2ZBcmd1bWVudCA9IGFyZ3VtZW50LnRvTnVt
YmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKGZsb29yKHZhbHVlT2ZBcmd1bWVudCkpKTsKIH0KIApAQCAtNDc4LDggKzQ1OSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKIAogICAgIEpTVmFs
dWUgYXJndW1lbnQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50KTsKICAgICBkb3Vi
bGUgdmFsdWVPZkFyZ3VtZW50ID0gYXJndW1lbnQudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoY2VpbCh2YWx1ZU9m
QXJndW1lbnQpKSk7CiB9CiAKQEAgLTQ5MSw4ICs0NzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAKICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRBcmd1bWVudCk7CiAgICAgZG91YmxlIHRydW5jYXRlZFZhbHVlT2ZBcmd1
bWVudCA9IGFyZ3VtZW50LnRvSW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpOwotICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRydW5jYXRlZFZhbHVl
T2ZBcmd1bWVudCkpOwogfQogCkBAIC01NDQsMTEgKzUyMyw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICB9CiAKICAgICBiYXNlVmFsdWUucmVxdWlyZU9i
amVjdENvZXJjaWJsZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gcHJv
cGVydHlOYW1lID0gcHJvcGVydHkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBw
cm9wZXJ0eU5hbWUpKTsKIH0KIApAQCAtNTc4LDggKzU1NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICB9CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IHByb3BlcnR5LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGV4ZWMsIHByb3BlcnR5
TmFtZSkpOwogfQogCkBAIC05NzMsMTIgKzk0OSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgfQogCiAgICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RD
b2VyY2libGUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgYXV0byBwcm9wZXJ0eSA9
IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgcHJvcGVydHksIHNsb3Qp
KTsKIH0KIApAQCAtMTAwNSw4ICs5NzksNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxXaXRoCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgSWRlbnRpZmllciBwcm9wZXJ0eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2Ny
aXB0KS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOwogICAgIHB1dFdpdGhUaGlzPHRydWU+KGV4ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVk
VGhpcywgZW5jb2RlZFZhbHVlLCBwcm9wZXJ0eSk7CiB9CiAKQEAgLTEwMTcsOCArOTkwLDcgQEAg
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsV2l0aAogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIElkZW50aWZpZXIgcHJvcGVydHkgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBwdXRXaXRoVGhpczxmYWxz
ZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRUaGlzLCBlbmNvZGVkVmFsdWUsIHByb3BlcnR5
KTsKIH0KIApAQCAtMTY2MywxMyArMTYzNSwxMSBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uSGFzT3duUHJvCiAKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkS2V5KTsKICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IGtleS50b1Byb3BlcnR5S2V5
KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0
aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwogICAgIGJvb2wgcmVzdWx0ID0gdGhpc09iamVjdC0+
aGFzT3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLmltcGwoKSwgc2xvdCk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIEhhc093blByb3BlcnR5
Q2FjaGUqIGhhc093blByb3BlcnR5Q2FjaGUgPSB2bS5oYXNPd25Qcm9wZXJ0eUNhY2hlKCk7CiAg
ICAgQVNTRVJUKGhhc093blByb3BlcnR5Q2FjaGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAJKHJl
dmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmpl
Y3RlZFNjcmlwdEhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsOCArMTAzLDcgQEAgSlNW
YWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6ZXZhbHVhdGVXaQogICAgICAgICByZXR1cm4gdGhy
b3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW5qZWN0ZWRTY3JpcHRIb3N0
LmV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJp
bmcuIikpOwogCiAgICAgU3RyaW5nIHByb2dyYW0gPSBzY3JpcHRWYWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgSlNWYWx1ZSgpKTsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXhjZXB0aW9uOwogICAg
IEpTT2JqZWN0KiBzY29wZUV4dGVuc2lvbiA9IGV4ZWMtPmFyZ3VtZW50KDEpLmdldE9iamVjdCgp
OwpAQCAtMjY1LDggKzI2NCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldElu
dGVybmEKICAgICBpZiAoSlNQcm9taXNlKiBwcm9taXNlID0ganNEeW5hbWljQ2FzdDxKU1Byb21p
c2UqPih2YWx1ZSkpIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0Fy
cmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgp
KTsKICAgICAgICAgc3dpdGNoIChwcm9taXNlLT5zdGF0dXMoZXhlYy0+dm0oKSkpIHsKICAgICAg
ICAgY2FzZSBKU1Byb21pc2U6OlN0YXR1czo6UGVuZGluZzoKICAgICAgICAgICAgIGFycmF5LT5w
dXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgic3RhdHVzIiksIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBBU0NJ
SUxpdGVyYWwoInBlbmRpbmciKSkpKTsKQEAgLTI4Nyw4ICsyODUsNyBAQCBKU1ZhbHVlIEpTSW5q
ZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAgaWYgKEpTQm91bmRGdW5jdGlvbiogYm91
bmRGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4odmFsdWUpKSB7CiAg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25z
dHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgIGFycmF5
LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5
KGV4ZWMsICJ0YXJnZXRGdW5jdGlvbiIsIGJvdW5kRnVuY3Rpb24tPnRhcmdldEZ1bmN0aW9uKCkp
KTsKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVj
dEludGVybmFsUHJvcGVydHkoZXhlYywgImJvdW5kVGhpcyIsIGJvdW5kRnVuY3Rpb24tPmJvdW5k
VGhpcygpKSk7CiAgICAgICAgIGlmIChib3VuZEZ1bmN0aW9uLT5ib3VuZEFyZ3MoKSkKQEAgLTI5
OSw4ICsyOTYsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAg
ICAgaWYgKFByb3h5T2JqZWN0KiBwcm94eSA9IGpzRHluYW1pY0Nhc3Q8UHJveHlPYmplY3QqPih2
YWx1ZSkpIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBh
cnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgMik7Ci0gICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsK
ICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdElu
dGVybmFsUHJvcGVydHkoZXhlYywgQVNDSUlMaXRlcmFsKCJ0YXJnZXQiKSwgcHJveHktPnRhcmdl
dCgpKSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25z
dHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiaGFuZGxlciIpLCBwcm94
eS0+aGFuZGxlcigpKSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTMxMyw4ICszMDksNyBA
QCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAKICAgICAgICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3Ry
dWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCAyKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwog
ICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVj
dEludGVybmFsUHJvcGVydHkoZXhlYywgImFycmF5IiwgaXRlcmF0ZWRWYWx1ZSkpOwogICAgICAg
ICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVy
bmFsUHJvcGVydHkoZXhlYywgImtpbmQiLCBraW5kKSk7CiAgICAgICAgICAgICByZXR1cm4gYXJy
YXk7CkBAIC0zMzYsOCArMzMxLDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0
SW50ZXJuYQogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICAgICAg
SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIDIpOwot
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
VmFsdWUoKSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBj
b25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJtYXAiLCBtYXBJdGVyYXRvci0+aXRlcmF0
ZWRWYWx1ZSgpKSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsr
LCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJraW5kIiwganNOb250cml2aWFsU3Ry
aW5nKGV4ZWMsIGtpbmQpKSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTM1OCw4ICszNTIs
NyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAgICAgIH0K
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgMik7Ci0gICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAg
YXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJv
cGVydHkoZXhlYywgInNldCIsIHNldEl0ZXJhdG9yLT5pdGVyYXRlZFZhbHVlKCkpKTsKICAgICAg
ICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFs
UHJvcGVydHkoZXhlYywgImtpbmQiLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywga2luZCkpKTsK
ICAgICAgICAgcmV0dXJuIGFycmF5OwpAQCAtMzY4LDggKzM2MSw3IEBAIEpTVmFsdWUgSlNJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICBpZiAoSlNTdHJpbmdJdGVyYXRvciogc3Ry
aW5nSXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTU3RyaW5nSXRlcmF0b3IqPih2YWx1ZSkpIHsK
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgMSk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAg
YXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJv
cGVydHkoZXhlYywgInN0cmluZyIsIHN0cmluZ0l0ZXJhdG9yLT5pdGVyYXRlZFZhbHVlKGV4ZWMp
KSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKICAgICB9CkBAIC0zNzcsOCArMzY5LDcgQEAgSlNW
YWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgIGlmIChKU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yKiBwcm9wZXJ0eU5hbWVJdGVyYXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvcio+KHZhbHVlKSkgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7
CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxs
cHRyLCAxKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
aW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAib2JqZWN0IiwgcHJvcGVy
dHlOYW1lSXRlcmF0b3ItPml0ZXJhdGVkVmFsdWUoKSkpOwogICAgICAgICByZXR1cm4gYXJyYXk7
CiAgICAgfQpAQCAtNDIwLDggKzQxMSw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6
OndlYWtNYXBFbnQKICAgICAgICAgbnVtYmVyVG9GZXRjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihmZXRjaERvdWJsZSk7CiAKICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJy
YXkoZXhlYywgbnVsbHB0cik7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgSlNWYWx1ZSgpKTsKICAgICBmb3IgKGF1dG8gaXQgPSB3ZWFrTWFwLT53ZWFrTWFwRGF0
YSgpLT5iZWdpbigpOyBpdCAhPSB3ZWFrTWFwLT53ZWFrTWFwRGF0YSgpLT5lbmQoKTsgKytpdCkg
ewogICAgICAgICBKU09iamVjdCogZW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsK
ICAgICAgICAgZW50cnktPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsICJrZXkiKSwgaXQtPmtleSk7CkBAIC00NjgsOCArNDU4LDcgQEAgSlNWYWx1ZSBK
U0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha1NldEVudAogICAgICAgICBudW1iZXJUb0ZldGNoID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZldGNoRG91YmxlKTsKIAogICAgIEpTQXJyYXkqIGFycmF5
ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIGZvciAoYXV0byBpdCA9
IHdlYWtTZXQtPndlYWtNYXBEYXRhKCktPmJlZ2luKCk7IGl0ICE9IHdlYWtTZXQtPndlYWtNYXBE
YXRhKCktPmVuZCgpOyArK2l0KSB7CiAgICAgICAgIEpTT2JqZWN0KiBlbnRyeSA9IGNvbnN0cnVj
dEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgICAgICBlbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInZhbHVlIiksIGl0LT5rZXkpOwpAQCAtNTA5
LDggKzQ5OCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Oml0ZXJhdG9yRW4KICAg
ICAgICAgaXRlcmF0b3IgPSBzdHJpbmdJdGVyYXRvci0+Y2xvbmUoZXhlYyk7CiAgICAgZWxzZSBp
ZiAoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogcHJvcGVydHlOYW1lSXRlcmF0b3IgPSBqc0R5bmFt
aWNDYXN0PEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqPih2YWx1ZSkpIHsKICAgICAgICAgaXRlcmF0
b3IgPSBwcm9wZXJ0eU5hbWVJdGVyYXRvci0+Y2xvbmUoZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGlmIChKU09iamVjdCogaXRlcmF0b3JPYmplY3QgPSBqc0R5bmFtaWNDYXN0
PEpTT2JqZWN0Kj4odmFsdWUpKSB7CiAgICAgICAgICAgICAvLyBBcnJheSBJdGVyYXRvcnMgYXJl
IGNyZWF0ZWQgaW4gSlMgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIFRodXMgdGhlIG9ubHkgd2F5
IHRvIGtub3cgd2UgaGF2ZSBvbmUgaXMgdG8KQEAgLTUyOSw4ICs1MTcsNyBAQCBKU1ZhbHVlIEpT
SW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVuCiAgICAgICAgIG51bWJlclRvRmV0Y2ggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZmV0Y2hEb3VibGUpOwogCiAgICAgSlNBcnJheSogYXJyYXkg
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOwotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtYmVyVG9GZXRjaDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgbmV4dCA9
IGl0ZXJhdG9yU3RlcChleGVjLCBpdGVyYXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCShy
ZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2
YVNjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDggKzgzLDcgQEAgSlNW
YWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlVwogICAgICAgICByZXR1cm4gdGhy
b3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lLmV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBz
dHJpbmcuIikpOwogCiAgICAgU3RyaW5nIHNjcmlwdCA9IHNjcmlwdFZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBleGNlcHRpb247CiAg
ICAgSlNPYmplY3QqIHNjb3BlRXh0ZW5zaW9uID0gZXhlYy0+YXJndW1lbnQoMSkuZ2V0T2JqZWN0
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw4ICsxMDMs
NyBAQCBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KICAgICBTdHJpbmcgcHJvZ3JhbVNvdXJjZSA9IGFzU3RyaW5n
KHByb2dyYW0pLT52YWx1ZShjYWxsRnJhbWUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1l
ID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJs
b2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwpAQCAtMTg2LDggKzE4NSw3IEBAIHVuc2ln
bmVkIHNpemVPZlZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnIKICAgICBkZWZhdWx0OgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudHMuaXNPYmplY3QoKSk7CiAgICAgICAgIGxlbmd0aCA9
IGdldExlbmd0aChjYWxsRnJhbWUsIGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCkBAIC04MDQsOCArODAyLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQ
cm9ncmFtRXhlYwogICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChnbG9iYWxPYmplY3QsIFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFnbG9iYWxPYmplY3QtPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIEpTT05QUGF0aFtpXS5t
X3BhdGhFbnRyeU5hbWUsIHNsb3QpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZW50cnkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIHRocm93U2NvcGUsIGNyZWF0ZVVuZGVmaW5l
ZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBKU09OUFBhdGhbaV0ubV9wYXRoRW50cnlOYW1lKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWRKU09OUDsKQEAgLTgxMywx
NCArODEwLDEyIEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbUV4ZWMKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJhc2VPYmplY3QgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFt
ZSwgSlNPTlBQYXRoW2ldLm1fcGF0aEVudHJ5TmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgYmFzZU9iamVjdCA9IGJhc2VPYmplY3QuZ2V0
KGNhbGxGcmFtZSwgSlNPTlBQYXRoW2ldLm1fcGF0aEVudHJ5TmFtZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgSlNPTlBQYXRo
RW50cnlUeXBlTG9va3VwOiB7CiAgICAgICAgICAgICAgICAgICAgIGJhc2VPYmplY3QgPSBiYXNl
T2JqZWN0LmdldChjYWxsRnJhbWUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU09OUFBhdGhbaV0u
bV9wYXRoSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBKU1ZhbHVl
KCkpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTgzMiw4ICs4MjcsNyBAQCBKU1ZhbHVlIEludGVy
cHJldGVyOjpleGVjdXRlKFByb2dyYW1FeGVjCiAgICAgICAgICAgICBzd2l0Y2ggKEpTT05QUGF0
aC5sYXN0KCkubV90eXBlKSB7CiAgICAgICAgICAgICBjYXNlIEpTT05QUGF0aEVudHJ5VHlwZUNh
bGw6IHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gYmFzZU9iamVjdC5nZXQo
Y2FsbEZyYW1lLCBKU09OUFBhdGgubGFzdCgpLm1fcGF0aEVudHJ5TmFtZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKICAgICAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGZ1bmN0
aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBl
OjpOb25lKQpAQCAtODQyLDIwICs4MzYsMTcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0
ZShQcm9ncmFtRXhlYwogICAgICAgICAgICAgICAgIGpzb25BcmcuYXBwZW5kKEpTT05QVmFsdWUp
OwogICAgICAgICAgICAgICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNPTlBQYXRoLnNpemUoKSA9
PSAxID8ganNVbmRlZmluZWQoKTogYmFzZU9iamVjdDsKICAgICAgICAgICAgICAgICBKU09OUFZh
bHVlID0gSlNDOjpjYWxsKGNhbGxGcmFtZSwgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwg
dGhpc1ZhbHVlLCBqc29uQXJnKTsKLSAgICAgICAgICAgICAgICBpZiAodGhyb3dTY29wZS5leGNl
cHRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBKU1ZhbHVlKCkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBK
U09OUFBhdGhFbnRyeVR5cGVEb3Q6IHsKICAgICAgICAgICAgICAgICBiYXNlT2JqZWN0LnB1dChj
YWxsRnJhbWUsIEpTT05QUGF0aC5sYXN0KCkubV9wYXRoRW50cnlOYW1lLCBKU09OUFZhbHVlLCBz
bG90KTsKLSAgICAgICAgICAgICAgICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBKU09OUFBhdGhFbnRyeVR5
cGVMb29rdXA6IHsKICAgICAgICAgICAgICAgICBiYXNlT2JqZWN0LnB1dEJ5SW5kZXgoY2FsbEZy
YW1lLCBKU09OUFBhdGgubGFzdCgpLm1fcGF0aEluZGV4LCBKU09OUFZhbHVlLCBzbG90LmlzU3Ry
aWN0TW9kZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTk1
OCw4ICs5NDksNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChDYWxsRnJhCiAg
ICAgICAgICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZSh2bUVudHJ5VG9OYXRpdmUocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKSwgJnZtLCAmcHJvdG9DYWxs
RnJhbWUpKTsKLSAgICAgICAgICAgIGlmICh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKQotICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGpzTnVsbCgpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDI3
LDggKzEwMTcsNyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiAwOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgMCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc09iamVjdCgpKTsKICAgICByZXR1cm4gY2hlY2tl
ZFJldHVybihhc09iamVjdChyZXN1bHQpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHJldmlzaW9uIDIwNjMz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDM4LDggKzQzOCw3IEBAIEpTQXJyYXkqIFNoYWRvd0NoaWNr
ZW46OmZ1bmN0aW9uc09uU3RhY2sKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0FycmF5KiByZXN1bHQgPSBj
b25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgaXRlcmF0ZSgKICAgICAgICAgdm0sIGV4ZWMsCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Niw4ICsyNzYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkluCiAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25Jbk9w
dGltaXplLCBiYXNlLT5jbGFzc0luZm8oKSwgaWRlbnQpKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xv
dChiYXNlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVydHkpOwog
ICAgIGJvb2wgcmVzdWx0ID0gYXNPYmplY3QoYmFzZSktPmdldFByb3BlcnR5U2xvdChleGVjLCBp
ZGVudCwgc2xvdCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAKICAgICBSRUxFQVNFX0FT
U0VSVChhY2Nlc3NUeXBlID09IHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKICAgICAKQEAgLTUxMiw4
ICs1MTEsNyBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtCiAKICAg
ICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoY2FsbEZyYW1lKTsKICAg
ICAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlv
bi4KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGlmIChieVZh
bEluZm8tPnN0dWJJbmZvICYmICghaXNTdHJpbmdPclN5bWJvbChzdWJzY3JpcHQpIHx8IGJ5VmFs
SW5mby0+Y2FjaGVkSWQgIT0gcHJvcGVydHkpKQogICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93
UGF0aCA9IHRydWU7CkBAIC01NTcsOCArNTU1LDcgQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlW
YWwoQ2FsbEZyYW1lKiBjYQogCiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0
cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50
b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAKICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChw
cm9wZXJ0eSkpIHsKICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwpAQCAt
Nzg3LDggKzc4NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2EK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBldmFsKGV4ZWNDYWxsZWUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBFbmNvZGVkSlNWYWx1ZSgpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIAogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTE0NjEsOCArMTQ1Nyw3IEBAIHN0YXRpYyB2
b2lkIHB1dEFjY2Vzc29yQnlWYWwoRXhlY1N0YXRlKiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvIHBy
b3BlcnR5S2V5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBpZiAoYWNjZXNzb3JUeXBlID09IEFjY2Vz
c29yVHlwZTo6R2V0dGVyKQogICAgICAgICBiYXNlLT5wdXRHZXR0ZXIoZXhlYywgcHJvcGVydHlL
ZXksIGFjY2Vzc29yLCBhdHRyaWJ1dGUpOwpAQCAtMTY1MSwxMSArMTY0Niw5IEBAIHN0YXRpYyBK
U1ZhbHVlIGdldEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywKICAgICB9CiAKICAgICBiYXNlVmFsdWUu
cmVxdWlyZU9iamVjdENvZXJjaWJsZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3Jp
cHQudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgQVNTRVJUKGV4ZWMtPmJ5dGVjb2RlT2Zmc2V0
KCkpOwogICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYmICghaXNTdHJpbmdPclN5bWJvbChz
dWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQgIT0gcHJvcGVydHkpKQpAQCAtMTg2Mywx
MSArMTg1Niw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAg
ICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGJhc2VWYWx1ZS5yZXF1aXJlT2JqZWN0Q29l
cmNpYmxlKGV4ZWMpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAg
IGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0
KGV4ZWMsIHByb3BlcnR5KTsKICAgICB9CiAKQEAgLTE5MTUsMTEgKzE5MDYsOSBAQCBzaXplX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25EZWxldGVCeVZhCiAgICAgaWYgKGtleS5nZXRVSW50MzIo
aW5kZXgpKQogICAgICAgICBjb3VsZERlbGV0ZSA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKHZtKS0+
ZGVsZXRlUHJvcGVydHlCeUluZGV4KGJhc2VPYmosIGV4ZWMsIGluZGV4KTsKICAgICBlbHNlIHsK
LSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwog
ICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0ga2V5LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAg
ICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3Bl
cnR5KGJhc2VPYmosIGV4ZWMsIHByb3BlcnR5KTsKICAgICB9CiAgICAgaWYgKCFjb3VsZERlbGV0
ZSAmJiBleGVjLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpCkBAIC0yMTIzLDggKzIxMTIs
NyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFCiAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3Qoc2NvcGUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIFB1dFByb3Bl
cnR5U2xvdDo6VW5rbm93bkNvbnRleHQsIGlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0
aWFsaXphdGlvbk1vZGUoKSkpOwogICAgIHNjb3BlLT5tZXRob2RUYWJsZSgpLT5wdXQoc2NvcGUs
IGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCi0gICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB2b2lkKCkpOwogCiAgICAgQ29tbW9uU2xvd1BhdGhzOjp0cnlDYWNo
ZVB1dFRvU2NvcGVHbG9iYWwoZXhlYywgY29kZUJsb2NrLCBwYywgc2NvcGUsIGdldFB1dEluZm8s
IHNsb3QsIGlkZW50KTsKIH0KQEAgLTIzNzcsOCArMjM2NSw3IEBAIEFMV0FZU19JTkxJTkUgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIHVucHIKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AyKTsKIAogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IG9wMi50b051bWJlcihleGVjKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgKiBiKSk7CiB9CkBAIC0yMzkzLDExICsy
MzgwLDkgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZgogICAgICAg
ICBhcml0aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRSSFMob3AxLCBvcDIpOwogCiAgICAgZG91Ymxl
IGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBi
ID0gb3AyLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzTnVtYmVyKGEgKiBiKTsKICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVS
ZXN1bHQocmVzdWx0KTsKQEAgLTI1NjAsOCArMjU0NSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIHVucHIKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkT3AyKTsKIAogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IG9wMi50b051bWJlcihleGVjKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgLSBiKSk7CiB9CkBAIC0yNTc2LDExICsyNTYw
LDkgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZgogICAgICAgICBh
cml0aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRSSFMob3AxLCBvcDIpOwogCiAgICAgZG91YmxlIGEg
PSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0g
b3AyLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzTnVtYmVyKGEgLSBiKTsKICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVSZXN1
bHQocmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODExLDExICs4MTEs
OSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldEJ5VmFsKFZNCiAgICAgfQogCiAg
ICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7Ci0gICAgaWYgKHNjb3Bl
LmV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJz
Y3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCi0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoZXhlYywgcHJvcGVydHkp
OwogfQogCkBAIC04ODMsNyArODgxLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3B1dF9ieV92YQogCiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0
aHJldyBhbiBleGNlcHRpb24uCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3Bl
cnR5S2V5KGV4ZWMpOwotICAgIGlmICh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgTExJTlRfRU5EKCk7CiAK
ICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eSkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNl
cXVlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEsMTUgKzgxLDEzIEBAIHZvaWQgQnl0ZWNv
ZGVTZXF1ZW5jZTo6YWRkU2VxdWVuY2VQcm9wZXIKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0FycmF5KiBo
ZWFkZXIgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2hlYWRl
ci5zaXplKCk7ICsraSkKICAgICAgICAgaGVhZGVyLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBq
c1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1faGVhZGVyW2ldKSkpOwogICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaGVhZGVyLCBoZWFkZXIpOwog
ICAgIAogICAgIEpTQXJyYXkqIHNlcXVlbmNlID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAw
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9zZXF1ZW5jZS5zaXplKCk7ICsraSkKICAgICAgICAgc2VxdWVuY2Ut
PnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fc2VxdWVuY2VbaV0udG9KUyhleGVjKSk7CiAgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZSwgc2Vx
dWVuY2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29t
cGlsYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9Qcm9maWxlckNvbXBpbGF0aW9uLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTcsMjggKzExNywyNCBAQCBKU1ZhbHVlIENvbXBpbGF0aW9uOjp0b0pTKEV4ZWNT
dGF0ZSogZXhlCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIEpTVmFsdWUoKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5ieXRlY29kZXNJRCwganNOdW1iZXIobV9ieXRlY29kZXMtPmlkKCkpKTsKICAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbXBpbGF0aW9uS2lu
ZCwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOCh0b0NTdHJpbmcobV9raW5kKSkpKTsK
ICAgICAKICAgICBKU0FycmF5KiBwcm9maWxlZEJ5dGVjb2RlcyA9IGNvbnN0cnVjdEVtcHR5QXJy
YXkoZXhlYywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
SlNWYWx1ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9maWxlZEJ5dGVj
b2Rlcy5zaXplKCk7ICsraSkKICAgICAgICAgcHJvZmlsZWRCeXRlY29kZXMtPnB1dERpcmVjdElu
ZGV4KGV4ZWMsIGksIG1fcHJvZmlsZWRCeXRlY29kZXNbaV0udG9KUyhleGVjKSk7CiAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm9maWxlZEJ5dGVjb2Rl
cywgcHJvZmlsZWRCeXRlY29kZXMpOwogICAgIAogICAgIEpTQXJyYXkqIGRlc2NyaXB0aW9ucyA9
IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9kZXNjcmlwdGlvbnMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGRlc2NyaXB0aW9ucy0+cHV0
RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9kZXNjcmlwdGlvbnNbaV0udG9KUyhleGVjKSk7CiAgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5kZXNjcmlwdGlvbnMs
IGRlc2NyaXB0aW9ucyk7CiAgICAgCiAgICAgSlNBcnJheSogY291bnRlcnMgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgZm9yIChhdXRvIGl0ID0gbV9jb3VudGVycy5iZWdpbigp
LCBlbmQgPSBtX2NvdW50ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgSlNP
YmplY3QqIGNvdW50ZXJFbnRyeSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgICAg
ICBjb3VudGVyRW50cnktPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9yaWdp
biwgaXQtPmtleS50b0pTKGV4ZWMpKTsKQEAgLTE0OCwxNSArMTQ0LDEzIEBAIEpTVmFsdWUgQ29t
cGlsYXRpb246OnRvSlMoRXhlY1N0YXRlKiBleGUKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvdW50ZXJzLCBjb3VudGVycyk7CiAgICAgCiAgICAgSlNB
cnJheSogZXhpdFNpdGVzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX29zckV4aXRTaXRlcy5zaXplKCk7ICsraSkKICAgICAgICAg
ZXhpdFNpdGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX29zckV4aXRTaXRlc1tpXS50b0pT
KGV4ZWMpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
Lm9zckV4aXRTaXRlcywgZXhpdFNpdGVzKTsKICAgICAKICAgICBKU0FycmF5KiBleGl0cyA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9vc3JFeGl0cy5zaXplKCk7ICsraSkKICAgICAgICAgZXhpdHMtPnB1dERpcmVjdEluZGV4KGV4
ZWMsIGksIG1fb3NyRXhpdHNbaV0udG9KUyhleGVjKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5vc3JFeGl0cywgZXhpdHMpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmNwcAko
cmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMjIgKzEwNCwxOSBAQCBKU1Zh
bHVlIERhdGFiYXNlOjp0b0pTKEV4ZWNTdGF0ZSogZXhlYykgCiAgICAgSlNPYmplY3QqIHJlc3Vs
dCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgIAogICAgIEpTQXJyYXkqIGJ5dGVj
b2RlcyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9ieXRlY29kZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGJ5dGVjb2Rlcy0+cHV0
RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9ieXRlY29kZXNbaV0udG9KUyhleGVjKSk7CiAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXMsIGJ5dGVj
b2Rlcyk7CiAgICAgCiAgICAgSlNBcnJheSogY29tcGlsYXRpb25zID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBKU1ZhbHVlKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvbXBpbGF0aW9u
cy5zaXplKCk7ICsraSkKICAgICAgICAgY29tcGlsYXRpb25zLT5wdXREaXJlY3RJbmRleChleGVj
LCBpLCBtX2NvbXBpbGF0aW9uc1tpXS0+dG9KUyhleGVjKSk7CiAgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb21waWxhdGlvbnMsIGNvbXBpbGF0aW9ucyk7
CiAgICAgCiAgICAgSlNBcnJheSogZXZlbnRzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAw
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2V2ZW50cy5zaXplKCk7ICsraSkKICAg
ICAgICAgZXZlbnRzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX2V2ZW50c1tpXS50b0pTKGV4
ZWMpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmV2
ZW50cywgZXZlbnRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlck9TUkV4aXRTaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzksOCArMzksNyBAQCBKU1ZhbHVlIE9TUkV4aXRTaXRlOjp0b0pTKEV4ZWNT
dGF0ZSogZXhlCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBKU1ZhbHVlKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVBZGRy
ZXNzZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
aSwganNTdHJpbmcoZXhlYywgdG9TdHJpbmcoUmF3UG9pbnRlcihtX2NvZGVBZGRyZXNzZXNbaV0p
KSkpOwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCShyZXZpc2lvbiAyMDYz
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFj
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMyw4ICsxMDMsNyBAQCBKU1ZhbHVlIE9yaWdpblN0YWNr
Ojp0b0pTKEV4ZWNTdGF0ZSogZXhlCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSogcmVzdWx0ID0g
Y29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3N0YWNrLnNpemUoKTsgKytpKQogICAgICAgICByZXN1bHQtPnB1dERpcmVjdElu
ZGV4KGV4ZWMsIGksIG1fc3RhY2tbaV0udG9KUyhleGVjKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDYz
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksOCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBz
dGQ6OnBhaXI8U3BlY2llc0NvCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKKyNkZWZpbmUgRVhDRVBUSU9OX1JFU1VM
VCBzdGQ6Om1ha2VfcGFpcihTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24sIG51bGxw
dHIpCisKICAgICAvLyBFQ01BIDkuNC4yLjM6IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2
Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZQogICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBqc1Vu
ZGVmaW5lZCgpOwogICAgIGlmIChMSUtFTFkoaXNBcnJheShleGVjLCB0aGlzT2JqZWN0KSkpIHsK
QEAgLTIwOCw4ICsyMTAsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBzdGQ6OnBhaXI8U3BlY2ll
c0NvCiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJl
c3VsdDo6RmFzdFBhdGgsIG51bGxwdHIpOwogCiAgICAgICAgIGNvbnN0cnVjdG9yID0gdGhpc09i
amVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvcik7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uLCBudWxscHRy
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgRVhDRVBUSU9OX1JFU1VMVCk7
CiAgICAgICAgIGlmIChjb25zdHJ1Y3Rvci5pc0NvbnN0cnVjdG9yKCkpIHsKICAgICAgICAgICAg
IEpTT2JqZWN0KiBjb25zdHJ1Y3Rvck9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNvbnN0cnVj
dG9yKTsKICAgICAgICAgICAgIGlmIChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkgIT0gY29u
c3RydWN0b3JPYmplY3QtPmdsb2JhbE9iamVjdCgpKQpAQCAtMjE3LDEzICsyMTgsMTIgQEAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgc3RkOjpwYWlyPFNwZWNpZXNDbwogICAgICAgICB9CiAgICAgICAg
IGlmIChjb25zdHJ1Y3Rvci5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBjb25zdHJ1Y3RvciA9
IGNvbnN0cnVjdG9yLmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc3BlY2llc1N5bWJv
bCk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpF
eGNlcHRpb24sIG51bGxwdHIpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgRVhDRVBUSU9OX1JFU1VMVCk7CiAgICAgICAgICAgICBpZiAoY29uc3RydWN0b3IuaXNOdWxs
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1
Y3RSZXN1bHQ6OkZhc3RQYXRoLCBudWxscHRyKTs7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbiwgbnVsbHB0cik7CisgICAgfSBl
bHNlCisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEVYQ0VQVElPTl9SRVNVTFQp
OwogCiAgICAgaWYgKGNvbnN0cnVjdG9yLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpGYXN0UGF0aCwgbnVsbHB0cik7
CkBAIC0yMzEsOSArMjMxLDEwIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHN0ZDo6cGFpcjxTcGVj
aWVzQ28KICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKGpz
TnVtYmVyKGxlbmd0aCkpOwogICAgIEpTT2JqZWN0KiBuZXdPYmplY3QgPSBjb25zdHJ1Y3QoZXhl
YywgY29uc3RydWN0b3IsIGFyZ3MsICJTcGVjaWVzIGNvbnN0cnVjdGlvbiBkaWQgbm90IGdldCBh
IHZhbGlkIGNvbnN0cnVjdG9yIik7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6
OkV4Y2VwdGlvbiwgbnVsbHB0cik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgRVhD
RVBUSU9OX1JFU1VMVCk7CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1
Y3RSZXN1bHQ6OkNyZWF0ZWRPYmplY3QsIG5ld09iamVjdCk7CisKKyN1bmRlZiBFWENFUFRJT05f
UkVTVUxUCiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYXJndW1lbnRDbGFtcGVkSW5kZXhG
cm9tU3RhcnRPckVuZChFeGVjU3RhdGUqIGV4ZWMsIGludCBhcmd1bWVudCwgdW5zaWduZWQgbGVu
Z3RoLCB1bnNpZ25lZCB1bmRlZmluZWRWYWx1ZSA9IDApCkBAIC0yODcsMTEgKzI4OCw5IEBAIHZv
aWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGgKICAgICAgICAgdW5zaWduZWQg
ZnJvbSA9IGsgKyBjdXJyZW50Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHRvID0gayArIHJlc3Vs
dENvdW50OwogICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRo
aXNPYmosIGZyb20pKSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4SW5s
aW5lKGV4ZWMsIHRvLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXRo
aXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4
ZWMsIHRvKSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKSk7CiAgICAgICAgICAgICByZXR1
cm47CkBAIC0zMzMsMTUgKzMzMiwxMyBAQCB2b2lkIHVuc2hpZnQoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogCiAgICAgICAgIHVuc2lnbmVkIGZyb20gPSBrICsgY3VycmVudENvdW50IC0gMTsK
ICAgICAgICAgdW5zaWduZWQgdG8gPSBrICsgcmVzdWx0Q291bnQgLSAxOwogICAgICAgICBpZiAo
SlNWYWx1ZSB2YWx1ZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGZyb20pKSB7Ci0gICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAgICAgICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIHRvLCB2YWx1ZSwg
dHJ1ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMsIHRvKSkgewogICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGRlbGV0ZSBw
cm9wZXJ0eS4iKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9CiB9CiAKQEAgLTM1
MywxMyArMzUwLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
IAogICAgIC8vIDEuIExldCBhcnJheSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9PYmplY3Qg
b24gdGhlIHRoaXMgdmFsdWUuCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUu
dG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAKICAgICAvLyAyLiBM
ZXQgZnVuYyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0
aG9kIG9mIGFycmF5IHdpdGggYXJndW1lbnQgImpvaW4iLgogICAgIEpTVmFsdWUgZnVuY3Rpb24g
PSBKU1ZhbHVlKHRoaXNPYmplY3QpLmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuam9p
bik7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIC8vIDMuIElmIElzQ2FsbGFibGUoZnVu
YykgaXMgZmFsc2UsIHRoZW4gbGV0IGZ1bmMgYmUgdGhlIHN0YW5kYXJkIGJ1aWx0LWluIG1ldGhv
ZCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICgxNS4yLjQuMikuCiAgICAgYm9vbCBjdXN0b21K
b2luQ2FzZSA9IGZhbHNlOwpAQCAtMzg3LDE5ICszODIsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVh
cmx5UmV0dXJuVmFsdWUpOwogCiAgICAgSlNTdHJpbmdKb2luZXIgam9pbmVyKCpleGVjLCAnLCcs
IGxlbmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzQXJy
YXktPnRyeUdldEluZGV4UXVpY2tseShpKTsKICAgICAgICAgaWYgKCFlbGVtZW50KSB7CiAgICAg
ICAgICAgICBlbGVtZW50ID0gdGhpc0FycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgfQogICAgICAgICBqb2lu
ZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIH0KIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoam9pbmVyLmpvaW4oKmV4
ZWMpKTsKQEAgLTQxMiw2NSArNDA0LDU0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRv
VGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhp
c1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iamVjdCk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKIAogICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIgY2hlY2tlcihleGVjLCB0aGlz
T2JqZWN0KTsKICAgICBpZiAoSlNWYWx1ZSBlYXJseVJldHVyblZhbHVlID0gY2hlY2tlci5lYXJs
eVJldHVyblZhbHVlKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1
cm5WYWx1ZSk7CiAKICAgICBKU1N0cmluZ0pvaW5lciBzdHJpbmdKb2luZXIoKmV4ZWMsICcsJywg
bGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAjaWYgRU5BQkxFKElOVEwpCiAgICAg
QXJnTGlzdCBhcmd1bWVudHMoZXhlYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldElu
ZGV4KGV4ZWMsIGkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAg
IGlmIChlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICBlbGVtZW50ID0g
anNFbXB0eVN0cmluZyhleGVjKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBKU1ZhbHVl
IGNvbnZlcnNpb25GdW5jdGlvbiA9IGVsZW1lbnQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS50b0xvY2FsZVN0cmluZyk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICAgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxE
YXRhKTsKICAgICAgICAgICAgIGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSkgewogICAg
ICAgICAgICAgICAgIGVsZW1lbnQgPSBjYWxsKGV4ZWMsIGNvbnZlcnNpb25GdW5jdGlvbiwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBlbGVtZW50LCBhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KICNlbHNlIC8vICFFTkFCTEUoSU5U
TCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAg
SlNWYWx1ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoZXhlYywgaSk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKGVsZW1lbnQuaXNVbmRlZmlu
ZWRPck51bGwoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBKU1ZhbHVlIGNvbnZl
cnNpb25GdW5jdGlvbiA9IGVsZW1lbnQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50
b0xvY2FsZVN0cmluZyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2Fs
bERhdGEoY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgIGlmIChjYWxsVHlw
ZSAhPSBDYWxsVHlwZTo6Tm9uZSkgewogICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywg
Y29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGV4ZWMtPmVt
cHR5TGlzdCgpKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgICAgICB9CiAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoKmV4ZWMsIGVsZW1lbnQp
OwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogI2VuZGlmIC8vICFF
TkFCTEUoSU5UTCkKIApAQCAtNTEzLDggKzQ5NCw3IEBAIHN0YXRpYyBKU1ZhbHVlIHNsb3dKb2lu
KEV4ZWNTdGF0ZSYgZXhlYywKIAogICAgIC8vIDYuIExldCBlbGVtZW50MCBiZSBHZXQoTywgIjAi
KS4KICAgICBKU1ZhbHVlIGVsZW1lbnQwID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoJmV4ZWMsIDAp
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAog
ICAgIC8vIDcuIElmIGVsZW1lbnQwIGlzIHVuZGVmaW5lZCBvciBudWxsLCBsZXQgUiBiZSB0aGUg
ZW1wdHkgU3RyaW5nOyBvdGhlcndpc2UsIGxldCBSIGJlID8gVG9TdHJpbmcoZWxlbWVudDApLgog
ICAgIEpTU3RyaW5nKiByID0gbnVsbHB0cjsKQEAgLTUyMiw4ICs1MDIsNyBAQCBzdGF0aWMgSlNW
YWx1ZSBzbG93Sm9pbihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgICAgIHIgPSBqc0VtcHR5U3RyaW5n
KCZleGVjKTsKICAgICBlbHNlCiAgICAgICAgIHIgPSBlbGVtZW50MC50b1N0cmluZygmZXhlYyk7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAg
ICAgLy8gOC4gTGV0IGsgYmUgMS4KICAgICAvLyA5LiBSZXBlYXQsIHdoaWxlIGsgPCBsZW4KQEAg
LTUzMSw4ICs1MTAsNyBAQCBzdGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihFeGVjU3RhdGUmIGV4ZWMs
CiAgICAgZm9yICh1aW50NjRfdCBrID0gMTsgayA8IGxlbmd0aDsgKytrKSB7CiAgICAgICAgIC8v
IGIuIExldCBlbGVtZW50IGJlID8gR2V0KE8sICEgVG9TdHJpbmcoaykpLgogICAgICAgICBKU1Zh
bHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJmV4ZWMsIEF0b21pY1N0cmluZzo6bnVtYmVyKGspKSk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgICAgIC8v
IGMuIElmIGVsZW1lbnQgaXMgdW5kZWZpbmVkIG9yIG51bGwsIGxldCBuZXh0IGJlIHRoZSBlbXB0
eSBTdHJpbmc7IG90aGVyd2lzZSwgbGV0IG5leHQgYmUgPyBUb1N0cmluZyhlbGVtZW50KS4KICAg
ICAgICAgSlNTdHJpbmcqIG5leHQgPSBudWxscHRyOwpAQCAtNTQyLDE0ICs1MjAsMTIgQEAgc3Rh
dGljIEpTVmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLAogICAgICAgICAgICAgbmV4dCA9
IGpzRW1wdHlTdHJpbmcoJmV4ZWMpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG5leHQg
PSBlbGVtZW50LnRvU3RyaW5nKCZleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICAgICAgLy8gYS4gTGV0IFMg
YmUgdGhlIFN0cmluZyB2YWx1ZSBwcm9kdWNlZCBieSBjb25jYXRlbmF0aW5nIFIgYW5kIHNlcC4K
ICAgICAgICAgLy8gZC4gTGV0IFIgYmUgYSBTdHJpbmcgdmFsdWUgcHJvZHVjZWQgYnkgY29uY2F0
ZW5hdGluZyBTIGFuZCBuZXh0LgogICAgICAgICByID0ganNTdHJpbmcoJmV4ZWMsIHIsIHNlcGFy
YXRvciwgbmV4dCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIH0KICAgICAvLyAxMC4gUmV0dXJuIFIuCiAgICAgcmV0
dXJuIHI7CkBAIC01ODAsOCArNTU2LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGZhc3RKb2lu
KEV4ZWNTdGF0ZQogICAgICAgICBpZiAobGVuZ3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgp
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0
ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgIGF1dG8gZGF0YSA9IGJ1
dHRlcmZseS5jb250aWd1b3VzKCkuZGF0YSgpOwogICAgICAgICBib29sIGhvbGVzS25vd25Ub0Jl
T0sgPSBmYWxzZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7CkBAIC02MDQsOCArNTc5LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4
ZWNTdGF0ZQogICAgICAgICBpZiAobGVuZ3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgpKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwg
c2VwYXJhdG9yLCBsZW5ndGgpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgIGF1dG8gZGF0YSA9IGJ1dHRl
cmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpOwogICAgICAgICBib29sIGhvbGVzS25vd25U
b0JlT0sgPSBmYWxzZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7CkBAIC02MjcsMTUgKzYwMSwxMiBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgZmFzdEpv
aW4oRXhlY1N0YXRlCiAKIGdlbmVyYWxDYXNlOgogICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihz
dGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldElu
ZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgam9pbmVyLmFwcGVuZChzdGF0ZSwg
ZWxlbWVudCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIGpvaW5lci5qb2luKHN0YXRl
KTsKIH0KQEAgLTY1Niw4ICs2MjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAKICAgICAvLyAyLiBMZXQgbGVuIGJlID8gVG9MZW5ndGgoPyBHZXQoTywgImxl
bmd0aCIpKS4KICAgICBkb3VibGUgbGVuZ3RoID0gdG9MZW5ndGgoZXhlYywgdGhpc09iamVjdCk7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgLy8gMy4gSWYgc2VwYXJhdG9yIGlzIHVuZGVmaW5l
ZCwgbGV0IHNlcGFyYXRvciBiZSB0aGUgc2luZ2xlLWVsZW1lbnQgU3RyaW5nICIsIi4KICAgICBK
U1ZhbHVlIHNlcGFyYXRvclZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC02NjgsOCArNjM4
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAg
ICAgdWludDY0X3QgbGVuZ3RoNjQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoKTsKICAg
ICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxkb3VibGU+KGxlbmd0aDY0KSA9PSBsZW5ndGgp
OwogICAgICAgICAgICAgSlNTdHJpbmcqIGpzU2VwYXJhdG9yID0ganNTaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoZXhlYywgY29tbWEpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKIAogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzbG93Sm9pbigqZXhl
YywgdGhpc09iamVjdCwganNTZXBhcmF0b3IsIGxlbmd0aDY0KSk7CiAgICAgICAgIH0KQEAgLTY4
MSw4ICs2NTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAK
ICAgICAvLyA0LiBMZXQgc2VwIGJlID8gVG9TdHJpbmcoc2VwYXJhdG9yKS4KICAgICBKU1N0cmlu
ZyoganNTZXBhcmF0b3IgPSBzZXBhcmF0b3JWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogCiAgICAgaWYgKFVOTElLRUxZKGxlbmd0aCA+IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSB8fCAhY2FuVXNlRmFzdEpvaW4odGhpc09iamVjdCkpKSB7
CiAgICAgICAgIHVpbnQ2NF90IGxlbmd0aDY0ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0
aCk7CkBAIC03MDcsOCArNjc1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlz
T2JqKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAg
aWYgKGxlbmd0aCA9PSAwKSB7CkBAIC03MTYsOCArNjgzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIHJlc3VsdCA9IHRoaXNPYmotPmdldChleGVjLCBsZW5ndGgg
LSAxKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBpZiAoIXRo
aXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4
ZWMsIGxlbmd0aCAtIDEpKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC03NDMsOCArNzA5
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIGlmICgh
dGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGV4ZWMtPmFyZ3VtZW50
Q291bnQoKTsgbisrKSB7CiAgICAgICAgIC8vIENoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93OyB3
aGVyZSBzYWZlIHdlIGNhbiBkbyBhIGZhc3QgcHV0IGJ5IGluZGV4LgpAQCAtNzU1LDggKzcyMCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAg
IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBK
U1ZhbHVlKHN0YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90
PihuKSkudG9XVEZTdHJpbmcoZXhlYykpOwogICAgICAgICAgICAgdGhpc09iai0+bWV0aG9kVGFi
bGUoKS0+cHV0KHRoaXNPYmosIGV4ZWMsIHByb3BlcnR5TmFtZSwgZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQobiksIHNsb3QpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICB9CiAgICAgCiAgICAgSlNWYWx1ZSBuZXdMZW5ndGgoc3RhdGljX2Nhc3Q8aW50
NjRfdD4obGVuZ3RoKSArIHN0YXRpY19jYXN0PGludDY0X3Q+KGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSkpOwpAQCAtNzc0LDggKzczOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmplY3QpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAKICAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPmluZGV4aW5nVHlwZSgp
KSB7CiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKQEAgLTgxNSwyOSAr
Nzc4LDI0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBm
b3IgKHVuc2lnbmVkIGxvd2VyID0gMDsgbG93ZXIgPCBtaWRkbGU7IGxvd2VyKyspIHsKICAgICAg
ICAgdW5zaWduZWQgdXBwZXIgPSBsZW5ndGggLSBsb3dlciAtIDE7CiAgICAgICAgIGJvb2wgbG93
ZXJFeGlzdHMgPSB0aGlzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBsb3dlcik7Ci0gICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgSlNWYWx1ZSBsb3dlclZhbHVlOwog
ICAgICAgICBpZiAobG93ZXJFeGlzdHMpIHsKICAgICAgICAgICAgIGxvd2VyVmFsdWUgPSB0aGlz
T2JqZWN0LT5nZXQoZXhlYywgbG93ZXIpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIHVwcGVyRXhpc3RzID0g
dGhpc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgdXBwZXIpOwotICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIEpTVmFsdWUgdXBwZXJWYWx1ZTsKICAgICAgICAgaWYg
KHVwcGVyRXhpc3RzKSB7CiAgICAgICAgICAgICB1cHBlclZhbHVlID0gdGhpc09iamVjdC0+Z2V0
KGV4ZWMsIHVwcGVyKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHVwcGVyRXhpc3RzKSB7CiAgICAgICAgICAg
ICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGxvd2VyLCB1cHBlclZhbHVlLCB0
cnVlKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAg
IH0gZWxzZSBpZiAoIXRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlC
eUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGxvd2VyKSkgewogICAgICAgICAgICAgaWYgKCFzY29w
ZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKQEAgLTg0Niw4
ICs4MDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAg
ICAgICAgaWYgKGxvd2VyRXhpc3RzKSB7CiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXRCeUlu
ZGV4SW5saW5lKGV4ZWMsIHVwcGVyLCBsb3dlclZhbHVlLCB0cnVlKTsKLSAgICAgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXNPYmpl
Y3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4
ZWMsIHVwcGVyKSkgewogICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAg
ICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmFi
bGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKQEAgLTg2NSw4ICs4MjIsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgaWYgKCF0aGlzT2JqKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAg
ICBKU1ZhbHVlIHJlc3VsdDsKICAgICBpZiAobGVuZ3RoID09IDApIHsKQEAgLTg3NSw4ICs4MzEs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgfSBlbHNl
IHsKICAgICAgICAgcmVzdWx0ID0gdGhpc09iai0+Z2V0SW5kZXgoZXhlYywgMCk7CiAgICAgICAg
IHNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTaGlmdD4oZXhlYywgdGhpc09iaiwgMCwgMSwg
MCwgbGVuZ3RoKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBw
dXRMZW5ndGgoZXhlYywgdGhpc09iaiwganNOdW1iZXIobGVuZ3RoIC0gMSkpOwogICAgIH0KICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC04OTEsOCArODQ2LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIGlmICghdGhpc09iaikK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogCiAgICAgdW5zaWduZWQgYmVnaW4gPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9y
RW5kKGV4ZWMsIDAsIGxlbmd0aCk7CiAgICAgdW5zaWduZWQgZW5kID0gYXJndW1lbnRDbGFtcGVk
SW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgsIGxlbmd0aCk7CkBAIC05MTIsMTUg
Kzg2NiwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAg
ICAgIHJlc3VsdCA9IHNwZWNpZXNSZXN1bHQuc2Vjb25kOwogICAgIGVsc2UgewogICAgICAgICBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIGVuZCAtIGJlZ2luKTsK
LSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KIAogICAgIHVuc2lnbmVk
IG4gPSAwOwogICAgIGZvciAodW5zaWduZWQgayA9IGJlZ2luOyBrIDwgZW5kOyBrKyssIG4rKykg
ewogICAgICAgICBKU1ZhbHVlIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrKTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBpZiAodikKICAgICAgICAg
ICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgbiwgdik7CiAgICAgfQpAQCAtOTM5LDgg
Kzg5MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBp
ZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKIAogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7CiAgICAg
ICAgIHN0ZDo6cGFpcjxTcGVjaWVzQ29uc3RydWN0UmVzdWx0LCBKU09iamVjdCo+IHNwZWNpZXNS
ZXN1bHQgPSBzcGVjaWVzQ29uc3RydWN0QXJyYXkoZXhlYywgdGhpc09iaiwgMCk7CkBAIC05NTIs
OCArOTAzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAg
ICAgICAgICAgcmVzdWx0ID0gc3BlY2llc1Jlc3VsdC5zZWNvbmQ7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsK
LSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICB9
CiAKICAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIHJlc3VsdCwgMCk7CkBAIC05ODgsMTMgKzkzOCwx
MSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBkZWxldGVDb3VudDsgKytr
KSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09i
aiwgayArIGJlZ2luKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghdikpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIHJlc3VsdC0+cHV0QnlJ
bmRleElubGluZShleGVjLCBrLCB2LCB0cnVlKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgcmVzdWx0ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZCh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZUZvcklu
ZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoVW5kZWNpZGVkKSwgZGVsZXRlQ291
bnQpOwpAQCAtMTAwMyw4ICs5NTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7
IGsgPCBkZWxldGVDb3VudDsgKytrKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0
UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayArIGJlZ2luKTsKLSAgICAgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICAgICAgICAgIGlm
IChVTkxJS0VMWSghdikpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIHJlc3VsdC0+aW5pdGlhbGl6ZUluZGV4KHZtLCBrLCB2KTsKQEAgLTEwMTUsMTcgKzk2
MiwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgdW5z
aWduZWQgYWRkaXRpb25hbEFyZ3MgPSBzdGQ6Om1heDxpbnQ+KGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSAtIDIsIDApOwogICAgIGlmIChhZGRpdGlvbmFsQXJncyA8IGRlbGV0ZUNvdW50KSB7CiAgICAg
ICAgIHNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTcGxpY2U+KGV4ZWMsIHRoaXNPYmosIGJl
Z2luLCBkZWxldGVDb3VudCwgYWRkaXRpb25hbEFyZ3MsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB9IGVsc2UgaWYgKGFkZGl0aW9uYWxBcmdzID4gZGVs
ZXRlQ291bnQpIHsKICAgICAgICAgdW5zaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU3BsaWNl
PihleGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxBcmdzLCBsZW5n
dGgpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogICAgIGZvciAo
dW5zaWduZWQgayA9IDA7IGsgPCBhZGRpdGlvbmFsQXJnczsgKytrKSB7CiAgICAgICAgIHRoaXNP
YmotPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgayArIGJlZ2luLCBleGVjLT51bmNoZWNrZWRBcmd1
bWVudChrICsgMiksIHRydWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgfQogICAgIAogICAgIHNldExlbmd0aChleGVjLCB0aGlzT2JqLCBsZW5ndGggLSBkZWxldGVD
b3VudCArIGFkZGl0aW9uYWxBcmdzKTsKQEAgLTEwNDIsMTkgKzk4NiwxNiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgaWYgKCF0aGlzT2JqKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAg
ICB1bnNpZ25lZCBuckFyZ3MgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYgKG5yQXJn
cykgewogICAgICAgICB1bnNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTaGlmdD4oZXhlYywg
dGhpc09iaiwgMCwgMCwgbnJBcmdzLCBsZW5ndGgpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgfQogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBuckFyZ3M7ICsr
aykgewogICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGssIGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KGspLCB0cnVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIH0KICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGxlbmd0aCArIG5yQXJn
cyk7CiAgICAgcHV0TGVuZ3RoKGV4ZWMsIHRoaXNPYmosIHJlc3VsdCk7CkBAIC0xMDcxLDIxICsx
MDEyLDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBp
ZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJndW1lbnRDbGFtcGVkSW5k
ZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwogICAgIEpTVmFsdWUgc2VhcmNoRWxl
bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgKytp
bmRleCkgewogICAgICAgICBKU1ZhbHVlIGUgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBp
bmRleCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKCFl
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChKU1ZhbHVlOjpzdHJpY3RFcXVh
bChleGVjLCBzZWFyY2hFbGVtZW50LCBlKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoaW5kZXgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgIH0KIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKQEAg
LTExMjEsMTQgKzEwNTksMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRgogICAgIGRvIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBsZW5ndGgpOwog
ICAgICAgICBKU1ZhbHVlIGUgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBpbmRleCk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKCFlKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBz
ZWFyY2hFbGVtZW50LCBlKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoaW5kZXgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0g
d2hpbGUgKGluZGV4LS0pOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcigt
MSkpOwpAQCAtMTE0MywxOSArMTA3OSwxNiBAQCBzdGF0aWMgYm9vbCBtb3ZlRWxlbWVudHMoRXhl
Y1N0YXRlKiBleGVjCiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc291cmNlLT50cnlHZXRJ
bmRleFF1aWNrbHkoaSk7CiAgICAgICAgICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgICAgICAg
ICB0YXJnZXQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIHRhcmdldE9mZnNldCArIGksIHZhbHVlKTsK
LSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytp
KSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0UHJvcGVydHkoZXhlYywgc291cmNl
LCBpKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZmFsc2UpOwogICAgICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICAg
ICAgdGFyZ2V0LT5wdXREaXJlY3RJbmRleChleGVjLCB0YXJnZXRPZmZzZXQgKyBpLCB2YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
QEAgLTEyMjgsOCArMTE2MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b1AKICAgICBJbmRleGluZ1R5cGUgdHlwZSA9IGZpcnN0QXJyYXktPm1lcmdlSW5kZXhpbmdU
eXBlRm9yQ29weWluZyhzZWNvbmRUeXBlKTsKICAgICBpZiAodHlwZSA9PSBOb25BcnJheSB8fCAh
Zmlyc3RBcnJheS0+Y2FuRmFzdENvcHkodm0sIHNlY29uZEFycmF5KSB8fCBmaXJzdEFycmF5U2l6
ZSArIHNlY29uZEFycmF5U2l6ZSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7CiAgICAgICAg
IEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgZmly
c3RBcnJheVNpemUgKyBzZWNvbmRBcnJheVNpemUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKIAogICAgICAgICBpZiAoIW1vdmVFbGVtZW50cyhleGVjLCB2bSwgcmVzdWx0LCAwLCBm
aXJzdEFycmF5LCBmaXJzdEFycmF5U2l6ZSkKICAgICAgICAgICAgIHx8ICFtb3ZlRWxlbWVudHMo
ZXhlYywgdm0sIHJlc3VsdCwgZmlyc3RBcnJheVNpemUsIHNlY29uZEFycmF5LCBzZWNvbmRBcnJh
eVNpemUpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDggKzUyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
cwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVl
IGJvb2xlYW4gPSBqc0Jvb2xlYW4oZXhlYy0+YXJndW1lbnQoMCkudG9Cb29sZWFuKGV4ZWMpKTsK
ICAgICBTdHJ1Y3R1cmUqIGJvb2xlYW5TdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVh
dGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1
bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmJvb2xlYW5PYmplY3RTdHJ1
Y3R1cmUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJv
b2xlYW5PYmplY3Q6OmNyZWF0ZSh2bSwgYm9vbGVhblN0cnVjdHVyZSk7CiAgICAgb2JqLT5zZXRJ
bnRlcm5hbFZhbHVlKHZtLCBib29sZWFuKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9i
aik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuaAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDggKzg3LDcgQEAgaW5s
aW5lIGJvb2wgb3BJbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdQogICAgICAgICByZXR1cm4gYmFz
ZU9iai0+aGFzUHJvcGVydHkoZXhlYywgaSk7CiAKICAgICBhdXRvIHByb3BlcnR5ID0gcHJvcE5h
bWUudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7
CiAgICAgcmV0dXJuIGJhc2VPYmotPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5KTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJl
dmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdo
dCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNywgMjAxMyBBcHBsZSBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3
LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOTMsOCAr
MTkzLDcgQEAgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZQogCiAgICAg
Ly8gSW5zZXJ0IHRoZSBnaXZlbiBzb3VyY2UgY29kZSB0byB0aGUgTW9kdWxlTG9hZGVyIHJlZ2lz
dHJ5IGFzIHRoZSBmZXRjaGVkIHJlZ2lzdHJ5IGVudHJ5LgogICAgIGdsb2JhbE9iamVjdC0+bW9k
dWxlTG9hZGVyKCktPnByb3ZpZGUoZXhlYywga2V5LCBKU01vZHVsZUxvYWRlcjo6U3RhdHVzOjpG
ZXRjaCwgc291cmNlLnZpZXcoKS50b1N0cmluZygpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZShleGVjLCBnbG9iYWxP
YmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHJlamVjdFByb21pc2UoZXhl
YywgZ2xvYmFsT2JqZWN0KSk7CiAKICAgICByZXR1cm4gbG9hZEFuZEV2YWx1YXRlTW9kdWxlKGxv
Y2ssIGV4ZWMsIGdsb2JhbE9iamVjdCwga2V5LCBqc1VuZGVmaW5lZCgpLCBpbml0aWF0b3IpOwog
fQpAQCAtMjMzLDggKzIzMiw3IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkTW9kdWxlKEV4ZWNT
dGF0ZSoKICAgICAvLyBJbnNlcnQgdGhlIGdpdmVuIHNvdXJjZSBjb2RlIHRvIHRoZSBNb2R1bGVM
b2FkZXIgcmVnaXN0cnkgYXMgdGhlIGZldGNoZWQgcmVnaXN0cnkgZW50cnkuCiAgICAgLy8gRklY
TUU6IEludHJvZHVjZSBKU1NvdXJjZUNvZGUgb2JqZWN0IHRvIHdyYXAgYXJvdW5kIHRoaXMgc291
cmNlLgogICAgIGdsb2JhbE9iamVjdC0+bW9kdWxlTG9hZGVyKCktPnByb3ZpZGUoZXhlYywga2V5
LCBKU01vZHVsZUxvYWRlcjo6U3RhdHVzOjpGZXRjaCwgc291cmNlLnZpZXcoKS50b1N0cmluZygp
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
cmVqZWN0UHJvbWlzZShleGVjLCBnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHJlamVjdFByb21pc2UoZXhlYywgZ2xvYmFsT2JqZWN0KSk7CiAKICAgICByZXR1
cm4gbG9hZE1vZHVsZShsb2NrLCBleGVjLCBnbG9iYWxPYmplY3QsIGtleSwganNVbmRlZmluZWQo
KSwgaW5pdGlhdG9yKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bnNvbGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbnNvbGVPYmplY3QuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db25zb2xlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAz
LDggKzIwMyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGJvb2wg
Y29uZGl0aW9uID0gZXhlYy0+YXJndW1lbnQoMCkudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAKICAgICBpZiAoY29uZGl0aW9uKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMjQwLDggKzIzOSw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcm
IHRpdGxlKHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+
YXJndW1lbnQoMCkpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgY2xpZW50LT5wcm9m
aWxlKGV4ZWMsIHRpdGxlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwpAQCAtMjYyLDggKzI2MCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnMKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcmIHRpdGxlKHZhbHVlVG9TdHJpbmdX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogCiAgICAgY2xpZW50LT5wcm9maWxlRW5kKGV4ZWMsIHRpdGxlKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMjg0LDggKzI4
MSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICB9CiAK
ICAgICBjb25zdCBTdHJpbmcmIHRpdGxlKHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxs
Q2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
CiAgICAgY2xpZW50LT50YWtlSGVhcFNuYXBzaG90KGV4ZWMsIHRpdGxlKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMzExLDggKzMwNyw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgdGl0bGUgPSBBU0NJ
SUxpdGVyYWwoImRlZmF1bHQiKTsKICAgICBlbHNlIHsKICAgICAgICAgdGl0bGUgPSB2YWx1ZU9y
RGVmYXVsdExhYmVsU3RyaW5nKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KIAogICAgIGNsaWVudC0+dGltZShleGVjLCB0
aXRsZSk7CkBAIC0zMzIsOCArMzI3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29ucwogICAgICAgICB0aXRsZSA9ICBBU0NJSUxpdGVyYWwoImRlZmF1bHQiKTsKICAg
ICBlbHNlIHsKICAgICAgICAgdGl0bGUgPSB2YWx1ZU9yRGVmYXVsdExhYmVsU3RyaW5nKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgIH0KIAogICAgIGNsaWVudC0+dGltZUVuZChleGVjLCB0aXRsZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDExLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAx
MSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCkBAIC0xNjgsOCArMTY4LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0YXRl
KiBleGVjLAogICAgICAgICB2YWx1ZSA9IG1pbGxpc2Vjb25kc0Zyb21Db21wb25lbnRzKGV4ZWMs
IGFyZ3MsIFdURjo6TG9jYWxUaW1lKTsKIAogICAgIFN0cnVjdHVyZSogZGF0ZVN0cnVjdHVyZSA9
IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIG5ld1Rhcmdl
dCwgZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCkpOwotICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgcmV0dXJuIERhdGVJbnN0YW5jZTo6Y3Jl
YXRlKHZtLCBkYXRlU3RydWN0dXJlLCB2YWx1ZSk7CiB9CkBAIC0yMDYsOCArMjA1LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUGFyc2UoRQogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFN0
cmluZyBkYXRlU3RyID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihwYXJzZURhdGUodm0sIGRhdGVTdHIpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDYz
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjE1LDggKzYxNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnUKIAogICAgIEpTVmFsdWUgaGludFZhbHVlID0gZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7CiAgICAgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSB0eXBlID0gdG9QcmVm
ZXJyZWRQcmltaXRpdmVUeXBlKGV4ZWMsIGhpbnRWYWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
CiAgICAgaWYgKHR5cGUgPT0gTm9QcmVmZXJlbmNlKQogICAgICAgICB0eXBlID0gUHJlZmVyU3Ry
aW5nOwpAQCAtMTEyOCwxOCArMTEyNywxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KHRoaXNWYWx1ZS50b1RoaXMoZXhlYywgTm90U3Ry
aWN0TW9kZSkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSB0aW1lVmFsdWUgPSBv
YmplY3QtPnRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlck51bWJlcik7Ci0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgaWYgKHRpbWVWYWx1ZS5pc051bWJlcigpICYmICEodGltZVZhbHVlLmlzSW50MzIoKSB8
fCBzdGQ6OmlzZmluaXRlKHRpbWVWYWx1ZS5hc0RvdWJsZSgpKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogCiAgICAgSlNWYWx1ZSB0b0lTT1ZhbHVlID0gb2Jq
ZWN0LT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dG9JU09TdHJpbmcpOwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUg
PSBnZXRDYWxsRGF0YSh0b0lTT1ZhbHVlLCBjYWxsRGF0YSk7CkBAIC0xMTQ3LDggKzExNDMsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoInRvSVNPU3RyaW5n
IGlzIG5vdCBhIGZ1bmN0aW9uIikpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMs
IGFzT2JqZWN0KHRvSVNPVmFsdWUpLCBjYWxsVHlwZSwgY2FsbERhdGEsIG9iamVjdCwgZXhlYy0+
ZW1wdHlMaXN0KCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGlmIChyZXN1bHQuaXNPYmplY3Qo
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgidG9JU09TdHJpbmcgZGlkIG5vdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUiKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIw
NjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSW50ZXJwcmV0ZXIKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhl
Yy0+YXJndW1lbnQoMCkgOiBqc1VuZGVmaW5lZCgpOwogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1
Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBl
eGVjLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xv
YmFsT2JqZWN0KCktPmVycm9yU3RydWN0dXJlKCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0
cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3Bw
CShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
ckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw3IEBAIFN0cmluZyBF
cnJvckluc3RhbmNlOjpzYW5pdGl6ZWRUb1N0cmluZygKICAgICAgICAgbmFtZVN0cmluZyA9IEFT
Q0lJTGl0ZXJhbCgiRXJyb3IiKTsKICAgICBlbHNlIHsKICAgICAgICAgbmFtZVN0cmluZyA9IG5h
bWVWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFN0cmluZygpKTsKICAgICB9CiAKICAgICBK
U1ZhbHVlIG1lc3NhZ2VWYWx1ZTsKQEAgLTIwMSw4ICsyMDAsNyBAQCBTdHJpbmcgRXJyb3JJbnN0
YW5jZTo6c2FuaXRpemVkVG9TdHJpbmcoCiAgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBTdHJpbmco
KTsKICAgICBlbHNlIHsKICAgICAgICAgbWVzc2FnZVN0cmluZyA9IG1lc3NhZ2VWYWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIFN0cmluZygpKTsKICAgICB9CiAKICAgICBpZiAoIW5hbWVTdHJp
bmcubGVuZ3RoKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDgg
Kzg1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlcnJvclByb3RvRgogCiAgICAg
Ly8gMy4gTGV0IG5hbWUgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgIm5hbWUiLgogICAgIEpTVmFsdWUgbmFtZSA9
IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKIAogICAgIC8vIDQuIElmIG5hbWUgaXMgdW5kZWZpbmVkLCB0aGVuIGxl
dCBuYW1lIGJlICJFcnJvciI7IGVsc2UgbGV0IG5hbWUgYmUgVG9TdHJpbmcobmFtZSkuCiAgICAg
U3RyaW5nIG5hbWVTdHJpbmc7CkBAIC05NCwxNCArOTMsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBlcnJvclByb3RvRgogICAgICAgICBuYW1lU3RyaW5nID0gQVNDSUlMaXRlcmFs
KCJFcnJvciIpOwogICAgIGVsc2UgewogICAgICAgICBuYW1lU3RyaW5nID0gbmFtZS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICB9CiAKICAgICAvLyA1LiBMZXQgbXNnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUg
W1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50ICJtZXNzYWdlIi4KICAg
ICBKU1ZhbHVlIG1lc3NhZ2UgPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1l
cygpLm1lc3NhZ2UpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICAvLyAoc2ljKQogICAg
IC8vIDYuIElmIG1zZyBpcyB1bmRlZmluZWQsIHRoZW4gbGV0IG1zZyBiZSB0aGUgZW1wdHkgU3Ry
aW5nOyBlbHNlIGxldCBtc2cgYmUgVG9TdHJpbmcobXNnKS4KQEAgLTExMSw4ICsxMDgsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GCiAgICAgICAgIG1lc3NhZ2VT
dHJpbmcgPSBTdHJpbmcoKTsKICAgICBlbHNlIHsKICAgICAgICAgbWVzc2FnZVN0cmluZyA9IG1l
c3NhZ2UudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgfQogCiAgICAgLy8gOC4gSWYgbmFtZSBpcyB0aGUgZW1wdHkgU3Ry
aW5nLCByZXR1cm4gbXNnLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhj
ZXB0aW9uU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb25TY29wZS5oCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGNlcHRpb25TY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3
MCwxMiBAQCBwcm90ZWN0ZWQ6CiB9OwogICAgIAogI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05f
U0NPUEVfVkVSSUZJQ0FUSU9OKQotICAgIAorCisjZGVmaW5lIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGVfXywgdmFsdWVfXykgZG8geyBcCisgICAgICAgIGlmIChVTkxJS0VMWSgoc2NvcGVfXyku
ZXhjZXB0aW9uKCkpKSBcCisgICAgICAgICAgICByZXR1cm4gdmFsdWVfXzsgXAorICAgIH0gd2hp
bGUgKGZhbHNlKQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEV4Y2VwdGlvblNj
b3BlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI2LDggKzEyNiw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RGdW5jdGlvblNraXBwaW5nRXZh
bEUKICAgICB9CiAKICAgICBTdHJ1Y3R1cmUqIHN1YmNsYXNzU3RydWN0dXJlID0gSW50ZXJuYWxG
dW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgbmV3VGFyZ2V0LCBnbG9iYWxP
YmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwg
ZnVuY3Rpb24sIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGUoKSwgc3ViY2xhc3NTdHJ1Y3R1cmUp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50
c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTIyOCw4ICsyMjgsNyBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0Fy
Z3VtCiAgICAgICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHRoaXNPYmpl
Y3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGdldChleGVjLCBpICsgb2Zmc2V0
KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzcsOCArNzcsNyBAQCBKU1ZhbHVlIGNhbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIEZJ
WE1FOiBTb21lIGNhbGxlcnMgbWF5IGludm9rZSBnZXQoKSB3aXRob3V0IGNoZWNraW5nIGZvciBh
biBleGNlcHRpb24gZmlyc3QuCiAgICAgLy8gV2Ugd29yayBhcm91bmQgdGhhdCBieSBjaGVja2lu
ZyBoZXJlLgotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybiBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKSk7CiAKICAgICBKU09iamVjdCogZ2V0
dGVyID0ganNDYXN0PEdldHRlclNldHRlcio+KGdldHRlclNldHRlciktPmdldHRlcigpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHJldmlz
aW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NSw4ICsyNDUsNyBAQCBBTFdBWVNfSU5MSU5FIHVpbnQz
Ml90IGpzTWFwSGFzaChFeGVjU3RhCiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKICAgICAg
ICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHZhbHVlKTsKICAgICAgICAgY29uc3QgU3Ry
aW5nJiB3dGZTdHJpbmcgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBVSU5UX01BWCk7CiAgICAgICAgIHJldHVy
biB3dGZTdHJpbmcuaW1wbCgpLT5oYXNoKCk7CiAgICAgfQogCkBAIC0zMzcsOCArMzM2LDcgQEAg
cHVibGljOgogICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAKICAgICAgICAgbWFr
ZUFuZFNldE5ld0J1ZmZlcihleGVjLCB2bSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICAgICAgbV9oZWFkLnNldCh2bSwgdGhpcywgSGFz
aE1hcEJ1Y2tldFR5cGU6OmNyZWF0ZSh2bSkpOwogICAgICAgICBtX3RhaWwuc2V0KHZtLCB0aGlz
LCBIYXNoTWFwQnVja2V0VHlwZTo6Y3JlYXRlKHZtKSk7CkBAIC0zNzYsOCArMzc0LDcgQEAgcHVi
bGljOgogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
ICAgIGtleSA9IG5vcm1hbGl6ZU1hcEtleShrZXkpOwogICAgICAgICB1aW50MzJfdCBoYXNoID0g
anNNYXBIYXNoKGV4ZWMsIHZtLCBrZXkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICByZXR1cm4gZmluZEJ1Y2tldChl
eGVjLCBrZXksIGhhc2gpOwogICAgIH0KIApAQCAtNDA4LDggKzQwNSw3IEBAIHB1YmxpYzoKIAog
ICAgICAgICBjb25zdCB1aW50MzJfdCBtYXNrID0gbV9jYXBhY2l0eSAtIDE7CiAgICAgICAgIHVp
bnQzMl90IGluZGV4ID0ganNNYXBIYXNoKGV4ZWMsIHZtLCBrZXkpICYgbWFzazsKLSAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgSGFzaE1h
cEJ1Y2tldFR5cGUqKiBidWZmZXIgPSB0aGlzLT5idWZmZXIoKTsKICAgICAgICAgSGFzaE1hcEJ1
Y2tldFR5cGUqIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CiAgICAgICAgIHdoaWxlICghaXNFbXB0
eShidWNrZXQpKSB7CkBAIC01NzAsOCArNTY2LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBpZiAo
bV9jYXBhY2l0eSAhPSBvbGRDYXBhY2l0eSkgewogICAgICAgICAgICAgbWFrZUFuZFNldE5ld0J1
ZmZlcihleGVjLCB2bSk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2J1
ZmZlci5nZXQoKS0+cmVzZXQobV9jYXBhY2l0eSk7CiAgICAgICAgICAgICBhc3NlcnRCdWZmZXJJ
c0VtcHR5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAJKHJldmlzaW9u
IDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODcsOCArODcsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGluc3BlY3RvckluCiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQo
MCk7CiAgICAgU3RyaW5nIHZhbHVlID0gdGFyZ2V0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGRhdGFMb2codmFsdWUsICJcbiIpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxG
dW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA3LCAyMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDctMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTEzLDE0ICsxMTMs
MTIgQEAgU3RydWN0dXJlKiBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbAogCiAgICAgICAg
ICAgICAvLyBOb3RlLCBSZWZsZWN0LmNvbnN0cnVjdCBtaWdodCBjYXVzZSB0aGUgcHJvZmlsZSB0
byBjaHVybiBidXQgd2UgZG9uJ3QgY2FyZS4KICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBl
VmFsdWUgPSBuZXdUYXJnZXQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5
cGUpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICAgICAgaWYgKEpTT2JqZWN0KiBwcm90b3R5cGUg
PSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4ocHJvdG90eXBlVmFsdWUpKQogICAgICAgICAgICAg
ICAgIHJldHVybiB0YXJnZXRGdW5jdGlvbi0+cmFyZURhdGEodm0pLT5jcmVhdGVJbnRlcm5hbEZ1
bmN0aW9uQWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKHZtLCBwcm90b3R5cGUsIGJhc2VDbGFz
cyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZVZhbHVl
ID0gbmV3VGFyZ2V0LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsK
LSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmIChKU09iamVjdCogcHJvdG90eXBlID0ganNE
eW5hbWljQ2FzdDxKU09iamVjdCo+KHByb3RvdHlwZVZhbHVlKSkgewogICAgICAgICAgICAgICAg
IC8vIFRoaXMgb25seSBoYXBwZW5zIGlmIHNvbWVvbmUgUmVmbGVjdC5jb25zdHJ1Y3RzIG91ciBi
dWlsdGluIGNvbnN0cnVjdG9yIHdpdGggYW5vdGhlciBidWlsdGluIGNvbnN0cnVjdG9yIGFzIHRo
ZSBuZXcudGFyZ2V0LgogICAgICAgICAgICAgICAgIC8vIFRodXMsIHdlIGRvbid0IGNhcmUgYWJv
dXQgdGhlIGNvc3Qgb2YgbG9va2luZyB1cCB0aGUgc3RydWN0dXJlIGZyb20gb3VyIGhhc2ggdGFi
bGUgZXZlcnkgdGltZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxD
b2xsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bENvbGxhdG9yLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDggKzE3
Miw3IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgKICAgICAvLyAz
LiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMp
LgogICAgIGF1dG8gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qoc3Rh
dGUsIGxvY2FsZXMpOwogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMp
LgotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgLy8gNS4gSWYg
b3B0aW9ucyBpcyB1bmRlZmluZWQsIHRoZW4KICAgICBKU09iamVjdCogb3B0aW9uczsKQEAgLTE4
NCwxNSArMTgzLDEzIEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgK
ICAgICAgICAgLy8gYS4gTGV0IG9wdGlvbnMgYmUgVG9PYmplY3Qob3B0aW9ucykuCiAgICAgICAg
IG9wdGlvbnMgPSBvcHRpb25zVmFsdWUudG9PYmplY3QoJnN0YXRlKTsKICAgICAgICAgLy8gYi4g
UmV0dXJuSWZBYnJ1cHQob3B0aW9ucykuCi0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CiAgICAgfQogCiAgICAgLy8gNy4gTGV0IHUgYmUgR2V0T3B0aW9u
KG9wdGlvbnMsICJ1c2FnZSIsICJzdHJpbmciLCDCqyJzb3J0IiwgInNlYXJjaCLCuywgInNvcnQi
KS4KICAgICBTdHJpbmcgdXNhZ2VTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRp
b25zLCB2bS5wcm9wZXJ0eU5hbWVzLT51c2FnZSwgeyAic29ydCIsICJzZWFyY2giIH0sICJ1c2Fn
ZSBtdXN0IGJlIGVpdGhlciBcInNvcnRcIiBvciBcInNlYXJjaFwiIiwgInNvcnQiKTsKICAgICAv
LyA4LiBSZXR1cm5JZkFicnVwdCh1KS4KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKICAgICAvLyA5LiBTZXQgY29sbGF0b3IuW1t1c2FnZV1dIHRvIHUuCiAgICAgaWYgKHVz
YWdlU3RyaW5nID09ICJzb3J0IikKICAgICAgICAgbV91c2FnZSA9IFVzYWdlOjpTb3J0OwpAQCAt
MjE3LDggKzIxNCw3IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgK
ICAgICAvLyAxMy4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJsb2NhbGVNYXRj
aGVyIiwgInN0cmluZyIsIMKrImxvb2t1cCIsICJiZXN0IGZpdCLCuywgImJlc3QgZml0IikuCiAg
ICAgU3RyaW5nIG1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5w
cm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7ICJsb29rdXAiLCAiYmVzdCBmaXQiIH0sICJs
b2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwg
ImJlc3QgZml0Iik7CiAgICAgLy8gMTQuIFJldHVybklmQWJydXB0KG1hdGNoZXIpLgotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIC8vIDE1LiBTZXQgb3B0LltbbG9j
YWxlTWF0Y2hlcl1dIHRvIG1hdGNoZXIuCiAgICAgb3B0LmFkZChBU0NJSUxpdGVyYWwoImxvY2Fs
ZU1hdGNoZXIiKSwgbWF0Y2hlcik7CiAKQEAgLTIzNywxNiArMjMzLDE0IEBAIHZvaWQgSW50bENv
bGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgKICAgICAgICAgU3RyaW5nIG51bWVyaWNTdHJp
bmc7CiAgICAgICAgIGJvb2wgdXNlc0ZhbGxiYWNrOwogICAgICAgICBib29sIG51bWVyaWMgPSBp
bnRsQm9vbGVhbk9wdGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bnVtZXJp
YywgdXNlc0ZhbGxiYWNrKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKICAgICAgICAgaWYgKCF1c2VzRmFsbGJhY2spCiAgICAgICAgICAgICBudW1l
cmljU3RyaW5nID0gQVNDSUlMaXRlcmFsKG51bWVyaWMgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICAg
ICAgICAgb3B0LmFkZChBU0NJSUxpdGVyYWwoImtuIiksIG51bWVyaWNTdHJpbmcpOwogICAgIH0K
ICAgICB7CiAgICAgICAgIFN0cmluZyBjYXNlRmlyc3QgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRl
LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYXNlRmlyc3QsIHsgInVwcGVyIiwgImxvd2Vy
IiwgImZhbHNlIiB9LCAiY2FzZUZpcnN0IG11c3QgYmUgZWl0aGVyIFwidXBwZXJcIiwgXCJsb3dl
clwiLCBvciBcImZhbHNlXCIiLCBudWxscHRyKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgb3B0LmFkZChBU0NJSUxpdGVyYWwoImtm
IiksIGNhc2VGaXJzdCk7CiAgICAgfQogCkBAIC0yODYsOCArMjgwLDcgQEAgdm9pZCBJbnRsQ29s
bGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihFeAogICAgIC8vIDI0LiBMZXQgcyBiZSBHZXRPcHRp
b24ob3B0aW9ucywgInNlbnNpdGl2aXR5IiwgInN0cmluZyIsIMKrImJhc2UiLCAiYWNjZW50Iiwg
ImNhc2UiLCAidmFyaWFudCLCuywgdW5kZWZpbmVkKS4KICAgICBTdHJpbmcgc2Vuc2l0aXZpdHlT
dHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVz
LT5zZW5zaXRpdml0eSwgeyAiYmFzZSIsICJhY2NlbnQiLCAiY2FzZSIsICJ2YXJpYW50IiB9LCAi
c2Vuc2l0aXZpdHkgbXVzdCBiZSBlaXRoZXIgXCJiYXNlXCIsIFwiYWNjZW50XCIsIFwiY2FzZVwi
LCBvciBcInZhcmlhbnRcIiIsIG51bGxwdHIpOwogICAgIC8vIDI1LiBSZXR1cm5JZkFicnVwdChz
KS4KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAvLyAyNi4gSWYg
cyBpcyB1bmRlZmluZWQsIHRoZW4KICAgICAvLyBhLiBJZiB1IGlzICJzb3J0IiwgdGhlbiBsZXQg
cyBiZSAidmFyaWFudCIuCiAgICAgLy8gYi4gRWxzZQpAQCAtMzExLDggKzMwNCw3IEBAIHZvaWQg
SW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgKICAgICBpZiAodXNlc0ZhbGxiYWNr
KQogICAgICAgICBpZ25vcmVQdW5jdHVhdGlvbiA9IGZhbHNlOwogICAgIC8vIDI5LiBSZXR1cm5J
ZkFicnVwdChpcCkuCi0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAg
Ly8gMzAuIFNldCBjb2xsYXRvci5bW2lnbm9yZVB1bmN0dWF0aW9uXV0gdG8gaXAuCiAgICAgbV9p
Z25vcmVQdW5jdHVhdGlvbiA9IGlnbm9yZVB1bmN0dWF0aW9uOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yQ29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAodGhldGFsZWNy
YWZ0ZXJAZ21haWwuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDE1IFN1a29sc2FrIFNha3NodXdv
bmcgKHN1a29sc2FrQGdtYWlsLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTkwLDggKzkxLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwog
ICAgIC8vIDIuIExldCBjb2xsYXRvciBiZSBPcmRpbmFyeUNyZWF0ZUZyb21Db25zdHJ1Y3Rvcihu
ZXdUYXJnZXQsICVDb2xsYXRvclByb3RvdHlwZSUpLgogICAgIC8vIDMuIFJldHVybklmQWJydXB0
KGNvbGxhdG9yKS4KICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246
OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKHN0YXRlLCBzdGF0ZS0+bmV3VGFyZ2V0KCksIGpzQ2Fz
dDxJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSktPmNvbGxhdG9yU3Ry
dWN0dXJlKCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgSW50bENvbGxhdG9yKiBjb2xs
YXRvciA9IEludGxDb2xsYXRvcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChj
b2xsYXRvcik7CiAKQEAgLTE0NCw4ICsxNDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEludGxDb2xsYXRvCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNh
bm9uaWNhbGl6ZUxvY2FsZUxpc3QoKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwogCiAgICAg
Ly8gMi4gUmV0dXJuSWZBYnJ1cHQocmVxdWVzdGVkTG9jYWxlcykuCi0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKIAogICAgIC8vIDMuIFJldHVybiBTdXBwb3J0ZWRMb2NhbGVzKCVDb2xsYXRvciUuW1th
dmFpbGFibGVMb2NhbGVzXV0sIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMpLgogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yUHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
Q29sbGF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MCwxNCArOTAsMTIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SW50bAogICAgIC8vIDUuIExldCBYIGJlIFRvU3RyaW5nKHgpLgogICAgIEpTU3RyaW5nKiB4ID0g
c3RhdGUtPmFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKTsKICAgICAvLyA2LiBSZXR1cm5JZkFi
cnVwdChYKS4KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgLy8gNy4gTGV0IFkgYmUgVG9T
dHJpbmcoeSkuCiAgICAgSlNTdHJpbmcqIHkgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9TdHJpbmco
c3RhdGUpOwogICAgIC8vIDguIFJldHVybklmQWJydXB0KFkpLgotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKICAgICAvLyA5LiBSZXR1cm4gQ29tcGFyZVN0cmluZ3MoY29sbGF0b3IsIFgsIFkpLgog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29sbGF0b3ItPmNvbXBhcmVTdHJpbmdzKCpzdGF0
ZSwgeC0+dmlldyhzdGF0ZSkuZ2V0KCksIHktPnZpZXcoc3RhdGUpLmdldCgpKSk7CkBAIC0xMjQs
OCArMTIyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29sbGF0bwogCiAg
ICAgICAgIC8vIGMuIExldCBiYyBiZSBCb3VuZEZ1bmN0aW9uQ3JlYXRlKEYsIMKrdGhpcyB2YWx1
ZcK7KS4KICAgICAgICAgYm91bmRDb21wYXJlID0gSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUodm0s
IHN0YXRlLCBnbG9iYWxPYmplY3QsIHRhcmdldE9iamVjdCwgY29sbGF0b3IsIG51bGxwdHIsIDIs
IEFTQ0lJTGl0ZXJhbCgiY29tcGFyZSIpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgICAgIC8vIGQuIFNldCBjb2xsYXRvci5bW2JvdW5kQ29tcGFyZV1dIHRvIGJjLgogICAg
ICAgICBjb2xsYXRvci0+c2V0Qm91bmRDb21wYXJlKHZtLCBib3VuZENvbXBhcmUpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVU
aW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDgg
KzIyNSw3IEBAIHN0YXRpYyBKU09iamVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXQKICAgICAg
ICAgb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZleGVjLCBleGVjLmxleGljYWxHbG9i
YWxPYmplY3QoKS0+bnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgpKTsKICAgICBlbHNlIHsK
ICAgICAgICAgSlNPYmplY3QqIG9yaWdpbmFsVG9PYmplY3QgPSBvcmlnaW5hbE9wdGlvbnMudG9P
YmplY3QoJmV4ZWMpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOwogICAgICAgICBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
JmV4ZWMsIG9yaWdpbmFsVG9PYmplY3QpOwogICAgIH0KIApAQCAtMjQyLDI2ICsyNDEsMjIgQEAg
c3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0aW9uc0FueURhdAogICAgIC8vIGlpaS4gUmV0
dXJuSWZBYnJ1cHQodmFsdWUpLgogICAgIC8vIGl2LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVk
LCB0aGVuIGxldCBuZWVkRGVmYXVsdHMgYmUgZmFsc2UuCiAgICAgSlNWYWx1ZSB3ZWVrZGF5ID0g
b3B0aW9ucy0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT53ZWVrZGF5KTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBpZiAoIXdlZWtkYXku
aXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CiAKICAgICBKU1Zh
bHVlIHllYXIgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnllYXIpOwot
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIGlmICgh
eWVhci5pc1VuZGVmaW5lZCgpKQogICAgICAgICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsKIAogICAg
IEpTVmFsdWUgbW9udGggPSBvcHRpb25zLT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm1v
bnRoKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAg
ICBpZiAoIW1vbnRoLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWREZWZhdWx0cyA9IGZhbHNl
OwogCiAgICAgSlNWYWx1ZSBkYXkgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFt
ZXMtPmRheSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CiAgICAgaWYgKCFkYXkuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFs
c2U7CiAKQEAgLTI3NCwyMCArMjY5LDE3IEBAIHN0YXRpYyBKU09iamVjdCogdG9EYXRlVGltZU9w
dGlvbnNBbnlEYXQKICAgICAvLyBpaWkuIFJldHVybklmQWJydXB0KHZhbHVlKS4KICAgICAvLyBp
di4gSWYgdmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbiBsZXQgbmVlZERlZmF1bHRzIGJlIGZh
bHNlLgogICAgIEpTVmFsdWUgaG91ciA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlO
YW1lcy0+aG91cik7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0
cik7CiAgICAgaWYgKCFob3VyLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWREZWZhdWx0cyA9
IGZhbHNlOwogCiAgICAgSlNWYWx1ZSBtaW51dGUgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIHZtLnBy
b3BlcnR5TmFtZXMtPm1pbnV0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CiAgICAgaWYgKCFtaW51dGUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVl
ZERlZmF1bHRzID0gZmFsc2U7CiAKICAgICBKU1ZhbHVlIHNlY29uZCA9IG9wdGlvbnMtPmdldCgm
ZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+c2Vjb25kKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBpZiAoIXNlY29uZC5pc1VuZGVmaW5lZCgpKQog
ICAgICAgICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsKIApAQCAtMzAwLDE2ICsyOTIsMTMgQEAgc3Rh
dGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0aW9uc0FueURhdAogICAgICAgICBKU1N0cmluZyog
bnVtZXJpYyA9IGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgQVNDSUlMaXRlcmFsKCJudW1lcmlj
IikpOwogCiAgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
eWVhciwgbnVtZXJpYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7CiAKICAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5tb250aCwgbnVtZXJpYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICAgICAgb3B0aW9ucy0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5kYXksIG51bWVyaWMpOwotICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIH0KIAog
ICAgIC8vIDguIElmIG5lZWREZWZhdWx0cyBpcyB0cnVlIGFuZCBkZWZhdWx0cyBpcyBlaXRoZXIg
InRpbWUiIG9yICJhbGwiLCB0aGVuCkBAIC00MjksMTQgKzQxOCwxMiBAQCB2b2lkIEludGxEYXRl
VGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgLy8gMy4gTGV0IHJlcXVlc3RlZExvY2Fs
ZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5n
PiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChleGVjLCBsb2NhbGVz
KTsKICAgICAvLyA0LiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2NhbGVzKSwKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIC8vIDUuIExldCBvcHRpb25zIGJl
IFRvRGF0ZVRpbWVPcHRpb25zKG9wdGlvbnMsICJhbnkiLCAiZGF0ZSIpLgogICAgIEpTT2JqZWN0
KiBvcHRpb25zID0gdG9EYXRlVGltZU9wdGlvbnNBbnlEYXRlKGV4ZWMsIG9yaWdpbmFsT3B0aW9u
cyk7CiAgICAgLy8gNi4gUmV0dXJuSWZBYnJ1cHQob3B0aW9ucykuCi0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICAvLyA3LiBMZXQgb3B0IGJlIGEgbmV3IFJlY29y
ZC4KICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBsb2NhbGVPcHQ7CkBAIC00NDQsOCArNDMx
LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIC8vIDgu
IExldCBtYXRjaGVyIGJlIEdldE9wdGlvbihvcHRpb25zLCAibG9jYWxlTWF0Y2hlciIsICJzdHJp
bmciLCDCqyJsb29rdXAiLCAiYmVzdCBmaXQiwrssICJiZXN0IGZpdCIpLgogICAgIFN0cmluZyBs
b2NhbGVNYXRjaGVyID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7ICJsb29rdXAiLCAiYmVzdCBmaXQiIH0sICJsb2NhbGVN
YXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3Qg
Zml0Iik7CiAgICAgLy8gOS4gUmV0dXJuSWZBYnJ1cHQobWF0Y2hlcikuCi0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgLy8gMTAuIFNldCBvcHQuW1tsb2NhbGVNYXRj
aGVyXV0gdG8gbWF0Y2hlci4KICAgICBsb2NhbGVPcHQuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmxv
Y2FsZU1hdGNoZXIuc3RyaW5nKCksIGxvY2FsZU1hdGNoZXIpOwogCkBAIC00NzcsOCArNDYzLDcg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIC8vIDE3LiBM
ZXQgdHogYmUgR2V0KG9wdGlvbnMsICJ0aW1lWm9uZSIpLgogICAgIEpTVmFsdWUgdHpWYWx1ZSA9
IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dGltZVpvbmUpOwogICAgIC8v
IDE4LiBSZXR1cm5JZkFicnVwdCh0eikuCi0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAKICAgICAvLyAxOS4gSWYgdHogaXMgbm90IHVuZGVmaW5lZCwgdGhlbgogICAgIFN0
cmluZyB0ejsKQEAgLTQ4Niw4ICs0NzEsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5p
dGlhbGl6ZURhdGVUCiAgICAgICAgIC8vIGEuIExldCB0eiBiZSBUb1N0cmluZyh0eikuCiAgICAg
ICAgIFN0cmluZyBvcmlnaW5hbFR6ID0gdHpWYWx1ZS50b1dURlN0cmluZygmZXhlYyk7CiAgICAg
ICAgIC8vIGIuIFJldHVybklmQWJydXB0KHR6KS4KLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgLy8gYy4gSWYgdGhlIHJlc3VsdCBvZiBJ
c1ZhbGlkVGltZVpvbmVOYW1lKHR6KSBpcyBmYWxzZSwgdGhlbiBpLiBUaHJvdyBhIFJhbmdlRXJy
b3IgZXhjZXB0aW9uLgogICAgICAgICAvLyBkLiBMZXQgdHogYmUgQ2Fub25pY2FsaXplVGltZVpv
bmVOYW1lKHR6KS4KICAgICAgICAgdHogPSBjYW5vbmljYWxpemVUaW1lWm9uZU5hbWUob3JpZ2lu
YWxUeik7CkBAIC01MTksOCArNTAzLDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRp
YWxpemVEYXRlVAogICAgIGF1dG8gc2hvcnRMb25nID0geyAic2hvcnQiLCAibG9uZyIgfTsKIAog
ICAgIFN0cmluZyB3ZWVrZGF5ID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5w
cm9wZXJ0eU5hbWVzLT53ZWVrZGF5LCBuYXJyb3dTaG9ydExvbmcsICJ3ZWVrZGF5IG11c3QgYmUg
XCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBvciBcImxvbmdcIiIsIG51bGxwdHIpOwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGlmICghd2Vla2RheS5pc051bGwoKSkg
ewogICAgICAgICBpZiAod2Vla2RheSA9PSAibmFycm93IikKICAgICAgICAgICAgIHNrZWxldG9u
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRUVFRSIpOwpAQCAtNTMxLDggKzUxNCw3IEBAIHZvaWQg
SW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcg
ZXJhID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5l
cmEsIG5hcnJvd1Nob3J0TG9uZywgImVyYSBtdXN0IGJlIFwibmFycm93XCIsIFwic2hvcnRcIiwg
b3IgXCJsb25nXCIiLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKICAgICBpZiAoIWVyYS5pc051bGwoKSkgewogICAgICAgICBpZiAoZXJhID09ICJuYXJy
b3ciKQogICAgICAgICAgICAgc2tlbGV0b25CdWlsZGVyLmFwcGVuZExpdGVyYWwoIkdHR0dHIik7
CkBAIC01NDMsOCArNTI1LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVE
YXRlVAogICAgIH0KIAogICAgIFN0cmluZyB5ZWFyID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBv
cHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT55ZWFyLCB0d29EaWdpdE51bWVyaWMsICJ5ZWFyIG11
c3QgYmUgXCIyLWRpZ2l0XCIgb3IgXCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBpZiAoIXllYXIuaXNOdWxsKCkpIHsKICAg
ICAgICAgaWYgKHllYXIgPT0gIjItZGlnaXQiKQogICAgICAgICAgICAgc2tlbGV0b25CdWlsZGVy
LmFwcGVuZExpdGVyYWwoInl5Iik7CkBAIC01NTMsOCArNTM0LDcgQEAgdm9pZCBJbnRsRGF0ZVRp
bWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIH0KIAogICAgIFN0cmluZyBtb250aCA9IGlu
dGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bW9udGgsIHR3
b0RpZ2l0TnVtZXJpY05hcnJvd1Nob3J0TG9uZywgIm1vbnRoIG11c3QgYmUgXCIyLWRpZ2l0XCIs
IFwibnVtZXJpY1wiLCBcIm5hcnJvd1wiLCBcInNob3J0XCIsIG9yIFwibG9uZ1wiIiwgbnVsbHB0
cik7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJu
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgaWYgKCFtb250
aC5pc051bGwoKSkgewogICAgICAgICBpZiAobW9udGggPT0gIjItZGlnaXQiKQogICAgICAgICAg
ICAgc2tlbGV0b25CdWlsZGVyLmFwcGVuZExpdGVyYWwoIk1NIik7CkBAIC01NjksOCArNTQ5LDcg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIH0KIAogICAg
IFN0cmluZyBkYXkgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5
TmFtZXMtPmRheSwgdHdvRGlnaXROdW1lcmljLCAiZGF5IG11c3QgYmUgXCIyLWRpZ2l0XCIgb3Ig
XCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKICAgICBpZiAoIWRheS5pc051bGwoKSkgewogICAgICAgICBpZiAoZGF5ID09ICIyLWRp
Z2l0IikKICAgICAgICAgICAgIHNrZWxldG9uQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJkZCIpOwpA
QCAtNTc5LDE2ICs1NTgsMTQgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVE
YXRlVAogICAgIH0KIAogICAgIFN0cmluZyBob3VyID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBv
cHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5ob3VyLCB0d29EaWdpdE51bWVyaWMsICJob3VyIG11
c3QgYmUgXCIyLWRpZ2l0XCIgb3IgXCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIC8vIFdlIG5lZWQgaG91cjEyIHRvIG1h
a2UgdGhlIGhvdXIgc2tlbGV0b24gcGF0dGVybiBkZWNpc2lvbiwgc28gZG8gdGhpcyBlYXJseS4K
ICAgICAvLyAzMi4gTGV0IGhyMTIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJob3VyMTIiLCAiYm9v
bGVhbiIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKS4KICAgICBib29sIGlzSG91cjEyVW5kZWZpbmVk
OwogICAgIGJvb2wgaHIxMiA9IGludGxCb29sZWFuT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnBy
b3BlcnR5TmFtZXMtPmhvdXIxMiwgaXNIb3VyMTJVbmRlZmluZWQpOwogICAgIC8vIDMzLiBSZXR1
cm5JZkFicnVwdChocjEyKS4KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
IAogICAgIGlmICghaG91ci5pc051bGwoKSkgewogICAgICAgICBpZiAoaXNIb3VyMTJVbmRlZmlu
ZWQpIHsKQEAgLTYxMCw4ICs1ODcsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlh
bGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIG1pbnV0ZSA9IGludGxTdHJpbmdPcHRpb24o
ZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bWludXRlLCB0d29EaWdpdE51bWVyaWMs
ICJtaW51dGUgbXVzdCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOwot
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGlmICghbWludXRlLmlz
TnVsbCgpKSB7CiAgICAgICAgIGlmIChtaW51dGUgPT0gIjItZGlnaXQiKQogICAgICAgICAgICAg
c2tlbGV0b25CdWlsZGVyLmFwcGVuZExpdGVyYWwoIm1tIik7CkBAIC02MjAsOCArNTk2LDcgQEAg
dm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIH0KIAogICAgIFN0
cmluZyBzZWNvbmQgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5
TmFtZXMtPnNlY29uZCwgdHdvRGlnaXROdW1lcmljLCAic2Vjb25kIG11c3QgYmUgXCIyLWRpZ2l0
XCIgb3IgXCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKICAgICBpZiAoIXNlY29uZC5pc051bGwoKSkgewogICAgICAgICBpZiAoc2Vj
b25kID09ICIyLWRpZ2l0IikKICAgICAgICAgICAgIHNrZWxldG9uQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJzcyIpOwpAQCAtNjMwLDggKzYwNSw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojpp
bml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgdGltZVpvbmVOYW1lID0gaW50bFN0
cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT50aW1lWm9uZU5hbWUs
IHNob3J0TG9uZywgInRpbWVab25lTmFtZSBtdXN0IGJlIFwic2hvcnRcIiBvciBcImxvbmdcIiIs
IG51bGxwdHIpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGlm
ICghdGltZVpvbmVOYW1lLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmICh0aW1lWm9uZU5hbWUgPT0g
InNob3J0IikKICAgICAgICAgICAgIHNrZWxldG9uQnVpbGRlci5hcHBlbmQoJ3onKTsKQEAgLTY0
NCw4ICs2MTgsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAg
ICAgLy8gMjYuIExldCBtYXRjaGVyIGJlIEdldE9wdGlvbihvcHRpb25zLCAiZm9ybWF0TWF0Y2hl
ciIsICJzdHJpbmciLCDCqyJiYXNpYyIsICJiZXN0IGZpdCLCuywgImJlc3QgZml0IikuCiAgICAg
aW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5mb3JtYXRN
YXRjaGVyLCB7ICJiYXNpYyIsICJiZXN0IGZpdCIgfSwgImZvcm1hdE1hdGNoZXIgbXVzdCBiZSBl
aXRoZXIgXCJiYXNpY1wiIG9yIFwiYmVzdCBmaXRcIiIsICJiZXN0IGZpdCIpOwogICAgIC8vIDI3
LiBSZXR1cm5JZkFicnVwdChtYXRjaGVyKS4KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKIAogICAgIC8vIEFsd2F5cyB1c2UgSUNVIGRhdGUgZm9ybWF0IGdlbmVyYXRvciwg
cmF0aGVyIHRoYW4gb3VyIG93biBwYXR0ZXJuIGxpc3QgYW5kIG1hdGNoZXIuCiAgICAgLy8gQ292
ZXJzIHN0ZXBzIDI4LTM2LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVU
aW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKHRoZXRhbGVjcmFmdGVy
QGdtYWlsLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDggKzkxLDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIC8vIDIuIExl
dCBkYXRlVGltZUZvcm1hdCBiZSBPcmRpbmFyeUNyZWF0ZUZyb21Db25zdHJ1Y3RvcihuZXdUYXJn
ZXQsICVEYXRlVGltZUZvcm1hdFByb3RvdHlwZSUpLgogICAgIC8vIDMuIFJldHVybklmQWJydXB0
KGRhdGVUaW1lRm9ybWF0KS4KICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVu
Y3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKHN0YXRlLCBzdGF0ZS0+bmV3VGFyZ2V0KCks
IGpzQ2FzdDxJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSkt
PmRhdGVUaW1lRm9ybWF0U3RydWN0dXJlKCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
SW50bERhdGVUaW1lRm9ybWF0KiBkYXRlVGltZUZvcm1hdCA9IEludGxEYXRlVGltZUZvcm1hdDo6
Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChkYXRlVGltZUZvcm1hdCk7CiAKQEAg
LTE0Niw4ICsxNDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGlt
CiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVM
aXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5v
bmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogCiAgICAgLy8gMy4gUmV0dXJuIFN1cHBvcnRlZExvY2FsZXMoYXZhaWxh
YmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykuCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVzKCpzdGF0ZSwgYXZhaWxhYmxlTG9jYWxlcywgcmVx
dWVzdGVkTG9jYWxlcywgc3RhdGUtPmFyZ3VtZW50KDEpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFBy
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMSw4ICsxMDEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRs
CiAgICAgICAgIC8vIGEuIExldCB4IGJlIFRvTnVtYmVyKGRhdGUpLgogICAgICAgICB2YWx1ZSA9
IGRhdGUudG9OdW1iZXIoc3RhdGUpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCh4KS4K
LSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KIAogICAgIC8vIDUuIFJl
dHVybiBGb3JtYXREYXRlVGltZShkdGYsIHgpLgpAQCAtMTQwLDggKzEzOSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW0KIAogICAgICAgICAvLyBjLiBMZXQgYmYg
YmUgQm91bmRGdW5jdGlvbkNyZWF0ZShGLCDCq3RoaXMgdmFsdWXCuykuCiAgICAgICAgIGJvdW5k
Rm9ybWF0ID0gSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUodm0sIHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHRhcmdldE9iamVjdCwgZHRmLCBib3VuZEFyZ3MsIDEsIEFTQ0lJTGl0ZXJhbCgiZm9ybWF0Iikp
OwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgLy8gZC4gU2V0IGR0Zi5b
W2JvdW5kRm9ybWF0XV0gdG8gYmYuCiAgICAgICAgIGR0Zi0+c2V0Qm91bmRGb3JtYXQodm0sIGJv
dW5kRm9ybWF0KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2NCw4ICsxNjQsNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVO
dW1iZXJGCiAgICAgLy8gMy4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9j
YWxlTGlzdChsb2NhbGVzKS4KICAgICBhdXRvIHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxp
emVMb2NhbGVMaXN0KHN0YXRlLCBsb2NhbGVzKTsKICAgICAvLyA0LiBSZXR1cm5JZkFicnVwdChy
ZXF1ZXN0ZWRMb2NhbGVzKS4KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
IAogICAgIC8vIDUuIElmIG9wdGlvbnMgaXMgdW5kZWZpbmVkLCB0aGVuCiAgICAgSlNPYmplY3Qq
IG9wdGlvbnM7CkBAIC0xNzYsOCArMTc1LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0
aWFsaXplTnVtYmVyRgogICAgICAgICAvLyBhLiBMZXQgb3B0aW9ucyBiZSBUb09iamVjdChvcHRp
b25zKS4KICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnNWYWx1ZS50b09iamVjdCgmc3RhdGUpOwog
ICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChvcHRpb25zKS4KLSAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9CiAKICAgICAvLyA3LiBMZXQg
b3B0IGJlIGEgbmV3IFJlY29yZC4KQEAgLTE4Niw4ICsxODQsNyBAQCB2b2lkIEludGxOdW1iZXJG
b3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgLy8gOC4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0
aW9uKG9wdGlvbnMsICJsb2NhbGVNYXRjaGVyIiwgInN0cmluZyIsIMKrImxvb2t1cCIsICJiZXN0
IGZpdCLCuywgImJlc3QgZml0IikuCiAgICAgU3RyaW5nIG1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0
aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7ICJs
b29rdXAiLCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9v
a3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CiAgICAgLy8gOS4gUmV0dXJuSWZB
YnJ1cHQobWF0Y2hlcikuCi0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAg
ICAgLy8gMTAuIFNldCBvcHQuW1tsb2NhbGVNYXRjaGVyXV0gdG8gbWF0Y2hlci4KICAgICBvcHQu
YWRkKEFTQ0lJTGl0ZXJhbCgibG9jYWxlTWF0Y2hlciIpLCBtYXRjaGVyKTsKIApAQCAtMjExLDgg
KzIwOCw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAv
LyAxNi4gTGV0IHMgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJzdHlsZSIsICJzdHJpbmciLCDCqyAi
ZGVjaW1hbCIsICJwZXJjZW50IiwgImN1cnJlbmN5IsK7LCAiZGVjaW1hbCIpLgogICAgIFN0cmlu
ZyBzdHlsZVN0cmluZyA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAic3R5bGUiKSwgeyAiZGVjaW1hbCIsICJwZXJjZW50IiwgImN1
cnJlbmN5IiB9LCAic3R5bGUgbXVzdCBiZSBlaXRoZXIgXCJkZWNpbWFsXCIsIFwicGVyY2VudFwi
LCBvciBcImN1cnJlbmN5XCIiLCAiZGVjaW1hbCIpOwogICAgIC8vIDE3LiBSZXR1cm5JZkFicnVw
dChzKS4KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAvLyAxOC4g
U2V0IG51bWJlckZvcm1hdC5bW3N0eWxlXV0gdG8gcy4KICAgICBpZiAoc3R5bGVTdHJpbmcgPT0g
ImRlY2ltYWwiKQogICAgICAgICBtX3N0eWxlID0gU3R5bGU6OkRlY2ltYWw7CkBAIC0yMjYsOCAr
MjIyLDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8v
IDE5LiBMZXQgYyBiZSBHZXRPcHRpb24ob3B0aW9ucywgImN1cnJlbmN5IiwgInN0cmluZyIsIHVu
ZGVmaW5lZCwgdW5kZWZpbmVkKS4KICAgICBTdHJpbmcgY3VycmVuY3kgPSBpbnRsU3RyaW5nT3B0
aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImN1cnJlbmN5
IiksIHsgfSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgLy8gMjAuIFJldHVybklmQWJydXB0KGMp
LgotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIC8vIDIxLiBJZiBj
IGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KICAgICBpZiAoIWN1cnJlbmN5LmlzTnVsbCgpKSB7CiAg
ICAgICAgIC8vIGEuIElmIHRoZSByZXN1bHQgb2YgSXNXZWxsRm9ybWVkQ3VycmVuY3lDb2RlKGMp
LCBpcyBmYWxzZSwgdGhlbiB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgpAQCAtMjU3LDgg
KzI1Miw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAv
LyAyNC4gTGV0IGNkIGJlIEdldE9wdGlvbihvcHRpb25zLCAiY3VycmVuY3lEaXNwbGF5IiwgInN0
cmluZyIsIMKrImNvZGUiLCAic3ltYm9sIiwgIm5hbWUiwrssICJzeW1ib2wiKS4KICAgICBTdHJp
bmcgY3VycmVuY3lEaXNwbGF5U3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9u
cywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjdXJyZW5jeURpc3BsYXkiKSwgeyAiY29k
ZSIsICJzeW1ib2wiLCAibmFtZSIgfSwgImN1cnJlbmN5RGlzcGxheSBtdXN0IGJlIGVpdGhlciBc
ImNvZGVcIiwgXCJzeW1ib2xcIiwgb3IgXCJuYW1lXCIiLCAic3ltYm9sIik7CiAgICAgLy8gMjUu
IFJldHVybklmQWJydXB0KGNkKS4KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgp
KTsKICAgICAvLyAyNi4gSWYgcyBpcyAiY3VycmVuY3kiLCBzZXQgbnVtYmVyRm9ybWF0LltbY3Vy
cmVuY3lEaXNwbGF5XV0gdG8gY2QuCiAgICAgaWYgKG1fc3R5bGUgPT0gU3R5bGU6OkN1cnJlbmN5
KSB7CiAgICAgICAgIGlmIChjdXJyZW5jeURpc3BsYXlTdHJpbmcgPT0gImNvZGUiKQpAQCAtMjc1
LDggKzI2OSw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAg
ICAvLyAyOC4gUmV0dXJuSWZBYnJ1cHQobW5pZCkuCiAgICAgLy8gMjkuIFNldCBudW1iZXJGb3Jt
YXQuW1ttaW5pbXVtSW50ZWdlckRpZ2l0c11dIHRvIG1uaWQuCiAgICAgdW5zaWduZWQgbWluaW11
bUludGVnZXJEaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1JbnRlZ2VyRGlnaXRzIiksIDEsIDIxLCAxKTsK
LSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBtX21pbmltdW1JbnRl
Z2VyRGlnaXRzID0gbWluaW11bUludGVnZXJEaWdpdHM7CiAKICAgICAvLyAzMC4gSWYgcyBpcyAi
Y3VycmVuY3kiLCBsZXQgbW5mZERlZmF1bHQgYmUgY0RpZ2l0czsgZWxzZSBsZXQgbW5mZERlZmF1
bHQgYmUgMC4KQEAgLTI4Niw4ICsyNzksNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRp
YWxpemVOdW1iZXJGCiAgICAgLy8gMzIuIFJldHVybklmQWJydXB0KG1uZmQpLgogICAgIC8vIDMz
LiBTZXQgbnVtYmVyRm9ybWF0LltbbWluaW11bUZyYWN0aW9uRGlnaXRzXV0gdG8gbW5mZC4KICAg
ICB1bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRl
LCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1GcmFjdGlvbkRp
Z2l0cyIpLCAwLCAyMCwgbWluaW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCk7Ci0gICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgbV9taW5pbXVtRnJhY3Rpb25EaWdpdHMg
PSBtaW5pbXVtRnJhY3Rpb25EaWdpdHM7CiAKICAgICAvLyAzNC4gSWYgcyBpcyAiY3VycmVuY3ki
LCBsZXQgbXhmZERlZmF1bHQgYmUgbWF4KG1uZmQsIGNEaWdpdHMpOwpAQCAtMzAzLDM0ICsyOTUs
MjkgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDM2
LiBSZXR1cm5JZkFicnVwdChteGZkKS4KICAgICAvLyAzNy4gU2V0IG51bWJlckZvcm1hdC5bW21h
eGltdW1GcmFjdGlvbkRpZ2l0c11dIHRvIG14ZmQuCiAgICAgdW5zaWduZWQgbWF4aW11bUZyYWN0
aW9uRGlnaXRzID0gaW50bE51bWJlck9wdGlvbihzdGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJtYXhpbXVtRnJhY3Rpb25EaWdpdHMiKSwgbWluaW11bUZyYWN0aW9u
RGlnaXRzLCAyMCwgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgbV9tYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBt
YXhpbXVtRnJhY3Rpb25EaWdpdHM7CiAKICAgICAvLyAzOC4gTGV0IG1uc2QgYmUgR2V0KG9wdGlv
bnMsICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiKS4KICAgICBKU1ZhbHVlIG1pbmltdW1TaWdu
aWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiKSk7CiAgICAgLy8gMzkuIFJl
dHVybklmQWJydXB0KG1uc2QpLgotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwogCiAgICAgLy8gNDAuIExldCBteHNkIGJlIEdldChvcHRpb25zLCAibWF4aW11bVNpZ25pZmlj
YW50RGlnaXRzIikuCiAgICAgSlNWYWx1ZSBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSA9
IG9wdGlvbnMtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11
bVNpZ25pZmljYW50RGlnaXRzIikpOwogICAgIC8vIDQxLiBSZXR1cm5JZkFicnVwdChteHNkKS4K
LSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIC8vIDQyLiBJZiBt
bnNkIGlzIG5vdCB1bmRlZmluZWQgb3IgbXhzZCBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCiAgICAg
aWYgKCFtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZS5pc1VuZGVmaW5lZCgpIHx8ICFtYXhp
bXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIC8vIGEu
IExldCBtbnNkIGJlIEdldE51bWJlck9wdGlvbihvcHRpb25zLCAibWluaW11bVNpZ25pZmljYW50
RGlnaXRzIiwgMSwgMjEsIDEpLgogICAgICAgICB1bnNpZ25lZCBtaW5pbXVtU2lnbmlmaWNhbnRE
aWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIpLCAxLCAyMSwgMSk7CiAgICAg
ICAgIC8vIGIuIFJldHVybklmQWJydXB0KG1uc2QpLgotICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICAvLyBjLiBMZXQgbXhzZCBiZSBHZXRO
dW1iZXJPcHRpb24ob3B0aW9ucywgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIsIG1uc2QsIDIx
LCAyMSkuCiAgICAgICAgIHVuc2lnbmVkIG1heGltdW1TaWduaWZpY2FudERpZ2l0cyA9IGludGxO
dW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
bWF4aW11bVNpZ25pZmljYW50RGlnaXRzIiksIG1pbmltdW1TaWduaWZpY2FudERpZ2l0cywgMjEs
IDIxKTsKICAgICAgICAgLy8gZC4gUmV0dXJuSWZBYnJ1cHQobXhzZCkuCi0gICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIC8vIGUuIFNldCBu
dW1iZXJGb3JtYXQuW1ttaW5pbXVtU2lnbmlmaWNhbnREaWdpdHNdXSB0byBtbnNkLgogICAgICAg
ICBtX21pbmltdW1TaWduaWZpY2FudERpZ2l0cyA9IG1pbmltdW1TaWduaWZpY2FudERpZ2l0czsK
ICAgICAgICAgLy8gZi4gU2V0IG51bWJlckZvcm1hdC5bW21heGltdW1TaWduaWZpY2FudERpZ2l0
c11dIHRvIG14c2QuCkBAIC0zNDMsOCArMzMwLDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojpp
bml0aWFsaXplTnVtYmVyRgogICAgIGlmICh1c2VzRmFsbGJhY2spCiAgICAgICAgIHVzZUdyb3Vw
aW5nID0gdHJ1ZTsKICAgICAvLyA0NC4gUmV0dXJuSWZBYnJ1cHQoZykuCi0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgLy8gNDUuIFNldCBudW1iZXJGb3JtYXQuW1t1
c2VHcm91cGluZ11dIHRvIGcuCiAgICAgbV91c2VHcm91cGluZyA9IHVzZUdyb3VwaW5nOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1
IEFuZHkgVmFuV2Fnb25lciAodGhldGFsZWNyYWZ0ZXJAZ21haWwuY29tKQorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsOCArOTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgLy8gMi4gTGV0IG51bWJlckZvcm1hdCBiZSBPcmRpbmFy
eUNyZWF0ZUZyb21Db25zdHJ1Y3RvcihuZXdUYXJnZXQsICVOdW1iZXJGb3JtYXRQcm90b3R5cGUl
KS4KICAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChudW1iZXJGb3JtYXQpLgogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUo
c3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwganNDYXN0PEludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSktPm51bWJlckZvcm1hdFN0cnVjdHVyZSgpKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIEludGxOdW1iZXJGb3JtYXQqIG51bWJlckZvcm1hdCA9IElu
dGxOdW1iZXJGb3JtYXQ6OmNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKICAgICBBU1NFUlQobnVtYmVy
Rm9ybWF0KTsKIApAQCAtMTQ2LDggKzE0Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSW50bE51bWJlckYKIAogICAgIC8vIDIuIExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9u
aWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVk
TG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQo
MCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVk
TG9jYWxlcyhhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMoKnN0YXRlLCBhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBzdGF0ZS0+YXJndW1lbnQoMSkpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1i
ZXJGb3JtYXRQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTEsOCArOTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBJbnRsCiAgICAgLy8gNC4gTGV0IHggYmUgVG9OdW1iZXIodmFsdWUpLgogICAgIGRvdWJsZSBu
dW1iZXIgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoc3RhdGUpOwogICAgIC8vIDUuIFJl
dHVybklmQWJydXB0KHgpLgotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICAvLyA2LiBSZXR1
cm4gRm9ybWF0TnVtYmVyKG5mLCB4KS4KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG51bWJl
ckZvcm1hdC0+Zm9ybWF0TnVtYmVyKCpzdGF0ZSwgbnVtYmVyKSk7CkBAIC0xMjgsOCArMTI3LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRgogCiAgICAgICAgIC8v
IGMuIExldCBiZiBiZSBCb3VuZEZ1bmN0aW9uQ3JlYXRlKEYsIMKrdGhpcyB2YWx1ZcK7KS4KICAg
ICAgICAgYm91bmRGb3JtYXQgPSBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZSh2bSwgc3RhdGUsIGds
b2JhbE9iamVjdCwgdGFyZ2V0T2JqZWN0LCBuZiwgYm91bmRBcmdzLCAxLCBBU0NJSUxpdGVyYWwo
ImZvcm1hdCIpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIC8vIGQu
IFNldCBuZi5bW2JvdW5kRm9ybWF0XV0gdG8gYmYuCiAgICAgICAgIG5mLT5zZXRCb3VuZEZvcm1h
dCh2bSwgYm91bmRGb3JtYXQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0
LDE1ICsxMzQsMTMgQEAgYm9vbCBpbnRsQm9vbGVhbk9wdGlvbihFeGVjU3RhdGUmIHN0YXRlLAog
ICAgIEpTT2JqZWN0KiBvcHRzID0gb3B0aW9ucy50b09iamVjdCgmc3RhdGUpOwogCiAgICAgLy8g
Mi4gUmV0dXJuSWZBYnJ1cHQob3B0cykuCi0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGZhbHNlKTsKIAogICAgIC8vIDMuIExldCB2YWx1ZSBiZSBHZXQob3B0cywgcHJvcGVydHkp
LgogICAgIEpTVmFsdWUgdmFsdWUgPSBvcHRzLT5nZXQoJnN0YXRlLCBwcm9wZXJ0eSk7CiAKICAg
ICAvLyA0LiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGZhbHNlKTsKIAogICAgIC8vIDUuIElmIHZhbHVlIGlzIG5vdCB1bmRlZmluZWQs
IHRoZW4KICAgICBpZiAoIXZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTE3NiwxNSArMTc0LDEz
IEBAIFN0cmluZyBpbnRsU3RyaW5nT3B0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUKICAgICBKU09iamVj
dCogb3B0cyA9IG9wdGlvbnMudG9PYmplY3QoJnN0YXRlKTsKIAogICAgIC8vIDIuIFJldHVybklm
QWJydXB0KG9wdHMpLgotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiB7IH07CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgU3RyaW5nKCkp
OwogCiAgICAgLy8gMy4gTGV0IHZhbHVlIGJlIEdldChvcHRzLCBwcm9wZXJ0eSkuCiAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG9wdHMtPmdldCgmc3RhdGUsIHByb3BlcnR5KTsKIAogICAgIC8vIDQuIFJl
dHVybklmQWJydXB0KHZhbHVlKS4KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4geyB9OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFN0
cmluZygpKTsKIAogICAgIC8vIDUuIElmIHZhbHVlIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KICAg
ICBpZiAoIXZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTE5Niw4ICsxOTIsNyBAQCBTdHJpbmcg
aW50bFN0cmluZ09wdGlvbihFeGVjU3RhdGUmIHN0YXRlCiAgICAgICAgIFN0cmluZyBzdHJpbmdW
YWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAKICAgICAgICAgLy8gaWkuIFJldHVy
bklmQWJydXB0KHZhbHVlKS4KLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIFN0cmluZygpKTsKIAogICAgICAgICAvLyBkLiBJZiB2YWx1ZXMgaXMgbm90IHVuZGVm
aW5lZCwgdGhlbgogICAgICAgICAvLyBpLiBJZiB2YWx1ZXMgZG9lcyBub3QgY29udGFpbiBhbiBl
bGVtZW50IGVxdWFsIHRvIHZhbHVlLCB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgpAQCAt
MjI0LDIzICsyMTksMjAgQEAgdW5zaWduZWQgaW50bE51bWJlck9wdGlvbihFeGVjU3RhdGUmIHN0
YQogICAgIEpTT2JqZWN0KiBvcHRzID0gb3B0aW9ucy50b09iamVjdCgmc3RhdGUpOwogCiAgICAg
Ly8gMi4gUmV0dXJuSWZBYnJ1cHQob3B0cykuCi0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgMCk7CiAKICAgICAvLyAzLiBMZXQgdmFsdWUgYmUgR2V0KG9wdHMsIHByb3BlcnR5KS4KICAg
ICBKU1ZhbHVlIHZhbHVlID0gb3B0cy0+Z2V0KCZzdGF0ZSwgcHJvcGVydHkpOwogCiAgICAgLy8g
NC4gUmV0dXJuSWZBYnJ1cHQodmFsdWUpLgotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiAwOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IDApOwogCiAgICAgLy8gNS4gSWYgdmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgogICAgIGlm
ICghdmFsdWUuaXNVbmRlZmluZWQoKSkgewogICAgICAgICAvLyBhLiBMZXQgdmFsdWUgYmUgVG9O
dW1iZXIodmFsdWUpLgogICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CiAgICAgICAgIC8vIDEuIElm
IHZhbHVlIGlzIE5hTiBvciBsZXNzIHRoYW4gbWluaW11bSBvciBncmVhdGVyIHRoYW4gbWF4aW11
bSwgdGhyb3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbi4KICAgICAgICAgaWYgKCEoZG91YmxlVmFs
dWUgPj0gbWluaW11bSAmJiBkb3VibGVWYWx1ZSA8PSBtYXhpbXVtKSkgewogICAgICAgICAgICAg
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcigmc3RhdGUsICpw
cm9wZXJ0eS5wdWJsaWNOYW1lKCkgKyAiIGlzIG91dCBvZiByYW5nZSIpKTsKQEAgLTU2MCwxNyAr
NTUyLDE0IEBAIFZlY3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoRXgKICAgICB9
CiAKICAgICAvLyA1LiBSZXR1cm5JZkFicnVwdChPKS4KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBWZWN0b3I8U3RyaW5nPigpKTsKIAogICAgIC8vIDYuIExl
dCBsZW4gYmUgVG9MZW5ndGgoR2V0KE8sICJsZW5ndGgiKSkuCiAgICAgSlNWYWx1ZSBsZW5ndGhQ
cm9wZXJ0eSA9IGxvY2FsZXNPYmplY3QtPmdldCgmc3RhdGUsIHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0
dXJuIFZlY3RvcjxTdHJpbmc+KCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgVmVj
dG9yPFN0cmluZz4oKSk7CiAKICAgICBkb3VibGUgbGVuZ3RoID0gbGVuZ3RoUHJvcGVydHkudG9M
ZW5ndGgoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBWZWN0b3I8U3RyaW5nPigpKTsKIAogICAgIC8vIEtlZXAgdHJhY2sgb2YgbG9jYWxlcyB0
aGF0IGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgbGlzdC4KICAgICBIYXNoU2V0PFN0cmluZz4gc2Vl
blNldDsKQEAgLTU4NSw4ICs1NzQsNyBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2Nh
bGVMaXN0KEV4CiAgICAgICAgIGJvb2wga1ByZXNlbnQgPSBsb2NhbGVzT2JqZWN0LT5oYXNQcm9w
ZXJ0eSgmc3RhdGUsIGspOwogCiAgICAgICAgIC8vIGMuIFJldHVybklmQWJydXB0KGtQcmVzZW50
KS4KLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAg
IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBWZWN0b3I8U3RyaW5nPigpKTsKIAogICAgICAgICAvLyBkLiBJZiBrUHJlc2VudCBpcyB0
cnVlLCB0aGVuCiAgICAgICAgIGlmIChrUHJlc2VudCkgewpAQCAtNTk0LDggKzU4Miw3IEBAIFZl
Y3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoRXgKICAgICAgICAgICAgIEpTVmFs
dWUga1ZhbHVlID0gbG9jYWxlc09iamVjdC0+Z2V0KCZzdGF0ZSwgayk7CiAKICAgICAgICAgICAg
IC8vIGlpLiBSZXR1cm5JZkFicnVwdChrVmFsdWUpLgotICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmlu
Zz4oKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFZlY3RvcjxTdHJp
bmc+KCkpOwogCiAgICAgICAgICAgICAvLyBpaWkuIElmIFR5cGUoa1ZhbHVlKSBpcyBub3QgU3Ry
aW5nIG9yIE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLgogICAgICAgICAgICAg
aWYgKCFrVmFsdWUuaXNTdHJpbmcoKSAmJiAha1ZhbHVlLmlzT2JqZWN0KCkpIHsKQEAgLTYwNyw4
ICs1OTQsNyBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4CiAgICAg
ICAgICAgICBKU1N0cmluZyogdGFnID0ga1ZhbHVlLnRvU3RyaW5nKCZzdGF0ZSk7CiAKICAgICAg
ICAgICAgIC8vIHYuIFJldHVybklmQWJydXB0KHRhZykuCi0gICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBWZWN0b3I8U3Ry
aW5nPigpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgVmVjdG9yPFN0
cmluZz4oKSk7CiAKICAgICAgICAgICAgIC8vIHZpLiBJZiBJc1N0cnVjdHVyYWxseVZhbGlkTGFu
Z3VhZ2VUYWcodGFnKSBpcyBmYWxzZSwgdGhyb3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbi4KICAg
ICAgICAgICAgIC8vIHZpaS4gTGV0IGNhbm9uaWNhbGl6ZWRUYWcgYmUgQ2Fub25pY2FsaXplTGFu
Z3VhZ2VUYWcodGFnKS4KQEAgLTk0NSw4ICs5MzEsNyBAQCBKU1ZhbHVlIHN1cHBvcnRlZExvY2Fs
ZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgICAgIC8vIGEuIExldCBtYXRjaGVyIGJlIEdldE9wdGlv
bihvcHRpb25zLCAibG9jYWxlTWF0Y2hlciIsICJzdHJpbmciLCDCqyAibG9va3VwIiwgImJlc3Qg
Zml0IiDCuywgImJlc3QgZml0IikuCiAgICAgICAgIG1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9u
KHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7ICJsb29r
dXAiLCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3Vw
XCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CiAgICAgICAgIC8vIGIuIFJldHVybklm
QWJydXB0KG1hdGNoZXIpLgotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gMi4g
RWxzZSwgbGV0IG1hdGNoZXIgYmUgImJlc3QgZml0Ii4KICAgICAgICAgbWF0Y2hlciA9IEFTQ0lJ
TGl0ZXJhbCgiYmVzdCBmaXQiKTsKQEAgLTk2NSw4ICs5NTAsNyBAQCBKU1ZhbHVlIHN1cHBvcnRl
ZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgICAgIHN1cHBvcnRlZExvY2FsZXMgPSBsb29r
dXBTdXBwb3J0ZWRMb2NhbGVzKHN0YXRlLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2Nh
bGVzKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBKU1ZhbHVlKCkpOwogCiAgICAgLy8gNi4gTGV0IHN1YnNldCBiZSBDcmVhdGVBcnJheUZyb21M
aXN0KHN1cHBvcnRlZExvY2FsZXMpLgogICAgIC8vIEFscmVhZHkgYW4gYXJyYXkuCkBAIC05NzQs
OCArOTU4LDcgQEAgSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSYgc3RhdAogICAg
IC8vIDcuIExldCBrZXlzIGJlIHN1YnNldC5bW093blByb3BlcnR5S2V5c11dKCkuCiAgICAgUHJv
cGVydHlOYW1lQXJyYXkga2V5cygmc3RhdGUsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwog
ICAgIHN1cHBvcnRlZExvY2FsZXMtPmdldE93blByb3BlcnR5TmFtZXMoc3VwcG9ydGVkTG9jYWxl
cywgJnN0YXRlLCBrZXlzLCBFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIFByb3BlcnR5RGVzY3Jp
cHRvciBkZXNjOwogICAgIGRlc2Muc2V0Q29uZmlndXJhYmxlKGZhbHNlKTsKQEAgLTk5MSw4ICs5
NzQsNyBAQCBKU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgICAg
IHN1cHBvcnRlZExvY2FsZXMtPmRlZmluZU93blByb3BlcnR5KHN1cHBvcnRlZExvY2FsZXMsICZz
dGF0ZSwga2V5c1tpXSwgZGVzYywgdHJ1ZSk7CiAKICAgICAgICAgLy8gYy4gQXNzZXJ0OiBzdGF0
dXMgaXMgbm90IGFicnVwdCBjb21wbGV0aW9uLgotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgfQogCiAgICAgLy8g
OS4gUmV0dXJuIHN1YnNldC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE9iamVjdElubGluZXMuaAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNDYsMTIgKzQ2LDEwIEBAIEpTVmFsdWUgY29uc3RydWN0SW50bEluc3RhbmNlV2l0aFdvcmth
cm8KICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBjYWxsZWUtPmdldERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKICAgICAgICAgaWYgKEpTT2JqZWN0OjpkZWZhdWx0
SGFzSW5zdGFuY2UoJnN0YXRlLCB0aGlzVmFsdWUsIHByb3RvdHlwZSkpIHsKICAgICAgICAgICAg
IEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0KCZzdGF0ZSk7Ci0gICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgSlNWYWx1ZSgpKTsKIAogICAgICAgICAgICAgSW50bEluc3RhbmNlKiBpbnN0YW5jZSA9
IGZhY3Rvcnkodm0pOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICAgICAgICAgIHRoaXNP
YmplY3QtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuaW50
bFN1YnN0aXR1dGVWYWx1ZVByaXZhdGVOYW1lKCksIGluc3RhbmNlKTsKICAgICAgICAgICAgIHJl
dHVybiB0aGlzT2JqZWN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRl
cmF0b3JPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw4ICs0MSw3IEBAIEpTVmFsdWUgaXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSog
ZXhlYywgSlMKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBKU1ZhbHVlIG5leHRGdW5jdGlvbiA9IGl0ZXJhdG9yLmdldChleGVjLCB2bS5wcm9wZXJ0eU5h
bWVzLT5uZXh0KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBK
U1ZhbHVlKCkpOwogCiAgICAgQ2FsbERhdGEgbmV4dEZ1bmN0aW9uQ2FsbERhdGE7CiAgICAgQ2Fs
bFR5cGUgbmV4dEZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShuZXh0RnVuY3Rpb24sIG5l
eHRGdW5jdGlvbkNhbGxEYXRhKTsKQEAgLTUzLDggKzUyLDcgQEAgSlNWYWx1ZSBpdGVyYXRvck5l
eHQoRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKQogICAgICAg
ICBuZXh0RnVuY3Rpb25Bcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGNhbGwoZXhlYywgbmV4dEZ1bmN0aW9uLCBuZXh0RnVuY3Rpb25DYWxsVHlwZSwgbmV4dEZ1
bmN0aW9uQ2FsbERhdGEsIGl0ZXJhdG9yLCBuZXh0RnVuY3Rpb25Bcmd1bWVudHMpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBp
ZiAoIXJlc3VsdC5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3Qg
YW4gb2JqZWN0LiIpKTsKQEAgLTg0LDExICs4Miw5IEBAIEpTVmFsdWUgaXRlcmF0b3JTdGVwKEV4
ZWNTdGF0ZSogZXhlYywgSlMKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGl0ZXJhdG9yTmV4dChleGVjLCBpdGVyYXRvcik7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsK
ICAgICBib29sIGRvbmUgPSBpdGVyYXRvckNvbXBsZXRlKGV4ZWMsIHJlc3VsdCk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBpZiAo
ZG9uZSkKICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTEwNiw4ICsxMDIsNyBAQCB2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhCiAgICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAgICAg
SlNWYWx1ZSByZXR1cm5GdW5jdGlvbiA9IGl0ZXJhdG9yLmdldChleGVjLCB2bS5wcm9wZXJ0eU5h
bWVzLT5yZXR1cm5LZXl3b3JkKTsKLSAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHZvaWQoKSk7CiAKICAgICBpZiAocmV0dXJuRnVuY3Rpb24uaXNVbmRlZmluZWQoKSkgewog
ICAgICAgICBpZiAoZXhjZXB0aW9uKQpAQCAtMTMzLDggKzEyOCw3IEBAIHZvaWQgaXRlcmF0b3JD
bG9zZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdm9pZCgpKTsKIAogICAgIGlmICgh
aW5uZXJSZXN1bHQuaXNPYmplY3QoKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCB0
aHJvd1Njb3BlLCBBU0NJSUxpdGVyYWwoIkl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90
IGFuIG9iamVjdC4iKSk7CkBAIC0xNzEsOCArMTY1LDcgQEAgSlNWYWx1ZSBpdGVyYXRvckZvckl0
ZXJhYmxlKEV4ZWNTdGF0ZSogcwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICAKICAgICBKU1ZhbHVlIGl0ZXJhdG9yRnVuY3Rpb24gPSBpdGVyYWJsZS5nZXQo
c3RhdGUsIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuaXRlcmF0b3JTeW1ib2wpOwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAKICAgICBDYWxs
RGF0YSBpdGVyYXRvckZ1bmN0aW9uQ2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgaXRlcmF0b3JGdW5j
dGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoaXRlcmF0b3JGdW5jdGlvbiwgaXRlcmF0b3JGdW5j
dGlvbkNhbGxEYXRhKTsKQEAgLTE4Myw4ICsxNzYsNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yRm9ySXRl
cmFibGUoRXhlY1N0YXRlKiBzCiAKICAgICBBcmdMaXN0IGl0ZXJhdG9yRnVuY3Rpb25Bcmd1bWVu
dHM7CiAgICAgSlNWYWx1ZSBpdGVyYXRvciA9IGNhbGwoc3RhdGUsIGl0ZXJhdG9yRnVuY3Rpb24s
IGl0ZXJhdG9yRnVuY3Rpb25DYWxsVHlwZSwgaXRlcmF0b3JGdW5jdGlvbkNhbGxEYXRhLCBpdGVy
YWJsZSwgaXRlcmF0b3JGdW5jdGlvbkFyZ3VtZW50cyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgaWYgKCFpdGVyYXRvci5pc09iamVj
dCgpKSB7CiAgICAgICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAko
cmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0
b3JPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSwxNiArNTIsMTQgQEAgdm9pZCBmb3JF
YWNoSW5JdGVyYWJsZShFeGVjU3RhdGUqIHN0YXRlLAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgaXRlcmF0b3IgPSBpdGVyYXRvckZvckl0
ZXJhYmxlKHN0YXRlLCBpdGVyYWJsZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgSlNWYWx1ZSBuZXh0ID0gaXRlcmF0
b3JTdGVwKHN0YXRlLCBpdGVyYXRvcik7CiAgICAgICAgIGlmIChuZXh0LmlzRmFsc2UoKSB8fCBV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgSlNWYWx1ZSBuZXh0VmFsdWUgPSBpdGVyYXRvclZhbHVlKHN0YXRlLCBuZXh0KTsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgICAgICBj
YWxsYmFjayh2bSwgc3RhdGUsIG5leHRWYWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUzLDggKzY1Myw3IEBAIEpTVmFs
dWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKICAgICB1bnNpZ25lZCBpbmRleCA9IGdl
dEFycmF5TGVuZ3RoKCkgLSAxOwogICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2Yg
Y2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGlu
ZHguCiAgICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIC8vIENhbGwg
dGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBh
bmQgdHJ1ZS4KICAgICBpZiAoIWRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzLCBleGVjLCBpbmRl
eCkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgi
VW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKSk7CkBAIC0xMzIzLDggKzEzMjIsNyBAQCB2b2lk
IEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqCiAgICAgCiAgICAgZm9yICg7IGkg
PCBsZW5ndGg7ICsraSkgewogICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0g
b2Zmc2V0KSA9IGdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsOCArODgsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgdW5zaWduZWQgbGVu
Z3RoOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAgbGVuZ3RoID0g
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBBbHRob3VnaCB0
aGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHNheSBzbywgaXQgaXMgaW4gZmFjdCBjb3JyZWN0IHRv
IHNheQogICAgICAgICAvLyAibmV3IEFycmF5QnVmZmVyKCkiLiBUaGUgcmVzdWx0IGlzIHRoZSBz
YW1lIGFzIGFsbG9jYXRpbmcgYW4gYXJyYXkgYnVmZmVyCkBAIC0xMDIsOCArMTAxLDcgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSkpOwogCiAgICAg
U3RydWN0dXJlKiBhcnJheUJ1ZmZlclN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0
ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBjb25zdHJ1Y3Rvci0+
Z2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0dXJlKCkpOwotICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUodm0s
IGFycmF5QnVmZmVyU3RydWN0dXJlLCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIAogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTQgKzUwLDEyIEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmEKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiU2xpY2UgcmVxdWlyZXMgYXQgbGVh
c3Qgb25lIGFyZ3VtZW50LiIpKTsKICAgICAKICAgICBpbnQzMl90IGJlZ2luID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIAogICAg
IGludDMyX3QgZW5kOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgewogICAg
ICAgICBlbmQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGVuZCA9
IHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgpOwogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SW5saW5lcy5oCShyZXZpc2lvbiAyMDYz
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC03Niw4ICs3Niw3IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgZ2V0
TGVuZ3RoKEV4ZWNTdGEKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0FycmF5Kj4ob2JqKS0+bGVu
Z3RoKCk7CiAKICAgICBKU1ZhbHVlIGxlbmd0aFZhbHVlID0gb2JqLT5nZXQoZXhlYywgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4gVUlOVF9NQVg7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgVUlOVF9NQVgpOwogICAgIHJldHVybiBsZW5ndGhWYWx1ZS50b1VJbnQzMihleGVjKTsKIH0K
IApAQCAtODksOCArODgsNyBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSB0b0xlbmd0aChFeGVjU3Rh
dGUqCiAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNBcnJheSo+KG9iaiktPmxlbmd0aCgpOwogCiAg
ICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iai0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
cmV0dXJuIFBOYU47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUE5hTik7CiAgICAg
cmV0dXJuIGxlbmd0aFZhbHVlLnRvTGVuZ3RoKGV4ZWMpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9u
IDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw4ICsxMjgsNyBAQCBpbmxpbmUgU3RydWN0dXJl
KiBnZXRCb3VuZEZ1bmN0aW9uU3RydWN0CiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGFyZ2V0RnVuY3Rpb24tPmdl
dFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CiAgICAgSlNGdW5jdGlvbiogdGFyZ2V0SlNGdW5jdGlvbiA9IGpzRHluYW1p
Y0Nhc3Q8SlNGdW5jdGlvbio+KHRhcmdldEZ1bmN0aW9uKTsKIAogICAgIC8vIFdlIG9ubHkgY2Fj
aGUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYm91bmQgZnVuY3Rpb24gaWYgdGhlIGJpbmRlZSBpcyBh
IEpTRnVuY3Rpb24gc2luY2UgdGhlcmUKQEAgLTE3Miw4ICsxNzEsNyBAQCBKU0JvdW5kRnVuY3Rp
b24qIEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlCiAgICAgICAgIGNhbkNvbnN0cnVjdCA/IChzbG93
Q2FzZSA/IGJvdW5kRnVuY3Rpb25Db25zdHJ1Y3QgOiBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNv
bnN0cnVjdCkgOiBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwKICAgICAgICAgbmFtZSk7
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRCb3VuZEZ1bmN0aW9uU3RydWN0dXJlKHZt
LCBleGVjLCBnbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBKU0JvdW5kRnVuY3Rpb24qIGZ1bmN0
aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNCb3VuZEZ1bmN0aW9uPih2bS5oZWFw
KSkgSlNCb3VuZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdGFyZ2V0RnVu
Y3Rpb24sIGJvdW5kVGhpcywgYm91bmRBcmdzKTsKIAogICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVh
dGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTkyLDggKzE5Miw3IEBAIGJvb2wgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUoRXhlY1N0YXRlKiAK
ICAgICAgICAgfQogCiAgICAgICAgIHByb3RvdHlwZSA9IG9iai0+Z2V0UHJvdG90eXBlKHZtLCBl
eGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFs
c2UpOwogICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtMzgxLDEyICszODAsMTAgQEAgSlNTdHJpbmcqIEpTVmFsdWU6OnRvU3RyaW5n
U2xvd0Nhc2UoRXhlYwogCiAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKICAgICBKU1ZhbHVlIHZhbHVl
ID0gYXNDZWxsKCktPnRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlclN0cmluZyk7Ci0gICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGVycm9yVmFsdWUoKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlcnJvclZhbHVlKCkpOwogICAgIEFTU0VS
VCghdmFsdWUuaXNPYmplY3QoKSk7CiAgICAgSlNTdHJpbmcqIHJlc3VsdCA9IHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybiBlcnJvclZhbHVlKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZXJy
b3JWYWx1ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHJldmlzaW9uIDIw
NjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0Miw4ICs2NDIsNyBAQCBpbmxpbmUgUHJlZmVycmVkUHJp
bWl0aXZlVHlwZSB0b1ByZWZlcnJlCiAgICAgfQogCiAgICAgU3RyaW5nSW1wbCogaGludFN0cmlu
ZyA9IGpzQ2FzdDxKU1N0cmluZyo+KHZhbHVlKS0+dmFsdWUoZXhlYykuaW1wbCgpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBOb1ByZWZlcmVu
Y2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgTm9QcmVmZXJlbmNlKTsKIAogICAg
IGlmIChXVEY6OmVxdWFsKGhpbnRTdHJpbmcsICJkZWZhdWx0IikpCiAgICAgICAgIHJldHVybiBO
b1ByZWZlcmVuY2U7CkBAIC03ODYsOCArNzg1LDcgQEAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBz
dGQ6OnJlc3VsdF9vZjxDYQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KGV4ZWMtPnZtKCkpOwogICAgIGJvb2wgZm91bmQgPSBnZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4geyB9OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAgICAgcmV0dXJuIGNhbGxiYWNrKGZvdW5kLCBzbG90KTsKIH0KIApAQCAtOTI2LDggKzkyNCw3
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dDYXMKICAgICAgICAgICAg
IGlmICh2Mi5pc09iamVjdCgpKQogICAgICAgICAgICAgICAgIHJldHVybiB2MSA9PSB2MjsKICAg
ICAgICAgICAgIEpTVmFsdWUgcDEgPSB2MS50b1ByaW1pdGl2ZShleGVjKTsKLSAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwog
ICAgICAgICAgICAgdjEgPSBwMTsKICAgICAgICAgICAgIGlmICh2MS5pc0ludDMyKCkgJiYgdjIu
aXNJbnQzMigpKQogICAgICAgICAgICAgICAgIHJldHVybiB2MSA9PSB2MjsKQEAgLTkzNiw4ICs5
MzMsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNWYWx1ZTo6ZXF1YWxTbG93Q2FzCiAKICAgICAg
ICAgaWYgKHYyLmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIEpTVmFsdWUgcDIgPSB2Mi50b1By
aW1pdGl2ZShleGVjKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICAgICAgdjIgPSBwMjsKICAgICAgICAg
ICAgIGlmICh2MS5pc0ludDMyKCkgJiYgdjIuaXNJbnQzMigpKQogICAgICAgICAgICAgICAgIHJl
dHVybiB2MSA9PSB2MjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0
YVZpZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMzLDE1ICsxMzMsMTMgQEAgRW5jb2RlZEpTVmFsdWUgZ2V0RGF0YShFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIk5lZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50ICh0aGUgYnl0ZU9mZnNl
dCkiKSk7CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgCiAg
ICAgYm9vbCBsaXR0bGVFbmRpYW4gPSBmYWxzZTsKICAgICB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9
IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKICAgICBpZiAoZWxlbWVudFNpemUgPiAx
ICYmIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CiAgICAgICAgIGxpdHRsZUVuZGlhbiA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBieXRlTGVu
Z3RoID0gZGF0YVZpZXctPmxlbmd0aCgpOwpAQCAtMTgxLDggKzE3OSw3IEBAIEVuY29kZWRKU1Zh
bHVlIHNldERhdGEoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJOZWVkIGF0IGxlYXN0IHR3byBhcmd1bWVu
dCAodGhlIGJ5dGVPZmZzZXQgYW5kIHZhbHVlKSIpKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRl
T2Zmc2V0ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGRhdGFTaXplID0gc2l6ZW9m
KHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwogICAgIHVuaW9uIHsKQEAgLTE5MSwxNSArMTg4LDEz
IEBAIEVuY29kZWRKU1ZhbHVlIHNldERhdGEoRXhlY1N0YXRlKiBleGVjKQogICAgIH0gdTsKIAog
ICAgIHUudmFsdWUgPSB0b05hdGl2ZUZyb21WYWx1ZTxBZGFwdG9yPihleGVjLCBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAKICAgICBib29s
IGxpdHRsZUVuZGlhbiA9IGZhbHNlOwogICAgIHVuc2lnbmVkIGVsZW1lbnRTaXplID0gc2l6ZW9m
KHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwogICAgIGlmIChlbGVtZW50U2l6ZSA+IDEgJiYgZXhl
Yy0+YXJndW1lbnRDb3VudCgpID49IDMpIHsKICAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpOwotICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGggPSBk
YXRhVmlldy0+bGVuZ3RoKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMiwxMSArNjEy
LDkgQEAgdm9pZCBKU0Z1bmN0aW9uOjpzZXRGdW5jdGlvbk5hbWUoRXhlY1N0YQogICAgICAgICAg
ICAgbmFtZSA9IG1ha2VTdHJpbmcoJ1snLCBTdHJpbmcoJnVpZCksICddJyk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgSlNTdHJpbmcqIGpzU3RyID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm47
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIG5h
bWUgPSBqc1N0ci0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CiAgICAgfQogICAgIHJlaWZ5TmFtZSh2bSwgZXhlYywgbmFtZSk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE3NCw4ICsxNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgICAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZh
bHVlID0gdG9OYXRpdmVGcm9tVmFsdWU8QWRhcHRvcj4oZXhlYywganNWYWx1ZSk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgICAg
ICBpZiAoaXNOZXV0ZXJlZCgpKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2FnZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHJldmlz
aW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDI0
ICs4OSwyMCBAQCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFyCiAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgc3RvcmFnZTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
ICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRvclN0ZXAoZXhlYywgaXRlcmF0b3IpOwotICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAg
ICAgIGlmIChuZXh0LmlzRmFsc2UoKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIEpT
VmFsdWUgbmV4dEl0ZW0gPSBpdGVyYXRvclZhbHVlKGV4ZWMsIG5leHQpOwotICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgICAg
IHN0b3JhZ2UuYXBwZW5kKG5leHRJdGVtKTsKICAgICB9CiAKICAgICBWaWV3Q2xhc3MqIHJlc3Vs
dCA9IFZpZXdDbGFzczo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1cmUsIHN0b3Jh
Z2Uuc2l6ZSgpKTsKLSAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBBU1NFUlQoc2NvcGUuZXhj
ZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9CisgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0b3JhZ2Uuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
aWYgKCFyZXN1bHQtPnNldEluZGV4KGV4ZWMsIGksIHN0b3JhZ2UuYXQoaSkpKSB7CkBAIC0xNjIs
OCArMTU4LDcgQEAgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcgogICAg
ICAgICAgICAgb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBsZW5ndGhTbG90KTsKIAogICAgICAgICAgICAgSlNWYWx1ZSBpdGVyYXRvckZ1bmMg
PSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7Ci0g
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CiAKICAgICAgICAgICAgIC8vIFdlIHdvdWxkIGxpa2Ugbm90IHVzZSB0aGUg
aXRlcmF0b3IgYXMgaXQgaXMgcGFpbmZ1bGx5IHNsb3cuIEZvcnR1bmF0ZWx5LCB1bmxlc3MKICAg
ICAgICAgICAgIC8vIDEpIFRoZSBpdGVyYXRvciBpcyBub3QgYSBrbm93biBpdGVyYXRvci4KQEAg
LTE4MywxNSArMTc4LDEzIEBAIGlubGluZSBKU09iamVjdCogY29uc3RydWN0R2VuZXJpY1R5cGVk
QXIKIAogICAgICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ3VtZW50czsKICAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBpdGVyYXRvciA9IGNhbGwoZXhlYywgaXRlcmF0b3JGdW5jLCBjYWxs
VHlwZSwgY2FsbERhdGEsIG9iamVjdCwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKIAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0
R2VuZXJpY1R5cGVkQXJyYXlWaWV3RnJvbUl0ZXJhdG9yPFZpZXdDbGFzcz4oZXhlYywgc3RydWN0
dXJlLCBpdGVyYXRvcik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGxlbmd0aCA9IGxl
bmd0aFNsb3QuaXNVbnNldCgpID8gMCA6IGxlbmd0aFNsb3QuZ2V0VmFsdWUoZXhlYywgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAg
ICAgfQogCiAgICAgICAgIApAQCAtMjM1LDggKzIyOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc3RydWN0R2UKICAgICBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IGFz
SW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSk7CiAgICAgU3RydWN0dXJlKiBwYXJlbnRT
dHJ1Y3R1cmUgPSBmdW5jdGlvbi0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUo
Vmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUpOwogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhl
Yy0+bmV3VGFyZ2V0KCksIHBhcmVudFN0cnVjdHVyZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAg
ICAgc2l6ZV90IGFyZ0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogCkBAIC0yNTIsMTMg
KzI0NCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEdlCiAgICAg
T3B0aW9uYWw8dW5zaWduZWQ+IGxlbmd0aCA9IE51bGxvcHQ7CiAgICAgaWYgKGpzRHluYW1pY0Nh
c3Q8SlNBcnJheUJ1ZmZlcio+KGZpcnN0VmFsdWUpICYmIGFyZ0NvdW50ID4gMSkgewogICAgICAg
ICBvZmZzZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b1VJbnQzMihleGVjKTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgICAgIGlmIChhcmdDb3VudCA+
IDIpIHsKICAgICAgICAgICAgIGxlbmd0aCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRv
VUludDMyKGV4ZWMpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgICAgIH0KIAogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGVGdW5jdGlvbnMuaAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsNyBAQCBpbmxpbmUgSlNBcnJheUJ1ZmZl
clZpZXcqIHNwZWNpZXNDb25zdHJ1CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvciA9IGV4ZW1wbGFyLT5nZXQoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yKTsKLSAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIGlmIChjb25zdHJ1Y3Rvci5pc1VuZGVm
aW5lZCgpKQogICAgICAgICByZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yKCk7CkBAIC02MiwxNSAr
NjEsMTMgQEAgaW5saW5lIEpTQXJyYXlCdWZmZXJWaWV3KiBzcGVjaWVzQ29uc3RydQogICAgIH0K
IAogICAgIEpTVmFsdWUgc3BlY2llcyA9IGNvbnN0cnVjdG9yLmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuc3BlY2llc1N5bWJvbCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7CiAKICAgICBpZiAoc3BlY2llcy5pc1VuZGVmaW5lZE9yTnVsbCgp
KQogICAgICAgICByZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yKCk7CiAKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGNvbnN0cnVjdChleGVjLCBzcGVjaWVzLCBhcmdzLCAic3BlY2llcyBpcyBub3QgYSBj
b25zdHJ1Y3RvciIpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwogCiAgICAgaWYgKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3ID0ganNEeW5hbWljQ2FzdDxK
U0FycmF5QnVmZmVyVmlldyo+KHJlc3VsdCkpIHsKICAgICAgICAgaWYgKCF2aWV3LT5pc05ldXRl
cmVkKCkpCkBAIC0xMTIsOCArMTA5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
ZW5lcmljVHlwZQogICAgIHVuc2lnbmVkIG9mZnNldDsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpID49IDIpIHsKICAgICAgICAgZG91YmxlIG9mZnNldE51bWJlciA9IGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLnRvSW50ZWdlcihleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkob2Zmc2V0TnVtYmVyIDwgMCkpCiAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dWTVJhbmdlRXJyb3IoZXhlYywgc2NvcGUsICJPZmZzZXQgc2hv
dWxkIG5vdCBiZSBuZWdhdGl2ZSIpOwogICAgICAgICBvZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3RkOjptaW4ob2Zmc2V0TnVtYmVyLCBzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkpKTsKQEAgLTEzNyw4ICsxMzMsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgfSBlbHNlCiAgICAgICAg
IGxlbmd0aCA9IHNvdXJjZUFycmF5LT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
KS50b1VJbnQzMihleGVjKTsKIAotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICB0aGlzT2Jq
ZWN0LT5zZXQoZXhlYywgb2Zmc2V0LCBzb3VyY2VBcnJheSwgMCwgbGVuZ3RoLCBDb3B5VHlwZTo6
VW5vYnNlcnZhYmxlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtMTU2LDE0ICsxNTEsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5l
cmljVHlwZQogCiAgICAgbG9uZyBsZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKICAgICBs
b25nIHRvID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAwLCBsZW5n
dGgpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBlbmNvZGVkSlNWYWx1ZSgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIGxvbmcgZnJvbSA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0
YXJ0T3JFbmQoZXhlYywgMSwgbGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBsb25nIGZpbmFsID0gYXJn
dW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAyLCBsZW5ndGgsIGxlbmd0aCk7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGVu
Y29kZWRKU1ZhbHVlKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAKICAgICBpZiAoZmluYWwgPCBmcm9tKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGV4ZWMtPnRoaXNWYWx1ZSgpKTsKQEAgLTE5Niw4ICsxODgsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgSlNWYWx1ZSB2YWx1ZVRvRmlu
ZCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogCiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmd1bWVudENs
YW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIGxlbmd0aCk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVySGFzQmVl
bkRldGFjaGVkRXJyb3JNZXNzYWdlKTsKQEAgLTI0Miw4ICsyMzMsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAKICAgICBKU1ZhbHVlIHZhbHVlVG9GaW5kID0g
ZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmd1bWVudENsYW1wZWRJ
bmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIGxlbmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBpZiAo
dGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2Fn
ZSk7CkBAIC0yNzgsMTIgKzI2OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdl
bmVyaWNUeXBlCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmplY3QtPmxlbmd0aCgp
OwogCiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcigqZXhlYywgc2VwYXJhdG9yLCBsZW5n
dGgpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAgam9pbmVyLmFwcGVu
ZCgqZXhlYywgdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkpKTsKLSAgICAgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoam9pbmVyLmpvaW4oKmV4ZWMpKTsKICAgICB9OwpAQCAtMjk1LDgg
KzI4Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICB9
CiAKICAgICBKU1N0cmluZyogc2VwYXJhdG9yU3RyaW5nID0gc2VwYXJhdG9yVmFsdWUudG9TdHJp
bmcoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5p
c05ldXRlcmVkKCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCB0eXBlZEFycmF5QnVmZmVySGFzQmVlbkRldGFjaGVkRXJyb3JNZXNzYWdlKTsKQEAgLTMzMyw4
ICszMjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAg
ICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcm9tRG91YmxlKTsKICAgICB9
CiAKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgdHlwZWRBcnJh
eUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2FnZSk7CkBAIC00MzksMTEgKzQyNSw5IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICB1bnNpZ25lZCB0
aGlzTGVuZ3RoID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CiAKICAgICB1bnNpZ25lZCBiZWdpbiA9
IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgdGhpc0xlbmd0aCk7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGVu
Y29kZWRKU1ZhbHVlKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgdW5zaWduZWQgZW5kID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3Rh
cnRPckVuZChleGVjLCAxLCB0aGlzTGVuZ3RoLCB0aGlzTGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAg
IGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVySGFzQmVlbkRldGFjaGVkRXJyb3JN
ZXNzYWdlKTsKQEAgLTQ2MSw4ICs0NDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdlbmVyaWNUeXBlCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2FsbGVlLT5nbG9i
YWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9y
YWdlVHlwZSk7CiAgICAgICAgIHJldHVybiBWaWV3Q2xhc3M6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
ZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogICAgIH0pOwotICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAog
ICAgIEFTU0VSVCghcmVzdWx0LT5pc05ldXRlcmVkKCkpOwogICAgIGlmICh0aGlzT2JqZWN0LT5p
c05ldXRlcmVkKCkpCkBAIC01NjUsOCArNTQ4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnZW5lcmljVHlwZQogICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVyKGxlbmd0aCkpOwogCiAg
ICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdChleGVjLCBzcGVjaWVzLCBhcmdzLCAic3Bl
Y2llcyBpcyBub3QgYSBjb25zdHJ1Y3RvciIpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGlm
IChqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ocmVzdWx0KSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04MTYsOCArODE2LDcgQEAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXko
RXhlYwogICAgICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9y
SW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihleGVjLCBBcnJheVdpdGhBcnJheVN0b3JhZ2Us
IG5ld1RhcmdldCk7CiAgICAgZWxzZQogICAgICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3Qt
PmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgcHJvZmlsZSwg
bmV3VGFyZ2V0KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKIAogICAgIHJldHVybiBBcnJheUFsbG9jYXRpb25Qcm9maWxlOjp1cGRhdGVMYXN0QWxsb2Nh
dGlvbkZvcihwcm9maWxlLCBKU0FycmF5OjpjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBp
bml0aWFsTGVuZ3RoKSk7CiB9CkBAIC04MzIsOCArODMxLDcgQEAgaW5saW5lIEpTQXJyYXkqIGNv
bnN0cnVjdEFycmF5KEV4ZWNTdGF0ZQogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmlu
Z0FsbG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgY29uc3RydWN0QXJyYXko
ZXhlYywgc3RydWN0dXJlLCB2YWx1ZXMpKTsKIH0KIApAQCAtODQ3LDggKzg0NSw3IEBAIGlubGlu
ZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
clByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMsIHByb2ZpbGUsIG5ld1RhcmdldCk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgcmV0dXJuIEFy
cmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUsIGNv
bnN0cnVjdEFycmF5KGV4ZWMsIHN0cnVjdHVyZSwgdmFsdWVzLCBsZW5ndGgpKTsKIH0KIApAQCAt
ODYyLDggKzg1OSw3IEBAIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheU5lZ2F0aXZlSW4K
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2Jq
ZWN0LT5hcnJheVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMsIHByb2Zp
bGUsIG5ld1RhcmdldCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVs
bHB0cik7CiAgICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxv
Y2F0aW9uRm9yKHByb2ZpbGUsIGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKGV4ZWMsIHN0
cnVjdHVyZSwgdmFsdWVzLCBsZW5ndGgpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAko
cmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjAsOCArNjYwLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRQogICAgIH0KIAogICAgIFN0
cmluZyBzID0geC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKIAogICAgIGlmIChzLmlzOEJpdCgpKSB7CiAgICAgICAgIExpdGVyYWxQYXJzZXI8TENo
YXI+IHByZXBhcnNlcihleGVjLCBzLmNoYXJhY3RlcnM4KCksIHMubGVuZ3RoKCksIE5vblN0cmlj
dEpTT04pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNv
cmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzgsOCArNzc4
LDcgQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6aW5zdGFudGlhdGVEZWNsYXJhdAogICAgICAgICBK
U01vZHVsZVJlY29yZCogaW1wb3J0ZWRNb2R1bGUgPSBob3N0UmVzb2x2ZUltcG9ydGVkTW9kdWxl
KGV4ZWMsIGltcG9ydEVudHJ5Lm1vZHVsZVJlcXVlc3QpOwogICAgICAgICBpZiAoaW1wb3J0RW50
cnkuaXNOYW1lc3BhY2Uodm0pKSB7CiAgICAgICAgICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVj
dCogbmFtZXNwYWNlT2JqZWN0ID0gaW1wb3J0ZWRNb2R1bGUtPmdldE1vZHVsZU5hbWVzcGFjZShl
eGVjKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKICAgICAgICAgICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7CiAgICAgICAg
ICAgICBzeW1ib2xUYWJsZVB1dFRvdWNoV2F0Y2hwb2ludFNldChtb2R1bGVFbnZpcm9ubWVudCwg
ZXhlYywgaW1wb3J0RW50cnkubG9jYWxOYW1lLCBuYW1lc3BhY2VPYmplY3QsIC8qIHNob3VsZFRo
cm93UmVhZE9ubHlFcnJvciAqLyBmYWxzZSwgLyogaWdub3JlUmVhZE9ubHlFcnJvcnMgKi8gdHJ1
ZSwgcHV0UmVzdWx0KTsKICAgICAgICAgfSBlbHNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUzLDggKzI1Myw3IEBAIExvY2FsPFVua25vd24+IFN0cmluZ2lmaWVyOjpzdHJpbmdpZnko
SGEKICAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdChtX2V4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBMb2NhbDxVbmtub3duPih2bSwganNOdWxsKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIExvY2FsPFVua25vd24+KHZtLCBqc051bGwoKSkpOwogCiAgICAgUHJv
cGVydHlOYW1lRm9yRnVuY3Rpb25DYWxsIGVtcHR5UHJvcGVydHlOYW1lKHZtLnByb3BlcnR5TmFt
ZXMtPmVtcHR5SWRlbnRpZmllcik7CiAgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllciwgdmFsdWUuZ2V0KCkpOwpAQCAtMjYyLDggKzI2MSw3
IEBAIExvY2FsPFVua25vd24+IFN0cmluZ2lmaWVyOjpzdHJpbmdpZnkoSGEKICAgICBTdHJpbmdC
dWlsZGVyIHJlc3VsdDsKICAgICBpZiAoYXBwZW5kU3RyaW5naWZpZWRWYWx1ZShyZXN1bHQsIHZh
bHVlLmdldCgpLCBvYmplY3QsIGVtcHR5UHJvcGVydHlOYW1lKSAhPSBTdHJpbmdpZnlTdWNjZWVk
ZWQpCiAgICAgICAgIHJldHVybiBMb2NhbDxVbmtub3duPih2bSwganNVbmRlZmluZWQoKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIExvY2Fs
PFVua25vd24+KHZtLCBqc051bGwoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
TG9jYWw8VW5rbm93bj4odm0sIGpzTnVsbCgpKSk7CiAKICAgICByZXR1cm4gTG9jYWw8VW5rbm93
bj4odm0sIGpzU3RyaW5nKG1fZXhlYywgcmVzdWx0LnRvU3RyaW5nKCkpKTsKIH0KQEAgLTI4Miw4
ICsyODAsNyBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgU3RyaW5naWZpZXI6OnRvSlNPCiAgICAg
ICAgIHJldHVybiB2YWx1ZTsKIAogICAgIEpTVmFsdWUgdG9KU09ORnVuY3Rpb24gPSBzbG90Lmdl
dFZhbHVlKG1fZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dG9KU09OKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gdG9KU09OSW1w
bCh2YWx1ZSwgdG9KU09ORnVuY3Rpb24sIHByb3BlcnR5TmFtZSk7CiB9CiAKQEAgLTMwNiw4ICsz
MDMsNyBAQCBTdHJpbmdpZmllcjo6U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVyCiAKICAgICAv
LyBDYWxsIHRoZSB0b0pTT04gZnVuY3Rpb24uCiAgICAgdmFsdWUgPSB0b0pTT04odmFsdWUsIHBy
b3BlcnR5TmFtZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZ2lmeUZhaWxlZDsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBTdHJpbmdpZnlGYWlsZWQpOwogCiAgICAgLy8gQ2FsbCB0aGUgcmVwbGFjZXIgZnVuY3Rpb24u
CiAgICAgaWYgKG1fcmVwbGFjZXJDYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSkgewpAQCAtMzE1
LDggKzMxMSw3IEBAIFN0cmluZ2lmaWVyOjpTdHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXIKICAg
ICAgICAgYXJncy5hcHBlbmQocHJvcGVydHlOYW1lLnZhbHVlKG1fZXhlYykpOwogICAgICAgICBh
cmdzLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgIHZhbHVlID0gY2FsbChtX2V4ZWMsIG1fcmVwbGFj
ZXIuZ2V0KCksIG1fcmVwbGFjZXJDYWxsVHlwZSwgbV9yZXBsYWNlckNhbGxEYXRhLCBob2xkZXIs
IGFyZ3MpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZ2lmeUZhaWxlZDsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgU3RyaW5naWZ5RmFpbGVkKTsKICAgICB9CiAKICAgICBpZiAoKHZhbHVlLmlzVW5k
ZWZpbmVkKCkgfHwgdmFsdWUuaXNTeW1ib2woKSkgJiYgIWhvbGRlci0+aW5oZXJpdHMoSlNBcnJh
eTo6aW5mbygpKSkKQEAgLTMyOSw4ICszMjQsNyBAQCBTdHJpbmdpZmllcjo6U3RyaW5naWZ5UmVz
dWx0IFN0cmluZ2lmaWVyCiAKICAgICB2YWx1ZSA9IHVud3JhcEJveGVkUHJpbWl0aXZlKG1fZXhl
YywgdmFsdWUpOwogCi0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZ2lmeUZhaWxlZDsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBTdHJpbmdpZnlGYWlsZWQpOwogCiAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKSB7CiAgICAg
ICAgIGlmICh2YWx1ZS5pc1RydWUoKSkKQEAgLTM4MiwxNiArMzc2LDEzIEBAIFN0cmluZ2lmaWVy
OjpTdHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXIKIAogICAgIGJvb2wgaG9sZGVyU3RhY2tXYXNF
bXB0eSA9IG1faG9sZGVyU3RhY2suaXNFbXB0eSgpOwogICAgIG1faG9sZGVyU3RhY2suYXBwZW5k
KEhvbGRlcih2bSwgbV9leGVjLCBvYmplY3QpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gU3RyaW5naWZ5RmFpbGVkOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIFN0cmluZ2lmeUZhaWxlZCk7CiAgICAgaWYgKCFob2xkZXJTdGFj
a1dhc0VtcHR5KQogICAgICAgICByZXR1cm4gU3RyaW5naWZ5U3VjY2VlZGVkOwogCiAgICAgZG8g
ewotICAgICAgICB3aGlsZSAobV9ob2xkZXJTdGFjay5sYXN0KCkuYXBwZW5kTmV4dFByb3BlcnR5
KCp0aGlzLCBidWlsZGVyKSkgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5naWZ5RmFpbGVkOwotICAgICAg
ICB9CisgICAgICAgIHdoaWxlIChtX2hvbGRlclN0YWNrLmxhc3QoKS5hcHBlbmROZXh0UHJvcGVy
dHkoKnRoaXMsIGJ1aWxkZXIpKQorICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgU3RyaW5naWZ5RmFpbGVkKTsKICAgICAgICAgbV9ob2xkZXJTdGFjay5yZW1vdmVMYXN0KCk7
CiAgICAgfSB3aGlsZSAoIW1faG9sZGVyU3RhY2suaXNFbXB0eSgpKTsKICAgICByZXR1cm4gU3Ry
aW5naWZ5U3VjY2VlZGVkOwpAQCAtNDU5LDggKzQ1MCw3IEBAIGJvb2wgU3RyaW5naWZpZXI6Okhv
bGRlcjo6YXBwZW5kTmV4dFByb3AKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAg
IFByb3BlcnR5TmFtZUFycmF5IG9iamVjdFByb3BlcnR5TmFtZXMoZXhlYywgUHJvcGVydHlOYW1l
TW9kZTo6U3RyaW5ncyk7CiAgICAgICAgICAgICAgICAgbV9vYmplY3QtPm1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5TmFtZXMobV9vYmplY3QuZ2V0KCksIGV4ZWMsIG9iamVjdFByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAg
ICAgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9IG9iamVjdFByb3BlcnR5TmFtZXMucmVsZWFzZURh
dGEoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fc2l6ZSA9IG1fcHJvcGVydHlOYW1l
cy0+cHJvcGVydHlOYW1lVmVjdG9yKCkuc2l6ZSgpOwpAQCAtNDkzLDggKzQ4Myw3IEBAIGJvb2wg
U3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3AKICAgICAgICAgICAgICAgICB2YWx1
ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaW5kZXgpOwogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgIHZhbHVlID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICB9CiAK
ICAgICAgICAgLy8gQXBwZW5kIHRoZSBzZXBhcmF0b3Igc3RyaW5nLgpAQCAtNTExLDggKzUwMCw3
IEBAIGJvb2wgU3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3AKICAgICAgICAgaWYg
KCFtX29iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KG1fb2JqZWN0Lmdl
dCgpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFt
ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNl
KTsKIAogICAgICAgICByb2xsQmFja1BvaW50ID0gYnVpbGRlci5sZW5ndGgoKTsKIApAQCAtNjQ3
LDggKzYzNSw3IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAg
ICAgICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBzbG90LmdldFZhbHVlKG1fZXhlYywgaW5k
ZXgpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBp
blZhbHVlID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051
bGwoKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNW
YWx1ZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChpblZhbHVlLmlzT2JqZWN0KCkpIHsKQEAgLTY2NSw4ICs2NTIsNyBAQCBO
RVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAg
ICAgIGFycmF5LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgoYXJyYXksIG1f
ZXhlYywgaW5kZXhTdGFjay5sYXN0KCkpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KG1fZXhlYywgaW5kZXhTdGFjay5sYXN0
KCksIGZpbHRlcmVkVmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAg
ICAgICAgICAgIGluZGV4U3RhY2subGFzdCgpKys7CiAgICAgICAgICAgICAgICAgZ290byBhcnJh
eVN0YXJ0VmlzaXRNZW1iZXI7CiAgICAgICAgICAgICB9CkBAIC02ODIsOCArNjY4LDcgQEAgTkVW
RVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAgICAgIGlu
ZGV4U3RhY2suYXBwZW5kKDApOwogICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5k
KFByb3BlcnR5TmFtZUFycmF5KG1fZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncykpOwog
ICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1l
cyhvYmplY3QsIG1fZXhlYywgcHJvcGVydHlTdGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgp
KTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI6CiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKQEAg
LTcwNSw4ICs2OTAsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1
CiAgICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAg
ICAgICAgICAgLy8gVGhlIGhvbGRlciBtYXkgYmUgbW9kaWZpZWQgYnkgdGhlIHJldml2ZXIgZnVu
Y3Rpb24gc28gYW55IGxvb2t1cCBtYXkgdGhyb3cKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxs
KCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgp
KTsKIAogICAgICAgICAgICAgICAgIGlmIChpblZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgc3RhdGVTdGFjay5hcHBlbmQoT2JqZWN0RW5kVmlzaXRNZW1iZXIpOwpAQCAt
NzI0LDggKzcwOCw3IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUK
ICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eShvYmplY3QsIG1fZXhlYywgcHJvcCk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dChvYmplY3QsIG1fZXhlYywgcHJv
cCwgZmlsdGVyZWRWYWx1ZSwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwor
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAg
ICAgICAgICAgICAgICAgaW5kZXhTdGFjay5sYXN0KCkrKzsKICAgICAgICAgICAgICAgICBnb3Rv
IG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI7CiAgICAgICAgICAgICB9CkBAIC03NjEsOCArNzQ0LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdQogICAgIGlmICghZXhl
Yy0+YXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHNj
b3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkpTT04ucGFyc2UgcmVxdWlyZXMg
YXQgbGVhc3Qgb25lIHBhcmFtZXRlciIpKSk7CiAgICAgSlNTdHJpbmc6OlNhZmVWaWV3IHNvdXJj
ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52aWV3KGV4ZWMp
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSB1bmZpbHRlcmVkOwogICAgIExvY2Fs
U2NvcGUgbG9jYWxTY29wZSh2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MCwxNCArMzYwLDEy
IEBAIGJvb2wgb3JkaW5hcnlTZXRTbG93KEV4ZWNTdGF0ZSogZXhlYywgSlMKIAogICAgICAgICAv
LyA5LjEuOS4xLTIgTGV0IG93bkRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShQKS4KICAg
ICAgICAgYm9vbCBvd25EZXNjcmlwdG9yRm91bmQgPSBjdXJyZW50LT5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBvd25EZXNjcmlwdG9yKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgICAgIGlm
ICghb3duRGVzY3JpcHRvckZvdW5kKSB7CiAgICAgICAgICAgICAvLyA5LjEuOS4xLTMtYSBMZXQg
cGFyZW50IGJlID8gTy5bW0dldFByb3RvdHlwZU9mXV0oKS4KICAgICAgICAgICAgIEpTVmFsdWUg
cHJvdG90eXBlID0gY3VycmVudC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwog
CiAgICAgICAgICAgICAvLyA5LjEuOS4xLTMtYiBJZiBwYXJlbnQgaXMgbm90IG51bGwsIHRoZW4K
ICAgICAgICAgICAgIGlmICghcHJvdG90eXBlLmlzTnVsbCgpKSB7CkBAIC0zOTgsOCArMzk2LDcg
QEAgYm9vbCBvcmRpbmFyeVNldFNsb3coRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICBKU09i
amVjdCogcmVjZWl2ZXJPYmplY3QgPSBhc09iamVjdChyZWNlaXZlcik7CiAgICAgICAgIFByb3Bl
cnR5RGVzY3JpcHRvciBleGlzdGluZ0Rlc2NyaXB0b3I7CiAgICAgICAgIGJvb2wgZXhpc3RpbmdE
ZXNjcmlwdG9yRm91bmQgPSByZWNlaXZlck9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGV4ZWMsIHByb3BlcnR5TmFtZSwgZXhpc3RpbmdEZXNjcmlwdG9yKTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgICAgIC8vIDku
MS45LjEtNC1kIElmIGV4aXN0aW5nRGVzY3JpcHRvciBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCiAg
ICAgICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3JGb3VuZCkgewpAQCAtMTI5MCw4ICsxMjg3LDcg
QEAgYm9vbCBKU09iamVjdDo6c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlYwogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGhpcy0+aXNFeHRlbnNpYmxlKGV4
ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKICAgICBp
ZiAoIWlzRXh0ZW5zaWJsZSkgewogICAgICAgICBpZiAoc2hvdWxkVGhyb3dJZkNhbnRTZXQpCkBA
IC0xNTMzLDggKzE1MjksNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNhbGxUb1By
aW1pCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNW
YWx1ZSBmdW5jdGlvbiA9IG9iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIHNjb3BlLmV4Y2Vw
dGlvbigpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigp
KTsKICAgICBpZiAoZnVuY3Rpb24uaXNVbmRlZmluZWQoKSAmJiBtb2RlID09IFR5cGVIaW50TW9k
ZTo6VGFrZXNIaW50KQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIENhbGxEYXRhIGNh
bGxEYXRhOwpAQCAtMTU2MCw5ICsxNTU1LDggQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBjYWxsVG9QcmltaQogICAgIH0KIAogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBm
dW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBjb25zdF9jYXN0PEpTT2JqZWN0Kj4ob2JqZWN0
KSwgY2FsbEFyZ3MpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHNjb3BlLmV4Y2Vw
dGlvbigpKTsKICAgICBBU1NFUlQoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gc2NvcGUuZXhjZXB0
aW9uKCk7CiAgICAgaWYgKHJlc3VsdC5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gbW9kZSA9
PSBUeXBlSGludE1vZGU6OkRvZXNOb3RUYWtlSGludCA/IEpTVmFsdWUoKSA6IHRocm93VHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlN5bWJvbC50b1ByaW1pdGl2ZSByZXR1cm5l
ZCBhbiBvYmplY3QiKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE2OTksOCArMTY5Myw3IEBA
IGJvb2wgSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShFeGVjU3QKICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIEpT
VmFsdWUgb2JqZWN0VmFsdWUgPSBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAg
ICAgaWYgKCFvYmplY3RWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBvYmplY3QgPSBhc09iamVjdChvYmplY3RWYWx1ZSk7CkBAIC0xNzIzLDEyICsx
NzE2LDEwIEBAIHZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhv
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOwogCiAgICAgSlNWYWx1ZSBuZXh0UHJvdG8gPSBvYmplY3QtPmdldFBy
b3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAgICAgaWYgKG5leHRQcm90by5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNzM5
LDExICsxNzMwLDkgQEAgdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdAog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcHJvdG90eXBlLT5tZXRob2RU
YWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlLCBleGVjLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKICAgICAgICAgbmV4dFByb3RvID0gcHJvdG90eXBlLT5nZXRQcm90b3R5cGUodm0sIGV4
ZWMpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
ICAgICAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIHByb3RvdHlwZSA9IGFzT2JqZWN0KG5leHRQcm90byk7CkBAIC0xODQzLDggKzE4MzIsNyBA
QCBkb3VibGUgSlNPYmplY3Q6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlCiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgSlNWYWx1ZSBwcmltaXRpdmUgPSB0b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJOdW1iZXIpOwot
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIC8vIHNob3VsZCBiZSBwaWNrZWQg
dXAgc29vbiBpbiBOb2Rlcy5jcHAKLSAgICAgICAgcmV0dXJuIDAuMDsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCAwLjApOyAvLyBzaG91bGQgYmUgcGlja2VkIHVwIHNvb24gaW4gTm9k
ZXMuY3BwCiAgICAgcmV0dXJuIHByaW1pdGl2ZS50b051bWJlcihleGVjKTsKIH0KIApAQCAtMTg1
Myw4ICsxODQxLDcgQEAgSlNTdHJpbmcqIEpTT2JqZWN0Ojp0b1N0cmluZyhFeGVjU3RhdGUqIAog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIEpTVmFsdWUgcHJpbWl0aXZlID0gdG9QcmltaXRpdmUoZXhlYywgUHJl
ZmVyU3RyaW5nKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBqc0VtcHR5U3RyaW5nKGV4ZWMpKTsKICAgICByZXR1cm4gcHJpbWl0aXZlLnRvU3RyaW5n
KGV4ZWMpOwogfQogCkBAIC0zMDc4LDggKzMwNjUsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVP
d25Ob25JbmRleFByb3BlcnR5CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7CiAgICAg
Ym9vbCBpc0N1cnJlbnREZWZpbmVkID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHBy
b3BlcnR5TmFtZSwgY3VycmVudCk7CiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSB0aGlzLT5pc0V4
dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CiAgICAgcmV0dXJuIHZhbGlkYXRlQW5kQXBwbHlQcm9wZXJ0eURlc2NyaXB0
b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBpc0V4dGVuc2libGUsIGRlc2NyaXB0b3IsIGlz
Q3VycmVudERlZmluZWQsIGN1cnJlbnQsIHRocm93RXhjZXB0aW9uKTsKIH0KIApAQCAtMzE4MCwx
MiArMzE2NiwxMCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKCiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFt
ZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUobW9kZSwgSlNP
YmplY3RQcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwogCiAgICAgSlNWYWx1ZSBuZXh0UHJvdG8gPSBvYmplY3QtPmdldFByb3Rv
dHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAg
ICAgaWYgKG5leHRQcm90by5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMTk2LDEx
ICszMTgwLDkgQEAgdm9pZCBKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcHJvdG90eXBlLT5tZXRob2RUYWJs
ZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlLCBleGVjLCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgp
KTsKICAgICAgICAgbmV4dFByb3RvID0gcHJvdG90eXBlLT5nZXRQcm90b3R5cGUodm0sIGV4ZWMp
OwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAg
ICAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IHByb3RvdHlwZSA9IGFzT2JqZWN0KG5leHRQcm90byk7CkBAIC0zMjE1LDggKzMxOTcsNyBAQCBK
U1ZhbHVlIEpTT2JqZWN0OjpnZXRNZXRob2QoRXhlY1N0YXRlKiBlCiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBtZXRob2QgPSBnZXQoZXhl
YywgaWRlbnQpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
VmFsdWUoKSk7CiAKICAgICBpZiAoIW1ldGhvZC5pc0NlbGwoKSkgewogICAgICAgICBpZiAobWV0
aG9kLmlzVW5kZWZpbmVkT3JOdWxsKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDE3ICs0MCwxNCBAQCB2b2lkIGNyZWF0ZUxpc3RGcm9tQXJyYXlMaWtlKEV4ZWNTdGF0
ZSogCiAgICAgCiAgICAgVmVjdG9yPEpTVmFsdWU+IHJlc3VsdDsKICAgICBKU1ZhbHVlIGxlbmd0
aFByb3BlcnR5ID0gYXJyYXlMaWtlVmFsdWUuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0
dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgZG91Ymxl
IGxlbmd0aEFzRG91YmxlID0gbGVuZ3RoUHJvcGVydHkudG9MZW5ndGgoZXhlYyk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3Ro
QXNEb3VibGUgPj0gMC4wICYmIGxlbmd0aEFzRG91YmxlID09IHN0ZDo6dHJ1bmMobGVuZ3RoQXNE
b3VibGUpKTsKICAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVu
Z3RoQXNEb3VibGUpOwogICAgIGZvciAodWludDY0X3QgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0
aDsgaW5kZXgrKykgewogICAgICAgICBKU1ZhbHVlIG5leHQgPSBhcnJheUxpa2VWYWx1ZS5nZXQo
ZXhlYywgaW5kZXgpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOwogICAgICAgICAKICAgICAgICAgUnVudGltZVR5cGUgdHlwZSA9IHJ1bnRpbWVUeXBl
Rm9yVmFsdWUobmV4dCk7CiAgICAgICAgIGlmICghKHR5cGUgJiBsZWdhbFR5cGVzRmlsdGVyKSkg
ewpAQCAtOTksOCArOTYsNyBAQCBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29m
PENhCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgYm9vbCBmb3VuZCA9IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0
aGlzKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHJldHVybiBjYWxsYmFjayhmb3Vu
ZCwgc2xvdCk7CiB9CiAKQEAgLTExNSwxNSArMTExLDEzIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBK
U09iamVjdDo6Z2V0UHJvcGVydHkKICAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqc3Ry
dWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgaWYgKHN0
cnVjdHVyZS5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFs
c2UpOwogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKICAgICAgICAgaWYgKExJS0VMWShzdHJ1
Y3R1cmUuY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9PSBkZWZhdWx0R2V0
UHJvdG90eXBlIHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSkpCiAgICAgICAgICAgICBwcm90b3R5cGUgPSBz
dHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
cHJvdG90eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKCFwcm90b3R5cGUuaXNPYmplY3QoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTE0OSwxNiArMTQzLDE0IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBK
U09iamVjdDo6Z2V0Tm9uSW5kZXgKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChz
dHJ1Y3R1cmUuY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5U2xvdChvYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKICAg
ICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFBy
b3RvdHlwZSA9PSBkZWZhdWx0R2V0UHJvdG90eXBlIHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBl
KCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSkpCiAgICAg
ICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgcHJvdG90eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0s
IGV4ZWMpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFwcm90b3R5cGUuaXNP
YmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlz
ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDggKzEwMyw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RydWN0dXJlKiBwcm9taXNlU3RydWN0
dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhl
Yy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+cHJvbWlzZVN0cnVjdHVyZSgpKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgSlNQcm9taXNlKiBwcm9taXNlID0gSlNQcm9taXNlOjpjcmVhdGUo
dm0sIHByb21pc2VTdHJ1Y3R1cmUpOwogICAgIHByb21pc2UtPmluaXRpYWxpemUoZXhlYywgZ2xv
YmFsT2JqZWN0LCBleGVjLT5hcmd1bWVudCgwKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHAJKHJldmlzaW9uIDIw
NjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsNyBAQCBKU1Byb21pc2VEZWZlcnJlZCog
SlNQcm9taXNlRGVmZXJyZWQ6OmNyCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgSlNWYWx1ZSBkZWZlcnJlZCA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KGV4
ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5wcm9taXNlQ29uc3RydWN0b3IoKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBKU1Zh
bHVlIHByb21pc2UgPSBkZWZlcnJlZC5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRp
bk5hbWVzKCkucHJvbWlzZVByaXZhdGVOYW1lKCkpOwogICAgIEFTU0VSVChwcm9taXNlLmluaGVy
aXRzKEpTUHJvbWlzZTo6aW5mbygpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkocmV2aXNpb24g
MjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyOSw4ICsxMjksNyBAQCBpbmxpbmUgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKiBwcm9wZXJ0CiAgICAgICAgIC8vIFNvIGRpc2FibGUgaW5kZXhl
ZCBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBwaGFzZSBieSBzZXR0aW5nIHxpbmRleGVkTGVuZ3RofCB0
byAwLgogICAgICAgICBpbmRleGVkTGVuZ3RoID0gMDsKICAgICAgICAgYmFzZS0+bWV0aG9kVGFi
bGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKICAgICB9CiAKICAgICBBU1NFUlQocHJvcGVydHlOYW1lcy5zaXpl
KCkgPCBVSU5UMzJfTUFYKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDYzMzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsOCArNTgsNyBAQCBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yKiBKU1Byb3BlcnR5TmFtZUl0CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKiBlbnVtZXJhdG9yID0gcHJvcGVydHlOYW1lRW51bWVyYXRvcihleGVjLCBpdGVyYXRl
ZE9iamVjdCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CiAgICAgcmV0dXJuIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1
cmUsIGl0ZXJhdGVkT2JqZWN0LCBlbnVtZXJhdG9yKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjA2LDEzICsyMDYsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGlzVW5zY29wYWJsZShFeGVjU3Rh
dAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU1ZhbHVlIHVuc2NvcGFibGVzID0gb2Jq
ZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuc2NvcGFibGVzU3ltYm9sKTsK
LSAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAg
ICBpZiAoIXVuc2NvcGFibGVzLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBKU1ZhbHVlIGJsb2NrZWQgPSBqc0Nhc3Q8SlNPYmplY3QqPih1bnNjb3BhYmxlcyktPmdldChl
eGVjLCBpZGVudCk7Ci0gICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CiAKICAgICByZXR1cm4gYmxvY2tlZC50b0Jvb2xlYW4oZXhlYyk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAy
MDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDggKzc4LDcgQEAgYm9vbCBKU1N0cmluZzo6ZXF1YWxTbG93Q2Fz
ZShFeGVjU3RhdGUqIAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBTdHJpbmcgc3RyMSA9IHZhbHVlKGV4ZWMpOwogICAgIFN0cmluZyBzdHIyID0gb3RoZXIt
PnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7
CiAgICAgcmV0dXJuIFdURjo6ZXF1YWwoKnN0cjEuaW1wbCgpLCAqc3RyMi5pbXBsKCkpOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2lu
ZXIuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZ0pvaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw4ICsxMDgsNyBAQCBK
U1ZhbHVlIEpTU3RyaW5nSm9pbmVyOjpqb2luKEV4ZWNTdGF0ZSYgCiAgICAgQVNTRVJUKG1fc3Ry
aW5ncy5zaXplKCkgPD0gbV9zdHJpbmdzLmNhcGFjaXR5KCkpOwogCiAgICAgdW5zaWduZWQgbGVu
Z3RoID0gam9pbmVkTGVuZ3RoKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJl
dHVybiBqc0VtcHR5U3RyaW5nKCZzdGF0ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWF0aGlhcyBC
eW5lbnMgKG1hdGhpYXNAcWl3aS5iZSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTU4NCw4ICs1ODQs
NyBAQCBKU1ZhbHVlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQCiAgICAgICAgICAg
ICBzdGFydFBhcnNlQXJyYXk6CiAgICAgICAgICAgICBjYXNlIFN0YXJ0UGFyc2VBcnJheTogewog
ICAgICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShtX2V4
ZWMsIDApOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICBv
YmplY3RTdGFjay5hcHBlbmQoYXJyYXkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZG9Q
YXJzZUFycmF5U3RhcnRFeHByZXNzaW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWFwQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hcEJhc2UuaAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWFwQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw4ICs3NSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIEhhc2hNYXBJbXBsVHlwZSogaW1w
bCA9IEhhc2hNYXBJbXBsVHlwZTo6Y3JlYXRlKGV4ZWMsIHZtKTsKLSAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgbV9tYXAuc2V0KHZtLCB0
aGlzLCBpbXBsKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01hcENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEsMTggKzYxLDE1IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnMKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rp
b24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1Y3R1cmUqIG1hcFN0
cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMs
IGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgSlNNYXAqIG1hcCA9IEpTTWFwOjpjcmVhdGUoZXhlYywgdm0sIG1h
cFN0cnVjdHVyZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBl
eGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmluZWRPck51bGwoKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtYXApOwogCiAgICAgSlNWYWx1ZSBhZGRl
ckZ1bmN0aW9uID0gbWFwLT5KU09iamVjdDo6Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5zZXQpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0
aW9uQ2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgYWRkZXJGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2Fs
bERhdGEoYWRkZXJGdW5jdGlvbiwgYWRkZXJGdW5jdGlvbkNhbGxEYXRhKTsKQEAgLTg3LDEyICs4
NCwxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAg
IH0KIAogICAgICAgICBKU1ZhbHVlIGtleSA9IG5leHRJdGVtLmdldChleGVjLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oMCkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwogCiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBuZXh0SXRlbS5nZXQoZXhlYywg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1
bWVudHM7CiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoa2V5KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgs
IDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwNy0yMDA4LCAyMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTY1LDggKzE2NSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnUKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICB1aW50MzJf
dCB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShjbHozMih2YWx1ZSkpKTsK
IH0KIApAQCAtMTk1LDggKzE5NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0
aFByb3RvRnUKICAgICBhcmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYXJnc0NvdW50KTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJnc0NvdW50OyArK2kpIHsKICAgICAgICAgYXJn
cy51bmNoZWNrZWRBcHBlbmQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkudG9OdW1iZXIoZXhl
YykpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBpZiAoc3RkOjppc2lu
ZihhcmdzW2ldKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVO
dW1iZXIoK3N0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkpOwogICAgICAg
ICBtYXggPSBzdGQ6Om1heChmYWJzKGFyZ3NbaV0pLCBtYXgpOwpAQCAtMjk5LDggKzI5Nyw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnUKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBpbnQzMl90IGxlZnQgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgIGludDMyX3QgcmlnaHQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobGVmdCAqIHJpZ2h0
KSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQ
cm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExMiwxMiArMTEyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bW9kdWxlTG9hZGUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBjb25zdCBJZGVudGlmaWVyIG1vZHVsZUtleSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJv
cGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIFN0cmluZyBzb3Vy
Y2UgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IG1ha2VTb3Vy
Y2Uoc291cmNlLCBtb2R1bGVLZXkuaW1wbCgpKTsKIApAQCAtMTQ5LDggKzE0Nyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpKTsKIAogICAgIEpT
QXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgbW9kdWxl
UmVjb3JkLT5yZXF1ZXN0ZWRNb2R1bGVzKCkuc2l6ZSgpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
c2l6ZV90IGkgPSAwOwogICAgIGZvciAoYXV0byYga2V5IDogbW9kdWxlUmVjb3JkLT5yZXF1ZXN0
ZWRNb2R1bGVzKCkpCiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSsrLCBq
c1N0cmluZyhleGVjLCBrZXkuZ2V0KCkpKTsKQEAgLTE3MCw4ICsxNjcsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlCiAgICAgICAgIGRhdGFMb2coIkxvYWRlciBb
bGlua10gIiwgbW9kdWxlUmVjb3JkLT5tb2R1bGVLZXkoKSwgIlxuIik7CiAKICAgICBtb2R1bGVS
ZWNvcmQtPmxpbmsoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZl
RXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDggKzY3LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcgogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG1lc3NhZ2UgPSBleGVjLT5hcmd1
bWVudCgwKTsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlv
bjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGpzQ2Fz
dDxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpLT5lcnJvclN0cnVjdHVy
ZSgpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgQVNTRVJUKGVycm9yU3RydWN0dXJlKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJv
clN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDggKzg5LDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBkb3VibGUgbiA9IGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA/IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpIDog
MDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1
YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAKICAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51bWJlck9iamVjdDo6Y3JlYXRlKGV4ZWMt
PnZtKCksIHN0cnVjdHVyZSk7CiAgICAgb2JqZWN0LT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZt
KCksIGpzTnVtYmVyKG4pKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09i
amVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMwLDggKzEzMCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTT2JqZWN0KiBj
b25zdHJ1Y3QKICAgICBpZiAobmV3VGFyZ2V0ICYmIG5ld1RhcmdldCAhPSBvYmplY3RDb25zdHJ1
Y3RvcikgewogICAgICAgICAvLyBhLiBSZXR1cm4gPyBPcmRpbmFyeUNyZWF0ZUZyb21Db25zdHJ1
Y3RvcihOZXdUYXJnZXQsICIlT2JqZWN0UHJvdG90eXBlJSIpLgogICAgICAgICBTdHJ1Y3R1cmUq
IG9iamVjdFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0
dXJlKGV4ZWMsIG5ld1RhcmdldCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RTdHJ1Y3R1cmVGb3JPYmpl
Y3RDb25zdHJ1Y3RvcigpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMsIG9iamVjdFN0cnVjdHVyZSk7CiAgICAgfQogCkBAIC0xNzIsOCArMTcxLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0LT5nZXRQ
cm90b3R5cGUoZXhlYy0+dm0oKSwgZXhlYykpOwogfQogCkBAIC0xOTEsOCArMTg5LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAgICBKU09iamVjdCogb2JqZWN0ID0gb2Jq
ZWN0VmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3RWYWx1ZSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBib29s
IHNob3VsZFRocm93SWZDYW50U2V0ID0gdHJ1ZTsKICAgICBib29sIGRpZFNldFByb3RvdHlwZSA9
IG9iamVjdC0+c2V0UHJvdG90eXBlKHZtLCBleGVjLCBwcm90b1ZhbHVlLCBzaG91bGRUaHJvd0lm
Q2FudFNldCk7CkBAIC0yMDcsOCArMjA0LDcgQEAgSlNWYWx1ZSBvYmplY3RDb25zdHJ1Y3Rvckdl
dE93blByb3BlcnR5RAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGlm
ICghb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIEpTT2JqZWN0
KiByZXN1bHQgPSBjb25zdHJ1Y3RPYmplY3RGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGRl
c2NyaXB0b3IpOwogICAgIGlmICghcmVzdWx0KQpAQCAtMjIyLDE4ICsyMTgsMTUgQEAgSlNWYWx1
ZSBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RAogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4
ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzKTsKICAgICBvYmplY3QtPm1l
dGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRp
ZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAog
ICAgIEpTT2JqZWN0KiBkZXNjcmlwdG9ycyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwot
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAK
ICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHByb3BlcnRpZXMpIHsKICAgICAgICAgUHJv
cGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRv
ciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvcik7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3Ip
CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI1NSwxMSArMjQ4LDkgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9w
ZXJ0eUtleShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUob2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywg
b2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsKIH0KIApAQCAtMjY4LDggKzI1OSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVj
dCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdENvbnN0cnVjdG9y
R2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhleGVjLCBvYmplY3QpKTsKIH0KIApAQCAtMjc5LDgg
KzI2OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3Qo
ZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvd25Q
cm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBEb250
RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CiB9CiAKQEAgLTI5MCw4ICsyNzksNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
SlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlz
KGV4ZWMsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3ltYm9scywgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZTo6SW5jbHVkZSkpOwogfQogCkBAIC0zMDEsOCArMjg5LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG93blByb3BlcnR5S2V5cyhleGVjLCBvYmpl
Y3QsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4
Y2x1ZGUpKTsKIH0KIApAQCAtMzExLDggKzI5OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb3duRW51bWVyYWIKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShvd25Qcm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0
eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhj
bHVkZSkpOwogfQogCkBAIC0zMzEsNDEgKzMxNywzNiBAQCBib29sIHRvUHJvcGVydHlEZXNjcmlw
dG9yKEV4ZWNTdGF0ZSogZXhlCiAKICAgICBpZiAoZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5lbnVtZXJhYmxlKSkgewogICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZW51
bWVyYWJsZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGZhbHNlKTsKICAgICAgICAgZGVzYy5zZXRFbnVtZXJhYmxlKHZhbHVlLnRvQm9vbGVhbihleGVj
KSk7Ci0gICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZmFsc2UpOwogCiAgICAgaWYgKGRlc2NyaXB0aW9uLT5oYXNQcm9wZXJ0eShleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uZmlndXJhYmxlKSkgewogICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uZmln
dXJhYmxlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZmFsc2UpOwogICAgICAgICBkZXNjLnNldENvbmZpZ3VyYWJsZSh2YWx1ZS50b0Jvb2xlYW4oZXhl
YykpOwotICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlCisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGZhbHNlKTsKIAogICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgaWYgKGRlc2NyaXB0aW9u
LT5oYXNQcm9wZXJ0eShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWUpKSB7CiAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBkZXNjcmlwdGlvbi0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS52YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGZhbHNlKTsKICAgICAgICAgZGVzYy5zZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgfSBlbHNl
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9IGVsc2UKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwog
CiAgICAgaWYgKGRlc2NyaXB0aW9uLT5oYXNQcm9wZXJ0eShleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkud3JpdGFibGUpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBkZXNjcmlwdGlvbi0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS53cml0YWJsZSk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgZGVzYy5z
ZXRXcml0YWJsZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOwotICAgIH0gZWxzZSBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNl
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIGlmIChk
ZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmdldCkp
IHsKICAgICAgICAgSlNWYWx1ZSBnZXQgPSBkZXNjcmlwdGlvbi0+Z2V0KGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5nZXQpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIGlmICghZ2V0LmlzVW5kZWZpbmVkKCkpIHsKICAg
ICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICAgICAgaWYgKGdldENhbGxEYXRh
KGdldCwgY2FsbERhdGEpID09IENhbGxUeXBlOjpOb25lKSB7CkBAIC0zNzQsMTMgKzM1NSwxMiBA
QCBib29sIHRvUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgICAgZGVzYy5zZXRHZXR0ZXIoZ2V0KTsKLSAgICB9IGVsc2UgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0gZWxzZQorICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKICAg
ICBpZiAoZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5zZXQpKSB7CiAgICAgICAgIEpTVmFsdWUgc2V0ID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuc2V0KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAoIXNldC5pc1VuZGVmaW5lZCgp
KSB7CiAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgICAgIGlmIChnZXRD
YWxsRGF0YShzZXQsIGNhbGxEYXRhKSA9PSBDYWxsVHlwZTo6Tm9uZSkgewpAQCAtMzg5LDggKzM2
OSw4IEBAIGJvb2wgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICBkZXNjLnNldFNldHRlcihzZXQpOwotICAgIH0gZWxz
ZSBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfSBlbHNlCisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsK
IAogICAgIGlmICghZGVzYy5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTQxNiw4ICszOTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIlByb3BlcnRpZXMgY2FuIG9ubHkgYmUgZGVmaW5lZCBvbiBPYmplY3RzLiIp
KTsKICAgICBKU09iamVjdCogb2JqID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwogICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsK
ICAgICBhdXRvIHN1Y2Nlc3MgPSB0b1Byb3BlcnR5RGVzY3JpcHRvcihleGVjLCBleGVjLT5hcmd1
bWVudCgyKSwgZGVzY3JpcHRvcik7CiAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSA9PSBz
dWNjZXNzKTsKQEAgLTQzNywxNSArNDE2LDEzIEBAIHN0YXRpYyBKU1ZhbHVlIGRlZmluZVByb3Bl
cnRpZXMoRXhlY1N0YXQKIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhl
YywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwogICAgIGFzT2JqZWN0KHBy
b3BlcnRpZXMpLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMoYXNPYmplY3Qo
cHJvcGVydGllcyksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51
bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgc2l6ZV90IG51bVByb3BlcnRpZXMgPSBwcm9wZXJ0
eU5hbWVzLnNpemUoKTsKICAgICBWZWN0b3I8UHJvcGVydHlEZXNjcmlwdG9yPiBkZXNjcmlwdG9y
czsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBtYXJrQnVmZmVyOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUgcHJvcCA9
IHByb3BlcnRpZXMtPmdldChleGVjLCBwcm9wZXJ0eU5hbWVzW2ldKTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAg
UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgICAgIGlmICghdG9Qcm9wZXJ0eURl
c2NyaXB0b3IoZXhlYywgcHJvcCwgZGVzY3JpcHRvcikpCiAgICAgICAgICAgICByZXR1cm4ganNO
dWxsKCk7CkBAIC00NjUsOCArNDQyLDcgQEAgc3RhdGljIEpTVmFsdWUgZGVmaW5lUHJvcGVydGll
cyhFeGVjU3RhdAogICAgICAgICBpZiAoZXhlYy0+cHJvcGVydHlOYW1lcygpLmlzUHJpdmF0ZU5h
bWUocHJvcGVydHlOYW1lKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvYmplY3Qt
Pm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3JzW2ldLCB0cnVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIG9i
amVjdDsKIH0KQEAgLTUyMiw4ICs0OTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdENvbnN0CiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQgb3duIHByb3BlcnR5IG5hbWUg
UCBvZiBPLAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYywgUHJvcGVydHlO
YW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0p
LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRp
b25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9i
aik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5k
KCk7CiAgICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHBy
b3BlcnRpZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSA9ICppdGVyOwpAQCAtNTM3LDE0ICs1MTIsMTIgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgICAgICBkZXNjLnNldENvbmZpZ3Vy
YWJsZShmYWxzZSk7CiAgICAgICAgIC8vIGMuIENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHld
XSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIFAsIGRlc2MsIGFuZCB0cnVlIGFzIGFyZ3VtZW50
cy4KICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjLCB0cnVlKTsKLSAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUob2JqKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAgICAgfQogCiAgICAgLy8gMy4gU2V0IHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5h
bCBwcm9wZXJ0eSBvZiBPIHRvIGZhbHNlLgogICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5w
cmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QsIGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAg
IC8vIDQuIFJldHVybiBPLgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKQEAgLTU2
Myw4ICs1MzYsNyBAQCBKU09iamVjdCogb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoRXhlY1N0CiAg
ICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQgb3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAgIFBy
b3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5n
c0FuZFN5bWJvbHMpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0
eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVt
UHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOwogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
IHsKICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSAqaXRlcjsKQEAgLTU4MiwxNCAr
NTU0LDEyIEBAIEpTT2JqZWN0KiBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShFeGVjU3QKICAgICAg
ICAgZGVzYy5zZXRDb25maWd1cmFibGUoZmFsc2UpOwogICAgICAgICAvLyBkLiBDYWxsIHRoZSBb
W0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBQLCBkZXNjLCBh
bmQgdHJ1ZSBhcyBhcmd1bWVudHMuCiAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5k
ZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzYywgdHJ1ZSk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICBy
ZXR1cm4gb2JqZWN0OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKICAgICB9CiAKICAgICAvLyAzLiBTZXQgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHBy
b3BlcnR5IG9mIE8gdG8gZmFsc2UuCiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnByZXZl
bnRFeHRlbnNpb25zKG9iamVjdCwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7CiAKICAgICAvLyA0LiBSZXR1cm4gTy4KICAgICByZXR1cm4gb2Jq
ZWN0OwpAQCAtNjA0LDggKzU3NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0Q29uc3QKICAgICBpZiAoIW9iai5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKG9iaik7CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IG9iamVjdENvbnN0cnVjdG9y
RnJlZXplKGV4ZWMsIGFzT2JqZWN0KG9iaikpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTYzNiw4ICs2MDUsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgLy8gMi4gRm9yIGVhY2gg
bmFtZWQgb3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAgIFByb3BlcnR5TmFtZUFycmF5IHBy
b3BlcnRpZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwogICAg
IG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhl
YywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6Oklu
Y2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7CiAgICAgZm9yIChQcm9wZXJ0eU5hbWVB
cnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHByb3BlcnRpZXMuYmVnaW4oKTsgaXRlciAhPSBl
bmQ7ICsraXRlcikgewogICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9ICppdGVyOwpA
QCAtNjU1LDggKzYyMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29u
c3QKICAgICAvLyAzLiBJZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2Yg
TyBpcyBmYWxzZSwgdGhlbiByZXR1cm4gdHJ1ZS4KICAgICAvLyA0LiBPdGhlcndpc2UsIHJldHVy
biBmYWxzZS4KICAgICBib29sIGlzRXh0ZW5zaWJsZSA9IG9iamVjdC0+aXNFeHRlbnNpYmxlKGV4
ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbighaXNFeHRlbnNpYmxlKSk7CiB9CiAKQEAgLTY3Nyw4ICs2NDQsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQg
b3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRp
ZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwogICAgIG9iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJv
cGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUp
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7CiAgICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IHByb3BlcnRpZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikgewogICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9ICppdGVyOwpAQCAtNjk3
LDggKzY2Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAg
ICAvLyAzLiBJZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyBpcyBm
YWxzZSwgdGhlbiByZXR1cm4gdHJ1ZS4KICAgICAvLyA0LiBPdGhlcndpc2UsIHJldHVybiBmYWxz
ZS4KICAgICBib29sIGlzRXh0ZW5zaWJsZSA9IG9iamVjdC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwot
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbigh
aXNFeHRlbnNpYmxlKSk7CiB9CiAKQEAgLTcxMSw4ICs2NzYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKGZhbHNlKSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KG9iaik7
CiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBvYmplY3QtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oaXNF
eHRlbnNpYmxlKSk7CiB9CiAKQEAgLTcyOCwxMiArNjkyLDEwIEBAIEpTQXJyYXkqIG93blByb3Bl
cnR5S2V5cyhFeGVjU3RhdGUqIGV4ZWMKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBwcm9wZXJ0
eU5hbWVNb2RlKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlO
YW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShkb250RW51bVBy
b3BlcnRpZXNNb2RlKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVs
bHB0cik7CiAKICAgICBKU0FycmF5KiBrZXlzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAw
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAg
IHN3aXRjaCAocHJvcGVydHlOYW1lTW9kZSkgewogICAgIGNhc2UgUHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5nczogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29u
c3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTEwMyw4ICsxMDMsNyBA
QCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdE9iamVjdEZyb21Qcm9wCiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgSlNPYmplY3QqIGRlc2NyaXB0aW9uID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBpZiAo
IWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgewogICAgICAgICBkZXNjcmlwdGlv
bi0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZSwgZGVzY3JpcHRvci52YWx1
ZSgpID8gZGVzY3JpcHRvci52YWx1ZSgpIDoganNVbmRlZmluZWQoKSwgMCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAJKHJl
dmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDggKzk1LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CiAgICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9P
YmplY3QoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwpAQCAtMTExLDggKzExMCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KIAogICAgIFByb3BlcnR5U2xvdCBz
bG90KHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Q
cm9wZXJ0eSk7CiAgICAgYm9vbCByZXN1bHQgPSB0aGlzT2JqZWN0LT5oYXNPd25Qcm9wZXJ0eShl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBo
YXNPd25Qcm9wZXJ0eUNhY2hlLT50cnlBZGQodm0sIHNsb3QsIHRoaXNPYmplY3QsIHByb3BlcnR5
TmFtZSwgcmVzdWx0KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihyZXN1
bHQpKTsKQEAgLTEzMiw4ICsxMzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdFByb3RvCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNl
KSk7CiAKICAgICBKU1ZhbHVlIHYgPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSktPmdldFBy
b3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICAgaWYgKCF2LmlzT2JqZWN0KCkpCkBAIC0xNDEsOCArMTM4LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgICAgICBpZiAodiA9PSB0aGlz
T2JqKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkp
OwogICAgICAgICB2ID0gYXNPYmplY3QodiktPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KIH0KIApAQCAtMTUyLDggKzE0OCw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9
IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSBnZXQgPSBleGVjLT5hcmd1
bWVudCgxKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTE2MSw4ICsxNTYsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoImludmFsaWQgZ2V0dGVyIHVz
YWdlIikpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1By
b3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBQcm9wZXJ0eURl
c2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBkZXNjcmlwdG9yLnNldEdldHRlcihnZXQpOwpAQCAt
MTgxLDggKzE3NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8K
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU09iamVj
dCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2Rl
KS50b09iamVjdChleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSBz
ZXQgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTE5MCw4
ICsxODMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoImlu
dmFsaWQgc2V0dGVyIHVzYWdlIikpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5h
cmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAK
ICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBkZXNjcmlwdG9yLnNldFNl
dHRlcihzZXQpOwpAQCAtMjEwLDEyICsyMDIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RQcm90bwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlz
KGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlL
ZXkoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIFByb3BlcnR5U2xvdCBzbG90
KHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9w
ZXJ0eSk7CiAgICAgaWYgKHRoaXNPYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpKSB7CkBAIC0yNDAsMTIgKzIzMCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT50aGlzVmFsdWUoKS50
b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9w
ZXJ0eUtleShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgUHJvcGVydHlTbG90
IHNsb3QodGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93
blByb3BlcnR5KTsKICAgICBpZiAodGhpc09iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCkpIHsKQEAgLTI3MCwxMiArMjU4LDEwIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDAp
LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1v
ZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgUHJvcGVydHlE
ZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgYm9vbCBlbnVtZXJhYmxlID0gdGhpc09iamVjdC0+
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikg
JiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oZW51bWVyYWJsZSkpOwpAQCAtMjg5LDggKzI3NSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KIAogICAgIC8vIDEuIExldCBPIGJlIHRoZSByZXN1
bHQgb2YgY2FsbGluZyBUb09iamVjdCBwYXNzaW5nIHRoZSB0aGlzIHZhbHVlIGFzIHRoZSBhcmd1
bWVudC4KICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4
ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAK
ICAgICAvLyAyLiBMZXQgdG9TdHJpbmcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dl
dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHBhc3NpbmcgInRvU3RyaW5nIiBhcyB0aGUgYXJndW1l
bnQuCiAgICAgSlNWYWx1ZSB0b1N0cmluZyA9IG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS50b1N0cmluZyk7CkBAIC0zMjUsOCArMzEwLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhp
c09iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHRvU3RyaW5nVGFnU3ltYm9sLCBbJl0gKGJv
b2wgZm91bmQsIFByb3BlcnR5U2xvdCYgdG9TdHJpbmdUYWdTbG90KSAtPiBKU1ZhbHVlIHsKICAg
ICAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHN0cmluZ1RhZyA9IHRvU3Ry
aW5nVGFnU2xvdC5nZXRWYWx1ZShleGVjLCB0b1N0cmluZ1RhZ1N5bWJvbCk7Ci0gICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
SlNWYWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChzdHJpbmdUYWcuaXNTdHJpbmcoKSkgewogICAg
ICAgICAgICAgICAgIEpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1aWxkZXIodm0pOwog
ICAgICAgICAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZCh2bS5zbWFsbFN0cmluZ3Mub2JqZWN0
U3RyaW5nU3RhcnQoKSk7CkBAIC0zNDAsOCArMzI0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RQcm90bwogICAgICAgICB9CiAKICAgICAgICAgU3RyaW5nIHRhZyA9IHRo
aXNPYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT50b1N0cmluZ05hbWUodGhpc09iamVj
dCwgZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICBTdHJpbmcgbmV3U3RyaW5nID0gV1RGOjp0cnlNYWtl
U3RyaW5nKCJbb2JqZWN0ICIsIFdURk1vdmUodGFnKSwgIl0iKTsKICAgICAgICAgaWYgKCFuZXdT
dHJpbmcpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNj
b3BlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTEgKzQ2LDkgQEAgTkVWRVJfSU5M
SU5FIEpTVmFsdWUganNBZGRTbG93Q2FzZShDYWxsRgogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNW
YWx1ZSBwMSA9IHYxLnRvUHJpbWl0aXZlKGNhbGxGcmFtZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIEpTVmFsdWUgcDIgPSB2Mi50b1By
aW1pdGl2ZShjYWxsRnJhbWUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgSlNWYWx1ZSgpKTsKIAogICAgIGlmIChwMS5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4g
anNTdHJpbmcoY2FsbEZyYW1lLCBhc1N0cmluZyhwMSksIHAyLnRvU3RyaW5nKGNhbGxGcmFtZSkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eURlc2NyaXB0b3IuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw4
ICs3OSw3IEBAIEdldHRlclNldHRlciogUHJvcGVydHlEZXNjcmlwdG9yOjpzbG93R2UKIAogICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCk7CiAgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKICAgICBpZiAobV9nZXR0ZXIgJiYgIW1fZ2V0dGVyLmlzVW5kZWZpbmVkKCkp
CiAgICAgICAgIGdldHRlclNldHRlci0+c2V0R2V0dGVyKHZtLCBnbG9iYWxPYmplY3QsIGpzQ2Fz
dDxKU09iamVjdCo+KG1fZ2V0dGVyKSk7CiAgICAgaWYgKG1fc2V0dGVyICYmICFtX3NldHRlci5p
c1VuZGVmaW5lZCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NCwxNiArNjQsMTMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFr
ZQogICAgIEpTVmFsdWUgdGFyZ2V0ID0gYXJncy5hdCgwKTsKICAgICBKU1ZhbHVlIGhhbmRsZXIg
PSBhcmdzLmF0KDEpOwogICAgIFByb3h5T2JqZWN0KiBwcm94eSA9IFByb3h5T2JqZWN0OjpjcmVh
dGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0YXJnZXQsIGhhbmRsZXIpOwot
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBQcm94eVJldm9rZSogcmV2b2tlID0gUHJveHlSZXZva2U6
OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm94eVJldm9rZVN0cnVj
dHVyZSgpLCBwcm94eSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNPYmplY3QqIHJlc3Vs
dCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
LSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgbWFrZUlkZW50aWZpZXIodm0sICJwcm94eSIpLCBw
cm94eSwgTm9uZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CityZXN1bHQtPnB1dERpcmVjdCh2bSwgbWFrZUlkZW50aWZpZXIodm0sICJwcm94eSIp
LCBwcm94eSwgTm9uZSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIG1ha2VJZGVudGlmaWVy
KHZtLCAicmV2b2tlIiksIHJldm9rZSwgTm9uZSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
eHlPYmplY3QuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsNyBA
QCBzdGF0aWMgSlNWYWx1ZSBwZXJmb3JtUHJveHlHZXQoRXhlY1N0YXRlCiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBnZXRIYW5kbGVy
ID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVy
dHlOYW1lcy0+Z2V0LCBBU0NJSUxpdGVyYWwoIidnZXQnIHByb3BlcnR5IG9mIGEgUHJveHkncyBo
YW5kbGVyIG9iamVjdCBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIGlmIChnZXRIYW5kbGVy
LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBwZXJmb3JtRGVmYXVsdEdldCgpOwpAQCAt
MTUyLDggKzE1MSw3IEBAIHN0YXRpYyBKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3RhdGUK
ICAgICBhcmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJ
ZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAgIGFyZ3Vt
ZW50cy5hcHBlbmQocmVjZWl2ZXIpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhl
YywgZ2V0SGFuZGxlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwot
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAK
ICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBpZiAodGFyZ2V0LT5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkgewpA
QCAtMTY2LDggKzE2NCw3IEBAIHN0YXRpYyBKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3Rh
dGUKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICByZXR1cm4gdHJhcFJlc3VsdDsKIH0KQEAgLTE3
Nyw4ICsxNzQsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0KEV4ZWNTdGF0ZSogCiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBwZXJmb3JtUHJveHlHZXQoZXhlYywgdGhp
cywgc2xvdC50aGlzVmFsdWUoKSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgIHVuc2lnbmVkIGlnbm9yZWRBdHRyaWJ1dGVzID0g
MDsKICAgICBzbG90LnNldFZhbHVlKHRoaXMsIGlnbm9yZWRBdHRyaWJ1dGVzLCByZXN1bHQpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtMjExLDggKzIwNyw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBl
cmZvcm1JbnRlcm5hbE1ldGhvZEcKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlw
ZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZCA9
IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlm
aWVyKHZtLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiksIEFTQ0lJTGl0ZXJhbCgiJ2dldE93
blByb3BlcnR5RGVzY3JpcHRvcicgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxk
IGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxz
ZSk7CiAgICAgaWYgKGdldE93blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZC5pc1VuZGVmaW5lZCgp
KQogICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1bHRHZXRPd25Qcm9wZXJ0eSgpOwogCkBAIC0y
MjAsOCArMjE1LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUludGVybmFsTWV0aG9kRwog
ICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBhcmd1bWVudHMuYXBwZW5kKGlkZW50
aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJv
cGVydHlOYW1lLnVpZCgpKSkpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRs
ZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNl
KTsKIAogICAgIGlmICghdHJhcFJlc3VsdC5pc1VuZGVmaW5lZCgpICYmICF0cmFwUmVzdWx0Lmlz
T2JqZWN0KCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlM
aXRlcmFsKCJyZXN1bHQgb2YgJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicgY2FsbCBzaG91bGQg
ZWl0aGVyIGJlIGFuIE9iamVjdCBvciB1bmRlZmluZWQiKSk7CkBAIC0yMzAsOCArMjI0LDcgQEAg
Ym9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUludGVybmFsTWV0aG9kRwogCiAgICAgUHJvcGVydHlE
ZXNjcmlwdG9yIHRhcmdldFByb3BlcnR5RGVzY3JpcHRvcjsKICAgICBib29sIGlzVGFyZ2V0UHJv
cGVydHlEZXNjcmlwdG9yRGVmaW5lZCA9IHRhcmdldC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGFyZ2V0UHJvcGVydHlEZXNjcmlwdG9yKTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgaWYgKHRyYXBSZXN1bHQu
aXNVbmRlZmluZWQoKSkgewogICAgICAgICBpZiAoIWlzVGFyZ2V0UHJvcGVydHlEZXNjcmlwdG9y
RGVmaW5lZCkKQEAgLTI0Myw4ICsyMzYsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSW50
ZXJuYWxNZXRob2RHCiAgICAgICAgIC8vIEZJWE1FOiB0aGlzIGRvZXNuJ3Qgd29yayBpZiAndGFy
Z2V0JyBpcyBhbm90aGVyIFByb3h5LiBXZSBkb24ndCBoYXZlIGlzRXh0ZW5zaWJsZSBpbXBsZW1l
bnRlZCBpbiBhIHdheSB0aGF0IGZpdHMgdy8gUHJveHlzLgogICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0Mzc1CiAgICAgICAgIGJvb2wgaXNFeHRl
bnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKCFpc0V4dGVu
c2libGUpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBDb21lIHVwIHdpdGggYSB0ZXN0IGZvciB0
aGlzIGVycm9yLiBJJ20gbm90IHN1cmUgaG93IHRvIGJlY2F1c2UKICAgICAgICAgICAgIC8vIE9i
amVjdC5zZWFsKG8pIHdpbGwgbWFrZSBhbGwgZmllbGRzIFtbQ29uZmlndXJhYmxlXV0gZmFsc2Uu
CkBAIC0yNTcsMTIgKzI0OSwxMCBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxN
ZXRob2RHCiAgICAgfQogCiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5z
aWJsZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwog
ICAgIFByb3BlcnR5RGVzY3JpcHRvciB0cmFwUmVzdWx0QXNEZXNjcmlwdG9yOwogICAgIHRvUHJv
cGVydHlEZXNjcmlwdG9yKGV4ZWMsIHRyYXBSZXN1bHQsIHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3Ip
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgYm9vbCB0
aHJvd0V4Y2VwdGlvbiA9IGZhbHNlOwogICAgIGJvb2wgdmFsaWQgPSB2YWxpZGF0ZUFuZEFwcGx5
UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIG51bGxwdHIsIHByb3BlcnR5TmFtZSwgaXNFeHRlbnNp
YmxlLAogICAgICAgICB0cmFwUmVzdWx0QXNEZXNjcmlwdG9yLCBpc1RhcmdldFByb3BlcnR5RGVz
Y3JpcHRvckRlZmluZWQsIHRhcmdldFByb3BlcnR5RGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24p
OwpAQCAtMjgwLDggKzI3MCw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1l
dGhvZEcKIAogICAgIGlmICh0cmFwUmVzdWx0QXNEZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlw
dG9yKCkpIHsKICAgICAgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSB0cmFwUmVzdWx0
QXNEZXNjcmlwdG9yLnNsb3dHZXR0ZXJTZXR0ZXIoZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgc2xvdC5zZXRHZXR0
ZXJTbG90KHRoaXMsIHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3IuYXR0cmlidXRlcygpLCBnZXR0ZXJT
ZXR0ZXIpOwogICAgIH0gZWxzZSBpZiAodHJhcFJlc3VsdEFzRGVzY3JpcHRvci5pc0RhdGFEZXNj
cmlwdG9yKCkgJiYgIXRyYXBSZXN1bHRBc0Rlc2NyaXB0b3IudmFsdWUoKS5pc0VtcHR5KCkpCiAg
ICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgdHJhcFJlc3VsdEFzRGVzY3JpcHRvci5hdHRyaWJ1
dGVzKCksIHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3IudmFsdWUoKSk7CkBAIC0zMTksOCArMzA4LDcg
QEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUhhc1Byb3BlcnR5KEV4ZQogICAgIENhbGxEYXRh
IGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgaGFzTWV0aG9k
ID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVy
dHlOYW1lcy0+aGFzLCBBU0NJSUxpdGVyYWwoIidoYXMnIHByb3BlcnR5IG9mIGEgUHJveHkncyBo
YW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZmFsc2UpOwogICAgIGlmIChoYXNNZXRob2QuaXNVbmRlZmluZWQoKSkKICAgICAg
ICAgcmV0dXJuIHBlcmZvcm1EZWZhdWx0SGFzUHJvcGVydHkoKTsKIApAQCAtMzI4LDI2ICszMTYs
MjIgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUhhc1Byb3BlcnR5KEV4ZQogICAgIGFyZ3Vt
ZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBhcmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1Nh
ZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlOYW1l
LnVpZCgpKSkpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgaGFzTWV0aG9k
LCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9v
bCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBmYWxzZSk7CiAKICAgICBpZiAoIXRyYXBSZXN1bHRBc0Jvb2wpIHsKICAgICAg
ICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgICAgIGJvb2wgaXNQcm9wZXJ0
eURlc2NyaXB0b3JEZWZpbmVkID0gdGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhl
YywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsgCi0gICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKGlzUHJvcGVydHlEZXNj
cmlwdG9yRGVmaW5lZCkgewogICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmNvbmZpZ3VyYWJs
ZSgpKSB7CiAgICAgICAgICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVND
SUlMaXRlcmFsKCJQcm94eSAnaGFzJyBtdXN0IHJldHVybiAndHJ1ZScgZm9yIG5vbi1jb25maWd1
cmFibGUgcHJvcGVydGllcyIpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBib29sIGlzRXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRl
bnNpYmxlKGV4ZWMpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSkg
ewogICAgICAgICAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiUHJveHkgJ2hhcycgbXVzdCByZXR1cm4gJ3RydWUnIGZvciBhIG5vbi1leHRlbnNpYmxl
ICd0YXJnZXQnIG9iamVjdCB3aXRoIGEgY29uZmlndXJhYmxlIHByb3BlcnR5IikpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQxOSw4ICs0MDMsNyBAQCBib29sIFByb3h5T2Jq
ZWN0OjpwZXJmb3JtUHV0KEV4ZWNTdGF0ZSogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAg
Q2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBzZXRNZXRob2QgPSBoYW5kbGVyLT5nZXRN
ZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5zZXQsIEFT
Q0lJTGl0ZXJhbCgiJ3NldCcgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJl
IGNhbGxhYmxlIikpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7
CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChzZXRNZXRo
b2QuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIHBlcmZvcm1EZWZhdWx0UHV0KCk7CkBA
IC00MzEsMTEgKzQxNCw5IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1QdXQoRXhlY1N0YXRl
KiAKICAgICBhcmd1bWVudHMuYXBwZW5kKHB1dFZhbHVlKTsKICAgICBhcmd1bWVudHMuYXBwZW5k
KHRoaXNWYWx1ZSk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBzZXRNZXRo
b2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9v
bCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgaWYgKCF0cmFwUmVzdWx0QXNCb29sKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKQEAgLTQ3Miw4ICs0NTMsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwdXRC
eUluZGV4Q29tbW9uKEV4ZWNTCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSWRlbnRpZmllciBpZGVudCA9IElk
ZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgIGF1dG8gcGVyZm9ybURlZmF1bHRQdXQgPSBbJl0g
KCkgewogICAgICAgICBKU09iamVjdCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7CiAgICAgICAg
IGJvb2wgaXNTdHJpY3RNb2RlID0gc2hvdWxkVGhyb3c7CkBAIC01MDYsOCArNDg2LDcgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcGVyZgogICAgIENhbGxEYXRhIGNhbGxE
YXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBo
YW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmll
cih2bSwgImFwcGx5IiksIEFTQ0lJTGl0ZXJhbCgiJ2FwcGx5JyBwcm9wZXJ0eSBvZiBhIFByb3h5
J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBKU09iamVjdCogdGFyZ2V0ID0gcHJveHktPnRhcmdldCgpOwogICAgIGlmIChhcHBseU1l
dGhvZC5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtNTE3
LDggKzQ5Niw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBlcmYKICAg
ICB9CiAKICAgICBKU0FycmF5KiBhcmdBcnJheSA9IGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0YXRp
Y19jYXN0PEFycmF5QWxsb2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgQXJnTGlzdChleGVjKSk7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVu
dHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQo
ZXhlYy0+dGhpc1ZhbHVlKCkpOwpAQCAtNTU2LDggKzUzNCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHBlcmYKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxs
VHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGNvbnN0cnVjdE1ldGhvZCA9IGhhbmRsZXItPmdl
dE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiY29u
c3RydWN0IiksIEFTQ0lJTGl0ZXJhbCgiJ2NvbnN0cnVjdCcgcHJvcGVydHkgb2YgYSBQcm94eSdz
IGhhbmRsZXIgc2hvdWxkIGJlIGNvbnN0cnVjdGlibGUiKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBKU09iamVjdCogdGFyZ2V0ID0gcHJveHktPnRhcmdldCgpOwogICAgIGlmIChjb25z
dHJ1Y3RNZXRob2QuaXNVbmRlZmluZWQoKSkgewogICAgICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0
cnVjdERhdGE7CkBAIC01NjcsMTUgKzU0NCwxMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBwZXJmCiAgICAgfQogCiAgICAgSlNBcnJheSogYXJnQXJyYXkgPSBjb25zdHJ1
Y3RBcnJheShleGVjLCBzdGF0aWNfY2FzdDxBcnJheUFsbG9jYXRpb25Qcm9maWxlKj4obnVsbHB0
ciksIEFyZ0xpc3QoZXhlYykpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAg
ICBhcmd1bWVudHMuYXBwZW5kKGFyZ0FycmF5KTsKICAgICBhcmd1bWVudHMuYXBwZW5kKGV4ZWMt
Pm5ld1RhcmdldCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgY29uc3RydWN0
TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBpZiAoIXJlc3VsdC5pc09iamVjdCgpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZXN1bHQgZnJv
bSBQcm94eSBoYW5kbGVyJ3MgJ2NvbnN0cnVjdCcgbWV0aG9kIHNob3VsZCBiZSBhbiBvYmplY3Qi
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNjE3LDggKzU5Miw3
IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWxldGUoRXhlY1N0YXQKICAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGRlbGV0ZVBy
b3BlcnR5TWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlw
ZSwgbWFrZUlkZW50aWZpZXIodm0sICJkZWxldGVQcm9wZXJ0eSIpLCBBU0NJSUxpdGVyYWwoIidk
ZWxldGVQcm9wZXJ0eScgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNh
bGxhYmxlIikpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAg
ICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChkZWxldGVQcm9w
ZXJ0eU1ldGhvZC5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1bHRE
ZWxldGUoKTsKQEAgLTYyNywxMiArNjAxLDEwIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1E
ZWxldGUoRXhlY1N0YXQKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1l
bnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6
ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1
bHQgPSBjYWxsKGV4ZWMsIGRlbGV0ZVByb3BlcnR5TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEs
IGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGZhbHNlKTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29s
ZWFuKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAK
ICAgICBpZiAoIXRyYXBSZXN1bHRBc0Jvb2wpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY0
NSw4ICs2MTcsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtRGVsZXRlKEV4ZWNTdGF0CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFs
c2UpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC02OTEsOCArNjYyLDcgQEAgYm9vbCBQcm94
eU9iamVjdDo6cGVyZm9ybVByZXZlbnRFeHRlbnNpbwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwog
ICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgcHJldmVudEV4dGVuc2lvbnNNZXRo
b2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRl
bnRpZmllcih2bSwgInByZXZlbnRFeHRlbnNpb25zIiksIEFTQ0lJTGl0ZXJhbCgiJ3ByZXZlbnRF
eHRlbnNpb25zJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFi
bGUiKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBK
U09iamVjdCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7CiAgICAgaWYgKHByZXZlbnRFeHRlbnNp
b25zTWV0aG9kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiB0YXJnZXQtPm1ldGhvZFRh
YmxlKHZtKS0+cHJldmVudEV4dGVuc2lvbnModGFyZ2V0LCBleGVjKTsKQEAgLTcwMCwxNyArNjcw
LDE0IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1QcmV2ZW50RXh0ZW5zaW8KICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQp
OwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgcHJldmVudEV4dGVuc2lvbnNN
ZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgYm9vbCB0cmFwUmVzdWx0
QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIGlmICh0cmFwUmVzdWx0QXNCb29sKSB7CiAg
ICAgICAgIGJvb2wgdGFyZ2V0SXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhl
Yyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNl
KTsKICAgICAgICAgaWYgKHRhcmdldElzRXh0ZW5zaWJsZSkgewogICAgICAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJQcm94eSdzICdwcmV2ZW50RXh0
ZW5zaW9ucycgdHJhcCByZXR1cm5lZCB0cnVlIGV2ZW4gdGhvdWdoIGl0cyB0YXJnZXQgaXMgZXh0
ZW5zaWJsZS4gSXQgc2hvdWxkIGhhdmUgcmV0dXJuZWQgZmFsc2UiKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC03NDQsOCArNzExLDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9y
bUlzRXh0ZW5zaWJsZShFeAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNh
bGxUeXBlOwogICAgIEpTVmFsdWUgaXNFeHRlbnNpYmxlTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0
aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgbWFrZUlkZW50aWZpZXIodm0sICJpc0V4dGVu
c2libGUiKSwgQVNDSUlMaXRlcmFsKCInaXNFeHRlbnNpYmxlJyBwcm9wZXJ0eSBvZiBhIFByb3h5
J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJn
ZXQoKTsKICAgICBpZiAoaXNFeHRlbnNpYmxlTWV0aG9kLmlzVW5kZWZpbmVkKCkpCkBAIC03NTQs
MTYgKzcyMCwxMyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSXNFeHRlbnNpYmxlKEV4CiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQo
dGFyZ2V0KTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGlzRXh0ZW5zaWJs
ZU1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKICAgICBib29sIHRyYXBSZXN1
bHRBc0Jvb2wgPSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgYm9vbCBpc1RhcmdldEV4dGVuc2libGUg
PSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZmFsc2UpOwogCiAgICAgaWYgKHRyYXBSZXN1bHRBc0Jvb2wgIT0gaXNUYXJnZXRF
eHRlbnNpYmxlKSB7CiAgICAgICAgIGlmIChpc1RhcmdldEV4dGVuc2libGUpIHsKQEAgLTgxMSwz
OSArNzc0LDMzIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWZpbmVPd25Qcm9wZXIKICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVl
IGRlZmluZVByb3BlcnR5TWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRh
LCBjYWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+ZGVmaW5lUHJvcGVydHksIEFTQ0lJTGl0ZXJh
bCgiJ2RlZmluZVByb3BlcnR5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQg
YmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNl
KTsKIAogICAgIGlmIChkZWZpbmVQcm9wZXJ0eU1ldGhvZC5pc1VuZGVmaW5lZCgpKQogICAgICAg
ICByZXR1cm4gcGVyZm9ybURlZmF1bHREZWZpbmVPd25Qcm9wZXJ0eSgpOwogCiAgICAgSlNPYmpl
Y3QqIGRlc2NyaXB0b3JPYmplY3QgPSBjb25zdHJ1Y3RPYmplY3RGcm9tUHJvcGVydHlEZXNjcmlw
dG9yKGV4ZWMsIGRlc2NyaXB0b3IpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBmYWxzZSk7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJn
dW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRv
U2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5h
bWUudWlkKCkpKSk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChkZXNjcmlwdG9yT2JqZWN0KTsKICAg
ICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGRlZmluZVByb3BlcnR5TWV0aG9kLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9
IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBmYWxzZSk7CiAKICAgICBpZiAoIXRyYXBSZXN1bHRBc0Jvb2wpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciB0YXJnZXREZXNjcmlwdG9yOwog
ICAgIGJvb2wgaXNUYXJnZXREZXNjcmlwdG9yRGVmaW5lZCA9IHRhcmdldC0+Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGFyZ2V0RGVzY3JpcHRvcik7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIGJvb2wgdGFyZ2V0
SXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBib29sIHNldHRpbmdDb25maWd1cmFi
bGVUb0ZhbHNlID0gZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVzZW50KCkgJiYgIWRlc2NyaXB0
b3IuY29uZmlndXJhYmxlKCk7CiAKICAgICBpZiAoIWlzVGFyZ2V0RGVzY3JpcHRvckRlZmluZWQp
IHsKQEAgLTkwMCw4ICs4NTcsNyBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJv
cGVydHlOCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAg
ICAgSlNWYWx1ZSBvd25LZXlzTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxE
YXRhLCBjYWxsVHlwZSwgbWFrZUlkZW50aWZpZXIodm0sICJvd25LZXlzIiksIEFTQ0lJTGl0ZXJh
bCgiJ293bktleXMnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxs
YWJsZSIpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBKU09i
amVjdCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7CiAgICAgaWYgKG93bktleXNNZXRob2QuaXNV
bmRlZmluZWQoKSkgewogICAgICAgICB0YXJnZXQtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCwgZXhlYywgdHJhcFJlc3VsdCwgZW51bWVyYXRpb25N
b2RlKTsKQEAgLTkxMSw4ICs4NjcsNyBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3du
UHJvcGVydHlOCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3Vt
ZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBKU1ZhbHVlIGFycmF5TGlrZU9iamVjdCA9IGNhbGwo
ZXhlYywgb3duS2V5c01ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVu
dHMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
bjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgUHJvcGVy
dHlOYW1lTW9kZSBwcm9wZXJ0eU5hbWVNb2RlID0gdHJhcFJlc3VsdC5tb2RlKCk7CiAgICAgUnVu
dGltZVR5cGVNYXNrIHJlc3VsdEZpbHRlciA9IDA7CkBAIC05MzksOCArODk0LDcgQEAgdm9pZCBQ
cm94eU9iamVjdDo6cGVyZm9ybUdldE93blByb3BlcnR5TgogICAgICAgICAgICAgcmV0dXJuIGRv
bnRFeGl0RWFybHk7CiAKICAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IHZhbHVlLnRvUHJvcGVy
dHlLZXkoZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgICAgICByZXR1cm4gZG9FeGl0RWFybHk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGRvRXhpdEVhcmx5KTsKIAogICAgICAgICB1bmNoZWNrZWRSZXN1bHRLZXlzLmFk
ZChpZGVudC5pbXBsKCkpOwogICAgICAgICB0cmFwUmVzdWx0LmFkZFVuY2hlY2tlZChpZGVudC5p
bXBsKCkpOwpAQCAtOTQ4LDIyICs5MDIsMTkgQEAgdm9pZCBQcm94eU9iamVjdDo6cGVyZm9ybUdl
dE93blByb3BlcnR5TgogICAgIH07CiAKICAgICBjcmVhdGVMaXN0RnJvbUFycmF5TGlrZShleGVj
LCBhcnJheUxpa2VPYmplY3QsIGRvbnRUaHJvd0FuRXhjZXB0aW9uVHlwZUZpbHRlciwgQVNDSUlM
aXRlcmFsKCJQcm94eSBoYW5kbGVyJ3MgJ293bktleXMnIG1ldGhvZCBtdXN0IHJldHVybiBhbiBh
cnJheS1saWtlIG9iamVjdCBjb250YWluaW5nIG9ubHkgU3RyaW5ncyBhbmQgU3ltYm9scyIpLCBh
ZGRQcm9wTmFtZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAg
ICBib29sIHRhcmdldElzRXhlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7CiAK
ICAgICBQcm9wZXJ0eU5hbWVBcnJheSB0YXJnZXRLZXlzKCZ2bSwgcHJvcGVydHlOYW1lTW9kZSk7
CiAgICAgdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0
LCBleGVjLCB0YXJnZXRLZXlzLCBlbnVtZXJhdGlvbk1vZGUpOwotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIFZlY3RvcjxVbmlxdWVkU3RyaW5nSW1wbCo+IHRhcmdl
dENvbmZpZ3VyYWJsZUtleXM7CiAgICAgVmVjdG9yPFVuaXF1ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0
Tm9uQ29uZmlndXJhYmxlS2V5czsKICAgICBmb3IgKGNvbnN0IElkZW50aWZpZXImIGlkZW50IDog
dGFyZ2V0S2V5cykgewogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAg
ICAgICAgYm9vbCBpc1Byb3BlcnR5RGVmaW5lZCA9IHRhcmdldC0+Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGV4ZWMsIGlkZW50LmltcGwoKSwgZGVzY3JpcHRvcik7IAotICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICBpZiAoaXNQcm9wZXJ0
eURlZmluZWQgJiYgIWRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpCiAgICAgICAgICAgICB0YXJn
ZXROb25Db25maWd1cmFibGVLZXlzLmFwcGVuZChpZGVudC5pbXBsKCkpOwogICAgICAgICBlbHNl
CkBAIC0xMDUxLDggKzEwMDIsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90
eXBlKEV4CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAg
ICAgSlNWYWx1ZSBzZXRQcm90b3R5cGVPZk1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVj
LCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAic2V0UHJvdG90eXBlT2Yi
KSwgQVNDSUlMaXRlcmFsKCInc2V0UHJvdG90eXBlT2YnIHByb3BlcnR5IG9mIGEgUHJveHkncyBo
YW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZmFsc2UpOwogCiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgp
OwogICAgIGlmIChzZXRQcm90b3R5cGVPZk1ldGhvZC5pc1VuZGVmaW5lZCgpKQpAQCAtMTA2Miwx
MiArMTAxMiwxMCBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKEV4CiAg
ICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQocHJvdG90
eXBlKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIHNldFByb3RvdHlwZU9m
TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIGJvb2wgdHJhcFJlc3Vs
dEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgCiAgICAgaWYgKCF0cmFwUmVzdWx0QXNCb29s
KSB7CiAgICAgICAgIGlmIChzaG91bGRUaHJvd0lmQ2FudFNldCkKQEAgLTEwNzYsMTQgKzEwMjQs
MTIgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybVNldFByb3RvdHlwZShFeAogICAgIH0KIAog
ICAgIGJvb2wgdGFyZ2V0SXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBpZiAodGFy
Z2V0SXNFeHRlbnNpYmxlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIEpTVmFsdWUgdGFy
Z2V0UHJvdG90eXBlID0gdGFyZ2V0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgaWYgKCFzYW1lVmFsdWUoZXhl
YywgcHJvdG90eXBlLCB0YXJnZXRQcm90b3R5cGUpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUHJveHkgJ3NldFByb3RvdHlwZU9mJyB0cmFw
IHJldHVybmVkIHRydWUgd2hlbiBpdHMgdGFyZ2V0IGlzIG5vbi1leHRlbnNpYmxlIGFuZCB0aGUg
bmV3IHByb3RvdHlwZSB2YWx1ZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgcHJvdG90
eXBlIHZhbHVlLiBJdCBzaG91bGQgaGF2ZSByZXR1cm5lZCBmYWxzZSIpKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTExNiw4ICsxMDYyLDcgQEAgSlNWYWx1ZSBQcm94eU9iamVjdDo6cGVy
Zm9ybUdldFByb3RvdHlwZQogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNh
bGxUeXBlOwogICAgIEpTVmFsdWUgZ2V0UHJvdG90eXBlT2ZNZXRob2QgPSBoYW5kbGVyLT5nZXRN
ZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImdldFBy
b3RvdHlwZU9mIiksIEFTQ0lJTGl0ZXJhbCgiJ2dldFByb3RvdHlwZU9mJyBwcm9wZXJ0eSBvZiBh
IFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgSlNPYmplY3QqIHRhcmdl
dCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChnZXRQcm90b3R5cGVPZk1ldGhvZC5pc1VuZGVm
aW5lZCgpKQpAQCAtMTEyNiw4ICsxMDcxLDcgQEAgSlNWYWx1ZSBQcm94eU9iamVjdDo6cGVyZm9y
bUdldFByb3RvdHlwZQogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBh
cmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChl
eGVjLCBnZXRQcm90b3R5cGVPZk1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBh
cmd1bWVudHMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1
ZSgpKTsKIAogICAgIGlmICghdHJhcFJlc3VsdC5pc09iamVjdCgpICYmICF0cmFwUmVzdWx0Lmlz
TnVsbCgpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiUHJveHkgaGFuZGxlcidzICdnZXRQcm90b3R5cGVPZicgdHJhcCBzaG91bGQgZWl0aGVy
IHJldHVybiBhbiBvYmplY3Qgb3IgbnVsbCIpKTsKQEAgLTExMzUsMTQgKzEwNzksMTIgQEAgSlNW
YWx1ZSBQcm94eU9iamVjdDo6cGVyZm9ybUdldFByb3RvdHlwZQogICAgIH0KIAogICAgIGJvb2wg
dGFyZ2V0SXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIGlmICh0YXJn
ZXRJc0V4dGVuc2libGUpCiAgICAgICAgIHJldHVybiB0cmFwUmVzdWx0OwogCiAgICAgSlNWYWx1
ZSB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUo
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIGlmICgh
c2FtZVZhbHVlKGV4ZWMsIHRhcmdldFByb3RvdHlwZSwgdHJhcFJlc3VsdCkpIHsKICAgICAgICAg
dGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJQcm94eSdzICdnZXRQ
cm90b3R5cGVPZicgdHJhcCBmb3IgYSBub24tZXh0ZW5zaWJsZSB0YXJnZXQgc2hvdWxkIHJldHVy
biB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgdGFyZ2V0J3MgcHJvdG90eXBlIikpOwogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVm
bGVjdE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVmbGVjdE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMs
OCArMTIzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQogICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0pOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNvbnN0cnVjdChleGVjLCB0YXJnZXQsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFy
Z3VtZW50cywgbmV3VGFyZ2V0KSk7CiB9CkBAIC0xMzksOCArMTM4LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQogICAgIGlmICghdGFyZ2V0LmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2Nv
cGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSByZXF1aXJlcyB0aGUgZmly
c3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4
ZWMtPmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGlmICghdG9Qcm9w
ZXJ0eURlc2NyaXB0b3IoZXhlYywgZXhlYy0+YXJndW1lbnQoMiksIGRlc2NyaXB0b3IpKQpAQCAt
MTc4LDggKzE3Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamUK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmdldCByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQg
YmUgYW4gb2JqZWN0IikpKTsKIAogICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0g
ZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
IAogICAgIEpTVmFsdWUgcmVjZWl2ZXIgPSB0YXJnZXQ7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA+PSAzKQpAQCAtMjAwLDggKzE5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgcmVmbGVjdE9iamUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5
cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvciByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpKTsK
IAogICAgIGF1dG8ga2V5ID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmpl
Y3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBhc09iamVjdCh0YXJn
ZXQpLCBrZXkpKTsKIH0KQEAgLTIyOSw4ICsyMjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHJlZmxlY3RPYmplCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dU
eXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5pc0V4dGVuc2libGUg
cmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKSk7CiAKICAgICBib29s
IGlzRXh0ZW5zaWJsZSA9IGFzT2JqZWN0KHRhcmdldCktPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oaXNF
eHRlbnNpYmxlKSk7CiB9CiAKQEAgLTI1Nyw4ICsyNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5wcmV2ZW50RXh0
ZW5zaW9ucyByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpKTsKICAg
ICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodGFyZ2V0KTsKICAgICBib29sIHJlc3VsdCA9
IG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QsIGV4ZWMp
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihyZXN1bHQpKTsKIH0KIApAQCAtMjc0LDggKzI2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgcmVmbGVjdE9iamUKICAgICBKU09iamVjdCogdGFyZ2V0T2JqZWN0ID0gYXNPYmpl
Y3QodGFyZ2V0KTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSku
dG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1
ZSByZWNlaXZlciA9IHRhcmdldDsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDQp
CkBAIC0zMDQsOCArMjk3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0
T2JqZQogCiAgICAgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCA9IGZhbHNlOwogICAgIGJvb2wg
ZGlkU2V0UHJvdG90eXBlID0gb2JqZWN0LT5zZXRQcm90b3R5cGUodm0sIGV4ZWMsIHByb3RvLCBz
aG91bGRUaHJvd0lmQ2FudFNldCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKGRpZFNldFByb3RvdHlwZSkpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw4ICsyMjEsNyBAQCBpbmxp
bmUgUmVnRXhwRmxhZ3MgdG9GbGFncyhFeGVjU3RhdGUqIGV4CiAgICAgfQogCiAgICAgUmVnRXhw
RmxhZ3MgcmVzdWx0ID0gcmVnRXhwRmxhZ3MoZmxhZ3NTdHJpbmctPnZhbHVlKGV4ZWMpKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSW52YWxp
ZEZsYWdzOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEludmFsaWRGbGFncyk7CiAg
ICAgaWYgKHJlc3VsdCA9PSBJbnZhbGlkRmxhZ3MpCiAgICAgICAgIHRocm93U3ludGF4RXJyb3Io
ZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBmbGFncyBzdXBwbGllZCB0byBSZWdF
eHAgY29uc3RydWN0b3IuIikpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0yMzQsOCArMjMzLDcg
QEAgc3RhdGljIEpTT2JqZWN0KiByZWdFeHBDcmVhdGUoRXhlY1N0YXRlKgogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBwYXR0ZXJuID0gcGF0
dGVybkFyZy5pc1VuZGVmaW5lZCgpID8gZW1wdHlTdHJpbmcoKSA6IHBhdHRlcm5BcmcudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIG51bGxwdHIpOwogCiAgICAgUmVnRXhwRmxhZ3MgZmxhZ3MgPSB0b0ZsYWdzKGV4ZWMsIGZs
YWdzQXJnKTsKICAgICBpZiAoZmxhZ3MgPT0gSW52YWxpZEZsYWdzKQpAQCAtMjQ2LDggKzI0NCw3
IEBAIHN0YXRpYyBKU09iamVjdCogcmVnRXhwQ3JlYXRlKEV4ZWNTdGF0ZSoKICAgICAgICAgcmV0
dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCBy
ZWdFeHAtPmVycm9yTWVzc2FnZSgpKSk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdl
dFJlZ0V4cFN0cnVjdHVyZShleGVjLCBnbG9iYWxPYmplY3QsIG5ld1RhcmdldCk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgcmV0dXJuIFJlZ0V4
cE9iamVjdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHJlZ0V4cCk7CiB9CiAKQEAgLTI2Myw4ICsy
NjAsNyBAQCBKU09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAKICAgICBp
ZiAobmV3VGFyZ2V0LmlzVW5kZWZpbmVkKCkgJiYgY29uc3RydWN0QXNSZWdleHAgJiYgZmxhZ3NB
cmcuaXNVbmRlZmluZWQoKSkgewogICAgICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gcGF0dGVy
bkFyZy5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IpOwotICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAg
ICBpZiAoY2FsbGVlID09IGNvbnN0cnVjdG9yKSB7CiAgICAgICAgICAgICAvLyBXZSBrbm93IHRo
YXQgcGF0dGVybkFyZyBpcyBhIG9iamVjdCBvdGhlcndpc2UgY29uc3RydWN0QXNSZWdleHAgd291
bGQgYmUgZmFsc2UuCiAgICAgICAgICAgICByZXR1cm4gcGF0dGVybkFyZy5nZXRPYmplY3QoKTsK
QEAgLTI3NCw4ICsyNzAsNyBAQCBKU09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSog
ZXhlCiAgICAgaWYgKGlzUGF0dGVyblJlZ0V4cCkgewogICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9
IGpzQ2FzdDxSZWdFeHBPYmplY3QqPihwYXR0ZXJuQXJnKS0+cmVnRXhwKCk7CiAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0UmVnRXhwU3RydWN0dXJlKGV4ZWMsIGdsb2JhbE9iamVj
dCwgbmV3VGFyZ2V0KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKIAogICAgICAgICBpZiAoIWZsYWdzQXJnLmlzVW5kZWZpbmVkKCkp
IHsKICAgICAgICAgICAgIFJlZ0V4cEZsYWdzIGZsYWdzID0gdG9GbGFncyhleGVjLCBmbGFnc0Fy
Zyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENv
bnN0cnVjdG9yLmgJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDctMjAwOCwgMjAx
NiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBA
IC0xMzksOCArMTM5LDcgQEAgQUxXQVlTX0lOTElORSBib29sIGlzUmVnRXhwKFZNJiB2bSwgRXhl
YwogCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKICAgICBKU1ZhbHVl
IG1hdGNoVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5tYXRjaFN5
bWJvbCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBp
ZiAoIW1hdGNoVmFsdWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIG1hdGNoVmFsdWUu
dG9Cb29sZWFuKGV4ZWMpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDEyLCAy
MDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDctMjAwOCwgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xNzYsOCArMTc2LDcgQEAgSlNWYWx1ZSBjb2xsZWN0
TWF0Y2hlcyhWTSYgdm0sIEV4ZWNTdGF0ZQogICAgIHN0YXRpYyB1bnNpZ25lZCBtYXhTaXplRm9y
RGlyZWN0UGF0aCA9IDEwMDAwMDsKICAgICAKICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVj
dEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIGF1dG8gaXRlcmF0ZSA9IFsmXSAoKSB7
CiAgICAgICAgIHNpemVfdCBlbmQgPSByZXN1bHQuZW5kOwpAQCAtMjM2LDggKzIzNSw3IEBAIEpT
VmFsdWUgUmVnRXhwT2JqZWN0OjptYXRjaEdsb2JhbChFeGVjU3QKICAgICBBU1NFUlQocmVnRXhw
LT5nbG9iYWwoKSk7CiAKICAgICBzZXRMYXN0SW5kZXgoZXhlYywgMCk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIFN0cmluZyBz
ID0gc3RyaW5nLT52YWx1ZShleGVjKTsKICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29u
c3RydWN0b3IgPSBnbG9iYWxPYmplY3QtPnJlZ0V4cENvbnN0cnVjdG9yKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHJl
dmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSwxNCArMTU5LDEyIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAgICAgcmVnRXhwID0gYXNSZWdF
eHBPYmplY3QoYXJnMCktPnJlZ0V4cCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFN0cmluZyBw
YXR0ZXJuID0gIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGVtcHR5U3RyaW5nKCkgOiBhcmcwLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogCiAgICAgICAgIFJlZ0V4cEZsYWdzIGZsYWdzID0gTm9GbGFnczsKICAgICAgICAgaWYg
KCFhcmcxLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgIGZsYWdzID0gcmVnRXhwRmxhZ3Mo
YXJnMS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgPT0gSW52YWxp
ZEZsYWdzKQogICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUs
IGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBmbGFncyBzdXBw
bGllZCB0byBSZWdFeHAgY29uc3RydWN0b3IuIikpKTsKICAgICAgICAgfQpAQCAtMTkyLDIwICsx
OTAsMTUgQEAgc3RhdGljIGlubGluZSBGbGFnc1N0cmluZyBmbGFnc1N0cmluZyhFeAogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgZ2xvYmFs
VmFsdWUgPSByZWdleHAtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2xvYmFsKTsK
LSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gc3Ry
aW5nOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0cmluZyk7CiAgICAgSlNWYWx1
ZSBpZ25vcmVDYXNlVmFsdWUgPSByZWdleHAtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuaWdub3JlQ2FzZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdHJp
bmcpOwogICAgIEpTVmFsdWUgbXVsdGlsaW5lVmFsdWUgPSByZWdleHAtPmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubXVsdGlsaW5lKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gc3RyaW5nOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHN0cmluZyk7CiAgICAgSlNWYWx1ZSB1bmljb2RlVmFsdWUgPSByZWdleHAtPmdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5pY29kZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBzdHJpbmcpOwogICAgIEpTVmFsdWUgc3RpY2t5VmFsdWUgPSBy
ZWdleHAtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc3RpY2t5KTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gc3RyaW5nOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0cmluZyk7CiAKICAgICB1bnNpZ25lZCBpbmRl
eCA9IDA7CiAgICAgaWYgKGdsb2JhbFZhbHVlLnRvQm9vbGVhbihleGVjKSkKQEAgLTIzOSwxOCAr
MjMyLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIAogICAgIEpTVmFs
dWUgc291cmNlVmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
c291cmNlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIFN0cmluZyBzb3VyY2UgPSBzb3Vy
Y2VWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKIAogICAgIEpTVmFsdWUgZmxhZ3NWYWx1ZSA9IHRoaXNPYmplY3QtPmdldChleGVjLCB2bS5w
cm9wZXJ0eU5hbWVzLT5mbGFncyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBTdHJpbmcg
ZmxhZ3MgPSBmbGFnc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2
aWFsU3RyaW5nKGV4ZWMsICcvJywgc291cmNlLCAnLycsIGZsYWdzKSk7CiB9CkBAIC0zNDAsOCAr
MzI5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJUaGUg
UmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uIGFuIG9i
amVjdCIpKTsKIAogICAgIGF1dG8gZmxhZ3MgPSBmbGFnc1N0cmluZyhleGVjLCBhc09iamVjdCh0
aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1N0cmluZyhleGVjLCBmbGFncy5kYXRhKCkpKTsKIH0KQEAgLTQ3OSw4ICs0Njcs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAKICAgICBKU1N0
cmluZyogc3RyaW5nID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7
CiAgICAgU3RyaW5nIHMgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3IgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCk7CiAgICAgTWF0Y2hSZXN1
bHQgcmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCh2bSwgcmVnRXhwLCBz
dHJpbmcsIHMsIDApOwpAQCAtNTg4LDggKzU3NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgcmVnRXhwUHJvdG8KICAgICAvLyAzLiBbaGFuZGxlZCBieSBKUyBidWlsdGluXSBMZXQg
UyBiZSA/IFRvU3RyaW5nKHN0cmluZykuCiAgICAgSlNTdHJpbmcqIGlucHV0U3RyaW5nID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAgU3RyaW5nIGlucHV0ID0gaW5wdXRT
dHJpbmctPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgQVNTRVJUKCFp
bnB1dC5pc051bGwoKSk7CiAKICAgICAvLyA0LiBbaGFuZGxlZCBieSBKUyBidWlsdGluXSBMZXQg
QyBiZSA/IFNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgJVJlZ0V4cCUpLgpAQCAtNjAzLDggKzU4OSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAvLyAxMS4g
TGV0IEEgYmUgQXJyYXlDcmVhdGUoMCkuCiAgICAgLy8gMTIuIExldCBsZW5ndGhBIGJlIDAuCiAg
ICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IDA7CiAKICAgICAv
LyAxMy4gSWYgbGltaXQgaXMgdW5kZWZpbmVkLCBsZXQgbGltIGJlIDJeMzItMTsgZWxzZSBsZXQg
bGltIGJlID8gVG9VaW50MzIobGltaXQpLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MSwxOCArNjEsMTUgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29ucwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxG
dW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSog
c2V0U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUo
ZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+c2V0U3RydWN0dXJlKCkpOwot
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBKU1NldCogc2V0ID0gSlNTZXQ6OmNyZWF0ZShleGVjLCB2
bSwgc2V0U3RydWN0dXJlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJs
ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChpdGVyYWJsZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNldCk7CiAKICAgICBKU1ZhbHVl
IGFkZGVyRnVuY3Rpb24gPSBzZXQtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYWRk
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgQ2FsbERhdGEgYWRkZXJGdW5jdGlvbkNh
bGxEYXRhOwogICAgIENhbGxUeXBlIGFkZGVyRnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRh
KGFkZGVyRnVuY3Rpb24sIGFkZGVyRnVuY3Rpb25DYWxsRGF0YSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw4ICsxMDAsNyBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgZG91YmxlIGNvZGVQb2ludEFzRG91YmxlID0g
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgICAgICB1aW50MzJfdCBjb2RlUG9pbnQgPSBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oY29kZVBvaW50QXNEb3VibGUpOwogCkBAIC0xMjYsOCArMTI1LDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+
bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKIAogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN0cmluZ09iamVjdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1
cmUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDggKzEyMSw3IEBAIGJv
b2wgU3RyaW5nT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU08KICAgICAgICAgYm9vbCBpc0N1
cnJlbnREZWZpbmVkID0gdGhpc09iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMs
IHByb3BlcnR5TmFtZSwgY3VycmVudCk7CiAgICAgICAgIEFTU0VSVChpc0N1cnJlbnREZWZpbmVk
KTsKICAgICAgICAgYm9vbCBpc0V4dGVuc2libGUgPSB0aGlzT2JqZWN0LT5pc0V4dGVuc2libGUo
ZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZh
bHNlKTsKICAgICAgICAgcmV0dXJuIHZhbGlkYXRlQW5kQXBwbHlQcm9wZXJ0eURlc2NyaXB0b3Io
ZXhlYywgbnVsbHB0ciwgcHJvcGVydHlOYW1lLCBpc0V4dGVuc2libGUsIGRlc2NyaXB0b3IsIGlz
Q3VycmVudERlZmluZWQsIGN1cnJlbnQsIHRocm93RXhjZXB0aW9uKTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDggKzQ4MCw3IEBAIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKIAogICAgIGNvbnN0IFN0cmluZyYg
c291cmNlID0gc3RyaW5nLT52YWx1ZShleGVjKTsKICAgICB1bnNpZ25lZCBzb3VyY2VMZW4gPSBz
b3VyY2UubGVuZ3RoKCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBSZWdFeHBPYmplY3Qq
IHJlZ0V4cE9iamVjdCA9IGFzUmVnRXhwT2JqZWN0KHNlYXJjaFZhbHVlKTsKICAgICBSZWdFeHAq
IHJlZ0V4cCA9IHJlZ0V4cE9iamVjdC0+cmVnRXhwKCk7CiAgICAgYm9vbCBnbG9iYWwgPSByZWdF
eHAtPmdsb2JhbCgpOwpAQCAtNDg5LDggKzQ4OCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVu
Y29kZWRKU1ZhbHVlIHJlcGwKICAgICBpZiAoZ2xvYmFsKSB7CiAgICAgICAgIC8vIEVTNS4xIDE1
LjUuNC4xMCBzdGVwIDguYS4KICAgICAgICAgcmVnRXhwT2JqZWN0LT5zZXRMYXN0SW5kZXgoZXhl
YywgMCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgICAgICBpZiAo
Y2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUgJiYgIXJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgp
KQogICAgICAgICAgICAgcmV0dXJuIHJlbW92ZVVzaW5nUmVnRXhwU2VhcmNoKHZtLCBleGVjLCBz
dHJpbmcsIHNvdXJjZSwgcmVnRXhwKTsKQEAgLTUxMiw4ICs1MTAsNyBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgICAgIGludCBhcmdDb3VudCA9IHJlZ0V4
cC0+bnVtU3VicGF0dGVybnMoKSArIDEgKyAyOwogICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jID0g
anNDYXN0PEpTRnVuY3Rpb24qPihyZXBsYWNlVmFsdWUpOwogICAgICAgICBDYWNoZWRDYWxsIGNh
Y2hlZENhbGwoZXhlYywgZnVuYywgYXJnQ291bnQpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgICAgIGlmIChzb3VyY2UuaXM4Qml0KCkpIHsKICAgICAgICAgICAgIHdo
aWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgaW50KiBvdmVjdG9yOwpAQCAtNTQwLDggKzUz
Nyw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAg
ICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAg
ICAgSlNWYWx1ZSBqc1Jlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwogICAgICAgICAgICAgICAg
IHJlcGxhY2VtZW50cy5hcHBlbmQoanNSZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogCiAgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gcmVzdWx0LmVuZDsKICAgICAgICAg
ICAgICAgICBzdGFydFBvc2l0aW9uID0gbGFzdEluZGV4OwpAQCAtNTc5LDggKzU3NSw3IEBAIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAgICAgICAgICBj
YWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1
ZSBqc1Jlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwogICAgICAgICAgICAgICAgIHJlcGxhY2Vt
ZW50cy5hcHBlbmQoanNSZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICAg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAg
ICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gcmVzdWx0LmVuZDsKICAgICAgICAgICAgICAgICBz
dGFydFBvc2l0aW9uID0gbGFzdEluZGV4OwpAQCAtNjE4LDkgKzYxMywxMCBAQCBzdGF0aWMgQUxX
QVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgICAgICAgICAgICAgYXJncy5hcHBl
bmQoanNOdW1iZXIocmVzdWx0LnN0YXJ0KSk7CiAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQo
c3RyaW5nKTsKIAotICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQoY2FsbChleGVj
LCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncyku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBjYWxsKGV4ZWMsIHJlcGxhY2VWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5l
ZCgpLCBhcmdzKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIGludCByZXBsTGVuID0gcmVwbGFjZW1lbnRTdHJpbmcubGVu
Z3RoKCk7CiAgICAgICAgICAgICAgICAgaWYgKGxhc3RJbmRleCA8IHJlc3VsdC5zdGFydCB8fCBy
ZXBsTGVuKSB7CkBAIC02NjUsOCArNjYxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25TdAogICAgIGlmIChyZWdFeHAtPmdsb2JhbCgpKSB7CiAgICAgICAgIC8vIEVT
NS4xIDE1LjUuNC4xMCBzdGVwIDguYS4KICAgICAgICAgc2VhcmNoVmFsdWUtPnNldExhc3RJbmRl
eChleGVjLCAwKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBy
ZXR1cm4gcmVtb3ZlVXNpbmdSZWdFeHBTZWFyY2godm0sIGV4ZWMsIHRoaXNWYWx1ZSwgdGhpc1Zh
bHVlLT52YWx1ZShleGVjKSwgcmVnRXhwKTsKICAgICB9CiAKQEAgLTY5Nyw4ICs2OTIsNyBAQCBz
dGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgQ2FsbFR5cGUgY2Fs
bFR5cGUgPSBnZXRDYWxsRGF0YShyZXBsYWNlVmFsdWUsIGNhbGxEYXRhKTsKICAgICBpZiAoY2Fs
bFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpIHsKICAgICAgICAgcmVwbGFjZW1lbnRTdHJpbmcgPSBy
ZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlcGxhY2VVc2luZ1JlZ0V4
cFNlYXJjaCgKQEAgLTcxMSw4ICs3MDUsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVk
SlNWYWx1ZSByZXBsCiAKICAgICBjb25zdCBTdHJpbmcmIHN0cmluZyA9IGpzU3RyaW5nLT52YWx1
ZShleGVjKTsKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gc2VhcmNoVmFsdWUudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBzaXplX3Qg
bWF0Y2hTdGFydCA9IHN0cmluZy5maW5kKHNlYXJjaFN0cmluZyk7CiAKQEAgLTcyNywxMyArNzIw
LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAg
YXJncy5hcHBlbmQoanNOdW1iZXIobWF0Y2hTdGFydCkpOwogICAgICAgICBhcmdzLmFwcGVuZChq
c1N0cmluZyk7CiAgICAgICAgIHJlcGxhY2VWYWx1ZSA9IGNhbGwoZXhlYywgcmVwbGFjZVZhbHVl
LCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpOwotICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHJlcGxhY2VTdHJpbmcg
PSByZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAKICAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RyaW5nLmltcGwoKTsK
ICAgICBTdHJpbmcgbGVmdFBhcnQoU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0lt
cGwoKnN0cmluZ0ltcGwsIDAsIG1hdGNoU3RhcnQpKTsKQEAgLTgxNyw4ICs4MDgsNyBAQCBBTFdB
WVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2UoCiAgICAgaWYgKCFjaGVja09iamVjdENv
ZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
LCBzY29wZSk7CiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiByZXBsYWNlKHZtLCBleGVjLCBz
dHJpbmcsIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpOwogfQogCkBAIC04MjgsOCArODE4LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBl
eGVjLT50aGlzVmFsdWUoKS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
CiAgICAgSlNWYWx1ZSBzZWFyY2hWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICgh
c2VhcmNoVmFsdWUuaW5oZXJpdHMoUmVnRXhwT2JqZWN0OjppbmZvKCkpKQpAQCAtODQ0LDggKzgz
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1N0cmluZyogc3RyaW5n
ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKIAogICAgIHJldHVybiByZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2goZXhlYy0+dm0oKSwgZXhl
Yywgc3RyaW5nLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSkpOwogfQpAQCAt
OTUzLDggKzk0MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8K
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAK
LSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgZG91YmxlIGRvdWJsZVBvc2l0aW9uID0gYXJn
dW1lbnQwLnRvSW50ZWdlcihleGVjKTsKICAgICBpZiAoZG91YmxlUG9zaXRpb24gPj0gMCAmJiBk
b3VibGVQb3NpdGlvbiA8IGxlbmd0aCkKQEAgLTEwNjUsOCArMTA1Miw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNp
YmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNj
b3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGludCBsZW4gPSBzLmxlbmd0aCgpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKGxlbiA+PSAwKTsKQEAgLTExMzAsMTUgKzExMTYsMTMgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIC8vIDMuIExldCBTIGJl
IHRoZSByZXN1bHQgb2YgY2FsbGluZyBUb1N0cmluZywgZ2l2aW5nIGl0IHRoZSB0aGlzIHZhbHVl
IGFzIGl0cyBhcmd1bWVudC4KICAgICAvLyA3LiBMZXQgcyBiZSB0aGUgbnVtYmVyIG9mIGNoYXJh
Y3RlcnMgaW4gUy4KICAgICBTdHJpbmcgaW5wdXQgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgQVNTRVJUKCFpbnB1dC5p
c051bGwoKSk7CiAKICAgICAvLyA0LiBMZXQgQSBiZSBhIG5ldyBhcnJheSBjcmVhdGVkIGFzIGlm
IGJ5IHRoZSBleHByZXNzaW9uIG5ldyBBcnJheSgpCiAgICAgLy8gICAgd2hlcmUgQXJyYXkgaXMg
dGhlIHN0YW5kYXJkIGJ1aWx0LWluIGNvbnN0cnVjdG9yIHdpdGggdGhhdCBuYW1lLgogICAgIEpT
QXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKIAogICAgIC8vIDUuIExldCBsZW5ndGhBIGJlIDAuCiAgICAgdW5zaWduZWQg
cmVzdWx0TGVuZ3RoID0gMDsKQEAgLTExNTQsOCArMTEzOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAvLyAgICBvdGhlcndpc2UgbGV0IFIgPSBUb1N0
cmluZyhzZXBhcmF0b3IpLgogICAgIEpTVmFsdWUgc2VwYXJhdG9yVmFsdWUgPSBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKICAgICBTdHJpbmcgc2VwYXJhdG9yID0gc2VwYXJhdG9yVmFsdWUu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAg
ICAvLyAxMC4gSWYgbGltID09IDAsIHJldHVybiBBLgogICAgIGlmICghbGltaXQpCkBAIC0xMjYz
LDggKzEyNDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAg
ICAgICAgIGxlbiA9IGpzU3RyaW5nLT5sZW5ndGgoKTsKICAgICB9IGVsc2UgewogICAgICAgICB1
U3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBsZW4gPSB1U3RyaW5nLmxlbmd0aCgp
OwogICAgIH0KIApAQCAtMTMxNiw4ICsxMjk4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBz
Y29wZSk7CiAKICAgICBKU1N0cmluZyoganNTdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1
bWVudCgwKTsKICAgICBKU1ZhbHVlIGExID0gZXhlYy0+YXJndW1lbnQoMSk7CkBAIC0xMzkwLDEz
ICsxMzcxLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAg
ICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAg
IEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJpbmcgc3RyID0gYTAudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihDb2xsYXRvcigpLmNvbGxhdGUocywgc3RyKSkp
OwogfQogCkBAIC0xNDE2LDggKzEzOTUsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdG9Mb2Nh
bGVDYXNlKEV4ZWNTCiAgICAgY29uc3QgU3RyaW5nJiBzID0gc1ZhbC0+dmFsdWUoc3RhdGUpOwog
CiAgICAgLy8gMy4gUmV0dXJuSWZBYnJ1cHQoUykuCi0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAog
ICAgIC8vIE9wdGltaXphdGlvbiBmb3IgZW1wdHkgc3RyaW5ncy4KICAgICBpZiAocy5pc0VtcHR5
KCkpCkBAIC0xNDI3LDggKzE0MDUsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdG9Mb2NhbGVD
YXNlKEV4ZWNTCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNh
bGl6ZUxvY2FsZUxpc3QoKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwogCiAgICAgLy8gNS4g
UmV0dXJuSWZBYnJ1cHQocmVxdWVzdGVkTG9jYWxlcykuCi0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
IAogICAgIC8vIDYuIExldCBsZW4gYmUgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiByZXF1ZXN0
ZWRMb2NhbGVzLgogICAgIHNpemVfdCBsZW4gPSByZXF1ZXN0ZWRMb2NhbGVzLnNpemUoKTsKQEAg
LTE1MTEsOCArMTQ4OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
IjxiaWc+IiwgcywgIjwvYmlnPiIpKTsKIH0KIApAQCAtMTUyNSw4ICsxNTAxLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RD
b2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHNtYWxsPiIsIHMsICI8L3NtYWxsPiIp
KTsKIH0KIApAQCAtMTUzOSw4ICsxNTE0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmlu
ZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0
cmluZyhleGVjLCAiPGJsaW5rPiIsIHMsICI8L2JsaW5rPiIpKTsKIH0KIApAQCAtMTU1Myw4ICsx
NTI3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlm
ICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGI+Iiwgcywg
IjwvYj4iKSk7CiB9CiAKQEAgLTE1NjcsOCArMTU0MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNW
YWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAg
ICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRy
aXZpYWxTdHJpbmcoZXhlYywgIjx0dD4iLCBzLCAiPC90dD4iKSk7CiB9CiAKQEAgLTE1ODEsOCAr
MTU1Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBp
ZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxpPiIsIHMs
ICI8L2k+IikpOwogfQogCkBAIC0xNTk1LDggKzE1NjYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlz
VmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAg
ICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250
cml2aWFsU3RyaW5nKGV4ZWMsICI8c3RyaWtlPiIsIHMsICI8L3N0cmlrZT4iKSk7CiB9CiAKQEAg
LTE2MDksOCArMTU3OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
IjxzdWI+IiwgcywgIjwvc3ViPiIpKTsKIH0KIApAQCAtMTYyMyw4ICsxNTkyLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RD
b2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHN1cD4iLCBzLCAiPC9zdXA+IikpOwog
fQogCkBAIC0xNjM3LDggKzE2MDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMg
PSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgU3RyaW5n
IGNvbG9yID0gYTAudG9XVEZTdHJpbmcoZXhlYyk7CkBAIC0xNjU2LDggKzE2MjMsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVj
dENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhl
Yy0+YXJndW1lbnQoMCk7CiAKQEAgLTE3MTEsOCArMTY3Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRo
aXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsK
ICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgw
KTsKICAgICBTdHJpbmcgYW5jaG9yID0gYTAudG9XVEZTdHJpbmcoZXhlYyk7CkBAIC0xNzMwLDgg
KzE2OTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAg
aWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBK
U1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgU3RyaW5nIGxpbmtUZXh0ID0gYTAu
dG9XVEZTdHJpbmcoZXhlYyk7CkBAIC0xNzc4LDggKzE3NDIsNyBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUgdHJpbVN0cmluZyhFeGVjU3RhCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0
aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUpOwog
ICAgIFN0cmluZyBzdHIgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAK
ICAgICB1bnNpZ25lZCBsZWZ0ID0gMDsKICAgICBpZiAodHJpbUtpbmQgJiBUcmltTGVmdCkgewpA
QCAtMTgzNiwxOSArMTc5OSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAog
ICAgIFN0cmluZyBzdHJpbmdUb1NlYXJjaEluID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4
ZWMtPmFyZ3VtZW50KDApOwogICAgIGJvb2wgaXNSZWd1bGFyRXhwcmVzc2lvbiA9IGlzUmVnRXhw
KHZtLCBleGVjLCBhMCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGlmIChpc1JlZ3VsYXJFeHBy
ZXNzaW9uKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgIkFy
Z3VtZW50IHRvIFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCBjYW5ub3QgYmUgYSBSZWdFeHAi
KTsKIAogICAgIFN0cmluZyBzZWFyY2hTdHJpbmcgPSBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIEpTVmFsdWUgcG9zaXRpb25Bcmcg
PSBleGVjLT5hcmd1bWVudCgxKTsKICAgICB1bnNpZ25lZCBzdGFydCA9IDA7CkBAIC0xODU3LDgg
KzE4MTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAg
ZWxzZSB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZ1RvU2VhcmNoSW4ubGVuZ3Ro
KCk7CiAgICAgICAgIHN0YXJ0ID0gY2xhbXBBbmRUcnVuY2F0ZVRvVW5zaWduZWQocG9zaXRpb25B
cmcudG9JbnRlZ2VyKGV4ZWMpLCAwLCBsZW5ndGgpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
c3RyaW5nVG9TZWFyY2hJbi5oYXNJbmZpeFN0YXJ0aW5nQXQoc2VhcmNoU3RyaW5nLCBzdGFydCkp
KTsKQEAgLTE4NzQsMTkgKzE4MzMsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7
CiAKICAgICBTdHJpbmcgc3RyaW5nVG9TZWFyY2hJbiA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIEpTVmFsdWUgYTAg
PSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBib29sIGlzUmVndWxhckV4cHJlc3Npb24gPSBpc1Jl
Z0V4cCh2bSwgZXhlYywgYTApOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpZiAoaXNSZWd1bGFy
RXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUs
ICJBcmd1bWVudCB0byBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoIGNhbm5vdCBiZSBhIFJlZ0V4
cCIpOwogCiAgICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsKIApAQCAtMTg5Niw4ICsxODUyLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICBlbmQgPSBzdGQ6Om1h
eCgwLCBlbmRQb3NpdGlvbkFyZy5hc0ludDMyKCkpOwogICAgIGVsc2UgaWYgKCFlbmRQb3NpdGlv
bkFyZy5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIGVuZCA9IGNsYW1wQW5kVHJ1bmNhdGVUb1Vu
c2lnbmVkKGVuZFBvc2l0aW9uQXJnLnRvSW50ZWdlcihleGVjKSwgMCwgbGVuZ3RoKTsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KIAogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKHN0cmluZ1RvU2VhcmNoSW4uaGFzSW5maXhFbmRpbmdBdChzZWFy
Y2hTdHJpbmcsIHN0ZDo6bWluKGVuZCwgbGVuZ3RoKSkpKTsKQEAgLTE5MTIsOCArMTg2Nyw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmkKICAgICBlbHNlIHsKICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsKICAgICAg
ICAgc3RhcnQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChwb3NpdGlvbkFyZy50b0ludGVn
ZXIoZXhlYyksIDAsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICB9CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihzdHJpbmdUb1Nl
YXJjaEluLmNvbnRhaW5zKHNlYXJjaFN0cmluZywgdHJ1ZSwgc3RhcnQpKSk7CkBAIC0xOTI5LDE5
ICsxODgzLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RyaW5n
IHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1l
bnQoMCk7CiAgICAgYm9vbCBpc1JlZ3VsYXJFeHByZXNzaW9uID0gaXNSZWdFeHAodm0sIGV4ZWMs
IGEwKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaWYgKGlzUmVndWxhckV4cHJlc3Npb24pCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiQXJndW1lbnQgdG8g
U3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyBjYW5ub3QgYmUgYSBSZWdFeHAiKTsKIAogICAgIFN0
cmluZyBzZWFyY2hTdHJpbmcgPSBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIEpTVmFsdWUgcG9zaXRpb25BcmcgPSBleGVjLT5hcmd1
bWVudCgxKTsKIApAQCAtMTk1NywxMyArMTkwOCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGJ1aWx0aW5TdHJpCiAgICAgQVNTRVJUKGNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNW
YWx1ZSkpOwogCiAgICAgU3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlzVmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBKU1Zh
bHVlIGEwID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgU3RyaW5nIHNlYXJjaFN0
cmluZyA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogCiAgICAgSlNWYWx1ZSBwb3NpdGlvbkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogCkBA
IC0yMDE4LDE1ICsxOTY3LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBKU1N0cmluZzo6U2Fm
ZVZpZXcgc291cmNlID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52aWV3KGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBVTm9ybWFsaXphdGlvbk1vZGUgZm9ybSA9IFVOT1JN
X05GQzsKICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgYXJndW1lbnQgaXMgcHJvdmlkZWQgYW5kIGlz
IG5vdCB1bmRlZmluZWQuCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgp
KSB7CiAgICAgICAgIFN0cmluZyBmb3JtU3RyaW5nID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAKICAgICAgICAgaWYgKGZvcm1TdHJpbmcgPT0gIk5GQyIpCiAgICAgICAgICAg
ICBmb3JtID0gVU5PUk1fTkZDOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDAsMTEgKzEwMCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3ltYm9sQ29uc3QKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU1N0cmluZyogc3RyaW5nS2V5ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBTdHJpbmcgc3RyaW5nID0gc3RyaW5nS2V5
LT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShTeW1ib2w6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT52bSgpLnN5bWJvbFJl
Z2lzdHJ5KCkuc3ltYm9sRm9yS2V5KHN0cmluZykpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAy
MDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDExICs0OSw5IEBAIEpTQXJyYXkqIFRlbXBsYXRlUmVn
aXN0cnk6OmdldFRlbXBsYXRlT2IKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgdW5zaWduZWQgY291bnQgPSB0ZW1wbGF0ZUtleS5jb29rZWRTdHJpbmdzKCku
c2l6ZSgpOwogICAgIEpTQXJyYXkqIHRlbXBsYXRlT2JqZWN0ID0gY29uc3RydWN0RW1wdHlBcnJh
eShleGVjLCBudWxscHRyLCBjb3VudCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAgICAgSlNBcnJheSogcmF3T2JqZWN0ID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCBudWxscHRyLCBjb3VudCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7CiAKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXgg
PCBjb3VudDsgKytpbmRleCkgewogICAgICAgICB0ZW1wbGF0ZU9iamVjdC0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaW5kZXgsIGpzU3RyaW5nKGV4ZWMsIHRlbXBsYXRlS2V5LmNvb2tlZFN0cmluZ3Mo
KVtpbmRleF0pLCBSZWFkT25seSB8IERvbnREZWxldGUsIFB1dERpcmVjdEluZGV4TGlrZVB1dERp
cmVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwQ29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dl
YWtNYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDE2ICs1OSwxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9u
KGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3RydWN0dXJlKiB3ZWFrTWFw
U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhl
YywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+d2Vha01hcFN0cnVjdHVyZSgpKTsK
LSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgSlNXZWFrTWFwKiB3ZWFrTWFwID0gSlNXZWFrTWFwOjpj
cmVhdGUoZXhlYywgd2Vha01hcFN0cnVjdHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4
ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChpdGVyYWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHdlYWtNYXApOwogCiAgICAgSlNWYWx1ZSBh
ZGRlckZ1bmN0aW9uID0gd2Vha01hcC0+SlNPYmplY3Q6OmdldChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuc2V0KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgQ2FsbERhdGEgYWRk
ZXJGdW5jdGlvbkNhbGxEYXRhOwogICAgIENhbGxUeXBlIGFkZGVyRnVuY3Rpb25DYWxsVHlwZSA9
IGdldENhbGxEYXRhKGFkZGVyRnVuY3Rpb24sIGFkZGVyRnVuY3Rpb25DYWxsRGF0YSk7CkBAIC04
MywxMiArODEsMTAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwog
ICAgICAgICB9CiAKICAgICAgICAgSlNWYWx1ZSBrZXkgPSBuZXh0SXRlbS5nZXQoZXhlYywgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KDApKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKIAogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbmV4dEl0ZW0uZ2V0
KGV4ZWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigxKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgYXJndW1lbnRzOwogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGtleSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dl
YWtTZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDE2ICs1OSwxNCBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+
Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3RydWN0dXJlKiB3ZWFrU2V0U3RydWN0dXJlID0gSW50ZXJu
YWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0
KCksIGdsb2JhbE9iamVjdC0+d2Vha1NldFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgSlNXZWFrU2V0KiB3ZWFrU2V0ID0gSlNXZWFrU2V0OjpjcmVhdGUoZXhlYywgd2Vha1Nl
dFN0cnVjdHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwog
ICAgIGlmIChpdGVyYWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHdlYWtTZXQpOwogCiAgICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9uID0gd2Vh
a1NldC0+SlNPYmplY3Q6OmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYWRkKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgQ2FsbERhdGEgYWRkZXJGdW5jdGlvbkNhbGxEYXRh
OwogICAgIENhbGxUeXBlIGFkZGVyRnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRhKGFkZGVy
RnVuY3Rpb24sIGFkZGVyRnVuY3Rpb25DYWxsRGF0YSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
MDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMiw4ICszMTIsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFy
Z3VtZW50Q291bnQoKTsgKytpKSB7CiAgICAgICAgIFN0cmluZyBhcmdTdHIgPSBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgZGF0YUxvZyhhcmdTdHIpOwogICAgIH0K
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvQXJyYXlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvQXJyYXlWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0FycmF5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTMs
OCArOTQsNyBAQCBib29sIEFycmF5VmFsdWU6OmdldChzaXplX3QgaW5kZXgsIFN0cmluCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHZhbHVlID0gaW5kZXhlZFZhbHVlLnRvV1RGU3RyaW5n
KG1fZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAog
ICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURC
QmluZGluZ1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05Nyw4ICs5Nyw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUmIHN0YXRlLCBKU0ds
b2JhbE8KICAgICAgICAgYXV0byYgaW5BcnJheSA9IGtleS0+YXJyYXkoKTsKICAgICAgICAgdW5z
aWduZWQgc2l6ZSA9IGluQXJyYXkuc2l6ZSgpOwogICAgICAgICBhdXRvIG91dEFycmF5ID0gY29u
c3RydWN0RW1wdHlBcnJheSgmc3RhdGUsIDAsICZnbG9iYWxPYmplY3QsIHNpemUpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUo
KSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICAg
ICAgb3V0QXJyYXktPnB1dERpcmVjdEluZGV4KCZzdGF0ZSwgaSwgdG9KUyhzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBpbkFycmF5LmF0KGkpLmdldCgpKSk7CiAgICAgICAgIHJldHVybiBvdXRBcnJheTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXBwbGVQYXlTZXNzaW9uQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FwcGxlUGF5
U2Vzc2lvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQXBwbGVQYXlTZXNzaW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTUsMTYgKzU1LDEzIEBAIEpTVmFsdWUgSlNBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlU2hpcHAK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHVpbnQxNl90IHN0YXR1cyA9IGNvbnZl
cnQ8dWludDE2X3Q+KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsK
IAogICAgIERpY3Rpb25hcnkgbmV3VG90YWwgPSB7ICZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMSkg
fTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkp
OwogCiAgICAgQXJyYXlWYWx1ZSBuZXdMaW5lSXRlbXMgeyAmc3RhdGUsIHN0YXRlLmFyZ3VtZW50
KDIpIH07Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1
ZSgpKTsKICAgICBpbXBsLmNvbXBsZXRlU2hpcHBpbmdNZXRob2RTZWxlY3Rpb24oc3RhdHVzLCBu
ZXdUb3RhbCwgbmV3TGluZUl0ZW1zLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwg
ZWMpOwogCkBAIC04OCwyMCArODUsMTYgQEAgSlNWYWx1ZSBKU0FwcGxlUGF5U2Vzc2lvbjo6Y29t
cGxldGVTaGlwcAogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgdWludDE2X3Qgc3Rh
dHVzID0gY29udmVydDx1aW50MTZfdD4oc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApLCBOb3JtYWxD
b252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBK
U1ZhbHVlKCkpOwogCiAgICAgQXJyYXlWYWx1ZSBuZXdTaGlwcGluZ01ldGhvZHMgeyAmc3RhdGUs
IHN0YXRlLmFyZ3VtZW50KDEpIH07Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIERpY3Rpb25hcnkgbmV3VG90YWwgPSB7ICZzdGF0
ZSwgc3RhdGUuYXJndW1lbnQoMikgfTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgQXJyYXlWYWx1ZSBuZXdMaW5lSXRlbXMgeyAm
c3RhdGUsIHN0YXRlLmFyZ3VtZW50KDMpIH07Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBpbXBsLmNvbXBsZXRlU2hpcHBpbmdDb250
YWN0U2VsZWN0aW9uKHN0YXR1cywgbmV3U2hpcHBpbmdNZXRob2RzLCBuZXdUb3RhbCwgbmV3TGlu
ZUl0ZW1zLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCkBAIC0xMjUs
MTIgKzExOCwxMCBAQCBKU1ZhbHVlIEpTQXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZVBheW1lCiAK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBEaWN0aW9uYXJ5IG5ld1RvdGFsID0geyAm
c3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApIH07Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIEFycmF5VmFsdWUgbmV3TGluZUl0ZW1z
IHsgJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgxKSB9OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgaW1wbC5jb21wbGV0ZVBheW1lbnRN
ZXRob2RTZWxlY3Rpb24obmV3VG90YWwsIG5ld0xpbmVJdGVtcywgZWMpOwogICAgIHNldERPTUV4
Y2VwdGlvbigmc3RhdGUsIGVjKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw4ICs0Nyw3IEBAIHZvaWQgSlNBdWRpb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0
ZSYgc3QKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBh
dXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIHdyYXBwZWQoKS5zZXRLaW5k
KHN0cmluZyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC02Myw4ICs2Miw3
IEBAIHZvaWQgSlNBdWRpb1RyYWNrOjpzZXRMYW5ndWFnZShFeGVjU3RhdGUKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRvJiBzdHJpbmcgPSB2YWx1
ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOwogICAgIHdyYXBwZWQoKS5zZXRMYW5ndWFnZShzdHJpbmcpOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNCbG9iQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw4
ICs4MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKIAogICAg
IHVuc2lnbmVkIGJsb2JQYXJ0c0xlbmd0aCA9IDA7CiAgICAgSlNPYmplY3QqIGJsb2JQYXJ0cyA9
IHRvSlNTZXF1ZW5jZShleGVjLCBleGVjLnVuY2hlY2tlZEFyZ3VtZW50KDApLCBibG9iUGFydHNM
ZW5ndGgpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgQVNTRVJUKGJsb2JQYXJ0cyk7CiAK
ICAgICBTdHJpbmcgdHlwZTsKQEAgLTEwMSw4ICsxMDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAKICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQgdGhlIGVu
ZGluZ3MgcHJvcGVydHkgYW5kIHZhbGlkYXRlIGl0LgogICAgICAgICBib29sIGNvbnRhaW5zRW5k
aW5ncyA9IGRpY3Rpb25hcnkuZ2V0KCJlbmRpbmdzIiwgZW5kaW5ncyk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgICAgICBpZiAoY29udGFpbnNFbmRpbmdzKSB7CiAg
ICAgICAgICAgICBpZiAoZW5kaW5ncyAhPSAidHJhbnNwYXJlbnQiICYmIGVuZGluZ3MgIT0gIm5h
dGl2ZSIpCkBAIC0xMTEsOCArMTA5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RKUwogCiAgICAgICAgIC8vIEF0dGVtcHQgdG8gZ2V0IHRoZSB0eXBlIHByb3BlcnR5
LgogICAgICAgICBkaWN0aW9uYXJ5LmdldCgidHlwZSIsIHR5cGUpOwotICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogCiAgICAgQVNTRVJUKGVuZGluZ3MgPT0gInRyYW5z
cGFyZW50IiB8fCBlbmRpbmdzID09ICJuYXRpdmUiKTsKQEAgLTEyMSw4ICsxMTgsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYmxvYlBhcnRzTGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBpdGVt
ID0gYmxvYlBhcnRzLT5nZXQoJmV4ZWMsIGkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAKICAgICAgICAgaWYgKEFycmF5QnVmZmVyKiBhcnJheUJ1ZmZlciA9IHRvQXJyYXlC
dWZmZXIoaXRlbSkpCiAgICAgICAgICAgICBibG9iQnVpbGRlci5hcHBlbmQoYXJyYXlCdWZmZXIp
OwpAQCAtMTMyLDggKzEyOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0SlMKICAgICAgICAgICAgIGJsb2JCdWlsZGVyLmFwcGVuZChibG9iKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0gaXRlbS50b1dURlN0cmluZygmZXhlYyk7
Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAg
ICAgIGJsb2JCdWlsZGVyLmFwcGVuZChzdHJpbmcsIGVuZGluZ3MpOwogICAgICAgICB9CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9u
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NT
U1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNTUsOCArMzU1LDcgQEAgSlNWYWx1ZSBKU0NTU1N0eWxlRGVjbGFyYXRp
b246OmdldFByb3BlcgogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBTdHJpbmcg
cHJvcGVydHlOYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoJnN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVl
KCkpOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IHdyYXBwZWQoKS5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKCFjc3NWYWx1ZSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbW1hbmRMaW5lQVBJ
SG9zdEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IE1hdHQg
TGlsZWsgPHdlYmtpdEBtYXR0bGlsZWsuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC03MCw4ICs3MCw3IEBAIHN0
YXRpYyBKU0FycmF5KiBnZXRKU0xpc3RlbmVyRnVuY3Rpb25zKEUKICAgICBWTSYgdm0gPSBzdGF0
ZS52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KCZzdGF0ZSwgbnVsbHB0cik7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgc2l6ZV90
IGhhbmRsZXJzQ291bnQgPSBsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3Rvci5zaXplKCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDAsIG91dHB1dEluZGV4ID0gMDsgaSA8IGhhbmRsZXJzQ291
bnQ7ICsraSkgewogICAgICAgICBjb25zdCBKU0V2ZW50TGlzdGVuZXIqIGpzTGlzdGVuZXIgPSBK
U0V2ZW50TGlzdGVuZXI6OmNhc3QoJmxpc3RlbmVySW5mby5ldmVudExpc3RlbmVyVmVjdG9yW2ld
LT5jYWxsYmFjaygpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRv
QWxnb3JpdGhtRGljdGlvbmFyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcAkocmV2aXNpb24gMjA2MzM3
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9u
YXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsOCArODAsNyBAQCBib29sIEpTQ3J5cHRvQWxn
b3JpdGhtRGljdGlvbmFyeTo6Z2V0QWxnCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgaWYgKCFhbGdvcml0aG1OYW1l
LmNvbnRhaW5zT25seUFTQ0lJKCkpIHsKICAgICAgICAgdGhyb3dTeW50YXhFcnJvcihleGVjLCBz
Y29wZSk7CkBAIC0xMTMsOCArMTEyLDcgQEAgc3RhdGljIGJvb2wgZ2V0SGFzaEFsZ29yaXRobShK
U0RpY3Rpb25hcgogICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgImhhc2giKTsKIAogICAgIEpTVmFsdWUgaGFzaCA9IGdldFByb3BlcnR5KGV4
ZWMsIG9iamVjdCwgImhhc2giKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZmFsc2UpOwogCiAgICAgaWYgKGhhc2guaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICBp
ZiAoaXNSZXF1aXJlZCA9PSBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKQpAQCAtMTM2LDggKzEz
NCw3IEBAIHN0YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICB9CiAK
ICAgICBKU1ZhbHVlIGl2ID0gZ2V0UHJvcGVydHkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCksICJp
diIpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAg
ICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFt
cyk7CiAKQEAgLTE3MCw4ICsxNjcsNyBAQCBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnM+CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0FsZ29yaXRo
bUFlc0tleUdlblBhcmFtcyk7CiAKICAgICBKU1ZhbHVlIGxlbmd0aFZhbHVlID0gZ2V0UHJvcGVy
dHkoJnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSwgImxlbmd0aCIpOwotICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgcmVzdWx0LT5sZW5ndGggPSBj
b252ZXJ0PHVpbnQxNl90PihzdGF0ZSwgbGVuZ3RoVmFsdWUsIEVuZm9yY2VSYW5nZSk7CiAKQEAg
LTIxOCw4ICsyMTQsNyBAQCBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmVzdWx0LT5oYXNMZW5ndGggPSBqc0Rp
Y3Rpb25hcnkuZ2V0KCJsZW5ndGgiLCByZXN1bHQtPmxlbmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICByZXR1cm4gV1RGTW92ZShyZXN1
bHQpOwogfQpAQCAtMjM4LDE3ICsyMzMsMTQgQEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzPgogICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdv
cml0aG1Sc2FLZXlHZW5QYXJhbXMpOwogCiAgICAgSlNWYWx1ZSBtb2R1bHVzTGVuZ3RoVmFsdWUg
PSBnZXRQcm9wZXJ0eSgmc3RhdGUsIHZhbHVlLmdldE9iamVjdCgpLCAibW9kdWx1c0xlbmd0aCIp
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAg
Ly8gRklYTUU6IFdoeSBubyBFbmZvcmNlUmFuZ2U/IEZpbGVkIGFzIDxodHRwczovL3d3dy53My5v
cmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTIzNzc5Pi4KICAgICByZXN1bHQtPm1vZHVs
dXNMZW5ndGggPSBjb252ZXJ0PHVpbnQzMl90PihzdGF0ZSwgbW9kdWx1c0xlbmd0aFZhbHVlLCBO
b3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBu
dWxscHRyKTsKIAogICAgIEpTVmFsdWUgcHVibGljRXhwb25lbnRWYWx1ZSA9IGdldFByb3BlcnR5
KCZzdGF0ZSwgdmFsdWUuZ2V0T2JqZWN0KCksICJwdWJsaWNFeHBvbmVudCIpOwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgUmVmUHRyPFVpbnQ4
QXJyYXk+IHB1YmxpY0V4cG9uZW50QXJyYXkgPSB0b1VpbnQ4QXJyYXkocHVibGljRXhwb25lbnRW
YWx1ZSk7CiAgICAgaWYgKCFwdWJsaWNFeHBvbmVudEFycmF5KSB7CkBAIC0yODcsOCArMjc5LDcg
QEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIEpTVmFsdWUgbGFiZWxWYWx1ZSA9IGdldFByb3BlcnR5KGV4ZWMs
IHZhbHVlLmdldE9iamVjdCgpLCAibGFiZWwiKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIHJlc3VsdC0+aGFzTGFiZWwgPSAhbGFiZWxWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwogICAgIGlmICghcmVzdWx0LT5oYXNMYWJlbCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlT
ZXJpYWxpemF0aW9uSldLLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsOCArODgsNyBAQCBzdGF0aWMgYm9vbCBnZXRTdHJpbmdGcm9tSlNPTihFeGVjU3Rh
dGUqCiAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgaWYgKCFqc1ZhbHVlLmdl
dFN0cmluZyhleGVjLCByZXN1bHQpKSB7CiAgICAgICAgIC8vIENhbiBnZXQgYW4gb3V0IG9mIG1l
bW9yeSBleGNlcHRpb24uCi0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGZhbHNlKTsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFN0cmlu
Zzo6Zm9ybWF0KCJFeHBlY3RlZCBhIHN0cmluZyB2YWx1ZSBmb3IgXCIlc1wiIEpTT04ga2V5Iiwg
IGtleSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMzIwLDggKzMxOSw3IEBA
IHZvaWQgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpyZWNvbmMKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgICAgIFN0cmluZyBqd2tVc2VTdHJp
bmc7CiAgICAgICAgIGlmICghZ2V0U3RyaW5nRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCks
ICJ1c2UiLCBqd2tVc2VTdHJpbmcpKSB7CkBAIC00MzcsOCArNDM1LDcgQEAgc3RkOjp1bmlxdWVf
cHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwogICAgIH0KIAogICAgIGlmICghZ2V0QmlnSW50
ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiZCIsIG1vZHVsdXMpKSB7
Ci0gICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAg
ICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQdWJsaWMobW9kdWx1
cywgZXhwb25lbnQpOwogICAgIH0KIApAQCAtNDQ2LDQ3ICs0NDMsNDAgQEAgc3RkOjp1bmlxdWVf
cHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwogICAgIENyeXB0b0tleURhdGFSU0FDb21wb25l
bnRzOjpQcmltZUluZm8gc2Vjb25kUHJpbWVJbmZvOwogICAgIFZlY3RvcjxDcnlwdG9LZXlEYXRh
UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvPiBvdGhlclByaW1lSW5mb3M7CiAgICAgaWYgKCFnZXRC
aWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJwIiwgZmlyc3RQ
cmltZUluZm8ucHJpbWVGYWN0b3IpKSB7Ci0gICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25l
bnRzOjpjcmVhdGVQcml2YXRlKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25lbnQpOwog
ICAgIH0KIAogICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgbV9q
c29uLmdldCgpLCAiZHAiLCBmaXJzdFByaW1lSW5mby5mYWN0b3JDUlRFeHBvbmVudCkpIHsKLSAg
ICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICBy
ZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGUobW9kdWx1cywg
ZXhwb25lbnQsIHByaXZhdGVFeHBvbmVudCk7CiAgICAgfQogCiAgICAgaWYgKCFnZXRCaWdJbnRl
Z2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJxIiwgc2Vjb25kUHJpbWVJ
bmZvLnByaW1lRmFjdG9yKSkgewotICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6
Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50KTsKICAgICB9
CiAKICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5n
ZXQoKSwgImRxIiwgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50KSkgewotICAgICAg
ICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIHJldHVy
biBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBv
bmVudCwgcHJpdmF0ZUV4cG9uZW50KTsKICAgICB9CiAKICAgICBpZiAoIWdldEJpZ0ludGVnZXJW
ZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgInFpIiwgc2Vjb25kUHJpbWVJbmZv
LmZhY3RvckNSVENvZWZmaWNpZW50KSkgewotICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9u
ZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50KTsK
ICAgICB9CiAKICAgICBKU0FycmF5KiBvdGhlclByaW1lSW5mb0pTQXJyYXk7CiAgICAgaWYgKCFn
ZXRKU0FycmF5RnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJvdGgiLCBvdGhlclByaW1l
SW5mb0pTQXJyYXkpKSB7Ci0gICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBu
dWxscHRyKTsKICAgICAgICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVh
dGVQcml2YXRlV2l0aEFkZGl0aW9uYWxEYXRhKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhw
b25lbnQsIGZpcnN0UHJpbWVJbmZvLCBzZWNvbmRQcmltZUluZm8sIG90aGVyUHJpbWVJbmZvcyk7
CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdGhlclByaW1lSW5mb0pTQXJy
YXktPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6
OlByaW1lSW5mbyBpbmZvOwogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBvdGhlclByaW1lSW5m
b0pTQXJyYXktPmdldEluZGV4KG1fZXhlYywgaSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIGlmICghZWxlbWVudC5p
c09iamVjdCgpKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIkpXSyBcIm90aFwiIGFycmF5IG1lbWJlciBpcyBub3QgYW4gb2JqZWN0Iikp
OwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NzQsOCArNTY0LDcgQEAgc3RhdGlj
IHZvaWQgYnVpbGRKU09ORm9yUlNBQ29tcG9uZW50cyhKUwogICAgICAgICByZXR1cm47CiAKICAg
ICBKU0FycmF5KiBvdGggPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDAsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgZGF0YS5vdGhlclByaW1lSW5mb3MoKS5zaXplKCkpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwLCBz
aXplID0gZGF0YS5vdGhlclByaW1lSW5mb3MoKS5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKICAg
ICAgICAgSlNPYmplY3QqIGpzUHJpbWVJbmZvID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7
CiAgICAgICAgIGFkZFRvSlNPTihleGVjLCBqc1ByaW1lSW5mbywgInIiLCBiYXNlNjRVUkxFbmNv
ZGUoZGF0YS5vdGhlclByaW1lSW5mb3MoKVtpXS5wcmltZUZhY3RvcikpOwpAQCAtNzAyLDggKzY5
MSw3IEBAIHN0YXRpYyB2b2lkIGFkZFVzYWdlc1RvSlNPTihFeGVjU3RhdGUqIGUKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBKU0FycmF5KiBrZXlPcHMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDAsIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgaWYgKHVzYWdlcyAm
IENyeXB0b0tleVVzYWdlU2lnbikKQEAgLTc0MSwxNCArNzI5LDEyIEBAIFN0cmluZyBKU0NyeXB0
b0tleVNlcmlhbGl6YXRpb25KV0s6OnNlcmkKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3Ry
dWN0RW1wdHlPYmplY3QoZXhlYyk7CiAKICAgICBhZGRKV0tBbGdvcml0aG1Ub0pTT04oZXhlYywg
cmVzdWx0LCBrZXkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBTdHJp
bmcoKSk7CiAKICAgICBhZGRCb29sVG9KU09OKGV4ZWMsIHJlc3VsdCwgImV4dCIsIGtleS5leHRy
YWN0YWJsZSgpKTsKIAogICAgIGFkZFVzYWdlc1RvSlNPTihleGVjLCByZXN1bHQsIGtleS51c2Fn
ZXNCaXRtYXAoKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFN0cmlu
ZygpKTsKIAogICAgIGlmIChpczxDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZT4oKmtleURhdGEp
KQogICAgICAgICBidWlsZEpTT05Gb3JPY3RldFNlcXVlbmNlKGV4ZWMsIGRvd25jYXN0PENyeXB0
b0tleURhdGFPY3RldFNlcXVlbmNlPigqa2V5RGF0YSkub2N0ZXRTZXF1ZW5jZSgpLCByZXN1bHQp
OwpAQCAtNzU4LDggKzc0NCw3IEBAIFN0cmluZyBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6
OnNlcmkKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgi
S2V5IGRvZXNuJ3Qgc3VwcG9ydCBleHBvcnRLZXkiKSk7CiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKICAgICB9Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFN0cmluZygp
KTsKIAogICAgIHJldHVybiBKU09OU3RyaW5naWZ5KGV4ZWMsIHJlc3VsdCwgMCk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVu
dEludGVyZmFjZS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
MSw4ICsxMTEsNyBAQCBzdGF0aWMgUmVmUHRyPEVsZW1lbnQ+IGNvbnN0cnVjdEN1c3RvbUVsCiAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEpTTWFpblRocmVhZEV4
ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0aW9uQ29uc3RydWN0KCZkb2N1bWVudCwgY29uc3RydWN0
VHlwZSwgY29uc3RydWN0RGF0YSk7CiAgICAgSlNWYWx1ZSBuZXdFbGVtZW50ID0gY29uc3RydWN0
KCZzdGF0ZSwgY29uc3RydWN0b3IsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3Mp
OwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2FsbEZ1bmN0aW9uKGNvb2tpZSwg
JmRvY3VtZW50KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKIAogICAgIEFTU0VSVCghbmV3RWxlbWVudC5pc0VtcHR5KCkpOwogICAgIEhUTUxFbGVtZW50
KiB3cmFwcGVkRWxlbWVudCA9IEpTSFRNTEVsZW1lbnQ6OnRvV3JhcHBlZChuZXdFbGVtZW50KTsK
QEAgLTE2Nyw4ICsxNjYsNyBAQCB2b2lkIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6dXBncmFk
ZUVsCiAgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CiAgICAgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoY29udGV4dCwgKm1faXNv
bGF0ZWRXb3JsZCk7CiAgICAgRXhlY1N0YXRlKiBzdGF0ZSA9IGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgQ29u
c3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlw
ZSA9IG1fY29uc3RydWN0b3ItPm1ldGhvZFRhYmxlKCktPmdldENvbnN0cnVjdERhdGEobV9jb25z
dHJ1Y3Rvci5nZXQoKSwgY29uc3RydWN0RGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50UmVnaXN0cnlDdXN0b20u
Y3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1
c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2
LDcgQEAgc3RhdGljIEpTT2JqZWN0KiBnZXRDdXN0b21FbGVtZW50Q2FsbGJhYwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgY2FsbGJhY2sg
PSBwcm90b3R5cGUuZ2V0KCZzdGF0ZSwgaWQpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOwogICAgIGlmIChjYWxsYmFjay5pc1VuZGVmaW5lZCgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIWNhbGxiYWNrLmlzRnVuY3Rpb24oKSkgewpA
QCAtODgsOCArODcsNyBAQCBKU1ZhbHVlIEpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUo
CiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIEF0b21pY1N0cmluZyBsb2NhbE5h
bWUoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dG9BdG9taWNT
dHJpbmcoJnN0YXRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgSlNWYWx1ZSgpKTsKIAogICAgIEpTVmFsdWUgY29uc3RydWN0b3JWYWx1ZSA9IHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDEpOwogICAgIGlmICghY29uc3RydWN0b3JWYWx1ZS5pc0NvbnN0cnVj
dG9yKCkpCkBAIC0xMTgsOCArMTE2LDcgQEAgSlNWYWx1ZSBKU0N1c3RvbUVsZW1lbnRSZWdpc3Ry
eTo6ZGVmaW5lKAogICAgIH0KIAogICAgIEpTVmFsdWUgcHJvdG90eXBlVmFsdWUgPSBjb25zdHJ1
Y3Rvci0+Z2V0KCZzdGF0ZSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIGlmICgh
cHJvdG90eXBlVmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ3VzdG9tIGVsZW1lbnQgY29uc3RydWN0b3In
cyBwcm90b3R5cGUgbXVzdCBiZSBhbiBvYmplY3QiKSk7CiAgICAgSlNPYmplY3QmIHByb3RvdHlw
ZU9iamVjdCA9ICphc09iamVjdChwcm90b3R5cGVWYWx1ZSk7CkBAIC0xMjksMjYgKzEyNiwyMSBA
QCBKU1ZhbHVlIEpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUoCiAKICAgICBpZiAoYXV0
byogY29ubmVjdGVkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2soc3RhdGUsIHBy
b3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjb25uZWN0ZWRDYWxs
YmFjayIpKSkKICAgICAgICAgZWxlbWVudEludGVyZmFjZS0+c2V0Q29ubmVjdGVkQ2FsbGJhY2so
Y29ubmVjdGVkQ2FsbGJhY2spOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBpZiAoYXV0byogZGlzY29ubmVjdGVkQ2FsbGJhY2sg
PSBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJkaXNjb25uZWN0ZWRDYWxsYmFjayIpKSkKICAgICAgICAg
ZWxlbWVudEludGVyZmFjZS0+c2V0RGlzY29ubmVjdGVkQ2FsbGJhY2soZGlzY29ubmVjdGVkQ2Fs
bGJhY2spOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFs
dWUoKSk7CiAKICAgICBpZiAoYXV0byogYWRvcHRlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVu
dENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAiYWRvcHRlZENhbGxiYWNrIikpKQogICAgICAgICBlbGVtZW50SW50ZXJmYWNlLT5zZXRB
ZG9wdGVkQ2FsbGJhY2soYWRvcHRlZENhbGxiYWNrKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgYXV0byogYXR0cmlidXRlQ2hh
bmdlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYXR0cmlidXRlQ2hhbmdlZENhbGxi
YWNrIikpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFs
dWUoKSk7CiAgICAgaWYgKGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaykgewogICAgICAgICBhdXRv
IHZhbHVlID0gY29udmVydE9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PihzdGF0ZSwgY29uc3RydWN0
b3ItPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAib2JzZXJ2ZWRB
dHRyaWJ1dGVzIikpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAg
ICBlbGVtZW50SW50ZXJmYWNlLT5zZXRBdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soYXR0cmlidXRl
Q2hhbmdlZENhbGxiYWNrLCAqdmFsdWUpOwogICAgIH0KQEAgLTE3MCw4ICsxNjIsNyBAQCBzdGF0
aWMgSlNWYWx1ZSB3aGVuRGVmaW5lZFByb21pc2UoRXhlY1N0CiAgICAgICAgIHJldHVybiB0aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigm
c3RhdGUpKTsKIAogICAgIEF0b21pY1N0cmluZyBsb2NhbE5hbWUoc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dG9BdG9taWNTdHJpbmcoJnN0YXRlKSk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAg
IGlmICghdmFsaWRhdGVDdXN0b21FbGVtZW50TmFtZUFuZFRocm93SWZOZWVkZWQoc3RhdGUsIGxv
Y2FsTmFtZSkpIHsKICAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMjA2
MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIzLDggKzEyMyw3IEBAIFN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIFN0cmluZ1ZpZXcgdmlldyB7IHN0
cmluZyB9OwogCiAgICAgLy8gRmFzdCBwYXRoIGZvciA4LWJpdCBzdHJpbmdzLCBzaW5jZSB0aGV5
IGNhbid0IGhhdmUgYW55IHN1cnJvZ2F0ZXMuCkBAIC0zODAsOCArMzc5LDcgQEAgYm9vbCBoYXNJ
dGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYgcwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwog
ICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBvYmplY3Qt
PmdldE1ldGhvZCgmc3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+
aXRlcmF0b3JTeW1ib2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLml0ZXJhdG9yIHByb3BlcnR5IHNo
b3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZmFsc2UpOwogCiAgICAgcmV0dXJuICFhcHBseU1ldGhvZC5pc1VuZGVmaW5lZCgpOwogfQpAQCAt
NTE5LDggKzUxNyw3IEBAIHN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJJbnQoRXhlY1N0YXRlJiAK
ICAgICB9CiAKICAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CiAKICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKICAgICBjYXNlIE5vcm1hbENvbnZlcnNpb246CkBAIC01NjYsOCArNTYzLDcgQEAgc3RhdGlj
IGlubGluZSBUIHRvU21hbGxlclVJbnQoRXhlY1N0YXRlJgogICAgIH0KIAogICAgIGRvdWJsZSB4
ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCAwKTsKIAogICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewogICAgIGNhc2UgTm9ybWFsQ29u
dmVyc2lvbjoKQEAgLTY1OSw4ICs2NTUsNyBAQCBpbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2Uo
RXhlY1N0YXRlJiBzCiAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CiAKICAgICBkb3Vi
bGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgMCk7CiAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwga01pbkludDMyLCBr
TWF4SW50MzIpOwogfQogCkBAIC02OTIsOCArNjg3LDcgQEAgdWludDMyX3QgdG9VSW50MzJFbmZv
cmNlUmFuZ2UoRXhlY1N0YXRlJgogICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKIAog
ICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCAwKTsKICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBr
TWF4VUludDMyKTsKIH0KIApAQCAtNzAzLDggKzY5Nyw3IEBAIGludDY0X3QgdG9JbnQ2NEVuZm9y
Y2VSYW5nZShFeGVjU3RhdGUmIHMKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CiAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0
ZSwgeCwgLWtKU01heEludGVnZXIsIGtKU01heEludGVnZXIpOwogfQogCkBAIC03MTQsOCArNzA3
LDcgQEAgdWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJgogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGRvdWJsZSB4ID0gdmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4gMDsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKICAg
ICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBrSlNNYXhJbnRlZ2VyKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9u
IDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NjMsOCArNTYzLDcgQEAgaW5saW5lIEpTQzo6SlNPYmplY3QqIHRv
SlNTZXF1ZW5jZShKU0M6OgogICAgIH0KIAogICAgIEpTQzo6SlNWYWx1ZSBsZW5ndGhWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZleGVjLCBleGVjLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgaWYgKGxlbmd0
aFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVF
cnJvcihleGVjLCBzY29wZSk7CkBAIC01NzIsOCArNTcxLDcgQEAgaW5saW5lIEpTQzo6SlNPYmpl
Y3QqIHRvSlNTZXF1ZW5jZShKU0M6OgogICAgIH0KIAogICAgIGxlbmd0aCA9IGxlbmd0aFZhbHVl
LnRvVUludDMyKCZleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBu
dWxscHRyKTsKIAogICAgIHJldHVybiBvYmplY3Q7CiB9CkBAIC02MTksOCArNjE3LDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZQogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25z
dHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXplKCkpOwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZp
bmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKQogICAgICAgICBh
cnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZl
Y3RvcltpXSkpOwogICAgIHJldHVybiBhcnJheTsKQEAgLTYzMiw4ICs2MjksNyBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlCiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVj
dEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgdmVjdG9yLnNpemUoKSk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQo
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCiAgICAgICAgIGFycmF5
LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgdmVjdG9y
W2ldLmdldCgpKSk7CiAgICAgcmV0dXJuIGFycmF5OwpAQCAtNzIyLDEyICs3MTgsMTAgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgIEpTQzo6TWFya2VkQXJn
dW1lbnRCdWZmZXIgbGlzdDsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpIHsKICAg
ICAgICAgbGlzdC5hcHBlbmQoSlNWYWx1ZVRyYWl0czxUPjo6YXJyYXlKU1ZhbHVlKGV4ZWMsIGds
b2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwogICAgIH0KICAgICBh
dXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoZXhlYywgbnVsbHB0ciwgZ2xvYmFsT2Jq
ZWN0LCBsaXN0KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIEpTQzo6SlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZy
ZWV6ZShleGVjLCBhcnJheSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NUHJvbWlzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Qcm9taXNlLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA2LDcgKzEwNiw3
IEBAIHZvaWQgcmVqZWN0UHJvbWlzZVdpdGhFeGNlcHRpb25JZkFueShKU0MKICAgICBWTSYgdm0g
PSBzdGF0ZS52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
IAotICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCisgICAgaWYgKExJS0VMWSghc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBKU1ZhbHVlIGVycm9yID0gc2NvcGUu
ZXhjZXB0aW9uKCktPnZhbHVlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVN0cmluZ01hcEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgyLDggKzgyLDcgQEAgYm9vbCBKU0RPTVN0cmluZ01hcDo6cHV0RGVsZWdh
dGUoRXhlY1N0YQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBTdHJpbmcgc3RyaW5nVmFs
dWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
ICAgIHdyYXBwZWQoKS5zZXRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSks
IHN0cmluZ1ZhbHVlLCBlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5Nyw4ICszOTcsNyBAQCB2b2lkIEpTRE9NV2luZG93OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUm
CiAjZW5kaWYKIAogICAgIFN0cmluZyBsb2NhdGlvblN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZz
dGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7CiAKICAgICBpZiAoTG9jYXRpb24qIGxvY2F0aW9uID0gd3JhcHBlZCgpLmxvY2F0aW9uKCkp
CiAgICAgICAgIGxvY2F0aW9uLT5zZXRIcmVmKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpLCBmaXJz
dERPTVdpbmRvdygmc3RhdGUpLCBsb2NhdGlvblN0cmluZyk7CkBAIC00MjUsMTUgKzQyNCwxMiBA
QCBKU1ZhbHVlIEpTRE9NV2luZG93OjpvcGVuKEV4ZWNTdGF0ZSYgc3RhCiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIHVybFN0cmluZyA9IHZh
bHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1
bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNW
YWx1ZSgpKTsKICAgICBKU1ZhbHVlIHRhcmdldFZhbHVlID0gc3RhdGUuYXJndW1lbnQoMSk7CiAg
ICAgQXRvbWljU3RyaW5nIHRhcmdldCA9IHRhcmdldFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkg
PyBBdG9taWNTdHJpbmcoIl9ibGFuayIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpIDogdGFyZ2V0VmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dG9BdG9taWNTdHJpbmcoJnN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkp
OwogICAgIFN0cmluZyB3aW5kb3dGZWF0dXJlc1N0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgyKSk7Ci0gICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIFJlZlB0
cjxET01XaW5kb3c+IG9wZW5lZFdpbmRvdyA9IHdyYXBwZWQoKS5vcGVuKHVybFN0cmluZywgdGFy
Z2V0LCB3aW5kb3dGZWF0dXJlc1N0cmluZywgYWN0aXZlRE9NV2luZG93KCZzdGF0ZSksIGZpcnN0
RE9NV2luZG93KCZzdGF0ZSkpOwogICAgIGlmICghb3BlbmVkV2luZG93KQpAQCAtNDg4LDExICs0
ODQsOSBAQCBKU1ZhbHVlIEpTRE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2coRXhlCiAgICAgICAg
IHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvU3Ry
aW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCkpOwot
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAg
ICAgU3RyaW5nIGRpYWxvZ0ZlYXR1cmVzU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmlu
ZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgRGlhbG9nSGFu
ZGxlciBoYW5kbGVyKHN0YXRlKTsKIApAQCAtNTI5LDE3ICs1MjMsMTQgQEAgc3RhdGljIEpTVmFs
dWUgaGFuZGxlUG9zdE1lc3NhZ2UoRE9NV2luZAogICAgICAgICB9CiAgICAgICAgIGZpbGxNZXNz
YWdlUG9ydEFycmF5KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCh0cmFuc2ZlcmFibGVzQXJnSW5kZXgp
LCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVycyk7CiAgICAgfQotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBhdXRvIG1lc3NhZ2Ug
PSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApLCAmbWVzc2FnZVBvcnRzLCAmYXJyYXlCdWZmZXJzKTsKIAotICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBTdHJpbmcg
dGFyZ2V0T3JpZ2luID0gdmFsdWVUb1VTVlN0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygm
c3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KHRhcmdldE9yaWdpbkFyZ0luZGV4KSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGltcGwucG9zdE1lc3NhZ2UoV1RGTW92ZSht
ZXNzYWdlKSwgJm1lc3NhZ2VQb3J0cywgdGFyZ2V0T3JpZ2luLCBjYWxsZXJET01XaW5kb3coJnN0
YXRlKSwgZWMpOwpAQCAtNTYzLDggKzU1NCw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnNldFRp
bWVvdXQoRXhlY1N0YXQKIAogICAgIENvbnRlbnRTZWN1cml0eVBvbGljeSogY29udGVudFNlY3Vy
aXR5UG9saWN5ID0gd3JhcHBlZCgpLmRvY3VtZW50KCkgPyB3cmFwcGVkKCkuZG9jdW1lbnQoKS0+
Y29udGVudFNlY3VyaXR5UG9saWN5KCkgOiBudWxscHRyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxT
Y2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0ZSwg
Z2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGljeSk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIGlm
ICghYWN0aW9uKQogICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7CkBAIC01ODgsOCArNTc4LDcg
QEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2V0SW50ZXJ2YWwoRXhlY1N0YQogCiAgICAgQ29udGVu
dFNlY3VyaXR5UG9saWN5KiBjb250ZW50U2VjdXJpdHlQb2xpY3kgPSB3cmFwcGVkKCkuZG9jdW1l
bnQoKSA/IHdyYXBwZWQoKS5kb2N1bWVudCgpLT5jb250ZW50U2VjdXJpdHlQb2xpY3koKSA6IG51
bGxwdHI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gU2No
ZWR1bGVkQWN0aW9uOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKS0+d29ybGQoKSwgY29u
dGVudFNlY3VyaXR5UG9saWN5KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIGludCBkZWxheSA9IHN0YXRlLmFyZ3VtZW50KDEpLnRv
SW50MzIoJnN0YXRlKTsKIAogICAgIGlmICghYWN0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNEYXRhQ3VlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCShyZXZpc2lvbiAyMDYzMzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OCwxMiArNTgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RKUwogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZleGVjLCBzY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJmV4ZWMpKTsKIAogICAgIGRvdWJsZSBzdGFydFRp
bWUoZXhlYy51bmNoZWNrZWRBcmd1bWVudCgwKS50b051bWJlcigmZXhlYykpOwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAKICAgICBkb3VibGUgZW5kVGltZShleGVjLnVuY2hlY2tlZEFyZ3VtZW50
KDEpLnRvTnVtYmVyKCZleGVjKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBjYXN0ZWRUaGlzLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQpAQCAtODcsOCArODUsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgaWYgKHZhbHVlQXJndW1lbnQuaXND
ZWxsKCkgJiYgdmFsdWVBcmd1bWVudC5hc0NlbGwoKS0+aW5oZXJpdHMoc3RkOjpyZW1vdmVfcG9p
bnRlcjxKU0FycmF5QnVmZmVyKj46OnR5cGU6OmluZm8oKSkpIHsKIAogICAgICAgICBBcnJheUJ1
ZmZlciogZGF0YSA9IHRvQXJyYXlCdWZmZXIodmFsdWVBcmd1bWVudCk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIWRhdGEpKSB7CiAg
ICAgICAgICAgICBzZXRET01FeGNlcHRpb24oJmV4ZWMsIFR5cGVFcnJvcik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDI4
ICs1NSwyMiBAQCBzdGF0aWMgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhCiAgICAg
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBKU1ZhbHVlIHhWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ4IikpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIGJvb2wgY2Fu
UHJvdmlkZVggPSAheFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAgZG91YmxlIHggPSB4
VmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKIAogICAgIEpTVmFsdWUgeVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInkiKSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgYm9vbCBjYW5Qcm92aWRlWSA9ICF5
VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAgICBkb3VibGUgeSA9IHlWYWx1ZS50b051bWJl
cigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIp
OwogCiAgICAgSlNWYWx1ZSB6VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAieiIpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKICAgICBib29sIGNhblByb3ZpZGVaID0gIXpWYWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpOwogICAgIGRvdWJsZSB6ID0gelZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBpZiAo
IWNhblByb3ZpZGVYICYmICFjYW5Qcm92aWRlWSAmJiAhY2FuUHJvdmlkZVopCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtOTcsMjggKzkxLDIyIEBAIHN0YXRpYyBSZWZQdHI8RGV2aWNlTW90
aW9uRGF0YTo6Um90YXRpb24KICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAg
IEpTVmFsdWUgYWxwaGFWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJhbHBoYSIpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKICAgICBib29sIGNhblByb3ZpZGVBbHBoYSA9ICFhbHBoYVZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAgZG91YmxlIGFscGhhID0gYWxwaGFWYWx1ZS50b051
bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwogCiAgICAgSlNWYWx1ZSBiZXRhVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYmV0YSIpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBib29sIGNhblByb3ZpZGVCZXRhID0gIWJl
dGFWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwogICAgIGRvdWJsZSBiZXRhID0gYmV0YVZhbHVl
LnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CiAKICAgICBKU1ZhbHVlIGdhbW1hVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZ2FtbWEiKSk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgYm9vbCBjYW5Qcm92aWRlR2Ft
bWEgPSAhZ2FtbWFWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwogICAgIGRvdWJsZSBnYW1tYSA9
IGdhbW1hVmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIGlmICghY2FuUHJvdmlkZUFscGhhICYmICFjYW5Q
cm92aWRlQmV0YSAmJiAhY2FuUHJvdmlkZUdhbW1hKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTE4OCwxNiArMTc2LDEzIEBAIEpTVmFsdWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6aW5pdERl
dmljZU0KICAgICAvLyBJZiBhbnkgb2YgdGhlIHBhcmFtZXRlcnMgYXJlIG51bGwgb3IgdW5kZWZp
bmVkLCBtYXJrIHRoZW0gYXMgbm90IHByb3ZpZGVkLgogICAgIC8vIE90aGVyd2lzZSwgdXNlIHRo
ZSBzdGFuZGFyZCBKYXZhU2NyaXB0IGNvbnZlcnNpb24uCiAgICAgUmVmUHRyPERldmljZU1vdGlv
bkRhdGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxlcmF0aW9uID0gcmVhZEFjY2VsZXJhdGlvbkFyZ3Vt
ZW50KHN0YXRlLmFyZ3VtZW50KDMpLCBzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25E
YXRhOjpBY2NlbGVyYXRpb24+IGFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkgPSByZWFkQWNj
ZWxlcmF0aW9uQXJndW1lbnQoc3RhdGUuYXJndW1lbnQoNCksIHN0YXRlKTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgUmVmUHRy
PERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9uUmF0ZT4gcm90YXRpb25SYXRlID0gcmVhZFJvdGF0
aW9uUmF0ZUFyZ3VtZW50KHN0YXRlLmFyZ3VtZW50KDUpLCBzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIGJvb2wgaW50
ZXJ2YWxQcm92aWRlZCA9ICFzdGF0ZS5hcmd1bWVudCg2KS5pc1VuZGVmaW5lZE9yTnVsbCgpOwog
ICAgIGRvdWJsZSBpbnRlcnZhbCA9IHN0YXRlLmFyZ3VtZW50KDYpLnRvTnVtYmVyKCZzdGF0ZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAJKHJl
dmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFy
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDggKzg4LDcgQEAgSlNEaWN0aW9uYXJ5OjpHZXRQ
cm9wZXJ0eVJlc3VsdCBKU0RpY3RpbwogICAgICAgICBmaW5hbFJlc3VsdCA9IHNsb3QuZ2V0VmFs
dWUobV9leGVjLCBpZGVudGlmaWVyKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvblRocm93bjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb25UaHJv
d24pOwogICAgIHJldHVybiBwcm9wZXJ0eUZvdW5kID8gUHJvcGVydHlGb3VuZCA6IE5vUHJvcGVy
dHlGb3VuZDsKIH0KIApAQCAtMTYxLDEzICsxNjAsMTEgQEAgdm9pZCBKU0RpY3Rpb25hcnk6OmNv
bnZlcnRWYWx1ZShFeGVjU3RhdAogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKICAgICBKU09i
amVjdCogb2JqZWN0ID0gdG9KU1NlcXVlbmNlKCpleGVjLCB2YWx1ZSwgbGVuZ3RoKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDAgOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBpdGVtVmFsdWUgPSBvYmpl
Y3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtVmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpKTsKICAgICB9CiB9CkBAIC0yMzYsMTMgKzIzMywxMSBAQCB2b2lkIEpT
RGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0CiAKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSAwOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0b0pTU2VxdWVuY2UoKmV4ZWMsIHZhbHVlLCBs
ZW5ndGgpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMCA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGl0
ZW1WYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICByZXN1bHQuYWRkKGl0ZW1WYWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIH0KIH0KQEAgLTMxMywxMyArMzA4LDEx
IEBAIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXQKIAogICAgIHVuc2ln
bmVkIGxlbmd0aCA9IDA7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlNTZXF1ZW5jZSgqZXhl
YywgdmFsdWUsIGxlbmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAg
IEpTVmFsdWUgaXRlbVZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICAgICAgYXV0byBzdHJl
YW0gPSBKU01lZGlhU3RyZWFtOjp0b1dyYXBwZWQoaXRlbVZhbHVlKTsKICAgICAgICAgaWYgKCFz
dHJlYW0pIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5o
CShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rp
b25hcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDggKzIxNSw3IEBAIEpTRGljdGlvbmFyeTo6
R2V0UHJvcGVydHlSZXN1bHQgSlNEaWN0aW8KICAgICAgICAgUmVzdWx0IHJlc3VsdDsKICAgICAg
ICAgY29udmVydFZhbHVlKG1fZXhlYywgdmFsdWUsIHJlc3VsdCk7CiAKLSAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb25U
aHJvd247CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEV4Y2VwdGlvblRocm93
bik7CiAKICAgICAgICAgc2V0dGVyKGNvbnRleHQsIHJlc3VsdCk7CiAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9j
dW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsMTcgKzE1MywxMyBAQCBKU1Zh
bHVlIEpTRG9jdW1lbnQ6OmdldENTU0NhbnZhc0NvbnRleHQoCiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLmFyZ3VtZW50Q291bnQoKSA8IDQpKQogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24o
JnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAg
ICAgYXV0byBjb250ZXh0SWQgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmlu
Zygmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
VmFsdWUoKSk7CiAgICAgYXV0byBuYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9X
VEZTdHJpbmcoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBKU1ZhbHVlKCkpOwogICAgIGF1dG8gd2lkdGggPSBjb252ZXJ0PGludDMyX3Q+KHN0YXRl
LCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBhdXRv
IGhlaWdodCA9IGNvbnZlcnQ8aW50MzJfdD4oc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDMpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgYXV0byogY29udGV4dCA9IHdyYXBwZWQoKS5n
ZXRDU1NDYW52YXNDb250ZXh0KFdURk1vdmUoY29udGV4dElkKSwgV1RGTW92ZShuYW1lKSwgV1RG
TW92ZSh3aWR0aCksIFdURk1vdmUoaGVpZ2h0KSk7CiAgICAgaWYgKCFjb250ZXh0KQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVDdXN0b20uY3BwCShyZXZpc2lvbiAy
MDYzMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MCw4ICs2MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0SlMKIAogICAgIHVuc2lnbmVkIGJsb2JQYXJ0c0xlbmd0aCA9IDA7CiAgICAg
SlNPYmplY3QqIGJsb2JQYXJ0cyA9IHRvSlNTZXF1ZW5jZShleGVjLCBhcmcsIGJsb2JQYXJ0c0xl
bmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBBU1NFUlQoYmxvYlBhcnRzKTsKIAog
ICAgIGFyZyA9IGV4ZWMuYXJndW1lbnQoMSk7CkBAIC02OSw4ICs2OCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1l
bnRUeXBlRXJyb3IoZXhlYywgc2NvcGUsIDEsICJmaWxlbmFtZSIsICJGaWxlIiwgbnVsbHB0ciwg
IkRPTVN0cmluZyIpOwogCiAgICAgU3RyaW5nIGZpbGVuYW1lID0gYXJnLnRvV1RGU3RyaW5nKCZl
eGVjKS5yZXBsYWNlKCcvJywgJzonKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgU3Ry
aW5nIG5vcm1hbGl6ZWRUeXBlOwogICAgIE9wdGlvbmFsPGludDY0X3Q+IGxhc3RNb2RpZmllZDsK
QEAgLTg3LDE2ICs4NSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEpTCiAgICAgICAgIC8vIEF0dGVtcHQgdG8gZ2V0IHRoZSB0eXBlIHByb3BlcnR5LgogICAgICAg
ICBTdHJpbmcgdHlwZTsKICAgICAgICAgZGljdGlvbmFyeS5nZXQoInR5cGUiLCB0eXBlKTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgICAgIG5vcm1hbGl6ZWRUeXBl
ID0gQmxvYjo6bm9ybWFsaXplZENvbnRlbnRUeXBlKHR5cGUpOwogCiAgICAgICAgIC8vIE9ubHkg
dHJ5IHRvIHBhcnNlIHRoZSBsYXN0TW9kaWZpZWQgZGF0ZSBpZiB0aGVyZSB3YXMgbm90IGFuIGlu
dmFsaWQgdHlwZSBhcmd1bWVudC4KICAgICAgICAgaWYgKHR5cGUuaXNFbXB0eSgpIHx8ICAhbm9y
bWFsaXplZFR5cGUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBkaWN0aW9uYXJ5LmdldCgibGFz
dE1vZGlmaWVkIiwgbGFzdE1vZGlmaWVkKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDcsOCArMTAzLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGJsb2JQYXJ0c0xlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUg
aXRlbSA9IGJsb2JQYXJ0cy0+Z2V0KCZleGVjLCBpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogCiAgICAgICAgIGlmIChBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIgPSB0b0Fy
cmF5QnVmZmVyKGl0ZW0pKQogICAgICAgICAgICAgYmxvYkJ1aWxkZXIuYXBwZW5kKGFycmF5QnVm
ZmVyKTsKQEAgLTExOCw4ICsxMTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdEpTCiAgICAgICAgICAgICBibG9iQnVpbGRlci5hcHBlbmQoYmxvYik7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgU3RyaW5nIHN0cmluZyA9IGl0ZW0udG9XVEZTdHJpbmcoJmV4
ZWMpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
ICAgICAgICBibG9iQnVpbGRlci5hcHBlbmQoc3RyaW5nLCBBU0NJSUxpdGVyYWwoInRyYW5zcGFy
ZW50IikpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDgsMTcgKzEwOCwxNCBAQCBKU1ZhbHVlIEpTR2VvbG9jYXRpb246Omdl
dEN1cnJlbnRQb3NpdGlvCiAgICAgLy8gQXJndW1lbnRzOiBQb3NpdGlvbkNhbGxiYWNrLCAob3B0
aW9uYWwpUG9zaXRpb25FcnJvckNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25PcHRpb25zCiAK
ICAgICBhdXRvIHBvc2l0aW9uQ2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazxK
U1Bvc2l0aW9uQ2FsbGJhY2s+KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHN0YXRlLmFyZ3VtZW50
KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVl
KCkpOwogICAgIEFTU0VSVChwb3NpdGlvbkNhbGxiYWNrKTsKIAogICAgIGF1dG8gcG9zaXRpb25F
cnJvckNhbGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNQb3NpdGlvbkVycm9y
Q2FsbGJhY2s+KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHN0YXRlLmFyZ3VtZW50KDEpLCBDYWxs
YmFja0FsbG93VW5kZWZpbmVkIHwgQ2FsbGJhY2tBbGxvd051bGwpOwotICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBhdXRvIHBvc2l0
aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50
KDIpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVl
KCkpOwogICAgIEFTU0VSVChwb3NpdGlvbk9wdGlvbnMpOwogCiAgICAgd3JhcHBlZCgpLmdldEN1
cnJlbnRQb3NpdGlvbihXVEZNb3ZlKHBvc2l0aW9uQ2FsbGJhY2spLCBXVEZNb3ZlKHBvc2l0aW9u
RXJyb3JDYWxsYmFjayksIFdURk1vdmUocG9zaXRpb25PcHRpb25zKSk7CkBAIC0xMzMsMTcgKzEz
MCwxNCBAQCBKU1ZhbHVlIEpTR2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24oRXhlCiAgICAgLy8g
QXJndW1lbnRzOiBQb3NpdGlvbkNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25FcnJvckNhbGxi
YWNrLCAob3B0aW9uYWwpUG9zaXRpb25PcHRpb25zCiAKICAgICBhdXRvIHBvc2l0aW9uQ2FsbGJh
Y2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Bvc2l0aW9uQ2FsbGJhY2s+KCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCksIHN0YXRlLmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIEFTU0VSVChwb3NpdGlv
bkNhbGxiYWNrKTsKIAogICAgIGF1dG8gcG9zaXRpb25FcnJvckNhbGxiYWNrID0gY3JlYXRlRnVu
Y3Rpb25Pbmx5Q2FsbGJhY2s8SlNQb3NpdGlvbkVycm9yQ2FsbGJhY2s+KCZzdGF0ZSwgZ2xvYmFs
T2JqZWN0KCksIHN0YXRlLmFyZ3VtZW50KDEpLCBDYWxsYmFja0FsbG93VW5kZWZpbmVkIHwgQ2Fs
bGJhY2tBbGxvd051bGwpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIEpTVmFsdWUoKSk7CiAKICAgICBhdXRvIHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0
aW9uT3B0aW9ucygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIEFTU0VSVChwb3NpdGlv
bk9wdGlvbnMpOwogCiAgICAgaW50IHdhdGNoSUQgPSB3cmFwcGVkKCkud2F0Y2hQb3NpdGlvbihX
VEZNb3ZlKHBvc2l0aW9uQ2FsbGJhY2spLCBXVEZNb3ZlKHBvc2l0aW9uRXJyb3JDYWxsYmFjayks
IFdURk1vdmUocG9zaXRpb25PcHRpb25zKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVj
dGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDggKzY4LDcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPT0gMSkgewogICAgICAgICAvLyBTdXBwb3J0IGZvciBkb2N1bWVudC5hbGwoPGluZGV4
PikgZXRjLgogICAgICAgICBTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KCpzdHJp
bmcuaW1wbCgpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhleGVj
LCBqc0NvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBjb2xsZWN0aW9uLml0ZW0oaW5kZXgudmFs
dWUoKSkpKTsKIApAQCAtNzksOCArNzgsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsCiAKICAgICAvLyBUaGUgc2Vjb25kIGFyZywgaWYgc2V0LCBpcyB0aGUgaW5k
ZXggb2YgdGhlIGl0ZW0gd2Ugd2FudAogICAgIFN0cmluZyBzdHJpbmcgPSBleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleCgqZXhlYy0+YXJn
dW1lbnQoMSkudG9XVEZTdHJpbmcoZXhlYykuaW1wbCgpKSkgewogICAgICAgICBpZiAoYXV0byog
aXRlbSA9IGNvbGxlY3Rpb24ubmFtZWRJdGVtV2l0aEluZGV4KHN0cmluZywgaW5kZXgudmFsdWUo
KSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywganNDb2xs
ZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgKml0ZW0pKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShy
ZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52
YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsOCArODYsNyBAQCBKU1Zh
bHVlIEpTSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoCiAjaWYgRU5BQkxFKFdFQkdMKQog
ICAgIGlmIChIVE1MQ2FudmFzRWxlbWVudDo6aXMzZFR5cGUoY29udGV4dElkKSkgewogICAgICAg
ICBnZXQzRENvbnRleHRBdHRyaWJ1dGVzKHN0YXRlLCBhdHRycyk7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICB9
CiAjZW5kaWYKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVs
ZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzgsOCArNzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpT
CiAgICAgaWYgKCFlbGVtZW50SW50ZXJmYWNlLT5pc1VwZ3JhZGluZ0VsZW1lbnQoKSkgewogICAg
ICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBnZXRET01TdHJ1Y3R1cmU8SlNIVE1MRWxl
bWVudD4odm0sICpnbG9iYWxPYmplY3QpOwogICAgICAgICBhdXRvKiBuZXdFbGVtZW50U3RydWN0
dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoJmV4ZWMsIG5l
d1RhcmdldFZhbHVlLCBiYXNlU3RydWN0dXJlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogCiAgICAgICAgIFJlZjxIVE1MRWxlbWVudD4gZWxlbWVudCA9IEhUTUxFbGVtZW50
OjpjcmVhdGUoZWxlbWVudEludGVyZmFjZS0+bmFtZSgpLCBkb2N1bWVudCk7CiAgICAgICAgIGVs
ZW1lbnQtPnNldElzRGVmaW5lZEN1c3RvbUVsZW1lbnQoKmVsZW1lbnRJbnRlcmZhY2UpOwpAQCAt
OTgsMTMgKzk3LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMK
ICAgICBBU1NFUlQoZWxlbWVudFdyYXBwZXJWYWx1ZS5pc09iamVjdCgpKTsKIAogICAgIEpTVmFs
dWUgbmV3UHJvdG90eXBlID0gbmV3VGFyZ2V0LT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIEpTT2JqZWN0KiBlbGVt
ZW50V3JhcHBlck9iamVjdCA9IGFzT2JqZWN0KGVsZW1lbnRXcmFwcGVyVmFsdWUpOwogICAgIEpT
T2JqZWN0OjpzZXRQcm90b3R5cGUoZWxlbWVudFdyYXBwZXJPYmplY3QsICZleGVjLCBuZXdQcm90
b3R5cGUsIHRydWUgLyogc2hvdWxkVGhyb3dJZkNhbnRTZXQgKi8pOwotICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAKICAgICBlbGVtZW50SW50ZXJmYWNlLT5kaWRVcGdyYWRlTGFzdEVsZW1lbnRJbkNv
bnN0cnVjdGlvblN0YWNrKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMs
MTkgKzYzLDE2IEBAIEpTVmFsdWUgSlNIaXN0b3J5OjpwdXNoU3RhdGUoRXhlY1N0YXRlJiAKICAg
ICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBoaXN0b3J5U3RhdGUgPSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDApLCAwLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBK
U1ZhbHVlKCkpOwogCiAgICAgLy8gRklYTUU6IHRpdGxlIHNob3VsZCBub3QgYmUgbnVsbGFibGUu
CiAgICAgU3RyaW5nIHRpdGxlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVj
aygmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgU3RyaW5nIHVybDsK
ICAgICBpZiAoYXJnQ291bnQgPiAyKSB7CiAgICAgICAgIHVybCA9IHZhbHVlVG9VU1ZTdHJpbmdX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgy
KSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgSlNWYWx1ZSgpKTsKICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UgZWM7
CkBAIC05NywxOSArOTQsMTYgQEAgSlNWYWx1ZSBKU0hpc3Rvcnk6OnJlcGxhY2VTdGF0ZShFeGVj
U3RhdAogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBhdXRvIGhpc3RvcnlTdGF0
ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMCksIDAsIDApOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICAvLyBGSVhNRTogdGl0bGUgc2hvdWxkIG5vdCBiZSBu
dWxsYWJsZS4KICAgICBTdHJpbmcgdGl0bGUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9y
TnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBTdHJp
bmcgdXJsOwogICAgIGlmIChhcmdDb3VudCA+IDIpIHsKICAgICAgICAgdXJsID0gdmFsdWVUb1VT
VlN0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDIpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSBlYzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCRGF0YWJhc2VD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
RGF0YWJhc2VDdXN0b20uY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUs
OCArNTUsNyBAQCBKU1ZhbHVlIEpTSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlCiAgICAg
ICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIFN0cmluZyBuYW1lID0gc3RhdGUuYXJndW1l
bnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSBvcHRp
b25zVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBpZiAoIW9wdGlvbnNWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpICYmICFvcHRpb25zVmFsdWUuaXNPYmplY3QoKSkKQEAgLTY2LDE4ICs2
NSwxNSBAQCBKU1ZhbHVlIEpTSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlCiAgICAgYm9v
bCBhdXRvSW5jcmVtZW50ID0gZmFsc2U7CiAgICAgaWYgKCFvcHRpb25zVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgewogICAgICAgICBKU1ZhbHVlIGtleVBhdGhWYWx1ZSA9IG9wdGlvbnNWYWx1
ZS5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImtleVBhdGgiKSk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
SlNWYWx1ZSgpKTsKIAogICAgICAgICBpZiAoIWtleVBhdGhWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKSB7CiAgICAgICAgICAgICBrZXlQYXRoID0gaWRiS2V5UGF0aEZyb21WYWx1ZShzdGF0ZSwg
a2V5UGF0aFZhbHVlKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICB9CiAKICAgICAg
ICAgYXV0b0luY3JlbWVudCA9IG9wdGlvbnNWYWx1ZS5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgImF1dG9JbmNyZW1lbnQiKSkudG9Cb29sZWFuKCZzdGF0ZSk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNW
YWx1ZSgpKTsKICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UgZWM7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSwxMiArMTE5LDEw
IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgaGFuZGxlSW5pdE1lc3NhZ2VFdmUKICAgICAgICAgbWVz
c2FnZVBvcnRzID0gc3RkOjptYWtlX3VuaXF1ZTxNZXNzYWdlUG9ydEFycmF5PigpOwogICAgICAg
ICBhcnJheUJ1ZmZlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPEFycmF5QnVmZmVyQXJyYXk+KCk7CiAg
ICAgICAgIGZpbGxNZXNzYWdlUG9ydEFycmF5KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCg3KSwgKm1l
c3NhZ2VQb3J0cywgKmFycmF5QnVmZmVycyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICB9CiAgICAgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUgZGF0YUFyZyh2bSwgc3RhdGUuYXJndW1lbnQoMykpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBN
ZXNzYWdlRXZlbnQmIGV2ZW50ID0ganNFdmVudC0+d3JhcHBlZCgpOwogICAgIGV2ZW50LmluaXRN
ZXNzYWdlRXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCBkYXRhQXJn
LCBvcmlnaW5BcmcsIGxhc3RFdmVudElkQXJnLCBzb3VyY2VBcmcsIFdURk1vdmUobWVzc2FnZVBv
cnRzKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3Nh
Z2VQb3J0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEz
ICs3MywxMSBAQCB2b2lkIGZpbGxNZXNzYWdlUG9ydEFycmF5KEpTQzo6RXhlY1N0YXRlCiAgICAg
Ly8gVmFsaWRhdGlvbiBvZiBzZXF1ZW5jZSB0eXBlcywgcGVyIFdlYklETCBzcGVjIDQuMS4xMy4K
ICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0b0pTU2Vx
dWVuY2Uoc3RhdGUsIHZhbHVlLCBsZW5ndGgpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBsZW5ndGg7ICsraSkg
ewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBpKTsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgLy8g
VmFsaWRhdGlvbiBvZiBub24tbnVsbCBvYmplY3RzLCBwZXIgSFRNTDUgc3BlYyAxMC4zLjMuCiAg
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgICAgICBzZXRE
T01FeGNlcHRpb24oJnN0YXRlLCBJTlZBTElEX1NUQVRFX0VSUik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5oCShyZXZpc2lvbiAy
MDYzMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9t
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDggKzYxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBBcnJheUJ1ZmZlckFycmF5IGFycmF5QnVmZmVyQXJyYXk7CiAgICAgICAgIGZpbGxN
ZXNzYWdlUG9ydEFycmF5KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgxKSwgcG9ydEFycmF5LCBhcnJh
eUJ1ZmZlckFycmF5KTsKICAgICAgICAgYXV0byBtZXNzYWdlID0gU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSwgJnBvcnRBcnJh
eSwgJmFycmF5QnVmZmVyQXJyYXkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwogCiAgICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICBpbXBsLT5wb3N0TWVzc2FnZShXVEZNb3ZlKG1l
c3NhZ2UpLCAmcG9ydEFycmF5LCBlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3NDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nc0N1c3Rv
bS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nc0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDggKzYyLDcgQEAgdm9pZCBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNldERlYwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHVpbnQ4X3QgbmF0
aXZlVmFsdWUgeyBjb252ZXJ0PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgRW5mb3JjZVJhbmdlKSB9
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgRGVjaXNpb25Q
b2ludCBkZWNpc2lvblBvaW50IHsgc3RhdGljX2Nhc3Q8RGVjaXNpb25Qb2ludD4obmF0aXZlVmFs
dWUpIH07CiAgICAgc3dpdGNoIChkZWNpc2lvblBvaW50KSB7CkBAIC05OCw4ICs5Nyw3IEBAIHN0
YXRpYyBpbmxpbmUgRGVjaXNpb24gdG9EZWNpc2lvbihFeGVjU3QKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB1aW50OF90IG5hdGl2ZVZhbHVlIHsgY29u
dmVydDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSkgfTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gRGVjaXNpb246OkFsbG93
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIERlY2lzaW9uOjpBbGxvdyk7CiAKICAg
ICBEZWNpc2lvbiBkZWNpc2lvbiB7IHN0YXRpY19jYXN0PERlY2lzaW9uPihuYXRpdmVWYWx1ZSkg
fTsKICAgICBzd2l0Y2ggKGRlY2lzaW9uKSB7CkBAIC0xMjMsOCArMTIxLDcgQEAgdm9pZCBKU01v
Y2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNldERlYwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIERlY2lzaW9uIGRlY2lzaW9uIHsgdG9EZWNpc2lvbihz
dGF0ZSwgdmFsdWUpIH07Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAK
ICAgICB3cmFwcGVkKCkuc2V0RGVjaXNpb24oZGVjaXNpb24pOwogfQpAQCAtMTQwLDggKzEzNyw3
IEBAIHZvaWQgSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjpzZXRVbmIKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBEZWNpc2lvbiB1bmJsb2NrUmVx
dWVzdERlY2lzaW9uIHsgdG9EZWNpc2lvbihzdGF0ZSwgdmFsdWUpIH07Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICB3cmFwcGVkKCkuc2V0VW5ibG9ja1JlcXVl
c3REZWNpc2lvbih1bmJsb2NrUmVxdWVzdERlY2lzaW9uKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksNyBAQCB1aW50MTZfdCBKU05vZGVGaWx0
ZXI6OmFjY2VwdE5vZGUoTm9kZSogCiAgICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdz
OwogICAgIGFyZ3MuYXBwZW5kKHRvSlMoc3RhdGUsIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIG5v
ZGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUKTsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlv
bj4gcmV0dXJuZWRFeGNlcHRpb247CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZGF0YS0+aW52b2tl
Q2FsbGJhY2soYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6RnVuY3Rpb25Pck9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgImFjY2VwdE5vZGUiKSwgcmV0dXJu
ZWRFeGNlcHRpb24pOwpAQCAtNjMsOCArNjIsNyBAQCB1aW50MTZfdCBKU05vZGVGaWx0ZXI6OmFj
Y2VwdE5vZGUoTm9kZSogCiAgICAgfQogCiAgICAgdWludDE2X3QgcmVzdWx0ID0gY29udmVydDx1
aW50MTZfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRF
Ul9SRUpFQ1Q7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgTm9kZUZpbHRlcjo6RklM
VEVSX1JFSkVDVCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmNwcAkocmV2aXNpb24gMjA2MzM3KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw4ICs1MCw3IEBAIFZlY3RvcjxzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFu
dDxSZWY8Tm8KICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQobm9kZS0+d3JhcHBl
ZCgpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUu
dG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKHN0cmluZyk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlv
bkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDcgQEAgSlNWYWx1ZSBKU1NR
TFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZQogICAgIH0KIAogICAgIFN0cmluZyBzcWxTdGF0
ZW1lbnQgPSBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUp
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7
CiAKICAgICAvLyBOb3cgYXNzZW1ibGUgdGhlIGxpc3Qgb2YgU1FMIGFyZ3VtZW50cwogICAgIFZl
Y3RvcjxTUUxWYWx1ZT4gc3FsVmFsdWVzOwpAQCAtNjYsMTYgKzY1LDEzIEBAIEpTVmFsdWUgSlNT
UUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGUKICAgICAgICAgfQogCiAgICAgICAgIEpTVmFs
dWUgbGVuZ3RoVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIHN0YXRlLnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxlbmd0aFZh
bHVlLnRvVUludDMyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwIDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgICAgICBzcWxW
YWx1ZXMuYXBwZW5kKFNRTFZhbHVlKCkpOwpAQCAtODQsOCArODAsNyBAQCBKU1ZhbHVlIEpTU1FM
VHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlCiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgICAgICAvLyBDb252ZXJ0IHRoZSBhcmd1bWVudCB0byBhIHN0cmluZyBhbmQgYXBwZW5kIGl0
CiAgICAgICAgICAgICAgICAgc3FsVmFsdWVzLmFwcGVuZCh2YWx1ZS50b1N0cmluZygmc3RhdGUp
LT52YWx1ZSgmc3RhdGUpKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTVkdMZW5ndGhDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdMZW5ndGhDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MCw4ICs5MCw3IEBAIEpTVmFsdWUgSlNTVkdMZW5ndGg6OmNvbnZlcnRUb1Nw
ZWNpZmllZFUKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgdW5zaWduZWQgc2hv
cnQgdW5pdFR5cGUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b1VJbnQzMigmc3RhdGUp
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7
CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0
aENvbnRleHQod3JhcHBlZCgpLmNvbnRleHRFbGVtZW50KCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCShyZXZpc2lvbiAyMDYzMzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NiwxMyArODYsMTEgQEAgdm9pZCBKU1N0b3JhZ2U6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYgogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoZWMpOwogICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgdGhpc09iamVjdC0+d3Jh
cHBlZCgpLmtleShpLCBlYykpKTsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
LSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9
CiAgICAgICAgIAogICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lcywgbW9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1RleHRUcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDggKzQ4LDcgQEAgdm9pZCBKU1RleHRUcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0
YXRlJgogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGF1
dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgd3JhcHBlZCgpLnNldExhbmd1
YWdlKHN0cmluZyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAJKHJl
dmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFj
a0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDcgQEAgdm9pZCBKU1ZpZGVv
VHJhY2s6OnNldEtpbmQoRXhlY1N0YXRlJiBzdAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0
ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAgICAgd3JhcHBlZCgpLnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKQEAgLTYzLDggKzYyLDcgQEAgdm9pZCBKU1ZpZGVvVHJhY2s6OnNldExhbmd1YWdl
KEV4ZWNTdGF0ZQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgd3JhcHBlZCgpLnNl
dExhbmd1YWdlKHN0cmluZyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wy
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNiwxMSArMTA2LDkgQEAgSlNWYWx1ZSBKU1dlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OmdldEluZAogCiAgICAgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9
IHdyYXBwZWQoKTsKICAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMudW5jaGVja2VkQXJndW1lbnQo
MCkudG9JbnQzMigmZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGV4ZWMudW5jaGVja2VkQXJn
dW1lbnQoMSkudG9JbnQzMigmZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQu
Z2V0SW5kZXhlZFBhcmFtZXRlcihwbmFtZSwgaW5kZXgpOwogICAgIHJldHVybiB0b0pTKCZleGVj
LCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1
c3RvbS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5OSwxMSArMTk5LDkgQEAgc3RhdGljIEpTVmFsdWUgZ2V0T2JqZWN0UGFyYW1ldGVyKEpTV2Vi
RwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UmIGNvbnRleHQgPSBvYmotPndyYXBwZWQoKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBwbmFt
ZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIFdlYkdM
R2V0SW5mbyBpbmZvOwogICAgIHN3aXRjaCAob2JqZWN0VHlwZSkgewogICAgIGNhc2Uga0J1ZmZl
cjoKQEAgLTMzNSw4ICszMzMsNyBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0CiAgICAgCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IHdy
YXBwZWQoKTsKICAgICBjb25zdCBTdHJpbmcgbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBXZWJHTEV4dGVuc2lvbiog
ZXh0ZW5zaW9uID0gY29udGV4dC5nZXRFeHRlbnNpb24obmFtZSk7CiAgICAgcmV0dXJuIHRvSlMo
JnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgZXh0ZW5zaW9uKTsKIH0KQEAgLTM1NywxNCArMzU0LDEx
IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXQKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0g
d3JhcHBlZCgpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDApLnRvSW50MzIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGF0dGFjaG1lbnQgPSBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBwbmFtZSA9IHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvSW50MzIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIFdlYkdMR2V0SW5m
byBpbmZvID0gY29udGV4dC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodGFyZ2V0
LCBhdHRhY2htZW50LCBwbmFtZSwgZWMpOwogICAgIGlmIChlYykgewogICAgICAgICBzZXRET01F
eGNlcHRpb24oJnN0YXRlLCBlYyk7CkBAIC0zODQsOCArMzc4LDcgQEAgSlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSB3cmFwcGVkKCk7CiAgICAgdW5z
aWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsK
ICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0UGFyYW1ldGVyKHBuYW1lLCBlYyk7
CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKQEAg
LTQwOCw4ICs0MDEsNyBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
CiAgICAgaWYgKCFwcm9ncmFtICYmICFzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSk7CiAgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0lu
dDMyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
SlNWYWx1ZSgpKTsKICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0UHJvZ3JhbVBh
cmFtZXRlcihwcm9ncmFtLCBwbmFtZSwgZWMpOwogICAgIGlmIChlYykgewogICAgICAgICBzZXRE
T01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CkBAIC00MzcsOCArNDI5LDcgQEAgSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldAogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJy
b3IoJnN0YXRlLCBzY29wZSk7CiAgICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IEpTV2ViR0xTaGFk
ZXI6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgdW5zaWduZWQg
cG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBX
ZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgcG5h
bWUsIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwg
ZWMpOwpAQCAtNTExLDggKzUwMiw3IEBAIGJvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0MKICAgICAKICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewogICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgaSk7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAg
ICAgdmVjdG9yW2ldID0gc3RhdGljX2Nhc3Q8VD4odi50b051bWJlcigmc3RhdGUpKTsKICAgICB9
CiAgICAgCkBAIC01NTksMTIgKzU0OSwxMCBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5j
dGlvbmYoRGF0YUZ1CiAgICAgfSBlbHNlCiAgICAgICAgIGluZGV4ID0gc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMCkudG9JbnQzMigmc3RhdGUpOwogICAgIAotICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgCiAgICAgUmVmUHRyPEZsb2F0
MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1Zh
bHVlKCkpOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGlmICh3ZWJHTEFy
cmF5KSB7CkBAIC03MTAsOCArNjk4LDcgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rp
b25NYXRyaXgoRAogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7
CiAgICAgCiAgICAgYm9vbCB0cmFuc3Bvc2UgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50
b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBKU1ZhbHVlKCkpOwogICAgIAogICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJy
YXkgPSB0b0Zsb2F0MzJBcnJheShzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7CiAgICAgCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdFN1YnRsZUNyeXB0b0N1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRT
dWJ0bGVDcnlwdG9DdXN0b20uY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dlYktpdFN1YnRsZUNyeXB0b0N1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg0LDggKzg0LDcgQEAgc3RhdGljIGJvb2wgY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFs
dWUoRQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0
cmluZyBrZXlGb3JtYXRTdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3Rh
dGUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgaWYg
KGtleUZvcm1hdFN0cmluZyA9PSAicmF3IikKICAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5Rm9y
bWF0OjpSYXc7CiAgICAgZWxzZSBpZiAoa2V5Rm9ybWF0U3RyaW5nID09ICJwa2NzOCIpCkBAIC0x
MTcsOCArMTE2LDcgQEAgc3RhdGljIGJvb2wgY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoRQog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKICAgICAg
ICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KCZzdGF0ZSwgaSk7CiAgICAgICAg
IFN0cmluZyB1c2FnZVN0cmluZyA9IGVsZW1lbnQudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0
YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFs
c2UpOwogICAgICAgICBpZiAodXNhZ2VTdHJpbmcgPT0gImVuY3J5cHQiKQogICAgICAgICAgICAg
cmVzdWx0IHw9IENyeXB0b0tleVVzYWdlRW5jcnlwdDsKICAgICAgICAgZWxzZSBpZiAodXNhZ2VT
dHJpbmcgPT0gImRlY3J5cHQiKQpAQCAtNDIxLDggKzQxOSw3IEBAIEpTVmFsdWUgSlNXZWJLaXRT
dWJ0bGVDcnlwdG86OmdlbmVyYXRlS2UKICAgICBib29sIGV4dHJhY3RhYmxlID0gZmFsc2U7CiAg
ICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CiAgICAgICAgIGV4dHJhY3RhYmxl
ID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgp
KTsKICAgICB9CiAKICAgICBDcnlwdG9LZXlVc2FnZSBrZXlVc2FnZXMgPSAwOwpAQCAtNDc0LDgg
KzQ3MSw3IEBAIHN0YXRpYyB2b2lkIGltcG9ydEtleShFeGVjU3RhdGUmIHN0YXRlLCAKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBrZXlTZXJpYWxpemF0aW9uID0gc3Rk
OjptYWtlX3VuaXF1ZTxKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s+KCZzdGF0ZSwgandrU3Ry
aW5nKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC00OTEsOCArNDg3LDcgQEAg
c3RhdGljIHZvaWQgaW1wb3J0S2V5KEV4ZWNTdGF0ZSYgc3RhdGUsIAogICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJBbGdvcml0aG0gc3BlY2lm
aWVkIGluIGtleSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG9uZSBwYXNzZWQgdG8gaW1wb3J0S2V5
IGFzIGFyZ3VtZW50IikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgYWxnb3JpdGhtID0gcmVjb25jaWxlZFJlc3Vs
dC0+YWxnb3JpdGhtOwogICAgIHBhcmFtZXRlcnMgPSByZWNvbmNpbGVkUmVzdWx0LT5wYXJhbWV0
ZXJzOwpAQCAtNTAzLDE2ICs0OTgsMTMgQEAgc3RhdGljIHZvaWQgaW1wb3J0S2V5KEV4ZWNTdGF0
ZSYgc3RhdGUsIAogICAgIEFTU0VSVChwYXJhbWV0ZXJzKTsKIAogICAgIGtleVNlcmlhbGl6YXRp
b24tPnJlY29uY2lsZUV4dHJhY3RhYmxlKGV4dHJhY3RhYmxlKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGtleVNlcmlhbGl6YXRpb24tPnJlY29uY2lsZVVz
YWdlcyhrZXlVc2FnZXMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
CiAgICAgYXV0byBrZXlEYXRhID0ga2V5U2VyaWFsaXphdGlvbi0+a2V5RGF0YSgpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CiAgICAgYWxnb3JpdGhtLT5pbXBvcnRLZXkoKnBhcmFtZXRlcnMsICprZXlEYXRhLCBleHRy
YWN0YWJsZSwga2V5VXNhZ2VzLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShmYWlsdXJlQ2Fs
bGJhY2spLCBlYyk7CkBAIC01NTcsOCArNTQ5LDcgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNy
eXB0bzo6aW1wb3J0S2V5KAogICAgIGJvb2wgZXh0cmFjdGFibGUgPSBmYWxzZTsKICAgICBpZiAo
c3RhdGUuYXJndW1lbnRDb3VudCgpID49IDQpIHsKICAgICAgICAgZXh0cmFjdGFibGUgPSBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCgzKS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAg
IH0KIAogICAgIENyeXB0b0tleVVzYWdlIGtleVVzYWdlcyA9IDA7CkBAIC01NzksOCArNTcwLDcg
QEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6aW1wb3J0S2V5KAogICAgIH07CiAKICAg
ICBXZWJDb3JlOjppbXBvcnRLZXkoc3RhdGUsIGtleUZvcm1hdCwgZGF0YSwgV1RGTW92ZShhbGdv
cml0aG0pLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBXVEZN
b3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURk1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIHJl
dHVybiBwcm9taXNlOwogfQpAQCAtNjA2LDggKzU5Niw3IEBAIHN0YXRpYyB2b2lkIGV4cG9ydEtl
eShFeGVjU3RhdGUmIHN0YXRlLCAKICAgICB9CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OkpX
SzogewogICAgICAgICBTdHJpbmcgcmVzdWx0ID0gSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldL
OjpzZXJpYWxpemUoJnN0YXRlLCBrZXkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICBDU3RyaW5nIHV0ZjhTdHJpbmcgPSByZXN1bHQu
dXRmOChTdHJpY3RDb252ZXJzaW9uKTsKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdEJ1
ZmZlcjsKICAgICAgICAgcmVzdWx0QnVmZmVyLmFwcGVuZCh1dGY4U3RyaW5nLmRhdGEoKSwgdXRm
OFN0cmluZy5sZW5ndGgoKSk7CkBAIC02NDgsOCArNjM3LDcgQEAgSlNWYWx1ZSBKU1dlYktpdFN1
YnRsZUNyeXB0bzo6ZXhwb3J0S2V5KAogICAgIH07CiAKICAgICBXZWJDb3JlOjpleHBvcnRLZXko
c3RhdGUsIGtleUZvcm1hdCwgKmtleSwgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEZNb3Zl
KGZhaWx1cmVDYWxsYmFjaykpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICByZXR1cm4gcHJvbWlzZTsKIH0KQEAgLTc4MCw4ICs3
NjgsNyBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjp1bndyYXBLZXkoCiAgICAgYm9v
bCBleHRyYWN0YWJsZSA9IGZhbHNlOwogICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPj0g
NikgewogICAgICAgICBleHRyYWN0YWJsZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDUpLnRv
Qm9vbGVhbigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgfQogCiAgICAgQ3J5cHRvS2V5VXNhZ2Ug
a2V5VXNhZ2VzID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dv
cmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsOCArNTYsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoJmV4ZWMsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cigmZXhlYykpOwogCiAgICAgU3RyaW5nIHNjcmlwdFVSTCA9IGV4ZWMudW5jaGVja2VkQXJndW1l
bnQoMCkudG9XVEZTdHJpbmcoJmV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIC8vIFNl
ZSBzZWN0aW9uIDQuOC4yIHN0ZXAgMTQgb2YgV2ViV29ya2VycyBmb3Igd2h5IHRoaXMgaXMgdGhl
IGxleGljYWxHbG9iYWxPYmplY3QuCiAgICAgRE9NV2luZG93JiB3aW5kb3cgPSBhc0pTRE9NV2lu
ZG93KGV4ZWMubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1
c3RvbS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw4ICs3
MCw3IEBAIEpTVmFsdWUgSlNXb3JrZXJHbG9iYWxTY29wZTo6aW1wb3J0U2NyaXAKICAgICBWZWN0
b3I8U3RyaW5nPiB1cmxzOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5hcmd1
bWVudENvdW50KCk7ICsraSkgewogICAgICAgICB1cmxzLmFwcGVuZCh2YWx1ZVRvVVNWU3RyaW5n
KCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpKTsKLSAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIH0K
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKIApAQCAtODksOCArODgsNyBAQCBKU1ZhbHVlIEpT
V29ya2VyR2xvYmFsU2NvcGU6OnNldFRpbWVvdXQoCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUp
KTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVk
dWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIHdyYXBw
ZWQoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBpZiAoIWFjdGlvbikKICAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKDApOwogICAgIGludCBkZWxheSA9IHN0YXRlLmFyZ3VtZW50KDEpLnRv
SW50MzIoJnN0YXRlKTsKQEAgLTEwNiw4ICsxMDQsNyBAQCBKU1ZhbHVlIEpTV29ya2VyR2xvYmFs
U2NvcGU6OnNldEludGVydmFsCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUs
IHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6
Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIHdyYXBwZWQoKS5jb250ZW50
U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgSlNWYWx1ZSgpKTsKICAgICBpZiAoIWFjdGlvbikKICAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKDApOwogICAgIGludCBkZWxheSA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVs
dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsNyBAQCBKU0M6OkpTVmFsdWUgUmVh
ZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgYXV0byBmdW5jdGlvbiA9IG9iamVjdC5nZXQoJnN0YXRlLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVm
aW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsK
IAogICAgIGlmICghZnVuY3Rpb24uaXNGdW5jdGlvbigpKSB7CiAgICAgICAgIGlmICghZnVuY3Rp
b24uaXNVbmRlZmluZWQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVk
dWxlZEFjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NoZWR1bGVkQWN0aW9uLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCAr
NTcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBTY2hlZHVsCiAgICAgICAg
IGlmIChwb2xpY3kgJiYgIXBvbGljeS0+YWxsb3dFdmFsKGV4ZWMpKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIFN0cmluZyBzdHJpbmcgPSB2LnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRB
Y3Rpb24+KG5ldyBTY2hlZHVsZWRBY3Rpb24oc3RyaW5nLCBpc29sYXRlZFdvcmxkKSk7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTEwMjYsOCAr
MTAyNiw3IEBAIHN1YiBHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnQKICAgICAg
ICAgbXkgJG5lZWRFeGNlcHRpb25DaGVjayA9IDA7CiAgICAgICAgIGZvcmVhY2ggbXkgJG1lbWJl
ciAoQHskZGljdGlvbmFyeS0+bWVtYmVyc30pIHsKICAgICAgICAgICAgIGlmICgkbmVlZEV4Y2Vw
dGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiI7Ci0gICAgICAgICAgICAgICAgJHJlc3VsdCAu
PSAiICAgICAgICByZXR1cm4gTnVsbG9wdDtcbiI7CisgICAgICAgICAgICAgICAgJHJlc3VsdCAu
PSAiICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7XG4iOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgIyBGSVhNRTogRXZlbnR1YWxseSB3ZSB3aWxsIHdhbnQg
dGhpcyB0byBzaGFyZSBhIGxvdCBtb3JlIGNvZGUgd2l0aCBKU1ZhbHVlVG9OYXRpdmUuCiAgICAg
ICAgICAgICBteSAkdHlwZSA9ICRtZW1iZXItPnR5cGU7CkBAIC0zMjQ4LDggKzMyNDcsNyBAQCBz
dWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBpZiAoIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHtcbiIpOwogICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgbmF0aXZlVmFsdWUg
PSAkbmF0aXZlVmFsdWU7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCRtYXlUaHJvd0V4
Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTtcbiIpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkge1xuIik7CiAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgdGhyb3dBdHRyaWJ1dGVU
eXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBcIiR2aXNpYmxlSW50ZXJmYWNlTmFtZVwiLCBc
IiRuYW1lXCIsIFwiJHR5cGVcIik7XG4iKTsKQEAgLTMyNTksOCArMzI1Nyw3IEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byBuYXRpdmVWYWx1ZSA9ICRuYXRp
dmVWYWx1ZTtcbiIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoJG1heVRocm93RXhjZXB0aW9u
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpXG4iKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gZmFsc2U7XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CiAKQEAgLTQwMDcsOCArNDAwNCw3IEBAIHN1YiBHZW5lcmF0ZVBh
cmFtZXRlcnNDaGVjawogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8g
JG5hbWUgPSB0b0FyZ3VtZW50czxWYXJpYWRpY0hlbHBlcjwkd3JhcHBlclR5cGUsICR3cmFwcGVk
VHlwZT4+KCpzdGF0ZSwgJGFyZ3VtZW50SW5kZXgpO1xuIik7CiAKICAgICAgICAgICAgIGlmIChJ
c05hdGl2ZVR5cGUoJHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwotICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpO1xuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCEkbmFtZS5hcmd1bWVudHMpXG4iKTsK
QEAgLTQwNDcsOCArNDA0Myw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgICRk
ZWZpbmVPcHRpb25hbFZhbHVlID0gcGFyc2U8JGNsYXNzTmFtZT4oKnN0YXRlLCAke25hbWV9VmFs
dWUpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwotICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiJGluZGVudCAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiJGlu
ZGVudCAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
O1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgIGlmIChV
TkxJS0VMWSghJG9wdGlvbmFsVmFsdWUpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIkaW5kZW50ICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsICRhcmd1bWVudEluZGV4LCBcIiRuYW1lXCIsIFwiJHZpc2li
bGVJbnRlcmZhY2VOYW1lXCIsICRxdW90ZWRGdW5jdGlvbk5hbWUsIGV4cGVjdGVkRW51bWVyYXRp
b25WYWx1ZXM8JGNsYXNzTmFtZT4oKSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiRpbmRlbnQgICAgJG5hbWUgPSBvcHRpb25hbFZhbHVlLnZhbHVlKCk7XG4iKSBpZiAk
b3B0aW9uYWxWYWx1ZSBuZSAkbmFtZTsKQEAgLTQwNzAsOCArNDA2NSw3IEBAIHN1YiBHZW5lcmF0
ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBpZiAoISRjaGVja2VkQXJndW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkge1xuIik7CiAgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAkbmFtZSA9ICRuYXRpdmVW
YWx1ZTtcbiIpOwogICAgICAgICAgICAgICAgIGlmICgkbWF5VGhyb3dFeGNlcHRpb24pIHsKLSAg
ICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICBpZiAoVU5MSUtFTFkoISRuYW1lKSlcbiIpOwogICAgICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50
VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgJGFyZ3VtZW50SW5kZXgsIFwiJG5hbWVcIiwg
XCIkdmlzaWJsZUludGVyZmFjZU5hbWVcIiwgJHF1b3RlZEZ1bmN0aW9uTmFtZSwgXCIkdHlwZVwi
KTtcbiIpOwpAQCAtNDExMyw4ICs0MTA3LDcgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gJG5hbWUgPSAk
e291dGVyfSR7bmF0aXZlVmFsdWV9O1xuIik7CiAgICAgICAgICAgICAgICAgJHZhbHVlID0gIldU
Rk1vdmUoJG5hbWUpIjsKICAgICAgICAgICAgICAgICBpZiAoJG1heVRocm93RXhjZXB0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpO1xuIik7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC00NDkwLDggKzQ0ODMsNyBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgpCiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiXG4iIC4gJGluZGVudCAuICJzZXRET01FeGNlcHRpb24oc3RhdGUsIGVj
KTtcbiIpIGlmICRyYWlzZXNFeGNlcHRpb247CiAKICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9y
LT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgIlNjcmlwdFN0YXRlIikpIHsKLSAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gImlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSlcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQg
LiAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIlJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7XG4iKTsKICAgICAgICAgfQogCiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gInJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTtcbiIpOwpAQCAtNTMxMiw4ICs1MzA0LDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIAogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogCiAgICAgQXRv
bWljU3RyaW5nIGV2ZW50VHlwZSA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmlu
ZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKIAogICAgICR7aW50ZXJmYWNlTmFtZX1Jbml0IGV2ZW50SW5pdDsKIApAQCAtNTQ2
NCw4ICs1NDU1LDcgQEAgRU5ECiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICgkY29k
ZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3JDYWxsV2l0aCJ9LCAiU2NyaXB0U3RhdGUiKSkgewot
ICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7Ci0gICAgICAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtc
biIpOworICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTtcbiIpOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgV1RGTW92ZShvYmplY3QpKSk7XG4iKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA0NSw4ICs0MDQ1
LDcgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVySlNWYWx1ZShKUwogICAgIAogICAg
IEpTQzo6SWRlbnRpZmllciBjb250cm9sc0hvc3QgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAiY29udHJvbHNIb3N0Iik7CiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xzSG9zdEpT
V3JhcHBlciA9IG1lZGlhSlNXcmFwcGVyT2JqZWN0LT5nZXQoJmV4ZWMsIGNvbnRyb2xzSG9zdCk7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVl
KCkpOwogCiAgICAgSlNDOjpKU09iamVjdCogY29udHJvbHNIb3N0SlNXcmFwcGVyT2JqZWN0ID0g
SlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNPYmplY3QqPihjb250cm9sc0hvc3RKU1dyYXBwZXIp
OwogICAgIGlmICghY29udHJvbHNIb3N0SlNXcmFwcGVyT2JqZWN0KQpAQCAtNDA1NCw4ICs0MDUz
LDcgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVySlNWYWx1ZShKUwogCiAgICAgSlND
OjpJZGVudGlmaWVyIGNvbnRyb2xsZXJJRCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJjb250cm9sbGVyIik7CiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJKU1dyYXBwZXIg
PSBjb250cm9sc0hvc3RKU1dyYXBwZXJPYmplY3QtPmdldCgmZXhlYywgY29udHJvbGxlcklEKTsK
LSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlND
Ojpqc051bGwoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUo
KSk7CiAKICAgICByZXR1cm4gY29udHJvbGxlckpTV3JhcHBlcjsKIH0KQEAgLTY4MzIsOCArNjgz
MCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFDb250cm8KICAgICBKU0M6
OkpTVmFsdWUgY29udHJvbGxlclZhbHVlID0gY29udHJvbGxlckpTVmFsdWUoKmV4ZWMsICpnbG9i
YWxPYmplY3QsICp0aGlzKTsKICAgICBKU0M6OkpTT2JqZWN0KiBjb250cm9sbGVyT2JqZWN0ID0g
Y29udHJvbGxlclZhbHVlLnRvT2JqZWN0KGV4ZWMpOwogCi0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CiAKICAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGNvbnRy
b2xsZXJPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
ImhhbmRsZVByZXNlbnRhdGlvbk1vZGVDaGFuZ2UiKSk7CiAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSB8fCBmdW5jdGlvblZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCkBAIC02
ODc1LDggKzY4NzIsNyBAQCBTdHJpbmcgSFRNTE1lZGlhRWxlbWVudDo6Z2V0Q3VycmVudE1lZGlh
CiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJWYWx1ZSA9IGNvbnRyb2xsZXJKU1ZhbHVlKCpl
eGVjLCAqZ2xvYmFsT2JqZWN0LCAqdGhpcyk7CiAgICAgSlNDOjpKU09iamVjdCogY29udHJvbGxl
ck9iamVjdCA9IGNvbnRyb2xsZXJWYWx1ZS50b09iamVjdChleGVjKTsKIAotICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVtcHR5U3RyaW5nKCkpOwogCiAgICAgSlND
OjpKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBjb250cm9sbGVyT2JqZWN0LT5nZXQoZXhlYywgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJnZXRDdXJyZW50Q29udHJvbHNTdGF0dXMi
KSk7CiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSB8fCBmdW5jdGlvblZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCkBAIC02ODkyLDggKzY4ODgsNyBAQCBTdHJpbmcgSFRNTE1l
ZGlhRWxlbWVudDo6Z2V0Q3VycmVudE1lZGlhCiAKICAgICBKU0M6OkpTVmFsdWUgb3V0cHV0VmFs
dWUgPSBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgY29udHJv
bGxlck9iamVjdCwgYXJnTGlzdCk7CiAKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbXB0eVN0cmluZygpKTsKIAogICAgIHJldHVybiBvdXRwdXRWYWx1ZS5nZXRT
dHJpbmcoZXhlYyk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289735</attachid>
            <date>2016-09-23 19:55:00 -0700</date>
            <delta_ts>2016-09-24 16:45:45 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-162521.patch</filename>
            <type>text/plain</type>
            <size>411758</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwOCBA
QAorMjAxNi0wOS0yMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkZWQgUkVUVVJOX0lGX0VYQ0VQVElPTigpIG1hY3JvIGFuZCB1c2UgaXQgZm9yIGV4Y2VwdGlv
biBjaGVja3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjI1MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBbHNvLCB3aGVyZSBwb3NzaWJsZSwgaWYgdGhlIHJldHVybiB0eXBlIGlzIEpTVmFsdWUsIGNo
YW5nZWQgdGhlIHJldHVybmVkIHZhbHVlCisgICAgICAgIChvbiBleGNlcHRpb24pIHRvIHRoZSBl
bXB0eSBKU1ZhbHVlIChpbnN0ZWFkIG9mIHNvbWV0aW1lcyBqc1VuZGVmaW5lZCwganNOdWxsLAor
ICAgICAgICBvciB0aGUgdGhyb3duIGV4Y2VwdGlvbiB2YWx1ZSkuCisKKyAgICAgICAgVGhlcmUg
YXJlIGEgZmV3IHBsYWNlcyB3aGVyZSBJIGhhZCB0byBjb250aW51ZSB0byByZXR1cm4gdGhlIHBy
ZXZpb3VzbHkgcmV0dXJuZWQKKyAgICAgICAgdmFsdWUgKGluc3RlYWQgb2YgdGhlIGVtcHR5IEpT
VmFsdWUpIGluIG9yZGVyIGZvciB0ZXN0cyB0byBwYXNzLiAgVGhpcyBpcyBuZWVkZWQKKyAgICAg
ICAgYmVjYXVzZSB0aGVyZSBhcmUgbWlzc2luZyBleGNlcHRpb24gY2hlY2tzIHRoYXQgd2lsbCBu
ZWVkIHRvIGJlIGFkZGVkIGJlZm9yZSBJCisgICAgICAgIGNhbiBjaGFuZ2UgdGhvc2UgdG8gcmV0
dXJuIHRoZSBlbXB0eSBKU1ZhbHVlIHRvby4gIElkZW50aWZ5aW5nIGFsbCB0aGUgcGxhY2VzCisg
ICAgICAgIHdoZXJlIHRob3NlIGNoZWNrcyBuZWVkIHRvIGJlIGFkZGVkIGlzIGJleW9uZCB0aGUg
c2NvcGUgb2YgdGhpcyBwYXRjaC4gIEkgd2lsbAorICAgICAgICB3b3JrIG9uIGFkZGluZyBtaXNz
aW5nIGV4Y2VwdGlvbiBjaGVja3MgaW4gYSBzdWJzZXF1ZW50IHBhdGNoLgorCisgICAgICAgIElu
IHRoaXMgcGF0Y2gsIHRoZXJlIGlzIG9uZSBtaXNzaW5nIGV4Y2VwdGlvbiBjaGVjayBpbiByZXBs
YWNlVXNpbmdSZWdFeHBTZWFyY2goKQorICAgICAgICB0aGF0IHdhcyBlYXNpbHkgaWRlbnRpZmll
ZCwgYW5kIGlzIG5lY2Vzc2FyeSBzbyB0aGF0IEludGVycHJldGVyOjpleGVjdXRlKCkKKyAgICAg
ICAgZnVuY3Rpb25zIGNhbiByZXR1cm4gSlNWYWx1ZS4gIEkndmUgYWRkZWQgdGhpcyBtaXNzaW5n
IGNoZWNrLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaGFzIHBhc3NlZCB0aGUgSlNDIGFuZCBsYXlv
dXQgdGVzdHMuCisKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6b3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbCk6CisgICAgICAgICogaW5zcGVjdG9y
L0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3Rl
ZFNjcmlwdEhvc3Q6OmV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmFsUHJvcGVydGllcyk6CisgICAg
ICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrTWFwRW50cmllcyk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrU2V0RW50cmllcyk6
CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVudHJp
ZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwOgorICAg
ICAgICAoSW5zcGVjdG9yOjpKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlV2l0aFNjb3Bl
RXh0ZW5zaW9uKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAg
ICAgIChKU0M6OmV2YWwpOgorICAgICAgICAoSlNDOjpzaXplT2ZWYXJhcmdzKToKKyAgICAgICAg
KEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6
ZXhlY3V0ZUNhbGwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVj
dCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHA6CisgICAgICAgIChK
U0M6OlNoYWRvd0NoaWNrZW46OmZ1bmN0aW9uc09uU3RhY2spOgorICAgICAgICAqIGppdC9KSVRP
cGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0QnlWYWwpOgorICAgICAgICAqIGpzYy5j
cHA6CisgICAgICAgIChXVEY6OkltcHVyZUdldHRlcjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAg
ICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKGZ1bmN0aW9uUnVuU3RyaW5nKToKKyAgICAg
ICAgKGZ1bmN0aW9uTG9hZCk6CisgICAgICAgIChmdW5jdGlvbkxvYWRTdHJpbmcpOgorICAgICAg
ICAoZnVuY3Rpb25SZWFkRmlsZSk6CisgICAgICAgIChmdW5jdGlvbkNoZWNrU3ludGF4KToKKyAg
ICAgICAgKGZ1bmN0aW9uU2V0UmFuZG9tU2VlZCk6CisgICAgICAgIChmdW5jdGlvbkxvYWRNb2R1
bGUpOgorICAgICAgICAoZnVuY3Rpb25DcmVhdGVCdWlsdGluKToKKyAgICAgICAgKGZ1bmN0aW9u
Q2hlY2tNb2R1bGVTeW50YXgpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoK
KyAgICAgICAgKEpTQzo6TExJbnQ6OmdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxM
SU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rl
U2VxdWVuY2UuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Qnl0ZWNvZGVTZXF1ZW5jZTo6
YWRkU2VxdWVuY2VQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckNvbXBp
bGF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkNvbXBpbGF0aW9uOjp0b0pTKToK
KyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
UHJvZmlsZXI6OkRhdGFiYXNlOjp0b0pTKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9T
UkV4aXRTaXRlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6Ok9TUkV4aXRTaXRlOjp0b0pT
KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9yaWdpblN0YWNrLmNwcDoKKyAgICAgICAg
KEpTQzo6UHJvZmlsZXI6Ok9yaWdpblN0YWNrOjp0b0pTKToKKyAgICAgICAgKiBydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3BlY2llc0NvbnN0cnVjdEFycmF5KToK
KyAgICAgICAgKEpTQzo6c2hpZnQpOgorICAgICAgICAoSlNDOjp1bnNoaWZ0KToKKyAgICAgICAg
KEpTQzo6YXJyYXlQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9G
dW5jVG9Mb2NhbGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpzbG93Sm9pbik6CisgICAgICAgIChK
U0M6OmZhc3RKb2luKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNKb2luKToKKyAgICAg
ICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQb3ApOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVu
Y1B1c2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1JldmVyc2UpOgorICAgICAgICAo
SlNDOjphcnJheVByb3RvRnVuY1NoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNT
bGljZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU3BsaWNlKToKKyAgICAgICAgKEpT
Qzo6YXJyYXlQcm90b0Z1bmNVblNoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNJ
bmRleE9mKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhPZik6CisgICAg
ICAgIChKU0M6Om1vdmVFbGVtZW50cyk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9Qcml2YXRl
RnVuY0NvbmNhdE1lbWNweSk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoQm9vbGVhbkNvbnN0cnVjdG9yKToKKyAg
ICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAoSlNDOjpDb21tb25T
bG93UGF0aHM6Om9wSW4pOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHA6CisgICAg
ICAgIChKU0M6OmxvYWRBbmRFdmFsdWF0ZU1vZHVsZSk6CisgICAgICAgIChKU0M6OmxvYWRNb2R1
bGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc29sZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OmNvbnNvbGVQcm90b0Z1bmNBc3NlcnQpOgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5j
UHJvZmlsZSk6CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNQcm9maWxlRW5kKToKKyAg
ICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY1Rha2VIZWFwU25hcHNob3QpOgorICAgICAgICAo
SlNDOjpjb25zb2xlUHJvdG9GdW5jVGltZSk6CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1
bmNUaW1lRW5kKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmNvbnN0cnVjdERhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUGFyc2UpOgorICAg
ICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmRhdGVQcm90
b0Z1bmNUb1ByaW1pdGl2ZVN5bWJvbCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0pT
T04pOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpjb25zdHJ1Y3RXaXRoRXJyb3JDb25zdHJ1Y3Rvcik6CisgICAgICAg
ICogcnVudGltZS9FcnJvckluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5j
ZTo6c2FuaXRpemVkVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjplcnJvclByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBy
dW50aW1lL0V4Y2VwdGlvblNjb3BlLmg6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxF
bmFibGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRz
KToKKyAgICAgICAgKiBydW50aW1lL0dldHRlclNldHRlci5jcHA6CisgICAgICAgIChKU0M6OmNh
bGxHZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuaDoKKyAgICAgICAgKEpT
Qzo6anNNYXBIYXNoKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmZpbmRCdWNrZXQpOgorICAgICAgICAoSlND
OjpIYXNoTWFwSW1wbDo6YWRkKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OnJlaGFzaCk6
CisgICAgICAgICogcnVudGltZS9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjppbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3RMb2cpOgorICAgICAg
ICAqIHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkludGVybmFs
RnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0lu
dGxDb2xsYXRvci5jcHA6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNv
bGxhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Y29uc3RydWN0SW50bENvbGxhdG9yKToKKyAgICAgICAgKEpTQzo6SW50
bENvbGxhdG9yQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKToKKyAgICAgICAgKiBy
dW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkludGxDb2xs
YXRvckZ1bmNDb21wYXJlKToKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yUHJvdG90eXBlR2V0
dGVyQ29tcGFyZSk6CisgICAgICAgICogcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwOgor
ICAgICAgICAoSlNDOjp0b0RhdGVUaW1lT3B0aW9uc0FueURhdGUpOgorICAgICAgICAoSlNDOjpJ
bnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdCk6CisgICAgICAgICog
cnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6
OmNvbnN0cnVjdEludGxEYXRlVGltZUZvcm1hdCk6CisgICAgICAgIChKU0M6OkludGxEYXRlVGlt
ZUZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZik6CisgICAgICAgICogcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpJbnRs
RGF0ZVRpbWVGb3JtYXRGdW5jRm9ybWF0RGF0ZVRpbWUpOgorICAgICAgICAoSlNDOjpJbnRsRGF0
ZVRpbWVGb3JtYXRQcm90b3R5cGVHZXR0ZXJGb3JtYXQpOgorICAgICAgICAqIHJ1bnRpbWUvSW50
bE51bWJlckZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6OmluaXRp
YWxpemVOdW1iZXJGb3JtYXQpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdENv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SW50bE51bWJlckZvcm1hdCk6
CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRM
b2NhbGVzT2YpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXRGdW5jRm9ybWF0TnVtYmVyKToKKyAg
ICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdFByb3RvdHlwZUdldHRlckZvcm1hdCk6CisgICAg
ICAgICogcnVudGltZS9JbnRsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6aW50bEJvb2xlYW5P
cHRpb24pOgorICAgICAgICAoSlNDOjppbnRsU3RyaW5nT3B0aW9uKToKKyAgICAgICAgKEpTQzo6
aW50bE51bWJlck9wdGlvbik6CisgICAgICAgIChKU0M6OmNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qp
OgorICAgICAgICAoSlNDOjpzdXBwb3J0ZWRMb2NhbGVzKToKKyAgICAgICAgKiBydW50aW1lL0lu
dGxPYmplY3RJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEludGxJbnN0YW5jZVdp
dGhXb3JrYXJvdW5kRm9yTGVnYWN5SW50bENvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1l
L0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oml0ZXJhdG9yTmV4dCk6Cisg
ICAgICAgIChKU0M6Oml0ZXJhdG9yU3RlcCk6CisgICAgICAgIChKU0M6Oml0ZXJhdG9yQ2xvc2Up
OgorICAgICAgICAoSlNDOjppdGVyYXRvckZvckl0ZXJhYmxlKToKKyAgICAgICAgKiBydW50aW1l
L0l0ZXJhdG9yT3BlcmF0aW9ucy5oOgorICAgICAgICAoSlNDOjpmb3JFYWNoSW5JdGVyYWJsZSk6
CisgICAgICAgICogcnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
cG9wKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAg
KiBydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNv
bnN0cnVjdEFycmF5QnVmZmVyKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjphcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlKToKKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmdldExlbmd0
aCk6CisgICAgICAgIChKU0M6OnRvTGVuZ3RoKToKKyAgICAgICAgKiBydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OmdldEJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUpOgor
ICAgICAgICAoSlNDOjpKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICogcnVudGlt
ZS9KU0NKU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUp
OgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dDYXNlKToKKyAgICAgICAgKiBy
dW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OnRvUHJlZmVycmVkUHJp
bWl0aXZlVHlwZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmdldFByb3BlcnR5U2xvdCk6Cisg
ICAgICAgIChKU0M6OkpTVmFsdWU6OmVxdWFsU2xvd0Nhc2VJbmxpbmUpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmdldERhdGEpOgor
ICAgICAgICAoSlNDOjpzZXREYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3Bw
OgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpzZXRGdW5jdGlvbk5hbWUpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaDoKKyAgICAgICAgKEpTQzo6SlNHZW5l
cmljVHlwZWRBcnJheVZpZXc6OnNldEluZGV4KToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmNvbnN0
cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld0Zyb21JdGVyYXRvcik6CisgICAgICAgIChKU0M6OmNv
bnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld1dpdGhBcmd1bWVudHMpOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6
c3BlY2llc0NvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvRnVuY1NldCk6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVu
Y0NvcHlXaXRoaW4pOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1
bmNJbmNsdWRlcyk6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVu
Y0luZGV4T2YpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNK
b2luKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jTGFzdElu
ZGV4T2YpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTbGlj
ZSk6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU3ViYXJy
YXlDcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6Y29uc3RydWN0RW1wdHlBcnJheSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEFycmF5
KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpn
bG9iYWxGdW5jRXZhbCk6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTTW9kdWxlUmVjb3JkOjppbnN0YW50aWF0ZURlY2xhcmF0aW9ucyk6Cisg
ICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5naWZp
ZXI6OnN0cmluZ2lmeSk6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjp0b0pTT04pOgorICAg
ICAgICAoSlNDOjpTdHJpbmdpZmllcjo6YXBwZW5kU3RyaW5naWZpZWRWYWx1ZSk6CisgICAgICAg
IChKU0M6OlN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OldhbGtlcjo6d2Fsayk6CisgICAgICAgIChKU0M6OkpTT05Qcm90b0Z1bmNQYXJzZSk6
CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6Om9yZGluYXJ5
U2V0U2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRoQ3ljbGVD
aGVjayk6CisgICAgICAgIChKU0M6OmNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnRvTnVtYmVy
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0
TWV0aG9kKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpjcmVhdGVMaXN0RnJvbUFycmF5TGlrZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXRQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0Tm9uSW5kZXhQcm9w
ZXJ0eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RQcm9taXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJv
bWlzZURlZmVycmVkLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0
ZSk6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAgICAg
ICAgKEpTQzo6cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgICogcnVudGltZS9KU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVy
YXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTU2NvcGUuY3BwOgorICAgICAgICAo
SlNDOjppc1Vuc2NvcGFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAg
ICAgICAoSlNDOjpKU1N0cmluZzo6ZXF1YWxTbG93Q2FzZSk6CisgICAgICAgICogcnVudGltZS9K
U1N0cmluZ0pvaW5lci5jcHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5nSm9pbmVyOjpqb2luKToK
KyAgICAgICAgKiBydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpMaXRl
cmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2UpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwQmFzZS5o
OgorICAgICAgICAoSlNDOjpNYXBCYXNlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVu
dGltZS9NYXBDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdE1hcCk6Cisg
ICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6bWF0aFByb3Rv
RnVuY0NsejMyKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0h5cG90KToKKyAgICAgICAg
KEpTQzo6bWF0aFByb3RvRnVuY0lNdWwpOgorICAgICAgICAqIHJ1bnRpbWUvTW9kdWxlTG9hZGVy
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUHJvdG90eXBlUGFyc2VN
b2R1bGUpOgorICAgICAgICAoSlNDOjptb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1ZXN0ZWRNb2R1
bGVzKToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUHJvdG90eXBlTW9kdWxlRGVjbGFyYXRp
b25JbnN0YW50aWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0aE5hdGl2ZUVy
cm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IpOgorICAgICAg
ICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1
Y3RPYmplY3QpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9m
KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JTZXRQcm90b3R5cGVPZik6CisgICAg
ICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAg
ICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKToK
KyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eVN5bWJvbHMpOgorICAg
ICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvcktleXMpOgorICAgICAgICAoSlNDOjpvd25FbnVt
ZXJhYmxlUHJvcGVydHlLZXlzKToKKyAgICAgICAgKEpTQzo6dG9Qcm9wZXJ0eURlc2NyaXB0b3Ip
OgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnR5KToKKyAgICAg
ICAgKEpTQzo6ZGVmaW5lUHJvcGVydGllcyk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVj
dG9yU2VhbCk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKToKKyAgICAg
ICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JJc1NlYWxlZCk6CisgICAgICAgIChKU0M6Om9iamVj
dENvbnN0cnVjdG9ySXNGcm96ZW4pOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3Rvcklz
RXh0ZW5zaWJsZSk6CisgICAgICAgIChKU0M6Om93blByb3BlcnR5S2V5cyk6CisgICAgICAgICog
cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RPYmpl
Y3RGcm9tUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdFByb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZik6CisgICAgICAgIChK
U0M6Om9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFBy
b3RvRnVuY0RlZmluZVNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1
cEdldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcik6Cisg
ICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKToKKyAgICAg
ICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpv
YmplY3RQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKEpTQzo6anNBZGRTbG93Q2FzZSk6CisgICAgICAgICogcnVudGltZS9Qcm9w
ZXJ0eURlc2NyaXB0b3IuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3I6OnNs
b3dHZXR0ZXJTZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6Om1ha2VSZXZvY2FibGVQcm94eSk6CisgICAgICAgICogcnVudGltZS9Q
cm94eU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OnBlcmZvcm1Qcm94eUdldCk6CisgICAgICAg
IChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtR2V0KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmpl
Y3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEdldE93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
UHJveHlPYmplY3Q6OnBlcmZvcm1IYXNQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlByb3h5T2Jq
ZWN0OjpwZXJmb3JtUHV0KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnB1dEJ5SW5kZXhD
b21tb24pOgorICAgICAgICAoSlNDOjpwZXJmb3JtUHJveHlDYWxsKToKKyAgICAgICAgKEpTQzo6
cGVyZm9ybVByb3h5Q29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZv
cm1EZWxldGUpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9ybVByZXZlbnRFeHRl
bnNpb25zKToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1Jc0V4dGVuc2libGUp
OgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9ybURlZmluZU93blByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1TZXRQcm90b3R5cGUpOgorICAgICAg
ICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9ybUdldFByb3RvdHlwZSk6CisgICAgICAgICogcnVu
dGltZS9SZWZsZWN0T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6cmVmbGVjdE9iamVjdENvbnN0
cnVjdCk6CisgICAgICAgIChKU0M6OnJlZmxlY3RPYmplY3REZWZpbmVQcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OnJlZmxlY3RPYmplY3RHZXQpOgorICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0
R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6cmVmbGVjdE9iamVjdElz
RXh0ZW5zaWJsZSk6CisgICAgICAgIChKU0M6OnJlZmxlY3RPYmplY3RQcmV2ZW50RXh0ZW5zaW9u
cyk6CisgICAgICAgIChKU0M6OnJlZmxlY3RPYmplY3RTZXQpOgorICAgICAgICAoSlNDOjpyZWZs
ZWN0T2JqZWN0U2V0UHJvdG90eXBlT2YpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoSlNDOjp0b0ZsYWdzKToKKyAgICAgICAgKEpTQzo6cmVnRXhw
Q3JlYXRlKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0UmVnRXhwKToKKyAgICAgICAgKiBydW50
aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OmlzUmVnRXhwKToKKyAgICAg
ICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNvbGxlY3RNYXRj
aGVzKToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjptYXRjaEdsb2JhbCk6CisgICAgICAg
ICogcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90
b0Z1bmNDb21waWxlKToKKyAgICAgICAgKEpTQzo6ZmxhZ3NTdHJpbmcpOgorICAgICAgICAoSlND
OjpyZWdFeHBQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvR2V0
dGVyRmxhZ3MpOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNTZWFyY2hGYXN0KToKKyAg
ICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jU3BsaXRGYXN0KToKKyAgICAgICAgKiBydW50aW1l
L1NldENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0U2V0KToKKyAgICAg
ICAgKiBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6c3RyaW5n
RnJvbUNvZGVQb2ludCk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFdpdGhTdHJpbmdDb25zdHJ1
Y3Rvcik6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpTdHJpbmdPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL1N0
cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnJlcGxhY2VVc2luZ1JlZ0V4cFNlYXJj
aCk6CisgICAgICAgIChKU0M6Om9wZXJhdGlvblN0cmluZ1Byb3RvRnVuY1JlcGxhY2VSZWdFeHBF
bXB0eVN0cik6CisgICAgICAgIChKU0M6OnJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaCk6CisgICAg
ICAgIChKU0M6OnJlcGxhY2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNSZXBsYWNl
VXNpbmdSZWdFeHApOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNSZXBsYWNlVXNpbmdT
dHJpbmdTZWFyY2gpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNDb2RlUG9pbnRBdCk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1NsaWNlKToKKyAgICAgICAgKEpTQzo6c3Ry
aW5nUHJvdG9GdW5jU3BsaXRGYXN0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3Vi
c3RyKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3Vic3RyaW5nKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29tcGFyZSk6CisgICAgICAgIChKU0M6OnRvTG9j
YWxlQ2FzZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0JpZyk6CisgICAgICAgIChK
U0M6OnN0cmluZ1Byb3RvRnVuY1NtYWxsKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
QmxpbmspOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCb2xkKToKKyAgICAgICAgKEpT
Qzo6c3RyaW5nUHJvdG9GdW5jRml4ZWQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNJ
dGFsaWNzKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3RyaWtlKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jU3ViKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
U3VwKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jRm9udGNvbG9yKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jRm9udHNpemUpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNBbmNob3IpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMaW5rKToKKyAgICAg
ICAgKEpTQzo6dHJpbVN0cmluZyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N0YXJ0
c1dpdGgpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNFbmRzV2l0aCk6CisgICAgICAg
IChKU0M6OnN0cmluZ0luY2x1ZGVzSW1wbCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVu
Y0luY2x1ZGVzKToKKyAgICAgICAgKEpTQzo6YnVpbHRpblN0cmluZ0luY2x1ZGVzSW50ZXJuYWwp
OgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNOb3JtYWxpemUpOgorICAgICAgICAqIHJ1
bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpzeW1ib2xDb25zdHJ1
Y3RvckZvcik6CisgICAgICAgICogcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmNwcDoKKyAgICAg
ICAgKEpTQzo6VGVtcGxhdGVSZWdpc3RyeTo6Z2V0VGVtcGxhdGVPYmplY3QpOgorICAgICAgICAq
IHJ1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
V2Vha01hcCk6CisgICAgICAgICogcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpjb25zdHJ1Y3RXZWFrU2V0KToKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZN
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25QcmludCk6CisKIDIwMTYtMDkt
MjMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBOZWVkIGEgc3Rv
cmUtbG9hZCBmZW5jZSBiZXR3ZWVuIHNldHRpbmcgY2VsbCBzdGF0ZSBhbmQgdmlzaXRpbmcgdGhl
IG9iamVjdCBpbiBTbG90VmlzaXRvcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9u
IDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTEsOCArMzExLDcgQEAgcHVibGljOgogICAgICAgICBpZiAodGhpc09iamVjdC0+bV9k
ZWxlZ2F0ZSkgewogICAgICAgICAgICAgaWYgKHRoaXNPYmplY3QtPm1fZGVsZWdhdGUtPmdldFBy
b3BlcnR5U2xvdChleGVjLCBuYW1lLCBzbG90KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZmFsc2UpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIEJhc2U6OmdldE93blBy
b3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIG5hbWUsIHNsb3QpOwpAQCAtMTQ2MCw4ICsxNDU5LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bgogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4
ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZldGNoU2NyaXB0RnJvbUxvY2Fs
RmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSkpOwpAQCAtMTQ5NCw4ICsxNDkyLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bgogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBzb3VyY2UgPSBleGVjLT5h
cmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAg
ICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBHbG9iYWxPYmplY3Q6OmNyZWF0ZSh2bSwg
R2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGpzTnVsbCgpKSwgVmVjdG9yPFN0cmlu
Zz4oKSk7CiAKQEAgLTE1MjIsOCArMTUxOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25Mb2EKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhl
eGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAg
ICAgaWYgKCFmZXRjaFNjcmlwdEZyb21Mb2NhbEZpbGVTeXN0ZW0oZmlsZU5hbWUsIHNjcmlwdCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgc2Nv
cGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4i
KSkpKTsKQEAgLTE1NDMsOCArMTUzOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25Mb2EKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBTdHJpbmcgc291cmNlQ29kZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4
ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKIAogICAgIE5ha2VkUHRyPEV4Y2Vw
dGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsKQEAgLTE1NjAsMTQgKzE1NTUsMTIgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYQogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBi
b29sIGlzQmluYXJ5ID0gZmFsc2U7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEp
IHsKICAgICAgICAgU3RyaW5nIHR5cGUgPSBleGVjLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhl
eGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
ICAgIHJldHVybiBFbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKHR5cGUgIT0gImJpbmFyeSIp
CiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHNjb3BlLCAiRXhwZWN0ZWQg
J2JpbmFyeScgYXMgc2Vjb25kIGFyZ3VtZW50LiIpOwogICAgICAgICBpc0JpbmFyeSA9IHRydWU7
CkBAIC0xNTgzLDggKzE1NzYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uUmVhCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZVVpbnQ4KTsKICAgICBhdXRvIGxlbmd0aCA9
IGNvbnRlbnQuc2l6ZSgpOwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjcmVhdGVVaW50OFR5cGVk
QXJyYXkoZXhlYywgc3RydWN0dXJlLCBBcnJheUJ1ZmZlcjo6Y3JlYXRlRnJvbUJ5dGVzKGNvbnRl
bnQucmVsZWFzZUJ1ZmZlcigpLmxlYWtQdHIoKSwgbGVuZ3RoLCBbXSAodm9pZCogcCkgeyBmYXN0
RnJlZShwKTsgfSksIDAsIGxlbmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuIEVuY29kZWRKU1ZhbHVlKCk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0xNTk1LDggKzE1ODcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9X
VEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBWZWN0b3I8Y2hhcj4g
c2NyaXB0OwogICAgIGlmICghZmV0Y2hTY3JpcHRGcm9tTG9jYWxGaWxlU3lzdGVtKGZpbGVOYW1l
LCBzY3JpcHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkNvdWxkIG5vdCBv
cGVuIGZpbGUuIikpKSk7CkBAIC0xNjU5LDggKzE2NTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uU2V0CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgdW5zaWduZWQgc2VlZCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMy
KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT53ZWFrUmFuZG9tKCkuc2V0U2VlZChzZWVkKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTkzMSwxNSArMTkyMSwxMyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hCiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1l
bnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBWZWN0
b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmV0Y2hTY3JpcHRGcm9tTG9jYWxGaWxlU3lzdGVt
KGZpbGVOYW1lLCBzY3JpcHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkNv
dWxkIG5vdCBvcGVuIGZpbGUuIikpKSk7CiAKICAgICBKU0ludGVybmFsUHJvbWlzZSogcHJvbWlz
ZSA9IGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShleGVjLCBmaWxlTmFtZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKIAogICAgIEpTVmFsdWUgZXJyb3I7CiAgICAgSlNGdW5jdGlvbiogZXJyb3JIYW5k
bGVyID0gSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIDEsIFN0cmluZygpLCBbJl0oRXhlY1N0YXRlKiBleGVjKSB7CkBAIC0xOTYzLDgg
KzE5NTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBTdHJpbmcg
ZnVuY3Rpb25UZXh0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogCiAgICAgY29uc3QgU291cmNlQ29kZSYgc291cmNlID0gbWFrZVNvdXJj
ZShmdW5jdGlvblRleHQpOwogICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBKU0Z1bmN0aW9uOjpjcmVh
dGVCdWlsdGluRnVuY3Rpb24odm0sIGNyZWF0ZUJ1aWx0aW5FeGVjdXRhYmxlKHZtLCBzb3VyY2Us
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZm9vIiksIENvbnN0cnVjdG9yS2luZDo6Tm9u
ZSwgQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KS0+bGluayh2bSwgc291cmNlKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKQEAgLTE5ODQsOCArMTk3MSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGUKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcgc291cmNlID0gZXhlYy0+YXJndW1l
bnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIFN0
b3BXYXRjaCBzdG9wV2F0Y2g7CiAgICAgc3RvcFdhdGNoLnN0YXJ0KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNjMzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMyw4ICsxMjMsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIEpJVF9P
UEVSQVRJT04gCiAKICAgICAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRo
cm93cyBhbiBleGNlcHRpb24uCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50b1By
b3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBzdHJpY3QpOwogICAgIGlmIChk
aXJlY3QpIHsKQEAgLTE5Miw4ICsxOTEsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ3JlYXRlVGhpCiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yKS0+cmFyZURhdGEoZXhlYywgaW5saW5lQ2Fw
YWNpdHkpLT5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpLT5zdHJ1Y3R1cmUoKSk7CiAKICAgICBK
U1ZhbHVlIHByb3RvID0gY29uc3RydWN0b3ItPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkucHJvdG90eXBlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKICAgICBpZiAocHJvdG8uaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGNvbnN0cnVj
dEVtcHR5T2JqZWN0KGV4ZWMsIGFzT2JqZWN0KHByb3RvKSk7CiAgICAgcmV0dXJuIGNvbnN0cnVj
dEVtcHR5T2JqZWN0KGV4ZWMpOwpAQCAtMjIyLDggKzIyMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AyKTsKIAogICAgIGludDMyX3QgYSA9IG9wMS50b0ludDMyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBpbnQzMl90IGIgPSBvcDIudG9JbnQzMihleGVjKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgJiBiKSk7CiB9CkBAIC0yMzgsOCArMjM1
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogICAgIEpTVmFs
dWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgaW50MzJfdCBhID0g
b3AxLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGludDMyX3QgYiA9IG9w
Mi50b0ludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSB8
IGIpKTsKIH0KQEAgLTI1NCw4ICsyNTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblZhCiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
Mik7CiAKICAgICBpbnQzMl90IGEgPSBvcDEudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgaW50MzJfdCBiID0gb3AyLnRvSW50MzIoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihhIF4gYikpOwogfQpAQCAtMjcwLDggKzI2NSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKICAgICBKU1ZhbHVlIG9wMiA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAogICAgIGludDMyX3QgYSA9IG9wMS50b0ludDMy
KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB1aW50MzJfdCBiID0gb3AyLnRvVUludDMy
KGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSA8PCAoYiAmIDB4
MWYpKSk7CiB9CkBAIC0yODYsOCArMjgwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25WYQogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDIpOwogCiAgICAgaW50MzJfdCBhID0gb3AxLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIHVpbnQzMl90IGIgPSBvcDIudG9VSW50MzIoZXhlYyk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihhID4+IChiICYgMHgxZikpKTsKIH0KQEAgLTMwMiw4ICsy
OTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAgICAgSlNW
YWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICB1aW50MzJfdCBh
ID0gb3AxLnRvVUludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB1aW50MzJfdCBi
ID0gb3AyLnRvVUludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYSA+PiAoYiAmIDB4MWYpKSkpOwogfQpAQCAtMzM0LDgg
KzMyNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKICAgICBK
U1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAogICAgIGRvdWJsZSBh
ID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9
IG9wMi50b051bWJlcihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KGEgLyBiKSk7CiB9CkBAIC0zNDgsOCArMzM5LDcgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQXJpdGhBYnMoRQogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIFBOYU47CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUE5hTik7CiAgICAgcmV0dXJuIGZhYnMoYSk7CiB9CiAK
QEAgLTM2MSw4ICszNTEsNyBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhD
bHozCiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAg
ICB1aW50MzJfdCB2YWx1ZSA9IG9wMS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCAwKTsKICAgICByZXR1cm4gY2x6MzIodmFsdWUpOwogfQogCkBAIC0zNzQs
OCArMzYzLDcgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhDb3MoRQogCiAg
ICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91Ymxl
IGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBj
b3MoYSk7CiB9CiAKQEAgLTM4Nyw4ICszNzUsNyBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Bcml0aEZSb3VuCiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AxKTsKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gUE5hTjsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBQTmFOKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGEpOwogfQogCkBAIC00MDAsOCArMzg3LDcgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQXJpdGhMb2coRQogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIFBOYU47CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUE5hTik7CiAgICAgcmV0dXJuIGxvZyhhKTsKIH0KIApA
QCAtNDEzLDggKzM5OSw3IEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoU2lu
KEUKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAg
IGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBQTmFOOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIFBOYU4pOwogICAgIHJldHVybiBzaW4oYSk7CiB9CiAKQEAgLTQyNiw4ICs0MTEs
NyBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aFNxcnQoCiAKICAgICBKU1Zh
bHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBkb3VibGUgYSA9IG9w
MS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4gUE5hTjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBQTmFO
KTsKICAgICByZXR1cm4gc3FydChhKTsKIH0KIApAQCAtNDM5LDggKzQyMyw3IEBAIGRvdWJsZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoVGFuKEUKIAogICAgIEpTVmFsdWUgb3AxID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4
ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gdGFuKGEpOwogfQogCkBAIC00NTIs
OCArNDM1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcgogCiAg
ICAgSlNWYWx1ZSBhcmd1bWVudCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnQpOwog
ICAgIGRvdWJsZSB2YWx1ZU9mQXJndW1lbnQgPSBhcmd1bWVudC50b051bWJlcihleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihqc1Jv
dW5kKHZhbHVlT2ZBcmd1bWVudCkpKTsKIH0KIApAQCAtNDY1LDggKzQ0Nyw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKIAogICAgIEpTVmFsdWUgYXJndW1lbnQg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50KTsKICAgICBkb3VibGUgdmFsdWVPZkFy
Z3VtZW50ID0gYXJndW1lbnQudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZmxvb3IodmFsdWVPZkFyZ3VtZW50KSkp
OwogfQogCkBAIC00NzgsOCArNDU5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25BcgogCiAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQXJndW1lbnQpOwogICAgIGRvdWJsZSB2YWx1ZU9mQXJndW1lbnQgPSBhcmd1bWVudC50b051
bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcihjZWlsKHZhbHVlT2ZBcmd1bWVudCkpKTsKIH0KIApAQCAtNDkxLDggKzQ3MSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKIAogICAgIEpTVmFs
dWUgYXJndW1lbnQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50KTsKICAgICBkb3Vi
bGUgdHJ1bmNhdGVkVmFsdWVPZkFyZ3VtZW50ID0gYXJndW1lbnQudG9JbnRlZ2VyUHJlc2VydmVO
YU4oZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIodHJ1bmNhdGVkVmFsdWVPZkFyZ3VtZW50KSk7CiB9CiAKQEAgLTU0NCwxMSArNTIz
LDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIH0KIAog
ICAgIGJhc2VWYWx1ZS5yZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGV4ZWMpOwotICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50b1Byb3BlcnR5S2V5
KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3BlcnR5TmFtZSkpOwogfQogCkBAIC01NzgsOCArNTU1
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIH0KIAog
ICAgIGF1dG8gcHJvcGVydHlOYW1lID0gcHJvcGVydHkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShi
YXNlKS5nZXQoZXhlYywgcHJvcGVydHlOYW1lKSk7CiB9CiAKQEAgLTk3MywxMiArOTQ5LDEwIEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICB9CiAKICAgICBi
YXNlVmFsdWUucmVxdWlyZU9iamVjdENvZXJjaWJsZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAKICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdl
dChleGVjLCBwcm9wZXJ0eSwgc2xvdCkpOwogfQogCkBAIC0xMDA1LDggKzk3OSw3IEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFdpdGgKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgcHV0V2l0aFRoaXM8dHJ1ZT4oZXhl
YywgZW5jb2RlZEJhc2UsIGVuY29kZWRUaGlzLCBlbmNvZGVkVmFsdWUsIHByb3BlcnR5KTsKIH0K
IApAQCAtMTAxNyw4ICs5OTAsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxXaXRoCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
SWRlbnRpZmllciBwcm9wZXJ0eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KS50
b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwogICAgIHB1dFdpdGhUaGlzPGZhbHNlPihleGVjLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFRoaXMs
IGVuY29kZWRWYWx1ZSwgcHJvcGVydHkpOwogfQogCkBAIC0xNjYzLDEzICsxNjM1LDExIEBAIGlu
dDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNPd25Qcm8KIAogICAgIEpTVmFsdWUga2V5
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIElkZW50aWZpZXIgcHJvcGVydHlO
YW1lID0ga2V5LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGZhbHNlKTsKIAogICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QsIFBy
b3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CiAgICAgYm9v
bCByZXN1bHQgPSB0aGlzT2JqZWN0LT5oYXNPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUu
aW1wbCgpLCBzbG90KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2Up
OwogCiAgICAgSGFzT3duUHJvcGVydHlDYWNoZSogaGFzT3duUHJvcGVydHlDYWNoZSA9IHZtLmhh
c093blByb3BlcnR5Q2FjaGUoKTsKICAgICBBU1NFUlQoaGFzT3duUHJvcGVydHlDYWNoZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5q
ZWN0ZWRTY3JpcHRIb3N0LmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMyw4ICsxMDMsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpldmFsdWF0
ZVdpCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRl
cmFsKCJJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24gZmlyc3Qg
YXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZy4iKSk7CiAKICAgICBTdHJpbmcgcHJvZ3JhbSA9IHNj
cmlwdFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgTmFrZWRQdHI8RXhj
ZXB0aW9uPiBleGNlcHRpb247CiAgICAgSlNPYmplY3QqIHNjb3BlRXh0ZW5zaW9uID0gZXhlYy0+
YXJndW1lbnQoMSkuZ2V0T2JqZWN0KCk7CkBAIC0yNjUsOCArMjY0LDcgQEAgSlNWYWx1ZSBKU0lu
amVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgIGlmIChKU1Byb21pc2UqIHByb21pc2Ug
PSBqc0R5bmFtaWNDYXN0PEpTUHJvbWlzZSo+KHZhbHVlKSkgewogICAgICAgICB1bnNpZ25lZCBp
bmRleCA9IDA7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShl
eGVjLCBudWxscHRyKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICBzd2l0Y2ggKHByb21pc2UtPnN0YXR1
cyhleGVjLT52bSgpKSkgewogICAgICAgICBjYXNlIEpTUHJvbWlzZTo6U3RhdHVzOjpQZW5kaW5n
OgogICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0
cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgQVNDSUlMaXRlcmFsKCJzdGF0dXMiKSwganNOb250
cml2aWFsU3RyaW5nKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgicGVuZGluZyIpKSkpOwpAQCAtMjg3LDgg
KzI4NSw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICBp
ZiAoSlNCb3VuZEZ1bmN0aW9uKiBib3VuZEZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU0JvdW5k
RnVuY3Rpb24qPih2YWx1ZSkpIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAg
ICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNW
YWx1ZSgpKTsKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNv
bnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgInRhcmdldEZ1bmN0aW9uIiwgYm91bmRGdW5j
dGlvbi0+dGFyZ2V0RnVuY3Rpb24oKSkpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgo
ZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAiYm91bmRUaGlz
IiwgYm91bmRGdW5jdGlvbi0+Ym91bmRUaGlzKCkpKTsKICAgICAgICAgaWYgKGJvdW5kRnVuY3Rp
b24tPmJvdW5kQXJncygpKQpAQCAtMjk5LDggKzI5Niw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNj
cmlwdEhvc3Q6OmdldEludGVybmEKICAgICBpZiAoUHJveHlPYmplY3QqIHByb3h5ID0ganNEeW5h
bWljQ2FzdDxQcm94eU9iamVjdCo+KHZhbHVlKSkgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IDA7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBu
dWxscHRyLCAyKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCBBU0NJSUxpdGVyYWwo
InRhcmdldCIpLCBwcm94eS0+dGFyZ2V0KCkpKTsKICAgICAgICAgYXJyYXktPnB1dERpcmVjdElu
ZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgQVNDSUlM
aXRlcmFsKCJoYW5kbGVyIiksIHByb3h5LT5oYW5kbGVyKCkpKTsKICAgICAgICAgcmV0dXJuIGFy
cmF5OwpAQCAtMzEzLDggKzMwOSw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Omdl
dEludGVybmEKIAogICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICAgICAg
SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIDIpOwot
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgo
ZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAiYXJyYXkiLCBp
dGVyYXRlZFZhbHVlKSk7CiAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
aW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAia2luZCIsIGtpbmQpKTsK
ICAgICAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTMzNiw4ICszMzEsNyBAQCBKU1ZhbHVlIEpT
SW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAgICAgIH0KICAgICAgICAgdW5zaWdu
ZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJy
YXkoZXhlYywgbnVsbHB0ciwgMik7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgYXJyYXktPnB1dERpcmVj
dEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgIm1h
cCIsIG1hcEl0ZXJhdG9yLT5pdGVyYXRlZFZhbHVlKCkpKTsKICAgICAgICAgYXJyYXktPnB1dERp
cmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywg
ImtpbmQiLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywga2luZCkpKTsKICAgICAgICAgcmV0dXJu
IGFycmF5OwpAQCAtMzU4LDggKzM1Miw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6
OmdldEludGVybmEKICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAg
ICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCAy
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBKU1ZhbHVlKCkpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgr
KywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAic2V0Iiwgc2V0SXRlcmF0b3ItPml0
ZXJhdGVkVmFsdWUoKSkpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5k
ZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAia2luZCIsIGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCBraW5kKSkpOwogICAgICAgICByZXR1cm4gYXJyYXk7CkBAIC0zNjgsOCAr
MzYxLDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgIGlm
IChKU1N0cmluZ0l0ZXJhdG9yKiBzdHJpbmdJdGVyYXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNTdHJp
bmdJdGVyYXRvcio+KHZhbHVlKSkgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAg
ICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCAx
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBKU1ZhbHVlKCkpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgr
KywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAic3RyaW5nIiwgc3RyaW5nSXRlcmF0
b3ItPml0ZXJhdGVkVmFsdWUoZXhlYykpKTsKICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgIH0K
QEAgLTM3Nyw4ICszNjksNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRl
cm5hCiAgICAgaWYgKEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIHByb3BlcnR5TmFtZUl0ZXJhdG9y
ID0ganNEeW5hbWljQ2FzdDxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKj4odmFsdWUpKSB7CiAgICAg
ICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1
Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIDEpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgIGFycmF5
LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5
KGV4ZWMsICJvYmplY3QiLCBwcm9wZXJ0eU5hbWVJdGVyYXRvci0+aXRlcmF0ZWRWYWx1ZSgpKSk7
CiAgICAgICAgIHJldHVybiBhcnJheTsKICAgICB9CkBAIC00MjAsOCArNDExLDcgQEAgSlNWYWx1
ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha01hcEVudAogICAgICAgICBudW1iZXJUb0ZldGNo
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZldGNoRG91YmxlKTsKIAogICAgIEpTQXJyYXkqIGFy
cmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIGZvciAoYXV0byBp
dCA9IHdlYWtNYXAtPndlYWtNYXBEYXRhKCktPmJlZ2luKCk7IGl0ICE9IHdlYWtNYXAtPndlYWtN
YXBEYXRhKCktPmVuZCgpOyArK2l0KSB7CiAgICAgICAgIEpTT2JqZWN0KiBlbnRyeSA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgICAgICBlbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZt
KCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImtleSIpLCBpdC0+a2V5KTsKQEAgLTQ2
OCw4ICs0NTgsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrU2V0RW50CiAg
ICAgICAgIG51bWJlclRvRmV0Y2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmV0Y2hEb3VibGUp
OwogCiAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxw
dHIpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUo
KSk7CiAgICAgZm9yIChhdXRvIGl0ID0gd2Vha1NldC0+d2Vha01hcERhdGEoKS0+YmVnaW4oKTsg
aXQgIT0gd2Vha1NldC0+d2Vha01hcERhdGEoKS0+ZW5kKCk7ICsraXQpIHsKICAgICAgICAgSlNP
YmplY3QqIGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAgICAgICAgIGVudHJ5
LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAidmFs
dWUiKSwgaXQtPmtleSk7CkBAIC01MDksOCArNDk4LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2Ny
aXB0SG9zdDo6aXRlcmF0b3JFbgogICAgICAgICBpdGVyYXRvciA9IHN0cmluZ0l0ZXJhdG9yLT5j
bG9uZShleGVjKTsKICAgICBlbHNlIGlmIChKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBwcm9wZXJ0
eU5hbWVJdGVyYXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcio+KHZh
bHVlKSkgewogICAgICAgICBpdGVyYXRvciA9IHByb3BlcnR5TmFtZUl0ZXJhdG9yLT5jbG9uZShl
eGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IEpTVmFsdWUoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKEpTT2JqZWN0KiBpdGVyYXRv
ck9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSkpIHsKICAgICAgICAgICAg
IC8vIEFycmF5IEl0ZXJhdG9ycyBhcmUgY3JlYXRlZCBpbiBKUyBmb3IgcGVyZm9ybWFuY2UgcmVh
c29ucy4gVGh1cyB0aGUgb25seSB3YXkgdG8ga25vdyB3ZSBoYXZlIG9uZSBpcyB0bwpAQCAtNTI5
LDggKzUxNyw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Oml0ZXJhdG9yRW4KICAg
ICAgICAgbnVtYmVyVG9GZXRjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihmZXRjaERvdWJsZSk7
CiAKICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0
cik7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgp
KTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJUb0ZldGNoOyArK2kpIHsK
ICAgICAgICAgSlNWYWx1ZSBuZXh0ID0gaXRlcmF0b3JTdGVwKGV4ZWMsIGl0ZXJhdG9yKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2
YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODMsOCArODMsNyBAQCBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVh
dGVXCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRl
cmFsKCJKU0phdmFTY3JpcHRDYWxsRnJhbWUuZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24gZmly
c3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZy4iKSk7CiAKICAgICBTdHJpbmcgc2NyaXB0ID0g
c2NyaXB0VmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBOYWtlZFB0cjxF
eGNlcHRpb24+IGV4Y2VwdGlvbjsKICAgICBKU09iamVjdCogc2NvcGVFeHRlbnNpb24gPSBleGVj
LT5hcmd1bWVudCgxKS5nZXRPYmplY3QoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAzLDggKzEwMyw3IEBAIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIFN0cmluZyBw
cm9ncmFtU291cmNlID0gYXNTdHJpbmcocHJvZ3JhbSktPnZhbHVlKGNhbGxGcmFtZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUo
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIAogICAg
IENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CiAgICAg
Q29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7CkBA
IC0xODYsOCArMTg1LDcgQEAgdW5zaWduZWQgc2l6ZU9mVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxG
cgogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50cy5pc09iamVj
dCgpKTsKICAgICAgICAgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNhbGxGcmFtZSwganNDYXN0PEpTT2Jq
ZWN0Kj4oY2VsbCkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IDApOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTgwNCw4ICs4MDIsNyBAQCBKU1ZhbHVl
IEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1FeGVjCiAgICAgICAgICAgICAgICAgICAgIGlm
IChpID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGds
b2JhbE9iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGNh
bGxGcmFtZSwgSlNPTlBQYXRoW2ldLm1fcGF0aEVudHJ5TmFtZSwgc2xvdCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBKU1ZhbHVl
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgdGhy
b3dTY29wZSwgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihjYWxsRnJhbWUsIEpTT05QUGF0
aFtpXS5tX3BhdGhFbnRyeU5hbWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv
IGZhaWxlZEpTT05QOwpAQCAtODEzLDE0ICs4MTAsMTIgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6
ZXhlY3V0ZShQcm9ncmFtRXhlYwogICAgICAgICAgICAgICAgICAgICAgICAgYmFzZU9iamVjdCA9
IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBKU09OUFBhdGhbaV0ubV9wYXRoRW50cnlOYW1lKTsK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNl
T2JqZWN0ID0gYmFzZU9iamVjdC5nZXQoY2FsbEZyYW1lLCBKU09OUFBhdGhbaV0ubV9wYXRoRW50
cnlOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBKU1ZhbHVlKCkpOwog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgY2FzZSBKU09OUFBhdGhFbnRyeVR5cGVMb29rdXA6IHsKICAgICAgICAgICAgICAg
ICAgICAgYmFzZU9iamVjdCA9IGJhc2VPYmplY3QuZ2V0KGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTT05QUGF0aFtpXS5tX3BhdGhJbmRleCkpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtODMyLDgg
KzgyNyw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbUV4ZWMKICAgICAg
ICAgICAgIHN3aXRjaCAoSlNPTlBQYXRoLmxhc3QoKS5tX3R5cGUpIHsKICAgICAgICAgICAgIGNh
c2UgSlNPTlBQYXRoRW50cnlUeXBlQ2FsbDogewogICAgICAgICAgICAgICAgIEpTVmFsdWUgZnVu
Y3Rpb24gPSBiYXNlT2JqZWN0LmdldChjYWxsRnJhbWUsIEpTT05QUGF0aC5sYXN0KCkubV9wYXRo
RW50cnlOYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAg
ICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICAgICAgICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICAgICAgICAgICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpCkBAIC04NDIsMjAgKzgzNiwxNyBAQCBKU1Zh
bHVlIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1FeGVjCiAgICAgICAgICAgICAgICAganNv
bkFyZy5hcHBlbmQoSlNPTlBWYWx1ZSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBKU09OUFBhdGguc2l6ZSgpID09IDEgPyBqc1VuZGVmaW5lZCgpOiBiYXNlT2JqZWN0Owog
ICAgICAgICAgICAgICAgIEpTT05QVmFsdWUgPSBKU0M6OmNhbGwoY2FsbEZyYW1lLCBmdW5jdGlv
biwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGpzb25BcmcpOwotICAgICAgICAgICAg
ICAgIGlmICh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBjYXNlIEpTT05QUGF0aEVudHJ5VHlwZURvdDogewogICAgICAgICAg
ICAgICAgIGJhc2VPYmplY3QucHV0KGNhbGxGcmFtZSwgSlNPTlBQYXRoLmxhc3QoKS5tX3BhdGhF
bnRyeU5hbWUsIEpTT05QVmFsdWUsIHNsb3QpOwotICAgICAgICAgICAgICAgIGlmICh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIEpTVmFs
dWUoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBjYXNlIEpTT05QUGF0aEVudHJ5VHlwZUxvb2t1cDogewogICAgICAgICAgICAgICAgIGJhc2VP
YmplY3QucHV0QnlJbmRleChjYWxsRnJhbWUsIEpTT05QUGF0aC5sYXN0KCkubV9wYXRoSW5kZXgs
IEpTT05QVmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgICAgIGlmICh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IEpTVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBkZWZhdWx0OgpAQCAtOTU4LDggKzk0OSw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6
OmV4ZWN1dGVDYWxsKENhbGxGcmEKICAgICAgICAgICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKHZt
RW50cnlUb05hdGl2ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsRGF0YS5uYXRpdmUuZnVu
Y3Rpb24pLCAmdm0sICZwcm90b0NhbGxGcmFtZSkpOwotICAgICAgICAgICAgaWYgKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0ganNOdWxsKCk7CisgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIEpTVmFsdWUoKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTEwMjcsOCArMTAxNyw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRl
cjo6ZXhlY3V0ZUNvbnN0cnVjdCgKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCAwKTsKICAgICBBU1NFUlQocmVzdWx0LmlzT2JqZWN0
KCkpOwogICAgIHJldHVybiBjaGVja2VkUmV0dXJuKGFzT2JqZWN0KHJlc3VsdCkpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlj
a2VuLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzgsOCArNDM4LDcg
QEAgSlNBcnJheSogU2hhZG93Q2hpY2tlbjo6ZnVuY3Rpb25zT25TdGFjawogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBpdGVyYXRl
KAogICAgICAgICB2bSwgZXhlYywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc2LDggKzI3Niw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW4KICAgICBMT0dfSUMo
KElDRXZlbnQ6Ok9wZXJhdGlvbkluT3B0aW1pemUsIGJhc2UtPmNsYXNzSW5mbygpLCBpZGVudCkp
OwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2UsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRo
b2RUeXBlOjpIYXNQcm9wZXJ0eSk7CiAgICAgYm9vbCByZXN1bHQgPSBhc09iamVjdChiYXNlKS0+
Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KTsKLSAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gc3R1YkluZm8tPmFjY2Vz
c1R5cGUpOwogICAgIApAQCAtNTEyLDggKzUxMSw3IEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKENh
bGxGcmFtZSogY2FsbEZyYW0KIAogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9w
ZXJ0eUtleShjYWxsRnJhbWUpOwogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9T
dHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOwogCiAgICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFpc1N0cmluZ09yU3lt
Ym9sKHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZCAhPSBwcm9wZXJ0eSkpCiAgICAg
ICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKQEAgLTU1Nyw4ICs1NTUsNyBAQCBz
dGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChDYWxsRnJhbWUqIGNhCiAKICAgICAvLyBEb24ndCBw
dXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KICAgICBhdXRv
IHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoY2FsbEZyYW1lKTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGlmIChPcHRpb25hbDx1aW50MzJf
dD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5KSkgewogICAgICAgICBieVZhbEluZm8tPnRv
b2tTbG93UGF0aCA9IHRydWU7CkBAIC03ODcsOCArNzg0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25DYQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWwoZXhlY0NhbGxlZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEVuY29kZWRK
U1ZhbHVlKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQpAQCAtMTQ2
MSw4ICsxNDU3LDcgQEAgc3RhdGljIHZvaWQgcHV0QWNjZXNzb3JCeVZhbChFeGVjU3RhdGUqIAog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIGF1dG8gcHJvcGVydHlLZXkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtl
eShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGlm
IChhY2Nlc3NvclR5cGUgPT0gQWNjZXNzb3JUeXBlOjpHZXR0ZXIpCiAgICAgICAgIGJhc2UtPnB1
dEdldHRlcihleGVjLCBwcm9wZXJ0eUtleSwgYWNjZXNzb3IsIGF0dHJpYnV0ZSk7CkBAIC0xNjUx
LDExICsxNjQ2LDkgQEAgc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLAog
ICAgIH0KIAogICAgIGJhc2VWYWx1ZS5yZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAg
YXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBBU1NF
UlQoZXhlYy0+Ynl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8g
JiYgKCFpc1N0cmluZ09yU3ltYm9sKHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZCAh
PSBwcm9wZXJ0eSkpCkBAIC0xODYzLDExICsxODU2LDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgYmFz
ZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3Bl
cnR5S2V5KGV4ZWMpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAg
IHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgcHJvcGVydHkpOwogICAgIH0KIApAQCAtMTkx
NSwxMSArMTkwNiw5IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlbGV0ZUJ5VmEK
ICAgICBpZiAoa2V5LmdldFVJbnQzMihpbmRleCkpCiAgICAgICAgIGNvdWxkRGVsZXRlID0gYmFz
ZU9iai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgoYmFzZU9iaiwgZXhl
YywgaW5kZXgpOwogICAgIGVsc2UgewotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkgPSBrZXku
dG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBjb3VsZERlbGV0ZSA9IGJhc2VPYmotPm1ldGhv
ZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkoYmFzZU9iaiwgZXhlYywgcHJvcGVydHkpOwogICAg
IH0KICAgICBpZiAoIWNvdWxkRGVsZXRlICYmIGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1v
ZGUoKSkKQEAgLTIxMjMsOCArMjExMiw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRUb1Njb3BlKEUKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzY29wZSwgY29kZUJsb2NrLT5p
c1N0cmljdE1vZGUoKSwgUHV0UHJvcGVydHlTbG90OjpVbmtub3duQ29udGV4dCwgaXNJbml0aWFs
aXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSk7CiAgICAgc2NvcGUtPm1l
dGhvZFRhYmxlKCktPnB1dChzY29wZSwgZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKICAgICAK
LSAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
bjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHZvaWQoKSk7CiAKICAgICBD
b21tb25TbG93UGF0aHM6OnRyeUNhY2hlUHV0VG9TY29wZUdsb2JhbChleGVjLCBjb2RlQmxvY2ss
IHBjLCBzY29wZSwgZ2V0UHV0SW5mbywgc2xvdCwgaWRlbnQpOwogfQpAQCAtMjM3Nyw4ICsyMzY1
LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdW5wcgogICAgIEpTVmFs
dWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgZG91YmxlIGEgPSBv
cDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gb3Ay
LnRvTnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSAq
IGIpKTsKIH0KQEAgLTIzOTMsMTEgKzIzODAsOSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBwcm9mCiAgICAgICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZUxIU0FuZFJIUyhv
cDEsIG9wMik7CiAKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgIAogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoYSAqIGIpOwogICAg
IGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZVJlc3VsdChyZXN1bHQpOwpAQCAtMjU2MCw4ICsyNTQ1LDcg
QEAgQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdW5wcgogICAgIEpTVmFsdWUg
b3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgZG91YmxlIGEgPSBvcDEu
dG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gb3AyLnRv
TnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSAtIGIp
KTsKIH0KQEAgLTI1NzYsMTEgKzI1NjAsOSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBwcm9mCiAgICAgICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZUxIU0FuZFJIUyhvcDEs
IG9wMik7CiAKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIAogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoYSAtIGIpOwogICAgIGFy
aXRoUHJvZmlsZS0+b2JzZXJ2ZVJlc3VsdChyZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MTEsMTEgKzgxMSw5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
Z2V0QnlWYWwoVk0KICAgICB9CiAKICAgICBiYXNlVmFsdWUucmVxdWlyZU9iamVjdENvZXJjaWJs
ZShleGVjKTsKLSAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAg
ICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlm
IChzY29wZS5leGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gYmFzZVZh
bHVlLmdldChleGVjLCBwcm9wZXJ0eSk7CiB9CiAKQEAgLTg4Myw3ICs4ODEsNyBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X3ZhCiAKICAgICAvLyBEb24ndCBwdXQgdG8g
YW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KICAgICBhdXRvIHByb3Bl
cnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICBMTElOVF9FTkQoKTsKIAogICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXgg
PSBwYXJzZUluZGV4KHByb3BlcnR5KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9m
aWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCShyZXZp
c2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJC
eXRlY29kZVNlcXVlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSwx
NSArODEsMTMgQEAgdm9pZCBCeXRlY29kZVNlcXVlbmNlOjphZGRTZXF1ZW5jZVByb3BlcgogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIEpTQXJyYXkqIGhlYWRlciA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywg
MCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJu
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1faGVhZGVyLnNpemUoKTsgKytpKQogICAgICAgICBoZWFkZXItPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGksIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9o
ZWFkZXJbaV0pKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5oZWFkZXIsIGhlYWRlcik7CiAgICAgCiAgICAgSlNBcnJheSogc2VxdWVuY2UgPSBjb25z
dHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NlcXVlbmNlLnNpemUoKTsg
KytpKQogICAgICAgICBzZXF1ZW5jZS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9zZXF1ZW5j
ZVtpXS50b0pTKGV4ZWMpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ5dGVjb2RlLCBzZXF1ZW5jZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCShyZXZpc2lv
biAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21w
aWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNywyOCArMTE3LDI0IEBAIEpTVmFsdWUg
Q29tcGlsYXRpb246OnRvSlMoRXhlY1N0YXRlKiBleGUKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVj
dCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVjb2Rlc0lELCBqc051bWJlcihtX2J5
dGVjb2Rlcy0+aWQoKSkpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuY29tcGlsYXRpb25LaW5kLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4
KHRvQ1N0cmluZyhtX2tpbmQpKSkpOwogICAgIAogICAgIEpTQXJyYXkqIHByb2ZpbGVkQnl0ZWNv
ZGVzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3Byb2ZpbGVkQnl0ZWNvZGVzLnNpemUoKTsgKytpKQogICAgICAgICBwcm9maWxl
ZEJ5dGVjb2Rlcy0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9wcm9maWxlZEJ5dGVjb2Rlc1tp
XS50b0pTKGV4ZWMpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnByb2ZpbGVkQnl0ZWNvZGVzLCBwcm9maWxlZEJ5dGVjb2Rlcyk7CiAgICAgCiAgICAg
SlNBcnJheSogZGVzY3JpcHRpb25zID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Rlc2NyaXB0aW9ucy5zaXplKCk7ICsraSkKICAg
ICAgICAgZGVzY3JpcHRpb25zLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX2Rlc2NyaXB0aW9u
c1tpXS50b0pTKGV4ZWMpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmRlc2NyaXB0aW9ucywgZGVzY3JpcHRpb25zKTsKICAgICAKICAgICBKU0FycmF5
KiBjb3VudGVycyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBmb3IgKGF1dG8g
aXQgPSBtX2NvdW50ZXJzLmJlZ2luKCksIGVuZCA9IG1fY291bnRlcnMuZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICBKU09iamVjdCogY291bnRlckVudHJ5ID0gY29uc3RydWN0RW1w
dHlPYmplY3QoZXhlYyk7CiAgICAgICAgIGNvdW50ZXJFbnRyeS0+cHV0RGlyZWN0KHZtLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkub3JpZ2luLCBpdC0+a2V5LnRvSlMoZXhlYykpOwpAQCAtMTQ4LDE1
ICsxNDQsMTMgQEAgSlNWYWx1ZSBDb21waWxhdGlvbjo6dG9KUyhFeGVjU3RhdGUqIGV4ZQogICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY291bnRlcnMsIGNv
dW50ZXJzKTsKICAgICAKICAgICBKU0FycmF5KiBleGl0U2l0ZXMgPSBjb25zdHJ1Y3RFbXB0eUFy
cmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IEpTVmFsdWUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3NyRXhpdFNpdGVz
LnNpemUoKTsgKytpKQogICAgICAgICBleGl0U2l0ZXMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGks
IG1fb3NyRXhpdFNpdGVzW2ldLnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkub3NyRXhpdFNpdGVzLCBleGl0U2l0ZXMpOwogICAgIAog
ICAgIEpTQXJyYXkqIGV4aXRzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX29zckV4aXRzLnNpemUoKTsgKytpKQogICAgICAgICBl
eGl0cy0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9vc3JFeGl0c1tpXS50b0pTKGV4ZWMpKTsK
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9zckV4aXRz
LCBleGl0cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJE
YXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVyRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNCwyMiArMTA0LDE5IEBAIEpTVmFsdWUgRGF0YWJhc2U6OnRvSlMoRXhlY1N0YXRlKiBleGVj
KSAKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAg
ICAgCiAgICAgSlNBcnJheSogYnl0ZWNvZGVzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAw
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J5dGVjb2Rlcy5zaXplKCk7ICsraSkK
ICAgICAgICAgYnl0ZWNvZGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX2J5dGVjb2Rlc1tp
XS50b0pTKGV4ZWMpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ5dGVjb2RlcywgYnl0ZWNvZGVzKTsKICAgICAKICAgICBKU0FycmF5KiBjb21waWxh
dGlvbnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fY29tcGlsYXRpb25zLnNpemUoKTsgKytpKQogICAgICAgICBjb21waWxhdGlv
bnMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fY29tcGlsYXRpb25zW2ldLT50b0pTKGV4ZWMp
KTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbXBp
bGF0aW9ucywgY29tcGlsYXRpb25zKTsKICAgICAKICAgICBKU0FycmF5KiBldmVudHMgPSBjb25z
dHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
ZXZlbnRzLnNpemUoKTsgKytpKQogICAgICAgICBldmVudHMtPnB1dERpcmVjdEluZGV4KGV4ZWMs
IGksIG1fZXZlbnRzW2ldLnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXZlbnRzLCBldmVudHMpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmNwcAko
cmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyT1NSRXhpdFNpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw4ICszOSw3IEBAIEpTVmFsdWUg
T1NSRXhpdFNpdGU6OnRvSlMoRXhlY1N0YXRlKiBleGUKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0FycmF5
KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fY29kZUFkZHJlc3Nlcy5zaXplKCk7ICsraSkKICAgICAgICAgcmVzdWx0
LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBqc1N0cmluZyhleGVjLCB0b1N0cmluZyhSYXdQb2lu
dGVyKG1fY29kZUFkZHJlc3Nlc1tpXSkpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpblN0YWNrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5T
dGFjay5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9m
aWxlci9Qcm9maWxlck9yaWdpblN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAzLDggKzEwMyw3
IEBAIEpTVmFsdWUgT3JpZ2luU3RhY2s6OnRvSlMoRXhlY1N0YXRlKiBleGUKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAg
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RhY2suc2l6ZSgpOyArK2kpCiAgICAg
ICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9zdGFja1tpXS50b0pTKGV4ZWMp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSw4IEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIHN0ZDo6cGFpcjxTcGVjaWVzQ28KICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAor
I2RlZmluZSBFWENFUFRJT05fUkVTVUxUIHN0ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RS
ZXN1bHQ6OkV4Y2VwdGlvbiwgbnVsbHB0cikKKwogICAgIC8vIEVDTUEgOS40LjIuMzogaHR0cHM6
Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlCiAgICAgSlNW
YWx1ZSBjb25zdHJ1Y3RvciA9IGpzVW5kZWZpbmVkKCk7CiAgICAgaWYgKExJS0VMWShpc0FycmF5
KGV4ZWMsIHRoaXNPYmplY3QpKSkgewpAQCAtMjA4LDggKzIxMCw3IEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIHN0ZDo6cGFpcjxTcGVjaWVzQ28KICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpGYXN0UGF0aCwgbnVsbHB0cik7CiAKICAgICAg
ICAgY29uc3RydWN0b3IgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmNvbnN0cnVjdG9yKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihTcGVjaWVzQ29uc3RydWN0UmVz
dWx0OjpFeGNlcHRpb24sIG51bGxwdHIpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBFWENFUFRJT05fUkVTVUxUKTsKICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzQ29uc3Ry
dWN0b3IoKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yT2JqZWN0ID0ganND
YXN0PEpTT2JqZWN0Kj4oY29uc3RydWN0b3IpOwogICAgICAgICAgICAgaWYgKGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSAhPSBjb25zdHJ1Y3Rvck9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpCkBA
IC0yMTcsMTMgKzIxOCwxMiBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBzdGQ6OnBhaXI8U3BlY2ll
c0NvCiAgICAgICAgIH0KICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzT2JqZWN0KCkpIHsKICAg
ICAgICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3IuZ2V0KGV4ZWMsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5zcGVjaWVzU3ltYm9sKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFNw
ZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbiwgbnVsbHB0cik7CisgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBFWENFUFRJT05fUkVTVUxUKTsKICAgICAgICAgICAg
IGlmIChjb25zdHJ1Y3Rvci5pc051bGwoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RmFzdFBhdGgsIG51bGxwdHIpOzsKICAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0
aW9uLCBudWxscHRyKTsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgRVhDRVBUSU9OX1JFU1VMVCk7CiAKICAgICBpZiAoY29uc3RydWN0b3IuaXNVbmRlZmlu
ZWQoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1
bHQ6OkZhc3RQYXRoLCBudWxscHRyKTsKQEAgLTIzMSw5ICsyMzEsMTAgQEAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgc3RkOjpwYWlyPFNwZWNpZXNDbwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3M7CiAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIobGVuZ3RoKSk7CiAgICAgSlNPYmplY3QqIG5l
d09iamVjdCA9IGNvbnN0cnVjdChleGVjLCBjb25zdHJ1Y3RvciwgYXJncywgIlNwZWNpZXMgY29u
c3RydWN0aW9uIGRpZCBub3QgZ2V0IGEgdmFsaWQgY29uc3RydWN0b3IiKTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
U3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uLCBudWxscHRyKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBFWENFUFRJT05fUkVTVUxUKTsKICAgICByZXR1cm4gc3RkOjpt
YWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6Q3JlYXRlZE9iamVjdCwgbmV3T2JqZWN0
KTsKKworI3VuZGVmIEVYQ0VQVElPTl9SRVNVTFQKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKEV4ZWNTdGF0ZSogZXhlYywgaW50
IGFyZ3VtZW50LCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHVuZGVmaW5lZFZhbHVlID0gMCkK
QEAgLTI4NywxMSArMjg4LDkgQEAgdm9pZCBzaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aAogICAgICAgICB1bnNpZ25lZCBmcm9tID0gayArIGN1cnJlbnRDb3VudDsKICAgICAgICAg
dW5zaWduZWQgdG8gPSBrICsgcmVzdWx0Q291bnQ7CiAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVl
ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgZnJvbSkpIHsKLSAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgICAg
IHRoaXNPYmotPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgdG8sIHZhbHVlLCB0cnVlKTsKLSAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
ICAgICAgICAgfSBlbHNlIGlmICghdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgodGhpc09iaiwgZXhlYywgdG8pKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5
LiIpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMzMywxNSArMzMyLDEzIEBAIHZvaWQgdW5z
aGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiAKICAgICAgICAgdW5zaWduZWQgZnJvbSA9
IGsgKyBjdXJyZW50Q291bnQgLSAxOwogICAgICAgICB1bnNpZ25lZCB0byA9IGsgKyByZXN1bHRD
b3VudCAtIDE7CiAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gZ2V0UHJvcGVydHkoZXhlYywg
dGhpc09iaiwgZnJvbSkpIHsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgICAgIHRoaXNPYmotPnB1dEJ5SW5kZXhJ
bmxpbmUoZXhlYywgdG8sIHZhbHVlLCB0cnVlKTsKICAgICAgICAgfSBlbHNlIGlmICghdGhpc09i
ai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZXhlYywg
dG8pKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRl
cmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOwogICAgIH0KIH0KIApAQCAtMzUzLDEzICszNTAsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgLy8gMS4gTGV0IGFycmF5IGJlIHRoZSByZXN1
bHQgb2YgY2FsbGluZyBUb09iamVjdCBvbiB0aGUgdGhpcyB2YWx1ZS4KICAgICBKU09iamVjdCog
dGhpc09iamVjdCA9IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIAogICAgIC8vIDIuIExldCBmdW5jIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0
aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgYXJyYXkgd2l0aCBhcmd1bWVudCAiam9pbiIu
CiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IEpTVmFsdWUodGhpc09iamVjdCkuZ2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5qb2luKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAg
Ly8gMy4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhlbiBsZXQgZnVuYyBiZSB0aGUg
c3RhbmRhcmQgYnVpbHQtaW4gbWV0aG9kIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgKDE1LjIu
NC4yKS4KICAgICBib29sIGN1c3RvbUpvaW5DYXNlID0gZmFsc2U7CkBAIC0zODcsMTkgKzM4Miwx
NiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAKICAgICBKU1N0cmluZ0pv
aW5lciBqb2luZXIoKmV4ZWMsICcsJywgbGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpT
VmFsdWUgZWxlbWVudCA9IHRoaXNBcnJheS0+dHJ5R2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAg
ICBpZiAoIWVsZW1lbnQpIHsKICAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzQXJyYXktPmdldChl
eGVjLCBpKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgICAgICB9CiAgICAgICAgIGpvaW5lci5hcHBlbmQoKmV4ZWMsIGVsZW1lbnQpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqb2luZXIuam9pbigqZXhlYykpOwpAQCAtNDEyLDY1ICs0MDQsNTQgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpOwogCiAgICAgSlNP
YmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlz
T2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgU3RyaW5nUmVjdXJzaW9uQ2hl
Y2tlciBjaGVja2VyKGV4ZWMsIHRoaXNPYmplY3QpOwogICAgIGlmIChKU1ZhbHVlIGVhcmx5UmV0
dXJuVmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIAogICAgIEpTU3RyaW5nSm9pbmVyIHN0
cmluZ0pvaW5lcigqZXhlYywgJywnLCBsZW5ndGgpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAK
ICNpZiBFTkFCTEUoSU5UTCkKICAgICBBcmdMaXN0IGFyZ3VtZW50cyhleGVjKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVt
ZW50ID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoZXhlYywgaSk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKGVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkK
ICAgICAgICAgICAgIGVsZW1lbnQgPSBqc0VtcHR5U3RyaW5nKGV4ZWMpOwogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIEpTVmFsdWUgY29udmVyc2lvbkZ1bmN0aW9uID0gZWxlbWVudC5nZXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nKTsKLSAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNv
bnZlcnNpb25GdW5jdGlvbiwgY2FsbERhdGEpOwogICAgICAgICAgICAgaWYgKGNhbGxUeXBlICE9
IENhbGxUeXBlOjpOb25lKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywg
Y29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGFyZ3VtZW50
cyk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQo
KmV4ZWMsIGVsZW1lbnQpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
fQogI2Vsc2UgLy8gIUVOQUJMRShJTlRMKQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXRJ
bmRleChleGVjLCBpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAg
ICBpZiAoZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIEpTVmFsdWUgY29udmVyc2lvbkZ1bmN0aW9uID0gZWxlbWVudC5nZXQoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nKTsKLSAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgQ2Fs
bFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxEYXRh
KTsKICAgICAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKSB7CiAgICAgICAgICAg
ICBlbGVtZW50ID0gY2FsbChleGVjLCBjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxs
RGF0YSwgZWxlbWVudCwgZXhlYy0+ZW1wdHlMaXN0KCkpOwotICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIH0KICAgICAgICAgc3RyaW5nSm9pbmVy
LmFwcGVuZCgqZXhlYywgZWxlbWVudCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICB9CiAjZW5kaWYgLy8gIUVOQUJMRShJTlRMKQogCkBAIC01MTMsOCArNDk0LDcgQEAg
c3RhdGljIEpTVmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLAogCiAgICAgLy8gNi4gTGV0
IGVsZW1lbnQwIGJlIEdldChPLCAiMCIpLgogICAgIEpTVmFsdWUgZWxlbWVudDAgPSB0aGlzT2Jq
ZWN0LT5nZXRJbmRleCgmZXhlYywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgLy8gNy4gSWYgZWxlbWVudDAgaXMgdW5kZWZpbmVk
IG9yIG51bGwsIGxldCBSIGJlIHRoZSBlbXB0eSBTdHJpbmc7IG90aGVyd2lzZSwgbGV0IFIgYmUg
PyBUb1N0cmluZyhlbGVtZW50MCkuCiAgICAgSlNTdHJpbmcqIHIgPSBudWxscHRyOwpAQCAtNTIy
LDggKzUwMiw3IEBAIHN0YXRpYyBKU1ZhbHVlIHNsb3dKb2luKEV4ZWNTdGF0ZSYgZXhlYywKICAg
ICAgICAgciA9IGpzRW1wdHlTdHJpbmcoJmV4ZWMpOwogICAgIGVsc2UKICAgICAgICAgciA9IGVs
ZW1lbnQwLnRvU3RyaW5nKCZleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICAvLyA4LiBMZXQgayBiZSAxLgogICAgIC8vIDkuIFJl
cGVhdCwgd2hpbGUgayA8IGxlbgpAQCAtNTMxLDggKzUxMCw3IEBAIHN0YXRpYyBKU1ZhbHVlIHNs
b3dKb2luKEV4ZWNTdGF0ZSYgZXhlYywKICAgICBmb3IgKHVpbnQ2NF90IGsgPSAxOyBrIDwgbGVu
Z3RoOyArK2spIHsKICAgICAgICAgLy8gYi4gTGV0IGVsZW1lbnQgYmUgPyBHZXQoTywgISBUb1N0
cmluZyhrKSkuCiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldCgmZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgQXRvbWljU3RyaW5nOjpudW1iZXIoaykp
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
VmFsdWUoKSk7CiAKICAgICAgICAgLy8gYy4gSWYgZWxlbWVudCBpcyB1bmRlZmluZWQgb3IgbnVs
bCwgbGV0IG5leHQgYmUgdGhlIGVtcHR5IFN0cmluZzsgb3RoZXJ3aXNlLCBsZXQgbmV4dCBiZSA/
IFRvU3RyaW5nKGVsZW1lbnQpLgogICAgICAgICBKU1N0cmluZyogbmV4dCA9IG51bGxwdHI7CkBA
IC01NDIsMTQgKzUyMCwxMiBAQCBzdGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihFeGVjU3RhdGUmIGV4
ZWMsCiAgICAgICAgICAgICBuZXh0ID0ganNFbXB0eVN0cmluZygmZXhlYyk7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgbmV4dCA9IGVsZW1lbnQudG9TdHJpbmcoJmV4ZWMpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsK
IAogICAgICAgICAvLyBhLiBMZXQgUyBiZSB0aGUgU3RyaW5nIHZhbHVlIHByb2R1Y2VkIGJ5IGNv
bmNhdGVuYXRpbmcgUiBhbmQgc2VwLgogICAgICAgICAvLyBkLiBMZXQgUiBiZSBhIFN0cmluZyB2
YWx1ZSBwcm9kdWNlZCBieSBjb25jYXRlbmF0aW5nIFMgYW5kIG5leHQuCiAgICAgICAgIHIgPSBq
c1N0cmluZygmZXhlYywgciwgc2VwYXJhdG9yLCBuZXh0KTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgfQogICAgIC8v
IDEwLiBSZXR1cm4gUi4KICAgICByZXR1cm4gcjsKQEAgLTU4MCw4ICs1NTYsNyBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlCiAgICAgICAgIGlmIChsZW5ndGggPiBi
dXR0ZXJmbHkucHVibGljTGVuZ3RoKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgSlNT
dHJpbmdKb2luZXIgam9pbmVyKHN0YXRlLCBzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsK
ICAgICAgICAgYXV0byBkYXRhID0gYnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCk7CiAgICAg
ICAgIGJvb2wgaG9sZXNLbm93blRvQmVPSyA9IGZhbHNlOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKQEAgLTYwNCw4ICs1NzksNyBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlCiAgICAgICAgIGlmIChsZW5ndGggPiBidXR0
ZXJmbHkucHVibGljTGVuZ3RoKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgSlNTdHJp
bmdKb2luZXIgam9pbmVyKHN0YXRlLCBzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAg
ICAgICAgYXV0byBkYXRhID0gYnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCk7CiAg
ICAgICAgIGJvb2wgaG9sZXNLbm93blRvQmVPSyA9IGZhbHNlOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKQEAgLTYyNywxNSArNjAxLDEyIEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUKIAogZ2VuZXJhbENhc2U6CiAgICAg
SlNTdHJpbmdKb2luZXIgam9pbmVyKHN0YXRlLCBzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVt
ZW50ID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAg
ICBqb2luZXIuYXBwZW5kKHN0YXRlLCBlbGVtZW50KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIH0KICAgICBy
ZXR1cm4gam9pbmVyLmpvaW4oc3RhdGUpOwogfQpAQCAtNjU2LDggKzYyNyw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIC8vIDIuIExldCBsZW4gYmUg
PyBUb0xlbmd0aCg/IEdldChPLCAibGVuZ3RoIikpLgogICAgIGRvdWJsZSBsZW5ndGggPSB0b0xl
bmd0aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICAvLyAzLiBJ
ZiBzZXBhcmF0b3IgaXMgdW5kZWZpbmVkLCBsZXQgc2VwYXJhdG9yIGJlIHRoZSBzaW5nbGUtZWxl
bWVudCBTdHJpbmcgIiwiLgogICAgIEpTVmFsdWUgc2VwYXJhdG9yVmFsdWUgPSBleGVjLT5hcmd1
bWVudCgwKTsKQEAgLTY2OCw4ICs2MzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAgICAgICAgICAgICB1aW50NjRfdCBsZW5ndGg2NCA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihsZW5ndGgpOwogICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGRvdWJs
ZT4obGVuZ3RoNjQpID09IGxlbmd0aCk7CiAgICAgICAgICAgICBKU1N0cmluZyoganNTZXBhcmF0
b3IgPSBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCBjb21tYSk7Ci0gICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHNsb3dKb2luKCpleGVjLCB0aGlzT2JqZWN0LCBqc1NlcGFyYXRvciwgbGVuZ3Ro
NjQpKTsKICAgICAgICAgfQpAQCAtNjgxLDggKzY1MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIC8vIDQuIExldCBzZXAgYmUgPyBUb1N0cmluZyhz
ZXBhcmF0b3IpLgogICAgIEpTU3RyaW5nKiBqc1NlcGFyYXRvciA9IHNlcGFyYXRvclZhbHVlLnRv
U3RyaW5nKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBpZiAoVU5MSUtFTFko
bGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIHx8ICFjYW5Vc2VG
YXN0Sm9pbih0aGlzT2JqZWN0KSkpIHsKICAgICAgICAgdWludDY0X3QgbGVuZ3RoNjQgPSBzdGF0
aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoKTsKQEAgLTcwNyw4ICs2NzUsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgaWYgKCF0aGlzT2JqKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAg
ICBKU1ZhbHVlIHJlc3VsdDsKICAgICBpZiAobGVuZ3RoID09IDApIHsKQEAgLTcxNiw4ICs2ODMs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJl
c3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gdGhp
c09iai0+Z2V0KGV4ZWMsIGxlbmd0aCAtIDEpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAgICAgICAgIGlmICghdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgodGhpc09iaiwgZXhlYywgbGVuZ3RoIC0gMSkpIHsKICAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBkZWxldGUg
cHJvcGVydHkuIikpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKQEAgLTc0Myw4ICs3MDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAgICAgaWYgKCF0aGlzT2JqKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMs
IHRoaXNPYmopOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIG4g
PSAwOyBuIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyBuKyspIHsKICAgICAgICAgLy8gQ2hlY2sg
Zm9yIGludGVnZXIgb3ZlcmZsb3c7IHdoZXJlIHNhZmUgd2UgY2FuIGRvIGEgZmFzdCBwdXQgYnkg
aW5kZXguCkBAIC03NTUsOCArNzIwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRgogICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50NjRfdD4obGVuZ3Ro
KSArIHN0YXRpY19jYXN0PGludDY0X3Q+KG4pKS50b1dURlN0cmluZyhleGVjKSk7CiAgICAgICAg
ICAgICB0aGlzT2JqLT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iaiwgZXhlYywgcHJvcGVydHlO
YW1lLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChuKSwgc2xvdCk7CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KICAgICAKICAgICBKU1ZhbHVlIG5l
d0xlbmd0aChzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8aW50NjRf
dD4oZXhlYy0+YXJndW1lbnRDb3VudCgpKSk7CkBAIC03NzQsOCArNzM4LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhl
YywgdGhpc09iamVjdCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIHN3aXRjaCAodGhp
c09iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgpAQCAtODE1LDI5ICs3NzgsMjQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogICAgIGZvciAodW5zaWduZWQgbG93ZXIgPSAwOyBsb3dlciA8IG1p
ZGRsZTsgbG93ZXIrKykgewogICAgICAgICB1bnNpZ25lZCB1cHBlciA9IGxlbmd0aCAtIGxvd2Vy
IC0gMTsKICAgICAgICAgYm9vbCBsb3dlckV4aXN0cyA9IHRoaXNPYmplY3QtPmhhc1Byb3BlcnR5
KGV4ZWMsIGxvd2VyKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAg
ICBKU1ZhbHVlIGxvd2VyVmFsdWU7CiAgICAgICAgIGlmIChsb3dlckV4aXN0cykgewogICAgICAg
ICAgICAgbG93ZXJWYWx1ZSA9IHRoaXNPYmplY3QtPmdldChleGVjLCBsb3dlcik7Ci0gICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGJvb2wgdXBwZXJFeGlzdHMgPSB0aGlzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCB1cHBl
cik7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgSlNWYWx1ZSB1
cHBlclZhbHVlOwogICAgICAgICBpZiAodXBwZXJFeGlzdHMpIHsKICAgICAgICAgICAgIHVwcGVy
VmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgdXBwZXIpOwotICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAodXBw
ZXJFeGlzdHMpIHsKICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZXhl
YywgbG93ZXIsIHVwcGVyVmFsdWUsIHRydWUpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgfSBlbHNlIGlmICghdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgbG93ZXIpKSB7
CiAgICAgICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBkZWxldGUg
cHJvcGVydHkuIikpOwpAQCAtODQ2LDggKzgwNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0YKIAogICAgICAgICBpZiAobG93ZXJFeGlzdHMpIHsKICAgICAgICAg
ICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgdXBwZXIsIGxvd2VyVmFsdWUs
IHRydWUpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAg
ICAgfSBlbHNlIGlmICghdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0
eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgdXBwZXIpKSB7CiAgICAgICAgICAgICBpZiAoIXNj
b3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNj
b3BlLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIikpOwpAQCAtODY1
LDggKzgyMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAg
ICBpZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChsZW5ndGgg
PT0gMCkgewpAQCAtODc1LDggKzgzMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHQgPSB0aGlzT2JqLT5nZXRJ
bmRleChleGVjLCAwKTsKICAgICAgICAgc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0
PihleGVjLCB0aGlzT2JqLCAwLCAxLCAwLCBsZW5ndGgpOwotICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgICAgIHB1dExlbmd0aChleGVjLCB0aGlzT2JqLCBqc051bWJlcihs
ZW5ndGggLSAxKSk7CiAgICAgfQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
QEAgLTg5MSw4ICs4NDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GCiAgICAgaWYgKCF0aGlzT2JqKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmop
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICB1bnNpZ25lZCBiZWdpbiA9IGFyZ3VtZW50
Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgbGVuZ3RoKTsKICAgICB1bnNpZ25l
ZCBlbmQgPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIGxlbmd0
aCwgbGVuZ3RoKTsKQEAgLTkxMiwxNSArODY2LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgcmVzdWx0ID0gc3BlY2llc1Jlc3VsdC5zZWNvbmQ7
CiAgICAgZWxzZSB7CiAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywg
bnVsbHB0ciwgZW5kIC0gYmVnaW4pOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgfQogCiAgICAgdW5zaWduZWQgbiA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBrID0gYmVn
aW47IGsgPCBlbmQ7IGsrKywgbisrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGdldFByb3BlcnR5
KGV4ZWMsIHRoaXNPYmosIGspOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgICAgIGlmICh2KQogICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBu
LCB2KTsKICAgICB9CkBAIC05MzksOCArODkxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChl
eGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgaWYgKCFleGVjLT5h
cmd1bWVudENvdW50KCkpIHsKICAgICAgICAgc3RkOjpwYWlyPFNwZWNpZXNDb25zdHJ1Y3RSZXN1
bHQsIEpTT2JqZWN0Kj4gc3BlY2llc1Jlc3VsdCA9IHNwZWNpZXNDb25zdHJ1Y3RBcnJheShleGVj
LCB0aGlzT2JqLCAwKTsKQEAgLTk1Miw4ICs5MDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICByZXN1bHQgPSBzcGVjaWVzUmVzdWx0LnNl
Y29uZDsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0
eUFycmF5KGV4ZWMsIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBzZXRMZW5ndGgoZXhlYywgcmVzdWx0
LCAwKTsKQEAgLTk4OCwxMyArOTM4LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0g
MDsgayA8IGRlbGV0ZUNvdW50OyArK2spIHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBn
ZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrICsgYmVnaW4pOwotICAgICAgICAgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAg
aWYgKFVOTElLRUxZKCF2KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgcmVzdWx0LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGssIHYsIHRydWUpOwotICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSBKU0Fy
cmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdp
dGhVbmRlY2lkZWQpLCBkZWxldGVDb3VudCk7CkBAIC0xMDAzLDggKzk1MSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGRlbGV0ZUNvdW50OyArK2spIHsKICAgICAgICAg
ICAgICAgICBKU1ZhbHVlIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrICsgYmVnaW4p
OwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgcmVzdWx0LT5pbml0aWFsaXplSW5kZXgodm0s
IGssIHYpOwpAQCAtMTAxNSwxNyArOTYyLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0YKICAgICB1bnNpZ25lZCBhZGRpdGlvbmFsQXJncyA9IHN0ZDo6bWF4PGlu
dD4oZXhlYy0+YXJndW1lbnRDb3VudCgpIC0gMiwgMCk7CiAgICAgaWYgKGFkZGl0aW9uYWxBcmdz
IDwgZGVsZXRlQ291bnQpIHsKICAgICAgICAgc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNw
bGljZT4oZXhlYywgdGhpc09iaiwgYmVnaW4sIGRlbGV0ZUNvdW50LCBhZGRpdGlvbmFsQXJncywg
bGVuZ3RoKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0gZWxzZSBp
ZiAoYWRkaXRpb25hbEFyZ3MgPiBkZWxldGVDb3VudCkgewogICAgICAgICB1bnNoaWZ0PEpTQXJy
YXk6OlNoaWZ0Q291bnRGb3JTcGxpY2U+KGV4ZWMsIHRoaXNPYmosIGJlZ2luLCBkZWxldGVDb3Vu
dCwgYWRkaXRpb25hbEFyZ3MsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGFkZGl0aW9uYWxBcmdz
OyArK2spIHsKICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElubGluZShleGVjLCBrICsgYmVn
aW4sIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGsgKyAyKSwgdHJ1ZSk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB9CiAgICAgCiAgICAgc2V0TGVuZ3RoKGV4ZWMsIHRo
aXNPYmosIGxlbmd0aCAtIGRlbGV0ZUNvdW50ICsgYWRkaXRpb25hbEFyZ3MpOwpAQCAtMTA0Miwx
OSArOTg2LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAg
ICBpZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIHVuc2lnbmVkIG5yQXJncyA9IGV4ZWMtPmFyZ3VtZW50
Q291bnQoKTsKICAgICBpZiAobnJBcmdzKSB7CiAgICAgICAgIHVuc2hpZnQ8SlNBcnJheTo6U2hp
ZnRDb3VudEZvclNoaWZ0PihleGVjLCB0aGlzT2JqLCAwLCAwLCBuckFyZ3MsIGxlbmd0aCk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB9CiAgICAgZm9yICh1bnNpZ25l
ZCBrID0gMDsgayA8IG5yQXJnczsgKytrKSB7CiAgICAgICAgIHRoaXNPYmotPnB1dEJ5SW5kZXhJ
bmxpbmUoZXhlYywgaywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoayksIHRydWUpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNOdW1iZXIobGVuZ3RoICsgbnJBcmdzKTsKICAgICBwdXRMZW5ndGgoZXhlYywgdGhpc09iaiwg
cmVzdWx0KTsKQEAgLTEwNzEsMjEgKzEwMTIsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChl
eGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgdW5zaWduZWQgaW5k
ZXggPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIGxlbmd0aCk7
CiAgICAgSlNWYWx1ZSBzZWFyY2hFbGVtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgZm9y
ICg7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4KSB7CiAgICAgICAgIEpTVmFsdWUgZSA9IGdldFBy
b3BlcnR5KGV4ZWMsIHRoaXNPYmosIGluZGV4KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgICAgICBpZiAoIWUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
aWYgKEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIHNlYXJjaEVsZW1lbnQsIGUpKQogICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbmRleCkpOwotICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcigtMSkpOwpAQCAtMTEyMSwxNCArMTA1OSwxMiBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgZG8gewogICAgICAgICBSRUxFQVNFX0FT
U0VSVChpbmRleCA8IGxlbmd0aCk7CiAgICAgICAgIEpTVmFsdWUgZSA9IGdldFByb3BlcnR5KGV4
ZWMsIHRoaXNPYmosIGluZGV4KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgICAgICBpZiAoIWUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKEpTVmFs
dWU6OnN0cmljdEVxdWFsKGV4ZWMsIHNlYXJjaEVsZW1lbnQsIGUpKQogICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbmRleCkpOwotICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgfSB3aGlsZSAoaW5kZXgtLSk7CiAKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7CkBAIC0xMTQzLDE5ICsxMDc5LDE2IEBAIHN0YXRp
YyBib29sIG1vdmVFbGVtZW50cyhFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBzb3VyY2UtPnRyeUdldEluZGV4UXVpY2tseShpKTsKICAgICAgICAgICAgIGlmICh2
YWx1ZSkgewogICAgICAgICAgICAgICAgIHRhcmdldC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgdGFy
Z2V0T2Zmc2V0ICsgaSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc291cmNlTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBn
ZXRQcm9wZXJ0eShleGVjLCBzb3VyY2UsIGkpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgICAgICBpZiAo
dmFsdWUpIHsKICAgICAgICAgICAgICAgICB0YXJnZXQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIHRh
cmdldE9mZnNldCArIGksIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTIyOCw4ICsxMTYxLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvUAogICAgIEluZGV4aW5nVHlwZSB0eXBlID0gZmly
c3RBcnJheS0+bWVyZ2VJbmRleGluZ1R5cGVGb3JDb3B5aW5nKHNlY29uZFR5cGUpOwogICAgIGlm
ICh0eXBlID09IE5vbkFycmF5IHx8ICFmaXJzdEFycmF5LT5jYW5GYXN0Q29weSh2bSwgc2Vjb25k
QXJyYXkpIHx8IGZpcnN0QXJyYXlTaXplICsgc2Vjb25kQXJyYXlTaXplID49IE1JTl9TUEFSU0Vf
QVJSQVlfSU5ERVgpIHsKICAgICAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCBudWxscHRyLCBmaXJzdEFycmF5U2l6ZSArIHNlY29uZEFycmF5U2l6ZSk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgICAgIGlmICghbW92ZUVsZW1lbnRz
KGV4ZWMsIHZtLCByZXN1bHQsIDAsIGZpcnN0QXJyYXksIGZpcnN0QXJyYXlTaXplKQogICAgICAg
ICAgICAgfHwgIW1vdmVFbGVtZW50cyhleGVjLCB2bSwgcmVzdWx0LCBmaXJzdEFycmF5U2l6ZSwg
c2Vjb25kQXJyYXksIHNlY29uZEFycmF5U2l6ZSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIEpTVmFsdWUgYm9vbGVhbiA9IGpzQm9vbGVhbihleGVjLT5hcmd1bWVu
dCgwKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIFN0cnVjdHVyZSogYm9vbGVhblN0cnVjdHVyZSA9
IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5l
d1RhcmdldCgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmpl
Y3QoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
Qm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVhbk9iamVjdDo6Y3JlYXRlKHZtLCBib29sZWFuU3Ry
dWN0dXJlKTsKICAgICBvYmotPnNldEludGVybmFsVmFsdWUodm0sIGJvb2xlYW4pOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5
KQpAQCAtODcsOCArODcsNyBAQCBpbmxpbmUgYm9vbCBvcEluKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1CiAgICAgICAgIHJldHVybiBiYXNlT2JqLT5oYXNQcm9wZXJ0eShleGVjLCBpKTsKIAogICAg
IGF1dG8gcHJvcGVydHkgPSBwcm9wTmFtZS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChz
Y29wZS5leGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICByZXR1cm4gYmFzZU9iai0+aGFzUHJvcGVydHko
ZXhlYywgcHJvcGVydHkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5j
b20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDEzIEFwcGxlIEluYy4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTE5Myw4ICsxOTMsNyBAQCBKU0ludGVybmFsUHJvbWlzZSogbG9hZEFu
ZEV2YWx1YXRlTW9kdWxlCiAKICAgICAvLyBJbnNlcnQgdGhlIGdpdmVuIHNvdXJjZSBjb2RlIHRv
IHRoZSBNb2R1bGVMb2FkZXIgcmVnaXN0cnkgYXMgdGhlIGZldGNoZWQgcmVnaXN0cnkgZW50cnku
CiAgICAgZ2xvYmFsT2JqZWN0LT5tb2R1bGVMb2FkZXIoKS0+cHJvdmlkZShleGVjLCBrZXksIEpT
TW9kdWxlTG9hZGVyOjpTdGF0dXM6OkZldGNoLCBzb3VyY2UudmlldygpLnRvU3RyaW5nKCkpOwot
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiByZWpl
Y3RQcm9taXNlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgcmVqZWN0UHJvbWlzZShleGVjLCBnbG9iYWxPYmplY3QpKTsKIAogICAgIHJldHVybiBs
b2FkQW5kRXZhbHVhdGVNb2R1bGUobG9jaywgZXhlYywgZ2xvYmFsT2JqZWN0LCBrZXksIGpzVW5k
ZWZpbmVkKCksIGluaXRpYXRvcik7CiB9CkBAIC0yMzMsOCArMjMyLDcgQEAgSlNJbnRlcm5hbFBy
b21pc2UqIGxvYWRNb2R1bGUoRXhlY1N0YXRlKgogICAgIC8vIEluc2VydCB0aGUgZ2l2ZW4gc291
cmNlIGNvZGUgdG8gdGhlIE1vZHVsZUxvYWRlciByZWdpc3RyeSBhcyB0aGUgZmV0Y2hlZCByZWdp
c3RyeSBlbnRyeS4KICAgICAvLyBGSVhNRTogSW50cm9kdWNlIEpTU291cmNlQ29kZSBvYmplY3Qg
dG8gd3JhcCBhcm91bmQgdGhpcyBzb3VyY2UuCiAgICAgZ2xvYmFsT2JqZWN0LT5tb2R1bGVMb2Fk
ZXIoKS0+cHJvdmlkZShleGVjLCBrZXksIEpTTW9kdWxlTG9hZGVyOjpTdGF0dXM6OkZldGNoLCBz
b3VyY2UudmlldygpLnRvU3RyaW5nKCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiByZWplY3RQcm9taXNlKGV4ZWMsIGdsb2JhbE9iamVjdCk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgcmVqZWN0UHJvbWlzZShleGVjLCBnbG9i
YWxPYmplY3QpKTsKIAogICAgIHJldHVybiBsb2FkTW9kdWxlKGxvY2ssIGV4ZWMsIGdsb2JhbE9i
amVjdCwga2V5LCBqc1VuZGVmaW5lZCgpLCBpbml0aWF0b3IpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZU9iamVjdC5jcHAJKHJldmlzaW9uIDIw
NjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsOCArMjAzLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCiAgICAgYm9vbCBjb25kaXRpb24gPSBleGVjLT5hcmd1bWVudCgwKS50b0Jv
b2xlYW4oZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGlmIChjb25kaXRpb24p
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0yNDAs
OCArMjM5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAg
IH0KIAogICAgIGNvbnN0IFN0cmluZyYgdGl0bGUodmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRP
ck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKICAgICBjbGllbnQtPnByb2ZpbGUoZXhlYywgdGl0bGUpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0yNjIsOCArMjYwLDcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIH0KIAogICAgIGNvbnN0IFN0cmlu
ZyYgdGl0bGUodmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVj
LT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBjbGllbnQtPnBy
b2ZpbGVFbmQoZXhlYywgdGl0bGUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC0yODQsOCArMjgxLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29ucwogICAgIH0KIAogICAgIGNvbnN0IFN0cmluZyYgdGl0bGUodmFsdWVUb1N0
cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwot
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBjbGllbnQtPnRha2VIZWFwU25hcHNob3QoZXhl
YywgdGl0bGUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBA
IC0zMTEsOCArMzA3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
cwogICAgICAgICB0aXRsZSA9IEFTQ0lJTGl0ZXJhbCgiZGVmYXVsdCIpOwogICAgIGVsc2Ugewog
ICAgICAgICB0aXRsZSA9IHZhbHVlT3JEZWZhdWx0TGFiZWxTdHJpbmcoZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogCiAg
ICAgY2xpZW50LT50aW1lKGV4ZWMsIHRpdGxlKTsKQEAgLTMzMiw4ICszMjcsNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgIHRpdGxlID0gIEFTQ0lJ
TGl0ZXJhbCgiZGVmYXVsdCIpOwogICAgIGVsc2UgewogICAgICAgICB0aXRsZSA9IHZhbHVlT3JE
ZWZhdWx0TGFiZWxTdHJpbmcoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogCiAgICAgY2xpZW50LT50aW1lRW5kKGV4ZWMs
IHRpdGxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMTEsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwNC0yMDA4LCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE2OCw4ICsxNjgsNyBAQCBKU09iamVjdCog
Y29uc3RydWN0RGF0ZShFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIHZhbHVlID0gbWlsbGlzZWNv
bmRzRnJvbUNvbXBvbmVudHMoZXhlYywgYXJncywgV1RGOjpMb2NhbFRpbWUpOwogCiAgICAgU3Ry
dWN0dXJlKiBkYXRlU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NT
dHJ1Y3R1cmUoZXhlYywgbmV3VGFyZ2V0LCBnbG9iYWxPYmplY3QtPmRhdGVTdHJ1Y3R1cmUoKSk7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBy
ZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUodm0sIGRhdGVTdHJ1Y3R1cmUsIHZhbHVlKTsKIH0K
QEAgLTIwNiw4ICsyMDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQYXJz
ZShFCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgU3RyaW5nIGRhdGVTdHIgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRGF0ZSh2bSwgZGF0ZVN0cikpKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RhdGVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTUsOCArNjE1LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgSlNWYWx1ZSBo
aW50VmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBQcmVmZXJyZWRQcmlt
aXRpdmVUeXBlIHR5cGUgPSB0b1ByZWZlcnJlZFByaW1pdGl2ZVR5cGUoZXhlYywgaGludFZhbHVl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBpZiAodHlwZSA9PSBOb1ByZWZlcmVuY2UpCiAg
ICAgICAgIHR5cGUgPSBQcmVmZXJTdHJpbmc7CkBAIC0xMTI4LDE4ICsxMTI3LDE1IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlz
VmFsdWUoKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odGhpc1Zh
bHVlLnRvVGhpcyhleGVjLCBOb3RTdHJpY3RNb2RlKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAg
ICBKU1ZhbHVlIHRpbWVWYWx1ZSA9IG9iamVjdC0+dG9QcmltaXRpdmUoZXhlYywgUHJlZmVyTnVt
YmVyKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpZiAodGltZVZhbHVlLmlzTnVtYmVyKCkgJiYg
ISh0aW1lVmFsdWUuaXNJbnQzMigpIHx8IHN0ZDo6aXNmaW5pdGUodGltZVZhbHVlLmFzRG91Ymxl
KCkpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKICAgICBK
U1ZhbHVlIHRvSVNPVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50
b0lTT1N0cmluZyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsK
ICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHRvSVNPVmFsdWUsIGNhbGxEYXRh
KTsKQEAgLTExNDcsOCArMTE0Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgidG9JU09TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24iKSk7CiAKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgYXNPYmplY3QodG9JU09WYWx1ZSksIGNhbGxUeXBlLCBj
YWxsRGF0YSwgb2JqZWN0LCBleGVjLT5lbXB0eUxpc3QoKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgaWYgKHJlc3VsdC5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJ0b0lTT1N0cmluZyBkaWQgbm90IHJldHVybiBh
IHByaW1pdGl2ZSB2YWx1ZSIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcgogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG1lc3NhZ2UgPSBleGVj
LT5hcmd1bWVudENvdW50KCkgPyBleGVjLT5hcmd1bWVudCgwKSA6IGpzVW5kZWZpbmVkKCk7CiAg
ICAgU3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1
YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBhc0ludGVybmFsRnVuY3Rp
b24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0YW5j
ZTo6Y3JlYXRlKGV4ZWMsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdlLCBudWxscHRyLCBUeXBlTm90
aGluZywgZmFsc2UpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODUsOCArMTg1LDcgQEAgU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZFRvU3RyaW5nKAog
ICAgICAgICBuYW1lU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJFcnJvciIpOwogICAgIGVsc2Ugewog
ICAgICAgICBuYW1lU3RyaW5nID0gbmFtZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgU3Ry
aW5nKCkpOwogICAgIH0KIAogICAgIEpTVmFsdWUgbWVzc2FnZVZhbHVlOwpAQCAtMjAxLDggKzIw
MCw3IEBAIFN0cmluZyBFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWRUb1N0cmluZygKICAgICAgICAg
bWVzc2FnZVN0cmluZyA9IFN0cmluZygpOwogICAgIGVsc2UgewogICAgICAgICBtZXNzYWdlU3Ry
aW5nID0gbWVzc2FnZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgU3RyaW5nKCkpOwogICAg
IH0KIAogICAgIGlmICghbmFtZVN0cmluZy5sZW5ndGgoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNjMz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODUsOCArODUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGVycm9yUHJvdG9GCiAKICAgICAvLyAzLiBMZXQgbmFtZSBiZSB0aGUgcmVzdWx0IG9mIGNh
bGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudCAibmFt
ZSIuCiAgICAgSlNWYWx1ZSBuYW1lID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5uYW1lKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgLy8gNC4gSWYgbmFt
ZSBpcyB1bmRlZmluZWQsIHRoZW4gbGV0IG5hbWUgYmUgIkVycm9yIjsgZWxzZSBsZXQgbmFtZSBi
ZSBUb1N0cmluZyhuYW1lKS4KICAgICBTdHJpbmcgbmFtZVN0cmluZzsKQEAgLTk0LDE0ICs5Mywx
MiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GCiAgICAgICAgIG5h
bWVTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkVycm9yIik7CiAgICAgZWxzZSB7CiAgICAgICAgIG5h
bWVTdHJpbmcgPSBuYW1lLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KIAogICAgIC8vIDUuIExldCBtc2cgYmUgdGhl
IHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGgg
YXJndW1lbnQgIm1lc3NhZ2UiLgogICAgIEpTVmFsdWUgbWVzc2FnZSA9IHRoaXNPYmotPmdldChl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubWVzc2FnZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKIAogICAgIC8vIChzaWMpCiAgICAgLy8gNi4gSWYgbXNnIGlzIHVuZGVmaW5lZCwgdGhlbiBs
ZXQgbXNnIGJlIHRoZSBlbXB0eSBTdHJpbmc7IGVsc2UgbGV0IG1zZyBiZSBUb1N0cmluZyhtc2cp
LgpAQCAtMTExLDggKzEwOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQ
cm90b0YKICAgICAgICAgbWVzc2FnZVN0cmluZyA9IFN0cmluZygpOwogICAgIGVsc2UgewogICAg
ICAgICBtZXNzYWdlU3RyaW5nID0gbWVzc2FnZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB9CiAKICAgICAvLyA4LiBJ
ZiBuYW1lIGlzIHRoZSBlbXB0eSBTdHJpbmcsIHJldHVybiBtc2cuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25TY29wZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNjb3BlLmgJKHJldmlzaW9uIDIwNjMz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNjb3BlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDEyIEBAIHByb3RlY3RlZDoKIH07CiAgICAgCiAjZW5k
aWYgLy8gRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCi0gICAgCisKKyNkZWZp
bmUgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZV9fLCB2YWx1ZV9fKSBkbyB7IFwKKyAgICAgICAg
aWYgKFVOTElLRUxZKChzY29wZV9fKS5leGNlcHRpb24oKSkpIFwKKyAgICAgICAgICAgIHJldHVy
biB2YWx1ZV9fOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gRXhjZXB0aW9uU2NvcGVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIw
NjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsOCArMTI2LDcgQEAgSlNPYmplY3QqIGNvbnN0
cnVjdEZ1bmN0aW9uU2tpcHBpbmdFdmFsRQogICAgIH0KIAogICAgIFN0cnVjdHVyZSogc3ViY2xh
c3NTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShl
eGVjLCBuZXdUYXJnZXQsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICByZXR1cm4g
SlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBmdW5jdGlvbiwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29w
ZSgpLCBzdWJjbGFzc1N0cnVjdHVyZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9u
IDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVu
dHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjI4LDggKzIyOCw3IEBAIHZvaWQgR2VuZXJpY0Fy
Z3VtZW50czxUeXBlPjo6Y29weVRvQXJndW0KICAgICAgICAgICAgIGV4ZWMtPnIoZmlyc3RFbGVt
ZW50RGVzdCArIGkpID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGV4ZWMtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkp
ID0gZ2V0KGV4ZWMsIGkgKyBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICB9CiAgICAgfQogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCShy
ZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJT
ZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw4ICs3Nyw3IEBAIEpTVmFsdWUgY2FsbEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgLy8gRklYTUU6IFNvbWUgY2FsbGVycyBtYXkgaW52b2tlIGdldCgp
IHdpdGhvdXQgY2hlY2tpbmcgZm9yIGFuIGV4Y2VwdGlvbiBmaXJzdC4KICAgICAvLyBXZSB3b3Jr
IGFyb3VuZCB0aGF0IGJ5IGNoZWNraW5nIGhlcmUuCi0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIHNjb3BlLmV4Y2VwdGlvbigpLT52YWx1ZSgpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpLT52YWx1ZSgp
KTsKIAogICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBqc0Nhc3Q8R2V0dGVyU2V0dGVyKj4oZ2V0dGVy
U2V0dGVyKS0+Z2V0dGVyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDggKzI0NSw3
IEBAIEFMV0FZU19JTkxJTkUgdWludDMyX3QganNNYXBIYXNoKEV4ZWNTdGEKICAgICBpZiAodmFs
dWUuaXNTdHJpbmcoKSkgewogICAgICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcodmFs
dWUpOwogICAgICAgICBjb25zdCBTdHJpbmcmIHd0ZlN0cmluZyA9IHN0cmluZy0+dmFsdWUoZXhl
Yyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAg
ICByZXR1cm4gVUlOVF9NQVg7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFVJ
TlRfTUFYKTsKICAgICAgICAgcmV0dXJuIHd0ZlN0cmluZy5pbXBsKCktPmhhc2goKTsKICAgICB9
CiAKQEAgLTMzNyw4ICszMzYsNyBAQCBwdWJsaWM6CiAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKIAogICAgICAgICBtYWtlQW5kU2V0TmV3QnVmZmVyKGV4ZWMsIHZtKTsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgICAgICBt
X2hlYWQuc2V0KHZtLCB0aGlzLCBIYXNoTWFwQnVja2V0VHlwZTo6Y3JlYXRlKHZtKSk7CiAgICAg
ICAgIG1fdGFpbC5zZXQodm0sIHRoaXMsIEhhc2hNYXBCdWNrZXRUeXBlOjpjcmVhdGUodm0pKTsK
QEAgLTM3Niw4ICszNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAga2V5ID0gbm9ybWFsaXplTWFwS2V5KGtleSk7CiAg
ICAgICAgIHVpbnQzMl90IGhhc2ggPSBqc01hcEhhc2goZXhlYywgdm0sIGtleSk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAg
ICAgIHJldHVybiBmaW5kQnVja2V0KGV4ZWMsIGtleSwgaGFzaCk7CiAgICAgfQogCkBAIC00MDgs
OCArNDA1LDcgQEAgcHVibGljOgogCiAgICAgICAgIGNvbnN0IHVpbnQzMl90IG1hc2sgPSBtX2Nh
cGFjaXR5IC0gMTsKICAgICAgICAgdWludDMyX3QgaW5kZXggPSBqc01hcEhhc2goZXhlYywgdm0s
IGtleSkgJiBtYXNrOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOwogICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZlciA9IHRoaXMtPmJ1ZmZl
cigpOwogICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0gYnVmZmVyW2luZGV4XTsK
ICAgICAgICAgd2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkpIHsKQEAgLTU3MCw4ICs1NjYsNyBAQCBw
cml2YXRlOgogCiAgICAgICAgIGlmIChtX2NhcGFjaXR5ICE9IG9sZENhcGFjaXR5KSB7CiAgICAg
ICAgICAgICBtYWtlQW5kU2V0TmV3QnVmZmVyKGV4ZWMsIHZtKTsKLSAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIG1fYnVmZmVyLmdldCgpLT5yZXNldChtX2NhcGFjaXR5KTsKICAg
ICAgICAgICAgIGFzc2VydEJ1ZmZlcklzRW1wdHkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uT2JqZWN0LmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC04Nyw4ICs4Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgaW5zcGVjdG9ySW4K
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0
YXJnZXQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJpbmcgdmFsdWUgPSB0YXJnZXQudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgZGF0
YUxvZyh2YWx1ZSwgIlxuIik7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVu
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDcsIDIwMDgsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNy0y
MDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0xMTMsMTQgKzExMywxMiBAQCBTdHJ1Y3R1cmUqIEludGVybmFsRnVuY3Rpb246
OmNyZWF0ZVN1YmNsCiAKICAgICAgICAgICAgIC8vIE5vdGUsIFJlZmxlY3QuY29uc3RydWN0IG1p
Z2h0IGNhdXNlIHRoZSBwcm9maWxlIHRvIGNodXJuIGJ1dCB3ZSBkb24ndCBjYXJlLgogICAgICAg
ICAgICAgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSA9IG5ld1RhcmdldC5nZXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgICAgICBp
ZiAoSlNPYmplY3QqIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihwcm90b3R5
cGVWYWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldEZ1bmN0aW9uLT5yYXJlRGF0
YSh2bSktPmNyZWF0ZUludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uU3RydWN0dXJlRnJvbUJhc2Uo
dm0sIHByb3RvdHlwZSwgYmFzZUNsYXNzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IEpTVmFsdWUgcHJvdG90eXBlVmFsdWUgPSBuZXdUYXJnZXQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICAgICAgaWYgKEpT
T2JqZWN0KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4ocHJvdG90eXBlVmFs
dWUpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBvbmx5IGhhcHBlbnMgaWYgc29tZW9uZSBS
ZWZsZWN0LmNvbnN0cnVjdHMgb3VyIGJ1aWx0aW4gY29uc3RydWN0b3Igd2l0aCBhbm90aGVyIGJ1
aWx0aW4gY29uc3RydWN0b3IgYXMgdGhlIG5ldy50YXJnZXQuCiAgICAgICAgICAgICAgICAgLy8g
VGh1cywgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgY29zdCBvZiBsb29raW5nIHVwIHRoZSBzdHJ1
Y3R1cmUgZnJvbSBvdXIgaGFzaCB0YWJsZSBldmVyeSB0aW1lLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCShyZXZpc2lvbiAyMDYzMzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzIsOCArMTcyLDcgQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxp
emVDb2xsYXRvcihFeAogICAgIC8vIDMuIExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNh
bGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAgYXV0byByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fu
b25pY2FsaXplTG9jYWxlTGlzdChzdGF0ZSwgbG9jYWxlcyk7CiAgICAgLy8gNC4gUmV0dXJuSWZB
YnJ1cHQocmVxdWVzdGVkTG9jYWxlcykuCi0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAKICAgICAvLyA1LiBJZiBvcHRpb25zIGlzIHVuZGVmaW5lZCwgdGhlbgogICAgIEpT
T2JqZWN0KiBvcHRpb25zOwpAQCAtMTg0LDE1ICsxODMsMTMgQEAgdm9pZCBJbnRsQ29sbGF0b3I6
OmluaXRpYWxpemVDb2xsYXRvcihFeAogICAgICAgICAvLyBhLiBMZXQgb3B0aW9ucyBiZSBUb09i
amVjdChvcHRpb25zKS4KICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnNWYWx1ZS50b09iamVjdCgm
c3RhdGUpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChvcHRpb25zKS4KLSAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9CiAKICAgICAv
LyA3LiBMZXQgdSBiZSBHZXRPcHRpb24ob3B0aW9ucywgInVzYWdlIiwgInN0cmluZyIsIMKrInNv
cnQiLCAic2VhcmNoIsK7LCAic29ydCIpLgogICAgIFN0cmluZyB1c2FnZVN0cmluZyA9IGludGxT
dHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnVzYWdlLCB7ICJz
b3J0IiwgInNlYXJjaCIgfSwgInVzYWdlIG11c3QgYmUgZWl0aGVyIFwic29ydFwiIG9yIFwic2Vh
cmNoXCIiLCAic29ydCIpOwogICAgIC8vIDguIFJldHVybklmQWJydXB0KHUpLgotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIC8vIDkuIFNldCBjb2xsYXRvci5bW3Vz
YWdlXV0gdG8gdS4KICAgICBpZiAodXNhZ2VTdHJpbmcgPT0gInNvcnQiKQogICAgICAgICBtX3Vz
YWdlID0gVXNhZ2U6OlNvcnQ7CkBAIC0yMTcsOCArMjE0LDcgQEAgdm9pZCBJbnRsQ29sbGF0b3I6
OmluaXRpYWxpemVDb2xsYXRvcihFeAogICAgIC8vIDEzLiBMZXQgbWF0Y2hlciBiZSBHZXRPcHRp
b24ob3B0aW9ucywgImxvY2FsZU1hdGNoZXIiLCAic3RyaW5nIiwgwqsibG9va3VwIiwgImJlc3Qg
Zml0IsK7LCAiYmVzdCBmaXQiKS4KICAgICBTdHJpbmcgbWF0Y2hlciA9IGludGxTdHJpbmdPcHRp
b24oc3RhdGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgImxv
b2t1cCIsICJiZXN0IGZpdCIgfSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29r
dXBcIiBvciBcImJlc3QgZml0XCIiLCAiYmVzdCBmaXQiKTsKICAgICAvLyAxNC4gUmV0dXJuSWZB
YnJ1cHQobWF0Y2hlcikuCi0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAg
ICAgLy8gMTUuIFNldCBvcHQuW1tsb2NhbGVNYXRjaGVyXV0gdG8gbWF0Y2hlci4KICAgICBvcHQu
YWRkKEFTQ0lJTGl0ZXJhbCgibG9jYWxlTWF0Y2hlciIpLCBtYXRjaGVyKTsKIApAQCAtMjM3LDE2
ICsyMzMsMTQgQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihFeAogICAg
ICAgICBTdHJpbmcgbnVtZXJpY1N0cmluZzsKICAgICAgICAgYm9vbCB1c2VzRmFsbGJhY2s7CiAg
ICAgICAgIGJvb2wgbnVtZXJpYyA9IGludGxCb29sZWFuT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2
bS5wcm9wZXJ0eU5hbWVzLT5udW1lcmljLCB1c2VzRmFsbGJhY2spOwotICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICBpZiAoIXVzZXNGYWxs
YmFjaykKICAgICAgICAgICAgIG51bWVyaWNTdHJpbmcgPSBBU0NJSUxpdGVyYWwobnVtZXJpYyA/
ICJ0cnVlIiA6ICJmYWxzZSIpOwogICAgICAgICBvcHQuYWRkKEFTQ0lJTGl0ZXJhbCgia24iKSwg
bnVtZXJpY1N0cmluZyk7CiAgICAgfQogICAgIHsKICAgICAgICAgU3RyaW5nIGNhc2VGaXJzdCA9
IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmNhc2VG
aXJzdCwgeyAidXBwZXIiLCAibG93ZXIiLCAiZmFsc2UiIH0sICJjYXNlRmlyc3QgbXVzdCBiZSBl
aXRoZXIgXCJ1cHBlclwiLCBcImxvd2VyXCIsIG9yIFwiZmFsc2VcIiIsIG51bGxwdHIpOwotICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICBv
cHQuYWRkKEFTQ0lJTGl0ZXJhbCgia2YiKSwgY2FzZUZpcnN0KTsKICAgICB9CiAKQEAgLTI4Niw4
ICsyODAsNyBAQCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEV4CiAgICAg
Ly8gMjQuIExldCBzIGJlIEdldE9wdGlvbihvcHRpb25zLCAic2Vuc2l0aXZpdHkiLCAic3RyaW5n
IiwgwqsiYmFzZSIsICJhY2NlbnQiLCAiY2FzZSIsICJ2YXJpYW50IsK7LCB1bmRlZmluZWQpLgog
ICAgIFN0cmluZyBzZW5zaXRpdml0eVN0cmluZyA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9w
dGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnNlbnNpdGl2aXR5LCB7ICJiYXNlIiwgImFjY2VudCIs
ICJjYXNlIiwgInZhcmlhbnQiIH0sICJzZW5zaXRpdml0eSBtdXN0IGJlIGVpdGhlciBcImJhc2Vc
IiwgXCJhY2NlbnRcIiwgXCJjYXNlXCIsIG9yIFwidmFyaWFudFwiIiwgbnVsbHB0cik7CiAgICAg
Ly8gMjUuIFJldHVybklmQWJydXB0KHMpLgotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOwogICAgIC8vIDI2LiBJZiBzIGlzIHVuZGVmaW5lZCwgdGhlbgogICAgIC8vIGEuIElm
IHUgaXMgInNvcnQiLCB0aGVuIGxldCBzIGJlICJ2YXJpYW50Ii4KICAgICAvLyBiLiBFbHNlCkBA
IC0zMTEsOCArMzA0LDcgQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihF
eAogICAgIGlmICh1c2VzRmFsbGJhY2spCiAgICAgICAgIGlnbm9yZVB1bmN0dWF0aW9uID0gZmFs
c2U7CiAgICAgLy8gMjkuIFJldHVybklmQWJydXB0KGlwKS4KLSAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKICAgICAvLyAzMC4gU2V0IGNvbGxhdG9yLltbaWdub3JlUHVuY3R1
YXRpb25dXSB0byBpcC4KICAgICBtX2lnbm9yZVB1bmN0dWF0aW9uID0gaWdub3JlUHVuY3R1YXRp
b247CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5k
eSBWYW5XYWdvbmVyICh0aGV0YWxlY3JhZnRlckBnbWFpbC5jb20pCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgU3Vrb2xzYWsgU2Frc2h1d29uZyAoc3Vrb2xzYWtAZ21haWwuY29tKQorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsOCArOTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgLy8gMi4gTGV0IGNvbGxhdG9yIGJlIE9yZGluYXJ5
Q3JlYXRlRnJvbUNvbnN0cnVjdG9yKG5ld1RhcmdldCwgJUNvbGxhdG9yUHJvdG90eXBlJSkuCiAg
ICAgLy8gMy4gUmV0dXJuSWZBYnJ1cHQoY29sbGF0b3IpLgogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoc3RhdGUsIHN0
YXRlLT5uZXdUYXJnZXQoKSwganNDYXN0PEludGxDb2xsYXRvckNvbnN0cnVjdG9yKj4oc3RhdGUt
PmNhbGxlZSgpKS0+Y29sbGF0b3JTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBJbnRsQ29sbGF0b3IqIGNvbGxhdG9yID0gSW50bENvbGxhdG9yOjpjcmVhdGUodm0sIHN0
cnVjdHVyZSk7CiAgICAgQVNTRVJUKGNvbGxhdG9yKTsKIApAQCAtMTQ0LDggKzE0NCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG8KICAgICBWZWN0b3I8U3RyaW5n
PiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdCgqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSk7CiAKICAgICAvLyAyLiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2Nh
bGVzKS4KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgLy8gMy4gUmV0dXJuIFN1cHBvcnRl
ZExvY2FsZXMoJUNvbGxhdG9yJS5bW2F2YWlsYWJsZUxvY2FsZXNdXSwgcmVxdWVzdGVkTG9jYWxl
cywgb3B0aW9ucykuCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5j
YWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIw
NjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvclByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDE0ICs5MCwxMiBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsCiAgICAgLy8gNS4gTGV0IFggYmUgVG9TdHJpbmco
eCkuCiAgICAgSlNTdHJpbmcqIHggPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUp
OwogICAgIC8vIDYuIFJldHVybklmQWJydXB0KFgpLgotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAK
ICAgICAvLyA3LiBMZXQgWSBiZSBUb1N0cmluZyh5KS4KICAgICBKU1N0cmluZyogeSA9IHN0YXRl
LT5hcmd1bWVudCgxKS50b1N0cmluZyhzdGF0ZSk7CiAgICAgLy8gOC4gUmV0dXJuSWZBYnJ1cHQo
WSkuCi0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIC8vIDkuIFJldHVybiBDb21wYXJlU3Ry
aW5ncyhjb2xsYXRvciwgWCwgWSkuCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb2xsYXRv
ci0+Y29tcGFyZVN0cmluZ3MoKnN0YXRlLCB4LT52aWV3KHN0YXRlKS5nZXQoKSwgeS0+dmlldyhz
dGF0ZSkuZ2V0KCkpKTsKQEAgLTEyNCw4ICsxMjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEludGxDb2xsYXRvCiAKICAgICAgICAgLy8gYy4gTGV0IGJjIGJlIEJvdW5kRnVuY3Rp
b25DcmVhdGUoRiwgwqt0aGlzIHZhbHVlwrspLgogICAgICAgICBib3VuZENvbXBhcmUgPSBKU0Jv
dW5kRnVuY3Rpb246OmNyZWF0ZSh2bSwgc3RhdGUsIGdsb2JhbE9iamVjdCwgdGFyZ2V0T2JqZWN0
LCBjb2xsYXRvciwgbnVsbHB0ciwgMiwgQVNDSUlMaXRlcmFsKCJjb21wYXJlIikpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgLy8gZC4gU2V0IGNvbGxhdG9yLltbYm91
bmRDb21wYXJlXV0gdG8gYmMuCiAgICAgICAgIGNvbGxhdG9yLT5zZXRCb3VuZENvbXBhcmUodm0s
IGJvdW5kQ29tcGFyZSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjUsOCArMjI1LDcgQEAgc3RhdGljIEpTT2JqZWN0KiB0b0RhdGVU
aW1lT3B0aW9uc0FueURhdAogICAgICAgICBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
JmV4ZWMsIGV4ZWMubGV4aWNhbEdsb2JhbE9iamVjdCgpLT5udWxsUHJvdG90eXBlT2JqZWN0U3Ry
dWN0dXJlKCkpOwogICAgIGVsc2UgewogICAgICAgICBKU09iamVjdCogb3JpZ2luYWxUb09iamVj
dCA9IG9yaWdpbmFsT3B0aW9ucy50b09iamVjdCgmZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIG9wdGlvbnMg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmZXhlYywgb3JpZ2luYWxUb09iamVjdCk7CiAgICAgfQog
CkBAIC0yNDIsMjYgKzI0MSwyMiBAQCBzdGF0aWMgSlNPYmplY3QqIHRvRGF0ZVRpbWVPcHRpb25z
QW55RGF0CiAgICAgLy8gaWlpLiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCiAgICAgLy8gaXYuIElm
IHZhbHVlIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4gbGV0IG5lZWREZWZhdWx0cyBiZSBmYWxzZS4K
ICAgICBKU1ZhbHVlIHdlZWtkYXkgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFt
ZXMtPndlZWtkYXkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwogICAgIGlmICghd2Vla2RheS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBuZWVkRGVmYXVs
dHMgPSBmYWxzZTsKIAogICAgIEpTVmFsdWUgeWVhciA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0u
cHJvcGVydHlOYW1lcy0+eWVhcik7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CiAgICAgaWYgKCF5ZWFyLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWRE
ZWZhdWx0cyA9IGZhbHNlOwogCiAgICAgSlNWYWx1ZSBtb250aCA9IG9wdGlvbnMtPmdldCgmZXhl
Yywgdm0ucHJvcGVydHlOYW1lcy0+bW9udGgpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOwogICAgIGlmICghbW9udGguaXNVbmRlZmluZWQoKSkKICAgICAg
ICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CiAKICAgICBKU1ZhbHVlIGRheSA9IG9wdGlvbnMtPmdl
dCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+ZGF5KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBpZiAoIWRheS5pc1VuZGVmaW5lZCgpKQogICAg
ICAgICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsKIApAQCAtMjc0LDIwICsyNjksMTcgQEAgc3RhdGlj
IEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0aW9uc0FueURhdAogICAgIC8vIGlpaS4gUmV0dXJuSWZB
YnJ1cHQodmFsdWUpLgogICAgIC8vIGl2LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVu
IGxldCBuZWVkRGVmYXVsdHMgYmUgZmFsc2UuCiAgICAgSlNWYWx1ZSBob3VyID0gb3B0aW9ucy0+
Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5ob3VyKTsKLSAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBpZiAoIWhvdXIuaXNVbmRlZmluZWQoKSkK
ICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CiAKICAgICBKU1ZhbHVlIG1pbnV0ZSA9IG9w
dGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bWludXRlKTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBpZiAoIW1pbnV0ZS5pc1Vu
ZGVmaW5lZCgpKQogICAgICAgICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsKIAogICAgIEpTVmFsdWUg
c2Vjb25kID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5zZWNvbmQpOwot
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIGlmICgh
c2Vjb25kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWREZWZhdWx0cyA9IGZhbHNlOwogCkBA
IC0zMDAsMTYgKzI5MiwxMyBAQCBzdGF0aWMgSlNPYmplY3QqIHRvRGF0ZVRpbWVPcHRpb25zQW55
RGF0CiAgICAgICAgIEpTU3RyaW5nKiBudW1lcmljID0ganNOb250cml2aWFsU3RyaW5nKCZleGVj
LCBBU0NJSUxpdGVyYWwoIm51bWVyaWMiKSk7CiAKICAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT55ZWFyLCBudW1lcmljKTsKLSAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgICAgICBvcHRp
b25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm1vbnRoLCBudW1lcmljKTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsK
IAogICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmRheSwg
bnVtZXJpYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgLy8gOC4gSWYgbmVlZERlZmF1bHRzIGlzIHRydWUg
YW5kIGRlZmF1bHRzIGlzIGVpdGhlciAidGltZSIgb3IgImFsbCIsIHRoZW4KQEAgLTQyOSwxNCAr
NDE4LDEyIEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICAv
LyAzLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2Fs
ZXMpLgogICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVM
b2NhbGVMaXN0KGV4ZWMsIGxvY2FsZXMpOwogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHJlcXVl
c3RlZExvY2FsZXMpLAotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAg
ICAgLy8gNS4gTGV0IG9wdGlvbnMgYmUgVG9EYXRlVGltZU9wdGlvbnMob3B0aW9ucywgImFueSIs
ICJkYXRlIikuCiAgICAgSlNPYmplY3QqIG9wdGlvbnMgPSB0b0RhdGVUaW1lT3B0aW9uc0FueURh
dGUoZXhlYywgb3JpZ2luYWxPcHRpb25zKTsKICAgICAvLyA2LiBSZXR1cm5JZkFicnVwdChvcHRp
b25zKS4KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIC8vIDcu
IExldCBvcHQgYmUgYSBuZXcgUmVjb3JkLgogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGxv
Y2FsZU9wdDsKQEAgLTQ0NCw4ICs0MzEsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5p
dGlhbGl6ZURhdGVUCiAgICAgLy8gOC4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMs
ICJsb2NhbGVNYXRjaGVyIiwgInN0cmluZyIsIMKrImxvb2t1cCIsICJiZXN0IGZpdCLCuywgImJl
c3QgZml0IikuCiAgICAgU3RyaW5nIGxvY2FsZU1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKGV4
ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgImxvb2t1cCIs
ICJiZXN0IGZpdCIgfSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBv
ciBcImJlc3QgZml0XCIiLCAiYmVzdCBmaXQiKTsKICAgICAvLyA5LiBSZXR1cm5JZkFicnVwdCht
YXRjaGVyKS4KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAvLyAx
MC4gU2V0IG9wdC5bW2xvY2FsZU1hdGNoZXJdXSB0byBtYXRjaGVyLgogICAgIGxvY2FsZU9wdC5h
ZGQodm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlci5zdHJpbmcoKSwgbG9jYWxlTWF0Y2hl
cik7CiAKQEAgLTQ3Nyw4ICs0NjMsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlh
bGl6ZURhdGVUCiAgICAgLy8gMTcuIExldCB0eiBiZSBHZXQob3B0aW9ucywgInRpbWVab25lIiku
CiAgICAgSlNWYWx1ZSB0elZhbHVlID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5h
bWVzLT50aW1lWm9uZSk7CiAgICAgLy8gMTguIFJldHVybklmQWJydXB0KHR6KS4KLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIC8vIDE5LiBJZiB0eiBpcyBub3Qg
dW5kZWZpbmVkLCB0aGVuCiAgICAgU3RyaW5nIHR6OwpAQCAtNDg2LDggKzQ3MSw3IEBAIHZvaWQg
SW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICAgICAgLy8gYS4gTGV0IHR6
IGJlIFRvU3RyaW5nKHR6KS4KICAgICAgICAgU3RyaW5nIG9yaWdpbmFsVHogPSB0elZhbHVlLnRv
V1RGU3RyaW5nKCZleGVjKTsKICAgICAgICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQodHopLgotICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICAv
LyBjLiBJZiB0aGUgcmVzdWx0IG9mIElzVmFsaWRUaW1lWm9uZU5hbWUodHopIGlzIGZhbHNlLCB0
aGVuIGkuIFRocm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCiAgICAgICAgIC8vIGQuIExldCB0
eiBiZSBDYW5vbmljYWxpemVUaW1lWm9uZU5hbWUodHopLgogICAgICAgICB0eiA9IGNhbm9uaWNh
bGl6ZVRpbWVab25lTmFtZShvcmlnaW5hbFR6KTsKQEAgLTUxOSw4ICs1MDMsNyBAQCB2b2lkIElu
dGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgYXV0byBzaG9ydExvbmcgPSB7
ICJzaG9ydCIsICJsb25nIiB9OwogCiAgICAgU3RyaW5nIHdlZWtkYXkgPSBpbnRsU3RyaW5nT3B0
aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPndlZWtkYXksIG5hcnJvd1Nob3J0
TG9uZywgIndlZWtkYXkgbXVzdCBiZSBcIm5hcnJvd1wiLCBcInNob3J0XCIsIG9yIFwibG9uZ1wi
IiwgbnVsbHB0cik7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAg
aWYgKCF3ZWVrZGF5LmlzTnVsbCgpKSB7CiAgICAgICAgIGlmICh3ZWVrZGF5ID09ICJuYXJyb3ci
KQogICAgICAgICAgICAgc2tlbGV0b25CdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVFRUVFIik7CkBA
IC01MzEsOCArNTE0LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRl
VAogICAgIH0KIAogICAgIFN0cmluZyBlcmEgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlv
bnMsIHZtLnByb3BlcnR5TmFtZXMtPmVyYSwgbmFycm93U2hvcnRMb25nLCAiZXJhIG11c3QgYmUg
XCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBvciBcImxvbmdcIiIsIG51bGxwdHIpOwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGlmICghZXJhLmlzTnVsbCgpKSB7CiAg
ICAgICAgIGlmIChlcmEgPT0gIm5hcnJvdyIpCiAgICAgICAgICAgICBza2VsZXRvbkJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiR0dHR0ciKTsKQEAgLTU0Myw4ICs1MjUsNyBAQCB2b2lkIEludGxEYXRl
VGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIHllYXIgPSBp
bnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnllYXIsIHR3
b0RpZ2l0TnVtZXJpYywgInllYXIgbXVzdCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVyaWNcIiIs
IG51bGxwdHIpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGlm
ICgheWVhci5pc051bGwoKSkgewogICAgICAgICBpZiAoeWVhciA9PSAiMi1kaWdpdCIpCiAgICAg
ICAgICAgICBza2VsZXRvbkJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgieXkiKTsKQEAgLTU1Myw4ICs1
MzQsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgfQog
CiAgICAgU3RyaW5nIG1vbnRoID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5w
cm9wZXJ0eU5hbWVzLT5tb250aCwgdHdvRGlnaXROdW1lcmljTmFycm93U2hvcnRMb25nLCAibW9u
dGggbXVzdCBiZSBcIjItZGlnaXRcIiwgXCJudW1lcmljXCIsIFwibmFycm93XCIsIFwic2hvcnRc
Iiwgb3IgXCJsb25nXCIiLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKICAgICBpZiAoIW1vbnRoLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChtb250aCA9
PSAiMi1kaWdpdCIpCiAgICAgICAgICAgICBza2VsZXRvbkJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
TU0iKTsKQEAgLTU2OSw4ICs1NDksNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlh
bGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIGRheSA9IGludGxTdHJpbmdPcHRpb24oZXhl
Yywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+ZGF5LCB0d29EaWdpdE51bWVyaWMsICJkYXkg
bXVzdCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGlmICghZGF5LmlzTnVsbCgpKSB7CiAg
ICAgICAgIGlmIChkYXkgPT0gIjItZGlnaXQiKQogICAgICAgICAgICAgc2tlbGV0b25CdWlsZGVy
LmFwcGVuZExpdGVyYWwoImRkIik7CkBAIC01NzksMTYgKzU1OCwxNCBAQCB2b2lkIEludGxEYXRl
VGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIGhvdXIgPSBp
bnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmhvdXIsIHR3
b0RpZ2l0TnVtZXJpYywgImhvdXIgbXVzdCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVyaWNcIiIs
IG51bGxwdHIpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAg
Ly8gV2UgbmVlZCBob3VyMTIgdG8gbWFrZSB0aGUgaG91ciBza2VsZXRvbiBwYXR0ZXJuIGRlY2lz
aW9uLCBzbyBkbyB0aGlzIGVhcmx5LgogICAgIC8vIDMyLiBMZXQgaHIxMiBiZSBHZXRPcHRpb24o
b3B0aW9ucywgImhvdXIxMiIsICJib29sZWFuIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQpLgogICAg
IGJvb2wgaXNIb3VyMTJVbmRlZmluZWQ7CiAgICAgYm9vbCBocjEyID0gaW50bEJvb2xlYW5PcHRp
b24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+aG91cjEyLCBpc0hvdXIxMlVuZGVm
aW5lZCk7CiAgICAgLy8gMzMuIFJldHVybklmQWJydXB0KGhyMTIpLgotICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgaWYgKCFob3VyLmlzTnVsbCgpKSB7CiAgICAg
ICAgIGlmIChpc0hvdXIxMlVuZGVmaW5lZCkgewpAQCAtNjEwLDggKzU4Nyw3IEBAIHZvaWQgSW50
bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgbWlu
dXRlID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5t
aW51dGUsIHR3b0RpZ2l0TnVtZXJpYywgIm1pbnV0ZSBtdXN0IGJlIFwiMi1kaWdpdFwiIG9yIFwi
bnVtZXJpY1wiIiwgbnVsbHB0cik7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7CiAgICAgaWYgKCFtaW51dGUuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKG1pbnV0ZSA9PSAi
Mi1kaWdpdCIpCiAgICAgICAgICAgICBza2VsZXRvbkJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgibW0i
KTsKQEAgLTYyMCw4ICs1OTYsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6
ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIHNlY29uZCA9IGludGxTdHJpbmdPcHRpb24oZXhl
Yywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+c2Vjb25kLCB0d29EaWdpdE51bWVyaWMsICJz
ZWNvbmQgbXVzdCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGlmICghc2Vjb25kLmlzTnVs
bCgpKSB7CiAgICAgICAgIGlmIChzZWNvbmQgPT0gIjItZGlnaXQiKQogICAgICAgICAgICAgc2tl
bGV0b25CdWlsZGVyLmFwcGVuZExpdGVyYWwoInNzIik7CkBAIC02MzAsOCArNjA1LDcgQEAgdm9p
ZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIH0KIAogICAgIFN0cmlu
ZyB0aW1lWm9uZU5hbWUgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3Bl
cnR5TmFtZXMtPnRpbWVab25lTmFtZSwgc2hvcnRMb25nLCAidGltZVpvbmVOYW1lIG11c3QgYmUg
XCJzaG9ydFwiIG9yIFwibG9uZ1wiIiwgbnVsbHB0cik7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CiAgICAgaWYgKCF0aW1lWm9uZU5hbWUuaXNOdWxsKCkpIHsKICAgICAg
ICAgaWYgKHRpbWVab25lTmFtZSA9PSAic2hvcnQiKQogICAgICAgICAgICAgc2tlbGV0b25CdWls
ZGVyLmFwcGVuZCgneicpOwpAQCAtNjQ0LDggKzYxOCw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9y
bWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICAvLyAyNi4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9u
KG9wdGlvbnMsICJmb3JtYXRNYXRjaGVyIiwgInN0cmluZyIsIMKrImJhc2ljIiwgImJlc3QgZml0
IsK7LCAiYmVzdCBmaXQiKS4KICAgICBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZt
LnByb3BlcnR5TmFtZXMtPmZvcm1hdE1hdGNoZXIsIHsgImJhc2ljIiwgImJlc3QgZml0IiB9LCAi
Zm9ybWF0TWF0Y2hlciBtdXN0IGJlIGVpdGhlciBcImJhc2ljXCIgb3IgXCJiZXN0IGZpdFwiIiwg
ImJlc3QgZml0Iik7CiAgICAgLy8gMjcuIFJldHVybklmQWJydXB0KG1hdGNoZXIpLgotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgLy8gQWx3YXlzIHVzZSBJQ1Ug
ZGF0ZSBmb3JtYXQgZ2VuZXJhdG9yLCByYXRoZXIgdGhhbiBvdXIgb3duIHBhdHRlcm4gbGlzdCBh
bmQgbWF0Y2hlci4KICAgICAvLyBDb3ZlcnMgc3RlcHMgMjgtMzYuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9y
bWF0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFu
V2Fnb25lciAodGhldGFsZWNyYWZ0ZXJAZ21haWwuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtOTAsOCArOTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zCiAgICAgLy8gMi4gTGV0IGRhdGVUaW1lRm9ybWF0IGJlIE9yZGluYXJ5Q3JlYXRl
RnJvbUNvbnN0cnVjdG9yKG5ld1RhcmdldCwgJURhdGVUaW1lRm9ybWF0UHJvdG90eXBlJSkuCiAg
ICAgLy8gMy4gUmV0dXJuSWZBYnJ1cHQoZGF0ZVRpbWVGb3JtYXQpLgogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoc3Rh
dGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwganNDYXN0PEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVj
dG9yKj4oc3RhdGUtPmNhbGxlZSgpKS0+ZGF0ZVRpbWVGb3JtYXRTdHJ1Y3R1cmUoKSk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQqIGRhdGVUaW1lRm9ybWF0
ID0gSW50bERhdGVUaW1lRm9ybWF0OjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAgICAgQVNTRVJU
KGRhdGVUaW1lRm9ybWF0KTsKIApAQCAtMTQ2LDggKzE0Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSW50bERhdGVUaW0KIAogICAgIC8vIDIuIExldCByZXF1ZXN0ZWRMb2NhbGVz
IGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAgVmVjdG9yPFN0cmluZz4g
cmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoKnN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICAvLyAzLiBSZXR1cm4g
U3VwcG9ydGVkTG9jYWxlcyhhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRp
b25zKS4KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMoKnN0YXRl
LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBzdGF0ZS0+YXJndW1lbnQoMSkp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1h
dFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDggKzEwMSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEludGwKICAgICAgICAgLy8gYS4gTGV0IHggYmUgVG9OdW1iZXIo
ZGF0ZSkuCiAgICAgICAgIHZhbHVlID0gZGF0ZS50b051bWJlcihzdGF0ZSk7CiAgICAgICAgIC8v
IGIuIFJldHVybklmQWJydXB0KHgpLgotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgfQogCiAgICAgLy8gNS4gUmV0dXJuIEZvcm1hdERhdGVUaW1lKGR0ZiwgeCkuCkBAIC0x
NDAsOCArMTM5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbQog
CiAgICAgICAgIC8vIGMuIExldCBiZiBiZSBCb3VuZEZ1bmN0aW9uQ3JlYXRlKEYsIMKrdGhpcyB2
YWx1ZcK7KS4KICAgICAgICAgYm91bmRGb3JtYXQgPSBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZSh2
bSwgc3RhdGUsIGdsb2JhbE9iamVjdCwgdGFyZ2V0T2JqZWN0LCBkdGYsIGJvdW5kQXJncywgMSwg
QVNDSUlMaXRlcmFsKCJmb3JtYXQiKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgICAgICAvLyBkLiBTZXQgZHRmLltbYm91bmRGb3JtYXRdXSB0byBiZi4KICAgICAgICAgZHRm
LT5zZXRCb3VuZEZvcm1hdCh2bSwgYm91bmRGb3JtYXQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCShyZXZp
c2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDggKzE2NCw3IEBAIHZvaWQgSW50bE51
bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAzLiBMZXQgcmVxdWVzdGVkTG9j
YWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIGF1dG8gcmVxdWVz
dGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qoc3RhdGUsIGxvY2FsZXMpOwogICAg
IC8vIDQuIFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMpLgotICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgLy8gNS4gSWYgb3B0aW9ucyBpcyB1bmRlZmlu
ZWQsIHRoZW4KICAgICBKU09iamVjdCogb3B0aW9uczsKQEAgLTE3Niw4ICsxNzUsNyBAQCB2b2lk
IEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgICAgIC8vIGEuIExldCBv
cHRpb25zIGJlIFRvT2JqZWN0KG9wdGlvbnMpLgogICAgICAgICBvcHRpb25zID0gb3B0aW9uc1Zh
bHVlLnRvT2JqZWN0KCZzdGF0ZSk7CiAgICAgICAgIC8vIGIuIFJldHVybklmQWJydXB0KG9wdGlv
bnMpLgotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
ICAgIH0KIAogICAgIC8vIDcuIExldCBvcHQgYmUgYSBuZXcgUmVjb3JkLgpAQCAtMTg2LDggKzE4
NCw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyA4
LiBMZXQgbWF0Y2hlciBiZSBHZXRPcHRpb24ob3B0aW9ucywgImxvY2FsZU1hdGNoZXIiLCAic3Ry
aW5nIiwgwqsibG9va3VwIiwgImJlc3QgZml0IsK7LCAiYmVzdCBmaXQiKS4KICAgICBTdHJpbmcg
bWF0Y2hlciA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFt
ZXMtPmxvY2FsZU1hdGNoZXIsIHsgImxvb2t1cCIsICJiZXN0IGZpdCIgfSwgImxvY2FsZU1hdGNo
ZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIiLCAiYmVzdCBmaXQi
KTsKICAgICAvLyA5LiBSZXR1cm5JZkFicnVwdChtYXRjaGVyKS4KLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKICAgICAvLyAxMC4gU2V0IG9wdC5bW2xvY2FsZU1hdGNoZXJd
XSB0byBtYXRjaGVyLgogICAgIG9wdC5hZGQoQVNDSUlMaXRlcmFsKCJsb2NhbGVNYXRjaGVyIiks
IG1hdGNoZXIpOwogCkBAIC0yMTEsOCArMjA4LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojpp
bml0aWFsaXplTnVtYmVyRgogICAgIC8vIDE2LiBMZXQgcyBiZSBHZXRPcHRpb24ob3B0aW9ucywg
InN0eWxlIiwgInN0cmluZyIsIMKrICJkZWNpbWFsIiwgInBlcmNlbnQiLCAiY3VycmVuY3kiwrss
ICJkZWNpbWFsIikuCiAgICAgU3RyaW5nIHN0eWxlU3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihz
dGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzdHlsZSIpLCB7ICJk
ZWNpbWFsIiwgInBlcmNlbnQiLCAiY3VycmVuY3kiIH0sICJzdHlsZSBtdXN0IGJlIGVpdGhlciBc
ImRlY2ltYWxcIiwgXCJwZXJjZW50XCIsIG9yIFwiY3VycmVuY3lcIiIsICJkZWNpbWFsIik7CiAg
ICAgLy8gMTcuIFJldHVybklmQWJydXB0KHMpLgotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwogICAgIC8vIDE4LiBTZXQgbnVtYmVyRm9ybWF0Lltbc3R5bGVdXSB0byBzLgog
ICAgIGlmIChzdHlsZVN0cmluZyA9PSAiZGVjaW1hbCIpCiAgICAgICAgIG1fc3R5bGUgPSBTdHls
ZTo6RGVjaW1hbDsKQEAgLTIyNiw4ICsyMjIsNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6Omlu
aXRpYWxpemVOdW1iZXJGCiAgICAgLy8gMTkuIExldCBjIGJlIEdldE9wdGlvbihvcHRpb25zLCAi
Y3VycmVuY3kiLCAic3RyaW5nIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQpLgogICAgIFN0cmluZyBj
dXJyZW5jeSA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiY3VycmVuY3kiKSwgeyB9LCBudWxscHRyLCBudWxscHRyKTsKICAgICAv
LyAyMC4gUmV0dXJuSWZBYnJ1cHQoYykuCi0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAgICAgLy8gMjEuIElmIGMgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgogICAgIGlmICgh
Y3VycmVuY3kuaXNOdWxsKCkpIHsKICAgICAgICAgLy8gYS4gSWYgdGhlIHJlc3VsdCBvZiBJc1dl
bGxGb3JtZWRDdXJyZW5jeUNvZGUoYyksIGlzIGZhbHNlLCB0aGVuIHRocm93IGEgUmFuZ2VFcnJv
ciBleGNlcHRpb24uCkBAIC0yNTcsOCArMjUyLDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojpp
bml0aWFsaXplTnVtYmVyRgogICAgIC8vIDI0LiBMZXQgY2QgYmUgR2V0T3B0aW9uKG9wdGlvbnMs
ICJjdXJyZW5jeURpc3BsYXkiLCAic3RyaW5nIiwgwqsiY29kZSIsICJzeW1ib2wiLCAibmFtZSLC
uywgInN5bWJvbCIpLgogICAgIFN0cmluZyBjdXJyZW5jeURpc3BsYXlTdHJpbmcgPSBpbnRsU3Ry
aW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImN1
cnJlbmN5RGlzcGxheSIpLCB7ICJjb2RlIiwgInN5bWJvbCIsICJuYW1lIiB9LCAiY3VycmVuY3lE
aXNwbGF5IG11c3QgYmUgZWl0aGVyIFwiY29kZVwiLCBcInN5bWJvbFwiLCBvciBcIm5hbWVcIiIs
ICJzeW1ib2wiKTsKICAgICAvLyAyNS4gUmV0dXJuSWZBYnJ1cHQoY2QpLgotICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIC8vIDI2LiBJZiBzIGlzICJjdXJyZW5jeSIs
IHNldCBudW1iZXJGb3JtYXQuW1tjdXJyZW5jeURpc3BsYXldXSB0byBjZC4KICAgICBpZiAobV9z
dHlsZSA9PSBTdHlsZTo6Q3VycmVuY3kpIHsKICAgICAgICAgaWYgKGN1cnJlbmN5RGlzcGxheVN0
cmluZyA9PSAiY29kZSIpCkBAIC0yNzUsOCArMjY5LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0
Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDI4LiBSZXR1cm5JZkFicnVwdChtbmlkKS4KICAg
ICAvLyAyOS4gU2V0IG51bWJlckZvcm1hdC5bW21pbmltdW1JbnRlZ2VyRGlnaXRzXV0gdG8gbW5p
ZC4KICAgICB1bnNpZ25lZCBtaW5pbXVtSW50ZWdlckRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24o
c3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bUludGVn
ZXJEaWdpdHMiKSwgMSwgMjEsIDEpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOwogICAgIG1fbWluaW11bUludGVnZXJEaWdpdHMgPSBtaW5pbXVtSW50ZWdlckRpZ2l0czsK
IAogICAgIC8vIDMwLiBJZiBzIGlzICJjdXJyZW5jeSIsIGxldCBtbmZkRGVmYXVsdCBiZSBjRGln
aXRzOyBlbHNlIGxldCBtbmZkRGVmYXVsdCBiZSAwLgpAQCAtMjg2LDggKzI3OSw3IEBAIHZvaWQg
SW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAzMi4gUmV0dXJuSWZB
YnJ1cHQobW5mZCkuCiAgICAgLy8gMzMuIFNldCBudW1iZXJGb3JtYXQuW1ttaW5pbXVtRnJhY3Rp
b25EaWdpdHNdXSB0byBtbmZkLgogICAgIHVuc2lnbmVkIG1pbmltdW1GcmFjdGlvbkRpZ2l0cyA9
IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiksIDAsIDIwLCBtaW5pbXVtRnJhY3Rpb25EaWdp
dHNEZWZhdWx0KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBt
X21pbmltdW1GcmFjdGlvbkRpZ2l0cyA9IG1pbmltdW1GcmFjdGlvbkRpZ2l0czsKIAogICAgIC8v
IDM0LiBJZiBzIGlzICJjdXJyZW5jeSIsIGxldCBteGZkRGVmYXVsdCBiZSBtYXgobW5mZCwgY0Rp
Z2l0cyk7CkBAIC0zMDMsMzQgKzI5NSwyOSBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRp
YWxpemVOdW1iZXJGCiAgICAgLy8gMzYuIFJldHVybklmQWJydXB0KG14ZmQpLgogICAgIC8vIDM3
LiBTZXQgbnVtYmVyRm9ybWF0LltbbWF4aW11bUZyYWN0aW9uRGlnaXRzXV0gdG8gbXhmZC4KICAg
ICB1bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRl
LCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1GcmFjdGlvbkRp
Z2l0cyIpLCBtaW5pbXVtRnJhY3Rpb25EaWdpdHMsIDIwLCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNE
ZWZhdWx0KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBtX21h
eGltdW1GcmFjdGlvbkRpZ2l0cyA9IG1heGltdW1GcmFjdGlvbkRpZ2l0czsKIAogICAgIC8vIDM4
LiBMZXQgbW5zZCBiZSBHZXQob3B0aW9ucywgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIpLgog
ICAgIEpTVmFsdWUgbWluaW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUgPSBvcHRpb25zLT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1TaWduaWZpY2FudERp
Z2l0cyIpKTsKICAgICAvLyAzOS4gUmV0dXJuSWZBYnJ1cHQobW5zZCkuCi0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICAvLyA0MC4gTGV0IG14c2QgYmUgR2V0KG9w
dGlvbnMsICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKS4KICAgICBKU1ZhbHVlIG1heGltdW1T
aWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKSk7CiAgICAgLy8gNDEu
IFJldHVybklmQWJydXB0KG14c2QpLgotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOwogCiAgICAgLy8gNDIuIElmIG1uc2QgaXMgbm90IHVuZGVmaW5lZCBvciBteHNkIGlzIG5v
dCB1bmRlZmluZWQsIHRoZW4KICAgICBpZiAoIW1pbmltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVl
LmlzVW5kZWZpbmVkKCkgfHwgIW1heGltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKICAgICAgICAgLy8gYS4gTGV0IG1uc2QgYmUgR2V0TnVtYmVyT3B0aW9uKG9wdGlv
bnMsICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiLCAxLCAyMSwgMSkuCiAgICAgICAgIHVuc2ln
bmVkIG1pbmltdW1TaWduaWZpY2FudERpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9w
dGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bVNpZ25pZmljYW50RGln
aXRzIiksIDEsIDIxLCAxKTsKICAgICAgICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQobW5zZCkuCi0g
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1
cm47CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAg
IC8vIGMuIExldCBteHNkIGJlIEdldE51bWJlck9wdGlvbihvcHRpb25zLCAibWF4aW11bVNpZ25p
ZmljYW50RGlnaXRzIiwgbW5zZCwgMjEsIDIxKS4KICAgICAgICAgdW5zaWduZWQgbWF4aW11bVNp
Z25pZmljYW50RGlnaXRzID0gaW50bE51bWJlck9wdGlvbihzdGF0ZSwgb3B0aW9ucywgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwgbWluaW11
bVNpZ25pZmljYW50RGlnaXRzLCAyMSwgMjEpOwogICAgICAgICAvLyBkLiBSZXR1cm5JZkFicnVw
dChteHNkKS4KLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgp
KTsKICAgICAgICAgLy8gZS4gU2V0IG51bWJlckZvcm1hdC5bW21pbmltdW1TaWduaWZpY2FudERp
Z2l0c11dIHRvIG1uc2QuCiAgICAgICAgIG1fbWluaW11bVNpZ25pZmljYW50RGlnaXRzID0gbWlu
aW11bVNpZ25pZmljYW50RGlnaXRzOwogICAgICAgICAvLyBmLiBTZXQgbnVtYmVyRm9ybWF0Lltb
bWF4aW11bVNpZ25pZmljYW50RGlnaXRzXV0gdG8gbXhzZC4KQEAgLTM0Myw4ICszMzAsNyBAQCB2
b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgaWYgKHVzZXNGYWxs
YmFjaykKICAgICAgICAgdXNlR3JvdXBpbmcgPSB0cnVlOwogICAgIC8vIDQ0LiBSZXR1cm5JZkFi
cnVwdChnKS4KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAvLyA0
NS4gU2V0IG51bWJlckZvcm1hdC5bW3VzZUdyb3VwaW5nXV0gdG8gZy4KICAgICBtX3VzZUdyb3Vw
aW5nID0gdXNlR3JvdXBpbmc7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJl
ckZvcm1hdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyICh0aGV0YWxlY3JhZnRlckBn
bWFpbC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCw4ICs5MSw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAvLyAyLiBMZXQg
bnVtYmVyRm9ybWF0IGJlIE9yZGluYXJ5Q3JlYXRlRnJvbUNvbnN0cnVjdG9yKG5ld1RhcmdldCwg
JU51bWJlckZvcm1hdFByb3RvdHlwZSUpLgogICAgIC8vIDMuIFJldHVybklmQWJydXB0KG51bWJl
ckZvcm1hdCkuCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpj
cmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUtPm5ld1RhcmdldCgpLCBqc0Nhc3Q8
SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKS0+bnVtYmVyRm9y
bWF0U3RydWN0dXJlKCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgSW50bE51bWJlckZv
cm1hdCogbnVtYmVyRm9ybWF0ID0gSW50bE51bWJlckZvcm1hdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1
cmUpOwogICAgIEFTU0VSVChudW1iZXJGb3JtYXQpOwogCkBAIC0xNDYsOCArMTQ2LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRgogCiAgICAgLy8gMi4gTGV0IHJl
cXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBW
ZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdCgq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAg
IC8vIDMuIFJldHVybiBTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3Rl
ZExvY2FsZXMsIG9wdGlvbnMpLgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3VwcG9ydGVk
TG9jYWxlcygqc3RhdGUsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIHN0YXRl
LT5hcmd1bWVudCgxKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIw
NjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQ
cm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw4ICs5MSw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGwKICAgICAvLyA0LiBMZXQgeCBiZSBUb051bWJl
cih2YWx1ZSkuCiAgICAgZG91YmxlIG51bWJlciA9IHN0YXRlLT5hcmd1bWVudCgwKS50b051bWJl
cihzdGF0ZSk7CiAgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQoeCkuCi0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKIAogICAgIC8vIDYuIFJldHVybiBGb3JtYXROdW1iZXIobmYsIHgpLgogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUobnVtYmVyRm9ybWF0LT5mb3JtYXROdW1iZXIoKnN0YXRlLCBudW1i
ZXIpKTsKQEAgLTEyOCw4ICsxMjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIElu
dGxOdW1iZXJGCiAKICAgICAgICAgLy8gYy4gTGV0IGJmIGJlIEJvdW5kRnVuY3Rpb25DcmVhdGUo
Riwgwqt0aGlzIHZhbHVlwrspLgogICAgICAgICBib3VuZEZvcm1hdCA9IEpTQm91bmRGdW5jdGlv
bjo6Y3JlYXRlKHZtLCBzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB0YXJnZXRPYmplY3QsIG5mLCBib3Vu
ZEFyZ3MsIDEsIEFTQ0lJTGl0ZXJhbCgiZm9ybWF0IikpOwotICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICAgICAgLy8gZC4gU2V0IG5mLltbYm91bmRGb3JtYXRdXSB0byBiZi4KICAg
ICAgICAgbmYtPnNldEJvdW5kRm9ybWF0KHZtLCBib3VuZEZvcm1hdCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAJKHJldmlzaW9u
IDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTUgKzEzNCwxMyBAQCBib29sIGludGxCb29sZWFuT3B0
aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsCiAgICAgSlNPYmplY3QqIG9wdHMgPSBvcHRpb25zLnRvT2Jq
ZWN0KCZzdGF0ZSk7CiAKICAgICAvLyAyLiBSZXR1cm5JZkFicnVwdChvcHRzKS4KLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgLy8gMy4gTGV0IHZhbHVl
IGJlIEdldChvcHRzLCBwcm9wZXJ0eSkuCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdHMtPmdldCgm
c3RhdGUsIHByb3BlcnR5KTsKIAogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHZhbHVlKS4KLSAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgLy8gNS4gSWYg
dmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgogICAgIGlmICghdmFsdWUuaXNVbmRlZmluZWQo
KSkgewpAQCAtMTc2LDE1ICsxNzQsMTMgQEAgU3RyaW5nIGludGxTdHJpbmdPcHRpb24oRXhlY1N0
YXRlJiBzdGF0ZQogICAgIEpTT2JqZWN0KiBvcHRzID0gb3B0aW9ucy50b09iamVjdCgmc3RhdGUp
OwogCiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1cHQob3B0cykuCi0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBTdHJpbmcoKSk7CiAKICAgICAvLyAzLiBMZXQgdmFsdWUgYmUgR2V0KG9w
dHMsIHByb3BlcnR5KS4KICAgICBKU1ZhbHVlIHZhbHVlID0gb3B0cy0+Z2V0KCZzdGF0ZSwgcHJv
cGVydHkpOwogCiAgICAgLy8gNC4gUmV0dXJuSWZBYnJ1cHQodmFsdWUpLgotICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiB7IH07CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgU3RyaW5nKCkpOwogCiAgICAgLy8gNS4gSWYgdmFsdWUgaXMg
bm90IHVuZGVmaW5lZCwgdGhlbgogICAgIGlmICghdmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAt
MTk2LDggKzE5Miw3IEBAIFN0cmluZyBpbnRsU3RyaW5nT3B0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUK
ICAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsK
IAogICAgICAgICAvLyBpaS4gUmV0dXJuSWZBYnJ1cHQodmFsdWUpLgotICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgU3RyaW5nKCkpOwogCiAgICAgICAgIC8vIGQu
IElmIHZhbHVlcyBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCiAgICAgICAgIC8vIGkuIElmIHZhbHVl
cyBkb2VzIG5vdCBjb250YWluIGFuIGVsZW1lbnQgZXF1YWwgdG8gdmFsdWUsIHRocm93IGEgUmFu
Z2VFcnJvciBleGNlcHRpb24uCkBAIC0yMjQsMjMgKzIxOSwyMCBAQCB1bnNpZ25lZCBpbnRsTnVt
YmVyT3B0aW9uKEV4ZWNTdGF0ZSYgc3RhCiAgICAgSlNPYmplY3QqIG9wdHMgPSBvcHRpb25zLnRv
T2JqZWN0KCZzdGF0ZSk7CiAKICAgICAvLyAyLiBSZXR1cm5JZkFicnVwdChvcHRzKS4KLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKIAogICAgIC8vIDMuIExldCB2YWx1ZSBiZSBH
ZXQob3B0cywgcHJvcGVydHkpLgogICAgIEpTVmFsdWUgdmFsdWUgPSBvcHRzLT5nZXQoJnN0YXRl
LCBwcm9wZXJ0eSk7CiAKICAgICAvLyA0LiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CiAKICAgICAvLyA1LiBJZiB2YWx1ZSBpcyBub3Qg
dW5kZWZpbmVkLCB0aGVuCiAgICAgaWYgKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAg
IC8vIGEuIExldCB2YWx1ZSBiZSBUb051bWJlcih2YWx1ZSkuCiAgICAgICAgIGRvdWJsZSBkb3Vi
bGVWYWx1ZSA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CiAgICAgICAgIC8vIGIuIFJldHVybklm
QWJydXB0KHZhbHVlKS4KLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCAwKTsKICAgICAgICAgLy8gMS4gSWYgdmFsdWUgaXMgTmFOIG9yIGxlc3MgdGhhbiBtaW5pbXVt
IG9yIGdyZWF0ZXIgdGhhbiBtYXhpbXVtLCB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgog
ICAgICAgICBpZiAoIShkb3VibGVWYWx1ZSA+PSBtaW5pbXVtICYmIGRvdWJsZVZhbHVlIDw9IG1h
eGltdW0pKSB7CiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVh
dGVSYW5nZUVycm9yKCZzdGF0ZSwgKnByb3BlcnR5LnB1YmxpY05hbWUoKSArICIgaXMgb3V0IG9m
IHJhbmdlIikpOwpAQCAtNTYwLDE3ICs1NTIsMTQgQEAgVmVjdG9yPFN0cmluZz4gY2Fub25pY2Fs
aXplTG9jYWxlTGlzdChFeAogICAgIH0KIAogICAgIC8vIDUuIFJldHVybklmQWJydXB0KE8pLgot
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBWZWN0
b3I8U3RyaW5nPigpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFZlY3RvcjxTdHJp
bmc+KCkpOwogCiAgICAgLy8gNi4gTGV0IGxlbiBiZSBUb0xlbmd0aChHZXQoTywgImxlbmd0aCIp
KS4KICAgICBKU1ZhbHVlIGxlbmd0aFByb3BlcnR5ID0gbG9jYWxlc09iamVjdC0+Z2V0KCZzdGF0
ZSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBWZWN0b3I8U3RyaW5nPigpKTsKIAogICAgIGRvdWJsZSBsZW5n
dGggPSBsZW5ndGhQcm9wZXJ0eS50b0xlbmd0aCgmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFZlY3RvcjxTdHJpbmc+KCkpOwogCiAgICAgLy8g
S2VlcCB0cmFjayBvZiBsb2NhbGVzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBsaXN0Lgog
ICAgIEhhc2hTZXQ8U3RyaW5nPiBzZWVuU2V0OwpAQCAtNTg1LDggKzU3NCw3IEBAIFZlY3RvcjxT
dHJpbmc+IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoRXgKICAgICAgICAgYm9vbCBrUHJlc2VudCA9
IGxvY2FsZXNPYmplY3QtPmhhc1Byb3BlcnR5KCZzdGF0ZSwgayk7CiAKICAgICAgICAgLy8gYy4g
UmV0dXJuSWZBYnJ1cHQoa1ByZXNlbnQpLgotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFZlY3RvcjxTdHJpbmc+KCkpOwogCiAgICAgICAg
IC8vIGQuIElmIGtQcmVzZW50IGlzIHRydWUsIHRoZW4KICAgICAgICAgaWYgKGtQcmVzZW50KSB7
CkBAIC01OTQsOCArNTgyLDcgQEAgVmVjdG9yPFN0cmluZz4gY2Fub25pY2FsaXplTG9jYWxlTGlz
dChFeAogICAgICAgICAgICAgSlNWYWx1ZSBrVmFsdWUgPSBsb2NhbGVzT2JqZWN0LT5nZXQoJnN0
YXRlLCBrKTsKIAogICAgICAgICAgICAgLy8gaWkuIFJldHVybklmQWJydXB0KGtWYWx1ZSkuCi0g
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgVmVjdG9yPFN0cmluZz4oKSk7CiAKICAgICAgICAgICAgIC8vIGlpaS4gSWYg
VHlwZShrVmFsdWUpIGlzIG5vdCBTdHJpbmcgb3IgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvciBl
eGNlcHRpb24uCiAgICAgICAgICAgICBpZiAoIWtWYWx1ZS5pc1N0cmluZygpICYmICFrVmFsdWUu
aXNPYmplY3QoKSkgewpAQCAtNjA3LDggKzU5NCw3IEBAIFZlY3RvcjxTdHJpbmc+IGNhbm9uaWNh
bGl6ZUxvY2FsZUxpc3QoRXgKICAgICAgICAgICAgIEpTU3RyaW5nKiB0YWcgPSBrVmFsdWUudG9T
dHJpbmcoJnN0YXRlKTsKIAogICAgICAgICAgICAgLy8gdi4gUmV0dXJuSWZBYnJ1cHQodGFnKS4K
LSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBWZWN0b3I8U3RyaW5nPigpKTsKIAogICAgICAgICAgICAgLy8gdmkuIElm
IElzU3RydWN0dXJhbGx5VmFsaWRMYW5ndWFnZVRhZyh0YWcpIGlzIGZhbHNlLCB0aHJvdyBhIFJh
bmdlRXJyb3IgZXhjZXB0aW9uLgogICAgICAgICAgICAgLy8gdmlpLiBMZXQgY2Fub25pY2FsaXpl
ZFRhZyBiZSBDYW5vbmljYWxpemVMYW5ndWFnZVRhZyh0YWcpLgpAQCAtOTQ1LDggKzkzMSw3IEBA
IEpTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhFeGVjU3RhdGUmIHN0YXQKICAgICAgICAgLy8gYS4g
TGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJsb2NhbGVNYXRjaGVyIiwgInN0cmlu
ZyIsIMKrICJsb29rdXAiLCAiYmVzdCBmaXQiIMK7LCAiYmVzdCBmaXQiKS4KICAgICAgICAgbWF0
Y2hlciA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMt
PmxvY2FsZU1hdGNoZXIsIHsgImxvb2t1cCIsICJiZXN0IGZpdCIgfSwgImxvY2FsZU1hdGNoZXIg
bXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIiLCAiYmVzdCBmaXQiKTsK
ICAgICAgICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQobWF0Y2hlcikuCi0gICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICB9
IGVsc2UgewogICAgICAgICAvLyAyLiBFbHNlLCBsZXQgbWF0Y2hlciBiZSAiYmVzdCBmaXQiLgog
ICAgICAgICBtYXRjaGVyID0gQVNDSUlMaXRlcmFsKCJiZXN0IGZpdCIpOwpAQCAtOTY1LDggKzk1
MCw3IEBAIEpTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhFeGVjU3RhdGUmIHN0YXQKICAgICAgICAg
c3VwcG9ydGVkTG9jYWxlcyA9IGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoc3RhdGUsIGF2YWlsYWJs
ZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICAvLyA2LiBMZXQgc3Vi
c2V0IGJlIENyZWF0ZUFycmF5RnJvbUxpc3Qoc3VwcG9ydGVkTG9jYWxlcykuCiAgICAgLy8gQWxy
ZWFkeSBhbiBhcnJheS4KQEAgLTk3NCw4ICs5NTgsNyBAQCBKU1ZhbHVlIHN1cHBvcnRlZExvY2Fs
ZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgLy8gNy4gTGV0IGtleXMgYmUgc3Vic2V0LltbT3duUHJv
cGVydHlLZXlzXV0oKS4KICAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZzdGF0ZSwgUHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5ncyk7CiAgICAgc3VwcG9ydGVkTG9jYWxlcy0+Z2V0T3duUHJvcGVy
dHlOYW1lcyhzdXBwb3J0ZWRMb2NhbGVzLCAmc3RhdGUsIGtleXMsIEVudW1lcmF0aW9uTW9kZSgp
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkp
OwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2M7CiAgICAgZGVzYy5zZXRDb25maWd1cmFi
bGUoZmFsc2UpOwpAQCAtOTkxLDggKzk3NCw3IEBAIEpTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhF
eGVjU3RhdGUmIHN0YXQKICAgICAgICAgc3VwcG9ydGVkTG9jYWxlcy0+ZGVmaW5lT3duUHJvcGVy
dHkoc3VwcG9ydGVkTG9jYWxlcywgJnN0YXRlLCBrZXlzW2ldLCBkZXNjLCB0cnVlKTsKIAogICAg
ICAgICAvLyBjLiBBc3NlcnQ6IHN0YXR1cyBpcyBub3QgYWJydXB0IGNvbXBsZXRpb24uCi0gICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1
ZSgpKTsKICAgICB9CiAKICAgICAvLyA5LiBSZXR1cm4gc3Vic2V0LgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0SW5saW5lcy5oCShyZXZpc2lv
biAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0SW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTAgQEAgSlNWYWx1ZSBjb25zdHJ1
Y3RJbnRsSW5zdGFuY2VXaXRoV29ya2FybwogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IGNh
bGxlZS0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwogICAgICAg
ICBpZiAoSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZSgmc3RhdGUsIHRoaXNWYWx1ZSwgcHJv
dG90eXBlKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUu
dG9PYmplY3QoJnN0YXRlKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgICAgICAgICBJ
bnRsSW5zdGFuY2UqIGluc3RhbmNlID0gZmFjdG9yeSh2bSk7Ci0gICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgp
KTsKIAogICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5pbnRsU3Vic3RpdHV0ZVZhbHVlUHJpdmF0ZU5hbWUoKSwgaW5z
dGFuY2UpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXNPYmplY3Q7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9y
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDcgQEAgSlNWYWx1ZSBp
dGVyYXRvck5leHQoRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgbmV4dEZ1bmN0aW9uID0gaXRlcmF0b3Iu
Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm5leHQpOwotICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBDYWxsRGF0YSBuZXh0RnVu
Y3Rpb25DYWxsRGF0YTsKICAgICBDYWxsVHlwZSBuZXh0RnVuY3Rpb25DYWxsVHlwZSA9IGdldENh
bGxEYXRhKG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbERhdGEpOwpAQCAtNTMsOCArNTIs
NyBAQCBKU1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgaWYgKCF2
YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIG5leHRGdW5jdGlvbkFyZ3VtZW50cy5hcHBlbmQodmFs
dWUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBuZXh0RnVuY3Rpb24sIG5leHRG
dW5jdGlvbkNhbGxUeXBlLCBuZXh0RnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0b3IsIG5leHRGdW5j
dGlvbkFyZ3VtZW50cyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgSlNWYWx1ZSgpKTsKIAogICAgIGlmICghcmVzdWx0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJJdGVyYXRvciBy
ZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuIikpOwpAQCAtODQsMTEgKzgyLDkgQEAg
SlNWYWx1ZSBpdGVyYXRvclN0ZXAoRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0gaXRlcmF0
b3JOZXh0KGV4ZWMsIGl0ZXJhdG9yKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIGJvb2wgZG9uZSA9IGl0ZXJhdG9yQ29tcGxldGUo
ZXhlYywgcmVzdWx0KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBKU1ZhbHVlKCkpOwogICAgIGlmIChkb25lKQogICAgICAgICByZXR1cm4ganNCb29sZWFuKGZh
bHNlKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTA2LDggKzEwMiw3IEBAIHZvaWQgaXRlcmF0
b3JDbG9zZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgY2F0Y2hTY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogICAgIH0KICAgICBKU1ZhbHVlIHJldHVybkZ1bmN0aW9uID0gaXRlcmF0b3Iu
Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnJldHVybktleXdvcmQpOwotICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdm9pZCgpKTsKIAogICAgIGlmIChyZXR1cm5GdW5j
dGlvbi5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCkBAIC0xMzMsOCAr
MTI4LDcgQEAgdm9pZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB2b2lkKCkpOwogCiAgICAgaWYgKCFpbm5lclJlc3VsdC5pc09iamVjdCgpKSB7CiAgICAgICAg
IHRocm93VHlwZUVycm9yKGV4ZWMsIHRocm93U2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSXRlcmF0b3Ig
cmVzdWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIpKTsKQEAgLTE3MSw4ICsxNjUsNyBA
QCBKU1ZhbHVlIGl0ZXJhdG9yRm9ySXRlcmFibGUoRXhlY1N0YXRlKiBzCiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIAogICAgIEpTVmFsdWUgaXRlcmF0b3JG
dW5jdGlvbiA9IGl0ZXJhYmxlLmdldChzdGF0ZSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5pdGVy
YXRvclN5bWJvbCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1Zh
bHVlKCkpOwogICAgIAogICAgIENhbGxEYXRhIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YTsKICAg
ICBDYWxsVHlwZSBpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShpdGVyYXRv
ckZ1bmN0aW9uLCBpdGVyYXRvckZ1bmN0aW9uQ2FsbERhdGEpOwpAQCAtMTgzLDggKzE3Niw3IEBA
IEpTVmFsdWUgaXRlcmF0b3JGb3JJdGVyYWJsZShFeGVjU3RhdGUqIHMKIAogICAgIEFyZ0xpc3Qg
aXRlcmF0b3JGdW5jdGlvbkFyZ3VtZW50czsKICAgICBKU1ZhbHVlIGl0ZXJhdG9yID0gY2FsbChz
dGF0ZSwgaXRlcmF0b3JGdW5jdGlvbiwgaXRlcmF0b3JGdW5jdGlvbkNhbGxUeXBlLCBpdGVyYXRv
ckZ1bmN0aW9uQ2FsbERhdGEsIGl0ZXJhYmxlLCBpdGVyYXRvckZ1bmN0aW9uQXJndW1lbnRzKTsK
LSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZSgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAg
ICBpZiAoIWl0ZXJhdG9yLmlzT2JqZWN0KCkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9y
T3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0l0ZXJhdG9yT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPi4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUx
LDE2ICs1MiwxNCBAQCB2b2lkIGZvckVhY2hJbkl0ZXJhYmxlKEV4ZWNTdGF0ZSogc3RhdGUsCiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBp
dGVyYXRvciA9IGl0ZXJhdG9yRm9ySXRlcmFibGUoc3RhdGUsIGl0ZXJhYmxlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
ICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRvclN0ZXAoc3RhdGUsIGl0ZXJhdG9yKTsKICAgICAgICAg
aWYgKG5leHQuaXNGYWxzZSgpIHx8IFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICBKU1ZhbHVlIG5leHRWYWx1ZSA9IGl0ZXJhdG9yVmFs
dWUoc3RhdGUsIG5leHQpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwogCiAgICAgICAgIGNhbGxiYWNrKHZtLCBzdGF0ZSwgbmV4dFZhbHVlKTsKICAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NTMsOCArNjUzLDcgQEAgSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQog
ICAgIHVuc2lnbmVkIGluZGV4ID0gZ2V0QXJyYXlMZW5ndGgoKSAtIDE7CiAgICAgLy8gTGV0IGVs
ZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhv
ZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhl
YywgaW5kZXgpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
VmFsdWUoKSk7CiAgICAgLy8gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2Yg
TyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVlLgogICAgIGlmICghZGVsZXRlUHJvcGVydHlC
eUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKQEAg
LTEzMjMsOCArMTMyMiw3IEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0
ZSoKICAgICAKICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGV4ZWMtPnIo
Zmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gZ2V0KGV4ZWMsIGkpOwotICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIH0KIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04OCw4ICs4OCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnMKICAgICB1bnNpZ25lZCBsZW5ndGg7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSkgewogICAgICAgICBsZW5ndGggPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1VJbnQz
MihleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIC8vIEFsdGhvdWdoIHRoZSBkb2N1bWVudGF0aW9uIGRvZXNuJ3Qgc2F5IHNvLCBp
dCBpcyBpbiBmYWN0IGNvcnJlY3QgdG8gc2F5CiAgICAgICAgIC8vICJuZXcgQXJyYXlCdWZmZXIo
KSIuIFRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgYWxsb2NhdGluZyBhbiBhcnJheSBidWZmZXIK
QEAgLTEwMiw4ICsxMDEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMsIHNjb3BlKSk7CiAKICAgICBTdHJ1Y3R1cmUqIGFycmF5QnVmZmVyU3RydWN0dXJlID0g
SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3
VGFyZ2V0KCksIGNvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1
cmUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9IEpT
QXJyYXlCdWZmZXI6OmNyZWF0ZSh2bSwgYXJyYXlCdWZmZXJTdHJ1Y3R1cmUsIFdURk1vdmUoYnVm
ZmVyKSk7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
clByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MCwxNCArNTAsMTIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJTbGljZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOwogICAgIAogICAgIGlu
dDMyX3QgYmVnaW4gPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgCiAgICAgaW50MzJfdCBlbmQ7CiAgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA+PSAyKSB7CiAgICAgICAgIGVuZCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICB9IGVsc2UKICAgICAgICAgZW5kID0gdGhpc09iamVjdC0+aW1wbCgpLT5ieXRlTGVuZ3RoKCk7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJ
bmxpbmVzLmgJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDggKzc2LDcgQEAgQUxX
QVlTX0lOTElORSB1bnNpZ25lZCBnZXRMZW5ndGgoRXhlY1N0YQogICAgICAgICByZXR1cm4ganND
YXN0PEpTQXJyYXkqPihvYmopLT5sZW5ndGgoKTsKIAogICAgIEpTVmFsdWUgbGVuZ3RoVmFsdWUg
PSBvYmotPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwotICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBVSU5UX01BWCk7CiAgICAgcmV0dXJuIGxlbmd0aFZh
bHVlLnRvVUludDMyKGV4ZWMpOwogfQogCkBAIC04OSw4ICs4OCw3IEBAIEFMV0FZU19JTkxJTkUg
ZG91YmxlIHRvTGVuZ3RoKEV4ZWNTdGF0ZSoKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0FycmF5
Kj4ob2JqKS0+bGVuZ3RoKCk7CiAKICAgICBKU1ZhbHVlIGxlbmd0aFZhbHVlID0gb2JqLT5nZXQo
ZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gUE5hTjsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBQTmFOKTsKICAgICByZXR1cm4gbGVuZ3RoVmFsdWUudG9MZW5ndGgoZXhlYyk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3Vu
ZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDggKzEy
OCw3IEBAIGlubGluZSBTdHJ1Y3R1cmUqIGdldEJvdW5kRnVuY3Rpb25TdHJ1Y3QKIHsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBwcm90b3R5
cGUgPSB0YXJnZXRGdW5jdGlvbi0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBKU0Z1bmN0aW9uKiB0YXJn
ZXRKU0Z1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4odGFyZ2V0RnVuY3Rpb24p
OwogCiAgICAgLy8gV2Ugb25seSBjYWNoZSB0aGUgc3RydWN0dXJlIG9mIHRoZSBib3VuZCBmdW5j
dGlvbiBpZiB0aGUgYmluZGVlIGlzIGEgSlNGdW5jdGlvbiBzaW5jZSB0aGVyZQpAQCAtMTcyLDgg
KzE3MSw3IEBAIEpTQm91bmRGdW5jdGlvbiogSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUKICAgICAg
ICAgY2FuQ29uc3RydWN0ID8gKHNsb3dDYXNlID8gYm91bmRGdW5jdGlvbkNvbnN0cnVjdCA6IGJv
dW5kVGhpc05vQXJnc0Z1bmN0aW9uQ29uc3RydWN0KSA6IGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0
cnVjdG9yLAogICAgICAgICBuYW1lKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldEJv
dW5kRnVuY3Rpb25TdHJ1Y3R1cmUodm0sIGV4ZWMsIGdsb2JhbE9iamVjdCwgdGFyZ2V0RnVuY3Rp
b24pOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAg
IEpTQm91bmRGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0JvdW5kRnVuY3Rpb24+KHZtLmhlYXApKSBKU0JvdW5kRnVuY3Rpb24odm0sIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlLCB0YXJnZXRGdW5jdGlvbiwgYm91bmRUaGlzLCBib3VuZEFyZ3MpOwogCiAg
ICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHJldmlz
aW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsOCArMTkyLDcgQEAgYm9vbCBKU1ZhbHVlOjpwdXRU
b1ByaW1pdGl2ZShFeGVjU3RhdGUqIAogICAgICAgICB9CiAKICAgICAgICAgcHJvdG90eXBlID0g
b2JqLT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxs
KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC0zODEsMTIgKzM4MCwxMCBAQCBKU1N0
cmluZyogSlNWYWx1ZTo6dG9TdHJpbmdTbG93Q2FzZShFeGVjCiAKICAgICBBU1NFUlQoaXNDZWxs
KCkpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBhc0NlbGwoKS0+dG9QcmltaXRpdmUoZXhlYywgUHJl
ZmVyU3RyaW5nKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4gZXJyb3JWYWx1ZSgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVy
cm9yVmFsdWUoKSk7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc09iamVjdCgpKTsKICAgICBKU1N0cmlu
ZyogcmVzdWx0ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGVycm9yVmFsdWUoKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlcnJvclZhbHVlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZUlubGluZXMuaAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQyLDggKzY0Miw3
IEBAIGlubGluZSBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIHRvUHJlZmVycmUKICAgICB9CiAKICAg
ICBTdHJpbmdJbXBsKiBoaW50U3RyaW5nID0ganNDYXN0PEpTU3RyaW5nKj4odmFsdWUpLT52YWx1
ZShleGVjKS5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIE5vUHJlZmVyZW5jZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBOb1ByZWZlcmVuY2UpOwogCiAgICAgaWYgKFdURjo6ZXF1YWwoaGludFN0cmluZywgImRlZmF1
bHQiKSkKICAgICAgICAgcmV0dXJuIE5vUHJlZmVyZW5jZTsKQEAgLTc4Niw4ICs3ODUsNyBAQCBB
TFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPENhCiB7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgYm9vbCBmb3VuZCA9IGdl
dFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiB7IH07CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICByZXR1cm4gY2FsbGJhY2soZm91bmQsIHNsb3Qp
OwogfQogCkBAIC05MjYsOCArOTI0LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTVmFsdWU6OmVx
dWFsU2xvd0NhcwogICAgICAgICAgICAgaWYgKHYyLmlzT2JqZWN0KCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHYxID09IHYyOwogICAgICAgICAgICAgSlNWYWx1ZSBwMSA9IHYxLnRvUHJpbWl0
aXZlKGV4ZWMpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgICAgICB2MSA9IHAxOwogICAgICAgICAgICAg
aWYgKHYxLmlzSW50MzIoKSAmJiB2Mi5pc0ludDMyKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHYxID09IHYyOwpAQCAtOTM2LDggKzkzMyw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVl
OjplcXVhbFNsb3dDYXMKIAogICAgICAgICBpZiAodjIuaXNPYmplY3QoKSkgewogICAgICAgICAg
ICAgSlNWYWx1ZSBwMiA9IHYyLnRvUHJpbWl0aXZlKGV4ZWMpOwotICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAg
ICAgICB2MiA9IHAyOwogICAgICAgICAgICAgaWYgKHYxLmlzSW50MzIoKSAmJiB2Mi5pc0ludDMy
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHYxID09IHYyOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHJl
dmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZp
ZXdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsMTUgKzEzMywxMyBAQCBFbmNv
ZGVkSlNWYWx1ZSBnZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiTmVlZCBhdCBsZWFzdCBvbmUg
YXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0KSIpKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRlT2Zm
c2V0ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICAKICAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOwogICAg
IHVuc2lnbmVkIGVsZW1lbnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwog
ICAgIGlmIChlbGVtZW50U2l6ZSA+IDEgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsK
ICAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29s
ZWFuKGV4ZWMpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogICAg
IAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGggPSBkYXRhVmlldy0+bGVuZ3RoKCk7CkBAIC0xODEs
OCArMTc5LDcgQEAgRW5jb2RlZEpTVmFsdWUgc2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIk5l
ZWQgYXQgbGVhc3QgdHdvIGFyZ3VtZW50ICh0aGUgYnl0ZU9mZnNldCBhbmQgdmFsdWUpIikpOwog
ICAgIAogICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgY29uc3QgdW5z
aWduZWQgZGF0YVNpemUgPSBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CiAgICAgdW5p
b24gewpAQCAtMTkxLDE1ICsxODgsMTMgQEAgRW5jb2RlZEpTVmFsdWUgc2V0RGF0YShFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgfSB1OwogCiAgICAgdS52YWx1ZSA9IHRvTmF0aXZlRnJvbVZhbHVlPEFk
YXB0b3I+KGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgIAogICAgIGJvb2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7CiAgICAgdW5zaWdu
ZWQgZWxlbWVudFNpemUgPSBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CiAgICAgaWYg
KGVsZW1lbnRTaXplID4gMSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMykgewogICAgICAg
ICBsaXR0bGVFbmRpYW4gPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhl
Yyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB9CiAgICAgCiAgICAg
dW5zaWduZWQgYnl0ZUxlbmd0aCA9IGRhdGFWaWV3LT5sZW5ndGgoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMDYzMzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEyLDExICs2MTIsOSBAQCB2b2lkIEpTRnVuY3Rpb246OnNldEZ1bmN0aW9u
TmFtZShFeGVjU3RhCiAgICAgICAgICAgICBuYW1lID0gbWFrZVN0cmluZygnWycsIFN0cmluZygm
dWlkKSwgJ10nKTsKICAgICB9IGVsc2UgewogICAgICAgICBKU1N0cmluZyoganNTdHIgPSB2YWx1
ZS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKICAgICAgICAgbmFtZSA9IGpzU3RyLT52YWx1ZShleGVjKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9CiAgICAgcmVp
ZnlOYW1lKHZtLCBleGVjLCBuYW1lKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24g
MjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDggKzE3NCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgICAgIHR5
cGVuYW1lIEFkYXB0b3I6OlR5cGUgdmFsdWUgPSB0b05hdGl2ZUZyb21WYWx1ZTxBZGFwdG9yPihl
eGVjLCBqc1ZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZmFsc2UpOwogCiAgICAgICAgIGlmIChpc05ldXRlcmVkKCkpIHsKICAgICAgICAgICAg
IHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVySGFzQmVlbkRldGFj
aGVkRXJyb3JNZXNzYWdlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3RvcklubGluZXMuaAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtODksMjQgKzg5LDIwIEBAIGlubGluZSBKU09iamVjdCogY29uc3Ry
dWN0R2VuZXJpY1R5cGVkQXIKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBzdG9yYWdlOwogICAg
IHdoaWxlICh0cnVlKSB7CiAgICAgICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9yU3RlcChleGVj
LCBpdGVyYXRvcik7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAKICAgICAgICAgaWYgKG5leHQuaXNGYWxzZSgpKQogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgSlNWYWx1ZSBuZXh0SXRlbSA9IGl0ZXJhdG9yVmFsdWUoZXhl
YywgbmV4dCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CiAKICAgICAgICAgc3RvcmFnZS5hcHBlbmQobmV4dEl0ZW0pOwogICAgIH0K
IAogICAgIFZpZXdDbGFzcyogcmVzdWx0ID0gVmlld0NsYXNzOjpjcmVhdGVVbmluaXRpYWxpemVk
KGV4ZWMsIHN0cnVjdHVyZSwgc3RvcmFnZS5zaXplKCkpOwotICAgIGlmICghcmVzdWx0KSB7Ci0g
ICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcmFnZS5z
aXplKCk7ICsraSkgewogICAgICAgICBpZiAoIXJlc3VsdC0+c2V0SW5kZXgoZXhlYywgaSwgc3Rv
cmFnZS5hdChpKSkpIHsKQEAgLTE2Miw4ICsxNTgsNyBAQCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0
cnVjdEdlbmVyaWNUeXBlZEFyCiAgICAgICAgICAgICBvYmplY3QtPmdldFByb3BlcnR5U2xvdChl
eGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGxlbmd0aFNsb3QpOwogCiAgICAgICAgICAg
ICBKU1ZhbHVlIGl0ZXJhdG9yRnVuYyA9IG9iamVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFt
ZXMtPml0ZXJhdG9yU3ltYm9sKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgICAgICAgICAgLy8gV2Ug
d291bGQgbGlrZSBub3QgdXNlIHRoZSBpdGVyYXRvciBhcyBpdCBpcyBwYWluZnVsbHkgc2xvdy4g
Rm9ydHVuYXRlbHksIHVubGVzcwogICAgICAgICAgICAgLy8gMSkgVGhlIGl0ZXJhdG9yIGlzIG5v
dCBhIGtub3duIGl0ZXJhdG9yLgpAQCAtMTgzLDE1ICsxNzgsMTMgQEAgaW5saW5lIEpTT2JqZWN0
KiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcgogCiAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3Qg
YXJndW1lbnRzOwogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZXJhdG9yID0gY2FsbChl
eGVjLCBpdGVyYXRvckZ1bmMsIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCBhcmd1bWVudHMp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdGcm9tSXRlcmF0b3I8
Vmlld0NsYXNzPihleGVjLCBzdHJ1Y3R1cmUsIGl0ZXJhdG9yKTsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoU2xvdC5pc1Vuc2V0KCkgPyAwIDogbGVuZ3RoU2xv
dC5nZXRWYWx1ZShleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMp
OwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOwogICAgICAgICB9CiAKICAgICAgICAgCkBAIC0yMzUsOCArMjI4LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RHZQogICAgIEludGVybmFs
RnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKTsK
ICAgICBTdHJ1Y3R1cmUqIHBhcmVudFN0cnVjdHVyZSA9IGZ1bmN0aW9uLT5nbG9iYWxPYmplY3Qo
KS0+dHlwZWRBcnJheVN0cnVjdHVyZShWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJj
bGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgcGFyZW50U3RydWN0dXJlKTsK
LSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBzaXplX3QgYXJnQ291bnQgPSBleGVjLT5hcmd1bWVu
dENvdW50KCk7CiAKQEAgLTI1MiwxMyArMjQ0LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0R2UKICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbGVuZ3RoID0gTnVsbG9w
dDsKICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZmlyc3RWYWx1ZSkgJiYg
YXJnQ291bnQgPiAxKSB7CiAgICAgICAgIG9mZnNldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpLnRvVUludDMyKGV4ZWMpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAK
ICAgICAgICAgaWYgKGFyZ0NvdW50ID4gMikgewogICAgICAgICAgICAgbGVuZ3RoID0gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMikudG9VSW50MzIoZXhlYyk7Ci0gICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgfQogCiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGVGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oCShyZXZpc2lvbiAy
MDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSw3
IEBAIGlubGluZSBKU0FycmF5QnVmZmVyVmlldyogc3BlY2llc0NvbnN0cnUKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9y
ID0gZXhlbXBsYXItPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3Ip
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAg
aWYgKGNvbnN0cnVjdG9yLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBkZWZhdWx0Q29u
c3RydWN0b3IoKTsKQEAgLTYyLDE1ICs2MSwxMyBAQCBpbmxpbmUgSlNBcnJheUJ1ZmZlclZpZXcq
IHNwZWNpZXNDb25zdHJ1CiAgICAgfQogCiAgICAgSlNWYWx1ZSBzcGVjaWVzID0gY29uc3RydWN0
b3IuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zcGVjaWVzU3ltYm9sKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIGlmIChzcGVj
aWVzLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBkZWZhdWx0Q29uc3RydWN0
b3IoKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0gY29uc3RydWN0KGV4ZWMsIHNwZWNpZXMsIGFy
Z3MsICJzcGVjaWVzIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBpZiAoSlNBcnJheUJ1ZmZlclZpZXcq
IHZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ocmVzdWx0KSkgewogICAg
ICAgICBpZiAoIXZpZXctPmlzTmV1dGVyZWQoKSkKQEAgLTExMiw4ICsxMDksNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgdW5zaWduZWQgb2Zmc2V0Owog
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgewogICAgICAgICBkb3VibGUgb2Zm
c2V0TnVtYmVyID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnRlZ2VyKGV4ZWMpOwot
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShv
ZmZzZXROdW1iZXIgPCAwKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNUmFuZ2VFcnJvcihl
eGVjLCBzY29wZSwgIk9mZnNldCBzaG91bGQgbm90IGJlIG5lZ2F0aXZlIik7CiAgICAgICAgIG9m
ZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om1pbihvZmZzZXROdW1iZXIsIHN0YXRp
Y19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSkpOwpA
QCAtMTM3LDggKzEzMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5
cGUKICAgICB9IGVsc2UKICAgICAgICAgbGVuZ3RoID0gc291cmNlQXJyYXktPmdldChleGVjLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwogCi0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKIAogICAgIHRoaXNPYmplY3QtPnNldChleGVjLCBvZmZzZXQsIHNvdXJjZUFycmF5
LCAwLCBsZW5ndGgsIENvcHlUeXBlOjpVbm9ic2VydmFibGUpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0xNTYsMTQgKzE1MSwxMSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAKICAgICBsb25nIGxlbmd0aCA9IHRoaXNP
YmplY3QtPmxlbmd0aCgpOwogICAgIGxvbmcgdG8gPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21T
dGFydE9yRW5kKGV4ZWMsIDAsIGxlbmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgbG9uZyBmcm9tID0gYXJn
dW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBlbmNvZGVkSlNW
YWx1ZSgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgIGxvbmcgZmluYWwgPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4
ZWMsIDIsIGxlbmd0aCwgbGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGlmIChmaW5hbCA8IGZyb20p
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dGhpc1ZhbHVlKCkpOwpAQCAt
MTk2LDggKzE4OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUK
ICAgICBKU1ZhbHVlIHZhbHVlVG9GaW5kID0gZXhlYy0+YXJndW1lbnQoMCk7CiAKICAgICB1bnNp
Z25lZCBpbmRleCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMSwg
bGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgaWYgKHRoaXNPYmplY3QtPmlz
TmV1dGVyZWQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUs
IHR5cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOwpAQCAtMjQyLDgg
KzIzMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKIAogICAg
IEpTVmFsdWUgdmFsdWVUb0ZpbmQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICB1bnNpZ25lZCBp
bmRleCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMSwgbGVuZ3Ro
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
ZW5jb2RlZEpTVmFsdWUoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVySGFz
QmVlbkRldGFjaGVkRXJyb3JNZXNzYWdlKTsKQEAgLTI3OCwxMiArMjY4LDEwIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CiAKICAgICAgICAgSlNTdHJpbmdKb2luZXIgam9pbmVy
KCpleGVjLCBzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAg
ICAgICAgICAgICBqb2luZXIuYXBwZW5kKCpleGVjLCB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNr
bHkoaSkpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqb2luZXIuam9pbigqZXhl
YykpOwogICAgIH07CkBAIC0yOTUsOCArMjgzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnZW5lcmljVHlwZQogICAgIH0KIAogICAgIEpTU3RyaW5nKiBzZXBhcmF0b3JTdHJpbmcg
PSBzZXBhcmF0b3JWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
CiAgICAgaWYgKHRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIHR5cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRF
cnJvck1lc3NhZ2UpOwpAQCAtMzMzLDggKzMyMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2VuZXJpY1R5cGUKICAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGZyb21Eb3VibGUpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGlmICh0
aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVySGFzQmVlbkRldGFjaGVkRXJyb3JNZXNzYWdl
KTsKQEAgLTQzOSwxMSArNDI1LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5l
cmljVHlwZQogICAgIHVuc2lnbmVkIHRoaXNMZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsK
IAogICAgIHVuc2lnbmVkIGJlZ2luID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVu
ZChleGVjLCAwLCB0aGlzTGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBlbmQgPSBhcmd1
bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIHRoaXNMZW5ndGgsIHRoaXNM
ZW5ndGgpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogCiAgICAgaWYgKHRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIHR5cGVkQXJyYXlCdWZm
ZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOwpAQCAtNDYxLDggKzQ0NSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpLT50eXBlZEFycmF5U3RydWN0dXJlKFZp
ZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKICAgICAgICAgcmV0dXJuIFZpZXdDbGFz
czo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiAgICAgfSk7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgQVNTRVJUKCFyZXN1bHQtPmlzTmV1dGVyZWQoKSk7
CiAgICAgaWYgKHRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSkKQEAgLTU2NSw4ICs1NDgsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgYXJncy5hcHBlbmQo
anNOdW1iZXIobGVuZ3RoKSk7CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0KGV4
ZWMsIHNwZWNpZXMsIGFyZ3MsICJzcGVjaWVzIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogCiAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcq
PihyZXN1bHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJl
dmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgxNiw4ICs4MTYsNyBAQCBpbmxpbmUgSlNBcnJh
eSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjCiAgICAgICAgIHN0cnVjdHVyZSA9IGdsb2JhbE9i
amVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMs
IEFycmF5V2l0aEFycmF5U3RvcmFnZSwgbmV3VGFyZ2V0KTsKICAgICBlbHNlCiAgICAgICAgIHN0
cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JQcm9maWxlRHVyaW5nQWxs
b2NhdGlvbihleGVjLCBwcm9maWxlLCBuZXdUYXJnZXQpOwotICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblBy
b2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUsIEpTQXJyYXk6OmNyZWF0ZShl
eGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpKTsKIH0KQEAgLTgzMiw4ICs4MzEs
NyBAQCBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlCiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlT
dHJ1Y3R1cmVGb3JQcm9maWxlRHVyaW5nQWxsb2NhdGlvbihleGVjLCBwcm9maWxlLCBuZXdUYXJn
ZXQpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAg
IHJldHVybiBBcnJheUFsbG9jYXRpb25Qcm9maWxlOjp1cGRhdGVMYXN0QWxsb2NhdGlvbkZvcihw
cm9maWxlLCBjb25zdHJ1Y3RBcnJheShleGVjLCBzdHJ1Y3R1cmUsIHZhbHVlcykpOwogfQogCkBA
IC04NDcsOCArODQ1LDcgQEAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0
ZQogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgcHJv
ZmlsZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBu
dWxscHRyKTsKICAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFs
bG9jYXRpb25Gb3IocHJvZmlsZSwgY29uc3RydWN0QXJyYXkoZXhlYywgc3RydWN0dXJlLCB2YWx1
ZXMsIGxlbmd0aCkpOwogfQogCkBAIC04NjIsOCArODU5LDcgQEAgaW5saW5lIEpTQXJyYXkqIGNv
bnN0cnVjdEFycmF5TmVnYXRpdmVJbgogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmlu
Z0FsbG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgY29uc3RydWN0QXJyYXlO
ZWdhdGl2ZUluZGV4ZWQoZXhlYywgc3RydWN0dXJlLCB2YWx1ZXMsIGxlbmd0aCkpOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY2MCw4ICs2NjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2Jh
bEZ1bmNFCiAgICAgfQogCiAgICAgU3RyaW5nIHMgPSB4LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgaWYgKHMuaXM4Qml0KCkpIHsKICAg
ICAgICAgTGl0ZXJhbFBhcnNlcjxMQ2hhcj4gcHJlcGFyc2VyKGV4ZWMsIHMuY2hhcmFjdGVyczgo
KSwgcy5sZW5ndGgoKSwgTm9uU3RyaWN0SlNPTik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc3OCw4ICs3NzgsNyBAQCB2b2lkIEpTTW9kdWxlUmVjb3JkOjppbnN0YW50
aWF0ZURlY2xhcmF0CiAgICAgICAgIEpTTW9kdWxlUmVjb3JkKiBpbXBvcnRlZE1vZHVsZSA9IGhv
c3RSZXNvbHZlSW1wb3J0ZWRNb2R1bGUoZXhlYywgaW1wb3J0RW50cnkubW9kdWxlUmVxdWVzdCk7
CiAgICAgICAgIGlmIChpbXBvcnRFbnRyeS5pc05hbWVzcGFjZSh2bSkpIHsKICAgICAgICAgICAg
IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBuYW1lc3BhY2VPYmplY3QgPSBpbXBvcnRlZE1vZHVs
ZS0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICAgICAgYm9vbCBwdXRS
ZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRjaHBvaW50
U2V0KG1vZHVsZUVudmlyb25tZW50LCBleGVjLCBpbXBvcnRFbnRyeS5sb2NhbE5hbWUsIG5hbWVz
cGFjZU9iamVjdCwgLyogc2hvdWxkVGhyb3dSZWFkT25seUVycm9yICovIGZhbHNlLCAvKiBpZ25v
cmVSZWFkT25seUVycm9ycyAqLyB0cnVlLCBwdXRSZXN1bHQpOwogICAgICAgICB9IGVsc2UgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJl
dmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsOCArMjUzLDcgQEAgTG9jYWw8VW5rbm93bj4g
U3RyaW5naWZpZXI6OnN0cmluZ2lmeShIYQogICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KG1fZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIExvY2FsPFVua25vd24+KHZtLCBqc051
bGwoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgTG9jYWw8VW5rbm93bj4odm0s
IGpzTnVsbCgpKSk7CiAKICAgICBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwgZW1wdHlQcm9w
ZXJ0eU5hbWUodm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyKTsKICAgICBvYmplY3Qt
PnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyLCB2YWx1ZS5n
ZXQoKSk7CkBAIC0yNjIsOCArMjYxLDcgQEAgTG9jYWw8VW5rbm93bj4gU3RyaW5naWZpZXI6OnN0
cmluZ2lmeShIYQogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogICAgIGlmIChhcHBlbmRTdHJp
bmdpZmllZFZhbHVlKHJlc3VsdCwgdmFsdWUuZ2V0KCksIG9iamVjdCwgZW1wdHlQcm9wZXJ0eU5h
bWUpICE9IFN0cmluZ2lmeVN1Y2NlZWRlZCkKICAgICAgICAgcmV0dXJuIExvY2FsPFVua25vd24+
KHZtLCBqc1VuZGVmaW5lZCgpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4odm0sIGpzTnVsbCgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBMb2NhbDxVbmtub3duPih2bSwganNOdWxsKCkpKTsKIAog
ICAgIHJldHVybiBMb2NhbDxVbmtub3duPih2bSwganNTdHJpbmcobV9leGVjLCByZXN1bHQudG9T
dHJpbmcoKSkpOwogfQpAQCAtMjgyLDggKzI4MCw3IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBT
dHJpbmdpZmllcjo6dG9KU08KICAgICAgICAgcmV0dXJuIHZhbHVlOwogCiAgICAgSlNWYWx1ZSB0
b0pTT05GdW5jdGlvbiA9IHNsb3QuZ2V0VmFsdWUobV9leGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50
b0pTT04pOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybiBqc051bGwoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkp
OwogICAgIHJldHVybiB0b0pTT05JbXBsKHZhbHVlLCB0b0pTT05GdW5jdGlvbiwgcHJvcGVydHlO
YW1lKTsKIH0KIApAQCAtMzA2LDggKzMwMyw3IEBAIFN0cmluZ2lmaWVyOjpTdHJpbmdpZnlSZXN1
bHQgU3RyaW5naWZpZXIKIAogICAgIC8vIENhbGwgdGhlIHRvSlNPTiBmdW5jdGlvbi4KICAgICB2
YWx1ZSA9IHRvSlNPTih2YWx1ZSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gU3RyaW5naWZ5RmFpbGVkOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFN0cmluZ2lmeUZhaWxlZCk7CiAKICAgICAvLyBDYWxs
IHRoZSByZXBsYWNlciBmdW5jdGlvbi4KICAgICBpZiAobV9yZXBsYWNlckNhbGxUeXBlICE9IENh
bGxUeXBlOjpOb25lKSB7CkBAIC0zMTUsOCArMzExLDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lm
eVJlc3VsdCBTdHJpbmdpZmllcgogICAgICAgICBhcmdzLmFwcGVuZChwcm9wZXJ0eU5hbWUudmFs
dWUobV9leGVjKSk7CiAgICAgICAgIGFyZ3MuYXBwZW5kKHZhbHVlKTsKICAgICAgICAgdmFsdWUg
PSBjYWxsKG1fZXhlYywgbV9yZXBsYWNlci5nZXQoKSwgbV9yZXBsYWNlckNhbGxUeXBlLCBtX3Jl
cGxhY2VyQ2FsbERhdGEsIGhvbGRlciwgYXJncyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5naWZ5RmFpbGVkOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBTdHJpbmdpZnlGYWlsZWQpOwogICAgIH0K
IAogICAgIGlmICgodmFsdWUuaXNVbmRlZmluZWQoKSB8fCB2YWx1ZS5pc1N5bWJvbCgpKSAmJiAh
aG9sZGVyLT5pbmhlcml0cyhKU0FycmF5OjppbmZvKCkpKQpAQCAtMzI5LDggKzMyNCw3IEBAIFN0
cmluZ2lmaWVyOjpTdHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXIKIAogICAgIHZhbHVlID0gdW53
cmFwQm94ZWRQcmltaXRpdmUobV9leGVjLCB2YWx1ZSk7CiAKLSAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gU3RyaW5naWZ5RmFpbGVkOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFN0cmluZ2lmeUZhaWxlZCk7CiAKICAgICBpZiAodmFs
dWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgaWYgKHZhbHVlLmlzVHJ1ZSgpKQpAQCAtMzgyLDE2
ICszNzYsMTMgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdpZmllcgogCiAg
ICAgYm9vbCBob2xkZXJTdGFja1dhc0VtcHR5ID0gbV9ob2xkZXJTdGFjay5pc0VtcHR5KCk7CiAg
ICAgbV9ob2xkZXJTdGFjay5hcHBlbmQoSG9sZGVyKHZtLCBtX2V4ZWMsIG9iamVjdCkpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBTdHJpbmdp
ZnlGYWlsZWQ7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgU3RyaW5naWZ5RmFpbGVk
KTsKICAgICBpZiAoIWhvbGRlclN0YWNrV2FzRW1wdHkpCiAgICAgICAgIHJldHVybiBTdHJpbmdp
ZnlTdWNjZWVkZWQ7CiAKICAgICBkbyB7Ci0gICAgICAgIHdoaWxlIChtX2hvbGRlclN0YWNrLmxh
c3QoKS5hcHBlbmROZXh0UHJvcGVydHkoKnRoaXMsIGJ1aWxkZXIpKSB7Ci0gICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBT
dHJpbmdpZnlGYWlsZWQ7Ci0gICAgICAgIH0KKyAgICAgICAgd2hpbGUgKG1faG9sZGVyU3RhY2su
bGFzdCgpLmFwcGVuZE5leHRQcm9wZXJ0eSgqdGhpcywgYnVpbGRlcikpCisgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBTdHJpbmdpZnlGYWlsZWQpOwogICAgICAgICBtX2hv
bGRlclN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICB9IHdoaWxlICghbV9ob2xkZXJTdGFjay5pc0Vt
cHR5KCkpOwogICAgIHJldHVybiBTdHJpbmdpZnlTdWNjZWVkZWQ7CkBAIC00NTksOCArNDUwLDcg
QEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgb2JqZWN0UHJvcGVydHlO
YW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKICAgICAgICAgICAgICAgICBt
X29iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhtX29iamVjdC5nZXQo
KSwgZXhlYywgb2JqZWN0UHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgbV9wcm9wZXJ0eU5hbWVzID0gb2JqZWN0
UHJvcGVydHlOYW1lcy5yZWxlYXNlRGF0YSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
bV9zaXplID0gbV9wcm9wZXJ0eU5hbWVzLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCk7CkBA
IC00OTMsOCArNDgzLDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJv
cAogICAgICAgICAgICAgICAgIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpbmRleCk7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgdmFsdWUgPSBqc1VuZGVmaW5lZCgpOwot
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBmYWxzZSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBBcHBlbmQgdGhlIHNlcGFyYXRvciBz
dHJpbmcuCkBAIC01MTEsOCArNTAwLDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBl
bmROZXh0UHJvcAogICAgICAgICBpZiAoIW1fb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Q
cm9wZXJ0eVNsb3QobV9vYmplY3QuZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHNsb3QuZ2V0
VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgICAgIHJvbGxCYWNrUG9pbnQgPSBidWls
ZGVyLmxlbmd0aCgpOwogCkBAIC02NDcsOCArNjM1LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUg
V2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IHNs
b3QuZ2V0VmFsdWUobV9leGVjLCBpbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGluVmFsdWUuaXNPYmplY3QoKSkg
ewpAQCAtNjY1LDggKzY1Miw3IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhK
U1ZhbHUKICAgICAgICAgICAgICAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVBy
b3BlcnR5QnlJbmRleChhcnJheSwgbV9leGVjLCBpbmRleFN0YWNrLmxhc3QoKSk7CiAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgo
bV9leGVjLCBpbmRleFN0YWNrLmxhc3QoKSwgZmlsdGVyZWRWYWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGpzTnVsbCgpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIEpTVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5sYXN0KCkrKzsKICAg
ICAgICAgICAgICAgICBnb3RvIGFycmF5U3RhcnRWaXNpdE1lbWJlcjsKICAgICAgICAgICAgIH0K
QEAgLTY4Miw4ICs2NjgsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNW
YWx1CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7CiAgICAgICAgICAgICAg
ICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkobV9leGVjLCBQcm9wZXJ0
eU5hbWVNb2RlOjpTdHJpbmdzKSk7CiAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9leGVjLCBwcm9wZXJ0eVN0YWNrLmxh
c3QoKSwgRW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsK
KyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjoKICAgICAg
ICAgICAgIEZBTExUSFJPVUdIOwpAQCAtNzA1LDggKzY5MCw3IEBAIE5FVkVSX0lOTElORSBKU1Zh
bHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGpz
VW5kZWZpbmVkKCk7CiAKICAgICAgICAgICAgICAgICAvLyBUaGUgaG9sZGVyIG1heSBiZSBtb2Rp
ZmllZCBieSB0aGUgcmV2aXZlciBmdW5jdGlvbiBzbyBhbnkgbG9va3VwIG1heSB0aHJvdwotICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKGluVmFsdWUu
aXNPYmplY3QoKSkgewogICAgICAgICAgICAgICAgICAgICBzdGF0ZVN0YWNrLmFwcGVuZChPYmpl
Y3RFbmRWaXNpdE1lbWJlcik7CkBAIC03MjQsOCArNzA4LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFs
dWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhv
ZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgbV9leGVjLCBwcm9wKTsKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+
cHV0KG9iamVjdCwgbV9leGVjLCBwcm9wLCBmaWx0ZXJlZFZhbHVlLCBzbG90KTsKLSAgICAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLmxhc3QoKSsr
OwogICAgICAgICAgICAgICAgIGdvdG8gb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjsKICAgICAgICAg
ICAgIH0KQEAgLTc2MSw4ICs3NDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpT
T05Qcm90b0Z1CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiSlNPTi5wYXJzZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyIikpKTsKICAgICBK
U1N0cmluZzo6U2FmZVZpZXcgc291cmNlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnZpZXcoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBKU1ZhbHVl
IHVuZmlsdGVyZWQ7CiAgICAgTG9jYWxTY29wZSBsb2NhbFNjb3BlKHZtKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIwNjMzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzYwLDE0ICszNjAsMTIgQEAgYm9vbCBvcmRpbmFyeVNldFNsb3coRXhlY1N0YXRl
KiBleGVjLCBKUwogCiAgICAgICAgIC8vIDkuMS45LjEtMiBMZXQgb3duRGVzYyBiZSA/IE8uW1tH
ZXRPd25Qcm9wZXJ0eV1dKFApLgogICAgICAgICBib29sIG93bkRlc2NyaXB0b3JGb3VuZCA9IGN1
cnJlbnQtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIG93bkRl
c2NyaXB0b3IpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBmYWxzZSk7CiAKICAgICAgICAgaWYgKCFvd25EZXNjcmlwdG9yRm91bmQpIHsKICAgICAgICAg
ICAgIC8vIDkuMS45LjEtMy1hIExldCBwYXJlbnQgYmUgPyBPLltbR2V0UHJvdG90eXBlT2ZdXSgp
LgogICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBjdXJyZW50LT5nZXRQcm90b3R5cGUo
dm0sIGV4ZWMpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKICAgICAgICAgICAgIC8vIDkuMS45LjEtMy1iIElmIHBh
cmVudCBpcyBub3QgbnVsbCwgdGhlbgogICAgICAgICAgICAgaWYgKCFwcm90b3R5cGUuaXNOdWxs
KCkpIHsKQEAgLTM5OCw4ICszOTYsNyBAQCBib29sIG9yZGluYXJ5U2V0U2xvdyhFeGVjU3RhdGUq
IGV4ZWMsIEpTCiAgICAgICAgIEpTT2JqZWN0KiByZWNlaXZlck9iamVjdCA9IGFzT2JqZWN0KHJl
Y2VpdmVyKTsKICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGV4aXN0aW5nRGVzY3JpcHRvcjsK
ICAgICAgICAgYm9vbCBleGlzdGluZ0Rlc2NyaXB0b3JGb3VuZCA9IHJlY2VpdmVyT2JqZWN0LT5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBleGlzdGluZ0Rlc2Ny
aXB0b3IpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBm
YWxzZSk7CiAKICAgICAgICAgLy8gOS4xLjkuMS00LWQgSWYgZXhpc3RpbmdEZXNjcmlwdG9yIGlz
IG5vdCB1bmRlZmluZWQsIHRoZW4KICAgICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvckZvdW5k
KSB7CkBAIC0xMjkwLDggKzEyODcsNyBAQCBib29sIEpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRo
Q3ljbGVDaGVjCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYm9vbCBpc0V4dGVuc2libGUg
PSB0aGlzLT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGZhbHNlKTsKIAogICAgIGlmICghaXNFeHRlbnNpYmxlKSB7CiAgICAgICAgIGlmIChz
aG91bGRUaHJvd0lmQ2FudFNldCkKQEAgLTE1MzMsOCArMTUyOSw3IEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIEpTVmFsdWUgY2FsbFRvUHJpbWkKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqZWN0LT5nZXQoZXhlYywg
cHJvcGVydHlOYW1lKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGlmIChmdW5jdGlvbi5pc1VuZGVmaW5lZCgp
ICYmIG1vZGUgPT0gVHlwZUhpbnRNb2RlOjpUYWtlc0hpbnQpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CkBAIC0xNTYwLDkgKzE1NTUsOCBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNhbGxUb1ByaW1pCiAgICAgfQogCiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGNvbnN0
X2Nhc3Q8SlNPYmplY3QqPihvYmplY3QpLCBjYWxsQXJncyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEFTU0VSVCghcmVzdWx0LmlzR2V0
dGVyU2V0dGVyKCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBzY29wZS5leGNlcHRpb24oKTsKICAgICBpZiAocmVzdWx0LmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiBtb2RlID09IFR5cGVIaW50TW9kZTo6RG9lc05vdFRha2VIaW50ID8g
SlNWYWx1ZSgpIDogdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiU3lt
Ym9sLnRvUHJpbWl0aXZlIHJldHVybmVkIGFuIG9iamVjdCIpKTsKICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtMTY5OSw4ICsxNjkzLDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmYXVsdEhhc0luc3RhbmNl
KEV4ZWNTdAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7CiAgICAgd2hp
bGUgKHRydWUpIHsKICAgICAgICAgSlNWYWx1ZSBvYmplY3RWYWx1ZSA9IG9iamVjdC0+Z2V0UHJv
dG90eXBlKHZtLCBleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAoIW9iamVjdFZhbHVlLmlzT2JqZWN0KCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG9iamVjdCA9IGFzT2JqZWN0KG9iamVj
dFZhbHVlKTsKQEAgLTE3MjMsMTIgKzE3MTYsMTAgQEAgdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVy
dHlOYW1lcyhKU09iamVjdAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0p
LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBKU1ZhbHVlIG5l
eHRQcm90byA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTE3MzksMTEgKzE3MzAsOSBAQCB2b2lkIEpTT2JqZWN0OjpnZXRQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBwcm90b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhwcm90
b3R5cGUsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICBuZXh0UHJvdG8gPSBwcm90b3R5
cGUtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgcHJvdG90eXBlID0gYXNPYmplY3QobmV4dFByb3Rv
KTsKQEAgLTE4NDMsOCArMTgzMiw3IEBAIGRvdWJsZSBKU09iamVjdDo6dG9OdW1iZXIoRXhlY1N0
YXRlKiBleGUKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHByaW1pdGl2ZSA9IHRvUHJpbWl0aXZl
KGV4ZWMsIFByZWZlck51bWJlcik7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkgLy8gc2hvdWxkIGJlIHBpY2tlZCB1cCBzb29uIGluIE5vZGVzLmNwcAotICAgICAgICByZXR1
cm4gMC4wOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDAuMCk7IC8vIHNob3VsZCBi
ZSBwaWNrZWQgdXAgc29vbiBpbiBOb2Rlcy5jcHAKICAgICByZXR1cm4gcHJpbWl0aXZlLnRvTnVt
YmVyKGV4ZWMpOwogfQogCkBAIC0xODUzLDggKzE4NDEsNyBAQCBKU1N0cmluZyogSlNPYmplY3Q6
OnRvU3RyaW5nKEV4ZWNTdGF0ZSogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBwcmltaXRpdmUg
PSB0b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJTdHJpbmcpOwotICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGpzRW1wdHlTdHJpbmcoZXhlYykpOwogICAgIHJl
dHVybiBwcmltaXRpdmUudG9TdHJpbmcoZXhlYyk7CiB9CiAKQEAgLTMwNzgsOCArMzA2NSw3IEBA
IGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkKICAgICBQcm9wZXJ0eURl
c2NyaXB0b3IgY3VycmVudDsKICAgICBib29sIGlzQ3VycmVudERlZmluZWQgPSBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBjdXJyZW50KTsKICAgICBib29sIGlz
RXh0ZW5zaWJsZSA9IHRoaXMtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICByZXR1cm4gdmFsaWRhdGVB
bmRBcHBseVByb3BlcnR5RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGlzRXh0
ZW5zaWJsZSwgZGVzY3JpcHRvciwgaXNDdXJyZW50RGVmaW5lZCwgY3VycmVudCwgdGhyb3dFeGNl
cHRpb24pOwogfQogCkBAIC0zMTgwLDEyICszMTY2LDEwIEBAIHZvaWQgSlNPYmplY3Q6OmdldEdl
bmVyaWNQcm9wZXJ0eU5hbWVzKEoKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZShtb2RlLCBKU09iamVjdFByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBKU1ZhbHVlIG5leHRQ
cm90byA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKICAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTMxOTYsMTEgKzMxODAsOSBAQCB2b2lkIEpTT2JqZWN0OjpnZXRHZW5l
cmljUHJvcGVydHlOYW1lcyhKCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBwcm90b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhwcm90b3R5
cGUsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICBuZXh0UHJvdG8gPSBwcm90b3R5cGUt
PmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgcHJvdG90eXBlID0gYXNPYmplY3QobmV4dFByb3RvKTsK
QEAgLTMyMTUsOCArMzE5Nyw3IEBAIEpTVmFsdWUgSlNPYmplY3Q6OmdldE1ldGhvZChFeGVjU3Rh
dGUqIGUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBK
U1ZhbHVlIG1ldGhvZCA9IGdldChleGVjLCBpZGVudCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIGlmICghbWV0aG9kLmlzQ2Vs
bCgpKSB7CiAgICAgICAgIGlmIChtZXRob2QuaXNVbmRlZmluZWRPck51bGwoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZp
c2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTcgKzQwLDE0IEBAIHZvaWQgY3JlYXRlTGlz
dEZyb21BcnJheUxpa2UoRXhlY1N0YXRlKiAKICAgICAKICAgICBWZWN0b3I8SlNWYWx1ZT4gcmVz
dWx0OwogICAgIEpTVmFsdWUgbGVuZ3RoUHJvcGVydHkgPSBhcnJheUxpa2VWYWx1ZS5nZXQoZXhl
Yywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKICAgICBkb3VibGUgbGVuZ3RoQXNEb3VibGUgPSBsZW5ndGhQcm9wZXJ0eS50
b0xlbmd0aChleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAg
ICBSRUxFQVNFX0FTU0VSVChsZW5ndGhBc0RvdWJsZSA+PSAwLjAgJiYgbGVuZ3RoQXNEb3VibGUg
PT0gc3RkOjp0cnVuYyhsZW5ndGhBc0RvdWJsZSkpOwogICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGhBc0RvdWJsZSk7CiAgICAgZm9yICh1aW50NjRfdCBp
bmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgICAgIEpTVmFsdWUgbmV4
dCA9IGFycmF5TGlrZVZhbHVlLmdldChleGVjLCBpbmRleCk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIAogICAgICAgICBSdW50aW1l
VHlwZSB0eXBlID0gcnVudGltZVR5cGVGb3JWYWx1ZShuZXh0KTsKICAgICAgICAgaWYgKCEodHlw
ZSAmIGxlZ2FsVHlwZXNGaWx0ZXIpKSB7CkBAIC05OSw4ICs5Niw3IEBAIEFMV0FZU19JTkxJTkUg
dHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2EKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBib29sIGZvdW5kID0g
Y29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4geyB9OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAg
ICAgcmV0dXJuIGNhbGxiYWNrKGZvdW5kLCBzbG90KTsKIH0KIApAQCAtMTE1LDE1ICsxMTEsMTMg
QEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eQogICAgICAgICBTdHJ1
Y3R1cmUmIHN0cnVjdHVyZSA9ICpzdHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVy
ZUlEKCkpOwogICAgICAgICBpZiAoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5n
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlOwog
ICAgICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0
UHJvdG90eXBlID09IGRlZmF1bHRHZXRQcm90b3R5cGUgfHwgc2xvdC5pbnRlcm5hbE1ldGhvZFR5
cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KSkKICAg
ICAgICAgICAgIHByb3RvdHlwZSA9IHN0cnVjdHVyZS5zdG9yZWRQcm90b3R5cGUoKTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBwcm90b3R5cGUgPSBvYmplY3QtPmdldFByb3RvdHlwZSh2
bSwgZXhlYyk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXByb3RvdHlwZS5p
c09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQ5LDE2ICsxNDMsMTQg
QEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXROb25JbmRleAogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUu
Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAg
IEpTVmFsdWUgcHJvdG90eXBlOwogICAgICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS5jbGFzc0lu
Zm8oKS0+bWV0aG9kVGFibGUuZ2V0UHJvdG90eXBlID09IGRlZmF1bHRHZXRQcm90b3R5cGUgfHwg
c2xvdC5pbnRlcm5hbE1ldGhvZFR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZTo6Vk1JbnF1aXJ5KSkKICAgICAgICAgICAgIHByb3RvdHlwZSA9IHN0cnVjdHVyZS5zdG9y
ZWRQcm90b3R5cGUoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBwcm90b3R5cGUgPSBv
YmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoIXByb3RvdHlwZS5pc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
bWlzZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDMsOCArMTAzLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
cwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAgICBT
dHJ1Y3R1cmUqIHByb21pc2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJj
bGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5wcm9t
aXNlU3RydWN0dXJlKCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBKU1Byb21pc2UqIHByb21p
c2UgPSBKU1Byb21pc2U6OmNyZWF0ZSh2bSwgcHJvbWlzZVN0cnVjdHVyZSk7CiAgICAgcHJvbWlz
ZS0+aW5pdGlhbGl6ZShleGVjLCBnbG9iYWxPYmplY3QsIGV4ZWMtPmFyZ3VtZW50KDApKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURl
ZmVycmVkLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw3
IEBAIEpTUHJvbWlzZURlZmVycmVkKiBKU1Byb21pc2VEZWZlcnJlZDo6Y3IKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGRlZmVycmVkID0g
bmV3UHJvbWlzZUNhcGFiaWxpdHkoZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnBy
b21pc2VDb25zdHJ1Y3RvcigpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKIAogICAgIEpTVmFsdWUgcHJvbWlzZSA9IGRlZmVycmVkLmdldChleGVjLCB2
bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5wcm9taXNlUHJpdmF0ZU5hbWUoKSk7CiAg
ICAgQVNTRVJUKHByb21pc2UuaW5oZXJpdHMoSlNQcm9taXNlOjppbmZvKCkpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5oCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI5LDgg
KzEyOSw3IEBAIGlubGluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHByb3BlcnQKICAgICAg
ICAgLy8gU28gZGlzYWJsZSBpbmRleGVkIHByb3BlcnR5IGVudW1lcmF0aW9uIHBoYXNlIGJ5IHNl
dHRpbmcgfGluZGV4ZWRMZW5ndGh8IHRvIDAuCiAgICAgICAgIGluZGV4ZWRMZW5ndGggPSAwOwog
ICAgICAgICBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMoYmFzZSwgZXhl
YywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIH0KIAogICAgIEFT
U0VSVChwcm9wZXJ0eU5hbWVzLnNpemUoKSA8IFVJTlQzMl9NQVgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw4ICs1OCw3
IEBAIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXQKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBwcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKGV4ZWMsIGl0ZXJhdGVkT2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICByZXR1cm4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
cjo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgaXRlcmF0ZWRPYmplY3QsIGVudW1lcmF0b3IpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkocmV2
aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDYsMTMgKzIwNiwxMSBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgaXNVbnNjb3BhYmxlKEV4ZWNTdGF0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpT
VmFsdWUgdW5zY29wYWJsZXMgPSBvYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkudW5zY29wYWJsZXNTeW1ib2wpOwotICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGlmICghdW5zY29wYWJsZXMuaXNPYmplY3QoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEpTVmFsdWUgYmxvY2tlZCA9IGpzQ2FzdDxKU09iamVj
dCo+KHVuc2NvcGFibGVzKS0+Z2V0KGV4ZWMsIGlkZW50KTsKLSAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKIAogICAgIHJldHVybiBibG9ja2VkLnRv
Qm9vbGVhbihleGVjKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsOCArNzgsNyBAQCBib29s
IEpTU3RyaW5nOjplcXVhbFNsb3dDYXNlKEV4ZWNTdGF0ZSogCiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFN0cmluZyBzdHIxID0gdmFsdWUoZXhlYyk7CiAg
ICAgU3RyaW5nIHN0cjIgPSBvdGhlci0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICByZXR1cm4gV1RGOjplcXVhbCgqc3RyMS5pbXBs
KCksICpzdHIyLmltcGwoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA4LDggKzEwOCw3IEBAIEpTVmFsdWUgSlNTdHJpbmdKb2luZXI6OmpvaW4oRXhlY1N0
YXRlJiAKICAgICBBU1NFUlQobV9zdHJpbmdzLnNpemUoKSA8PSBtX3N0cmluZ3MuY2FwYWNpdHko
KSk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBqb2luZWRMZW5ndGgoc3RhdGUpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBp
ZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoJnN0YXRlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCShy
ZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFs
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMiBNYXRoaWFzIEJ5bmVucyAobWF0aGlhc0BxaXdpLmJlKQogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dApAQCAtNTg0LDggKzU4NCw3IEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlw
ZT46OnBhcnNlKFAKICAgICAgICAgICAgIHN0YXJ0UGFyc2VBcnJheToKICAgICAgICAgICAgIGNh
c2UgU3RhcnRQYXJzZUFycmF5OiB7CiAgICAgICAgICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBj
b25zdHJ1Y3RFbXB0eUFycmF5KG1fZXhlYywgMCk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVl
KCkpOwogICAgICAgICAgICAgICAgIG9iamVjdFN0YWNrLmFwcGVuZChhcnJheSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBkb1BhcnNlQXJyYXlTdGFydEV4cHJlc3Npb246CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQmFzZS5oCShyZXZpc2lvbiAyMDYzMzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc1LDggKzc1LDcgQEAgcHVibGljOgogICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAg
ICAgSGFzaE1hcEltcGxUeXBlKiBpbXBsID0gSGFzaE1hcEltcGxUeXBlOjpjcmVhdGUoZXhlYywg
dm0pOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
ICAgICAgICBtX21hcC5zZXQodm0sIHRoaXMsIGltcGwpOwogICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxOCArNjEsMTUgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgp
OwogICAgIFN0cnVjdHVyZSogbWFwU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRl
U3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+
bWFwU3RydWN0dXJlKCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBKU01hcCogbWFwID0gSlNN
YXA6OmNyZWF0ZShleGVjLCB2bSwgbWFwU3RydWN0dXJlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChpdGVyYWJs
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1h
cCk7CiAKICAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rpb24gPSBtYXAtPkpTT2JqZWN0OjpnZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNldCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAog
ICAgIENhbGxEYXRhIGFkZGVyRnVuY3Rpb25DYWxsRGF0YTsKICAgICBDYWxsVHlwZSBhZGRlckZ1
bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShhZGRlckZ1bmN0aW9uLCBhZGRlckZ1bmN0aW9u
Q2FsbERhdGEpOwpAQCAtODcsMTIgKzg0LDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnMKICAgICAgICAgfQogCiAgICAgICAgIEpTVmFsdWUga2V5ID0gbmV4dEl0
ZW0uZ2V0KGV4ZWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigwKSk7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG5leHRJdGVtLmdldChleGVjLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMSkpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChr
ZXkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5j
cHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01h
dGhPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgsIDIwMTMsIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0x
NjUsOCArMTY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdQog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIHVpbnQzMl90IHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50
MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKGNsejMyKHZhbHVlKSkpOwogfQogCkBAIC0xOTUsOCArMTk0LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdQogICAgIGFyZ3MucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShhcmdzQ291bnQpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzQ291
bnQ7ICsraSkgewogICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChleGVjLT51bmNoZWNrZWRB
cmd1bWVudChpKS50b051bWJlcihleGVjKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgICAgIGlmIChzdGQ6OmlzaW5mKGFyZ3NbaV0pKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcigrc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjppbmZpbml0eSgpKSk7CiAgICAgICAgIG1heCA9IHN0ZDo6bWF4KGZhYnMoYXJnc1tpXSksIG1h
eCk7CkBAIC0yOTksOCArMjk3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRo
UHJvdG9GdQogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIGludDMyX3QgbGVmdCA9IGV4ZWMtPmFyZ3VtZW50KDAp
LnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW50MzJfdCByaWdodCA9IGV4
ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcihsZWZ0ICogcmlnaHQpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlTG9hZGVy
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDEyICsxMTIsMTAgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZQogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGNvbnN0IElkZW50aWZpZXIgbW9kdWxlS2V5ID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogCiAgICAgU3RyaW5nIHNvdXJjZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgU291cmNlQ29k
ZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzb3VyY2UsIG1vZHVsZUtleS5pbXBsKCkpOwogCkBA
IC0xNDksOCArMTQ3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2Fk
ZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
YywgbnVsbHB0cikpOwogCiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJh
eShleGVjLCBudWxscHRyLCBtb2R1bGVSZWNvcmQtPnJlcXVlc3RlZE1vZHVsZXMoKS5zaXplKCkp
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBzaXplX3QgaSA9IDA7CiAgICAgZm9yIChhdXRvJiBrZXkg
OiBtb2R1bGVSZWNvcmQtPnJlcXVlc3RlZE1vZHVsZXMoKSkKICAgICAgICAgcmVzdWx0LT5wdXRE
aXJlY3RJbmRleChleGVjLCBpKyssIGpzU3RyaW5nKGV4ZWMsIGtleS5nZXQoKSkpOwpAQCAtMTcw
LDggKzE2Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKICAg
ICAgICAgZGF0YUxvZygiTG9hZGVyIFtsaW5rXSAiLCBtb2R1bGVSZWNvcmQtPm1vZHVsZUtleSgp
LCAiXG4iKTsKIAogICAgIG1vZHVsZVJlY29yZC0+bGluayhleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2
ZUVycm9yQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjcsOCArNjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGVycHJl
dGVyCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFs
dWUgbWVzc2FnZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1
Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBl
eGVjLT5uZXdUYXJnZXQoKSwganNDYXN0PE5hdGl2ZUVycm9yQ29uc3RydWN0b3IqPihleGVjLT5j
YWxsZWUoKSktPmVycm9yU3RydWN0dXJlKCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBBU1NF
UlQoZXJyb3JTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0
YW5jZTo6Y3JlYXRlKGV4ZWMsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdlLCBudWxscHRyLCBUeXBl
Tm90aGluZywgZmFsc2UpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODksOCArODksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IGRvdWJsZSBuID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMCkudG9OdW1iZXIoZXhlYykgOiAwOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFy
Z2V0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bnVtYmVyT2JqZWN0U3RydWN0dXJl
KCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIE51bWJlck9iamVjdCogb2JqZWN0ID0gTnVt
YmVyT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKICAgICBvYmplY3QtPnNl
dEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwganNOdW1iZXIobikpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsOCArMTMwLDcgQEAgc3RhdGljIEFM
V0FZU19JTkxJTkUgSlNPYmplY3QqIGNvbnN0cnVjdAogICAgIGlmIChuZXdUYXJnZXQgJiYgbmV3
VGFyZ2V0ICE9IG9iamVjdENvbnN0cnVjdG9yKSB7CiAgICAgICAgIC8vIGEuIFJldHVybiA/IE9y
ZGluYXJ5Q3JlYXRlRnJvbUNvbnN0cnVjdG9yKE5ld1RhcmdldCwgIiVPYmplY3RQcm90b3R5cGUl
IikuCiAgICAgICAgIFN0cnVjdHVyZSogb2JqZWN0U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlv
bjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgbmV3VGFyZ2V0LCBnbG9iYWxPYmplY3Qt
Pm9iamVjdFN0cnVjdHVyZUZvck9iamVjdENvbnN0cnVjdG9yKCkpOwotICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICByZXR1
cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgb2JqZWN0U3RydWN0dXJlKTsKICAgICB9CiAK
QEAgLTE3Miw4ICsxNzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENv
bnN0CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDAp
LnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShvYmplY3QtPmdldFByb3RvdHlwZShleGVjLT52bSgpLCBleGVjKSk7CiB9CiAK
QEAgLTE5MSw4ICsxODksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENv
bnN0CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAg
IEpTT2JqZWN0KiBvYmplY3QgPSBvYmplY3RWYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKG9iamVjdFZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKIAogICAgIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQgPSB0cnVlOwogICAg
IGJvb2wgZGlkU2V0UHJvdG90eXBlID0gb2JqZWN0LT5zZXRQcm90b3R5cGUodm0sIGV4ZWMsIHBy
b3RvVmFsdWUsIHNob3VsZFRocm93SWZDYW50U2V0KTsKQEAgLTIwNyw4ICsyMDQsNyBAQCBKU1Zh
bHVlIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlECiAgICAgUHJvcGVydHlEZXNjcmlw
dG9yIGRlc2NyaXB0b3I7CiAgICAgaWYgKCFvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1Zh
bHVlKCkpOwogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdE9iamVjdEZyb21Qcm9w
ZXJ0eURlc2NyaXB0b3IoZXhlYywgZGVzY3JpcHRvcik7CiAgICAgaWYgKCFyZXN1bHQpCkBAIC0y
MjIsMTggKzIxOCwxNSBAQCBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlE
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFByb3BlcnR5
TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5
bWJvbHMpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVy
dGllc01vZGU6OkluY2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgSlNPYmplY3QqIGRlc2NyaXB0b3JzID0gY29uc3Ry
dWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogcHJv
cGVydGllcykgewogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICAg
ICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgICAg
IGlmICghZGlkR2V0RGVzY3JpcHRvcikKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjU1LDEx
ICsyNDgsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0
KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBl
eGVjLT5hcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3RDb25zdHJ1Y3RvckdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSkpOwogfQogCkBAIC0y
NjgsOCArMjU5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09i
amVjdChleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUob2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGV4ZWMsIG9i
amVjdCkpOwogfQogCkBAIC0yNzksOCArMjY5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVj
LT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKG93blByb3BlcnR5S2V5cyhleGVjLCBvYmplY3QsIFByb3BlcnR5
TmFtZU1vZGU6OlN0cmluZ3MsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKIH0K
IApAQCAtMjkwLDggKzI3OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
Q29uc3QKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQo
MCkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShvd25Qcm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpT
eW1ib2xzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CiB9CiAKQEAgLTMwMSw4
ICsyODksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0
KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob3du
UHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwogfQogCkBAIC0zMTEsOCArMjk4LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvd25FbnVtZXJhYgogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG93blByb3BlcnR5S2V5
cyhleGVjLCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBEb250
RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKSk7CiB9CiAKQEAgLTMzMSw0MSArMzE3LDM2IEBA
IGJvb2wgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKIAogICAgIGlmIChkZXNj
cmlwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFi
bGUpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBkZXNjcmlwdGlvbi0+Z2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5lbnVtZXJhYmxlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBkZXNjLnNldEVudW1lcmFi
bGUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKLSAgICB9IGVsc2UgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZQorICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKICAgICBpZiAoZGVzY3JpcHRp
b24tPmhhc1Byb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25maWd1cmFibGUp
KSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBkZXNjcmlwdGlvbi0+Z2V0KGV4ZWMsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5jb25maWd1cmFibGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIGRlc2Muc2V0Q29uZmlndXJh
YmxlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7Ci0gICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgSlNWYWx1ZSB2YWx1
ZTsKICAgICBpZiAoZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS52YWx1ZSkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2NyaXB0aW9uLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBkZXNjLnNldFZh
bHVlKHZhbHVlKTsKLSAgICB9IGVsc2UgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZQorICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKICAgICBpZiAoZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS53cml0YWJsZSkpIHsKICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGRlc2NyaXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndy
aXRhYmxlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZmFsc2UpOwogICAgICAgICBkZXNjLnNldFdyaXRhYmxlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7
Ci0gICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOwogCiAgICAgaWYgKGRlc2NyaXB0aW9uLT5oYXNQcm9wZXJ0eShleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuZ2V0KSkgewogICAgICAgICBKU1ZhbHVlIGdldCA9IGRlc2NyaXB0
aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmdldCk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKCFn
ZXQuaXNVbmRlZmluZWQoKSkgewogICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAg
ICAgICAgICBpZiAoZ2V0Q2FsbERhdGEoZ2V0LCBjYWxsRGF0YSkgPT0gQ2FsbFR5cGU6Ok5vbmUp
IHsKQEAgLTM3NCwxMyArMzU1LDEyIEBAIGJvb2wgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0
YXRlKiBleGUKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBkZXNjLnNldEdldHRl
cihnZXQpOwotICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlCisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGZhbHNlKTsKIAogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNldCkpIHsKICAgICAgICAgSlNWYWx1ZSBzZXQgPSBk
ZXNjcmlwdGlvbi0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAg
IGlmICghc2V0LmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRh
OwogICAgICAgICAgICAgaWYgKGdldENhbGxEYXRhKHNldCwgY2FsbERhdGEpID09IENhbGxUeXBl
OjpOb25lKSB7CkBAIC0zODksOCArMzY5LDggQEAgYm9vbCB0b1Byb3BlcnR5RGVzY3JpcHRvcihF
eGVjU3RhdGUqIGV4ZQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGRlc2Muc2V0
U2V0dGVyKHNldCk7Ci0gICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgaWYgKCFkZXNjLmlzQWNjZXNzb3JEZXNjcmlw
dG9yKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDE2LDggKzM5Niw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUHJvcGVydGllcyBjYW4gb25seSBi
ZSBkZWZpbmVkIG9uIE9iamVjdHMuIikpOwogICAgIEpTT2JqZWN0KiBvYmogPSBhc09iamVjdChl
eGVjLT5hcmd1bWVudCgwKSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVu
dCgxKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIFByb3BlcnR5
RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGF1dG8gc3VjY2VzcyA9IHRvUHJvcGVydHlEZXNj
cmlwdG9yKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpLCBkZXNjcmlwdG9yKTsKICAgICBBU1NFUlQo
IXNjb3BlLmV4Y2VwdGlvbigpID09IHN1Y2Nlc3MpOwpAQCAtNDM3LDE1ICs0MTYsMTMgQEAgc3Rh
dGljIEpTVmFsdWUgZGVmaW5lUHJvcGVydGllcyhFeGVjU3RhdAogCiAgICAgUHJvcGVydHlOYW1l
QXJyYXkgcHJvcGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3lt
Ym9scyk7CiAgICAgYXNPYmplY3QocHJvcGVydGllcyktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3du
UHJvcGVydHlOYW1lcyhhc09iamVjdChwcm9wZXJ0aWVzKSwgZXhlYywgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBzaXplX3Qg
bnVtUHJvcGVydGllcyA9IHByb3BlcnR5TmFtZXMuc2l6ZSgpOwogICAgIFZlY3RvcjxQcm9wZXJ0
eURlc2NyaXB0b3I+IGRlc2NyaXB0b3JzOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIG1hcmtC
dWZmZXI7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyBpKyspIHsK
ICAgICAgICAgSlNWYWx1ZSBwcm9wID0gcHJvcGVydGllcy0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFt
ZXNbaV0pOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBKU1ZhbHVlKCkpOwogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAg
ICAgICAgaWYgKCF0b1Byb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wLCBkZXNjcmlwdG9yKSkK
ICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKQEAgLTQ2NSw4ICs0NDIsNyBAQCBzdGF0aWMg
SlNWYWx1ZSBkZWZpbmVQcm9wZXJ0aWVzKEV4ZWNTdGF0CiAgICAgICAgIGlmIChleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuaXNQcml2YXRlTmFtZShwcm9wZXJ0eU5hbWUpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0
eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcnNbaV0sIHRydWUpOwotICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkp
OwogICAgIH0KICAgICByZXR1cm4gb2JqZWN0OwogfQpAQCAtNTIyLDggKzQ5OCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAvLyAyLiBGb3IgZWFjaCBu
YW1lZCBvd24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJv
cGVydGllcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7CiAgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVj
LCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5j
bHVkZSkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gcHJvcGVydGllcy5lbmQoKTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gcHJvcGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytp
dGVyKSB7CiAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gKml0ZXI7CkBAIC01Mzcs
MTQgKzUxMiwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAg
ICAgICAgIGRlc2Muc2V0Q29uZmlndXJhYmxlKGZhbHNlKTsKICAgICAgICAgLy8gYy4gQ2FsbCB0
aGUgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggUCwgZGVz
YywgYW5kIHRydWUgYXMgYXJndW1lbnRzLgogICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZt
KS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2MsIHRy
dWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB9CiAKICAgICAvLyAzLiBTZXQgdGhl
IFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8gdG8gZmFsc2UuCiAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZSh2bSktPnByZXZlbnRFeHRlbnNpb25zKG9iamVjdCwgZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogCiAgICAgLy8gNC4gUmV0dXJuIE8uCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShvYmopOwpAQCAtNTYzLDggKzUzNiw3IEBAIEpTT2JqZWN0KiBvYmplY3RDb25z
dHJ1Y3RvckZyZWV6ZShFeGVjU3QKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVy
dHkgbmFtZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBQ
cm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7CiAgICAgb2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBF
bnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBvYmplY3Q7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgUHJvcGVydHlOYW1l
QXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7CiAgICAgZm9yIChQ
cm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHByb3BlcnRpZXMuYmVnaW4o
KTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFt
ZSA9ICppdGVyOwpAQCAtNTgyLDE0ICs1NTQsMTIgQEAgSlNPYmplY3QqIG9iamVjdENvbnN0cnVj
dG9yRnJlZXplKEV4ZWNTdAogICAgICAgICBkZXNjLnNldENvbmZpZ3VyYWJsZShmYWxzZSk7CiAg
ICAgICAgIC8vIGQuIENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRo
b2Qgb2YgTyB3aXRoIFAsIGRlc2MsIGFuZCB0cnVlIGFzIGFyZ3VtZW50cy4KICAgICAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjLCB0cnVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIH0KIAogICAgIC8vIDMuIFNldCB0aGUgW1tF
eHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyB0byBmYWxzZS4KICAgICBvYmplY3Qt
Pm1ldGhvZFRhYmxlKHZtKS0+cHJldmVudEV4dGVuc2lvbnMob2JqZWN0LCBleGVjKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIC8vIDQuIFJl
dHVybiBPLgogICAgIHJldHVybiBvYmplY3Q7CkBAIC02MDQsOCArNTc0LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIGlmICghb2JqLmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKICAgICBKU09iamVjdCogcmVz
dWx0ID0gb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoZXhlYywgYXNPYmplY3Qob2JqKSk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApA
QCAtNjM2LDggKzYwNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29u
c3QKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAg
ICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzQW5kU3ltYm9scyk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blBy
b3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBQ
cm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQoKTsK
ICAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJvcGVy
dGllcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIElkZW50aWZpZXIg
cHJvcGVydHlOYW1lID0gKml0ZXI7CkBAIC02NTUsOCArNjIzLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIC8vIDMuIElmIHRoZSBbW0V4dGVuc2libGVd
XSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPIGlzIGZhbHNlLCB0aGVuIHJldHVybiB0cnVlLgogICAg
IC8vIDQuIE90aGVyd2lzZSwgcmV0dXJuIGZhbHNlLgogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0g
b2JqZWN0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFpc0V4dGVuc2libGUpKTsKIH0KIApAQCAtNjc3
LDggKzY0NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAg
ICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAgICAgUHJv
cGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdz
QW5kU3ltYm9scyk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5
TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBQcm9wZXJ0
eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQoKTsKICAgICBm
b3IgKFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJvcGVydGllcy5i
ZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIElkZW50aWZpZXIgcHJvcGVy
dHlOYW1lID0gKml0ZXI7CkBAIC02OTcsOCArNjYzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdAogICAgIC8vIDMuIElmIHRoZSBbW0V4dGVuc2libGVdXSBpbnRl
cm5hbCBwcm9wZXJ0eSBvZiBPIGlzIGZhbHNlLCB0aGVuIHJldHVybiB0cnVlLgogICAgIC8vIDQu
IE90aGVyd2lzZSwgcmV0dXJuIGZhbHNlLgogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gb2JqZWN0
LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKCFpc0V4dGVuc2libGUpKTsKIH0KIApAQCAtNzExLDggKzY3
Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3Qob2JqKTsKICAgICBib29sIGlzRXh0ZW5zaWJsZSA9IG9iamVjdC0+
aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbihpc0V4dGVuc2libGUpKTsKIH0KIApAQCAtNzI4LDEyICs2OTIs
MTAgQEAgSlNBcnJheSogb3duUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhlYwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBw
cm9wZXJ0aWVzKGV4ZWMsIHByb3BlcnR5TmFtZU1vZGUpOwogICAgIG9iamVjdC0+bWV0aG9kVGFi
bGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51
bWVyYXRpb25Nb2RlKGRvbnRFbnVtUHJvcGVydGllc01vZGUpKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIEpTQXJyYXkqIGtleXMgPSBjb25z
dHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOwogCiAgICAgc3dpdGNoIChwcm9wZXJ0eU5hbWVNb2RlKSB7CiAgICAg
Y2FzZSBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDIwNjMz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtMTAzLDggKzEwMyw3IEBAIGlubGluZSBKU09iamVjdCogY29uc3RydWN0T2JqZWN0
RnJvbVByb3AKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogZGVzY3JpcHRpb24gPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKIAogICAgIGlmICghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigp
KSB7CiAgICAgICAgIGRlc2NyaXB0aW9uLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnZhbHVlLCBkZXNjcmlwdG9yLnZhbHVlKCkgPyBkZXNjcmlwdG9yLnZhbHVlKCkgOiBqc1VuZGVm
aW5lZCgpLCAwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUs
OCArOTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAKICAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJp
Y3RNb2RlKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJv
cGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBKU09iamVjdCogdGhp
c09iamVjdCA9IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKICAgICBpZiAoVU5MSUtFTFkoIXRo
aXNPYmplY3QpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CkBA
IC0xMTEsOCArMTEwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90
bwogCiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRl
cm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKICAgICBib29sIHJlc3VsdCA9IHRoaXNP
YmplY3QtPmhhc093blByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKIAogICAgIGhhc093blByb3BlcnR5Q2FjaGUtPnRyeUFkZCh2bSwgc2xv
dCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCByZXN1bHQpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKHJlc3VsdCkpOwpAQCAtMTMyLDggKzEzMCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKIAogICAgIEpTVmFsdWUgdiA9IGFzT2JqZWN0KGV4
ZWMtPmFyZ3VtZW50KDApKS0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBpZiAoIXYuaXNPYmplY3QoKSkKQEAg
LTE0MSw4ICsxMzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3Rv
CiAgICAgICAgIGlmICh2ID09IHRoaXNPYmopCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSk7CiAgICAgICAgIHYgPSBhc09iamVjdCh2KS0+Z2V0UHJv
dG90eXBlKHZtLCBleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQog
fQogCkBAIC0xNTIsOCArMTQ4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmpl
Y3RQcm90bwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0
cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBK
U1ZhbHVlIGdldCA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwpA
QCAtMTYxLDggKzE1Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJv
dG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiaW52YWxpZCBnZXR0ZXIgdXNhZ2UiKSk7CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGRlc2NyaXB0
b3Iuc2V0R2V0dGVyKGdldCk7CkBAIC0xODEsOCArMTc1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCku
dG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAKICAgICBKU1ZhbHVlIHNldCA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIENhbGxE
YXRhIGNhbGxEYXRhOwpAQCAtMTkwLDggKzE4Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0UHJvdG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiaW52YWxpZCBzZXR0ZXIgdXNhZ2UiKSk7CiAKICAgICBhdXRv
IHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9y
OwogICAgIGRlc2NyaXB0b3Iuc2V0U2V0dGVyKHNldCk7CkBAIC0yMTAsMTIgKzIwMiwxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBl
eGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+
YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
CiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKICAgICBpZiAodGhpc09iamVjdC0+Z2V0UHJv
cGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsKQEAgLTI0MCwxMiArMjMwLDEw
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVj
dCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChl
eGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBl
eGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6Oklu
dGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwogICAgIGlmICh0aGlzT2JqZWN0LT5n
ZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkgewpAQCAtMjcwLDEyICsy
NTgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT50aGlzVmFsdWUo
KS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBib29sIGVu
dW1lcmFibGUgPSB0aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihlbnVtZXJhYmxlKSk7CkBAIC0yODksOCAr
Mjc1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogCiAgICAg
Ly8gMS4gTGV0IE8gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvT2JqZWN0IHBhc3NpbmcgdGhl
IHRoaXMgdmFsdWUgYXMgdGhlIGFyZ3VtZW50LgogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVj
LT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIC8vIDIuIExldCB0b1N0cmluZyBiZSB0aGUgcmVz
dWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gcGFzc2luZyAi
dG9TdHJpbmciIGFzIHRoZSBhcmd1bWVudC4KICAgICBKU1ZhbHVlIHRvU3RyaW5nID0gb2JqZWN0
LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nKTsKQEAgLTMyNSw4ICsz
MTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgdG9T
dHJpbmdUYWdTeW1ib2wsIFsmXSAoYm9vbCBmb3VuZCwgUHJvcGVydHlTbG90JiB0b1N0cmluZ1Rh
Z1Nsb3QpIC0+IEpTVmFsdWUgewogICAgICAgICBpZiAoZm91bmQpIHsKICAgICAgICAgICAgIEpT
VmFsdWUgc3RyaW5nVGFnID0gdG9TdHJpbmdUYWdTbG90LmdldFZhbHVlKGV4ZWMsIHRvU3RyaW5n
VGFnU3ltYm9sKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAgaWYgKHN0cmlu
Z1RhZy5pc1N0cmluZygpKSB7CiAgICAgICAgICAgICAgICAgSlNSb3BlU3RyaW5nOjpSb3BlQnVp
bGRlciByb3BlQnVpbGRlcih2bSk7CiAgICAgICAgICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5k
KHZtLnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmdTdGFydCgpKTsKQEAgLTM0MCw4ICszMjQsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgICAgIH0KIAog
ICAgICAgICBTdHJpbmcgdGFnID0gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSkt
PnRvU3RyaW5nTmFtZSh0aGlzT2JqZWN0LCBleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgIFN0cmluZyBu
ZXdTdHJpbmcgPSBXVEY6OnRyeU1ha2VTdHJpbmcoIltvYmplY3QgIiwgV1RGTW92ZSh0YWcpLCAi
XSIpOwogICAgICAgICBpZiAoIW5ld1N0cmluZykKICAgICAgICAgICAgIHJldHVybiB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NiwxMSArNDYsOSBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBqc0FkZFNsb3dDYXNlKENhbGxGCiAg
ICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHAxID0gdjEudG9QcmltaXRpdmUoY2FsbEZyYW1l
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAg
ICAgSlNWYWx1ZSBwMiA9IHYyLnRvUHJpbWl0aXZlKGNhbGxGcmFtZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgaWYgKHAxLmlzU3Ry
aW5nKCkpCiAgICAgICAgIHJldHVybiBqc1N0cmluZyhjYWxsRnJhbWUsIGFzU3RyaW5nKHAxKSwg
cDIudG9TdHJpbmcoY2FsbEZyYW1lKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAJKHJldmlzaW9uIDIwNjMzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc5LDggKzc5LDcgQEAgR2V0dGVyU2V0dGVyKiBQcm9wZXJ0eURl
c2NyaXB0b3I6OnNsb3dHZQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRl
ciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QpOwotICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIGlmIChtX2dldHRlciAmJiAh
bV9nZXR0ZXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgZ2V0dGVyU2V0dGVyLT5zZXRHZXR0ZXIo
dm0sIGdsb2JhbE9iamVjdCwganNDYXN0PEpTT2JqZWN0Kj4obV9nZXR0ZXIpKTsKICAgICBpZiAo
bV9zZXR0ZXIgJiYgIW1fc2V0dGVyLmlzVW5kZWZpbmVkKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm94eUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MjA2MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDE2ICs2NCwxMyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtlCiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBhcmdzLmF0KDAp
OwogICAgIEpTVmFsdWUgaGFuZGxlciA9IGFyZ3MuYXQoMSk7CiAgICAgUHJveHlPYmplY3QqIHBy
b3h5ID0gUHJveHlPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIHRhcmdldCwgaGFuZGxlcik7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIFByb3h5UmV2b2tl
KiByZXZva2UgPSBQcm94eVJldm9rZTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPnByb3h5UmV2b2tlU3RydWN0dXJlKCksIHByb3h5KTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBtYWtlSWRl
bnRpZmllcih2bSwgInByb3h5IiksIHByb3h5LCBOb25lKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKK3Jlc3VsdC0+cHV0RGlyZWN0KHZtLCBtYWtl
SWRlbnRpZmllcih2bSwgInByb3h5IiksIHByb3h5LCBOb25lKTsKICAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgbWFrZUlkZW50aWZpZXIodm0sICJyZXZva2UiKSwgcmV2b2tlLCBOb25lKTsKIAog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQxLDggKzE0MSw3IEBAIHN0YXRpYyBKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChF
eGVjU3RhdGUKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsK
ICAgICBKU1ZhbHVlIGdldEhhbmRsZXIgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERh
dGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5nZXQsIEFTQ0lJTGl0ZXJhbCgiJ2dldCcg
cHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgb2JqZWN0IHNob3VsZCBiZSBjYWxsYWJsZSIp
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkp
OwogCiAgICAgaWYgKGdldEhhbmRsZXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIHBl
cmZvcm1EZWZhdWx0R2V0KCk7CkBAIC0xNTIsOCArMTUxLDcgQEAgc3RhdGljIEpTVmFsdWUgcGVy
Zm9ybVByb3h5R2V0KEV4ZWNTdGF0ZQogICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRv
U2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5h
bWUudWlkKCkpKSk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChyZWNlaXZlcik7CiAgICAgSlNWYWx1
ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBnZXRIYW5kbGVyLCBjYWxsVHlwZSwgY2FsbERhdGEs
IGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9y
OwogICAgIGlmICh0YXJnZXQtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IpKSB7CkBAIC0xNjYsOCArMTY0LDcgQEAgc3RhdGljIEpTVmFsdWUg
cGVyZm9ybVByb3h5R2V0KEV4ZWNTdGF0ZQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIHJldHVy
biB0cmFwUmVzdWx0OwogfQpAQCAtMTc3LDggKzE3NCw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBl
cmZvcm1HZXQoRXhlY1N0YXRlKiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHBl
cmZvcm1Qcm94eUdldChleGVjLCB0aGlzLCBzbG90LnRoaXNWYWx1ZSgpLCBwcm9wZXJ0eU5hbWUp
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgdW5zaWdu
ZWQgaWdub3JlZEF0dHJpYnV0ZXMgPSAwOwogICAgIHNsb3Quc2V0VmFsdWUodGhpcywgaWdub3Jl
ZEF0dHJpYnV0ZXMsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0yMTEsOCArMjA3LDcg
QEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUludGVybmFsTWV0aG9kRwogICAgIENhbGxEYXRh
IGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRh
LCBjYWxsVHlwZSwgbWFrZUlkZW50aWZpZXIodm0sICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ii
KSwgQVNDSUlMaXRlcmFsKCInZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJyBwcm9wZXJ0eSBvZiBh
IFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBpZiAoZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yTWV0aG9kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBwZXJmb3JtRGVmYXVsdEdl
dE93blByb3BlcnR5KCk7CiAKQEAgLTIyMCw4ICsyMTUsNyBAQCBib29sIFByb3h5T2JqZWN0Ojpw
ZXJmb3JtSW50ZXJuYWxNZXRob2RHCiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAg
IGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50
aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CiAgICAgSlNWYWx1ZSB0
cmFwUmVzdWx0ID0gY2FsbChleGVjLCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNZXRob2QsIGNh
bGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgaWYgKCF0cmFwUmVzdWx0LmlzVW5kZWZp
bmVkKCkgJiYgIXRyYXBSZXN1bHQuaXNPYmplY3QoKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoInJlc3VsdCBvZiAnZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yJyBjYWxsIHNob3VsZCBlaXRoZXIgYmUgYW4gT2JqZWN0IG9yIHVuZGVmaW5lZCIp
KTsKQEAgLTIzMCw4ICsyMjQsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxN
ZXRob2RHCiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgdGFyZ2V0UHJvcGVydHlEZXNjcmlwdG9y
OwogICAgIGJvb2wgaXNUYXJnZXRQcm9wZXJ0eURlc2NyaXB0b3JEZWZpbmVkID0gdGFyZ2V0LT5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCB0YXJnZXRQcm9wZXJ0
eURlc2NyaXB0b3IpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7
CiAKICAgICBpZiAodHJhcFJlc3VsdC5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIGlmICghaXNU
YXJnZXRQcm9wZXJ0eURlc2NyaXB0b3JEZWZpbmVkKQpAQCAtMjQzLDggKzIzNiw3IEBAIGJvb2wg
UHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKICAgICAgICAgLy8gRklYTUU6IHRo
aXMgZG9lc24ndCB3b3JrIGlmICd0YXJnZXQnIGlzIGFub3RoZXIgUHJveHkuIFdlIGRvbid0IGhh
dmUgaXNFeHRlbnNpYmxlIGltcGxlbWVudGVkIGluIGEgd2F5IHRoYXQgZml0cyB3LyBQcm94eXMu
CiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQz
NzUKICAgICAgICAgYm9vbCBpc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVj
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2Up
OwogICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSkgewogICAgICAgICAgICAgLy8gRklYTUU6IENv
bWUgdXAgd2l0aCBhIHRlc3QgZm9yIHRoaXMgZXJyb3IuIEknbSBub3Qgc3VyZSBob3cgdG8gYmVj
YXVzZQogICAgICAgICAgICAgLy8gT2JqZWN0LnNlYWwobykgd2lsbCBtYWtlIGFsbCBmaWVsZHMg
W1tDb25maWd1cmFibGVdXSBmYWxzZS4KQEAgLTI1NywxMiArMjQ5LDEwIEBAIGJvb2wgUHJveHlP
YmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKICAgICB9CiAKICAgICBib29sIGlzRXh0ZW5z
aWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHRyYXBSZXN1bHRB
c0Rlc2NyaXB0b3I7CiAgICAgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgdHJhcFJlc3VsdCwg
dHJhcFJlc3VsdEFzRGVzY3JpcHRvcik7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGZhbHNlKTsKICAgICBib29sIHRocm93RXhjZXB0aW9uID0gZmFsc2U7CiAgICAgYm9vbCB2
YWxpZCA9IHZhbGlkYXRlQW5kQXBwbHlQcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgbnVsbHB0ciwg
cHJvcGVydHlOYW1lLCBpc0V4dGVuc2libGUsCiAgICAgICAgIHRyYXBSZXN1bHRBc0Rlc2NyaXB0
b3IsIGlzVGFyZ2V0UHJvcGVydHlEZXNjcmlwdG9yRGVmaW5lZCwgdGFyZ2V0UHJvcGVydHlEZXNj
cmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CkBAIC0yODAsOCArMjcwLDcgQEAgYm9vbCBQcm94eU9i
amVjdDo6cGVyZm9ybUludGVybmFsTWV0aG9kRwogCiAgICAgaWYgKHRyYXBSZXN1bHRBc0Rlc2Ny
aXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgewogICAgICAgICBHZXR0ZXJTZXR0ZXIqIGdl
dHRlclNldHRlciA9IHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3Iuc2xvd0dldHRlclNldHRlcihleGVj
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2Up
OwogICAgICAgICBzbG90LnNldEdldHRlclNsb3QodGhpcywgdHJhcFJlc3VsdEFzRGVzY3JpcHRv
ci5hdHRyaWJ1dGVzKCksIGdldHRlclNldHRlcik7CiAgICAgfSBlbHNlIGlmICh0cmFwUmVzdWx0
QXNEZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSAmJiAhdHJhcFJlc3VsdEFzRGVzY3JpcHRv
ci52YWx1ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCB0cmFwUmVz
dWx0QXNEZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwgdHJhcFJlc3VsdEFzRGVzY3JpcHRvci52YWx1
ZSgpKTsKQEAgLTMxOSw4ICszMDgsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSGFzUHJv
cGVydHkoRXhlCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7
CiAgICAgSlNWYWx1ZSBoYXNNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERh
dGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIEFTQ0lJTGl0ZXJhbCgiJ2hhcycg
cHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgaWYgKGhhc01ldGhv
ZC5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1bHRIYXNQcm9wZXJ0
eSgpOwogCkBAIC0zMjgsMjYgKzMxNiwyMiBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSGFz
UHJvcGVydHkoRXhlCiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50
cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZy
b21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0
ID0gY2FsbChleGVjLCBoYXNNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJn
dW1lbnRzKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAg
ICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIGlmICghdHJh
cFJlc3VsdEFzQm9vbCkgewogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsK
ICAgICAgICAgYm9vbCBpc1Byb3BlcnR5RGVzY3JpcHRvckRlZmluZWQgPSB0YXJnZXQtPmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOyAKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAg
ICAgICBpZiAoaXNQcm9wZXJ0eURlc2NyaXB0b3JEZWZpbmVkKSB7CiAgICAgICAgICAgICBpZiAo
IWRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpIHsKICAgICAgICAgICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3h5ICdoYXMnIG11c3QgcmV0dXJu
ICd0cnVlJyBmb3Igbm9uLWNvbmZpZ3VyYWJsZSBwcm9wZXJ0aWVzIikpOwogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJvb2wgaXNFeHRl
bnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAg
ICAgIGlmICghaXNFeHRlbnNpYmxlKSB7CiAgICAgICAgICAgICAgICAgdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJQcm94eSAnaGFzJyBtdXN0IHJldHVybiAndHJ1
ZScgZm9yIGEgbm9uLWV4dGVuc2libGUgJ3RhcmdldCcgb2JqZWN0IHdpdGggYSBjb25maWd1cmFi
bGUgcHJvcGVydHkiKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDE5LDgg
KzQwMyw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1QdXQoRXhlY1N0YXRlKiAKICAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIHNl
dE1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZt
LnByb3BlcnR5TmFtZXMtPnNldCwgQVNDSUlMaXRlcmFsKCInc2V0JyBwcm9wZXJ0eSBvZiBhIFBy
b3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBKU09iamVjdCogdGFyZ2V0ID0gdGhpcy0+dGFy
Z2V0KCk7CiAgICAgaWYgKHNldE1ldGhvZC5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4g
cGVyZm9ybURlZmF1bHRQdXQoKTsKQEAgLTQzMSwxMSArNDE0LDkgQEAgYm9vbCBQcm94eU9iamVj
dDo6cGVyZm9ybVB1dChFeGVjU3RhdGUqIAogICAgIGFyZ3VtZW50cy5hcHBlbmQocHV0VmFsdWUp
OwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGhpc1ZhbHVlKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1
bHQgPSBjYWxsKGV4ZWMsIHNldE1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBh
cmd1bWVudHMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAg
ICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBpZiAoIXRyYXBS
ZXN1bHRBc0Jvb2wpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDcyLDggKzQ1Myw3IEBA
IGJvb2wgUHJveHlPYmplY3Q6OnB1dEJ5SW5kZXhDb21tb24oRXhlY1MKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUp
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgYXV0byBw
ZXJmb3JtRGVmYXVsdFB1dCA9IFsmXSAoKSB7CiAgICAgICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0
aGlzLT50YXJnZXQoKTsKICAgICAgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBzaG91bGRUaHJvdzsK
QEAgLTUwNiw4ICs0ODYsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBw
ZXJmCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAg
SlNWYWx1ZSBhcHBseU1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwg
Y2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiYXBwbHkiKSwgQVNDSUlMaXRlcmFsKCInYXBw
bHknIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsK
LSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBwcm94eS0+dGFy
Z2V0KCk7CiAgICAgaWYgKGFwcGx5TWV0aG9kLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CkBAIC01MTcsOCArNDk2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcGVyZgogICAgIH0KIAogICAgIEpTQXJyYXkqIGFyZ0FycmF5ID0gY29u
c3RydWN0QXJyYXkoZXhlYywgc3RhdGljX2Nhc3Q8QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSo+KG51
bGxwdHIpLCBBcmdMaXN0KGV4ZWMpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7
CiAgICAgYXJndW1lbnRzLmFwcGVuZChleGVjLT50aGlzVmFsdWUoKSk7CkBAIC01NTYsOCArNTM0
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcGVyZgogICAgIENhbGxE
YXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgY29uc3Ry
dWN0TWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwg
bWFrZUlkZW50aWZpZXIodm0sICJjb25zdHJ1Y3QiKSwgQVNDSUlMaXRlcmFsKCInY29uc3RydWN0
JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY29uc3RydWN0aWJsZSIp
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBwcm94eS0+
dGFyZ2V0KCk7CiAgICAgaWYgKGNvbnN0cnVjdE1ldGhvZC5pc1VuZGVmaW5lZCgpKSB7CiAgICAg
ICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKQEAgLTU2NywxNSArNTQ0LDEzIEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBlcmYKICAgICB9CiAKICAgICBKU0Fy
cmF5KiBhcmdBcnJheSA9IGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0YXRpY19jYXN0PEFycmF5QWxs
b2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgQXJnTGlzdChleGVjKSk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1l
bnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoYXJnQXJyYXkpOwogICAg
IGFyZ3VtZW50cy5hcHBlbmQoZXhlYy0+bmV3VGFyZ2V0KCkpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0gY2FsbChleGVjLCBjb25zdHJ1Y3RNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxl
ciwgYXJndW1lbnRzKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGlmICghcmVzdWx0Lmlz
T2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIlJlc3VsdCBmcm9tIFByb3h5IGhhbmRsZXIncyAnY29uc3RydWN0JyBtZXRo
b2Qgc2hvdWxkIGJlIGFuIG9iamVjdCIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CkBAIC02MTcsOCArNTkyLDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlbGV0
ZShFeGVjU3RhdAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBl
OwogICAgIEpTVmFsdWUgZGVsZXRlUHJvcGVydHlNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2Qo
ZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImRlbGV0ZVByb3Bl
cnR5IiksIEFTQ0lJTGl0ZXJhbCgiJ2RlbGV0ZVByb3BlcnR5JyBwcm9wZXJ0eSBvZiBhIFByb3h5
J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBKU09iamVjdCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0
KCk7CiAgICAgaWYgKGRlbGV0ZVByb3BlcnR5TWV0aG9kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAg
IHJldHVybiBwZXJmb3JtRGVmYXVsdERlbGV0ZSgpOwpAQCAtNjI3LDEyICs2MDEsMTAgQEAgYm9v
bCBQcm94eU9iamVjdDo6cGVyZm9ybURlbGV0ZShFeGVjU3RhdAogICAgIGFyZ3VtZW50cy5hcHBl
bmQodGFyZ2V0KTsKICAgICBhcmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNK
U1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkp
OwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZGVsZXRlUHJvcGVydHlNZXRo
b2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgYm9vbCB0cmFwUmVzdWx0QXNC
b29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIGlmICghdHJhcFJlc3VsdEFzQm9vbCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNjQ1LDggKzYxNyw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBl
cmZvcm1EZWxldGUoRXhlY1N0YXQKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTY5
MSw4ICs2NjIsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtUHJldmVudEV4dGVuc2lvCiAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1
ZSBwcmV2ZW50RXh0ZW5zaW9uc01ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxs
RGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAicHJldmVudEV4dGVuc2lvbnMiKSwg
QVNDSUlMaXRlcmFsKCIncHJldmVudEV4dGVuc2lvbnMnIHByb3BlcnR5IG9mIGEgUHJveHkncyBo
YW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZmFsc2UpOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsK
ICAgICBpZiAocHJldmVudEV4dGVuc2lvbnNNZXRob2QuaXNVbmRlZmluZWQoKSkKICAgICAgICAg
cmV0dXJuIHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQs
IGV4ZWMpOwpAQCAtNzAwLDE3ICs2NzAsMTQgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybVBy
ZXZlbnRFeHRlbnNpbwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBh
cmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChl
eGVjLCBwcmV2ZW50RXh0ZW5zaW9uc01ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVy
LCBhcmd1bWVudHMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7
CiAKICAgICBib29sIHRyYXBSZXN1bHRBc0Jvb2wgPSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgaWYg
KHRyYXBSZXN1bHRBc0Jvb2wpIHsKICAgICAgICAgYm9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0
YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAodGFyZ2V0SXNFeHRlbnNpYmxl
KSB7CiAgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVy
YWwoIlByb3h5J3MgJ3ByZXZlbnRFeHRlbnNpb25zJyB0cmFwIHJldHVybmVkIHRydWUgZXZlbiB0
aG91Z2ggaXRzIHRhcmdldCBpcyBleHRlbnNpYmxlLiBJdCBzaG91bGQgaGF2ZSByZXR1cm5lZCBm
YWxzZSIpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc0NCw4ICs3MTEsNyBAQCBi
b29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSXNFeHRlbnNpYmxlKEV4CiAgICAgQ2FsbERhdGEgY2Fs
bERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBpc0V4dGVuc2libGVN
ZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtl
SWRlbnRpZmllcih2bSwgImlzRXh0ZW5zaWJsZSIpLCBBU0NJSUxpdGVyYWwoIidpc0V4dGVuc2li
bGUnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsK
LSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgSlNPYmpl
Y3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChpc0V4dGVuc2libGVNZXRob2Qu
aXNVbmRlZmluZWQoKSkKQEAgLTc1NCwxNiArNzIwLDEzIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBl
cmZvcm1Jc0V4dGVuc2libGUoRXgKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7
CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9
IGNhbGwoZXhlYywgaXNFeHRlbnNpYmxlTWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRs
ZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNl
KTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4
ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKICAgICBi
b29sIGlzVGFyZ2V0RXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKICAgICBpZiAodHJhcFJl
c3VsdEFzQm9vbCAhPSBpc1RhcmdldEV4dGVuc2libGUpIHsKICAgICAgICAgaWYgKGlzVGFyZ2V0
RXh0ZW5zaWJsZSkgewpAQCAtODExLDM5ICs3NzQsMzMgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVy
Zm9ybURlZmluZU93blByb3BlcgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBl
IGNhbGxUeXBlOwogICAgIEpTVmFsdWUgZGVmaW5lUHJvcGVydHlNZXRob2QgPSBoYW5kbGVyLT5n
ZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5kZWZp
bmVQcm9wZXJ0eSwgQVNDSUlMaXRlcmFsKCInZGVmaW5lUHJvcGVydHknIHByb3BlcnR5IG9mIGEg
UHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgaWYgKGRlZmluZVByb3BlcnR5TWV0aG9k
LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBwZXJmb3JtRGVmYXVsdERlZmluZU93blBy
b3BlcnR5KCk7CiAKICAgICBKU09iamVjdCogZGVzY3JpcHRvck9iamVjdCA9IGNvbnN0cnVjdE9i
amVjdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgZGVzY3JpcHRvcik7Ci0gICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1l
bnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6
ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBhcmd1bWVudHMuYXBwZW5k
KGRlc2NyaXB0b3JPYmplY3QpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywg
ZGVmaW5lUHJvcGVydHlNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1l
bnRzKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAg
Ym9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhlYyk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIGlmICghdHJhcFJl
c3VsdEFzQm9vbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUHJvcGVydHlEZXNjcmlw
dG9yIHRhcmdldERlc2NyaXB0b3I7CiAgICAgYm9vbCBpc1RhcmdldERlc2NyaXB0b3JEZWZpbmVk
ID0gdGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCB0
YXJnZXREZXNjcmlwdG9yKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFs
c2UpOwogCiAgICAgYm9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJs
ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAg
IGJvb2wgc2V0dGluZ0NvbmZpZ3VyYWJsZVRvRmFsc2UgPSBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJs
ZVByZXNlbnQoKSAmJiAhZGVzY3JpcHRvci5jb25maWd1cmFibGUoKTsKIAogICAgIGlmICghaXNU
YXJnZXREZXNjcmlwdG9yRGVmaW5lZCkgewpAQCAtOTAwLDggKzg1Nyw3IEBAIHZvaWQgUHJveHlP
YmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU4KICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAg
ICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIG93bktleXNNZXRob2QgPSBoYW5kbGVy
LT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwg
Im93bktleXMiKSwgQVNDSUlMaXRlcmFsKCInb3duS2V5cycgcHJvcGVydHkgb2YgYSBQcm94eSdz
IGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKICAg
ICBpZiAob3duS2V5c01ldGhvZC5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIHRhcmdldC0+bWV0
aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0LCBleGVjLCB0
cmFwUmVzdWx0LCBlbnVtZXJhdGlvbk1vZGUpOwpAQCAtOTExLDggKzg2Nyw3IEBAIHZvaWQgUHJv
eHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU4KICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIEpTVmFsdWUg
YXJyYXlMaWtlT2JqZWN0ID0gY2FsbChleGVjLCBvd25LZXlzTWV0aG9kLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CiAKICAgICBQcm9wZXJ0eU5hbWVNb2RlIHByb3BlcnR5TmFtZU1vZGUgPSB0cmFw
UmVzdWx0Lm1vZGUoKTsKICAgICBSdW50aW1lVHlwZU1hc2sgcmVzdWx0RmlsdGVyID0gMDsKQEAg
LTkzOSw4ICs4OTQsNyBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlO
CiAgICAgICAgICAgICByZXR1cm4gZG9udEV4aXRFYXJseTsKIAogICAgICAgICBJZGVudGlmaWVy
IGlkZW50ID0gdmFsdWUudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBkb0V4aXRFYXJseTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZG9FeGl0RWFybHkpOwogCiAgICAgICAg
IHVuY2hlY2tlZFJlc3VsdEtleXMuYWRkKGlkZW50LmltcGwoKSk7CiAgICAgICAgIHRyYXBSZXN1
bHQuYWRkVW5jaGVja2VkKGlkZW50LmltcGwoKSk7CkBAIC05NDgsMjIgKzkwMiwxOSBAQCB2b2lk
IFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOCiAgICAgfTsKIAogICAgIGNyZWF0
ZUxpc3RGcm9tQXJyYXlMaWtlKGV4ZWMsIGFycmF5TGlrZU9iamVjdCwgZG9udFRocm93QW5FeGNl
cHRpb25UeXBlRmlsdGVyLCBBU0NJSUxpdGVyYWwoIlByb3h5IGhhbmRsZXIncyAnb3duS2V5cycg
bWV0aG9kIG11c3QgcmV0dXJuIGFuIGFycmF5LWxpa2Ugb2JqZWN0IGNvbnRhaW5pbmcgb25seSBT
dHJpbmdzIGFuZCBTeW1ib2xzIiksIGFkZFByb3BOYW1lKTsKLSAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKIAogICAgIGJvb2wgdGFyZ2V0SXNFeGVuc2libGUgPSB0YXJnZXQt
PmlzRXh0ZW5zaWJsZShleGVjKTsKIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHRhcmdldEtleXMo
JnZtLCBwcm9wZXJ0eU5hbWVNb2RlKTsKICAgICB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0
T3duUHJvcGVydHlOYW1lcyh0YXJnZXQsIGV4ZWMsIHRhcmdldEtleXMsIGVudW1lcmF0aW9uTW9k
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJu
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgVmVjdG9yPFVu
aXF1ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Q29uZmlndXJhYmxlS2V5czsKICAgICBWZWN0b3I8VW5p
cXVlZFN0cmluZ0ltcGwqPiB0YXJnZXROb25Db25maWd1cmFibGVLZXlzOwogICAgIGZvciAoY29u
c3QgSWRlbnRpZmllciYgaWRlbnQgOiB0YXJnZXRLZXlzKSB7CiAgICAgICAgIFByb3BlcnR5RGVz
Y3JpcHRvciBkZXNjcmlwdG9yOwogICAgICAgICBib29sIGlzUHJvcGVydHlEZWZpbmVkID0gdGFy
Z2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgaWRlbnQuaW1wbCgpLCBkZXNjcmlw
dG9yKTsgCi0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAgICAgICAgIGlmIChpc1Byb3BlcnR5RGVmaW5lZCAmJiAhZGVzY3JpcHRvci5jb25maWd1cmFi
bGUoKSkKICAgICAgICAgICAgIHRhcmdldE5vbkNvbmZpZ3VyYWJsZUtleXMuYXBwZW5kKGlkZW50
LmltcGwoKSk7CiAgICAgICAgIGVsc2UKQEAgLTEwNTEsOCArMTAwMiw3IEBAIGJvb2wgUHJveHlP
YmplY3Q6OnBlcmZvcm1TZXRQcm90b3R5cGUoRXgKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAg
ICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIHNldFByb3RvdHlwZU9mTWV0aG9kID0g
aGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgbWFrZUlkZW50aWZp
ZXIodm0sICJzZXRQcm90b3R5cGVPZiIpLCBBU0NJSUxpdGVyYWwoIidzZXRQcm90b3R5cGVPZicg
cHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKICAgICBKU09iamVjdCog
dGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7CiAgICAgaWYgKHNldFByb3RvdHlwZU9mTWV0aG9kLmlz
VW5kZWZpbmVkKCkpCkBAIC0xMDYyLDEyICsxMDEyLDEwIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBl
cmZvcm1TZXRQcm90b3R5cGUoRXgKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAg
YXJndW1lbnRzLmFwcGVuZChwcm90b3R5cGUpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNh
bGwoZXhlYywgc2V0UHJvdG90eXBlT2ZNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxl
ciwgYXJndW1lbnRzKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2Up
OwogCiAgICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAKICAg
ICBpZiAoIXRyYXBSZXN1bHRBc0Jvb2wpIHsKICAgICAgICAgaWYgKHNob3VsZFRocm93SWZDYW50
U2V0KQpAQCAtMTA3NiwxNCArMTAyNCwxMiBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0
UHJvdG90eXBlKEV4CiAgICAgfQogCiAgICAgYm9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJn
ZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOwogICAgIGlmICh0YXJnZXRJc0V4dGVuc2libGUpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgSlNWYWx1ZSB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQtPmdldFByb3RvdHlw
ZSh2bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsK
ICAgICBpZiAoIXNhbWVWYWx1ZShleGVjLCBwcm90b3R5cGUsIHRhcmdldFByb3RvdHlwZSkpIHsK
ICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJQcm94
eSAnc2V0UHJvdG90eXBlT2YnIHRyYXAgcmV0dXJuZWQgdHJ1ZSB3aGVuIGl0cyB0YXJnZXQgaXMg
bm9uLWV4dGVuc2libGUgYW5kIHRoZSBuZXcgcHJvdG90eXBlIHZhbHVlIGlzIG5vdCB0aGUgc2Ft
ZSBhcyB0aGUgY3VycmVudCBwcm90b3R5cGUgdmFsdWUuIEl0IHNob3VsZCBoYXZlIHJldHVybmVk
IGZhbHNlIikpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTE2LDggKzEwNjIsNyBAQCBK
U1ZhbHVlIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0UHJvdG90eXBlCiAgICAgQ2FsbERhdGEgY2Fs
bERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBnZXRQcm90b3R5cGVP
Zk1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1h
a2VJZGVudGlmaWVyKHZtLCAiZ2V0UHJvdG90eXBlT2YiKSwgQVNDSUlMaXRlcmFsKCInZ2V0UHJv
dG90eXBlT2YnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJs
ZSIpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7
CiAKICAgICBKU09iamVjdCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7CiAgICAgaWYgKGdldFBy
b3RvdHlwZU9mTWV0aG9kLmlzVW5kZWZpbmVkKCkpCkBAIC0xMTI2LDggKzEwNzEsNyBAQCBKU1Zh
bHVlIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0UHJvdG90eXBlCiAgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBKU1Zh
bHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGdldFByb3RvdHlwZU9mTWV0aG9kLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgaWYgKCF0cmFwUmVzdWx0LmlzT2Jq
ZWN0KCkgJiYgIXRyYXBSZXN1bHQuaXNOdWxsKCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJQcm94eSBoYW5kbGVyJ3MgJ2dldFByb3RvdHlw
ZU9mJyB0cmFwIHNob3VsZCBlaXRoZXIgcmV0dXJuIGFuIG9iamVjdCBvciBudWxsIikpOwpAQCAt
MTEzNSwxNCArMTA3OSwxMiBAQCBKU1ZhbHVlIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0UHJvdG90
eXBlCiAgICAgfQogCiAgICAgYm9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0
ZW5zaWJsZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
VmFsdWUoKSk7CiAgICAgaWYgKHRhcmdldElzRXh0ZW5zaWJsZSkKICAgICAgICAgcmV0dXJuIHRy
YXBSZXN1bHQ7CiAKICAgICBKU1ZhbHVlIHRhcmdldFByb3RvdHlwZSA9IHRhcmdldC0+Z2V0UHJv
dG90eXBlKHZtLCBleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IEpTVmFsdWUoKSk7CiAgICAgaWYgKCFzYW1lVmFsdWUoZXhlYywgdGFyZ2V0UHJvdG90eXBlLCB0
cmFwUmVzdWx0KSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIlByb3h5J3MgJ2dldFByb3RvdHlwZU9mJyB0cmFwIGZvciBhIG5vbi1leHRlbnNp
YmxlIHRhcmdldCBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSB0YXJnZXQncyBw
cm90b3R5cGUiKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAkocmV2aXNpb24gMjA2
MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMyw4ICsxMjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHJlZmxlY3RPYmplCiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0KGV4ZWMsIHRhcmdldCwgY29uc3RydWN0
VHlwZSwgY29uc3RydWN0RGF0YSwgYXJndW1lbnRzLCBuZXdUYXJnZXQpKTsKIH0KQEAgLTEzOSw4
ICsxMzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAg
aWYgKCF0YXJnZXQuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmRlZmluZVBy
b3BlcnR5IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOwogICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2Ny
aXB0b3I7CiAgICAgaWYgKCF0b1Byb3BlcnR5RGVzY3JpcHRvcihleGVjLCBleGVjLT5hcmd1bWVu
dCgyKSwgZGVzY3JpcHRvcikpCkBAIC0xNzgsOCArMTc2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCByZWZsZWN0T2JqZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRo
cm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3QuZ2V0IHJlcXVp
cmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOwogCiAgICAgY29uc3QgSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGV4
ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSByZWNlaXZlciA9IHRhcmdldDsK
ICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMpCkBAIC0yMDAsOCArMTk3LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
IlJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1
bWVudCBiZSBhbiBvYmplY3QiKSkpOwogCiAgICAgYXV0byBrZXkgPSBleGVjLT5hcmd1bWVudCgx
KS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGV4ZWMsIGFzT2JqZWN0KHRhcmdldCksIGtleSkpOwogfQpAQCAtMjI5LDggKzIyNSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamUKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJSZWZsZWN0LmlzRXh0ZW5zaWJsZSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4g
b2JqZWN0IikpKTsKIAogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gYXNPYmplY3QodGFyZ2V0KS0+
aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbihpc0V4dGVuc2libGUpKTsKIH0KIApAQCAtMjU3LDggKzI1Miw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamUKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRl
cmFsKCJSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVu
dCBiZSBhbiBvYmplY3QiKSkpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh0YXJn
ZXQpOwogICAgIGJvb2wgcmVzdWx0ID0gb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnByZXZlbnRF
eHRlbnNpb25zKG9iamVjdCwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHJlc3VsdCkpOwogfQogCkBAIC0yNzQsOCArMjY4LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQogICAgIEpTT2JqZWN0
KiB0YXJnZXRPYmplY3QgPSBhc09iamVjdCh0YXJnZXQpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAKICAgICBKU1ZhbHVlIHJlY2VpdmVyID0gdGFyZ2V0OwogICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPj0gNCkKQEAgLTMwNCw4ICsyOTcsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAKICAgICBib29sIHNob3VsZFRocm93SWZDYW50
U2V0ID0gZmFsc2U7CiAgICAgYm9vbCBkaWRTZXRQcm90b3R5cGUgPSBvYmplY3QtPnNldFByb3Rv
dHlwZSh2bSwgZXhlYywgcHJvdG8sIHNob3VsZFRocm93SWZDYW50U2V0KTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZGlkU2V0UHJvdG90
eXBlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIxLDggKzIyMSw3IEBAIGlubGluZSBSZWdFeHBGbGFncyB0b0ZsYWdzKEV4ZWNTdGF0ZSog
ZXgKICAgICB9CiAKICAgICBSZWdFeHBGbGFncyByZXN1bHQgPSByZWdFeHBGbGFncyhmbGFnc1N0
cmluZy0+dmFsdWUoZXhlYykpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBJbnZhbGlkRmxhZ3M7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgSW52YWxpZEZsYWdzKTsKICAgICBpZiAocmVzdWx0ID09IEludmFsaWRGbGFncykKICAg
ICAgICAgdGhyb3dTeW50YXhFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJJbnZhbGlk
IGZsYWdzIHN1cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1Y3Rvci4iKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTIzNCw4ICsyMzMsNyBAQCBzdGF0aWMgSlNPYmplY3QqIHJlZ0V4cENyZWF0ZShF
eGVjU3RhdGUqCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgU3RyaW5nIHBhdHRlcm4gPSBwYXR0ZXJuQXJnLmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmlu
ZygpIDogcGF0dGVybkFyZy50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBSZWdFeHBGbGFncyBm
bGFncyA9IHRvRmxhZ3MoZXhlYywgZmxhZ3NBcmcpOwogICAgIGlmIChmbGFncyA9PSBJbnZhbGlk
RmxhZ3MpCkBAIC0yNDYsOCArMjQ0LDcgQEAgc3RhdGljIEpTT2JqZWN0KiByZWdFeHBDcmVhdGUo
RXhlY1N0YXRlKgogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNy
ZWF0ZVN5bnRheEVycm9yKGV4ZWMsIHJlZ0V4cC0+ZXJyb3JNZXNzYWdlKCkpKTsKIAogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0UmVnRXhwU3RydWN0dXJlKGV4ZWMsIGdsb2JhbE9iamVj
dCwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKICAgICByZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgcmVn
RXhwKTsKIH0KIApAQCAtMjYzLDggKzI2MCw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAo
RXhlY1N0YXRlKiBleGUKIAogICAgIGlmIChuZXdUYXJnZXQuaXNVbmRlZmluZWQoKSAmJiBjb25z
dHJ1Y3RBc1JlZ2V4cCAmJiBmbGFnc0FyZy5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIEpTVmFs
dWUgY29uc3RydWN0b3IgPSBwYXR0ZXJuQXJnLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5j
b25zdHJ1Y3Rvcik7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAgICAgICAgIGlmIChjYWxsZWUgPT0gY29uc3RydWN0b3IpIHsKICAg
ICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCBwYXR0ZXJuQXJnIGlzIGEgb2JqZWN0IG90aGVyd2lz
ZSBjb25zdHJ1Y3RBc1JlZ2V4cCB3b3VsZCBiZSBmYWxzZS4KICAgICAgICAgICAgIHJldHVybiBw
YXR0ZXJuQXJnLmdldE9iamVjdCgpOwpAQCAtMjc0LDggKzI3MCw3IEBAIEpTT2JqZWN0KiBjb25z
dHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGUKICAgICBpZiAoaXNQYXR0ZXJuUmVnRXhwKSB7CiAg
ICAgICAgIFJlZ0V4cCogcmVnRXhwID0ganNDYXN0PFJlZ0V4cE9iamVjdCo+KHBhdHRlcm5Bcmcp
LT5yZWdFeHAoKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRSZWdFeHBTdHJ1
Y3R1cmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBuZXdUYXJnZXQpOwotICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgICAgIGlmICgh
ZmxhZ3NBcmcuaXNVbmRlZmluZWQoKSkgewogICAgICAgICAgICAgUmVnRXhwRmxhZ3MgZmxhZ3Mg
PSB0b0ZsYWdzKGV4ZWMsIGZsYWdzQXJnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMjA2MzM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNy0yMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTEzOSw4ICsxMzksNyBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgaXNSZWdFeHAoVk0mIHZtLCBFeGVjCiAKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmpl
Y3QodmFsdWUpOwogICAgIEpTVmFsdWUgbWF0Y2hWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIHZt
LnByb3BlcnR5TmFtZXMtPm1hdGNoU3ltYm9sKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZmFsc2UpOwogICAgIGlmICghbWF0Y2hWYWx1ZS5pc1VuZGVmaW5lZCgpKQogICAg
ICAgICByZXR1cm4gbWF0Y2hWYWx1ZS50b0Jvb2xlYW4oZXhlYyk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMjA2
MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDcsIDIwMDgsIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNy0yMDA4LCAyMDEyLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE3Niw4ICsx
NzYsNyBAQCBKU1ZhbHVlIGNvbGxlY3RNYXRjaGVzKFZNJiB2bSwgRXhlY1N0YXRlCiAgICAgc3Rh
dGljIHVuc2lnbmVkIG1heFNpemVGb3JEaXJlY3RQYXRoID0gMTAwMDAwOwogICAgIAogICAgIEpT
QXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAg
YXV0byBpdGVyYXRlID0gWyZdICgpIHsKICAgICAgICAgc2l6ZV90IGVuZCA9IHJlc3VsdC5lbmQ7
CkBAIC0yMzYsOCArMjM1LDcgQEAgSlNWYWx1ZSBSZWdFeHBPYmplY3Q6Om1hdGNoR2xvYmFsKEV4
ZWNTdAogICAgIEFTU0VSVChyZWdFeHAtPmdsb2JhbCgpKTsKIAogICAgIHNldExhc3RJbmRleChl
eGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1Zh
bHVlKCkpOwogCiAgICAgU3RyaW5nIHMgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOwogICAgIFJlZ0V4
cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGdsb2JhbE9iamVjdC0+cmVnRXhwQ29u
c3RydWN0b3IoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5
LDE0ICsxNTksMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwog
ICAgICAgICByZWdFeHAgPSBhc1JlZ0V4cE9iamVjdChhcmcwKS0+cmVnRXhwKCk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSAhZXhlYy0+YXJndW1lbnRDb3VudCgpID8g
ZW1wdHlTdHJpbmcoKSA6IGFyZzAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICAgICAgUmVnRXhwRmxhZ3MgZmxhZ3Mg
PSBOb0ZsYWdzOwogICAgICAgICBpZiAoIWFyZzEuaXNVbmRlZmluZWQoKSkgewogICAgICAgICAg
ICAgZmxhZ3MgPSByZWdFeHBGbGFncyhhcmcxLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7
Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAg
ICAgIGlmIChmbGFncyA9PSBJbnZhbGlkRmxhZ3MpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBzY29wZSwgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJJbnZhbGlkIGZsYWdzIHN1cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1Y3Rvci4iKSkpOwog
ICAgICAgICB9CkBAIC0xOTIsMjAgKzE5MCwxNSBAQCBzdGF0aWMgaW5saW5lIEZsYWdzU3RyaW5n
IGZsYWdzU3RyaW5nKEV4CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgSlNWYWx1ZSBnbG9iYWxWYWx1ZSA9IHJlZ2V4cC0+Z2V0KGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5nbG9iYWwpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgc3RyaW5nKTsKICAgICBKU1ZhbHVlIGlnbm9yZUNhc2VWYWx1ZSA9IHJlZ2V4cC0+Z2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pZ25vcmVDYXNlKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gc3RyaW5nOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHN0cmluZyk7CiAgICAgSlNWYWx1ZSBtdWx0aWxpbmVWYWx1ZSA9
IHJlZ2V4cC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tdWx0aWxpbmUpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBzdHJpbmc7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RyaW5nKTsKICAgICBKU1ZhbHVlIHVu
aWNvZGVWYWx1ZSA9IHJlZ2V4cC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51bmlj
b2RlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4gc3RyaW5nOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0cmluZyk7CiAgICAg
SlNWYWx1ZSBzdGlja3lWYWx1ZSA9IHJlZ2V4cC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5zdGlja3kpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBzdHJpbmc7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RyaW5n
KTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICBpZiAoZ2xvYmFsVmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKQpAQCAtMjM5LDE4ICsyMzIsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCByZWdFeHBQcm90bwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVhcmx5UmV0
dXJuVmFsdWUpOwogCiAgICAgSlNWYWx1ZSBzb3VyY2VWYWx1ZSA9IHRoaXNPYmplY3QtPmdldChl
eGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5zb3VyY2UpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgU3RyaW5nIHNvdXJjZSA9IHNvdXJjZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSBmbGFnc1ZhbHVlID0gdGhp
c09iamVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmZsYWdzKTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgIFN0cmluZyBmbGFncyA9IGZsYWdzVmFsdWUudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgJy8nLCBzb3VyY2UsICcvJywg
ZmxhZ3MpKTsKIH0KQEAgLTM0MCw4ICszMjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHJlZ0V4cFByb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNj
b3BlLCBBU0NJSUxpdGVyYWwoIlRoZSBSZWdFeHAucHJvdG90eXBlLmZsYWdzIGdldHRlciBjYW4g
b25seSBiZSBjYWxsZWQgb24gYW4gb2JqZWN0IikpOwogCiAgICAgYXV0byBmbGFncyA9IGZsYWdz
U3RyaW5nKGV4ZWMsIGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGZsYWdzLmRhdGEo
KSkpOwogfQpAQCAtNDc5LDggKzQ2Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
cmVnRXhwUHJvdG8KIAogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKTsKICAgICBTdHJpbmcgcyA9IHN0cmluZy0+dmFsdWUoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdF
eHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3Ry
dWN0b3IoKTsKICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVy
Zm9ybU1hdGNoKHZtLCByZWdFeHAsIHN0cmluZywgcywgMCk7CkBAIC01ODgsOCArNTc1LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgIC8vIDMuIFtoYW5k
bGVkIGJ5IEpTIGJ1aWx0aW5dIExldCBTIGJlID8gVG9TdHJpbmcoc3RyaW5nKS4KICAgICBKU1N0
cmluZyogaW5wdXRTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKICAg
ICBTdHJpbmcgaW5wdXQgPSBpbnB1dFN0cmluZy0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICBBU1NFUlQoIWlucHV0LmlzTnVsbCgpKTsKIAogICAgIC8vIDQuIFtoYW5k
bGVkIGJ5IEpTIGJ1aWx0aW5dIExldCBDIGJlID8gU3BlY2llc0NvbnN0cnVjdG9yKHJ4LCAlUmVn
RXhwJSkuCkBAIC02MDMsOCArNTg5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWdFeHBQcm90bwogICAgIC8vIDExLiBMZXQgQSBiZSBBcnJheUNyZWF0ZSgwKS4KICAgICAvLyAx
Mi4gTGV0IGxlbmd0aEEgYmUgMC4KICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0
eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgdW5zaWduZWQgcmVz
dWx0TGVuZ3RoID0gMDsKIAogICAgIC8vIDEzLiBJZiBsaW1pdCBpcyB1bmRlZmluZWQsIGxldCBs
aW0gYmUgMl4zMi0xOyBlbHNlIGxldCBsaW0gYmUgPyBUb1VpbnQzMihsaW1pdCkuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDE4ICs2MSwxNSBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2Jq
ZWN0KCk7CiAgICAgU3RydWN0dXJlKiBzZXRTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpj
cmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2Jq
ZWN0LT5zZXRTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIEpTU2V0KiBzZXQg
PSBKU1NldDo6Y3JlYXRlKGV4ZWMsIHZtLCBzZXRTdHJ1Y3R1cmUpOwotICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGl0
ZXJhYmxlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoc2V0KTsKIAogICAgIEpTVmFsdWUgYWRkZXJGdW5jdGlvbiA9IHNldC0+Z2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5hZGQpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBD
YWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgYWRkZXJGdW5jdGlv
bkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoYWRkZXJGdW5jdGlvbiwgYWRkZXJGdW5jdGlvbkNhbGxE
YXRhKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAw
LDggKzEwMCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmkKIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBkb3Vi
bGUgY29kZVBvaW50QXNEb3VibGUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKS50b051bWJl
cihleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgICAgIHVp
bnQzMl90IGNvZGVQb2ludCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb2RlUG9pbnRBc0RvdWJs
ZSk7CiAKQEAgLTEyNiw4ICsxMjUsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFz
c1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5zdHJpbmdP
YmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgaWYgKCFleGVjLT5h
cmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3RyaW5nT2Jq
ZWN0OjpjcmVhdGUodm0sIHN0cnVjdHVyZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjEsOCArMTIxLDcgQEAgYm9vbCBTdHJpbmdPYmplY3Q6OmRlZmluZU93blByb3BlcnR5
KEpTTwogICAgICAgICBib29sIGlzQ3VycmVudERlZmluZWQgPSB0aGlzT2JqZWN0LT5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBjdXJyZW50KTsKICAgICAgICAg
QVNTRVJUKGlzQ3VycmVudERlZmluZWQpOwogICAgICAgICBib29sIGlzRXh0ZW5zaWJsZSA9IHRo
aXNPYmplY3QtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICByZXR1cm4gdmFsaWRhdGVBbmRB
cHBseVByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBudWxscHRyLCBwcm9wZXJ0eU5hbWUsIGlzRXh0
ZW5zaWJsZSwgZGVzY3JpcHRvciwgaXNDdXJyZW50RGVmaW5lZCwgY3VycmVudCwgdGhyb3dFeGNl
cHRpb24pOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00ODAsOCArNDgwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVw
bAogCiAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2UgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOwogICAg
IHVuc2lnbmVkIHNvdXJjZUxlbiA9IHNvdXJjZS5sZW5ndGgoKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIFJlZ0V4cE9iamVjdCogcmVnRXhwT2JqZWN0ID0gYXNSZWdFeHBPYmplY3Qoc2Vh
cmNoVmFsdWUpOwogICAgIFJlZ0V4cCogcmVnRXhwID0gcmVnRXhwT2JqZWN0LT5yZWdFeHAoKTsK
ICAgICBib29sIGdsb2JhbCA9IHJlZ0V4cC0+Z2xvYmFsKCk7CkBAIC00ODksOCArNDg4LDcgQEAg
c3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogICAgIGlmIChnbG9iYWwp
IHsKICAgICAgICAgLy8gRVM1LjEgMTUuNS40LjEwIHN0ZXAgOC5hLgogICAgICAgICByZWdFeHBP
YmplY3QtPnNldExhc3RJbmRleChleGVjLCAwKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSAmJiAhcmVw
bGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVtb3ZlVXNpbmdS
ZWdFeHBTZWFyY2godm0sIGV4ZWMsIHN0cmluZywgc291cmNlLCByZWdFeHApOwpAQCAtNTEyLDgg
KzUxMCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAg
ICAgaW50IGFyZ0NvdW50ID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSArIDI7CiAgICAg
ICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHJlcGxhY2VWYWx1ZSk7
CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmdW5jLCBhcmdDb3VudCk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKHNvdXJjZS5pczhC
aXQoKSkgewogICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICBpbnQq
IG92ZWN0b3I7CkBAIC01NDAsOCArNTM3LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2Rl
ZEpTVmFsdWUgcmVwbAogICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhqc1VuZGVm
aW5lZCgpKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzUmVzdWx0ID0gY2FjaGVkQ2FsbC5j
YWxsKCk7CiAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChqc1Jlc3VsdC50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICAgICAgICAgICAgICBsYXN0SW5kZXgg
PSByZXN1bHQuZW5kOwogICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsYXN0SW5kZXg7
CkBAIC01NzksOCArNTc1LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUg
cmVwbAogICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhqc1VuZGVmaW5lZCgpKTsK
ICAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzUmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7CiAg
ICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChqc1Jlc3VsdC50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykpOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSByZXN1bHQu
ZW5kOwogICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsYXN0SW5kZXg7CkBAIC02MTgs
OSArNjEzLDEwIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAg
ICAgICAgICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihyZXN1bHQuc3RhcnQpKTsKICAgICAg
ICAgICAgICAgICBhcmdzLmFwcGVuZChzdHJpbmcpOwogCi0gICAgICAgICAgICAgICAgcmVwbGFj
ZW1lbnRzLmFwcGVuZChjYWxsKGV4ZWMsIHJlcGxhY2VWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRh
LCBqc1VuZGVmaW5lZCgpLCBhcmdzKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGwoZXhlYywgcmVwbGFjZVZhbHVlLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpOworICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgICAg
IHJlcGxhY2VtZW50cy5hcHBlbmQodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsK
KyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaW50IHJlcGxMZW4g
PSByZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKTsKICAgICAgICAgICAgICAgICBpZiAobGFzdElu
ZGV4IDwgcmVzdWx0LnN0YXJ0IHx8IHJlcGxMZW4pIHsKQEAgLTY2NSw4ICs2NjEsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0CiAgICAgaWYgKHJlZ0V4cC0+Z2xv
YmFsKCkpIHsKICAgICAgICAgLy8gRVM1LjEgMTUuNS40LjEwIHN0ZXAgOC5hLgogICAgICAgICBz
ZWFyY2hWYWx1ZS0+c2V0TGFzdEluZGV4KGV4ZWMsIDApOwotICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgICAgIHJldHVybiByZW1vdmVVc2luZ1JlZ0V4cFNlYXJjaCh2bSwg
ZXhlYywgdGhpc1ZhbHVlLCB0aGlzVmFsdWUtPnZhbHVlKGV4ZWMpLCByZWdFeHApOwogICAgIH0K
IApAQCAtNjk3LDggKzY5Miw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVl
IHJlcGwKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHJlcGxhY2VWYWx1ZSwg
Y2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkgewogICAgICAg
ICByZXBsYWNlbWVudFN0cmluZyA9IHJlcGxhY2VWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gcmVwbGFjZVVzaW5nUmVnRXhwU2VhcmNoKApAQCAtNzExLDggKzcwNSw3IEBAIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKIAogICAgIGNvbnN0IFN0cmluZyYg
c3RyaW5nID0ganNTdHJpbmctPnZhbHVlKGV4ZWMpOwogICAgIFN0cmluZyBzZWFyY2hTdHJpbmcg
PSBzZWFyY2hWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKIAogICAgIHNpemVfdCBtYXRjaFN0YXJ0ID0gc3RyaW5nLmZpbmQoc2VhcmNoU3Ry
aW5nKTsKIApAQCAtNzI3LDEzICs3MjAsMTEgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2Rl
ZEpTVmFsdWUgcmVwbAogICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihtYXRjaFN0YXJ0KSk7
CiAgICAgICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKTsKICAgICAgICAgcmVwbGFjZVZhbHVlID0g
Y2FsbChleGVjLCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQo
KSwgYXJncyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB9CiAKICAg
ICBTdHJpbmcgcmVwbGFjZVN0cmluZyA9IHJlcGxhY2VWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIFN0cmluZ0ltcGwqIHN0cmlu
Z0ltcGwgPSBzdHJpbmcuaW1wbCgpOwogICAgIFN0cmluZyBsZWZ0UGFydChTdHJpbmdJbXBsOjpj
cmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqc3RyaW5nSW1wbCwgMCwgbWF0Y2hTdGFydCkpOwpA
QCAtODE3LDggKzgwOCw3IEBAIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGFjZSgK
ICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBKU1N0cmluZyogc3RyaW5nID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0
dXJuIHJlcGxhY2Uodm0sIGV4ZWMsIHN0cmluZywgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7
CiB9CiAKQEAgLTgyOCw4ICs4MTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgSlNTdHJpbmcqIHN0cmluZyA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvU3RyaW5nKGV4ZWMpOwot
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBKU1ZhbHVlIHNlYXJjaFZhbHVlID0gZXhlYy0+
YXJndW1lbnQoMCk7CiAgICAgaWYgKCFzZWFyY2hWYWx1ZS5pbmhlcml0cyhSZWdFeHBPYmplY3Q6
OmluZm8oKSkpCkBAIC04NDQsOCArODMzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBleGVjLT50aGlzVmFsdWUoKS50b1N0cmluZyhleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgcmV0dXJuIHJlcGxhY2VVc2luZ1N0cmlu
Z1NlYXJjaChleGVjLT52bSgpLCBleGVjLCBzdHJpbmcsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVj
LT5hcmd1bWVudCgxKSk7CiB9CkBAIC05NTMsOCArOTQxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBkb3Vi
bGUgZG91YmxlUG9zaXRpb24gPSBhcmd1bWVudDAudG9JbnRlZ2VyKGV4ZWMpOwogICAgIGlmIChk
b3VibGVQb3NpdGlvbiA+PSAwICYmIGRvdWJsZVBvc2l0aW9uIDwgbGVuZ3RoKQpAQCAtMTA2NSw4
ICsxMDUyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAg
IGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAg
aW50IGxlbiA9IHMubGVuZ3RoKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobGVuID49IDApOwpAQCAt
MTEzMCwxNSArMTExNiwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvCiAgICAgLy8gMy4gTGV0IFMgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvU3RyaW5nLCBn
aXZpbmcgaXQgdGhlIHRoaXMgdmFsdWUgYXMgaXRzIGFyZ3VtZW50LgogICAgIC8vIDcuIExldCBz
IGJlIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBTLgogICAgIFN0cmluZyBpbnB1dCA9IHRo
aXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBBU1NFUlQoIWlucHV0LmlzTnVsbCgpKTsKIAogICAgIC8vIDQuIExldCBBIGJlIGEg
bmV3IGFycmF5IGNyZWF0ZWQgYXMgaWYgYnkgdGhlIGV4cHJlc3Npb24gbmV3IEFycmF5KCkKICAg
ICAvLyAgICB3aGVyZSBBcnJheSBpcyB0aGUgc3RhbmRhcmQgYnVpbHQtaW4gY29uc3RydWN0b3Ig
d2l0aCB0aGF0IG5hbWUuCiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJh
eShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgLy8gNS4gTGV0IGxlbmd0
aEEgYmUgMC4KICAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSAwOwpAQCAtMTE1NCw4ICsxMTM4
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIC8vICAg
IG90aGVyd2lzZSBsZXQgUiA9IFRvU3RyaW5nKHNlcGFyYXRvcikuCiAgICAgSlNWYWx1ZSBzZXBh
cmF0b3JWYWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIFN0cmluZyBzZXBh
cmF0b3IgPSBzZXBhcmF0b3JWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIC8vIDEwLiBJZiBsaW0gPT0gMCwgcmV0dXJuIEEuCiAg
ICAgaWYgKCFsaW1pdCkKQEAgLTEyNjMsOCArMTI0Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgbGVuID0ganNTdHJpbmctPmxlbmd0aCgpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIHVTdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAg
IGxlbiA9IHVTdHJpbmcubGVuZ3RoKCk7CiAgICAgfQogCkBAIC0xMzE2LDggKzEyOTgsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9
IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAg
SlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIEpTVmFsdWUgYTEgPSBleGVjLT5h
cmd1bWVudCgxKTsKQEAgLTEzOTAsMTMgKzEzNzEsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1Zh
bHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAg
IFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwog
ICAgIFN0cmluZyBzdHIgPSBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKENvbGxh
dG9yKCkuY29sbGF0ZShzLCBzdHIpKSk7CiB9CiAKQEAgLTE0MTYsOCArMTM5NSw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSB0b0xvY2FsZUNhc2UoRXhlY1MKICAgICBjb25zdCBTdHJpbmcmIHMg
PSBzVmFsLT52YWx1ZShzdGF0ZSk7CiAKICAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChTKS4KLSAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgLy8gT3B0aW1pemF0aW9uIGZvciBlbXB0eSBzdHJp
bmdzLgogICAgIGlmIChzLmlzRW1wdHkoKSkKQEAgLTE0MjcsOCArMTQwNSw3IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSB0b0xvY2FsZUNhc2UoRXhlY1MKICAgICBWZWN0b3I8U3RyaW5nPiByZXF1
ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdCgqc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSk7CiAKICAgICAvLyA1LiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2NhbGVzKS4K
LSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgLy8gNi4gTGV0IGxlbiBiZSB0aGUgbnVtYmVy
IG9mIGVsZW1lbnRzIGluIHJlcXVlc3RlZExvY2FsZXMuCiAgICAgc2l6ZV90IGxlbiA9IHJlcXVl
c3RlZExvY2FsZXMuc2l6ZSgpOwpAQCAtMTUxMSw4ICsxNDg4LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUo
dGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUp
OwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtl
Tm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGJpZz4iLCBzLCAiPC9iaWc+IikpOwogfQogCkBAIC0x
NTI1LDggKzE1MDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
CiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8
c21hbGw+IiwgcywgIjwvc21hbGw+IikpOwogfQogCkBAIC0xNTM5LDggKzE1MTQsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVj
dENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Ymxpbms+IiwgcywgIjwvYmxpbms+
IikpOwogfQogCkBAIC0xNTUzLDggKzE1MjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3Ry
aW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFs
U3RyaW5nKGV4ZWMsICI8Yj4iLCBzLCAiPC9iPiIpKTsKIH0KIApAQCAtMTU2Nyw4ICsxNTQwLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hl
Y2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHR0PiIsIHMsICI8L3R0
PiIpKTsKIH0KIApAQCAtMTU4MSw4ICsxNTUzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVl
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0
cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlh
bFN0cmluZyhleGVjLCAiPGk+IiwgcywgIjwvaT4iKSk7CiB9CiAKQEAgLTE1OTUsOCArMTU2Niw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNo
ZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzdHJpa2U+Iiwgcywg
Ijwvc3RyaWtlPiIpKTsKIH0KIApAQCAtMTYwOSw4ICsxNTc5LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUo
dGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUp
OwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtl
Tm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHN1Yj4iLCBzLCAiPC9zdWI+IikpOwogfQogCkBAIC0x
NjIzLDggKzE1OTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
CiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8
c3VwPiIsIHMsICI8L3N1cD4iKSk7CiB9CiAKQEAgLTE2MzcsOCArMTYwNSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29l
cmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5h
cmd1bWVudCgwKTsKICAgICBTdHJpbmcgY29sb3IgPSBhMC50b1dURlN0cmluZyhleGVjKTsKQEAg
LTE2NTYsOCArMTYyMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
IAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKIApAQCAtMTcxMSw4ICsxNjc3
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICgh
Y2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1
ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIFN0cmluZyBhbmNob3IgPSBhMC50b1dURlN0
cmluZyhleGVjKTsKQEAgLTE3MzAsOCArMTY5NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1
ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBT
dHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAg
ICBTdHJpbmcgbGlua1RleHQgPSBhMC50b1dURlN0cmluZyhleGVjKTsKQEAgLTE3NzgsOCArMTc0
Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSB0cmltU3RyaW5nKEV4ZWNTdGEKICAgICBpZiAo
IWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHN0ciA9IHRoaXNWYWx1ZS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIHVuc2lnbmVkIGxlZnQgPSAwOwogICAgIGlmICh0
cmltS2luZCAmIFRyaW1MZWZ0KSB7CkBAIC0xODM2LDE5ICsxNzk5LDE2IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlz
VmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgYm9vbCBpc1JlZ3Vs
YXJFeHByZXNzaW9uID0gaXNSZWdFeHAodm0sIGV4ZWMsIGEwKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgaWYgKGlzUmVndWxhckV4cHJlc3Npb24pCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCAiQXJndW1lbnQgdG8gU3RyaW5nLnByb3RvdHlwZS5zdGFydHNX
aXRoIGNhbm5vdCBiZSBhIFJlZ0V4cCIpOwogCiAgICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9IGEw
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAg
ICAgSlNWYWx1ZSBwb3NpdGlvbkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIHVuc2lnbmVk
IHN0YXJ0ID0gMDsKQEAgLTE4NTcsOCArMTgxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG8KICAgICBlbHNlIHsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsKICAgICAgICAgc3RhcnQgPSBjbGFtcEFuZFRydW5j
YXRlVG9VbnNpZ25lZChwb3NpdGlvbkFyZy50b0ludGVnZXIoZXhlYyksIDAsIGxlbmd0aCk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB9CiAKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihzdHJpbmdUb1NlYXJjaEluLmhhc0luZml4U3RhcnRpbmdB
dChzZWFyY2hTdHJpbmcsIHN0YXJ0KSkpOwpAQCAtMTg3NCwxOSArMTgzMywxNiBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIFN0cmluZyBzdHJpbmdUb1NlYXJjaEluID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGJvb2wgaXNS
ZWd1bGFyRXhwcmVzc2lvbiA9IGlzUmVnRXhwKHZtLCBleGVjLCBhMCk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIGlmIChpc1JlZ3VsYXJFeHByZXNzaW9uKQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjLCBzY29wZSwgIkFyZ3VtZW50IHRvIFN0cmluZy5wcm90b3R5cGUuZW5k
c1dpdGggY2Fubm90IGJlIGEgUmVnRXhwIik7CiAKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0g
YTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdUb1NlYXJjaEluLmxlbmd0aCgpOwogCkBAIC0x
ODk2LDggKzE4NTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
CiAgICAgICAgIGVuZCA9IHN0ZDo6bWF4KDAsIGVuZFBvc2l0aW9uQXJnLmFzSW50MzIoKSk7CiAg
ICAgZWxzZSBpZiAoIWVuZFBvc2l0aW9uQXJnLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgZW5k
ID0gY2xhbXBBbmRUcnVuY2F0ZVRvVW5zaWduZWQoZW5kUG9zaXRpb25BcmcudG9JbnRlZ2VyKGV4
ZWMpLCAwLCBsZW5ndGgpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
fQogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oc3RyaW5nVG9TZWFyY2hJ
bi5oYXNJbmZpeEVuZGluZ0F0KHNlYXJjaFN0cmluZywgc3RkOjptaW4oZW5kLCBsZW5ndGgpKSkp
OwpAQCAtMTkxMiw4ICsxODY3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaQogICAgIGVsc2UgewogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdUb1Nl
YXJjaEluLmxlbmd0aCgpOwogICAgICAgICBzdGFydCA9IGNsYW1wQW5kVHJ1bmNhdGVUb1Vuc2ln
bmVkKHBvc2l0aW9uQXJnLnRvSW50ZWdlcihleGVjKSwgMCwgbGVuZ3RoKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHN0cmluZ1RvU2VhcmNoSW4uY29udGFpbnMoc2VhcmNoU3RyaW5nLCB0cnVl
LCBzdGFydCkpKTsKQEAgLTE5MjksMTkgKzE4ODMsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
LCBzY29wZSk7CiAKICAgICBTdHJpbmcgc3RyaW5nVG9TZWFyY2hJbiA9IHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIEpT
VmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBib29sIGlzUmVndWxhckV4cHJlc3Np
b24gPSBpc1JlZ0V4cCh2bSwgZXhlYywgYTApOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpZiAo
aXNSZWd1bGFyRXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUsICJBcmd1bWVudCB0byBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzIGNhbm5vdCBi
ZSBhIFJlZ0V4cCIpOwogCiAgICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9IGEwLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSBw
b3NpdGlvbkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogCkBAIC0xOTU3LDEzICsxOTA4LDExIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYnVpbHRpblN0cmkKICAgICBBU1NFUlQoY2hl
Y2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSk7CiAKICAgICBTdHJpbmcgc3RyaW5nVG9TZWFy
Y2hJbiA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBKU1ZhbHVlIHBvc2l0aW9uQXJnID0g
ZXhlYy0+YXJndW1lbnQoMSk7CiAKQEAgLTIwMTgsMTUgKzE5NjcsMTMgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2li
bGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2Nv
cGUpOwogICAgIEpTU3RyaW5nOjpTYWZlVmlldyBzb3VyY2UgPSB0aGlzVmFsdWUudG9TdHJpbmco
ZXhlYyktPnZpZXcoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIFVOb3JtYWxp
emF0aW9uTW9kZSBmb3JtID0gVU5PUk1fTkZDOwogICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBhcmd1
bWVudCBpcyBwcm92aWRlZCBhbmQgaXMgbm90IHVuZGVmaW5lZC4KICAgICBpZiAoIWV4ZWMtPmFy
Z3VtZW50KDApLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgU3RyaW5nIGZvcm1TdHJpbmcgPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgICAgICBpZiAoZm9ybVN0cmlu
ZyA9PSAiTkZDIikKICAgICAgICAgICAgIGZvcm0gPSBVTk9STV9ORkM7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwxMSArMTAwLDkgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzeW1ib2xDb25zdAogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTU3RyaW5nKiBzdHJpbmdLZXkgPSBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIFN0
cmluZyBzdHJpbmcgPSBzdHJpbmdLZXktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZt
KCksIGV4ZWMtPnZtKCkuc3ltYm9sUmVnaXN0cnkoKS5zeW1ib2xGb3JLZXkoc3RyaW5nKSkpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVS
ZWdpc3RyeS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1RlbXBsYXRlUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsMTEgKzQ5LDkg
QEAgSlNBcnJheSogVGVtcGxhdGVSZWdpc3RyeTo6Z2V0VGVtcGxhdGVPYgogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICB1bnNpZ25lZCBjb3VudCA9IHRlbXBs
YXRlS2V5LmNvb2tlZFN0cmluZ3MoKS5zaXplKCk7CiAgICAgSlNBcnJheSogdGVtcGxhdGVPYmpl
Y3QgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIGNvdW50KTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBKU0FycmF5KiByYXdP
YmplY3QgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIGNvdW50KTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KSB7CiAgICAgICAgIHRlbXBs
YXRlT2JqZWN0LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwganNTdHJpbmcoZXhlYywgdGVt
cGxhdGVLZXkuY29va2VkU3RyaW5ncygpW2luZGV4XSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSwg
UHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA2
MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMTYgKzU5LDE0IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsK
ICAgICBTdHJ1Y3R1cmUqIHdlYWtNYXBTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVh
dGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0
LT53ZWFrTWFwU3RydWN0dXJlKCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBKU1dlYWtNYXAq
IHdlYWtNYXAgPSBKU1dlYWtNYXA6OmNyZWF0ZShleGVjLCB3ZWFrTWFwU3RydWN0dXJlKTsKICAg
ICBKU1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGl0ZXJhYmxl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUod2Vh
a01hcCk7CiAKICAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rpb24gPSB3ZWFrTWFwLT5KU09iamVjdDo6
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQpOwotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERhdGE7CiAgICAgQ2FsbFR5cGUg
YWRkZXJGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoYWRkZXJGdW5jdGlvbiwgYWRkZXJG
dW5jdGlvbkNhbGxEYXRhKTsKQEAgLTgzLDEyICs4MSwxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgIH0KIAogICAgICAgICBKU1ZhbHVlIGtleSA9
IG5leHRJdGVtLmdldChleGVjLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMCkpOwotICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBuZXh0SXRlbS5nZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEpKTsK
LSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAg
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQoa2V5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTksMTYgKzU5LDE0IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnMKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVu
Y3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1Y3R1cmUqIHdl
YWtTZXRTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVy
ZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT53ZWFrU2V0U3RydWN0dXJl
KCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBKU1dlYWtTZXQqIHdlYWtTZXQgPSBKU1dlYWtT
ZXQ6OmNyZWF0ZShleGVjLCB3ZWFrU2V0U3RydWN0dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxl
ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGl0ZXJhYmxlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUod2Vha1NldCk7CiAKICAgICBKU1Zh
bHVlIGFkZGVyRnVuY3Rpb24gPSB3ZWFrU2V0LT5KU09iamVjdDo6Z2V0KGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5hZGQpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBDYWxsRGF0
YSBhZGRlckZ1bmN0aW9uQ2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgYWRkZXJGdW5jdGlvbkNhbGxU
eXBlID0gZ2V0Q2FsbERhdGEoYWRkZXJGdW5jdGlvbiwgYWRkZXJGdW5jdGlvbkNhbGxEYXRhKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVBy
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDggKzMx
Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgU3Ry
aW5nIGFyZ1N0ciA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBk
YXRhTG9nKGFyZ1N0cik7CiAgICAgfQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNzUgQEAKKzIwMTYtMDkt
MjMgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZGVkIFJFVFVS
Tl9JRl9FWENFUFRJT04oKSBtYWNybyBhbmQgdXNlIGl0IGZvciBleGNlcHRpb24gY2hlY2tzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNTIxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzIGJlY2F1c2UgdGhpcyBwYXRjaCBpcyBtb3N0bHkgcmVmYWN0b3JpbmcuICBUaGUgb25seSBj
aGFuZ2UgaW4KKyAgICAgICAgYmVoYXZpb3IgaXMgdGhhdCBmdW5jdGlvbnMgdGhhdCBoYXZlIGEg
SlNWYWx1ZSByZXR1cm4gdHlwZSB3aWxsIG5vdyByZXR1cm4gdGhlCisgICAgICAgIGVtcHR5IEpT
VmFsdWUgd2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duLiAgSSB0ZXN0ZWQgdGhpcyBiZWhhdmlv
ciBieSBydW5uaW5nCisgICAgICAgIHRoZSBleGlzdGluZyBKU0MgYW5kIGxheW91dCB0ZXN0cy4K
KworICAgICAgICAqIGJpbmRpbmdzL2pzL0FycmF5VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QXJyYXlWYWx1ZTo6Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRp
bGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTQXBwbGVQYXlTZXNzaW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQXBw
bGVQYXlTZXNzaW9uOjpjb21wbGV0ZVNoaXBwaW5nTWV0aG9kU2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTQXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNlbGVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU0FwcGxlUGF5U2Vzc2lvbjo6Y29tcGxldGVQYXlt
ZW50TWV0aG9kU2VsZWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNBdWRpb1RyYWNrOjpzZXRLaW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQXVkaW9UcmFjazo6c2V0TGFuZ3VhZ2UpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RK
U0Jsb2IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3Bl
cnR5Q1NTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTTGlzdGVuZXJGdW5jdGlvbnMpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmdldEFsZ29yaXRo
bUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SGFzaEFsZ29yaXRobSk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVBZXNDYmNQYXJhbXMpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQWVzS2V5R2VuUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUhtYWNLZXlQYXJh
bXMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUnNhS2V5R2VuUGFyYW1zKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZVJzYU9hZXBQYXJhbXMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
Q3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRTdHJp
bmdGcm9tSlNPTik6CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25K
V0s6OnJlY29uY2lsZVVzYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0tleVNlcmlh
bGl6YXRpb25KV0s6OmtleURhdGFSU0FDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1
aWxkSlNPTkZvclJTQUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6YWRkVXNhZ2VzVG9K
U09OKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6c2Vy
aWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0Q3VzdG9tRWxlbWVudFN5bmNocm9ub3Vz
bHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjp1cGdyYWRl
RWxlbWVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50UmVnaXN0cnlD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUpOgorICAg
ICAgICAoV2ViQ29yZTo6d2hlbkRlZmluZWRQcm9taXNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVUb1VTVlN0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpoYXNJdGVyYXRvck1ldGhvZCk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b1NtYWxsZXJJbnQpOgorICAgICAgICAoV2ViQ29yZTo6dG9TbWFsbGVyVUludCk6CisgICAg
ICAgIChXZWJDb3JlOjp0b0ludDMyRW5mb3JjZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OnRv
VUludDMyRW5mb3JjZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSW50NjRFbmZvcmNlUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6dG9VSW50NjRFbmZvcmNlUmFuZ2UpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6dG9KU1NlcXVl
bmNlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6anNGcm96
ZW5BcnJheSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnkpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTRE9NU3RyaW5nTWFwOjpwdXREZWxlZ2F0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnNldExv
Y2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpvcGVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2cpOgorICAgICAgICAoV2ViQ29y
ZTo6aGFuZGxlUG9zdE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnNl
dFRpbWVvdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnNldEludGVydmFsKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29uc3RydWN0SlNEYXRhQ3VlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Rldmlj
ZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRBY2NlbGVyYXRp
b25Bcmd1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkUm90YXRpb25SYXRlQXJndW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SlNEZXZpY2VNb3Rpb25FdmVudDo6aW5pdERldmljZU1vdGlv
bkV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNEaWN0aW9uYXJ5Ojp0cnlHZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNEaWN0aW9uYXJ5Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU0RpY3Rpb25hcnk6OnRyeUdldFBy
b3BlcnR5QW5kUmVzdWx0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6OmdldENTU0NhbnZhc0NvbnRleHQp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRmlsZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjb25zdHJ1Y3RKU0ZpbGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTR2VvbG9jYXRp
b25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVu
dFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTR2VvbG9jYXRpb246OndhdGNoUG9zaXRp
b24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y2FsbEhUTUxBbGxDb2xsZWN0aW9uKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTSFRNTEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0
SlNIVE1MRWxlbWVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGlzdG9yeTo6cHVzaFN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTSGlzdG9yeTo6cmVwbGFjZVN0YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0lEQkRhdGFiYXNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCRGF0YWJhc2U6
OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVu
dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVJbml0TWVzc2FnZUV2ZW50KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmZpbGxNZXNzYWdlUG9ydEFycmF5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U01lc3NhZ2VQb3J0Q3VzdG9tLmg6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVQb3N0TWVzc2Fn
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6
c2V0RGVjaXNpb25Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjp0b0RlY2lzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6c2V0RGVjaXNpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjpzZXRVbmJsb2Nr
UmVxdWVzdERlY2lzaW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyOjphY2NlcHROb2RlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp0b05vZGVPclN0cmluZ1ZlY3Rvcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTUUxUcmFu
c2FjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NRTFRyYW5zYWN0aW9uOjpl
eGVjdXRlU3FsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0xlbmd0aDo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHMp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1N0b3JhZ2U6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGV4dFRy
YWNrOjpzZXRMYW5ndWFnZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVmlkZW9UcmFjazo6c2V0S2luZCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1ZpZGVvVHJhY2s6OnNldExhbmd1YWdlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRJbmRleGVkUGFyYW1ldGVyKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0T2JqZWN0UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RXh0ZW5zaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Z2V0UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Z2V0UHJvZ3JhbVBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNoYWRlclBhcmFtZXRlcik6CisgICAgICAg
IChXZWJDb3JlOjp0b1ZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpkYXRhRnVuY3Rpb25mKToK
KyAgICAgICAgKFdlYkNvcmU6OmRhdGFGdW5jdGlvbk1hdHJpeCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y3J5cHRvS2V5
VXNhZ2VzRnJvbUpTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRTdWJ0bGVDcnlw
dG86OmdlbmVyYXRlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmltcG9ydEtleSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6aW1wb3J0S2V5KToKKyAgICAgICAgKFdl
YkNvcmU6OmV4cG9ydEtleSk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0
bzo6ZXhwb3J0S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViS2l0U3VidGxlQ3J5cHRvOjp1
bndyYXBLZXkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTV29ya2VyKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV29y
a2VyR2xvYmFsU2NvcGU6OmltcG9ydFNjcmlwdHMpOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3Jr
ZXJHbG9iYWxTY29wZTo6c2V0VGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckds
b2JhbFNjb3BlOjpzZXRJbnRlcnZhbCk6CisgICAgICAgICogYmluZGluZ3MvanMvUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0
cmVhbURlZmF1bHRDb250cm9sbGVyOjppbnZva2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nj
aGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OmNy
ZWF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06Cisg
ICAgICAgIChHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnRlbnQpOgorICAgICAg
ICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnND
aGVjayk6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uRnVuY3Rpb25DYWxsKToKKyAg
ICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uKToKKyAgICAgICAgKiBodG1sL0hU
TUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udHJvbGxlckpTVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFDb250cm9s
c0FmdGVyUHJlc2VudGF0aW9uTW9kZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjpnZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1cyk6CisKIDIwMTYtMDktMjMg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZWZhY3RvciBVUkxQYXJzZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0FycmF5
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0FycmF5
VmFsdWUuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9BcnJheVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDggKzk0LDcgQEAgYm9vbCBBcnJheVZhbHVl
OjpnZXQoc2l6ZV90IGluZGV4LCBTdHJpbgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB2
YWx1ZSA9IGluZGV4ZWRWYWx1ZS50b1dURlN0cmluZyhtX2V4ZWMpOwotICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMu
Y3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJC
aW5kaW5nVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsOCArOTcsNyBAQCBKU1Zh
bHVlIHRvSlMoRXhlY1N0YXRlJiBzdGF0ZSwgSlNHbG9iYWxPCiAgICAgICAgIGF1dG8mIGluQXJy
YXkgPSBrZXktPmFycmF5KCk7CiAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBpbkFycmF5LnNpemUo
KTsKICAgICAgICAgYXV0byBvdXRBcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoJnN0YXRlLCAw
LCAmZ2xvYmFsT2JqZWN0LCBzaXplKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkKICAgICAgICAgICAgIG91dEFycmF5LT5wdXREaXJlY3RJbmRl
eCgmc3RhdGUsIGksIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW5BcnJheS5hdChpKS5nZXQo
KSkpOwogICAgICAgICByZXR1cm4gb3V0QXJyYXk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0FwcGxlUGF5U2Vzc2lvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcHBsZVBheVNlc3Npb25DdXN0b20uY3BwCShyZXZpc2lv
biAyMDYzMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FwcGxlUGF5U2Vzc2lv
bkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE2ICs1NSwxMyBAQCBKU1ZhbHVlIEpT
QXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZVNoaXBwCiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICB1aW50MTZfdCBzdGF0dXMgPSBjb252ZXJ0PHVpbnQxNl90PihzdGF0ZSwgc3RhdGUu
YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBEaWN0aW9uYXJ5IG5ld1RvdGFs
ID0geyAmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDEpIH07Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIEFycmF5VmFsdWUgbmV3TGlu
ZUl0ZW1zIHsgJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgyKSB9OwotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgaW1wbC5jb21wbGV0ZVNo
aXBwaW5nTWV0aG9kU2VsZWN0aW9uKHN0YXR1cywgbmV3VG90YWwsIG5ld0xpbmVJdGVtcywgZWMp
OwogICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKIApAQCAtODgsMjAgKzg1LDE2IEBA
IEpTVmFsdWUgSlNBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlU2hpcHAKIAogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIHVpbnQxNl90IHN0YXR1cyA9IGNvbnZlcnQ8dWludDE2X3Q+KHN0
YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIEFycmF5VmFs
dWUgbmV3U2hpcHBpbmdNZXRob2RzIHsgJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgxKSB9OwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAg
ICBEaWN0aW9uYXJ5IG5ld1RvdGFsID0geyAmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpIH07Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAog
ICAgIEFycmF5VmFsdWUgbmV3TGluZUl0ZW1zIHsgJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgzKSB9
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7
CiAgICAgaW1wbC5jb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNlbGVjdGlvbihzdGF0dXMsIG5ld1No
aXBwaW5nTWV0aG9kcywgbmV3VG90YWwsIG5ld0xpbmVJdGVtcywgZWMpOwogICAgIHNldERPTUV4
Y2VwdGlvbigmc3RhdGUsIGVjKTsKIApAQCAtMTI1LDEyICsxMTgsMTAgQEAgSlNWYWx1ZSBKU0Fw
cGxlUGF5U2Vzc2lvbjo6Y29tcGxldGVQYXltZQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgRGljdGlvbmFyeSBuZXdUb3RhbCA9IHsgJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSB9
OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7
CiAKICAgICBBcnJheVZhbHVlIG5ld0xpbmVJdGVtcyB7ICZzdGF0ZSwgc3RhdGUuYXJndW1lbnQo
MSkgfTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVl
KCkpOwogICAgIGltcGwuY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKG5ld1RvdGFsLCBu
ZXdMaW5lSXRlbXMsIGVjKTsKICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNB
dWRpb1RyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsNyBAQCB2b2lk
IEpTQXVkaW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgYXV0byYgc3RyaW5nID0gdmFsdWUudG9TdHJp
bmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKICAgICB3cmFwcGVkKCkuc2V0S2luZChzdHJpbmcpOwogI2Vsc2UKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwpAQCAtNjMsOCArNjIsNyBAQCB2b2lkIEpTQXVkaW9UcmFjazo6c2V0
TGFuZ3VhZ2UoRXhlY1N0YXRlCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgYXV0byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUo
JnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB3cmFw
cGVkKCkuc2V0TGFuZ3VhZ2Uoc3RyaW5nKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsOCArODAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAKICAgICB1bnNpZ25lZCBibG9iUGFydHNMZW5ndGgg
PSAwOwogICAgIEpTT2JqZWN0KiBibG9iUGFydHMgPSB0b0pTU2VxdWVuY2UoZXhlYywgZXhlYy51
bmNoZWNrZWRBcmd1bWVudCgwKSwgYmxvYlBhcnRzTGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIEFTU0VSVChibG9iUGFydHMpOwogCiAgICAgU3RyaW5nIHR5cGU7CkBAIC0xMDEs
OCArMTAwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogCiAg
ICAgICAgIC8vIEF0dGVtcHQgdG8gZ2V0IHRoZSBlbmRpbmdzIHByb3BlcnR5IGFuZCB2YWxpZGF0
ZSBpdC4KICAgICAgICAgYm9vbCBjb250YWluc0VuZGluZ3MgPSBkaWN0aW9uYXJ5LmdldCgiZW5k
aW5ncyIsIGVuZGluZ3MpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAg
ICAgICAgaWYgKGNvbnRhaW5zRW5kaW5ncykgewogICAgICAgICAgICAgaWYgKGVuZGluZ3MgIT0g
InRyYW5zcGFyZW50IiAmJiBlbmRpbmdzICE9ICJuYXRpdmUiKQpAQCAtMTExLDggKzEwOSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKIAogICAgICAgICAvLyBB
dHRlbXB0IHRvIGdldCB0aGUgdHlwZSBwcm9wZXJ0eS4KICAgICAgICAgZGljdGlvbmFyeS5nZXQo
InR5cGUiLCB0eXBlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0K
IAogICAgIEFTU0VSVChlbmRpbmdzID09ICJ0cmFuc3BhcmVudCIgfHwgZW5kaW5ncyA9PSAibmF0
aXZlIik7CkBAIC0xMjEsOCArMTE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RKUwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2JQYXJ0c0xlbmd0
aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgaXRlbSA9IGJsb2JQYXJ0cy0+Z2V0KCZleGVjLCBp
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgICAgIGlmIChBcnJh
eUJ1ZmZlciogYXJyYXlCdWZmZXIgPSB0b0FycmF5QnVmZmVyKGl0ZW0pKQogICAgICAgICAgICAg
YmxvYkJ1aWxkZXIuYXBwZW5kKGFycmF5QnVmZmVyKTsKQEAgLTEzMiw4ICsxMjgsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgICAgICAgICBibG9iQnVp
bGRlci5hcHBlbmQoYmxvYik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgU3RyaW5nIHN0
cmluZyA9IGl0ZW0udG9XVEZTdHJpbmcoJmV4ZWMpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgICAgICBibG9iQnVpbGRlci5hcHBlbmQoc3Ry
aW5nLCBlbmRpbmdzKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NT
dHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU1LDggKzM1NSw3
IEBAIEpTVmFsdWUgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXIKICAgICAgICAgcmV0
dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgU3RyaW5nIHByb3BlcnR5TmFtZSA9IHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1
ZT4gY3NzVmFsdWUgPSB3cmFwcGVkKCkuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eU5hbWUp
OwogICAgIGlmICghY3NzVmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAy
MDYzMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbW1hbmRMaW5lQVBJSG9z
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNv
bT4KICAqIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgpAQCAtNzAsOCArNzAsNyBAQCBzdGF0aWMgSlNBcnJheSogZ2V0SlNMaXN0ZW5l
ckZ1bmN0aW9ucyhFCiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0
RW1wdHlBcnJheSgmc3RhdGUsIG51bGxwdHIpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOwogICAgIHNpemVfdCBoYW5kbGVyc0NvdW50ID0gbGlzdGVuZXJJ
bmZvLmV2ZW50TGlzdGVuZXJWZWN0b3Iuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwLCBv
dXRwdXRJbmRleCA9IDA7IGkgPCBoYW5kbGVyc0NvdW50OyArK2kpIHsKICAgICAgICAgY29uc3Qg
SlNFdmVudExpc3RlbmVyKiBqc0xpc3RlbmVyID0gSlNFdmVudExpc3RlbmVyOjpjYXN0KCZsaXN0
ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3RvcltpXS0+Y2FsbGJhY2soKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGht
RGljdGlvbmFyeS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgwLDggKzgwLDcgQEAgYm9vbCBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmdldEFsZwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZh
bHNlKTsKIAogICAgIGlmICghYWxnb3JpdGhtTmFtZS5jb250YWluc09ubHlBU0NJSSgpKSB7CiAg
ICAgICAgIHRocm93U3ludGF4RXJyb3IoZXhlYywgc2NvcGUpOwpAQCAtMTEzLDggKzExMiw3IEBA
IHN0YXRpYyBib29sIGdldEhhc2hBbGdvcml0aG0oSlNEaWN0aW9uYXIKICAgICBJZGVudGlmaWVy
IGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJoYXNoIik7CiAKICAg
ICBKU1ZhbHVlIGhhc2ggPSBnZXRQcm9wZXJ0eShleGVjLCBvYmplY3QsICJoYXNoIik7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIGlmIChoYXNoLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgaWYgKGlzUmVxdWlyZWQgPT0gSGFzaFJlcXVp
cmVtZW50OjpSZXF1aXJlZCkKQEAgLTEzNiw4ICsxMzQsNyBAQCBzdGF0aWMgUmVmUHRyPENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnM+CiAgICAgfQogCiAgICAgSlNWYWx1ZSBpdiA9IGdldFByb3Bl
cnR5KGV4ZWMsIHZhbHVlLmdldE9iamVjdCgpLCAiaXYiKTsKLSAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYo
Km5ldyBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMpOwogCkBAIC0xNzAsOCArMTY3LDcgQEAg
c3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgIGF1dG8gcmVzdWx0
ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1BZXNLZXlHZW5QYXJhbXMpOwogCiAgICAg
SlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IGdldFByb3BlcnR5KCZzdGF0ZSwgdmFsdWUuZ2V0T2JqZWN0
KCksICJsZW5ndGgiKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKIAogICAgIHJlc3VsdC0+bGVuZ3RoID0gY29udmVydDx1aW50MTZfdD4oc3RhdGUsIGxl
bmd0aFZhbHVlLCBFbmZvcmNlUmFuZ2UpOwogCkBAIC0yMTgsOCArMjE0LDcgQEAgc3RhdGljIFJl
ZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIHJlc3VsdC0+aGFzTGVuZ3RoID0ganNEaWN0aW9uYXJ5LmdldCgibGVuZ3RoIiwgcmVz
dWx0LT5sZW5ndGgpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwogCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KQEAgLTIzOCwxNyArMjMzLDE0
IEBAIHN0YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICBhdXRvIHJl
c3VsdCA9IGFkb3B0UmVmKCpuZXcgQ3J5cHRvQWxnb3JpdGhtUnNhS2V5R2VuUGFyYW1zKTsKIAog
ICAgIEpTVmFsdWUgbW9kdWx1c0xlbmd0aFZhbHVlID0gZ2V0UHJvcGVydHkoJnN0YXRlLCB2YWx1
ZS5nZXRPYmplY3QoKSwgIm1vZHVsdXNMZW5ndGgiKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIC8vIEZJWE1FOiBXaHkgbm8gRW5mb3JjZVJh
bmdlPyBGaWxlZCBhcyA8aHR0cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNn
aT9pZD0yMzc3OT4uCiAgICAgcmVzdWx0LT5tb2R1bHVzTGVuZ3RoID0gY29udmVydDx1aW50MzJf
dD4oc3RhdGUsIG1vZHVsdXNMZW5ndGhWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBKU1ZhbHVlIHB1
YmxpY0V4cG9uZW50VmFsdWUgPSBnZXRQcm9wZXJ0eSgmc3RhdGUsIHZhbHVlLmdldE9iamVjdCgp
LCAicHVibGljRXhwb25lbnQiKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKIAogICAgIFJlZlB0cjxVaW50OEFycmF5PiBwdWJsaWNFeHBvbmVudEFycmF5
ID0gdG9VaW50OEFycmF5KHB1YmxpY0V4cG9uZW50VmFsdWUpOwogICAgIGlmICghcHVibGljRXhw
b25lbnRBcnJheSkgewpAQCAtMjg3LDggKzI3OSw3IEBAIHN0YXRpYyBSZWZQdHI8Q3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycz4KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBKU1ZhbHVl
IGxhYmVsVmFsdWUgPSBnZXRQcm9wZXJ0eShleGVjLCB2YWx1ZS5nZXRPYmplY3QoKSwgImxhYmVs
Iik7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAg
ICByZXN1bHQtPmhhc0xhYmVsID0gIWxhYmVsVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAg
ICBpZiAoIXJlc3VsdC0+aGFzTGFiZWwpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAJKHJldmlz
aW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2Vy
aWFsaXphdGlvbkpXSy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDggKzg4LDcgQEAgc3RhdGlj
IGJvb2wgZ2V0U3RyaW5nRnJvbUpTT04oRXhlY1N0YXRlKgogICAgIEFTU0VSVCghc2NvcGUuZXhj
ZXB0aW9uKCkpOwogICAgIGlmICghanNWYWx1ZS5nZXRTdHJpbmcoZXhlYywgcmVzdWx0KSkgewog
ICAgICAgICAvLyBDYW4gZ2V0IGFuIG91dCBvZiBtZW1vcnkgZXhjZXB0aW9uLgotICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBTdHJpbmc6OmZvcm1hdCgiRXhwZWN0ZWQgYSBzdHJp
bmcgdmFsdWUgZm9yIFwiJXNcIiBKU09OIGtleSIsICBrZXkpKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KQEAgLTMyMCw4ICszMTksNyBAQCB2b2lkIEpTQ3J5cHRvS2V5U2VyaWFsaXph
dGlvbkpXSzo6cmVjb25jCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgp
KTsKIAogICAgICAgICBTdHJpbmcgandrVXNlU3RyaW5nOwogICAgICAgICBpZiAoIWdldFN0cmlu
Z0Zyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAidXNlIiwgandrVXNlU3RyaW5nKSkgewpA
QCAtNDM3LDggKzQzNSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBKU0NyeXB0
b0sKICAgICB9CiAKICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMs
IG1fanNvbi5nZXQoKSwgImQiLCBtb2R1bHVzKSkgewotICAgICAgICBpZiAoc2NvcGUuZXhjZXB0
aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNB
Q29tcG9uZW50czo6Y3JlYXRlUHVibGljKG1vZHVsdXMsIGV4cG9uZW50KTsKICAgICB9CiAKQEAg
LTQ0Niw0NyArNDQzLDQwIEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBKU0NyeXB0
b0sKICAgICBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIHNlY29uZFByaW1l
SW5mbzsKICAgICBWZWN0b3I8Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbz4g
b3RoZXJQcmltZUluZm9zOwogICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1f
ZXhlYywgbV9qc29uLmdldCgpLCAicCIsIGZpcnN0UHJpbWVJbmZvLnByaW1lRmFjdG9yKSkgewot
ICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAg
IHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVz
LCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50KTsKICAgICB9CiAKICAgICBpZiAoIWdldEJpZ0lu
dGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImRwIiwgZmlyc3RQcmlt
ZUluZm8uZmFjdG9yQ1JURXhwb25lbnQpKSB7Ci0gICAgICAgIGlmIChzY29wZS5leGNlcHRpb24o
KSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21w
b25lbnRzOjpjcmVhdGVQcml2YXRlKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25lbnQp
OwogICAgIH0KIAogICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywg
bV9qc29uLmdldCgpLCAicSIsIHNlY29uZFByaW1lSW5mby5wcmltZUZhY3RvcikpIHsKLSAgICAg
ICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICByZXR1
cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGUobW9kdWx1cywgZXhw
b25lbnQsIHByaXZhdGVFeHBvbmVudCk7CiAgICAgfQogCiAgICAgaWYgKCFnZXRCaWdJbnRlZ2Vy
VmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJkcSIsIHNlY29uZFByaW1lSW5m
by5mYWN0b3JDUlRFeHBvbmVudCkpIHsKLSAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOwogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVu
dHM6OmNyZWF0ZVByaXZhdGUobW9kdWx1cywgZXhwb25lbnQsIHByaXZhdGVFeHBvbmVudCk7CiAg
ICAgfQogCiAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pz
b24uZ2V0KCksICJxaSIsIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRDb2VmZmljaWVudCkpIHsK
LSAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAg
ICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGUobW9kdWx1
cywgZXhwb25lbnQsIHByaXZhdGVFeHBvbmVudCk7CiAgICAgfQogCiAgICAgSlNBcnJheSogb3Ro
ZXJQcmltZUluZm9KU0FycmF5OwogICAgIGlmICghZ2V0SlNBcnJheUZyb21KU09OKG1fZXhlYywg
bV9qc29uLmdldCgpLCAib3RoIiwgb3RoZXJQcmltZUluZm9KU0FycmF5KSkgewotICAgICAgICBp
ZiAoc2NvcGUuZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIHJldHVybiBD
cnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0
YShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50LCBmaXJzdFByaW1lSW5mbywgc2Vj
b25kUHJpbWVJbmZvLCBvdGhlclByaW1lSW5mb3MpOwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgb3RoZXJQcmltZUluZm9KU0FycmF5LT5sZW5ndGgoKTsgKytpKSB7CiAgICAg
ICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpQcmltZUluZm8gaW5mbzsKICAgICAgICAg
SlNWYWx1ZSBlbGVtZW50ID0gb3RoZXJQcmltZUluZm9KU0FycmF5LT5nZXRJbmRleChtX2V4ZWMs
IGkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51
bGxwdHIpOwogICAgICAgICBpZiAoIWVsZW1lbnQuaXNPYmplY3QoKSkgewogICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJKV0sgXCJvdGhcIiBh
cnJheSBtZW1iZXIgaXMgbm90IGFuIG9iamVjdCIpKTsKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtNTc0LDggKzU2NCw3IEBAIHN0YXRpYyB2b2lkIGJ1aWxkSlNPTkZvclJTQUNvbXBv
bmVudHMoSlMKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNBcnJheSogb3RoID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCAwLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGRhdGEub3Ro
ZXJQcmltZUluZm9zKCkuc2l6ZSgpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IGRhdGEub3RoZXJQcmltZUluZm9z
KCkuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBqc1ByaW1lSW5m
byA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgICAgICBhZGRUb0pTT04oZXhlYywg
anNQcmltZUluZm8sICJyIiwgYmFzZTY0VVJMRW5jb2RlKGRhdGEub3RoZXJQcmltZUluZm9zKClb
aV0ucHJpbWVGYWN0b3IpKTsKQEAgLTcwMiw4ICs2OTEsNyBAQCBzdGF0aWMgdm9pZCBhZGRVc2Fn
ZXNUb0pTT04oRXhlY1N0YXRlKiBlCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSoga2V5T3BzID0g
Y29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IDApOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
bjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgdW5zaWdu
ZWQgaW5kZXggPSAwOwogICAgIGlmICh1c2FnZXMgJiBDcnlwdG9LZXlVc2FnZVNpZ24pCkBAIC03
NDEsMTQgKzcyOSwxMiBAQCBTdHJpbmcgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpzZXJp
CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogCiAg
ICAgYWRkSldLQWxnb3JpdGhtVG9KU09OKGV4ZWMsIHJlc3VsdCwga2V5KTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgU3RyaW5nKCkpOwogCiAgICAgYWRkQm9vbFRvSlNP
TihleGVjLCByZXN1bHQsICJleHQiLCBrZXkuZXh0cmFjdGFibGUoKSk7CiAKICAgICBhZGRVc2Fn
ZXNUb0pTT04oZXhlYywgcmVzdWx0LCBrZXkudXNhZ2VzQml0bWFwKCkpOwotICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBTdHJpbmcoKSk7CiAKICAgICBpZiAoaXM8Q3J5cHRv
S2V5RGF0YU9jdGV0U2VxdWVuY2U+KCprZXlEYXRhKSkKICAgICAgICAgYnVpbGRKU09ORm9yT2N0
ZXRTZXF1ZW5jZShleGVjLCBkb3duY2FzdDxDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZT4oKmtl
eURhdGEpLm9jdGV0U2VxdWVuY2UoKSwgcmVzdWx0KTsKQEAgLTc1OCw4ICs3NDQsNyBAQCBTdHJp
bmcgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpzZXJpCiAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIktleSBkb2Vzbid0IHN1cHBvcnQgZXhwb3J0
S2V5IikpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQotICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBTdHJpbmcoKSk7CiAKICAgICByZXR1cm4gSlNPTlN0cmlu
Z2lmeShleGVjLCByZXN1bHQsIDApOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAy
MDYzMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRl
cmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsOCArMTExLDcgQEAgc3RhdGljIFJlZlB0
cjxFbGVtZW50PiBjb25zdHJ1Y3RDdXN0b21FbAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZSBjb29raWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6Omluc3RydW1lbnRGdW5jdGlv
bkNvbnN0cnVjdCgmZG9jdW1lbnQsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEpOwogICAg
IEpTVmFsdWUgbmV3RWxlbWVudCA9IGNvbnN0cnVjdCgmc3RhdGUsIGNvbnN0cnVjdG9yLCBjb25z
dHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzKTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZENhbGxGdW5jdGlvbihjb29raWUsICZkb2N1bWVudCk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBBU1NFUlQoIW5ld0VsZW1l
bnQuaXNFbXB0eSgpKTsKICAgICBIVE1MRWxlbWVudCogd3JhcHBlZEVsZW1lbnQgPSBKU0hUTUxF
bGVtZW50Ojp0b1dyYXBwZWQobmV3RWxlbWVudCk7CkBAIC0xNjcsOCArMTY2LDcgQEAgdm9pZCBK
U0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6OnVwZ3JhZGVFbAogICAgIEFTU0VSVChjb250ZXh0LT5p
c0RvY3VtZW50KCkpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pT
RE9NR2xvYmFsT2JqZWN0KGNvbnRleHQsICptX2lzb2xhdGVkV29ybGQpOwogICAgIEV4ZWNTdGF0
ZSogc3RhdGUgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsK
ICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBtX2NvbnN0cnVjdG9yLT5tZXRob2RU
YWJsZSgpLT5nZXRDb25zdHJ1Y3REYXRhKG1fY29uc3RydWN0b3IuZ2V0KCksIGNvbnN0cnVjdERh
dGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50UmVn
aXN0cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50UmVnaXN0cnlDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw3IEBAIHN0YXRpYyBKU09iamVjdCogZ2V0
Q3VzdG9tRWxlbWVudENhbGxiYWMKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBKU1ZhbHVlIGNhbGxiYWNrID0gcHJvdG90eXBlLmdldCgmc3RhdGUsIGlk
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBp
ZiAoY2FsbGJhY2suaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
aWYgKCFjYWxsYmFjay5pc0Z1bmN0aW9uKCkpIHsKQEAgLTg4LDggKzg3LDcgQEAgSlNWYWx1ZSBK
U0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZGVmaW5lKAogICAgICAgICByZXR1cm4gdGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRl
KSk7CiAKICAgICBBdG9taWNTdHJpbmcgbG9jYWxOYW1lKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDApLnRvU3RyaW5nKCZzdGF0ZSktPnRvQXRvbWljU3RyaW5nKCZzdGF0ZSkpOwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBKU1Zh
bHVlIGNvbnN0cnVjdG9yVmFsdWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKTsKICAgICBp
ZiAoIWNvbnN0cnVjdG9yVmFsdWUuaXNDb25zdHJ1Y3RvcigpKQpAQCAtMTE4LDggKzExNiw3IEBA
IEpTVmFsdWUgSlNDdXN0b21FbGVtZW50UmVnaXN0cnk6OmRlZmluZSgKICAgICB9CiAKICAgICBK
U1ZhbHVlIHByb3RvdHlwZVZhbHVlID0gY29uc3RydWN0b3ItPmdldCgmc3RhdGUsIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBpZiAoIXByb3RvdHlwZVZhbHVlLmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVy
YWwoIkN1c3RvbSBlbGVtZW50IGNvbnN0cnVjdG9yJ3MgcHJvdG90eXBlIG11c3QgYmUgYW4gb2Jq
ZWN0IikpOwogICAgIEpTT2JqZWN0JiBwcm90b3R5cGVPYmplY3QgPSAqYXNPYmplY3QocHJvdG90
eXBlVmFsdWUpOwpAQCAtMTI5LDI2ICsxMjYsMjEgQEAgSlNWYWx1ZSBKU0N1c3RvbUVsZW1lbnRS
ZWdpc3RyeTo6ZGVmaW5lKAogCiAgICAgaWYgKGF1dG8qIGNvbm5lY3RlZENhbGxiYWNrID0gZ2V0
Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiY29ubmVjdGVkQ2FsbGJhY2siKSkpCiAgICAgICAgIGVsZW1lbnRJ
bnRlcmZhY2UtPnNldENvbm5lY3RlZENhbGxiYWNrKGNvbm5lY3RlZENhbGxiYWNrKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAg
aWYgKGF1dG8qIGRpc2Nvbm5lY3RlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNr
KHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZGlz
Y29ubmVjdGVkQ2FsbGJhY2siKSkpCiAgICAgICAgIGVsZW1lbnRJbnRlcmZhY2UtPnNldERpc2Nv
bm5lY3RlZENhbGxiYWNrKGRpc2Nvbm5lY3RlZENhbGxiYWNrKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgaWYgKGF1dG8qIGFk
b3B0ZWRDYWxsYmFjayA9IGdldEN1c3RvbUVsZW1lbnRDYWxsYmFjayhzdGF0ZSwgcHJvdG90eXBl
T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImFkb3B0ZWRDYWxsYmFjayIpKSkK
ICAgICAgICAgZWxlbWVudEludGVyZmFjZS0+c2V0QWRvcHRlZENhbGxiYWNrKGFkb3B0ZWRDYWxs
YmFjayk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1
ZSgpKTsKIAogICAgIGF1dG8qIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayA9IGdldEN1c3RvbUVs
ZW1lbnRDYWxsYmFjayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayIpKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIGlmIChhdHRyaWJ1dGVD
aGFuZ2VkQ2FsbGJhY2spIHsKICAgICAgICAgYXV0byB2YWx1ZSA9IGNvbnZlcnRPcHRpb25hbDxW
ZWN0b3I8U3RyaW5nPj4oc3RhdGUsIGNvbnN0cnVjdG9yLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgIm9ic2VydmVkQXR0cmlidXRlcyIpKSk7Ci0gICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsK
ICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgZWxlbWVudEludGVyZmFjZS0+c2V0QXR0
cmlidXRlQ2hhbmdlZENhbGxiYWNrKGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaywgKnZhbHVlKTsK
ICAgICB9CkBAIC0xNzAsOCArMTYyLDcgQEAgc3RhdGljIEpTVmFsdWUgd2hlbkRlZmluZWRQcm9t
aXNlKEV4ZWNTdAogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBBdG9taWNTdHJp
bmcgbG9jYWxOYW1lKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSkt
PnRvQXRvbWljU3RyaW5nKCZzdGF0ZSkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBpZiAoIXZhbGlkYXRlQ3VzdG9tRWxlbWVu
dE5hbWVBbmRUaHJvd0lmTmVlZGVkKHN0YXRlLCBsb2NhbE5hbWUpKSB7CiAgICAgICAgIEFTU0VS
VChzY29wZS5leGNlcHRpb24oKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw4ICsxMjMs
NyBAQCBTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsCiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIHN0cmluZyA9IHZh
bHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiB7IH07CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICBTdHJpbmdWaWV3IHZpZXcgeyBzdHJpbmcgfTsKIAogICAgIC8vIEZhc3QgcGF0
aCBmb3IgOC1iaXQgc3RyaW5ncywgc2luY2UgdGhleSBjYW4ndCBoYXZlIGFueSBzdXJyb2dhdGVz
LgpAQCAtMzgwLDggKzM3OSw3IEBAIGJvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3Rh
dGUmIHMKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAg
ICBKU1ZhbHVlIGFwcGx5TWV0aG9kID0gb2JqZWN0LT5nZXRNZXRob2QoJnN0YXRlLCBjYWxsRGF0
YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBBU0NJSUxpdGVy
YWwoIlN5bWJvbC5pdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIHJldHVybiAhYXBw
bHlNZXRob2QuaXNVbmRlZmluZWQoKTsKIH0KQEAgLTUxOSw4ICs1MTcsNyBAQCBzdGF0aWMgaW5s
aW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0ZSYgCiAgICAgfQogCiAgICAgZG91YmxlIHggPSB2
YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiAwOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDAp
OwogCiAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CiAgICAgY2FzZSBOb3JtYWxDb252ZXJz
aW9uOgpAQCAtNTY2LDggKzU2Myw3IEBAIHN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJVSW50KEV4
ZWNTdGF0ZSYKICAgICB9CiAKICAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CiAKICAgICBzd2l0Y2ggKGNvbmZp
Z3VyYXRpb24pIHsKICAgICBjYXNlIE5vcm1hbENvbnZlcnNpb246CkBAIC02NTksOCArNjU1LDcg
QEAgaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgcwogICAgICAgICByZXR1
cm4gdmFsdWUuYXNJbnQzMigpOwogCiAgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biAwOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogICAgIHJldHVybiBlbmZv
cmNlUmFuZ2Uoc3RhdGUsIHgsIGtNaW5JbnQzMiwga01heEludDMyKTsKIH0KIApAQCAtNjkyLDgg
KzY4Nyw3IEBAIHVpbnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYKICAgICAg
ICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CiAKICAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CiAgICAgcmV0
dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga01heFVJbnQzMik7CiB9CiAKQEAgLTcwMyw4
ICs2OTcsNyBAQCBpbnQ2NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzCiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgZG91YmxlIHggPSB2
YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiAwOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDAp
OwogICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIC1rSlNNYXhJbnRlZ2VyLCBrSlNN
YXhJbnRlZ2VyKTsKIH0KIApAQCAtNzE0LDggKzcwNyw3IEBAIHVpbnQ2NF90IHRvVUludDY0RW5m
b3JjZVJhbmdlKEV4ZWNTdGF0ZSYKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CiAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0
ZSwgeCwgMCwga0pTTWF4SW50ZWdlcik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNTYzLDggKzU2
Myw3IEBAIGlubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjoKICAgICB9CiAK
ICAgICBKU0M6OkpTVmFsdWUgbGVuZ3RoVmFsdWUgPSBvYmplY3QtPmdldCgmZXhlYywgZXhlYy5w
cm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKIAogICAgIGlmIChsZW5ndGhWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KSB7CiAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoZXhlYywgc2NvcGUpOwpAQCAtNTcy
LDggKzU3MSw3IEBAIGlubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjoKICAg
ICB9CiAKICAgICBsZW5ndGggPSBsZW5ndGhWYWx1ZS50b1VJbnQzMigmZXhlYyk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICByZXR1cm4gb2Jq
ZWN0OwogfQpAQCAtNjE5LDggKzYxNyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBK
U0M6OkpTVmFsdWUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxs
cHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHZlY3Rvci5zaXplKCk7ICsraSkKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMs
IGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0pKTsKICAgICByZXR1cm4gYXJy
YXk7CkBAIC02MzIsOCArNjI5LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6
SlNWYWx1ZQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIs
IHZlY3Rvci5zaXplKCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVj
dG9yLnNpemUoKTsgKytpKQogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwg
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXS5nZXQoKSkpOwogICAgIHJldHVybiBh
cnJheTsKQEAgLTcyMiwxMiArNzE4LDEwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2kKICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CiAgICAgZm9y
IChhdXRvJiBlbGVtZW50IDogdmVjdG9yKSB7CiAgICAgICAgIGxpc3QuYXBwZW5kKEpTVmFsdWVU
cmFpdHM8VD46OmFycmF5SlNWYWx1ZShleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVy
biBKU0M6OmpzVW5kZWZpbmVkKCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IEpTQzo6SlNWYWx1ZSgpKTsKICAgICB9CiAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVj
dEFycmF5KGV4ZWMsIG51bGxwdHIsIGdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQo
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CiAgICAg
cmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoZXhlYywgYXJyYXkpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAJKHJldmlz
aW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIHJlamVjdFByb21pc2VXaXRo
RXhjZXB0aW9uSWZBbnkoSlNDCiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKLSAgICBpZiAoIXNjb3BlLmV4Y2VwdGlv
bigpKQorICAgIGlmIChMSUtFTFkoIXNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgSlNWYWx1ZSBlcnJvciA9IHNjb3BlLmV4Y2VwdGlvbigpLT52YWx1ZSgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01TdHJpbmdNYXBDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw3IEBA
IGJvb2wgSlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKEV4ZWNTdGEKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7
CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICB3cmFwcGVkKCkuc2V0SXRlbShwcm9w
ZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBzdHJpbmdWYWx1ZSwgZWMpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAko
cmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTcsOCArMzk3LDcgQEAgdm9pZCBKU0RP
TVdpbmRvdzo6c2V0TG9jYXRpb24oRXhlY1N0YXRlJgogI2VuZGlmCiAKICAgICBTdHJpbmcgbG9j
YXRpb25TdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgaWYgKExvY2F0aW9uKiBs
b2NhdGlvbiA9IHdyYXBwZWQoKS5sb2NhdGlvbigpKQogICAgICAgICBsb2NhdGlvbi0+c2V0SHJl
ZihhY3RpdmVET01XaW5kb3coJnN0YXRlKSwgZmlyc3RET01XaW5kb3coJnN0YXRlKSwgbG9jYXRp
b25TdHJpbmcpOwpAQCAtNDI1LDE1ICs0MjQsMTIgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6b3Bl
bihFeGVjU3RhdGUmIHN0YQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgSlNWYWx1ZSB0YXJn
ZXRWYWx1ZSA9IHN0YXRlLmFyZ3VtZW50KDEpOwogICAgIEF0b21pY1N0cmluZyB0YXJnZXQgPSB0
YXJnZXRWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpID8gQXRvbWljU3RyaW5nKCJfYmxhbmsiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSA6IHRhcmdldFZhbHVlLnRvU3RyaW5n
KCZzdGF0ZSktPnRvQXRvbWljU3RyaW5nKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBTdHJpbmcgd2luZG93RmVhdHVy
ZXNTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwg
c3RhdGUuYXJndW1lbnQoMikpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBSZWZQdHI8RE9NV2luZG93PiBvcGVuZWRXaW5kb3cg
PSB3cmFwcGVkKCkub3Blbih1cmxTdHJpbmcsIHRhcmdldCwgd2luZG93RmVhdHVyZXNTdHJpbmcs
IGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpLCBmaXJzdERPTVdpbmRvdygmc3RhdGUpKTsKICAgICBp
ZiAoIW9wZW5lZFdpbmRvdykKQEAgLTQ4OCwxMSArNDg0LDkgQEAgSlNWYWx1ZSBKU0RPTVdpbmRv
dzo6c2hvd01vZGFsRGlhbG9nKEV4ZQogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0
YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAg
ICBTdHJpbmcgdXJsU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVj
aygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIFN0cmluZyBkaWFsb2dGZWF0dXJlc1N0
cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0
ZS5hcmd1bWVudCgyKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgSlNWYWx1ZSgpKTsKIAogICAgIERpYWxvZ0hhbmRsZXIgaGFuZGxlcihzdGF0ZSk7CiAKQEAg
LTUyOSwxNyArNTIzLDE0IEBAIHN0YXRpYyBKU1ZhbHVlIGhhbmRsZVBvc3RNZXNzYWdlKERPTVdp
bmQKICAgICAgICAgfQogICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShzdGF0ZSwgc3RhdGUu
YXJndW1lbnQodHJhbnNmZXJhYmxlc0FyZ0luZGV4KSwgbWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZl
cnMpOwogICAgIH0KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBK
U1ZhbHVlKCkpOwogCiAgICAgYXV0byBtZXNzYWdlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSwgJm1lc3NhZ2VQb3J0cywg
JmFycmF5QnVmZmVycyk7CiAKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgU3RyaW5nIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9VU1ZT
dHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudCh0YXJnZXRPcmlnaW5BcmdJbmRleCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBpbXBsLnBvc3RNZXNzYWdlKFdURk1vdmUobWVzc2FnZSksICZtZXNzYWdlUG9ydHMsIHRh
cmdldE9yaWdpbiwgY2FsbGVyRE9NV2luZG93KCZzdGF0ZSksIGVjKTsKQEAgLTU2Myw4ICs1NTQs
NyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93OjpzZXRUaW1lb3V0KEV4ZWNTdGF0CiAKICAgICBDb250
ZW50U2VjdXJpdHlQb2xpY3kqIGNvbnRlbnRTZWN1cml0eVBvbGljeSA9IHdyYXBwZWQoKS5kb2N1
bWVudCgpID8gd3JhcHBlZCgpLmRvY3VtZW50KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpIDog
bnVsbHB0cjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBT
Y2hlZHVsZWRBY3Rpb246OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLT53b3JsZCgpLCBj
b250ZW50U2VjdXJpdHlQb2xpY3kpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBpZiAoIWFjdGlvbikKICAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKDApOwpAQCAtNTg4LDggKzU3OCw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnNl
dEludGVydmFsKEV4ZWNTdGEKIAogICAgIENvbnRlbnRTZWN1cml0eVBvbGljeSogY29udGVudFNl
Y3VyaXR5UG9saWN5ID0gd3JhcHBlZCgpLmRvY3VtZW50KCkgPyB3cmFwcGVkKCkuZG9jdW1lbnQo
KS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCkgOiBudWxscHRyOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGljeSk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBp
bnQgZGVsYXkgPSBzdGF0ZS5hcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7CiAKICAgICBpZiAo
IWFjdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YUN1ZUN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhQ3Vl
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNEYXRhQ3VlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTIgKzU4LDEwIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcigmZXhlYywgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KCZleGVjKSk7CiAKICAgICBkb3VibGUgc3RhcnRUaW1lKGV4ZWMudW5jaGVja2VkQXJndW1lbnQo
MCkudG9OdW1iZXIoJmV4ZWMpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgZG91Ymxl
IGVuZFRpbWUoZXhlYy51bmNoZWNrZWRBcmd1bWVudCgxKS50b051bWJlcigmZXhlYykpOwotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
ID0gY2FzdGVkVGhpcy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4
dCkKQEAgLTg3LDggKzg1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKUwogICAgIGlmICh2YWx1ZUFyZ3VtZW50LmlzQ2VsbCgpICYmIHZhbHVlQXJndW1lbnQuYXND
ZWxsKCktPmluaGVyaXRzKHN0ZDo6cmVtb3ZlX3BvaW50ZXI8SlNBcnJheUJ1ZmZlcio+Ojp0eXBl
OjppbmZvKCkpKSB7CiAKICAgICAgICAgQXJyYXlCdWZmZXIqIGRhdGEgPSB0b0FycmF5QnVmZmVy
KHZhbHVlQXJndW1lbnQpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAg
ICAgICAgaWYgKFVOTElLRUxZKCFkYXRhKSkgewogICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KCZleGVjLCBUeXBlRXJyb3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
ZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNjMz
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwyOCArNTUsMjIgQEAgc3RhdGljIFJlZlB0cjxE
ZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYQogICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkp
OwogCiAgICAgSlNWYWx1ZSB4VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAieCIpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKICAgICBib29sIGNhblByb3ZpZGVYID0gIXhWYWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpOwogICAgIGRvdWJsZSB4ID0geFZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBKU1Zh
bHVlIHlWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUsICJ5IikpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwogICAgIGJvb2wgY2FuUHJvdmlkZVkgPSAheVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7
CiAgICAgZG91YmxlIHkgPSB5VmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIEpTVmFsdWUgelZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInoiKSk7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgYm9v
bCBjYW5Qcm92aWRlWiA9ICF6VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAgICBkb3VibGUg
eiA9IHpWYWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgaWYgKCFjYW5Qcm92aWRlWCAmJiAhY2FuUHJvdmlk
ZVkgJiYgIWNhblByb3ZpZGVaKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTk3LDI4ICs5
MSwyMiBAQCBzdGF0aWMgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9uCiAgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBKU1ZhbHVlIGFscGhhVmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYWxwaGEiKSk7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgYm9v
bCBjYW5Qcm92aWRlQWxwaGEgPSAhYWxwaGFWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwogICAg
IGRvdWJsZSBhbHBoYSA9IGFscGhhVmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIEpTVmFsdWUgYmV0YVZh
bHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
ImJldGEiKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CiAgICAgYm9vbCBjYW5Qcm92aWRlQmV0YSA9ICFiZXRhVmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KTsKICAgICBkb3VibGUgYmV0YSA9IGJldGFWYWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgSlNWYWx1ZSBn
YW1tYVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgImdhbW1hIikpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51
bGxwdHIpOwogICAgIGJvb2wgY2FuUHJvdmlkZUdhbW1hID0gIWdhbW1hVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKTsKICAgICBkb3VibGUgZ2FtbWEgPSBnYW1tYVZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAg
ICBpZiAoIWNhblByb3ZpZGVBbHBoYSAmJiAhY2FuUHJvdmlkZUJldGEgJiYgIWNhblByb3ZpZGVH
YW1tYSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xODgsMTYgKzE3NiwxMyBAQCBKU1Zh
bHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmluaXREZXZpY2VNCiAgICAgLy8gSWYgYW55IG9mIHRo
ZSBwYXJhbWV0ZXJzIGFyZSBudWxsIG9yIHVuZGVmaW5lZCwgbWFyayB0aGVtIGFzIG5vdCBwcm92
aWRlZC4KICAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgc3RhbmRhcmQgSmF2YVNjcmlwdCBjb252
ZXJzaW9uLgogICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb24+IGFjY2Vs
ZXJhdGlvbiA9IHJlYWRBY2NlbGVyYXRpb25Bcmd1bWVudChzdGF0ZS5hcmd1bWVudCgzKSwgc3Rh
dGUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUo
KSk7CiAKICAgICBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6QWNjZWxlcmF0aW9uPiBhY2NlbGVy
YXRpb25JbmNsdWRpbmdHcmF2aXR5ID0gcmVhZEFjY2VsZXJhdGlvbkFyZ3VtZW50KHN0YXRlLmFy
Z3VtZW50KDQpLCBzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlv
blJhdGU+IHJvdGF0aW9uUmF0ZSA9IHJlYWRSb3RhdGlvblJhdGVBcmd1bWVudChzdGF0ZS5hcmd1
bWVudCg1KSwgc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIEpTVmFsdWUoKSk7CiAKICAgICBib29sIGludGVydmFsUHJvdmlkZWQgPSAhc3RhdGUuYXJn
dW1lbnQoNikuaXNVbmRlZmluZWRPck51bGwoKTsKICAgICBkb3VibGUgaW50ZXJ2YWwgPSBzdGF0
ZS5hcmd1bWVudCg2KS50b051bWJlcigmc3RhdGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
OCw4ICs4OCw3IEBAIEpTRGljdGlvbmFyeTo6R2V0UHJvcGVydHlSZXN1bHQgSlNEaWN0aW8KICAg
ICAgICAgZmluYWxSZXN1bHQgPSBzbG90LmdldFZhbHVlKG1fZXhlYywgaWRlbnRpZmllcik7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb25UaHJvd247CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgRXhjZXB0aW9uVGhyb3duKTsKICAgICByZXR1cm4gcHJvcGVydHlG
b3VuZCA/IFByb3BlcnR5Rm91bmQgOiBOb1Byb3BlcnR5Rm91bmQ7CiB9CiAKQEAgLTE2MSwxMyAr
MTYwLDExIEBAIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXQKIAogICAg
IHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlNTZXF1ZW5j
ZSgqZXhlYywgdmFsdWUsIGxlbmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytpKSB7CiAg
ICAgICAgIEpTVmFsdWUgaXRlbVZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgaSk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoaXRlbVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgfQog
fQpAQCAtMjM2LDEzICsyMzMsMTEgQEAgdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShF
eGVjU3RhdAogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKICAgICBKU09iamVjdCogb2JqZWN0
ID0gdG9KU1NlcXVlbmNlKCpleGVjLCB2YWx1ZSwgbGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgbGVu
Z3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBpdGVtVmFsdWUgPSBvYmplY3QtPmdldChleGVj
LCBpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
ICAgICAgICAgcmVzdWx0LmFkZChpdGVtVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKICAgICB9CiB9CkBAIC0zMTMsMTMgKzMwOCwxMSBAQCB2b2lkIEpTRGljdGlvbmFyeTo6Y29u
dmVydFZhbHVlKEV4ZWNTdGF0CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSB0b0pTU2VxdWVuY2UoKmV4ZWMsIHZhbHVlLCBsZW5ndGgpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MCA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGl0ZW1WYWx1ZSA9IG9iamVj
dC0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwogCiAgICAgICAgIGF1dG8gc3RyZWFtID0gSlNNZWRpYVN0cmVhbTo6dG9XcmFw
cGVkKGl0ZW1WYWx1ZSk7CiAgICAgICAgIGlmICghc3RyZWFtKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAkocmV2aXNpb24gMjA2MzM3KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTIxNSw4ICsyMTUsNyBAQCBKU0RpY3Rpb25hcnk6OkdldFByb3BlcnR5UmVzdWx0IEpTRGljdGlv
CiAgICAgICAgIFJlc3VsdCByZXN1bHQ7CiAgICAgICAgIGNvbnZlcnRWYWx1ZShtX2V4ZWMsIHZh
bHVlLCByZXN1bHQpOwogCi0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uVGhyb3duOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb25UaHJvd24pOwogCiAgICAgICAgIHNldHRlcihjb250
ZXh0LCByZXN1bHQpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTUzLDE3ICsxNTMsMTMgQEAgSlNWYWx1ZSBKU0RvY3VtZW50OjpnZXRDU1NDYW52
YXNDb250ZXh0KAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS5hcmd1bWVudENvdW50KCkgPCA0KSkK
ICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogICAgIGF1dG8gY29udGV4dElkID0gc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIGF1dG8gbmFtZSA9
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBhdXRv
IHdpZHRoID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MiksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgYXV0byBoZWlnaHQgPSBjb252ZXJ0PGludDMyX3Q+
KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAog
ICAgIGF1dG8qIGNvbnRleHQgPSB3cmFwcGVkKCkuZ2V0Q1NTQ2FudmFzQ29udGV4dChXVEZNb3Zl
KGNvbnRleHRJZCksIFdURk1vdmUobmFtZSksIFdURk1vdmUod2lkdGgpLCBXVEZNb3ZlKGhlaWdo
dCkpOwogICAgIGlmICghY29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRmlsZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNGaWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNGaWxlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsOCArNjAs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAKICAgICB1bnNp
Z25lZCBibG9iUGFydHNMZW5ndGggPSAwOwogICAgIEpTT2JqZWN0KiBibG9iUGFydHMgPSB0b0pT
U2VxdWVuY2UoZXhlYywgYXJnLCBibG9iUGFydHNMZW5ndGgpOwotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgQVNTRVJUKGJsb2JQYXJ0cyk7CiAKICAgICBhcmcgPSBleGVjLmFyZ3VtZW50KDEp
OwpAQCAtNjksOCArNjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEpTCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAx
LCAiZmlsZW5hbWUiLCAiRmlsZSIsIG51bGxwdHIsICJET01TdHJpbmciKTsKIAogICAgIFN0cmlu
ZyBmaWxlbmFtZSA9IGFyZy50b1dURlN0cmluZygmZXhlYykucmVwbGFjZSgnLycsICc6Jyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIFN0cmluZyBub3JtYWxpemVkVHlwZTsKICAgICBP
cHRpb25hbDxpbnQ2NF90PiBsYXN0TW9kaWZpZWQ7CkBAIC04NywxNiArODUsMTQgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICAvLyBBdHRlbXB0IHRv
IGdldCB0aGUgdHlwZSBwcm9wZXJ0eS4KICAgICAgICAgU3RyaW5nIHR5cGU7CiAgICAgICAgIGRp
Y3Rpb25hcnkuZ2V0KCJ0eXBlIiwgdHlwZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKIAogICAgICAgICBub3JtYWxpemVkVHlwZSA9IEJsb2I6Om5vcm1hbGl6ZWRDb250ZW50
VHlwZSh0eXBlKTsKIAogICAgICAgICAvLyBPbmx5IHRyeSB0byBwYXJzZSB0aGUgbGFzdE1vZGlm
aWVkIGRhdGUgaWYgdGhlcmUgd2FzIG5vdCBhbiBpbnZhbGlkIHR5cGUgYXJndW1lbnQuCiAgICAg
ICAgIGlmICh0eXBlLmlzRW1wdHkoKSB8fCAgIW5vcm1hbGl6ZWRUeXBlLmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgZGljdGlvbmFyeS5nZXQoImxhc3RNb2RpZmllZCIsIGxhc3RNb2RpZmllZCk7
Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMTA3LDggKzEwMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0SlMKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9iUGFydHNM
ZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBibG9iUGFydHMtPmdldCgmZXhl
YywgaSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgICAgICBpZiAo
QXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0gdG9BcnJheUJ1ZmZlcihpdGVtKSkKICAgICAgICAg
ICAgIGJsb2JCdWlsZGVyLmFwcGVuZChhcnJheUJ1ZmZlcik7CkBAIC0xMTgsOCArMTEzLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICAgICAgYmxv
YkJ1aWxkZXIuYXBwZW5kKGJsb2IpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFN0cmlu
ZyBzdHJpbmcgPSBpdGVtLnRvV1RGU3RyaW5nKCZleGVjKTsKLSAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICAgICAgYmxvYkJ1aWxkZXIuYXBwZW5k
KHN0cmluZywgQVNDSUlMaXRlcmFsKCJ0cmFuc3BhcmVudCIpKTsKICAgICAgICAgfQogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25D
dXN0b20uY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDE3ICsxMDgs
MTQgQEAgSlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpbwogICAgIC8vIEFy
Z3VtZW50czogUG9zaXRpb25DYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uRXJyb3JDYWxsYmFj
aywgKG9wdGlvbmFsKVBvc2l0aW9uT3B0aW9ucwogCiAgICAgYXV0byBwb3NpdGlvbkNhbGxiYWNr
ID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNQb3NpdGlvbkNhbGxiYWNrPigmc3RhdGUs
IGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBBU1NFUlQocG9zaXRpb25D
YWxsYmFjayk7CiAKICAgICBhdXRvIHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0
aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25FcnJvckNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9i
amVjdCgpLCBzdGF0ZS5hcmd1bWVudCgxKSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCB8IENhbGxi
YWNrQWxsb3dOdWxsKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBKU1ZhbHVlKCkpOwogCiAgICAgYXV0byBwb3NpdGlvbk9wdGlvbnMgPSBjcmVhdGVQb3NpdGlv
bk9wdGlvbnMoJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgyKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBBU1NFUlQocG9zaXRpb25P
cHRpb25zKTsKIAogICAgIHdyYXBwZWQoKS5nZXRDdXJyZW50UG9zaXRpb24oV1RGTW92ZShwb3Np
dGlvbkNhbGxiYWNrKSwgV1RGTW92ZShwb3NpdGlvbkVycm9yQ2FsbGJhY2spLCBXVEZNb3ZlKHBv
c2l0aW9uT3B0aW9ucykpOwpAQCAtMTMzLDE3ICsxMzAsMTQgQEAgSlNWYWx1ZSBKU0dlb2xvY2F0
aW9uOjp3YXRjaFBvc2l0aW9uKEV4ZQogICAgIC8vIEFyZ3VtZW50czogUG9zaXRpb25DYWxsYmFj
aywgKG9wdGlvbmFsKVBvc2l0aW9uRXJyb3JDYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uT3B0
aW9ucwogCiAgICAgYXV0byBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2Fs
bGJhY2s8SlNQb3NpdGlvbkNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5h
cmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
SlNWYWx1ZSgpKTsKICAgICBBU1NFUlQocG9zaXRpb25DYWxsYmFjayk7CiAKICAgICBhdXRvIHBv
c2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRp
b25FcnJvckNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5hcmd1bWVudCgx
KSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCB8IENhbGxiYWNrQWxsb3dOdWxsKTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgYXV0
byBwb3NpdGlvbk9wdGlvbnMgPSBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoJnN0YXRlLCBzdGF0ZS5h
cmd1bWVudCgyKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
SlNWYWx1ZSgpKTsKICAgICBBU1NFUlQocG9zaXRpb25PcHRpb25zKTsKIAogICAgIGludCB3YXRj
aElEID0gd3JhcHBlZCgpLndhdGNoUG9zaXRpb24oV1RGTW92ZShwb3NpdGlvbkNhbGxiYWNrKSwg
V1RGTW92ZShwb3NpdGlvbkVycm9yQ2FsbGJhY2spLCBXVEZNb3ZlKHBvc2l0aW9uT3B0aW9ucykp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
QWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OCw4ICs2OCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNhbGwKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpIHsKICAgICAgICAgLy8g
U3VwcG9ydCBmb3IgZG9jdW1lbnQuYWxsKDxpbmRleD4pIGV0Yy4KICAgICAgICAgU3RyaW5nIHN0
cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBpZiAoT3B0aW9uYWw8dWlu
dDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleCgqc3RyaW5nLmltcGwoKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywganNDb2xsZWN0aW9uLT5nbG9iYWxPYmpl
Y3QoKSwgY29sbGVjdGlvbi5pdGVtKGluZGV4LnZhbHVlKCkpKSk7CiAKQEAgLTc5LDggKzc4LDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogCiAgICAgLy8gVGhl
IHNlY29uZCBhcmcsIGlmIHNldCwgaXMgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdlIHdhbnQKICAg
ICBTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90
PiBpbmRleCA9IHBhcnNlSW5kZXgoKmV4ZWMtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKGV4ZWMp
LmltcGwoKSkpIHsKICAgICAgICAgaWYgKGF1dG8qIGl0ZW0gPSBjb2xsZWN0aW9uLm5hbWVkSXRl
bVdpdGhJbmRleChzdHJpbmcsIGluZGV4LnZhbHVlKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIGpzQ29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksICpp
dGVtKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVt
ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg2LDggKzg2LDcgQEAgSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50Ojpn
ZXRDb250ZXh0KAogI2lmIEVOQUJMRShXRUJHTCkKICAgICBpZiAoSFRNTENhbnZhc0VsZW1lbnQ6
OmlzM2RUeXBlKGNvbnRleHRJZCkpIHsKICAgICAgICAgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhz
dGF0ZSwgYXR0cnMpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgfQogI2VuZGlmCiAgICAgCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRWxl
bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDggKzc4LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgIGlmICghZWxlbWVudEludGVyZmFj
ZS0+aXNVcGdyYWRpbmdFbGVtZW50KCkpIHsKICAgICAgICAgU3RydWN0dXJlKiBiYXNlU3RydWN0
dXJlID0gZ2V0RE9NU3RydWN0dXJlPEpTSFRNTEVsZW1lbnQ+KHZtLCAqZ2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgYXV0byogbmV3RWxlbWVudFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNy
ZWF0ZVN1YmNsYXNzU3RydWN0dXJlKCZleGVjLCBuZXdUYXJnZXRWYWx1ZSwgYmFzZVN0cnVjdHVy
ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgICAgICBSZWY8SFRN
TEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1MRWxlbWVudDo6Y3JlYXRlKGVsZW1lbnRJbnRlcmZhY2Ut
Pm5hbWUoKSwgZG9jdW1lbnQpOwogICAgICAgICBlbGVtZW50LT5zZXRJc0RlZmluZWRDdXN0b21F
bGVtZW50KCplbGVtZW50SW50ZXJmYWNlKTsKQEAgLTk4LDEzICs5NywxMSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgQVNTRVJUKGVsZW1lbnRXcmFwcGVy
VmFsdWUuaXNPYmplY3QoKSk7CiAKICAgICBKU1ZhbHVlIG5ld1Byb3RvdHlwZSA9IG5ld1Rhcmdl
dC0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwotICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAKICAgICBKU09iamVjdCogZWxlbWVudFdyYXBwZXJPYmplY3QgPSBhc09iamVj
dChlbGVtZW50V3JhcHBlclZhbHVlKTsKICAgICBKU09iamVjdDo6c2V0UHJvdG90eXBlKGVsZW1l
bnRXcmFwcGVyT2JqZWN0LCAmZXhlYywgbmV3UHJvdG90eXBlLCB0cnVlIC8qIHNob3VsZFRocm93
SWZDYW50U2V0ICovKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgZWxlbWVudEludGVy
ZmFjZS0+ZGlkVXBncmFkZUxhc3RFbGVtZW50SW5Db25zdHJ1Y3Rpb25TdGFjaygpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE5ICs2MywxNiBAQCBKU1ZhbHVlIEpTSGlz
dG9yeTo6cHVzaFN0YXRlKEV4ZWNTdGF0ZSYgCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsK
IAogICAgIGF1dG8gaGlzdG9yeVN0YXRlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUo
JnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSwgMCwgMCk7Ci0gICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIC8vIEZJWE1F
OiB0aXRsZSBzaG91bGQgbm90IGJlIG51bGxhYmxlLgogICAgIFN0cmluZyB0aXRsZSA9IHZhbHVl
VG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCgxKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
SlNWYWx1ZSgpKTsKIAogICAgIFN0cmluZyB1cmw7CiAgICAgaWYgKGFyZ0NvdW50ID4gMikgewog
ICAgICAgICB1cmwgPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZz
dGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikpOwotICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgfQogCiAg
ICAgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlIGVjOwpAQCAtOTcsMTkgKzk0LDE2IEBAIEpTVmFs
dWUgSlNIaXN0b3J5OjpyZXBsYWNlU3RhdGUoRXhlY1N0YXQKICAgICAgICAgcmV0dXJuIHRocm93
RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZz
dGF0ZSkpOwogCiAgICAgYXV0byBoaXN0b3J5U3RhdGUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLCAwLCAwKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAg
Ly8gRklYTUU6IHRpdGxlIHNob3VsZCBub3QgYmUgbnVsbGFibGUuCiAgICAgU3RyaW5nIHRpdGxl
ID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgU3RyaW5nIHVybDsKICAgICBpZiAoYXJnQ291bnQg
PiAyKSB7CiAgICAgICAgIHVybCA9IHZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxs
Q2hlY2soJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAg
ICB9CiAKICAgICBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UgZWM7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDggKzU1LDcgQEAgSlNWYWx1ZSBKU0lEQkRh
dGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZQogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24o
JnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAK
ICAgICBTdHJpbmcgbmFtZSA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZh
bHVlKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
SlNWYWx1ZSgpKTsKIAogICAgIEpTVmFsdWUgb3B0aW9uc1ZhbHVlID0gc3RhdGUuYXJndW1lbnQo
MSk7CiAgICAgaWYgKCFvcHRpb25zVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhb3B0aW9u
c1ZhbHVlLmlzT2JqZWN0KCkpCkBAIC02NiwxOCArNjUsMTUgQEAgSlNWYWx1ZSBKU0lEQkRhdGFi
YXNlOjpjcmVhdGVPYmplY3RTdG9yZQogICAgIGJvb2wgYXV0b0luY3JlbWVudCA9IGZhbHNlOwog
ICAgIGlmICghb3B0aW9uc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgSlNW
YWx1ZSBrZXlQYXRoVmFsdWUgPSBvcHRpb25zVmFsdWUuZ2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJrZXlQYXRoIikpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICAgICAgaWYg
KCFrZXlQYXRoVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICAgICAga2V5UGF0
aCA9IGlkYktleVBhdGhGcm9tVmFsdWUoc3RhdGUsIGtleVBhdGhWYWx1ZSk7Ci0gICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
SlNWYWx1ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGF1dG9JbmNyZW1lbnQgPSBvcHRpb25z
VmFsdWUuZ2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhdXRvSW5j
cmVtZW50IikpLnRvQm9vbGVhbigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgfQogCiAgICAgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlIGVjOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA2MzM3KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTksMTIgKzExOSwxMCBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGhh
bmRsZUluaXRNZXNzYWdlRXZlCiAgICAgICAgIG1lc3NhZ2VQb3J0cyA9IHN0ZDo6bWFrZV91bmlx
dWU8TWVzc2FnZVBvcnRBcnJheT4oKTsKICAgICAgICAgYXJyYXlCdWZmZXJzID0gc3RkOjptYWtl
X3VuaXF1ZTxBcnJheUJ1ZmZlckFycmF5PigpOwogICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJh
eShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoNyksICptZXNzYWdlUG9ydHMsICphcnJheUJ1ZmZlcnMp
OwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IEpTVmFsdWUoKSk7CiAgICAgfQogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRhdGFBcmco
dm0sIHN0YXRlLmFyZ3VtZW50KDMpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgTWVzc2FnZUV2ZW50JiBldmVudCA9IGpzRXZl
bnQtPndyYXBwZWQoKTsKICAgICBldmVudC5pbml0TWVzc2FnZUV2ZW50KHR5cGVBcmcsIGNhbkJ1
YmJsZUFyZywgY2FuY2VsYWJsZUFyZywgZGF0YUFyZywgb3JpZ2luQXJnLCBsYXN0RXZlbnRJZEFy
Zywgc291cmNlQXJnLCBXVEZNb3ZlKG1lc3NhZ2VQb3J0cykpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJldmlzaW9u
IDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMyArNzMsMTEgQEAgdm9pZCBmaWxsTWVzc2Fn
ZVBvcnRBcnJheShKU0M6OkV4ZWNTdGF0ZQogICAgIC8vIFZhbGlkYXRpb24gb2Ygc2VxdWVuY2Ug
dHlwZXMsIHBlciBXZWJJREwgc3BlYyA0LjEuMTMuCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsK
ICAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KU1NlcXVlbmNlKHN0YXRlLCB2YWx1ZSwgbGVuZ3Ro
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDAgOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgaSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIC8vIFZhbGlkYXRpb24gb2Ygbm9uLW51bGwgb2Jq
ZWN0cywgcGVyIEhUTUw1IHNwZWMgMTAuMy4zLgogICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgewogICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5WQUxJ
RF9TVEFURV9FUlIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdl
UG9ydEN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWVzc2FnZVBvcnRDdXN0b20uaAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw4
ICs2MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQXJyYXlCdWZmZXJBcnJheSBh
cnJheUJ1ZmZlckFycmF5OwogICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShzdGF0ZSwgc3Rh
dGUuYXJndW1lbnQoMSksIHBvcnRBcnJheSwgYXJyYXlCdWZmZXJBcnJheSk7CiAgICAgICAgIGF1
dG8gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMCksICZwb3J0QXJyYXksICZhcnJheUJ1ZmZlckFycmF5KTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVy
biBKU0M6OmpzVW5kZWZpbmVkKCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IEpTQzo6SlNWYWx1ZSgpKTsKIAogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAg
ICAgaW1wbC0+cG9zdE1lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSwgJnBvcnRBcnJheSwgZWMpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZpbHRlclNldHRp
bmdzQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3NDdXN0b20uY3BwCShyZXZpc2lvbiAyMDYzMzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3ND
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw4ICs2Miw3IEBAIHZvaWQgSlNNb2NrQ29u
dGVudEZpbHRlclNldHRpbmdzOjpzZXREZWMKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICB1aW50OF90IG5hdGl2ZVZhbHVlIHsgY29udmVydDx1aW50OF90
PihzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSkgfTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKIAogICAgIERlY2lzaW9uUG9pbnQgZGVjaXNpb25Qb2ludCB7IHN0YXRp
Y19jYXN0PERlY2lzaW9uUG9pbnQ+KG5hdGl2ZVZhbHVlKSB9OwogICAgIHN3aXRjaCAoZGVjaXNp
b25Qb2ludCkgewpAQCAtOTgsOCArOTcsNyBAQCBzdGF0aWMgaW5saW5lIERlY2lzaW9uIHRvRGVj
aXNpb24oRXhlY1N0CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgdWludDhfdCBuYXRpdmVWYWx1ZSB7IGNvbnZlcnQ8dWludDhfdD4oc3RhdGUsIHZhbHVl
LCBFbmZvcmNlUmFuZ2UpIH07Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgcmV0dXJuIERlY2lzaW9uOjpBbGxvdzsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBEZWNpc2lvbjo6QWxsb3cpOwogCiAgICAgRGVjaXNpb24gZGVjaXNpb24geyBzdGF0
aWNfY2FzdDxEZWNpc2lvbj4obmF0aXZlVmFsdWUpIH07CiAgICAgc3dpdGNoIChkZWNpc2lvbikg
ewpAQCAtMTIzLDggKzEyMSw3IEBAIHZvaWQgSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjpz
ZXREZWMKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBE
ZWNpc2lvbiBkZWNpc2lvbiB7IHRvRGVjaXNpb24oc3RhdGUsIHZhbHVlKSB9OwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgd3JhcHBlZCgpLnNldERlY2lzaW9u
KGRlY2lzaW9uKTsKIH0KQEAgLTE0MCw4ICsxMzcsNyBAQCB2b2lkIEpTTW9ja0NvbnRlbnRGaWx0
ZXJTZXR0aW5nczo6c2V0VW5iCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgRGVjaXNpb24gdW5ibG9ja1JlcXVlc3REZWNpc2lvbiB7IHRvRGVjaXNpb24o
c3RhdGUsIHZhbHVlKSB9OwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
CiAgICAgd3JhcHBlZCgpLnNldFVuYmxvY2tSZXF1ZXN0RGVjaXNpb24odW5ibG9ja1JlcXVlc3RE
ZWNpc2lvbik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0
ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDggKzQ5LDcgQEAgdWludDE2X3QgSlNOb2RlRmlsdGVyOjphY2NlcHROb2RlKE5vZGUqIAogICAg
IEV4ZWNTdGF0ZSogc3RhdGUgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZCh0b0pTKHN0
YXRlLCBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLCBub2RlKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpF
Q1Q7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgTm9kZUZpbHRlcjo6RklMVEVSX1JF
SkVDVCk7CiAKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwogICAg
IEpTVmFsdWUgdmFsdWUgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsIEpTQ2FsbGJhY2tE
YXRhOjpDYWxsYmFja1R5cGU6OkZ1bmN0aW9uT3JPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoc3RhdGUsICJhY2NlcHROb2RlIiksIHJldHVybmVkRXhjZXB0aW9uKTsKQEAgLTYzLDggKzYy
LDcgQEAgdWludDE2X3QgSlNOb2RlRmlsdGVyOjphY2NlcHROb2RlKE5vZGUqIAogICAgIH0KIAog
ICAgIHVpbnQxNl90IHJlc3VsdCA9IGNvbnZlcnQ8dWludDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIE5v
cm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1QpOwogCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3Ry
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVP
clN0cmluZy5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTm9kZU9yU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsNyBAQCBW
ZWN0b3I8c3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8UmVmPE5vCiAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKG5vZGUtPndyYXBwZWQoKSk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgU3RyaW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChzdHJpbmcpOwogICAgICAgICB9
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlv
bkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNT
UUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw4ICs1Myw3IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChF
eGUKICAgICB9CiAKICAgICBTdHJpbmcgc3FsU3RhdGVtZW50ID0gc3RhdGUuYXJndW1lbnQoMCku
dG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgLy8gTm93IGFzc2VtYmxlIHRo
ZSBsaXN0IG9mIFNRTCBhcmd1bWVudHMKICAgICBWZWN0b3I8U1FMVmFsdWU+IHNxbFZhbHVlczsK
QEAgLTY2LDE2ICs2NSwxMyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwo
RXhlCiAgICAgICAgIH0KIAogICAgICAgICBKU1ZhbHVlIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5n
ZXQoJnN0YXRlLCBzdGF0ZS5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBsZW5ndGhWYWx1ZS50b1VJbnQzMigmc3RhdGUpOwotICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFs
dWUoKSk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBsZW5ndGg7ICsraSkg
ewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgaSk7Ci0g
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCiAgICAgICAgICAgICAgICAgc3FsVmFsdWVzLmFwcGVuZChTUUxWYWx1ZSgpKTsK
QEAgLTg0LDggKzgwLDcgQEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4
ZQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgYXJn
dW1lbnQgdG8gYSBzdHJpbmcgYW5kIGFwcGVuZCBpdAogICAgICAgICAgICAgICAgIHNxbFZhbHVl
cy5hcHBlbmQodmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1
c3RvbS5jcHAJKHJldmlzaW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsOCArOTAsNyBAQCBK
U1ZhbHVlIEpTU1ZHTGVuZ3RoOjpjb252ZXJ0VG9TcGVjaWZpZWRVCiAgICAgICAgIHJldHVybiB0
aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cigmc3RhdGUpKTsKIAogICAgIHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlID0gc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMCkudG9VSW50MzIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CiAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KHdyYXBwZWQoKS5jb250ZXh0
RWxlbWVudCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9y
YWdlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsMTMgKzg2LDEx
IEBAIHZvaWQgSlNTdG9yYWdlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2IKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCkubGVuZ3RoKGVjKTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5rZXkoaSwgZWMpKSk7CiAgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgfQogICAgICAgICAKICAgICBCYXNlOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNU
ZXh0VHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCw3IEBAIHZvaWQg
SlNUZXh0VHJhY2s6OnNldExhbmd1YWdlKEV4ZWNTdGF0ZSYKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmlu
Zygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOwogICAgIHdyYXBwZWQoKS5zZXRMYW5ndWFnZShzdHJpbmcpOwogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNW
aWRlb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw4ICs0Nyw3IEBAIHZvaWQgSlNWaWRlb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSYg
c3QKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRv
JiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIHdyYXBwZWQoKS5zZXRLaW5kKHN0
cmluZyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC02Myw4ICs2Miw3IEBA
IHZvaWQgSlNWaWRlb1RyYWNrOjpzZXRMYW5ndWFnZShFeGVjU3RhdGUKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50
b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwogICAgIHdyYXBwZWQoKS5zZXRMYW5ndWFnZShzdHJpbmcpOwogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
CShyZXZpc2lvbiAyMDYzMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdM
MlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsMTEgKzEw
Niw5IEBAIEpTVmFsdWUgSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRJbmQKIAogICAgIFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSB3cmFwcGVkKCk7CiAgICAgdW5zaWduZWQg
cG5hbWUgPSBleGVjLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoJmV4ZWMpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgdW5z
aWduZWQgaW5kZXggPSBleGVjLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoJmV4ZWMpOwot
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAg
ICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldEluZGV4ZWRQYXJhbWV0ZXIocG5hbWUs
IGluZGV4KTsKICAgICByZXR1cm4gdG9KUygmZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwCShyZXZpc2lvbiAyMDYzMzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksMTEgKzE5OSw5IEBAIHN0YXRpYyBK
U1ZhbHVlIGdldE9iamVjdFBhcmFtZXRlcihKU1dlYkcKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gb2JqLT53cmFwcGVk
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9J
bnQzMigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IEpTVmFsdWUoKSk7CiAgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgxKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBXZWJHTEdldEluZm8gaW5mbzsKICAgICBzd2l0Y2gg
KG9iamVjdFR5cGUpIHsKICAgICBjYXNlIGtCdWZmZXI6CkBAIC0zMzUsOCArMzMzLDcgQEAgSlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldAogICAgIAogICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSB3cmFwcGVkKCk7CiAgICAgY29uc3QgU3RyaW5n
IG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1
ZSgmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
VmFsdWUoKSk7CiAgICAgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbiA9IGNvbnRleHQuZ2V0RXh0
ZW5zaW9uKG5hbWUpOwogICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGV4
dGVuc2lvbik7CiB9CkBAIC0zNTcsMTQgKzM1NCwxMSBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Z2V0CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IHdyYXBwZWQoKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICB1
bnNpZ25lZCBhdHRhY2htZW50ID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMigm
c3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFs
dWUoKSk7CiAgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKS50
b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgSlNWYWx1ZSgpKTsKICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIGVjKTsK
ICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwpAQCAt
Mzg0LDggKzM3OCw3IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXQK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
JiBjb250ZXh0ID0gd3JhcHBlZCgpOwogICAgIHVuc2lnbmVkIHBuYW1lID0gc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMCkudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBj
b250ZXh0LmdldFBhcmFtZXRlcihwbmFtZSwgZWMpOwogICAgIGlmIChlYykgewogICAgICAgICBz
ZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CkBAIC00MDgsOCArNDAxLDcgQEAgSlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldAogICAgIGlmICghcHJvZ3JhbSAmJiAhc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwogICAgIHVuc2lnbmVkIHBuYW1lID0g
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgV2ViR0xHZXRJ
bmZvIGluZm8gPSBjb250ZXh0LmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgcG5hbWUsIGVj
KTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwpA
QCAtNDM3LDggKzQyOSw3IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpn
ZXQKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwogICAgIFdl
YkdMU2hhZGVyKiBzaGFkZXIgPSBKU1dlYkdMU2hhZGVyOjp0b1dyYXBwZWQoc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMCkpOwogICAgIHVuc2lnbmVkIHBuYW1lID0gc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0
LmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAg
ICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKQEAgLTUxMSw4ICs1MDIsNyBAQCBi
b29sIHRvVmVjdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDCiAgICAgCiAgICAgZm9yIChp
bnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNDOjpKU1ZhbHVlIHYg
PSBvYmplY3QtPmdldCgmc3RhdGUsIGkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIHZlY3RvcltpXSA9IHN0YXRpY19jYXN0
PFQ+KHYudG9OdW1iZXIoJnN0YXRlKSk7CiAgICAgfQogICAgIApAQCAtNTU5LDEyICs1NDksMTAg
QEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdQogICAgIH0gZWxzZQog
ICAgICAgICBpbmRleCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoJnN0YXRl
KTsKICAgICAKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1Zh
bHVlKCkpOwogICAgIAogICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0Zs
b2F0MzJBcnJheShzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBpZiAod2ViR0xBcnJheSkgewpAQCAtNzEwLDggKzY5OCw3IEBA
IHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KEQKICAgICAgICAgcmV0dXJu
IHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwogICAgIAogICAgIGJvb2wgdHJhbnNwb3Nl
ID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAKICAg
ICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMikpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRTdWJ0
bGVDcnlwdG9DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw4ICs4NCw3IEBAIHN0YXRp
YyBib29sIGNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKEUKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcga2V5Rm9ybWF0U3RyaW5nID0gdmFs
dWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgIGlmIChrZXlGb3JtYXRTdHJpbmcgPT0gInJhdyIp
CiAgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUZvcm1hdDo6UmF3OwogICAgIGVsc2UgaWYgKGtl
eUZvcm1hdFN0cmluZyA9PSAicGtjczgiKQpAQCAtMTE3LDggKzExNiw3IEBAIHN0YXRpYyBib29s
IGNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKEUKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFycmF5LT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFycmF5
LT5nZXRJbmRleCgmc3RhdGUsIGkpOwogICAgICAgICBTdHJpbmcgdXNhZ2VTdHJpbmcgPSBlbGVt
ZW50LnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKHVzYWdlU3Ry
aW5nID09ICJlbmNyeXB0IikKICAgICAgICAgICAgIHJlc3VsdCB8PSBDcnlwdG9LZXlVc2FnZUVu
Y3J5cHQ7CiAgICAgICAgIGVsc2UgaWYgKHVzYWdlU3RyaW5nID09ICJkZWNyeXB0IikKQEAgLTQy
MSw4ICs0MTksNyBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpnZW5lcmF0ZUtlCiAg
ICAgYm9vbCBleHRyYWN0YWJsZSA9IGZhbHNlOwogICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50
KCkgPj0gMikgewogICAgICAgICBleHRyYWN0YWJsZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDEpLnRvQm9vbGVhbigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgfQogCiAgICAgQ3J5cHRvS2V5
VXNhZ2Uga2V5VXNhZ2VzID0gMDsKQEAgLTQ3NCw4ICs0NzEsNyBAQCBzdGF0aWMgdm9pZCBpbXBv
cnRLZXkoRXhlY1N0YXRlJiBzdGF0ZSwgCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAga2V5U2VyaWFsaXphdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8SlNDcnlwdG9LZXlT
ZXJpYWxpemF0aW9uSldLPigmc3RhdGUsIGp3a1N0cmluZyk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBkZWZhdWx0OgpAQCAtNDkxLDggKzQ4Nyw3IEBAIHN0YXRpYyB2b2lkIGltcG9ydEtleShFeGVj
U3RhdGUmIHN0YXRlLCAKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiQWxnb3JpdGhtIHNwZWNpZmllZCBpbiBrZXkgaXMgbm90IGNvbXBhdGli
bGUgd2l0aCBvbmUgcGFzc2VkIHRvIGltcG9ydEtleSBhcyBhcmd1bWVudCIpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAg
ICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAog
ICAgIGFsZ29yaXRobSA9IHJlY29uY2lsZWRSZXN1bHQtPmFsZ29yaXRobTsKICAgICBwYXJhbWV0
ZXJzID0gcmVjb25jaWxlZFJlc3VsdC0+cGFyYW1ldGVyczsKQEAgLTUwMywxNiArNDk4LDEzIEBA
IHN0YXRpYyB2b2lkIGltcG9ydEtleShFeGVjU3RhdGUmIHN0YXRlLCAKICAgICBBU1NFUlQocGFy
YW1ldGVycyk7CiAKICAgICBrZXlTZXJpYWxpemF0aW9uLT5yZWNvbmNpbGVFeHRyYWN0YWJsZShl
eHRyYWN0YWJsZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAg
ICBrZXlTZXJpYWxpemF0aW9uLT5yZWNvbmNpbGVVc2FnZXMoa2V5VXNhZ2VzKTsKLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGF1dG8ga2V5RGF0YSA9IGtleVNl
cmlhbGl6YXRpb24tPmtleURhdGEoKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICByZXR1cm47CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGFsZ29yaXRobS0+aW1wb3J0
S2V5KCpwYXJhbWV0ZXJzLCAqa2V5RGF0YSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgV1RGTW92
ZShjYWxsYmFjayksIFdURk1vdmUoZmFpbHVyZUNhbGxiYWNrKSwgZWMpOwpAQCAtNTU3LDggKzU0
OSw3IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmltcG9ydEtleSgKICAgICBib29s
IGV4dHJhY3RhYmxlID0gZmFsc2U7CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSA0
KSB7CiAgICAgICAgIGV4dHJhY3RhYmxlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMykudG9C
b29sZWFuKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICB9CiAKICAgICBDcnlwdG9LZXlVc2FnZSBr
ZXlVc2FnZXMgPSAwOwpAQCAtNTc5LDggKzU3MCw3IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVD
cnlwdG86OmltcG9ydEtleSgKICAgICB9OwogCiAgICAgV2ViQ29yZTo6aW1wb3J0S2V5KHN0YXRl
LCBrZXlGb3JtYXQsIGRhdGEsIFdURk1vdmUoYWxnb3JpdGhtKSwgV1RGTW92ZShwYXJhbWV0ZXJz
KSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEZN
b3ZlKGZhaWx1cmVDYWxsYmFjaykpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICByZXR1cm4gcHJvbWlzZTsKIH0KQEAgLTYwNiw4
ICs1OTYsNyBAQCBzdGF0aWMgdm9pZCBleHBvcnRLZXkoRXhlY1N0YXRlJiBzdGF0ZSwgCiAgICAg
fQogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKV0s6IHsKICAgICAgICAgU3RyaW5nIHJlc3Vs
dCA9IEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6c2VyaWFsaXplKCZzdGF0ZSwga2V5KTsK
LSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAg
ICAgQ1N0cmluZyB1dGY4U3RyaW5nID0gcmVzdWx0LnV0ZjgoU3RyaWN0Q29udmVyc2lvbik7CiAg
ICAgICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHRCdWZmZXI7CiAgICAgICAgIHJlc3VsdEJ1ZmZl
ci5hcHBlbmQodXRmOFN0cmluZy5kYXRhKCksIHV0ZjhTdHJpbmcubGVuZ3RoKCkpOwpAQCAtNjQ4
LDggKzYzNyw3IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmV4cG9ydEtleSgKICAg
ICB9OwogCiAgICAgV2ViQ29yZTo6ZXhwb3J0S2V5KHN0YXRlLCBrZXlGb3JtYXQsICprZXksIFdU
Rk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShmYWlsdXJlQ2FsbGJhY2spKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAg
cmV0dXJuIHByb21pc2U7CiB9CkBAIC03ODAsOCArNzY4LDcgQEAgSlNWYWx1ZSBKU1dlYktpdFN1
YnRsZUNyeXB0bzo6dW53cmFwS2V5KAogICAgIGJvb2wgZXh0cmFjdGFibGUgPSBmYWxzZTsKICAg
ICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDYpIHsKICAgICAgICAgZXh0cmFjdGFibGUg
PSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCg1KS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkp
OwogICAgIH0KIAogICAgIENyeXB0b0tleVVzYWdlIGtleVVzYWdlcyA9IDA7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAy
MDYzMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDggKzU2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZleGVjLCBzY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJmV4ZWMpKTsKIAogICAgIFN0cmluZyBz
Y3JpcHRVUkwgPSBleGVjLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKCZleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICAvLyBTZWUgc2VjdGlvbiA0LjguMiBzdGVwIDE0IG9m
IFdlYldvcmtlcnMgZm9yIHdoeSB0aGlzIGlzIHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0LgogICAg
IERPTVdpbmRvdyYgd2luZG93ID0gYXNKU0RPTVdpbmRvdyhleGVjLmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPndyYXBwZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCShyZXZpc2lvbiAyMDYzMzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsOCArNzAsNyBAQCBKU1ZhbHVlIEpTV29ya2VyR2xv
YmFsU2NvcGU6OmltcG9ydFNjcmlwCiAgICAgVmVjdG9yPFN0cmluZz4gdXJsczsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAg
ICAgdXJscy5hcHBlbmQodmFsdWVUb1VTVlN0cmluZygmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KGkpKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0g
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICB9CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAKQEAgLTg5LDggKzg4LDcgQEAgSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpzZXRUaW1l
b3V0KAogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZSgmc3RhdGUs
IGdsb2JhbE9iamVjdCgpLT53b3JsZCgpLCB3cmFwcGVkKCkuY29udGVudFNlY3VyaXR5UG9saWN5
KCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUo
KSk7CiAgICAgaWYgKCFhY3Rpb24pCiAgICAgICAgIHJldHVybiBqc051bWJlcigwKTsKICAgICBp
bnQgZGVsYXkgPSBzdGF0ZS5hcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7CkBAIC0xMDYsOCAr
MTA0LDcgQEAgSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpzZXRJbnRlcnZhbAogICAgICAg
ICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0
aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVj
dCgpLT53b3JsZCgpLCB3cmFwcGVkKCkuY29udGVudFNlY3VyaXR5UG9saWN5KCkpOwotICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgaWYg
KCFhY3Rpb24pCiAgICAgICAgIHJldHVybiBqc051bWJlcigwKTsKICAgICBpbnQgZGVsYXkgPSBz
dGF0ZS5hcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gMjA2MzM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUzLDggKzUzLDcgQEAgSlNDOjpKU1ZhbHVlIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRybwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGF1dG8gZnVu
Y3Rpb24gPSBvYmplY3QuZ2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CiAKICAgICBpZiAoIWZ1bmN0aW9uLmlzRnVu
Y3Rpb24oKSkgewogICAgICAgICBpZiAoIWZ1bmN0aW9uLmlzVW5kZWZpbmVkKCkpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHJldmlz
aW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFNj
aGVkdWxlZEFjdGlvbj4gU2NoZWR1bAogICAgICAgICBpZiAocG9saWN5ICYmICFwb2xpY3ktPmFs
bG93RXZhbChleGVjKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBTdHJp
bmcgc3RyaW5nID0gdi50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIHJl
dHVybiBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPihuZXcgU2NoZWR1bGVkQWN0aW9u
KHN0cmluZywgaXNvbGF0ZWRXb3JsZCkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDIw
NjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDI2LDggKzEwMjYsNyBAQCBzdWIgR2VuZXJhdGVEaWN0
aW9uYXJ5SW1wbGVtZW50YXRpb25Db250CiAgICAgICAgIG15ICRuZWVkRXhjZXB0aW9uQ2hlY2sg
PSAwOwogICAgICAgICBmb3JlYWNoIG15ICRtZW1iZXIgKEB7JGRpY3Rpb25hcnktPm1lbWJlcnN9
KSB7CiAgICAgICAgICAgICBpZiAoJG5lZWRFeGNlcHRpb25DaGVjaykgewotICAgICAgICAgICAg
ICAgICRyZXN1bHQgLj0gIiAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
XG4iOwotICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgcmV0dXJuIE51bGxvcHQ7
XG4iOworICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIE51bGxvcHQpO1xuIjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICMg
RklYTUU6IEV2ZW50dWFsbHkgd2Ugd2lsbCB3YW50IHRoaXMgdG8gc2hhcmUgYSBsb3QgbW9yZSBj
b2RlIHdpdGggSlNWYWx1ZVRvTmF0aXZlLgogICAgICAgICAgICAgbXkgJHR5cGUgPSAkbWVtYmVy
LT50eXBlOwpAQCAtMzI0OCw4ICszMjQ3LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCF2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIG5hdGl2ZVZhbHVlID0gJG5hdGl2ZVZhbHVlO1xuIik7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICgkbWF5VGhyb3dFeGNlcHRpb24pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKFVOTElLRUxZKCFu
YXRpdmVWYWx1ZSkpIHtcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgICAgIHRocm93QXR0cmlidXRlVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgXCIkdmlzaWJsZUludGVyZmFjZU5hbWVcIiwgXCIkbmFtZVwiLCBcIiR0eXBlXCIpO1xuIik7
CkBAIC0zMjU5LDggKzMyNTcsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGF1dG8gbmF0aXZlVmFsdWUgPSAkbmF0aXZlVmFsdWU7XG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCRtYXlUaHJvd0V4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgcmV0dXJuIGZhbHNlO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCkBAIC00
MDA3LDggKzQwMDQsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvICRuYW1lID0gdG9Bcmd1bWVudHM8VmFyaWFk
aWNIZWxwZXI8JHdyYXBwZXJUeXBlLCAkd3JhcHBlZFR5cGU+Pigqc3RhdGUsICRhcmd1bWVudElu
ZGV4KTtcbiIpOwogCiAgICAgICAgICAgICBpZiAoSXNOYXRpdmVUeXBlKCR0eXBlKSkgewotICAg
ICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsK
KyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTtcbiIpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIGlmICghJG5hbWUuYXJndW1lbnRzKVxuIik7CkBAIC00MDQ3LDggKzQwNDMsNyBAQCBzdWIg
R2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiJGluZGVudCAgICAkZGVmaW5lT3B0aW9uYWxWYWx1ZSA9IHBhcnNl
PCRjbGFzc05hbWU+KCpzdGF0ZSwgJHtuYW1lfVZhbHVlKTtcbiIpOwotICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiJGluZGVudCAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRpbmRlbnQg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTtcbiIpOwogICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiJGluZGVudCAgICBpZiAoVU5MSUtFTFkoISRvcHRpb25hbFZhbHVlKSlc
biIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiJGluZGVudCAgICAgICAgcmV0
dXJuIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAkYXJn
dW1lbnRJbmRleCwgXCIkbmFtZVwiLCBcIiR2aXNpYmxlSW50ZXJmYWNlTmFtZVwiLCAkcXVvdGVk
RnVuY3Rpb25OYW1lLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPCRjbGFzc05hbWU+KCkpO1xu
Iik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgICRuYW1lID0g
b3B0aW9uYWxWYWx1ZS52YWx1ZSgpO1xuIikgaWYgJG9wdGlvbmFsVmFsdWUgbmUgJG5hbWU7CkBA
IC00MDcwLDggKzQwNjUsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCEkY2hlY2tlZEFyZ3VtZW50Lmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICAgICAgJG5hbWUgPSAkbmF0aXZlVmFsdWU7XG4iKTsKICAgICAgICAgICAgICAg
ICBpZiAoJG1heVRocm93RXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpO1xuIik7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgaWYgKFVOTElL
RUxZKCEkbmFtZSkpXG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2Nv
cGUsICRhcmd1bWVudEluZGV4LCBcIiRuYW1lXCIsIFwiJHZpc2libGVJbnRlcmZhY2VOYW1lXCIs
ICRxdW90ZWRGdW5jdGlvbk5hbWUsIFwiJHR5cGVcIik7XG4iKTsKQEAgLTQxMTMsOCArNDEwNyw3
IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBhdXRvICRuYW1lID0gJHtvdXRlcn0ke25hdGl2ZVZhbHVlfTtcbiIp
OwogICAgICAgICAgICAgICAgICR2YWx1ZSA9ICJXVEZNb3ZlKCRuYW1lKSI7CiAgICAgICAgICAg
ICAgICAgaWYgKCRtYXlUaHJvd0V4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTtcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIApAQCAtNDQ5MCw4ICs0NDgzLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b25GdW5jdGlvbkNhbGwoKQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuICRpbmRl
bnQgLiAic2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7XG4iKSBpZiAkcmFpc2VzRXhjZXB0aW9u
OwogCiAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlu
cygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0s
ICJTY3JpcHRTdGF0ZSIpKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVu
dCAuICJpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpXG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
JGluZGVudCAuICJSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpO1xuIik7CiAgICAgICAgIH0KIAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVu
dCAuICJyZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKQEAgLTUzMTIsOCArNTMw
NCw3IEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKIAogICAgIEF0b21pY1N0cmluZyBldmVudFR5cGUgPSBzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhz
dGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICAke2ludGVyZmFj
ZU5hbWV9SW5pdCBldmVudEluaXQ7CiAKQEAgLTU0NjQsOCArNTQ1NSw3IEBAIEVORAogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmli
dXRlQ29udGFpbnMoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9y
Q2FsbFdpdGgifSwgIlNjcmlwdFN0YXRlIikpIHsKLSAgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIp
OwotICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7XG4iKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5Q3JlYXRl
ZChzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpO1xu
Iik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlz
aW9uIDIwNjMzNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQwNDUsOCArNDA0NSw3IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udHJvbGxlckpTVmFsdWUoSlMKICAgICAKICAgICBKU0M6OklkZW50aWZpZXIgY29udHJvbHNI
b3N0ID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNvbnRyb2xzSG9zdCIpOwog
ICAgIEpTQzo6SlNWYWx1ZSBjb250cm9sc0hvc3RKU1dyYXBwZXIgPSBtZWRpYUpTV3JhcHBlck9i
amVjdC0+Z2V0KCZleGVjLCBjb250cm9sc0hvc3QpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKIAogICAgIEpTQzo6SlNPYmplY3Qq
IGNvbnRyb2xzSG9zdEpTV3JhcHBlck9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpT
T2JqZWN0Kj4oY29udHJvbHNIb3N0SlNXcmFwcGVyKTsKICAgICBpZiAoIWNvbnRyb2xzSG9zdEpT
V3JhcHBlck9iamVjdCkKQEAgLTQwNTQsOCArNDA1Myw3IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udHJvbGxlckpTVmFsdWUoSlMKIAogICAgIEpTQzo6SWRlbnRpZmllciBjb250cm9sbGVySUQg
PSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY29udHJvbGxlciIpOwogICAgIEpT
Qzo6SlNWYWx1ZSBjb250cm9sbGVySlNXcmFwcGVyID0gY29udHJvbHNIb3N0SlNXcmFwcGVyT2Jq
ZWN0LT5nZXQoJmV4ZWMsIGNvbnRyb2xsZXJJRCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwogCiAgICAgcmV0dXJuIGNvbnRyb2xs
ZXJKU1dyYXBwZXI7CiB9CkBAIC02ODMyLDggKzY4MzAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnVwZGF0ZU1lZGlhQ29udHJvCiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJWYWx1ZSA9
IGNvbnRyb2xsZXJKU1ZhbHVlKCpleGVjLCAqZ2xvYmFsT2JqZWN0LCAqdGhpcyk7CiAgICAgSlND
OjpKU09iamVjdCogY29udHJvbGxlck9iamVjdCA9IGNvbnRyb2xsZXJWYWx1ZS50b09iamVjdChl
eGVjKTsKIAotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgSlND
OjpKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBjb250cm9sbGVyT2JqZWN0LT5nZXQoZXhlYywgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJoYW5kbGVQcmVzZW50YXRpb25Nb2RlQ2hh
bmdlIikpOwogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkgfHwgZnVuY3Rpb25W
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQpAQCAtNjg3NSw4ICs2ODcyLDcgQEAgU3RyaW5nIEhU
TUxNZWRpYUVsZW1lbnQ6OmdldEN1cnJlbnRNZWRpYQogICAgIEpTQzo6SlNWYWx1ZSBjb250cm9s
bGVyVmFsdWUgPSBjb250cm9sbGVySlNWYWx1ZSgqZXhlYywgKmdsb2JhbE9iamVjdCwgKnRoaXMp
OwogICAgIEpTQzo6SlNPYmplY3QqIGNvbnRyb2xsZXJPYmplY3QgPSBjb250cm9sbGVyVmFsdWUu
dG9PYmplY3QoZXhlYyk7CiAKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbXB0eVN0cmluZygpKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlvblZhbHVlID0g
Y29udHJvbGxlck9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCAiZ2V0Q3VycmVudENvbnRyb2xzU3RhdHVzIikpOwogICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkgfHwgZnVuY3Rpb25WYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQpAQCAt
Njg5Miw4ICs2ODg4LDcgQEAgU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6OmdldEN1cnJlbnRNZWRp
YQogCiAgICAgSlNDOjpKU1ZhbHVlIG91dHB1dFZhbHVlID0gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0
aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGNvbnRyb2xsZXJPYmplY3QsIGFyZ0xpc3QpOwogCi0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW1wdHlTdHJpbmcoKSk7
CiAKICAgICByZXR1cm4gb3V0cHV0VmFsdWUuZ2V0U3RyaW5nKGV4ZWMpOwogfQo=
</data>
<flag name="review"
          id="312935"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>