<?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>176647</bug_id>
          
          <creation_ts>2017-09-09 07:15:29 -0700</creation_ts>
          <short_desc>Avoid duplicate computations of ExecState::vm().</short_desc>
          <delta_ts>2017-09-27 12:32:43 -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 Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=176703</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1347090</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-09 07:15:29 -0700</bug_when>
    <thetext>Because while computing ExecState::vm() is cheap, it is not free.

This patch also:
1. gets rids of some convenience methods in CallFrame that implicitly does a ExecState::vm() computation.
2. passes vm (when available) to methodTable().
3. passes vm (when available) to JSLockHolder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347091</commentid>
    <comment_count>1</comment_count>
      <attachid>320342</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-09 07:33:37 -0700</bug_when>
    <thetext>Created attachment 320342
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347092</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-09 07:35:31 -0700</bug_when>
    <thetext>Attachment 320342 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:362:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:375:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:379:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:380:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 4 in 127 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347093</commentid>
    <comment_count>3</comment_count>
      <attachid>320342</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-09 07:36:25 -0700</bug_when>
    <thetext>Comment on attachment 320342
proposed patch.

Attachment 320342 did not pass bindings-ews (mac):
Output: http://webkit-queues.webkit.org/results/4496541

New failing tests:
(JS) JSTestCallTracer.cpp
(JS) JSTestCEReactions.cpp
(JS) JSTestCEReactionsStringifier.cpp
(JS) JSTestClassWithJSBuiltinConstructor.cpp
(JS) JSTestCustomConstructorWithNoInterfaceObject.cpp
(JS) JSTestActiveDOMObject.cpp
(JS) JSTestDOMJIT.cpp
(JS) JSTestEnabledBySetting.cpp
(JS) JSTestEventConstructor.cpp
(JS) JSTestEventTarget.cpp
(JS) JSTestException.cpp
(JS) JSTestGenerateIsReachable.cpp
(JS) JSTestGlobalObject.cpp
(JS) JSTestIndexedSetterNoIdentifier.cpp
(JS) JSTestIndexedSetterThrowingException.cpp
(JS) JSTestIndexedSetterWithIdentifier.cpp
(JS) JSTestInterface.cpp
(JS) JSTestInterfaceLeadingUnderscore.cpp
(JS) JSTestIterable.cpp
(JS) JSTestJSBuiltinConstructor.cpp
(JS) JSMapLike.cpp
(JS) JSTestMediaQueryListListener.cpp
(JS) JSTestNamedAndIndexedSetterNoIdentifier.cpp
(JS) JSTestNamedAndIndexedSetterThrowingException.cpp
(JS) JSTestNamedAndIndexedSetterWithIdentifier.cpp
(JS) JSTestNamedConstructor.cpp
(JS) JSTestNamedDeleterNoIdentifier.cpp
(JS) JSTestNamedDeleterThrowingException.cpp
(JS) JSTestNamedDeleterWithIdentifier.cpp
(JS) JSTestNamedDeleterWithIndexedGetter.cpp
(JS) JSTestNamedGetterCallWith.cpp
(JS) JSTestNamedGetterNoIdentifier.cpp
(JS) JSTestNamedGetterWithIdentifier.cpp
(JS) JSTestNamedSetterNoIdentifier.cpp
(JS) JSTestNamedSetterThrowingException.cpp
(JS) JSTestNamedSetterWithIdentifier.cpp
(JS) JSTestNamedSetterWithIndexedGetter.cpp
(JS) JSTestNamedSetterWithIndexedGetterAndSetter.cpp
(JS) JSTestNamedSetterWithOverrideBuiltins.cpp
(JS) JSTestNamedSetterWithUnforgableProperties.cpp
(JS) JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp
(JS) JSTestNode.cpp
(JS) JSTestObj.cpp
(JS) JSTestOverloadedConstructors.cpp
(JS) JSTestOverloadedConstructorsWithSequence.cpp
(JS) JSTestOverrideBuiltins.cpp
(JS) JSTestPluginInterface.cpp
(JS) JSTestPromiseRejectionEvent.cpp
(JS) JSReadOnlyMapLike.cpp
(JS) JSInterfaceName.cpp
(JS) JSTestSerialization.cpp
(JS) JSTestSerializationIndirectInheritance.cpp
(JS) JSTestSerializationInherit.cpp
(JS) JSTestSerializationInheritFinal.cpp
(JS) JSTestSerializedScriptValueInterface.cpp
(JS) JSTestStringifier.cpp
(JS) JSTestStringifierAnonymousOperation.cpp
(JS) JSTestStringifierNamedOperation.cpp
(JS) JSTestStringifierOperationImplementedAs.cpp
(JS) JSTestStringifierOperationNamedToString.cpp
(JS) JSTestStringifierReadOnlyAttribute.cpp
(JS) JSTestStringifierReadWriteAttribute.cpp
(JS) JSTestTypedefs.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347094</commentid>
    <comment_count>4</comment_count>
      <attachid>320343</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-09 07:42:33 -0700</bug_when>
    <thetext>Created attachment 320343
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347095</commentid>
    <comment_count>5</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-09 07:45:00 -0700</bug_when>
    <thetext>Attachment 320343 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:362:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:375:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:379:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:380:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 4 in 190 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347107</commentid>
    <comment_count>6</comment_count>
      <attachid>320343</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-09 09:21:50 -0700</bug_when>
    <thetext>Comment on attachment 320343
proposed patch.

Clearing flags on attachment: 320343

Committed r221822: &lt;http://trac.webkit.org/changeset/221822&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347108</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-09 09:21:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353460</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:32:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693456&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320342</attachid>
            <date>2017-09-09 07:33:37 -0700</date>
            <delta_ts>2017-09-09 07:42:33 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-176647.patch</filename>
            <type>text/plain</type>
            <size>254929</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIxODE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyNiBA
QAorMjAxNy0wOS0wOSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QXZvaWQgZHVwbGljYXRlIGNvbXB1dGF0aW9ucyBvZiBFeGVjU3RhdGU6OnZtKCkuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY2NDcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU0Jhc2UuY3Bw
OgorICAgICAgICAoSlNDaGVja1NjcmlwdFN5bnRheCk6CisgICAgICAgIChKU0dhcmJhZ2VDb2xs
ZWN0KToKKyAgICAgICAgKEpTUmVwb3J0RXh0cmFNZW1vcnlDb3N0KToKKyAgICAgICAgKEpTU3lu
Y2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyk6CisgICAgICAgIChKU1N5bmNocm9u
b3VzRWRlbkNvbGxlY3RGb3JEZWJ1Z2dpbmcpOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrQ29u
c3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0NvbnN0cnVjdG9yOjpjcmVhdGUp
OgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTQ2Fs
bGJhY2tPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogQVBJL0pTQ29udGV4dC5tbToKKyAgICAg
ICAgKC1bSlNDb250ZXh0IHNldEV4Y2VwdGlvbjpdKToKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0
UmVmLmNwcDoKKyAgICAgICAgKEpTQ29udGV4dEdldEdsb2JhbE9iamVjdCk6CisgICAgICAgIChK
U0NvbnRleHRDcmVhdGVCYWNrdHJhY2UpOgorICAgICAgICAqIEFQSS9KU01hbmFnZWRWYWx1ZS5t
bToKKyAgICAgICAgKC1bSlNNYW5hZ2VkVmFsdWUgdmFsdWVdKToKKyAgICAgICAgKiBBUEkvSlNP
YmplY3RSZWYuY3BwOgorICAgICAgICAoSlNPYmplY3RNYWtlKToKKyAgICAgICAgKEpTT2JqZWN0
TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrKToKKyAgICAgICAgKEpTT2JqZWN0TWFrZUNvbnN0cnVj
dG9yKToKKyAgICAgICAgKEpTT2JqZWN0TWFrZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTT2JqZWN0
U2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTT2JqZWN0SGFzUHJvcGVydHkpOgorICAgICAgICAo
SlNPYmplY3RHZXRQcm9wZXJ0eSk6CisgICAgICAgIChKU09iamVjdFNldFByb3BlcnR5KToKKyAg
ICAgICAgKEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KToKKyAgICAgICAgKEpTT2JqZWN0RGVs
ZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3RHZXRQcml2YXRlUHJvcGVydHkpOgorICAg
ICAgICAoSlNPYmplY3RTZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3REZWxl
dGVQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3RJc0Z1bmN0aW9uKToKKyAgICAg
ICAgKEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAoSlNPYmplY3RDYWxsQXNDb25z
dHJ1Y3Rvcik6CisgICAgICAgIChKU09iamVjdENvcHlQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGROYW1lKToKKyAgICAgICAgKiBBUEkvSlNTY3Jp
cHRSZWYuY3BwOgorICAgICAgICAqIEFQSS9KU1R5cGVkQXJyYXkuY3BwOgorICAgICAgICAoSlNW
YWx1ZUdldFR5cGVkQXJyYXlUeXBlKToKKyAgICAgICAgKEpTT2JqZWN0TWFrZVR5cGVkQXJyYXlX
aXRoQXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNPYmplY3RNYWtlVHlwZWRBcnJheVdpdGhBcnJh
eUJ1ZmZlckFuZE9mZnNldCk6CisgICAgICAgIChKU09iamVjdEdldFR5cGVkQXJyYXlCeXRlc1B0
cik6CisgICAgICAgIChKU09iamVjdEdldFR5cGVkQXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNP
YmplY3RNYWtlQXJyYXlCdWZmZXJXaXRoQnl0ZXNOb0NvcHkpOgorICAgICAgICAoSlNPYmplY3RH
ZXRBcnJheUJ1ZmZlckJ5dGVzUHRyKToKKyAgICAgICAgKiBBUEkvSlNXZWFrT2JqZWN0TWFwUmVm
UHJpdmF0ZS5jcHA6CisgICAgICAgICogQVBJL0pTV3JhcHBlck1hcC5tbToKKyAgICAgICAgKGNv
bnN0cnVjdG9ySGFzSW5zdGFuY2UpOgorICAgICAgICAobWFrZVdyYXBwZXIpOgorICAgICAgICAq
IEFQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbToKKyAgICAgICAgKG9iakNDYWxsYmFja0Z1bmN0
aW9uRm9ySW52b2NhdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmpldHRpc29uKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
cmVwbGFjZUNvbnN0YW50KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoK
KyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAg
IChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGRmZy9ERkdEZXNp
cmVkV2F0Y2hwb2ludHMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5QnVmZmVyVmlld1dh
dGNocG9pbnRBZGFwdG9yOjphZGQpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpnbG9iYWxUaGlzT2JqZWN0Rm9yKToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZUZUTE9TUkV4aXQpOgorICAgICAgICAqIGZ0bC9G
VExPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25Qb3B1bGF0ZU9i
amVjdEluT1NSKToKKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVj
dEluT1NSKToKKyAgICAgICAgKiBoZWFwL0dDQXNzZXJ0aW9ucy5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3Rl
ZFNjcmlwdEhvc3Q6OndyYXBwZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9KU0luamVjdGVkU2Ny
aXB0SG9zdC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojpz
dWJ0eXBlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6Y29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eSk6
CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hbFBy
b3BlcnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vh
a01hcEVudHJpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6
d2Vha1NldEVudHJpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9z
dDo6aXRlcmF0b3JFbnRyaWVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6dmFsdWVGb3JTY29wZUxvY2F0aW9uKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZURlc2NyaXB0
aW9ucyk6CisgICAgICAgIChJbnNwZWN0b3I6OnRvSlMpOgorICAgICAgICAqIGluc3BlY3Rvci9T
Y3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6ZXh0cmFjdFNv
dXJjZUluZm9ybWF0aW9uRnJvbUV4Y2VwdGlvbik6CisgICAgICAgIChJbnNwZWN0b3I6OmNyZWF0
ZVNjcmlwdEFyZ3VtZW50cyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FjaGVkQ2FsbC5oOgor
ICAgICAgICAoSlNDOjpDYWNoZWRDYWxsOjpDYWNoZWRDYWxsKToKKyAgICAgICAgKiBpbnRlcnBy
ZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphdG9taWNTdHJpbmdU
YWJsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6cHJvcGVydHlO
YW1lcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6ZW1wdHlMaXN0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjppbnRlcnByZXRlcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aGVhcCk6IERlbGV0ZWQuCisgICAg
ICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6ZXhlY3V0ZVByb2dyYW0pOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0
ZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlTW9kdWxlUHJvZ3JhbSk6Cisg
ICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcyk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGpp
dC9KSVRXb3JrbGlzdC5jcHA6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0Ojpjb21waWxlTm93
KToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoV1RGOjpSdW50aW1lQXJyYXk6OmNyZWF0
ZSk6CisgICAgICAgIChXVEY6OlJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAg
ICAgICAgKFdURjo6RE9NSklUR2V0dGVyOjpET01KSVRBdHRyaWJ1dGU6OnNsb3dDYWxsKToKKyAg
ICAgICAgKFdURjo6RE9NSklURnVuY3Rpb25PYmplY3Q6OnVuc2FmZUZ1bmN0aW9uKToKKyAgICAg
ICAgKFdURjo6RE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdDo6dW5zYWZlRnVuY3Rpb24pOgorICAg
ICAgICAoR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJGZXRjaCk6CisgICAgICAgIChmdW5jdGlv
bkR1bXBDYWxsRnJhbWUpOgorICAgICAgICAoZnVuY3Rpb25DcmVhdGVSb290KToKKyAgICAgICAg
KGZ1bmN0aW9uR2V0RWxlbWVudCk6CisgICAgICAgIChmdW5jdGlvblNldEVsZW1lbnRSb290KToK
KyAgICAgICAgKGZ1bmN0aW9uQ3JlYXRlU2ltcGxlT2JqZWN0KToKKyAgICAgICAgKGZ1bmN0aW9u
U2V0SGlkZGVuVmFsdWUpOgorICAgICAgICAoZnVuY3Rpb25DcmVhdGVQcm94eSk6CisgICAgICAg
IChmdW5jdGlvbkNyZWF0ZUltcHVyZUdldHRlcik6CisgICAgICAgIChmdW5jdGlvbkNyZWF0ZUN1
c3RvbUdldHRlck9iamVjdCk6CisgICAgICAgIChmdW5jdGlvbkNyZWF0ZURPTUpJVE5vZGVPYmpl
Y3QpOgorICAgICAgICAoZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJPYmplY3QpOgorICAgICAg
ICAoZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJDb21wbGV4T2JqZWN0KToKKyAgICAgICAgKGZ1
bmN0aW9uQ3JlYXRlRE9NSklURnVuY3Rpb25PYmplY3QpOgorICAgICAgICAoZnVuY3Rpb25DcmVh
dGVET01KSVRDaGVja1N1YkNsYXNzT2JqZWN0KToKKyAgICAgICAgKGZ1bmN0aW9uR0NBbmRTd2Vl
cCk6CisgICAgICAgIChmdW5jdGlvbkZ1bGxHQyk6CisgICAgICAgIChmdW5jdGlvbkVkZW5HQyk6
CisgICAgICAgIChmdW5jdGlvbkhlYXBTaXplKToKKyAgICAgICAgKGZ1bmN0aW9uU2hhZG93Q2hp
Y2tlbkZ1bmN0aW9uc09uU3RhY2spOgorICAgICAgICAoZnVuY3Rpb25TZXRHbG9iYWxDb25zdFJl
ZGVjbGFyYXRpb25TaG91bGROb3RUaHJvdyk6CisgICAgICAgIChmdW5jdGlvbkpTQ09wdGlvbnMp
OgorICAgICAgICAoZnVuY3Rpb25GYWlsTmV4dE5ld0NvZGVCbG9jayk6CisgICAgICAgIChmdW5j
dGlvbk1ha2VNYXNxdWVyYWRlcik6CisgICAgICAgIChmdW5jdGlvbkR1bXBUeXBlc0ZvckFsbFZh
cmlhYmxlcyk6CisgICAgICAgIChmdW5jdGlvbkZpbmRUeXBlRm9yRXhwcmVzc2lvbik6CisgICAg
ICAgIChmdW5jdGlvblJldHVyblR5cGVGb3IpOgorICAgICAgICAoZnVuY3Rpb25EdW1wQmFzaWNC
bG9ja0V4ZWN1dGlvblJhbmdlcyk6CisgICAgICAgIChmdW5jdGlvbkJhc2ljQmxvY2tFeGVjdXRp
b25Db3VudCk6CisgICAgICAgIChmdW5jdGlvbkRyYWluTWljcm90YXNrcyk6CisgICAgICAgIChm
dW5jdGlvbkdlbmVyYXRlSGVhcFNuYXBzaG90KToKKyAgICAgICAgKGZ1bmN0aW9uRW5zdXJlQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKGZ1bmN0aW9uU3RhcnRTYW1wbGluZ1Byb2ZpbGVyKToKKyAg
ICAgICAgKHJ1bkludGVyYWN0aXZlKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5j
cHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAg
ICogcGFyc2VyL01vZHVsZUFuYWx5emVyLmNwcDoKKyAgICAgICAgKEpTQzo6TW9kdWxlQW5hbHl6
ZXI6Ok1vZHVsZUFuYWx5emVyKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rl
LmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkJ5dGVjb2RlOjp0b0pTIGNvbnN0KToKKyAg
ICAgICAgKiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwOgorICAgICAgICAo
SlNDOjpQcm9maWxlcjo6Qnl0ZWNvZGVTZXF1ZW5jZTo6YWRkU2VxdWVuY2VQcm9wZXJ0aWVzIGNv
bnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5jcHA6CisgICAgICAg
IChKU0M6OlByb2ZpbGVyOjpCeXRlY29kZXM6OnRvSlMgY29uc3QpOgorICAgICAgICAqIHByb2Zp
bGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Q29t
cGlsYXRpb246OnRvSlMgY29uc3QpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQ29tcGls
ZWRCeXRlY29kZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpDb21waWxlZEJ5dGVjb2Rl
Ojp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkRhdGFiYXNlOjp0b0pTIGNvbnN0KToKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlckV2ZW50LmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkV2
ZW50Ojp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9TUkV4aXQuY3Bw
OgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6T1NSRXhpdDo6dG9KUyBjb25zdCk6CisgICAgICAg
ICogcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW4uY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6
T3JpZ2luOjp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlclByb2ZpbGVk
Qnl0ZWNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OlByb2ZpbGVkQnl0ZWNvZGVz
Ojp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNw
cDoKKyAgICAgICAgKEpTQzo6aWRlbnRpZmllclRvSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkFi
c3RyYWN0TW9kdWxlUmVjb3JkOjpyZXNvbHZlRXhwb3J0SW1wbCk6CisgICAgICAgIChKU0M6Omdl
dEV4cG9ydGVkTmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6YXJy
YXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RCb29sZWFuRnJvbUltbWVkaWF0
ZUJvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvQ2FsbERhdGEuY3BwOgorICAgICAgICAoSlND
OjpjYWxsKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAg
IChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5oOgorICAgICAgICAoSlNDOjpDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlUHV0VG9TY29wZUds
b2JhbCk6CisgICAgICAgIChKU0M6OkNvbW1vblNsb3dQYXRoczo6dHJ5Q2FjaGVHZXRGcm9tU2Nv
cGVHbG9iYWwpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHA6CisgICAgICAgIChK
U0M6OmNoZWNrU3ludGF4KToKKyAgICAgICAgKEpTQzo6ZXZhbHVhdGUpOgorICAgICAgICAoSlND
Ojpsb2FkQW5kRXZhbHVhdGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpsb2FkTW9kdWxlKToKKyAg
ICAgICAgKEpTQzo6bGlua0FuZEV2YWx1YXRlTW9kdWxlKToKKyAgICAgICAgKEpTQzo6aW1wb3J0
TW9kdWxlKToKKyAgICAgICAgKiBydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0pTT04pOgorICAgICAgICAqIHJ1bnRpbWUvRGly
ZWN0QXJndW1lbnRzLmg6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6bGVuZ3RoIGNv
bnN0KToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEV2YWxFeGVjdXRhYmxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6RGlyZWN0RXZhbEV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGlt
ZS9FcnJvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmVycm9yUHJvdG9GdW5jVG9TdHJp
bmcpOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHA6CisgICAgICAgIChK
U0M6OmNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IpOgorICAgICAgICAoSlNDOjplcnJvckRl
c2NyaXB0aW9uRm9yVmFsdWUpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50
aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1
bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSWRl
bnRpZmllcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAg
ICAgKiBydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpJ
bmRpcmVjdEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSW50ZXJu
YWxGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkludGVybmFsRnVuY3Rpb246OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NT
dHJ1Y3R1cmVTbG93KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAo
SlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0FycmF5
OjpwdXQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OmlzSXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKToKKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRD
b3VudEZvclNoaWZ0KToKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuY3BwOgorICAgICAg
ICAoSlNDOjpKU1ZhbHVlOjpkdW1wRm9yQmFja3RyYWNlIGNvbnN0KToKKyAgICAgICAgKiBydW50
aW1lL0pTRGF0YVZpZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpkZWxldGVQcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6Cisg
ICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlv
bjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZGVsZXRl
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpyZWlmeU5hbWUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpn
bG9iYWxGdW5jRXZhbCk6CisgICAgICAgICogcnVudGltZS9KU0ludGVybmFsUHJvbWlzZS5jcHA6
CisgICAgICAgIChKU0M6OkpTSW50ZXJuYWxQcm9taXNlOjp0aGVuKToKKyAgICAgICAgKiBydW50
aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcDoKKyAgICAgICAgKEpTQzo6SlNMZXhpY2FsRW52
aXJvbm1lbnQ6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pTTWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNNYXA6OmlzSXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZh
YmxlKToKKyAgICAgICAgKiBydW50aW1lL0pTTWFwSXRlcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
SlNNYXBJdGVyYXRvcjo6YWR2YW5jZUl0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVF
bnZpcm9ubWVudC5jcHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUxvYWRl
ci5jcHA6CisgICAgICAgIChKU0M6OnByaW50YWJsZU1vZHVsZUtleSk6CisgICAgICAgIChKU0M6
OkpTTW9kdWxlTG9hZGVyOjpwcm92aWRlKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6
OmxvYWRBbmRFdmFsdWF0ZU1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjps
b2FkTW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OmxpbmtBbmRFdmFsdWF0
ZU1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpyZXF1ZXN0SW1wb3J0TW9k
dWxlKToKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Lmg6CisgICAg
ICAgICogcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxl
UmVjb3JkOjpldmFsdWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OlN0cmluZ2lmaWVyKToKKyAgICAgICAgKEpTQzo6U3Ry
aW5naWZpZXI6OmFwcGVuZFN0cmluZ2lmaWVkVmFsdWUpOgorICAgICAgICAoSlNDOjpTdHJpbmdp
Zmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FsY3VsYXRlZENsYXNzTmFtZSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6Om9yZGluYXJ5VG9QcmltaXRpdmUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6dG9QcmltaXRpdmUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aGFzSW5zdGFu
Y2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleFNsb3dPckJleW9uZFZlY3Rvckxlbmd0
aCk6CisgICAgICAgIChKU0M6OmdldEN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uRm9yR2V0dGVy
U2V0dGVyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRNZXRob2QpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZVJhd09iamVjdCk6
CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGlt
ZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhblBlcmZvcm1G
YXN0UHV0SW5saW5lKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dElubGluZUZvckpTT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc093blByb3BlcnR5IGNvbnN0KToKKyAg
ICAgICAgKiBydW50aW1lL0pTU2NvcGUuY3BwOgorICAgICAgICAoSlNDOjppc1Vuc2NvcGFibGUp
OgorICAgICAgICAoSlNDOjpKU1Njb3BlOjpyZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNs
SW5FdmFsKToKKyAgICAgICAgKiBydW50aW1lL0pTU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNT
ZXQ6OmlzSXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKToKKyAgICAgICAgKiBy
dW50aW1lL0pTU2V0SXRlcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6YWR2
YW5jZUl0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlND
OjpKU1N0cmluZzo6Z2V0U3RyaW5nUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50
aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0
eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RNYXApOgorICAgICAgICAqIHJ1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRl
KToKKyAgICAgICAgKiBydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6
Om9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL1Byb2dy
YW1FeGVjdXRhYmxlLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChK
U0M6OlJlZ0V4cE9iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpSZWdFeHBP
YmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlJlZ0V4
cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6
Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OnB1
dCk6CisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHMuaDoKKyAgICAgICAgKEpTQzo6
U2NvcGVkQXJndW1lbnRzOjpsZW5ndGggY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaWN0
RXZhbEFjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6U3RyaWN0RXZhbEFjdGl2YXRpb246OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuY3BwOgorICAgICAgICAoSlND
Ojppc1N0cmluZ093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpkZWxl
dGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTVByb3RvdHlwZTo6Z2MpOgorICAgICAgICAoSlNDOjpK
U0RvbGxhclZNUHJvdG90eXBlOjplZGVuR0MpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6ZXZhbHVhdGUpOgorCiAyMDE3LTA5LTA4ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPgogCiAgICAgICAgIFtERkddIE5ld0FycmF5V2l0aFNpemUoc2l6ZSkncyBzaXpl
IGRvZXMgbm90IGNhcmUgbmVnYXRpdmUgemVybwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJl
dmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MjksNyArNDI5LDcgQEAgcHVibGljOgogICAgICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNyZWF0
ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBjcmVhdGVQcm90b3R5cGUodm0sIGdsb2JhbE9i
amVjdCkpOwotICAgICAgICBSdW50aW1lQXJyYXkqIHJ1bnRpbWVBcnJheSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPFJ1bnRpbWVBcnJheT4oKmV4ZWMtPmhlYXAoKSkpIFJ1bnRpbWVBcnJh
eShleGVjLCBzdHJ1Y3R1cmUpOworICAgICAgICBSdW50aW1lQXJyYXkqIHJ1bnRpbWVBcnJheSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJ1bnRpbWVBcnJheT4odm0uaGVhcCkpIFJ1bnRp
bWVBcnJheShleGVjLCBzdHJ1Y3R1cmUpOwogICAgICAgICBydW50aW1lQXJyYXktPmZpbmlzaENy
ZWF0aW9uKGV4ZWMpOwogICAgICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcihydW50aW1lQXJyYXks
IGRlc3Ryb3kpOwogICAgICAgICByZXR1cm4gcnVudGltZUFycmF5OwpAQCAtNDQ2LDggKzQ0Niw5
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKICAgICB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgICAgIFJ1bnRpbWVBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lQXJyYXkqPihv
YmplY3QpOwotICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpIHsKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3VzdG9tKHRoaXNPYmpl
Y3QsIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtLCB0aGlzT2JqZWN0LT5sZW5ndGhH
ZXR0ZXIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTY2NSw3ICs2
NjYsOCBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gc2xvd0NhbGwoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBwb2lu
dGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZleGVjLT52bSgpLCBleGVjKTsKKyAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PERPTUpJ
VEdldHRlcio+KHBvaW50ZXIpLT52YWx1ZSgpKSk7CiAgICAgICAgIH0KIApAQCAtODU1LDcgKzg1
Nyw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IHVuc2FmZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRE9NSklUTm9kZSogbm9kZSkKICAgICB7
Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmV4ZWMtPnZtKCksIGV4ZWMp
OworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIobm9kZS0+dmFsdWUoKSkpOwogICAgIH0KIApAQCAtOTI4LDcgKzkzMSw4IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHVuc2FmZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRE9NSklUTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmV4ZWMtPnZtKCksIGV4ZWMpOworICAgICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
bm9kZS0+dmFsdWUoKSkpOwogICAgIH0KIApAQCAtMTgxMSw3ICsxODE1LDcgQEAgSlNJbnRlcm5h
bFByb21pc2UqIEdsb2JhbE9iamVjdDo6bW9kdWxlTAogICAgIGlmICghZmV0Y2hNb2R1bGVGcm9t
TG9jYWxGaWxlU3lzdGVtKG1vZHVsZUtleSwgdXRmOCkpCiAgICAgICAgIHJldHVybiBkZWZlcnJl
ZC0+cmVqZWN0KGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoIkNvdWxkIG5vdCBv
cGVuIGZpbGUgJyIsIG1vZHVsZUtleSwgIicuIikpKTsKIAotICAgIGF1dG8gcmVzdWx0ID0gZGVm
ZXJyZWQtPnJlc29sdmUoZXhlYywgSlNTb3VyY2VDb2RlOjpjcmVhdGUoZXhlYy0+dm0oKSwgbWFr
ZVNvdXJjZShzdHJpbmdGcm9tVVRGKHV0ZjgpLCBTb3VyY2VPcmlnaW4geyBtb2R1bGVLZXkgfSwg
bW9kdWxlS2V5LCBUZXh0UG9zaXRpb24oKSwgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpNb2R1
bGUpKSk7CisgICAgYXV0byByZXN1bHQgPSBkZWZlcnJlZC0+cmVzb2x2ZShleGVjLCBKU1NvdXJj
ZUNvZGU6OmNyZWF0ZSh2bSwgbWFrZVNvdXJjZShzdHJpbmdGcm9tVVRGKHV0ZjgpLCBTb3VyY2VP
cmlnaW4geyBtb2R1bGVLZXkgfSwgbW9kdWxlS2V5LCBUZXh0UG9zaXRpb24oKSwgU291cmNlUHJv
dmlkZXJTb3VyY2VUeXBlOjpNb2R1bGUpKSk7CiAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhj
ZXB0aW9uKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE4NTMsMTAgKzE4NTcsMTEgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaQogI2lmbmRlZiBOREVCVUcK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wQ2FsbEZyYW1lKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IGV4ZWMt
PnZtKCkudG9wVk1FbnRyeUZyYW1lOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk1F
bnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSB2bS50b3BWTUVudHJ5RnJhbWU7CiAgICAgRXhl
Y1N0YXRlKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSk7
CiAgICAgaWYgKGNhbGxlckZyYW1lKQotICAgICAgICBleGVjLT52bSgpLmludGVycHJldGVyLT5k
dW1wQ2FsbEZyYW1lKGNhbGxlckZyYW1lKTsKKyAgICAgICAgdm0uaW50ZXJwcmV0ZXItPmR1bXBD
YWxsRnJhbWUoY2FsbGVyRnJhbWUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAjZW5kaWYKQEAgLTE5MzMsOCArMTkzOCw5IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0MKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNyZWF0ZVJvb3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoUm9vdDo6Y3JlYXRlKGV4
ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoUm9vdDo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsK
IH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUVsZW1lbnQo
RXhlY1N0YXRlKiBleGVjKQpAQCAtMTk1MSw4ICsxOTU3LDggQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkNyZQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uR2V0RWxlbWVudChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7CiAgICAgUm9vdCogcm9vdCA9IGpzRHluYW1pY0Nhc3Q8Um9vdCo+KHZtLCBleGVjLT5h
cmd1bWVudCgwKSk7CiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTk2MiwxOSArMTk2OCwyMCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25TZXRFbGVtZW50Um9vdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayh2bSk7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGpzRHluYW1pY0Nhc3Q8RWxl
bWVudCo+KHZtLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgUm9vdCogcm9vdCA9IGpzRHluYW1p
Y0Nhc3Q8Um9vdCo+KHZtLCBleGVjLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKGVsZW1lbnQgJiYg
cm9vdCkKLSAgICAgICAgZWxlbWVudC0+c2V0Um9vdChleGVjLT52bSgpLCByb290KTsKKyAgICAg
ICAgZWxlbWVudC0+c2V0Um9vdCh2bSwgcm9vdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkNyZWF0ZVNpbXBsZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTaW1wbGVPYmplY3Q6
OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKFNpbXBsZU9iamVjdDo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkdldEhpZGRlblZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTIwMDMsMTkgKzIwMTAsMjAg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldAogICAgICAgICByZXR1
cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICB9CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFy
Z3VtZW50KDEpOwotICAgIHNpbXBsZU9iamVjdC0+c2V0SGlkZGVuVmFsdWUoZXhlYy0+dm0oKSwg
dmFsdWUpOworICAgIHNpbXBsZU9iamVjdC0+c2V0SGlkZGVuVmFsdWUodm0sIHZhbHVlKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlUHJveHkoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhlYy0+
YXJndW1lbnQoMCk7CiAgICAgaWYgKCF0YXJnZXQuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU09iamVjdCoganNUYXJnZXQg
PSBhc09iamVjdCh0YXJnZXQuYXNDZWxsKCkpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
SlNQcm94eTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwganNUYXJnZXQtPmdldFByb3RvdHlwZURpcmVjdCgpLCBJbXB1cmVQcm94eVR5cGUp
OwotICAgIEpTUHJveHkqIHByb3h5ID0gSlNQcm94eTo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVj
dHVyZSwganNUYXJnZXQpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNQcm94eTo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzVGFyZ2V0LT5n
ZXRQcm90b3R5cGVEaXJlY3QoKSwgSW1wdXJlUHJveHlUeXBlKTsKKyAgICBKU1Byb3h5KiBwcm94
eSA9IEpTUHJveHk6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBqc1RhcmdldCk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShwcm94eSk7CiB9CiAKQEAgLTIwMjgsNjEgKzIwMzYsNjggQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZQogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlSW1wdXJlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogICAgIEpTT2JqZWN0KiBkZWxlZ2F0ZSA9IG51bGxwdHI7CiAgICAgaWYg
KHRhcmdldC5pc09iamVjdCgpKQogICAgICAgICBkZWxlZ2F0ZSA9IGFzT2JqZWN0KHRhcmdldC5h
c0NlbGwoKSk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbXB1cmVHZXR0ZXI6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzTnVs
bCgpKTsKLSAgICBJbXB1cmVHZXR0ZXIqIHJlc3VsdCA9IEltcHVyZUdldHRlcjo6Y3JlYXRlKGV4
ZWMtPnZtKCksIHN0cnVjdHVyZSwgZGVsZWdhdGUpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gSW1wdXJlR2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwganNOdWxsKCkpOworICAgIEltcHVyZUdldHRlciogcmVzdWx0ID0gSW1wdXJlR2V0
dGVyOjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgZGVsZWdhdGUpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkNyZWF0ZUN1c3RvbUdldHRlck9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDdXN0b21H
ZXR0ZXI6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIGpzTnVsbCgpKTsKLSAgICBDdXN0b21HZXR0ZXIqIHJlc3VsdCA9IEN1c3RvbUdldHRl
cjo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBDdXN0b21HZXR0ZXI6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLCBqc051bGwoKSk7CisgICAgQ3VzdG9tR2V0dGVyKiByZXN1bHQgPSBDdXN0b21HZXR0
ZXI6OmNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVE
T01KSVROb2RlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IERPTUpJVE5vZGU6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIERPTUpJVEdl
dHRlcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIERPTUpJVEdldHRlcjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwganNOdWxsKCkpKSk7Ci0gICAg
RE9NSklUTm9kZSogcmVzdWx0ID0gRE9NSklUTm9kZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVj
dHVyZSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2
bSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBET01KSVROb2RlOjpjcmVhdGVTdHJ1Y3R1
cmUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgRE9NSklUR2V0dGVyOjpjcmVhdGUo
dm0sIERPTUpJVEdldHRlcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIGpzTnVsbCgpKSkpOworICAgIERPTUpJVE5vZGUqIHJlc3VsdCA9IERPTUpJVE5v
ZGU6OmNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVE
T01KSVRHZXR0ZXJPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gRE9NSklUR2V0dGVyOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBqc051
bGwoKSk7Ci0gICAgRE9NSklUR2V0dGVyKiByZXN1bHQgPSBET01KSVRHZXR0ZXI6OmNyZWF0ZShl
eGVjLT52bSgpLCBzdHJ1Y3R1cmUpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sodm0pOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gRE9NSklUR2V0
dGVyOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwganNO
dWxsKCkpOworICAgIERPTUpJVEdldHRlciogcmVzdWx0ID0gRE9NSklUR2V0dGVyOjpjcmVhdGUo
dm0sIHN0cnVjdHVyZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklUR2V0dGVy
Q29tcGxleE9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBET01KSVRHZXR0ZXJDb21wbGV4Ojpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBq
c051bGwoKSk7Ci0gICAgRE9NSklUR2V0dGVyQ29tcGxleCogcmVzdWx0ID0gRE9NSklUR2V0dGVy
Q29tcGxleDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
c3RydWN0dXJlKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IERPTUpJVEdldHRlckNvbXBsZXg6
OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBqc051bGwo
KSk7CisgICAgRE9NSklUR2V0dGVyQ29tcGxleCogcmVzdWx0ID0gRE9NSklUR2V0dGVyQ29tcGxl
eDo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklURnVuY3Rpb25PYmplY3QoRXhlY1N0YXRl
KiBleGVjKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gRE9NSklURnVuY3Rpb25PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52
bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzTnVsbCgpKTsKLSAgICBET01KSVRG
dW5jdGlvbk9iamVjdCogcmVzdWx0ID0gRE9NSklURnVuY3Rpb25PYmplY3Q6OmNyZWF0ZShleGVj
LT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBET01KSVRGdW5jdGlvbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZt
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzTnVsbCgpKTsKKyAgICBET01KSVRGdW5j
dGlvbk9iamVjdCogcmVzdWx0ID0gRE9NSklURnVuY3Rpb25PYmplY3Q6OmNyZWF0ZSh2bSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkNyZWF0ZURPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
RE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwganNOdWxsKCkpOwotICAgIERPTUpJVENoZWNrU3Vi
Q2xhc3NPYmplY3QqIHJlc3VsdCA9IERPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3Q6OmNyZWF0ZShl
eGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBET01KSVRDaGVja1N1YkNsYXNzT2JqZWN0OjpjcmVhdGVTdHJ1
Y3R1cmUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwganNOdWxsKCkpOworICAgIERP
TUpJVENoZWNrU3ViQ2xhc3NPYmplY3QqIHJlc3VsdCA9IERPTUpJVENoZWNrU3ViQ2xhc3NPYmpl
Y3Q6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtMjEwOSwyMyArMjEy
NCwyNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQ0FuZFN3ZWVwKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICBleGVjLT5oZWFwKCktPmNv
bGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKGV4ZWMtPmhlYXAoKS0+c2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0
aW9uKCkpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKKyAgICB2bS5oZWFwLmNvbGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxs
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHZtLmhlYXAuc2l6ZUFmdGVy
TGFzdEZ1bGxDb2xsZWN0aW9uKCkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkZ1bGxHQyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7Ci0gICAgZXhlYy0+aGVhcCgpLT5jb2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6
OkZ1bGwpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZXhlYy0+aGVhcCgp
LT5zaXplQWZ0ZXJMYXN0RnVsbENvbGxlY3Rpb24oKSkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIHZtLmhlYXAuY29sbGVjdFN5bmMo
Q29sbGVjdGlvblNjb3BlOjpGdWxsKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKHZtLmhlYXAuc2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0aW9uKCkpKTsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVkZW5HQyhFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgZXhlYy0+aGVhcCgpLT5jb2xsZWN0
U3luYyhDb2xsZWN0aW9uU2NvcGU6OkVkZW4pOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoZXhlYy0+aGVhcCgpLT5zaXplQWZ0ZXJMYXN0RWRlbkNvbGxlY3Rpb24oKSkpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAg
IHZtLmhlYXAuY29sbGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpFZGVuKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHZtLmhlYXAuc2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0
aW9uKCkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZvcmNl
R0NTbG93UGF0aHMoRXhlY1N0YXRlKikKQEAgLTIxMzgsOCArMjE1Niw5IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Gb3IKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkhlYXBTaXplKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGV4ZWMt
PmhlYXAoKS0+c2l6ZSgpKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayh2bSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih2bS5o
ZWFwLnNpemUoKSkpOwogfQogCiAvLyBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBnZW5lcmFsbHkgdmVy
eSBoZWxwZnVsIGluIDY0LWJpdCBjb2RlIGFzIHRoZSB0YWcgYW5kIHBheWxvYWQKQEAgLTIzNjcs
MTIgKzIzODYsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNsZQog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2hhZG93Q2hpY2tlbkZ1bmN0
aW9uc09uU3RhY2soRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoZXhlYy0+dm0oKS5zaGFkb3dDaGlja2VuKCkuZnVuY3Rpb25zT25TdGFjayhleGVjKSk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZtLnNo
YWRvd0NoaWNrZW4oKS5mdW5jdGlvbnNPblN0YWNrKGV4ZWMpKTsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldEdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3Vs
ZE5vdFRocm93KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBleGVjLT52bSgpLnNldEdsb2JhbENv
bnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93KGZhbHNlKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIHZtLnNldEdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93KGZhbHNl
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0y
ODA3LDkgKzI4MjgsMTAgQEAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19mdW5kYW1l
bgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSlNDT3B0aW9ucyhFeGVj
U3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU09iamVjdCog
b3B0aW9uc09iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogI2RlZmluZSBGT1Jf
RUFDSF9PUFRJT04odHlwZV8sIG5hbWVfLCBkZWZhdWx0VmFsdWVfLCBhdmFpbGFiaWxpdHlfLCBk
ZXNjcmlwdGlvbl8pIFwKLSAgICBhZGRPcHRpb24oZXhlYy0+dm0oKSwgb3B0aW9uc09iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAjbmFtZV8pLCBPcHRpb25zOjpuYW1lXygpKTsK
KyAgICBhZGRPcHRpb24odm0sIG9wdGlvbnNPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
ZXhlYywgI25hbWVfKSwgT3B0aW9uczo6bmFtZV8oKSk7CiAgICAgSlNDX09QVElPTlMoRk9SX0VB
Q0hfT1BUSU9OKQogI3VuZGVmIEZPUl9FQUNIX09QVElPTgogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUob3B0aW9uc09iamVjdCk7CkBAIC0yODQ3LDcgKzI4NjksOCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVHJhCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25GYWlsTmV4dE5ld0NvZGVCbG9jayhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
ZXhlYy0+dm0oKS5zZXRGYWlsTmV4dE5ld0NvZGVCbG9jaygpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgdm0uc2V0RmFpbE5leHROZXdDb2RlQmxvY2soKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0yODg5LDcgKzI5MTIsOCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRWZmCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYWtlTWFzcXVlcmFkZXIoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoTWFzcXVlcmFkZXI6OmNyZWF0ZShleGVjLT52
bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoTWFzcXVlcmFkZXI6OmNyZWF0ZSh2bSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25IYXNDdXN0b21Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSogZXhlYykKQEAg
LTI5MDIsMTQgKzI5MjYsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkhhcwogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcFR5cGVzRm9y
QWxsVmFyaWFibGVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBleGVjLT52bSgpLmR1bXBUeXBl
UHJvZmlsZXJEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICB2bS5kdW1wVHlw
ZVByb2ZpbGVyRGF0YSgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GaW5kVHlwZUZv
ckV4cHJlc3Npb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS50eXBlUHJvZmlsZXIoKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQodm0udHlwZVByb2ZpbGVyKCkpOwogICAgIHZtLnR5cGVQcm9maWxlckxvZygp
LT5wcm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoImpzYyBUZXN0aW5nIEFQSTogZnVuY3Rp
b25GaW5kVHlwZUZvckV4cHJlc3Npb24iKSk7CiAKICAgICBKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUg
PSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTI5MjEsMTQgKzI5NDYsMTQgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZpbgogICAgIFN0cmluZyBzb3VyY2VDb2RlVGV4dCA9
IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnZpZXcoKS50b1N0cmluZygpOwogICAgIHVuc2lnbmVkIG9m
ZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VDb2RlVGV4dC5maW5kKHN1YnN0cmlu
ZykgKyBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpKTsKICAgICAKLSAgICBTdHJp
bmcganNvblN0cmluZyA9IGV4ZWMtPnZtKCkudHlwZVByb2ZpbGVyKCktPnR5cGVJbmZvcm1hdGlv
bkZvckV4cHJlc3Npb25BdE9mZnNldChUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFs
LCBvZmZzZXQsIGV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIGV4ZWMtPnZtKCkpOworICAgIFN0cmlu
ZyBqc29uU3RyaW5nID0gdm0udHlwZVByb2ZpbGVyKCktPnR5cGVJbmZvcm1hdGlvbkZvckV4cHJl
c3Npb25BdE9mZnNldChUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsLCBvZmZzZXQs
IGV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIHZtKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25SZXR1cm5UeXBlRm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkudHlwZVBy
b2ZpbGVyKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLnR5cGVQcm9maWxlcigpKTsKICAgICB2
bS50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJqc2Mg
VGVzdGluZyBBUEk6IGZ1bmN0aW9uUmV0dXJuVHlwZUZvciIpKTsKIAogICAgIEpTVmFsdWUgZnVu
Y3Rpb25WYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtMjkzNiwxNCArMjk2MSwxNSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmV0CiAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBleGVjdXRhYmxlID0gKGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCBmdW5j
dGlvblZhbHVlLmFzQ2VsbCgpLT5nZXRPYmplY3QoKSkpLT5qc0V4ZWN1dGFibGUoKTsKIAogICAg
IHVuc2lnbmVkIG9mZnNldCA9IGV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgp
OwotICAgIFN0cmluZyBqc29uU3RyaW5nID0gZXhlYy0+dm0oKS50eXBlUHJvZmlsZXIoKS0+dHlw
ZUluZm9ybWF0aW9uRm9yRXhwcmVzc2lvbkF0T2Zmc2V0KFR5cGVQcm9maWxlclNlYXJjaERlc2Ny
aXB0b3JGdW5jdGlvblJldHVybiwgb2Zmc2V0LCBleGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBleGVj
LT52bSgpKTsKKyAgICBTdHJpbmcganNvblN0cmluZyA9IHZtLnR5cGVQcm9maWxlcigpLT50eXBl
SW5mb3JtYXRpb25Gb3JFeHByZXNzaW9uQXRPZmZzZXQoVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3Jp
cHRvckZ1bmN0aW9uUmV0dXJuLCBvZmZzZXQsIGV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIHZtKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKSk7
CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wQmFzaWNCbG9j
a0V4ZWN1dGlvblJhbmdlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
ZXhlYy0+dm0oKS5jb250cm9sRmxvd1Byb2ZpbGVyKCkpOwotICAgIGV4ZWMtPnZtKCkuY29udHJv
bEZsb3dQcm9maWxlcigpLT5kdW1wRGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQodm0uY29udHJvbEZsb3dQcm9maWxlcigpKTsKKyAgICB2bS5jb250
cm9sRmxvd1Byb2ZpbGVyKCktPmR1bXBEYXRhKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtMjk4MSw3ICszMDA3LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkJhcwogICAgIFJFTEVBU0VfQVNTRVJUKHNvdXJjZUNv
ZGVUZXh0LmNvbnRhaW5zKHN1YnN0cmluZykpOwogICAgIGludCBvZmZzZXQgPSBzb3VyY2VDb2Rl
VGV4dC5maW5kKHN1YnN0cmluZykgKyBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgp
OwogICAgIAotICAgIHNpemVfdCBleGVjdXRpb25Db3VudCA9IHZtLmNvbnRyb2xGbG93UHJvZmls
ZXIoKS0+YmFzaWNCbG9ja0V4ZWN1dGlvbkNvdW50QXRUZXh0T2Zmc2V0KG9mZnNldCwgZXhlY3V0
YWJsZS0+c291cmNlSUQoKSwgZXhlYy0+dm0oKSk7CisgICAgc2l6ZV90IGV4ZWN1dGlvbkNvdW50
ID0gdm0uY29udHJvbEZsb3dQcm9maWxlcigpLT5iYXNpY0Jsb2NrRXhlY3V0aW9uQ291bnRBdFRl
eHRPZmZzZXQob2Zmc2V0LCBleGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB2bSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGV4ZWN1dGlvbkNvdW50KSk7CiB9CiAKQEAgLTI5OTMs
NyArMzAxOSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FbmEKIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRyYWluTWljcm90YXNrcyhFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgZXhlYy0+dm0oKS5kcmFpbk1pY3JvdGFza3MoKTsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIHZtLmRyYWluTWljcm90YXNrcygpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTMwOTMsNyArMzEyMCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZW4KICAgICBKU0xvY2tI
b2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgSGVhcFNuYXBzaG90QnVpbGRlciBzbmFwc2hvdEJ1aWxkZXIoZXhlYy0+dm0oKS5l
bnN1cmVIZWFwUHJvZmlsZXIoKSk7CisgICAgSGVhcFNuYXBzaG90QnVpbGRlciBzbmFwc2hvdEJ1
aWxkZXIodm0uZW5zdXJlSGVhcFByb2ZpbGVyKCkpOwogICAgIHNuYXBzaG90QnVpbGRlci5idWls
ZFNuYXBzaG90KCk7CiAKICAgICBTdHJpbmcganNvblN0cmluZyA9IHNuYXBzaG90QnVpbGRlci5q
c29uKCk7CkBAIC0zMTEzLDcgKzMxNDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uRW5zCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgaWYgKEpT
T2JqZWN0KiBvYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIGV4ZWMtPmFyZ3Vt
ZW50KDApKSkKLSAgICAgICAgICAgIG9iamVjdC0+ZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZt
KCkpOworICAgICAgICAgICAgb2JqZWN0LT5lbnN1cmVBcnJheVN0b3JhZ2Uodm0pOwogICAgIH0K
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMzEyMSw3
ICszMTQ4LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVucwogI2lm
IEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25TdGFydFNhbXBsaW5nUHJvZmlsZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFNh
bXBsaW5nUHJvZmlsZXImIHNhbXBsaW5nUHJvZmlsZXIgPSBleGVjLT52bSgpLmVuc3VyZVNhbXBs
aW5nUHJvZmlsZXIoV1RGOjpTdG9wd2F0Y2g6OmNyZWF0ZSgpKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIFNhbXBsaW5nUHJvZmlsZXImIHNhbXBsaW5nUHJvZmlsZXIgPSB2bS5lbnN1
cmVTYW1wbGluZ1Byb2ZpbGVyKFdURjo6U3RvcHdhdGNoOjpjcmVhdGUoKSk7CiAgICAgc2FtcGxp
bmdQcm9maWxlci5ub3RpY2VDdXJyZW50VGhyZWFkQXNKU0NFeGVjdXRpb25UaHJlYWQoKTsKICAg
ICBzYW1wbGluZ1Byb2ZpbGVyLnN0YXJ0KCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKQEAgLTM0NzksNyArMzUwNyw3IEBAIHN0YXRpYyB2b2lkIHJ1bkludGVy
YWN0aXZlKEdsb2JhbE9iamVjdCoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IHNvdXJjZSA9IHNvdXJjZSArIGxpbmU7CiAgICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2UgKyAn
XG4nOwotICAgICAgICAgICAgY2hlY2tTeW50YXgoZ2xvYmFsT2JqZWN0LT52bSgpLCBtYWtlU291
cmNlKHNvdXJjZSwgc291cmNlT3JpZ2luKSwgZXJyb3IpOworICAgICAgICAgICAgY2hlY2tTeW50
YXgodm0sIG1ha2VTb3VyY2Uoc291cmNlLCBzb3VyY2VPcmlnaW4pLCBlcnJvcik7CiAgICAgICAg
ICAgICBpZiAoIWxpbmVbMF0pIHsKICAgICAgICAgICAgICAgICBmcmVlKGxpbmUpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMzUxOCw3ICszNTQ2LDcgQEAgc3RhdGljIHZvaWQgcnVuSW50
ZXJhY3RpdmUoR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgcmV0dXJu
VmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRh
KCkpOwogCiAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIGdsb2JhbE9i
amVjdC0+dm0oKS5kcmFpbk1pY3JvdGFza3MoKTsKKyAgICAgICAgdm0uZHJhaW5NaWNyb3Rhc2tz
KCk7CiAgICAgfQogICAgIHByaW50ZigiXG4iKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQmFzZS5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsOCBAQCBib29sIEpT
Q2hlY2tTY3JpcHRTeW50YXgoSlNDb250ZXh0UmVmIGN0CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTTG9ja0hvbGRl
ciBsb2NrZXIoZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKHZtKTsKIAogICAgIHN0YXJ0aW5nTGluZU51bWJlciA9IHN0ZDo6bWF4KDEsIHN0
YXJ0aW5nTGluZU51bWJlcik7CiAKQEAgLTExMCw3ICsxMTEsNyBAQCBib29sIEpTQ2hlY2tTY3Jp
cHRTeW50YXgoSlNDb250ZXh0UmVmIGN0CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAg
ICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgc3ludGF4RXhjZXB0aW9uKTsKICNpZiBFTkFC
TEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBFeGNl
cHRpb246OmNyZWF0ZShleGVjLT52bSgpLCBzeW50YXhFeGNlcHRpb24pOworICAgICAgICBFeGNl
cHRpb24qIGV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjo6Y3JlYXRlKHZtLCBzeW50YXhFeGNlcHRpb24p
OwogICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKICNlbmRpZgogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0xMzAsOSArMTMxLDEwIEBAIHZvaWQgSlNHYXJiYWdlQ29sbGVj
dChKU0NvbnRleHRSZWYgY3R4KQogICAgICAgICByZXR1cm47CiAKICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCi0gICAgZXhl
Yy0+dm0oKS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7CisgICAgdm0uaGVhcC5y
ZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOwogfQogCiB2b2lkIEpTUmVwb3J0RXh0cmFNZW1v
cnlDb3N0KEpTQ29udGV4dFJlZiBjdHgsIHNpemVfdCBzaXplKQpAQCAtMTQyLDkgKzE0NCwxMCBA
QCB2b2lkIEpTUmVwb3J0RXh0cmFNZW1vcnlDb3N0KEpTQ29udGV4dFJlCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTTG9ja0hv
bGRlciBsb2NrZXIoZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKHZtKTsKIAotICAgIGV4ZWMtPnZtKCkuaGVhcC5kZXByZWNhdGVkUmVwb3J0
RXh0cmFNZW1vcnkoc2l6ZSk7CisgICAgdm0uaGVhcC5kZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1v
cnkoc2l6ZSk7CiB9CiAKIGV4dGVybiAiQyIgSlNfRVhQT1JUIHZvaWQgSlNTeW5jaHJvbm91c0dh
cmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKEpTQ29udGV4dFJlZik7CkBAIC0xNTYsOCArMTU5LDkg
QEAgdm9pZCBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1ZwogICAgICAgICByZXR1
cm47CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVy
IGxvY2tlcihleGVjKTsKLSAgICBleGVjLT52bSgpLmhlYXAuY29sbGVjdE5vdyhTeW5jLCBDb2xs
ZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2tlcih2bSk7CisgICAgdm0uaGVhcC5jb2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rp
b25TY29wZTo6RnVsbCk7CiB9CiAKIHZvaWQgSlNTeW5jaHJvbm91c0VkZW5Db2xsZWN0Rm9yRGVi
dWdnaW5nKEpTQ29udGV4dFJlZiBjdHgpCkBAIC0xNjYsOCArMTcwLDkgQEAgdm9pZCBKU1N5bmNo
cm9ub3VzRWRlbkNvbGxlY3RGb3JEZWJ1Z2dpbgogICAgICAgICByZXR1cm47CiAKICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsK
LSAgICBleGVjLT52bSgpLmhlYXAuY29sbGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpFZGVuKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwor
ICAgIHZtLmhlYXAuY29sbGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpFZGVuKTsKIH0KIAogdm9p
ZCBKU0Rpc2FibGVHQ1RpbWVyKHZvaWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIEpTQ2FsbGJhY2tD
b25zdHJ1Y3RvciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQ2xhc3NSZWYgY2xhc3NSZWYsIEpTT2Jq
ZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxsYmFjayBjYWxsYmFjaykgCiAgICAgewotICAgICAgICBK
U0NhbGxiYWNrQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNDYWxsYmFja0NvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgSlNDYWxsYmFja0Nv
bnN0cnVjdG9yKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBjbGFzc1JlZiwgY2FsbGJhY2spOwor
ICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBKU0NhbGxiYWNrQ29uc3RydWN0
b3IqIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNDYWxsYmFja0Nv
bnN0cnVjdG9yPih2bS5oZWFwKSkgSlNDYWxsYmFja0NvbnN0cnVjdG9yKGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlLCBjbGFzc1JlZiwgY2FsbGJhY2spOwogICAgICAgICBjb25zdHJ1Y3Rvci0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LCBjbGFzc1JlZik7CiAgICAgICAgIHJldHVybiBjb25z
dHJ1Y3RvcjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw4ICsxMzgsOSBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgSlNDYWxsYmFja09iamVjdCogY3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTQ2xhc3NSZWYgY2xhc3NSZWYsIHZvaWQqIGRhdGEpCiAgICAgeworICAgICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbE9iamVjdCwgIXN0
cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkgfHwgc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSA9PSBn
bG9iYWxPYmplY3QpOwotICAgICAgICBKU0NhbGxiYWNrT2JqZWN0KiBjYWxsYmFja09iamVjdCA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQ2FsbGJhY2tPYmplY3Q+KCpleGVjLT5oZWFw
KCkpKSBKU0NhbGxiYWNrT2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSwgY2xhc3NSZWYsIGRhdGEpOwor
ICAgICAgICBKU0NhbGxiYWNrT2JqZWN0KiBjYWxsYmFja09iamVjdCA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTQ2FsbGJhY2tPYmplY3Q+KHZtLmhlYXApKSBKU0NhbGxiYWNrT2JqZWN0
KGV4ZWMsIHN0cnVjdHVyZSwgY2xhc3NSZWYsIGRhdGEpOwogICAgICAgICBjYWxsYmFja09iamVj
dC0+ZmluaXNoQ3JlYXRpb24oZXhlYyk7CiAgICAgICAgIHJldHVybiBjYWxsYmFja09iamVjdDsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQkocmV2aXNp
b24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0JKHdv
cmtpbmcgY29weSkKQEAgLTExNSw5ICsxMTUsMTEgQEAgLSAoSlNWYWx1ZSAqKWV2YWx1YXRlU2Ny
aXB0OihOU1N0cmluZyAqKQogCiAtICh2b2lkKXNldEV4Y2VwdGlvbjooSlNWYWx1ZSAqKXZhbHVl
CiB7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKHRvSlMobV9jb250ZXh0KSk7CisgICAg
SlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKG1fY29udGV4dCk7CisgICAgSlNDOjpWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgaWYg
KHZhbHVlKQotICAgICAgICBtX2V4Y2VwdGlvbi5zZXQodG9KUyhtX2NvbnRleHQpLT52bSgpLCB0
b0pTKEpTVmFsdWVUb09iamVjdChtX2NvbnRleHQsIHZhbHVlSW50ZXJuYWxWYWx1ZSh2YWx1ZSks
IDApKSk7CisgICAgICAgIG1fZXhjZXB0aW9uLnNldCh2bSwgdG9KUyhKU1ZhbHVlVG9PYmplY3Qo
bV9jb250ZXh0LCB2YWx1ZUludGVybmFsVmFsdWUodmFsdWUpLCAwKSkpOwogICAgIGVsc2UKICAg
ICAgICAgbV9leGNlcHRpb24uY2xlYXIoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDb250ZXh0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDkg
KzE4OSwxMCBAQCBKU09iamVjdFJlZiBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoSlNDCiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0g
ICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCi0gICAgcmV0dXJuIHRvUmVmKGpzQ2FzdDxK
U09iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bWV0aG9kVGFibGUoKS0+dG9U
aGlzKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYywgTm90U3RyaWN0TW9kZSkpKTsK
KyAgICByZXR1cm4gdG9SZWYoanNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5tZXRob2RUYWJsZSh2bSktPnRvVGhpcyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIGV4ZWMsIE5vdFN0cmljdE1vZGUpKSk7CiB9CiAKIEpTQ29udGV4dEdyb3VwUmVmIEpTQ29u
dGV4dEdldEdyb3VwKEpTQ29udGV4dFJlZiBjdHgpCkBAIC0zMDQsOSArMzA1LDEwIEBAIEpTU3Ry
aW5nUmVmIEpTQ29udGV4dENyZWF0ZUJhY2t0cmFjZShKU0MKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgQ2FsbEZyYW1lKiBmcmFt
ZSA9IGV4ZWMtPnZtKCkudG9wQ2FsbEZyYW1lOworICAgIENhbGxGcmFtZSogZnJhbWUgPSB2bS50
b3BDYWxsRnJhbWU7CiAKICAgICBBU1NFUlQobWF4U3RhY2tTaXplKTsKICAgICBCYWNrdHJhY2VG
dW5jdG9yIGZ1bmN0b3IoYnVpbGRlciwgbWF4U3RhY2tTaXplKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkocmV2aXNpb24gMjIxODAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjY0LDEwICsyNjQsMTEgQEAgLSAodm9pZClkaWRSZW1vdmVPd25lcjooaWQpb3duZXIK
IC0gKEpTVmFsdWUgKil2YWx1ZQogewogICAgIFdURjo6TG9ja2VyPEpTQzo6SlNMb2NrPiBsb2Nr
ZXIobV9sb2NrLmdldCgpKTsKLSAgICBpZiAoIW1fbG9jay0+dm0oKSkKKyAgICBKU0M6OlZNKiB2
bSA9IG1fbG9jay0+dm0oKTsKKyAgICBpZiAoIXZtKQogICAgICAgICByZXR1cm4gbmlsOwogCi0g
ICAgSlNDOjpKU0xvY2tIb2xkZXIgYXBpTG9ja2VyKG1fbG9jay0+dm0oKSk7CisgICAgSlNDOjpK
U0xvY2tIb2xkZXIgYXBpTG9ja2VyKHZtKTsKICAgICBpZiAoIW1fZ2xvYmFsT2JqZWN0KQogICAg
ICAgICByZXR1cm4gbmlsOwogICAgIGlmIChtX3dlYWtWYWx1ZS5pc0NsZWFyKCkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gMjIxODAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg5LDE0ICs4OSwxNSBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2UoSlNDb250
ZXh0UmVmIGN0CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCiAgICAgaWYgKCFq
c0NsYXNzKQogICAgICAgICByZXR1cm4gdG9SZWYoY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYykp
OwogCiAgICAgSlNDYWxsYmFja09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD4qIG9iamVjdCA9
IEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpjcmVhdGUoZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNh
bGxiYWNrT2JqZWN0U3RydWN0dXJlKCksIGpzQ2xhc3MsIGRhdGEpOwogICAgIGlmIChKU09iamVj
dCogcHJvdG90eXBlID0ganNDbGFzcy0+cHJvdG90eXBlKGV4ZWMpKQotICAgICAgICBvYmplY3Qt
PnNldFByb3RvdHlwZURpcmVjdChleGVjLT52bSgpLCBwcm90b3R5cGUpOworICAgICAgICBvYmpl
Y3QtPnNldFByb3RvdHlwZURpcmVjdCh2bSwgcHJvdG90eXBlKTsKIAogICAgIHJldHVybiB0b1Jl
ZihvYmplY3QpOwogfQpAQCAtMTA4LDggKzEwOSw5IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFr
ZUZ1bmN0aW9uV2l0aENhbGwKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOwotICAg
IHJldHVybiB0b1JlZihKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxBc0Z1bmN0aW9uLCBuYW1lID8gbmFtZS0+c3Ry
aW5nKCkgOiBBU0NJSUxpdGVyYWwoImFub255bW91cyIpKSk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICByZXR1cm4gdG9SZWYoSlND
YWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
Y2FsbEFzRnVuY3Rpb24sIG5hbWUgPyBuYW1lLT5zdHJpbmcoKSA6IEFTQ0lJTGl0ZXJhbCgiYW5v
bnltb3VzIikpKTsKIH0KIAogSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlQ29uc3RydWN0b3IoSlND
b250ZXh0UmVmIGN0eCwgSlNDbGFzc1JlZiBqc0NsYXNzLCBKU09iamVjdENhbGxBc0NvbnN0cnVj
dG9yQ2FsbGJhY2sgY2FsbEFzQ29uc3RydWN0b3IpCkBAIC0xMTksMTQgKzEyMSwxNSBAQCBKU09i
amVjdFJlZiBKU09iamVjdE1ha2VDb25zdHJ1Y3RvcihKU0NvCiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVy
IGxvY2tlcihleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrZXIodm0pOwogCiAgICAgSlNWYWx1ZSBqc1Byb3RvdHlwZSA9IGpzQ2xhc3MgPyBqc0Ns
YXNzLT5wcm90b3R5cGUoZXhlYykgOiAwOwogICAgIGlmICghanNQcm90b3R5cGUpCiAgICAgICAg
IGpzUHJvdG90eXBlID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5
cGUoKTsKIAogICAgIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBKU0NhbGxi
YWNrQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVy
ZSgpLCBqc0NsYXNzLCBjYWxsQXNDb25zdHJ1Y3Rvcik7Ci0gICAgY29uc3RydWN0b3ItPnB1dERp
cmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBqc1Byb3Rv
dHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIGNvbnN0cnVjdG9y
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwganNQcm90b3R5cGUs
IERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICByZXR1cm4gdG9SZWYoY29u
c3RydWN0b3IpOwogfQogCkBAIC0xMzcsMTAgKzE0MCwxMSBAQCBKU09iamVjdFJlZiBKU09iamVj
dE1ha2VGdW5jdGlvbihKU0NvbnRlCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwog
CiAgICAgc3RhcnRpbmdMaW5lTnVtYmVyID0gc3RkOjptYXgoMSwgc3RhcnRpbmdMaW5lTnVtYmVy
KTsKLSAgICBJZGVudGlmaWVyIG5hbWVJRCA9IG5hbWUgPyBuYW1lLT5pZGVudGlmaWVyKCZleGVj
LT52bSgpKSA6IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImFub255bW91cyIpOworICAg
IElkZW50aWZpZXIgbmFtZUlEID0gbmFtZSA/IG5hbWUtPmlkZW50aWZpZXIoJnZtKSA6IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImFub255bW91cyIpOwogICAgIAogICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRl
ckNvdW50OyBpKyspCkBAIC0yNTksMjAgKzI2MywyMCBAQCB2b2lkIEpTT2JqZWN0U2V0UHJvdG90
eXBlKEpTQ29udGV4dFJlZiBjCiAgICAgfQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4
KTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhl
Yyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAKICAgICBKU09iamVjdCoganNPYmpl
Y3QgPSB0b0pTKG9iamVjdCk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1
ZSk7CiAKICAgICBpZiAoSlNQcm94eSogcHJveHkgPSBqc0R5bmFtaWNDYXN0PEpTUHJveHkqPih2
bSwganNPYmplY3QpKSB7CiAgICAgICAgIGlmIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0ganNEeW5hbWljQ2FzdDxKU0dsb2JhbE9iamVjdCo+KHZtLCBwcm94eS0+dGFyZ2V0KCkpKSB7
Ci0gICAgICAgICAgICBnbG9iYWxPYmplY3QtPnJlc2V0UHJvdG90eXBlKGV4ZWMtPnZtKCksIGpz
VmFsdWUuaXNPYmplY3QoKSA/IGpzVmFsdWUgOiBqc051bGwoKSk7CisgICAgICAgICAgICBnbG9i
YWxPYmplY3QtPnJlc2V0UHJvdG90eXBlKHZtLCBqc1ZhbHVlLmlzT2JqZWN0KCkgPyBqc1ZhbHVl
IDoganNOdWxsKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8v
IFNvbWVkYXkgd2UgbWlnaHQgdXNlIHByb3hpZXMgZm9yIHNvbWV0aGluZyBvdGhlciB0aGFuIEpT
R2xvYmFsT2JqZWN0cywgYnV0IHRvZGF5IGlzIG5vdCB0aGF0IGRheS4KICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0gICAganNPYmplY3QtPnNldFByb3RvdHlw
ZShleGVjLT52bSgpLCBleGVjLCBqc1ZhbHVlLmlzT2JqZWN0KCkgPyBqc1ZhbHVlIDoganNOdWxs
KCkpOworICAgIGpzT2JqZWN0LT5zZXRQcm90b3R5cGUodm0sIGV4ZWMsIGpzVmFsdWUuaXNPYmpl
Y3QoKSA/IGpzVmFsdWUgOiBqc051bGwoKSk7CiB9CiAKIGJvb2wgSlNPYmplY3RIYXNQcm9wZXJ0
eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3Bl
cnR5TmFtZSkKQEAgLTI4MiwxMSArMjg2LDEyIEBAIGJvb2wgSlNPYmplY3RIYXNQcm9wZXJ0eShK
U0NvbnRleHRSZWYgY3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCiAg
ICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogICAgIAotICAgIHJldHVybiBq
c09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVj
LT52bSgpKSk7CisgICAgcmV0dXJuIGpzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0
eU5hbWUtPmlkZW50aWZpZXIoJnZtKSk7CiB9CiAKIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm9w
ZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAtMjk2LDExICszMDEsMTIgQEAg
SlNWYWx1ZVJlZiBKU09iamVjdEdldFByb3BlcnR5KEpTQ29udGV4dAogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTTG9ja0hv
bGRlciBsb2NrZXIoZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKHZtKTsKIAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0
KTsKIAotICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzT2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlO
YW1lLT5pZGVudGlmaWVyKCZleGVjLT52bSgpKSk7CisgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNP
YmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJnZtKSk7CiAgICAgaGFu
ZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhlYywgZXhjZXB0aW9uKTsKICAgICByZXR1cm4gdG9SZWYo
ZXhlYywganNWYWx1ZSk7CiB9CkBAIC0zMTcsMTcgKzMyMywxNyBAQCB2b2lkIEpTT2JqZWN0U2V0
UHJvcGVydHkoSlNDb250ZXh0UmVmIGN0CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOwogCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwotICAg
IElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkpKTsK
KyAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZ2bSkpOwogICAg
IEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywgdmFsdWUpOwogCiAgICAgYm9vbCBkb2VzTm90
SGF2ZVByb3BlcnR5ID0gYXR0cmlidXRlcyAmJiAhanNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMs
IG5hbWUpOwogICAgIGlmIChMSUtFTFkoIXNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBp
ZiAoZG9lc05vdEhhdmVQcm9wZXJ0eSkgewogICAgICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9y
IGRlc2MoanNWYWx1ZSwgYXR0cmlidXRlcyk7Ci0gICAgICAgICAgICBqc09iamVjdC0+bWV0aG9k
VGFibGUoKS0+ZGVmaW5lT3duUHJvcGVydHkoanNPYmplY3QsIGV4ZWMsIG5hbWUsIGRlc2MsIGZh
bHNlKTsKKyAgICAgICAgICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blBy
b3BlcnR5KGpzT2JqZWN0LCBleGVjLCBuYW1lLCBkZXNjLCBmYWxzZSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChqc09iamVjdCk7Ci0gICAgICAg
ICAgICBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KGpzT2JqZWN0LCBleGVjLCBuYW1lLCBq
c1ZhbHVlLCBzbG90KTsKKyAgICAgICAgICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1
dChqc09iamVjdCwgZXhlYywgbmFtZSwganNWYWx1ZSwgc2xvdCk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhlYywgZXhjZXB0aW9uKTsKQEAgLTM1Nywx
MiArMzYzLDEzIEBAIHZvaWQgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoSlNDb250ZXgKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0g
ICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0g
dG9KUyhvYmplY3QpOwogICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywgdmFsdWUpOwog
ICAgIAotICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KGpzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eUluZGV4LCBqc1ZhbHVlLCBmYWxzZSk7CisgICAganNPYmplY3QtPm1ldGhv
ZFRhYmxlKHZtKS0+cHV0QnlJbmRleChqc09iamVjdCwgZXhlYywgcHJvcGVydHlJbmRleCwganNW
YWx1ZSwgZmFsc2UpOwogICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlv
bik7CiB9CiAKQEAgLTM3MywxMSArMzgwLDEyIEBAIGJvb2wgSlNPYmplY3REZWxldGVQcm9wZXJ0
eShKU0NvbnRleHRSZWYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCiAg
ICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCi0gICAgYm9vbCByZXN1bHQg
PSBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoanNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+dm0oKSkpOworICAgIGJvb2wgcmVzdWx0
ID0ganNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkoanNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmdm0pKTsKICAgICBoYW5kbGVFeGNlcHRpb25J
Zk5lZWRlZChleGVjLCBleGNlcHRpb24pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC00NTUs
MTAgKzQ2MywxMCBAQCBKU1ZhbHVlUmVmIEpTT2JqZWN0R2V0UHJpdmF0ZVByb3BlcnR5KEpTCiB7
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
a2VyKHZtKTsKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAgICAgSlNW
YWx1ZSByZXN1bHQ7Ci0gICAgSWRlbnRpZmllciBuYW1lKHByb3BlcnR5TmFtZS0+aWRlbnRpZmll
cigmZXhlYy0+dm0oKSkpOworICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50
aWZpZXIoJnZtKSk7CiAKIAogICAgIC8vIEdldCB3cmFwcGVkIG9iamVjdCBpZiBwcm94aWVkCkBA
IC00ODAsMjYgKzQ4OCwyNiBAQCBib29sIEpTT2JqZWN0U2V0UHJpdmF0ZVByb3BlcnR5KEpTQ29u
dGV4CiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKHZtKTsKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWUgPyB0b0pTKGV4ZWMsIHZhbHVlKSA6IEpTVmFsdWUo
KTsKLSAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT52
bSgpKSk7CisgICAgSWRlbnRpZmllciBuYW1lKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmdm0p
KTsKIAogICAgIC8vIEdldCB3cmFwcGVkIG9iamVjdCBpZiBwcm94aWVkCiAgICAgaWYgKGpzT2Jq
ZWN0LT5pbmhlcml0cyh2bSwgSlNQcm94eTo6aW5mbygpKSkKICAgICAgICAganNPYmplY3QgPSBq
c0Nhc3Q8SlNQcm94eSo+KGpzT2JqZWN0KS0+dGFyZ2V0KCk7CiAKICAgICBpZiAoanNPYmplY3Qt
PmluaGVyaXRzKHZtLCBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6aW5mbygpKSkg
ewotICAgICAgICBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4qPihqc09i
amVjdCktPnNldFByaXZhdGVQcm9wZXJ0eShleGVjLT52bSgpLCBuYW1lLCBqc1ZhbHVlKTsKKyAg
ICAgICAganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+Kj4oanNPYmplY3Qp
LT5zZXRQcml2YXRlUHJvcGVydHkodm0sIG5hbWUsIGpzVmFsdWUpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgaWYgKGpzT2JqZWN0LT5pbmhlcml0cyh2bSwgSlNDYWxsYmFja09i
amVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD46OmluZm8oKSkpIHsKLSAgICAgICAganNDYXN0PEpT
Q2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+Kj4oanNPYmplY3QpLT5zZXRQcml2
YXRlUHJvcGVydHkoZXhlYy0+dm0oKSwgbmFtZSwganNWYWx1ZSk7CisgICAgICAgIGpzQ2FzdDxK
U0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pio+KGpzT2JqZWN0KS0+c2V0UHJp
dmF0ZVByb3BlcnR5KHZtLCBuYW1lLCBqc1ZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgaWYgKGpzT2JqZWN0LT5pbmhlcml0
cyh2bSwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjppbmZvKCkpKSB7Ci0g
ICAgICAgIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD4qPihqc09i
amVjdCktPnNldFByaXZhdGVQcm9wZXJ0eShleGVjLT52bSgpLCBuYW1lLCBqc1ZhbHVlKTsKKyAg
ICAgICAganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pio+KGpzT2Jq
ZWN0KS0+c2V0UHJpdmF0ZVByb3BlcnR5KHZtLCBuYW1lLCBqc1ZhbHVlKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCkBAIC01MTAsOSArNTE4LDkgQEAgYm9vbCBKU09iamVj
dERlbGV0ZVByaXZhdGVQcm9wZXJ0eShKU0NvbgogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRv
SlMoY3R4KTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2Nr
ZXIoZXhlYyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgSlNPYmplY3QqIGpz
T2JqZWN0ID0gdG9KUyhvYmplY3QpOwotICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUt
PmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkpKTsKKyAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlO
YW1lLT5pZGVudGlmaWVyKCZ2bSkpOwogCiAgICAgLy8gR2V0IHdyYXBwZWQgb2JqZWN0IGlmIHBy
b3hpZWQKICAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKHZtLCBKU1Byb3h5OjppbmZvKCkpKQpA
QCAtNTM5LDE2ICs1NDcsMTkgQEAgYm9vbCBKU09iamVjdElzRnVuY3Rpb24oSlNDb250ZXh0UmVm
IGN0eAogewogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSlNM
b2NrSG9sZGVyIGxvY2tlcih0b0pTKGN0eCkpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMo
Y3R4KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIo
dm0pOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIEpTQ2VsbCogY2VsbCA9IHRvSlMob2Jq
ZWN0KTsKLSAgICByZXR1cm4gY2VsbC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoY2VsbCwg
Y2FsbERhdGEpICE9IENhbGxUeXBlOjpOb25lOworICAgIHJldHVybiBjZWxsLT5tZXRob2RUYWJs
ZSh2bSktPmdldENhbGxEYXRhKGNlbGwsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZTo6Tm9uZTsKIH0K
IAogSlNWYWx1ZVJlZiBKU09iamVjdENhbGxBc0Z1bmN0aW9uKEpTQ29udGV4dFJlZiBjdHgsIEpT
T2JqZWN0UmVmIG9iamVjdCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVy
IGxvY2tlcihleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrZXIodm0pOwogCiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybiAwOwpAQCAt
NTY0LDcgKzU3NSw3IEBAIEpTVmFsdWVSZWYgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihKU0NvbnQK
ICAgICAgICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVjLCBhcmd1bWVudHNbaV0pKTsKIAogICAg
IENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0ganNPYmplY3QtPm1l
dGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGpzT2JqZWN0LCBjYWxsRGF0YSk7CisgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBqc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShqc09i
amVjdCwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKQEAgLTU4Niw3ICs1OTcsOCBAQCBib29sIEpTT2JqZWN0SXNDb25z
dHJ1Y3RvcihKU0NvbnRleHRSZWYsCiBKU09iamVjdFJlZiBKU09iamVjdENhbGxBc0NvbnN0cnVj
dG9yKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVy
IGxvY2tlcihleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrZXIodm0pOwogCiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybiAwOwpAQCAt
NTk0LDcgKzYwNiw3IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoSlMK
ICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAKICAgICBDb25zdHJ1Y3RE
YXRhIGNvbnN0cnVjdERhdGE7Ci0gICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0ganNP
YmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENvbnN0cnVjdERhdGEoanNPYmplY3QsIGNvbnN0cnVj
dERhdGEpOworICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGpzT2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPmdldENvbnN0cnVjdERhdGEoanNPYmplY3QsIGNvbnN0cnVjdERhdGEpOwog
ICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGU6Ok5vbmUpCiAgICAgICAgIHJl
dHVybiAwOwogCkBAIC02MzYsNyArNjQ4LDcgQEAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBKU09i
amVjdENvcHlQcm9wZQogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKICAg
ICBKU1Byb3BlcnR5TmFtZUFycmF5UmVmIHByb3BlcnR5TmFtZXMgPSBuZXcgT3BhcXVlSlNQcm9w
ZXJ0eU5hbWVBcnJheSh2bSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgYXJyYXkodm0sIFByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3MpOwotICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQ
cm9wZXJ0eU5hbWVzKGpzT2JqZWN0LCBleGVjLCBhcnJheSwgRW51bWVyYXRpb25Nb2RlKCkpOwor
ICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSgqdm0pLT5nZXRQcm9wZXJ0eU5hbWVzKGpzT2JqZWN0
LCBleGVjLCBhcnJheSwgRW51bWVyYXRpb25Nb2RlKCkpOwogCiAgICAgc2l6ZV90IHNpemUgPSBh
cnJheS5zaXplKCk7CiAgICAgcHJvcGVydHlOYW1lcy0+YXJyYXkucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShzaXplKTsKQEAgLTY3Myw4ICs2ODUsOSBAQCBKU1N0cmluZ1JlZiBKU1Byb3BlcnR5TmFt
ZUFycmF5R2V0TmFtZUF0CiB2b2lkIEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGROYW1lKEpT
UHJvcGVydHlOYW1lQWNjdW11bGF0b3JSZWYgYXJyYXksIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFt
ZSkKIHsKICAgICBQcm9wZXJ0eU5hbWVBcnJheSogcHJvcGVydHlOYW1lcyA9IHRvSlMoYXJyYXkp
OwotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIocHJvcGVydHlOYW1lcy0+dm0oKSk7Ci0gICAgcHJv
cGVydHlOYW1lcy0+YWRkKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcihwcm9wZXJ0eU5hbWVzLT52
bSgpKSk7CisgICAgVk0qIHZtID0gcHJvcGVydHlOYW1lcy0+dm0oKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKHZtKTsKKyAgICBwcm9wZXJ0eU5hbWVzLT5hZGQocHJvcGVydHlOYW1lLT5pZGVu
dGlmaWVyKHZtKSk7CiB9CiAKIEpTT2JqZWN0UmVmIEpTT2JqZWN0R2V0UHJveHlUYXJnZXQoSlNP
YmplY3RSZWYgb2JqZWN0UmVmKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Nj
cmlwdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Nj
cmlwdFJlZi5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNTY3JpcHRSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsOCArMTQ1LDkgQEAgdm9p
ZCBKU1NjcmlwdFJlbGVhc2UoSlNTY3JpcHRSZWYgc2NyaXB0KQogSlNWYWx1ZVJlZiBKU1Njcmlw
dEV2YWx1YXRlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1NjcmlwdFJlZiBzY3JpcHQsIEpTVmFs
dWVSZWYgdGhpc1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgRXhlY1N0
YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMp
OwotICAgIGlmICgmc2NyaXB0LT52bSgpICE9ICZleGVjLT52bSgpKSB7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICBpZiAoJnNjcmlw
dC0+dm0oKSAhPSAmdm0pIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1R5cGVkQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNUeXBlZEFycmF5LmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1R5cGVkQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQx
LDcgQEAgSlNUeXBlZEFycmF5VHlwZSBKU1ZhbHVlR2V0VHlwZWRBcnJheVR5cAogCiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
SlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsK
IAogICAgIEpTVmFsdWUgdmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlUmVmKTsKICAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkpCkBAIC0xOTUsNyArMTk1LDcgQEAgSlNPYmplY3RSZWYgSlNPYmplY3RN
YWtlVHlwZWRBcnJheVdpdGhBcgogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAKICAgICBpZiAoYXJyYXlUeXBlID09IGtK
U1R5cGVkQXJyYXlUeXBlTm9uZSB8fCBhcnJheVR5cGUgPT0ga0pTVHlwZWRBcnJheVR5cGVBcnJh
eUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMTksNyArMjE5LDcgQEAgSlNP
YmplY3RSZWYgSlNPYmplY3RNYWtlVHlwZWRBcnJheVdpdGhBcgogewogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IHRvSlMoY3R4KTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTTG9ja0hv
bGRlciBsb2NrZXIoZXhlYyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAKICAgICBp
ZiAoYXJyYXlUeXBlID09IGtKU1R5cGVkQXJyYXlUeXBlTm9uZSB8fCBhcnJheVR5cGUgPT0ga0pT
VHlwZWRBcnJheVR5cGVBcnJheUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0y
NDAsNyArMjQwLDcgQEAgdm9pZCogSlNPYmplY3RHZXRUeXBlZEFycmF5Qnl0ZXNQdHIoSlNDbwog
ewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2tlcih2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlMob2JqZWN0UmVmKTsKIAogICAg
IGlmIChKU0FycmF5QnVmZmVyVmlldyogdHlwZWRBcnJheSA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJh
eUJ1ZmZlclZpZXcqPih2bSwgb2JqZWN0KSkgewpAQCAtMjkxLDExICsyOTEsMTEgQEAgSlNPYmpl
Y3RSZWYgSlNPYmplY3RHZXRUeXBlZEFycmF5QnVmZmVyKAogewogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHRvSlMoY3R4KTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTTG9ja0hvbGRl
ciBsb2NrZXIoZXhlYyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IHRvSlMob2JqZWN0UmVmKTsKIAogICAgIGlmIChKU0FycmF5QnVmZmVyVmll
dyogdHlwZWRBcnJheSA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPih2bSwgb2Jq
ZWN0KSkKLSAgICAgICAgcmV0dXJuIHRvUmVmKGV4ZWMtPnZtKCkubV90eXBlZEFycmF5Q29udHJv
bGxlci0+dG9KUyhleGVjLCB0eXBlZEFycmF5LT5nbG9iYWxPYmplY3QoKSwgdHlwZWRBcnJheS0+
cG9zc2libHlTaGFyZWRCdWZmZXIoKSkpOworICAgICAgICByZXR1cm4gdG9SZWYodm0ubV90eXBl
ZEFycmF5Q29udHJvbGxlci0+dG9KUyhleGVjLCB0eXBlZEFycmF5LT5nbG9iYWxPYmplY3QoKSwg
dHlwZWRBcnJheS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKSkpOwogCiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CkBAIC0zMDMsMTQgKzMwMywxNSBAQCBKU09iamVjdFJlZiBKU09iamVjdEdldFR5cGVk
QXJyYXlCdWZmZXIoCiBKU09iamVjdFJlZiBKU09iamVjdE1ha2VBcnJheUJ1ZmZlcldpdGhCeXRl
c05vQ29weShKU0NvbnRleHRSZWYgY3R4LCB2b2lkKiBieXRlcywgc2l6ZV90IGJ5dGVMZW5ndGgs
IEpTVHlwZWRBcnJheUJ5dGVzRGVhbGxvY2F0b3IgYnl0ZXNEZWFsbG9jYXRvciwgdm9pZCogZGVh
bGxvY2F0b3JDb250ZXh0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgRXhlY1N0YXRl
KiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKIAogICAg
IGF1dG8gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUZyb21CeXRlcyhieXRlcywgYnl0ZUxl
bmd0aCwgWz1dKHZvaWQqIHApIHsKICAgICAgICAgaWYgKGJ5dGVzRGVhbGxvY2F0b3IpCiAgICAg
ICAgICAgICBieXRlc0RlYWxsb2NhdG9yKHAsIGRlYWxsb2NhdG9yQ29udGV4dCk7CiAgICAgfSk7
CiAKLSAgICBKU0FycmF5QnVmZmVyKiBqc0J1ZmZlciA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShl
eGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0
dXJlKEFycmF5QnVmZmVyU2hhcmluZ01vZGU6OkRlZmF1bHQpLCBXVEZNb3ZlKGJ1ZmZlcikpOwor
ICAgIEpTQXJyYXlCdWZmZXIqIGpzQnVmZmVyID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHZtLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0dXJlKEFycmF5QnVm
ZmVyU2hhcmluZ01vZGU6OkRlZmF1bHQpLCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIGlmIChoYW5k
bGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pID09IEV4Y2VwdGlvblN0YXR1czo6
RGlkVGhyb3cpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMjEsNyArMzIyLDcgQEAg
dm9pZCogSlNPYmplY3RHZXRBcnJheUJ1ZmZlckJ5dGVzUHRyKEpTQwogewogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IHRvSlMoY3R4KTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTTG9j
a0hvbGRlciBsb2NrZXIoZXhlYyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAg
SlNPYmplY3QqIG9iamVjdCA9IHRvSlMob2JqZWN0UmVmKTsKIAogICAgIGlmIChKU0FycmF5QnVm
ZmVyKiBqc0J1ZmZlciA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KHZtLCBvYmplY3Qp
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV2Vha09iamVjdE1hcFJlZlBy
aXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXZWFr
T2JqZWN0TWFwUmVmUHJpdmF0ZS5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDggKzQ0LDkgQEAgZXh0ZXJuICJDIiB7CiBKU1dlYWtPYmplY3RNYXBSZWYgSlNX
ZWFrT2JqZWN0TWFwQ3JlYXRlKEpTQ29udGV4dFJlZiBjb250ZXh0LCB2b2lkKiBwcml2YXRlRGF0
YSwgSlNXZWFrTWFwRGVzdHJveWVkQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgRXhlY1N0YXRl
KiBleGVjID0gdG9KUyhjb250ZXh0KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOwot
ICAgIFJlZlB0cjxPcGFxdWVKU1dlYWtPYmplY3RNYXA+IG1hcCA9IE9wYXF1ZUpTV2Vha09iamVj
dE1hcDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHByaXZhdGVEYXRhLCBjYWxsYmFjayk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICBSZWZQ
dHI8T3BhcXVlSlNXZWFrT2JqZWN0TWFwPiBtYXAgPSBPcGFxdWVKU1dlYWtPYmplY3RNYXA6OmNy
ZWF0ZSh2bSwgcHJpdmF0ZURhdGEsIGNhbGxiYWNrKTsKICAgICBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPnJlZ2lzdGVyV2Vha01hcChtYXAuZ2V0KCkpOwogICAgIHJldHVybiBtYXAuZ2V0
KCk7CiB9CkBAIC01NywxMyArNTgsMTQgQEAgdm9pZCBKU1dlYWtPYmplY3RNYXBTZXQoSlNDb250
ZXh0UmVmIGN0eAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHRvSlMoY3R4KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgSlNPYmplY3Qq
IG9iaiA9IHRvSlMob2JqZWN0KTsKICAgICBpZiAoIW9iaikKICAgICAgICAgcmV0dXJuOwotICAg
IEFTU0VSVChvYmotPmluaGVyaXRzKGV4ZWMtPnZtKCksIEpTUHJveHk6OmluZm8oKSkKLSAgICAg
ICAgfHwgb2JqLT5pbmhlcml0cyhleGVjLT52bSgpLCBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFs
T2JqZWN0Pjo6aW5mbygpKQotICAgICAgICB8fCBvYmotPmluaGVyaXRzKGV4ZWMtPnZtKCksIEpT
Q2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjppbmZvKCkpKTsKKyAgICBBU1NF
UlQob2JqLT5pbmhlcml0cyh2bSwgSlNQcm94eTo6aW5mbygpKQorICAgICAgICB8fCBvYmotPmlu
aGVyaXRzKHZtLCBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6aW5mbygpKQorICAg
ICAgICB8fCBvYmotPmluaGVyaXRzKHZtLCBKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0Pjo6aW5mbygpKSk7CiAgICAgbWFwLT5tYXAoKS5zZXQoa2V5LCBvYmopOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQkocmV2aXNpb24g
MjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEwOSwyMyArMTA5LDI1IEBAIGRvbmU6CiBzdGF0aWMgYm9vbCBjb25z
dHJ1Y3Rvckhhc0luc3RhbmNlKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGNvbnN0cnVj
dG9yUmVmLCBKU1ZhbHVlUmVmIHBvc3NpYmxlSW5zdGFuY2UsIEpTVmFsdWVSZWYqKQogewogICAg
IEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2tlcihleGVjKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKIAogICAgIEpTQzo6SlNPYmplY3QqIGNvbnN0cnVjdG9y
ID0gdG9KUyhjb25zdHJ1Y3RvclJlZik7CiAgICAgSlNDOjpKU1ZhbHVlIGluc3RhbmNlID0gdG9K
UyhleGVjLCBwb3NzaWJsZUluc3RhbmNlKTsKLSAgICByZXR1cm4gSlNDOjpKU09iamVjdDo6ZGVm
YXVsdEhhc0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBjb25zdHJ1Y3Rvci0+Z2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpKTsKKyAgICByZXR1cm4gSlNDOjpKU09iamVj
dDo6ZGVmYXVsdEhhc0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBjb25zdHJ1Y3Rvci0+Z2V0KGV4
ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSkpOwogfQogCiBzdGF0aWMgSlNDOjpKU09i
amVjdCogbWFrZVdyYXBwZXIoSlNDb250ZXh0UmVmIGN0eCwgSlNDbGFzc1JlZiBqc0NsYXNzLCBp
ZCB3cmFwcGVkT2JqZWN0KQogewogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgp
OwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBKU0M6OlZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKIAogICAgIEFT
U0VSVChqc0NsYXNzKTsKICAgICBKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8SlNDOjpKU0FQSVdyYXBw
ZXJPYmplY3Q+KiBvYmplY3QgPSBKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8SlNDOjpKU0FQSVdyYXBw
ZXJPYmplY3Q+OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamNXcmFwcGVyT2JqZWN0U3RydWN0dXJlKCksIGpz
Q2xhc3MsIDApOwogICAgIG9iamVjdC0+c2V0V3JhcHBlZE9iamVjdCh3cmFwcGVkT2JqZWN0KTsK
ICAgICBpZiAoSlNDOjpKU09iamVjdCogcHJvdG90eXBlID0ganNDbGFzcy0+cHJvdG90eXBlKGV4
ZWMpKQotICAgICAgICBvYmplY3QtPnNldFByb3RvdHlwZURpcmVjdChleGVjLT52bSgpLCBwcm90
b3R5cGUpOworICAgICAgICBvYmplY3QtPnNldFByb3RvdHlwZURpcmVjdCh2bSwgcHJvdG90eXBl
KTsKIAogICAgIHJldHVybiBvYmplY3Q7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHJldmlzaW9uIDIyMTgwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHdvcmtp
bmcgY29weSkKQEAgLTY3NSwxMCArNjc1LDExIEBAIHN0YXRpYyBKU09iamVjdFJlZiBvYmpDQ2Fs
bGJhY2tGdW5jdGlvbkYKICAgICB9CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMo
W2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9j
a2VyKGV4ZWMpOworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9j
a0hvbGRlciBsb2NrZXIodm0pOwogICAgIGF1dG8gaW1wbCA9IHN0ZDo6bWFrZV91bmlxdWU8SlND
OjpPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw+KGludm9jYXRpb24sIHR5cGUsIGluc3RhbmNlQ2xh
c3MsIFdURk1vdmUoYXJndW1lbnRzKSwgV1RGTW92ZShyZXN1bHQpKTsKICAgICBjb25zdCBTdHJp
bmcmIG5hbWUgPSBpbXBsLT5uYW1lKCk7Ci0gICAgcmV0dXJuIHRvUmVmKEpTQzo6T2JqQ0NhbGxi
YWNrRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIG5hbWUsIFdURk1vdmUoaW1wbCkpKTsKKyAgICByZXR1cm4gdG9SZWYoSlNDOjpPYmpDQ2Fs
bGJhY2tGdW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG5h
bWUsIFdURk1vdmUoaW1wbCkpKTsKIH0KIAogSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rp
b25Gb3JJbml0KEpTQ29udGV4dCAqY29udGV4dCwgQ2xhc3MgY2xzLCBQcm90b2NvbCAqcHJvdG9j
b2wsIFNFTCBzZWwsIGNvbnN0IGNoYXIqIHR5cGVzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNTksNyArMzU5LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
QwogQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU2Ny
aXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5r
ZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUsIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4m
JiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExp
bmVDb2x1bW5PZmZzZXQpCiAgICAgOiBKU0NlbGwoKnZtLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2ds
b2JhbE9iamVjdChzY29wZS0+Z2xvYmFsT2JqZWN0KCktPnZtKCksIHRoaXMsIHNjb3BlLT5nbG9i
YWxPYmplY3QoKSkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0KCp2bSwgdGhpcywgc2NvcGUtPmdsb2Jh
bE9iamVjdCgpKQogICAgICwgbV9udW1DYWxsZWVMb2NhbHModW5saW5rZWRDb2RlQmxvY2stPm1f
bnVtQ2FsbGVlTG9jYWxzKQogICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251
bVZhcnMpCiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQpAQCAtMzcyLDEyICsz
NzIsMTIgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwg
bV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkpCiAgICAg
LCBtX2lzU3RyaWN0TW9kZSh1bmxpbmtlZENvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCiAgICAg
LCBtX2NvZGVUeXBlKHVubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpKQotICAgICwgbV91bmxp
bmtlZENvZGUobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHVubGlua2VkQ29kZUJsb2NrKQor
ICAgICwgbV91bmxpbmtlZENvZGUoKnZtLCB0aGlzLCB1bmxpbmtlZENvZGVCbG9jaykKICAgICAs
IG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCiAgICAgLCBtX3N0ZXBwaW5nTW9kZShTdGVw
cGluZ01vZGVEaXNhYmxlZCkKICAgICAsIG1fbnVtQnJlYWtwb2ludHMoMCkKLSAgICAsIG1fb3du
ZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlzLCBvd25lckV4ZWN1dGFibGUp
Ci0gICAgLCBtX3ZtKHVubGlua2VkQ29kZUJsb2NrLT52bSgpKQorICAgICwgbV9vd25lckV4ZWN1
dGFibGUoKnZtLCB0aGlzLCBvd25lckV4ZWN1dGFibGUpCisgICAgLCBtX3ZtKHZtKQogICAgICwg
bV90aGlzUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPnRoaXNSZWdpc3RlcigpKQogICAgICwg
bV9zY29wZVJlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkpCiAgICAg
LCBtX3NvdXJjZShXVEZNb3ZlKHNvdXJjZVByb3ZpZGVyKSkKQEAgLTE5OTMsNyArMTk5Myw3IEBA
IHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGkKIAogICAgIC8vIFRoaXMg
YWNjb21wbGlzaGVzICgyKS4KICAgICBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aW5zdGFsbENv
ZGUoCi0gICAgICAgIG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBhbHRlcm5hdGl2ZSgpLCBjb2RlVHlw
ZSgpLCBzcGVjaWFsaXphdGlvbktpbmQoKSk7CisgICAgICAgICptX3ZtLCBhbHRlcm5hdGl2ZSgp
LCBjb2RlVHlwZSgpLCBzcGVjaWFsaXphdGlvbktpbmQoKSk7CiAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIyMTgwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtNTM4LDcgKzUzOCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIHJl
c3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwogICAgICAgICBtX2NvbnN0YW50UmVn
aXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7Ci0gICAgICAgIG1fY29uc3Rh
bnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgdik7Cisg
ICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldCgqbV92bSwgdGhpcywgdik7CiAg
ICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CkBAIC05NTIsNyArOTUyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlcGxhY2VDb25zdGFudChp
bnQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNDb25zdGFu
dFJlZ2lzdGVySW5kZXgoaW5kZXgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXggLSBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7Ci0g
ICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleF0uc2V0KG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIG1f
Y29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uc2V0
KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRWaXNpdFN0cm9u
Z2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMjIxODAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRnJvbQogICAgIGlmICghKGluc3RydWN0aW9uWzhdLnUucHV0QnlJZEZsYWdzICYg
UHV0QnlJZElzRGlyZWN0KSkgewogICAgICAgICBjb25kaXRpb25TZXQgPQogICAgICAgICAgICAg
Z2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAotICAg
ICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAgICAgIHZtLCBwcm9maWxlZEJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOwogICAgICAgICBpZiAoIWNvbmRp
dGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0lu
Zm9ybWF0aW9uKTsKICAgICB9CkBAIC0zMDMsNiArMzAzLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIGlmIChzZXQuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cygpOwogICAgIAorICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKICAgICByZXN1bHQubV9zdGF0ZSA9IFNp
bXBsZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUoKTsgKytpKSB7CkBA
IC0zNTUsNyArMzU2LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
KAogICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAgICAg
ICAgIGlmICghaXNEaXJlY3QpIHsKICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKLSAgICAgICAgICAg
ICAgICBnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOwor
ICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsKICAgICAg
ICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAko
cmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVk
V2F0Y2hwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNCArMzcsMTUgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50
QWRhcHRvcjo6YWRkKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmll
dyogdmlldywgQ29tbW9uRGF0YSYgY29tbW9uKQogeworICAgIFZNJiB2bSA9ICpjb2RlQmxvY2st
PnZtKCk7CiAgICAgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IGNvbW1vbi53YXRjaHBvaW50cy5h
ZGQoY29kZUJsb2NrKTsKICAgICBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQqIG5ldXRl
cmluZ1dhdGNocG9pbnQgPQotICAgICAgICBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQ6
OmNyZWF0ZSgqY29kZUJsb2NrLT52bSgpKTsKKyAgICAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdX
YXRjaHBvaW50OjpjcmVhdGUodm0pOwogICAgIG5ldXRlcmluZ1dhdGNocG9pbnQtPnNldCgpLT5h
ZGQod2F0Y2hwb2ludCk7CiAgICAgY29kZUJsb2NrLT5hZGRDb25zdGFudChuZXV0ZXJpbmdXYXRj
aHBvaW50KTsKICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgbmVlZCB0byBzZXQgdGhpcyB3YXRjaHBv
aW50IGF0IGFsbCBmb3Igc2hhcmVkIGJ1ZmZlcnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEwOAotICAgIGNvZGVCbG9jay0+dm0oKS0+aGVhcC5h
ZGRSZWZlcmVuY2UobmV1dGVyaW5nV2F0Y2hwb2ludCwgdmlldy0+cG9zc2libHlTaGFyZWRCdWZm
ZXIoKSk7CisgICAgdm0uaGVhcC5hZGRSZWZlcmVuY2UobmV1dGVyaW5nV2F0Y2hwb2ludCwgdmll
dy0+cG9zc2libHlTaGFyZWRCdWZmZXIoKSk7CiB9CiAKIHZvaWQgSW5mZXJyZWRWYWx1ZUFkYXB0
b3I6OmFkZCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9u
IDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIxLDcgKzQyMSw3IEBAIHB1YmxpYzoKICAgICBKU09iamVjdCogZ2xvYmFs
VGhpc09iamVjdEZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICBKU0ds
b2JhbE9iamVjdCogb2JqZWN0ID0gZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pOwotICAgICAg
ICByZXR1cm4ganNDYXN0PEpTT2JqZWN0Kj4ob2JqZWN0LT5tZXRob2RUYWJsZSgpLT50b1RoaXMo
b2JqZWN0LCBvYmplY3QtPmdsb2JhbEV4ZWMoKSwgTm90U3RyaWN0TW9kZSkpOworICAgICAgICBy
ZXR1cm4ganNDYXN0PEpTT2JqZWN0Kj4ob2JqZWN0LT5tZXRob2RUYWJsZShtX3ZtKS0+dG9UaGlz
KG9iamVjdCwgb2JqZWN0LT5nbG9iYWxFeGVjKCksIE5vdFN0cmljdE1vZGUpKTsKICAgICB9CiAg
ICAgCiAgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZUZvcihJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDcgKzI0Niw3IEBA
IEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVUaGkKICAgICAgICAgcmV0dXJu
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHJhcmVEYXRhLT5vYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZSgpLT5zdHJ1Y3R1cmUoKSk7CiAgICAgfQogCi0gICAgSlNWYWx1ZSBwcm90byA9IGNvbnN0
cnVjdG9yLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7CisgICAg
SlNWYWx1ZSBwcm90byA9IGNvbnN0cnVjdG9yLT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAg
ICBpZiAocHJvdG8uaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KGV4ZWMsIGFzT2JqZWN0KHByb3RvKSk7CkBAIC03MTQsNyArNzE0LDcgQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIH0KICAgICAKICAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChhcnJheSwgdHJ1ZSk7Ci0gICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1
dCgKKyAgICBhcnJheS0+bWV0aG9kVGFibGUodm0pLT5wdXQoCiAgICAgICAgIGFycmF5LCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSksIHNsb3QpOwogfQogCkBAIC03MjksNyArNzI5LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIH0KICAgICAKICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChhcnJheSwgZmFsc2UpOwotICAgIGFycmF5LT5tZXRob2RUYWJsZSgpLT5wdXQoCisgICAg
YXJyYXktPm1ldGhvZFRhYmxlKCp2bSktPnB1dCgKICAgICAgICAgYXJyYXksIGV4ZWMsIElkZW50
aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwg
c2xvdCk7CiB9CiAKQEAgLTc0Niw3ICs3NDYsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0RG91YmxlQnlWCiAgICAgfQogICAgIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGFy
cmF5LCB0cnVlKTsKLSAgICBhcnJheS0+bWV0aG9kVGFibGUoKS0+cHV0KAorICAgIGFycmF5LT5t
ZXRob2RUYWJsZSgqdm0pLT5wdXQoCiAgICAgICAgIGFycmF5LCBleGVjLCBJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIGluZGV4KSwganNWYWx1ZSwgc2xvdCk7CiB9CiAKQEAgLTc2Myw3ICs3NjMsNyBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWCiAgICAgfQogICAgIAog
ICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGFycmF5LCBmYWxzZSk7Ci0gICAgYXJyYXktPm1ldGhv
ZFRhYmxlKCktPnB1dCgKKyAgICBhcnJheS0+bWV0aG9kVGFibGUoKnZtKS0+cHV0KAogICAgICAg
ICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIGpzVmFsdWUsIHNs
b3QpOwogfQogCkBAIC04MzMsMjEgKzgzMywyMSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxEaXJlCiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERp
cmVjdEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFy
cmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgICAg
YXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSwgMCwgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYXJyYXksIHRydWUpOwotICAg
IGFycmF5LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRl
eCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBhcnJheS0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIAogICAgIGlmIChpbmRl
eCA+PSAwKSB7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwpAQCAtODU1LDcgKzg1NSw3IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmUKICAgICB9CiAgICAgCiAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3QoYXJyYXksIGZhbHNlKTsKLSAgICBhcnJheS0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKSwgc2xvdCk7CisgICAgYXJyYXktPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsK
IH0KIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQXJyYXkqIGFycmF5
KQpAQCAtMjM0NSw3ICsyMzQ1LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dER5
bmFtaWNWYQogICAgICAgICBzdHJpY3RNb2RlID0gZXhlYy0+Y29kZUJsb2NrKCktPmlzU3RyaWN0
TW9kZSgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNjb3BlLCBzdHJpY3RNb2RlLCBQdXRQ
cm9wZXJ0eVNsb3Q6OlVua25vd25Db250ZXh0LCBpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8u
aW5pdGlhbGl6YXRpb25Nb2RlKCkpKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICBz
Y29wZS0+bWV0aG9kVGFibGUoKS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVj
b2RlKHZhbHVlKSwgc2xvdCk7CisgICAgc2NvcGUtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHNjb3Bl
LCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSwgc2xvdCk7CiB9CiAKIGludDMy
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXBIYXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgaW5wdXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
NywxOSArNTA3LDE4IEBAIGV4dGVybiAiQyIgdm9pZCogY29tcGlsZUZUTE9TUkV4aXQoRXhlY1MK
ICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6dmVyYm9zZU9TUigp
IHx8IE9wdGlvbnM6OnZlcmJvc2VGVExPU1JFeGl0KCkpCiAgICAgICAgIGRhdGFMb2coIkNvbXBp
bGluZyBPU1IgZXhpdCB3aXRoIGV4aXRJRCA9ICIsIGV4aXRJRCwgIlxuIik7CiAKLSAgICBpZiAo
ZXhlYy0+dm0oKS5jYWxsRnJhbWVGb3JDYXRjaCkKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhl
Yy0+dm0oKS5jYWxsRnJhbWVGb3JDYXRjaCA9PSBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGlmICh2bS5jYWxsRnJhbWVGb3JDYXRjaCkKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQodm0uY2FsbEZyYW1lRm9yQ2F0Y2ggPT0gZXhlYyk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICAKICAgICBBU1NFUlQoY29kZUJsb2Nr
KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6RlRMSklUKTsK
ICAgICAKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAKICAgICAvLyBJdCdzIHNvcnQg
b2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRv
aW5nIHNvIHdvdWxkbid0CiAgICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCi0gICAgRGVmZXJH
Q0ZvckFXaGlsZSBkZWZlckdDKHZtLT5oZWFwKTsKKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVy
R0Modm0uaGVhcCk7CiAKICAgICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2Rl
KCktPmZ0bCgpOwogICAgIE9TUkV4aXQmIGV4aXQgPSBqaXRDb2RlLT5vc3JFeGl0W2V4aXRJRF07
CkBAIC01NDMsNyArNTQyLDcgQEAgZXh0ZXJuICJDIiB2b2lkKiBjb21waWxlRlRMT1NSRXhpdChF
eGVjUwogCiAgICAgcHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4ZWMsIGV4aXQubV9jb2Rl
T3JpZ2luKTsKICAgICAKLSAgICBjb21waWxlU3R1YihleGl0SUQsIGppdENvZGUsIGV4aXQsIHZt
LCBjb2RlQmxvY2spOworICAgIGNvbXBpbGVTdHViKGV4aXRJRCwgaml0Q29kZSwgZXhpdCwgJnZt
LCBjb2RlQmxvY2spOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAogICAgICAg
ICBleGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFi
ZWwoZXhpdC5tX2NvZGUuY29kZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsx
MDMsNyBAQCBleHRlcm4gIkMiIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QCiAgICAgICAg
ICAgICBpZiAocHJvcGVydHkubG9jYXRpb24oKS5raW5kKCkgIT0gQ2xvc3VyZVZhclBMb2MpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGFjdGl2YXRpb24tPnZhcmlh
YmxlQXQoU2NvcGVPZmZzZXQocHJvcGVydHkubG9jYXRpb24oKS5pbmZvKCkpKS5zZXQoZXhlYy0+
dm0oKSwgYWN0aXZhdGlvbiwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOworICAgICAgICAg
ICAgYWN0aXZhdGlvbi0+dmFyaWFibGVBdChTY29wZU9mZnNldChwcm9wZXJ0eS5sb2NhdGlvbigp
LmluZm8oKSkpLnNldCh2bSwgYWN0aXZhdGlvbiwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkp
OwogICAgICAgICB9CiAKICAgICAgICAgYnJlYWs7CkBAIC0yMjUsNyArMjI1LDcgQEAgZXh0ZXJu
ICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCiAgICAgICAgICAgICByZXN1bHQtPnZhcmlhYmxlQXQoU2NvcGVPZmZzZXQocHJvcGVy
dHkubG9jYXRpb24oKS5pbmZvKCkpKS5zZXQoCi0gICAgICAgICAgICAgICAgZXhlYy0+dm0oKSwg
cmVzdWx0LCBqc051bWJlcigyOTgzNCkpOworICAgICAgICAgICAgICAgIHZtLCByZXN1bHQsIGpz
TnVtYmVyKDI5ODM0KSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAodmFsaWRhdGlvbkVuYWJs
ZWQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBc3NlcnRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBc3NlcnRpb25zLmgJ
KHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQXNzZXJ0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBACiAKICNkZWZpbmUgQVNTRVJU
X1RISVNfR0NfT0JKRUNUX0lOSEVSSVRTKGNsYXNzSW5mbykgZG8ge1wKICAgICBBU1NFUlRfVEhJ
U19HQ19PQkpFQ1RfTE9PS1NfVkFMSUQoKTsgXAotICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMtPmlu
aGVyaXRzKCp0aGlzLT52bSgpLCBjbGFzc0luZm8pKTsgXAorICAgIFJFTEVBU0VfQVNTRVJUKHRo
aXMtPmluaGVyaXRzKHZtLCBjbGFzc0luZm8pKTsgXAogfSB3aGlsZSAoMCkKIAogI2Vsc2UKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0SG9zdC5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTAgQEAgSlNWYWx1ZSBJbmplY3RlZFNjcmlwdEhvc3Q6OndyYXBwZXIoRXhlYwogICAg
IGlmICh2YWx1ZSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwogCi0gICAgSlNPYmplY3QqIHByb3Rv
dHlwZSA9IEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGVQcm90b3R5cGUoZXhlYy0+dm0oKSwg
Z2xvYmFsT2JqZWN0KTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUpOwotICAgIEpTSW5qZWN0ZWRTY3JpcHRIb3N0KiBpbmplY3RlZFNjcmlwdEhvc3QgPSBKU0lu
amVjdGVkU2NyaXB0SG9zdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbWFrZVJlZigq
dGhpcykpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNPYmplY3QqIHByb3RvdHlw
ZSA9IEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSk7CisgICAgSlNJbmplY3Rl
ZFNjcmlwdEhvc3QqIGluamVjdGVkU2NyaXB0SG9zdCA9IEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojpj
cmVhdGUodm0sIHN0cnVjdHVyZSwgbWFrZVJlZigqdGhpcykpOwogICAgIG1fd3JhcHBlcnMuYWRk
V3JhcHBlcihnbG9iYWxPYmplY3QsIGluamVjdGVkU2NyaXB0SG9zdCk7CiAKICAgICByZXR1cm4g
aW5qZWN0ZWRTY3JpcHRIb3N0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAJKHJldmlzaW9uIDIyMTgw
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhv
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsMTMgKzE0MywxMyBAQCBKU1ZhbHVlIEpTSW5q
ZWN0ZWRTY3JpcHRIb3N0OjpzdWJ0eXBlKEV4CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAg
IHJldHVybiBleGVjLT52bSgpLnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKTsKKyAgICAgICAg
cmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKTsKICAgICBpZiAodmFsdWUuaXNC
b29sZWFuKCkpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnNtYWxsU3RyaW5ncy5ib29sZWFu
U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygp
OwogICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS5z
bWFsbFN0cmluZ3MubnVtYmVyU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmlu
Z3MubnVtYmVyU3RyaW5nKCk7CiAgICAgaWYgKHZhbHVlLmlzU3ltYm9sKCkpCi0gICAgICAgIHJl
dHVybiBleGVjLT52bSgpLnNtYWxsU3RyaW5ncy5zeW1ib2xTdHJpbmcoKTsKKyAgICAgICAgcmV0
dXJuIHZtLnNtYWxsU3RyaW5ncy5zeW1ib2xTdHJpbmcoKTsKIAogICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBhc09iamVjdCh2YWx1ZSk7CiAgICAgaWYgKG9iamVjdCkgewpAQCAtMTg3LDkgKzE4Nyw5
IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OnN1YnR5cGUoRXgKICAgICAgICAgcmV0
dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBBU0NJSUxpdGVyYWwoIml0ZXJhdG9yIikpOwog
CiAgICAgaWYgKG9iamVjdCkgewotICAgICAgICBpZiAob2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+
dm0oKSwgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5hcnJheUl0ZXJh
dG9yTmV4dEluZGV4UHJpdmF0ZU5hbWUoKSkKLSAgICAgICAgICAgIHx8IG9iamVjdC0+Z2V0RGly
ZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCku
bWFwQnVja2V0UHJpdmF0ZU5hbWUoKSkKLSAgICAgICAgICAgIHx8IG9iamVjdC0+Z2V0RGlyZWN0
KGV4ZWMtPnZtKCksIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc2V0
QnVja2V0UHJpdmF0ZU5hbWUoKSkpCisgICAgICAgIGlmIChvYmplY3QtPmdldERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuYXJyYXlJdGVyYXRvck5leHRJbmRleFBy
aXZhdGVOYW1lKCkpCisgICAgICAgICAgICB8fCBvYmplY3QtPmdldERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwQnVja2V0UHJpdmF0ZU5hbWUoKSkKKyAgICAg
ICAgICAgIHx8IG9iamVjdC0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGlu
TmFtZXMoKS5zZXRCdWNrZXRQcml2YXRlTmFtZSgpKSkKICAgICAgICAgICAgIHJldHVybiBqc05v
bnRyaXZpYWxTdHJpbmcoZXhlYywgQVNDSUlMaXRlcmFsKCJpdGVyYXRvciIpKTsKICAgICB9CiAK
QEAgLTI1Niw5ICsyNTYsMTAgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6ZnVuY3Rp
b25EZQogCiBzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTVmFsdWUgdmFsdWUpCiB7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYyk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhleGVjLCAibmFtZSIpLCBqc1N0cmluZyhleGVjLCBuYW1lKSk7Ci0gICAg
cmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCAidmFsdWUiKSwgdmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGV4ZWMsICJuYW1lIiksIGpzU3RyaW5nKGV4ZWMsIG5hbWUpKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAidmFsdWUi
KSwgdmFsdWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI3NSw3ICsyNzYsNyBAQCBK
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5
KGV4ZWMsIG51bGxwdHIpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1Zh
bHVlKCkpOwotICAgICAgICBzd2l0Y2ggKHByb21pc2UtPnN0YXR1cyhleGVjLT52bSgpKSkgewor
ICAgICAgICBzd2l0Y2ggKHByb21pc2UtPnN0YXR1cyh2bSkpIHsKICAgICAgICAgY2FzZSBKU1By
b21pc2U6OlN0YXR1czo6UGVuZGluZzoKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAg
ICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJ
bnRlcm5hbFByb3BlcnR5KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic3RhdHVzIiksIGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCBBU0NJSUxpdGVyYWwoInBlbmRpbmciKSkpKTsKQEAgLTI4NCwxMyArMjg1
LDEzIEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICAgICAg
ICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5h
bFByb3BlcnR5KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic3RhdHVzIiksIGpzTm9udHJpdmlhbFN0cmlu
ZyhleGVjLCBBU0NJSUxpdGVyYWwoInJlc29sdmVkIikpKSk7CiAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAgc2NvcGUucmVsZWFz
ZSgpOwotICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNv
bnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgcHJv
bWlzZS0+cmVzdWx0KGV4ZWMtPnZtKCkpKSk7CisgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCBBU0NJ
SUxpdGVyYWwoInJlc3VsdCIpLCBwcm9taXNlLT5yZXN1bHQodm0pKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gYXJyYXk7CiAgICAgICAgIGNhc2UgSlNQcm9taXNlOjpTdGF0dXM6OlJlamVjdGVkOgog
ICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVj
dEludGVybmFsUHJvcGVydHkoZXhlYywgQVNDSUlMaXRlcmFsKCJzdGF0dXMiKSwganNOb250cml2
aWFsU3RyaW5nKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgicmVqZWN0ZWQiKSkpKTsKICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgICAgICBzY29w
ZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5k
ZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCBBU0NJSUxpdGVyYWwoInJlc3Vs
dCIpLCBwcm9taXNlLT5yZXN1bHQoZXhlYy0+dm0oKSkpKTsKKyAgICAgICAgICAgIGFycmF5LT5w
dXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgicmVzdWx0IiksIHByb21pc2UtPnJlc3VsdCh2bSkpKTsKICAgICAg
ICAgICAgIHJldHVybiBhcnJheTsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTogPGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzE0MTY2ND4gV2ViIEluc3BlY3RvcjogRVM2OiBJbXByb3ZlZCBTdXBw
b3J0IGZvciBQcm9taXNlcyAtIFByb21pc2UgUmVhY3Rpb25zCkBAIC0zMjUsOSArMzI2LDkgQEAg
SlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgIH0KIAogICAgIGlm
IChKU09iamVjdCogaXRlcmF0b3JPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0s
IHZhbHVlKSkgewotICAgICAgICBpZiAoaXRlcmF0b3JPYmplY3QtPmdldERpcmVjdChleGVjLT52
bSgpLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmFycmF5SXRlcmF0
b3JOZXh0SW5kZXhQcml2YXRlTmFtZSgpKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBpdGVyYXRl
ZFZhbHVlID0gaXRlcmF0b3JPYmplY3QtPmdldERpcmVjdChleGVjLT52bSgpLCBleGVjLT52bSgp
LnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLml0ZXJhdGVkT2JqZWN0UHJpdmF0ZU5hbWUo
KSk7Ci0gICAgICAgICAgICBKU1ZhbHVlIGtpbmQgPSBpdGVyYXRvck9iamVjdC0+Z2V0RGlyZWN0
KGV4ZWMtPnZtKCksIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuYXJy
YXlJdGVyYXRvcktpbmRQcml2YXRlTmFtZSgpKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yT2JqZWN0
LT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmFycmF5SXRl
cmF0b3JOZXh0SW5kZXhQcml2YXRlTmFtZSgpKSkgeworICAgICAgICAgICAgSlNWYWx1ZSBpdGVy
YXRlZFZhbHVlID0gaXRlcmF0b3JPYmplY3QtPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkuaXRlcmF0ZWRPYmplY3RQcml2YXRlTmFtZSgpKTsKKyAgICAgICAg
ICAgIEpTVmFsdWUga2luZCA9IGl0ZXJhdG9yT2JqZWN0LT5nZXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmFycmF5SXRlcmF0b3JLaW5kUHJpdmF0ZU5hbWUoKSk7
CiAKICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICAgICAgICAgIEpTQXJyYXkq
IGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCAyKTsKQEAgLTMzOSwx
MCArMzQwLDEwIEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAg
ICAgICAgICAgIHJldHVybiBhcnJheTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpdGVyYXRv
ck9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkubWFwQnVja2V0UHJpdmF0ZU5hbWUoKSkpIHsKLSAgICAgICAgICAgIEpT
VmFsdWUgaXRlcmF0ZWRWYWx1ZSA9IGl0ZXJhdG9yT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+dm0o
KSwgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pdGVyYXRlZE9iamVj
dFByaXZhdGVOYW1lKCkpOworICAgICAgICBpZiAoaXRlcmF0b3JPYmplY3QtPmdldERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwQnVja2V0UHJpdmF0ZU5hbWUo
KSkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgaXRlcmF0ZWRWYWx1ZSA9IGl0ZXJhdG9yT2JqZWN0
LT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLml0ZXJhdGVk
T2JqZWN0UHJpdmF0ZU5hbWUoKSk7CiAgICAgICAgICAgICBTdHJpbmcga2luZDsKLSAgICAgICAg
ICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8SXRlcmF0aW9uS2luZD4oaXRlcmF0b3JPYmplY3QtPmdl
dERpcmVjdChleGVjLT52bSgpLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1l
cygpLm1hcEl0ZXJhdG9yS2luZFByaXZhdGVOYW1lKCkpLmFzSW50MzIoKSkpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8SXRlcmF0aW9uS2luZD4oaXRlcmF0b3JPYmplY3QtPmdl
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwSXRlcmF0b3JL
aW5kUHJpdmF0ZU5hbWUoKSkuYXNJbnQzMigpKSkgewogICAgICAgICAgICAgY2FzZSBJdGVyYXRl
S2V5OgogICAgICAgICAgICAgICAgIGtpbmQgPSBBU0NJSUxpdGVyYWwoImtleSIpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMzYzLDEwICszNjQsMTAgQEAgSlNWYWx1ZSBKU0luamVjdGVk
U2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKGl0ZXJhdG9yT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+dm0oKSwg
ZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5zZXRCdWNrZXRQcml2YXRl
TmFtZSgpKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBpdGVyYXRlZFZhbHVlID0gaXRlcmF0b3JP
YmplY3QtPmdldERpcmVjdChleGVjLT52bSgpLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmJ1
aWx0aW5OYW1lcygpLml0ZXJhdGVkT2JqZWN0UHJpdmF0ZU5hbWUoKSk7CisgICAgICAgIGlmIChp
dGVyYXRvck9iamVjdC0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5zZXRCdWNrZXRQcml2YXRlTmFtZSgpKSkgeworICAgICAgICAgICAgSlNWYWx1ZSBpdGVy
YXRlZFZhbHVlID0gaXRlcmF0b3JPYmplY3QtPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkuaXRlcmF0ZWRPYmplY3RQcml2YXRlTmFtZSgpKTsKICAgICAgICAg
ICAgIFN0cmluZyBraW5kOwotICAgICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxJdGVyYXRp
b25LaW5kPihpdGVyYXRvck9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnZtKCku
cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc2V0SXRlcmF0b3JLaW5kUHJpdmF0ZU5hbWUo
KSkuYXNJbnQzMigpKSkgeworICAgICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxJdGVyYXRp
b25LaW5kPihpdGVyYXRvck9iamVjdC0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5i
dWlsdGluTmFtZXMoKS5zZXRJdGVyYXRvcktpbmRQcml2YXRlTmFtZSgpKS5hc0ludDMyKCkpKSB7
CiAgICAgICAgICAgICBjYXNlIEl0ZXJhdGVLZXk6CiAgICAgICAgICAgICAgICAga2luZCA9IEFT
Q0lJTGl0ZXJhbCgia2V5Iik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00NTYsOCArNDU3
LDggQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha01hcEVudAogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgZm9yIChhdXRvIGl0ID0gd2Vh
a01hcC0+YmVnaW4oKTsgaXQgIT0gd2Vha01hcC0+ZW5kKCk7ICsraXQpIHsKICAgICAgICAgSlNP
YmplY3QqIGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgICAgIGVudHJ5
LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAia2V5
IiksIGl0LT5rZXkpOwotICAgICAgICBlbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInZhbHVlIiksIGl0LT52YWx1ZS5nZXQoKSk7CisgICAg
ICAgIGVudHJ5LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImtl
eSIpLCBpdC0+a2V5KTsKKyAgICAgICAgZW50cnktPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhleGVjLCAidmFsdWUiKSwgaXQtPnZhbHVlLmdldCgpKTsKICAgICAgICAgYXJy
YXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGZldGNoZWQrKywgZW50cnkpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICBpZiAobnVtYmVyVG9G
ZXRjaCAmJiBmZXRjaGVkID49IG51bWJlclRvRmV0Y2gpCkBAIC01MDUsNyArNTA2LDcgQEAgSlNW
YWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha1NldEVudAogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgZm9yIChhdXRvIGl0ID0gd2Vha1NldC0+YmVn
aW4oKTsgaXQgIT0gd2Vha1NldC0+ZW5kKCk7ICsraXQpIHsKICAgICAgICAgSlNPYmplY3QqIGVu
dHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgICAgIGVudHJ5LT5wdXREaXJl
Y3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAidmFsdWUiKSwgaXQt
PmtleSk7CisgICAgICAgIGVudHJ5LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgInZhbHVlIiksIGl0LT5rZXkpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgZmV0Y2hlZCsrLCBlbnRyeSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgIGlmIChudW1iZXJUb0ZldGNoICYmIGZldGNoZWQg
Pj0gbnVtYmVyVG9GZXRjaCkKQEAgLTYwNCw3ICs2MDUsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRT
Y3JpcHRIb3N0OjppdGVyYXRvckVuCiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAKICAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
ZXhlYyk7Ci0gICAgICAgIGVudHJ5LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhleGVjLCAidmFsdWUiKSwgbmV4dFZhbHVlKTsKKyAgICAgICAgZW50cnktPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAidmFsdWUiKSwgbmV4dFZh
bHVlKTsKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIGVudHJ5KTsKICAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAgICAgc2Nv
cGUucmVsZWFzZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0ph
dmFTY3JpcHRDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMjIxODAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksMTAgKzExOSwxMSBAQCBzdGF0aWMgSlNWYWx1ZSB2
YWx1ZUZvclNjb3BlTG9jYXRpb24oRXhlCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAogICAg
IC8vIERlYnVnZ2VyLkxvY2F0aW9uIHByb3RvY29sIG9iamVjdC4KKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVj
KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsICJzY3JpcHRJZCIpLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6Om51bWJlcihsb2Nh
dGlvbi5zb3VyY2VJRCkpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJsaW5lTnVtYmVyIiksIGpzTnVtYmVyKGxvY2F0aW9u
LmxpbmUpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMsICJjb2x1bW5OdW1iZXIiKSwganNOdW1iZXIobG9jYXRpb24uY29sdW1u
KSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgInNjcmlwdElkIiksIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6bnVtYmVyKGxvY2F0aW9uLnNv
dXJjZUlEKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsICJsaW5lTnVtYmVyIiksIGpzTnVtYmVyKGxvY2F0aW9uLmxpbmUpKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY29sdW1u
TnVtYmVyIiksIGpzTnVtYmVyKGxvY2F0aW9uLmNvbHVtbikpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTE0Miw5ICsxNDMsOSBAQCBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6
c2NvcGVEZXNjCiAgICAgZm9yIChEZWJ1Z2dlclNjb3BlOjppdGVyYXRvciBpdGVyID0gc2NvcGVD
aGFpbi0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBEZWJ1Z2dlclNj
b3BlKiBzY29wZSA9IGl0ZXIuZ2V0KCk7CiAgICAgICAgIEpTT2JqZWN0KiBkZXNjcmlwdGlvbiA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGly
ZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInR5cGUiKSwgdmFs
dWVGb3JTY29wZVR5cGUoc2NvcGUpKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChl
eGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJuYW1lIiksIGpzU3RyaW5n
KGV4ZWMsIHNjb3BlLT5uYW1lKCkpKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChl
eGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJsb2NhdGlvbiIpLCB2YWx1
ZUZvclNjb3BlTG9jYXRpb24oZXhlYywgc2NvcGUtPmxvY2F0aW9uKCkpKTsKKyAgICAgICAgZGVz
Y3JpcHRpb24tPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAidHlw
ZSIpLCB2YWx1ZUZvclNjb3BlVHlwZShzY29wZSkpOworICAgICAgICBkZXNjcmlwdGlvbi0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJuYW1lIiksIGpzU3RyaW5n
KGV4ZWMsIHNjb3BlLT5uYW1lKCkpKTsKKyAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibG9jYXRpb24iKSwgdmFsdWVGb3JTY29w
ZUxvY2F0aW9uKGV4ZWMsIHNjb3BlLT5sb2NhdGlvbigpKSk7CiAgICAgICAgIGFycmF5LT5wdXRE
aXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBkZXNjcmlwdGlvbik7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgSlNWYWx1ZSgpKTsKICAgICB9CkBAIC0yMjYsOSArMjI3
LDEwIEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2IKICAgICBpZiAo
IWltcGwpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTT2JqZWN0KiBwcm90b3R5
cGUgPSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZVByb3RvdHlwZShleGVjLT52bSgpLCBn
bG9iYWxPYmplY3QpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUpOwotICAgIEpTSmF2YVNjcmlwdENhbGxGcmFtZSogamF2YVNjcmlwdENhbGxGcmFtZSA9IEpT
SmF2YVNjcmlwdENhbGxGcmFtZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgKmltcGwp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IEpT
SmF2YVNjcmlwdENhbGxGcmFtZTo6Y3JlYXRlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpOwor
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjcmVhdGVT
dHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlKTsKKyAgICBKU0phdmFTY3JpcHRD
YWxsRnJhbWUqIGphdmFTY3JpcHRDYWxsRnJhbWUgPSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmNy
ZWF0ZSh2bSwgc3RydWN0dXJlLCAqaW1wbCk7CiAKICAgICByZXR1cm4gamF2YVNjcmlwdENhbGxG
cmFtZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2Fs
bFN0YWNrRmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAkocmV2aXNpb24gMjIxODAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDExICsxMjQsMTEgQEAgc3RhdGljIHZvaWQgZXh0cmFj
dFNvdXJjZUluZm9ybWF0aW9uRnJvbQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKIAogICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdl
YiBJbnNwZWN0b3I6IFNob3VsZCBub3QgbmVlZCB0byBldmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRs
aW5nIGV4Y2VwdGlvbnMKLSAgICBKU1ZhbHVlIGxpbmVWYWx1ZSA9IGV4Y2VwdGlvbk9iamVjdC0+
Z2V0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImxpbmUi
KSk7CisgICAgSlNWYWx1ZSBsaW5lVmFsdWUgPSBleGNlcHRpb25PYmplY3QtPmdldERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibGluZSIpKTsKICAgICAqbGluZU51bWJl
ciA9IGxpbmVWYWx1ZSAmJiBsaW5lVmFsdWUuaXNOdW1iZXIoKSA/IGludChsaW5lVmFsdWUudG9O
dW1iZXIoZXhlYykpIDogMDsKLSAgICBKU1ZhbHVlIGNvbHVtblZhbHVlID0gZXhjZXB0aW9uT2Jq
ZWN0LT5nZXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAi
Y29sdW1uIikpOworICAgIEpTVmFsdWUgY29sdW1uVmFsdWUgPSBleGNlcHRpb25PYmplY3QtPmdl
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY29sdW1uIikpOwogICAg
ICpjb2x1bW5OdW1iZXIgPSBjb2x1bW5WYWx1ZSAmJiBjb2x1bW5WYWx1ZS5pc051bWJlcigpID8g
aW50KGNvbHVtblZhbHVlLnRvTnVtYmVyKGV4ZWMpKSA6IDA7Ci0gICAgSlNWYWx1ZSBzb3VyY2VV
UkxWYWx1ZSA9IGV4Y2VwdGlvbk9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoZXhlYywgInNvdXJjZVVSTCIpKTsKKyAgICBKU1ZhbHVlIHNvdXJjZVVS
TFZhbHVlID0gZXhjZXB0aW9uT2JqZWN0LT5nZXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgInNvdXJjZVVSTCIpKTsKICAgICAqc291cmNlVVJMID0gc291cmNlVVJMVmFs
dWUgJiYgc291cmNlVVJMVmFsdWUuaXNTdHJpbmcoKSA/IHNvdXJjZVVSTFZhbHVlLnRvV1RGU3Ry
aW5nKGV4ZWMpIDogQVNDSUlMaXRlcmFsKCJ1bmRlZmluZWQiKTsKICAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogfQpAQCAtMTcwLDEwICsxNzAsMTEgQEAgUmVmPFNjcmlwdENhbGxTdGFjaz4g
Y3JlYXRlU2NyaXB0Q2FsbFN0YQogCiBSZWY8U2NyaXB0QXJndW1lbnRzPiBjcmVhdGVTY3JpcHRB
cmd1bWVudHMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50
KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgVmVjdG9yPERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlPiBhcmd1bWVudHM7CiAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBleGVjLT5h
cmd1bWVudENvdW50KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IHNraXBBcmd1bWVudENvdW50OyBp
IDwgYXJndW1lbnRDb3VudDsgKytpKQotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKSk7
CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUodm0sIGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKSk7CiAgICAgcmV0dXJuIFNjcmlwdEFyZ3VtZW50czo6
Y3JlYXRlKGV4ZWMsIGFyZ3VtZW50cyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWNoZWRDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhY2hlZENhbGwuaAkocmV2aXNpb24gMjIxODAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhY2hlZENhbGwuaAkod29ya2luZyBjb3B5
KQpAQCAtNDEsOCArNDEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IENhY2hlZENhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBp
bnQgYXJndW1lbnRDb3VudCkKICAgICAgICAgICAgIDogbV92YWxpZChmYWxzZSkKLSAgICAgICAg
ICAgICwgbV9pbnRlcnByZXRlcihjYWxsRnJhbWUtPmludGVycHJldGVyKCkpCiAgICAgICAgICAg
ICAsIG1fdm0oY2FsbEZyYW1lLT52bSgpKQorICAgICAgICAgICAgLCBtX2ludGVycHJldGVyKG1f
dm0uaW50ZXJwcmV0ZXIpCiAgICAgICAgICAgICAsIG1fZW50cnlTY29wZShtX3ZtLCBmdW5jdGlv
bi0+c2NvcGUoKS0+Z2xvYmFsT2JqZWN0KG1fdm0pKQogICAgICAgICB7CiAgICAgICAgICAgICBW
TSYgdm0gPSBtX2VudHJ5U2NvcGUudm0oKTsKQEAgLTcwLDggKzcwLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBib29sIG1fdmFsaWQ7Ci0gICAgICAgIEludGVy
cHJldGVyKiBtX2ludGVycHJldGVyOwogICAgICAgICBWTSYgbV92bTsKKyAgICAgICAgSW50ZXJw
cmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAgICAgICAgIFZNRW50cnlTY29wZSBtX2VudHJ5U2NvcGU7
CiAgICAgICAgIFByb3RvQ2FsbEZyYW1lIG1fcHJvdG9DYWxsRnJhbWU7CiAgICAgICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIG1fYXJndW1lbnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzUsMTggKzEzNSw2IEBAIG5hbWVzcGFjZSBKU0MgIHsKIAogICAgICAgICBWTSYgdm0oKSBj
b25zdDsKIAotICAgICAgICAvLyBDb252ZW5pZW5jZSBmdW5jdGlvbnMgZm9yIGFjY2VzcyB0byBn
bG9iYWwgZGF0YS4KLSAgICAgICAgLy8gSXQgdGFrZXMgYSBmZXcgbWVtb3J5IHJlZmVyZW5jZXMg
dG8gZ2V0IGZyb20gYSBjYWxsIGZyYW1lIHRvIHRoZSBnbG9iYWwgZGF0YQotICAgICAgICAvLyBw
b2ludGVyLCBzbyB0aGVzZSBhcmUgaW5lZmZpY2llbnQsIGFuZCBzaG91bGQgYmUgdXNlZCBzcGFy
aW5nbHkgaW4gbmV3IGNvZGUuCi0gICAgICAgIC8vIEJ1dCB0aGV5J3JlIHVzZWQgaW4gbWFueSBw
bGFjZXMgaW4gbGVnYWN5IGNvZGUsIHNvIHRoZXkncmUgbm90IGdvaW5nIGF3YXkgYW55IHRpbWUg
c29vbi4KLQotICAgICAgICBBdG9taWNTdHJpbmdUYWJsZSogYXRvbWljU3RyaW5nVGFibGUoKSBj
b25zdCB7IHJldHVybiB2bSgpLmF0b21pY1N0cmluZ1RhYmxlKCk7IH0KLSAgICAgICAgY29uc3Qg
Q29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAqdm0oKS5w
cm9wZXJ0eU5hbWVzOyB9Ci0gICAgICAgIGNvbnN0IEFyZ0xpc3QmIGVtcHR5TGlzdCgpIGNvbnN0
IHsgcmV0dXJuICp2bSgpLmVtcHR5TGlzdDsgfQotICAgICAgICBJbnRlcnByZXRlciogaW50ZXJw
cmV0ZXIoKSB7IHJldHVybiB2bSgpLmludGVycHJldGVyOyB9Ci0gICAgICAgIEhlYXAqIGhlYXAo
KSB7IHJldHVybiAmdm0oKS5oZWFwOyB9Ci0KLQogICAgICAgICBzdGF0aWMgQ2FsbEZyYW1lKiBj
cmVhdGUoUmVnaXN0ZXIqIGNhbGxGcmFtZUJhc2UpIHsgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxG
cmFtZSo+KGNhbGxGcmFtZUJhc2UpOyB9CiAgICAgICAgIFJlZ2lzdGVyKiByZWdpc3RlcnMoKSB7
IHJldHVybiB0aGlzOyB9CiAgICAgICAgIGNvbnN0IFJlZ2lzdGVyKiByZWdpc3RlcnMoKSBjb25z
dCB7IHJldHVybiB0aGlzOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgwNCw3ICs4MDQsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlUHJvZ3JhbShj
b25zCiAgICAgICAgICAgICBpZiAoSlNPTlBQYXRoLnNpemUoKSA9PSAxICYmIEpTT05QUGF0aFsw
XS5tX3R5cGUgPT0gSlNPTlBQYXRoRW50cnlUeXBlRGVjbGFyZSkgewogICAgICAgICAgICAgICAg
IGdsb2JhbE9iamVjdC0+YWRkVmFyKGNhbGxGcmFtZSwgSlNPTlBQYXRoWzBdLm1fcGF0aEVudHJ5
TmFtZSk7CiAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsT2JqZWN0
KTsKLSAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dChnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZSwgSlNPTlBQYXRoWzBdLm1fcGF0aEVudHJ5TmFtZSwgSlNPTlBW
YWx1ZSwgc2xvdCk7CisgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5tZXRob2RUYWJsZSh2
bSktPnB1dChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgSlNPTlBQYXRoWzBdLm1fcGF0aEVudHJ5
TmFtZSwgSlNPTlBWYWx1ZSwgc2xvdCk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0ganNVbmRl
ZmluZWQoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTEx
MDMsNyArMTEwMyw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEK
ICAgICBWTSYgdm0gPSAqc2NvcGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBBU1NFUlQoc2NvcGUtPnZtKCkgPT0gJmNhbGxGcmFt
ZS0+dm0oKSk7CisgICAgQVNTRVJUKCZ2bSA9PSAmY2FsbEZyYW1lLT52bSgpKTsKICAgICB0aHJv
d1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1
c3lPbkN1cnJlbnRUaHJlYWQoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVh
ZElzSG9sZGluZ0FQSUxvY2soKSk7CkBAIC0xMTg1LDcgKzExODUsNyBAQCBKU1ZhbHVlIEludGVy
cHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3QodmFyaWFibGVPYmplY3QpOwogICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGVP
YmplY3QtPmlzRXh0ZW5zaWJsZShjYWxsRnJhbWUpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY2hlY2tlZFJldHVybih0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHRocm93U2NvcGUsIEFT
Q0lJTGl0ZXJhbChOb25FeHRlbnNpYmxlT2JqZWN0UHJvcGVydHlEZWZpbmVFcnJvcikpKTsKLSAg
ICAgICAgICAgICAgICB2YXJpYWJsZU9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHZhcmlhYmxl
T2JqZWN0LCBjYWxsRnJhbWUsIGlkZW50LCBqc1VuZGVmaW5lZCgpLCBzbG90KTsKKyAgICAgICAg
ICAgICAgICB2YXJpYWJsZU9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQodmFyaWFibGVPYmpl
Y3QsIGNhbGxGcmFtZSwgaWRlbnQsIGpzVW5kZWZpbmVkKCksIHNsb3QpOwogICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTExOTUsNyAr
MTE5NSw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICAg
ICAgICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gY29kZUJsb2NrLT5mdW5j
dGlvbkRlY2woaSk7CiAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodmFyaWFi
bGVPYmplY3QpOwogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgY3JlYXRlIHRoaXMgdmFyaWFi
bGVzIGJlY2F1c2UgaXQgd2lsbCBiZSB1c2VkIHRvIGVtaXRzIGNvZGUgYnkgYnl0ZWNvZGUgZ2Vu
ZXJhdG9yCi0gICAgICAgICAgICAgICAgdmFyaWFibGVPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1
dCh2YXJpYWJsZU9iamVjdCwgY2FsbEZyYW1lLCBmdW5jdGlvbi0+bmFtZSgpLCBqc1VuZGVmaW5l
ZCgpLCBzbG90KTsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZU9iamVjdC0+bWV0aG9kVGFibGUo
dm0pLT5wdXQodmFyaWFibGVPYmplY3QsIGNhbGxGcmFtZSwgZnVuY3Rpb24tPm5hbWUoKSwganNV
bmRlZmluZWQoKSwgc2xvdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtVG9wTGV2ZWxGdW5jdGlvbkRlY2xz
OyArK2kpIHsKQEAgLTEyMDUsNyArMTIwNSw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1
dGUoRXZhbEV4ZWN1dGEKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4o
dGhyb3dTeW50YXhFcnJvcihjYWxsRnJhbWUsIHRocm93U2NvcGUsIG1ha2VTdHJpbmcoIkNhbid0
IGNyZWF0ZSBkdXBsaWNhdGUgdmFyaWFibGUgaW4gZXZhbDogJyIsIFN0cmluZyhmdW5jdGlvbi0+
bmFtZSgpLmltcGwoKSksICInIikpKTsKICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdCh2YXJpYWJsZU9iamVjdCk7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCBjcmVhdGUg
dGhpcyB2YXJpYWJsZXMgYmVjYXVzZSBpdCB3aWxsIGJlIHVzZWQgdG8gZW1pdHMgY29kZSBieSBi
eXRlY29kZSBnZW5lcmF0b3IKLSAgICAgICAgICAgICAgICB2YXJpYWJsZU9iamVjdC0+bWV0aG9k
VGFibGUoKS0+cHV0KHZhcmlhYmxlT2JqZWN0LCBjYWxsRnJhbWUsIGZ1bmN0aW9uLT5uYW1lKCks
IGpzVW5kZWZpbmVkKCksIHNsb3QpOworICAgICAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0LT5t
ZXRob2RUYWJsZSh2bSktPnB1dCh2YXJpYWJsZU9iamVjdCwgY2FsbEZyYW1lLCBmdW5jdGlvbi0+
bmFtZSgpLCBqc1VuZGVmaW5lZCgpLCBzbG90KTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGNoZWNrZWRSZXR1cm4odGhyb3dTY29wZS5leGNlcHRpb24o
KSkpOwogICAgICAgICAgICAgfQogCkBAIC0xMjE1LDcgKzEyMTUsNyBAQCBKU1ZhbHVlIEludGVy
cHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiAgICAgICAgICAgICAgICAgaWYgKCFyZXNvbHZl
ZFNjb3BlLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJs
ZU9iamVjdC0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBpZGVudCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHZhcmlhYmxlT2JqZWN0KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodmFyaWFi
bGVPYmplY3QsIGNhbGxGcmFtZSwgaWRlbnQsIGpzVW5kZWZpbmVkKCksIHNsb3QpOworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyaWFibGVPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHZh
cmlhYmxlT2JqZWN0LCBjYWxsRnJhbWUsIGlkZW50LCBqc1VuZGVmaW5lZCgpLCBzbG90KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hl
Y2tlZFJldHVybih0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CkBAIC0xMjQ2LDcgKzEyNDYsNyBAQCBKU1ZhbHVlIEludGVy
cHJldGVyOjpleGVjdXRlTW9kdWxlUHJvZ3JhCiAgICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgQVNT
RVJUKHNjb3BlLT52bSgpID09ICZjYWxsRnJhbWUtPnZtKCkpOworICAgIEFTU0VSVCgmdm0gPT0g
JmNhbGxGcmFtZS0+dm0oKSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwog
ICAgIEFTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5T25DdXJyZW50VGhyZWFkKCkpOwogICAgIFJF
TEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsOCArMTg3LDkg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgbV9jYWxsTGlua0lu
Zm9JbmRleCA9IDA7CiAKKyAgICBWTSYgdm0gPSAqbV9jb2RlQmxvY2stPnZtKCk7CiAgICAgdW5z
aWduZWQgc3RhcnRCeXRlY29kZU9mZnNldCA9IDA7Ci0gICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVPZmZzZXQgJiYgKG1fY29kZUJsb2NrLT5pbmhlcml0cygqbV9jb2RlQmxvY2stPnZtKCks
IFByb2dyYW1Db2RlQmxvY2s6OmluZm8oKSkgfHwgbV9jb2RlQmxvY2stPmluaGVyaXRzKCptX2Nv
ZGVCbG9jay0+dm0oKSwgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKSkpIHsKKyAgICBp
ZiAobV9sb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRz
KHZtLCBQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0cyh2
bSwgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKSkpIHsKICAgICAgICAgLy8gV2UgY2Fu
IG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2Rl
QmxvY2sncyBleGFjdGx5IG9uY2UuCiAgICAgICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxk
IGJlIGludmFsaWQgb3RoZXJ3aXNlLiBXaGVuIHRoZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRz
IHRvCiAgICAgICAgIC8vIGRvIE9TUiBlbnRyeSBpbnRvIHRoZSBiYXNlbGluZSBKSVQgaW4gYSBs
b29wLCBpdCB3aWxsIHBhc3MgaW4gdGhlIGJ5dGVjb2RlIG9mZnNldCBpdApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMjE4MDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MTIsNyArNDEyLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWREaXJlYwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZt
LCB1aWQpOwogICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgqdm0pLCBpZGVudCkpOwogICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRD
b250ZXh0KCkpOwotICAgIGFzT2JqZWN0KGJhc2VWYWx1ZSktPnB1dERpcmVjdChleGVjLT52bSgp
LCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIGFzT2Jq
ZWN0KGJhc2VWYWx1ZSktPnB1dERpcmVjdCgqdm0sIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpAQCAtNDI4LDcgKzQyOCw3IEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICBJZGVudGlmaWVyIGlkZW50
ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKICAgICBMT0dfSUMoKElDRXZlbnQ6Ok9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwo
KnZtKSwgaWRlbnQpKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGZhbHNl
LCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgYXNPYmplY3QoYmFz
ZVZhbHVlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKSwgc2xvdCk7CisgICAgYXNPYmplY3QoYmFzZVZhbHVlKS0+cHV0RGlyZWN0KCp2
bSwgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAogdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwgdHJ1ZSwgY29kZUJs
b2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGJhc2VPYmplY3QtPnN0cnVjdHVyZSgqdm0pOwotICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdChl
eGVjLT52bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOworICAgIGJhc2VPYmplY3QtPnB1dERpcmVj
dCgqdm0sIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0g
c3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQogICAgICAgICBy
ZXR1cm47CkBAIC01MzAsNyArNTMwLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWREaXJlYwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VPYmplY3QsIGZhbHNlLCBj
b2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0KCkpOwogICAgIAogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKCp2bSk7Ci0gICAgYmFzZU9iamVjdC0+cHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgYmFzZU9iamVjdC0+cHV0
RGlyZWN0KCp2bSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKICAgICAKICAgICBpZiAoYWNjZXNzVHlw
ZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTU1NCw3ICs1NTQsNyBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChDYWxs
RnJhbWUqIGNhbGxGcmFtCiAgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgewogICAg
ICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAgICAgICAg
ICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaSkpCi0gICAgICAgICAgICAgICAg
b2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoY2FsbEZyYW1lLT52bSgpLCBpLCB2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkodm0sIGksIHZhbHVlKTsKICAgICAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgbWFrZSB1
cyB0aGluayB0aGF0IGluLWJvdW5kcyB0eXBlZCBhcnJheSBhY2Nlc3NlcyBhcmUgYWN0dWFsbHkK
ICAgICAgICAgICAgICAgICAvLyBvdXQtb2YtYm91bmRzLgpAQCAtNjMxLDcgKzYzMSw3IEBAIHN0
YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKENhbGxGcmFtZSogY2EKICAgICAgICAgYnlWYWxJbmZv
LT50b29rU2xvd1BhdGggPSB0cnVlOwogCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9i
amVjdCwgaXNTdHJpY3RNb2RlKTsKLSAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3QoY2FsbEZyYW1l
LT52bSgpLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOworICAgIGJhc2VPYmplY3QtPnB1dERpcmVj
dCh2bSwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKIH0KIAogZW51bSBjbGFzcyBPcHRpbWl6YXRp
b25SZXN1bHQgewpAQCAtMjI2Niw3ICsyMjY2LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dFRvU2NvcGUoRQogICAgIH0KIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNjb3Bl
LCBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCBQdXRQcm9wZXJ0eVNsb3Q6OlVua25vd25Db250
ZXh0LCBpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpKTsK
LSAgICBzY29wZS0+bWV0aG9kVGFibGUoKS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgdmFsdWUs
IHNsb3QpOworICAgIHNjb3BlLT5tZXRob2RUYWJsZSh2bSktPnB1dChzY29wZSwgZXhlYywgaWRl
bnQsIHZhbHVlLCBzbG90KTsKICAgICAKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHZvaWQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xp
c3QuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFdvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw4IEBAIHZvaWQgSklU
V29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKIAogdm9pZCBKSVRXb3JrbGlzdDo6Y29t
cGlsZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVPZmZzZXQpCiB7Ci0gICAgRGVmZXJHQyBkZWZlckdDKGNvZGVCbG9jay0+dm0oKS0+aGVhcCk7
CisgICAgVk0qIHZtID0gY29kZUJsb2NrLT52bSgpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS0+
aGVhcCk7CiAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVENvZGU6OkludGVycHJl
dGVyVGh1bmspCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTI4Niw3ICsyODcsNyBAQCB2b2lk
IEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENvZGVCbG9jayogCiAgICAgaWYgKGlzUGxhbm5lZCkg
ewogICAgICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpOwog
ICAgICAgICAvLyBUaGlzIGlzIGV4cGVuc2l2ZSwgYnV0IHByb2JhYmx5IGdvb2QgZW5vdWdoLgot
ICAgICAgICBjb21wbGV0ZUFsbEZvclZNKCpjb2RlQmxvY2stPnZtKCkpOworICAgICAgICBjb21w
bGV0ZUFsbEZvclZNKCp2bSk7CiAgICAgfQogICAgIAogICAgIC8vIE5vdyBpdCBtaWdodCBiZSBj
b21waWxlZCEKQEAgLTI5OCw3ICsyOTksNyBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93
KENvZGVCbG9jayogCiAgICAgY29kZUJsb2NrLT5yZXNldEpJVERhdGEoKTsKICAgICAKICAgICAv
LyBPSywganVzdCBjb21waWxlIGl0LgotICAgIEpJVDo6Y29tcGlsZShjb2RlQmxvY2stPnZtKCks
IGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVPZmZzZXQpOworICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7CiAgICAgY29kZUJsb2Nr
LT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTUsNyArNjk1LDcgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZAogICAgICAgICB9CiAgICAgfSBlbHNlIGlm
ICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XCiAgICAgICAgICYmIGlzSlNBcnJheShiYXNlVmFs
dWUpCi0gICAgICAgICYmIGlkZW50ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsK
KyAgICAgICAgJiYgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7CiAgICAgICAg
IHBjWzBdLnUub3Bjb2RlID0gTExJbnQ6OmdldE9wY29kZShvcF9nZXRfYXJyYXlfbGVuZ3RoKTsK
ICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBjb2RlQmxvY2stPmdldE9yQWRk
QXJyYXlQcm9maWxlKHBjIC0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpKTsKICAg
ICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZlU3RydWN0dXJlKGJhc2VWYWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlKCkpOwpAQCAtNzk2LDcgKzc5Niw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9kZWxfYnlfaWQKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVC
bG9jaygpOwogICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gTExJTlRfT1BfQygyKS5qc1ZhbHVl
KCkudG9PYmplY3QoZXhlYyk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgYm9v
bCBjb3VsZERlbGV0ZSA9IGJhc2VPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5
KGJhc2VPYmplY3QsIGV4ZWMsIGNvZGVCbG9jay0+aWRlbnRpZmllcihwY1szXS51Lm9wZXJhbmQp
KTsKKyAgICBib29sIGNvdWxkRGVsZXRlID0gYmFzZU9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5k
ZWxldGVQcm9wZXJ0eShiYXNlT2JqZWN0LCBleGVjLCBjb2RlQmxvY2stPmlkZW50aWZpZXIocGNb
M10udS5vcGVyYW5kKSk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgaWYgKCFj
b3VsZERlbGV0ZSAmJiBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKQogICAgICAgICBMTElOVF9U
SFJPVyhjcmVhdGVUeXBlRXJyb3IoZXhlYywgVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7
CkBAIC04NTUsNyArODU1LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9i
eV92YQogICAgICAgICAgICAgaWYgKG9iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGkpKQogICAg
ICAgICAgICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KHZtLCBpLCB2YWx1ZSk7CiAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRC
eUluZGV4KG9iamVjdCwgZXhlYywgaSwgdmFsdWUsIGlzU3RyaWN0TW9kZSk7CisgICAgICAgICAg
ICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBp
LCB2YWx1ZSwgaXNTdHJpY3RNb2RlKTsKICAgICAgICAgICAgIExMSU5UX0VORCgpOwogICAgICAg
ICB9CiAgICAgICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4KGV4ZWMsIGksIHZhbHVlLCBpc1N0cmlj
dE1vZGUpOwpAQCAtOTA0LDcgKzkwNCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9wdXRfYnlfdmEKICAgICAgICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5k
ZXgudmFsdWUoKSwgdmFsdWUsIDAsIGlzU3RyaWN0TW9kZSA/IFB1dERpcmVjdEluZGV4U2hvdWxk
VGhyb3cgOiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKICAgICBlbHNlIHsKICAgICAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwgaXNTdHJpY3RNb2RlKTsKLSAgICAg
ICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5LCB2YWx1ZSwgc2xv
dCk7CisgICAgICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdCh2bSwgcHJvcGVydHksIHZhbHVlLCBz
bG90KTsKICAgICB9CiAgICAgTExJTlRfRU5EKCk7CiB9CkBAIC05MjIsMTIgKzkyMiwxMiBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVsX2J5X3ZhCiAgICAgCiAgICAgdWludDMy
X3QgaTsKICAgICBpZiAoc3Vic2NyaXB0LmdldFVJbnQzMihpKSkKLSAgICAgICAgY291bGREZWxl
dGUgPSBiYXNlT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgoYmFz
ZU9iamVjdCwgZXhlYywgaSk7CisgICAgICAgIGNvdWxkRGVsZXRlID0gYmFzZU9iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgoYmFzZU9iamVjdCwgZXhlYywgaSk7
CiAgICAgZWxzZSB7CiAgICAgICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwogICAgICAgICBh
dXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7CiAgICAgICAgIExM
SU5UX0NIRUNLX0VYQ0VQVElPTigpOwotICAgICAgICBjb3VsZERlbGV0ZSA9IGJhc2VPYmplY3Qt
Pm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmplY3QsIGV4ZWMsIHByb3BlcnR5
KTsKKyAgICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRl
bGV0ZVByb3BlcnR5KGJhc2VPYmplY3QsIGV4ZWMsIHByb3BlcnR5KTsKICAgICB9CiAgICAgCiAg
ICAgaWYgKCFjb3VsZERlbGV0ZSAmJiBleGVjLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkp
CkBAIC0xNjE3LDcgKzE2MTcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0
X3RvX3NjCiAgICAgICAgIExMSU5UX1RIUk9XKGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3Io
ZXhlYywgaWRlbnQpKTsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNjb3BlLCBjb2RlQmxv
Y2stPmlzU3RyaWN0TW9kZSgpLCBQdXRQcm9wZXJ0eVNsb3Q6OlVua25vd25Db250ZXh0LCBpc0lu
aXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpKTsKLSAgICBzY29w
ZS0+bWV0aG9kVGFibGUoKS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwor
ICAgIHNjb3BlLT5tZXRob2RUYWJsZSh2bSktPnB1dChzY29wZSwgZXhlYywgaWRlbnQsIHZhbHVl
LCBzbG90KTsKICAgICAKICAgICBDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlUHV0VG9TY29wZUds
b2JhbChleGVjLCBjb2RlQmxvY2ssIHBjLCBzY29wZSwgZ2V0UHV0SW5mbywgc2xvdCwgaWRlbnQp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01vZHVsZUFuYWx5emVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01vZHVsZUFuYWx5
emVyLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Nb2R1bGVBbmFseXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIE1vZHVsZUFuYWx5emVyOjpNb2R1bGVBbmFseXplcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlQ29kZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZGVjbGFyZWRWYXJpYWJsZXMsIGNv
bnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCiAgICAgOiBtX3ZtKCZl
eGVjLT52bSgpKQotICAgICwgbV9tb2R1bGVSZWNvcmQoZXhlYy0+dm0oKSwgSlNNb2R1bGVSZWNv
cmQ6OmNyZWF0ZShleGVjLCBleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
Pm1vZHVsZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIHNvdXJjZUNvZGUsIGRlY2xhcmVk
VmFyaWFibGVzLCBsZXhpY2FsVmFyaWFibGVzKSkKKyAgICAsIG1fbW9kdWxlUmVjb3JkKCptX3Zt
LCBKU01vZHVsZVJlY29yZDo6Y3JlYXRlKGV4ZWMsICptX3ZtLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPm1vZHVsZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIHNvdXJjZUNvZGUs
IGRlY2xhcmVkVmFyaWFibGVzLCBsZXhpY2FsVmFyaWFibGVzKSkKIHsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNw
cAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyQnl0ZWNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMCArMzUsMTEgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBQcm9maWxlciB7CiAKIEpTVmFsdWUgQnl0ZWNvZGU6OnRv
SlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIHJl
c3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29k
ZUluZGV4LCBqc051bWJlcihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICByZXN1bHQtPnB1dERpcmVj
dChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkub3Bjb2RlLCBqc1N0cmluZyhleGVj
LCBTdHJpbmc6OmZyb21VVEY4KG9wY29kZU5hbWVzW21fb3Bjb2RlSURdKSkpOwotICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5kZXNjcmlwdGlv
biwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChtX2Rlc2NyaXB0aW9uKSkpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ieXRlY29kZUluZGV4LCBq
c051bWJlcihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+b3Bjb2RlLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG9w
Y29kZU5hbWVzW21fb3Bjb2RlSURdKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5kZXNjcmlwdGlvbiwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRG
OChtX2Rlc2NyaXB0aW9uKSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVj
b2RlU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODUsNyArODUsNyBAQCB2b2lkIEJ5dGVjb2RlU2VxdWVuY2U6OmFkZFNlcXVlbmNlUHJvcGVy
CiAgICAgICAgIGhlYWRlci0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwganNTdHJpbmcoZXhlYywg
U3RyaW5nOjpmcm9tVVRGOChtX2hlYWRlcltpXSkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5oZWFkZXIsIGhlYWRlcik7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmhlYWRlciwgaGVhZGVyKTsKICAgICAKICAgICBKU0Fy
cmF5KiBzZXF1ZW5jZSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBCeXRl
Y29kZVNlcXVlbmNlOjphZGRTZXF1ZW5jZVByb3BlcgogICAgICAgICBzZXF1ZW5jZS0+cHV0RGly
ZWN0SW5kZXgoZXhlYywgaSwgbV9zZXF1ZW5jZVtpXS50b0pTKGV4ZWMpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9Ci0gICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZSwgc2VxdWVuY2UpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ieXRlY29kZSwgc2VxdWVu
Y2UpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6UHJvZmlsZXIKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmNwcAko
cmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyQnl0ZWNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTMgKzUzLDE0IEBAIHZvaWQg
Qnl0ZWNvZGVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKIAogSlNWYWx1ZSBCeXRlY29kZXM6
OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAg
IAotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5ieXRlY29kZXNJRCwganNOdW1iZXIobV9pZCkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4
ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pbmZlcnJlZE5hbWUsIGpzU3RyaW5nKGV4
ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9pbmZlcnJlZE5hbWUpKSk7Ci0gICAgcmVzdWx0LT5wdXRE
aXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNvdXJjZUNvZGUsIGpzU3Ry
aW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9zb3VyY2VDb2RlKSkpOwotICAgIHJlc3VsdC0+
cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5oYXNoLCBqc1N0cmlu
ZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KHRvQ1N0cmluZyhtX2hhc2gpKSkpOwotICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pbnN0cnVjdGlv
bkNvdW50LCBqc051bWJlcihtX2luc3RydWN0aW9uQ291bnQpKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZWNvZGVzSUQsIGpzTnVtYmVyKG1faWQpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aW5mZXJyZWROYW1l
LCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1faW5mZXJyZWROYW1lKSkpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zb3VyY2VDb2RlLCBqc1N0
cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1fc291cmNlQ29kZSkpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aGFzaCwganNTdHJpbmcoZXhlYywgU3Ry
aW5nOjpmcm9tVVRGOCh0b0NTdHJpbmcobV9oYXNoKSkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aW5zdHJ1Y3Rpb25Db3VudCwganNOdW1iZXIobV9pbnN0
cnVjdGlvbkNvdW50KSk7CiAgICAgYWRkU2VxdWVuY2VQcm9wZXJ0aWVzKGV4ZWMsIHJlc3VsdCk7
CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAJKHJldmlzaW9uIDIy
MTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw4IEBAIEpTVmFsdWUgQ29tcGls
YXRpb246OnRvSlMoRXhlY1N0YXRlKiBleGUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXNJRCwganNOdW1i
ZXIobV9ieXRlY29kZXMtPmlkKCkpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmNvbXBpbGF0aW9uS2luZCwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpm
cm9tVVRGOCh0b0NTdHJpbmcobV9raW5kKSkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+Ynl0ZWNvZGVzSUQsIGpzTnVtYmVyKG1fYnl0ZWNvZGVzLT5pZCgp
KSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbXBpbGF0
aW9uS2luZCwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOCh0b0NTdHJpbmcobV9raW5k
KSkpKTsKICAgICAKICAgICBKU0FycmF5KiBwcm9maWxlZEJ5dGVjb2RlcyA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZXhlYywgMCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
QEAgLTEyOSw3ICsxMjksNyBAQCBKU1ZhbHVlIENvbXBpbGF0aW9uOjp0b0pTKEV4ZWNTdGF0ZSog
ZXhlCiAgICAgICAgIHByb2ZpbGVkQnl0ZWNvZGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCB2
YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQot
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvZmlsZWRC
eXRlY29kZXMsIHByb2ZpbGVkQnl0ZWNvZGVzKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvZmlsZWRCeXRlY29kZXMsIHByb2ZpbGVkQnl0ZWNvZGVzKTsK
ICAgICAKICAgICBKU0FycmF5KiBkZXNjcmlwdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4
ZWMsIDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CkBAIC0xMzksNyAr
MTM5LDcgQEAgSlNWYWx1ZSBDb21waWxhdGlvbjo6dG9KUyhFeGVjU3RhdGUqIGV4ZQogICAgICAg
ICBkZXNjcmlwdGlvbnMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHZhbHVlKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9Ci0gICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5kZXNjcmlwdGlvbnMsIGRlc2NyaXB0aW9u
cyk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmRlc2NyaXB0
aW9ucywgZGVzY3JpcHRpb25zKTsKICAgICAKICAgICBKU0FycmF5KiBjb3VudGVycyA9IGNvbnN0
cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKQEAgLTE0OCwxMiArMTQ4LDEyIEBAIEpTVmFsdWUgQ29tcGlsYXRpb246OnRvSlMoRXhl
Y1N0YXRlKiBleGUKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICAgICAgYXV0byB2YWx1ZSA9IGl0LT5rZXkudG9KUyhleGVjKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgY291bnRlckVudHJ5LT5wdXREaXJlY3Qo
dm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5vcmlnaW4sIHZhbHVlKTsKLSAgICAgICAgY291bnRl
ckVudHJ5LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5leGVjdXRpb25Db3Vu
dCwganNOdW1iZXIoaXQtPnZhbHVlLT5jb3VudCgpKSk7CisgICAgICAgIGNvdW50ZXJFbnRyeS0+
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5vcmlnaW4sIHZhbHVlKTsKKyAgICAgICAg
Y291bnRlckVudHJ5LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmV4ZWN1dGlvbkNv
dW50LCBqc051bWJlcihpdC0+dmFsdWUtPmNvdW50KCkpKTsKICAgICAgICAgY291bnRlcnMtPnB1
c2goZXhlYywgY291bnRlckVudHJ5KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKICAgICB9Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5jb3VudGVycywgY291bnRlcnMpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5jb3VudGVycywgY291bnRlcnMpOwogICAgIAogICAgIEpTQXJyYXkq
IGV4aXRTaXRlcyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKQEAgLTE2Myw3ICsxNjMsNyBAQCBKU1ZhbHVlIENvbXBp
bGF0aW9uOjp0b0pTKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIGV4aXRTaXRlcy0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgaSwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgIH0KLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLm9zckV4aXRTaXRlcywgZXhpdFNpdGVzKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+b3NyRXhpdFNpdGVzLCBleGl0U2l0ZXMpOwogICAgIAogICAg
IEpTQXJyYXkqIGV4aXRzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwpAQCAtMTcxLDE2ICsxNzEsMTYgQEAgSlNWYWx1
ZSBDb21waWxhdGlvbjo6dG9KUyhFeGVjU3RhdGUqIGV4ZQogICAgICAgICBleGl0cy0+cHV0RGly
ZWN0SW5kZXgoZXhlYywgaSwgbV9vc3JFeGl0c1tpXS50b0pTKGV4ZWMpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9Ci0gICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5vc3JFeGl0cywgZXhpdHMpOworICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5vc3JFeGl0cywgZXhpdHMpOwogICAg
IAotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubnVtSW5s
aW5lZEdldEJ5SWRzLCBqc051bWJlcihtX251bUlubGluZWRHZXRCeUlkcykpOwotICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubnVtSW5saW5lZFB1dEJ5SWRz
LCBqc051bWJlcihtX251bUlubGluZWRQdXRCeUlkcykpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubnVtSW5saW5lZENhbGxzLCBqc051bWJlcihtX251
bUlubGluZWRDYWxscykpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuamV0dGlzb25SZWFzb24sIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgo
dG9DU3RyaW5nKG1famV0dGlzb25SZWFzb24pKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5udW1JbmxpbmVkR2V0QnlJZHMsIGpzTnVtYmVyKG1fbnVtSW5s
aW5lZEdldEJ5SWRzKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm51bUlubGluZWRQdXRCeUlkcywganNOdW1iZXIobV9udW1JbmxpbmVkUHV0QnlJZHMpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bnVtSW5saW5lZENh
bGxzLCBqc051bWJlcihtX251bUlubGluZWRDYWxscykpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5qZXR0aXNvblJlYXNvbiwganNTdHJpbmcoZXhlYywgU3Ry
aW5nOjpmcm9tVVRGOCh0b0NTdHJpbmcobV9qZXR0aXNvblJlYXNvbikpKSk7CiAgICAgaWYgKCFt
X2FkZGl0aW9uYWxKZXR0aXNvblJlYXNvbi5pc051bGwoKSkKLSAgICAgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hZGRpdGlvbmFsSmV0dGlzb25SZWFzb24s
IGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9hZGRpdGlvbmFsSmV0dGlzb25SZWFz
b24pKSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5h
ZGRpdGlvbmFsSmV0dGlzb25SZWFzb24sIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgo
bV9hZGRpdGlvbmFsSmV0dGlzb25SZWFzb24pKSk7CiAgICAgCi0gICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51aWQsIG1fdWlkLnRvSlMoZXhlYykpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT51aWQsIG1fdWlkLnRvSlMo
ZXhlYykpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxlZEJ5dGVj
b2RlLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEw
ICs0NCwxMSBAQCBDb21waWxlZEJ5dGVjb2RlOjp+Q29tcGlsZWRCeXRlY29kZSgpCiAKIEpTVmFs
dWUgQ29tcGlsZWRCeXRlY29kZTo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1w
dHlPYmplY3QoZXhlYyk7CiAgICAgCi0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLm9yaWdpbiwgbV9vcmlnaW4udG9KUyhleGVjKSk7Ci0gICAg
cmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmRlc2Ny
aXB0aW9uLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1fZGVzY3JpcHRpb24pKSk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm9yaWdpbiwgbV9v
cmlnaW4udG9KUyhleGVjKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmRlc2NyaXB0aW9uLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1fZGVz
Y3JpcHRpb24pKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAJKHJl
dmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
ckRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIEpTVmFsdWUg
RGF0YWJhc2U6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSAKICAgICAgICAgYnl0ZWNvZGVzLT5wdXRE
aXJlY3RJbmRleChleGVjLCBpLCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAgICAgfQotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYnl0ZWNvZGVzLCBieXRlY29kZXMpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ieXRlY29kZXMsIGJ5dGVjb2Rlcyk7CiAgICAgCiAgICAg
SlNBcnJheSogY29tcGlsYXRpb25zID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwpAQCAtMTIxLDcgKzEyMSw3IEBAIEpT
VmFsdWUgRGF0YWJhc2U6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSAKICAgICAgICAgY29tcGlsYXRp
b25zLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29tcGlsYXRpb25zLCBjb21waWxhdGlvbnMpOworICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb21waWxhdGlvbnMsIGNvbXBp
bGF0aW9ucyk7CiAgICAgCiAgICAgSlNBcnJheSogZXZlbnRzID0gY29uc3RydWN0RW1wdHlBcnJh
eShleGVjLCAwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwpAQCAtMTMx
LDcgKzEzMSw3IEBAIEpTVmFsdWUgRGF0YWJhc2U6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSAKICAg
ICAgICAgZXZlbnRzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCB2YWx1ZSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQotICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXZlbnRzLCBldmVudHMpOworICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ldmVudHMsIGV2ZW50cyk7CiAgICAg
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9m
aWxlci9Qcm9maWxlckV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZXJFdmVudC5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckV2ZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDYsMTUgKzQ2LDE2IEBAIHZvaWQgRXZlbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKIAogSlNWYWx1ZSBFdmVudDo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0
RW1wdHlPYmplY3QoZXhlYyk7CiAgICAgCi0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0o
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRpbWUsIGpzTnVtYmVyKG1fdGltZSkpOwotICAgIHJl
c3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29k
ZXNJRCwganNOdW1iZXIobV9ieXRlY29kZXMtPmlkKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dGltZSwganNOdW1iZXIobV90aW1lKSk7CisgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVjb2Rlc0lELCBqc051bWJl
cihtX2J5dGVjb2Rlcy0+aWQoKSkpOwogICAgIGlmIChtX2NvbXBpbGF0aW9uKQotICAgICAgICBy
ZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29tcGls
YXRpb25VSUQsIG1fY29tcGlsYXRpb24tPnVpZCgpLnRvSlMoZXhlYykpOwotICAgIHJlc3VsdC0+
cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zdW1tYXJ5LCBqc1N0
cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1fc3VtbWFyeSkpKTsKKyAgICAgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbXBpbGF0aW9uVUlELCBtX2NvbXBp
bGF0aW9uLT51aWQoKS50b0pTKGV4ZWMpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+c3VtbWFyeSwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOCht
X3N1bW1hcnkpKSk7CiAgICAgaWYgKG1fZGV0YWlsLmxlbmd0aCgpKQotICAgICAgICByZXN1bHQt
PnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZGV0YWlsLCBqc1N0
cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1fZGV0YWlsKSkpOworICAgICAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZGV0YWlsLCBqc1N0cmluZyhleGVjLCBT
dHJpbmc6OmZyb21VVEY4KG1fZGV0YWlsKSkpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJP
U1JFeGl0LmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEyICs0Nywx
MyBAQCBPU1JFeGl0Ojp+T1NSRXhpdCgpCiAKIEpTVmFsdWUgT1NSRXhpdDo6dG9KUyhFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU09iamVj
dCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgcmVzdWx0LT5wdXRE
aXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmlkLCBqc051bWJlcihtX2lk
KSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLm9yaWdpbiwgbV9vcmlnaW4udG9KUyhleGVjKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmV4aXRLaW5kLCBqc1N0cmluZyhleGVj
LCBleGl0S2luZFRvU3RyaW5nKG1fZXhpdEtpbmQpKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmlzV2F0Y2hwb2ludCwganNCb29sZWFu
KG1faXNXYXRjaHBvaW50KSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmNvdW50LCBqc051bWJlcihtX2NvdW50ZXIpKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aWQsIGpzTnVtYmVyKG1faWQpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+b3JpZ2luLCBtX29y
aWdpbi50b0pTKGV4ZWMpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+ZXhpdEtpbmQsIGpzU3RyaW5nKGV4ZWMsIGV4aXRLaW5kVG9TdHJpbmcobV9leGl0S2lu
ZCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXNXYXRj
aHBvaW50LCBqc0Jvb2xlYW4obV9pc1dhdGNocG9pbnQpKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y291bnQsIGpzTnVtYmVyKG1fY291bnRlcikpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9Qcm9maWxlck9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDcsOSArNDcsMTAgQEAgdm9pZCBPcmlnaW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29ucwogCiBKU1ZhbHVlIE9yaWdpbjo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0
RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ5dGVjb2Rlc0lELCBqc051bWJlcihtX2J5dGVjb2Rlcy0+aWQo
KSkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlY29kZUluZGV4LCBqc051bWJlcihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZWNvZGVzSUQsIGpzTnVtYmVy
KG1fYnl0ZWNvZGVzLT5pZCgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmJ5dGVjb2RlSW5kZXgsIGpzTnVtYmVyKG1fYnl0ZWNvZGVJbmRleCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9Qcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAJKHJldmlz
aW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlclBy
b2ZpbGVkQnl0ZWNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsMTAgQEAgUHJv
ZmlsZWRCeXRlY29kZXM6On5Qcm9maWxlZEJ5dGVjb2RlcygpCiAKIEpTVmFsdWUgUHJvZmlsZWRC
eXRlY29kZXM6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4
ZWMpOwogICAgIAotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlY29kZXNJRCwganNOdW1iZXIobV9ieXRlY29kZXMtPmlkKCkpKTsKKyAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZWNvZGVzSUQsIGpz
TnVtYmVyKG1fYnl0ZWNvZGVzLT5pZCgpKSk7CiAgICAgYWRkU2VxdWVuY2VQcm9wZXJ0aWVzKGV4
ZWMsIHJlc3VsdCk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJ
KHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3Ry
YWN0TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDkgKzEzOCwxMCBAQCBh
dXRvIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uOjphCiAKIHN0YXRpYyBKU1ZhbHVl
IGlkZW50aWZpZXJUb0pTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgaWYgKGlkZW50aWZp
ZXIuaXNTeW1ib2woKSkKLSAgICAgICAgcmV0dXJuIFN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCks
IHN0YXRpY19jYXN0PFN5bWJvbEltcGwmPigqaWRlbnRpZmllci5pbXBsKCkpKTsKLSAgICByZXR1
cm4ganNTdHJpbmcoJmV4ZWMtPnZtKCksIGlkZW50aWZpZXIuaW1wbCgpKTsKKyAgICAgICAgcmV0
dXJuIFN5bWJvbDo6Y3JlYXRlKHZtLCBzdGF0aWNfY2FzdDxTeW1ib2xJbXBsJj4oKmlkZW50aWZp
ZXIuaW1wbCgpKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgaWRlbnRpZmllci5pbXBsKCkp
OwogfQogCiBBYnN0cmFjdE1vZHVsZVJlY29yZCogQWJzdHJhY3RNb2R1bGVSZWNvcmQ6Omhvc3RS
ZXNvbHZlSW1wb3J0ZWRNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBt
b2R1bGVOYW1lKQpAQCAtNDk0LDcgKzQ5NSw4IEBAIGF1dG8gQWJzdHJhY3RNb2R1bGVSZWNvcmQ6
OnJlc29sdmVFeHBvcnQKICAgICAgICAgLy8gc2VjdGlvbiAxNS4yLjEuMTYuMywgc3RlcCA2CiAg
ICAgICAgIC8vIElmIHRoZSAiZGVmYXVsdCIgbmFtZSBpcyBub3QgcmVzb2x2ZWQgaW4gdGhlIGN1
cnJlbnQgbW9kdWxlLCB3ZSBuZWVkIHRvIHRocm93IGFuIGVycm9yIGFuZCBzdG9wIHJlc29sdXRp
b24gaW1tZWRpYXRlbHksCiAgICAgICAgIC8vIFJhdGlvbmFsZSB0byB0aGlzIGVycm9yOiBBIGRl
ZmF1bHQgZXhwb3J0IGNhbm5vdCBiZSBwcm92aWRlZCBieSBhbiBleHBvcnQgKi4KLSAgICAgICAg
aWYgKHF1ZXJ5LmV4cG9ydE5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmRlZmF1bHRLZXl3
b3JkLmltcGwoKSkKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgaWYgKHF1
ZXJ5LmV4cG9ydE5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+ZGVmYXVsdEtleXdvcmQuaW1wbCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIHN0ZXAgNywgSWYgZXhw
b3J0U3RhclNldCBjb250YWlucyBtb2R1bGUsIHRoZW4gcmV0dXJuIG51bGwuCkBAIC02NjAsNiAr
NjYyLDcgQEAgYXV0byBBYnN0cmFjdE1vZHVsZVJlY29yZDo6cmVzb2x2ZUV4cG9ydAogCiBzdGF0
aWMgdm9pZCBnZXRFeHBvcnRlZE5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgQWJzdHJhY3RNb2R1bGVS
ZWNvcmQqIHJvb3QsIElkZW50aWZpZXJTZXQmIGV4cG9ydGVkTmFtZXMpCiB7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBIYXNoU2V0PEFic3RyYWN0TW9kdWxlUmVjb3JkKj4gZXhwb3J0
U3RhclNldDsKICAgICBWZWN0b3I8QWJzdHJhY3RNb2R1bGVSZWNvcmQqLCA4PiBwZW5kaW5nTW9k
dWxlczsKIApAQCAtNjczLDcgKzY3Niw3IEBAIHN0YXRpYyB2b2lkIGdldEV4cG9ydGVkTmFtZXMo
RXhlY1N0YXRlKiAKIAogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBtb2R1bGVSZWNv
cmQtPmV4cG9ydEVudHJpZXMoKSkgewogICAgICAgICAgICAgY29uc3QgQWJzdHJhY3RNb2R1bGVS
ZWNvcmQ6OkV4cG9ydEVudHJ5JiBleHBvcnRFbnRyeSA9IHBhaXIudmFsdWU7Ci0gICAgICAgICAg
ICBpZiAobW9kdWxlUmVjb3JkID09IHJvb3QgfHwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmRlZmF1
bHRLZXl3b3JkICE9IGV4cG9ydEVudHJ5LmV4cG9ydE5hbWUpCisgICAgICAgICAgICBpZiAobW9k
dWxlUmVjb3JkID09IHJvb3QgfHwgdm0ucHJvcGVydHlOYW1lcy0+ZGVmYXVsdEtleXdvcmQgIT0g
ZXhwb3J0RW50cnkuZXhwb3J0TmFtZSkKICAgICAgICAgICAgICAgICBleHBvcnRlZE5hbWVzLmFk
ZChleHBvcnRFbnRyeS5leHBvcnROYW1lLmltcGwoKSk7CiAgICAgICAgIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90
b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTAsNyArNDEwLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIC8vIDQuIFJldHVybiB0aGUgcmVzdWx0
IG9mIGNhbGxpbmcgdGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZCBvZiBmdW5jIHByb3ZpZGlu
ZyBhcnJheSBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQgYW4gZW1wdHkgYXJndW1lbnRzIGxpc3QuCiAg
ICAgaWYgKCFpc0pTQXJyYXkodGhpc09iamVjdCkgfHwgY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Okhv
c3QgfHwgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uICE9IGFycmF5UHJvdG9GdW5jSm9pbikgewog
ICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzT2JqZWN0LCBleGVj
LT5lbXB0eUxpc3QoKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoZXhl
YywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc09iamVjdCwgKnZtLmVtcHR5TGlz
dCkpOwogICAgIH0KIAogICAgIEFTU0VSVChpc0pTQXJyYXkodGhpc1ZhbHVlKSk7CkBAIC00OTAs
NyArNDkwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAg
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRD
YWxsRGF0YShjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICAgICAgaWYgKGNhbGxU
eXBlICE9IENhbGxUeXBlOjpOb25lKSB7Ci0gICAgICAgICAgICBlbGVtZW50ID0gY2FsbChleGVj
LCBjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZWxlbWVudCwgZXhlYy0+
ZW1wdHlMaXN0KCkpOworICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywgY29udmVyc2lv
bkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsICp2bS5lbXB0eUxpc3QpOwog
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgICAgIH0KICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZCgqZXhlYywgZWxlbWVudCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5D
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDgg
Kzc2LDkgQEAgQ2FsbFR5cGUgQm9vbGVhbkNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YQogCiBKU09i
amVjdCogY29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFuKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBpbW1lZGlhdGVCb29sZWFu
VmFsdWUpCiB7Ci0gICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVhbk9iamVjdDo6Y3JlYXRl
KGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdC0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKLSAg
ICBvYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgaW1tZWRpYXRlQm9vbGVhblZhbHVl
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJv
b2xlYW5PYmplY3Q6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0
dXJlKCkpOworICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZSh2bSwgaW1tZWRpYXRlQm9vbGVhblZh
bHVlKTsKICAgICByZXR1cm4gb2JqOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWxsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FsbERhdGEuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYg
Y2FsbERhdGEsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlOjpK
UyB8fCBjYWxsVHlwZSA9PSBDYWxsVHlwZTo6SG9zdCk7Ci0gICAgcmV0dXJuIGV4ZWMtPmludGVy
cHJldGVyKCktPmV4ZWN1dGVDYWxsKGV4ZWMsIGFzT2JqZWN0KGZ1bmN0aW9uT2JqZWN0KSwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MpOworICAgIHJldHVybiB2bS5pbnRlcnBy
ZXRlci0+ZXhlY3V0ZUNhbGwoZXhlYywgYXNPYmplY3QoZnVuY3Rpb25PYmplY3QpLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncyk7CiB9CiAKIEpTVmFsdWUgY2FsbChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlIGNhbGxUeXBlLCBjb25z
dCBDYWxsRGF0YSYgY2FsbERhdGEsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzLCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2
aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw3IEBAIFNMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9jcmVhdGVfdGhpcykKICAgICAgICAgSlNGdW5jdGlvbiogY29uc3RydWN0
b3IgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yQXNPYmplY3QpOwogICAgICAgICBh
dXRvJiBjYWNoZVdyaXRlQmFycmllciA9IHBjWzRdLnUuanNDZWxsOwogICAgICAgICBpZiAoIWNh
Y2hlV3JpdGVCYXJyaWVyKQotICAgICAgICAgICAgY2FjaGVXcml0ZUJhcnJpZXIuc2V0KGV4ZWMt
PnZtKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICBjYWNo
ZVdyaXRlQmFycmllci5zZXQodm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBjb25zdHJ1Y3Rvcik7CiAg
ICAgICAgIGVsc2UgaWYgKGNhY2hlV3JpdGVCYXJyaWVyLnVudmFsaWRhdGVkR2V0KCkgIT0gSlND
ZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkgJiYgY2FjaGVXcml0ZUJhcnJpZXIuZ2V0
KCkgIT0gY29uc3RydWN0b3IpCiAgICAgICAgICAgICBjYWNoZVdyaXRlQmFycmllci5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKTsKIApA
QCAtMjQ0LDcgKzI0NCw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfdGhpcykK
ICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgc3RydWN0dXJlKTsK
ICAgICB9IGVsc2UgewogICAgICAgICAvLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9l
Y21hLTI2Mi82LjAvI3NlYy1vcmRpbmFyeWNyZWF0ZWZyb21jb25zdHJ1Y3RvcgotICAgICAgICBK
U1ZhbHVlIHByb3RvID0gY29uc3RydWN0b3JBc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUpOworICAgICAgICBKU1ZhbHVlIHByb3RvID0gY29uc3RydWN0
b3JBc09iamVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CiAgICAg
ICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgICAgICBpZiAocHJvdG8uaXNPYmplY3QoKSkKICAg
ICAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGFzT2JqZWN0KHBy
b3RvKSk7CkBAIC05MDcsNyArOTA3LDYgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9i
eV92YWxfd2l0aAogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gT1BfQyg0KS5qc1ZhbHVlKCk7CiAK
ICAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBzdWJzY3JpcHQuaXNTdHJpbmco
KSkpIHsKLSAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgU3RydWN0dXJlJiBz
dHJ1Y3R1cmUgPSAqYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pOwogICAgICAgICBp
ZiAoSlNDZWxsOjpjYW5Vc2VGYXN0R2V0T3duUHJvcGVydHkoc3RydWN0dXJlKSkgewogICAgICAg
ICAgICAgaWYgKFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBleGlzdGluZ0F0b21pY1N0cmluZyA9
IGFzU3RyaW5nKHN1YnNjcmlwdCktPnRvRXhpc3RpbmdBdG9taWNTdHJpbmcoZXhlYykpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5o
CShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDEwICsxNTQsMTEgQEAgaW5saW5l
IHZvaWQgdHJ5Q2FjaGVQdXRUb1Njb3BlR2xvYmFsKAogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBzY29wZS0+c3RydWN0dXJlKCktPmRpZENhY2hlUHJv
cGVydHlSZXBsYWNlbWVudChleGVjLT52bSgpLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgc2NvcGUtPnN0cnVjdHVyZSgpLT5kaWRD
YWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogCiAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAg
ICBwY1s1XS51LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgY29kZUJsb2NrLCBzY29wZS0+c3Ry
dWN0dXJlKCkpOworICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQodm0sIGNvZGVCbG9jaywg
c2NvcGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNo
ZWRPZmZzZXQoKTsKICAgICB9CiB9CkBAIC0xOTMsNyArMTk0LDcgQEAgaW5saW5lIHZvaWQgdHJ5
Q2FjaGVHZXRGcm9tU2NvcGVHbG9iYWwoCiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHNjb3BlLT5zdHJ1Y3R1cmUodm0pOwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAg
ICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVjLT52bSgpLCBjb2RlQmxvY2ssIHN0cnVj
dHVyZSk7CisgICAgICAgICAgICAgICAgcGNbNV0udS5zdHJ1Y3R1cmUuc2V0KHZtLCBjb2RlQmxv
Y2ssIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5j
YWNoZWRPZmZzZXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3Rh
cnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3Bw
CShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21w
bGV0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOSBAQCBuYW1lc3BhY2UgSlND
IHsKIAogYm9vbCBjaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgSlNWYWx1ZSogcmV0dXJuZWRFeGNlcHRpb24pCiB7Ci0gICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdU
YWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIFJFTEVB
U0VfQVNTRVJUKHZtLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRv
bWljU3RyaW5nVGFibGUoKSk7CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogcHJvZ3JhbSA9IFBy
b2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsKICAgICBKU09iamVjdCogZXJy
b3IgPSBwcm9ncmFtLT5jaGVja1N5bnRheChleGVjKTsKQEAgLTk5LDcgKzEwMCw3IEBAIEpTVmFs
dWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCAKICAgICBpZiAoIXRoaXNWYWx1ZSB8
fCB0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgdGhpc1ZhbHVlID0gZXhl
Yy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0ganNDYXN0
PEpTT2JqZWN0Kj4odGhpc1ZhbHVlLnRvVGhpcyhleGVjLCBOb3RTdHJpY3RNb2RlKSk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlUHJvZ3JhbShzb3Vy
Y2UsIGV4ZWMsIHRoaXNPYmopOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdm0uaW50ZXJwcmV0ZXIt
PmV4ZWN1dGVQcm9ncmFtKHNvdXJjZSwgZXhlYywgdGhpc09iaik7CiAKICAgICBpZiAoc2NvcGUu
ZXhjZXB0aW9uKCkpIHsKICAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBzY29wZS5leGNlcHRp
b24oKTsKQEAgLTE2NSw5ICsxNjYsMTAgQEAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBsb2Fk
QW5kRXZhbHVhdAogCiBKU0ludGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lLCBKU1ZhbHVlIHNjcmlwdEZl
dGNoZXIpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0
b21pY1N0cmluZ1RhYmxlKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT52bSgpLmlzQ29s
bGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5hdG9taWNT
dHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1cnJlbnRUaHJlYWQoKSk7
CiAKICAgICByZXR1cm4gbG9hZEFuZEV2YWx1YXRlTW9kdWxlKGxvY2ssIGV4ZWMsIGV4ZWMtPnZt
RW50cnlHbG9iYWxPYmplY3QoKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBtb2R1bGVO
YW1lKSwgc2NyaXB0RmV0Y2hlcik7CiB9CkBAIC0yMDMsOSArMjA1LDEwIEBAIHN0YXRpYyBKU0lu
dGVybmFsUHJvbWlzZSogbG9hZE1vZHVsZShjb24KIAogSlNJbnRlcm5hbFByb21pc2UqIGxvYWRN
b2R1bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1vZHVsZU5hbWUsIEpTVmFsdWUg
c2NyaXB0RmV0Y2hlcikKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICBSRUxF
QVNFX0FTU0VSVChleGVjLT52bSgpLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJy
ZW50KCkuYXRvbWljU3RyaW5nVGFibGUoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPnZt
KCkuaXNDb2xsZWN0b3JCdXN5T25DdXJyZW50VGhyZWFkKCkpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIFJFTEVBU0VfQVNTRVJUKHZt
LmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbWljU3RyaW5nVGFi
bGUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeU9uQ3VycmVudFRo
cmVhZCgpKTsKIAogICAgIHJldHVybiBsb2FkTW9kdWxlKGxvY2ssIGV4ZWMsIGV4ZWMtPnZtRW50
cnlHbG9iYWxPYmplY3QoKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBtb2R1bGVOYW1l
KSwgc2NyaXB0RmV0Y2hlcik7CiB9CkBAIC0yMzIsMTkgKzIzNSwyMSBAQCBKU0ludGVybmFsUHJv
bWlzZSogbG9hZE1vZHVsZShFeGVjU3RhdGUqCiAKIEpTVmFsdWUgbGlua0FuZEV2YWx1YXRlTW9k
dWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgbW9kdWxlS2V5LCBKU1ZhbHVl
IHNjcmlwdEZldGNoZXIpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3Vy
cmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT52
bSgpLmlzQ29sbGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgpKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2
bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1Rh
YmxlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1cnJlbnRU
aHJlYWQoKSk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+dm1F
bnRyeUdsb2JhbE9iamVjdCgpOwotICAgIHJldHVybiBnbG9iYWxPYmplY3QtPm1vZHVsZUxvYWRl
cigpLT5saW5rQW5kRXZhbHVhdGVNb2R1bGUoZXhlYywgaWRlbnRpZmllclRvSlNWYWx1ZShleGVj
LT52bSgpLCBtb2R1bGVLZXkpLCBzY3JpcHRGZXRjaGVyKTsKKyAgICByZXR1cm4gZ2xvYmFsT2Jq
ZWN0LT5tb2R1bGVMb2FkZXIoKS0+bGlua0FuZEV2YWx1YXRlTW9kdWxlKGV4ZWMsIGlkZW50aWZp
ZXJUb0pTVmFsdWUodm0sIG1vZHVsZUtleSksIHNjcmlwdEZldGNoZXIpOwogfQogCiBKU0ludGVy
bmFsUHJvbWlzZSogaW1wb3J0TW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgbW9kdWxlS2V5LCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7Ci0gICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdU
YWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOwotICAgIFJF
TEVBU0VfQVNTRVJUKCFleGVjLT52bSgpLmlzQ29sbGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgp
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3Vy
cmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0Nv
bGxlY3RvckJ1c3lPbkN1cnJlbnRUaHJlYWQoKSk7CiAKICAgICByZXR1cm4gZXhlYy0+dm1FbnRy
eUdsb2JhbE9iamVjdCgpLT5tb2R1bGVMb2FkZXIoKS0+cmVxdWVzdEltcG9ydE1vZHVsZShleGVj
LCBtb2R1bGVLZXksIHNjcmlwdEZldGNoZXIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MSw4ICs1MSw5IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiBl
eGVjLCBKU1YKIAogSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
Y29uc3RydWN0b3JPYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29u
c3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncywgSlNWYWx1ZSBu
ZXdUYXJnZXQpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBBU1NFUlQoY29uc3Ry
dWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlOjpKUyB8fCBjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVj
dFR5cGU6Okhvc3QpOwotICAgIHJldHVybiBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlQ29u
c3RydWN0KGV4ZWMsIGFzT2JqZWN0KGNvbnN0cnVjdG9yT2JqZWN0KSwgY29uc3RydWN0VHlwZSwg
Y29uc3RydWN0RGF0YSwgYXJncywgbmV3VGFyZ2V0KTsKKyAgICByZXR1cm4gdm0uaW50ZXJwcmV0
ZXItPmV4ZWN1dGVDb25zdHJ1Y3QoZXhlYywgYXNPYmplY3QoY29uc3RydWN0b3JPYmplY3QpLCBj
b25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzLCBuZXdUYXJnZXQpOwogfQogCiBKU09i
amVjdCogcHJvZmlsZWRDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBQcm9maWxpbmdSZWFzb24g
cmVhc29uLCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVj
dFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MsIEpTVmFsdWUgbmV3VGFyZ2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTY4LDcgKzExNjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJ0b0lTT1N0cmlu
ZyBpcyBub3QgYSBmdW5jdGlvbiIpKTsKIAotICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVj
LCBhc09iamVjdCh0b0lTT1ZhbHVlKSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmplY3QsIGV4ZWMt
PmVtcHR5TGlzdCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgYXNPYmplY3Qo
dG9JU09WYWx1ZSksIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCAqdm0uZW1wdHlMaXN0KTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBp
ZiAocmVzdWx0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoInRvSVNPU3RyaW5nIGRpZCBub3QgcmV0dXJuIGEgcHJp
bWl0aXZlIHZhbHVlIikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGly
ZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw4
ICs3NCwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdWludDMyX3QgbGVuZ3RoKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWShtX21hcHBlZEFyZ3VtZW50
cykpCi0gICAgICAgICAgICByZXR1cm4gZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICBpZiAoVU5MSUtFTFkobV9tYXBwZWRBcmd1
bWVudHMpKSB7CisgICAgICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICAgICAg
cmV0dXJuIGdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMp
OworICAgICAgICB9CiAgICAgICAgIHJldHVybiBtX2xlbmd0aDsKICAgICB9CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0RXZhbEV4
ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcg
KzQ2LDcgQEAgRGlyZWN0RXZhbEV4ZWN1dGFibGUqIERpcmVjdEV2YWxFeGVjdXRhYgogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBhdXRvKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8RGlyZWN0RXZhbEV4ZWN1dGFibGU+KCpleGVjLT5oZWFwKCkpKSBEaXJl
Y3RFdmFsRXhlY3V0YWJsZShleGVjLCBzb3VyY2UsIGlzSW5TdHJpY3RDb250ZXh0LCBkZXJpdmVk
Q29udGV4dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIGV2YWxDb250ZXh0VHlwZSk7Cisg
ICAgYXV0byogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERpcmVjdEV2
YWxFeGVjdXRhYmxlPih2bS5oZWFwKSkgRGlyZWN0RXZhbEV4ZWN1dGFibGUoZXhlYywgc291cmNl
LCBpc0luU3RyaWN0Q29udGV4dCwgZGVyaXZlZENvbnRleHRUeXBlLCBpc0Fycm93RnVuY3Rpb25D
b250ZXh0LCBldmFsQ29udGV4dFR5cGUpOwogICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9u
KHZtKTsKIAogICAgIFBhcnNlckVycm9yIGVycm9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjIxODAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZXJyb3JQcm90b0YKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZh
bHVlKTsKIAogICAgIC8vIDMuIExldCBuYW1lIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUg
W1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50ICJuYW1lIi4KLSAgICBK
U1ZhbHVlIG5hbWUgPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm5h
bWUpOworICAgIEpTVmFsdWUgbmFtZSA9IHRoaXNPYmotPmdldChleGVjLCB2bS5wcm9wZXJ0eU5h
bWVzLT5uYW1lKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKIAogICAgIC8vIDQuIElmIG5hbWUgaXMgdW5kZWZpbmVkLCB0aGVuIGxldCBuYW1lIGJl
ICJFcnJvciI7IGVsc2UgbGV0IG5hbWUgYmUgVG9TdHJpbmcobmFtZSkuCkBAIC05OCw3ICs5OCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0YKICAgICB9CiAKICAg
ICAvLyA1LiBMZXQgbXNnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRl
cm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50ICJtZXNzYWdlIi4KLSAgICBKU1ZhbHVlIG1l
c3NhZ2UgPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm1lc3NhZ2Up
OworICAgIEpTVmFsdWUgbWVzc2FnZSA9IHRoaXNPYmotPmdldChleGVjLCB2bS5wcm9wZXJ0eU5h
bWVzLT5tZXNzYWdlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKIAogICAgIC8vIChzaWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgzLDcgKzgzLDggQEAgSlNPYmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dF
cnJvcihFeGVjUwogSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAgICBpZiAoaWRlbnQuaXNQ
cml2YXRlTmFtZSgpKSB7Ci0gICAgICAgIFN0cmluZyBtZXNzYWdlKG1ha2VTdHJpbmcoIkNhbid0
IGZpbmQgcHJpdmF0ZSB2YXJpYWJsZTogQCIsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sb29rVXBQ
dWJsaWNOYW1lKGlkZW50KS5zdHJpbmcoKSkpOworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgICAgICBTdHJpbmcgbWVzc2FnZShtYWtlU3RyaW5nKCJDYW4ndCBmaW5kIHByaXZhdGUg
dmFyaWFibGU6IEAiLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQdWJsaWNOYW1lKGlkZW50KS5z
dHJpbmcoKSkpOwogICAgICAgICByZXR1cm4gY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgbWVz
c2FnZSk7CiAgICAgfQogICAgIFN0cmluZyBtZXNzYWdlKG1ha2VTdHJpbmcoIkNhbid0IGZpbmQg
dmFyaWFibGU6ICIsIGlkZW50LnN0cmluZygpKSk7CkBAIC05NywxMCArOTgsMTEgQEAgSlNTdHJp
bmcqIGVycm9yRGVzY3JpcHRpb25Gb3JWYWx1ZShFeGVjUwogICAgIGlmICh2LmlzU3ltYm9sKCkp
CiAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgYXNTeW1ib2wodiktPmRl
c2NyaXB0aXZlU3RyaW5nKCkpOwogICAgIGlmICh2LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2KTsKLSAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9k
VGFibGUoKS0+Z2V0Q2FsbERhdGEob2JqZWN0LCBjYWxsRGF0YSkgIT0gQ2FsbFR5cGU6Ok5vbmUp
Ci0gICAgICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJp
bmcoKTsKKyAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShv
YmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZTo6Tm9uZSkKKyAgICAgICAgICAgIHJldHVybiB2
bS5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKTsKICAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KGV4ZWMsIEpTT2JqZWN0OjpjYWxjdWxhdGVkQ2xhc3NOYW1lKG9iamVjdCkpOwogICAgIH0KICAg
ICByZXR1cm4gdi50b1N0cmluZyhleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMjE4
MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw4IEBAIEpTT2JqZWN0KiBjb25zdHJ1
Y3RGdW5jdGlvblNraXBwaW5nRXZhbEUKIC8vIEVDTUEgMTUuMy4yIFRoZSBGdW5jdGlvbiBDb25z
dHJ1Y3RvcgogSlNPYmplY3QqIGNvbnN0cnVjdEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJncywgRnVuY3Rpb25D
b25zdHJ1Y3Rpb25Nb2RlIGZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZSwgSlNWYWx1ZSBuZXdUYXJn
ZXQpCiB7Ci0gICAgcmV0dXJuIGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwg
YXJncywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFub255bW91cywgZXhlYy0+Y2FsbGVyU291cmNl
T3JpZ2luKCksIFN0cmluZygpLCBUZXh0UG9zaXRpb24oKSwgZnVuY3Rpb25Db25zdHJ1Y3Rpb25N
b2RlLCBuZXdUYXJnZXQpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgcmV0dXJuIGNv
bnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgYXJncywgdm0ucHJvcGVydHlOYW1l
cy0+YW5vbnltb3VzLCBleGVjLT5jYWxsZXJTb3VyY2VPcmlnaW4oKSwgU3RyaW5nKCksIFRleHRQ
b3NpdGlvbigpLCBmdW5jdGlvbkNvbnN0cnVjdGlvbk1vZGUsIG5ld1RhcmdldCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyMjE4MDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTAgKzEwMiwxMSBAQCB2b2lkIEdlbmVyaWNBcmd1bWVu
dHM8VHlwZT46OmdldE93blByb3BlCiAgICAgfQogCiAgICAgaWYgKG1vZGUuaW5jbHVkZURvbnRF
bnVtUHJvcGVydGllcygpICYmICF0aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpKSB7Ci0gICAg
ICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKLSAgICAgICAgYXJy
YXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZWUpOworICAgICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgICAgICBhcnJheS5hZGQodm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsK
KyAgICAgICAgYXJyYXkuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSk7CiAgICAgICAgIGlm
IChhcnJheS5pbmNsdWRlU3ltYm9sUHJvcGVydGllcygpKQotICAgICAgICAgICAgYXJyYXkuYWRk
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pdGVyYXRvclN5bWJvbCk7CisgICAgICAgICAgICBhcnJh
eS5hZGQodm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wpOwogICAgIH0KICAgICBCYXNl
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllcklu
bGluZXMuaAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsOCBAQCBp
bmxpbmUgUmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChFCiAjaWZuZGVmIE5ERUJVRwog
ICAgIGNoZWNrQ3VycmVudEF0b21pY1N0cmluZ1RhYmxlKGV4ZWMpOwogI2VuZGlmCi0gICAgcmV0
dXJuICpBdG9taWNTdHJpbmdJbXBsOjphZGRXaXRoU3RyaW5nVGFibGVQcm92aWRlcigqZXhlYywg
cik7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICByZXR1cm4gKkF0b21pY1N0cmluZ0lt
cGw6OmFkZFdpdGhTdHJpbmdUYWJsZVByb3ZpZGVyKHZtLCByKTsKIH0KIGlubGluZSBSZWY8U3Ry
aW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKFZNKiB2bSwgU3RyaW5nSW1wbCogcikKIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGlyZWN0RXZh
bEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQCBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlKiBJbmRpcmVjdEV2YWxFeGVjCiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGF1dG8qIGV4ZWN1dGFibGUgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxJbmRpcmVjdEV2YWxFeGVjdXRhYmxlPigqZXhlYy0+aGVhcCgp
KSkgSW5kaXJlY3RFdmFsRXhlY3V0YWJsZShleGVjLCBzb3VyY2UsIGlzSW5TdHJpY3RDb250ZXh0
LCBkZXJpdmVkQ29udGV4dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIGV2YWxDb250ZXh0
VHlwZSk7CisgICAgYXV0byogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEluZGlyZWN0RXZhbEV4ZWN1dGFibGU+KHZtLmhlYXApKSBJbmRpcmVjdEV2YWxFeGVjdXRhYmxl
KGV4ZWMsIHNvdXJjZSwgaXNJblN0cmljdENvbnRleHQsIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNB
cnJvd0Z1bmN0aW9uQ29udGV4dCwgZXZhbENvbnRleHRUeXBlKTsKICAgICBleGVjdXRhYmxlLT5m
aW5pc2hDcmVhdGlvbih2bSk7CiAKICAgICBQYXJzZXJFcnJvciBlcnJvcjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCShy
ZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5h
bEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCB2b2lkIEludGVy
bmFsRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0gICAgQVNTRVJUKG1l
dGhvZFRhYmxlKCktPmdldENhbGxEYXRhICE9IEludGVybmFsRnVuY3Rpb246OmluZm8oKS0+bWV0
aG9kVGFibGUuZ2V0Q2FsbERhdGEpOworICAgIEFTU0VSVChtZXRob2RUYWJsZSh2bSktPmdldENh
bGxEYXRhICE9IEludGVybmFsRnVuY3Rpb246OmluZm8oKS0+bWV0aG9kVGFibGUuZ2V0Q2FsbERh
dGEpOwogICAgIEpTU3RyaW5nKiBuYW1lU3RyaW5nID0ganNTdHJpbmcoJnZtLCBuYW1lKTsKICAg
ICBtX29yaWdpbmFsTmFtZS5zZXQodm0sIHRoaXMsIG5hbWVTdHJpbmcpOwogICAgIGlmIChuYW1l
VmlzaWJpbGl0eSA9PSBOYW1lVmlzaWJpbGl0eTo6VmlzaWJsZSkKQEAgLTExMiwxMiArMTEyLDEy
IEBAIFN0cnVjdHVyZSogSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2wKICAgICAgICAgICAg
IHJldHVybiBzdHJ1Y3R1cmU7CiAKICAgICAgICAgLy8gTm90ZSwgUmVmbGVjdC5jb25zdHJ1Y3Qg
bWlnaHQgY2F1c2UgdGhlIHByb2ZpbGUgdG8gY2h1cm4gYnV0IHdlIGRvbid0IGNhcmUuCi0gICAg
ICAgIEpTVmFsdWUgcHJvdG90eXBlVmFsdWUgPSBuZXdUYXJnZXQuZ2V0KGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOworICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZVZhbHVl
ID0gbmV3VGFyZ2V0LmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgaWYgKEpT
T2JqZWN0KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHByb3RvdHlw
ZVZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiB0YXJnZXRGdW5jdGlvbi0+cmFyZURhdGEodm0p
LT5jcmVhdGVJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKHZtLCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIGJhc2VDbGFzcyk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSA9IG5ld1RhcmdldC5nZXQoZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBl
VmFsdWUgPSBuZXdUYXJnZXQuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICBp
ZiAoSlNPYmplY3QqIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgcHJv
dG90eXBlVmFsdWUpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIG9ubHkgaGFwcGVucyBpZiBzb21l
b25lIFJlZmxlY3QuY29uc3RydWN0cyBvdXIgYnVpbHRpbiBjb25zdHJ1Y3RvciB3aXRoIGFub3Ro
ZXIgYnVpbHRpbiBjb25zdHJ1Y3RvciBhcyB0aGUgbmV3LnRhcmdldC4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQzLDggKzI0Myw5IEBAIGJvb2wgSlNBcnJheTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
Y3QKIAogYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0FycmF5KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTQXJyYXkqPihvYmplY3QpOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMg
PSB0aGlzT2JqZWN0LT5pc0xlbmd0aFdyaXRhYmxlKCkgPyBEb250RGVsZXRlIHwgRG9udEVudW0g
OiBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seTsKICAgICAgICAgc2xvdC5zZXRWYWx1
ZSh0aGlzT2JqZWN0LCBhdHRyaWJ1dGVzLCBqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSkp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI2Niw3ICsyNjcsNyBAQCBib29sIEpTQXJyYXk6
OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0CiAgICAgICAgIHJldHVybiBvcmRpbmFyeVNldFNs
b3coZXhlYywgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUo
KSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CiAgICAgfQogCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9
PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5p
c0xlbmd0aFdyaXRhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHVu
c2lnbmVkIG5ld0xlbmd0aCA9IHZhbHVlLnRvVUludDMyKGV4ZWMpOwpAQCAtMjg1LDkgKzI4Niwx
MCBAQCBib29sIEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0CiAKIGJvb2wgSlNB
cnJheTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBK
U0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKIAotICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKKyAgICBpZiAocHJv
cGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUpOwpAQCAtMzAyLDEwICszMDQsMTEgQEAgc3RhdGljIGludCBjb21w
YXJlS2V5c0ZvclFTb3J0KGNvbnN0IHZvaQogCiB2b2lkIEpTQXJyYXk6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNB
cnJheSo+KG9iamVjdCk7CiAKICAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
KCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgp
OwogCiAgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KQEAgLTE0MzEsNyArMTQzNCw4IEBAIGJv
b2wgSlNBcnJheTo6aXNJdGVyYXRvclByb3RvY29sRmFzdEFuZE4KICAgICBpZiAoc3RydWN0dXJl
LT5zdG9yZWRQcm90b3R5cGUoKSAhPSBnbG9iYWxPYmplY3QtPmFycmF5UHJvdG90eXBlKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChnZXREaXJlY3RPZmZzZXQoZ2xvYmFsT2Jq
ZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPnZtKCkucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1i
b2wpICE9IGludmFsaWRPZmZzZXQpCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGlmIChnZXREaXJlY3RPZmZzZXQodm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3lt
Ym9sKSAhPSBpbnZhbGlkT2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1
cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJl
dmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
c2hpZnRDb3VudEZvclNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwg
dW5zaWduZWQgY291bnQpCiAgICAgewotICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJh
eVN0b3JhZ2UoZXhlYy0+dm0oKSwgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFn
ZShleGVjLT52bSgpKSk7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIHJl
dHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSh2bSwgc3RhcnRJbmRleCwgY291bnQsIGVu
c3VyZUFycmF5U3RvcmFnZSh2bSkpOwogICAgIH0KICAgICBib29sIHNoaWZ0Q291bnRGb3JTcGxp
Y2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCYgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQp
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZS5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTksMTQgKzI5OSwxNSBAQCB2b2lk
IEpTVmFsdWU6OmR1bXBGb3JCYWNrdHJhY2UoUHJpbnRTdHJlCiAgICAgZWxzZSBpZiAoaXNEb3Vi
bGUoKSkKICAgICAgICAgb3V0LnByaW50ZigiJWxmIiwgYXNEb3VibGUoKSk7CiAgICAgZWxzZSBp
ZiAoaXNDZWxsKCkpIHsKLSAgICAgICAgaWYgKGFzQ2VsbCgpLT5pbmhlcml0cygqYXNDZWxsKCkt
PnZtKCksIEpTU3RyaW5nOjppbmZvKCkpKSB7CisgICAgICAgIFZNJiB2bSA9ICphc0NlbGwoKS0+
dm0oKTsKKyAgICAgICAgaWYgKGFzQ2VsbCgpLT5pbmhlcml0cyh2bSwgSlNTdHJpbmc6OmluZm8o
KSkpIHsKICAgICAgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhhc0NlbGwoKSk7
CiAgICAgICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBpbXBsID0gc3RyaW5nLT50cnlHZXRWYWx1
ZUltcGwoKTsKICAgICAgICAgICAgIGlmIChpbXBsKQogICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiXCIiLCBpbXBsLCAiXCIiKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIih1bnJlc29sdmVkIHN0cmluZykiKTsKLSAgICAgICAgfSBlbHNlIGlmIChhc0Nl
bGwoKS0+aW5oZXJpdHMoKmFzQ2VsbCgpLT52bSgpLCBTdHJ1Y3R1cmU6OmluZm8oKSkpIHsKKyAg
ICAgICAgfSBlbHNlIGlmIChhc0NlbGwoKS0+aW5oZXJpdHModm0sIFN0cnVjdHVyZTo6aW5mbygp
KSkgewogICAgICAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVbICIsIGFzQ2VsbCgpLT5zdHJ1
Y3R1cmUoKS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICAgICAgICAgIG91dC5wcmludCgiIElEOiAiLCBhc0NlbGwoKS0+c3RydWN0dXJlSUQoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAkocmV2
aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmll
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxMiArMTA1LDEzIEBAIFJlZlB0cjxEYXRhVmll
dz4gSlNEYXRhVmlldzo6dW5zaGFyZWRUeXAKIGJvb2wgSlNEYXRhVmlldzo6Z2V0T3duUHJvcGVy
dHlTbG90KAogICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3
Kj4ob2JqZWN0KTsKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5ieXRlTGVuZ3RoKSB7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVz
LT5ieXRlTGVuZ3RoKSB7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgRG9udEVu
dW0gfCBSZWFkT25seSwganNOdW1iZXIodGhpc09iamVjdC0+bV9sZW5ndGgpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ5dGVPZmZzZXQpIHsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3Bl
cnR5TmFtZXMtPmJ5dGVPZmZzZXQpIHsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0
LCBEb250RW51bSB8IFJlYWRPbmx5LCBqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTU2LDkgKzE1NywxMCBAQCBib29s
IEpTRGF0YVZpZXc6OmRlZmluZU93blByb3BlcnR5KAogYm9vbCBKU0RhdGFWaWV3OjpkZWxldGVQ
cm9wZXJ0eSgKICAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTRGF0YVZp
ZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KGNlbGwpOwotICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKLSAgICAgICAgfHwg
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KQorICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZUxlbmd0aAorICAgICAgICB8
fCBwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZU9mZnNldCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CkBAIC0xNjcsMTEgKzE2OSwxMiBAQCBib29sIEpTRGF0
YVZpZXc6OmRlbGV0ZVByb3BlcnR5KAogdm9pZCBKU0RhdGFWaWV3OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoCiAgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Rh
dGFWaWV3Kj4ob2JqZWN0KTsKICAgICAKICAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzKCkpIHsKLSAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
T2Zmc2V0KTsKLSAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVu
Z3RoKTsKKyAgICAgICAgYXJyYXkuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVPZmZzZXQpOwor
ICAgICAgICBhcnJheS5hZGQodm0ucHJvcGVydHlOYW1lcy0+Ynl0ZUxlbmd0aCk7CiAgICAgfQog
ICAgIAogICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBhcnJheSwgbW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NSw3ICszNzUs
NyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdChKU09iCiAgICAgICAgIHNs
b3Quc2V0VmFsdWUodGhpc09iamVjdCwgYXR0cmlidXRlcywgdGhpc09iamVjdC0+Z2V0RGlyZWN0
KG9mZnNldCksIG9mZnNldCk7CiAgICAgfQogCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2
bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpIHsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5q
c0V4ZWN1dGFibGUoKS0+aGFzQ2FsbGVyQW5kQXJndW1lbnRzUHJvcGVydGllcygpKQogICAgICAg
ICAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICAKQEAgLTM4Myw3ICszODMsNyBAQCBib29sIEpT
RnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdChKU09iCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNh
bGxlcikgeworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVy
KSB7CiAgICAgICAgIGlmICghdGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPmhhc0NhbGxlckFu
ZEFyZ3VtZW50c1Byb3BlcnRpZXMoKSkKICAgICAgICAgICAgIHJldHVybiBCYXNlOjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIApAQCAt
NDg3LDEwICs0ODcsMTAgQEAgYm9vbCBKU0Z1bmN0aW9uOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwq
IAogICAgICAgICAvLyBGb3Igbm9uLWhvc3QgZnVuY3Rpb25zLCBkb24ndCBsZXQgdGhlc2UgcHJv
cGVydGllcyBieSBkZWxldGVkIC0gZXhjZXB0IGJ5IERlZmluZU93blByb3BlcnR5LgogICAgICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB0aGlzT2JqZWN0LT5qc0V4ZWN1dGFi
bGUoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmNhbGxlciB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmFyZ3VtZW50cykKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVz
LT5jYWxsZXIgfHwgcHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykK
ICAgICAgICAgICAgIHJldHVybiAhZXhlY3V0YWJsZS0+aGFzQ2FsbGVyQW5kQXJndW1lbnRzUHJv
cGVydGllcygpOwogCi0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLnByb3RvdHlwZSAmJiAhZXhlY3V0YWJsZS0+aXNBcnJvd0Z1bmN0aW9uKCkpCisgICAg
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlICYmICFl
eGVjdXRhYmxlLT5pc0Fycm93RnVuY3Rpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeUxhenlQcm9wZXJ0eUlmTmVlZGVkKHZtLCBleGVj
LCBwcm9wZXJ0eU5hbWUpOwpAQCAtNjQ5LDggKzY0OSw4IEBAIHZvaWQgSlNGdW5jdGlvbjo6cmVp
ZnlOYW1lKFZNJiB2bSwgRXhlY1MKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEy
NjIvI3NlYy1leHBvcnRzLXJ1bnRpbWUtc2VtYW50aWNzLWV2YWx1YXRpb24KICAgICAvLyBXaGVu
IHRoZSBpZGVudCBpcyAiKmRlZmF1bHQqIiwgd2UgbmVlZCB0byBzZXQgImRlZmF1bHQiIGZvciB0
aGUgZWNtYSBuYW1lLgogICAgIC8vIFRoaXMgIipkZWZhdWx0KiIgbmFtZSBpcyBuZXZlciBzaG93
biB0byB1c2Vycy4KLSAgICBpZiAoZWNtYU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1
aWx0aW5OYW1lcygpLnN0YXJEZWZhdWx0UHJpdmF0ZU5hbWUoKSkKLSAgICAgICAgbmFtZSA9IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5kZWZhdWx0S2V5d29yZC5zdHJpbmcoKTsKKyAgICBpZiAoZWNt
YU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc3RhckRlZmF1bHRQcml2
YXRlTmFtZSgpKQorICAgICAgICBuYW1lID0gdm0ucHJvcGVydHlOYW1lcy0+ZGVmYXVsdEtleXdv
cmQuc3RyaW5nKCk7CiAgICAgZWxzZQogICAgICAgICBuYW1lID0gZWNtYU5hbWUuc3RyaW5nKCk7
CiAgICAgcmVpZnlOYW1lKHZtLCBleGVjLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJ
KHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDcgKzUwMiw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0UKICAgICBpZiAoIWV2YWwp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGUoZXZhbCwg
ZXhlYywgY2FsbGVlR2xvYmFsT2JqZWN0LT5nbG9iYWxUaGlzKCksIGNhbGxlZUdsb2JhbE9iamVj
dC0+Z2xvYmFsU2NvcGUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodm0uaW50ZXJw
cmV0ZXItPmV4ZWN1dGUoZXZhbCwgZXhlYywgY2FsbGVlR2xvYmFsT2JqZWN0LT5nbG9iYWxUaGlz
KCksIGNhbGxlZUdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGUoKSkpOwogfQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3RhdGUqIGV4ZWMpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsUHJvbWlzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbFBy
b21pc2UuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0ludGVybmFsUHJvbWlzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDgg
QEAgSlNJbnRlcm5hbFByb21pc2U6OkpTSW50ZXJuYWxQcm9taXNlKFZNJgogCiBKU0ludGVybmFs
UHJvbWlzZSogSlNJbnRlcm5hbFByb21pc2U6OnRoZW4oRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0
aW9uKiBvbkZ1bGZpbGxlZCwgSlNGdW5jdGlvbiogb25SZWplY3RlZCkKIHsKLSAgICBKU09iamVj
dCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPihnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ1aWx0aW5OYW1lcygpLnRoZW5QdWJsaWNOYW1lKCkpKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGdl
dChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS50aGVuUHVibGljTmFtZSgp
KSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6
OmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgQVNTRVJUKGNhbGxUeXBlICE9
IENhbGxUeXBlOjpOb25lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TGV4aWNhbEVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw4IEBAIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6OnB1dChKU0NlbGwqIGMKIAogYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6ZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCiB7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
YXJndW1lbnRzKQorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eShjZWxsLCBleGVjLCBwcm9wZXJ0eU5h
bWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAkocmV2aXNp
b24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw4IEBAIGJvb2wgSlNNYXA6OmlzSXRlcmF0b3JQcm90
b2NvbEZhc3RBbmROb24KICAgICBpZiAoc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSAhPSBn
bG9iYWxPYmplY3QtPm1hcFByb3RvdHlwZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAoZ2V0RGlyZWN0T2Zmc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT52
bSgpLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sKSAhPSBpbnZhbGlkT2Zmc2V0KQorICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBpZiAoZ2V0RGlyZWN0T2Zmc2V0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCkgIT0gaW52YWxpZE9mZnNldCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCShyZXZpc2lvbiAyMjE4MDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDE0ICs1NiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIEhhc2hNYXBCdWNr
ZXRUeXBlKiBwcmV2ID0gbV9pdGVyLmdldCgpOwogICAgICAgICBpZiAoIXByZXYpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAg
ICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IG1faXRlci0+bmV4dCgpOwogICAgICAgICB3
aGlsZSAoYnVja2V0ICYmIGJ1Y2tldC0+ZGVsZXRlZCgpKQogICAgICAgICAgICAgYnVja2V0ID0g
YnVja2V0LT5uZXh0KCk7CiAgICAgICAgIGlmICghYnVja2V0KSB7Ci0gICAgICAgICAgICBzZXRJ
dGVyYXRvcihleGVjLT52bSgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldEl0ZXJhdG9yKHZt
LCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9Ci0gICAg
ICAgIHNldEl0ZXJhdG9yKGV4ZWMtPnZtKCksIGJ1Y2tldCk7IC8vIFdlIGtlZXAgbV9pdGVyIG9u
IHRoZSBsYXN0IHZhbHVlIHNpbmNlIHRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpbiB0aGlzIGZ1bmN0
aW9uIGlzIGNhbGwgbmV4dCgpLgorICAgICAgICBzZXRJdGVyYXRvcih2bSwgYnVja2V0KTsgLy8g
V2Uga2VlcCBtX2l0ZXIgb24gdGhlIGxhc3QgdmFsdWUgc2luY2UgdGhlIGZpcnN0IHRoaW5nIHdl
IGRvIGluIHRoaXMgZnVuY3Rpb24gaXMgY2FsbCBuZXh0KCkuCiAgICAgICAgIHJldHVybiBidWNr
ZXQ7CiAgICAgfQogICAgIGJvb2wgbmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUmIHZhbHVl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDIsOSArMTAyLDEwIEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZXgK
IHsKICAgICBKU01vZHVsZUVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxl
RW52aXJvbm1lbnQqPihjZWxsKTsKICAgICBpZiAocHJvcGVydHlOYW1lc0FycmF5LmluY2x1ZGVT
dHJpbmdQcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogdGhpc09iamVjdC0+bW9kdWxlUmVjb3JkKCktPmlt
cG9ydEVudHJpZXMoKSkgewogICAgICAgICAgICAgY29uc3QgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6
OkltcG9ydEVudHJ5JiBpbXBvcnRFbnRyeSA9IHBhaXIudmFsdWU7Ci0gICAgICAgICAgICBpZiAo
IWltcG9ydEVudHJ5LmlzTmFtZXNwYWNlKGV4ZWMtPnZtKCkpKQorICAgICAgICAgICAgaWYgKCFp
bXBvcnRFbnRyeS5pc05hbWVzcGFjZSh2bSkpCiAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1l
c0FycmF5LmFkZChpbXBvcnRFbnRyeS5sb2NhbE5hbWUpOwogICAgICAgICB9CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNw
cAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxNSArNzIsMTYgQEAgdm9pZCBK
U01vZHVsZUxvYWRlcjo6ZmluaXNoQ3JlYXRpb24oRXhlYwogCiBzdGF0aWMgU3RyaW5nIHByaW50
YWJsZU1vZHVsZUtleShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQogeworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgaWYgKGtleS5pc1N0cmluZygpIHx8IGtleS5pc1N5bWJvbCgp
KQogICAgICAgICByZXR1cm4ga2V5LnRvUHJvcGVydHlLZXkoZXhlYykuaW1wbCgpOwotICAgIHJl
dHVybiBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZW1wdHlJZGVudGlmaWVyLmltcGwoKTsKKyAgICBy
ZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyLmltcGwoKTsKIH0KIAogSlNW
YWx1ZSBKU01vZHVsZUxvYWRlcjo6cHJvdmlkZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5
LCBTdGF0dXMgc3RhdHVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5wcm92
aWRlUHVibGljTmFtZSgpKSk7CisgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnByb3ZpZGVQ
dWJsaWNOYW1lKCkpKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBBU1NFUlQo
Y2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwpAQCAtOTYsNyArOTcsOCBAQCBKU1ZhbHVlIEpT
TW9kdWxlTG9hZGVyOjpwcm92aWRlKEV4ZWNTdGF0CiAKIEpTSW50ZXJuYWxQcm9taXNlKiBKU01v
ZHVsZUxvYWRlcjo6bG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBtb2R1bGVOYW1lLCBKU1ZhbHVlIHJlZmVycmVyLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7
Ci0gICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5sb2FkQW5kRXZhbHVhdGVNb2R1bGVQ
dWJsaWNOYW1lKCkpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTT2JqZWN0KiBm
dW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5i
dWlsdGluTmFtZXMoKS5sb2FkQW5kRXZhbHVhdGVNb2R1bGVQdWJsaWNOYW1lKCkpKTsKICAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERh
dGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6
Ok5vbmUpOwpAQCAtMTExLDcgKzExMyw4IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxv
YWRlcjo6bG9hZEEKIAogSlNJbnRlcm5hbFByb21pc2UqIEpTTW9kdWxlTG9hZGVyOjpsb2FkTW9k
dWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBtb2R1bGVOYW1lLCBKU1ZhbHVlIHJlZmVycmVy
LCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7Ci0gICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganND
YXN0PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFt
ZXMoKS5sb2FkTW9kdWxlUHVibGljTmFtZSgpKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPihnZXQoZXhlYywgdm0u
cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubG9hZE1vZHVsZVB1YmxpY05hbWUoKSkpOwog
ICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpnZXRD
YWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxs
VHlwZTo6Tm9uZSk7CkBAIC0xMjYsNyArMTI5LDggQEAgSlNJbnRlcm5hbFByb21pc2UqIEpTTW9k
dWxlTG9hZGVyOjpsb2FkTQogCiBKU1ZhbHVlIEpTTW9kdWxlTG9hZGVyOjpsaW5rQW5kRXZhbHVh
dGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG1vZHVsZUtleSwgSlNWYWx1ZSBzY3Jp
cHRGZXRjaGVyKQogewotICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+
KGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkubGlua0FuZEV2
YWx1YXRlTW9kdWxlUHVibGljTmFtZSgpKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPihnZXQoZXhlYywgdm0ucHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubGlua0FuZEV2YWx1YXRlTW9kdWxlUHVibGljTmFt
ZSgpKSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBK
U0M6OmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgQVNTRVJUKGNhbGxUeXBl
ICE9IENhbGxUeXBlOjpOb25lKTsKQEAgLTE0MCw3ICsxNDQsOCBAQCBKU1ZhbHVlIEpTTW9kdWxl
TG9hZGVyOjpsaW5rQW5kRXZhbHVhdGVNCiAKIEpTSW50ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxv
YWRlcjo6cmVxdWVzdEltcG9ydE1vZHVsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIG1vZHVsZUtleSwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQogewotICAgIGF1dG8qIGZ1bmN0
aW9uID0ganNDYXN0PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
dWlsdGluTmFtZXMoKS5yZXF1ZXN0SW1wb3J0TW9kdWxlUHVibGljTmFtZSgpKSk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+
KGdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5yZXF1ZXN0SW1wb3J0
TW9kdWxlUHVibGljTmFtZSgpKSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgYXV0byBj
YWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBBU1NF
UlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCShyZXZp
c2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5h
bWVzcGFjZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMSArMzcsMTIgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCwgVmVjdG9yPHN0ZDo6cGFpcjxJ
ZGVudGlmaWVyLCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbj4+JiYgcmVzb2x1dGlv
bnMpCiAgICAgeworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBKU01vZHVs
ZU5hbWVzcGFjZU9iamVjdCogb2JqZWN0ID0KICAgICAgICAgICAgIG5ldyAoCiAgICAgICAgICAg
ICAgICAgTm90TnVsbCwKLSAgICAgICAgICAgICAgICBhbGxvY2F0ZUNlbGw8SlNNb2R1bGVOYW1l
c3BhY2VPYmplY3Q+KGV4ZWMtPnZtKCkuaGVhcCwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmFs
bG9jYXRpb25TaXplKHJlc29sdXRpb25zLnNpemUoKSkpKQotICAgICAgICAgICAgSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBh
bGxvY2F0ZUNlbGw8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+KHZtLmhlYXAsIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShyZXNvbHV0aW9ucy5zaXplKCkpKSkKKyAgICAg
ICAgICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpOwogICAgICAgICBv
YmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgbW9kdWxlUmVjb3JkLCBX
VEZNb3ZlKHJlc29sdXRpb25zKSk7CiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNw
cAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsOSArMjA1LDEwIEBAIEpTVmFs
dWUgSlNNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGEKIHsKICAgICBpZiAoIW1fbW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUgPSBtX21vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmdldCgpOwogICAgIG1fbW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGUuY2xlYXIoKTsKLSAgICByZXR1cm4gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhl
Y3V0ZU1vZHVsZVByb2dyYW0oZXhlY3V0YWJsZSwgZXhlYywgbV9tb2R1bGVFbnZpcm9ubWVudC5n
ZXQoKSk7CisgICAgcmV0dXJuIHZtLmludGVycHJldGVyLT5leGVjdXRlTW9kdWxlUHJvZ3JhbShl
eGVjdXRhYmxlLCBleGVjLCBtX21vZHVsZUVudmlyb25tZW50LmdldCgpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09O
T2JqZWN0LmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OSw3ICsyNTksNyBAQCBT
dHJpbmdpZmllcjo6U3RyaW5naWZpZXIoRXhlY1N0YXRlKiBleGVjCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBtX3JlcGxhY2VyQ2FsbFR5cGUgPSBtX3JlcGxhY2VyLmFzT2JqZWN0KCkt
Pm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKG1fcmVwbGFjZXIuYXNPYmplY3QoKS5nZXQoKSwg
bV9yZXBsYWNlckNhbGxEYXRhKTsKKyAgICBtX3JlcGxhY2VyQ2FsbFR5cGUgPSBtX3JlcGxhY2Vy
LmFzT2JqZWN0KCktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEobV9yZXBsYWNlci5hc09i
amVjdCgpLmdldCgpLCBtX3JlcGxhY2VyQ2FsbERhdGEpOwogfQogCiBMb2NhbDxVbmtub3duPiBT
dHJpbmdpZmllcjo6c3RyaW5naWZ5KEhhbmRsZTxVbmtub3duPiB2YWx1ZSkKQEAgLTM3OCw3ICsz
NzgsNyBAQCBTdHJpbmdpZmllcjo6U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVyCiAgICAgSlNP
YmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRh
OwotICAgIGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKG9iamVjdCwgY2Fs
bERhdGEpICE9IENhbGxUeXBlOjpOb25lKSB7CisgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUo
dm0pLT5nZXRDYWxsRGF0YShvYmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZTo6Tm9uZSkgewog
ICAgICAgICBpZiAoaG9sZGVyLmlzQXJyYXkoKSkgewogICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJudWxsIik7CiAgICAgICAgICAgICByZXR1cm4gU3RyaW5naWZ5U3VjY2VlZGVk
OwpAQCAtNDg1LDcgKzQ4NSw3IEBAIGJvb2wgU3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4
dFByb3AKICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5TmFtZXMgPSBzdHJpbmdpZmllci5tX2Fy
cmF5UmVwbGFjZXJQcm9wZXJ0eU5hbWVzLmRhdGEoKTsKICAgICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IG9iamVjdFByb3BlcnR5TmFtZXMoZXhlYywg
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7Ci0gICAgICAgICAgICAgICAgbV9vYmplY3QtPm1l
dGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5TmFtZXMobV9vYmplY3QuZ2V0KCksIGV4ZWMsIG9i
amVjdFByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAgICAgICBt
X29iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1fb2JqZWN0Lmdl
dCgpLCBleGVjLCBvYmplY3RQcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICAg
ICAgICAgIG1fcHJvcGVydHlOYW1lcyA9IG9iamVjdFByb3BlcnR5TmFtZXMucmVsZWFzZURhdGEo
KTsKICAgICAgICAgICAgIH0KQEAgLTUxNSw3ICs1MTUsNyBAQCBib29sIFN0cmluZ2lmaWVyOjpI
b2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgICAgICAgICB2YWx1ZSA9IGFzQXJyYXkobV9vYmpl
Y3QuZ2V0KCkpLT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG1fb2JqZWN0LmdldCgpLCBQcm9wZXJ0eVNsb3Q6Oklu
dGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKLSAgICAgICAgICAgIGlmIChtX29iamVjdC0+bWV0aG9k
VGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChtX29iamVjdC5nZXQoKSwgZXhlYywg
aW5kZXgsIHNsb3QpKQorICAgICAgICAgICAgaWYgKG1fb2JqZWN0LT5tZXRob2RUYWJsZSh2bSkt
PmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgobV9vYmplY3QuZ2V0KCksIGV4ZWMsIGluZGV4LCBz
bG90KSkKICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaW5kZXgp
OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHZhbHVlID0ganNVbmRlZmluZWQo
KTsKQEAgLTUzNCw3ICs1MzQsNyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5l
eHRQcm9wCiAgICAgICAgIC8vIEdldCB0aGUgdmFsdWUuCiAgICAgICAgIFByb3BlcnR5U2xvdCBz
bG90KG1fb2JqZWN0LmdldCgpLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0
KTsKICAgICAgICAgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lID0gbV9wcm9wZXJ0eU5hbWVzLT5w
cm9wZXJ0eU5hbWVWZWN0b3IoKVtpbmRleF07Ci0gICAgICAgIGlmICghbV9vYmplY3QtPm1ldGhv
ZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChtX29iamVjdC5nZXQoKSwgZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KSkKKyAgICAgICAgaWYgKCFtX29iamVjdC0+bWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Qcm9wZXJ0eVNsb3QobV9vYmplY3QuZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xv
dCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHNs
b3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZmFsc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzMsNyArNTMzLDcgQEAg
U3RyaW5nIEpTT2JqZWN0OjpjYWxjdWxhdGVkQ2xhc3NOYW1lKEpTTwogCiAgICAgRXhlY1N0YXRl
KiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgUHJvcGVydHlTbG90IHNs
b3Qob2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoKSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OlZNSW5xdWlyeSk7Ci0gICAgUHJvcGVydHlOYW1lIGNvbnN0cnVjdG9yKGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvcik7CisgICAgUHJvcGVydHlOYW1lIGNvbnN0cnVj
dG9yKHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yKTsKICAgICBpZiAob2JqZWN0LT5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgY29uc3RydWN0b3IsIHNsb3QpKSB7CiAgICAgICAgIGlmIChzbG90
LmlzVmFsdWUoKSkgewogICAgICAgICAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvclZhbHVlID0gc2xv
dC5nZXRWYWx1ZShleGVjLCBjb25zdHJ1Y3Rvcik7CkBAIC01NTQsNyArNTU0LDcgQEAgU3RyaW5n
IEpTT2JqZWN0OjpjYWxjdWxhdGVkQ2xhc3NOYW1lKEpTTwogICAgICAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogCiAgICAgaWYgKHByb3RvdHlwZUZ1bmN0aW9uTmFtZS5pc051bGwoKSB8fCBw
cm90b3R5cGVGdW5jdGlvbk5hbWUgPT0gIk9iamVjdCIpIHsKLSAgICAgICAgU3RyaW5nIHRhYmxl
Q2xhc3NOYW1lID0gb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5jbGFzc05hbWUob2JqZWN0KTsKKyAg
ICAgICAgU3RyaW5nIHRhYmxlQ2xhc3NOYW1lID0gb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmNs
YXNzTmFtZShvYmplY3QpOwogICAgICAgICBpZiAoIXRhYmxlQ2xhc3NOYW1lLmlzTnVsbCgpICYm
IHRhYmxlQ2xhc3NOYW1lICE9ICJPYmplY3QiKQogICAgICAgICAgICAgcmV0dXJuIHRhYmxlQ2xh
c3NOYW1lOwogCkBAIC04MTcsNiArODE3LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0SW5saW5lU2xv
dyhFeGVjU3RhdGUqIAogCiBib29sIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU09iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwogICAgIAogICAgIGlmIChw
cm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKQEAgLTgyOSwxNCArODMwLDE0IEBAIGJv
b2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCAKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAogICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzogewotICAgICAg
ICB0aGlzT2JqZWN0LT5jb252ZXJ0VW5kZWNpZGVkRm9yVmFsdWUoZXhlYy0+dm0oKSwgdmFsdWUp
OworICAgICAgICB0aGlzT2JqZWN0LT5jb252ZXJ0VW5kZWNpZGVkRm9yVmFsdWUodm0sIHZhbHVl
KTsKICAgICAgICAgLy8gUmVsb29wLgogICAgICAgICByZXR1cm4gcHV0QnlJbmRleChjZWxsLCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoIXZhbHVl
LmlzSW50MzIoKSkgewotICAgICAgICAgICAgdGhpc09iamVjdC0+Y29udmVydEludDMyRm9yVmFs
dWUoZXhlYy0+dm0oKSwgdmFsdWUpOworICAgICAgICAgICAgdGhpc09iamVjdC0+Y29udmVydElu
dDMyRm9yVmFsdWUodm0sIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBwdXRCeUluZGV4KGNl
bGwsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKICAgICAgICAgfQog
ICAgICAgICBGQUxMVEhST1VHSDsKQEAgLTg0Niw3ICs4NDcsNyBAQCBib29sIEpTT2JqZWN0Ojpw
dXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
dGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBidXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtwcm9wZXJ0eU5hbWVdLnNldChleGVjLT52bSgpLCB0aGlzT2Jq
ZWN0LCB2YWx1ZSk7CisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW3Byb3BlcnR5TmFt
ZV0uc2V0KHZtLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUg
Pj0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKICAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0
UHVibGljTGVuZ3RoKHByb3BlcnR5TmFtZSArIDEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTg1NCwxMyArODU1LDEzIEBAIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCAKICAgICAgICAgCiAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAg
ICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgdGhpc09iamVjdC0+Y29u
dmVydERvdWJsZVRvQ29udGlndW91cyhleGVjLT52bSgpKTsKKyAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPmNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXModm0pOwogICAgICAgICAgICAgLy8gUmVsb29w
LgogICAgICAgICAgICAgcmV0dXJuIHB1dEJ5SW5kZXgoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogICAgICAgICB9CiAgICAgICAgIGRvdWJsZSB2YWx1ZUFz
RG91YmxlID0gdmFsdWUuYXNOdW1iZXIoKTsKICAgICAgICAgaWYgKHZhbHVlQXNEb3VibGUgIT0g
dmFsdWVBc0RvdWJsZSkgewotICAgICAgICAgICAgdGhpc09iamVjdC0+Y29udmVydERvdWJsZVRv
Q29udGlndW91cyhleGVjLT52bSgpKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPmNvbnZlcnRE
b3VibGVUb0NvbnRpZ3VvdXModm0pOwogICAgICAgICAgICAgLy8gUmVsb29wLgogICAgICAgICAg
ICAgcmV0dXJuIHB1dEJ5SW5kZXgoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hv
dWxkVGhyb3cpOwogICAgICAgICB9CkBAIC04OTEsNyArODkyLDcgQEAgYm9vbCBKU09iamVjdDo6
cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3Qp
CiAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgICAgIAot
ICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4ZWMtPnZtKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAg
ICAgICAgdmFsdWVTbG90LnNldCh2bSwgdGhpc09iamVjdCwgdmFsdWUpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIApAQCAtOTIwLDcgKzkyMSw3IEBAIGJvb2wgSlNPYmpl
Y3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCAKICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdmFsdWVTbG90
LnNldChleGVjLT52bSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIHZhbHVlU2xvdC5z
ZXQodm0sIHRoaXNPYmplY3QsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgICAgICAKQEAgLTE5NDUsMjAgKzE5NDYsMjAgQEAgSlNWYWx1ZSBKU09iamVjdDo6b3JkaW5h
cnlUb1ByaW1pdGl2ZShFeAogCiAgICAgSlNWYWx1ZSB2YWx1ZTsKICAgICBpZiAoaGludCA9PSBQ
cmVmZXJTdHJpbmcpIHsKLSAgICAgICAgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbihl
eGVjLCB0aGlzLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIGhpbnQpOworICAgICAg
ICB2YWx1ZSA9IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKGV4ZWMsIHRoaXMsIHZtLnByb3BlcnR5
TmFtZXMtPnRvU3RyaW5nLCBoaW50KTsKICAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24o
KSB8fCBzY29wZS5leGNlcHRpb24oKSA9PSB2YWx1ZS5hc0NlbGwoKSk7CiAgICAgICAgIGlmICh2
YWx1ZSkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgdmFsdWUgPSBjYWxsVG9Q
cmltaXRpdmVGdW5jdGlvbihleGVjLCB0aGlzLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWVP
ZiwgaGludCk7CisgICAgICAgIHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVuY3Rpb24oZXhlYywg
dGhpcywgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZiwgaGludCk7CiAgICAgICAgIEFTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkgPT0gdmFsdWUuYXNDZWxsKCkp
OwogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbihleGVjLCB0aGlz
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWVPZiwgaGludCk7CisgICAgICAgIHZhbHVlID0g
Y2FsbFRvUHJpbWl0aXZlRnVuY3Rpb24oZXhlYywgdGhpcywgdm0ucHJvcGVydHlOYW1lcy0+dmFs
dWVPZiwgaGludCk7CiAgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgc2NvcGUu
ZXhjZXB0aW9uKCkgPT0gdmFsdWUuYXNDZWxsKCkpOwogICAgICAgICBpZiAodmFsdWUpCiAgICAg
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVu
Y3Rpb24oZXhlYywgdGhpcywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBoaW50KTsK
KyAgICAgICAgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbihleGVjLCB0aGlzLCB2bS5w
cm9wZXJ0eU5hbWVzLT50b1N0cmluZywgaGludCk7CiAgICAgICAgIEFTU0VSVCghc2NvcGUuZXhj
ZXB0aW9uKCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkgPT0gdmFsdWUuYXNDZWxsKCkpOwogICAgICAg
ICBpZiAodmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CkBAIC0xOTc5LDEyICsxOTgw
LDEyIEBAIEpTVmFsdWUgSlNPYmplY3Q6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSoKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAotICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbjxUeXBlSGlu
dE1vZGU6OlRha2VzSGludD4oZXhlYywgdGhpcywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvUHJp
bWl0aXZlU3ltYm9sLCBwcmVmZXJyZWRUeXBlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbFRv
UHJpbWl0aXZlRnVuY3Rpb248VHlwZUhpbnRNb2RlOjpUYWtlc0hpbnQ+KGV4ZWMsIHRoaXMsIHZt
LnByb3BlcnR5TmFtZXMtPnRvUHJpbWl0aXZlU3ltYm9sLCBwcmVmZXJyZWRUeXBlKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGlmICh2YWx1ZSkKICAgICAgICAg
cmV0dXJuIHZhbHVlOwogCi0gICAgcmV0dXJuIHRoaXMtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkp
LT5kZWZhdWx0VmFsdWUodGhpcywgZXhlYywgcHJlZmVycmVkVHlwZSk7CisgICAgcmV0dXJuIHRo
aXMtPm1ldGhvZFRhYmxlKHZtKS0+ZGVmYXVsdFZhbHVlKHRoaXMsIGV4ZWMsIHByZWZlcnJlZFR5
cGUpOwogfQogCiBib29sIEpTT2JqZWN0OjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiBl
eGVjLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYgcmVzdWx0KSBjb25zdApAQCAtMjA0Myw3ICsy
MDQ0LDcgQEAgYm9vbCBKU09iamVjdDo6aGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBleAogCiAgICAg
VHlwZUluZm8gaW5mbyA9IHN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCk7CiAgICAgaWYgKGluZm8u
aW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSgpKSB7Ci0gICAgICAgIEpTVmFsdWUgcHJvdG90
eXBlID0gZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOworICAgICAg
ICBKU1ZhbHVlIHByb3RvdHlwZSA9IGdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5
cGUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAg
IHJldHVybiBkZWZhdWx0SGFzSW5zdGFuY2UoZXhlYywgdmFsdWUsIHByb3RvdHlwZSk7CiAgICAg
fQpAQCAtMjA1Nyw3ICsyMDU4LDcgQEAgYm9vbCBKU09iamVjdDo6aGFzSW5zdGFuY2UoRXhlY1N0
YXRlKiBleAogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgaGFzSW5zdGFuY2VWYWx1ZSA9IGdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaGFzSW5zdGFuY2VTeW1ib2wpOworICAgIEpT
VmFsdWUgaGFzSW5zdGFuY2VWYWx1ZSA9IGdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5oYXNJ
bnN0YW5jZVN5bWJvbCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwog
CiAgICAgcmV0dXJuIGhhc0luc3RhbmNlKGV4ZWMsIHZhbHVlLCBoYXNJbnN0YW5jZVZhbHVlKTsK
QEAgLTIxMjcsOSArMjEyOCwxMCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0CiAKIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBp
ZiAoIW1vZGUuaW5jbHVkZUpTT2JqZWN0UHJvcGVydGllcygpKSB7CiAgICAgICAgIC8vIFdlIHN0
aWxsIGhhdmUgdG8gZ2V0IG5vbi1pbmRleGVkIHByb3BlcnRpZXMgZnJvbSBhbnkgc3ViY2xhc3Nl
cyBvZiBKU09iamVjdCB0aGF0IGhhdmUgdGhlbS4KLSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJs
ZShleGVjLT52bSgpKS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjE5OCw3ICsyMjAwLDcgQEAgdm9p
ZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICB9CiAgICAgfQog
Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCkBAIC0y
ODYyLDcgKzI4NjQsNyBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleFNsb3dPckJleW9u
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6
IHsKLSAgICAgICAgY29udmVydFVuZGVjaWRlZEZvclZhbHVlKGV4ZWMtPnZtKCksIHZhbHVlKTsK
KyAgICAgICAgY29udmVydFVuZGVjaWRlZEZvclZhbHVlKHZtLCB2YWx1ZSk7CiAgICAgICAgIC8v
IFJlbG9vcC4KICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHZhbHVlLCBh
dHRyaWJ1dGVzLCBtb2RlKTsKICAgICB9CkBAIC0zMjExLDExICszMjEzLDEyIEBAIEJ1dHRlcmZs
eSogSlNPYmplY3Q6OmFsbG9jYXRlTW9yZU91dE9mTGkKIAogc3RhdGljIEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24qIGdldEN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uRm9yR2V0dGVyU2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgQ3VzdG9tR2V0
dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIsIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OlR5
cGUgdHlwZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8ga2V5ID0gc3Rk
OjptYWtlX3BhaXIoZ2V0dGVyU2V0dGVyLCAoaW50KXR5cGUpOwotICAgIEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24qIGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uID0gZXhlYy0+dm0oKS5j
dXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbk1hcC5nZXQoa2V5KTsKKyAgICBKU0N1c3RvbUdldHRl
clNldHRlckZ1bmN0aW9uKiBjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiA9IHZtLmN1c3RvbUdl
dHRlclNldHRlckZ1bmN0aW9uTWFwLmdldChrZXkpOwogICAgIGlmICghY3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb24pIHsKLSAgICAgICAgY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24gPSBKU0N1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBnZXR0ZXJTZXR0ZXIsIHR5cGUsIHByb3BlcnR5TmFtZS5wdWJsaWNO
YW1lKCkpOwotICAgICAgICBleGVjLT52bSgpLmN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uTWFw
LnNldChrZXksIGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKTsKKyAgICAgICAgY3VzdG9tR2V0
dGVyU2V0dGVyRnVuY3Rpb24gPSBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpjcmVhdGUo
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZ2V0dGVyU2V0dGVyLCB0eXBlLCBwcm9w
ZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKKyAgICAgICAgdm0uY3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb25NYXAuc2V0KGtleSwgY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24pOwogICAgIH0KICAg
ICByZXR1cm4gY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb247CiB9CkBAIC0zMjUzLDEwICszMjU2
LDEwIEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICAgICAg
aWYgKHNsb3QuaXNDdXN0b21BY2Nlc3NvcigpKQogICAgICAgICAgICAgZ2V0dGVyU2V0dGVyID0g
c2xvdC5jdXN0b21HZXR0ZXJTZXR0ZXIoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBK
U1ZhbHVlIG1heWJlR2V0dGVyU2V0dGVyID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPnZt
KCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBKU1ZhbHVlIG1heWJlR2V0dGVyU2V0dGVy
ID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAg
aWYgKCFtYXliZUdldHRlclNldHRlcikgewogICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnJl
aWZ5QWxsU3RhdGljUHJvcGVydGllcyhleGVjKTsKLSAgICAgICAgICAgICAgICBtYXliZUdldHRl
clNldHRlciA9IHRoaXNPYmplY3QtPmdldERpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUp
OworICAgICAgICAgICAgICAgIG1heWJlR2V0dGVyU2V0dGVyID0gdGhpc09iamVjdC0+Z2V0RGly
ZWN0KHZtLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBBU1NF
UlQobWF5YmVHZXR0ZXJTZXR0ZXIpOwpAQCAtMzYyMiw3ICszNjI1LDcgQEAgSlNWYWx1ZSBKU09i
amVjdDo6Z2V0TWV0aG9kKEV4ZWNTdGF0ZSogZQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICB9CiAKLSAgICBjYWxsVHlwZSA9IG1ldGhvZC5hc0NlbGwoKS0+bWV0aG9kVGFibGUo
KS0+Z2V0Q2FsbERhdGEobWV0aG9kLmFzQ2VsbCgpLCBjYWxsRGF0YSk7CisgICAgY2FsbFR5cGUg
PSBtZXRob2QuYXNDZWxsKCktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEobWV0aG9kLmFz
Q2VsbCgpLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKSB7
CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIGVycm9yTWVzc2FnZSk7CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA0LDcgKzEwMDQs
NyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICB0ZW1wbGF0ZTxQdXRNb2RlPgogICAgIGJvb2wg
cHV0RGlyZWN0SW50ZXJuYWwoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0
dHIsIFB1dFByb3BlcnR5U2xvdCYpOwotICAgIGJvb2wgY2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUo
RXhlY1N0YXRlKiBleGVjLCBWTSYsIFByb3BlcnR5TmFtZSk7CisgICAgYm9vbCBjYW5QZXJmb3Jt
RmFzdFB1dElubGluZShWTSYsIFByb3BlcnR5TmFtZSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBORVZFUl9JTkxJTkUgYm9vbCBwdXRJbmxpbmVTbG93KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKQEAgLTExNDcsMjggKzExNDcsMzAgQEAg
SlNfRVhQT1JUX1BSSVZBVEUgRW5jb2RlZEpTVmFsdWUgSlNDX0hPUwogaW5saW5lIEpTT2JqZWN0
KiBKU09iamVjdDo6Y3JlYXRlUmF3T2JqZWN0KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgSlNPYmplY3QqIGZpbmFsT2JqZWN0ID0gbmV3ICgKICAgICAgICAgTm90
TnVsbCwgCiAgICAgICAgIGFsbG9jYXRlQ2VsbDxKU0ZpbmFsT2JqZWN0PigKLSAgICAgICAgICAg
ICpleGVjLT5oZWFwKCksCisgICAgICAgICAgICB2bS5oZWFwLAogICAgICAgICAgICAgSlNGaW5h
bE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKQogICAg
ICAgICApCi0gICAgKSBKU09iamVjdChleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7
Ci0gICAgZmluYWxPYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOworICAgICkgSlNP
YmplY3Qodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICBmaW5hbE9iamVjdC0+ZmluaXNo
Q3JlYXRpb24odm0pOwogICAgIHJldHVybiBmaW5hbE9iamVjdDsKIH0KIAogaW5saW5lIEpTRmlu
YWxPYmplY3QqIEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIEpTRmluYWxPYmplY3QqIGZpbmFsT2JqZWN0ID0gbmV3ICgKICAg
ICAgICAgTm90TnVsbCwgCiAgICAgICAgIGFsbG9jYXRlQ2VsbDxKU0ZpbmFsT2JqZWN0PigKLSAg
ICAgICAgICAgICpleGVjLT5oZWFwKCksCisgICAgICAgICAgICB2bS5oZWFwLAogICAgICAgICAg
ICAgYWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKQogICAgICAgICAp
Ci0gICAgKSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsK
LSAgICBmaW5hbE9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CisgICAgKSBKU0Zp
bmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgZmluYWxPYmplY3QtPmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gZmluYWxPYmplY3Q7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZp
c2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsOSArNjAsOSBAQCB2b2lkIGNyZWF0ZUxpc3RG
cm9tQXJyYXlMaWtlKEV4ZWNTdGF0ZSogCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wg
SlNPYmplY3Q6OmNhblBlcmZvcm1GYXN0UHV0SW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0
OjpjYW5QZXJmb3JtRmFzdFB1dElubGluZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgaWYgKFVOTElLRUxZKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkudW5kZXJzY29yZVByb3RvKSkKKyAgICBpZiAoVU5MSUtFTFkocHJvcGVydHlOYW1lID09
IHZtLnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2V0dGVycyBvciBnZXR0ZXJzIGlu
IHRoZSBwcm90b3R5cGUgY2hhaW4KQEAgLTIxMSw3ICsyMTEsNyBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgSlNPYmplY3Q6OnB1dElubGluZUZvCiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+
IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKQogICAgICAgICByZXR1cm4gcHV0QnlJ
bmRleCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmlj
dE1vZGUoKSk7CiAKLSAgICBpZiAodGhpc09iamVjdC0+Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUo
ZXhlYywgdm0sIHByb3BlcnR5TmFtZSkpIHsKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuUGVyZm9y
bUZhc3RQdXRJbmxpbmUodm0sIHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgQVNTRVJUKCF0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8o
dm0sIHByb3BlcnR5TmFtZSkpOwogICAgICAgICBpZiAoIXRoaXNPYmplY3QtPnB1dERpcmVjdElu
dGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KSkKICAg
ICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZXhlYywgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2Rl
KCksIEFTQ0lJTGl0ZXJhbChSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOwpAQCAtMjI2LDEw
ICsyMjYsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVGbwogLy8g
aHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1s
I3NlYy1oYXNvd25wcm9wZXJ0eQogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpoYXNPd25Q
cm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkgY29uc3QKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEFT
U0VSVChzbG90LmludGVybmFsTWV0aG9kVHlwZSgpID09IFByb3BlcnR5U2xvdDo6SW50ZXJuYWxN
ZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7Ci0gICAgaWYgKExJS0VMWShjb25zdF9jYXN0PEpT
T2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eVNs
b3QgPT0gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCkpCisgICAgaWYgKExJS0VMWShjb25z
dF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlT
bG90ID09IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpKQogICAgICAgICByZXR1cm4gSlNP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3Qq
Pih0aGlzKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdChjb25z
dF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAg
cmV0dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+bWV0aG9kVGFibGUodm0pLT5nZXRP
d25Qcm9wZXJ0eVNsb3QoY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwogfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6Omhhc093blBy
b3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lv
biAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1Vu
c2NvcGFibGUoRXhlY1N0YXQKICAgICBpZiAoc2NvcGUtPnR5cGUoKSAhPSBXaXRoU2NvcGVUeXBl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU1ZhbHVlIHVuc2NvcGFibGVzID0gb2Jq
ZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuc2NvcGFibGVzU3ltYm9sKTsK
KyAgICBKU1ZhbHVlIHVuc2NvcGFibGVzID0gb2JqZWN0LT5nZXQoZXhlYywgdm0ucHJvcGVydHlO
YW1lcy0+dW5zY29wYWJsZXNTeW1ib2wpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwogICAgIGlmICghdW5zY29wYWJsZXMuaXNPYmplY3QoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMjU4LDYgKzI1OCw3IEBAIEFMV0FZU19JTkxJTkUgSlNPYmplY3Qq
IEpTU2NvcGU6OnJlc29sdmUKIAogSlNWYWx1ZSBKU1Njb3BlOjpyZXNvbHZlU2NvcGVGb3JIb2lz
dGluZ0Z1bmNEZWNsSW5FdmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0
byByZXR1cm5QcmVkaWNhdGUgPSBbJl0gKEpTU2NvcGUqIHNjb3BlKSAtPiBib29sIHsKICAgICAg
ICAgcmV0dXJuIHNjb3BlLT5pc1ZhclNjb3BlKCk7CiAgICAgfTsKQEAgLTI2Nyw4ICsyNjgsOCBA
QCBKU1ZhbHVlIEpTU2NvcGU6OnJlc29sdmVTY29wZUZvckhvaXN0aW5nCiAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IHJlc29sdmUoZXhlYywgc2NvcGUsIGlkZW50LCByZXR1cm5QcmVkaWNhdGUsIHNr
aXBQcmVkaWNhdGUpOwogICAgIAogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYgKEpT
U2NvcGUqIHNjb3BlID0ganNEeW5hbWljQ2FzdDxKU1Njb3BlKj4oZXhlYy0+dm0oKSwgb2JqZWN0
KSkgewotICAgICAgICBpZiAoU3ltYm9sVGFibGUqIHNjb3BlU3ltYm9sVGFibGUgPSBzY29wZS0+
c3ltYm9sVGFibGUoZXhlYy0+dm0oKSkpIHsKKyAgICBpZiAoSlNTY29wZSogc2NvcGUgPSBqc0R5
bmFtaWNDYXN0PEpTU2NvcGUqPih2bSwgb2JqZWN0KSkgeworICAgICAgICBpZiAoU3ltYm9sVGFi
bGUqIHNjb3BlU3ltYm9sVGFibGUgPSBzY29wZS0+c3ltYm9sVGFibGUodm0pKSB7CiAgICAgICAg
ICAgICByZXN1bHQgPSBzY29wZS0+aXNHbG9iYWxPYmplY3QoKQogICAgICAgICAgICAgICAgID8g
SlNPYmplY3Q6OmlzRXh0ZW5zaWJsZShvYmplY3QsIGV4ZWMpCiAgICAgICAgICAgICAgICAgOiBz
Y29wZVN5bWJvbFRhYmxlLT5zY29wZVR5cGUoKSA9PSBTeW1ib2xUYWJsZTo6U2NvcGVUeXBlOjpW
YXJTY29wZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAJKHJl
dmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksOCBAQCBib29sIEpTU2V0Ojppc0l0ZXJhdG9y
UHJvdG9jb2xGYXN0QW5kTm9uCiAgICAgaWYgKHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkg
IT0gZ2xvYmFsT2JqZWN0LT5qc1NldFByb3RvdHlwZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoZ2V0RGlyZWN0T2Zmc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2Jq
ZWN0LT52bSgpLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sKSAhPSBpbnZhbGlkT2Zmc2V0
KQorICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBpZiAoZ2V0RGlyZWN0T2Zm
c2V0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCkgIT0gaW52YWxpZE9mZnNl
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCShyZXZpc2lvbiAy
MjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDE0ICs1NiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIEhhc2hN
YXBCdWNrZXRUeXBlKiBwcmV2ID0gbV9pdGVyLmdldCgpOwogICAgICAgICBpZiAoIXByZXYpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IG1faXRlci0+bmV4dCgpOwogICAg
ICAgICB3aGlsZSAoYnVja2V0ICYmIGJ1Y2tldC0+ZGVsZXRlZCgpKQogICAgICAgICAgICAgYnVj
a2V0ID0gYnVja2V0LT5uZXh0KCk7CiAgICAgICAgIGlmICghYnVja2V0KSB7Ci0gICAgICAgICAg
ICBzZXRJdGVyYXRvcihleGVjLT52bSgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldEl0ZXJh
dG9yKHZtLCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9
Ci0gICAgICAgIHNldEl0ZXJhdG9yKGV4ZWMtPnZtKCksIGJ1Y2tldCk7IC8vIFdlIGtlZXAgbV9p
dGVyIG9uIHRoZSBsYXN0IHZhbHVlIHNpbmNlIHRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpbiB0aGlz
IGZ1bmN0aW9uIGlzIGNhbGwgbmV4dCgpLgorICAgICAgICBzZXRJdGVyYXRvcih2bSwgYnVja2V0
KTsgLy8gV2Uga2VlcCBtX2l0ZXIgb24gdGhlIGxhc3QgdmFsdWUgc2luY2UgdGhlIGZpcnN0IHRo
aW5nIHdlIGRvIGluIHRoaXMgZnVuY3Rpb24gaXMgY2FsbCBuZXh0KCkuCiAgICAgICAgIHJldHVy
biBidWNrZXQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmcuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0Miw3ICs0NDIsOCBAQCBK
U1ZhbHVlIEpTU3RyaW5nOjp0b1RoaXMoSlNDZWxsKiBjZWxsLCBFCiAKIGJvb2wgSlNTdHJpbmc6
OmdldFN0cmluZ1Byb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKLSAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoKSB7CiAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJl
cihsZW5ndGgoKSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5oCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NjksNyArNjY5LDggQEAgQUxXQVlT
X0lOTElORSBKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaAogCiBBTFdBWVNfSU5MSU5FIGJvb2wg
SlNTdHJpbmc6OmdldFN0cmluZ1Byb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoKSB7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9udEVudW0gfCBEb250RGVsZXRl
IHwgUmVhZE9ubHksIGpzTnVtYmVyKGxlbmd0aCgpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgSlNNYXAqIG1h
cCA9IEpTTWFwOjpjcmVhdGUoZXhlYywgdm0sIG1hcFN0cnVjdHVyZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKLSAgICBKU1ZhbHVlIGFkZGVy
RnVuY3Rpb24gPSBtYXAtPkpTT2JqZWN0OjpnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygp
LnNldCk7CisgICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9uID0gbWFwLT5KU09iamVjdDo6Z2V0KGV4
ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnNldCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERh
dGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIE1vZHVs
ZVByb2dyYW1FeAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCk7Ci0gICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZT4oKmV4ZWMtPmhlYXAo
KSkpIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKGV4ZWMsIHNvdXJjZSk7CisgICAgTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxN
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZT4odm0uaGVhcCkpIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxl
KGV4ZWMsIHNvdXJjZSk7CiAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0o
KSk7CiAKICAgICBQYXJzZXJFcnJvciBlcnJvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjIxODAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzA2LDcgKzMwNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0UHJvdG8KIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhl
IFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZCBvZiB0b1N0cmluZyBwYXNzaW5nIHRoZSB0aGlzIHZh
bHVlIGFuZCBubyBhcmd1bWVudHMuCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY2FsbChleGVjLCB0b1N0cmluZywgY2FsbFR5cGUsIGNhbGxEYXRhLCB0
aGlzVmFsdWUsIGV4ZWMtPmVtcHR5TGlzdCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjYWxsKGV4ZWMsIHRvU3RyaW5nLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgKnZt
LmVtcHR5TGlzdCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFBy
b3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjIxODAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUHJv
Z3JhbUV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSkKICAgICB7Ci0gICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvZ3JhbUV4ZWN1dGFibGU+KCpleGVjLT5oZWFw
KCkpKSBQcm9ncmFtRXhlY3V0YWJsZShleGVjLCBzb3VyY2UpOwotICAgICAgICBleGVjdXRhYmxl
LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxQcm9ncmFtRXhlY3V0YWJsZT4odm0uaGVhcCkpIFByb2dyYW1FeGVjdXRh
YmxlKGV4ZWMsIHNvdXJjZSk7CisgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKHZt
KTsKICAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDIyMTgw
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDggQEAgdm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKgogCiBib29sIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxhc3RJbmRleCkgeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sYXN0SW5kZXgpIHsKICAg
ICAgICAgUmVnRXhwT2JqZWN0KiByZWdFeHAgPSBhc1JlZ0V4cE9iamVjdChvYmplY3QpOwogICAg
ICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gcmVnRXhwLT5tX2xhc3RJbmRleElzV3JpdGFibGUg
PyBEb250RGVsZXRlIHwgRG9udEVudW0gOiBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25s
eTsKICAgICAgICAgc2xvdC5zZXRWYWx1ZShyZWdFeHAsIGF0dHJpYnV0ZXMsIHJlZ0V4cC0+Z2V0
TGFzdEluZGV4KCkpOwpAQCAtNzMsMjkgKzc0LDMzIEBAIGJvb2wgUmVnRXhwT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlMKIAogYm9vbCBSZWdFeHBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQog
ewotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxhc3RJbmRl
eCkKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0u
cHJvcGVydHlOYW1lcy0+bGFzdEluZGV4KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0
dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAK
IHZvaWQgUmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCi0gICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpOworICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sYXN0SW5kZXgpOwogICAgIEJhc2U6Omdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOwogfQogCiB2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKLSAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxhc3RJbmRleCk7CisgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmxhc3RJbmRleCk7CiAgICAgQmFzZTo6Z2V0
UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB2
b2lkIFJlZ0V4cE9iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBpZiAo
bW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpOworICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sYXN0SW5kZXgpOwogICAgIEJhc2U6OmdldEdlbmVy
aWNQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAK
QEAgLTE0NCwxMiArMTQ5LDEzIEBAIHN0YXRpYyBib29sIHJlZ0V4cE9iamVjdFNldExhc3RJbmRl
eE5vblMKIAogYm9vbCBSZWdFeHBPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgUmVnRXhwT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJlZ0V4cE9iamVjdCo+KGNlbGwpOwogCiAgICAgaWYg
KFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCiAgICAgICAg
IHJldHVybiBvcmRpbmFyeVNldFNsb3coZXhlYywgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CiAKLSAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpIHsKKyAgICBp
ZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxhc3RJbmRleCkgewogICAgICAg
ICBib29sIHJlc3VsdCA9IGFzUmVnRXhwT2JqZWN0KGNlbGwpLT5zZXRMYXN0SW5kZXgoZXhlYywg
dmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwogICAgICAgICBzbG90LnNldEN1c3RvbVZhbHVl
KGFzUmVnRXhwT2JqZWN0KGNlbGwpLCBzbG90LmlzU3RyaWN0TW9kZSgpCiAgICAgICAgICAgICA/
IHJlZ0V4cE9iamVjdFNldExhc3RJbmRleFN0cmljdApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDIyMTgwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Miw4ICs3Miw5IEBAIHB1YmxpYzoKICAgICAKICAgICB1aW50MzJfdCBsZW5n
dGgoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICAgICAgaWYgKFVOTElLRUxZKG1fb3ZlcnJvZGVUaGluZ3MpKQotICAgICAgICAg
ICAgcmV0dXJuIGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQz
MihleGVjKTsKKyAgICAgICAgICAgIHJldHVybiBnZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAgICAgICAgcmV0dXJuIGludGVybmFsTGVuZ3RoKCk7
CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0
RXZhbEFjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw4ICszNiw5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJpY3RFdmFsQWN0
aXZhdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogY3VycmVudFNjb3BlKQog
ICAgIHsKLSAgICAgICAgU3RyaWN0RXZhbEFjdGl2YXRpb24qIGxleGljYWxFbnZpcm9ubWVudCA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmljdEV2YWxBY3RpdmF0aW9uPigqZXhlYy0+
aGVhcCgpKSkgU3RyaWN0RXZhbEFjdGl2YXRpb24oZXhlYywgY3VycmVudFNjb3BlKTsKLSAgICAg
ICAgbGV4aWNhbEVudmlyb25tZW50LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKKyAgICAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgU3RyaWN0RXZhbEFjdGl2YXRpb24qIGxl
eGljYWxFbnZpcm9ubWVudCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmljdEV2YWxB
Y3RpdmF0aW9uPih2bS5oZWFwKSkgU3RyaWN0RXZhbEFjdGl2YXRpb24oZXhlYywgY3VycmVudFNj
b3BlKTsKKyAgICAgICAgbGV4aWNhbEVudmlyb25tZW50LT5maW5pc2hDcmVhdGlvbih2bSk7CiAg
ICAgICAgIHJldHVybiBsZXhpY2FsRW52aXJvbm1lbnQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDIy
MTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDggQEAgYm9vbCBTdHJpbmdPYmplY3Q6OnB1dEJ5
SW5kZXgoSlNDZWxsKiBjZQogCiBzdGF0aWMgYm9vbCBpc1N0cmluZ093blByb3BlcnR5KEV4ZWNT
dGF0ZSogZXhlYywgU3RyaW5nT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKQorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChz
dGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkg
ewogICAgICAgICBpZiAob2JqZWN0LT5pbnRlcm5hbFZhbHVlKCktPmNhbkdldEluZGV4KGluZGV4
LnZhbHVlKCkpKQpAQCAtMTMyLDggKzEzMyw5IEBAIGJvb2wgU3RyaW5nT2JqZWN0OjpkZWZpbmVP
d25Qcm9wZXJ0eShKU08KIAogYm9vbCBTdHJpbmdPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgU3RyaW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PFN0cmluZ09iamVjdCo+KGNlbGwpOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKKyAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpOwogICAgIGlm
IChpbmRleCAmJiB0aGlzT2JqZWN0LT5pbnRlcm5hbFZhbHVlKCktPmNhbkdldEluZGV4KGluZGV4
LnZhbHVlKCkpKQpAQCAtMTYyLDkgKzE2NCwxMCBAQCB2b2lkIFN0cmluZ09iamVjdDo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKCiAKIHZvaWQgU3RyaW5nT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3Ry
aW5nT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgpOwogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJW
TVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw5ICsxMTcsMTAgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiB2b2lkIEpTRG9sbGFyVk1Qcm90
b3R5cGU6OmdjKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGlmICghZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2soZXhlYykpCiAgICAgICAgIHJl
dHVybjsKLSAgICBleGVjLT5oZWFwKCktPmNvbGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNjb3Bl
OjpGdWxsKTsKKyAgICB2bS5oZWFwLmNvbGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpG
dWxsKTsKIH0KICAgICAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uR0MoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTMwLDkgKzEzMSwxMCBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAKIHZvaWQgSlNEb2xsYXJWTVByb3RvdHlwZTo6
ZWRlbkdDKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGlmICghZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2soZXhlYykpCiAgICAgICAgIHJldHVy
bjsKLSAgICBleGVjLT5oZWFwKCktPmNvbGxlY3RTeW5jKENvbGxlY3Rpb25TY29wZTo6RWRlbik7
CisgICAgdm0uaGVhcC5jb2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkVkZW4pOwogfQogCiBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVkZW5HQyhFeGVjU3Rh
dGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0Miw3ICszNDIsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjpldmFsdWF0CiAgICAgaWYgKEpTT2JqZWN0KiBzdGFydEZ1bmN0aW9uID0gbV9z
dGFydEZ1bmN0aW9uLmdldCgpKSB7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAg
ICBDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoc3RhcnRGdW5jdGlvbiwgY2Fs
bERhdGEpOwotICAgICAgICBjYWxsKGV4ZWMsIHN0YXJ0RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxs
RGF0YSwganNVbmRlZmluZWQoKSwgZXhlYy0+ZW1wdHlMaXN0KCkpOworICAgICAgICBjYWxsKGV4
ZWMsIHN0YXJ0RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgKnZt
LmVtcHR5TGlzdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4NiBAQAorMjAxNy0wOS0wOSAg
TWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQXZvaWQgZHVwbGljYXRl
IGNvbXB1dGF0aW9ucyBvZiBFeGVjU3RhdGU6OnZtKCkuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY2NDcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGlzIGlzIG9u
bHkgYSByZWZhY3RvcmluZyBwYXRjaC4gIFRoZXJlIGlzIG5vCisgICAgICAgIHNpZ25pZmljYW50
IGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJv
Y2Vzc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNEUFByb2Nlc3Nvcjo6Y2FsbFNjcmlwdCBj
b25zdCk6CisgICAgICAgICogTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2Vt
ZW50Lm1tOgorICAgICAgICAoV2ViQ29yZTo6UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Omlu
c3RhbGxSZXBsYWNlbWVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29uc3RydWN0Q3VzdG9tRWxlbWVudFN5bmNocm9ub3VzbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjp1cGdyYWRlRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6Omludm9rZUNhbGxi
YWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRSZWNvcmQuaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTU1hcExpa2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZvcndh
cmRTaXplVG9NYXBMaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmRFbnRyaWVzVG9NYXBM
aWtlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmRLZXlzVG9NYXBMaWtlKToKKyAgICAgICAg
KFdlYkNvcmU6OmZvcndhcmRWYWx1ZXNUb01hcExpa2UpOgorICAgICAgICAoV2ViQ29yZTo6Zm9y
d2FyZEdldFRvTWFwTGlrZSk6CisgICAgICAgIChXZWJDb3JlOjpmb3J3YXJkSGFzVG9NYXBMaWtl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpqc0RPTVdpbmRvd0dldE93blByb3BlcnR5U2xvdFJlc3RyaWN0ZWRBY2Nlc3Mp
OgorICAgICAgICAoV2ViQ29yZTo6YWRkQ3Jvc3NPcmlnaW5XaW5kb3dPd25Qcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnJlcG9ydE1lbW9yeUZvckRvY3VtZW50SWZGcmFtZWxlc3MpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXJy
b3JIYW5kbGVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbWFnZURh
dGFDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6cHV0Q29tbW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZENyb3NzT3JpZ2luTG9jYXRpb25Qcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZENyb3NzT3JpZ2luTG9jYXRpb25Pd25Qcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmRlZmluZU93blByb3BlcnR5KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb25Qcm90b3R5cGU6OnB1dCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0xvY2F0aW9uUHJvdG90eXBlOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24p
OgorICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVjdC5jcHA6CisgICAgICAgIChfTlBOX1NldFBy
b3BlcnR5KToKKyAgICAgICAgKF9OUE5fUmVtb3ZlUHJvcGVydHkpOgorICAgICAgICAoX05QTl9F
bnVtZXJhdGUpOgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFuY2UuY3BwOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6Q1J1bnRpbWVNZXRob2Q6OmNyZWF0ZSk6CisgICAgICAgICogYnJpZGdl
L29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc2V0
VmFsdWU6Zm9yS2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgcmVtb3ZlV2ViU2Ny
aXB0S2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc2V0V2ViU2NyaXB0VmFsdWVB
dEluZGV4OnZhbHVlOl0pOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW06
CisgICAgICAgIChPYmpDUnVudGltZU1ldGhvZDo6Y3JlYXRlKToKKyAgICAgICAgKiBicmlkZ2Uv
b2JqYy9vYmpjX3J1bnRpbWUuaDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGYWxsYmFj
a09iamVjdEltcDo6Y3JlYXRlKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5jcHA6
CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpT
Qzo6UnVudGltZUFycmF5OjpwdXQpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5Lmg6
CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKiBicmlkZ2Uv
cnVudGltZV9tZXRob2QuY3BwOgorICAgICAgICAoSlNDOjpSdW50aW1lTWV0aG9kOjpnZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX21ldGhvZC5oOgorICAgICAg
ICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50Ojp1cGRhdGVDYXB0aW9uQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OnNldENvbnRyb2xsZXJKU1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFDb250cm9sc0FmdGVyUHJl
c2VudGF0aW9uTW9kZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
OjpnZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1cyk6CisgICAgICAgICogaHRtbC9IVE1MUGx1
Z0luSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QpOgorICAgICAgICAqIHRlc3RpbmcvSW50
ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6Y2xvbmVBcnJheUJ1ZmZl
cik6CisKIDIwMTctMDktMDggIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMjE3NzMuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3Bw
CShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1NEUFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzNiw3ICs1MzYsNyBAQCBib29s
IFNEUFByb2Nlc3Nvcjo6Y2FsbFNjcmlwdChjb25zdCBTdHJpCiAKICAgICBKU0M6OkpTT2JqZWN0
KiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgSlNDOjpDYWxs
RGF0YSBjYWxsRGF0YTsKLSAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPm1l
dGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgSlNDOjpD
YWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRh
KGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IEpTQzo6Q2FsbFR5cGU6
Ok5vbmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dC5tbQkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5z
L1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyAr
MTk0LDcgQEAgYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbAogICAgIEpT
Qzo6SlNPYmplY3QqIHJlcGxhY2VtZW50T2JqZWN0ID0gcmVwbGFjZW1lbnRGdW5jdGlvbi50b09i
amVjdChleGVjKTsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIEpTQzo6Q2Fs
bERhdGEgY2FsbERhdGE7Ci0gICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IHJlcGxhY2VtZW50
T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShyZXBsYWNlbWVudE9iamVjdCwgY2Fs
bERhdGEpOworICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSByZXBsYWNlbWVudE9iamVjdC0+
bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShyZXBsYWNlbWVudE9iamVjdCwgY2FsbERhdGEp
OwogICAgIGlmIChjYWxsVHlwZSA9PSBKU0M6OkNhbGxUeXBlOjpOb25lKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tE
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxi
YWNrRGF0YS5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTcgKzQ0LDE4IEBA
IEpTVmFsdWUgSlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKEoKICAgICBBU1NFUlQoY2Fs
bGJhY2spOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0Lmdsb2JhbEV4ZWMo
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTVmFsdWUgZnVuY3Rpb247CiAgICAg
Q2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBDYWxsVHlwZTo6Tm9u
ZTsKIAogICAgIGlmIChtZXRob2QgIT0gQ2FsbGJhY2tUeXBlOjpPYmplY3QpIHsKICAgICAgICAg
ZnVuY3Rpb24gPSBjYWxsYmFjazsKLSAgICAgICAgY2FsbFR5cGUgPSBjYWxsYmFjay0+bWV0aG9k
VGFibGUoKS0+Z2V0Q2FsbERhdGEoY2FsbGJhY2ssIGNhbGxEYXRhKTsKKyAgICAgICAgY2FsbFR5
cGUgPSBjYWxsYmFjay0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShjYWxsYmFjaywgY2Fs
bERhdGEpOwogICAgIH0KICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpIHsKICAg
ICAgICAgaWYgKG1ldGhvZCA9PSBDYWxsYmFja1R5cGU6OkZ1bmN0aW9uKSB7Ci0gICAgICAgICAg
ICByZXR1cm5lZEV4Y2VwdGlvbiA9IEpTQzo6RXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMpKTsKKyAgICAgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0g
SlNDOjpFeGNlcHRpb246OmNyZWF0ZSh2bSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMpKTsKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIApAQCAtNjIsNyArNjMsNyBAQCBK
U1ZhbHVlIEpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFjayhKCiAgICAgICAgIGZ1bmN0aW9u
ID0gY2FsbGJhY2stPmdldChleGVjLCBmdW5jdGlvbk5hbWUpOwogICAgICAgICBjYWxsVHlwZSA9
IGdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgIGlmIChjYWxsVHlwZSA9
PSBDYWxsVHlwZTo6Tm9uZSkgewotICAgICAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBKU0M6
OkV4Y2VwdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGNyZWF0ZVR5cGVFcnJvcihleGVjKSk7Cisg
ICAgICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IEpTQzo6RXhjZXB0aW9uOjpjcmVhdGUodm0s
IGNyZWF0ZVR5cGVFcnJvcihleGVjKSk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwog
ICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0
b21FbGVtZW50SW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyMjE4MDApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgc3RhdGljIFJlZlB0cjxFbGVtZW50
PiBjb25zdHJ1Y3RDdXN0b21FbAogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7Ci0gICAgQ29uc3RydWN0
VHlwZSBjb25zdHJ1Y3RUeXBlID0gY29uc3RydWN0b3ItPm1ldGhvZFRhYmxlKCktPmdldENvbnN0
cnVjdERhdGEoY29uc3RydWN0b3IsIGNvbnN0cnVjdERhdGEpOworICAgIENvbnN0cnVjdFR5cGUg
Y29uc3RydWN0VHlwZSA9IGNvbnN0cnVjdG9yLT5tZXRob2RUYWJsZSh2bSktPmdldENvbnN0cnVj
dERhdGEoY29uc3RydWN0b3IsIGNvbnN0cnVjdERhdGEpOwogICAgIGlmIChjb25zdHJ1Y3RUeXBl
ID09IENvbnN0cnVjdFR5cGU6Ok5vbmUpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTg5LDcgKzE4OSw3IEBAIHZvaWQgSlNDdXN0
b21FbGVtZW50SW50ZXJmYWNlOjp1cGdyYWRlRWwKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwogCiAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwotICAgIENv
bnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IG1fY29uc3RydWN0b3ItPm1ldGhvZFRhYmxlKCkt
PmdldENvbnN0cnVjdERhdGEobV9jb25zdHJ1Y3Rvci5nZXQoKSwgY29uc3RydWN0RGF0YSk7Cisg
ICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gbV9jb25zdHJ1Y3Rvci0+bWV0aG9kVGFi
bGUodm0pLT5nZXRDb25zdHJ1Y3REYXRhKG1fY29uc3RydWN0b3IuZ2V0KCksIGNvbnN0cnVjdERh
dGEpOwogICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGU6Ok5vbmUpIHsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIzMSw3ICsy
MzEsOCBAQCB2b2lkIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6aW52b2tlQ2FsCiAgICAgICAg
IHJldHVybjsKIAogICAgIFJlZjxKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U+IHByb3RlY3RlZFRo
aXMoKnRoaXMpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1faXNvbGF0ZWRXb3JsZC0+dm0oKSk7
CisgICAgVk0mIHZtID0gbV9pc29sYXRlZFdvcmxkLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKIAogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQoY29udGV4dC0+aXNE
b2N1bWVudCgpKTsKQEAgLTI0MSw3ICsyNDIsNyBAQCB2b2lkIEpTQ3VzdG9tRWxlbWVudEludGVy
ZmFjZTo6aW52b2tlQ2FsCiAgICAgSlNPYmplY3QqIGpzRWxlbWVudCA9IGFzT2JqZWN0KHRvSlMo
c3RhdGUsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7
Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBjYWxsYmFjay0+bWV0aG9kVGFibGUoKS0+Z2V0Q2Fs
bERhdGEoY2FsbGJhY2ssIGNhbGxEYXRhKTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGNhbGxi
YWNrLT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhKGNhbGxiYWNrLCBjYWxsRGF0YSk7CiAg
ICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKIAogICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnRSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnRSZWNvcmQuaAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcg
Kzg2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IAogICAgIAog
ICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgogICAg
ICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3MpOwotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwor
ICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmpl
Y3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CiAKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01NYXBMaWtlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01NYXBMaWtlLmgJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NTWFwTGlrZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSwyMiAr
ODksMjYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdgogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZFNp
emVUb01hcExpa2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBXcmFwcGVyQ2xhc3MmIG1hcExpa2Up
CiB7Ci0gICAgcmV0dXJuIGZvcndhcmRBdHRyaWJ1dGVHZXR0ZXJUb0JhY2tpbmdNYXAoc3RhdGUs
IG1hcExpa2UsIHN0YXRlLnByb3BlcnR5TmFtZXMoKS5zaXplKTsKKyAgICBKU0M6OlZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgcmV0dXJuIGZvcndhcmRBdHRyaWJ1dGVHZXR0ZXJUb0JhY2tpbmdN
YXAoc3RhdGUsIG1hcExpa2UsIHZtLnByb3BlcnR5TmFtZXMtPnNpemUpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZEVudHJp
ZXNUb01hcExpa2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBXcmFwcGVyQ2xhc3MmIG1hcExpa2Up
CiB7Ci0gICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAoc3RhdGUsIG1h
cExpa2UsIHN0YXRlLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVibGlj
TmFtZSgpKTsKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgcmV0dXJuIGZvcndh
cmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAoc3RhdGUsIG1hcExpa2UsIHZtLnByb3BlcnR5TmFt
ZXMtPmJ1aWx0aW5OYW1lcygpLmVudHJpZXNQdWJsaWNOYW1lKCkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZEtleXNUb01h
cExpa2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBXcmFwcGVyQ2xhc3MmIG1hcExpa2UpCiB7Ci0g
ICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAoc3RhdGUsIG1hcExpa2Us
IHN0YXRlLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5rZXlzUHVibGljTmFtZSgpKTsK
KyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgcmV0dXJuIGZvcndhcmRGdW5jdGlv
bkNhbGxUb0JhY2tpbmdNYXAoc3RhdGUsIG1hcExpa2UsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0
aW5OYW1lcygpLmtleXNQdWJsaWNOYW1lKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFw
cGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZFZhbHVlc1RvTWFwTGlrZShKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSkKIHsKLSAgICByZXR1cm4g
Zm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChzdGF0ZSwgbWFwTGlrZSwgc3RhdGUucHJv
cGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLnZhbHVlc1B1YmxpY05hbWUoKSk7CisgICAgSlND
OjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9C
YWNraW5nTWFwKHN0YXRlLCBtYXBMaWtlLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMo
KS52YWx1ZXNQdWJsaWNOYW1lKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xh
c3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZENsZWFyVG9NYXBMaWtlKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtlKQpAQCAtMTIwLDEyICsxMjQsMTQgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzLCB0eXBlbmFtZQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVuYW1lIEl0ZW1UeXBlPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGZvcndhcmRHZXRUb01hcExpa2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBXcmFwcGVyQ2xhc3Mm
IG1hcExpa2UsIEl0ZW1UeXBlJiYpCiB7Ci0gICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxU
b0JhY2tpbmdNYXAoc3RhdGUsIG1hcExpa2UsIHN0YXRlLnByb3BlcnR5TmFtZXMoKS5idWlsdGlu
TmFtZXMoKS5nZXRQdWJsaWNOYW1lKCkpOworICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChzdGF0ZSwgbWFwTGlr
ZSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZ2V0UHVibGljTmFtZSgpKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzLCB0eXBlbmFtZSBJdGVtVHlwZT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSBmb3J3YXJkSGFzVG9NYXBMaWtlKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtlLCBJdGVtVHlwZSYmKQogewotICAgIHJldHVybiBmb3J3
YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKHN0YXRlLCBtYXBMaWtlLCBzdGF0ZS5wcm9wZXJ0
eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkuaGFzUHVibGljTmFtZSgpKTsKKyAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdN
YXAoc3RhdGUsIG1hcExpa2UsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmhhc1B1
YmxpY05hbWUoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcywgdHlwZW5h
bWUgSXRlbVR5cGU+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZEFkZFRvTWFwTGlrZShKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSwgSXRlbVR5cGUmJiBpdGVt
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAg
c3RhdGljIGJvb2wganNET01XaW5kb3dHZXRPd25Qcm9wZXJ0eVNsbwogICAgIH0KIAogICAgIC8v
IGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3Nzb3JpZ2luZ2V0b3ducHJvcGVydHlo
ZWxwZXItKC1vLC1wLSkKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS50b1N0cmluZ1RhZ1N5bWJvbCB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmhhc0luc3RhbmNlU3ltYm9sIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuaXNDb25jYXRTcHJlYWRhYmxlU3ltYm9sKSB7CisgICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCB8fCBwcm9wZXJ0eU5hbWUg
PT0gdm0ucHJvcGVydHlOYW1lcy0+aGFzSW5zdGFuY2VTeW1ib2wgfHwgcHJvcGVydHlOYW1lID09
IHZtLnByb3BlcnR5TmFtZXMtPmlzQ29uY2F0U3ByZWFkYWJsZVN5bWJvbCkgewogICAgICAgICBz
bG90LnNldFZhbHVlKHRoaXNPYmplY3QsIFJlYWRPbmx5IHwgRG9udEVudW0sIGpzVW5kZWZpbmVk
KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xMzcsNyArMTM3LDcgQEAgc3Rh
dGljIGJvb2wganNET01XaW5kb3dHZXRPd25Qcm9wZXJ0eVNsbwogICAgICAgICAvLyBPbmx5IGFs
bG93IGFjY2VzcyB0byB0aGVzZSBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAgICBpZiAocHJv
cGVydHlOYW1lID09IGJ1aWx0aW5OYW1lcy5sb2NhdGlvblB1YmxpY05hbWUoKQogICAgICAgICAg
ICAgfHwgcHJvcGVydHlOYW1lID09IGJ1aWx0aW5OYW1lcy5jbG9zZWRQdWJsaWNOYW1lKCkKLSAg
ICAgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
CisgICAgICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
CiAgICAgICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gYnVpbHRpbk5hbWVzLnNlbGZQdWJsaWNO
YW1lKCkKICAgICAgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBidWlsdGluTmFtZXMud2luZG93
UHVibGljTmFtZSgpCiAgICAgICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gYnVpbHRpbk5hbWVz
LmZyYW1lc1B1YmxpY05hbWUoKQpAQCAtMzM4LDExICszMzgsMTIgQEAgc3RhdGljIHZvaWQgYWRk
U2NvcGVkQ2hpbGRyZW5JbmRleGVzKEV4ZQogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9y
Zy8jY3Jvc3NvcmlnaW5vd25wcm9wZXJ0eWtleXMtKC1vLSkKIHN0YXRpYyB2b2lkIGFkZENyb3Nz
T3JpZ2luV2luZG93T3duUHJvcGVydHlOYW1lcyhFeGVjU3RhdGUmIHN0YXRlLCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcykKIHsKLSAgICBhZGRDcm9zc09yaWdpbldpbmRvd1Byb3Bl
cnR5TmFtZXMoc3RhdGUudm0oKSwgcHJvcGVydHlOYW1lcyk7CisgICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICBhZGRDcm9zc09yaWdpbldpbmRvd1Byb3BlcnR5TmFtZXModm0sIHByb3BlcnR5
TmFtZXMpOwogCi0gICAgcHJvcGVydHlOYW1lcy5hZGQoc3RhdGUucHJvcGVydHlOYW1lcygpLnRv
U3RyaW5nVGFnU3ltYm9sKTsKLSAgICBwcm9wZXJ0eU5hbWVzLmFkZChzdGF0ZS5wcm9wZXJ0eU5h
bWVzKCkuaGFzSW5zdGFuY2VTeW1ib2wpOwotICAgIHByb3BlcnR5TmFtZXMuYWRkKHN0YXRlLnBy
b3BlcnR5TmFtZXMoKS5pc0NvbmNhdFNwcmVhZGFibGVTeW1ib2wpOworICAgIHByb3BlcnR5TmFt
ZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sKTsKKyAgICBwcm9wZXJ0
eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5oYXNJbnN0YW5jZVN5bWJvbCk7CisgICAgcHJv
cGVydHlOYW1lcy5hZGQodm0ucHJvcGVydHlOYW1lcy0+aXNDb25jYXRTcHJlYWRhYmxlU3ltYm9s
KTsKIH0KIAogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jd2luZG93cHJveHktb3du
cHJvcGVydHlrZXlzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rv
Y3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDEzICs2
NiwxNCBAQCB2b2lkIHJlcG9ydE1lbW9yeUZvckRvY3VtZW50SWZGcmFtZWxlc3MoCiAgICAgaWYg
KGRvY3VtZW50LmZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIFZNJiB2bSA9IHN0YXRl
LnZtKCk7CiAgICAgc2l6ZV90IG1lbW9yeUNvc3QgPSAwOwogICAgIGZvciAoTm9kZSogbm9kZSA9
ICZkb2N1bWVudDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKQogICAg
ICAgICBtZW1vcnlDb3N0ICs9IG5vZGUtPmFwcHJveGltYXRlTWVtb3J5Q29zdCgpOwogCiAgICAg
Ly8gRklYTUU6IEFkb3B0IHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCwgYW5kIHN3aXRjaCB0byBy
ZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTk1Ci0gICAgc3RhdGUuaGVhcCgpLT5kZXByZWNhdGVkUmVw
b3J0RXh0cmFNZW1vcnkobWVtb3J5Q29zdCk7CisgICAgdm0uaGVhcC5kZXByZWNhdGVkUmVwb3J0
RXh0cmFNZW1vcnkobWVtb3J5Q29zdCk7CiB9CiAKIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8RG9j
dW1lbnQ+JiYgZG9jdW1lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vy
cm9ySGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFcnJvckhhbmRsZXIuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0
LDggQEAgdm9pZCBKU0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQoU2NyaXB0RQogCiAgICAgRXJy
b3JFdmVudCYgZXJyb3JFdmVudCA9IGRvd25jYXN0PEVycm9yRXZlbnQ+KGV2ZW50KTsKIAotICAg
IEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQudm0oKSk7CisgICAgVk0m
IHZtID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dC52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKIAogICAgIEpTT2JqZWN0KiBqc0Z1bmN0aW9uID0gdGhpcy0+anNGdW5jdGlvbihzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBpZiAoIWpzRnVuY3Rpb24pCkBAIC03Nyw3ICs3OCw3
IEBAIHZvaWQgSlNFcnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEUKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAgIENhbGxEYXRhIGNh
bGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0ganNGdW5jdGlvbi0+bWV0aG9kVGFibGUo
KS0+Z2V0Q2FsbERhdGEoanNGdW5jdGlvbiwgY2FsbERhdGEpOworICAgIENhbGxUeXBlIGNhbGxU
eXBlID0ganNGdW5jdGlvbi0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShqc0Z1bmN0aW9u
LCBjYWxsRGF0YSk7CiAKICAgICBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpIHsKICAg
ICAgICAgUmVmPEpTRXJyb3JIYW5kbGVyPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRh
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDE0IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxJbWFnZURhdGE+JiYgaW1hZ2VEYXRh
KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIGRhdGEgPSBpbWFnZURh
dGEtPmRhdGEoKTsKICAgICBhdXRvKiB3cmFwcGVyID0gY3JlYXRlV3JhcHBlcjxJbWFnZURhdGE+
KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbWFnZURhdGEpKTsKICAgICBJZGVudGlmaWVyIGRhdGFO
YW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgImRhdGEiKTsKLSAgICB3cmFwcGVy
LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIGRhdGFOYW1lLCB0b0pTKHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIGRhdGEpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHdyYXBwZXItPnB1dERpcmVj
dCh2bSwgZGF0YU5hbWUsIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGF0YSksIERvbnREZWxl
dGUgfCBSZWFkT25seSk7CiAgICAgLy8gRklYTUU6IEFkb3B0IHJlcG9ydEV4dHJhTWVtb3J5Vmlz
aXRlZCwgYW5kIHN3aXRjaCB0byByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZC4KICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTk1Ci0gICAgc3RhdGUt
PmhlYXAoKS0+ZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5KGRhdGEtPmxlbmd0aCgpKTsKKyAg
ICB2bS5oZWFwLmRlcHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9yeShkYXRhLT5sZW5ndGgoKSk7CiAg
ICAgCiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDIwICs1NSwyMCBAQCBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21t
b24oSlNMCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVj
LndoYXR3Zy5vcmcvI2Nyb3Nzb3JpZ2luZ2V0b3ducHJvcGVydHloZWxwZXItKC1vLC1wLSkKLSAg
ICBpZiAocHJvcGVydHlOYW1lID09IHN0YXRlLnByb3BlcnR5TmFtZXMoKS50b1N0cmluZ1RhZ1N5
bWJvbCB8fCBwcm9wZXJ0eU5hbWUgPT0gc3RhdGUucHJvcGVydHlOYW1lcygpLmhhc0luc3RhbmNl
U3ltYm9sIHx8IHByb3BlcnR5TmFtZSA9PSBzdGF0ZS5wcm9wZXJ0eU5hbWVzKCkuaXNDb25jYXRT
cHJlYWRhYmxlU3ltYm9sKSB7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5h
bWVzLT50b1N0cmluZ1RhZ1N5bWJvbCB8fCBwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1l
cy0+aGFzSW5zdGFuY2VTeW1ib2wgfHwgcHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMt
PmlzQ29uY2F0U3ByZWFkYWJsZVN5bWJvbCkgewogICAgICAgICBzbG90LnNldFZhbHVlKCZ0aGlz
T2JqZWN0LCBSZWFkT25seSB8IERvbnRFbnVtLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCiAgICAgLy8gV2Ugb25seSBhbGxvdyBhY2Nlc3MgdG8gTG9jYXRp
b24ucmVwbGFjZSgpIGNyb3NzIG9yaWdpbi4KLSAgICBpZiAocHJvcGVydHlOYW1lID09IHN0YXRl
LnByb3BlcnR5TmFtZXMoKS5yZXBsYWNlKSB7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5w
cm9wZXJ0eU5hbWVzLT5yZXBsYWNlKSB7CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKCZ0aGlzT2Jq
ZWN0LCBSZWFkT25seSwgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyPGpzTG9jYXRpb25J
bnN0YW5jZUZ1bmN0aW9uUmVwbGFjZSwgMT4pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKICAgICAvLyBHZXR0aW5nIGxvY2F0aW9uLmhyZWYgY3Jvc3Mgb3JpZ2luIG5lZWRzIHRvIHRo
cm93LiBIb3dldmVyLCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoKSBuZWVkcyB0byByZXR1cm4K
ICAgICAvLyBhIGRlc2NyaXB0b3IgdGhhdCBoYXMgYSBzZXR0ZXIgYnV0IG5vIGdldHRlci4KLSAg
ICBpZiAoc2xvdC5pbnRlcm5hbE1ldGhvZFR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkludGVybmFs
TWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkgJiYgcHJvcGVydHlOYW1lID09IHN0YXRlLnByb3Bl
cnR5TmFtZXMoKS5ocmVmKSB7CisgICAgaWYgKHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0g
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5ICYmIHByb3Bl
cnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5ocmVmKSB7CiAgICAgICAgIGF1dG8qIGVudHJ5
ID0gSlNMb2NhdGlvbjo6aW5mbygpLT5zdGF0aWNQcm9wSGFzaFRhYmxlLT5lbnRyeShwcm9wZXJ0
eU5hbWUpOwogICAgICAgICBDdXN0b21HZXR0ZXJTZXR0ZXIqIGN1c3RvbUdldHRlclNldHRlciA9
IEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBudWxscHRyLCBlbnRyeS0+cHJvcGVydHlQ
dXR0ZXIoKSk7CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tR2V0dGVyU2V0dGVyKCZ0aGlzT2JqZWN0
LCBDdXN0b21BY2Nlc3NvciwgY3VzdG9tR2V0dGVyU2V0dGVyKTsKQEAgLTEwNiwxNCArMTA2LDE1
IEBAIHN0YXRpYyBib29sIHB1dENvbW1vbihKU0xvY2F0aW9uJiB0aGlzT2IKICAgICBpZiAoIWZy
YW1lKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CiAg
ICAgLy8gU2lsZW50bHkgYmxvY2sgYWNjZXNzIHRvIHRvU3RyaW5nIGFuZCB2YWx1ZU9mLgotICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gc3RhdGUucHJvcGVydHlOYW1lcygpLnRvU3RyaW5nIHx8IHBy
b3BlcnR5TmFtZSA9PSBzdGF0ZS5wcm9wZXJ0eU5hbWVzKCkudmFsdWVPZikKKyAgICBpZiAocHJv
cGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nIHx8IHByb3BlcnR5TmFtZSA9
PSB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IC8vIEFsd2F5cyBhbGxvdyBhc3NpZ25pbmcgdG8gdGhlIHdob2xlIGxvY2F0aW9uLgogICAgIC8v
IEhvd2V2ZXIsIGFsbGxvd2luZyBhc3NpZ25pbmcgb2YgcGllY2VzIG1pZ2h0IGluYWR2ZXJ0ZW50
bHkgZGlzY2xvc2UgcGFydHMgb2YgdGhlIG9yaWdpbmFsIGxvY2F0aW9uLgogICAgIC8vIFNvIGZh
bGwgdGhyb3VnaCB0byB0aGUgYWNjZXNzIGNoZWNrIGZvciB0aG9zZS4KLSAgICBpZiAocHJvcGVy
dHlOYW1lID09IHN0YXRlLnByb3BlcnR5TmFtZXMoKS5ocmVmKQorICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+aHJlZikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gQmxvY2sgYWNjZXNzIGFuZCB0aHJvdyBpZiB0aGVyZSBpcyBhIHNlY3VyaXR5IGVycm9y
LgpAQCAtMTY2LDcgKzE2Nyw4IEBAIGJvb2wgSlNMb2NhdGlvbjo6ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KEoKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3Nzb3JpZ2lucHJvcGVy
dGllcy0oLW8tKQogc3RhdGljIHZvaWQgYWRkQ3Jvc3NPcmlnaW5Mb2NhdGlvblByb3BlcnR5TmFt
ZXMoRXhlY1N0YXRlJiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMpCiB7
Ci0gICAgc3RhdGljIGNvbnN0IElkZW50aWZpZXIqIGNvbnN0IHByb3BlcnRpZXNbXSA9IHsgJnN0
YXRlLnByb3BlcnR5TmFtZXMoKS5ocmVmLCAmc3RhdGUucHJvcGVydHlOYW1lcygpLnJlcGxhY2Ug
fTsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIHN0YXRpYyBjb25zdCBJZGVudGlmaWVy
KiBjb25zdCBwcm9wZXJ0aWVzW10gPSB7ICZ2bS5wcm9wZXJ0eU5hbWVzLT5ocmVmLCAmdm0ucHJv
cGVydHlOYW1lcy0+cmVwbGFjZSB9OwogICAgIGZvciAoYXV0byogcHJvcGVydHkgOiBwcm9wZXJ0
aWVzKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZCgqcHJvcGVydHkpOwogfQpAQCAtMTc0LDEx
ICsxNzYsMTIgQEAgc3RhdGljIHZvaWQgYWRkQ3Jvc3NPcmlnaW5Mb2NhdGlvblByb3BlcgogLy8g
aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jY3Jvc3NvcmlnaW5vd25wcm9wZXJ0eWtleXMt
KC1vLSkKIHN0YXRpYyB2b2lkIGFkZENyb3NzT3JpZ2luTG9jYXRpb25Pd25Qcm9wZXJ0eU5hbWVz
KEV4ZWNTdGF0ZSYgc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogewor
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CiAgICAgYWRkQ3Jvc3NPcmlnaW5Mb2NhdGlvblByb3Bl
cnR5TmFtZXMoc3RhdGUsIHByb3BlcnR5TmFtZXMpOwogCi0gICAgcHJvcGVydHlOYW1lcy5hZGQo
c3RhdGUucHJvcGVydHlOYW1lcygpLnRvU3RyaW5nVGFnU3ltYm9sKTsKLSAgICBwcm9wZXJ0eU5h
bWVzLmFkZChzdGF0ZS5wcm9wZXJ0eU5hbWVzKCkuaGFzSW5zdGFuY2VTeW1ib2wpOwotICAgIHBy
b3BlcnR5TmFtZXMuYWRkKHN0YXRlLnByb3BlcnR5TmFtZXMoKS5pc0NvbmNhdFNwcmVhZGFibGVT
eW1ib2wpOworICAgIHByb3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5n
VGFnU3ltYm9sKTsKKyAgICBwcm9wZXJ0eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5oYXNJ
bnN0YW5jZVN5bWJvbCk7CisgICAgcHJvcGVydHlOYW1lcy5hZGQodm0ucHJvcGVydHlOYW1lcy0+
aXNDb25jYXRTcHJlYWRhYmxlU3ltYm9sKTsKIH0KIAogdm9pZCBKU0xvY2F0aW9uOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQpAQCAtMTk3LDcg
KzIwMCw4IEBAIGJvb2wgSlNMb2NhdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmoKICAgICBp
ZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKGV4ZWMsIHRoaXNP
YmplY3QtPndyYXBwZWQoKS5mcmFtZSgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigp
ICYmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nIHx8IHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWVPZikpCisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigp
ICYmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcgfHwgcHJvcGVy
dHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiB9CkBAIC0yMjksMTUgKzIz
MywxNyBAQCBTdHJpbmcgSlNMb2NhdGlvbjo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTCiAKIGJvb2wg
SlNMb2NhdGlvblByb3RvdHlwZTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBzbG90KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNMb2NhdGlvblByb3RvdHlwZSo+KGNlbGwpOwotICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gc3RhdGUtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZyB8fCBwcm9wZXJ0eU5hbWUg
PT0gc3RhdGUtPnByb3BlcnR5TmFtZXMoKS52YWx1ZU9mKQorICAgIGlmIChwcm9wZXJ0eU5hbWUg
PT0gdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcgfHwgcHJvcGVydHlOYW1lID09IHZtLnByb3Bl
cnR5TmFtZXMtPnZhbHVlT2YpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gQmFz
ZTo6cHV0KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0K
IAogYm9vbCBKU0xvY2F0aW9uUHJvdG90eXBlOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsK
LSAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nIHx8IHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWVPZikpCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIChwcm9wZXJ0eU5h
bWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcgfHwgcHJvcGVydHlOYW1lID09IHZtLnBy
b3BlcnR5TmFtZXMtPnZhbHVlT2YpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJu
IEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDIyMTgw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OTEsNyArMTQ5MSw3IEBAIFNlcmlhbGl6YXRpb25SZXR1
cm5Db2RlIENsb25lU2VyaWFsaXplcjoKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoU3RhY2su
cmVtb3ZlTGFzdCgpOwogCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5k
KFByb3BlcnR5TmFtZUFycmF5KG1fZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncykpOwot
ICAgICAgICAgICAgICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUoKS0+Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKGFycmF5LCBtX2V4ZWMsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJh
dGlvbk1vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGFycmF5LT5tZXRob2RUYWJsZSh2bSkt
PmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhhcnJheSwgbV9leGVjLCBwcm9wZXJ0eVN0YWNr
Lmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJv
cGVydHlTdGFjay5sYXN0KCkuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZShOb25JbmRleFByb3BlcnRpZXNUYWcpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhT
dGFjay5hcHBlbmQoMCk7CkBAIC0xNTQxLDcgKzE1NDEsNyBAQCBTZXJpYWxpemF0aW9uUmV0dXJu
Q29kZSBDbG9uZVNlcmlhbGl6ZXI6CiAgICAgICAgICAgICAgICAgaW5wdXRPYmplY3RTdGFjay5h
cHBlbmQoaW5PYmplY3QpOwogICAgICAgICAgICAgICAgIGluZGV4U3RhY2suYXBwZW5kKDApOwog
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KG1f
ZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncykpOwotICAgICAgICAgICAgICAgIGluT2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqZWN0LCBtX2V4ZWMs
IHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgICAgICAg
ICAgaW5PYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhpbk9iamVj
dCwgbV9leGVjLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjoKICAgICAgICAg
ICAgIEZBTExUSFJPVUdIOwpAQCAtMTYwOSw3ICsxNjA5LDcgQEAgU2VyaWFsaXphdGlvblJldHVy
bkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gaW5wdXRPYmplY3RTdGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChqc0R5bmFtaWNEb3duY2FzdDxKU01hcCo+KHZtLCBvYmplY3QpKTsKICAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkobV9leGVjLCBQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0
aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fZXhlYywgcHJvcGVydHlT
dGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBtX2V4ZWMs
IHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlKE5vbk1hcFByb3BlcnRpZXNUYWcpOwogICAgICAgICAgICAgICAgICAgICBp
bmRleFN0YWNrLmFwcGVuZCgwKTsKICAgICAgICAgICAgICAgICAgICAgZ290byBvYmplY3RTdGFy
dFZpc2l0TWVtYmVyOwpAQCAtMTY1Myw3ICsxNjUzLDcgQEAgU2VyaWFsaXphdGlvblJldHVybkNv
ZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0
ID0gaW5wdXRPYmplY3RTdGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChq
c0R5bmFtaWNEb3duY2FzdDxKU1NldCo+KHZtLCBvYmplY3QpKTsKICAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkobV9leGVjLCBQcm9wZXJ0
eU5hbWVNb2RlOjpTdHJpbmdzKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9k
VGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fZXhlYywgcHJvcGVydHlTdGFj
ay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBtX2V4ZWMsIHBy
b3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlKE5vblNldFByb3BlcnRpZXNUYWcpOwogICAgICAgICAgICAgICAgICAgICBpbmRl
eFN0YWNrLmFwcGVuZCgwKTsKICAgICAgICAgICAgICAgICAgICAgZ290byBvYmplY3RTdGFydFZp
c2l0TWVtYmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC00
NDA2LDcgKzQ0MDYsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSBjb25zdHJ1
Y3RvciA9ICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yOjpjcmVhdGUoc3RhdGUtPnZtKCksICR7Y2xh
c3NOYW1lfUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoc3RhdGUtPnZtKCksICpwcm90b3R5
cGUtPmdsb2JhbE9iamVjdCgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90
b3R5cGUoKSksICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihwcm90b3R5cGUtPmdsb2JhbE9i
amVjdCgpKSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIC8vIFNo
YWRvd2luZyBjb25zdHJ1Y3RvciBwcm9wZXJ0eSB0byBlbnN1cmUgcmV1c2luZyB0aGUgc2FtZSBj
b25zdHJ1Y3RvciBvYmplY3RcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVz
KCkuY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yLCBEb250RW51bSB8IFJlYWRPbmx5KTtcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcHJvdG90eXBlLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvciwgRG9udEVudW0g
fCBSZWFkT25seSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0b3IpO1xuIik7CiAgICAgICAgIH0KICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwpAQCAtNDQyMyw3ICs0NDIzLDcgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJldHVybiBmYWxzZTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9
XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3JcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBy
ZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5h
bWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTtcbiIpOwor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKSk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwog
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCShyZXZpc2lv
biAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDYsOSArMzQ2LDkgQEAgYm9vbCBfTlBOX1NldFByb3BlcnR5KE5QUCwg
TlBPYmplY3QqIG8sIAogCiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7CiAgICAgICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmotPmltcCk7Ci0gICAgICAgICAgICBvYmotPmltcC0+
bWV0aG9kVGFibGUoKS0+cHV0KG9iai0+aW1wLCBleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRp
ZmllcihleGVjLCBpLT5zdHJpbmcoKSksIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsIHZh
cmlhbnQsIHJvb3RPYmplY3QpLCBzbG90KTsKKyAgICAgICAgICAgIG9iai0+aW1wLT5tZXRob2RU
YWJsZSh2bSktPnB1dChvYmotPmltcCwgZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIo
ZXhlYywgaS0+c3RyaW5nKCkpLCBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCB2YXJpYW50
LCByb290T2JqZWN0KSwgc2xvdCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgb2JqLT5p
bXAtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqLT5pbXAsIGV4ZWMsIGktPm51bWJlcigp
LCBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCB2YXJpYW50LCByb290T2JqZWN0KSwgZmFs
c2UpOworICAgICAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleChv
YmotPmltcCwgZXhlYywgaS0+bnVtYmVyKCksIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMs
IHZhcmlhbnQsIHJvb3RPYmplY3QpLCBmYWxzZSk7CiAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTM4OSw5ICszODksOSBAQCBi
b29sIF9OUE5fUmVtb3ZlUHJvcGVydHkoTlBQLCBOUE9iamVjdCogCiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAoaS0+aXNTdHJpbmcoKSkKLSAgICAgICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJs
ZSgpLT5kZWxldGVQcm9wZXJ0eShvYmotPmltcCwgZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50
aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKKyAgICAgICAgICAgIG9iai0+aW1wLT5tZXRob2RU
YWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KG9iai0+aW1wLCBleGVjLCBpZGVudGlmaWVyRnJvbU5Q
SWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBvYmotPmltcC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KG9iai0+aW1w
LCBleGVjLCBpLT5udW1iZXIoKSk7CisgICAgICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUo
dm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgob2JqLT5pbXAsIGV4ZWMsIGktPm51bWJlcigpKTsK
IAogICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTQ4Niw3ICs0ODYsNyBAQCBib29sIF9OUE5fRW51bWVyYXRlKE5QUCwgTlBPYmplY3QqIG8s
IE5QCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
OwogICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMsIFByb3BlcnR5
TmFtZU1vZGU6OlN0cmluZ3MpOwogCi0gICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJsZSgpLT5n
ZXRQcm9wZXJ0eU5hbWVzKG9iai0+aW1wLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUoKSk7CisgICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJsZSh2bSktPmdldFByb3BlcnR5
TmFtZXMob2JqLT5pbXAsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsK
ICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihwcm9wZXJ0eU5h
bWVzLnNpemUoKSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgY2FsbCBO
UE5fTWVtQWxsb2MgYnV0IHRoYXQncyBpbiBXZWJLaXQKICAgICAgICAgTlBJZGVudGlmaWVyKiBp
ZGVudGlmaWVycyA9IHN0YXRpY19jYXN0PE5QSWRlbnRpZmllcio+KG1hbGxvYyhzaXplb2YoTlBJ
ZGVudGlmaWVyKSAqIHNpemUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X2FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9h
cnJheS5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX2FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMjEgKzczLDIzIEBAIEVuY29kZWRK
U1ZhbHVlIFJ1bnRpbWVBcnJheTo6bGVuZ3RoR2V0dGUKIAogdm9pZCBSdW50aW1lQXJyYXk6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBSdW50aW1lQXJyYXkqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8UnVudGltZUFycmF5Kj4ob2JqZWN0KTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlz
T2JqZWN0LT5nZXRMZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywg
aSkpOwogCiAgICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQotICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQodm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKIAogICAgIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOwogfQogCiBib29sIFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
UnVudGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVBcnJheSo+KG9iamVjdCk7
Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7
CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKICAg
ICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5IHwgRG9udEVudW0sIHRoaXNPYmplY3QtPmxlbmd0aEdldHRlcik7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KQEAgLTEyMCw3ICsxMjIsNyBAQCBib29sIFJ1bnRpbWVBcnJheTo6
cHV0KEpTQ2VsbCogY2VsbCwgRXhlCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgUnVudGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVB
cnJheSo+KGNlbGwpOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmxlbmd0aCkgeworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoKSB7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5n
ZUVycm9yKGV4ZWMsICJSYW5nZSBlcnJvciIpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkocmV2aXNpb24gMjIx
ODAwKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtMzksMTEgKzM5LDEyIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBSdW50aW1lQXJy
YXkqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEJpbmRpbmdzOjpBcnJheSogYXJyYXkpCiAgICAg
eworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICAvLyBGSVhNRTogZGVwcmVj
YXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBn
bG9iYWwgb2JqZWN0CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQgZ2xv
YmFsIG9iamVjdCBmb3IgImFycmF5Ii4KICAgICAgICAgU3RydWN0dXJlKiBkb21TdHJ1Y3R1cmUg
PSBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFJ1bnRpbWVBcnJheT4oZXhlYyk7
Ci0gICAgICAgIFJ1bnRpbWVBcnJheSogcnVudGltZUFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8UnVudGltZUFycmF5PigqZXhlYy0+aGVhcCgpKSkgUnVudGltZUFycmF5KGV4ZWMs
IGRvbVN0cnVjdHVyZSk7Ci0gICAgICAgIHJ1bnRpbWVBcnJheS0+ZmluaXNoQ3JlYXRpb24oZXhl
Yy0+dm0oKSwgYXJyYXkpOworICAgICAgICBSdW50aW1lQXJyYXkqIHJ1bnRpbWVBcnJheSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJ1bnRpbWVBcnJheT4odm0uaGVhcCkpIFJ1bnRpbWVB
cnJheShleGVjLCBkb21TdHJ1Y3R1cmUpOworICAgICAgICBydW50aW1lQXJyYXktPmZpbmlzaENy
ZWF0aW9uKHZtLCBhcnJheSk7CiAgICAgICAgIGV4ZWMtPnZtKCkuaGVhcC5hZGRGaW5hbGl6ZXIo
cnVudGltZUFycmF5LCBkZXN0cm95KTsKICAgICAgICAgcmV0dXJuIHJ1bnRpbWVBcnJheTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAJKHJldmlz
aW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDggKzY3LDkgQEAgRW5jb2RlZEpTVmFsdWUgUnVudGltZU1l
dGhvZDo6bGVuZ3RoR2V0dAogCiBib29sIFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCAmc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIFJ1bnRpbWVNZXRob2QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UnVudGltZU1ldGhvZCo+KG9i
amVjdCk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKSB7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgp
IHsKICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0sIHRoaXNPYmplY3QtPmxlbmd0aEdldHRlcik7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX21ldGhvZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X21ldGhvZC5oCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVu
dGltZV9tZXRob2QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDExIEBAIHB1YmxpYzoK
ICAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YTsKIAotICAgIHN0
YXRpYyBSdW50aW1lTWV0aG9kKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgU3RyaW5nJiBuYW1l
LCBCaW5kaW5nczo6TWV0aG9kKiBtZXRob2QpCisgICAgc3RhdGljIFJ1bnRpbWVNZXRob2QqIGNy
ZWF0ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kKiBtZXRob2Qp
CiAgICAgewotICAgICAgICBSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8UnVudGltZU1ldGhvZD4oKmV4ZWMtPmhlYXAoKSkpIFJ1bnRpbWVN
ZXRob2QoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIG1ldGhvZCk7Ci0gICAgICAgIHJ1bnRpbWVN
ZXRob2QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIG5hbWUpOworICAgICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIFJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRo
b2QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxSdW50aW1lTWV0aG9kPih2bS5oZWFwKSkg
UnVudGltZU1ldGhvZChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgbWV0aG9kKTsKKyAgICAgICAg
cnVudGltZU1ldGhvZC0+ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOwogICAgICAgICByZXR1cm4g
cnVudGltZU1ldGhvZDsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2Nf
aW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5z
dGFuY2UuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9j
X2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDExICsxMTcsMTIgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIENSdW50aW1lTWV0aG9kKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIEJpbmRpbmdz
OjpNZXRob2QqIG1ldGhvZCkKICAgICB7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0
aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAogICAgICAgICAvLyBX
ZSBuZWVkIHRvIHBhc3MgaW4gdGhlIHJpZ2h0IGdsb2JhbCBvYmplY3QgZm9yICJpIi4KICAgICAg
ICAgU3RydWN0dXJlKiBkb21TdHJ1Y3R1cmUgPSBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3Ry
dWN0dXJlPENSdW50aW1lTWV0aG9kPihleGVjKTsKLSAgICAgICAgQ1J1bnRpbWVNZXRob2QqIHJ1
bnRpbWVNZXRob2QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxDUnVudGltZU1ldGhvZD4o
KmV4ZWMtPmhlYXAoKSkpIENSdW50aW1lTWV0aG9kKGdsb2JhbE9iamVjdCwgZG9tU3RydWN0dXJl
LCBtZXRob2QpOwotICAgICAgICBydW50aW1lTWV0aG9kLT5maW5pc2hDcmVhdGlvbihleGVjLT52
bSgpLCBuYW1lKTsKKyAgICAgICAgQ1J1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxDUnVudGltZU1ldGhvZD4odm0uaGVhcCkpIENSdW50aW1l
TWV0aG9kKGdsb2JhbE9iamVjdCwgZG9tU3RydWN0dXJlLCBtZXRob2QpOworICAgICAgICBydW50
aW1lTWV0aG9kLT5maW5pc2hDcmVhdGlvbih2bSwgbmFtZSk7CiAgICAgICAgIHJldHVybiBydW50
aW1lTWV0aG9kOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvV2Vi
U2NyaXB0T2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpj
L1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNyAr
NDAyLDcgQEAgLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgZm9yS2V5OihOU1N0cgogCiAgICAg
SlNPYmplY3QqIG9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTT2JqZWN0Kj4odm0sIFtzZWxm
IF9pbXBdKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QpOwotICAgIG9iamVjdC0+
bWV0aG9kVGFibGUoKS0+cHV0KG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCBTdHJpbmcoa2V5KSksIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZ2YWx1ZSwg
T2JqY09iamVjdFR5cGUsIFtzZWxmIF9yb290T2JqZWN0XSksIHNsb3QpOworICAgIG9iamVjdC0+
bWV0aG9kVGFibGUodm0pLT5wdXQob2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsIFN0cmluZyhrZXkpKSwgY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJnZhbHVl
LCBPYmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RPYmplY3RdKSwgc2xvdCk7CiAKICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29u
c29sZShleGVjKTsKQEAgLTQ1Niw3ICs0NTYsNyBAQCAtICh2b2lkKXJlbW92ZVdlYlNjcmlwdEtl
eTooTlNTdHJpbmcgKilrCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0g
ICAgW3NlbGYgX2ltcF0tPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KFtzZWxmIF9pbXBd
LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhrZXkpKSk7CisgICAg
W3NlbGYgX2ltcF0tPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkoW3NlbGYgX2ltcF0s
IGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nKGtleSkpKTsKIAogICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgYWRkRXhjZXB0aW9u
VG9Db25zb2xlKGV4ZWMpOwpAQCAtNTM3LDcgKzUzNyw3IEBAIC0gKHZvaWQpc2V0V2ViU2NyaXB0
VmFsdWVBdEluZGV4Oih1bnNpZ24KICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
CiAKLSAgICBbc2VsZiBfaW1wXS0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChbc2VsZiBfaW1w
XSwgZXhlYywgaW5kZXgsIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZ2YWx1ZSwgT2Jq
Y09iamVjdFR5cGUsIFtzZWxmIF9yb290T2JqZWN0XSksIGZhbHNlKTsKKyAgICBbc2VsZiBfaW1w
XS0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KFtzZWxmIF9pbXBdLCBleGVjLCBpbmRleCwg
Y29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJnZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgW3Nl
bGYgX3Jvb3RPYmplY3RdKSwgZmFsc2UpOwogCiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkgewogICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0JKHJldmlzaW9uIDIy
MTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0JKHdv
cmtpbmcgY29weSkKQEAgLTE2OCwxMSArMTY4LDEyIEBAIGNsYXNzIE9iakNSdW50aW1lTWV0aG9k
IDogcHVibGljIFJ1bnRpbWUKIHB1YmxpYzoKICAgICBzdGF0aWMgT2JqQ1J1bnRpbWVNZXRob2Qq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IFN0cmluZyYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZCogbWV0aG9kKQogICAgIHsKKyAgICAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgICAgICAvLyBGSVhNRTogZGVwcmVj
YXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBn
bG9iYWwgb2JqZWN0CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQgZ2xv
YmFsIG9iamVjdCBmb3IgImkiLgogICAgICAgICBTdHJ1Y3R1cmUqIGRvbVN0cnVjdHVyZSA9IFdl
YkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8T2JqQ1J1bnRpbWVNZXRob2Q+KGV4ZWMp
OwotICAgICAgICBPYmpDUnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPE9iakNSdW50aW1lTWV0aG9kPigqZXhlYy0+aGVhcCgpKSkgT2JqQ1J1
bnRpbWVNZXRob2QoZ2xvYmFsT2JqZWN0LCBkb21TdHJ1Y3R1cmUsIG1ldGhvZCk7Ci0gICAgICAg
IHJ1bnRpbWVNZXRob2QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIG5hbWUpOworICAgICAg
ICBPYmpDUnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPE9iakNSdW50aW1lTWV0aG9kPih2bS5oZWFwKSkgT2JqQ1J1bnRpbWVNZXRob2QoZ2xv
YmFsT2JqZWN0LCBkb21TdHJ1Y3R1cmUsIG1ldGhvZCk7CisgICAgICAgIHJ1bnRpbWVNZXRob2Qt
PmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsKICAgICAgICAgcmV0dXJuIHJ1bnRpbWVNZXRob2Q7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUu
aAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19y
dW50aW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDkgKzk3LDEwIEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBPYmpjRmFsbGJhY2tPYmplY3RJbXAqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9iamNJbnN0YW5jZSogaW5zdGFuY2UsIGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKQogICAgIHsKKyAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1
c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0CiAgICAgICAg
IFN0cnVjdHVyZSogZG9tU3RydWN0dXJlID0gV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVj
dHVyZTxPYmpjRmFsbGJhY2tPYmplY3RJbXA+KGV4ZWMpOwotICAgICAgICBPYmpjRmFsbGJhY2tP
YmplY3RJbXAqIGZhbGxiYWNrT2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8T2Jq
Y0ZhbGxiYWNrT2JqZWN0SW1wPigqZXhlYy0+aGVhcCgpKSkgT2JqY0ZhbGxiYWNrT2JqZWN0SW1w
KGdsb2JhbE9iamVjdCwgZG9tU3RydWN0dXJlLCBpbnN0YW5jZSwgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wKiBmYWxsYmFja09iamVjdCA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPE9iamNGYWxsYmFja09iamVjdEltcD4odm0uaGVhcCkpIE9iamNGYWxs
YmFja09iamVjdEltcChnbG9iYWxPYmplY3QsIGRvbVN0cnVjdHVyZSwgaW5zdGFuY2UsIHByb3Bl
cnR5TmFtZSk7CiAgICAgICAgIGZhbGxiYWNrT2JqZWN0LT5maW5pc2hDcmVhdGlvbihnbG9iYWxP
YmplY3QpOwogICAgICAgICByZXR1cm4gZmFsbGJhY2tPYmplY3Q7CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjE4MDApCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MjU2LDcgKzQyNTYsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUNhcHRp
b25Db250CiAgICAgICAgIHJldHVybjsKIAogICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7Ci0g
ICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IG1ldGhvZE9iamVjdC0+bWV0aG9kVGFibGUoKS0+
Z2V0Q2FsbERhdGEobWV0aG9kT2JqZWN0LCBjYWxsRGF0YSk7CisgICAgSlNDOjpDYWxsVHlwZSBj
YWxsVHlwZSA9IG1ldGhvZE9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShtZXRo
b2RPYmplY3QsIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZTo6
Tm9uZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02OTk4LDcgKzY5OTgsOCBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OnNldENvbnRyb2xsZXJKU1ByCiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2Ny
aXB0Q29udHJvbGxlciA9IGRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKICAgICBKU0M6OkV4ZWNT
dGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CisgICAgSlNDOjpWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJW
YWx1ZSA9IGNvbnRyb2xsZXJKU1ZhbHVlKCpleGVjLCAqZ2xvYmFsT2JqZWN0LCAqdGhpcyk7CiAg
ICAgaWYgKGNvbnRyb2xsZXJWYWx1ZS5pc051bGwoKSkKQEAgLTcwMDksNyArNzAxMCw3IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0Q29udHJvbGxlckpTUHIKICAgICBpZiAoIWNvbnRyb2xs
ZXJPYmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnRyb2xsZXJPYmplY3QtPm1ldGhv
ZFRhYmxlKCktPnB1dChjb250cm9sbGVyT2JqZWN0LCBleGVjLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcoZXhlYywgcHJvcGVydHlOYW1lKSwgcHJvcGVydHlWYWx1ZSwgcHJvcGVydHlTbG90
KTsKKyAgICBjb250cm9sbGVyT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dChjb250cm9sbGVy
T2JqZWN0LCBleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgcHJvcGVydHlO
YW1lKSwgcHJvcGVydHlWYWx1ZSwgcHJvcGVydHlTbG90KTsKIH0KIAogdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJvb3QpCkBAIC03
MDU5LDcgKzcwNjAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNo
CiAgICAgSlNDOjpKU09iamVjdCogZnVuY3Rpb24gPSBmdW5jdGlvblZhbHVlLnRvT2JqZWN0KGV4
ZWMpOwogICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgSlNDOjpDYWxsRGF0YSBj
YWxsRGF0YTsKLSAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPm1ldGhvZFRh
YmxlKCktPmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgSlNDOjpDYWxsVHlw
ZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhKGZ1bmN0
aW9uLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IEpTQzo6Q2FsbFR5cGU6Ok5vbmUp
CiAgICAgICAgIHJldHVybjsKIApAQCAtNzE0Myw3ICs3MTQ0LDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50Ojp1cGRhdGVNZWRpYUNvbnRybwogICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uID0g
ZnVuY3Rpb25WYWx1ZS50b09iamVjdChleGVjKTsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOwogICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7Ci0gICAgSlNDOjpDYWxsVHlwZSBjYWxs
VHlwZSA9IGZ1bmN0aW9uLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShmdW5jdGlvbiwgY2Fs
bERhdGEpOworICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFi
bGUodm0pLT5nZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlw
ZSA9PSBKU0M6OkNhbGxUeXBlOjpOb25lKQogICAgICAgICByZXR1cm47CiAKQEAgLTcxODUsNyAr
NzE4Niw3IEBAIFN0cmluZyBIVE1MTWVkaWFFbGVtZW50OjpnZXRDdXJyZW50TWVkaWEKICAgICBK
U0M6OkpTT2JqZWN0KiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFsdWUudG9PYmplY3QoZXhlYyk7CiAg
ICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRh
OwotICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFibGUoKS0+
Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICBKU0M6OkNhbGxUeXBlIGNhbGxU
eXBlID0gZnVuY3Rpb24tPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNh
bGxEYXRhKTsKICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7CiAgICAgaWYg
KGNhbGxUeXBlID09IEpTQzo6Q2FsbFR5cGU6Ok5vbmUpCiAgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODYsNyArMzg2LDcgQEAg
dm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRBZGRVc2VyQQogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7Ci0gICAgYXV0byBjYWxsVHlwZSA9
IG92ZXJsYXktPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKG92ZXJsYXksIGNhbGxEYXRhKTsK
KyAgICBhdXRvIGNhbGxUeXBlID0gb3ZlcmxheS0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0
YShvdmVybGF5LCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IEpTQzo6Q2FsbFR5cGU6
Ok5vbmUpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODAyLDEyICszODAyLDEzIEBAIGJvb2wgSW50
ZXJuYWxzOjppc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmUKIAogSlNWYWx1ZSBJbnRlcm5hbHM6OmNs
b25lQXJyYXlCdWZmZXIoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIGJ1ZmZlciwgSlNW
YWx1ZSBzcmNCeXRlT2Zmc2V0LCBKU1ZhbHVlIHNyY0xlbmd0aCkKIHsKKyAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRl
LnZtRW50cnlHbG9iYWxPYmplY3QoKTsKLSAgICBKU1ZNQ2xpZW50RGF0YSogY2xpZW50RGF0YSA9
IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4oc3RhdGUudm0oKS5jbGllbnREYXRhKTsKKyAg
ICBKU1ZNQ2xpZW50RGF0YSogY2xpZW50RGF0YSA9IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgcHJpdmF0ZU5hbWUgPSBj
bGllbnREYXRhLT5idWlsdGluTmFtZXMoKS5jbG9uZUFycmF5QnVmZmVyUHJpdmF0ZU5hbWUoKTsK
ICAgICBKU1ZhbHVlIHZhbHVlOwogICAgIFByb3BlcnR5U2xvdCBwcm9wZXJ0eVNsb3QodmFsdWUs
IFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwotICAgIGdsb2JhbE9iamVj
dC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgJnN0YXRl
LCBwcml2YXRlTmFtZSwgcHJvcGVydHlTbG90KTsKKyAgICBnbG9iYWxPYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgJnN0YXRlLCBwcml2YXRl
TmFtZSwgcHJvcGVydHlTbG90KTsKICAgICB2YWx1ZSA9IHByb3BlcnR5U2xvdC5nZXRWYWx1ZSgm
c3RhdGUsIHByaXZhdGVOYW1lKTsKICAgICBBU1NFUlQodmFsdWUuaXNGdW5jdGlvbigpKTsKIApJ
bmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMDktMDkgIE1hcmsgTGFtICA8
bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEF2b2lkIGR1cGxpY2F0ZSBjb21wdXRhdGlv
bnMgb2YgRXhlY1N0YXRlOjp2bSgpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc2NjQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5o
OgorICAgICAgICAoV2ViS2l0OjpKU05QTWV0aG9kOjpjcmVhdGUpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TlBKU09iamVjdDo6c2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0Ojpy
ZW1vdmVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6OmVudW1lcmF0ZSk6
CisKIDIwMTctMDktMDggIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMjE3NzMuCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9kLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhv
ZC5oCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9KU05QTWV0aG9kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDEwIEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBKU05QTWV0aG9kKiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBOUElkZW50aWZpZXIgbnBJZGVudCkKICAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgICAgICBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlID0g
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5m
dW5jdGlvblByb3RvdHlwZSgpKTsKLSAgICAgICAgSlNOUE1ldGhvZCogbWV0aG9kID0gbmV3IChK
U0M6OmFsbG9jYXRlQ2VsbDxKU05QTWV0aG9kPigqZXhlYy0+aGVhcCgpKSkgSlNOUE1ldGhvZChn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgbnBJZGVudCk7Ci0gICAgICAgIG1ldGhvZC0+ZmluaXNo
Q3JlYXRpb24oZXhlYy0+dm0oKSwgbmFtZSk7CisgICAgICAgIEpTTlBNZXRob2QqIG1ldGhvZCA9
IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNOUE1ldGhvZD4odm0uaGVhcCkpIEpTTlBNZXRob2Qo
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIG5wSWRlbnQpOworICAgICAgICBtZXRob2QtPmZpbmlz
aENyZWF0aW9uKHZtLCBuYW1lKTsKICAgICAgICAgcmV0dXJuIG1ldGhvZDsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL05QSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAyLDkgKzIwMiw5IEBAIGJvb2wgTlBKU09iamVjdDo6c2V0UHJvcGVydHkoTlBJZGVudGlm
aWUKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBtX29iamVjdE1hcC0+Y29udmVydE5QVmFyaWFudFRv
SlNWYWx1ZShleGVjLCBtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCksICp2YWx1ZSk7CiAgICAg
aWYgKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpIHsKICAgICAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3QobV9qc09iamVjdC5nZXQoKSk7Ci0gICAgICAgIG1fanNPYmplY3QtPm1ldGhvZFRhYmxl
KCktPnB1dChtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJS
ZXAoZXhlYywgaWRlbnRpZmllclJlcCksIGpzVmFsdWUsIHNsb3QpOworICAgICAgICBtX2pzT2Jq
ZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dChtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBpZGVudGlm
aWVyRnJvbUlkZW50aWZpZXJSZXAoZXhlYywgaWRlbnRpZmllclJlcCksIGpzVmFsdWUsIHNsb3Qp
OwogICAgIH0gZWxzZQotICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUlu
ZGV4KG1fanNPYmplY3QuZ2V0KCksIGV4ZWMsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpLCBqc1Zh
bHVlLCBmYWxzZSk7CisgICAgICAgIG1fanNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJ
bmRleChtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSwganNW
YWx1ZSwgZmFsc2UpOwogICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgCiAgICAgcmV0
dXJuIHRydWU7CkBAIC0yMzAsMTQgKzIzMCwxNCBAQCBib29sIE5QSlNPYmplY3Q6OnJlbW92ZVBy
b3BlcnR5KE5QSWRlbnRpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIG1fanNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5
KG1fanNPYmplY3QuZ2V0KCksIGV4ZWMsIGlkZW50aWZpZXIpOworICAgICAgICBtX2pzT2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KG1fanNPYmplY3QuZ2V0KCksIGV4ZWMs
IGlkZW50aWZpZXIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghbV9qc09iamVjdC0+aGFz
UHJvcGVydHkoZXhlYywgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpKSB7CiAgICAgICAgICAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAKLSAgICAgICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlC
eUluZGV4KG1fanNPYmplY3QuZ2V0KCksIGV4ZWMsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpKTsK
KyAgICAgICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgobV9qc09iamVjdC5nZXQoKSwgZXhlYywgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpOwogICAg
IH0KIAogICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CkBAIC0yNDksMTEgKzI0OSwxMiBAQCBi
b29sIE5QSlNPYmplY3Q6OmVudW1lcmF0ZShOUElkZW50aWZpZXIqCiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gbV9vYmplY3RNYXAtPmdsb2JhbEV4ZWMoKTsKICAgICBpZiAoIWV4ZWMpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCiAgICAg
UHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzKTsKLSAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQcm9wZXJ0eU5hbWVz
KG1fanNPYmplY3QuZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgp
KTsKKyAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMobV9q
c09iamVjdC5nZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwog
CiAgICAgTlBJZGVudGlmaWVyKiBuYW1lSWRlbnRpZmllcnMgPSBucG5NZW1OZXdBcnJheTxOUElk
ZW50aWZpZXI+KHByb3BlcnR5TmFtZXMuc2l6ZSgpKTsKIApJbmRleDogU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZwkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMDktMDkgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEF2b2lkIGR1cGxpY2F0ZSBj
b21wdXRhdGlvbnMgb2YgRXhlY1N0YXRlOjp2bSgpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2NjQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHkubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6aW52b2tlRGVmYXVsdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6cmVtb3ZlUHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcmF0ZSk6CisgICAgICAgICogUGx1Z2lucy9I
b3N0ZWQvUHJveHlJbnN0YW5jZS5tbToKKyAgICAgICAgKFdlYktpdDo6UHJveHlSdW50aW1lTWV0
aG9kOjpjcmVhdGUpOgorCiAyMDE3LTA5LTA4ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjIxNzczLgpJ
bmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkocmV2aXNpb24g
MjIxODAwKQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NjAsNyArOTYwLDcg
QEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZQogCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+
Z2xvYmFsRXhlYygpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShvYmplY3QsIGNhbGxEYXRh
KTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRD
YWxsRGF0YShvYmplY3QsIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6
Ok5vbmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtOTk2LDcgKzk5Niw3IEBAIGJvb2wg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpjb25zdHIKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVj
KCk7CiAKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7Ci0gICAgQ29uc3RydWN0VHlw
ZSBjb25zdHJ1Y3RUeXBlID0gb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDb25zdHJ1Y3REYXRh
KG9iamVjdCwgY29uc3RydWN0RGF0YSk7CisgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBl
ID0gb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldENvbnN0cnVjdERhdGEob2JqZWN0LCBjb25z
dHJ1Y3REYXRhKTsKICAgICBpZiAoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlOjpOb25l
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEwODQsNyArMTA4NCw3IEBAIGJvb2wgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRQcm8KIAogICAgIEpTVmFsdWUgdmFsdWUgPSBk
ZW1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKICAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChvYmplY3QpOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPnB1dChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
OwogICAgIAogICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC0xMTEyLDcgKzExMTIsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0
UHJvCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChw
bHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwogICAgIAogICAgIEpTVmFsdWUgdmFsdWUgPSBk
ZW1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKLSAgICBvYmplY3Qt
Pm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBmYWxzZSk7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgob2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBmYWxzZSk7CiAgICAgCiAgICAgc2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExNDMsNyArMTE0Myw3IEBA
IGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmUKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICAKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVBy
b3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMTczLDcg
KzExNzMsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmVtb3ZlCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSgp
LT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAg
IG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC0xMjc3LDcgKzEyNzcsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6ZW51bWVyCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgp
Lmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwogIAogICAgIFByb3Bl
cnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5n
cyk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQcm9wZXJ0eU5hbWVzKG9iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOworICAgIG9iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlKCkpOwogCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5Kj4g
YXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlOYW1lcy5zaXplKCk7IGkrKykgewpJbmRleDog
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94
eUluc3RhbmNlLm1tCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODIs
MTEgKzE4MiwxMiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUHJveHlSdW50aW1lTWV0aG9kKiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIEJpbmRpbmdzOjpNZXRob2QqIG1ldGhvZCkKICAgICB7CisgICAgICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAgICAgLy8gRklYTUU6IGRlcHJlY2F0
ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xv
YmFsIG9iamVjdAogICAgICAgICAvLyBleGVjLXZtKCkgaXMgYWxzbyBsaWtlbHkgd3JvbmcuCiAg
ICAgICAgIFN0cnVjdHVyZSogZG9tU3RydWN0dXJlID0gZGVwcmVjYXRlZEdldERPTVN0cnVjdHVy
ZTxQcm94eVJ1bnRpbWVNZXRob2Q+KGV4ZWMpOwotICAgICAgICBQcm94eVJ1bnRpbWVNZXRob2Qq
IHJ1bnRpbWVNZXRob2QgPSBuZXcgKGFsbG9jYXRlQ2VsbDxQcm94eVJ1bnRpbWVNZXRob2Q+KCpl
eGVjLT5oZWFwKCkpKSBQcm94eVJ1bnRpbWVNZXRob2QoZ2xvYmFsT2JqZWN0LCBkb21TdHJ1Y3R1
cmUsIG1ldGhvZCk7Ci0gICAgICAgIHJ1bnRpbWVNZXRob2QtPmZpbmlzaENyZWF0aW9uKGV4ZWMt
PnZtKCksIG5hbWUpOworICAgICAgICBQcm94eVJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2Qg
PSBuZXcgKGFsbG9jYXRlQ2VsbDxQcm94eVJ1bnRpbWVNZXRob2Q+KHZtLmhlYXApKSBQcm94eVJ1
bnRpbWVNZXRob2QoZ2xvYmFsT2JqZWN0LCBkb21TdHJ1Y3R1cmUsIG1ldGhvZCk7CisgICAgICAg
IHJ1bnRpbWVNZXRob2QtPmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsKICAgICAgICAgcmV0dXJu
IHJ1bnRpbWVNZXRob2Q7CiAgICAgfQogCg==
</data>
<flag name="commit-queue"
          id="340465"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320343</attachid>
            <date>2017-09-09 07:42:33 -0700</date>
            <delta_ts>2017-09-09 09:21:50 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-176647.patch</filename>
            <type>text/plain</type>
            <size>317909</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIxODE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzNSBA
QAorMjAxNy0wOS0wOSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QXZvaWQgZHVwbGljYXRlIGNvbXB1dGF0aW9ucyBvZiBFeGVjU3RhdGU6OnZtKCkuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY2NDcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCZWNhdXNlIHdoaWxlIGNv
bXB1dGluZyBFeGVjU3RhdGU6OnZtKCkgaXMgY2hlYXAsIGl0IGlzIG5vdCBmcmVlLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWxzbzoKKyAgICAgICAgMS4gZ2V0cyByaWRzIG9mIHNvbWUgY29udmVu
aWVuY2UgbWV0aG9kcyBpbiBDYWxsRnJhbWUgdGhhdCBpbXBsaWNpdGx5IGRvZXMgYQorICAgICAg
ICAgICBFeGVjU3RhdGU6OnZtKCkgY29tcHV0YXRpb24uICBUaGlzIG1pbmltaXplcyB0aGUgY2hh
bmNlIG9mIHVzIGFjY2lkZW50YWxseQorICAgICAgICAgICBjb21wdXRpbmcgRXhlY1N0YXRlOjp2
bSgpIG1vcmUgdGhhbiBuZWNlc3NhcnkuCisgICAgICAgIDIuIHBhc3NlcyB2bSAod2hlbiBhdmFp
bGFibGUpIHRvIG1ldGhvZFRhYmxlKCkuCisgICAgICAgIDMuIHBhc3NlcyB2bSAod2hlbiBhdmFp
bGFibGUpIHRvIEpTTG9ja0hvbGRlci4KKworICAgICAgICAqIEFQSS9KU0Jhc2UuY3BwOgorICAg
ICAgICAoSlNDaGVja1NjcmlwdFN5bnRheCk6CisgICAgICAgIChKU0dhcmJhZ2VDb2xsZWN0KToK
KyAgICAgICAgKEpTUmVwb3J0RXh0cmFNZW1vcnlDb3N0KToKKyAgICAgICAgKEpTU3luY2hyb25v
dXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyk6CisgICAgICAgIChKU1N5bmNocm9ub3VzRWRl
bkNvbGxlY3RGb3JEZWJ1Z2dpbmcpOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrQ29uc3RydWN0
b3IuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0NvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAg
ICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tP
YmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogQVBJL0pTQ29udGV4dC5tbToKKyAgICAgICAgKC1b
SlNDb250ZXh0IHNldEV4Y2VwdGlvbjpdKToKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UmVmLmNw
cDoKKyAgICAgICAgKEpTQ29udGV4dEdldEdsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0NvbnRl
eHRDcmVhdGVCYWNrdHJhY2UpOgorICAgICAgICAqIEFQSS9KU01hbmFnZWRWYWx1ZS5tbToKKyAg
ICAgICAgKC1bSlNNYW5hZ2VkVmFsdWUgdmFsdWVdKToKKyAgICAgICAgKiBBUEkvSlNPYmplY3RS
ZWYuY3BwOgorICAgICAgICAoSlNPYmplY3RNYWtlKToKKyAgICAgICAgKEpTT2JqZWN0TWFrZUZ1
bmN0aW9uV2l0aENhbGxiYWNrKToKKyAgICAgICAgKEpTT2JqZWN0TWFrZUNvbnN0cnVjdG9yKToK
KyAgICAgICAgKEpTT2JqZWN0TWFrZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTT2JqZWN0U2V0UHJv
dG90eXBlKToKKyAgICAgICAgKEpTT2JqZWN0SGFzUHJvcGVydHkpOgorICAgICAgICAoSlNPYmpl
Y3RHZXRQcm9wZXJ0eSk6CisgICAgICAgIChKU09iamVjdFNldFByb3BlcnR5KToKKyAgICAgICAg
KEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KToKKyAgICAgICAgKEpTT2JqZWN0RGVsZXRlUHJv
cGVydHkpOgorICAgICAgICAoSlNPYmplY3RHZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAo
SlNPYmplY3RTZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3REZWxldGVQcml2
YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3RJc0Z1bmN0aW9uKToKKyAgICAgICAgKEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAoSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChKU09iamVjdENvcHlQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTUHJv
cGVydHlOYW1lQWNjdW11bGF0b3JBZGROYW1lKToKKyAgICAgICAgKiBBUEkvSlNTY3JpcHRSZWYu
Y3BwOgorICAgICAgICAqIEFQSS9KU1R5cGVkQXJyYXkuY3BwOgorICAgICAgICAoSlNWYWx1ZUdl
dFR5cGVkQXJyYXlUeXBlKToKKyAgICAgICAgKEpTT2JqZWN0TWFrZVR5cGVkQXJyYXlXaXRoQXJy
YXlCdWZmZXIpOgorICAgICAgICAoSlNPYmplY3RNYWtlVHlwZWRBcnJheVdpdGhBcnJheUJ1ZmZl
ckFuZE9mZnNldCk6CisgICAgICAgIChKU09iamVjdEdldFR5cGVkQXJyYXlCeXRlc1B0cik6Cisg
ICAgICAgIChKU09iamVjdEdldFR5cGVkQXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNPYmplY3RN
YWtlQXJyYXlCdWZmZXJXaXRoQnl0ZXNOb0NvcHkpOgorICAgICAgICAoSlNPYmplY3RHZXRBcnJh
eUJ1ZmZlckJ5dGVzUHRyKToKKyAgICAgICAgKiBBUEkvSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0
ZS5jcHA6CisgICAgICAgICogQVBJL0pTV3JhcHBlck1hcC5tbToKKyAgICAgICAgKGNvbnN0cnVj
dG9ySGFzSW5zdGFuY2UpOgorICAgICAgICAobWFrZVdyYXBwZXIpOgorICAgICAgICAqIEFQSS9P
YmpDQ2FsbGJhY2tGdW5jdGlvbi5tbToKKyAgICAgICAgKG9iakNDYWxsYmFja0Z1bmN0aW9uRm9y
SW52b2NhdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Ompl
dHRpc29uKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjphZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwbGFj
ZUNvbnN0YW50KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAg
ICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6
OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5QnVmZmVyVmlld1dhdGNocG9p
bnRBZGFwdG9yOjphZGQpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpnbG9iYWxUaGlzT2JqZWN0Rm9yKToKKyAgICAgICAgKiBkZmcvREZHT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6Y29tcGlsZUZUTE9TUkV4aXQpOgorICAgICAgICAqIGZ0bC9GVExPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25Qb3B1bGF0ZU9iamVjdElu
T1NSKToKKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NS
KToKKyAgICAgICAgKiBoZWFwL0dDQXNzZXJ0aW9ucy5oOgorICAgICAgICAqIGluc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dEhvc3Q6OndyYXBwZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9z
dC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzdWJ0eXBl
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6Y29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eSk6CisgICAg
ICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hbFByb3BlcnRp
ZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha01hcEVu
dHJpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha1Nl
dEVudHJpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6aXRl
cmF0b3JFbnRyaWVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1l
LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6dmFsdWVGb3JTY29wZUxvY2F0aW9uKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZURlc2NyaXB0aW9ucyk6
CisgICAgICAgIChJbnNwZWN0b3I6OnRvSlMpOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRD
YWxsU3RhY2tGYWN0b3J5LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6ZXh0cmFjdFNvdXJjZUlu
Zm9ybWF0aW9uRnJvbUV4Y2VwdGlvbik6CisgICAgICAgIChJbnNwZWN0b3I6OmNyZWF0ZVNjcmlw
dEFyZ3VtZW50cyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FjaGVkQ2FsbC5oOgorICAgICAg
ICAoSlNDOjpDYWNoZWRDYWxsOjpDYWNoZWRDYWxsKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9D
YWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphdG9taWNTdHJpbmdUYWJsZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6cHJvcGVydHlOYW1lcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6ZW1wdHlMaXN0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjppbnRlcnByZXRlcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aGVhcCk6IERlbGV0ZWQuCisgICAgICAgICog
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6
ZXhlY3V0ZVByb2dyYW0pOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6Cisg
ICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlTW9kdWxlUHJvZ3JhbSk6CisgICAgICAg
ICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cyk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRX
b3JrbGlzdC5jcHA6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0Ojpjb21waWxlTm93KToKKyAg
ICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoV1RGOjpSdW50aW1lQXJyYXk6OmNyZWF0ZSk6Cisg
ICAgICAgIChXVEY6OlJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAg
KFdURjo6RE9NSklUR2V0dGVyOjpET01KSVRBdHRyaWJ1dGU6OnNsb3dDYWxsKToKKyAgICAgICAg
KFdURjo6RE9NSklURnVuY3Rpb25PYmplY3Q6OnVuc2FmZUZ1bmN0aW9uKToKKyAgICAgICAgKFdU
Rjo6RE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdDo6dW5zYWZlRnVuY3Rpb24pOgorICAgICAgICAo
R2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJGZXRjaCk6CisgICAgICAgIChmdW5jdGlvbkR1bXBD
YWxsRnJhbWUpOgorICAgICAgICAoZnVuY3Rpb25DcmVhdGVSb290KToKKyAgICAgICAgKGZ1bmN0
aW9uR2V0RWxlbWVudCk6CisgICAgICAgIChmdW5jdGlvblNldEVsZW1lbnRSb290KToKKyAgICAg
ICAgKGZ1bmN0aW9uQ3JlYXRlU2ltcGxlT2JqZWN0KToKKyAgICAgICAgKGZ1bmN0aW9uU2V0SGlk
ZGVuVmFsdWUpOgorICAgICAgICAoZnVuY3Rpb25DcmVhdGVQcm94eSk6CisgICAgICAgIChmdW5j
dGlvbkNyZWF0ZUltcHVyZUdldHRlcik6CisgICAgICAgIChmdW5jdGlvbkNyZWF0ZUN1c3RvbUdl
dHRlck9iamVjdCk6CisgICAgICAgIChmdW5jdGlvbkNyZWF0ZURPTUpJVE5vZGVPYmplY3QpOgor
ICAgICAgICAoZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJPYmplY3QpOgorICAgICAgICAoZnVu
Y3Rpb25DcmVhdGVET01KSVRHZXR0ZXJDb21wbGV4T2JqZWN0KToKKyAgICAgICAgKGZ1bmN0aW9u
Q3JlYXRlRE9NSklURnVuY3Rpb25PYmplY3QpOgorICAgICAgICAoZnVuY3Rpb25DcmVhdGVET01K
SVRDaGVja1N1YkNsYXNzT2JqZWN0KToKKyAgICAgICAgKGZ1bmN0aW9uR0NBbmRTd2VlcCk6Cisg
ICAgICAgIChmdW5jdGlvbkZ1bGxHQyk6CisgICAgICAgIChmdW5jdGlvbkVkZW5HQyk6CisgICAg
ICAgIChmdW5jdGlvbkhlYXBTaXplKToKKyAgICAgICAgKGZ1bmN0aW9uU2hhZG93Q2hpY2tlbkZ1
bmN0aW9uc09uU3RhY2spOgorICAgICAgICAoZnVuY3Rpb25TZXRHbG9iYWxDb25zdFJlZGVjbGFy
YXRpb25TaG91bGROb3RUaHJvdyk6CisgICAgICAgIChmdW5jdGlvbkpTQ09wdGlvbnMpOgorICAg
ICAgICAoZnVuY3Rpb25GYWlsTmV4dE5ld0NvZGVCbG9jayk6CisgICAgICAgIChmdW5jdGlvbk1h
a2VNYXNxdWVyYWRlcik6CisgICAgICAgIChmdW5jdGlvbkR1bXBUeXBlc0ZvckFsbFZhcmlhYmxl
cyk6CisgICAgICAgIChmdW5jdGlvbkZpbmRUeXBlRm9yRXhwcmVzc2lvbik6CisgICAgICAgIChm
dW5jdGlvblJldHVyblR5cGVGb3IpOgorICAgICAgICAoZnVuY3Rpb25EdW1wQmFzaWNCbG9ja0V4
ZWN1dGlvblJhbmdlcyk6CisgICAgICAgIChmdW5jdGlvbkJhc2ljQmxvY2tFeGVjdXRpb25Db3Vu
dCk6CisgICAgICAgIChmdW5jdGlvbkRyYWluTWljcm90YXNrcyk6CisgICAgICAgIChmdW5jdGlv
bkdlbmVyYXRlSGVhcFNuYXBzaG90KToKKyAgICAgICAgKGZ1bmN0aW9uRW5zdXJlQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKGZ1bmN0aW9uU3RhcnRTYW1wbGluZ1Byb2ZpbGVyKToKKyAgICAgICAg
KHJ1bkludGVyYWN0aXZlKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcGFy
c2VyL01vZHVsZUFuYWx5emVyLmNwcDoKKyAgICAgICAgKEpTQzo6TW9kdWxlQW5hbHl6ZXI6Ok1v
ZHVsZUFuYWx5emVyKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNwcDoK
KyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkJ5dGVjb2RlOjp0b0pTIGNvbnN0KToKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwOgorICAgICAgICAoSlNDOjpQ
cm9maWxlcjo6Qnl0ZWNvZGVTZXF1ZW5jZTo6YWRkU2VxdWVuY2VQcm9wZXJ0aWVzIGNvbnN0KToK
KyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6
OlByb2ZpbGVyOjpCeXRlY29kZXM6OnRvSlMgY29uc3QpOgorICAgICAgICAqIHByb2ZpbGVyL1By
b2ZpbGVyQ29tcGlsYXRpb24uY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Q29tcGlsYXRp
b246OnRvSlMgY29uc3QpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsZWRCeXRl
Y29kZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpDb21waWxlZEJ5dGVjb2RlOjp0b0pT
IGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6UHJvZmlsZXI6OkRhdGFiYXNlOjp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9m
aWxlci9Qcm9maWxlckV2ZW50LmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkV2ZW50Ojp0
b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9TUkV4aXQuY3BwOgorICAg
ICAgICAoSlNDOjpQcm9maWxlcjo6T1NSRXhpdDo6dG9KUyBjb25zdCk6CisgICAgICAgICogcHJv
ZmlsZXIvUHJvZmlsZXJPcmlnaW4uY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6T3JpZ2lu
Ojp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlclByb2ZpbGVkQnl0ZWNv
ZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OlByb2ZpbGVkQnl0ZWNvZGVzOjp0b0pT
IGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcDoKKyAg
ICAgICAgKEpTQzo6aWRlbnRpZmllclRvSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkFic3RyYWN0
TW9kdWxlUmVjb3JkOjpyZXNvbHZlRXhwb3J0SW1wbCk6CisgICAgICAgIChKU0M6OmdldEV4cG9y
dGVkTmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjphcnJheVByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90
b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuQ29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RCb29sZWFuRnJvbUltbWVkaWF0ZUJvb2xl
YW4pOgorICAgICAgICAqIHJ1bnRpbWUvQ2FsbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpjYWxs
KToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgor
ICAgICAgICAoSlNDOjpDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlUHV0VG9TY29wZUdsb2JhbCk6
CisgICAgICAgIChKU0M6OkNvbW1vblNsb3dQYXRoczo6dHJ5Q2FjaGVHZXRGcm9tU2NvcGVHbG9i
YWwpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNo
ZWNrU3ludGF4KToKKyAgICAgICAgKEpTQzo6ZXZhbHVhdGUpOgorICAgICAgICAoSlNDOjpsb2Fk
QW5kRXZhbHVhdGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpsb2FkTW9kdWxlKToKKyAgICAgICAg
KEpTQzo6bGlua0FuZEV2YWx1YXRlTW9kdWxlKToKKyAgICAgICAgKEpTQzo6aW1wb3J0TW9kdWxl
KToKKyAgICAgICAgKiBydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwOgorICAgICAgICAoSlNDOjpj
b25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6CisgICAgICAg
IChKU0M6OmRhdGVQcm90b0Z1bmNUb0pTT04pOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJn
dW1lbnRzLmg6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6bGVuZ3RoIGNvbnN0KToK
KyAgICAgICAgKiBydW50aW1lL0RpcmVjdEV2YWxFeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6RGlyZWN0RXZhbEV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9FcnJv
clByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmVycm9yUHJvdG9GdW5jVG9TdHJpbmcpOgor
ICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OmNy
ZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IpOgorICAgICAgICAoSlNDOjplcnJvckRlc2NyaXB0
aW9uRm9yVmFsdWUpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0dl
bmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8
VHlwZT46OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmll
cklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAgKiBy
dW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpJbmRpcmVj
dEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSW50ZXJuYWxGdW5j
dGlvbi5jcHA6CisgICAgICAgIChKU0M6OkludGVybmFsRnVuY3Rpb246OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1
cmVTbG93KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpK
U0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXQp
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OmlzSXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKToKKyAgICAgICAg
KiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudEZv
clNoaWZ0KToKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuY3BwOgorICAgICAgICAoSlND
OjpKU1ZhbHVlOjpkdW1wRm9yQmFja3RyYWNlIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL0pT
RGF0YVZpZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OkpTRGF0YVZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAg
ICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Z2V0
T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZGVsZXRlUHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpyZWlmeU5hbWUpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxG
dW5jRXZhbCk6CisgICAgICAgICogcnVudGltZS9KU0ludGVybmFsUHJvbWlzZS5jcHA6CisgICAg
ICAgIChKU0M6OkpTSW50ZXJuYWxQcm9taXNlOjp0aGVuKToKKyAgICAgICAgKiBydW50aW1lL0pT
TGV4aWNhbEVudmlyb25tZW50LmNwcDoKKyAgICAgICAgKEpTQzo6SlNMZXhpY2FsRW52aXJvbm1l
bnQ6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pTTWFwLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNNYXA6OmlzSXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKToK
KyAgICAgICAgKiBydW50aW1lL0pTTWFwSXRlcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNNYXBJ
dGVyYXRvcjo6YWR2YW5jZUl0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVFbnZpcm9u
bWVudC5jcHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHA6
CisgICAgICAgIChKU0M6OnByaW50YWJsZU1vZHVsZUtleSk6CisgICAgICAgIChKU0M6OkpTTW9k
dWxlTG9hZGVyOjpwcm92aWRlKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OmxvYWRB
bmRFdmFsdWF0ZU1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpsb2FkTW9k
dWxlKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OmxpbmtBbmRFdmFsdWF0ZU1vZHVs
ZSk6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpyZXF1ZXN0SW1wb3J0TW9kdWxlKToK
KyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Lmg6CisgICAgICAgICog
cnVudGltZS9KU01vZHVsZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxlUmVjb3Jk
OjpldmFsdWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6U3RyaW5naWZpZXI6OlN0cmluZ2lmaWVyKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZp
ZXI6OmFwcGVuZFN0cmluZ2lmaWVkVmFsdWUpOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6
SG9sZGVyOjphcHBlbmROZXh0UHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FsY3VsYXRlZENsYXNzTmFtZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
Om9yZGluYXJ5VG9QcmltaXRpdmUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dG9Q
cmltaXRpdmUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aGFzSW5zdGFuY2UpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleFNsb3dPckJleW9uZFZlY3Rvckxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OmdldEN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uRm9yR2V0dGVyU2V0dGVy
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRNZXRob2QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNP
YmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZVJhd09iamVjdCk6CisgICAg
ICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU09i
amVjdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhblBlcmZvcm1GYXN0UHV0
SW5saW5lKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dElubGluZUZvckpTT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc093blByb3BlcnR5IGNvbnN0KToKKyAgICAgICAg
KiBydW50aW1lL0pTU2NvcGUuY3BwOgorICAgICAgICAoSlNDOjppc1Vuc2NvcGFibGUpOgorICAg
ICAgICAoSlNDOjpKU1Njb3BlOjpyZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFs
KToKKyAgICAgICAgKiBydW50aW1lL0pTU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZXQ6Omlz
SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKToKKyAgICAgICAgKiBydW50aW1l
L0pTU2V0SXRlcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6YWR2YW5jZUl0
ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1N0
cmluZzo6Z2V0U3RyaW5nUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pT
U3RyaW5nLmg6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAqIHJ1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpj
b25zdHJ1Y3RNYXApOgorICAgICAgICAqIHJ1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUu
Y3BwOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAg
ICAgICAgKiBydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Om9iamVj
dFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL1Byb2dyYW1FeGVj
dXRhYmxlLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpSZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OlJl
Z0V4cE9iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVj
dDo6Z2V0UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6Z2V0R2Vu
ZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OnB1dCk6Cisg
ICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHMuaDoKKyAgICAgICAgKEpTQzo6U2NvcGVk
QXJndW1lbnRzOjpsZW5ndGggY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaWN0RXZhbEFj
dGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6U3RyaWN0RXZhbEFjdGl2YXRpb246OmNyZWF0ZSk6
CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjppc1N0
cmluZ093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNEb2xsYXJWTVByb3RvdHlwZTo6Z2MpOgorICAgICAgICAoSlNDOjpKU0RvbGxh
clZNUHJvdG90eXBlOjplZGVuR0MpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZh
bHVhdGUpOgorCiAyMDE3LTA5LTA4ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwu
Y29tPgogCiAgICAgICAgIFtERkddIE5ld0FycmF5V2l0aFNpemUoc2l6ZSkncyBzaXplIGRvZXMg
bm90IGNhcmUgbmVnYXRpdmUgemVybwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9u
IDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MjksNyArNDI5LDcgQEAgcHVibGljOgogICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNyZWF0ZVN0cnVj
dHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBjcmVhdGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkp
OwotICAgICAgICBSdW50aW1lQXJyYXkqIHJ1bnRpbWVBcnJheSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFJ1bnRpbWVBcnJheT4oKmV4ZWMtPmhlYXAoKSkpIFJ1bnRpbWVBcnJheShleGVj
LCBzdHJ1Y3R1cmUpOworICAgICAgICBSdW50aW1lQXJyYXkqIHJ1bnRpbWVBcnJheSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPFJ1bnRpbWVBcnJheT4odm0uaGVhcCkpIFJ1bnRpbWVBcnJh
eShleGVjLCBzdHJ1Y3R1cmUpOwogICAgICAgICBydW50aW1lQXJyYXktPmZpbmlzaENyZWF0aW9u
KGV4ZWMpOwogICAgICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcihydW50aW1lQXJyYXksIGRlc3Ry
b3kpOwogICAgICAgICByZXR1cm4gcnVudGltZUFycmF5OwpAQCAtNDQ2LDggKzQ0Niw5IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKICAgICB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAg
IFJ1bnRpbWVBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3Qp
OwotICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpIHsKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3VzdG9tKHRoaXNPYmplY3QsIERv
bnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtLCB0aGlzT2JqZWN0LT5sZW5ndGhHZXR0ZXIp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTY2NSw3ICs2NjYsOCBA
QCBwdWJsaWM6CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gc2xvd0NhbGwoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBwb2ludGVyKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZleGVj
LT52bSgpLCBleGVjKTsKKyAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAg
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PERPTUpJVEdldHRl
cio+KHBvaW50ZXIpLT52YWx1ZSgpKSk7CiAgICAgICAgIH0KIApAQCAtODU1LDcgKzg1Nyw4IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHVuc2Fm
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRE9NSklUTm9kZSogbm9kZSkKICAgICB7Ci0gICAg
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmV4ZWMtPnZtKCksIGV4ZWMpOworICAg
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIobm9kZS0+dmFsdWUoKSkpOwogICAgIH0KIApAQCAtOTI4LDcgKzkzMSw4IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHVuc2FmZUZ1bmN0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgRE9NSklUTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmV4ZWMtPnZtKCksIGV4ZWMpOworICAgICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobm9kZS0+
dmFsdWUoKSkpOwogICAgIH0KIApAQCAtMTgxMSw3ICsxODE1LDcgQEAgSlNJbnRlcm5hbFByb21p
c2UqIEdsb2JhbE9iamVjdDo6bW9kdWxlTAogICAgIGlmICghZmV0Y2hNb2R1bGVGcm9tTG9jYWxG
aWxlU3lzdGVtKG1vZHVsZUtleSwgdXRmOCkpCiAgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVq
ZWN0KGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoIkNvdWxkIG5vdCBvcGVuIGZp
bGUgJyIsIG1vZHVsZUtleSwgIicuIikpKTsKIAotICAgIGF1dG8gcmVzdWx0ID0gZGVmZXJyZWQt
PnJlc29sdmUoZXhlYywgSlNTb3VyY2VDb2RlOjpjcmVhdGUoZXhlYy0+dm0oKSwgbWFrZVNvdXJj
ZShzdHJpbmdGcm9tVVRGKHV0ZjgpLCBTb3VyY2VPcmlnaW4geyBtb2R1bGVLZXkgfSwgbW9kdWxl
S2V5LCBUZXh0UG9zaXRpb24oKSwgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpNb2R1bGUpKSk7
CisgICAgYXV0byByZXN1bHQgPSBkZWZlcnJlZC0+cmVzb2x2ZShleGVjLCBKU1NvdXJjZUNvZGU6
OmNyZWF0ZSh2bSwgbWFrZVNvdXJjZShzdHJpbmdGcm9tVVRGKHV0ZjgpLCBTb3VyY2VPcmlnaW4g
eyBtb2R1bGVLZXkgfSwgbW9kdWxlS2V5LCBUZXh0UG9zaXRpb24oKSwgU291cmNlUHJvdmlkZXJT
b3VyY2VUeXBlOjpNb2R1bGUpKSk7CiAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9u
KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE4NTMsMTAgKzE4NTcsMTEgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaQogI2lmbmRlZiBOREVCVUcKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wQ2FsbEZyYW1lKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IGV4ZWMtPnZtKCku
dG9wVk1FbnRyeUZyYW1lOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk1FbnRyeUZy
YW1lKiB0b3BWTUVudHJ5RnJhbWUgPSB2bS50b3BWTUVudHJ5RnJhbWU7CiAgICAgRXhlY1N0YXRl
KiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSk7CiAgICAg
aWYgKGNhbGxlckZyYW1lKQotICAgICAgICBleGVjLT52bSgpLmludGVycHJldGVyLT5kdW1wQ2Fs
bEZyYW1lKGNhbGxlckZyYW1lKTsKKyAgICAgICAgdm0uaW50ZXJwcmV0ZXItPmR1bXBDYWxsRnJh
bWUoY2FsbGVyRnJhbWUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAjZW5kaWYKQEAgLTE5MzMsOCArMTkzOCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25KU0MKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkNyZWF0ZVJvb3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoUm9vdDo6Y3JlYXRlKGV4ZWMtPnZt
KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoUm9vdDo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUVsZW1lbnQoRXhlY1N0
YXRlKiBleGVjKQpAQCAtMTk1MSw4ICsxOTU3LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkNyZQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
R2V0RWxlbWVudChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CiAgICAgUm9vdCogcm9vdCA9IGpzRHluYW1pY0Nhc3Q8Um9vdCo+KHZtLCBleGVjLT5hcmd1bWVu
dCgwKSk7CiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpAQCAtMTk2MiwxOSArMTk2OCwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uR2V0CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25TZXRFbGVtZW50Um9vdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGpzRHluYW1pY0Nhc3Q8RWxlbWVudCo+
KHZtLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgUm9vdCogcm9vdCA9IGpzRHluYW1pY0Nhc3Q8
Um9vdCo+KHZtLCBleGVjLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKGVsZW1lbnQgJiYgcm9vdCkK
LSAgICAgICAgZWxlbWVudC0+c2V0Um9vdChleGVjLT52bSgpLCByb290KTsKKyAgICAgICAgZWxl
bWVudC0+c2V0Um9vdCh2bSwgcm9vdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNy
ZWF0ZVNpbXBsZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTaW1wbGVPYmplY3Q6OmNyZWF0
ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKFNpbXBsZU9iamVjdDo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdl
dEhpZGRlblZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTIwMDMsMTkgKzIwMTAsMjAgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldAogICAgICAgICByZXR1cm4gZW5j
b2RlZEpTVmFsdWUoKTsKICAgICB9CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50
KDEpOwotICAgIHNpbXBsZU9iamVjdC0+c2V0SGlkZGVuVmFsdWUoZXhlYy0+dm0oKSwgdmFsdWUp
OworICAgIHNpbXBsZU9iamVjdC0+c2V0SGlkZGVuVmFsdWUodm0sIHZhbHVlKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlUHJveHkoRXhlY1N0YXRlKiBleGVjKQogewotICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1l
bnQoMCk7CiAgICAgaWYgKCF0YXJnZXQuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU09iamVjdCoganNUYXJnZXQgPSBhc09i
amVjdCh0YXJnZXQuYXNDZWxsKCkpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNQcm94
eTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwganNUYXJnZXQtPmdldFByb3RvdHlwZURpcmVjdCgpLCBJbXB1cmVQcm94eVR5cGUpOwotICAg
IEpTUHJveHkqIHByb3h5ID0gSlNQcm94eTo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwg
anNUYXJnZXQpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNQcm94eTo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzVGFyZ2V0LT5nZXRQcm90
b3R5cGVEaXJlY3QoKSwgSW1wdXJlUHJveHlUeXBlKTsKKyAgICBKU1Byb3h5KiBwcm94eSA9IEpT
UHJveHk6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBqc1RhcmdldCk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShwcm94eSk7CiB9CiAKQEAgLTIwMjgsNjEgKzIwMzYsNjggQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ3JlYXRlSW1wdXJlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApOwogICAgIEpTT2JqZWN0KiBkZWxlZ2F0ZSA9IG51bGxwdHI7CiAgICAgaWYgKHRhcmdl
dC5pc09iamVjdCgpKQogICAgICAgICBkZWxlZ2F0ZSA9IGFzT2JqZWN0KHRhcmdldC5hc0NlbGwo
KSk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbXB1cmVHZXR0ZXI6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzTnVsbCgpKTsK
LSAgICBJbXB1cmVHZXR0ZXIqIHJlc3VsdCA9IEltcHVyZUdldHRlcjo6Y3JlYXRlKGV4ZWMtPnZt
KCksIHN0cnVjdHVyZSwgZGVsZWdhdGUpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW1w
dXJlR2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwganNOdWxsKCkpOworICAgIEltcHVyZUdldHRlciogcmVzdWx0ID0gSW1wdXJlR2V0dGVyOjpj
cmVhdGUodm0sIHN0cnVjdHVyZSwgZGVsZWdhdGUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNy
ZWF0ZUN1c3RvbUdldHRlck9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDdXN0b21HZXR0ZXI6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IGpzTnVsbCgpKTsKLSAgICBDdXN0b21HZXR0ZXIqIHJlc3VsdCA9IEN1c3RvbUdldHRlcjo6Y3Jl
YXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDdXN0
b21HZXR0ZXI6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBqc051bGwoKSk7CisgICAgQ3VzdG9tR2V0dGVyKiByZXN1bHQgPSBDdXN0b21HZXR0ZXI6OmNy
ZWF0ZSh2bSwgc3RydWN0dXJlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVET01KSVRO
b2RlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IERPTUpJVE5vZGU6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIERPTUpJVEdldHRlcjo6
Y3JlYXRlKGV4ZWMtPnZtKCksIERPTUpJVEdldHRlcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwganNOdWxsKCkpKSk7Ci0gICAgRE9NSklU
Tm9kZSogcmVzdWx0ID0gRE9NSklUTm9kZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Cisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBET01KSVROb2RlOjpjcmVhdGVTdHJ1Y3R1cmUodm0s
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgRE9NSklUR2V0dGVyOjpjcmVhdGUodm0sIERP
TUpJVEdldHRlcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIGpzTnVsbCgpKSkpOworICAgIERPTUpJVE5vZGUqIHJlc3VsdCA9IERPTUpJVE5vZGU6OmNy
ZWF0ZSh2bSwgc3RydWN0dXJlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVET01KSVRH
ZXR0ZXJPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gRE9NSklUR2V0dGVyOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBqc051bGwoKSk7
Ci0gICAgRE9NSklUR2V0dGVyKiByZXN1bHQgPSBET01KSVRHZXR0ZXI6OmNyZWF0ZShleGVjLT52
bSgpLCBzdHJ1Y3R1cmUpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodm0pOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gRE9NSklUR2V0dGVyOjpj
cmVhdGVTdHJ1Y3R1cmUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwganNOdWxsKCkp
OworICAgIERPTUpJVEdldHRlciogcmVzdWx0ID0gRE9NSklUR2V0dGVyOjpjcmVhdGUodm0sIHN0
cnVjdHVyZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklUR2V0dGVyQ29tcGxl
eE9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBET01KSVRHZXR0ZXJDb21wbGV4OjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBqc051bGwo
KSk7Ci0gICAgRE9NSklUR2V0dGVyQ29tcGxleCogcmVzdWx0ID0gRE9NSklUR2V0dGVyQ29tcGxl
eDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RydWN0
dXJlKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IERPTUpJVEdldHRlckNvbXBsZXg6OmNyZWF0
ZVN0cnVjdHVyZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBqc051bGwoKSk7Cisg
ICAgRE9NSklUR2V0dGVyQ29tcGxleCogcmVzdWx0ID0gRE9NSklUR2V0dGVyQ29tcGxleDo6Y3Jl
YXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklURnVuY3Rpb25PYmplY3QoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gRE9NSklURnVuY3Rpb25PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzTnVsbCgpKTsKLSAgICBET01KSVRGdW5jdGlv
bk9iamVjdCogcmVzdWx0ID0gRE9NSklURnVuY3Rpb25PYmplY3Q6OmNyZWF0ZShleGVjLT52bSgp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBET01KSVRGdW5jdGlvbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzTnVsbCgpKTsKKyAgICBET01KSVRGdW5jdGlvbk9i
amVjdCogcmVzdWx0ID0gRE9NSklURnVuY3Rpb25PYmplY3Q6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNy
ZWF0ZURPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gRE9NSklU
Q2hlY2tTdWJDbGFzc09iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwganNOdWxsKCkpOwotICAgIERPTUpJVENoZWNrU3ViQ2xhc3NP
YmplY3QqIHJlc3VsdCA9IERPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3Q6OmNyZWF0ZShleGVjLT52
bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSk7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBET01KSVRDaGVja1N1YkNsYXNzT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwganNOdWxsKCkpOworICAgIERPTUpJVENo
ZWNrU3ViQ2xhc3NPYmplY3QqIHJlc3VsdCA9IERPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3Q6OmNy
ZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtMjEwOSwyMyArMjEyNCwyNiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQ0FuZFN3ZWVwKEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICBleGVjLT5oZWFwKCktPmNvbGxlY3RO
b3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKGV4ZWMtPmhlYXAoKS0+c2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0aW9uKCkp
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICB2bS5oZWFwLmNvbGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHZtLmhlYXAuc2l6ZUFmdGVyTGFzdEZ1
bGxDb2xsZWN0aW9uKCkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkZ1bGxHQyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7Ci0gICAgZXhlYy0+aGVhcCgpLT5jb2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZXhlYy0+aGVhcCgpLT5zaXpl
QWZ0ZXJMYXN0RnVsbENvbGxlY3Rpb24oKSkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIHZtLmhlYXAuY29sbGVjdFN5bmMoQ29sbGVj
dGlvblNjb3BlOjpGdWxsKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHZt
LmhlYXAuc2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0aW9uKCkpKTsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVkZW5HQyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgZXhlYy0+aGVhcCgpLT5jb2xsZWN0U3luYyhD
b2xsZWN0aW9uU2NvcGU6OkVkZW4pOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIoZXhlYy0+aGVhcCgpLT5zaXplQWZ0ZXJMYXN0RWRlbkNvbGxlY3Rpb24oKSkpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIHZtLmhl
YXAuY29sbGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpFZGVuKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKHZtLmhlYXAuc2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0aW9uKCkp
KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZvcmNlR0NTbG93
UGF0aHMoRXhlY1N0YXRlKikKQEAgLTIxMzgsOCArMjE1Niw5IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25Gb3IKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkhlYXBTaXplKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGV4ZWMtPmhlYXAo
KS0+c2l6ZSgpKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih2bS5oZWFwLnNp
emUoKSkpOwogfQogCiAvLyBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBnZW5lcmFsbHkgdmVyeSBoZWxw
ZnVsIGluIDY0LWJpdCBjb2RlIGFzIHRoZSB0YWcgYW5kIHBheWxvYWQKQEAgLTIzNjcsMTIgKzIz
ODYsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNsZQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2hhZG93Q2hpY2tlbkZ1bmN0aW9uc09u
U3RhY2soRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhl
Yy0+dm0oKS5zaGFkb3dDaGlja2VuKCkuZnVuY3Rpb25zT25TdGFjayhleGVjKSk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZtLnNoYWRvd0No
aWNrZW4oKS5mdW5jdGlvbnNPblN0YWNrKGV4ZWMpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblNldEdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZE5vdFRo
cm93KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBleGVjLT52bSgpLnNldEdsb2JhbENvbnN0UmVk
ZWNsYXJhdGlvblNob3VsZFRocm93KGZhbHNlKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIHZtLnNldEdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93KGZhbHNlKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0yODA3LDkg
KzI4MjgsMTAgQEAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19mdW5kYW1lbgogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSlNDT3B0aW9ucyhFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU09iamVjdCogb3B0aW9u
c09iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogI2RlZmluZSBGT1JfRUFDSF9P
UFRJT04odHlwZV8sIG5hbWVfLCBkZWZhdWx0VmFsdWVfLCBhdmFpbGFiaWxpdHlfLCBkZXNjcmlw
dGlvbl8pIFwKLSAgICBhZGRPcHRpb24oZXhlYy0+dm0oKSwgb3B0aW9uc09iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAjbmFtZV8pLCBPcHRpb25zOjpuYW1lXygpKTsKKyAgICBh
ZGRPcHRpb24odm0sIG9wdGlvbnNPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
I25hbWVfKSwgT3B0aW9uczo6bmFtZV8oKSk7CiAgICAgSlNDX09QVElPTlMoRk9SX0VBQ0hfT1BU
SU9OKQogI3VuZGVmIEZPUl9FQUNIX09QVElPTgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
b3B0aW9uc09iamVjdCk7CkBAIC0yODQ3LDcgKzI4NjksOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uVHJhCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25GYWlsTmV4dE5ld0NvZGVCbG9jayhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgZXhlYy0+
dm0oKS5zZXRGYWlsTmV4dE5ld0NvZGVCbG9jaygpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgdm0uc2V0RmFpbE5leHROZXdDb2RlQmxvY2soKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0yODg5LDcgKzI5MTIsOCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRWZmCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25NYWtlTWFzcXVlcmFkZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoTWFzcXVlcmFkZXI6OmNyZWF0ZShleGVjLT52bSgpLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoTWFzcXVlcmFkZXI6OmNyZWF0ZSh2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25IYXNDdXN0b21Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTI5MDIs
MTQgKzI5MjYsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkhhcwog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcFR5cGVzRm9yQWxsVmFy
aWFibGVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBleGVjLT52bSgpLmR1bXBUeXBlUHJvZmls
ZXJEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICB2bS5kdW1wVHlwZVByb2Zp
bGVyRGF0YSgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GaW5kVHlwZUZvckV4cHJl
c3Npb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS50eXBlUHJvZmlsZXIoKSk7CisgICAgUkVMRUFTRV9B
U1NFUlQodm0udHlwZVByb2ZpbGVyKCkpOwogICAgIHZtLnR5cGVQcm9maWxlckxvZygpLT5wcm9j
ZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoImpzYyBUZXN0aW5nIEFQSTogZnVuY3Rpb25GaW5k
VHlwZUZvckV4cHJlc3Npb24iKSk7CiAKICAgICBKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBleGVj
LT5hcmd1bWVudCgwKTsKQEAgLTI5MjEsMTQgKzI5NDYsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkZpbgogICAgIFN0cmluZyBzb3VyY2VDb2RlVGV4dCA9IGV4ZWN1
dGFibGUtPnNvdXJjZSgpLnZpZXcoKS50b1N0cmluZygpOwogICAgIHVuc2lnbmVkIG9mZnNldCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VDb2RlVGV4dC5maW5kKHN1YnN0cmluZykgKyBl
eGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpKTsKICAgICAKLSAgICBTdHJpbmcganNv
blN0cmluZyA9IGV4ZWMtPnZtKCkudHlwZVByb2ZpbGVyKCktPnR5cGVJbmZvcm1hdGlvbkZvckV4
cHJlc3Npb25BdE9mZnNldChUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsLCBvZmZz
ZXQsIGV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIGV4ZWMtPnZtKCkpOworICAgIFN0cmluZyBqc29u
U3RyaW5nID0gdm0udHlwZVByb2ZpbGVyKCktPnR5cGVJbmZvcm1hdGlvbkZvckV4cHJlc3Npb25B
dE9mZnNldChUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsLCBvZmZzZXQsIGV4ZWN1
dGFibGUtPnNvdXJjZUlEKCksIHZtKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTT05Q
YXJzZShleGVjLCBqc29uU3RyaW5nKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25SZXR1cm5UeXBlRm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkudHlwZVByb2ZpbGVy
KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLnR5cGVQcm9maWxlcigpKTsKICAgICB2bS50eXBl
UHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJqc2MgVGVzdGlu
ZyBBUEk6IGZ1bmN0aW9uUmV0dXJuVHlwZUZvciIpKTsKIAogICAgIEpTVmFsdWUgZnVuY3Rpb25W
YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtMjkzNiwxNCArMjk2MSwxNSBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmV0CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBleGVjdXRhYmxlID0gKGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCBmdW5jdGlvblZh
bHVlLmFzQ2VsbCgpLT5nZXRPYmplY3QoKSkpLT5qc0V4ZWN1dGFibGUoKTsKIAogICAgIHVuc2ln
bmVkIG9mZnNldCA9IGV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOwotICAg
IFN0cmluZyBqc29uU3RyaW5nID0gZXhlYy0+dm0oKS50eXBlUHJvZmlsZXIoKS0+dHlwZUluZm9y
bWF0aW9uRm9yRXhwcmVzc2lvbkF0T2Zmc2V0KFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JG
dW5jdGlvblJldHVybiwgb2Zmc2V0LCBleGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBleGVjLT52bSgp
KTsKKyAgICBTdHJpbmcganNvblN0cmluZyA9IHZtLnR5cGVQcm9maWxlcigpLT50eXBlSW5mb3Jt
YXRpb25Gb3JFeHByZXNzaW9uQXRPZmZzZXQoVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1
bmN0aW9uUmV0dXJuLCBvZmZzZXQsIGV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIHZtKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKSk7CiB9CiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wQmFzaWNCbG9ja0V4ZWN1
dGlvblJhbmdlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+
dm0oKS5jb250cm9sRmxvd1Byb2ZpbGVyKCkpOwotICAgIGV4ZWMtPnZtKCkuY29udHJvbEZsb3dQ
cm9maWxlcigpLT5kdW1wRGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgUkVM
RUFTRV9BU1NFUlQodm0uY29udHJvbEZsb3dQcm9maWxlcigpKTsKKyAgICB2bS5jb250cm9sRmxv
d1Byb2ZpbGVyKCktPmR1bXBEYXRhKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KIApAQCAtMjk4MSw3ICszMDA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkJhcwogICAgIFJFTEVBU0VfQVNTRVJUKHNvdXJjZUNvZGVUZXh0
LmNvbnRhaW5zKHN1YnN0cmluZykpOwogICAgIGludCBvZmZzZXQgPSBzb3VyY2VDb2RlVGV4dC5m
aW5kKHN1YnN0cmluZykgKyBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpOwogICAg
IAotICAgIHNpemVfdCBleGVjdXRpb25Db3VudCA9IHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+
YmFzaWNCbG9ja0V4ZWN1dGlvbkNvdW50QXRUZXh0T2Zmc2V0KG9mZnNldCwgZXhlY3V0YWJsZS0+
c291cmNlSUQoKSwgZXhlYy0+dm0oKSk7CisgICAgc2l6ZV90IGV4ZWN1dGlvbkNvdW50ID0gdm0u
Y29udHJvbEZsb3dQcm9maWxlcigpLT5iYXNpY0Jsb2NrRXhlY3V0aW9uQ291bnRBdFRleHRPZmZz
ZXQob2Zmc2V0LCBleGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB2bSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKGV4ZWN1dGlvbkNvdW50KSk7CiB9CiAKQEAgLTI5OTMsNyArMzAx
OSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FbmEKIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRyYWluTWljcm90YXNrcyhFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgZXhlYy0+dm0oKS5kcmFpbk1pY3JvdGFza3MoKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIHZtLmRyYWluTWljcm90YXNrcygpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTMwOTMsNyArMzEyMCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZW4KICAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0g
ICAgSGVhcFNuYXBzaG90QnVpbGRlciBzbmFwc2hvdEJ1aWxkZXIoZXhlYy0+dm0oKS5lbnN1cmVI
ZWFwUHJvZmlsZXIoKSk7CisgICAgSGVhcFNuYXBzaG90QnVpbGRlciBzbmFwc2hvdEJ1aWxkZXIo
dm0uZW5zdXJlSGVhcFByb2ZpbGVyKCkpOwogICAgIHNuYXBzaG90QnVpbGRlci5idWlsZFNuYXBz
aG90KCk7CiAKICAgICBTdHJpbmcganNvblN0cmluZyA9IHNuYXBzaG90QnVpbGRlci5qc29uKCk7
CkBAIC0zMTEzLDcgKzMxNDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uRW5zCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgaWYgKEpTT2JqZWN0
KiBvYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIGV4ZWMtPmFyZ3VtZW50KDAp
KSkKLSAgICAgICAgICAgIG9iamVjdC0+ZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpOwor
ICAgICAgICAgICAgb2JqZWN0LT5lbnN1cmVBcnJheVN0b3JhZ2Uodm0pOwogICAgIH0KICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMzEyMSw3ICszMTQ4
LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVucwogI2lmIEVOQUJM
RShTQU1QTElOR19QUk9GSUxFUikKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25TdGFydFNhbXBsaW5nUHJvZmlsZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFNhbXBsaW5n
UHJvZmlsZXImIHNhbXBsaW5nUHJvZmlsZXIgPSBleGVjLT52bSgpLmVuc3VyZVNhbXBsaW5nUHJv
ZmlsZXIoV1RGOjpTdG9wd2F0Y2g6OmNyZWF0ZSgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIFNhbXBsaW5nUHJvZmlsZXImIHNhbXBsaW5nUHJvZmlsZXIgPSB2bS5lbnN1cmVTYW1w
bGluZ1Byb2ZpbGVyKFdURjo6U3RvcHdhdGNoOjpjcmVhdGUoKSk7CiAgICAgc2FtcGxpbmdQcm9m
aWxlci5ub3RpY2VDdXJyZW50VGhyZWFkQXNKU0NFeGVjdXRpb25UaHJlYWQoKTsKICAgICBzYW1w
bGluZ1Byb2ZpbGVyLnN0YXJ0KCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKQEAgLTM0NzksNyArMzUwNyw3IEBAIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZl
KEdsb2JhbE9iamVjdCoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHNvdXJj
ZSA9IHNvdXJjZSArIGxpbmU7CiAgICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2UgKyAnXG4nOwot
ICAgICAgICAgICAgY2hlY2tTeW50YXgoZ2xvYmFsT2JqZWN0LT52bSgpLCBtYWtlU291cmNlKHNv
dXJjZSwgc291cmNlT3JpZ2luKSwgZXJyb3IpOworICAgICAgICAgICAgY2hlY2tTeW50YXgodm0s
IG1ha2VTb3VyY2Uoc291cmNlLCBzb3VyY2VPcmlnaW4pLCBlcnJvcik7CiAgICAgICAgICAgICBp
ZiAoIWxpbmVbMF0pIHsKICAgICAgICAgICAgICAgICBmcmVlKGxpbmUpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMzUxOCw3ICszNTQ2LDcgQEAgc3RhdGljIHZvaWQgcnVuSW50ZXJhY3Rp
dmUoR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgcmV0dXJuVmFsdWUu
dG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwog
CiAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIGdsb2JhbE9iamVjdC0+
dm0oKS5kcmFpbk1pY3JvdGFza3MoKTsKKyAgICAgICAgdm0uZHJhaW5NaWNyb3Rhc2tzKCk7CiAg
ICAgfQogICAgIHByaW50ZigiXG4iKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QmFzZS5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsOCBAQCBib29sIEpTQ2hlY2tT
Y3JpcHRTeW50YXgoSlNDb250ZXh0UmVmIGN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTTG9ja0hvbGRlciBsb2Nr
ZXIoZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
a2VyKHZtKTsKIAogICAgIHN0YXJ0aW5nTGluZU51bWJlciA9IHN0ZDo6bWF4KDEsIHN0YXJ0aW5n
TGluZU51bWJlcik7CiAKQEAgLTExMCw3ICsxMTEsNyBAQCBib29sIEpTQ2hlY2tTY3JpcHRTeW50
YXgoSlNDb250ZXh0UmVmIGN0CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICAq
ZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgc3ludGF4RXhjZXB0aW9uKTsKICNpZiBFTkFCTEUoUkVN
T1RFX0lOU1BFQ1RPUikKLSAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBFeGNlcHRpb246
OmNyZWF0ZShleGVjLT52bSgpLCBzeW50YXhFeGNlcHRpb24pOworICAgICAgICBFeGNlcHRpb24q
IGV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjo6Y3JlYXRlKHZtLCBzeW50YXhFeGNlcHRpb24pOwogICAg
ICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5y
ZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKICNlbmRpZgogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xMzAsOSArMTMxLDEwIEBAIHZvaWQgSlNHYXJiYWdlQ29sbGVjdChKU0Nv
bnRleHRSZWYgY3R4KQogICAgICAgICByZXR1cm47CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0
b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCi0gICAgZXhlYy0+dm0o
KS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7CisgICAgdm0uaGVhcC5yZXBvcnRB
YmFuZG9uZWRPYmplY3RHcmFwaCgpOwogfQogCiB2b2lkIEpTUmVwb3J0RXh0cmFNZW1vcnlDb3N0
KEpTQ29udGV4dFJlZiBjdHgsIHNpemVfdCBzaXplKQpAQCAtMTQyLDkgKzE0NCwxMCBAQCB2b2lk
IEpTUmVwb3J0RXh0cmFNZW1vcnlDb3N0KEpTQ29udGV4dFJlCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTTG9ja0hvbGRlciBs
b2NrZXIoZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9ja2VyKHZtKTsKIAotICAgIGV4ZWMtPnZtKCkuaGVhcC5kZXByZWNhdGVkUmVwb3J0RXh0cmFN
ZW1vcnkoc2l6ZSk7CisgICAgdm0uaGVhcC5kZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnkoc2l6
ZSk7CiB9CiAKIGV4dGVybiAiQyIgSlNfRVhQT1JUIHZvaWQgSlNTeW5jaHJvbm91c0dhcmJhZ2VD
b2xsZWN0Rm9yRGVidWdnaW5nKEpTQ29udGV4dFJlZik7CkBAIC0xNTYsOCArMTU5LDkgQEAgdm9p
ZCBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1ZwogICAgICAgICByZXR1cm47CiAK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tl
cihleGVjKTsKLSAgICBleGVjLT52bSgpLmhlYXAuY29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9u
U2NvcGU6OkZ1bGwpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2tlcih2bSk7CisgICAgdm0uaGVhcC5jb2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rpb25TY29w
ZTo6RnVsbCk7CiB9CiAKIHZvaWQgSlNTeW5jaHJvbm91c0VkZW5Db2xsZWN0Rm9yRGVidWdnaW5n
KEpTQ29udGV4dFJlZiBjdHgpCkBAIC0xNjYsOCArMTcwLDkgQEAgdm9pZCBKU1N5bmNocm9ub3Vz
RWRlbkNvbGxlY3RGb3JEZWJ1Z2dpbgogICAgICAgICByZXR1cm47CiAKICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKLSAgICBl
eGVjLT52bSgpLmhlYXAuY29sbGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpFZGVuKTsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworICAgIHZt
LmhlYXAuY29sbGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpFZGVuKTsKIH0KIAogdm9pZCBKU0Rp
c2FibGVHQ1RpbWVyKHZvaWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIEpTQ2FsbGJhY2tDb25zdHJ1
Y3RvciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQ2xhc3NSZWYgY2xhc3NSZWYsIEpTT2JqZWN0Q2Fs
bEFzQ29uc3RydWN0b3JDYWxsYmFjayBjYWxsYmFjaykgCiAgICAgewotICAgICAgICBKU0NhbGxi
YWNrQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNDYWxsYmFja0NvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgSlNDYWxsYmFja0NvbnN0cnVj
dG9yKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBjbGFzc1JlZiwgY2FsbGJhY2spOworICAgICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBKU0NhbGxiYWNrQ29uc3RydWN0b3IqIGNv
bnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNDYWxsYmFja0NvbnN0cnVj
dG9yPih2bS5oZWFwKSkgSlNDYWxsYmFja0NvbnN0cnVjdG9yKGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlLCBjbGFzc1JlZiwgY2FsbGJhY2spOwogICAgICAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsT2JqZWN0LCBjbGFzc1JlZik7CiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3Rv
cjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3QuaAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw4ICsxMzgsOSBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgSlNDYWxsYmFja09iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
Q2xhc3NSZWYgY2xhc3NSZWYsIHZvaWQqIGRhdGEpCiAgICAgeworICAgICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbE9iamVjdCwgIXN0cnVjdHVy
ZS0+Z2xvYmFsT2JqZWN0KCkgfHwgc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSA9PSBnbG9iYWxP
YmplY3QpOwotICAgICAgICBKU0NhbGxiYWNrT2JqZWN0KiBjYWxsYmFja09iamVjdCA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQ2FsbGJhY2tPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBK
U0NhbGxiYWNrT2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSwgY2xhc3NSZWYsIGRhdGEpOworICAgICAg
ICBKU0NhbGxiYWNrT2JqZWN0KiBjYWxsYmFja09iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTQ2FsbGJhY2tPYmplY3Q+KHZtLmhlYXApKSBKU0NhbGxiYWNrT2JqZWN0KGV4ZWMs
IHN0cnVjdHVyZSwgY2xhc3NSZWYsIGRhdGEpOwogICAgICAgICBjYWxsYmFja09iamVjdC0+Zmlu
aXNoQ3JlYXRpb24oZXhlYyk7CiAgICAgICAgIHJldHVybiBjYWxsYmFja09iamVjdDsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQkocmV2aXNpb24gMjIx
ODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTExNSw5ICsxMTUsMTEgQEAgLSAoSlNWYWx1ZSAqKWV2YWx1YXRlU2NyaXB0OihO
U1N0cmluZyAqKQogCiAtICh2b2lkKXNldEV4Y2VwdGlvbjooSlNWYWx1ZSAqKXZhbHVlCiB7Ci0g
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKHRvSlMobV9jb250ZXh0KSk7CisgICAgSlNDOjpF
eGVjU3RhdGUqIGV4ZWMgPSB0b0pTKG1fY29udGV4dCk7CisgICAgSlNDOjpWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgaWYgKHZhbHVl
KQotICAgICAgICBtX2V4Y2VwdGlvbi5zZXQodG9KUyhtX2NvbnRleHQpLT52bSgpLCB0b0pTKEpT
VmFsdWVUb09iamVjdChtX2NvbnRleHQsIHZhbHVlSW50ZXJuYWxWYWx1ZSh2YWx1ZSksIDApKSk7
CisgICAgICAgIG1fZXhjZXB0aW9uLnNldCh2bSwgdG9KUyhKU1ZhbHVlVG9PYmplY3QobV9jb250
ZXh0LCB2YWx1ZUludGVybmFsVmFsdWUodmFsdWUpLCAwKSkpOwogICAgIGVsc2UKICAgICAgICAg
bV9leGNlcHRpb24uY2xlYXIoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDb250ZXh0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ29udGV4dFJlZi5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDkgKzE4OSwx
MCBAQCBKU09iamVjdFJlZiBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoSlNDCiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNM
b2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrZXIodm0pOwogCi0gICAgcmV0dXJuIHRvUmVmKGpzQ2FzdDxKU09iamVj
dCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bWV0aG9kVGFibGUoKS0+dG9UaGlzKGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYywgTm90U3RyaWN0TW9kZSkpKTsKKyAgICBy
ZXR1cm4gdG9SZWYoanNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5tZXRob2RUYWJsZSh2bSktPnRvVGhpcyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4
ZWMsIE5vdFN0cmljdE1vZGUpKSk7CiB9CiAKIEpTQ29udGV4dEdyb3VwUmVmIEpTQ29udGV4dEdl
dEdyb3VwKEpTQ29udGV4dFJlZiBjdHgpCkBAIC0zMDQsOSArMzA1LDEwIEBAIEpTU3RyaW5nUmVm
IEpTQ29udGV4dENyZWF0ZUJhY2t0cmFjZShKU0MKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgQ2FsbEZyYW1lKiBmcmFtZSA9IGV4
ZWMtPnZtKCkudG9wQ2FsbEZyYW1lOworICAgIENhbGxGcmFtZSogZnJhbWUgPSB2bS50b3BDYWxs
RnJhbWU7CiAKICAgICBBU1NFUlQobWF4U3RhY2tTaXplKTsKICAgICBCYWNrdHJhY2VGdW5jdG9y
IGZ1bmN0b3IoYnVpbGRlciwgbWF4U3RhY2tTaXplKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjY0LDEwICsyNjQsMTEgQEAgLSAodm9pZClkaWRSZW1vdmVPd25lcjooaWQpb3duZXIKIC0gKEpT
VmFsdWUgKil2YWx1ZQogewogICAgIFdURjo6TG9ja2VyPEpTQzo6SlNMb2NrPiBsb2NrZXIobV9s
b2NrLmdldCgpKTsKLSAgICBpZiAoIW1fbG9jay0+dm0oKSkKKyAgICBKU0M6OlZNKiB2bSA9IG1f
bG9jay0+dm0oKTsKKyAgICBpZiAoIXZtKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgSlND
OjpKU0xvY2tIb2xkZXIgYXBpTG9ja2VyKG1fbG9jay0+dm0oKSk7CisgICAgSlNDOjpKU0xvY2tI
b2xkZXIgYXBpTG9ja2VyKHZtKTsKICAgICBpZiAoIW1fZ2xvYmFsT2JqZWN0KQogICAgICAgICBy
ZXR1cm4gbmlsOwogICAgIGlmIChtX3dlYWtWYWx1ZS5pc0NsZWFyKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg5LDE0ICs4OSwxNSBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2UoSlNDb250ZXh0UmVm
IGN0CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pT
KGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCiAgICAgaWYgKCFqc0NsYXNz
KQogICAgICAgICByZXR1cm4gdG9SZWYoY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYykpOwogCiAg
ICAgSlNDYWxsYmFja09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD4qIG9iamVjdCA9IEpTQ2Fs
bGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNhbGxiYWNr
T2JqZWN0U3RydWN0dXJlKCksIGpzQ2xhc3MsIGRhdGEpOwogICAgIGlmIChKU09iamVjdCogcHJv
dG90eXBlID0ganNDbGFzcy0+cHJvdG90eXBlKGV4ZWMpKQotICAgICAgICBvYmplY3QtPnNldFBy
b3RvdHlwZURpcmVjdChleGVjLT52bSgpLCBwcm90b3R5cGUpOworICAgICAgICBvYmplY3QtPnNl
dFByb3RvdHlwZURpcmVjdCh2bSwgcHJvdG90eXBlKTsKIAogICAgIHJldHVybiB0b1JlZihvYmpl
Y3QpOwogfQpAQCAtMTA4LDggKzEwOSw5IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUZ1bmN0
aW9uV2l0aENhbGwKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOwotICAgIHJldHVy
biB0b1JlZihKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIGNhbGxBc0Z1bmN0aW9uLCBuYW1lID8gbmFtZS0+c3RyaW5nKCkg
OiBBU0NJSUxpdGVyYWwoImFub255bW91cyIpKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICByZXR1cm4gdG9SZWYoSlNDYWxsYmFj
a0Z1bmN0aW9uOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbEFz
RnVuY3Rpb24sIG5hbWUgPyBuYW1lLT5zdHJpbmcoKSA6IEFTQ0lJTGl0ZXJhbCgiYW5vbnltb3Vz
IikpKTsKIH0KIAogSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlQ29uc3RydWN0b3IoSlNDb250ZXh0
UmVmIGN0eCwgSlNDbGFzc1JlZiBqc0NsYXNzLCBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2Fs
bGJhY2sgY2FsbEFzQ29uc3RydWN0b3IpCkBAIC0xMTksMTQgKzEyMSwxNSBAQCBKU09iamVjdFJl
ZiBKU09iamVjdE1ha2VDb25zdHJ1Y3RvcihKU0NvCiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tl
cihleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
ZXIodm0pOwogCiAgICAgSlNWYWx1ZSBqc1Byb3RvdHlwZSA9IGpzQ2xhc3MgPyBqc0NsYXNzLT5w
cm90b3R5cGUoZXhlYykgOiAwOwogICAgIGlmICghanNQcm90b3R5cGUpCiAgICAgICAgIGpzUHJv
dG90eXBlID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKTsK
IAogICAgIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBKU0NhbGxiYWNrQ29u
c3RydWN0b3I6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSgpLCBq
c0NsYXNzLCBjYWxsQXNDb25zdHJ1Y3Rvcik7Ci0gICAgY29uc3RydWN0b3ItPnB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBqc1Byb3RvdHlwZSwg
RG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIGNvbnN0cnVjdG9yLT5wdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwganNQcm90b3R5cGUsIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICByZXR1cm4gdG9SZWYoY29uc3RydWN0
b3IpOwogfQogCkBAIC0xMzcsMTAgKzE0MCwxMSBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VG
dW5jdGlvbihKU0NvbnRlCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCiAgICAg
c3RhcnRpbmdMaW5lTnVtYmVyID0gc3RkOjptYXgoMSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKLSAg
ICBJZGVudGlmaWVyIG5hbWVJRCA9IG5hbWUgPyBuYW1lLT5pZGVudGlmaWVyKCZleGVjLT52bSgp
KSA6IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImFub255bW91cyIpOworICAgIElkZW50
aWZpZXIgbmFtZUlEID0gbmFtZSA/IG5hbWUtPmlkZW50aWZpZXIoJnZtKSA6IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgImFub255bW91cyIpOwogICAgIAogICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyIGFyZ3M7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlckNvdW50
OyBpKyspCkBAIC0yNTksMjAgKzI2MywyMCBAQCB2b2lkIEpTT2JqZWN0U2V0UHJvdG90eXBlKEpT
Q29udGV4dFJlZiBjCiAgICAgfQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0
b0pTKG9iamVjdCk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CiAK
ICAgICBpZiAoSlNQcm94eSogcHJveHkgPSBqc0R5bmFtaWNDYXN0PEpTUHJveHkqPih2bSwganNP
YmplY3QpKSB7CiAgICAgICAgIGlmIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNE
eW5hbWljQ2FzdDxKU0dsb2JhbE9iamVjdCo+KHZtLCBwcm94eS0+dGFyZ2V0KCkpKSB7Ci0gICAg
ICAgICAgICBnbG9iYWxPYmplY3QtPnJlc2V0UHJvdG90eXBlKGV4ZWMtPnZtKCksIGpzVmFsdWUu
aXNPYmplY3QoKSA/IGpzVmFsdWUgOiBqc051bGwoKSk7CisgICAgICAgICAgICBnbG9iYWxPYmpl
Y3QtPnJlc2V0UHJvdG90eXBlKHZtLCBqc1ZhbHVlLmlzT2JqZWN0KCkgPyBqc1ZhbHVlIDoganNO
dWxsKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIFNvbWVk
YXkgd2UgbWlnaHQgdXNlIHByb3hpZXMgZm9yIHNvbWV0aGluZyBvdGhlciB0aGFuIEpTR2xvYmFs
T2JqZWN0cywgYnV0IHRvZGF5IGlzIG5vdCB0aGF0IGRheS4KICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0gICAganNPYmplY3QtPnNldFByb3RvdHlwZShleGVj
LT52bSgpLCBleGVjLCBqc1ZhbHVlLmlzT2JqZWN0KCkgPyBqc1ZhbHVlIDoganNOdWxsKCkpOwor
ICAgIGpzT2JqZWN0LT5zZXRQcm90b3R5cGUodm0sIGV4ZWMsIGpzVmFsdWUuaXNPYmplY3QoKSA/
IGpzVmFsdWUgOiBqc051bGwoKSk7CiB9CiAKIGJvb2wgSlNPYmplY3RIYXNQcm9wZXJ0eShKU0Nv
bnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFt
ZSkKQEAgLTI4MiwxMSArMjg2LDEyIEBAIGJvb2wgSlNPYmplY3RIYXNQcm9wZXJ0eShKU0NvbnRl
eHRSZWYgY3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCiAgICAgSlNP
YmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogICAgIAotICAgIHJldHVybiBqc09iamVj
dC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT52bSgp
KSk7CisgICAgcmV0dXJuIGpzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUt
PmlkZW50aWZpZXIoJnZtKSk7CiB9CiAKIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm9wZXJ0eShK
U0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAtMjk2LDExICszMDEsMTIgQEAgSlNWYWx1
ZVJlZiBKU09iamVjdEdldFByb3BlcnR5KEpTQ29udGV4dAogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTTG9ja0hvbGRlciBs
b2NrZXIoZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9ja2VyKHZtKTsKIAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKIAot
ICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzT2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lLT5p
ZGVudGlmaWVyKCZleGVjLT52bSgpKSk7CisgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNPYmplY3Qt
PmdldChleGVjLCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJnZtKSk7CiAgICAgaGFuZGxlRXhj
ZXB0aW9uSWZOZWVkZWQoZXhlYywgZXhjZXB0aW9uKTsKICAgICByZXR1cm4gdG9SZWYoZXhlYywg
anNWYWx1ZSk7CiB9CkBAIC0zMTcsMTcgKzMyMywxNyBAQCB2b2lkIEpTT2JqZWN0U2V0UHJvcGVy
dHkoSlNDb250ZXh0UmVmIGN0CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
dm0pOwogCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwotICAgIElkZW50
aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkpKTsKKyAgICBJ
ZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZ2bSkpOwogICAgIEpTVmFs
dWUganNWYWx1ZSA9IHRvSlMoZXhlYywgdmFsdWUpOwogCiAgICAgYm9vbCBkb2VzTm90SGF2ZVBy
b3BlcnR5ID0gYXR0cmlidXRlcyAmJiAhanNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIG5hbWUp
OwogICAgIGlmIChMSUtFTFkoIXNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBpZiAoZG9l
c05vdEhhdmVQcm9wZXJ0eSkgewogICAgICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2Mo
anNWYWx1ZSwgYXR0cmlidXRlcyk7Ci0gICAgICAgICAgICBqc09iamVjdC0+bWV0aG9kVGFibGUo
KS0+ZGVmaW5lT3duUHJvcGVydHkoanNPYmplY3QsIGV4ZWMsIG5hbWUsIGRlc2MsIGZhbHNlKTsK
KyAgICAgICAgICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5
KGpzT2JqZWN0LCBleGVjLCBuYW1lLCBkZXNjLCBmYWxzZSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChqc09iamVjdCk7Ci0gICAgICAgICAgICBq
c09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KGpzT2JqZWN0LCBleGVjLCBuYW1lLCBqc1ZhbHVl
LCBzbG90KTsKKyAgICAgICAgICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dChqc09i
amVjdCwgZXhlYywgbmFtZSwganNWYWx1ZSwgc2xvdCk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
aGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhlYywgZXhjZXB0aW9uKTsKQEAgLTM1NywxMiArMzYz
LDEzIEBAIHZvaWQgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoSlNDb250ZXgKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNM
b2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrZXIodm0pOwogCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhv
YmplY3QpOwogICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywgdmFsdWUpOwogICAgIAot
ICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KGpzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eUluZGV4LCBqc1ZhbHVlLCBmYWxzZSk7CisgICAganNPYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+cHV0QnlJbmRleChqc09iamVjdCwgZXhlYywgcHJvcGVydHlJbmRleCwganNWYWx1ZSwg
ZmFsc2UpOwogICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiB9
CiAKQEAgLTM3MywxMSArMzgwLDEyIEBAIGJvb2wgSlNPYmplY3REZWxldGVQcm9wZXJ0eShKU0Nv
bnRleHRSZWYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCiAgICAgSlNP
YmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCi0gICAgYm9vbCByZXN1bHQgPSBqc09i
amVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoanNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+dm0oKSkpOworICAgIGJvb2wgcmVzdWx0ID0ganNP
YmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkoanNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZS0+aWRlbnRpZmllcigmdm0pKTsKICAgICBoYW5kbGVFeGNlcHRpb25JZk5lZWRl
ZChleGVjLCBleGNlcHRpb24pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC00NTUsMTAgKzQ2
MywxMCBAQCBKU1ZhbHVlUmVmIEpTT2JqZWN0R2V0UHJpdmF0ZVByb3BlcnR5KEpTCiB7CiAgICAg
RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZt
KTsKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQ7Ci0gICAgSWRlbnRpZmllciBuYW1lKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhl
Yy0+dm0oKSkpOworICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIo
JnZtKSk7CiAKIAogICAgIC8vIEdldCB3cmFwcGVkIG9iamVjdCBpZiBwcm94aWVkCkBAIC00ODAs
MjYgKzQ4OCwyNiBAQCBib29sIEpTT2JqZWN0U2V0UHJpdmF0ZVByb3BlcnR5KEpTQ29udGV4CiB7
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
a2VyKHZtKTsKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAgICAgSlNW
YWx1ZSBqc1ZhbHVlID0gdmFsdWUgPyB0b0pTKGV4ZWMsIHZhbHVlKSA6IEpTVmFsdWUoKTsKLSAg
ICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT52bSgpKSk7
CisgICAgSWRlbnRpZmllciBuYW1lKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmdm0pKTsKIAog
ICAgIC8vIEdldCB3cmFwcGVkIG9iamVjdCBpZiBwcm94aWVkCiAgICAgaWYgKGpzT2JqZWN0LT5p
bmhlcml0cyh2bSwgSlNQcm94eTo6aW5mbygpKSkKICAgICAgICAganNPYmplY3QgPSBqc0Nhc3Q8
SlNQcm94eSo+KGpzT2JqZWN0KS0+dGFyZ2V0KCk7CiAKICAgICBpZiAoanNPYmplY3QtPmluaGVy
aXRzKHZtLCBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6aW5mbygpKSkgewotICAg
ICAgICBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4qPihqc09iamVjdCkt
PnNldFByaXZhdGVQcm9wZXJ0eShleGVjLT52bSgpLCBuYW1lLCBqc1ZhbHVlKTsKKyAgICAgICAg
anNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+Kj4oanNPYmplY3QpLT5zZXRQ
cml2YXRlUHJvcGVydHkodm0sIG5hbWUsIGpzVmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgaWYgKGpzT2JqZWN0LT5pbmhlcml0cyh2bSwgSlNDYWxsYmFja09iamVjdDxK
U0Rlc3RydWN0aWJsZU9iamVjdD46OmluZm8oKSkpIHsKLSAgICAgICAganNDYXN0PEpTQ2FsbGJh
Y2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+Kj4oanNPYmplY3QpLT5zZXRQcml2YXRlUHJv
cGVydHkoZXhlYy0+dm0oKSwgbmFtZSwganNWYWx1ZSk7CisgICAgICAgIGpzQ2FzdDxKU0NhbGxi
YWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pio+KGpzT2JqZWN0KS0+c2V0UHJpdmF0ZVBy
b3BlcnR5KHZtLCBuYW1lLCBqc1ZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
I2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgaWYgKGpzT2JqZWN0LT5pbmhlcml0cyh2bSwg
SlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjppbmZvKCkpKSB7Ci0gICAgICAg
IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD4qPihqc09iamVjdCkt
PnNldFByaXZhdGVQcm9wZXJ0eShleGVjLT52bSgpLCBuYW1lLCBqc1ZhbHVlKTsKKyAgICAgICAg
anNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pio+KGpzT2JqZWN0KS0+
c2V0UHJpdmF0ZVByb3BlcnR5KHZtLCBuYW1lLCBqc1ZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogI2VuZGlmCkBAIC01MTAsOSArNTE4LDkgQEAgYm9vbCBKU09iamVjdERlbGV0
ZVByaXZhdGVQcm9wZXJ0eShKU0NvbgogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4
KTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhl
Yyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgSlNPYmplY3QqIGpzT2JqZWN0
ID0gdG9KUyhvYmplY3QpOwotICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50
aWZpZXIoJmV4ZWMtPnZtKCkpKTsKKyAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5p
ZGVudGlmaWVyKCZ2bSkpOwogCiAgICAgLy8gR2V0IHdyYXBwZWQgb2JqZWN0IGlmIHByb3hpZWQK
ICAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKHZtLCBKU1Byb3h5OjppbmZvKCkpKQpAQCAtNTM5
LDE2ICs1NDcsMTkgQEAgYm9vbCBKU09iamVjdElzRnVuY3Rpb24oSlNDb250ZXh0UmVmIGN0eAog
ewogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSlNMb2NrSG9s
ZGVyIGxvY2tlcih0b0pTKGN0eCkpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwog
ICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIEpTQ2VsbCogY2VsbCA9IHRvSlMob2JqZWN0KTsK
LSAgICByZXR1cm4gY2VsbC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoY2VsbCwgY2FsbERh
dGEpICE9IENhbGxUeXBlOjpOb25lOworICAgIHJldHVybiBjZWxsLT5tZXRob2RUYWJsZSh2bSkt
PmdldENhbGxEYXRhKGNlbGwsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZTo6Tm9uZTsKIH0KIAogSlNW
YWx1ZVJlZiBKU09iamVjdENhbGxBc0Z1bmN0aW9uKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmIG9iamVjdCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tl
cihleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
ZXIodm0pOwogCiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNTY0LDcg
KzU3NSw3IEBAIEpTVmFsdWVSZWYgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihKU0NvbnQKICAgICAg
ICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVjLCBhcmd1bWVudHNbaV0pKTsKIAogICAgIENhbGxE
YXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0ganNPYmplY3QtPm1ldGhvZFRh
YmxlKCktPmdldENhbGxEYXRhKGpzT2JqZWN0LCBjYWxsRGF0YSk7CisgICAgQ2FsbFR5cGUgY2Fs
bFR5cGUgPSBqc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShqc09iamVjdCwg
Y2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkKICAgICAgICAg
cmV0dXJuIDA7CiAKQEAgLTU4Niw3ICs1OTcsOCBAQCBib29sIEpTT2JqZWN0SXNDb25zdHJ1Y3Rv
cihKU0NvbnRleHRSZWYsCiBKU09iamVjdFJlZiBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yKEpT
Q29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tl
cihleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
ZXIodm0pOwogCiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNTk0LDcg
KzYwNiw3IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoSlMKICAgICBK
U09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAKICAgICBDb25zdHJ1Y3REYXRhIGNv
bnN0cnVjdERhdGE7Ci0gICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0ganNPYmplY3Qt
Pm1ldGhvZFRhYmxlKCktPmdldENvbnN0cnVjdERhdGEoanNPYmplY3QsIGNvbnN0cnVjdERhdGEp
OworICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGpzT2JqZWN0LT5tZXRob2RUYWJs
ZSh2bSktPmdldENvbnN0cnVjdERhdGEoanNPYmplY3QsIGNvbnN0cnVjdERhdGEpOwogICAgIGlm
IChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGU6Ok5vbmUpCiAgICAgICAgIHJldHVybiAw
OwogCkBAIC02MzYsNyArNjQ4LDcgQEAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBKU09iamVjdENv
cHlQcm9wZQogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKICAgICBKU1By
b3BlcnR5TmFtZUFycmF5UmVmIHByb3BlcnR5TmFtZXMgPSBuZXcgT3BhcXVlSlNQcm9wZXJ0eU5h
bWVBcnJheSh2bSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgYXJyYXkodm0sIFByb3BlcnR5TmFt
ZU1vZGU6OlN0cmluZ3MpOwotICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQcm9wZXJ0
eU5hbWVzKGpzT2JqZWN0LCBleGVjLCBhcnJheSwgRW51bWVyYXRpb25Nb2RlKCkpOworICAgIGpz
T2JqZWN0LT5tZXRob2RUYWJsZSgqdm0pLT5nZXRQcm9wZXJ0eU5hbWVzKGpzT2JqZWN0LCBleGVj
LCBhcnJheSwgRW51bWVyYXRpb25Nb2RlKCkpOwogCiAgICAgc2l6ZV90IHNpemUgPSBhcnJheS5z
aXplKCk7CiAgICAgcHJvcGVydHlOYW1lcy0+YXJyYXkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShz
aXplKTsKQEAgLTY3Myw4ICs2ODUsOSBAQCBKU1N0cmluZ1JlZiBKU1Byb3BlcnR5TmFtZUFycmF5
R2V0TmFtZUF0CiB2b2lkIEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGROYW1lKEpTUHJvcGVy
dHlOYW1lQWNjdW11bGF0b3JSZWYgYXJyYXksIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSkKIHsK
ICAgICBQcm9wZXJ0eU5hbWVBcnJheSogcHJvcGVydHlOYW1lcyA9IHRvSlMoYXJyYXkpOwotICAg
IEpTTG9ja0hvbGRlciBsb2NrZXIocHJvcGVydHlOYW1lcy0+dm0oKSk7Ci0gICAgcHJvcGVydHlO
YW1lcy0+YWRkKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcihwcm9wZXJ0eU5hbWVzLT52bSgpKSk7
CisgICAgVk0qIHZtID0gcHJvcGVydHlOYW1lcy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
a2VyKHZtKTsKKyAgICBwcm9wZXJ0eU5hbWVzLT5hZGQocHJvcGVydHlOYW1lLT5pZGVudGlmaWVy
KHZtKSk7CiB9CiAKIEpTT2JqZWN0UmVmIEpTT2JqZWN0R2V0UHJveHlUYXJnZXQoSlNPYmplY3RS
ZWYgb2JqZWN0UmVmKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdFJl
Zi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdFJl
Zi5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNT
Y3JpcHRSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsOCArMTQ1LDkgQEAgdm9pZCBKU1Nj
cmlwdFJlbGVhc2UoSlNTY3JpcHRSZWYgc2NyaXB0KQogSlNWYWx1ZVJlZiBKU1NjcmlwdEV2YWx1
YXRlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1NjcmlwdFJlZiBzY3JpcHQsIEpTVmFsdWVSZWYg
dGhpc1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gdG9KUyhjb250ZXh0KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOwotICAg
IGlmICgmc2NyaXB0LT52bSgpICE9ICZleGVjLT52bSgpKSB7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICBpZiAoJnNjcmlwdC0+dm0o
KSAhPSAmdm0pIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1R5
cGVkQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNU
eXBlZEFycmF5LmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1R5cGVkQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQxLDcgQEAg
SlNUeXBlZEFycmF5VHlwZSBKU1ZhbHVlR2V0VHlwZWRBcnJheVR5cAogCiAgICAgRXhlY1N0YXRl
KiBleGVjID0gdG9KUyhjdHgpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNMb2Nr
SG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKIAogICAg
IEpTVmFsdWUgdmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlUmVmKTsKICAgICBpZiAoIXZhbHVlLmlz
T2JqZWN0KCkpCkBAIC0xOTUsNyArMTk1LDcgQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlVHlw
ZWRBcnJheVdpdGhBcgogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAKICAgICBpZiAoYXJyYXlUeXBlID09IGtKU1R5cGVk
QXJyYXlUeXBlTm9uZSB8fCBhcnJheVR5cGUgPT0ga0pTVHlwZWRBcnJheVR5cGVBcnJheUJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMTksNyArMjE5LDcgQEAgSlNPYmplY3RS
ZWYgSlNPYmplY3RNYWtlVHlwZWRBcnJheVdpdGhBcgogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHRvSlMoY3R4KTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTTG9ja0hvbGRlciBs
b2NrZXIoZXhlYyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAKICAgICBpZiAoYXJy
YXlUeXBlID09IGtKU1R5cGVkQXJyYXlUeXBlTm9uZSB8fCBhcnJheVR5cGUgPT0ga0pTVHlwZWRB
cnJheVR5cGVBcnJheUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNDAsNyAr
MjQwLDcgQEAgdm9pZCogSlNPYmplY3RHZXRUeXBlZEFycmF5Qnl0ZXNQdHIoSlNDbwogewogICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2
bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlMob2JqZWN0UmVmKTsKIAogICAgIGlmIChK
U0FycmF5QnVmZmVyVmlldyogdHlwZWRBcnJheSA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZl
clZpZXcqPih2bSwgb2JqZWN0KSkgewpAQCAtMjkxLDExICsyOTEsMTEgQEAgSlNPYmplY3RSZWYg
SlNPYmplY3RHZXRUeXBlZEFycmF5QnVmZmVyKAogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRv
SlMoY3R4KTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2Nr
ZXIoZXhlYyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgSlNPYmplY3QqIG9i
amVjdCA9IHRvSlMob2JqZWN0UmVmKTsKIAogICAgIGlmIChKU0FycmF5QnVmZmVyVmlldyogdHlw
ZWRBcnJheSA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPih2bSwgb2JqZWN0KSkK
LSAgICAgICAgcmV0dXJuIHRvUmVmKGV4ZWMtPnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxlci0+
dG9KUyhleGVjLCB0eXBlZEFycmF5LT5nbG9iYWxPYmplY3QoKSwgdHlwZWRBcnJheS0+cG9zc2li
bHlTaGFyZWRCdWZmZXIoKSkpOworICAgICAgICByZXR1cm4gdG9SZWYodm0ubV90eXBlZEFycmF5
Q29udHJvbGxlci0+dG9KUyhleGVjLCB0eXBlZEFycmF5LT5nbG9iYWxPYmplY3QoKSwgdHlwZWRB
cnJheS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKSkpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CkBAIC0zMDMsMTQgKzMwMywxNSBAQCBKU09iamVjdFJlZiBKU09iamVjdEdldFR5cGVkQXJyYXlC
dWZmZXIoCiBKU09iamVjdFJlZiBKU09iamVjdE1ha2VBcnJheUJ1ZmZlcldpdGhCeXRlc05vQ29w
eShKU0NvbnRleHRSZWYgY3R4LCB2b2lkKiBieXRlcywgc2l6ZV90IGJ5dGVMZW5ndGgsIEpTVHlw
ZWRBcnJheUJ5dGVzRGVhbGxvY2F0b3IgYnl0ZXNEZWFsbG9jYXRvciwgdm9pZCogZGVhbGxvY2F0
b3JDb250ZXh0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gdG9KUyhjdHgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKIAogICAgIGF1dG8g
YnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUZyb21CeXRlcyhieXRlcywgYnl0ZUxlbmd0aCwg
Wz1dKHZvaWQqIHApIHsKICAgICAgICAgaWYgKGJ5dGVzRGVhbGxvY2F0b3IpCiAgICAgICAgICAg
ICBieXRlc0RlYWxsb2NhdG9yKHAsIGRlYWxsb2NhdG9yQ29udGV4dCk7CiAgICAgfSk7CiAKLSAg
ICBKU0FycmF5QnVmZmVyKiBqc0J1ZmZlciA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShleGVjLT52
bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0dXJlKEFy
cmF5QnVmZmVyU2hhcmluZ01vZGU6OkRlZmF1bHQpLCBXVEZNb3ZlKGJ1ZmZlcikpOworICAgIEpT
QXJyYXlCdWZmZXIqIGpzQnVmZmVyID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHZtLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0dXJlKEFycmF5QnVmZmVyU2hh
cmluZ01vZGU6OkRlZmF1bHQpLCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIGlmIChoYW5kbGVFeGNl
cHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pID09IEV4Y2VwdGlvblN0YXR1czo6RGlkVGhy
b3cpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMjEsNyArMzIyLDcgQEAgdm9pZCog
SlNPYmplY3RHZXRBcnJheUJ1ZmZlckJ5dGVzUHRyKEpTQwogewogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHRvSlMoY3R4KTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTTG9ja0hvbGRl
ciBsb2NrZXIoZXhlYyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IHRvSlMob2JqZWN0UmVmKTsKIAogICAgIGlmIChKU0FycmF5QnVmZmVyKiBq
c0J1ZmZlciA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KHZtLCBvYmplY3QpKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV2Vha09iamVjdE1hcFJlZlByaXZhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXZWFrT2JqZWN0
TWFwUmVmUHJpdmF0ZS5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDggKzQ0LDkgQEAgZXh0ZXJuICJDIiB7CiBKU1dlYWtPYmplY3RNYXBSZWYgSlNXZWFrT2Jq
ZWN0TWFwQ3JlYXRlKEpTQ29udGV4dFJlZiBjb250ZXh0LCB2b2lkKiBwcml2YXRlRGF0YSwgSlNX
ZWFrTWFwRGVzdHJveWVkQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gdG9KUyhjb250ZXh0KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOwotICAgIFJl
ZlB0cjxPcGFxdWVKU1dlYWtPYmplY3RNYXA+IG1hcCA9IE9wYXF1ZUpTV2Vha09iamVjdE1hcDo6
Y3JlYXRlKGV4ZWMtPnZtKCksIHByaXZhdGVEYXRhLCBjYWxsYmFjayk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICBSZWZQdHI8T3Bh
cXVlSlNXZWFrT2JqZWN0TWFwPiBtYXAgPSBPcGFxdWVKU1dlYWtPYmplY3RNYXA6OmNyZWF0ZSh2
bSwgcHJpdmF0ZURhdGEsIGNhbGxiYWNrKTsKICAgICBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPnJlZ2lzdGVyV2Vha01hcChtYXAuZ2V0KCkpOwogICAgIHJldHVybiBtYXAuZ2V0KCk7CiB9
CkBAIC01NywxMyArNTgsMTQgQEAgdm9pZCBKU1dlYWtPYmplY3RNYXBTZXQoSlNDb250ZXh0UmVm
IGN0eAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMo
Y3R4KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgSlNPYmplY3QqIG9iaiA9
IHRvSlMob2JqZWN0KTsKICAgICBpZiAoIW9iaikKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VS
VChvYmotPmluaGVyaXRzKGV4ZWMtPnZtKCksIEpTUHJveHk6OmluZm8oKSkKLSAgICAgICAgfHwg
b2JqLT5pbmhlcml0cyhleGVjLT52bSgpLCBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0
Pjo6aW5mbygpKQotICAgICAgICB8fCBvYmotPmluaGVyaXRzKGV4ZWMtPnZtKCksIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjppbmZvKCkpKTsKKyAgICBBU1NFUlQob2Jq
LT5pbmhlcml0cyh2bSwgSlNQcm94eTo6aW5mbygpKQorICAgICAgICB8fCBvYmotPmluaGVyaXRz
KHZtLCBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6aW5mbygpKQorICAgICAgICB8
fCBvYmotPmluaGVyaXRzKHZtLCBKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
Pjo6aW5mbygpKSk7CiAgICAgbWFwLT5tYXAoKS5zZXQoa2V5LCBvYmopOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQkocmV2aXNpb24gMjIxODAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEwOSwyMyArMTA5LDI1IEBAIGRvbmU6CiBzdGF0aWMgYm9vbCBjb25zdHJ1Y3Rv
ckhhc0luc3RhbmNlKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGNvbnN0cnVjdG9yUmVm
LCBKU1ZhbHVlUmVmIHBvc3NpYmxlSW5zdGFuY2UsIEpTVmFsdWVSZWYqKQogewogICAgIEpTQzo6
RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tl
cihleGVjKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9ja2VyKHZtKTsKIAogICAgIEpTQzo6SlNPYmplY3QqIGNvbnN0cnVjdG9yID0gdG9K
Uyhjb25zdHJ1Y3RvclJlZik7CiAgICAgSlNDOjpKU1ZhbHVlIGluc3RhbmNlID0gdG9KUyhleGVj
LCBwb3NzaWJsZUluc3RhbmNlKTsKLSAgICByZXR1cm4gSlNDOjpKU09iamVjdDo6ZGVmYXVsdEhh
c0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBjb25zdHJ1Y3Rvci0+Z2V0KGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpKTsKKyAgICByZXR1cm4gSlNDOjpKU09iamVjdDo6ZGVm
YXVsdEhhc0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBjb25zdHJ1Y3Rvci0+Z2V0KGV4ZWMsIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSkpOwogfQogCiBzdGF0aWMgSlNDOjpKU09iamVjdCog
bWFrZVdyYXBwZXIoSlNDb250ZXh0UmVmIGN0eCwgSlNDbGFzc1JlZiBqc0NsYXNzLCBpZCB3cmFw
cGVkT2JqZWN0KQogewogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAg
IEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKIAogICAgIEFTU0VSVChq
c0NsYXNzKTsKICAgICBKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmpl
Y3Q+KiBvYmplY3QgPSBKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmpl
Y3Q+OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPm9iamNXcmFwcGVyT2JqZWN0U3RydWN0dXJlKCksIGpzQ2xhc3Ms
IDApOwogICAgIG9iamVjdC0+c2V0V3JhcHBlZE9iamVjdCh3cmFwcGVkT2JqZWN0KTsKICAgICBp
ZiAoSlNDOjpKU09iamVjdCogcHJvdG90eXBlID0ganNDbGFzcy0+cHJvdG90eXBlKGV4ZWMpKQot
ICAgICAgICBvYmplY3QtPnNldFByb3RvdHlwZURpcmVjdChleGVjLT52bSgpLCBwcm90b3R5cGUp
OworICAgICAgICBvYmplY3QtPnNldFByb3RvdHlwZURpcmVjdCh2bSwgcHJvdG90eXBlKTsKIAog
ICAgIHJldHVybiBvYmplY3Q7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09i
akNDYWxsYmFja0Z1bmN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTY3NSwxMCArNjc1LDExIEBAIHN0YXRpYyBKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tG
dW5jdGlvbkYKICAgICB9CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoW2NvbnRl
eHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKGV4
ZWMpOworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrZXIodm0pOwogICAgIGF1dG8gaW1wbCA9IHN0ZDo6bWFrZV91bmlxdWU8SlNDOjpPYmpD
Q2FsbGJhY2tGdW5jdGlvbkltcGw+KGludm9jYXRpb24sIHR5cGUsIGluc3RhbmNlQ2xhc3MsIFdU
Rk1vdmUoYXJndW1lbnRzKSwgV1RGTW92ZShyZXN1bHQpKTsKICAgICBjb25zdCBTdHJpbmcmIG5h
bWUgPSBpbXBsLT5uYW1lKCk7Ci0gICAgcmV0dXJuIHRvUmVmKEpTQzo6T2JqQ0NhbGxiYWNrRnVu
Y3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG5h
bWUsIFdURk1vdmUoaW1wbCkpKTsKKyAgICByZXR1cm4gdG9SZWYoSlNDOjpPYmpDQ2FsbGJhY2tG
dW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG5hbWUsIFdU
Rk1vdmUoaW1wbCkpKTsKIH0KIAogSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JJ
bml0KEpTQ29udGV4dCAqY29udGV4dCwgQ2xhc3MgY2xzLCBQcm90b2NvbCAqcHJvdG9jb2wsIFNF
TCBzZWwsIGNvbnN0IGNoYXIqIHR5cGVzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTks
NyArMzU5LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQwogQ29k
ZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2Rl
QmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUsIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4mJiBzb3Vy
Y2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1
bW5PZmZzZXQpCiAgICAgOiBKU0NlbGwoKnZtLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2dsb2JhbE9i
amVjdChzY29wZS0+Z2xvYmFsT2JqZWN0KCktPnZtKCksIHRoaXMsIHNjb3BlLT5nbG9iYWxPYmpl
Y3QoKSkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0KCp2bSwgdGhpcywgc2NvcGUtPmdsb2JhbE9iamVj
dCgpKQogICAgICwgbV9udW1DYWxsZWVMb2NhbHModW5saW5rZWRDb2RlQmxvY2stPm1fbnVtQ2Fs
bGVlTG9jYWxzKQogICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZhcnMp
CiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQpAQCAtMzcyLDEyICszNzIsMTIg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwgbV9pc0Nv
bnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkpCiAgICAgLCBtX2lz
U3RyaWN0TW9kZSh1bmxpbmtlZENvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCiAgICAgLCBtX2Nv
ZGVUeXBlKHVubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpKQotICAgICwgbV91bmxpbmtlZENv
ZGUobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHVubGlua2VkQ29kZUJsb2NrKQorICAgICwg
bV91bmxpbmtlZENvZGUoKnZtLCB0aGlzLCB1bmxpbmtlZENvZGVCbG9jaykKICAgICAsIG1faGFz
RGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCiAgICAgLCBtX3N0ZXBwaW5nTW9kZShTdGVwcGluZ01v
ZGVEaXNhYmxlZCkKICAgICAsIG1fbnVtQnJlYWtwb2ludHMoMCkKLSAgICAsIG1fb3duZXJFeGVj
dXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlzLCBvd25lckV4ZWN1dGFibGUpCi0gICAg
LCBtX3ZtKHVubGlua2VkQ29kZUJsb2NrLT52bSgpKQorICAgICwgbV9vd25lckV4ZWN1dGFibGUo
KnZtLCB0aGlzLCBvd25lckV4ZWN1dGFibGUpCisgICAgLCBtX3ZtKHZtKQogICAgICwgbV90aGlz
UmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPnRoaXNSZWdpc3RlcigpKQogICAgICwgbV9zY29w
ZVJlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkpCiAgICAgLCBtX3Nv
dXJjZShXVEZNb3ZlKHNvdXJjZVByb3ZpZGVyKSkKQEAgLTE5OTMsNyArMTk5Myw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGkKIAogICAgIC8vIFRoaXMgYWNjb21w
bGlzaGVzICgyKS4KICAgICBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoCi0g
ICAgICAgIG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBhbHRlcm5hdGl2ZSgpLCBjb2RlVHlwZSgpLCBz
cGVjaWFsaXphdGlvbktpbmQoKSk7CisgICAgICAgICptX3ZtLCBhbHRlcm5hdGl2ZSgpLCBjb2Rl
VHlwZSgpLCBzcGVjaWFsaXphdGlvbktpbmQoKSk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
NTM4LDcgKzUzOCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9
IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJz
LmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdp
c3RlcnMubGFzdCgpLnNldChtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgdik7CisgICAgICAg
IG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldCgqbV92bSwgdGhpcywgdik7CiAgICAgICAg
IG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246Ok90aGVyKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC05
NTIsNyArOTUyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlcGxhY2VDb25zdGFudChpbnQgaW5k
ZXgsIEpTVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNDb25zdGFudFJlZ2lz
dGVySW5kZXgoaW5kZXgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXggLSBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleCkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7Ci0gICAgICAg
IG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0u
c2V0KG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIG1fY29uc3Rh
bnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uc2V0KCptX3Zt
LCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRWaXNpdFN0cm9uZ2x5KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21w
dXRlRnJvbQogICAgIGlmICghKGluc3RydWN0aW9uWzhdLnUucHV0QnlJZEZsYWdzICYgUHV0QnlJ
ZElzRGlyZWN0KSkgewogICAgICAgICBjb25kaXRpb25TZXQgPQogICAgICAgICAgICAgZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAotICAgICAgICAg
ICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAgICAgIHZtLCBwcm9maWxlZEJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOwogICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKICAgICB9CkBAIC0zMDMsNiArMzAzLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKAogICAgIGlmIChzZXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cygpOwogICAgIAorICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUoKTsgKytpKSB7CkBAIC0zNTUs
NyArMzU2LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAgICAgICAgIGlm
ICghaXNEaXJlY3QpIHsKICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICAgICBn
bG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOworICAgICAg
ICAgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsKICAgICAgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNp
b24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNCArMzcsMTUgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRv
cjo6YWRkKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmll
dywgQ29tbW9uRGF0YSYgY29tbW9uKQogeworICAgIFZNJiB2bSA9ICpjb2RlQmxvY2stPnZtKCk7
CiAgICAgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29k
ZUJsb2NrKTsKICAgICBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQqIG5ldXRlcmluZ1dh
dGNocG9pbnQgPQotICAgICAgICBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQ6OmNyZWF0
ZSgqY29kZUJsb2NrLT52bSgpKTsKKyAgICAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBv
aW50OjpjcmVhdGUodm0pOwogICAgIG5ldXRlcmluZ1dhdGNocG9pbnQtPnNldCgpLT5hZGQod2F0
Y2hwb2ludCk7CiAgICAgY29kZUJsb2NrLT5hZGRDb25zdGFudChuZXV0ZXJpbmdXYXRjaHBvaW50
KTsKICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgbmVlZCB0byBzZXQgdGhpcyB3YXRjaHBvaW50IGF0
IGFsbCBmb3Igc2hhcmVkIGJ1ZmZlcnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NDEwOAotICAgIGNvZGVCbG9jay0+dm0oKS0+aGVhcC5hZGRSZWZl
cmVuY2UobmV1dGVyaW5nV2F0Y2hwb2ludCwgdmlldy0+cG9zc2libHlTaGFyZWRCdWZmZXIoKSk7
CisgICAgdm0uaGVhcC5hZGRSZWZlcmVuY2UobmV1dGVyaW5nV2F0Y2hwb2ludCwgdmlldy0+cG9z
c2libHlTaGFyZWRCdWZmZXIoKSk7CiB9CiAKIHZvaWQgSW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmFk
ZCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDIyMTgw
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5
KQpAQCAtNDIxLDcgKzQyMSw3IEBAIHB1YmxpYzoKICAgICBKU09iamVjdCogZ2xvYmFsVGhpc09i
amVjdEZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICBKU0dsb2JhbE9i
amVjdCogb2JqZWN0ID0gZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pOwotICAgICAgICByZXR1
cm4ganNDYXN0PEpTT2JqZWN0Kj4ob2JqZWN0LT5tZXRob2RUYWJsZSgpLT50b1RoaXMob2JqZWN0
LCBvYmplY3QtPmdsb2JhbEV4ZWMoKSwgTm90U3RyaWN0TW9kZSkpOworICAgICAgICByZXR1cm4g
anNDYXN0PEpTT2JqZWN0Kj4ob2JqZWN0LT5tZXRob2RUYWJsZShtX3ZtKS0+dG9UaGlzKG9iamVj
dCwgb2JqZWN0LT5nbG9iYWxFeGVjKCksIE5vdFN0cmljdE1vZGUpKTsKICAgICB9CiAgICAgCiAg
ICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZUZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDcgKzI0Niw3IEBAIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVUaGkKICAgICAgICAgcmV0dXJuIGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHJhcmVEYXRhLT5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgp
LT5zdHJ1Y3R1cmUoKSk7CiAgICAgfQogCi0gICAgSlNWYWx1ZSBwcm90byA9IGNvbnN0cnVjdG9y
LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7CisgICAgSlNWYWx1
ZSBwcm90byA9IGNvbnN0cnVjdG9yLT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90
eXBlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBpZiAo
cHJvdG8uaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4
ZWMsIGFzT2JqZWN0KHByb3RvKSk7CkBAIC03MTQsNyArNzE0LDcgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIH0KICAgICAKICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChhcnJheSwgdHJ1ZSk7Ci0gICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dCgKKyAg
ICBhcnJheS0+bWV0aG9kVGFibGUodm0pLT5wdXQoCiAgICAgICAgIGFycmF5LCBleGVjLCBJZGVu
dGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSks
IHNsb3QpOwogfQogCkBAIC03MjksNyArNzI5LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsQmV5bwogICAgIH0KICAgICAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChh
cnJheSwgZmFsc2UpOwotICAgIGFycmF5LT5tZXRob2RUYWJsZSgpLT5wdXQoCisgICAgYXJyYXkt
Pm1ldGhvZFRhYmxlKCp2bSktPnB1dCgKICAgICAgICAgYXJyYXksIGV4ZWMsIElkZW50aWZpZXI6
OmZyb20oZXhlYywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7
CiB9CiAKQEAgLTc0Niw3ICs3NDYsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
RG91YmxlQnlWCiAgICAgfQogICAgIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGFycmF5LCB0
cnVlKTsKLSAgICBhcnJheS0+bWV0aG9kVGFibGUoKS0+cHV0KAorICAgIGFycmF5LT5tZXRob2RU
YWJsZSgqdm0pLT5wdXQoCiAgICAgICAgIGFycmF5LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIGluZGV4KSwganNWYWx1ZSwgc2xvdCk7CiB9CiAKQEAgLTc2Myw3ICs3NjMsNyBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWCiAgICAgfQogICAgIAogICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KGFycmF5LCBmYWxzZSk7Ci0gICAgYXJyYXktPm1ldGhvZFRhYmxl
KCktPnB1dCgKKyAgICBhcnJheS0+bWV0aG9kVGFibGUoKnZtKS0+cHV0KAogICAgICAgICBhcnJh
eSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIGpzVmFsdWUsIHNsb3QpOwog
fQogCkBAIC04MzMsMjEgKzgzMywyMSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxEaXJlCiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdEJl
eW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBp
bnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KSwgMCwgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYXJyYXksIHRydWUpOwotICAgIGFycmF5
LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBhcnJheS0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIHNsb3QpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAw
KSB7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwpAQCAtODU1LDcgKzg1NSw3IEBAIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmUKICAgICB9CiAgICAgCiAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3QoYXJyYXksIGZhbHNlKTsKLSAgICBhcnJheS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCks
IElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgc2xvdCk7CisgICAgYXJyYXktPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQXJyYXkqIGFycmF5KQpAQCAt
MjM0NSw3ICsyMzQ1LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dER5bmFtaWNW
YQogICAgICAgICBzdHJpY3RNb2RlID0gZXhlYy0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgp
OwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNjb3BlLCBzdHJpY3RNb2RlLCBQdXRQcm9wZXJ0
eVNsb3Q6OlVua25vd25Db250ZXh0LCBpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlh
bGl6YXRpb25Nb2RlKCkpKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICBzY29wZS0+
bWV0aG9kVGFibGUoKS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKHZh
bHVlKSwgc2xvdCk7CisgICAgc2NvcGUtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHNjb3BlLCBleGVj
LCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSwgc2xvdCk7CiB9CiAKIGludDMyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25NYXBIYXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgaW5wdXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21w
aWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNywxOSAr
NTA3LDE4IEBAIGV4dGVybiAiQyIgdm9pZCogY29tcGlsZUZUTE9TUkV4aXQoRXhlY1MKICAgICBp
ZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6dmVyYm9zZU9TUigpIHx8IE9w
dGlvbnM6OnZlcmJvc2VGVExPU1JFeGl0KCkpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyBP
U1IgZXhpdCB3aXRoIGV4aXRJRCA9ICIsIGV4aXRJRCwgIlxuIik7CiAKLSAgICBpZiAoZXhlYy0+
dm0oKS5jYWxsRnJhbWVGb3JDYXRjaCkKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0o
KS5jYWxsRnJhbWVGb3JDYXRjaCA9PSBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGlmICh2bS5jYWxsRnJhbWVGb3JDYXRjaCkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0u
Y2FsbEZyYW1lRm9yQ2F0Y2ggPT0gZXhlYyk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICAKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKICAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6RlRMSklUKTsKICAgICAK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAKICAgICAvLyBJdCdzIHNvcnQgb2YgcHJl
ZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRvaW5nIHNv
IHdvdWxkbid0CiAgICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCi0gICAgRGVmZXJHQ0ZvckFX
aGlsZSBkZWZlckdDKHZtLT5oZWFwKTsKKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0u
aGVhcCk7CiAKICAgICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmZ0
bCgpOwogICAgIE9TUkV4aXQmIGV4aXQgPSBqaXRDb2RlLT5vc3JFeGl0W2V4aXRJRF07CkBAIC01
NDMsNyArNTQyLDcgQEAgZXh0ZXJuICJDIiB2b2lkKiBjb21waWxlRlRMT1NSRXhpdChFeGVjUwog
CiAgICAgcHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4ZWMsIGV4aXQubV9jb2RlT3JpZ2lu
KTsKICAgICAKLSAgICBjb21waWxlU3R1YihleGl0SUQsIGppdENvZGUsIGV4aXQsIHZtLCBjb2Rl
QmxvY2spOworICAgIGNvbXBpbGVTdHViKGV4aXRJRCwgaml0Q29kZSwgZXhpdCwgJnZtLCBjb2Rl
QmxvY2spOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAogICAgICAgICBleGl0
LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFiZWwoZXhp
dC5tX2NvZGUuY29kZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBA
QCBleHRlcm4gIkMiIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QCiAgICAgICAgICAgICBp
ZiAocHJvcGVydHkubG9jYXRpb24oKS5raW5kKCkgIT0gQ2xvc3VyZVZhclBMb2MpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGFjdGl2YXRpb24tPnZhcmlhYmxlQXQo
U2NvcGVPZmZzZXQocHJvcGVydHkubG9jYXRpb24oKS5pbmZvKCkpKS5zZXQoZXhlYy0+dm0oKSwg
YWN0aXZhdGlvbiwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOworICAgICAgICAgICAgYWN0
aXZhdGlvbi0+dmFyaWFibGVBdChTY29wZU9mZnNldChwcm9wZXJ0eS5sb2NhdGlvbigpLmluZm8o
KSkpLnNldCh2bSwgYWN0aXZhdGlvbiwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOwogICAg
ICAgICB9CiAKICAgICAgICAgYnJlYWs7CkBAIC0yMjUsNyArMjI1LDcgQEAgZXh0ZXJuICJDIiBK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgICAgICByZXN1bHQtPnZhcmlhYmxlQXQoU2NvcGVPZmZzZXQocHJvcGVydHkubG9j
YXRpb24oKS5pbmZvKCkpKS5zZXQoCi0gICAgICAgICAgICAgICAgZXhlYy0+dm0oKSwgcmVzdWx0
LCBqc051bWJlcigyOTgzNCkpOworICAgICAgICAgICAgICAgIHZtLCByZXN1bHQsIGpzTnVtYmVy
KDI5ODM0KSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBc3NlcnRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBc3NlcnRpb25zLmgJKHJldmlz
aW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQXNzZXJ0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBACiAKICNkZWZpbmUgQVNTRVJUX1RISVNf
R0NfT0JKRUNUX0lOSEVSSVRTKGNsYXNzSW5mbykgZG8ge1wKICAgICBBU1NFUlRfVEhJU19HQ19P
QkpFQ1RfTE9PS1NfVkFMSUQoKTsgXAotICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMtPmluaGVyaXRz
KCp0aGlzLT52bSgpLCBjbGFzc0luZm8pKTsgXAorICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMtPmlu
aGVyaXRzKHZtLCBjbGFzc0luZm8pKTsgXAogfSB3aGlsZSAoMCkKIAogI2Vsc2UKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
SG9zdC5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMs
MTAgQEAgSlNWYWx1ZSBJbmplY3RlZFNjcmlwdEhvc3Q6OndyYXBwZXIoRXhlYwogICAgIGlmICh2
YWx1ZSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwogCi0gICAgSlNPYmplY3QqIHByb3RvdHlwZSA9
IEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGVQcm90b3R5cGUoZXhlYy0+dm0oKSwgZ2xvYmFs
T2JqZWN0KTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTSW5qZWN0ZWRTY3JpcHRIb3N0
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUpOwot
ICAgIEpTSW5qZWN0ZWRTY3JpcHRIb3N0KiBpbmplY3RlZFNjcmlwdEhvc3QgPSBKU0luamVjdGVk
U2NyaXB0SG9zdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbWFrZVJlZigqdGhpcykp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IEpT
SW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7Cisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSk7CisgICAgSlNJbmplY3RlZFNjcmlw
dEhvc3QqIGluamVjdGVkU2NyaXB0SG9zdCA9IEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGUo
dm0sIHN0cnVjdHVyZSwgbWFrZVJlZigqdGhpcykpOwogICAgIG1fd3JhcHBlcnMuYWRkV3JhcHBl
cihnbG9iYWxPYmplY3QsIGluamVjdGVkU2NyaXB0SG9zdCk7CiAKICAgICByZXR1cm4gaW5qZWN0
ZWRTY3JpcHRIb3N0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0lu
amVjdGVkU2NyaXB0SG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsMTMgKzE0MywxMyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRT
Y3JpcHRIb3N0OjpzdWJ0eXBlKEV4CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7CiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVy
biBleGVjLT52bSgpLnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJu
IHZtLnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKTsKICAgICBpZiAodmFsdWUuaXNCb29sZWFu
KCkpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnNtYWxsU3RyaW5ncy5ib29sZWFuU3RyaW5n
KCk7CisgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpOwogICAg
IGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS5zbWFsbFN0
cmluZ3MubnVtYmVyU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MubnVt
YmVyU3RyaW5nKCk7CiAgICAgaWYgKHZhbHVlLmlzU3ltYm9sKCkpCi0gICAgICAgIHJldHVybiBl
eGVjLT52bSgpLnNtYWxsU3RyaW5ncy5zeW1ib2xTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZt
LnNtYWxsU3RyaW5ncy5zeW1ib2xTdHJpbmcoKTsKIAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
c09iamVjdCh2YWx1ZSk7CiAgICAgaWYgKG9iamVjdCkgewpAQCAtMTg3LDkgKzE4Nyw5IEBAIEpT
VmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OnN1YnR5cGUoRXgKICAgICAgICAgcmV0dXJuIGpz
Tm9udHJpdmlhbFN0cmluZyhleGVjLCBBU0NJSUxpdGVyYWwoIml0ZXJhdG9yIikpOwogCiAgICAg
aWYgKG9iamVjdCkgewotICAgICAgICBpZiAob2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+dm0oKSwg
ZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5hcnJheUl0ZXJhdG9yTmV4
dEluZGV4UHJpdmF0ZU5hbWUoKSkKLSAgICAgICAgICAgIHx8IG9iamVjdC0+Z2V0RGlyZWN0KGV4
ZWMtPnZtKCksIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwQnVj
a2V0UHJpdmF0ZU5hbWUoKSkKLSAgICAgICAgICAgIHx8IG9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMt
PnZtKCksIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc2V0QnVja2V0
UHJpdmF0ZU5hbWUoKSkpCisgICAgICAgIGlmIChvYmplY3QtPmdldERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuYXJyYXlJdGVyYXRvck5leHRJbmRleFByaXZhdGVO
YW1lKCkpCisgICAgICAgICAgICB8fCBvYmplY3QtPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwQnVja2V0UHJpdmF0ZU5hbWUoKSkKKyAgICAgICAgICAg
IHx8IG9iamVjdC0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMo
KS5zZXRCdWNrZXRQcml2YXRlTmFtZSgpKSkKICAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZp
YWxTdHJpbmcoZXhlYywgQVNDSUlMaXRlcmFsKCJpdGVyYXRvciIpKTsKICAgICB9CiAKQEAgLTI1
Niw5ICsyNTYsMTAgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6ZnVuY3Rpb25EZQog
CiBzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTVmFsdWUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
ZXhlYyk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhleGVjLCAibmFtZSIpLCBqc1N0cmluZyhleGVjLCBuYW1lKSk7Ci0gICAgcmVzdWx0
LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAidmFs
dWUiKSwgdmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsICJuYW1lIiksIGpzU3RyaW5nKGV4ZWMsIG5hbWUpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAidmFsdWUiKSwgdmFs
dWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI3NSw3ICsyNzYsNyBAQCBKU1ZhbHVl
IEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMs
IG51bGxwdHIpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkp
OwotICAgICAgICBzd2l0Y2ggKHByb21pc2UtPnN0YXR1cyhleGVjLT52bSgpKSkgeworICAgICAg
ICBzd2l0Y2ggKHByb21pc2UtPnN0YXR1cyh2bSkpIHsKICAgICAgICAgY2FzZSBKU1Byb21pc2U6
OlN0YXR1czo6UGVuZGluZzoKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAg
ICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5h
bFByb3BlcnR5KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic3RhdHVzIiksIGpzTm9udHJpdmlhbFN0cmlu
ZyhleGVjLCBBU0NJSUxpdGVyYWwoInBlbmRpbmciKSkpKTsKQEAgLTI4NCwxMyArMjg1LDEzIEBA
IEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICAgICAgICAgIGFy
cmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3Bl
cnR5KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic3RhdHVzIiksIGpzTm9udHJpdmlhbFN0cmluZyhleGVj
LCBBU0NJSUxpdGVyYWwoInJlc29sdmVkIikpKSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVj
dEludGVybmFsUHJvcGVydHkoZXhlYywgQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgcHJvbWlzZS0+
cmVzdWx0KGV4ZWMtPnZtKCkpKSk7CisgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgo
ZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCBBU0NJSUxpdGVy
YWwoInJlc3VsdCIpLCBwcm9taXNlLT5yZXN1bHQodm0pKSk7CiAgICAgICAgICAgICByZXR1cm4g
YXJyYXk7CiAgICAgICAgIGNhc2UgSlNQcm9taXNlOjpTdGF0dXM6OlJlamVjdGVkOgogICAgICAg
ICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVy
bmFsUHJvcGVydHkoZXhlYywgQVNDSUlMaXRlcmFsKCJzdGF0dXMiKSwganNOb250cml2aWFsU3Ry
aW5nKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgicmVqZWN0ZWQiKSkpKTsKICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgICAgICBzY29wZS5yZWxl
YXNlKCk7Ci0gICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywg
Y29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCBBU0NJSUxpdGVyYWwoInJlc3VsdCIpLCBw
cm9taXNlLT5yZXN1bHQoZXhlYy0+dm0oKSkpKTsKKyAgICAgICAgICAgIGFycmF5LT5wdXREaXJl
Y3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgicmVzdWx0IiksIHByb21pc2UtPnJlc3VsdCh2bSkpKTsKICAgICAgICAgICAg
IHJldHVybiBhcnJheTsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Vi
a2l0Lm9yZy9iLzE0MTY2ND4gV2ViIEluc3BlY3RvcjogRVM2OiBJbXByb3ZlZCBTdXBwb3J0IGZv
ciBQcm9taXNlcyAtIFByb21pc2UgUmVhY3Rpb25zCkBAIC0zMjUsOSArMzI2LDkgQEAgSlNWYWx1
ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgIH0KIAogICAgIGlmIChKU09i
amVjdCogaXRlcmF0b3JPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHZhbHVl
KSkgewotICAgICAgICBpZiAoaXRlcmF0b3JPYmplY3QtPmdldERpcmVjdChleGVjLT52bSgpLCBl
eGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmFycmF5SXRlcmF0b3JOZXh0
SW5kZXhQcml2YXRlTmFtZSgpKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBpdGVyYXRlZFZhbHVl
ID0gaXRlcmF0b3JPYmplY3QtPmdldERpcmVjdChleGVjLT52bSgpLCBleGVjLT52bSgpLnByb3Bl
cnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLml0ZXJhdGVkT2JqZWN0UHJpdmF0ZU5hbWUoKSk7Ci0g
ICAgICAgICAgICBKU1ZhbHVlIGtpbmQgPSBpdGVyYXRvck9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMt
PnZtKCksIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuYXJyYXlJdGVy
YXRvcktpbmRQcml2YXRlTmFtZSgpKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yT2JqZWN0LT5nZXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmFycmF5SXRlcmF0b3JO
ZXh0SW5kZXhQcml2YXRlTmFtZSgpKSkgeworICAgICAgICAgICAgSlNWYWx1ZSBpdGVyYXRlZFZh
bHVlID0gaXRlcmF0b3JPYmplY3QtPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVp
bHRpbk5hbWVzKCkuaXRlcmF0ZWRPYmplY3RQcml2YXRlTmFtZSgpKTsKKyAgICAgICAgICAgIEpT
VmFsdWUga2luZCA9IGl0ZXJhdG9yT2JqZWN0LT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmJ1aWx0aW5OYW1lcygpLmFycmF5SXRlcmF0b3JLaW5kUHJpdmF0ZU5hbWUoKSk7CiAKICAg
ICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5
ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCAyKTsKQEAgLTMzOSwxMCArMzQw
LDEwIEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICAgICAg
ICAgIHJldHVybiBhcnJheTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpdGVyYXRvck9iamVj
dC0+Z2V0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+YnVpbHRp
bk5hbWVzKCkubWFwQnVja2V0UHJpdmF0ZU5hbWUoKSkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUg
aXRlcmF0ZWRWYWx1ZSA9IGl0ZXJhdG9yT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+dm0oKSwgZXhl
Yy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pdGVyYXRlZE9iamVjdFByaXZh
dGVOYW1lKCkpOworICAgICAgICBpZiAoaXRlcmF0b3JPYmplY3QtPmdldERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwQnVja2V0UHJpdmF0ZU5hbWUoKSkpIHsK
KyAgICAgICAgICAgIEpTVmFsdWUgaXRlcmF0ZWRWYWx1ZSA9IGl0ZXJhdG9yT2JqZWN0LT5nZXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLml0ZXJhdGVkT2JqZWN0
UHJpdmF0ZU5hbWUoKSk7CiAgICAgICAgICAgICBTdHJpbmcga2luZDsKLSAgICAgICAgICAgIHN3
aXRjaCAoc3RhdGljX2Nhc3Q8SXRlcmF0aW9uS2luZD4oaXRlcmF0b3JPYmplY3QtPmdldERpcmVj
dChleGVjLT52bSgpLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLm1h
cEl0ZXJhdG9yS2luZFByaXZhdGVOYW1lKCkpLmFzSW50MzIoKSkpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAoc3RhdGljX2Nhc3Q8SXRlcmF0aW9uS2luZD4oaXRlcmF0b3JPYmplY3QtPmdldERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwSXRlcmF0b3JLaW5kUHJp
dmF0ZU5hbWUoKSkuYXNJbnQzMigpKSkgewogICAgICAgICAgICAgY2FzZSBJdGVyYXRlS2V5Ogog
ICAgICAgICAgICAgICAgIGtpbmQgPSBBU0NJSUxpdGVyYWwoImtleSIpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMzYzLDEwICszNjQsMTAgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0
SG9zdDo6Z2V0SW50ZXJuYQogICAgICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKGl0ZXJhdG9yT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+
dm0oKS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5zZXRCdWNrZXRQcml2YXRlTmFtZSgp
KSkgewotICAgICAgICAgICAgSlNWYWx1ZSBpdGVyYXRlZFZhbHVlID0gaXRlcmF0b3JPYmplY3Qt
PmdldERpcmVjdChleGVjLT52bSgpLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5O
YW1lcygpLml0ZXJhdGVkT2JqZWN0UHJpdmF0ZU5hbWUoKSk7CisgICAgICAgIGlmIChpdGVyYXRv
ck9iamVjdC0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5z
ZXRCdWNrZXRQcml2YXRlTmFtZSgpKSkgeworICAgICAgICAgICAgSlNWYWx1ZSBpdGVyYXRlZFZh
bHVlID0gaXRlcmF0b3JPYmplY3QtPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVp
bHRpbk5hbWVzKCkuaXRlcmF0ZWRPYmplY3RQcml2YXRlTmFtZSgpKTsKICAgICAgICAgICAgIFN0
cmluZyBraW5kOwotICAgICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxJdGVyYXRpb25LaW5k
PihpdGVyYXRvck9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnZtKCkucHJvcGVy
dHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc2V0SXRlcmF0b3JLaW5kUHJpdmF0ZU5hbWUoKSkuYXNJ
bnQzMigpKSkgeworICAgICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxJdGVyYXRpb25LaW5k
PihpdGVyYXRvck9iamVjdC0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGlu
TmFtZXMoKS5zZXRJdGVyYXRvcktpbmRQcml2YXRlTmFtZSgpKS5hc0ludDMyKCkpKSB7CiAgICAg
ICAgICAgICBjYXNlIEl0ZXJhdGVLZXk6CiAgICAgICAgICAgICAgICAga2luZCA9IEFTQ0lJTGl0
ZXJhbCgia2V5Iik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00NTYsOCArNDU3LDggQEAg
SlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha01hcEVudAogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgZm9yIChhdXRvIGl0ID0gd2Vha01hcC0+
YmVnaW4oKTsgaXQgIT0gd2Vha01hcC0+ZW5kKCk7ICsraXQpIHsKICAgICAgICAgSlNPYmplY3Qq
IGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgICAgIGVudHJ5LT5wdXRE
aXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAia2V5IiksIGl0
LT5rZXkpOwotICAgICAgICBlbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgInZhbHVlIiksIGl0LT52YWx1ZS5nZXQoKSk7CisgICAgICAgIGVu
dHJ5LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImtleSIpLCBp
dC0+a2V5KTsKKyAgICAgICAgZW50cnktPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyhleGVjLCAidmFsdWUiKSwgaXQtPnZhbHVlLmdldCgpKTsKICAgICAgICAgYXJyYXktPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGZldGNoZWQrKywgZW50cnkpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICBpZiAobnVtYmVyVG9GZXRjaCAm
JiBmZXRjaGVkID49IG51bWJlclRvRmV0Y2gpCkBAIC01MDUsNyArNTA2LDcgQEAgSlNWYWx1ZSBK
U0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha1NldEVudAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgZm9yIChhdXRvIGl0ID0gd2Vha1NldC0+YmVnaW4oKTsg
aXQgIT0gd2Vha1NldC0+ZW5kKCk7ICsraXQpIHsKICAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgICAgIGVudHJ5LT5wdXREaXJlY3QoZXhl
Yy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAidmFsdWUiKSwgaXQtPmtleSk7
CisgICAgICAgIGVudHJ5LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgInZhbHVlIiksIGl0LT5rZXkpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgZmV0Y2hlZCsrLCBlbnRyeSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IEpTVmFsdWUoKSk7CiAgICAgICAgIGlmIChudW1iZXJUb0ZldGNoICYmIGZldGNoZWQgPj0gbnVt
YmVyVG9GZXRjaCkKQEAgLTYwNCw3ICs2MDUsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0OjppdGVyYXRvckVuCiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAKICAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7
Ci0gICAgICAgIGVudHJ5LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyhleGVjLCAidmFsdWUiKSwgbmV4dFZhbHVlKTsKKyAgICAgICAgZW50cnktPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAidmFsdWUiKSwgbmV4dFZhbHVlKTsK
ICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIGVudHJ5KTsKICAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAgICAgc2NvcGUucmVs
ZWFzZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3Jp
cHRDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTksMTAgKzExOSwxMSBAQCBzdGF0aWMgSlNWYWx1ZSB2YWx1ZUZv
clNjb3BlTG9jYXRpb24oRXhlCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAogICAgIC8vIERl
YnVnZ2VyLkxvY2F0aW9uIHByb3RvY29sIG9iamVjdC4KKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAg
ICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4
ZWMsICJzY3JpcHRJZCIpLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6Om51bWJlcihsb2NhdGlvbi5z
b3VyY2VJRCkpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGV4ZWMsICJsaW5lTnVtYmVyIiksIGpzTnVtYmVyKGxvY2F0aW9uLmxpbmUp
KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsICJjb2x1bW5OdW1iZXIiKSwganNOdW1iZXIobG9jYXRpb24uY29sdW1uKSk7Cisg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInNj
cmlwdElkIiksIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6bnVtYmVyKGxvY2F0aW9uLnNvdXJjZUlE
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4
ZWMsICJsaW5lTnVtYmVyIiksIGpzTnVtYmVyKGxvY2F0aW9uLmxpbmUpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY29sdW1uTnVtYmVy
IiksIGpzTnVtYmVyKGxvY2F0aW9uLmNvbHVtbikpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
QEAgLTE0Miw5ICsxNDMsOSBAQCBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVE
ZXNjCiAgICAgZm9yIChEZWJ1Z2dlclNjb3BlOjppdGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+
YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBEZWJ1Z2dlclNjb3BlKiBz
Y29wZSA9IGl0ZXIuZ2V0KCk7CiAgICAgICAgIEpTT2JqZWN0KiBkZXNjcmlwdGlvbiA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KGV4
ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInR5cGUiKSwgdmFsdWVGb3JT
Y29wZVR5cGUoc2NvcGUpKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChleGVjLT52
bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJuYW1lIiksIGpzU3RyaW5nKGV4ZWMs
IHNjb3BlLT5uYW1lKCkpKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChleGVjLT52
bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJsb2NhdGlvbiIpLCB2YWx1ZUZvclNj
b3BlTG9jYXRpb24oZXhlYywgc2NvcGUtPmxvY2F0aW9uKCkpKTsKKyAgICAgICAgZGVzY3JpcHRp
b24tPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAidHlwZSIpLCB2
YWx1ZUZvclNjb3BlVHlwZShzY29wZSkpOworICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJuYW1lIiksIGpzU3RyaW5nKGV4ZWMs
IHNjb3BlLT5uYW1lKCkpKTsKKyAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibG9jYXRpb24iKSwgdmFsdWVGb3JTY29wZUxvY2F0
aW9uKGV4ZWMsIHNjb3BlLT5sb2NhdGlvbigpKSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJ
bmRleChleGVjLCBpbmRleCsrLCBkZXNjcmlwdGlvbik7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgSlNWYWx1ZSgpKTsKICAgICB9CkBAIC0yMjYsOSArMjI3LDEwIEBA
IEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2IKICAgICBpZiAoIWltcGwp
CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBK
U0phdmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZVByb3RvdHlwZShleGVjLT52bSgpLCBnbG9iYWxP
YmplY3QpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNKYXZhU2NyaXB0Q2FsbEZyYW1l
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUpOwot
ICAgIEpTSmF2YVNjcmlwdENhbGxGcmFtZSogamF2YVNjcmlwdENhbGxGcmFtZSA9IEpTSmF2YVNj
cmlwdENhbGxGcmFtZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgKmltcGwpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IEpTSmF2YVNj
cmlwdENhbGxGcmFtZTo6Y3JlYXRlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpOworICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjcmVhdGVTdHJ1Y3R1
cmUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlKTsKKyAgICBKU0phdmFTY3JpcHRDYWxsRnJh
bWUqIGphdmFTY3JpcHRDYWxsRnJhbWUgPSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZSh2
bSwgc3RydWN0dXJlLCAqaW1wbCk7CiAKICAgICByZXR1cm4gamF2YVNjcmlwdENhbGxGcmFtZTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNr
RmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI0LDExICsxMjQsMTEgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFNvdXJj
ZUluZm9ybWF0aW9uRnJvbQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKIAogICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNw
ZWN0b3I6IFNob3VsZCBub3QgbmVlZCB0byBldmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4
Y2VwdGlvbnMKLSAgICBKU1ZhbHVlIGxpbmVWYWx1ZSA9IGV4Y2VwdGlvbk9iamVjdC0+Z2V0RGly
ZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImxpbmUiKSk7Cisg
ICAgSlNWYWx1ZSBsaW5lVmFsdWUgPSBleGNlcHRpb25PYmplY3QtPmdldERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibGluZSIpKTsKICAgICAqbGluZU51bWJlciA9IGxp
bmVWYWx1ZSAmJiBsaW5lVmFsdWUuaXNOdW1iZXIoKSA/IGludChsaW5lVmFsdWUudG9OdW1iZXIo
ZXhlYykpIDogMDsKLSAgICBKU1ZhbHVlIGNvbHVtblZhbHVlID0gZXhjZXB0aW9uT2JqZWN0LT5n
ZXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY29sdW1u
IikpOworICAgIEpTVmFsdWUgY29sdW1uVmFsdWUgPSBleGNlcHRpb25PYmplY3QtPmdldERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY29sdW1uIikpOwogICAgICpjb2x1
bW5OdW1iZXIgPSBjb2x1bW5WYWx1ZSAmJiBjb2x1bW5WYWx1ZS5pc051bWJlcigpID8gaW50KGNv
bHVtblZhbHVlLnRvTnVtYmVyKGV4ZWMpKSA6IDA7Ci0gICAgSlNWYWx1ZSBzb3VyY2VVUkxWYWx1
ZSA9IGV4Y2VwdGlvbk9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoZXhlYywgInNvdXJjZVVSTCIpKTsKKyAgICBKU1ZhbHVlIHNvdXJjZVVSTFZhbHVl
ID0gZXhjZXB0aW9uT2JqZWN0LT5nZXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
ZXhlYywgInNvdXJjZVVSTCIpKTsKICAgICAqc291cmNlVVJMID0gc291cmNlVVJMVmFsdWUgJiYg
c291cmNlVVJMVmFsdWUuaXNTdHJpbmcoKSA/IHNvdXJjZVVSTFZhbHVlLnRvV1RGU3RyaW5nKGV4
ZWMpIDogQVNDSUlMaXRlcmFsKCJ1bmRlZmluZWQiKTsKICAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogfQpAQCAtMTcwLDEwICsxNzAsMTEgQEAgUmVmPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRl
U2NyaXB0Q2FsbFN0YQogCiBSZWY8U2NyaXB0QXJndW1lbnRzPiBjcmVhdGVTY3JpcHRBcmd1bWVu
dHMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50KQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgVmVjdG9yPERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlPiBhcmd1bWVudHM7CiAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBleGVjLT5hcmd1bWVu
dENvdW50KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IHNraXBBcmd1bWVudENvdW50OyBpIDwgYXJn
dW1lbnRDb3VudDsgKytpKQotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlKGV4ZWMtPnZtKCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKSk7CisgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQoRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUodm0sIGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KGkpKSk7CiAgICAgcmV0dXJuIFNjcmlwdEFyZ3VtZW50czo6Y3JlYXRl
KGV4ZWMsIGFyZ3VtZW50cyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWNoZWRDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhY2hlZENhbGwuaAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhY2hlZENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsOCArNDEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIENhY2hl
ZENhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBpbnQgYXJn
dW1lbnRDb3VudCkKICAgICAgICAgICAgIDogbV92YWxpZChmYWxzZSkKLSAgICAgICAgICAgICwg
bV9pbnRlcnByZXRlcihjYWxsRnJhbWUtPmludGVycHJldGVyKCkpCiAgICAgICAgICAgICAsIG1f
dm0oY2FsbEZyYW1lLT52bSgpKQorICAgICAgICAgICAgLCBtX2ludGVycHJldGVyKG1fdm0uaW50
ZXJwcmV0ZXIpCiAgICAgICAgICAgICAsIG1fZW50cnlTY29wZShtX3ZtLCBmdW5jdGlvbi0+c2Nv
cGUoKS0+Z2xvYmFsT2JqZWN0KG1fdm0pKQogICAgICAgICB7CiAgICAgICAgICAgICBWTSYgdm0g
PSBtX2VudHJ5U2NvcGUudm0oKTsKQEAgLTcwLDggKzcwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBib29sIG1fdmFsaWQ7Ci0gICAgICAgIEludGVycHJldGVy
KiBtX2ludGVycHJldGVyOwogICAgICAgICBWTSYgbV92bTsKKyAgICAgICAgSW50ZXJwcmV0ZXIq
IG1faW50ZXJwcmV0ZXI7CiAgICAgICAgIFZNRW50cnlTY29wZSBtX2VudHJ5U2NvcGU7CiAgICAg
ICAgIFByb3RvQ2FsbEZyYW1lIG1fcHJvdG9DYWxsRnJhbWU7CiAgICAgICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIG1fYXJndW1lbnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUs
MTggKzEzNSw2IEBAIG5hbWVzcGFjZSBKU0MgIHsKIAogICAgICAgICBWTSYgdm0oKSBjb25zdDsK
IAotICAgICAgICAvLyBDb252ZW5pZW5jZSBmdW5jdGlvbnMgZm9yIGFjY2VzcyB0byBnbG9iYWwg
ZGF0YS4KLSAgICAgICAgLy8gSXQgdGFrZXMgYSBmZXcgbWVtb3J5IHJlZmVyZW5jZXMgdG8gZ2V0
IGZyb20gYSBjYWxsIGZyYW1lIHRvIHRoZSBnbG9iYWwgZGF0YQotICAgICAgICAvLyBwb2ludGVy
LCBzbyB0aGVzZSBhcmUgaW5lZmZpY2llbnQsIGFuZCBzaG91bGQgYmUgdXNlZCBzcGFyaW5nbHkg
aW4gbmV3IGNvZGUuCi0gICAgICAgIC8vIEJ1dCB0aGV5J3JlIHVzZWQgaW4gbWFueSBwbGFjZXMg
aW4gbGVnYWN5IGNvZGUsIHNvIHRoZXkncmUgbm90IGdvaW5nIGF3YXkgYW55IHRpbWUgc29vbi4K
LQotICAgICAgICBBdG9taWNTdHJpbmdUYWJsZSogYXRvbWljU3RyaW5nVGFibGUoKSBjb25zdCB7
IHJldHVybiB2bSgpLmF0b21pY1N0cmluZ1RhYmxlKCk7IH0KLSAgICAgICAgY29uc3QgQ29tbW9u
SWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAqdm0oKS5wcm9wZXJ0
eU5hbWVzOyB9Ci0gICAgICAgIGNvbnN0IEFyZ0xpc3QmIGVtcHR5TGlzdCgpIGNvbnN0IHsgcmV0
dXJuICp2bSgpLmVtcHR5TGlzdDsgfQotICAgICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIo
KSB7IHJldHVybiB2bSgpLmludGVycHJldGVyOyB9Ci0gICAgICAgIEhlYXAqIGhlYXAoKSB7IHJl
dHVybiAmdm0oKS5oZWFwOyB9Ci0KLQogICAgICAgICBzdGF0aWMgQ2FsbEZyYW1lKiBjcmVhdGUo
UmVnaXN0ZXIqIGNhbGxGcmFtZUJhc2UpIHsgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxGcmFtZSo+
KGNhbGxGcmFtZUJhc2UpOyB9CiAgICAgICAgIFJlZ2lzdGVyKiByZWdpc3RlcnMoKSB7IHJldHVy
biB0aGlzOyB9CiAgICAgICAgIGNvbnN0IFJlZ2lzdGVyKiByZWdpc3RlcnMoKSBjb25zdCB7IHJl
dHVybiB0aGlzOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgw
NCw3ICs4MDQsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlUHJvZ3JhbShjb25zCiAg
ICAgICAgICAgICBpZiAoSlNPTlBQYXRoLnNpemUoKSA9PSAxICYmIEpTT05QUGF0aFswXS5tX3R5
cGUgPT0gSlNPTlBQYXRoRW50cnlUeXBlRGVjbGFyZSkgewogICAgICAgICAgICAgICAgIGdsb2Jh
bE9iamVjdC0+YWRkVmFyKGNhbGxGcmFtZSwgSlNPTlBQYXRoWzBdLm1fcGF0aEVudHJ5TmFtZSk7
CiAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsT2JqZWN0KTsKLSAg
ICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dChnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZSwgSlNPTlBQYXRoWzBdLm1fcGF0aEVudHJ5TmFtZSwgSlNPTlBWYWx1ZSwg
c2xvdCk7CisgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1
dChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgSlNPTlBQYXRoWzBdLm1fcGF0aEVudHJ5TmFtZSwg
SlNPTlBWYWx1ZSwgc2xvdCk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQo
KTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTExMDMsNyAr
MTEwMyw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICBW
TSYgdm0gPSAqc2NvcGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKLSAgICBBU1NFUlQoc2NvcGUtPnZtKCkgPT0gJmNhbGxGcmFtZS0+dm0o
KSk7CisgICAgQVNTRVJUKCZ2bSA9PSAmY2FsbEZyYW1lLT52bSgpKTsKICAgICB0aHJvd1Njb3Bl
LmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1
cnJlbnRUaHJlYWQoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9s
ZGluZ0FQSUxvY2soKSk7CkBAIC0xMTg1LDcgKzExODUsNyBAQCBKU1ZhbHVlIEludGVycHJldGVy
OjpleGVjdXRlKEV2YWxFeGVjdXRhCiAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNs
b3QodmFyaWFibGVPYmplY3QpOwogICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGVPYmplY3Qt
PmlzRXh0ZW5zaWJsZShjYWxsRnJhbWUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hl
Y2tlZFJldHVybih0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHRocm93U2NvcGUsIEFTQ0lJTGl0
ZXJhbChOb25FeHRlbnNpYmxlT2JqZWN0UHJvcGVydHlEZWZpbmVFcnJvcikpKTsKLSAgICAgICAg
ICAgICAgICB2YXJpYWJsZU9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHZhcmlhYmxlT2JqZWN0
LCBjYWxsRnJhbWUsIGlkZW50LCBqc1VuZGVmaW5lZCgpLCBzbG90KTsKKyAgICAgICAgICAgICAg
ICB2YXJpYWJsZU9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQodmFyaWFibGVPYmplY3QsIGNh
bGxGcmFtZSwgaWRlbnQsIGpzVW5kZWZpbmVkKCksIHNsb3QpOwogICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTExOTUsNyArMTE5NSw3
IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICAgICAgICAg
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gY29kZUJsb2NrLT5mdW5jdGlvbkRl
Y2woaSk7CiAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodmFyaWFibGVPYmpl
Y3QpOwogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgY3JlYXRlIHRoaXMgdmFyaWFibGVzIGJl
Y2F1c2UgaXQgd2lsbCBiZSB1c2VkIHRvIGVtaXRzIGNvZGUgYnkgYnl0ZWNvZGUgZ2VuZXJhdG9y
Ci0gICAgICAgICAgICAgICAgdmFyaWFibGVPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh2YXJp
YWJsZU9iamVjdCwgY2FsbEZyYW1lLCBmdW5jdGlvbi0+bmFtZSgpLCBqc1VuZGVmaW5lZCgpLCBz
bG90KTsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZU9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5w
dXQodmFyaWFibGVPYmplY3QsIGNhbGxGcmFtZSwgZnVuY3Rpb24tPm5hbWUoKSwganNVbmRlZmlu
ZWQoKSwgc2xvdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtVG9wTGV2ZWxGdW5jdGlvbkRlY2xzOyArK2kp
IHsKQEAgLTEyMDUsNyArMTIwNSw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZh
bEV4ZWN1dGEKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dT
eW50YXhFcnJvcihjYWxsRnJhbWUsIHRocm93U2NvcGUsIG1ha2VTdHJpbmcoIkNhbid0IGNyZWF0
ZSBkdXBsaWNhdGUgdmFyaWFibGUgaW4gZXZhbDogJyIsIFN0cmluZyhmdW5jdGlvbi0+bmFtZSgp
LmltcGwoKSksICInIikpKTsKICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh2
YXJpYWJsZU9iamVjdCk7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCBjcmVhdGUgdGhpcyB2
YXJpYWJsZXMgYmVjYXVzZSBpdCB3aWxsIGJlIHVzZWQgdG8gZW1pdHMgY29kZSBieSBieXRlY29k
ZSBnZW5lcmF0b3IKLSAgICAgICAgICAgICAgICB2YXJpYWJsZU9iamVjdC0+bWV0aG9kVGFibGUo
KS0+cHV0KHZhcmlhYmxlT2JqZWN0LCBjYWxsRnJhbWUsIGZ1bmN0aW9uLT5uYW1lKCksIGpzVW5k
ZWZpbmVkKCksIHNsb3QpOworICAgICAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPnB1dCh2YXJpYWJsZU9iamVjdCwgY2FsbEZyYW1lLCBmdW5jdGlvbi0+bmFtZSgp
LCBqc1VuZGVmaW5lZCgpLCBzbG90KTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGNoZWNrZWRSZXR1cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwog
ICAgICAgICAgICAgfQogCkBAIC0xMjE1LDcgKzEyMTUsNyBAQCBKU1ZhbHVlIEludGVycHJldGVy
OjpleGVjdXRlKEV2YWxFeGVjdXRhCiAgICAgICAgICAgICAgICAgaWYgKCFyZXNvbHZlZFNjb3Bl
LmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZU9iamVj
dC0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBpZGVudCkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHZhcmlhYmxlT2JqZWN0KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcmlhYmxlT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodmFyaWFibGVPYmpl
Y3QsIGNhbGxGcmFtZSwgaWRlbnQsIGpzVW5kZWZpbmVkKCksIHNsb3QpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyaWFibGVPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHZhcmlhYmxl
T2JqZWN0LCBjYWxsRnJhbWUsIGlkZW50LCBqc1VuZGVmaW5lZCgpLCBzbG90KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJl
dHVybih0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CkBAIC0xMjQ2LDcgKzEyNDYsNyBAQCBKU1ZhbHVlIEludGVycHJldGVy
OjpleGVjdXRlTW9kdWxlUHJvZ3JhCiAgICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgQVNTRVJUKHNj
b3BlLT52bSgpID09ICZjYWxsRnJhbWUtPnZtKCkpOworICAgIEFTU0VSVCgmdm0gPT0gJmNhbGxG
cmFtZS0+dm0oKSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIEFT
U0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5T25DdXJyZW50VGhyZWFkKCkpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsOCArMTg3LDkgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgbV9jYWxsTGlua0luZm9JbmRl
eCA9IDA7CiAKKyAgICBWTSYgdm0gPSAqbV9jb2RlQmxvY2stPnZtKCk7CiAgICAgdW5zaWduZWQg
c3RhcnRCeXRlY29kZU9mZnNldCA9IDA7Ci0gICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVP
ZmZzZXQgJiYgKG1fY29kZUJsb2NrLT5pbmhlcml0cygqbV9jb2RlQmxvY2stPnZtKCksIFByb2dy
YW1Db2RlQmxvY2s6OmluZm8oKSkgfHwgbV9jb2RlQmxvY2stPmluaGVyaXRzKCptX2NvZGVCbG9j
ay0+dm0oKSwgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKSkpIHsKKyAgICBpZiAobV9s
b29wT1NSRW50cnlCeXRlY29kZU9mZnNldCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRzKHZtLCBQ
cm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0cyh2bSwgTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKSkpIHsKICAgICAgICAgLy8gV2UgY2FuIG9ubHkg
ZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2RlQmxvY2sn
cyBleGFjdGx5IG9uY2UuCiAgICAgICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxkIGJlIGlu
dmFsaWQgb3RoZXJ3aXNlLiBXaGVuIHRoZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRzIHRvCiAg
ICAgICAgIC8vIGRvIE9TUiBlbnRyeSBpbnRvIHRoZSBiYXNlbGluZSBKSVQgaW4gYSBsb29wLCBp
dCB3aWxsIHBhc3MgaW4gdGhlIGJ5dGVjb2RlIG9mZnNldCBpdApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MTIsNyArNDEyLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRE
aXJlYwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQp
OwogICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCwgYmFz
ZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgqdm0pLCBpZGVudCkpOwogICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0
KCkpOwotICAgIGFzT2JqZWN0KGJhc2VWYWx1ZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVu
dCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIGFzT2JqZWN0KGJh
c2VWYWx1ZSktPnB1dERpcmVjdCgqdm0sIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgc2xvdCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpAQCAtNDI4LDcgKzQyOCw3IEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKICAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3QsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwoKnZtKSwg
aWRlbnQpKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGZhbHNlLCBleGVj
LT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgYXNPYmplY3QoYmFzZVZhbHVl
KS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgc2xvdCk7CisgICAgYXNPYmplY3QoYmFzZVZhbHVlKS0+cHV0RGlyZWN0KCp2bSwgaWRl
bnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMs
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKQEAg
LTUwNCw3ICs1MDQsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVj
CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwgdHJ1ZSwgY29kZUJsb2NrLT5w
dXRCeUlkQ29udGV4dCgpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VP
YmplY3QtPnN0cnVjdHVyZSgqdm0pOwotICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdChleGVjLT52
bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOworICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdCgqdm0s
IGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGlj
X2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQogICAgICAgICByZXR1cm47
CkBAIC01MzAsNyArNTMwLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRE
aXJlYwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VPYmplY3QsIGZhbHNlLCBjb2RlQmxv
Y2stPnB1dEJ5SWRDb250ZXh0KCkpOwogICAgIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
YmFzZU9iamVjdC0+c3RydWN0dXJlKCp2bSk7Ci0gICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0KGV4
ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0
KCp2bSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKICAgICAKICAgICBpZiAoYWNjZXNzVHlwZSAhPSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTU1NCw3ICs1NTQsNyBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChDYWxsRnJhbWUq
IGNhbGxGcmFtCiAgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAgICAgICAgICAgICBp
ZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaSkpCi0gICAgICAgICAgICAgICAgb2JqZWN0
LT5zZXRJbmRleFF1aWNrbHkoY2FsbEZyYW1lLT52bSgpLCBpLCB2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkodm0sIGksIHZhbHVlKTsKICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgbWFrZSB1cyB0aGlu
ayB0aGF0IGluLWJvdW5kcyB0eXBlZCBhcnJheSBhY2Nlc3NlcyBhcmUgYWN0dWFsbHkKICAgICAg
ICAgICAgICAgICAvLyBvdXQtb2YtYm91bmRzLgpAQCAtNjMxLDcgKzYzMSw3IEBAIHN0YXRpYyB2
b2lkIGRpcmVjdFB1dEJ5VmFsKENhbGxGcmFtZSogY2EKICAgICAgICAgYnlWYWxJbmZvLT50b29r
U2xvd1BhdGggPSB0cnVlOwogCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwg
aXNTdHJpY3RNb2RlKTsKLSAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3QoY2FsbEZyYW1lLT52bSgp
LCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOworICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdCh2bSwg
cHJvcGVydHksIHZhbHVlLCBzbG90KTsKIH0KIAogZW51bSBjbGFzcyBPcHRpbWl6YXRpb25SZXN1
bHQgewpAQCAtMjI2Niw3ICsyMjY2LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dFRvU2NvcGUoRQogICAgIH0KIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNjb3BlLCBjb2Rl
QmxvY2stPmlzU3RyaWN0TW9kZSgpLCBQdXRQcm9wZXJ0eVNsb3Q6OlVua25vd25Db250ZXh0LCBp
c0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpKTsKLSAgICBz
Y29wZS0+bWV0aG9kVGFibGUoKS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgdmFsdWUsIHNsb3Qp
OworICAgIHNjb3BlLT5tZXRob2RUYWJsZSh2bSktPnB1dChzY29wZSwgZXhlYywgaWRlbnQsIHZh
bHVlLCBzbG90KTsKICAgICAKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHZv
aWQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3Bw
CShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmts
aXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw4IEBAIHZvaWQgSklUV29ya2xp
c3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKIAogdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZU5v
dyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZz
ZXQpCiB7Ci0gICAgRGVmZXJHQyBkZWZlckdDKGNvZGVCbG9jay0+dm0oKS0+aGVhcCk7CisgICAg
Vk0qIHZtID0gY29kZUJsb2NrLT52bSgpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS0+aGVhcCk7
CiAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVENvZGU6OkludGVycHJldGVyVGh1
bmspCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTI4Niw3ICsyODcsNyBAQCB2b2lkIEpJVFdv
cmtsaXN0Ojpjb21waWxlTm93KENvZGVCbG9jayogCiAgICAgaWYgKGlzUGxhbm5lZCkgewogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpOwogICAgICAg
ICAvLyBUaGlzIGlzIGV4cGVuc2l2ZSwgYnV0IHByb2JhYmx5IGdvb2QgZW5vdWdoLgotICAgICAg
ICBjb21wbGV0ZUFsbEZvclZNKCpjb2RlQmxvY2stPnZtKCkpOworICAgICAgICBjb21wbGV0ZUFs
bEZvclZNKCp2bSk7CiAgICAgfQogICAgIAogICAgIC8vIE5vdyBpdCBtaWdodCBiZSBjb21waWxl
ZCEKQEAgLTI5OCw3ICsyOTksNyBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENvZGVC
bG9jayogCiAgICAgY29kZUJsb2NrLT5yZXNldEpJVERhdGEoKTsKICAgICAKICAgICAvLyBPSywg
anVzdCBjb21waWxlIGl0LgotICAgIEpJVDo6Y29tcGlsZShjb2RlQmxvY2stPnZtKCksIGNvZGVC
bG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZz
ZXQpOworICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RT
dWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7CiAgICAgY29kZUJsb2NrLT5vd25l
clNjcmlwdEV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZp
c2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTUsNyArNjk1LDcgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZAogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICghTExJ
TlRfQUxXQVlTX0FDQ0VTU19TTE9XCiAgICAgICAgICYmIGlzSlNBcnJheShiYXNlVmFsdWUpCi0g
ICAgICAgICYmIGlkZW50ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAg
ICAgJiYgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7CiAgICAgICAgIHBjWzBd
LnUub3Bjb2RlID0gTExJbnQ6OmdldE9wY29kZShvcF9nZXRfYXJyYXlfbGVuZ3RoKTsKICAgICAg
ICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBjb2RlQmxvY2stPmdldE9yQWRkQXJyYXlQ
cm9maWxlKHBjIC0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpKTsKICAgICAgICAg
YXJyYXlQcm9maWxlLT5vYnNlcnZlU3RydWN0dXJlKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0
dXJlKCkpOwpAQCAtNzk2LDcgKzc5Niw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9kZWxfYnlfaWQKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwogICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gTExJTlRfT1BfQygyKS5qc1ZhbHVlKCkudG9P
YmplY3QoZXhlYyk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgYm9vbCBjb3Vs
ZERlbGV0ZSA9IGJhc2VPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KGJhc2VP
YmplY3QsIGV4ZWMsIGNvZGVCbG9jay0+aWRlbnRpZmllcihwY1szXS51Lm9wZXJhbmQpKTsKKyAg
ICBib29sIGNvdWxkRGVsZXRlID0gYmFzZU9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQ
cm9wZXJ0eShiYXNlT2JqZWN0LCBleGVjLCBjb2RlQmxvY2stPmlkZW50aWZpZXIocGNbM10udS5v
cGVyYW5kKSk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgaWYgKCFjb3VsZERl
bGV0ZSAmJiBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKQogICAgICAgICBMTElOVF9USFJPVyhj
cmVhdGVUeXBlRXJyb3IoZXhlYywgVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7CkBAIC04
NTUsNyArODU1LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV92YQog
ICAgICAgICAgICAgaWYgKG9iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGkpKQogICAgICAgICAg
ICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KHZtLCBpLCB2YWx1ZSk7CiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4
KG9iamVjdCwgZXhlYywgaSwgdmFsdWUsIGlzU3RyaWN0TW9kZSk7CisgICAgICAgICAgICAgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBpLCB2YWx1
ZSwgaXNTdHJpY3RNb2RlKTsKICAgICAgICAgICAgIExMSU5UX0VORCgpOwogICAgICAgICB9CiAg
ICAgICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4KGV4ZWMsIGksIHZhbHVlLCBpc1N0cmljdE1vZGUp
OwpAQCAtOTA0LDcgKzkwNCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRf
YnlfdmEKICAgICAgICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgudmFs
dWUoKSwgdmFsdWUsIDAsIGlzU3RyaWN0TW9kZSA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cg
OiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKICAgICBlbHNlIHsKICAgICAgICAgUHV0
UHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwgaXNTdHJpY3RNb2RlKTsKLSAgICAgICAgYmFz
ZU9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7Cisg
ICAgICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdCh2bSwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsK
ICAgICB9CiAgICAgTExJTlRfRU5EKCk7CiB9CkBAIC05MjIsMTIgKzkyMiwxMiBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVsX2J5X3ZhCiAgICAgCiAgICAgdWludDMyX3QgaTsK
ICAgICBpZiAoc3Vic2NyaXB0LmdldFVJbnQzMihpKSkKLSAgICAgICAgY291bGREZWxldGUgPSBi
YXNlT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgoYmFzZU9iamVj
dCwgZXhlYywgaSk7CisgICAgICAgIGNvdWxkRGVsZXRlID0gYmFzZU9iamVjdC0+bWV0aG9kVGFi
bGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgoYmFzZU9iamVjdCwgZXhlYywgaSk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwogICAgICAgICBhdXRvIHBy
b3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7CiAgICAgICAgIExMSU5UX0NI
RUNLX0VYQ0VQVElPTigpOwotICAgICAgICBjb3VsZERlbGV0ZSA9IGJhc2VPYmplY3QtPm1ldGhv
ZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmplY3QsIGV4ZWMsIHByb3BlcnR5KTsKKyAg
ICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVBy
b3BlcnR5KGJhc2VPYmplY3QsIGV4ZWMsIHByb3BlcnR5KTsKICAgICB9CiAgICAgCiAgICAgaWYg
KCFjb3VsZERlbGV0ZSAmJiBleGVjLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpCkBAIC0x
NjE3LDcgKzE2MTcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X3RvX3Nj
CiAgICAgICAgIExMSU5UX1RIUk9XKGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywg
aWRlbnQpKTsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNjb3BlLCBjb2RlQmxvY2stPmlz
U3RyaWN0TW9kZSgpLCBQdXRQcm9wZXJ0eVNsb3Q6OlVua25vd25Db250ZXh0LCBpc0luaXRpYWxp
emF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpKTsKLSAgICBzY29wZS0+bWV0
aG9kVGFibGUoKS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOworICAgIHNj
b3BlLT5tZXRob2RUYWJsZSh2bSktPnB1dChzY29wZSwgZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90
KTsKICAgICAKICAgICBDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlUHV0VG9TY29wZUdsb2JhbChl
eGVjLCBjb2RlQmxvY2ssIHBjLCBzY29wZSwgZ2V0UHV0SW5mbywgc2xvdCwgaWRlbnQpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01vZHVsZUFuYWx5emVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01vZHVsZUFuYWx5emVyLmNw
cAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Nb2R1
bGVBbmFseXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIE1vZHVsZUFuYWx5emVyOjpNb2R1bGVBbmFseXplcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29k
ZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZGVjbGFyZWRWYXJpYWJsZXMsIGNvbnN0IFZh
cmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCiAgICAgOiBtX3ZtKCZleGVjLT52
bSgpKQotICAgICwgbV9tb2R1bGVSZWNvcmQoZXhlYy0+dm0oKSwgSlNNb2R1bGVSZWNvcmQ6OmNy
ZWF0ZShleGVjLCBleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm1vZHVs
ZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIHNvdXJjZUNvZGUsIGRlY2xhcmVkVmFyaWFi
bGVzLCBsZXhpY2FsVmFyaWFibGVzKSkKKyAgICAsIG1fbW9kdWxlUmVjb3JkKCptX3ZtLCBKU01v
ZHVsZVJlY29yZDo6Y3JlYXRlKGV4ZWMsICptX3ZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPm1vZHVsZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIHNvdXJjZUNvZGUsIGRlY2xh
cmVkVmFyaWFibGVzLCBsZXhpY2FsVmFyaWFibGVzKSkKIHsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNwcAkocmV2
aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVy
Qnl0ZWNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMCArMzUsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBQcm9maWxlciB7CiAKIEpTVmFsdWUgQnl0ZWNvZGU6OnRvSlMoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNP
YmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIHJlc3VsdC0+
cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZUluZGV4
LCBqc051bWJlcihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVj
LT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkub3Bjb2RlLCBqc1N0cmluZyhleGVjLCBTdHJp
bmc6OmZyb21VVEY4KG9wY29kZU5hbWVzW21fb3Bjb2RlSURdKSkpOwotICAgIHJlc3VsdC0+cHV0
RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5kZXNjcmlwdGlvbiwganNT
dHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChtX2Rlc2NyaXB0aW9uKSkpOworICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ieXRlY29kZUluZGV4LCBqc051bWJl
cihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+b3Bjb2RlLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG9wY29kZU5h
bWVzW21fb3Bjb2RlSURdKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5kZXNjcmlwdGlvbiwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChtX2Rl
c2NyaXB0aW9uKSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2Vx
dWVuY2UuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUs
NyArODUsNyBAQCB2b2lkIEJ5dGVjb2RlU2VxdWVuY2U6OmFkZFNlcXVlbmNlUHJvcGVyCiAgICAg
ICAgIGhlYWRlci0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwganNTdHJpbmcoZXhlYywgU3RyaW5n
Ojpmcm9tVVRGOChtX2hlYWRlcltpXSkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKICAgICB9Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5oZWFkZXIsIGhlYWRlcik7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmhlYWRlciwgaGVhZGVyKTsKICAgICAKICAgICBKU0FycmF5KiBz
ZXF1ZW5jZSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBCeXRlY29kZVNl
cXVlbmNlOjphZGRTZXF1ZW5jZVByb3BlcgogICAgICAgICBzZXF1ZW5jZS0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaSwgbV9zZXF1ZW5jZVtpXS50b0pTKGV4ZWMpKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZSwgc2VxdWVuY2UpOworICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ieXRlY29kZSwgc2VxdWVuY2UpOwog
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6UHJvZmlsZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmNwcAkocmV2aXNp
b24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0
ZWNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTMgKzUzLDE0IEBAIHZvaWQgQnl0ZWNv
ZGVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKIAogSlNWYWx1ZSBCeXRlY29kZXM6OnRvSlMo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
SlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgIAotICAg
IHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
Y29kZXNJRCwganNOdW1iZXIobV9pZCkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZt
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pbmZlcnJlZE5hbWUsIGpzU3RyaW5nKGV4ZWMsIFN0
cmluZzo6ZnJvbVVURjgobV9pbmZlcnJlZE5hbWUpKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNvdXJjZUNvZGUsIGpzU3RyaW5nKGV4
ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9zb3VyY2VDb2RlKSkpOwotICAgIHJlc3VsdC0+cHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5oYXNoLCBqc1N0cmluZyhleGVj
LCBTdHJpbmc6OmZyb21VVEY4KHRvQ1N0cmluZyhtX2hhc2gpKSkpOwotICAgIHJlc3VsdC0+cHV0
RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pbnN0cnVjdGlvbkNvdW50
LCBqc051bWJlcihtX2luc3RydWN0aW9uQ291bnQpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZWNvZGVzSUQsIGpzTnVtYmVyKG1faWQpKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aW5mZXJyZWROYW1lLCBqc1N0
cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1faW5mZXJyZWROYW1lKSkpOworICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zb3VyY2VDb2RlLCBqc1N0cmluZyhl
eGVjLCBTdHJpbmc6OmZyb21VVEY4KG1fc291cmNlQ29kZSkpKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aGFzaCwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpm
cm9tVVRGOCh0b0NTdHJpbmcobV9oYXNoKSkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+aW5zdHJ1Y3Rpb25Db3VudCwganNOdW1iZXIobV9pbnN0cnVjdGlv
bkNvdW50KSk7CiAgICAgYWRkU2VxdWVuY2VQcm9wZXJ0aWVzKGV4ZWMsIHJlc3VsdCk7CiAgICAg
CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9Qcm9maWxlckNvbXBpbGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAJKHJldmlzaW9uIDIyMTgwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw4IEBAIEpTVmFsdWUgQ29tcGlsYXRpb246
OnRvSlMoRXhlY1N0YXRlKiBleGUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXNJRCwganNOdW1iZXIobV9i
eXRlY29kZXMtPmlkKCkpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmNvbXBpbGF0aW9uS2luZCwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRG
OCh0b0NTdHJpbmcobV9raW5kKSkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+Ynl0ZWNvZGVzSUQsIGpzTnVtYmVyKG1fYnl0ZWNvZGVzLT5pZCgpKSk7Cisg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbXBpbGF0aW9uS2lu
ZCwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOCh0b0NTdHJpbmcobV9raW5kKSkpKTsK
ICAgICAKICAgICBKU0FycmF5KiBwcm9maWxlZEJ5dGVjb2RlcyA9IGNvbnN0cnVjdEVtcHR5QXJy
YXkoZXhlYywgMCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKQEAgLTEy
OSw3ICsxMjksNyBAQCBKU1ZhbHVlIENvbXBpbGF0aW9uOjp0b0pTKEV4ZWNTdGF0ZSogZXhlCiAg
ICAgICAgIHByb2ZpbGVkQnl0ZWNvZGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCB2YWx1ZSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQotICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvZmlsZWRCeXRlY29k
ZXMsIHByb2ZpbGVkQnl0ZWNvZGVzKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+cHJvZmlsZWRCeXRlY29kZXMsIHByb2ZpbGVkQnl0ZWNvZGVzKTsKICAgICAK
ICAgICBKU0FycmF5KiBkZXNjcmlwdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDAp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CkBAIC0xMzksNyArMTM5LDcg
QEAgSlNWYWx1ZSBDb21waWxhdGlvbjo6dG9KUyhFeGVjU3RhdGUqIGV4ZQogICAgICAgICBkZXNj
cmlwdGlvbnMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHZhbHVlKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5kZXNjcmlwdGlvbnMsIGRlc2NyaXB0aW9ucyk7Cisg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmRlc2NyaXB0aW9ucywg
ZGVzY3JpcHRpb25zKTsKICAgICAKICAgICBKU0FycmF5KiBjb3VudGVycyA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZXhlYywgMCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
QEAgLTE0OCwxMiArMTQ4LDEyIEBAIEpTVmFsdWUgQ29tcGlsYXRpb246OnRvSlMoRXhlY1N0YXRl
KiBleGUKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAg
YXV0byB2YWx1ZSA9IGl0LT5rZXkudG9KUyhleGVjKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgY291bnRlckVudHJ5LT5wdXREaXJlY3Qodm0sIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5vcmlnaW4sIHZhbHVlKTsKLSAgICAgICAgY291bnRlckVudHJ5
LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5leGVjdXRpb25Db3VudCwganNO
dW1iZXIoaXQtPnZhbHVlLT5jb3VudCgpKSk7CisgICAgICAgIGNvdW50ZXJFbnRyeS0+cHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5vcmlnaW4sIHZhbHVlKTsKKyAgICAgICAgY291bnRl
ckVudHJ5LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmV4ZWN1dGlvbkNvdW50LCBq
c051bWJlcihpdC0+dmFsdWUtPmNvdW50KCkpKTsKICAgICAgICAgY291bnRlcnMtPnB1c2goZXhl
YywgY291bnRlckVudHJ5KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICB9Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5jb3VudGVycywgY291bnRlcnMpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5jb3VudGVycywgY291bnRlcnMpOwogICAgIAogICAgIEpTQXJyYXkqIGV4aXRT
aXRlcyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKQEAgLTE2Myw3ICsxNjMsNyBAQCBKU1ZhbHVlIENvbXBpbGF0aW9u
Ojp0b0pTKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIGV4aXRTaXRlcy0+cHV0RGlyZWN0SW5kZXgo
ZXhlYywgaSwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogICAgIH0KLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
Lm9zckV4aXRTaXRlcywgZXhpdFNpdGVzKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+b3NyRXhpdFNpdGVzLCBleGl0U2l0ZXMpOwogICAgIAogICAgIEpTQXJy
YXkqIGV4aXRzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwpAQCAtMTcxLDE2ICsxNzEsMTYgQEAgSlNWYWx1ZSBDb21w
aWxhdGlvbjo6dG9KUyhFeGVjU3RhdGUqIGV4ZQogICAgICAgICBleGl0cy0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaSwgbV9vc3JFeGl0c1tpXS50b0pTKGV4ZWMpKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5vc3JFeGl0cywgZXhpdHMpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5vc3JFeGl0cywgZXhpdHMpOwogICAgIAotICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubnVtSW5saW5lZEdl
dEJ5SWRzLCBqc051bWJlcihtX251bUlubGluZWRHZXRCeUlkcykpOwotICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubnVtSW5saW5lZFB1dEJ5SWRzLCBqc051
bWJlcihtX251bUlubGluZWRQdXRCeUlkcykpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubnVtSW5saW5lZENhbGxzLCBqc051bWJlcihtX251bUlubGlu
ZWRDYWxscykpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuamV0dGlzb25SZWFzb24sIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgodG9DU3Ry
aW5nKG1famV0dGlzb25SZWFzb24pKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5udW1JbmxpbmVkR2V0QnlJZHMsIGpzTnVtYmVyKG1fbnVtSW5saW5lZEdl
dEJ5SWRzKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm51
bUlubGluZWRQdXRCeUlkcywganNOdW1iZXIobV9udW1JbmxpbmVkUHV0QnlJZHMpKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bnVtSW5saW5lZENhbGxzLCBq
c051bWJlcihtX251bUlubGluZWRDYWxscykpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5qZXR0aXNvblJlYXNvbiwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpm
cm9tVVRGOCh0b0NTdHJpbmcobV9qZXR0aXNvblJlYXNvbikpKSk7CiAgICAgaWYgKCFtX2FkZGl0
aW9uYWxKZXR0aXNvblJlYXNvbi5pc051bGwoKSkKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hZGRpdGlvbmFsSmV0dGlzb25SZWFzb24sIGpzU3Ry
aW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9hZGRpdGlvbmFsSmV0dGlzb25SZWFzb24pKSk7
CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5hZGRpdGlv
bmFsSmV0dGlzb25SZWFzb24sIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9hZGRp
dGlvbmFsSmV0dGlzb25SZWFzb24pKSk7CiAgICAgCi0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51aWQsIG1fdWlkLnRvSlMoZXhlYykpOworICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT51aWQsIG1fdWlkLnRvSlMoZXhlYykp
OwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNw
cAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEwICs0NCwx
MSBAQCBDb21waWxlZEJ5dGVjb2RlOjp+Q29tcGlsZWRCeXRlY29kZSgpCiAKIEpTVmFsdWUgQ29t
cGlsZWRCeXRlY29kZTo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QoZXhlYyk7CiAgICAgCi0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLm9yaWdpbiwgbV9vcmlnaW4udG9KUyhleGVjKSk7Ci0gICAgcmVzdWx0
LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmRlc2NyaXB0aW9u
LCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1fZGVzY3JpcHRpb24pKSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm9yaWdpbiwgbV9vcmlnaW4u
dG9KUyhleGVjKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PmRlc2NyaXB0aW9uLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1fZGVzY3JpcHRp
b24pKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAJKHJldmlzaW9u
IDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckRhdGFi
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIEpTVmFsdWUgRGF0YWJh
c2U6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSAKICAgICAgICAgYnl0ZWNvZGVzLT5wdXREaXJlY3RJ
bmRleChleGVjLCBpLCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAgICAgfQotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuYnl0ZWNvZGVzLCBieXRlY29kZXMpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5ieXRlY29kZXMsIGJ5dGVjb2Rlcyk7CiAgICAgCiAgICAgSlNBcnJh
eSogY29tcGlsYXRpb25zID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwpAQCAtMTIxLDcgKzEyMSw3IEBAIEpTVmFsdWUg
RGF0YWJhc2U6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSAKICAgICAgICAgY29tcGlsYXRpb25zLT5w
dXREaXJlY3RJbmRleChleGVjLCBpLCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgfQotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY29tcGlsYXRpb25zLCBjb21waWxhdGlvbnMpOworICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb21waWxhdGlvbnMsIGNvbXBpbGF0aW9u
cyk7CiAgICAgCiAgICAgSlNBcnJheSogZXZlbnRzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVj
LCAwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwpAQCAtMTMxLDcgKzEz
MSw3IEBAIEpTVmFsdWUgRGF0YWJhc2U6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSAKICAgICAgICAg
ZXZlbnRzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXZlbnRzLCBldmVudHMpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ldmVudHMsIGV2ZW50cyk7CiAgICAgCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlckV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJFdmVudC5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDYsMTUgKzQ2LDE2IEBAIHZvaWQgRXZlbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
IAogSlNWYWx1ZSBFdmVudDo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYyk7CiAgICAgCi0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnRpbWUsIGpzTnVtYmVyKG1fdGltZSkpOwotICAgIHJlc3VsdC0+
cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXNJRCwg
anNOdW1iZXIobV9ieXRlY29kZXMtPmlkKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+dGltZSwganNOdW1iZXIobV90aW1lKSk7CisgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVjb2Rlc0lELCBqc051bWJlcihtX2J5
dGVjb2Rlcy0+aWQoKSkpOwogICAgIGlmIChtX2NvbXBpbGF0aW9uKQotICAgICAgICByZXN1bHQt
PnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29tcGlsYXRpb25V
SUQsIG1fY29tcGlsYXRpb24tPnVpZCgpLnRvSlMoZXhlYykpOwotICAgIHJlc3VsdC0+cHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zdW1tYXJ5LCBqc1N0cmluZyhl
eGVjLCBTdHJpbmc6OmZyb21VVEY4KG1fc3VtbWFyeSkpKTsKKyAgICAgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbXBpbGF0aW9uVUlELCBtX2NvbXBpbGF0aW9u
LT51aWQoKS50b0pTKGV4ZWMpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+c3VtbWFyeSwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChtX3N1bW1h
cnkpKSk7CiAgICAgaWYgKG1fZGV0YWlsLmxlbmd0aCgpKQotICAgICAgICByZXN1bHQtPnB1dERp
cmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZGV0YWlsLCBqc1N0cmluZyhl
eGVjLCBTdHJpbmc6OmZyb21VVEY4KG1fZGV0YWlsKSkpOworICAgICAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZGV0YWlsLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6
OmZyb21VVEY4KG1fZGV0YWlsKSkpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0
LmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVyT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEyICs0NywxMyBAQCBP
U1JFeGl0Ojp+T1NSRXhpdCgpCiAKIEpTVmFsdWUgT1NSRXhpdDo6dG9KUyhFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU09iamVjdCogcmVz
dWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmlkLCBqc051bWJlcihtX2lkKSk7Ci0g
ICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9y
aWdpbiwgbV9vcmlnaW4udG9KUyhleGVjKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+
dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmV4aXRLaW5kLCBqc1N0cmluZyhleGVjLCBleGl0
S2luZFRvU3RyaW5nKG1fZXhpdEtpbmQpKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+
dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmlzV2F0Y2hwb2ludCwganNCb29sZWFuKG1faXNX
YXRjaHBvaW50KSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmNvdW50LCBqc051bWJlcihtX2NvdW50ZXIpKTsKKyAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aWQsIGpzTnVtYmVyKG1faWQpKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+b3JpZ2luLCBtX29yaWdpbi50
b0pTKGV4ZWMpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
ZXhpdEtpbmQsIGpzU3RyaW5nKGV4ZWMsIGV4aXRLaW5kVG9TdHJpbmcobV9leGl0S2luZCkpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXNXYXRjaHBvaW50
LCBqc0Jvb2xlYW4obV9pc1dhdGNocG9pbnQpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+Y291bnQsIGpzTnVtYmVyKG1fY291bnRlcikpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlck9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyT3JpZ2luLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcsOSArNDcsMTAgQEAgdm9pZCBPcmlnaW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29ucwog
CiBKU1ZhbHVlIE9yaWdpbjo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYyk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmJ5dGVjb2Rlc0lELCBqc051bWJlcihtX2J5dGVjb2Rlcy0+aWQoKSkpOwot
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
eXRlY29kZUluZGV4LCBqc051bWJlcihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZWNvZGVzSUQsIGpzTnVtYmVyKG1fYnl0
ZWNvZGVzLT5pZCgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmJ5dGVjb2RlSW5kZXgsIGpzTnVtYmVyKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAJKHJldmlzaW9uIDIy
MTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlclByb2ZpbGVk
Qnl0ZWNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsMTAgQEAgUHJvZmlsZWRC
eXRlY29kZXM6On5Qcm9maWxlZEJ5dGVjb2RlcygpCiAKIEpTVmFsdWUgUHJvZmlsZWRCeXRlY29k
ZXM6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwog
ICAgIAotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlY29kZXNJRCwganNOdW1iZXIobV9ieXRlY29kZXMtPmlkKCkpKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZWNvZGVzSUQsIGpzTnVtYmVy
KG1fYnl0ZWNvZGVzLT5pZCgpKSk7CiAgICAgYWRkU2VxdWVuY2VQcm9wZXJ0aWVzKGV4ZWMsIHJl
c3VsdCk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHJldmlz
aW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9k
dWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDkgKzEzOCwxMCBAQCBhdXRvIEFi
c3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uOjphCiAKIHN0YXRpYyBKU1ZhbHVlIGlkZW50
aWZpZXJUb0pTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlm
aWVyKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgaWYgKGlkZW50aWZpZXIuaXNT
eW1ib2woKSkKLSAgICAgICAgcmV0dXJuIFN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0YXRp
Y19jYXN0PFN5bWJvbEltcGwmPigqaWRlbnRpZmllci5pbXBsKCkpKTsKLSAgICByZXR1cm4ganNT
dHJpbmcoJmV4ZWMtPnZtKCksIGlkZW50aWZpZXIuaW1wbCgpKTsKKyAgICAgICAgcmV0dXJuIFN5
bWJvbDo6Y3JlYXRlKHZtLCBzdGF0aWNfY2FzdDxTeW1ib2xJbXBsJj4oKmlkZW50aWZpZXIuaW1w
bCgpKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgaWRlbnRpZmllci5pbXBsKCkpOwogfQog
CiBBYnN0cmFjdE1vZHVsZVJlY29yZCogQWJzdHJhY3RNb2R1bGVSZWNvcmQ6Omhvc3RSZXNvbHZl
SW1wb3J0ZWRNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVO
YW1lKQpAQCAtNDk0LDcgKzQ5NSw4IEBAIGF1dG8gQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnJlc29s
dmVFeHBvcnQKICAgICAgICAgLy8gc2VjdGlvbiAxNS4yLjEuMTYuMywgc3RlcCA2CiAgICAgICAg
IC8vIElmIHRoZSAiZGVmYXVsdCIgbmFtZSBpcyBub3QgcmVzb2x2ZWQgaW4gdGhlIGN1cnJlbnQg
bW9kdWxlLCB3ZSBuZWVkIHRvIHRocm93IGFuIGVycm9yIGFuZCBzdG9wIHJlc29sdXRpb24gaW1t
ZWRpYXRlbHksCiAgICAgICAgIC8vIFJhdGlvbmFsZSB0byB0aGlzIGVycm9yOiBBIGRlZmF1bHQg
ZXhwb3J0IGNhbm5vdCBiZSBwcm92aWRlZCBieSBhbiBleHBvcnQgKi4KLSAgICAgICAgaWYgKHF1
ZXJ5LmV4cG9ydE5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmRlZmF1bHRLZXl3b3JkLmlt
cGwoKSkKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgaWYgKHF1ZXJ5LmV4
cG9ydE5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+ZGVmYXVsdEtleXdvcmQuaW1wbCgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIHN0ZXAgNywgSWYgZXhwb3J0U3Rh
clNldCBjb250YWlucyBtb2R1bGUsIHRoZW4gcmV0dXJuIG51bGwuCkBAIC02NjAsNiArNjYyLDcg
QEAgYXV0byBBYnN0cmFjdE1vZHVsZVJlY29yZDo6cmVzb2x2ZUV4cG9ydAogCiBzdGF0aWMgdm9p
ZCBnZXRFeHBvcnRlZE5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgQWJzdHJhY3RNb2R1bGVSZWNvcmQq
IHJvb3QsIElkZW50aWZpZXJTZXQmIGV4cG9ydGVkTmFtZXMpCiB7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBIYXNoU2V0PEFic3RyYWN0TW9kdWxlUmVjb3JkKj4gZXhwb3J0U3RhclNl
dDsKICAgICBWZWN0b3I8QWJzdHJhY3RNb2R1bGVSZWNvcmQqLCA4PiBwZW5kaW5nTW9kdWxlczsK
IApAQCAtNjczLDcgKzY3Niw3IEBAIHN0YXRpYyB2b2lkIGdldEV4cG9ydGVkTmFtZXMoRXhlY1N0
YXRlKiAKIAogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBtb2R1bGVSZWNvcmQtPmV4
cG9ydEVudHJpZXMoKSkgewogICAgICAgICAgICAgY29uc3QgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6
OkV4cG9ydEVudHJ5JiBleHBvcnRFbnRyeSA9IHBhaXIudmFsdWU7Ci0gICAgICAgICAgICBpZiAo
bW9kdWxlUmVjb3JkID09IHJvb3QgfHwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmRlZmF1bHRLZXl3
b3JkICE9IGV4cG9ydEVudHJ5LmV4cG9ydE5hbWUpCisgICAgICAgICAgICBpZiAobW9kdWxlUmVj
b3JkID09IHJvb3QgfHwgdm0ucHJvcGVydHlOYW1lcy0+ZGVmYXVsdEtleXdvcmQgIT0gZXhwb3J0
RW50cnkuZXhwb3J0TmFtZSkKICAgICAgICAgICAgICAgICBleHBvcnRlZE5hbWVzLmFkZChleHBv
cnRFbnRyeS5leHBvcnROYW1lLmltcGwoKSk7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24g
MjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTAsNyArNDEwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIC8vIDQuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNh
bGxpbmcgdGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZCBvZiBmdW5jIHByb3ZpZGluZyBhcnJh
eSBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQgYW4gZW1wdHkgYXJndW1lbnRzIGxpc3QuCiAgICAgaWYg
KCFpc0pTQXJyYXkodGhpc09iamVjdCkgfHwgY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Okhvc3QgfHwg
Y2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uICE9IGFycmF5UHJvdG9GdW5jSm9pbikgewogICAgICAg
ICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbChl
eGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzT2JqZWN0LCBleGVjLT5lbXB0
eUxpc3QoKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoZXhlYywgZnVu
Y3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc09iamVjdCwgKnZtLmVtcHR5TGlzdCkpOwog
ICAgIH0KIAogICAgIEFTU0VSVChpc0pTQXJyYXkodGhpc1ZhbHVlKSk7CkBAIC00OTAsNyArNDkw
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0
YShjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICAgICAgaWYgKGNhbGxUeXBlICE9
IENhbGxUeXBlOjpOb25lKSB7Ci0gICAgICAgICAgICBlbGVtZW50ID0gY2FsbChleGVjLCBjb252
ZXJzaW9uRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZWxlbWVudCwgZXhlYy0+ZW1wdHlM
aXN0KCkpOworICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywgY29udmVyc2lvbkZ1bmN0
aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsICp2bS5lbXB0eUxpc3QpOwogICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZCgqZXhlYywgZWxlbWVudCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDggKzc2LDkg
QEAgQ2FsbFR5cGUgQm9vbGVhbkNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YQogCiBKU09iamVjdCog
Y29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFuKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBpbW1lZGlhdGVCb29sZWFuVmFsdWUp
CiB7Ci0gICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVhbk9iamVjdDo6Y3JlYXRlKGV4ZWMt
PnZtKCksIGdsb2JhbE9iamVjdC0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKLSAgICBvYmot
PnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgaW1tZWRpYXRlQm9vbGVhblZhbHVlKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5P
YmplY3Q6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkp
OworICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZSh2bSwgaW1tZWRpYXRlQm9vbGVhblZhbHVlKTsK
ICAgICByZXR1cm4gb2JqOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWxsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FsbERhdGEuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWxsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
ZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERh
dGEsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlOjpKUyB8fCBj
YWxsVHlwZSA9PSBDYWxsVHlwZTo6SG9zdCk7Ci0gICAgcmV0dXJuIGV4ZWMtPmludGVycHJldGVy
KCktPmV4ZWN1dGVDYWxsKGV4ZWMsIGFzT2JqZWN0KGZ1bmN0aW9uT2JqZWN0KSwgY2FsbFR5cGUs
IGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MpOworICAgIHJldHVybiB2bS5pbnRlcnByZXRlci0+
ZXhlY3V0ZUNhbGwoZXhlYywgYXNPYmplY3QoZnVuY3Rpb25PYmplY3QpLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIHRoaXNWYWx1ZSwgYXJncyk7CiB9CiAKIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxs
RGF0YSYgY2FsbERhdGEsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBO
YWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24g
MjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9jcmVhdGVfdGhpcykKICAgICAgICAgSlNGdW5jdGlvbiogY29uc3RydWN0b3IgPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yQXNPYmplY3QpOwogICAgICAgICBhdXRvJiBj
YWNoZVdyaXRlQmFycmllciA9IHBjWzRdLnUuanNDZWxsOwogICAgICAgICBpZiAoIWNhY2hlV3Jp
dGVCYXJyaWVyKQotICAgICAgICAgICAgY2FjaGVXcml0ZUJhcnJpZXIuc2V0KGV4ZWMtPnZtKCks
IGV4ZWMtPmNvZGVCbG9jaygpLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICBjYWNoZVdyaXRl
QmFycmllci5zZXQodm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBjb25zdHJ1Y3Rvcik7CiAgICAgICAg
IGVsc2UgaWYgKGNhY2hlV3JpdGVCYXJyaWVyLnVudmFsaWRhdGVkR2V0KCkgIT0gSlNDZWxsOjpz
ZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkgJiYgY2FjaGVXcml0ZUJhcnJpZXIuZ2V0KCkgIT0g
Y29uc3RydWN0b3IpCiAgICAgICAgICAgICBjYWNoZVdyaXRlQmFycmllci5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKTsKIApAQCAtMjQ0
LDcgKzI0NCw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfdGhpcykKICAgICAg
ICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgc3RydWN0dXJlKTsKICAgICB9
IGVsc2UgewogICAgICAgICAvLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2
Mi82LjAvI3NlYy1vcmRpbmFyeWNyZWF0ZWZyb21jb25zdHJ1Y3RvcgotICAgICAgICBKU1ZhbHVl
IHByb3RvID0gY29uc3RydWN0b3JBc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUpOworICAgICAgICBKU1ZhbHVlIHByb3RvID0gY29uc3RydWN0b3JBc09i
amVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CiAgICAgICAgIENI
RUNLX0VYQ0VQVElPTigpOwogICAgICAgICBpZiAocHJvdG8uaXNPYmplY3QoKSkKICAgICAgICAg
ICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGFzT2JqZWN0KHByb3RvKSk7
CkBAIC05MDcsNyArOTA3LDYgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV92YWxf
d2l0aAogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gT1BfQyg0KS5qc1ZhbHVlKCk7CiAKICAgICBp
ZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBzdWJzY3JpcHQuaXNTdHJpbmcoKSkpIHsK
LSAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1
cmUgPSAqYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pOwogICAgICAgICBpZiAoSlND
ZWxsOjpjYW5Vc2VGYXN0R2V0T3duUHJvcGVydHkoc3RydWN0dXJlKSkgewogICAgICAgICAgICAg
aWYgKFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBleGlzdGluZ0F0b21pY1N0cmluZyA9IGFzU3Ry
aW5nKHN1YnNjcmlwdCktPnRvRXhpc3RpbmdBdG9taWNTdHJpbmcoZXhlYykpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZp
c2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDEwICsxNTQsMTEgQEAgaW5saW5lIHZvaWQg
dHJ5Q2FjaGVQdXRUb1Njb3BlR2xvYmFsKAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBzY29wZS0+c3RydWN0dXJlKCktPmRpZENhY2hlUHJvcGVydHlS
ZXBsYWNlbWVudChleGVjLT52bSgpLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgc2NvcGUtPnN0cnVjdHVyZSgpLT5kaWRDYWNoZVBy
b3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogCiAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBwY1s1
XS51LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgY29kZUJsb2NrLCBzY29wZS0+c3RydWN0dXJl
KCkpOworICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQodm0sIGNvZGVCbG9jaywgc2NvcGUt
PnN0cnVjdHVyZSgpKTsKICAgICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZz
ZXQoKTsKICAgICB9CiB9CkBAIC0xOTMsNyArMTk0LDcgQEAgaW5saW5lIHZvaWQgdHJ5Q2FjaGVH
ZXRGcm9tU2NvcGVHbG9iYWwoCiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNj
b3BlLT5zdHJ1Y3R1cmUodm0pOwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAg
IHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVjLT52bSgpLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7
CisgICAgICAgICAgICAgICAgcGNbNV0udS5zdHJ1Y3R1cmUuc2V0KHZtLCBjb2RlQmxvY2ssIHN0
cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRP
ZmZzZXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRj
aGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZp
c2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Ym9vbCBjaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgSlNWYWx1ZSogcmV0dXJuZWRFeGNlcHRpb24pCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgp
ID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIFJFTEVBU0VfQVNT
RVJUKHZtLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbWljU3Ry
aW5nVGFibGUoKSk7CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogcHJvZ3JhbSA9IFByb2dyYW1F
eGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsKICAgICBKU09iamVjdCogZXJyb3IgPSBw
cm9ncmFtLT5jaGVja1N5bnRheChleGVjKTsKQEAgLTk5LDcgKzEwMCw3IEBAIEpTVmFsdWUgZXZh
bHVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCAKICAgICBpZiAoIXRoaXNWYWx1ZSB8fCB0aGlz
VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgdGhpc1ZhbHVlID0gZXhlYy0+dm1F
bnRyeUdsb2JhbE9iamVjdCgpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0ganNDYXN0PEpTT2Jq
ZWN0Kj4odGhpc1ZhbHVlLnRvVGhpcyhleGVjLCBOb3RTdHJpY3RNb2RlKSk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlUHJvZ3JhbShzb3VyY2UsIGV4
ZWMsIHRoaXNPYmopOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdm0uaW50ZXJwcmV0ZXItPmV4ZWN1
dGVQcm9ncmFtKHNvdXJjZSwgZXhlYywgdGhpc09iaik7CiAKICAgICBpZiAoc2NvcGUuZXhjZXB0
aW9uKCkpIHsKICAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsK
QEAgLTE2NSw5ICsxNjYsMTAgQEAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkQW5kRXZh
bHVhdAogCiBKU0ludGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIp
CiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhl
Yy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0
cmluZ1RhYmxlKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT52bSgpLmlzQ29sbGVjdG9y
QnVzeU9uQ3VycmVudFRocmVhZCgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5hdG9taWNTdHJpbmdU
YWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1cnJlbnRUaHJlYWQoKSk7CiAKICAg
ICByZXR1cm4gbG9hZEFuZEV2YWx1YXRlTW9kdWxlKGxvY2ssIGV4ZWMsIGV4ZWMtPnZtRW50cnlH
bG9iYWxPYmplY3QoKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBtb2R1bGVOYW1lKSwg
c2NyaXB0RmV0Y2hlcik7CiB9CkBAIC0yMDMsOSArMjA1LDEwIEBAIHN0YXRpYyBKU0ludGVybmFs
UHJvbWlzZSogbG9hZE1vZHVsZShjb24KIAogSlNJbnRlcm5hbFByb21pc2UqIGxvYWRNb2R1bGUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1vZHVsZU5hbWUsIEpTVmFsdWUgc2NyaXB0
RmV0Y2hlcikKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChleGVjLT52bSgpLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCku
YXRvbWljU3RyaW5nVGFibGUoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPnZtKCkuaXND
b2xsZWN0b3JCdXN5T25DdXJyZW50VGhyZWFkKCkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21p
Y1N0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbWljU3RyaW5nVGFibGUoKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgp
KTsKIAogICAgIHJldHVybiBsb2FkTW9kdWxlKGxvY2ssIGV4ZWMsIGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBtb2R1bGVOYW1lKSwgc2Ny
aXB0RmV0Y2hlcik7CiB9CkBAIC0yMzIsMTkgKzIzNSwyMSBAQCBKU0ludGVybmFsUHJvbWlzZSog
bG9hZE1vZHVsZShFeGVjU3RhdGUqCiAKIEpTVmFsdWUgbGlua0FuZEV2YWx1YXRlTW9kdWxlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgbW9kdWxlS2V5LCBKU1ZhbHVlIHNjcmlw
dEZldGNoZXIpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgp
LmF0b21pY1N0cmluZ1RhYmxlKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT52bSgpLmlz
Q29sbGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5hdG9t
aWNTdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkp
OworICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1cnJlbnRUaHJlYWQo
KSk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+dm1FbnRyeUds
b2JhbE9iamVjdCgpOwotICAgIHJldHVybiBnbG9iYWxPYmplY3QtPm1vZHVsZUxvYWRlcigpLT5s
aW5rQW5kRXZhbHVhdGVNb2R1bGUoZXhlYywgaWRlbnRpZmllclRvSlNWYWx1ZShleGVjLT52bSgp
LCBtb2R1bGVLZXkpLCBzY3JpcHRGZXRjaGVyKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5t
b2R1bGVMb2FkZXIoKS0+bGlua0FuZEV2YWx1YXRlTW9kdWxlKGV4ZWMsIGlkZW50aWZpZXJUb0pT
VmFsdWUodm0sIG1vZHVsZUtleSksIHNjcmlwdEZldGNoZXIpOwogfQogCiBKU0ludGVybmFsUHJv
bWlzZSogaW1wb3J0TW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgbW9k
dWxlS2V5LCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgp
ID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKCFleGVjLT52bSgpLmlzQ29sbGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgpKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBS
RUxFQVNFX0FTU0VSVCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgp
LmF0b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3Rv
ckJ1c3lPbkN1cnJlbnRUaHJlYWQoKSk7CiAKICAgICByZXR1cm4gZXhlYy0+dm1FbnRyeUdsb2Jh
bE9iamVjdCgpLT5tb2R1bGVMb2FkZXIoKS0+cmVxdWVzdEltcG9ydE1vZHVsZShleGVjLCBtb2R1
bGVLZXksIHNjcmlwdEZldGNoZXIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MSw4ICs1MSw5IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBK
U1YKIAogSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29uc3Ry
dWN0b3JPYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0
RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncywgSlNWYWx1ZSBuZXdUYXJn
ZXQpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBBU1NFUlQoY29uc3RydWN0VHlw
ZSA9PSBDb25zdHJ1Y3RUeXBlOjpKUyB8fCBjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGU6
Okhvc3QpOwotICAgIHJldHVybiBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlQ29uc3RydWN0
KGV4ZWMsIGFzT2JqZWN0KGNvbnN0cnVjdG9yT2JqZWN0KSwgY29uc3RydWN0VHlwZSwgY29uc3Ry
dWN0RGF0YSwgYXJncywgbmV3VGFyZ2V0KTsKKyAgICByZXR1cm4gdm0uaW50ZXJwcmV0ZXItPmV4
ZWN1dGVDb25zdHJ1Y3QoZXhlYywgYXNPYmplY3QoY29uc3RydWN0b3JPYmplY3QpLCBjb25zdHJ1
Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzLCBuZXdUYXJnZXQpOwogfQogCiBKU09iamVjdCog
cHJvZmlsZWRDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBQcm9maWxpbmdSZWFzb24gcmVhc29u
LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUs
IGNvbnN0IENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Ms
IEpTVmFsdWUgbmV3VGFyZ2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGF0ZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTY4LDcgKzExNjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJ0b0lTT1N0cmluZyBpcyBu
b3QgYSBmdW5jdGlvbiIpKTsKIAotICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBhc09i
amVjdCh0b0lTT1ZhbHVlKSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmplY3QsIGV4ZWMtPmVtcHR5
TGlzdCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgYXNPYmplY3QodG9JU09W
YWx1ZSksIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCAqdm0uZW1wdHlMaXN0KTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpZiAocmVz
dWx0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNj
b3BlLCBBU0NJSUxpdGVyYWwoInRvSVNPU3RyaW5nIGRpZCBub3QgcmV0dXJuIGEgcHJpbWl0aXZl
IHZhbHVlIikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJn
dW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGly
ZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw4ICs3NCwx
MCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdWludDMyX3QgbGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKICAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWShtX21hcHBlZEFyZ3VtZW50cykpCi0g
ICAgICAgICAgICByZXR1cm4gZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
LnRvVUludDMyKGV4ZWMpOworICAgICAgICBpZiAoVU5MSUtFTFkobV9tYXBwZWRBcmd1bWVudHMp
KSB7CisgICAgICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICAgICAgcmV0dXJu
IGdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBtX2xlbmd0aDsKICAgICB9CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0RXZhbEV4ZWN1dGFi
bGUuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcg
QEAgRGlyZWN0RXZhbEV4ZWN1dGFibGUqIERpcmVjdEV2YWxFeGVjdXRhYgogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKLSAgICBhdXRvKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8RGlyZWN0RXZhbEV4ZWN1dGFibGU+KCpleGVjLT5oZWFwKCkpKSBEaXJlY3RFdmFs
RXhlY3V0YWJsZShleGVjLCBzb3VyY2UsIGlzSW5TdHJpY3RDb250ZXh0LCBkZXJpdmVkQ29udGV4
dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIGV2YWxDb250ZXh0VHlwZSk7CisgICAgYXV0
byogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERpcmVjdEV2YWxFeGVj
dXRhYmxlPih2bS5oZWFwKSkgRGlyZWN0RXZhbEV4ZWN1dGFibGUoZXhlYywgc291cmNlLCBpc0lu
U3RyaWN0Q29udGV4dCwgZGVyaXZlZENvbnRleHRUeXBlLCBpc0Fycm93RnVuY3Rpb25Db250ZXh0
LCBldmFsQ29udGV4dFR5cGUpOwogICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsK
IAogICAgIFBhcnNlckVycm9yIGVycm9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NSw3ICs4NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQ
cm90b0YKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsK
IAogICAgIC8vIDMuIExldCBuYW1lIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRd
XSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50ICJuYW1lIi4KLSAgICBKU1ZhbHVl
IG5hbWUgPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUpOwor
ICAgIEpTVmFsdWUgbmFtZSA9IHRoaXNPYmotPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
YW1lKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
IAogICAgIC8vIDQuIElmIG5hbWUgaXMgdW5kZWZpbmVkLCB0aGVuIGxldCBuYW1lIGJlICJFcnJv
ciI7IGVsc2UgbGV0IG5hbWUgYmUgVG9TdHJpbmcobmFtZSkuCkBAIC05OCw3ICs5OCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0YKICAgICB9CiAKICAgICAvLyA1
LiBMZXQgbXNnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBt
ZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50ICJtZXNzYWdlIi4KLSAgICBKU1ZhbHVlIG1lc3NhZ2Ug
PSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm1lc3NhZ2UpOworICAg
IEpTVmFsdWUgbWVzc2FnZSA9IHRoaXNPYmotPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5t
ZXNzYWdlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKIAogICAgIC8vIChzaWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb25IZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgzLDcgKzgzLDggQEAgSlNPYmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihF
eGVjUwogSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAgICBpZiAoaWRlbnQuaXNQcml2YXRl
TmFtZSgpKSB7Ci0gICAgICAgIFN0cmluZyBtZXNzYWdlKG1ha2VTdHJpbmcoIkNhbid0IGZpbmQg
cHJpdmF0ZSB2YXJpYWJsZTogQCIsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sb29rVXBQdWJsaWNO
YW1lKGlkZW50KS5zdHJpbmcoKSkpOworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
ICAgICBTdHJpbmcgbWVzc2FnZShtYWtlU3RyaW5nKCJDYW4ndCBmaW5kIHByaXZhdGUgdmFyaWFi
bGU6IEAiLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQdWJsaWNOYW1lKGlkZW50KS5zdHJpbmco
KSkpOwogICAgICAgICByZXR1cm4gY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgbWVzc2FnZSk7
CiAgICAgfQogICAgIFN0cmluZyBtZXNzYWdlKG1ha2VTdHJpbmcoIkNhbid0IGZpbmQgdmFyaWFi
bGU6ICIsIGlkZW50LnN0cmluZygpKSk7CkBAIC05NywxMCArOTgsMTEgQEAgSlNTdHJpbmcqIGVy
cm9yRGVzY3JpcHRpb25Gb3JWYWx1ZShFeGVjUwogICAgIGlmICh2LmlzU3ltYm9sKCkpCiAgICAg
ICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgYXNTeW1ib2wodiktPmRlc2NyaXB0
aXZlU3RyaW5nKCkpOwogICAgIGlmICh2LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBhc09iamVjdCh2KTsKLSAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0Q2FsbERhdGEob2JqZWN0LCBjYWxsRGF0YSkgIT0gQ2FsbFR5cGU6Ok5vbmUpCi0gICAg
ICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKTsK
KyAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShvYmplY3Qs
IGNhbGxEYXRhKSAhPSBDYWxsVHlwZTo6Tm9uZSkKKyAgICAgICAgICAgIHJldHVybiB2bS5zbWFs
bFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKTsKICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMs
IEpTT2JqZWN0OjpjYWxjdWxhdGVkQ2xhc3NOYW1lKG9iamVjdCkpOwogICAgIH0KICAgICByZXR1
cm4gdi50b1N0cmluZyhleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMjE4MDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw4IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RGdW5j
dGlvblNraXBwaW5nRXZhbEUKIC8vIEVDTUEgMTUuMy4yIFRoZSBGdW5jdGlvbiBDb25zdHJ1Y3Rv
cgogSlNPYmplY3QqIGNvbnN0cnVjdEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJncywgRnVuY3Rpb25Db25zdHJ1
Y3Rpb25Nb2RlIGZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZSwgSlNWYWx1ZSBuZXdUYXJnZXQpCiB7
Ci0gICAgcmV0dXJuIGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgYXJncywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmFub255bW91cywgZXhlYy0+Y2FsbGVyU291cmNlT3JpZ2lu
KCksIFN0cmluZygpLCBUZXh0UG9zaXRpb24oKSwgZnVuY3Rpb25Db25zdHJ1Y3Rpb25Nb2RlLCBu
ZXdUYXJnZXQpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgcmV0dXJuIGNvbnN0cnVj
dEZ1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgYXJncywgdm0ucHJvcGVydHlOYW1lcy0+YW5v
bnltb3VzLCBleGVjLT5jYWxsZXJTb3VyY2VPcmlnaW4oKSwgU3RyaW5nKCksIFRleHRQb3NpdGlv
bigpLCBmdW5jdGlvbkNvbnN0cnVjdGlvbk1vZGUsIG5ld1RhcmdldCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0Fy
Z3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDIsMTAgKzEwMiwxMSBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OmdldE93blByb3BlCiAgICAgfQogCiAgICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcygpICYmICF0aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpKSB7Ci0gICAgICAgIGFy
cmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKLSAgICAgICAgYXJyYXkuYWRk
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZWUpOworICAgICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgICAgICBhcnJheS5hZGQodm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKKyAgICAg
ICAgYXJyYXkuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSk7CiAgICAgICAgIGlmIChhcnJh
eS5pbmNsdWRlU3ltYm9sUHJvcGVydGllcygpKQotICAgICAgICAgICAgYXJyYXkuYWRkKGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5pdGVyYXRvclN5bWJvbCk7CisgICAgICAgICAgICBhcnJheS5hZGQo
dm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wpOwogICAgIH0KICAgICBCYXNlOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllcklubGluZXMu
aAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRl
bnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsOCBAQCBpbmxpbmUg
UmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChFCiAjaWZuZGVmIE5ERUJVRwogICAgIGNo
ZWNrQ3VycmVudEF0b21pY1N0cmluZ1RhYmxlKGV4ZWMpOwogI2VuZGlmCi0gICAgcmV0dXJuICpB
dG9taWNTdHJpbmdJbXBsOjphZGRXaXRoU3RyaW5nVGFibGVQcm92aWRlcigqZXhlYywgcik7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICByZXR1cm4gKkF0b21pY1N0cmluZ0ltcGw6OmFk
ZFdpdGhTdHJpbmdUYWJsZVByb3ZpZGVyKHZtLCByKTsKIH0KIGlubGluZSBSZWY8U3RyaW5nSW1w
bD4gSWRlbnRpZmllcjo6YWRkKFZNKiB2bSwgU3RyaW5nSW1wbCogcikKIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1
dGFibGUuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyAr
NDYsNyBAQCBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlKiBJbmRpcmVjdEV2YWxFeGVjCiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIAotICAgIGF1dG8qIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxJbmRpcmVjdEV2YWxFeGVjdXRhYmxlPigqZXhlYy0+aGVhcCgpKSkgSW5k
aXJlY3RFdmFsRXhlY3V0YWJsZShleGVjLCBzb3VyY2UsIGlzSW5TdHJpY3RDb250ZXh0LCBkZXJp
dmVkQ29udGV4dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIGV2YWxDb250ZXh0VHlwZSk7
CisgICAgYXV0byogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEluZGly
ZWN0RXZhbEV4ZWN1dGFibGU+KHZtLmhlYXApKSBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlKGV4ZWMs
IHNvdXJjZSwgaXNJblN0cmljdENvbnRleHQsIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNBcnJvd0Z1
bmN0aW9uQ29udGV4dCwgZXZhbENvbnRleHRUeXBlKTsKICAgICBleGVjdXRhYmxlLT5maW5pc2hD
cmVhdGlvbih2bSk7CiAKICAgICBQYXJzZXJFcnJvciBlcnJvcjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lv
biAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCB2b2lkIEludGVybmFsRnVu
Y3Rpb246OmZpbmlzaENyZWF0aW9uKFZNCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0gICAgQVNTRVJUKG1ldGhvZFRh
YmxlKCktPmdldENhbGxEYXRhICE9IEludGVybmFsRnVuY3Rpb246OmluZm8oKS0+bWV0aG9kVGFi
bGUuZ2V0Q2FsbERhdGEpOworICAgIEFTU0VSVChtZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRh
ICE9IEludGVybmFsRnVuY3Rpb246OmluZm8oKS0+bWV0aG9kVGFibGUuZ2V0Q2FsbERhdGEpOwog
ICAgIEpTU3RyaW5nKiBuYW1lU3RyaW5nID0ganNTdHJpbmcoJnZtLCBuYW1lKTsKICAgICBtX29y
aWdpbmFsTmFtZS5zZXQodm0sIHRoaXMsIG5hbWVTdHJpbmcpOwogICAgIGlmIChuYW1lVmlzaWJp
bGl0eSA9PSBOYW1lVmlzaWJpbGl0eTo6VmlzaWJsZSkKQEAgLTExMiwxMiArMTEyLDEyIEBAIFN0
cnVjdHVyZSogSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2wKICAgICAgICAgICAgIHJldHVy
biBzdHJ1Y3R1cmU7CiAKICAgICAgICAgLy8gTm90ZSwgUmVmbGVjdC5jb25zdHJ1Y3QgbWlnaHQg
Y2F1c2UgdGhlIHByb2ZpbGUgdG8gY2h1cm4gYnV0IHdlIGRvbid0IGNhcmUuCi0gICAgICAgIEpT
VmFsdWUgcHJvdG90eXBlVmFsdWUgPSBuZXdUYXJnZXQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5wcm90b3R5cGUpOworICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlID0gbmV3
VGFyZ2V0LmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgaWYgKEpTT2JqZWN0
KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHByb3RvdHlwZVZhbHVl
KSkKICAgICAgICAgICAgIHJldHVybiB0YXJnZXRGdW5jdGlvbi0+cmFyZURhdGEodm0pLT5jcmVh
dGVJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKHZtLCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIGJhc2VDbGFzcyk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSA9IG5ld1RhcmdldC5nZXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnByb3RvdHlwZSk7CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlVmFsdWUg
PSBuZXdUYXJnZXQuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICBpZiAoSlNP
YmplY3QqIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgcHJvdG90eXBl
VmFsdWUpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIG9ubHkgaGFwcGVucyBpZiBzb21lb25lIFJl
ZmxlY3QuY29uc3RydWN0cyBvdXIgYnVpbHRpbiBjb25zdHJ1Y3RvciB3aXRoIGFub3RoZXIgYnVp
bHRpbiBjb25zdHJ1Y3RvciBhcyB0aGUgbmV3LnRhcmdldC4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQz
LDggKzI0Myw5IEBAIGJvb2wgSlNBcnJheTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QKIAog
Ym9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQXJyYXkqPihvYmplY3QpOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoKSB7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSB0aGlz
T2JqZWN0LT5pc0xlbmd0aFdyaXRhYmxlKCkgPyBEb250RGVsZXRlIHwgRG9udEVudW0gOiBEb250
RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seTsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlz
T2JqZWN0LCBhdHRyaWJ1dGVzLCBqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI2Niw3ICsyNjcsNyBAQCBib29sIEpTQXJyYXk6OnB1dChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0CiAgICAgICAgIHJldHVybiBvcmRpbmFyeVNldFNsb3coZXhl
YywgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xv
dC5pc1N0cmljdE1vZGUoKSk7CiAgICAgfQogCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc0xlbmd0
aFdyaXRhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHVuc2lnbmVk
IG5ld0xlbmd0aCA9IHZhbHVlLnRvVUludDMyKGV4ZWMpOwpAQCAtMjg1LDkgKzI4NiwxMCBAQCBi
b29sIEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0CiAKIGJvb2wgSlNBcnJheTo6
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0FycmF5
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKIAotICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUpOwpAQCAtMzAyLDEwICszMDQsMTEgQEAgc3RhdGljIGludCBjb21wYXJlS2V5
c0ZvclFTb3J0KGNvbnN0IHZvaQogCiB2b2lkIEpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+
KG9iamVjdCk7CiAKICAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCi0g
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwor
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwogCiAg
ICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KQEAgLTE0MzEsNyArMTQzNCw4IEBAIGJvb2wgSlNB
cnJheTo6aXNJdGVyYXRvclByb3RvY29sRmFzdEFuZE4KICAgICBpZiAoc3RydWN0dXJlLT5zdG9y
ZWRQcm90b3R5cGUoKSAhPSBnbG9iYWxPYmplY3QtPmFycmF5UHJvdG90eXBlKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChnZXREaXJlY3RPZmZzZXQoZ2xvYmFsT2JqZWN0LT52
bSgpLCBnbG9iYWxPYmplY3QtPnZtKCkucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wpICE9
IGludmFsaWRPZmZzZXQpCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGlm
IChnZXREaXJlY3RPZmZzZXQodm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sKSAh
PSBpbnZhbGlkT2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9u
IDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29y
a2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2hpZnRD
b3VudEZvclNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWdu
ZWQgY291bnQpCiAgICAgewotICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3Jh
Z2UoZXhlYy0+dm0oKSwgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVj
LT52bSgpKSk7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIHJldHVybiBz
aGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSh2bSwgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFy
cmF5U3RvcmFnZSh2bSkpOwogICAgIH0KICAgICBib29sIHNoaWZ0Q291bnRGb3JTcGxpY2UoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCYgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJ
KHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pT
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTksMTQgKzI5OSwxNSBAQCB2b2lkIEpTVmFs
dWU6OmR1bXBGb3JCYWNrdHJhY2UoUHJpbnRTdHJlCiAgICAgZWxzZSBpZiAoaXNEb3VibGUoKSkK
ICAgICAgICAgb3V0LnByaW50ZigiJWxmIiwgYXNEb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoaXND
ZWxsKCkpIHsKLSAgICAgICAgaWYgKGFzQ2VsbCgpLT5pbmhlcml0cygqYXNDZWxsKCktPnZtKCks
IEpTU3RyaW5nOjppbmZvKCkpKSB7CisgICAgICAgIFZNJiB2bSA9ICphc0NlbGwoKS0+dm0oKTsK
KyAgICAgICAgaWYgKGFzQ2VsbCgpLT5pbmhlcml0cyh2bSwgSlNTdHJpbmc6OmluZm8oKSkpIHsK
ICAgICAgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhhc0NlbGwoKSk7CiAgICAg
ICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBpbXBsID0gc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwo
KTsKICAgICAgICAgICAgIGlmIChpbXBsKQogICAgICAgICAgICAgICAgIG91dC5wcmludCgiXCIi
LCBpbXBsLCAiXCIiKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIih1bnJlc29sdmVkIHN0cmluZykiKTsKLSAgICAgICAgfSBlbHNlIGlmIChhc0NlbGwoKS0+
aW5oZXJpdHMoKmFzQ2VsbCgpLT52bSgpLCBTdHJ1Y3R1cmU6OmluZm8oKSkpIHsKKyAgICAgICAg
fSBlbHNlIGlmIChhc0NlbGwoKS0+aW5oZXJpdHModm0sIFN0cnVjdHVyZTo6aW5mbygpKSkgewog
ICAgICAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVbICIsIGFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAg
ICAgIG91dC5wcmludCgiIElEOiAiLCBhc0NlbGwoKS0+c3RydWN0dXJlSUQoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAkocmV2aXNpb24g
MjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNSwxMiArMTA1LDEzIEBAIFJlZlB0cjxEYXRhVmlldz4gSlNE
YXRhVmlldzo6dW5zaGFyZWRUeXAKIGJvb2wgSlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90
KAogICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3Kj4ob2Jq
ZWN0KTsKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
TGVuZ3RoKSB7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5ieXRl
TGVuZ3RoKSB7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgRG9udEVudW0gfCBS
ZWFkT25seSwganNOdW1iZXIodGhpc09iamVjdC0+bV9sZW5ndGgpKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmJ5dGVPZmZzZXQpIHsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFt
ZXMtPmJ5dGVPZmZzZXQpIHsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBEb250
RW51bSB8IFJlYWRPbmx5LCBqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTU2LDkgKzE1NywxMCBAQCBib29sIEpTRGF0
YVZpZXc6OmRlZmluZU93blByb3BlcnR5KAogYm9vbCBKU0RhdGFWaWV3OjpkZWxldGVQcm9wZXJ0
eSgKICAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTRGF0YVZpZXcqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KGNlbGwpOwotICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKLSAgICAgICAgfHwgcHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KQorICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9w
ZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZU9mZnNldCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSk7CkBAIC0xNjcsMTEgKzE2OSwxMiBAQCBib29sIEpTRGF0YVZpZXc6
OmRlbGV0ZVByb3BlcnR5KAogdm9pZCBKU0RhdGFWaWV3OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoCiAgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3
Kj4ob2JqZWN0KTsKICAgICAKICAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
KCkpIHsKLSAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0
KTsKLSAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKTsK
KyAgICAgICAgYXJyYXkuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVPZmZzZXQpOworICAgICAg
ICBhcnJheS5hZGQodm0ucHJvcGVydHlOYW1lcy0+Ynl0ZUxlbmd0aCk7CiAgICAgfQogICAgIAog
ICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBh
cnJheSwgbW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NSw3ICszNzUsNyBAQCBi
b29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdChKU09iCiAgICAgICAgIHNsb3Quc2V0
VmFsdWUodGhpc09iamVjdCwgYXR0cmlidXRlcywgdGhpc09iamVjdC0+Z2V0RGlyZWN0KG9mZnNl
dCksIG9mZnNldCk7CiAgICAgfQogCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT5hcmd1bWVudHMpIHsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5qc0V4ZWN1
dGFibGUoKS0+aGFzQ2FsbGVyQW5kQXJndW1lbnRzUHJvcGVydGllcygpKQogICAgICAgICAgICAg
cmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwogICAgICAgICAKQEAgLTM4Myw3ICszODMsNyBAQCBib29sIEpTRnVuY3Rp
b246OmdldE93blByb3BlcnR5U2xvdChKU09iCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcikg
eworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVyKSB7CiAg
ICAgICAgIGlmICghdGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPmhhc0NhbGxlckFuZEFyZ3Vt
ZW50c1Byb3BlcnRpZXMoKSkKICAgICAgICAgICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0
eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIApAQCAtNDg3LDEw
ICs0ODcsMTAgQEAgYm9vbCBKU0Z1bmN0aW9uOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIAogICAg
ICAgICAvLyBGb3Igbm9uLWhvc3QgZnVuY3Rpb25zLCBkb24ndCBsZXQgdGhlc2UgcHJvcGVydGll
cyBieSBkZWxldGVkIC0gZXhjZXB0IGJ5IERlZmluZU93blByb3BlcnR5LgogICAgICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmNhbGxlciB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3Vt
ZW50cykKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxs
ZXIgfHwgcHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykKICAgICAg
ICAgICAgIHJldHVybiAhZXhlY3V0YWJsZS0+aGFzQ2FsbGVyQW5kQXJndW1lbnRzUHJvcGVydGll
cygpOwogCi0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LnByb3RvdHlwZSAmJiAhZXhlY3V0YWJsZS0+aXNBcnJvd0Z1bmN0aW9uKCkpCisgICAgICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlICYmICFleGVjdXRh
YmxlLT5pc0Fycm93RnVuY3Rpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICB0aGlzT2JqZWN0LT5yZWlmeUxhenlQcm9wZXJ0eUlmTmVlZGVkKHZtLCBleGVjLCBwcm9w
ZXJ0eU5hbWUpOwpAQCAtNjQ5LDggKzY0OSw4IEBAIHZvaWQgSlNGdW5jdGlvbjo6cmVpZnlOYW1l
KFZNJiB2bSwgRXhlY1MKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3Nl
Yy1leHBvcnRzLXJ1bnRpbWUtc2VtYW50aWNzLWV2YWx1YXRpb24KICAgICAvLyBXaGVuIHRoZSBp
ZGVudCBpcyAiKmRlZmF1bHQqIiwgd2UgbmVlZCB0byBzZXQgImRlZmF1bHQiIGZvciB0aGUgZWNt
YSBuYW1lLgogICAgIC8vIFRoaXMgIipkZWZhdWx0KiIgbmFtZSBpcyBuZXZlciBzaG93biB0byB1
c2Vycy4KLSAgICBpZiAoZWNtYU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1aWx0aW5O
YW1lcygpLnN0YXJEZWZhdWx0UHJpdmF0ZU5hbWUoKSkKLSAgICAgICAgbmFtZSA9IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5kZWZhdWx0S2V5d29yZC5zdHJpbmcoKTsKKyAgICBpZiAoZWNtYU5hbWUg
PT0gdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc3RhckRlZmF1bHRQcml2YXRlTmFt
ZSgpKQorICAgICAgICBuYW1lID0gdm0ucHJvcGVydHlOYW1lcy0+ZGVmYXVsdEtleXdvcmQuc3Ry
aW5nKCk7CiAgICAgZWxzZQogICAgICAgICBuYW1lID0gZWNtYU5hbWUuc3RyaW5nKCk7CiAgICAg
cmVpZnlOYW1lKHZtLCBleGVjLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJldmlz
aW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDcgKzUwMiw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0UKICAgICBpZiAoIWV2YWwpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGUoZXZhbCwgZXhlYywg
Y2FsbGVlR2xvYmFsT2JqZWN0LT5nbG9iYWxUaGlzKCksIGNhbGxlZUdsb2JhbE9iamVjdC0+Z2xv
YmFsU2NvcGUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodm0uaW50ZXJwcmV0ZXIt
PmV4ZWN1dGUoZXZhbCwgZXhlYywgY2FsbGVlR2xvYmFsT2JqZWN0LT5nbG9iYWxUaGlzKCksIGNh
bGxlZUdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGUoKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsUHJvbWlzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbFByb21pc2Uu
Y3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ludGVybmFsUHJvbWlzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDggQEAgSlNJ
bnRlcm5hbFByb21pc2U6OkpTSW50ZXJuYWxQcm9taXNlKFZNJgogCiBKU0ludGVybmFsUHJvbWlz
ZSogSlNJbnRlcm5hbFByb21pc2U6OnRoZW4oRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBv
bkZ1bGZpbGxlZCwgSlNGdW5jdGlvbiogb25SZWplY3RlZCkKIHsKLSAgICBKU09iamVjdCogZnVu
Y3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPihnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ1aWx0aW5OYW1lcygpLnRoZW5QdWJsaWNOYW1lKCkpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGdldChleGVj
LCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS50aGVuUHVibGljTmFtZSgpKSk7CiAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENh
bGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxU
eXBlOjpOb25lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNh
bEVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw4IEBAIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnB1
dChKU0NlbGwqIGMKIAogYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6ZGVsZXRlUHJvcGVydHko
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1l
bnRzKQorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2
bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eShjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAkocmV2aXNpb24gMjIx
ODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw3ICs1OSw4IEBAIGJvb2wgSlNNYXA6OmlzSXRlcmF0b3JQcm90b2NvbEZh
c3RBbmROb24KICAgICBpZiAoc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSAhPSBnbG9iYWxP
YmplY3QtPm1hcFByb3RvdHlwZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAo
Z2V0RGlyZWN0T2Zmc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT52bSgpLnBy
b3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sKSAhPSBpbnZhbGlkT2Zmc2V0KQorICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBpZiAoZ2V0RGlyZWN0T2Zmc2V0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCkgIT0gaW52YWxpZE9mZnNldCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCShyZXZpc2lvbiAyMjE4MDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDE0ICs1NiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBl
KiBwcmV2ID0gbV9pdGVyLmdldCgpOwogICAgICAgICBpZiAoIXByZXYpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgSGFz
aE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IG1faXRlci0+bmV4dCgpOwogICAgICAgICB3aGlsZSAo
YnVja2V0ICYmIGJ1Y2tldC0+ZGVsZXRlZCgpKQogICAgICAgICAgICAgYnVja2V0ID0gYnVja2V0
LT5uZXh0KCk7CiAgICAgICAgIGlmICghYnVja2V0KSB7Ci0gICAgICAgICAgICBzZXRJdGVyYXRv
cihleGVjLT52bSgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldEl0ZXJhdG9yKHZtLCBudWxs
cHRyKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9Ci0gICAgICAgIHNl
dEl0ZXJhdG9yKGV4ZWMtPnZtKCksIGJ1Y2tldCk7IC8vIFdlIGtlZXAgbV9pdGVyIG9uIHRoZSBs
YXN0IHZhbHVlIHNpbmNlIHRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpbiB0aGlzIGZ1bmN0aW9uIGlz
IGNhbGwgbmV4dCgpLgorICAgICAgICBzZXRJdGVyYXRvcih2bSwgYnVja2V0KTsgLy8gV2Uga2Vl
cCBtX2l0ZXIgb24gdGhlIGxhc3QgdmFsdWUgc2luY2UgdGhlIGZpcnN0IHRoaW5nIHdlIGRvIGlu
IHRoaXMgZnVuY3Rpb24gaXMgY2FsbCBuZXh0KCkuCiAgICAgICAgIHJldHVybiBidWNrZXQ7CiAg
ICAgfQogICAgIGJvb2wgbmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUmIHZhbHVlKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZp
cm9ubWVudC5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsOSAr
MTAyLDEwIEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZXgKIHsKICAg
ICBKU01vZHVsZUVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlRW52aXJv
bm1lbnQqPihjZWxsKTsKICAgICBpZiAocHJvcGVydHlOYW1lc0FycmF5LmluY2x1ZGVTdHJpbmdQ
cm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBwYWlyIDogdGhpc09iamVjdC0+bW9kdWxlUmVjb3JkKCktPmltcG9ydEVu
dHJpZXMoKSkgewogICAgICAgICAgICAgY29uc3QgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OkltcG9y
dEVudHJ5JiBpbXBvcnRFbnRyeSA9IHBhaXIudmFsdWU7Ci0gICAgICAgICAgICBpZiAoIWltcG9y
dEVudHJ5LmlzTmFtZXNwYWNlKGV4ZWMtPnZtKCkpKQorICAgICAgICAgICAgaWYgKCFpbXBvcnRF
bnRyeS5pc05hbWVzcGFjZSh2bSkpCiAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lc0FycmF5
LmFkZChpbXBvcnRFbnRyeS5sb2NhbE5hbWUpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAkocmV2
aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxNSArNzIsMTYgQEAgdm9pZCBKU01vZHVs
ZUxvYWRlcjo6ZmluaXNoQ3JlYXRpb24oRXhlYwogCiBzdGF0aWMgU3RyaW5nIHByaW50YWJsZU1v
ZHVsZUtleShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgaWYgKGtleS5pc1N0cmluZygpIHx8IGtleS5pc1N5bWJvbCgpKQogICAg
ICAgICByZXR1cm4ga2V5LnRvUHJvcGVydHlLZXkoZXhlYykuaW1wbCgpOwotICAgIHJldHVybiBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuZW1wdHlJZGVudGlmaWVyLmltcGwoKTsKKyAgICByZXR1cm4g
dm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyLmltcGwoKTsKIH0KIAogSlNWYWx1ZSBK
U01vZHVsZUxvYWRlcjo6cHJvdmlkZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5LCBTdGF0
dXMgc3RhdHVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpTT2JqZWN0Kj4o
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5wcm92aWRlUHVi
bGljTmFtZSgpKSk7CisgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpTT2JqZWN0Kj4o
Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnByb3ZpZGVQdWJsaWNO
YW1lKCkpKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IEpTQzo6Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBBU1NFUlQoY2FsbFR5
cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwpAQCAtOTYsNyArOTcsOCBAQCBKU1ZhbHVlIEpTTW9kdWxl
TG9hZGVyOjpwcm92aWRlKEV4ZWNTdGF0CiAKIEpTSW50ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxv
YWRlcjo6bG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBtb2R1
bGVOYW1lLCBKU1ZhbHVlIHJlZmVycmVyLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7Ci0gICAg
SlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5sb2FkQW5kRXZhbHVhdGVNb2R1bGVQdWJsaWNO
YW1lKCkpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTT2JqZWN0KiBmdW5jdGlv
biA9IGpzQ2FzdDxKU09iamVjdCo+KGdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGlu
TmFtZXMoKS5sb2FkQW5kRXZhbHVhdGVNb2R1bGVQdWJsaWNOYW1lKCkpKTsKICAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoZnVu
Y3Rpb24sIGNhbGxEYXRhKTsKICAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUp
OwpAQCAtMTExLDcgKzExMyw4IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxvYWRlcjo6
bG9hZEEKIAogSlNJbnRlcm5hbFByb21pc2UqIEpTTW9kdWxlTG9hZGVyOjpsb2FkTW9kdWxlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBtb2R1bGVOYW1lLCBKU1ZhbHVlIHJlZmVycmVyLCBKU1Zh
bHVlIHNjcmlwdEZldGNoZXIpCiB7Ci0gICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpT
T2JqZWN0Kj4oZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5s
b2FkTW9kdWxlUHVibGljTmFtZSgpKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBK
U09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPihnZXQoZXhlYywgdm0ucHJvcGVy
dHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubG9hZE1vZHVsZVB1YmxpY05hbWUoKSkpOwogICAgIENh
bGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0
YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6
Tm9uZSk7CkBAIC0xMjYsNyArMTI5LDggQEAgSlNJbnRlcm5hbFByb21pc2UqIEpTTW9kdWxlTG9h
ZGVyOjpsb2FkTQogCiBKU1ZhbHVlIEpTTW9kdWxlTG9hZGVyOjpsaW5rQW5kRXZhbHVhdGVNb2R1
bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG1vZHVsZUtleSwgSlNWYWx1ZSBzY3JpcHRGZXRj
aGVyKQogewotICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGdldChl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkubGlua0FuZEV2YWx1YXRl
TW9kdWxlUHVibGljTmFtZSgpKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU09i
amVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPihnZXQoZXhlYywgdm0ucHJvcGVydHlO
YW1lcy0+YnVpbHRpbk5hbWVzKCkubGlua0FuZEV2YWx1YXRlTW9kdWxlUHVibGljTmFtZSgpKSk7
CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6Omdl
dENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgQVNTRVJUKGNhbGxUeXBlICE9IENh
bGxUeXBlOjpOb25lKTsKQEAgLTE0MCw3ICsxNDQsOCBAQCBKU1ZhbHVlIEpTTW9kdWxlTG9hZGVy
OjpsaW5rQW5kRXZhbHVhdGVNCiAKIEpTSW50ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxvYWRlcjo6
cmVxdWVzdEltcG9ydE1vZHVsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG1v
ZHVsZUtleSwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQogewotICAgIGF1dG8qIGZ1bmN0aW9uID0g
anNDYXN0PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWlsdGlu
TmFtZXMoKS5yZXF1ZXN0SW1wb3J0TW9kdWxlUHVibGljTmFtZSgpKSk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGdldChl
eGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5yZXF1ZXN0SW1wb3J0TW9kdWxl
UHVibGljTmFtZSgpKSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgYXV0byBjYWxsVHlw
ZSA9IEpTQzo6Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBBU1NFUlQoY2Fs
bFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCShyZXZpc2lvbiAy
MjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFj
ZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMSArMzcsMTIgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQWJz
dHJhY3RNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCwgVmVjdG9yPHN0ZDo6cGFpcjxJZGVudGlm
aWVyLCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbj4+JiYgcmVzb2x1dGlvbnMpCiAg
ICAgeworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBKU01vZHVsZU5hbWVz
cGFjZU9iamVjdCogb2JqZWN0ID0KICAgICAgICAgICAgIG5ldyAoCiAgICAgICAgICAgICAgICAg
Tm90TnVsbCwKLSAgICAgICAgICAgICAgICBhbGxvY2F0ZUNlbGw8SlNNb2R1bGVOYW1lc3BhY2VP
YmplY3Q+KGV4ZWMtPnZtKCkuaGVhcCwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmFsbG9jYXRp
b25TaXplKHJlc29sdXRpb25zLnNpemUoKSkpKQotICAgICAgICAgICAgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBhbGxvY2F0
ZUNlbGw8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+KHZtLmhlYXAsIEpTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0OjphbGxvY2F0aW9uU2l6ZShyZXNvbHV0aW9ucy5zaXplKCkpKSkKKyAgICAgICAgICAg
IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpOwogICAgICAgICBvYmplY3Qt
PmZpbmlzaENyZWF0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgbW9kdWxlUmVjb3JkLCBXVEZNb3Zl
KHJlc29sdXRpb25zKSk7CiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2
aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVS
ZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsOSArMjA1LDEwIEBAIEpTVmFsdWUgSlNN
b2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGEKIHsKICAgICBpZiAoIW1fbW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBt
X21vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmdldCgpOwogICAgIG1fbW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGUuY2xlYXIoKTsKLSAgICByZXR1cm4gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZU1v
ZHVsZVByb2dyYW0oZXhlY3V0YWJsZSwgZXhlYywgbV9tb2R1bGVFbnZpcm9ubWVudC5nZXQoKSk7
CisgICAgcmV0dXJuIHZtLmludGVycHJldGVyLT5leGVjdXRlTW9kdWxlUHJvZ3JhbShleGVjdXRh
YmxlLCBleGVjLCBtX21vZHVsZUVudmlyb25tZW50LmdldCgpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0
LmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OSw3ICsyNTksNyBAQCBTdHJpbmdp
Zmllcjo6U3RyaW5naWZpZXIoRXhlY1N0YXRlKiBleGVjCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBtX3JlcGxhY2VyQ2FsbFR5cGUgPSBtX3JlcGxhY2VyLmFzT2JqZWN0KCktPm1ldGhv
ZFRhYmxlKCktPmdldENhbGxEYXRhKG1fcmVwbGFjZXIuYXNPYmplY3QoKS5nZXQoKSwgbV9yZXBs
YWNlckNhbGxEYXRhKTsKKyAgICBtX3JlcGxhY2VyQ2FsbFR5cGUgPSBtX3JlcGxhY2VyLmFzT2Jq
ZWN0KCktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEobV9yZXBsYWNlci5hc09iamVjdCgp
LmdldCgpLCBtX3JlcGxhY2VyQ2FsbERhdGEpOwogfQogCiBMb2NhbDxVbmtub3duPiBTdHJpbmdp
Zmllcjo6c3RyaW5naWZ5KEhhbmRsZTxVbmtub3duPiB2YWx1ZSkKQEAgLTM3OCw3ICszNzgsNyBA
QCBTdHJpbmdpZmllcjo6U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVyCiAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAg
IGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKG9iamVjdCwgY2FsbERhdGEp
ICE9IENhbGxUeXBlOjpOb25lKSB7CisgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5n
ZXRDYWxsRGF0YShvYmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZTo6Tm9uZSkgewogICAgICAg
ICBpZiAoaG9sZGVyLmlzQXJyYXkoKSkgewogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJudWxsIik7CiAgICAgICAgICAgICByZXR1cm4gU3RyaW5naWZ5U3VjY2VlZGVkOwpAQCAt
NDg1LDcgKzQ4NSw3IEBAIGJvb2wgU3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3AK
ICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5TmFtZXMgPSBzdHJpbmdpZmllci5tX2FycmF5UmVw
bGFjZXJQcm9wZXJ0eU5hbWVzLmRhdGEoKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgICAgIFByb3BlcnR5TmFtZUFycmF5IG9iamVjdFByb3BlcnR5TmFtZXMoZXhlYywgUHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5ncyk7Ci0gICAgICAgICAgICAgICAgbV9vYmplY3QtPm1ldGhvZFRh
YmxlKCktPmdldE93blByb3BlcnR5TmFtZXMobV9vYmplY3QuZ2V0KCksIGV4ZWMsIG9iamVjdFBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAgICAgICBtX29iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1fb2JqZWN0LmdldCgpLCBl
eGVjLCBvYmplY3RQcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICAgICAgICAg
IG1fcHJvcGVydHlOYW1lcyA9IG9iamVjdFByb3BlcnR5TmFtZXMucmVsZWFzZURhdGEoKTsKICAg
ICAgICAgICAgIH0KQEAgLTUxNSw3ICs1MTUsNyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6
OmFwcGVuZE5leHRQcm9wCiAgICAgICAgICAgICB2YWx1ZSA9IGFzQXJyYXkobV9vYmplY3QuZ2V0
KCkpLT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IFByb3BlcnR5U2xvdCBzbG90KG1fb2JqZWN0LmdldCgpLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFs
TWV0aG9kVHlwZTo6R2V0KTsKLSAgICAgICAgICAgIGlmIChtX29iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChtX29iamVjdC5nZXQoKSwgZXhlYywgaW5kZXgs
IHNsb3QpKQorICAgICAgICAgICAgaWYgKG1fb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgobV9vYmplY3QuZ2V0KCksIGV4ZWMsIGluZGV4LCBzbG90KSkK
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaW5kZXgpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHZhbHVlID0ganNVbmRlZmluZWQoKTsKQEAg
LTUzNCw3ICs1MzQsNyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9w
CiAgICAgICAgIC8vIEdldCB0aGUgdmFsdWUuCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG1f
b2JqZWN0LmdldCgpLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAg
ICAgICAgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lID0gbV9wcm9wZXJ0eU5hbWVzLT5wcm9wZXJ0
eU5hbWVWZWN0b3IoKVtpbmRleF07Ci0gICAgICAgIGlmICghbV9vYmplY3QtPm1ldGhvZFRhYmxl
KCktPmdldE93blByb3BlcnR5U2xvdChtX29iamVjdC5nZXQoKSwgZXhlYywgcHJvcGVydHlOYW1l
LCBzbG90KSkKKyAgICAgICAgaWYgKCFtX29iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Q
cm9wZXJ0eVNsb3QobV9vYmplY3QuZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHNsb3QuZ2V0
VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZmFsc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzMsNyArNTMzLDcgQEAgU3RyaW5n
IEpTT2JqZWN0OjpjYWxjdWxhdGVkQ2xhc3NOYW1lKEpTTwogCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3Qob2Jq
ZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoKSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5
cGU6OlZNSW5xdWlyeSk7Ci0gICAgUHJvcGVydHlOYW1lIGNvbnN0cnVjdG9yKGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5jb25zdHJ1Y3Rvcik7CisgICAgUHJvcGVydHlOYW1lIGNvbnN0cnVjdG9yKHZt
LnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yKTsKICAgICBpZiAob2JqZWN0LT5nZXRQcm9wZXJ0
eVNsb3QoZXhlYywgY29uc3RydWN0b3IsIHNsb3QpKSB7CiAgICAgICAgIGlmIChzbG90LmlzVmFs
dWUoKSkgewogICAgICAgICAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvclZhbHVlID0gc2xvdC5nZXRW
YWx1ZShleGVjLCBjb25zdHJ1Y3Rvcik7CkBAIC01NTQsNyArNTU0LDcgQEAgU3RyaW5nIEpTT2Jq
ZWN0OjpjYWxjdWxhdGVkQ2xhc3NOYW1lKEpTTwogICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogCiAgICAgaWYgKHByb3RvdHlwZUZ1bmN0aW9uTmFtZS5pc051bGwoKSB8fCBwcm90b3R5
cGVGdW5jdGlvbk5hbWUgPT0gIk9iamVjdCIpIHsKLSAgICAgICAgU3RyaW5nIHRhYmxlQ2xhc3NO
YW1lID0gb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5jbGFzc05hbWUob2JqZWN0KTsKKyAgICAgICAg
U3RyaW5nIHRhYmxlQ2xhc3NOYW1lID0gb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmNsYXNzTmFt
ZShvYmplY3QpOwogICAgICAgICBpZiAoIXRhYmxlQ2xhc3NOYW1lLmlzTnVsbCgpICYmIHRhYmxl
Q2xhc3NOYW1lICE9ICJPYmplY3QiKQogICAgICAgICAgICAgcmV0dXJuIHRhYmxlQ2xhc3NOYW1l
OwogCkBAIC04MTcsNiArODE3LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0SW5saW5lU2xvdyhFeGVj
U3RhdGUqIAogCiBib29sIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU09iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwogICAgIAogICAgIGlmIChwcm9wZXJ0
eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKQEAgLTgyOSwxNCArODMwLDE0IEBAIGJvb2wgSlNP
YmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCAKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAogICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzogewotICAgICAgICB0aGlz
T2JqZWN0LT5jb252ZXJ0VW5kZWNpZGVkRm9yVmFsdWUoZXhlYy0+dm0oKSwgdmFsdWUpOworICAg
ICAgICB0aGlzT2JqZWN0LT5jb252ZXJ0VW5kZWNpZGVkRm9yVmFsdWUodm0sIHZhbHVlKTsKICAg
ICAgICAgLy8gUmVsb29wLgogICAgICAgICByZXR1cm4gcHV0QnlJbmRleChjZWxsLCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoIXZhbHVlLmlzSW50
MzIoKSkgewotICAgICAgICAgICAgdGhpc09iamVjdC0+Y29udmVydEludDMyRm9yVmFsdWUoZXhl
Yy0+dm0oKSwgdmFsdWUpOworICAgICAgICAgICAgdGhpc09iamVjdC0+Y29udmVydEludDMyRm9y
VmFsdWUodm0sIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBwdXRCeUluZGV4KGNlbGwsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKICAgICAgICAgfQogICAgICAg
ICBGQUxMVEhST1VHSDsKQEAgLTg0Niw3ICs4NDcsNyBAQCBib29sIEpTT2JqZWN0OjpwdXRCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09i
amVjdC0+YnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBidXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKVtwcm9wZXJ0eU5hbWVdLnNldChleGVjLT52bSgpLCB0aGlzT2JqZWN0LCB2
YWx1ZSk7CisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW3Byb3BlcnR5TmFtZV0uc2V0
KHZtLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKICAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGlj
TGVuZ3RoKHByb3BlcnR5TmFtZSArIDEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg1NCwx
MyArODU1LDEzIEBAIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCAKICAg
ICAgICAgCiAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlm
ICghdmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgdGhpc09iamVjdC0+Y29udmVydERv
dWJsZVRvQ29udGlndW91cyhleGVjLT52bSgpKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPmNv
bnZlcnREb3VibGVUb0NvbnRpZ3VvdXModm0pOwogICAgICAgICAgICAgLy8gUmVsb29wLgogICAg
ICAgICAgICAgcmV0dXJuIHB1dEJ5SW5kZXgoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2hvdWxkVGhyb3cpOwogICAgICAgICB9CiAgICAgICAgIGRvdWJsZSB2YWx1ZUFzRG91Ymxl
ID0gdmFsdWUuYXNOdW1iZXIoKTsKICAgICAgICAgaWYgKHZhbHVlQXNEb3VibGUgIT0gdmFsdWVB
c0RvdWJsZSkgewotICAgICAgICAgICAgdGhpc09iamVjdC0+Y29udmVydERvdWJsZVRvQ29udGln
dW91cyhleGVjLT52bSgpKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPmNvbnZlcnREb3VibGVU
b0NvbnRpZ3VvdXModm0pOwogICAgICAgICAgICAgLy8gUmVsb29wLgogICAgICAgICAgICAgcmV0
dXJuIHB1dEJ5SW5kZXgoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhy
b3cpOwogICAgICAgICB9CkBAIC04OTEsNyArODkyLDcgQEAgYm9vbCBKU09iamVjdDo6cHV0QnlJ
bmRleChKU0NlbGwqIGNlbGwsIAogICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCiAgICAg
ICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgICAgIAotICAgICAg
ICB2YWx1ZVNsb3Quc2V0KGV4ZWMtPnZtKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAgICAgICAg
dmFsdWVTbG90LnNldCh2bSwgdGhpc09iamVjdCwgdmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgICAgIApAQCAtOTIwLDcgKzkyMSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1
dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCAKICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdmFsdWVTbG90LnNldChl
eGVjLT52bSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIHZhbHVlU2xvdC5zZXQodm0s
IHRoaXNPYmplY3QsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAg
ICAKQEAgLTE5NDUsMjAgKzE5NDYsMjAgQEAgSlNWYWx1ZSBKU09iamVjdDo6b3JkaW5hcnlUb1By
aW1pdGl2ZShFeAogCiAgICAgSlNWYWx1ZSB2YWx1ZTsKICAgICBpZiAoaGludCA9PSBQcmVmZXJT
dHJpbmcpIHsKLSAgICAgICAgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbihleGVjLCB0
aGlzLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIGhpbnQpOworICAgICAgICB2YWx1
ZSA9IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKGV4ZWMsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMt
PnRvU3RyaW5nLCBoaW50KTsKICAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCBz
Y29wZS5leGNlcHRpb24oKSA9PSB2YWx1ZS5hc0NlbGwoKSk7CiAgICAgICAgIGlmICh2YWx1ZSkK
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgdmFsdWUgPSBjYWxsVG9QcmltaXRp
dmVGdW5jdGlvbihleGVjLCB0aGlzLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWVPZiwgaGlu
dCk7CisgICAgICAgIHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVuY3Rpb24oZXhlYywgdGhpcywg
dm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZiwgaGludCk7CiAgICAgICAgIEFTU0VSVCghc2NvcGUu
ZXhjZXB0aW9uKCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkgPT0gdmFsdWUuYXNDZWxsKCkpOwogICAg
ICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbihleGVjLCB0aGlzLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkudmFsdWVPZiwgaGludCk7CisgICAgICAgIHZhbHVlID0gY2FsbFRv
UHJpbWl0aXZlRnVuY3Rpb24oZXhlYywgdGhpcywgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZiwg
aGludCk7CiAgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgc2NvcGUuZXhjZXB0
aW9uKCkgPT0gdmFsdWUuYXNDZWxsKCkpOwogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVuY3Rpb24o
ZXhlYywgdGhpcywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBoaW50KTsKKyAgICAg
ICAgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbihleGVjLCB0aGlzLCB2bS5wcm9wZXJ0
eU5hbWVzLT50b1N0cmluZywgaGludCk7CiAgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkgPT0gdmFsdWUuYXNDZWxsKCkpOwogICAgICAgICBpZiAo
dmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CkBAIC0xOTc5LDEyICsxOTgwLDEyIEBA
IEpTVmFsdWUgSlNPYmplY3Q6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSoKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAot
ICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbjxUeXBlSGludE1vZGU6
OlRha2VzSGludD4oZXhlYywgdGhpcywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvUHJpbWl0aXZl
U3ltYm9sLCBwcmVmZXJyZWRUeXBlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbFRvUHJpbWl0
aXZlRnVuY3Rpb248VHlwZUhpbnRNb2RlOjpUYWtlc0hpbnQ+KGV4ZWMsIHRoaXMsIHZtLnByb3Bl
cnR5TmFtZXMtPnRvUHJpbWl0aXZlU3ltYm9sLCBwcmVmZXJyZWRUeXBlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGlmICh2YWx1ZSkKICAgICAgICAgcmV0dXJu
IHZhbHVlOwogCi0gICAgcmV0dXJuIHRoaXMtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5kZWZh
dWx0VmFsdWUodGhpcywgZXhlYywgcHJlZmVycmVkVHlwZSk7CisgICAgcmV0dXJuIHRoaXMtPm1l
dGhvZFRhYmxlKHZtKS0+ZGVmYXVsdFZhbHVlKHRoaXMsIGV4ZWMsIHByZWZlcnJlZFR5cGUpOwog
fQogCiBib29sIEpTT2JqZWN0OjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBk
b3VibGUmIG51bWJlciwgSlNWYWx1ZSYgcmVzdWx0KSBjb25zdApAQCAtMjA0Myw3ICsyMDQ0LDcg
QEAgYm9vbCBKU09iamVjdDo6aGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBleAogCiAgICAgVHlwZUlu
Zm8gaW5mbyA9IHN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCk7CiAgICAgaWYgKGluZm8uaW1wbGVt
ZW50c0RlZmF1bHRIYXNJbnN0YW5jZSgpKSB7Ci0gICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0g
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOworICAgICAgICBKU1Zh
bHVlIHByb3RvdHlwZSA9IGdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIHJldHVy
biBkZWZhdWx0SGFzSW5zdGFuY2UoZXhlYywgdmFsdWUsIHByb3RvdHlwZSk7CiAgICAgfQpAQCAt
MjA1Nyw3ICsyMDU4LDcgQEAgYm9vbCBKU09iamVjdDo6aGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBl
eAogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgaGFzSW5zdGFuY2VWYWx1ZSA9IGdldChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaGFzSW5zdGFuY2VTeW1ib2wpOworICAgIEpTVmFsdWUg
aGFzSW5zdGFuY2VWYWx1ZSA9IGdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5oYXNJbnN0YW5j
ZVN5bWJvbCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAg
cmV0dXJuIGhhc0luc3RhbmNlKGV4ZWMsIHZhbHVlLCBoYXNJbnN0YW5jZVZhbHVlKTsKQEAgLTIx
MjcsOSArMjEyOCwxMCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
CiAKIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBpZiAoIW1v
ZGUuaW5jbHVkZUpTT2JqZWN0UHJvcGVydGllcygpKSB7CiAgICAgICAgIC8vIFdlIHN0aWxsIGhh
dmUgdG8gZ2V0IG5vbi1pbmRleGVkIHByb3BlcnRpZXMgZnJvbSBhbnkgc3ViY2xhc3NlcyBvZiBK
U09iamVjdCB0aGF0IGhhdmUgdGhlbS4KLSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVj
LT52bSgpKS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7CisgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjE5OCw3ICsyMjAwLDcgQEAgdm9pZCBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICB9CiAgICAgfQogCi0gICAg
b2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCkBAIC0yODYyLDcg
KzI4NjQsNyBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleFNsb3dPckJleW9uCiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6IHsKLSAg
ICAgICAgY29udmVydFVuZGVjaWRlZEZvclZhbHVlKGV4ZWMtPnZtKCksIHZhbHVlKTsKKyAgICAg
ICAgY29udmVydFVuZGVjaWRlZEZvclZhbHVlKHZtLCB2YWx1ZSk7CiAgICAgICAgIC8vIFJlbG9v
cC4KICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1
dGVzLCBtb2RlKTsKICAgICB9CkBAIC0zMjExLDExICszMjEzLDEyIEBAIEJ1dHRlcmZseSogSlNP
YmplY3Q6OmFsbG9jYXRlTW9yZU91dE9mTGkKIAogc3RhdGljIEpTQ3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb24qIGdldEN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uRm9yR2V0dGVyU2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgQ3VzdG9tR2V0dGVyU2V0
dGVyKiBnZXR0ZXJTZXR0ZXIsIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OlR5cGUgdHlw
ZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8ga2V5ID0gc3RkOjptYWtl
X3BhaXIoZ2V0dGVyU2V0dGVyLCAoaW50KXR5cGUpOwotICAgIEpTQ3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb24qIGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uID0gZXhlYy0+dm0oKS5jdXN0b21H
ZXR0ZXJTZXR0ZXJGdW5jdGlvbk1hcC5nZXQoa2V5KTsKKyAgICBKU0N1c3RvbUdldHRlclNldHRl
ckZ1bmN0aW9uKiBjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiA9IHZtLmN1c3RvbUdldHRlclNl
dHRlckZ1bmN0aW9uTWFwLmdldChrZXkpOwogICAgIGlmICghY3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb24pIHsKLSAgICAgICAgY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24gPSBKU0N1c3RvbUdl
dHRlclNldHRlckZ1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBnZXR0ZXJTZXR0ZXIsIHR5cGUsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkp
OwotICAgICAgICBleGVjLT52bSgpLmN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uTWFwLnNldChr
ZXksIGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKTsKKyAgICAgICAgY3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb24gPSBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpjcmVhdGUodm0sIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZ2V0dGVyU2V0dGVyLCB0eXBlLCBwcm9wZXJ0eU5h
bWUucHVibGljTmFtZSgpKTsKKyAgICAgICAgdm0uY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25N
YXAuc2V0KGtleSwgY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24pOwogICAgIH0KICAgICByZXR1
cm4gY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb247CiB9CkBAIC0zMjUzLDEwICszMjU2LDEwIEBA
IGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICAgICAgaWYgKHNs
b3QuaXNDdXN0b21BY2Nlc3NvcigpKQogICAgICAgICAgICAgZ2V0dGVyU2V0dGVyID0gc2xvdC5j
dXN0b21HZXR0ZXJTZXR0ZXIoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVl
IG1heWJlR2V0dGVyU2V0dGVyID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPnZtKCksIHBy
b3BlcnR5TmFtZSk7CisgICAgICAgICAgICBKU1ZhbHVlIG1heWJlR2V0dGVyU2V0dGVyID0gdGhp
c09iamVjdC0+Z2V0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgaWYgKCFt
YXliZUdldHRlclNldHRlcikgewogICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5QWxs
U3RhdGljUHJvcGVydGllcyhleGVjKTsKLSAgICAgICAgICAgICAgICBtYXliZUdldHRlclNldHRl
ciA9IHRoaXNPYmplY3QtPmdldERpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpOworICAg
ICAgICAgICAgICAgIG1heWJlR2V0dGVyU2V0dGVyID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KHZt
LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBBU1NFUlQobWF5
YmVHZXR0ZXJTZXR0ZXIpOwpAQCAtMzYyMiw3ICszNjI1LDcgQEAgSlNWYWx1ZSBKU09iamVjdDo6
Z2V0TWV0aG9kKEV4ZWNTdGF0ZSogZQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9CiAKLSAgICBjYWxsVHlwZSA9IG1ldGhvZC5hc0NlbGwoKS0+bWV0aG9kVGFibGUoKS0+Z2V0
Q2FsbERhdGEobWV0aG9kLmFzQ2VsbCgpLCBjYWxsRGF0YSk7CisgICAgY2FsbFR5cGUgPSBtZXRo
b2QuYXNDZWxsKCktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEobWV0aG9kLmFzQ2VsbCgp
LCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKSB7CiAgICAg
ICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIGVycm9yTWVzc2FnZSk7CiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA0LDcgKzEwMDQsNyBAQCBw
cml2YXRlOgogICAgICAgICAKICAgICB0ZW1wbGF0ZTxQdXRNb2RlPgogICAgIGJvb2wgcHV0RGly
ZWN0SW50ZXJuYWwoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1
dFByb3BlcnR5U2xvdCYpOwotICAgIGJvb2wgY2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUoRXhlY1N0
YXRlKiBleGVjLCBWTSYsIFByb3BlcnR5TmFtZSk7CisgICAgYm9vbCBjYW5QZXJmb3JtRmFzdFB1
dElubGluZShWTSYsIFByb3BlcnR5TmFtZSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBORVZF
Ul9JTkxJTkUgYm9vbCBwdXRJbmxpbmVTbG93KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKQEAgLTExNDcsMjggKzExNDcsMzAgQEAgSlNfRVhQ
T1JUX1BSSVZBVEUgRW5jb2RlZEpTVmFsdWUgSlNDX0hPUwogaW5saW5lIEpTT2JqZWN0KiBKU09i
amVjdDo6Y3JlYXRlUmF3T2JqZWN0KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgSlNPYmplY3QqIGZpbmFsT2JqZWN0ID0gbmV3ICgKICAgICAgICAgTm90TnVsbCwg
CiAgICAgICAgIGFsbG9jYXRlQ2VsbDxKU0ZpbmFsT2JqZWN0PigKLSAgICAgICAgICAgICpleGVj
LT5oZWFwKCksCisgICAgICAgICAgICB2bS5oZWFwLAogICAgICAgICAgICAgSlNGaW5hbE9iamVj
dDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKQogICAgICAgICAp
Ci0gICAgKSBKU09iamVjdChleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7Ci0gICAg
ZmluYWxPYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOworICAgICkgSlNPYmplY3Qo
dm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICBmaW5hbE9iamVjdC0+ZmluaXNoQ3JlYXRp
b24odm0pOwogICAgIHJldHVybiBmaW5hbE9iamVjdDsKIH0KIAogaW5saW5lIEpTRmluYWxPYmpl
Y3QqIEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIEpTRmluYWxPYmplY3QqIGZpbmFsT2JqZWN0ID0gbmV3ICgKICAgICAgICAg
Tm90TnVsbCwgCiAgICAgICAgIGFsbG9jYXRlQ2VsbDxKU0ZpbmFsT2JqZWN0PigKLSAgICAgICAg
ICAgICpleGVjLT5oZWFwKCksCisgICAgICAgICAgICB2bS5oZWFwLAogICAgICAgICAgICAgYWxs
b2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKQogICAgICAgICApCi0gICAg
KSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKLSAgICBm
aW5hbE9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CisgICAgKSBKU0ZpbmFsT2Jq
ZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgZmluYWxPYmplY3QtPmZpbmlzaENy
ZWF0aW9uKHZtKTsKICAgICByZXR1cm4gZmluYWxPYmplY3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAy
MjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNjAsOSArNjAsOSBAQCB2b2lkIGNyZWF0ZUxpc3RGcm9tQXJy
YXlMaWtlKEV4ZWNTdGF0ZSogCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmpl
Y3Q6OmNhblBlcmZvcm1GYXN0UHV0SW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpjYW5Q
ZXJmb3JtRmFzdFB1dElubGluZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgaWYgKFVOTElLRUxZKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
dW5kZXJzY29yZVByb3RvKSkKKyAgICBpZiAoVU5MSUtFTFkocHJvcGVydHlOYW1lID09IHZtLnBy
b3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2V0dGVycyBvciBnZXR0ZXJzIGluIHRoZSBw
cm90b3R5cGUgY2hhaW4KQEAgLTIxMSw3ICsyMTEsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNP
YmplY3Q6OnB1dElubGluZUZvCiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGluZGV4
ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKQogICAgICAgICByZXR1cm4gcHV0QnlJbmRleCh0
aGlzT2JqZWN0LCBleGVjLCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUo
KSk7CiAKLSAgICBpZiAodGhpc09iamVjdC0+Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUoZXhlYywg
dm0sIHByb3BlcnR5TmFtZSkpIHsKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuUGVyZm9ybUZhc3RQ
dXRJbmxpbmUodm0sIHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgQVNTRVJUKCF0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8odm0sIHBy
b3BlcnR5TmFtZSkpOwogICAgICAgICBpZiAoIXRoaXNPYmplY3QtPnB1dERpcmVjdEludGVybmFs
PFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KSkKICAgICAgICAg
ICAgIHJldHVybiB0eXBlRXJyb3IoZXhlYywgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIEFT
Q0lJTGl0ZXJhbChSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOwpAQCAtMjI2LDEwICsyMjYs
MTEgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVGbwogLy8gaHR0cDov
L3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy1o
YXNvd25wcm9wZXJ0eQogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpoYXNPd25Qcm9wZXJ0
eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkgY29uc3QKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEFTU0VSVChz
bG90LmludGVybmFsTWV0aG9kVHlwZSgpID09IFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RU
eXBlOjpHZXRPd25Qcm9wZXJ0eSk7Ci0gICAgaWYgKExJS0VMWShjb25zdF9jYXN0PEpTT2JqZWN0
Kj4odGhpcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eVNsb3QgPT0g
SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCkpCisgICAgaWYgKExJS0VMWShjb25zdF9jYXN0
PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90ID09
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpKQogICAgICAgICByZXR1cm4gSlNPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlz
KS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdChjb25zdF9jYXN0
PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9w
ZXJ0eVNsb3QoY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwogfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6Omhhc093blByb3BlcnR5
KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAyMjE4
MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1Vuc2NvcGFi
bGUoRXhlY1N0YXQKICAgICBpZiAoc2NvcGUtPnR5cGUoKSAhPSBXaXRoU2NvcGVUeXBlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU1ZhbHVlIHVuc2NvcGFibGVzID0gb2JqZWN0LT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuc2NvcGFibGVzU3ltYm9sKTsKKyAgICBK
U1ZhbHVlIHVuc2NvcGFibGVzID0gb2JqZWN0LT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
dW5zY29wYWJsZXNTeW1ib2wpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwogICAgIGlmICghdW5zY29wYWJsZXMuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMjU4LDYgKzI1OCw3IEBAIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIEpTU2Nv
cGU6OnJlc29sdmUKIAogSlNWYWx1ZSBKU1Njb3BlOjpyZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1
bmNEZWNsSW5FdmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byByZXR1
cm5QcmVkaWNhdGUgPSBbJl0gKEpTU2NvcGUqIHNjb3BlKSAtPiBib29sIHsKICAgICAgICAgcmV0
dXJuIHNjb3BlLT5pc1ZhclNjb3BlKCk7CiAgICAgfTsKQEAgLTI2Nyw4ICsyNjgsOCBAQCBKU1Zh
bHVlIEpTU2NvcGU6OnJlc29sdmVTY29wZUZvckhvaXN0aW5nCiAgICAgSlNPYmplY3QqIG9iamVj
dCA9IHJlc29sdmUoZXhlYywgc2NvcGUsIGlkZW50LCByZXR1cm5QcmVkaWNhdGUsIHNraXBQcmVk
aWNhdGUpOwogICAgIAogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYgKEpTU2NvcGUq
IHNjb3BlID0ganNEeW5hbWljQ2FzdDxKU1Njb3BlKj4oZXhlYy0+dm0oKSwgb2JqZWN0KSkgewot
ICAgICAgICBpZiAoU3ltYm9sVGFibGUqIHNjb3BlU3ltYm9sVGFibGUgPSBzY29wZS0+c3ltYm9s
VGFibGUoZXhlYy0+dm0oKSkpIHsKKyAgICBpZiAoSlNTY29wZSogc2NvcGUgPSBqc0R5bmFtaWND
YXN0PEpTU2NvcGUqPih2bSwgb2JqZWN0KSkgeworICAgICAgICBpZiAoU3ltYm9sVGFibGUqIHNj
b3BlU3ltYm9sVGFibGUgPSBzY29wZS0+c3ltYm9sVGFibGUodm0pKSB7CiAgICAgICAgICAgICBy
ZXN1bHQgPSBzY29wZS0+aXNHbG9iYWxPYmplY3QoKQogICAgICAgICAgICAgICAgID8gSlNPYmpl
Y3Q6OmlzRXh0ZW5zaWJsZShvYmplY3QsIGV4ZWMpCiAgICAgICAgICAgICAgICAgOiBzY29wZVN5
bWJvbFRhYmxlLT5zY29wZVR5cGUoKSA9PSBTeW1ib2xUYWJsZTo6U2NvcGVUeXBlOjpWYXJTY29w
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAJKHJldmlzaW9u
IDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTksNyArNTksOCBAQCBib29sIEpTU2V0Ojppc0l0ZXJhdG9yUHJvdG9j
b2xGYXN0QW5kTm9uCiAgICAgaWYgKHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkgIT0gZ2xv
YmFsT2JqZWN0LT5qc1NldFByb3RvdHlwZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAoZ2V0RGlyZWN0T2Zmc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT52
bSgpLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sKSAhPSBpbnZhbGlkT2Zmc2V0KQorICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBpZiAoZ2V0RGlyZWN0T2Zmc2V0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCkgIT0gaW52YWxpZE9mZnNldCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCShyZXZpc2lvbiAyMjE4MDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDE0ICs1NiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIEhhc2hNYXBCdWNr
ZXRUeXBlKiBwcmV2ID0gbV9pdGVyLmdldCgpOwogICAgICAgICBpZiAoIXByZXYpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAg
ICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IG1faXRlci0+bmV4dCgpOwogICAgICAgICB3
aGlsZSAoYnVja2V0ICYmIGJ1Y2tldC0+ZGVsZXRlZCgpKQogICAgICAgICAgICAgYnVja2V0ID0g
YnVja2V0LT5uZXh0KCk7CiAgICAgICAgIGlmICghYnVja2V0KSB7Ci0gICAgICAgICAgICBzZXRJ
dGVyYXRvcihleGVjLT52bSgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldEl0ZXJhdG9yKHZt
LCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9Ci0gICAg
ICAgIHNldEl0ZXJhdG9yKGV4ZWMtPnZtKCksIGJ1Y2tldCk7IC8vIFdlIGtlZXAgbV9pdGVyIG9u
IHRoZSBsYXN0IHZhbHVlIHNpbmNlIHRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpbiB0aGlzIGZ1bmN0
aW9uIGlzIGNhbGwgbmV4dCgpLgorICAgICAgICBzZXRJdGVyYXRvcih2bSwgYnVja2V0KTsgLy8g
V2Uga2VlcCBtX2l0ZXIgb24gdGhlIGxhc3QgdmFsdWUgc2luY2UgdGhlIGZpcnN0IHRoaW5nIHdl
IGRvIGluIHRoaXMgZnVuY3Rpb24gaXMgY2FsbCBuZXh0KCkuCiAgICAgICAgIHJldHVybiBidWNr
ZXQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0Miw3ICs0NDIsOCBAQCBKU1ZhbHVl
IEpTU3RyaW5nOjp0b1RoaXMoSlNDZWxsKiBjZWxsLCBFCiAKIGJvb2wgSlNTdHJpbmc6OmdldFN0
cmluZ1Byb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKLSAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoKSB7CiAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcihsZW5n
dGgoKSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Zy5oCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NjksNyArNjY5LDggQEAgQUxXQVlTX0lOTElO
RSBKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaAogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJp
bmc6OmdldFN0cmluZ1Byb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7
CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVh
ZE9ubHksIGpzTnVtYmVyKGxlbmd0aCgpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgSlNNYXAqIG1hcCA9IEpT
TWFwOjpjcmVhdGUoZXhlYywgdm0sIG1hcFN0cnVjdHVyZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKLSAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rp
b24gPSBtYXAtPkpTT2JqZWN0OjpnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNldCk7
CisgICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9uID0gbWFwLT5KU09iamVjdDo6Z2V0KGV4ZWMsIHZt
LnByb3BlcnR5TmFtZXMtPnNldCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERhdGE7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDcgKzU4LDcgQEAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIE1vZHVsZVByb2dy
YW1FeAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7
Ci0gICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZT4oKmV4ZWMtPmhlYXAoKSkpIE1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlKGV4ZWMsIHNvdXJjZSk7CisgICAgTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZT4odm0uaGVhcCkpIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKGV4ZWMs
IHNvdXJjZSk7CiAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAK
ICAgICBQYXJzZXJFcnJvciBlcnJvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09iamVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzA2LDcgKzMwNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0UHJvdG8KIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ2Fs
bF1dIGludGVybmFsIG1ldGhvZCBvZiB0b1N0cmluZyBwYXNzaW5nIHRoZSB0aGlzIHZhbHVlIGFu
ZCBubyBhcmd1bWVudHMuCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY2FsbChleGVjLCB0b1N0cmluZywgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFs
dWUsIGV4ZWMtPmVtcHR5TGlzdCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxs
KGV4ZWMsIHRvU3RyaW5nLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgKnZtLmVtcHR5
TGlzdCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVu
Y1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjIxODAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsOCArMzcsOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUHJvZ3JhbUV4
ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSkKICAgICB7Ci0gICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvZ3JhbUV4ZWN1dGFibGU+KCpleGVjLT5oZWFwKCkpKSBQ
cm9ncmFtRXhlY3V0YWJsZShleGVjLCBzb3VyY2UpOwotICAgICAgICBleGVjdXRhYmxlLT5maW5p
c2hDcmVhdGlvbihleGVjLT52bSgpKTsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxQcm9ncmFtRXhlY3V0YWJsZT4odm0uaGVhcCkpIFByb2dyYW1FeGVjdXRhYmxlKGV4
ZWMsIHNvdXJjZSk7CisgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDcgKzYyLDggQEAgdm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKgogCiBib29sIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQogewotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxhc3RJbmRleCkgeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sYXN0SW5kZXgpIHsKICAgICAgICAg
UmVnRXhwT2JqZWN0KiByZWdFeHAgPSBhc1JlZ0V4cE9iamVjdChvYmplY3QpOwogICAgICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzID0gcmVnRXhwLT5tX2xhc3RJbmRleElzV3JpdGFibGUgPyBEb250
RGVsZXRlIHwgRG9udEVudW0gOiBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seTsKICAg
ICAgICAgc2xvdC5zZXRWYWx1ZShyZWdFeHAsIGF0dHJpYnV0ZXMsIHJlZ0V4cC0+Z2V0TGFzdElu
ZGV4KCkpOwpAQCAtNzMsMjkgKzc0LDMzIEBAIGJvb2wgUmVnRXhwT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlMKIAogYm9vbCBSZWdFeHBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxhc3RJbmRleCkKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVy
dHlOYW1lcy0+bGFzdEluZGV4KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIEJh
c2U6OmRlbGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKIHZvaWQg
UmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBpZiAo
bW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpOworICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sYXN0SW5kZXgpOwogICAgIEJhc2U6OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwog
fQogCiB2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGlmICht
b2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxhc3RJbmRleCk7CisgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmxhc3RJbmRleCk7CiAgICAgQmFzZTo6Z2V0UHJvcGVy
dHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIFJl
Z0V4cE9iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBpZiAobW9kZS5p
bmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZCh2bS5wcm9wZXJ0eU5hbWVzLT5sYXN0SW5kZXgpOwogICAgIEJhc2U6OmdldEdlbmVyaWNQcm9w
ZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKQEAgLTE0
NCwxMiArMTQ5LDEzIEBAIHN0YXRpYyBib29sIHJlZ0V4cE9iamVjdFNldExhc3RJbmRleE5vblMK
IAogYm9vbCBSZWdFeHBPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBzbG90KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgUmVnRXhwT2JqZWN0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PFJlZ0V4cE9iamVjdCo+KGNlbGwpOwogCiAgICAgaWYgKFVOTElL
RUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCiAgICAgICAgIHJldHVy
biBvcmRpbmFyeVNldFNsb3coZXhlYywgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CiAKLSAgICBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpIHsKKyAgICBpZiAocHJv
cGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxhc3RJbmRleCkgewogICAgICAgICBib29s
IHJlc3VsdCA9IGFzUmVnRXhwT2JqZWN0KGNlbGwpLT5zZXRMYXN0SW5kZXgoZXhlYywgdmFsdWUs
IHNsb3QuaXNTdHJpY3RNb2RlKCkpOwogICAgICAgICBzbG90LnNldEN1c3RvbVZhbHVlKGFzUmVn
RXhwT2JqZWN0KGNlbGwpLCBzbG90LmlzU3RyaWN0TW9kZSgpCiAgICAgICAgICAgICA/IHJlZ0V4
cE9iamVjdFNldExhc3RJbmRleFN0cmljdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Miw4ICs3Miw5IEBAIHB1YmxpYzoKICAgICAKICAgICB1aW50MzJfdCBsZW5ndGgoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogICAgIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICAgICAgaWYgKFVOTElLRUxZKG1fb3ZlcnJvZGVUaGluZ3MpKQotICAgICAgICAgICAgcmV0
dXJuIGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVj
KTsKKyAgICAgICAgICAgIHJldHVybiBnZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
KS50b1VJbnQzMihleGVjKTsKICAgICAgICAgcmV0dXJuIGludGVybmFsTGVuZ3RoKCk7CiAgICAg
fQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFj
dGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpY3RFdmFsQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw4ICszNiw5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJpY3RFdmFsQWN0aXZhdGlv
biogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogY3VycmVudFNjb3BlKQogICAgIHsK
LSAgICAgICAgU3RyaWN0RXZhbEFjdGl2YXRpb24qIGxleGljYWxFbnZpcm9ubWVudCA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmljdEV2YWxBY3RpdmF0aW9uPigqZXhlYy0+aGVhcCgp
KSkgU3RyaWN0RXZhbEFjdGl2YXRpb24oZXhlYywgY3VycmVudFNjb3BlKTsKLSAgICAgICAgbGV4
aWNhbEVudmlyb25tZW50LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKKyAgICAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgU3RyaWN0RXZhbEFjdGl2YXRpb24qIGxleGljYWxF
bnZpcm9ubWVudCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmljdEV2YWxBY3RpdmF0
aW9uPih2bS5oZWFwKSkgU3RyaWN0RXZhbEFjdGl2YXRpb24oZXhlYywgY3VycmVudFNjb3BlKTsK
KyAgICAgICAgbGV4aWNhbEVudmlyb25tZW50LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAg
IHJldHVybiBsZXhpY2FsRW52aXJvbm1lbnQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDIyMTgwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk2LDcgKzk2LDggQEAgYm9vbCBTdHJpbmdPYmplY3Q6OnB1dEJ5SW5kZXgo
SlNDZWxsKiBjZQogCiBzdGF0aWMgYm9vbCBpc1N0cmluZ093blByb3BlcnR5KEV4ZWNTdGF0ZSog
ZXhlYywgU3RyaW5nT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChzdGQ6Om9w
dGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewogICAg
ICAgICBpZiAob2JqZWN0LT5pbnRlcm5hbFZhbHVlKCktPmNhbkdldEluZGV4KGluZGV4LnZhbHVl
KCkpKQpAQCAtMTMyLDggKzEzMyw5IEBAIGJvb2wgU3RyaW5nT2JqZWN0OjpkZWZpbmVPd25Qcm9w
ZXJ0eShKU08KIAogYm9vbCBTdHJpbmdPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogeworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgU3RyaW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PFN0cmluZ09iamVjdCo+KGNlbGwpOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCkKKyAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpOwogICAgIGlmIChpbmRl
eCAmJiB0aGlzT2JqZWN0LT5pbnRlcm5hbFZhbHVlKCktPmNhbkdldEluZGV4KGluZGV4LnZhbHVl
KCkpKQpAQCAtMTYyLDkgKzE2NCwxMCBAQCB2b2lkIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKCiAKIHZvaWQgU3RyaW5nT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2Jq
ZWN0Kj4ob2JqZWN0KTsKICAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkp
Ci0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
OworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwog
ICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCShyZXZpc2lv
biAyMjE4MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw5ICsxMTcsMTAgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiB2b2lkIEpTRG9sbGFyVk1Qcm90b3R5cGU6
OmdjKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGlm
ICghZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2soZXhlYykpCiAgICAgICAgIHJldHVybjsK
LSAgICBleGVjLT5oZWFwKCktPmNvbGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxs
KTsKKyAgICB2bS5oZWFwLmNvbGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsK
IH0KICAgICAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0Mo
RXhlY1N0YXRlKiBleGVjKQpAQCAtMTMwLDkgKzEzMSwxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAKIHZvaWQgSlNEb2xsYXJWTVByb3RvdHlwZTo6ZWRlbkdD
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGlmICgh
ZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2soZXhlYykpCiAgICAgICAgIHJldHVybjsKLSAg
ICBleGVjLT5oZWFwKCktPmNvbGxlY3RTeW5jKENvbGxlY3Rpb25TY29wZTo6RWRlbik7CisgICAg
dm0uaGVhcC5jb2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkVkZW4pOwogfQogCiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVkZW5HQyhFeGVjU3RhdGUqIGV4
ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0Miw3ICszNDIsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkOjpldmFsdWF0CiAgICAgaWYgKEpTT2JqZWN0KiBzdGFydEZ1bmN0aW9uID0gbV9zdGFydEZ1
bmN0aW9uLmdldCgpKSB7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBDYWxs
VHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoc3RhcnRGdW5jdGlvbiwgY2FsbERhdGEp
OwotICAgICAgICBjYWxsKGV4ZWMsIHN0YXJ0RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwg
anNVbmRlZmluZWQoKSwgZXhlYy0+ZW1wdHlMaXN0KCkpOworICAgICAgICBjYWxsKGV4ZWMsIHN0
YXJ0RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgKnZtLmVtcHR5
TGlzdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjE4MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMTMgQEAKKzIwMTctMDktMDkgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEF2b2lkIGR1cGxpY2F0ZSBjb21w
dXRhdGlvbnMgb2YgRXhlY1N0YXRlOjp2bSgpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2NjQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyBpcyBvbmx5IGEg
cmVmYWN0b3JpbmcgcGF0Y2guICBUaGVyZSBpcyBubworICAgICAgICBzaWduaWZpY2FudCBiZWhh
dmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQgY29uc3Qp
OgorICAgICAgICAqIE1vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5t
bToKKyAgICAgICAgKFdlYkNvcmU6OlF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxs
UmVwbGFjZW1lbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFjayk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnN0cnVjdEN1c3RvbUVsZW1lbnRTeW5jaHJvbm91c2x5KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6dXBncmFkZUVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjppbnZva2VDYWxsYmFjayk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVjb3JkLmg6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01NYXBMaWtlLmg6CisgICAgICAgIChXZWJDb3JlOjpmb3J3YXJkU2l6
ZVRvTWFwTGlrZSk6CisgICAgICAgIChXZWJDb3JlOjpmb3J3YXJkRW50cmllc1RvTWFwTGlrZSk6
CisgICAgICAgIChXZWJDb3JlOjpmb3J3YXJkS2V5c1RvTWFwTGlrZSk6CisgICAgICAgIChXZWJD
b3JlOjpmb3J3YXJkVmFsdWVzVG9NYXBMaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmRH
ZXRUb01hcExpa2UpOgorICAgICAgICAoV2ViQ29yZTo6Zm9yd2FyZEhhc1RvTWFwTGlrZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6anNET01XaW5kb3dHZXRPd25Qcm9wZXJ0eVNsb3RSZXN0cmljdGVkQWNjZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFkZENyb3NzT3JpZ2luV2luZG93T3duUHJvcGVydHlOYW1lcyk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpyZXBvcnRNZW1vcnlGb3JEb2N1bWVudElmRnJhbWVsZXNzKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Vycm9ySGFu
ZGxlcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
T3duUHJvcGVydHlTbG90Q29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnB1dENvbW1vbik6Cisg
ICAgICAgIChXZWJDb3JlOjphZGRDcm9zc09yaWdpbkxvY2F0aW9uUHJvcGVydHlOYW1lcyk6Cisg
ICAgICAgIChXZWJDb3JlOjphZGRDcm9zc09yaWdpbkxvY2F0aW9uT3duUHJvcGVydHlOYW1lcyk6
CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uUHJvdG90eXBlOjpwdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNMb2NhdGlvblByb3RvdHlwZTo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
bG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNJbnRlcmZhY2VOYW1lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTSW50ZXJmYWNlTmFtZUNvbnN0cnVjdG9yKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTTWFwTGlrZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNS
ZWFkT25seU1hcExpa2VDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3Rvcik6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9yKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2Jq
ZWN0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q3VzdG9tQ29uc3Ry
dWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RET01KSVRDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rvcik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3IpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJsZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RJdGVyYWJsZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcik6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lckNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVj
dG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rvcik6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRl
bnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3ROYW1lZERlbGV0ZXJOb0lk
ZW50aWZpZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRo
SWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3Rv
cik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0TmFtZWRHZXR0ZXJDYWxs
V2l0aENvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0
cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVj
dG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1
Y3Rvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVjdG9yKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
T3ZlcnJpZGVCdWlsdGlucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3ROYW1lZFNl
dHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlk
ZUJ1aWx0aW5zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3ROb2RlQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0UGx1Z2luSW50ZXJmYWNlQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Q29uc3RydWN0b3Ip
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rv
cik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNl
cmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9y
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3Ry
dWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdp
Zmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTdHJpbmdpZmllckNvbnN0cnVj
dG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U3Ry
aW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0
cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5n
aWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc0NvbnN0cnVjdG9yKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25O
YW1lZFRvU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlQ29u
c3RydWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYnJpZGdlL05Q
X2pzb2JqZWN0LmNwcDoKKyAgICAgICAgKF9OUE5fU2V0UHJvcGVydHkpOgorICAgICAgICAoX05Q
Tl9SZW1vdmVQcm9wZXJ0eSk6CisgICAgICAgIChfTlBOX0VudW1lcmF0ZSk6CisgICAgICAgICog
YnJpZGdlL2MvY19pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDUnVudGlt
ZU1ldGhvZDo6Y3JlYXRlKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9XZWJTY3JpcHRPYmplY3Qu
bW06CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBzZXRWYWx1ZTpmb3JLZXk6XSk6CisgICAg
ICAgICgtW1dlYlNjcmlwdE9iamVjdCByZW1vdmVXZWJTY3JpcHRLZXk6XSk6CisgICAgICAgICgt
W1dlYlNjcmlwdE9iamVjdCBzZXRXZWJTY3JpcHRWYWx1ZUF0SW5kZXg6dmFsdWU6XSk6CisgICAg
ICAgICogYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbToKKyAgICAgICAgKE9iakNSdW50aW1l
TWV0aG9kOjpjcmVhdGUpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5oOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpjcmVhdGUpOgor
ICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UnVudGlt
ZUFycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6UnVudGltZUFycmF5
OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6OnB1dCk6
CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UnVudGlt
ZUFycmF5OjpjcmVhdGUpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX21ldGhvZC5jcHA6Cisg
ICAgICAgIChKU0M6OlJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAg
ICogYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmg6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUNhcHRp
b25Db250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0Q29u
dHJvbGxlckpTUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50Ojp1cGRhdGVNZWRpYUNvbnRyb2xzQWZ0ZXJQcmVzZW50YXRpb25Nb2RlQ2hhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmdldEN1cnJlbnRNZWRpYUNvbnRy
b2xzU3RhdHVzKToKKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50
U2hhZG93Um9vdCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjpjbG9uZUFycmF5QnVmZmVyKToKKwogMjAxNy0wOS0wOSAgWmFu
IERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0VNRV0gTWVkaWFL
ZXlTZXNzaW9uOiBoYW5kbGUgTWVkaWFLZXlzIGFzc29jaWF0aW9uIHRocm91Z2ggYSBXZWFrUHRy
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQ
cm9jZXNzb3IuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzNiw3ICs1
MzYsNyBAQCBib29sIFNEUFByb2Nlc3Nvcjo6Y2FsbFNjcmlwdChjb25zdCBTdHJpCiAKICAgICBK
U0M6OkpTT2JqZWN0KiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFsdWUudG9PYmplY3QoZXhlYyk7CiAg
ICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0g
ZnVuY3Rpb24tPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7
CisgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5tZXRob2RUYWJsZSh2bSkt
PmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IEpT
Qzo6Q2FsbFR5cGU6Ok5vbmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVn
aW5SZXBsYWNlbWVudC5tbQkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTQsNyArMTk0LDcgQEAgYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5z
dGFsbAogICAgIEpTQzo6SlNPYmplY3QqIHJlcGxhY2VtZW50T2JqZWN0ID0gcmVwbGFjZW1lbnRG
dW5jdGlvbi50b09iamVjdChleGVjKTsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwog
ICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7Ci0gICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9
IHJlcGxhY2VtZW50T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShyZXBsYWNlbWVu
dE9iamVjdCwgY2FsbERhdGEpOworICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSByZXBsYWNl
bWVudE9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShyZXBsYWNlbWVudE9iamVj
dCwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBKU0M6OkNhbGxUeXBlOjpOb25lKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2FsbGJhY2tEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
MTcgKzQ0LDE4IEBAIEpTVmFsdWUgSlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKEoKICAg
ICBBU1NFUlQoY2FsbGJhY2spOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0
Lmdsb2JhbEV4ZWMoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTVmFsdWUgZnVu
Y3Rpb247CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBD
YWxsVHlwZTo6Tm9uZTsKIAogICAgIGlmIChtZXRob2QgIT0gQ2FsbGJhY2tUeXBlOjpPYmplY3Qp
IHsKICAgICAgICAgZnVuY3Rpb24gPSBjYWxsYmFjazsKLSAgICAgICAgY2FsbFR5cGUgPSBjYWxs
YmFjay0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoY2FsbGJhY2ssIGNhbGxEYXRhKTsKKyAg
ICAgICAgY2FsbFR5cGUgPSBjYWxsYmFjay0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShj
YWxsYmFjaywgY2FsbERhdGEpOwogICAgIH0KICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6
Ok5vbmUpIHsKICAgICAgICAgaWYgKG1ldGhvZCA9PSBDYWxsYmFja1R5cGU6OkZ1bmN0aW9uKSB7
Ci0gICAgICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IEpTQzo6RXhjZXB0aW9uOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMpKTsKKyAgICAgICAgICAgIHJldHVybmVk
RXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246OmNyZWF0ZSh2bSwgY3JlYXRlVHlwZUVycm9yKGV4
ZWMpKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIApAQCAtNjIs
NyArNjMsNyBAQCBKU1ZhbHVlIEpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFjayhKCiAgICAg
ICAgIGZ1bmN0aW9uID0gY2FsbGJhY2stPmdldChleGVjLCBmdW5jdGlvbk5hbWUpOwogICAgICAg
ICBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgIGlm
IChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkgewotICAgICAgICAgICAgcmV0dXJuZWRFeGNl
cHRpb24gPSBKU0M6OkV4Y2VwdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGNyZWF0ZVR5cGVFcnJv
cihleGVjKSk7CisgICAgICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IEpTQzo6RXhjZXB0aW9u
OjpjcmVhdGUodm0sIGNyZWF0ZVR5cGVFcnJvcihleGVjKSk7CiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwCShyZXZpc2lv
biAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJ
bnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgc3RhdGljIFJl
ZlB0cjxFbGVtZW50PiBjb25zdHJ1Y3RDdXN0b21FbAogewogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7Ci0g
ICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gY29uc3RydWN0b3ItPm1ldGhvZFRhYmxl
KCktPmdldENvbnN0cnVjdERhdGEoY29uc3RydWN0b3IsIGNvbnN0cnVjdERhdGEpOworICAgIENv
bnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGNvbnN0cnVjdG9yLT5tZXRob2RUYWJsZSh2bSkt
PmdldENvbnN0cnVjdERhdGEoY29uc3RydWN0b3IsIGNvbnN0cnVjdERhdGEpOwogICAgIGlmIChj
b25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGU6Ok5vbmUpIHsKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTg5LDcgKzE4OSw3IEBA
IHZvaWQgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjp1cGdyYWRlRWwKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3RE
YXRhOwotICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IG1fY29uc3RydWN0b3ItPm1l
dGhvZFRhYmxlKCktPmdldENvbnN0cnVjdERhdGEobV9jb25zdHJ1Y3Rvci5nZXQoKSwgY29uc3Ry
dWN0RGF0YSk7CisgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gbV9jb25zdHJ1Y3Rv
ci0+bWV0aG9kVGFibGUodm0pLT5nZXRDb25zdHJ1Y3REYXRhKG1fY29uc3RydWN0b3IuZ2V0KCks
IGNvbnN0cnVjdERhdGEpOwogICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGU6
Ok5vbmUpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTIzMSw3ICsyMzEsOCBAQCB2b2lkIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6aW52b2tl
Q2FsCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZjxKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U+
IHByb3RlY3RlZFRoaXMoKnRoaXMpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1faXNvbGF0ZWRX
b3JsZC0+dm0oKSk7CisgICAgVk0mIHZtID0gbV9pc29sYXRlZFdvcmxkLT52bSgpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKIAogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQo
Y29udGV4dC0+aXNEb2N1bWVudCgpKTsKQEAgLTI0MSw3ICsyNDIsNyBAQCB2b2lkIEpTQ3VzdG9t
RWxlbWVudEludGVyZmFjZTo6aW52b2tlQ2FsCiAgICAgSlNPYmplY3QqIGpzRWxlbWVudCA9IGFz
T2JqZWN0KHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwogCiAgICAgQ2FsbERh
dGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBjYWxsYmFjay0+bWV0aG9kVGFi
bGUoKS0+Z2V0Q2FsbERhdGEoY2FsbGJhY2ssIGNhbGxEYXRhKTsKKyAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IGNhbGxiYWNrLT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhKGNhbGxiYWNrLCBj
YWxsRGF0YSk7CiAgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKIAogICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnZlcnRSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRSZWNvcmQuaAkocmV2aXNpb24gMjIxODAwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVjb3JkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg2LDcgKzg2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3Ry
dWN0IAogICAgIAogICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtl
eXNdXSgpLgogICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlBy
b3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRp
b25Nb2RlKCkpOworICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVy
dHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CiAK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NYXBMaWtlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NYXBMaWtlLmgJKHJldmlzaW9uIDIyMTgwMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NTWFwTGlrZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC04OSwyMiArODksMjYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxp
bmUgdgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFs
dWUgZm9yd2FyZFNpemVUb01hcExpa2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBXcmFwcGVyQ2xh
c3MmIG1hcExpa2UpCiB7Ci0gICAgcmV0dXJuIGZvcndhcmRBdHRyaWJ1dGVHZXR0ZXJUb0JhY2tp
bmdNYXAoc3RhdGUsIG1hcExpa2UsIHN0YXRlLnByb3BlcnR5TmFtZXMoKS5zaXplKTsKKyAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgcmV0dXJuIGZvcndhcmRBdHRyaWJ1dGVHZXR0
ZXJUb0JhY2tpbmdNYXAoc3RhdGUsIG1hcExpa2UsIHZtLnByb3BlcnR5TmFtZXMtPnNpemUpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUg
Zm9yd2FyZEVudHJpZXNUb01hcExpa2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBXcmFwcGVyQ2xh
c3MmIG1hcExpa2UpCiB7Ci0gICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdN
YXAoc3RhdGUsIG1hcExpa2UsIHN0YXRlLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5l
bnRyaWVzUHVibGljTmFtZSgpKTsKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
cmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAoc3RhdGUsIG1hcExpa2UsIHZt
LnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmVudHJpZXNQdWJsaWNOYW1lKCkpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9y
d2FyZEtleXNUb01hcExpa2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBXcmFwcGVyQ2xhc3MmIG1h
cExpa2UpCiB7Ci0gICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAoc3Rh
dGUsIG1hcExpa2UsIHN0YXRlLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5rZXlzUHVi
bGljTmFtZSgpKTsKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgcmV0dXJuIGZv
cndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAoc3RhdGUsIG1hcExpa2UsIHZtLnByb3BlcnR5
TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmtleXNQdWJsaWNOYW1lKCkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZFZhbHVlc1Rv
TWFwTGlrZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSkKIHsK
LSAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChzdGF0ZSwgbWFwTGlr
ZSwgc3RhdGUucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLnZhbHVlc1B1YmxpY05hbWUo
KSk7CisgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIHJldHVybiBmb3J3YXJkRnVu
Y3Rpb25DYWxsVG9CYWNraW5nTWFwKHN0YXRlLCBtYXBMaWtlLCB2bS5wcm9wZXJ0eU5hbWVzLT5i
dWlsdGluTmFtZXMoKS52YWx1ZXNQdWJsaWNOYW1lKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZENsZWFyVG9NYXBMaWtl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtlKQpAQCAtMTIwLDEy
ICsxMjQsMTQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzLCB0eXBlbmFtZQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVuYW1lIEl0ZW1UeXBlPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGZvcndhcmRHZXRUb01hcExpa2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBX
cmFwcGVyQ2xhc3MmIG1hcExpa2UsIEl0ZW1UeXBlJiYpCiB7Ci0gICAgcmV0dXJuIGZvcndhcmRG
dW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAoc3RhdGUsIG1hcExpa2UsIHN0YXRlLnByb3BlcnR5TmFt
ZXMoKS5idWlsdGluTmFtZXMoKS5nZXRQdWJsaWNOYW1lKCkpOworICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChz
dGF0ZSwgbWFwTGlrZSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZ2V0UHVibGlj
TmFtZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzLCB0eXBlbmFtZSBJ
dGVtVHlwZT4gaW5saW5lIEpTQzo6SlNWYWx1ZSBmb3J3YXJkSGFzVG9NYXBMaWtlKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtlLCBJdGVtVHlwZSYmKQogewotICAg
IHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKHN0YXRlLCBtYXBMaWtlLCBz
dGF0ZS5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkuaGFzUHVibGljTmFtZSgpKTsKKyAg
ICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNh
bGxUb0JhY2tpbmdNYXAoc3RhdGUsIG1hcExpa2UsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5O
YW1lcygpLmhhc1B1YmxpY05hbWUoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJD
bGFzcywgdHlwZW5hbWUgSXRlbVR5cGU+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZEFkZFRv
TWFwTGlrZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSwgSXRl
bVR5cGUmJiBpdGVtKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYs
NyArMTA2LDcgQEAgc3RhdGljIGJvb2wganNET01XaW5kb3dHZXRPd25Qcm9wZXJ0eVNsbwogICAg
IH0KIAogICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3Nzb3JpZ2luZ2V0
b3ducHJvcGVydHloZWxwZXItKC1vLC1wLSkKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS50b1N0cmluZ1RhZ1N5bWJvbCB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmhhc0luc3RhbmNlU3ltYm9sIHx8IHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuaXNDb25jYXRTcHJlYWRhYmxlU3ltYm9sKSB7CisgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCB8fCBw
cm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+aGFzSW5zdGFuY2VTeW1ib2wgfHwgcHJv
cGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmlzQ29uY2F0U3ByZWFkYWJsZVN5bWJvbCkg
ewogICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIFJlYWRPbmx5IHwgRG9udEVudW0s
IGpzVW5kZWZpbmVkKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xMzcsNyAr
MTM3LDcgQEAgc3RhdGljIGJvb2wganNET01XaW5kb3dHZXRPd25Qcm9wZXJ0eVNsbwogICAgICAg
ICAvLyBPbmx5IGFsbG93IGFjY2VzcyB0byB0aGVzZSBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAg
ICAgICBpZiAocHJvcGVydHlOYW1lID09IGJ1aWx0aW5OYW1lcy5sb2NhdGlvblB1YmxpY05hbWUo
KQogICAgICAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGJ1aWx0aW5OYW1lcy5jbG9zZWRQdWJs
aWNOYW1lKCkKLSAgICAgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoCisgICAgICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoCiAgICAgICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gYnVpbHRpbk5hbWVz
LnNlbGZQdWJsaWNOYW1lKCkKICAgICAgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBidWlsdGlu
TmFtZXMud2luZG93UHVibGljTmFtZSgpCiAgICAgICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0g
YnVpbHRpbk5hbWVzLmZyYW1lc1B1YmxpY05hbWUoKQpAQCAtMzM4LDExICszMzgsMTIgQEAgc3Rh
dGljIHZvaWQgYWRkU2NvcGVkQ2hpbGRyZW5JbmRleGVzKEV4ZQogLy8gaHR0cHM6Ly9odG1sLnNw
ZWMud2hhdHdnLm9yZy8jY3Jvc3NvcmlnaW5vd25wcm9wZXJ0eWtleXMtKC1vLSkKIHN0YXRpYyB2
b2lkIGFkZENyb3NzT3JpZ2luV2luZG93T3duUHJvcGVydHlOYW1lcyhFeGVjU3RhdGUmIHN0YXRl
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKIHsKLSAgICBhZGRDcm9zc09yaWdp
bldpbmRvd1Byb3BlcnR5TmFtZXMoc3RhdGUudm0oKSwgcHJvcGVydHlOYW1lcyk7CisgICAgVk0m
IHZtID0gc3RhdGUudm0oKTsKKyAgICBhZGRDcm9zc09yaWdpbldpbmRvd1Byb3BlcnR5TmFtZXMo
dm0sIHByb3BlcnR5TmFtZXMpOwogCi0gICAgcHJvcGVydHlOYW1lcy5hZGQoc3RhdGUucHJvcGVy
dHlOYW1lcygpLnRvU3RyaW5nVGFnU3ltYm9sKTsKLSAgICBwcm9wZXJ0eU5hbWVzLmFkZChzdGF0
ZS5wcm9wZXJ0eU5hbWVzKCkuaGFzSW5zdGFuY2VTeW1ib2wpOwotICAgIHByb3BlcnR5TmFtZXMu
YWRkKHN0YXRlLnByb3BlcnR5TmFtZXMoKS5pc0NvbmNhdFNwcmVhZGFibGVTeW1ib2wpOworICAg
IHByb3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sKTsK
KyAgICBwcm9wZXJ0eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5oYXNJbnN0YW5jZVN5bWJv
bCk7CisgICAgcHJvcGVydHlOYW1lcy5hZGQodm0ucHJvcGVydHlOYW1lcy0+aXNDb25jYXRTcHJl
YWRhYmxlU3ltYm9sKTsKIH0KIAogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jd2lu
ZG93cHJveHktb3ducHJvcGVydHlrZXlzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY2LDEzICs2NiwxNCBAQCB2b2lkIHJlcG9ydE1lbW9yeUZvckRvY3VtZW50SWZGcmFtZWxl
c3MoCiAgICAgaWYgKGRvY3VtZW50LmZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7CiAgICAgc2l6ZV90IG1lbW9yeUNvc3QgPSAwOwogICAgIGZvciAo
Tm9kZSogbm9kZSA9ICZkb2N1bWVudDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
Km5vZGUpKQogICAgICAgICBtZW1vcnlDb3N0ICs9IG5vZGUtPmFwcHJveGltYXRlTWVtb3J5Q29z
dCgpOwogCiAgICAgLy8gRklYTUU6IEFkb3B0IHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCwgYW5k
IHN3aXRjaCB0byByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZC4KICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTk1Ci0gICAgc3RhdGUuaGVhcCgpLT5k
ZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnkobWVtb3J5Q29zdCk7CisgICAgdm0uaGVhcC5kZXBy
ZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnkobWVtb3J5Q29zdCk7CiB9CiAKIEpTVmFsdWUgdG9KU05l
d2x5Q3JlYXRlZChFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWY8RG9jdW1lbnQ+JiYgZG9jdW1lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY0LDcgKzY0LDggQEAgdm9pZCBKU0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQoU2NyaXB0
RQogCiAgICAgRXJyb3JFdmVudCYgZXJyb3JFdmVudCA9IGRvd25jYXN0PEVycm9yRXZlbnQ+KGV2
ZW50KTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQudm0o
KSk7CisgICAgVk0mIHZtID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dC52bSgpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKHZtKTsKIAogICAgIEpTT2JqZWN0KiBqc0Z1bmN0aW9uID0gdGhpcy0+anNG
dW5jdGlvbihzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBpZiAoIWpzRnVuY3Rpb24pCkBA
IC03Nyw3ICs3OCw3IEBAIHZvaWQgSlNFcnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEUK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAg
IENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0ganNGdW5jdGlvbi0+
bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoanNGdW5jdGlvbiwgY2FsbERhdGEpOworICAgIENh
bGxUeXBlIGNhbGxUeXBlID0ganNGdW5jdGlvbi0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0
YShqc0Z1bmN0aW9uLCBjYWxsRGF0YSk7CiAKICAgICBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6
Ok5vbmUpIHsKICAgICAgICAgUmVmPEpTRXJyb3JIYW5kbGVyPiBwcm90ZWN0ZWRUaGlzKCp0aGlz
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1
c3RvbS5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDE0IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxJbWFnZURhdGE+
JiYgaW1hZ2VEYXRhKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIGRh
dGEgPSBpbWFnZURhdGEtPmRhdGEoKTsKICAgICBhdXRvKiB3cmFwcGVyID0gY3JlYXRlV3JhcHBl
cjxJbWFnZURhdGE+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbWFnZURhdGEpKTsKICAgICBJZGVu
dGlmaWVyIGRhdGFOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgImRhdGEiKTsK
LSAgICB3cmFwcGVyLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIGRhdGFOYW1lLCB0b0pTKHN0YXRl
LCBnbG9iYWxPYmplY3QsIGRhdGEpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHdyYXBw
ZXItPnB1dERpcmVjdCh2bSwgZGF0YU5hbWUsIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGF0
YSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgLy8gRklYTUU6IEFkb3B0IHJlcG9ydEV4
dHJhTWVtb3J5VmlzaXRlZCwgYW5kIHN3aXRjaCB0byByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRl
ZC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTk1
Ci0gICAgc3RhdGUtPmhlYXAoKS0+ZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5KGRhdGEtPmxl
bmd0aCgpKTsKKyAgICB2bS5oZWFwLmRlcHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9yeShkYXRhLT5s
ZW5ndGgoKSk7CiAgICAgCiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjIx
ODAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDIwICs1NSwyMCBAQCBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3RDb21tb24oSlNMCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIGh0dHBz
Oi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3Nzb3JpZ2luZ2V0b3ducHJvcGVydHloZWxwZXIt
KC1vLC1wLSkKLSAgICBpZiAocHJvcGVydHlOYW1lID09IHN0YXRlLnByb3BlcnR5TmFtZXMoKS50
b1N0cmluZ1RhZ1N5bWJvbCB8fCBwcm9wZXJ0eU5hbWUgPT0gc3RhdGUucHJvcGVydHlOYW1lcygp
Lmhhc0luc3RhbmNlU3ltYm9sIHx8IHByb3BlcnR5TmFtZSA9PSBzdGF0ZS5wcm9wZXJ0eU5hbWVz
KCkuaXNDb25jYXRTcHJlYWRhYmxlU3ltYm9sKSB7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2
bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCB8fCBwcm9wZXJ0eU5hbWUgPT0gdm0u
cHJvcGVydHlOYW1lcy0+aGFzSW5zdGFuY2VTeW1ib2wgfHwgcHJvcGVydHlOYW1lID09IHZtLnBy
b3BlcnR5TmFtZXMtPmlzQ29uY2F0U3ByZWFkYWJsZVN5bWJvbCkgewogICAgICAgICBzbG90LnNl
dFZhbHVlKCZ0aGlzT2JqZWN0LCBSZWFkT25seSB8IERvbnRFbnVtLCBqc1VuZGVmaW5lZCgpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgLy8gV2Ugb25seSBhbGxvdyBhY2Nl
c3MgdG8gTG9jYXRpb24ucmVwbGFjZSgpIGNyb3NzIG9yaWdpbi4KLSAgICBpZiAocHJvcGVydHlO
YW1lID09IHN0YXRlLnByb3BlcnR5TmFtZXMoKS5yZXBsYWNlKSB7CisgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5yZXBsYWNlKSB7CiAgICAgICAgIHNsb3Quc2V0Q3Vz
dG9tKCZ0aGlzT2JqZWN0LCBSZWFkT25seSwgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVy
PGpzTG9jYXRpb25JbnN0YW5jZUZ1bmN0aW9uUmVwbGFjZSwgMT4pOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKICAgICAvLyBHZXR0aW5nIGxvY2F0aW9uLmhyZWYgY3Jvc3Mgb3JpZ2lu
IG5lZWRzIHRvIHRocm93LiBIb3dldmVyLCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoKSBuZWVk
cyB0byByZXR1cm4KICAgICAvLyBhIGRlc2NyaXB0b3IgdGhhdCBoYXMgYSBzZXR0ZXIgYnV0IG5v
IGdldHRlci4KLSAgICBpZiAoc2xvdC5pbnRlcm5hbE1ldGhvZFR5cGUoKSA9PSBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkgJiYgcHJvcGVydHlOYW1lID09
IHN0YXRlLnByb3BlcnR5TmFtZXMoKS5ocmVmKSB7CisgICAgaWYgKHNsb3QuaW50ZXJuYWxNZXRo
b2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3Bl
cnR5ICYmIHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5ocmVmKSB7CiAgICAgICAg
IGF1dG8qIGVudHJ5ID0gSlNMb2NhdGlvbjo6aW5mbygpLT5zdGF0aWNQcm9wSGFzaFRhYmxlLT5l
bnRyeShwcm9wZXJ0eU5hbWUpOwogICAgICAgICBDdXN0b21HZXR0ZXJTZXR0ZXIqIGN1c3RvbUdl
dHRlclNldHRlciA9IEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBudWxscHRyLCBlbnRy
eS0+cHJvcGVydHlQdXR0ZXIoKSk7CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tR2V0dGVyU2V0dGVy
KCZ0aGlzT2JqZWN0LCBDdXN0b21BY2Nlc3NvciwgY3VzdG9tR2V0dGVyU2V0dGVyKTsKQEAgLTEw
NiwxNCArMTA2LDE1IEBAIHN0YXRpYyBib29sIHB1dENvbW1vbihKU0xvY2F0aW9uJiB0aGlzT2IK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CiAgICAgLy8gU2lsZW50bHkgYmxvY2sgYWNjZXNzIHRvIHRvU3RyaW5nIGFuZCB2
YWx1ZU9mLgotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gc3RhdGUucHJvcGVydHlOYW1lcygpLnRv
U3RyaW5nIHx8IHByb3BlcnR5TmFtZSA9PSBzdGF0ZS5wcm9wZXJ0eU5hbWVzKCkudmFsdWVPZikK
KyAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nIHx8IHBy
b3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIC8vIEFsd2F5cyBhbGxvdyBhc3NpZ25pbmcgdG8gdGhlIHdob2xlIGxvY2F0
aW9uLgogICAgIC8vIEhvd2V2ZXIsIGFsbGxvd2luZyBhc3NpZ25pbmcgb2YgcGllY2VzIG1pZ2h0
IGluYWR2ZXJ0ZW50bHkgZGlzY2xvc2UgcGFydHMgb2YgdGhlIG9yaWdpbmFsIGxvY2F0aW9uLgog
ICAgIC8vIFNvIGZhbGwgdGhyb3VnaCB0byB0aGUgYWNjZXNzIGNoZWNrIGZvciB0aG9zZS4KLSAg
ICBpZiAocHJvcGVydHlOYW1lID09IHN0YXRlLnByb3BlcnR5TmFtZXMoKS5ocmVmKQorICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+aHJlZikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgLy8gQmxvY2sgYWNjZXNzIGFuZCB0aHJvdyBpZiB0aGVyZSBpcyBhIHNl
Y3VyaXR5IGVycm9yLgpAQCAtMTY2LDcgKzE2Nyw4IEBAIGJvb2wgSlNMb2NhdGlvbjo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KEoKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3Nz
b3JpZ2lucHJvcGVydGllcy0oLW8tKQogc3RhdGljIHZvaWQgYWRkQ3Jvc3NPcmlnaW5Mb2NhdGlv
blByb3BlcnR5TmFtZXMoRXhlY1N0YXRlJiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMpCiB7Ci0gICAgc3RhdGljIGNvbnN0IElkZW50aWZpZXIqIGNvbnN0IHByb3BlcnRp
ZXNbXSA9IHsgJnN0YXRlLnByb3BlcnR5TmFtZXMoKS5ocmVmLCAmc3RhdGUucHJvcGVydHlOYW1l
cygpLnJlcGxhY2UgfTsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIHN0YXRpYyBjb25z
dCBJZGVudGlmaWVyKiBjb25zdCBwcm9wZXJ0aWVzW10gPSB7ICZ2bS5wcm9wZXJ0eU5hbWVzLT5o
cmVmLCAmdm0ucHJvcGVydHlOYW1lcy0+cmVwbGFjZSB9OwogICAgIGZvciAoYXV0byogcHJvcGVy
dHkgOiBwcm9wZXJ0aWVzKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZCgqcHJvcGVydHkpOwog
fQpAQCAtMTc0LDExICsxNzYsMTIgQEAgc3RhdGljIHZvaWQgYWRkQ3Jvc3NPcmlnaW5Mb2NhdGlv
blByb3BlcgogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jY3Jvc3NvcmlnaW5vd25w
cm9wZXJ0eWtleXMtKC1vLSkKIHN0YXRpYyB2b2lkIGFkZENyb3NzT3JpZ2luTG9jYXRpb25Pd25Q
cm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSYgc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CiAgICAgYWRkQ3Jvc3NPcmlnaW5M
b2NhdGlvblByb3BlcnR5TmFtZXMoc3RhdGUsIHByb3BlcnR5TmFtZXMpOwogCi0gICAgcHJvcGVy
dHlOYW1lcy5hZGQoc3RhdGUucHJvcGVydHlOYW1lcygpLnRvU3RyaW5nVGFnU3ltYm9sKTsKLSAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChzdGF0ZS5wcm9wZXJ0eU5hbWVzKCkuaGFzSW5zdGFuY2VTeW1i
b2wpOwotICAgIHByb3BlcnR5TmFtZXMuYWRkKHN0YXRlLnByb3BlcnR5TmFtZXMoKS5pc0NvbmNh
dFNwcmVhZGFibGVTeW1ib2wpOworICAgIHByb3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFt
ZXMtPnRvU3RyaW5nVGFnU3ltYm9sKTsKKyAgICBwcm9wZXJ0eU5hbWVzLmFkZCh2bS5wcm9wZXJ0
eU5hbWVzLT5oYXNJbnN0YW5jZVN5bWJvbCk7CisgICAgcHJvcGVydHlOYW1lcy5hZGQodm0ucHJv
cGVydHlOYW1lcy0+aXNDb25jYXRTcHJlYWRhYmxlU3ltYm9sKTsKIH0KIAogdm9pZCBKU0xvY2F0
aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQpAQCAtMTk3LDcgKzIwMCw4IEBAIGJvb2wgSlNMb2NhdGlvbjo6ZGVmaW5lT3duUHJvcGVydHko
SlNPYmoKICAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1l
KGV4ZWMsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5mcmFtZSgpLCBUaHJvd1NlY3VyaXR5RXJyb3Ip
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29y
RGVzY3JpcHRvcigpICYmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLnRv
U3RyaW5nIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWVPZikp
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29y
RGVzY3JpcHRvcigpICYmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJp
bmcgfHwgcHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiB9CkBA
IC0yMjksMTUgKzIzMywxNyBAQCBTdHJpbmcgSlNMb2NhdGlvbjo6dG9TdHJpbmdOYW1lKGNvbnN0
IEpTCiAKIGJvb2wgSlNMb2NhdGlvblByb3RvdHlwZTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMb2NhdGlvblByb3RvdHlwZSo+KGNlbGwpOwotICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gc3RhdGUtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZyB8fCBw
cm9wZXJ0eU5hbWUgPT0gc3RhdGUtPnByb3BlcnR5TmFtZXMoKS52YWx1ZU9mKQorICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcgfHwgcHJvcGVydHlOYW1l
ID09IHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICByZXR1cm4gQmFzZTo6cHV0KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90KTsKIH0KIAogYm9vbCBKU0xvY2F0aW9uUHJvdG90eXBlOjpkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4
Y2VwdGlvbikKIHsKLSAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nIHx8IHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWVPZikpCisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYm
IChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcgfHwgcHJvcGVydHlO
YW1lID09IHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJl
dmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OTEsNyArMTQ5MSw3IEBAIFNlcmlh
bGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjoKICAgICAgICAgICAgICAgICAgICAg
bGVuZ3RoU3RhY2sucmVtb3ZlTGFzdCgpOwogCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KG1fZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5ncykpOwotICAgICAgICAgICAgICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUoKS0+Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKGFycmF5LCBtX2V4ZWMsIHByb3BlcnR5U3RhY2subGFz
dCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGFycmF5LT5tZXRo
b2RUYWJsZSh2bSktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhhcnJheSwgbV9leGVjLCBw
cm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAocHJvcGVydHlTdGFjay5sYXN0KCkuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZShOb25JbmRleFByb3BlcnRpZXNUYWcpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7CkBAIC0xNTQxLDcgKzE1NDEsNyBAQCBTZXJpYWxp
emF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6CiAgICAgICAgICAgICAgICAgaW5wdXRP
YmplY3RTdGFjay5hcHBlbmQoaW5PYmplY3QpOwogICAgICAgICAgICAgICAgIGluZGV4U3RhY2su
YXBwZW5kKDApOwogICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5
TmFtZUFycmF5KG1fZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncykpOwotICAgICAgICAg
ICAgICAgIGluT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2Jq
ZWN0LCBtX2V4ZWMsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7Cisg
ICAgICAgICAgICAgICAgaW5PYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlO
YW1lcyhpbk9iamVjdCwgbV9leGVjLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25N
b2RlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgb2JqZWN0U3RhcnRWaXNpdE1lbWJl
cjoKICAgICAgICAgICAgIEZBTExUSFJPVUdIOwpAQCAtMTYwOSw3ICsxNjA5LDcgQEAgU2VyaWFs
aXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgICAgICAgICBK
U09iamVjdCogb2JqZWN0ID0gaW5wdXRPYmplY3RTdGFjay5sYXN0KCk7CiAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChqc0R5bmFtaWNEb3duY2FzdDxKU01hcCo+KHZtLCBvYmplY3QpKTsKICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXko
bV9leGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKSk7Ci0gICAgICAgICAgICAgICAgICAg
IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fZXhl
YywgcHJvcGVydHlTdGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBtX2V4ZWMsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlKE5vbk1hcFByb3BlcnRpZXNUYWcpOwogICAgICAgICAg
ICAgICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKICAgICAgICAgICAgICAgICAgICAgZ290
byBvYmplY3RTdGFydFZpc2l0TWVtYmVyOwpAQCAtMTY1Myw3ICsxNjUzLDcgQEAgU2VyaWFsaXph
dGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgICAgICAgICBKU09i
amVjdCogb2JqZWN0ID0gaW5wdXRPYmplY3RTdGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChqc0R5bmFtaWNEb3duY2FzdDxKU1NldCo+KHZtLCBvYmplY3QpKTsKICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkobV9l
eGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9i
amVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fZXhlYywg
cHJvcGVydHlTdGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0
LCBtX2V4ZWMsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlKE5vblNldFByb3BlcnRpZXNUYWcpOwogICAgICAgICAgICAg
ICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKICAgICAgICAgICAgICAgICAgICAgZ290byBv
YmplY3RTdGFydFZpc2l0TWVtYmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDIyMTgwMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5n
IGNvcHkpCkBAIC00NDA2LDcgKzQ0MDYsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNW
YWx1ZSBjb25zdHJ1Y3RvciA9ICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yOjpjcmVhdGUoc3RhdGUt
PnZtKCksICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoc3RhdGUtPnZt
KCksICpwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgp
LT5vYmplY3RQcm90b3R5cGUoKSksICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihwcm90b3R5
cGUtPmdsb2JhbE9iamVjdCgpKSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIC8vIFNoYWRvd2luZyBjb25zdHJ1Y3RvciBwcm9wZXJ0eSB0byBlbnN1cmUgcmV1c2lu
ZyB0aGUgc2FtZSBjb25zdHJ1Y3RvciBvYmplY3RcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5w
cm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yLCBEb250RW51bSB8IFJlYWRP
bmx5KTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcHJvdG90eXBl
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBjb25zdHJ1Y3Rv
ciwgRG9udEVudW0gfCBSZWFkT25seSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0b3IpO1xuIik7CiAgICAg
ICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwpAQCAtNDQyMyw3ICs0
NDIzLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICB9XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3JcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRl
LT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gcHJvdG90
eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ9XG5cbiIpOwogCiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5jcHAJKHJldmlzaW9u
IDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0lu
dGVyZmFjZU5hbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgYm9vbCBz
ZXRKU0ludGVyZmFjZU5hbWVDb25zdHJ1Y3RvcihFeGVjUwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0
dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1l
cygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgcmV0
dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rv
ciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCiB2b2lkIEpTSW50ZXJmYWNl
TmFtZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTTWFwTGlrZS5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU01hcExpa2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEs
NyArMTkxLDcgQEAgYm9vbCBzZXRKU01hcExpa2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIAogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBz
dGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSk7CisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQog
CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNNYXBMaWtlU2l6ZUdldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU01hcExpa2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExp
a2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4NSw3ICsxODUsNyBAQCBib29sIHNldEpTUmVhZE9ubHlNYXBMaWtl
Q29uc3RydWN0b3IoRXhlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gcHJvdG90eXBlLT5wdXRE
aXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1JlYWRPbmx5TWFw
TGlrZVNpemVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNSZWFkT25seU1hcExpa2UmIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZl
RE9NT2JqZWN0LmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4OSw3ICsxODksNyBAQCBib29sIHNldEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0
cnVjdG9yCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEg
YnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3Rh
dGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RF
eGNpdGluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VS
ZWFjdGlvbnMuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODIsNyArMTgyLDcgQEAgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yKEV4
ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0
LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52
bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKSk7CisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkp
OwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVX
aXRoQ0VSZWFjdGlvbnNHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMm
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNT
dHJpbmdpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQCBib29sIHNl
dEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1
cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVz
KCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1
cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9y
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVHZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAJKHJldmlzaW9uIDIy
MTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
YWxsVHJhY2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDcgKzIxMyw3IEBAIGJvb2wgc2V0
SlNUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9yKEV4ZWMKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVy
biBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMo
KS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworICAgIHJldHVy
biBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3Is
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRlSW50ZXJmYWNlR2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdENhbGxUcmFjZXImIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCBib29sIHNldEpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gcHJvdG90
eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3Ry
dWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1cm4gcHJvdG90
eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIGJvb2wgSlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3JPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21D
b25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9y
V2l0aE5vSW50ZXJmYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0
aE5vSW50ZXJmYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2kKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgIEpTVmFsdWUgY29uc3Ry
dWN0b3IgPSBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0
cnVjdG9yOjpjcmVhdGUoc3RhdGUtPnZtKCksIEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5v
SW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShzdGF0ZS0+dm0oKSwg
KnByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCktPm9i
amVjdFByb3RvdHlwZSgpKSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHByb3RvdHlwZS0+
Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAvLyBTaGFkb3dpbmcgY29uc3RydWN0b3IgcHJvcGVydHkg
dG8gZW5zdXJlIHJldXNpbmcgdGhlIHNhbWUgY29uc3RydWN0b3Igb2JqZWN0Ci0gICAgcHJvdG90
eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3Ry
dWN0b3IsIGNvbnN0cnVjdG9yLCBEb250RW51bSB8IFJlYWRPbmx5KTsKKyAgICBwcm90b3R5cGUt
PnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIGNvbnN0cnVjdG9y
LCBEb250RW51bSB8IFJlYWRPbmx5KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0
cnVjdG9yKTsKIH0KIApAQCAtMTU0LDcgKzE1NCw3IEBAIGJvb2wgc2V0SlNUZXN0Q3VzdG9tQ29u
c3RydWN0b3JXaXRoTm9JbnQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBwcm90b3R5cGUtPnB1
dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworICAgIHJldHVybiBwcm90b3R5cGUtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpKTsKIH0KIAogYm9vbCBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhO
b0ludGVyZmFjZU9iamVjdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdERPTUpJVC5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MTYsNyArNjE2LDcgQEAgYm9vbCBzZXRKU1Rlc3RET01KSVRDb25zdHJ1Y3RvcihFeGVj
U3RhdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRl
LT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQW55QXR0ckdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwCShy
ZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw3ICsy
MDgsNyBAQCBib29sIHNldEpTVGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IKLSAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRl
LT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpKTsKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFbmFibGVkQnlTZXR0aW5nVGVzdFN1Yk9iakVuYWJs
ZWRCeVNldHRpbmdDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RFbmFi
bGVkQnlTZXR0aW5nJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDcgQEAgYm9vbCBzZXRKU1Rl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0bwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHBy
b3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNv
bnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgcmV0dXJuIHBy
b3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIxR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dEV2ZW50Q29uc3RydWN0b3ImIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRU
YXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyNSw3ICsyMjUsNyBAQCBib29sIHNldEpTVGVzdEV2ZW50VGFy
Z2V0Q29uc3RydWN0b3IoRXhlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8g
U2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gcHJvdG90eXBlLT5w
dXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3Is
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1cm4gcHJvdG90eXBlLT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSXRlbUJvZHkoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0RXZlbnRUYXJnZXQ+OjpDbGFz
c1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OSw3ICsxNTksNyBAQCBib29sIHNldEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVj
dG9yKEV4ZWNTCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qo
c3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25OYW1l
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEV4Y2VwdGlvbiYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZS5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBAIGJvb2wgc2V0SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZUNvbnN0cnUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChz
dGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpKTsKIH0KIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGVBU2VjcmV0QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGUmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdENvbnN0cnVjdG9yKEV4CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8g
U2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gcHJvdG90eXBlLT5w
dXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3Is
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1cm4gcHJvdG90eXBlLT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RSZWd1bGFyQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlz
aW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQy
LDcgKzI0Miw3IEBAIGJvb2wgc2V0SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckMKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3RvcgotICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwg
c3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSkpOworICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0K
IAogYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw3ICsyNDIsNyBA
QCBib29sIHNldEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IK
LSAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9w
ZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsK
KyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNv
bnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIGJvb2wgSlNU
ZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw3ICsyNTQsNyBAQCBib29sIHNldEpTVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gcHJv
dG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29u
c3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1cm4gcHJv
dG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5j
dGlvbkluZGV4ZWRTZXR0ZXJCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURM
T3BlcmF0aW9uPEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj46OkNsYXNzUGFyYW1l
dGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDUzLDcgKzQ1Myw3IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoRXhl
Y1MKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+
dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSkpOworICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
KTsKIH0KIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVy
ZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUu
Y3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTksNyArMTU5LDcgQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0
YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGlu
Z1VuZGVyc2NvcmVSZWFkb25seUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZh
Y2VMZWFkaW5nVW5kZXJzY29yZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVy
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTcxLDcgKzE3MSw3IEBAIGJvb2wgc2V0SlNUZXN0SXRlcmFibGVDb25zdHJ1
Y3RvcihFeGVjU3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVj
dChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpKTsKIH0KIAogc3RydWN0IFRlc3RJdGVyYWJsZUl0ZXJhdG9yVHJhaXRzIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0
aW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3
IEBAIGJvb2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHIKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rv
cgotICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnBy
b3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkp
OworICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1
c3RvbUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciYg
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDcgKzE2NCw3IEBAIGJvb2wgc2V0
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnMKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVy
biBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMo
KS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworICAgIHJldHVy
biBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3Is
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAogc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRp
b248SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZp
c2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzA4LDcgKzMwOCw3IEBAIGJvb2wgc2V0SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0
ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSkpOworICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpKTsKIH0KIAogYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDcgKzMwOCw3IEBAIGJvb2wgc2V0SlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3cKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBwcm90
b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25z
dHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworICAgIHJldHVybiBwcm90
b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAogYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbk93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIsNyArMzIyLDcg
QEAgYm9vbCBzZXRKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
Ci0gICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJv
cGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7
CisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5j
b25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCiBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbk5hbWVkU2V0dGVyQm9keShKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllcj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkz
LDcgKzE5Myw3IEBAIGJvb2wgc2V0SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG8KICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3RvcgotICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwg
c3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSkpOworICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0K
IAogYm9vbCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9J
ZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEsNyBAQCBib29sIHNldEpTVGVzdE5hbWVkRGVsZXRl
ck5vSWRlbnRpZmllckNvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gcHJvdG90eXBlLT5wdXRE
aXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKSk7CiB9CiAKIGJvb2wgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVy
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdF
eGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlz
aW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzNSw3ICsyMzUsNyBAQCBib29sIHNldEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZt
KCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpKTsKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7
CiB9CiAKIGJvb2wgSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb25Pd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRl
cldpdGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDcgKzIzNCw3IEBAIGJv
b2wgc2V0SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAg
IHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5
TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworICAg
IHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3Ry
dWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAogc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyUHJv
dG90eXBlRnVuY3Rpb25OYW1lZERlbGV0ZXJCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlw
ZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyPjo6Q2xh
c3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVs
ZXRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0
ZXIuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzksNyArMjM5LDcgQEAgYm9vbCBzZXRKU1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSW5kZXhlZEdldAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRv
d2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGly
ZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSkpOwogfQogCiBib29sIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0
dGVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0
aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJD
YWxsV2l0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw3ICsyMDAsNyBAQCBib29sIHNldEpT
VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4g
cHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1cm4g
cHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIGJvb2wgSlNUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVy
Tm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lv
biAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNyAr
MjAwLDcgQEAgYm9vbCBzZXRKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbgogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0
cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0
ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSk7CisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCiBi
b29sIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw3ICsyMTEsNyBAQCBib29sIHNldEpTVGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXJDCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gcHJvdG90eXBl
LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0
b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1cm4gcHJvdG90eXBl
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25HZXR0
ZXJOYW1lQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxK
U1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNyArMjYyLDcgQEAgYm9vbCBzZXRK
U1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbgogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJu
IHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygp
LmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgcmV0dXJu
IHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rvciwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCiBib29sIEpTVGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24uY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2Miw3ICsyNjIsNyBAQCBib29sIHNldEpTVGVzdE5hbWVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJl
Y3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKSk7CiB9CiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bk93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjIx
ODAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsNyArMjcz
LDcgQEAgYm9vbCBzZXRKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyQwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yCi0gICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+
cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KSk7CisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCiBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllclByb3RvdHlwZUZ1bmN0aW9uTmFtZWRTZXR0ZXJCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+
OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXIuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5OSw3ICsyOTksNyBAQCBib29sIHNldEpTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gcHJvdG90eXBlLT5wdXRE
aXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNl
dHRlckJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
QW5kU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5j
cHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIyLDcgKzMyMiw3IEBAIGJvb2wgc2V0SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBwcm90b3R5cGUtPnB1
dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworICAgIHJldHVybiBwcm90b3R5cGUtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpKTsKIH0KIAogc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJQcm90b3R5cGVGdW5j
dGlvbk5hbWVkU2V0dGVyQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9w
ZXJhdGlvbjxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyPjo6Q2xh
c3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1
aWx0aW5zLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNyArMjQ5LDcgQEAgYm9vbCBzZXRKU1Rlc3ROYW1lZFNl
dHRlcldpdGhPdmVycmlkZUJ1aQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlwZS0+
cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9y
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgcmV0dXJuIHByb3RvdHlwZS0+
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCiBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJy
aWRlQnVpbHRpbnNPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDcgKzMwMyw3IEBAIGJvb2wgc2V0SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBw
cm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5j
b25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworICAgIHJldHVybiBw
cm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzVW5mb3JnZWFibGVBdHRy
aWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXMmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zLmNwcAko
cmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVC
dWlsdGlucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw3ICsyOTAsNyBAQCBib29sIHNldEpT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4g
cHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1cm4g
cHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVp
bHRpbnNVbmZvcmdlYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RO
YW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMmIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCShyZXZp
c2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Myw3ICsyNDMsNyBAQCBib29sIHNl
dEpTVGVzdE5vZGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1
cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVz
KCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1
cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9y
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3ROb2RlTmFtZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3ROb2RlJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlz
aW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYwLDcgKzIxNjAsNyBAQCBib29sIHNl
dEpTVGVzdE9iakNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1
cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVz
KCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1
cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9y
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDIyMTgw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDcgKzI0NSw3IEBA
IGJvb2wgc2V0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnMKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvcgot
ICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3Bl
cnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwor
ICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29u
c3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAogYm9vbCBKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1dpdGhTZXF1ZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw3ICsyMDEsNyBAQCBi
b29sIHNldEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAg
ICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0
eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAg
ICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0
cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIGJvb2wgSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZU93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNw
cAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQs
NyArMjE0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0bwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBz
dGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSk7CisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQog
CiBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T3ZlcnJpZGVCdWlsdGlu
c1Byb3RvdHlwZUZ1bmN0aW9uTmFtZWRJdGVtQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5
cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zPjo6Q2xhc3NQYXJhbWV0
ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNyArMjA0LDcgQEAgYm9vbCBzZXRKU1Rlc3RQbHVnaW5J
bnRlcmZhY2VDb25zdHJ1Y3RvcgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlwZS0+
cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9y
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgcmV0dXJuIHByb3RvdHlwZS0+
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCiBib29sIEpTVGVzdFBsdWdpbkludGVyZmFjZU93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9u
RXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNyArMjIzLDcgQEAgYm9vbCBzZXRKU1Rl
c3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHBy
b3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNv
bnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgcmV0dXJuIHBy
b3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50UHJvbWlzZUdldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCShyZXZpc2lvbiAy
MjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw3ICsxOTksNyBAQCBib29s
IHNldEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihFCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICBy
ZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5h
bWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICBy
ZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVj
dG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBA
IGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXIKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvcgot
ICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3Bl
cnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwor
ICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29u
c3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAJKHJldmlzaW9uIDIyMTgw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3ICsxNjQsNyBAQCBi
b29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RyCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAg
ICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0
eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAg
ICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0
cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0JiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAgYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAg
cmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlO
YW1lcygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAg
cmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1
Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0
ZUZvb0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHJl
dmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRl
LT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlVmFsdWVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYyLDcgQEAgYm9vbCBzZXRKU1Rlc3RTdHJp
bmdpZmllckNvbnN0cnVjdG9yKEV4ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlw
ZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVj
dG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgcmV0dXJuIHByb3RvdHlw
ZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0U3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keShKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmll
cj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
dHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3Vz
T3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw3IEBAIGJvb2wgc2V0SlNUZXN0U3RyaW5n
aWZpZXJBbm9ueW1vdXNPcGVyYXQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBwcm90b3R5cGUt
PnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rv
ciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworICAgIHJldHVybiBwcm90b3R5cGUt
PnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAogc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uUHJvdG90eXBlRnVuY3Rpb25U
b1N0cmluZ0JvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248
SlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyMjE4MDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5n
aWZpZXJOYW1lZE9wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3ICsxNjQsNyBA
QCBib29sIHNldEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25DCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IK
LSAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9w
ZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsK
KyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNv
bnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9u
UHJvdG90eXBlRnVuY3Rpb25JZGVudGlmaWVyQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5
cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uPjo6Q2xh
c3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lm
aWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1w
bGVtZW50ZWRBcy5jcHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVk
QXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDcgQEAgYm9vbCBzZXRKU1Rlc3RT
dHJpbmdpZmllck9wZXJhdGlvbkltcGxlbQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3Rv
dHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0
cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgcmV0dXJuIHByb3Rv
dHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzUHJvdG90eXBl
RnVuY3Rpb25JZGVudGlmaWVyQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElE
TE9wZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM+OjpDbGFz
c1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1l
ZFRvU3RyaW5nLmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsNyBAQCBib29sIHNldEpTVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gcHJvdG90
eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3Ry
dWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1cm4gcHJvdG90
eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdQcm90b3R5cGVG
dW5jdGlvblRvU3RyaW5nQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9w
ZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc+OjpDbGFzc1Bh
cmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJS
ZWFkT25seUF0dHJpYnV0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3Bw
CShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MCw3ICsxNzAsNyBAQCBib29sIHNldEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlB
dHRyaWJ1CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEg
YnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3Rh
dGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllclJlYWRP
bmx5QXR0cmlidXRlSWRlbnRpZmllckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTdHJp
bmdpZmllclJlYWRPbmx5QXR0cmlidXRlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3Jp
dGVBdHRyaWJ1dGUuY3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNyArMTcxLDcgQEAgYm9vbCBzZXRKU1Rlc3RTdHJp
bmdpZmllclJlYWRXcml0ZUF0dHJpYgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlw
ZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVj
dG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgcmV0dXJuIHByb3RvdHlw
ZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVJZGVudGlmaWVyR2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lv
biAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0VHlwZWRlZnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNyArMjg2LDcgQEAgYm9vbCBz
ZXRKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEV4ZWNTdAogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0
dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1l
cygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgcmV0
dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rv
ciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAkocmV2aXNpb24gMjIx
ODAwKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQ2LDkgKzM0Niw5IEBAIGJvb2wgX05QTl9TZXRQcm9wZXJ0eShOUFAsIE5QT2Jq
ZWN0KiBvLCAKIAogICAgICAgICBpZiAoaS0+aXNTdHJpbmcoKSkgewogICAgICAgICAgICAgUHV0
UHJvcGVydHlTbG90IHNsb3Qob2JqLT5pbXApOwotICAgICAgICAgICAgb2JqLT5pbXAtPm1ldGhv
ZFRhYmxlKCktPnB1dChvYmotPmltcCwgZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIo
ZXhlYywgaS0+c3RyaW5nKCkpLCBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCB2YXJpYW50
LCByb290T2JqZWN0KSwgc2xvdCk7CisgICAgICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUo
dm0pLT5wdXQob2JqLT5pbXAsIGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMs
IGktPnN0cmluZygpKSwgY29udmVydE5QVmFyaWFudFRvVmFsdWUoZXhlYywgdmFyaWFudCwgcm9v
dE9iamVjdCksIHNsb3QpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG9iai0+aW1wLT5t
ZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KG9iai0+aW1wLCBleGVjLCBpLT5udW1iZXIoKSwgY29u
dmVydE5QVmFyaWFudFRvVmFsdWUoZXhlYywgdmFyaWFudCwgcm9vdE9iamVjdCksIGZhbHNlKTsK
KyAgICAgICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgob2JqLT5p
bXAsIGV4ZWMsIGktPm51bWJlcigpLCBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCB2YXJp
YW50LCByb290T2JqZWN0KSwgZmFsc2UpOwogICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0zODksOSArMzg5LDkgQEAgYm9vbCBf
TlBOX1JlbW92ZVByb3BlcnR5KE5QUCwgTlBPYmplY3QqIAogICAgICAgICB9CiAKICAgICAgICAg
aWYgKGktPmlzU3RyaW5nKCkpCi0gICAgICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkob2JqLT5pbXAsIGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVy
KGV4ZWMsIGktPnN0cmluZygpKSk7CisgICAgICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUo
dm0pLT5kZWxldGVQcm9wZXJ0eShvYmotPmltcCwgZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50
aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgb2Jq
LT5pbXAtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChvYmotPmltcCwgZXhl
YywgaS0+bnVtYmVyKCkpOworICAgICAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKHZtKS0+
ZGVsZXRlUHJvcGVydHlCeUluZGV4KG9iai0+aW1wLCBleGVjLCBpLT5udW1iZXIoKSk7CiAKICAg
ICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00
ODYsNyArNDg2LDcgQEAgYm9vbCBfTlBOX0VudW1lcmF0ZShOUFAsIE5QT2JqZWN0KiBvLCBOUAog
ICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAg
ICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVN
b2RlOjpTdHJpbmdzKTsKIAotICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJv
cGVydHlOYW1lcyhvYmotPmltcCwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
KCkpOworICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVz
KG9iai0+aW1wLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAg
ICAgIHVuc2lnbmVkIHNpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocHJvcGVydHlOYW1lcy5z
aXplKCkpOwogICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IGNhbGwgTlBOX01l
bUFsbG9jIGJ1dCB0aGF0J3MgaW4gV2ViS2l0CiAgICAgICAgIE5QSWRlbnRpZmllciogaWRlbnRp
ZmllcnMgPSBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXIqPihtYWxsb2Moc2l6ZW9mKE5QSWRlbnRp
ZmllcikgKiBzaXplKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJh
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXku
Y3BwCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9h
cnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDIxICs3MywyMyBAQCBFbmNvZGVkSlNWYWx1
ZSBSdW50aW1lQXJyYXk6Omxlbmd0aEdldHRlCiAKIHZvaWQgUnVudGltZUFycmF5OjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgUnVudGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0
PFJ1bnRpbWVBcnJheSo+KG9iamVjdCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iamVj
dC0+Z2V0TGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsK
IAogICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKLSAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CisgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7CiAKICAgICBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKIH0KIAogYm9vbCBSdW50aW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIFJ1bnRp
bWVBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOwotICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7CiAgICAgICAg
IHNsb3Quc2V0Q2FjaGVhYmxlQ3VzdG9tKHRoaXNPYmplY3QsIERvbnREZWxldGUgfCBSZWFkT25s
eSB8IERvbnRFbnVtLCB0aGlzT2JqZWN0LT5sZW5ndGhHZXR0ZXIpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CkBAIC0xMjAsNyArMTIyLDcgQEAgYm9vbCBSdW50aW1lQXJyYXk6OnB1dChK
U0NlbGwqIGNlbGwsIEV4ZQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIFJ1bnRpbWVBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lQXJyYXkq
PihjZWxsKTsKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgpIHsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCkgewogICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJv
cihleGVjLCAiUmFuZ2UgZXJyb3IiKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHJldmlzaW9uIDIyMTgwMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDExICszOSwxMiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUnVudGltZUFycmF5KiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBCaW5kaW5nczo6QXJyYXkqIGFycmF5KQogICAgIHsKKyAg
ICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRH
ZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFs
IG9iamVjdAogICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gdGhlIHJpZ2h0IGdsb2JhbCBv
YmplY3QgZm9yICJhcnJheSIuCiAgICAgICAgIFN0cnVjdHVyZSogZG9tU3RydWN0dXJlID0gV2Vi
Q29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxSdW50aW1lQXJyYXk+KGV4ZWMpOwotICAg
ICAgICBSdW50aW1lQXJyYXkqIHJ1bnRpbWVBcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFJ1bnRpbWVBcnJheT4oKmV4ZWMtPmhlYXAoKSkpIFJ1bnRpbWVBcnJheShleGVjLCBkb21T
dHJ1Y3R1cmUpOwotICAgICAgICBydW50aW1lQXJyYXktPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZt
KCksIGFycmF5KTsKKyAgICAgICAgUnVudGltZUFycmF5KiBydW50aW1lQXJyYXkgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxSdW50aW1lQXJyYXk+KHZtLmhlYXApKSBSdW50aW1lQXJyYXko
ZXhlYywgZG9tU3RydWN0dXJlKTsKKyAgICAgICAgcnVudGltZUFycmF5LT5maW5pc2hDcmVhdGlv
bih2bSwgYXJyYXkpOwogICAgICAgICBleGVjLT52bSgpLmhlYXAuYWRkRmluYWxpemVyKHJ1bnRp
bWVBcnJheSwgZGVzdHJveSk7CiAgICAgICAgIHJldHVybiBydW50aW1lQXJyYXk7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCShyZXZpc2lvbiAy
MjE4MDApCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Nyw4ICs2Nyw5IEBAIEVuY29kZWRKU1ZhbHVlIFJ1bnRpbWVNZXRob2Q6
Omxlbmd0aEdldHQKIAogYm9vbCBSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QgJnNsb3QpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBS
dW50aW1lTWV0aG9kKiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVNZXRob2QqPihvYmplY3Qp
OwotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkg
eworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7CiAg
ICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3VzdG9tKHRoaXNPYmplY3QsIERvbnREZWxldGUgfCBS
ZWFkT25seSB8IERvbnRFbnVtLCB0aGlzT2JqZWN0LT5sZW5ndGhHZXR0ZXIpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9t
ZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRo
b2QuaAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
bWV0aG9kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEwICszNywxMSBAQCBwdWJsaWM6CiAgICAg
dHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERhdGE7CiAKLSAgICBzdGF0aWMg
UnVudGltZU1ldGhvZCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFN0cmluZyYgbmFtZSwgQmlu
ZGluZ3M6Ok1ldGhvZCogbWV0aG9kKQorICAgIHN0YXRpYyBSdW50aW1lTWV0aG9kKiBjcmVhdGUo
RXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGNvbnN0IFN0cmluZyYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZCogbWV0aG9kKQogICAg
IHsKLSAgICAgICAgUnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFJ1bnRpbWVNZXRob2Q+KCpleGVjLT5oZWFwKCkpKSBSdW50aW1lTWV0aG9k
KGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBtZXRob2QpOwotICAgICAgICBydW50aW1lTWV0aG9k
LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBuYW1lKTsKKyAgICAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgICAgICBSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UnVudGltZU1ldGhvZD4odm0uaGVhcCkpIFJ1bnRp
bWVNZXRob2QoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIG1ldGhvZCk7CisgICAgICAgIHJ1bnRp
bWVNZXRob2QtPmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsKICAgICAgICAgcmV0dXJuIHJ1bnRp
bWVNZXRob2Q7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3Rh
bmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNl
LmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0
YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNywxMSArMTE3LDEyIEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBDUnVudGltZU1ldGhvZCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBCaW5kaW5nczo6TWV0
aG9kKiBtZXRob2QpCiAgICAgeworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVzZXMgdGhlIHBy
b3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKICAgICAgICAgLy8gV2UgbmVl
ZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAiaSIuCiAgICAgICAgIFN0
cnVjdHVyZSogZG9tU3RydWN0dXJlID0gV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVy
ZTxDUnVudGltZU1ldGhvZD4oZXhlYyk7Ci0gICAgICAgIENSdW50aW1lTWV0aG9kKiBydW50aW1l
TWV0aG9kID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8Q1J1bnRpbWVNZXRob2Q+KCpleGVj
LT5oZWFwKCkpKSBDUnVudGltZU1ldGhvZChnbG9iYWxPYmplY3QsIGRvbVN0cnVjdHVyZSwgbWV0
aG9kKTsKLSAgICAgICAgcnVudGltZU1ldGhvZC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwg
bmFtZSk7CisgICAgICAgIENSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8Q1J1bnRpbWVNZXRob2Q+KHZtLmhlYXApKSBDUnVudGltZU1ldGhv
ZChnbG9iYWxPYmplY3QsIGRvbVN0cnVjdHVyZSwgbWV0aG9kKTsKKyAgICAgICAgcnVudGltZU1l
dGhvZC0+ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOwogICAgICAgICByZXR1cm4gcnVudGltZU1l
dGhvZDsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlw
dE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9XZWJT
Y3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDAyLDcgKzQwMiw3
IEBAIC0gKHZvaWQpc2V0VmFsdWU6KGlkKXZhbHVlIGZvcktleTooTlNTdHIKIAogICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU09iamVjdCo+KHZtLCBbc2VsZiBfaW1w
XSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKLSAgICBvYmplY3QtPm1ldGhv
ZFRhYmxlKCktPnB1dChvYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
U3RyaW5nKGtleSkpLCBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNP
YmplY3RUeXBlLCBbc2VsZiBfcm9vdE9iamVjdF0pLCBzbG90KTsKKyAgICBvYmplY3QtPm1ldGhv
ZFRhYmxlKHZtKS0+cHV0KG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCBTdHJpbmcoa2V5KSksIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZ2YWx1ZSwgT2Jq
Y09iamVjdFR5cGUsIFtzZWxmIF9yb290T2JqZWN0XSksIHNsb3QpOwogCiAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUo
ZXhlYyk7CkBAIC00NTYsNyArNDU2LDcgQEAgLSAodm9pZClyZW1vdmVXZWJTY3JpcHRLZXk6KE5T
U3RyaW5nICopawogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIFtz
ZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShbc2VsZiBfaW1wXSwgZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmcoa2V5KSkpOworICAgIFtzZWxm
IF9pbXBdLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KFtzZWxmIF9pbXBdLCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhrZXkpKSk7CiAKICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29u
c29sZShleGVjKTsKQEAgLTUzNyw3ICs1MzcsNyBAQCAtICh2b2lkKXNldFdlYlNjcmlwdFZhbHVl
QXRJbmRleDoodW5zaWduCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0g
ICAgW3NlbGYgX2ltcF0tPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoW3NlbGYgX2ltcF0sIGV4
ZWMsIGluZGV4LCBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmpl
Y3RUeXBlLCBbc2VsZiBfcm9vdE9iamVjdF0pLCBmYWxzZSk7CisgICAgW3NlbGYgX2ltcF0tPm1l
dGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleChbc2VsZiBfaW1wXSwgZXhlYywgaW5kZXgsIGNvbnZl
cnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZ2YWx1ZSwgT2JqY09iamVjdFR5cGUsIFtzZWxmIF9y
b290T2JqZWN0XSksIGZhbHNlKTsKIAogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpIHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCShyZXZpc2lvbiAyMjE4MDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjgsMTEgKzE2OCwxMiBAQCBjbGFzcyBPYmpDUnVudGltZU1ldGhvZCA6IHB1
YmxpYyBSdW50aW1lCiBwdWJsaWM6CiAgICAgc3RhdGljIE9iakNSdW50aW1lTWV0aG9kKiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIEJpbmRpbmdzOjpNZXRob2QqIG1ldGhvZCkKICAgICB7CisgICAgICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRH
ZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFs
IG9iamVjdAogICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gdGhlIHJpZ2h0IGdsb2JhbCBv
YmplY3QgZm9yICJpIi4KICAgICAgICAgU3RydWN0dXJlKiBkb21TdHJ1Y3R1cmUgPSBXZWJDb3Jl
OjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPE9iakNSdW50aW1lTWV0aG9kPihleGVjKTsKLSAg
ICAgICAgT2JqQ1J1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxPYmpDUnVudGltZU1ldGhvZD4oKmV4ZWMtPmhlYXAoKSkpIE9iakNSdW50aW1l
TWV0aG9kKGdsb2JhbE9iamVjdCwgZG9tU3RydWN0dXJlLCBtZXRob2QpOwotICAgICAgICBydW50
aW1lTWV0aG9kLT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBuYW1lKTsKKyAgICAgICAgT2Jq
Q1J1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxPYmpDUnVudGltZU1ldGhvZD4odm0uaGVhcCkpIE9iakNSdW50aW1lTWV0aG9kKGdsb2JhbE9i
amVjdCwgZG9tU3RydWN0dXJlLCBtZXRob2QpOworICAgICAgICBydW50aW1lTWV0aG9kLT5maW5p
c2hDcmVhdGlvbih2bSwgbmFtZSk7CiAgICAgICAgIHJldHVybiBydW50aW1lTWV0aG9kOwogICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJKHJl
dmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGlt
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw5ICs5NywxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBPYmpjSW5zdGFuY2UqIGluc3RhbmNlLCBjb25zdCBTdHJp
bmcmIHByb3BlcnR5TmFtZSkKICAgICB7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0
aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAogICAgICAgICBTdHJ1
Y3R1cmUqIGRvbVN0cnVjdHVyZSA9IFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8
T2JqY0ZhbGxiYWNrT2JqZWN0SW1wPihleGVjKTsKLSAgICAgICAgT2JqY0ZhbGxiYWNrT2JqZWN0
SW1wKiBmYWxsYmFja09iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE9iamNGYWxs
YmFja09iamVjdEltcD4oKmV4ZWMtPmhlYXAoKSkpIE9iamNGYWxsYmFja09iamVjdEltcChnbG9i
YWxPYmplY3QsIGRvbVN0cnVjdHVyZSwgaW5zdGFuY2UsIHByb3BlcnR5TmFtZSk7CisgICAgICAg
IE9iamNGYWxsYmFja09iamVjdEltcCogZmFsbGJhY2tPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxPYmpjRmFsbGJhY2tPYmplY3RJbXA+KHZtLmhlYXApKSBPYmpjRmFsbGJhY2tP
YmplY3RJbXAoZ2xvYmFsT2JqZWN0LCBkb21TdHJ1Y3R1cmUsIGluc3RhbmNlLCBwcm9wZXJ0eU5h
bWUpOwogICAgICAgICBmYWxsYmFja09iamVjdC0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0
KTsKICAgICAgICAgcmV0dXJuIGZhbGxiYWNrT2JqZWN0OwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDI1Niw3ICs0MjU2LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVDYXB0aW9uQ29u
dAogICAgICAgICByZXR1cm47CiAKICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwotICAgIEpT
Qzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBtZXRob2RPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENh
bGxEYXRhKG1ldGhvZE9iamVjdCwgY2FsbERhdGEpOworICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5
cGUgPSBtZXRob2RPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEobWV0aG9kT2Jq
ZWN0LCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IEpTQzo6Q2FsbFR5cGU6Ok5vbmUp
CiAgICAgICAgIHJldHVybjsKIApAQCAtNjk5OCw3ICs2OTk4LDggQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpzZXRDb250cm9sbGVySlNQcgogICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENv
bnRyb2xsZXIgPSBkb2N1bWVudCgpLmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNj
cmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7CiAgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVyVmFsdWUg
PSBjb250cm9sbGVySlNWYWx1ZSgqZXhlYywgKmdsb2JhbE9iamVjdCwgKnRoaXMpOwogICAgIGlm
IChjb250cm9sbGVyVmFsdWUuaXNOdWxsKCkpCkBAIC03MDA5LDcgKzcwMTAsNyBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnNldENvbnRyb2xsZXJKU1ByCiAgICAgaWYgKCFjb250cm9sbGVyT2Jq
ZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBjb250cm9sbGVyT2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5wdXQoY29udHJvbGxlck9iamVjdCwgZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsIHByb3BlcnR5TmFtZSksIHByb3BlcnR5VmFsdWUsIHByb3BlcnR5U2xvdCk7Cisg
ICAgY29udHJvbGxlck9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQoY29udHJvbGxlck9iamVj
dCwgZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHByb3BlcnR5TmFtZSks
IHByb3BlcnR5VmFsdWUsIHByb3BlcnR5U2xvdCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQpAQCAtNzA1OSw3
ICs3MDYwLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaAogICAg
IEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uID0gZnVuY3Rpb25WYWx1ZS50b09iamVjdChleGVjKTsK
ICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIEpTQzo6Q2FsbERhdGEgY2FsbERh
dGE7Ci0gICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5tZXRob2RUYWJsZSgp
LT5nZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOworICAgIEpTQzo6Q2FsbFR5cGUgY2Fs
bFR5cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShmdW5jdGlvbiwg
Y2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBKU0M6OkNhbGxUeXBlOjpOb25lKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTcxNDMsNyArNzE0NCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6dXBkYXRlTWVkaWFDb250cm8KICAgICBKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiA9IGZ1bmN0
aW9uVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
ICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwotICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUg
PSBmdW5jdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRh
KTsKKyAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0g
SlNDOjpDYWxsVHlwZTo6Tm9uZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC03MTg1LDcgKzcxODYs
NyBAQCBTdHJpbmcgSFRNTE1lZGlhRWxlbWVudDo6Z2V0Q3VycmVudE1lZGlhCiAgICAgSlNDOjpK
U09iamVjdCogZnVuY3Rpb24gPSBmdW5jdGlvblZhbHVlLnRvT2JqZWN0KGV4ZWMpOwogICAgIHNj
b3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKLSAg
ICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPm1ldGhvZFRhYmxlKCktPmdldENh
bGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9
IGZ1bmN0aW9uLT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0
YSk7CiAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OwogICAgIGlmIChjYWxs
VHlwZSA9PSBKU0M6OkNhbGxUeXBlOjpOb25lKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmco
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50
LmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg2LDcgKzM4Niw3IEBAIHZvaWQg
SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkQWRkVXNlckEKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwotICAgIGF1dG8gY2FsbFR5cGUgPSBvdmVy
bGF5LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShvdmVybGF5LCBjYWxsRGF0YSk7CisgICAg
YXV0byBjYWxsVHlwZSA9IG92ZXJsYXktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEob3Zl
cmxheSwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBKU0M6OkNhbGxUeXBlOjpOb25l
KQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwMiwxMiArMzgwMiwxMyBAQCBib29sIEludGVybmFs
czo6aXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlCiAKIEpTVmFsdWUgSW50ZXJuYWxzOjpjbG9uZUFy
cmF5QnVmZmVyKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSBidWZmZXIsIEpTVmFsdWUg
c3JjQnl0ZU9mZnNldCwgSlNWYWx1ZSBzcmNMZW5ndGgpCiB7CisgICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS52bUVu
dHJ5R2xvYmFsT2JqZWN0KCk7Ci0gICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHN0YXRlLnZtKCkuY2xpZW50RGF0YSk7CisgICAgSlNW
TUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpOwogICAgIGNvbnN0IElkZW50aWZpZXImIHByaXZhdGVOYW1lID0gY2xpZW50
RGF0YS0+YnVpbHRpbk5hbWVzKCkuY2xvbmVBcnJheUJ1ZmZlclByaXZhdGVOYW1lKCk7CiAgICAg
SlNWYWx1ZSB2YWx1ZTsKICAgICBQcm9wZXJ0eVNsb3QgcHJvcGVydHlTbG90KHZhbHVlLCBQcm9w
ZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKLSAgICBnbG9iYWxPYmplY3QtPm1l
dGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsICZzdGF0ZSwgcHJp
dmF0ZU5hbWUsIHByb3BlcnR5U2xvdCk7CisgICAgZ2xvYmFsT2JqZWN0LT5tZXRob2RUYWJsZSh2
bSktPmdldE93blByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsICZzdGF0ZSwgcHJpdmF0ZU5hbWUs
IHByb3BlcnR5U2xvdCk7CiAgICAgdmFsdWUgPSBwcm9wZXJ0eVNsb3QuZ2V0VmFsdWUoJnN0YXRl
LCBwcml2YXRlTmFtZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzRnVuY3Rpb24oKSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMjE4MDApCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE3LTA5LTA5ICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBdm9pZCBkdXBsaWNhdGUgY29tcHV0YXRpb25zIG9m
IEV4ZWNTdGF0ZTo6dm0oKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NjY0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2QuaDoKKyAg
ICAgICAgKFdlYktpdDo6SlNOUE1ldGhvZDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNP
YmplY3Q6OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6cmVtb3Zl
UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjplbnVtZXJhdGUpOgorCiAy
MDE3LTA5LTA4ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjIxNzczLgpJbmRleDogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2QuaAko
cmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvSlNOUE1ldGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0MywxMCBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgSlNOUE1ldGhvZCogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
TlBJZGVudGlmaWVyIG5wSWRlbnQpCiAgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICAgICAgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNyZWF0
ZVN0cnVjdHVyZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rp
b25Qcm90b3R5cGUoKSk7Ci0gICAgICAgIEpTTlBNZXRob2QqIG1ldGhvZCA9IG5ldyAoSlNDOjph
bGxvY2F0ZUNlbGw8SlNOUE1ldGhvZD4oKmV4ZWMtPmhlYXAoKSkpIEpTTlBNZXRob2QoZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUsIG5wSWRlbnQpOwotICAgICAgICBtZXRob2QtPmZpbmlzaENyZWF0
aW9uKGV4ZWMtPnZtKCksIG5hbWUpOworICAgICAgICBKU05QTWV0aG9kKiBtZXRob2QgPSBuZXcg
KEpTQzo6YWxsb2NhdGVDZWxsPEpTTlBNZXRob2Q+KHZtLmhlYXApKSBKU05QTWV0aG9kKGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlLCBucElkZW50KTsKKyAgICAgICAgbWV0aG9kLT5maW5pc2hDcmVh
dGlvbih2bSwgbmFtZSk7CiAgICAgICAgIHJldHVybiBtZXRob2Q7CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UEpTT2JqZWN0LmNwcAkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
Miw5ICsyMDIsOSBAQCBib29sIE5QSlNPYmplY3Q6OnNldFByb3BlcnR5KE5QSWRlbnRpZmllCiAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0gbV9vYmplY3RNYXAtPmNvbnZlcnROUFZhcmlhbnRUb0pTVmFs
dWUoZXhlYywgbV9vYmplY3RNYXAtPmdsb2JhbE9iamVjdCgpLCAqdmFsdWUpOwogICAgIGlmIChp
ZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKSB7CiAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KG1fanNPYmplY3QuZ2V0KCkpOwotICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5w
dXQobV9qc09iamVjdC5nZXQoKSwgZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4
ZWMsIGlkZW50aWZpZXJSZXApLCBqc1ZhbHVlLCBzbG90KTsKKyAgICAgICAgbV9qc09iamVjdC0+
bWV0aG9kVGFibGUodm0pLT5wdXQobV9qc09iamVjdC5nZXQoKSwgZXhlYywgaWRlbnRpZmllckZy
b21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApLCBqc1ZhbHVlLCBzbG90KTsKICAg
ICB9IGVsc2UKLSAgICAgICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCht
X2pzT2JqZWN0LmdldCgpLCBleGVjLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSwganNWYWx1ZSwg
ZmFsc2UpOworICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgo
bV9qc09iamVjdC5nZXQoKSwgZXhlYywgaWRlbnRpZmllclJlcC0+bnVtYmVyKCksIGpzVmFsdWUs
IGZhbHNlKTsKICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIAogICAgIHJldHVybiB0
cnVlOwpAQCAtMjMwLDE0ICsyMzAsMTQgQEAgYm9vbCBOUEpTT2JqZWN0OjpyZW1vdmVQcm9wZXJ0
eShOUElkZW50aQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShtX2pz
T2JqZWN0LmdldCgpLCBleGVjLCBpZGVudGlmaWVyKTsKKyAgICAgICAgbV9qc09iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eShtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBpZGVu
dGlmaWVyKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIW1fanNPYmplY3QtPmhhc1Byb3Bl
cnR5KGV4ZWMsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpKSkgewogICAgICAgICAgICAgc2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
Ci0gICAgICAgIG1fanNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRl
eChtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSk7CisgICAg
ICAgIG1fanNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KG1f
anNPYmplY3QuZ2V0KCksIGV4ZWMsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpKTsKICAgICB9CiAK
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwpAQCAtMjQ5LDExICsyNDksMTIgQEAgYm9vbCBO
UEpTT2JqZWN0OjplbnVtZXJhdGUoTlBJZGVudGlmaWVyKgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IG1fb2JqZWN0TWFwLT5nbG9iYWxFeGVjKCk7CiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAogICAgIFByb3Bl
cnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5n
cyk7Ci0gICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyhtX2pz
T2JqZWN0LmdldCgpLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7Cisg
ICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKG1fanNPYmpl
Y3QuZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKIAogICAg
IE5QSWRlbnRpZmllciogbmFtZUlkZW50aWZpZXJzID0gbnBuTWVtTmV3QXJyYXk8TlBJZGVudGlm
aWVyPihwcm9wZXJ0eU5hbWVzLnNpemUoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIyMTgwMCkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE3LTA5LTA5ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBdm9pZCBkdXBsaWNhdGUgY29tcHV0
YXRpb25zIG9mIEV4ZWNTdGF0ZTo6dm0oKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NjY0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
Omludm9rZURlZmF1bHQpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6c2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OnJlbW92ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5OjplbnVtZXJhdGUpOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVk
L1Byb3h5SW5zdGFuY2UubW06CisgICAgICAgIChXZWJLaXQ6OlByb3h5UnVudGltZU1ldGhvZDo6
Y3JlYXRlKToKKwogMjAxNy0wOS0wOCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIyMTc3My4KSW5kZXg6
IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVn
aW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDIyMTgw
MCkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTYwLDcgKzk2MCw3IEBAIGJv
b2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UKIAogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2Jh
bEV4ZWMoKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEob2JqZWN0LCBjYWxsRGF0YSk7Cisg
ICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERh
dGEob2JqZWN0LCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25l
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTk5Niw3ICs5OTYsNyBAQCBib29sIE5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y29uc3RyCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJh
bWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwog
CiAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwotICAgIENvbnN0cnVjdFR5cGUgY29u
c3RydWN0VHlwZSA9IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q29uc3RydWN0RGF0YShvYmpl
Y3QsIGNvbnN0cnVjdERhdGEpOworICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IG9i
amVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRDb25zdHJ1Y3REYXRhKG9iamVjdCwgY29uc3RydWN0
RGF0YSk7CiAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZTo6Tm9uZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMDg0LDcgKzEwODQsNyBAQCBib29sIE5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0UHJvCiAKICAgICBKU1ZhbHVlIHZhbHVlID0gZGVtYXJz
aGFsVmFsdWUoZXhlYywgdmFsdWVEYXRhLCB2YWx1ZUxlbmd0aCk7CiAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3Qob2JqZWN0KTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dChvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIG9iamVjdC0+bWV0aG9kVGFi
bGUodm0pLT5wdXQob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKICAg
ICAKICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTEx
Miw3ICsxMTEyLDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldFBybwog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2lu
V29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKICAgICAKICAgICBKU1ZhbHVlIHZhbHVlID0gZGVtYXJz
aGFsVmFsdWUoZXhlYywgdmFsdWVEYXRhLCB2YWx1ZUxlbmd0aCk7Ci0gICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5wdXRCeUluZGV4KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
ZmFsc2UpOworICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KG9iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgZmFsc2UpOwogICAgIAogICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTQzLDcgKzExNDMsNyBAQCBib29s
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmVtb3ZlCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgCi0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2
bSktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTE3Myw3ICsxMTcz
LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbW92ZQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICBvYmpl
Y3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KG9iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lKTsKICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0
cnVlOwogfQpAQCAtMTI3Nyw3ICsxMjc3LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OmVudW1lcgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9i
YWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKICAKICAgICBQcm9wZXJ0eU5h
bWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwot
ICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSgpKTsKIAogICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheSo+IGFycmF5
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMuc2l6ZSgpOyBpKyspIHsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0
YW5jZS5tbQkocmV2aXNpb24gMjIxODAwKQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1
Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTgyLDExICsx
ODIsMTIgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFByb3h5UnVudGltZU1ldGhvZCogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kKiBtZXRob2QpCiAgICAgeworICAgICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0
RE9NU3RydWN0dXJlIHVzZXMgdGhlIHByb3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBv
YmplY3QKICAgICAgICAgLy8gZXhlYy12bSgpIGlzIGFsc28gbGlrZWx5IHdyb25nLgogICAgICAg
ICBTdHJ1Y3R1cmUqIGRvbVN0cnVjdHVyZSA9IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8UHJv
eHlSdW50aW1lTWV0aG9kPihleGVjKTsKLSAgICAgICAgUHJveHlSdW50aW1lTWV0aG9kKiBydW50
aW1lTWV0aG9kID0gbmV3IChhbGxvY2F0ZUNlbGw8UHJveHlSdW50aW1lTWV0aG9kPigqZXhlYy0+
aGVhcCgpKSkgUHJveHlSdW50aW1lTWV0aG9kKGdsb2JhbE9iamVjdCwgZG9tU3RydWN0dXJlLCBt
ZXRob2QpOwotICAgICAgICBydW50aW1lTWV0aG9kLT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgp
LCBuYW1lKTsKKyAgICAgICAgUHJveHlSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kID0gbmV3
IChhbGxvY2F0ZUNlbGw8UHJveHlSdW50aW1lTWV0aG9kPih2bS5oZWFwKSkgUHJveHlSdW50aW1l
TWV0aG9kKGdsb2JhbE9iamVjdCwgZG9tU3RydWN0dXJlLCBtZXRob2QpOworICAgICAgICBydW50
aW1lTWV0aG9kLT5maW5pc2hDcmVhdGlvbih2bSwgbmFtZSk7CiAgICAgICAgIHJldHVybiBydW50
aW1lTWV0aG9kOwogICAgIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>